<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:lang="en">
  <siteinfo>
    <sitename>cppreference.com</sitename>
    <base>http://en.cppreference.com/w/Main_Page</base>
    <generator>MediaWiki 1.21.2</generator>
    <case>case-sensitive</case>
    <namespaces>
      <namespace key="-2" case="case-sensitive">Media</namespace>
      <namespace key="-1" case="first-letter">Special</namespace>
      <namespace key="0" case="case-sensitive" />
      <namespace key="1" case="case-sensitive">Talk</namespace>
      <namespace key="2" case="first-letter">User</namespace>
      <namespace key="3" case="first-letter">User talk</namespace>
      <namespace key="4" case="case-sensitive">Cppreference</namespace>
      <namespace key="5" case="case-sensitive">Cppreference talk</namespace>
      <namespace key="6" case="case-sensitive">File</namespace>
      <namespace key="7" case="case-sensitive">File talk</namespace>
      <namespace key="8" case="first-letter">MediaWiki</namespace>
      <namespace key="9" case="first-letter">MediaWiki talk</namespace>
      <namespace key="10" case="case-sensitive">Template</namespace>
      <namespace key="11" case="case-sensitive">Template talk</namespace>
      <namespace key="12" case="case-sensitive">Help</namespace>
      <namespace key="13" case="case-sensitive">Help talk</namespace>
      <namespace key="14" case="case-sensitive">Category</namespace>
      <namespace key="15" case="case-sensitive">Category talk</namespace>
    </namespaces>
  </siteinfo>
  <page>
    <title>Cppreference:About</title>
    <ns>4</ns>
    <id>2071</id>
    <redirect title="Cppreference:FAQ" />
    <revision>
      <id>4436</id>
      <timestamp>2011-06-19T15:42:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Cppreference:FAQ]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Cppreference:FAQ]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Administrators</title>
    <ns>4</ns>
    <id>6551</id>
    <revision>
      <id>25844</id>
      <parentid>25841</parentid>
      <timestamp>2012-04-27T20:31:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="268">Need help creating an account so I could access and learn c++ please let me know I don't know the code
: What's the username of the account you want to create? Non-latin characters are disabled for administrative reasons. -- [[User:P12|P12]] 13:31, 27 April 2012 (PDT)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Archives</title>
    <ns>4</ns>
    <id>2781</id>
    <revision>
      <id>90238</id>
      <parentid>88187</parentid>
      <timestamp>2017-02-14T07:20:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>new version of the offline archive</comment>
      <text xml:space="preserve" bytes="4645">{{title|Archives for offline viewing}}

For convenience, several versions of the wiki suitable for offline viewing are available.

===Html book===

This html book is an offline copy of the website with unnecessary UI elements stripped out. Choose this if you just want to access cppreference.com via a browser while without internet connection.

{|
| rowspan=2 style=&quot;padding-right:1em;&quot; | 14 February 2017&lt;br/&gt;{{small|[[Cppreference:Old archives|Old versions]]}}
| [[File:html_book_20170214.zip]] 
|-
| [[File:html_book_20170214.tar.gz]]
|}

===Devhelp book===

[https://wiki.gnome.org/Apps/Devhelp Devhelp] is a documentation browser for GTK/Gnome.

The book is available as {{tt|cppreference-doc-en-html}} {{tt|deb}} package in the official [https://packages.debian.org/search?keywords=cppreference&amp;searchon=names&amp;suite=all&amp;section=all Debian ] and [http://packages.ubuntu.com/search?keywords=cppreference&amp;searchon=names&amp;suite=all&amp;section=all Ubuntu] repositories.

For arch users, the package {{tt|cppreference-devhelp}} could be found [https://aur.archlinux.org/packages/cppreference-devhelp/ here], which can be installed from AUR by tools like yaourt.

===Qt help book===

{{tt|qch}} is a documentation format for use in the Qt tools such as [https://wiki.qt.io/Qt_Creator QtCreator] or [http://doc.qt.io/qt-5/qtassistant-index.html Qt Assistant]. 

The {{tt|qch}} book below contains a version of the html book, adapted for use with the Qt tools. Search also works.

:'''Note''': Old versions of QtCreator or QtAssistant display the documentation improperly. If you see bad formatting, please update these programs. The oldest versions that display the contents correctly are QtCreator v3.0 and QtAssistant v4.8.6.

{|
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 14 February 2017&lt;br/&gt;{{small|[[Cppreference:Old archives|Old versions]]}}
| [[File:qch_book_20170214.zip]] 
|-
| [[File:qch_book_20170214.tar.gz]]
|}

The book is available as {{tt|cppreference-doc-en-qch}} {{tt|deb}} package in the official [https://packages.debian.org/search?keywords=cppreference&amp;searchon=names&amp;suite=all&amp;section=all Debian ] and [http://packages.ubuntu.com/search?keywords=cppreference&amp;searchon=names&amp;suite=all&amp;section=all Ubuntu] repositories.

The book is also provided by AUR package [https://aur.archlinux.org/packages/cppreference-qt/ cppreference-qt] for Arch Linux users.

===Doxygen tag file===
[http://www.stack.nl/~dimitri/doxygen Doxygen] is a tool to automatically generate documentation from source code comments. It supports automatic linking of C++ names to external documentation via [http://www.stack.nl/~dimitri/doxygen/manual/external.html tag file] functionality. Two tag files are provided:

* '''local''': [[File:cppreference-doxygen-local.tag.xml]] for linking to &quot;html book&quot; archive that is described above. The &quot;html book&quot; archive includes this file.

* '''web''': [[File:cppreference-doxygen-web.tag.xml]] for linking directly to cppreference.com website.


In order to support external cppreference documentation, Doxyfile needs to be modified as follows:

* If the link target is local archive, add the following line:

{{tt|1=TAGFILES += &quot;location/of/cppreference-doxygen-local.tag.xml=/location/of/html/book/root/&quot;}}

* If the link target is cppreference.com, add the following line:

{{tt|1=&lt;nowiki&gt;TAGFILES += &quot;location/of/cppreference-doxygen-web.tag.xml=http://en.cppreference.com/w/&quot;&lt;/nowiki&gt;}}

===Manpages===

Automatically generated man pages are maintained [https://github.com/jeaye/stdman here]. Installation notes are included in the README and updates follow the offline archive releases.

===Raw archive===

This archive is a raw copy created using [http://www.gnu.org/software/wget/ Wget]. Note that this archive is not useful for viewing as-is, please use the HTML book instead. Note: the utility scripts and a makefile are contained in this package, so it can be used as full upstream source.

{|
| rowspan=2 style=&quot;padding-right:1em;&quot; | 14 February 2017&lt;br/&gt;{{small|[[Cppreference:Old archives|Old versions]]}}
| [[File:cppreference-doc-20170214.zip]] 
|-
| [[File:cppreference-doc-20170214.tar.gz]]
|}

===Bugs===

All bugs in the offline archives should be reported either to the [http://en.cppreference.com/w/Cppreference_talk:Archives talk page] or to the [https://github.com/p12tic/cppreference-doc/issues issues page] of the cppreference-doc github project.

===See also===

The utility scripts are maintained in [http://github.com/p12tic/cppreference-doc this] git repository.

The debian packaging information is maintained in [http://github.com/p12tic/cppreference-doc-debian this] git repository.</text>
      <sha1>lucegjnyaep3xrpdsp1bi6s3epq5tfi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Copyright/CC-BY-SA</title>
    <ns>4</ns>
    <id>2069</id>
    <revision>
      <id>4434</id>
      <timestamp>2011-06-19T15:39:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot; {{ombox | text       = &lt;center&gt;&lt;div style=&quot;font-size:150%; font-weight:bold; padding: 0.3em;&quot;&gt;Creative Commons Deed&lt;/div&gt; This is a human-readable summary of the full license be...&quot;</comment>
      <text xml:space="preserve" bytes="23347">
{{ombox
| text       = &lt;center&gt;&lt;div style=&quot;font-size:150%; font-weight:bold; padding: 0.3em;&quot;&gt;Creative Commons Deed&lt;/div&gt;
This is a human-readable summary of the full license below.&lt;/center&gt;
You are free:
* '''to Share'''—to copy, distribute and transmit the work, and
* '''to Remix'''—to adapt the work
Under the following conditions:
* '''Attribution'''—You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work.)
* '''Share Alike'''—If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license.
With the understanding that:
* '''Waiver'''—Any of the above conditions can be waived if you get permission from the copyright holder.
* '''Other Rights'''—In no way are any of the following rights affected by the license:
** your fair dealing or fair use rights;
** the author's moral rights; and
** rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights.
* '''Notice'''—For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do that is with a link to http://creativecommons.org/licenses/by-sa/3.0/
| image = [[File:Cc.logo.circle.svg|40px]]}}

=License=

{{ombox|image=none|text=CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN &quot;AS-IS&quot; BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.}}

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE (&quot;CCPL&quot; OR &quot;LICENSE&quot;). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.

==&lt;span id=&quot;1&quot;&gt;&lt;/span&gt;1. Definitions==

&lt;ol type=&quot;a&quot;&gt;
&lt;li id=&quot;1.a&quot;&gt;&quot;'''Adaptation'''&quot; means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image (&quot;synching&quot;) will be considered an Adaptation for the purpose of this License.&lt;/li&gt;
&lt;li id=&quot;1.b&quot;&gt;&quot;'''Collection'''&quot; means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.&lt;/li&gt;
&lt;li id=&quot;1.c&quot;&gt;&quot;'''Creative Commons Compatible License'''&quot; means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.&lt;/li&gt;
&lt;li id=&quot;1.d&quot;&gt;&quot;'''Distribute'''&quot; means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.&lt;/li&gt;
&lt;li id=&quot;1.e&quot;&gt;&quot;'''License Elements'''&quot; means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.&lt;/li&gt;
&lt;li id=&quot;1.f&quot;&gt;&quot;'''Licensor'''&quot; means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.&lt;/li&gt;
&lt;li id=&quot;1.g&quot;&gt;&quot;'''Original Author'''&quot; means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.&lt;/li&gt;
&lt;li id=&quot;1.h&quot;&gt;&quot;'''Work'''&quot; means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.&lt;/li&gt;
&lt;li id=&quot;1.i&quot;&gt;&quot;'''You'''&quot; means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.&lt;/li&gt;
&lt;li id=&quot;1.j&quot;&gt;&quot;'''Publicly Perform'''&quot; means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.&lt;/li&gt;
&lt;li id=&quot;1.k&quot;&gt;&quot;'''Reproduce'''&quot; means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.&lt;/li&gt;
&lt;/ol&gt;

==&lt;span id=&quot;2&quot;&gt;&lt;/span&gt;2. Fair Dealing Rights==
Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.

==&lt;span id=&quot;3&quot;&gt;&lt;/span&gt;3. License Grant==
Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:

&lt;ol type=&quot;a&quot;&gt;
&lt;li id=&quot;3.a&quot;&gt;to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;&lt;/li&gt;
&lt;li id=&quot;3.b&quot;&gt;to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked &quot;The original work was translated from English to Spanish,&quot; or a modification could indicate &quot;The original work has been modified.&quot;;&lt;/li&gt;
&lt;li id=&quot;3.c&quot;&gt;to Distribute and Publicly Perform the Work including as incorporated in Collections; and,&lt;/li&gt;
&lt;li id=&quot;3.d&quot;&gt;to Distribute and Publicly Perform Adaptations.&lt;/li&gt;
&lt;li id=&quot;3.e&quot;&gt;For the avoidance of doubt:
	&lt;ol type=&quot;i&quot;&gt;
		&lt;li id=&quot;3.e.i&quot;&gt;'''Non-waivable Compulsory License Schemes.''' In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;&lt;/li&gt;
		&lt;li id=&quot;3.e.ii&quot;&gt;'''Waivable Compulsory License Schemes.''' In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,&lt;/li&gt;
		&lt;li id=&quot;3.e.iii&quot;&gt;'''Voluntary License Schemes.''' The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.&lt;/li&gt;
	&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.

==&lt;span id=&quot;4&quot;&gt;&lt;/span&gt;4. Restrictions==
The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:

&lt;ol type=&quot;a&quot;&gt;
&lt;li id=&quot;4.a&quot;&gt;You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.&lt;/li&gt;
&lt;li id=&quot;4.b&quot;&gt;You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the &quot;Applicable License&quot;), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.&lt;/li&gt;
&lt;li id=&quot;4.c&quot;&gt;If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution (&quot;Attribution Parties&quot;) in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., &quot;French translation of the Work by Original Author,&quot; or &quot;Screenplay based on original Work by Original Author&quot;). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.&lt;/li&gt;
&lt;li id=&quot;4.d&quot;&gt;Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.&lt;/li&gt;
&lt;/ol&gt;

==&lt;span id=&quot;5&quot;&gt;&lt;/span&gt;5. Representations, Warranties and Disclaimer==

UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.

==&lt;span id=&quot;6&quot;&gt;&lt;/span&gt;6. Limitation on Liability==
EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

==&lt;span id=&quot;7&quot;&gt;&lt;/span&gt;7. Termination==

&lt;ol type=&quot;a&quot;&gt;
&lt;li id=&quot;7.a&quot;&gt;This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.&lt;/li&gt;
&lt;li id=&quot;7.b&quot;&gt;Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.&lt;/li&gt;
&lt;/ol&gt;

==&lt;span id=&quot;8&quot;&gt;&lt;/span&gt;8. Miscellaneous==

&lt;ol type=&quot;a&quot;&gt;
&lt;li id=&quot;8.a&quot;&gt;Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.&lt;/li&gt;
&lt;li id=&quot;8.b&quot;&gt;Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.&lt;/li&gt;
&lt;li id=&quot;8.c&quot;&gt;If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.&lt;/li&gt;
&lt;li id=&quot;8.d&quot;&gt;No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.&lt;/li&gt;
&lt;li id=&quot;8.e&quot;&gt;This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.&lt;/li&gt;
&lt;li id=&quot;8.f&quot;&gt;The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.&lt;/li&gt;
&lt;/ol&gt;

{{ombox|image=none|text=
&lt;h3&gt;Creative Commons Notice&lt;/h3&gt;

Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.

Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark &quot;Creative Commons&quot; or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License.

Creative Commons may be contacted at http://creativecommons.org/.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Copyright/GDFL</title>
    <ns>4</ns>
    <id>2070</id>
    <revision>
      <id>4435</id>
      <timestamp>2011-06-19T15:40:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot; Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;  Everyone is permitted to copy and distribute verbatim c...&quot;</comment>
      <text xml:space="preserve" bytes="22865">
Version 1.3, 3 November 2008
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

== 0. PREAMBLE ==

The purpose of this License is to make a manual, textbook, or other functional and useful document &quot;free&quot; in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of &quot;copyleft&quot;, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

== 1. APPLICABILITY AND DEFINITIONS==

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The &quot;Document&quot;, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as &quot;you&quot;. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A &quot;Modified Version&quot; of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A &quot;Secondary Section&quot; is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The &quot;Invariant Sections&quot; are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The &quot;Cover Texts&quot; are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A &quot;Transparent&quot; copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not &quot;Transparent&quot; is called &quot;Opaque&quot;.

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The &quot;Title Page&quot; means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, &quot;Title Page&quot; means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

The &quot;publisher&quot; means any person or entity that distributes copies of the Document to the public.

A section &quot;Entitled XYZ&quot; means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as &quot;Acknowledgements&quot;, &quot;Dedications&quot;, &quot;Endorsements&quot;, or &quot;History&quot;.) To &quot;Preserve the Title&quot; of such a section when you modify the Document means that it remains a section &quot;Entitled XYZ&quot; according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

== 2. VERBATIM COPYING ==

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

== 3. COPYING IN QUANTITY==

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

==4. MODIFICATIONS==

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

&lt;ol type=&quot;A&quot;&gt;
&lt;li&gt;Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.&lt;/li&gt;
&lt;li&gt;List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.&lt;/li&gt;
&lt;li&gt;State on the Title page the name of the publisher of the Modified Version, as the publisher.&lt;/li&gt;
&lt;li&gt;Preserve all the copyright notices of the Document.&lt;/li&gt;
&lt;li&gt;Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.&lt;/li&gt;
&lt;li&gt;Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.&lt;/li&gt;
&lt;li&gt;Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.&lt;/li&gt;
&lt;li&gt;Include an unaltered copy of this License.&lt;/li&gt;
&lt;li&gt;Preserve the section Entitled &quot;History&quot;, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled &quot;History&quot; in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.&lt;/li&gt;
&lt;li&gt;Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the &quot;History&quot; section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.&lt;/li&gt;
&lt;li&gt;For any section Entitled &quot;Acknowledgements&quot; or &quot;Dedications&quot;, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.&lt;/li&gt;
&lt;li&gt;Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.&lt;/li&gt;
&lt;li&gt;Delete any section Entitled &quot;Endorsements&quot;. Such a section may not be included in the Modified version.&lt;/li&gt;
&lt;li&gt;Do not retitle any existing section to be Entitled &quot;Endorsements&quot; or to conflict in title with any Invariant Section.&lt;/li&gt;
&lt;li&gt;Preserve any Warranty Disclaimers.&lt;/li&gt;
&lt;/ol&gt;

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled &quot;Endorsements&quot;, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

==5. COMBINING DOCUMENTS==

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled &quot;History&quot; in the various original documents, forming one section Entitled &quot;History&quot;; likewise combine any sections Entitled &quot;Acknowledgements&quot;, and any sections Entitled &quot;Dedications&quot;. You must delete all sections Entitled &quot;Endorsements&quot;.

==6. COLLECTIONS OF DOCUMENTS==

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

==7. AGGREGATION WITH INDEPENDENT WORKS==

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an &quot;aggregate&quot; if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

==8. TRANSLATION==

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled &quot;Acknowledgements&quot;, &quot;Dedications&quot;, or &quot;History&quot;, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

==9. TERMINATION==

You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

==10. FUTURE REVISIONS OF THIS LICENSE==

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License &quot;or any later version&quot; applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

==11. RELICENSING==

&quot;Massive Multiauthor Collaboration Site&quot; (or &quot;MMC Site&quot;) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A &quot;Massive Multiauthor Collaboration&quot; (or &quot;MMC&quot;) contained in the site means any set of copyrightable works thus published on the MMC site.

&quot;CC-BY-SA&quot; means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

&quot;Incorporate&quot; means to publish or republish a Document, in whole or in part, as part of another Document.

An MMC is &quot;eligible for relicensing&quot; if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
= How to use this License for your documents =

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

: Copyright (c)  YEAR  YOUR NAME.
: Permission is granted to copy, distribute and/or modify this document
: under the terms of the GNU Free Documentation License, Version 1.3
: or any later version published by the Free Software Foundation;
: with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
: A copy of the license is included in the section entitled &quot;GNU
: Free Documentation License&quot;.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the &quot;with...Texts.&quot; line with this:

: with the Invariant Sections being LIST THEIR TITLES, with the
: Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Copyrights</title>
    <ns>4</ns>
    <id>1988</id>
    <revision>
      <id>4433</id>
      <parentid>4171</parentid>
      <timestamp>2011-06-19T15:39:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Replaced content with &quot;
The content is licensed under [[Cppreference:Copyright/CC-BY-SA | Creative Commons Attribution-Sharealike 3.0 Unported License]] (CC-BY-SA) and by the [[Cppreference:Copyrig...&quot;</comment>
      <text xml:space="preserve" bytes="306">
The content is licensed under [[Cppreference:Copyright/CC-BY-SA | Creative Commons Attribution-Sharealike 3.0 Unported License]] (CC-BY-SA) and by the [[Cppreference:Copyright/GDFL | GNU Free Documentation License]] (GFDL) (unversioned, with no invariant sections, front-cover texts, or back-cover texts).</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:FAQ</title>
    <ns>4</ns>
    <id>2068</id>
    <revision>
      <id>91255</id>
      <parentid>91254</parentid>
      <timestamp>2017-03-30T15:23:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>n4660 is now password-protected (history repeated itself), repointing the link to n4659.pdf</comment>
      <text xml:space="preserve" bytes="9608">{{title|Frequently asked questions}}
{{cpp/navbar}}
===What is the purpose of this site?===

Our goal is to provide programmers with a complete online reference for the C and C++ languages and standard libraries, i.e. a more convenient version of the C and C++ standards. 

The primary objective is to have a good ''specification'' of C and C++. That is, things that are implicitly clear to an experienced programmer should be omitted, or at least separated from the main description of a function, constant or class. A good place to demonstrate various use cases is the &quot;example&quot; section of each page. Rationale, implementation notes, domain specific documentation are preferred to be included in the &quot;notes&quot; section of each page.

===Why is the material here limited to the standard C and C++?===

In short, we chose quality over quantity. Some [http://www.boost.org boost libraries] could also be candidates for inclusion though. While their tutorials are very good, the ''reference'' documentation is often very inflexible and inconvenient.

===Where can I find more information?===

Check out the following collections of links [[c/links|&lt;nowiki&gt;[1]&lt;/nowiki&gt;]] [[cpp/links|&lt;nowiki&gt;[2]&lt;/nowiki&gt;]] for alternative links and material that falls outside of the scope of this site.

===Which revision of the C Standard does this reference adhere to?===

C11 is the most recently published C Standard. This means that C language is now defined in terms of C11 and we also try to stick to it. However, the differences between C89, C99 and C11, as well as draft documentation for future versions of the standard (C2X and the [[c/experimental|Technical Specifications]]). All version-specific documentation should be labeled appropriately.

The various C standard revisions can be found at:
* C11
** The official C11 Standard can be  [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57853 purchased from the ISO] or (at a discount) [http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012 from ANSI] or other member organizations.
** The latest C11 working draft [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf n1570 (2011-04-12)] is available for free and differs only minimally from the final C11 Standard.

* C99
** The C99 standard was withdrawn and is [http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=29237 no longer available from ISO], although it may still be [http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+9899-1999+(R2005) purchased from ANSI].
** The final C99:TC3 working draft [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf  n1256 (2007-09-07)] is freely available and differs only minimally from the final C99 standard including all three Technical Corrigenda.

* C95
** The C90 amendment AMD1, which transforms C90 to C95 is no longer available from official sources, although it may be found with some document retailers, such as [https://global.ihs.com/doc_detail.cfm?item_s_key=00120900&amp;item_key_date=040830&amp;input_doc_number=9899&amp;input_doc_title=&amp;origin=HISC Global Engineering Documents]

* C89/C90
** The C90 standard was withdrawn and is no longer available from official sources, although it may be found with some document retailers, such as [http://infostore.saiglobal.com/store/Details.aspx?ProductID=306911 SAI-Global]
** The final draft (X3J11/90-013 (ANSI numbering) or n119 (WG14 numbering)) is not publicly available, but the final public review draft [http://flash-gordon.me.uk/ansi.c.txt X3J11/88-090 (1988-05-13)] is available and differs minimally from the final C89 standard.

===Which revision of the C++ Standard does this reference adhere to?===

C++14 is the most recently published C++ Standard, so that is the main focus of this site.  

However, in order to provide a more complete reference, we also include documentation describing previous versions of the standard (C++98, C++03, and C++11) as well as draft documentation for future versions of the standard (C++17 and the [[cpp/experimental|Technical Specifications]]).  All version-specific documentation should be labeled appropriately.

The various C++ Standards themselves can be found at:
* C++20
** The most up-to-date version can be found, in source form, at [https://github.com/cplusplus/draft https://github.com/cplusplus/draft] and in browseable form at [http://eel.is/c++draft eel.is/c++draft].

* C++17
** The final draft of C++17 is [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf n4659 (2017-03-21)].

* C++14
** The official C++14 standard can be [http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64029 purchased directly from ISO] or [http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882%3a2014+(2016) through ANSI] and other member organizations
** A free [https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true C++14 final draft] (n4140) is available as well as [https://github.com/cplusplus/draft/compare/n4140...n4141 the diff] between it and the standard (n4141) &lt;!-- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4139.html states that n4141 is the international standard --&gt;
* C++11 
** The C++11 standard was withdrawn and is [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372 no longer available from ISO].
** A free [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf C++11 Working Draft] (n3337) is available. (The [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3338.html differences] between the Working Draft and the C++11 Standard are minor.)
* C++03
** The C++03 standard was withdrawn and is [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110 no longer available from ISO].
* C++98
** The C++98 standard was withdrawn and is [http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=25845 no longer available from ISO].

===Do you have a version of this site suitable for offline viewing?===

Sure, you can grab one [[Cppreference:Archives | here]].

===Can you make the site easier to view?===

You might find a [https://userstyles.org/styles/127535/cpp-reference-dark a dark theme] more legible than the default bright theme.

===What can I do with the material on this site?===

The content is licensed under [[Cppreference:Copyright/CC-BY-SA | Creative Commons Attribution-Sharealike 3.0 Unported License]] (CC-BY-SA) and by the [[Cppreference:Copyright/GDFL | GNU Free Documentation License]] (GFDL) (unversioned, with no invariant sections, front-cover texts, or back-cover texts). That means that you can use this site in almost any way you like, including mirroring, copying, translating, etc. All we would ask is to provide link back to {{tt|cppreference.com}} so that people know where to get the most up-to-date content. In addition to that, any modified content should be released under an equivalent license so that everyone could benefit from the modified versions.

===What? This is a wiki? Can I change stuff?===

Absolutely. If you see something that is wrong, fix it. However, currently the wiki is limited to standard C and C++, so you should not add non-standard content like compiler-specific extensions. Also, please double check any changes with the appropriate standard. If you are unsure about anything, you can ask about it in the discussion pages.

===How can I edit? What are the syntax rules?===

This wiki uses Mediawiki, the same wiki system as the [http://www.wikipedia.org Wikipedia project]. You can use their help pages to introduce you to the Mediawiki wikicode syntax. However, most of the content in this wiki is wrapped in quite complex templates. They do most of the formatting and help to aggregate the repetitive stuff in one place, so when something is to be modified, there is no need to make the same modification tens or hundreds of times. For help about the templates used in this wiki, see [[Help:Templates]]. 

The wiki aims to have consistent style. Please see [[Help:Manual of style]] for a style guide that helps to follow consistent style and formatting in the wiki.

Note, however, that you don't need to know neither of the complex templates, or abovementioned guidelines in order to contribute. It is much harder to write the content itself, than to apply the formatting, so don't care about the style when writing, as someone will fix that later. 

Some high-traffic templates are locked in order to prevent vandalism or because of performance reasons. In these cases you should request a modification in the discussion page.

===I want to help.  Where should I start?===

Great!  There are several special pages that contain suggestions for things that need to be fixed:

* [[:Category:Todo no example|Pages that could use examples]] (a good starting point)
* [[:Category:Todo with reason|Pages marked with specific '''todo''' items]]
* [[:Category:Todo without reason|Pages marked with general '''todo'''s]]

===Who is behind this site?===

cppreference.com was created and is maintained by a group of C++ enthusiasts from around the world.  The site has been entirely community-supported since its inception in 2000; currently hosting costs are partially offset by [http://www.cppreference.com/support/ donations and the sale of horribly-pun-filled C++-related merchandise].

===How can I contact you?===

You can contact us at {{tt|comments@cppreference.com}}. 

In case you're reporting a broken link, it might be easier to report it [[Cppreference_talk:FAQ#Broken links|here]].</text>
      <sha1>79nftfxlojl04nspm0vockmy07vst1s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:General disclaimer</title>
    <ns>4</ns>
    <id>8513</id>
    <revision>
      <id>31617</id>
      <parentid>31568</parentid>
      <timestamp>2012-06-04T14:10:56Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>wording</comment>
      <text xml:space="preserve" bytes="385">This is a public wiki.  Do not blindly use code you find here aboard any spacecraft.

If someone vandalizes the example for {{c|std::lower_bound}} right before you copy-paste it into your vacuous bureaucracy detection module, don't be surprised if your spacecraft is overrun by Vogons.  

In fact, if you're writing code for spacecraft, you probably shouldn't be copy-pasting anything.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:MachineTranslations</title>
    <ns>4</ns>
    <id>9559</id>
    <revision>
      <id>63140</id>
      <parentid>48390</parentid>
      <timestamp>2013-07-03T07:56:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1889">Cppreference.com is a complex website. Hopefully you won't need to learn much of the complexity in order to successfully improve the machine-generated translations.

===Basic process===

The machine-translated snippets contain both the translated and original text. In wikicode, they look something like this:

&lt;pre&gt;&lt;nowiki&gt;{{tr| machine-translated text | original text}}&lt;/nowiki&gt;&lt;/pre&gt;

We only need to retain the translated text -- as a translator, you only need to replace this entire construct with a proper translation of ''original text''. The translation of the entire snippet should look like this:

&lt;pre&gt;verified translation&lt;/pre&gt;

Note that none of {{tt|&lt;nowiki&gt;{{tr|&lt;/nowiki&gt;}}, {{tt|&lt;nowiki&gt;|&lt;/nowiki&gt;}} or {{tt|&lt;nowiki&gt;}}&lt;/nowiki&gt;}} tokens are left. The ''original text'' is also removed.

After all text within an article is translated, please remove the translation notice ({{tt|&lt;nowiki&gt;{{tr note}}&lt;/nowiki&gt;}} text at the top of the article.

===Previous translations===
Some articles have old versions that have been overwritten with machine-translated versions because their layout was incompatible (the wiki has had several radical changes in the past). These versions might contain useful information that can be found by viewing the page history.

===Templates===
Most of the articles in the wiki are assembled from small snippets from a variety of pages called templates. Most of these templates can be edited via &lt;nowiki&gt;[edit]&lt;/nowiki&gt; links that appear near where they are used.

===Bots===
Some very frequently used phrases (e.g. those used in headings) might have been incorrectly translated. In such cases, a bot could be used to fix the translations. Any such requests should be made [[User_talk:P12 | here]].

===Help===
If you have any questions regarding translations, you can ask [[Cppreference_talk:MachineTranslations | here]] or [[User_talk:P12 | here]].</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Old archives</title>
    <ns>4</ns>
    <id>13142</id>
    <revision>
      <id>90237</id>
      <parentid>88090</parentid>
      <timestamp>2017-02-14T07:14:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>new version of the offline archive</comment>
      <text xml:space="preserve" bytes="6343">=== Raw archive ===

{|
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 25 December 2011
| [[File:cppreference-doc-20111225.zip]] 
|-
| [[File:cppreference-doc-20111225.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 21 January 2011
| [[File:cppreference-doc-20110121.zip]] 
|-
| [[File:cppreference-doc-20110121.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 27 February 2012
| [[File:cppreference-doc-20120227.zip]] 
|-
| [[File:cppreference-doc-20120227.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 20 June 2012
| [[File:cppreference-doc-20120620.zip]] 
|-
| [[File:cppreference-doc-20120620.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 2 December 2012
| [[File:cppreference-doc-20121202.zip]] 
|-
| [[File:cppreference-doc-20121202.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 10 May 2013
| [[File:cppreference-doc-20130510.zip]] 
|-
| [[File:cppreference-doc-20130510.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 29 July 2013
| [[File:cppreference-doc-20130729.zip]] 
|-
| [[File:cppreference-doc-20130729.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 8 February 2014
| [[File:cppreference-doc-20140208.zip]] 
|-
| [[File:cppreference-doc-20140208.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 23 March 2014
| [[File:cppreference-doc-20140323.zip]] 
|-
| [[File:cppreference-doc-20140323.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 4 July 2014
| [[File:cppreference-doc-20140704.zip]] 
|-
| [[File:cppreference-doc-20140704.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 27 August 2014
| [[File:cppreference-doc-20140827.zip]] 
|-
| [[File:cppreference-doc-20140827.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 18 November 2014
| [[File:cppreference-doc-20141118.zip]] 
|-
| [[File:cppreference-doc-20141118.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 8 August 2015
| [[File:cppreference-doc-20150808.zip]] 
|-
| [[File:cppreference-doc-20150808.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 29 November 2015
| [[File:cppreference-doc-20151129.zip]] 
|-
| [[File:cppreference-doc-20151129.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 29 October 2016
| [[File:cppreference-doc-20161029.zip]] 
|-
| [[File:cppreference-doc-20161029.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 14 February 2017
| [[File:cppreference-doc-20170214.zip]] 
|-
| [[File:cppreference-doc-20170214.tar.gz]]
|}

=== Html book===

{|
|-
| rowspan=1 style=&quot;padding-right:1em;&quot; | 29 October 2011
| [[File:html_book_20111029.zip]]
|-
| rowspan=1 style=&quot;padding-right:1em;&quot; | 25 December 2011
| [[File:html_book_20111225.zip]]
|-
| rowspan=1 style=&quot;padding-right:1em;&quot; | 21 January 2012
| [[File:html_book_20120121.zip]]
|-
| rowspan=1 style=&quot;padding-right:1em;&quot; | 27 February 2012
| [[File:html_book_20120227.zip]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 20 June 2012
| [[File:html_book_20120620.zip]] 
|-
| [[File:html_book_20120620.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 2 December 2012
| [[File:html_book_20121202.zip]] 
|-
| [[File:html_book_20121202.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 10 May 2013
| [[File:html_book_20130510.zip]] 
|-
| [[File:html_book_20130510.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 8 February 2014
| [[File:html_book_20140208.zip]] 
|-
| [[File:html_book_20140208.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 23 March 2014
| [[File:html_book_20140323.zip]] 
|-
| [[File:html_book_20140323.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 4 July 2014
| [[File:html_book_20140704.zip]] 
|-
| [[File:html_book_20140704.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 27 August 2014
| [[File:html_book_20140827.zip]] 
|-
| [[File:html_book_20140827.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 4 November 2014
| [[File:html_book_20141104.zip]] 
|-
| [[File:html_book_20141104.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 18 November 2014
| [[File:html_book_20141118.zip]] 
|-
| [[File:html_book_20141118.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 8 August 2015
| [[File:html_book_20150808.zip]] 
|-
| [[File:html_book_20150808.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 29 November 2015
| [[File:html_book_20151129.zip]] 
|-
| [[File:html_book_20151129.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 29 October 2016
| [[File:html_book_20161029.zip]] 
|-
| [[File:html_book_20161029.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 14 February 2017
| [[File:html_book_20170214.zip]] 
|-
| [[File:html_book_20170214.tar.gz]]
|}

=== Qch book===

{|
|-
| rowspan=1 style=&quot;padding-right:1em;&quot; | 21 January 2012
| [[File:qch_book_20120121.qch.zip]]
|-
| rowspan=1 style=&quot;padding-right:1em;&quot; | 27 February 2012
| [[File:qch_book_20120227.qch.zip]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 20 June 2012
| [[File:qch_book_20120620.zip]] 
|-
| [[File:qch_book_20120620.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 2 December 2012
| [[File:qch_book_20121202.zip]] 
|-
| [[File:qch_book_20121202.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 10 May 2013
| [[File:qch_book_20130510.zip]] 
|-
| [[File:qch_book_20130510.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 8 February 2014
| [[File:qch_book_20140208.zip]] 
|-
| [[File:qch_book_20140208.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 23 March 2014
| [[File:qch_book_20140323.zip]] 
|-
| [[File:qch_book_20140323.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 4 July 2014
| [[File:qch_book_20140704.zip]] 
|-
| [[File:qch_book_20140704.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 27 August 2014
| [[File:qch_book_20140827.zip]] 
|-
| [[File:qch_book_20140827.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 18 November 2014
| [[File:qch_book_20141118.zip]] 
|-
| [[File:qch_book_20141118.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 8 August 2015
| [[File:qch_book_20150808.zip]] 
|-
| [[File:qch_book_20150808.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 29 November 2015
| [[File:qch_book_20151129.zip]] 
|-
| [[File:qch_book_20151129.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 29 October 2016
| [[File:qch_book_20161029.zip]] 
|-
| [[File:qch_book_20161029.tar.gz]]
|-
| rowspan=2 style=&quot;padding-right:1em;&quot; | 14 February 2017
| [[File:qch_book_20170214.zip]] 
|-
| [[File:qch_book_20170214.tar.gz]]
|}</text>
      <sha1>eadh5v2p67e8yx25tafx6e6v04newj2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Privacy policy</title>
    <ns>4</ns>
    <id>8512</id>
    <revision>
      <id>31545</id>
      <parentid>31544</parentid>
      <timestamp>2012-06-02T02:06:50Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Cppreference:Privacy policy]]&quot;: non-content page; besides, nobody should care about this. ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="407">We're not doing anything creepy:

* If you make anonymous edits to pages, we'll publicly display your IP address next to your changes.
* If you create an account and log in, we'll bake a tasty cookie and use it to remember you.
* We use Google analytics to track statistics.
* We keep recent Apache traffic logs.

In other words, we do everything you would expect from a friendly neighborhood geek-run wiki.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:Users</title>
    <ns>4</ns>
    <id>15493</id>
    <redirect title="Cppreference:k-five/index" />
    <revision>
      <id>85647</id>
      <timestamp>2016-04-30T15:11:56Z</timestamp>
      <contributor>
        <username>K-FIVE</username>
        <id>5294</id>
      </contributor>
      <comment>K-FIVE moved page [[Cppreference:Users]] to [[Cppreference:k-five/index]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Cppreference:k-five/index]]</text>
      <sha1>ssrpna2zznaa5qm2pmrnby55zdgugfe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cppreference:k-five/index</title>
    <ns>4</ns>
    <id>15492</id>
    <revision>
      <id>85649</id>
      <parentid>85648</parentid>
      <timestamp>2016-04-30T15:18:27Z</timestamp>
      <contributor>
        <username>K-FIVE</username>
        <id>5294</id>
      </contributor>
      <text xml:space="preserve" bytes="1401">Hello. This is a user page of a personal sample in c++. I would like to put my practice here.


===Example 2 ===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;string&gt;



using std::cout;
using std::cin;
using std::endl;
using std::cerr;

/// std::basic_string::rend, std::basic_string::crend
/*
1 . reverse_iterator rend();
2 . const_reverse_iterator rend() const;
3 . const_reverse_iterator crend() const;

*/
 /// reverse iterator to the character following the last character


int main (int ac,char **av, char **lvs) {
    { /// 1 . reverse_iterator rend();

        std::string s (&quot;A B C D E F&quot;);
        std::string::reverse_iterator ri_s = s.rend(); /// Point to Before A
        cout&lt;&lt;*ri_s&lt;&lt;endl; /// None
        ri_s-=1; /// Now, point to 'A'
        cout&lt;&lt;*ri_s&lt;&lt;endl; /// Output -&gt; A

        *ri_s = 'a'; /// Changing 'A' to 'a'

        cout&lt;&lt;s&lt;&lt;endl;
    }
    { /// 2 . const_reverse_iterator rend() const;

        std::string s (&quot;a b c d e f&quot;);
        std::string::const_reverse_iterator cri_s = s.rend();
        cri_s--; /// Because of pointing to 'a'
        /* Error
        *cri_s = 'A'; /// assignment of read-only location cri_s ...
        cout&lt;&lt;s&lt;&lt;endl;
        */
    }
    { /// 3 . const_reverse_iterator crend() const;
        /// It like the sample 2
    }
}
| output=

A
a B C D E F

Process returned 0 (0x0)   execution time : 0.007 s
Press ENTER to continue.

}}</text>
      <sha1>mtalq3c1rwt3uumsemy37mw3qb8n0ei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Main Page</title>
    <ns>0</ns>
    <id>1</id>
    <revision>
      <id>91185</id>
      <parentid>90495</parentid>
      <timestamp>2017-03-24T15:46:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fpext1</comment>
      <text xml:space="preserve" bytes="8373">{{title|C and C++ reference}}
{| class=&quot;mainpagetable&quot; cellspacing=0 style=&quot;width:100%; white-space:nowrap;&quot;
|- class=&quot;row rowtop&quot;
| colspan=3 |
[[cpp|&lt;span style=&quot;font-size: 2em;&quot;&gt;C++ reference&lt;/span&gt;&lt;br/&gt;
&lt;span style=&quot;font-size: 0.8em;&quot;&gt;C++98, C++03, C++11, C++14, C++17&lt;/span&gt;
]]
|- class=&quot;row&quot;
|
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/ascii | ASCII chart]]&lt;br/&gt;
[[cpp/compiler_support | Compiler support]]
&lt;/div&gt;
'''[[cpp/language | Language]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/preprocessor | Preprocessor]]&lt;br&gt;
[[cpp/keyword | Keywords]]&lt;br&gt;
[[cpp/language/operator_precedence | Operator precedence]]&lt;br&gt;
[[cpp/language/escape | Escape sequences]]&lt;br&gt;
[[cpp/language/types | Fundamental types]]
&lt;/div&gt;

'''[[cpp/header | Headers]]'''

'''[[cpp/concept | Library concepts]]'''

'''[[cpp/utility | Utilities library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/types | Type support]]&lt;br/&gt;
[[cpp/memory | Dynamic memory management]]&lt;br/&gt;
[[cpp/error | Error handling]]&lt;br/&gt;
[[cpp/utility/program | Program utilities]]&lt;br/&gt;
[[cpp/chrono | Date and time]]&lt;br/&gt;
{{ltt|cpp/utility/bitset}}&lt;br/&gt;
[[cpp/utility/functional | Function objects]]&lt;br/&gt;
{{ltt|cpp/utility/pair}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;
{{ltt|cpp/utility/tuple}} {{mark c++11}}&lt;br/&gt;
{{ltt|cpp/utility/integer_sequence}} {{mark c++14}}&lt;br/&gt;
{{ltt|cpp/utility/optional}} {{mark c++17}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;{{ltt|cpp/utility/any}} {{mark c++17}}&lt;br/&gt;
{{ltt|cpp/utility/variant}} {{mark c++17}}
&lt;/div&gt;

|

'''[[cpp/string | Strings library]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
{{ltt|cpp/string/basic_string}}&lt;br&gt;
{{ltt|cpp/string/basic_string_view}} {{mark c++17}}&lt;br&gt;
[[cpp/string/byte | Null-terminated byte strings]]&lt;br&gt;
[[cpp/string/multibyte | Null-terminated multibyte strings]]&lt;br&gt;
[[cpp/string/wide | Null-terminated wide strings]]
&lt;/div&gt;

'''[[cpp/container | Containers library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
{{ltt|cpp/container/array}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/vector}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;
{{ltt|cpp/container/deque}}&lt;br&gt;
{{ltt|cpp/container/list}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;{{ltt|cpp/container/forward_list}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/set}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;{{ltt|cpp/container/multiset}}&lt;br&gt;
{{ltt|cpp/container/map}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;{{ltt|cpp/container/multimap}}&lt;br&gt;
{{ltt|cpp/container/unordered_set}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/unordered_multiset}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/unordered_map}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/unordered_multimap}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/stack}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;{{ltt|cpp/container/queue}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;{{ltt|cpp/container/priority_queue}}
&lt;/div&gt;

'''[[cpp/algorithm | Algorithms library]]'''

'''[[cpp/iterator | Iterators library]]'''

'''[[cpp/numeric | Numerics library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/numeric/math | Common mathematical functions]]&lt;br&gt;
[[cpp/numeric/special_math | Special mathematical functions]] {{mark c++17}}&lt;br&gt;
[[cpp/numeric/complex | Complex numbers]]&lt;br&gt;
[[cpp/numeric/random | Pseudo-random number generation]]
&lt;/div&gt;

|

'''[[cpp/io | Input/output library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
{{ltt|cpp/io/basic_streambuf}}&lt;br&gt;
{{ltt|cpp/io/basic_filebuf}}&lt;br&gt;
{{ltt|cpp/io/basic_stringbuf}}&lt;br&gt;
{{ltt|cpp/io/ios_base}}&lt;br&gt;
{{ltt|cpp/io/basic_ios}}&lt;br&gt;
{{ltt|cpp/io/basic_istream}}&lt;br&gt;
{{ltt|cpp/io/basic_ostream}}&lt;br&gt;
{{ltt|cpp/io/basic_iostream}}&lt;br&gt;
{{ltt|cpp/io/basic_ifstream}}&lt;br&gt;
{{ltt|cpp/io/basic_ofstream}}&lt;br&gt;
{{ltt|cpp/io/basic_fstream}}&lt;br&gt;
{{ltt|cpp/io/basic_istringstream}}&lt;br&gt;
{{ltt|cpp/io/basic_ostringstream}}&lt;br&gt;
{{ltt|cpp/io/basic_stringstream}}&lt;br&gt;
[[cpp/io/manip | I/O manipulators]]&lt;br&gt;
[[cpp/io/c | C-style I/O ]]
&lt;/div&gt;

'''[[cpp/locale | Localizations library]]'''

'''[[cpp/regex | Regular expressions library]]''' {{mark c++11}}

'''[[cpp/atomic | Atomic operations library]]''' {{mark c++11}}

'''[[cpp/thread | Thread support library]]''' {{mark c++11}}

'''[[cpp/filesystem | Filesystem library]]''' {{mark c++17}}

|- class=&quot;row&quot;
| colspan=3 |'''[[cpp/experimental | Technical specifications]]'''&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[cpp/experimental/lib_extensions | Standard library extensions]]'''&amp;nbsp;&amp;nbsp;{{mark since libfund_ts}}&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[cpp/experimental/lib_extensions_2 | Standard library extensions v2]]'''&amp;nbsp;&amp;nbsp;{{mark since libfund_ts_2}}
&lt;div class=&quot;mainpagediv&quot;&gt;
{{ltt|cpp/experimental/propagate_const}} &amp;mdash; {{ltt|cpp/experimental/not_fn}} &amp;mdash; 
{{ltt|cpp/experimental/observer_ptr}}&lt;br&gt; {{ltt|cpp/experimental/source_location}} &amp;mdash; {{ltt|cpp/experimental/ostream_joiner}}&lt;br&gt;
[[cpp/experimental/is_detected |detection idiom]] &amp;mdash; [[cpp/experimental/lib_extensions_2#Uniform container erasure |uniform container erasure]]
&lt;/div&gt;
&amp;nbsp;&amp;nbsp;'''[[cpp/experimental/parallelism | Parallelism library extensions]]'''&amp;nbsp;&amp;nbsp;{{mark since parallelism_ts}}&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[cpp/experimental/concurrency | Concurrency library extensions]]'''&amp;nbsp;&amp;nbsp;{{mark since concurrency ts}}&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[cpp/language/constraints | Concepts]]'''&amp;nbsp;&amp;nbsp;{{mark since concepts_ts}}&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[cpp/experimental/ranges| Ranges]]'''&amp;nbsp;&amp;nbsp;{{mark since ranges ts}}&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[cpp/language/transactional_memory | Transactional Memory]]'''&amp;nbsp;&amp;nbsp;{{mark since tm_ts}}
|- class=&quot;row&quot;
| colspan=3 | [[cpp/links|External Links]]&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;[[cpp/links/libs|Non-ANSI/ISO Libraries]]&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;[[cpp/index|Index]]&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;[[cpp/symbol_index|std Symbol Index]]
|-
| &lt;span style=&quot;margin:12px;&quot;&gt;&lt;/span&gt;
|- class=&quot;row rowtop&quot;
| colspan=3 |
[[c|&lt;span style=&quot;font-size: 2em;&quot;&gt;C reference&lt;/span&gt;&lt;br/&gt;
&lt;span style=&quot;font-size: 0.8em;&quot;&gt;C89, C95, C99, C11&lt;/span&gt;
]]
|- class=&quot;row&quot;
|
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/language/ascii | ASCII chart]]
&lt;/div&gt;
'''[[c/language | Language]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/preprocessor | Preprocessor]]&lt;br&gt;
[[c/keyword | Keywords]]&lt;br&gt;
[[c/language/operator_precedence | Operator precedence]]&lt;br&gt;
[[c/language/escape | Escape sequences]]
&lt;/div&gt;

'''[[c/header | Headers]]'''

'''[[c/types | Type support]]'''

|

'''[[c/memory | Dynamic memory management]]'''

'''[[c/error | Error handling]]'''

'''[[c/program | Program utilities]]'''

'''[[c/variadic | Variadic functions]]'''

'''[[c/chrono | Date and time utilities]]'''

'''[[c/string | Strings library]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/string/byte | Null-terminated byte strings]]&lt;br&gt;
[[c/string/multibyte | Null-terminated multibyte strings]]&lt;br&gt;
[[c/string/wide | Null-terminated wide strings]]
&lt;/div&gt;

'''[[c/algorithm | Algorithms]]'''

|

'''[[c/numeric | Numerics]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/numeric/math | Common mathematical functions]]&lt;br&gt;
[[c/numeric/fenv | Floating-point environment]] {{mark c99}}&lt;br&gt;
[[c/numeric/random | Pseudo-random number generation]]&lt;br&gt;
[[c/numeric/complex | Complex number arithmetic]] {{mark c99}}&lt;br&gt;
[[c/numeric/tgmath | Type-generic math]] {{mark c99}}

&lt;/div&gt;

'''[[c/io | Input/output support]]'''

'''[[c/locale | Localization support]]'''

'''[[c/atomic | Atomic operations library]]''' {{mark c11}}

'''[[c/thread | Thread support library]]''' {{mark c11}}
|- class=&quot;row&quot;
| colspan=3 |'''[[c/experimental | Technical specifications]]'''
&lt;!--&amp;nbsp;&amp;nbsp;'''[[c/experimental/embedded | Extensions for embedded processors]]'''&amp;nbsp;&amp;nbsp;{{mark since embedded_ts}}&lt;br&gt;--&gt;
&amp;nbsp;&amp;nbsp;'''[[c/experimental/dynamic | Dynamic memory extensions]]'''&amp;nbsp;&amp;nbsp;{{mark since dynamic_ts}}&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[c/experimental/fpext1| Floating-point extensions, Part 1]]'''&amp;nbsp;&amp;nbsp;{{mark since fpext1 ts}}&lt;br&gt;
&amp;nbsp;&amp;nbsp;'''[[c/experimental/fpext4| Floating-point extensions, Part 4]]'''&amp;nbsp;&amp;nbsp;{{mark since fpext4 ts}}&lt;br&gt;
&lt;!--&amp;nbsp;&amp;nbsp;'''[[c/experimental/parallelism | Parallelism library]]'''&amp;nbsp;&amp;nbsp;{{mark since cplex_ts}}--&gt;
|- class=&quot;row rowbottom&quot;
| colspan=3 | [[c/links|External Links]]&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;[[c/links/libs|Non-ANSI/ISO Libraries]]
|-
|}

{| class=&quot;mainpagetable&quot; cellspacing=0 style=&quot;padding: 2em 2em; width: 100%; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box;&quot;
|- class=&quot;row rowtop&quot;
| &lt;span style=&quot;font-size: 1.5em;&quot;&gt;News&lt;/span&gt;
|- class=&quot;row rowbottom&quot;
| {{news}}
|}

[[ar:]]
[[cs:]]
[[de:]]
[[es:]]
[[fr:]]
[[it:]]
[[ja:]]
[[ko:]]
[[pl:]]
[[pt:]]
[[ru:]]
[[tr:]]
[[zh:]]</text>
      <sha1>fx6cgjrbesvfk7xdj687yxz7g2lr37f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Autolinker-definition-c</title>
    <ns>8</ns>
    <id>10283</id>
    <revision>
      <id>80360</id>
      <parentid>74672</parentid>
      <timestamp>2015-08-08T01:26:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync with index in repo</comment>
      <text xml:space="preserve" bytes="53477">{&quot;groups&quot;: [{&quot;base_url&quot;: &quot;c/locale/lconv&quot;,
&quot;name&quot;: &quot;lconv&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;c/string/multibyte/mbstate_t&quot;,
&quot;name&quot;: &quot;mbstate_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;c/atomic/memory_order&quot;,
&quot;name&quot;: &quot;memory_order&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;c/chrono/tm&quot;,
&quot;name&quot;: &quot;tm&quot;,
&quot;urls&quot;: [&quot;&quot;]}],
&quot;links&quot;: [{&quot;string&quot;: &quot;bsearch&quot;,
&quot;target&quot;: &quot;c/algorithm/bsearch&quot;},
{&quot;string&quot;: &quot;qsort&quot;,
&quot;target&quot;: &quot;c/algorithm/qsort&quot;},
{&quot;string&quot;: &quot;atomic_bool&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_char&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_schar&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uchar&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_short&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_ushort&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_long&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_ulong&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_llong&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_ullong&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_char16_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_char32_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_wchar_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_least8_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_least8_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_least16_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_least16_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_least32_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_least32_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_least64_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_least64_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_fast8_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_fast8_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_fast16_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_fast16_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_fast32_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_fast32_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_int_fast64_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uint_fast64_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_intprt_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uintprt_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_size_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_ptrdiff_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_intmax_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;atomic_uintmax_t&quot;,
&quot;target&quot;: &quot;c/atomic&quot;},
{&quot;string&quot;: &quot;ATOMIC_FLAG_INIT&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_FLAG_INIT&quot;},
{&quot;string&quot;: &quot;ATOMIC_BOOL_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_CHAR_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_CHAR16_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_CHAR32_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_WCHAR_T_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_SHORT_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_INT_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_LONG_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_LLONG_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_POINTER_LOCK_FREE&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_LOCK_FREE_consts&quot;},
{&quot;string&quot;: &quot;ATOMIC_VAR_INIT&quot;,
&quot;target&quot;: &quot;c/atomic/ATOMIC_VAR_INIT&quot;},
{&quot;string&quot;: &quot;atomic_compare_exchange_weak&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;atomic_compare_exchange_weak_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;atomic_compare_exchange_strong&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;atomic_compare_exchange_strong_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;atomic_exchange&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_exchange&quot;},
{&quot;string&quot;: &quot;atomic_exchange_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_exchange&quot;},
{&quot;string&quot;: &quot;atomic_fetch_add&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_add&quot;},
{&quot;string&quot;: &quot;atomic_fetch_add_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_add&quot;},
{&quot;string&quot;: &quot;atomic_fetch_and&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_and&quot;},
{&quot;string&quot;: &quot;atomic_fetch_and_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_and&quot;},
{&quot;string&quot;: &quot;atomic_fetch_or&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_or&quot;},
{&quot;string&quot;: &quot;atomic_fetch_or_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_or&quot;},
{&quot;string&quot;: &quot;atomic_fetch_sub&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_sub&quot;},
{&quot;string&quot;: &quot;atomic_fetch_sub_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_sub&quot;},
{&quot;string&quot;: &quot;atomic_fetch_xor&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_xor&quot;},
{&quot;string&quot;: &quot;atomic_fetch_xor_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_fetch_xor&quot;},
{&quot;string&quot;: &quot;atomic_flag&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_flag&quot;},
{&quot;string&quot;: &quot;atomic_flag_clear&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_flag_clear&quot;},
{&quot;string&quot;: &quot;atomic_flag_clear_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_flag_clear&quot;},
{&quot;string&quot;: &quot;atomic_flag_test_and_set&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_flag_test_and_set&quot;},
{&quot;string&quot;: &quot;atomic_flag_test_and_set_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_flag_test_and_set&quot;},
{&quot;string&quot;: &quot;atomic_init&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_init&quot;},
{&quot;string&quot;: &quot;atomic_is_lock_free&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_is_lock_free&quot;},
{&quot;string&quot;: &quot;atomic_load&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_load&quot;},
{&quot;string&quot;: &quot;atomic_load_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_load&quot;},
{&quot;string&quot;: &quot;atomic_signal_fence&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_signal_fence&quot;},
{&quot;string&quot;: &quot;atomic_store&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_store&quot;},
{&quot;string&quot;: &quot;atomic_store_explicit&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_store&quot;},
{&quot;string&quot;: &quot;atomic_thread_fence&quot;,
&quot;target&quot;: &quot;c/atomic/atomic_thread_fence&quot;},
{&quot;string&quot;: &quot;kill_dependency&quot;,
&quot;target&quot;: &quot;c/atomic/kill_dependency&quot;},
{&quot;string&quot;: &quot;memory_order&quot;,
&quot;target&quot;: &quot;c/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;memory_order_relaxed&quot;,
&quot;target&quot;: &quot;c/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;memory_order_consume&quot;,
&quot;target&quot;: &quot;c/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;memory_order_acquire&quot;,
&quot;target&quot;: &quot;c/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;memory_order_release&quot;,
&quot;target&quot;: &quot;c/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;memory_order_acq_rel&quot;,
&quot;target&quot;: &quot;c/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;memory_order_seq_cst&quot;,
&quot;target&quot;: &quot;c/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;CLOCKS_PER_SEC&quot;,
&quot;target&quot;: &quot;c/chrono/CLOCKS_PER_SEC&quot;},
{&quot;string&quot;: &quot;asctime&quot;,
&quot;target&quot;: &quot;c/chrono/asctime&quot;},
{&quot;string&quot;: &quot;clock&quot;,
&quot;target&quot;: &quot;c/chrono/clock&quot;},
{&quot;string&quot;: &quot;clock_t&quot;,
&quot;target&quot;: &quot;c/chrono/clock_t&quot;},
{&quot;string&quot;: &quot;ctime&quot;,
&quot;target&quot;: &quot;c/chrono/ctime&quot;},
{&quot;string&quot;: &quot;difftime&quot;,
&quot;target&quot;: &quot;c/chrono/difftime&quot;},
{&quot;string&quot;: &quot;gmtime&quot;,
&quot;target&quot;: &quot;c/chrono/gmtime&quot;},
{&quot;string&quot;: &quot;localtime&quot;,
&quot;target&quot;: &quot;c/chrono/localtime&quot;},
{&quot;string&quot;: &quot;mktime&quot;,
&quot;target&quot;: &quot;c/chrono/mktime&quot;},
{&quot;string&quot;: &quot;strftime&quot;,
&quot;target&quot;: &quot;c/chrono/strftime&quot;},
{&quot;string&quot;: &quot;time&quot;,
&quot;target&quot;: &quot;c/chrono/time&quot;},
{&quot;string&quot;: &quot;time_t&quot;,
&quot;target&quot;: &quot;c/chrono/time_t&quot;},
{&quot;string&quot;: &quot;tm&quot;,
&quot;target&quot;: &quot;c/chrono/tm&quot;},
{&quot;string&quot;: &quot;wcsftime&quot;,
&quot;target&quot;: &quot;c/chrono/wcsftime&quot;},
{&quot;string&quot;: &quot;assert&quot;,
&quot;target&quot;: &quot;c/error/assert&quot;},
{&quot;string&quot;: &quot;errno&quot;,
&quot;target&quot;: &quot;c/error/errno&quot;},
{&quot;string&quot;: &quot;E2BIG&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EACCESS&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EADDRINUSE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EADDRNOTAVAIL&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EAFNOSUPPORT&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EAGAIN&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EALREADY&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EBADF&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EBADMSG&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EBUSY&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECANCELED&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECHILD&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECONNABORTED&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECONNREFUSED&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECONNRESET&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EDEADLK&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EDESTADDRREQ&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EDOM&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EEXIST&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EFAULT&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EFBIG&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EHOSTUNREACH&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EIDRM&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EILSEQ&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EINPROGRESS&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EINTR&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EINVAL&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EIO&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EISCONN&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EISDIR&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ELOOP&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EMFILE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EMLINK&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EMSGSIZE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENAMETOOLONG&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENETDOWN&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENETRESET&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENETUNREACH&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENFILE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOBUFS&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENODATA&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENODEV&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOENT&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOEXEC&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOLCK&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOLINK&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOMEM&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOMSG&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOPROTOOPT&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSPC&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSR&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSTR&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSYS&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTCONN&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTDIR&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTEMPTY&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTRECOVERABLE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTSOCK&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTSUP&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTTY&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENXIO&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EOPNOTSUPP&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EOVERFLOW&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EOWNERDEAD&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPERM&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPIPE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPROTO&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPROTONOSUPPORT&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPROTOTYPE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ERANGE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EROFS&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ESPIPE&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ESRCH&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ETIME&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ETIMEDOUT&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ETXTBSY&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EWOULDBLOCK&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EXDEV&quot;,
&quot;target&quot;: &quot;c/error/errno_macros&quot;},
{&quot;string&quot;: &quot;FILE&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;fpos_t&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;stdin&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;stdout&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;stderr&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;EOF&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;FOPEN_MAX&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;FILENAME_MAX&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;BUFSIZ&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;_IOFBF&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;_IOLBF&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;_IONBF&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;SEEK_SET&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;SEEK_CUR&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;SEEK_END&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;TMP_MAX&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;L_tmpnam&quot;,
&quot;target&quot;: &quot;c/io&quot;},
{&quot;string&quot;: &quot;clearerr&quot;,
&quot;target&quot;: &quot;c/io/clearerr&quot;},
{&quot;string&quot;: &quot;fclose&quot;,
&quot;target&quot;: &quot;c/io/fclose&quot;},
{&quot;string&quot;: &quot;feof&quot;,
&quot;target&quot;: &quot;c/io/feof&quot;},
{&quot;string&quot;: &quot;ferror&quot;,
&quot;target&quot;: &quot;c/io/ferror&quot;},
{&quot;string&quot;: &quot;fflush&quot;,
&quot;target&quot;: &quot;c/io/fflush&quot;},
{&quot;string&quot;: &quot;fgetc&quot;,
&quot;target&quot;: &quot;c/io/fgetc&quot;},
{&quot;string&quot;: &quot;getc&quot;,
&quot;target&quot;: &quot;c/io/fgetc&quot;},
{&quot;string&quot;: &quot;fgetpos&quot;,
&quot;target&quot;: &quot;c/io/fgetpos&quot;},
{&quot;string&quot;: &quot;fgets&quot;,
&quot;target&quot;: &quot;c/io/fgets&quot;},
{&quot;string&quot;: &quot;fgetwc&quot;,
&quot;target&quot;: &quot;c/io/fgetwc&quot;},
{&quot;string&quot;: &quot;fgetss&quot;,
&quot;target&quot;: &quot;c/io/fgetws&quot;},
{&quot;string&quot;: &quot;fopen&quot;,
&quot;target&quot;: &quot;c/io/fopen&quot;},
{&quot;string&quot;: &quot;printf&quot;,
&quot;target&quot;: &quot;c/io/fprintf&quot;},
{&quot;string&quot;: &quot;fprintf&quot;,
&quot;target&quot;: &quot;c/io/fprintf&quot;},
{&quot;string&quot;: &quot;sprintf&quot;,
&quot;target&quot;: &quot;c/io/fprintf&quot;},
{&quot;string&quot;: &quot;snprintf&quot;,
&quot;target&quot;: &quot;c/io/fprintf&quot;},
{&quot;string&quot;: &quot;fputc&quot;,
&quot;target&quot;: &quot;c/io/fputc&quot;},
{&quot;string&quot;: &quot;putc&quot;,
&quot;target&quot;: &quot;c/io/fputc&quot;},
{&quot;string&quot;: &quot;fputs&quot;,
&quot;target&quot;: &quot;c/io/fputs&quot;},
{&quot;string&quot;: &quot;fputwc&quot;,
&quot;target&quot;: &quot;c/io/fputwc&quot;},
{&quot;string&quot;: &quot;fputws&quot;,
&quot;target&quot;: &quot;c/io/fputws&quot;},
{&quot;string&quot;: &quot;fread&quot;,
&quot;target&quot;: &quot;c/io/fread&quot;},
{&quot;string&quot;: &quot;freopen&quot;,
&quot;target&quot;: &quot;c/io/freopen&quot;},
{&quot;string&quot;: &quot;scanf&quot;,
&quot;target&quot;: &quot;c/io/fscanf&quot;},
{&quot;string&quot;: &quot;fscanf&quot;,
&quot;target&quot;: &quot;c/io/fscanf&quot;},
{&quot;string&quot;: &quot;sscanf&quot;,
&quot;target&quot;: &quot;c/io/fscanf&quot;},
{&quot;string&quot;: &quot;fseek&quot;,
&quot;target&quot;: &quot;c/io/fseek&quot;},
{&quot;string&quot;: &quot;fsetpos&quot;,
&quot;target&quot;: &quot;c/io/fsetpos&quot;},
{&quot;string&quot;: &quot;ftell&quot;,
&quot;target&quot;: &quot;c/io/ftell&quot;},
{&quot;string&quot;: &quot;wprintf&quot;,
&quot;target&quot;: &quot;c/io/fwprintf&quot;},
{&quot;string&quot;: &quot;fwprintf&quot;,
&quot;target&quot;: &quot;c/io/fwprintf&quot;},
{&quot;string&quot;: &quot;swprintf&quot;,
&quot;target&quot;: &quot;c/io/fwprintf&quot;},
{&quot;string&quot;: &quot;fwrite&quot;,
&quot;target&quot;: &quot;c/io/fwrite&quot;},
{&quot;string&quot;: &quot;wscanf&quot;,
&quot;target&quot;: &quot;c/io/fwscanf&quot;},
{&quot;string&quot;: &quot;fwscanf&quot;,
&quot;target&quot;: &quot;c/io/fwscanf&quot;},
{&quot;string&quot;: &quot;swscanf&quot;,
&quot;target&quot;: &quot;c/io/fwscanf&quot;},
{&quot;string&quot;: &quot;getchar&quot;,
&quot;target&quot;: &quot;c/io/getchar&quot;},
{&quot;string&quot;: &quot;gets&quot;,
&quot;target&quot;: &quot;c/io/gets&quot;},
{&quot;string&quot;: &quot;getwchar&quot;,
&quot;target&quot;: &quot;c/io/getwchar&quot;},
{&quot;string&quot;: &quot;perror&quot;,
&quot;target&quot;: &quot;c/io/perror&quot;},
{&quot;string&quot;: &quot;putchar&quot;,
&quot;target&quot;: &quot;c/io/putchar&quot;},
{&quot;string&quot;: &quot;puts&quot;,
&quot;target&quot;: &quot;c/io/puts&quot;},
{&quot;string&quot;: &quot;putwchar&quot;,
&quot;target&quot;: &quot;c/io/putwchar&quot;},
{&quot;string&quot;: &quot;remove&quot;,
&quot;target&quot;: &quot;c/io/remove&quot;},
{&quot;string&quot;: &quot;rename&quot;,
&quot;target&quot;: &quot;c/io/rename&quot;},
{&quot;string&quot;: &quot;rewind&quot;,
&quot;target&quot;: &quot;c/io/rewind&quot;},
{&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;c/io/setbuf&quot;},
{&quot;string&quot;: &quot;setvbuf&quot;,
&quot;target&quot;: &quot;c/io/setvbuf&quot;},
{&quot;string&quot;: &quot;tmpfile&quot;,
&quot;target&quot;: &quot;c/io/tmpfile&quot;},
{&quot;string&quot;: &quot;tmpnam&quot;,
&quot;target&quot;: &quot;c/io/tmpnam&quot;},
{&quot;string&quot;: &quot;ungetc&quot;,
&quot;target&quot;: &quot;c/io/ungetc&quot;},
{&quot;string&quot;: &quot;ungetwc&quot;,
&quot;target&quot;: &quot;c/io/ungetwc&quot;},
{&quot;string&quot;: &quot;vprintf&quot;,
&quot;target&quot;: &quot;c/io/vfprintf&quot;},
{&quot;string&quot;: &quot;vfprintf&quot;,
&quot;target&quot;: &quot;c/io/vfprintf&quot;},
{&quot;string&quot;: &quot;vsprintf&quot;,
&quot;target&quot;: &quot;c/io/vfprintf&quot;},
{&quot;string&quot;: &quot;vsnprintf&quot;,
&quot;target&quot;: &quot;c/io/vfprintf&quot;},
{&quot;string&quot;: &quot;vscanf&quot;,
&quot;target&quot;: &quot;c/io/vfscanf&quot;},
{&quot;string&quot;: &quot;vfscanf&quot;,
&quot;target&quot;: &quot;c/io/vfscanf&quot;},
{&quot;string&quot;: &quot;vsscanf&quot;,
&quot;target&quot;: &quot;c/io/vfscanf&quot;},
{&quot;string&quot;: &quot;vwprintf&quot;,
&quot;target&quot;: &quot;c/io/vfwprintf&quot;},
{&quot;string&quot;: &quot;vfwprintf&quot;,
&quot;target&quot;: &quot;c/io/vfwprintf&quot;},
{&quot;string&quot;: &quot;vswprintf&quot;,
&quot;target&quot;: &quot;c/io/vfwprintf&quot;},
{&quot;string&quot;: &quot;vwscanf&quot;,
&quot;target&quot;: &quot;c/io/vfwscanf&quot;},
{&quot;string&quot;: &quot;vfwscanf&quot;,
&quot;target&quot;: &quot;c/io/vfwscanf&quot;},
{&quot;string&quot;: &quot;vswscanf&quot;,
&quot;target&quot;: &quot;c/io/vfwscanf&quot;},
{&quot;string&quot;: &quot;LC_ALL&quot;,
&quot;target&quot;: &quot;c/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_COLLATE&quot;,
&quot;target&quot;: &quot;c/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_CTYPE&quot;,
&quot;target&quot;: &quot;c/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_MONETARY&quot;,
&quot;target&quot;: &quot;c/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_NUMERIC&quot;,
&quot;target&quot;: &quot;c/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_TIME&quot;,
&quot;target&quot;: &quot;c/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;lconv&quot;,
&quot;target&quot;: &quot;c/locale/lconv&quot;},
{&quot;string&quot;: &quot;localeconv&quot;,
&quot;target&quot;: &quot;c/locale/localeconv&quot;},
{&quot;string&quot;: &quot;setlocale&quot;,
&quot;target&quot;: &quot;c/locale/setlocale&quot;},
{&quot;string&quot;: &quot;calloc&quot;,
&quot;target&quot;: &quot;c/memory/calloc&quot;},
{&quot;string&quot;: &quot;free&quot;,
&quot;target&quot;: &quot;c/memory/free&quot;},
{&quot;string&quot;: &quot;malloc&quot;,
&quot;target&quot;: &quot;c/memory/malloc&quot;},
{&quot;string&quot;: &quot;realloc&quot;,
&quot;target&quot;: &quot;c/memory/realloc&quot;},
{&quot;string&quot;: &quot;CMPLX&quot;,
&quot;target&quot;: &quot;c/numeric/complex/CMPLX&quot;},
{&quot;string&quot;: &quot;CMPLXF&quot;,
&quot;target&quot;: &quot;c/numeric/complex/CMPLX&quot;},
{&quot;string&quot;: &quot;CMPLXL&quot;,
&quot;target&quot;: &quot;c/numeric/complex/CMPLX&quot;},
{&quot;string&quot;: &quot;_Complex_I&quot;,
&quot;target&quot;: &quot;c/numeric/complex/Complex_I&quot;},
{&quot;string&quot;: &quot;_I&quot;,
&quot;target&quot;: &quot;c/numeric/complex/I&quot;},
{&quot;string&quot;: &quot;_Imaginary_I&quot;,
&quot;target&quot;: &quot;c/numeric/complex/Imaginary_I&quot;},
{&quot;string&quot;: &quot;cabs&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cabs&quot;},
{&quot;string&quot;: &quot;cabsf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cabs&quot;},
{&quot;string&quot;: &quot;cabsl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cabs&quot;},
{&quot;string&quot;: &quot;cacos&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cacos&quot;},
{&quot;string&quot;: &quot;cacosf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cacos&quot;},
{&quot;string&quot;: &quot;cacosl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cacos&quot;},
{&quot;string&quot;: &quot;cacosh&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cacosh&quot;},
{&quot;string&quot;: &quot;cacoshf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cacosh&quot;},
{&quot;string&quot;: &quot;cacoshl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cacosh&quot;},
{&quot;string&quot;: &quot;carg&quot;,
&quot;target&quot;: &quot;c/numeric/complex/carg&quot;},
{&quot;string&quot;: &quot;cargf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/carg&quot;},
{&quot;string&quot;: &quot;cargl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/carg&quot;},
{&quot;string&quot;: &quot;casin&quot;,
&quot;target&quot;: &quot;c/numeric/complex/casin&quot;},
{&quot;string&quot;: &quot;casinf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/casin&quot;},
{&quot;string&quot;: &quot;casinl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/casin&quot;},
{&quot;string&quot;: &quot;casinh&quot;,
&quot;target&quot;: &quot;c/numeric/complex/casinh&quot;},
{&quot;string&quot;: &quot;casinhf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/casinh&quot;},
{&quot;string&quot;: &quot;casinhl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/casinh&quot;},
{&quot;string&quot;: &quot;catan&quot;,
&quot;target&quot;: &quot;c/numeric/complex/catan&quot;},
{&quot;string&quot;: &quot;catanf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/catan&quot;},
{&quot;string&quot;: &quot;catanl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/catan&quot;},
{&quot;string&quot;: &quot;catanh&quot;,
&quot;target&quot;: &quot;c/numeric/complex/catanh&quot;},
{&quot;string&quot;: &quot;catanhf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/catanh&quot;},
{&quot;string&quot;: &quot;catanhl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/catanh&quot;},
{&quot;string&quot;: &quot;ccos&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ccos&quot;},
{&quot;string&quot;: &quot;ccosf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ccos&quot;},
{&quot;string&quot;: &quot;ccosl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ccos&quot;},
{&quot;string&quot;: &quot;ccosh&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ccosh&quot;},
{&quot;string&quot;: &quot;ccoshf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ccosh&quot;},
{&quot;string&quot;: &quot;ccoshl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ccosh&quot;},
{&quot;string&quot;: &quot;cexp&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cexp&quot;},
{&quot;string&quot;: &quot;cexpf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cexp&quot;},
{&quot;string&quot;: &quot;cexpl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cexp&quot;},
{&quot;string&quot;: &quot;cimag&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cimag&quot;},
{&quot;string&quot;: &quot;cimagf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cimag&quot;},
{&quot;string&quot;: &quot;cimagl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cimag&quot;},
{&quot;string&quot;: &quot;clog&quot;,
&quot;target&quot;: &quot;c/numeric/complex/clog&quot;},
{&quot;string&quot;: &quot;clogf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/clog&quot;},
{&quot;string&quot;: &quot;clogl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/clog&quot;},
{&quot;string&quot;: &quot;complex&quot;,
&quot;target&quot;: &quot;c/numeric/complex/complex&quot;},
{&quot;string&quot;: &quot;conj&quot;,
&quot;target&quot;: &quot;c/numeric/complex/conj&quot;},
{&quot;string&quot;: &quot;conjf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/conj&quot;},
{&quot;string&quot;: &quot;conjl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/conj&quot;},
{&quot;string&quot;: &quot;cpow&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cpow&quot;},
{&quot;string&quot;: &quot;cpowf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cpow&quot;},
{&quot;string&quot;: &quot;cpowl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cpow&quot;},
{&quot;string&quot;: &quot;cproj&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cproj&quot;},
{&quot;string&quot;: &quot;cprojf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cproj&quot;},
{&quot;string&quot;: &quot;cprojl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/cproj&quot;},
{&quot;string&quot;: &quot;creal&quot;,
&quot;target&quot;: &quot;c/numeric/complex/creal&quot;},
{&quot;string&quot;: &quot;crealf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/creal&quot;},
{&quot;string&quot;: &quot;creall&quot;,
&quot;target&quot;: &quot;c/numeric/complex/creal&quot;},
{&quot;string&quot;: &quot;csin&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csin&quot;},
{&quot;string&quot;: &quot;csinf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csin&quot;},
{&quot;string&quot;: &quot;csinl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csin&quot;},
{&quot;string&quot;: &quot;csinh&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csinh&quot;},
{&quot;string&quot;: &quot;csinhf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csinh&quot;},
{&quot;string&quot;: &quot;csinhl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csinh&quot;},
{&quot;string&quot;: &quot;csqrt&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csqrt&quot;},
{&quot;string&quot;: &quot;csqrtf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csqrt&quot;},
{&quot;string&quot;: &quot;csqrtl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/csqrt&quot;},
{&quot;string&quot;: &quot;ctan&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ctan&quot;},
{&quot;string&quot;: &quot;ctanf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ctan&quot;},
{&quot;string&quot;: &quot;ctanl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ctan&quot;},
{&quot;string&quot;: &quot;ctanh&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ctanh&quot;},
{&quot;string&quot;: &quot;ctanhf&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ctanh&quot;},
{&quot;string&quot;: &quot;ctanhl&quot;,
&quot;target&quot;: &quot;c/numeric/complex/ctanh&quot;},
{&quot;string&quot;: &quot;imaginary&quot;,
&quot;target&quot;: &quot;c/numeric/complex/imaginary&quot;},
{&quot;string&quot;: &quot;FE_DFL_ENV&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_DFL_ENV&quot;},
{&quot;string&quot;: &quot;FE_ALL_EXCEPT&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_DIVBYZERO&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_INEXACT&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_INVALID&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_OVERFLOW&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_UNDERFLOW&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_DOWNWARD&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;FE_TONEAREST&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;FE_TOWARDZERO&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;FE_UPWARD&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;feclearexcept&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feclearexcept&quot;},
{&quot;string&quot;: &quot;fegetenv&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feenv&quot;},
{&quot;string&quot;: &quot;fesetenv&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feenv&quot;},
{&quot;string&quot;: &quot;fegetexceptflag&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feexceptflag&quot;},
{&quot;string&quot;: &quot;fesetexceptflag&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feexceptflag&quot;},
{&quot;string&quot;: &quot;feholdexcept&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feholdexcept&quot;},
{&quot;string&quot;: &quot;feraiseexcept&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feraiseexcept&quot;},
{&quot;string&quot;: &quot;fegetround&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feround&quot;},
{&quot;string&quot;: &quot;fesetround&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feround&quot;},
{&quot;string&quot;: &quot;fetestexcept&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/fetestexcept&quot;},
{&quot;string&quot;: &quot;feupdateenv&quot;,
&quot;target&quot;: &quot;c/numeric/fenv/feupdateenv&quot;},
{&quot;string&quot;: &quot;FP_INFINITE&quot;,
&quot;target&quot;: &quot;c/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_NAN&quot;,
&quot;target&quot;: &quot;c/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_NORMAL&quot;,
&quot;target&quot;: &quot;c/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_SUBNORMAL&quot;,
&quot;target&quot;: &quot;c/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_ZERO&quot;,
&quot;target&quot;: &quot;c/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;HUGE_VAL&quot;,
&quot;target&quot;: &quot;c/numeric/math/HUGE_VAL&quot;},
{&quot;string&quot;: &quot;HUGE_VALF&quot;,
&quot;target&quot;: &quot;c/numeric/math/HUGE_VAL&quot;},
{&quot;string&quot;: &quot;HUGE_VALL&quot;,
&quot;target&quot;: &quot;c/numeric/math/HUGE_VAL&quot;},
{&quot;string&quot;: &quot;abs&quot;,
&quot;target&quot;: &quot;c/numeric/math/abs&quot;},
{&quot;string&quot;: &quot;labs&quot;,
&quot;target&quot;: &quot;c/numeric/math/abs&quot;},
{&quot;string&quot;: &quot;llabs&quot;,
&quot;target&quot;: &quot;c/numeric/math/abs&quot;},
{&quot;string&quot;: &quot;acos&quot;,
&quot;target&quot;: &quot;c/numeric/math/acos&quot;},
{&quot;string&quot;: &quot;acosh&quot;,
&quot;target&quot;: &quot;c/numeric/math/acosh&quot;},
{&quot;string&quot;: &quot;asin&quot;,
&quot;target&quot;: &quot;c/numeric/math/asin&quot;},
{&quot;string&quot;: &quot;asinh&quot;,
&quot;target&quot;: &quot;c/numeric/math/asinh&quot;},
{&quot;string&quot;: &quot;atan&quot;,
&quot;target&quot;: &quot;c/numeric/math/atan&quot;},
{&quot;string&quot;: &quot;atan2&quot;,
&quot;target&quot;: &quot;c/numeric/math/atan2&quot;},
{&quot;string&quot;: &quot;atanh&quot;,
&quot;target&quot;: &quot;c/numeric/math/atanh&quot;},
{&quot;string&quot;: &quot;cbrt&quot;,
&quot;target&quot;: &quot;c/numeric/math/cbrt&quot;},
{&quot;string&quot;: &quot;ceil&quot;,
&quot;target&quot;: &quot;c/numeric/math/ceil&quot;},
{&quot;string&quot;: &quot;copysign&quot;,
&quot;target&quot;: &quot;c/numeric/math/copysign&quot;},
{&quot;string&quot;: &quot;cos&quot;,
&quot;target&quot;: &quot;c/numeric/math/cos&quot;},
{&quot;string&quot;: &quot;cosh&quot;,
&quot;target&quot;: &quot;c/numeric/math/cosh&quot;},
{&quot;string&quot;: &quot;div&quot;,
&quot;target&quot;: &quot;c/numeric/math/div&quot;},
{&quot;string&quot;: &quot;ldiv&quot;,
&quot;target&quot;: &quot;c/numeric/math/div&quot;},
{&quot;string&quot;: &quot;erf&quot;,
&quot;target&quot;: &quot;c/numeric/math/erf&quot;},
{&quot;string&quot;: &quot;erfc&quot;,
&quot;target&quot;: &quot;c/numeric/math/erfc&quot;},
{&quot;string&quot;: &quot;exp&quot;,
&quot;target&quot;: &quot;c/numeric/math/exp&quot;},
{&quot;string&quot;: &quot;exp2&quot;,
&quot;target&quot;: &quot;c/numeric/math/exp2&quot;},
{&quot;string&quot;: &quot;expm1&quot;,
&quot;target&quot;: &quot;c/numeric/math/expm1&quot;},
{&quot;string&quot;: &quot;fabs&quot;,
&quot;target&quot;: &quot;c/numeric/math/fabs&quot;},
{&quot;string&quot;: &quot;fdim&quot;,
&quot;target&quot;: &quot;c/numeric/math/fdim&quot;},
{&quot;string&quot;: &quot;floor&quot;,
&quot;target&quot;: &quot;c/numeric/math/floor&quot;},
{&quot;string&quot;: &quot;fma&quot;,
&quot;target&quot;: &quot;c/numeric/math/fma&quot;},
{&quot;string&quot;: &quot;fmax&quot;,
&quot;target&quot;: &quot;c/numeric/math/fmax&quot;},
{&quot;string&quot;: &quot;fmin&quot;,
&quot;target&quot;: &quot;c/numeric/math/fmin&quot;},
{&quot;string&quot;: &quot;fmod&quot;,
&quot;target&quot;: &quot;c/numeric/math/fmod&quot;},
{&quot;string&quot;: &quot;fpclassify&quot;,
&quot;target&quot;: &quot;c/numeric/math/fpclassify&quot;},
{&quot;string&quot;: &quot;frexp&quot;,
&quot;target&quot;: &quot;c/numeric/math/frexp&quot;},
{&quot;string&quot;: &quot;hypot&quot;,
&quot;target&quot;: &quot;c/numeric/math/hypot&quot;},
{&quot;string&quot;: &quot;ilogb&quot;,
&quot;target&quot;: &quot;c/numeric/math/ilogb&quot;},
{&quot;string&quot;: &quot;isfinite&quot;,
&quot;target&quot;: &quot;c/numeric/math/isfinite&quot;},
{&quot;string&quot;: &quot;isinf&quot;,
&quot;target&quot;: &quot;c/numeric/math/isinf&quot;},
{&quot;string&quot;: &quot;isnan&quot;,
&quot;target&quot;: &quot;c/numeric/math/isnan&quot;},
{&quot;string&quot;: &quot;isnormal&quot;,
&quot;target&quot;: &quot;c/numeric/math/isnormal&quot;},
{&quot;string&quot;: &quot;ldexp&quot;,
&quot;target&quot;: &quot;c/numeric/math/ldexp&quot;},
{&quot;string&quot;: &quot;lgamma&quot;,
&quot;target&quot;: &quot;c/numeric/math/lgamma&quot;},
{&quot;string&quot;: &quot;log&quot;,
&quot;target&quot;: &quot;c/numeric/math/log&quot;},
{&quot;string&quot;: &quot;log10&quot;,
&quot;target&quot;: &quot;c/numeric/math/log10&quot;},
{&quot;string&quot;: &quot;log1p&quot;,
&quot;target&quot;: &quot;c/numeric/math/log1p&quot;},
{&quot;string&quot;: &quot;logb&quot;,
&quot;target&quot;: &quot;c/numeric/math/logb&quot;},
{&quot;string&quot;: &quot;modf&quot;,
&quot;target&quot;: &quot;c/numeric/math/modf&quot;},
{&quot;string&quot;: &quot;nan&quot;,
&quot;target&quot;: &quot;c/numeric/math/nan&quot;},
{&quot;string&quot;: &quot;nanf&quot;,
&quot;target&quot;: &quot;c/numeric/math/nan&quot;},
{&quot;string&quot;: &quot;nanl&quot;,
&quot;target&quot;: &quot;c/numeric/math/nan&quot;},
{&quot;string&quot;: &quot;nearbyint&quot;,
&quot;target&quot;: &quot;c/numeric/math/nearbyint&quot;},
{&quot;string&quot;: &quot;nextafter&quot;,
&quot;target&quot;: &quot;c/numeric/math/nextafter&quot;},
{&quot;string&quot;: &quot;nexttoward&quot;,
&quot;target&quot;: &quot;c/numeric/math/nextafter&quot;},
{&quot;string&quot;: &quot;pow&quot;,
&quot;target&quot;: &quot;c/numeric/math/pow&quot;},
{&quot;string&quot;: &quot;remainder&quot;,
&quot;target&quot;: &quot;c/numeric/math/remainder&quot;},
{&quot;string&quot;: &quot;remquo&quot;,
&quot;target&quot;: &quot;c/numeric/math/remquo&quot;},
{&quot;string&quot;: &quot;rint&quot;,
&quot;target&quot;: &quot;c/numeric/math/rint&quot;},
{&quot;string&quot;: &quot;lrint&quot;,
&quot;target&quot;: &quot;c/numeric/math/rint&quot;},
{&quot;string&quot;: &quot;llrint&quot;,
&quot;target&quot;: &quot;c/numeric/math/rint&quot;},
{&quot;string&quot;: &quot;round&quot;,
&quot;target&quot;: &quot;c/numeric/math/round&quot;},
{&quot;string&quot;: &quot;lround&quot;,
&quot;target&quot;: &quot;c/numeric/math/round&quot;},
{&quot;string&quot;: &quot;llround&quot;,
&quot;target&quot;: &quot;c/numeric/math/round&quot;},
{&quot;string&quot;: &quot;scalbn&quot;,
&quot;target&quot;: &quot;c/numeric/math/scalbn&quot;},
{&quot;string&quot;: &quot;scalbln&quot;,
&quot;target&quot;: &quot;c/numeric/math/scalbn&quot;},
{&quot;string&quot;: &quot;signbit&quot;,
&quot;target&quot;: &quot;c/numeric/math/signbit&quot;},
{&quot;string&quot;: &quot;sin&quot;,
&quot;target&quot;: &quot;c/numeric/math/sin&quot;},
{&quot;string&quot;: &quot;sinh&quot;,
&quot;target&quot;: &quot;c/numeric/math/sinh&quot;},
{&quot;string&quot;: &quot;sqrt&quot;,
&quot;target&quot;: &quot;c/numeric/math/sqrt&quot;},
{&quot;string&quot;: &quot;tan&quot;,
&quot;target&quot;: &quot;c/numeric/math/tan&quot;},
{&quot;string&quot;: &quot;tanh&quot;,
&quot;target&quot;: &quot;c/numeric/math/tanh&quot;},
{&quot;string&quot;: &quot;tgamma&quot;,
&quot;target&quot;: &quot;c/numeric/math/tgamma&quot;},
{&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;c/numeric/math/trunc&quot;},
{&quot;string&quot;: &quot;RAND_MAX&quot;,
&quot;target&quot;: &quot;c/numeric/random/RAND_MAX&quot;},
{&quot;string&quot;: &quot;rand&quot;,
&quot;target&quot;: &quot;c/numeric/random/rand&quot;},
{&quot;string&quot;: &quot;srand&quot;,
&quot;target&quot;: &quot;c/numeric/random/srand&quot;},
{&quot;string&quot;: &quot;EXIT_SUCCESS&quot;,
&quot;target&quot;: &quot;c/program/EXIT_status&quot;},
{&quot;string&quot;: &quot;EXIT_FAILURE&quot;,
&quot;target&quot;: &quot;c/program/EXIT_status&quot;},
{&quot;string&quot;: &quot;SIG_ERR&quot;,
&quot;target&quot;: &quot;c/program/SIG_ERR&quot;},
{&quot;string&quot;: &quot;SIG_DFL&quot;,
&quot;target&quot;: &quot;c/program/SIG_strategies&quot;},
{&quot;string&quot;: &quot;SIG_IGN&quot;,
&quot;target&quot;: &quot;c/program/SIG_strategies&quot;},
{&quot;string&quot;: &quot;SIGABRT&quot;,
&quot;target&quot;: &quot;c/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGFPE&quot;,
&quot;target&quot;: &quot;c/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGILL&quot;,
&quot;target&quot;: &quot;c/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGINT&quot;,
&quot;target&quot;: &quot;c/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGSEGV&quot;,
&quot;target&quot;: &quot;c/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGTERM&quot;,
&quot;target&quot;: &quot;c/program/SIG_types&quot;},
{&quot;string&quot;: &quot;_Exit&quot;,
&quot;target&quot;: &quot;c/program/_Exit&quot;},
{&quot;string&quot;: &quot;abort&quot;,
&quot;target&quot;: &quot;c/program/abort&quot;},
{&quot;string&quot;: &quot;at_quick_exit&quot;,
&quot;target&quot;: &quot;c/program/at_quick_exit&quot;},
{&quot;string&quot;: &quot;atexit&quot;,
&quot;target&quot;: &quot;c/program/atexit&quot;},
{&quot;string&quot;: &quot;exit&quot;,
&quot;target&quot;: &quot;c/program/exit&quot;},
{&quot;string&quot;: &quot;getenv&quot;,
&quot;target&quot;: &quot;c/program/getenv&quot;},
{&quot;string&quot;: &quot;jmp_buf&quot;,
&quot;target&quot;: &quot;c/program/jmp_buf&quot;},
{&quot;string&quot;: &quot;longjmp&quot;,
&quot;target&quot;: &quot;c/program/longjmp&quot;},
{&quot;string&quot;: &quot;quick_exit&quot;,
&quot;target&quot;: &quot;c/program/quick_exit&quot;},
{&quot;string&quot;: &quot;raise&quot;,
&quot;target&quot;: &quot;c/program/raise&quot;},
{&quot;string&quot;: &quot;setjmp&quot;,
&quot;target&quot;: &quot;c/program/setjmp&quot;},
{&quot;string&quot;: &quot;sig_atomic_t&quot;,
&quot;target&quot;: &quot;c/program/sig_atomic_t&quot;},
{&quot;string&quot;: &quot;signal&quot;,
&quot;target&quot;: &quot;c/program/signal&quot;},
{&quot;string&quot;: &quot;system&quot;,
&quot;target&quot;: &quot;c/program/system&quot;},
{&quot;string&quot;: &quot;atof&quot;,
&quot;target&quot;: &quot;c/string/byte/atof&quot;},
{&quot;string&quot;: &quot;atoi&quot;,
&quot;target&quot;: &quot;c/string/byte/atoi&quot;},
{&quot;string&quot;: &quot;atol&quot;,
&quot;target&quot;: &quot;c/string/byte/atoi&quot;},
{&quot;string&quot;: &quot;atoll&quot;,
&quot;target&quot;: &quot;c/string/byte/atoi&quot;},
{&quot;string&quot;: &quot;isalnum&quot;,
&quot;target&quot;: &quot;c/string/byte/isalnum&quot;},
{&quot;string&quot;: &quot;isalpha&quot;,
&quot;target&quot;: &quot;c/string/byte/isalpha&quot;},
{&quot;string&quot;: &quot;isblank&quot;,
&quot;target&quot;: &quot;c/string/byte/isblank&quot;},
{&quot;string&quot;: &quot;iscntrl&quot;,
&quot;target&quot;: &quot;c/string/byte/iscntrl&quot;},
{&quot;string&quot;: &quot;isdigit&quot;,
&quot;target&quot;: &quot;c/string/byte/isdigit&quot;},
{&quot;string&quot;: &quot;isgraph&quot;,
&quot;target&quot;: &quot;c/string/byte/isgraph&quot;},
{&quot;string&quot;: &quot;islower&quot;,
&quot;target&quot;: &quot;c/string/byte/islower&quot;},
{&quot;string&quot;: &quot;isprint&quot;,
&quot;target&quot;: &quot;c/string/byte/isprint&quot;},
{&quot;string&quot;: &quot;ispunct&quot;,
&quot;target&quot;: &quot;c/string/byte/ispunct&quot;},
{&quot;string&quot;: &quot;isspace&quot;,
&quot;target&quot;: &quot;c/string/byte/isspace&quot;},
{&quot;string&quot;: &quot;isupper&quot;,
&quot;target&quot;: &quot;c/string/byte/isupper&quot;},
{&quot;string&quot;: &quot;isxdigit&quot;,
&quot;target&quot;: &quot;c/string/byte/isxdigit&quot;},
{&quot;string&quot;: &quot;memchr&quot;,
&quot;target&quot;: &quot;c/string/byte/memchr&quot;},
{&quot;string&quot;: &quot;memcmp&quot;,
&quot;target&quot;: &quot;c/string/byte/memcmp&quot;},
{&quot;string&quot;: &quot;memcpy&quot;,
&quot;target&quot;: &quot;c/string/byte/memcpy&quot;},
{&quot;string&quot;: &quot;memmove&quot;,
&quot;target&quot;: &quot;c/string/byte/memmove&quot;},
{&quot;string&quot;: &quot;memset&quot;,
&quot;target&quot;: &quot;c/string/byte/memset&quot;},
{&quot;string&quot;: &quot;strcat&quot;,
&quot;target&quot;: &quot;c/string/byte/strcat&quot;},
{&quot;string&quot;: &quot;strchr&quot;,
&quot;target&quot;: &quot;c/string/byte/strchr&quot;},
{&quot;string&quot;: &quot;strcmp&quot;,
&quot;target&quot;: &quot;c/string/byte/strcmp&quot;},
{&quot;string&quot;: &quot;strcoll&quot;,
&quot;target&quot;: &quot;c/string/byte/strcoll&quot;},
{&quot;string&quot;: &quot;strcpy&quot;,
&quot;target&quot;: &quot;c/string/byte/strcpy&quot;},
{&quot;string&quot;: &quot;strcspn&quot;,
&quot;target&quot;: &quot;c/string/byte/strcspn&quot;},
{&quot;string&quot;: &quot;strerror&quot;,
&quot;target&quot;: &quot;c/string/byte/strerror&quot;},
{&quot;string&quot;: &quot;strlen&quot;,
&quot;target&quot;: &quot;c/string/byte/strlen&quot;},
{&quot;string&quot;: &quot;strncat&quot;,
&quot;target&quot;: &quot;c/string/byte/strncat&quot;},
{&quot;string&quot;: &quot;strncmp&quot;,
&quot;target&quot;: &quot;c/string/byte/strncmp&quot;},
{&quot;string&quot;: &quot;strncpy&quot;,
&quot;target&quot;: &quot;c/string/byte/strncpy&quot;},
{&quot;string&quot;: &quot;strpbrk&quot;,
&quot;target&quot;: &quot;c/string/byte/strpbrk&quot;},
{&quot;string&quot;: &quot;strrchr&quot;,
&quot;target&quot;: &quot;c/string/byte/strrchr&quot;},
{&quot;string&quot;: &quot;strspn&quot;,
&quot;target&quot;: &quot;c/string/byte/strspn&quot;},
{&quot;string&quot;: &quot;strstr&quot;,
&quot;target&quot;: &quot;c/string/byte/strstr&quot;},
{&quot;string&quot;: &quot;strtof&quot;,
&quot;target&quot;: &quot;c/string/byte/strtof&quot;},
{&quot;string&quot;: &quot;strtod&quot;,
&quot;target&quot;: &quot;c/string/byte/strtof&quot;},
{&quot;string&quot;: &quot;strtold&quot;,
&quot;target&quot;: &quot;c/string/byte/strtof&quot;},
{&quot;string&quot;: &quot;strtoimax&quot;,
&quot;target&quot;: &quot;c/string/byte/strtoimax&quot;},
{&quot;string&quot;: &quot;strtoumax&quot;,
&quot;target&quot;: &quot;c/string/byte/strtoimax&quot;},
{&quot;string&quot;: &quot;strtok&quot;,
&quot;target&quot;: &quot;c/string/byte/strtok&quot;},
{&quot;string&quot;: &quot;strtol&quot;,
&quot;target&quot;: &quot;c/string/byte/strtol&quot;},
{&quot;string&quot;: &quot;strtoll&quot;,
&quot;target&quot;: &quot;c/string/byte/strtol&quot;},
{&quot;string&quot;: &quot;strtoul&quot;,
&quot;target&quot;: &quot;c/string/byte/strtoul&quot;},
{&quot;string&quot;: &quot;strtoull&quot;,
&quot;target&quot;: &quot;c/string/byte/strtoul&quot;},
{&quot;string&quot;: &quot;strxfrm&quot;,
&quot;target&quot;: &quot;c/string/byte/strxfrm&quot;},
{&quot;string&quot;: &quot;tolower&quot;,
&quot;target&quot;: &quot;c/string/byte/tolower&quot;},
{&quot;string&quot;: &quot;toupper&quot;,
&quot;target&quot;: &quot;c/string/byte/toupper&quot;},
{&quot;string&quot;: &quot;btowc&quot;,
&quot;target&quot;: &quot;c/string/multibyte/btowc&quot;},
{&quot;string&quot;: &quot;c16rtomb&quot;,
&quot;target&quot;: &quot;c/string/multibyte/c16rtomb&quot;},
{&quot;string&quot;: &quot;c32rtomb&quot;,
&quot;target&quot;: &quot;c/string/multibyte/c32rtomb&quot;},
{&quot;string&quot;: &quot;mblen&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mblen&quot;},
{&quot;string&quot;: &quot;mbrlen&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbrlen&quot;},
{&quot;string&quot;: &quot;mbrtoc16&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbrtoc16&quot;},
{&quot;string&quot;: &quot;mbrtoc32&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbrtoc32&quot;},
{&quot;string&quot;: &quot;mbrtowc&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbrtowc&quot;},
{&quot;string&quot;: &quot;mbsinit&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbsinit&quot;},
{&quot;string&quot;: &quot;mbsrtowcs&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbsrtowcs&quot;},
{&quot;string&quot;: &quot;mbstate_t&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbstate_t&quot;},
{&quot;string&quot;: &quot;mbstowcs&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbstowcs&quot;},
{&quot;string&quot;: &quot;mbtowc&quot;,
&quot;target&quot;: &quot;c/string/multibyte/mbtowc&quot;},
{&quot;string&quot;: &quot;wcrtomb&quot;,
&quot;target&quot;: &quot;c/string/multibyte/wcrtomb&quot;},
{&quot;string&quot;: &quot;wcsrtombs&quot;,
&quot;target&quot;: &quot;c/string/multibyte/wcsrtombs&quot;},
{&quot;string&quot;: &quot;wcstombs&quot;,
&quot;target&quot;: &quot;c/string/multibyte/wcstombs&quot;},
{&quot;string&quot;: &quot;wctob&quot;,
&quot;target&quot;: &quot;c/string/multibyte/wctob&quot;},
{&quot;string&quot;: &quot;wctomb&quot;,
&quot;target&quot;: &quot;c/string/multibyte/wctomb&quot;},
{&quot;string&quot;: &quot;iswalnum&quot;,
&quot;target&quot;: &quot;c/string/wide/iswalnum&quot;},
{&quot;string&quot;: &quot;iswalpha&quot;,
&quot;target&quot;: &quot;c/string/wide/iswalpha&quot;},
{&quot;string&quot;: &quot;iswblank&quot;,
&quot;target&quot;: &quot;c/string/wide/iswblank&quot;},
{&quot;string&quot;: &quot;iswcntrl&quot;,
&quot;target&quot;: &quot;c/string/wide/iswcntrl&quot;},
{&quot;string&quot;: &quot;iswctype&quot;,
&quot;target&quot;: &quot;c/string/wide/iswctype&quot;},
{&quot;string&quot;: &quot;iswdigit&quot;,
&quot;target&quot;: &quot;c/string/wide/iswdigit&quot;},
{&quot;string&quot;: &quot;iswgraph&quot;,
&quot;target&quot;: &quot;c/string/wide/iswgraph&quot;},
{&quot;string&quot;: &quot;iswlower&quot;,
&quot;target&quot;: &quot;c/string/wide/iswlower&quot;},
{&quot;string&quot;: &quot;iswprint&quot;,
&quot;target&quot;: &quot;c/string/wide/iswprint&quot;},
{&quot;string&quot;: &quot;iswpunct&quot;,
&quot;target&quot;: &quot;c/string/wide/iswpunct&quot;},
{&quot;string&quot;: &quot;iswspace&quot;,
&quot;target&quot;: &quot;c/string/wide/iswspace&quot;},
{&quot;string&quot;: &quot;iswupper&quot;,
&quot;target&quot;: &quot;c/string/wide/iswupper&quot;},
{&quot;string&quot;: &quot;iswxdigit&quot;,
&quot;target&quot;: &quot;c/string/wide/iswxdigit&quot;},
{&quot;string&quot;: &quot;towctrans&quot;,
&quot;target&quot;: &quot;c/string/wide/towctrans&quot;},
{&quot;string&quot;: &quot;towlower&quot;,
&quot;target&quot;: &quot;c/string/wide/towlower&quot;},
{&quot;string&quot;: &quot;towupper&quot;,
&quot;target&quot;: &quot;c/string/wide/towupper&quot;},
{&quot;string&quot;: &quot;wcscat&quot;,
&quot;target&quot;: &quot;c/string/wide/wcscat&quot;},
{&quot;string&quot;: &quot;wcschr&quot;,
&quot;target&quot;: &quot;c/string/wide/wcschr&quot;},
{&quot;string&quot;: &quot;wcscmp&quot;,
&quot;target&quot;: &quot;c/string/wide/wcscmp&quot;},
{&quot;string&quot;: &quot;wcscoll&quot;,
&quot;target&quot;: &quot;c/string/wide/wcscoll&quot;},
{&quot;string&quot;: &quot;wcscpy&quot;,
&quot;target&quot;: &quot;c/string/wide/wcscpy&quot;},
{&quot;string&quot;: &quot;wcscspn&quot;,
&quot;target&quot;: &quot;c/string/wide/wcscspn&quot;},
{&quot;string&quot;: &quot;wcslen&quot;,
&quot;target&quot;: &quot;c/string/wide/wcslen&quot;},
{&quot;string&quot;: &quot;wcsncat&quot;,
&quot;target&quot;: &quot;c/string/wide/wcsncat&quot;},
{&quot;string&quot;: &quot;wcsncmp&quot;,
&quot;target&quot;: &quot;c/string/wide/wcsncmp&quot;},
{&quot;string&quot;: &quot;wcsncpy&quot;,
&quot;target&quot;: &quot;c/string/wide/wcsncpy&quot;},
{&quot;string&quot;: &quot;wcspbrk&quot;,
&quot;target&quot;: &quot;c/string/wide/wcspbrk&quot;},
{&quot;string&quot;: &quot;wcsrchr&quot;,
&quot;target&quot;: &quot;c/string/wide/wcsrchr&quot;},
{&quot;string&quot;: &quot;wcsspn&quot;,
&quot;target&quot;: &quot;c/string/wide/wcsspn&quot;},
{&quot;string&quot;: &quot;wcsstr&quot;,
&quot;target&quot;: &quot;c/string/wide/wcsstr&quot;},
{&quot;string&quot;: &quot;wcstof&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstof&quot;},
{&quot;string&quot;: &quot;wcstod&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstof&quot;},
{&quot;string&quot;: &quot;wcstold&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstof&quot;},
{&quot;string&quot;: &quot;wcstoimax&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstoimax&quot;},
{&quot;string&quot;: &quot;wcstoumax&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstoimax&quot;},
{&quot;string&quot;: &quot;wcstok&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstok&quot;},
{&quot;string&quot;: &quot;wcstol&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstol&quot;},
{&quot;string&quot;: &quot;wcstoll&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstol&quot;},
{&quot;string&quot;: &quot;wcstoul&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstoul&quot;},
{&quot;string&quot;: &quot;wcstoull&quot;,
&quot;target&quot;: &quot;c/string/wide/wcstoul&quot;},
{&quot;string&quot;: &quot;wcsxfrm&quot;,
&quot;target&quot;: &quot;c/string/wide/wcsxfrm&quot;},
{&quot;string&quot;: &quot;wctrans&quot;,
&quot;target&quot;: &quot;c/string/wide/wctrans&quot;},
{&quot;string&quot;: &quot;wctype&quot;,
&quot;target&quot;: &quot;c/string/wide/wctype&quot;},
{&quot;string&quot;: &quot;wmemchr&quot;,
&quot;target&quot;: &quot;c/string/wide/wmemchr&quot;},
{&quot;string&quot;: &quot;wmemcmp&quot;,
&quot;target&quot;: &quot;c/string/wide/wmemcmp&quot;},
{&quot;string&quot;: &quot;wmemcpy&quot;,
&quot;target&quot;: &quot;c/string/wide/wmemcpy&quot;},
{&quot;string&quot;: &quot;wmemmove&quot;,
&quot;target&quot;: &quot;c/string/wide/wmemmove&quot;},
{&quot;string&quot;: &quot;wmemset&quot;,
&quot;target&quot;: &quot;c/string/wide/wmemset&quot;},
{&quot;string&quot;: &quot;thrd_t&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;thrd_start_t&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;mtx_t&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;thrd_start_t&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;once_flag&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;cnd_t&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;tss_t&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;tss_dtor_t&quot;,
&quot;target&quot;: &quot;c/thread&quot;},
{&quot;string&quot;: &quot;ONCE_FLAG_INIT&quot;,
&quot;target&quot;: &quot;c/thread/ONCE_FLAG_INIT&quot;},
{&quot;string&quot;: &quot;TSS_DTOR_ITERATIONS&quot;,
&quot;target&quot;: &quot;c/thread/TSS_DTOR_ITERATIONS&quot;},
{&quot;string&quot;: &quot;call_once&quot;,
&quot;target&quot;: &quot;c/thread/call_once&quot;},
{&quot;string&quot;: &quot;cnd_broadcast&quot;,
&quot;target&quot;: &quot;c/thread/cnd_broadcast&quot;},
{&quot;string&quot;: &quot;cnd_destroy&quot;,
&quot;target&quot;: &quot;c/thread/cnd_destroy&quot;},
{&quot;string&quot;: &quot;cnd_init&quot;,
&quot;target&quot;: &quot;c/thread/cnd_init&quot;},
{&quot;string&quot;: &quot;cnd_signal&quot;,
&quot;target&quot;: &quot;c/thread/cnd_signal&quot;},
{&quot;string&quot;: &quot;cnd_timedwait&quot;,
&quot;target&quot;: &quot;c/thread/cnd_timedwait&quot;},
{&quot;string&quot;: &quot;cnd_wait&quot;,
&quot;target&quot;: &quot;c/thread/cnd_wait&quot;},
{&quot;string&quot;: &quot;mtx_destroy&quot;,
&quot;target&quot;: &quot;c/thread/mtx_destroy&quot;},
{&quot;string&quot;: &quot;mtx_init&quot;,
&quot;target&quot;: &quot;c/thread/mtx_init&quot;},
{&quot;string&quot;: &quot;mtx_lock&quot;,
&quot;target&quot;: &quot;c/thread/mtx_lock&quot;},
{&quot;string&quot;: &quot;mtx_timedlock&quot;,
&quot;target&quot;: &quot;c/thread/mtx_timedlock&quot;},
{&quot;string&quot;: &quot;mtx_trylock&quot;,
&quot;target&quot;: &quot;c/thread/mtx_trylock&quot;},
{&quot;string&quot;: &quot;mtx_plain&quot;,
&quot;target&quot;: &quot;c/thread/mtx_types&quot;},
{&quot;string&quot;: &quot;mtx_recursive&quot;,
&quot;target&quot;: &quot;c/thread/mtx_types&quot;},
{&quot;string&quot;: &quot;mtx_timed&quot;,
&quot;target&quot;: &quot;c/thread/mtx_types&quot;},
{&quot;string&quot;: &quot;mtx_unlock&quot;,
&quot;target&quot;: &quot;c/thread/mtx_unlock&quot;},
{&quot;string&quot;: &quot;thrd_create&quot;,
&quot;target&quot;: &quot;c/thread/thrd_create&quot;},
{&quot;string&quot;: &quot;thrd_current&quot;,
&quot;target&quot;: &quot;c/thread/thrd_current&quot;},
{&quot;string&quot;: &quot;thrd_detach&quot;,
&quot;target&quot;: &quot;c/thread/thrd_detach&quot;},
{&quot;string&quot;: &quot;thrd_equal&quot;,
&quot;target&quot;: &quot;c/thread/thrd_equal&quot;},
{&quot;string&quot;: &quot;thrd_success&quot;,
&quot;target&quot;: &quot;c/thread/thrd_errors&quot;},
{&quot;string&quot;: &quot;thrd_timeout&quot;,
&quot;target&quot;: &quot;c/thread/thrd_errors&quot;},
{&quot;string&quot;: &quot;thrd_busy&quot;,
&quot;target&quot;: &quot;c/thread/thrd_errors&quot;},
{&quot;string&quot;: &quot;thrd_nomem&quot;,
&quot;target&quot;: &quot;c/thread/thrd_errors&quot;},
{&quot;string&quot;: &quot;thrd_error&quot;,
&quot;target&quot;: &quot;c/thread/thrd_errors&quot;},
{&quot;string&quot;: &quot;thrd_exit&quot;,
&quot;target&quot;: &quot;c/thread/thrd_exit&quot;},
{&quot;string&quot;: &quot;thrd_join&quot;,
&quot;target&quot;: &quot;c/thread/thrd_join&quot;},
{&quot;string&quot;: &quot;thrd_sleep&quot;,
&quot;target&quot;: &quot;c/thread/thrd_sleep&quot;},
{&quot;string&quot;: &quot;thrd_yield&quot;,
&quot;target&quot;: &quot;c/thread/thrd_yield&quot;},
{&quot;string&quot;: &quot;thread_local&quot;,
&quot;target&quot;: &quot;c/thread/thread_local&quot;},
{&quot;string&quot;: &quot;tss_create&quot;,
&quot;target&quot;: &quot;c/thread/tss_create&quot;},
{&quot;string&quot;: &quot;tss_delete&quot;,
&quot;target&quot;: &quot;c/thread/tss_delete&quot;},
{&quot;string&quot;: &quot;tss_get&quot;,
&quot;target&quot;: &quot;c/thread/tss_get&quot;},
{&quot;string&quot;: &quot;tss_set&quot;,
&quot;target&quot;: &quot;c/thread/tss_set&quot;},
{&quot;string&quot;: &quot;NULL&quot;,
&quot;target&quot;: &quot;c/types/NULL&quot;},
{&quot;string&quot;: &quot;int8_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int16_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int32_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int64_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_fast8_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_fast16_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_fast32_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_fast64_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_least8_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_least16_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_least32_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;int_least64_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;intmax_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;intptr_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint8_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint16_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint32_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint64_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_fast8_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_fast16_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_fast32_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_fast64_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_least8_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_least16_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_least32_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uint_least64_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uintmax_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;uintptr_t&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT8_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT16_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT32_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT64_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST8_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST16_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST32_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST64_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST8_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST16_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST32_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST64_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INTPTR_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INTMAX_MIN&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT8_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT16_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT32_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT64_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST8_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST16_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST32_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST64_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST8_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST16_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST32_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST64_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INTPTR_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;INTMAX_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT8_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT16_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT32_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT64_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST8_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST16_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST32_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST64_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST8_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST16_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST32_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST64_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINTPTR_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;UINTMAX_MAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRId8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRId16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRId32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRId64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxPTR &quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST8&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST16&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST32&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST64&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXMAX&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXPTR&quot;,
&quot;target&quot;: &quot;c/types/integer&quot;},
{&quot;string&quot;: &quot;PTRDIFF_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;PTRDIFF_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;SIZE_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;SIG_ATOMIC_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;SIG_ATOMIC_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;WCHAR_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;WCHAR_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;WINT_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;WINT_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;CHAR_BIT&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;MB_LEN_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;CHAR_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;CHAR_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;SCHAR_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;SHRT_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;INT_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LONG_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LLONG_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;SCHAR_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;SHRT_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;INT_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LONG_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LLONG_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;UCHAR_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;USHRT_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;UINT_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;ULONG_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;ULLONG_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_RADIX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DECIMAL_DIG&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_MIN&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_MAX&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_EPSILON&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_EPSILON&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_EPSILON&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_DIG&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_DIG&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_DIG&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_MANT_DIG&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_MANT_DIG&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_MANT_DIG&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_MIN_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_MIN_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_MIN_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_MIN_10_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_MIN_10_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_MIN_10_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_MAX_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_MAX_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_MAX_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_MAX_10_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;DBL_MAX_10_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;LDBL_MAX_10_EXP&quot;,
&quot;target&quot;: &quot;c/types/limits&quot;},
{&quot;string&quot;: &quot;FLT_EVAL_METHOD&quot;,
&quot;target&quot;: &quot;c/types/limits/FLT_EVAL_METHOD&quot;},
{&quot;string&quot;: &quot;FLT_ROUNDS&quot;,
&quot;target&quot;: &quot;c/types/limits/FLT_ROUNDS&quot;},
{&quot;string&quot;: &quot;max_align_t&quot;,
&quot;target&quot;: &quot;c/types/max_align_t&quot;},
{&quot;string&quot;: &quot;nullptr_t&quot;,
&quot;target&quot;: &quot;c/types/nullptr_t&quot;},
{&quot;string&quot;: &quot;offsetof&quot;,
&quot;target&quot;: &quot;c/types/offsetof&quot;},
{&quot;string&quot;: &quot;ptrdiff_t&quot;,
&quot;target&quot;: &quot;c/types/ptrdiff_t&quot;},
{&quot;string&quot;: &quot;size_t&quot;,
&quot;target&quot;: &quot;c/types/size_t&quot;}]}</text>
      <sha1>33c0438905bfxkhllwyirv9ninvy8l0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Autolinker-definition-cpp</title>
    <ns>8</ns>
    <id>10284</id>
    <revision>
      <id>88040</id>
      <parentid>86431</parentid>
      <timestamp>2016-10-24T04:03:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="1388385">{&quot;groups&quot;: [{&quot;base_url&quot;: &quot;cpp/atomic/ATOMIC_FLAG_INIT&quot;,
&quot;name&quot;: &quot;ATOMIC_FLAG_INIT&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/add_cv&quot;,
&quot;name&quot;: &quot;std::add_const&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/add_cv&quot;,
&quot;name&quot;: &quot;std::add_cv&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/add_reference&quot;,
&quot;name&quot;: &quot;std::add_lvalue_reference&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/add_pointer&quot;,
&quot;name&quot;: &quot;std::add_pointer&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/add_reference&quot;,
&quot;name&quot;: &quot;std::add_rvalue_reference&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/add_cv&quot;,
&quot;name&quot;: &quot;std::add_volatile&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/lock_tag_t&quot;,
&quot;name&quot;: &quot;std::adopt_lock_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/new/align_val_t&quot;,
&quot;name&quot;: &quot;std::align_val_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/aligned_storage&quot;,
&quot;name&quot;: &quot;std::aligned_storage&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/aligned_union&quot;,
&quot;name&quot;: &quot;std::aligned_union&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/alignment_of&quot;,
&quot;name&quot;: &quot;std::alignment_of&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/allocator&quot;,
&quot;name&quot;: &quot;std::allocator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/allocator&quot;,
&quot;/~allocator&quot;,
&quot;/address&quot;,
&quot;/allocate&quot;,
&quot;/deallocate&quot;,
&quot;/max_size&quot;,
&quot;/construct&quot;,
&quot;/destroy&quot;,
&quot;/operator_cmp&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/allocator_arg_t&quot;,
&quot;name&quot;: &quot;std::allocator_arg_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/allocator_traits&quot;,
&quot;name&quot;: &quot;std::allocator_traits&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/allocate&quot;,
&quot;/deallocate&quot;,
&quot;/max_size&quot;,
&quot;/construct&quot;,
&quot;/destroy&quot;,
&quot;/select_on_container_copy_construction&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/any&quot;,
&quot;name&quot;: &quot;std::any&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/any&quot;,
&quot;/~any&quot;,
&quot;/operator=&quot;,
&quot;/emplace&quot;,
&quot;/reset&quot;,
&quot;/swap&quot;,
&quot;/has_value&quot;,
&quot;/type&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/array&quot;,
&quot;name&quot;: &quot;std::array&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/at&quot;,
&quot;/operator_at&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/data&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/fill&quot;,
&quot;/swap&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/get&quot;,
&quot;/tuple_size&quot;,
&quot;/tuple_element&quot;]},
{&quot;base_url&quot;: &quot;cpp/atomic/atomic&quot;,
&quot;name&quot;: &quot;std::atomic&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/atomic&quot;,
&quot;/operator=&quot;,
&quot;/is_lock_free&quot;,
&quot;/store&quot;,
&quot;/load&quot;,
&quot;/operator_T&quot;,
&quot;/exchange&quot;,
&quot;/compare_exchange&quot;,
&quot;/fetch_add&quot;,
&quot;/fetch_sub&quot;,
&quot;/fetch_and&quot;,
&quot;/fetch_or&quot;,
&quot;/fetch_xor&quot;,
&quot;/operator_arith&quot;,
&quot;/operator_arith2&quot;]},
{&quot;base_url&quot;: &quot;cpp/atomic/atomic_flag&quot;,
&quot;name&quot;: &quot;std::atomic_flag&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/atomic_flag&quot;,
&quot;/operator=&quot;,
&quot;/clear&quot;,
&quot;/test_and_set&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/auto_ptr&quot;,
&quot;name&quot;: &quot;std::auto_ptr&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/auto_ptr&quot;,
&quot;/~auto_ptr&quot;,
&quot;/operator=&quot;,
&quot;/reset&quot;,
&quot;/release&quot;,
&quot;/get&quot;,
&quot;/operator*&quot;,
&quot;/operator_auto_ptr&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/back_insert_iterator&quot;,
&quot;name&quot;: &quot;std::back_insert_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/new/bad_alloc&quot;,
&quot;name&quot;: &quot;std::bad_alloc&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/any/bad_any_cast&quot;,
&quot;name&quot;: &quot;std::bad_any_cast&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/new/bad_array_length&quot;,
&quot;name&quot;: &quot;std::bad_array_length&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/new/bad_array_new_length&quot;,
&quot;name&quot;: &quot;std::bad_array_new_length&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/bad_array_new_length&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/bad_cast&quot;,
&quot;name&quot;: &quot;std::bad_cast&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/bad_cast&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/bad_exception&quot;,
&quot;name&quot;: &quot;std::bad_exception&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/bad_function_call&quot;,
&quot;name&quot;: &quot;std::bad_function_call&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/optional/bad_optional_access&quot;,
&quot;name&quot;: &quot;std::bad_optional_access&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/bad_typeid&quot;,
&quot;name&quot;: &quot;std::bad_typeid&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/bad_typeid&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/variant/bad_variant_access&quot;,
&quot;name&quot;: &quot;std::bad_variant_access&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/bad_weak_ptr&quot;,
&quot;name&quot;: &quot;std::bad_weak_ptr&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/bad_weak_ptr&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_filebuf&quot;,
&quot;name&quot;: &quot;std::basic_filebuf&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_filebuf&quot;,
&quot;/~basic_filebuf&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/is_open&quot;,
&quot;/open&quot;,
&quot;/close&quot;,
&quot;/showmanyc&quot;,
&quot;/underflow&quot;,
&quot;/uflow&quot;,
&quot;/pbackfail&quot;,
&quot;/overflow&quot;,
&quot;/setbuf&quot;,
&quot;/seekoff&quot;,
&quot;/seekpos&quot;,
&quot;/sync&quot;,
&quot;/imbue&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_fstream&quot;,
&quot;name&quot;: &quot;std::basic_fstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_fstream&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/rdbuf&quot;,
&quot;/is_open&quot;,
&quot;/open&quot;,
&quot;/close&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_fstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_fstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_fstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_fstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_fstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_fstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_fstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_fstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ifstream&quot;,
&quot;name&quot;: &quot;std::basic_ifstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_ifstream&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/rdbuf&quot;,
&quot;/is_open&quot;,
&quot;/open&quot;,
&quot;/close&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_istream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_ifstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ios&quot;,
&quot;name&quot;: &quot;std::basic_ios&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_ios&quot;,
&quot;/~basic_ios&quot;,
&quot;/good&quot;,
&quot;/eof&quot;,
&quot;/fail&quot;,
&quot;/bad&quot;,
&quot;/operator!&quot;,
&quot;/operator_bool&quot;,
&quot;/rdstate&quot;,
&quot;/setstate&quot;,
&quot;/clear&quot;,
&quot;/copyfmt&quot;,
&quot;/fill&quot;,
&quot;/exceptions&quot;,
&quot;/imbue&quot;,
&quot;/rdbuf&quot;,
&quot;/tie&quot;,
&quot;/narrow&quot;,
&quot;/widen&quot;,
&quot;/init&quot;,
&quot;/move&quot;,
&quot;/swap&quot;,
&quot;/set_rdbuf&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_ios::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_ios::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_ios::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_ios::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_ios::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_ios::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_ios::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_iostream&quot;,
&quot;name&quot;: &quot;std::basic_iostream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_iostream&quot;,
&quot;/~basic_iostream&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_iostream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_iostream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_iostream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_iostream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_iostream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_iostream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_iostream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_iostream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_istream&quot;,
&quot;name&quot;: &quot;std::basic_istream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_istream&quot;,
&quot;/~basic_istream&quot;,
&quot;/operator_gtgt&quot;,
&quot;/get&quot;,
&quot;/peek&quot;,
&quot;/unget&quot;,
&quot;/putback&quot;,
&quot;/getline&quot;,
&quot;/ignore&quot;,
&quot;/read&quot;,
&quot;/readsome&quot;,
&quot;/gcount&quot;,
&quot;/tellg&quot;,
&quot;/seekg&quot;,
&quot;/sync&quot;,
&quot;/sentry&quot;,
&quot;/operator_gtgt2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_istream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_istream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_istream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_istream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_istream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_istream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_istream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_istream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_istream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_istringstream&quot;,
&quot;name&quot;: &quot;std::basic_istringstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_istringstream&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/rdbuf&quot;,
&quot;/str&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_istream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_istringstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ofstream&quot;,
&quot;name&quot;: &quot;std::basic_ofstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_ofstream&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/rdbuf&quot;,
&quot;/is_open&quot;,
&quot;/open&quot;,
&quot;/close&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_ofstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream&quot;,
&quot;name&quot;: &quot;std::basic_ostream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_ostream&quot;,
&quot;/~basic_ostream&quot;,
&quot;/operator_ltlt&quot;,
&quot;/put&quot;,
&quot;/write&quot;,
&quot;/tellp&quot;,
&quot;/seekp&quot;,
&quot;/flush&quot;,
&quot;/sentry&quot;,
&quot;/operator_ltlt2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_ostream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_ostream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_ostream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_ostream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_ostream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_ostream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_ostream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_ostream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostringstream&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_ostringstream&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/rdbuf&quot;,
&quot;/str&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_ostringstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/basic_regex&quot;,
&quot;name&quot;: &quot;std::basic_regex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_regex&quot;,
&quot;/~basic_regex&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/mark_count&quot;,
&quot;/flags&quot;,
&quot;/getloc&quot;,
&quot;/imbue&quot;,
&quot;/swap&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_streambuf&quot;,
&quot;name&quot;: &quot;std::basic_streambuf&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_streambuf&quot;,
&quot;/~basic_streambuf&quot;,
&quot;/pubimbue&quot;,
&quot;/getloc&quot;,
&quot;/pubsetbuf&quot;,
&quot;/pubseekoff&quot;,
&quot;/pubseekpos&quot;,
&quot;/pubsync&quot;,
&quot;/in_avail&quot;,
&quot;/snextc&quot;,
&quot;/sbumpc&quot;,
&quot;/sgetc&quot;,
&quot;/sgetn&quot;,
&quot;/sputc&quot;,
&quot;/sputn&quot;,
&quot;/sputbackc&quot;,
&quot;/sungetc&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/showmanyc&quot;,
&quot;/underflow&quot;,
&quot;/uflow&quot;,
&quot;/gptr&quot;,
&quot;/gbump&quot;,
&quot;/setg&quot;,
&quot;/overflow&quot;,
&quot;/pptr&quot;,
&quot;/pbump&quot;,
&quot;/setp&quot;,
&quot;/pbackfail&quot;]},
{&quot;base_url&quot;: &quot;cpp/string/basic_string&quot;,
&quot;name&quot;: &quot;std::basic_string&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_string&quot;,
&quot;/assign&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/at&quot;,
&quot;/operator_at&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/data&quot;,
&quot;/c_str&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/reserve&quot;,
&quot;/capacity&quot;,
&quot;/shrink_to_fit&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/erase&quot;,
&quot;/push_back&quot;,
&quot;/pop_back&quot;,
&quot;/append&quot;,
&quot;/compare&quot;,
&quot;/replace&quot;,
&quot;/substr&quot;,
&quot;/copy&quot;,
&quot;/resize&quot;,
&quot;/swap&quot;,
&quot;/find&quot;,
&quot;/rfind&quot;,
&quot;/find_first_of&quot;,
&quot;/find_first_not_of&quot;,
&quot;/find_last_of&quot;,
&quot;/find_last_not_of&quot;,
&quot;/npos&quot;,
&quot;/operator+&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/operator_ltltgtgt&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/string/basic_string_view&quot;,
&quot;name&quot;: &quot;std::basic_string_view&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_string_view&quot;,
&quot;/operator=&quot;,
&quot;/begin&quot;,
&quot;/rbegin&quot;,
&quot;/end&quot;,
&quot;/rend&quot;,
&quot;/operator_at&quot;,
&quot;/at&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/data&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/empty&quot;,
&quot;/remove_prefix&quot;,
&quot;/remove_suffix&quot;,
&quot;/swap&quot;,
&quot;/copy&quot;,
&quot;/substr&quot;,
&quot;/compare&quot;,
&quot;/find&quot;,
&quot;/rfind&quot;,
&quot;/find_first_of&quot;,
&quot;/find_last_of&quot;,
&quot;/find_first_not_of&quot;,
&quot;/find_last_not_of&quot;,
&quot;/npos&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltlt&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_stringbuf&quot;,
&quot;name&quot;: &quot;std::basic_stringbuf&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_stringbuf&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/str&quot;,
&quot;/underflow&quot;,
&quot;/pbackfail&quot;,
&quot;/overflow&quot;,
&quot;/setbuf&quot;,
&quot;/seekoff&quot;,
&quot;/seekpos&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_stringstream&quot;,
&quot;name&quot;: &quot;std::basic_stringstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_stringstream&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/rdbuf&quot;,
&quot;/str&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::basic_stringstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/bernoulli_distribution&quot;,
&quot;name&quot;: &quot;std::bernoulli_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/bernoulli_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/p&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/iterator_tags&quot;,
&quot;name&quot;: &quot;std::bidirectional_iterator_tag&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/binary_function&quot;,
&quot;name&quot;: &quot;std::binary_function&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/binary_negate&quot;,
&quot;name&quot;: &quot;std::binary_negate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/binomial_distribution&quot;,
&quot;name&quot;: &quot;std::binomial_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/binomial_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/bit_and&quot;,
&quot;name&quot;: &quot;std::bit_and&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/bit_not&quot;,
&quot;name&quot;: &quot;std::bit_not&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/bit_or&quot;,
&quot;name&quot;: &quot;std::bit_or&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/bitset&quot;,
&quot;name&quot;: &quot;std::bitset&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/bitset&quot;,
&quot;/reference&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_at&quot;,
&quot;/test&quot;,
&quot;/all_any_none&quot;,
&quot;/count&quot;,
&quot;/size&quot;,
&quot;/operator_logic&quot;,
&quot;/operator_ltltgtgt&quot;,
&quot;/set&quot;,
&quot;/reset&quot;,
&quot;/flip&quot;,
&quot;/to_string&quot;,
&quot;/to_ulong&quot;,
&quot;/to_ullong&quot;,
&quot;/operator_logic2&quot;,
&quot;/operator_ltltgtgt2&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/bitset/reference&quot;,
&quot;name&quot;: &quot;std::bitset::reference&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/boyer_moore_horspool_searcher&quot;,
&quot;name&quot;: &quot;std::boyer_moore_horspool_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/boyer_moore_searcher&quot;,
&quot;name&quot;: &quot;std::boyer_moore_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/cauchy_distribution&quot;,
&quot;name&quot;: &quot;std::cauchy_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/cauchy_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/cerr&quot;,
&quot;name&quot;: &quot;std::cerr&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/string/char_traits&quot;,
&quot;name&quot;: &quot;std::char_traits&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/assign&quot;,
&quot;/cmp&quot;,
&quot;/move&quot;,
&quot;/copy&quot;,
&quot;/compare&quot;,
&quot;/length&quot;,
&quot;/find&quot;,
&quot;/to_char_type&quot;,
&quot;/to_int_type&quot;,
&quot;/eq_int_type&quot;,
&quot;/eof&quot;,
&quot;/not_eof&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/chi_squared_distribution&quot;,
&quot;name&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/chi_squared_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/n&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/duration&quot;,
&quot;name&quot;: &quot;std::chrono::duration&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/duration&quot;,
&quot;/operator=&quot;,
&quot;/count&quot;,
&quot;/zero&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_arith&quot;,
&quot;/operator_arith2&quot;,
&quot;/operator_arith3&quot;,
&quot;/operator_arith4&quot;,
&quot;/operator_cmp&quot;,
&quot;/floor&quot;,
&quot;/ceil&quot;,
&quot;/round&quot;,
&quot;/abs&quot;,
&quot;/common_type&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/duration_values&quot;,
&quot;name&quot;: &quot;std::chrono::duration_values&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/zero&quot;,
&quot;/min&quot;,
&quot;/max&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/high_resolution_clock&quot;,
&quot;name&quot;: &quot;std::chrono::high_resolution_clock&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/now&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/steady_clock&quot;,
&quot;name&quot;: &quot;std::chrono::steady_clock&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/now&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/system_clock&quot;,
&quot;name&quot;: &quot;std::chrono::system_clock&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/now&quot;,
&quot;/to_time_t&quot;,
&quot;/from_time_t&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/time_point&quot;,
&quot;name&quot;: &quot;std::chrono::time_point&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/time_point&quot;,
&quot;/time_since_epoch&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_arith&quot;,
&quot;/operator_arith2&quot;,
&quot;/operator_cmp&quot;,
&quot;/floor&quot;,
&quot;/ceil&quot;,
&quot;/round&quot;,
&quot;/common_type&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/treat_as_floating_point&quot;,
&quot;name&quot;: &quot;std::chrono::treat_as_floating_point&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/cin&quot;,
&quot;name&quot;: &quot;std::cin&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/clog&quot;,
&quot;name&quot;: &quot;std::clog&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt&quot;,
&quot;name&quot;: &quot;std::codecvt&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;_base&quot;,
&quot;/codecvt&quot;,
&quot;/~codecvt&quot;,
&quot;/out&quot;,
&quot;/in&quot;,
&quot;/unshift&quot;,
&quot;/encoding&quot;,
&quot;/always_noconv&quot;,
&quot;/length&quot;,
&quot;/max_length&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_base&quot;,
&quot;name&quot;: &quot;std::codecvt::result&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_base&quot;,
&quot;name&quot;: &quot;std::codecvt_base&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_base&quot;,
&quot;name&quot;: &quot;std::codecvt_base::result&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_byname&quot;,
&quot;name&quot;: &quot;std::codecvt_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_base&quot;,
&quot;name&quot;: &quot;std::codecvt_byname::result&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_mode&quot;,
&quot;name&quot;: &quot;std::codecvt_mode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_utf16&quot;,
&quot;name&quot;: &quot;std::codecvt_utf16&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_base&quot;,
&quot;name&quot;: &quot;std::codecvt_utf16::result&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_utf8&quot;,
&quot;name&quot;: &quot;std::codecvt_utf8&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_base&quot;,
&quot;name&quot;: &quot;std::codecvt_utf8::result&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_utf8_utf16&quot;,
&quot;name&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/codecvt_base&quot;,
&quot;name&quot;: &quot;std::codecvt_utf8_utf16::result&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/collate&quot;,
&quot;name&quot;: &quot;std::collate&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/collate&quot;,
&quot;/~collate&quot;,
&quot;/compare&quot;,
&quot;/transform&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/collate_byname&quot;,
&quot;name&quot;: &quot;std::collate_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/common_type&quot;,
&quot;name&quot;: &quot;std::common_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/complex&quot;,
&quot;name&quot;: &quot;std::complex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/complex&quot;,
&quot;/operator=&quot;,
&quot;/real&quot;,
&quot;/imag&quot;,
&quot;/operator_arith&quot;,
&quot;/operator_arith2&quot;,
&quot;/operator_arith3&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;,
&quot;/abs&quot;,
&quot;/arg&quot;,
&quot;/norm&quot;,
&quot;/conj&quot;,
&quot;/proj&quot;,
&quot;/polar&quot;,
&quot;/exp&quot;,
&quot;/log&quot;,
&quot;/log10&quot;,
&quot;/pow&quot;,
&quot;/sqrt&quot;,
&quot;/sin&quot;,
&quot;/cos&quot;,
&quot;/tan&quot;,
&quot;/asin&quot;,
&quot;/acos&quot;,
&quot;/atan&quot;,
&quot;/sinh&quot;,
&quot;/cosh&quot;,
&quot;/tanh&quot;,
&quot;/asinh&quot;,
&quot;/acosh&quot;,
&quot;/atanh&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/condition_variable&quot;,
&quot;name&quot;: &quot;std::condition_variable&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/condition_variable&quot;,
&quot;/~condition_variable&quot;,
&quot;/notify_one&quot;,
&quot;/notify_all&quot;,
&quot;/wait&quot;,
&quot;/wait_for&quot;,
&quot;/wait_until&quot;,
&quot;/native_handle&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/condition_variable_any&quot;,
&quot;name&quot;: &quot;std::condition_variable_any&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/condition_variable_any&quot;,
&quot;/~condition_variable_any&quot;,
&quot;/notify_one&quot;,
&quot;/notify_all&quot;,
&quot;/wait&quot;,
&quot;/wait_for&quot;,
&quot;/wait_until&quot;,
&quot;/native_handle&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/conditional&quot;,
&quot;name&quot;: &quot;std::conditional&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/conjunction&quot;,
&quot;name&quot;: &quot;std::conjunction&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/cout&quot;,
&quot;name&quot;: &quot;std::cout&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/ctype&quot;,
&quot;name&quot;: &quot;std::ctype&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;_base&quot;,
&quot;/ctype&quot;,
&quot;/~ctype&quot;,
&quot;/is&quot;,
&quot;/scan_is&quot;,
&quot;/toupper&quot;,
&quot;/tolower&quot;,
&quot;/widen&quot;,
&quot;/narrow&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/ctype_base&quot;,
&quot;name&quot;: &quot;std::ctype_base&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/ctype_byname&quot;,
&quot;name&quot;: &quot;std::ctype_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/cv_status&quot;,
&quot;name&quot;: &quot;std::cv_status&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/decay&quot;,
&quot;name&quot;: &quot;std::decay&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/default_delete&quot;,
&quot;name&quot;: &quot;std::default_delete&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/default_searcher&quot;,
&quot;name&quot;: &quot;std::default_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/lock_tag_t&quot;,
&quot;name&quot;: &quot;std::defer_lock_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/deque&quot;,
&quot;name&quot;: &quot;std::deque&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/deque&quot;,
&quot;/~deque&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/get_allocator&quot;,
&quot;/at&quot;,
&quot;/operator_at&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/shrink_to_fit&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/erase&quot;,
&quot;/push_back&quot;,
&quot;/emplace_back&quot;,
&quot;/pop_back&quot;,
&quot;/push_front&quot;,
&quot;/emplace_front&quot;,
&quot;/pop_front&quot;,
&quot;/resize&quot;,
&quot;/swap&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/discard_block_engine&quot;,
&quot;name&quot;: &quot;std::discard_block_engine&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/discard_block_engine&quot;,
&quot;/seed&quot;,
&quot;/base&quot;,
&quot;/operator()&quot;,
&quot;/discard&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/discrete_distribution&quot;,
&quot;name&quot;: &quot;std::discrete_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/discrete_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/probabilities&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/disjunction&quot;,
&quot;name&quot;: &quot;std::disjunction&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/math/div&quot;,
&quot;name&quot;: &quot;std::div_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/divides&quot;,
&quot;name&quot;: &quot;std::divides&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/domain_error&quot;,
&quot;name&quot;: &quot;std::domain_error&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/enable_if&quot;,
&quot;name&quot;: &quot;std::enable_if&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/enable_shared_from_this&quot;,
&quot;name&quot;: &quot;std::enable_shared_from_this&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/enable_shared_from_this&quot;,
&quot;/~enable_shared_from_this&quot;,
&quot;/operator=&quot;,
&quot;/shared_from_this&quot;,
&quot;/weak_from_this&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/equal_to&quot;,
&quot;name&quot;: &quot;std::equal_to&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/errc&quot;,
&quot;name&quot;: &quot;std::errc&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/is_error_condition_enum&quot;,
&quot;/make_error_code&quot;,
&quot;/make_error_condition&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/error_category&quot;,
&quot;name&quot;: &quot;std::error_category&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/error_category&quot;,
&quot;/~error_category&quot;,
&quot;/name&quot;,
&quot;/default_error_condition&quot;,
&quot;/equivalent&quot;,
&quot;/message&quot;,
&quot;/operator_cmp&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/error_code&quot;,
&quot;name&quot;: &quot;std::error_code&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/error_code&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/clear&quot;,
&quot;/value&quot;,
&quot;/category&quot;,
&quot;/default_error_condition&quot;,
&quot;/message&quot;,
&quot;/operator_bool&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltlt&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/error_condition&quot;,
&quot;name&quot;: &quot;std::error_condition&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/error_condition&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/clear&quot;,
&quot;/value&quot;,
&quot;/category&quot;,
&quot;/message&quot;,
&quot;/operator_bool&quot;,
&quot;/operator_cmp&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/exception&quot;,
&quot;name&quot;: &quot;std::exception&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/exception&quot;,
&quot;/~exception&quot;,
&quot;/operator=&quot;,
&quot;/what&quot;]},
{&quot;base_url&quot;: &quot;cpp/algorithm/execution_policy_tag_t&quot;,
&quot;name&quot;: &quot;std::execution::parallel_policy&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/algorithm/execution_policy_tag_t&quot;,
&quot;name&quot;: &quot;std::execution::parallel_unsequenced_policy&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/algorithm/execution_policy_tag_t&quot;,
&quot;name&quot;: &quot;std::execution::sequenced_policy&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/any&quot;,
&quot;name&quot;: &quot;std::experimental::any&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/any&quot;,
&quot;/operator=&quot;,
&quot;/clear&quot;,
&quot;/empty&quot;,
&quot;/swap&quot;,
&quot;/type&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/optional/bad_optional_access&quot;,
&quot;name&quot;: &quot;std::experimental::bad_optional_access&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/basic_string_view&quot;,
&quot;name&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/basic_string_view&quot;,
&quot;/operator=&quot;,
&quot;/begin&quot;,
&quot;/rbegin&quot;,
&quot;/end&quot;,
&quot;/rend&quot;,
&quot;/operator_at&quot;,
&quot;/at&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/data&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/empty&quot;,
&quot;/remove_prefix&quot;,
&quot;/remove_suffix&quot;,
&quot;/swap&quot;,
&quot;/to_string&quot;,
&quot;/copy&quot;,
&quot;/substr&quot;,
&quot;/compare&quot;,
&quot;/find&quot;,
&quot;/rfind&quot;,
&quot;/find_first_of&quot;,
&quot;/find_last_of&quot;,
&quot;/find_first_not_of&quot;,
&quot;/find_last_not_of&quot;,
&quot;/npos&quot;,
&quot;/operator_cmp&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/boyer_moore_horspool_searcher&quot;,
&quot;name&quot;: &quot;std::experimental::boyer_moore_horspool_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/boyer_moore_searcher&quot;,
&quot;name&quot;: &quot;std::experimental::boyer_moore_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/default_searcher&quot;,
&quot;name&quot;: &quot;std::experimental::default_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/is_detected&quot;,
&quot;name&quot;: &quot;std::experimental::detected_or&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/erased_type&quot;,
&quot;name&quot;: &quot;std::experimental::erased_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/copy_options&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/directory_entry&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/directory_entry&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/replace_filename&quot;,
&quot;/path&quot;,
&quot;/status&quot;,
&quot;/operator_cmp&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/directory_iterator&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::directory_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/directory_iterator&quot;,
&quot;/operator=&quot;,
&quot;/operator*&quot;,
&quot;/increment&quot;,
&quot;/begin&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/directory_options&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::directory_options&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/file_status&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::file_status&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/file_status&quot;,
&quot;/operator=&quot;,
&quot;/type&quot;,
&quot;/permissions&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/file_type&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/filesystem_error&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::filesystem_error&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/filesystem_error&quot;,
&quot;/path&quot;,
&quot;/what&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/path&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/path&quot;,
&quot;/~path&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/append&quot;,
&quot;/concat&quot;,
&quot;/clear&quot;,
&quot;/make_preferred&quot;,
&quot;/remove_filename&quot;,
&quot;/replace_filename&quot;,
&quot;/replace_extension&quot;,
&quot;/swap&quot;,
&quot;/native&quot;,
&quot;/string&quot;,
&quot;/generic_string&quot;,
&quot;/compare&quot;,
&quot;/root_name&quot;,
&quot;/root_directory&quot;,
&quot;/root_path&quot;,
&quot;/relative_path&quot;,
&quot;/parent_path&quot;,
&quot;/filename&quot;,
&quot;/stem&quot;,
&quot;/extension&quot;,
&quot;/empty&quot;,
&quot;/has_path&quot;,
&quot;/begin&quot;,
&quot;/swap2&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_slash&quot;,
&quot;/operator_ltltgtgt&quot;,
&quot;/u8path&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/perms&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/recursive_directory_iterator&quot;,
&quot;/operator*&quot;,
&quot;/options&quot;,
&quot;/depth&quot;,
&quot;/recursion_pending&quot;,
&quot;/operator=&quot;,
&quot;/increment&quot;,
&quot;/pop&quot;,
&quot;/disable_recursion_pending&quot;,
&quot;/begin&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/fs/space_info&quot;,
&quot;name&quot;: &quot;std::experimental::filesystem::space_info&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/invocation_type&quot;,
&quot;name&quot;: &quot;std::experimental::invocation_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/is_detected&quot;,
&quot;name&quot;: &quot;std::experimental::is_detected&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/is_detected&quot;,
&quot;name&quot;: &quot;std::experimental::is_detected_convertible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/is_detected&quot;,
&quot;name&quot;: &quot;std::experimental::is_detected_exact&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/nonesuch&quot;,
&quot;name&quot;: &quot;std::experimental::nonesuch&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/observer_ptr&quot;,
&quot;name&quot;: &quot;std::experimental::observer_ptr&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/optional&quot;,
&quot;name&quot;: &quot;std::experimental::optional&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/optional&quot;,
&quot;/~optional&quot;,
&quot;/operator=&quot;,
&quot;/operator*&quot;,
&quot;/operator_bool&quot;,
&quot;/value&quot;,
&quot;/value_or&quot;,
&quot;/swap&quot;,
&quot;/emplace&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/ostream_joiner&quot;,
&quot;name&quot;: &quot;std::experimental::ostream_joiner&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/memory_resource&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/memory_resource&quot;,
&quot;/allocate&quot;,
&quot;/deallocate&quot;,
&quot;/is_equal&quot;,
&quot;/do_allocate&quot;,
&quot;/do_deallocate&quot;,
&quot;/do_is_equal&quot;,
&quot;/operator_eq&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/monotonic_buffer_resource&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::monotonic_buffer_resource&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/new_delete_resource&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::new_delete_resource&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/null_Memory_resource&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::null_memory_resource&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/polymorphic_allocator&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::polymorphic_allocator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/resource_adaptor&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::resource_adaptor&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/synchronized_pool_resource&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::synchronized_pool_resource&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/unsynchronized_pool_resource&quot;,
&quot;name&quot;: &quot;std::experimental::pmr::unsynchronized_pool_resource&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/propagate_const&quot;,
&quot;name&quot;: &quot;std::experimental::propagate_const&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/raw_invocation_type&quot;,
&quot;name&quot;: &quot;std::experimental::raw_invocation_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/experimental/source_location&quot;,
&quot;name&quot;: &quot;std::experimental::source_location&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/exponential_distribution&quot;,
&quot;name&quot;: &quot;std::exponential_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/exponential_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/lambda&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/extent&quot;,
&quot;name&quot;: &quot;std::extent&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/extreme_value_distribution&quot;,
&quot;name&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/extreme_value_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/copy_options&quot;,
&quot;name&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/directory_entry&quot;,
&quot;name&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/directory_entry&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/replace_filename&quot;,
&quot;/path&quot;,
&quot;/status&quot;,
&quot;/operator_cmp&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/directory_iterator&quot;,
&quot;name&quot;: &quot;std::filesystem::directory_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/directory_iterator&quot;,
&quot;/operator=&quot;,
&quot;/operator*&quot;,
&quot;/increment&quot;,
&quot;/begin&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/directory_options&quot;,
&quot;name&quot;: &quot;std::filesystem::directory_options&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/file_status&quot;,
&quot;name&quot;: &quot;std::filesystem::file_status&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/file_status&quot;,
&quot;/~file_status&quot;,
&quot;/operator=&quot;,
&quot;/type&quot;,
&quot;/permissions&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/file_type&quot;,
&quot;name&quot;: &quot;std::filesystem::file_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/filesystem_error&quot;,
&quot;name&quot;: &quot;std::filesystem::filesystem_error&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/filesystem_error&quot;,
&quot;/path&quot;,
&quot;/what&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/path&quot;,
&quot;name&quot;: &quot;std::filesystem::path&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/path&quot;,
&quot;/~path&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/append&quot;,
&quot;/concat&quot;,
&quot;/clear&quot;,
&quot;/make_preferred&quot;,
&quot;/remove_filename&quot;,
&quot;/replace_filename&quot;,
&quot;/replace_extension&quot;,
&quot;/swap&quot;,
&quot;/native&quot;,
&quot;/string&quot;,
&quot;/generic_string&quot;,
&quot;/compare&quot;,
&quot;/lexically_normal&quot;,
&quot;/root_name&quot;,
&quot;/root_directory&quot;,
&quot;/root_path&quot;,
&quot;/relative_path&quot;,
&quot;/parent_path&quot;,
&quot;/filename&quot;,
&quot;/stem&quot;,
&quot;/extension&quot;,
&quot;/empty&quot;,
&quot;/has_path&quot;,
&quot;/is_absrel&quot;,
&quot;/begin&quot;,
&quot;/swap2&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_slash&quot;,
&quot;/operator_ltltgtgt&quot;,
&quot;/hash_value&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/perms&quot;,
&quot;name&quot;: &quot;std::filesystem::perms&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/recursive_directory_iterator&quot;,
&quot;name&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/recursive_directory_iterator&quot;,
&quot;/operator*&quot;,
&quot;/options&quot;,
&quot;/depth&quot;,
&quot;/recursion_pending&quot;,
&quot;/operator=&quot;,
&quot;/increment&quot;,
&quot;/pop&quot;,
&quot;/disable_recursion_pending&quot;,
&quot;/begin&quot;]},
{&quot;base_url&quot;: &quot;cpp/filesystem/space_info&quot;,
&quot;name&quot;: &quot;std::filesystem::space_info&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/fisher_f_distribution&quot;,
&quot;name&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/fisher_f_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/numeric_limits/float_denorm_style&quot;,
&quot;name&quot;: &quot;std::float_denorm_style&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/numeric_limits/float_round_style&quot;,
&quot;name&quot;: &quot;std::float_round_style&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/iterator_tags&quot;,
&quot;name&quot;: &quot;std::forward_iterator_tag&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/forward_list&quot;,
&quot;name&quot;: &quot;std::forward_list&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/forward_list&quot;,
&quot;/~forward_list&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/get_allocator&quot;,
&quot;/front&quot;,
&quot;/before_begin&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/empty&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert_after&quot;,
&quot;/emplace_after&quot;,
&quot;/erase_after&quot;,
&quot;/push_front&quot;,
&quot;/emplace_front&quot;,
&quot;/pop_front&quot;,
&quot;/resize&quot;,
&quot;/swap&quot;,
&quot;/merge&quot;,
&quot;/splice_after&quot;,
&quot;/remove&quot;,
&quot;/reverse&quot;,
&quot;/unique&quot;,
&quot;/sort&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/fpos&quot;,
&quot;name&quot;: &quot;std::fpos&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/state&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/front_insert_iterator&quot;,
&quot;name&quot;: &quot;std::front_insert_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/function&quot;,
&quot;name&quot;: &quot;std::function&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/function&quot;,
&quot;/~function&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/assign&quot;,
&quot;/operator_bool&quot;,
&quot;/operator()&quot;,
&quot;/target_type&quot;,
&quot;/target&quot;,
&quot;/operator_cmp&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/future&quot;,
&quot;name&quot;: &quot;std::future&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/future&quot;,
&quot;/~future&quot;,
&quot;/operator=&quot;,
&quot;/share&quot;,
&quot;/get&quot;,
&quot;/valid&quot;,
&quot;/wait&quot;,
&quot;/wait_for&quot;,
&quot;/wait_until&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/future_errc&quot;,
&quot;name&quot;: &quot;std::future_errc&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/is_error_code_enum&quot;,
&quot;/make_error_code&quot;,
&quot;/make_error_condition&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/future_error&quot;,
&quot;name&quot;: &quot;std::future_error&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/future_error&quot;,
&quot;/code&quot;,
&quot;/what&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/future_status&quot;,
&quot;name&quot;: &quot;std::future_status&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/gamma_distribution&quot;,
&quot;name&quot;: &quot;std::gamma_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/gamma_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/geometric_distribution&quot;,
&quot;name&quot;: &quot;std::geometric_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/geometric_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/p&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/greater&quot;,
&quot;name&quot;: &quot;std::greater&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/greater_equal&quot;,
&quot;name&quot;: &quot;std::greater_equal&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/valarray/gslice&quot;,
&quot;name&quot;: &quot;std::gslice&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/valarray/gslice_array&quot;,
&quot;name&quot;: &quot;std::gslice_array&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/has_unique_object_representations&quot;,
&quot;name&quot;: &quot;std::has_unique_object_representations&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/has_virtual_destructor&quot;,
&quot;name&quot;: &quot;std::has_virtual_destructor&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/hash&quot;,
&quot;name&quot;: &quot;std::hash&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/hash&quot;,
&quot;/operator()&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/math/div&quot;,
&quot;name&quot;: &quot;std::imaxdiv_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/in_place_tag&quot;,
&quot;name&quot;: &quot;std::in_place_tag&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/independent_bits_engine&quot;,
&quot;name&quot;: &quot;std::independent_bits_engine&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/independent_bits_engine&quot;,
&quot;/seed&quot;,
&quot;/base&quot;,
&quot;/operator()&quot;,
&quot;/discard&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/valarray/indirect_array&quot;,
&quot;name&quot;: &quot;std::indirect_array&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/initializer_list&quot;,
&quot;name&quot;: &quot;std::initializer_list&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/initializer_list&quot;,
&quot;/size&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/begin2&quot;,
&quot;/end2&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/iterator_tags&quot;,
&quot;name&quot;: &quot;std::input_iterator_tag&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/insert_iterator&quot;,
&quot;name&quot;: &quot;std::insert_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/integer_sequence&quot;,
&quot;name&quot;: &quot;std::integer_sequence&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/integral_constant&quot;,
&quot;name&quot;: &quot;std::integral_constant&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/invalid_argument&quot;,
&quot;name&quot;: &quot;std::invalid_argument&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/io_errc&quot;,
&quot;name&quot;: &quot;std::io_errc&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/is_error_code_enum&quot;,
&quot;/make_error_code&quot;,
&quot;/make_error_condition&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base&quot;,
&quot;name&quot;: &quot;std::ios_base&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/ios_base&quot;,
&quot;/~ios_base&quot;,
&quot;/flags&quot;,
&quot;/setf&quot;,
&quot;/unsetf&quot;,
&quot;/precision&quot;,
&quot;/width&quot;,
&quot;/imbue&quot;,
&quot;/getloc&quot;,
&quot;/xalloc&quot;,
&quot;/iword&quot;,
&quot;/pword&quot;,
&quot;/register_callback&quot;,
&quot;/sync_with_stdio&quot;,
&quot;/failure&quot;,
&quot;/openmode&quot;,
&quot;/fmtflags&quot;,
&quot;/iostate&quot;,
&quot;/seekdir&quot;,
&quot;/event&quot;,
&quot;/event_callback&quot;,
&quot;/Init&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::ios_base::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::ios_base::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::ios_base::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::ios_base::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::ios_base::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::ios_base::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::ios_base::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_abstract&quot;,
&quot;name&quot;: &quot;std::is_abstract&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_arithmetic&quot;,
&quot;name&quot;: &quot;std::is_arithmetic&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_array&quot;,
&quot;name&quot;: &quot;std::is_array&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_assignable&quot;,
&quot;name&quot;: &quot;std::is_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_base_of&quot;,
&quot;name&quot;: &quot;std::is_base_of&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/is_bind_expression&quot;,
&quot;name&quot;: &quot;std::is_bind_expression&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_callable&quot;,
&quot;name&quot;: &quot;std::is_callable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_class&quot;,
&quot;name&quot;: &quot;std::is_class&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_compound&quot;,
&quot;name&quot;: &quot;std::is_compound&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_const&quot;,
&quot;name&quot;: &quot;std::is_const&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_constructible&quot;,
&quot;name&quot;: &quot;std::is_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_convertible&quot;,
&quot;name&quot;: &quot;std::is_convertible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_copy_assignable&quot;,
&quot;name&quot;: &quot;std::is_copy_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_copy_constructible&quot;,
&quot;name&quot;: &quot;std::is_copy_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_default_constructible&quot;,
&quot;name&quot;: &quot;std::is_default_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_destructible&quot;,
&quot;name&quot;: &quot;std::is_destructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_empty&quot;,
&quot;name&quot;: &quot;std::is_empty&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_enum&quot;,
&quot;name&quot;: &quot;std::is_enum&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/error_code/is_error_code_enum&quot;,
&quot;name&quot;: &quot;std::is_error_code_enum&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/error_code/is_error_code_enum&quot;,
&quot;name&quot;: &quot;std::is_error_code_enum_v&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/error_condition/is_error_condition_enum&quot;,
&quot;name&quot;: &quot;std::is_error_condition_enum&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/algorithm/is_execution_policy&quot;,
&quot;name&quot;: &quot;std::is_execution_policy&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_final&quot;,
&quot;name&quot;: &quot;std::is_final&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_floating_point&quot;,
&quot;name&quot;: &quot;std::is_floating_point&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_function&quot;,
&quot;name&quot;: &quot;std::is_function&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_fundamental&quot;,
&quot;name&quot;: &quot;std::is_fundamental&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_integral&quot;,
&quot;name&quot;: &quot;std::is_integral&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_literal_type&quot;,
&quot;name&quot;: &quot;std::is_literal_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_lvalue_reference&quot;,
&quot;name&quot;: &quot;std::is_lvalue_reference&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_member_function_pointer&quot;,
&quot;name&quot;: &quot;std::is_member_function_pointer&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_member_object_pointer&quot;,
&quot;name&quot;: &quot;std::is_member_object_pointer&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_member_pointer&quot;,
&quot;name&quot;: &quot;std::is_member_pointer&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_move_assignable&quot;,
&quot;name&quot;: &quot;std::is_move_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_move_constructible&quot;,
&quot;name&quot;: &quot;std::is_move_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_assignable&quot;,
&quot;name&quot;: &quot;std::is_nothrow_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_callable&quot;,
&quot;name&quot;: &quot;std::is_nothrow_callable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_constructible&quot;,
&quot;name&quot;: &quot;std::is_nothrow_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_copy_assignable&quot;,
&quot;name&quot;: &quot;std::is_nothrow_copy_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_copy_constructible&quot;,
&quot;name&quot;: &quot;std::is_nothrow_copy_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_default_constructible&quot;,
&quot;name&quot;: &quot;std::is_nothrow_default_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_destructible&quot;,
&quot;name&quot;: &quot;std::is_nothrow_destructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_move_assignable&quot;,
&quot;name&quot;: &quot;std::is_nothrow_move_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_move_constructible&quot;,
&quot;name&quot;: &quot;std::is_nothrow_move_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_swappable&quot;,
&quot;name&quot;: &quot;std::is_nothrow_swappable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_swappable_with&quot;,
&quot;name&quot;: &quot;std::is_nothrow_swappable_with&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_null_pointer&quot;,
&quot;name&quot;: &quot;std::is_null_pointer&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_object&quot;,
&quot;name&quot;: &quot;std::is_object&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/is_placeholder&quot;,
&quot;name&quot;: &quot;std::is_placeholder&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_pod&quot;,
&quot;name&quot;: &quot;std::is_pod&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_pointer&quot;,
&quot;name&quot;: &quot;std::is_pointer&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_polymorphic&quot;,
&quot;name&quot;: &quot;std::is_polymorphic&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_reference&quot;,
&quot;name&quot;: &quot;std::is_reference&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_rvalue_reference&quot;,
&quot;name&quot;: &quot;std::is_rvalue_reference&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_same&quot;,
&quot;name&quot;: &quot;std::is_same&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_scalar&quot;,
&quot;name&quot;: &quot;std::is_scalar&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_signed&quot;,
&quot;name&quot;: &quot;std::is_signed&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_standard_layout&quot;,
&quot;name&quot;: &quot;std::is_standard_layout&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_swappable&quot;,
&quot;name&quot;: &quot;std::is_swappable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_swappable_with&quot;,
&quot;name&quot;: &quot;std::is_swappable_with&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_trivial&quot;,
&quot;name&quot;: &quot;std::is_trivial&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_assignable&quot;,
&quot;name&quot;: &quot;std::is_trivially_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_constructible&quot;,
&quot;name&quot;: &quot;std::is_trivially_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_copy_assignable&quot;,
&quot;name&quot;: &quot;std::is_trivially_copy_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_copy_constructible&quot;,
&quot;name&quot;: &quot;std::is_trivially_copy_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_trivially_copyable&quot;,
&quot;name&quot;: &quot;std::is_trivially_copyable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_default_constructible&quot;,
&quot;name&quot;: &quot;std::is_trivially_default_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_destructible&quot;,
&quot;name&quot;: &quot;std::is_trivially_destructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_move_assignable&quot;,
&quot;name&quot;: &quot;std::is_trivially_move_assignable&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_move_constructible&quot;,
&quot;name&quot;: &quot;std::is_trivially_move_constructible&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_union&quot;,
&quot;name&quot;: &quot;std::is_union&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_unsigned&quot;,
&quot;name&quot;: &quot;std::is_unsigned&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_void&quot;,
&quot;name&quot;: &quot;std::is_void&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/is_volatile&quot;,
&quot;name&quot;: &quot;std::is_volatile&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/istream_iterator&quot;,
&quot;name&quot;: &quot;std::istream_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/istreambuf_iterator&quot;,
&quot;name&quot;: &quot;std::istreambuf_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/istrstream&quot;,
&quot;name&quot;: &quot;std::istrstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/istrstream&quot;,
&quot;/~istrstream&quot;,
&quot;/rdbuf&quot;,
&quot;/str&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::istrstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::istrstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::istrstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::istrstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::istrstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::istrstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::istrstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_istream/sentry&quot;,
&quot;name&quot;: &quot;std::istrstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/iterator&quot;,
&quot;name&quot;: &quot;std::iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/iterator_traits&quot;,
&quot;name&quot;: &quot;std::iterator_traits&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/launch&quot;,
&quot;name&quot;: &quot;std::launch&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/lconv&quot;,
&quot;name&quot;: &quot;std::lconv&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/math/div&quot;,
&quot;name&quot;: &quot;std::ldiv_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/length_error&quot;,
&quot;name&quot;: &quot;std::length_error&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/less&quot;,
&quot;name&quot;: &quot;std::less&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/less_equal&quot;,
&quot;name&quot;: &quot;std::less_equal&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/linear_congruential_engine&quot;,
&quot;name&quot;: &quot;std::linear_congruential_engine&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/linear_congruential_engine&quot;,
&quot;/seed&quot;,
&quot;/operator()&quot;,
&quot;/discard&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/list&quot;,
&quot;name&quot;: &quot;std::list&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/list&quot;,
&quot;/~list&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/get_allocator&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/erase&quot;,
&quot;/push_back&quot;,
&quot;/emplace_back&quot;,
&quot;/pop_back&quot;,
&quot;/push_front&quot;,
&quot;/emplace_front&quot;,
&quot;/pop_front&quot;,
&quot;/resize&quot;,
&quot;/swap&quot;,
&quot;/merge&quot;,
&quot;/splice&quot;,
&quot;/remove&quot;,
&quot;/reverse&quot;,
&quot;/unique&quot;,
&quot;/sort&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/math/div&quot;,
&quot;name&quot;: &quot;std::lldiv_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/locale&quot;,
&quot;name&quot;: &quot;std::locale&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/locale&quot;,
&quot;/~locale&quot;,
&quot;/operator=&quot;,
&quot;/combine&quot;,
&quot;/name&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator()&quot;,
&quot;/global&quot;,
&quot;/classic&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/locale/facet&quot;,
&quot;name&quot;: &quot;std::locale::facet&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/facet&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/locale/id&quot;,
&quot;name&quot;: &quot;std::locale::id&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/id&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/lock_guard&quot;,
&quot;name&quot;: &quot;std::lock_guard&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/lock_guard&quot;,
&quot;/~lock_guard&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/logic_error&quot;,
&quot;name&quot;: &quot;std::logic_error&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/logical_and&quot;,
&quot;name&quot;: &quot;std::logical_and&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/logical_not&quot;,
&quot;name&quot;: &quot;std::logical_not&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/logical_or&quot;,
&quot;name&quot;: &quot;std::logical_or&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/lognormal_distribution&quot;,
&quot;name&quot;: &quot;std::lognormal_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/lognormal_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/boyer_moore_horspool_searcher&quot;,
&quot;name&quot;: &quot;std::make_boyer_moore_horspool_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/boyer_moore_searcher&quot;,
&quot;name&quot;: &quot;std::make_boyer_moore_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/default_searcher&quot;,
&quot;name&quot;: &quot;std::make_default_searcher&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/make_signed&quot;,
&quot;name&quot;: &quot;std::make_signed&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/make_unsigned&quot;,
&quot;name&quot;: &quot;std::make_unsigned&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/map&quot;,
&quot;name&quot;: &quot;std::map&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/value_compare&quot;,
&quot;/map&quot;,
&quot;/~map&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/at&quot;,
&quot;/operator_at&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/insert_or_assign&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/try_emplace&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/lower_bound&quot;,
&quot;/upper_bound&quot;,
&quot;/key_comp&quot;,
&quot;/value_comp&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/map/value_compare&quot;,
&quot;name&quot;: &quot;std::map::value_compare&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/valarray/mask_array&quot;,
&quot;name&quot;: &quot;std::mask_array&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/match_results&quot;,
&quot;name&quot;: &quot;std::match_results&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/match_results&quot;,
&quot;/~match_results&quot;,
&quot;/get_allocator&quot;,
&quot;/ready&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/length&quot;,
&quot;/position&quot;,
&quot;/str&quot;,
&quot;/operator_at&quot;,
&quot;/prefix&quot;,
&quot;/suffix&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/format&quot;,
&quot;/swap&quot;]},
{&quot;base_url&quot;: &quot;cpp/string/multibyte/mbstate_t&quot;,
&quot;name&quot;: &quot;std::mbstate_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/atomic/memory_order&quot;,
&quot;name&quot;: &quot;std::memory_order&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/mersenne_twister_engine&quot;,
&quot;name&quot;: &quot;std::mersenne_twister_engine&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/mersenne_twister_engine&quot;,
&quot;/seed&quot;,
&quot;/operator()&quot;,
&quot;/discard&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/messages&quot;,
&quot;name&quot;: &quot;std::messages&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;_base&quot;,
&quot;/messages&quot;,
&quot;/~messages&quot;,
&quot;/open&quot;,
&quot;/get&quot;,
&quot;/close&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/messages_base&quot;,
&quot;name&quot;: &quot;std::messages_base&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/messages_byname&quot;,
&quot;name&quot;: &quot;std::messages_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/minus&quot;,
&quot;name&quot;: &quot;std::minus&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/modulus&quot;,
&quot;name&quot;: &quot;std::modulus&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::money_base&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::money_base::part&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::money_base::pattern&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_get&quot;,
&quot;name&quot;: &quot;std::money_get&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/money_get&quot;,
&quot;/~money_get&quot;,
&quot;/get&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::money_get::part&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::money_get::pattern&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_put&quot;,
&quot;name&quot;: &quot;std::money_put&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/money_put&quot;,
&quot;/~money_put&quot;,
&quot;/put&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::money_put::part&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::money_put::pattern&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/moneypunct&quot;,
&quot;name&quot;: &quot;std::moneypunct&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/moneypunct&quot;,
&quot;/~moneypunct&quot;,
&quot;/decimal_point&quot;,
&quot;/thousands_sep&quot;,
&quot;/grouping&quot;,
&quot;/curr_symbol&quot;,
&quot;/positive_sign&quot;,
&quot;/frac_digits&quot;,
&quot;/pos_format&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::moneypunct::part&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::moneypunct::pattern&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/moneypunct_byname&quot;,
&quot;name&quot;: &quot;std::moneypunct_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::moneypunct_byname::part&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/money_base&quot;,
&quot;name&quot;: &quot;std::moneypunct_byname::pattern&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/variant/monostate&quot;,
&quot;name&quot;: &quot;std::monostate&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/monostate&quot;,
&quot;/~monostate&quot;,
&quot;/operator=&quot;,
&quot;/operator_cmp&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/move_iterator&quot;,
&quot;name&quot;: &quot;std::move_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/multimap&quot;,
&quot;name&quot;: &quot;std::multimap&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/value_compare&quot;,
&quot;/multimap&quot;,
&quot;/~multimap&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/lower_bound&quot;,
&quot;/upper_bound&quot;,
&quot;/key_comp&quot;,
&quot;/value_comp&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/multimap/value_compare&quot;,
&quot;name&quot;: &quot;std::multimap::value_compare&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/multiplies&quot;,
&quot;name&quot;: &quot;std::multiplies&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/multiset&quot;,
&quot;name&quot;: &quot;std::multiset&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/multiset&quot;,
&quot;/~multiset&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/lower_bound&quot;,
&quot;/upper_bound&quot;,
&quot;/key_comp&quot;,
&quot;/value_comp&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/mutex&quot;,
&quot;name&quot;: &quot;std::mutex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/mutex&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/unlock&quot;,
&quot;/native_handle&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/negate&quot;,
&quot;name&quot;: &quot;std::negate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/negation&quot;,
&quot;name&quot;: &quot;std::negation&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/negative_binomial_distribution&quot;,
&quot;name&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/negative_binomial_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/nested_exception&quot;,
&quot;name&quot;: &quot;std::nested_exception&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/nested_exception&quot;,
&quot;/~nested_exception&quot;,
&quot;/operator=&quot;,
&quot;/rethrow_nested&quot;,
&quot;/nested_ptr&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/normal_distribution&quot;,
&quot;name&quot;: &quot;std::normal_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/normal_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/not_equal_to&quot;,
&quot;name&quot;: &quot;std::not_equal_to&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/new/nothrow_t&quot;,
&quot;name&quot;: &quot;std::nothrow_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/optional/nullopt_t&quot;,
&quot;name&quot;: &quot;std::nullopt_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/num_get&quot;,
&quot;name&quot;: &quot;std::num_get&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/num_get&quot;,
&quot;/~num_get&quot;,
&quot;/get&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/num_put&quot;,
&quot;name&quot;: &quot;std::num_put&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/num_put&quot;,
&quot;/~num_put&quot;,
&quot;/put&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/numeric_limits&quot;,
&quot;name&quot;: &quot;std::numeric_limits&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/is_specialized&quot;,
&quot;/is_signed&quot;,
&quot;/is_integer&quot;,
&quot;/is_exact&quot;,
&quot;/has_infinity&quot;,
&quot;/has_quiet_NaN&quot;,
&quot;/has_signaling_NaN&quot;,
&quot;/has_denorm&quot;,
&quot;/has_denorm_loss&quot;,
&quot;/round_style&quot;,
&quot;/is_iec559&quot;,
&quot;/is_bounded&quot;,
&quot;/is_modulo&quot;,
&quot;/digits&quot;,
&quot;/digits10&quot;,
&quot;/max_digits10&quot;,
&quot;/radix&quot;,
&quot;/min_exponent&quot;,
&quot;/min_exponent10&quot;,
&quot;/max_exponent&quot;,
&quot;/max_exponent10&quot;,
&quot;/traps&quot;,
&quot;/tinyness_before&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/lowest&quot;,
&quot;/epsilon&quot;,
&quot;/round_error&quot;,
&quot;/infinity&quot;,
&quot;/quiet_NaN&quot;,
&quot;/signaling_NaN&quot;,
&quot;/denorm_min&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/numpunct&quot;,
&quot;name&quot;: &quot;std::numpunct&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/numpunct&quot;,
&quot;/~numpunct&quot;,
&quot;/decimal_point&quot;,
&quot;/thousands_sep&quot;,
&quot;/grouping&quot;,
&quot;/truefalsename&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/numpunct_byname&quot;,
&quot;name&quot;: &quot;std::numpunct_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/once_flag&quot;,
&quot;name&quot;: &quot;std::once_flag&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/optional&quot;,
&quot;name&quot;: &quot;std::optional&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/optional&quot;,
&quot;/~optional&quot;,
&quot;/operator=&quot;,
&quot;/operator*&quot;,
&quot;/operator_bool&quot;,
&quot;/value&quot;,
&quot;/value_or&quot;,
&quot;/swap&quot;,
&quot;/reset&quot;,
&quot;/emplace&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/ostream_iterator&quot;,
&quot;name&quot;: &quot;std::ostream_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/ostreambuf_iterator&quot;,
&quot;name&quot;: &quot;std::ostreambuf_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ostrstream&quot;,
&quot;name&quot;: &quot;std::ostrstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/ostrstream&quot;,
&quot;/~ostrstream&quot;,
&quot;/rdbuf&quot;,
&quot;/str&quot;,
&quot;/freeze&quot;,
&quot;/pcount&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::ostrstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::ostrstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::ostrstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::ostrstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::ostrstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::ostrstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::ostrstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::ostrstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/out_of_range&quot;,
&quot;name&quot;: &quot;std::out_of_range&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/iterator_tags&quot;,
&quot;name&quot;: &quot;std::output_iterator_tag&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/overflow_error&quot;,
&quot;name&quot;: &quot;std::overflow_error&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/owner_less&quot;,
&quot;name&quot;: &quot;std::owner_less&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/packaged_task&quot;,
&quot;name&quot;: &quot;std::packaged_task&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/packaged_task&quot;,
&quot;/~packaged_task&quot;,
&quot;/operator=&quot;,
&quot;/valid&quot;,
&quot;/swap&quot;,
&quot;/get_future&quot;,
&quot;/operator()&quot;,
&quot;/make_ready_at_thread_exit&quot;,
&quot;/reset&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/pair&quot;,
&quot;name&quot;: &quot;std::pair&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/pair&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/get&quot;,
&quot;/tuple_size&quot;,
&quot;/tuple_element&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution&quot;,
&quot;name&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/piecewise_constant_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/piecewise_construct_t&quot;,
&quot;name&quot;: &quot;std::piecewise_construct_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution&quot;,
&quot;name&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/piecewise_linear_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/placeholders&quot;,
&quot;name&quot;: &quot;std::placeholders&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/plus&quot;,
&quot;name&quot;: &quot;std::plus&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/memory_resource&quot;,
&quot;name&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/memory_resource&quot;,
&quot;/allocate&quot;,
&quot;/deallocate&quot;,
&quot;/is_equal&quot;,
&quot;/do_allocate&quot;,
&quot;/do_deallocate&quot;,
&quot;/do_is_equal&quot;,
&quot;/operator_eq&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/monotonic_buffer_resource&quot;,
&quot;name&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/monotonic_buffer_resource&quot;,
&quot;/release&quot;,
&quot;/upstream_resource&quot;,
&quot;/do_allocate&quot;,
&quot;/do_deallocate&quot;,
&quot;/do_is_equal&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/polymorphic_allocator&quot;,
&quot;name&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/polymorphic_allocator&quot;,
&quot;/allocate&quot;,
&quot;/deallocate&quot;,
&quot;/construct&quot;,
&quot;/destroy&quot;,
&quot;/select_on_container_copy_contruction&quot;,
&quot;/resource&quot;,
&quot;/operator_cmp&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/pool_options&quot;,
&quot;name&quot;: &quot;std::pmr::pool_options&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/synchronized_pool_resource&quot;,
&quot;name&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/synchronized_pool_resource&quot;,
&quot;/release&quot;,
&quot;/upstream_resource&quot;,
&quot;/options&quot;,
&quot;/do_allocate&quot;,
&quot;/do_deallocate&quot;,
&quot;/do_is_equal&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/unsynchronized_pool_resource&quot;,
&quot;name&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/unsynchronized_pool_resource&quot;,
&quot;/release&quot;,
&quot;/upstream_resource&quot;,
&quot;/options&quot;,
&quot;/do_allocate&quot;,
&quot;/do_deallocate&quot;,
&quot;/do_is_equal&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/gc/pointer_safety&quot;,
&quot;name&quot;: &quot;std::pointer_safety&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/pointer_traits&quot;,
&quot;name&quot;: &quot;std::pointer_traits&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/pointer_to&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/poisson_distribution&quot;,
&quot;name&quot;: &quot;std::poisson_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/poisson_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/mean&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/priority_queue&quot;,
&quot;name&quot;: &quot;std::priority_queue&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/priority_queue&quot;,
&quot;/~priority_queue&quot;,
&quot;/operator=&quot;,
&quot;/top&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/push&quot;,
&quot;/emplace&quot;,
&quot;/pop&quot;,
&quot;/swap&quot;,
&quot;/swap2&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/promise&quot;,
&quot;name&quot;: &quot;std::promise&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/promise&quot;,
&quot;/~promise&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/get_future&quot;,
&quot;/set_value&quot;,
&quot;/set_value_at_thread_exit&quot;,
&quot;/set_exception&quot;,
&quot;/set_exception_at_thread_exit&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/queue&quot;,
&quot;name&quot;: &quot;std::queue&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/queue&quot;,
&quot;/~queue&quot;,
&quot;/operator=&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/push&quot;,
&quot;/emplace&quot;,
&quot;/pop&quot;,
&quot;/swap&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/iterator_tags&quot;,
&quot;name&quot;: &quot;std::random_access_iterator_tag&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/random_device&quot;,
&quot;name&quot;: &quot;std::random_device&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/random_device&quot;,
&quot;/operator()&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/entropy&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/range_error&quot;,
&quot;name&quot;: &quot;std::range_error&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/rank&quot;,
&quot;name&quot;: &quot;std::rank&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio&quot;,
&quot;name&quot;: &quot;std::ratio&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_add&quot;,
&quot;name&quot;: &quot;std::ratio_add&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_divide&quot;,
&quot;name&quot;: &quot;std::ratio_divide&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_equal&quot;,
&quot;name&quot;: &quot;std::ratio_equal&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_greater&quot;,
&quot;name&quot;: &quot;std::ratio_greater&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_greater_equal&quot;,
&quot;name&quot;: &quot;std::ratio_greater_equal&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_less&quot;,
&quot;name&quot;: &quot;std::ratio_less&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_less_equal&quot;,
&quot;name&quot;: &quot;std::ratio_less_equal&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_multiply&quot;,
&quot;name&quot;: &quot;std::ratio_multiply&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_not_equal&quot;,
&quot;name&quot;: &quot;std::ratio_not_equal&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/ratio/ratio_subtract&quot;,
&quot;name&quot;: &quot;std::ratio_subtract&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/raw_storage_iterator&quot;,
&quot;name&quot;: &quot;std::raw_storage_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/raw_storage_iterator&quot;,
&quot;/operator*&quot;,
&quot;/operator=&quot;,
&quot;/operator_arith&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/recursive_mutex&quot;,
&quot;name&quot;: &quot;std::recursive_mutex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/recursive_mutex&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/unlock&quot;,
&quot;/native_handle&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/recursive_timed_mutex&quot;,
&quot;name&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/recursive_timed_mutex&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/try_lock_for&quot;,
&quot;/try_lock_until&quot;,
&quot;/unlock&quot;,
&quot;/native_handle&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/reference_wrapper&quot;,
&quot;name&quot;: &quot;std::reference_wrapper&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/reference_wrapper&quot;,
&quot;/operator=&quot;,
&quot;/get&quot;,
&quot;/operator()&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_backref&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_badbrace&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_badrepeat&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_brace&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_brack&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_collate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_complexity&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_ctype&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_escape&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_paren&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_range&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_space&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_stack&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/error_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::error_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/match_flag_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::match_flag_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/syntax_option_type&quot;,
&quot;name&quot;: &quot;std::regex_constants::syntax_option_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/regex_error&quot;,
&quot;name&quot;: &quot;std::regex_error&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/regex_error&quot;,
&quot;/code&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/regex_iterator&quot;,
&quot;name&quot;: &quot;std::regex_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/regex_iterator&quot;,
&quot;/operator=&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator*&quot;,
&quot;/operator_arith&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/regex_token_iterator&quot;,
&quot;name&quot;: &quot;std::regex_token_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/regex_token_iterator&quot;,
&quot;/operator=&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator*&quot;,
&quot;/operator_arith&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/regex_traits&quot;,
&quot;name&quot;: &quot;std::regex_traits&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/regex_traits&quot;,
&quot;/length&quot;,
&quot;/translate&quot;,
&quot;/translate_nocase&quot;,
&quot;/transform&quot;,
&quot;/transform_primary&quot;,
&quot;/lookup_collatename&quot;,
&quot;/lookup_classname&quot;,
&quot;/isctype&quot;,
&quot;/value&quot;,
&quot;/imbue&quot;,
&quot;/getloc&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/remove_all_extents&quot;,
&quot;name&quot;: &quot;std::remove_all_extents&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/remove_cv&quot;,
&quot;name&quot;: &quot;std::remove_const&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/remove_cv&quot;,
&quot;name&quot;: &quot;std::remove_cv&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/remove_extent&quot;,
&quot;name&quot;: &quot;std::remove_extent&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/remove_pointer&quot;,
&quot;name&quot;: &quot;std::remove_pointer&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/remove_reference&quot;,
&quot;name&quot;: &quot;std::remove_reference&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/remove_cv&quot;,
&quot;name&quot;: &quot;std::remove_volatile&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/result_of&quot;,
&quot;name&quot;: &quot;std::result_of&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/iterator/reverse_iterator&quot;,
&quot;name&quot;: &quot;std::reverse_iterator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/runtime_error&quot;,
&quot;name&quot;: &quot;std::runtime_error&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/scoped_allocator_adaptor&quot;,
&quot;name&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/scoped_allocator_adaptor&quot;,
&quot;/~scoped_allocator_adaptor&quot;,
&quot;/inner_allocator&quot;,
&quot;/outer_allocator&quot;,
&quot;/allocate&quot;,
&quot;/deallocate&quot;,
&quot;/max_size&quot;,
&quot;/construct&quot;,
&quot;/destroy&quot;,
&quot;/select_on_container_copy_construction&quot;,
&quot;/operator_cmp&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/seed_seq&quot;,
&quot;name&quot;: &quot;std::seed_seq&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/seed_seq&quot;,
&quot;/generate&quot;,
&quot;/size&quot;,
&quot;/param&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/set&quot;,
&quot;name&quot;: &quot;std::set&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/set&quot;,
&quot;/~set&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/lower_bound&quot;,
&quot;/upper_bound&quot;,
&quot;/key_comp&quot;,
&quot;/value_comp&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/shared_future&quot;,
&quot;name&quot;: &quot;std::shared_future&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/shared_future&quot;,
&quot;/~shared_future&quot;,
&quot;/operator=&quot;,
&quot;/get&quot;,
&quot;/valid&quot;,
&quot;/wait&quot;,
&quot;/wait_for&quot;,
&quot;/wait_until&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/shared_lock&quot;,
&quot;name&quot;: &quot;std::shared_lock&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/shared_lock&quot;,
&quot;/~shared_lock&quot;,
&quot;/operator=&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/try_lock_for&quot;,
&quot;/try_lock_until&quot;,
&quot;/unlock&quot;,
&quot;/swap&quot;,
&quot;/release&quot;,
&quot;/mutex&quot;,
&quot;/owns_lock&quot;,
&quot;/operator_bool&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/shared_mutex&quot;,
&quot;name&quot;: &quot;std::shared_mutex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/shared_mutex&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/unlock&quot;,
&quot;/lock_shared&quot;,
&quot;/try_lock_shared&quot;,
&quot;/unlock_shared&quot;,
&quot;/native_handle&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/shared_ptr&quot;,
&quot;name&quot;: &quot;std::shared_ptr&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/shared_ptr&quot;,
&quot;/~shared_ptr&quot;,
&quot;/operator=&quot;,
&quot;/reset&quot;,
&quot;/swap&quot;,
&quot;/get&quot;,
&quot;/operator*&quot;,
&quot;/operator_at&quot;,
&quot;/unique&quot;,
&quot;/use_count&quot;,
&quot;/operator_bool&quot;,
&quot;/owner_before&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltlt&quot;,
&quot;/swap2&quot;,
&quot;/get_deleter&quot;,
&quot;/atomic&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/shared_timed_mutex&quot;,
&quot;name&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/shared_timed_mutex&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/try_lock_for&quot;,
&quot;/try_lock_until&quot;,
&quot;/unlock&quot;,
&quot;/lock_shared&quot;,
&quot;/try_lock_shared&quot;,
&quot;/try_lock_shared_for&quot;,
&quot;/try_lock_shared_until&quot;,
&quot;/unlock_shared&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/shuffle_order_engine&quot;,
&quot;name&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/shuffle_order_engine&quot;,
&quot;/seed&quot;,
&quot;/base&quot;,
&quot;/operator()&quot;,
&quot;/discard&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/valarray/slice&quot;,
&quot;name&quot;: &quot;std::slice&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/valarray/slice_array&quot;,
&quot;name&quot;: &quot;std::slice_array&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/stack&quot;,
&quot;name&quot;: &quot;std::stack&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/stack&quot;,
&quot;/~stack&quot;,
&quot;/operator=&quot;,
&quot;/top&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/push&quot;,
&quot;/emplace&quot;,
&quot;/pop&quot;,
&quot;/swap&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/strstream&quot;,
&quot;name&quot;: &quot;std::strstream&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/strstream&quot;,
&quot;/~strstream&quot;,
&quot;/rdbuf&quot;,
&quot;/str&quot;,
&quot;/freeze&quot;,
&quot;/pcount&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/Init&quot;,
&quot;name&quot;: &quot;std::strstream::Init&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/event&quot;,
&quot;name&quot;: &quot;std::strstream::event&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/failure&quot;,
&quot;name&quot;: &quot;std::strstream::failure&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/fmtflags&quot;,
&quot;name&quot;: &quot;std::strstream::fmtflags&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/iostate&quot;,
&quot;name&quot;: &quot;std::strstream::iostate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/openmode&quot;,
&quot;name&quot;: &quot;std::strstream::openmode&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/ios_base/seekdir&quot;,
&quot;name&quot;: &quot;std::strstream::seekdir&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/basic_ostream/sentry&quot;,
&quot;name&quot;: &quot;std::strstream::sentry&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/strstreambuf&quot;,
&quot;name&quot;: &quot;std::strstreambuf&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/strstreambuf&quot;,
&quot;/~strstreambuf&quot;,
&quot;/freeze&quot;,
&quot;/str&quot;,
&quot;/pcount&quot;,
&quot;/underflow&quot;,
&quot;/pbackfail&quot;,
&quot;/overflow&quot;,
&quot;/setbuf&quot;,
&quot;/seekoff&quot;,
&quot;/seekpos&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/student_t_distribution&quot;,
&quot;name&quot;: &quot;std::student_t_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/student_t_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/n&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/regex/sub_match&quot;,
&quot;name&quot;: &quot;std::sub_match&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/sub_match&quot;,
&quot;/length&quot;,
&quot;/str&quot;,
&quot;/compare&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine&quot;,
&quot;name&quot;: &quot;std::subtract_with_carry_engine&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/subtract_with_carry_engine&quot;,
&quot;/seed&quot;,
&quot;/operator()&quot;,
&quot;/discard&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/system_error&quot;,
&quot;name&quot;: &quot;std::system_error&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/system_error&quot;,
&quot;/code&quot;,
&quot;/what&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/thread&quot;,
&quot;name&quot;: &quot;std::thread&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/thread&quot;,
&quot;/~thread&quot;,
&quot;/operator=&quot;,
&quot;/joinable&quot;,
&quot;/get_id&quot;,
&quot;/native_handle&quot;,
&quot;/hardware_concurrency&quot;,
&quot;/join&quot;,
&quot;/detach&quot;,
&quot;/swap&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/thread/id&quot;,
&quot;name&quot;: &quot;std::thread::id&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/id&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltlt&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_base&quot;,
&quot;name&quot;: &quot;std::time_base&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_base&quot;,
&quot;name&quot;: &quot;std::time_base::dateorder&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_get&quot;,
&quot;name&quot;: &quot;std::time_get&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/time_get&quot;,
&quot;/~time_get&quot;,
&quot;/date_order&quot;,
&quot;/get_time&quot;,
&quot;/get_date&quot;,
&quot;/get_weekday&quot;,
&quot;/get_monthname&quot;,
&quot;/get_year&quot;,
&quot;/get&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_base&quot;,
&quot;name&quot;: &quot;std::time_get::dateorder&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_get_byname&quot;,
&quot;name&quot;: &quot;std::time_get_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_base&quot;,
&quot;name&quot;: &quot;std::time_get_byname::dateorder&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_put&quot;,
&quot;name&quot;: &quot;std::time_put&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/time_put&quot;,
&quot;/~time_put&quot;,
&quot;/put&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_base&quot;,
&quot;name&quot;: &quot;std::time_put::dateorder&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_put_byname&quot;,
&quot;name&quot;: &quot;std::time_put_byname&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/time_base&quot;,
&quot;name&quot;: &quot;std::time_put_byname::dateorder&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/timed_mutex&quot;,
&quot;name&quot;: &quot;std::timed_mutex&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/timed_mutex&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/try_lock_for&quot;,
&quot;/try_lock_until&quot;,
&quot;/unlock&quot;,
&quot;/native_handle&quot;]},
{&quot;base_url&quot;: &quot;cpp/chrono/c/tm&quot;,
&quot;name&quot;: &quot;std::tm&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/lock_tag_t&quot;,
&quot;name&quot;: &quot;std::try_to_lock_t&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/tuple&quot;,
&quot;name&quot;: &quot;std::tuple&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/tuple&quot;,
&quot;/operator=&quot;,
&quot;/swap&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/get&quot;,
&quot;/tuple_size&quot;,
&quot;/tuple_element&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/type_index&quot;,
&quot;name&quot;: &quot;std::type_index&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/type_index&quot;,
&quot;/operator_cmp&quot;,
&quot;/hash_code&quot;,
&quot;/name&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/type_info&quot;,
&quot;name&quot;: &quot;std::type_info&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/operator_cmp&quot;,
&quot;/before&quot;,
&quot;/hash_code&quot;,
&quot;/name&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/unary_function&quot;,
&quot;name&quot;: &quot;std::unary_function&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/functional/unary_negate&quot;,
&quot;name&quot;: &quot;std::unary_negate&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/error/underflow_error&quot;,
&quot;name&quot;: &quot;std::underflow_error&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/types/underlying_type&quot;,
&quot;name&quot;: &quot;std::underlying_type&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/uniform_int_distribution&quot;,
&quot;name&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/uniform_int_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/uniform_real_distribution&quot;,
&quot;name&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/uniform_real_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/thread/unique_lock&quot;,
&quot;name&quot;: &quot;std::unique_lock&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/unique_lock&quot;,
&quot;/~unique_lock&quot;,
&quot;/operator=&quot;,
&quot;/lock&quot;,
&quot;/try_lock&quot;,
&quot;/try_lock_for&quot;,
&quot;/try_lock_until&quot;,
&quot;/unlock&quot;,
&quot;/swap&quot;,
&quot;/release&quot;,
&quot;/mutex&quot;,
&quot;/owns_lock&quot;,
&quot;/operator_bool&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/unique_ptr&quot;,
&quot;name&quot;: &quot;std::unique_ptr&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/unique_ptr&quot;,
&quot;/~unique_ptr&quot;,
&quot;/operator=&quot;,
&quot;/release&quot;,
&quot;/reset&quot;,
&quot;/swap&quot;,
&quot;/get&quot;,
&quot;/get_deleter&quot;,
&quot;/operator*&quot;,
&quot;/operator_bool&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/hash&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/unordered_map&quot;,
&quot;name&quot;: &quot;std::unordered_map&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/unordered_map&quot;,
&quot;/~unordered_map&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/insert_or_assign&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/try_emplace&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/at&quot;,
&quot;/operator_at&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/begin2&quot;,
&quot;/end2&quot;,
&quot;/bucket_count&quot;,
&quot;/max_bucket_count&quot;,
&quot;/bucket_size&quot;,
&quot;/bucket&quot;,
&quot;/load_factor&quot;,
&quot;/max_load_factor&quot;,
&quot;/reserve&quot;,
&quot;/rehash&quot;,
&quot;/hash_function&quot;,
&quot;/key_eq&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/unordered_multimap&quot;,
&quot;name&quot;: &quot;std::unordered_multimap&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/unordered_multimap&quot;,
&quot;/~unordered_multimap&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/begin2&quot;,
&quot;/end2&quot;,
&quot;/bucket_count&quot;,
&quot;/max_bucket_count&quot;,
&quot;/bucket_size&quot;,
&quot;/bucket&quot;,
&quot;/load_factor&quot;,
&quot;/max_load_factor&quot;,
&quot;/reserve&quot;,
&quot;/rehash&quot;,
&quot;/hash_function&quot;,
&quot;/key_eq&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/unordered_multiset&quot;,
&quot;name&quot;: &quot;std::unordered_multiset&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/unordered_multiset&quot;,
&quot;/~unordered_multiset&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/begin2&quot;,
&quot;/end2&quot;,
&quot;/bucket_count&quot;,
&quot;/max_bucket_count&quot;,
&quot;/bucket_size&quot;,
&quot;/bucket&quot;,
&quot;/load_factor&quot;,
&quot;/max_load_factor&quot;,
&quot;/reserve&quot;,
&quot;/rehash&quot;,
&quot;/hash_function&quot;,
&quot;/key_eq&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/unordered_set&quot;,
&quot;name&quot;: &quot;std::unordered_set&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/unordered_set&quot;,
&quot;/~unordered_set&quot;,
&quot;/operator=&quot;,
&quot;/get_allocator&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/emplace_hint&quot;,
&quot;/erase&quot;,
&quot;/swap&quot;,
&quot;/extract&quot;,
&quot;/merge&quot;,
&quot;/count&quot;,
&quot;/find&quot;,
&quot;/equal_range&quot;,
&quot;/begin2&quot;,
&quot;/end2&quot;,
&quot;/bucket_count&quot;,
&quot;/max_bucket_count&quot;,
&quot;/bucket_size&quot;,
&quot;/bucket&quot;,
&quot;/load_factor&quot;,
&quot;/max_load_factor&quot;,
&quot;/reserve&quot;,
&quot;/rehash&quot;,
&quot;/hash_function&quot;,
&quot;/key_eq&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/uses_allocator&quot;,
&quot;name&quot;: &quot;std::uses_allocator&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/valarray&quot;,
&quot;name&quot;: &quot;std::valarray&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/variant&quot;,
&quot;name&quot;: &quot;std::variant&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/variant&quot;,
&quot;/~variant&quot;,
&quot;/operator=&quot;,
&quot;/index&quot;,
&quot;/valueless_by_exception&quot;,
&quot;/swap&quot;,
&quot;/emplace&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;,
&quot;/get&quot;,
&quot;/hash&quot;,
&quot;/uses_allocator&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/variant/variant_alternative&quot;,
&quot;name&quot;: &quot;std::variant_alternative&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/variant/variant_size&quot;,
&quot;name&quot;: &quot;std::variant_size&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/container/vector&quot;,
&quot;name&quot;: &quot;std::vector&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/vector&quot;,
&quot;/~vector&quot;,
&quot;/operator=&quot;,
&quot;/assign&quot;,
&quot;/get_allocator&quot;,
&quot;/at&quot;,
&quot;/operator_at&quot;,
&quot;/front&quot;,
&quot;/back&quot;,
&quot;/data&quot;,
&quot;/begin&quot;,
&quot;/end&quot;,
&quot;/rbegin&quot;,
&quot;/rend&quot;,
&quot;/empty&quot;,
&quot;/size&quot;,
&quot;/max_size&quot;,
&quot;/reserve&quot;,
&quot;/capacity&quot;,
&quot;/shrink_to_fit&quot;,
&quot;/clear&quot;,
&quot;/insert&quot;,
&quot;/emplace&quot;,
&quot;/erase&quot;,
&quot;/push_back&quot;,
&quot;/emplace_back&quot;,
&quot;/pop_back&quot;,
&quot;/resize&quot;,
&quot;/swap&quot;,
&quot;/operator_cmp&quot;,
&quot;/swap2&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/wbuffer_convert&quot;,
&quot;name&quot;: &quot;std::wbuffer_convert&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/wbuffer_convert&quot;,
&quot;/~wbuffer_convert&quot;,
&quot;/rdbuf&quot;,
&quot;/state&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/cerr&quot;,
&quot;name&quot;: &quot;std::wcerr&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/cin&quot;,
&quot;name&quot;: &quot;std::wcin&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/clog&quot;,
&quot;name&quot;: &quot;std::wclog&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/io/cout&quot;,
&quot;name&quot;: &quot;std::wcout&quot;,
&quot;urls&quot;: [&quot;&quot;]},
{&quot;base_url&quot;: &quot;cpp/memory/weak_ptr&quot;,
&quot;name&quot;: &quot;std::weak_ptr&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/weak_ptr&quot;,
&quot;/~weak_ptr&quot;,
&quot;/operator=&quot;,
&quot;/reset&quot;,
&quot;/swap&quot;,
&quot;/use_count&quot;,
&quot;/expired&quot;,
&quot;/lock&quot;,
&quot;/owner_before&quot;]},
{&quot;base_url&quot;: &quot;cpp/numeric/random/weibull_distribution&quot;,
&quot;name&quot;: &quot;std::weibull_distribution&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/weibull_distribution&quot;,
&quot;/reset&quot;,
&quot;/operator()&quot;,
&quot;/params&quot;,
&quot;/param&quot;,
&quot;/min&quot;,
&quot;/max&quot;,
&quot;/operator_cmp&quot;,
&quot;/operator_ltltgtgt&quot;]},
{&quot;base_url&quot;: &quot;cpp/locale/wstring_convert&quot;,
&quot;name&quot;: &quot;std::wstring_convert&quot;,
&quot;urls&quot;: [&quot;&quot;,
&quot;/wstring_convert&quot;,
&quot;/~wstring_convert&quot;,
&quot;/from_bytes&quot;,
&quot;/to_bytes&quot;,
&quot;/converted&quot;,
&quot;/state&quot;]},
{&quot;base_url&quot;: &quot;cpp/utility/variadic/va_list&quot;,
&quot;name&quot;: &quot;va_list&quot;,
&quot;urls&quot;: [&quot;&quot;]}],
&quot;links&quot;: [{&quot;string&quot;: &quot;std::accumulate&quot;,
&quot;target&quot;: &quot;cpp/algorithm/accumulate&quot;},
{&quot;string&quot;: &quot;std::adjacent_difference&quot;,
&quot;target&quot;: &quot;cpp/algorithm/adjacent_difference&quot;},
{&quot;string&quot;: &quot;std::adjacent_find&quot;,
&quot;target&quot;: &quot;cpp/algorithm/adjacent_find&quot;},
{&quot;string&quot;: &quot;std::all_of&quot;,
&quot;target&quot;: &quot;cpp/algorithm/all_any_none_of&quot;},
{&quot;string&quot;: &quot;std::any_of&quot;,
&quot;target&quot;: &quot;cpp/algorithm/all_any_none_of&quot;},
{&quot;string&quot;: &quot;std::none_of&quot;,
&quot;target&quot;: &quot;cpp/algorithm/all_any_none_of&quot;},
{&quot;string&quot;: &quot;std::binary_search&quot;,
&quot;target&quot;: &quot;cpp/algorithm/binary_search&quot;},
{&quot;string&quot;: &quot;std::bsearch&quot;,
&quot;target&quot;: &quot;cpp/algorithm/bsearch&quot;},
{&quot;string&quot;: &quot;std::clamp&quot;,
&quot;target&quot;: &quot;cpp/algorithm/clamp&quot;},
{&quot;string&quot;: &quot;std::copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/copy&quot;},
{&quot;string&quot;: &quot;std::copy_if&quot;,
&quot;target&quot;: &quot;cpp/algorithm/copy&quot;},
{&quot;string&quot;: &quot;std::copy_backward&quot;,
&quot;target&quot;: &quot;cpp/algorithm/copy_backward&quot;},
{&quot;string&quot;: &quot;std::copy_n&quot;,
&quot;target&quot;: &quot;cpp/algorithm/copy_n&quot;},
{&quot;string&quot;: &quot;std::count&quot;,
&quot;target&quot;: &quot;cpp/algorithm/count&quot;},
{&quot;string&quot;: &quot;std::count_if&quot;,
&quot;target&quot;: &quot;cpp/algorithm/count&quot;},
{&quot;string&quot;: &quot;std::equal&quot;,
&quot;target&quot;: &quot;cpp/algorithm/equal&quot;},
{&quot;string&quot;: &quot;std::equal_range&quot;,
&quot;target&quot;: &quot;cpp/algorithm/equal_range&quot;},
{&quot;string&quot;: &quot;std::exclusive_scan&quot;,
&quot;target&quot;: &quot;cpp/algorithm/exclusive_scan&quot;},
{&quot;string&quot;: &quot;std::execution::seq&quot;,
&quot;target&quot;: &quot;cpp/algorithm/execution_policy_tag&quot;},
{&quot;string&quot;: &quot;std::execution::par&quot;,
&quot;target&quot;: &quot;cpp/algorithm/execution_policy_tag&quot;},
{&quot;string&quot;: &quot;std::execution::par_unseq&quot;,
&quot;target&quot;: &quot;cpp/algorithm/execution_policy_tag&quot;},
{&quot;string&quot;: &quot;std::execution::sequenced_policy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/execution_policy_tag_t&quot;},
{&quot;string&quot;: &quot;std::execution::parallel_policy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/execution_policy_tag_t&quot;},
{&quot;string&quot;: &quot;std::execution::parallel_unsequenced_policy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/execution_policy_tag_t&quot;},
{&quot;string&quot;: &quot;std::fill&quot;,
&quot;target&quot;: &quot;cpp/algorithm/fill&quot;},
{&quot;string&quot;: &quot;std::fill_n&quot;,
&quot;target&quot;: &quot;cpp/algorithm/fill_n&quot;},
{&quot;string&quot;: &quot;std::find&quot;,
&quot;target&quot;: &quot;cpp/algorithm/find&quot;},
{&quot;string&quot;: &quot;std::find_if&quot;,
&quot;target&quot;: &quot;cpp/algorithm/find&quot;},
{&quot;string&quot;: &quot;std::find_if_not&quot;,
&quot;target&quot;: &quot;cpp/algorithm/find&quot;},
{&quot;string&quot;: &quot;std::find_end&quot;,
&quot;target&quot;: &quot;cpp/algorithm/find_end&quot;},
{&quot;string&quot;: &quot;std::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/algorithm/find_first_of&quot;},
{&quot;string&quot;: &quot;std::for_each&quot;,
&quot;target&quot;: &quot;cpp/algorithm/for_each&quot;},
{&quot;string&quot;: &quot;std::for_each_n&quot;,
&quot;target&quot;: &quot;cpp/algorithm/for_each_n&quot;},
{&quot;string&quot;: &quot;std::generate&quot;,
&quot;target&quot;: &quot;cpp/algorithm/generate&quot;},
{&quot;string&quot;: &quot;std::generate_n&quot;,
&quot;target&quot;: &quot;cpp/algorithm/generate_n&quot;},
{&quot;string&quot;: &quot;std::includes&quot;,
&quot;target&quot;: &quot;cpp/algorithm/includes&quot;},
{&quot;string&quot;: &quot;std::inclusive_scan&quot;,
&quot;target&quot;: &quot;cpp/algorithm/inclusive_scan&quot;},
{&quot;string&quot;: &quot;std::inner_product&quot;,
&quot;target&quot;: &quot;cpp/algorithm/inner_product&quot;},
{&quot;string&quot;: &quot;std::inplace_merge&quot;,
&quot;target&quot;: &quot;cpp/algorithm/inplace_merge&quot;},
{&quot;string&quot;: &quot;std::iota&quot;,
&quot;target&quot;: &quot;cpp/algorithm/iota&quot;},
{&quot;string&quot;: &quot;std::is_execution_policy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_execution_policy&quot;},
{&quot;string&quot;: &quot;std::is_execution_policy_v&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_execution_policy&quot;},
{&quot;string&quot;: &quot;std::is_heap&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_heap&quot;},
{&quot;string&quot;: &quot;std::is_heap_until&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_heap_until&quot;},
{&quot;string&quot;: &quot;std::is_partitioned&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_partitioned&quot;},
{&quot;string&quot;: &quot;std::is_permutation&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_permutation&quot;},
{&quot;string&quot;: &quot;std::is_sorted&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_sorted&quot;},
{&quot;string&quot;: &quot;std::is_sorted_until&quot;,
&quot;target&quot;: &quot;cpp/algorithm/is_sorted_until&quot;},
{&quot;string&quot;: &quot;std::iter_swap&quot;,
&quot;target&quot;: &quot;cpp/algorithm/iter_swap&quot;},
{&quot;string&quot;: &quot;std::lexicographical_compare&quot;,
&quot;target&quot;: &quot;cpp/algorithm/lexicographical_compare&quot;},
{&quot;string&quot;: &quot;std::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/algorithm/lower_bound&quot;},
{&quot;string&quot;: &quot;std::make_heap&quot;,
&quot;target&quot;: &quot;cpp/algorithm/make_heap&quot;},
{&quot;string&quot;: &quot;std::max&quot;,
&quot;target&quot;: &quot;cpp/algorithm/max&quot;},
{&quot;string&quot;: &quot;std::max_element&quot;,
&quot;target&quot;: &quot;cpp/algorithm/max_element&quot;},
{&quot;string&quot;: &quot;std::merge&quot;,
&quot;target&quot;: &quot;cpp/algorithm/merge&quot;},
{&quot;string&quot;: &quot;std::min&quot;,
&quot;target&quot;: &quot;cpp/algorithm/min&quot;},
{&quot;string&quot;: &quot;std::min_element&quot;,
&quot;target&quot;: &quot;cpp/algorithm/min_element&quot;},
{&quot;string&quot;: &quot;std::minmax&quot;,
&quot;target&quot;: &quot;cpp/algorithm/minmax&quot;},
{&quot;string&quot;: &quot;std::minmax_element&quot;,
&quot;target&quot;: &quot;cpp/algorithm/minmax_element&quot;},
{&quot;string&quot;: &quot;std::mismatch&quot;,
&quot;target&quot;: &quot;cpp/algorithm/mismatch&quot;},
{&quot;string&quot;: &quot;std::move (algorithm)&quot;,
&quot;target&quot;: &quot;cpp/algorithm/move&quot;},
{&quot;string&quot;: &quot;std::move_backward&quot;,
&quot;target&quot;: &quot;cpp/algorithm/move_backward&quot;},
{&quot;string&quot;: &quot;std::next_permutation&quot;,
&quot;target&quot;: &quot;cpp/algorithm/next_permutation&quot;},
{&quot;string&quot;: &quot;std::nth_element&quot;,
&quot;target&quot;: &quot;cpp/algorithm/nth_element&quot;},
{&quot;string&quot;: &quot;std::partial_sort&quot;,
&quot;target&quot;: &quot;cpp/algorithm/partial_sort&quot;},
{&quot;string&quot;: &quot;std::partial_sort_copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/partial_sort_copy&quot;},
{&quot;string&quot;: &quot;std::partial_sum&quot;,
&quot;target&quot;: &quot;cpp/algorithm/partial_sum&quot;},
{&quot;string&quot;: &quot;std::partition&quot;,
&quot;target&quot;: &quot;cpp/algorithm/partition&quot;},
{&quot;string&quot;: &quot;std::partition_copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/partition_copy&quot;},
{&quot;string&quot;: &quot;std::partition_point&quot;,
&quot;target&quot;: &quot;cpp/algorithm/partition_point&quot;},
{&quot;string&quot;: &quot;std::pop_heap&quot;,
&quot;target&quot;: &quot;cpp/algorithm/pop_heap&quot;},
{&quot;string&quot;: &quot;std::prev_permutation&quot;,
&quot;target&quot;: &quot;cpp/algorithm/prev_permutation&quot;},
{&quot;string&quot;: &quot;std::push_heap&quot;,
&quot;target&quot;: &quot;cpp/algorithm/push_heap&quot;},
{&quot;string&quot;: &quot;std::qsort&quot;,
&quot;target&quot;: &quot;cpp/algorithm/qsort&quot;},
{&quot;string&quot;: &quot;std::random_shuffle&quot;,
&quot;target&quot;: &quot;cpp/algorithm/random_shuffle&quot;},
{&quot;string&quot;: &quot;std::shuffle&quot;,
&quot;target&quot;: &quot;cpp/algorithm/random_shuffle&quot;},
{&quot;string&quot;: &quot;std::reduce&quot;,
&quot;target&quot;: &quot;cpp/algorithm/reduce&quot;},
{&quot;string&quot;: &quot;std::remove (&lt;algorithm&gt;)&quot;,
&quot;target&quot;: &quot;cpp/algorithm/remove&quot;},
{&quot;string&quot;: &quot;std::remove_if&quot;,
&quot;target&quot;: &quot;cpp/algorithm/remove&quot;},
{&quot;string&quot;: &quot;std::remove_copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/remove_copy&quot;},
{&quot;string&quot;: &quot;std::remove_copy_if&quot;,
&quot;target&quot;: &quot;cpp/algorithm/remove_copy&quot;},
{&quot;string&quot;: &quot;std::replace&quot;,
&quot;target&quot;: &quot;cpp/algorithm/replace&quot;},
{&quot;string&quot;: &quot;std::replace_if&quot;,
&quot;target&quot;: &quot;cpp/algorithm/replace&quot;},
{&quot;string&quot;: &quot;std::replace_copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/replace_copy&quot;},
{&quot;string&quot;: &quot;std::replace_copy_if&quot;,
&quot;target&quot;: &quot;cpp/algorithm/replace_copy&quot;},
{&quot;string&quot;: &quot;std::reverse&quot;,
&quot;target&quot;: &quot;cpp/algorithm/reverse&quot;},
{&quot;string&quot;: &quot;std::reverse_copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/reverse_copy&quot;},
{&quot;string&quot;: &quot;std::rotate&quot;,
&quot;target&quot;: &quot;cpp/algorithm/rotate&quot;},
{&quot;string&quot;: &quot;std::rotate_copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/rotate_copy&quot;},
{&quot;string&quot;: &quot;std::sample&quot;,
&quot;target&quot;: &quot;cpp/algorithm/sample&quot;},
{&quot;string&quot;: &quot;std::search&quot;,
&quot;target&quot;: &quot;cpp/algorithm/search&quot;},
{&quot;string&quot;: &quot;std::search_n&quot;,
&quot;target&quot;: &quot;cpp/algorithm/search_n&quot;},
{&quot;string&quot;: &quot;std::set_difference&quot;,
&quot;target&quot;: &quot;cpp/algorithm/set_difference&quot;},
{&quot;string&quot;: &quot;std::set_intersection&quot;,
&quot;target&quot;: &quot;cpp/algorithm/set_intersection&quot;},
{&quot;string&quot;: &quot;std::set_symmetric_difference&quot;,
&quot;target&quot;: &quot;cpp/algorithm/set_symmetric_difference&quot;},
{&quot;string&quot;: &quot;std::set_union&quot;,
&quot;target&quot;: &quot;cpp/algorithm/set_union&quot;},
{&quot;string&quot;: &quot;std::sort&quot;,
&quot;target&quot;: &quot;cpp/algorithm/sort&quot;},
{&quot;string&quot;: &quot;std::sort_heap&quot;,
&quot;target&quot;: &quot;cpp/algorithm/sort_heap&quot;},
{&quot;string&quot;: &quot;std::stable_partition&quot;,
&quot;target&quot;: &quot;cpp/algorithm/stable_partition&quot;},
{&quot;string&quot;: &quot;std::stable_sort&quot;,
&quot;target&quot;: &quot;cpp/algorithm/stable_sort&quot;},
{&quot;string&quot;: &quot;std::swap&quot;,
&quot;target&quot;: &quot;cpp/algorithm/swap&quot;},
{&quot;string&quot;: &quot;std::swap_ranges&quot;,
&quot;target&quot;: &quot;cpp/algorithm/swap_ranges&quot;},
{&quot;string&quot;: &quot;std::transform&quot;,
&quot;target&quot;: &quot;cpp/algorithm/transform&quot;},
{&quot;string&quot;: &quot;std::transform_exclusive_scan&quot;,
&quot;target&quot;: &quot;cpp/algorithm/transform_exclusive_scan&quot;},
{&quot;string&quot;: &quot;std::transform_inclusive_scan&quot;,
&quot;target&quot;: &quot;cpp/algorithm/transform_inclusive_scan&quot;},
{&quot;string&quot;: &quot;std::transform_reduce&quot;,
&quot;target&quot;: &quot;cpp/algorithm/transform_reduce&quot;},
{&quot;string&quot;: &quot;std::unique&quot;,
&quot;target&quot;: &quot;cpp/algorithm/unique&quot;},
{&quot;string&quot;: &quot;std::unique_copy&quot;,
&quot;target&quot;: &quot;cpp/algorithm/unique_copy&quot;},
{&quot;string&quot;: &quot;std::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/algorithm/upper_bound&quot;},
{&quot;string&quot;: &quot;ATOMIC_FLAG_INIT&quot;,
&quot;target&quot;: &quot;cpp/atomic/ATOMIC_FLAG_INIT&quot;},
{&quot;string&quot;: &quot;ATOMIC_VAR_INIT&quot;,
&quot;target&quot;: &quot;cpp/atomic/ATOMIC_VAR_INIT&quot;},
{&quot;string&quot;: &quot;std::atomic&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_bool&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_schar&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_short&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_long&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_llong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic::atomic&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::atomic_bool&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::atomic_schar&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::atomic_uchar&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_short::atomic_short&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::atomic_ushort&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int::atomic_int&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::atomic_uint&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_long::atomic_long&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::atomic_ulong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::atomic_llong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::atomic_ullong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::atomic_char16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::atomic_char32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::atomic_wchar_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::atomic_int8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::atomic_uint8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::atomic_int16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::atomic_uint16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::atomic_int32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::atomic_uint32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::atomic_int64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::atomic_uint64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::atomic_int_least8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::atomic_uint_least8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::atomic_int_least16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::atomic_uint_least16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::atomic_int_least32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::atomic_uint_least32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::atomic_int_least64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::atomic_uint_least64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::atomic_int_fast8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::atomic_uint_fast8_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::atomic_int_fast16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::atomic_uint_fast16_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::atomic_int_fast32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::atomic_uint_fast32_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::atomic_int_fast64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::atomic_uint_fast64_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::atomic_intptr_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::atomic_uintptr_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::atomic_size_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::atomic_ptrdiff_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::atomic_intmax_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::atomic_uintmax_t&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_short::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_short::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_long::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_long::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_short::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_long::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/exchange&quot;},
{&quot;string&quot;: &quot;std::atomic::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_short::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_long::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_short::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_long::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_and&quot;},
{&quot;string&quot;: &quot;std::atomic::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_short::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_long::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_short::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_long::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_short::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_long::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_short::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_long::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_short::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_long::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/load&quot;},
{&quot;string&quot;: &quot;std::atomic::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator T&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_T&quot;},
{&quot;string&quot;: &quot;std::atomic::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator++&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator--&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith&quot;},
{&quot;string&quot;: &quot;std::atomic::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_short::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_long::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator+=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator-=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator|=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::operator^=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::atomic::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;on_group&quot;: &quot;std::atomic&quot;,
&quot;string&quot;: &quot;store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_bool::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_schar::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uchar::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_short::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_ushort::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_long::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_ulong::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_llong::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_ullong::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_char16_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_char32_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_wchar_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int8_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint8_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int16_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint16_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int32_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint32_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int64_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint64_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least8_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least8_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least16_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least16_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least32_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least32_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_least64_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_least64_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast8_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast8_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast16_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast16_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast32_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast32_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_int_fast64_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uint_fast64_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_intptr_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uintptr_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_size_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_ptrdiff_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_intmax_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_uintmax_t::store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic/store&quot;},
{&quot;string&quot;: &quot;std::atomic_compare_exchange_weak&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_compare_exchange_weak_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_compare_exchange_strong&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_compare_exchange_strong_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_compare_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_exchange&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_exchange_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_exchange&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_add&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_add_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_add&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_or&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_or_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_or&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_sub&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_sub_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_and&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_and_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_sub&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_xor&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_fetch_xor_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_fetch_xor&quot;},
{&quot;string&quot;: &quot;std::atomic_flag&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag&quot;},
{&quot;string&quot;: &quot;std::atomic_flag::atomic_flag&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag/atomic_flag&quot;},
{&quot;string&quot;: &quot;std::atomic_flag::clear&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag/clear&quot;},
{&quot;on_group&quot;: &quot;std::atomic_flag&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag/clear&quot;},
{&quot;string&quot;: &quot;std::atomic_flag::operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag/operator=&quot;},
{&quot;on_group&quot;: &quot;std::atomic_flag&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag/operator=&quot;},
{&quot;string&quot;: &quot;std::atomic_flag::test_and_set&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag/test_and_set&quot;},
{&quot;on_group&quot;: &quot;std::atomic_flag&quot;,
&quot;string&quot;: &quot;test_and_set&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_flag/test_and_set&quot;},
{&quot;string&quot;: &quot;std::atomic_init&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_init&quot;},
{&quot;string&quot;: &quot;std::atomic_is_lock_free&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_is_lock_free&quot;},
{&quot;string&quot;: &quot;std::atomic_load&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_load&quot;},
{&quot;string&quot;: &quot;std::atomic_load_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_load&quot;},
{&quot;string&quot;: &quot;std::atomic_signal_fence&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_signal_fence&quot;},
{&quot;string&quot;: &quot;std::atomic_store&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_store&quot;},
{&quot;string&quot;: &quot;std::atomic_store_explicit&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_store&quot;},
{&quot;string&quot;: &quot;std::atomic_thread_fence&quot;,
&quot;target&quot;: &quot;cpp/atomic/atomic_thread_fence&quot;},
{&quot;string&quot;: &quot;std::kill_dependency&quot;,
&quot;target&quot;: &quot;cpp/atomic/kill_dependency&quot;},
{&quot;string&quot;: &quot;std::memory_order&quot;,
&quot;target&quot;: &quot;cpp/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;std::memory_order_relaxed&quot;,
&quot;target&quot;: &quot;cpp/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;std::memory_order_consume&quot;,
&quot;target&quot;: &quot;cpp/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;std::memory_order_acquire&quot;,
&quot;target&quot;: &quot;cpp/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;std::memory_order_release&quot;,
&quot;target&quot;: &quot;cpp/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;std::memory_order_acq_rel&quot;,
&quot;target&quot;: &quot;cpp/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;std::memory_order_seq_cst&quot;,
&quot;target&quot;: &quot;cpp/atomic/memory_order&quot;},
{&quot;string&quot;: &quot;CLOCKS_PER_SEC&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/CLOCKS_PER_SEC&quot;},
{&quot;string&quot;: &quot;std::asctime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/asctime&quot;},
{&quot;string&quot;: &quot;std::clock&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/clock&quot;},
{&quot;string&quot;: &quot;std::clock_t&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/clock_t&quot;},
{&quot;string&quot;: &quot;std::ctime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/ctime&quot;},
{&quot;string&quot;: &quot;std::difftime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/difftime&quot;},
{&quot;string&quot;: &quot;std::gmtime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/gmtime&quot;},
{&quot;string&quot;: &quot;std::localtime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/localtime&quot;},
{&quot;string&quot;: &quot;std::mktime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/mktime&quot;},
{&quot;string&quot;: &quot;std::strftime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/strftime&quot;},
{&quot;string&quot;: &quot;std::time&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/time&quot;},
{&quot;string&quot;: &quot;std::time_t&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/time_t&quot;},
{&quot;string&quot;: &quot;std::timespec&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/timespec&quot;},
{&quot;string&quot;: &quot;std::timespec_get&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/timespec_get&quot;},
{&quot;string&quot;: &quot;TIME_UTC&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/timespec_get&quot;},
{&quot;string&quot;: &quot;std::tm&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/tm&quot;},
{&quot;string&quot;: &quot;std::wcsftime&quot;,
&quot;target&quot;: &quot;cpp/chrono/c/wcsftime&quot;},
{&quot;string&quot;: &quot;std::chrono::duration&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::hours&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::abs(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/abs&quot;},
{&quot;string&quot;: &quot;std::chrono::abs(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/abs&quot;},
{&quot;string&quot;: &quot;std::chrono::abs(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/abs&quot;},
{&quot;string&quot;: &quot;std::chrono::abs(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/abs&quot;},
{&quot;string&quot;: &quot;std::chrono::abs(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/abs&quot;},
{&quot;string&quot;: &quot;std::chrono::abs(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/abs&quot;},
{&quot;string&quot;: &quot;std::chrono::abs(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/abs&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/ceil&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/ceil&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/ceil&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/ceil&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/ceil&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/ceil&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/ceil&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::duration&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/common_type&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::nanoseconds&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/common_type&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::microseconds&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/common_type&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::milliseconds&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/common_type&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::seconds&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/common_type&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::minutes&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/common_type&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::hours&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/common_type&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::count&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/count&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::duration&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::nanoseconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::microseconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::milliseconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::seconds&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::minutes&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::hours&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration&quot;},
{&quot;string&quot;: &quot;std::chrono::duration_cast&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/duration_cast&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/max&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/min&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator=&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator++&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator--&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator--(int)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith2&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator+=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator-=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator*=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator/=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::operator%=&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith3&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator*(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator/(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator%(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator*(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator/(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator%(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator*(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator/(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator%(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator*(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator/(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator%(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator*(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator/(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator%(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator*(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator/(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator%(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator*(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator/(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator%(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_arith4&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::duration)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/round&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::nanoseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/round&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::microseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/round&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::milliseconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/round&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::seconds)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/round&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::minutes)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/round&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::hours)&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/round&quot;},
{&quot;string&quot;: &quot;std::chrono::duration::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration&quot;,
&quot;string&quot;: &quot;zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::nanoseconds::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::microseconds::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::milliseconds::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::seconds::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::minutes::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::hours::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::duration_values&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration_values&quot;},
{&quot;string&quot;: &quot;std::chrono::duration_values::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration_values/max&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration_values&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration_values/max&quot;},
{&quot;string&quot;: &quot;std::chrono::duration_values::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration_values/min&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration_values&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration_values/min&quot;},
{&quot;string&quot;: &quot;std::chrono::duration_values::zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration_values/zero&quot;},
{&quot;on_group&quot;: &quot;std::chrono::duration_values&quot;,
&quot;string&quot;: &quot;zero&quot;,
&quot;target&quot;: &quot;cpp/chrono/duration_values/zero&quot;},
{&quot;string&quot;: &quot;std::chrono::high_resolution_clock&quot;,
&quot;target&quot;: &quot;cpp/chrono/high_resolution_clock&quot;},
{&quot;string&quot;: &quot;std::chrono::high_resolution_clock::is_steady&quot;,
&quot;target&quot;: &quot;cpp/chrono/high_resolution_clock&quot;},
{&quot;on_group&quot;: &quot;std::chrono::high_resolution_clock&quot;,
&quot;string&quot;: &quot;is_steady&quot;,
&quot;target&quot;: &quot;cpp/chrono/high_resolution_clock&quot;},
{&quot;string&quot;: &quot;std::chrono::high_resolution_clock::now&quot;,
&quot;target&quot;: &quot;cpp/chrono/high_resolution_clock/now&quot;},
{&quot;on_group&quot;: &quot;std::chrono::high_resolution_clock&quot;,
&quot;string&quot;: &quot;now&quot;,
&quot;target&quot;: &quot;cpp/chrono/high_resolution_clock/now&quot;},
{&quot;string&quot;: &quot;std::chrono::steady_clock&quot;,
&quot;target&quot;: &quot;cpp/chrono/steady_clock&quot;},
{&quot;string&quot;: &quot;std::chrono::steady_clock::is_steady&quot;,
&quot;target&quot;: &quot;cpp/chrono/steady_clock&quot;},
{&quot;on_group&quot;: &quot;std::chrono::steady_clock&quot;,
&quot;string&quot;: &quot;is_steady&quot;,
&quot;target&quot;: &quot;cpp/chrono/steady_clock&quot;},
{&quot;string&quot;: &quot;std::chrono::steady_clock::now&quot;,
&quot;target&quot;: &quot;cpp/chrono/steady_clock/now&quot;},
{&quot;on_group&quot;: &quot;std::chrono::steady_clock&quot;,
&quot;string&quot;: &quot;now&quot;,
&quot;target&quot;: &quot;cpp/chrono/steady_clock/now&quot;},
{&quot;string&quot;: &quot;std::chrono::system_clock&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock&quot;},
{&quot;string&quot;: &quot;std::chrono::system_clock::is_steady&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock&quot;},
{&quot;on_group&quot;: &quot;std::chrono::system_clock&quot;,
&quot;string&quot;: &quot;is_steady&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock&quot;},
{&quot;string&quot;: &quot;std::chrono::system_clock::from_time_t&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock/from_time_t&quot;},
{&quot;on_group&quot;: &quot;std::chrono::system_clock&quot;,
&quot;string&quot;: &quot;from_time_t&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock/from_time_t&quot;},
{&quot;string&quot;: &quot;std::chrono::system_clock::now&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock/now&quot;},
{&quot;on_group&quot;: &quot;std::chrono::system_clock&quot;,
&quot;string&quot;: &quot;now&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock/now&quot;},
{&quot;string&quot;: &quot;std::chrono::system_clock::to_time_t&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock/to_time_t&quot;},
{&quot;on_group&quot;: &quot;std::chrono::system_clock&quot;,
&quot;string&quot;: &quot;to_time_t&quot;,
&quot;target&quot;: &quot;cpp/chrono/system_clock/to_time_t&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point&quot;},
{&quot;string&quot;: &quot;std::chrono::ceil(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/ceil&quot;},
{&quot;string&quot;: &quot;std::common_type&lt;std::chrono::time_point&gt;&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/common_type&quot;},
{&quot;string&quot;: &quot;std::chrono::floor(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/floor&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point::max&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/max&quot;},
{&quot;on_group&quot;: &quot;std::chrono::time_point&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/max&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point::min&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/min&quot;},
{&quot;on_group&quot;: &quot;std::chrono::time_point&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/min&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point::operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::chrono::time_point&quot;,
&quot;string&quot;: &quot;operator+&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_arith&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point::operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::chrono::time_point&quot;,
&quot;string&quot;: &quot;operator-&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_arith&quot;},
{&quot;string&quot;: &quot;operator+(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_arith2&quot;},
{&quot;string&quot;: &quot;operator-(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_arith2&quot;},
{&quot;string&quot;: &quot;operator==(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::chrono::round(std::chrono::time_point)&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/round&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point::time_point&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/time_point&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point_cast&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/time_point_cast&quot;},
{&quot;string&quot;: &quot;std::chrono::time_point::time_since_epoch&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/time_since_epoch&quot;},
{&quot;on_group&quot;: &quot;std::chrono::time_point&quot;,
&quot;string&quot;: &quot;time_since_epoch&quot;,
&quot;target&quot;: &quot;cpp/chrono/time_point/time_since_epoch&quot;},
{&quot;string&quot;: &quot;std::chrono::treat_as_floating_point&quot;,
&quot;target&quot;: &quot;cpp/chrono/treat_as_floating_point&quot;},
{&quot;string&quot;: &quot;std::chrono::treat_as_floating_point&quot;,
&quot;target&quot;: &quot;cpp/chrono/treat_as_floating_point&quot;},
{&quot;string&quot;: &quot;std::array&quot;,
&quot;target&quot;: &quot;cpp/container/array&quot;},
{&quot;string&quot;: &quot;std::array::at&quot;,
&quot;target&quot;: &quot;cpp/container/array/at&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/container/array/at&quot;},
{&quot;string&quot;: &quot;std::array::back&quot;,
&quot;target&quot;: &quot;cpp/container/array/back&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/container/array/back&quot;},
{&quot;string&quot;: &quot;std::array::begin&quot;,
&quot;target&quot;: &quot;cpp/container/array/begin&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/array/begin&quot;},
{&quot;string&quot;: &quot;std::array::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/array/begin&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/array/begin&quot;},
{&quot;string&quot;: &quot;std::array::data&quot;,
&quot;target&quot;: &quot;cpp/container/array/data&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;data&quot;,
&quot;target&quot;: &quot;cpp/container/array/data&quot;},
{&quot;string&quot;: &quot;std::array::empty&quot;,
&quot;target&quot;: &quot;cpp/container/array/empty&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/array/empty&quot;},
{&quot;string&quot;: &quot;std::array::end&quot;,
&quot;target&quot;: &quot;cpp/container/array/end&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/array/end&quot;},
{&quot;string&quot;: &quot;std::array::cend&quot;,
&quot;target&quot;: &quot;cpp/container/array/end&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/array/end&quot;},
{&quot;string&quot;: &quot;std::array::fill&quot;,
&quot;target&quot;: &quot;cpp/container/array/fill&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/container/array/fill&quot;},
{&quot;string&quot;: &quot;std::array::front&quot;,
&quot;target&quot;: &quot;cpp/container/array/front&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/container/array/front&quot;},
{&quot;string&quot;: &quot;std::get(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/get&quot;},
{&quot;string&quot;: &quot;std::array::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/array/max_size&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/array/max_size&quot;},
{&quot;string&quot;: &quot;std::array::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::array::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/array/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/array/rbegin&quot;},
{&quot;string&quot;: &quot;std::array::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/array/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/array/rbegin&quot;},
{&quot;string&quot;: &quot;std::array::rend&quot;,
&quot;target&quot;: &quot;cpp/container/array/rend&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/array/rend&quot;},
{&quot;string&quot;: &quot;std::array::crend&quot;,
&quot;target&quot;: &quot;cpp/container/array/rend&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/array/rend&quot;},
{&quot;string&quot;: &quot;std::array::size&quot;,
&quot;target&quot;: &quot;cpp/container/array/size&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/array/size&quot;},
{&quot;string&quot;: &quot;std::array::swap&quot;,
&quot;target&quot;: &quot;cpp/container/array/swap&quot;},
{&quot;on_group&quot;: &quot;std::array&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/array/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::array)&quot;,
&quot;target&quot;: &quot;cpp/container/array/swap2&quot;},
{&quot;string&quot;: &quot;std::tuple_element&lt;std::array&gt;&quot;,
&quot;target&quot;: &quot;cpp/container/array/tuple_element&quot;},
{&quot;string&quot;: &quot;std::tuple_size&lt;std::array&gt;&quot;,
&quot;target&quot;: &quot;cpp/container/array/tuple_size&quot;},
{&quot;string&quot;: &quot;std::deque&quot;,
&quot;target&quot;: &quot;cpp/container/deque&quot;},
{&quot;string&quot;: &quot;std::pmr::deque&quot;,
&quot;target&quot;: &quot;cpp/container/deque&quot;},
{&quot;string&quot;: &quot;std::deque::assign&quot;,
&quot;target&quot;: &quot;cpp/container/deque/assign&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/container/deque/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::assign&quot;,
&quot;target&quot;: &quot;cpp/container/deque/assign&quot;},
{&quot;string&quot;: &quot;std::deque::at&quot;,
&quot;target&quot;: &quot;cpp/container/deque/at&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/container/deque/at&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::at&quot;,
&quot;target&quot;: &quot;cpp/container/deque/at&quot;},
{&quot;string&quot;: &quot;std::deque::back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/back&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/back&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/back&quot;},
{&quot;string&quot;: &quot;std::deque::begin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/begin&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/begin&quot;},
{&quot;string&quot;: &quot;std::deque::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/begin&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::begin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/begin&quot;},
{&quot;string&quot;: &quot;std::deque::clear&quot;,
&quot;target&quot;: &quot;cpp/container/deque/clear&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/deque/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::clear&quot;,
&quot;target&quot;: &quot;cpp/container/deque/clear&quot;},
{&quot;string&quot;: &quot;std::deque::deque&quot;,
&quot;target&quot;: &quot;cpp/container/deque/deque&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::deque&quot;,
&quot;target&quot;: &quot;cpp/container/deque/deque&quot;},
{&quot;string&quot;: &quot;std::deque::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace&quot;},
{&quot;string&quot;: &quot;std::deque::emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace_back&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace_back&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace_back&quot;},
{&quot;string&quot;: &quot;std::deque::emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace_front&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace_front&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/emplace_front&quot;},
{&quot;string&quot;: &quot;std::deque::empty&quot;,
&quot;target&quot;: &quot;cpp/container/deque/empty&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/deque/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::empty&quot;,
&quot;target&quot;: &quot;cpp/container/deque/empty&quot;},
{&quot;string&quot;: &quot;std::deque::end&quot;,
&quot;target&quot;: &quot;cpp/container/deque/end&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/deque/end&quot;},
{&quot;string&quot;: &quot;std::deque::cend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/end&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/end&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::end&quot;,
&quot;target&quot;: &quot;cpp/container/deque/end&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::cend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/end&quot;},
{&quot;string&quot;: &quot;std::deque::erase&quot;,
&quot;target&quot;: &quot;cpp/container/deque/erase&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/deque/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::erase&quot;,
&quot;target&quot;: &quot;cpp/container/deque/erase&quot;},
{&quot;string&quot;: &quot;std::deque::front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/front&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/front&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/front&quot;},
{&quot;string&quot;: &quot;std::deque::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/deque/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/deque/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/deque/get_allocator&quot;},
{&quot;string&quot;: &quot;std::deque::insert&quot;,
&quot;target&quot;: &quot;cpp/container/deque/insert&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/deque/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::insert&quot;,
&quot;target&quot;: &quot;cpp/container/deque/insert&quot;},
{&quot;string&quot;: &quot;std::deque::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/deque/max_size&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/deque/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/deque/max_size&quot;},
{&quot;string&quot;: &quot;std::deque::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator=&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator=&quot;},
{&quot;string&quot;: &quot;std::deque::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::deque::pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/pop_back&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/pop_back&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/pop_back&quot;},
{&quot;string&quot;: &quot;std::deque::pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/pop_front&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/pop_front&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/pop_front&quot;},
{&quot;string&quot;: &quot;std::deque::push_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/push_back&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;push_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/push_back&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::push_back&quot;,
&quot;target&quot;: &quot;cpp/container/deque/push_back&quot;},
{&quot;string&quot;: &quot;std::deque::push_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/push_front&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;push_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/push_front&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::push_front&quot;,
&quot;target&quot;: &quot;cpp/container/deque/push_front&quot;},
{&quot;string&quot;: &quot;std::deque::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rbegin&quot;},
{&quot;string&quot;: &quot;std::deque::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rbegin&quot;},
{&quot;string&quot;: &quot;std::deque::rend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rend&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rend&quot;},
{&quot;string&quot;: &quot;std::deque::crend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rend&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::rend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::crend&quot;,
&quot;target&quot;: &quot;cpp/container/deque/rend&quot;},
{&quot;string&quot;: &quot;std::deque::resize&quot;,
&quot;target&quot;: &quot;cpp/container/deque/resize&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;resize&quot;,
&quot;target&quot;: &quot;cpp/container/deque/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::resize&quot;,
&quot;target&quot;: &quot;cpp/container/deque/resize&quot;},
{&quot;string&quot;: &quot;std::deque::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/container/deque/shrink_to_fit&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/container/deque/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/container/deque/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::deque::size&quot;,
&quot;target&quot;: &quot;cpp/container/deque/size&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/deque/size&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::size&quot;,
&quot;target&quot;: &quot;cpp/container/deque/size&quot;},
{&quot;string&quot;: &quot;std::deque::swap&quot;,
&quot;target&quot;: &quot;cpp/container/deque/swap&quot;},
{&quot;on_group&quot;: &quot;std::deque&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/deque/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::swap&quot;,
&quot;target&quot;: &quot;cpp/container/deque/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::deque)&quot;,
&quot;target&quot;: &quot;cpp/container/deque/swap2&quot;},
{&quot;string&quot;: &quot;std::deque::~deque&quot;,
&quot;target&quot;: &quot;cpp/container/deque/~deque&quot;},
{&quot;string&quot;: &quot;std::pmr::deque::~deque&quot;,
&quot;target&quot;: &quot;cpp/container/deque/~deque&quot;},
{&quot;string&quot;: &quot;std::forward_list&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list&quot;},
{&quot;string&quot;: &quot;std::forward_list::assign&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/assign&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::assign&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/assign&quot;},
{&quot;string&quot;: &quot;std::forward_list::before_begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/before_begin&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;before_begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/before_begin&quot;},
{&quot;string&quot;: &quot;std::forward_list::cbefore_begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/before_begin&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;cbefore_begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/before_begin&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::before_begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/before_begin&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::cbefore_begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/before_begin&quot;},
{&quot;string&quot;: &quot;std::forward_list::begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/begin&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/begin&quot;},
{&quot;string&quot;: &quot;std::forward_list::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/begin&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::begin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/begin&quot;},
{&quot;string&quot;: &quot;std::forward_list::clear&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/clear&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::clear&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/clear&quot;},
{&quot;string&quot;: &quot;std::forward_list::emplace_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/emplace_after&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;emplace_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/emplace_after&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::emplace_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/emplace_after&quot;},
{&quot;string&quot;: &quot;std::forward_list::emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/emplace_front&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/emplace_front&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/emplace_front&quot;},
{&quot;string&quot;: &quot;std::forward_list::empty&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/empty&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::empty&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/empty&quot;},
{&quot;string&quot;: &quot;std::forward_list::end&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/end&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/end&quot;},
{&quot;string&quot;: &quot;std::forward_list::cend&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/end&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/end&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::end&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/end&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::cend&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/end&quot;},
{&quot;string&quot;: &quot;std::forward_list::erase_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/erase_after&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;erase_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/erase_after&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::erase_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/erase_after&quot;},
{&quot;string&quot;: &quot;std::forward_list::forward_list&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/forward_list&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::forward_list&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/forward_list&quot;},
{&quot;string&quot;: &quot;std::forward_list::front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/front&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/front&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/front&quot;},
{&quot;string&quot;: &quot;std::forward_list::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/get_allocator&quot;},
{&quot;string&quot;: &quot;std::forward_list::insert_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/insert_after&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;insert_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/insert_after&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::insert_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/insert_after&quot;},
{&quot;string&quot;: &quot;std::forward_list::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/max_size&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/max_size&quot;},
{&quot;string&quot;: &quot;std::forward_list::merge&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/merge&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::merge&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/merge&quot;},
{&quot;string&quot;: &quot;std::forward_list::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator=&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::forward_list::pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/pop_front&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/pop_front&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/pop_front&quot;},
{&quot;string&quot;: &quot;std::forward_list::push_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/push_front&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;push_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/push_front&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::push_front&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/push_front&quot;},
{&quot;string&quot;: &quot;std::forward_list::remove&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/remove&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;remove&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/remove&quot;},
{&quot;string&quot;: &quot;std::forward_list::remove_if&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/remove&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;remove_if&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/remove&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::remove&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/remove&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::remove_if&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/remove&quot;},
{&quot;string&quot;: &quot;std::forward_list::resize&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/resize&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;resize&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::resize&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/resize&quot;},
{&quot;string&quot;: &quot;std::forward_list::reverse&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/reverse&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;reverse&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/reverse&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::reverse&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/reverse&quot;},
{&quot;string&quot;: &quot;std::forward_list::sort&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/sort&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;sort&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/sort&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::sort&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/sort&quot;},
{&quot;string&quot;: &quot;std::forward_list::splice_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/splice_after&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;splice_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/splice_after&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::splice_after&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/splice_after&quot;},
{&quot;string&quot;: &quot;std::forward_list::swap&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/swap&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::swap&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::forward_list)&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/swap2&quot;},
{&quot;string&quot;: &quot;std::forward_list::unique&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/unique&quot;},
{&quot;on_group&quot;: &quot;std::forward_list&quot;,
&quot;string&quot;: &quot;unique&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/unique&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::unique&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/unique&quot;},
{&quot;string&quot;: &quot;std::forward_list::~forward_list&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/~forward_list&quot;},
{&quot;string&quot;: &quot;std::pmr::forward_list::~forward_list&quot;,
&quot;target&quot;: &quot;cpp/container/forward_list/~forward_list&quot;},
{&quot;string&quot;: &quot;std::list&quot;,
&quot;target&quot;: &quot;cpp/container/list&quot;},
{&quot;string&quot;: &quot;std::pmr::list&quot;,
&quot;target&quot;: &quot;cpp/container/list&quot;},
{&quot;string&quot;: &quot;std::list::assign&quot;,
&quot;target&quot;: &quot;cpp/container/list/assign&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/container/list/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::list::assign&quot;,
&quot;target&quot;: &quot;cpp/container/list/assign&quot;},
{&quot;string&quot;: &quot;std::list::back&quot;,
&quot;target&quot;: &quot;cpp/container/list/back&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/container/list/back&quot;},
{&quot;string&quot;: &quot;std::pmr::list::back&quot;,
&quot;target&quot;: &quot;cpp/container/list/back&quot;},
{&quot;string&quot;: &quot;std::list::begin&quot;,
&quot;target&quot;: &quot;cpp/container/list/begin&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/list/begin&quot;},
{&quot;string&quot;: &quot;std::list::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/begin&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::list::begin&quot;,
&quot;target&quot;: &quot;cpp/container/list/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::list::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/begin&quot;},
{&quot;string&quot;: &quot;std::list::clear&quot;,
&quot;target&quot;: &quot;cpp/container/list/clear&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/list/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::list::clear&quot;,
&quot;target&quot;: &quot;cpp/container/list/clear&quot;},
{&quot;string&quot;: &quot;std::list::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::list::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace&quot;},
{&quot;string&quot;: &quot;std::list::emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace_back&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace_back&quot;},
{&quot;string&quot;: &quot;std::pmr::list::emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace_back&quot;},
{&quot;string&quot;: &quot;std::list::emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace_front&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace_front&quot;},
{&quot;string&quot;: &quot;std::pmr::list::emplace_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/emplace_front&quot;},
{&quot;string&quot;: &quot;std::list::empty&quot;,
&quot;target&quot;: &quot;cpp/container/list/empty&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/list/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::list::empty&quot;,
&quot;target&quot;: &quot;cpp/container/list/empty&quot;},
{&quot;string&quot;: &quot;std::list::end&quot;,
&quot;target&quot;: &quot;cpp/container/list/end&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/list/end&quot;},
{&quot;string&quot;: &quot;std::list::cend&quot;,
&quot;target&quot;: &quot;cpp/container/list/end&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/list/end&quot;},
{&quot;string&quot;: &quot;std::pmr::list::end&quot;,
&quot;target&quot;: &quot;cpp/container/list/end&quot;},
{&quot;string&quot;: &quot;std::pmr::list::cend&quot;,
&quot;target&quot;: &quot;cpp/container/list/end&quot;},
{&quot;string&quot;: &quot;std::list::erase&quot;,
&quot;target&quot;: &quot;cpp/container/list/erase&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/list/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::list::erase&quot;,
&quot;target&quot;: &quot;cpp/container/list/erase&quot;},
{&quot;string&quot;: &quot;std::list::front&quot;,
&quot;target&quot;: &quot;cpp/container/list/front&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/container/list/front&quot;},
{&quot;string&quot;: &quot;std::pmr::list::front&quot;,
&quot;target&quot;: &quot;cpp/container/list/front&quot;},
{&quot;string&quot;: &quot;std::list::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/list/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/list/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::list::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/list/get_allocator&quot;},
{&quot;string&quot;: &quot;std::list::insert&quot;,
&quot;target&quot;: &quot;cpp/container/list/insert&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/list/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::list::insert&quot;,
&quot;target&quot;: &quot;cpp/container/list/insert&quot;},
{&quot;string&quot;: &quot;std::list::list&quot;,
&quot;target&quot;: &quot;cpp/container/list/list&quot;},
{&quot;string&quot;: &quot;std::pmr::list::list&quot;,
&quot;target&quot;: &quot;cpp/container/list/list&quot;},
{&quot;string&quot;: &quot;std::list::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/list/max_size&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/list/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::list::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/list/max_size&quot;},
{&quot;string&quot;: &quot;std::list::merge&quot;,
&quot;target&quot;: &quot;cpp/container/list/merge&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/list/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::list::merge&quot;,
&quot;target&quot;: &quot;cpp/container/list/merge&quot;},
{&quot;string&quot;: &quot;std::list::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator=&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::list::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::list::pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/pop_back&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/pop_back&quot;},
{&quot;string&quot;: &quot;std::pmr::list::pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/pop_back&quot;},
{&quot;string&quot;: &quot;std::list::pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/pop_front&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/pop_front&quot;},
{&quot;string&quot;: &quot;std::pmr::list::pop_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/pop_front&quot;},
{&quot;string&quot;: &quot;std::list::push_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/push_back&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;push_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/push_back&quot;},
{&quot;string&quot;: &quot;std::pmr::list::push_back&quot;,
&quot;target&quot;: &quot;cpp/container/list/push_back&quot;},
{&quot;string&quot;: &quot;std::list::push_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/push_front&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;push_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/push_front&quot;},
{&quot;string&quot;: &quot;std::pmr::list::push_front&quot;,
&quot;target&quot;: &quot;cpp/container/list/push_front&quot;},
{&quot;string&quot;: &quot;std::list::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/rbegin&quot;},
{&quot;string&quot;: &quot;std::list::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::list::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::list::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/list/rbegin&quot;},
{&quot;string&quot;: &quot;std::list::remove&quot;,
&quot;target&quot;: &quot;cpp/container/list/remove&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;remove&quot;,
&quot;target&quot;: &quot;cpp/container/list/remove&quot;},
{&quot;string&quot;: &quot;std::list::remove_if&quot;,
&quot;target&quot;: &quot;cpp/container/list/remove&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;remove_if&quot;,
&quot;target&quot;: &quot;cpp/container/list/remove&quot;},
{&quot;string&quot;: &quot;std::pmr::list::remove&quot;,
&quot;target&quot;: &quot;cpp/container/list/remove&quot;},
{&quot;string&quot;: &quot;std::pmr::list::remove_if&quot;,
&quot;target&quot;: &quot;cpp/container/list/remove&quot;},
{&quot;string&quot;: &quot;std::list::rend&quot;,
&quot;target&quot;: &quot;cpp/container/list/rend&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/list/rend&quot;},
{&quot;string&quot;: &quot;std::list::crend&quot;,
&quot;target&quot;: &quot;cpp/container/list/rend&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/list/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::list::rend&quot;,
&quot;target&quot;: &quot;cpp/container/list/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::list::crend&quot;,
&quot;target&quot;: &quot;cpp/container/list/rend&quot;},
{&quot;string&quot;: &quot;std::list::resize&quot;,
&quot;target&quot;: &quot;cpp/container/list/resize&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;resize&quot;,
&quot;target&quot;: &quot;cpp/container/list/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::list::resize&quot;,
&quot;target&quot;: &quot;cpp/container/list/resize&quot;},
{&quot;string&quot;: &quot;std::list::reverse&quot;,
&quot;target&quot;: &quot;cpp/container/list/reverse&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;reverse&quot;,
&quot;target&quot;: &quot;cpp/container/list/reverse&quot;},
{&quot;string&quot;: &quot;std::pmr::list::reverse&quot;,
&quot;target&quot;: &quot;cpp/container/list/reverse&quot;},
{&quot;string&quot;: &quot;std::list::size&quot;,
&quot;target&quot;: &quot;cpp/container/list/size&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/list/size&quot;},
{&quot;string&quot;: &quot;std::pmr::list::size&quot;,
&quot;target&quot;: &quot;cpp/container/list/size&quot;},
{&quot;string&quot;: &quot;std::list::sort&quot;,
&quot;target&quot;: &quot;cpp/container/list/sort&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;sort&quot;,
&quot;target&quot;: &quot;cpp/container/list/sort&quot;},
{&quot;string&quot;: &quot;std::pmr::list::sort&quot;,
&quot;target&quot;: &quot;cpp/container/list/sort&quot;},
{&quot;string&quot;: &quot;std::list::splice&quot;,
&quot;target&quot;: &quot;cpp/container/list/splice&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;splice&quot;,
&quot;target&quot;: &quot;cpp/container/list/splice&quot;},
{&quot;string&quot;: &quot;std::pmr::list::splice&quot;,
&quot;target&quot;: &quot;cpp/container/list/splice&quot;},
{&quot;string&quot;: &quot;std::list::swap&quot;,
&quot;target&quot;: &quot;cpp/container/list/swap&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/list/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::list::swap&quot;,
&quot;target&quot;: &quot;cpp/container/list/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::list)&quot;,
&quot;target&quot;: &quot;cpp/container/list/swap2&quot;},
{&quot;string&quot;: &quot;std::list::unique&quot;,
&quot;target&quot;: &quot;cpp/container/list/unique&quot;},
{&quot;on_group&quot;: &quot;std::list&quot;,
&quot;string&quot;: &quot;unique&quot;,
&quot;target&quot;: &quot;cpp/container/list/unique&quot;},
{&quot;string&quot;: &quot;std::pmr::list::unique&quot;,
&quot;target&quot;: &quot;cpp/container/list/unique&quot;},
{&quot;string&quot;: &quot;std::list::~list&quot;,
&quot;target&quot;: &quot;cpp/container/list/~list&quot;},
{&quot;string&quot;: &quot;std::pmr::list::~list&quot;,
&quot;target&quot;: &quot;cpp/container/list/~list&quot;},
{&quot;string&quot;: &quot;std::map&quot;,
&quot;target&quot;: &quot;cpp/container/map&quot;},
{&quot;string&quot;: &quot;std::pmr::map&quot;,
&quot;target&quot;: &quot;cpp/container/map&quot;},
{&quot;string&quot;: &quot;std::map::at&quot;,
&quot;target&quot;: &quot;cpp/container/map/at&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/container/map/at&quot;},
{&quot;string&quot;: &quot;std::pmr::map::at&quot;,
&quot;target&quot;: &quot;cpp/container/map/at&quot;},
{&quot;string&quot;: &quot;std::map::begin&quot;,
&quot;target&quot;: &quot;cpp/container/map/begin&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/map/begin&quot;},
{&quot;string&quot;: &quot;std::map::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/begin&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::map::begin&quot;,
&quot;target&quot;: &quot;cpp/container/map/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::map::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/begin&quot;},
{&quot;string&quot;: &quot;std::map::clear&quot;,
&quot;target&quot;: &quot;cpp/container/map/clear&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/map/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::map::clear&quot;,
&quot;target&quot;: &quot;cpp/container/map/clear&quot;},
{&quot;string&quot;: &quot;std::map::count&quot;,
&quot;target&quot;: &quot;cpp/container/map/count&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/map/count&quot;},
{&quot;string&quot;: &quot;std::pmr::map::count&quot;,
&quot;target&quot;: &quot;cpp/container/map/count&quot;},
{&quot;string&quot;: &quot;std::map::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/map/emplace&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/map/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::map::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/map/emplace&quot;},
{&quot;string&quot;: &quot;std::map::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/map/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/map/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::map::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/map/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::map::empty&quot;,
&quot;target&quot;: &quot;cpp/container/map/empty&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/map/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::map::empty&quot;,
&quot;target&quot;: &quot;cpp/container/map/empty&quot;},
{&quot;string&quot;: &quot;std::map::end&quot;,
&quot;target&quot;: &quot;cpp/container/map/end&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/map/end&quot;},
{&quot;string&quot;: &quot;std::map::cend&quot;,
&quot;target&quot;: &quot;cpp/container/map/end&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/map/end&quot;},
{&quot;string&quot;: &quot;std::pmr::map::end&quot;,
&quot;target&quot;: &quot;cpp/container/map/end&quot;},
{&quot;string&quot;: &quot;std::pmr::map::cend&quot;,
&quot;target&quot;: &quot;cpp/container/map/end&quot;},
{&quot;string&quot;: &quot;std::map::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/map/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/map/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::map::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/map/equal_range&quot;},
{&quot;string&quot;: &quot;std::map::erase&quot;,
&quot;target&quot;: &quot;cpp/container/map/erase&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/map/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::map::erase&quot;,
&quot;target&quot;: &quot;cpp/container/map/erase&quot;},
{&quot;string&quot;: &quot;std::map::extract&quot;,
&quot;target&quot;: &quot;cpp/container/map/extract&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/map/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::map::extract&quot;,
&quot;target&quot;: &quot;cpp/container/map/extract&quot;},
{&quot;string&quot;: &quot;std::map::find&quot;,
&quot;target&quot;: &quot;cpp/container/map/find&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/map/find&quot;},
{&quot;string&quot;: &quot;std::pmr::map::find&quot;,
&quot;target&quot;: &quot;cpp/container/map/find&quot;},
{&quot;string&quot;: &quot;std::map::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/map/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/map/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::map::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/map/get_allocator&quot;},
{&quot;string&quot;: &quot;std::map::insert&quot;,
&quot;target&quot;: &quot;cpp/container/map/insert&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/map/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::map::insert&quot;,
&quot;target&quot;: &quot;cpp/container/map/insert&quot;},
{&quot;string&quot;: &quot;std::map::insert_or_assign&quot;,
&quot;target&quot;: &quot;cpp/container/map/insert_or_assign&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;insert_or_assign&quot;,
&quot;target&quot;: &quot;cpp/container/map/insert_or_assign&quot;},
{&quot;string&quot;: &quot;std::pmr::map::insert_or_assign&quot;,
&quot;target&quot;: &quot;cpp/container/map/insert_or_assign&quot;},
{&quot;string&quot;: &quot;std::map::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/map/key_comp&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/map/key_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::map::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/map/key_comp&quot;},
{&quot;string&quot;: &quot;std::map::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/map/lower_bound&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/map/lower_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::map::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/map/lower_bound&quot;},
{&quot;string&quot;: &quot;std::map::map&quot;,
&quot;target&quot;: &quot;cpp/container/map/map&quot;},
{&quot;string&quot;: &quot;std::pmr::map::map&quot;,
&quot;target&quot;: &quot;cpp/container/map/map&quot;},
{&quot;string&quot;: &quot;std::map::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/map/max_size&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/map/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::map::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/map/max_size&quot;},
{&quot;string&quot;: &quot;std::map::merge&quot;,
&quot;target&quot;: &quot;cpp/container/map/merge&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/map/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::map::merge&quot;,
&quot;target&quot;: &quot;cpp/container/map/merge&quot;},
{&quot;string&quot;: &quot;std::map::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator=&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::map::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator=&quot;},
{&quot;string&quot;: &quot;std::map::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::map::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::map::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/rbegin&quot;},
{&quot;string&quot;: &quot;std::map::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::map::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::map::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/map/rbegin&quot;},
{&quot;string&quot;: &quot;std::map::rend&quot;,
&quot;target&quot;: &quot;cpp/container/map/rend&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/map/rend&quot;},
{&quot;string&quot;: &quot;std::map::crend&quot;,
&quot;target&quot;: &quot;cpp/container/map/rend&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/map/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::map::rend&quot;,
&quot;target&quot;: &quot;cpp/container/map/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::map::crend&quot;,
&quot;target&quot;: &quot;cpp/container/map/rend&quot;},
{&quot;string&quot;: &quot;std::map::size&quot;,
&quot;target&quot;: &quot;cpp/container/map/size&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/map/size&quot;},
{&quot;string&quot;: &quot;std::pmr::map::size&quot;,
&quot;target&quot;: &quot;cpp/container/map/size&quot;},
{&quot;string&quot;: &quot;std::map::swap&quot;,
&quot;target&quot;: &quot;cpp/container/map/swap&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/map/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::map::swap&quot;,
&quot;target&quot;: &quot;cpp/container/map/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::map)&quot;,
&quot;target&quot;: &quot;cpp/container/map/swap2&quot;},
{&quot;string&quot;: &quot;std::map::try_emplace&quot;,
&quot;target&quot;: &quot;cpp/container/map/try_emplace&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;try_emplace&quot;,
&quot;target&quot;: &quot;cpp/container/map/try_emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::map::try_emplace&quot;,
&quot;target&quot;: &quot;cpp/container/map/try_emplace&quot;},
{&quot;string&quot;: &quot;std::map::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/map/upper_bound&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/map/upper_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::map::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/map/upper_bound&quot;},
{&quot;string&quot;: &quot;std::map::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/map/value_comp&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/map/value_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::map::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/map/value_comp&quot;},
{&quot;string&quot;: &quot;std::map::value_compare&quot;,
&quot;target&quot;: &quot;cpp/container/map/value_compare&quot;},
{&quot;on_group&quot;: &quot;std::map&quot;,
&quot;string&quot;: &quot;value_compare&quot;,
&quot;target&quot;: &quot;cpp/container/map/value_compare&quot;},
{&quot;string&quot;: &quot;std::pmr::map::value_compare&quot;,
&quot;target&quot;: &quot;cpp/container/map/value_compare&quot;},
{&quot;string&quot;: &quot;std::map::~map&quot;,
&quot;target&quot;: &quot;cpp/container/map/~map&quot;},
{&quot;string&quot;: &quot;std::pmr::map::~map&quot;,
&quot;target&quot;: &quot;cpp/container/map/~map&quot;},
{&quot;string&quot;: &quot;std::multimap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap&quot;},
{&quot;string&quot;: &quot;std::multimap::begin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/begin&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/begin&quot;},
{&quot;string&quot;: &quot;std::multimap::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/begin&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::begin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/begin&quot;},
{&quot;string&quot;: &quot;std::multimap::clear&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/clear&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::clear&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/clear&quot;},
{&quot;string&quot;: &quot;std::multimap::count&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/count&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/count&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::count&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/count&quot;},
{&quot;string&quot;: &quot;std::multimap::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/emplace&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/emplace&quot;},
{&quot;string&quot;: &quot;std::multimap::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::multimap::empty&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/empty&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::empty&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/empty&quot;},
{&quot;string&quot;: &quot;std::multimap::end&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/end&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/end&quot;},
{&quot;string&quot;: &quot;std::multimap::cend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/end&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/end&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::end&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/end&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::cend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/end&quot;},
{&quot;string&quot;: &quot;std::multimap::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/equal_range&quot;},
{&quot;string&quot;: &quot;std::multimap::erase&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/erase&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::erase&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/erase&quot;},
{&quot;string&quot;: &quot;std::multimap::extract&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/extract&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::extract&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/extract&quot;},
{&quot;string&quot;: &quot;std::multimap::find&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/find&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/find&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::find&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/find&quot;},
{&quot;string&quot;: &quot;std::multimap::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/get_allocator&quot;},
{&quot;string&quot;: &quot;std::multimap::insert&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/insert&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::insert&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/insert&quot;},
{&quot;string&quot;: &quot;std::multimap::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/key_comp&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/key_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/key_comp&quot;},
{&quot;string&quot;: &quot;std::multimap::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/lower_bound&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/lower_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/lower_bound&quot;},
{&quot;string&quot;: &quot;std::multimap::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/max_size&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/max_size&quot;},
{&quot;string&quot;: &quot;std::multimap::merge&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/merge&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::merge&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/merge&quot;},
{&quot;string&quot;: &quot;std::multimap::multimap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/multimap&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::multimap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/multimap&quot;},
{&quot;string&quot;: &quot;std::multimap::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator=&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::multimap::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rbegin&quot;},
{&quot;string&quot;: &quot;std::multimap::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rbegin&quot;},
{&quot;string&quot;: &quot;std::multimap::rend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rend&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rend&quot;},
{&quot;string&quot;: &quot;std::multimap::crend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rend&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::rend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::crend&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/rend&quot;},
{&quot;string&quot;: &quot;std::multimap::size&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/size&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/size&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::size&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/size&quot;},
{&quot;string&quot;: &quot;std::multimap::swap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/swap&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::swap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/swap2&quot;},
{&quot;string&quot;: &quot;std::multimap::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/upper_bound&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/upper_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/upper_bound&quot;},
{&quot;string&quot;: &quot;std::multimap::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/value_comp&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/value_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/value_comp&quot;},
{&quot;string&quot;: &quot;std::multimap::value_compare&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/value_compare&quot;},
{&quot;on_group&quot;: &quot;std::multimap&quot;,
&quot;string&quot;: &quot;value_compare&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/value_compare&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::value_compare&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/value_compare&quot;},
{&quot;string&quot;: &quot;std::multimap::~multimap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/~multimap&quot;},
{&quot;string&quot;: &quot;std::pmr::multimap::~multimap&quot;,
&quot;target&quot;: &quot;cpp/container/multimap/~multimap&quot;},
{&quot;string&quot;: &quot;std::multiset&quot;,
&quot;target&quot;: &quot;cpp/container/multiset&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset&quot;,
&quot;target&quot;: &quot;cpp/container/multiset&quot;},
{&quot;string&quot;: &quot;std::multiset::begin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/begin&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/begin&quot;},
{&quot;string&quot;: &quot;std::multiset::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/begin&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::begin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/begin&quot;},
{&quot;string&quot;: &quot;std::multiset::clear&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/clear&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::clear&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/clear&quot;},
{&quot;string&quot;: &quot;std::multiset::count&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/count&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/count&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::count&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/count&quot;},
{&quot;string&quot;: &quot;std::multiset::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/emplace&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/emplace&quot;},
{&quot;string&quot;: &quot;std::multiset::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::multiset::empty&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/empty&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::empty&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/empty&quot;},
{&quot;string&quot;: &quot;std::multiset::end&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/end&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/end&quot;},
{&quot;string&quot;: &quot;std::multiset::cend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/end&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/end&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::end&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/end&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::cend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/end&quot;},
{&quot;string&quot;: &quot;std::multiset::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/equal_range&quot;},
{&quot;string&quot;: &quot;std::multiset::erase&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/erase&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::erase&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/erase&quot;},
{&quot;string&quot;: &quot;std::multiset::extract&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/extract&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::extract&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/extract&quot;},
{&quot;string&quot;: &quot;std::multiset::find&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/find&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/find&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::find&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/find&quot;},
{&quot;string&quot;: &quot;std::multiset::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/get_allocator&quot;},
{&quot;string&quot;: &quot;std::multiset::insert&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/insert&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::insert&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/insert&quot;},
{&quot;string&quot;: &quot;std::multiset::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/key_comp&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/key_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/key_comp&quot;},
{&quot;string&quot;: &quot;std::multiset::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/lower_bound&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/lower_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/lower_bound&quot;},
{&quot;string&quot;: &quot;std::multiset::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/max_size&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/max_size&quot;},
{&quot;string&quot;: &quot;std::multiset::merge&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/merge&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::merge&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/merge&quot;},
{&quot;string&quot;: &quot;std::multiset::multiset&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/multiset&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::multiset&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/multiset&quot;},
{&quot;string&quot;: &quot;std::multiset::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator=&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::multiset::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rbegin&quot;},
{&quot;string&quot;: &quot;std::multiset::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rbegin&quot;},
{&quot;string&quot;: &quot;std::multiset::rend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rend&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rend&quot;},
{&quot;string&quot;: &quot;std::multiset::crend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rend&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::rend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::crend&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/rend&quot;},
{&quot;string&quot;: &quot;std::multiset::size&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/size&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/size&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::size&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/size&quot;},
{&quot;string&quot;: &quot;std::multiset::swap&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/swap&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::swap&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/swap2&quot;},
{&quot;string&quot;: &quot;std::multiset::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/upper_bound&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/upper_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/upper_bound&quot;},
{&quot;string&quot;: &quot;std::multiset::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/value_comp&quot;},
{&quot;on_group&quot;: &quot;std::multiset&quot;,
&quot;string&quot;: &quot;value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/value_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/value_comp&quot;},
{&quot;string&quot;: &quot;std::multiset::~multiset&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/~multiset&quot;},
{&quot;string&quot;: &quot;std::pmr::multiset::~multiset&quot;,
&quot;target&quot;: &quot;cpp/container/multiset/~multiset&quot;},
{&quot;string&quot;: &quot;std::priority_queue&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue&quot;},
{&quot;string&quot;: &quot;std::priority_queue::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/emplace&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/emplace&quot;},
{&quot;string&quot;: &quot;std::priority_queue::empty&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/empty&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/empty&quot;},
{&quot;string&quot;: &quot;std::priority_queue::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/operator=&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/operator=&quot;},
{&quot;string&quot;: &quot;std::priority_queue::pop&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/pop&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;pop&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/pop&quot;},
{&quot;string&quot;: &quot;std::priority_queue::priority_queue&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/priority_queue&quot;},
{&quot;string&quot;: &quot;std::priority_queue::push&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/push&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;push&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/push&quot;},
{&quot;string&quot;: &quot;std::priority_queue::size&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/size&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/size&quot;},
{&quot;string&quot;: &quot;std::priority_queue::swap&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/swap&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::priority_queue)&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/swap2&quot;},
{&quot;string&quot;: &quot;std::priority_queue::top&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/top&quot;},
{&quot;on_group&quot;: &quot;std::priority_queue&quot;,
&quot;string&quot;: &quot;top&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/top&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::priority_queue&gt;&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::priority_queue::~priority_queue&quot;,
&quot;target&quot;: &quot;cpp/container/priority_queue/~priority_queue&quot;},
{&quot;string&quot;: &quot;std::queue&quot;,
&quot;target&quot;: &quot;cpp/container/queue&quot;},
{&quot;string&quot;: &quot;std::queue::back&quot;,
&quot;target&quot;: &quot;cpp/container/queue/back&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/container/queue/back&quot;},
{&quot;string&quot;: &quot;std::queue::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/queue/emplace&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/queue/emplace&quot;},
{&quot;string&quot;: &quot;std::queue::empty&quot;,
&quot;target&quot;: &quot;cpp/container/queue/empty&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/queue/empty&quot;},
{&quot;string&quot;: &quot;std::queue::front&quot;,
&quot;target&quot;: &quot;cpp/container/queue/front&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/container/queue/front&quot;},
{&quot;string&quot;: &quot;std::queue::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator=&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::queue)&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::queue)&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::queue)&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::queue)&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::queue)&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::queue)&quot;,
&quot;target&quot;: &quot;cpp/container/queue/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::queue::pop&quot;,
&quot;target&quot;: &quot;cpp/container/queue/pop&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;pop&quot;,
&quot;target&quot;: &quot;cpp/container/queue/pop&quot;},
{&quot;string&quot;: &quot;std::queue::push&quot;,
&quot;target&quot;: &quot;cpp/container/queue/push&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;push&quot;,
&quot;target&quot;: &quot;cpp/container/queue/push&quot;},
{&quot;string&quot;: &quot;std::queue::queue&quot;,
&quot;target&quot;: &quot;cpp/container/queue/queue&quot;},
{&quot;string&quot;: &quot;std::queue::size&quot;,
&quot;target&quot;: &quot;cpp/container/queue/size&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/queue/size&quot;},
{&quot;string&quot;: &quot;std::queue::swap&quot;,
&quot;target&quot;: &quot;cpp/container/queue/swap&quot;},
{&quot;on_group&quot;: &quot;std::queue&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/queue/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::queue)&quot;,
&quot;target&quot;: &quot;cpp/container/queue/swap2&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::queue&gt;&quot;,
&quot;target&quot;: &quot;cpp/container/queue/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::queue::~queue&quot;,
&quot;target&quot;: &quot;cpp/container/queue/~queue&quot;},
{&quot;string&quot;: &quot;std::set&quot;,
&quot;target&quot;: &quot;cpp/container/set&quot;},
{&quot;string&quot;: &quot;std::pmr::set&quot;,
&quot;target&quot;: &quot;cpp/container/set&quot;},
{&quot;string&quot;: &quot;std::set::begin&quot;,
&quot;target&quot;: &quot;cpp/container/set/begin&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/set/begin&quot;},
{&quot;string&quot;: &quot;std::set::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/begin&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::set::begin&quot;,
&quot;target&quot;: &quot;cpp/container/set/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::set::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/begin&quot;},
{&quot;string&quot;: &quot;std::set::clear&quot;,
&quot;target&quot;: &quot;cpp/container/set/clear&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/set/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::set::clear&quot;,
&quot;target&quot;: &quot;cpp/container/set/clear&quot;},
{&quot;string&quot;: &quot;std::set::count&quot;,
&quot;target&quot;: &quot;cpp/container/set/count&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/set/count&quot;},
{&quot;string&quot;: &quot;std::pmr::set::count&quot;,
&quot;target&quot;: &quot;cpp/container/set/count&quot;},
{&quot;string&quot;: &quot;std::set::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/set/emplace&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/set/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::set::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/set/emplace&quot;},
{&quot;string&quot;: &quot;std::set::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/set/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/set/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::set::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/set/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::set::empty&quot;,
&quot;target&quot;: &quot;cpp/container/set/empty&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/set/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::set::empty&quot;,
&quot;target&quot;: &quot;cpp/container/set/empty&quot;},
{&quot;string&quot;: &quot;std::set::end&quot;,
&quot;target&quot;: &quot;cpp/container/set/end&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/set/end&quot;},
{&quot;string&quot;: &quot;std::set::cend&quot;,
&quot;target&quot;: &quot;cpp/container/set/end&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/set/end&quot;},
{&quot;string&quot;: &quot;std::pmr::set::end&quot;,
&quot;target&quot;: &quot;cpp/container/set/end&quot;},
{&quot;string&quot;: &quot;std::pmr::set::cend&quot;,
&quot;target&quot;: &quot;cpp/container/set/end&quot;},
{&quot;string&quot;: &quot;std::set::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/set/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/set/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::set::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/set/equal_range&quot;},
{&quot;string&quot;: &quot;std::set::erase&quot;,
&quot;target&quot;: &quot;cpp/container/set/erase&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/set/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::set::erase&quot;,
&quot;target&quot;: &quot;cpp/container/set/erase&quot;},
{&quot;string&quot;: &quot;std::set::extract&quot;,
&quot;target&quot;: &quot;cpp/container/set/extract&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/set/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::set::extract&quot;,
&quot;target&quot;: &quot;cpp/container/set/extract&quot;},
{&quot;string&quot;: &quot;std::set::find&quot;,
&quot;target&quot;: &quot;cpp/container/set/find&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/set/find&quot;},
{&quot;string&quot;: &quot;std::pmr::set::find&quot;,
&quot;target&quot;: &quot;cpp/container/set/find&quot;},
{&quot;string&quot;: &quot;std::set::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/set/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/set/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::set::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/set/get_allocator&quot;},
{&quot;string&quot;: &quot;std::set::insert&quot;,
&quot;target&quot;: &quot;cpp/container/set/insert&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/set/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::set::insert&quot;,
&quot;target&quot;: &quot;cpp/container/set/insert&quot;},
{&quot;string&quot;: &quot;std::set::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/set/key_comp&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/set/key_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::set::key_comp&quot;,
&quot;target&quot;: &quot;cpp/container/set/key_comp&quot;},
{&quot;string&quot;: &quot;std::set::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/set/lower_bound&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/set/lower_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::set::lower_bound&quot;,
&quot;target&quot;: &quot;cpp/container/set/lower_bound&quot;},
{&quot;string&quot;: &quot;std::set::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/set/max_size&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/set/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::set::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/set/max_size&quot;},
{&quot;string&quot;: &quot;std::set::merge&quot;,
&quot;target&quot;: &quot;cpp/container/set/merge&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/set/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::set::merge&quot;,
&quot;target&quot;: &quot;cpp/container/set/merge&quot;},
{&quot;string&quot;: &quot;std::set::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator=&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::set::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::set::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/rbegin&quot;},
{&quot;string&quot;: &quot;std::set::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::set::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::set::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/set/rbegin&quot;},
{&quot;string&quot;: &quot;std::set::rend&quot;,
&quot;target&quot;: &quot;cpp/container/set/rend&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/set/rend&quot;},
{&quot;string&quot;: &quot;std::set::crend&quot;,
&quot;target&quot;: &quot;cpp/container/set/rend&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/set/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::set::rend&quot;,
&quot;target&quot;: &quot;cpp/container/set/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::set::crend&quot;,
&quot;target&quot;: &quot;cpp/container/set/rend&quot;},
{&quot;string&quot;: &quot;std::set::set&quot;,
&quot;target&quot;: &quot;cpp/container/set/set&quot;},
{&quot;string&quot;: &quot;std::pmr::set::set&quot;,
&quot;target&quot;: &quot;cpp/container/set/set&quot;},
{&quot;string&quot;: &quot;std::set::size&quot;,
&quot;target&quot;: &quot;cpp/container/set/size&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/set/size&quot;},
{&quot;string&quot;: &quot;std::pmr::set::size&quot;,
&quot;target&quot;: &quot;cpp/container/set/size&quot;},
{&quot;string&quot;: &quot;std::set::swap&quot;,
&quot;target&quot;: &quot;cpp/container/set/swap&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/set/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::set::swap&quot;,
&quot;target&quot;: &quot;cpp/container/set/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::set)&quot;,
&quot;target&quot;: &quot;cpp/container/set/swap2&quot;},
{&quot;string&quot;: &quot;std::set::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/set/upper_bound&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/set/upper_bound&quot;},
{&quot;string&quot;: &quot;std::pmr::set::upper_bound&quot;,
&quot;target&quot;: &quot;cpp/container/set/upper_bound&quot;},
{&quot;string&quot;: &quot;std::set::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/set/value_comp&quot;},
{&quot;on_group&quot;: &quot;std::set&quot;,
&quot;string&quot;: &quot;value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/set/value_comp&quot;},
{&quot;string&quot;: &quot;std::pmr::set::value_comp&quot;,
&quot;target&quot;: &quot;cpp/container/set/value_comp&quot;},
{&quot;string&quot;: &quot;std::set::~set&quot;,
&quot;target&quot;: &quot;cpp/container/set/~set&quot;},
{&quot;string&quot;: &quot;std::pmr::set::~set&quot;,
&quot;target&quot;: &quot;cpp/container/set/~set&quot;},
{&quot;string&quot;: &quot;std::stack&quot;,
&quot;target&quot;: &quot;cpp/container/stack&quot;},
{&quot;string&quot;: &quot;std::stack::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/stack/emplace&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/stack/emplace&quot;},
{&quot;string&quot;: &quot;std::stack::empty&quot;,
&quot;target&quot;: &quot;cpp/container/stack/empty&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/stack/empty&quot;},
{&quot;string&quot;: &quot;std::stack::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator=&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::stack)&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::stack)&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::stack)&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::stack)&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::stack)&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::stack)&quot;,
&quot;target&quot;: &quot;cpp/container/stack/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::stack::pop&quot;,
&quot;target&quot;: &quot;cpp/container/stack/pop&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;pop&quot;,
&quot;target&quot;: &quot;cpp/container/stack/pop&quot;},
{&quot;string&quot;: &quot;std::stack::push&quot;,
&quot;target&quot;: &quot;cpp/container/stack/push&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;push&quot;,
&quot;target&quot;: &quot;cpp/container/stack/push&quot;},
{&quot;string&quot;: &quot;std::stack::size&quot;,
&quot;target&quot;: &quot;cpp/container/stack/size&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/stack/size&quot;},
{&quot;string&quot;: &quot;std::stack::stack&quot;,
&quot;target&quot;: &quot;cpp/container/stack/stack&quot;},
{&quot;string&quot;: &quot;std::stack::swap&quot;,
&quot;target&quot;: &quot;cpp/container/stack/swap&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/stack/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::stack)&quot;,
&quot;target&quot;: &quot;cpp/container/stack/swap2&quot;},
{&quot;string&quot;: &quot;std::stack::top&quot;,
&quot;target&quot;: &quot;cpp/container/stack/top&quot;},
{&quot;on_group&quot;: &quot;std::stack&quot;,
&quot;string&quot;: &quot;top&quot;,
&quot;target&quot;: &quot;cpp/container/stack/top&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::stack&gt;&quot;,
&quot;target&quot;: &quot;cpp/container/stack/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::stack::~stack&quot;,
&quot;target&quot;: &quot;cpp/container/stack/~stack&quot;},
{&quot;string&quot;: &quot;std::unordered_map&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map&quot;},
{&quot;string&quot;: &quot;std::unordered_map::at&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/at&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/at&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::at&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/at&quot;},
{&quot;string&quot;: &quot;std::unordered_map::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_map::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_map::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_map::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_map::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket&quot;},
{&quot;string&quot;: &quot;std::unordered_map::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_map::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/bucket_size&quot;},
{&quot;string&quot;: &quot;std::unordered_map::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/clear&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/clear&quot;},
{&quot;string&quot;: &quot;std::unordered_map::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/count&quot;},
{&quot;string&quot;: &quot;std::unordered_map::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/emplace&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/emplace&quot;},
{&quot;string&quot;: &quot;std::unordered_map::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::unordered_map::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/empty&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/empty&quot;},
{&quot;string&quot;: &quot;std::unordered_map::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end&quot;},
{&quot;string&quot;: &quot;std::unordered_map::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end&quot;},
{&quot;string&quot;: &quot;std::unordered_map::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_map::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_map::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/equal_range&quot;},
{&quot;string&quot;: &quot;std::unordered_map::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/erase&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/erase&quot;},
{&quot;string&quot;: &quot;std::unordered_map::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/extract&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/extract&quot;},
{&quot;string&quot;: &quot;std::unordered_map::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/find&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/find&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/find&quot;},
{&quot;string&quot;: &quot;std::unordered_map::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/get_allocator&quot;},
{&quot;string&quot;: &quot;std::unordered_map::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/hash_function&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/hash_function&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/hash_function&quot;},
{&quot;string&quot;: &quot;std::unordered_map::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/insert&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/insert&quot;},
{&quot;string&quot;: &quot;std::unordered_map::insert_or_assign&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/insert_or_assign&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;insert_or_assign&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/insert_or_assign&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::insert_or_assign&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/insert_or_assign&quot;},
{&quot;string&quot;: &quot;std::unordered_map::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/key_eq&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/key_eq&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/key_eq&quot;},
{&quot;string&quot;: &quot;std::unordered_map::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_map::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_map::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_map::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/max_size&quot;},
{&quot;string&quot;: &quot;std::unordered_map::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/merge&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/merge&quot;},
{&quot;string&quot;: &quot;std::unordered_map::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator=&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator=&quot;},
{&quot;string&quot;: &quot;std::unordered_map::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::unordered_map)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::unordered_map)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::unordered_map)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::unordered_map)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::unordered_map::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/rehash&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/rehash&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/rehash&quot;},
{&quot;string&quot;: &quot;std::unordered_map::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/reserve&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/reserve&quot;},
{&quot;string&quot;: &quot;std::unordered_map::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/size&quot;},
{&quot;string&quot;: &quot;std::unordered_map::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/swap&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::unordered_map)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::unordered_map)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/swap2&quot;},
{&quot;string&quot;: &quot;std::unordered_map::try_emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/try_emplace&quot;},
{&quot;on_group&quot;: &quot;std::unordered_map&quot;,
&quot;string&quot;: &quot;try_emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/try_emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::try_emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/try_emplace&quot;},
{&quot;string&quot;: &quot;std::unordered_map::unordered_map&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/unordered_map&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::unordered_map&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/unordered_map&quot;},
{&quot;string&quot;: &quot;std::unordered_map::~unordered_map&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/~unordered_map&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_map::~unordered_map&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_map/~unordered_map&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/bucket_size&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/clear&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/clear&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/count&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/emplace&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/emplace&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/empty&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/empty&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/equal_range&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/erase&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/erase&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/extract&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/extract&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/find&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/find&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/find&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/get_allocator&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/hash_function&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/hash_function&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/hash_function&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/insert&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/insert&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/key_eq&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/key_eq&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/key_eq&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/max_size&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/merge&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/merge&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/operator=&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::unordered_multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::unordered_multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::unordered_multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::unordered_multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/rehash&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/rehash&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/rehash&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/reserve&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/reserve&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/size&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/swap&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multimap&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::unordered_multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::unordered_multimap)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/swap2&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::unordered_multimap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/unordered_multimap&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::unordered_multimap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/unordered_multimap&quot;},
{&quot;string&quot;: &quot;std::unordered_multimap::~unordered_multimap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/~unordered_multimap&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multimap::~unordered_multimap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multimap/~unordered_multimap&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/bucket_size&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/clear&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/clear&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/count&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/emplace&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/emplace&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/empty&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/empty&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/equal_range&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/erase&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/erase&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/extract&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/extract&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/find&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/find&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/find&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/get_allocator&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/hash_function&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/hash_function&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/hash_function&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/insert&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/insert&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/key_eq&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/key_eq&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/key_eq&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/max_size&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/merge&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/merge&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/operator=&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::unordered_multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::unordered_multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::unordered_multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::unordered_multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/rehash&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/rehash&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/rehash&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/reserve&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/reserve&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/size&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/swap&quot;},
{&quot;on_group&quot;: &quot;std::unordered_multiset&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::unordered_multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::unordered_multiset)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/swap2&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::unordered_multiset&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/unordered_multiset&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::unordered_multiset&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/unordered_multiset&quot;},
{&quot;string&quot;: &quot;std::unordered_multiset::~unordered_multiset&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/~unordered_multiset&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_multiset::~unordered_multiset&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_multiset/~unordered_multiset&quot;},
{&quot;string&quot;: &quot;std::unordered_set&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set&quot;},
{&quot;string&quot;: &quot;std::unordered_set::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_set::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::begin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin&quot;},
{&quot;string&quot;: &quot;std::unordered_set::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_set::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::begin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::cbegin(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/begin2&quot;},
{&quot;string&quot;: &quot;std::unordered_set::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::bucket&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket&quot;},
{&quot;string&quot;: &quot;std::unordered_set::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_set::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::bucket_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/bucket_size&quot;},
{&quot;string&quot;: &quot;std::unordered_set::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/clear&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::clear&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/clear&quot;},
{&quot;string&quot;: &quot;std::unordered_set::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/count&quot;},
{&quot;string&quot;: &quot;std::unordered_set::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/emplace&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/emplace&quot;},
{&quot;string&quot;: &quot;std::unordered_set::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/emplace_hint&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::emplace_hint&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/emplace_hint&quot;},
{&quot;string&quot;: &quot;std::unordered_set::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/empty&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::empty&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/empty&quot;},
{&quot;string&quot;: &quot;std::unordered_set::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end&quot;},
{&quot;string&quot;: &quot;std::unordered_set::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::end&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::cend&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end&quot;},
{&quot;string&quot;: &quot;std::unordered_set::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_set::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end2&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::end(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end2&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::cend(int)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/end2&quot;},
{&quot;string&quot;: &quot;std::unordered_set::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/equal_range&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/equal_range&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::equal_range&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/equal_range&quot;},
{&quot;string&quot;: &quot;std::unordered_set::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/erase&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::erase&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/erase&quot;},
{&quot;string&quot;: &quot;std::unordered_set::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/extract&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/extract&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::extract&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/extract&quot;},
{&quot;string&quot;: &quot;std::unordered_set::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/find&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/find&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::find&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/find&quot;},
{&quot;string&quot;: &quot;std::unordered_set::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/get_allocator&quot;},
{&quot;string&quot;: &quot;std::unordered_set::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/hash_function&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/hash_function&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::hash_function&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/hash_function&quot;},
{&quot;string&quot;: &quot;std::unordered_set::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/insert&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::insert&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/insert&quot;},
{&quot;string&quot;: &quot;std::unordered_set::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/key_eq&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/key_eq&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::key_eq&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/key_eq&quot;},
{&quot;string&quot;: &quot;std::unordered_set::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_set::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_bucket_count&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::max_bucket_count&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_bucket_count&quot;},
{&quot;string&quot;: &quot;std::unordered_set::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_load_factor&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::max_load_factor&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_load_factor&quot;},
{&quot;string&quot;: &quot;std::unordered_set::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/max_size&quot;},
{&quot;string&quot;: &quot;std::unordered_set::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/merge&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/merge&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::merge&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/merge&quot;},
{&quot;string&quot;: &quot;std::unordered_set::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/operator=&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::unordered_set)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::unordered_set)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::unordered_set)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::unordered_set)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::unordered_set::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/rehash&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/rehash&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::rehash&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/rehash&quot;},
{&quot;string&quot;: &quot;std::unordered_set::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/reserve&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/reserve&quot;},
{&quot;string&quot;: &quot;std::unordered_set::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/size&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/size&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::size&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/size&quot;},
{&quot;string&quot;: &quot;std::unordered_set::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/swap&quot;},
{&quot;on_group&quot;: &quot;std::unordered_set&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::swap&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::unordered_set)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::unordered_set)&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/swap2&quot;},
{&quot;string&quot;: &quot;std::unordered_set::unordered_set&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/unordered_set&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::unordered_set&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/unordered_set&quot;},
{&quot;string&quot;: &quot;std::unordered_set::~unordered_set&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/~unordered_set&quot;},
{&quot;string&quot;: &quot;std::pmr::unordered_set::~unordered_set&quot;,
&quot;target&quot;: &quot;cpp/container/unordered_set/~unordered_set&quot;},
{&quot;string&quot;: &quot;std::vector&quot;,
&quot;target&quot;: &quot;cpp/container/vector&quot;},
{&quot;string&quot;: &quot;std::pmr::vector&quot;,
&quot;target&quot;: &quot;cpp/container/vector&quot;},
{&quot;string&quot;: &quot;std::vector::assign&quot;,
&quot;target&quot;: &quot;cpp/container/vector/assign&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/container/vector/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::assign&quot;,
&quot;target&quot;: &quot;cpp/container/vector/assign&quot;},
{&quot;string&quot;: &quot;std::vector::at&quot;,
&quot;target&quot;: &quot;cpp/container/vector/at&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/container/vector/at&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::at&quot;,
&quot;target&quot;: &quot;cpp/container/vector/at&quot;},
{&quot;string&quot;: &quot;std::vector::back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/back&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/back&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/back&quot;},
{&quot;string&quot;: &quot;std::vector::begin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/begin&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/begin&quot;},
{&quot;string&quot;: &quot;std::vector::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/begin&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::begin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::cbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/begin&quot;},
{&quot;string&quot;: &quot;std::vector::capacity&quot;,
&quot;target&quot;: &quot;cpp/container/vector/capacity&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;capacity&quot;,
&quot;target&quot;: &quot;cpp/container/vector/capacity&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::capacity&quot;,
&quot;target&quot;: &quot;cpp/container/vector/capacity&quot;},
{&quot;string&quot;: &quot;std::vector::clear&quot;,
&quot;target&quot;: &quot;cpp/container/vector/clear&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/container/vector/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::clear&quot;,
&quot;target&quot;: &quot;cpp/container/vector/clear&quot;},
{&quot;string&quot;: &quot;std::vector::data&quot;,
&quot;target&quot;: &quot;cpp/container/vector/data&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;data&quot;,
&quot;target&quot;: &quot;cpp/container/vector/data&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::data&quot;,
&quot;target&quot;: &quot;cpp/container/vector/data&quot;},
{&quot;string&quot;: &quot;std::vector::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/vector/emplace&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/container/vector/emplace&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::emplace&quot;,
&quot;target&quot;: &quot;cpp/container/vector/emplace&quot;},
{&quot;string&quot;: &quot;std::vector::emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/emplace_back&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/emplace_back&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::emplace_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/emplace_back&quot;},
{&quot;string&quot;: &quot;std::vector::empty&quot;,
&quot;target&quot;: &quot;cpp/container/vector/empty&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/container/vector/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::empty&quot;,
&quot;target&quot;: &quot;cpp/container/vector/empty&quot;},
{&quot;string&quot;: &quot;std::vector::end&quot;,
&quot;target&quot;: &quot;cpp/container/vector/end&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/container/vector/end&quot;},
{&quot;string&quot;: &quot;std::vector::cend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/end&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/end&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::end&quot;,
&quot;target&quot;: &quot;cpp/container/vector/end&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::cend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/end&quot;},
{&quot;string&quot;: &quot;std::vector::erase&quot;,
&quot;target&quot;: &quot;cpp/container/vector/erase&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/container/vector/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::erase&quot;,
&quot;target&quot;: &quot;cpp/container/vector/erase&quot;},
{&quot;string&quot;: &quot;std::vector::front&quot;,
&quot;target&quot;: &quot;cpp/container/vector/front&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/container/vector/front&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::front&quot;,
&quot;target&quot;: &quot;cpp/container/vector/front&quot;},
{&quot;string&quot;: &quot;std::vector::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/vector/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/vector/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/container/vector/get_allocator&quot;},
{&quot;string&quot;: &quot;std::vector::insert&quot;,
&quot;target&quot;: &quot;cpp/container/vector/insert&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/container/vector/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::insert&quot;,
&quot;target&quot;: &quot;cpp/container/vector/insert&quot;},
{&quot;string&quot;: &quot;std::vector::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/vector/max_size&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/container/vector/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::max_size&quot;,
&quot;target&quot;: &quot;cpp/container/vector/max_size&quot;},
{&quot;string&quot;: &quot;std::vector::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator=&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::operator=&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator=&quot;},
{&quot;string&quot;: &quot;std::vector::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::operator[]&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::vector::pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/pop_back&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/pop_back&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::pop_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/pop_back&quot;},
{&quot;string&quot;: &quot;std::vector::push_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/push_back&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;push_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/push_back&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::push_back&quot;,
&quot;target&quot;: &quot;cpp/container/vector/push_back&quot;},
{&quot;string&quot;: &quot;std::vector::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rbegin&quot;},
{&quot;string&quot;: &quot;std::vector::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::rbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::crbegin&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rbegin&quot;},
{&quot;string&quot;: &quot;std::vector::rend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rend&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rend&quot;},
{&quot;string&quot;: &quot;std::vector::crend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rend&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::rend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::crend&quot;,
&quot;target&quot;: &quot;cpp/container/vector/rend&quot;},
{&quot;string&quot;: &quot;std::vector::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/vector/reserve&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;reserve&quot;,
&quot;target&quot;: &quot;cpp/container/vector/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::reserve&quot;,
&quot;target&quot;: &quot;cpp/container/vector/reserve&quot;},
{&quot;string&quot;: &quot;std::vector::resize&quot;,
&quot;target&quot;: &quot;cpp/container/vector/resize&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;resize&quot;,
&quot;target&quot;: &quot;cpp/container/vector/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::resize&quot;,
&quot;target&quot;: &quot;cpp/container/vector/resize&quot;},
{&quot;string&quot;: &quot;std::vector::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/container/vector/shrink_to_fit&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/container/vector/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/container/vector/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::vector::size&quot;,
&quot;target&quot;: &quot;cpp/container/vector/size&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/container/vector/size&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::size&quot;,
&quot;target&quot;: &quot;cpp/container/vector/size&quot;},
{&quot;string&quot;: &quot;std::vector::swap&quot;,
&quot;target&quot;: &quot;cpp/container/vector/swap&quot;},
{&quot;on_group&quot;: &quot;std::vector&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/container/vector/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::swap&quot;,
&quot;target&quot;: &quot;cpp/container/vector/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::vector)&quot;,
&quot;target&quot;: &quot;cpp/container/vector/swap2&quot;},
{&quot;string&quot;: &quot;std::vector::vector&quot;,
&quot;target&quot;: &quot;cpp/container/vector/vector&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::vector&quot;,
&quot;target&quot;: &quot;cpp/container/vector/vector&quot;},
{&quot;string&quot;: &quot;std::vector::~vector&quot;,
&quot;target&quot;: &quot;cpp/container/vector/~vector&quot;},
{&quot;string&quot;: &quot;std::pmr::vector::~vector&quot;,
&quot;target&quot;: &quot;cpp/container/vector/~vector&quot;},
{&quot;string&quot;: &quot;assert&quot;,
&quot;target&quot;: &quot;cpp/error/assert&quot;},
{&quot;string&quot;: &quot;std::bad_exception&quot;,
&quot;target&quot;: &quot;cpp/error/bad_exception&quot;},
{&quot;string&quot;: &quot;std::current_exception&quot;,
&quot;target&quot;: &quot;cpp/error/current_exception&quot;},
{&quot;string&quot;: &quot;std::domain_error&quot;,
&quot;target&quot;: &quot;cpp/error/domain_error&quot;},
{&quot;string&quot;: &quot;std::domain_error::domain_error&quot;,
&quot;target&quot;: &quot;cpp/error/domain_error&quot;},
{&quot;string&quot;: &quot;std::errc&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::address_family_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;address_family_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::address_in_use&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;address_in_use&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::address_not_available&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;address_not_available&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::already_connected&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;already_connected&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::argument_list_too_long&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;argument_list_too_long&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::argument_out_of_domain&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;argument_out_of_domain&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::bad_address&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;bad_address&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::bad_file_descriptor&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;bad_file_descriptor&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::bad_message&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;bad_message&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::broken_pipe&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;broken_pipe&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::connection_aborted&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;connection_aborted&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::connection_already_in_progress&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;connection_already_in_progress&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::connection_refused&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;connection_refused&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::connection_reset&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;connection_reset&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::cross_device_link&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;cross_device_link&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::destination_address_required&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;destination_address_required&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::device_or_resource_busy&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;device_or_resource_busy&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::directory_not_empty&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;directory_not_empty&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::executable_format_error&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;executable_format_error&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::file_exists&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;file_exists&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::file_too_large&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;file_too_large&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::filename_too_long&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;filename_too_long&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::function_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;function_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::host_unreachable&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;host_unreachable&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::identifier_removed&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;identifier_removed&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::illegal_byte_sequence&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;illegal_byte_sequence&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::inappropriate_io_control_operation&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;inappropriate_io_control_operation&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::interrupted&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;interrupted&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::invalid_argument&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;invalid_argument&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::invalid_seek&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;invalid_seek&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::io_error&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;io_error&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::is_a_directory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;is_a_directory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::message_size&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;message_size&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::network_down&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;network_down&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::network_reset&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;network_reset&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::network_unreachable&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;network_unreachable&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_buffer_space&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_buffer_space&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_child_process&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_child_process&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_link&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_link&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_lock_available&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_lock_available&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_message_available&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_message_available&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_message&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_message&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_protocol_option&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_protocol_option&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_space_on_device&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_space_on_device&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_stream_resources&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_stream_resources&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_such_device_or_address&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_such_device_or_address&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_such_device&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_such_device&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_such_file_or_directory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_such_file_or_directory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::no_such_process&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;no_such_process&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::not_a_directory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;not_a_directory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::not_a_socket&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;not_a_socket&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::not_a_stream&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;not_a_stream&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::not_connected&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;not_connected&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::not_enough_memory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;not_enough_memory&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::operation_canceled&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;operation_canceled&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::operation_in_progress&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;operation_in_progress&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::operation_not_permitted&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;operation_not_permitted&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::operation_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;operation_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::operation_would_block&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;operation_would_block&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::owner_dead&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;owner_dead&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::permission_denied&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;permission_denied&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::protocol_error&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;protocol_error&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::protocol_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;protocol_not_supported&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::read_only_file_system&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;read_only_file_system&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::resource_deadlock_would_occur&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;resource_deadlock_would_occur&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::resource_unavailable_try_again&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;resource_unavailable_try_again&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::result_out_of_range&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;result_out_of_range&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::state_not_recoverable&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;state_not_recoverable&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::stream_timeout&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;stream_timeout&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::text_file_busy&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;text_file_busy&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::timed_out&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;timed_out&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::too_many_files_open_in_system&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;too_many_files_open_in_system&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::too_many_files_open&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;too_many_files_open&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::too_many_links&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;too_many_links&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::too_many_symbolic_link_levels&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;too_many_symbolic_link_levels&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::value_too_large&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;value_too_large&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::errc::wrong_protocol_type&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;on_group&quot;: &quot;std::errc&quot;,
&quot;string&quot;: &quot;wrong_protocol_type&quot;,
&quot;target&quot;: &quot;cpp/error/errc&quot;},
{&quot;string&quot;: &quot;std::is_error_condition_enum&lt;std::errc&gt;&quot;,
&quot;target&quot;: &quot;cpp/error/errc/is_error_condition_enum&quot;},
{&quot;string&quot;: &quot;std::make_error_code(std::errc)&quot;,
&quot;target&quot;: &quot;cpp/error/errc/make_error_code&quot;},
{&quot;string&quot;: &quot;std::make_error_condition(std::errc)&quot;,
&quot;target&quot;: &quot;cpp/error/errc/make_error_condition&quot;},
{&quot;string&quot;: &quot;errno&quot;,
&quot;target&quot;: &quot;cpp/error/errno&quot;},
{&quot;string&quot;: &quot;E2BIG&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EACCESS&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EADDRINUSE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EADDRNOTAVAIL&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EAFNOSUPPORT&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EAGAIN&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EALREADY&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EBADF&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EBADMSG&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EBUSY&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECANCELED&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECHILD&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECONNABORTED&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECONNREFUSED&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ECONNRESET&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EDEADLK&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EDESTADDRREQ&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EDOM&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EEXIST&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EFAULT&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EFBIG&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EHOSTUNREACH&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EIDRM&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EILSEQ&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EINPROGRESS&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EINTR&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EINVAL&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EIO&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EISCONN&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EISDIR&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ELOOP&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EMFILE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EMLINK&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EMSGSIZE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENAMETOOLONG&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENETDOWN&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENETRESET&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENETUNREACH&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENFILE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOBUFS&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENODATA&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENODEV&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOENT&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOEXEC&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOLCK&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOLINK&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOMEM&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOMSG&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOPROTOOPT&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSPC&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSR&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSTR&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOSYS&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTCONN&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTDIR&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTEMPTY&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTRECOVERABLE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTSOCK&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTSUP&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENOTTY&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ENXIO&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EOPNOTSUPP&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EOVERFLOW&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EOWNERDEAD&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPERM&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPIPE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPROTO&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPROTONOSUPPORT&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EPROTOTYPE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ERANGE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EROFS&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ESPIPE&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ESRCH&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ETIME&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ETIMEDOUT&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;ETXTBSY&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EWOULDBLOCK&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;EXDEV&quot;,
&quot;target&quot;: &quot;cpp/error/errno_macros&quot;},
{&quot;string&quot;: &quot;std::error_category&quot;,
&quot;target&quot;: &quot;cpp/error/error_category&quot;},
{&quot;string&quot;: &quot;std::error_category::default_error_condition&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/default_error_condition&quot;},
{&quot;on_group&quot;: &quot;std::error_category&quot;,
&quot;string&quot;: &quot;default_error_condition&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/default_error_condition&quot;},
{&quot;string&quot;: &quot;std::error_category::equivalent&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/equivalent&quot;},
{&quot;on_group&quot;: &quot;std::error_category&quot;,
&quot;string&quot;: &quot;equivalent&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/equivalent&quot;},
{&quot;string&quot;: &quot;std::error_category::error_category&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/error_category&quot;},
{&quot;string&quot;: &quot;std::error_category::message&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/message&quot;},
{&quot;on_group&quot;: &quot;std::error_category&quot;,
&quot;string&quot;: &quot;message&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/message&quot;},
{&quot;string&quot;: &quot;std::error_category::name&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/name&quot;},
{&quot;on_group&quot;: &quot;std::error_category&quot;,
&quot;string&quot;: &quot;name&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/name&quot;},
{&quot;string&quot;: &quot;std::error_category::operator==&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::error_category&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::error_category::operator!=&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::error_category&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::error_category::operator&lt;&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::error_category&quot;,
&quot;string&quot;: &quot;operator&lt;&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::error_category::~error_category&quot;,
&quot;target&quot;: &quot;cpp/error/error_category/~error_category&quot;},
{&quot;string&quot;: &quot;std::error_code&quot;,
&quot;target&quot;: &quot;cpp/error/error_code&quot;},
{&quot;string&quot;: &quot;std::error_code::assign&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/assign&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/assign&quot;},
{&quot;string&quot;: &quot;std::error_code::category&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/category&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;category&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/category&quot;},
{&quot;string&quot;: &quot;std::error_code::clear&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/clear&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/clear&quot;},
{&quot;string&quot;: &quot;std::error_code::default_error_condition&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/default_error_condition&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;default_error_condition&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/default_error_condition&quot;},
{&quot;string&quot;: &quot;std::error_code::error_code&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/error_code&quot;},
{&quot;string&quot;: &quot;std::is_error_code_enum&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/is_error_code_enum&quot;},
{&quot;string&quot;: &quot;std::is_error_code_enum_v&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/is_error_code_enum&quot;},
{&quot;string&quot;: &quot;std::error_code::message&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/message&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;message&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/message&quot;},
{&quot;string&quot;: &quot;std::error_code::operator=&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator=&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator=&quot;},
{&quot;string&quot;: &quot;std::error_code::operator bool&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator_bool&quot;},
{&quot;string&quot;: &quot;operator==(std::error_code)&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::error_code)&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::error_code)&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::error_code)&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::error_code::value&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/value&quot;},
{&quot;on_group&quot;: &quot;std::error_code&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/error/error_code/value&quot;},
{&quot;string&quot;: &quot;std::error_condition&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition&quot;},
{&quot;string&quot;: &quot;std::error_condition::assign&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/assign&quot;},
{&quot;on_group&quot;: &quot;std::error_condition&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/assign&quot;},
{&quot;string&quot;: &quot;std::error_condition::category&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/category&quot;},
{&quot;on_group&quot;: &quot;std::error_condition&quot;,
&quot;string&quot;: &quot;category&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/category&quot;},
{&quot;string&quot;: &quot;std::error_condition::clear&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/clear&quot;},
{&quot;on_group&quot;: &quot;std::error_condition&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/clear&quot;},
{&quot;string&quot;: &quot;std::error_condition::error_condition&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/error_condition&quot;},
{&quot;string&quot;: &quot;std::is_error_condition_enum&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/is_error_condition_enum&quot;},
{&quot;string&quot;: &quot;std::is_error_condition_enum_v&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/is_error_condition_enum&quot;},
{&quot;string&quot;: &quot;std::error_condition::message&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/message&quot;},
{&quot;on_group&quot;: &quot;std::error_condition&quot;,
&quot;string&quot;: &quot;message&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/message&quot;},
{&quot;string&quot;: &quot;std::error_condition::operator=&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/operator=&quot;},
{&quot;on_group&quot;: &quot;std::error_condition&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/operator=&quot;},
{&quot;string&quot;: &quot;std::error_condition::operator bool&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::error_condition&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/operator_bool&quot;},
{&quot;string&quot;: &quot;operator==(std::error_condition)&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::error_condition)&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::error_condition)&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::error_condition::value&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/value&quot;},
{&quot;on_group&quot;: &quot;std::error_condition&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/error/error_condition/value&quot;},
{&quot;string&quot;: &quot;std::exception&quot;,
&quot;target&quot;: &quot;cpp/error/exception&quot;},
{&quot;string&quot;: &quot;std::exception::exception&quot;,
&quot;target&quot;: &quot;cpp/error/exception/exception&quot;},
{&quot;string&quot;: &quot;std::exception::operator=&quot;,
&quot;target&quot;: &quot;cpp/error/exception/operator=&quot;},
{&quot;on_group&quot;: &quot;std::exception&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/error/exception/operator=&quot;},
{&quot;string&quot;: &quot;std::bad_typeid::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::bad_typeid&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::bad_cast::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::bad_cast&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::bad_alloc::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::bad_alloc&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::bad_array_new_length::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::bad_array_new_length&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::bad_array_length::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::bad_array_length&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::bad_weak_ptr::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::bad_weak_ptr&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::exception::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::exception&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::logic_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::logic_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::domain_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::domain_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::length_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::length_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::out_of_range::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::out_of_range&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::invalid_argument::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::invalid_argument&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::runtime_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::runtime_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::range_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::range_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::overflow_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::overflow_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::underflow_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::underflow_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::system_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::system_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::bad_function_call::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::bad_function_call&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::ios_base::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::ios_base::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_ios::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_istream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::istream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::istream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::ostream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::ostream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::iostream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::iostream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::ifstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::ifstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::ofstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::ofstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::fstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::fstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::istringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::istringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::ostringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::ostringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::stringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::stringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wistream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wistream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wostream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wostream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wiostream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wiostream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wifstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wifstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wofstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wofstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wfstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wfstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wistringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wistringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wostringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wostringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::wstringstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::wstringstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::istrstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::istrstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::ostrstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::strstream::failure::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::strstream::failure&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::regex_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::regex_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::future_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::future_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::experimental::bad_optional_access::what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;on_group&quot;: &quot;std::experimental::bad_optional_access&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/exception/what&quot;},
{&quot;string&quot;: &quot;std::exception::~exception&quot;,
&quot;target&quot;: &quot;cpp/error/exception/~exception&quot;},
{&quot;string&quot;: &quot;std::exception_ptr&quot;,
&quot;target&quot;: &quot;cpp/error/exception_ptr&quot;},
{&quot;string&quot;: &quot;std::generic_category&quot;,
&quot;target&quot;: &quot;cpp/error/generic_category&quot;},
{&quot;string&quot;: &quot;std::get_terminate&quot;,
&quot;target&quot;: &quot;cpp/error/get_terminate&quot;},
{&quot;string&quot;: &quot;std::get_unexpected&quot;,
&quot;target&quot;: &quot;cpp/error/get_unexpected&quot;},
{&quot;string&quot;: &quot;std::invalid_argument&quot;,
&quot;target&quot;: &quot;cpp/error/invalid_argument&quot;},
{&quot;string&quot;: &quot;std::invalid_argument::invalid_argument&quot;,
&quot;target&quot;: &quot;cpp/error/invalid_argument&quot;},
{&quot;string&quot;: &quot;std::length_error&quot;,
&quot;target&quot;: &quot;cpp/error/length_error&quot;},
{&quot;string&quot;: &quot;std::length_error::length_error&quot;,
&quot;target&quot;: &quot;cpp/error/length_error&quot;},
{&quot;string&quot;: &quot;std::logic_error&quot;,
&quot;target&quot;: &quot;cpp/error/logic_error&quot;},
{&quot;string&quot;: &quot;std::logic_error::logic_error&quot;,
&quot;target&quot;: &quot;cpp/error/logic_error&quot;},
{&quot;string&quot;: &quot;std::make_exception_ptr&quot;,
&quot;target&quot;: &quot;cpp/error/make_exception_ptr&quot;},
{&quot;string&quot;: &quot;std::nested_exception&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception&quot;},
{&quot;string&quot;: &quot;std::nested_exception::nested_exception&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/nested_exception&quot;},
{&quot;string&quot;: &quot;std::nested_exception::nested_ptr&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/nested_ptr&quot;},
{&quot;on_group&quot;: &quot;std::nested_exception&quot;,
&quot;string&quot;: &quot;nested_ptr&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/nested_ptr&quot;},
{&quot;string&quot;: &quot;std::nested_exception::operator=&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/operator=&quot;},
{&quot;on_group&quot;: &quot;std::nested_exception&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/operator=&quot;},
{&quot;string&quot;: &quot;std::nested_exception::rethrow_nested&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/rethrow_nested&quot;},
{&quot;on_group&quot;: &quot;std::nested_exception&quot;,
&quot;string&quot;: &quot;rethrow_nested&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/rethrow_nested&quot;},
{&quot;string&quot;: &quot;std::nested_exception::~nested_exception&quot;,
&quot;target&quot;: &quot;cpp/error/nested_exception/~nested_exception&quot;},
{&quot;string&quot;: &quot;std::out_of_range&quot;,
&quot;target&quot;: &quot;cpp/error/out_of_range&quot;},
{&quot;string&quot;: &quot;std::out_of_range::out_of_range&quot;,
&quot;target&quot;: &quot;cpp/error/out_of_range&quot;},
{&quot;string&quot;: &quot;std::overflow_error&quot;,
&quot;target&quot;: &quot;cpp/error/overflow_error&quot;},
{&quot;string&quot;: &quot;std::overflow_error::overflow_error&quot;,
&quot;target&quot;: &quot;cpp/error/overflow_error&quot;},
{&quot;string&quot;: &quot;std::range_error&quot;,
&quot;target&quot;: &quot;cpp/error/range_error&quot;},
{&quot;string&quot;: &quot;std::range_error::range_error&quot;,
&quot;target&quot;: &quot;cpp/error/range_error&quot;},
{&quot;string&quot;: &quot;std::rethrow_exception&quot;,
&quot;target&quot;: &quot;cpp/error/rethrow_exception&quot;},
{&quot;string&quot;: &quot;std::rethrow_if_nested&quot;,
&quot;target&quot;: &quot;cpp/error/rethrow_if_nested&quot;},
{&quot;string&quot;: &quot;std::runtime_error&quot;,
&quot;target&quot;: &quot;cpp/error/runtime_error&quot;},
{&quot;string&quot;: &quot;std::runtime_error::runtime_error&quot;,
&quot;target&quot;: &quot;cpp/error/runtime_error&quot;},
{&quot;string&quot;: &quot;std::set_terminate&quot;,
&quot;target&quot;: &quot;cpp/error/set_terminate&quot;},
{&quot;string&quot;: &quot;std::set_unexpected&quot;,
&quot;target&quot;: &quot;cpp/error/set_unexpected&quot;},
{&quot;string&quot;: &quot;std::system_category&quot;,
&quot;target&quot;: &quot;cpp/error/system_category&quot;},
{&quot;string&quot;: &quot;std::system_error&quot;,
&quot;target&quot;: &quot;cpp/error/system_error&quot;},
{&quot;string&quot;: &quot;std::system_error::code&quot;,
&quot;target&quot;: &quot;cpp/error/system_error/code&quot;},
{&quot;on_group&quot;: &quot;std::system_error&quot;,
&quot;string&quot;: &quot;code&quot;,
&quot;target&quot;: &quot;cpp/error/system_error/code&quot;},
{&quot;string&quot;: &quot;std::system_error::system_error&quot;,
&quot;target&quot;: &quot;cpp/error/system_error/system_error&quot;},
{&quot;string&quot;: &quot;std::system_error::what&quot;,
&quot;target&quot;: &quot;cpp/error/system_error/what&quot;},
{&quot;on_group&quot;: &quot;std::system_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/error/system_error/what&quot;},
{&quot;string&quot;: &quot;std::terminate&quot;,
&quot;target&quot;: &quot;cpp/error/terminate&quot;},
{&quot;string&quot;: &quot;std::terminate_handler&quot;,
&quot;target&quot;: &quot;cpp/error/terminate_handler&quot;},
{&quot;string&quot;: &quot;std::throw_with_nested&quot;,
&quot;target&quot;: &quot;cpp/error/throw_with_nested&quot;},
{&quot;string&quot;: &quot;std::uncaught_exception&quot;,
&quot;target&quot;: &quot;cpp/error/uncaught_exception&quot;},
{&quot;string&quot;: &quot;std::underflow_error&quot;,
&quot;target&quot;: &quot;cpp/error/underflow_error&quot;},
{&quot;string&quot;: &quot;std::underflow_error::underflow_error&quot;,
&quot;target&quot;: &quot;cpp/error/underflow_error&quot;},
{&quot;string&quot;: &quot;std::unexpected&quot;,
&quot;target&quot;: &quot;cpp/error/unexpected&quot;},
{&quot;string&quot;: &quot;std::unexpected_handler&quot;,
&quot;target&quot;: &quot;cpp/error/unexpected_handler&quot;},
{&quot;string&quot;: &quot;std::experimental::any&quot;,
&quot;target&quot;: &quot;cpp/experimental/any&quot;},
{&quot;string&quot;: &quot;std::experimental::any::any&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/any&quot;},
{&quot;string&quot;: &quot;std::experimental::any_cast&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/any_cast&quot;},
{&quot;string&quot;: &quot;std::experimental::any::clear&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/clear&quot;},
{&quot;on_group&quot;: &quot;std::experimental::any&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/clear&quot;},
{&quot;string&quot;: &quot;std::experimental::any::empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/empty&quot;},
{&quot;on_group&quot;: &quot;std::experimental::any&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/empty&quot;},
{&quot;string&quot;: &quot;std::experimental::any::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::any&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::any::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/swap&quot;},
{&quot;on_group&quot;: &quot;std::experimental::any&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::experimental::any)&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/swap2&quot;},
{&quot;string&quot;: &quot;std::experimental::any::type&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::any&quot;,
&quot;string&quot;: &quot;type&quot;,
&quot;target&quot;: &quot;cpp/experimental/any/type&quot;},
{&quot;string&quot;: &quot;std::experimental::apply&quot;,
&quot;target&quot;: &quot;cpp/experimental/apply&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::at&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/at&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::at&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::at&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::at&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::at&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::back&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/back&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::back&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::back&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::back&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::back&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::basic_string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::wstring_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::u16string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::u32string_view&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/compare&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/copy&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;copy&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::copy&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::data&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/data&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;data&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::data&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::data&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::data&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::data&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/empty&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::end&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::end&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::end&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::cend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::end&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::end&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::find&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::find&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::find&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::find&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::find&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_not_of&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_of&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;find_first_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_not_of&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_of&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;find_last_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::front&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/front&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::front&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::front&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::front&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::front&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::experimental::basic_string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::experimental::string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::experimental::wstring_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::experimental::u16string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::experimental::u32string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/max_size&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/npos&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;npos&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::npos&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::experimental::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::experimental::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::experimental::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::experimental::string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::experimental::string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::experimental::string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::experimental::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::experimental::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::experimental::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::experimental::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::experimental::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::experimental::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::experimental::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::experimental::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::experimental::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_prefix&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_suffix&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::rend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::crend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rfind&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;rfind&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::length&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::length&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::length&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::length&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::size&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::length&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/substr&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;substr&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::substr&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/swap&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::to_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;to_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::basic_string_view::operator basic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::basic_string_view&quot;,
&quot;string&quot;: &quot;operator basic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::to_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::string_view::operator basic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::to_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::wstring_view::operator basic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::to_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::u16string_view::operator basic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::to_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::u32string_view::operator basic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/basic_string_view/to_string&quot;},
{&quot;string&quot;: &quot;std::experimental::boyer_moore_horspool_searcher&quot;,
&quot;target&quot;: &quot;cpp/experimental/boyer_moore_horspool_searcher&quot;},
{&quot;string&quot;: &quot;std::experimental::boyer_moore_searcher&quot;,
&quot;target&quot;: &quot;cpp/experimental/boyer_moore_searcher&quot;},
{&quot;string&quot;: &quot;std::experimental::default_searcher&quot;,
&quot;target&quot;: &quot;cpp/experimental/default_searcher&quot;},
{&quot;string&quot;: &quot;std::experimental::erased_type&quot;,
&quot;target&quot;: &quot;cpp/experimental/erased_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::absolute&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/absolute&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::system_complete&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/absolute&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::canonical&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/canonical&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_file&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_file&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::skip_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;skip_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::update_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;update_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::recursive&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;recursive&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::copy_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;copy_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::skip_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;skip_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::directories_only&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;directories_only&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::create_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;create_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_options::create_hard_links&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;create_hard_links&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::copy_symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/copy_symlink&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::create_directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/create_directory&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::create_directories&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/create_directory&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::create_hard_link&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/create_hard_link&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::create_symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/create_symlink&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::create_directory_symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/create_symlink&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::current_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/current_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry::assign&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/assign&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/assign&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry::directory_entry&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/directory_entry&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::experimental::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::experimental::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::experimental::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry::path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry::replace_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/replace_filename&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;replace_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/replace_filename&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry::status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/status&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/status&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_entry::symlink_status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/status&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;symlink_status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_entry/status&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::begin(std::experimental::filesystem::directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::end(std::experimental::filesystem::directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_iterator::directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/directory_iterator&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_iterator::increment&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;increment&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_options&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_options::none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_options::follow_directory_symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;follow_directory_symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_options::overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::directory_options::skip_permission_denied&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;skip_permission_denied&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/directory_options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::equivalent&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/equivalent&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::exists&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/exists&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_size&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_size&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_status::file_status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status/file_status&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_status::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_status&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_status::permissions&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status/permissions&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_status&quot;,
&quot;string&quot;: &quot;permissions&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status/permissions&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_status::type&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status/type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_status&quot;,
&quot;string&quot;: &quot;type&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_status/type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_time_type&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_time_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::not_found&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;not_found&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::regular&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;regular&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::block&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;block&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::character&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;character&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::fifo&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;fifo&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::socket&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;socket&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::file_type::unknown&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::file_type&quot;,
&quot;string&quot;: &quot;unknown&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/file_type&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::filesystem_error&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::filesystem_error::filesystem_error&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error/filesystem_error&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::filesystem_error::path1&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error/path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::filesystem_error&quot;,
&quot;string&quot;: &quot;path1&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error/path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::filesystem_error::path2&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error/path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::filesystem_error&quot;,
&quot;string&quot;: &quot;path2&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error/path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::filesystem_error::what&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error/what&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::filesystem_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/filesystem_error/what&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::hard_link_count&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/hard_link_count&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_block_file&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_block_file&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_character_file&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_character_file&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_directory&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_empty&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_fifo&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_fifo&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_other&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_other&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_regular_file&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_regular_file&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_socket&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_socket&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::is_symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/is_symlink&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::last_write_time&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/last_write_time&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::append&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/append&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;append&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/append&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::operator/=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/append&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;operator/=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/append&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::assign&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/assign&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/assign&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/begin&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::end&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/begin&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::clear&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/clear&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/clear&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/compare&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/compare&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::concat&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/concat&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;concat&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/concat&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::operator+=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/concat&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;operator+=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/concat&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/empty&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/empty&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::extension&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/extension&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;extension&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/extension&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/filename&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/filename&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::generic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::generic_wstring&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_wstring&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::generic_u8string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_u8string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::generic_u16string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_u16string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::generic_u32string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_u32string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_root_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_root_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_root_name&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_root_name&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_root_directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_root_directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_relative_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_relative_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_parent_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_parent_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_stem&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_stem&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::has_extension&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;has_extension&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/has_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::make_preferred&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/make_preferred&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;make_preferred&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/make_preferred&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::c_str&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/native&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;c_str&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/native&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::native&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/native&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;native&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/native&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::operator string_type&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/native&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;operator string_type&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/native&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator/(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/operator_slash&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::parent_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/parent_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;parent_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/parent_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::relative_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/relative_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;relative_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/relative_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::remove_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/remove_filename&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;remove_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/remove_filename&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::replace_extension&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/replace_extension&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;replace_extension&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/replace_extension&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::replace_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/replace_filename&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;replace_filename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/replace_filename&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::root_directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/root_directory&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;root_directory&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/root_directory&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::root_name&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/root_name&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;root_name&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/root_name&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::root_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/root_path&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;root_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/root_path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::stem&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/stem&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;stem&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/stem&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::wstring&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;wstring&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::u8string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;u8string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::u16string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;u16string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::u32string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;u32string&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/string&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/swap&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::path&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/swap&quot;},
{&quot;string&quot;: &quot;swap(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/swap2&quot;},
{&quot;string&quot;: &quot;u8path(std::experimental::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/u8path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::path::~path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/path/~path&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::permissions&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/permissions&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::owner_read&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_read&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::owner_write&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_write&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::owner_exec&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_exec&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::owner_all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::group_read&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_read&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::group_write&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_write&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::group_exec&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_exec&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::group_all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::others_read&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_read&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::others_write&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_write&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::others_exec&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_exec&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::others_all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::set_uid&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;set_uid&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::set_gid&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;set_gid&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::sticky_bit&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;sticky_bit&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::mask&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;mask&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::unknown&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;unknown&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::add_perms&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;add_perms&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::remove_perms&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;remove_perms&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::perms::resolve_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::perms&quot;,
&quot;string&quot;: &quot;resolve_symlinks&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/perms&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::read_symlink&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/read_symlink&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::begin(std::experimental::filesystem::recursive_directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::end(std::experimental::filesystem::recursive_directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::depth&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/depth&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;depth&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/depth&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::disable_recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/disable_recursion_pending&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;disable_recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/disable_recursion_pending&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::increment&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;increment&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::options&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/options&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;options&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/options&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::pop&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/pop&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;pop&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/pop&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/recursion_pending&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/recursion_pending&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::recursive_directory_iterator::recursive_directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/recursive_directory_iterator/recursive_directory_iterator&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::remove&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/remove&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::remove_all&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/remove&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::rename&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/rename&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::resize_file&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/resize_file&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::space&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::space_info&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space_info&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::space_info::capacity&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space_info&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::space_info&quot;,
&quot;string&quot;: &quot;capacity&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space_info&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::space_info::free&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space_info&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::space_info&quot;,
&quot;string&quot;: &quot;free&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space_info&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::space_info::available&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space_info&quot;},
{&quot;on_group&quot;: &quot;std::experimental::filesystem::space_info&quot;,
&quot;string&quot;: &quot;available&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/space_info&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/status&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::symlink_status&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/status&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::status_known&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/status_known&quot;},
{&quot;string&quot;: &quot;std::experimental::filesystem::temp_directory_path&quot;,
&quot;target&quot;: &quot;cpp/experimental/fs/temp_directory_path&quot;},
{&quot;string&quot;: &quot;std::experimental::gcd&quot;,
&quot;target&quot;: &quot;cpp/experimental/gcd&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::get_default_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/get_default_resource&quot;},
{&quot;string&quot;: &quot;std::experimental::invocation_type&quot;,
&quot;target&quot;: &quot;cpp/experimental/invocation_type&quot;},
{&quot;string&quot;: &quot;std::experimental::is_detected&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::is_detected_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::detected_or&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::detected_or_t&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::is_detected_exact&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::is_detected_exact_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::is_detected_convertible&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::is_detected_convertible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/is_detected&quot;},
{&quot;string&quot;: &quot;std::experimental::lcm&quot;,
&quot;target&quot;: &quot;cpp/experimental/lcm&quot;},
{&quot;string&quot;: &quot;std::experimental::make_array&quot;,
&quot;target&quot;: &quot;cpp/experimental/make_array&quot;},
{&quot;string&quot;: &quot;std::experimental::make_boyer_moore_horspool_searcher&quot;,
&quot;target&quot;: &quot;cpp/experimental/make_boyer_moore_horspool_searcher&quot;},
{&quot;string&quot;: &quot;std::experimental::make_boyer_moore_searcher&quot;,
&quot;target&quot;: &quot;cpp/experimental/make_boyer_moore_searcher&quot;},
{&quot;string&quot;: &quot;std::experimental::make_default_searcher&quot;,
&quot;target&quot;: &quot;cpp/experimental/make_default_searcher&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource::allocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/allocate&quot;},
{&quot;on_group&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/allocate&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource::deallocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/deallocate&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource::is_equal&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/is_equal&quot;},
{&quot;on_group&quot;: &quot;std::experimental::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;is_equal&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/is_equal&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::memory_resource::memory_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/memory_resource&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::pmr::memory_resource)&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/operator_eq&quot;},
{&quot;string&quot;: &quot;operator!=(std::experimental::pmr::memory_resource)&quot;,
&quot;target&quot;: &quot;cpp/experimental/memory_resource/operator_eq&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::monotonic_buffer_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/monotonic_buffer_resource&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::new_delete_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/new_delete_resource&quot;},
{&quot;string&quot;: &quot;std::experimental::nonesuch&quot;,
&quot;target&quot;: &quot;cpp/experimental/nonesuch&quot;},
{&quot;string&quot;: &quot;std::experimental::not_fn&quot;,
&quot;target&quot;: &quot;cpp/experimental/not_fn&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::null_memory_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/null_Memory_resource&quot;},
{&quot;string&quot;: &quot;std::experimental::observer_ptr&quot;,
&quot;target&quot;: &quot;cpp/experimental/observer_ptr&quot;},
{&quot;string&quot;: &quot;std::experimental::optional&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::emplace&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/emplace&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/emplace&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::experimental::optional&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/hash&quot;},
{&quot;string&quot;: &quot;std::experimental::make_optional&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/make_optional&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::operator*&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator*&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator*&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator*&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator*&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator=&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator=&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::operator bool&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator_bool&quot;},
{&quot;string&quot;: &quot;operator==(std::experimental::optional)&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::experimental::optional)&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::optional&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/optional&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/swap&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::experimental::optional)&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/swap2&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::value&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/value&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/value&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::value_or&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/value_or&quot;},
{&quot;on_group&quot;: &quot;std::experimental::optional&quot;,
&quot;string&quot;: &quot;value_or&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/value_or&quot;},
{&quot;string&quot;: &quot;std::experimental::optional::~optional&quot;,
&quot;target&quot;: &quot;cpp/experimental/optional/~optional&quot;},
{&quot;string&quot;: &quot;std::experimental::ostream_joiner&quot;,
&quot;target&quot;: &quot;cpp/experimental/ostream_joiner&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::polymorphic_allocator&quot;,
&quot;target&quot;: &quot;cpp/experimental/polymorphic_allocator&quot;},
{&quot;string&quot;: &quot;std::experimental::propagate_const&quot;,
&quot;target&quot;: &quot;cpp/experimental/propagate_const&quot;},
{&quot;string&quot;: &quot;std::experimental::randint&quot;,
&quot;target&quot;: &quot;cpp/experimental/randint&quot;},
{&quot;string&quot;: &quot;std::experimental::raw_invocation_type&quot;,
&quot;target&quot;: &quot;cpp/experimental/raw_invocation_type&quot;},
{&quot;string&quot;: &quot;std::experimental::reseed&quot;,
&quot;target&quot;: &quot;cpp/experimental/reseed&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::resource_adaptor&quot;,
&quot;target&quot;: &quot;cpp/experimental/resource_adaptor&quot;},
{&quot;string&quot;: &quot;std::experimental::sample&quot;,
&quot;target&quot;: &quot;cpp/experimental/sample&quot;},
{&quot;string&quot;: &quot;std::experimental::search&quot;,
&quot;target&quot;: &quot;cpp/experimental/search&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::set_default_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/set_default_resource&quot;},
{&quot;string&quot;: &quot;std::experimental::source_location&quot;,
&quot;target&quot;: &quot;cpp/experimental/source_location&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::synchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/synchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::experimental::to_array&quot;,
&quot;target&quot;: &quot;cpp/experimental/to_array&quot;},
{&quot;string&quot;: &quot;std::experimental::is_void_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_null_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_integral_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_floating_point_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_array_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_lvalue_reference_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_rvalue_reference_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_member_object_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_member_function_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_enum_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_union_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_class_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_function_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_reference_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_arithmetic_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_fundamental_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_object_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_scalar_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_compound_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_member_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_const_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_volatile_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivial_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_copyable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_standard_layout_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_pod_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_literal_type_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_empty_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_polymorphic_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_abstract_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_final_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_signed_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_unsigned_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_default_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_default_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_default_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_copy_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_copy_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_copy_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_move_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_move_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_move_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_copy_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_copy_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_copy_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_move_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_move_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_move_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_destructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_trivially_destructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_nothrow_destructible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::has_virtual_destructor_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::alignment_of_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::rank_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::extent_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_same_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_base_of_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_convertible_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::ratio_equal_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::ratio_not_equal_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::ratio_less_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::ratio_less_equal_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::ratio_greater_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::ratio_greater_equal_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::tuple_size_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::treat_as_floating_point_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_error_code_enum_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_error_condition_enum_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_bind_expression_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::is_placeholder_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::uses_allocator_v&quot;,
&quot;target&quot;: &quot;cpp/experimental/type_trait_variable_templates&quot;},
{&quot;string&quot;: &quot;std::experimental::pmr::unsynchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/experimental/unsynchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::filesystem::absolute&quot;,
&quot;target&quot;: &quot;cpp/filesystem/absolute&quot;},
{&quot;string&quot;: &quot;std::filesystem::system_complete&quot;,
&quot;target&quot;: &quot;cpp/filesystem/absolute&quot;},
{&quot;string&quot;: &quot;std::filesystem::canonical&quot;,
&quot;target&quot;: &quot;cpp/filesystem/canonical&quot;},
{&quot;string&quot;: &quot;std::filesystem::weakly_canonical&quot;,
&quot;target&quot;: &quot;cpp/filesystem/canonical&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_file&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_file&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::skip_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;skip_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::update_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;update_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::recursive&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;recursive&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::copy_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;copy_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::skip_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;skip_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::directories_only&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;directories_only&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::create_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;create_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_options::create_hard_links&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::copy_options&quot;,
&quot;string&quot;: &quot;create_hard_links&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::copy_symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/copy_symlink&quot;},
{&quot;string&quot;: &quot;std::filesystem::create_directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/create_directory&quot;},
{&quot;string&quot;: &quot;std::filesystem::create_directories&quot;,
&quot;target&quot;: &quot;cpp/filesystem/create_directory&quot;},
{&quot;string&quot;: &quot;std::filesystem::create_hard_link&quot;,
&quot;target&quot;: &quot;cpp/filesystem/create_hard_link&quot;},
{&quot;string&quot;: &quot;std::filesystem::create_symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/create_symlink&quot;},
{&quot;string&quot;: &quot;std::filesystem::create_directory_symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/create_symlink&quot;},
{&quot;string&quot;: &quot;std::filesystem::current_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/current_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry::assign&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/assign&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/assign&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry::directory_entry&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/directory_entry&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry::operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator=&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry::path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/path&quot;},
{&quot;string&quot;: &quot;operator const path&amp;(std::filesystem::directory_entry)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/path&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry::replace_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/replace_filename&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;replace_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/replace_filename&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry::status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/status&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/status&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_entry::symlink_status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/status&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_entry&quot;,
&quot;string&quot;: &quot;symlink_status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_entry/status&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator&quot;},
{&quot;string&quot;: &quot;operator==(std::filesystem::directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator&quot;},
{&quot;string&quot;: &quot;operator!=(std::filesystem::directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator&quot;},
{&quot;string&quot;: &quot;std::filesystem::begin(std::filesystem::directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::filesystem::end(std::filesystem::directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_iterator::directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/directory_iterator&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_iterator::increment&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;increment&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/operator=&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_iterator&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_options&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_options::none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_options::follow_directory_symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;follow_directory_symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_options::overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;overwrite_existing&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::directory_options::skip_permission_denied&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::directory_options&quot;,
&quot;string&quot;: &quot;skip_permission_denied&quot;,
&quot;target&quot;: &quot;cpp/filesystem/directory_options&quot;},
{&quot;string&quot;: &quot;std::filesystem::equivalent&quot;,
&quot;target&quot;: &quot;cpp/filesystem/equivalent&quot;},
{&quot;string&quot;: &quot;std::filesystem::exists&quot;,
&quot;target&quot;: &quot;cpp/filesystem/exists&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_size&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_size&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_status::file_status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/file_status&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_status::operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/operator=&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_status&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/operator=&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_status::permissions&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/permissions&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_status&quot;,
&quot;string&quot;: &quot;permissions&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/permissions&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_status::type&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_status&quot;,
&quot;string&quot;: &quot;type&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_status::~file_status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_status/~file_status&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_time_type&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_time_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::not_found&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;not_found&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::regular&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;regular&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::block&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;block&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::character&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;character&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::fifo&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;fifo&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::socket&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;socket&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::file_type::unknown&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::file_type&quot;,
&quot;string&quot;: &quot;unknown&quot;,
&quot;target&quot;: &quot;cpp/filesystem/file_type&quot;},
{&quot;string&quot;: &quot;std::filesystem::filesystem_error&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error&quot;},
{&quot;string&quot;: &quot;std::filesystem::filesystem_error::filesystem_error&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error/filesystem_error&quot;},
{&quot;string&quot;: &quot;std::filesystem::filesystem_error::path1&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error/path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::filesystem_error&quot;,
&quot;string&quot;: &quot;path1&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error/path&quot;},
{&quot;string&quot;: &quot;std::filesystem::filesystem_error::path2&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error/path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::filesystem_error&quot;,
&quot;string&quot;: &quot;path2&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error/path&quot;},
{&quot;string&quot;: &quot;std::filesystem::filesystem_error::what&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error/what&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::filesystem_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/filesystem/filesystem_error/what&quot;},
{&quot;string&quot;: &quot;std::filesystem::hard_link_count&quot;,
&quot;target&quot;: &quot;cpp/filesystem/hard_link_count&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_block_file&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_block_file&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_character_file&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_character_file&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_directory&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_empty&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_empty&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_fifo&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_fifo&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_other&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_other&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_regular_file&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_regular_file&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_socket&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_socket&quot;},
{&quot;string&quot;: &quot;std::filesystem::is_symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/is_symlink&quot;},
{&quot;string&quot;: &quot;std::filesystem::last_write_time&quot;,
&quot;target&quot;: &quot;cpp/filesystem/last_write_time&quot;},
{&quot;string&quot;: &quot;std::filesystem::path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::preferred_separator&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;preferred_separator&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::append&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/append&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;append&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/append&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::operator/=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/append&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;operator/=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/append&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::assign&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/assign&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/assign&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::begin&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/begin&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/begin&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::end&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/begin&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/begin&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::clear&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/clear&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/clear&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::compare&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/compare&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/compare&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::concat&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/concat&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;concat&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/concat&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::operator+=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/concat&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;operator+=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/concat&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::empty&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/empty&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/empty&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::extension&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/extension&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;extension&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/extension&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/filename&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/filename&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::generic_string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::generic_wstring&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_wstring&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::generic_u8string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_u8string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::generic_u16string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_u16string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::generic_u32string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;generic_u32string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/generic_string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_root_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_root_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_root_name&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_root_name&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_root_directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_root_directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_relative_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_relative_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_parent_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_parent_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_stem&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_stem&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::has_extension&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;has_extension&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/has_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::hash_value(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/hash_value&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::is_absolute&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/is_absrel&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;is_absolute&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/is_absrel&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::is_relative&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/is_absrel&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;is_relative&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/is_absrel&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::lexically_normal&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/lexically_normal&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;lexically_normal&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/lexically_normal&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::lexically_proximate&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/lexically_normal&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;lexically_proximate&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/lexically_normal&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::lexically_relative&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/lexically_normal&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;lexically_relative&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/lexically_normal&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::make_preferred&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/make_preferred&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;make_preferred&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/make_preferred&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::c_str&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/native&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;c_str&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/native&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::native&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/native&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;native&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/native&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::operator string_type&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/native&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;operator string_type&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/native&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator=&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator/(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/operator_slash&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::parent_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/parent_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;parent_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/parent_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::relative_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/relative_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;relative_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/relative_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::remove_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/remove_filename&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;remove_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/remove_filename&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::replace_extension&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/replace_extension&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;replace_extension&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/replace_extension&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::replace_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/replace_filename&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;replace_filename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/replace_filename&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::root_directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/root_directory&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;root_directory&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/root_directory&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::root_name&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/root_name&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;root_name&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/root_name&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::root_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/root_path&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;root_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/root_path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::stem&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/stem&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;stem&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/stem&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::wstring&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;wstring&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::u8string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;u8string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::u16string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;u16string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::u32string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;u32string&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/string&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::swap&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/swap&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::path&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::filesystem::path)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/swap2&quot;},
{&quot;string&quot;: &quot;std::filesystem::u8path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/u8path&quot;},
{&quot;string&quot;: &quot;std::filesystem::path::~path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/path/~path&quot;},
{&quot;string&quot;: &quot;std::filesystem::permissions&quot;,
&quot;target&quot;: &quot;cpp/filesystem/permissions&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::owner_read&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_read&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::owner_write&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_write&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::owner_exec&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_exec&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::owner_all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;owner_all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::group_read&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_read&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::group_write&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_write&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::group_exec&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_exec&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::group_all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;group_all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::others_read&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_read&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::others_write&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_write&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::others_exec&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_exec&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::others_all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;others_all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::set_uid&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;set_uid&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::set_gid&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;set_gid&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::sticky_bit&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;sticky_bit&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::mask&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;mask&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::unknown&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;unknown&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::add_perms&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;add_perms&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::remove_perms&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;remove_perms&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::perms::resolve_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::perms&quot;,
&quot;string&quot;: &quot;resolve_symlinks&quot;,
&quot;target&quot;: &quot;cpp/filesystem/perms&quot;},
{&quot;string&quot;: &quot;std::filesystem::read_symlink&quot;,
&quot;target&quot;: &quot;cpp/filesystem/read_symlink&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator&quot;},
{&quot;string&quot;: &quot;operator==(std::filesystem::recursive_directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator&quot;},
{&quot;string&quot;: &quot;operator!=(std::filesystem::recursive_directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator&quot;},
{&quot;string&quot;: &quot;std::filesystem::begin(std::filesystem::recursive_directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::filesystem::end(std::filesystem::recursive_directory_iterator)&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/begin&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::depth&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/depth&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;depth&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/depth&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::disable_recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/disable_recursion_pending&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;disable_recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/disable_recursion_pending&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::increment&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;increment&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/increment&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/increment&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/operator=&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::options&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/options&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;options&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/options&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::pop&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/pop&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;pop&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/pop&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/recursion_pending&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::recursive_directory_iterator&quot;,
&quot;string&quot;: &quot;recursion_pending&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/recursion_pending&quot;},
{&quot;string&quot;: &quot;std::filesystem::recursive_directory_iterator::recursive_directory_iterator&quot;,
&quot;target&quot;: &quot;cpp/filesystem/recursive_directory_iterator/recursive_directory_iterator&quot;},
{&quot;string&quot;: &quot;std::filesystem::relative&quot;,
&quot;target&quot;: &quot;cpp/filesystem/relative&quot;},
{&quot;string&quot;: &quot;std::filesystem::proximate&quot;,
&quot;target&quot;: &quot;cpp/filesystem/relative&quot;},
{&quot;string&quot;: &quot;std::filesystem::remove&quot;,
&quot;target&quot;: &quot;cpp/filesystem/remove&quot;},
{&quot;string&quot;: &quot;std::filesystem::remove_all&quot;,
&quot;target&quot;: &quot;cpp/filesystem/remove&quot;},
{&quot;string&quot;: &quot;std::filesystem::rename&quot;,
&quot;target&quot;: &quot;cpp/filesystem/rename&quot;},
{&quot;string&quot;: &quot;std::filesystem::resize_file&quot;,
&quot;target&quot;: &quot;cpp/filesystem/resize_file&quot;},
{&quot;string&quot;: &quot;std::filesystem::space&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space&quot;},
{&quot;string&quot;: &quot;std::filesystem::space_info&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space_info&quot;},
{&quot;string&quot;: &quot;std::filesystem::space_info::capacity&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space_info&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::space_info&quot;,
&quot;string&quot;: &quot;capacity&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space_info&quot;},
{&quot;string&quot;: &quot;std::filesystem::space_info::free&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space_info&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::space_info&quot;,
&quot;string&quot;: &quot;free&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space_info&quot;},
{&quot;string&quot;: &quot;std::filesystem::space_info::available&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space_info&quot;},
{&quot;on_group&quot;: &quot;std::filesystem::space_info&quot;,
&quot;string&quot;: &quot;available&quot;,
&quot;target&quot;: &quot;cpp/filesystem/space_info&quot;},
{&quot;string&quot;: &quot;std::filesystem::status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/status&quot;},
{&quot;string&quot;: &quot;std::filesystem::symlink_status&quot;,
&quot;target&quot;: &quot;cpp/filesystem/status&quot;},
{&quot;string&quot;: &quot;std::filesystem::status_known&quot;,
&quot;target&quot;: &quot;cpp/filesystem/status_known&quot;},
{&quot;string&quot;: &quot;std::filesystem::temp_directory_path&quot;,
&quot;target&quot;: &quot;cpp/filesystem/temp_directory_path&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::filebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::wfilebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::basic_filebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::filebuf::filebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::wfilebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/close&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/close&quot;},
{&quot;string&quot;: &quot;std::filebuf::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/close&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/close&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/imbue&quot;},
{&quot;string&quot;: &quot;std::filebuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/imbue&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/is_open&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/is_open&quot;},
{&quot;string&quot;: &quot;std::filebuf::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/is_open&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/is_open&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/open&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/open&quot;},
{&quot;string&quot;: &quot;std::filebuf::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/open&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/open&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/operator=&quot;},
{&quot;string&quot;: &quot;std::filebuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/operator=&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/overflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/overflow&quot;},
{&quot;string&quot;: &quot;std::filebuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/overflow&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/overflow&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/pbackfail&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::filebuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekoff&quot;},
{&quot;string&quot;: &quot;std::filebuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekoff&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekoff&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekpos&quot;},
{&quot;string&quot;: &quot;std::filebuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekpos&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/seekpos&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/setbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/setbuf&quot;},
{&quot;string&quot;: &quot;std::filebuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/setbuf&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/setbuf&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/showmanyc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::filebuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/swap&quot;},
{&quot;string&quot;: &quot;std::filebuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/swap&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_filebuf)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::filebuf)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wfilebuf)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/swap2&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/sync&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/sync&quot;},
{&quot;string&quot;: &quot;std::filebuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/sync&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/sync&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/uflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/uflow&quot;},
{&quot;string&quot;: &quot;std::filebuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/uflow&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/uflow&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/underflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/underflow&quot;},
{&quot;string&quot;: &quot;std::filebuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/underflow&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/underflow&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::~basic_filebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/~basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::filebuf::~filebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/~basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::~wfilebuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_filebuf/~basic_filebuf&quot;},
{&quot;string&quot;: &quot;std::basic_fstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream&quot;},
{&quot;string&quot;: &quot;std::fstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream&quot;},
{&quot;string&quot;: &quot;std::wfstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::basic_fstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/basic_fstream&quot;},
{&quot;string&quot;: &quot;std::fstream::fstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/basic_fstream&quot;},
{&quot;string&quot;: &quot;std::wfstream::wfstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/basic_fstream&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/close&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/close&quot;},
{&quot;string&quot;: &quot;std::fstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/close&quot;},
{&quot;string&quot;: &quot;std::wfstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/close&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/is_open&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/is_open&quot;},
{&quot;string&quot;: &quot;std::fstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/is_open&quot;},
{&quot;string&quot;: &quot;std::wfstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/is_open&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/open&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/open&quot;},
{&quot;string&quot;: &quot;std::fstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/open&quot;},
{&quot;string&quot;: &quot;std::wfstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/open&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/operator=&quot;},
{&quot;string&quot;: &quot;std::fstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/operator=&quot;},
{&quot;string&quot;: &quot;std::wfstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::fstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wfstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/swap&quot;},
{&quot;string&quot;: &quot;std::fstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/swap&quot;},
{&quot;string&quot;: &quot;std::wfstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_fstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::fstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wfstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_fstream/swap2&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream&quot;},
{&quot;string&quot;: &quot;std::ifstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream&quot;},
{&quot;string&quot;: &quot;std::wifstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::basic_ifstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/basic_ifstream&quot;},
{&quot;string&quot;: &quot;std::ifstream::ifstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/basic_ifstream&quot;},
{&quot;string&quot;: &quot;std::wifstream::wifstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/basic_ifstream&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/close&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/close&quot;},
{&quot;string&quot;: &quot;std::ifstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/close&quot;},
{&quot;string&quot;: &quot;std::wifstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/close&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/is_open&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/is_open&quot;},
{&quot;string&quot;: &quot;std::ifstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/is_open&quot;},
{&quot;string&quot;: &quot;std::wifstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/is_open&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/open&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/open&quot;},
{&quot;string&quot;: &quot;std::ifstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/open&quot;},
{&quot;string&quot;: &quot;std::wifstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/open&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/operator=&quot;},
{&quot;string&quot;: &quot;std::ifstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/operator=&quot;},
{&quot;string&quot;: &quot;std::wifstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ifstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wifstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/swap&quot;},
{&quot;string&quot;: &quot;std::ifstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/swap&quot;},
{&quot;string&quot;: &quot;std::wifstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_ifstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::ifstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wifstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ifstream/swap2&quot;},
{&quot;string&quot;: &quot;std::basic_ios&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios&quot;},
{&quot;string&quot;: &quot;std::basic_ios::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_istream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::istream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::ostream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::iostream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::ifstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::ofstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::fstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::istringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::ostringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::stringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wistream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wostream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wiostream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wifstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wofstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wfstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wistringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wostringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::wstringstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::istrstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::ostrstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::strstream::bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;bad&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/bad&quot;},
{&quot;string&quot;: &quot;std::basic_ios::basic_ios&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/basic_ios&quot;},
{&quot;string&quot;: &quot;std::basic_ios::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_istream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::istream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::ostream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::iostream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::ifstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::ofstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::fstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::istringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::ostringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::stringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wistream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wostream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wiostream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wifstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wofstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wfstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wistringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wostringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::wstringstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::istrstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::ostrstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::strstream::clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/clear&quot;},
{&quot;string&quot;: &quot;std::basic_ios::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_istream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::istream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::ostream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::iostream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::ifstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::ofstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::fstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::istringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::ostringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::stringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wistream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wostream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wiostream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wifstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wofstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wfstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wistringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wostringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::wstringstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::istrstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::ostrstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::strstream::copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;copyfmt&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/copyfmt&quot;},
{&quot;string&quot;: &quot;std::basic_ios::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_istream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::istream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::ostream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::iostream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::ifstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::ofstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::fstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::istringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::ostringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::stringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wistream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wostream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wiostream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wifstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wofstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wfstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wistringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wostringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::wstringstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::istrstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::ostrstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::strstream::eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/eof&quot;},
{&quot;string&quot;: &quot;std::basic_ios::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_istream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::istream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::ostream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::iostream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::ifstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::ofstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::fstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::istringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::ostringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::stringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wistream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wostream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wiostream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wifstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wofstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wfstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wistringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wostringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::wstringstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::istrstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::ostrstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::strstream::exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;exceptions&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/exceptions&quot;},
{&quot;string&quot;: &quot;std::basic_ios::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_istream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::istream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::ostream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::iostream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::ifstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::ofstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::fstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::istringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::ostringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::stringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wistream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wostream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wiostream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wifstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wofstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wfstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wistringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wostringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::wstringstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::istrstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::ostrstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::strstream::fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;fail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fail&quot;},
{&quot;string&quot;: &quot;std::basic_ios::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_istream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::istream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::ostream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::iostream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::ifstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::ofstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::fstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::istringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::ostringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::stringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wistream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wostream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wiostream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wifstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wofstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wfstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wistringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wostringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::wstringstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::istrstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::ostrstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::strstream::fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;fill&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/fill&quot;},
{&quot;string&quot;: &quot;std::basic_ios::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_istream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::istream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::ostream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::iostream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::ifstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::ofstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::fstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::istringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::ostringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::stringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wistream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wostream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wiostream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wifstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wofstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wfstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wistringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wostringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::wstringstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::istrstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::ostrstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::strstream::good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;good&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/good&quot;},
{&quot;string&quot;: &quot;std::basic_ios::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_istream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::istream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::ostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::iostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::ifstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::ofstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::fstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::istringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::ostringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::stringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wistream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wiostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wifstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wofstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wfstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wistringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wostringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::wstringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::istrstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::ostrstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::strstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ios::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_istream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::istream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::ostream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::iostream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::ifstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::ofstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::fstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::istringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::ostringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::stringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wistream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wostream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wiostream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wifstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wofstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wfstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wistringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wostringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::wstringstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::istrstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::ostrstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::strstream::init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;init&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/init&quot;},
{&quot;string&quot;: &quot;std::basic_ios::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_istream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::istream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::ostream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::iostream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::ifstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::ofstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::fstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::istringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::ostringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::stringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wistream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wostream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wiostream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wifstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wofstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wfstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wistringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wostringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::wstringstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::istrstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::ostrstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::strstream::move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/move&quot;},
{&quot;string&quot;: &quot;std::basic_ios::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_istream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::istream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::ostream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::iostream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::ifstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::ofstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::fstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::istringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::ostringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::stringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wistream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wostream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wiostream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wifstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wofstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wfstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wistringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wostringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::wstringstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::istrstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::ostrstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::strstream::narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/narrow&quot;},
{&quot;string&quot;: &quot;std::basic_ios::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_istream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::istream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::ostream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::iostream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::ifstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::ofstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::fstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::istringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::ostringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::stringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wistream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wostream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wiostream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wifstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wofstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wfstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wistringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wostringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::wstringstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::istrstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::ostrstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::strstream::operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;operator!&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator!&quot;},
{&quot;string&quot;: &quot;std::basic_ios::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_istream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::istream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::ostream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::iostream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::ifstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::ofstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::fstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::istringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::ostringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::stringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wistream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wostream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wiostream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wifstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wofstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wfstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wistringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wostringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::wstringstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::istrstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::ostrstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::strstream::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/operator_bool&quot;},
{&quot;string&quot;: &quot;std::basic_ios::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_istream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::istream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::iostream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ifstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ofstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::fstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::istringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::stringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wistream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wostream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wiostream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wifstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wofstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wfstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wistringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wostringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wstringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::istrstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostrstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::strstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ios::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_istream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::istream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::ostream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::iostream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::ifstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::ofstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::fstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::istringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::ostringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::stringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wistream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wostream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wiostream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wifstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wofstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wfstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wistringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wostringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::wstringstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::istrstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::ostrstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::strstream::rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;rdstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/rdstate&quot;},
{&quot;string&quot;: &quot;std::basic_ios::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_istream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::istream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::iostream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::ifstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::ofstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::fstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::istringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::stringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wistream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wostream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wiostream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wifstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wofstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wfstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wistringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wostringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::wstringstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::istrstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostrstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::strstream::set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;set_rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/set_rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ios::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_istream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::istream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::ostream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::iostream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::ifstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::ofstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::fstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::istringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::ostringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::stringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wistream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wostream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wiostream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wifstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wofstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wfstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wistringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wostringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::wstringstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::istrstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::ostrstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::strstream::setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;setstate&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/setstate&quot;},
{&quot;string&quot;: &quot;std::basic_ios::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_istream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::istream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::ostream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::iostream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::ifstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::ofstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::fstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::istringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::ostringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::stringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wistream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wostream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wiostream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wifstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wofstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wfstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wistringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wostringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::wstringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::istrstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::ostrstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::strstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/swap&quot;},
{&quot;string&quot;: &quot;std::basic_ios::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_istream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::istream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::ostream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::iostream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::ifstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::ofstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::fstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::istringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::ostringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::stringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wistream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wostream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wiostream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wifstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wofstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wfstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wistringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wostringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::wstringstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::istrstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::ostrstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::strstream::tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;tie&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/tie&quot;},
{&quot;string&quot;: &quot;std::basic_ios::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_istream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::istream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::ostream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::iostream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::ifstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::ofstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::fstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::istringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::ostringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::stringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wistream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wostream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wiostream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wifstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wofstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wfstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wistringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wostringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::wstringstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::istrstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::ostrstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::strstream::widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/widen&quot;},
{&quot;string&quot;: &quot;std::basic_ios::~basic_ios&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ios/~basic_ios&quot;},
{&quot;string&quot;: &quot;std::basic_iostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream&quot;},
{&quot;string&quot;: &quot;std::iostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream&quot;},
{&quot;string&quot;: &quot;std::wiostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::basic_iostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream/basic_iostream&quot;},
{&quot;string&quot;: &quot;std::iostream::iostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream/basic_iostream&quot;},
{&quot;string&quot;: &quot;std::wiostream::wiostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream/basic_iostream&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::~basic_iostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream/~basic_iostream&quot;},
{&quot;string&quot;: &quot;std::iostream::~iostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream/~basic_iostream&quot;},
{&quot;string&quot;: &quot;std::wiostream::~wiostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_iostream/~basic_iostream&quot;},
{&quot;string&quot;: &quot;std::basic_istream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream&quot;},
{&quot;string&quot;: &quot;std::istream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream&quot;},
{&quot;string&quot;: &quot;std::wistream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream&quot;},
{&quot;string&quot;: &quot;std::basic_istream::basic_istream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/basic_istream&quot;},
{&quot;string&quot;: &quot;std::istream::istream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/basic_istream&quot;},
{&quot;string&quot;: &quot;std::wistream::wistream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/basic_istream&quot;},
{&quot;string&quot;: &quot;std::basic_istream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::istream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::iostream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::ifstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::fstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::istringstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::stringstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::wistream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::wiostream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::wifstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::wfstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::wistringstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::wstringstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::istrstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::strstream::gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;gcount&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/gcount&quot;},
{&quot;string&quot;: &quot;std::basic_istream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::istream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::iostream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::ifstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::fstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::istringstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::stringstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::wistream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::wiostream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::wifstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::wfstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::wistringstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::wstringstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::istrstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::strstream::get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/get&quot;},
{&quot;string&quot;: &quot;std::basic_istream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::istream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::iostream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::ifstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::fstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::istringstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::stringstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::wistream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::wiostream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::wifstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::wfstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::wistringstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::wstringstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::istrstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::strstream::getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;getline&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/getline&quot;},
{&quot;string&quot;: &quot;std::basic_istream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::istream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::iostream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::ifstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::fstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::istringstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::stringstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::wistream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::wiostream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::wifstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::wfstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::wistringstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::wstringstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::istrstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::strstream::ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;ignore&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/ignore&quot;},
{&quot;string&quot;: &quot;std::basic_istream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::istream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::iostream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::ifstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::fstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::istringstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::stringstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::wistream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::wiostream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::wifstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::wfstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::wistringstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::wstringstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::istrstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;std::strstream::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::basic_istream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt2&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::istream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt2&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::wistream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/operator_gtgt2&quot;},
{&quot;string&quot;: &quot;std::basic_istream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::istream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::iostream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::ifstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::fstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::istringstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::stringstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::wistream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::wiostream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::wifstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::wfstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::wistringstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::wstringstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::istrstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::strstream::peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;peek&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/peek&quot;},
{&quot;string&quot;: &quot;std::basic_istream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::istream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::iostream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::ifstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::fstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::istringstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::stringstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::wistream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::wiostream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::wifstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::wfstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::wistringstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::wstringstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::istrstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::strstream::putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;putback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/putback&quot;},
{&quot;string&quot;: &quot;std::basic_istream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::istream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::iostream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::ifstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::fstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::istringstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::stringstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::wistream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::wiostream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::wifstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::wfstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::wistringstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::wstringstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::istrstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::strstream::read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;read&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/read&quot;},
{&quot;string&quot;: &quot;std::basic_istream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::istream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::iostream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::ifstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::fstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::istringstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::stringstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::wistream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::wiostream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::wifstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::wfstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::wistringstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::wstringstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::istrstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::strstream::readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;readsome&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/readsome&quot;},
{&quot;string&quot;: &quot;std::basic_istream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::istream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::iostream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::ifstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::fstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::istringstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::stringstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::wistream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::wiostream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::wifstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::wfstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::wistringstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::wstringstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::istrstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::strstream::seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;seekg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/seekg&quot;},
{&quot;string&quot;: &quot;std::basic_istream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::istream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::iostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::ifstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::ifstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::ifstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::ifstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::ifstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::fstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::istringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::stringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wistream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wiostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wifstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wifstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wifstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wifstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wifstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wfstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wistringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wistringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wstringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istrstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istrstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istrstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::istrstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::istrstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::strstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_istream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::istream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::iostream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::ifstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::fstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::istringstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::stringstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::wistream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::wiostream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::wifstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::wfstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::wistringstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::istrstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::strstream::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/sync&quot;},
{&quot;string&quot;: &quot;std::basic_istream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::istream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::iostream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::ifstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::fstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::istringstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::stringstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::wistream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::wiostream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::wifstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::wfstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::wistringstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::wstringstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::istrstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::strstream::tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;tellg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/tellg&quot;},
{&quot;string&quot;: &quot;std::basic_istream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::istream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::iostream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::ifstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::fstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::istringstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::stringstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::wistream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::wiostream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::wifstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::wfstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::wistringstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::wstringstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::istrstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::strstream::unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;unget&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/unget&quot;},
{&quot;string&quot;: &quot;std::basic_istream::~basic_istream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/~basic_istream&quot;},
{&quot;string&quot;: &quot;std::istream::~istream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/~basic_istream&quot;},
{&quot;string&quot;: &quot;std::wistream::~wistream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istream/~basic_istream&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream&quot;},
{&quot;string&quot;: &quot;std::istringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream&quot;},
{&quot;string&quot;: &quot;std::wistringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::basic_istringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/basic_istringstream&quot;},
{&quot;string&quot;: &quot;std::istringstream::istringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/basic_istringstream&quot;},
{&quot;string&quot;: &quot;std::wistringstream::wistringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/basic_istringstream&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::istringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::wistringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::istringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wistringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/str&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/str&quot;},
{&quot;string&quot;: &quot;std::istringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/str&quot;},
{&quot;string&quot;: &quot;std::wistringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/str&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/swap&quot;},
{&quot;string&quot;: &quot;std::istringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/swap&quot;},
{&quot;string&quot;: &quot;std::wistringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_istringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::istringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wistringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_istringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream&quot;},
{&quot;string&quot;: &quot;std::ofstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream&quot;},
{&quot;string&quot;: &quot;std::wofstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::basic_ofstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/basic_ofstream&quot;},
{&quot;string&quot;: &quot;std::ofstream::ofstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/basic_ofstream&quot;},
{&quot;string&quot;: &quot;std::wofstream::wofstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/basic_ofstream&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/close&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/close&quot;},
{&quot;string&quot;: &quot;std::ofstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/close&quot;},
{&quot;string&quot;: &quot;std::wofstream::close&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/close&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/is_open&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/is_open&quot;},
{&quot;string&quot;: &quot;std::ofstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/is_open&quot;},
{&quot;string&quot;: &quot;std::wofstream::is_open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/is_open&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/open&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/open&quot;},
{&quot;string&quot;: &quot;std::ofstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/open&quot;},
{&quot;string&quot;: &quot;std::wofstream::open&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/open&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/operator=&quot;},
{&quot;string&quot;: &quot;std::ofstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/operator=&quot;},
{&quot;string&quot;: &quot;std::wofstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ofstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wofstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/swap&quot;},
{&quot;string&quot;: &quot;std::ofstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/swap&quot;},
{&quot;string&quot;: &quot;std::wofstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_ofstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::ofstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wofstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ofstream/swap2&quot;},
{&quot;string&quot;: &quot;std::basic_ostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream&quot;},
{&quot;string&quot;: &quot;std::ostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream&quot;},
{&quot;string&quot;: &quot;std::wostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::basic_ostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/basic_ostream&quot;},
{&quot;string&quot;: &quot;std::ostream::ostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/basic_ostream&quot;},
{&quot;string&quot;: &quot;std::wostream::wostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/basic_ostream&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::ostream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::iostream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::ofstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::fstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::ostringstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::stringstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::wostream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::wiostream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::wofstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::wfstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::wostringstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::wstringstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::ostrstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::strstream::flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;flush&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/flush&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::ostream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::iostream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::ofstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::fstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::ostringstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::stringstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::wostream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::wiostream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::wofstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::wfstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::wostringstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::wstringstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::ostrstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::strstream::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::basic_ostream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt2&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::ostream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt2&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::wostream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/operator_ltlt2&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::ostream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::iostream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::ofstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::fstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::ostringstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::stringstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::wostream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::wiostream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::wofstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::wfstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::wostringstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::wstringstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::ostrstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::strstream::put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/put&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::ostream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::iostream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::ofstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::fstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::ostringstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::stringstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::wostream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::wiostream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::wofstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::wfstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::wostringstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::wstringstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::ostrstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::strstream::seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;seekp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/seekp&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::ostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::iostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::iostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ofstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ofstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ofstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ofstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::ofstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::fstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::fstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::ostringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::stringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::stringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wiostream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wiostream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wofstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wofstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wofstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wofstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wofstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wfstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wfstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wostringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wostringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::wstringstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostrstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostrstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostrstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::ostrstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry::sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry::~sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::strstream::sentry::operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::strstream::sentry&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;sentry&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/sentry&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::ostream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::iostream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::ofstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::fstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::ostringstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::stringstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::wostream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::wiostream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::wofstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::wfstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::wostringstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::wstringstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::ostrstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::strstream::tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;tellp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/tellp&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::ostream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::iostream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::ofstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::fstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::ostringstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::stringstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::wostream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::wiostream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::wofstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::wfstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::wostringstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::wstringstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::ostrstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::strstream::write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;write&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/write&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::~basic_ostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/~basic_ostream&quot;},
{&quot;string&quot;: &quot;std::ostream::~ostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/~basic_ostream&quot;},
{&quot;string&quot;: &quot;std::wostream::~wostream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostream/~basic_ostream&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream&quot;},
{&quot;string&quot;: &quot;std::ostringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream&quot;},
{&quot;string&quot;: &quot;std::wostringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::basic_ostringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/basic_ostringstream&quot;},
{&quot;string&quot;: &quot;std::ostringstream::ostringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/basic_ostringstream&quot;},
{&quot;string&quot;: &quot;std::wostringstream::wostringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/basic_ostringstream&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::ostringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::wostringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wostringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/str&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/str&quot;},
{&quot;string&quot;: &quot;std::ostringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/str&quot;},
{&quot;string&quot;: &quot;std::wostringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/str&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/swap&quot;},
{&quot;string&quot;: &quot;std::ostringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/swap&quot;},
{&quot;string&quot;: &quot;std::wostringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_ostringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::ostringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wostringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_ostringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::streambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::wstreambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::basic_streambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::streambuf::streambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::wstreambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::streambuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::filebuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::stringbuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;gbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gbump&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::streambuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::filebuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::streambuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::streambuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::streambuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::filebuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::filebuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::filebuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::stringbuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::stringbuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::stringbuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;eback&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;gptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;egptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/gptr&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::streambuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::filebuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::stringbuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;in_avail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/in_avail&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/operator=&quot;},
{&quot;string&quot;: &quot;std::streambuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/operator=&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::streambuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::filebuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::stringbuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::streambuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::filebuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::streambuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::filebuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pbump&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pbump&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::streambuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::streambuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::streambuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::filebuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::filebuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::filebuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::stringbuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pbase&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;epptr&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pptr&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::streambuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::streambuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::filebuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::filebuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::stringbuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pubimbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubimbue&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::streambuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::streambuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::filebuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::filebuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::stringbuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pubseekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekoff&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::streambuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::streambuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::filebuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::filebuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::stringbuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pubseekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubseekpos&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::streambuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::streambuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::filebuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::filebuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::stringbuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pubsetbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsetbuf&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::streambuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::streambuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::filebuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::filebuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pubsync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sync&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/pubsync&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::streambuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::filebuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sbumpc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sbumpc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::streambuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::filebuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::stringbuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;setg&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setg&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::streambuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::filebuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::stringbuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;setp&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/setp&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::streambuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::filebuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sgetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::streambuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::streambuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::filebuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::filebuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::stringbuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;xsgetn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sgetn&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::streambuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::filebuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;showmanyc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/showmanyc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::streambuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::filebuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;snextc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/snextc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::streambuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::filebuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sputbackc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputbackc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::streambuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::filebuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sputc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::streambuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::streambuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::filebuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::filebuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::stringbuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;xsputn&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sputn&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::streambuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::filebuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::stringbuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;sungetc&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/sungetc&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::streambuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::filebuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::stringbuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/swap&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::streambuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::filebuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::stringbuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;uflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/uflow&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_streambuf&quot;,
&quot;string&quot;: &quot;underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::basic_filebuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_filebuf&quot;,
&quot;string&quot;: &quot;underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::streambuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::filebuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::stringbuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::wfilebuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::basic_streambuf::~basic_streambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/~basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::streambuf::~streambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/~basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::wstreambuf::~wstreambuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_streambuf/~basic_streambuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf&quot;},
{&quot;string&quot;: &quot;std::stringbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf&quot;},
{&quot;string&quot;: &quot;std::wstringbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::basic_stringbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/basic_stringbuf&quot;},
{&quot;string&quot;: &quot;std::stringbuf::stringbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/basic_stringbuf&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::wstringbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/basic_stringbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/operator=&quot;},
{&quot;string&quot;: &quot;std::stringbuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/operator=&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/overflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/overflow&quot;},
{&quot;string&quot;: &quot;std::stringbuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/overflow&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/overflow&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/pbackfail&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::stringbuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekoff&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekoff&quot;},
{&quot;string&quot;: &quot;std::stringbuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekoff&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekoff&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekpos&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekpos&quot;},
{&quot;string&quot;: &quot;std::stringbuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekpos&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/seekpos&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/setbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/setbuf&quot;},
{&quot;string&quot;: &quot;std::stringbuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/setbuf&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/setbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/str&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/str&quot;},
{&quot;string&quot;: &quot;std::stringbuf::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/str&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/str&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/swap&quot;},
{&quot;string&quot;: &quot;std::stringbuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/swap&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_stringbuf)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::stringbuf)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wstringbuf)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/swap2&quot;},
{&quot;string&quot;: &quot;std::basic_stringbuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/underflow&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringbuf&quot;,
&quot;string&quot;: &quot;underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/underflow&quot;},
{&quot;string&quot;: &quot;std::stringbuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/underflow&quot;},
{&quot;string&quot;: &quot;std::wstringbuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringbuf/underflow&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream&quot;},
{&quot;string&quot;: &quot;std::stringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream&quot;},
{&quot;string&quot;: &quot;std::wstringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::basic_stringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/basic_stringstream&quot;},
{&quot;string&quot;: &quot;std::stringstream::stringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/basic_stringstream&quot;},
{&quot;string&quot;: &quot;std::wstringstream::wstringstream&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/basic_stringstream&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::stringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::wstringstream::operator=&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::stringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wstringstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/str&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/str&quot;},
{&quot;string&quot;: &quot;std::stringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/str&quot;},
{&quot;string&quot;: &quot;std::wstringstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/str&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/swap&quot;},
{&quot;string&quot;: &quot;std::stringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/swap&quot;},
{&quot;string&quot;: &quot;std::wstringstream::swap&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_stringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::stringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wstringstream)&quot;,
&quot;target&quot;: &quot;cpp/io/basic_stringstream/swap2&quot;},
{&quot;string&quot;: &quot;std::FILE&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;std::fpos_t&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;stdin&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;stdout&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;stderr&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;EOF&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;FOPEN_MAX&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;FILENAME_MAX&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;BUFSIZ&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;_IOFBF&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;_IOLBF&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;_IONBF&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;SEEK_SET&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;SEEK_CUR&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;SEEK_END&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;TMP_MAX&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;L_tmpnam&quot;,
&quot;target&quot;: &quot;cpp/io/c&quot;},
{&quot;string&quot;: &quot;std::clearerr&quot;,
&quot;target&quot;: &quot;cpp/io/c/clearerr&quot;},
{&quot;string&quot;: &quot;std::fclose&quot;,
&quot;target&quot;: &quot;cpp/io/c/fclose&quot;},
{&quot;string&quot;: &quot;std::feof&quot;,
&quot;target&quot;: &quot;cpp/io/c/feof&quot;},
{&quot;string&quot;: &quot;std::ferror&quot;,
&quot;target&quot;: &quot;cpp/io/c/ferror&quot;},
{&quot;string&quot;: &quot;std::fflush&quot;,
&quot;target&quot;: &quot;cpp/io/c/fflush&quot;},
{&quot;string&quot;: &quot;std::fgetc&quot;,
&quot;target&quot;: &quot;cpp/io/c/fgetc&quot;},
{&quot;string&quot;: &quot;std::getc&quot;,
&quot;target&quot;: &quot;cpp/io/c/fgetc&quot;},
{&quot;string&quot;: &quot;std::fgetpos&quot;,
&quot;target&quot;: &quot;cpp/io/c/fgetpos&quot;},
{&quot;string&quot;: &quot;std::fgets&quot;,
&quot;target&quot;: &quot;cpp/io/c/fgets&quot;},
{&quot;string&quot;: &quot;std::fgetwc&quot;,
&quot;target&quot;: &quot;cpp/io/c/fgetwc&quot;},
{&quot;string&quot;: &quot;std::fgetws&quot;,
&quot;target&quot;: &quot;cpp/io/c/fgetws&quot;},
{&quot;string&quot;: &quot;std::fopen&quot;,
&quot;target&quot;: &quot;cpp/io/c/fopen&quot;},
{&quot;string&quot;: &quot;std::printf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fprintf&quot;},
{&quot;string&quot;: &quot;std::fprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fprintf&quot;},
{&quot;string&quot;: &quot;std::sprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fprintf&quot;},
{&quot;string&quot;: &quot;std::snprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fprintf&quot;},
{&quot;string&quot;: &quot;std::fputc&quot;,
&quot;target&quot;: &quot;cpp/io/c/fputc&quot;},
{&quot;string&quot;: &quot;std::putc&quot;,
&quot;target&quot;: &quot;cpp/io/c/fputc&quot;},
{&quot;string&quot;: &quot;std::fputs&quot;,
&quot;target&quot;: &quot;cpp/io/c/fputs&quot;},
{&quot;string&quot;: &quot;std::fputwc&quot;,
&quot;target&quot;: &quot;cpp/io/c/fputwc&quot;},
{&quot;string&quot;: &quot;std::fputws&quot;,
&quot;target&quot;: &quot;cpp/io/c/fputws&quot;},
{&quot;string&quot;: &quot;std::fread&quot;,
&quot;target&quot;: &quot;cpp/io/c/fread&quot;},
{&quot;string&quot;: &quot;std::freopen&quot;,
&quot;target&quot;: &quot;cpp/io/c/freopen&quot;},
{&quot;string&quot;: &quot;std::scanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fscanf&quot;},
{&quot;string&quot;: &quot;std::fscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fscanf&quot;},
{&quot;string&quot;: &quot;std::sscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fscanf&quot;},
{&quot;string&quot;: &quot;std::fseek&quot;,
&quot;target&quot;: &quot;cpp/io/c/fseek&quot;},
{&quot;string&quot;: &quot;std::fsetpos&quot;,
&quot;target&quot;: &quot;cpp/io/c/fsetpos&quot;},
{&quot;string&quot;: &quot;std::ftell&quot;,
&quot;target&quot;: &quot;cpp/io/c/ftell&quot;},
{&quot;string&quot;: &quot;std::wprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fwprintf&quot;},
{&quot;string&quot;: &quot;std::fwprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fwprintf&quot;},
{&quot;string&quot;: &quot;std::swprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fwprintf&quot;},
{&quot;string&quot;: &quot;std::fwrite&quot;,
&quot;target&quot;: &quot;cpp/io/c/fwrite&quot;},
{&quot;string&quot;: &quot;std::wscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fwscanf&quot;},
{&quot;string&quot;: &quot;std::fwscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fwscanf&quot;},
{&quot;string&quot;: &quot;std::swscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/fwscanf&quot;},
{&quot;string&quot;: &quot;std::getchar&quot;,
&quot;target&quot;: &quot;cpp/io/c/getchar&quot;},
{&quot;string&quot;: &quot;std::gets&quot;,
&quot;target&quot;: &quot;cpp/io/c/gets&quot;},
{&quot;string&quot;: &quot;std::getwchar&quot;,
&quot;target&quot;: &quot;cpp/io/c/getwchar&quot;},
{&quot;string&quot;: &quot;std::perror&quot;,
&quot;target&quot;: &quot;cpp/io/c/perror&quot;},
{&quot;string&quot;: &quot;std::putchar&quot;,
&quot;target&quot;: &quot;cpp/io/c/putchar&quot;},
{&quot;string&quot;: &quot;std::puts&quot;,
&quot;target&quot;: &quot;cpp/io/c/puts&quot;},
{&quot;string&quot;: &quot;std::putwchar&quot;,
&quot;target&quot;: &quot;cpp/io/c/putwchar&quot;},
{&quot;string&quot;: &quot;std::remove (&lt;cstdio&gt;)&quot;,
&quot;target&quot;: &quot;cpp/io/c/remove&quot;},
{&quot;string&quot;: &quot;std::rename&quot;,
&quot;target&quot;: &quot;cpp/io/c/rename&quot;},
{&quot;string&quot;: &quot;std::rewind&quot;,
&quot;target&quot;: &quot;cpp/io/c/rewind&quot;},
{&quot;string&quot;: &quot;std::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/c/setbuf&quot;},
{&quot;string&quot;: &quot;std::setvbuf&quot;,
&quot;target&quot;: &quot;cpp/io/c/setvbuf&quot;},
{&quot;string&quot;: &quot;std::tmpfile&quot;,
&quot;target&quot;: &quot;cpp/io/c/tmpfile&quot;},
{&quot;string&quot;: &quot;std::tmpnam&quot;,
&quot;target&quot;: &quot;cpp/io/c/tmpnam&quot;},
{&quot;string&quot;: &quot;std::ungetc&quot;,
&quot;target&quot;: &quot;cpp/io/c/ungetc&quot;},
{&quot;string&quot;: &quot;std::ungetwc&quot;,
&quot;target&quot;: &quot;cpp/io/c/ungetwc&quot;},
{&quot;string&quot;: &quot;std::vprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfprintf&quot;},
{&quot;string&quot;: &quot;std::vfprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfprintf&quot;},
{&quot;string&quot;: &quot;std::vsprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfprintf&quot;},
{&quot;string&quot;: &quot;std::vsnprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfprintf&quot;},
{&quot;string&quot;: &quot;std::vscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfscanf&quot;},
{&quot;string&quot;: &quot;std::vfscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfscanf&quot;},
{&quot;string&quot;: &quot;std::vsscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfscanf&quot;},
{&quot;string&quot;: &quot;std::vwprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfwprintf&quot;},
{&quot;string&quot;: &quot;std::vfwprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfwprintf&quot;},
{&quot;string&quot;: &quot;std::vswprintf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfwprintf&quot;},
{&quot;string&quot;: &quot;std::vwscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfwscanf&quot;},
{&quot;string&quot;: &quot;std::vfwscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfwscanf&quot;},
{&quot;string&quot;: &quot;std::vswscanf&quot;,
&quot;target&quot;: &quot;cpp/io/c/vfwscanf&quot;},
{&quot;string&quot;: &quot;std::cerr&quot;,
&quot;target&quot;: &quot;cpp/io/cerr&quot;},
{&quot;string&quot;: &quot;std::wcerr&quot;,
&quot;target&quot;: &quot;cpp/io/cerr&quot;},
{&quot;string&quot;: &quot;std::cin&quot;,
&quot;target&quot;: &quot;cpp/io/cin&quot;},
{&quot;string&quot;: &quot;std::wcin&quot;,
&quot;target&quot;: &quot;cpp/io/cin&quot;},
{&quot;string&quot;: &quot;std::clog&quot;,
&quot;target&quot;: &quot;cpp/io/clog&quot;},
{&quot;string&quot;: &quot;std::wclog&quot;,
&quot;target&quot;: &quot;cpp/io/clog&quot;},
{&quot;string&quot;: &quot;std::cout&quot;,
&quot;target&quot;: &quot;cpp/io/cout&quot;},
{&quot;string&quot;: &quot;std::wcout&quot;,
&quot;target&quot;: &quot;cpp/io/cout&quot;},
{&quot;string&quot;: &quot;std::fpos&quot;,
&quot;target&quot;: &quot;cpp/io/fpos&quot;},
{&quot;string&quot;: &quot;std::streampos&quot;,
&quot;target&quot;: &quot;cpp/io/fpos&quot;},
{&quot;string&quot;: &quot;std::u16streampos&quot;,
&quot;target&quot;: &quot;cpp/io/fpos&quot;},
{&quot;string&quot;: &quot;std::u32streampos&quot;,
&quot;target&quot;: &quot;cpp/io/fpos&quot;},
{&quot;string&quot;: &quot;std::wstreampos&quot;,
&quot;target&quot;: &quot;cpp/io/fpos&quot;},
{&quot;string&quot;: &quot;std::fpos::state&quot;,
&quot;target&quot;: &quot;cpp/io/fpos/state&quot;},
{&quot;on_group&quot;: &quot;std::fpos&quot;,
&quot;string&quot;: &quot;state&quot;,
&quot;target&quot;: &quot;cpp/io/fpos/state&quot;},
{&quot;string&quot;: &quot;std::streampos::state&quot;,
&quot;target&quot;: &quot;cpp/io/fpos/state&quot;},
{&quot;string&quot;: &quot;std::u16streampos::state&quot;,
&quot;target&quot;: &quot;cpp/io/fpos/state&quot;},
{&quot;string&quot;: &quot;std::u32streampos::state&quot;,
&quot;target&quot;: &quot;cpp/io/fpos/state&quot;},
{&quot;string&quot;: &quot;std::wstreampos::state&quot;,
&quot;target&quot;: &quot;cpp/io/fpos/state&quot;},
{&quot;string&quot;: &quot;std::io_errc&quot;,
&quot;target&quot;: &quot;cpp/io/io_errc&quot;},
{&quot;string&quot;: &quot;std::io_errc::stream&quot;,
&quot;target&quot;: &quot;cpp/io/io_errc&quot;},
{&quot;on_group&quot;: &quot;std::io_errc&quot;,
&quot;string&quot;: &quot;stream&quot;,
&quot;target&quot;: &quot;cpp/io/io_errc&quot;},
{&quot;string&quot;: &quot;std::is_error_code_enum&lt;std::io_errc&gt;&quot;,
&quot;target&quot;: &quot;cpp/io/io_errc/is_error_code_enum&quot;},
{&quot;string&quot;: &quot;std::make_error_code(std::io_errc)&quot;,
&quot;target&quot;: &quot;cpp/io/io_errc/make_error_code&quot;},
{&quot;string&quot;: &quot;std::make_error_condition(std::io_errc)&quot;,
&quot;target&quot;: &quot;cpp/io/io_errc/make_error_condition&quot;},
{&quot;string&quot;: &quot;std::ios_base&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base&quot;},
{&quot;string&quot;: &quot;std::ios_base::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_ios::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_istream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::istream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::ostream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::iostream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::ifstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::ofstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::fstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::istringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::ostringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::stringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wistream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wostream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wiostream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wifstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wofstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wfstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wistringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wostringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::wstringstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::istrstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::ostrstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::strstream::Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;Init&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/Init&quot;},
{&quot;string&quot;: &quot;std::ios_base::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ios_base::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ios_base::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ios_base::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ios::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ios::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ios::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ios::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::iostream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::iostream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::iostream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::iostream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ifstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ifstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ifstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ifstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ofstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ofstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ofstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ofstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::fstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::fstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::fstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::fstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::stringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::stringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::stringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::stringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wiostream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wiostream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wiostream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wiostream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wifstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wifstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wifstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wifstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wofstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wofstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wofstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wofstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wfstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wfstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wfstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wfstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wistringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wostringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wstringstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wstringstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wstringstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::wstringstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istrstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istrstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istrstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::istrstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostrstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostrstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostrstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ostrstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::strstream::event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::strstream::erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;erase_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::strstream::imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;imbue_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::strstream::copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;copyfmt_event&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event&quot;},
{&quot;string&quot;: &quot;std::ios_base::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ios::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_istream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::istream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::ostream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::iostream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::ifstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::ofstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::fstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::istringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::ostringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::stringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wistream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wostream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wiostream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wifstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wofstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wfstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wistringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wostringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::wstringstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::istrstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::ostrstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::strstream::event_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/event_callback&quot;},
{&quot;string&quot;: &quot;std::ios_base::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ios_base::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ios::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ios::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_istream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_istream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::istream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::istream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ostream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ostream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::iostream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::iostream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ifstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ifstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ofstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ofstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::fstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::fstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::istringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::istringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ostringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ostringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::stringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::stringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wistream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wistream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wostream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wostream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wiostream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wiostream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wifstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wifstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wofstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wofstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wfstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wfstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wistringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wistringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wostringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wostringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wstringstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::wstringstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::istrstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::istrstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ostrstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ostrstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::strstream::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::strstream::failure::failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;failure&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/failure&quot;},
{&quot;string&quot;: &quot;std::ios_base::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::istream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::ostream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::iostream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::ifstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::ofstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::fstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::istringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::stringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wistream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wostream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wiostream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wifstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wofstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wfstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::istrstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::strstream::flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/flags&quot;},
{&quot;string&quot;: &quot;std::ios_base::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ios::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::iostream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ifstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ofstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::fstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::stringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wiostream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wifstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wofstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wfstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wistringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wostringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::wstringstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::istrstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ostrstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;fmtflags&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;dec&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;oct&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;hex&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;basefield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;left&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;right&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;internal&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;adjustfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;scientific&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;fixed&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;floatfield&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;showbase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;showpos&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;skipws&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::strstream::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/fmtflags&quot;},
{&quot;string&quot;: &quot;std::ios_base::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_ios::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_istream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::istream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::ostream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::iostream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::ifstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::ofstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::fstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::istringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::ostringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::stringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wistream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wostream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wiostream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wifstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wofstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wfstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wistringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wostringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::wstringstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::istrstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::ostrstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::strstream::getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/getloc&quot;},
{&quot;string&quot;: &quot;std::ios_base::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ios::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_istream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::istream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::ostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::iostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::ifstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::ofstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::fstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::istringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::ostringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::stringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wistream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wiostream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wifstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wofstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wfstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wistringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wostringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::wstringstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::istrstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::ostrstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::strstream::imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/imbue&quot;},
{&quot;string&quot;: &quot;std::ios_base::ios_base&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/ios_base&quot;},
{&quot;string&quot;: &quot;std::ios_base::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ios_base::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ios_base::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ios_base::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ios_base::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ios::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ios::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ios::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ios::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ios::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::iostream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::iostream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::iostream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::iostream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::iostream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ifstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ifstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ifstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ifstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ifstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ofstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ofstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ofstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ofstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ofstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::fstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::fstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::fstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::fstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::fstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::stringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::stringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::stringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::stringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::stringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wiostream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wiostream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wiostream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wiostream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wiostream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wifstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wifstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wifstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wifstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wifstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wofstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wofstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wofstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wofstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wofstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wfstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wfstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wfstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wfstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wfstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wistringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wostringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wstringstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wstringstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wstringstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wstringstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::wstringstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istrstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istrstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istrstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istrstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::istrstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostrstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostrstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostrstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostrstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ostrstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::strstream::iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;iostate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::strstream::goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;goodbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::strstream::badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;badbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::strstream::failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;failbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::strstream::eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;eofbit&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iostate&quot;},
{&quot;string&quot;: &quot;std::ios_base::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_ios::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_istream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::istream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::ostream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::iostream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::ifstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::ofstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::fstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::istringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::ostringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::stringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wistream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wostream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wiostream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wifstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wofstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wfstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wistringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wostringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::wstringstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::istrstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::ostrstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::strstream::iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;iword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/iword&quot;},
{&quot;string&quot;: &quot;std::ios_base::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ios_base::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ios_base::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ios_base::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ios_base::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ios_base::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ios_base::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ios::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ios::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ios::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ios::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ios::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ios::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ios::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::iostream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::iostream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::iostream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::iostream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::iostream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::iostream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::iostream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ifstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ifstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ifstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ifstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ifstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ifstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ifstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ofstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ofstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ofstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ofstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ofstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ofstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ofstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::fstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::fstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::fstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::fstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::fstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::fstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::fstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::stringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::stringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::stringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::stringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::stringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::stringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::stringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wiostream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wiostream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wiostream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wiostream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wiostream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wiostream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wiostream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wifstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wifstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wifstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wifstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wifstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wifstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wifstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wofstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wofstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wofstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wofstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wofstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wofstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wofstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wfstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wfstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wfstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wfstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wfstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wfstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wfstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wistringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wostringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wstringstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wstringstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wstringstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wstringstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wstringstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wstringstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::wstringstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istrstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istrstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istrstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istrstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istrstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istrstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::istrstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostrstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostrstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostrstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostrstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostrstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostrstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ostrstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::strstream::openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;openmode&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::strstream::app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;app&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::strstream::binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;binary&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::strstream::in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::strstream::out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::strstream::trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;trunc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::strstream::ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;ate&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/openmode&quot;},
{&quot;string&quot;: &quot;std::ios_base::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_ios::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_istream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::istream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::ostream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::iostream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::ifstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::ofstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::fstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::istringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::ostringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::stringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wistream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wostream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wiostream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wifstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wofstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wfstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wistringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wostringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::wstringstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::istrstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::ostrstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::strstream::precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;precision&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/precision&quot;},
{&quot;string&quot;: &quot;std::ios_base::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_ios::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_istream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::istream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::ostream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::iostream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::ifstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::ofstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::fstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::istringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::ostringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::stringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wistream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wostream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wiostream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wifstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wofstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wfstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wistringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wostringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::wstringstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::istrstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::ostrstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::strstream::pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;pword&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/pword&quot;},
{&quot;string&quot;: &quot;std::ios_base::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ios::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_istream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::istream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::ostream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::iostream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::ifstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::ofstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::fstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::istringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::ostringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::stringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wistream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wostream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wiostream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wifstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wofstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wfstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wistringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wostringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::wstringstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::istrstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::ostrstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::strstream::register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;register_callback&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/register_callback&quot;},
{&quot;string&quot;: &quot;std::ios_base::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ios_base::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ios_base::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ios_base::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ios::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ios::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ios::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ios::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::iostream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::iostream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::iostream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::iostream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ifstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ifstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ifstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ifstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ofstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ofstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ofstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ofstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::fstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::fstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::fstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::fstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::stringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::stringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::stringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::stringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wiostream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wiostream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wiostream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wiostream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wifstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wifstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wifstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wifstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wofstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wofstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wofstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wofstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wfstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wfstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wfstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wfstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wistringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wostringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wstringstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wstringstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wstringstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::wstringstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istrstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istrstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istrstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::istrstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostrstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostrstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostrstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ostrstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::strstream::seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;seekdir&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::strstream::beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;beg&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::strstream::cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;cur&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::strstream::end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/seekdir&quot;},
{&quot;string&quot;: &quot;std::ios_base::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_ios::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_istream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::istream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::ostream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::iostream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::ifstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::ofstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::fstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::istringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::ostringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::stringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wistream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wostream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wiostream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wifstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wofstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wfstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wistringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wostringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::wstringstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::istrstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::ostrstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::strstream::setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;setf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/setf&quot;},
{&quot;string&quot;: &quot;std::ios_base::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_ios::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_istream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::istream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::ostream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::iostream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::ifstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::ofstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::fstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::istringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::ostringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::stringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wistream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wostream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wiostream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wifstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wofstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wfstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wistringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wostringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::wstringstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::istrstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::ostrstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::strstream::sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;sync_with_stdio&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/sync_with_stdio&quot;},
{&quot;string&quot;: &quot;std::ios_base::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_ios::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_istream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::istream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::ostream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::iostream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::ifstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::ofstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::fstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::istringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::ostringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::stringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wistream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wostream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wiostream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wifstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wofstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wfstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wistringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wostringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::wstringstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::istrstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::ostrstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::strstream::unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;unsetf&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/unsetf&quot;},
{&quot;string&quot;: &quot;std::ios_base::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_ios::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_istream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::istream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::ostream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::iostream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::ifstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::ofstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::fstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::istringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::ostringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::stringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wistream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wostream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wiostream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wifstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wofstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wfstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wistringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wostringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::wstringstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::istrstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::ostrstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::strstream::width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;width&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/width&quot;},
{&quot;string&quot;: &quot;std::ios_base::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::ios_base&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_ios::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ios&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_istream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_istream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_ostream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_iostream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_iostream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_ifstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ifstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_ofstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ofstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_fstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_fstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_istringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_istringstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_ostringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_ostringstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::basic_stringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_stringstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::istream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::ostream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::iostream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::ifstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::ofstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::fstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::istringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::ostringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::stringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wistream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wostream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wiostream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wifstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wofstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wfstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wistringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wostringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::wstringstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::istrstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::ostrstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::strstream::xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;xalloc&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/xalloc&quot;},
{&quot;string&quot;: &quot;std::ios_base::~ios_base&quot;,
&quot;target&quot;: &quot;cpp/io/ios_base/~ios_base&quot;},
{&quot;string&quot;: &quot;std::iostream_category&quot;,
&quot;target&quot;: &quot;cpp/io/iostream_category&quot;},
{&quot;string&quot;: &quot;std::istrstream&quot;,
&quot;target&quot;: &quot;cpp/io/istrstream&quot;},
{&quot;string&quot;: &quot;std::istrstream::istrstream&quot;,
&quot;target&quot;: &quot;cpp/io/istrstream/istrstream&quot;},
{&quot;string&quot;: &quot;std::istrstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/istrstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/istrstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::istrstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/istrstream/str&quot;},
{&quot;on_group&quot;: &quot;std::istrstream&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/istrstream/str&quot;},
{&quot;string&quot;: &quot;std::istrstream::~istrstream&quot;,
&quot;target&quot;: &quot;cpp/io/istrstream/~istrstream&quot;},
{&quot;string&quot;: &quot;std::boolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/manip/boolalpha&quot;},
{&quot;string&quot;: &quot;std::noboolalpha&quot;,
&quot;target&quot;: &quot;cpp/io/manip/boolalpha&quot;},
{&quot;string&quot;: &quot;std::endl&quot;,
&quot;target&quot;: &quot;cpp/io/manip/endl&quot;},
{&quot;string&quot;: &quot;std::ends&quot;,
&quot;target&quot;: &quot;cpp/io/manip/ends&quot;},
{&quot;string&quot;: &quot;std::fixed&quot;,
&quot;target&quot;: &quot;cpp/io/manip/fixed&quot;},
{&quot;string&quot;: &quot;std::scientific&quot;,
&quot;target&quot;: &quot;cpp/io/manip/fixed&quot;},
{&quot;string&quot;: &quot;std::hexfloat&quot;,
&quot;target&quot;: &quot;cpp/io/manip/fixed&quot;},
{&quot;string&quot;: &quot;std::defaultfloat&quot;,
&quot;target&quot;: &quot;cpp/io/manip/fixed&quot;},
{&quot;string&quot;: &quot;std::flush&quot;,
&quot;target&quot;: &quot;cpp/io/manip/flush&quot;},
{&quot;string&quot;: &quot;std::get_money&quot;,
&quot;target&quot;: &quot;cpp/io/manip/get_money&quot;},
{&quot;string&quot;: &quot;std::get_time&quot;,
&quot;target&quot;: &quot;cpp/io/manip/get_time&quot;},
{&quot;string&quot;: &quot;std::dec&quot;,
&quot;target&quot;: &quot;cpp/io/manip/hex&quot;},
{&quot;string&quot;: &quot;std::hex&quot;,
&quot;target&quot;: &quot;cpp/io/manip/hex&quot;},
{&quot;string&quot;: &quot;std::oct&quot;,
&quot;target&quot;: &quot;cpp/io/manip/hex&quot;},
{&quot;string&quot;: &quot;std::internal&quot;,
&quot;target&quot;: &quot;cpp/io/manip/left&quot;},
{&quot;string&quot;: &quot;std::left&quot;,
&quot;target&quot;: &quot;cpp/io/manip/left&quot;},
{&quot;string&quot;: &quot;std::right&quot;,
&quot;target&quot;: &quot;cpp/io/manip/left&quot;},
{&quot;string&quot;: &quot;std::put_money&quot;,
&quot;target&quot;: &quot;cpp/io/manip/put_money&quot;},
{&quot;string&quot;: &quot;std::put_time&quot;,
&quot;target&quot;: &quot;cpp/io/manip/put_time&quot;},
{&quot;string&quot;: &quot;std::quoted&quot;,
&quot;target&quot;: &quot;cpp/io/manip/quoted&quot;},
{&quot;string&quot;: &quot;std::resetiosflags&quot;,
&quot;target&quot;: &quot;cpp/io/manip/resetiosflags&quot;},
{&quot;string&quot;: &quot;std::setbase&quot;,
&quot;target&quot;: &quot;cpp/io/manip/setbase&quot;},
{&quot;string&quot;: &quot;std::setfill&quot;,
&quot;target&quot;: &quot;cpp/io/manip/setfill&quot;},
{&quot;string&quot;: &quot;std::setiosflags&quot;,
&quot;target&quot;: &quot;cpp/io/manip/setiosflags&quot;},
{&quot;string&quot;: &quot;std::setprecision&quot;,
&quot;target&quot;: &quot;cpp/io/manip/setprecision&quot;},
{&quot;string&quot;: &quot;std::setw&quot;,
&quot;target&quot;: &quot;cpp/io/manip/setw&quot;},
{&quot;string&quot;: &quot;std::showbase&quot;,
&quot;target&quot;: &quot;cpp/io/manip/showbase&quot;},
{&quot;string&quot;: &quot;std::noshowbase&quot;,
&quot;target&quot;: &quot;cpp/io/manip/showbase&quot;},
{&quot;string&quot;: &quot;std::showpoint&quot;,
&quot;target&quot;: &quot;cpp/io/manip/showpoint&quot;},
{&quot;string&quot;: &quot;std::noshowpoint&quot;,
&quot;target&quot;: &quot;cpp/io/manip/showpoint&quot;},
{&quot;string&quot;: &quot;std::showpos&quot;,
&quot;target&quot;: &quot;cpp/io/manip/showpos&quot;},
{&quot;string&quot;: &quot;std::noshowpos&quot;,
&quot;target&quot;: &quot;cpp/io/manip/showpos&quot;},
{&quot;string&quot;: &quot;std::skipws&quot;,
&quot;target&quot;: &quot;cpp/io/manip/skipws&quot;},
{&quot;string&quot;: &quot;std::noskipws&quot;,
&quot;target&quot;: &quot;cpp/io/manip/skipws&quot;},
{&quot;string&quot;: &quot;std::unitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/manip/unitbuf&quot;},
{&quot;string&quot;: &quot;std::nounitbuf&quot;,
&quot;target&quot;: &quot;cpp/io/manip/unitbuf&quot;},
{&quot;string&quot;: &quot;std::uppercase&quot;,
&quot;target&quot;: &quot;cpp/io/manip/uppercase&quot;},
{&quot;string&quot;: &quot;std::nouppercase&quot;,
&quot;target&quot;: &quot;cpp/io/manip/uppercase&quot;},
{&quot;string&quot;: &quot;std::ws&quot;,
&quot;target&quot;: &quot;cpp/io/manip/ws&quot;},
{&quot;string&quot;: &quot;std::ostrstream&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream&quot;},
{&quot;string&quot;: &quot;std::ostrstream::freeze&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/freeze&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;freeze&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/freeze&quot;},
{&quot;string&quot;: &quot;std::ostrstream::ostrstream&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/ostrstream&quot;},
{&quot;string&quot;: &quot;std::ostrstream::pcount&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/pcount&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;pcount&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/pcount&quot;},
{&quot;string&quot;: &quot;std::ostrstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::ostrstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/str&quot;},
{&quot;on_group&quot;: &quot;std::ostrstream&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/str&quot;},
{&quot;string&quot;: &quot;std::ostrstream::~ostrstream&quot;,
&quot;target&quot;: &quot;cpp/io/ostrstream/~ostrstream&quot;},
{&quot;string&quot;: &quot;std::streamoff&quot;,
&quot;target&quot;: &quot;cpp/io/streamoff&quot;},
{&quot;string&quot;: &quot;std::streamsize&quot;,
&quot;target&quot;: &quot;cpp/io/streamsize&quot;},
{&quot;string&quot;: &quot;std::strstream&quot;,
&quot;target&quot;: &quot;cpp/io/strstream&quot;},
{&quot;string&quot;: &quot;std::strstream::freeze&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/freeze&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;freeze&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/freeze&quot;},
{&quot;string&quot;: &quot;std::strstream::pcount&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/pcount&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;pcount&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/pcount&quot;},
{&quot;string&quot;: &quot;std::strstream::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/rdbuf&quot;},
{&quot;string&quot;: &quot;std::strstream::str&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/str&quot;},
{&quot;on_group&quot;: &quot;std::strstream&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/str&quot;},
{&quot;string&quot;: &quot;std::strstream::strstream&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/strstream&quot;},
{&quot;string&quot;: &quot;std::strstream::~strstream&quot;,
&quot;target&quot;: &quot;cpp/io/strstream/~strstream&quot;},
{&quot;string&quot;: &quot;std::strstreambuf&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::freeze&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/freeze&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;freeze&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/freeze&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::overflow&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/overflow&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;overflow&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/overflow&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/pbackfail&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pbackfail&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/pbackfail&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::pcount&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/pcount&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;pcount&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/pcount&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/seekoff&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;seekoff&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/seekoff&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/seekpos&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;seekpos&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/seekpos&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/setbuf&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;setbuf&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/setbuf&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::str&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/str&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/str&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::strstreambuf&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/strstreambuf&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::underflow&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/underflow&quot;},
{&quot;on_group&quot;: &quot;std::strstreambuf&quot;,
&quot;string&quot;: &quot;underflow&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/underflow&quot;},
{&quot;string&quot;: &quot;std::strstreambuf::~strstreambuf&quot;,
&quot;target&quot;: &quot;cpp/io/strstreambuf/~strstreambuf&quot;},
{&quot;string&quot;: &quot;std::advance&quot;,
&quot;target&quot;: &quot;cpp/iterator/advance&quot;},
{&quot;string&quot;: &quot;std::back_insert_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/back_insert_iterator&quot;},
{&quot;string&quot;: &quot;std::back_inserter&quot;,
&quot;target&quot;: &quot;cpp/iterator/back_inserter&quot;},
{&quot;string&quot;: &quot;std::begin&quot;,
&quot;target&quot;: &quot;cpp/iterator/begin&quot;},
{&quot;string&quot;: &quot;std::cbegin&quot;,
&quot;target&quot;: &quot;cpp/iterator/begin&quot;},
{&quot;string&quot;: &quot;std::data&quot;,
&quot;target&quot;: &quot;cpp/iterator/data&quot;},
{&quot;string&quot;: &quot;std::distance&quot;,
&quot;target&quot;: &quot;cpp/iterator/distance&quot;},
{&quot;string&quot;: &quot;std::empty&quot;,
&quot;target&quot;: &quot;cpp/iterator/empty&quot;},
{&quot;string&quot;: &quot;std::end&quot;,
&quot;target&quot;: &quot;cpp/iterator/end&quot;},
{&quot;string&quot;: &quot;std::cend&quot;,
&quot;target&quot;: &quot;cpp/iterator/end&quot;},
{&quot;string&quot;: &quot;std::front_insert_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/front_insert_iterator&quot;},
{&quot;string&quot;: &quot;std::front_inserter&quot;,
&quot;target&quot;: &quot;cpp/iterator/front_inserter&quot;},
{&quot;string&quot;: &quot;std::insert_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/insert_iterator&quot;},
{&quot;string&quot;: &quot;std::inserter&quot;,
&quot;target&quot;: &quot;cpp/iterator/inserter&quot;},
{&quot;string&quot;: &quot;std::istream_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/istream_iterator&quot;},
{&quot;string&quot;: &quot;std::istreambuf_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/istreambuf_iterator&quot;},
{&quot;string&quot;: &quot;std::iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/iterator&quot;},
{&quot;string&quot;: &quot;std::input_iterator_tag&quot;,
&quot;target&quot;: &quot;cpp/iterator/iterator_tags&quot;},
{&quot;string&quot;: &quot;std::output_iterator_tag&quot;,
&quot;target&quot;: &quot;cpp/iterator/iterator_tags&quot;},
{&quot;string&quot;: &quot;std::forward_iterator_tag&quot;,
&quot;target&quot;: &quot;cpp/iterator/iterator_tags&quot;},
{&quot;string&quot;: &quot;std::bidirectional_iterator_tag&quot;,
&quot;target&quot;: &quot;cpp/iterator/iterator_tags&quot;},
{&quot;string&quot;: &quot;std::random_access_iterator_tag&quot;,
&quot;target&quot;: &quot;cpp/iterator/iterator_tags&quot;},
{&quot;string&quot;: &quot;std::iterator_traits&quot;,
&quot;target&quot;: &quot;cpp/iterator/iterator_traits&quot;},
{&quot;string&quot;: &quot;std::make_move_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/make_move_iterator&quot;},
{&quot;string&quot;: &quot;std::make_reverse_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/make_reverse_iterator&quot;},
{&quot;string&quot;: &quot;std::move_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/move_iterator&quot;},
{&quot;string&quot;: &quot;std::next&quot;,
&quot;target&quot;: &quot;cpp/iterator/next&quot;},
{&quot;string&quot;: &quot;std::ostream_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/ostream_iterator&quot;},
{&quot;string&quot;: &quot;std::ostreambuf_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/ostreambuf_iterator&quot;},
{&quot;string&quot;: &quot;std::prev&quot;,
&quot;target&quot;: &quot;cpp/iterator/prev&quot;},
{&quot;string&quot;: &quot;std::rbegin&quot;,
&quot;target&quot;: &quot;cpp/iterator/rbegin&quot;},
{&quot;string&quot;: &quot;std::crbegin&quot;,
&quot;target&quot;: &quot;cpp/iterator/rbegin&quot;},
{&quot;string&quot;: &quot;std::rend&quot;,
&quot;target&quot;: &quot;cpp/iterator/rend&quot;},
{&quot;string&quot;: &quot;std::crend&quot;,
&quot;target&quot;: &quot;cpp/iterator/rend&quot;},
{&quot;string&quot;: &quot;std::reverse_iterator&quot;,
&quot;target&quot;: &quot;cpp/iterator/reverse_iterator&quot;},
{&quot;string&quot;: &quot;std::size&quot;,
&quot;target&quot;: &quot;cpp/iterator/size&quot;},
{&quot;string&quot;: &quot;LC_ALL&quot;,
&quot;target&quot;: &quot;cpp/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_COLLATE&quot;,
&quot;target&quot;: &quot;cpp/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_CTYPE&quot;,
&quot;target&quot;: &quot;cpp/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_MONETARY&quot;,
&quot;target&quot;: &quot;cpp/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_NUMERIC&quot;,
&quot;target&quot;: &quot;cpp/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;LC_TIME&quot;,
&quot;target&quot;: &quot;cpp/locale/LC_categories&quot;},
{&quot;string&quot;: &quot;std::codecvt&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt::intern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt::extern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt::state_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::intern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::extern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::state_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::intern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::extern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::state_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::intern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::extern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::state_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::intern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::extern_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::state_type&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt::always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt::do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;do_always_noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/always_noconv&quot;},
{&quot;string&quot;: &quot;std::codecvt::codecvt&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt::encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt::do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;do_encoding&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/encoding&quot;},
{&quot;string&quot;: &quot;std::codecvt::in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt::do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;do_in&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/in&quot;},
{&quot;string&quot;: &quot;std::codecvt::length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt::do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;do_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/length&quot;},
{&quot;string&quot;: &quot;std::codecvt::max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt::do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;do_max_length&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/max_length&quot;},
{&quot;string&quot;: &quot;std::codecvt::out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt::do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;do_out&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/out&quot;},
{&quot;string&quot;: &quot;std::codecvt::unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt::do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;do_unshift&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/unshift&quot;},
{&quot;string&quot;: &quot;std::codecvt::~codecvt&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt/~codecvt&quot;},
{&quot;string&quot;: &quot;std::codecvt_base&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_base::result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_base&quot;,
&quot;string&quot;: &quot;result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_base::ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_base&quot;,
&quot;string&quot;: &quot;ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_base::partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_base&quot;,
&quot;string&quot;: &quot;partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_base::error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_base&quot;,
&quot;string&quot;: &quot;error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_base::noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_base&quot;,
&quot;string&quot;: &quot;noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt::result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt::ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt::partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt::error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt::noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt&quot;,
&quot;string&quot;: &quot;noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_byname&quot;,
&quot;string&quot;: &quot;noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8::noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8&quot;,
&quot;string&quot;: &quot;noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16::noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf16&quot;,
&quot;string&quot;: &quot;noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;result&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;ok&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;partial&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;error&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16::noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;on_group&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;string&quot;: &quot;noconv&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_base&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_byname&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::codecvt_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_byname&quot;},
{&quot;string&quot;: &quot;std::codecvt_byname::~codecvt_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_byname&quot;},
{&quot;string&quot;: &quot;std::codecvt_mode&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_mode&quot;},
{&quot;string&quot;: &quot;std::consume_header&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_mode&quot;},
{&quot;string&quot;: &quot;std::generate_header&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_mode&quot;},
{&quot;string&quot;: &quot;std::little_endian&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_mode&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf16&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_utf16&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_utf8&quot;},
{&quot;string&quot;: &quot;std::codecvt_utf8_utf16&quot;,
&quot;target&quot;: &quot;cpp/locale/codecvt_utf8_utf16&quot;},
{&quot;string&quot;: &quot;std::collate&quot;,
&quot;target&quot;: &quot;cpp/locale/collate&quot;},
{&quot;string&quot;: &quot;std::collate::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/collate&quot;},
{&quot;string&quot;: &quot;std::collate::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/collate&quot;},
{&quot;string&quot;: &quot;std::collate_byname::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/collate&quot;},
{&quot;string&quot;: &quot;std::collate_byname::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/collate&quot;},
{&quot;string&quot;: &quot;std::collate::collate&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/collate&quot;},
{&quot;string&quot;: &quot;std::collate::compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;on_group&quot;: &quot;std::collate&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;string&quot;: &quot;std::collate::do_compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;on_group&quot;: &quot;std::collate&quot;,
&quot;string&quot;: &quot;do_compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;string&quot;: &quot;std::collate_byname::compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;on_group&quot;: &quot;std::collate_byname&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;string&quot;: &quot;std::collate_byname::do_compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;on_group&quot;: &quot;std::collate_byname&quot;,
&quot;string&quot;: &quot;do_compare&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/compare&quot;},
{&quot;string&quot;: &quot;std::collate::hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;on_group&quot;: &quot;std::collate&quot;,
&quot;string&quot;: &quot;hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;string&quot;: &quot;std::collate::do_hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;on_group&quot;: &quot;std::collate&quot;,
&quot;string&quot;: &quot;do_hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;string&quot;: &quot;std::collate_byname::hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;on_group&quot;: &quot;std::collate_byname&quot;,
&quot;string&quot;: &quot;hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;string&quot;: &quot;std::collate_byname::do_hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;on_group&quot;: &quot;std::collate_byname&quot;,
&quot;string&quot;: &quot;do_hash&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/hash&quot;},
{&quot;string&quot;: &quot;std::collate::transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;on_group&quot;: &quot;std::collate&quot;,
&quot;string&quot;: &quot;transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;string&quot;: &quot;std::collate::do_transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;on_group&quot;: &quot;std::collate&quot;,
&quot;string&quot;: &quot;do_transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;string&quot;: &quot;std::collate_byname::transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;on_group&quot;: &quot;std::collate_byname&quot;,
&quot;string&quot;: &quot;transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;string&quot;: &quot;std::collate_byname::do_transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;on_group&quot;: &quot;std::collate_byname&quot;,
&quot;string&quot;: &quot;do_transform&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/transform&quot;},
{&quot;string&quot;: &quot;std::collate::~collate&quot;,
&quot;target&quot;: &quot;cpp/locale/collate/~collate&quot;},
{&quot;string&quot;: &quot;std::collate_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/collate_byname&quot;},
{&quot;string&quot;: &quot;std::collate_byname::collate_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/collate_byname&quot;},
{&quot;string&quot;: &quot;std::collate_byname::~collate_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/collate_byname&quot;},
{&quot;string&quot;: &quot;std::ctype&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype&quot;},
{&quot;string&quot;: &quot;std::ctype::ctype&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/ctype&quot;},
{&quot;string&quot;: &quot;std::ctype::is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;string&quot;: &quot;std::ctype::do_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;do_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::do_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;do_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/is&quot;},
{&quot;string&quot;: &quot;std::ctype::narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;string&quot;: &quot;std::ctype::do_narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;do_narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::do_narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;do_narrow&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/narrow&quot;},
{&quot;string&quot;: &quot;std::ctype::scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;string&quot;: &quot;std::ctype::do_scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;do_scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::do_scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;do_scan_is&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/scan_is&quot;},
{&quot;string&quot;: &quot;std::ctype::tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;string&quot;: &quot;std::ctype::do_tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;do_tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::do_tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;do_tolower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/tolower&quot;},
{&quot;string&quot;: &quot;std::ctype::toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;string&quot;: &quot;std::ctype::do_toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;do_toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::do_toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;do_toupper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/toupper&quot;},
{&quot;string&quot;: &quot;std::ctype::widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;string&quot;: &quot;std::ctype::do_widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;do_widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::do_widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;do_widen&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/widen&quot;},
{&quot;string&quot;: &quot;std::ctype::~ctype&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype/~ctype&quot;},
{&quot;string&quot;: &quot;std::ctype_base&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::mask&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::space&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::print&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;print&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::cntrl&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;cntrl&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::upper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;upper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::lower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;lower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::alpha&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;alpha&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::digit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;digit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::punct&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;punct&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::xdigit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;xdigit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::blank&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;blank&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::alnum&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;alnum&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_base::graph&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_base&quot;,
&quot;string&quot;: &quot;graph&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::mask&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::space&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::print&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;print&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::cntrl&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;cntrl&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::upper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;upper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::lower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;lower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::alpha&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;alpha&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::digit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;digit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::punct&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;punct&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::xdigit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;xdigit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::blank&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;blank&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::alnum&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;alnum&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype::graph&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype&quot;,
&quot;string&quot;: &quot;graph&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::mask&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::space&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::print&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;print&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::cntrl&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;cntrl&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::upper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;upper&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::lower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;lower&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::alpha&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;alpha&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::digit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;digit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::punct&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;punct&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::xdigit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;xdigit&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::blank&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;blank&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::alnum&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;alnum&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::graph&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;on_group&quot;: &quot;std::ctype_byname&quot;,
&quot;string&quot;: &quot;graph&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_base&quot;},
{&quot;string&quot;: &quot;std::ctype_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_byname&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::ctype_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_byname&quot;},
{&quot;string&quot;: &quot;std::ctype_byname::~ctype_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/ctype_byname&quot;},
{&quot;string&quot;: &quot;std::has_facet&quot;,
&quot;target&quot;: &quot;cpp/locale/has_facet&quot;},
{&quot;string&quot;: &quot;std::isalnum (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isalnum&quot;},
{&quot;string&quot;: &quot;std::isalpha (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isalpha&quot;},
{&quot;string&quot;: &quot;std::isblank (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isblank&quot;},
{&quot;string&quot;: &quot;std::iscntrl (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/iscntrl&quot;},
{&quot;string&quot;: &quot;std::isdigit (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isdigit&quot;},
{&quot;string&quot;: &quot;std::isgraph (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isgraph&quot;},
{&quot;string&quot;: &quot;std::islower (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/islower&quot;},
{&quot;string&quot;: &quot;std::isprint (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isprint&quot;},
{&quot;string&quot;: &quot;std::ispunct (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/ispunct&quot;},
{&quot;string&quot;: &quot;std::isspace (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isspace&quot;},
{&quot;string&quot;: &quot;std::isupper (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isupper&quot;},
{&quot;string&quot;: &quot;std::isxdigit (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/isxdigit&quot;},
{&quot;string&quot;: &quot;std::lconv&quot;,
&quot;target&quot;: &quot;cpp/locale/lconv&quot;},
{&quot;string&quot;: &quot;std::locale&quot;,
&quot;target&quot;: &quot;cpp/locale/locale&quot;},
{&quot;string&quot;: &quot;std::locale::classic&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/classic&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;classic&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/classic&quot;},
{&quot;string&quot;: &quot;std::locale::combine&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/combine&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;combine&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/combine&quot;},
{&quot;string&quot;: &quot;std::locale::facet&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/facet&quot;},
{&quot;string&quot;: &quot;std::locale::facet::facet&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/facet/facet&quot;},
{&quot;string&quot;: &quot;std::locale::global&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/global&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;global&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/global&quot;},
{&quot;string&quot;: &quot;std::locale::id&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/id&quot;},
{&quot;string&quot;: &quot;std::locale::id::id&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/id/id&quot;},
{&quot;string&quot;: &quot;std::locale::locale&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/locale&quot;},
{&quot;string&quot;: &quot;std::locale::name&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/name&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;name&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/name&quot;},
{&quot;string&quot;: &quot;std::locale::operator()&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator()&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator()&quot;},
{&quot;string&quot;: &quot;std::locale::operator=&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator=&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator=&quot;},
{&quot;string&quot;: &quot;std::locale::operator==&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::locale::operator!=&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::locale&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::locale::~locale&quot;,
&quot;target&quot;: &quot;cpp/locale/locale/~locale&quot;},
{&quot;string&quot;: &quot;std::localeconv&quot;,
&quot;target&quot;: &quot;cpp/locale/localeconv&quot;},
{&quot;string&quot;: &quot;std::messages&quot;,
&quot;target&quot;: &quot;cpp/locale/messages&quot;},
{&quot;string&quot;: &quot;std::messages::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/messages&quot;},
{&quot;string&quot;: &quot;std::messages::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/messages&quot;},
{&quot;string&quot;: &quot;std::messages_byname::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/messages&quot;},
{&quot;string&quot;: &quot;std::messages_byname::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/messages&quot;},
{&quot;string&quot;: &quot;std::messages::close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;on_group&quot;: &quot;std::messages&quot;,
&quot;string&quot;: &quot;close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;string&quot;: &quot;std::messages::do_close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;on_group&quot;: &quot;std::messages&quot;,
&quot;string&quot;: &quot;do_close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;string&quot;: &quot;std::messages_byname::close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;on_group&quot;: &quot;std::messages_byname&quot;,
&quot;string&quot;: &quot;close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;string&quot;: &quot;std::messages_byname::do_close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;on_group&quot;: &quot;std::messages_byname&quot;,
&quot;string&quot;: &quot;do_close&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/close&quot;},
{&quot;string&quot;: &quot;std::messages::get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;on_group&quot;: &quot;std::messages&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;string&quot;: &quot;std::messages::do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;on_group&quot;: &quot;std::messages&quot;,
&quot;string&quot;: &quot;do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;string&quot;: &quot;std::messages_byname::get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;on_group&quot;: &quot;std::messages_byname&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;string&quot;: &quot;std::messages_byname::do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;on_group&quot;: &quot;std::messages_byname&quot;,
&quot;string&quot;: &quot;do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/get&quot;},
{&quot;string&quot;: &quot;std::messages::messages&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/messages&quot;},
{&quot;string&quot;: &quot;std::messages::open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;on_group&quot;: &quot;std::messages&quot;,
&quot;string&quot;: &quot;open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;string&quot;: &quot;std::messages::do_open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;on_group&quot;: &quot;std::messages&quot;,
&quot;string&quot;: &quot;do_open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;string&quot;: &quot;std::messages_byname::open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;on_group&quot;: &quot;std::messages_byname&quot;,
&quot;string&quot;: &quot;open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;string&quot;: &quot;std::messages_byname::do_open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;on_group&quot;: &quot;std::messages_byname&quot;,
&quot;string&quot;: &quot;do_open&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/open&quot;},
{&quot;string&quot;: &quot;std::messages::~messages&quot;,
&quot;target&quot;: &quot;cpp/locale/messages/~messages&quot;},
{&quot;string&quot;: &quot;std::messages_base&quot;,
&quot;target&quot;: &quot;cpp/locale/messages_base&quot;},
{&quot;string&quot;: &quot;std::messages_base::catalog&quot;,
&quot;target&quot;: &quot;cpp/locale/messages_base&quot;},
{&quot;string&quot;: &quot;std::messages::catalog&quot;,
&quot;target&quot;: &quot;cpp/locale/messages_base&quot;},
{&quot;string&quot;: &quot;std::messages_byname::catalog&quot;,
&quot;target&quot;: &quot;cpp/locale/messages_base&quot;},
{&quot;string&quot;: &quot;std::messages_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/messages_byname&quot;},
{&quot;string&quot;: &quot;std::messages_byname::messages_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/messages_byname&quot;},
{&quot;string&quot;: &quot;std::messages_byname::~messages_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/messages_byname&quot;},
{&quot;string&quot;: &quot;std::money_base&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_base::part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_base&quot;,
&quot;string&quot;: &quot;part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_base::none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_base&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_base::space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_base&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_base::symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_base&quot;,
&quot;string&quot;: &quot;symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_base::sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_base&quot;,
&quot;string&quot;: &quot;sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_base::value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_base&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_base::pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_base&quot;,
&quot;string&quot;: &quot;pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get::part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get::none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get::space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get::symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get::sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get::value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get::pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_put::part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_put::none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_put::space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_put::symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_put::sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_put::value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_put::pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct::part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct::none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct::space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct::symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct::sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct::value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct::pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;part&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;space&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;sign&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;pattern&quot;,
&quot;target&quot;: &quot;cpp/locale/money_base&quot;},
{&quot;string&quot;: &quot;std::money_get&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get&quot;},
{&quot;string&quot;: &quot;std::money_get::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get&quot;},
{&quot;string&quot;: &quot;std::money_get::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get&quot;},
{&quot;string&quot;: &quot;std::money_get::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get&quot;},
{&quot;string&quot;: &quot;std::money_get::get&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get/get&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get/get&quot;},
{&quot;string&quot;: &quot;std::money_get::do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get/get&quot;},
{&quot;on_group&quot;: &quot;std::money_get&quot;,
&quot;string&quot;: &quot;do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get/get&quot;},
{&quot;string&quot;: &quot;std::money_get::money_get&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get/money_get&quot;},
{&quot;string&quot;: &quot;std::money_get::~money_get&quot;,
&quot;target&quot;: &quot;cpp/locale/money_get/~money_get&quot;},
{&quot;string&quot;: &quot;std::money_put&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put&quot;},
{&quot;string&quot;: &quot;std::money_put::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put&quot;},
{&quot;string&quot;: &quot;std::money_put::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put&quot;},
{&quot;string&quot;: &quot;std::money_put::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put&quot;},
{&quot;string&quot;: &quot;std::money_put::money_put&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put/money_put&quot;},
{&quot;string&quot;: &quot;std::money_put::put&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put/put&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put/put&quot;},
{&quot;string&quot;: &quot;std::money_put::do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put/put&quot;},
{&quot;on_group&quot;: &quot;std::money_put&quot;,
&quot;string&quot;: &quot;do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put/put&quot;},
{&quot;string&quot;: &quot;std::money_put::~money_put&quot;,
&quot;target&quot;: &quot;cpp/locale/money_put/~money_put&quot;},
{&quot;string&quot;: &quot;std::moneypunct&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct&quot;},
{&quot;string&quot;: &quot;std::moneypunct::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct&quot;},
{&quot;string&quot;: &quot;std::moneypunct::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct&quot;},
{&quot;string&quot;: &quot;std::moneypunct::curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_curr_symbol&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/curr_symbol&quot;},
{&quot;string&quot;: &quot;std::moneypunct::decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::moneypunct::frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_frac_digits&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/frac_digits&quot;},
{&quot;string&quot;: &quot;std::moneypunct::grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/grouping&quot;},
{&quot;string&quot;: &quot;std::moneypunct::moneypunct&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/moneypunct&quot;},
{&quot;string&quot;: &quot;std::moneypunct::pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct::neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_pos_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_neg_format&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/pos_format&quot;},
{&quot;string&quot;: &quot;std::moneypunct::positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct::negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_positive_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_negative_sign&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/positive_sign&quot;},
{&quot;string&quot;: &quot;std::moneypunct::thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::moneypunct::do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct&quot;,
&quot;string&quot;: &quot;do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::moneypunct_byname&quot;,
&quot;string&quot;: &quot;do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::moneypunct::~moneypunct&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct/~moneypunct&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct_byname&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::moneypunct_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct_byname&quot;},
{&quot;string&quot;: &quot;std::moneypunct_byname::~moneypunct_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/moneypunct_byname&quot;},
{&quot;string&quot;: &quot;std::num_get&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get&quot;},
{&quot;string&quot;: &quot;std::num_get::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get&quot;},
{&quot;string&quot;: &quot;std::num_get::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get&quot;},
{&quot;string&quot;: &quot;std::num_get::get&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get/get&quot;},
{&quot;on_group&quot;: &quot;std::num_get&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get/get&quot;},
{&quot;string&quot;: &quot;std::num_get::do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get/get&quot;},
{&quot;on_group&quot;: &quot;std::num_get&quot;,
&quot;string&quot;: &quot;do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get/get&quot;},
{&quot;string&quot;: &quot;std::num_get::num_get&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get/num_get&quot;},
{&quot;string&quot;: &quot;std::num_get::~num_get&quot;,
&quot;target&quot;: &quot;cpp/locale/num_get/~num_get&quot;},
{&quot;string&quot;: &quot;std::num_put&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put&quot;},
{&quot;string&quot;: &quot;std::num_put::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put&quot;},
{&quot;string&quot;: &quot;std::num_put::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put&quot;},
{&quot;string&quot;: &quot;std::num_put::num_put&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put/num_put&quot;},
{&quot;string&quot;: &quot;std::num_put::put&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put/put&quot;},
{&quot;on_group&quot;: &quot;std::num_put&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put/put&quot;},
{&quot;string&quot;: &quot;std::num_put::do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put/put&quot;},
{&quot;on_group&quot;: &quot;std::num_put&quot;,
&quot;string&quot;: &quot;do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put/put&quot;},
{&quot;string&quot;: &quot;std::num_put::~num_put&quot;,
&quot;target&quot;: &quot;cpp/locale/num_put/~num_put&quot;},
{&quot;string&quot;: &quot;std::numpunct&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct&quot;},
{&quot;string&quot;: &quot;std::numpunct::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct&quot;},
{&quot;string&quot;: &quot;std::numpunct::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::string_type&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct&quot;},
{&quot;string&quot;: &quot;std::numpunct::decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::numpunct::do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;do_decimal_point&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/decimal_point&quot;},
{&quot;string&quot;: &quot;std::numpunct::grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;string&quot;: &quot;std::numpunct::do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;do_grouping&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/grouping&quot;},
{&quot;string&quot;: &quot;std::numpunct::numpunct&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/numpunct&quot;},
{&quot;string&quot;: &quot;std::numpunct::thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::numpunct::do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;do_thousands_sep&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/thousands_sep&quot;},
{&quot;string&quot;: &quot;std::numpunct::truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct::falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct::do_truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;do_truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct::do_falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct&quot;,
&quot;string&quot;: &quot;do_falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::do_truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;do_truename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::do_falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;on_group&quot;: &quot;std::numpunct_byname&quot;,
&quot;string&quot;: &quot;do_falsename&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/truefalsename&quot;},
{&quot;string&quot;: &quot;std::numpunct::~numpunct&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct/~numpunct&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct_byname&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::numpunct_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct_byname&quot;},
{&quot;string&quot;: &quot;std::numpunct_byname::~numpunct_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/numpunct_byname&quot;},
{&quot;string&quot;: &quot;std::setlocale&quot;,
&quot;target&quot;: &quot;cpp/locale/setlocale&quot;},
{&quot;string&quot;: &quot;std::time_base&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_base::dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_base&quot;,
&quot;string&quot;: &quot;dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_base::no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_base&quot;,
&quot;string&quot;: &quot;no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_base::dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_base&quot;,
&quot;string&quot;: &quot;dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_base::mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_base&quot;,
&quot;string&quot;: &quot;mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_base::ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_base&quot;,
&quot;string&quot;: &quot;ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_base::ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_base&quot;,
&quot;string&quot;: &quot;ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get::dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get::no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get::dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get::mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get::ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get::ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put::dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put::no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put::dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put::mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put::ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put::ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;dateorder&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;no_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;dmy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;mdy&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;ymd&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;ydm&quot;,
&quot;target&quot;: &quot;cpp/locale/time_base&quot;},
{&quot;string&quot;: &quot;std::time_get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get&quot;},
{&quot;string&quot;: &quot;std::time_get::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get&quot;},
{&quot;string&quot;: &quot;std::time_get::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get&quot;},
{&quot;string&quot;: &quot;std::time_get::date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;string&quot;: &quot;std::time_get::do_date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;do_date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::do_date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;do_date_order&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/date_order&quot;},
{&quot;string&quot;: &quot;std::time_get::get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;string&quot;: &quot;std::time_get::do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;do_get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get&quot;},
{&quot;string&quot;: &quot;std::time_get::get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;string&quot;: &quot;std::time_get::do_get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;do_get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::do_get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;do_get_date&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_date&quot;},
{&quot;string&quot;: &quot;std::time_get::get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;string&quot;: &quot;std::time_get::do_get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;do_get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::do_get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;do_get_monthname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_monthname&quot;},
{&quot;string&quot;: &quot;std::time_get::get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;string&quot;: &quot;std::time_get::do_get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;do_get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::do_get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;do_get_time&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_time&quot;},
{&quot;string&quot;: &quot;std::time_get::get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;string&quot;: &quot;std::time_get::do_get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;do_get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::do_get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;do_get_weekday&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_weekday&quot;},
{&quot;string&quot;: &quot;std::time_get::get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;string&quot;: &quot;std::time_get::do_get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;on_group&quot;: &quot;std::time_get&quot;,
&quot;string&quot;: &quot;do_get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::do_get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;on_group&quot;: &quot;std::time_get_byname&quot;,
&quot;string&quot;: &quot;do_get_year&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/get_year&quot;},
{&quot;string&quot;: &quot;std::time_get::time_get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/time_get&quot;},
{&quot;string&quot;: &quot;std::time_get::~time_get&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get/~time_get&quot;},
{&quot;string&quot;: &quot;std::time_get_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get_byname&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::time_get_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get_byname&quot;},
{&quot;string&quot;: &quot;std::time_get_byname::~time_get_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_get_byname&quot;},
{&quot;string&quot;: &quot;std::time_put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put&quot;},
{&quot;string&quot;: &quot;std::time_put::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put&quot;},
{&quot;string&quot;: &quot;std::time_put::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::char_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::iter_type&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put&quot;},
{&quot;string&quot;: &quot;std::time_put::put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;string&quot;: &quot;std::time_put::do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;on_group&quot;: &quot;std::time_put&quot;,
&quot;string&quot;: &quot;do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;on_group&quot;: &quot;std::time_put_byname&quot;,
&quot;string&quot;: &quot;do_put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/put&quot;},
{&quot;string&quot;: &quot;std::time_put::time_put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/time_put&quot;},
{&quot;string&quot;: &quot;std::time_put::~time_put&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put/~time_put&quot;},
{&quot;string&quot;: &quot;std::time_put_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put_byname&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::time_put_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put_byname&quot;},
{&quot;string&quot;: &quot;std::time_put_byname::~time_put_byname&quot;,
&quot;target&quot;: &quot;cpp/locale/time_put_byname&quot;},
{&quot;string&quot;: &quot;std::tolower (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/tolower&quot;},
{&quot;string&quot;: &quot;std::toupper (&lt;clocale&gt;)&quot;,
&quot;target&quot;: &quot;cpp/locale/toupper&quot;},
{&quot;string&quot;: &quot;std::use_facet&quot;,
&quot;target&quot;: &quot;cpp/locale/use_facet&quot;},
{&quot;string&quot;: &quot;std::wbuffer_convert&quot;,
&quot;target&quot;: &quot;cpp/locale/wbuffer_convert&quot;},
{&quot;string&quot;: &quot;std::wbuffer_convert::rdbuf&quot;,
&quot;target&quot;: &quot;cpp/locale/wbuffer_convert/rdbuf&quot;},
{&quot;on_group&quot;: &quot;std::wbuffer_convert&quot;,
&quot;string&quot;: &quot;rdbuf&quot;,
&quot;target&quot;: &quot;cpp/locale/wbuffer_convert/rdbuf&quot;},
{&quot;string&quot;: &quot;std::wbuffer_convert::state&quot;,
&quot;target&quot;: &quot;cpp/locale/wbuffer_convert/state&quot;},
{&quot;on_group&quot;: &quot;std::wbuffer_convert&quot;,
&quot;string&quot;: &quot;state&quot;,
&quot;target&quot;: &quot;cpp/locale/wbuffer_convert/state&quot;},
{&quot;string&quot;: &quot;std::wbuffer_convert::wbuffer_convert&quot;,
&quot;target&quot;: &quot;cpp/locale/wbuffer_convert/wbuffer_convert&quot;},
{&quot;string&quot;: &quot;std::wbuffer_convert::~wbuffer_convert&quot;,
&quot;target&quot;: &quot;cpp/locale/wbuffer_convert/~wbuffer_convert&quot;},
{&quot;string&quot;: &quot;std::wstring_convert&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert&quot;},
{&quot;string&quot;: &quot;std::wstring_convert::converted&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/converted&quot;},
{&quot;on_group&quot;: &quot;std::wstring_convert&quot;,
&quot;string&quot;: &quot;converted&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/converted&quot;},
{&quot;string&quot;: &quot;std::wstring_convert::from_bytes&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/from_bytes&quot;},
{&quot;on_group&quot;: &quot;std::wstring_convert&quot;,
&quot;string&quot;: &quot;from_bytes&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/from_bytes&quot;},
{&quot;string&quot;: &quot;std::wstring_convert::state&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/state&quot;},
{&quot;on_group&quot;: &quot;std::wstring_convert&quot;,
&quot;string&quot;: &quot;state&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/state&quot;},
{&quot;string&quot;: &quot;std::wstring_convert::to_bytes&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/to_bytes&quot;},
{&quot;on_group&quot;: &quot;std::wstring_convert&quot;,
&quot;string&quot;: &quot;to_bytes&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/to_bytes&quot;},
{&quot;string&quot;: &quot;std::wstring_convert::wstring_convert&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/wstring_convert&quot;},
{&quot;string&quot;: &quot;std::wstring_convert::~wstring_convert&quot;,
&quot;target&quot;: &quot;cpp/locale/wstring_convert/~wstring_convert&quot;},
{&quot;string&quot;: &quot;std::addressof&quot;,
&quot;target&quot;: &quot;cpp/memory/addressof&quot;},
{&quot;string&quot;: &quot;std::align&quot;,
&quot;target&quot;: &quot;cpp/memory/align&quot;},
{&quot;string&quot;: &quot;std::allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator&quot;},
{&quot;string&quot;: &quot;std::allocator::address&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/address&quot;},
{&quot;on_group&quot;: &quot;std::allocator&quot;,
&quot;string&quot;: &quot;address&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/address&quot;},
{&quot;string&quot;: &quot;std::allocator::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/allocate&quot;},
{&quot;on_group&quot;: &quot;std::allocator&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/allocate&quot;},
{&quot;string&quot;: &quot;std::allocator::allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/allocator&quot;},
{&quot;string&quot;: &quot;std::allocator::construct&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/construct&quot;},
{&quot;on_group&quot;: &quot;std::allocator&quot;,
&quot;string&quot;: &quot;construct&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/construct&quot;},
{&quot;string&quot;: &quot;std::allocator::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::allocator&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/deallocate&quot;},
{&quot;string&quot;: &quot;std::allocator::destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/destroy&quot;},
{&quot;on_group&quot;: &quot;std::allocator&quot;,
&quot;string&quot;: &quot;destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/destroy&quot;},
{&quot;string&quot;: &quot;std::allocator::max_size&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/max_size&quot;},
{&quot;on_group&quot;: &quot;std::allocator&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/max_size&quot;},
{&quot;string&quot;: &quot;operator==(std::allocator)&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::allocator)&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::allocator::~allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator/~allocator&quot;},
{&quot;string&quot;: &quot;std::allocator_arg&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_arg&quot;},
{&quot;string&quot;: &quot;std::allocator_arg_t&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_arg_t&quot;},
{&quot;string&quot;: &quot;std::allocator_traits&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits&quot;},
{&quot;string&quot;: &quot;std::allocator_traits::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/allocate&quot;},
{&quot;on_group&quot;: &quot;std::allocator_traits&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/allocate&quot;},
{&quot;string&quot;: &quot;std::allocator_traits::construct&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/construct&quot;},
{&quot;on_group&quot;: &quot;std::allocator_traits&quot;,
&quot;string&quot;: &quot;construct&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/construct&quot;},
{&quot;string&quot;: &quot;std::allocator_traits::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::allocator_traits&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/deallocate&quot;},
{&quot;string&quot;: &quot;std::allocator_traits::destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/destroy&quot;},
{&quot;on_group&quot;: &quot;std::allocator_traits&quot;,
&quot;string&quot;: &quot;destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/destroy&quot;},
{&quot;string&quot;: &quot;std::allocator_traits::max_size&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/max_size&quot;},
{&quot;on_group&quot;: &quot;std::allocator_traits&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/max_size&quot;},
{&quot;string&quot;: &quot;std::allocator_traits::select_on_container_copy_construction&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/select_on_container_copy_construction&quot;},
{&quot;on_group&quot;: &quot;std::allocator_traits&quot;,
&quot;string&quot;: &quot;select_on_container_copy_construction&quot;,
&quot;target&quot;: &quot;cpp/memory/allocator_traits/select_on_container_copy_construction&quot;},
{&quot;string&quot;: &quot;std::auto_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::auto_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/auto_ptr&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::get&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/get&quot;},
{&quot;on_group&quot;: &quot;std::auto_ptr&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/get&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator*&quot;},
{&quot;on_group&quot;: &quot;std::auto_ptr&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator*&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator*&quot;},
{&quot;on_group&quot;: &quot;std::auto_ptr&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator*&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator=&quot;},
{&quot;on_group&quot;: &quot;std::auto_ptr&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator=&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::operator auto_ptr&lt;Y&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator_auto_ptr&quot;},
{&quot;on_group&quot;: &quot;std::auto_ptr&quot;,
&quot;string&quot;: &quot;operator auto_ptr&lt;Y&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/operator_auto_ptr&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::release&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/release&quot;},
{&quot;on_group&quot;: &quot;std::auto_ptr&quot;,
&quot;string&quot;: &quot;release&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/release&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::reset&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/reset&quot;},
{&quot;on_group&quot;: &quot;std::auto_ptr&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/reset&quot;},
{&quot;string&quot;: &quot;std::auto_ptr::~auto_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/auto_ptr/~auto_ptr&quot;},
{&quot;string&quot;: &quot;std::bad_weak_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/bad_weak_ptr&quot;},
{&quot;string&quot;: &quot;std::bad_weak_ptr::what&quot;,
&quot;target&quot;: &quot;cpp/memory/bad_weak_ptr&quot;},
{&quot;on_group&quot;: &quot;std::bad_weak_ptr&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/memory/bad_weak_ptr&quot;},
{&quot;string&quot;: &quot;std::bad_weak_ptr::bad_weak_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/bad_weak_ptr/bad_weak_ptr&quot;},
{&quot;string&quot;: &quot;std::aligned_alloc&quot;,
&quot;target&quot;: &quot;cpp/memory/c/aligned_alloc&quot;},
{&quot;string&quot;: &quot;std::calloc&quot;,
&quot;target&quot;: &quot;cpp/memory/c/calloc&quot;},
{&quot;string&quot;: &quot;std::free&quot;,
&quot;target&quot;: &quot;cpp/memory/c/free&quot;},
{&quot;string&quot;: &quot;std::malloc&quot;,
&quot;target&quot;: &quot;cpp/memory/c/malloc&quot;},
{&quot;string&quot;: &quot;std::realloc&quot;,
&quot;target&quot;: &quot;cpp/memory/c/realloc&quot;},
{&quot;string&quot;: &quot;std::default_delete&quot;,
&quot;target&quot;: &quot;cpp/memory/default_delete&quot;},
{&quot;string&quot;: &quot;std::default_delete::default_delete&quot;,
&quot;target&quot;: &quot;cpp/memory/default_delete&quot;},
{&quot;string&quot;: &quot;std::default_delete::operator()&quot;,
&quot;target&quot;: &quot;cpp/memory/default_delete&quot;},
{&quot;on_group&quot;: &quot;std::default_delete&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/memory/default_delete&quot;},
{&quot;string&quot;: &quot;std::destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/destroy&quot;},
{&quot;string&quot;: &quot;std::destroy_at&quot;,
&quot;target&quot;: &quot;cpp/memory/destroy_at&quot;},
{&quot;string&quot;: &quot;std::destroy_n&quot;,
&quot;target&quot;: &quot;cpp/memory/destroy_n&quot;},
{&quot;string&quot;: &quot;std::enable_shared_from_this&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this&quot;},
{&quot;string&quot;: &quot;std::enable_shared_from_this::enable_shared_from_this&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/enable_shared_from_this&quot;},
{&quot;string&quot;: &quot;std::enable_shared_from_this::operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/operator=&quot;},
{&quot;on_group&quot;: &quot;std::enable_shared_from_this&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/operator=&quot;},
{&quot;string&quot;: &quot;std::enable_shared_from_this::shared_from_this&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/shared_from_this&quot;},
{&quot;on_group&quot;: &quot;std::enable_shared_from_this&quot;,
&quot;string&quot;: &quot;shared_from_this&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/shared_from_this&quot;},
{&quot;string&quot;: &quot;std::enable_shared_from_this::weak_from_this&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/weak_from_this&quot;},
{&quot;on_group&quot;: &quot;std::enable_shared_from_this&quot;,
&quot;string&quot;: &quot;weak_from_this&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/weak_from_this&quot;},
{&quot;string&quot;: &quot;std::enable_shared_from_this::~enable_shared_from_this&quot;,
&quot;target&quot;: &quot;cpp/memory/enable_shared_from_this/~enable_shared_from_this&quot;},
{&quot;string&quot;: &quot;std::declare_no_pointers&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/declare_no_pointers&quot;},
{&quot;string&quot;: &quot;std::declare_reachable&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/declare_reachable&quot;},
{&quot;string&quot;: &quot;std::get_pointer_safety&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/get_pointer_safety&quot;},
{&quot;string&quot;: &quot;std::pointer_safety&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/pointer_safety&quot;},
{&quot;string&quot;: &quot;std::pointer_safety::relaxed&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/pointer_safety&quot;},
{&quot;on_group&quot;: &quot;std::pointer_safety&quot;,
&quot;string&quot;: &quot;relaxed&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/pointer_safety&quot;},
{&quot;string&quot;: &quot;std::pointer_safety::preferred&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/pointer_safety&quot;},
{&quot;on_group&quot;: &quot;std::pointer_safety&quot;,
&quot;string&quot;: &quot;preferred&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/pointer_safety&quot;},
{&quot;string&quot;: &quot;std::pointer_safety::strict&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/pointer_safety&quot;},
{&quot;on_group&quot;: &quot;std::pointer_safety&quot;,
&quot;string&quot;: &quot;strict&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/pointer_safety&quot;},
{&quot;string&quot;: &quot;std::undeclare_no_pointers&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/undeclare_no_pointers&quot;},
{&quot;string&quot;: &quot;std::undeclare_reachable&quot;,
&quot;target&quot;: &quot;cpp/memory/gc/undeclare_reachable&quot;},
{&quot;string&quot;: &quot;std::pmr::get_default_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/get_default_resource&quot;},
{&quot;string&quot;: &quot;std::get_temporary_buffer&quot;,
&quot;target&quot;: &quot;cpp/memory/get_temporary_buffer&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource::is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::memory_resource&quot;,
&quot;string&quot;: &quot;is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::memory_resource::memory_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/memory_resource&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::memory_resource)&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/operator_eq&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::memory_resource)&quot;,
&quot;target&quot;: &quot;cpp/memory/memory_resource/operator_eq&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::~monotonic_buffer_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::monotonic_buffer_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/monotonic_buffer_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::release&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/release&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;release&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/release&quot;},
{&quot;string&quot;: &quot;std::pmr::monotonic_buffer_resource::upstream_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/upstream_resource&quot;},
{&quot;on_group&quot;: &quot;std::pmr::monotonic_buffer_resource&quot;,
&quot;string&quot;: &quot;upstream_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/monotonic_buffer_resource/upstream_resource&quot;},
{&quot;string&quot;: &quot;std::align_val_t&quot;,
&quot;target&quot;: &quot;cpp/memory/new/align_val_t&quot;},
{&quot;string&quot;: &quot;std::bad_alloc&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;string&quot;: &quot;std::bad_alloc::bad_alloc&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;string&quot;: &quot;std::bad_alloc::operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;on_group&quot;: &quot;std::bad_alloc&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;string&quot;: &quot;std::bad_alloc::what&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;on_group&quot;: &quot;std::bad_alloc&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;string&quot;: &quot;std::bad_array_new_length::what&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;on_group&quot;: &quot;std::bad_array_new_length&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;string&quot;: &quot;std::bad_array_length::what&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;on_group&quot;: &quot;std::bad_array_length&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_alloc&quot;},
{&quot;string&quot;: &quot;std::bad_array_length&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_array_length&quot;},
{&quot;string&quot;: &quot;std::bad_array_length::bad_array_length&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_array_length&quot;},
{&quot;string&quot;: &quot;std::bad_array_new_length&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_array_new_length&quot;},
{&quot;string&quot;: &quot;std::bad_array_new_length::bad_array_new_length&quot;,
&quot;target&quot;: &quot;cpp/memory/new/bad_array_new_length/bad_array_new_length&quot;},
{&quot;string&quot;: &quot;std::get_new_handler&quot;,
&quot;target&quot;: &quot;cpp/memory/new/get_new_handler&quot;},
{&quot;string&quot;: &quot;std::new_handler&quot;,
&quot;target&quot;: &quot;cpp/memory/new/new_handler&quot;},
{&quot;string&quot;: &quot;std::nothrow&quot;,
&quot;target&quot;: &quot;cpp/memory/new/nothrow&quot;},
{&quot;string&quot;: &quot;std::nothrow_t&quot;,
&quot;target&quot;: &quot;cpp/memory/new/nothrow_t&quot;},
{&quot;string&quot;: &quot;operator delete&quot;,
&quot;target&quot;: &quot;cpp/memory/new/operator_delete&quot;},
{&quot;string&quot;: &quot;operator delete[]&quot;,
&quot;target&quot;: &quot;cpp/memory/new/operator_delete&quot;},
{&quot;string&quot;: &quot;operator new&quot;,
&quot;target&quot;: &quot;cpp/memory/new/operator_new&quot;},
{&quot;string&quot;: &quot;operator new[]&quot;,
&quot;target&quot;: &quot;cpp/memory/new/operator_new&quot;},
{&quot;string&quot;: &quot;std::set_new_handler&quot;,
&quot;target&quot;: &quot;cpp/memory/new/set_new_handler&quot;},
{&quot;string&quot;: &quot;std::pmr::new_delete_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/new_delete_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::null_memory_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/null_memory_resource&quot;},
{&quot;string&quot;: &quot;std::owner_less&quot;,
&quot;target&quot;: &quot;cpp/memory/owner_less&quot;},
{&quot;string&quot;: &quot;std::owner_less::operator()&quot;,
&quot;target&quot;: &quot;cpp/memory/owner_less&quot;},
{&quot;on_group&quot;: &quot;std::owner_less&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/memory/owner_less&quot;},
{&quot;string&quot;: &quot;std::pointer_traits&quot;,
&quot;target&quot;: &quot;cpp/memory/pointer_traits&quot;},
{&quot;string&quot;: &quot;std::pointer_traits::pointer_to&quot;,
&quot;target&quot;: &quot;cpp/memory/pointer_traits/pointer_to&quot;},
{&quot;on_group&quot;: &quot;std::pointer_traits&quot;,
&quot;string&quot;: &quot;pointer_to&quot;,
&quot;target&quot;: &quot;cpp/memory/pointer_traits/pointer_to&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::~polymorphic_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::construct&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/construct&quot;},
{&quot;on_group&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;string&quot;: &quot;construct&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/construct&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/destroy&quot;},
{&quot;on_group&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;string&quot;: &quot;destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/destroy&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::polymorphic_allocator)&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::polymorphic_allocator)&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::polymorphic_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/polymorphic_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::resource&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/resource&quot;},
{&quot;on_group&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;string&quot;: &quot;resource&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/resource&quot;},
{&quot;string&quot;: &quot;std::pmr::polymorphic_allocator::select_on_container_copy_contruction&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/select_on_container_copy_contruction&quot;},
{&quot;on_group&quot;: &quot;std::pmr::polymorphic_allocator&quot;,
&quot;string&quot;: &quot;select_on_container_copy_contruction&quot;,
&quot;target&quot;: &quot;cpp/memory/polymorphic_allocator/select_on_container_copy_contruction&quot;},
{&quot;string&quot;: &quot;std::pmr::pool_options&quot;,
&quot;target&quot;: &quot;cpp/memory/pool_options&quot;},
{&quot;string&quot;: &quot;std::pmr::pool_options::max_blocks_per_chunk&quot;,
&quot;target&quot;: &quot;cpp/memory/pool_options&quot;},
{&quot;on_group&quot;: &quot;std::pmr::pool_options&quot;,
&quot;string&quot;: &quot;max_blocks_per_chunk&quot;,
&quot;target&quot;: &quot;cpp/memory/pool_options&quot;},
{&quot;string&quot;: &quot;std::pmr::pool_options::largest_required_pool_block&quot;,
&quot;target&quot;: &quot;cpp/memory/pool_options&quot;},
{&quot;on_group&quot;: &quot;std::pmr::pool_options&quot;,
&quot;string&quot;: &quot;largest_required_pool_block&quot;,
&quot;target&quot;: &quot;cpp/memory/pool_options&quot;},
{&quot;string&quot;: &quot;std::raw_storage_iterator&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator&quot;},
{&quot;string&quot;: &quot;std::raw_storage_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::raw_storage_iterator&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::raw_storage_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator/operator=&quot;},
{&quot;on_group&quot;: &quot;std::raw_storage_iterator&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::raw_storage_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::raw_storage_iterator&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::raw_storage_iterator::raw_storage_iterator&quot;,
&quot;target&quot;: &quot;cpp/memory/raw_storage_iterator/raw_storage_iterator&quot;},
{&quot;string&quot;: &quot;std::return_temporary_buffer&quot;,
&quot;target&quot;: &quot;cpp/memory/return_temporary_buffer&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/allocate&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/allocate&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::construct&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/construct&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;construct&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/construct&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/deallocate&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/deallocate&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/destroy&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;destroy&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/destroy&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::inner_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/inner_allocator&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;inner_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/inner_allocator&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::max_size&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/max_size&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/max_size&quot;},
{&quot;string&quot;: &quot;operator==(std::scoped_allocator_adaptor)&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::scoped_allocator_adaptor)&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::outer_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/outer_allocator&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;outer_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/outer_allocator&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::scoped_allocator_adaptor&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/scoped_allocator_adaptor&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::select_on_container_copy_construction&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/select_on_container_copy_construction&quot;},
{&quot;on_group&quot;: &quot;std::scoped_allocator_adaptor&quot;,
&quot;string&quot;: &quot;select_on_container_copy_construction&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/select_on_container_copy_construction&quot;},
{&quot;string&quot;: &quot;std::scoped_allocator_adaptor::~scoped_allocator_adaptor&quot;,
&quot;target&quot;: &quot;cpp/memory/scoped_allocator_adaptor/~scoped_allocator_adaptor&quot;},
{&quot;string&quot;: &quot;std::pmr::set_default_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/set_default_resource&quot;},
{&quot;string&quot;: &quot;std::shared_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr&quot;},
{&quot;string&quot;: &quot;std::allocate_shared&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/allocate_shared&quot;},
{&quot;string&quot;: &quot;std::atomic_is_lock_free(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_load(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_load_explicit(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_store(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_store_explicit(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_exchange(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::atomic_exchange_explicit(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::compare_exchange_weak(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::compare_exchange_strong(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::compare_exchange_weak_explicit(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::compare_exchange_strong_explicit(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/atomic&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::get&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/get&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/get&quot;},
{&quot;string&quot;: &quot;std::get_deleter(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/get_deleter&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::shared_ptr&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/hash&quot;},
{&quot;string&quot;: &quot;std::make_shared&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/make_shared&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator*&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator*&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator*&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator*&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator=&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator=&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::operator[]&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_at&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::operator bool&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_bool&quot;},
{&quot;string&quot;: &quot;operator==(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::owner_before&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/owner_before&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;owner_before&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/owner_before&quot;},
{&quot;string&quot;: &quot;std::static_pointer_cast&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/pointer_cast&quot;},
{&quot;string&quot;: &quot;std::dynamic_pointer_cast&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/pointer_cast&quot;},
{&quot;string&quot;: &quot;std::const_pointer_cast&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/pointer_cast&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::reset&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/reset&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/reset&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::shared_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/shared_ptr&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::swap&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/swap&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::shared_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/swap2&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::unique&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/unique&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;unique&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/unique&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::use_count&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/use_count&quot;},
{&quot;on_group&quot;: &quot;std::shared_ptr&quot;,
&quot;string&quot;: &quot;use_count&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/use_count&quot;},
{&quot;string&quot;: &quot;std::shared_ptr::~shared_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/shared_ptr/~shared_ptr&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::~synchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::options&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/options&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;options&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/options&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::release&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/release&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;release&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/release&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::synchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/synchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::synchronized_pool_resource::upstream_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/upstream_resource&quot;},
{&quot;on_group&quot;: &quot;std::pmr::synchronized_pool_resource&quot;,
&quot;string&quot;: &quot;upstream_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/synchronized_pool_resource/upstream_resource&quot;},
{&quot;string&quot;: &quot;std::uninitialized_copy&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_copy&quot;},
{&quot;string&quot;: &quot;std::uninitialized_copy_n&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_copy_n&quot;},
{&quot;string&quot;: &quot;std::uninitialized_default_construct&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_default_construct&quot;},
{&quot;string&quot;: &quot;std::uninitialized_default_construct_n&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_default_construct_n&quot;},
{&quot;string&quot;: &quot;std::uninitialized_fill&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_fill&quot;},
{&quot;string&quot;: &quot;std::uninitialized_fill_n&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_fill_n&quot;},
{&quot;string&quot;: &quot;std::uninitialized_move&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_move&quot;},
{&quot;string&quot;: &quot;std::uninitialized_move_n&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_move_n&quot;},
{&quot;string&quot;: &quot;std::uninitialized_value_construct&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_value_construct&quot;},
{&quot;string&quot;: &quot;std::uninitialized_value_construct_n&quot;,
&quot;target&quot;: &quot;cpp/memory/uninitialized_value_construct_n&quot;},
{&quot;string&quot;: &quot;std::unique_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::get&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/get&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/get&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::get_deleter&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/get_deleter&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;get_deleter&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/get_deleter&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::unique_ptr&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/hash&quot;},
{&quot;string&quot;: &quot;std::make_unique&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/make_unique&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator*&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator*&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator*&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator*&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator=&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator=&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::operator bool&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_bool&quot;},
{&quot;string&quot;: &quot;operator==(std::unique_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::unique_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::unique_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::unique_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::unique_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::unique_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::release&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/release&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;release&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/release&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::reset&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/reset&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/reset&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::swap&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/swap&quot;},
{&quot;on_group&quot;: &quot;std::unique_ptr&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::unique_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/swap2&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::unique_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/unique_ptr&quot;},
{&quot;string&quot;: &quot;std::unique_ptr::~unique_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/unique_ptr/~unique_ptr&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::~unsynchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/do_allocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_allocate&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/do_allocate&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/do_deallocate&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_deallocate&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/do_deallocate&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/do_is_equal&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;do_is_equal&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/do_is_equal&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::options&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/options&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;options&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/options&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::release&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/release&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;release&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/release&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::unsynchronized_pool_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/unsynchronized_pool_resource&quot;},
{&quot;string&quot;: &quot;std::pmr::unsynchronized_pool_resource::upstream_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/upstream_resource&quot;},
{&quot;on_group&quot;: &quot;std::pmr::unsynchronized_pool_resource&quot;,
&quot;string&quot;: &quot;upstream_resource&quot;,
&quot;target&quot;: &quot;cpp/memory/unsynchronized_pool_resource/upstream_resource&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&quot;,
&quot;target&quot;: &quot;cpp/memory/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::uses_allocator_v&quot;,
&quot;target&quot;: &quot;cpp/memory/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::weak_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::expired&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/expired&quot;},
{&quot;on_group&quot;: &quot;std::weak_ptr&quot;,
&quot;string&quot;: &quot;expired&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/expired&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::lock&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/lock&quot;},
{&quot;on_group&quot;: &quot;std::weak_ptr&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/lock&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/operator=&quot;},
{&quot;on_group&quot;: &quot;std::weak_ptr&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/operator=&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::owner_before&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/owner_before&quot;},
{&quot;on_group&quot;: &quot;std::weak_ptr&quot;,
&quot;string&quot;: &quot;owner_before&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/owner_before&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::reset&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/reset&quot;},
{&quot;on_group&quot;: &quot;std::weak_ptr&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/reset&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::swap&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/swap&quot;},
{&quot;on_group&quot;: &quot;std::weak_ptr&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::weak_ptr)&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/swap&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::use_count&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/use_count&quot;},
{&quot;on_group&quot;: &quot;std::weak_ptr&quot;,
&quot;string&quot;: &quot;use_count&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/use_count&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::weak_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/weak_ptr&quot;},
{&quot;string&quot;: &quot;std::weak_ptr::~weak_ptr&quot;,
&quot;target&quot;: &quot;cpp/memory/weak_ptr/~weak_ptr&quot;},
{&quot;string&quot;: &quot;std::complex&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex&quot;},
{&quot;string&quot;: &quot;std::abs(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/abs&quot;},
{&quot;string&quot;: &quot;std::acos(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/acos&quot;},
{&quot;string&quot;: &quot;std::acosh(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/acosh&quot;},
{&quot;string&quot;: &quot;std::arg(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/arg&quot;},
{&quot;string&quot;: &quot;std::asin(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/asin&quot;},
{&quot;string&quot;: &quot;std::asinh(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/asinh&quot;},
{&quot;string&quot;: &quot;std::atan(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/atan&quot;},
{&quot;string&quot;: &quot;std::atanh(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/atanh&quot;},
{&quot;string&quot;: &quot;std::complex::complex&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/complex&quot;},
{&quot;string&quot;: &quot;std::conj(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/conj&quot;},
{&quot;string&quot;: &quot;std::cos(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/cos&quot;},
{&quot;string&quot;: &quot;std::cosh(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/cosh&quot;},
{&quot;string&quot;: &quot;std::exp(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/exp&quot;},
{&quot;string&quot;: &quot;std::complex::imag&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/imag&quot;},
{&quot;on_group&quot;: &quot;std::complex&quot;,
&quot;string&quot;: &quot;imag&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/imag&quot;},
{&quot;string&quot;: &quot;std::imag(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/imag&quot;},
{&quot;string&quot;: &quot;std::log(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/log&quot;},
{&quot;string&quot;: &quot;std::log10(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/log10&quot;},
{&quot;string&quot;: &quot;std::norm(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/norm&quot;},
{&quot;string&quot;: &quot;std::complex::operator=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator=&quot;},
{&quot;on_group&quot;: &quot;std::complex&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator=&quot;},
{&quot;string&quot;: &quot;std::complex::operator+=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::complex&quot;,
&quot;string&quot;: &quot;operator+=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;string&quot;: &quot;std::complex::operator-=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::complex&quot;,
&quot;string&quot;: &quot;operator-=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;string&quot;: &quot;std::complex::operator*=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::complex&quot;,
&quot;string&quot;: &quot;operator*=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;string&quot;: &quot;std::complex::operator/=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::complex&quot;,
&quot;string&quot;: &quot;operator/=&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith&quot;},
{&quot;string&quot;: &quot;operator+(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith2&quot;},
{&quot;string&quot;: &quot;operator-(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith2&quot;},
{&quot;string&quot;: &quot;operator+(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith3&quot;},
{&quot;string&quot;: &quot;operator-(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith3&quot;},
{&quot;string&quot;: &quot;operator*(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith3&quot;},
{&quot;string&quot;: &quot;operator/(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_arith3&quot;},
{&quot;string&quot;: &quot;operator==(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::polar(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/polar&quot;},
{&quot;string&quot;: &quot;std::pow(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/pow&quot;},
{&quot;string&quot;: &quot;std::proj(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/proj&quot;},
{&quot;string&quot;: &quot;std::complex::real&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/real&quot;},
{&quot;on_group&quot;: &quot;std::complex&quot;,
&quot;string&quot;: &quot;real&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/real&quot;},
{&quot;string&quot;: &quot;std::real(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/real&quot;},
{&quot;string&quot;: &quot;std::sin(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/sin&quot;},
{&quot;string&quot;: &quot;std::sinh(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/sinh&quot;},
{&quot;string&quot;: &quot;std::sqrt(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/sqrt&quot;},
{&quot;string&quot;: &quot;std::tan(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/tan&quot;},
{&quot;string&quot;: &quot;std::tanh(std::complex)&quot;,
&quot;target&quot;: &quot;cpp/numeric/complex/tanh&quot;},
{&quot;string&quot;: &quot;FE_DFL_ENV&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_DFL_ENV&quot;},
{&quot;string&quot;: &quot;FE_ALL_EXCEPT&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_DIVBYZERO&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_INEXACT&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_INVALID&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_OVERFLOW&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_UNDERFLOW&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_exceptions&quot;},
{&quot;string&quot;: &quot;FE_DOWNWARD&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;FE_TONEAREST&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;FE_TOWARDZERO&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;FE_UPWARD&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/FE_round&quot;},
{&quot;string&quot;: &quot;std::feclearexcept&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feclearexcept&quot;},
{&quot;string&quot;: &quot;std::fegetenv&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feenv&quot;},
{&quot;string&quot;: &quot;std::fesetenv&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feenv&quot;},
{&quot;string&quot;: &quot;std::fegetexceptflag&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feexceptflag&quot;},
{&quot;string&quot;: &quot;std::fesetexceptflag&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feexceptflag&quot;},
{&quot;string&quot;: &quot;std::feholdexcept&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feholdexcept&quot;},
{&quot;string&quot;: &quot;std::feraiseexcept&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feraiseexcept&quot;},
{&quot;string&quot;: &quot;std::fegetround&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feround&quot;},
{&quot;string&quot;: &quot;std::fesetround&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feround&quot;},
{&quot;string&quot;: &quot;std::fetestexcept&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/fetestexcept&quot;},
{&quot;string&quot;: &quot;std::feupdateenv&quot;,
&quot;target&quot;: &quot;cpp/numeric/fenv/feupdateenv&quot;},
{&quot;string&quot;: &quot;std::gcd&quot;,
&quot;target&quot;: &quot;cpp/numeric/gcd&quot;},
{&quot;string&quot;: &quot;std::lcm&quot;,
&quot;target&quot;: &quot;cpp/numeric/lcm&quot;},
{&quot;string&quot;: &quot;FP_INFINITE&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_NAN&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_NORMAL&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_SUBNORMAL&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;FP_ZERO&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/FP_categories&quot;},
{&quot;string&quot;: &quot;HUGE_VAL&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/HUGE_VAL&quot;},
{&quot;string&quot;: &quot;HUGE_VALF&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/HUGE_VAL&quot;},
{&quot;string&quot;: &quot;HUGE_VALL&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/HUGE_VAL&quot;},
{&quot;string&quot;: &quot;INFINITY&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/INFINITY&quot;},
{&quot;string&quot;: &quot;NAN&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/NAN&quot;},
{&quot;string&quot;: &quot;std::abs(int)&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/abs&quot;},
{&quot;string&quot;: &quot;std::labs&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/abs&quot;},
{&quot;string&quot;: &quot;std::llabs&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/abs&quot;},
{&quot;string&quot;: &quot;std::acos&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/acos&quot;},
{&quot;string&quot;: &quot;std::acosh&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/acosh&quot;},
{&quot;string&quot;: &quot;std::asin&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/asin&quot;},
{&quot;string&quot;: &quot;std::asinh&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/asinh&quot;},
{&quot;string&quot;: &quot;std::atan&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/atan&quot;},
{&quot;string&quot;: &quot;std::atan2&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/atan2&quot;},
{&quot;string&quot;: &quot;std::atanh&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/atanh&quot;},
{&quot;string&quot;: &quot;std::cbrt&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/cbrt&quot;},
{&quot;string&quot;: &quot;std::ceil&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/ceil&quot;},
{&quot;string&quot;: &quot;std::copysign&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/copysign&quot;},
{&quot;string&quot;: &quot;std::cos&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/cos&quot;},
{&quot;string&quot;: &quot;std::cosh&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/cosh&quot;},
{&quot;string&quot;: &quot;std::div&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::ldiv&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::lldiv&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::imaxdiv&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::div_t&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::div_t::quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::div_t&quot;,
&quot;string&quot;: &quot;quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::div_t::rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::div_t&quot;,
&quot;string&quot;: &quot;rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::ldiv_t&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::ldiv_t::quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::ldiv_t&quot;,
&quot;string&quot;: &quot;quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::ldiv_t::rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::ldiv_t&quot;,
&quot;string&quot;: &quot;rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::lldiv_t&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::lldiv_t::quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::lldiv_t&quot;,
&quot;string&quot;: &quot;quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::lldiv_t::rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::lldiv_t&quot;,
&quot;string&quot;: &quot;rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::imaxdiv_t&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::imaxdiv_t::quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::imaxdiv_t&quot;,
&quot;string&quot;: &quot;quot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::imaxdiv_t::rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;on_group&quot;: &quot;std::imaxdiv_t&quot;,
&quot;string&quot;: &quot;rem&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/div&quot;},
{&quot;string&quot;: &quot;std::erf&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/erf&quot;},
{&quot;string&quot;: &quot;std::erfc&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/erfc&quot;},
{&quot;string&quot;: &quot;std::exp&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/exp&quot;},
{&quot;string&quot;: &quot;std::exp2&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/exp2&quot;},
{&quot;string&quot;: &quot;std::expm1&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/expm1&quot;},
{&quot;string&quot;: &quot;std::abs(float)&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fabs&quot;},
{&quot;string&quot;: &quot;std::fabs&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fabs&quot;},
{&quot;string&quot;: &quot;std::fdim&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fdim&quot;},
{&quot;string&quot;: &quot;std::floor&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/floor&quot;},
{&quot;string&quot;: &quot;std::fma&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fma&quot;},
{&quot;string&quot;: &quot;std::fmax&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fmax&quot;},
{&quot;string&quot;: &quot;std::fmin&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fmin&quot;},
{&quot;string&quot;: &quot;std::fmod&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fmod&quot;},
{&quot;string&quot;: &quot;std::fpclassify&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/fpclassify&quot;},
{&quot;string&quot;: &quot;std::frexp&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/frexp&quot;},
{&quot;string&quot;: &quot;std::hypot&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/hypot&quot;},
{&quot;string&quot;: &quot;std::ilogb&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/ilogb&quot;},
{&quot;string&quot;: &quot;std::isfinite&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/isfinite&quot;},
{&quot;string&quot;: &quot;std::isinf&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/isinf&quot;},
{&quot;string&quot;: &quot;std::isnan&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/isnan&quot;},
{&quot;string&quot;: &quot;std::isnormal&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/isnormal&quot;},
{&quot;string&quot;: &quot;std::ldexp&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/ldexp&quot;},
{&quot;string&quot;: &quot;std::lgamma&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/lgamma&quot;},
{&quot;string&quot;: &quot;std::log&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/log&quot;},
{&quot;string&quot;: &quot;std::log10&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/log10&quot;},
{&quot;string&quot;: &quot;std::log1p&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/log1p&quot;},
{&quot;string&quot;: &quot;std::logb&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/logb&quot;},
{&quot;string&quot;: &quot;math_errhandling&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/math_errhandling&quot;},
{&quot;string&quot;: &quot;MATH_ERRNO&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/math_errhandling&quot;},
{&quot;string&quot;: &quot;MATH_ERREXCEPT&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/math_errhandling&quot;},
{&quot;string&quot;: &quot;std::modf&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/modf&quot;},
{&quot;string&quot;: &quot;std::nan&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/nan&quot;},
{&quot;string&quot;: &quot;std::nanf&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/nan&quot;},
{&quot;string&quot;: &quot;std::nanl&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/nan&quot;},
{&quot;string&quot;: &quot;std::nearbyint&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/nearbyint&quot;},
{&quot;string&quot;: &quot;std::nextafter&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/nextafter&quot;},
{&quot;string&quot;: &quot;std::nexttoward&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/nextafter&quot;},
{&quot;string&quot;: &quot;std::pow&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/pow&quot;},
{&quot;string&quot;: &quot;std::remainder&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/remainder&quot;},
{&quot;string&quot;: &quot;std::remquo&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/remquo&quot;},
{&quot;string&quot;: &quot;std::rint&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/rint&quot;},
{&quot;string&quot;: &quot;std::lrint&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/rint&quot;},
{&quot;string&quot;: &quot;std::llrint&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/rint&quot;},
{&quot;string&quot;: &quot;std::round&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/round&quot;},
{&quot;string&quot;: &quot;std::lround&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/round&quot;},
{&quot;string&quot;: &quot;std::llround&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/round&quot;},
{&quot;string&quot;: &quot;std::scalbn&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/scalbn&quot;},
{&quot;string&quot;: &quot;std::scalbln&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/scalbn&quot;},
{&quot;string&quot;: &quot;std::signbit&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/signbit&quot;},
{&quot;string&quot;: &quot;std::sin&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/sin&quot;},
{&quot;string&quot;: &quot;std::sinh&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/sinh&quot;},
{&quot;string&quot;: &quot;std::sqrt&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/sqrt&quot;},
{&quot;string&quot;: &quot;std::tan&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/tan&quot;},
{&quot;string&quot;: &quot;std::tanh&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/tanh&quot;},
{&quot;string&quot;: &quot;std::tgamma&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/tgamma&quot;},
{&quot;string&quot;: &quot;std::trunc&quot;,
&quot;target&quot;: &quot;cpp/numeric/math/trunc&quot;},
{&quot;string&quot;: &quot;std::default_random_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random&quot;},
{&quot;string&quot;: &quot;RAND_MAX&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/RAND_MAX&quot;},
{&quot;string&quot;: &quot;std::bernoulli_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution&quot;},
{&quot;string&quot;: &quot;std::bernoulli_distribution::bernoulli_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/bernoulli_distribution&quot;},
{&quot;string&quot;: &quot;std::bernoulli_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::bernoulli_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/max&quot;},
{&quot;string&quot;: &quot;std::bernoulli_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::bernoulli_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/min&quot;},
{&quot;string&quot;: &quot;operator()(std::bernoulli_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::bernoulli_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::bernoulli_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::bernoulli_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::bernoulli_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::bernoulli_distribution::p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/p&quot;},
{&quot;on_group&quot;: &quot;std::bernoulli_distribution&quot;,
&quot;string&quot;: &quot;p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/p&quot;},
{&quot;string&quot;: &quot;std::bernoulli_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::bernoulli_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/param&quot;},
{&quot;string&quot;: &quot;std::bernoulli_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::bernoulli_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/bernoulli_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution::binomial_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/binomial_distribution&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::binomial_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/max&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::binomial_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/min&quot;},
{&quot;string&quot;: &quot;operator()(std::binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::binomial_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/param&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution::t&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::binomial_distribution&quot;,
&quot;string&quot;: &quot;t&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/params&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution::p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::binomial_distribution&quot;,
&quot;string&quot;: &quot;p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/params&quot;},
{&quot;string&quot;: &quot;std::binomial_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::binomial_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/binomial_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::cauchy_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/cauchy_distribution&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::cauchy_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/max&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::cauchy_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/min&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::cauchy_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::cauchy_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::cauchy_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::cauchy_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::cauchy_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::cauchy_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/param&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::cauchy_distribution&quot;,
&quot;string&quot;: &quot;a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/params&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::cauchy_distribution&quot;,
&quot;string&quot;: &quot;b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/params&quot;},
{&quot;string&quot;: &quot;std::cauchy_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::cauchy_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/cauchy_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution::chi_squared_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/chi_squared_distribution&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/max&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/min&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution::n&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/n&quot;},
{&quot;on_group&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;string&quot;: &quot;n&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/n&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::chi_squared_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::chi_squared_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::chi_squared_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::chi_squared_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/param&quot;},
{&quot;string&quot;: &quot;std::chi_squared_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::chi_squared_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/chi_squared_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux24&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux48&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine::base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/base&quot;},
{&quot;on_group&quot;: &quot;std::discard_block_engine&quot;,
&quot;string&quot;: &quot;base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/base&quot;},
{&quot;string&quot;: &quot;std::ranlux24::base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/base&quot;},
{&quot;string&quot;: &quot;std::ranlux48::base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/base&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/discard&quot;},
{&quot;on_group&quot;: &quot;std::discard_block_engine&quot;,
&quot;string&quot;: &quot;discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/discard&quot;},
{&quot;string&quot;: &quot;std::ranlux24::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/discard&quot;},
{&quot;string&quot;: &quot;std::ranlux48::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/discard&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine::discard_block_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/discard_block_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux24::ranlux24&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/discard_block_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux48::ranlux48&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/discard_block_engine&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/max&quot;},
{&quot;on_group&quot;: &quot;std::discard_block_engine&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/max&quot;},
{&quot;string&quot;: &quot;std::ranlux24::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/max&quot;},
{&quot;string&quot;: &quot;std::ranlux48::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/max&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/min&quot;},
{&quot;on_group&quot;: &quot;std::discard_block_engine&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/min&quot;},
{&quot;string&quot;: &quot;std::ranlux24::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/min&quot;},
{&quot;string&quot;: &quot;std::ranlux48::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/min&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator()&quot;},
{&quot;on_group&quot;: &quot;std::discard_block_engine&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::ranlux24::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::ranlux48::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::discard_block_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::discard_block_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::ranlux24)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::ranlux24)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::ranlux48)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::ranlux48)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::discard_block_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::discard_block_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::ranlux24)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::ranlux24)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::ranlux48)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::ranlux48)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::discard_block_engine::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/seed&quot;},
{&quot;on_group&quot;: &quot;std::discard_block_engine&quot;,
&quot;string&quot;: &quot;seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/seed&quot;},
{&quot;string&quot;: &quot;std::ranlux24::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/seed&quot;},
{&quot;string&quot;: &quot;std::ranlux48::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discard_block_engine/seed&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution::discrete_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/discrete_distribution&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::discrete_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/max&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::discrete_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/min&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::discrete_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::discrete_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::discrete_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::discrete_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::discrete_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::discrete_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/param&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution::probabilities&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/probabilities&quot;},
{&quot;on_group&quot;: &quot;std::discrete_distribution&quot;,
&quot;string&quot;: &quot;probabilities&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/probabilities&quot;},
{&quot;string&quot;: &quot;std::discrete_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::discrete_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/discrete_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution::exponential_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/exponential_distribution&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution::lambda&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/lambda&quot;},
{&quot;on_group&quot;: &quot;std::exponential_distribution&quot;,
&quot;string&quot;: &quot;lambda&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/lambda&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::exponential_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/max&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::exponential_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/min&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::exponential_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::exponential_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::exponential_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::exponential_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::exponential_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::exponential_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/param&quot;},
{&quot;string&quot;: &quot;std::exponential_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::exponential_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/exponential_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::extreme_value_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/extreme_value_distribution&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/max&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/min&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::extreme_value_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::extreme_value_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::extreme_value_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::extreme_value_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/param&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;string&quot;: &quot;a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/params&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;string&quot;: &quot;b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/params&quot;},
{&quot;string&quot;: &quot;std::extreme_value_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::extreme_value_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/extreme_value_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::fisher_f_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/fisher_f_distribution&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/max&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/min&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::fisher_f_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::fisher_f_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::fisher_f_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::fisher_f_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/param&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::m&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;string&quot;: &quot;m&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/params&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::n&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;string&quot;: &quot;n&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/params&quot;},
{&quot;string&quot;: &quot;std::fisher_f_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::fisher_f_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/fisher_f_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::gamma_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/gamma_distribution&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::gamma_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/max&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::gamma_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/min&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::gamma_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::gamma_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::gamma_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::gamma_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::gamma_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::gamma_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/param&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::alpha&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::gamma_distribution&quot;,
&quot;string&quot;: &quot;alpha&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/params&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::beta&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::gamma_distribution&quot;,
&quot;string&quot;: &quot;beta&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/params&quot;},
{&quot;string&quot;: &quot;std::gamma_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::gamma_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/gamma_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::generate_canonical&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/generate_canonical&quot;},
{&quot;string&quot;: &quot;std::geometric_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution&quot;},
{&quot;string&quot;: &quot;std::geometric_distribution::geometric_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/geometric_distribution&quot;},
{&quot;string&quot;: &quot;std::geometric_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::geometric_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/max&quot;},
{&quot;string&quot;: &quot;std::geometric_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::geometric_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/min&quot;},
{&quot;string&quot;: &quot;operator()(std::geometric_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::geometric_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::geometric_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::geometric_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::geometric_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::geometric_distribution::p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/p&quot;},
{&quot;on_group&quot;: &quot;std::geometric_distribution&quot;,
&quot;string&quot;: &quot;p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/p&quot;},
{&quot;string&quot;: &quot;std::geometric_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::geometric_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/param&quot;},
{&quot;string&quot;: &quot;std::geometric_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::geometric_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/geometric_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine::base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/base&quot;},
{&quot;on_group&quot;: &quot;std::independent_bits_engine&quot;,
&quot;string&quot;: &quot;base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/base&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/discard&quot;},
{&quot;on_group&quot;: &quot;std::independent_bits_engine&quot;,
&quot;string&quot;: &quot;discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/discard&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine::independent_bits_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/independent_bits_engine&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/max&quot;},
{&quot;on_group&quot;: &quot;std::independent_bits_engine&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/max&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/min&quot;},
{&quot;on_group&quot;: &quot;std::independent_bits_engine&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/min&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/operator()&quot;},
{&quot;on_group&quot;: &quot;std::independent_bits_engine&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::independent_bits_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::independent_bits_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::independent_bits_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::independent_bits_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::independent_bits_engine::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/seed&quot;},
{&quot;on_group&quot;: &quot;std::independent_bits_engine&quot;,
&quot;string&quot;: &quot;seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/independent_bits_engine/seed&quot;},
{&quot;string&quot;: &quot;std::linear_congruential_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine&quot;},
{&quot;string&quot;: &quot;std::minstd_rand0&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine&quot;},
{&quot;string&quot;: &quot;std::minstd_rand&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine&quot;},
{&quot;string&quot;: &quot;std::linear_congruential_engine::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/discard&quot;},
{&quot;on_group&quot;: &quot;std::linear_congruential_engine&quot;,
&quot;string&quot;: &quot;discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/discard&quot;},
{&quot;string&quot;: &quot;std::minstd_rand0::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/discard&quot;},
{&quot;string&quot;: &quot;std::minstd_rand::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/discard&quot;},
{&quot;string&quot;: &quot;std::linear_congruential_engine::linear_congruential_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/linear_congruential_engine&quot;},
{&quot;string&quot;: &quot;std::minstd_rand0::minstd_rand0&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/linear_congruential_engine&quot;},
{&quot;string&quot;: &quot;std::minstd_rand::minstd_rand&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/linear_congruential_engine&quot;},
{&quot;string&quot;: &quot;std::linear_congruential_engine::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/max&quot;},
{&quot;on_group&quot;: &quot;std::linear_congruential_engine&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/max&quot;},
{&quot;string&quot;: &quot;std::minstd_rand0::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/max&quot;},
{&quot;string&quot;: &quot;std::minstd_rand::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/max&quot;},
{&quot;string&quot;: &quot;std::linear_congruential_engine::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/min&quot;},
{&quot;on_group&quot;: &quot;std::linear_congruential_engine&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/min&quot;},
{&quot;string&quot;: &quot;std::minstd_rand0::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/min&quot;},
{&quot;string&quot;: &quot;std::minstd_rand::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/min&quot;},
{&quot;string&quot;: &quot;std::linear_congruential_engine::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator()&quot;},
{&quot;on_group&quot;: &quot;std::linear_congruential_engine&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::minstd_rand0::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::minstd_rand::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::linear_congruential_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::linear_congruential_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::minstd_rand0)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::minstd_rand0)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::minstd_rand)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::minstd_rand)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::linear_congruential_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::linear_congruential_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::minstd_rand0)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::minstd_rand0)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::minstd_rand)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::minstd_rand)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::linear_congruential_engine::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/seed&quot;},
{&quot;on_group&quot;: &quot;std::linear_congruential_engine&quot;,
&quot;string&quot;: &quot;seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/seed&quot;},
{&quot;string&quot;: &quot;std::minstd_rand0::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/seed&quot;},
{&quot;string&quot;: &quot;std::minstd_rand::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/linear_congruential_engine/seed&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::lognormal_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/lognormal_distribution&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::lognormal_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/max&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::lognormal_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/min&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::lognormal_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::lognormal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::lognormal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::lognormal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::lognormal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::lognormal_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/param&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::m&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::lognormal_distribution&quot;,
&quot;string&quot;: &quot;m&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/params&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::s&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::lognormal_distribution&quot;,
&quot;string&quot;: &quot;s&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/params&quot;},
{&quot;string&quot;: &quot;std::lognormal_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::lognormal_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/lognormal_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::mersenne_twister_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine&quot;},
{&quot;string&quot;: &quot;std::mt19937&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine&quot;},
{&quot;string&quot;: &quot;std::mt19937_64&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine&quot;},
{&quot;string&quot;: &quot;std::mersenne_twister_engine::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/discard&quot;},
{&quot;on_group&quot;: &quot;std::mersenne_twister_engine&quot;,
&quot;string&quot;: &quot;discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/discard&quot;},
{&quot;string&quot;: &quot;std::mt19937::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/discard&quot;},
{&quot;string&quot;: &quot;std::mt19937_64::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/discard&quot;},
{&quot;string&quot;: &quot;std::mersenne_twister_engine::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/max&quot;},
{&quot;on_group&quot;: &quot;std::mersenne_twister_engine&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/max&quot;},
{&quot;string&quot;: &quot;std::mt19937::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/max&quot;},
{&quot;string&quot;: &quot;std::mt19937_64::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/max&quot;},
{&quot;string&quot;: &quot;std::mersenne_twister_engine::mersenne_twister_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine&quot;},
{&quot;string&quot;: &quot;std::mt19937::mt19937&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine&quot;},
{&quot;string&quot;: &quot;std::mt19937_64::mt19937_64&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine&quot;},
{&quot;string&quot;: &quot;std::mersenne_twister_engine::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/min&quot;},
{&quot;on_group&quot;: &quot;std::mersenne_twister_engine&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/min&quot;},
{&quot;string&quot;: &quot;std::mt19937::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/min&quot;},
{&quot;string&quot;: &quot;std::mt19937_64::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/min&quot;},
{&quot;string&quot;: &quot;std::mersenne_twister_engine::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator()&quot;},
{&quot;on_group&quot;: &quot;std::mersenne_twister_engine&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::mt19937::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::mt19937_64::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::mersenne_twister_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::mersenne_twister_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::mt19937)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::mt19937)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::mt19937_64)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::mt19937_64)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::mersenne_twister_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::mersenne_twister_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::mt19937)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::mt19937)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::mt19937_64)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::mt19937_64)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::mersenne_twister_engine::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/seed&quot;},
{&quot;on_group&quot;: &quot;std::mersenne_twister_engine&quot;,
&quot;string&quot;: &quot;seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/seed&quot;},
{&quot;string&quot;: &quot;std::mt19937::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/seed&quot;},
{&quot;string&quot;: &quot;std::mt19937_64::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/mersenne_twister_engine/seed&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/max&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/min&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution::negative_binomial_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/negative_binomial_distribution&quot;},
{&quot;string&quot;: &quot;operator()(std::negative_binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::negative_binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::negative_binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::negative_binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::negative_binomial_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/param&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution::k&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;string&quot;: &quot;k&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/params&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution::p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;string&quot;: &quot;p&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/params&quot;},
{&quot;string&quot;: &quot;std::negative_binomial_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::negative_binomial_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/negative_binomial_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::normal_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::normal_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/max&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::normal_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/min&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::normal_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/normal_distribution&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::normal_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::normal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::normal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::normal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::normal_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::normal_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/param&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::mean&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::normal_distribution&quot;,
&quot;string&quot;: &quot;mean&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/params&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::stddev&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::normal_distribution&quot;,
&quot;string&quot;: &quot;stddev&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/params&quot;},
{&quot;string&quot;: &quot;std::normal_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::normal_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/normal_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/max&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/min&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::piecewise_constant_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::piecewise_constant_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::piecewise_constant_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::piecewise_constant_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/param&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::intervals&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;string&quot;: &quot;intervals&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/params&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::densities&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;string&quot;: &quot;densities&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/params&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::piecewise_constant_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/piecewise_constant_distribution&quot;},
{&quot;string&quot;: &quot;std::piecewise_constant_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_constant_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_constant_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/max&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/min&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::piecewise_linear_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::piecewise_linear_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::piecewise_linear_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::piecewise_linear_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/param&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::intervals&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;string&quot;: &quot;intervals&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/params&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::densities&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;string&quot;: &quot;densities&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/params&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::piecewise_linear_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/piecewise_linear_distribution&quot;},
{&quot;string&quot;: &quot;std::piecewise_linear_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::piecewise_linear_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/piecewise_linear_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::poisson_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution&quot;},
{&quot;string&quot;: &quot;std::poisson_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::poisson_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/max&quot;},
{&quot;string&quot;: &quot;std::poisson_distribution::mean&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/mean&quot;},
{&quot;on_group&quot;: &quot;std::poisson_distribution&quot;,
&quot;string&quot;: &quot;mean&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/mean&quot;},
{&quot;string&quot;: &quot;std::poisson_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::poisson_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/min&quot;},
{&quot;string&quot;: &quot;operator()(std::poisson_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::poisson_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::poisson_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::poisson_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::poisson_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::poisson_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::poisson_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/param&quot;},
{&quot;string&quot;: &quot;std::poisson_distribution::poisson_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/poisson_distribution&quot;},
{&quot;string&quot;: &quot;std::poisson_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::poisson_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/poisson_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::rand&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/rand&quot;},
{&quot;string&quot;: &quot;std::random_device&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device&quot;},
{&quot;string&quot;: &quot;std::random_device::entropy&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/entropy&quot;},
{&quot;on_group&quot;: &quot;std::random_device&quot;,
&quot;string&quot;: &quot;entropy&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/entropy&quot;},
{&quot;string&quot;: &quot;std::random_device::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/max&quot;},
{&quot;on_group&quot;: &quot;std::random_device&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/max&quot;},
{&quot;string&quot;: &quot;std::random_device::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/min&quot;},
{&quot;on_group&quot;: &quot;std::random_device&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/min&quot;},
{&quot;string&quot;: &quot;std::random_device::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/operator()&quot;},
{&quot;on_group&quot;: &quot;std::random_device&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/operator()&quot;},
{&quot;string&quot;: &quot;std::random_device::random_device&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/random_device/random_device&quot;},
{&quot;string&quot;: &quot;std::seed_seq&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq&quot;},
{&quot;string&quot;: &quot;std::seed_seq::generate&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq/generate&quot;},
{&quot;on_group&quot;: &quot;std::seed_seq&quot;,
&quot;string&quot;: &quot;generate&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq/generate&quot;},
{&quot;string&quot;: &quot;std::seed_seq::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq/param&quot;},
{&quot;on_group&quot;: &quot;std::seed_seq&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq/param&quot;},
{&quot;string&quot;: &quot;std::seed_seq::seed_seq&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq/seed_seq&quot;},
{&quot;string&quot;: &quot;std::seed_seq::size&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq/size&quot;},
{&quot;on_group&quot;: &quot;std::seed_seq&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/seed_seq/size&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine&quot;},
{&quot;string&quot;: &quot;std::knuth_b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine::base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/base&quot;},
{&quot;on_group&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;string&quot;: &quot;base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/base&quot;},
{&quot;string&quot;: &quot;std::knuth_b::base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/base&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/discard&quot;},
{&quot;on_group&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;string&quot;: &quot;discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/discard&quot;},
{&quot;string&quot;: &quot;std::knuth_b::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/discard&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/max&quot;},
{&quot;on_group&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/max&quot;},
{&quot;string&quot;: &quot;std::knuth_b::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/max&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/min&quot;},
{&quot;on_group&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/min&quot;},
{&quot;string&quot;: &quot;std::knuth_b::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/min&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator()&quot;},
{&quot;on_group&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::knuth_b::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::shuffle_order_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::shuffle_order_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::knuth_b)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::knuth_b)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::shuffle_order_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::shuffle_order_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::knuth_b)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::knuth_b)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/seed&quot;},
{&quot;on_group&quot;: &quot;std::shuffle_order_engine&quot;,
&quot;string&quot;: &quot;seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/seed&quot;},
{&quot;string&quot;: &quot;std::knuth_b::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/seed&quot;},
{&quot;string&quot;: &quot;std::shuffle_order_engine::shuffle_order_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/shuffle_order_engine&quot;},
{&quot;string&quot;: &quot;std::knuth_b::knuth_b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/shuffle_order_engine/shuffle_order_engine&quot;},
{&quot;string&quot;: &quot;std::srand&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/srand&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::student_t_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/max&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::student_t_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/min&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution::n&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/n&quot;},
{&quot;on_group&quot;: &quot;std::student_t_distribution&quot;,
&quot;string&quot;: &quot;n&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/n&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::student_t_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::student_t_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::student_t_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::student_t_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::student_t_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::student_t_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/param&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::student_t_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::student_t_distribution::student_t_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/student_t_distribution/student_t_distribution&quot;},
{&quot;string&quot;: &quot;std::subtract_with_carry_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux24_base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux48_base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine&quot;},
{&quot;string&quot;: &quot;std::subtract_with_carry_engine::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/discard&quot;},
{&quot;on_group&quot;: &quot;std::subtract_with_carry_engine&quot;,
&quot;string&quot;: &quot;discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/discard&quot;},
{&quot;string&quot;: &quot;std::ranlux24_base::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/discard&quot;},
{&quot;string&quot;: &quot;std::ranlux48_base::discard&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/discard&quot;},
{&quot;string&quot;: &quot;std::subtract_with_carry_engine::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/max&quot;},
{&quot;on_group&quot;: &quot;std::subtract_with_carry_engine&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/max&quot;},
{&quot;string&quot;: &quot;std::ranlux24_base::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/max&quot;},
{&quot;string&quot;: &quot;std::ranlux48_base::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/max&quot;},
{&quot;string&quot;: &quot;std::subtract_with_carry_engine::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/min&quot;},
{&quot;on_group&quot;: &quot;std::subtract_with_carry_engine&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/min&quot;},
{&quot;string&quot;: &quot;std::ranlux24_base::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/min&quot;},
{&quot;string&quot;: &quot;std::ranlux48_base::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/min&quot;},
{&quot;string&quot;: &quot;std::subtract_with_carry_engine::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator()&quot;},
{&quot;on_group&quot;: &quot;std::subtract_with_carry_engine&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::ranlux24_base::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator()&quot;},
{&quot;string&quot;: &quot;std::ranlux48_base::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::subtract_with_carry_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::subtract_with_carry_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::ranlux24_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::ranlux24_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::ranlux48_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::ranlux48_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::subtract_with_carry_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::subtract_with_carry_engine)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::ranlux24_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::ranlux24_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::ranlux48_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::ranlux48_base)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::subtract_with_carry_engine::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/seed&quot;},
{&quot;on_group&quot;: &quot;std::subtract_with_carry_engine&quot;,
&quot;string&quot;: &quot;seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/seed&quot;},
{&quot;string&quot;: &quot;std::ranlux24_base::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/seed&quot;},
{&quot;string&quot;: &quot;std::ranlux48_base::seed&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/seed&quot;},
{&quot;string&quot;: &quot;std::subtract_with_carry_engine::subtract_with_carry_engine&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux24_base::ranlux24_base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine&quot;},
{&quot;string&quot;: &quot;std::ranlux48_base::ranlux48_base&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/max&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/min&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::uniform_int_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::uniform_int_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::uniform_int_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::uniform_int_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/param&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;string&quot;: &quot;a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/params&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;string&quot;: &quot;b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/params&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::uniform_int_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::uniform_int_distribution::uniform_int_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_int_distribution/uniform_int_distribution&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/max&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/min&quot;},
{&quot;string&quot;: &quot;operator()(std::uniform_real_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::uniform_real_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::uniform_real_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::uniform_real_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::uniform_real_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/param&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution::a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;string&quot;: &quot;a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/params&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution::b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;string&quot;: &quot;b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/params&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::uniform_real_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::uniform_real_distribution::uniform_real_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/uniform_real_distribution/uniform_real_distribution&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/max&quot;},
{&quot;on_group&quot;: &quot;std::weibull_distribution&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/max&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/min&quot;},
{&quot;on_group&quot;: &quot;std::weibull_distribution&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/min&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/operator()&quot;},
{&quot;on_group&quot;: &quot;std::weibull_distribution&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/operator()&quot;},
{&quot;string&quot;: &quot;operator==(std::weibull_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::weibull_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::weibull_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::weibull_distribution)&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/param&quot;},
{&quot;on_group&quot;: &quot;std::weibull_distribution&quot;,
&quot;string&quot;: &quot;param&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/param&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::weibull_distribution&quot;,
&quot;string&quot;: &quot;a&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/params&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/params&quot;},
{&quot;on_group&quot;: &quot;std::weibull_distribution&quot;,
&quot;string&quot;: &quot;b&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/params&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/reset&quot;},
{&quot;on_group&quot;: &quot;std::weibull_distribution&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/reset&quot;},
{&quot;string&quot;: &quot;std::weibull_distribution::weibull_distribution&quot;,
&quot;target&quot;: &quot;cpp/numeric/random/weibull_distribution/weibull_distribution&quot;},
{&quot;string&quot;: &quot;std::ratio&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::yocto&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::femto&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::pico&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::nano&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::micro&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::milli&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::centi&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::deci&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::deca&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::hecto&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::kilo&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::mega&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::giga&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::tera&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::peta&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::exa&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::zetta&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::yotta&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio&quot;},
{&quot;string&quot;: &quot;std::ratio_add&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_add&quot;},
{&quot;string&quot;: &quot;std::ratio_divide&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_divide&quot;},
{&quot;string&quot;: &quot;std::ratio_equal&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_equal_v&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_greater&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_greater&quot;},
{&quot;string&quot;: &quot;std::ratio_greater_v&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_greater&quot;},
{&quot;string&quot;: &quot;std::ratio_greater_equal&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_greater_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_greater_equal_v&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_greater_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_less&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_less&quot;},
{&quot;string&quot;: &quot;std::ratio_less_v&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_less&quot;},
{&quot;string&quot;: &quot;std::ratio_less_equal&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_less_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_less_equal_v&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_less_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_multiply&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_multiply&quot;},
{&quot;string&quot;: &quot;std::ratio_not_equal&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_not_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_not_equal_v&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_not_equal&quot;},
{&quot;string&quot;: &quot;std::ratio_subtract&quot;,
&quot;target&quot;: &quot;cpp/numeric/ratio/ratio_subtract&quot;},
{&quot;string&quot;: &quot;std::assoc_laguerre&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/assoc_laguerre&quot;},
{&quot;string&quot;: &quot;std::assoc_laguerref&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/assoc_laguerre&quot;},
{&quot;string&quot;: &quot;std::assoc_laguerrel&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/assoc_laguerre&quot;},
{&quot;string&quot;: &quot;std::assoc_legendre&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/assoc_legendre&quot;},
{&quot;string&quot;: &quot;std::assoc_legendref&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/assoc_legendre&quot;},
{&quot;string&quot;: &quot;std::assoc_legendrel&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/assoc_legendre&quot;},
{&quot;string&quot;: &quot;std::beta&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/beta&quot;},
{&quot;string&quot;: &quot;std::betaf&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/beta&quot;},
{&quot;string&quot;: &quot;std::betal&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/beta&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_1&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_1&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_1f&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_1&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_1l&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_1&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_2&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_2&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_2f&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_2&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_2l&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_2&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_3&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_3&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_3f&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_3&quot;},
{&quot;string&quot;: &quot;std::comp_ellint_3l&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/comp_ellint_3&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_i&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_i&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_if&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_i&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_il&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_i&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_j&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_j&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_jf&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_j&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_jl&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_j&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_k&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_k&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_kf&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_k&quot;},
{&quot;string&quot;: &quot;std::cyl_bessel_kl&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_bessel_k&quot;},
{&quot;string&quot;: &quot;std::cyl_neumann&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_neumann&quot;},
{&quot;string&quot;: &quot;std::cyl_neumannf&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_neumann&quot;},
{&quot;string&quot;: &quot;std::cyl_neumannl&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/cyl_neumann&quot;},
{&quot;string&quot;: &quot;std::ellint_1&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_1&quot;},
{&quot;string&quot;: &quot;std::ellint_1f&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_1&quot;},
{&quot;string&quot;: &quot;std::ellint_1l&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_1&quot;},
{&quot;string&quot;: &quot;std::ellint_2&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_2&quot;},
{&quot;string&quot;: &quot;std::ellint_2f&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_2&quot;},
{&quot;string&quot;: &quot;std::ellint_2l&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_2&quot;},
{&quot;string&quot;: &quot;std::ellint_3&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_3&quot;},
{&quot;string&quot;: &quot;std::ellint_3f&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_3&quot;},
{&quot;string&quot;: &quot;std::ellint_3l&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/ellint_3&quot;},
{&quot;string&quot;: &quot;std::expint&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/expint&quot;},
{&quot;string&quot;: &quot;std::expintf&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/expint&quot;},
{&quot;string&quot;: &quot;std::expintl&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/expint&quot;},
{&quot;string&quot;: &quot;std::hermite&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/hermite&quot;},
{&quot;string&quot;: &quot;std::hermitef&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/hermite&quot;},
{&quot;string&quot;: &quot;std::hermitel&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/hermite&quot;},
{&quot;string&quot;: &quot;std::laguerre&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/laguerre&quot;},
{&quot;string&quot;: &quot;std::laguerref&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/laguerre&quot;},
{&quot;string&quot;: &quot;std::laguerrel&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/laguerre&quot;},
{&quot;string&quot;: &quot;std::legendre&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/legendre&quot;},
{&quot;string&quot;: &quot;std::legendref&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/legendre&quot;},
{&quot;string&quot;: &quot;std::legendrel&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/legendre&quot;},
{&quot;string&quot;: &quot;std::riemann_zeta&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/riemann_zeta&quot;},
{&quot;string&quot;: &quot;std::riemann_zetaf&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/riemann_zeta&quot;},
{&quot;string&quot;: &quot;std::riemann_zetal&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/riemann_zeta&quot;},
{&quot;string&quot;: &quot;std::sph_bessel&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_bessel&quot;},
{&quot;string&quot;: &quot;std::sph_besself&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_bessel&quot;},
{&quot;string&quot;: &quot;std::sph_bessell&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_bessel&quot;},
{&quot;string&quot;: &quot;std::sph_legendre&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_legendre&quot;},
{&quot;string&quot;: &quot;std::sph_legendref&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_legendre&quot;},
{&quot;string&quot;: &quot;std::sph_legendrel&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_legendre&quot;},
{&quot;string&quot;: &quot;std::sph_neumann&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_neumann&quot;},
{&quot;string&quot;: &quot;std::sph_neumannf&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_neumann&quot;},
{&quot;string&quot;: &quot;std::sph_neumannl&quot;,
&quot;target&quot;: &quot;cpp/numeric/special_math/sph_neumann&quot;},
{&quot;string&quot;: &quot;std::valarray&quot;,
&quot;target&quot;: &quot;cpp/numeric/valarray&quot;},
{&quot;string&quot;: &quot;std::gslice&quot;,
&quot;target&quot;: &quot;cpp/numeric/valarray/gslice&quot;},
{&quot;string&quot;: &quot;std::gslice_array&quot;,
&quot;target&quot;: &quot;cpp/numeric/valarray/gslice_array&quot;},
{&quot;string&quot;: &quot;std::indirect_array&quot;,
&quot;target&quot;: &quot;cpp/numeric/valarray/indirect_array&quot;},
{&quot;string&quot;: &quot;std::mask_array&quot;,
&quot;target&quot;: &quot;cpp/numeric/valarray/mask_array&quot;},
{&quot;string&quot;: &quot;std::slice&quot;,
&quot;target&quot;: &quot;cpp/numeric/valarray/slice&quot;},
{&quot;string&quot;: &quot;std::slice_array&quot;,
&quot;target&quot;: &quot;cpp/numeric/valarray/slice_array&quot;},
{&quot;string&quot;: &quot;std::basic_regex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex&quot;},
{&quot;string&quot;: &quot;std::regex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex&quot;},
{&quot;string&quot;: &quot;std::wregex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex&quot;},
{&quot;string&quot;: &quot;std::basic_regex::assign&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/assign&quot;},
{&quot;on_group&quot;: &quot;std::basic_regex&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/assign&quot;},
{&quot;string&quot;: &quot;std::regex::assign&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/assign&quot;},
{&quot;string&quot;: &quot;std::wregex::assign&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/assign&quot;},
{&quot;string&quot;: &quot;std::basic_regex::basic_regex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/basic_regex&quot;},
{&quot;string&quot;: &quot;std::regex::regex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/basic_regex&quot;},
{&quot;string&quot;: &quot;std::wregex::wregex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/basic_regex&quot;},
{&quot;string&quot;: &quot;std::basic_regex::flags&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/flags&quot;},
{&quot;on_group&quot;: &quot;std::basic_regex&quot;,
&quot;string&quot;: &quot;flags&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/flags&quot;},
{&quot;string&quot;: &quot;std::regex::flags&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/flags&quot;},
{&quot;string&quot;: &quot;std::wregex::flags&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/flags&quot;},
{&quot;string&quot;: &quot;std::basic_regex::getloc&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/getloc&quot;},
{&quot;on_group&quot;: &quot;std::basic_regex&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/getloc&quot;},
{&quot;string&quot;: &quot;std::regex::getloc&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/getloc&quot;},
{&quot;string&quot;: &quot;std::wregex::getloc&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/getloc&quot;},
{&quot;string&quot;: &quot;std::basic_regex::imbue&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/imbue&quot;},
{&quot;on_group&quot;: &quot;std::basic_regex&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/imbue&quot;},
{&quot;string&quot;: &quot;std::regex::imbue&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/imbue&quot;},
{&quot;string&quot;: &quot;std::wregex::imbue&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/imbue&quot;},
{&quot;string&quot;: &quot;std::basic_regex::mark_count&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/mark_count&quot;},
{&quot;on_group&quot;: &quot;std::basic_regex&quot;,
&quot;string&quot;: &quot;mark_count&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/mark_count&quot;},
{&quot;string&quot;: &quot;std::regex::mark_count&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/mark_count&quot;},
{&quot;string&quot;: &quot;std::wregex::mark_count&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/mark_count&quot;},
{&quot;string&quot;: &quot;std::basic_regex::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_regex&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/operator=&quot;},
{&quot;string&quot;: &quot;std::regex::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/operator=&quot;},
{&quot;string&quot;: &quot;std::wregex::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_regex::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_regex&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/swap&quot;},
{&quot;string&quot;: &quot;std::regex::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/swap&quot;},
{&quot;string&quot;: &quot;std::wregex::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/swap&quot;},
{&quot;string&quot;: &quot;std::basic_regex::~basic_regex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/~basic_regex&quot;},
{&quot;string&quot;: &quot;std::regex::~regex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/~basic_regex&quot;},
{&quot;string&quot;: &quot;std::wregex::~wregex&quot;,
&quot;target&quot;: &quot;cpp/regex/basic_regex/~basic_regex&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_type&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_collate&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_ctype&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_escape&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_backref&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_brack&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_paren&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_brace&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_badbrace&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_range&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_space&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_badrepeat&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_complexity&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::error_stack&quot;,
&quot;target&quot;: &quot;cpp/regex/error_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_flag_type&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_default&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_not_bol&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_not_eol&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_not_bow&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_not_eow&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_any&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_not_null&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_continuous&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::match_prev_avail&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::format_default&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::format_sed&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::format_no_copy&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::format_first_only&quot;,
&quot;target&quot;: &quot;cpp/regex/match_flag_type&quot;},
{&quot;string&quot;: &quot;std::match_results&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results&quot;},
{&quot;string&quot;: &quot;std::cmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results&quot;},
{&quot;string&quot;: &quot;std::wcmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results&quot;},
{&quot;string&quot;: &quot;std::smatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results&quot;},
{&quot;string&quot;: &quot;std::wsmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results&quot;},
{&quot;string&quot;: &quot;std::match_results::begin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::match_results::cbegin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::cmatch::begin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::cmatch::cbegin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::wcmatch::begin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::wcmatch::cbegin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::smatch::begin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::smatch::cbegin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::wsmatch::begin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::wsmatch::cbegin&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/begin&quot;},
{&quot;string&quot;: &quot;std::match_results::empty&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/empty&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/empty&quot;},
{&quot;string&quot;: &quot;std::cmatch::empty&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/empty&quot;},
{&quot;string&quot;: &quot;std::wcmatch::empty&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/empty&quot;},
{&quot;string&quot;: &quot;std::smatch::empty&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/empty&quot;},
{&quot;string&quot;: &quot;std::wsmatch::empty&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/empty&quot;},
{&quot;string&quot;: &quot;std::match_results::end&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::match_results::cend&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::cmatch::end&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::cmatch::cend&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::wcmatch::end&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::wcmatch::cend&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::smatch::end&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::smatch::cend&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::wsmatch::end&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::wsmatch::cend&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/end&quot;},
{&quot;string&quot;: &quot;std::match_results::format&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/format&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;format&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/format&quot;},
{&quot;string&quot;: &quot;std::cmatch::format&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/format&quot;},
{&quot;string&quot;: &quot;std::wcmatch::format&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/format&quot;},
{&quot;string&quot;: &quot;std::smatch::format&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/format&quot;},
{&quot;string&quot;: &quot;std::wsmatch::format&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/format&quot;},
{&quot;string&quot;: &quot;std::match_results::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/get_allocator&quot;},
{&quot;string&quot;: &quot;std::cmatch::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/get_allocator&quot;},
{&quot;string&quot;: &quot;std::wcmatch::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/get_allocator&quot;},
{&quot;string&quot;: &quot;std::smatch::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/get_allocator&quot;},
{&quot;string&quot;: &quot;std::wsmatch::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/get_allocator&quot;},
{&quot;string&quot;: &quot;std::match_results::length&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/length&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/length&quot;},
{&quot;string&quot;: &quot;std::cmatch::length&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/length&quot;},
{&quot;string&quot;: &quot;std::wcmatch::length&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/length&quot;},
{&quot;string&quot;: &quot;std::smatch::length&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/length&quot;},
{&quot;string&quot;: &quot;std::wsmatch::length&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/length&quot;},
{&quot;string&quot;: &quot;std::match_results::match_results&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/match_results&quot;},
{&quot;string&quot;: &quot;std::cmatch::cmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/match_results&quot;},
{&quot;string&quot;: &quot;std::wcmatch::wcmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/match_results&quot;},
{&quot;string&quot;: &quot;std::smatch::smatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/match_results&quot;},
{&quot;string&quot;: &quot;std::wsmatch::wsmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/match_results&quot;},
{&quot;string&quot;: &quot;std::match_results::max_size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/max_size&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/max_size&quot;},
{&quot;string&quot;: &quot;std::cmatch::max_size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/max_size&quot;},
{&quot;string&quot;: &quot;std::wcmatch::max_size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/max_size&quot;},
{&quot;string&quot;: &quot;std::smatch::max_size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/max_size&quot;},
{&quot;string&quot;: &quot;std::wsmatch::max_size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/max_size&quot;},
{&quot;string&quot;: &quot;std::match_results::operator[]&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/operator_at&quot;},
{&quot;string&quot;: &quot;std::cmatch::operator[]&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/operator_at&quot;},
{&quot;string&quot;: &quot;std::wcmatch::operator[]&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/operator_at&quot;},
{&quot;string&quot;: &quot;std::smatch::operator[]&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/operator_at&quot;},
{&quot;string&quot;: &quot;std::wsmatch::operator[]&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/operator_at&quot;},
{&quot;string&quot;: &quot;std::match_results::position&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/position&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;position&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/position&quot;},
{&quot;string&quot;: &quot;std::cmatch::position&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/position&quot;},
{&quot;string&quot;: &quot;std::wcmatch::position&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/position&quot;},
{&quot;string&quot;: &quot;std::smatch::position&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/position&quot;},
{&quot;string&quot;: &quot;std::wsmatch::position&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/position&quot;},
{&quot;string&quot;: &quot;std::match_results::prefix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/prefix&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;prefix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/prefix&quot;},
{&quot;string&quot;: &quot;std::cmatch::prefix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/prefix&quot;},
{&quot;string&quot;: &quot;std::wcmatch::prefix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/prefix&quot;},
{&quot;string&quot;: &quot;std::smatch::prefix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/prefix&quot;},
{&quot;string&quot;: &quot;std::wsmatch::prefix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/prefix&quot;},
{&quot;string&quot;: &quot;std::match_results::ready&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/ready&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;ready&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/ready&quot;},
{&quot;string&quot;: &quot;std::cmatch::ready&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/ready&quot;},
{&quot;string&quot;: &quot;std::wcmatch::ready&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/ready&quot;},
{&quot;string&quot;: &quot;std::smatch::ready&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/ready&quot;},
{&quot;string&quot;: &quot;std::wsmatch::ready&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/ready&quot;},
{&quot;string&quot;: &quot;std::match_results::size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/size&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/size&quot;},
{&quot;string&quot;: &quot;std::cmatch::size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/size&quot;},
{&quot;string&quot;: &quot;std::wcmatch::size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/size&quot;},
{&quot;string&quot;: &quot;std::smatch::size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/size&quot;},
{&quot;string&quot;: &quot;std::wsmatch::size&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/size&quot;},
{&quot;string&quot;: &quot;std::match_results::str&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/str&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/str&quot;},
{&quot;string&quot;: &quot;std::cmatch::str&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/str&quot;},
{&quot;string&quot;: &quot;std::wcmatch::str&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/str&quot;},
{&quot;string&quot;: &quot;std::smatch::str&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/str&quot;},
{&quot;string&quot;: &quot;std::wsmatch::str&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/str&quot;},
{&quot;string&quot;: &quot;std::match_results::suffix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/suffix&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;suffix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/suffix&quot;},
{&quot;string&quot;: &quot;std::cmatch::suffix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/suffix&quot;},
{&quot;string&quot;: &quot;std::wcmatch::suffix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/suffix&quot;},
{&quot;string&quot;: &quot;std::smatch::suffix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/suffix&quot;},
{&quot;string&quot;: &quot;std::wsmatch::suffix&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/suffix&quot;},
{&quot;string&quot;: &quot;std::match_results::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/swap&quot;},
{&quot;on_group&quot;: &quot;std::match_results&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/swap&quot;},
{&quot;string&quot;: &quot;std::cmatch::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/swap&quot;},
{&quot;string&quot;: &quot;std::wcmatch::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/swap&quot;},
{&quot;string&quot;: &quot;std::smatch::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/swap&quot;},
{&quot;string&quot;: &quot;std::wsmatch::swap&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/swap&quot;},
{&quot;string&quot;: &quot;std::match_results::~match_results&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/~match_results&quot;},
{&quot;string&quot;: &quot;std::cmatch::~cmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/~match_results&quot;},
{&quot;string&quot;: &quot;std::wcmatch::~wcmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/~match_results&quot;},
{&quot;string&quot;: &quot;std::smatch::~smatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/~match_results&quot;},
{&quot;string&quot;: &quot;std::wsmatch::~wsmatch&quot;,
&quot;target&quot;: &quot;cpp/regex/match_results/~match_results&quot;},
{&quot;string&quot;: &quot;std::regex_error&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_error&quot;},
{&quot;string&quot;: &quot;std::regex_error::code&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_error/code&quot;},
{&quot;on_group&quot;: &quot;std::regex_error&quot;,
&quot;string&quot;: &quot;code&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_error/code&quot;},
{&quot;string&quot;: &quot;std::regex_error::regex_error&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_error/regex_error&quot;},
{&quot;string&quot;: &quot;std::regex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::regex_iterator&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::regex_iterator&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator=&quot;},
{&quot;on_group&quot;: &quot;std::regex_iterator&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::regex_iterator&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::regex_iterator&quot;,
&quot;string&quot;: &quot;operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::regex_iterator&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::regex_iterator&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::regex_iterator::regex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::cregex_iterator::cregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::wcregex_iterator::wcregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::sregex_iterator::sregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::wsregex_iterator::wsregex_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_iterator/regex_iterator&quot;},
{&quot;string&quot;: &quot;std::regex_match&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_match&quot;},
{&quot;string&quot;: &quot;std::regex_replace&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_replace&quot;},
{&quot;string&quot;: &quot;std::regex_search&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_search&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::regex_token_iterator&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;on_group&quot;: &quot;std::regex_token_iterator&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::operator*&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator*&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator=&quot;},
{&quot;on_group&quot;: &quot;std::regex_token_iterator&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::operator=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator=&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::regex_token_iterator&quot;,
&quot;string&quot;: &quot;operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;on_group&quot;: &quot;std::regex_token_iterator&quot;,
&quot;string&quot;: &quot;operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::operator++&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::operator++(int)&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_arith&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::regex_token_iterator&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::regex_token_iterator&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::operator==&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::operator!=&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::regex_token_iterator::regex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::cregex_token_iterator::cregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::wcregex_token_iterator::wcregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::sregex_token_iterator::sregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::wsregex_token_iterator::wsregex_token_iterator&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_token_iterator/regex_token_iterator&quot;},
{&quot;string&quot;: &quot;std::regex_traits&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits&quot;},
{&quot;string&quot;: &quot;std::regex_traits::getloc&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/getloc&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;getloc&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/getloc&quot;},
{&quot;string&quot;: &quot;std::regex_traits::imbue&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/imbue&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;imbue&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/imbue&quot;},
{&quot;string&quot;: &quot;std::regex_traits::isctype&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/isctype&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;isctype&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/isctype&quot;},
{&quot;string&quot;: &quot;std::regex_traits::length&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/length&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/length&quot;},
{&quot;string&quot;: &quot;std::regex_traits::lookup_classname&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/lookup_classname&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;lookup_classname&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/lookup_classname&quot;},
{&quot;string&quot;: &quot;std::regex_traits::lookup_collatename&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/lookup_collatename&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;lookup_collatename&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/lookup_collatename&quot;},
{&quot;string&quot;: &quot;std::regex_traits::regex_traits&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/regex_traits&quot;},
{&quot;string&quot;: &quot;std::regex_traits::transform&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/transform&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;transform&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/transform&quot;},
{&quot;string&quot;: &quot;std::regex_traits::transform_primary&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/transform_primary&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;transform_primary&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/transform_primary&quot;},
{&quot;string&quot;: &quot;std::regex_traits::translate&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/translate&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;translate&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/translate&quot;},
{&quot;string&quot;: &quot;std::regex_traits::translate_nocase&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/translate_nocase&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;translate_nocase&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/translate_nocase&quot;},
{&quot;string&quot;: &quot;std::regex_traits::value&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/value&quot;},
{&quot;on_group&quot;: &quot;std::regex_traits&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/regex/regex_traits/value&quot;},
{&quot;string&quot;: &quot;std::sub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match&quot;},
{&quot;string&quot;: &quot;std::csub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match&quot;},
{&quot;string&quot;: &quot;std::wcsub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match&quot;},
{&quot;string&quot;: &quot;std::ssub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match&quot;},
{&quot;string&quot;: &quot;std::wssub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match&quot;},
{&quot;string&quot;: &quot;std::sub_match::compare&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/compare&quot;},
{&quot;on_group&quot;: &quot;std::sub_match&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/compare&quot;},
{&quot;string&quot;: &quot;std::csub_match::compare&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/compare&quot;},
{&quot;string&quot;: &quot;std::wcsub_match::compare&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/compare&quot;},
{&quot;string&quot;: &quot;std::ssub_match::compare&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/compare&quot;},
{&quot;string&quot;: &quot;std::wssub_match::compare&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/compare&quot;},
{&quot;string&quot;: &quot;std::sub_match::length&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/length&quot;},
{&quot;on_group&quot;: &quot;std::sub_match&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/length&quot;},
{&quot;string&quot;: &quot;std::csub_match::length&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/length&quot;},
{&quot;string&quot;: &quot;std::wcsub_match::length&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/length&quot;},
{&quot;string&quot;: &quot;std::ssub_match::length&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/length&quot;},
{&quot;string&quot;: &quot;std::wssub_match::length&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/length&quot;},
{&quot;string&quot;: &quot;std::sub_match::str&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;on_group&quot;: &quot;std::sub_match&quot;,
&quot;string&quot;: &quot;str&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::sub_match::operator string_type&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;on_group&quot;: &quot;std::sub_match&quot;,
&quot;string&quot;: &quot;operator string_type&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::csub_match::str&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::csub_match::operator string_type&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::wcsub_match::str&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::wcsub_match::operator string_type&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::ssub_match::str&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::ssub_match::operator string_type&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::wssub_match::str&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::wssub_match::operator string_type&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/str&quot;},
{&quot;string&quot;: &quot;std::sub_match::sub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/sub_match&quot;},
{&quot;string&quot;: &quot;std::csub_match::csub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/sub_match&quot;},
{&quot;string&quot;: &quot;std::wcsub_match::wcsub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/sub_match&quot;},
{&quot;string&quot;: &quot;std::ssub_match::ssub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/sub_match&quot;},
{&quot;string&quot;: &quot;std::wssub_match::wssub_match&quot;,
&quot;target&quot;: &quot;cpp/regex/sub_match/sub_match&quot;},
{&quot;string&quot;: &quot;std::regex_constants::syntax_option_type&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::icase&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::nosubs&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::optimize&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::collate&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::ECMAScript&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::basic&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::extended&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::awk&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::grep&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::regex_constants::egrep&quot;,
&quot;target&quot;: &quot;cpp/regex/syntax_option_type&quot;},
{&quot;string&quot;: &quot;std::basic_string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::wstring&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::u16string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::u32string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string&quot;},
{&quot;string&quot;: &quot;std::basic_string::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::string::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::wstring::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::u16string::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::u32string::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::pmr::string::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::append&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/append&quot;},
{&quot;string&quot;: &quot;std::basic_string::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::string::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::wstring::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::u16string::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::u32string::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::string::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::assign&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/assign&quot;},
{&quot;string&quot;: &quot;std::basic_string::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::string::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::wstring::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::u16string::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::u32string::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::pmr::string::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/at&quot;},
{&quot;string&quot;: &quot;std::basic_string::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::string::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::wstring::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::u16string::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::u32string::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::pmr::string::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/back&quot;},
{&quot;string&quot;: &quot;std::basic_string::basic_string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::string::string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::wstring::wstring&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::u16string::u16string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::u32string::u32string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::string::string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::wstring&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::u16string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::u32string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/basic_string&quot;},
{&quot;string&quot;: &quot;std::basic_string::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::basic_string::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::string::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::string::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::wstring::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::wstring::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::u16string::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::u16string::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::u32string::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::u32string::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::string::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::string::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/begin&quot;},
{&quot;string&quot;: &quot;std::basic_string::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::string::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::wstring::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::u16string::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::u32string::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::pmr::string::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::c_str&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/c_str&quot;},
{&quot;string&quot;: &quot;std::basic_string::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::string::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::wstring::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::u16string::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::u32string::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::pmr::string::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::capacity&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/capacity&quot;},
{&quot;string&quot;: &quot;std::basic_string::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::string::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::wstring::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::u16string::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::u32string::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::string::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::clear&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/clear&quot;},
{&quot;string&quot;: &quot;std::basic_string::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::string::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::wstring::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::u16string::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::u32string::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::pmr::string::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/compare&quot;},
{&quot;string&quot;: &quot;std::basic_string::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::string::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::wstring::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::u16string::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::u32string::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::pmr::string::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/copy&quot;},
{&quot;string&quot;: &quot;std::basic_string::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::string::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::wstring::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::u16string::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::u32string::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::pmr::string::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/data&quot;},
{&quot;string&quot;: &quot;std::basic_string::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::string::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::wstring::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::u16string::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::u32string::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::string::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/empty&quot;},
{&quot;string&quot;: &quot;std::basic_string::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::basic_string::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::string::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::string::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::wstring::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::wstring::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::u16string::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::u16string::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::u32string::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::u32string::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::string::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::string::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/end&quot;},
{&quot;string&quot;: &quot;std::basic_string::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::string::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::wstring::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::u16string::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::u32string::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::string::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::erase&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/erase&quot;},
{&quot;string&quot;: &quot;std::basic_string::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::string::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::wstring::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::u16string::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::u32string::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::pmr::string::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find&quot;},
{&quot;string&quot;: &quot;std::basic_string::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::string::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::wstring::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::u16string::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::u32string::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::string::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::basic_string::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::string::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::wstring::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::u16string::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::u32string::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::pmr::string::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_first_of&quot;},
{&quot;string&quot;: &quot;std::basic_string::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::string::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::wstring::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::u16string::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::u32string::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::string::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::basic_string::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::string::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::wstring::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::u16string::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::u32string::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::pmr::string::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/find_last_of&quot;},
{&quot;string&quot;: &quot;std::basic_string::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::string::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::wstring::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::u16string::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::u32string::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::pmr::string::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/front&quot;},
{&quot;string&quot;: &quot;std::basic_string::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::string::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::wstring::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::u16string::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::u32string::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::string::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::get_allocator&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/get_allocator&quot;},
{&quot;string&quot;: &quot;std::getline&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/getline&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::basic_string&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::string&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::wstring&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::u16string&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::u32string&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::pmr::string&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::pmr::wstring&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::pmr::u16string&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::pmr::u32string&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/hash&quot;},
{&quot;string&quot;: &quot;std::basic_string::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::string::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::wstring::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::u16string::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::u32string::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::string::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::insert&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/insert&quot;},
{&quot;string&quot;: &quot;std::basic_string::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::string::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::wstring::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::u16string::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::u32string::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::string::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/max_size&quot;},
{&quot;string&quot;: &quot;std::basic_string::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::string::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::wstring::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::u16string::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::u32string::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::pmr::string::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/npos&quot;},
{&quot;string&quot;: &quot;operator+(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;operator+(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator+&quot;},
{&quot;string&quot;: &quot;std::basic_string::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::string::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::wstring::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::u16string::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::u32string::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::string::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_string::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::string::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::wstring::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::u16string::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::u32string::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::string::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::basic_string::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::string::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::wstring::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::u16string::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::u32string::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::pmr::string::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::pop_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/pop_back&quot;},
{&quot;string&quot;: &quot;std::basic_string::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::string::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::wstring::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::u16string::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::u32string::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::pmr::string::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::push_back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/push_back&quot;},
{&quot;string&quot;: &quot;std::basic_string::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::basic_string::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::string::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::string::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::wstring::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::wstring::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::u16string::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::u16string::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::u32string::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::u32string::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::string::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::string::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rbegin&quot;},
{&quot;string&quot;: &quot;std::basic_string::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::basic_string::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::string::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::string::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::wstring::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::wstring::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::u16string::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::u16string::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::u32string::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::u32string::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::string::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::string::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rend&quot;},
{&quot;string&quot;: &quot;std::basic_string::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::string::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::wstring::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::u16string::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::u32string::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::pmr::string::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::replace&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/replace&quot;},
{&quot;string&quot;: &quot;std::basic_string::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::string::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::wstring::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::u16string::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::u32string::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::string::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::reserve&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/reserve&quot;},
{&quot;string&quot;: &quot;std::basic_string::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::string::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::wstring::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::u16string::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::u32string::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::string::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::resize&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/resize&quot;},
{&quot;string&quot;: &quot;std::basic_string::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::string::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::wstring::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::u16string::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::u32string::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::pmr::string::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/rfind&quot;},
{&quot;string&quot;: &quot;std::basic_string::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::string::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::wstring::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::u16string::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::u32string::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::pmr::string::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::shrink_to_fit&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/shrink_to_fit&quot;},
{&quot;string&quot;: &quot;std::basic_string::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::basic_string::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::string::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::string::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::wstring::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::wstring::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::u16string::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::u16string::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::u32string::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::u32string::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::string::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::string::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/size&quot;},
{&quot;string&quot;: &quot;std::stof&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stof&quot;},
{&quot;string&quot;: &quot;std::stod&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stof&quot;},
{&quot;string&quot;: &quot;std::stold&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stof&quot;},
{&quot;string&quot;: &quot;std::stoi&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stol&quot;},
{&quot;string&quot;: &quot;std::stol&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stol&quot;},
{&quot;string&quot;: &quot;std::stoll&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stol&quot;},
{&quot;string&quot;: &quot;std::stoul&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stoul&quot;},
{&quot;string&quot;: &quot;std::stoull&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/stoul&quot;},
{&quot;string&quot;: &quot;std::basic_string::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::string::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::wstring::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::u16string::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::u32string::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::pmr::string::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/substr&quot;},
{&quot;string&quot;: &quot;std::basic_string::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_string&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::string::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::wstring::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::u16string::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::u32string::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::string::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::wstring::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::u16string::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::pmr::u32string::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::basic_string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::wstring)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::u16string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::swap(std::pmr::u32string)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/swap2&quot;},
{&quot;string&quot;: &quot;std::to_string&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/to_string&quot;},
{&quot;string&quot;: &quot;std::to_wstring&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string/to_wstring&quot;},
{&quot;string&quot;: &quot;std::basic_string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::wstring_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::u16string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::u32string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/at&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::string_view::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::wstring_view::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::u16string_view::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::u32string_view::at&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/at&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/back&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::string_view::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::wstring_view::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::u16string_view::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::u32string_view::back&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/back&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::basic_string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::string_view::string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::wstring_view::wstring_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::u16string_view::u16string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::u32string_view::u32string_view&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/basic_string_view&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::wstring_view::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::wstring_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::u16string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::u16string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::u32string_view::begin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::u32string_view::cbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/begin&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/compare&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::wstring_view::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::u16string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::u32string_view::compare&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/compare&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/copy&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::wstring_view::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::u16string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::u32string_view::copy&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/copy&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/data&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::string_view::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::wstring_view::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::u16string_view::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::u32string_view::data&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/data&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/empty&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::wstring_view::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::u16string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::u32string_view::empty&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/empty&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::string_view::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::wstring_view::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::wstring_view::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::u16string_view::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::u16string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::u32string_view::end&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::u32string_view::cend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/end&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::string_view::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::wstring_view::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::u16string_view::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::u32string_view::find&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_not_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::wstring_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::u16string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::u32string_view::find_first_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_not_of&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::wstring_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::u16string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::u32string_view::find_first_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_first_of&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_not_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::wstring_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::u16string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::u32string_view::find_last_not_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_not_of&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_of&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::wstring_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::u16string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::u32string_view::find_last_of&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/find_last_of&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/front&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::string_view::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::wstring_view::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::u16string_view::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::u32string_view::front&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/front&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::basic_string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::wstring_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::u16string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::u32string_view&gt;&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/hash&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/max_size&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::wstring_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::u16string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::u32string_view::max_size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/max_size&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/npos&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::wstring_view::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::u16string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::u32string_view::npos&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/npos&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator=&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::wstring_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::u16string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::u32string_view::operator=&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator=&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::wstring_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::u16string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;std::u32string_view::operator[]&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_at&quot;},
{&quot;string&quot;: &quot;operator==(std::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator==(std::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::basic_string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_ltlt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_ltlt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::wstring_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_ltlt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::u16string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_ltlt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::u32string_view)&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::wstring_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::wstring_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::u16string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::u16string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::u32string_view::rbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::u32string_view::crbegin&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rbegin&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_prefix&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::wstring_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::u16string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::u32string_view::remove_prefix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_prefix&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_suffix&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::wstring_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::u16string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::u32string_view::remove_suffix&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/remove_suffix&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::wstring_view::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::wstring_view::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::u16string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::u16string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::u32string_view::rend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::u32string_view::crend&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rend&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rfind&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::wstring_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::u16string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::u32string_view::rfind&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/rfind&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::string_view::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::string_view::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::wstring_view::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::wstring_view::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::u16string_view::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::u16string_view::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::u32string_view::size&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::u32string_view::length&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/size&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/substr&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::wstring_view::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::u16string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::u32string_view::substr&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/substr&quot;},
{&quot;string&quot;: &quot;std::basic_string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/swap&quot;},
{&quot;on_group&quot;: &quot;std::basic_string_view&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::wstring_view::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::u16string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::u32string_view::swap&quot;,
&quot;target&quot;: &quot;cpp/string/basic_string_view/swap&quot;},
{&quot;string&quot;: &quot;std::atof&quot;,
&quot;target&quot;: &quot;cpp/string/byte/atof&quot;},
{&quot;string&quot;: &quot;std::atoi&quot;,
&quot;target&quot;: &quot;cpp/string/byte/atoi&quot;},
{&quot;string&quot;: &quot;std::atol&quot;,
&quot;target&quot;: &quot;cpp/string/byte/atoi&quot;},
{&quot;string&quot;: &quot;std::atoll&quot;,
&quot;target&quot;: &quot;cpp/string/byte/atoi&quot;},
{&quot;string&quot;: &quot;std::isalnum (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isalnum&quot;},
{&quot;string&quot;: &quot;std::isalpha (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isalpha&quot;},
{&quot;string&quot;: &quot;std::isblank (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isblank&quot;},
{&quot;string&quot;: &quot;std::iscntrl (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/iscntrl&quot;},
{&quot;string&quot;: &quot;std::isdigit (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isdigit&quot;},
{&quot;string&quot;: &quot;std::isgraph (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isgraph&quot;},
{&quot;string&quot;: &quot;std::islower (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/islower&quot;},
{&quot;string&quot;: &quot;std::isprint (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isprint&quot;},
{&quot;string&quot;: &quot;std::ispunct (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/ispunct&quot;},
{&quot;string&quot;: &quot;std::isspace (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isspace&quot;},
{&quot;string&quot;: &quot;std::isupper (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isupper&quot;},
{&quot;string&quot;: &quot;std::isxdigit (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/isxdigit&quot;},
{&quot;string&quot;: &quot;std::memchr&quot;,
&quot;target&quot;: &quot;cpp/string/byte/memchr&quot;},
{&quot;string&quot;: &quot;std::memcmp&quot;,
&quot;target&quot;: &quot;cpp/string/byte/memcmp&quot;},
{&quot;string&quot;: &quot;std::memcpy&quot;,
&quot;target&quot;: &quot;cpp/string/byte/memcpy&quot;},
{&quot;string&quot;: &quot;std::memmove&quot;,
&quot;target&quot;: &quot;cpp/string/byte/memmove&quot;},
{&quot;string&quot;: &quot;std::memset&quot;,
&quot;target&quot;: &quot;cpp/string/byte/memset&quot;},
{&quot;string&quot;: &quot;std::strcat&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strcat&quot;},
{&quot;string&quot;: &quot;std::strchr&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strchr&quot;},
{&quot;string&quot;: &quot;std::strcmp&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strcmp&quot;},
{&quot;string&quot;: &quot;std::strcoll&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strcoll&quot;},
{&quot;string&quot;: &quot;std::strcpy&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strcpy&quot;},
{&quot;string&quot;: &quot;std::strcspn&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strcspn&quot;},
{&quot;string&quot;: &quot;std::strerror&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strerror&quot;},
{&quot;string&quot;: &quot;std::strlen&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strlen&quot;},
{&quot;string&quot;: &quot;std::strncat&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strncat&quot;},
{&quot;string&quot;: &quot;std::strncmp&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strncmp&quot;},
{&quot;string&quot;: &quot;std::strncpy&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strncpy&quot;},
{&quot;string&quot;: &quot;std::strpbrk&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strpbrk&quot;},
{&quot;string&quot;: &quot;std::strrchr&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strrchr&quot;},
{&quot;string&quot;: &quot;std::strspn&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strspn&quot;},
{&quot;string&quot;: &quot;std::strstr&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strstr&quot;},
{&quot;string&quot;: &quot;std::strtof&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtof&quot;},
{&quot;string&quot;: &quot;std::strtod&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtof&quot;},
{&quot;string&quot;: &quot;std::strtold&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtof&quot;},
{&quot;string&quot;: &quot;std::strtoimax&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtoimax&quot;},
{&quot;string&quot;: &quot;std::strtoumax&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtoimax&quot;},
{&quot;string&quot;: &quot;std::strtok&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtok&quot;},
{&quot;string&quot;: &quot;std::strtol&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtol&quot;},
{&quot;string&quot;: &quot;std::strtoll&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtol&quot;},
{&quot;string&quot;: &quot;std::strtoul&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtoul&quot;},
{&quot;string&quot;: &quot;std::strtoull&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strtoul&quot;},
{&quot;string&quot;: &quot;std::strxfrm&quot;,
&quot;target&quot;: &quot;cpp/string/byte/strxfrm&quot;},
{&quot;string&quot;: &quot;std::tolower (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/tolower&quot;},
{&quot;string&quot;: &quot;std::toupper (&lt;cctype&gt;)&quot;,
&quot;target&quot;: &quot;cpp/string/byte/toupper&quot;},
{&quot;string&quot;: &quot;std::char_traits&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits&quot;},
{&quot;string&quot;: &quot;std::char_traits::assign&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/assign&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/assign&quot;},
{&quot;string&quot;: &quot;std::char_traits::eq&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/cmp&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;eq&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/cmp&quot;},
{&quot;string&quot;: &quot;std::char_traits::lt&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/cmp&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;lt&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/cmp&quot;},
{&quot;string&quot;: &quot;std::char_traits::compare&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/compare&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;compare&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/compare&quot;},
{&quot;string&quot;: &quot;std::char_traits::copy&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/copy&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;copy&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/copy&quot;},
{&quot;string&quot;: &quot;std::char_traits::eof&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/eof&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;eof&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/eof&quot;},
{&quot;string&quot;: &quot;std::char_traits::eq_int_type&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/eq_int_type&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;eq_int_type&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/eq_int_type&quot;},
{&quot;string&quot;: &quot;std::char_traits::find&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/find&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;find&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/find&quot;},
{&quot;string&quot;: &quot;std::char_traits::length&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/length&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;length&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/length&quot;},
{&quot;string&quot;: &quot;std::char_traits::move&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/move&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;move&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/move&quot;},
{&quot;string&quot;: &quot;std::char_traits::not_eof&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/not_eof&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;not_eof&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/not_eof&quot;},
{&quot;string&quot;: &quot;std::char_traits::to_char_type&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/to_char_type&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;to_char_type&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/to_char_type&quot;},
{&quot;string&quot;: &quot;std::char_traits::to_int_type&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/to_int_type&quot;},
{&quot;on_group&quot;: &quot;std::char_traits&quot;,
&quot;string&quot;: &quot;to_int_type&quot;,
&quot;target&quot;: &quot;cpp/string/char_traits/to_int_type&quot;},
{&quot;string&quot;: &quot;std::btowc&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/btowc&quot;},
{&quot;string&quot;: &quot;std::c16rtomb&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/c16rtomb&quot;},
{&quot;string&quot;: &quot;std::c32rtomb&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/c32rtomb&quot;},
{&quot;string&quot;: &quot;std::mblen&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mblen&quot;},
{&quot;string&quot;: &quot;std::mbrlen&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbrlen&quot;},
{&quot;string&quot;: &quot;std::mbrtoc16&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbrtoc16&quot;},
{&quot;string&quot;: &quot;std::mbrtoc32&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbrtoc32&quot;},
{&quot;string&quot;: &quot;std::mbrtowc&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbrtowc&quot;},
{&quot;string&quot;: &quot;std::mbsinit&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbsinit&quot;},
{&quot;string&quot;: &quot;std::mbsrtowcs&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbsrtowcs&quot;},
{&quot;string&quot;: &quot;std::mbstate_t&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbstate_t&quot;},
{&quot;string&quot;: &quot;std::mbstowcs&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbstowcs&quot;},
{&quot;string&quot;: &quot;std::mbtowc&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/mbtowc&quot;},
{&quot;string&quot;: &quot;std::wcrtomb&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/wcrtomb&quot;},
{&quot;string&quot;: &quot;std::wcsrtombs&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/wcsrtombs&quot;},
{&quot;string&quot;: &quot;std::wcstombs&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/wcstombs&quot;},
{&quot;string&quot;: &quot;std::wctob&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/wctob&quot;},
{&quot;string&quot;: &quot;std::wctomb&quot;,
&quot;target&quot;: &quot;cpp/string/multibyte/wctomb&quot;},
{&quot;string&quot;: &quot;std::iswalnum&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswalnum&quot;},
{&quot;string&quot;: &quot;std::iswalpha&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswalpha&quot;},
{&quot;string&quot;: &quot;std::iswblank&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswblank&quot;},
{&quot;string&quot;: &quot;std::iswcntrl&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswcntrl&quot;},
{&quot;string&quot;: &quot;std::iswctype&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswctype&quot;},
{&quot;string&quot;: &quot;std::iswdigit&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswdigit&quot;},
{&quot;string&quot;: &quot;std::iswgraph&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswgraph&quot;},
{&quot;string&quot;: &quot;std::iswlower&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswlower&quot;},
{&quot;string&quot;: &quot;std::iswprint&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswprint&quot;},
{&quot;string&quot;: &quot;std::iswpunct&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswpunct&quot;},
{&quot;string&quot;: &quot;std::iswspace&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswspace&quot;},
{&quot;string&quot;: &quot;std::iswupper&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswupper&quot;},
{&quot;string&quot;: &quot;std::iswxdigit&quot;,
&quot;target&quot;: &quot;cpp/string/wide/iswxdigit&quot;},
{&quot;string&quot;: &quot;std::towctrans&quot;,
&quot;target&quot;: &quot;cpp/string/wide/towctrans&quot;},
{&quot;string&quot;: &quot;std::towlower&quot;,
&quot;target&quot;: &quot;cpp/string/wide/towlower&quot;},
{&quot;string&quot;: &quot;std::towupper&quot;,
&quot;target&quot;: &quot;cpp/string/wide/towupper&quot;},
{&quot;string&quot;: &quot;std::wcscat&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcscat&quot;},
{&quot;string&quot;: &quot;std::wcschr&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcschr&quot;},
{&quot;string&quot;: &quot;std::wcscmp&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcscmp&quot;},
{&quot;string&quot;: &quot;std::wcscoll&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcscoll&quot;},
{&quot;string&quot;: &quot;std::wcscpy&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcscpy&quot;},
{&quot;string&quot;: &quot;std::wcscspn&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcscspn&quot;},
{&quot;string&quot;: &quot;std::wcslen&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcslen&quot;},
{&quot;string&quot;: &quot;std::wcsncat&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcsncat&quot;},
{&quot;string&quot;: &quot;std::wcsncmp&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcsncmp&quot;},
{&quot;string&quot;: &quot;std::wcsncpy&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcsncpy&quot;},
{&quot;string&quot;: &quot;std::wcspbrk&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcspbrk&quot;},
{&quot;string&quot;: &quot;std::wcsrchr&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcsrchr&quot;},
{&quot;string&quot;: &quot;std::wcsspn&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcsspn&quot;},
{&quot;string&quot;: &quot;std::wcsstr&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcsstr&quot;},
{&quot;string&quot;: &quot;std::wcstof&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstof&quot;},
{&quot;string&quot;: &quot;std::wcstod&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstof&quot;},
{&quot;string&quot;: &quot;std::wcstold&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstof&quot;},
{&quot;string&quot;: &quot;std::wcstoimax&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstoimax&quot;},
{&quot;string&quot;: &quot;std::wcstoumax&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstoimax&quot;},
{&quot;string&quot;: &quot;std::wcstok&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstok&quot;},
{&quot;string&quot;: &quot;std::wcstol&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstol&quot;},
{&quot;string&quot;: &quot;std::wcstoll&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstol&quot;},
{&quot;string&quot;: &quot;std::wcstoul&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstoul&quot;},
{&quot;string&quot;: &quot;std::wcstoull&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcstoul&quot;},
{&quot;string&quot;: &quot;std::wcsxfrm&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wcsxfrm&quot;},
{&quot;string&quot;: &quot;std::wctrans&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wctrans&quot;},
{&quot;string&quot;: &quot;std::wctype&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wctype&quot;},
{&quot;string&quot;: &quot;std::wmemchr&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wmemchr&quot;},
{&quot;string&quot;: &quot;std::wmemcmp&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wmemcmp&quot;},
{&quot;string&quot;: &quot;std::wmemcpy&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wmemcpy&quot;},
{&quot;string&quot;: &quot;std::wmemmove&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wmemmove&quot;},
{&quot;string&quot;: &quot;std::wmemset&quot;,
&quot;target&quot;: &quot;cpp/string/wide/wmemset&quot;},
{&quot;string&quot;: &quot;std::async&quot;,
&quot;target&quot;: &quot;cpp/thread/async&quot;},
{&quot;string&quot;: &quot;std::call_once&quot;,
&quot;target&quot;: &quot;cpp/thread/call_once&quot;},
{&quot;string&quot;: &quot;std::condition_variable&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable&quot;},
{&quot;string&quot;: &quot;std::condition_variable::condition_variable&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/condition_variable&quot;},
{&quot;string&quot;: &quot;std::condition_variable::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/native_handle&quot;},
{&quot;string&quot;: &quot;std::condition_variable::notify_all&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/notify_all&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable&quot;,
&quot;string&quot;: &quot;notify_all&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/notify_all&quot;},
{&quot;string&quot;: &quot;std::condition_variable::notify_one&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/notify_one&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable&quot;,
&quot;string&quot;: &quot;notify_one&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/notify_one&quot;},
{&quot;string&quot;: &quot;std::condition_variable::wait&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/wait&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable&quot;,
&quot;string&quot;: &quot;wait&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/wait&quot;},
{&quot;string&quot;: &quot;std::condition_variable::wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/wait_for&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable&quot;,
&quot;string&quot;: &quot;wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/wait_for&quot;},
{&quot;string&quot;: &quot;std::condition_variable::wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/wait_until&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable&quot;,
&quot;string&quot;: &quot;wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/wait_until&quot;},
{&quot;string&quot;: &quot;std::condition_variable::~condition_variable&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable/~condition_variable&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::condition_variable_any&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/condition_variable_any&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable_any&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/native_handle&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::notify_all&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/notify_all&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable_any&quot;,
&quot;string&quot;: &quot;notify_all&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/notify_all&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::notify_one&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/notify_one&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable_any&quot;,
&quot;string&quot;: &quot;notify_one&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/notify_one&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::wait&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/wait&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable_any&quot;,
&quot;string&quot;: &quot;wait&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/wait&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/wait_for&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable_any&quot;,
&quot;string&quot;: &quot;wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/wait_for&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/wait_until&quot;},
{&quot;on_group&quot;: &quot;std::condition_variable_any&quot;,
&quot;string&quot;: &quot;wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/wait_until&quot;},
{&quot;string&quot;: &quot;std::condition_variable_any::~condition_variable_any&quot;,
&quot;target&quot;: &quot;cpp/thread/condition_variable_any/~condition_variable_any&quot;},
{&quot;string&quot;: &quot;std::cv_status&quot;,
&quot;target&quot;: &quot;cpp/thread/cv_status&quot;},
{&quot;string&quot;: &quot;std::cv_status::no_timeout&quot;,
&quot;target&quot;: &quot;cpp/thread/cv_status&quot;},
{&quot;on_group&quot;: &quot;std::cv_status&quot;,
&quot;string&quot;: &quot;no_timeout&quot;,
&quot;target&quot;: &quot;cpp/thread/cv_status&quot;},
{&quot;string&quot;: &quot;std::cv_status::timeout&quot;,
&quot;target&quot;: &quot;cpp/thread/cv_status&quot;},
{&quot;on_group&quot;: &quot;std::cv_status&quot;,
&quot;string&quot;: &quot;timeout&quot;,
&quot;target&quot;: &quot;cpp/thread/cv_status&quot;},
{&quot;string&quot;: &quot;std::future&quot;,
&quot;target&quot;: &quot;cpp/thread/future&quot;},
{&quot;string&quot;: &quot;std::future::future&quot;,
&quot;target&quot;: &quot;cpp/thread/future/future&quot;},
{&quot;string&quot;: &quot;std::future_category&quot;,
&quot;target&quot;: &quot;cpp/thread/future/future_category&quot;},
{&quot;string&quot;: &quot;std::future::get&quot;,
&quot;target&quot;: &quot;cpp/thread/future/get&quot;},
{&quot;on_group&quot;: &quot;std::future&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/thread/future/get&quot;},
{&quot;string&quot;: &quot;std::future::operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/future/operator=&quot;},
{&quot;on_group&quot;: &quot;std::future&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/future/operator=&quot;},
{&quot;string&quot;: &quot;std::future::share&quot;,
&quot;target&quot;: &quot;cpp/thread/future/share&quot;},
{&quot;on_group&quot;: &quot;std::future&quot;,
&quot;string&quot;: &quot;share&quot;,
&quot;target&quot;: &quot;cpp/thread/future/share&quot;},
{&quot;string&quot;: &quot;std::future::valid&quot;,
&quot;target&quot;: &quot;cpp/thread/future/valid&quot;},
{&quot;on_group&quot;: &quot;std::future&quot;,
&quot;string&quot;: &quot;valid&quot;,
&quot;target&quot;: &quot;cpp/thread/future/valid&quot;},
{&quot;string&quot;: &quot;std::future::wait&quot;,
&quot;target&quot;: &quot;cpp/thread/future/wait&quot;},
{&quot;on_group&quot;: &quot;std::future&quot;,
&quot;string&quot;: &quot;wait&quot;,
&quot;target&quot;: &quot;cpp/thread/future/wait&quot;},
{&quot;string&quot;: &quot;std::future::wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/future/wait_for&quot;},
{&quot;on_group&quot;: &quot;std::future&quot;,
&quot;string&quot;: &quot;wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/future/wait_for&quot;},
{&quot;string&quot;: &quot;std::future::wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/future/wait_until&quot;},
{&quot;on_group&quot;: &quot;std::future&quot;,
&quot;string&quot;: &quot;wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/future/wait_until&quot;},
{&quot;string&quot;: &quot;std::future::~future&quot;,
&quot;target&quot;: &quot;cpp/thread/future/~future&quot;},
{&quot;string&quot;: &quot;std::future_category&quot;,
&quot;target&quot;: &quot;cpp/thread/future_category&quot;},
{&quot;string&quot;: &quot;std::future_errc&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;string&quot;: &quot;std::future_errc::broken_promise&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;on_group&quot;: &quot;std::future_errc&quot;,
&quot;string&quot;: &quot;broken_promise&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;string&quot;: &quot;std::future_errc::future_already_retrieved&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;on_group&quot;: &quot;std::future_errc&quot;,
&quot;string&quot;: &quot;future_already_retrieved&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;string&quot;: &quot;std::future_errc::promise_already_satisfied&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;on_group&quot;: &quot;std::future_errc&quot;,
&quot;string&quot;: &quot;promise_already_satisfied&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;string&quot;: &quot;std::future_errc::no_state&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;on_group&quot;: &quot;std::future_errc&quot;,
&quot;string&quot;: &quot;no_state&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc&quot;},
{&quot;string&quot;: &quot;std::is_error_code_enum&lt;std::future_errc&gt;&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc/is_error_code_enum&quot;},
{&quot;string&quot;: &quot;std::make_error_code(std::future_errc)&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc/make_error_code&quot;},
{&quot;string&quot;: &quot;std::make_error_condition(std::future_errc)&quot;,
&quot;target&quot;: &quot;cpp/thread/future_errc/make_error_condition&quot;},
{&quot;string&quot;: &quot;std::future_error&quot;,
&quot;target&quot;: &quot;cpp/thread/future_error&quot;},
{&quot;string&quot;: &quot;std::future_error::code&quot;,
&quot;target&quot;: &quot;cpp/thread/future_error/code&quot;},
{&quot;on_group&quot;: &quot;std::future_error&quot;,
&quot;string&quot;: &quot;code&quot;,
&quot;target&quot;: &quot;cpp/thread/future_error/code&quot;},
{&quot;string&quot;: &quot;std::future_error::future_error&quot;,
&quot;target&quot;: &quot;cpp/thread/future_error/future_error&quot;},
{&quot;string&quot;: &quot;std::future_error::what&quot;,
&quot;target&quot;: &quot;cpp/thread/future_error/what&quot;},
{&quot;on_group&quot;: &quot;std::future_error&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/thread/future_error/what&quot;},
{&quot;string&quot;: &quot;std::future_status&quot;,
&quot;target&quot;: &quot;cpp/thread/future_status&quot;},
{&quot;string&quot;: &quot;std::future_status::ready&quot;,
&quot;target&quot;: &quot;cpp/thread/future_status&quot;},
{&quot;on_group&quot;: &quot;std::future_status&quot;,
&quot;string&quot;: &quot;ready&quot;,
&quot;target&quot;: &quot;cpp/thread/future_status&quot;},
{&quot;string&quot;: &quot;std::future_status::timeout&quot;,
&quot;target&quot;: &quot;cpp/thread/future_status&quot;},
{&quot;on_group&quot;: &quot;std::future_status&quot;,
&quot;string&quot;: &quot;timeout&quot;,
&quot;target&quot;: &quot;cpp/thread/future_status&quot;},
{&quot;string&quot;: &quot;std::future_status::deferred&quot;,
&quot;target&quot;: &quot;cpp/thread/future_status&quot;},
{&quot;on_group&quot;: &quot;std::future_status&quot;,
&quot;string&quot;: &quot;deferred&quot;,
&quot;target&quot;: &quot;cpp/thread/future_status&quot;},
{&quot;string&quot;: &quot;std::this_thread::get_id&quot;,
&quot;target&quot;: &quot;cpp/thread/get_id&quot;},
{&quot;string&quot;: &quot;std::hardware_constructive_interference_size&quot;,
&quot;target&quot;: &quot;cpp/thread/hardware_destructive_interference_size&quot;},
{&quot;string&quot;: &quot;std::hardware_destructive_interference_size&quot;,
&quot;target&quot;: &quot;cpp/thread/hardware_destructive_interference_size&quot;},
{&quot;string&quot;: &quot;std::launch&quot;,
&quot;target&quot;: &quot;cpp/thread/launch&quot;},
{&quot;string&quot;: &quot;std::launch::async&quot;,
&quot;target&quot;: &quot;cpp/thread/launch&quot;},
{&quot;on_group&quot;: &quot;std::launch&quot;,
&quot;string&quot;: &quot;async&quot;,
&quot;target&quot;: &quot;cpp/thread/launch&quot;},
{&quot;string&quot;: &quot;std::launch::deferred&quot;,
&quot;target&quot;: &quot;cpp/thread/launch&quot;},
{&quot;on_group&quot;: &quot;std::launch&quot;,
&quot;string&quot;: &quot;deferred&quot;,
&quot;target&quot;: &quot;cpp/thread/launch&quot;},
{&quot;string&quot;: &quot;std::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/lock&quot;},
{&quot;string&quot;: &quot;std::lock_guard&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_guard&quot;},
{&quot;string&quot;: &quot;std::lock_guard::lock_guard&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_guard/lock_guard&quot;},
{&quot;string&quot;: &quot;std::lock_guard::~lock_guard&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_guard/~lock_guard&quot;},
{&quot;string&quot;: &quot;std::defer_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_tag&quot;},
{&quot;string&quot;: &quot;std::try_to_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_tag&quot;},
{&quot;string&quot;: &quot;std::adopt_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_tag&quot;},
{&quot;string&quot;: &quot;std::defer_lock_t&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_tag_t&quot;},
{&quot;string&quot;: &quot;std::try_to_lock_t&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_tag_t&quot;},
{&quot;string&quot;: &quot;std::adopt_lock_t&quot;,
&quot;target&quot;: &quot;cpp/thread/lock_tag_t&quot;},
{&quot;string&quot;: &quot;std::mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex&quot;},
{&quot;string&quot;: &quot;std::mutex::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/lock&quot;},
{&quot;on_group&quot;: &quot;std::mutex&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/lock&quot;},
{&quot;string&quot;: &quot;std::mutex::mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/mutex&quot;},
{&quot;string&quot;: &quot;std::mutex::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::mutex&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/native_handle&quot;},
{&quot;string&quot;: &quot;std::mutex::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::mutex&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/try_lock&quot;},
{&quot;string&quot;: &quot;std::mutex::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/unlock&quot;},
{&quot;on_group&quot;: &quot;std::mutex&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/mutex/unlock&quot;},
{&quot;string&quot;: &quot;std::notify_all_at_thread_exit&quot;,
&quot;target&quot;: &quot;cpp/thread/notify_all_at_thread_exit&quot;},
{&quot;string&quot;: &quot;std::once_flag&quot;,
&quot;target&quot;: &quot;cpp/thread/once_flag&quot;},
{&quot;string&quot;: &quot;std::once_flag::once_flag&quot;,
&quot;target&quot;: &quot;cpp/thread/once_flag&quot;},
{&quot;string&quot;: &quot;std::packaged_task&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task&quot;},
{&quot;string&quot;: &quot;std::packaged_task::get_future&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/get_future&quot;},
{&quot;on_group&quot;: &quot;std::packaged_task&quot;,
&quot;string&quot;: &quot;get_future&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/get_future&quot;},
{&quot;string&quot;: &quot;std::packaged_task::make_ready_at_thread_exit&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/make_ready_at_thread_exit&quot;},
{&quot;on_group&quot;: &quot;std::packaged_task&quot;,
&quot;string&quot;: &quot;make_ready_at_thread_exit&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/make_ready_at_thread_exit&quot;},
{&quot;string&quot;: &quot;std::packaged_task::operator()&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/operator()&quot;},
{&quot;on_group&quot;: &quot;std::packaged_task&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/operator()&quot;},
{&quot;string&quot;: &quot;std::packaged_task::operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/operator=&quot;},
{&quot;on_group&quot;: &quot;std::packaged_task&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/operator=&quot;},
{&quot;string&quot;: &quot;std::packaged_task::packaged_task&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/packaged_task&quot;},
{&quot;string&quot;: &quot;std::packaged_task::reset&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/reset&quot;},
{&quot;on_group&quot;: &quot;std::packaged_task&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/reset&quot;},
{&quot;string&quot;: &quot;std::packaged_task::swap&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/swap&quot;},
{&quot;on_group&quot;: &quot;std::packaged_task&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/swap&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::packaged_task&gt;&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::packaged_task::valid&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/valid&quot;},
{&quot;on_group&quot;: &quot;std::packaged_task&quot;,
&quot;string&quot;: &quot;valid&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/valid&quot;},
{&quot;string&quot;: &quot;std::packaged_task::~packaged_task&quot;,
&quot;target&quot;: &quot;cpp/thread/packaged_task/~packaged_task&quot;},
{&quot;string&quot;: &quot;std::promise&quot;,
&quot;target&quot;: &quot;cpp/thread/promise&quot;},
{&quot;string&quot;: &quot;std::promise::get_future&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/get_future&quot;},
{&quot;on_group&quot;: &quot;std::promise&quot;,
&quot;string&quot;: &quot;get_future&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/get_future&quot;},
{&quot;string&quot;: &quot;std::promise::operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/operator=&quot;},
{&quot;on_group&quot;: &quot;std::promise&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/operator=&quot;},
{&quot;string&quot;: &quot;std::promise::promise&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/promise&quot;},
{&quot;string&quot;: &quot;std::promise::set_exception&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_exception&quot;},
{&quot;on_group&quot;: &quot;std::promise&quot;,
&quot;string&quot;: &quot;set_exception&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_exception&quot;},
{&quot;string&quot;: &quot;std::promise::set_exception_at_thread_exit&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_exception_at_thread_exit&quot;},
{&quot;on_group&quot;: &quot;std::promise&quot;,
&quot;string&quot;: &quot;set_exception_at_thread_exit&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_exception_at_thread_exit&quot;},
{&quot;string&quot;: &quot;std::promise::set_value&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_value&quot;},
{&quot;on_group&quot;: &quot;std::promise&quot;,
&quot;string&quot;: &quot;set_value&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_value&quot;},
{&quot;string&quot;: &quot;std::promise::set_value_at_thread_exit&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_value_at_thread_exit&quot;},
{&quot;on_group&quot;: &quot;std::promise&quot;,
&quot;string&quot;: &quot;set_value_at_thread_exit&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/set_value_at_thread_exit&quot;},
{&quot;string&quot;: &quot;std::promise::swap&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/swap&quot;},
{&quot;on_group&quot;: &quot;std::promise&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/swap&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::promise&gt;&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::promise::~promise&quot;,
&quot;target&quot;: &quot;cpp/thread/promise/~promise&quot;},
{&quot;string&quot;: &quot;std::recursive_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex&quot;},
{&quot;string&quot;: &quot;std::recursive_mutex::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/lock&quot;},
{&quot;on_group&quot;: &quot;std::recursive_mutex&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/lock&quot;},
{&quot;string&quot;: &quot;std::recursive_mutex::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::recursive_mutex&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/native_handle&quot;},
{&quot;string&quot;: &quot;std::recursive_mutex::recursive_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/recursive_mutex&quot;},
{&quot;string&quot;: &quot;std::recursive_mutex::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::recursive_mutex&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/try_lock&quot;},
{&quot;string&quot;: &quot;std::recursive_mutex::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/unlock&quot;},
{&quot;on_group&quot;: &quot;std::recursive_mutex&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_mutex/unlock&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/lock&quot;},
{&quot;on_group&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/lock&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/native_handle&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex::recursive_timed_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/recursive_timed_mutex&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/try_lock&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex::try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/try_lock_for&quot;},
{&quot;on_group&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/try_lock_for&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex::try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/try_lock_until&quot;},
{&quot;on_group&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/try_lock_until&quot;},
{&quot;string&quot;: &quot;std::recursive_timed_mutex::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/unlock&quot;},
{&quot;on_group&quot;: &quot;std::recursive_timed_mutex&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/recursive_timed_mutex/unlock&quot;},
{&quot;string&quot;: &quot;std::shared_future&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future&quot;},
{&quot;string&quot;: &quot;std::shared_future::get&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/get&quot;},
{&quot;on_group&quot;: &quot;std::shared_future&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/get&quot;},
{&quot;string&quot;: &quot;std::shared_future::operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/operator=&quot;},
{&quot;on_group&quot;: &quot;std::shared_future&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/operator=&quot;},
{&quot;string&quot;: &quot;std::shared_future::shared_future&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/shared_future&quot;},
{&quot;string&quot;: &quot;std::shared_future::valid&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/valid&quot;},
{&quot;on_group&quot;: &quot;std::shared_future&quot;,
&quot;string&quot;: &quot;valid&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/valid&quot;},
{&quot;string&quot;: &quot;std::shared_future::wait&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/wait&quot;},
{&quot;on_group&quot;: &quot;std::shared_future&quot;,
&quot;string&quot;: &quot;wait&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/wait&quot;},
{&quot;string&quot;: &quot;std::shared_future::wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/wait_for&quot;},
{&quot;on_group&quot;: &quot;std::shared_future&quot;,
&quot;string&quot;: &quot;wait_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/wait_for&quot;},
{&quot;string&quot;: &quot;std::shared_future::wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/wait_until&quot;},
{&quot;on_group&quot;: &quot;std::shared_future&quot;,
&quot;string&quot;: &quot;wait_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/wait_until&quot;},
{&quot;string&quot;: &quot;std::shared_future::~shared_future&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_future/~shared_future&quot;},
{&quot;string&quot;: &quot;std::shared_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock&quot;},
{&quot;string&quot;: &quot;std::shared_lock::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/lock&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/lock&quot;},
{&quot;string&quot;: &quot;std::shared_lock::mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/mutex&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/mutex&quot;},
{&quot;string&quot;: &quot;std::shared_lock::operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/operator=&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/operator=&quot;},
{&quot;string&quot;: &quot;std::shared_lock::operator bool&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/operator_bool&quot;},
{&quot;string&quot;: &quot;std::shared_lock::owns_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/owns_lock&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;owns_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/owns_lock&quot;},
{&quot;string&quot;: &quot;std::shared_lock::release&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/release&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;release&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/release&quot;},
{&quot;string&quot;: &quot;std::shared_lock::shared_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/shared_lock&quot;},
{&quot;string&quot;: &quot;std::shared_lock::swap&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/swap&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::shared_lock)&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/swap2&quot;},
{&quot;string&quot;: &quot;std::shared_lock::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/try_lock&quot;},
{&quot;string&quot;: &quot;std::shared_lock::try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/try_lock_for&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/try_lock_for&quot;},
{&quot;string&quot;: &quot;std::shared_lock::try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/try_lock_until&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/try_lock_until&quot;},
{&quot;string&quot;: &quot;std::shared_lock::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/unlock&quot;},
{&quot;on_group&quot;: &quot;std::shared_lock&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/unlock&quot;},
{&quot;string&quot;: &quot;std::shared_lock::~shared_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_lock/~shared_lock&quot;},
{&quot;string&quot;: &quot;std::shared_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/lock&quot;},
{&quot;on_group&quot;: &quot;std::shared_mutex&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/lock&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/lock_shared&quot;},
{&quot;on_group&quot;: &quot;std::shared_mutex&quot;,
&quot;string&quot;: &quot;lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/lock_shared&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::shared_mutex&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/native_handle&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::shared_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/shared_mutex&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::shared_mutex&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/try_lock&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::try_lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/try_lock_shared&quot;},
{&quot;on_group&quot;: &quot;std::shared_mutex&quot;,
&quot;string&quot;: &quot;try_lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/try_lock_shared&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/unlock&quot;},
{&quot;on_group&quot;: &quot;std::shared_mutex&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/unlock&quot;},
{&quot;string&quot;: &quot;std::shared_mutex::unlock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/unlock_shared&quot;},
{&quot;on_group&quot;: &quot;std::shared_mutex&quot;,
&quot;string&quot;: &quot;unlock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_mutex/unlock_shared&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/lock&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/lock&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/lock_shared&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/lock_shared&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::shared_timed_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/shared_timed_mutex&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_for&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_for&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::try_lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_shared&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_shared&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::try_lock_shared_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_shared_for&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_shared_for&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_shared_for&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::try_lock_shared_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_shared_until&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_shared_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_shared_until&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_until&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/try_lock_until&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/unlock&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/unlock&quot;},
{&quot;string&quot;: &quot;std::shared_timed_mutex::unlock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/unlock_shared&quot;},
{&quot;on_group&quot;: &quot;std::shared_timed_mutex&quot;,
&quot;string&quot;: &quot;unlock_shared&quot;,
&quot;target&quot;: &quot;cpp/thread/shared_timed_mutex/unlock_shared&quot;},
{&quot;string&quot;: &quot;std::this_thread::sleep_for&quot;,
&quot;target&quot;: &quot;cpp/thread/sleep_for&quot;},
{&quot;string&quot;: &quot;std::this_thread::sleep_until&quot;,
&quot;target&quot;: &quot;cpp/thread/sleep_until&quot;},
{&quot;string&quot;: &quot;std::thread&quot;,
&quot;target&quot;: &quot;cpp/thread/thread&quot;},
{&quot;string&quot;: &quot;std::thread::detach&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/detach&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;detach&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/detach&quot;},
{&quot;string&quot;: &quot;std::thread::get_id&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/get_id&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;get_id&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/get_id&quot;},
{&quot;string&quot;: &quot;std::thread::hardware_concurrency&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/hardware_concurrency&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;hardware_concurrency&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/hardware_concurrency&quot;},
{&quot;string&quot;: &quot;std::thread::id&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::thread::id&gt;&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/hash&quot;},
{&quot;string&quot;: &quot;std::thread::id::id&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/id&quot;},
{&quot;string&quot;: &quot;std::thread::id::operator==&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::thread::id&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::thread::id::operator!=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::thread::id&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::thread::id::operator&lt;&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::thread::id&quot;,
&quot;string&quot;: &quot;operator&lt;&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::thread::id::operator&lt;=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::thread::id&quot;,
&quot;string&quot;: &quot;operator&lt;=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::thread::id::operator&gt;&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::thread::id&quot;,
&quot;string&quot;: &quot;operator&gt;&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::thread::id::operator&gt;=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::thread::id&quot;,
&quot;string&quot;: &quot;operator&gt;=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::thread::id::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_ltlt&quot;},
{&quot;on_group&quot;: &quot;std::thread::id&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/id/operator_ltlt&quot;},
{&quot;string&quot;: &quot;std::thread::join&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/join&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;join&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/join&quot;},
{&quot;string&quot;: &quot;std::thread::joinable&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/joinable&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;joinable&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/joinable&quot;},
{&quot;string&quot;: &quot;std::thread::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/native_handle&quot;},
{&quot;string&quot;: &quot;std::thread::operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/operator=&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/operator=&quot;},
{&quot;string&quot;: &quot;std::thread::swap&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/swap&quot;},
{&quot;on_group&quot;: &quot;std::thread&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::thread)&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/swap2&quot;},
{&quot;string&quot;: &quot;std::thread::thread&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/thread&quot;},
{&quot;string&quot;: &quot;std::thread::~thread&quot;,
&quot;target&quot;: &quot;cpp/thread/thread/~thread&quot;},
{&quot;string&quot;: &quot;std::timed_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex&quot;},
{&quot;string&quot;: &quot;std::timed_mutex::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/lock&quot;},
{&quot;on_group&quot;: &quot;std::timed_mutex&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/lock&quot;},
{&quot;string&quot;: &quot;std::timed_mutex::native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/native_handle&quot;},
{&quot;on_group&quot;: &quot;std::timed_mutex&quot;,
&quot;string&quot;: &quot;native_handle&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/native_handle&quot;},
{&quot;string&quot;: &quot;std::timed_mutex::timed_mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/timed_mutex&quot;},
{&quot;string&quot;: &quot;std::timed_mutex::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/try_lock&quot;},
{&quot;string&quot;: &quot;std::timed_mutex::try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/try_lock_for&quot;},
{&quot;on_group&quot;: &quot;std::timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/try_lock_for&quot;},
{&quot;string&quot;: &quot;std::timed_mutex::try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/try_lock_until&quot;},
{&quot;on_group&quot;: &quot;std::timed_mutex&quot;,
&quot;string&quot;: &quot;try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/try_lock_until&quot;},
{&quot;string&quot;: &quot;std::timed_mutex::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/unlock&quot;},
{&quot;on_group&quot;: &quot;std::timed_mutex&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/timed_mutex/unlock&quot;},
{&quot;string&quot;: &quot;std::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/try_lock&quot;},
{&quot;string&quot;: &quot;std::unique_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock&quot;},
{&quot;string&quot;: &quot;std::unique_lock::lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/lock&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/lock&quot;},
{&quot;string&quot;: &quot;std::unique_lock::mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/mutex&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;mutex&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/mutex&quot;},
{&quot;string&quot;: &quot;std::unique_lock::operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/operator=&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/operator=&quot;},
{&quot;string&quot;: &quot;std::unique_lock::operator bool&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/operator_bool&quot;},
{&quot;string&quot;: &quot;std::unique_lock::owns_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/owns_lock&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;owns_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/owns_lock&quot;},
{&quot;string&quot;: &quot;std::unique_lock::release&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/release&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;release&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/release&quot;},
{&quot;string&quot;: &quot;std::unique_lock::swap&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/swap&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::unique_lock)&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/swap2&quot;},
{&quot;string&quot;: &quot;std::unique_lock::try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/try_lock&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;try_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/try_lock&quot;},
{&quot;string&quot;: &quot;std::unique_lock::try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/try_lock_for&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;try_lock_for&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/try_lock_for&quot;},
{&quot;string&quot;: &quot;std::unique_lock::try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/try_lock_until&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;try_lock_until&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/try_lock_until&quot;},
{&quot;string&quot;: &quot;std::unique_lock::unique_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/unique_lock&quot;},
{&quot;string&quot;: &quot;std::unique_lock::unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/unlock&quot;},
{&quot;on_group&quot;: &quot;std::unique_lock&quot;,
&quot;string&quot;: &quot;unlock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/unlock&quot;},
{&quot;string&quot;: &quot;std::unique_lock::~unique_lock&quot;,
&quot;target&quot;: &quot;cpp/thread/unique_lock/~unique_lock&quot;},
{&quot;string&quot;: &quot;std::this_thread::yield&quot;,
&quot;target&quot;: &quot;cpp/thread/yield&quot;},
{&quot;string&quot;: &quot;NULL&quot;,
&quot;target&quot;: &quot;cpp/types/NULL&quot;},
{&quot;string&quot;: &quot;std::add_cv&quot;,
&quot;target&quot;: &quot;cpp/types/add_cv&quot;},
{&quot;string&quot;: &quot;std::add_const&quot;,
&quot;target&quot;: &quot;cpp/types/add_cv&quot;},
{&quot;string&quot;: &quot;std::add_volatile&quot;,
&quot;target&quot;: &quot;cpp/types/add_cv&quot;},
{&quot;string&quot;: &quot;std::add_cv_t&quot;,
&quot;target&quot;: &quot;cpp/types/add_cv&quot;},
{&quot;string&quot;: &quot;std::add_const_t&quot;,
&quot;target&quot;: &quot;cpp/types/add_cv&quot;},
{&quot;string&quot;: &quot;std::add_volatile_t&quot;,
&quot;target&quot;: &quot;cpp/types/add_cv&quot;},
{&quot;string&quot;: &quot;std::add_pointer&quot;,
&quot;target&quot;: &quot;cpp/types/add_pointer&quot;},
{&quot;string&quot;: &quot;std::add_pointer_t&quot;,
&quot;target&quot;: &quot;cpp/types/add_pointer&quot;},
{&quot;string&quot;: &quot;std::add_lvalue_reference&quot;,
&quot;target&quot;: &quot;cpp/types/add_reference&quot;},
{&quot;string&quot;: &quot;std::add_lvalue_reference_t&quot;,
&quot;target&quot;: &quot;cpp/types/add_reference&quot;},
{&quot;string&quot;: &quot;std::add_rvalue_reference&quot;,
&quot;target&quot;: &quot;cpp/types/add_reference&quot;},
{&quot;string&quot;: &quot;std::add_rvalue_reference_t&quot;,
&quot;target&quot;: &quot;cpp/types/add_reference&quot;},
{&quot;string&quot;: &quot;std::aligned_storage&quot;,
&quot;target&quot;: &quot;cpp/types/aligned_storage&quot;},
{&quot;string&quot;: &quot;std::aligned_storage_t&quot;,
&quot;target&quot;: &quot;cpp/types/aligned_storage&quot;},
{&quot;string&quot;: &quot;std::aligned_union&quot;,
&quot;target&quot;: &quot;cpp/types/aligned_union&quot;},
{&quot;string&quot;: &quot;std::aligned_union_t&quot;,
&quot;target&quot;: &quot;cpp/types/aligned_union&quot;},
{&quot;string&quot;: &quot;std::alignment_of&quot;,
&quot;target&quot;: &quot;cpp/types/alignment_of&quot;},
{&quot;string&quot;: &quot;std::alignment_of_v&quot;,
&quot;target&quot;: &quot;cpp/types/alignment_of&quot;},
{&quot;string&quot;: &quot;std::bad_cast&quot;,
&quot;target&quot;: &quot;cpp/types/bad_cast&quot;},
{&quot;string&quot;: &quot;std::bad_cast::bad_cast&quot;,
&quot;target&quot;: &quot;cpp/types/bad_cast/bad_cast&quot;},
{&quot;string&quot;: &quot;std::bad_typeid&quot;,
&quot;target&quot;: &quot;cpp/types/bad_typeid&quot;},
{&quot;string&quot;: &quot;std::bad_typeid::bad_typeid&quot;,
&quot;target&quot;: &quot;cpp/types/bad_typeid/bad_typeid&quot;},
{&quot;string&quot;: &quot;PTRDIFF_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;PTRDIFF_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;SIZE_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;SIG_ATOMIC_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;SIG_ATOMIC_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;WCHAR_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;WCHAR_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;WINT_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;WINT_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;CHAR_BIT&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;MB_LEN_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;CHAR_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;CHAR_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;SCHAR_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;SHRT_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;INT_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LONG_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LLONG_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;SCHAR_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;SHRT_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;INT_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LONG_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LLONG_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;UCHAR_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;USHRT_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;UINT_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;ULONG_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;ULLONG_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_RADIX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DECIMAL_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_DECIMAL_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_DECIMAL_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_DECIMAL_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_TRUE_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_TRUE_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_TRUE_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_EPSILON&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_EPSILON&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_EPSILON&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_MANT_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_MANT_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_MANT_DIG&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_MIN_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_MIN_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_MIN_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_MIN_10_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_MIN_10_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_MIN_10_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_MAX_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_MAX_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_MAX_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_MAX_10_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_MAX_10_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_MAX_10_EXP&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_HAS_SUBNORM&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;DBL_HAS_SUBNORM&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;LDBL_HAS_SUBNORM&quot;,
&quot;target&quot;: &quot;cpp/types/climits&quot;},
{&quot;string&quot;: &quot;FLT_EVAL_METHOD&quot;,
&quot;target&quot;: &quot;cpp/types/climits/FLT_EVAL_METHOD&quot;},
{&quot;string&quot;: &quot;FLT_ROUNDS&quot;,
&quot;target&quot;: &quot;cpp/types/climits/FLT_ROUNDS&quot;},
{&quot;string&quot;: &quot;std::common_type&quot;,
&quot;target&quot;: &quot;cpp/types/common_type&quot;},
{&quot;string&quot;: &quot;std::common_type_t&quot;,
&quot;target&quot;: &quot;cpp/types/common_type&quot;},
{&quot;string&quot;: &quot;std::conditional&quot;,
&quot;target&quot;: &quot;cpp/types/conditional&quot;},
{&quot;string&quot;: &quot;std::conditional_t&quot;,
&quot;target&quot;: &quot;cpp/types/conditional&quot;},
{&quot;string&quot;: &quot;std::conjunction&quot;,
&quot;target&quot;: &quot;cpp/types/conjunction&quot;},
{&quot;string&quot;: &quot;std::conjunction_v&quot;,
&quot;target&quot;: &quot;cpp/types/conjunction&quot;},
{&quot;string&quot;: &quot;std::decay&quot;,
&quot;target&quot;: &quot;cpp/types/decay&quot;},
{&quot;string&quot;: &quot;std::decay_t&quot;,
&quot;target&quot;: &quot;cpp/types/decay&quot;},
{&quot;string&quot;: &quot;std::disjunction&quot;,
&quot;target&quot;: &quot;cpp/types/disjunction&quot;},
{&quot;string&quot;: &quot;std::disjunction_v&quot;,
&quot;target&quot;: &quot;cpp/types/disjunction&quot;},
{&quot;string&quot;: &quot;std::enable_if&quot;,
&quot;target&quot;: &quot;cpp/types/enable_if&quot;},
{&quot;string&quot;: &quot;std::enable_if_t&quot;,
&quot;target&quot;: &quot;cpp/types/enable_if&quot;},
{&quot;string&quot;: &quot;std::extent&quot;,
&quot;target&quot;: &quot;cpp/types/extent&quot;},
{&quot;string&quot;: &quot;std::extent_v&quot;,
&quot;target&quot;: &quot;cpp/types/extent&quot;},
{&quot;string&quot;: &quot;std::has_unique_object_representations&quot;,
&quot;target&quot;: &quot;cpp/types/has_unique_object_representations&quot;},
{&quot;string&quot;: &quot;std::has_unique_object_representations_v&quot;,
&quot;target&quot;: &quot;cpp/types/has_unique_object_representations&quot;},
{&quot;string&quot;: &quot;std::has_virtual_destructor&quot;,
&quot;target&quot;: &quot;cpp/types/has_virtual_destructor&quot;},
{&quot;string&quot;: &quot;std::has_virtual_destructor_v&quot;,
&quot;target&quot;: &quot;cpp/types/has_virtual_destructor&quot;},
{&quot;string&quot;: &quot;std::int8_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int16_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int32_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int64_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_fast8_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_fast16_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_fast32_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_fast64_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_least8_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_least16_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_least32_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::int_least64_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::intmax_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::intptr_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint8_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint16_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint32_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint64_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_fast8_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_fast16_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_fast32_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_fast64_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_least8_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_least16_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_least32_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uint_least64_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uintmax_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::uintptr_t&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT8_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT16_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT32_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT64_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST8_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST16_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST32_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST64_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST8_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST16_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST32_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST64_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INTPTR_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INTMAX_MIN&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT8_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT16_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT32_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT64_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST8_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST16_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST32_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_FAST64_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST8_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST16_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST32_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INT_LEAST64_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INTPTR_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;INTMAX_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT8_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT16_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT32_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT64_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST8_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST16_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST32_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_FAST64_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST8_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST16_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST32_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINT_LEAST64_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINTPTR_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;UINTMAX_MAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRId8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRId16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRId32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRId64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIdPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIi64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIiPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIu64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIuPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIo64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIoPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIx64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIxPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIX64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;PRIXPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNd64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNdPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNi64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNiPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNu64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNuPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNo64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNoPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNx64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNxPTR &quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNX64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXLEAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST8&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST16&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST32&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXFAST64&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXMAX&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;SCNXPTR&quot;,
&quot;target&quot;: &quot;cpp/types/integer&quot;},
{&quot;string&quot;: &quot;std::integral_constant&quot;,
&quot;target&quot;: &quot;cpp/types/integral_constant&quot;},
{&quot;string&quot;: &quot;std::bool_constant&quot;,
&quot;target&quot;: &quot;cpp/types/integral_constant&quot;},
{&quot;string&quot;: &quot;std::true_type&quot;,
&quot;target&quot;: &quot;cpp/types/integral_constant&quot;},
{&quot;string&quot;: &quot;std::false_type&quot;,
&quot;target&quot;: &quot;cpp/types/integral_constant&quot;},
{&quot;string&quot;: &quot;std::is_abstract&quot;,
&quot;target&quot;: &quot;cpp/types/is_abstract&quot;},
{&quot;string&quot;: &quot;std::is_abstract_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_abstract&quot;},
{&quot;string&quot;: &quot;std::is_arithmetic&quot;,
&quot;target&quot;: &quot;cpp/types/is_arithmetic&quot;},
{&quot;string&quot;: &quot;std::is_arithmetic_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_arithmetic&quot;},
{&quot;string&quot;: &quot;std::is_array&quot;,
&quot;target&quot;: &quot;cpp/types/is_array&quot;},
{&quot;string&quot;: &quot;std::is_array_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_array&quot;},
{&quot;string&quot;: &quot;std::is_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_assignable&quot;},
{&quot;string&quot;: &quot;std::is_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_assignable&quot;},
{&quot;string&quot;: &quot;std::is_trivially_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_assignable&quot;},
{&quot;string&quot;: &quot;std::is_trivially_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_assignable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_assignable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_assignable&quot;},
{&quot;string&quot;: &quot;std::is_base_of&quot;,
&quot;target&quot;: &quot;cpp/types/is_base_of&quot;},
{&quot;string&quot;: &quot;std::is_base_of_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_base_of&quot;},
{&quot;string&quot;: &quot;std::is_callable&quot;,
&quot;target&quot;: &quot;cpp/types/is_callable&quot;},
{&quot;string&quot;: &quot;std::is_callable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_callable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_callable&quot;,
&quot;target&quot;: &quot;cpp/types/is_callable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_callable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_callable&quot;},
{&quot;string&quot;: &quot;std::is_class&quot;,
&quot;target&quot;: &quot;cpp/types/is_class&quot;},
{&quot;string&quot;: &quot;std::is_class_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_class&quot;},
{&quot;string&quot;: &quot;std::is_compound&quot;,
&quot;target&quot;: &quot;cpp/types/is_compound&quot;},
{&quot;string&quot;: &quot;std::is_compound_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_compound&quot;},
{&quot;string&quot;: &quot;std::is_const&quot;,
&quot;target&quot;: &quot;cpp/types/is_const&quot;},
{&quot;string&quot;: &quot;std::is_const_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_const&quot;},
{&quot;string&quot;: &quot;std::is_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_constructible&quot;},
{&quot;string&quot;: &quot;std::is_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_constructible&quot;},
{&quot;string&quot;: &quot;std::is_convertible&quot;,
&quot;target&quot;: &quot;cpp/types/is_convertible&quot;},
{&quot;string&quot;: &quot;std::is_convertible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_convertible&quot;},
{&quot;string&quot;: &quot;std::is_copy_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_assignable&quot;},
{&quot;string&quot;: &quot;std::is_copy_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_assignable&quot;},
{&quot;string&quot;: &quot;std::is_trivially_copy_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_assignable&quot;},
{&quot;string&quot;: &quot;std::is_trivially_copy_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_assignable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_copy_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_assignable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_copy_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_assignable&quot;},
{&quot;string&quot;: &quot;std::is_copy_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_constructible&quot;},
{&quot;string&quot;: &quot;std::is_copy_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_copy_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_copy_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_copy_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_copy_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_copy_constructible&quot;},
{&quot;string&quot;: &quot;std::is_default_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_default_constructible&quot;},
{&quot;string&quot;: &quot;std::is_default_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_default_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_default_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_default_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_default_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_default_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_default_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_default_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_default_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_default_constructible&quot;},
{&quot;string&quot;: &quot;std::is_destructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_destructible&quot;},
{&quot;string&quot;: &quot;std::is_destructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_destructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_destructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_destructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_destructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_destructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_destructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_destructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_destructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_destructible&quot;},
{&quot;string&quot;: &quot;std::is_empty&quot;,
&quot;target&quot;: &quot;cpp/types/is_empty&quot;},
{&quot;string&quot;: &quot;std::is_empty_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_empty&quot;},
{&quot;string&quot;: &quot;std::is_enum&quot;,
&quot;target&quot;: &quot;cpp/types/is_enum&quot;},
{&quot;string&quot;: &quot;std::is_enum_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_enum&quot;},
{&quot;string&quot;: &quot;std::is_final&quot;,
&quot;target&quot;: &quot;cpp/types/is_final&quot;},
{&quot;string&quot;: &quot;std::is_final_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_final&quot;},
{&quot;string&quot;: &quot;std::is_floating_point&quot;,
&quot;target&quot;: &quot;cpp/types/is_floating_point&quot;},
{&quot;string&quot;: &quot;std::is_floating_point_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_floating_point&quot;},
{&quot;string&quot;: &quot;std::is_function&quot;,
&quot;target&quot;: &quot;cpp/types/is_function&quot;},
{&quot;string&quot;: &quot;std::is_function_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_function&quot;},
{&quot;string&quot;: &quot;std::is_fundamental&quot;,
&quot;target&quot;: &quot;cpp/types/is_fundamental&quot;},
{&quot;string&quot;: &quot;std::is_fundamental_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_fundamental&quot;},
{&quot;string&quot;: &quot;std::is_integral&quot;,
&quot;target&quot;: &quot;cpp/types/is_integral&quot;},
{&quot;string&quot;: &quot;std::is_integral_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_integral&quot;},
{&quot;string&quot;: &quot;std::is_literal_type&quot;,
&quot;target&quot;: &quot;cpp/types/is_literal_type&quot;},
{&quot;string&quot;: &quot;std::is_literal_type_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_literal_type&quot;},
{&quot;string&quot;: &quot;std::is_lvalue_reference&quot;,
&quot;target&quot;: &quot;cpp/types/is_lvalue_reference&quot;},
{&quot;string&quot;: &quot;std::is_lvalue_reference_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_lvalue_reference&quot;},
{&quot;string&quot;: &quot;std::is_member_function_pointer&quot;,
&quot;target&quot;: &quot;cpp/types/is_member_function_pointer&quot;},
{&quot;string&quot;: &quot;std::is_member_function_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_member_function_pointer&quot;},
{&quot;string&quot;: &quot;std::is_member_object_pointer&quot;,
&quot;target&quot;: &quot;cpp/types/is_member_object_pointer&quot;},
{&quot;string&quot;: &quot;std::is_member_object_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_member_object_pointer&quot;},
{&quot;string&quot;: &quot;std::is_member_pointer&quot;,
&quot;target&quot;: &quot;cpp/types/is_member_pointer&quot;},
{&quot;string&quot;: &quot;std::is_member_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_member_pointer&quot;},
{&quot;string&quot;: &quot;std::is_move_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_assignable&quot;},
{&quot;string&quot;: &quot;std::is_move_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_assignable&quot;},
{&quot;string&quot;: &quot;std::is_trivially_move_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_assignable&quot;},
{&quot;string&quot;: &quot;std::is_trivially_move_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_assignable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_move_assignable&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_assignable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_move_assignable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_assignable&quot;},
{&quot;string&quot;: &quot;std::is_move_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_constructible&quot;},
{&quot;string&quot;: &quot;std::is_move_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_move_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_constructible&quot;},
{&quot;string&quot;: &quot;std::is_trivially_move_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_move_constructible&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_constructible&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_move_constructible_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_move_constructible&quot;},
{&quot;string&quot;: &quot;std::is_null_pointer&quot;,
&quot;target&quot;: &quot;cpp/types/is_null_pointer&quot;},
{&quot;string&quot;: &quot;std::is_null_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_null_pointer&quot;},
{&quot;string&quot;: &quot;std::is_object&quot;,
&quot;target&quot;: &quot;cpp/types/is_object&quot;},
{&quot;string&quot;: &quot;std::is_object_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_object&quot;},
{&quot;string&quot;: &quot;std::is_pod&quot;,
&quot;target&quot;: &quot;cpp/types/is_pod&quot;},
{&quot;string&quot;: &quot;std::is_pod_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_pod&quot;},
{&quot;string&quot;: &quot;std::is_pointer&quot;,
&quot;target&quot;: &quot;cpp/types/is_pointer&quot;},
{&quot;string&quot;: &quot;std::is_pointer_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_pointer&quot;},
{&quot;string&quot;: &quot;std::is_polymorphic&quot;,
&quot;target&quot;: &quot;cpp/types/is_polymorphic&quot;},
{&quot;string&quot;: &quot;std::is_polymorphic_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_polymorphic&quot;},
{&quot;string&quot;: &quot;std::is_reference&quot;,
&quot;target&quot;: &quot;cpp/types/is_reference&quot;},
{&quot;string&quot;: &quot;std::is_reference_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_reference&quot;},
{&quot;string&quot;: &quot;std::is_rvalue_reference&quot;,
&quot;target&quot;: &quot;cpp/types/is_rvalue_reference&quot;},
{&quot;string&quot;: &quot;std::is_rvalue_reference_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_rvalue_reference&quot;},
{&quot;string&quot;: &quot;std::is_same&quot;,
&quot;target&quot;: &quot;cpp/types/is_same&quot;},
{&quot;string&quot;: &quot;std::is_same_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_same&quot;},
{&quot;string&quot;: &quot;std::is_scalar&quot;,
&quot;target&quot;: &quot;cpp/types/is_scalar&quot;},
{&quot;string&quot;: &quot;std::is_scalar_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_scalar&quot;},
{&quot;string&quot;: &quot;std::is_signed&quot;,
&quot;target&quot;: &quot;cpp/types/is_signed&quot;},
{&quot;string&quot;: &quot;std::is_signed_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_signed&quot;},
{&quot;string&quot;: &quot;std::is_standard_layout&quot;,
&quot;target&quot;: &quot;cpp/types/is_standard_layout&quot;},
{&quot;string&quot;: &quot;std::is_standard_layout_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_standard_layout&quot;},
{&quot;string&quot;: &quot;std::is_swappable&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable&quot;},
{&quot;string&quot;: &quot;std::is_swappable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_swappable&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_swappable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable&quot;},
{&quot;string&quot;: &quot;std::is_swappable_with&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable_with&quot;},
{&quot;string&quot;: &quot;std::is_swappable_with_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable_with&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_swappable_with&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable_with&quot;},
{&quot;string&quot;: &quot;std::is_nothrow_swappable_with_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_swappable_with&quot;},
{&quot;string&quot;: &quot;std::is_trivial&quot;,
&quot;target&quot;: &quot;cpp/types/is_trivial&quot;},
{&quot;string&quot;: &quot;std::is_trivial_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_trivial&quot;},
{&quot;string&quot;: &quot;std::is_trivially_copyable&quot;,
&quot;target&quot;: &quot;cpp/types/is_trivially_copyable&quot;},
{&quot;string&quot;: &quot;std::is_trivially_copyable_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_trivially_copyable&quot;},
{&quot;string&quot;: &quot;std::is_union&quot;,
&quot;target&quot;: &quot;cpp/types/is_union&quot;},
{&quot;string&quot;: &quot;std::is_union_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_union&quot;},
{&quot;string&quot;: &quot;std::is_unsigned&quot;,
&quot;target&quot;: &quot;cpp/types/is_unsigned&quot;},
{&quot;string&quot;: &quot;std::is_unsigned_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_unsigned&quot;},
{&quot;string&quot;: &quot;std::is_void&quot;,
&quot;target&quot;: &quot;cpp/types/is_void&quot;},
{&quot;string&quot;: &quot;std::is_void_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_void&quot;},
{&quot;string&quot;: &quot;std::is_volatile&quot;,
&quot;target&quot;: &quot;cpp/types/is_volatile&quot;},
{&quot;string&quot;: &quot;std::is_volatile_v&quot;,
&quot;target&quot;: &quot;cpp/types/is_volatile&quot;},
{&quot;string&quot;: &quot;std::make_signed&quot;,
&quot;target&quot;: &quot;cpp/types/make_signed&quot;},
{&quot;string&quot;: &quot;std::make_signed_t&quot;,
&quot;target&quot;: &quot;cpp/types/make_signed&quot;},
{&quot;string&quot;: &quot;std::make_unsigned&quot;,
&quot;target&quot;: &quot;cpp/types/make_unsigned&quot;},
{&quot;string&quot;: &quot;std::make_unsigned_t&quot;,
&quot;target&quot;: &quot;cpp/types/make_unsigned&quot;},
{&quot;string&quot;: &quot;std::max_align_t&quot;,
&quot;target&quot;: &quot;cpp/types/max_align_t&quot;},
{&quot;string&quot;: &quot;std::negation&quot;,
&quot;target&quot;: &quot;cpp/types/negation&quot;},
{&quot;string&quot;: &quot;std::negation_v&quot;,
&quot;target&quot;: &quot;cpp/types/negation&quot;},
{&quot;string&quot;: &quot;std::nullptr_t&quot;,
&quot;target&quot;: &quot;cpp/types/nullptr_t&quot;},
{&quot;string&quot;: &quot;std::numeric_limits&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::denorm_min&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/denorm_min&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;denorm_min&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/denorm_min&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::digits&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/digits&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;digits&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/digits&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::digits10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/digits10&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;digits10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/digits10&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::epsilon&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/epsilon&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;epsilon&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/epsilon&quot;},
{&quot;string&quot;: &quot;std::float_denorm_style&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_denorm_style&quot;},
{&quot;string&quot;: &quot;std::denorm_indeterminate&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_denorm_style&quot;},
{&quot;string&quot;: &quot;std::denorm_absent&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_denorm_style&quot;},
{&quot;string&quot;: &quot;std::denorm_present&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_denorm_style&quot;},
{&quot;string&quot;: &quot;std::float_round_style&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_round_style&quot;},
{&quot;string&quot;: &quot;std::round_indeterminate&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_round_style&quot;},
{&quot;string&quot;: &quot;std::round_toward_zero&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_round_style&quot;},
{&quot;string&quot;: &quot;std::round_to_nearest&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_round_style&quot;},
{&quot;string&quot;: &quot;std::round_toward_infinity&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_round_style&quot;},
{&quot;string&quot;: &quot;std::round_toward_neg_infinity&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/float_round_style&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::has_denorm&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_denorm&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;has_denorm&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_denorm&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::has_denorm_loss&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_denorm_loss&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;has_denorm_loss&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_denorm_loss&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::has_infinity&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_infinity&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;has_infinity&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_infinity&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::has_quiet_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_quiet_NaN&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;has_quiet_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_quiet_NaN&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::has_signaling_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_signaling_NaN&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;has_signaling_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/has_signaling_NaN&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::infinity&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/infinity&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;infinity&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/infinity&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::is_bounded&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_bounded&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;is_bounded&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_bounded&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::is_exact&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_exact&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;is_exact&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_exact&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::is_iec559&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_iec559&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;is_iec559&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_iec559&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::is_integer&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_integer&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;is_integer&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_integer&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::is_modulo&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_modulo&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;is_modulo&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_modulo&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::is_signed&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_signed&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;is_signed&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_signed&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::is_specialized&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_specialized&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;is_specialized&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/is_specialized&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::lowest&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/lowest&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;lowest&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/lowest&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::max&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;max&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::max_digits10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max_digits10&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;max_digits10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max_digits10&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::max_exponent&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max_exponent&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;max_exponent&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max_exponent&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::max_exponent10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max_exponent10&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;max_exponent10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/max_exponent10&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::min&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/min&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;min&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/min&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::min_exponent&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/min_exponent&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;min_exponent&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/min_exponent&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::min_exponent10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/min_exponent10&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;min_exponent10&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/min_exponent10&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::quiet_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/quiet_NaN&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;quiet_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/quiet_NaN&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::radix&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/radix&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;radix&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/radix&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::round_error&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/round_error&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;round_error&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/round_error&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::round_style&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/round_style&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;round_style&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/round_style&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::signaling_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/signaling_NaN&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;signaling_NaN&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/signaling_NaN&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::tinyness_before&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/tinyness_before&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;tinyness_before&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/tinyness_before&quot;},
{&quot;string&quot;: &quot;std::numeric_limits::traps&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/traps&quot;},
{&quot;on_group&quot;: &quot;std::numeric_limits&quot;,
&quot;string&quot;: &quot;traps&quot;,
&quot;target&quot;: &quot;cpp/types/numeric_limits/traps&quot;},
{&quot;string&quot;: &quot;offsetof&quot;,
&quot;target&quot;: &quot;cpp/types/offsetof&quot;},
{&quot;string&quot;: &quot;std::ptrdiff_t&quot;,
&quot;target&quot;: &quot;cpp/types/ptrdiff_t&quot;},
{&quot;string&quot;: &quot;std::rank&quot;,
&quot;target&quot;: &quot;cpp/types/rank&quot;},
{&quot;string&quot;: &quot;std::rank_v&quot;,
&quot;target&quot;: &quot;cpp/types/rank&quot;},
{&quot;string&quot;: &quot;std::remove_all_extents&quot;,
&quot;target&quot;: &quot;cpp/types/remove_all_extents&quot;},
{&quot;string&quot;: &quot;std::remove_all_extents_t&quot;,
&quot;target&quot;: &quot;cpp/types/remove_all_extents&quot;},
{&quot;string&quot;: &quot;std::remove_cv&quot;,
&quot;target&quot;: &quot;cpp/types/remove_cv&quot;},
{&quot;string&quot;: &quot;std::remove_const&quot;,
&quot;target&quot;: &quot;cpp/types/remove_cv&quot;},
{&quot;string&quot;: &quot;std::remove_volatile&quot;,
&quot;target&quot;: &quot;cpp/types/remove_cv&quot;},
{&quot;string&quot;: &quot;std::remove_cv_t&quot;,
&quot;target&quot;: &quot;cpp/types/remove_cv&quot;},
{&quot;string&quot;: &quot;std::remove_const_t&quot;,
&quot;target&quot;: &quot;cpp/types/remove_cv&quot;},
{&quot;string&quot;: &quot;std::remove_volatile_t&quot;,
&quot;target&quot;: &quot;cpp/types/remove_cv&quot;},
{&quot;string&quot;: &quot;std::remove_extent&quot;,
&quot;target&quot;: &quot;cpp/types/remove_extent&quot;},
{&quot;string&quot;: &quot;std::remove_extent_t&quot;,
&quot;target&quot;: &quot;cpp/types/remove_extent&quot;},
{&quot;string&quot;: &quot;std::remove_pointer&quot;,
&quot;target&quot;: &quot;cpp/types/remove_pointer&quot;},
{&quot;string&quot;: &quot;std::remove_pointer_t&quot;,
&quot;target&quot;: &quot;cpp/types/remove_pointer&quot;},
{&quot;string&quot;: &quot;std::remove_reference&quot;,
&quot;target&quot;: &quot;cpp/types/remove_reference&quot;},
{&quot;string&quot;: &quot;std::remove_reference_t&quot;,
&quot;target&quot;: &quot;cpp/types/remove_reference&quot;},
{&quot;string&quot;: &quot;std::result_of&quot;,
&quot;target&quot;: &quot;cpp/types/result_of&quot;},
{&quot;string&quot;: &quot;std::result_of_t&quot;,
&quot;target&quot;: &quot;cpp/types/result_of&quot;},
{&quot;string&quot;: &quot;std::size_t&quot;,
&quot;target&quot;: &quot;cpp/types/size_t&quot;},
{&quot;string&quot;: &quot;std::type_index&quot;,
&quot;target&quot;: &quot;cpp/types/type_index&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::type_index&gt;&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/hash&quot;},
{&quot;string&quot;: &quot;std::type_index::hash_code&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/hash_code&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;hash_code&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/hash_code&quot;},
{&quot;string&quot;: &quot;std::type_index::name&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/name&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;name&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/name&quot;},
{&quot;string&quot;: &quot;std::type_index::operator==&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::type_index::operator!=&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::type_index::operator&lt;=&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;operator&lt;=&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::type_index::operator&lt;&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;operator&lt;&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::type_index::operator&gt;=&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;operator&gt;=&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::type_index::operator&gt;&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_index&quot;,
&quot;string&quot;: &quot;operator&gt;&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::type_index::type_index&quot;,
&quot;target&quot;: &quot;cpp/types/type_index/type_index&quot;},
{&quot;string&quot;: &quot;std::type_info&quot;,
&quot;target&quot;: &quot;cpp/types/type_info&quot;},
{&quot;string&quot;: &quot;std::type_info::before&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/before&quot;},
{&quot;on_group&quot;: &quot;std::type_info&quot;,
&quot;string&quot;: &quot;before&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/before&quot;},
{&quot;string&quot;: &quot;std::type_info::hash_code&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/hash_code&quot;},
{&quot;on_group&quot;: &quot;std::type_info&quot;,
&quot;string&quot;: &quot;hash_code&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/hash_code&quot;},
{&quot;string&quot;: &quot;std::type_info::name&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/name&quot;},
{&quot;on_group&quot;: &quot;std::type_info&quot;,
&quot;string&quot;: &quot;name&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/name&quot;},
{&quot;string&quot;: &quot;std::type_info::operator==&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_info&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::type_info::operator!=&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::type_info&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/types/type_info/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::underlying_type&quot;,
&quot;target&quot;: &quot;cpp/types/underlying_type&quot;},
{&quot;string&quot;: &quot;std::underlying_type_t&quot;,
&quot;target&quot;: &quot;cpp/types/underlying_type&quot;},
{&quot;string&quot;: &quot;std::void_t&quot;,
&quot;target&quot;: &quot;cpp/types/void_t&quot;},
{&quot;string&quot;: &quot;std::any&quot;,
&quot;target&quot;: &quot;cpp/utility/any&quot;},
{&quot;string&quot;: &quot;std::any::any&quot;,
&quot;target&quot;: &quot;cpp/utility/any/any&quot;},
{&quot;string&quot;: &quot;std::any_cast&quot;,
&quot;target&quot;: &quot;cpp/utility/any/any_cast&quot;},
{&quot;string&quot;: &quot;std::bad_any_cast&quot;,
&quot;target&quot;: &quot;cpp/utility/any/bad_any_cast&quot;},
{&quot;string&quot;: &quot;std::any::emplace&quot;,
&quot;target&quot;: &quot;cpp/utility/any/emplace&quot;},
{&quot;on_group&quot;: &quot;std::any&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/utility/any/emplace&quot;},
{&quot;string&quot;: &quot;std::any::has_value&quot;,
&quot;target&quot;: &quot;cpp/utility/any/has_value&quot;},
{&quot;on_group&quot;: &quot;std::any&quot;,
&quot;string&quot;: &quot;has_value&quot;,
&quot;target&quot;: &quot;cpp/utility/any/has_value&quot;},
{&quot;string&quot;: &quot;std::make_any&quot;,
&quot;target&quot;: &quot;cpp/utility/any/make_any&quot;},
{&quot;string&quot;: &quot;std::any::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/any/operator=&quot;},
{&quot;on_group&quot;: &quot;std::any&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/any/operator=&quot;},
{&quot;string&quot;: &quot;std::any::reset&quot;,
&quot;target&quot;: &quot;cpp/utility/any/reset&quot;},
{&quot;on_group&quot;: &quot;std::any&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/utility/any/reset&quot;},
{&quot;string&quot;: &quot;std::any::swap&quot;,
&quot;target&quot;: &quot;cpp/utility/any/swap&quot;},
{&quot;on_group&quot;: &quot;std::any&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/utility/any/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::any)&quot;,
&quot;target&quot;: &quot;cpp/utility/any/swap2&quot;},
{&quot;string&quot;: &quot;std::any::type&quot;,
&quot;target&quot;: &quot;cpp/utility/any/type&quot;},
{&quot;on_group&quot;: &quot;std::any&quot;,
&quot;string&quot;: &quot;type&quot;,
&quot;target&quot;: &quot;cpp/utility/any/type&quot;},
{&quot;string&quot;: &quot;std::any::~any&quot;,
&quot;target&quot;: &quot;cpp/utility/any/~any&quot;},
{&quot;string&quot;: &quot;std::apply&quot;,
&quot;target&quot;: &quot;cpp/utility/apply&quot;},
{&quot;string&quot;: &quot;std::as_const&quot;,
&quot;target&quot;: &quot;cpp/utility/as_const&quot;},
{&quot;string&quot;: &quot;std::as_const&quot;,
&quot;target&quot;: &quot;cpp/utility/as_const&quot;},
{&quot;string&quot;: &quot;std::bitset&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset&quot;},
{&quot;string&quot;: &quot;std::bitset::all&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/all_any_none&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;all&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/all_any_none&quot;},
{&quot;string&quot;: &quot;std::bitset::any&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/all_any_none&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;any&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/all_any_none&quot;},
{&quot;string&quot;: &quot;std::bitset::none&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/all_any_none&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;none&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/all_any_none&quot;},
{&quot;string&quot;: &quot;std::bitset::bitset&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/bitset&quot;},
{&quot;string&quot;: &quot;std::bitset::count&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/count&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;count&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/count&quot;},
{&quot;string&quot;: &quot;std::bitset::flip&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/flip&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;flip&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/flip&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::bitset&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/hash&quot;},
{&quot;string&quot;: &quot;std::bitset::operator[]&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_at&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator[]&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_at&quot;},
{&quot;string&quot;: &quot;std::bitset::operator==&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator==&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::bitset::operator!=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_cmp&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator!=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::bitset::operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator&amp;=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;string&quot;: &quot;std::bitset::operator|=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator|=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;string&quot;: &quot;std::bitset::operator^=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator^=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;string&quot;: &quot;std::bitset::operator~&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator~&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic&quot;},
{&quot;string&quot;: &quot;operator&amp;(std::bitset)&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic2&quot;},
{&quot;string&quot;: &quot;operator|(std::bitset)&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic2&quot;},
{&quot;string&quot;: &quot;operator^(std::bitset)&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_logic2&quot;},
{&quot;string&quot;: &quot;std::bitset::operator&lt;&lt;=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::bitset::operator&gt;&gt;=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;=&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::bitset::operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator&lt;&lt;&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;std::bitset::operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;operator&gt;&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt&quot;},
{&quot;string&quot;: &quot;operator&lt;&lt;(std::bitset)&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt2&quot;},
{&quot;string&quot;: &quot;operator&gt;&gt;(std::bitset)&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/operator_ltltgtgt2&quot;},
{&quot;string&quot;: &quot;std::bitset::reference&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/reference&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;reference&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/reference&quot;},
{&quot;string&quot;: &quot;std::bitset::reset&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/reset&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/reset&quot;},
{&quot;string&quot;: &quot;std::bitset::set&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/set&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;set&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/set&quot;},
{&quot;string&quot;: &quot;std::bitset::size&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/size&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/size&quot;},
{&quot;string&quot;: &quot;std::bitset::test&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/test&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;test&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/test&quot;},
{&quot;string&quot;: &quot;std::bitset::to_string&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/to_string&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;to_string&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/to_string&quot;},
{&quot;string&quot;: &quot;std::bitset::to_ullong&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/to_ullong&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;to_ullong&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/to_ullong&quot;},
{&quot;string&quot;: &quot;std::bitset::to_ulong&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/to_ulong&quot;},
{&quot;on_group&quot;: &quot;std::bitset&quot;,
&quot;string&quot;: &quot;to_ulong&quot;,
&quot;target&quot;: &quot;cpp/utility/bitset/to_ulong&quot;},
{&quot;string&quot;: &quot;std::declval&quot;,
&quot;target&quot;: &quot;cpp/utility/declval&quot;},
{&quot;string&quot;: &quot;std::exchange&quot;,
&quot;target&quot;: &quot;cpp/utility/exchange&quot;},
{&quot;string&quot;: &quot;std::forward&quot;,
&quot;target&quot;: &quot;cpp/utility/forward&quot;},
{&quot;string&quot;: &quot;std::bad_function_call&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bad_function_call&quot;},
{&quot;string&quot;: &quot;std::bad_function_call::bad_function_call&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bad_function_call&quot;},
{&quot;string&quot;: &quot;std::bad_function_call::what&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bad_function_call&quot;},
{&quot;on_group&quot;: &quot;std::bad_function_call&quot;,
&quot;string&quot;: &quot;what&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bad_function_call&quot;},
{&quot;string&quot;: &quot;std::binary_function&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/binary_function&quot;},
{&quot;string&quot;: &quot;std::binary_negate&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/binary_negate&quot;},
{&quot;string&quot;: &quot;std::binary_negate::binary_negate&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/binary_negate&quot;},
{&quot;string&quot;: &quot;std::binary_negate::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/binary_negate&quot;},
{&quot;on_group&quot;: &quot;std::binary_negate&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/binary_negate&quot;},
{&quot;string&quot;: &quot;std::bind&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bind&quot;},
{&quot;string&quot;: &quot;std::bit_and&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_and&quot;},
{&quot;string&quot;: &quot;std::bit_and::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_and&quot;},
{&quot;on_group&quot;: &quot;std::bit_and&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_and&quot;},
{&quot;string&quot;: &quot;std::bit_not&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_not&quot;},
{&quot;string&quot;: &quot;std::bit_not::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_not&quot;},
{&quot;on_group&quot;: &quot;std::bit_not&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_not&quot;},
{&quot;string&quot;: &quot;std::bit_or&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_or&quot;},
{&quot;string&quot;: &quot;std::bit_or::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_or&quot;},
{&quot;on_group&quot;: &quot;std::bit_or&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/bit_or&quot;},
{&quot;string&quot;: &quot;std::boyer_moore_horspool_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/boyer_moore_horspool_searcher&quot;},
{&quot;string&quot;: &quot;std::boyer_moore_horspool_searcher::boyer_moore_horspool_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/boyer_moore_horspool_searcher&quot;},
{&quot;string&quot;: &quot;std::make_boyer_moore_horspool_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/boyer_moore_horspool_searcher&quot;},
{&quot;string&quot;: &quot;std::boyer_moore_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/boyer_moore_searcher&quot;},
{&quot;string&quot;: &quot;std::boyer_moore_searcher::boyer_moore_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/boyer_moore_searcher&quot;},
{&quot;string&quot;: &quot;std::make_boyer_moore_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/boyer_moore_searcher&quot;},
{&quot;string&quot;: &quot;std::default_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/default_searcher&quot;},
{&quot;string&quot;: &quot;std::default_searcher::default_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/default_searcher&quot;},
{&quot;string&quot;: &quot;std::make_default_searcher&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/default_searcher&quot;},
{&quot;string&quot;: &quot;std::divides&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/divides&quot;},
{&quot;string&quot;: &quot;std::divides::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/divides&quot;},
{&quot;on_group&quot;: &quot;std::divides&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/divides&quot;},
{&quot;string&quot;: &quot;std::equal_to&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/equal_to&quot;},
{&quot;string&quot;: &quot;std::equal_to::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/equal_to&quot;},
{&quot;on_group&quot;: &quot;std::equal_to&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/equal_to&quot;},
{&quot;string&quot;: &quot;std::function&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function&quot;},
{&quot;string&quot;: &quot;std::function::assign&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/assign&quot;},
{&quot;on_group&quot;: &quot;std::function&quot;,
&quot;string&quot;: &quot;assign&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/assign&quot;},
{&quot;string&quot;: &quot;std::function::function&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/function&quot;},
{&quot;string&quot;: &quot;std::function::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator()&quot;},
{&quot;on_group&quot;: &quot;std::function&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator()&quot;},
{&quot;string&quot;: &quot;std::function::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator=&quot;},
{&quot;on_group&quot;: &quot;std::function&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator=&quot;},
{&quot;string&quot;: &quot;std::function::operator bool&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::function&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator_bool&quot;},
{&quot;string&quot;: &quot;operator==(std::function)&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::function)&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::function::swap&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/swap&quot;},
{&quot;on_group&quot;: &quot;std::function&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::function)&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/swap&quot;},
{&quot;string&quot;: &quot;std::function::target&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/target&quot;},
{&quot;on_group&quot;: &quot;std::function&quot;,
&quot;string&quot;: &quot;target&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/target&quot;},
{&quot;string&quot;: &quot;std::function::target_type&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/target_type&quot;},
{&quot;on_group&quot;: &quot;std::function&quot;,
&quot;string&quot;: &quot;target_type&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/target_type&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::function&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::function::~function&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/function/~function&quot;},
{&quot;string&quot;: &quot;std::greater&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/greater&quot;},
{&quot;string&quot;: &quot;std::greater::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/greater&quot;},
{&quot;on_group&quot;: &quot;std::greater&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/greater&quot;},
{&quot;string&quot;: &quot;std::greater_equal&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/greater_equal&quot;},
{&quot;string&quot;: &quot;std::greater_equal::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/greater_equal&quot;},
{&quot;on_group&quot;: &quot;std::greater_equal&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/greater_equal&quot;},
{&quot;string&quot;: &quot;std::invoke&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/invoke&quot;},
{&quot;string&quot;: &quot;std::is_bind_expression&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/is_bind_expression&quot;},
{&quot;string&quot;: &quot;std::is_bind_expression_v&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/is_bind_expression&quot;},
{&quot;string&quot;: &quot;std::is_placeholder&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/is_placeholder&quot;},
{&quot;string&quot;: &quot;std::is_placeholder_v&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/is_placeholder&quot;},
{&quot;string&quot;: &quot;std::less&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/less&quot;},
{&quot;string&quot;: &quot;std::less::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/less&quot;},
{&quot;on_group&quot;: &quot;std::less&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/less&quot;},
{&quot;string&quot;: &quot;std::less_equal&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/less_equal&quot;},
{&quot;string&quot;: &quot;std::less_equal::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/less_equal&quot;},
{&quot;on_group&quot;: &quot;std::less_equal&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/less_equal&quot;},
{&quot;string&quot;: &quot;std::logical_and&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_and&quot;},
{&quot;string&quot;: &quot;std::logical_and::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_and&quot;},
{&quot;on_group&quot;: &quot;std::logical_and&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_and&quot;},
{&quot;string&quot;: &quot;std::logical_not&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_not&quot;},
{&quot;string&quot;: &quot;std::logical_not::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_not&quot;},
{&quot;on_group&quot;: &quot;std::logical_not&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_not&quot;},
{&quot;string&quot;: &quot;std::logical_or&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_or&quot;},
{&quot;string&quot;: &quot;std::logical_or::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_or&quot;},
{&quot;on_group&quot;: &quot;std::logical_or&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/logical_or&quot;},
{&quot;string&quot;: &quot;std::mem_fn&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/mem_fn&quot;},
{&quot;string&quot;: &quot;std::minus&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/minus&quot;},
{&quot;string&quot;: &quot;std::minus::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/minus&quot;},
{&quot;on_group&quot;: &quot;std::minus&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/minus&quot;},
{&quot;string&quot;: &quot;std::modulus&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/modulus&quot;},
{&quot;string&quot;: &quot;std::modulus::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/modulus&quot;},
{&quot;on_group&quot;: &quot;std::modulus&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/modulus&quot;},
{&quot;string&quot;: &quot;std::multiplies&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/multiplies&quot;},
{&quot;string&quot;: &quot;std::multiplies::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/multiplies&quot;},
{&quot;on_group&quot;: &quot;std::multiplies&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/multiplies&quot;},
{&quot;string&quot;: &quot;std::negate&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/negate&quot;},
{&quot;string&quot;: &quot;std::negate::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/negate&quot;},
{&quot;on_group&quot;: &quot;std::negate&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/negate&quot;},
{&quot;string&quot;: &quot;std::not1&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/not1&quot;},
{&quot;string&quot;: &quot;std::not2&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/not2&quot;},
{&quot;string&quot;: &quot;std::not_equal_to&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/not_equal_to&quot;},
{&quot;string&quot;: &quot;std::not_equal_to::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/not_equal_to&quot;},
{&quot;on_group&quot;: &quot;std::not_equal_to&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/not_equal_to&quot;},
{&quot;string&quot;: &quot;std::not_fn&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/not_fn&quot;},
{&quot;string&quot;: &quot;std::placeholders&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/placeholders&quot;},
{&quot;string&quot;: &quot;std::plus&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/plus&quot;},
{&quot;string&quot;: &quot;std::plus::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/plus&quot;},
{&quot;on_group&quot;: &quot;std::plus&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/plus&quot;},
{&quot;string&quot;: &quot;std::ref&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/ref&quot;},
{&quot;string&quot;: &quot;std::cref&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/ref&quot;},
{&quot;string&quot;: &quot;std::reference_wrapper&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper&quot;},
{&quot;string&quot;: &quot;std::reference_wrapper::operator T&amp;&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/get&quot;},
{&quot;on_group&quot;: &quot;std::reference_wrapper&quot;,
&quot;string&quot;: &quot;operator T&amp;&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/get&quot;},
{&quot;string&quot;: &quot;std::reference_wrapper::get&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/get&quot;},
{&quot;on_group&quot;: &quot;std::reference_wrapper&quot;,
&quot;string&quot;: &quot;get&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/get&quot;},
{&quot;string&quot;: &quot;std::reference_wrapper::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/operator()&quot;},
{&quot;on_group&quot;: &quot;std::reference_wrapper&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/operator()&quot;},
{&quot;string&quot;: &quot;std::reference_wrapper::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/operator=&quot;},
{&quot;on_group&quot;: &quot;std::reference_wrapper&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/operator=&quot;},
{&quot;string&quot;: &quot;std::reference_wrapper::reference_wrapper&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/reference_wrapper/reference_wrapper&quot;},
{&quot;string&quot;: &quot;std::unary_function&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/unary_function&quot;},
{&quot;string&quot;: &quot;std::unary_negate&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/unary_negate&quot;},
{&quot;string&quot;: &quot;std::unary_negate::unary_negate&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/unary_negate&quot;},
{&quot;string&quot;: &quot;std::unary_negate::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/unary_negate&quot;},
{&quot;on_group&quot;: &quot;std::unary_negate&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/functional/unary_negate&quot;},
{&quot;string&quot;: &quot;std::hash&quot;,
&quot;target&quot;: &quot;cpp/utility/hash&quot;},
{&quot;string&quot;: &quot;std::hash::hash&quot;,
&quot;target&quot;: &quot;cpp/utility/hash/hash&quot;},
{&quot;string&quot;: &quot;std::hash::operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/hash/operator()&quot;},
{&quot;on_group&quot;: &quot;std::hash&quot;,
&quot;string&quot;: &quot;operator()&quot;,
&quot;target&quot;: &quot;cpp/utility/hash/operator()&quot;},
{&quot;string&quot;: &quot;std::in_place&quot;,
&quot;target&quot;: &quot;cpp/utility/in_place&quot;},
{&quot;string&quot;: &quot;std::in_place_t&quot;,
&quot;target&quot;: &quot;cpp/utility/in_place&quot;},
{&quot;string&quot;: &quot;std::in_place_type_t&quot;,
&quot;target&quot;: &quot;cpp/utility/in_place&quot;},
{&quot;string&quot;: &quot;std::in_place_index_t&quot;,
&quot;target&quot;: &quot;cpp/utility/in_place&quot;},
{&quot;string&quot;: &quot;std::in_place_tag&quot;,
&quot;target&quot;: &quot;cpp/utility/in_place_tag&quot;},
{&quot;string&quot;: &quot;std::initializer_list&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list&quot;},
{&quot;string&quot;: &quot;std::initializer_list::begin&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/begin&quot;},
{&quot;on_group&quot;: &quot;std::initializer_list&quot;,
&quot;string&quot;: &quot;begin&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/begin&quot;},
{&quot;string&quot;: &quot;std::begin(std::initializer_list)&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/begin2&quot;},
{&quot;string&quot;: &quot;std::initializer_list::end&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/end&quot;},
{&quot;on_group&quot;: &quot;std::initializer_list&quot;,
&quot;string&quot;: &quot;end&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/end&quot;},
{&quot;string&quot;: &quot;std::end(std::initializer_list)&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/end2&quot;},
{&quot;string&quot;: &quot;std::initializer_list::initializer_list&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/initializer_list&quot;},
{&quot;string&quot;: &quot;std::initializer_list::size&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/size&quot;},
{&quot;on_group&quot;: &quot;std::initializer_list&quot;,
&quot;string&quot;: &quot;size&quot;,
&quot;target&quot;: &quot;cpp/utility/initializer_list/size&quot;},
{&quot;string&quot;: &quot;std::integer_sequence&quot;,
&quot;target&quot;: &quot;cpp/utility/integer_sequence&quot;},
{&quot;string&quot;: &quot;std::index_sequence&quot;,
&quot;target&quot;: &quot;cpp/utility/integer_sequence&quot;},
{&quot;string&quot;: &quot;std::make_integer_sequence&quot;,
&quot;target&quot;: &quot;cpp/utility/integer_sequence&quot;},
{&quot;string&quot;: &quot;std::make_index_sequence&quot;,
&quot;target&quot;: &quot;cpp/utility/integer_sequence&quot;},
{&quot;string&quot;: &quot;std::index_sequence_for&quot;,
&quot;target&quot;: &quot;cpp/utility/integer_sequence&quot;},
{&quot;string&quot;: &quot;std::launder&quot;,
&quot;target&quot;: &quot;cpp/utility/launder&quot;},
{&quot;string&quot;: &quot;std::make_from_tuple&quot;,
&quot;target&quot;: &quot;cpp/utility/make_from_tuple&quot;},
{&quot;string&quot;: &quot;std::move (utility)&quot;,
&quot;target&quot;: &quot;cpp/utility/move&quot;},
{&quot;string&quot;: &quot;std::move_if_noexcept&quot;,
&quot;target&quot;: &quot;cpp/utility/move_if_noexcept&quot;},
{&quot;string&quot;: &quot;std::optional&quot;,
&quot;target&quot;: &quot;cpp/utility/optional&quot;},
{&quot;string&quot;: &quot;std::bad_optional_access&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/bad_optional_access&quot;},
{&quot;string&quot;: &quot;std::experimental::bad_optional_access&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/bad_optional_access&quot;},
{&quot;string&quot;: &quot;std::experimental::bad_optional_access::bad_optional_access&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/bad_optional_access&quot;},
{&quot;string&quot;: &quot;std::optional::emplace&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/emplace&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/emplace&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::optional&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/hash&quot;},
{&quot;string&quot;: &quot;std::make_optional&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/make_optional&quot;},
{&quot;string&quot;: &quot;std::nullopt&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/nullopt&quot;},
{&quot;string&quot;: &quot;std::nullopt_t&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/nullopt_t&quot;},
{&quot;string&quot;: &quot;std::optional::operator*&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator*&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;operator*&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator*&quot;},
{&quot;string&quot;: &quot;std::optional::operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator*&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;operator-&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator*&quot;},
{&quot;string&quot;: &quot;std::optional::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator=&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator=&quot;},
{&quot;string&quot;: &quot;std::optional::operator bool&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;operator bool&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_bool&quot;},
{&quot;string&quot;: &quot;std::optional::has_value&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_bool&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;has_value&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_bool&quot;},
{&quot;string&quot;: &quot;operator==(std::optional)&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::optional)&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::optional)&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::optional)&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::optional)&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::optional)&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::optional::optional&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/optional&quot;},
{&quot;string&quot;: &quot;std::optional::reset&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/reset&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;reset&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/reset&quot;},
{&quot;string&quot;: &quot;std::optional::swap&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/swap&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::optional)&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/swap2&quot;},
{&quot;string&quot;: &quot;std::optional::value&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/value&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;value&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/value&quot;},
{&quot;string&quot;: &quot;std::optional::value_or&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/value_or&quot;},
{&quot;on_group&quot;: &quot;std::optional&quot;,
&quot;string&quot;: &quot;value_or&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/value_or&quot;},
{&quot;string&quot;: &quot;std::optional::~optional&quot;,
&quot;target&quot;: &quot;cpp/utility/optional/~optional&quot;},
{&quot;string&quot;: &quot;std::pair&quot;,
&quot;target&quot;: &quot;cpp/utility/pair&quot;},
{&quot;string&quot;: &quot;std::pair::first&quot;,
&quot;target&quot;: &quot;cpp/utility/pair&quot;},
{&quot;on_group&quot;: &quot;std::pair&quot;,
&quot;string&quot;: &quot;first&quot;,
&quot;target&quot;: &quot;cpp/utility/pair&quot;},
{&quot;string&quot;: &quot;std::pair::second&quot;,
&quot;target&quot;: &quot;cpp/utility/pair&quot;},
{&quot;on_group&quot;: &quot;std::pair&quot;,
&quot;string&quot;: &quot;second&quot;,
&quot;target&quot;: &quot;cpp/utility/pair&quot;},
{&quot;string&quot;: &quot;std::get(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/get&quot;},
{&quot;string&quot;: &quot;std::make_pair&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/make_pair&quot;},
{&quot;string&quot;: &quot;std::pair::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator=&quot;},
{&quot;on_group&quot;: &quot;std::pair&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::pair::pair&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/pair&quot;},
{&quot;string&quot;: &quot;std::pair::swap&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/swap&quot;},
{&quot;on_group&quot;: &quot;std::pair&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::pair)&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/swap2&quot;},
{&quot;string&quot;: &quot;std::tuple_element&lt;std::pair&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/tuple_element&quot;},
{&quot;string&quot;: &quot;std::tuple_size&lt;std::pair&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/pair/tuple_size&quot;},
{&quot;string&quot;: &quot;std::piecewise_construct&quot;,
&quot;target&quot;: &quot;cpp/utility/piecewise_construct&quot;},
{&quot;string&quot;: &quot;std::piecewise_construct_t&quot;,
&quot;target&quot;: &quot;cpp/utility/piecewise_construct_t&quot;},
{&quot;string&quot;: &quot;EXIT_SUCCESS&quot;,
&quot;target&quot;: &quot;cpp/utility/program/EXIT_status&quot;},
{&quot;string&quot;: &quot;EXIT_FAILURE&quot;,
&quot;target&quot;: &quot;cpp/utility/program/EXIT_status&quot;},
{&quot;string&quot;: &quot;SIG_ERR&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_ERR&quot;},
{&quot;string&quot;: &quot;SIG_DFL&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_strategies&quot;},
{&quot;string&quot;: &quot;SIG_IGN&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_strategies&quot;},
{&quot;string&quot;: &quot;SIGABRT&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGFPE&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGILL&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGINT&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGSEGV&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_types&quot;},
{&quot;string&quot;: &quot;SIGTERM&quot;,
&quot;target&quot;: &quot;cpp/utility/program/SIG_types&quot;},
{&quot;string&quot;: &quot;std::_Exit&quot;,
&quot;target&quot;: &quot;cpp/utility/program/_Exit&quot;},
{&quot;string&quot;: &quot;std::abort&quot;,
&quot;target&quot;: &quot;cpp/utility/program/abort&quot;},
{&quot;string&quot;: &quot;std::at_quick_exit&quot;,
&quot;target&quot;: &quot;cpp/utility/program/at_quick_exit&quot;},
{&quot;string&quot;: &quot;std::atexit&quot;,
&quot;target&quot;: &quot;cpp/utility/program/atexit&quot;},
{&quot;string&quot;: &quot;std::exit&quot;,
&quot;target&quot;: &quot;cpp/utility/program/exit&quot;},
{&quot;string&quot;: &quot;std::getenv&quot;,
&quot;target&quot;: &quot;cpp/utility/program/getenv&quot;},
{&quot;string&quot;: &quot;std::jmp_buf&quot;,
&quot;target&quot;: &quot;cpp/utility/program/jmp_buf&quot;},
{&quot;string&quot;: &quot;std::longjmp&quot;,
&quot;target&quot;: &quot;cpp/utility/program/longjmp&quot;},
{&quot;string&quot;: &quot;std::quick_exit&quot;,
&quot;target&quot;: &quot;cpp/utility/program/quick_exit&quot;},
{&quot;string&quot;: &quot;std::raise&quot;,
&quot;target&quot;: &quot;cpp/utility/program/raise&quot;},
{&quot;string&quot;: &quot;setjmp&quot;,
&quot;target&quot;: &quot;cpp/utility/program/setjmp&quot;},
{&quot;string&quot;: &quot;std::sig_atomic_t&quot;,
&quot;target&quot;: &quot;cpp/utility/program/sig_atomic_t&quot;},
{&quot;string&quot;: &quot;std::signal&quot;,
&quot;target&quot;: &quot;cpp/utility/program/signal&quot;},
{&quot;string&quot;: &quot;std::system&quot;,
&quot;target&quot;: &quot;cpp/utility/program/system&quot;},
{&quot;string&quot;: &quot;std::rel_ops::operator!=&quot;,
&quot;target&quot;: &quot;cpp/utility/rel_ops/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::rel_ops::operator&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/rel_ops/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::rel_ops::operator&lt;=&quot;,
&quot;target&quot;: &quot;cpp/utility/rel_ops/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::rel_ops::operator&gt;=&quot;,
&quot;target&quot;: &quot;cpp/utility/rel_ops/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::tuple&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple&quot;},
{&quot;string&quot;: &quot;std::forward_as_tuple&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/forward_as_tuple&quot;},
{&quot;string&quot;: &quot;std::get(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/get&quot;},
{&quot;string&quot;: &quot;std::ignore&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/ignore&quot;},
{&quot;string&quot;: &quot;std::make_tuple&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/make_tuple&quot;},
{&quot;string&quot;: &quot;std::tuple::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator=&quot;},
{&quot;on_group&quot;: &quot;std::tuple&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::tuple::swap&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/swap&quot;},
{&quot;on_group&quot;: &quot;std::tuple&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::tuple)&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/swap2&quot;},
{&quot;string&quot;: &quot;std::tie&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/tie&quot;},
{&quot;string&quot;: &quot;std::tuple::tuple&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/tuple&quot;},
{&quot;string&quot;: &quot;std::tuple_cat&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/tuple_cat&quot;},
{&quot;string&quot;: &quot;std::tuple_element&lt;std::tuple&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/tuple_element&quot;},
{&quot;string&quot;: &quot;std::tuple_size&lt;std::tuple&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/tuple_size&quot;},
{&quot;string&quot;: &quot;std::tuple_size_v&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/tuple_size&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::tuple&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/tuple/uses_allocator&quot;},
{&quot;string&quot;: &quot;va_arg&quot;,
&quot;target&quot;: &quot;cpp/utility/variadic/va_arg&quot;},
{&quot;string&quot;: &quot;va_copy&quot;,
&quot;target&quot;: &quot;cpp/utility/variadic/va_copy&quot;},
{&quot;string&quot;: &quot;va_end&quot;,
&quot;target&quot;: &quot;cpp/utility/variadic/va_end&quot;},
{&quot;string&quot;: &quot;va_list&quot;,
&quot;target&quot;: &quot;cpp/utility/variadic/va_list&quot;},
{&quot;string&quot;: &quot;va_start&quot;,
&quot;target&quot;: &quot;cpp/utility/variadic/va_start&quot;},
{&quot;string&quot;: &quot;std::variant&quot;,
&quot;target&quot;: &quot;cpp/utility/variant&quot;},
{&quot;string&quot;: &quot;std::bad_variant_access&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/bad_variant_access&quot;},
{&quot;string&quot;: &quot;std::variant::emplace&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/emplace&quot;},
{&quot;on_group&quot;: &quot;std::variant&quot;,
&quot;string&quot;: &quot;emplace&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/emplace&quot;},
{&quot;string&quot;: &quot;std::get(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/get&quot;},
{&quot;string&quot;: &quot;std::get_if&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/get_if&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::variant&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/hash&quot;},
{&quot;string&quot;: &quot;std::holds_alternative&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/holds_alternative&quot;},
{&quot;string&quot;: &quot;std::variant::index&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/index&quot;},
{&quot;on_group&quot;: &quot;std::variant&quot;,
&quot;string&quot;: &quot;index&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/index&quot;},
{&quot;string&quot;: &quot;std::monostate&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate&quot;},
{&quot;string&quot;: &quot;std::hash&lt;std::monostate&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/hash&quot;},
{&quot;string&quot;: &quot;std::monostate::monostate&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/monostate&quot;},
{&quot;string&quot;: &quot;std::monostate::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator=&quot;},
{&quot;on_group&quot;: &quot;std::monostate&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::monostate)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::monostate)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::monostate)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::monostate)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::monostate)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::monostate)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::monostate::~monostate&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/monostate/~monostate&quot;},
{&quot;string&quot;: &quot;std::variant::operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator=&quot;},
{&quot;on_group&quot;: &quot;std::variant&quot;,
&quot;string&quot;: &quot;operator=&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator=&quot;},
{&quot;string&quot;: &quot;operator==(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator!=(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&lt;=(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator_cmp&quot;},
{&quot;string&quot;: &quot;operator&gt;=(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/operator_cmp&quot;},
{&quot;string&quot;: &quot;std::variant::swap&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/swap&quot;},
{&quot;on_group&quot;: &quot;std::variant&quot;,
&quot;string&quot;: &quot;swap&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/swap&quot;},
{&quot;string&quot;: &quot;std::swap(std::variant)&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/swap2&quot;},
{&quot;string&quot;: &quot;std::uses_allocator&lt;std::variant&gt;&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/uses_allocator&quot;},
{&quot;string&quot;: &quot;std::variant::valueless_by_exception&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/valueless_by_exception&quot;},
{&quot;on_group&quot;: &quot;std::variant&quot;,
&quot;string&quot;: &quot;valueless_by_exception&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/valueless_by_exception&quot;},
{&quot;string&quot;: &quot;std::variant::variant&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/variant&quot;},
{&quot;string&quot;: &quot;std::variant_alternative&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/variant_alternative&quot;},
{&quot;string&quot;: &quot;std::variant_alternative_t&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/variant_alternative&quot;},
{&quot;string&quot;: &quot;std::variant_npos&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/variant_npos&quot;},
{&quot;string&quot;: &quot;std::variant_size&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/variant_size&quot;},
{&quot;string&quot;: &quot;std::variant_size_v&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/variant_size&quot;},
{&quot;string&quot;: &quot;std::visit&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/visit&quot;},
{&quot;string&quot;: &quot;std::variant::~variant&quot;,
&quot;target&quot;: &quot;cpp/utility/variant/~variant&quot;}]}</text>
      <sha1>gc3drwinw0ifee5tzqvjpaixp9owa9m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Common.css</title>
    <ns>8</ns>
    <id>1790</id>
    <revision>
      <id>75241</id>
      <parentid>75240</parentid>
      <timestamp>2015-01-12T22:04:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>revert to 72086; the changes were supposed to be done on ar: wiki</comment>
      <text xml:space="preserve" bytes="41712">/* ======================================================================
   CUSTOMIZATION
 ------------------------------------------------------------------------
*/
 

/* local dejavu fonts */
@font-face {
    font-family: &quot;DejaVuSans&quot; ;
    src: local(&quot;DejaVu Sans&quot;), url( &quot;/DejaVuSans.ttf&quot; ) format(&quot;truetype&quot;);
    font-weight: normal;
}

@font-face {
    font-family: &quot;DejaVuSans&quot; ;
    src: local(&quot;DejaVu Sans Bold&quot;), url( &quot;/DejaVuSans-Bold.ttf&quot; ) format(&quot;truetype&quot;);
    font-weight: bold;
}

@font-face {
    font-family: &quot;DejaVuSansMono&quot; ;
    src: local(&quot;DejaVu Sans Mono Book&quot;), url( &quot;/DejaVuSansMono.ttf&quot; ) format(&quot;truetype&quot;);
    font-weight: normal;
}

@font-face {
    font-family: &quot;DejaVuSansMono&quot; ;
    src: local(&quot;DejaVu Sans Mono Bold&quot;), url( &quot;/DejaVuSansMono-Bold.ttf&quot; ) format(&quot;truetype&quot;);
    font-weight: bold;
}

@font-face {
    font-family: &quot;DejaVuSansMonoCondensed60&quot; ;
    src: url( &quot;/DejaVuSansMonoCondensed60.ttf&quot; ) format(&quot;truetype&quot;);
    font-weight: normal;
}

@font-face {
    font-family: &quot;DejaVuSansMonoCondensed75&quot; ;
    src: url( &quot;/DejaVuSansMonoCondensed75.ttf&quot; ) format(&quot;truetype&quot;);
    font-weight: normal;
}

/* hide some visual components */
.toc, #toc,                /* table of contents */
#p-logo,                   /* wiki logo */
#siteSub,                  /* subheadings below the firstHeading */
#footer-info-viewcount,    /* page view count */
.catlinks {                /* category link box */
    display: none !important;
}

div#contentSub:empty {
    display: none;
}

div#mw-panel {
    top: 40px
}

#mw-head {
    min-width: inherit;
    left: 0;
}

/*----------------------------------------------------------------------*/
/* search results style */

.mw-search-results li {
    padding-bottom: 0.4em;
    font-size: 1.0em;
    line-height: 1.1em;
}

.page-Special_Search div.mw-search-result-data,
.page-Special_Search p.mw-search-createlink,
.page-Special_Search p.mw-search-pager-bottom,
.page-Special_Search div.mw-search-formheader,
.page-Special_Search #mw-searchoptions {
    display: none;
}

/*----------------------------------------------------------------------*/
html, body {
    font-family: DejaVuSans, &quot;DejaVu Sans&quot;, arial, sans-serif;
    font-size: 16px;
}

body.skin-vector {
    min-width: 80em;
}

div#bodyContent {
    line-height: 1.2em;
    position: static;
}

#content {
    line-height: 1.2em;
    position: relative;
}

p, dd {
    line-height: 1.2em;
}

ul li {
    line-height: 1.2em;
    margin-top: 0.3em;
}

h1 {
    font-size: 2em;
}

h3 {
    padding: 1.1em 0 0.2em 0.75em;
}

/* teletype font */
tt,
code,
pre,
.mw-geshi,
.t-lc,
#wpTextbox1 {
    font-family: DejaVuSansMono, &quot;DejaVu Sans Mono&quot;, courier, monospace !important;
}

code,
table {
    background-color: transparent;
}

/* bold font */
strong, b {
    font-weight: bold;
}

/* link image for interwiki links */
#content a.extiw, #content a.extiw:active {
    /* @embed */
    background: url(&quot;/mwiki/skins/vector/images/external-link-ltr-icon.png&quot;)
                no-repeat scroll right center transparent !important;
    padding: 0 13px 0 0 !important;
}

table.fmbox,
table.ombox,
div.template-documentation,
fieldset {
    border-radius: 5px;
}

/* ----------------------------------------------------------------------
   Main page
*/

body.page-Main_Page h1.firstHeading,
body.page-Заглавная_страница h1.firstHeading,
body.page-Hauptseite h1.firstHeading,
body.page-Página_principal h1.firstHeading,
body.page-Accueil h1.firstHeading,
body.page-대문 h1.firstHeading,
body.page-Pagina_principale h1.firstHeading,
body.page-メインページ h1.firstHeading,
body.page-Página_principal h1.firstHeading,
body.page-首页 h1.firstHeading,
body.page-Ana_sayfa h1.firstHeading,
body.page-Hlavní_strana h1.firstHeading {
    display: none;
}


.mainpagetable tr.rowtop * {
    line-height: 1em;
}

.mainpagetable tr.row td:first-child {
    border-left: 1px solid silver;
    padding-left: 1em;
}

.mainpagetable tr.row td:last-child {
    border-right: 1px solid silver;
    padding-right: 1em;
}

.mainpagetable tr.rowtop td:first-child {
    border-top-left-radius: 5px;
}

.mainpagetable tr.rowtop td:last-child {
    border-top-right-radius: 5px;
}

.mainpagetable tr.rowbottom td:first-child {
    border-bottom-left-radius: 5px;
}

.mainpagetable tr.rowbottom td:last-child {
    border-bottom-right-radius: 5px;
}

.mainpagetable tr.row td {
    border-bottom: 1px solid silver;
    padding: 0.5em;
    background: #fafafa;
}

.mainpagetable tr.rowtop td {
    border-top: 1px solid silver;
    background: #f8f8f8;
}

.mainpagetable p {
    margin: 0;
}

div.mainpagediv {
    font-size: 85%;
    line-height: 1.2em;
    margin-left: 2em;
    width: auto;
}

div.mainpagediv * {
    line-height: 1.2em;
}

/* ----------------------------------------------------------------------
   Geshi
*/
pre,
div.mw-geshi {
    border: 1px solid silver;
    border-radius: 5px;
    padding: 1em;
    margin: 1em 0;
    width: 55em;
    background-color: #F9F9F9;
    overflow:auto;
}

span.mw-geshi {
    white-space: nowrap;
}

.mw-geshi a {
    color: #003080;
}

/* ----------------------------------------------------------------------
   Template:c
*/
.t-c {
    background-color: transparent;
    background-color: rgba(0,0,0,0.031);
    border: 1px solid #D6D6D6; 
    border-radius: 3px; 
    margin: 0 2px; 
    padding: 0 2px;
    display: inline-block;
}

/* ----------------------------------------------------------------------
   Template:lc
*/
body.ns-10 .t-lc {
    border-bottom: 1px solid blue;
}

body.ns-10 .t-lc a {
    border-bottom: none;
}

/* ----------------------------------------------------------------------
   Template:vertical
*/
.t-vertical {
    width: 1.5em;
    white-space: nowrap;
    margin: 0 auto;
}

.t-vertical &gt; div {
    -moz-transform: translate(50%, 50%) rotate(90deg);
    -moz-transform-origin: 50% 0%;
    -o-transform: translate(50%, 50%) rotate(90deg);
    -o-transform-origin: 50% 0%;
    -webkit-transform: translate(50%, 50%) rotate(90deg);
    -webkit-transform-origin: 50% 0%;
    -ms-transform: translate(50%, 50%) rotate(90deg);
    -ms-transform-origin: 50% 0%;
    transform: translate(50%, 50%) rotate(90deg);
    transform-origin: 50% 0%;
    float: right;
}

/* ----------------------------------------------------------------------
   Template:li
*/
.t-li1,
.t-li2,
.t-li3 {
    text-indent: -5em;
    padding: 0.2em 0 0.2em 0;
}

.t-li1 &gt; *,
.t-li2 &gt; *,
.t-li3 &gt; * {
    text-indent: 0em;
}

.t-li1 {
    padding-left: 3em;
}

.t-li2 {
    padding-left: 5em;
}

.t-li3 {
    padding-left: 7em;
}

.t-li {
    display: inline-block;
    width: 5em;
    text-align: right;
}

/* ----------------------------------------------------------------------
   Template:lines
*/
.t-lines {
    display: table;
}

.t-lines &gt; span {
    display: table-row;
}

.t-lines &gt; span * {
    line-height: 1em;
}

.t-lines &gt; span:empty:after {
    content: &quot;\a0&quot;;
}

/* ----------------------------------------------------------------------
   Template:math
*/
span.texhtml {
    font-style: italic;
}

/* ----------------------------------------------------------------------
   Template:mfrac
*/
.t-mfrac &gt; table {
    display: inline-block;
    vertical-align: middle;
    padding: 0;
    border-spacing: 0;
    text-align: center;
    font-size: 0.9em;
}

.t-mfrac &gt; table &gt; tbody &gt; tr &gt; td {
    border: none;
}

.t-mfrac &gt; table &gt; tbody &gt; tr:first-child &gt; td {
    border-bottom:0.1em solid;
}

/* ----------------------------------------------------------------------
   Template:mrad
*/
.t-mrad {
    white-space: nowrap;
    margin-top: 1px;
}

.t-mrad &gt; span:nth-last-child(3) {
    font-size: 0.7em;
    vertical-align: 0.8em;
    margin-right: -0.5em;
}

.t-mrad &gt; span:nth-last-child(2) {
    font-size: 1.1em;
}

.t-mrad &gt; span:nth-last-child(1) {
    border-top: 0.1em solid;
}

/* ----------------------------------------------------------------------
   Template:su
*/

.t-su {
    display: inline-block;
    margin-bottom: -0.3em;
    vertical-align: 0.8em;
    line-height: 1.2em;
    font-size: 85%;
    text-align: left;
}

.t-su-b {
    vertical-align: -0.4em;
}

/* ----------------------------------------------------------------------
   Template:mparen
*/

.t-mparen,
.t-mparen &gt; span {
    white-space: nowrap;
    display: inline-block;
    vertical-align: middle;
}

.t-mparen &gt; span:nth-child(1),
.t-mparen &gt; span:nth-child(3) {
    font-style: normal;
    line-height: 1.1em;
}

.t-mparen &gt; span:nth-child(2) {
    line-height: 1.5em;
    text-align: center;
}

/* ----------------------------------------------------------------------
   Template:cc
*/
.t-cc {
    display: inline-block;
    border-top: 1px solid silver;
    border-bottom: 1px solid silver;
    padding: 0.3em 1em 0.2em 1em;
}

/* ----------------------------------------------------------------------
   Template:example
*/
.t-example-live-link {
    width: 55em;
    display: none;
}

body.ns-10 .t-example-live-link {
    display: none;
}

.t-example .mw-geshi {
    margin: 0 0 1em 0;
}

/* ----------------------------------------------------------------------
   Template:member
*/
.t-member {
    background-color: #f8f8f8;
    border: 1px solid #aaa;
    margin: 1em 0 0;
    overflow: hidden;
    padding: 0.2em 1em 1em;
}

.t-member &gt; h1 {
    font-size: 1.8em;
}

/* ----------------------------------------------------------------------
   Template:inherited
*/
.t-inherited {
    overflow: hidden;
    margin: 1em 0 0 0;
    border: 1px solid #aaa;
    background-color: #f3f3fc;
    padding: 0.2em 1em 1em 1em;
}

/* ----------------------------------------------------------------------
   Template:inheritance diagram
   Template:image
*/
.t-inheritance-diagram,
.t-image {
    display: table;
    border: 1px solid #aaa;
    padding: 0.2em 0.2em 0.2em 0.2em;
    margin: 1.0em 0 0.5em 0;
}

/* ----------------------------------------------------------------------
   Template:plot return
*/
.t-plot {
    display: table;
    position: relative;
    border: 1px solid #aaa;
    padding: 0.2em 0.2em 0.2em 0.2em;
    font-size: 0.7em;
}

.t-plot-left {
    position: absolute;
    bottom: 5em;
    /* 90 degree text rotation */
    -moz-transform:rotate(270deg);
    -moz-transform-origin: top left;
    -webkit-transform: rotate(270deg);
    -webkit-transform-origin: top left;
    -o-transform: rotate(270deg);
    -o-transform-origin:  top left;
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
}

.t-plot-right {
    position: absolute;
    bottom: 7em;
    left: 100%;
    white-space: nowrap;
    /* 90 degree text rotation */
    -moz-transform:rotate(270deg);
    -moz-transform-origin: bottom left;
    -webkit-transform: rotate(270deg);
    -webkit-transform-origin: bottom left;
    -o-transform: rotate(270deg);
    -o-transform-origin:  bottom left;
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
}

.t-plot-image {
}
.t-plot-image-left,
.t-plot-image-left-right {
    padding-left: 2em;
}
.t-plot-image-right,
.t-plot-image-left-right {
    padding-right: 2em;
}
.t-plot-bottom {
    padding-left: 6em;
}

/* ----------------------------------------------------------------------
   Template:navbar
*/
body.cpp-navbar div#content,
body.cpp-page-template div#content {
    padding-top: 32px;
}

body.cpp-navbar div#contentSub,
body.cpp-page-template div#contentSub {
    display: none;
}

.t-navbar {
    position: absolute;
    top: 0;
    left: 0;

    display: inline-block;
    height: 22px;
}

.t-navbar-head,
.t-navbar-sep {
    float: left;
    font-size: 0.9em;

    padding-top: 0.4em;
    padding-bottom: 0.3em;

    border-bottom: 1px solid silver;
    background-origin: border-box;

    height: 100%;
    box-sizing: border-box;
    -moz-box-sizing: border-box;
}

.t-navbar-head {
    padding-right: 0.2em;
    padding-left: 0.2em;
}

.t-navbar-head:nth-child(1) {
    padding-left: 1em;
}

.t-navbar-menu {
    position: relative;
    clear: both;
    display: none;
}

.t-navbar-head:hover &gt; div.t-navbar-menu {
    display: block;
}

.t-navbar-menu &gt; div {
    position: absolute;
    display: inline-block;

    background-color: white;
    border-radius: 3px;
    border: 1px solid silver;
    border-top-width: 0;
    padding: 0.5em;

    white-space: nowrap;
    z-index: 1;
}

.t-navbar-menu .editsection {
    display: none;
    font-size: 0.7em;
    opacity: 0.4;
    line-height: 1em;
}

.t-navbar-sep {
    width: 8px;

    /* @embed */
    background-image: url(&quot;/mwiki/skins/cppreference2/images/navbar-tab.png&quot;);
    background-repeat: no-repeat;
    background-position: right bottom;
}

.t-navbar-sep:first-child {
    /* @embed */
    background-image: url(&quot;/mwiki/skins/cppreference2/images/navbar-inv-tab.png&quot;);
    background-repeat: no-repeat;
    background-position: left bottom;

    border-bottom-width: 0;
}


body.skin-cppreference .t-navbar-sep:first-child,
body.skin-vector       .t-navbar-sep:first-child {
    display: none;
}

body.skin-cppreference .t-navbar-head:nth-child(2),
body.skin-vector       .t-navbar-head:nth-child(2) {
    padding-left: 1em;
}

.t-navbar-sep:last-child {
    border-bottom-width: 0;
}

/* ----------------------------------------------------------------------
   Template:page-template
*/
.t-page-template {
    position: absolute;
    top: 0;
    right: 0;

    display: inline-block;
}

.t-page-template .editsection {
    display: none;
    font-size: 0.7em;
    opacity: 0.4;
    line-height: 1em;
}

/* ----------------------------------------------------------------------
   Template:template
*/
.t-template-editlink {
    float: right;
    position: relative;
}

.t-template-editlink .editsection {
    display: none;
    font-size: 0.7em;
    opacity: 0.4;
    position: absolute;
    right: 0;
    top: -2px;
}

/* ----------------------------------------------------------------------
   Template:noexcept
*/
.t-noexcept-full,
.t-noexcept-inline {
    display: inline;
}

.t-noexcept-full .t-dcl-begin,
.t-noexcept-inline .t-dcl-begin {
    padding: 0;
}

.t-noexcept-full .t-noexcept-box {
    padding: 0 0 1em 3em;
}

.t-noexcept-inline &gt; .t-noexcept-box {
    display: inline-block; 
    vertical-align: middle; 
    padding:0;
}

.t-rev .t-noexcept-full .t-mark-rev,
.t-rev .t-noexcept-inline .t-mark-rev {
    display: none;
}

/* ----------------------------------------------------------------------
   Template:cmark
   Template:mark
*/
.t-cmark {
    color: #808080;
    font-size: 0.80em;
}

.t-mark,
.t-mark-rev {
    color: #008000;
    font-size: 0.80em;
}

.t-mark-rev.t-mark-ts {
    color: #e06000;
}

.wikitable th .t-mark {
    font-weight: normal;
}

/* ----------------------------------------------------------------------
   Template:spar
*/
.t-spar {
    color: #808080;
    font-style: italic;
}

/* ----------------------------------------------------------------------
   Template:dsc small
   Template:dsc *
*/
.t-dsc-small {
    font-weight: normal;
    font-size:0.7em;
    line-height:130%;
}

.t-dsc-begin {
    max-width: 60em;
    border-spacing: 0;
}

.t-dsc &gt; td:first-child {
    width: 0%;
    line-height: 1.2em;
    padding: 0.2em 0 0.25em 0.75em;
    white-space: nowrap;
}

.t-dsc &gt; td:last-child {
    line-height: 1.1em;
    padding-left: 0.75em;
    white-space: normal;
}

.t-dsc .editsection {
    display: none;
    font-size: 0.7em;
    opacity: 0.4;
}

.t-dsc-hitem &gt; td {
    font-weight: bold;
    line-height: 1.1em;
    padding: 0.2em 0 0.25em 0.75em;
    white-space: nowrap;
}

.t-dsc &gt; td,
.t-dsc-hitem &gt; td {
    border-top: 1px solid #CCCCCC;
}

.t-dsc-header &gt; td {
    padding: 0;
    font-size: 0.8em;
    line-height: 1em;
}

.t-dsc-header &gt; td:nth-child(1) &gt; div {
    margin-left: 2em;
}

.t-dsc-see {
    padding: 0.2em 0 0.2em 0;
}

.t-dsc-see &gt; span:nth-child(2) &gt; span,
.t-dsc-see &gt; span:nth-child(1) {
    font-weight: bold;
}

.t-dsc-see-tt &gt; span {
   font-family: DejaVuSansMono, &quot;DejaVu Sans Mono&quot;, courier, monospace;
}

/* ----------------------------------------------------------------------
   .dsctable
*/

.dsctable td ul,
.dsctable td ol,
.dsctable td dl {
    text-align: left;
}

.dsctable {
    max-width: 60em;
    border-spacing: 0;
}

.dsctable &gt; tbody &gt; tr &gt; td {
    border-top: 1px solid silver;
    width: 0%;
    line-height: 1.2em;
    padding: 0.2em 0.1em 0.25em 0.75em;
    white-space: nowrap;
}

.dsctable &gt; tbody &gt; tr:last-child &gt; td {
    border-bottom: 1px solid silver;
}

.dsctable &gt; tbody &gt; tr &gt; th {
    font-weight: bold;
    line-height: 1.1em;
    padding: 0.2em 0 0.25em 0.75em;
    white-space: nowrap;
}

/* ----------------------------------------------------------------------
   Template:dcl *
*/
.t-dcl-begin {
    display: block;
    padding: 0.5em 0;
    border-spacing: 0;
}

.t-dcl-header &gt; td:nth-child(1) &gt; div {
    margin-left: 2em;
    font-size: 0.8em;
}

.t-dcl-h &gt; td:nth-child(1) &gt; div {
    margin-left: 2em;
    padding-top: 0.7em;
    font-size: 0.8em;
    font-weight: bold;
}

.t-dcl &gt; td:nth-child(1) {
    padding: 0.3em 2em 0.2em 1em;
    font-size: 1.0em;
}

.t-dcl &gt; td:nth-child(1) &gt; div p,
.t-dcl &gt; td:nth-child(1) &gt; div span {
    line-height: 1.1em;
    margin: 0;
    padding: 0;
}

.t-dcl &gt; td:nth-child(2),
.t-dcl-rev-aux &gt; td:nth-child(2) {
    font-size: 0.8em;
    padding-right: 1.5em;
}

.t-dcl &gt; td:nth-child(3),
.t-dcl-rev-aux &gt; td:nth-child(3) {
    padding: 0;
}

.t-dcl-nopad {
    padding-right: 0 !important;
}

/* Apply the dark border */
.t-dcl &gt; td,
.t-dcl-h &gt; td,
.t-dcl-sep &gt; td,
.t-dcl-rev &gt; .t-dcl:first-child &gt; td, /* if dcl-rev-aux is hidden */
.t-dcl-rev &gt; .t-dcl-rev-aux &gt; td {
    border-top: 1px solid #cccccc;
}

.t-dcl-sep &gt; td {
    padding: 0;
}

/* Apply the light border to the dcl-rev elements */
.t-dcl-rev &gt; .t-dcl &gt; td,
.t-dcl-rev &gt; .t-dcl-h &gt; td {
    border-top: 1px solid #e8e8e8;
}

/* Do not apply any border to the first element in dcl-rev block */
.t-dcl-rev-aux + .t-dcl td {
    border-top: none;
}

/* Reduce padding. Preserve padding for the first and the last visible 
   code elements */
.t-dcl-rev-aux ~ .t-dcl ~ .t-dcl td {
    /* Here we abuse CSS a bit to ensure that at least one block has 
       his top padding left untouched */
    padding-top: 0;
}

.t-dcl-rev .t-dcl:not(:nth-last-child(1)) td {
    padding-bottom: 0;
}

.t-dcl-rev-aux &gt; td:nth-child(1),
.t-dcl-rev-aux &gt; td:nth-child(3) {
    padding: 0;
}

/* Override columns overridden by data in dcl-rev entry */
.t-dcl-rev-num &gt; .t-dcl-rev-aux ~ tr:not(.t-dcl-rev-aux) &gt; td:nth-child(2) {
    display: none;
}

.t-dcl-rev-notes &gt; .t-dcl-rev-aux ~ tr:not(.t-dcl-rev-aux) &gt; td:nth-child(3) {
    display: none;
}

/* ----------------------------------------------------------------------
   Template:sdsc *
*/
.t-sdsc-begin {
}

.t-sdsc &gt; td:first-child {
    padding: 0.5em 0 0.5em 1em;
    font-size: 1em;
}

.t-sdsc dd,
.t-sdsc p,
.t-sdsc span {
    line-height: 1.1em;
}

.t-sdsc &gt; td:nth-last-child(2) {
    padding-left: 3em;
}

.t-sdsc &gt; td:nth-last-child(1) {
    padding-left: 2em;
}

.t-sdsc-nopad {
    padding-left: 0 !important;
}

.t-sdsc-sep {
    border-top: 1px solid #CCCCCC;
    padding: 0;
}


/* ----------------------------------------------------------------------
   Template:nv *
*/
.t-nv-begin {
    line-height: 1em;
    width: auto;
    border-spacing: 0;
}

.t-nv-h1 &gt; td {
    padding: 0.2em 0 0.2em 1.4em;
    font-size: 1.25em;
    font-weight: bold;
}

.t-nv-h2 &gt; td {
    padding: 0.2em 0 0.2em 1em;
    font-weight: bold;
}

.t-nv-ln-table {
    vertical-align: middle;
    display: table;
    padding: 0;
    border-spacing: 0;
}

.t-nv-ln-table &gt; div {
    display: table-cell;
}

.t-nv-ln-table &gt; div:nth-child(1) {
    font-family: DejaVuSansMonoCondensed75, &quot;DejaVu Sans Mono&quot;, courier, monospace;
    padding: 0;
}

.t-nv-ln-table &gt; div:nth-child(2) {
    padding: 0 0 0 0.2em;
}

/* ----------------------------------------------------------------------
   Template:par *
*/
.t-par-begin {
    border-spacing: 0;
}

.t-par &gt; td {
    padding: 0.5em 1em 0 0;
    vertical-align: top;
}

.t-par &gt; td:nth-child(1) {
    white-space: nowrap;
    text-align: right;
    font-weight: bold;
    font-family: DejaVuSansMono, &quot;DejaVu Sans Mono&quot;, courier, monospace;
}

.t-par &gt; td:nth-child(3) {
    width: 100%;
}

.t-par-hitem &gt; td {
    font-weight: bold;
    padding: 0.8em 0 0.3em 1em;
}

.t-par-req {
    padding: 0.5em 1em 0 0;
}

.t-par-req .spacer {
    display: inline-block;
    width: 1.2em;
}

.t-par .editsection {
    display: none;
    font-size: 0.7em;
    opacity: 0.4;
}

/* ----------------------------------------------------------------------
   Template:rev *
*/
.t-rev-begin {
    border-spacing: 0;
    border-collapse: collapse;
}

.t-rev &gt; td {
    padding: 0.3em 0.2em;
}

.t-rev-begin-noborder .t-rev &gt; td {
    padding: 0;
    border: none !important;
}

.t-rev-begin-noborder .t-rev &gt; td:first-child {
    padding-right: 0.2em;
}

.t-dsc .t-rev-begin {
    display: inline-table;
}

.t-rev &gt; td:nth-child(1) {
    border: 1px solid silver;
    border-right: none;
}

.t-rev &gt; td:nth-child(2) {
    border: 1px solid silver;
    border-left: none;
    white-space: nowrap
}

.t-rev &gt; td &gt; p:first-child {
    margin-top: 0em;
}

.t-rev &gt; td &gt; p:last-child {
    margin-bottom: 0em;
}

div#content .t-rev &gt; td:first-child &gt; ul:last-child {
    margin-bottom: 0em;
}

div#content .t-rev &gt; td:first-child &gt; ul:first-child {
    margin-top: 0em;
}

.t-rev &gt; td:first-child &gt; ul:first-child &gt; li:first-child {
    margin-top: 0em;
}

.t-rev-inl,
.t-rev-inl &gt; span {
    margin: 0;
    padding: 0;
}

.t-rev-inl {
    border: 1px solid silver;
}

.t-rev-inl.t-rev-inl-noborder {
    border: none;
}

/* ----------------------------------------------------------------------
   Template:member*
*/
.t-dsc-member-div &gt; div {
    padding: 0;
    display: inline-table;
    vertical-align: middle;
}

.t-dsc-member-div &gt; div:nth-child(1) {
    font-weight: bold;
    font-family: DejaVuSansMono, &quot;DejaVu Sans Mono&quot;, courier, monospace;
}

.t-dsc-member-div &gt; div:nth-child(2) {
    padding-left: 0.2em;
}

.t-dsc-member-nobold-div &gt; div:nth-child(1),
.t-dsc-member-nobold-div &gt; div:nth-child(1) strong.selflink {
    font-weight: normal;
    font-family: DejaVuSans, &quot;DejaVu Sans&quot;, arial, sans-serif;
}

/* ----------------------------------------------------------------------
   Template:tr
*/

.t-tr-text {
    display: inline;
}

.t-tr-text:hover {
    background: #eef;
    transition: background 0.2s ease-in-out 1s;
    -webkit-transition: background 0.2s ease-in-out 1s;
    -moz-transition: background 0.2s ease-in-out 1s;
    -o-transition: background 0.2s ease-in-out 1s;
}

.t-tr-dropdown {
    display: inline-block;
    line-height: 1em;
    visibility: collapse;
    width: 0;
    height: 0;
    position: relative
}

.t-tr-text:hover &gt; .t-tr-dropdown {
    visibility: visible;
    transition: visibility 0 linear 1s;
    -webkit-transition: visibility 0 linear 1s;
    -moz-transition: visibility 0 linear 1s;
    -o-transition: visibility 0 linear 1s;
}

.t-tr-dropdown &gt; div {
    opacity: 0;
    transition: opacity 0.1s linear 0s;
    -moz-transition: opacity 0.1s linear 0s;
    -webkit-transition: opacity 0.1s linear 0s;
    -o-transition: opacity 0.1s linear 0s;

    top: 0;
    left: -110px;
    position: absolute;
    padding-top: 12px;
}

.t-tr-text:hover &gt; .t-tr-dropdown &gt; div {
    opacity: 1;
    transition: opacity 0.2s ease-in-out 1s;
    -webkit-transition: opacity 0.2s ease-in-out 1s;
    -moz-transition: opacity 0.2s ease-in-out 1s;
    -o-transition: opacity 0.2s ease-in-out 1s;
}

.t-tr-dropdown &gt; div &gt; div {
    background-color: white;
    border: 1.5px solid silver;
    font-size: 0.9em;
    padding: 5px;
    width: 400px;
    border-radius: 5px;
    box-shadow: 0 0 3px #888888;
}

.t-tr-dropdown-arrow-border {
    border-color: transparent transparent silver transparent ;
    border-style: solid;
    border-width: 8px;
    height:0;
    width:0;
    position:absolute;
    top:-3px;
    left:100px;
}

.t-tr-dropdown-arrow {
    border-color: transparent transparent white transparent;
    border-style: solid;
    border-width: 8px;
    height:0;
    width:0;
    position:absolute;
    top:-2px;
    left:100px;
}

.t-tr-dropdown-h {
    padding-left: 1em;
    padding-bottom: 0.5em;
    font-size: 0.8em;
}

.t-tr-dropdown-notes {
    padding-left: 1em;
    padding-top: 0.5em;
    font-size: 0.8em;
}

/* ======================================================================
   WIKIPEDIA DEFAULTS
 ------------------------------------------------------------------------
*/


/* Footer and header message box styles */
table.fmbox {
    clear: both;
    margin: 0.2em 0;
    width: 100%;
    border: 1px solid #aaa;
    background: #f9f9f9;     /* Default &quot;system&quot; gray */
}
table.fmbox-system {
    background: #f9f9f9;
}
table.fmbox-warning {
    border: 1px solid #bb7070;  /* Dark pink */
    background: #ffdbdb;        /* Pink */
}
table.fmbox-editnotice {
    background: transparent;
}


/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text {   /* The message body cell(s) */
    border: none;
    padding: 0.25em 0.9em;     /* 0.9em left/right */
    width: 100%;               /* Make all mboxes the same width regardless of text length */
}
td.mbox-image {                /* The left image cell */
    border: none;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */
    text-align: center;
}
td.mbox-imageright {           /* The right image cell */
    border: none;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */
    text-align: center;
}
td.mbox-empty-cell {           /* An empty narrow cell */
    border: none;
    padding: 0px;
    width: 1px;
}

/* ======================================================================
   DEFAULTS
 ------------------------------------------------------------------------
*/
/* CSS placed here will be applied to all skins */

/* Main page fixes */
#interwiki-completelist {
    font-weight: bold;
}
body.page-Main_Page #ca-delete {
    display: none !important;
}

body.page-Main_Page #mp-topbanner {
   clear: both;
}

/* Edit window toolbar */
#toolbar {
    height: 22px;
    margin-bottom: 6px;
}

/* Margins for &lt;ol&gt; and &lt;ul&gt; */
div#content ol, div#content ul,
div#mw_content ol, div#mw_content ul {
    margin-bottom: 0.5em;
}

/* Make the list of references smaller */
ol.references,
div.reflist,
div.refbegin {
    font-size: 90%;            /* Default font-size */
}
div.reflist ol.references {
    font-size: 100%;           /* Reset font-size when nested in div.reflist */
    list-style-type: inherit;  /* Enable custom list style types */
}

/* Highlight clicked reference in blue to help navigation */
ol.references li:target,
sup.reference:target,
span.citation:target {
    background-color: #DEF;
}

/* Ensure refs in table headers and the like aren't bold or italic */
sup.reference {
    font-weight: normal;
    font-style: normal;
}

/* Styling for citations */
span.citation, cite {
    font-style: normal;
    word-wrap: break-word;
}

/* For linked citation numbers and document IDs, where
   the number need not be shown on a screen or a handheld,
   but should be included in the printed version
*/
@media screen, handheld {
    span.citation *.printonly {
        display: none;
    }
}

.collapseButton {          /* 'show'/'hide' buttons created dynamically */
    float: right;          /* by the CollapsibleTables javascript in    */
    font-weight: normal;   /* [[MediaWiki:Common.js]] are styled here   */
    text-align: right;     /* so they can be customised.                */
    width: auto;
}

/* Normal font styling for table row headers with scope=&quot;row&quot; tag */
.wikitable.plainrowheaders th[scope=row] {
    font-weight: normal;
    text-align: left;
}

/* lists in data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
    text-align: left;
}

/* Change the external link icon to an Adobe icon for all PDF files
   in browsers that support these CSS selectors, like Mozilla and Opera */
div#content a[href$=&quot;.pdf&quot;].external,
div#content a[href*=&quot;.pdf?&quot;].external,
div#content a[href*=&quot;.pdf#&quot;].external,
div#content a[href$=&quot;.PDF&quot;].external,
div#content a[href*=&quot;.PDF?&quot;].external,
div#content a[href*=&quot;.PDF#&quot;].external,
div#mw_content a[href$=&quot;.pdf&quot;].external,
div#mw_content a[href*=&quot;.pdf?&quot;].external,
div#mw_content a[href*=&quot;.pdf#&quot;].external,
div#mw_content a[href$=&quot;.PDF&quot;].external,
div#mw_content a[href*=&quot;.PDF?&quot;].external,
div#mw_content a[href*=&quot;.PDF#&quot;].external {
    /* @embed */
    background: url(&quot;http://upload.cppreference.com/mwiki/images/2/23/Icons-mini-file_acrobat.gif&quot;) center right no-repeat;
    padding-right: 18px;
}

/* Messagebox templates */
.messagebox {
    border: 1px solid #aaa;
    background-color: #f9f9f9;
    width: 80%;
    margin: 0 auto 1em auto;
    padding: .2em;
}
.messagebox.merge {
    border: 1px solid #c0b8cc;
    background-color: #f0e5ff;
    text-align: center;
}
.messagebox.cleanup {
    border: 1px solid #9f9fff;
    background-color: #efefff;
    text-align: center;
}
.messagebox.standard-talk {
    border: 1px solid #c0c090;
    background-color: #f8eaba;
    margin: 4px auto;
}
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk,
.messagebox.nested-talk {
    border: 1px solid #c0c090;
    background-color: #f8eaba;
    width: 100%;
    margin: 2px 0;
    padding: 2px;
}
.messagebox.small {
    width: 238px;
    font-size: 85%;
    float: right;
    clear: both;
    margin: 0 0 1em 1em;
    line-height: 1.25em;
}
.messagebox.small-talk {
    width: 238px;
    font-size: 85%;
    float: right;
    clear: both;
    margin: 0 0 1em 1em;
    line-height: 1.25em;
    background: #F8EABA;
}

/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text {   /* The message body cell(s) */
    border: none;
    padding: 0.25em 0.9em;     /* 0.9em left/right */
    width: 100%;               /* Make all mboxes the same width regardless of text length */
}
td.mbox-image {                /* The left image cell */
    border: none;
    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */
    text-align: center;
}
td.mbox-imageright {           /* The right image cell */
    border: none;
    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */
    text-align: center;
}
td.mbox-empty-cell {           /* An empty narrow cell */
    border: none;
    padding: 0px;
    width: 1px;
}

/* Article message box styles */
table.ambox {
    margin: 0px 10%;                  /* 10% = Will not overlap with other elements */
    border: 1px solid #aaa;
    border-left: 10px solid #1e90ff;  /* Default &quot;notice&quot; blue */
    background: #fbfbfb;
}
table.ambox + table.ambox {      /* Single border between stacked boxes. */
    margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text {            /* The message body cell(s) */
    padding: 0.25em 0.5em;       /* 0.5em left/right */
}
.ambox td.mbox-image {           /* The left image cell */
    padding: 2px 0 2px 0.5em;    /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright {      /* The right image cell */
    padding: 2px 0.5em 2px 0;    /* 0px left, 0.5em right */
}

table.ambox-notice {
    border-left: 10px solid #1e90ff;    /* Blue */
}
table.ambox-speedy {
    border-left: 10px solid #b22222;    /* Red */
    background: #fee;                   /* Pink */
}
table.ambox-delete {
    border-left: 10px solid #b22222;    /* Red */
}
table.ambox-content {
    border-left: 10px solid #f28500;    /* Orange */
}
table.ambox-style {
    border-left: 10px solid #f4c430;    /* Yellow */
}
table.ambox-move {
    border-left: 10px solid #9932cc;    /* Purple */
}
table.ambox-protection {
    border-left: 10px solid #bba;       /* Gray-gold */
}

/* Image message box styles */
table.imbox {
    margin: 4px 10%;
    border-collapse: collapse;
    border: 3px solid #1e90ff;    /* Default &quot;notice&quot; blue */
    background: #fbfbfb;
}
.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */
    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */
    display: block;         /* Fix for webkit to force 100% width.  */
}
.mbox-inside .imbox {       /* For imboxes inside other templates.  */
    margin: 4px;
}

table.imbox-notice {
    border: 3px solid #1e90ff;    /* Blue */
}
table.imbox-speedy {
    border: 3px solid #b22222;    /* Red */
    background: #fee;             /* Pink */
}
table.imbox-delete {
    border: 3px solid #b22222;    /* Red */
}
table.imbox-content {
    border: 3px solid #f28500;    /* Orange */
}
table.imbox-style {
    border: 3px solid #f4c430;    /* Yellow */
}
table.imbox-move {
    border: 3px solid #9932cc;    /* Purple */
}
table.imbox-protection {
    border: 3px solid #bba;       /* Gray-gold */
}
table.imbox-license {
    border: 3px solid #88a;       /* Dark gray */
    background: #f7f8ff;          /* Light gray */
}
table.imbox-featured {
    border: 3px solid #cba135;    /* Brown-gold */
}

/* Category message box styles */
table.cmbox {
    margin: 3px 10%;
    border-collapse: collapse;
    border: 1px solid #aaa;
    background: #DFE8FF;    /* Default &quot;notice&quot; blue */
}

table.cmbox-notice {
    background: #D8E8FF;    /* Blue */
}
table.cmbox-speedy {
    margin-top: 4px;
    margin-bottom: 4px;
    border: 4px solid #b22222;    /* Red */
    background: #FFDBDB;          /* Pink */
}
table.cmbox-delete {
    background: #FFDBDB;    /* Red */
}
table.cmbox-content {
    background: #FFE7CE;    /* Orange */
}
table.cmbox-style {
    background: #FFF9DB;    /* Yellow */
}
table.cmbox-move {
    background: #E4D8FF;    /* Purple */
}
table.cmbox-protection {
    background: #EFEFE1;    /* Gray-gold */
}

/* Other pages message box styles */
table.ombox {
    margin: 4px 10%;
    border-collapse: collapse;
    border: 1px solid #aaa;       /* Default &quot;notice&quot; gray */
    background: #f9f9f9;
}

table.ombox-notice {
    border: 1px solid #aaa;       /* Gray */
}
table.ombox-speedy {
    border: 2px solid #b22222;    /* Red */
    background: #fee;             /* Pink */
}
table.ombox-delete {
    border: 2px solid #b22222;    /* Red */
}
table.ombox-content {
    border: 1px solid #f28500;    /* Orange */
}
table.ombox-style {
    border: 1px solid #f4c430;    /* Yellow */
}
table.ombox-move {
    border: 1px solid #9932cc;    /* Purple */
}
table.ombox-protection {
    border: 2px solid #bba;       /* Gray-gold */
}

/* Talk page message box styles */
table.tmbox {
    margin: 4px 10%;
    border-collapse: collapse;
    border: 1px solid #c0c090;    /* Default &quot;notice&quot; gray-brown */
    background: #f8eaba;
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The &quot;mediawiki&quot; class ensures that */
    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */
    width: 100%;                 /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* &quot;small&quot; tmboxes should not be small when  */
    line-height: 1.5em;          /* also &quot;nested&quot;, so reset styles that are   */
    font-size: 100%;             /* set in &quot;mbox-small&quot; above.                */
}

table.tmbox-speedy {
    border: 2px solid #b22222;    /* Red */
    background: #fee;             /* Pink */
}
table.tmbox-delete {
    border: 2px solid #b22222;    /* Red */
}
table.tmbox-content {
    border: 2px solid #f28500;    /* Orange */
}
table.tmbox-style {
    border: 2px solid #f4c430;    /* Yellow */
}
table.tmbox-move {
    border: 2px solid #9932cc;    /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
    border: 1px solid #c0c090;    /* Gray-brown */
}


/* Footer and header message box styles */
table.fmbox {
    clear: both;
    margin: 0.2em 0;
    width: 100%;
    border: 1px solid #aaa;
    background: #f9f9f9;     /* Default &quot;system&quot; gray */
}
table.fmbox-system {
    background: #f9f9f9;
}
table.fmbox-warning {
    border: 1px solid #bb7070;  /* Dark pink */
    background: #ffdbdb;        /* Pink */
}
table.fmbox-editnotice {
    background: transparent;
}

/* Div based &quot;warning&quot; style fmbox messages. */
div.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon {
    clear: both;
    margin: 0.2em 0;
    border: 1px solid #bb7070;
    background: #ffdbdb;
    padding: 0.25em 0.9em;
}

/* These mbox-small classes must be placed after all other
   ambox/tmbox/ombox etc classes. &quot;body.mediawiki&quot; is so
   they override &quot;table.ambox + table.ambox&quot; above. */
body.mediawiki table.mbox-small {   /* For the &quot;small=yes&quot; option. */
    clear: right;
    float: right;
    margin: 4px 0 4px 1em;
    width: 238px;
    font-size: 88%;
    line-height: 1.25em;
}
body.mediawiki table.mbox-small-left {   /* For the &quot;small=left&quot; option. */
    margin: 4px 1em 4px 0;
    width: 238px;
    border-collapse: collapse;
    font-size: 88%;
    line-height: 1.25em;
}


/* Remove default styles for [[MediaWiki:Noarticletext]]. */
div.noarticletext {
    border: none;
    background: transparent;
    padding: 0;
}

#wpSave {
    font-weight: bold;
}

/* suppress missing interwiki image links where #ifexist cannot
   be used due to high number of requests see .hidden-redlink on
   http://meta.wikimedia.org/wiki/MediaWiki:Common.css
*/
.check-icon a.new {
    display: none;
    speak: none;
}

/* Removes underlines from certain links */
.nounderlines a,
.IPA a:link, .IPA a:visited {
    text-decoration: none;
}

/* Allow transcluded pages to display in lists rather than a table. */
.listify td    { display: list-item; }
.listify tr    { display: block; }
.listify table { display: block; }

/* When &lt;div class=&quot;nonumtoc&quot;&gt; is used on the table of contents,
   the ToC will display without numbers */
.nonumtoc .tocnumber { display: none; }
.nonumtoc #toc ul,
.nonumtoc .toc ul {
    line-height: 1.5em;
    list-style: none;
    margin: .3em 0 0;
    padding: 0;
}
.nonumtoc #toc ul ul,
.nonumtoc .toc ul ul {
    margin: 0 0 0 2em;
}

/* User block messages */
div.user-block {
    padding: 5px;
    margin-bottom: 0.5em;
    border: 1px solid #A9A9A9;
    background-color: #FFEFD5;
}

/* Prevent line breaks in silly places:
   1) Links when we don't want them to
   2) Bold &quot;links&quot; to the page itself
   2) HTML formulae
   3) Ref tags with group names &lt;ref group=&quot;Note&quot;&gt; --&gt; &quot;[Note 1]&quot;
*/
.nowraplinks a,
.nowraplinks .selflink,
span.texhtml,
sup.reference a {
    white-space: nowrap;
}

/* For template documentation */
.template-documentation {
    clear: both;
    margin: 1em 0 0 0;
    border: 1px solid #aaa;
    background-color: #ecfcf4;
    padding: 1em;
}

/* Inline divs in ImageMaps (code borrowed from de.wiki) */
.imagemap-inline div {
    display: inline;
}

/* Increase the height of the image upload box */
#wpUploadDescription {
    height: 13em;
}

/* Reduce line-height for &lt;sup&gt; and &lt;sub&gt; */
sup, sub {
    line-height: 1em;
}

/* Minimum thumb width */
.thumbinner {
    min-width: 100px;
}

/* Makes the background of a framed image white instead of gray. */
/* Only visible with transparent images. */
div.thumb img.thumbimage {
    background-color: #fff;
}

/* The backgrounds for galleries. */
div#content .gallerybox div.thumb {
    background-color: #F9F9F9;   /* Light gray padding */
}
/* Put a chequered background behind images, only visible if they have transparency */
.gallerybox .thumb img,
.filehistory a img,
#file img {
    background: white url(&quot;http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png&quot;) repeat;
}
/* But not on articles, user pages, portals or with opt-out. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img,
.nochecker .gallerybox .thumb img {
    background: white;
}

/* Prevent floating boxes from overlapping any category listings,
   file histories, edit previews, and edit [Show changes] views */
#mw-subcategories, #mw-pages, #mw-category-media,
#filehistory, #wikiPreview, #wikiDiff {
    clear: both;
}

/* Fix monospace fontsize in new edit toolbar (jquery.wikiEditor.toolbar.css).
   [[Bugzilla:27502]] */
.wikiEditor-ui-toolbar .section-help .page-table td.cell-syntax,
.wikiEditor-ui-toolbar .section-help .page-table td.syntax {
    font-family: monospace, &quot;Courier New&quot;;
}


/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors &gt; li {
    list-style: none;
}
ul.permissions-errors {
    margin: 0;
}

/* No linewrap on the labels of the login/signup page */
body.page-Special_UserLogin .mw-label label,
body.page-Special_UserLogin_signup .mw-label label { white-space : nowrap; }

/* Disable the automatic text-size adjust of WebKit on iPhones etc.
   It scales some text, and not the other. Use none, or fixed percentage instead.
   Use media selector, because defining a value, overwrites platform defaults. */
@media only screen and (max-device-width: 480px) {
    body {
        -webkit-text-size-adjust: none;
    }
}

/* ======================================================================
   OVERRIDES
 ------------------------------------------------------------------------
*/

body.mediawiki table.mbox-small-left,
body.mediawiki table.mbox-small {   
    width: 500px;
}

/* ======================================================================
   TEMPORARY
 ------------------------------------------------------------------------
*/
.t-rev-since-cxx11 .t-noexcept-inline .t-mark {
    display: none;
}</text>
      <sha1>3tmdbkedvtuzxjs69miyxtxes1ziyju</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Common.js</title>
    <ns>8</ns>
    <id>1791</id>
    <revision>
      <id>65192</id>
      <parentid>65191</parentid>
      <timestamp>2013-09-04T22:46:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="74">/* Any JavaScript here will be loaded for all users on every page load. */</text>
      <sha1>e1xzexxv70r7jxzgtgpjqqrfytiz555</sha1>
      <model>javascript</model>
      <format>text/javascript</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Cpp-search-list-c</title>
    <ns>8</ns>
    <id>8907</id>
    <revision>
      <id>74668</id>
      <parentid>73546</parentid>
      <timestamp>2014-12-21T17:19:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix wcsrtombs</comment>
      <text xml:space="preserve" bytes="29675">size_t =&gt; c/types/size_t
ptrdiff_t =&gt; c/types/ptrdiff_t
nullptr_t =&gt; c/types/nullptr_t
NULL =&gt; c/types/NULL
max_align_t =&gt; c/types/max_align_t
offsetof =&gt; c/types/offsetof
int8_t =&gt; c/types/integer
int16_t =&gt; c/types/integer
int32_t =&gt; c/types/integer
int64_t =&gt; c/types/integer
int_fast8_t =&gt; c/types/integer
int_fast16_t =&gt; c/types/integer
int_fast32_t =&gt; c/types/integer
int_fast64_t =&gt; c/types/integer
int_least8_t =&gt; c/types/integer
int_least16_t =&gt; c/types/integer
int_least32_t =&gt; c/types/integer
int_least64_t =&gt; c/types/integer
intmax_t =&gt; c/types/integer
intptr_t =&gt; c/types/integer
uint8_t =&gt; c/types/integer
uint16_t =&gt; c/types/integer
uint32_t =&gt; c/types/integer
uint64_t =&gt; c/types/integer
uint_fast8_t =&gt; c/types/integer
uint_fast16_t =&gt; c/types/integer
uint_fast32_t =&gt; c/types/integer
uint_fast64_t =&gt; c/types/integer
uint_least8_t =&gt; c/types/integer
uint_least16_t =&gt; c/types/integer
uint_least32_t =&gt; c/types/integer
uint_least64_t =&gt; c/types/integer
uintmax_t =&gt; c/types/integer
uintptr_t =&gt; c/types/integer
INT8_MIN =&gt; c/types/integer
INT16_MIN =&gt; c/types/integer
INT32_MIN =&gt; c/types/integer
INT64_MIN =&gt; c/types/integer
INT_FAST8_MIN =&gt; c/types/integer
INT_FAST16_MIN =&gt; c/types/integer
INT_FAST32_MIN =&gt; c/types/integer
INT_FAST64_MIN =&gt; c/types/integer
INT_LEAST8_MIN =&gt; c/types/integer
INT_LEAST16_MIN =&gt; c/types/integer
INT_LEAST32_MIN =&gt; c/types/integer
INT_LEAST64_MIN =&gt; c/types/integer
INTPTR_MIN =&gt; c/types/integer
INTMAX_MIN =&gt; c/types/integer
INT8_MAX =&gt; c/types/integer
INT16_MAX =&gt; c/types/integer
INT32_MAX =&gt; c/types/integer
INT64_MAX =&gt; c/types/integer
INT_FAST8_MAX =&gt; c/types/integer
INT_FAST16_MAX =&gt; c/types/integer
INT_FAST32_MAX =&gt; c/types/integer
INT_FAST64_MAX =&gt; c/types/integer
INT_LEAST8_MAX =&gt; c/types/integer
INT_LEAST16_MAX =&gt; c/types/integer
INT_LEAST32_MAX =&gt; c/types/integer
INT_LEAST64_MAX =&gt; c/types/integer
INTPTR_MAX =&gt; c/types/integer
INTMAX_MAX =&gt; c/types/integer
UINT8_MAX =&gt; c/types/integer
UINT16_MAX =&gt; c/types/integer
UINT32_MAX =&gt; c/types/integer
UINT64_MAX =&gt; c/types/integer
UINT_FAST8_MAX =&gt; c/types/integer
UINT_FAST16_MAX =&gt; c/types/integer
UINT_FAST32_MAX =&gt; c/types/integer
UINT_FAST64_MAX =&gt; c/types/integer
UINT_LEAST8_MAX =&gt; c/types/integer
UINT_LEAST16_MAX =&gt; c/types/integer
UINT_LEAST32_MAX =&gt; c/types/integer
UINT_LEAST64_MAX =&gt; c/types/integer
UINTPTR_MAX =&gt; c/types/integer
UINTMAX_MAX =&gt; c/types/integer
PRId8 =&gt; c/types/integer
PRId16 =&gt; c/types/integer
PRId32 =&gt; c/types/integer
PRId64 =&gt; c/types/integer
PRIdLEAST8 =&gt; c/types/integer
PRIdLEAST16 =&gt; c/types/integer
PRIdLEAST32 =&gt; c/types/integer
PRIdLEAST64 =&gt; c/types/integer
PRIdFAST8 =&gt; c/types/integer
PRIdFAST16 =&gt; c/types/integer
PRIdFAST32 =&gt; c/types/integer
PRIdFAST64 =&gt; c/types/integer
PRIdMAX =&gt; c/types/integer
PRIdPTR  =&gt; c/types/integer
PRIi8 =&gt; c/types/integer
PRIi16 =&gt; c/types/integer
PRIi32 =&gt; c/types/integer
PRIi64 =&gt; c/types/integer
PRIiLEAST8 =&gt; c/types/integer
PRIiLEAST16 =&gt; c/types/integer
PRIiLEAST32 =&gt; c/types/integer
PRIiLEAST64 =&gt; c/types/integer
PRIiFAST8 =&gt; c/types/integer
PRIiFAST16 =&gt; c/types/integer
PRIiFAST32 =&gt; c/types/integer
PRIiFAST64 =&gt; c/types/integer
PRIiMAX =&gt; c/types/integer
PRIiPTR  =&gt; c/types/integer
PRIu8 =&gt; c/types/integer
PRIu16 =&gt; c/types/integer
PRIu32 =&gt; c/types/integer
PRIu64 =&gt; c/types/integer
PRIuLEAST8 =&gt; c/types/integer
PRIuLEAST16 =&gt; c/types/integer
PRIuLEAST32 =&gt; c/types/integer
PRIuLEAST64 =&gt; c/types/integer
PRIuFAST8 =&gt; c/types/integer
PRIuFAST16 =&gt; c/types/integer
PRIuFAST32 =&gt; c/types/integer
PRIuFAST64 =&gt; c/types/integer
PRIuMAX =&gt; c/types/integer
PRIuPTR  =&gt; c/types/integer
PRIo8 =&gt; c/types/integer
PRIo16 =&gt; c/types/integer
PRIo32 =&gt; c/types/integer
PRIo64 =&gt; c/types/integer
PRIoLEAST8 =&gt; c/types/integer
PRIoLEAST16 =&gt; c/types/integer
PRIoLEAST32 =&gt; c/types/integer
PRIoLEAST64 =&gt; c/types/integer
PRIoFAST8 =&gt; c/types/integer
PRIoFAST16 =&gt; c/types/integer
PRIoFAST32 =&gt; c/types/integer
PRIoFAST64 =&gt; c/types/integer
PRIoMAX =&gt; c/types/integer
PRIoPTR  =&gt; c/types/integer
PRIx8 =&gt; c/types/integer
PRIx16 =&gt; c/types/integer
PRIx32 =&gt; c/types/integer
PRIx64 =&gt; c/types/integer
PRIxLEAST8 =&gt; c/types/integer
PRIxLEAST16 =&gt; c/types/integer
PRIxLEAST32 =&gt; c/types/integer
PRIxLEAST64 =&gt; c/types/integer
PRIxFAST8 =&gt; c/types/integer
PRIxFAST16 =&gt; c/types/integer
PRIxFAST32 =&gt; c/types/integer
PRIxFAST64 =&gt; c/types/integer
PRIxMAX =&gt; c/types/integer
PRIxPTR  =&gt; c/types/integer
PRIX8 =&gt; c/types/integer
PRIX16 =&gt; c/types/integer
PRIX32 =&gt; c/types/integer
PRIX64 =&gt; c/types/integer
PRIXLEAST8 =&gt; c/types/integer
PRIXLEAST16 =&gt; c/types/integer
PRIXLEAST32 =&gt; c/types/integer
PRIXLEAST64 =&gt; c/types/integer
PRIXFAST8 =&gt; c/types/integer
PRIXFAST16 =&gt; c/types/integer
PRIXFAST32 =&gt; c/types/integer
PRIXFAST64 =&gt; c/types/integer
PRIXMAX =&gt; c/types/integer
PRIXPTR  =&gt; c/types/integer
SCNd8 =&gt; c/types/integer
SCNd16 =&gt; c/types/integer
SCNd32 =&gt; c/types/integer
SCNd64 =&gt; c/types/integer
SCNdLEAST8 =&gt; c/types/integer
SCNdLEAST16 =&gt; c/types/integer
SCNdLEAST32 =&gt; c/types/integer
SCNdLEAST64 =&gt; c/types/integer
SCNdFAST8 =&gt; c/types/integer
SCNdFAST16 =&gt; c/types/integer
SCNdFAST32 =&gt; c/types/integer
SCNdFAST64 =&gt; c/types/integer
SCNdMAX =&gt; c/types/integer
SCNdPTR  =&gt; c/types/integer
SCNi8 =&gt; c/types/integer
SCNi16 =&gt; c/types/integer
SCNi32 =&gt; c/types/integer
SCNi64 =&gt; c/types/integer
SCNiLEAST8 =&gt; c/types/integer
SCNiLEAST16 =&gt; c/types/integer
SCNiLEAST32 =&gt; c/types/integer
SCNiLEAST64 =&gt; c/types/integer
SCNiFAST8 =&gt; c/types/integer
SCNiFAST16 =&gt; c/types/integer
SCNiFAST32 =&gt; c/types/integer
SCNiFAST64 =&gt; c/types/integer
SCNiMAX =&gt; c/types/integer
SCNiPTR  =&gt; c/types/integer
SCNu8 =&gt; c/types/integer
SCNu16 =&gt; c/types/integer
SCNu32 =&gt; c/types/integer
SCNu64 =&gt; c/types/integer
SCNuLEAST8 =&gt; c/types/integer
SCNuLEAST16 =&gt; c/types/integer
SCNuLEAST32 =&gt; c/types/integer
SCNuLEAST64 =&gt; c/types/integer
SCNuFAST8 =&gt; c/types/integer
SCNuFAST16 =&gt; c/types/integer
SCNuFAST32 =&gt; c/types/integer
SCNuFAST64 =&gt; c/types/integer
SCNuMAX =&gt; c/types/integer
SCNuPTR  =&gt; c/types/integer
SCNo8 =&gt; c/types/integer
SCNo16 =&gt; c/types/integer
SCNo32 =&gt; c/types/integer
SCNo64 =&gt; c/types/integer
SCNoLEAST8 =&gt; c/types/integer
SCNoLEAST16 =&gt; c/types/integer
SCNoLEAST32 =&gt; c/types/integer
SCNoLEAST64 =&gt; c/types/integer
SCNoFAST8 =&gt; c/types/integer
SCNoFAST16 =&gt; c/types/integer
SCNoFAST32 =&gt; c/types/integer
SCNoFAST64 =&gt; c/types/integer
SCNoMAX =&gt; c/types/integer
SCNoPTR  =&gt; c/types/integer
SCNx8 =&gt; c/types/integer
SCNx16 =&gt; c/types/integer
SCNx32 =&gt; c/types/integer
SCNx64 =&gt; c/types/integer
SCNxLEAST8 =&gt; c/types/integer
SCNxLEAST16 =&gt; c/types/integer
SCNxLEAST32 =&gt; c/types/integer
SCNxLEAST64 =&gt; c/types/integer
SCNxFAST8 =&gt; c/types/integer
SCNxFAST16 =&gt; c/types/integer
SCNxFAST32 =&gt; c/types/integer
SCNxFAST64 =&gt; c/types/integer
SCNxMAX =&gt; c/types/integer
SCNxPTR  =&gt; c/types/integer
SCNX8 =&gt; c/types/integer
SCNX16 =&gt; c/types/integer
SCNX32 =&gt; c/types/integer
SCNX64 =&gt; c/types/integer
SCNXLEAST8 =&gt; c/types/integer
SCNXLEAST16 =&gt; c/types/integer
SCNXLEAST32 =&gt; c/types/integer
SCNXLEAST64 =&gt; c/types/integer
SCNXFAST8 =&gt; c/types/integer
SCNXFAST16 =&gt; c/types/integer
SCNXFAST32 =&gt; c/types/integer
SCNXFAST64 =&gt; c/types/integer
SCNXMAX =&gt; c/types/integer
SCNXPTR =&gt; c/types/integer
PTRDIFF_MIN =&gt; c/types/limits
PTRDIFF_MAX =&gt; c/types/limits
SIZE_MAX =&gt; c/types/limits
SIG_ATOMIC_MIN =&gt; c/types/limits
SIG_ATOMIC_MAX =&gt; c/types/limits
WCHAR_MIN =&gt; c/types/limits
WCHAR_MAX =&gt; c/types/limits
WINT_MIN =&gt; c/types/limits
WINT_MAX =&gt; c/types/limits
CHAR_BIT =&gt; c/types/limits
MB_LEN_MAX =&gt; c/types/limits
CHAR_MIN =&gt; c/types/limits
CHAR_MAX =&gt; c/types/limits
SCHAR_MIN =&gt; c/types/limits
SHRT_MIN =&gt; c/types/limits
INT_MIN =&gt; c/types/limits
LONG_MIN =&gt; c/types/limits
LLONG_MIN =&gt; c/types/limits
SCHAR_MAX =&gt; c/types/limits
SHRT_MAX =&gt; c/types/limits
INT_MAX =&gt; c/types/limits
LONG_MAX =&gt; c/types/limits
LLONG_MAX =&gt; c/types/limits
UCHAR_MAX =&gt; c/types/limits
USHRT_MAX =&gt; c/types/limits
UINT_MAX =&gt; c/types/limits
ULONG_MAX =&gt; c/types/limits
ULLONG_MAX =&gt; c/types/limits
FLT_RADIX =&gt; c/types/limits
DECIMAL_DIG =&gt; c/types/limits
FLT_MIN =&gt; c/types/limits
DBL_MIN =&gt; c/types/limits
LDBL_MIN =&gt; c/types/limits
FLT_MAX =&gt; c/types/limits
DBL_MAX =&gt; c/types/limits
LDBL_MAX =&gt; c/types/limits
FLT_EPSILON =&gt; c/types/limits
DBL_EPSILON =&gt; c/types/limits
LDBL_EPSILON =&gt; c/types/limits
FLT_DIG =&gt; c/types/limits
DBL_DIG =&gt; c/types/limits
LDBL_DIG =&gt; c/types/limits
FLT_MANT_DIG =&gt; c/types/limits
DBL_MANT_DIG =&gt; c/types/limits
LDBL_MANT_DIG =&gt; c/types/limits
FLT_MIN_EXP =&gt; c/types/limits
DBL_MIN_EXP =&gt; c/types/limits
LDBL_MIN_EXP =&gt; c/types/limits
FLT_MIN_10_EXP =&gt; c/types/limits
DBL_MIN_10_EXP =&gt; c/types/limits
LDBL_MIN_10_EXP =&gt; c/types/limits
FLT_MAX_EXP =&gt; c/types/limits
DBL_MAX_EXP =&gt; c/types/limits
LDBL_MAX_EXP =&gt; c/types/limits
FLT_MAX_10_EXP =&gt; c/types/limits
DBL_MAX_10_EXP =&gt; c/types/limits
LDBL_MAX_10_EXP =&gt; c/types/limits
FLT_ROUNDS =&gt; c/types/limits/FLT_ROUNDS
FLT_EVAL_METHOD =&gt; c/types/limits/FLT_EVAL_METHOD
malloc =&gt; c/memory/malloc
calloc =&gt; c/memory/calloc
realloc =&gt; c/memory/realloc
free =&gt; c/memory/free
assert =&gt; c/error/assert
errno =&gt; c/error/errno
E2BIG =&gt; c/error/errno_macros
EACCESS =&gt; c/error/errno_macros
EADDRINUSE =&gt; c/error/errno_macros
EADDRNOTAVAIL =&gt; c/error/errno_macros
EAFNOSUPPORT =&gt; c/error/errno_macros
EAGAIN =&gt; c/error/errno_macros
EALREADY =&gt; c/error/errno_macros
EBADF =&gt; c/error/errno_macros
EBADMSG =&gt; c/error/errno_macros
EBUSY =&gt; c/error/errno_macros
ECANCELED =&gt; c/error/errno_macros
ECHILD =&gt; c/error/errno_macros
ECONNABORTED =&gt; c/error/errno_macros
ECONNREFUSED =&gt; c/error/errno_macros
ECONNRESET =&gt; c/error/errno_macros
EDEADLK =&gt; c/error/errno_macros
EDESTADDRREQ =&gt; c/error/errno_macros
EDOM =&gt; c/error/errno_macros
EEXIST =&gt; c/error/errno_macros
EFAULT =&gt; c/error/errno_macros
EFBIG =&gt; c/error/errno_macros
EHOSTUNREACH =&gt; c/error/errno_macros
EIDRM =&gt; c/error/errno_macros
EILSEQ =&gt; c/error/errno_macros
EINPROGRESS =&gt; c/error/errno_macros
EINTR =&gt; c/error/errno_macros
EINVAL =&gt; c/error/errno_macros
EIO =&gt; c/error/errno_macros
EISCONN =&gt; c/error/errno_macros
EISDIR =&gt; c/error/errno_macros
ELOOP =&gt; c/error/errno_macros
EMFILE =&gt; c/error/errno_macros
EMLINK =&gt; c/error/errno_macros
EMSGSIZE =&gt; c/error/errno_macros
ENAMETOOLONG =&gt; c/error/errno_macros
ENETDOWN =&gt; c/error/errno_macros
ENETRESET =&gt; c/error/errno_macros
ENETUNREACH =&gt; c/error/errno_macros
ENFILE =&gt; c/error/errno_macros
ENOBUFS =&gt; c/error/errno_macros
ENODATA =&gt; c/error/errno_macros
ENODEV =&gt; c/error/errno_macros
ENOENT =&gt; c/error/errno_macros
ENOEXEC =&gt; c/error/errno_macros
ENOLCK =&gt; c/error/errno_macros
ENOLINK =&gt; c/error/errno_macros
ENOMEM =&gt; c/error/errno_macros
ENOMSG =&gt; c/error/errno_macros
ENOPROTOOPT =&gt; c/error/errno_macros
ENOSPC =&gt; c/error/errno_macros
ENOSR =&gt; c/error/errno_macros
ENOSTR =&gt; c/error/errno_macros
ENOSYS =&gt; c/error/errno_macros
ENOTCONN =&gt; c/error/errno_macros
ENOTDIR =&gt; c/error/errno_macros
ENOTEMPTY =&gt; c/error/errno_macros
ENOTRECOVERABLE =&gt; c/error/errno_macros
ENOTSOCK =&gt; c/error/errno_macros
ENOTSUP =&gt; c/error/errno_macros
ENOTTY =&gt; c/error/errno_macros
ENXIO =&gt; c/error/errno_macros
EOPNOTSUPP =&gt; c/error/errno_macros
EOVERFLOW =&gt; c/error/errno_macros
EOWNERDEAD =&gt; c/error/errno_macros
EPERM =&gt; c/error/errno_macros
EPIPE =&gt; c/error/errno_macros
EPROTO =&gt; c/error/errno_macros
EPROTONOSUPPORT =&gt; c/error/errno_macros
EPROTOTYPE =&gt; c/error/errno_macros
ERANGE =&gt; c/error/errno_macros
EROFS =&gt; c/error/errno_macros
ESPIPE =&gt; c/error/errno_macros
ESRCH =&gt; c/error/errno_macros
ETIME =&gt; c/error/errno_macros
ETIMEDOUT =&gt; c/error/errno_macros
ETXTBSY =&gt; c/error/errno_macros
EWOULDBLOCK =&gt; c/error/errno_macros
EXDEV =&gt; c/error/errno_macros
abort =&gt; c/program/abort
exit =&gt; c/program/exit
quick_exit =&gt; c/program/quick_exit
_Exit =&gt; c/program/_Exit
atexit =&gt; c/program/atexit
at_quick_exit =&gt; c/program/at_quick_exit
EXIT_SUCCESS =&gt; c/program/EXIT_status
EXIT_FAILURE =&gt; c/program/EXIT_status
system =&gt; c/program/system
getenv =&gt; c/program/getenv
signal =&gt; c/program/signal
raise =&gt; c/program/raise
sig_atomic_t =&gt; c/program/sig_atomic_t
SIG_DFL =&gt; c/program/SIG_strategies
SIG_IGN =&gt; c/program/SIG_strategies
SIG_ERR =&gt; c/program/SIG_ERR
SIGABRT =&gt; c/program/SIG_types
SIGFPE =&gt; c/program/SIG_types
SIGILL =&gt; c/program/SIG_types
SIGINT =&gt; c/program/SIG_types
SIGSEGV =&gt; c/program/SIG_types
SIGTERM =&gt; c/program/SIG_types
longjmp =&gt; c/program/longjmp
setjmp =&gt; c/program/setjmp
jmp_buf =&gt; c/program/jmp_buf
difftime =&gt; c/chrono/difftime
time =&gt; c/chrono/time
clock =&gt; c/chrono/clock
asctime =&gt; c/chrono/asctime
ctime =&gt; c/chrono/ctime
strftime =&gt; c/chrono/strftime
wcsftime =&gt; c/chrono/wcsftime
gmtime =&gt; c/chrono/gmtime
localtime =&gt; c/chrono/localtime
mktime =&gt; c/chrono/mktime
CLOCKS_PER_SEC =&gt; c/chrono/CLOCKS_PER_SEC
tm =&gt; c/chrono/tm
time_t =&gt; c/chrono/time_t
clock_t =&gt; c/chrono/clock_t
isalnum =&gt; c/string/byte/isalnum
isalpha =&gt; c/string/byte/isalpha
islower =&gt; c/string/byte/islower
isupper =&gt; c/string/byte/isupper
isdigit =&gt; c/string/byte/isdigit
isxdigit =&gt; c/string/byte/isxdigit
iscntrl =&gt; c/string/byte/iscntrl
isgraph =&gt; c/string/byte/isgraph
isspace =&gt; c/string/byte/isspace
isblank =&gt; c/string/byte/isblank
isprint =&gt; c/string/byte/isprint
ispunct =&gt; c/string/byte/ispunct
tolower =&gt; c/string/byte/tolower
toupper =&gt; c/string/byte/toupper
atof =&gt; c/string/byte/atof
atoi =&gt; c/string/byte/atoi
atol =&gt; c/string/byte/atoi
atoll =&gt; c/string/byte/atoi
strtol =&gt; c/string/byte/strtol
strtoll =&gt; c/string/byte/strtol
strtoul =&gt; c/string/byte/strtoul
strtoull =&gt; c/string/byte/strtoul
strtof =&gt; c/string/byte/strtof
strtod =&gt; c/string/byte/strtof
strtold =&gt; c/string/byte/strtof
strtoimax =&gt; c/string/byte/strtoimax
strtoumax =&gt; c/string/byte/strtoimax
strcpy =&gt; c/string/byte/strcpy
strncpy =&gt; c/string/byte/strncpy
strcat =&gt; c/string/byte/strcat
strncat =&gt; c/string/byte/strncat
strxfrm =&gt; c/string/byte/strxfrm
strlen =&gt; c/string/byte/strlen
strcmp =&gt; c/string/byte/strcmp
strncmp =&gt; c/string/byte/strncmp
strcoll =&gt; c/string/byte/strcoll
strchr =&gt; c/string/byte/strchr
strrchr =&gt; c/string/byte/strrchr
strspn =&gt; c/string/byte/strspn
strcspn =&gt; c/string/byte/strcspn
strpbrk =&gt; c/string/byte/strpbrk
strstr =&gt; c/string/byte/strstr
strtok =&gt; c/string/byte/strtok
memchr =&gt; c/string/byte/memchr
memcmp =&gt; c/string/byte/memcmp
memset =&gt; c/string/byte/memset
memcpy =&gt; c/string/byte/memcpy
memmove =&gt; c/string/byte/memmove
strerror =&gt; c/string/byte/strerror
mblen =&gt; c/string/multibyte/mblen
mbtowc =&gt; c/string/multibyte/mbtowc
wctomb =&gt; c/string/multibyte/wctomb
mbstowcs =&gt; c/string/multibyte/mbstowcs
wcstombs =&gt; c/string/multibyte/wcstombs
mbsinit =&gt; c/string/multibyte/mbsinit
btowc =&gt; c/string/multibyte/btowc
wctob =&gt; c/string/multibyte/wctob
mbrlen =&gt; c/string/multibyte/mbrlen
mbrtowc =&gt; c/string/multibyte/mbrtowc
wcrtomb =&gt; c/string/multibyte/wcrtomb
mbsrtowcs =&gt; c/string/multibyte/mbsrtowcs
wcsrtombs =&gt; c/string/multibyte/wcsrtombs
mbrtoc16 =&gt; c/string/multibyte/mbrtoc16
c16rtomb =&gt; c/string/multibyte/c16rtomb
mbrtoc32 =&gt; c/string/multibyte/mbrtoc32
c32rtomb =&gt; c/string/multibyte/c32rtomb
mbstate_t =&gt; c/string/multibyte/mbstate_t
iswalnum =&gt; c/string/wide/iswalnum
iswalpha =&gt; c/string/wide/iswalpha
iswlower =&gt; c/string/wide/iswlower
iswupper =&gt; c/string/wide/iswupper
iswdigit =&gt; c/string/wide/iswdigit
iswxdigit =&gt; c/string/wide/iswxdigit
iswcntrl =&gt; c/string/wide/iswcntrl
iswgraph =&gt; c/string/wide/iswgraph
iswspace =&gt; c/string/wide/iswspace
iswblank =&gt; c/string/wide/iswblank
iswprint =&gt; c/string/wide/iswprint
iswpunct =&gt; c/string/wide/iswpunct
iswctype =&gt; c/string/wide/iswctype
wctype =&gt; c/string/wide/wctype
towlower =&gt; c/string/wide/towlower
towupper =&gt; c/string/wide/towupper
towctrans =&gt; c/string/wide/towctrans
wctrans =&gt; c/string/wide/wctrans
wcstof =&gt; c/string/wide/wcstof
wcstod =&gt; c/string/wide/wcstof
wcstold =&gt; c/string/wide/wcstof
wcstol =&gt; c/string/wide/wcstol
wcstoll =&gt; c/string/wide/wcstol
wcstoul =&gt; c/string/wide/wcstoul
wcstoull =&gt; c/string/wide/wcstoul
wcstoimax =&gt; c/string/wide/wcstoimax
wcstoumax =&gt; c/string/wide/wcstoimax
wcscpy =&gt; c/string/wide/wcscpy
wcsncpy =&gt; c/string/wide/wcsncpy
wcscat =&gt; c/string/wide/wcscat
wcsncat =&gt; c/string/wide/wcsncat
wcsxfrm =&gt; c/string/wide/wcsxfrm
wcslen =&gt; c/string/wide/wcslen
wcscmp =&gt; c/string/wide/wcscmp
wcsncmp =&gt; c/string/wide/wcsncmp
wcscoll =&gt; c/string/wide/wcscoll
wcschr =&gt; c/string/wide/wcschr
wcsrchr =&gt; c/string/wide/wcsrchr
wcsspn =&gt; c/string/wide/wcsspn
wcscspn =&gt; c/string/wide/wcscspn
wcspbrk =&gt; c/string/wide/wcspbrk
wcsstr =&gt; c/string/wide/wcsstr
wcstok =&gt; c/string/wide/wcstok
wmemchr =&gt; c/string/wide/wmemchr
wmemcmp =&gt; c/string/wide/wmemcmp
wmemset =&gt; c/string/wide/wmemset
wmemcpy =&gt; c/string/wide/wmemcpy
wmemmove =&gt; c/string/wide/wmemmove
abs =&gt; c/numeric/math/abs
labs =&gt; c/numeric/math/abs
llabs =&gt; c/numeric/math/abs
fabs =&gt; c/numeric/math/fabs
div =&gt; c/numeric/math/div
ldiv =&gt; c/numeric/math/div
fmod =&gt; c/numeric/math/fmod
remainder =&gt; c/numeric/math/remainder
remquo =&gt; c/numeric/math/remquo
fma =&gt; c/numeric/math/fma
fmax =&gt; c/numeric/math/fmax
fmin =&gt; c/numeric/math/fmin
fdim =&gt; c/numeric/math/fdim
nan =&gt; c/numeric/math/nan
nanf =&gt; c/numeric/math/nan
nanl =&gt; c/numeric/math/nan
exp =&gt; c/numeric/math/exp
exp2 =&gt; c/numeric/math/exp2
expm1 =&gt; c/numeric/math/expm1
log =&gt; c/numeric/math/log
log10 =&gt; c/numeric/math/log10
log1p =&gt; c/numeric/math/log1p
ilogb =&gt; c/numeric/math/ilogb
logb =&gt; c/numeric/math/logb
sqrt =&gt; c/numeric/math/sqrt
cbrt =&gt; c/numeric/math/cbrt
hypot =&gt; c/numeric/math/hypot
pow =&gt; c/numeric/math/pow
sin =&gt; c/numeric/math/sin
cos =&gt; c/numeric/math/cos
tan =&gt; c/numeric/math/tan
asin =&gt; c/numeric/math/asin
acos =&gt; c/numeric/math/acos
atan =&gt; c/numeric/math/atan
atan2 =&gt; c/numeric/math/atan2
sinh =&gt; c/numeric/math/sinh
cosh =&gt; c/numeric/math/cosh
tanh =&gt; c/numeric/math/tanh
asinh =&gt; c/numeric/math/asinh
acosh =&gt; c/numeric/math/acosh
atanh =&gt; c/numeric/math/atanh
erf =&gt; c/numeric/math/erf
erfc =&gt; c/numeric/math/erfc
lgamma =&gt; c/numeric/math/lgamma
tgamma =&gt; c/numeric/math/tgamma
ceil =&gt; c/numeric/math/ceil
floor =&gt; c/numeric/math/floor
trunc =&gt; c/numeric/math/trunc
round =&gt; c/numeric/math/round
lround =&gt; c/numeric/math/round
llround =&gt; c/numeric/math/round
nearbyint =&gt; c/numeric/math/nearbyint
rint =&gt; c/numeric/math/rint
lrint =&gt; c/numeric/math/rint
llrint =&gt; c/numeric/math/rint
frexp =&gt; c/numeric/math/frexp
ldexp =&gt; c/numeric/math/ldexp
modf =&gt; c/numeric/math/modf
scalbn =&gt; c/numeric/math/scalbn
scalbln =&gt; c/numeric/math/scalbn
nextafter =&gt; c/numeric/math/nextafter
nexttoward =&gt; c/numeric/math/nextafter
copysign =&gt; c/numeric/math/copysign
fpclassify =&gt; c/numeric/math/fpclassify
isfinite =&gt; c/numeric/math/isfinite
isinf =&gt; c/numeric/math/isinf
isnan =&gt; c/numeric/math/isnan
isnormal =&gt; c/numeric/math/isnormal
signbit =&gt; c/numeric/math/signbit
HUGE_VAL =&gt; c/numeric/math/HUGE_VAL
HUGE_VALF =&gt; c/numeric/math/HUGE_VAL
HUGE_VALL =&gt; c/numeric/math/HUGE_VAL
FP_INFINITE =&gt; c/numeric/math/FP_categories
FP_NAN =&gt; c/numeric/math/FP_categories
FP_NORMAL =&gt; c/numeric/math/FP_categories
FP_SUBNORMAL =&gt; c/numeric/math/FP_categories
FP_ZERO =&gt; c/numeric/math/FP_categories
feclearexcept =&gt; c/numeric/fenv/feclearexcept
fetestexcept =&gt; c/numeric/fenv/fetestexcept
feraiseexcept =&gt; c/numeric/fenv/feraiseexcept
fegetexceptflag =&gt; c/numeric/fenv/feexceptflag
fesetexceptflag =&gt; c/numeric/fenv/feexceptflag
fegetround =&gt; c/numeric/fenv/feround
fesetround =&gt; c/numeric/fenv/feround
fegetenv =&gt; c/numeric/fenv/feenv
fesetenv =&gt; c/numeric/fenv/feenv
feholdexcept =&gt; c/numeric/fenv/feholdexcept
feupdateenv =&gt; c/numeric/fenv/feupdateenv
FE_ALL_EXCEPT =&gt; c/numeric/fenv/FE_exceptions
FE_DIVBYZERO =&gt; c/numeric/fenv/FE_exceptions
FE_INEXACT =&gt; c/numeric/fenv/FE_exceptions
FE_INVALID =&gt; c/numeric/fenv/FE_exceptions
FE_OVERFLOW =&gt; c/numeric/fenv/FE_exceptions
FE_UNDERFLOW =&gt; c/numeric/fenv/FE_exceptions
FE_DOWNWARD =&gt; c/numeric/fenv/FE_round
FE_TONEAREST =&gt; c/numeric/fenv/FE_round
FE_TOWARDZERO =&gt; c/numeric/fenv/FE_round
FE_UPWARD =&gt; c/numeric/fenv/FE_round
FE_DFL_ENV =&gt; c/numeric/fenv/FE_DFL_ENV
srand =&gt; c/numeric/random/srand
rand =&gt; c/numeric/random/rand
RAND_MAX =&gt; c/numeric/random/RAND_MAX
complex =&gt; c/numeric/complex/complex
_Complex_I =&gt; c/numeric/complex/Complex_I
imaginary =&gt; c/numeric/complex/imaginary
_Imaginary_I =&gt; c/numeric/complex/Imaginary_I
_I =&gt; c/numeric/complex/I
CMPLX =&gt; c/numeric/complex/CMPLX
CMPLXF =&gt; c/numeric/complex/CMPLX
CMPLXL =&gt; c/numeric/complex/CMPLX
cimag =&gt; c/numeric/complex/cimag
cimagf =&gt; c/numeric/complex/cimag
cimagl =&gt; c/numeric/complex/cimag
creal =&gt; c/numeric/complex/creal
crealf =&gt; c/numeric/complex/creal
creall =&gt; c/numeric/complex/creal
carg =&gt; c/numeric/complex/carg
cargf =&gt; c/numeric/complex/carg
cargl =&gt; c/numeric/complex/carg
conj =&gt; c/numeric/complex/conj
conjf =&gt; c/numeric/complex/conj
conjl =&gt; c/numeric/complex/conj
cproj =&gt; c/numeric/complex/cproj
cprojf =&gt; c/numeric/complex/cproj
cprojl =&gt; c/numeric/complex/cproj
cabs =&gt; c/numeric/complex/cabs
cabsf =&gt; c/numeric/complex/cabs
cabsl =&gt; c/numeric/complex/cabs
cexp =&gt; c/numeric/complex/cexp
cexpf =&gt; c/numeric/complex/cexp
cexpl =&gt; c/numeric/complex/cexp
clog =&gt; c/numeric/complex/clog
clogf =&gt; c/numeric/complex/clog
clogl =&gt; c/numeric/complex/clog
cpow =&gt; c/numeric/complex/cpow
cpowf =&gt; c/numeric/complex/cpow
cpowl =&gt; c/numeric/complex/cpow
csqrt =&gt; c/numeric/complex/csqrt
csqrtf =&gt; c/numeric/complex/csqrt
csqrtl =&gt; c/numeric/complex/csqrt
cacos =&gt; c/numeric/complex/cacos
cacosf =&gt; c/numeric/complex/cacos
cacosl =&gt; c/numeric/complex/cacos
casin =&gt; c/numeric/complex/casin
casinf =&gt; c/numeric/complex/casin
casinl =&gt; c/numeric/complex/casin
catan =&gt; c/numeric/complex/catan
catanf =&gt; c/numeric/complex/catan
catanl =&gt; c/numeric/complex/catan
ccos =&gt; c/numeric/complex/ccos
ccosf =&gt; c/numeric/complex/ccos
ccosl =&gt; c/numeric/complex/ccos
csin =&gt; c/numeric/complex/csin
csinf =&gt; c/numeric/complex/csin
csinl =&gt; c/numeric/complex/csin
ctan =&gt; c/numeric/complex/ctan
ctanf =&gt; c/numeric/complex/ctan
ctanl =&gt; c/numeric/complex/ctan
cacosh =&gt; c/numeric/complex/cacosh
cacoshf =&gt; c/numeric/complex/cacosh
cacoshl =&gt; c/numeric/complex/cacosh
casinh =&gt; c/numeric/complex/casinh
casinhf =&gt; c/numeric/complex/casinh
casinhl =&gt; c/numeric/complex/casinh
catanh =&gt; c/numeric/complex/catanh
catanhf =&gt; c/numeric/complex/catanh
catanhl =&gt; c/numeric/complex/catanh
ccosh =&gt; c/numeric/complex/ccosh
ccoshf =&gt; c/numeric/complex/ccosh
ccoshl =&gt; c/numeric/complex/ccosh
csinh =&gt; c/numeric/complex/csinh
csinhf =&gt; c/numeric/complex/csinh
csinhl =&gt; c/numeric/complex/csinh
ctanh =&gt; c/numeric/complex/ctanh
ctanhf =&gt; c/numeric/complex/ctanh
ctanhl =&gt; c/numeric/complex/ctanh
qsort =&gt; c/algorithm/qsort
bsearch =&gt; c/algorithm/bsearch
fopen =&gt; c/io/fopen
freopen =&gt; c/io/freopen
fflush =&gt; c/io/fflush
fclose =&gt; c/io/fclose
setbuf =&gt; c/io/setbuf
setvbuf =&gt; c/io/setvbuf
fread =&gt; c/io/fread
fwrite =&gt; c/io/fwrite
fgetc =&gt; c/io/fgetc
getc =&gt; c/io/fgetc
fgets =&gt; c/io/fgets
fputc =&gt; c/io/fputc
putc =&gt; c/io/fputc
fputs =&gt; c/io/fputs
getchar =&gt; c/io/getchar
gets =&gt; c/io/gets
putchar =&gt; c/io/putchar
puts =&gt; c/io/puts
ungetc =&gt; c/io/ungetc
fgetwc =&gt; c/io/fgetwc
fgetss =&gt; c/io/fgetws
fputwc =&gt; c/io/fputwc
fputws =&gt; c/io/fputws
getwchar =&gt; c/io/getwchar
putwchar =&gt; c/io/putwchar
ungetwc =&gt; c/io/ungetwc
scanf =&gt; c/io/fscanf
fscanf =&gt; c/io/fscanf
sscanf =&gt; c/io/fscanf
vscanf =&gt; c/io/vfscanf
vfscanf =&gt; c/io/vfscanf
vsscanf =&gt; c/io/vfscanf
printf =&gt; c/io/fprintf
fprintf =&gt; c/io/fprintf
sprintf =&gt; c/io/fprintf
snprintf =&gt; c/io/fprintf
vprintf =&gt; c/io/vfprintf
vfprintf =&gt; c/io/vfprintf
vsprintf =&gt; c/io/vfprintf
vsnprintf =&gt; c/io/vfprintf
wscanf =&gt; c/io/fwscanf
fwscanf =&gt; c/io/fwscanf
swscanf =&gt; c/io/fwscanf
vwscanf =&gt; c/io/vfwscanf
vfwscanf =&gt; c/io/vfwscanf
vswscanf =&gt; c/io/vfwscanf
wprintf =&gt; c/io/fwprintf
fwprintf =&gt; c/io/fwprintf
swprintf =&gt; c/io/fwprintf
vwprintf =&gt; c/io/vfwprintf
vfwprintf =&gt; c/io/vfwprintf
vswprintf =&gt; c/io/vfwprintf
ftell =&gt; c/io/ftell
fgetpos =&gt; c/io/fgetpos
fseek =&gt; c/io/fseek
fsetpos =&gt; c/io/fsetpos
rewind =&gt; c/io/rewind
clearerr =&gt; c/io/clearerr
feof =&gt; c/io/feof
ferror =&gt; c/io/ferror
perror =&gt; c/io/perror
remove =&gt; c/io/remove
rename =&gt; c/io/rename
tmpfile =&gt; c/io/tmpfile
tmpnam =&gt; c/io/tmpnam
FILE =&gt; c/io
fpos_t =&gt; c/io
stdin =&gt; c/io
stdout =&gt; c/io
stderr =&gt; c/io
EOF =&gt; c/io
FOPEN_MAX =&gt; c/io
FILENAME_MAX =&gt; c/io
BUFSIZ =&gt; c/io
_IOFBF =&gt; c/io
_IOLBF =&gt; c/io
_IONBF =&gt; c/io
SEEK_SET =&gt; c/io
SEEK_CUR =&gt; c/io
SEEK_END =&gt; c/io
TMP_MAX =&gt; c/io
L_tmpnam =&gt; c/io
setlocale =&gt; c/locale/setlocale
localeconv =&gt; c/locale/localeconv
lconv =&gt; c/locale/lconv
LC_ALL =&gt; c/locale/LC_categories
LC_COLLATE =&gt; c/locale/LC_categories
LC_CTYPE =&gt; c/locale/LC_categories
LC_MONETARY =&gt; c/locale/LC_categories
LC_NUMERIC =&gt; c/locale/LC_categories
LC_TIME =&gt; c/locale/LC_categories
memory_order =&gt; c/atomic/memory_order
memory_order_relaxed =&gt; c/atomic/memory_order
memory_order_consume =&gt; c/atomic/memory_order
memory_order_acquire =&gt; c/atomic/memory_order
memory_order_release =&gt; c/atomic/memory_order
memory_order_acq_rel =&gt; c/atomic/memory_order
memory_order_seq_cst =&gt; c/atomic/memory_order
atomic_flag =&gt; c/atomic/atomic_flag
ATOMIC_BOOL_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_CHAR_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_CHAR16_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_CHAR32_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_WCHAR_T_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_SHORT_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_INT_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_LONG_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_LLONG_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_POINTER_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_FLAG_INIT =&gt; c/atomic/ATOMIC_FLAG_INIT
ATOMIC_VAR_INIT =&gt; c/atomic/ATOMIC_VAR_INIT
kill_dependency =&gt; c/atomic/kill_dependency
atomic_flag_test_and_set =&gt; c/atomic/atomic_flag_test_and_set
atomic_flag_test_and_set_explicit =&gt; c/atomic/atomic_flag_test_and_set
atomic_flag_clear =&gt; c/atomic/atomic_flag_clear
atomic_flag_clear_explicit =&gt; c/atomic/atomic_flag_clear
atomic_init =&gt; c/atomic/atomic_init
atomic_is_lock_free =&gt; c/atomic/atomic_is_lock_free
atomic_store =&gt; c/atomic/atomic_store
atomic_store_explicit =&gt; c/atomic/atomic_store
atomic_load =&gt; c/atomic/atomic_load
atomic_load_explicit =&gt; c/atomic/atomic_load
atomic_exchange =&gt; c/atomic/atomic_exchange
atomic_exchange_explicit =&gt; c/atomic/atomic_exchange
atomic_compare_exchange_weak =&gt; c/atomic/atomic_compare_exchange
atomic_compare_exchange_weak_explicit =&gt; c/atomic/atomic_compare_exchange
atomic_compare_exchange_strong =&gt; c/atomic/atomic_compare_exchange
atomic_compare_exchange_strong_explicit =&gt; c/atomic/atomic_compare_exchange
atomic_fetch_add =&gt; c/atomic/atomic_fetch_add
atomic_fetch_add_explicit =&gt; c/atomic/atomic_fetch_add
atomic_fetch_sub =&gt; c/atomic/atomic_fetch_sub
atomic_fetch_sub_explicit =&gt; c/atomic/atomic_fetch_sub
atomic_fetch_or =&gt; c/atomic/atomic_fetch_or
atomic_fetch_or_explicit =&gt; c/atomic/atomic_fetch_or
atomic_fetch_xor =&gt; c/atomic/atomic_fetch_xor
atomic_fetch_xor_explicit =&gt; c/atomic/atomic_fetch_xor
atomic_fetch_and =&gt; c/atomic/atomic_fetch_and
atomic_fetch_and_explicit =&gt; c/atomic/atomic_fetch_and
atomic_thread_fence =&gt; c/atomic/atomic_thread_fence
atomic_signal_fence =&gt; c/atomic/atomic_signal_fence
atomic_bool =&gt; c/atomic
atomic_char =&gt; c/atomic
atomic_schar =&gt; c/atomic
atomic_uchar =&gt; c/atomic
atomic_short =&gt; c/atomic
atomic_ushort =&gt; c/atomic
atomic_int =&gt; c/atomic
atomic_uint =&gt; c/atomic
atomic_long =&gt; c/atomic
atomic_ulong =&gt; c/atomic
atomic_llong =&gt; c/atomic
atomic_ullong =&gt; c/atomic
atomic_char16_t =&gt; c/atomic
atomic_char32_t =&gt; c/atomic
atomic_wchar_t =&gt; c/atomic
atomic_int_least8_t =&gt; c/atomic
atomic_uint_least8_t =&gt; c/atomic
atomic_int_least16_t =&gt; c/atomic
atomic_uint_least16_t =&gt; c/atomic
atomic_int_least32_t =&gt; c/atomic
atomic_uint_least32_t =&gt; c/atomic
atomic_int_least64_t =&gt; c/atomic
atomic_uint_least64_t =&gt; c/atomic
atomic_int_fast8_t =&gt; c/atomic
atomic_uint_fast8_t =&gt; c/atomic
atomic_int_fast16_t =&gt; c/atomic
atomic_uint_fast16_t =&gt; c/atomic
atomic_int_fast32_t =&gt; c/atomic
atomic_uint_fast32_t =&gt; c/atomic
atomic_int_fast64_t =&gt; c/atomic
atomic_uint_fast64_t =&gt; c/atomic
atomic_intprt_t =&gt; c/atomic
atomic_uintprt_t =&gt; c/atomic
atomic_size_t =&gt; c/atomic
atomic_ptrdiff_t =&gt; c/atomic
atomic_intmax_t =&gt; c/atomic
atomic_uintmax_t =&gt; c/atomic
thrd_t =&gt; c/thread
thrd_create =&gt; c/thread/thrd_create
thrd_equal =&gt; c/thread/thrd_equal
thrd_current =&gt; c/thread/thrd_current
thrd_sleep =&gt; c/thread/thrd_sleep
thrd_yield =&gt; c/thread/thrd_yield
thrd_exit =&gt; c/thread/thrd_exit
thrd_detach =&gt; c/thread/thrd_detach
thrd_join =&gt; c/thread/thrd_join
thrd_success =&gt; c/thread/thrd_errors
thrd_timeout =&gt; c/thread/thrd_errors
thrd_busy =&gt; c/thread/thrd_errors
thrd_nomem =&gt; c/thread/thrd_errors
thrd_error =&gt; c/thread/thrd_errors
thrd_start_t =&gt; c/thread
mtx_t =&gt; c/thread
mtx_init =&gt; c/thread/mtx_init
mtx_lock =&gt; c/thread/mtx_lock
mtx_timedlock =&gt; c/thread/mtx_timedlock
mtx_trylock =&gt; c/thread/mtx_trylock
mtx_unlock =&gt; c/thread/mtx_unlock
mtx_destroy =&gt; c/thread/mtx_destroy
mtx_plain =&gt; c/thread/mtx_types
mtx_recursive =&gt; c/thread/mtx_types
mtx_timed =&gt; c/thread/mtx_types
thrd_start_t =&gt; c/thread
once_flag =&gt; c/thread
ONCE_FLAG_INIT =&gt; c/thread/ONCE_FLAG_INIT
call_once =&gt; c/thread/call_once
cnd_t =&gt; c/thread
cnd_init =&gt; c/thread/cnd_init
cnd_signal =&gt; c/thread/cnd_signal
cnd_broadcast =&gt; c/thread/cnd_broadcast
cnd_wait =&gt; c/thread/cnd_wait
cnd_timedwait =&gt; c/thread/cnd_timedwait
cnd_destroy =&gt; c/thread/cnd_destroy
thread_local =&gt; c/thread/thread_local
TSS_DTOR_ITERATIONS =&gt; c/thread/TSS_DTOR_ITERATIONS
tss_t =&gt; c/thread
tss_dtor_t =&gt; c/thread
tss_create =&gt; c/thread/tss_create
tss_get =&gt; c/thread/tss_get
tss_set =&gt; c/thread/tss_set
tss_delete =&gt; c/thread/tss_delete</text>
      <sha1>cmynn35shfu8knpxcrmfuyudq1e9xwx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Cpp-search-list-cpp</title>
    <ns>8</ns>
    <id>8908</id>
    <revision>
      <id>88039</id>
      <parentid>87527</parentid>
      <timestamp>2016-10-24T04:02:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="689403">std::size_t =&gt; cpp/types/size_t
std::ptrdiff_t =&gt; cpp/types/ptrdiff_t
std::nullptr_t =&gt; cpp/types/nullptr_t
NULL =&gt; cpp/types/NULL
std::max_align_t =&gt; cpp/types/max_align_t
offsetof =&gt; cpp/types/offsetof
std::int8_t =&gt; cpp/types/integer
std::int16_t =&gt; cpp/types/integer
std::int32_t =&gt; cpp/types/integer
std::int64_t =&gt; cpp/types/integer
std::int_fast8_t =&gt; cpp/types/integer
std::int_fast16_t =&gt; cpp/types/integer
std::int_fast32_t =&gt; cpp/types/integer
std::int_fast64_t =&gt; cpp/types/integer
std::int_least8_t =&gt; cpp/types/integer
std::int_least16_t =&gt; cpp/types/integer
std::int_least32_t =&gt; cpp/types/integer
std::int_least64_t =&gt; cpp/types/integer
std::intmax_t =&gt; cpp/types/integer
std::intptr_t =&gt; cpp/types/integer
std::uint8_t =&gt; cpp/types/integer
std::uint16_t =&gt; cpp/types/integer
std::uint32_t =&gt; cpp/types/integer
std::uint64_t =&gt; cpp/types/integer
std::uint_fast8_t =&gt; cpp/types/integer
std::uint_fast16_t =&gt; cpp/types/integer
std::uint_fast32_t =&gt; cpp/types/integer
std::uint_fast64_t =&gt; cpp/types/integer
std::uint_least8_t =&gt; cpp/types/integer
std::uint_least16_t =&gt; cpp/types/integer
std::uint_least32_t =&gt; cpp/types/integer
std::uint_least64_t =&gt; cpp/types/integer
std::uintmax_t =&gt; cpp/types/integer
std::uintptr_t =&gt; cpp/types/integer
INT8_MIN =&gt; cpp/types/integer
INT16_MIN =&gt; cpp/types/integer
INT32_MIN =&gt; cpp/types/integer
INT64_MIN =&gt; cpp/types/integer
INT_FAST8_MIN =&gt; cpp/types/integer
INT_FAST16_MIN =&gt; cpp/types/integer
INT_FAST32_MIN =&gt; cpp/types/integer
INT_FAST64_MIN =&gt; cpp/types/integer
INT_LEAST8_MIN =&gt; cpp/types/integer
INT_LEAST16_MIN =&gt; cpp/types/integer
INT_LEAST32_MIN =&gt; cpp/types/integer
INT_LEAST64_MIN =&gt; cpp/types/integer
INTPTR_MIN =&gt; cpp/types/integer
INTMAX_MIN =&gt; cpp/types/integer
INT8_MAX =&gt; cpp/types/integer
INT16_MAX =&gt; cpp/types/integer
INT32_MAX =&gt; cpp/types/integer
INT64_MAX =&gt; cpp/types/integer
INT_FAST8_MAX =&gt; cpp/types/integer
INT_FAST16_MAX =&gt; cpp/types/integer
INT_FAST32_MAX =&gt; cpp/types/integer
INT_FAST64_MAX =&gt; cpp/types/integer
INT_LEAST8_MAX =&gt; cpp/types/integer
INT_LEAST16_MAX =&gt; cpp/types/integer
INT_LEAST32_MAX =&gt; cpp/types/integer
INT_LEAST64_MAX =&gt; cpp/types/integer
INTPTR_MAX =&gt; cpp/types/integer
INTMAX_MAX =&gt; cpp/types/integer
UINT8_MAX =&gt; cpp/types/integer
UINT16_MAX =&gt; cpp/types/integer
UINT32_MAX =&gt; cpp/types/integer
UINT64_MAX =&gt; cpp/types/integer
UINT_FAST8_MAX =&gt; cpp/types/integer
UINT_FAST16_MAX =&gt; cpp/types/integer
UINT_FAST32_MAX =&gt; cpp/types/integer
UINT_FAST64_MAX =&gt; cpp/types/integer
UINT_LEAST8_MAX =&gt; cpp/types/integer
UINT_LEAST16_MAX =&gt; cpp/types/integer
UINT_LEAST32_MAX =&gt; cpp/types/integer
UINT_LEAST64_MAX =&gt; cpp/types/integer
UINTPTR_MAX =&gt; cpp/types/integer
UINTMAX_MAX =&gt; cpp/types/integer
PRId8 =&gt; cpp/types/integer
PRId16 =&gt; cpp/types/integer
PRId32 =&gt; cpp/types/integer
PRId64 =&gt; cpp/types/integer
PRIdLEAST8 =&gt; cpp/types/integer
PRIdLEAST16 =&gt; cpp/types/integer
PRIdLEAST32 =&gt; cpp/types/integer
PRIdLEAST64 =&gt; cpp/types/integer
PRIdFAST8 =&gt; cpp/types/integer
PRIdFAST16 =&gt; cpp/types/integer
PRIdFAST32 =&gt; cpp/types/integer
PRIdFAST64 =&gt; cpp/types/integer
PRIdMAX =&gt; cpp/types/integer
PRIdPTR  =&gt; cpp/types/integer
PRIi8 =&gt; cpp/types/integer
PRIi16 =&gt; cpp/types/integer
PRIi32 =&gt; cpp/types/integer
PRIi64 =&gt; cpp/types/integer
PRIiLEAST8 =&gt; cpp/types/integer
PRIiLEAST16 =&gt; cpp/types/integer
PRIiLEAST32 =&gt; cpp/types/integer
PRIiLEAST64 =&gt; cpp/types/integer
PRIiFAST8 =&gt; cpp/types/integer
PRIiFAST16 =&gt; cpp/types/integer
PRIiFAST32 =&gt; cpp/types/integer
PRIiFAST64 =&gt; cpp/types/integer
PRIiMAX =&gt; cpp/types/integer
PRIiPTR  =&gt; cpp/types/integer
PRIu8 =&gt; cpp/types/integer
PRIu16 =&gt; cpp/types/integer
PRIu32 =&gt; cpp/types/integer
PRIu64 =&gt; cpp/types/integer
PRIuLEAST8 =&gt; cpp/types/integer
PRIuLEAST16 =&gt; cpp/types/integer
PRIuLEAST32 =&gt; cpp/types/integer
PRIuLEAST64 =&gt; cpp/types/integer
PRIuFAST8 =&gt; cpp/types/integer
PRIuFAST16 =&gt; cpp/types/integer
PRIuFAST32 =&gt; cpp/types/integer
PRIuFAST64 =&gt; cpp/types/integer
PRIuMAX =&gt; cpp/types/integer
PRIuPTR  =&gt; cpp/types/integer
PRIo8 =&gt; cpp/types/integer
PRIo16 =&gt; cpp/types/integer
PRIo32 =&gt; cpp/types/integer
PRIo64 =&gt; cpp/types/integer
PRIoLEAST8 =&gt; cpp/types/integer
PRIoLEAST16 =&gt; cpp/types/integer
PRIoLEAST32 =&gt; cpp/types/integer
PRIoLEAST64 =&gt; cpp/types/integer
PRIoFAST8 =&gt; cpp/types/integer
PRIoFAST16 =&gt; cpp/types/integer
PRIoFAST32 =&gt; cpp/types/integer
PRIoFAST64 =&gt; cpp/types/integer
PRIoMAX =&gt; cpp/types/integer
PRIoPTR  =&gt; cpp/types/integer
PRIx8 =&gt; cpp/types/integer
PRIx16 =&gt; cpp/types/integer
PRIx32 =&gt; cpp/types/integer
PRIx64 =&gt; cpp/types/integer
PRIxLEAST8 =&gt; cpp/types/integer
PRIxLEAST16 =&gt; cpp/types/integer
PRIxLEAST32 =&gt; cpp/types/integer
PRIxLEAST64 =&gt; cpp/types/integer
PRIxFAST8 =&gt; cpp/types/integer
PRIxFAST16 =&gt; cpp/types/integer
PRIxFAST32 =&gt; cpp/types/integer
PRIxFAST64 =&gt; cpp/types/integer
PRIxMAX =&gt; cpp/types/integer
PRIxPTR  =&gt; cpp/types/integer
PRIX8 =&gt; cpp/types/integer
PRIX16 =&gt; cpp/types/integer
PRIX32 =&gt; cpp/types/integer
PRIX64 =&gt; cpp/types/integer
PRIXLEAST8 =&gt; cpp/types/integer
PRIXLEAST16 =&gt; cpp/types/integer
PRIXLEAST32 =&gt; cpp/types/integer
PRIXLEAST64 =&gt; cpp/types/integer
PRIXFAST8 =&gt; cpp/types/integer
PRIXFAST16 =&gt; cpp/types/integer
PRIXFAST32 =&gt; cpp/types/integer
PRIXFAST64 =&gt; cpp/types/integer
PRIXMAX =&gt; cpp/types/integer
PRIXPTR  =&gt; cpp/types/integer
SCNd8 =&gt; cpp/types/integer
SCNd16 =&gt; cpp/types/integer
SCNd32 =&gt; cpp/types/integer
SCNd64 =&gt; cpp/types/integer
SCNdLEAST8 =&gt; cpp/types/integer
SCNdLEAST16 =&gt; cpp/types/integer
SCNdLEAST32 =&gt; cpp/types/integer
SCNdLEAST64 =&gt; cpp/types/integer
SCNdFAST8 =&gt; cpp/types/integer
SCNdFAST16 =&gt; cpp/types/integer
SCNdFAST32 =&gt; cpp/types/integer
SCNdFAST64 =&gt; cpp/types/integer
SCNdMAX =&gt; cpp/types/integer
SCNdPTR  =&gt; cpp/types/integer
SCNi8 =&gt; cpp/types/integer
SCNi16 =&gt; cpp/types/integer
SCNi32 =&gt; cpp/types/integer
SCNi64 =&gt; cpp/types/integer
SCNiLEAST8 =&gt; cpp/types/integer
SCNiLEAST16 =&gt; cpp/types/integer
SCNiLEAST32 =&gt; cpp/types/integer
SCNiLEAST64 =&gt; cpp/types/integer
SCNiFAST8 =&gt; cpp/types/integer
SCNiFAST16 =&gt; cpp/types/integer
SCNiFAST32 =&gt; cpp/types/integer
SCNiFAST64 =&gt; cpp/types/integer
SCNiMAX =&gt; cpp/types/integer
SCNiPTR  =&gt; cpp/types/integer
SCNu8 =&gt; cpp/types/integer
SCNu16 =&gt; cpp/types/integer
SCNu32 =&gt; cpp/types/integer
SCNu64 =&gt; cpp/types/integer
SCNuLEAST8 =&gt; cpp/types/integer
SCNuLEAST16 =&gt; cpp/types/integer
SCNuLEAST32 =&gt; cpp/types/integer
SCNuLEAST64 =&gt; cpp/types/integer
SCNuFAST8 =&gt; cpp/types/integer
SCNuFAST16 =&gt; cpp/types/integer
SCNuFAST32 =&gt; cpp/types/integer
SCNuFAST64 =&gt; cpp/types/integer
SCNuMAX =&gt; cpp/types/integer
SCNuPTR  =&gt; cpp/types/integer
SCNo8 =&gt; cpp/types/integer
SCNo16 =&gt; cpp/types/integer
SCNo32 =&gt; cpp/types/integer
SCNo64 =&gt; cpp/types/integer
SCNoLEAST8 =&gt; cpp/types/integer
SCNoLEAST16 =&gt; cpp/types/integer
SCNoLEAST32 =&gt; cpp/types/integer
SCNoLEAST64 =&gt; cpp/types/integer
SCNoFAST8 =&gt; cpp/types/integer
SCNoFAST16 =&gt; cpp/types/integer
SCNoFAST32 =&gt; cpp/types/integer
SCNoFAST64 =&gt; cpp/types/integer
SCNoMAX =&gt; cpp/types/integer
SCNoPTR  =&gt; cpp/types/integer
SCNx8 =&gt; cpp/types/integer
SCNx16 =&gt; cpp/types/integer
SCNx32 =&gt; cpp/types/integer
SCNx64 =&gt; cpp/types/integer
SCNxLEAST8 =&gt; cpp/types/integer
SCNxLEAST16 =&gt; cpp/types/integer
SCNxLEAST32 =&gt; cpp/types/integer
SCNxLEAST64 =&gt; cpp/types/integer
SCNxFAST8 =&gt; cpp/types/integer
SCNxFAST16 =&gt; cpp/types/integer
SCNxFAST32 =&gt; cpp/types/integer
SCNxFAST64 =&gt; cpp/types/integer
SCNxMAX =&gt; cpp/types/integer
SCNxPTR  =&gt; cpp/types/integer
SCNX8 =&gt; cpp/types/integer
SCNX16 =&gt; cpp/types/integer
SCNX32 =&gt; cpp/types/integer
SCNX64 =&gt; cpp/types/integer
SCNXLEAST8 =&gt; cpp/types/integer
SCNXLEAST16 =&gt; cpp/types/integer
SCNXLEAST32 =&gt; cpp/types/integer
SCNXLEAST64 =&gt; cpp/types/integer
SCNXFAST8 =&gt; cpp/types/integer
SCNXFAST16 =&gt; cpp/types/integer
SCNXFAST32 =&gt; cpp/types/integer
SCNXFAST64 =&gt; cpp/types/integer
SCNXMAX =&gt; cpp/types/integer
SCNXPTR =&gt; cpp/types/integer
std::numeric_limits =&gt; cpp/types/numeric_limits
std::numeric_limits::is_specialized =&gt; cpp/types/numeric_limits/is_specialized
std::numeric_limits::is_signed =&gt; cpp/types/numeric_limits/is_signed
std::numeric_limits::is_integer =&gt; cpp/types/numeric_limits/is_integer
std::numeric_limits::is_exact =&gt; cpp/types/numeric_limits/is_exact
std::numeric_limits::has_infinity =&gt; cpp/types/numeric_limits/has_infinity
std::numeric_limits::has_quiet_NaN =&gt; cpp/types/numeric_limits/has_quiet_NaN
std::numeric_limits::has_signaling_NaN =&gt; cpp/types/numeric_limits/has_signaling_NaN
std::numeric_limits::has_denorm =&gt; cpp/types/numeric_limits/has_denorm
std::numeric_limits::has_denorm_loss =&gt; cpp/types/numeric_limits/has_denorm_loss
std::numeric_limits::round_style =&gt; cpp/types/numeric_limits/round_style
std::numeric_limits::is_iec559 =&gt; cpp/types/numeric_limits/is_iec559
std::numeric_limits::is_bounded =&gt; cpp/types/numeric_limits/is_bounded
std::numeric_limits::is_modulo =&gt; cpp/types/numeric_limits/is_modulo
std::numeric_limits::digits =&gt; cpp/types/numeric_limits/digits
std::numeric_limits::digits10 =&gt; cpp/types/numeric_limits/digits10
std::numeric_limits::max_digits10 =&gt; cpp/types/numeric_limits/max_digits10
std::numeric_limits::radix =&gt; cpp/types/numeric_limits/radix
std::numeric_limits::min_exponent =&gt; cpp/types/numeric_limits/min_exponent
std::numeric_limits::min_exponent10 =&gt; cpp/types/numeric_limits/min_exponent10
std::numeric_limits::max_exponent =&gt; cpp/types/numeric_limits/max_exponent
std::numeric_limits::max_exponent10 =&gt; cpp/types/numeric_limits/max_exponent10
std::numeric_limits::traps =&gt; cpp/types/numeric_limits/traps
std::numeric_limits::tinyness_before =&gt; cpp/types/numeric_limits/tinyness_before
std::numeric_limits::min =&gt; cpp/types/numeric_limits/min
std::numeric_limits::max =&gt; cpp/types/numeric_limits/max
std::numeric_limits::lowest =&gt; cpp/types/numeric_limits/lowest
std::numeric_limits::epsilon =&gt; cpp/types/numeric_limits/epsilon
std::numeric_limits::round_error =&gt; cpp/types/numeric_limits/round_error
std::numeric_limits::infinity =&gt; cpp/types/numeric_limits/infinity
std::numeric_limits::quiet_NaN =&gt; cpp/types/numeric_limits/quiet_NaN
std::numeric_limits::signaling_NaN =&gt; cpp/types/numeric_limits/signaling_NaN
std::numeric_limits::denorm_min =&gt; cpp/types/numeric_limits/denorm_min
std::float_round_style =&gt; cpp/types/numeric_limits/float_round_style
std::round_indeterminate =&gt; cpp/types/numeric_limits/float_round_style
std::round_toward_zero =&gt; cpp/types/numeric_limits/float_round_style
std::round_to_nearest =&gt; cpp/types/numeric_limits/float_round_style
std::round_toward_infinity =&gt; cpp/types/numeric_limits/float_round_style
std::round_toward_neg_infinity =&gt; cpp/types/numeric_limits/float_round_style
std::float_denorm_style =&gt; cpp/types/numeric_limits/float_denorm_style
std::denorm_indeterminate =&gt; cpp/types/numeric_limits/float_denorm_style
std::denorm_absent =&gt; cpp/types/numeric_limits/float_denorm_style
std::denorm_present =&gt; cpp/types/numeric_limits/float_denorm_style
PTRDIFF_MIN =&gt; cpp/types/climits
PTRDIFF_MAX =&gt; cpp/types/climits
SIZE_MAX =&gt; cpp/types/climits
SIG_ATOMIC_MIN =&gt; cpp/types/climits
SIG_ATOMIC_MAX =&gt; cpp/types/climits
WCHAR_MIN =&gt; cpp/types/climits
WCHAR_MAX =&gt; cpp/types/climits
WINT_MIN =&gt; cpp/types/climits
WINT_MAX =&gt; cpp/types/climits
CHAR_BIT =&gt; cpp/types/climits
MB_LEN_MAX =&gt; cpp/types/climits
CHAR_MIN =&gt; cpp/types/climits
CHAR_MAX =&gt; cpp/types/climits
SCHAR_MIN =&gt; cpp/types/climits
SHRT_MIN =&gt; cpp/types/climits
INT_MIN =&gt; cpp/types/climits
LONG_MIN =&gt; cpp/types/climits
LLONG_MIN =&gt; cpp/types/climits
SCHAR_MAX =&gt; cpp/types/climits
SHRT_MAX =&gt; cpp/types/climits
INT_MAX =&gt; cpp/types/climits
LONG_MAX =&gt; cpp/types/climits
LLONG_MAX =&gt; cpp/types/climits
UCHAR_MAX =&gt; cpp/types/climits
USHRT_MAX =&gt; cpp/types/climits
UINT_MAX =&gt; cpp/types/climits
ULONG_MAX =&gt; cpp/types/climits
ULLONG_MAX =&gt; cpp/types/climits
FLT_RADIX =&gt; cpp/types/climits
DECIMAL_DIG =&gt; cpp/types/climits
FLT_DECIMAL_DIG =&gt; cpp/types/climits
DBL_DECIMAL_DIG =&gt; cpp/types/climits
LDBL_DECIMAL_DIG =&gt; cpp/types/climits
FLT_MIN =&gt; cpp/types/climits
DBL_MIN =&gt; cpp/types/climits
LDBL_MIN =&gt; cpp/types/climits
FLT_TRUE_MIN =&gt; cpp/types/climits
DBL_TRUE_MIN =&gt; cpp/types/climits
LDBL_TRUE_MIN =&gt; cpp/types/climits
FLT_MAX =&gt; cpp/types/climits
DBL_MAX =&gt; cpp/types/climits
LDBL_MAX =&gt; cpp/types/climits
FLT_EPSILON =&gt; cpp/types/climits
DBL_EPSILON =&gt; cpp/types/climits
LDBL_EPSILON =&gt; cpp/types/climits
FLT_DIG =&gt; cpp/types/climits
DBL_DIG =&gt; cpp/types/climits
LDBL_DIG =&gt; cpp/types/climits
FLT_MANT_DIG =&gt; cpp/types/climits
DBL_MANT_DIG =&gt; cpp/types/climits
LDBL_MANT_DIG =&gt; cpp/types/climits
FLT_MIN_EXP =&gt; cpp/types/climits
DBL_MIN_EXP =&gt; cpp/types/climits
LDBL_MIN_EXP =&gt; cpp/types/climits
FLT_MIN_10_EXP =&gt; cpp/types/climits
DBL_MIN_10_EXP =&gt; cpp/types/climits
LDBL_MIN_10_EXP =&gt; cpp/types/climits
FLT_MAX_EXP =&gt; cpp/types/climits
DBL_MAX_EXP =&gt; cpp/types/climits
LDBL_MAX_EXP =&gt; cpp/types/climits
FLT_MAX_10_EXP =&gt; cpp/types/climits
DBL_MAX_10_EXP =&gt; cpp/types/climits
LDBL_MAX_10_EXP =&gt; cpp/types/climits
FLT_ROUNDS =&gt; cpp/types/climits/FLT_ROUNDS
FLT_EVAL_METHOD =&gt; cpp/types/climits/FLT_EVAL_METHOD
FLT_HAS_SUBNORM =&gt; cpp/types/climits
DBL_HAS_SUBNORM =&gt; cpp/types/climits
LDBL_HAS_SUBNORM =&gt; cpp/types/climits
std::type_info =&gt; cpp/types/type_info
std::type_info::operator== =&gt; cpp/types/type_info/operator_cmp
std::type_info::operator!= =&gt; cpp/types/type_info/operator_cmp
std::type_info::before =&gt; cpp/types/type_info/before
std::type_info::hash_code =&gt; cpp/types/type_info/hash_code
std::type_info::name =&gt; cpp/types/type_info/name
std::type_index =&gt; cpp/types/type_index
std::type_index::type_index =&gt; cpp/types/type_index/type_index
std::type_index::operator== =&gt; cpp/types/type_index/operator_cmp
std::type_index::operator!= =&gt; cpp/types/type_index/operator_cmp
std::type_index::operator&lt;= =&gt; cpp/types/type_index/operator_cmp
std::type_index::operator&lt; =&gt; cpp/types/type_index/operator_cmp
std::type_index::operator&gt;= =&gt; cpp/types/type_index/operator_cmp
std::type_index::operator&gt; =&gt; cpp/types/type_index/operator_cmp
std::type_index::hash_code =&gt; cpp/types/type_index/hash_code
std::type_index::name =&gt; cpp/types/type_index/name
std::hash&lt;std::type_index&gt; =&gt; cpp/types/type_index/hash
std::bad_typeid =&gt; cpp/types/bad_typeid
std::bad_typeid::what =&gt; cpp/error/exception/what
std::bad_typeid::bad_typeid =&gt; cpp/types/bad_typeid/bad_typeid
std::bad_cast =&gt; cpp/types/bad_cast
std::bad_cast::what =&gt; cpp/error/exception/what
std::bad_cast::bad_cast =&gt; cpp/types/bad_cast/bad_cast
std::is_void =&gt; cpp/types/is_void
std::is_void_v =&gt; cpp/types/is_void
std::is_null_pointer =&gt; cpp/types/is_null_pointer
std::is_null_pointer_v =&gt; cpp/types/is_null_pointer
std::is_final =&gt; cpp/types/is_final
std::is_final_v =&gt; cpp/types/is_final
std::is_integral =&gt; cpp/types/is_integral
std::is_integral_v =&gt; cpp/types/is_integral
std::is_floating_point =&gt; cpp/types/is_floating_point
std::is_floating_point_v =&gt; cpp/types/is_floating_point
std::is_array =&gt; cpp/types/is_array
std::is_array_v =&gt; cpp/types/is_array
std::is_pointer =&gt; cpp/types/is_pointer
std::is_pointer_v =&gt; cpp/types/is_pointer
std::is_lvalue_reference =&gt; cpp/types/is_lvalue_reference
std::is_lvalue_reference_v =&gt; cpp/types/is_lvalue_reference
std::is_rvalue_reference =&gt; cpp/types/is_rvalue_reference
std::is_rvalue_reference_v =&gt; cpp/types/is_rvalue_reference
std::is_member_object_pointer =&gt; cpp/types/is_member_object_pointer
std::is_member_object_pointer_v =&gt; cpp/types/is_member_object_pointer
std::is_member_function_pointer =&gt; cpp/types/is_member_function_pointer
std::is_member_function_pointer_v =&gt; cpp/types/is_member_function_pointer
std::is_enum =&gt; cpp/types/is_enum
std::is_enum_v =&gt; cpp/types/is_enum
std::is_union =&gt; cpp/types/is_union
std::is_union_v =&gt; cpp/types/is_union
std::is_class =&gt; cpp/types/is_class
std::is_class_v =&gt; cpp/types/is_class
std::is_function =&gt; cpp/types/is_function
std::is_function_v =&gt; cpp/types/is_function
std::is_reference =&gt; cpp/types/is_reference
std::is_reference_v =&gt; cpp/types/is_reference
std::is_arithmetic =&gt; cpp/types/is_arithmetic
std::is_arithmetic_v =&gt; cpp/types/is_arithmetic
std::is_fundamental =&gt; cpp/types/is_fundamental
std::is_fundamental_v =&gt; cpp/types/is_fundamental
std::is_object =&gt; cpp/types/is_object
std::is_object_v =&gt; cpp/types/is_object
std::is_scalar =&gt; cpp/types/is_scalar
std::is_scalar_v =&gt; cpp/types/is_scalar
std::is_compound =&gt; cpp/types/is_compound
std::is_compound_v =&gt; cpp/types/is_compound
std::is_member_pointer =&gt; cpp/types/is_member_pointer
std::is_member_pointer_v =&gt; cpp/types/is_member_pointer
std::is_const =&gt; cpp/types/is_const
std::is_const_v =&gt; cpp/types/is_const
std::is_volatile =&gt; cpp/types/is_volatile
std::is_volatile_v =&gt; cpp/types/is_volatile
std::is_trivial =&gt; cpp/types/is_trivial
std::is_trivial_v =&gt; cpp/types/is_trivial
std::is_trivially_copyable =&gt; cpp/types/is_trivially_copyable
std::is_trivially_copyable_v =&gt; cpp/types/is_trivially_copyable
std::is_standard_layout =&gt; cpp/types/is_standard_layout
std::is_standard_layout_v =&gt; cpp/types/is_standard_layout
std::is_pod =&gt; cpp/types/is_pod
std::is_pod_v =&gt; cpp/types/is_pod
std::is_literal_type =&gt; cpp/types/is_literal_type
std::is_literal_type_v =&gt; cpp/types/is_literal_type
std::is_empty =&gt; cpp/types/is_empty
std::is_empty_v =&gt; cpp/types/is_empty
std::is_polymorphic =&gt; cpp/types/is_polymorphic
std::is_polymorphic_v =&gt; cpp/types/is_polymorphic
std::is_abstract =&gt; cpp/types/is_abstract
std::is_abstract_v =&gt; cpp/types/is_abstract
std::has_unique_object_representations =&gt; cpp/types/has_unique_object_representations
std::has_unique_object_representations_v =&gt; cpp/types/has_unique_object_representations
std::is_signed =&gt; cpp/types/is_signed
std::is_signed_v =&gt; cpp/types/is_signed
std::is_unsigned =&gt; cpp/types/is_unsigned
std::is_unsigned_v =&gt; cpp/types/is_unsigned
std::is_constructible =&gt; cpp/types/is_constructible
std::is_constructible_v =&gt; cpp/types/is_constructible
std::is_trivially_constructible =&gt; cpp/types/is_constructible
std::is_trivially_constructible_v =&gt; cpp/types/is_constructible
std::is_nothrow_constructible =&gt; cpp/types/is_constructible
std::is_nothrow_constructible_v =&gt; cpp/types/is_constructible
std::is_default_constructible =&gt; cpp/types/is_default_constructible
std::is_default_constructible_v =&gt; cpp/types/is_default_constructible
std::is_trivially_default_constructible =&gt; cpp/types/is_default_constructible
std::is_trivially_default_constructible_v =&gt; cpp/types/is_default_constructible
std::is_nothrow_default_constructible =&gt; cpp/types/is_default_constructible
std::is_nothrow_default_constructible_v =&gt; cpp/types/is_default_constructible
std::is_copy_constructible =&gt; cpp/types/is_copy_constructible
std::is_copy_constructible_v =&gt; cpp/types/is_copy_constructible
std::is_trivially_copy_constructible =&gt; cpp/types/is_copy_constructible
std::is_trivially_copy_constructible_v =&gt; cpp/types/is_copy_constructible
std::is_nothrow_copy_constructible =&gt; cpp/types/is_copy_constructible
std::is_nothrow_copy_constructible_v =&gt; cpp/types/is_copy_constructible
std::is_move_constructible =&gt; cpp/types/is_move_constructible
std::is_move_constructible_v =&gt; cpp/types/is_move_constructible
std::is_trivially_move_constructible =&gt; cpp/types/is_move_constructible
std::is_trivially_move_constructible_v =&gt; cpp/types/is_move_constructible
std::is_nothrow_move_constructible =&gt; cpp/types/is_move_constructible
std::is_nothrow_move_constructible_v =&gt; cpp/types/is_move_constructible
std::is_assignable =&gt; cpp/types/is_assignable
std::is_assignable_v =&gt; cpp/types/is_assignable
std::is_trivially_assignable =&gt; cpp/types/is_assignable
std::is_trivially_assignable_v =&gt; cpp/types/is_assignable
std::is_nothrow_assignable =&gt; cpp/types/is_assignable
std::is_nothrow_assignable_v =&gt; cpp/types/is_assignable
std::is_copy_assignable =&gt; cpp/types/is_copy_assignable
std::is_copy_assignable_v =&gt; cpp/types/is_copy_assignable
std::is_trivially_copy_assignable =&gt; cpp/types/is_copy_assignable
std::is_trivially_copy_assignable_v =&gt; cpp/types/is_copy_assignable
std::is_nothrow_copy_assignable =&gt; cpp/types/is_copy_assignable
std::is_nothrow_copy_assignable_v =&gt; cpp/types/is_copy_assignable
std::is_move_assignable =&gt; cpp/types/is_move_assignable
std::is_move_assignable_v =&gt; cpp/types/is_move_assignable
std::is_trivially_move_assignable =&gt; cpp/types/is_move_assignable
std::is_trivially_move_assignable_v =&gt; cpp/types/is_move_assignable
std::is_nothrow_move_assignable =&gt; cpp/types/is_move_assignable
std::is_nothrow_move_assignable_v =&gt; cpp/types/is_move_assignable
std::is_destructible =&gt; cpp/types/is_destructible
std::is_destructible_v =&gt; cpp/types/is_destructible
std::is_trivially_destructible =&gt; cpp/types/is_destructible
std::is_trivially_destructible_v =&gt; cpp/types/is_destructible
std::is_nothrow_destructible =&gt; cpp/types/is_destructible
std::is_nothrow_destructible_v =&gt; cpp/types/is_destructible
std::is_callable =&gt; cpp/types/is_callable
std::is_callable_v =&gt; cpp/types/is_callable
std::is_nothrow_callable =&gt; cpp/types/is_callable
std::is_nothrow_callable_v =&gt; cpp/types/is_callable
std::is_swappable =&gt; cpp/types/is_swappable
std::is_swappable_v =&gt; cpp/types/is_swappable
std::is_swappable_with =&gt; cpp/types/is_swappable_with
std::is_swappable_with_v =&gt; cpp/types/is_swappable_with
std::is_nothrow_swappable =&gt; cpp/types/is_swappable
std::is_nothrow_swappable_v =&gt; cpp/types/is_swappable
std::is_nothrow_swappable_with =&gt; cpp/types/is_swappable_with
std::is_nothrow_swappable_with_v =&gt; cpp/types/is_swappable_with
std::has_virtual_destructor =&gt; cpp/types/has_virtual_destructor
std::has_virtual_destructor_v =&gt; cpp/types/has_virtual_destructor
std::alignment_of =&gt; cpp/types/alignment_of
std::alignment_of_v =&gt; cpp/types/alignment_of
std::rank =&gt; cpp/types/rank
std::rank_v =&gt; cpp/types/rank
std::extent =&gt; cpp/types/extent
std::extent_v =&gt; cpp/types/extent
std::is_same =&gt; cpp/types/is_same
std::is_same_v =&gt; cpp/types/is_same
std::is_base_of =&gt; cpp/types/is_base_of
std::is_base_of_v =&gt; cpp/types/is_base_of
std::is_convertible =&gt; cpp/types/is_convertible
std::is_convertible_v =&gt; cpp/types/is_convertible
std::remove_cv =&gt; cpp/types/remove_cv
std::remove_const =&gt; cpp/types/remove_cv
std::remove_volatile =&gt; cpp/types/remove_cv
std::remove_cv_t =&gt; cpp/types/remove_cv
std::remove_const_t =&gt; cpp/types/remove_cv
std::remove_volatile_t =&gt; cpp/types/remove_cv
std::add_cv =&gt; cpp/types/add_cv
std::add_const =&gt; cpp/types/add_cv
std::add_volatile =&gt; cpp/types/add_cv
std::add_cv_t =&gt; cpp/types/add_cv
std::add_const_t =&gt; cpp/types/add_cv
std::add_volatile_t =&gt; cpp/types/add_cv
std::remove_reference =&gt; cpp/types/remove_reference
std::remove_reference_t =&gt; cpp/types/remove_reference
std::add_lvalue_reference =&gt; cpp/types/add_reference
std::add_lvalue_reference_t =&gt; cpp/types/add_reference
std::add_rvalue_reference =&gt; cpp/types/add_reference
std::add_rvalue_reference_t =&gt; cpp/types/add_reference
std::remove_pointer =&gt; cpp/types/remove_pointer
std::remove_pointer_t =&gt; cpp/types/remove_pointer
std::add_pointer =&gt; cpp/types/add_pointer
std::add_pointer_t =&gt; cpp/types/add_pointer
std::make_signed =&gt; cpp/types/make_signed
std::make_signed_t =&gt; cpp/types/make_signed
std::make_unsigned =&gt; cpp/types/make_unsigned
std::make_unsigned_t =&gt; cpp/types/make_unsigned
std::remove_extent =&gt; cpp/types/remove_extent
std::remove_extent_t =&gt; cpp/types/remove_extent
std::remove_all_extents =&gt; cpp/types/remove_all_extents
std::remove_all_extents_t =&gt; cpp/types/remove_all_extents
std::aligned_storage =&gt; cpp/types/aligned_storage
std::aligned_storage_t =&gt; cpp/types/aligned_storage
std::aligned_union =&gt; cpp/types/aligned_union
std::aligned_union_t =&gt; cpp/types/aligned_union
std::decay =&gt; cpp/types/decay
std::decay_t =&gt; cpp/types/decay
std::enable_if =&gt; cpp/types/enable_if
std::enable_if_t =&gt; cpp/types/enable_if
std::void_t =&gt; cpp/types/void_t
std::conditional =&gt; cpp/types/conditional
std::conditional_t =&gt; cpp/types/conditional
std::common_type =&gt; cpp/types/common_type
std::common_type_t =&gt; cpp/types/common_type
std::underlying_type =&gt; cpp/types/underlying_type
std::underlying_type_t =&gt; cpp/types/underlying_type
std::result_of =&gt; cpp/types/result_of
std::result_of_t =&gt; cpp/types/result_of
std::conjunction =&gt; cpp/types/conjunction
std::conjunction_v =&gt; cpp/types/conjunction
std::disjunction =&gt; cpp/types/disjunction
std::disjunction_v =&gt; cpp/types/disjunction
std::negation =&gt; cpp/types/negation
std::negation_v =&gt; cpp/types/negation
std::integral_constant =&gt; cpp/types/integral_constant
std::bool_constant =&gt; cpp/types/integral_constant
std::true_type =&gt; cpp/types/integral_constant
std::false_type =&gt; cpp/types/integral_constant
std::iterator_traits =&gt; cpp/iterator/iterator_traits
std::input_iterator_tag =&gt; cpp/iterator/iterator_tags
std::output_iterator_tag =&gt; cpp/iterator/iterator_tags
std::forward_iterator_tag =&gt; cpp/iterator/iterator_tags
std::bidirectional_iterator_tag =&gt; cpp/iterator/iterator_tags
std::random_access_iterator_tag =&gt; cpp/iterator/iterator_tags
std::iterator =&gt; cpp/iterator/iterator
std::reverse_iterator =&gt; cpp/iterator/reverse_iterator
std::move_iterator =&gt; cpp/iterator/move_iterator
std::back_insert_iterator =&gt; cpp/iterator/back_insert_iterator
std::front_insert_iterator =&gt; cpp/iterator/front_insert_iterator
std::insert_iterator =&gt; cpp/iterator/insert_iterator
std::make_reverse_iterator =&gt; cpp/iterator/make_reverse_iterator
std::make_move_iterator =&gt; cpp/iterator/make_move_iterator
std::back_inserter =&gt; cpp/iterator/back_inserter
std::front_inserter =&gt; cpp/iterator/front_inserter
std::inserter =&gt; cpp/iterator/inserter
std::istream_iterator =&gt; cpp/iterator/istream_iterator
std::istreambuf_iterator =&gt; cpp/iterator/istreambuf_iterator
std::ostream_iterator =&gt; cpp/iterator/ostream_iterator
std::ostreambuf_iterator =&gt; cpp/iterator/ostreambuf_iterator
std::advance =&gt; cpp/iterator/advance
std::distance =&gt; cpp/iterator/distance
std::next =&gt; cpp/iterator/next
std::prev =&gt; cpp/iterator/prev
std::begin =&gt; cpp/iterator/begin
std::cbegin =&gt; cpp/iterator/begin
std::rbegin =&gt; cpp/iterator/rbegin
std::crbegin =&gt; cpp/iterator/rbegin
std::end =&gt; cpp/iterator/end
std::cend =&gt; cpp/iterator/end
std::rend =&gt; cpp/iterator/rend
std::crend =&gt; cpp/iterator/rend
std::size =&gt; cpp/iterator/size
std::empty =&gt; cpp/iterator/empty
std::data =&gt; cpp/iterator/data
operator new =&gt; cpp/memory/new/operator_new
operator new[] =&gt; cpp/memory/new/operator_new
operator delete =&gt; cpp/memory/new/operator_delete
operator delete[] =&gt; cpp/memory/new/operator_delete
std::get_new_handler =&gt; cpp/memory/new/get_new_handler
std::set_new_handler =&gt; cpp/memory/new/set_new_handler
std::bad_alloc =&gt; cpp/memory/new/bad_alloc
std::bad_alloc::what =&gt; cpp/error/exception/what
std::bad_alloc::bad_alloc =&gt; cpp/memory/new/bad_alloc
std::bad_alloc::operator= =&gt; cpp/memory/new/bad_alloc
std::bad_alloc::what =&gt; cpp/memory/new/bad_alloc
std::bad_array_new_length =&gt; cpp/memory/new/bad_array_new_length
std::bad_array_new_length::what =&gt; cpp/memory/new/bad_alloc
std::bad_array_new_length::what =&gt; cpp/error/exception/what
std::bad_array_new_length::bad_array_new_length =&gt; cpp/memory/new/bad_array_new_length/bad_array_new_length
std::bad_array_length =&gt; cpp/memory/new/bad_array_length
std::bad_array_length::what =&gt; cpp/memory/new/bad_alloc
std::bad_array_length::what =&gt; cpp/error/exception/what
std::bad_array_length::bad_array_length =&gt; cpp/memory/new/bad_array_length
std::nothrow_t =&gt; cpp/memory/new/nothrow_t
std::align_val_t =&gt; cpp/memory/new/align_val_t
std::new_handler =&gt; cpp/memory/new/new_handler
std::nothrow =&gt; cpp/memory/new/nothrow
std::allocator =&gt; cpp/memory/allocator
std::allocator::allocator =&gt; cpp/memory/allocator/allocator
std::allocator::~allocator =&gt; cpp/memory/allocator/~allocator
std::allocator::address =&gt; cpp/memory/allocator/address
std::allocator::allocate =&gt; cpp/memory/allocator/allocate
std::allocator::deallocate =&gt; cpp/memory/allocator/deallocate
std::allocator::max_size =&gt; cpp/memory/allocator/max_size
std::allocator::construct =&gt; cpp/memory/allocator/construct
std::allocator::destroy =&gt; cpp/memory/allocator/destroy
operator==(std::allocator) =&gt; cpp/memory/allocator/operator_cmp
operator!=(std::allocator) =&gt; cpp/memory/allocator/operator_cmp
std::allocator_traits =&gt; cpp/memory/allocator_traits
std::allocator_traits::allocate =&gt; cpp/memory/allocator_traits/allocate
std::allocator_traits::deallocate =&gt; cpp/memory/allocator_traits/deallocate
std::allocator_traits::max_size =&gt; cpp/memory/allocator_traits/max_size
std::allocator_traits::construct =&gt; cpp/memory/allocator_traits/construct
std::allocator_traits::destroy =&gt; cpp/memory/allocator_traits/destroy
std::allocator_traits::select_on_container_copy_construction =&gt; cpp/memory/allocator_traits/select_on_container_copy_construction
std::allocator_arg_t =&gt; cpp/memory/allocator_arg_t
std::allocator_arg =&gt; cpp/memory/allocator_arg
std::uses_allocator =&gt; cpp/memory/uses_allocator
std::uses_allocator_v =&gt; cpp/memory/uses_allocator
std::scoped_allocator_adaptor =&gt; cpp/memory/scoped_allocator_adaptor
std::scoped_allocator_adaptor::scoped_allocator_adaptor =&gt; cpp/memory/scoped_allocator_adaptor/scoped_allocator_adaptor
std::scoped_allocator_adaptor::~scoped_allocator_adaptor =&gt; cpp/memory/scoped_allocator_adaptor/~scoped_allocator_adaptor
std::scoped_allocator_adaptor::inner_allocator =&gt; cpp/memory/scoped_allocator_adaptor/inner_allocator
std::scoped_allocator_adaptor::outer_allocator =&gt; cpp/memory/scoped_allocator_adaptor/outer_allocator
std::scoped_allocator_adaptor::allocate =&gt; cpp/memory/scoped_allocator_adaptor/allocate
std::scoped_allocator_adaptor::deallocate =&gt; cpp/memory/scoped_allocator_adaptor/deallocate
std::scoped_allocator_adaptor::max_size =&gt; cpp/memory/scoped_allocator_adaptor/max_size
std::scoped_allocator_adaptor::construct =&gt; cpp/memory/scoped_allocator_adaptor/construct
std::scoped_allocator_adaptor::destroy =&gt; cpp/memory/scoped_allocator_adaptor/destroy
std::scoped_allocator_adaptor::select_on_container_copy_construction =&gt; cpp/memory/scoped_allocator_adaptor/select_on_container_copy_construction
operator==(std::scoped_allocator_adaptor) =&gt; cpp/memory/scoped_allocator_adaptor/operator_cmp
operator!=(std::scoped_allocator_adaptor) =&gt; cpp/memory/scoped_allocator_adaptor/operator_cmp
std::pmr::polymorphic_allocator =&gt; cpp/memory/polymorphic_allocator
std::pmr::polymorphic_allocator::polymorphic_allocator =&gt; cpp/memory/polymorphic_allocator/polymorphic_allocator
std::pmr::polymorphic_allocator::~polymorphic_allocator =&gt; cpp/memory/polymorphic_allocator
std::pmr::polymorphic_allocator::allocate =&gt; cpp/memory/polymorphic_allocator/allocate
std::pmr::polymorphic_allocator::deallocate =&gt; cpp/memory/polymorphic_allocator/deallocate
std::pmr::polymorphic_allocator::construct =&gt; cpp/memory/polymorphic_allocator/construct
std::pmr::polymorphic_allocator::destroy =&gt; cpp/memory/polymorphic_allocator/destroy
std::pmr::polymorphic_allocator::select_on_container_copy_contruction =&gt; cpp/memory/polymorphic_allocator/select_on_container_copy_contruction
std::pmr::polymorphic_allocator::resource =&gt; cpp/memory/polymorphic_allocator/resource
operator==(std::pmr::polymorphic_allocator) =&gt; cpp/memory/polymorphic_allocator/operator_cmp
operator!=(std::pmr::polymorphic_allocator) =&gt; cpp/memory/polymorphic_allocator/operator_cmp
std::pmr::memory_resource =&gt; cpp/memory/memory_resource
std::pmr::memory_resource::memory_resource =&gt; cpp/memory/memory_resource/memory_resource
std::pmr::memory_resource::allocate =&gt; cpp/memory/memory_resource/allocate
std::pmr::memory_resource::deallocate =&gt; cpp/memory/memory_resource/deallocate
std::pmr::memory_resource::is_equal =&gt; cpp/memory/memory_resource/is_equal
std::pmr::memory_resource::do_allocate =&gt; cpp/memory/memory_resource/do_allocate
std::pmr::memory_resource::do_deallocate =&gt; cpp/memory/memory_resource/do_deallocate
std::pmr::memory_resource::do_is_equal =&gt; cpp/memory/memory_resource/do_is_equal
operator==(std::pmr::memory_resource) =&gt; cpp/memory/memory_resource/operator_eq
operator!=(std::pmr::memory_resource) =&gt; cpp/memory/memory_resource/operator_eq
std::pmr::pool_options =&gt; cpp/memory/pool_options
std::pmr::pool_options::max_blocks_per_chunk =&gt; cpp/memory/pool_options
std::pmr::pool_options::largest_required_pool_block =&gt; cpp/memory/pool_options
std::pmr::synchronized_pool_resource =&gt; cpp/memory/synchronized_pool_resource
std::pmr::synchronized_pool_resource::allocate =&gt; cpp/memory/memory_resource/allocate
std::pmr::synchronized_pool_resource::deallocate =&gt; cpp/memory/memory_resource/deallocate
std::pmr::synchronized_pool_resource::is_equal =&gt; cpp/memory/memory_resource/is_equal
std::pmr::synchronized_pool_resource::do_allocate =&gt; cpp/memory/memory_resource/do_allocate
std::pmr::synchronized_pool_resource::do_deallocate =&gt; cpp/memory/memory_resource/do_deallocate
std::pmr::synchronized_pool_resource::do_is_equal =&gt; cpp/memory/memory_resource/do_is_equal
std::pmr::synchronized_pool_resource::synchronized_pool_resource =&gt; cpp/memory/synchronized_pool_resource/synchronized_pool_resource
std::pmr::synchronized_pool_resource::~synchronized_pool_resource =&gt; cpp/memory/synchronized_pool_resource
std::pmr::synchronized_pool_resource::release =&gt; cpp/memory/synchronized_pool_resource/release
std::pmr::synchronized_pool_resource::upstream_resource =&gt; cpp/memory/synchronized_pool_resource/upstream_resource
std::pmr::synchronized_pool_resource::options =&gt; cpp/memory/synchronized_pool_resource/options
std::pmr::synchronized_pool_resource::do_allocate =&gt; cpp/memory/synchronized_pool_resource/do_allocate
std::pmr::synchronized_pool_resource::do_deallocate =&gt; cpp/memory/synchronized_pool_resource/do_deallocate
std::pmr::synchronized_pool_resource::do_is_equal =&gt; cpp/memory/synchronized_pool_resource/do_is_equal
std::pmr::unsynchronized_pool_resource =&gt; cpp/memory/unsynchronized_pool_resource
std::pmr::unsynchronized_pool_resource::allocate =&gt; cpp/memory/memory_resource/allocate
std::pmr::unsynchronized_pool_resource::deallocate =&gt; cpp/memory/memory_resource/deallocate
std::pmr::unsynchronized_pool_resource::is_equal =&gt; cpp/memory/memory_resource/is_equal
std::pmr::unsynchronized_pool_resource::do_allocate =&gt; cpp/memory/memory_resource/do_allocate
std::pmr::unsynchronized_pool_resource::do_deallocate =&gt; cpp/memory/memory_resource/do_deallocate
std::pmr::unsynchronized_pool_resource::do_is_equal =&gt; cpp/memory/memory_resource/do_is_equal
std::pmr::unsynchronized_pool_resource::unsynchronized_pool_resource =&gt; cpp/memory/unsynchronized_pool_resource/unsynchronized_pool_resource
std::pmr::unsynchronized_pool_resource::~unsynchronized_pool_resource =&gt; cpp/memory/unsynchronized_pool_resource
std::pmr::unsynchronized_pool_resource::release =&gt; cpp/memory/unsynchronized_pool_resource/release
std::pmr::unsynchronized_pool_resource::upstream_resource =&gt; cpp/memory/unsynchronized_pool_resource/upstream_resource
std::pmr::unsynchronized_pool_resource::options =&gt; cpp/memory/unsynchronized_pool_resource/options
std::pmr::unsynchronized_pool_resource::do_allocate =&gt; cpp/memory/unsynchronized_pool_resource/do_allocate
std::pmr::unsynchronized_pool_resource::do_deallocate =&gt; cpp/memory/unsynchronized_pool_resource/do_deallocate
std::pmr::unsynchronized_pool_resource::do_is_equal =&gt; cpp/memory/unsynchronized_pool_resource/do_is_equal
std::pmr::monotonic_buffer_resource =&gt; cpp/memory/monotonic_buffer_resource
std::pmr::monotonic_buffer_resource::allocate =&gt; cpp/memory/memory_resource/allocate
std::pmr::monotonic_buffer_resource::deallocate =&gt; cpp/memory/memory_resource/deallocate
std::pmr::monotonic_buffer_resource::is_equal =&gt; cpp/memory/memory_resource/is_equal
std::pmr::monotonic_buffer_resource::do_allocate =&gt; cpp/memory/memory_resource/do_allocate
std::pmr::monotonic_buffer_resource::do_deallocate =&gt; cpp/memory/memory_resource/do_deallocate
std::pmr::monotonic_buffer_resource::do_is_equal =&gt; cpp/memory/memory_resource/do_is_equal
std::pmr::monotonic_buffer_resource::monotonic_buffer_resource =&gt; cpp/memory/monotonic_buffer_resource/monotonic_buffer_resource
std::pmr::monotonic_buffer_resource::~monotonic_buffer_resource =&gt; cpp/memory/monotonic_buffer_resource
std::pmr::monotonic_buffer_resource::release =&gt; cpp/memory/monotonic_buffer_resource/release
std::pmr::monotonic_buffer_resource::upstream_resource =&gt; cpp/memory/monotonic_buffer_resource/upstream_resource
std::pmr::monotonic_buffer_resource::do_allocate =&gt; cpp/memory/monotonic_buffer_resource/do_allocate
std::pmr::monotonic_buffer_resource::do_deallocate =&gt; cpp/memory/monotonic_buffer_resource/do_deallocate
std::pmr::monotonic_buffer_resource::do_is_equal =&gt; cpp/memory/monotonic_buffer_resource/do_is_equal
std::pmr::new_delete_resource =&gt; cpp/memory/new_delete_resource
std::pmr::null_memory_resource =&gt; cpp/memory/null_memory_resource
std::pmr::get_default_resource =&gt; cpp/memory/get_default_resource
std::pmr::set_default_resource =&gt; cpp/memory/set_default_resource
std::uninitialized_copy =&gt; cpp/memory/uninitialized_copy
std::uninitialized_copy_n =&gt; cpp/memory/uninitialized_copy_n
std::uninitialized_fill =&gt; cpp/memory/uninitialized_fill
std::uninitialized_fill_n =&gt; cpp/memory/uninitialized_fill_n
std::uninitialized_move =&gt; cpp/memory/uninitialized_move
std::uninitialized_move_n =&gt; cpp/memory/uninitialized_move_n
std::uninitialized_default_construct =&gt; cpp/memory/uninitialized_default_construct
std::uninitialized_default_construct_n =&gt; cpp/memory/uninitialized_default_construct_n
std::uninitialized_value_construct =&gt; cpp/memory/uninitialized_value_construct
std::uninitialized_value_construct_n =&gt; cpp/memory/uninitialized_value_construct_n
std::destroy =&gt; cpp/memory/destroy
std::destroy_at =&gt; cpp/memory/destroy_at
std::destroy_n =&gt; cpp/memory/destroy_n
std::raw_storage_iterator =&gt; cpp/memory/raw_storage_iterator
std::raw_storage_iterator::raw_storage_iterator =&gt; cpp/memory/raw_storage_iterator/raw_storage_iterator
std::raw_storage_iterator::operator* =&gt; cpp/memory/raw_storage_iterator/operator*
std::raw_storage_iterator::operator= =&gt; cpp/memory/raw_storage_iterator/operator=
std::raw_storage_iterator::operator++ =&gt; cpp/memory/raw_storage_iterator/operator_arith
std::get_temporary_buffer =&gt; cpp/memory/get_temporary_buffer
std::return_temporary_buffer =&gt; cpp/memory/return_temporary_buffer
std::unique_ptr =&gt; cpp/memory/unique_ptr
std::unique_ptr::unique_ptr =&gt; cpp/memory/unique_ptr/unique_ptr
std::unique_ptr::~unique_ptr =&gt; cpp/memory/unique_ptr/~unique_ptr
std::unique_ptr::operator= =&gt; cpp/memory/unique_ptr/operator=
std::unique_ptr::release =&gt; cpp/memory/unique_ptr/release
std::unique_ptr::reset =&gt; cpp/memory/unique_ptr/reset
std::unique_ptr::swap =&gt; cpp/memory/unique_ptr/swap
std::unique_ptr::get =&gt; cpp/memory/unique_ptr/get
std::unique_ptr::get_deleter =&gt; cpp/memory/unique_ptr/get_deleter
std::unique_ptr::operator* =&gt; cpp/memory/unique_ptr/operator*
std::unique_ptr::operator-&gt; =&gt; cpp/memory/unique_ptr/operator*
std::unique_ptr::operator bool =&gt; cpp/memory/unique_ptr/operator_bool
operator==(std::unique_ptr) =&gt; cpp/memory/unique_ptr/operator_cmp
operator!=(std::unique_ptr) =&gt; cpp/memory/unique_ptr/operator_cmp
operator&lt;(std::unique_ptr) =&gt; cpp/memory/unique_ptr/operator_cmp
operator&lt;=(std::unique_ptr) =&gt; cpp/memory/unique_ptr/operator_cmp
operator&gt;(std::unique_ptr) =&gt; cpp/memory/unique_ptr/operator_cmp
operator&gt;=(std::unique_ptr) =&gt; cpp/memory/unique_ptr/operator_cmp
std::swap(std::unique_ptr) =&gt; cpp/memory/unique_ptr/swap2
std::hash&lt;std::unique_ptr&gt; =&gt; cpp/memory/unique_ptr/hash
std::shared_ptr =&gt; cpp/memory/shared_ptr
std::shared_ptr::shared_ptr =&gt; cpp/memory/shared_ptr/shared_ptr
std::shared_ptr::~shared_ptr =&gt; cpp/memory/shared_ptr/~shared_ptr
std::shared_ptr::operator= =&gt; cpp/memory/shared_ptr/operator=
std::shared_ptr::reset =&gt; cpp/memory/shared_ptr/reset
std::shared_ptr::swap =&gt; cpp/memory/shared_ptr/swap
std::shared_ptr::get =&gt; cpp/memory/shared_ptr/get
std::shared_ptr::operator* =&gt; cpp/memory/shared_ptr/operator*
std::shared_ptr::operator-&gt; =&gt; cpp/memory/shared_ptr/operator*
std::shared_ptr::operator[] =&gt; cpp/memory/shared_ptr/operator_at
std::shared_ptr::unique =&gt; cpp/memory/shared_ptr/unique
std::shared_ptr::use_count =&gt; cpp/memory/shared_ptr/use_count
std::shared_ptr::operator bool =&gt; cpp/memory/shared_ptr/operator_bool
std::shared_ptr::owner_before =&gt; cpp/memory/shared_ptr/owner_before
operator==(std::shared_ptr) =&gt; cpp/memory/shared_ptr/operator_cmp
operator!=(std::shared_ptr) =&gt; cpp/memory/shared_ptr/operator_cmp
operator&lt;(std::shared_ptr) =&gt; cpp/memory/shared_ptr/operator_cmp
operator&lt;=(std::shared_ptr) =&gt; cpp/memory/shared_ptr/operator_cmp
operator&gt;(std::shared_ptr) =&gt; cpp/memory/shared_ptr/operator_cmp
operator&gt;=(std::shared_ptr) =&gt; cpp/memory/shared_ptr/operator_cmp
operator&lt;&lt;(std::shared_ptr) =&gt; cpp/memory/shared_ptr/operator_ltlt
std::swap(std::shared_ptr) =&gt; cpp/memory/shared_ptr/swap2
std::get_deleter(std::shared_ptr) =&gt; cpp/memory/shared_ptr/get_deleter
std::atomic_is_lock_free(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::atomic_load(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::atomic_load_explicit(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::atomic_store(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::atomic_store_explicit(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::atomic_exchange(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::atomic_exchange_explicit(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::compare_exchange_weak(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::compare_exchange_strong(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::compare_exchange_weak_explicit(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::compare_exchange_strong_explicit(std::shared_ptr) =&gt; cpp/memory/shared_ptr/atomic
std::hash&lt;std::shared_ptr&gt; =&gt; cpp/memory/shared_ptr/hash
std::make_unique =&gt; cpp/memory/unique_ptr/make_unique
std::make_shared =&gt; cpp/memory/shared_ptr/make_shared
std::allocate_shared =&gt; cpp/memory/shared_ptr/allocate_shared
std::static_pointer_cast =&gt; cpp/memory/shared_ptr/pointer_cast
std::dynamic_pointer_cast =&gt; cpp/memory/shared_ptr/pointer_cast
std::const_pointer_cast =&gt; cpp/memory/shared_ptr/pointer_cast
std::weak_ptr =&gt; cpp/memory/weak_ptr
std::weak_ptr::weak_ptr =&gt; cpp/memory/weak_ptr/weak_ptr
std::weak_ptr::~weak_ptr =&gt; cpp/memory/weak_ptr/~weak_ptr
std::weak_ptr::operator= =&gt; cpp/memory/weak_ptr/operator=
std::weak_ptr::reset =&gt; cpp/memory/weak_ptr/reset
std::weak_ptr::swap =&gt; cpp/memory/weak_ptr/swap
std::weak_ptr::use_count =&gt; cpp/memory/weak_ptr/use_count
std::weak_ptr::expired =&gt; cpp/memory/weak_ptr/expired
std::weak_ptr::lock =&gt; cpp/memory/weak_ptr/lock
std::weak_ptr::owner_before =&gt; cpp/memory/weak_ptr/owner_before
std::swap(std::weak_ptr) =&gt; cpp/memory/weak_ptr/swap
std::auto_ptr =&gt; cpp/memory/auto_ptr
std::auto_ptr::auto_ptr =&gt; cpp/memory/auto_ptr/auto_ptr
std::auto_ptr::~auto_ptr =&gt; cpp/memory/auto_ptr/~auto_ptr
std::auto_ptr::operator= =&gt; cpp/memory/auto_ptr/operator=
std::auto_ptr::reset =&gt; cpp/memory/auto_ptr/reset
std::auto_ptr::release =&gt; cpp/memory/auto_ptr/release
std::auto_ptr::get =&gt; cpp/memory/auto_ptr/get
std::auto_ptr::operator* =&gt; cpp/memory/auto_ptr/operator*
std::auto_ptr::operator-&gt; =&gt; cpp/memory/auto_ptr/operator*
std::auto_ptr::operator auto_ptr&lt;Y&gt; =&gt; cpp/memory/auto_ptr/operator_auto_ptr
std::owner_less =&gt; cpp/memory/owner_less
std::owner_less::operator() =&gt; cpp/memory/owner_less
std::enable_shared_from_this =&gt; cpp/memory/enable_shared_from_this
std::enable_shared_from_this::enable_shared_from_this =&gt; cpp/memory/enable_shared_from_this/enable_shared_from_this
std::enable_shared_from_this::~enable_shared_from_this =&gt; cpp/memory/enable_shared_from_this/~enable_shared_from_this
std::enable_shared_from_this::operator= =&gt; cpp/memory/enable_shared_from_this/operator=
std::enable_shared_from_this::shared_from_this =&gt; cpp/memory/enable_shared_from_this/shared_from_this
std::enable_shared_from_this::weak_from_this =&gt; cpp/memory/enable_shared_from_this/weak_from_this
std::bad_weak_ptr =&gt; cpp/memory/bad_weak_ptr
std::bad_weak_ptr::what =&gt; cpp/error/exception/what
std::bad_weak_ptr::bad_weak_ptr =&gt; cpp/memory/bad_weak_ptr/bad_weak_ptr
std::bad_weak_ptr::what =&gt; cpp/memory/bad_weak_ptr
std::default_delete =&gt; cpp/memory/default_delete
std::default_delete::default_delete =&gt; cpp/memory/default_delete
std::default_delete::operator() =&gt; cpp/memory/default_delete
std::declare_reachable =&gt; cpp/memory/gc/declare_reachable
std::undeclare_reachable =&gt; cpp/memory/gc/undeclare_reachable
std::declare_no_pointers =&gt; cpp/memory/gc/declare_no_pointers
std::undeclare_no_pointers =&gt; cpp/memory/gc/undeclare_no_pointers
std::pointer_safety =&gt; cpp/memory/gc/pointer_safety
std::pointer_safety::relaxed =&gt; cpp/memory/gc/pointer_safety
std::pointer_safety::preferred =&gt; cpp/memory/gc/pointer_safety
std::pointer_safety::strict =&gt; cpp/memory/gc/pointer_safety
std::get_pointer_safety =&gt; cpp/memory/gc/get_pointer_safety
std::pointer_traits =&gt; cpp/memory/pointer_traits
std::pointer_traits::pointer_to =&gt; cpp/memory/pointer_traits/pointer_to
std::addressof =&gt; cpp/memory/addressof
std::align =&gt; cpp/memory/align
std::malloc =&gt; cpp/memory/c/malloc
std::aligned_alloc =&gt; cpp/memory/c/aligned_alloc
std::calloc =&gt; cpp/memory/c/calloc
std::realloc =&gt; cpp/memory/c/realloc
std::free =&gt; cpp/memory/c/free
std::exception =&gt; cpp/error/exception
std::exception::exception =&gt; cpp/error/exception/exception
std::exception::~exception =&gt; cpp/error/exception/~exception
std::exception::operator= =&gt; cpp/error/exception/operator=
std::exception::what =&gt; cpp/error/exception/what
std::logic_error =&gt; cpp/error/logic_error
std::logic_error::what =&gt; cpp/error/exception/what
std::logic_error::logic_error =&gt; cpp/error/logic_error
std::domain_error =&gt; cpp/error/domain_error
std::domain_error::what =&gt; cpp/error/exception/what
std::domain_error::domain_error =&gt; cpp/error/domain_error
std::length_error =&gt; cpp/error/length_error
std::length_error::what =&gt; cpp/error/exception/what
std::length_error::length_error =&gt; cpp/error/length_error
std::out_of_range =&gt; cpp/error/out_of_range
std::out_of_range::what =&gt; cpp/error/exception/what
std::out_of_range::out_of_range =&gt; cpp/error/out_of_range
std::invalid_argument =&gt; cpp/error/invalid_argument
std::invalid_argument::what =&gt; cpp/error/exception/what
std::invalid_argument::invalid_argument =&gt; cpp/error/invalid_argument
std::runtime_error =&gt; cpp/error/runtime_error
std::runtime_error::what =&gt; cpp/error/exception/what
std::runtime_error::runtime_error =&gt; cpp/error/runtime_error
std::range_error =&gt; cpp/error/range_error
std::range_error::what =&gt; cpp/error/exception/what
std::range_error::range_error =&gt; cpp/error/range_error
std::overflow_error =&gt; cpp/error/overflow_error
std::overflow_error::what =&gt; cpp/error/exception/what
std::overflow_error::overflow_error =&gt; cpp/error/overflow_error
std::underflow_error =&gt; cpp/error/underflow_error
std::underflow_error::what =&gt; cpp/error/exception/what
std::underflow_error::underflow_error =&gt; cpp/error/underflow_error
assert =&gt; cpp/error/assert
std::uncaught_exception =&gt; cpp/error/uncaught_exception
std::exception_ptr =&gt; cpp/error/exception_ptr
std::make_exception_ptr =&gt; cpp/error/make_exception_ptr
std::current_exception =&gt; cpp/error/current_exception
std::rethrow_exception =&gt; cpp/error/rethrow_exception
std::nested_exception =&gt; cpp/error/nested_exception
std::nested_exception::nested_exception =&gt; cpp/error/nested_exception/nested_exception
std::nested_exception::~nested_exception =&gt; cpp/error/nested_exception/~nested_exception
std::nested_exception::operator= =&gt; cpp/error/nested_exception/operator=
std::nested_exception::rethrow_nested =&gt; cpp/error/nested_exception/rethrow_nested
std::nested_exception::nested_ptr =&gt; cpp/error/nested_exception/nested_ptr
std::throw_with_nested =&gt; cpp/error/throw_with_nested
std::rethrow_if_nested =&gt; cpp/error/rethrow_if_nested
std::terminate =&gt; cpp/error/terminate
std::terminate_handler =&gt; cpp/error/terminate_handler
std::get_terminate =&gt; cpp/error/get_terminate
std::set_terminate =&gt; cpp/error/set_terminate
std::unexpected =&gt; cpp/error/unexpected
std::bad_exception =&gt; cpp/error/bad_exception
std::unexpected_handler =&gt; cpp/error/unexpected_handler
std::get_unexpected =&gt; cpp/error/get_unexpected
std::set_unexpected =&gt; cpp/error/set_unexpected
errno =&gt; cpp/error/errno
E2BIG =&gt; cpp/error/errno_macros
EACCESS =&gt; cpp/error/errno_macros
EADDRINUSE =&gt; cpp/error/errno_macros
EADDRNOTAVAIL =&gt; cpp/error/errno_macros
EAFNOSUPPORT =&gt; cpp/error/errno_macros
EAGAIN =&gt; cpp/error/errno_macros
EALREADY =&gt; cpp/error/errno_macros
EBADF =&gt; cpp/error/errno_macros
EBADMSG =&gt; cpp/error/errno_macros
EBUSY =&gt; cpp/error/errno_macros
ECANCELED =&gt; cpp/error/errno_macros
ECHILD =&gt; cpp/error/errno_macros
ECONNABORTED =&gt; cpp/error/errno_macros
ECONNREFUSED =&gt; cpp/error/errno_macros
ECONNRESET =&gt; cpp/error/errno_macros
EDEADLK =&gt; cpp/error/errno_macros
EDESTADDRREQ =&gt; cpp/error/errno_macros
EDOM =&gt; cpp/error/errno_macros
EEXIST =&gt; cpp/error/errno_macros
EFAULT =&gt; cpp/error/errno_macros
EFBIG =&gt; cpp/error/errno_macros
EHOSTUNREACH =&gt; cpp/error/errno_macros
EIDRM =&gt; cpp/error/errno_macros
EILSEQ =&gt; cpp/error/errno_macros
EINPROGRESS =&gt; cpp/error/errno_macros
EINTR =&gt; cpp/error/errno_macros
EINVAL =&gt; cpp/error/errno_macros
EIO =&gt; cpp/error/errno_macros
EISCONN =&gt; cpp/error/errno_macros
EISDIR =&gt; cpp/error/errno_macros
ELOOP =&gt; cpp/error/errno_macros
EMFILE =&gt; cpp/error/errno_macros
EMLINK =&gt; cpp/error/errno_macros
EMSGSIZE =&gt; cpp/error/errno_macros
ENAMETOOLONG =&gt; cpp/error/errno_macros
ENETDOWN =&gt; cpp/error/errno_macros
ENETRESET =&gt; cpp/error/errno_macros
ENETUNREACH =&gt; cpp/error/errno_macros
ENFILE =&gt; cpp/error/errno_macros
ENOBUFS =&gt; cpp/error/errno_macros
ENODATA =&gt; cpp/error/errno_macros
ENODEV =&gt; cpp/error/errno_macros
ENOENT =&gt; cpp/error/errno_macros
ENOEXEC =&gt; cpp/error/errno_macros
ENOLCK =&gt; cpp/error/errno_macros
ENOLINK =&gt; cpp/error/errno_macros
ENOMEM =&gt; cpp/error/errno_macros
ENOMSG =&gt; cpp/error/errno_macros
ENOPROTOOPT =&gt; cpp/error/errno_macros
ENOSPC =&gt; cpp/error/errno_macros
ENOSR =&gt; cpp/error/errno_macros
ENOSTR =&gt; cpp/error/errno_macros
ENOSYS =&gt; cpp/error/errno_macros
ENOTCONN =&gt; cpp/error/errno_macros
ENOTDIR =&gt; cpp/error/errno_macros
ENOTEMPTY =&gt; cpp/error/errno_macros
ENOTRECOVERABLE =&gt; cpp/error/errno_macros
ENOTSOCK =&gt; cpp/error/errno_macros
ENOTSUP =&gt; cpp/error/errno_macros
ENOTTY =&gt; cpp/error/errno_macros
ENXIO =&gt; cpp/error/errno_macros
EOPNOTSUPP =&gt; cpp/error/errno_macros
EOVERFLOW =&gt; cpp/error/errno_macros
EOWNERDEAD =&gt; cpp/error/errno_macros
EPERM =&gt; cpp/error/errno_macros
EPIPE =&gt; cpp/error/errno_macros
EPROTO =&gt; cpp/error/errno_macros
EPROTONOSUPPORT =&gt; cpp/error/errno_macros
EPROTOTYPE =&gt; cpp/error/errno_macros
ERANGE =&gt; cpp/error/errno_macros
EROFS =&gt; cpp/error/errno_macros
ESPIPE =&gt; cpp/error/errno_macros
ESRCH =&gt; cpp/error/errno_macros
ETIME =&gt; cpp/error/errno_macros
ETIMEDOUT =&gt; cpp/error/errno_macros
ETXTBSY =&gt; cpp/error/errno_macros
EWOULDBLOCK =&gt; cpp/error/errno_macros
EXDEV =&gt; cpp/error/errno_macros
std::error_category =&gt; cpp/error/error_category
std::error_category::error_category =&gt; cpp/error/error_category/error_category
std::error_category::~error_category =&gt; cpp/error/error_category/~error_category
std::error_category::name =&gt; cpp/error/error_category/name
std::error_category::default_error_condition =&gt; cpp/error/error_category/default_error_condition
std::error_category::equivalent =&gt; cpp/error/error_category/equivalent
std::error_category::message =&gt; cpp/error/error_category/message
std::error_category::operator== =&gt; cpp/error/error_category/operator_cmp
std::error_category::operator!= =&gt; cpp/error/error_category/operator_cmp
std::error_category::operator&lt; =&gt; cpp/error/error_category/operator_cmp
std::generic_category =&gt; cpp/error/generic_category
std::system_category =&gt; cpp/error/system_category
std::error_condition =&gt; cpp/error/error_condition
std::error_condition::error_condition =&gt; cpp/error/error_condition/error_condition
std::error_condition::operator= =&gt; cpp/error/error_condition/operator=
std::error_condition::assign =&gt; cpp/error/error_condition/assign
std::error_condition::clear =&gt; cpp/error/error_condition/clear
std::error_condition::value =&gt; cpp/error/error_condition/value
std::error_condition::category =&gt; cpp/error/error_condition/category
std::error_condition::message =&gt; cpp/error/error_condition/message
std::error_condition::operator bool =&gt; cpp/error/error_condition/operator_bool
operator==(std::error_condition) =&gt; cpp/error/error_condition/operator_cmp
operator!=(std::error_condition) =&gt; cpp/error/error_condition/operator_cmp
operator&lt;(std::error_condition) =&gt; cpp/error/error_condition/operator_cmp
std::is_error_condition_enum =&gt; cpp/error/error_condition/is_error_condition_enum
std::is_error_condition_enum_v =&gt; cpp/error/error_condition/is_error_condition_enum
std::error_code =&gt; cpp/error/error_code
std::error_code::error_code =&gt; cpp/error/error_code/error_code
std::error_code::operator= =&gt; cpp/error/error_code/operator=
std::error_code::assign =&gt; cpp/error/error_code/assign
std::error_code::clear =&gt; cpp/error/error_code/clear
std::error_code::value =&gt; cpp/error/error_code/value
std::error_code::category =&gt; cpp/error/error_code/category
std::error_code::default_error_condition =&gt; cpp/error/error_code/default_error_condition
std::error_code::message =&gt; cpp/error/error_code/message
std::error_code::operator bool =&gt; cpp/error/error_code/operator_bool
operator==(std::error_code) =&gt; cpp/error/error_code/operator_cmp
operator!=(std::error_code) =&gt; cpp/error/error_code/operator_cmp
operator&lt;(std::error_code) =&gt; cpp/error/error_code/operator_cmp
operator&lt;&lt;(std::error_code) =&gt; cpp/error/error_code/operator_ltlt
std::is_error_code_enum =&gt; cpp/error/error_code/is_error_code_enum
std::is_error_code_enum_v =&gt; cpp/error/error_code/is_error_code_enum
std::errc =&gt; cpp/error/errc
std::errc::address_family_not_supported =&gt; cpp/error/errc
std::errc::address_in_use =&gt; cpp/error/errc
std::errc::address_not_available =&gt; cpp/error/errc
std::errc::already_connected =&gt; cpp/error/errc
std::errc::argument_list_too_long =&gt; cpp/error/errc
std::errc::argument_out_of_domain =&gt; cpp/error/errc
std::errc::bad_address =&gt; cpp/error/errc
std::errc::bad_file_descriptor =&gt; cpp/error/errc
std::errc::bad_message =&gt; cpp/error/errc
std::errc::broken_pipe =&gt; cpp/error/errc
std::errc::connection_aborted =&gt; cpp/error/errc
std::errc::connection_already_in_progress =&gt; cpp/error/errc
std::errc::connection_refused =&gt; cpp/error/errc
std::errc::connection_reset =&gt; cpp/error/errc
std::errc::cross_device_link =&gt; cpp/error/errc
std::errc::destination_address_required =&gt; cpp/error/errc
std::errc::device_or_resource_busy =&gt; cpp/error/errc
std::errc::directory_not_empty =&gt; cpp/error/errc
std::errc::executable_format_error =&gt; cpp/error/errc
std::errc::file_exists =&gt; cpp/error/errc
std::errc::file_too_large =&gt; cpp/error/errc
std::errc::filename_too_long =&gt; cpp/error/errc
std::errc::function_not_supported =&gt; cpp/error/errc
std::errc::host_unreachable =&gt; cpp/error/errc
std::errc::identifier_removed =&gt; cpp/error/errc
std::errc::illegal_byte_sequence =&gt; cpp/error/errc
std::errc::inappropriate_io_control_operation =&gt; cpp/error/errc
std::errc::interrupted =&gt; cpp/error/errc
std::errc::invalid_argument =&gt; cpp/error/errc
std::errc::invalid_seek =&gt; cpp/error/errc
std::errc::io_error =&gt; cpp/error/errc
std::errc::is_a_directory =&gt; cpp/error/errc
std::errc::message_size =&gt; cpp/error/errc
std::errc::network_down =&gt; cpp/error/errc
std::errc::network_reset =&gt; cpp/error/errc
std::errc::network_unreachable =&gt; cpp/error/errc
std::errc::no_buffer_space =&gt; cpp/error/errc
std::errc::no_child_process =&gt; cpp/error/errc
std::errc::no_link =&gt; cpp/error/errc
std::errc::no_lock_available =&gt; cpp/error/errc
std::errc::no_message_available =&gt; cpp/error/errc
std::errc::no_message =&gt; cpp/error/errc
std::errc::no_protocol_option =&gt; cpp/error/errc
std::errc::no_space_on_device =&gt; cpp/error/errc
std::errc::no_stream_resources =&gt; cpp/error/errc
std::errc::no_such_device_or_address =&gt; cpp/error/errc
std::errc::no_such_device =&gt; cpp/error/errc
std::errc::no_such_file_or_directory =&gt; cpp/error/errc
std::errc::no_such_process =&gt; cpp/error/errc
std::errc::not_a_directory =&gt; cpp/error/errc
std::errc::not_a_socket =&gt; cpp/error/errc
std::errc::not_a_stream =&gt; cpp/error/errc
std::errc::not_connected =&gt; cpp/error/errc
std::errc::not_enough_memory =&gt; cpp/error/errc
std::errc::not_supported =&gt; cpp/error/errc
std::errc::operation_canceled =&gt; cpp/error/errc
std::errc::operation_in_progress =&gt; cpp/error/errc
std::errc::operation_not_permitted =&gt; cpp/error/errc
std::errc::operation_not_supported =&gt; cpp/error/errc
std::errc::operation_would_block =&gt; cpp/error/errc
std::errc::owner_dead =&gt; cpp/error/errc
std::errc::permission_denied =&gt; cpp/error/errc
std::errc::protocol_error =&gt; cpp/error/errc
std::errc::protocol_not_supported =&gt; cpp/error/errc
std::errc::read_only_file_system =&gt; cpp/error/errc
std::errc::resource_deadlock_would_occur =&gt; cpp/error/errc
std::errc::resource_unavailable_try_again =&gt; cpp/error/errc
std::errc::result_out_of_range =&gt; cpp/error/errc
std::errc::state_not_recoverable =&gt; cpp/error/errc
std::errc::stream_timeout =&gt; cpp/error/errc
std::errc::text_file_busy =&gt; cpp/error/errc
std::errc::timed_out =&gt; cpp/error/errc
std::errc::too_many_files_open_in_system =&gt; cpp/error/errc
std::errc::too_many_files_open =&gt; cpp/error/errc
std::errc::too_many_links =&gt; cpp/error/errc
std::errc::too_many_symbolic_link_levels =&gt; cpp/error/errc
std::errc::value_too_large =&gt; cpp/error/errc
std::errc::wrong_protocol_type =&gt; cpp/error/errc
std::is_error_condition_enum&lt;std::errc&gt; =&gt; cpp/error/errc/is_error_condition_enum
std::make_error_code(std::errc) =&gt; cpp/error/errc/make_error_code
std::make_error_condition(std::errc) =&gt; cpp/error/errc/make_error_condition
std::system_error =&gt; cpp/error/system_error
std::system_error::what =&gt; cpp/error/exception/what
std::system_error::system_error =&gt; cpp/error/system_error/system_error
std::system_error::code =&gt; cpp/error/system_error/code
std::system_error::what =&gt; cpp/error/system_error/what
std::initializer_list =&gt; cpp/utility/initializer_list
std::initializer_list::initializer_list =&gt; cpp/utility/initializer_list/initializer_list
std::initializer_list::size =&gt; cpp/utility/initializer_list/size
std::initializer_list::begin =&gt; cpp/utility/initializer_list/begin
std::initializer_list::end =&gt; cpp/utility/initializer_list/end
std::begin(std::initializer_list) =&gt; cpp/utility/initializer_list/begin2
std::end(std::initializer_list) =&gt; cpp/utility/initializer_list/end2
va_start =&gt; cpp/utility/variadic/va_start
va_copy =&gt; cpp/utility/variadic/va_copy
va_arg =&gt; cpp/utility/variadic/va_arg
va_end =&gt; cpp/utility/variadic/va_end
va_list =&gt; cpp/utility/variadic/va_list
std::abort =&gt; cpp/utility/program/abort
std::exit =&gt; cpp/utility/program/exit
std::quick_exit =&gt; cpp/utility/program/quick_exit
std::_Exit =&gt; cpp/utility/program/_Exit
std::atexit =&gt; cpp/utility/program/atexit
std::at_quick_exit =&gt; cpp/utility/program/at_quick_exit
EXIT_SUCCESS =&gt; cpp/utility/program/EXIT_status
EXIT_FAILURE =&gt; cpp/utility/program/EXIT_status
std::system =&gt; cpp/utility/program/system
std::getenv =&gt; cpp/utility/program/getenv
std::signal =&gt; cpp/utility/program/signal
std::raise =&gt; cpp/utility/program/raise
std::sig_atomic_t =&gt; cpp/utility/program/sig_atomic_t
SIG_DFL =&gt; cpp/utility/program/SIG_strategies
SIG_IGN =&gt; cpp/utility/program/SIG_strategies
SIG_ERR =&gt; cpp/utility/program/SIG_ERR
SIGABRT =&gt; cpp/utility/program/SIG_types
SIGFPE =&gt; cpp/utility/program/SIG_types
SIGILL =&gt; cpp/utility/program/SIG_types
SIGINT =&gt; cpp/utility/program/SIG_types
SIGSEGV =&gt; cpp/utility/program/SIG_types
SIGTERM =&gt; cpp/utility/program/SIG_types
std::longjmp =&gt; cpp/utility/program/longjmp
setjmp =&gt; cpp/utility/program/setjmp
std::jmp_buf =&gt; cpp/utility/program/jmp_buf
std::chrono::time_point =&gt; cpp/chrono/time_point
std::chrono::time_point::time_point =&gt; cpp/chrono/time_point/time_point
std::chrono::time_point::time_since_epoch =&gt; cpp/chrono/time_point/time_since_epoch
std::chrono::time_point::min =&gt; cpp/chrono/time_point/min
std::chrono::time_point::max =&gt; cpp/chrono/time_point/max
std::chrono::time_point::operator+ =&gt; cpp/chrono/time_point/operator_arith
std::chrono::time_point::operator- =&gt; cpp/chrono/time_point/operator_arith
operator+(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_arith2
operator-(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_arith2
operator==(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_cmp
operator!=(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_cmp
operator&lt;(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_cmp
operator&lt;=(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_cmp
operator&gt;(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_cmp
operator&gt;=(std::chrono::time_point) =&gt; cpp/chrono/time_point/operator_cmp
std::chrono::floor(std::chrono::time_point) =&gt; cpp/chrono/time_point/floor
std::chrono::ceil(std::chrono::time_point) =&gt; cpp/chrono/time_point/ceil
std::chrono::round(std::chrono::time_point) =&gt; cpp/chrono/time_point/round
std::common_type&lt;std::chrono::time_point&gt; =&gt; cpp/chrono/time_point/common_type
std::chrono::time_point_cast =&gt; cpp/chrono/time_point/time_point_cast
std::chrono::duration =&gt; cpp/chrono/duration
std::chrono::duration::duration =&gt; cpp/chrono/duration/duration
std::chrono::duration::operator= =&gt; cpp/chrono/duration/operator=
std::chrono::duration::count =&gt; cpp/chrono/duration/count
std::chrono::duration::zero =&gt; cpp/chrono/duration/zero
std::chrono::duration::min =&gt; cpp/chrono/duration/min
std::chrono::duration::max =&gt; cpp/chrono/duration/max
std::chrono::duration::operator+ =&gt; cpp/chrono/duration/operator_arith
std::chrono::duration::operator- =&gt; cpp/chrono/duration/operator_arith
std::chrono::duration::operator++ =&gt; cpp/chrono/duration/operator_arith2
std::chrono::duration::operator++(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::duration::operator-- =&gt; cpp/chrono/duration/operator_arith2
std::chrono::duration::operator--(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::duration::operator+= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::duration::operator-= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::duration::operator*= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::duration::operator/= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::duration::operator%= =&gt; cpp/chrono/duration/operator_arith3
operator+(std::chrono::duration) =&gt; cpp/chrono/duration/operator_arith4
operator-(std::chrono::duration) =&gt; cpp/chrono/duration/operator_arith4
operator*(std::chrono::duration) =&gt; cpp/chrono/duration/operator_arith4
operator/(std::chrono::duration) =&gt; cpp/chrono/duration/operator_arith4
operator%(std::chrono::duration) =&gt; cpp/chrono/duration/operator_arith4
operator==(std::chrono::duration) =&gt; cpp/chrono/duration/operator_cmp
operator!=(std::chrono::duration) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;(std::chrono::duration) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;=(std::chrono::duration) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;(std::chrono::duration) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;=(std::chrono::duration) =&gt; cpp/chrono/duration/operator_cmp
std::chrono::floor(std::chrono::duration) =&gt; cpp/chrono/duration/floor
std::chrono::ceil(std::chrono::duration) =&gt; cpp/chrono/duration/ceil
std::chrono::round(std::chrono::duration) =&gt; cpp/chrono/duration/round
std::chrono::abs(std::chrono::duration) =&gt; cpp/chrono/duration/abs
std::common_type&lt;std::chrono::duration&gt; =&gt; cpp/chrono/duration/common_type
std::chrono::nanoseconds =&gt; cpp/chrono/duration
std::chrono::nanoseconds::nanoseconds =&gt; cpp/chrono/duration/duration
std::chrono::nanoseconds::operator= =&gt; cpp/chrono/duration/operator=
std::chrono::nanoseconds::count =&gt; cpp/chrono/duration/count
std::chrono::nanoseconds::zero =&gt; cpp/chrono/duration/zero
std::chrono::nanoseconds::min =&gt; cpp/chrono/duration/min
std::chrono::nanoseconds::max =&gt; cpp/chrono/duration/max
std::chrono::nanoseconds::operator+ =&gt; cpp/chrono/duration/operator_arith
std::chrono::nanoseconds::operator- =&gt; cpp/chrono/duration/operator_arith
std::chrono::nanoseconds::operator++ =&gt; cpp/chrono/duration/operator_arith2
std::chrono::nanoseconds::operator++(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::nanoseconds::operator-- =&gt; cpp/chrono/duration/operator_arith2
std::chrono::nanoseconds::operator--(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::nanoseconds::operator+= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::nanoseconds::operator-= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::nanoseconds::operator*= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::nanoseconds::operator/= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::nanoseconds::operator%= =&gt; cpp/chrono/duration/operator_arith3
operator+(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_arith4
operator-(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_arith4
operator*(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_arith4
operator/(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_arith4
operator%(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_arith4
operator==(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_cmp
operator!=(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;=(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;=(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/operator_cmp
std::chrono::floor(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/floor
std::chrono::ceil(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/ceil
std::chrono::round(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/round
std::chrono::abs(std::chrono::nanoseconds) =&gt; cpp/chrono/duration/abs
std::common_type&lt;std::chrono::nanoseconds&gt; =&gt; cpp/chrono/duration/common_type
std::chrono::microseconds =&gt; cpp/chrono/duration
std::chrono::microseconds::microseconds =&gt; cpp/chrono/duration/duration
std::chrono::microseconds::operator= =&gt; cpp/chrono/duration/operator=
std::chrono::microseconds::count =&gt; cpp/chrono/duration/count
std::chrono::microseconds::zero =&gt; cpp/chrono/duration/zero
std::chrono::microseconds::min =&gt; cpp/chrono/duration/min
std::chrono::microseconds::max =&gt; cpp/chrono/duration/max
std::chrono::microseconds::operator+ =&gt; cpp/chrono/duration/operator_arith
std::chrono::microseconds::operator- =&gt; cpp/chrono/duration/operator_arith
std::chrono::microseconds::operator++ =&gt; cpp/chrono/duration/operator_arith2
std::chrono::microseconds::operator++(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::microseconds::operator-- =&gt; cpp/chrono/duration/operator_arith2
std::chrono::microseconds::operator--(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::microseconds::operator+= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::microseconds::operator-= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::microseconds::operator*= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::microseconds::operator/= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::microseconds::operator%= =&gt; cpp/chrono/duration/operator_arith3
operator+(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_arith4
operator-(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_arith4
operator*(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_arith4
operator/(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_arith4
operator%(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_arith4
operator==(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_cmp
operator!=(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;=(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;=(std::chrono::microseconds) =&gt; cpp/chrono/duration/operator_cmp
std::chrono::floor(std::chrono::microseconds) =&gt; cpp/chrono/duration/floor
std::chrono::ceil(std::chrono::microseconds) =&gt; cpp/chrono/duration/ceil
std::chrono::round(std::chrono::microseconds) =&gt; cpp/chrono/duration/round
std::chrono::abs(std::chrono::microseconds) =&gt; cpp/chrono/duration/abs
std::common_type&lt;std::chrono::microseconds&gt; =&gt; cpp/chrono/duration/common_type
std::chrono::milliseconds =&gt; cpp/chrono/duration
std::chrono::milliseconds::milliseconds =&gt; cpp/chrono/duration/duration
std::chrono::milliseconds::operator= =&gt; cpp/chrono/duration/operator=
std::chrono::milliseconds::count =&gt; cpp/chrono/duration/count
std::chrono::milliseconds::zero =&gt; cpp/chrono/duration/zero
std::chrono::milliseconds::min =&gt; cpp/chrono/duration/min
std::chrono::milliseconds::max =&gt; cpp/chrono/duration/max
std::chrono::milliseconds::operator+ =&gt; cpp/chrono/duration/operator_arith
std::chrono::milliseconds::operator- =&gt; cpp/chrono/duration/operator_arith
std::chrono::milliseconds::operator++ =&gt; cpp/chrono/duration/operator_arith2
std::chrono::milliseconds::operator++(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::milliseconds::operator-- =&gt; cpp/chrono/duration/operator_arith2
std::chrono::milliseconds::operator--(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::milliseconds::operator+= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::milliseconds::operator-= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::milliseconds::operator*= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::milliseconds::operator/= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::milliseconds::operator%= =&gt; cpp/chrono/duration/operator_arith3
operator+(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_arith4
operator-(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_arith4
operator*(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_arith4
operator/(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_arith4
operator%(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_arith4
operator==(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_cmp
operator!=(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;=(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;=(std::chrono::milliseconds) =&gt; cpp/chrono/duration/operator_cmp
std::chrono::floor(std::chrono::milliseconds) =&gt; cpp/chrono/duration/floor
std::chrono::ceil(std::chrono::milliseconds) =&gt; cpp/chrono/duration/ceil
std::chrono::round(std::chrono::milliseconds) =&gt; cpp/chrono/duration/round
std::chrono::abs(std::chrono::milliseconds) =&gt; cpp/chrono/duration/abs
std::common_type&lt;std::chrono::milliseconds&gt; =&gt; cpp/chrono/duration/common_type
std::chrono::seconds =&gt; cpp/chrono/duration
std::chrono::seconds::seconds =&gt; cpp/chrono/duration/duration
std::chrono::seconds::operator= =&gt; cpp/chrono/duration/operator=
std::chrono::seconds::count =&gt; cpp/chrono/duration/count
std::chrono::seconds::zero =&gt; cpp/chrono/duration/zero
std::chrono::seconds::min =&gt; cpp/chrono/duration/min
std::chrono::seconds::max =&gt; cpp/chrono/duration/max
std::chrono::seconds::operator+ =&gt; cpp/chrono/duration/operator_arith
std::chrono::seconds::operator- =&gt; cpp/chrono/duration/operator_arith
std::chrono::seconds::operator++ =&gt; cpp/chrono/duration/operator_arith2
std::chrono::seconds::operator++(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::seconds::operator-- =&gt; cpp/chrono/duration/operator_arith2
std::chrono::seconds::operator--(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::seconds::operator+= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::seconds::operator-= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::seconds::operator*= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::seconds::operator/= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::seconds::operator%= =&gt; cpp/chrono/duration/operator_arith3
operator+(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_arith4
operator-(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_arith4
operator*(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_arith4
operator/(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_arith4
operator%(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_arith4
operator==(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_cmp
operator!=(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;=(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;=(std::chrono::seconds) =&gt; cpp/chrono/duration/operator_cmp
std::chrono::floor(std::chrono::seconds) =&gt; cpp/chrono/duration/floor
std::chrono::ceil(std::chrono::seconds) =&gt; cpp/chrono/duration/ceil
std::chrono::round(std::chrono::seconds) =&gt; cpp/chrono/duration/round
std::chrono::abs(std::chrono::seconds) =&gt; cpp/chrono/duration/abs
std::common_type&lt;std::chrono::seconds&gt; =&gt; cpp/chrono/duration/common_type
std::chrono::minutes =&gt; cpp/chrono/duration
std::chrono::minutes::minutes =&gt; cpp/chrono/duration/duration
std::chrono::minutes::operator= =&gt; cpp/chrono/duration/operator=
std::chrono::minutes::count =&gt; cpp/chrono/duration/count
std::chrono::minutes::zero =&gt; cpp/chrono/duration/zero
std::chrono::minutes::min =&gt; cpp/chrono/duration/min
std::chrono::minutes::max =&gt; cpp/chrono/duration/max
std::chrono::minutes::operator+ =&gt; cpp/chrono/duration/operator_arith
std::chrono::minutes::operator- =&gt; cpp/chrono/duration/operator_arith
std::chrono::minutes::operator++ =&gt; cpp/chrono/duration/operator_arith2
std::chrono::minutes::operator++(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::minutes::operator-- =&gt; cpp/chrono/duration/operator_arith2
std::chrono::minutes::operator--(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::minutes::operator+= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::minutes::operator-= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::minutes::operator*= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::minutes::operator/= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::minutes::operator%= =&gt; cpp/chrono/duration/operator_arith3
operator+(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_arith4
operator-(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_arith4
operator*(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_arith4
operator/(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_arith4
operator%(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_arith4
operator==(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_cmp
operator!=(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;=(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;=(std::chrono::minutes) =&gt; cpp/chrono/duration/operator_cmp
std::chrono::floor(std::chrono::minutes) =&gt; cpp/chrono/duration/floor
std::chrono::ceil(std::chrono::minutes) =&gt; cpp/chrono/duration/ceil
std::chrono::round(std::chrono::minutes) =&gt; cpp/chrono/duration/round
std::chrono::abs(std::chrono::minutes) =&gt; cpp/chrono/duration/abs
std::common_type&lt;std::chrono::minutes&gt; =&gt; cpp/chrono/duration/common_type
std::chrono::hours =&gt; cpp/chrono/duration
std::chrono::hours::hours =&gt; cpp/chrono/duration/duration
std::chrono::hours::operator= =&gt; cpp/chrono/duration/operator=
std::chrono::hours::count =&gt; cpp/chrono/duration/count
std::chrono::hours::zero =&gt; cpp/chrono/duration/zero
std::chrono::hours::min =&gt; cpp/chrono/duration/min
std::chrono::hours::max =&gt; cpp/chrono/duration/max
std::chrono::hours::operator+ =&gt; cpp/chrono/duration/operator_arith
std::chrono::hours::operator- =&gt; cpp/chrono/duration/operator_arith
std::chrono::hours::operator++ =&gt; cpp/chrono/duration/operator_arith2
std::chrono::hours::operator++(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::hours::operator-- =&gt; cpp/chrono/duration/operator_arith2
std::chrono::hours::operator--(int) =&gt; cpp/chrono/duration/operator_arith2
std::chrono::hours::operator+= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::hours::operator-= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::hours::operator*= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::hours::operator/= =&gt; cpp/chrono/duration/operator_arith3
std::chrono::hours::operator%= =&gt; cpp/chrono/duration/operator_arith3
operator+(std::chrono::hours) =&gt; cpp/chrono/duration/operator_arith4
operator-(std::chrono::hours) =&gt; cpp/chrono/duration/operator_arith4
operator*(std::chrono::hours) =&gt; cpp/chrono/duration/operator_arith4
operator/(std::chrono::hours) =&gt; cpp/chrono/duration/operator_arith4
operator%(std::chrono::hours) =&gt; cpp/chrono/duration/operator_arith4
operator==(std::chrono::hours) =&gt; cpp/chrono/duration/operator_cmp
operator!=(std::chrono::hours) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;(std::chrono::hours) =&gt; cpp/chrono/duration/operator_cmp
operator&lt;=(std::chrono::hours) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;(std::chrono::hours) =&gt; cpp/chrono/duration/operator_cmp
operator&gt;=(std::chrono::hours) =&gt; cpp/chrono/duration/operator_cmp
std::chrono::floor(std::chrono::hours) =&gt; cpp/chrono/duration/floor
std::chrono::ceil(std::chrono::hours) =&gt; cpp/chrono/duration/ceil
std::chrono::round(std::chrono::hours) =&gt; cpp/chrono/duration/round
std::chrono::abs(std::chrono::hours) =&gt; cpp/chrono/duration/abs
std::common_type&lt;std::chrono::hours&gt; =&gt; cpp/chrono/duration/common_type
std::chrono::duration_cast =&gt; cpp/chrono/duration/duration_cast
std::chrono::treat_as_floating_point =&gt; cpp/chrono/treat_as_floating_point
std::chrono::treat_as_floating_point =&gt; cpp/chrono/treat_as_floating_point
std::chrono::duration_values =&gt; cpp/chrono/duration_values
std::chrono::duration_values::zero =&gt; cpp/chrono/duration_values/zero
std::chrono::duration_values::min =&gt; cpp/chrono/duration_values/min
std::chrono::duration_values::max =&gt; cpp/chrono/duration_values/max
std::chrono::system_clock =&gt; cpp/chrono/system_clock
std::chrono::system_clock::is_steady =&gt; cpp/chrono/system_clock
std::chrono::system_clock::now =&gt; cpp/chrono/system_clock/now
std::chrono::system_clock::to_time_t =&gt; cpp/chrono/system_clock/to_time_t
std::chrono::system_clock::from_time_t =&gt; cpp/chrono/system_clock/from_time_t
std::chrono::steady_clock =&gt; cpp/chrono/steady_clock
std::chrono::steady_clock::is_steady =&gt; cpp/chrono/steady_clock
std::chrono::steady_clock::now =&gt; cpp/chrono/steady_clock/now
std::chrono::high_resolution_clock =&gt; cpp/chrono/high_resolution_clock
std::chrono::high_resolution_clock::is_steady =&gt; cpp/chrono/high_resolution_clock
std::chrono::high_resolution_clock::now =&gt; cpp/chrono/high_resolution_clock/now
std::difftime =&gt; cpp/chrono/c/difftime
std::time =&gt; cpp/chrono/c/time
std::clock =&gt; cpp/chrono/c/clock
std::timespec_get =&gt; cpp/chrono/c/timespec_get
TIME_UTC =&gt; cpp/chrono/c/timespec_get
std::asctime =&gt; cpp/chrono/c/asctime
std::ctime =&gt; cpp/chrono/c/ctime
std::strftime =&gt; cpp/chrono/c/strftime
std::wcsftime =&gt; cpp/chrono/c/wcsftime
std::gmtime =&gt; cpp/chrono/c/gmtime
std::localtime =&gt; cpp/chrono/c/localtime
std::mktime =&gt; cpp/chrono/c/mktime
CLOCKS_PER_SEC =&gt; cpp/chrono/c/CLOCKS_PER_SEC
std::tm =&gt; cpp/chrono/c/tm
std::time_t =&gt; cpp/chrono/c/time_t
std::clock_t =&gt; cpp/chrono/c/clock_t
std::timespec =&gt; cpp/chrono/c/timespec
std::bitset =&gt; cpp/utility/bitset
std::bitset::bitset =&gt; cpp/utility/bitset/bitset
std::bitset::reference =&gt; cpp/utility/bitset/reference
std::bitset::operator== =&gt; cpp/utility/bitset/operator_cmp
std::bitset::operator!= =&gt; cpp/utility/bitset/operator_cmp
std::bitset::operator[] =&gt; cpp/utility/bitset/operator_at
std::bitset::test =&gt; cpp/utility/bitset/test
std::bitset::all =&gt; cpp/utility/bitset/all_any_none
std::bitset::any =&gt; cpp/utility/bitset/all_any_none
std::bitset::none =&gt; cpp/utility/bitset/all_any_none
std::bitset::count =&gt; cpp/utility/bitset/count
std::bitset::size =&gt; cpp/utility/bitset/size
std::bitset::operator&amp;= =&gt; cpp/utility/bitset/operator_logic
std::bitset::operator|= =&gt; cpp/utility/bitset/operator_logic
std::bitset::operator^= =&gt; cpp/utility/bitset/operator_logic
std::bitset::operator~ =&gt; cpp/utility/bitset/operator_logic
std::bitset::operator&lt;&lt;= =&gt; cpp/utility/bitset/operator_ltltgtgt
std::bitset::operator&gt;&gt;= =&gt; cpp/utility/bitset/operator_ltltgtgt
std::bitset::operator&lt;&lt; =&gt; cpp/utility/bitset/operator_ltltgtgt
std::bitset::operator&gt;&gt; =&gt; cpp/utility/bitset/operator_ltltgtgt
std::bitset::set =&gt; cpp/utility/bitset/set
std::bitset::reset =&gt; cpp/utility/bitset/reset
std::bitset::flip =&gt; cpp/utility/bitset/flip
std::bitset::to_string =&gt; cpp/utility/bitset/to_string
std::bitset::to_ulong =&gt; cpp/utility/bitset/to_ulong
std::bitset::to_ullong =&gt; cpp/utility/bitset/to_ullong
operator&amp;(std::bitset) =&gt; cpp/utility/bitset/operator_logic2
operator|(std::bitset) =&gt; cpp/utility/bitset/operator_logic2
operator^(std::bitset) =&gt; cpp/utility/bitset/operator_logic2
operator&lt;&lt;(std::bitset) =&gt; cpp/utility/bitset/operator_ltltgtgt2
operator&gt;&gt;(std::bitset) =&gt; cpp/utility/bitset/operator_ltltgtgt2
std::hash&lt;std::bitset&gt; =&gt; cpp/utility/bitset/hash
std::plus =&gt; cpp/utility/functional/plus
std::plus::operator() =&gt; cpp/utility/functional/plus
std::minus =&gt; cpp/utility/functional/minus
std::minus::operator() =&gt; cpp/utility/functional/minus
std::multiplies =&gt; cpp/utility/functional/multiplies
std::multiplies::operator() =&gt; cpp/utility/functional/multiplies
std::divides =&gt; cpp/utility/functional/divides
std::divides::operator() =&gt; cpp/utility/functional/divides
std::modulus =&gt; cpp/utility/functional/modulus
std::modulus::operator() =&gt; cpp/utility/functional/modulus
std::negate =&gt; cpp/utility/functional/negate
std::negate::operator() =&gt; cpp/utility/functional/negate
std::equal_to =&gt; cpp/utility/functional/equal_to
std::equal_to::operator() =&gt; cpp/utility/functional/equal_to
std::not_equal_to =&gt; cpp/utility/functional/not_equal_to
std::not_equal_to::operator() =&gt; cpp/utility/functional/not_equal_to
std::greater =&gt; cpp/utility/functional/greater
std::greater::operator() =&gt; cpp/utility/functional/greater
std::greater_equal =&gt; cpp/utility/functional/greater_equal
std::greater_equal::operator() =&gt; cpp/utility/functional/greater_equal
std::less =&gt; cpp/utility/functional/less
std::less::operator() =&gt; cpp/utility/functional/less
std::less_equal =&gt; cpp/utility/functional/less_equal
std::less_equal::operator() =&gt; cpp/utility/functional/less_equal
std::logical_and =&gt; cpp/utility/functional/logical_and
std::logical_and::operator() =&gt; cpp/utility/functional/logical_and
std::logical_or =&gt; cpp/utility/functional/logical_or
std::logical_or::operator() =&gt; cpp/utility/functional/logical_or
std::logical_not =&gt; cpp/utility/functional/logical_not
std::logical_not::operator() =&gt; cpp/utility/functional/logical_not
std::bit_and =&gt; cpp/utility/functional/bit_and
std::bit_and::operator() =&gt; cpp/utility/functional/bit_and
std::bit_or =&gt; cpp/utility/functional/bit_or
std::bit_or::operator() =&gt; cpp/utility/functional/bit_or
std::bit_not =&gt; cpp/utility/functional/bit_not
std::bit_not::operator() =&gt; cpp/utility/functional/bit_not
std::unary_negate =&gt; cpp/utility/functional/unary_negate
std::unary_negate::unary_negate =&gt; cpp/utility/functional/unary_negate
std::unary_negate::operator() =&gt; cpp/utility/functional/unary_negate
std::binary_negate =&gt; cpp/utility/functional/binary_negate
std::binary_negate::binary_negate =&gt; cpp/utility/functional/binary_negate
std::binary_negate::operator() =&gt; cpp/utility/functional/binary_negate
std::not_fn =&gt; cpp/utility/functional/not_fn
std::not1 =&gt; cpp/utility/functional/not1
std::not2 =&gt; cpp/utility/functional/not2
std::bind =&gt; cpp/utility/functional/bind
std::is_bind_expression =&gt; cpp/utility/functional/is_bind_expression
std::is_placeholder =&gt; cpp/utility/functional/is_placeholder
std::is_bind_expression_v =&gt; cpp/utility/functional/is_bind_expression
std::is_placeholder_v =&gt; cpp/utility/functional/is_placeholder
std::mem_fn =&gt; cpp/utility/functional/mem_fn
std::invoke =&gt; cpp/utility/functional/invoke
std::function =&gt; cpp/utility/functional/function
std::function::function =&gt; cpp/utility/functional/function/function
std::function::~function =&gt; cpp/utility/functional/function/~function
std::function::operator= =&gt; cpp/utility/functional/function/operator=
std::function::swap =&gt; cpp/utility/functional/function/swap
std::function::assign =&gt; cpp/utility/functional/function/assign
std::function::operator bool =&gt; cpp/utility/functional/function/operator_bool
std::function::operator() =&gt; cpp/utility/functional/function/operator()
std::function::target_type =&gt; cpp/utility/functional/function/target_type
std::function::target =&gt; cpp/utility/functional/function/target
std::swap(std::function) =&gt; cpp/utility/functional/function/swap
operator==(std::function) =&gt; cpp/utility/functional/function/operator_cmp
operator!=(std::function) =&gt; cpp/utility/functional/function/operator_cmp
std::uses_allocator&lt;std::function&gt; =&gt; cpp/utility/functional/function/uses_allocator
std::bad_function_call =&gt; cpp/utility/functional/bad_function_call
std::bad_function_call::what =&gt; cpp/error/exception/what
std::bad_function_call::bad_function_call =&gt; cpp/utility/functional/bad_function_call
std::bad_function_call::what =&gt; cpp/utility/functional/bad_function_call
std::placeholders =&gt; cpp/utility/functional/placeholders
std::default_searcher =&gt; cpp/utility/functional/default_searcher
std::default_searcher::default_searcher =&gt; cpp/utility/functional/default_searcher
std::boyer_moore_searcher =&gt; cpp/utility/functional/boyer_moore_searcher
std::boyer_moore_searcher::boyer_moore_searcher =&gt; cpp/utility/functional/boyer_moore_searcher
std::boyer_moore_horspool_searcher =&gt; cpp/utility/functional/boyer_moore_horspool_searcher
std::boyer_moore_horspool_searcher::boyer_moore_horspool_searcher =&gt; cpp/utility/functional/boyer_moore_horspool_searcher
std::make_default_searcher =&gt; cpp/utility/functional/default_searcher
std::make_boyer_moore_searcher =&gt; cpp/utility/functional/boyer_moore_searcher
std::make_boyer_moore_horspool_searcher =&gt; cpp/utility/functional/boyer_moore_horspool_searcher
std::reference_wrapper =&gt; cpp/utility/functional/reference_wrapper
std::reference_wrapper::reference_wrapper =&gt; cpp/utility/functional/reference_wrapper/reference_wrapper
std::reference_wrapper::operator= =&gt; cpp/utility/functional/reference_wrapper/operator=
std::reference_wrapper::operator T&amp; =&gt; cpp/utility/functional/reference_wrapper/get
std::reference_wrapper::get =&gt; cpp/utility/functional/reference_wrapper/get
std::reference_wrapper::operator() =&gt; cpp/utility/functional/reference_wrapper/operator()
std::ref =&gt; cpp/utility/functional/ref
std::cref =&gt; cpp/utility/functional/ref
std::any =&gt; cpp/utility/any
std::any::any =&gt; cpp/utility/any/any
std::any::~any =&gt; cpp/utility/any/~any
std::any::operator= =&gt; cpp/utility/any/operator=
std::any::emplace =&gt; cpp/utility/any/emplace
std::any::reset =&gt; cpp/utility/any/reset
std::any::swap =&gt; cpp/utility/any/swap
std::any::has_value =&gt; cpp/utility/any/has_value
std::any::type =&gt; cpp/utility/any/type
std::swap(std::any) =&gt; cpp/utility/any/swap2
std::any_cast =&gt; cpp/utility/any/any_cast
std::make_any =&gt; cpp/utility/any/make_any
std::bad_any_cast =&gt; cpp/utility/any/bad_any_cast
std::optional =&gt; cpp/utility/optional
std::optional::optional =&gt; cpp/utility/optional/optional
std::optional::~optional =&gt; cpp/utility/optional/~optional
std::optional::operator= =&gt; cpp/utility/optional/operator=
std::optional::operator* =&gt; cpp/utility/optional/operator*
std::optional::operator-&gt; =&gt; cpp/utility/optional/operator*
std::optional::operator bool =&gt; cpp/utility/optional/operator_bool
std::optional::has_value =&gt; cpp/utility/optional/operator_bool
std::optional::value =&gt; cpp/utility/optional/value
std::optional::value_or =&gt; cpp/utility/optional/value_or
std::optional::swap =&gt; cpp/utility/optional/swap
std::optional::reset =&gt; cpp/utility/optional/reset
std::optional::emplace =&gt; cpp/utility/optional/emplace
operator==(std::optional) =&gt; cpp/utility/optional/operator_cmp
operator!=(std::optional) =&gt; cpp/utility/optional/operator_cmp
operator&lt;(std::optional) =&gt; cpp/utility/optional/operator_cmp
operator&lt;=(std::optional) =&gt; cpp/utility/optional/operator_cmp
operator&gt;(std::optional) =&gt; cpp/utility/optional/operator_cmp
operator&gt;=(std::optional) =&gt; cpp/utility/optional/operator_cmp
std::swap(std::optional) =&gt; cpp/utility/optional/swap2
std::hash&lt;std::optional&gt; =&gt; cpp/utility/optional/hash
std::make_optional =&gt; cpp/utility/optional/make_optional
std::bad_optional_access =&gt; cpp/utility/optional/bad_optional_access
std::nullopt_t =&gt; cpp/utility/optional/nullopt_t
std::nullopt =&gt; cpp/utility/optional/nullopt
std::in_place_tag =&gt; cpp/utility/in_place_tag
std::in_place =&gt; cpp/utility/in_place
std::in_place_t =&gt; cpp/utility/in_place
std::in_place_type_t =&gt; cpp/utility/in_place
std::in_place_index_t =&gt; cpp/utility/in_place
std::variant =&gt; cpp/utility/variant
std::variant::variant =&gt; cpp/utility/variant/variant
std::variant::~variant =&gt; cpp/utility/variant/~variant
std::variant::operator= =&gt; cpp/utility/variant/operator=
std::variant::index =&gt; cpp/utility/variant/index
std::variant::valueless_by_exception =&gt; cpp/utility/variant/valueless_by_exception
std::variant::swap =&gt; cpp/utility/variant/swap
std::variant::emplace =&gt; cpp/utility/variant/emplace
operator==(std::variant) =&gt; cpp/utility/variant/operator_cmp
operator!=(std::variant) =&gt; cpp/utility/variant/operator_cmp
operator&lt;(std::variant) =&gt; cpp/utility/variant/operator_cmp
operator&lt;=(std::variant) =&gt; cpp/utility/variant/operator_cmp
operator&gt;(std::variant) =&gt; cpp/utility/variant/operator_cmp
operator&gt;=(std::variant) =&gt; cpp/utility/variant/operator_cmp
std::swap(std::variant) =&gt; cpp/utility/variant/swap2
std::get(std::variant) =&gt; cpp/utility/variant/get
std::hash&lt;std::variant&gt; =&gt; cpp/utility/variant/hash
std::uses_allocator&lt;std::variant&gt; =&gt; cpp/utility/variant/uses_allocator
std::visit =&gt; cpp/utility/variant/visit
std::holds_alternative =&gt; cpp/utility/variant/holds_alternative
std::get_if =&gt; cpp/utility/variant/get_if
std::bad_variant_access =&gt; cpp/utility/variant/bad_variant_access
std::variant_npos =&gt; cpp/utility/variant/variant_npos
std::variant_size =&gt; cpp/utility/variant/variant_size
std::variant_size_v =&gt; cpp/utility/variant/variant_size
std::variant_alternative =&gt; cpp/utility/variant/variant_alternative
std::variant_alternative_t =&gt; cpp/utility/variant/variant_alternative
std::monostate =&gt; cpp/utility/variant/monostate
std::monostate::monostate =&gt; cpp/utility/variant/monostate/monostate
std::monostate::~monostate =&gt; cpp/utility/variant/monostate/~monostate
std::monostate::operator= =&gt; cpp/utility/variant/monostate/operator=
operator==(std::monostate) =&gt; cpp/utility/variant/monostate/operator_cmp
operator!=(std::monostate) =&gt; cpp/utility/variant/monostate/operator_cmp
operator&lt;(std::monostate) =&gt; cpp/utility/variant/monostate/operator_cmp
operator&lt;=(std::monostate) =&gt; cpp/utility/variant/monostate/operator_cmp
operator&gt;(std::monostate) =&gt; cpp/utility/variant/monostate/operator_cmp
operator&gt;=(std::monostate) =&gt; cpp/utility/variant/monostate/operator_cmp
std::hash&lt;std::monostate&gt; =&gt; cpp/utility/variant/monostate/hash
std::pair =&gt; cpp/utility/pair
std::pair::pair =&gt; cpp/utility/pair/pair
std::pair::first =&gt; cpp/utility/pair
std::pair::second =&gt; cpp/utility/pair
std::pair::operator= =&gt; cpp/utility/pair/operator=
std::pair::swap =&gt; cpp/utility/pair/swap
operator==(std::pair) =&gt; cpp/utility/pair/operator_cmp
operator!=(std::pair) =&gt; cpp/utility/pair/operator_cmp
operator&lt;(std::pair) =&gt; cpp/utility/pair/operator_cmp
operator&lt;=(std::pair) =&gt; cpp/utility/pair/operator_cmp
operator&gt;(std::pair) =&gt; cpp/utility/pair/operator_cmp
operator&gt;=(std::pair) =&gt; cpp/utility/pair/operator_cmp
std::swap(std::pair) =&gt; cpp/utility/pair/swap2
std::get(std::pair) =&gt; cpp/utility/pair/get
std::tuple_size&lt;std::pair&gt; =&gt; cpp/utility/pair/tuple_size
std::tuple_element&lt;std::pair&gt; =&gt; cpp/utility/pair/tuple_element
std::make_pair =&gt; cpp/utility/pair/make_pair
std::tuple =&gt; cpp/utility/tuple
std::tuple::tuple =&gt; cpp/utility/tuple/tuple
std::tuple::operator= =&gt; cpp/utility/tuple/operator=
std::tuple::swap =&gt; cpp/utility/tuple/swap
operator==(std::tuple) =&gt; cpp/utility/tuple/operator_cmp
operator!=(std::tuple) =&gt; cpp/utility/tuple/operator_cmp
operator&lt;(std::tuple) =&gt; cpp/utility/tuple/operator_cmp
operator&lt;=(std::tuple) =&gt; cpp/utility/tuple/operator_cmp
operator&gt;(std::tuple) =&gt; cpp/utility/tuple/operator_cmp
operator&gt;=(std::tuple) =&gt; cpp/utility/tuple/operator_cmp
std::swap(std::tuple) =&gt; cpp/utility/tuple/swap2
std::get(std::tuple) =&gt; cpp/utility/tuple/get
std::tuple_size&lt;std::tuple&gt; =&gt; cpp/utility/tuple/tuple_size
std::tuple_element&lt;std::tuple&gt; =&gt; cpp/utility/tuple/tuple_element
std::uses_allocator&lt;std::tuple&gt; =&gt; cpp/utility/tuple/uses_allocator
std::tuple_size_v =&gt; cpp/utility/tuple/tuple_size
std::apply =&gt; cpp/utility/apply
std::make_from_tuple =&gt; cpp/utility/make_from_tuple
std::piecewise_construct_t =&gt; cpp/utility/piecewise_construct_t
std::piecewise_construct =&gt; cpp/utility/piecewise_construct
std::integer_sequence =&gt; cpp/utility/integer_sequence
std::index_sequence =&gt; cpp/utility/integer_sequence
std::make_integer_sequence =&gt; cpp/utility/integer_sequence
std::make_index_sequence =&gt; cpp/utility/integer_sequence
std::index_sequence_for =&gt; cpp/utility/integer_sequence
std::make_tuple =&gt; cpp/utility/tuple/make_tuple
std::tie =&gt; cpp/utility/tuple/tie
std::forward_as_tuple =&gt; cpp/utility/tuple/forward_as_tuple
std::tuple_cat =&gt; cpp/utility/tuple/tuple_cat
std::ignore =&gt; cpp/utility/tuple/ignore
std::forward =&gt; cpp/utility/forward
std::exchange =&gt; cpp/utility/exchange
std::move (utility) =&gt; cpp/utility/move
std::move_if_noexcept =&gt; cpp/utility/move_if_noexcept
std::declval =&gt; cpp/utility/declval
std::as_const =&gt; cpp/utility/as_const
std::launder =&gt; cpp/utility/launder
std::rel_ops::operator!= =&gt; cpp/utility/rel_ops/operator_cmp
std::rel_ops::operator&gt; =&gt; cpp/utility/rel_ops/operator_cmp
std::rel_ops::operator&lt;= =&gt; cpp/utility/rel_ops/operator_cmp
std::rel_ops::operator&gt;= =&gt; cpp/utility/rel_ops/operator_cmp
std::hash =&gt; cpp/utility/hash
std::hash::hash =&gt; cpp/utility/hash/hash
std::hash::operator() =&gt; cpp/utility/hash/operator()
std::unary_function =&gt; cpp/utility/functional/unary_function
std::binary_function =&gt; cpp/utility/functional/binary_function
std::isalnum (&lt;cctype&gt;) =&gt; cpp/string/byte/isalnum
std::isalpha (&lt;cctype&gt;) =&gt; cpp/string/byte/isalpha
std::islower (&lt;cctype&gt;) =&gt; cpp/string/byte/islower
std::isupper (&lt;cctype&gt;) =&gt; cpp/string/byte/isupper
std::isdigit (&lt;cctype&gt;) =&gt; cpp/string/byte/isdigit
std::isxdigit (&lt;cctype&gt;) =&gt; cpp/string/byte/isxdigit
std::iscntrl (&lt;cctype&gt;) =&gt; cpp/string/byte/iscntrl
std::isgraph (&lt;cctype&gt;) =&gt; cpp/string/byte/isgraph
std::isspace (&lt;cctype&gt;) =&gt; cpp/string/byte/isspace
std::isblank (&lt;cctype&gt;) =&gt; cpp/string/byte/isblank
std::isprint (&lt;cctype&gt;) =&gt; cpp/string/byte/isprint
std::ispunct (&lt;cctype&gt;) =&gt; cpp/string/byte/ispunct
std::tolower (&lt;cctype&gt;) =&gt; cpp/string/byte/tolower
std::toupper (&lt;cctype&gt;) =&gt; cpp/string/byte/toupper
std::atof =&gt; cpp/string/byte/atof
std::atoi =&gt; cpp/string/byte/atoi
std::atol =&gt; cpp/string/byte/atoi
std::atoll =&gt; cpp/string/byte/atoi
std::strtol =&gt; cpp/string/byte/strtol
std::strtoll =&gt; cpp/string/byte/strtol
std::strtoul =&gt; cpp/string/byte/strtoul
std::strtoull =&gt; cpp/string/byte/strtoul
std::strtof =&gt; cpp/string/byte/strtof
std::strtod =&gt; cpp/string/byte/strtof
std::strtold =&gt; cpp/string/byte/strtof
std::strtoimax =&gt; cpp/string/byte/strtoimax
std::strtoumax =&gt; cpp/string/byte/strtoimax
std::strcpy =&gt; cpp/string/byte/strcpy
std::strncpy =&gt; cpp/string/byte/strncpy
std::strcat =&gt; cpp/string/byte/strcat
std::strncat =&gt; cpp/string/byte/strncat
std::strxfrm =&gt; cpp/string/byte/strxfrm
std::strlen =&gt; cpp/string/byte/strlen
std::strcmp =&gt; cpp/string/byte/strcmp
std::strncmp =&gt; cpp/string/byte/strncmp
std::strcoll =&gt; cpp/string/byte/strcoll
std::strchr =&gt; cpp/string/byte/strchr
std::strrchr =&gt; cpp/string/byte/strrchr
std::strspn =&gt; cpp/string/byte/strspn
std::strcspn =&gt; cpp/string/byte/strcspn
std::strpbrk =&gt; cpp/string/byte/strpbrk
std::strstr =&gt; cpp/string/byte/strstr
std::strtok =&gt; cpp/string/byte/strtok
std::memchr =&gt; cpp/string/byte/memchr
std::memcmp =&gt; cpp/string/byte/memcmp
std::memset =&gt; cpp/string/byte/memset
std::memcpy =&gt; cpp/string/byte/memcpy
std::memmove =&gt; cpp/string/byte/memmove
std::strerror =&gt; cpp/string/byte/strerror
std::mblen =&gt; cpp/string/multibyte/mblen
std::mbtowc =&gt; cpp/string/multibyte/mbtowc
std::wctomb =&gt; cpp/string/multibyte/wctomb
std::mbstowcs =&gt; cpp/string/multibyte/mbstowcs
std::wcstombs =&gt; cpp/string/multibyte/wcstombs
std::mbsinit =&gt; cpp/string/multibyte/mbsinit
std::btowc =&gt; cpp/string/multibyte/btowc
std::wctob =&gt; cpp/string/multibyte/wctob
std::mbrlen =&gt; cpp/string/multibyte/mbrlen
std::mbrtowc =&gt; cpp/string/multibyte/mbrtowc
std::wcrtomb =&gt; cpp/string/multibyte/wcrtomb
std::mbsrtowcs =&gt; cpp/string/multibyte/mbsrtowcs
std::wcsrtombs =&gt; cpp/string/multibyte/wcsrtombs
std::mbrtoc16 =&gt; cpp/string/multibyte/mbrtoc16
std::c16rtomb =&gt; cpp/string/multibyte/c16rtomb
std::mbrtoc32 =&gt; cpp/string/multibyte/mbrtoc32
std::c32rtomb =&gt; cpp/string/multibyte/c32rtomb
std::mbstate_t =&gt; cpp/string/multibyte/mbstate_t
std::iswalnum =&gt; cpp/string/wide/iswalnum
std::iswalpha =&gt; cpp/string/wide/iswalpha
std::iswlower =&gt; cpp/string/wide/iswlower
std::iswupper =&gt; cpp/string/wide/iswupper
std::iswdigit =&gt; cpp/string/wide/iswdigit
std::iswxdigit =&gt; cpp/string/wide/iswxdigit
std::iswcntrl =&gt; cpp/string/wide/iswcntrl
std::iswgraph =&gt; cpp/string/wide/iswgraph
std::iswspace =&gt; cpp/string/wide/iswspace
std::iswblank =&gt; cpp/string/wide/iswblank
std::iswprint =&gt; cpp/string/wide/iswprint
std::iswpunct =&gt; cpp/string/wide/iswpunct
std::iswctype =&gt; cpp/string/wide/iswctype
std::wctype =&gt; cpp/string/wide/wctype
std::towlower =&gt; cpp/string/wide/towlower
std::towupper =&gt; cpp/string/wide/towupper
std::towctrans =&gt; cpp/string/wide/towctrans
std::wctrans =&gt; cpp/string/wide/wctrans
std::wcstof =&gt; cpp/string/wide/wcstof
std::wcstod =&gt; cpp/string/wide/wcstof
std::wcstold =&gt; cpp/string/wide/wcstof
std::wcstol =&gt; cpp/string/wide/wcstol
std::wcstoll =&gt; cpp/string/wide/wcstol
std::wcstoul =&gt; cpp/string/wide/wcstoul
std::wcstoull =&gt; cpp/string/wide/wcstoul
std::wcstoimax =&gt; cpp/string/wide/wcstoimax
std::wcstoumax =&gt; cpp/string/wide/wcstoimax
std::wcscpy =&gt; cpp/string/wide/wcscpy
std::wcsncpy =&gt; cpp/string/wide/wcsncpy
std::wcscat =&gt; cpp/string/wide/wcscat
std::wcsncat =&gt; cpp/string/wide/wcsncat
std::wcsxfrm =&gt; cpp/string/wide/wcsxfrm
std::wcslen =&gt; cpp/string/wide/wcslen
std::wcscmp =&gt; cpp/string/wide/wcscmp
std::wcsncmp =&gt; cpp/string/wide/wcsncmp
std::wcscoll =&gt; cpp/string/wide/wcscoll
std::wcschr =&gt; cpp/string/wide/wcschr
std::wcsrchr =&gt; cpp/string/wide/wcsrchr
std::wcsspn =&gt; cpp/string/wide/wcsspn
std::wcscspn =&gt; cpp/string/wide/wcscspn
std::wcspbrk =&gt; cpp/string/wide/wcspbrk
std::wcsstr =&gt; cpp/string/wide/wcsstr
std::wcstok =&gt; cpp/string/wide/wcstok
std::wmemchr =&gt; cpp/string/wide/wmemchr
std::wmemcmp =&gt; cpp/string/wide/wmemcmp
std::wmemset =&gt; cpp/string/wide/wmemset
std::wmemcpy =&gt; cpp/string/wide/wmemcpy
std::wmemmove =&gt; cpp/string/wide/wmemmove
std::basic_string =&gt; cpp/string/basic_string
std::basic_string::basic_string =&gt; cpp/string/basic_string/basic_string
std::basic_string::assign =&gt; cpp/string/basic_string/assign
std::basic_string::operator= =&gt; cpp/string/basic_string/operator=
std::basic_string::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::basic_string::at =&gt; cpp/string/basic_string/at
std::basic_string::operator[] =&gt; cpp/string/basic_string/operator_at
std::basic_string::front =&gt; cpp/string/basic_string/front
std::basic_string::back =&gt; cpp/string/basic_string/back
std::basic_string::data =&gt; cpp/string/basic_string/data
std::basic_string::c_str =&gt; cpp/string/basic_string/c_str
std::basic_string::begin =&gt; cpp/string/basic_string/begin
std::basic_string::cbegin =&gt; cpp/string/basic_string/begin
std::basic_string::end =&gt; cpp/string/basic_string/end
std::basic_string::cend =&gt; cpp/string/basic_string/end
std::basic_string::rbegin =&gt; cpp/string/basic_string/rbegin
std::basic_string::crbegin =&gt; cpp/string/basic_string/rbegin
std::basic_string::rend =&gt; cpp/string/basic_string/rend
std::basic_string::crend =&gt; cpp/string/basic_string/rend
std::basic_string::empty =&gt; cpp/string/basic_string/empty
std::basic_string::size =&gt; cpp/string/basic_string/size
std::basic_string::length =&gt; cpp/string/basic_string/size
std::basic_string::max_size =&gt; cpp/string/basic_string/max_size
std::basic_string::reserve =&gt; cpp/string/basic_string/reserve
std::basic_string::capacity =&gt; cpp/string/basic_string/capacity
std::basic_string::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::basic_string::clear =&gt; cpp/string/basic_string/clear
std::basic_string::insert =&gt; cpp/string/basic_string/insert
std::basic_string::erase =&gt; cpp/string/basic_string/erase
std::basic_string::push_back =&gt; cpp/string/basic_string/push_back
std::basic_string::pop_back =&gt; cpp/string/basic_string/pop_back
std::basic_string::append =&gt; cpp/string/basic_string/append
std::basic_string::compare =&gt; cpp/string/basic_string/compare
std::basic_string::replace =&gt; cpp/string/basic_string/replace
std::basic_string::substr =&gt; cpp/string/basic_string/substr
std::basic_string::copy =&gt; cpp/string/basic_string/copy
std::basic_string::resize =&gt; cpp/string/basic_string/resize
std::basic_string::swap =&gt; cpp/string/basic_string/swap
std::basic_string::find =&gt; cpp/string/basic_string/find
std::basic_string::rfind =&gt; cpp/string/basic_string/rfind
std::basic_string::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::basic_string::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::basic_string::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::basic_string::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::basic_string::npos =&gt; cpp/string/basic_string/npos
operator+(std::basic_string) =&gt; cpp/string/basic_string/operator+
operator==(std::basic_string) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::basic_string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::basic_string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::basic_string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::basic_string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::basic_string) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::basic_string) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::basic_string) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::basic_string) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::basic_string&gt; =&gt; cpp/string/basic_string/hash
std::string =&gt; cpp/string/basic_string
std::string::string =&gt; cpp/string/basic_string/basic_string
std::string::assign =&gt; cpp/string/basic_string/assign
std::string::operator= =&gt; cpp/string/basic_string/operator=
std::string::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::string::at =&gt; cpp/string/basic_string/at
std::string::operator[] =&gt; cpp/string/basic_string/operator_at
std::string::front =&gt; cpp/string/basic_string/front
std::string::back =&gt; cpp/string/basic_string/back
std::string::data =&gt; cpp/string/basic_string/data
std::string::c_str =&gt; cpp/string/basic_string/c_str
std::string::begin =&gt; cpp/string/basic_string/begin
std::string::cbegin =&gt; cpp/string/basic_string/begin
std::string::end =&gt; cpp/string/basic_string/end
std::string::cend =&gt; cpp/string/basic_string/end
std::string::rbegin =&gt; cpp/string/basic_string/rbegin
std::string::crbegin =&gt; cpp/string/basic_string/rbegin
std::string::rend =&gt; cpp/string/basic_string/rend
std::string::crend =&gt; cpp/string/basic_string/rend
std::string::empty =&gt; cpp/string/basic_string/empty
std::string::size =&gt; cpp/string/basic_string/size
std::string::length =&gt; cpp/string/basic_string/size
std::string::max_size =&gt; cpp/string/basic_string/max_size
std::string::reserve =&gt; cpp/string/basic_string/reserve
std::string::capacity =&gt; cpp/string/basic_string/capacity
std::string::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::string::clear =&gt; cpp/string/basic_string/clear
std::string::insert =&gt; cpp/string/basic_string/insert
std::string::erase =&gt; cpp/string/basic_string/erase
std::string::push_back =&gt; cpp/string/basic_string/push_back
std::string::pop_back =&gt; cpp/string/basic_string/pop_back
std::string::append =&gt; cpp/string/basic_string/append
std::string::compare =&gt; cpp/string/basic_string/compare
std::string::replace =&gt; cpp/string/basic_string/replace
std::string::substr =&gt; cpp/string/basic_string/substr
std::string::copy =&gt; cpp/string/basic_string/copy
std::string::resize =&gt; cpp/string/basic_string/resize
std::string::swap =&gt; cpp/string/basic_string/swap
std::string::find =&gt; cpp/string/basic_string/find
std::string::rfind =&gt; cpp/string/basic_string/rfind
std::string::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::string::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::string::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::string::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::string::npos =&gt; cpp/string/basic_string/npos
operator+(std::string) =&gt; cpp/string/basic_string/operator+
operator==(std::string) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::string) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::string) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::string) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::string) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::string&gt; =&gt; cpp/string/basic_string/hash
std::wstring =&gt; cpp/string/basic_string
std::wstring::wstring =&gt; cpp/string/basic_string/basic_string
std::wstring::assign =&gt; cpp/string/basic_string/assign
std::wstring::operator= =&gt; cpp/string/basic_string/operator=
std::wstring::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::wstring::at =&gt; cpp/string/basic_string/at
std::wstring::operator[] =&gt; cpp/string/basic_string/operator_at
std::wstring::front =&gt; cpp/string/basic_string/front
std::wstring::back =&gt; cpp/string/basic_string/back
std::wstring::data =&gt; cpp/string/basic_string/data
std::wstring::c_str =&gt; cpp/string/basic_string/c_str
std::wstring::begin =&gt; cpp/string/basic_string/begin
std::wstring::cbegin =&gt; cpp/string/basic_string/begin
std::wstring::end =&gt; cpp/string/basic_string/end
std::wstring::cend =&gt; cpp/string/basic_string/end
std::wstring::rbegin =&gt; cpp/string/basic_string/rbegin
std::wstring::crbegin =&gt; cpp/string/basic_string/rbegin
std::wstring::rend =&gt; cpp/string/basic_string/rend
std::wstring::crend =&gt; cpp/string/basic_string/rend
std::wstring::empty =&gt; cpp/string/basic_string/empty
std::wstring::size =&gt; cpp/string/basic_string/size
std::wstring::length =&gt; cpp/string/basic_string/size
std::wstring::max_size =&gt; cpp/string/basic_string/max_size
std::wstring::reserve =&gt; cpp/string/basic_string/reserve
std::wstring::capacity =&gt; cpp/string/basic_string/capacity
std::wstring::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::wstring::clear =&gt; cpp/string/basic_string/clear
std::wstring::insert =&gt; cpp/string/basic_string/insert
std::wstring::erase =&gt; cpp/string/basic_string/erase
std::wstring::push_back =&gt; cpp/string/basic_string/push_back
std::wstring::pop_back =&gt; cpp/string/basic_string/pop_back
std::wstring::append =&gt; cpp/string/basic_string/append
std::wstring::compare =&gt; cpp/string/basic_string/compare
std::wstring::replace =&gt; cpp/string/basic_string/replace
std::wstring::substr =&gt; cpp/string/basic_string/substr
std::wstring::copy =&gt; cpp/string/basic_string/copy
std::wstring::resize =&gt; cpp/string/basic_string/resize
std::wstring::swap =&gt; cpp/string/basic_string/swap
std::wstring::find =&gt; cpp/string/basic_string/find
std::wstring::rfind =&gt; cpp/string/basic_string/rfind
std::wstring::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::wstring::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::wstring::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::wstring::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::wstring::npos =&gt; cpp/string/basic_string/npos
operator+(std::wstring) =&gt; cpp/string/basic_string/operator+
operator==(std::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::wstring) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::wstring) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::wstring) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::wstring) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::wstring&gt; =&gt; cpp/string/basic_string/hash
std::u16string =&gt; cpp/string/basic_string
std::u16string::u16string =&gt; cpp/string/basic_string/basic_string
std::u16string::assign =&gt; cpp/string/basic_string/assign
std::u16string::operator= =&gt; cpp/string/basic_string/operator=
std::u16string::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::u16string::at =&gt; cpp/string/basic_string/at
std::u16string::operator[] =&gt; cpp/string/basic_string/operator_at
std::u16string::front =&gt; cpp/string/basic_string/front
std::u16string::back =&gt; cpp/string/basic_string/back
std::u16string::data =&gt; cpp/string/basic_string/data
std::u16string::c_str =&gt; cpp/string/basic_string/c_str
std::u16string::begin =&gt; cpp/string/basic_string/begin
std::u16string::cbegin =&gt; cpp/string/basic_string/begin
std::u16string::end =&gt; cpp/string/basic_string/end
std::u16string::cend =&gt; cpp/string/basic_string/end
std::u16string::rbegin =&gt; cpp/string/basic_string/rbegin
std::u16string::crbegin =&gt; cpp/string/basic_string/rbegin
std::u16string::rend =&gt; cpp/string/basic_string/rend
std::u16string::crend =&gt; cpp/string/basic_string/rend
std::u16string::empty =&gt; cpp/string/basic_string/empty
std::u16string::size =&gt; cpp/string/basic_string/size
std::u16string::length =&gt; cpp/string/basic_string/size
std::u16string::max_size =&gt; cpp/string/basic_string/max_size
std::u16string::reserve =&gt; cpp/string/basic_string/reserve
std::u16string::capacity =&gt; cpp/string/basic_string/capacity
std::u16string::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::u16string::clear =&gt; cpp/string/basic_string/clear
std::u16string::insert =&gt; cpp/string/basic_string/insert
std::u16string::erase =&gt; cpp/string/basic_string/erase
std::u16string::push_back =&gt; cpp/string/basic_string/push_back
std::u16string::pop_back =&gt; cpp/string/basic_string/pop_back
std::u16string::append =&gt; cpp/string/basic_string/append
std::u16string::compare =&gt; cpp/string/basic_string/compare
std::u16string::replace =&gt; cpp/string/basic_string/replace
std::u16string::substr =&gt; cpp/string/basic_string/substr
std::u16string::copy =&gt; cpp/string/basic_string/copy
std::u16string::resize =&gt; cpp/string/basic_string/resize
std::u16string::swap =&gt; cpp/string/basic_string/swap
std::u16string::find =&gt; cpp/string/basic_string/find
std::u16string::rfind =&gt; cpp/string/basic_string/rfind
std::u16string::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::u16string::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::u16string::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::u16string::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::u16string::npos =&gt; cpp/string/basic_string/npos
operator+(std::u16string) =&gt; cpp/string/basic_string/operator+
operator==(std::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::u16string) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::u16string) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::u16string) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::u16string) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::u16string&gt; =&gt; cpp/string/basic_string/hash
std::u32string =&gt; cpp/string/basic_string
std::u32string::u32string =&gt; cpp/string/basic_string/basic_string
std::u32string::assign =&gt; cpp/string/basic_string/assign
std::u32string::operator= =&gt; cpp/string/basic_string/operator=
std::u32string::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::u32string::at =&gt; cpp/string/basic_string/at
std::u32string::operator[] =&gt; cpp/string/basic_string/operator_at
std::u32string::front =&gt; cpp/string/basic_string/front
std::u32string::back =&gt; cpp/string/basic_string/back
std::u32string::data =&gt; cpp/string/basic_string/data
std::u32string::c_str =&gt; cpp/string/basic_string/c_str
std::u32string::begin =&gt; cpp/string/basic_string/begin
std::u32string::cbegin =&gt; cpp/string/basic_string/begin
std::u32string::end =&gt; cpp/string/basic_string/end
std::u32string::cend =&gt; cpp/string/basic_string/end
std::u32string::rbegin =&gt; cpp/string/basic_string/rbegin
std::u32string::crbegin =&gt; cpp/string/basic_string/rbegin
std::u32string::rend =&gt; cpp/string/basic_string/rend
std::u32string::crend =&gt; cpp/string/basic_string/rend
std::u32string::empty =&gt; cpp/string/basic_string/empty
std::u32string::size =&gt; cpp/string/basic_string/size
std::u32string::length =&gt; cpp/string/basic_string/size
std::u32string::max_size =&gt; cpp/string/basic_string/max_size
std::u32string::reserve =&gt; cpp/string/basic_string/reserve
std::u32string::capacity =&gt; cpp/string/basic_string/capacity
std::u32string::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::u32string::clear =&gt; cpp/string/basic_string/clear
std::u32string::insert =&gt; cpp/string/basic_string/insert
std::u32string::erase =&gt; cpp/string/basic_string/erase
std::u32string::push_back =&gt; cpp/string/basic_string/push_back
std::u32string::pop_back =&gt; cpp/string/basic_string/pop_back
std::u32string::append =&gt; cpp/string/basic_string/append
std::u32string::compare =&gt; cpp/string/basic_string/compare
std::u32string::replace =&gt; cpp/string/basic_string/replace
std::u32string::substr =&gt; cpp/string/basic_string/substr
std::u32string::copy =&gt; cpp/string/basic_string/copy
std::u32string::resize =&gt; cpp/string/basic_string/resize
std::u32string::swap =&gt; cpp/string/basic_string/swap
std::u32string::find =&gt; cpp/string/basic_string/find
std::u32string::rfind =&gt; cpp/string/basic_string/rfind
std::u32string::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::u32string::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::u32string::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::u32string::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::u32string::npos =&gt; cpp/string/basic_string/npos
operator+(std::u32string) =&gt; cpp/string/basic_string/operator+
operator==(std::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::u32string) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::u32string) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::u32string) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::u32string) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::u32string&gt; =&gt; cpp/string/basic_string/hash
std::pmr::string =&gt; cpp/string/basic_string
std::pmr::string::string =&gt; cpp/string/basic_string/basic_string
std::pmr::string::assign =&gt; cpp/string/basic_string/assign
std::pmr::string::operator= =&gt; cpp/string/basic_string/operator=
std::pmr::string::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::pmr::string::at =&gt; cpp/string/basic_string/at
std::pmr::string::operator[] =&gt; cpp/string/basic_string/operator_at
std::pmr::string::front =&gt; cpp/string/basic_string/front
std::pmr::string::back =&gt; cpp/string/basic_string/back
std::pmr::string::data =&gt; cpp/string/basic_string/data
std::pmr::string::c_str =&gt; cpp/string/basic_string/c_str
std::pmr::string::begin =&gt; cpp/string/basic_string/begin
std::pmr::string::cbegin =&gt; cpp/string/basic_string/begin
std::pmr::string::end =&gt; cpp/string/basic_string/end
std::pmr::string::cend =&gt; cpp/string/basic_string/end
std::pmr::string::rbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::string::crbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::string::rend =&gt; cpp/string/basic_string/rend
std::pmr::string::crend =&gt; cpp/string/basic_string/rend
std::pmr::string::empty =&gt; cpp/string/basic_string/empty
std::pmr::string::size =&gt; cpp/string/basic_string/size
std::pmr::string::length =&gt; cpp/string/basic_string/size
std::pmr::string::max_size =&gt; cpp/string/basic_string/max_size
std::pmr::string::reserve =&gt; cpp/string/basic_string/reserve
std::pmr::string::capacity =&gt; cpp/string/basic_string/capacity
std::pmr::string::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::pmr::string::clear =&gt; cpp/string/basic_string/clear
std::pmr::string::insert =&gt; cpp/string/basic_string/insert
std::pmr::string::erase =&gt; cpp/string/basic_string/erase
std::pmr::string::push_back =&gt; cpp/string/basic_string/push_back
std::pmr::string::pop_back =&gt; cpp/string/basic_string/pop_back
std::pmr::string::append =&gt; cpp/string/basic_string/append
std::pmr::string::compare =&gt; cpp/string/basic_string/compare
std::pmr::string::replace =&gt; cpp/string/basic_string/replace
std::pmr::string::substr =&gt; cpp/string/basic_string/substr
std::pmr::string::copy =&gt; cpp/string/basic_string/copy
std::pmr::string::resize =&gt; cpp/string/basic_string/resize
std::pmr::string::swap =&gt; cpp/string/basic_string/swap
std::pmr::string::find =&gt; cpp/string/basic_string/find
std::pmr::string::rfind =&gt; cpp/string/basic_string/rfind
std::pmr::string::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::pmr::string::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::pmr::string::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::pmr::string::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::pmr::string::npos =&gt; cpp/string/basic_string/npos
operator+(std::pmr::string) =&gt; cpp/string/basic_string/operator+
operator==(std::pmr::string) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::pmr::string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::pmr::string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::pmr::string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::pmr::string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::pmr::string) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::pmr::string) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::pmr::string) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::pmr::string) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::pmr::string&gt; =&gt; cpp/string/basic_string/hash
std::pmr::wstring =&gt; cpp/string/basic_string
std::pmr::wstring::wstring =&gt; cpp/string/basic_string/basic_string
std::pmr::wstring::assign =&gt; cpp/string/basic_string/assign
std::pmr::wstring::operator= =&gt; cpp/string/basic_string/operator=
std::pmr::wstring::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::pmr::wstring::at =&gt; cpp/string/basic_string/at
std::pmr::wstring::operator[] =&gt; cpp/string/basic_string/operator_at
std::pmr::wstring::front =&gt; cpp/string/basic_string/front
std::pmr::wstring::back =&gt; cpp/string/basic_string/back
std::pmr::wstring::data =&gt; cpp/string/basic_string/data
std::pmr::wstring::c_str =&gt; cpp/string/basic_string/c_str
std::pmr::wstring::begin =&gt; cpp/string/basic_string/begin
std::pmr::wstring::cbegin =&gt; cpp/string/basic_string/begin
std::pmr::wstring::end =&gt; cpp/string/basic_string/end
std::pmr::wstring::cend =&gt; cpp/string/basic_string/end
std::pmr::wstring::rbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::wstring::crbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::wstring::rend =&gt; cpp/string/basic_string/rend
std::pmr::wstring::crend =&gt; cpp/string/basic_string/rend
std::pmr::wstring::empty =&gt; cpp/string/basic_string/empty
std::pmr::wstring::size =&gt; cpp/string/basic_string/size
std::pmr::wstring::length =&gt; cpp/string/basic_string/size
std::pmr::wstring::max_size =&gt; cpp/string/basic_string/max_size
std::pmr::wstring::reserve =&gt; cpp/string/basic_string/reserve
std::pmr::wstring::capacity =&gt; cpp/string/basic_string/capacity
std::pmr::wstring::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::pmr::wstring::clear =&gt; cpp/string/basic_string/clear
std::pmr::wstring::insert =&gt; cpp/string/basic_string/insert
std::pmr::wstring::erase =&gt; cpp/string/basic_string/erase
std::pmr::wstring::push_back =&gt; cpp/string/basic_string/push_back
std::pmr::wstring::pop_back =&gt; cpp/string/basic_string/pop_back
std::pmr::wstring::append =&gt; cpp/string/basic_string/append
std::pmr::wstring::compare =&gt; cpp/string/basic_string/compare
std::pmr::wstring::replace =&gt; cpp/string/basic_string/replace
std::pmr::wstring::substr =&gt; cpp/string/basic_string/substr
std::pmr::wstring::copy =&gt; cpp/string/basic_string/copy
std::pmr::wstring::resize =&gt; cpp/string/basic_string/resize
std::pmr::wstring::swap =&gt; cpp/string/basic_string/swap
std::pmr::wstring::find =&gt; cpp/string/basic_string/find
std::pmr::wstring::rfind =&gt; cpp/string/basic_string/rfind
std::pmr::wstring::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::pmr::wstring::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::pmr::wstring::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::pmr::wstring::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::pmr::wstring::npos =&gt; cpp/string/basic_string/npos
operator+(std::pmr::wstring) =&gt; cpp/string/basic_string/operator+
operator==(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::pmr::wstring) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::pmr::wstring) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::pmr::wstring&gt; =&gt; cpp/string/basic_string/hash
std::pmr::u16string =&gt; cpp/string/basic_string
std::pmr::u16string::u16string =&gt; cpp/string/basic_string/basic_string
std::pmr::u16string::assign =&gt; cpp/string/basic_string/assign
std::pmr::u16string::operator= =&gt; cpp/string/basic_string/operator=
std::pmr::u16string::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::pmr::u16string::at =&gt; cpp/string/basic_string/at
std::pmr::u16string::operator[] =&gt; cpp/string/basic_string/operator_at
std::pmr::u16string::front =&gt; cpp/string/basic_string/front
std::pmr::u16string::back =&gt; cpp/string/basic_string/back
std::pmr::u16string::data =&gt; cpp/string/basic_string/data
std::pmr::u16string::c_str =&gt; cpp/string/basic_string/c_str
std::pmr::u16string::begin =&gt; cpp/string/basic_string/begin
std::pmr::u16string::cbegin =&gt; cpp/string/basic_string/begin
std::pmr::u16string::end =&gt; cpp/string/basic_string/end
std::pmr::u16string::cend =&gt; cpp/string/basic_string/end
std::pmr::u16string::rbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::u16string::crbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::u16string::rend =&gt; cpp/string/basic_string/rend
std::pmr::u16string::crend =&gt; cpp/string/basic_string/rend
std::pmr::u16string::empty =&gt; cpp/string/basic_string/empty
std::pmr::u16string::size =&gt; cpp/string/basic_string/size
std::pmr::u16string::length =&gt; cpp/string/basic_string/size
std::pmr::u16string::max_size =&gt; cpp/string/basic_string/max_size
std::pmr::u16string::reserve =&gt; cpp/string/basic_string/reserve
std::pmr::u16string::capacity =&gt; cpp/string/basic_string/capacity
std::pmr::u16string::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::pmr::u16string::clear =&gt; cpp/string/basic_string/clear
std::pmr::u16string::insert =&gt; cpp/string/basic_string/insert
std::pmr::u16string::erase =&gt; cpp/string/basic_string/erase
std::pmr::u16string::push_back =&gt; cpp/string/basic_string/push_back
std::pmr::u16string::pop_back =&gt; cpp/string/basic_string/pop_back
std::pmr::u16string::append =&gt; cpp/string/basic_string/append
std::pmr::u16string::compare =&gt; cpp/string/basic_string/compare
std::pmr::u16string::replace =&gt; cpp/string/basic_string/replace
std::pmr::u16string::substr =&gt; cpp/string/basic_string/substr
std::pmr::u16string::copy =&gt; cpp/string/basic_string/copy
std::pmr::u16string::resize =&gt; cpp/string/basic_string/resize
std::pmr::u16string::swap =&gt; cpp/string/basic_string/swap
std::pmr::u16string::find =&gt; cpp/string/basic_string/find
std::pmr::u16string::rfind =&gt; cpp/string/basic_string/rfind
std::pmr::u16string::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::pmr::u16string::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::pmr::u16string::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::pmr::u16string::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::pmr::u16string::npos =&gt; cpp/string/basic_string/npos
operator+(std::pmr::u16string) =&gt; cpp/string/basic_string/operator+
operator==(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::pmr::u16string) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::pmr::u16string) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::pmr::u16string&gt; =&gt; cpp/string/basic_string/hash
std::pmr::u32string =&gt; cpp/string/basic_string
std::pmr::u32string::u32string =&gt; cpp/string/basic_string/basic_string
std::pmr::u32string::assign =&gt; cpp/string/basic_string/assign
std::pmr::u32string::operator= =&gt; cpp/string/basic_string/operator=
std::pmr::u32string::get_allocator =&gt; cpp/string/basic_string/get_allocator
std::pmr::u32string::at =&gt; cpp/string/basic_string/at
std::pmr::u32string::operator[] =&gt; cpp/string/basic_string/operator_at
std::pmr::u32string::front =&gt; cpp/string/basic_string/front
std::pmr::u32string::back =&gt; cpp/string/basic_string/back
std::pmr::u32string::data =&gt; cpp/string/basic_string/data
std::pmr::u32string::c_str =&gt; cpp/string/basic_string/c_str
std::pmr::u32string::begin =&gt; cpp/string/basic_string/begin
std::pmr::u32string::cbegin =&gt; cpp/string/basic_string/begin
std::pmr::u32string::end =&gt; cpp/string/basic_string/end
std::pmr::u32string::cend =&gt; cpp/string/basic_string/end
std::pmr::u32string::rbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::u32string::crbegin =&gt; cpp/string/basic_string/rbegin
std::pmr::u32string::rend =&gt; cpp/string/basic_string/rend
std::pmr::u32string::crend =&gt; cpp/string/basic_string/rend
std::pmr::u32string::empty =&gt; cpp/string/basic_string/empty
std::pmr::u32string::size =&gt; cpp/string/basic_string/size
std::pmr::u32string::length =&gt; cpp/string/basic_string/size
std::pmr::u32string::max_size =&gt; cpp/string/basic_string/max_size
std::pmr::u32string::reserve =&gt; cpp/string/basic_string/reserve
std::pmr::u32string::capacity =&gt; cpp/string/basic_string/capacity
std::pmr::u32string::shrink_to_fit =&gt; cpp/string/basic_string/shrink_to_fit
std::pmr::u32string::clear =&gt; cpp/string/basic_string/clear
std::pmr::u32string::insert =&gt; cpp/string/basic_string/insert
std::pmr::u32string::erase =&gt; cpp/string/basic_string/erase
std::pmr::u32string::push_back =&gt; cpp/string/basic_string/push_back
std::pmr::u32string::pop_back =&gt; cpp/string/basic_string/pop_back
std::pmr::u32string::append =&gt; cpp/string/basic_string/append
std::pmr::u32string::compare =&gt; cpp/string/basic_string/compare
std::pmr::u32string::replace =&gt; cpp/string/basic_string/replace
std::pmr::u32string::substr =&gt; cpp/string/basic_string/substr
std::pmr::u32string::copy =&gt; cpp/string/basic_string/copy
std::pmr::u32string::resize =&gt; cpp/string/basic_string/resize
std::pmr::u32string::swap =&gt; cpp/string/basic_string/swap
std::pmr::u32string::find =&gt; cpp/string/basic_string/find
std::pmr::u32string::rfind =&gt; cpp/string/basic_string/rfind
std::pmr::u32string::find_first_of =&gt; cpp/string/basic_string/find_first_of
std::pmr::u32string::find_first_not_of =&gt; cpp/string/basic_string/find_first_not_of
std::pmr::u32string::find_last_of =&gt; cpp/string/basic_string/find_last_of
std::pmr::u32string::find_last_not_of =&gt; cpp/string/basic_string/find_last_not_of
std::pmr::u32string::npos =&gt; cpp/string/basic_string/npos
operator+(std::pmr::u32string) =&gt; cpp/string/basic_string/operator+
operator==(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator!=(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&lt;=(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_cmp
operator&gt;=(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_cmp
std::swap(std::pmr::u32string) =&gt; cpp/string/basic_string/swap2
operator&lt;&lt;(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_ltltgtgt
operator&gt;&gt;(std::pmr::u32string) =&gt; cpp/string/basic_string/operator_ltltgtgt
std::hash&lt;std::pmr::u32string&gt; =&gt; cpp/string/basic_string/hash
std::basic_string_view =&gt; cpp/string/basic_string_view
std::basic_string_view::basic_string_view =&gt; cpp/string/basic_string_view/basic_string_view
std::basic_string_view::operator= =&gt; cpp/string/basic_string_view/operator=
std::basic_string_view::begin =&gt; cpp/string/basic_string_view/begin
std::basic_string_view::cbegin =&gt; cpp/string/basic_string_view/begin
std::basic_string_view::rbegin =&gt; cpp/string/basic_string_view/rbegin
std::basic_string_view::crbegin =&gt; cpp/string/basic_string_view/rbegin
std::basic_string_view::end =&gt; cpp/string/basic_string_view/end
std::basic_string_view::cend =&gt; cpp/string/basic_string_view/end
std::basic_string_view::rend =&gt; cpp/string/basic_string_view/rend
std::basic_string_view::crend =&gt; cpp/string/basic_string_view/rend
std::basic_string_view::operator[] =&gt; cpp/string/basic_string_view/operator_at
std::basic_string_view::at =&gt; cpp/string/basic_string_view/at
std::basic_string_view::front =&gt; cpp/string/basic_string_view/front
std::basic_string_view::back =&gt; cpp/string/basic_string_view/back
std::basic_string_view::data =&gt; cpp/string/basic_string_view/data
std::basic_string_view::size =&gt; cpp/string/basic_string_view/size
std::basic_string_view::length =&gt; cpp/string/basic_string_view/size
std::basic_string_view::max_size =&gt; cpp/string/basic_string_view/max_size
std::basic_string_view::empty =&gt; cpp/string/basic_string_view/empty
std::basic_string_view::remove_prefix =&gt; cpp/string/basic_string_view/remove_prefix
std::basic_string_view::remove_suffix =&gt; cpp/string/basic_string_view/remove_suffix
std::basic_string_view::swap =&gt; cpp/string/basic_string_view/swap
std::basic_string_view::copy =&gt; cpp/string/basic_string_view/copy
std::basic_string_view::substr =&gt; cpp/string/basic_string_view/substr
std::basic_string_view::compare =&gt; cpp/string/basic_string_view/compare
std::basic_string_view::find =&gt; cpp/string/basic_string_view/find
std::basic_string_view::rfind =&gt; cpp/string/basic_string_view/rfind
std::basic_string_view::find_first_of =&gt; cpp/string/basic_string_view/find_first_of
std::basic_string_view::find_last_of =&gt; cpp/string/basic_string_view/find_last_of
std::basic_string_view::find_first_not_of =&gt; cpp/string/basic_string_view/find_first_not_of
std::basic_string_view::find_last_not_of =&gt; cpp/string/basic_string_view/find_last_not_of
std::basic_string_view::npos =&gt; cpp/string/basic_string_view/npos
operator==(std::basic_string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator!=(std::basic_string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;(std::basic_string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;=(std::basic_string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;(std::basic_string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;=(std::basic_string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;&lt;(std::basic_string_view) =&gt; cpp/string/basic_string_view/operator_ltlt
std::hash&lt;std::basic_string_view&gt; =&gt; cpp/string/basic_string_view/hash
std::string_view =&gt; cpp/string/basic_string_view
std::string_view::string_view =&gt; cpp/string/basic_string_view/basic_string_view
std::string_view::operator= =&gt; cpp/string/basic_string_view/operator=
std::string_view::begin =&gt; cpp/string/basic_string_view/begin
std::string_view::cbegin =&gt; cpp/string/basic_string_view/begin
std::string_view::rbegin =&gt; cpp/string/basic_string_view/rbegin
std::string_view::crbegin =&gt; cpp/string/basic_string_view/rbegin
std::string_view::end =&gt; cpp/string/basic_string_view/end
std::string_view::cend =&gt; cpp/string/basic_string_view/end
std::string_view::rend =&gt; cpp/string/basic_string_view/rend
std::string_view::crend =&gt; cpp/string/basic_string_view/rend
std::string_view::operator[] =&gt; cpp/string/basic_string_view/operator_at
std::string_view::at =&gt; cpp/string/basic_string_view/at
std::string_view::front =&gt; cpp/string/basic_string_view/front
std::string_view::back =&gt; cpp/string/basic_string_view/back
std::string_view::data =&gt; cpp/string/basic_string_view/data
std::string_view::size =&gt; cpp/string/basic_string_view/size
std::string_view::length =&gt; cpp/string/basic_string_view/size
std::string_view::max_size =&gt; cpp/string/basic_string_view/max_size
std::string_view::empty =&gt; cpp/string/basic_string_view/empty
std::string_view::remove_prefix =&gt; cpp/string/basic_string_view/remove_prefix
std::string_view::remove_suffix =&gt; cpp/string/basic_string_view/remove_suffix
std::string_view::swap =&gt; cpp/string/basic_string_view/swap
std::string_view::copy =&gt; cpp/string/basic_string_view/copy
std::string_view::substr =&gt; cpp/string/basic_string_view/substr
std::string_view::compare =&gt; cpp/string/basic_string_view/compare
std::string_view::find =&gt; cpp/string/basic_string_view/find
std::string_view::rfind =&gt; cpp/string/basic_string_view/rfind
std::string_view::find_first_of =&gt; cpp/string/basic_string_view/find_first_of
std::string_view::find_last_of =&gt; cpp/string/basic_string_view/find_last_of
std::string_view::find_first_not_of =&gt; cpp/string/basic_string_view/find_first_not_of
std::string_view::find_last_not_of =&gt; cpp/string/basic_string_view/find_last_not_of
std::string_view::npos =&gt; cpp/string/basic_string_view/npos
operator==(std::string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator!=(std::string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;(std::string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;=(std::string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;(std::string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;=(std::string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;&lt;(std::string_view) =&gt; cpp/string/basic_string_view/operator_ltlt
std::hash&lt;std::string_view&gt; =&gt; cpp/string/basic_string_view/hash
std::wstring_view =&gt; cpp/string/basic_string_view
std::wstring_view::wstring_view =&gt; cpp/string/basic_string_view/basic_string_view
std::wstring_view::operator= =&gt; cpp/string/basic_string_view/operator=
std::wstring_view::begin =&gt; cpp/string/basic_string_view/begin
std::wstring_view::cbegin =&gt; cpp/string/basic_string_view/begin
std::wstring_view::rbegin =&gt; cpp/string/basic_string_view/rbegin
std::wstring_view::crbegin =&gt; cpp/string/basic_string_view/rbegin
std::wstring_view::end =&gt; cpp/string/basic_string_view/end
std::wstring_view::cend =&gt; cpp/string/basic_string_view/end
std::wstring_view::rend =&gt; cpp/string/basic_string_view/rend
std::wstring_view::crend =&gt; cpp/string/basic_string_view/rend
std::wstring_view::operator[] =&gt; cpp/string/basic_string_view/operator_at
std::wstring_view::at =&gt; cpp/string/basic_string_view/at
std::wstring_view::front =&gt; cpp/string/basic_string_view/front
std::wstring_view::back =&gt; cpp/string/basic_string_view/back
std::wstring_view::data =&gt; cpp/string/basic_string_view/data
std::wstring_view::size =&gt; cpp/string/basic_string_view/size
std::wstring_view::length =&gt; cpp/string/basic_string_view/size
std::wstring_view::max_size =&gt; cpp/string/basic_string_view/max_size
std::wstring_view::empty =&gt; cpp/string/basic_string_view/empty
std::wstring_view::remove_prefix =&gt; cpp/string/basic_string_view/remove_prefix
std::wstring_view::remove_suffix =&gt; cpp/string/basic_string_view/remove_suffix
std::wstring_view::swap =&gt; cpp/string/basic_string_view/swap
std::wstring_view::copy =&gt; cpp/string/basic_string_view/copy
std::wstring_view::substr =&gt; cpp/string/basic_string_view/substr
std::wstring_view::compare =&gt; cpp/string/basic_string_view/compare
std::wstring_view::find =&gt; cpp/string/basic_string_view/find
std::wstring_view::rfind =&gt; cpp/string/basic_string_view/rfind
std::wstring_view::find_first_of =&gt; cpp/string/basic_string_view/find_first_of
std::wstring_view::find_last_of =&gt; cpp/string/basic_string_view/find_last_of
std::wstring_view::find_first_not_of =&gt; cpp/string/basic_string_view/find_first_not_of
std::wstring_view::find_last_not_of =&gt; cpp/string/basic_string_view/find_last_not_of
std::wstring_view::npos =&gt; cpp/string/basic_string_view/npos
operator==(std::wstring_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator!=(std::wstring_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;(std::wstring_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;=(std::wstring_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;(std::wstring_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;=(std::wstring_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;&lt;(std::wstring_view) =&gt; cpp/string/basic_string_view/operator_ltlt
std::hash&lt;std::wstring_view&gt; =&gt; cpp/string/basic_string_view/hash
std::u16string_view =&gt; cpp/string/basic_string_view
std::u16string_view::u16string_view =&gt; cpp/string/basic_string_view/basic_string_view
std::u16string_view::operator= =&gt; cpp/string/basic_string_view/operator=
std::u16string_view::begin =&gt; cpp/string/basic_string_view/begin
std::u16string_view::cbegin =&gt; cpp/string/basic_string_view/begin
std::u16string_view::rbegin =&gt; cpp/string/basic_string_view/rbegin
std::u16string_view::crbegin =&gt; cpp/string/basic_string_view/rbegin
std::u16string_view::end =&gt; cpp/string/basic_string_view/end
std::u16string_view::cend =&gt; cpp/string/basic_string_view/end
std::u16string_view::rend =&gt; cpp/string/basic_string_view/rend
std::u16string_view::crend =&gt; cpp/string/basic_string_view/rend
std::u16string_view::operator[] =&gt; cpp/string/basic_string_view/operator_at
std::u16string_view::at =&gt; cpp/string/basic_string_view/at
std::u16string_view::front =&gt; cpp/string/basic_string_view/front
std::u16string_view::back =&gt; cpp/string/basic_string_view/back
std::u16string_view::data =&gt; cpp/string/basic_string_view/data
std::u16string_view::size =&gt; cpp/string/basic_string_view/size
std::u16string_view::length =&gt; cpp/string/basic_string_view/size
std::u16string_view::max_size =&gt; cpp/string/basic_string_view/max_size
std::u16string_view::empty =&gt; cpp/string/basic_string_view/empty
std::u16string_view::remove_prefix =&gt; cpp/string/basic_string_view/remove_prefix
std::u16string_view::remove_suffix =&gt; cpp/string/basic_string_view/remove_suffix
std::u16string_view::swap =&gt; cpp/string/basic_string_view/swap
std::u16string_view::copy =&gt; cpp/string/basic_string_view/copy
std::u16string_view::substr =&gt; cpp/string/basic_string_view/substr
std::u16string_view::compare =&gt; cpp/string/basic_string_view/compare
std::u16string_view::find =&gt; cpp/string/basic_string_view/find
std::u16string_view::rfind =&gt; cpp/string/basic_string_view/rfind
std::u16string_view::find_first_of =&gt; cpp/string/basic_string_view/find_first_of
std::u16string_view::find_last_of =&gt; cpp/string/basic_string_view/find_last_of
std::u16string_view::find_first_not_of =&gt; cpp/string/basic_string_view/find_first_not_of
std::u16string_view::find_last_not_of =&gt; cpp/string/basic_string_view/find_last_not_of
std::u16string_view::npos =&gt; cpp/string/basic_string_view/npos
operator==(std::u16string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator!=(std::u16string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;(std::u16string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;=(std::u16string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;(std::u16string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;=(std::u16string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;&lt;(std::u16string_view) =&gt; cpp/string/basic_string_view/operator_ltlt
std::hash&lt;std::u16string_view&gt; =&gt; cpp/string/basic_string_view/hash
std::u32string_view =&gt; cpp/string/basic_string_view
std::u32string_view::u32string_view =&gt; cpp/string/basic_string_view/basic_string_view
std::u32string_view::operator= =&gt; cpp/string/basic_string_view/operator=
std::u32string_view::begin =&gt; cpp/string/basic_string_view/begin
std::u32string_view::cbegin =&gt; cpp/string/basic_string_view/begin
std::u32string_view::rbegin =&gt; cpp/string/basic_string_view/rbegin
std::u32string_view::crbegin =&gt; cpp/string/basic_string_view/rbegin
std::u32string_view::end =&gt; cpp/string/basic_string_view/end
std::u32string_view::cend =&gt; cpp/string/basic_string_view/end
std::u32string_view::rend =&gt; cpp/string/basic_string_view/rend
std::u32string_view::crend =&gt; cpp/string/basic_string_view/rend
std::u32string_view::operator[] =&gt; cpp/string/basic_string_view/operator_at
std::u32string_view::at =&gt; cpp/string/basic_string_view/at
std::u32string_view::front =&gt; cpp/string/basic_string_view/front
std::u32string_view::back =&gt; cpp/string/basic_string_view/back
std::u32string_view::data =&gt; cpp/string/basic_string_view/data
std::u32string_view::size =&gt; cpp/string/basic_string_view/size
std::u32string_view::length =&gt; cpp/string/basic_string_view/size
std::u32string_view::max_size =&gt; cpp/string/basic_string_view/max_size
std::u32string_view::empty =&gt; cpp/string/basic_string_view/empty
std::u32string_view::remove_prefix =&gt; cpp/string/basic_string_view/remove_prefix
std::u32string_view::remove_suffix =&gt; cpp/string/basic_string_view/remove_suffix
std::u32string_view::swap =&gt; cpp/string/basic_string_view/swap
std::u32string_view::copy =&gt; cpp/string/basic_string_view/copy
std::u32string_view::substr =&gt; cpp/string/basic_string_view/substr
std::u32string_view::compare =&gt; cpp/string/basic_string_view/compare
std::u32string_view::find =&gt; cpp/string/basic_string_view/find
std::u32string_view::rfind =&gt; cpp/string/basic_string_view/rfind
std::u32string_view::find_first_of =&gt; cpp/string/basic_string_view/find_first_of
std::u32string_view::find_last_of =&gt; cpp/string/basic_string_view/find_last_of
std::u32string_view::find_first_not_of =&gt; cpp/string/basic_string_view/find_first_not_of
std::u32string_view::find_last_not_of =&gt; cpp/string/basic_string_view/find_last_not_of
std::u32string_view::npos =&gt; cpp/string/basic_string_view/npos
operator==(std::u32string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator!=(std::u32string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;(std::u32string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;=(std::u32string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;(std::u32string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&gt;=(std::u32string_view) =&gt; cpp/string/basic_string_view/operator_cmp
operator&lt;&lt;(std::u32string_view) =&gt; cpp/string/basic_string_view/operator_ltlt
std::hash&lt;std::u32string_view&gt; =&gt; cpp/string/basic_string_view/hash
std::getline =&gt; cpp/string/basic_string/getline
std::stoi =&gt; cpp/string/basic_string/stol
std::stol =&gt; cpp/string/basic_string/stol
std::stoll =&gt; cpp/string/basic_string/stol
std::stoul =&gt; cpp/string/basic_string/stoul
std::stoull =&gt; cpp/string/basic_string/stoul
std::stof =&gt; cpp/string/basic_string/stof
std::stod =&gt; cpp/string/basic_string/stof
std::stold =&gt; cpp/string/basic_string/stof
std::to_string =&gt; cpp/string/basic_string/to_string
std::to_wstring =&gt; cpp/string/basic_string/to_wstring
std::char_traits =&gt; cpp/string/char_traits
std::char_traits::assign =&gt; cpp/string/char_traits/assign
std::char_traits::eq =&gt; cpp/string/char_traits/cmp
std::char_traits::lt =&gt; cpp/string/char_traits/cmp
std::char_traits::move =&gt; cpp/string/char_traits/move
std::char_traits::copy =&gt; cpp/string/char_traits/copy
std::char_traits::compare =&gt; cpp/string/char_traits/compare
std::char_traits::length =&gt; cpp/string/char_traits/length
std::char_traits::find =&gt; cpp/string/char_traits/find
std::char_traits::to_char_type =&gt; cpp/string/char_traits/to_char_type
std::char_traits::to_int_type =&gt; cpp/string/char_traits/to_int_type
std::char_traits::eq_int_type =&gt; cpp/string/char_traits/eq_int_type
std::char_traits::eof =&gt; cpp/string/char_traits/eof
std::char_traits::not_eof =&gt; cpp/string/char_traits/not_eof
std::array =&gt; cpp/container/array
std::array::at =&gt; cpp/container/array/at
std::array::operator[] =&gt; cpp/container/array/operator_at
std::array::front =&gt; cpp/container/array/front
std::array::back =&gt; cpp/container/array/back
std::array::data =&gt; cpp/container/array/data
std::array::begin =&gt; cpp/container/array/begin
std::array::cbegin =&gt; cpp/container/array/begin
std::array::end =&gt; cpp/container/array/end
std::array::cend =&gt; cpp/container/array/end
std::array::rbegin =&gt; cpp/container/array/rbegin
std::array::crbegin =&gt; cpp/container/array/rbegin
std::array::rend =&gt; cpp/container/array/rend
std::array::crend =&gt; cpp/container/array/rend
std::array::empty =&gt; cpp/container/array/empty
std::array::size =&gt; cpp/container/array/size
std::array::max_size =&gt; cpp/container/array/max_size
std::array::fill =&gt; cpp/container/array/fill
std::array::swap =&gt; cpp/container/array/swap
operator==(std::array) =&gt; cpp/container/array/operator_cmp
operator!=(std::array) =&gt; cpp/container/array/operator_cmp
operator&lt;(std::array) =&gt; cpp/container/array/operator_cmp
operator&lt;=(std::array) =&gt; cpp/container/array/operator_cmp
operator&gt;(std::array) =&gt; cpp/container/array/operator_cmp
operator&gt;=(std::array) =&gt; cpp/container/array/operator_cmp
std::swap(std::array) =&gt; cpp/container/array/swap2
std::get(std::array) =&gt; cpp/container/array/get
std::tuple_size&lt;std::array&gt; =&gt; cpp/container/array/tuple_size
std::tuple_element&lt;std::array&gt; =&gt; cpp/container/array/tuple_element
std::vector =&gt; cpp/container/vector
std::vector::vector =&gt; cpp/container/vector/vector
std::vector::~vector =&gt; cpp/container/vector/~vector
std::vector::operator= =&gt; cpp/container/vector/operator=
std::vector::assign =&gt; cpp/container/vector/assign
std::vector::get_allocator =&gt; cpp/container/vector/get_allocator
std::vector::at =&gt; cpp/container/vector/at
std::vector::operator[] =&gt; cpp/container/vector/operator_at
std::vector::front =&gt; cpp/container/vector/front
std::vector::back =&gt; cpp/container/vector/back
std::vector::data =&gt; cpp/container/vector/data
std::vector::begin =&gt; cpp/container/vector/begin
std::vector::cbegin =&gt; cpp/container/vector/begin
std::vector::end =&gt; cpp/container/vector/end
std::vector::cend =&gt; cpp/container/vector/end
std::vector::rbegin =&gt; cpp/container/vector/rbegin
std::vector::crbegin =&gt; cpp/container/vector/rbegin
std::vector::rend =&gt; cpp/container/vector/rend
std::vector::crend =&gt; cpp/container/vector/rend
std::vector::empty =&gt; cpp/container/vector/empty
std::vector::size =&gt; cpp/container/vector/size
std::vector::max_size =&gt; cpp/container/vector/max_size
std::vector::reserve =&gt; cpp/container/vector/reserve
std::vector::capacity =&gt; cpp/container/vector/capacity
std::vector::shrink_to_fit =&gt; cpp/container/vector/shrink_to_fit
std::vector::clear =&gt; cpp/container/vector/clear
std::vector::insert =&gt; cpp/container/vector/insert
std::vector::emplace =&gt; cpp/container/vector/emplace
std::vector::erase =&gt; cpp/container/vector/erase
std::vector::push_back =&gt; cpp/container/vector/push_back
std::vector::emplace_back =&gt; cpp/container/vector/emplace_back
std::vector::pop_back =&gt; cpp/container/vector/pop_back
std::vector::resize =&gt; cpp/container/vector/resize
std::vector::swap =&gt; cpp/container/vector/swap
operator==(std::vector) =&gt; cpp/container/vector/operator_cmp
operator!=(std::vector) =&gt; cpp/container/vector/operator_cmp
operator&lt;(std::vector) =&gt; cpp/container/vector/operator_cmp
operator&lt;=(std::vector) =&gt; cpp/container/vector/operator_cmp
operator&gt;(std::vector) =&gt; cpp/container/vector/operator_cmp
operator&gt;=(std::vector) =&gt; cpp/container/vector/operator_cmp
std::swap(std::vector) =&gt; cpp/container/vector/swap2
std::pmr::vector =&gt; cpp/container/vector
std::pmr::vector::vector =&gt; cpp/container/vector/vector
std::pmr::vector::~vector =&gt; cpp/container/vector/~vector
std::pmr::vector::operator= =&gt; cpp/container/vector/operator=
std::pmr::vector::assign =&gt; cpp/container/vector/assign
std::pmr::vector::get_allocator =&gt; cpp/container/vector/get_allocator
std::pmr::vector::at =&gt; cpp/container/vector/at
std::pmr::vector::operator[] =&gt; cpp/container/vector/operator_at
std::pmr::vector::front =&gt; cpp/container/vector/front
std::pmr::vector::back =&gt; cpp/container/vector/back
std::pmr::vector::data =&gt; cpp/container/vector/data
std::pmr::vector::begin =&gt; cpp/container/vector/begin
std::pmr::vector::cbegin =&gt; cpp/container/vector/begin
std::pmr::vector::end =&gt; cpp/container/vector/end
std::pmr::vector::cend =&gt; cpp/container/vector/end
std::pmr::vector::rbegin =&gt; cpp/container/vector/rbegin
std::pmr::vector::crbegin =&gt; cpp/container/vector/rbegin
std::pmr::vector::rend =&gt; cpp/container/vector/rend
std::pmr::vector::crend =&gt; cpp/container/vector/rend
std::pmr::vector::empty =&gt; cpp/container/vector/empty
std::pmr::vector::size =&gt; cpp/container/vector/size
std::pmr::vector::max_size =&gt; cpp/container/vector/max_size
std::pmr::vector::reserve =&gt; cpp/container/vector/reserve
std::pmr::vector::capacity =&gt; cpp/container/vector/capacity
std::pmr::vector::shrink_to_fit =&gt; cpp/container/vector/shrink_to_fit
std::pmr::vector::clear =&gt; cpp/container/vector/clear
std::pmr::vector::insert =&gt; cpp/container/vector/insert
std::pmr::vector::emplace =&gt; cpp/container/vector/emplace
std::pmr::vector::erase =&gt; cpp/container/vector/erase
std::pmr::vector::push_back =&gt; cpp/container/vector/push_back
std::pmr::vector::emplace_back =&gt; cpp/container/vector/emplace_back
std::pmr::vector::pop_back =&gt; cpp/container/vector/pop_back
std::pmr::vector::resize =&gt; cpp/container/vector/resize
std::pmr::vector::swap =&gt; cpp/container/vector/swap
operator==(std::pmr::vector) =&gt; cpp/container/vector/operator_cmp
operator!=(std::pmr::vector) =&gt; cpp/container/vector/operator_cmp
operator&lt;(std::pmr::vector) =&gt; cpp/container/vector/operator_cmp
operator&lt;=(std::pmr::vector) =&gt; cpp/container/vector/operator_cmp
operator&gt;(std::pmr::vector) =&gt; cpp/container/vector/operator_cmp
operator&gt;=(std::pmr::vector) =&gt; cpp/container/vector/operator_cmp
std::swap(std::pmr::vector) =&gt; cpp/container/vector/swap2
std::deque =&gt; cpp/container/deque
std::deque::deque =&gt; cpp/container/deque/deque
std::deque::~deque =&gt; cpp/container/deque/~deque
std::deque::operator= =&gt; cpp/container/deque/operator=
std::deque::assign =&gt; cpp/container/deque/assign
std::deque::get_allocator =&gt; cpp/container/deque/get_allocator
std::deque::at =&gt; cpp/container/deque/at
std::deque::operator[] =&gt; cpp/container/deque/operator_at
std::deque::front =&gt; cpp/container/deque/front
std::deque::back =&gt; cpp/container/deque/back
std::deque::begin =&gt; cpp/container/deque/begin
std::deque::cbegin =&gt; cpp/container/deque/begin
std::deque::end =&gt; cpp/container/deque/end
std::deque::cend =&gt; cpp/container/deque/end
std::deque::rbegin =&gt; cpp/container/deque/rbegin
std::deque::crbegin =&gt; cpp/container/deque/rbegin
std::deque::rend =&gt; cpp/container/deque/rend
std::deque::crend =&gt; cpp/container/deque/rend
std::deque::empty =&gt; cpp/container/deque/empty
std::deque::size =&gt; cpp/container/deque/size
std::deque::max_size =&gt; cpp/container/deque/max_size
std::deque::shrink_to_fit =&gt; cpp/container/deque/shrink_to_fit
std::deque::clear =&gt; cpp/container/deque/clear
std::deque::insert =&gt; cpp/container/deque/insert
std::deque::emplace =&gt; cpp/container/deque/emplace
std::deque::erase =&gt; cpp/container/deque/erase
std::deque::push_back =&gt; cpp/container/deque/push_back
std::deque::emplace_back =&gt; cpp/container/deque/emplace_back
std::deque::pop_back =&gt; cpp/container/deque/pop_back
std::deque::push_front =&gt; cpp/container/deque/push_front
std::deque::emplace_front =&gt; cpp/container/deque/emplace_front
std::deque::pop_front =&gt; cpp/container/deque/pop_front
std::deque::resize =&gt; cpp/container/deque/resize
std::deque::swap =&gt; cpp/container/deque/swap
operator==(std::deque) =&gt; cpp/container/deque/operator_cmp
operator!=(std::deque) =&gt; cpp/container/deque/operator_cmp
operator&lt;(std::deque) =&gt; cpp/container/deque/operator_cmp
operator&lt;=(std::deque) =&gt; cpp/container/deque/operator_cmp
operator&gt;(std::deque) =&gt; cpp/container/deque/operator_cmp
operator&gt;=(std::deque) =&gt; cpp/container/deque/operator_cmp
std::swap(std::deque) =&gt; cpp/container/deque/swap2
std::pmr::deque =&gt; cpp/container/deque
std::pmr::deque::deque =&gt; cpp/container/deque/deque
std::pmr::deque::~deque =&gt; cpp/container/deque/~deque
std::pmr::deque::operator= =&gt; cpp/container/deque/operator=
std::pmr::deque::assign =&gt; cpp/container/deque/assign
std::pmr::deque::get_allocator =&gt; cpp/container/deque/get_allocator
std::pmr::deque::at =&gt; cpp/container/deque/at
std::pmr::deque::operator[] =&gt; cpp/container/deque/operator_at
std::pmr::deque::front =&gt; cpp/container/deque/front
std::pmr::deque::back =&gt; cpp/container/deque/back
std::pmr::deque::begin =&gt; cpp/container/deque/begin
std::pmr::deque::cbegin =&gt; cpp/container/deque/begin
std::pmr::deque::end =&gt; cpp/container/deque/end
std::pmr::deque::cend =&gt; cpp/container/deque/end
std::pmr::deque::rbegin =&gt; cpp/container/deque/rbegin
std::pmr::deque::crbegin =&gt; cpp/container/deque/rbegin
std::pmr::deque::rend =&gt; cpp/container/deque/rend
std::pmr::deque::crend =&gt; cpp/container/deque/rend
std::pmr::deque::empty =&gt; cpp/container/deque/empty
std::pmr::deque::size =&gt; cpp/container/deque/size
std::pmr::deque::max_size =&gt; cpp/container/deque/max_size
std::pmr::deque::shrink_to_fit =&gt; cpp/container/deque/shrink_to_fit
std::pmr::deque::clear =&gt; cpp/container/deque/clear
std::pmr::deque::insert =&gt; cpp/container/deque/insert
std::pmr::deque::emplace =&gt; cpp/container/deque/emplace
std::pmr::deque::erase =&gt; cpp/container/deque/erase
std::pmr::deque::push_back =&gt; cpp/container/deque/push_back
std::pmr::deque::emplace_back =&gt; cpp/container/deque/emplace_back
std::pmr::deque::pop_back =&gt; cpp/container/deque/pop_back
std::pmr::deque::push_front =&gt; cpp/container/deque/push_front
std::pmr::deque::emplace_front =&gt; cpp/container/deque/emplace_front
std::pmr::deque::pop_front =&gt; cpp/container/deque/pop_front
std::pmr::deque::resize =&gt; cpp/container/deque/resize
std::pmr::deque::swap =&gt; cpp/container/deque/swap
operator==(std::pmr::deque) =&gt; cpp/container/deque/operator_cmp
operator!=(std::pmr::deque) =&gt; cpp/container/deque/operator_cmp
operator&lt;(std::pmr::deque) =&gt; cpp/container/deque/operator_cmp
operator&lt;=(std::pmr::deque) =&gt; cpp/container/deque/operator_cmp
operator&gt;(std::pmr::deque) =&gt; cpp/container/deque/operator_cmp
operator&gt;=(std::pmr::deque) =&gt; cpp/container/deque/operator_cmp
std::swap(std::pmr::deque) =&gt; cpp/container/deque/swap2
std::forward_list =&gt; cpp/container/forward_list
std::forward_list::forward_list =&gt; cpp/container/forward_list/forward_list
std::forward_list::~forward_list =&gt; cpp/container/forward_list/~forward_list
std::forward_list::operator= =&gt; cpp/container/forward_list/operator=
std::forward_list::assign =&gt; cpp/container/forward_list/assign
std::forward_list::get_allocator =&gt; cpp/container/forward_list/get_allocator
std::forward_list::front =&gt; cpp/container/forward_list/front
std::forward_list::before_begin =&gt; cpp/container/forward_list/before_begin
std::forward_list::cbefore_begin =&gt; cpp/container/forward_list/before_begin
std::forward_list::begin =&gt; cpp/container/forward_list/begin
std::forward_list::cbegin =&gt; cpp/container/forward_list/begin
std::forward_list::end =&gt; cpp/container/forward_list/end
std::forward_list::cend =&gt; cpp/container/forward_list/end
std::forward_list::empty =&gt; cpp/container/forward_list/empty
std::forward_list::max_size =&gt; cpp/container/forward_list/max_size
std::forward_list::clear =&gt; cpp/container/forward_list/clear
std::forward_list::insert_after =&gt; cpp/container/forward_list/insert_after
std::forward_list::emplace_after =&gt; cpp/container/forward_list/emplace_after
std::forward_list::erase_after =&gt; cpp/container/forward_list/erase_after
std::forward_list::push_front =&gt; cpp/container/forward_list/push_front
std::forward_list::emplace_front =&gt; cpp/container/forward_list/emplace_front
std::forward_list::pop_front =&gt; cpp/container/forward_list/pop_front
std::forward_list::resize =&gt; cpp/container/forward_list/resize
std::forward_list::swap =&gt; cpp/container/forward_list/swap
std::forward_list::merge =&gt; cpp/container/forward_list/merge
std::forward_list::splice_after =&gt; cpp/container/forward_list/splice_after
std::forward_list::remove =&gt; cpp/container/forward_list/remove
std::forward_list::remove_if =&gt; cpp/container/forward_list/remove
std::forward_list::reverse =&gt; cpp/container/forward_list/reverse
std::forward_list::unique =&gt; cpp/container/forward_list/unique
std::forward_list::sort =&gt; cpp/container/forward_list/sort
operator==(std::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator!=(std::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&lt;(std::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&lt;=(std::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&gt;(std::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&gt;=(std::forward_list) =&gt; cpp/container/forward_list/operator_cmp
std::swap(std::forward_list) =&gt; cpp/container/forward_list/swap2
std::pmr::forward_list =&gt; cpp/container/forward_list
std::pmr::forward_list::forward_list =&gt; cpp/container/forward_list/forward_list
std::pmr::forward_list::~forward_list =&gt; cpp/container/forward_list/~forward_list
std::pmr::forward_list::operator= =&gt; cpp/container/forward_list/operator=
std::pmr::forward_list::assign =&gt; cpp/container/forward_list/assign
std::pmr::forward_list::get_allocator =&gt; cpp/container/forward_list/get_allocator
std::pmr::forward_list::front =&gt; cpp/container/forward_list/front
std::pmr::forward_list::before_begin =&gt; cpp/container/forward_list/before_begin
std::pmr::forward_list::cbefore_begin =&gt; cpp/container/forward_list/before_begin
std::pmr::forward_list::begin =&gt; cpp/container/forward_list/begin
std::pmr::forward_list::cbegin =&gt; cpp/container/forward_list/begin
std::pmr::forward_list::end =&gt; cpp/container/forward_list/end
std::pmr::forward_list::cend =&gt; cpp/container/forward_list/end
std::pmr::forward_list::empty =&gt; cpp/container/forward_list/empty
std::pmr::forward_list::max_size =&gt; cpp/container/forward_list/max_size
std::pmr::forward_list::clear =&gt; cpp/container/forward_list/clear
std::pmr::forward_list::insert_after =&gt; cpp/container/forward_list/insert_after
std::pmr::forward_list::emplace_after =&gt; cpp/container/forward_list/emplace_after
std::pmr::forward_list::erase_after =&gt; cpp/container/forward_list/erase_after
std::pmr::forward_list::push_front =&gt; cpp/container/forward_list/push_front
std::pmr::forward_list::emplace_front =&gt; cpp/container/forward_list/emplace_front
std::pmr::forward_list::pop_front =&gt; cpp/container/forward_list/pop_front
std::pmr::forward_list::resize =&gt; cpp/container/forward_list/resize
std::pmr::forward_list::swap =&gt; cpp/container/forward_list/swap
std::pmr::forward_list::merge =&gt; cpp/container/forward_list/merge
std::pmr::forward_list::splice_after =&gt; cpp/container/forward_list/splice_after
std::pmr::forward_list::remove =&gt; cpp/container/forward_list/remove
std::pmr::forward_list::remove_if =&gt; cpp/container/forward_list/remove
std::pmr::forward_list::reverse =&gt; cpp/container/forward_list/reverse
std::pmr::forward_list::unique =&gt; cpp/container/forward_list/unique
std::pmr::forward_list::sort =&gt; cpp/container/forward_list/sort
operator==(std::pmr::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator!=(std::pmr::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&lt;(std::pmr::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&lt;=(std::pmr::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&gt;(std::pmr::forward_list) =&gt; cpp/container/forward_list/operator_cmp
operator&gt;=(std::pmr::forward_list) =&gt; cpp/container/forward_list/operator_cmp
std::swap(std::pmr::forward_list) =&gt; cpp/container/forward_list/swap2
std::list =&gt; cpp/container/list
std::list::list =&gt; cpp/container/list/list
std::list::~list =&gt; cpp/container/list/~list
std::list::operator= =&gt; cpp/container/list/operator=
std::list::assign =&gt; cpp/container/list/assign
std::list::get_allocator =&gt; cpp/container/list/get_allocator
std::list::front =&gt; cpp/container/list/front
std::list::back =&gt; cpp/container/list/back
std::list::begin =&gt; cpp/container/list/begin
std::list::cbegin =&gt; cpp/container/list/begin
std::list::end =&gt; cpp/container/list/end
std::list::cend =&gt; cpp/container/list/end
std::list::rbegin =&gt; cpp/container/list/rbegin
std::list::crbegin =&gt; cpp/container/list/rbegin
std::list::rend =&gt; cpp/container/list/rend
std::list::crend =&gt; cpp/container/list/rend
std::list::empty =&gt; cpp/container/list/empty
std::list::size =&gt; cpp/container/list/size
std::list::max_size =&gt; cpp/container/list/max_size
std::list::clear =&gt; cpp/container/list/clear
std::list::insert =&gt; cpp/container/list/insert
std::list::emplace =&gt; cpp/container/list/emplace
std::list::erase =&gt; cpp/container/list/erase
std::list::push_back =&gt; cpp/container/list/push_back
std::list::emplace_back =&gt; cpp/container/list/emplace_back
std::list::pop_back =&gt; cpp/container/list/pop_back
std::list::push_front =&gt; cpp/container/list/push_front
std::list::emplace_front =&gt; cpp/container/list/emplace_front
std::list::pop_front =&gt; cpp/container/list/pop_front
std::list::resize =&gt; cpp/container/list/resize
std::list::swap =&gt; cpp/container/list/swap
std::list::merge =&gt; cpp/container/list/merge
std::list::splice =&gt; cpp/container/list/splice
std::list::remove =&gt; cpp/container/list/remove
std::list::remove_if =&gt; cpp/container/list/remove
std::list::reverse =&gt; cpp/container/list/reverse
std::list::unique =&gt; cpp/container/list/unique
std::list::sort =&gt; cpp/container/list/sort
operator==(std::list) =&gt; cpp/container/list/operator_cmp
operator!=(std::list) =&gt; cpp/container/list/operator_cmp
operator&lt;(std::list) =&gt; cpp/container/list/operator_cmp
operator&lt;=(std::list) =&gt; cpp/container/list/operator_cmp
operator&gt;(std::list) =&gt; cpp/container/list/operator_cmp
operator&gt;=(std::list) =&gt; cpp/container/list/operator_cmp
std::swap(std::list) =&gt; cpp/container/list/swap2
std::pmr::list =&gt; cpp/container/list
std::pmr::list::list =&gt; cpp/container/list/list
std::pmr::list::~list =&gt; cpp/container/list/~list
std::pmr::list::operator= =&gt; cpp/container/list/operator=
std::pmr::list::assign =&gt; cpp/container/list/assign
std::pmr::list::get_allocator =&gt; cpp/container/list/get_allocator
std::pmr::list::front =&gt; cpp/container/list/front
std::pmr::list::back =&gt; cpp/container/list/back
std::pmr::list::begin =&gt; cpp/container/list/begin
std::pmr::list::cbegin =&gt; cpp/container/list/begin
std::pmr::list::end =&gt; cpp/container/list/end
std::pmr::list::cend =&gt; cpp/container/list/end
std::pmr::list::rbegin =&gt; cpp/container/list/rbegin
std::pmr::list::crbegin =&gt; cpp/container/list/rbegin
std::pmr::list::rend =&gt; cpp/container/list/rend
std::pmr::list::crend =&gt; cpp/container/list/rend
std::pmr::list::empty =&gt; cpp/container/list/empty
std::pmr::list::size =&gt; cpp/container/list/size
std::pmr::list::max_size =&gt; cpp/container/list/max_size
std::pmr::list::clear =&gt; cpp/container/list/clear
std::pmr::list::insert =&gt; cpp/container/list/insert
std::pmr::list::emplace =&gt; cpp/container/list/emplace
std::pmr::list::erase =&gt; cpp/container/list/erase
std::pmr::list::push_back =&gt; cpp/container/list/push_back
std::pmr::list::emplace_back =&gt; cpp/container/list/emplace_back
std::pmr::list::pop_back =&gt; cpp/container/list/pop_back
std::pmr::list::push_front =&gt; cpp/container/list/push_front
std::pmr::list::emplace_front =&gt; cpp/container/list/emplace_front
std::pmr::list::pop_front =&gt; cpp/container/list/pop_front
std::pmr::list::resize =&gt; cpp/container/list/resize
std::pmr::list::swap =&gt; cpp/container/list/swap
std::pmr::list::merge =&gt; cpp/container/list/merge
std::pmr::list::splice =&gt; cpp/container/list/splice
std::pmr::list::remove =&gt; cpp/container/list/remove
std::pmr::list::remove_if =&gt; cpp/container/list/remove
std::pmr::list::reverse =&gt; cpp/container/list/reverse
std::pmr::list::unique =&gt; cpp/container/list/unique
std::pmr::list::sort =&gt; cpp/container/list/sort
operator==(std::pmr::list) =&gt; cpp/container/list/operator_cmp
operator!=(std::pmr::list) =&gt; cpp/container/list/operator_cmp
operator&lt;(std::pmr::list) =&gt; cpp/container/list/operator_cmp
operator&lt;=(std::pmr::list) =&gt; cpp/container/list/operator_cmp
operator&gt;(std::pmr::list) =&gt; cpp/container/list/operator_cmp
operator&gt;=(std::pmr::list) =&gt; cpp/container/list/operator_cmp
std::swap(std::pmr::list) =&gt; cpp/container/list/swap2
std::set =&gt; cpp/container/set
std::set::set =&gt; cpp/container/set/set
std::set::~set =&gt; cpp/container/set/~set
std::set::operator= =&gt; cpp/container/set/operator=
std::set::get_allocator =&gt; cpp/container/set/get_allocator
std::set::begin =&gt; cpp/container/set/begin
std::set::cbegin =&gt; cpp/container/set/begin
std::set::end =&gt; cpp/container/set/end
std::set::cend =&gt; cpp/container/set/end
std::set::rbegin =&gt; cpp/container/set/rbegin
std::set::crbegin =&gt; cpp/container/set/rbegin
std::set::rend =&gt; cpp/container/set/rend
std::set::crend =&gt; cpp/container/set/rend
std::set::empty =&gt; cpp/container/set/empty
std::set::size =&gt; cpp/container/set/size
std::set::max_size =&gt; cpp/container/set/max_size
std::set::clear =&gt; cpp/container/set/clear
std::set::insert =&gt; cpp/container/set/insert
std::set::emplace =&gt; cpp/container/set/emplace
std::set::emplace_hint =&gt; cpp/container/set/emplace_hint
std::set::erase =&gt; cpp/container/set/erase
std::set::swap =&gt; cpp/container/set/swap
std::set::extract =&gt; cpp/container/set/extract
std::set::merge =&gt; cpp/container/set/merge
std::set::count =&gt; cpp/container/set/count
std::set::find =&gt; cpp/container/set/find
std::set::equal_range =&gt; cpp/container/set/equal_range
std::set::lower_bound =&gt; cpp/container/set/lower_bound
std::set::upper_bound =&gt; cpp/container/set/upper_bound
std::set::key_comp =&gt; cpp/container/set/key_comp
std::set::value_comp =&gt; cpp/container/set/value_comp
operator==(std::set) =&gt; cpp/container/set/operator_cmp
operator!=(std::set) =&gt; cpp/container/set/operator_cmp
operator&lt;(std::set) =&gt; cpp/container/set/operator_cmp
operator&lt;=(std::set) =&gt; cpp/container/set/operator_cmp
operator&gt;(std::set) =&gt; cpp/container/set/operator_cmp
operator&gt;=(std::set) =&gt; cpp/container/set/operator_cmp
std::swap(std::set) =&gt; cpp/container/set/swap2
std::pmr::set =&gt; cpp/container/set
std::pmr::set::set =&gt; cpp/container/set/set
std::pmr::set::~set =&gt; cpp/container/set/~set
std::pmr::set::operator= =&gt; cpp/container/set/operator=
std::pmr::set::get_allocator =&gt; cpp/container/set/get_allocator
std::pmr::set::begin =&gt; cpp/container/set/begin
std::pmr::set::cbegin =&gt; cpp/container/set/begin
std::pmr::set::end =&gt; cpp/container/set/end
std::pmr::set::cend =&gt; cpp/container/set/end
std::pmr::set::rbegin =&gt; cpp/container/set/rbegin
std::pmr::set::crbegin =&gt; cpp/container/set/rbegin
std::pmr::set::rend =&gt; cpp/container/set/rend
std::pmr::set::crend =&gt; cpp/container/set/rend
std::pmr::set::empty =&gt; cpp/container/set/empty
std::pmr::set::size =&gt; cpp/container/set/size
std::pmr::set::max_size =&gt; cpp/container/set/max_size
std::pmr::set::clear =&gt; cpp/container/set/clear
std::pmr::set::insert =&gt; cpp/container/set/insert
std::pmr::set::emplace =&gt; cpp/container/set/emplace
std::pmr::set::emplace_hint =&gt; cpp/container/set/emplace_hint
std::pmr::set::erase =&gt; cpp/container/set/erase
std::pmr::set::swap =&gt; cpp/container/set/swap
std::pmr::set::extract =&gt; cpp/container/set/extract
std::pmr::set::merge =&gt; cpp/container/set/merge
std::pmr::set::count =&gt; cpp/container/set/count
std::pmr::set::find =&gt; cpp/container/set/find
std::pmr::set::equal_range =&gt; cpp/container/set/equal_range
std::pmr::set::lower_bound =&gt; cpp/container/set/lower_bound
std::pmr::set::upper_bound =&gt; cpp/container/set/upper_bound
std::pmr::set::key_comp =&gt; cpp/container/set/key_comp
std::pmr::set::value_comp =&gt; cpp/container/set/value_comp
operator==(std::pmr::set) =&gt; cpp/container/set/operator_cmp
operator!=(std::pmr::set) =&gt; cpp/container/set/operator_cmp
operator&lt;(std::pmr::set) =&gt; cpp/container/set/operator_cmp
operator&lt;=(std::pmr::set) =&gt; cpp/container/set/operator_cmp
operator&gt;(std::pmr::set) =&gt; cpp/container/set/operator_cmp
operator&gt;=(std::pmr::set) =&gt; cpp/container/set/operator_cmp
std::swap(std::pmr::set) =&gt; cpp/container/set/swap2
std::multiset =&gt; cpp/container/multiset
std::multiset::multiset =&gt; cpp/container/multiset/multiset
std::multiset::~multiset =&gt; cpp/container/multiset/~multiset
std::multiset::operator= =&gt; cpp/container/multiset/operator=
std::multiset::get_allocator =&gt; cpp/container/multiset/get_allocator
std::multiset::begin =&gt; cpp/container/multiset/begin
std::multiset::cbegin =&gt; cpp/container/multiset/begin
std::multiset::end =&gt; cpp/container/multiset/end
std::multiset::cend =&gt; cpp/container/multiset/end
std::multiset::rbegin =&gt; cpp/container/multiset/rbegin
std::multiset::crbegin =&gt; cpp/container/multiset/rbegin
std::multiset::rend =&gt; cpp/container/multiset/rend
std::multiset::crend =&gt; cpp/container/multiset/rend
std::multiset::empty =&gt; cpp/container/multiset/empty
std::multiset::size =&gt; cpp/container/multiset/size
std::multiset::max_size =&gt; cpp/container/multiset/max_size
std::multiset::clear =&gt; cpp/container/multiset/clear
std::multiset::insert =&gt; cpp/container/multiset/insert
std::multiset::emplace =&gt; cpp/container/multiset/emplace
std::multiset::emplace_hint =&gt; cpp/container/multiset/emplace_hint
std::multiset::erase =&gt; cpp/container/multiset/erase
std::multiset::swap =&gt; cpp/container/multiset/swap
std::multiset::extract =&gt; cpp/container/multiset/extract
std::multiset::merge =&gt; cpp/container/multiset/merge
std::multiset::count =&gt; cpp/container/multiset/count
std::multiset::find =&gt; cpp/container/multiset/find
std::multiset::equal_range =&gt; cpp/container/multiset/equal_range
std::multiset::lower_bound =&gt; cpp/container/multiset/lower_bound
std::multiset::upper_bound =&gt; cpp/container/multiset/upper_bound
std::multiset::key_comp =&gt; cpp/container/multiset/key_comp
std::multiset::value_comp =&gt; cpp/container/multiset/value_comp
operator==(std::multiset) =&gt; cpp/container/multiset/operator_cmp
operator!=(std::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&lt;(std::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&lt;=(std::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&gt;(std::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&gt;=(std::multiset) =&gt; cpp/container/multiset/operator_cmp
std::swap(std::multiset) =&gt; cpp/container/multiset/swap2
std::pmr::multiset =&gt; cpp/container/multiset
std::pmr::multiset::multiset =&gt; cpp/container/multiset/multiset
std::pmr::multiset::~multiset =&gt; cpp/container/multiset/~multiset
std::pmr::multiset::operator= =&gt; cpp/container/multiset/operator=
std::pmr::multiset::get_allocator =&gt; cpp/container/multiset/get_allocator
std::pmr::multiset::begin =&gt; cpp/container/multiset/begin
std::pmr::multiset::cbegin =&gt; cpp/container/multiset/begin
std::pmr::multiset::end =&gt; cpp/container/multiset/end
std::pmr::multiset::cend =&gt; cpp/container/multiset/end
std::pmr::multiset::rbegin =&gt; cpp/container/multiset/rbegin
std::pmr::multiset::crbegin =&gt; cpp/container/multiset/rbegin
std::pmr::multiset::rend =&gt; cpp/container/multiset/rend
std::pmr::multiset::crend =&gt; cpp/container/multiset/rend
std::pmr::multiset::empty =&gt; cpp/container/multiset/empty
std::pmr::multiset::size =&gt; cpp/container/multiset/size
std::pmr::multiset::max_size =&gt; cpp/container/multiset/max_size
std::pmr::multiset::clear =&gt; cpp/container/multiset/clear
std::pmr::multiset::insert =&gt; cpp/container/multiset/insert
std::pmr::multiset::emplace =&gt; cpp/container/multiset/emplace
std::pmr::multiset::emplace_hint =&gt; cpp/container/multiset/emplace_hint
std::pmr::multiset::erase =&gt; cpp/container/multiset/erase
std::pmr::multiset::swap =&gt; cpp/container/multiset/swap
std::pmr::multiset::extract =&gt; cpp/container/multiset/extract
std::pmr::multiset::merge =&gt; cpp/container/multiset/merge
std::pmr::multiset::count =&gt; cpp/container/multiset/count
std::pmr::multiset::find =&gt; cpp/container/multiset/find
std::pmr::multiset::equal_range =&gt; cpp/container/multiset/equal_range
std::pmr::multiset::lower_bound =&gt; cpp/container/multiset/lower_bound
std::pmr::multiset::upper_bound =&gt; cpp/container/multiset/upper_bound
std::pmr::multiset::key_comp =&gt; cpp/container/multiset/key_comp
std::pmr::multiset::value_comp =&gt; cpp/container/multiset/value_comp
operator==(std::pmr::multiset) =&gt; cpp/container/multiset/operator_cmp
operator!=(std::pmr::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&lt;(std::pmr::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&lt;=(std::pmr::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&gt;(std::pmr::multiset) =&gt; cpp/container/multiset/operator_cmp
operator&gt;=(std::pmr::multiset) =&gt; cpp/container/multiset/operator_cmp
std::swap(std::pmr::multiset) =&gt; cpp/container/multiset/swap2
std::map =&gt; cpp/container/map
std::map::value_compare =&gt; cpp/container/map/value_compare
std::map::map =&gt; cpp/container/map/map
std::map::~map =&gt; cpp/container/map/~map
std::map::operator= =&gt; cpp/container/map/operator=
std::map::get_allocator =&gt; cpp/container/map/get_allocator
std::map::at =&gt; cpp/container/map/at
std::map::operator[] =&gt; cpp/container/map/operator_at
std::map::begin =&gt; cpp/container/map/begin
std::map::cbegin =&gt; cpp/container/map/begin
std::map::end =&gt; cpp/container/map/end
std::map::cend =&gt; cpp/container/map/end
std::map::rbegin =&gt; cpp/container/map/rbegin
std::map::crbegin =&gt; cpp/container/map/rbegin
std::map::rend =&gt; cpp/container/map/rend
std::map::crend =&gt; cpp/container/map/rend
std::map::empty =&gt; cpp/container/map/empty
std::map::size =&gt; cpp/container/map/size
std::map::max_size =&gt; cpp/container/map/max_size
std::map::clear =&gt; cpp/container/map/clear
std::map::insert =&gt; cpp/container/map/insert
std::map::insert_or_assign =&gt; cpp/container/map/insert_or_assign
std::map::emplace =&gt; cpp/container/map/emplace
std::map::emplace_hint =&gt; cpp/container/map/emplace_hint
std::map::try_emplace =&gt; cpp/container/map/try_emplace
std::map::erase =&gt; cpp/container/map/erase
std::map::swap =&gt; cpp/container/map/swap
std::map::extract =&gt; cpp/container/map/extract
std::map::merge =&gt; cpp/container/map/merge
std::map::count =&gt; cpp/container/map/count
std::map::find =&gt; cpp/container/map/find
std::map::equal_range =&gt; cpp/container/map/equal_range
std::map::lower_bound =&gt; cpp/container/map/lower_bound
std::map::upper_bound =&gt; cpp/container/map/upper_bound
std::map::key_comp =&gt; cpp/container/map/key_comp
std::map::value_comp =&gt; cpp/container/map/value_comp
operator==(std::map) =&gt; cpp/container/map/operator_cmp
operator!=(std::map) =&gt; cpp/container/map/operator_cmp
operator&lt;(std::map) =&gt; cpp/container/map/operator_cmp
operator&lt;=(std::map) =&gt; cpp/container/map/operator_cmp
operator&gt;(std::map) =&gt; cpp/container/map/operator_cmp
operator&gt;=(std::map) =&gt; cpp/container/map/operator_cmp
std::swap(std::map) =&gt; cpp/container/map/swap2
std::pmr::map =&gt; cpp/container/map
std::pmr::map::value_compare =&gt; cpp/container/map/value_compare
std::pmr::map::map =&gt; cpp/container/map/map
std::pmr::map::~map =&gt; cpp/container/map/~map
std::pmr::map::operator= =&gt; cpp/container/map/operator=
std::pmr::map::get_allocator =&gt; cpp/container/map/get_allocator
std::pmr::map::at =&gt; cpp/container/map/at
std::pmr::map::operator[] =&gt; cpp/container/map/operator_at
std::pmr::map::begin =&gt; cpp/container/map/begin
std::pmr::map::cbegin =&gt; cpp/container/map/begin
std::pmr::map::end =&gt; cpp/container/map/end
std::pmr::map::cend =&gt; cpp/container/map/end
std::pmr::map::rbegin =&gt; cpp/container/map/rbegin
std::pmr::map::crbegin =&gt; cpp/container/map/rbegin
std::pmr::map::rend =&gt; cpp/container/map/rend
std::pmr::map::crend =&gt; cpp/container/map/rend
std::pmr::map::empty =&gt; cpp/container/map/empty
std::pmr::map::size =&gt; cpp/container/map/size
std::pmr::map::max_size =&gt; cpp/container/map/max_size
std::pmr::map::clear =&gt; cpp/container/map/clear
std::pmr::map::insert =&gt; cpp/container/map/insert
std::pmr::map::insert_or_assign =&gt; cpp/container/map/insert_or_assign
std::pmr::map::emplace =&gt; cpp/container/map/emplace
std::pmr::map::emplace_hint =&gt; cpp/container/map/emplace_hint
std::pmr::map::try_emplace =&gt; cpp/container/map/try_emplace
std::pmr::map::erase =&gt; cpp/container/map/erase
std::pmr::map::swap =&gt; cpp/container/map/swap
std::pmr::map::extract =&gt; cpp/container/map/extract
std::pmr::map::merge =&gt; cpp/container/map/merge
std::pmr::map::count =&gt; cpp/container/map/count
std::pmr::map::find =&gt; cpp/container/map/find
std::pmr::map::equal_range =&gt; cpp/container/map/equal_range
std::pmr::map::lower_bound =&gt; cpp/container/map/lower_bound
std::pmr::map::upper_bound =&gt; cpp/container/map/upper_bound
std::pmr::map::key_comp =&gt; cpp/container/map/key_comp
std::pmr::map::value_comp =&gt; cpp/container/map/value_comp
operator==(std::pmr::map) =&gt; cpp/container/map/operator_cmp
operator!=(std::pmr::map) =&gt; cpp/container/map/operator_cmp
operator&lt;(std::pmr::map) =&gt; cpp/container/map/operator_cmp
operator&lt;=(std::pmr::map) =&gt; cpp/container/map/operator_cmp
operator&gt;(std::pmr::map) =&gt; cpp/container/map/operator_cmp
operator&gt;=(std::pmr::map) =&gt; cpp/container/map/operator_cmp
std::swap(std::pmr::map) =&gt; cpp/container/map/swap2
std::multimap =&gt; cpp/container/multimap
std::multimap::value_compare =&gt; cpp/container/multimap/value_compare
std::multimap::multimap =&gt; cpp/container/multimap/multimap
std::multimap::~multimap =&gt; cpp/container/multimap/~multimap
std::multimap::operator= =&gt; cpp/container/multimap/operator=
std::multimap::get_allocator =&gt; cpp/container/multimap/get_allocator
std::multimap::begin =&gt; cpp/container/multimap/begin
std::multimap::cbegin =&gt; cpp/container/multimap/begin
std::multimap::end =&gt; cpp/container/multimap/end
std::multimap::cend =&gt; cpp/container/multimap/end
std::multimap::rbegin =&gt; cpp/container/multimap/rbegin
std::multimap::crbegin =&gt; cpp/container/multimap/rbegin
std::multimap::rend =&gt; cpp/container/multimap/rend
std::multimap::crend =&gt; cpp/container/multimap/rend
std::multimap::empty =&gt; cpp/container/multimap/empty
std::multimap::size =&gt; cpp/container/multimap/size
std::multimap::max_size =&gt; cpp/container/multimap/max_size
std::multimap::clear =&gt; cpp/container/multimap/clear
std::multimap::insert =&gt; cpp/container/multimap/insert
std::multimap::emplace =&gt; cpp/container/multimap/emplace
std::multimap::emplace_hint =&gt; cpp/container/multimap/emplace_hint
std::multimap::erase =&gt; cpp/container/multimap/erase
std::multimap::swap =&gt; cpp/container/multimap/swap
std::multimap::extract =&gt; cpp/container/multimap/extract
std::multimap::merge =&gt; cpp/container/multimap/merge
std::multimap::count =&gt; cpp/container/multimap/count
std::multimap::find =&gt; cpp/container/multimap/find
std::multimap::equal_range =&gt; cpp/container/multimap/equal_range
std::multimap::lower_bound =&gt; cpp/container/multimap/lower_bound
std::multimap::upper_bound =&gt; cpp/container/multimap/upper_bound
std::multimap::key_comp =&gt; cpp/container/multimap/key_comp
std::multimap::value_comp =&gt; cpp/container/multimap/value_comp
operator==(std::multimap) =&gt; cpp/container/multimap/operator_cmp
operator!=(std::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&lt;(std::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&lt;=(std::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&gt;(std::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&gt;=(std::multimap) =&gt; cpp/container/multimap/operator_cmp
std::swap(std::multimap) =&gt; cpp/container/multimap/swap2
std::pmr::multimap =&gt; cpp/container/multimap
std::pmr::multimap::value_compare =&gt; cpp/container/multimap/value_compare
std::pmr::multimap::multimap =&gt; cpp/container/multimap/multimap
std::pmr::multimap::~multimap =&gt; cpp/container/multimap/~multimap
std::pmr::multimap::operator= =&gt; cpp/container/multimap/operator=
std::pmr::multimap::get_allocator =&gt; cpp/container/multimap/get_allocator
std::pmr::multimap::begin =&gt; cpp/container/multimap/begin
std::pmr::multimap::cbegin =&gt; cpp/container/multimap/begin
std::pmr::multimap::end =&gt; cpp/container/multimap/end
std::pmr::multimap::cend =&gt; cpp/container/multimap/end
std::pmr::multimap::rbegin =&gt; cpp/container/multimap/rbegin
std::pmr::multimap::crbegin =&gt; cpp/container/multimap/rbegin
std::pmr::multimap::rend =&gt; cpp/container/multimap/rend
std::pmr::multimap::crend =&gt; cpp/container/multimap/rend
std::pmr::multimap::empty =&gt; cpp/container/multimap/empty
std::pmr::multimap::size =&gt; cpp/container/multimap/size
std::pmr::multimap::max_size =&gt; cpp/container/multimap/max_size
std::pmr::multimap::clear =&gt; cpp/container/multimap/clear
std::pmr::multimap::insert =&gt; cpp/container/multimap/insert
std::pmr::multimap::emplace =&gt; cpp/container/multimap/emplace
std::pmr::multimap::emplace_hint =&gt; cpp/container/multimap/emplace_hint
std::pmr::multimap::erase =&gt; cpp/container/multimap/erase
std::pmr::multimap::swap =&gt; cpp/container/multimap/swap
std::pmr::multimap::extract =&gt; cpp/container/multimap/extract
std::pmr::multimap::merge =&gt; cpp/container/multimap/merge
std::pmr::multimap::count =&gt; cpp/container/multimap/count
std::pmr::multimap::find =&gt; cpp/container/multimap/find
std::pmr::multimap::equal_range =&gt; cpp/container/multimap/equal_range
std::pmr::multimap::lower_bound =&gt; cpp/container/multimap/lower_bound
std::pmr::multimap::upper_bound =&gt; cpp/container/multimap/upper_bound
std::pmr::multimap::key_comp =&gt; cpp/container/multimap/key_comp
std::pmr::multimap::value_comp =&gt; cpp/container/multimap/value_comp
operator==(std::pmr::multimap) =&gt; cpp/container/multimap/operator_cmp
operator!=(std::pmr::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&lt;(std::pmr::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&lt;=(std::pmr::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&gt;(std::pmr::multimap) =&gt; cpp/container/multimap/operator_cmp
operator&gt;=(std::pmr::multimap) =&gt; cpp/container/multimap/operator_cmp
std::swap(std::pmr::multimap) =&gt; cpp/container/multimap/swap2
std::unordered_set =&gt; cpp/container/unordered_set
std::unordered_set::unordered_set =&gt; cpp/container/unordered_set/unordered_set
std::unordered_set::~unordered_set =&gt; cpp/container/unordered_set/~unordered_set
std::unordered_set::operator= =&gt; cpp/container/unordered_set/operator=
std::unordered_set::get_allocator =&gt; cpp/container/unordered_set/get_allocator
std::unordered_set::begin =&gt; cpp/container/unordered_set/begin
std::unordered_set::cbegin =&gt; cpp/container/unordered_set/begin
std::unordered_set::end =&gt; cpp/container/unordered_set/end
std::unordered_set::cend =&gt; cpp/container/unordered_set/end
std::unordered_set::empty =&gt; cpp/container/unordered_set/empty
std::unordered_set::size =&gt; cpp/container/unordered_set/size
std::unordered_set::max_size =&gt; cpp/container/unordered_set/max_size
std::unordered_set::clear =&gt; cpp/container/unordered_set/clear
std::unordered_set::insert =&gt; cpp/container/unordered_set/insert
std::unordered_set::emplace =&gt; cpp/container/unordered_set/emplace
std::unordered_set::emplace_hint =&gt; cpp/container/unordered_set/emplace_hint
std::unordered_set::erase =&gt; cpp/container/unordered_set/erase
std::unordered_set::swap =&gt; cpp/container/unordered_set/swap
std::unordered_set::extract =&gt; cpp/container/unordered_set/extract
std::unordered_set::merge =&gt; cpp/container/unordered_set/merge
std::unordered_set::count =&gt; cpp/container/unordered_set/count
std::unordered_set::find =&gt; cpp/container/unordered_set/find
std::unordered_set::equal_range =&gt; cpp/container/unordered_set/equal_range
std::unordered_set::begin(int) =&gt; cpp/container/unordered_set/begin2
std::unordered_set::cbegin(int) =&gt; cpp/container/unordered_set/begin2
std::unordered_set::end(int) =&gt; cpp/container/unordered_set/end2
std::unordered_set::cend(int) =&gt; cpp/container/unordered_set/end2
std::unordered_set::bucket_count =&gt; cpp/container/unordered_set/bucket_count
std::unordered_set::max_bucket_count =&gt; cpp/container/unordered_set/max_bucket_count
std::unordered_set::bucket_size =&gt; cpp/container/unordered_set/bucket_size
std::unordered_set::bucket =&gt; cpp/container/unordered_set/bucket
std::unordered_set::load_factor =&gt; cpp/container/unordered_set/load_factor
std::unordered_set::max_load_factor =&gt; cpp/container/unordered_set/max_load_factor
std::unordered_set::reserve =&gt; cpp/container/unordered_set/reserve
std::unordered_set::rehash =&gt; cpp/container/unordered_set/rehash
std::unordered_set::hash_function =&gt; cpp/container/unordered_set/hash_function
std::unordered_set::key_eq =&gt; cpp/container/unordered_set/key_eq
operator==(std::unordered_set) =&gt; cpp/container/unordered_set/operator_cmp
operator!=(std::unordered_set) =&gt; cpp/container/unordered_set/operator_cmp
std::swap(std::unordered_set) =&gt; cpp/container/unordered_set/swap2
std::pmr::unordered_set =&gt; cpp/container/unordered_set
std::pmr::unordered_set::unordered_set =&gt; cpp/container/unordered_set/unordered_set
std::pmr::unordered_set::~unordered_set =&gt; cpp/container/unordered_set/~unordered_set
std::pmr::unordered_set::operator= =&gt; cpp/container/unordered_set/operator=
std::pmr::unordered_set::get_allocator =&gt; cpp/container/unordered_set/get_allocator
std::pmr::unordered_set::begin =&gt; cpp/container/unordered_set/begin
std::pmr::unordered_set::cbegin =&gt; cpp/container/unordered_set/begin
std::pmr::unordered_set::end =&gt; cpp/container/unordered_set/end
std::pmr::unordered_set::cend =&gt; cpp/container/unordered_set/end
std::pmr::unordered_set::empty =&gt; cpp/container/unordered_set/empty
std::pmr::unordered_set::size =&gt; cpp/container/unordered_set/size
std::pmr::unordered_set::max_size =&gt; cpp/container/unordered_set/max_size
std::pmr::unordered_set::clear =&gt; cpp/container/unordered_set/clear
std::pmr::unordered_set::insert =&gt; cpp/container/unordered_set/insert
std::pmr::unordered_set::emplace =&gt; cpp/container/unordered_set/emplace
std::pmr::unordered_set::emplace_hint =&gt; cpp/container/unordered_set/emplace_hint
std::pmr::unordered_set::erase =&gt; cpp/container/unordered_set/erase
std::pmr::unordered_set::swap =&gt; cpp/container/unordered_set/swap
std::pmr::unordered_set::extract =&gt; cpp/container/unordered_set/extract
std::pmr::unordered_set::merge =&gt; cpp/container/unordered_set/merge
std::pmr::unordered_set::count =&gt; cpp/container/unordered_set/count
std::pmr::unordered_set::find =&gt; cpp/container/unordered_set/find
std::pmr::unordered_set::equal_range =&gt; cpp/container/unordered_set/equal_range
std::pmr::unordered_set::begin(int) =&gt; cpp/container/unordered_set/begin2
std::pmr::unordered_set::cbegin(int) =&gt; cpp/container/unordered_set/begin2
std::pmr::unordered_set::end(int) =&gt; cpp/container/unordered_set/end2
std::pmr::unordered_set::cend(int) =&gt; cpp/container/unordered_set/end2
std::pmr::unordered_set::bucket_count =&gt; cpp/container/unordered_set/bucket_count
std::pmr::unordered_set::max_bucket_count =&gt; cpp/container/unordered_set/max_bucket_count
std::pmr::unordered_set::bucket_size =&gt; cpp/container/unordered_set/bucket_size
std::pmr::unordered_set::bucket =&gt; cpp/container/unordered_set/bucket
std::pmr::unordered_set::load_factor =&gt; cpp/container/unordered_set/load_factor
std::pmr::unordered_set::max_load_factor =&gt; cpp/container/unordered_set/max_load_factor
std::pmr::unordered_set::reserve =&gt; cpp/container/unordered_set/reserve
std::pmr::unordered_set::rehash =&gt; cpp/container/unordered_set/rehash
std::pmr::unordered_set::hash_function =&gt; cpp/container/unordered_set/hash_function
std::pmr::unordered_set::key_eq =&gt; cpp/container/unordered_set/key_eq
operator==(std::pmr::unordered_set) =&gt; cpp/container/unordered_set/operator_cmp
operator!=(std::pmr::unordered_set) =&gt; cpp/container/unordered_set/operator_cmp
std::swap(std::pmr::unordered_set) =&gt; cpp/container/unordered_set/swap2
std::unordered_multiset =&gt; cpp/container/unordered_multiset
std::unordered_multiset::unordered_multiset =&gt; cpp/container/unordered_multiset/unordered_multiset
std::unordered_multiset::~unordered_multiset =&gt; cpp/container/unordered_multiset/~unordered_multiset
std::unordered_multiset::operator= =&gt; cpp/container/unordered_multiset/operator=
std::unordered_multiset::get_allocator =&gt; cpp/container/unordered_multiset/get_allocator
std::unordered_multiset::begin =&gt; cpp/container/unordered_multiset/begin
std::unordered_multiset::cbegin =&gt; cpp/container/unordered_multiset/begin
std::unordered_multiset::end =&gt; cpp/container/unordered_multiset/end
std::unordered_multiset::cend =&gt; cpp/container/unordered_multiset/end
std::unordered_multiset::empty =&gt; cpp/container/unordered_multiset/empty
std::unordered_multiset::size =&gt; cpp/container/unordered_multiset/size
std::unordered_multiset::max_size =&gt; cpp/container/unordered_multiset/max_size
std::unordered_multiset::clear =&gt; cpp/container/unordered_multiset/clear
std::unordered_multiset::insert =&gt; cpp/container/unordered_multiset/insert
std::unordered_multiset::emplace =&gt; cpp/container/unordered_multiset/emplace
std::unordered_multiset::emplace_hint =&gt; cpp/container/unordered_multiset/emplace_hint
std::unordered_multiset::erase =&gt; cpp/container/unordered_multiset/erase
std::unordered_multiset::swap =&gt; cpp/container/unordered_multiset/swap
std::unordered_multiset::extract =&gt; cpp/container/unordered_multiset/extract
std::unordered_multiset::merge =&gt; cpp/container/unordered_multiset/merge
std::unordered_multiset::count =&gt; cpp/container/unordered_multiset/count
std::unordered_multiset::find =&gt; cpp/container/unordered_multiset/find
std::unordered_multiset::equal_range =&gt; cpp/container/unordered_multiset/equal_range
std::unordered_multiset::begin(int) =&gt; cpp/container/unordered_multiset/begin2
std::unordered_multiset::cbegin(int) =&gt; cpp/container/unordered_multiset/begin2
std::unordered_multiset::end(int) =&gt; cpp/container/unordered_multiset/end2
std::unordered_multiset::cend(int) =&gt; cpp/container/unordered_multiset/end2
std::unordered_multiset::bucket_count =&gt; cpp/container/unordered_multiset/bucket_count
std::unordered_multiset::max_bucket_count =&gt; cpp/container/unordered_multiset/max_bucket_count
std::unordered_multiset::bucket_size =&gt; cpp/container/unordered_multiset/bucket_size
std::unordered_multiset::bucket =&gt; cpp/container/unordered_multiset/bucket
std::unordered_multiset::load_factor =&gt; cpp/container/unordered_multiset/load_factor
std::unordered_multiset::max_load_factor =&gt; cpp/container/unordered_multiset/max_load_factor
std::unordered_multiset::reserve =&gt; cpp/container/unordered_multiset/reserve
std::unordered_multiset::rehash =&gt; cpp/container/unordered_multiset/rehash
std::unordered_multiset::hash_function =&gt; cpp/container/unordered_multiset/hash_function
std::unordered_multiset::key_eq =&gt; cpp/container/unordered_multiset/key_eq
operator==(std::unordered_multiset) =&gt; cpp/container/unordered_multiset/operator_cmp
operator!=(std::unordered_multiset) =&gt; cpp/container/unordered_multiset/operator_cmp
std::swap(std::unordered_multiset) =&gt; cpp/container/unordered_multiset/swap2
std::pmr::unordered_multiset =&gt; cpp/container/unordered_multiset
std::pmr::unordered_multiset::unordered_multiset =&gt; cpp/container/unordered_multiset/unordered_multiset
std::pmr::unordered_multiset::~unordered_multiset =&gt; cpp/container/unordered_multiset/~unordered_multiset
std::pmr::unordered_multiset::operator= =&gt; cpp/container/unordered_multiset/operator=
std::pmr::unordered_multiset::get_allocator =&gt; cpp/container/unordered_multiset/get_allocator
std::pmr::unordered_multiset::begin =&gt; cpp/container/unordered_multiset/begin
std::pmr::unordered_multiset::cbegin =&gt; cpp/container/unordered_multiset/begin
std::pmr::unordered_multiset::end =&gt; cpp/container/unordered_multiset/end
std::pmr::unordered_multiset::cend =&gt; cpp/container/unordered_multiset/end
std::pmr::unordered_multiset::empty =&gt; cpp/container/unordered_multiset/empty
std::pmr::unordered_multiset::size =&gt; cpp/container/unordered_multiset/size
std::pmr::unordered_multiset::max_size =&gt; cpp/container/unordered_multiset/max_size
std::pmr::unordered_multiset::clear =&gt; cpp/container/unordered_multiset/clear
std::pmr::unordered_multiset::insert =&gt; cpp/container/unordered_multiset/insert
std::pmr::unordered_multiset::emplace =&gt; cpp/container/unordered_multiset/emplace
std::pmr::unordered_multiset::emplace_hint =&gt; cpp/container/unordered_multiset/emplace_hint
std::pmr::unordered_multiset::erase =&gt; cpp/container/unordered_multiset/erase
std::pmr::unordered_multiset::swap =&gt; cpp/container/unordered_multiset/swap
std::pmr::unordered_multiset::extract =&gt; cpp/container/unordered_multiset/extract
std::pmr::unordered_multiset::merge =&gt; cpp/container/unordered_multiset/merge
std::pmr::unordered_multiset::count =&gt; cpp/container/unordered_multiset/count
std::pmr::unordered_multiset::find =&gt; cpp/container/unordered_multiset/find
std::pmr::unordered_multiset::equal_range =&gt; cpp/container/unordered_multiset/equal_range
std::pmr::unordered_multiset::begin(int) =&gt; cpp/container/unordered_multiset/begin2
std::pmr::unordered_multiset::cbegin(int) =&gt; cpp/container/unordered_multiset/begin2
std::pmr::unordered_multiset::end(int) =&gt; cpp/container/unordered_multiset/end2
std::pmr::unordered_multiset::cend(int) =&gt; cpp/container/unordered_multiset/end2
std::pmr::unordered_multiset::bucket_count =&gt; cpp/container/unordered_multiset/bucket_count
std::pmr::unordered_multiset::max_bucket_count =&gt; cpp/container/unordered_multiset/max_bucket_count
std::pmr::unordered_multiset::bucket_size =&gt; cpp/container/unordered_multiset/bucket_size
std::pmr::unordered_multiset::bucket =&gt; cpp/container/unordered_multiset/bucket
std::pmr::unordered_multiset::load_factor =&gt; cpp/container/unordered_multiset/load_factor
std::pmr::unordered_multiset::max_load_factor =&gt; cpp/container/unordered_multiset/max_load_factor
std::pmr::unordered_multiset::reserve =&gt; cpp/container/unordered_multiset/reserve
std::pmr::unordered_multiset::rehash =&gt; cpp/container/unordered_multiset/rehash
std::pmr::unordered_multiset::hash_function =&gt; cpp/container/unordered_multiset/hash_function
std::pmr::unordered_multiset::key_eq =&gt; cpp/container/unordered_multiset/key_eq
operator==(std::pmr::unordered_multiset) =&gt; cpp/container/unordered_multiset/operator_cmp
operator!=(std::pmr::unordered_multiset) =&gt; cpp/container/unordered_multiset/operator_cmp
std::swap(std::pmr::unordered_multiset) =&gt; cpp/container/unordered_multiset/swap2
std::unordered_map =&gt; cpp/container/unordered_map
std::unordered_map::unordered_map =&gt; cpp/container/unordered_map/unordered_map
std::unordered_map::~unordered_map =&gt; cpp/container/unordered_map/~unordered_map
std::unordered_map::operator= =&gt; cpp/container/unordered_map/operator=
std::unordered_map::get_allocator =&gt; cpp/container/unordered_map/get_allocator
std::unordered_map::begin =&gt; cpp/container/unordered_map/begin
std::unordered_map::cbegin =&gt; cpp/container/unordered_map/begin
std::unordered_map::end =&gt; cpp/container/unordered_map/end
std::unordered_map::cend =&gt; cpp/container/unordered_map/end
std::unordered_map::empty =&gt; cpp/container/unordered_map/empty
std::unordered_map::size =&gt; cpp/container/unordered_map/size
std::unordered_map::max_size =&gt; cpp/container/unordered_map/max_size
std::unordered_map::clear =&gt; cpp/container/unordered_map/clear
std::unordered_map::insert =&gt; cpp/container/unordered_map/insert
std::unordered_map::insert_or_assign =&gt; cpp/container/unordered_map/insert_or_assign
std::unordered_map::emplace =&gt; cpp/container/unordered_map/emplace
std::unordered_map::emplace_hint =&gt; cpp/container/unordered_map/emplace_hint
std::unordered_map::try_emplace =&gt; cpp/container/unordered_map/try_emplace
std::unordered_map::erase =&gt; cpp/container/unordered_map/erase
std::unordered_map::swap =&gt; cpp/container/unordered_map/swap
std::unordered_map::extract =&gt; cpp/container/unordered_map/extract
std::unordered_map::merge =&gt; cpp/container/unordered_map/merge
std::unordered_map::at =&gt; cpp/container/unordered_map/at
std::unordered_map::operator[] =&gt; cpp/container/unordered_map/operator_at
std::unordered_map::count =&gt; cpp/container/unordered_map/count
std::unordered_map::find =&gt; cpp/container/unordered_map/find
std::unordered_map::equal_range =&gt; cpp/container/unordered_map/equal_range
std::unordered_map::begin(int) =&gt; cpp/container/unordered_map/begin2
std::unordered_map::cbegin(int) =&gt; cpp/container/unordered_map/begin2
std::unordered_map::end(int) =&gt; cpp/container/unordered_map/end2
std::unordered_map::cend(int) =&gt; cpp/container/unordered_map/end2
std::unordered_map::bucket_count =&gt; cpp/container/unordered_map/bucket_count
std::unordered_map::max_bucket_count =&gt; cpp/container/unordered_map/max_bucket_count
std::unordered_map::bucket_size =&gt; cpp/container/unordered_map/bucket_size
std::unordered_map::bucket =&gt; cpp/container/unordered_map/bucket
std::unordered_map::load_factor =&gt; cpp/container/unordered_map/load_factor
std::unordered_map::max_load_factor =&gt; cpp/container/unordered_map/max_load_factor
std::unordered_map::reserve =&gt; cpp/container/unordered_map/reserve
std::unordered_map::rehash =&gt; cpp/container/unordered_map/rehash
std::unordered_map::hash_function =&gt; cpp/container/unordered_map/hash_function
std::unordered_map::key_eq =&gt; cpp/container/unordered_map/key_eq
operator==(std::unordered_map) =&gt; cpp/container/unordered_map/operator_cmp
operator!=(std::unordered_map) =&gt; cpp/container/unordered_map/operator_cmp
std::swap(std::unordered_map) =&gt; cpp/container/unordered_map/swap2
std::pmr::unordered_map =&gt; cpp/container/unordered_map
std::pmr::unordered_map::unordered_map =&gt; cpp/container/unordered_map/unordered_map
std::pmr::unordered_map::~unordered_map =&gt; cpp/container/unordered_map/~unordered_map
std::pmr::unordered_map::operator= =&gt; cpp/container/unordered_map/operator=
std::pmr::unordered_map::get_allocator =&gt; cpp/container/unordered_map/get_allocator
std::pmr::unordered_map::begin =&gt; cpp/container/unordered_map/begin
std::pmr::unordered_map::cbegin =&gt; cpp/container/unordered_map/begin
std::pmr::unordered_map::end =&gt; cpp/container/unordered_map/end
std::pmr::unordered_map::cend =&gt; cpp/container/unordered_map/end
std::pmr::unordered_map::empty =&gt; cpp/container/unordered_map/empty
std::pmr::unordered_map::size =&gt; cpp/container/unordered_map/size
std::pmr::unordered_map::max_size =&gt; cpp/container/unordered_map/max_size
std::pmr::unordered_map::clear =&gt; cpp/container/unordered_map/clear
std::pmr::unordered_map::insert =&gt; cpp/container/unordered_map/insert
std::pmr::unordered_map::insert_or_assign =&gt; cpp/container/unordered_map/insert_or_assign
std::pmr::unordered_map::emplace =&gt; cpp/container/unordered_map/emplace
std::pmr::unordered_map::emplace_hint =&gt; cpp/container/unordered_map/emplace_hint
std::pmr::unordered_map::try_emplace =&gt; cpp/container/unordered_map/try_emplace
std::pmr::unordered_map::erase =&gt; cpp/container/unordered_map/erase
std::pmr::unordered_map::swap =&gt; cpp/container/unordered_map/swap
std::pmr::unordered_map::extract =&gt; cpp/container/unordered_map/extract
std::pmr::unordered_map::merge =&gt; cpp/container/unordered_map/merge
std::pmr::unordered_map::at =&gt; cpp/container/unordered_map/at
std::pmr::unordered_map::operator[] =&gt; cpp/container/unordered_map/operator_at
std::pmr::unordered_map::count =&gt; cpp/container/unordered_map/count
std::pmr::unordered_map::find =&gt; cpp/container/unordered_map/find
std::pmr::unordered_map::equal_range =&gt; cpp/container/unordered_map/equal_range
std::pmr::unordered_map::begin(int) =&gt; cpp/container/unordered_map/begin2
std::pmr::unordered_map::cbegin(int) =&gt; cpp/container/unordered_map/begin2
std::pmr::unordered_map::end(int) =&gt; cpp/container/unordered_map/end2
std::pmr::unordered_map::cend(int) =&gt; cpp/container/unordered_map/end2
std::pmr::unordered_map::bucket_count =&gt; cpp/container/unordered_map/bucket_count
std::pmr::unordered_map::max_bucket_count =&gt; cpp/container/unordered_map/max_bucket_count
std::pmr::unordered_map::bucket_size =&gt; cpp/container/unordered_map/bucket_size
std::pmr::unordered_map::bucket =&gt; cpp/container/unordered_map/bucket
std::pmr::unordered_map::load_factor =&gt; cpp/container/unordered_map/load_factor
std::pmr::unordered_map::max_load_factor =&gt; cpp/container/unordered_map/max_load_factor
std::pmr::unordered_map::reserve =&gt; cpp/container/unordered_map/reserve
std::pmr::unordered_map::rehash =&gt; cpp/container/unordered_map/rehash
std::pmr::unordered_map::hash_function =&gt; cpp/container/unordered_map/hash_function
std::pmr::unordered_map::key_eq =&gt; cpp/container/unordered_map/key_eq
operator==(std::pmr::unordered_map) =&gt; cpp/container/unordered_map/operator_cmp
operator!=(std::pmr::unordered_map) =&gt; cpp/container/unordered_map/operator_cmp
std::swap(std::pmr::unordered_map) =&gt; cpp/container/unordered_map/swap2
std::unordered_multimap =&gt; cpp/container/unordered_multimap
std::unordered_multimap::unordered_multimap =&gt; cpp/container/unordered_multimap/unordered_multimap
std::unordered_multimap::~unordered_multimap =&gt; cpp/container/unordered_multimap/~unordered_multimap
std::unordered_multimap::operator= =&gt; cpp/container/unordered_multimap/operator=
std::unordered_multimap::get_allocator =&gt; cpp/container/unordered_multimap/get_allocator
std::unordered_multimap::begin =&gt; cpp/container/unordered_multimap/begin
std::unordered_multimap::cbegin =&gt; cpp/container/unordered_multimap/begin
std::unordered_multimap::end =&gt; cpp/container/unordered_multimap/end
std::unordered_multimap::cend =&gt; cpp/container/unordered_multimap/end
std::unordered_multimap::empty =&gt; cpp/container/unordered_multimap/empty
std::unordered_multimap::size =&gt; cpp/container/unordered_multimap/size
std::unordered_multimap::max_size =&gt; cpp/container/unordered_multimap/max_size
std::unordered_multimap::clear =&gt; cpp/container/unordered_multimap/clear
std::unordered_multimap::insert =&gt; cpp/container/unordered_multimap/insert
std::unordered_multimap::emplace =&gt; cpp/container/unordered_multimap/emplace
std::unordered_multimap::emplace_hint =&gt; cpp/container/unordered_multimap/emplace_hint
std::unordered_multimap::erase =&gt; cpp/container/unordered_multimap/erase
std::unordered_multimap::swap =&gt; cpp/container/unordered_multimap/swap
std::unordered_multimap::extract =&gt; cpp/container/unordered_multimap/extract
std::unordered_multimap::merge =&gt; cpp/container/unordered_multimap/merge
std::unordered_multimap::count =&gt; cpp/container/unordered_multimap/count
std::unordered_multimap::find =&gt; cpp/container/unordered_multimap/find
std::unordered_multimap::equal_range =&gt; cpp/container/unordered_multimap/equal_range
std::unordered_multimap::begin(int) =&gt; cpp/container/unordered_multimap/begin2
std::unordered_multimap::cbegin(int) =&gt; cpp/container/unordered_multimap/begin2
std::unordered_multimap::end(int) =&gt; cpp/container/unordered_multimap/end2
std::unordered_multimap::cend(int) =&gt; cpp/container/unordered_multimap/end2
std::unordered_multimap::bucket_count =&gt; cpp/container/unordered_multimap/bucket_count
std::unordered_multimap::max_bucket_count =&gt; cpp/container/unordered_multimap/max_bucket_count
std::unordered_multimap::bucket_size =&gt; cpp/container/unordered_multimap/bucket_size
std::unordered_multimap::bucket =&gt; cpp/container/unordered_multimap/bucket
std::unordered_multimap::load_factor =&gt; cpp/container/unordered_multimap/load_factor
std::unordered_multimap::max_load_factor =&gt; cpp/container/unordered_multimap/max_load_factor
std::unordered_multimap::reserve =&gt; cpp/container/unordered_multimap/reserve
std::unordered_multimap::rehash =&gt; cpp/container/unordered_multimap/rehash
std::unordered_multimap::hash_function =&gt; cpp/container/unordered_multimap/hash_function
std::unordered_multimap::key_eq =&gt; cpp/container/unordered_multimap/key_eq
operator==(std::unordered_multimap) =&gt; cpp/container/unordered_multimap/operator_cmp
operator!=(std::unordered_multimap) =&gt; cpp/container/unordered_multimap/operator_cmp
std::swap(std::unordered_multimap) =&gt; cpp/container/unordered_multimap/swap2
std::pmr::unordered_multimap =&gt; cpp/container/unordered_multimap
std::pmr::unordered_multimap::unordered_multimap =&gt; cpp/container/unordered_multimap/unordered_multimap
std::pmr::unordered_multimap::~unordered_multimap =&gt; cpp/container/unordered_multimap/~unordered_multimap
std::pmr::unordered_multimap::operator= =&gt; cpp/container/unordered_multimap/operator=
std::pmr::unordered_multimap::get_allocator =&gt; cpp/container/unordered_multimap/get_allocator
std::pmr::unordered_multimap::begin =&gt; cpp/container/unordered_multimap/begin
std::pmr::unordered_multimap::cbegin =&gt; cpp/container/unordered_multimap/begin
std::pmr::unordered_multimap::end =&gt; cpp/container/unordered_multimap/end
std::pmr::unordered_multimap::cend =&gt; cpp/container/unordered_multimap/end
std::pmr::unordered_multimap::empty =&gt; cpp/container/unordered_multimap/empty
std::pmr::unordered_multimap::size =&gt; cpp/container/unordered_multimap/size
std::pmr::unordered_multimap::max_size =&gt; cpp/container/unordered_multimap/max_size
std::pmr::unordered_multimap::clear =&gt; cpp/container/unordered_multimap/clear
std::pmr::unordered_multimap::insert =&gt; cpp/container/unordered_multimap/insert
std::pmr::unordered_multimap::emplace =&gt; cpp/container/unordered_multimap/emplace
std::pmr::unordered_multimap::emplace_hint =&gt; cpp/container/unordered_multimap/emplace_hint
std::pmr::unordered_multimap::erase =&gt; cpp/container/unordered_multimap/erase
std::pmr::unordered_multimap::swap =&gt; cpp/container/unordered_multimap/swap
std::pmr::unordered_multimap::extract =&gt; cpp/container/unordered_multimap/extract
std::pmr::unordered_multimap::merge =&gt; cpp/container/unordered_multimap/merge
std::pmr::unordered_multimap::count =&gt; cpp/container/unordered_multimap/count
std::pmr::unordered_multimap::find =&gt; cpp/container/unordered_multimap/find
std::pmr::unordered_multimap::equal_range =&gt; cpp/container/unordered_multimap/equal_range
std::pmr::unordered_multimap::begin(int) =&gt; cpp/container/unordered_multimap/begin2
std::pmr::unordered_multimap::cbegin(int) =&gt; cpp/container/unordered_multimap/begin2
std::pmr::unordered_multimap::end(int) =&gt; cpp/container/unordered_multimap/end2
std::pmr::unordered_multimap::cend(int) =&gt; cpp/container/unordered_multimap/end2
std::pmr::unordered_multimap::bucket_count =&gt; cpp/container/unordered_multimap/bucket_count
std::pmr::unordered_multimap::max_bucket_count =&gt; cpp/container/unordered_multimap/max_bucket_count
std::pmr::unordered_multimap::bucket_size =&gt; cpp/container/unordered_multimap/bucket_size
std::pmr::unordered_multimap::bucket =&gt; cpp/container/unordered_multimap/bucket
std::pmr::unordered_multimap::load_factor =&gt; cpp/container/unordered_multimap/load_factor
std::pmr::unordered_multimap::max_load_factor =&gt; cpp/container/unordered_multimap/max_load_factor
std::pmr::unordered_multimap::reserve =&gt; cpp/container/unordered_multimap/reserve
std::pmr::unordered_multimap::rehash =&gt; cpp/container/unordered_multimap/rehash
std::pmr::unordered_multimap::hash_function =&gt; cpp/container/unordered_multimap/hash_function
std::pmr::unordered_multimap::key_eq =&gt; cpp/container/unordered_multimap/key_eq
operator==(std::pmr::unordered_multimap) =&gt; cpp/container/unordered_multimap/operator_cmp
operator!=(std::pmr::unordered_multimap) =&gt; cpp/container/unordered_multimap/operator_cmp
std::swap(std::pmr::unordered_multimap) =&gt; cpp/container/unordered_multimap/swap2
std::stack =&gt; cpp/container/stack
std::stack::stack =&gt; cpp/container/stack/stack
std::stack::~stack =&gt; cpp/container/stack/~stack
std::stack::operator= =&gt; cpp/container/stack/operator=
std::stack::top =&gt; cpp/container/stack/top
std::stack::empty =&gt; cpp/container/stack/empty
std::stack::size =&gt; cpp/container/stack/size
std::stack::push =&gt; cpp/container/stack/push
std::stack::emplace =&gt; cpp/container/stack/emplace
std::stack::pop =&gt; cpp/container/stack/pop
std::stack::swap =&gt; cpp/container/stack/swap
operator==(std::stack) =&gt; cpp/container/stack/operator_cmp
operator!=(std::stack) =&gt; cpp/container/stack/operator_cmp
operator&lt;(std::stack) =&gt; cpp/container/stack/operator_cmp
operator&lt;=(std::stack) =&gt; cpp/container/stack/operator_cmp
operator&gt;(std::stack) =&gt; cpp/container/stack/operator_cmp
operator&gt;=(std::stack) =&gt; cpp/container/stack/operator_cmp
std::swap(std::stack) =&gt; cpp/container/stack/swap2
std::uses_allocator&lt;std::stack&gt; =&gt; cpp/container/stack/uses_allocator
std::queue =&gt; cpp/container/queue
std::queue::queue =&gt; cpp/container/queue/queue
std::queue::~queue =&gt; cpp/container/queue/~queue
std::queue::operator= =&gt; cpp/container/queue/operator=
std::queue::front =&gt; cpp/container/queue/front
std::queue::back =&gt; cpp/container/queue/back
std::queue::empty =&gt; cpp/container/queue/empty
std::queue::size =&gt; cpp/container/queue/size
std::queue::push =&gt; cpp/container/queue/push
std::queue::emplace =&gt; cpp/container/queue/emplace
std::queue::pop =&gt; cpp/container/queue/pop
std::queue::swap =&gt; cpp/container/queue/swap
operator==(std::queue) =&gt; cpp/container/queue/operator_cmp
operator!=(std::queue) =&gt; cpp/container/queue/operator_cmp
operator&lt;(std::queue) =&gt; cpp/container/queue/operator_cmp
operator&lt;=(std::queue) =&gt; cpp/container/queue/operator_cmp
operator&gt;(std::queue) =&gt; cpp/container/queue/operator_cmp
operator&gt;=(std::queue) =&gt; cpp/container/queue/operator_cmp
std::swap(std::queue) =&gt; cpp/container/queue/swap2
std::uses_allocator&lt;std::queue&gt; =&gt; cpp/container/queue/uses_allocator
std::priority_queue =&gt; cpp/container/priority_queue
std::priority_queue::priority_queue =&gt; cpp/container/priority_queue/priority_queue
std::priority_queue::~priority_queue =&gt; cpp/container/priority_queue/~priority_queue
std::priority_queue::operator= =&gt; cpp/container/priority_queue/operator=
std::priority_queue::top =&gt; cpp/container/priority_queue/top
std::priority_queue::empty =&gt; cpp/container/priority_queue/empty
std::priority_queue::size =&gt; cpp/container/priority_queue/size
std::priority_queue::push =&gt; cpp/container/priority_queue/push
std::priority_queue::emplace =&gt; cpp/container/priority_queue/emplace
std::priority_queue::pop =&gt; cpp/container/priority_queue/pop
std::priority_queue::swap =&gt; cpp/container/priority_queue/swap
std::swap(std::priority_queue) =&gt; cpp/container/priority_queue/swap2
std::uses_allocator&lt;std::priority_queue&gt; =&gt; cpp/container/priority_queue/uses_allocator
std::abs(int) =&gt; cpp/numeric/math/abs
std::labs =&gt; cpp/numeric/math/abs
std::llabs =&gt; cpp/numeric/math/abs
std::abs(float) =&gt; cpp/numeric/math/fabs
std::fabs =&gt; cpp/numeric/math/fabs
std::div =&gt; cpp/numeric/math/div
std::ldiv =&gt; cpp/numeric/math/div
std::lldiv =&gt; cpp/numeric/math/div
std::imaxdiv =&gt; cpp/numeric/math/div
std::div_t =&gt; cpp/numeric/math/div
std::div_t::quot =&gt; cpp/numeric/math/div
std::div_t::rem =&gt; cpp/numeric/math/div
std::ldiv_t =&gt; cpp/numeric/math/div
std::ldiv_t::quot =&gt; cpp/numeric/math/div
std::ldiv_t::rem =&gt; cpp/numeric/math/div
std::lldiv_t =&gt; cpp/numeric/math/div
std::lldiv_t::quot =&gt; cpp/numeric/math/div
std::lldiv_t::rem =&gt; cpp/numeric/math/div
std::imaxdiv_t =&gt; cpp/numeric/math/div
std::imaxdiv_t::quot =&gt; cpp/numeric/math/div
std::imaxdiv_t::rem =&gt; cpp/numeric/math/div
std::fmod =&gt; cpp/numeric/math/fmod
std::remainder =&gt; cpp/numeric/math/remainder
std::remquo =&gt; cpp/numeric/math/remquo
std::fma =&gt; cpp/numeric/math/fma
std::fmax =&gt; cpp/numeric/math/fmax
std::fmin =&gt; cpp/numeric/math/fmin
std::fdim =&gt; cpp/numeric/math/fdim
std::nan =&gt; cpp/numeric/math/nan
std::nanf =&gt; cpp/numeric/math/nan
std::nanl =&gt; cpp/numeric/math/nan
std::exp =&gt; cpp/numeric/math/exp
std::exp2 =&gt; cpp/numeric/math/exp2
std::expm1 =&gt; cpp/numeric/math/expm1
std::log =&gt; cpp/numeric/math/log
std::log10 =&gt; cpp/numeric/math/log10
std::log1p =&gt; cpp/numeric/math/log1p
std::ilogb =&gt; cpp/numeric/math/ilogb
std::logb =&gt; cpp/numeric/math/logb
std::sqrt =&gt; cpp/numeric/math/sqrt
std::cbrt =&gt; cpp/numeric/math/cbrt
std::hypot =&gt; cpp/numeric/math/hypot
std::pow =&gt; cpp/numeric/math/pow
std::sin =&gt; cpp/numeric/math/sin
std::cos =&gt; cpp/numeric/math/cos
std::tan =&gt; cpp/numeric/math/tan
std::asin =&gt; cpp/numeric/math/asin
std::acos =&gt; cpp/numeric/math/acos
std::atan =&gt; cpp/numeric/math/atan
std::atan2 =&gt; cpp/numeric/math/atan2
std::sinh =&gt; cpp/numeric/math/sinh
std::cosh =&gt; cpp/numeric/math/cosh
std::tanh =&gt; cpp/numeric/math/tanh
std::asinh =&gt; cpp/numeric/math/asinh
std::acosh =&gt; cpp/numeric/math/acosh
std::atanh =&gt; cpp/numeric/math/atanh
std::erf =&gt; cpp/numeric/math/erf
std::erfc =&gt; cpp/numeric/math/erfc
std::lgamma =&gt; cpp/numeric/math/lgamma
std::tgamma =&gt; cpp/numeric/math/tgamma
std::ceil =&gt; cpp/numeric/math/ceil
std::floor =&gt; cpp/numeric/math/floor
std::trunc =&gt; cpp/numeric/math/trunc
std::round =&gt; cpp/numeric/math/round
std::lround =&gt; cpp/numeric/math/round
std::llround =&gt; cpp/numeric/math/round
std::nearbyint =&gt; cpp/numeric/math/nearbyint
std::rint =&gt; cpp/numeric/math/rint
std::lrint =&gt; cpp/numeric/math/rint
std::llrint =&gt; cpp/numeric/math/rint
std::frexp =&gt; cpp/numeric/math/frexp
std::ldexp =&gt; cpp/numeric/math/ldexp
std::modf =&gt; cpp/numeric/math/modf
std::scalbn =&gt; cpp/numeric/math/scalbn
std::scalbln =&gt; cpp/numeric/math/scalbn
std::nextafter =&gt; cpp/numeric/math/nextafter
std::nexttoward =&gt; cpp/numeric/math/nextafter
std::copysign =&gt; cpp/numeric/math/copysign
std::fpclassify =&gt; cpp/numeric/math/fpclassify
std::isfinite =&gt; cpp/numeric/math/isfinite
std::isinf =&gt; cpp/numeric/math/isinf
std::isnan =&gt; cpp/numeric/math/isnan
std::isnormal =&gt; cpp/numeric/math/isnormal
std::signbit =&gt; cpp/numeric/math/signbit
HUGE_VAL =&gt; cpp/numeric/math/HUGE_VAL
HUGE_VALF =&gt; cpp/numeric/math/HUGE_VAL
HUGE_VALL =&gt; cpp/numeric/math/HUGE_VAL
INFINITY =&gt; cpp/numeric/math/INFINITY
NAN =&gt; cpp/numeric/math/NAN
math_errhandling =&gt; cpp/numeric/math/math_errhandling
MATH_ERRNO =&gt; cpp/numeric/math/math_errhandling
MATH_ERREXCEPT =&gt; cpp/numeric/math/math_errhandling
FP_INFINITE =&gt; cpp/numeric/math/FP_categories
FP_NAN =&gt; cpp/numeric/math/FP_categories
FP_NORMAL =&gt; cpp/numeric/math/FP_categories
FP_SUBNORMAL =&gt; cpp/numeric/math/FP_categories
FP_ZERO =&gt; cpp/numeric/math/FP_categories
std::assoc_laguerre =&gt; cpp/numeric/special_math/assoc_laguerre
std::assoc_laguerref =&gt; cpp/numeric/special_math/assoc_laguerre
std::assoc_laguerrel =&gt; cpp/numeric/special_math/assoc_laguerre
std::assoc_legendre =&gt; cpp/numeric/special_math/assoc_legendre
std::assoc_legendref =&gt; cpp/numeric/special_math/assoc_legendre
std::assoc_legendrel =&gt; cpp/numeric/special_math/assoc_legendre
std::beta =&gt; cpp/numeric/special_math/beta
std::betaf =&gt; cpp/numeric/special_math/beta
std::betal =&gt; cpp/numeric/special_math/beta
std::comp_ellint_1 =&gt; cpp/numeric/special_math/comp_ellint_1
std::comp_ellint_1f =&gt; cpp/numeric/special_math/comp_ellint_1
std::comp_ellint_1l =&gt; cpp/numeric/special_math/comp_ellint_1
std::comp_ellint_2 =&gt; cpp/numeric/special_math/comp_ellint_2
std::comp_ellint_2f =&gt; cpp/numeric/special_math/comp_ellint_2
std::comp_ellint_2l =&gt; cpp/numeric/special_math/comp_ellint_2
std::comp_ellint_3 =&gt; cpp/numeric/special_math/comp_ellint_3
std::comp_ellint_3f =&gt; cpp/numeric/special_math/comp_ellint_3
std::comp_ellint_3l =&gt; cpp/numeric/special_math/comp_ellint_3
std::cyl_bessel_i =&gt; cpp/numeric/special_math/cyl_bessel_i
std::cyl_bessel_if =&gt; cpp/numeric/special_math/cyl_bessel_i
std::cyl_bessel_il =&gt; cpp/numeric/special_math/cyl_bessel_i
std::cyl_bessel_j =&gt; cpp/numeric/special_math/cyl_bessel_j
std::cyl_bessel_jf =&gt; cpp/numeric/special_math/cyl_bessel_j
std::cyl_bessel_jl =&gt; cpp/numeric/special_math/cyl_bessel_j
std::cyl_bessel_k =&gt; cpp/numeric/special_math/cyl_bessel_k
std::cyl_bessel_kf =&gt; cpp/numeric/special_math/cyl_bessel_k
std::cyl_bessel_kl =&gt; cpp/numeric/special_math/cyl_bessel_k
std::cyl_neumann =&gt; cpp/numeric/special_math/cyl_neumann
std::cyl_neumannf =&gt; cpp/numeric/special_math/cyl_neumann
std::cyl_neumannl =&gt; cpp/numeric/special_math/cyl_neumann
std::ellint_1 =&gt; cpp/numeric/special_math/ellint_1
std::ellint_1f =&gt; cpp/numeric/special_math/ellint_1
std::ellint_1l =&gt; cpp/numeric/special_math/ellint_1
std::ellint_2 =&gt; cpp/numeric/special_math/ellint_2
std::ellint_2f =&gt; cpp/numeric/special_math/ellint_2
std::ellint_2l =&gt; cpp/numeric/special_math/ellint_2
std::ellint_3 =&gt; cpp/numeric/special_math/ellint_3
std::ellint_3f =&gt; cpp/numeric/special_math/ellint_3
std::ellint_3l =&gt; cpp/numeric/special_math/ellint_3
std::expint =&gt; cpp/numeric/special_math/expint
std::expintf =&gt; cpp/numeric/special_math/expint
std::expintl =&gt; cpp/numeric/special_math/expint
std::hermite =&gt; cpp/numeric/special_math/hermite
std::hermitef =&gt; cpp/numeric/special_math/hermite
std::hermitel =&gt; cpp/numeric/special_math/hermite
std::legendre =&gt; cpp/numeric/special_math/legendre
std::legendref =&gt; cpp/numeric/special_math/legendre
std::legendrel =&gt; cpp/numeric/special_math/legendre
std::laguerre =&gt; cpp/numeric/special_math/laguerre
std::laguerref =&gt; cpp/numeric/special_math/laguerre
std::laguerrel =&gt; cpp/numeric/special_math/laguerre
std::riemann_zeta =&gt; cpp/numeric/special_math/riemann_zeta
std::riemann_zetaf =&gt; cpp/numeric/special_math/riemann_zeta
std::riemann_zetal =&gt; cpp/numeric/special_math/riemann_zeta
std::sph_bessel =&gt; cpp/numeric/special_math/sph_bessel
std::sph_besself =&gt; cpp/numeric/special_math/sph_bessel
std::sph_bessell =&gt; cpp/numeric/special_math/sph_bessel
std::sph_legendre =&gt; cpp/numeric/special_math/sph_legendre
std::sph_legendref =&gt; cpp/numeric/special_math/sph_legendre
std::sph_legendrel =&gt; cpp/numeric/special_math/sph_legendre
std::sph_neumann =&gt; cpp/numeric/special_math/sph_neumann
std::sph_neumannf =&gt; cpp/numeric/special_math/sph_neumann
std::sph_neumannl =&gt; cpp/numeric/special_math/sph_neumann
std::feclearexcept =&gt; cpp/numeric/fenv/feclearexcept
std::fetestexcept =&gt; cpp/numeric/fenv/fetestexcept
std::feraiseexcept =&gt; cpp/numeric/fenv/feraiseexcept
std::fegetexceptflag =&gt; cpp/numeric/fenv/feexceptflag
std::fesetexceptflag =&gt; cpp/numeric/fenv/feexceptflag
std::fegetround =&gt; cpp/numeric/fenv/feround
std::fesetround =&gt; cpp/numeric/fenv/feround
std::fegetenv =&gt; cpp/numeric/fenv/feenv
std::fesetenv =&gt; cpp/numeric/fenv/feenv
std::feholdexcept =&gt; cpp/numeric/fenv/feholdexcept
std::feupdateenv =&gt; cpp/numeric/fenv/feupdateenv
FE_ALL_EXCEPT =&gt; cpp/numeric/fenv/FE_exceptions
FE_DIVBYZERO =&gt; cpp/numeric/fenv/FE_exceptions
FE_INEXACT =&gt; cpp/numeric/fenv/FE_exceptions
FE_INVALID =&gt; cpp/numeric/fenv/FE_exceptions
FE_OVERFLOW =&gt; cpp/numeric/fenv/FE_exceptions
FE_UNDERFLOW =&gt; cpp/numeric/fenv/FE_exceptions
FE_DOWNWARD =&gt; cpp/numeric/fenv/FE_round
FE_TONEAREST =&gt; cpp/numeric/fenv/FE_round
FE_TOWARDZERO =&gt; cpp/numeric/fenv/FE_round
FE_UPWARD =&gt; cpp/numeric/fenv/FE_round
FE_DFL_ENV =&gt; cpp/numeric/fenv/FE_DFL_ENV
std::complex =&gt; cpp/numeric/complex
std::complex::complex =&gt; cpp/numeric/complex/complex
std::complex::operator= =&gt; cpp/numeric/complex/operator=
std::complex::real =&gt; cpp/numeric/complex/real
std::complex::imag =&gt; cpp/numeric/complex/imag
std::complex::operator+= =&gt; cpp/numeric/complex/operator_arith
std::complex::operator-= =&gt; cpp/numeric/complex/operator_arith
std::complex::operator*= =&gt; cpp/numeric/complex/operator_arith
std::complex::operator/= =&gt; cpp/numeric/complex/operator_arith
operator+(std::complex) =&gt; cpp/numeric/complex/operator_arith2
operator-(std::complex) =&gt; cpp/numeric/complex/operator_arith2
operator+(std::complex) =&gt; cpp/numeric/complex/operator_arith3
operator-(std::complex) =&gt; cpp/numeric/complex/operator_arith3
operator*(std::complex) =&gt; cpp/numeric/complex/operator_arith3
operator/(std::complex) =&gt; cpp/numeric/complex/operator_arith3
operator==(std::complex) =&gt; cpp/numeric/complex/operator_cmp
operator!=(std::complex) =&gt; cpp/numeric/complex/operator_cmp
operator&lt;&lt;(std::complex) =&gt; cpp/numeric/complex/operator_ltltgtgt
operator&gt;&gt;(std::complex) =&gt; cpp/numeric/complex/operator_ltltgtgt
std::real(std::complex) =&gt; cpp/numeric/complex/real
std::imag(std::complex) =&gt; cpp/numeric/complex/imag
std::abs(std::complex) =&gt; cpp/numeric/complex/abs
std::arg(std::complex) =&gt; cpp/numeric/complex/arg
std::norm(std::complex) =&gt; cpp/numeric/complex/norm
std::conj(std::complex) =&gt; cpp/numeric/complex/conj
std::proj(std::complex) =&gt; cpp/numeric/complex/proj
std::polar(std::complex) =&gt; cpp/numeric/complex/polar
std::exp(std::complex) =&gt; cpp/numeric/complex/exp
std::log(std::complex) =&gt; cpp/numeric/complex/log
std::log10(std::complex) =&gt; cpp/numeric/complex/log10
std::pow(std::complex) =&gt; cpp/numeric/complex/pow
std::sqrt(std::complex) =&gt; cpp/numeric/complex/sqrt
std::sin(std::complex) =&gt; cpp/numeric/complex/sin
std::cos(std::complex) =&gt; cpp/numeric/complex/cos
std::tan(std::complex) =&gt; cpp/numeric/complex/tan
std::asin(std::complex) =&gt; cpp/numeric/complex/asin
std::acos(std::complex) =&gt; cpp/numeric/complex/acos
std::atan(std::complex) =&gt; cpp/numeric/complex/atan
std::sinh(std::complex) =&gt; cpp/numeric/complex/sinh
std::cosh(std::complex) =&gt; cpp/numeric/complex/cosh
std::tanh(std::complex) =&gt; cpp/numeric/complex/tanh
std::asinh(std::complex) =&gt; cpp/numeric/complex/asinh
std::acosh(std::complex) =&gt; cpp/numeric/complex/acosh
std::atanh(std::complex) =&gt; cpp/numeric/complex/atanh
std::valarray =&gt; cpp/numeric/valarray
std::slice =&gt; cpp/numeric/valarray/slice
std::gslice =&gt; cpp/numeric/valarray/gslice
std::slice_array =&gt; cpp/numeric/valarray/slice_array
std::gslice_array =&gt; cpp/numeric/valarray/gslice_array
std::mask_array =&gt; cpp/numeric/valarray/mask_array
std::indirect_array =&gt; cpp/numeric/valarray/indirect_array
std::linear_congruential_engine =&gt; cpp/numeric/random/linear_congruential_engine
std::linear_congruential_engine::linear_congruential_engine =&gt; cpp/numeric/random/linear_congruential_engine/linear_congruential_engine
std::linear_congruential_engine::seed =&gt; cpp/numeric/random/linear_congruential_engine/seed
std::linear_congruential_engine::operator() =&gt; cpp/numeric/random/linear_congruential_engine/operator()
std::linear_congruential_engine::discard =&gt; cpp/numeric/random/linear_congruential_engine/discard
std::linear_congruential_engine::min =&gt; cpp/numeric/random/linear_congruential_engine/min
std::linear_congruential_engine::max =&gt; cpp/numeric/random/linear_congruential_engine/max
operator==(std::linear_congruential_engine) =&gt; cpp/numeric/random/linear_congruential_engine/operator_cmp
operator!=(std::linear_congruential_engine) =&gt; cpp/numeric/random/linear_congruential_engine/operator_cmp
operator&lt;&lt;(std::linear_congruential_engine) =&gt; cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt
operator&gt;&gt;(std::linear_congruential_engine) =&gt; cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt
std::mersenne_twister_engine =&gt; cpp/numeric/random/mersenne_twister_engine
std::mersenne_twister_engine::mersenne_twister_engine =&gt; cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine
std::mersenne_twister_engine::seed =&gt; cpp/numeric/random/mersenne_twister_engine/seed
std::mersenne_twister_engine::operator() =&gt; cpp/numeric/random/mersenne_twister_engine/operator()
std::mersenne_twister_engine::discard =&gt; cpp/numeric/random/mersenne_twister_engine/discard
std::mersenne_twister_engine::min =&gt; cpp/numeric/random/mersenne_twister_engine/min
std::mersenne_twister_engine::max =&gt; cpp/numeric/random/mersenne_twister_engine/max
operator==(std::mersenne_twister_engine) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_cmp
operator!=(std::mersenne_twister_engine) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_cmp
operator&lt;&lt;(std::mersenne_twister_engine) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt
operator&gt;&gt;(std::mersenne_twister_engine) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt
std::subtract_with_carry_engine =&gt; cpp/numeric/random/subtract_with_carry_engine
std::subtract_with_carry_engine::subtract_with_carry_engine =&gt; cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine
std::subtract_with_carry_engine::seed =&gt; cpp/numeric/random/subtract_with_carry_engine/seed
std::subtract_with_carry_engine::operator() =&gt; cpp/numeric/random/subtract_with_carry_engine/operator()
std::subtract_with_carry_engine::discard =&gt; cpp/numeric/random/subtract_with_carry_engine/discard
std::subtract_with_carry_engine::min =&gt; cpp/numeric/random/subtract_with_carry_engine/min
std::subtract_with_carry_engine::max =&gt; cpp/numeric/random/subtract_with_carry_engine/max
operator==(std::subtract_with_carry_engine) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_cmp
operator!=(std::subtract_with_carry_engine) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_cmp
operator&lt;&lt;(std::subtract_with_carry_engine) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt
operator&gt;&gt;(std::subtract_with_carry_engine) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt
std::discard_block_engine =&gt; cpp/numeric/random/discard_block_engine
std::discard_block_engine::discard_block_engine =&gt; cpp/numeric/random/discard_block_engine/discard_block_engine
std::discard_block_engine::seed =&gt; cpp/numeric/random/discard_block_engine/seed
std::discard_block_engine::base =&gt; cpp/numeric/random/discard_block_engine/base
std::discard_block_engine::operator() =&gt; cpp/numeric/random/discard_block_engine/operator()
std::discard_block_engine::discard =&gt; cpp/numeric/random/discard_block_engine/discard
std::discard_block_engine::min =&gt; cpp/numeric/random/discard_block_engine/min
std::discard_block_engine::max =&gt; cpp/numeric/random/discard_block_engine/max
operator==(std::discard_block_engine) =&gt; cpp/numeric/random/discard_block_engine/operator_cmp
operator!=(std::discard_block_engine) =&gt; cpp/numeric/random/discard_block_engine/operator_cmp
operator&lt;&lt;(std::discard_block_engine) =&gt; cpp/numeric/random/discard_block_engine/operator_ltltgtgt
operator&gt;&gt;(std::discard_block_engine) =&gt; cpp/numeric/random/discard_block_engine/operator_ltltgtgt
std::independent_bits_engine =&gt; cpp/numeric/random/independent_bits_engine
std::independent_bits_engine::independent_bits_engine =&gt; cpp/numeric/random/independent_bits_engine/independent_bits_engine
std::independent_bits_engine::seed =&gt; cpp/numeric/random/independent_bits_engine/seed
std::independent_bits_engine::base =&gt; cpp/numeric/random/independent_bits_engine/base
std::independent_bits_engine::operator() =&gt; cpp/numeric/random/independent_bits_engine/operator()
std::independent_bits_engine::discard =&gt; cpp/numeric/random/independent_bits_engine/discard
std::independent_bits_engine::min =&gt; cpp/numeric/random/independent_bits_engine/min
std::independent_bits_engine::max =&gt; cpp/numeric/random/independent_bits_engine/max
operator==(std::independent_bits_engine) =&gt; cpp/numeric/random/independent_bits_engine/operator_cmp
operator!=(std::independent_bits_engine) =&gt; cpp/numeric/random/independent_bits_engine/operator_cmp
operator&lt;&lt;(std::independent_bits_engine) =&gt; cpp/numeric/random/independent_bits_engine/operator_ltltgtgt
operator&gt;&gt;(std::independent_bits_engine) =&gt; cpp/numeric/random/independent_bits_engine/operator_ltltgtgt
std::shuffle_order_engine =&gt; cpp/numeric/random/shuffle_order_engine
std::shuffle_order_engine::shuffle_order_engine =&gt; cpp/numeric/random/shuffle_order_engine/shuffle_order_engine
std::shuffle_order_engine::seed =&gt; cpp/numeric/random/shuffle_order_engine/seed
std::shuffle_order_engine::base =&gt; cpp/numeric/random/shuffle_order_engine/base
std::shuffle_order_engine::operator() =&gt; cpp/numeric/random/shuffle_order_engine/operator()
std::shuffle_order_engine::discard =&gt; cpp/numeric/random/shuffle_order_engine/discard
std::shuffle_order_engine::min =&gt; cpp/numeric/random/shuffle_order_engine/min
std::shuffle_order_engine::max =&gt; cpp/numeric/random/shuffle_order_engine/max
operator==(std::shuffle_order_engine) =&gt; cpp/numeric/random/shuffle_order_engine/operator_cmp
operator!=(std::shuffle_order_engine) =&gt; cpp/numeric/random/shuffle_order_engine/operator_cmp
operator&lt;&lt;(std::shuffle_order_engine) =&gt; cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt
operator&gt;&gt;(std::shuffle_order_engine) =&gt; cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt
std::random_device =&gt; cpp/numeric/random/random_device
std::random_device::random_device =&gt; cpp/numeric/random/random_device/random_device
std::random_device::operator() =&gt; cpp/numeric/random/random_device/operator()
std::random_device::min =&gt; cpp/numeric/random/random_device/min
std::random_device::max =&gt; cpp/numeric/random/random_device/max
std::random_device::entropy =&gt; cpp/numeric/random/random_device/entropy
std::minstd_rand0 =&gt; cpp/numeric/random/linear_congruential_engine
std::minstd_rand0::minstd_rand0 =&gt; cpp/numeric/random/linear_congruential_engine/linear_congruential_engine
std::minstd_rand0::seed =&gt; cpp/numeric/random/linear_congruential_engine/seed
std::minstd_rand0::operator() =&gt; cpp/numeric/random/linear_congruential_engine/operator()
std::minstd_rand0::discard =&gt; cpp/numeric/random/linear_congruential_engine/discard
std::minstd_rand0::min =&gt; cpp/numeric/random/linear_congruential_engine/min
std::minstd_rand0::max =&gt; cpp/numeric/random/linear_congruential_engine/max
operator==(std::minstd_rand0) =&gt; cpp/numeric/random/linear_congruential_engine/operator_cmp
operator!=(std::minstd_rand0) =&gt; cpp/numeric/random/linear_congruential_engine/operator_cmp
operator&lt;&lt;(std::minstd_rand0) =&gt; cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt
operator&gt;&gt;(std::minstd_rand0) =&gt; cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt
std::minstd_rand =&gt; cpp/numeric/random/linear_congruential_engine
std::minstd_rand::minstd_rand =&gt; cpp/numeric/random/linear_congruential_engine/linear_congruential_engine
std::minstd_rand::seed =&gt; cpp/numeric/random/linear_congruential_engine/seed
std::minstd_rand::operator() =&gt; cpp/numeric/random/linear_congruential_engine/operator()
std::minstd_rand::discard =&gt; cpp/numeric/random/linear_congruential_engine/discard
std::minstd_rand::min =&gt; cpp/numeric/random/linear_congruential_engine/min
std::minstd_rand::max =&gt; cpp/numeric/random/linear_congruential_engine/max
operator==(std::minstd_rand) =&gt; cpp/numeric/random/linear_congruential_engine/operator_cmp
operator!=(std::minstd_rand) =&gt; cpp/numeric/random/linear_congruential_engine/operator_cmp
operator&lt;&lt;(std::minstd_rand) =&gt; cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt
operator&gt;&gt;(std::minstd_rand) =&gt; cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt
std::mt19937 =&gt; cpp/numeric/random/mersenne_twister_engine
std::mt19937::mt19937 =&gt; cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine
std::mt19937::seed =&gt; cpp/numeric/random/mersenne_twister_engine/seed
std::mt19937::operator() =&gt; cpp/numeric/random/mersenne_twister_engine/operator()
std::mt19937::discard =&gt; cpp/numeric/random/mersenne_twister_engine/discard
std::mt19937::min =&gt; cpp/numeric/random/mersenne_twister_engine/min
std::mt19937::max =&gt; cpp/numeric/random/mersenne_twister_engine/max
operator==(std::mt19937) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_cmp
operator!=(std::mt19937) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_cmp
operator&lt;&lt;(std::mt19937) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt
operator&gt;&gt;(std::mt19937) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt
std::mt19937_64 =&gt; cpp/numeric/random/mersenne_twister_engine
std::mt19937_64::mt19937_64 =&gt; cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine
std::mt19937_64::seed =&gt; cpp/numeric/random/mersenne_twister_engine/seed
std::mt19937_64::operator() =&gt; cpp/numeric/random/mersenne_twister_engine/operator()
std::mt19937_64::discard =&gt; cpp/numeric/random/mersenne_twister_engine/discard
std::mt19937_64::min =&gt; cpp/numeric/random/mersenne_twister_engine/min
std::mt19937_64::max =&gt; cpp/numeric/random/mersenne_twister_engine/max
operator==(std::mt19937_64) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_cmp
operator!=(std::mt19937_64) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_cmp
operator&lt;&lt;(std::mt19937_64) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt
operator&gt;&gt;(std::mt19937_64) =&gt; cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt
std::ranlux24_base =&gt; cpp/numeric/random/subtract_with_carry_engine
std::ranlux24_base::ranlux24_base =&gt; cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine
std::ranlux24_base::seed =&gt; cpp/numeric/random/subtract_with_carry_engine/seed
std::ranlux24_base::operator() =&gt; cpp/numeric/random/subtract_with_carry_engine/operator()
std::ranlux24_base::discard =&gt; cpp/numeric/random/subtract_with_carry_engine/discard
std::ranlux24_base::min =&gt; cpp/numeric/random/subtract_with_carry_engine/min
std::ranlux24_base::max =&gt; cpp/numeric/random/subtract_with_carry_engine/max
operator==(std::ranlux24_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_cmp
operator!=(std::ranlux24_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_cmp
operator&lt;&lt;(std::ranlux24_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt
operator&gt;&gt;(std::ranlux24_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt
std::ranlux48_base =&gt; cpp/numeric/random/subtract_with_carry_engine
std::ranlux48_base::ranlux48_base =&gt; cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine
std::ranlux48_base::seed =&gt; cpp/numeric/random/subtract_with_carry_engine/seed
std::ranlux48_base::operator() =&gt; cpp/numeric/random/subtract_with_carry_engine/operator()
std::ranlux48_base::discard =&gt; cpp/numeric/random/subtract_with_carry_engine/discard
std::ranlux48_base::min =&gt; cpp/numeric/random/subtract_with_carry_engine/min
std::ranlux48_base::max =&gt; cpp/numeric/random/subtract_with_carry_engine/max
operator==(std::ranlux48_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_cmp
operator!=(std::ranlux48_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_cmp
operator&lt;&lt;(std::ranlux48_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt
operator&gt;&gt;(std::ranlux48_base) =&gt; cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt
std::ranlux24 =&gt; cpp/numeric/random/discard_block_engine
std::ranlux24::ranlux24 =&gt; cpp/numeric/random/discard_block_engine/discard_block_engine
std::ranlux24::seed =&gt; cpp/numeric/random/discard_block_engine/seed
std::ranlux24::base =&gt; cpp/numeric/random/discard_block_engine/base
std::ranlux24::operator() =&gt; cpp/numeric/random/discard_block_engine/operator()
std::ranlux24::discard =&gt; cpp/numeric/random/discard_block_engine/discard
std::ranlux24::min =&gt; cpp/numeric/random/discard_block_engine/min
std::ranlux24::max =&gt; cpp/numeric/random/discard_block_engine/max
operator==(std::ranlux24) =&gt; cpp/numeric/random/discard_block_engine/operator_cmp
operator!=(std::ranlux24) =&gt; cpp/numeric/random/discard_block_engine/operator_cmp
operator&lt;&lt;(std::ranlux24) =&gt; cpp/numeric/random/discard_block_engine/operator_ltltgtgt
operator&gt;&gt;(std::ranlux24) =&gt; cpp/numeric/random/discard_block_engine/operator_ltltgtgt
std::ranlux48 =&gt; cpp/numeric/random/discard_block_engine
std::ranlux48::ranlux48 =&gt; cpp/numeric/random/discard_block_engine/discard_block_engine
std::ranlux48::seed =&gt; cpp/numeric/random/discard_block_engine/seed
std::ranlux48::base =&gt; cpp/numeric/random/discard_block_engine/base
std::ranlux48::operator() =&gt; cpp/numeric/random/discard_block_engine/operator()
std::ranlux48::discard =&gt; cpp/numeric/random/discard_block_engine/discard
std::ranlux48::min =&gt; cpp/numeric/random/discard_block_engine/min
std::ranlux48::max =&gt; cpp/numeric/random/discard_block_engine/max
operator==(std::ranlux48) =&gt; cpp/numeric/random/discard_block_engine/operator_cmp
operator!=(std::ranlux48) =&gt; cpp/numeric/random/discard_block_engine/operator_cmp
operator&lt;&lt;(std::ranlux48) =&gt; cpp/numeric/random/discard_block_engine/operator_ltltgtgt
operator&gt;&gt;(std::ranlux48) =&gt; cpp/numeric/random/discard_block_engine/operator_ltltgtgt
std::knuth_b =&gt; cpp/numeric/random/shuffle_order_engine
std::knuth_b::knuth_b =&gt; cpp/numeric/random/shuffle_order_engine/shuffle_order_engine
std::knuth_b::seed =&gt; cpp/numeric/random/shuffle_order_engine/seed
std::knuth_b::base =&gt; cpp/numeric/random/shuffle_order_engine/base
std::knuth_b::operator() =&gt; cpp/numeric/random/shuffle_order_engine/operator()
std::knuth_b::discard =&gt; cpp/numeric/random/shuffle_order_engine/discard
std::knuth_b::min =&gt; cpp/numeric/random/shuffle_order_engine/min
std::knuth_b::max =&gt; cpp/numeric/random/shuffle_order_engine/max
operator==(std::knuth_b) =&gt; cpp/numeric/random/shuffle_order_engine/operator_cmp
operator!=(std::knuth_b) =&gt; cpp/numeric/random/shuffle_order_engine/operator_cmp
operator&lt;&lt;(std::knuth_b) =&gt; cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt
operator&gt;&gt;(std::knuth_b) =&gt; cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt
std::default_random_engine =&gt; cpp/numeric/random
std::srand =&gt; cpp/numeric/random/srand
std::rand =&gt; cpp/numeric/random/rand
RAND_MAX =&gt; cpp/numeric/random/RAND_MAX
std::generate_canonical =&gt; cpp/numeric/random/generate_canonical
std::seed_seq =&gt; cpp/numeric/random/seed_seq
std::seed_seq::seed_seq =&gt; cpp/numeric/random/seed_seq/seed_seq
std::seed_seq::generate =&gt; cpp/numeric/random/seed_seq/generate
std::seed_seq::size =&gt; cpp/numeric/random/seed_seq/size
std::seed_seq::param =&gt; cpp/numeric/random/seed_seq/param
std::uniform_int_distribution =&gt; cpp/numeric/random/uniform_int_distribution
std::uniform_int_distribution::uniform_int_distribution =&gt; cpp/numeric/random/uniform_int_distribution/uniform_int_distribution
std::uniform_int_distribution::reset =&gt; cpp/numeric/random/uniform_int_distribution/reset
std::uniform_int_distribution::operator() =&gt; cpp/numeric/random/uniform_int_distribution/operator()
std::uniform_int_distribution::a =&gt; cpp/numeric/random/uniform_int_distribution/params
std::uniform_int_distribution::b =&gt; cpp/numeric/random/uniform_int_distribution/params
std::uniform_int_distribution::param =&gt; cpp/numeric/random/uniform_int_distribution/param
std::uniform_int_distribution::min =&gt; cpp/numeric/random/uniform_int_distribution/min
std::uniform_int_distribution::max =&gt; cpp/numeric/random/uniform_int_distribution/max
operator==(std::uniform_int_distribution) =&gt; cpp/numeric/random/uniform_int_distribution/operator_cmp
operator!=(std::uniform_int_distribution) =&gt; cpp/numeric/random/uniform_int_distribution/operator_cmp
operator&lt;&lt;(std::uniform_int_distribution) =&gt; cpp/numeric/random/uniform_int_distribution/operator_ltltgtgt
operator&gt;&gt;(std::uniform_int_distribution) =&gt; cpp/numeric/random/uniform_int_distribution/operator_ltltgtgt
std::uniform_real_distribution =&gt; cpp/numeric/random/uniform_real_distribution
std::uniform_real_distribution::uniform_real_distribution =&gt; cpp/numeric/random/uniform_real_distribution/uniform_real_distribution
std::uniform_real_distribution::reset =&gt; cpp/numeric/random/uniform_real_distribution/reset
operator()(std::uniform_real_distribution) =&gt; cpp/numeric/random/uniform_real_distribution/operator()
std::uniform_real_distribution::a =&gt; cpp/numeric/random/uniform_real_distribution/params
std::uniform_real_distribution::b =&gt; cpp/numeric/random/uniform_real_distribution/params
std::uniform_real_distribution::param =&gt; cpp/numeric/random/uniform_real_distribution/param
std::uniform_real_distribution::min =&gt; cpp/numeric/random/uniform_real_distribution/min
std::uniform_real_distribution::max =&gt; cpp/numeric/random/uniform_real_distribution/max
operator==(std::uniform_real_distribution) =&gt; cpp/numeric/random/uniform_real_distribution/operator_cmp
operator!=(std::uniform_real_distribution) =&gt; cpp/numeric/random/uniform_real_distribution/operator_cmp
operator&lt;&lt;(std::uniform_real_distribution) =&gt; cpp/numeric/random/uniform_real_distribution/operator_ltltgtgt
operator&gt;&gt;(std::uniform_real_distribution) =&gt; cpp/numeric/random/uniform_real_distribution/operator_ltltgtgt
std::bernoulli_distribution =&gt; cpp/numeric/random/bernoulli_distribution
std::bernoulli_distribution::bernoulli_distribution =&gt; cpp/numeric/random/bernoulli_distribution/bernoulli_distribution
std::bernoulli_distribution::reset =&gt; cpp/numeric/random/bernoulli_distribution/reset
operator()(std::bernoulli_distribution) =&gt; cpp/numeric/random/bernoulli_distribution/operator()
std::bernoulli_distribution::p =&gt; cpp/numeric/random/bernoulli_distribution/p
std::bernoulli_distribution::param =&gt; cpp/numeric/random/bernoulli_distribution/param
std::bernoulli_distribution::min =&gt; cpp/numeric/random/bernoulli_distribution/min
std::bernoulli_distribution::max =&gt; cpp/numeric/random/bernoulli_distribution/max
operator==(std::bernoulli_distribution) =&gt; cpp/numeric/random/bernoulli_distribution/operator_cmp
operator!=(std::bernoulli_distribution) =&gt; cpp/numeric/random/bernoulli_distribution/operator_cmp
operator&lt;&lt;(std::bernoulli_distribution) =&gt; cpp/numeric/random/bernoulli_distribution/operator_ltltgtgt
operator&gt;&gt;(std::bernoulli_distribution) =&gt; cpp/numeric/random/bernoulli_distribution/operator_ltltgtgt
std::binomial_distribution =&gt; cpp/numeric/random/binomial_distribution
std::binomial_distribution::binomial_distribution =&gt; cpp/numeric/random/binomial_distribution/binomial_distribution
std::binomial_distribution::reset =&gt; cpp/numeric/random/binomial_distribution/reset
operator()(std::binomial_distribution) =&gt; cpp/numeric/random/binomial_distribution/operator()
std::binomial_distribution::t =&gt; cpp/numeric/random/binomial_distribution/params
std::binomial_distribution::p =&gt; cpp/numeric/random/binomial_distribution/params
std::binomial_distribution::param =&gt; cpp/numeric/random/binomial_distribution/param
std::binomial_distribution::min =&gt; cpp/numeric/random/binomial_distribution/min
std::binomial_distribution::max =&gt; cpp/numeric/random/binomial_distribution/max
operator==(std::binomial_distribution) =&gt; cpp/numeric/random/binomial_distribution/operator_cmp
operator!=(std::binomial_distribution) =&gt; cpp/numeric/random/binomial_distribution/operator_cmp
operator&lt;&lt;(std::binomial_distribution) =&gt; cpp/numeric/random/binomial_distribution/operator_ltltgtgt
operator&gt;&gt;(std::binomial_distribution) =&gt; cpp/numeric/random/binomial_distribution/operator_ltltgtgt
std::negative_binomial_distribution =&gt; cpp/numeric/random/negative_binomial_distribution
std::negative_binomial_distribution::negative_binomial_distribution =&gt; cpp/numeric/random/negative_binomial_distribution/negative_binomial_distribution
std::negative_binomial_distribution::reset =&gt; cpp/numeric/random/negative_binomial_distribution/reset
operator()(std::negative_binomial_distribution) =&gt; cpp/numeric/random/negative_binomial_distribution/operator()
std::negative_binomial_distribution::k =&gt; cpp/numeric/random/negative_binomial_distribution/params
std::negative_binomial_distribution::p =&gt; cpp/numeric/random/negative_binomial_distribution/params
std::negative_binomial_distribution::param =&gt; cpp/numeric/random/negative_binomial_distribution/param
std::negative_binomial_distribution::min =&gt; cpp/numeric/random/negative_binomial_distribution/min
std::negative_binomial_distribution::max =&gt; cpp/numeric/random/negative_binomial_distribution/max
operator==(std::negative_binomial_distribution) =&gt; cpp/numeric/random/negative_binomial_distribution/operator_cmp
operator!=(std::negative_binomial_distribution) =&gt; cpp/numeric/random/negative_binomial_distribution/operator_cmp
operator&lt;&lt;(std::negative_binomial_distribution) =&gt; cpp/numeric/random/negative_binomial_distribution/operator_ltltgtgt
operator&gt;&gt;(std::negative_binomial_distribution) =&gt; cpp/numeric/random/negative_binomial_distribution/operator_ltltgtgt
std::geometric_distribution =&gt; cpp/numeric/random/geometric_distribution
std::geometric_distribution::geometric_distribution =&gt; cpp/numeric/random/geometric_distribution/geometric_distribution
std::geometric_distribution::reset =&gt; cpp/numeric/random/geometric_distribution/reset
operator()(std::geometric_distribution) =&gt; cpp/numeric/random/geometric_distribution/operator()
std::geometric_distribution::p =&gt; cpp/numeric/random/geometric_distribution/p
std::geometric_distribution::param =&gt; cpp/numeric/random/geometric_distribution/param
std::geometric_distribution::min =&gt; cpp/numeric/random/geometric_distribution/min
std::geometric_distribution::max =&gt; cpp/numeric/random/geometric_distribution/max
operator==(std::geometric_distribution) =&gt; cpp/numeric/random/geometric_distribution/operator_cmp
operator!=(std::geometric_distribution) =&gt; cpp/numeric/random/geometric_distribution/operator_cmp
operator&lt;&lt;(std::geometric_distribution) =&gt; cpp/numeric/random/geometric_distribution/operator_ltltgtgt
operator&gt;&gt;(std::geometric_distribution) =&gt; cpp/numeric/random/geometric_distribution/operator_ltltgtgt
std::poisson_distribution =&gt; cpp/numeric/random/poisson_distribution
std::poisson_distribution::poisson_distribution =&gt; cpp/numeric/random/poisson_distribution/poisson_distribution
std::poisson_distribution::reset =&gt; cpp/numeric/random/poisson_distribution/reset
operator()(std::poisson_distribution) =&gt; cpp/numeric/random/poisson_distribution/operator()
std::poisson_distribution::mean =&gt; cpp/numeric/random/poisson_distribution/mean
std::poisson_distribution::param =&gt; cpp/numeric/random/poisson_distribution/param
std::poisson_distribution::min =&gt; cpp/numeric/random/poisson_distribution/min
std::poisson_distribution::max =&gt; cpp/numeric/random/poisson_distribution/max
operator==(std::poisson_distribution) =&gt; cpp/numeric/random/poisson_distribution/operator_cmp
operator!=(std::poisson_distribution) =&gt; cpp/numeric/random/poisson_distribution/operator_cmp
operator&lt;&lt;(std::poisson_distribution) =&gt; cpp/numeric/random/poisson_distribution/operator_ltltgtgt
operator&gt;&gt;(std::poisson_distribution) =&gt; cpp/numeric/random/poisson_distribution/operator_ltltgtgt
std::exponential_distribution =&gt; cpp/numeric/random/exponential_distribution
std::exponential_distribution::exponential_distribution =&gt; cpp/numeric/random/exponential_distribution/exponential_distribution
std::exponential_distribution::reset =&gt; cpp/numeric/random/exponential_distribution/reset
std::exponential_distribution::operator() =&gt; cpp/numeric/random/exponential_distribution/operator()
std::exponential_distribution::lambda =&gt; cpp/numeric/random/exponential_distribution/lambda
std::exponential_distribution::param =&gt; cpp/numeric/random/exponential_distribution/param
std::exponential_distribution::min =&gt; cpp/numeric/random/exponential_distribution/min
std::exponential_distribution::max =&gt; cpp/numeric/random/exponential_distribution/max
operator==(std::exponential_distribution) =&gt; cpp/numeric/random/exponential_distribution/operator_cmp
operator!=(std::exponential_distribution) =&gt; cpp/numeric/random/exponential_distribution/operator_cmp
operator&lt;&lt;(std::exponential_distribution) =&gt; cpp/numeric/random/exponential_distribution/operator_ltltgtgt
operator&gt;&gt;(std::exponential_distribution) =&gt; cpp/numeric/random/exponential_distribution/operator_ltltgtgt
std::gamma_distribution =&gt; cpp/numeric/random/gamma_distribution
std::gamma_distribution::gamma_distribution =&gt; cpp/numeric/random/gamma_distribution/gamma_distribution
std::gamma_distribution::reset =&gt; cpp/numeric/random/gamma_distribution/reset
std::gamma_distribution::operator() =&gt; cpp/numeric/random/gamma_distribution/operator()
std::gamma_distribution::alpha =&gt; cpp/numeric/random/gamma_distribution/params
std::gamma_distribution::beta =&gt; cpp/numeric/random/gamma_distribution/params
std::gamma_distribution::param =&gt; cpp/numeric/random/gamma_distribution/param
std::gamma_distribution::min =&gt; cpp/numeric/random/gamma_distribution/min
std::gamma_distribution::max =&gt; cpp/numeric/random/gamma_distribution/max
operator==(std::gamma_distribution) =&gt; cpp/numeric/random/gamma_distribution/operator_cmp
operator!=(std::gamma_distribution) =&gt; cpp/numeric/random/gamma_distribution/operator_cmp
operator&lt;&lt;(std::gamma_distribution) =&gt; cpp/numeric/random/gamma_distribution/operator_ltltgtgt
operator&gt;&gt;(std::gamma_distribution) =&gt; cpp/numeric/random/gamma_distribution/operator_ltltgtgt
std::weibull_distribution =&gt; cpp/numeric/random/weibull_distribution
std::weibull_distribution::weibull_distribution =&gt; cpp/numeric/random/weibull_distribution/weibull_distribution
std::weibull_distribution::reset =&gt; cpp/numeric/random/weibull_distribution/reset
std::weibull_distribution::operator() =&gt; cpp/numeric/random/weibull_distribution/operator()
std::weibull_distribution::a =&gt; cpp/numeric/random/weibull_distribution/params
std::weibull_distribution::b =&gt; cpp/numeric/random/weibull_distribution/params
std::weibull_distribution::param =&gt; cpp/numeric/random/weibull_distribution/param
std::weibull_distribution::min =&gt; cpp/numeric/random/weibull_distribution/min
std::weibull_distribution::max =&gt; cpp/numeric/random/weibull_distribution/max
operator==(std::weibull_distribution) =&gt; cpp/numeric/random/weibull_distribution/operator_cmp
operator!=(std::weibull_distribution) =&gt; cpp/numeric/random/weibull_distribution/operator_cmp
operator&lt;&lt;(std::weibull_distribution) =&gt; cpp/numeric/random/weibull_distribution/operator_ltltgtgt
operator&gt;&gt;(std::weibull_distribution) =&gt; cpp/numeric/random/weibull_distribution/operator_ltltgtgt
std::extreme_value_distribution =&gt; cpp/numeric/random/extreme_value_distribution
std::extreme_value_distribution::extreme_value_distribution =&gt; cpp/numeric/random/extreme_value_distribution/extreme_value_distribution
std::extreme_value_distribution::reset =&gt; cpp/numeric/random/extreme_value_distribution/reset
std::extreme_value_distribution::operator() =&gt; cpp/numeric/random/extreme_value_distribution/operator()
std::extreme_value_distribution::a =&gt; cpp/numeric/random/extreme_value_distribution/params
std::extreme_value_distribution::b =&gt; cpp/numeric/random/extreme_value_distribution/params
std::extreme_value_distribution::param =&gt; cpp/numeric/random/extreme_value_distribution/param
std::extreme_value_distribution::min =&gt; cpp/numeric/random/extreme_value_distribution/min
std::extreme_value_distribution::max =&gt; cpp/numeric/random/extreme_value_distribution/max
operator==(std::extreme_value_distribution) =&gt; cpp/numeric/random/extreme_value_distribution/operator_cmp
operator!=(std::extreme_value_distribution) =&gt; cpp/numeric/random/extreme_value_distribution/operator_cmp
operator&lt;&lt;(std::extreme_value_distribution) =&gt; cpp/numeric/random/extreme_value_distribution/operator_ltltgtgt
operator&gt;&gt;(std::extreme_value_distribution) =&gt; cpp/numeric/random/extreme_value_distribution/operator_ltltgtgt
std::normal_distribution =&gt; cpp/numeric/random/normal_distribution
std::normal_distribution::normal_distribution =&gt; cpp/numeric/random/normal_distribution/normal_distribution
std::normal_distribution::reset =&gt; cpp/numeric/random/normal_distribution/reset
std::normal_distribution::operator() =&gt; cpp/numeric/random/normal_distribution/operator()
std::normal_distribution::mean =&gt; cpp/numeric/random/normal_distribution/params
std::normal_distribution::stddev =&gt; cpp/numeric/random/normal_distribution/params
std::normal_distribution::param =&gt; cpp/numeric/random/normal_distribution/param
std::normal_distribution::min =&gt; cpp/numeric/random/normal_distribution/min
std::normal_distribution::max =&gt; cpp/numeric/random/normal_distribution/max
operator==(std::normal_distribution) =&gt; cpp/numeric/random/normal_distribution/operator_cmp
operator!=(std::normal_distribution) =&gt; cpp/numeric/random/normal_distribution/operator_cmp
operator&lt;&lt;(std::normal_distribution) =&gt; cpp/numeric/random/normal_distribution/operator_ltltgtgt
operator&gt;&gt;(std::normal_distribution) =&gt; cpp/numeric/random/normal_distribution/operator_ltltgtgt
std::lognormal_distribution =&gt; cpp/numeric/random/lognormal_distribution
std::lognormal_distribution::lognormal_distribution =&gt; cpp/numeric/random/lognormal_distribution/lognormal_distribution
std::lognormal_distribution::reset =&gt; cpp/numeric/random/lognormal_distribution/reset
std::lognormal_distribution::operator() =&gt; cpp/numeric/random/lognormal_distribution/operator()
std::lognormal_distribution::m =&gt; cpp/numeric/random/lognormal_distribution/params
std::lognormal_distribution::s =&gt; cpp/numeric/random/lognormal_distribution/params
std::lognormal_distribution::param =&gt; cpp/numeric/random/lognormal_distribution/param
std::lognormal_distribution::min =&gt; cpp/numeric/random/lognormal_distribution/min
std::lognormal_distribution::max =&gt; cpp/numeric/random/lognormal_distribution/max
operator==(std::lognormal_distribution) =&gt; cpp/numeric/random/lognormal_distribution/operator_cmp
operator!=(std::lognormal_distribution) =&gt; cpp/numeric/random/lognormal_distribution/operator_cmp
operator&lt;&lt;(std::lognormal_distribution) =&gt; cpp/numeric/random/lognormal_distribution/operator_ltltgtgt
operator&gt;&gt;(std::lognormal_distribution) =&gt; cpp/numeric/random/lognormal_distribution/operator_ltltgtgt
std::chi_squared_distribution =&gt; cpp/numeric/random/chi_squared_distribution
std::chi_squared_distribution::chi_squared_distribution =&gt; cpp/numeric/random/chi_squared_distribution/chi_squared_distribution
std::chi_squared_distribution::reset =&gt; cpp/numeric/random/chi_squared_distribution/reset
std::chi_squared_distribution::operator() =&gt; cpp/numeric/random/chi_squared_distribution/operator()
std::chi_squared_distribution::n =&gt; cpp/numeric/random/chi_squared_distribution/n
std::chi_squared_distribution::param =&gt; cpp/numeric/random/chi_squared_distribution/param
std::chi_squared_distribution::min =&gt; cpp/numeric/random/chi_squared_distribution/min
std::chi_squared_distribution::max =&gt; cpp/numeric/random/chi_squared_distribution/max
operator==(std::chi_squared_distribution) =&gt; cpp/numeric/random/chi_squared_distribution/operator_cmp
operator!=(std::chi_squared_distribution) =&gt; cpp/numeric/random/chi_squared_distribution/operator_cmp
operator&lt;&lt;(std::chi_squared_distribution) =&gt; cpp/numeric/random/chi_squared_distribution/operator_ltltgtgt
operator&gt;&gt;(std::chi_squared_distribution) =&gt; cpp/numeric/random/chi_squared_distribution/operator_ltltgtgt
std::cauchy_distribution =&gt; cpp/numeric/random/cauchy_distribution
std::cauchy_distribution::cauchy_distribution =&gt; cpp/numeric/random/cauchy_distribution/cauchy_distribution
std::cauchy_distribution::reset =&gt; cpp/numeric/random/cauchy_distribution/reset
std::cauchy_distribution::operator() =&gt; cpp/numeric/random/cauchy_distribution/operator()
std::cauchy_distribution::a =&gt; cpp/numeric/random/cauchy_distribution/params
std::cauchy_distribution::b =&gt; cpp/numeric/random/cauchy_distribution/params
std::cauchy_distribution::param =&gt; cpp/numeric/random/cauchy_distribution/param
std::cauchy_distribution::min =&gt; cpp/numeric/random/cauchy_distribution/min
std::cauchy_distribution::max =&gt; cpp/numeric/random/cauchy_distribution/max
operator==(std::cauchy_distribution) =&gt; cpp/numeric/random/cauchy_distribution/operator_cmp
operator!=(std::cauchy_distribution) =&gt; cpp/numeric/random/cauchy_distribution/operator_cmp
operator&lt;&lt;(std::cauchy_distribution) =&gt; cpp/numeric/random/cauchy_distribution/operator_ltltgtgt
operator&gt;&gt;(std::cauchy_distribution) =&gt; cpp/numeric/random/cauchy_distribution/operator_ltltgtgt
std::fisher_f_distribution =&gt; cpp/numeric/random/fisher_f_distribution
std::fisher_f_distribution::fisher_f_distribution =&gt; cpp/numeric/random/fisher_f_distribution/fisher_f_distribution
std::fisher_f_distribution::reset =&gt; cpp/numeric/random/fisher_f_distribution/reset
std::fisher_f_distribution::operator() =&gt; cpp/numeric/random/fisher_f_distribution/operator()
std::fisher_f_distribution::m =&gt; cpp/numeric/random/fisher_f_distribution/params
std::fisher_f_distribution::n =&gt; cpp/numeric/random/fisher_f_distribution/params
std::fisher_f_distribution::param =&gt; cpp/numeric/random/fisher_f_distribution/param
std::fisher_f_distribution::min =&gt; cpp/numeric/random/fisher_f_distribution/min
std::fisher_f_distribution::max =&gt; cpp/numeric/random/fisher_f_distribution/max
operator==(std::fisher_f_distribution) =&gt; cpp/numeric/random/fisher_f_distribution/operator_cmp
operator!=(std::fisher_f_distribution) =&gt; cpp/numeric/random/fisher_f_distribution/operator_cmp
operator&lt;&lt;(std::fisher_f_distribution) =&gt; cpp/numeric/random/fisher_f_distribution/operator_ltltgtgt
operator&gt;&gt;(std::fisher_f_distribution) =&gt; cpp/numeric/random/fisher_f_distribution/operator_ltltgtgt
std::student_t_distribution =&gt; cpp/numeric/random/student_t_distribution
std::student_t_distribution::student_t_distribution =&gt; cpp/numeric/random/student_t_distribution/student_t_distribution
std::student_t_distribution::reset =&gt; cpp/numeric/random/student_t_distribution/reset
std::student_t_distribution::operator() =&gt; cpp/numeric/random/student_t_distribution/operator()
std::student_t_distribution::n =&gt; cpp/numeric/random/student_t_distribution/n
std::student_t_distribution::param =&gt; cpp/numeric/random/student_t_distribution/param
std::student_t_distribution::min =&gt; cpp/numeric/random/student_t_distribution/min
std::student_t_distribution::max =&gt; cpp/numeric/random/student_t_distribution/max
operator==(std::student_t_distribution) =&gt; cpp/numeric/random/student_t_distribution/operator_cmp
operator!=(std::student_t_distribution) =&gt; cpp/numeric/random/student_t_distribution/operator_cmp
operator&lt;&lt;(std::student_t_distribution) =&gt; cpp/numeric/random/student_t_distribution/operator_ltltgtgt
operator&gt;&gt;(std::student_t_distribution) =&gt; cpp/numeric/random/student_t_distribution/operator_ltltgtgt
std::discrete_distribution =&gt; cpp/numeric/random/discrete_distribution
std::discrete_distribution::discrete_distribution =&gt; cpp/numeric/random/discrete_distribution/discrete_distribution
std::discrete_distribution::reset =&gt; cpp/numeric/random/discrete_distribution/reset
std::discrete_distribution::operator() =&gt; cpp/numeric/random/discrete_distribution/operator()
std::discrete_distribution::probabilities =&gt; cpp/numeric/random/discrete_distribution/probabilities
std::discrete_distribution::param =&gt; cpp/numeric/random/discrete_distribution/param
std::discrete_distribution::min =&gt; cpp/numeric/random/discrete_distribution/min
std::discrete_distribution::max =&gt; cpp/numeric/random/discrete_distribution/max
operator==(std::discrete_distribution) =&gt; cpp/numeric/random/discrete_distribution/operator_cmp
operator!=(std::discrete_distribution) =&gt; cpp/numeric/random/discrete_distribution/operator_cmp
operator&lt;&lt;(std::discrete_distribution) =&gt; cpp/numeric/random/discrete_distribution/operator_ltltgtgt
operator&gt;&gt;(std::discrete_distribution) =&gt; cpp/numeric/random/discrete_distribution/operator_ltltgtgt
std::piecewise_constant_distribution =&gt; cpp/numeric/random/piecewise_constant_distribution
std::piecewise_constant_distribution::piecewise_constant_distribution =&gt; cpp/numeric/random/piecewise_constant_distribution/piecewise_constant_distribution
std::piecewise_constant_distribution::reset =&gt; cpp/numeric/random/piecewise_constant_distribution/reset
std::piecewise_constant_distribution::operator() =&gt; cpp/numeric/random/piecewise_constant_distribution/operator()
std::piecewise_constant_distribution::intervals =&gt; cpp/numeric/random/piecewise_constant_distribution/params
std::piecewise_constant_distribution::densities =&gt; cpp/numeric/random/piecewise_constant_distribution/params
std::piecewise_constant_distribution::param =&gt; cpp/numeric/random/piecewise_constant_distribution/param
std::piecewise_constant_distribution::min =&gt; cpp/numeric/random/piecewise_constant_distribution/min
std::piecewise_constant_distribution::max =&gt; cpp/numeric/random/piecewise_constant_distribution/max
operator==(std::piecewise_constant_distribution) =&gt; cpp/numeric/random/piecewise_constant_distribution/operator_cmp
operator!=(std::piecewise_constant_distribution) =&gt; cpp/numeric/random/piecewise_constant_distribution/operator_cmp
operator&lt;&lt;(std::piecewise_constant_distribution) =&gt; cpp/numeric/random/piecewise_constant_distribution/operator_ltltgtgt
operator&gt;&gt;(std::piecewise_constant_distribution) =&gt; cpp/numeric/random/piecewise_constant_distribution/operator_ltltgtgt
std::piecewise_linear_distribution =&gt; cpp/numeric/random/piecewise_linear_distribution
std::piecewise_linear_distribution::piecewise_linear_distribution =&gt; cpp/numeric/random/piecewise_linear_distribution/piecewise_linear_distribution
std::piecewise_linear_distribution::reset =&gt; cpp/numeric/random/piecewise_linear_distribution/reset
std::piecewise_linear_distribution::operator() =&gt; cpp/numeric/random/piecewise_linear_distribution/operator()
std::piecewise_linear_distribution::intervals =&gt; cpp/numeric/random/piecewise_linear_distribution/params
std::piecewise_linear_distribution::densities =&gt; cpp/numeric/random/piecewise_linear_distribution/params
std::piecewise_linear_distribution::param =&gt; cpp/numeric/random/piecewise_linear_distribution/param
std::piecewise_linear_distribution::min =&gt; cpp/numeric/random/piecewise_linear_distribution/min
std::piecewise_linear_distribution::max =&gt; cpp/numeric/random/piecewise_linear_distribution/max
operator==(std::piecewise_linear_distribution) =&gt; cpp/numeric/random/piecewise_linear_distribution/operator_cmp
operator!=(std::piecewise_linear_distribution) =&gt; cpp/numeric/random/piecewise_linear_distribution/operator_cmp
operator&lt;&lt;(std::piecewise_linear_distribution) =&gt; cpp/numeric/random/piecewise_linear_distribution/operator_ltltgtgt
operator&gt;&gt;(std::piecewise_linear_distribution) =&gt; cpp/numeric/random/piecewise_linear_distribution/operator_ltltgtgt
std::ratio =&gt; cpp/numeric/ratio/ratio
std::yocto =&gt; cpp/numeric/ratio/ratio
std::femto =&gt; cpp/numeric/ratio/ratio
std::pico =&gt; cpp/numeric/ratio/ratio
std::nano =&gt; cpp/numeric/ratio/ratio
std::micro =&gt; cpp/numeric/ratio/ratio
std::milli =&gt; cpp/numeric/ratio/ratio
std::centi =&gt; cpp/numeric/ratio/ratio
std::deci =&gt; cpp/numeric/ratio/ratio
std::deca =&gt; cpp/numeric/ratio/ratio
std::hecto =&gt; cpp/numeric/ratio/ratio
std::kilo =&gt; cpp/numeric/ratio/ratio
std::mega =&gt; cpp/numeric/ratio/ratio
std::giga =&gt; cpp/numeric/ratio/ratio
std::tera =&gt; cpp/numeric/ratio/ratio
std::peta =&gt; cpp/numeric/ratio/ratio
std::exa =&gt; cpp/numeric/ratio/ratio
std::zetta =&gt; cpp/numeric/ratio/ratio
std::yotta =&gt; cpp/numeric/ratio/ratio
std::ratio_add =&gt; cpp/numeric/ratio/ratio_add
std::ratio_subtract =&gt; cpp/numeric/ratio/ratio_subtract
std::ratio_multiply =&gt; cpp/numeric/ratio/ratio_multiply
std::ratio_divide =&gt; cpp/numeric/ratio/ratio_divide
std::ratio_equal =&gt; cpp/numeric/ratio/ratio_equal
std::ratio_equal_v =&gt; cpp/numeric/ratio/ratio_equal
std::ratio_not_equal =&gt; cpp/numeric/ratio/ratio_not_equal
std::ratio_not_equal_v =&gt; cpp/numeric/ratio/ratio_not_equal
std::ratio_less =&gt; cpp/numeric/ratio/ratio_less
std::ratio_less_v =&gt; cpp/numeric/ratio/ratio_less
std::ratio_less_equal =&gt; cpp/numeric/ratio/ratio_less_equal
std::ratio_less_equal_v =&gt; cpp/numeric/ratio/ratio_less_equal
std::ratio_greater =&gt; cpp/numeric/ratio/ratio_greater
std::ratio_greater_v =&gt; cpp/numeric/ratio/ratio_greater
std::ratio_greater_equal =&gt; cpp/numeric/ratio/ratio_greater_equal
std::ratio_greater_equal_v =&gt; cpp/numeric/ratio/ratio_greater_equal
std::execution::sequenced_policy =&gt; cpp/algorithm/execution_policy_tag_t
std::execution::parallel_policy =&gt; cpp/algorithm/execution_policy_tag_t
std::execution::parallel_unsequenced_policy =&gt; cpp/algorithm/execution_policy_tag_t
std::execution::seq =&gt; cpp/algorithm/execution_policy_tag
std::execution::par =&gt; cpp/algorithm/execution_policy_tag
std::execution::par_unseq =&gt; cpp/algorithm/execution_policy_tag
std::is_execution_policy =&gt; cpp/algorithm/is_execution_policy
std::is_execution_policy_v =&gt; cpp/algorithm/is_execution_policy
std::all_of =&gt; cpp/algorithm/all_any_none_of
std::any_of =&gt; cpp/algorithm/all_any_none_of
std::none_of =&gt; cpp/algorithm/all_any_none_of
std::for_each =&gt; cpp/algorithm/for_each
std::for_each_n =&gt; cpp/algorithm/for_each_n
std::count =&gt; cpp/algorithm/count
std::count_if =&gt; cpp/algorithm/count
std::mismatch =&gt; cpp/algorithm/mismatch
std::equal =&gt; cpp/algorithm/equal
std::find =&gt; cpp/algorithm/find
std::find_if =&gt; cpp/algorithm/find
std::find_if_not =&gt; cpp/algorithm/find
std::find_end =&gt; cpp/algorithm/find_end
std::find_first_of =&gt; cpp/algorithm/find_first_of
std::adjacent_find =&gt; cpp/algorithm/adjacent_find
std::search =&gt; cpp/algorithm/search
std::search_n =&gt; cpp/algorithm/search_n
std::copy =&gt; cpp/algorithm/copy
std::copy_if =&gt; cpp/algorithm/copy
std::copy_n =&gt; cpp/algorithm/copy_n
std::copy_backward =&gt; cpp/algorithm/copy_backward
std::move (algorithm) =&gt; cpp/algorithm/move
std::move_backward =&gt; cpp/algorithm/move_backward
std::fill =&gt; cpp/algorithm/fill
std::fill_n =&gt; cpp/algorithm/fill_n
std::transform =&gt; cpp/algorithm/transform
std::generate =&gt; cpp/algorithm/generate
std::generate_n =&gt; cpp/algorithm/generate_n
std::remove (&lt;algorithm&gt;) =&gt; cpp/algorithm/remove
std::remove_if =&gt; cpp/algorithm/remove
std::remove_copy =&gt; cpp/algorithm/remove_copy
std::remove_copy_if =&gt; cpp/algorithm/remove_copy
std::replace =&gt; cpp/algorithm/replace
std::replace_if =&gt; cpp/algorithm/replace
std::replace_copy =&gt; cpp/algorithm/replace_copy
std::replace_copy_if =&gt; cpp/algorithm/replace_copy
std::swap =&gt; cpp/algorithm/swap
std::swap_ranges =&gt; cpp/algorithm/swap_ranges
std::iter_swap =&gt; cpp/algorithm/iter_swap
std::reverse =&gt; cpp/algorithm/reverse
std::reverse_copy =&gt; cpp/algorithm/reverse_copy
std::rotate =&gt; cpp/algorithm/rotate
std::rotate_copy =&gt; cpp/algorithm/rotate_copy
std::random_shuffle =&gt; cpp/algorithm/random_shuffle
std::shuffle =&gt; cpp/algorithm/random_shuffle
std::sample =&gt; cpp/algorithm/sample
std::unique =&gt; cpp/algorithm/unique
std::unique_copy =&gt; cpp/algorithm/unique_copy
std::is_partitioned =&gt; cpp/algorithm/is_partitioned
std::partition =&gt; cpp/algorithm/partition
std::partition_copy =&gt; cpp/algorithm/partition_copy
std::stable_partition =&gt; cpp/algorithm/stable_partition
std::partition_point =&gt; cpp/algorithm/partition_point
std::is_sorted =&gt; cpp/algorithm/is_sorted
std::is_sorted_until =&gt; cpp/algorithm/is_sorted_until
std::sort =&gt; cpp/algorithm/sort
std::partial_sort =&gt; cpp/algorithm/partial_sort
std::partial_sort_copy =&gt; cpp/algorithm/partial_sort_copy
std::stable_sort =&gt; cpp/algorithm/stable_sort
std::nth_element =&gt; cpp/algorithm/nth_element
std::lower_bound =&gt; cpp/algorithm/lower_bound
std::upper_bound =&gt; cpp/algorithm/upper_bound
std::binary_search =&gt; cpp/algorithm/binary_search
std::equal_range =&gt; cpp/algorithm/equal_range
std::merge =&gt; cpp/algorithm/merge
std::inplace_merge =&gt; cpp/algorithm/inplace_merge
std::includes =&gt; cpp/algorithm/includes
std::set_difference =&gt; cpp/algorithm/set_difference
std::set_intersection =&gt; cpp/algorithm/set_intersection
std::set_symmetric_difference =&gt; cpp/algorithm/set_symmetric_difference
std::set_union =&gt; cpp/algorithm/set_union
std::is_heap =&gt; cpp/algorithm/is_heap
std::is_heap_until =&gt; cpp/algorithm/is_heap_until
std::make_heap =&gt; cpp/algorithm/make_heap
std::push_heap =&gt; cpp/algorithm/push_heap
std::pop_heap =&gt; cpp/algorithm/pop_heap
std::sort_heap =&gt; cpp/algorithm/sort_heap
std::max =&gt; cpp/algorithm/max
std::max_element =&gt; cpp/algorithm/max_element
std::min =&gt; cpp/algorithm/min
std::min_element =&gt; cpp/algorithm/min_element
std::minmax =&gt; cpp/algorithm/minmax
std::minmax_element =&gt; cpp/algorithm/minmax_element
std::clamp =&gt; cpp/algorithm/clamp
std::lexicographical_compare =&gt; cpp/algorithm/lexicographical_compare
std::is_permutation =&gt; cpp/algorithm/is_permutation
std::next_permutation =&gt; cpp/algorithm/next_permutation
std::prev_permutation =&gt; cpp/algorithm/prev_permutation
std::accumulate =&gt; cpp/algorithm/accumulate
std::inner_product =&gt; cpp/algorithm/inner_product
std::adjacent_difference =&gt; cpp/algorithm/adjacent_difference
std::partial_sum =&gt; cpp/algorithm/partial_sum
std::iota =&gt; cpp/algorithm/iota
std::reduce =&gt; cpp/algorithm/reduce
std::inclusive_scan =&gt; cpp/algorithm/inclusive_scan
std::exclusive_scan =&gt; cpp/algorithm/exclusive_scan
std::transform_reduce =&gt; cpp/algorithm/transform_reduce
std::transform_inclusive_scan =&gt; cpp/algorithm/transform_inclusive_scan
std::transform_exclusive_scan =&gt; cpp/algorithm/transform_exclusive_scan
std::gcd =&gt; cpp/numeric/gcd
std::lcm =&gt; cpp/numeric/lcm
std::qsort =&gt; cpp/algorithm/qsort
std::bsearch =&gt; cpp/algorithm/bsearch
std::basic_streambuf =&gt; cpp/io/basic_streambuf
std::basic_streambuf::basic_streambuf =&gt; cpp/io/basic_streambuf/basic_streambuf
std::basic_streambuf::~basic_streambuf =&gt; cpp/io/basic_streambuf/~basic_streambuf
std::basic_streambuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::basic_streambuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::basic_streambuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::basic_streambuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::basic_streambuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::basic_streambuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::basic_streambuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::basic_streambuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::basic_streambuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::basic_streambuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::basic_streambuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::basic_streambuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::basic_streambuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::basic_streambuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::basic_streambuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::basic_streambuf::operator= =&gt; cpp/io/basic_streambuf/operator=
std::basic_streambuf::swap =&gt; cpp/io/basic_streambuf/swap
std::basic_streambuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::basic_streambuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::basic_streambuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::basic_streambuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::basic_streambuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::basic_streambuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::basic_streambuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::basic_streambuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::basic_streambuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::basic_streambuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::basic_streambuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::basic_streambuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::basic_streambuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::basic_streambuf::setg =&gt; cpp/io/basic_streambuf/setg
std::basic_streambuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::basic_streambuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::basic_streambuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::basic_streambuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::basic_streambuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::basic_streambuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::basic_streambuf::setp =&gt; cpp/io/basic_streambuf/setp
std::basic_streambuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::basic_filebuf =&gt; cpp/io/basic_filebuf
std::basic_filebuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::basic_filebuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::basic_filebuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::basic_filebuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::basic_filebuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::basic_filebuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::basic_filebuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::basic_filebuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::basic_filebuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::basic_filebuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::basic_filebuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::basic_filebuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::basic_filebuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::basic_filebuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::basic_filebuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::basic_filebuf::swap =&gt; cpp/io/basic_streambuf/swap
std::basic_filebuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::basic_filebuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::basic_filebuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::basic_filebuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::basic_filebuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::basic_filebuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::basic_filebuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::basic_filebuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::basic_filebuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::basic_filebuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::basic_filebuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::basic_filebuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::basic_filebuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::basic_filebuf::setg =&gt; cpp/io/basic_streambuf/setg
std::basic_filebuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::basic_filebuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::basic_filebuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::basic_filebuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::basic_filebuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::basic_filebuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::basic_filebuf::setp =&gt; cpp/io/basic_streambuf/setp
std::basic_filebuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::basic_filebuf::basic_filebuf =&gt; cpp/io/basic_filebuf/basic_filebuf
std::basic_filebuf::~basic_filebuf =&gt; cpp/io/basic_filebuf/~basic_filebuf
std::basic_filebuf::operator= =&gt; cpp/io/basic_filebuf/operator=
std::basic_filebuf::swap =&gt; cpp/io/basic_filebuf/swap
std::basic_filebuf::is_open =&gt; cpp/io/basic_filebuf/is_open
std::basic_filebuf::open =&gt; cpp/io/basic_filebuf/open
std::basic_filebuf::close =&gt; cpp/io/basic_filebuf/close
std::basic_filebuf::showmanyc =&gt; cpp/io/basic_filebuf/showmanyc
std::basic_filebuf::underflow =&gt; cpp/io/basic_filebuf/underflow
std::basic_filebuf::uflow =&gt; cpp/io/basic_filebuf/uflow
std::basic_filebuf::pbackfail =&gt; cpp/io/basic_filebuf/pbackfail
std::basic_filebuf::overflow =&gt; cpp/io/basic_filebuf/overflow
std::basic_filebuf::setbuf =&gt; cpp/io/basic_filebuf/setbuf
std::basic_filebuf::seekoff =&gt; cpp/io/basic_filebuf/seekoff
std::basic_filebuf::seekpos =&gt; cpp/io/basic_filebuf/seekpos
std::basic_filebuf::sync =&gt; cpp/io/basic_filebuf/sync
std::basic_filebuf::imbue =&gt; cpp/io/basic_filebuf/imbue
std::swap(std::basic_filebuf) =&gt; cpp/io/basic_filebuf/swap2
std::basic_stringbuf =&gt; cpp/io/basic_stringbuf
std::basic_stringbuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::basic_stringbuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::basic_stringbuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::basic_stringbuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::basic_stringbuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::basic_stringbuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::basic_stringbuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::basic_stringbuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::basic_stringbuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::basic_stringbuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::basic_stringbuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::basic_stringbuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::basic_stringbuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::basic_stringbuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::basic_stringbuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::basic_stringbuf::swap =&gt; cpp/io/basic_streambuf/swap
std::basic_stringbuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::basic_stringbuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::basic_stringbuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::basic_stringbuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::basic_stringbuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::basic_stringbuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::basic_stringbuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::basic_stringbuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::basic_stringbuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::basic_stringbuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::basic_stringbuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::basic_stringbuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::basic_stringbuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::basic_stringbuf::setg =&gt; cpp/io/basic_streambuf/setg
std::basic_stringbuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::basic_stringbuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::basic_stringbuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::basic_stringbuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::basic_stringbuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::basic_stringbuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::basic_stringbuf::setp =&gt; cpp/io/basic_streambuf/setp
std::basic_stringbuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::basic_stringbuf::basic_stringbuf =&gt; cpp/io/basic_stringbuf/basic_stringbuf
std::basic_stringbuf::operator= =&gt; cpp/io/basic_stringbuf/operator=
std::basic_stringbuf::swap =&gt; cpp/io/basic_stringbuf/swap
std::basic_stringbuf::str =&gt; cpp/io/basic_stringbuf/str
std::basic_stringbuf::underflow =&gt; cpp/io/basic_stringbuf/underflow
std::basic_stringbuf::pbackfail =&gt; cpp/io/basic_stringbuf/pbackfail
std::basic_stringbuf::overflow =&gt; cpp/io/basic_stringbuf/overflow
std::basic_stringbuf::setbuf =&gt; cpp/io/basic_stringbuf/setbuf
std::basic_stringbuf::seekoff =&gt; cpp/io/basic_stringbuf/seekoff
std::basic_stringbuf::seekpos =&gt; cpp/io/basic_stringbuf/seekpos
std::swap(std::basic_stringbuf) =&gt; cpp/io/basic_stringbuf/swap2
std::ios_base =&gt; cpp/io/ios_base
std::ios_base::ios_base =&gt; cpp/io/ios_base/ios_base
std::ios_base::~ios_base =&gt; cpp/io/ios_base/~ios_base
std::ios_base::flags =&gt; cpp/io/ios_base/flags
std::ios_base::setf =&gt; cpp/io/ios_base/setf
std::ios_base::unsetf =&gt; cpp/io/ios_base/unsetf
std::ios_base::precision =&gt; cpp/io/ios_base/precision
std::ios_base::width =&gt; cpp/io/ios_base/width
std::ios_base::imbue =&gt; cpp/io/ios_base/imbue
std::ios_base::getloc =&gt; cpp/io/ios_base/getloc
std::ios_base::xalloc =&gt; cpp/io/ios_base/xalloc
std::ios_base::iword =&gt; cpp/io/ios_base/iword
std::ios_base::pword =&gt; cpp/io/ios_base/pword
std::ios_base::register_callback =&gt; cpp/io/ios_base/register_callback
std::ios_base::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::ios_base::failure =&gt; cpp/io/ios_base/failure
std::ios_base::failure::what =&gt; cpp/error/exception/what
std::ios_base::failure::failure =&gt; cpp/io/ios_base/failure
std::ios_base::openmode =&gt; cpp/io/ios_base/openmode
std::ios_base::app =&gt; cpp/io/ios_base/openmode
std::ios_base::binary =&gt; cpp/io/ios_base/openmode
std::ios_base::in =&gt; cpp/io/ios_base/openmode
std::ios_base::out =&gt; cpp/io/ios_base/openmode
std::ios_base::trunc =&gt; cpp/io/ios_base/openmode
std::ios_base::ate =&gt; cpp/io/ios_base/openmode
std::ios_base::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::ios_base::dec =&gt; cpp/io/ios_base/fmtflags
std::ios_base::oct =&gt; cpp/io/ios_base/fmtflags
std::ios_base::hex =&gt; cpp/io/ios_base/fmtflags
std::ios_base::basefield =&gt; cpp/io/ios_base/fmtflags
std::ios_base::left =&gt; cpp/io/ios_base/fmtflags
std::ios_base::right =&gt; cpp/io/ios_base/fmtflags
std::ios_base::internal =&gt; cpp/io/ios_base/fmtflags
std::ios_base::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::ios_base::scientific =&gt; cpp/io/ios_base/fmtflags
std::ios_base::fixed =&gt; cpp/io/ios_base/fmtflags
std::ios_base::floatfield =&gt; cpp/io/ios_base/fmtflags
std::ios_base::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::ios_base::showbase =&gt; cpp/io/ios_base/fmtflags
std::ios_base::showpoint =&gt; cpp/io/ios_base/fmtflags
std::ios_base::showpos =&gt; cpp/io/ios_base/fmtflags
std::ios_base::skipws =&gt; cpp/io/ios_base/fmtflags
std::ios_base::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::ios_base::uppercase =&gt; cpp/io/ios_base/fmtflags
std::ios_base::iostate =&gt; cpp/io/ios_base/iostate
std::ios_base::goodbit =&gt; cpp/io/ios_base/iostate
std::ios_base::badbit =&gt; cpp/io/ios_base/iostate
std::ios_base::failbit =&gt; cpp/io/ios_base/iostate
std::ios_base::eofbit =&gt; cpp/io/ios_base/iostate
std::ios_base::seekdir =&gt; cpp/io/ios_base/seekdir
std::ios_base::beg =&gt; cpp/io/ios_base/seekdir
std::ios_base::cur =&gt; cpp/io/ios_base/seekdir
std::ios_base::end =&gt; cpp/io/ios_base/seekdir
std::ios_base::event =&gt; cpp/io/ios_base/event
std::ios_base::erase_event =&gt; cpp/io/ios_base/event
std::ios_base::imbue_event =&gt; cpp/io/ios_base/event
std::ios_base::copyfmt_event =&gt; cpp/io/ios_base/event
std::ios_base::event_callback =&gt; cpp/io/ios_base/event_callback
std::ios_base::Init =&gt; cpp/io/ios_base/Init
std::basic_ios =&gt; cpp/io/basic_ios
std::basic_ios::flags =&gt; cpp/io/ios_base/flags
std::basic_ios::setf =&gt; cpp/io/ios_base/setf
std::basic_ios::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_ios::precision =&gt; cpp/io/ios_base/precision
std::basic_ios::width =&gt; cpp/io/ios_base/width
std::basic_ios::imbue =&gt; cpp/io/ios_base/imbue
std::basic_ios::getloc =&gt; cpp/io/ios_base/getloc
std::basic_ios::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_ios::iword =&gt; cpp/io/ios_base/iword
std::basic_ios::pword =&gt; cpp/io/ios_base/pword
std::basic_ios::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_ios::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_ios::failure =&gt; cpp/io/ios_base/failure
std::basic_ios::failure::what =&gt; cpp/error/exception/what
std::basic_ios::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_ios::openmode =&gt; cpp/io/ios_base/openmode
std::basic_ios::app =&gt; cpp/io/ios_base/openmode
std::basic_ios::binary =&gt; cpp/io/ios_base/openmode
std::basic_ios::in =&gt; cpp/io/ios_base/openmode
std::basic_ios::out =&gt; cpp/io/ios_base/openmode
std::basic_ios::trunc =&gt; cpp/io/ios_base/openmode
std::basic_ios::ate =&gt; cpp/io/ios_base/openmode
std::basic_ios::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::left =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::right =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_ios::iostate =&gt; cpp/io/ios_base/iostate
std::basic_ios::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_ios::badbit =&gt; cpp/io/ios_base/iostate
std::basic_ios::failbit =&gt; cpp/io/ios_base/iostate
std::basic_ios::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_ios::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_ios::beg =&gt; cpp/io/ios_base/seekdir
std::basic_ios::cur =&gt; cpp/io/ios_base/seekdir
std::basic_ios::end =&gt; cpp/io/ios_base/seekdir
std::basic_ios::event =&gt; cpp/io/ios_base/event
std::basic_ios::erase_event =&gt; cpp/io/ios_base/event
std::basic_ios::imbue_event =&gt; cpp/io/ios_base/event
std::basic_ios::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_ios::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_ios::Init =&gt; cpp/io/ios_base/Init
std::basic_ios::basic_ios =&gt; cpp/io/basic_ios/basic_ios
std::basic_ios::~basic_ios =&gt; cpp/io/basic_ios/~basic_ios
std::basic_ios::good =&gt; cpp/io/basic_ios/good
std::basic_ios::eof =&gt; cpp/io/basic_ios/eof
std::basic_ios::fail =&gt; cpp/io/basic_ios/fail
std::basic_ios::bad =&gt; cpp/io/basic_ios/bad
std::basic_ios::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_ios::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_ios::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_ios::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_ios::clear =&gt; cpp/io/basic_ios/clear
std::basic_ios::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_ios::fill =&gt; cpp/io/basic_ios/fill
std::basic_ios::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_ios::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_ios::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_ios::tie =&gt; cpp/io/basic_ios/tie
std::basic_ios::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_ios::widen =&gt; cpp/io/basic_ios/widen
std::basic_ios::init =&gt; cpp/io/basic_ios/init
std::basic_ios::move =&gt; cpp/io/basic_ios/move
std::basic_ios::swap =&gt; cpp/io/basic_ios/swap
std::basic_ios::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_istream =&gt; cpp/io/basic_istream
std::basic_istream::good =&gt; cpp/io/basic_ios/good
std::basic_istream::eof =&gt; cpp/io/basic_ios/eof
std::basic_istream::fail =&gt; cpp/io/basic_ios/fail
std::basic_istream::bad =&gt; cpp/io/basic_ios/bad
std::basic_istream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_istream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_istream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_istream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_istream::clear =&gt; cpp/io/basic_ios/clear
std::basic_istream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_istream::fill =&gt; cpp/io/basic_ios/fill
std::basic_istream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_istream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_istream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_istream::tie =&gt; cpp/io/basic_ios/tie
std::basic_istream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_istream::widen =&gt; cpp/io/basic_ios/widen
std::basic_istream::init =&gt; cpp/io/basic_ios/init
std::basic_istream::move =&gt; cpp/io/basic_ios/move
std::basic_istream::swap =&gt; cpp/io/basic_ios/swap
std::basic_istream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_istream::flags =&gt; cpp/io/ios_base/flags
std::basic_istream::setf =&gt; cpp/io/ios_base/setf
std::basic_istream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_istream::precision =&gt; cpp/io/ios_base/precision
std::basic_istream::width =&gt; cpp/io/ios_base/width
std::basic_istream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_istream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_istream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_istream::iword =&gt; cpp/io/ios_base/iword
std::basic_istream::pword =&gt; cpp/io/ios_base/pword
std::basic_istream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_istream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_istream::failure =&gt; cpp/io/ios_base/failure
std::basic_istream::failure::what =&gt; cpp/error/exception/what
std::basic_istream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_istream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_istream::app =&gt; cpp/io/ios_base/openmode
std::basic_istream::binary =&gt; cpp/io/ios_base/openmode
std::basic_istream::in =&gt; cpp/io/ios_base/openmode
std::basic_istream::out =&gt; cpp/io/ios_base/openmode
std::basic_istream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_istream::ate =&gt; cpp/io/ios_base/openmode
std::basic_istream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_istream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_istream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_istream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_istream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_istream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_istream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_istream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_istream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_istream::end =&gt; cpp/io/ios_base/seekdir
std::basic_istream::event =&gt; cpp/io/ios_base/event
std::basic_istream::erase_event =&gt; cpp/io/ios_base/event
std::basic_istream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_istream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_istream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_istream::Init =&gt; cpp/io/ios_base/Init
std::basic_istream::basic_istream =&gt; cpp/io/basic_istream/basic_istream
std::basic_istream::~basic_istream =&gt; cpp/io/basic_istream/~basic_istream
std::basic_istream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::basic_istream::get =&gt; cpp/io/basic_istream/get
std::basic_istream::peek =&gt; cpp/io/basic_istream/peek
std::basic_istream::unget =&gt; cpp/io/basic_istream/unget
std::basic_istream::putback =&gt; cpp/io/basic_istream/putback
std::basic_istream::getline =&gt; cpp/io/basic_istream/getline
std::basic_istream::ignore =&gt; cpp/io/basic_istream/ignore
std::basic_istream::read =&gt; cpp/io/basic_istream/read
std::basic_istream::readsome =&gt; cpp/io/basic_istream/readsome
std::basic_istream::gcount =&gt; cpp/io/basic_istream/gcount
std::basic_istream::tellg =&gt; cpp/io/basic_istream/tellg
std::basic_istream::seekg =&gt; cpp/io/basic_istream/seekg
std::basic_istream::sync =&gt; cpp/io/basic_istream/sync
std::basic_istream::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_istream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_istream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::basic_istream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
operator&gt;&gt;(std::basic_istream) =&gt; cpp/io/basic_istream/operator_gtgt2
std::basic_ostream =&gt; cpp/io/basic_ostream
std::basic_ostream::good =&gt; cpp/io/basic_ios/good
std::basic_ostream::eof =&gt; cpp/io/basic_ios/eof
std::basic_ostream::fail =&gt; cpp/io/basic_ios/fail
std::basic_ostream::bad =&gt; cpp/io/basic_ios/bad
std::basic_ostream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_ostream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_ostream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_ostream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_ostream::clear =&gt; cpp/io/basic_ios/clear
std::basic_ostream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_ostream::fill =&gt; cpp/io/basic_ios/fill
std::basic_ostream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_ostream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_ostream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_ostream::tie =&gt; cpp/io/basic_ios/tie
std::basic_ostream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_ostream::widen =&gt; cpp/io/basic_ios/widen
std::basic_ostream::init =&gt; cpp/io/basic_ios/init
std::basic_ostream::move =&gt; cpp/io/basic_ios/move
std::basic_ostream::swap =&gt; cpp/io/basic_ios/swap
std::basic_ostream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_ostream::flags =&gt; cpp/io/ios_base/flags
std::basic_ostream::setf =&gt; cpp/io/ios_base/setf
std::basic_ostream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_ostream::precision =&gt; cpp/io/ios_base/precision
std::basic_ostream::width =&gt; cpp/io/ios_base/width
std::basic_ostream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_ostream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_ostream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_ostream::iword =&gt; cpp/io/ios_base/iword
std::basic_ostream::pword =&gt; cpp/io/ios_base/pword
std::basic_ostream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_ostream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_ostream::failure =&gt; cpp/io/ios_base/failure
std::basic_ostream::failure::what =&gt; cpp/error/exception/what
std::basic_ostream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_ostream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_ostream::app =&gt; cpp/io/ios_base/openmode
std::basic_ostream::binary =&gt; cpp/io/ios_base/openmode
std::basic_ostream::in =&gt; cpp/io/ios_base/openmode
std::basic_ostream::out =&gt; cpp/io/ios_base/openmode
std::basic_ostream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_ostream::ate =&gt; cpp/io/ios_base/openmode
std::basic_ostream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_ostream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_ostream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_ostream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_ostream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_ostream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_ostream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_ostream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_ostream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_ostream::end =&gt; cpp/io/ios_base/seekdir
std::basic_ostream::event =&gt; cpp/io/ios_base/event
std::basic_ostream::erase_event =&gt; cpp/io/ios_base/event
std::basic_ostream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_ostream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_ostream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_ostream::Init =&gt; cpp/io/ios_base/Init
std::basic_ostream::basic_ostream =&gt; cpp/io/basic_ostream/basic_ostream
std::basic_ostream::~basic_ostream =&gt; cpp/io/basic_ostream/~basic_ostream
std::basic_ostream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::basic_ostream::put =&gt; cpp/io/basic_ostream/put
std::basic_ostream::write =&gt; cpp/io/basic_ostream/write
std::basic_ostream::tellp =&gt; cpp/io/basic_ostream/tellp
std::basic_ostream::seekp =&gt; cpp/io/basic_ostream/seekp
std::basic_ostream::flush =&gt; cpp/io/basic_ostream/flush
std::basic_ostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ostream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ostream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ostream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
operator&lt;&lt;(std::basic_ostream) =&gt; cpp/io/basic_ostream/operator_ltlt2
std::basic_iostream =&gt; cpp/io/basic_iostream
std::basic_iostream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::basic_iostream::get =&gt; cpp/io/basic_istream/get
std::basic_iostream::peek =&gt; cpp/io/basic_istream/peek
std::basic_iostream::unget =&gt; cpp/io/basic_istream/unget
std::basic_iostream::putback =&gt; cpp/io/basic_istream/putback
std::basic_iostream::getline =&gt; cpp/io/basic_istream/getline
std::basic_iostream::ignore =&gt; cpp/io/basic_istream/ignore
std::basic_iostream::read =&gt; cpp/io/basic_istream/read
std::basic_iostream::readsome =&gt; cpp/io/basic_istream/readsome
std::basic_iostream::gcount =&gt; cpp/io/basic_istream/gcount
std::basic_iostream::tellg =&gt; cpp/io/basic_istream/tellg
std::basic_iostream::seekg =&gt; cpp/io/basic_istream/seekg
std::basic_iostream::sync =&gt; cpp/io/basic_istream/sync
std::basic_iostream::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_iostream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_iostream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::basic_iostream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::basic_iostream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::basic_iostream::put =&gt; cpp/io/basic_ostream/put
std::basic_iostream::write =&gt; cpp/io/basic_ostream/write
std::basic_iostream::tellp =&gt; cpp/io/basic_ostream/tellp
std::basic_iostream::seekp =&gt; cpp/io/basic_ostream/seekp
std::basic_iostream::flush =&gt; cpp/io/basic_ostream/flush
std::basic_iostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_iostream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_iostream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_iostream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::basic_iostream::good =&gt; cpp/io/basic_ios/good
std::basic_iostream::eof =&gt; cpp/io/basic_ios/eof
std::basic_iostream::fail =&gt; cpp/io/basic_ios/fail
std::basic_iostream::bad =&gt; cpp/io/basic_ios/bad
std::basic_iostream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_iostream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_iostream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_iostream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_iostream::clear =&gt; cpp/io/basic_ios/clear
std::basic_iostream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_iostream::fill =&gt; cpp/io/basic_ios/fill
std::basic_iostream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_iostream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_iostream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_iostream::tie =&gt; cpp/io/basic_ios/tie
std::basic_iostream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_iostream::widen =&gt; cpp/io/basic_ios/widen
std::basic_iostream::init =&gt; cpp/io/basic_ios/init
std::basic_iostream::move =&gt; cpp/io/basic_ios/move
std::basic_iostream::swap =&gt; cpp/io/basic_ios/swap
std::basic_iostream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_iostream::flags =&gt; cpp/io/ios_base/flags
std::basic_iostream::setf =&gt; cpp/io/ios_base/setf
std::basic_iostream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_iostream::precision =&gt; cpp/io/ios_base/precision
std::basic_iostream::width =&gt; cpp/io/ios_base/width
std::basic_iostream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_iostream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_iostream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_iostream::iword =&gt; cpp/io/ios_base/iword
std::basic_iostream::pword =&gt; cpp/io/ios_base/pword
std::basic_iostream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_iostream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_iostream::failure =&gt; cpp/io/ios_base/failure
std::basic_iostream::failure::what =&gt; cpp/error/exception/what
std::basic_iostream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_iostream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_iostream::app =&gt; cpp/io/ios_base/openmode
std::basic_iostream::binary =&gt; cpp/io/ios_base/openmode
std::basic_iostream::in =&gt; cpp/io/ios_base/openmode
std::basic_iostream::out =&gt; cpp/io/ios_base/openmode
std::basic_iostream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_iostream::ate =&gt; cpp/io/ios_base/openmode
std::basic_iostream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_iostream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_iostream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_iostream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_iostream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_iostream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_iostream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_iostream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_iostream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_iostream::end =&gt; cpp/io/ios_base/seekdir
std::basic_iostream::event =&gt; cpp/io/ios_base/event
std::basic_iostream::erase_event =&gt; cpp/io/ios_base/event
std::basic_iostream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_iostream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_iostream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_iostream::Init =&gt; cpp/io/ios_base/Init
std::basic_iostream::basic_iostream =&gt; cpp/io/basic_iostream/basic_iostream
std::basic_iostream::~basic_iostream =&gt; cpp/io/basic_iostream/~basic_iostream
std::basic_ifstream =&gt; cpp/io/basic_ifstream
std::basic_ifstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::basic_ifstream::get =&gt; cpp/io/basic_istream/get
std::basic_ifstream::peek =&gt; cpp/io/basic_istream/peek
std::basic_ifstream::unget =&gt; cpp/io/basic_istream/unget
std::basic_ifstream::putback =&gt; cpp/io/basic_istream/putback
std::basic_ifstream::getline =&gt; cpp/io/basic_istream/getline
std::basic_ifstream::ignore =&gt; cpp/io/basic_istream/ignore
std::basic_ifstream::read =&gt; cpp/io/basic_istream/read
std::basic_ifstream::readsome =&gt; cpp/io/basic_istream/readsome
std::basic_ifstream::gcount =&gt; cpp/io/basic_istream/gcount
std::basic_ifstream::tellg =&gt; cpp/io/basic_istream/tellg
std::basic_ifstream::seekg =&gt; cpp/io/basic_istream/seekg
std::basic_ifstream::sync =&gt; cpp/io/basic_istream/sync
std::basic_ifstream::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_ifstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_ifstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::basic_ifstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::basic_ifstream::good =&gt; cpp/io/basic_ios/good
std::basic_ifstream::eof =&gt; cpp/io/basic_ios/eof
std::basic_ifstream::fail =&gt; cpp/io/basic_ios/fail
std::basic_ifstream::bad =&gt; cpp/io/basic_ios/bad
std::basic_ifstream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_ifstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_ifstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_ifstream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_ifstream::clear =&gt; cpp/io/basic_ios/clear
std::basic_ifstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_ifstream::fill =&gt; cpp/io/basic_ios/fill
std::basic_ifstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_ifstream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_ifstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_ifstream::tie =&gt; cpp/io/basic_ios/tie
std::basic_ifstream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_ifstream::widen =&gt; cpp/io/basic_ios/widen
std::basic_ifstream::init =&gt; cpp/io/basic_ios/init
std::basic_ifstream::move =&gt; cpp/io/basic_ios/move
std::basic_ifstream::swap =&gt; cpp/io/basic_ios/swap
std::basic_ifstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_ifstream::flags =&gt; cpp/io/ios_base/flags
std::basic_ifstream::setf =&gt; cpp/io/ios_base/setf
std::basic_ifstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_ifstream::precision =&gt; cpp/io/ios_base/precision
std::basic_ifstream::width =&gt; cpp/io/ios_base/width
std::basic_ifstream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_ifstream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_ifstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_ifstream::iword =&gt; cpp/io/ios_base/iword
std::basic_ifstream::pword =&gt; cpp/io/ios_base/pword
std::basic_ifstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_ifstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_ifstream::failure =&gt; cpp/io/ios_base/failure
std::basic_ifstream::failure::what =&gt; cpp/error/exception/what
std::basic_ifstream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_ifstream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_ifstream::app =&gt; cpp/io/ios_base/openmode
std::basic_ifstream::binary =&gt; cpp/io/ios_base/openmode
std::basic_ifstream::in =&gt; cpp/io/ios_base/openmode
std::basic_ifstream::out =&gt; cpp/io/ios_base/openmode
std::basic_ifstream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_ifstream::ate =&gt; cpp/io/ios_base/openmode
std::basic_ifstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_ifstream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_ifstream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_ifstream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_ifstream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_ifstream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_ifstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_ifstream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_ifstream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_ifstream::end =&gt; cpp/io/ios_base/seekdir
std::basic_ifstream::event =&gt; cpp/io/ios_base/event
std::basic_ifstream::erase_event =&gt; cpp/io/ios_base/event
std::basic_ifstream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_ifstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_ifstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_ifstream::Init =&gt; cpp/io/ios_base/Init
std::basic_ifstream::basic_ifstream =&gt; cpp/io/basic_ifstream/basic_ifstream
std::basic_ifstream::operator= =&gt; cpp/io/basic_ifstream/operator=
std::basic_ifstream::swap =&gt; cpp/io/basic_ifstream/swap
std::basic_ifstream::rdbuf =&gt; cpp/io/basic_ifstream/rdbuf
std::basic_ifstream::is_open =&gt; cpp/io/basic_ifstream/is_open
std::basic_ifstream::open =&gt; cpp/io/basic_ifstream/open
std::basic_ifstream::close =&gt; cpp/io/basic_ifstream/close
std::swap(std::basic_ifstream) =&gt; cpp/io/basic_ifstream/swap2
std::basic_ofstream =&gt; cpp/io/basic_ofstream
std::basic_ofstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::basic_ofstream::put =&gt; cpp/io/basic_ostream/put
std::basic_ofstream::write =&gt; cpp/io/basic_ostream/write
std::basic_ofstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::basic_ofstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::basic_ofstream::flush =&gt; cpp/io/basic_ostream/flush
std::basic_ofstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ofstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ofstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ofstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::basic_ofstream::good =&gt; cpp/io/basic_ios/good
std::basic_ofstream::eof =&gt; cpp/io/basic_ios/eof
std::basic_ofstream::fail =&gt; cpp/io/basic_ios/fail
std::basic_ofstream::bad =&gt; cpp/io/basic_ios/bad
std::basic_ofstream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_ofstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_ofstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_ofstream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_ofstream::clear =&gt; cpp/io/basic_ios/clear
std::basic_ofstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_ofstream::fill =&gt; cpp/io/basic_ios/fill
std::basic_ofstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_ofstream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_ofstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_ofstream::tie =&gt; cpp/io/basic_ios/tie
std::basic_ofstream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_ofstream::widen =&gt; cpp/io/basic_ios/widen
std::basic_ofstream::init =&gt; cpp/io/basic_ios/init
std::basic_ofstream::move =&gt; cpp/io/basic_ios/move
std::basic_ofstream::swap =&gt; cpp/io/basic_ios/swap
std::basic_ofstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_ofstream::flags =&gt; cpp/io/ios_base/flags
std::basic_ofstream::setf =&gt; cpp/io/ios_base/setf
std::basic_ofstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_ofstream::precision =&gt; cpp/io/ios_base/precision
std::basic_ofstream::width =&gt; cpp/io/ios_base/width
std::basic_ofstream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_ofstream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_ofstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_ofstream::iword =&gt; cpp/io/ios_base/iword
std::basic_ofstream::pword =&gt; cpp/io/ios_base/pword
std::basic_ofstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_ofstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_ofstream::failure =&gt; cpp/io/ios_base/failure
std::basic_ofstream::failure::what =&gt; cpp/error/exception/what
std::basic_ofstream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_ofstream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_ofstream::app =&gt; cpp/io/ios_base/openmode
std::basic_ofstream::binary =&gt; cpp/io/ios_base/openmode
std::basic_ofstream::in =&gt; cpp/io/ios_base/openmode
std::basic_ofstream::out =&gt; cpp/io/ios_base/openmode
std::basic_ofstream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_ofstream::ate =&gt; cpp/io/ios_base/openmode
std::basic_ofstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_ofstream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_ofstream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_ofstream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_ofstream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_ofstream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_ofstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_ofstream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_ofstream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_ofstream::end =&gt; cpp/io/ios_base/seekdir
std::basic_ofstream::event =&gt; cpp/io/ios_base/event
std::basic_ofstream::erase_event =&gt; cpp/io/ios_base/event
std::basic_ofstream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_ofstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_ofstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_ofstream::Init =&gt; cpp/io/ios_base/Init
std::basic_ofstream::basic_ofstream =&gt; cpp/io/basic_ofstream/basic_ofstream
std::basic_ofstream::operator= =&gt; cpp/io/basic_ofstream/operator=
std::basic_ofstream::swap =&gt; cpp/io/basic_ofstream/swap
std::basic_ofstream::rdbuf =&gt; cpp/io/basic_ofstream/rdbuf
std::basic_ofstream::is_open =&gt; cpp/io/basic_ofstream/is_open
std::basic_ofstream::open =&gt; cpp/io/basic_ofstream/open
std::basic_ofstream::close =&gt; cpp/io/basic_ofstream/close
std::swap(std::basic_ofstream) =&gt; cpp/io/basic_ofstream/swap2
std::basic_fstream =&gt; cpp/io/basic_fstream
std::basic_fstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::basic_fstream::get =&gt; cpp/io/basic_istream/get
std::basic_fstream::peek =&gt; cpp/io/basic_istream/peek
std::basic_fstream::unget =&gt; cpp/io/basic_istream/unget
std::basic_fstream::putback =&gt; cpp/io/basic_istream/putback
std::basic_fstream::getline =&gt; cpp/io/basic_istream/getline
std::basic_fstream::ignore =&gt; cpp/io/basic_istream/ignore
std::basic_fstream::read =&gt; cpp/io/basic_istream/read
std::basic_fstream::readsome =&gt; cpp/io/basic_istream/readsome
std::basic_fstream::gcount =&gt; cpp/io/basic_istream/gcount
std::basic_fstream::tellg =&gt; cpp/io/basic_istream/tellg
std::basic_fstream::seekg =&gt; cpp/io/basic_istream/seekg
std::basic_fstream::sync =&gt; cpp/io/basic_istream/sync
std::basic_fstream::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_fstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_fstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::basic_fstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::basic_fstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::basic_fstream::put =&gt; cpp/io/basic_ostream/put
std::basic_fstream::write =&gt; cpp/io/basic_ostream/write
std::basic_fstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::basic_fstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::basic_fstream::flush =&gt; cpp/io/basic_ostream/flush
std::basic_fstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_fstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_fstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_fstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::basic_fstream::good =&gt; cpp/io/basic_ios/good
std::basic_fstream::eof =&gt; cpp/io/basic_ios/eof
std::basic_fstream::fail =&gt; cpp/io/basic_ios/fail
std::basic_fstream::bad =&gt; cpp/io/basic_ios/bad
std::basic_fstream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_fstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_fstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_fstream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_fstream::clear =&gt; cpp/io/basic_ios/clear
std::basic_fstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_fstream::fill =&gt; cpp/io/basic_ios/fill
std::basic_fstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_fstream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_fstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_fstream::tie =&gt; cpp/io/basic_ios/tie
std::basic_fstream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_fstream::widen =&gt; cpp/io/basic_ios/widen
std::basic_fstream::init =&gt; cpp/io/basic_ios/init
std::basic_fstream::move =&gt; cpp/io/basic_ios/move
std::basic_fstream::swap =&gt; cpp/io/basic_ios/swap
std::basic_fstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_fstream::flags =&gt; cpp/io/ios_base/flags
std::basic_fstream::setf =&gt; cpp/io/ios_base/setf
std::basic_fstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_fstream::precision =&gt; cpp/io/ios_base/precision
std::basic_fstream::width =&gt; cpp/io/ios_base/width
std::basic_fstream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_fstream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_fstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_fstream::iword =&gt; cpp/io/ios_base/iword
std::basic_fstream::pword =&gt; cpp/io/ios_base/pword
std::basic_fstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_fstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_fstream::failure =&gt; cpp/io/ios_base/failure
std::basic_fstream::failure::what =&gt; cpp/error/exception/what
std::basic_fstream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_fstream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_fstream::app =&gt; cpp/io/ios_base/openmode
std::basic_fstream::binary =&gt; cpp/io/ios_base/openmode
std::basic_fstream::in =&gt; cpp/io/ios_base/openmode
std::basic_fstream::out =&gt; cpp/io/ios_base/openmode
std::basic_fstream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_fstream::ate =&gt; cpp/io/ios_base/openmode
std::basic_fstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_fstream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_fstream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_fstream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_fstream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_fstream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_fstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_fstream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_fstream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_fstream::end =&gt; cpp/io/ios_base/seekdir
std::basic_fstream::event =&gt; cpp/io/ios_base/event
std::basic_fstream::erase_event =&gt; cpp/io/ios_base/event
std::basic_fstream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_fstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_fstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_fstream::Init =&gt; cpp/io/ios_base/Init
std::basic_fstream::basic_fstream =&gt; cpp/io/basic_fstream/basic_fstream
std::basic_fstream::operator= =&gt; cpp/io/basic_fstream/operator=
std::basic_fstream::swap =&gt; cpp/io/basic_fstream/swap
std::basic_fstream::rdbuf =&gt; cpp/io/basic_fstream/rdbuf
std::basic_fstream::is_open =&gt; cpp/io/basic_fstream/is_open
std::basic_fstream::open =&gt; cpp/io/basic_fstream/open
std::basic_fstream::close =&gt; cpp/io/basic_fstream/close
std::swap(std::basic_fstream) =&gt; cpp/io/basic_fstream/swap2
std::basic_istringstream =&gt; cpp/io/basic_istringstream
std::basic_istringstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::basic_istringstream::get =&gt; cpp/io/basic_istream/get
std::basic_istringstream::peek =&gt; cpp/io/basic_istream/peek
std::basic_istringstream::unget =&gt; cpp/io/basic_istream/unget
std::basic_istringstream::putback =&gt; cpp/io/basic_istream/putback
std::basic_istringstream::getline =&gt; cpp/io/basic_istream/getline
std::basic_istringstream::ignore =&gt; cpp/io/basic_istream/ignore
std::basic_istringstream::read =&gt; cpp/io/basic_istream/read
std::basic_istringstream::readsome =&gt; cpp/io/basic_istream/readsome
std::basic_istringstream::gcount =&gt; cpp/io/basic_istream/gcount
std::basic_istringstream::tellg =&gt; cpp/io/basic_istream/tellg
std::basic_istringstream::seekg =&gt; cpp/io/basic_istream/seekg
std::basic_istringstream::sync =&gt; cpp/io/basic_istream/sync
std::basic_istringstream::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_istringstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_istringstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::basic_istringstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::basic_istringstream::good =&gt; cpp/io/basic_ios/good
std::basic_istringstream::eof =&gt; cpp/io/basic_ios/eof
std::basic_istringstream::fail =&gt; cpp/io/basic_ios/fail
std::basic_istringstream::bad =&gt; cpp/io/basic_ios/bad
std::basic_istringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_istringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_istringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_istringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_istringstream::clear =&gt; cpp/io/basic_ios/clear
std::basic_istringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_istringstream::fill =&gt; cpp/io/basic_ios/fill
std::basic_istringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_istringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_istringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_istringstream::tie =&gt; cpp/io/basic_ios/tie
std::basic_istringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_istringstream::widen =&gt; cpp/io/basic_ios/widen
std::basic_istringstream::init =&gt; cpp/io/basic_ios/init
std::basic_istringstream::move =&gt; cpp/io/basic_ios/move
std::basic_istringstream::swap =&gt; cpp/io/basic_ios/swap
std::basic_istringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_istringstream::flags =&gt; cpp/io/ios_base/flags
std::basic_istringstream::setf =&gt; cpp/io/ios_base/setf
std::basic_istringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_istringstream::precision =&gt; cpp/io/ios_base/precision
std::basic_istringstream::width =&gt; cpp/io/ios_base/width
std::basic_istringstream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_istringstream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_istringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_istringstream::iword =&gt; cpp/io/ios_base/iword
std::basic_istringstream::pword =&gt; cpp/io/ios_base/pword
std::basic_istringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_istringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_istringstream::failure =&gt; cpp/io/ios_base/failure
std::basic_istringstream::failure::what =&gt; cpp/error/exception/what
std::basic_istringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_istringstream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_istringstream::app =&gt; cpp/io/ios_base/openmode
std::basic_istringstream::binary =&gt; cpp/io/ios_base/openmode
std::basic_istringstream::in =&gt; cpp/io/ios_base/openmode
std::basic_istringstream::out =&gt; cpp/io/ios_base/openmode
std::basic_istringstream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_istringstream::ate =&gt; cpp/io/ios_base/openmode
std::basic_istringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_istringstream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_istringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_istringstream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_istringstream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_istringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_istringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_istringstream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_istringstream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_istringstream::end =&gt; cpp/io/ios_base/seekdir
std::basic_istringstream::event =&gt; cpp/io/ios_base/event
std::basic_istringstream::erase_event =&gt; cpp/io/ios_base/event
std::basic_istringstream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_istringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_istringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_istringstream::Init =&gt; cpp/io/ios_base/Init
std::basic_istringstream::basic_istringstream =&gt; cpp/io/basic_istringstream/basic_istringstream
std::basic_istringstream::operator= =&gt; cpp/io/basic_istringstream/operator=
std::basic_istringstream::swap =&gt; cpp/io/basic_istringstream/swap
std::basic_istringstream::rdbuf =&gt; cpp/io/basic_istringstream/rdbuf
std::basic_istringstream::str =&gt; cpp/io/basic_istringstream/str
std::swap(std::basic_istringstream) =&gt; cpp/io/basic_istringstream/swap2
std::basic_ostringstream =&gt; cpp/io/basic_ostringstream
std::basic_ostringstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::basic_ostringstream::put =&gt; cpp/io/basic_ostream/put
std::basic_ostringstream::write =&gt; cpp/io/basic_ostream/write
std::basic_ostringstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::basic_ostringstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::basic_ostringstream::flush =&gt; cpp/io/basic_ostream/flush
std::basic_ostringstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ostringstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ostringstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_ostringstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::basic_ostringstream::good =&gt; cpp/io/basic_ios/good
std::basic_ostringstream::eof =&gt; cpp/io/basic_ios/eof
std::basic_ostringstream::fail =&gt; cpp/io/basic_ios/fail
std::basic_ostringstream::bad =&gt; cpp/io/basic_ios/bad
std::basic_ostringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_ostringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_ostringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_ostringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_ostringstream::clear =&gt; cpp/io/basic_ios/clear
std::basic_ostringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_ostringstream::fill =&gt; cpp/io/basic_ios/fill
std::basic_ostringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_ostringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_ostringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_ostringstream::tie =&gt; cpp/io/basic_ios/tie
std::basic_ostringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_ostringstream::widen =&gt; cpp/io/basic_ios/widen
std::basic_ostringstream::init =&gt; cpp/io/basic_ios/init
std::basic_ostringstream::move =&gt; cpp/io/basic_ios/move
std::basic_ostringstream::swap =&gt; cpp/io/basic_ios/swap
std::basic_ostringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_ostringstream::flags =&gt; cpp/io/ios_base/flags
std::basic_ostringstream::setf =&gt; cpp/io/ios_base/setf
std::basic_ostringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_ostringstream::precision =&gt; cpp/io/ios_base/precision
std::basic_ostringstream::width =&gt; cpp/io/ios_base/width
std::basic_ostringstream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_ostringstream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_ostringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_ostringstream::iword =&gt; cpp/io/ios_base/iword
std::basic_ostringstream::pword =&gt; cpp/io/ios_base/pword
std::basic_ostringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_ostringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_ostringstream::failure =&gt; cpp/io/ios_base/failure
std::basic_ostringstream::failure::what =&gt; cpp/error/exception/what
std::basic_ostringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_ostringstream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_ostringstream::app =&gt; cpp/io/ios_base/openmode
std::basic_ostringstream::binary =&gt; cpp/io/ios_base/openmode
std::basic_ostringstream::in =&gt; cpp/io/ios_base/openmode
std::basic_ostringstream::out =&gt; cpp/io/ios_base/openmode
std::basic_ostringstream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_ostringstream::ate =&gt; cpp/io/ios_base/openmode
std::basic_ostringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_ostringstream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_ostringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_ostringstream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_ostringstream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_ostringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_ostringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_ostringstream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_ostringstream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_ostringstream::end =&gt; cpp/io/ios_base/seekdir
std::basic_ostringstream::event =&gt; cpp/io/ios_base/event
std::basic_ostringstream::erase_event =&gt; cpp/io/ios_base/event
std::basic_ostringstream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_ostringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_ostringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_ostringstream::Init =&gt; cpp/io/ios_base/Init
std::basic_ostringstream::basic_ostringstream =&gt; cpp/io/basic_ostringstream/basic_ostringstream
std::basic_ostringstream::operator= =&gt; cpp/io/basic_ostringstream/operator=
std::basic_ostringstream::swap =&gt; cpp/io/basic_ostringstream/swap
std::basic_ostringstream::rdbuf =&gt; cpp/io/basic_ostringstream/rdbuf
std::basic_ostringstream::str =&gt; cpp/io/basic_ostringstream/str
std::swap(std::basic_ostringstream) =&gt; cpp/io/basic_ostringstream/swap2
std::basic_stringstream =&gt; cpp/io/basic_stringstream
std::basic_stringstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::basic_stringstream::get =&gt; cpp/io/basic_istream/get
std::basic_stringstream::peek =&gt; cpp/io/basic_istream/peek
std::basic_stringstream::unget =&gt; cpp/io/basic_istream/unget
std::basic_stringstream::putback =&gt; cpp/io/basic_istream/putback
std::basic_stringstream::getline =&gt; cpp/io/basic_istream/getline
std::basic_stringstream::ignore =&gt; cpp/io/basic_istream/ignore
std::basic_stringstream::read =&gt; cpp/io/basic_istream/read
std::basic_stringstream::readsome =&gt; cpp/io/basic_istream/readsome
std::basic_stringstream::gcount =&gt; cpp/io/basic_istream/gcount
std::basic_stringstream::tellg =&gt; cpp/io/basic_istream/tellg
std::basic_stringstream::seekg =&gt; cpp/io/basic_istream/seekg
std::basic_stringstream::sync =&gt; cpp/io/basic_istream/sync
std::basic_stringstream::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_stringstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_stringstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::basic_stringstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::basic_stringstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::basic_stringstream::put =&gt; cpp/io/basic_ostream/put
std::basic_stringstream::write =&gt; cpp/io/basic_ostream/write
std::basic_stringstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::basic_stringstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::basic_stringstream::flush =&gt; cpp/io/basic_ostream/flush
std::basic_stringstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_stringstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_stringstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_stringstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::basic_stringstream::good =&gt; cpp/io/basic_ios/good
std::basic_stringstream::eof =&gt; cpp/io/basic_ios/eof
std::basic_stringstream::fail =&gt; cpp/io/basic_ios/fail
std::basic_stringstream::bad =&gt; cpp/io/basic_ios/bad
std::basic_stringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::basic_stringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::basic_stringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::basic_stringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::basic_stringstream::clear =&gt; cpp/io/basic_ios/clear
std::basic_stringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::basic_stringstream::fill =&gt; cpp/io/basic_ios/fill
std::basic_stringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::basic_stringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::basic_stringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::basic_stringstream::tie =&gt; cpp/io/basic_ios/tie
std::basic_stringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::basic_stringstream::widen =&gt; cpp/io/basic_ios/widen
std::basic_stringstream::init =&gt; cpp/io/basic_ios/init
std::basic_stringstream::move =&gt; cpp/io/basic_ios/move
std::basic_stringstream::swap =&gt; cpp/io/basic_ios/swap
std::basic_stringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::basic_stringstream::flags =&gt; cpp/io/ios_base/flags
std::basic_stringstream::setf =&gt; cpp/io/ios_base/setf
std::basic_stringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::basic_stringstream::precision =&gt; cpp/io/ios_base/precision
std::basic_stringstream::width =&gt; cpp/io/ios_base/width
std::basic_stringstream::imbue =&gt; cpp/io/ios_base/imbue
std::basic_stringstream::getloc =&gt; cpp/io/ios_base/getloc
std::basic_stringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::basic_stringstream::iword =&gt; cpp/io/ios_base/iword
std::basic_stringstream::pword =&gt; cpp/io/ios_base/pword
std::basic_stringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::basic_stringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::basic_stringstream::failure =&gt; cpp/io/ios_base/failure
std::basic_stringstream::failure::what =&gt; cpp/error/exception/what
std::basic_stringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::basic_stringstream::openmode =&gt; cpp/io/ios_base/openmode
std::basic_stringstream::app =&gt; cpp/io/ios_base/openmode
std::basic_stringstream::binary =&gt; cpp/io/ios_base/openmode
std::basic_stringstream::in =&gt; cpp/io/ios_base/openmode
std::basic_stringstream::out =&gt; cpp/io/ios_base/openmode
std::basic_stringstream::trunc =&gt; cpp/io/ios_base/openmode
std::basic_stringstream::ate =&gt; cpp/io/ios_base/openmode
std::basic_stringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::left =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::right =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::basic_stringstream::iostate =&gt; cpp/io/ios_base/iostate
std::basic_stringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::basic_stringstream::badbit =&gt; cpp/io/ios_base/iostate
std::basic_stringstream::failbit =&gt; cpp/io/ios_base/iostate
std::basic_stringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::basic_stringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::basic_stringstream::beg =&gt; cpp/io/ios_base/seekdir
std::basic_stringstream::cur =&gt; cpp/io/ios_base/seekdir
std::basic_stringstream::end =&gt; cpp/io/ios_base/seekdir
std::basic_stringstream::event =&gt; cpp/io/ios_base/event
std::basic_stringstream::erase_event =&gt; cpp/io/ios_base/event
std::basic_stringstream::imbue_event =&gt; cpp/io/ios_base/event
std::basic_stringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::basic_stringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::basic_stringstream::Init =&gt; cpp/io/ios_base/Init
std::basic_stringstream::basic_stringstream =&gt; cpp/io/basic_stringstream/basic_stringstream
std::basic_stringstream::operator= =&gt; cpp/io/basic_stringstream/operator=
std::basic_stringstream::swap =&gt; cpp/io/basic_stringstream/swap
std::basic_stringstream::rdbuf =&gt; cpp/io/basic_stringstream/rdbuf
std::basic_stringstream::str =&gt; cpp/io/basic_stringstream/str
std::swap(std::basic_stringstream) =&gt; cpp/io/basic_stringstream/swap2
std::streambuf =&gt; cpp/io/basic_streambuf
std::streambuf::streambuf =&gt; cpp/io/basic_streambuf/basic_streambuf
std::streambuf::~streambuf =&gt; cpp/io/basic_streambuf/~basic_streambuf
std::streambuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::streambuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::streambuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::streambuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::streambuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::streambuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::streambuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::streambuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::streambuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::streambuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::streambuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::streambuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::streambuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::streambuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::streambuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::streambuf::operator= =&gt; cpp/io/basic_streambuf/operator=
std::streambuf::swap =&gt; cpp/io/basic_streambuf/swap
std::streambuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::streambuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::streambuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::streambuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::streambuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::streambuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::streambuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::streambuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::streambuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::streambuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::streambuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::streambuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::streambuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::streambuf::setg =&gt; cpp/io/basic_streambuf/setg
std::streambuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::streambuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::streambuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::streambuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::streambuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::streambuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::streambuf::setp =&gt; cpp/io/basic_streambuf/setp
std::streambuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::filebuf =&gt; cpp/io/basic_filebuf
std::filebuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::filebuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::filebuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::filebuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::filebuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::filebuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::filebuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::filebuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::filebuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::filebuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::filebuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::filebuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::filebuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::filebuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::filebuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::filebuf::swap =&gt; cpp/io/basic_streambuf/swap
std::filebuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::filebuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::filebuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::filebuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::filebuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::filebuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::filebuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::filebuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::filebuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::filebuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::filebuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::filebuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::filebuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::filebuf::setg =&gt; cpp/io/basic_streambuf/setg
std::filebuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::filebuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::filebuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::filebuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::filebuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::filebuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::filebuf::setp =&gt; cpp/io/basic_streambuf/setp
std::filebuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::filebuf::filebuf =&gt; cpp/io/basic_filebuf/basic_filebuf
std::filebuf::~filebuf =&gt; cpp/io/basic_filebuf/~basic_filebuf
std::filebuf::operator= =&gt; cpp/io/basic_filebuf/operator=
std::filebuf::swap =&gt; cpp/io/basic_filebuf/swap
std::filebuf::is_open =&gt; cpp/io/basic_filebuf/is_open
std::filebuf::open =&gt; cpp/io/basic_filebuf/open
std::filebuf::close =&gt; cpp/io/basic_filebuf/close
std::filebuf::showmanyc =&gt; cpp/io/basic_filebuf/showmanyc
std::filebuf::underflow =&gt; cpp/io/basic_filebuf/underflow
std::filebuf::uflow =&gt; cpp/io/basic_filebuf/uflow
std::filebuf::pbackfail =&gt; cpp/io/basic_filebuf/pbackfail
std::filebuf::overflow =&gt; cpp/io/basic_filebuf/overflow
std::filebuf::setbuf =&gt; cpp/io/basic_filebuf/setbuf
std::filebuf::seekoff =&gt; cpp/io/basic_filebuf/seekoff
std::filebuf::seekpos =&gt; cpp/io/basic_filebuf/seekpos
std::filebuf::sync =&gt; cpp/io/basic_filebuf/sync
std::filebuf::imbue =&gt; cpp/io/basic_filebuf/imbue
std::swap(std::filebuf) =&gt; cpp/io/basic_filebuf/swap2
std::stringbuf =&gt; cpp/io/basic_stringbuf
std::stringbuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::stringbuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::stringbuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::stringbuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::stringbuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::stringbuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::stringbuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::stringbuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::stringbuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::stringbuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::stringbuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::stringbuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::stringbuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::stringbuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::stringbuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::stringbuf::swap =&gt; cpp/io/basic_streambuf/swap
std::stringbuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::stringbuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::stringbuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::stringbuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::stringbuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::stringbuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::stringbuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::stringbuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::stringbuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::stringbuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::stringbuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::stringbuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::stringbuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::stringbuf::setg =&gt; cpp/io/basic_streambuf/setg
std::stringbuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::stringbuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::stringbuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::stringbuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::stringbuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::stringbuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::stringbuf::setp =&gt; cpp/io/basic_streambuf/setp
std::stringbuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::stringbuf::stringbuf =&gt; cpp/io/basic_stringbuf/basic_stringbuf
std::stringbuf::operator= =&gt; cpp/io/basic_stringbuf/operator=
std::stringbuf::swap =&gt; cpp/io/basic_stringbuf/swap
std::stringbuf::str =&gt; cpp/io/basic_stringbuf/str
std::stringbuf::underflow =&gt; cpp/io/basic_stringbuf/underflow
std::stringbuf::pbackfail =&gt; cpp/io/basic_stringbuf/pbackfail
std::stringbuf::overflow =&gt; cpp/io/basic_stringbuf/overflow
std::stringbuf::setbuf =&gt; cpp/io/basic_stringbuf/setbuf
std::stringbuf::seekoff =&gt; cpp/io/basic_stringbuf/seekoff
std::stringbuf::seekpos =&gt; cpp/io/basic_stringbuf/seekpos
std::swap(std::stringbuf) =&gt; cpp/io/basic_stringbuf/swap2
std::istream =&gt; cpp/io/basic_istream
std::istream::good =&gt; cpp/io/basic_ios/good
std::istream::eof =&gt; cpp/io/basic_ios/eof
std::istream::fail =&gt; cpp/io/basic_ios/fail
std::istream::bad =&gt; cpp/io/basic_ios/bad
std::istream::operator! =&gt; cpp/io/basic_ios/operator!
std::istream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::istream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::istream::setstate =&gt; cpp/io/basic_ios/setstate
std::istream::clear =&gt; cpp/io/basic_ios/clear
std::istream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::istream::fill =&gt; cpp/io/basic_ios/fill
std::istream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::istream::imbue =&gt; cpp/io/basic_ios/imbue
std::istream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::istream::tie =&gt; cpp/io/basic_ios/tie
std::istream::narrow =&gt; cpp/io/basic_ios/narrow
std::istream::widen =&gt; cpp/io/basic_ios/widen
std::istream::init =&gt; cpp/io/basic_ios/init
std::istream::move =&gt; cpp/io/basic_ios/move
std::istream::swap =&gt; cpp/io/basic_ios/swap
std::istream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::istream::flags =&gt; cpp/io/ios_base/flags
std::istream::setf =&gt; cpp/io/ios_base/setf
std::istream::unsetf =&gt; cpp/io/ios_base/unsetf
std::istream::precision =&gt; cpp/io/ios_base/precision
std::istream::width =&gt; cpp/io/ios_base/width
std::istream::imbue =&gt; cpp/io/ios_base/imbue
std::istream::getloc =&gt; cpp/io/ios_base/getloc
std::istream::xalloc =&gt; cpp/io/ios_base/xalloc
std::istream::iword =&gt; cpp/io/ios_base/iword
std::istream::pword =&gt; cpp/io/ios_base/pword
std::istream::register_callback =&gt; cpp/io/ios_base/register_callback
std::istream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::istream::failure =&gt; cpp/io/ios_base/failure
std::istream::failure::what =&gt; cpp/error/exception/what
std::istream::failure::failure =&gt; cpp/io/ios_base/failure
std::istream::openmode =&gt; cpp/io/ios_base/openmode
std::istream::app =&gt; cpp/io/ios_base/openmode
std::istream::binary =&gt; cpp/io/ios_base/openmode
std::istream::in =&gt; cpp/io/ios_base/openmode
std::istream::out =&gt; cpp/io/ios_base/openmode
std::istream::trunc =&gt; cpp/io/ios_base/openmode
std::istream::ate =&gt; cpp/io/ios_base/openmode
std::istream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::istream::dec =&gt; cpp/io/ios_base/fmtflags
std::istream::oct =&gt; cpp/io/ios_base/fmtflags
std::istream::hex =&gt; cpp/io/ios_base/fmtflags
std::istream::basefield =&gt; cpp/io/ios_base/fmtflags
std::istream::left =&gt; cpp/io/ios_base/fmtflags
std::istream::right =&gt; cpp/io/ios_base/fmtflags
std::istream::internal =&gt; cpp/io/ios_base/fmtflags
std::istream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::istream::scientific =&gt; cpp/io/ios_base/fmtflags
std::istream::fixed =&gt; cpp/io/ios_base/fmtflags
std::istream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::istream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::istream::showbase =&gt; cpp/io/ios_base/fmtflags
std::istream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::istream::showpos =&gt; cpp/io/ios_base/fmtflags
std::istream::skipws =&gt; cpp/io/ios_base/fmtflags
std::istream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::istream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::istream::iostate =&gt; cpp/io/ios_base/iostate
std::istream::goodbit =&gt; cpp/io/ios_base/iostate
std::istream::badbit =&gt; cpp/io/ios_base/iostate
std::istream::failbit =&gt; cpp/io/ios_base/iostate
std::istream::eofbit =&gt; cpp/io/ios_base/iostate
std::istream::seekdir =&gt; cpp/io/ios_base/seekdir
std::istream::beg =&gt; cpp/io/ios_base/seekdir
std::istream::cur =&gt; cpp/io/ios_base/seekdir
std::istream::end =&gt; cpp/io/ios_base/seekdir
std::istream::event =&gt; cpp/io/ios_base/event
std::istream::erase_event =&gt; cpp/io/ios_base/event
std::istream::imbue_event =&gt; cpp/io/ios_base/event
std::istream::copyfmt_event =&gt; cpp/io/ios_base/event
std::istream::event_callback =&gt; cpp/io/ios_base/event_callback
std::istream::Init =&gt; cpp/io/ios_base/Init
std::istream::istream =&gt; cpp/io/basic_istream/basic_istream
std::istream::~istream =&gt; cpp/io/basic_istream/~basic_istream
std::istream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::istream::get =&gt; cpp/io/basic_istream/get
std::istream::peek =&gt; cpp/io/basic_istream/peek
std::istream::unget =&gt; cpp/io/basic_istream/unget
std::istream::putback =&gt; cpp/io/basic_istream/putback
std::istream::getline =&gt; cpp/io/basic_istream/getline
std::istream::ignore =&gt; cpp/io/basic_istream/ignore
std::istream::read =&gt; cpp/io/basic_istream/read
std::istream::readsome =&gt; cpp/io/basic_istream/readsome
std::istream::gcount =&gt; cpp/io/basic_istream/gcount
std::istream::tellg =&gt; cpp/io/basic_istream/tellg
std::istream::seekg =&gt; cpp/io/basic_istream/seekg
std::istream::sync =&gt; cpp/io/basic_istream/sync
std::istream::sentry =&gt; cpp/io/basic_istream/sentry
std::istream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::istream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::istream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
operator&gt;&gt;(std::istream) =&gt; cpp/io/basic_istream/operator_gtgt2
std::ostream =&gt; cpp/io/basic_ostream
std::ostream::good =&gt; cpp/io/basic_ios/good
std::ostream::eof =&gt; cpp/io/basic_ios/eof
std::ostream::fail =&gt; cpp/io/basic_ios/fail
std::ostream::bad =&gt; cpp/io/basic_ios/bad
std::ostream::operator! =&gt; cpp/io/basic_ios/operator!
std::ostream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::ostream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::ostream::setstate =&gt; cpp/io/basic_ios/setstate
std::ostream::clear =&gt; cpp/io/basic_ios/clear
std::ostream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::ostream::fill =&gt; cpp/io/basic_ios/fill
std::ostream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::ostream::imbue =&gt; cpp/io/basic_ios/imbue
std::ostream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::ostream::tie =&gt; cpp/io/basic_ios/tie
std::ostream::narrow =&gt; cpp/io/basic_ios/narrow
std::ostream::widen =&gt; cpp/io/basic_ios/widen
std::ostream::init =&gt; cpp/io/basic_ios/init
std::ostream::move =&gt; cpp/io/basic_ios/move
std::ostream::swap =&gt; cpp/io/basic_ios/swap
std::ostream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::ostream::flags =&gt; cpp/io/ios_base/flags
std::ostream::setf =&gt; cpp/io/ios_base/setf
std::ostream::unsetf =&gt; cpp/io/ios_base/unsetf
std::ostream::precision =&gt; cpp/io/ios_base/precision
std::ostream::width =&gt; cpp/io/ios_base/width
std::ostream::imbue =&gt; cpp/io/ios_base/imbue
std::ostream::getloc =&gt; cpp/io/ios_base/getloc
std::ostream::xalloc =&gt; cpp/io/ios_base/xalloc
std::ostream::iword =&gt; cpp/io/ios_base/iword
std::ostream::pword =&gt; cpp/io/ios_base/pword
std::ostream::register_callback =&gt; cpp/io/ios_base/register_callback
std::ostream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::ostream::failure =&gt; cpp/io/ios_base/failure
std::ostream::failure::what =&gt; cpp/error/exception/what
std::ostream::failure::failure =&gt; cpp/io/ios_base/failure
std::ostream::openmode =&gt; cpp/io/ios_base/openmode
std::ostream::app =&gt; cpp/io/ios_base/openmode
std::ostream::binary =&gt; cpp/io/ios_base/openmode
std::ostream::in =&gt; cpp/io/ios_base/openmode
std::ostream::out =&gt; cpp/io/ios_base/openmode
std::ostream::trunc =&gt; cpp/io/ios_base/openmode
std::ostream::ate =&gt; cpp/io/ios_base/openmode
std::ostream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::ostream::dec =&gt; cpp/io/ios_base/fmtflags
std::ostream::oct =&gt; cpp/io/ios_base/fmtflags
std::ostream::hex =&gt; cpp/io/ios_base/fmtflags
std::ostream::basefield =&gt; cpp/io/ios_base/fmtflags
std::ostream::left =&gt; cpp/io/ios_base/fmtflags
std::ostream::right =&gt; cpp/io/ios_base/fmtflags
std::ostream::internal =&gt; cpp/io/ios_base/fmtflags
std::ostream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::ostream::scientific =&gt; cpp/io/ios_base/fmtflags
std::ostream::fixed =&gt; cpp/io/ios_base/fmtflags
std::ostream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::ostream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::ostream::showbase =&gt; cpp/io/ios_base/fmtflags
std::ostream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::ostream::showpos =&gt; cpp/io/ios_base/fmtflags
std::ostream::skipws =&gt; cpp/io/ios_base/fmtflags
std::ostream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::ostream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::ostream::iostate =&gt; cpp/io/ios_base/iostate
std::ostream::goodbit =&gt; cpp/io/ios_base/iostate
std::ostream::badbit =&gt; cpp/io/ios_base/iostate
std::ostream::failbit =&gt; cpp/io/ios_base/iostate
std::ostream::eofbit =&gt; cpp/io/ios_base/iostate
std::ostream::seekdir =&gt; cpp/io/ios_base/seekdir
std::ostream::beg =&gt; cpp/io/ios_base/seekdir
std::ostream::cur =&gt; cpp/io/ios_base/seekdir
std::ostream::end =&gt; cpp/io/ios_base/seekdir
std::ostream::event =&gt; cpp/io/ios_base/event
std::ostream::erase_event =&gt; cpp/io/ios_base/event
std::ostream::imbue_event =&gt; cpp/io/ios_base/event
std::ostream::copyfmt_event =&gt; cpp/io/ios_base/event
std::ostream::event_callback =&gt; cpp/io/ios_base/event_callback
std::ostream::Init =&gt; cpp/io/ios_base/Init
std::ostream::ostream =&gt; cpp/io/basic_ostream/basic_ostream
std::ostream::~ostream =&gt; cpp/io/basic_ostream/~basic_ostream
std::ostream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::ostream::put =&gt; cpp/io/basic_ostream/put
std::ostream::write =&gt; cpp/io/basic_ostream/write
std::ostream::tellp =&gt; cpp/io/basic_ostream/tellp
std::ostream::seekp =&gt; cpp/io/basic_ostream/seekp
std::ostream::flush =&gt; cpp/io/basic_ostream/flush
std::ostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::ostream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::ostream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::ostream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
operator&lt;&lt;(std::ostream) =&gt; cpp/io/basic_ostream/operator_ltlt2
std::iostream =&gt; cpp/io/basic_iostream
std::iostream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::iostream::get =&gt; cpp/io/basic_istream/get
std::iostream::peek =&gt; cpp/io/basic_istream/peek
std::iostream::unget =&gt; cpp/io/basic_istream/unget
std::iostream::putback =&gt; cpp/io/basic_istream/putback
std::iostream::getline =&gt; cpp/io/basic_istream/getline
std::iostream::ignore =&gt; cpp/io/basic_istream/ignore
std::iostream::read =&gt; cpp/io/basic_istream/read
std::iostream::readsome =&gt; cpp/io/basic_istream/readsome
std::iostream::gcount =&gt; cpp/io/basic_istream/gcount
std::iostream::tellg =&gt; cpp/io/basic_istream/tellg
std::iostream::seekg =&gt; cpp/io/basic_istream/seekg
std::iostream::sync =&gt; cpp/io/basic_istream/sync
std::iostream::sentry =&gt; cpp/io/basic_istream/sentry
std::iostream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::iostream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::iostream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::iostream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::iostream::put =&gt; cpp/io/basic_ostream/put
std::iostream::write =&gt; cpp/io/basic_ostream/write
std::iostream::tellp =&gt; cpp/io/basic_ostream/tellp
std::iostream::seekp =&gt; cpp/io/basic_ostream/seekp
std::iostream::flush =&gt; cpp/io/basic_ostream/flush
std::iostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::iostream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::iostream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::iostream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::iostream::good =&gt; cpp/io/basic_ios/good
std::iostream::eof =&gt; cpp/io/basic_ios/eof
std::iostream::fail =&gt; cpp/io/basic_ios/fail
std::iostream::bad =&gt; cpp/io/basic_ios/bad
std::iostream::operator! =&gt; cpp/io/basic_ios/operator!
std::iostream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::iostream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::iostream::setstate =&gt; cpp/io/basic_ios/setstate
std::iostream::clear =&gt; cpp/io/basic_ios/clear
std::iostream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::iostream::fill =&gt; cpp/io/basic_ios/fill
std::iostream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::iostream::imbue =&gt; cpp/io/basic_ios/imbue
std::iostream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::iostream::tie =&gt; cpp/io/basic_ios/tie
std::iostream::narrow =&gt; cpp/io/basic_ios/narrow
std::iostream::widen =&gt; cpp/io/basic_ios/widen
std::iostream::init =&gt; cpp/io/basic_ios/init
std::iostream::move =&gt; cpp/io/basic_ios/move
std::iostream::swap =&gt; cpp/io/basic_ios/swap
std::iostream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::iostream::flags =&gt; cpp/io/ios_base/flags
std::iostream::setf =&gt; cpp/io/ios_base/setf
std::iostream::unsetf =&gt; cpp/io/ios_base/unsetf
std::iostream::precision =&gt; cpp/io/ios_base/precision
std::iostream::width =&gt; cpp/io/ios_base/width
std::iostream::imbue =&gt; cpp/io/ios_base/imbue
std::iostream::getloc =&gt; cpp/io/ios_base/getloc
std::iostream::xalloc =&gt; cpp/io/ios_base/xalloc
std::iostream::iword =&gt; cpp/io/ios_base/iword
std::iostream::pword =&gt; cpp/io/ios_base/pword
std::iostream::register_callback =&gt; cpp/io/ios_base/register_callback
std::iostream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::iostream::failure =&gt; cpp/io/ios_base/failure
std::iostream::failure::what =&gt; cpp/error/exception/what
std::iostream::failure::failure =&gt; cpp/io/ios_base/failure
std::iostream::openmode =&gt; cpp/io/ios_base/openmode
std::iostream::app =&gt; cpp/io/ios_base/openmode
std::iostream::binary =&gt; cpp/io/ios_base/openmode
std::iostream::in =&gt; cpp/io/ios_base/openmode
std::iostream::out =&gt; cpp/io/ios_base/openmode
std::iostream::trunc =&gt; cpp/io/ios_base/openmode
std::iostream::ate =&gt; cpp/io/ios_base/openmode
std::iostream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::iostream::dec =&gt; cpp/io/ios_base/fmtflags
std::iostream::oct =&gt; cpp/io/ios_base/fmtflags
std::iostream::hex =&gt; cpp/io/ios_base/fmtflags
std::iostream::basefield =&gt; cpp/io/ios_base/fmtflags
std::iostream::left =&gt; cpp/io/ios_base/fmtflags
std::iostream::right =&gt; cpp/io/ios_base/fmtflags
std::iostream::internal =&gt; cpp/io/ios_base/fmtflags
std::iostream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::iostream::scientific =&gt; cpp/io/ios_base/fmtflags
std::iostream::fixed =&gt; cpp/io/ios_base/fmtflags
std::iostream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::iostream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::iostream::showbase =&gt; cpp/io/ios_base/fmtflags
std::iostream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::iostream::showpos =&gt; cpp/io/ios_base/fmtflags
std::iostream::skipws =&gt; cpp/io/ios_base/fmtflags
std::iostream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::iostream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::iostream::iostate =&gt; cpp/io/ios_base/iostate
std::iostream::goodbit =&gt; cpp/io/ios_base/iostate
std::iostream::badbit =&gt; cpp/io/ios_base/iostate
std::iostream::failbit =&gt; cpp/io/ios_base/iostate
std::iostream::eofbit =&gt; cpp/io/ios_base/iostate
std::iostream::seekdir =&gt; cpp/io/ios_base/seekdir
std::iostream::beg =&gt; cpp/io/ios_base/seekdir
std::iostream::cur =&gt; cpp/io/ios_base/seekdir
std::iostream::end =&gt; cpp/io/ios_base/seekdir
std::iostream::event =&gt; cpp/io/ios_base/event
std::iostream::erase_event =&gt; cpp/io/ios_base/event
std::iostream::imbue_event =&gt; cpp/io/ios_base/event
std::iostream::copyfmt_event =&gt; cpp/io/ios_base/event
std::iostream::event_callback =&gt; cpp/io/ios_base/event_callback
std::iostream::Init =&gt; cpp/io/ios_base/Init
std::iostream::iostream =&gt; cpp/io/basic_iostream/basic_iostream
std::iostream::~iostream =&gt; cpp/io/basic_iostream/~basic_iostream
std::ifstream =&gt; cpp/io/basic_ifstream
std::ifstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::ifstream::get =&gt; cpp/io/basic_istream/get
std::ifstream::peek =&gt; cpp/io/basic_istream/peek
std::ifstream::unget =&gt; cpp/io/basic_istream/unget
std::ifstream::putback =&gt; cpp/io/basic_istream/putback
std::ifstream::getline =&gt; cpp/io/basic_istream/getline
std::ifstream::ignore =&gt; cpp/io/basic_istream/ignore
std::ifstream::read =&gt; cpp/io/basic_istream/read
std::ifstream::readsome =&gt; cpp/io/basic_istream/readsome
std::ifstream::gcount =&gt; cpp/io/basic_istream/gcount
std::ifstream::tellg =&gt; cpp/io/basic_istream/tellg
std::ifstream::seekg =&gt; cpp/io/basic_istream/seekg
std::ifstream::sync =&gt; cpp/io/basic_istream/sync
std::ifstream::sentry =&gt; cpp/io/basic_istream/sentry
std::ifstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::ifstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::ifstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::ifstream::good =&gt; cpp/io/basic_ios/good
std::ifstream::eof =&gt; cpp/io/basic_ios/eof
std::ifstream::fail =&gt; cpp/io/basic_ios/fail
std::ifstream::bad =&gt; cpp/io/basic_ios/bad
std::ifstream::operator! =&gt; cpp/io/basic_ios/operator!
std::ifstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::ifstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::ifstream::setstate =&gt; cpp/io/basic_ios/setstate
std::ifstream::clear =&gt; cpp/io/basic_ios/clear
std::ifstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::ifstream::fill =&gt; cpp/io/basic_ios/fill
std::ifstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::ifstream::imbue =&gt; cpp/io/basic_ios/imbue
std::ifstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::ifstream::tie =&gt; cpp/io/basic_ios/tie
std::ifstream::narrow =&gt; cpp/io/basic_ios/narrow
std::ifstream::widen =&gt; cpp/io/basic_ios/widen
std::ifstream::init =&gt; cpp/io/basic_ios/init
std::ifstream::move =&gt; cpp/io/basic_ios/move
std::ifstream::swap =&gt; cpp/io/basic_ios/swap
std::ifstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::ifstream::flags =&gt; cpp/io/ios_base/flags
std::ifstream::setf =&gt; cpp/io/ios_base/setf
std::ifstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::ifstream::precision =&gt; cpp/io/ios_base/precision
std::ifstream::width =&gt; cpp/io/ios_base/width
std::ifstream::imbue =&gt; cpp/io/ios_base/imbue
std::ifstream::getloc =&gt; cpp/io/ios_base/getloc
std::ifstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::ifstream::iword =&gt; cpp/io/ios_base/iword
std::ifstream::pword =&gt; cpp/io/ios_base/pword
std::ifstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::ifstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::ifstream::failure =&gt; cpp/io/ios_base/failure
std::ifstream::failure::what =&gt; cpp/error/exception/what
std::ifstream::failure::failure =&gt; cpp/io/ios_base/failure
std::ifstream::openmode =&gt; cpp/io/ios_base/openmode
std::ifstream::app =&gt; cpp/io/ios_base/openmode
std::ifstream::binary =&gt; cpp/io/ios_base/openmode
std::ifstream::in =&gt; cpp/io/ios_base/openmode
std::ifstream::out =&gt; cpp/io/ios_base/openmode
std::ifstream::trunc =&gt; cpp/io/ios_base/openmode
std::ifstream::ate =&gt; cpp/io/ios_base/openmode
std::ifstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::ifstream::dec =&gt; cpp/io/ios_base/fmtflags
std::ifstream::oct =&gt; cpp/io/ios_base/fmtflags
std::ifstream::hex =&gt; cpp/io/ios_base/fmtflags
std::ifstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::ifstream::left =&gt; cpp/io/ios_base/fmtflags
std::ifstream::right =&gt; cpp/io/ios_base/fmtflags
std::ifstream::internal =&gt; cpp/io/ios_base/fmtflags
std::ifstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::ifstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::ifstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::ifstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::ifstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::ifstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::ifstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::ifstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::ifstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::ifstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::ifstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::ifstream::iostate =&gt; cpp/io/ios_base/iostate
std::ifstream::goodbit =&gt; cpp/io/ios_base/iostate
std::ifstream::badbit =&gt; cpp/io/ios_base/iostate
std::ifstream::failbit =&gt; cpp/io/ios_base/iostate
std::ifstream::eofbit =&gt; cpp/io/ios_base/iostate
std::ifstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::ifstream::beg =&gt; cpp/io/ios_base/seekdir
std::ifstream::cur =&gt; cpp/io/ios_base/seekdir
std::ifstream::end =&gt; cpp/io/ios_base/seekdir
std::ifstream::event =&gt; cpp/io/ios_base/event
std::ifstream::erase_event =&gt; cpp/io/ios_base/event
std::ifstream::imbue_event =&gt; cpp/io/ios_base/event
std::ifstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::ifstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::ifstream::Init =&gt; cpp/io/ios_base/Init
std::ifstream::ifstream =&gt; cpp/io/basic_ifstream/basic_ifstream
std::ifstream::operator= =&gt; cpp/io/basic_ifstream/operator=
std::ifstream::swap =&gt; cpp/io/basic_ifstream/swap
std::ifstream::rdbuf =&gt; cpp/io/basic_ifstream/rdbuf
std::ifstream::is_open =&gt; cpp/io/basic_ifstream/is_open
std::ifstream::open =&gt; cpp/io/basic_ifstream/open
std::ifstream::close =&gt; cpp/io/basic_ifstream/close
std::swap(std::ifstream) =&gt; cpp/io/basic_ifstream/swap2
std::ofstream =&gt; cpp/io/basic_ofstream
std::ofstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::ofstream::put =&gt; cpp/io/basic_ostream/put
std::ofstream::write =&gt; cpp/io/basic_ostream/write
std::ofstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::ofstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::ofstream::flush =&gt; cpp/io/basic_ostream/flush
std::ofstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::ofstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::ofstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::ofstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::ofstream::good =&gt; cpp/io/basic_ios/good
std::ofstream::eof =&gt; cpp/io/basic_ios/eof
std::ofstream::fail =&gt; cpp/io/basic_ios/fail
std::ofstream::bad =&gt; cpp/io/basic_ios/bad
std::ofstream::operator! =&gt; cpp/io/basic_ios/operator!
std::ofstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::ofstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::ofstream::setstate =&gt; cpp/io/basic_ios/setstate
std::ofstream::clear =&gt; cpp/io/basic_ios/clear
std::ofstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::ofstream::fill =&gt; cpp/io/basic_ios/fill
std::ofstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::ofstream::imbue =&gt; cpp/io/basic_ios/imbue
std::ofstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::ofstream::tie =&gt; cpp/io/basic_ios/tie
std::ofstream::narrow =&gt; cpp/io/basic_ios/narrow
std::ofstream::widen =&gt; cpp/io/basic_ios/widen
std::ofstream::init =&gt; cpp/io/basic_ios/init
std::ofstream::move =&gt; cpp/io/basic_ios/move
std::ofstream::swap =&gt; cpp/io/basic_ios/swap
std::ofstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::ofstream::flags =&gt; cpp/io/ios_base/flags
std::ofstream::setf =&gt; cpp/io/ios_base/setf
std::ofstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::ofstream::precision =&gt; cpp/io/ios_base/precision
std::ofstream::width =&gt; cpp/io/ios_base/width
std::ofstream::imbue =&gt; cpp/io/ios_base/imbue
std::ofstream::getloc =&gt; cpp/io/ios_base/getloc
std::ofstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::ofstream::iword =&gt; cpp/io/ios_base/iword
std::ofstream::pword =&gt; cpp/io/ios_base/pword
std::ofstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::ofstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::ofstream::failure =&gt; cpp/io/ios_base/failure
std::ofstream::failure::what =&gt; cpp/error/exception/what
std::ofstream::failure::failure =&gt; cpp/io/ios_base/failure
std::ofstream::openmode =&gt; cpp/io/ios_base/openmode
std::ofstream::app =&gt; cpp/io/ios_base/openmode
std::ofstream::binary =&gt; cpp/io/ios_base/openmode
std::ofstream::in =&gt; cpp/io/ios_base/openmode
std::ofstream::out =&gt; cpp/io/ios_base/openmode
std::ofstream::trunc =&gt; cpp/io/ios_base/openmode
std::ofstream::ate =&gt; cpp/io/ios_base/openmode
std::ofstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::ofstream::dec =&gt; cpp/io/ios_base/fmtflags
std::ofstream::oct =&gt; cpp/io/ios_base/fmtflags
std::ofstream::hex =&gt; cpp/io/ios_base/fmtflags
std::ofstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::ofstream::left =&gt; cpp/io/ios_base/fmtflags
std::ofstream::right =&gt; cpp/io/ios_base/fmtflags
std::ofstream::internal =&gt; cpp/io/ios_base/fmtflags
std::ofstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::ofstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::ofstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::ofstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::ofstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::ofstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::ofstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::ofstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::ofstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::ofstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::ofstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::ofstream::iostate =&gt; cpp/io/ios_base/iostate
std::ofstream::goodbit =&gt; cpp/io/ios_base/iostate
std::ofstream::badbit =&gt; cpp/io/ios_base/iostate
std::ofstream::failbit =&gt; cpp/io/ios_base/iostate
std::ofstream::eofbit =&gt; cpp/io/ios_base/iostate
std::ofstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::ofstream::beg =&gt; cpp/io/ios_base/seekdir
std::ofstream::cur =&gt; cpp/io/ios_base/seekdir
std::ofstream::end =&gt; cpp/io/ios_base/seekdir
std::ofstream::event =&gt; cpp/io/ios_base/event
std::ofstream::erase_event =&gt; cpp/io/ios_base/event
std::ofstream::imbue_event =&gt; cpp/io/ios_base/event
std::ofstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::ofstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::ofstream::Init =&gt; cpp/io/ios_base/Init
std::ofstream::ofstream =&gt; cpp/io/basic_ofstream/basic_ofstream
std::ofstream::operator= =&gt; cpp/io/basic_ofstream/operator=
std::ofstream::swap =&gt; cpp/io/basic_ofstream/swap
std::ofstream::rdbuf =&gt; cpp/io/basic_ofstream/rdbuf
std::ofstream::is_open =&gt; cpp/io/basic_ofstream/is_open
std::ofstream::open =&gt; cpp/io/basic_ofstream/open
std::ofstream::close =&gt; cpp/io/basic_ofstream/close
std::swap(std::ofstream) =&gt; cpp/io/basic_ofstream/swap2
std::fstream =&gt; cpp/io/basic_fstream
std::fstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::fstream::get =&gt; cpp/io/basic_istream/get
std::fstream::peek =&gt; cpp/io/basic_istream/peek
std::fstream::unget =&gt; cpp/io/basic_istream/unget
std::fstream::putback =&gt; cpp/io/basic_istream/putback
std::fstream::getline =&gt; cpp/io/basic_istream/getline
std::fstream::ignore =&gt; cpp/io/basic_istream/ignore
std::fstream::read =&gt; cpp/io/basic_istream/read
std::fstream::readsome =&gt; cpp/io/basic_istream/readsome
std::fstream::gcount =&gt; cpp/io/basic_istream/gcount
std::fstream::tellg =&gt; cpp/io/basic_istream/tellg
std::fstream::seekg =&gt; cpp/io/basic_istream/seekg
std::fstream::sync =&gt; cpp/io/basic_istream/sync
std::fstream::sentry =&gt; cpp/io/basic_istream/sentry
std::fstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::fstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::fstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::fstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::fstream::put =&gt; cpp/io/basic_ostream/put
std::fstream::write =&gt; cpp/io/basic_ostream/write
std::fstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::fstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::fstream::flush =&gt; cpp/io/basic_ostream/flush
std::fstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::fstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::fstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::fstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::fstream::good =&gt; cpp/io/basic_ios/good
std::fstream::eof =&gt; cpp/io/basic_ios/eof
std::fstream::fail =&gt; cpp/io/basic_ios/fail
std::fstream::bad =&gt; cpp/io/basic_ios/bad
std::fstream::operator! =&gt; cpp/io/basic_ios/operator!
std::fstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::fstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::fstream::setstate =&gt; cpp/io/basic_ios/setstate
std::fstream::clear =&gt; cpp/io/basic_ios/clear
std::fstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::fstream::fill =&gt; cpp/io/basic_ios/fill
std::fstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::fstream::imbue =&gt; cpp/io/basic_ios/imbue
std::fstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::fstream::tie =&gt; cpp/io/basic_ios/tie
std::fstream::narrow =&gt; cpp/io/basic_ios/narrow
std::fstream::widen =&gt; cpp/io/basic_ios/widen
std::fstream::init =&gt; cpp/io/basic_ios/init
std::fstream::move =&gt; cpp/io/basic_ios/move
std::fstream::swap =&gt; cpp/io/basic_ios/swap
std::fstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::fstream::flags =&gt; cpp/io/ios_base/flags
std::fstream::setf =&gt; cpp/io/ios_base/setf
std::fstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::fstream::precision =&gt; cpp/io/ios_base/precision
std::fstream::width =&gt; cpp/io/ios_base/width
std::fstream::imbue =&gt; cpp/io/ios_base/imbue
std::fstream::getloc =&gt; cpp/io/ios_base/getloc
std::fstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::fstream::iword =&gt; cpp/io/ios_base/iword
std::fstream::pword =&gt; cpp/io/ios_base/pword
std::fstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::fstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::fstream::failure =&gt; cpp/io/ios_base/failure
std::fstream::failure::what =&gt; cpp/error/exception/what
std::fstream::failure::failure =&gt; cpp/io/ios_base/failure
std::fstream::openmode =&gt; cpp/io/ios_base/openmode
std::fstream::app =&gt; cpp/io/ios_base/openmode
std::fstream::binary =&gt; cpp/io/ios_base/openmode
std::fstream::in =&gt; cpp/io/ios_base/openmode
std::fstream::out =&gt; cpp/io/ios_base/openmode
std::fstream::trunc =&gt; cpp/io/ios_base/openmode
std::fstream::ate =&gt; cpp/io/ios_base/openmode
std::fstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::fstream::dec =&gt; cpp/io/ios_base/fmtflags
std::fstream::oct =&gt; cpp/io/ios_base/fmtflags
std::fstream::hex =&gt; cpp/io/ios_base/fmtflags
std::fstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::fstream::left =&gt; cpp/io/ios_base/fmtflags
std::fstream::right =&gt; cpp/io/ios_base/fmtflags
std::fstream::internal =&gt; cpp/io/ios_base/fmtflags
std::fstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::fstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::fstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::fstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::fstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::fstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::fstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::fstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::fstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::fstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::fstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::fstream::iostate =&gt; cpp/io/ios_base/iostate
std::fstream::goodbit =&gt; cpp/io/ios_base/iostate
std::fstream::badbit =&gt; cpp/io/ios_base/iostate
std::fstream::failbit =&gt; cpp/io/ios_base/iostate
std::fstream::eofbit =&gt; cpp/io/ios_base/iostate
std::fstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::fstream::beg =&gt; cpp/io/ios_base/seekdir
std::fstream::cur =&gt; cpp/io/ios_base/seekdir
std::fstream::end =&gt; cpp/io/ios_base/seekdir
std::fstream::event =&gt; cpp/io/ios_base/event
std::fstream::erase_event =&gt; cpp/io/ios_base/event
std::fstream::imbue_event =&gt; cpp/io/ios_base/event
std::fstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::fstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::fstream::Init =&gt; cpp/io/ios_base/Init
std::fstream::fstream =&gt; cpp/io/basic_fstream/basic_fstream
std::fstream::operator= =&gt; cpp/io/basic_fstream/operator=
std::fstream::swap =&gt; cpp/io/basic_fstream/swap
std::fstream::rdbuf =&gt; cpp/io/basic_fstream/rdbuf
std::fstream::is_open =&gt; cpp/io/basic_fstream/is_open
std::fstream::open =&gt; cpp/io/basic_fstream/open
std::fstream::close =&gt; cpp/io/basic_fstream/close
std::swap(std::fstream) =&gt; cpp/io/basic_fstream/swap2
std::istringstream =&gt; cpp/io/basic_istringstream
std::istringstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::istringstream::get =&gt; cpp/io/basic_istream/get
std::istringstream::peek =&gt; cpp/io/basic_istream/peek
std::istringstream::unget =&gt; cpp/io/basic_istream/unget
std::istringstream::putback =&gt; cpp/io/basic_istream/putback
std::istringstream::getline =&gt; cpp/io/basic_istream/getline
std::istringstream::ignore =&gt; cpp/io/basic_istream/ignore
std::istringstream::read =&gt; cpp/io/basic_istream/read
std::istringstream::readsome =&gt; cpp/io/basic_istream/readsome
std::istringstream::gcount =&gt; cpp/io/basic_istream/gcount
std::istringstream::tellg =&gt; cpp/io/basic_istream/tellg
std::istringstream::seekg =&gt; cpp/io/basic_istream/seekg
std::istringstream::sync =&gt; cpp/io/basic_istream/sync
std::istringstream::sentry =&gt; cpp/io/basic_istream/sentry
std::istringstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::istringstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::istringstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::istringstream::good =&gt; cpp/io/basic_ios/good
std::istringstream::eof =&gt; cpp/io/basic_ios/eof
std::istringstream::fail =&gt; cpp/io/basic_ios/fail
std::istringstream::bad =&gt; cpp/io/basic_ios/bad
std::istringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::istringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::istringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::istringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::istringstream::clear =&gt; cpp/io/basic_ios/clear
std::istringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::istringstream::fill =&gt; cpp/io/basic_ios/fill
std::istringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::istringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::istringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::istringstream::tie =&gt; cpp/io/basic_ios/tie
std::istringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::istringstream::widen =&gt; cpp/io/basic_ios/widen
std::istringstream::init =&gt; cpp/io/basic_ios/init
std::istringstream::move =&gt; cpp/io/basic_ios/move
std::istringstream::swap =&gt; cpp/io/basic_ios/swap
std::istringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::istringstream::flags =&gt; cpp/io/ios_base/flags
std::istringstream::setf =&gt; cpp/io/ios_base/setf
std::istringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::istringstream::precision =&gt; cpp/io/ios_base/precision
std::istringstream::width =&gt; cpp/io/ios_base/width
std::istringstream::imbue =&gt; cpp/io/ios_base/imbue
std::istringstream::getloc =&gt; cpp/io/ios_base/getloc
std::istringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::istringstream::iword =&gt; cpp/io/ios_base/iword
std::istringstream::pword =&gt; cpp/io/ios_base/pword
std::istringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::istringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::istringstream::failure =&gt; cpp/io/ios_base/failure
std::istringstream::failure::what =&gt; cpp/error/exception/what
std::istringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::istringstream::openmode =&gt; cpp/io/ios_base/openmode
std::istringstream::app =&gt; cpp/io/ios_base/openmode
std::istringstream::binary =&gt; cpp/io/ios_base/openmode
std::istringstream::in =&gt; cpp/io/ios_base/openmode
std::istringstream::out =&gt; cpp/io/ios_base/openmode
std::istringstream::trunc =&gt; cpp/io/ios_base/openmode
std::istringstream::ate =&gt; cpp/io/ios_base/openmode
std::istringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::istringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::istringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::istringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::istringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::istringstream::left =&gt; cpp/io/ios_base/fmtflags
std::istringstream::right =&gt; cpp/io/ios_base/fmtflags
std::istringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::istringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::istringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::istringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::istringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::istringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::istringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::istringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::istringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::istringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::istringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::istringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::istringstream::iostate =&gt; cpp/io/ios_base/iostate
std::istringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::istringstream::badbit =&gt; cpp/io/ios_base/iostate
std::istringstream::failbit =&gt; cpp/io/ios_base/iostate
std::istringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::istringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::istringstream::beg =&gt; cpp/io/ios_base/seekdir
std::istringstream::cur =&gt; cpp/io/ios_base/seekdir
std::istringstream::end =&gt; cpp/io/ios_base/seekdir
std::istringstream::event =&gt; cpp/io/ios_base/event
std::istringstream::erase_event =&gt; cpp/io/ios_base/event
std::istringstream::imbue_event =&gt; cpp/io/ios_base/event
std::istringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::istringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::istringstream::Init =&gt; cpp/io/ios_base/Init
std::istringstream::istringstream =&gt; cpp/io/basic_istringstream/basic_istringstream
std::istringstream::operator= =&gt; cpp/io/basic_istringstream/operator=
std::istringstream::swap =&gt; cpp/io/basic_istringstream/swap
std::istringstream::rdbuf =&gt; cpp/io/basic_istringstream/rdbuf
std::istringstream::str =&gt; cpp/io/basic_istringstream/str
std::swap(std::istringstream) =&gt; cpp/io/basic_istringstream/swap2
std::ostringstream =&gt; cpp/io/basic_ostringstream
std::ostringstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::ostringstream::put =&gt; cpp/io/basic_ostream/put
std::ostringstream::write =&gt; cpp/io/basic_ostream/write
std::ostringstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::ostringstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::ostringstream::flush =&gt; cpp/io/basic_ostream/flush
std::ostringstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::ostringstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::ostringstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::ostringstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::ostringstream::good =&gt; cpp/io/basic_ios/good
std::ostringstream::eof =&gt; cpp/io/basic_ios/eof
std::ostringstream::fail =&gt; cpp/io/basic_ios/fail
std::ostringstream::bad =&gt; cpp/io/basic_ios/bad
std::ostringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::ostringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::ostringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::ostringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::ostringstream::clear =&gt; cpp/io/basic_ios/clear
std::ostringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::ostringstream::fill =&gt; cpp/io/basic_ios/fill
std::ostringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::ostringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::ostringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::ostringstream::tie =&gt; cpp/io/basic_ios/tie
std::ostringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::ostringstream::widen =&gt; cpp/io/basic_ios/widen
std::ostringstream::init =&gt; cpp/io/basic_ios/init
std::ostringstream::move =&gt; cpp/io/basic_ios/move
std::ostringstream::swap =&gt; cpp/io/basic_ios/swap
std::ostringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::ostringstream::flags =&gt; cpp/io/ios_base/flags
std::ostringstream::setf =&gt; cpp/io/ios_base/setf
std::ostringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::ostringstream::precision =&gt; cpp/io/ios_base/precision
std::ostringstream::width =&gt; cpp/io/ios_base/width
std::ostringstream::imbue =&gt; cpp/io/ios_base/imbue
std::ostringstream::getloc =&gt; cpp/io/ios_base/getloc
std::ostringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::ostringstream::iword =&gt; cpp/io/ios_base/iword
std::ostringstream::pword =&gt; cpp/io/ios_base/pword
std::ostringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::ostringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::ostringstream::failure =&gt; cpp/io/ios_base/failure
std::ostringstream::failure::what =&gt; cpp/error/exception/what
std::ostringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::ostringstream::openmode =&gt; cpp/io/ios_base/openmode
std::ostringstream::app =&gt; cpp/io/ios_base/openmode
std::ostringstream::binary =&gt; cpp/io/ios_base/openmode
std::ostringstream::in =&gt; cpp/io/ios_base/openmode
std::ostringstream::out =&gt; cpp/io/ios_base/openmode
std::ostringstream::trunc =&gt; cpp/io/ios_base/openmode
std::ostringstream::ate =&gt; cpp/io/ios_base/openmode
std::ostringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::left =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::right =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::ostringstream::iostate =&gt; cpp/io/ios_base/iostate
std::ostringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::ostringstream::badbit =&gt; cpp/io/ios_base/iostate
std::ostringstream::failbit =&gt; cpp/io/ios_base/iostate
std::ostringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::ostringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::ostringstream::beg =&gt; cpp/io/ios_base/seekdir
std::ostringstream::cur =&gt; cpp/io/ios_base/seekdir
std::ostringstream::end =&gt; cpp/io/ios_base/seekdir
std::ostringstream::event =&gt; cpp/io/ios_base/event
std::ostringstream::erase_event =&gt; cpp/io/ios_base/event
std::ostringstream::imbue_event =&gt; cpp/io/ios_base/event
std::ostringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::ostringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::ostringstream::Init =&gt; cpp/io/ios_base/Init
std::ostringstream::ostringstream =&gt; cpp/io/basic_ostringstream/basic_ostringstream
std::ostringstream::operator= =&gt; cpp/io/basic_ostringstream/operator=
std::ostringstream::swap =&gt; cpp/io/basic_ostringstream/swap
std::ostringstream::rdbuf =&gt; cpp/io/basic_ostringstream/rdbuf
std::ostringstream::str =&gt; cpp/io/basic_ostringstream/str
std::swap(std::ostringstream) =&gt; cpp/io/basic_ostringstream/swap2
std::stringstream =&gt; cpp/io/basic_stringstream
std::stringstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::stringstream::get =&gt; cpp/io/basic_istream/get
std::stringstream::peek =&gt; cpp/io/basic_istream/peek
std::stringstream::unget =&gt; cpp/io/basic_istream/unget
std::stringstream::putback =&gt; cpp/io/basic_istream/putback
std::stringstream::getline =&gt; cpp/io/basic_istream/getline
std::stringstream::ignore =&gt; cpp/io/basic_istream/ignore
std::stringstream::read =&gt; cpp/io/basic_istream/read
std::stringstream::readsome =&gt; cpp/io/basic_istream/readsome
std::stringstream::gcount =&gt; cpp/io/basic_istream/gcount
std::stringstream::tellg =&gt; cpp/io/basic_istream/tellg
std::stringstream::seekg =&gt; cpp/io/basic_istream/seekg
std::stringstream::sync =&gt; cpp/io/basic_istream/sync
std::stringstream::sentry =&gt; cpp/io/basic_istream/sentry
std::stringstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::stringstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::stringstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::stringstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::stringstream::put =&gt; cpp/io/basic_ostream/put
std::stringstream::write =&gt; cpp/io/basic_ostream/write
std::stringstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::stringstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::stringstream::flush =&gt; cpp/io/basic_ostream/flush
std::stringstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::stringstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::stringstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::stringstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::stringstream::good =&gt; cpp/io/basic_ios/good
std::stringstream::eof =&gt; cpp/io/basic_ios/eof
std::stringstream::fail =&gt; cpp/io/basic_ios/fail
std::stringstream::bad =&gt; cpp/io/basic_ios/bad
std::stringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::stringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::stringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::stringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::stringstream::clear =&gt; cpp/io/basic_ios/clear
std::stringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::stringstream::fill =&gt; cpp/io/basic_ios/fill
std::stringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::stringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::stringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::stringstream::tie =&gt; cpp/io/basic_ios/tie
std::stringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::stringstream::widen =&gt; cpp/io/basic_ios/widen
std::stringstream::init =&gt; cpp/io/basic_ios/init
std::stringstream::move =&gt; cpp/io/basic_ios/move
std::stringstream::swap =&gt; cpp/io/basic_ios/swap
std::stringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::stringstream::flags =&gt; cpp/io/ios_base/flags
std::stringstream::setf =&gt; cpp/io/ios_base/setf
std::stringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::stringstream::precision =&gt; cpp/io/ios_base/precision
std::stringstream::width =&gt; cpp/io/ios_base/width
std::stringstream::imbue =&gt; cpp/io/ios_base/imbue
std::stringstream::getloc =&gt; cpp/io/ios_base/getloc
std::stringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::stringstream::iword =&gt; cpp/io/ios_base/iword
std::stringstream::pword =&gt; cpp/io/ios_base/pword
std::stringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::stringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::stringstream::failure =&gt; cpp/io/ios_base/failure
std::stringstream::failure::what =&gt; cpp/error/exception/what
std::stringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::stringstream::openmode =&gt; cpp/io/ios_base/openmode
std::stringstream::app =&gt; cpp/io/ios_base/openmode
std::stringstream::binary =&gt; cpp/io/ios_base/openmode
std::stringstream::in =&gt; cpp/io/ios_base/openmode
std::stringstream::out =&gt; cpp/io/ios_base/openmode
std::stringstream::trunc =&gt; cpp/io/ios_base/openmode
std::stringstream::ate =&gt; cpp/io/ios_base/openmode
std::stringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::stringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::stringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::stringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::stringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::stringstream::left =&gt; cpp/io/ios_base/fmtflags
std::stringstream::right =&gt; cpp/io/ios_base/fmtflags
std::stringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::stringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::stringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::stringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::stringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::stringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::stringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::stringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::stringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::stringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::stringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::stringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::stringstream::iostate =&gt; cpp/io/ios_base/iostate
std::stringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::stringstream::badbit =&gt; cpp/io/ios_base/iostate
std::stringstream::failbit =&gt; cpp/io/ios_base/iostate
std::stringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::stringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::stringstream::beg =&gt; cpp/io/ios_base/seekdir
std::stringstream::cur =&gt; cpp/io/ios_base/seekdir
std::stringstream::end =&gt; cpp/io/ios_base/seekdir
std::stringstream::event =&gt; cpp/io/ios_base/event
std::stringstream::erase_event =&gt; cpp/io/ios_base/event
std::stringstream::imbue_event =&gt; cpp/io/ios_base/event
std::stringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::stringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::stringstream::Init =&gt; cpp/io/ios_base/Init
std::stringstream::stringstream =&gt; cpp/io/basic_stringstream/basic_stringstream
std::stringstream::operator= =&gt; cpp/io/basic_stringstream/operator=
std::stringstream::swap =&gt; cpp/io/basic_stringstream/swap
std::stringstream::rdbuf =&gt; cpp/io/basic_stringstream/rdbuf
std::stringstream::str =&gt; cpp/io/basic_stringstream/str
std::swap(std::stringstream) =&gt; cpp/io/basic_stringstream/swap2
std::wstreambuf =&gt; cpp/io/basic_streambuf
std::wstreambuf::wstreambuf =&gt; cpp/io/basic_streambuf/basic_streambuf
std::wstreambuf::~wstreambuf =&gt; cpp/io/basic_streambuf/~basic_streambuf
std::wstreambuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::wstreambuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::wstreambuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::wstreambuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::wstreambuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::wstreambuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::wstreambuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::wstreambuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::wstreambuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::wstreambuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::wstreambuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::wstreambuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::wstreambuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::wstreambuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::wstreambuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::wstreambuf::operator= =&gt; cpp/io/basic_streambuf/operator=
std::wstreambuf::swap =&gt; cpp/io/basic_streambuf/swap
std::wstreambuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::wstreambuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::wstreambuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::wstreambuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::wstreambuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::wstreambuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::wstreambuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::wstreambuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::wstreambuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::wstreambuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::wstreambuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::wstreambuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::wstreambuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::wstreambuf::setg =&gt; cpp/io/basic_streambuf/setg
std::wstreambuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::wstreambuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::wstreambuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::wstreambuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::wstreambuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::wstreambuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::wstreambuf::setp =&gt; cpp/io/basic_streambuf/setp
std::wstreambuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::wfilebuf =&gt; cpp/io/basic_filebuf
std::wfilebuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::wfilebuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::wfilebuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::wfilebuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::wfilebuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::wfilebuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::wfilebuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::wfilebuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::wfilebuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::wfilebuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::wfilebuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::wfilebuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::wfilebuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::wfilebuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::wfilebuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::wfilebuf::swap =&gt; cpp/io/basic_streambuf/swap
std::wfilebuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::wfilebuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::wfilebuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::wfilebuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::wfilebuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::wfilebuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::wfilebuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::wfilebuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::wfilebuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::wfilebuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::wfilebuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::wfilebuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::wfilebuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::wfilebuf::setg =&gt; cpp/io/basic_streambuf/setg
std::wfilebuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::wfilebuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::wfilebuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::wfilebuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::wfilebuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::wfilebuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::wfilebuf::setp =&gt; cpp/io/basic_streambuf/setp
std::wfilebuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::wfilebuf::wfilebuf =&gt; cpp/io/basic_filebuf/basic_filebuf
std::wfilebuf::~wfilebuf =&gt; cpp/io/basic_filebuf/~basic_filebuf
std::wfilebuf::operator= =&gt; cpp/io/basic_filebuf/operator=
std::wfilebuf::swap =&gt; cpp/io/basic_filebuf/swap
std::wfilebuf::is_open =&gt; cpp/io/basic_filebuf/is_open
std::wfilebuf::open =&gt; cpp/io/basic_filebuf/open
std::wfilebuf::close =&gt; cpp/io/basic_filebuf/close
std::wfilebuf::showmanyc =&gt; cpp/io/basic_filebuf/showmanyc
std::wfilebuf::underflow =&gt; cpp/io/basic_filebuf/underflow
std::wfilebuf::uflow =&gt; cpp/io/basic_filebuf/uflow
std::wfilebuf::pbackfail =&gt; cpp/io/basic_filebuf/pbackfail
std::wfilebuf::overflow =&gt; cpp/io/basic_filebuf/overflow
std::wfilebuf::setbuf =&gt; cpp/io/basic_filebuf/setbuf
std::wfilebuf::seekoff =&gt; cpp/io/basic_filebuf/seekoff
std::wfilebuf::seekpos =&gt; cpp/io/basic_filebuf/seekpos
std::wfilebuf::sync =&gt; cpp/io/basic_filebuf/sync
std::wfilebuf::imbue =&gt; cpp/io/basic_filebuf/imbue
std::swap(std::wfilebuf) =&gt; cpp/io/basic_filebuf/swap2
std::wstringbuf =&gt; cpp/io/basic_stringbuf
std::wstringbuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::wstringbuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::wstringbuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::wstringbuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::wstringbuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::wstringbuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::wstringbuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::wstringbuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::wstringbuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::wstringbuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::wstringbuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::wstringbuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::wstringbuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::wstringbuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::wstringbuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::wstringbuf::swap =&gt; cpp/io/basic_streambuf/swap
std::wstringbuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::wstringbuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::wstringbuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::wstringbuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::wstringbuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::wstringbuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::wstringbuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::wstringbuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::wstringbuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::wstringbuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::wstringbuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::wstringbuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::wstringbuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::wstringbuf::setg =&gt; cpp/io/basic_streambuf/setg
std::wstringbuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::wstringbuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::wstringbuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::wstringbuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::wstringbuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::wstringbuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::wstringbuf::setp =&gt; cpp/io/basic_streambuf/setp
std::wstringbuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::wstringbuf::wstringbuf =&gt; cpp/io/basic_stringbuf/basic_stringbuf
std::wstringbuf::operator= =&gt; cpp/io/basic_stringbuf/operator=
std::wstringbuf::swap =&gt; cpp/io/basic_stringbuf/swap
std::wstringbuf::str =&gt; cpp/io/basic_stringbuf/str
std::wstringbuf::underflow =&gt; cpp/io/basic_stringbuf/underflow
std::wstringbuf::pbackfail =&gt; cpp/io/basic_stringbuf/pbackfail
std::wstringbuf::overflow =&gt; cpp/io/basic_stringbuf/overflow
std::wstringbuf::setbuf =&gt; cpp/io/basic_stringbuf/setbuf
std::wstringbuf::seekoff =&gt; cpp/io/basic_stringbuf/seekoff
std::wstringbuf::seekpos =&gt; cpp/io/basic_stringbuf/seekpos
std::swap(std::wstringbuf) =&gt; cpp/io/basic_stringbuf/swap2
std::wistream =&gt; cpp/io/basic_istream
std::wistream::good =&gt; cpp/io/basic_ios/good
std::wistream::eof =&gt; cpp/io/basic_ios/eof
std::wistream::fail =&gt; cpp/io/basic_ios/fail
std::wistream::bad =&gt; cpp/io/basic_ios/bad
std::wistream::operator! =&gt; cpp/io/basic_ios/operator!
std::wistream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wistream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wistream::setstate =&gt; cpp/io/basic_ios/setstate
std::wistream::clear =&gt; cpp/io/basic_ios/clear
std::wistream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wistream::fill =&gt; cpp/io/basic_ios/fill
std::wistream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wistream::imbue =&gt; cpp/io/basic_ios/imbue
std::wistream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wistream::tie =&gt; cpp/io/basic_ios/tie
std::wistream::narrow =&gt; cpp/io/basic_ios/narrow
std::wistream::widen =&gt; cpp/io/basic_ios/widen
std::wistream::init =&gt; cpp/io/basic_ios/init
std::wistream::move =&gt; cpp/io/basic_ios/move
std::wistream::swap =&gt; cpp/io/basic_ios/swap
std::wistream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wistream::flags =&gt; cpp/io/ios_base/flags
std::wistream::setf =&gt; cpp/io/ios_base/setf
std::wistream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wistream::precision =&gt; cpp/io/ios_base/precision
std::wistream::width =&gt; cpp/io/ios_base/width
std::wistream::imbue =&gt; cpp/io/ios_base/imbue
std::wistream::getloc =&gt; cpp/io/ios_base/getloc
std::wistream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wistream::iword =&gt; cpp/io/ios_base/iword
std::wistream::pword =&gt; cpp/io/ios_base/pword
std::wistream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wistream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wistream::failure =&gt; cpp/io/ios_base/failure
std::wistream::failure::what =&gt; cpp/error/exception/what
std::wistream::failure::failure =&gt; cpp/io/ios_base/failure
std::wistream::openmode =&gt; cpp/io/ios_base/openmode
std::wistream::app =&gt; cpp/io/ios_base/openmode
std::wistream::binary =&gt; cpp/io/ios_base/openmode
std::wistream::in =&gt; cpp/io/ios_base/openmode
std::wistream::out =&gt; cpp/io/ios_base/openmode
std::wistream::trunc =&gt; cpp/io/ios_base/openmode
std::wistream::ate =&gt; cpp/io/ios_base/openmode
std::wistream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wistream::dec =&gt; cpp/io/ios_base/fmtflags
std::wistream::oct =&gt; cpp/io/ios_base/fmtflags
std::wistream::hex =&gt; cpp/io/ios_base/fmtflags
std::wistream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wistream::left =&gt; cpp/io/ios_base/fmtflags
std::wistream::right =&gt; cpp/io/ios_base/fmtflags
std::wistream::internal =&gt; cpp/io/ios_base/fmtflags
std::wistream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wistream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wistream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wistream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wistream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wistream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wistream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wistream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wistream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wistream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wistream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wistream::iostate =&gt; cpp/io/ios_base/iostate
std::wistream::goodbit =&gt; cpp/io/ios_base/iostate
std::wistream::badbit =&gt; cpp/io/ios_base/iostate
std::wistream::failbit =&gt; cpp/io/ios_base/iostate
std::wistream::eofbit =&gt; cpp/io/ios_base/iostate
std::wistream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wistream::beg =&gt; cpp/io/ios_base/seekdir
std::wistream::cur =&gt; cpp/io/ios_base/seekdir
std::wistream::end =&gt; cpp/io/ios_base/seekdir
std::wistream::event =&gt; cpp/io/ios_base/event
std::wistream::erase_event =&gt; cpp/io/ios_base/event
std::wistream::imbue_event =&gt; cpp/io/ios_base/event
std::wistream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wistream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wistream::Init =&gt; cpp/io/ios_base/Init
std::wistream::wistream =&gt; cpp/io/basic_istream/basic_istream
std::wistream::~wistream =&gt; cpp/io/basic_istream/~basic_istream
std::wistream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::wistream::get =&gt; cpp/io/basic_istream/get
std::wistream::peek =&gt; cpp/io/basic_istream/peek
std::wistream::unget =&gt; cpp/io/basic_istream/unget
std::wistream::putback =&gt; cpp/io/basic_istream/putback
std::wistream::getline =&gt; cpp/io/basic_istream/getline
std::wistream::ignore =&gt; cpp/io/basic_istream/ignore
std::wistream::read =&gt; cpp/io/basic_istream/read
std::wistream::readsome =&gt; cpp/io/basic_istream/readsome
std::wistream::gcount =&gt; cpp/io/basic_istream/gcount
std::wistream::tellg =&gt; cpp/io/basic_istream/tellg
std::wistream::seekg =&gt; cpp/io/basic_istream/seekg
std::wistream::sync =&gt; cpp/io/basic_istream/sync
std::wistream::sentry =&gt; cpp/io/basic_istream/sentry
std::wistream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::wistream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::wistream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
operator&gt;&gt;(std::wistream) =&gt; cpp/io/basic_istream/operator_gtgt2
std::wostream =&gt; cpp/io/basic_ostream
std::wostream::good =&gt; cpp/io/basic_ios/good
std::wostream::eof =&gt; cpp/io/basic_ios/eof
std::wostream::fail =&gt; cpp/io/basic_ios/fail
std::wostream::bad =&gt; cpp/io/basic_ios/bad
std::wostream::operator! =&gt; cpp/io/basic_ios/operator!
std::wostream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wostream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wostream::setstate =&gt; cpp/io/basic_ios/setstate
std::wostream::clear =&gt; cpp/io/basic_ios/clear
std::wostream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wostream::fill =&gt; cpp/io/basic_ios/fill
std::wostream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wostream::imbue =&gt; cpp/io/basic_ios/imbue
std::wostream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wostream::tie =&gt; cpp/io/basic_ios/tie
std::wostream::narrow =&gt; cpp/io/basic_ios/narrow
std::wostream::widen =&gt; cpp/io/basic_ios/widen
std::wostream::init =&gt; cpp/io/basic_ios/init
std::wostream::move =&gt; cpp/io/basic_ios/move
std::wostream::swap =&gt; cpp/io/basic_ios/swap
std::wostream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wostream::flags =&gt; cpp/io/ios_base/flags
std::wostream::setf =&gt; cpp/io/ios_base/setf
std::wostream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wostream::precision =&gt; cpp/io/ios_base/precision
std::wostream::width =&gt; cpp/io/ios_base/width
std::wostream::imbue =&gt; cpp/io/ios_base/imbue
std::wostream::getloc =&gt; cpp/io/ios_base/getloc
std::wostream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wostream::iword =&gt; cpp/io/ios_base/iword
std::wostream::pword =&gt; cpp/io/ios_base/pword
std::wostream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wostream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wostream::failure =&gt; cpp/io/ios_base/failure
std::wostream::failure::what =&gt; cpp/error/exception/what
std::wostream::failure::failure =&gt; cpp/io/ios_base/failure
std::wostream::openmode =&gt; cpp/io/ios_base/openmode
std::wostream::app =&gt; cpp/io/ios_base/openmode
std::wostream::binary =&gt; cpp/io/ios_base/openmode
std::wostream::in =&gt; cpp/io/ios_base/openmode
std::wostream::out =&gt; cpp/io/ios_base/openmode
std::wostream::trunc =&gt; cpp/io/ios_base/openmode
std::wostream::ate =&gt; cpp/io/ios_base/openmode
std::wostream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wostream::dec =&gt; cpp/io/ios_base/fmtflags
std::wostream::oct =&gt; cpp/io/ios_base/fmtflags
std::wostream::hex =&gt; cpp/io/ios_base/fmtflags
std::wostream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wostream::left =&gt; cpp/io/ios_base/fmtflags
std::wostream::right =&gt; cpp/io/ios_base/fmtflags
std::wostream::internal =&gt; cpp/io/ios_base/fmtflags
std::wostream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wostream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wostream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wostream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wostream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wostream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wostream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wostream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wostream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wostream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wostream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wostream::iostate =&gt; cpp/io/ios_base/iostate
std::wostream::goodbit =&gt; cpp/io/ios_base/iostate
std::wostream::badbit =&gt; cpp/io/ios_base/iostate
std::wostream::failbit =&gt; cpp/io/ios_base/iostate
std::wostream::eofbit =&gt; cpp/io/ios_base/iostate
std::wostream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wostream::beg =&gt; cpp/io/ios_base/seekdir
std::wostream::cur =&gt; cpp/io/ios_base/seekdir
std::wostream::end =&gt; cpp/io/ios_base/seekdir
std::wostream::event =&gt; cpp/io/ios_base/event
std::wostream::erase_event =&gt; cpp/io/ios_base/event
std::wostream::imbue_event =&gt; cpp/io/ios_base/event
std::wostream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wostream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wostream::Init =&gt; cpp/io/ios_base/Init
std::wostream::wostream =&gt; cpp/io/basic_ostream/basic_ostream
std::wostream::~wostream =&gt; cpp/io/basic_ostream/~basic_ostream
std::wostream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::wostream::put =&gt; cpp/io/basic_ostream/put
std::wostream::write =&gt; cpp/io/basic_ostream/write
std::wostream::tellp =&gt; cpp/io/basic_ostream/tellp
std::wostream::seekp =&gt; cpp/io/basic_ostream/seekp
std::wostream::flush =&gt; cpp/io/basic_ostream/flush
std::wostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::wostream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::wostream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::wostream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
operator&lt;&lt;(std::wostream) =&gt; cpp/io/basic_ostream/operator_ltlt2
std::wiostream =&gt; cpp/io/basic_iostream
std::wiostream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::wiostream::get =&gt; cpp/io/basic_istream/get
std::wiostream::peek =&gt; cpp/io/basic_istream/peek
std::wiostream::unget =&gt; cpp/io/basic_istream/unget
std::wiostream::putback =&gt; cpp/io/basic_istream/putback
std::wiostream::getline =&gt; cpp/io/basic_istream/getline
std::wiostream::ignore =&gt; cpp/io/basic_istream/ignore
std::wiostream::read =&gt; cpp/io/basic_istream/read
std::wiostream::readsome =&gt; cpp/io/basic_istream/readsome
std::wiostream::gcount =&gt; cpp/io/basic_istream/gcount
std::wiostream::tellg =&gt; cpp/io/basic_istream/tellg
std::wiostream::seekg =&gt; cpp/io/basic_istream/seekg
std::wiostream::sync =&gt; cpp/io/basic_istream/sync
std::wiostream::sentry =&gt; cpp/io/basic_istream/sentry
std::wiostream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::wiostream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::wiostream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::wiostream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::wiostream::put =&gt; cpp/io/basic_ostream/put
std::wiostream::write =&gt; cpp/io/basic_ostream/write
std::wiostream::tellp =&gt; cpp/io/basic_ostream/tellp
std::wiostream::seekp =&gt; cpp/io/basic_ostream/seekp
std::wiostream::flush =&gt; cpp/io/basic_ostream/flush
std::wiostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::wiostream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::wiostream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::wiostream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::wiostream::good =&gt; cpp/io/basic_ios/good
std::wiostream::eof =&gt; cpp/io/basic_ios/eof
std::wiostream::fail =&gt; cpp/io/basic_ios/fail
std::wiostream::bad =&gt; cpp/io/basic_ios/bad
std::wiostream::operator! =&gt; cpp/io/basic_ios/operator!
std::wiostream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wiostream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wiostream::setstate =&gt; cpp/io/basic_ios/setstate
std::wiostream::clear =&gt; cpp/io/basic_ios/clear
std::wiostream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wiostream::fill =&gt; cpp/io/basic_ios/fill
std::wiostream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wiostream::imbue =&gt; cpp/io/basic_ios/imbue
std::wiostream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wiostream::tie =&gt; cpp/io/basic_ios/tie
std::wiostream::narrow =&gt; cpp/io/basic_ios/narrow
std::wiostream::widen =&gt; cpp/io/basic_ios/widen
std::wiostream::init =&gt; cpp/io/basic_ios/init
std::wiostream::move =&gt; cpp/io/basic_ios/move
std::wiostream::swap =&gt; cpp/io/basic_ios/swap
std::wiostream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wiostream::flags =&gt; cpp/io/ios_base/flags
std::wiostream::setf =&gt; cpp/io/ios_base/setf
std::wiostream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wiostream::precision =&gt; cpp/io/ios_base/precision
std::wiostream::width =&gt; cpp/io/ios_base/width
std::wiostream::imbue =&gt; cpp/io/ios_base/imbue
std::wiostream::getloc =&gt; cpp/io/ios_base/getloc
std::wiostream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wiostream::iword =&gt; cpp/io/ios_base/iword
std::wiostream::pword =&gt; cpp/io/ios_base/pword
std::wiostream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wiostream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wiostream::failure =&gt; cpp/io/ios_base/failure
std::wiostream::failure::what =&gt; cpp/error/exception/what
std::wiostream::failure::failure =&gt; cpp/io/ios_base/failure
std::wiostream::openmode =&gt; cpp/io/ios_base/openmode
std::wiostream::app =&gt; cpp/io/ios_base/openmode
std::wiostream::binary =&gt; cpp/io/ios_base/openmode
std::wiostream::in =&gt; cpp/io/ios_base/openmode
std::wiostream::out =&gt; cpp/io/ios_base/openmode
std::wiostream::trunc =&gt; cpp/io/ios_base/openmode
std::wiostream::ate =&gt; cpp/io/ios_base/openmode
std::wiostream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wiostream::dec =&gt; cpp/io/ios_base/fmtflags
std::wiostream::oct =&gt; cpp/io/ios_base/fmtflags
std::wiostream::hex =&gt; cpp/io/ios_base/fmtflags
std::wiostream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wiostream::left =&gt; cpp/io/ios_base/fmtflags
std::wiostream::right =&gt; cpp/io/ios_base/fmtflags
std::wiostream::internal =&gt; cpp/io/ios_base/fmtflags
std::wiostream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wiostream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wiostream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wiostream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wiostream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wiostream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wiostream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wiostream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wiostream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wiostream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wiostream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wiostream::iostate =&gt; cpp/io/ios_base/iostate
std::wiostream::goodbit =&gt; cpp/io/ios_base/iostate
std::wiostream::badbit =&gt; cpp/io/ios_base/iostate
std::wiostream::failbit =&gt; cpp/io/ios_base/iostate
std::wiostream::eofbit =&gt; cpp/io/ios_base/iostate
std::wiostream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wiostream::beg =&gt; cpp/io/ios_base/seekdir
std::wiostream::cur =&gt; cpp/io/ios_base/seekdir
std::wiostream::end =&gt; cpp/io/ios_base/seekdir
std::wiostream::event =&gt; cpp/io/ios_base/event
std::wiostream::erase_event =&gt; cpp/io/ios_base/event
std::wiostream::imbue_event =&gt; cpp/io/ios_base/event
std::wiostream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wiostream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wiostream::Init =&gt; cpp/io/ios_base/Init
std::wiostream::wiostream =&gt; cpp/io/basic_iostream/basic_iostream
std::wiostream::~wiostream =&gt; cpp/io/basic_iostream/~basic_iostream
std::wifstream =&gt; cpp/io/basic_ifstream
std::wifstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::wifstream::get =&gt; cpp/io/basic_istream/get
std::wifstream::peek =&gt; cpp/io/basic_istream/peek
std::wifstream::unget =&gt; cpp/io/basic_istream/unget
std::wifstream::putback =&gt; cpp/io/basic_istream/putback
std::wifstream::getline =&gt; cpp/io/basic_istream/getline
std::wifstream::ignore =&gt; cpp/io/basic_istream/ignore
std::wifstream::read =&gt; cpp/io/basic_istream/read
std::wifstream::readsome =&gt; cpp/io/basic_istream/readsome
std::wifstream::gcount =&gt; cpp/io/basic_istream/gcount
std::wifstream::tellg =&gt; cpp/io/basic_istream/tellg
std::wifstream::seekg =&gt; cpp/io/basic_istream/seekg
std::wifstream::sync =&gt; cpp/io/basic_istream/sync
std::wifstream::sentry =&gt; cpp/io/basic_istream/sentry
std::wifstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::wifstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::wifstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::wifstream::good =&gt; cpp/io/basic_ios/good
std::wifstream::eof =&gt; cpp/io/basic_ios/eof
std::wifstream::fail =&gt; cpp/io/basic_ios/fail
std::wifstream::bad =&gt; cpp/io/basic_ios/bad
std::wifstream::operator! =&gt; cpp/io/basic_ios/operator!
std::wifstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wifstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wifstream::setstate =&gt; cpp/io/basic_ios/setstate
std::wifstream::clear =&gt; cpp/io/basic_ios/clear
std::wifstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wifstream::fill =&gt; cpp/io/basic_ios/fill
std::wifstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wifstream::imbue =&gt; cpp/io/basic_ios/imbue
std::wifstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wifstream::tie =&gt; cpp/io/basic_ios/tie
std::wifstream::narrow =&gt; cpp/io/basic_ios/narrow
std::wifstream::widen =&gt; cpp/io/basic_ios/widen
std::wifstream::init =&gt; cpp/io/basic_ios/init
std::wifstream::move =&gt; cpp/io/basic_ios/move
std::wifstream::swap =&gt; cpp/io/basic_ios/swap
std::wifstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wifstream::flags =&gt; cpp/io/ios_base/flags
std::wifstream::setf =&gt; cpp/io/ios_base/setf
std::wifstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wifstream::precision =&gt; cpp/io/ios_base/precision
std::wifstream::width =&gt; cpp/io/ios_base/width
std::wifstream::imbue =&gt; cpp/io/ios_base/imbue
std::wifstream::getloc =&gt; cpp/io/ios_base/getloc
std::wifstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wifstream::iword =&gt; cpp/io/ios_base/iword
std::wifstream::pword =&gt; cpp/io/ios_base/pword
std::wifstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wifstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wifstream::failure =&gt; cpp/io/ios_base/failure
std::wifstream::failure::what =&gt; cpp/error/exception/what
std::wifstream::failure::failure =&gt; cpp/io/ios_base/failure
std::wifstream::openmode =&gt; cpp/io/ios_base/openmode
std::wifstream::app =&gt; cpp/io/ios_base/openmode
std::wifstream::binary =&gt; cpp/io/ios_base/openmode
std::wifstream::in =&gt; cpp/io/ios_base/openmode
std::wifstream::out =&gt; cpp/io/ios_base/openmode
std::wifstream::trunc =&gt; cpp/io/ios_base/openmode
std::wifstream::ate =&gt; cpp/io/ios_base/openmode
std::wifstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wifstream::dec =&gt; cpp/io/ios_base/fmtflags
std::wifstream::oct =&gt; cpp/io/ios_base/fmtflags
std::wifstream::hex =&gt; cpp/io/ios_base/fmtflags
std::wifstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wifstream::left =&gt; cpp/io/ios_base/fmtflags
std::wifstream::right =&gt; cpp/io/ios_base/fmtflags
std::wifstream::internal =&gt; cpp/io/ios_base/fmtflags
std::wifstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wifstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wifstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wifstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wifstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wifstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wifstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wifstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wifstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wifstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wifstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wifstream::iostate =&gt; cpp/io/ios_base/iostate
std::wifstream::goodbit =&gt; cpp/io/ios_base/iostate
std::wifstream::badbit =&gt; cpp/io/ios_base/iostate
std::wifstream::failbit =&gt; cpp/io/ios_base/iostate
std::wifstream::eofbit =&gt; cpp/io/ios_base/iostate
std::wifstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wifstream::beg =&gt; cpp/io/ios_base/seekdir
std::wifstream::cur =&gt; cpp/io/ios_base/seekdir
std::wifstream::end =&gt; cpp/io/ios_base/seekdir
std::wifstream::event =&gt; cpp/io/ios_base/event
std::wifstream::erase_event =&gt; cpp/io/ios_base/event
std::wifstream::imbue_event =&gt; cpp/io/ios_base/event
std::wifstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wifstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wifstream::Init =&gt; cpp/io/ios_base/Init
std::wifstream::wifstream =&gt; cpp/io/basic_ifstream/basic_ifstream
std::wifstream::operator= =&gt; cpp/io/basic_ifstream/operator=
std::wifstream::swap =&gt; cpp/io/basic_ifstream/swap
std::wifstream::rdbuf =&gt; cpp/io/basic_ifstream/rdbuf
std::wifstream::is_open =&gt; cpp/io/basic_ifstream/is_open
std::wifstream::open =&gt; cpp/io/basic_ifstream/open
std::wifstream::close =&gt; cpp/io/basic_ifstream/close
std::swap(std::wifstream) =&gt; cpp/io/basic_ifstream/swap2
std::wofstream =&gt; cpp/io/basic_ofstream
std::wofstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::wofstream::put =&gt; cpp/io/basic_ostream/put
std::wofstream::write =&gt; cpp/io/basic_ostream/write
std::wofstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::wofstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::wofstream::flush =&gt; cpp/io/basic_ostream/flush
std::wofstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::wofstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::wofstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::wofstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::wofstream::good =&gt; cpp/io/basic_ios/good
std::wofstream::eof =&gt; cpp/io/basic_ios/eof
std::wofstream::fail =&gt; cpp/io/basic_ios/fail
std::wofstream::bad =&gt; cpp/io/basic_ios/bad
std::wofstream::operator! =&gt; cpp/io/basic_ios/operator!
std::wofstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wofstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wofstream::setstate =&gt; cpp/io/basic_ios/setstate
std::wofstream::clear =&gt; cpp/io/basic_ios/clear
std::wofstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wofstream::fill =&gt; cpp/io/basic_ios/fill
std::wofstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wofstream::imbue =&gt; cpp/io/basic_ios/imbue
std::wofstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wofstream::tie =&gt; cpp/io/basic_ios/tie
std::wofstream::narrow =&gt; cpp/io/basic_ios/narrow
std::wofstream::widen =&gt; cpp/io/basic_ios/widen
std::wofstream::init =&gt; cpp/io/basic_ios/init
std::wofstream::move =&gt; cpp/io/basic_ios/move
std::wofstream::swap =&gt; cpp/io/basic_ios/swap
std::wofstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wofstream::flags =&gt; cpp/io/ios_base/flags
std::wofstream::setf =&gt; cpp/io/ios_base/setf
std::wofstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wofstream::precision =&gt; cpp/io/ios_base/precision
std::wofstream::width =&gt; cpp/io/ios_base/width
std::wofstream::imbue =&gt; cpp/io/ios_base/imbue
std::wofstream::getloc =&gt; cpp/io/ios_base/getloc
std::wofstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wofstream::iword =&gt; cpp/io/ios_base/iword
std::wofstream::pword =&gt; cpp/io/ios_base/pword
std::wofstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wofstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wofstream::failure =&gt; cpp/io/ios_base/failure
std::wofstream::failure::what =&gt; cpp/error/exception/what
std::wofstream::failure::failure =&gt; cpp/io/ios_base/failure
std::wofstream::openmode =&gt; cpp/io/ios_base/openmode
std::wofstream::app =&gt; cpp/io/ios_base/openmode
std::wofstream::binary =&gt; cpp/io/ios_base/openmode
std::wofstream::in =&gt; cpp/io/ios_base/openmode
std::wofstream::out =&gt; cpp/io/ios_base/openmode
std::wofstream::trunc =&gt; cpp/io/ios_base/openmode
std::wofstream::ate =&gt; cpp/io/ios_base/openmode
std::wofstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wofstream::dec =&gt; cpp/io/ios_base/fmtflags
std::wofstream::oct =&gt; cpp/io/ios_base/fmtflags
std::wofstream::hex =&gt; cpp/io/ios_base/fmtflags
std::wofstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wofstream::left =&gt; cpp/io/ios_base/fmtflags
std::wofstream::right =&gt; cpp/io/ios_base/fmtflags
std::wofstream::internal =&gt; cpp/io/ios_base/fmtflags
std::wofstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wofstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wofstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wofstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wofstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wofstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wofstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wofstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wofstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wofstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wofstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wofstream::iostate =&gt; cpp/io/ios_base/iostate
std::wofstream::goodbit =&gt; cpp/io/ios_base/iostate
std::wofstream::badbit =&gt; cpp/io/ios_base/iostate
std::wofstream::failbit =&gt; cpp/io/ios_base/iostate
std::wofstream::eofbit =&gt; cpp/io/ios_base/iostate
std::wofstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wofstream::beg =&gt; cpp/io/ios_base/seekdir
std::wofstream::cur =&gt; cpp/io/ios_base/seekdir
std::wofstream::end =&gt; cpp/io/ios_base/seekdir
std::wofstream::event =&gt; cpp/io/ios_base/event
std::wofstream::erase_event =&gt; cpp/io/ios_base/event
std::wofstream::imbue_event =&gt; cpp/io/ios_base/event
std::wofstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wofstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wofstream::Init =&gt; cpp/io/ios_base/Init
std::wofstream::wofstream =&gt; cpp/io/basic_ofstream/basic_ofstream
std::wofstream::operator= =&gt; cpp/io/basic_ofstream/operator=
std::wofstream::swap =&gt; cpp/io/basic_ofstream/swap
std::wofstream::rdbuf =&gt; cpp/io/basic_ofstream/rdbuf
std::wofstream::is_open =&gt; cpp/io/basic_ofstream/is_open
std::wofstream::open =&gt; cpp/io/basic_ofstream/open
std::wofstream::close =&gt; cpp/io/basic_ofstream/close
std::swap(std::wofstream) =&gt; cpp/io/basic_ofstream/swap2
std::wfstream =&gt; cpp/io/basic_fstream
std::wfstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::wfstream::get =&gt; cpp/io/basic_istream/get
std::wfstream::peek =&gt; cpp/io/basic_istream/peek
std::wfstream::unget =&gt; cpp/io/basic_istream/unget
std::wfstream::putback =&gt; cpp/io/basic_istream/putback
std::wfstream::getline =&gt; cpp/io/basic_istream/getline
std::wfstream::ignore =&gt; cpp/io/basic_istream/ignore
std::wfstream::read =&gt; cpp/io/basic_istream/read
std::wfstream::readsome =&gt; cpp/io/basic_istream/readsome
std::wfstream::gcount =&gt; cpp/io/basic_istream/gcount
std::wfstream::tellg =&gt; cpp/io/basic_istream/tellg
std::wfstream::seekg =&gt; cpp/io/basic_istream/seekg
std::wfstream::sync =&gt; cpp/io/basic_istream/sync
std::wfstream::sentry =&gt; cpp/io/basic_istream/sentry
std::wfstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::wfstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::wfstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::wfstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::wfstream::put =&gt; cpp/io/basic_ostream/put
std::wfstream::write =&gt; cpp/io/basic_ostream/write
std::wfstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::wfstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::wfstream::flush =&gt; cpp/io/basic_ostream/flush
std::wfstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::wfstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::wfstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::wfstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::wfstream::good =&gt; cpp/io/basic_ios/good
std::wfstream::eof =&gt; cpp/io/basic_ios/eof
std::wfstream::fail =&gt; cpp/io/basic_ios/fail
std::wfstream::bad =&gt; cpp/io/basic_ios/bad
std::wfstream::operator! =&gt; cpp/io/basic_ios/operator!
std::wfstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wfstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wfstream::setstate =&gt; cpp/io/basic_ios/setstate
std::wfstream::clear =&gt; cpp/io/basic_ios/clear
std::wfstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wfstream::fill =&gt; cpp/io/basic_ios/fill
std::wfstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wfstream::imbue =&gt; cpp/io/basic_ios/imbue
std::wfstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wfstream::tie =&gt; cpp/io/basic_ios/tie
std::wfstream::narrow =&gt; cpp/io/basic_ios/narrow
std::wfstream::widen =&gt; cpp/io/basic_ios/widen
std::wfstream::init =&gt; cpp/io/basic_ios/init
std::wfstream::move =&gt; cpp/io/basic_ios/move
std::wfstream::swap =&gt; cpp/io/basic_ios/swap
std::wfstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wfstream::flags =&gt; cpp/io/ios_base/flags
std::wfstream::setf =&gt; cpp/io/ios_base/setf
std::wfstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wfstream::precision =&gt; cpp/io/ios_base/precision
std::wfstream::width =&gt; cpp/io/ios_base/width
std::wfstream::imbue =&gt; cpp/io/ios_base/imbue
std::wfstream::getloc =&gt; cpp/io/ios_base/getloc
std::wfstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wfstream::iword =&gt; cpp/io/ios_base/iword
std::wfstream::pword =&gt; cpp/io/ios_base/pword
std::wfstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wfstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wfstream::failure =&gt; cpp/io/ios_base/failure
std::wfstream::failure::what =&gt; cpp/error/exception/what
std::wfstream::failure::failure =&gt; cpp/io/ios_base/failure
std::wfstream::openmode =&gt; cpp/io/ios_base/openmode
std::wfstream::app =&gt; cpp/io/ios_base/openmode
std::wfstream::binary =&gt; cpp/io/ios_base/openmode
std::wfstream::in =&gt; cpp/io/ios_base/openmode
std::wfstream::out =&gt; cpp/io/ios_base/openmode
std::wfstream::trunc =&gt; cpp/io/ios_base/openmode
std::wfstream::ate =&gt; cpp/io/ios_base/openmode
std::wfstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wfstream::dec =&gt; cpp/io/ios_base/fmtflags
std::wfstream::oct =&gt; cpp/io/ios_base/fmtflags
std::wfstream::hex =&gt; cpp/io/ios_base/fmtflags
std::wfstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wfstream::left =&gt; cpp/io/ios_base/fmtflags
std::wfstream::right =&gt; cpp/io/ios_base/fmtflags
std::wfstream::internal =&gt; cpp/io/ios_base/fmtflags
std::wfstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wfstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wfstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wfstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wfstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wfstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wfstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wfstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wfstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wfstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wfstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wfstream::iostate =&gt; cpp/io/ios_base/iostate
std::wfstream::goodbit =&gt; cpp/io/ios_base/iostate
std::wfstream::badbit =&gt; cpp/io/ios_base/iostate
std::wfstream::failbit =&gt; cpp/io/ios_base/iostate
std::wfstream::eofbit =&gt; cpp/io/ios_base/iostate
std::wfstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wfstream::beg =&gt; cpp/io/ios_base/seekdir
std::wfstream::cur =&gt; cpp/io/ios_base/seekdir
std::wfstream::end =&gt; cpp/io/ios_base/seekdir
std::wfstream::event =&gt; cpp/io/ios_base/event
std::wfstream::erase_event =&gt; cpp/io/ios_base/event
std::wfstream::imbue_event =&gt; cpp/io/ios_base/event
std::wfstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wfstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wfstream::Init =&gt; cpp/io/ios_base/Init
std::wfstream::wfstream =&gt; cpp/io/basic_fstream/basic_fstream
std::wfstream::operator= =&gt; cpp/io/basic_fstream/operator=
std::wfstream::swap =&gt; cpp/io/basic_fstream/swap
std::wfstream::rdbuf =&gt; cpp/io/basic_fstream/rdbuf
std::wfstream::is_open =&gt; cpp/io/basic_fstream/is_open
std::wfstream::open =&gt; cpp/io/basic_fstream/open
std::wfstream::close =&gt; cpp/io/basic_fstream/close
std::swap(std::wfstream) =&gt; cpp/io/basic_fstream/swap2
std::wistringstream =&gt; cpp/io/basic_istringstream
std::wistringstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::wistringstream::get =&gt; cpp/io/basic_istream/get
std::wistringstream::peek =&gt; cpp/io/basic_istream/peek
std::wistringstream::unget =&gt; cpp/io/basic_istream/unget
std::wistringstream::putback =&gt; cpp/io/basic_istream/putback
std::wistringstream::getline =&gt; cpp/io/basic_istream/getline
std::wistringstream::ignore =&gt; cpp/io/basic_istream/ignore
std::wistringstream::read =&gt; cpp/io/basic_istream/read
std::wistringstream::readsome =&gt; cpp/io/basic_istream/readsome
std::wistringstream::gcount =&gt; cpp/io/basic_istream/gcount
std::wistringstream::tellg =&gt; cpp/io/basic_istream/tellg
std::wistringstream::seekg =&gt; cpp/io/basic_istream/seekg
std::wistringstream::sync =&gt; cpp/io/basic_istream/sync
std::wistringstream::sentry =&gt; cpp/io/basic_istream/sentry
std::wistringstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::wistringstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::wistringstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::wistringstream::good =&gt; cpp/io/basic_ios/good
std::wistringstream::eof =&gt; cpp/io/basic_ios/eof
std::wistringstream::fail =&gt; cpp/io/basic_ios/fail
std::wistringstream::bad =&gt; cpp/io/basic_ios/bad
std::wistringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::wistringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wistringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wistringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::wistringstream::clear =&gt; cpp/io/basic_ios/clear
std::wistringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wistringstream::fill =&gt; cpp/io/basic_ios/fill
std::wistringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wistringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::wistringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wistringstream::tie =&gt; cpp/io/basic_ios/tie
std::wistringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::wistringstream::widen =&gt; cpp/io/basic_ios/widen
std::wistringstream::init =&gt; cpp/io/basic_ios/init
std::wistringstream::move =&gt; cpp/io/basic_ios/move
std::wistringstream::swap =&gt; cpp/io/basic_ios/swap
std::wistringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wistringstream::flags =&gt; cpp/io/ios_base/flags
std::wistringstream::setf =&gt; cpp/io/ios_base/setf
std::wistringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wistringstream::precision =&gt; cpp/io/ios_base/precision
std::wistringstream::width =&gt; cpp/io/ios_base/width
std::wistringstream::imbue =&gt; cpp/io/ios_base/imbue
std::wistringstream::getloc =&gt; cpp/io/ios_base/getloc
std::wistringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wistringstream::iword =&gt; cpp/io/ios_base/iword
std::wistringstream::pword =&gt; cpp/io/ios_base/pword
std::wistringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wistringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wistringstream::failure =&gt; cpp/io/ios_base/failure
std::wistringstream::failure::what =&gt; cpp/error/exception/what
std::wistringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::wistringstream::openmode =&gt; cpp/io/ios_base/openmode
std::wistringstream::app =&gt; cpp/io/ios_base/openmode
std::wistringstream::binary =&gt; cpp/io/ios_base/openmode
std::wistringstream::in =&gt; cpp/io/ios_base/openmode
std::wistringstream::out =&gt; cpp/io/ios_base/openmode
std::wistringstream::trunc =&gt; cpp/io/ios_base/openmode
std::wistringstream::ate =&gt; cpp/io/ios_base/openmode
std::wistringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::left =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::right =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wistringstream::iostate =&gt; cpp/io/ios_base/iostate
std::wistringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::wistringstream::badbit =&gt; cpp/io/ios_base/iostate
std::wistringstream::failbit =&gt; cpp/io/ios_base/iostate
std::wistringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::wistringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wistringstream::beg =&gt; cpp/io/ios_base/seekdir
std::wistringstream::cur =&gt; cpp/io/ios_base/seekdir
std::wistringstream::end =&gt; cpp/io/ios_base/seekdir
std::wistringstream::event =&gt; cpp/io/ios_base/event
std::wistringstream::erase_event =&gt; cpp/io/ios_base/event
std::wistringstream::imbue_event =&gt; cpp/io/ios_base/event
std::wistringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wistringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wistringstream::Init =&gt; cpp/io/ios_base/Init
std::wistringstream::wistringstream =&gt; cpp/io/basic_istringstream/basic_istringstream
std::wistringstream::operator= =&gt; cpp/io/basic_istringstream/operator=
std::wistringstream::swap =&gt; cpp/io/basic_istringstream/swap
std::wistringstream::rdbuf =&gt; cpp/io/basic_istringstream/rdbuf
std::wistringstream::str =&gt; cpp/io/basic_istringstream/str
std::swap(std::wistringstream) =&gt; cpp/io/basic_istringstream/swap2
std::wostringstream =&gt; cpp/io/basic_ostringstream
std::wostringstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::wostringstream::put =&gt; cpp/io/basic_ostream/put
std::wostringstream::write =&gt; cpp/io/basic_ostream/write
std::wostringstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::wostringstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::wostringstream::flush =&gt; cpp/io/basic_ostream/flush
std::wostringstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::wostringstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::wostringstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::wostringstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::wostringstream::good =&gt; cpp/io/basic_ios/good
std::wostringstream::eof =&gt; cpp/io/basic_ios/eof
std::wostringstream::fail =&gt; cpp/io/basic_ios/fail
std::wostringstream::bad =&gt; cpp/io/basic_ios/bad
std::wostringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::wostringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wostringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wostringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::wostringstream::clear =&gt; cpp/io/basic_ios/clear
std::wostringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wostringstream::fill =&gt; cpp/io/basic_ios/fill
std::wostringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wostringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::wostringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wostringstream::tie =&gt; cpp/io/basic_ios/tie
std::wostringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::wostringstream::widen =&gt; cpp/io/basic_ios/widen
std::wostringstream::init =&gt; cpp/io/basic_ios/init
std::wostringstream::move =&gt; cpp/io/basic_ios/move
std::wostringstream::swap =&gt; cpp/io/basic_ios/swap
std::wostringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wostringstream::flags =&gt; cpp/io/ios_base/flags
std::wostringstream::setf =&gt; cpp/io/ios_base/setf
std::wostringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wostringstream::precision =&gt; cpp/io/ios_base/precision
std::wostringstream::width =&gt; cpp/io/ios_base/width
std::wostringstream::imbue =&gt; cpp/io/ios_base/imbue
std::wostringstream::getloc =&gt; cpp/io/ios_base/getloc
std::wostringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wostringstream::iword =&gt; cpp/io/ios_base/iword
std::wostringstream::pword =&gt; cpp/io/ios_base/pword
std::wostringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wostringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wostringstream::failure =&gt; cpp/io/ios_base/failure
std::wostringstream::failure::what =&gt; cpp/error/exception/what
std::wostringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::wostringstream::openmode =&gt; cpp/io/ios_base/openmode
std::wostringstream::app =&gt; cpp/io/ios_base/openmode
std::wostringstream::binary =&gt; cpp/io/ios_base/openmode
std::wostringstream::in =&gt; cpp/io/ios_base/openmode
std::wostringstream::out =&gt; cpp/io/ios_base/openmode
std::wostringstream::trunc =&gt; cpp/io/ios_base/openmode
std::wostringstream::ate =&gt; cpp/io/ios_base/openmode
std::wostringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::left =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::right =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wostringstream::iostate =&gt; cpp/io/ios_base/iostate
std::wostringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::wostringstream::badbit =&gt; cpp/io/ios_base/iostate
std::wostringstream::failbit =&gt; cpp/io/ios_base/iostate
std::wostringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::wostringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wostringstream::beg =&gt; cpp/io/ios_base/seekdir
std::wostringstream::cur =&gt; cpp/io/ios_base/seekdir
std::wostringstream::end =&gt; cpp/io/ios_base/seekdir
std::wostringstream::event =&gt; cpp/io/ios_base/event
std::wostringstream::erase_event =&gt; cpp/io/ios_base/event
std::wostringstream::imbue_event =&gt; cpp/io/ios_base/event
std::wostringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wostringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wostringstream::Init =&gt; cpp/io/ios_base/Init
std::wostringstream::wostringstream =&gt; cpp/io/basic_ostringstream/basic_ostringstream
std::wostringstream::operator= =&gt; cpp/io/basic_ostringstream/operator=
std::wostringstream::swap =&gt; cpp/io/basic_ostringstream/swap
std::wostringstream::rdbuf =&gt; cpp/io/basic_ostringstream/rdbuf
std::wostringstream::str =&gt; cpp/io/basic_ostringstream/str
std::swap(std::wostringstream) =&gt; cpp/io/basic_ostringstream/swap2
std::wstringstream =&gt; cpp/io/basic_stringstream
std::wstringstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::wstringstream::get =&gt; cpp/io/basic_istream/get
std::wstringstream::peek =&gt; cpp/io/basic_istream/peek
std::wstringstream::unget =&gt; cpp/io/basic_istream/unget
std::wstringstream::putback =&gt; cpp/io/basic_istream/putback
std::wstringstream::getline =&gt; cpp/io/basic_istream/getline
std::wstringstream::ignore =&gt; cpp/io/basic_istream/ignore
std::wstringstream::read =&gt; cpp/io/basic_istream/read
std::wstringstream::readsome =&gt; cpp/io/basic_istream/readsome
std::wstringstream::gcount =&gt; cpp/io/basic_istream/gcount
std::wstringstream::tellg =&gt; cpp/io/basic_istream/tellg
std::wstringstream::seekg =&gt; cpp/io/basic_istream/seekg
std::wstringstream::sync =&gt; cpp/io/basic_istream/sync
std::wstringstream::sentry =&gt; cpp/io/basic_istream/sentry
std::wstringstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::wstringstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::wstringstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::wstringstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::wstringstream::put =&gt; cpp/io/basic_ostream/put
std::wstringstream::write =&gt; cpp/io/basic_ostream/write
std::wstringstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::wstringstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::wstringstream::flush =&gt; cpp/io/basic_ostream/flush
std::wstringstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::wstringstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::wstringstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::wstringstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::wstringstream::good =&gt; cpp/io/basic_ios/good
std::wstringstream::eof =&gt; cpp/io/basic_ios/eof
std::wstringstream::fail =&gt; cpp/io/basic_ios/fail
std::wstringstream::bad =&gt; cpp/io/basic_ios/bad
std::wstringstream::operator! =&gt; cpp/io/basic_ios/operator!
std::wstringstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::wstringstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::wstringstream::setstate =&gt; cpp/io/basic_ios/setstate
std::wstringstream::clear =&gt; cpp/io/basic_ios/clear
std::wstringstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::wstringstream::fill =&gt; cpp/io/basic_ios/fill
std::wstringstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::wstringstream::imbue =&gt; cpp/io/basic_ios/imbue
std::wstringstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::wstringstream::tie =&gt; cpp/io/basic_ios/tie
std::wstringstream::narrow =&gt; cpp/io/basic_ios/narrow
std::wstringstream::widen =&gt; cpp/io/basic_ios/widen
std::wstringstream::init =&gt; cpp/io/basic_ios/init
std::wstringstream::move =&gt; cpp/io/basic_ios/move
std::wstringstream::swap =&gt; cpp/io/basic_ios/swap
std::wstringstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::wstringstream::flags =&gt; cpp/io/ios_base/flags
std::wstringstream::setf =&gt; cpp/io/ios_base/setf
std::wstringstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::wstringstream::precision =&gt; cpp/io/ios_base/precision
std::wstringstream::width =&gt; cpp/io/ios_base/width
std::wstringstream::imbue =&gt; cpp/io/ios_base/imbue
std::wstringstream::getloc =&gt; cpp/io/ios_base/getloc
std::wstringstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::wstringstream::iword =&gt; cpp/io/ios_base/iword
std::wstringstream::pword =&gt; cpp/io/ios_base/pword
std::wstringstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::wstringstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::wstringstream::failure =&gt; cpp/io/ios_base/failure
std::wstringstream::failure::what =&gt; cpp/error/exception/what
std::wstringstream::failure::failure =&gt; cpp/io/ios_base/failure
std::wstringstream::openmode =&gt; cpp/io/ios_base/openmode
std::wstringstream::app =&gt; cpp/io/ios_base/openmode
std::wstringstream::binary =&gt; cpp/io/ios_base/openmode
std::wstringstream::in =&gt; cpp/io/ios_base/openmode
std::wstringstream::out =&gt; cpp/io/ios_base/openmode
std::wstringstream::trunc =&gt; cpp/io/ios_base/openmode
std::wstringstream::ate =&gt; cpp/io/ios_base/openmode
std::wstringstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::dec =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::oct =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::hex =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::left =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::right =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::internal =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::wstringstream::iostate =&gt; cpp/io/ios_base/iostate
std::wstringstream::goodbit =&gt; cpp/io/ios_base/iostate
std::wstringstream::badbit =&gt; cpp/io/ios_base/iostate
std::wstringstream::failbit =&gt; cpp/io/ios_base/iostate
std::wstringstream::eofbit =&gt; cpp/io/ios_base/iostate
std::wstringstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::wstringstream::beg =&gt; cpp/io/ios_base/seekdir
std::wstringstream::cur =&gt; cpp/io/ios_base/seekdir
std::wstringstream::end =&gt; cpp/io/ios_base/seekdir
std::wstringstream::event =&gt; cpp/io/ios_base/event
std::wstringstream::erase_event =&gt; cpp/io/ios_base/event
std::wstringstream::imbue_event =&gt; cpp/io/ios_base/event
std::wstringstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::wstringstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::wstringstream::Init =&gt; cpp/io/ios_base/Init
std::wstringstream::wstringstream =&gt; cpp/io/basic_stringstream/basic_stringstream
std::wstringstream::operator= =&gt; cpp/io/basic_stringstream/operator=
std::wstringstream::swap =&gt; cpp/io/basic_stringstream/swap
std::wstringstream::rdbuf =&gt; cpp/io/basic_stringstream/rdbuf
std::wstringstream::str =&gt; cpp/io/basic_stringstream/str
std::swap(std::wstringstream) =&gt; cpp/io/basic_stringstream/swap2
std::strstreambuf =&gt; cpp/io/strstreambuf
std::strstreambuf::pubimbue =&gt; cpp/io/basic_streambuf/pubimbue
std::strstreambuf::getloc =&gt; cpp/io/basic_streambuf/getloc
std::strstreambuf::pubsetbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::strstreambuf::pubseekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::strstreambuf::pubseekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::strstreambuf::pubsync =&gt; cpp/io/basic_streambuf/pubsync
std::strstreambuf::in_avail =&gt; cpp/io/basic_streambuf/in_avail
std::strstreambuf::snextc =&gt; cpp/io/basic_streambuf/snextc
std::strstreambuf::sbumpc =&gt; cpp/io/basic_streambuf/sbumpc
std::strstreambuf::sgetc =&gt; cpp/io/basic_streambuf/sgetc
std::strstreambuf::sgetn =&gt; cpp/io/basic_streambuf/sgetn
std::strstreambuf::sputc =&gt; cpp/io/basic_streambuf/sputc
std::strstreambuf::sputn =&gt; cpp/io/basic_streambuf/sputn
std::strstreambuf::sputbackc =&gt; cpp/io/basic_streambuf/sputbackc
std::strstreambuf::sungetc =&gt; cpp/io/basic_streambuf/sungetc
std::strstreambuf::swap =&gt; cpp/io/basic_streambuf/swap
std::strstreambuf::imbue =&gt; cpp/io/basic_streambuf/pubimbue
std::strstreambuf::setbuf =&gt; cpp/io/basic_streambuf/pubsetbuf
std::strstreambuf::seekoff =&gt; cpp/io/basic_streambuf/pubseekoff
std::strstreambuf::seekpos =&gt; cpp/io/basic_streambuf/pubseekpos
std::strstreambuf::sync =&gt; cpp/io/basic_streambuf/pubsync
std::strstreambuf::showmanyc =&gt; cpp/io/basic_streambuf/showmanyc
std::strstreambuf::underflow =&gt; cpp/io/basic_streambuf/underflow
std::strstreambuf::uflow =&gt; cpp/io/basic_streambuf/uflow
std::strstreambuf::xsgetn =&gt; cpp/io/basic_streambuf/sgetn
std::strstreambuf::eback =&gt; cpp/io/basic_streambuf/gptr
std::strstreambuf::gptr =&gt; cpp/io/basic_streambuf/gptr
std::strstreambuf::egptr =&gt; cpp/io/basic_streambuf/gptr
std::strstreambuf::gbump =&gt; cpp/io/basic_streambuf/gbump
std::strstreambuf::setg =&gt; cpp/io/basic_streambuf/setg
std::strstreambuf::xsputn =&gt; cpp/io/basic_streambuf/sputn
std::strstreambuf::overflow =&gt; cpp/io/basic_streambuf/overflow
std::strstreambuf::pbase =&gt; cpp/io/basic_streambuf/pptr
std::strstreambuf::pptr =&gt; cpp/io/basic_streambuf/pptr
std::strstreambuf::epptr =&gt; cpp/io/basic_streambuf/pptr
std::strstreambuf::pbump =&gt; cpp/io/basic_streambuf/pbump
std::strstreambuf::setp =&gt; cpp/io/basic_streambuf/setp
std::strstreambuf::pbackfail =&gt; cpp/io/basic_streambuf/pbackfail
std::strstreambuf::strstreambuf =&gt; cpp/io/strstreambuf/strstreambuf
std::strstreambuf::~strstreambuf =&gt; cpp/io/strstreambuf/~strstreambuf
std::strstreambuf::freeze =&gt; cpp/io/strstreambuf/freeze
std::strstreambuf::str =&gt; cpp/io/strstreambuf/str
std::strstreambuf::pcount =&gt; cpp/io/strstreambuf/pcount
std::strstreambuf::underflow =&gt; cpp/io/strstreambuf/underflow
std::strstreambuf::pbackfail =&gt; cpp/io/strstreambuf/pbackfail
std::strstreambuf::overflow =&gt; cpp/io/strstreambuf/overflow
std::strstreambuf::setbuf =&gt; cpp/io/strstreambuf/setbuf
std::strstreambuf::seekoff =&gt; cpp/io/strstreambuf/seekoff
std::strstreambuf::seekpos =&gt; cpp/io/strstreambuf/seekpos
std::istrstream =&gt; cpp/io/istrstream
std::istrstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::istrstream::get =&gt; cpp/io/basic_istream/get
std::istrstream::peek =&gt; cpp/io/basic_istream/peek
std::istrstream::unget =&gt; cpp/io/basic_istream/unget
std::istrstream::putback =&gt; cpp/io/basic_istream/putback
std::istrstream::getline =&gt; cpp/io/basic_istream/getline
std::istrstream::ignore =&gt; cpp/io/basic_istream/ignore
std::istrstream::read =&gt; cpp/io/basic_istream/read
std::istrstream::readsome =&gt; cpp/io/basic_istream/readsome
std::istrstream::gcount =&gt; cpp/io/basic_istream/gcount
std::istrstream::tellg =&gt; cpp/io/basic_istream/tellg
std::istrstream::seekg =&gt; cpp/io/basic_istream/seekg
std::istrstream::sync =&gt; cpp/io/basic_istream/sync
std::istrstream::sentry =&gt; cpp/io/basic_istream/sentry
std::istrstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::istrstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::istrstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::istrstream::good =&gt; cpp/io/basic_ios/good
std::istrstream::eof =&gt; cpp/io/basic_ios/eof
std::istrstream::fail =&gt; cpp/io/basic_ios/fail
std::istrstream::bad =&gt; cpp/io/basic_ios/bad
std::istrstream::operator! =&gt; cpp/io/basic_ios/operator!
std::istrstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::istrstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::istrstream::setstate =&gt; cpp/io/basic_ios/setstate
std::istrstream::clear =&gt; cpp/io/basic_ios/clear
std::istrstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::istrstream::fill =&gt; cpp/io/basic_ios/fill
std::istrstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::istrstream::imbue =&gt; cpp/io/basic_ios/imbue
std::istrstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::istrstream::tie =&gt; cpp/io/basic_ios/tie
std::istrstream::narrow =&gt; cpp/io/basic_ios/narrow
std::istrstream::widen =&gt; cpp/io/basic_ios/widen
std::istrstream::init =&gt; cpp/io/basic_ios/init
std::istrstream::move =&gt; cpp/io/basic_ios/move
std::istrstream::swap =&gt; cpp/io/basic_ios/swap
std::istrstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::istrstream::flags =&gt; cpp/io/ios_base/flags
std::istrstream::setf =&gt; cpp/io/ios_base/setf
std::istrstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::istrstream::precision =&gt; cpp/io/ios_base/precision
std::istrstream::width =&gt; cpp/io/ios_base/width
std::istrstream::imbue =&gt; cpp/io/ios_base/imbue
std::istrstream::getloc =&gt; cpp/io/ios_base/getloc
std::istrstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::istrstream::iword =&gt; cpp/io/ios_base/iword
std::istrstream::pword =&gt; cpp/io/ios_base/pword
std::istrstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::istrstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::istrstream::failure =&gt; cpp/io/ios_base/failure
std::istrstream::failure::what =&gt; cpp/error/exception/what
std::istrstream::failure::failure =&gt; cpp/io/ios_base/failure
std::istrstream::openmode =&gt; cpp/io/ios_base/openmode
std::istrstream::app =&gt; cpp/io/ios_base/openmode
std::istrstream::binary =&gt; cpp/io/ios_base/openmode
std::istrstream::in =&gt; cpp/io/ios_base/openmode
std::istrstream::out =&gt; cpp/io/ios_base/openmode
std::istrstream::trunc =&gt; cpp/io/ios_base/openmode
std::istrstream::ate =&gt; cpp/io/ios_base/openmode
std::istrstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::istrstream::dec =&gt; cpp/io/ios_base/fmtflags
std::istrstream::oct =&gt; cpp/io/ios_base/fmtflags
std::istrstream::hex =&gt; cpp/io/ios_base/fmtflags
std::istrstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::istrstream::left =&gt; cpp/io/ios_base/fmtflags
std::istrstream::right =&gt; cpp/io/ios_base/fmtflags
std::istrstream::internal =&gt; cpp/io/ios_base/fmtflags
std::istrstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::istrstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::istrstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::istrstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::istrstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::istrstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::istrstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::istrstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::istrstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::istrstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::istrstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::istrstream::iostate =&gt; cpp/io/ios_base/iostate
std::istrstream::goodbit =&gt; cpp/io/ios_base/iostate
std::istrstream::badbit =&gt; cpp/io/ios_base/iostate
std::istrstream::failbit =&gt; cpp/io/ios_base/iostate
std::istrstream::eofbit =&gt; cpp/io/ios_base/iostate
std::istrstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::istrstream::beg =&gt; cpp/io/ios_base/seekdir
std::istrstream::cur =&gt; cpp/io/ios_base/seekdir
std::istrstream::end =&gt; cpp/io/ios_base/seekdir
std::istrstream::event =&gt; cpp/io/ios_base/event
std::istrstream::erase_event =&gt; cpp/io/ios_base/event
std::istrstream::imbue_event =&gt; cpp/io/ios_base/event
std::istrstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::istrstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::istrstream::Init =&gt; cpp/io/ios_base/Init
std::istrstream::istrstream =&gt; cpp/io/istrstream/istrstream
std::istrstream::~istrstream =&gt; cpp/io/istrstream/~istrstream
std::istrstream::rdbuf =&gt; cpp/io/istrstream/rdbuf
std::istrstream::str =&gt; cpp/io/istrstream/str
std::ostrstream =&gt; cpp/io/ostrstream
std::ostrstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::ostrstream::put =&gt; cpp/io/basic_ostream/put
std::ostrstream::write =&gt; cpp/io/basic_ostream/write
std::ostrstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::ostrstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::ostrstream::flush =&gt; cpp/io/basic_ostream/flush
std::ostrstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::ostrstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::ostrstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::ostrstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::ostrstream::good =&gt; cpp/io/basic_ios/good
std::ostrstream::eof =&gt; cpp/io/basic_ios/eof
std::ostrstream::fail =&gt; cpp/io/basic_ios/fail
std::ostrstream::bad =&gt; cpp/io/basic_ios/bad
std::ostrstream::operator! =&gt; cpp/io/basic_ios/operator!
std::ostrstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::ostrstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::ostrstream::setstate =&gt; cpp/io/basic_ios/setstate
std::ostrstream::clear =&gt; cpp/io/basic_ios/clear
std::ostrstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::ostrstream::fill =&gt; cpp/io/basic_ios/fill
std::ostrstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::ostrstream::imbue =&gt; cpp/io/basic_ios/imbue
std::ostrstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::ostrstream::tie =&gt; cpp/io/basic_ios/tie
std::ostrstream::narrow =&gt; cpp/io/basic_ios/narrow
std::ostrstream::widen =&gt; cpp/io/basic_ios/widen
std::ostrstream::init =&gt; cpp/io/basic_ios/init
std::ostrstream::move =&gt; cpp/io/basic_ios/move
std::ostrstream::swap =&gt; cpp/io/basic_ios/swap
std::ostrstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::ostrstream::flags =&gt; cpp/io/ios_base/flags
std::ostrstream::setf =&gt; cpp/io/ios_base/setf
std::ostrstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::ostrstream::precision =&gt; cpp/io/ios_base/precision
std::ostrstream::width =&gt; cpp/io/ios_base/width
std::ostrstream::imbue =&gt; cpp/io/ios_base/imbue
std::ostrstream::getloc =&gt; cpp/io/ios_base/getloc
std::ostrstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::ostrstream::iword =&gt; cpp/io/ios_base/iword
std::ostrstream::pword =&gt; cpp/io/ios_base/pword
std::ostrstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::ostrstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::ostrstream::failure =&gt; cpp/io/ios_base/failure
std::ostrstream::failure::what =&gt; cpp/error/exception/what
std::ostrstream::failure::failure =&gt; cpp/io/ios_base/failure
std::ostrstream::openmode =&gt; cpp/io/ios_base/openmode
std::ostrstream::app =&gt; cpp/io/ios_base/openmode
std::ostrstream::binary =&gt; cpp/io/ios_base/openmode
std::ostrstream::in =&gt; cpp/io/ios_base/openmode
std::ostrstream::out =&gt; cpp/io/ios_base/openmode
std::ostrstream::trunc =&gt; cpp/io/ios_base/openmode
std::ostrstream::ate =&gt; cpp/io/ios_base/openmode
std::ostrstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::dec =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::oct =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::hex =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::left =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::right =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::internal =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::ostrstream::iostate =&gt; cpp/io/ios_base/iostate
std::ostrstream::goodbit =&gt; cpp/io/ios_base/iostate
std::ostrstream::badbit =&gt; cpp/io/ios_base/iostate
std::ostrstream::failbit =&gt; cpp/io/ios_base/iostate
std::ostrstream::eofbit =&gt; cpp/io/ios_base/iostate
std::ostrstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::ostrstream::beg =&gt; cpp/io/ios_base/seekdir
std::ostrstream::cur =&gt; cpp/io/ios_base/seekdir
std::ostrstream::end =&gt; cpp/io/ios_base/seekdir
std::ostrstream::event =&gt; cpp/io/ios_base/event
std::ostrstream::erase_event =&gt; cpp/io/ios_base/event
std::ostrstream::imbue_event =&gt; cpp/io/ios_base/event
std::ostrstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::ostrstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::ostrstream::Init =&gt; cpp/io/ios_base/Init
std::ostrstream::ostrstream =&gt; cpp/io/ostrstream/ostrstream
std::ostrstream::~ostrstream =&gt; cpp/io/ostrstream/~ostrstream
std::ostrstream::rdbuf =&gt; cpp/io/ostrstream/rdbuf
std::ostrstream::str =&gt; cpp/io/ostrstream/str
std::ostrstream::freeze =&gt; cpp/io/ostrstream/freeze
std::ostrstream::pcount =&gt; cpp/io/ostrstream/pcount
std::strstream =&gt; cpp/io/strstream
std::strstream::operator&gt;&gt; =&gt; cpp/io/basic_istream/operator_gtgt
std::strstream::get =&gt; cpp/io/basic_istream/get
std::strstream::peek =&gt; cpp/io/basic_istream/peek
std::strstream::unget =&gt; cpp/io/basic_istream/unget
std::strstream::putback =&gt; cpp/io/basic_istream/putback
std::strstream::getline =&gt; cpp/io/basic_istream/getline
std::strstream::ignore =&gt; cpp/io/basic_istream/ignore
std::strstream::read =&gt; cpp/io/basic_istream/read
std::strstream::readsome =&gt; cpp/io/basic_istream/readsome
std::strstream::gcount =&gt; cpp/io/basic_istream/gcount
std::strstream::tellg =&gt; cpp/io/basic_istream/tellg
std::strstream::seekg =&gt; cpp/io/basic_istream/seekg
std::strstream::sync =&gt; cpp/io/basic_istream/sync
std::strstream::sentry =&gt; cpp/io/basic_istream/sentry
std::strstream::sentry::sentry =&gt; cpp/io/basic_istream/sentry
std::strstream::sentry::~sentry =&gt; cpp/io/basic_istream/sentry
std::strstream::sentry::operator bool =&gt; cpp/io/basic_istream/sentry
std::strstream::operator&lt;&lt; =&gt; cpp/io/basic_ostream/operator_ltlt
std::strstream::put =&gt; cpp/io/basic_ostream/put
std::strstream::write =&gt; cpp/io/basic_ostream/write
std::strstream::tellp =&gt; cpp/io/basic_ostream/tellp
std::strstream::seekp =&gt; cpp/io/basic_ostream/seekp
std::strstream::flush =&gt; cpp/io/basic_ostream/flush
std::strstream::sentry =&gt; cpp/io/basic_ostream/sentry
std::strstream::sentry::sentry =&gt; cpp/io/basic_ostream/sentry
std::strstream::sentry::~sentry =&gt; cpp/io/basic_ostream/sentry
std::strstream::sentry::operator bool =&gt; cpp/io/basic_ostream/sentry
std::strstream::good =&gt; cpp/io/basic_ios/good
std::strstream::eof =&gt; cpp/io/basic_ios/eof
std::strstream::fail =&gt; cpp/io/basic_ios/fail
std::strstream::bad =&gt; cpp/io/basic_ios/bad
std::strstream::operator! =&gt; cpp/io/basic_ios/operator!
std::strstream::operator bool =&gt; cpp/io/basic_ios/operator_bool
std::strstream::rdstate =&gt; cpp/io/basic_ios/rdstate
std::strstream::setstate =&gt; cpp/io/basic_ios/setstate
std::strstream::clear =&gt; cpp/io/basic_ios/clear
std::strstream::copyfmt =&gt; cpp/io/basic_ios/copyfmt
std::strstream::fill =&gt; cpp/io/basic_ios/fill
std::strstream::exceptions =&gt; cpp/io/basic_ios/exceptions
std::strstream::imbue =&gt; cpp/io/basic_ios/imbue
std::strstream::rdbuf =&gt; cpp/io/basic_ios/rdbuf
std::strstream::tie =&gt; cpp/io/basic_ios/tie
std::strstream::narrow =&gt; cpp/io/basic_ios/narrow
std::strstream::widen =&gt; cpp/io/basic_ios/widen
std::strstream::init =&gt; cpp/io/basic_ios/init
std::strstream::move =&gt; cpp/io/basic_ios/move
std::strstream::swap =&gt; cpp/io/basic_ios/swap
std::strstream::set_rdbuf =&gt; cpp/io/basic_ios/set_rdbuf
std::strstream::flags =&gt; cpp/io/ios_base/flags
std::strstream::setf =&gt; cpp/io/ios_base/setf
std::strstream::unsetf =&gt; cpp/io/ios_base/unsetf
std::strstream::precision =&gt; cpp/io/ios_base/precision
std::strstream::width =&gt; cpp/io/ios_base/width
std::strstream::imbue =&gt; cpp/io/ios_base/imbue
std::strstream::getloc =&gt; cpp/io/ios_base/getloc
std::strstream::xalloc =&gt; cpp/io/ios_base/xalloc
std::strstream::iword =&gt; cpp/io/ios_base/iword
std::strstream::pword =&gt; cpp/io/ios_base/pword
std::strstream::register_callback =&gt; cpp/io/ios_base/register_callback
std::strstream::sync_with_stdio =&gt; cpp/io/ios_base/sync_with_stdio
std::strstream::failure =&gt; cpp/io/ios_base/failure
std::strstream::failure::what =&gt; cpp/error/exception/what
std::strstream::failure::failure =&gt; cpp/io/ios_base/failure
std::strstream::openmode =&gt; cpp/io/ios_base/openmode
std::strstream::app =&gt; cpp/io/ios_base/openmode
std::strstream::binary =&gt; cpp/io/ios_base/openmode
std::strstream::in =&gt; cpp/io/ios_base/openmode
std::strstream::out =&gt; cpp/io/ios_base/openmode
std::strstream::trunc =&gt; cpp/io/ios_base/openmode
std::strstream::ate =&gt; cpp/io/ios_base/openmode
std::strstream::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::strstream::dec =&gt; cpp/io/ios_base/fmtflags
std::strstream::oct =&gt; cpp/io/ios_base/fmtflags
std::strstream::hex =&gt; cpp/io/ios_base/fmtflags
std::strstream::basefield =&gt; cpp/io/ios_base/fmtflags
std::strstream::left =&gt; cpp/io/ios_base/fmtflags
std::strstream::right =&gt; cpp/io/ios_base/fmtflags
std::strstream::internal =&gt; cpp/io/ios_base/fmtflags
std::strstream::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::strstream::scientific =&gt; cpp/io/ios_base/fmtflags
std::strstream::fixed =&gt; cpp/io/ios_base/fmtflags
std::strstream::floatfield =&gt; cpp/io/ios_base/fmtflags
std::strstream::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::strstream::showbase =&gt; cpp/io/ios_base/fmtflags
std::strstream::showpoint =&gt; cpp/io/ios_base/fmtflags
std::strstream::showpos =&gt; cpp/io/ios_base/fmtflags
std::strstream::skipws =&gt; cpp/io/ios_base/fmtflags
std::strstream::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::strstream::uppercase =&gt; cpp/io/ios_base/fmtflags
std::strstream::iostate =&gt; cpp/io/ios_base/iostate
std::strstream::goodbit =&gt; cpp/io/ios_base/iostate
std::strstream::badbit =&gt; cpp/io/ios_base/iostate
std::strstream::failbit =&gt; cpp/io/ios_base/iostate
std::strstream::eofbit =&gt; cpp/io/ios_base/iostate
std::strstream::seekdir =&gt; cpp/io/ios_base/seekdir
std::strstream::beg =&gt; cpp/io/ios_base/seekdir
std::strstream::cur =&gt; cpp/io/ios_base/seekdir
std::strstream::end =&gt; cpp/io/ios_base/seekdir
std::strstream::event =&gt; cpp/io/ios_base/event
std::strstream::erase_event =&gt; cpp/io/ios_base/event
std::strstream::imbue_event =&gt; cpp/io/ios_base/event
std::strstream::copyfmt_event =&gt; cpp/io/ios_base/event
std::strstream::event_callback =&gt; cpp/io/ios_base/event_callback
std::strstream::Init =&gt; cpp/io/ios_base/Init
std::strstream::strstream =&gt; cpp/io/strstream/strstream
std::strstream::~strstream =&gt; cpp/io/strstream/~strstream
std::strstream::rdbuf =&gt; cpp/io/strstream/rdbuf
std::strstream::str =&gt; cpp/io/strstream/str
std::strstream::freeze =&gt; cpp/io/strstream/freeze
std::strstream::pcount =&gt; cpp/io/strstream/pcount
std::cin =&gt; cpp/io/cin
std::wcin =&gt; cpp/io/cin
std::cout =&gt; cpp/io/cout
std::wcout =&gt; cpp/io/cout
std::cerr =&gt; cpp/io/cerr
std::wcerr =&gt; cpp/io/cerr
std::clog =&gt; cpp/io/clog
std::wclog =&gt; cpp/io/clog
std::boolalpha =&gt; cpp/io/manip/boolalpha
std::noboolalpha =&gt; cpp/io/manip/boolalpha
std::showbase =&gt; cpp/io/manip/showbase
std::noshowbase =&gt; cpp/io/manip/showbase
std::showpoint =&gt; cpp/io/manip/showpoint
std::noshowpoint =&gt; cpp/io/manip/showpoint
std::showpos =&gt; cpp/io/manip/showpos
std::noshowpos =&gt; cpp/io/manip/showpos
std::skipws =&gt; cpp/io/manip/skipws
std::noskipws =&gt; cpp/io/manip/skipws
std::uppercase =&gt; cpp/io/manip/uppercase
std::nouppercase =&gt; cpp/io/manip/uppercase
std::unitbuf =&gt; cpp/io/manip/unitbuf
std::nounitbuf =&gt; cpp/io/manip/unitbuf
std::internal =&gt; cpp/io/manip/left
std::left =&gt; cpp/io/manip/left
std::right =&gt; cpp/io/manip/left
std::dec =&gt; cpp/io/manip/hex
std::hex =&gt; cpp/io/manip/hex
std::oct =&gt; cpp/io/manip/hex
std::fixed =&gt; cpp/io/manip/fixed
std::scientific =&gt; cpp/io/manip/fixed
std::hexfloat =&gt; cpp/io/manip/fixed
std::defaultfloat =&gt; cpp/io/manip/fixed
std::ws =&gt; cpp/io/manip/ws
std::ends =&gt; cpp/io/manip/ends
std::flush =&gt; cpp/io/manip/flush
std::endl =&gt; cpp/io/manip/endl
std::resetiosflags =&gt; cpp/io/manip/resetiosflags
std::setiosflags =&gt; cpp/io/manip/setiosflags
std::setbase =&gt; cpp/io/manip/setbase
std::setfill =&gt; cpp/io/manip/setfill
std::setprecision =&gt; cpp/io/manip/setprecision
std::setw =&gt; cpp/io/manip/setw
std::get_money =&gt; cpp/io/manip/get_money
std::put_money =&gt; cpp/io/manip/put_money
std::get_time =&gt; cpp/io/manip/get_time
std::put_time =&gt; cpp/io/manip/put_time
std::quoted =&gt; cpp/io/manip/quoted
std::streamoff =&gt; cpp/io/streamoff
std::streamsize =&gt; cpp/io/streamsize
std::fpos =&gt; cpp/io/fpos
std::fpos::state =&gt; cpp/io/fpos/state
std::streampos =&gt; cpp/io/fpos
std::streampos::state =&gt; cpp/io/fpos/state
std::u16streampos =&gt; cpp/io/fpos
std::u16streampos::state =&gt; cpp/io/fpos/state
std::u32streampos =&gt; cpp/io/fpos
std::u32streampos::state =&gt; cpp/io/fpos/state
std::wstreampos =&gt; cpp/io/fpos
std::wstreampos::state =&gt; cpp/io/fpos/state
std::io_errc =&gt; cpp/io/io_errc
std::io_errc::stream =&gt; cpp/io/io_errc
std::is_error_code_enum&lt;std::io_errc&gt; =&gt; cpp/io/io_errc/is_error_code_enum
std::make_error_code(std::io_errc) =&gt; cpp/io/io_errc/make_error_code
std::make_error_condition(std::io_errc) =&gt; cpp/io/io_errc/make_error_condition
std::iostream_category =&gt; cpp/io/iostream_category
std::fopen =&gt; cpp/io/c/fopen
std::freopen =&gt; cpp/io/c/freopen
std::fflush =&gt; cpp/io/c/fflush
std::fclose =&gt; cpp/io/c/fclose
std::setbuf =&gt; cpp/io/c/setbuf
std::setvbuf =&gt; cpp/io/c/setvbuf
std::fread =&gt; cpp/io/c/fread
std::fwrite =&gt; cpp/io/c/fwrite
std::fgetc =&gt; cpp/io/c/fgetc
std::getc =&gt; cpp/io/c/fgetc
std::fgets =&gt; cpp/io/c/fgets
std::fputc =&gt; cpp/io/c/fputc
std::putc =&gt; cpp/io/c/fputc
std::fputs =&gt; cpp/io/c/fputs
std::getchar =&gt; cpp/io/c/getchar
std::gets =&gt; cpp/io/c/gets
std::putchar =&gt; cpp/io/c/putchar
std::puts =&gt; cpp/io/c/puts
std::ungetc =&gt; cpp/io/c/ungetc
std::fgetwc =&gt; cpp/io/c/fgetwc
std::fgetws =&gt; cpp/io/c/fgetws
std::fputwc =&gt; cpp/io/c/fputwc
std::fputws =&gt; cpp/io/c/fputws
std::getwchar =&gt; cpp/io/c/getwchar
std::putwchar =&gt; cpp/io/c/putwchar
std::ungetwc =&gt; cpp/io/c/ungetwc
std::scanf =&gt; cpp/io/c/fscanf
std::fscanf =&gt; cpp/io/c/fscanf
std::sscanf =&gt; cpp/io/c/fscanf
std::vscanf =&gt; cpp/io/c/vfscanf
std::vfscanf =&gt; cpp/io/c/vfscanf
std::vsscanf =&gt; cpp/io/c/vfscanf
std::printf =&gt; cpp/io/c/fprintf
std::fprintf =&gt; cpp/io/c/fprintf
std::sprintf =&gt; cpp/io/c/fprintf
std::snprintf =&gt; cpp/io/c/fprintf
std::vprintf =&gt; cpp/io/c/vfprintf
std::vfprintf =&gt; cpp/io/c/vfprintf
std::vsprintf =&gt; cpp/io/c/vfprintf
std::vsnprintf =&gt; cpp/io/c/vfprintf
std::wscanf =&gt; cpp/io/c/fwscanf
std::fwscanf =&gt; cpp/io/c/fwscanf
std::swscanf =&gt; cpp/io/c/fwscanf
std::vwscanf =&gt; cpp/io/c/vfwscanf
std::vfwscanf =&gt; cpp/io/c/vfwscanf
std::vswscanf =&gt; cpp/io/c/vfwscanf
std::wprintf =&gt; cpp/io/c/fwprintf
std::fwprintf =&gt; cpp/io/c/fwprintf
std::swprintf =&gt; cpp/io/c/fwprintf
std::vwprintf =&gt; cpp/io/c/vfwprintf
std::vfwprintf =&gt; cpp/io/c/vfwprintf
std::vswprintf =&gt; cpp/io/c/vfwprintf
std::ftell =&gt; cpp/io/c/ftell
std::fgetpos =&gt; cpp/io/c/fgetpos
std::fseek =&gt; cpp/io/c/fseek
std::fsetpos =&gt; cpp/io/c/fsetpos
std::rewind =&gt; cpp/io/c/rewind
std::clearerr =&gt; cpp/io/c/clearerr
std::feof =&gt; cpp/io/c/feof
std::ferror =&gt; cpp/io/c/ferror
std::perror =&gt; cpp/io/c/perror
std::remove (&lt;cstdio&gt;) =&gt; cpp/io/c/remove
std::rename =&gt; cpp/io/c/rename
std::tmpfile =&gt; cpp/io/c/tmpfile
std::tmpnam =&gt; cpp/io/c/tmpnam
std::FILE =&gt; cpp/io/c
std::fpos_t =&gt; cpp/io/c
stdin =&gt; cpp/io/c
stdout =&gt; cpp/io/c
stderr =&gt; cpp/io/c
EOF =&gt; cpp/io/c
FOPEN_MAX =&gt; cpp/io/c
FILENAME_MAX =&gt; cpp/io/c
BUFSIZ =&gt; cpp/io/c
_IOFBF =&gt; cpp/io/c
_IOLBF =&gt; cpp/io/c
_IONBF =&gt; cpp/io/c
SEEK_SET =&gt; cpp/io/c
SEEK_CUR =&gt; cpp/io/c
SEEK_END =&gt; cpp/io/c
TMP_MAX =&gt; cpp/io/c
L_tmpnam =&gt; cpp/io/c
std::isalnum (&lt;clocale&gt;) =&gt; cpp/locale/isalnum
std::isalpha (&lt;clocale&gt;) =&gt; cpp/locale/isalpha
std::islower (&lt;clocale&gt;) =&gt; cpp/locale/islower
std::isupper (&lt;clocale&gt;) =&gt; cpp/locale/isupper
std::isdigit (&lt;clocale&gt;) =&gt; cpp/locale/isdigit
std::isxdigit (&lt;clocale&gt;) =&gt; cpp/locale/isxdigit
std::iscntrl (&lt;clocale&gt;) =&gt; cpp/locale/iscntrl
std::isgraph (&lt;clocale&gt;) =&gt; cpp/locale/isgraph
std::isspace (&lt;clocale&gt;) =&gt; cpp/locale/isspace
std::isblank (&lt;clocale&gt;) =&gt; cpp/locale/isblank
std::isprint (&lt;clocale&gt;) =&gt; cpp/locale/isprint
std::ispunct (&lt;clocale&gt;) =&gt; cpp/locale/ispunct
std::tolower (&lt;clocale&gt;) =&gt; cpp/locale/tolower
std::toupper (&lt;clocale&gt;) =&gt; cpp/locale/toupper
std::locale =&gt; cpp/locale/locale
std::locale::locale =&gt; cpp/locale/locale/locale
std::locale::~locale =&gt; cpp/locale/locale/~locale
std::locale::operator= =&gt; cpp/locale/locale/operator=
std::locale::combine =&gt; cpp/locale/locale/combine
std::locale::name =&gt; cpp/locale/locale/name
std::locale::operator== =&gt; cpp/locale/locale/operator_cmp
std::locale::operator!= =&gt; cpp/locale/locale/operator_cmp
std::locale::operator() =&gt; cpp/locale/locale/operator()
std::locale::global =&gt; cpp/locale/locale/global
std::locale::classic =&gt; cpp/locale/locale/classic
std::locale::id =&gt; cpp/locale/locale/id
std::locale::id::id =&gt; cpp/locale/locale/id/id
std::locale::facet =&gt; cpp/locale/locale/facet
std::locale::facet::facet =&gt; cpp/locale/locale/facet/facet
std::use_facet =&gt; cpp/locale/use_facet
std::has_facet =&gt; cpp/locale/has_facet
std::wstring_convert =&gt; cpp/locale/wstring_convert
std::wstring_convert::wstring_convert =&gt; cpp/locale/wstring_convert/wstring_convert
std::wstring_convert::~wstring_convert =&gt; cpp/locale/wstring_convert/~wstring_convert
std::wstring_convert::from_bytes =&gt; cpp/locale/wstring_convert/from_bytes
std::wstring_convert::to_bytes =&gt; cpp/locale/wstring_convert/to_bytes
std::wstring_convert::converted =&gt; cpp/locale/wstring_convert/converted
std::wstring_convert::state =&gt; cpp/locale/wstring_convert/state
std::wbuffer_convert =&gt; cpp/locale/wbuffer_convert
std::wbuffer_convert::wbuffer_convert =&gt; cpp/locale/wbuffer_convert/wbuffer_convert
std::wbuffer_convert::~wbuffer_convert =&gt; cpp/locale/wbuffer_convert/~wbuffer_convert
std::wbuffer_convert::rdbuf =&gt; cpp/locale/wbuffer_convert/rdbuf
std::wbuffer_convert::state =&gt; cpp/locale/wbuffer_convert/state
std::ctype_base =&gt; cpp/locale/ctype_base
std::ctype_base::mask =&gt; cpp/locale/ctype_base
std::ctype_base::space =&gt; cpp/locale/ctype_base
std::ctype_base::print =&gt; cpp/locale/ctype_base
std::ctype_base::cntrl =&gt; cpp/locale/ctype_base
std::ctype_base::upper =&gt; cpp/locale/ctype_base
std::ctype_base::lower =&gt; cpp/locale/ctype_base
std::ctype_base::alpha =&gt; cpp/locale/ctype_base
std::ctype_base::digit =&gt; cpp/locale/ctype_base
std::ctype_base::punct =&gt; cpp/locale/ctype_base
std::ctype_base::xdigit =&gt; cpp/locale/ctype_base
std::ctype_base::blank =&gt; cpp/locale/ctype_base
std::ctype_base::alnum =&gt; cpp/locale/ctype_base
std::ctype_base::graph =&gt; cpp/locale/ctype_base
std::codecvt_base =&gt; cpp/locale/codecvt_base
std::codecvt_base::result =&gt; cpp/locale/codecvt_base
std::codecvt_base::ok =&gt; cpp/locale/codecvt_base
std::codecvt_base::partial =&gt; cpp/locale/codecvt_base
std::codecvt_base::error =&gt; cpp/locale/codecvt_base
std::codecvt_base::noconv =&gt; cpp/locale/codecvt_base
std::messages_base =&gt; cpp/locale/messages_base
std::messages_base::catalog =&gt; cpp/locale/messages_base
std::time_base =&gt; cpp/locale/time_base
std::time_base::dateorder =&gt; cpp/locale/time_base
std::time_base::no_order =&gt; cpp/locale/time_base
std::time_base::dmy =&gt; cpp/locale/time_base
std::time_base::mdy =&gt; cpp/locale/time_base
std::time_base::ymd =&gt; cpp/locale/time_base
std::time_base::ydm =&gt; cpp/locale/time_base
std::money_base =&gt; cpp/locale/money_base
std::money_base::part =&gt; cpp/locale/money_base
std::money_base::none =&gt; cpp/locale/money_base
std::money_base::space =&gt; cpp/locale/money_base
std::money_base::symbol =&gt; cpp/locale/money_base
std::money_base::sign =&gt; cpp/locale/money_base
std::money_base::value =&gt; cpp/locale/money_base
std::money_base::pattern =&gt; cpp/locale/money_base
std::ctype =&gt; cpp/locale/ctype
std::ctype::mask =&gt; cpp/locale/ctype_base
std::ctype::space =&gt; cpp/locale/ctype_base
std::ctype::print =&gt; cpp/locale/ctype_base
std::ctype::cntrl =&gt; cpp/locale/ctype_base
std::ctype::upper =&gt; cpp/locale/ctype_base
std::ctype::lower =&gt; cpp/locale/ctype_base
std::ctype::alpha =&gt; cpp/locale/ctype_base
std::ctype::digit =&gt; cpp/locale/ctype_base
std::ctype::punct =&gt; cpp/locale/ctype_base
std::ctype::xdigit =&gt; cpp/locale/ctype_base
std::ctype::blank =&gt; cpp/locale/ctype_base
std::ctype::alnum =&gt; cpp/locale/ctype_base
std::ctype::graph =&gt; cpp/locale/ctype_base
std::ctype::ctype =&gt; cpp/locale/ctype/ctype
std::ctype::~ctype =&gt; cpp/locale/ctype/~ctype
std::ctype::is =&gt; cpp/locale/ctype/is
std::ctype::scan_is =&gt; cpp/locale/ctype/scan_is
std::ctype::toupper =&gt; cpp/locale/ctype/toupper
std::ctype::tolower =&gt; cpp/locale/ctype/tolower
std::ctype::widen =&gt; cpp/locale/ctype/widen
std::ctype::narrow =&gt; cpp/locale/ctype/narrow
std::ctype::do_is =&gt; cpp/locale/ctype/is
std::ctype::do_scan_is =&gt; cpp/locale/ctype/scan_is
std::ctype::do_toupper =&gt; cpp/locale/ctype/toupper
std::ctype::do_tolower =&gt; cpp/locale/ctype/tolower
std::ctype::do_widen =&gt; cpp/locale/ctype/widen
std::ctype::do_narrow =&gt; cpp/locale/ctype/narrow
std::codecvt =&gt; cpp/locale/codecvt
std::codecvt::result =&gt; cpp/locale/codecvt_base
std::codecvt::ok =&gt; cpp/locale/codecvt_base
std::codecvt::partial =&gt; cpp/locale/codecvt_base
std::codecvt::error =&gt; cpp/locale/codecvt_base
std::codecvt::noconv =&gt; cpp/locale/codecvt_base
std::codecvt::intern_type =&gt; cpp/locale/codecvt
std::codecvt::extern_type =&gt; cpp/locale/codecvt
std::codecvt::state_type =&gt; cpp/locale/codecvt
std::codecvt::codecvt =&gt; cpp/locale/codecvt/codecvt
std::codecvt::~codecvt =&gt; cpp/locale/codecvt/~codecvt
std::codecvt::out =&gt; cpp/locale/codecvt/out
std::codecvt::in =&gt; cpp/locale/codecvt/in
std::codecvt::unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt::encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt::always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt::length =&gt; cpp/locale/codecvt/length
std::codecvt::max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt::do_out =&gt; cpp/locale/codecvt/out
std::codecvt::do_in =&gt; cpp/locale/codecvt/in
std::codecvt::do_unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt::do_encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt::do_always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt::do_length =&gt; cpp/locale/codecvt/length
std::codecvt::do_max_length =&gt; cpp/locale/codecvt/max_length
std::collate =&gt; cpp/locale/collate
std::collate::char_type =&gt; cpp/locale/collate
std::collate::string_type =&gt; cpp/locale/collate
std::collate::collate =&gt; cpp/locale/collate/collate
std::collate::~collate =&gt; cpp/locale/collate/~collate
std::collate::compare =&gt; cpp/locale/collate/compare
std::collate::transform =&gt; cpp/locale/collate/transform
std::collate::hash =&gt; cpp/locale/collate/hash
std::collate::do_compare =&gt; cpp/locale/collate/compare
std::collate::do_transform =&gt; cpp/locale/collate/transform
std::collate::do_hash =&gt; cpp/locale/collate/hash
std::messages =&gt; cpp/locale/messages
std::messages::catalog =&gt; cpp/locale/messages_base
std::messages::char_type =&gt; cpp/locale/messages
std::messages::string_type =&gt; cpp/locale/messages
std::messages::messages =&gt; cpp/locale/messages/messages
std::messages::~messages =&gt; cpp/locale/messages/~messages
std::messages::open =&gt; cpp/locale/messages/open
std::messages::get =&gt; cpp/locale/messages/get
std::messages::close =&gt; cpp/locale/messages/close
std::messages::do_open =&gt; cpp/locale/messages/open
std::messages::do_get =&gt; cpp/locale/messages/get
std::messages::do_close =&gt; cpp/locale/messages/close
std::time_get =&gt; cpp/locale/time_get
std::time_get::dateorder =&gt; cpp/locale/time_base
std::time_get::no_order =&gt; cpp/locale/time_base
std::time_get::dmy =&gt; cpp/locale/time_base
std::time_get::mdy =&gt; cpp/locale/time_base
std::time_get::ymd =&gt; cpp/locale/time_base
std::time_get::ydm =&gt; cpp/locale/time_base
std::time_get::char_type =&gt; cpp/locale/time_get
std::time_get::iter_type =&gt; cpp/locale/time_get
std::time_get::time_get =&gt; cpp/locale/time_get/time_get
std::time_get::~time_get =&gt; cpp/locale/time_get/~time_get
std::time_get::date_order =&gt; cpp/locale/time_get/date_order
std::time_get::get_time =&gt; cpp/locale/time_get/get_time
std::time_get::get_date =&gt; cpp/locale/time_get/get_date
std::time_get::get_weekday =&gt; cpp/locale/time_get/get_weekday
std::time_get::get_monthname =&gt; cpp/locale/time_get/get_monthname
std::time_get::get_year =&gt; cpp/locale/time_get/get_year
std::time_get::get =&gt; cpp/locale/time_get/get
std::time_get::do_date_order =&gt; cpp/locale/time_get/date_order
std::time_get::do_get_time =&gt; cpp/locale/time_get/get_time
std::time_get::do_get_date =&gt; cpp/locale/time_get/get_date
std::time_get::do_get_weekday =&gt; cpp/locale/time_get/get_weekday
std::time_get::do_get_monthname =&gt; cpp/locale/time_get/get_monthname
std::time_get::do_get_year =&gt; cpp/locale/time_get/get_year
std::time_get::do_get =&gt; cpp/locale/time_get/get
std::time_put =&gt; cpp/locale/time_put
std::time_put::dateorder =&gt; cpp/locale/time_base
std::time_put::no_order =&gt; cpp/locale/time_base
std::time_put::dmy =&gt; cpp/locale/time_base
std::time_put::mdy =&gt; cpp/locale/time_base
std::time_put::ymd =&gt; cpp/locale/time_base
std::time_put::ydm =&gt; cpp/locale/time_base
std::time_put::char_type =&gt; cpp/locale/time_put
std::time_put::iter_type =&gt; cpp/locale/time_put
std::time_put::time_put =&gt; cpp/locale/time_put/time_put
std::time_put::~time_put =&gt; cpp/locale/time_put/~time_put
std::time_put::put =&gt; cpp/locale/time_put/put
std::time_put::do_put =&gt; cpp/locale/time_put/put
std::num_get =&gt; cpp/locale/num_get
std::num_get::char_type =&gt; cpp/locale/num_get
std::num_get::iter_type =&gt; cpp/locale/num_get
std::num_get::num_get =&gt; cpp/locale/num_get/num_get
std::num_get::~num_get =&gt; cpp/locale/num_get/~num_get
std::num_get::get =&gt; cpp/locale/num_get/get
std::num_get::do_get =&gt; cpp/locale/num_get/get
std::num_put =&gt; cpp/locale/num_put
std::num_put::char_type =&gt; cpp/locale/num_put
std::num_put::iter_type =&gt; cpp/locale/num_put
std::num_put::num_put =&gt; cpp/locale/num_put/num_put
std::num_put::~num_put =&gt; cpp/locale/num_put/~num_put
std::num_put::put =&gt; cpp/locale/num_put/put
std::num_put::do_put =&gt; cpp/locale/num_put/put
std::numpunct =&gt; cpp/locale/numpunct
std::numpunct::char_type =&gt; cpp/locale/numpunct
std::numpunct::string_type =&gt; cpp/locale/numpunct
std::numpunct::numpunct =&gt; cpp/locale/numpunct/numpunct
std::numpunct::~numpunct =&gt; cpp/locale/numpunct/~numpunct
std::numpunct::decimal_point =&gt; cpp/locale/numpunct/decimal_point
std::numpunct::thousands_sep =&gt; cpp/locale/numpunct/thousands_sep
std::numpunct::grouping =&gt; cpp/locale/numpunct/grouping
std::numpunct::truename =&gt; cpp/locale/numpunct/truefalsename
std::numpunct::falsename =&gt; cpp/locale/numpunct/truefalsename
std::numpunct::do_decimal_point =&gt; cpp/locale/numpunct/decimal_point
std::numpunct::do_thousands_sep =&gt; cpp/locale/numpunct/thousands_sep
std::numpunct::do_grouping =&gt; cpp/locale/numpunct/grouping
std::numpunct::do_truename =&gt; cpp/locale/numpunct/truefalsename
std::numpunct::do_falsename =&gt; cpp/locale/numpunct/truefalsename
std::money_get =&gt; cpp/locale/money_get
std::money_get::part =&gt; cpp/locale/money_base
std::money_get::none =&gt; cpp/locale/money_base
std::money_get::space =&gt; cpp/locale/money_base
std::money_get::symbol =&gt; cpp/locale/money_base
std::money_get::sign =&gt; cpp/locale/money_base
std::money_get::value =&gt; cpp/locale/money_base
std::money_get::pattern =&gt; cpp/locale/money_base
std::money_get::char_type =&gt; cpp/locale/money_get
std::money_get::iter_type =&gt; cpp/locale/money_get
std::money_get::string_type =&gt; cpp/locale/money_get
std::money_get::money_get =&gt; cpp/locale/money_get/money_get
std::money_get::~money_get =&gt; cpp/locale/money_get/~money_get
std::money_get::get =&gt; cpp/locale/money_get/get
std::money_get::do_get =&gt; cpp/locale/money_get/get
std::money_put =&gt; cpp/locale/money_put
std::money_put::part =&gt; cpp/locale/money_base
std::money_put::none =&gt; cpp/locale/money_base
std::money_put::space =&gt; cpp/locale/money_base
std::money_put::symbol =&gt; cpp/locale/money_base
std::money_put::sign =&gt; cpp/locale/money_base
std::money_put::value =&gt; cpp/locale/money_base
std::money_put::pattern =&gt; cpp/locale/money_base
std::money_put::char_type =&gt; cpp/locale/money_put
std::money_put::iter_type =&gt; cpp/locale/money_put
std::money_put::string_type =&gt; cpp/locale/money_put
std::money_put::money_put =&gt; cpp/locale/money_put/money_put
std::money_put::~money_put =&gt; cpp/locale/money_put/~money_put
std::money_put::put =&gt; cpp/locale/money_put/put
std::money_put::do_put =&gt; cpp/locale/money_put/put
std::moneypunct =&gt; cpp/locale/moneypunct
std::moneypunct::char_type =&gt; cpp/locale/moneypunct
std::moneypunct::string_type =&gt; cpp/locale/moneypunct
std::moneypunct::part =&gt; cpp/locale/money_base
std::moneypunct::none =&gt; cpp/locale/money_base
std::moneypunct::space =&gt; cpp/locale/money_base
std::moneypunct::symbol =&gt; cpp/locale/money_base
std::moneypunct::sign =&gt; cpp/locale/money_base
std::moneypunct::value =&gt; cpp/locale/money_base
std::moneypunct::pattern =&gt; cpp/locale/money_base
std::moneypunct::moneypunct =&gt; cpp/locale/moneypunct/moneypunct
std::moneypunct::~moneypunct =&gt; cpp/locale/moneypunct/~moneypunct
std::moneypunct::decimal_point =&gt; cpp/locale/moneypunct/decimal_point
std::moneypunct::thousands_sep =&gt; cpp/locale/moneypunct/thousands_sep
std::moneypunct::grouping =&gt; cpp/locale/moneypunct/grouping
std::moneypunct::curr_symbol =&gt; cpp/locale/moneypunct/curr_symbol
std::moneypunct::positive_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct::negative_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct::frac_digits =&gt; cpp/locale/moneypunct/frac_digits
std::moneypunct::pos_format =&gt; cpp/locale/moneypunct/pos_format
std::moneypunct::neg_format =&gt; cpp/locale/moneypunct/pos_format
std::moneypunct::do_decimal_point =&gt; cpp/locale/moneypunct/decimal_point
std::moneypunct::do_thousands_sep =&gt; cpp/locale/moneypunct/thousands_sep
std::moneypunct::do_grouping =&gt; cpp/locale/moneypunct/grouping
std::moneypunct::do_curr_symbol =&gt; cpp/locale/moneypunct/curr_symbol
std::moneypunct::do_positive_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct::do_negative_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct::do_frac_digits =&gt; cpp/locale/moneypunct/frac_digits
std::moneypunct::do_pos_format =&gt; cpp/locale/moneypunct/pos_format
std::moneypunct::do_neg_format =&gt; cpp/locale/moneypunct/pos_format
std::ctype_byname =&gt; cpp/locale/ctype_byname
std::ctype_byname::is =&gt; cpp/locale/ctype/is
std::ctype_byname::scan_is =&gt; cpp/locale/ctype/scan_is
std::ctype_byname::toupper =&gt; cpp/locale/ctype/toupper
std::ctype_byname::tolower =&gt; cpp/locale/ctype/tolower
std::ctype_byname::widen =&gt; cpp/locale/ctype/widen
std::ctype_byname::narrow =&gt; cpp/locale/ctype/narrow
std::ctype_byname::do_is =&gt; cpp/locale/ctype/is
std::ctype_byname::do_scan_is =&gt; cpp/locale/ctype/scan_is
std::ctype_byname::do_toupper =&gt; cpp/locale/ctype/toupper
std::ctype_byname::do_tolower =&gt; cpp/locale/ctype/tolower
std::ctype_byname::do_widen =&gt; cpp/locale/ctype/widen
std::ctype_byname::do_narrow =&gt; cpp/locale/ctype/narrow
std::ctype_byname::mask =&gt; cpp/locale/ctype_base
std::ctype_byname::space =&gt; cpp/locale/ctype_base
std::ctype_byname::print =&gt; cpp/locale/ctype_base
std::ctype_byname::cntrl =&gt; cpp/locale/ctype_base
std::ctype_byname::upper =&gt; cpp/locale/ctype_base
std::ctype_byname::lower =&gt; cpp/locale/ctype_base
std::ctype_byname::alpha =&gt; cpp/locale/ctype_base
std::ctype_byname::digit =&gt; cpp/locale/ctype_base
std::ctype_byname::punct =&gt; cpp/locale/ctype_base
std::ctype_byname::xdigit =&gt; cpp/locale/ctype_base
std::ctype_byname::blank =&gt; cpp/locale/ctype_base
std::ctype_byname::alnum =&gt; cpp/locale/ctype_base
std::ctype_byname::graph =&gt; cpp/locale/ctype_base
std::ctype_byname::ctype_byname =&gt; cpp/locale/ctype_byname
std::ctype_byname::~ctype_byname =&gt; cpp/locale/ctype_byname
std::codecvt_byname =&gt; cpp/locale/codecvt_byname
std::codecvt_byname::intern_type =&gt; cpp/locale/codecvt
std::codecvt_byname::extern_type =&gt; cpp/locale/codecvt
std::codecvt_byname::state_type =&gt; cpp/locale/codecvt
std::codecvt_byname::out =&gt; cpp/locale/codecvt/out
std::codecvt_byname::in =&gt; cpp/locale/codecvt/in
std::codecvt_byname::unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_byname::encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_byname::always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_byname::length =&gt; cpp/locale/codecvt/length
std::codecvt_byname::max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_byname::do_out =&gt; cpp/locale/codecvt/out
std::codecvt_byname::do_in =&gt; cpp/locale/codecvt/in
std::codecvt_byname::do_unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_byname::do_encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_byname::do_always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_byname::do_length =&gt; cpp/locale/codecvt/length
std::codecvt_byname::do_max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_byname::result =&gt; cpp/locale/codecvt_base
std::codecvt_byname::ok =&gt; cpp/locale/codecvt_base
std::codecvt_byname::partial =&gt; cpp/locale/codecvt_base
std::codecvt_byname::error =&gt; cpp/locale/codecvt_base
std::codecvt_byname::noconv =&gt; cpp/locale/codecvt_base
std::codecvt_byname::codecvt_byname =&gt; cpp/locale/codecvt_byname
std::codecvt_byname::~codecvt_byname =&gt; cpp/locale/codecvt_byname
std::messages_byname =&gt; cpp/locale/messages_byname
std::messages_byname::char_type =&gt; cpp/locale/messages
std::messages_byname::string_type =&gt; cpp/locale/messages
std::messages_byname::open =&gt; cpp/locale/messages/open
std::messages_byname::get =&gt; cpp/locale/messages/get
std::messages_byname::close =&gt; cpp/locale/messages/close
std::messages_byname::do_open =&gt; cpp/locale/messages/open
std::messages_byname::do_get =&gt; cpp/locale/messages/get
std::messages_byname::do_close =&gt; cpp/locale/messages/close
std::messages_byname::catalog =&gt; cpp/locale/messages_base
std::messages_byname::messages_byname =&gt; cpp/locale/messages_byname
std::messages_byname::~messages_byname =&gt; cpp/locale/messages_byname
std::collate_byname =&gt; cpp/locale/collate_byname
std::collate_byname::char_type =&gt; cpp/locale/collate
std::collate_byname::string_type =&gt; cpp/locale/collate
std::collate_byname::compare =&gt; cpp/locale/collate/compare
std::collate_byname::transform =&gt; cpp/locale/collate/transform
std::collate_byname::hash =&gt; cpp/locale/collate/hash
std::collate_byname::do_compare =&gt; cpp/locale/collate/compare
std::collate_byname::do_transform =&gt; cpp/locale/collate/transform
std::collate_byname::do_hash =&gt; cpp/locale/collate/hash
std::collate_byname::collate_byname =&gt; cpp/locale/collate_byname
std::collate_byname::~collate_byname =&gt; cpp/locale/collate_byname
std::time_get_byname =&gt; cpp/locale/time_get_byname
std::time_get_byname::char_type =&gt; cpp/locale/time_get
std::time_get_byname::iter_type =&gt; cpp/locale/time_get
std::time_get_byname::date_order =&gt; cpp/locale/time_get/date_order
std::time_get_byname::get_time =&gt; cpp/locale/time_get/get_time
std::time_get_byname::get_date =&gt; cpp/locale/time_get/get_date
std::time_get_byname::get_weekday =&gt; cpp/locale/time_get/get_weekday
std::time_get_byname::get_monthname =&gt; cpp/locale/time_get/get_monthname
std::time_get_byname::get_year =&gt; cpp/locale/time_get/get_year
std::time_get_byname::get =&gt; cpp/locale/time_get/get
std::time_get_byname::do_date_order =&gt; cpp/locale/time_get/date_order
std::time_get_byname::do_get_time =&gt; cpp/locale/time_get/get_time
std::time_get_byname::do_get_date =&gt; cpp/locale/time_get/get_date
std::time_get_byname::do_get_weekday =&gt; cpp/locale/time_get/get_weekday
std::time_get_byname::do_get_monthname =&gt; cpp/locale/time_get/get_monthname
std::time_get_byname::do_get_year =&gt; cpp/locale/time_get/get_year
std::time_get_byname::do_get =&gt; cpp/locale/time_get/get
std::time_get_byname::dateorder =&gt; cpp/locale/time_base
std::time_get_byname::no_order =&gt; cpp/locale/time_base
std::time_get_byname::dmy =&gt; cpp/locale/time_base
std::time_get_byname::mdy =&gt; cpp/locale/time_base
std::time_get_byname::ymd =&gt; cpp/locale/time_base
std::time_get_byname::ydm =&gt; cpp/locale/time_base
std::time_get_byname::time_get_byname =&gt; cpp/locale/time_get_byname
std::time_get_byname::~time_get_byname =&gt; cpp/locale/time_get_byname
std::time_put_byname =&gt; cpp/locale/time_put_byname
std::time_put_byname::char_type =&gt; cpp/locale/time_put
std::time_put_byname::iter_type =&gt; cpp/locale/time_put
std::time_put_byname::put =&gt; cpp/locale/time_put/put
std::time_put_byname::do_put =&gt; cpp/locale/time_put/put
std::time_put_byname::dateorder =&gt; cpp/locale/time_base
std::time_put_byname::no_order =&gt; cpp/locale/time_base
std::time_put_byname::dmy =&gt; cpp/locale/time_base
std::time_put_byname::mdy =&gt; cpp/locale/time_base
std::time_put_byname::ymd =&gt; cpp/locale/time_base
std::time_put_byname::ydm =&gt; cpp/locale/time_base
std::time_put_byname::time_put_byname =&gt; cpp/locale/time_put_byname
std::time_put_byname::~time_put_byname =&gt; cpp/locale/time_put_byname
std::numpunct_byname =&gt; cpp/locale/numpunct_byname
std::numpunct_byname::char_type =&gt; cpp/locale/numpunct
std::numpunct_byname::string_type =&gt; cpp/locale/numpunct
std::numpunct_byname::decimal_point =&gt; cpp/locale/numpunct/decimal_point
std::numpunct_byname::thousands_sep =&gt; cpp/locale/numpunct/thousands_sep
std::numpunct_byname::grouping =&gt; cpp/locale/numpunct/grouping
std::numpunct_byname::truename =&gt; cpp/locale/numpunct/truefalsename
std::numpunct_byname::falsename =&gt; cpp/locale/numpunct/truefalsename
std::numpunct_byname::do_decimal_point =&gt; cpp/locale/numpunct/decimal_point
std::numpunct_byname::do_thousands_sep =&gt; cpp/locale/numpunct/thousands_sep
std::numpunct_byname::do_grouping =&gt; cpp/locale/numpunct/grouping
std::numpunct_byname::do_truename =&gt; cpp/locale/numpunct/truefalsename
std::numpunct_byname::do_falsename =&gt; cpp/locale/numpunct/truefalsename
std::numpunct_byname::numpunct_byname =&gt; cpp/locale/numpunct_byname
std::numpunct_byname::~numpunct_byname =&gt; cpp/locale/numpunct_byname
std::moneypunct_byname =&gt; cpp/locale/moneypunct_byname
std::moneypunct_byname::char_type =&gt; cpp/locale/moneypunct
std::moneypunct_byname::string_type =&gt; cpp/locale/moneypunct
std::moneypunct_byname::decimal_point =&gt; cpp/locale/moneypunct/decimal_point
std::moneypunct_byname::thousands_sep =&gt; cpp/locale/moneypunct/thousands_sep
std::moneypunct_byname::grouping =&gt; cpp/locale/moneypunct/grouping
std::moneypunct_byname::curr_symbol =&gt; cpp/locale/moneypunct/curr_symbol
std::moneypunct_byname::positive_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct_byname::negative_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct_byname::frac_digits =&gt; cpp/locale/moneypunct/frac_digits
std::moneypunct_byname::pos_format =&gt; cpp/locale/moneypunct/pos_format
std::moneypunct_byname::neg_format =&gt; cpp/locale/moneypunct/pos_format
std::moneypunct_byname::do_decimal_point =&gt; cpp/locale/moneypunct/decimal_point
std::moneypunct_byname::do_thousands_sep =&gt; cpp/locale/moneypunct/thousands_sep
std::moneypunct_byname::do_grouping =&gt; cpp/locale/moneypunct/grouping
std::moneypunct_byname::do_curr_symbol =&gt; cpp/locale/moneypunct/curr_symbol
std::moneypunct_byname::do_positive_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct_byname::do_negative_sign =&gt; cpp/locale/moneypunct/positive_sign
std::moneypunct_byname::do_frac_digits =&gt; cpp/locale/moneypunct/frac_digits
std::moneypunct_byname::do_pos_format =&gt; cpp/locale/moneypunct/pos_format
std::moneypunct_byname::do_neg_format =&gt; cpp/locale/moneypunct/pos_format
std::moneypunct_byname::part =&gt; cpp/locale/money_base
std::moneypunct_byname::none =&gt; cpp/locale/money_base
std::moneypunct_byname::space =&gt; cpp/locale/money_base
std::moneypunct_byname::symbol =&gt; cpp/locale/money_base
std::moneypunct_byname::sign =&gt; cpp/locale/money_base
std::moneypunct_byname::value =&gt; cpp/locale/money_base
std::moneypunct_byname::pattern =&gt; cpp/locale/money_base
std::moneypunct_byname::moneypunct_byname =&gt; cpp/locale/moneypunct_byname
std::moneypunct_byname::~moneypunct_byname =&gt; cpp/locale/moneypunct_byname
std::codecvt_utf8 =&gt; cpp/locale/codecvt_utf8
std::codecvt_utf8::intern_type =&gt; cpp/locale/codecvt
std::codecvt_utf8::extern_type =&gt; cpp/locale/codecvt
std::codecvt_utf8::state_type =&gt; cpp/locale/codecvt
std::codecvt_utf8::out =&gt; cpp/locale/codecvt/out
std::codecvt_utf8::in =&gt; cpp/locale/codecvt/in
std::codecvt_utf8::unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_utf8::encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_utf8::always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_utf8::length =&gt; cpp/locale/codecvt/length
std::codecvt_utf8::max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_utf8::do_out =&gt; cpp/locale/codecvt/out
std::codecvt_utf8::do_in =&gt; cpp/locale/codecvt/in
std::codecvt_utf8::do_unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_utf8::do_encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_utf8::do_always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_utf8::do_length =&gt; cpp/locale/codecvt/length
std::codecvt_utf8::do_max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_utf8::result =&gt; cpp/locale/codecvt_base
std::codecvt_utf8::ok =&gt; cpp/locale/codecvt_base
std::codecvt_utf8::partial =&gt; cpp/locale/codecvt_base
std::codecvt_utf8::error =&gt; cpp/locale/codecvt_base
std::codecvt_utf8::noconv =&gt; cpp/locale/codecvt_base
std::codecvt_utf16 =&gt; cpp/locale/codecvt_utf16
std::codecvt_utf16::intern_type =&gt; cpp/locale/codecvt
std::codecvt_utf16::extern_type =&gt; cpp/locale/codecvt
std::codecvt_utf16::state_type =&gt; cpp/locale/codecvt
std::codecvt_utf16::out =&gt; cpp/locale/codecvt/out
std::codecvt_utf16::in =&gt; cpp/locale/codecvt/in
std::codecvt_utf16::unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_utf16::encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_utf16::always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_utf16::length =&gt; cpp/locale/codecvt/length
std::codecvt_utf16::max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_utf16::do_out =&gt; cpp/locale/codecvt/out
std::codecvt_utf16::do_in =&gt; cpp/locale/codecvt/in
std::codecvt_utf16::do_unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_utf16::do_encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_utf16::do_always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_utf16::do_length =&gt; cpp/locale/codecvt/length
std::codecvt_utf16::do_max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_utf16::result =&gt; cpp/locale/codecvt_base
std::codecvt_utf16::ok =&gt; cpp/locale/codecvt_base
std::codecvt_utf16::partial =&gt; cpp/locale/codecvt_base
std::codecvt_utf16::error =&gt; cpp/locale/codecvt_base
std::codecvt_utf16::noconv =&gt; cpp/locale/codecvt_base
std::codecvt_utf8_utf16 =&gt; cpp/locale/codecvt_utf8_utf16
std::codecvt_utf8_utf16::intern_type =&gt; cpp/locale/codecvt
std::codecvt_utf8_utf16::extern_type =&gt; cpp/locale/codecvt
std::codecvt_utf8_utf16::state_type =&gt; cpp/locale/codecvt
std::codecvt_utf8_utf16::out =&gt; cpp/locale/codecvt/out
std::codecvt_utf8_utf16::in =&gt; cpp/locale/codecvt/in
std::codecvt_utf8_utf16::unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_utf8_utf16::encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_utf8_utf16::always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_utf8_utf16::length =&gt; cpp/locale/codecvt/length
std::codecvt_utf8_utf16::max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_utf8_utf16::do_out =&gt; cpp/locale/codecvt/out
std::codecvt_utf8_utf16::do_in =&gt; cpp/locale/codecvt/in
std::codecvt_utf8_utf16::do_unshift =&gt; cpp/locale/codecvt/unshift
std::codecvt_utf8_utf16::do_encoding =&gt; cpp/locale/codecvt/encoding
std::codecvt_utf8_utf16::do_always_noconv =&gt; cpp/locale/codecvt/always_noconv
std::codecvt_utf8_utf16::do_length =&gt; cpp/locale/codecvt/length
std::codecvt_utf8_utf16::do_max_length =&gt; cpp/locale/codecvt/max_length
std::codecvt_utf8_utf16::result =&gt; cpp/locale/codecvt_base
std::codecvt_utf8_utf16::ok =&gt; cpp/locale/codecvt_base
std::codecvt_utf8_utf16::partial =&gt; cpp/locale/codecvt_base
std::codecvt_utf8_utf16::error =&gt; cpp/locale/codecvt_base
std::codecvt_utf8_utf16::noconv =&gt; cpp/locale/codecvt_base
std::codecvt_mode =&gt; cpp/locale/codecvt_mode
std::consume_header =&gt; cpp/locale/codecvt_mode
std::generate_header =&gt; cpp/locale/codecvt_mode
std::little_endian =&gt; cpp/locale/codecvt_mode
std::setlocale =&gt; cpp/locale/setlocale
std::localeconv =&gt; cpp/locale/localeconv
std::lconv =&gt; cpp/locale/lconv
LC_ALL =&gt; cpp/locale/LC_categories
LC_COLLATE =&gt; cpp/locale/LC_categories
LC_CTYPE =&gt; cpp/locale/LC_categories
LC_MONETARY =&gt; cpp/locale/LC_categories
LC_NUMERIC =&gt; cpp/locale/LC_categories
LC_TIME =&gt; cpp/locale/LC_categories
std::basic_regex =&gt; cpp/regex/basic_regex
std::basic_regex::basic_regex =&gt; cpp/regex/basic_regex/basic_regex
std::basic_regex::~basic_regex =&gt; cpp/regex/basic_regex/~basic_regex
std::basic_regex::operator= =&gt; cpp/regex/basic_regex/operator=
std::basic_regex::assign =&gt; cpp/regex/basic_regex/assign
std::basic_regex::mark_count =&gt; cpp/regex/basic_regex/mark_count
std::basic_regex::flags =&gt; cpp/regex/basic_regex/flags
std::basic_regex::getloc =&gt; cpp/regex/basic_regex/getloc
std::basic_regex::imbue =&gt; cpp/regex/basic_regex/imbue
std::basic_regex::swap =&gt; cpp/regex/basic_regex/swap
std::regex =&gt; cpp/regex/basic_regex
std::regex::regex =&gt; cpp/regex/basic_regex/basic_regex
std::regex::~regex =&gt; cpp/regex/basic_regex/~basic_regex
std::regex::operator= =&gt; cpp/regex/basic_regex/operator=
std::regex::assign =&gt; cpp/regex/basic_regex/assign
std::regex::mark_count =&gt; cpp/regex/basic_regex/mark_count
std::regex::flags =&gt; cpp/regex/basic_regex/flags
std::regex::getloc =&gt; cpp/regex/basic_regex/getloc
std::regex::imbue =&gt; cpp/regex/basic_regex/imbue
std::regex::swap =&gt; cpp/regex/basic_regex/swap
std::wregex =&gt; cpp/regex/basic_regex
std::wregex::wregex =&gt; cpp/regex/basic_regex/basic_regex
std::wregex::~wregex =&gt; cpp/regex/basic_regex/~basic_regex
std::wregex::operator= =&gt; cpp/regex/basic_regex/operator=
std::wregex::assign =&gt; cpp/regex/basic_regex/assign
std::wregex::mark_count =&gt; cpp/regex/basic_regex/mark_count
std::wregex::flags =&gt; cpp/regex/basic_regex/flags
std::wregex::getloc =&gt; cpp/regex/basic_regex/getloc
std::wregex::imbue =&gt; cpp/regex/basic_regex/imbue
std::wregex::swap =&gt; cpp/regex/basic_regex/swap
std::sub_match =&gt; cpp/regex/sub_match
std::sub_match::sub_match =&gt; cpp/regex/sub_match/sub_match
std::sub_match::length =&gt; cpp/regex/sub_match/length
std::sub_match::str =&gt; cpp/regex/sub_match/str
std::sub_match::operator string_type =&gt; cpp/regex/sub_match/str
std::sub_match::compare =&gt; cpp/regex/sub_match/compare
std::csub_match =&gt; cpp/regex/sub_match
std::csub_match::csub_match =&gt; cpp/regex/sub_match/sub_match
std::csub_match::length =&gt; cpp/regex/sub_match/length
std::csub_match::str =&gt; cpp/regex/sub_match/str
std::csub_match::operator string_type =&gt; cpp/regex/sub_match/str
std::csub_match::compare =&gt; cpp/regex/sub_match/compare
std::wcsub_match =&gt; cpp/regex/sub_match
std::wcsub_match::wcsub_match =&gt; cpp/regex/sub_match/sub_match
std::wcsub_match::length =&gt; cpp/regex/sub_match/length
std::wcsub_match::str =&gt; cpp/regex/sub_match/str
std::wcsub_match::operator string_type =&gt; cpp/regex/sub_match/str
std::wcsub_match::compare =&gt; cpp/regex/sub_match/compare
std::ssub_match =&gt; cpp/regex/sub_match
std::ssub_match::ssub_match =&gt; cpp/regex/sub_match/sub_match
std::ssub_match::length =&gt; cpp/regex/sub_match/length
std::ssub_match::str =&gt; cpp/regex/sub_match/str
std::ssub_match::operator string_type =&gt; cpp/regex/sub_match/str
std::ssub_match::compare =&gt; cpp/regex/sub_match/compare
std::wssub_match =&gt; cpp/regex/sub_match
std::wssub_match::wssub_match =&gt; cpp/regex/sub_match/sub_match
std::wssub_match::length =&gt; cpp/regex/sub_match/length
std::wssub_match::str =&gt; cpp/regex/sub_match/str
std::wssub_match::operator string_type =&gt; cpp/regex/sub_match/str
std::wssub_match::compare =&gt; cpp/regex/sub_match/compare
std::match_results =&gt; cpp/regex/match_results
std::match_results::match_results =&gt; cpp/regex/match_results/match_results
std::match_results::~match_results =&gt; cpp/regex/match_results/~match_results
std::match_results::get_allocator =&gt; cpp/regex/match_results/get_allocator
std::match_results::ready =&gt; cpp/regex/match_results/ready
std::match_results::empty =&gt; cpp/regex/match_results/empty
std::match_results::size =&gt; cpp/regex/match_results/size
std::match_results::max_size =&gt; cpp/regex/match_results/max_size
std::match_results::length =&gt; cpp/regex/match_results/length
std::match_results::position =&gt; cpp/regex/match_results/position
std::match_results::str =&gt; cpp/regex/match_results/str
std::match_results::operator[] =&gt; cpp/regex/match_results/operator_at
std::match_results::prefix =&gt; cpp/regex/match_results/prefix
std::match_results::suffix =&gt; cpp/regex/match_results/suffix
std::match_results::begin =&gt; cpp/regex/match_results/begin
std::match_results::cbegin =&gt; cpp/regex/match_results/begin
std::match_results::end =&gt; cpp/regex/match_results/end
std::match_results::cend =&gt; cpp/regex/match_results/end
std::match_results::format =&gt; cpp/regex/match_results/format
std::match_results::swap =&gt; cpp/regex/match_results/swap
std::cmatch =&gt; cpp/regex/match_results
std::cmatch::cmatch =&gt; cpp/regex/match_results/match_results
std::cmatch::~cmatch =&gt; cpp/regex/match_results/~match_results
std::cmatch::get_allocator =&gt; cpp/regex/match_results/get_allocator
std::cmatch::ready =&gt; cpp/regex/match_results/ready
std::cmatch::empty =&gt; cpp/regex/match_results/empty
std::cmatch::size =&gt; cpp/regex/match_results/size
std::cmatch::max_size =&gt; cpp/regex/match_results/max_size
std::cmatch::length =&gt; cpp/regex/match_results/length
std::cmatch::position =&gt; cpp/regex/match_results/position
std::cmatch::str =&gt; cpp/regex/match_results/str
std::cmatch::operator[] =&gt; cpp/regex/match_results/operator_at
std::cmatch::prefix =&gt; cpp/regex/match_results/prefix
std::cmatch::suffix =&gt; cpp/regex/match_results/suffix
std::cmatch::begin =&gt; cpp/regex/match_results/begin
std::cmatch::cbegin =&gt; cpp/regex/match_results/begin
std::cmatch::end =&gt; cpp/regex/match_results/end
std::cmatch::cend =&gt; cpp/regex/match_results/end
std::cmatch::format =&gt; cpp/regex/match_results/format
std::cmatch::swap =&gt; cpp/regex/match_results/swap
std::wcmatch =&gt; cpp/regex/match_results
std::wcmatch::wcmatch =&gt; cpp/regex/match_results/match_results
std::wcmatch::~wcmatch =&gt; cpp/regex/match_results/~match_results
std::wcmatch::get_allocator =&gt; cpp/regex/match_results/get_allocator
std::wcmatch::ready =&gt; cpp/regex/match_results/ready
std::wcmatch::empty =&gt; cpp/regex/match_results/empty
std::wcmatch::size =&gt; cpp/regex/match_results/size
std::wcmatch::max_size =&gt; cpp/regex/match_results/max_size
std::wcmatch::length =&gt; cpp/regex/match_results/length
std::wcmatch::position =&gt; cpp/regex/match_results/position
std::wcmatch::str =&gt; cpp/regex/match_results/str
std::wcmatch::operator[] =&gt; cpp/regex/match_results/operator_at
std::wcmatch::prefix =&gt; cpp/regex/match_results/prefix
std::wcmatch::suffix =&gt; cpp/regex/match_results/suffix
std::wcmatch::begin =&gt; cpp/regex/match_results/begin
std::wcmatch::cbegin =&gt; cpp/regex/match_results/begin
std::wcmatch::end =&gt; cpp/regex/match_results/end
std::wcmatch::cend =&gt; cpp/regex/match_results/end
std::wcmatch::format =&gt; cpp/regex/match_results/format
std::wcmatch::swap =&gt; cpp/regex/match_results/swap
std::smatch =&gt; cpp/regex/match_results
std::smatch::smatch =&gt; cpp/regex/match_results/match_results
std::smatch::~smatch =&gt; cpp/regex/match_results/~match_results
std::smatch::get_allocator =&gt; cpp/regex/match_results/get_allocator
std::smatch::ready =&gt; cpp/regex/match_results/ready
std::smatch::empty =&gt; cpp/regex/match_results/empty
std::smatch::size =&gt; cpp/regex/match_results/size
std::smatch::max_size =&gt; cpp/regex/match_results/max_size
std::smatch::length =&gt; cpp/regex/match_results/length
std::smatch::position =&gt; cpp/regex/match_results/position
std::smatch::str =&gt; cpp/regex/match_results/str
std::smatch::operator[] =&gt; cpp/regex/match_results/operator_at
std::smatch::prefix =&gt; cpp/regex/match_results/prefix
std::smatch::suffix =&gt; cpp/regex/match_results/suffix
std::smatch::begin =&gt; cpp/regex/match_results/begin
std::smatch::cbegin =&gt; cpp/regex/match_results/begin
std::smatch::end =&gt; cpp/regex/match_results/end
std::smatch::cend =&gt; cpp/regex/match_results/end
std::smatch::format =&gt; cpp/regex/match_results/format
std::smatch::swap =&gt; cpp/regex/match_results/swap
std::wsmatch =&gt; cpp/regex/match_results
std::wsmatch::wsmatch =&gt; cpp/regex/match_results/match_results
std::wsmatch::~wsmatch =&gt; cpp/regex/match_results/~match_results
std::wsmatch::get_allocator =&gt; cpp/regex/match_results/get_allocator
std::wsmatch::ready =&gt; cpp/regex/match_results/ready
std::wsmatch::empty =&gt; cpp/regex/match_results/empty
std::wsmatch::size =&gt; cpp/regex/match_results/size
std::wsmatch::max_size =&gt; cpp/regex/match_results/max_size
std::wsmatch::length =&gt; cpp/regex/match_results/length
std::wsmatch::position =&gt; cpp/regex/match_results/position
std::wsmatch::str =&gt; cpp/regex/match_results/str
std::wsmatch::operator[] =&gt; cpp/regex/match_results/operator_at
std::wsmatch::prefix =&gt; cpp/regex/match_results/prefix
std::wsmatch::suffix =&gt; cpp/regex/match_results/suffix
std::wsmatch::begin =&gt; cpp/regex/match_results/begin
std::wsmatch::cbegin =&gt; cpp/regex/match_results/begin
std::wsmatch::end =&gt; cpp/regex/match_results/end
std::wsmatch::cend =&gt; cpp/regex/match_results/end
std::wsmatch::format =&gt; cpp/regex/match_results/format
std::wsmatch::swap =&gt; cpp/regex/match_results/swap
std::regex_match =&gt; cpp/regex/regex_match
std::regex_search =&gt; cpp/regex/regex_search
std::regex_replace =&gt; cpp/regex/regex_replace
std::regex_iterator =&gt; cpp/regex/regex_iterator
std::regex_iterator::regex_iterator =&gt; cpp/regex/regex_iterator/regex_iterator
std::regex_iterator::operator= =&gt; cpp/regex/regex_iterator/operator=
std::regex_iterator::operator== =&gt; cpp/regex/regex_iterator/operator_cmp
std::regex_iterator::operator!= =&gt; cpp/regex/regex_iterator/operator_cmp
std::regex_iterator::operator* =&gt; cpp/regex/regex_iterator/operator*
std::regex_iterator::operator-&gt; =&gt; cpp/regex/regex_iterator/operator*
std::regex_iterator::operator++ =&gt; cpp/regex/regex_iterator/operator_arith
std::regex_iterator::operator++(int) =&gt; cpp/regex/regex_iterator/operator_arith
std::cregex_iterator =&gt; cpp/regex/regex_iterator
std::cregex_iterator::cregex_iterator =&gt; cpp/regex/regex_iterator/regex_iterator
std::cregex_iterator::operator= =&gt; cpp/regex/regex_iterator/operator=
std::cregex_iterator::operator== =&gt; cpp/regex/regex_iterator/operator_cmp
std::cregex_iterator::operator!= =&gt; cpp/regex/regex_iterator/operator_cmp
std::cregex_iterator::operator* =&gt; cpp/regex/regex_iterator/operator*
std::cregex_iterator::operator-&gt; =&gt; cpp/regex/regex_iterator/operator*
std::cregex_iterator::operator++ =&gt; cpp/regex/regex_iterator/operator_arith
std::cregex_iterator::operator++(int) =&gt; cpp/regex/regex_iterator/operator_arith
std::wcregex_iterator =&gt; cpp/regex/regex_iterator
std::wcregex_iterator::wcregex_iterator =&gt; cpp/regex/regex_iterator/regex_iterator
std::wcregex_iterator::operator= =&gt; cpp/regex/regex_iterator/operator=
std::wcregex_iterator::operator== =&gt; cpp/regex/regex_iterator/operator_cmp
std::wcregex_iterator::operator!= =&gt; cpp/regex/regex_iterator/operator_cmp
std::wcregex_iterator::operator* =&gt; cpp/regex/regex_iterator/operator*
std::wcregex_iterator::operator-&gt; =&gt; cpp/regex/regex_iterator/operator*
std::wcregex_iterator::operator++ =&gt; cpp/regex/regex_iterator/operator_arith
std::wcregex_iterator::operator++(int) =&gt; cpp/regex/regex_iterator/operator_arith
std::sregex_iterator =&gt; cpp/regex/regex_iterator
std::sregex_iterator::sregex_iterator =&gt; cpp/regex/regex_iterator/regex_iterator
std::sregex_iterator::operator= =&gt; cpp/regex/regex_iterator/operator=
std::sregex_iterator::operator== =&gt; cpp/regex/regex_iterator/operator_cmp
std::sregex_iterator::operator!= =&gt; cpp/regex/regex_iterator/operator_cmp
std::sregex_iterator::operator* =&gt; cpp/regex/regex_iterator/operator*
std::sregex_iterator::operator-&gt; =&gt; cpp/regex/regex_iterator/operator*
std::sregex_iterator::operator++ =&gt; cpp/regex/regex_iterator/operator_arith
std::sregex_iterator::operator++(int) =&gt; cpp/regex/regex_iterator/operator_arith
std::wsregex_iterator =&gt; cpp/regex/regex_iterator
std::wsregex_iterator::wsregex_iterator =&gt; cpp/regex/regex_iterator/regex_iterator
std::wsregex_iterator::operator= =&gt; cpp/regex/regex_iterator/operator=
std::wsregex_iterator::operator== =&gt; cpp/regex/regex_iterator/operator_cmp
std::wsregex_iterator::operator!= =&gt; cpp/regex/regex_iterator/operator_cmp
std::wsregex_iterator::operator* =&gt; cpp/regex/regex_iterator/operator*
std::wsregex_iterator::operator-&gt; =&gt; cpp/regex/regex_iterator/operator*
std::wsregex_iterator::operator++ =&gt; cpp/regex/regex_iterator/operator_arith
std::wsregex_iterator::operator++(int) =&gt; cpp/regex/regex_iterator/operator_arith
std::regex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::regex_token_iterator::regex_token_iterator =&gt; cpp/regex/regex_token_iterator/regex_token_iterator
std::regex_token_iterator::operator= =&gt; cpp/regex/regex_token_iterator/operator=
std::regex_token_iterator::operator== =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::regex_token_iterator::operator!= =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::regex_token_iterator::operator* =&gt; cpp/regex/regex_token_iterator/operator*
std::regex_token_iterator::operator-&gt; =&gt; cpp/regex/regex_token_iterator/operator*
std::regex_token_iterator::operator++ =&gt; cpp/regex/regex_token_iterator/operator_arith
std::regex_token_iterator::operator++(int) =&gt; cpp/regex/regex_token_iterator/operator_arith
std::cregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::cregex_token_iterator::cregex_token_iterator =&gt; cpp/regex/regex_token_iterator/regex_token_iterator
std::cregex_token_iterator::operator= =&gt; cpp/regex/regex_token_iterator/operator=
std::cregex_token_iterator::operator== =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::cregex_token_iterator::operator!= =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::cregex_token_iterator::operator* =&gt; cpp/regex/regex_token_iterator/operator*
std::cregex_token_iterator::operator-&gt; =&gt; cpp/regex/regex_token_iterator/operator*
std::cregex_token_iterator::operator++ =&gt; cpp/regex/regex_token_iterator/operator_arith
std::cregex_token_iterator::operator++(int) =&gt; cpp/regex/regex_token_iterator/operator_arith
std::wcregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::wcregex_token_iterator::wcregex_token_iterator =&gt; cpp/regex/regex_token_iterator/regex_token_iterator
std::wcregex_token_iterator::operator= =&gt; cpp/regex/regex_token_iterator/operator=
std::wcregex_token_iterator::operator== =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::wcregex_token_iterator::operator!= =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::wcregex_token_iterator::operator* =&gt; cpp/regex/regex_token_iterator/operator*
std::wcregex_token_iterator::operator-&gt; =&gt; cpp/regex/regex_token_iterator/operator*
std::wcregex_token_iterator::operator++ =&gt; cpp/regex/regex_token_iterator/operator_arith
std::wcregex_token_iterator::operator++(int) =&gt; cpp/regex/regex_token_iterator/operator_arith
std::sregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::sregex_token_iterator::sregex_token_iterator =&gt; cpp/regex/regex_token_iterator/regex_token_iterator
std::sregex_token_iterator::operator= =&gt; cpp/regex/regex_token_iterator/operator=
std::sregex_token_iterator::operator== =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::sregex_token_iterator::operator!= =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::sregex_token_iterator::operator* =&gt; cpp/regex/regex_token_iterator/operator*
std::sregex_token_iterator::operator-&gt; =&gt; cpp/regex/regex_token_iterator/operator*
std::sregex_token_iterator::operator++ =&gt; cpp/regex/regex_token_iterator/operator_arith
std::sregex_token_iterator::operator++(int) =&gt; cpp/regex/regex_token_iterator/operator_arith
std::wsregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::wsregex_token_iterator::wsregex_token_iterator =&gt; cpp/regex/regex_token_iterator/regex_token_iterator
std::wsregex_token_iterator::operator= =&gt; cpp/regex/regex_token_iterator/operator=
std::wsregex_token_iterator::operator== =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::wsregex_token_iterator::operator!= =&gt; cpp/regex/regex_token_iterator/operator_cmp
std::wsregex_token_iterator::operator* =&gt; cpp/regex/regex_token_iterator/operator*
std::wsregex_token_iterator::operator-&gt; =&gt; cpp/regex/regex_token_iterator/operator*
std::wsregex_token_iterator::operator++ =&gt; cpp/regex/regex_token_iterator/operator_arith
std::wsregex_token_iterator::operator++(int) =&gt; cpp/regex/regex_token_iterator/operator_arith
std::regex_error =&gt; cpp/regex/regex_error
std::regex_error::what =&gt; cpp/error/exception/what
std::regex_error::regex_error =&gt; cpp/regex/regex_error/regex_error
std::regex_error::code =&gt; cpp/regex/regex_error/code
std::regex_traits =&gt; cpp/regex/regex_traits
std::regex_traits::regex_traits =&gt; cpp/regex/regex_traits/regex_traits
std::regex_traits::length =&gt; cpp/regex/regex_traits/length
std::regex_traits::translate =&gt; cpp/regex/regex_traits/translate
std::regex_traits::translate_nocase =&gt; cpp/regex/regex_traits/translate_nocase
std::regex_traits::transform =&gt; cpp/regex/regex_traits/transform
std::regex_traits::transform_primary =&gt; cpp/regex/regex_traits/transform_primary
std::regex_traits::lookup_collatename =&gt; cpp/regex/regex_traits/lookup_collatename
std::regex_traits::lookup_classname =&gt; cpp/regex/regex_traits/lookup_classname
std::regex_traits::isctype =&gt; cpp/regex/regex_traits/isctype
std::regex_traits::value =&gt; cpp/regex/regex_traits/value
std::regex_traits::imbue =&gt; cpp/regex/regex_traits/imbue
std::regex_traits::getloc =&gt; cpp/regex/regex_traits/getloc
std::regex_constants::syntax_option_type =&gt; cpp/regex/syntax_option_type
std::regex_constants::icase =&gt; cpp/regex/syntax_option_type
std::regex_constants::nosubs =&gt; cpp/regex/syntax_option_type
std::regex_constants::optimize =&gt; cpp/regex/syntax_option_type
std::regex_constants::collate =&gt; cpp/regex/syntax_option_type
std::regex_constants::ECMAScript =&gt; cpp/regex/syntax_option_type
std::regex_constants::basic =&gt; cpp/regex/syntax_option_type
std::regex_constants::extended =&gt; cpp/regex/syntax_option_type
std::regex_constants::awk =&gt; cpp/regex/syntax_option_type
std::regex_constants::grep =&gt; cpp/regex/syntax_option_type
std::regex_constants::egrep =&gt; cpp/regex/syntax_option_type
std::regex_constants::match_flag_type =&gt; cpp/regex/match_flag_type
std::regex_constants::match_default =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_bol =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_eol =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_bow =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_eow =&gt; cpp/regex/match_flag_type
std::regex_constants::match_any =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_null =&gt; cpp/regex/match_flag_type
std::regex_constants::match_continuous =&gt; cpp/regex/match_flag_type
std::regex_constants::match_prev_avail =&gt; cpp/regex/match_flag_type
std::regex_constants::format_default =&gt; cpp/regex/match_flag_type
std::regex_constants::format_sed =&gt; cpp/regex/match_flag_type
std::regex_constants::format_no_copy =&gt; cpp/regex/match_flag_type
std::regex_constants::format_first_only =&gt; cpp/regex/match_flag_type
std::regex_constants::error_type =&gt; cpp/regex/error_type
std::regex_constants::error_collate =&gt; cpp/regex/error_type
std::regex_constants::error_ctype =&gt; cpp/regex/error_type
std::regex_constants::error_escape =&gt; cpp/regex/error_type
std::regex_constants::error_backref =&gt; cpp/regex/error_type
std::regex_constants::error_brack =&gt; cpp/regex/error_type
std::regex_constants::error_paren =&gt; cpp/regex/error_type
std::regex_constants::error_brace =&gt; cpp/regex/error_type
std::regex_constants::error_badbrace =&gt; cpp/regex/error_type
std::regex_constants::error_range =&gt; cpp/regex/error_type
std::regex_constants::error_space =&gt; cpp/regex/error_type
std::regex_constants::error_badrepeat =&gt; cpp/regex/error_type
std::regex_constants::error_complexity =&gt; cpp/regex/error_type
std::regex_constants::error_stack =&gt; cpp/regex/error_type
std::atomic =&gt; cpp/atomic/atomic
std::atomic::atomic =&gt; cpp/atomic/atomic/atomic
std::atomic::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic::store =&gt; cpp/atomic/atomic/store
std::atomic::load =&gt; cpp/atomic/atomic/load
std::atomic::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_is_lock_free =&gt; cpp/atomic/atomic_is_lock_free
std::atomic_store =&gt; cpp/atomic/atomic_store
std::atomic_store_explicit =&gt; cpp/atomic/atomic_store
std::atomic_load =&gt; cpp/atomic/atomic_load
std::atomic_load_explicit =&gt; cpp/atomic/atomic_load
std::atomic_exchange =&gt; cpp/atomic/atomic_exchange
std::atomic_exchange_explicit =&gt; cpp/atomic/atomic_exchange
std::atomic_compare_exchange_weak =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_compare_exchange_weak_explicit =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_compare_exchange_strong =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_compare_exchange_strong_explicit =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_fetch_add =&gt; cpp/atomic/atomic_fetch_add
std::atomic_fetch_add_explicit =&gt; cpp/atomic/atomic_fetch_add
std::atomic_fetch_sub =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_sub_explicit =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_and =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_and_explicit =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_or =&gt; cpp/atomic/atomic_fetch_or
std::atomic_fetch_or_explicit =&gt; cpp/atomic/atomic_fetch_or
std::atomic_fetch_xor =&gt; cpp/atomic/atomic_fetch_xor
std::atomic_fetch_xor_explicit =&gt; cpp/atomic/atomic_fetch_xor
std::atomic_flag =&gt; cpp/atomic/atomic_flag
std::atomic_flag::atomic_flag =&gt; cpp/atomic/atomic_flag/atomic_flag
std::atomic_flag::operator= =&gt; cpp/atomic/atomic_flag/operator=
std::atomic_flag::clear =&gt; cpp/atomic/atomic_flag/clear
std::atomic_flag::test_and_set =&gt; cpp/atomic/atomic_flag/test_and_set
std::atomic_init =&gt; cpp/atomic/atomic_init
ATOMIC_VAR_INIT =&gt; cpp/atomic/ATOMIC_VAR_INIT
ATOMIC_FLAG_INIT =&gt; cpp/atomic/ATOMIC_FLAG_INIT
std::memory_order =&gt; cpp/atomic/memory_order
std::memory_order_relaxed =&gt; cpp/atomic/memory_order
std::memory_order_consume =&gt; cpp/atomic/memory_order
std::memory_order_acquire =&gt; cpp/atomic/memory_order
std::memory_order_release =&gt; cpp/atomic/memory_order
std::memory_order_acq_rel =&gt; cpp/atomic/memory_order
std::memory_order_seq_cst =&gt; cpp/atomic/memory_order
std::kill_dependency =&gt; cpp/atomic/kill_dependency
std::atomic_thread_fence =&gt; cpp/atomic/atomic_thread_fence
std::atomic_signal_fence =&gt; cpp/atomic/atomic_signal_fence
std::atomic_bool =&gt; cpp/atomic/atomic
std::atomic_bool::atomic_bool =&gt; cpp/atomic/atomic/atomic
std::atomic_bool::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_bool::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_bool::store =&gt; cpp/atomic/atomic/store
std::atomic_bool::load =&gt; cpp/atomic/atomic/load
std::atomic_bool::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_bool::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_bool::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_bool::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_bool::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_bool::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_bool::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_bool::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_bool::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_bool::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_bool::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_bool::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_bool::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_bool::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_bool::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_bool::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_bool::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_bool::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_schar =&gt; cpp/atomic/atomic
std::atomic_schar::atomic_schar =&gt; cpp/atomic/atomic/atomic
std::atomic_schar::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_schar::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_schar::store =&gt; cpp/atomic/atomic/store
std::atomic_schar::load =&gt; cpp/atomic/atomic/load
std::atomic_schar::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_schar::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_schar::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_schar::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_schar::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_schar::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_schar::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_schar::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_schar::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_schar::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_schar::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_schar::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_schar::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_schar::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_schar::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_schar::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_schar::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_schar::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uchar =&gt; cpp/atomic/atomic
std::atomic_uchar::atomic_uchar =&gt; cpp/atomic/atomic/atomic
std::atomic_uchar::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uchar::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uchar::store =&gt; cpp/atomic/atomic/store
std::atomic_uchar::load =&gt; cpp/atomic/atomic/load
std::atomic_uchar::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uchar::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uchar::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uchar::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uchar::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uchar::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uchar::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uchar::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uchar::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uchar::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uchar::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uchar::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uchar::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uchar::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uchar::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uchar::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uchar::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uchar::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_short =&gt; cpp/atomic/atomic
std::atomic_short::atomic_short =&gt; cpp/atomic/atomic/atomic
std::atomic_short::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_short::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_short::store =&gt; cpp/atomic/atomic/store
std::atomic_short::load =&gt; cpp/atomic/atomic/load
std::atomic_short::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_short::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_short::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_short::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_short::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_short::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_short::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_short::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_short::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_short::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_short::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_short::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_short::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_short::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_short::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_short::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_short::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_short::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ushort =&gt; cpp/atomic/atomic
std::atomic_ushort::atomic_ushort =&gt; cpp/atomic/atomic/atomic
std::atomic_ushort::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_ushort::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_ushort::store =&gt; cpp/atomic/atomic/store
std::atomic_ushort::load =&gt; cpp/atomic/atomic/load
std::atomic_ushort::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_ushort::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_ushort::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ushort::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ushort::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_ushort::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_ushort::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_ushort::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_ushort::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_ushort::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ushort::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ushort::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ushort::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ushort::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ushort::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ushort::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ushort::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ushort::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int =&gt; cpp/atomic/atomic
std::atomic_int::atomic_int =&gt; cpp/atomic/atomic/atomic
std::atomic_int::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int::store =&gt; cpp/atomic/atomic/store
std::atomic_int::load =&gt; cpp/atomic/atomic/load
std::atomic_int::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint =&gt; cpp/atomic/atomic
std::atomic_uint::atomic_uint =&gt; cpp/atomic/atomic/atomic
std::atomic_uint::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint::store =&gt; cpp/atomic/atomic/store
std::atomic_uint::load =&gt; cpp/atomic/atomic/load
std::atomic_uint::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_long =&gt; cpp/atomic/atomic
std::atomic_long::atomic_long =&gt; cpp/atomic/atomic/atomic
std::atomic_long::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_long::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_long::store =&gt; cpp/atomic/atomic/store
std::atomic_long::load =&gt; cpp/atomic/atomic/load
std::atomic_long::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_long::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_long::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_long::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_long::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_long::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_long::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_long::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_long::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_long::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_long::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_long::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_long::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_long::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_long::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_long::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_long::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_long::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ulong =&gt; cpp/atomic/atomic
std::atomic_ulong::atomic_ulong =&gt; cpp/atomic/atomic/atomic
std::atomic_ulong::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_ulong::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_ulong::store =&gt; cpp/atomic/atomic/store
std::atomic_ulong::load =&gt; cpp/atomic/atomic/load
std::atomic_ulong::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_ulong::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_ulong::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ulong::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ulong::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_ulong::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_ulong::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_ulong::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_ulong::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_ulong::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ulong::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ulong::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ulong::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ulong::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ulong::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ulong::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ulong::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ulong::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_llong =&gt; cpp/atomic/atomic
std::atomic_llong::atomic_llong =&gt; cpp/atomic/atomic/atomic
std::atomic_llong::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_llong::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_llong::store =&gt; cpp/atomic/atomic/store
std::atomic_llong::load =&gt; cpp/atomic/atomic/load
std::atomic_llong::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_llong::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_llong::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_llong::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_llong::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_llong::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_llong::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_llong::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_llong::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_llong::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_llong::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_llong::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_llong::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_llong::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_llong::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_llong::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_llong::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_llong::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ullong =&gt; cpp/atomic/atomic
std::atomic_ullong::atomic_ullong =&gt; cpp/atomic/atomic/atomic
std::atomic_ullong::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_ullong::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_ullong::store =&gt; cpp/atomic/atomic/store
std::atomic_ullong::load =&gt; cpp/atomic/atomic/load
std::atomic_ullong::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_ullong::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_ullong::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ullong::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ullong::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_ullong::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_ullong::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_ullong::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_ullong::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_ullong::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ullong::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ullong::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ullong::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ullong::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ullong::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ullong::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ullong::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ullong::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char16_t =&gt; cpp/atomic/atomic
std::atomic_char16_t::atomic_char16_t =&gt; cpp/atomic/atomic/atomic
std::atomic_char16_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_char16_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_char16_t::store =&gt; cpp/atomic/atomic/store
std::atomic_char16_t::load =&gt; cpp/atomic/atomic/load
std::atomic_char16_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_char16_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_char16_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_char16_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_char16_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_char16_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_char16_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_char16_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_char16_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_char16_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char16_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char16_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char16_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char16_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char16_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char16_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char16_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char16_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char32_t =&gt; cpp/atomic/atomic
std::atomic_char32_t::atomic_char32_t =&gt; cpp/atomic/atomic/atomic
std::atomic_char32_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_char32_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_char32_t::store =&gt; cpp/atomic/atomic/store
std::atomic_char32_t::load =&gt; cpp/atomic/atomic/load
std::atomic_char32_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_char32_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_char32_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_char32_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_char32_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_char32_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_char32_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_char32_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_char32_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_char32_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char32_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char32_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char32_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_char32_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char32_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char32_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char32_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_char32_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_wchar_t =&gt; cpp/atomic/atomic
std::atomic_wchar_t::atomic_wchar_t =&gt; cpp/atomic/atomic/atomic
std::atomic_wchar_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_wchar_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_wchar_t::store =&gt; cpp/atomic/atomic/store
std::atomic_wchar_t::load =&gt; cpp/atomic/atomic/load
std::atomic_wchar_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_wchar_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_wchar_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_wchar_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_wchar_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_wchar_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_wchar_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_wchar_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_wchar_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_wchar_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_wchar_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_wchar_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_wchar_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_wchar_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_wchar_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_wchar_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_wchar_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_wchar_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int8_t =&gt; cpp/atomic/atomic
std::atomic_int8_t::atomic_int8_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int8_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int8_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int8_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int8_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int8_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int8_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int8_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int8_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int8_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int8_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int8_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int8_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int8_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int8_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int8_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int8_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int8_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int8_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int8_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int8_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int8_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int8_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint8_t =&gt; cpp/atomic/atomic
std::atomic_uint8_t::atomic_uint8_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint8_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint8_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint8_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint8_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint8_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint8_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint8_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint8_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint8_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint8_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint8_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint8_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint8_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint8_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint8_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint8_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint8_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint8_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint8_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint8_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint8_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint8_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int16_t =&gt; cpp/atomic/atomic
std::atomic_int16_t::atomic_int16_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int16_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int16_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int16_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int16_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int16_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int16_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int16_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int16_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int16_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int16_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int16_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int16_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int16_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int16_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int16_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int16_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int16_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int16_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int16_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int16_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int16_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int16_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint16_t =&gt; cpp/atomic/atomic
std::atomic_uint16_t::atomic_uint16_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint16_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint16_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint16_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint16_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint16_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint16_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint16_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint16_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint16_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint16_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint16_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint16_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint16_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint16_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint16_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint16_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint16_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint16_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint16_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint16_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint16_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint16_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int32_t =&gt; cpp/atomic/atomic
std::atomic_int32_t::atomic_int32_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int32_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int32_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int32_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int32_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int32_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int32_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int32_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int32_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int32_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int32_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int32_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int32_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int32_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int32_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int32_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int32_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int32_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int32_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int32_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int32_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int32_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int32_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint32_t =&gt; cpp/atomic/atomic
std::atomic_uint32_t::atomic_uint32_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint32_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint32_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint32_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint32_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint32_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint32_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint32_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint32_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint32_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint32_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint32_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint32_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint32_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint32_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint32_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint32_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint32_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint32_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint32_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint32_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint32_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint32_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int64_t =&gt; cpp/atomic/atomic
std::atomic_int64_t::atomic_int64_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int64_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int64_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int64_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int64_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int64_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int64_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int64_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int64_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int64_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int64_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int64_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int64_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int64_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int64_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int64_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int64_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int64_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int64_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int64_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int64_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int64_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int64_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint64_t =&gt; cpp/atomic/atomic
std::atomic_uint64_t::atomic_uint64_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint64_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint64_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint64_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint64_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint64_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint64_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint64_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint64_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint64_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint64_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint64_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint64_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint64_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint64_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint64_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint64_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint64_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint64_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint64_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint64_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint64_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint64_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least8_t =&gt; cpp/atomic/atomic
std::atomic_int_least8_t::atomic_int_least8_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_least8_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_least8_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_least8_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_least8_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_least8_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_least8_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_least8_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least8_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least8_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_least8_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_least8_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_least8_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_least8_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_least8_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least8_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least8_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least8_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least8_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least8_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least8_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least8_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least8_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least8_t =&gt; cpp/atomic/atomic
std::atomic_uint_least8_t::atomic_uint_least8_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_least8_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_least8_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_least8_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_least8_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_least8_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_least8_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_least8_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least8_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least8_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_least8_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_least8_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_least8_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_least8_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_least8_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least8_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least8_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least8_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least8_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least8_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least8_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least8_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least8_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least16_t =&gt; cpp/atomic/atomic
std::atomic_int_least16_t::atomic_int_least16_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_least16_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_least16_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_least16_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_least16_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_least16_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_least16_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_least16_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least16_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least16_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_least16_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_least16_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_least16_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_least16_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_least16_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least16_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least16_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least16_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least16_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least16_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least16_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least16_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least16_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least16_t =&gt; cpp/atomic/atomic
std::atomic_uint_least16_t::atomic_uint_least16_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_least16_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_least16_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_least16_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_least16_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_least16_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_least16_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_least16_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least16_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least16_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_least16_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_least16_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_least16_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_least16_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_least16_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least16_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least16_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least16_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least16_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least16_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least16_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least16_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least16_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least32_t =&gt; cpp/atomic/atomic
std::atomic_int_least32_t::atomic_int_least32_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_least32_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_least32_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_least32_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_least32_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_least32_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_least32_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_least32_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least32_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least32_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_least32_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_least32_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_least32_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_least32_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_least32_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least32_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least32_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least32_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least32_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least32_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least32_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least32_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least32_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least32_t =&gt; cpp/atomic/atomic
std::atomic_uint_least32_t::atomic_uint_least32_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_least32_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_least32_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_least32_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_least32_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_least32_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_least32_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_least32_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least32_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least32_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_least32_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_least32_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_least32_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_least32_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_least32_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least32_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least32_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least32_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least32_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least32_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least32_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least32_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least32_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least64_t =&gt; cpp/atomic/atomic
std::atomic_int_least64_t::atomic_int_least64_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_least64_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_least64_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_least64_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_least64_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_least64_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_least64_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_least64_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least64_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_least64_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_least64_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_least64_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_least64_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_least64_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_least64_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least64_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least64_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least64_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_least64_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least64_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least64_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least64_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_least64_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least64_t =&gt; cpp/atomic/atomic
std::atomic_uint_least64_t::atomic_uint_least64_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_least64_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_least64_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_least64_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_least64_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_least64_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_least64_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_least64_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least64_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_least64_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_least64_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_least64_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_least64_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_least64_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_least64_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least64_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least64_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least64_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_least64_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least64_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least64_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least64_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_least64_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast8_t =&gt; cpp/atomic/atomic
std::atomic_int_fast8_t::atomic_int_fast8_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_fast8_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_fast8_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_fast8_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_fast8_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_fast8_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_fast8_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_fast8_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast8_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast8_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_fast8_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_fast8_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_fast8_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_fast8_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_fast8_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast8_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast8_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast8_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast8_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast8_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast8_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast8_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast8_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast8_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast8_t::atomic_uint_fast8_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_fast8_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_fast8_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_fast8_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_fast8_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_fast8_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_fast8_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_fast8_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast8_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast8_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_fast8_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_fast8_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_fast8_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_fast8_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_fast8_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast8_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast8_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast8_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast8_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast8_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast8_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast8_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast8_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast16_t =&gt; cpp/atomic/atomic
std::atomic_int_fast16_t::atomic_int_fast16_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_fast16_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_fast16_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_fast16_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_fast16_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_fast16_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_fast16_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_fast16_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast16_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast16_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_fast16_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_fast16_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_fast16_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_fast16_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_fast16_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast16_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast16_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast16_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast16_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast16_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast16_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast16_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast16_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast16_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast16_t::atomic_uint_fast16_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_fast16_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_fast16_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_fast16_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_fast16_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_fast16_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_fast16_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_fast16_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast16_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast16_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_fast16_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_fast16_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_fast16_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_fast16_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_fast16_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast16_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast16_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast16_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast16_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast16_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast16_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast16_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast16_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast32_t =&gt; cpp/atomic/atomic
std::atomic_int_fast32_t::atomic_int_fast32_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_fast32_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_fast32_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_fast32_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_fast32_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_fast32_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_fast32_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_fast32_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast32_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast32_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_fast32_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_fast32_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_fast32_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_fast32_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_fast32_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast32_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast32_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast32_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast32_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast32_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast32_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast32_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast32_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast32_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast32_t::atomic_uint_fast32_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_fast32_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_fast32_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_fast32_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_fast32_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_fast32_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_fast32_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_fast32_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast32_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast32_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_fast32_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_fast32_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_fast32_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_fast32_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_fast32_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast32_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast32_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast32_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast32_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast32_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast32_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast32_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast32_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast64_t =&gt; cpp/atomic/atomic
std::atomic_int_fast64_t::atomic_int_fast64_t =&gt; cpp/atomic/atomic/atomic
std::atomic_int_fast64_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_int_fast64_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_int_fast64_t::store =&gt; cpp/atomic/atomic/store
std::atomic_int_fast64_t::load =&gt; cpp/atomic/atomic/load
std::atomic_int_fast64_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_int_fast64_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_int_fast64_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast64_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_int_fast64_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_int_fast64_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_int_fast64_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_int_fast64_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_int_fast64_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_int_fast64_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast64_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast64_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast64_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_int_fast64_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast64_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast64_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast64_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_int_fast64_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast64_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast64_t::atomic_uint_fast64_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uint_fast64_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uint_fast64_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uint_fast64_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uint_fast64_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uint_fast64_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uint_fast64_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uint_fast64_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast64_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uint_fast64_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uint_fast64_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uint_fast64_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uint_fast64_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uint_fast64_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uint_fast64_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast64_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast64_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast64_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uint_fast64_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast64_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast64_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast64_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uint_fast64_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intptr_t =&gt; cpp/atomic/atomic
std::atomic_intptr_t::atomic_intptr_t =&gt; cpp/atomic/atomic/atomic
std::atomic_intptr_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_intptr_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_intptr_t::store =&gt; cpp/atomic/atomic/store
std::atomic_intptr_t::load =&gt; cpp/atomic/atomic/load
std::atomic_intptr_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_intptr_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_intptr_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_intptr_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_intptr_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_intptr_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_intptr_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_intptr_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_intptr_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_intptr_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intptr_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intptr_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intptr_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intptr_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intptr_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intptr_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intptr_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intptr_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintptr_t =&gt; cpp/atomic/atomic
std::atomic_uintptr_t::atomic_uintptr_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uintptr_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uintptr_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uintptr_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uintptr_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uintptr_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uintptr_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uintptr_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uintptr_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uintptr_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uintptr_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uintptr_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uintptr_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uintptr_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uintptr_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintptr_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintptr_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintptr_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintptr_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintptr_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintptr_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintptr_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintptr_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_size_t =&gt; cpp/atomic/atomic
std::atomic_size_t::atomic_size_t =&gt; cpp/atomic/atomic/atomic
std::atomic_size_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_size_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_size_t::store =&gt; cpp/atomic/atomic/store
std::atomic_size_t::load =&gt; cpp/atomic/atomic/load
std::atomic_size_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_size_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_size_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_size_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_size_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_size_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_size_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_size_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_size_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_size_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_size_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_size_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_size_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_size_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_size_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_size_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_size_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_size_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ptrdiff_t =&gt; cpp/atomic/atomic
std::atomic_ptrdiff_t::atomic_ptrdiff_t =&gt; cpp/atomic/atomic/atomic
std::atomic_ptrdiff_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_ptrdiff_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_ptrdiff_t::store =&gt; cpp/atomic/atomic/store
std::atomic_ptrdiff_t::load =&gt; cpp/atomic/atomic/load
std::atomic_ptrdiff_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_ptrdiff_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_ptrdiff_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ptrdiff_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_ptrdiff_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_ptrdiff_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_ptrdiff_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_ptrdiff_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_ptrdiff_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_ptrdiff_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ptrdiff_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ptrdiff_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ptrdiff_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_ptrdiff_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ptrdiff_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ptrdiff_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ptrdiff_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_ptrdiff_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intmax_t =&gt; cpp/atomic/atomic
std::atomic_intmax_t::atomic_intmax_t =&gt; cpp/atomic/atomic/atomic
std::atomic_intmax_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_intmax_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_intmax_t::store =&gt; cpp/atomic/atomic/store
std::atomic_intmax_t::load =&gt; cpp/atomic/atomic/load
std::atomic_intmax_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_intmax_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_intmax_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_intmax_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_intmax_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_intmax_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_intmax_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_intmax_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_intmax_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_intmax_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intmax_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intmax_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intmax_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_intmax_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intmax_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intmax_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intmax_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_intmax_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintmax_t =&gt; cpp/atomic/atomic
std::atomic_uintmax_t::atomic_uintmax_t =&gt; cpp/atomic/atomic/atomic
std::atomic_uintmax_t::operator= =&gt; cpp/atomic/atomic/operator=
std::atomic_uintmax_t::is_lock_free =&gt; cpp/atomic/atomic/is_lock_free
std::atomic_uintmax_t::store =&gt; cpp/atomic/atomic/store
std::atomic_uintmax_t::load =&gt; cpp/atomic/atomic/load
std::atomic_uintmax_t::operator T =&gt; cpp/atomic/atomic/operator_T
std::atomic_uintmax_t::exchange =&gt; cpp/atomic/atomic/exchange
std::atomic_uintmax_t::compare_exchange_strong =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uintmax_t::compare_exchange_weak =&gt; cpp/atomic/atomic/compare_exchange
std::atomic_uintmax_t::fetch_add =&gt; cpp/atomic/atomic/fetch_add
std::atomic_uintmax_t::fetch_sub =&gt; cpp/atomic/atomic/fetch_sub
std::atomic_uintmax_t::fetch_and =&gt; cpp/atomic/atomic/fetch_and
std::atomic_uintmax_t::fetch_or =&gt; cpp/atomic/atomic/fetch_or
std::atomic_uintmax_t::fetch_xor =&gt; cpp/atomic/atomic/fetch_xor
std::atomic_uintmax_t::operator++ =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintmax_t::operator++(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintmax_t::operator-- =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintmax_t::operator--(int) =&gt; cpp/atomic/atomic/operator_arith
std::atomic_uintmax_t::operator+= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintmax_t::operator-= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintmax_t::operator&amp;= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintmax_t::operator|= =&gt; cpp/atomic/atomic/operator_arith2
std::atomic_uintmax_t::operator^= =&gt; cpp/atomic/atomic/operator_arith2
std::thread =&gt; cpp/thread/thread
std::thread::thread =&gt; cpp/thread/thread/thread
std::thread::~thread =&gt; cpp/thread/thread/~thread
std::thread::operator= =&gt; cpp/thread/thread/operator=
std::thread::joinable =&gt; cpp/thread/thread/joinable
std::thread::get_id =&gt; cpp/thread/thread/get_id
std::thread::native_handle =&gt; cpp/thread/thread/native_handle
std::thread::hardware_concurrency =&gt; cpp/thread/thread/hardware_concurrency
std::thread::join =&gt; cpp/thread/thread/join
std::thread::detach =&gt; cpp/thread/thread/detach
std::thread::swap =&gt; cpp/thread/thread/swap
std::swap(std::thread) =&gt; cpp/thread/thread/swap2
std::thread::id =&gt; cpp/thread/thread/id
std::thread::id::id =&gt; cpp/thread/thread/id/id
std::thread::id::operator== =&gt; cpp/thread/thread/id/operator_cmp
std::thread::id::operator!= =&gt; cpp/thread/thread/id/operator_cmp
std::thread::id::operator&lt; =&gt; cpp/thread/thread/id/operator_cmp
std::thread::id::operator&lt;= =&gt; cpp/thread/thread/id/operator_cmp
std::thread::id::operator&gt; =&gt; cpp/thread/thread/id/operator_cmp
std::thread::id::operator&gt;= =&gt; cpp/thread/thread/id/operator_cmp
std::thread::id::operator&lt;&lt; =&gt; cpp/thread/thread/id/operator_ltlt
std::hash&lt;std::thread::id&gt; =&gt; cpp/thread/thread/id/hash
std::this_thread::get_id =&gt; cpp/thread/get_id
std::this_thread::sleep_for =&gt; cpp/thread/sleep_for
std::this_thread::sleep_until =&gt; cpp/thread/sleep_until
std::this_thread::yield =&gt; cpp/thread/yield
std::hardware_constructive_interference_size =&gt; cpp/thread/hardware_destructive_interference_size
std::hardware_destructive_interference_size =&gt; cpp/thread/hardware_destructive_interference_size
std::mutex =&gt; cpp/thread/mutex
std::mutex::mutex =&gt; cpp/thread/mutex/mutex
std::mutex::lock =&gt; cpp/thread/mutex/lock
std::mutex::try_lock =&gt; cpp/thread/mutex/try_lock
std::mutex::unlock =&gt; cpp/thread/mutex/unlock
std::mutex::native_handle =&gt; cpp/thread/mutex/native_handle
std::recursive_mutex =&gt; cpp/thread/recursive_mutex
std::recursive_mutex::recursive_mutex =&gt; cpp/thread/recursive_mutex/recursive_mutex
std::recursive_mutex::lock =&gt; cpp/thread/recursive_mutex/lock
std::recursive_mutex::try_lock =&gt; cpp/thread/recursive_mutex/try_lock
std::recursive_mutex::unlock =&gt; cpp/thread/recursive_mutex/unlock
std::recursive_mutex::native_handle =&gt; cpp/thread/recursive_mutex/native_handle
std::timed_mutex =&gt; cpp/thread/timed_mutex
std::timed_mutex::timed_mutex =&gt; cpp/thread/timed_mutex/timed_mutex
std::timed_mutex::lock =&gt; cpp/thread/timed_mutex/lock
std::timed_mutex::try_lock =&gt; cpp/thread/timed_mutex/try_lock
std::timed_mutex::try_lock_for =&gt; cpp/thread/timed_mutex/try_lock_for
std::timed_mutex::try_lock_until =&gt; cpp/thread/timed_mutex/try_lock_until
std::timed_mutex::unlock =&gt; cpp/thread/timed_mutex/unlock
std::timed_mutex::native_handle =&gt; cpp/thread/timed_mutex/native_handle
std::recursive_timed_mutex =&gt; cpp/thread/recursive_timed_mutex
std::recursive_timed_mutex::recursive_timed_mutex =&gt; cpp/thread/recursive_timed_mutex/recursive_timed_mutex
std::recursive_timed_mutex::lock =&gt; cpp/thread/recursive_timed_mutex/lock
std::recursive_timed_mutex::try_lock =&gt; cpp/thread/recursive_timed_mutex/try_lock
std::recursive_timed_mutex::try_lock_for =&gt; cpp/thread/recursive_timed_mutex/try_lock_for
std::recursive_timed_mutex::try_lock_until =&gt; cpp/thread/recursive_timed_mutex/try_lock_until
std::recursive_timed_mutex::unlock =&gt; cpp/thread/recursive_timed_mutex/unlock
std::recursive_timed_mutex::native_handle =&gt; cpp/thread/recursive_timed_mutex/native_handle
std::shared_timed_mutex =&gt; cpp/thread/shared_timed_mutex
std::shared_timed_mutex::shared_timed_mutex =&gt; cpp/thread/shared_timed_mutex/shared_timed_mutex
std::shared_timed_mutex::lock =&gt; cpp/thread/shared_timed_mutex/lock
std::shared_timed_mutex::try_lock =&gt; cpp/thread/shared_timed_mutex/try_lock
std::shared_timed_mutex::try_lock_for =&gt; cpp/thread/shared_timed_mutex/try_lock_for
std::shared_timed_mutex::try_lock_until =&gt; cpp/thread/shared_timed_mutex/try_lock_until
std::shared_timed_mutex::unlock =&gt; cpp/thread/shared_timed_mutex/unlock
std::shared_timed_mutex::lock_shared =&gt; cpp/thread/shared_timed_mutex/lock_shared
std::shared_timed_mutex::try_lock_shared =&gt; cpp/thread/shared_timed_mutex/try_lock_shared
std::shared_timed_mutex::try_lock_shared_for =&gt; cpp/thread/shared_timed_mutex/try_lock_shared_for
std::shared_timed_mutex::try_lock_shared_until =&gt; cpp/thread/shared_timed_mutex/try_lock_shared_until
std::shared_timed_mutex::unlock_shared =&gt; cpp/thread/shared_timed_mutex/unlock_shared
std::shared_mutex =&gt; cpp/thread/shared_mutex
std::shared_mutex::shared_mutex =&gt; cpp/thread/shared_mutex/shared_mutex
std::shared_mutex::lock =&gt; cpp/thread/shared_mutex/lock
std::shared_mutex::try_lock =&gt; cpp/thread/shared_mutex/try_lock
std::shared_mutex::unlock =&gt; cpp/thread/shared_mutex/unlock
std::shared_mutex::lock_shared =&gt; cpp/thread/shared_mutex/lock_shared
std::shared_mutex::try_lock_shared =&gt; cpp/thread/shared_mutex/try_lock_shared
std::shared_mutex::unlock_shared =&gt; cpp/thread/shared_mutex/unlock_shared
std::shared_mutex::native_handle =&gt; cpp/thread/shared_mutex/native_handle
std::defer_lock_t =&gt; cpp/thread/lock_tag_t
std::try_to_lock_t =&gt; cpp/thread/lock_tag_t
std::adopt_lock_t =&gt; cpp/thread/lock_tag_t
std::defer_lock =&gt; cpp/thread/lock_tag
std::try_to_lock =&gt; cpp/thread/lock_tag
std::adopt_lock =&gt; cpp/thread/lock_tag
std::lock_guard =&gt; cpp/thread/lock_guard
std::lock_guard::lock_guard =&gt; cpp/thread/lock_guard/lock_guard
std::lock_guard::~lock_guard =&gt; cpp/thread/lock_guard/~lock_guard
std::unique_lock =&gt; cpp/thread/unique_lock
std::unique_lock::unique_lock =&gt; cpp/thread/unique_lock/unique_lock
std::unique_lock::~unique_lock =&gt; cpp/thread/unique_lock/~unique_lock
std::unique_lock::operator= =&gt; cpp/thread/unique_lock/operator=
std::unique_lock::lock =&gt; cpp/thread/unique_lock/lock
std::unique_lock::try_lock =&gt; cpp/thread/unique_lock/try_lock
std::unique_lock::try_lock_for =&gt; cpp/thread/unique_lock/try_lock_for
std::unique_lock::try_lock_until =&gt; cpp/thread/unique_lock/try_lock_until
std::unique_lock::unlock =&gt; cpp/thread/unique_lock/unlock
std::unique_lock::swap =&gt; cpp/thread/unique_lock/swap
std::unique_lock::release =&gt; cpp/thread/unique_lock/release
std::unique_lock::mutex =&gt; cpp/thread/unique_lock/mutex
std::unique_lock::owns_lock =&gt; cpp/thread/unique_lock/owns_lock
std::unique_lock::operator bool =&gt; cpp/thread/unique_lock/operator_bool
std::swap(std::unique_lock) =&gt; cpp/thread/unique_lock/swap2
std::shared_lock =&gt; cpp/thread/shared_lock
std::shared_lock::shared_lock =&gt; cpp/thread/shared_lock/shared_lock
std::shared_lock::~shared_lock =&gt; cpp/thread/shared_lock/~shared_lock
std::shared_lock::operator= =&gt; cpp/thread/shared_lock/operator=
std::shared_lock::lock =&gt; cpp/thread/shared_lock/lock
std::shared_lock::try_lock =&gt; cpp/thread/shared_lock/try_lock
std::shared_lock::try_lock_for =&gt; cpp/thread/shared_lock/try_lock_for
std::shared_lock::try_lock_until =&gt; cpp/thread/shared_lock/try_lock_until
std::shared_lock::unlock =&gt; cpp/thread/shared_lock/unlock
std::shared_lock::swap =&gt; cpp/thread/shared_lock/swap
std::shared_lock::release =&gt; cpp/thread/shared_lock/release
std::shared_lock::mutex =&gt; cpp/thread/shared_lock/mutex
std::shared_lock::owns_lock =&gt; cpp/thread/shared_lock/owns_lock
std::shared_lock::operator bool =&gt; cpp/thread/shared_lock/operator_bool
std::swap(std::shared_lock) =&gt; cpp/thread/shared_lock/swap2
std::lock =&gt; cpp/thread/lock
std::try_lock =&gt; cpp/thread/try_lock
std::condition_variable =&gt; cpp/thread/condition_variable
std::condition_variable::condition_variable =&gt; cpp/thread/condition_variable/condition_variable
std::condition_variable::~condition_variable =&gt; cpp/thread/condition_variable/~condition_variable
std::condition_variable::notify_one =&gt; cpp/thread/condition_variable/notify_one
std::condition_variable::notify_all =&gt; cpp/thread/condition_variable/notify_all
std::condition_variable::wait =&gt; cpp/thread/condition_variable/wait
std::condition_variable::wait_for =&gt; cpp/thread/condition_variable/wait_for
std::condition_variable::wait_until =&gt; cpp/thread/condition_variable/wait_until
std::condition_variable::native_handle =&gt; cpp/thread/condition_variable/native_handle
std::condition_variable_any =&gt; cpp/thread/condition_variable_any
std::condition_variable_any::condition_variable_any =&gt; cpp/thread/condition_variable_any/condition_variable_any
std::condition_variable_any::~condition_variable_any =&gt; cpp/thread/condition_variable_any/~condition_variable_any
std::condition_variable_any::notify_one =&gt; cpp/thread/condition_variable_any/notify_one
std::condition_variable_any::notify_all =&gt; cpp/thread/condition_variable_any/notify_all
std::condition_variable_any::wait =&gt; cpp/thread/condition_variable_any/wait
std::condition_variable_any::wait_for =&gt; cpp/thread/condition_variable_any/wait_for
std::condition_variable_any::wait_until =&gt; cpp/thread/condition_variable_any/wait_until
std::condition_variable_any::native_handle =&gt; cpp/thread/condition_variable_any/native_handle
std::notify_all_at_thread_exit =&gt; cpp/thread/notify_all_at_thread_exit
std::once_flag =&gt; cpp/thread/once_flag
std::once_flag::once_flag =&gt; cpp/thread/once_flag
std::call_once =&gt; cpp/thread/call_once
std::cv_status =&gt; cpp/thread/cv_status
std::cv_status::no_timeout =&gt; cpp/thread/cv_status
std::cv_status::timeout =&gt; cpp/thread/cv_status
std::promise =&gt; cpp/thread/promise
std::promise::promise =&gt; cpp/thread/promise/promise
std::promise::~promise =&gt; cpp/thread/promise/~promise
std::promise::operator= =&gt; cpp/thread/promise/operator=
std::promise::swap =&gt; cpp/thread/promise/swap
std::promise::get_future =&gt; cpp/thread/promise/get_future
std::promise::set_value =&gt; cpp/thread/promise/set_value
std::promise::set_value_at_thread_exit =&gt; cpp/thread/promise/set_value_at_thread_exit
std::promise::set_exception =&gt; cpp/thread/promise/set_exception
std::promise::set_exception_at_thread_exit =&gt; cpp/thread/promise/set_exception_at_thread_exit
std::uses_allocator&lt;std::promise&gt; =&gt; cpp/thread/promise/uses_allocator
std::future =&gt; cpp/thread/future
std::future::future =&gt; cpp/thread/future/future
std::future::~future =&gt; cpp/thread/future/~future
std::future::operator= =&gt; cpp/thread/future/operator=
std::future::share =&gt; cpp/thread/future/share
std::future::get =&gt; cpp/thread/future/get
std::future::valid =&gt; cpp/thread/future/valid
std::future::wait =&gt; cpp/thread/future/wait
std::future::wait_for =&gt; cpp/thread/future/wait_for
std::future::wait_until =&gt; cpp/thread/future/wait_until
std::shared_future =&gt; cpp/thread/shared_future
std::shared_future::shared_future =&gt; cpp/thread/shared_future/shared_future
std::shared_future::~shared_future =&gt; cpp/thread/shared_future/~shared_future
std::shared_future::operator= =&gt; cpp/thread/shared_future/operator=
std::shared_future::get =&gt; cpp/thread/shared_future/get
std::shared_future::valid =&gt; cpp/thread/shared_future/valid
std::shared_future::wait =&gt; cpp/thread/shared_future/wait
std::shared_future::wait_for =&gt; cpp/thread/shared_future/wait_for
std::shared_future::wait_until =&gt; cpp/thread/shared_future/wait_until
std::future_category =&gt; cpp/thread/future/future_category
std::packaged_task =&gt; cpp/thread/packaged_task
std::packaged_task::packaged_task =&gt; cpp/thread/packaged_task/packaged_task
std::packaged_task::~packaged_task =&gt; cpp/thread/packaged_task/~packaged_task
std::packaged_task::operator= =&gt; cpp/thread/packaged_task/operator=
std::packaged_task::valid =&gt; cpp/thread/packaged_task/valid
std::packaged_task::swap =&gt; cpp/thread/packaged_task/swap
std::packaged_task::get_future =&gt; cpp/thread/packaged_task/get_future
std::packaged_task::operator() =&gt; cpp/thread/packaged_task/operator()
std::packaged_task::make_ready_at_thread_exit =&gt; cpp/thread/packaged_task/make_ready_at_thread_exit
std::packaged_task::reset =&gt; cpp/thread/packaged_task/reset
std::uses_allocator&lt;std::packaged_task&gt; =&gt; cpp/thread/packaged_task/uses_allocator
std::async =&gt; cpp/thread/async
std::launch =&gt; cpp/thread/launch
std::launch::async =&gt; cpp/thread/launch
std::launch::deferred =&gt; cpp/thread/launch
std::future_status =&gt; cpp/thread/future_status
std::future_status::ready =&gt; cpp/thread/future_status
std::future_status::timeout =&gt; cpp/thread/future_status
std::future_status::deferred =&gt; cpp/thread/future_status
std::future_error =&gt; cpp/thread/future_error
std::future_error::what =&gt; cpp/error/exception/what
std::future_error::future_error =&gt; cpp/thread/future_error/future_error
std::future_error::code =&gt; cpp/thread/future_error/code
std::future_error::what =&gt; cpp/thread/future_error/what
std::future_category =&gt; cpp/thread/future_category
std::future_errc =&gt; cpp/thread/future_errc
std::future_errc::broken_promise =&gt; cpp/thread/future_errc
std::future_errc::future_already_retrieved =&gt; cpp/thread/future_errc
std::future_errc::promise_already_satisfied =&gt; cpp/thread/future_errc
std::future_errc::no_state =&gt; cpp/thread/future_errc
std::is_error_code_enum&lt;std::future_errc&gt; =&gt; cpp/thread/future_errc/is_error_code_enum
std::make_error_code(std::future_errc) =&gt; cpp/thread/future_errc/make_error_code
std::make_error_condition(std::future_errc) =&gt; cpp/thread/future_errc/make_error_condition
std::filesystem::path =&gt; cpp/filesystem/path
std::filesystem::path::path =&gt; cpp/filesystem/path/path
std::filesystem::path::~path =&gt; cpp/filesystem/path/~path
std::filesystem::path::operator= =&gt; cpp/filesystem/path/operator=
std::filesystem::path::assign =&gt; cpp/filesystem/path/assign
std::filesystem::path::preferred_separator =&gt; cpp/filesystem/path
std::filesystem::path::append =&gt; cpp/filesystem/path/append
std::filesystem::path::operator/= =&gt; cpp/filesystem/path/append
std::filesystem::path::concat =&gt; cpp/filesystem/path/concat
std::filesystem::path::operator+= =&gt; cpp/filesystem/path/concat
std::filesystem::path::clear =&gt; cpp/filesystem/path/clear
std::filesystem::path::make_preferred =&gt; cpp/filesystem/path/make_preferred
std::filesystem::path::remove_filename =&gt; cpp/filesystem/path/remove_filename
std::filesystem::path::replace_filename =&gt; cpp/filesystem/path/replace_filename
std::filesystem::path::replace_extension =&gt; cpp/filesystem/path/replace_extension
std::filesystem::path::swap =&gt; cpp/filesystem/path/swap
std::filesystem::path::c_str =&gt; cpp/filesystem/path/native
std::filesystem::path::native =&gt; cpp/filesystem/path/native
std::filesystem::path::operator string_type =&gt; cpp/filesystem/path/native
std::filesystem::path::string =&gt; cpp/filesystem/path/string
std::filesystem::path::wstring =&gt; cpp/filesystem/path/string
std::filesystem::path::u8string =&gt; cpp/filesystem/path/string
std::filesystem::path::u16string =&gt; cpp/filesystem/path/string
std::filesystem::path::u32string =&gt; cpp/filesystem/path/string
std::filesystem::path::generic_string =&gt; cpp/filesystem/path/generic_string
std::filesystem::path::generic_wstring =&gt; cpp/filesystem/path/generic_string
std::filesystem::path::generic_u8string =&gt; cpp/filesystem/path/generic_string
std::filesystem::path::generic_u16string =&gt; cpp/filesystem/path/generic_string
std::filesystem::path::generic_u32string =&gt; cpp/filesystem/path/generic_string
std::filesystem::path::compare =&gt; cpp/filesystem/path/compare
std::filesystem::path::lexically_normal =&gt; cpp/filesystem/path/lexically_normal
std::filesystem::path::lexically_proximate =&gt; cpp/filesystem/path/lexically_normal
std::filesystem::path::lexically_relative =&gt; cpp/filesystem/path/lexically_normal
std::filesystem::path::root_name =&gt; cpp/filesystem/path/root_name
std::filesystem::path::root_directory =&gt; cpp/filesystem/path/root_directory
std::filesystem::path::root_path =&gt; cpp/filesystem/path/root_path
std::filesystem::path::relative_path =&gt; cpp/filesystem/path/relative_path
std::filesystem::path::parent_path =&gt; cpp/filesystem/path/parent_path
std::filesystem::path::filename =&gt; cpp/filesystem/path/filename
std::filesystem::path::stem =&gt; cpp/filesystem/path/stem
std::filesystem::path::extension =&gt; cpp/filesystem/path/extension
std::filesystem::path::empty =&gt; cpp/filesystem/path/empty
std::filesystem::path::has_root_path =&gt; cpp/filesystem/path/has_path
std::filesystem::path::has_root_name =&gt; cpp/filesystem/path/has_path
std::filesystem::path::has_root_directory =&gt; cpp/filesystem/path/has_path
std::filesystem::path::has_relative_path =&gt; cpp/filesystem/path/has_path
std::filesystem::path::has_parent_path =&gt; cpp/filesystem/path/has_path
std::filesystem::path::has_filename =&gt; cpp/filesystem/path/has_path
std::filesystem::path::has_stem =&gt; cpp/filesystem/path/has_path
std::filesystem::path::has_extension =&gt; cpp/filesystem/path/has_path
std::filesystem::path::is_absolute =&gt; cpp/filesystem/path/is_absrel
std::filesystem::path::is_relative =&gt; cpp/filesystem/path/is_absrel
std::filesystem::path::begin =&gt; cpp/filesystem/path/begin
std::filesystem::path::end =&gt; cpp/filesystem/path/begin
std::swap(std::filesystem::path) =&gt; cpp/filesystem/path/swap2
operator==(std::filesystem::path) =&gt; cpp/filesystem/path/operator_cmp
operator!=(std::filesystem::path) =&gt; cpp/filesystem/path/operator_cmp
operator&lt;(std::filesystem::path) =&gt; cpp/filesystem/path/operator_cmp
operator&lt;=(std::filesystem::path) =&gt; cpp/filesystem/path/operator_cmp
operator&gt;(std::filesystem::path) =&gt; cpp/filesystem/path/operator_cmp
operator&gt;=(std::filesystem::path) =&gt; cpp/filesystem/path/operator_cmp
operator/(std::filesystem::path) =&gt; cpp/filesystem/path/operator_slash
operator&lt;&lt;(std::filesystem::path) =&gt; cpp/filesystem/path/operator_ltltgtgt
operator&gt;&gt;(std::filesystem::path) =&gt; cpp/filesystem/path/operator_ltltgtgt
std::filesystem::hash_value(std::filesystem::path) =&gt; cpp/filesystem/path/hash_value
std::filesystem::u8path =&gt; cpp/filesystem/path/u8path
std::filesystem::filesystem_error =&gt; cpp/filesystem/filesystem_error
std::filesystem::filesystem_error::filesystem_error =&gt; cpp/filesystem/filesystem_error/filesystem_error
std::filesystem::filesystem_error::path1 =&gt; cpp/filesystem/filesystem_error/path
std::filesystem::filesystem_error::path2 =&gt; cpp/filesystem/filesystem_error/path
std::filesystem::filesystem_error::what =&gt; cpp/filesystem/filesystem_error/what
std::filesystem::directory_entry =&gt; cpp/filesystem/directory_entry
std::filesystem::directory_entry::directory_entry =&gt; cpp/filesystem/directory_entry/directory_entry
std::filesystem::directory_entry::operator= =&gt; cpp/filesystem/directory_entry/operator=
std::filesystem::directory_entry::assign =&gt; cpp/filesystem/directory_entry/assign
std::filesystem::directory_entry::replace_filename =&gt; cpp/filesystem/directory_entry/replace_filename
std::filesystem::directory_entry::path =&gt; cpp/filesystem/directory_entry/path
operator const path&amp;(std::filesystem::directory_entry) =&gt; cpp/filesystem/directory_entry/path
std::filesystem::directory_entry::status =&gt; cpp/filesystem/directory_entry/status
std::filesystem::directory_entry::symlink_status =&gt; cpp/filesystem/directory_entry/status
operator==(std::filesystem::directory_entry) =&gt; cpp/filesystem/directory_entry/operator_cmp
operator!=(std::filesystem::directory_entry) =&gt; cpp/filesystem/directory_entry/operator_cmp
operator&lt;(std::filesystem::directory_entry) =&gt; cpp/filesystem/directory_entry/operator_cmp
operator&lt;=(std::filesystem::directory_entry) =&gt; cpp/filesystem/directory_entry/operator_cmp
operator&gt;(std::filesystem::directory_entry) =&gt; cpp/filesystem/directory_entry/operator_cmp
operator&gt;=(std::filesystem::directory_entry) =&gt; cpp/filesystem/directory_entry/operator_cmp
std::filesystem::directory_iterator =&gt; cpp/filesystem/directory_iterator
std::filesystem::directory_iterator::directory_iterator =&gt; cpp/filesystem/directory_iterator/directory_iterator
std::filesystem::directory_iterator::operator= =&gt; cpp/filesystem/directory_iterator/operator=
std::filesystem::directory_iterator::operator* =&gt; cpp/filesystem/directory_iterator/operator*
std::filesystem::directory_iterator::operator-&gt; =&gt; cpp/filesystem/directory_iterator/operator*
std::filesystem::directory_iterator::increment =&gt; cpp/filesystem/directory_iterator/increment
std::filesystem::directory_iterator::operator++ =&gt; cpp/filesystem/directory_iterator/increment
operator==(std::filesystem::directory_iterator) =&gt; cpp/filesystem/directory_iterator
operator!=(std::filesystem::directory_iterator) =&gt; cpp/filesystem/directory_iterator
std::filesystem::begin(std::filesystem::directory_iterator) =&gt; cpp/filesystem/directory_iterator/begin
std::filesystem::end(std::filesystem::directory_iterator) =&gt; cpp/filesystem/directory_iterator/begin
std::filesystem::recursive_directory_iterator =&gt; cpp/filesystem/recursive_directory_iterator
std::filesystem::recursive_directory_iterator::recursive_directory_iterator =&gt; cpp/filesystem/recursive_directory_iterator/recursive_directory_iterator
std::filesystem::recursive_directory_iterator::operator* =&gt; cpp/filesystem/recursive_directory_iterator/operator*
std::filesystem::recursive_directory_iterator::operator-&gt; =&gt; cpp/filesystem/recursive_directory_iterator/operator*
std::filesystem::recursive_directory_iterator::options =&gt; cpp/filesystem/recursive_directory_iterator/options
std::filesystem::recursive_directory_iterator::depth =&gt; cpp/filesystem/recursive_directory_iterator/depth
std::filesystem::recursive_directory_iterator::recursion_pending =&gt; cpp/filesystem/recursive_directory_iterator/recursion_pending
std::filesystem::recursive_directory_iterator::operator= =&gt; cpp/filesystem/recursive_directory_iterator/operator=
std::filesystem::recursive_directory_iterator::increment =&gt; cpp/filesystem/recursive_directory_iterator/increment
std::filesystem::recursive_directory_iterator::operator++ =&gt; cpp/filesystem/recursive_directory_iterator/increment
std::filesystem::recursive_directory_iterator::pop =&gt; cpp/filesystem/recursive_directory_iterator/pop
std::filesystem::recursive_directory_iterator::disable_recursion_pending =&gt; cpp/filesystem/recursive_directory_iterator/disable_recursion_pending
operator==(std::filesystem::recursive_directory_iterator) =&gt; cpp/filesystem/recursive_directory_iterator
operator!=(std::filesystem::recursive_directory_iterator) =&gt; cpp/filesystem/recursive_directory_iterator
std::filesystem::begin(std::filesystem::recursive_directory_iterator) =&gt; cpp/filesystem/recursive_directory_iterator/begin
std::filesystem::end(std::filesystem::recursive_directory_iterator) =&gt; cpp/filesystem/recursive_directory_iterator/begin
std::filesystem::file_status =&gt; cpp/filesystem/file_status
std::filesystem::file_status::file_status =&gt; cpp/filesystem/file_status/file_status
std::filesystem::file_status::~file_status =&gt; cpp/filesystem/file_status/~file_status
std::filesystem::file_status::operator= =&gt; cpp/filesystem/file_status/operator=
std::filesystem::file_status::type =&gt; cpp/filesystem/file_status/type
std::filesystem::file_status::permissions =&gt; cpp/filesystem/file_status/permissions
std::filesystem::space_info =&gt; cpp/filesystem/space_info
std::filesystem::space_info::capacity =&gt; cpp/filesystem/space_info
std::filesystem::space_info::free =&gt; cpp/filesystem/space_info
std::filesystem::space_info::available =&gt; cpp/filesystem/space_info
std::filesystem::file_type =&gt; cpp/filesystem/file_type
std::filesystem::file_type::none =&gt; cpp/filesystem/file_type
std::filesystem::file_type::not_found =&gt; cpp/filesystem/file_type
std::filesystem::file_type::regular =&gt; cpp/filesystem/file_type
std::filesystem::file_type::directory =&gt; cpp/filesystem/file_type
std::filesystem::file_type::symlink =&gt; cpp/filesystem/file_type
std::filesystem::file_type::block =&gt; cpp/filesystem/file_type
std::filesystem::file_type::character =&gt; cpp/filesystem/file_type
std::filesystem::file_type::fifo =&gt; cpp/filesystem/file_type
std::filesystem::file_type::socket =&gt; cpp/filesystem/file_type
std::filesystem::file_type::unknown =&gt; cpp/filesystem/file_type
std::filesystem::perms =&gt; cpp/filesystem/perms
std::filesystem::perms::none =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_read =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_write =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_exec =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_all =&gt; cpp/filesystem/perms
std::filesystem::perms::group_read =&gt; cpp/filesystem/perms
std::filesystem::perms::group_write =&gt; cpp/filesystem/perms
std::filesystem::perms::group_exec =&gt; cpp/filesystem/perms
std::filesystem::perms::group_all =&gt; cpp/filesystem/perms
std::filesystem::perms::others_read =&gt; cpp/filesystem/perms
std::filesystem::perms::others_write =&gt; cpp/filesystem/perms
std::filesystem::perms::others_exec =&gt; cpp/filesystem/perms
std::filesystem::perms::others_all =&gt; cpp/filesystem/perms
std::filesystem::perms::all =&gt; cpp/filesystem/perms
std::filesystem::perms::set_uid =&gt; cpp/filesystem/perms
std::filesystem::perms::set_gid =&gt; cpp/filesystem/perms
std::filesystem::perms::sticky_bit =&gt; cpp/filesystem/perms
std::filesystem::perms::mask =&gt; cpp/filesystem/perms
std::filesystem::perms::unknown =&gt; cpp/filesystem/perms
std::filesystem::perms::add_perms =&gt; cpp/filesystem/perms
std::filesystem::perms::remove_perms =&gt; cpp/filesystem/perms
std::filesystem::perms::resolve_symlinks =&gt; cpp/filesystem/perms
std::filesystem::copy_options =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::none =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::skip_existing =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::overwrite_existing =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::update_existing =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::recursive =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::copy_symlinks =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::skip_symlinks =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::directories_only =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::create_symlinks =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::create_hard_links =&gt; cpp/filesystem/copy_options
std::filesystem::directory_options =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::none =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::follow_directory_symlink =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::overwrite_existing =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::skip_permission_denied =&gt; cpp/filesystem/directory_options
std::filesystem::file_time_type =&gt; cpp/filesystem/file_time_type
std::filesystem::absolute =&gt; cpp/filesystem/absolute
std::filesystem::system_complete =&gt; cpp/filesystem/absolute
std::filesystem::canonical =&gt; cpp/filesystem/canonical
std::filesystem::weakly_canonical =&gt; cpp/filesystem/canonical
std::filesystem::relative =&gt; cpp/filesystem/relative
std::filesystem::proximate =&gt; cpp/filesystem/relative
std::filesystem::copy =&gt; cpp/filesystem/copy
std::filesystem::copy_file =&gt; cpp/filesystem/copy_file
std::filesystem::copy_symlink =&gt; cpp/filesystem/copy_symlink
std::filesystem::create_directory =&gt; cpp/filesystem/create_directory
std::filesystem::create_directories =&gt; cpp/filesystem/create_directory
std::filesystem::create_hard_link =&gt; cpp/filesystem/create_hard_link
std::filesystem::create_symlink =&gt; cpp/filesystem/create_symlink
std::filesystem::create_directory_symlink =&gt; cpp/filesystem/create_symlink
std::filesystem::current_path =&gt; cpp/filesystem/current_path
std::filesystem::exists =&gt; cpp/filesystem/exists
std::filesystem::equivalent =&gt; cpp/filesystem/equivalent
std::filesystem::file_size =&gt; cpp/filesystem/file_size
std::filesystem::hard_link_count =&gt; cpp/filesystem/hard_link_count
std::filesystem::last_write_time =&gt; cpp/filesystem/last_write_time
std::filesystem::permissions =&gt; cpp/filesystem/permissions
std::filesystem::read_symlink =&gt; cpp/filesystem/read_symlink
std::filesystem::remove =&gt; cpp/filesystem/remove
std::filesystem::remove_all =&gt; cpp/filesystem/remove
std::filesystem::rename =&gt; cpp/filesystem/rename
std::filesystem::resize_file =&gt; cpp/filesystem/resize_file
std::filesystem::space =&gt; cpp/filesystem/space
std::filesystem::status =&gt; cpp/filesystem/status
std::filesystem::symlink_status =&gt; cpp/filesystem/status
std::filesystem::temp_directory_path =&gt; cpp/filesystem/temp_directory_path
std::filesystem::is_block_file =&gt; cpp/filesystem/is_block_file
std::filesystem::is_character_file =&gt; cpp/filesystem/is_character_file
std::filesystem::is_directory =&gt; cpp/filesystem/is_directory
std::filesystem::is_empty =&gt; cpp/filesystem/is_empty
std::filesystem::is_fifo =&gt; cpp/filesystem/is_fifo
std::filesystem::is_other =&gt; cpp/filesystem/is_other
std::filesystem::is_regular_file =&gt; cpp/filesystem/is_regular_file
std::filesystem::is_socket =&gt; cpp/filesystem/is_socket
std::filesystem::is_symlink =&gt; cpp/filesystem/is_symlink
std::filesystem::status_known =&gt; cpp/filesystem/status_known
std::experimental::optional =&gt; cpp/experimental/optional
std::experimental::optional::optional =&gt; cpp/experimental/optional/optional
std::experimental::optional::~optional =&gt; cpp/experimental/optional/~optional
std::experimental::optional::operator= =&gt; cpp/experimental/optional/operator=
std::experimental::optional::operator* =&gt; cpp/experimental/optional/operator*
std::experimental::optional::operator-&gt; =&gt; cpp/experimental/optional/operator*
std::experimental::optional::operator bool =&gt; cpp/experimental/optional/operator_bool
std::experimental::optional::value =&gt; cpp/experimental/optional/value
std::experimental::optional::value_or =&gt; cpp/experimental/optional/value_or
std::experimental::optional::swap =&gt; cpp/experimental/optional/swap
std::experimental::optional::emplace =&gt; cpp/experimental/optional/emplace
operator==(std::experimental::optional) =&gt; cpp/experimental/optional/operator_cmp
operator&lt;(std::experimental::optional) =&gt; cpp/experimental/optional/operator_cmp
std::swap(std::experimental::optional) =&gt; cpp/experimental/optional/swap2
std::hash&lt;std::experimental::optional&gt; =&gt; cpp/experimental/optional/hash
std::experimental::make_optional =&gt; cpp/experimental/optional/make_optional
std::experimental::bad_optional_access =&gt; cpp/utility/optional/bad_optional_access
std::experimental::bad_optional_access::what =&gt; cpp/error/exception/what
std::experimental::bad_optional_access::bad_optional_access =&gt; cpp/utility/optional/bad_optional_access
std::experimental::any =&gt; cpp/experimental/any
std::experimental::any::any =&gt; cpp/experimental/any/any
std::experimental::any::operator= =&gt; cpp/experimental/any/operator=
std::experimental::any::clear =&gt; cpp/experimental/any/clear
std::experimental::any::empty =&gt; cpp/experimental/any/empty
std::experimental::any::swap =&gt; cpp/experimental/any/swap
std::experimental::any::type =&gt; cpp/experimental/any/type
std::swap(std::experimental::any) =&gt; cpp/experimental/any/swap2
std::experimental::any_cast =&gt; cpp/experimental/any/any_cast
std::experimental::pmr::memory_resource =&gt; cpp/experimental/memory_resource
std::experimental::pmr::memory_resource::memory_resource =&gt; cpp/experimental/memory_resource/memory_resource
std::experimental::pmr::memory_resource::allocate =&gt; cpp/experimental/memory_resource/allocate
std::experimental::pmr::memory_resource::deallocate =&gt; cpp/experimental/memory_resource/deallocate
std::experimental::pmr::memory_resource::is_equal =&gt; cpp/experimental/memory_resource/is_equal
std::experimental::pmr::memory_resource::do_allocate =&gt; cpp/experimental/memory_resource/do_allocate
std::experimental::pmr::memory_resource::do_deallocate =&gt; cpp/experimental/memory_resource/do_deallocate
std::experimental::pmr::memory_resource::do_is_equal =&gt; cpp/experimental/memory_resource/do_is_equal
operator==(std::experimental::pmr::memory_resource) =&gt; cpp/experimental/memory_resource/operator_eq
operator!=(std::experimental::pmr::memory_resource) =&gt; cpp/experimental/memory_resource/operator_eq
std::experimental::pmr::monotonic_buffer_resource =&gt; cpp/experimental/monotonic_buffer_resource
std::experimental::pmr::synchronized_pool_resource =&gt; cpp/experimental/synchronized_pool_resource
std::experimental::pmr::unsynchronized_pool_resource =&gt; cpp/experimental/unsynchronized_pool_resource
std::experimental::pmr::polymorphic_allocator =&gt; cpp/experimental/polymorphic_allocator
std::experimental::pmr::resource_adaptor =&gt; cpp/experimental/resource_adaptor
std::experimental::pmr::new_delete_resource =&gt; cpp/experimental/new_delete_resource
std::experimental::pmr::null_memory_resource =&gt; cpp/experimental/null_Memory_resource
std::experimental::pmr::get_default_resource =&gt; cpp/experimental/get_default_resource
std::experimental::pmr::set_default_resource =&gt; cpp/experimental/set_default_resource
std::experimental::sample =&gt; cpp/experimental/sample
std::experimental::search =&gt; cpp/experimental/search
std::experimental::default_searcher =&gt; cpp/experimental/default_searcher
std::experimental::make_default_searcher =&gt; cpp/experimental/make_default_searcher
std::experimental::boyer_moore_horspool_searcher =&gt; cpp/experimental/boyer_moore_horspool_searcher
std::experimental::make_boyer_moore_horspool_searcher =&gt; cpp/experimental/make_boyer_moore_horspool_searcher
std::experimental::boyer_moore_searcher =&gt; cpp/experimental/boyer_moore_searcher
std::experimental::make_boyer_moore_searcher =&gt; cpp/experimental/make_boyer_moore_searcher
std::experimental::apply =&gt; cpp/experimental/apply
std::experimental::erased_type =&gt; cpp/experimental/erased_type
std::experimental::invocation_type =&gt; cpp/experimental/invocation_type
std::experimental::raw_invocation_type =&gt; cpp/experimental/raw_invocation_type
std::experimental::basic_string_view =&gt; cpp/experimental/basic_string_view
std::experimental::basic_string_view::basic_string_view =&gt; cpp/experimental/basic_string_view/basic_string_view
std::experimental::basic_string_view::operator= =&gt; cpp/experimental/basic_string_view/operator=
std::experimental::basic_string_view::begin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::basic_string_view::cbegin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::basic_string_view::rbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::basic_string_view::crbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::basic_string_view::end =&gt; cpp/experimental/basic_string_view/end
std::experimental::basic_string_view::cend =&gt; cpp/experimental/basic_string_view/end
std::experimental::basic_string_view::rend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::basic_string_view::crend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::basic_string_view::operator[] =&gt; cpp/experimental/basic_string_view/operator_at
std::experimental::basic_string_view::at =&gt; cpp/experimental/basic_string_view/at
std::experimental::basic_string_view::front =&gt; cpp/experimental/basic_string_view/front
std::experimental::basic_string_view::back =&gt; cpp/experimental/basic_string_view/back
std::experimental::basic_string_view::data =&gt; cpp/experimental/basic_string_view/data
std::experimental::basic_string_view::size =&gt; cpp/experimental/basic_string_view/size
std::experimental::basic_string_view::length =&gt; cpp/experimental/basic_string_view/size
std::experimental::basic_string_view::max_size =&gt; cpp/experimental/basic_string_view/max_size
std::experimental::basic_string_view::empty =&gt; cpp/experimental/basic_string_view/empty
std::experimental::basic_string_view::remove_prefix =&gt; cpp/experimental/basic_string_view/remove_prefix
std::experimental::basic_string_view::remove_suffix =&gt; cpp/experimental/basic_string_view/remove_suffix
std::experimental::basic_string_view::swap =&gt; cpp/experimental/basic_string_view/swap
std::experimental::basic_string_view::to_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::basic_string_view::operator basic_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::basic_string_view::copy =&gt; cpp/experimental/basic_string_view/copy
std::experimental::basic_string_view::substr =&gt; cpp/experimental/basic_string_view/substr
std::experimental::basic_string_view::compare =&gt; cpp/experimental/basic_string_view/compare
std::experimental::basic_string_view::find =&gt; cpp/experimental/basic_string_view/find
std::experimental::basic_string_view::rfind =&gt; cpp/experimental/basic_string_view/rfind
std::experimental::basic_string_view::find_first_of =&gt; cpp/experimental/basic_string_view/find_first_of
std::experimental::basic_string_view::find_last_of =&gt; cpp/experimental/basic_string_view/find_last_of
std::experimental::basic_string_view::find_first_not_of =&gt; cpp/experimental/basic_string_view/find_first_not_of
std::experimental::basic_string_view::find_last_not_of =&gt; cpp/experimental/basic_string_view/find_last_not_of
std::experimental::basic_string_view::npos =&gt; cpp/experimental/basic_string_view/npos
operator==(std::experimental::basic_string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator!=(std::experimental::basic_string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;(std::experimental::basic_string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;=(std::experimental::basic_string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;(std::experimental::basic_string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;=(std::experimental::basic_string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
std::hash&lt;std::experimental::basic_string_view&gt; =&gt; cpp/experimental/basic_string_view/hash
std::experimental::string_view =&gt; cpp/experimental/basic_string_view
std::experimental::string_view::string_view =&gt; cpp/experimental/basic_string_view/basic_string_view
std::experimental::string_view::operator= =&gt; cpp/experimental/basic_string_view/operator=
std::experimental::string_view::begin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::string_view::cbegin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::string_view::rbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::string_view::crbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::string_view::end =&gt; cpp/experimental/basic_string_view/end
std::experimental::string_view::cend =&gt; cpp/experimental/basic_string_view/end
std::experimental::string_view::rend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::string_view::crend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::string_view::operator[] =&gt; cpp/experimental/basic_string_view/operator_at
std::experimental::string_view::at =&gt; cpp/experimental/basic_string_view/at
std::experimental::string_view::front =&gt; cpp/experimental/basic_string_view/front
std::experimental::string_view::back =&gt; cpp/experimental/basic_string_view/back
std::experimental::string_view::data =&gt; cpp/experimental/basic_string_view/data
std::experimental::string_view::size =&gt; cpp/experimental/basic_string_view/size
std::experimental::string_view::length =&gt; cpp/experimental/basic_string_view/size
std::experimental::string_view::max_size =&gt; cpp/experimental/basic_string_view/max_size
std::experimental::string_view::empty =&gt; cpp/experimental/basic_string_view/empty
std::experimental::string_view::remove_prefix =&gt; cpp/experimental/basic_string_view/remove_prefix
std::experimental::string_view::remove_suffix =&gt; cpp/experimental/basic_string_view/remove_suffix
std::experimental::string_view::swap =&gt; cpp/experimental/basic_string_view/swap
std::experimental::string_view::to_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::string_view::operator basic_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::string_view::copy =&gt; cpp/experimental/basic_string_view/copy
std::experimental::string_view::substr =&gt; cpp/experimental/basic_string_view/substr
std::experimental::string_view::compare =&gt; cpp/experimental/basic_string_view/compare
std::experimental::string_view::find =&gt; cpp/experimental/basic_string_view/find
std::experimental::string_view::rfind =&gt; cpp/experimental/basic_string_view/rfind
std::experimental::string_view::find_first_of =&gt; cpp/experimental/basic_string_view/find_first_of
std::experimental::string_view::find_last_of =&gt; cpp/experimental/basic_string_view/find_last_of
std::experimental::string_view::find_first_not_of =&gt; cpp/experimental/basic_string_view/find_first_not_of
std::experimental::string_view::find_last_not_of =&gt; cpp/experimental/basic_string_view/find_last_not_of
std::experimental::string_view::npos =&gt; cpp/experimental/basic_string_view/npos
operator==(std::experimental::string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator!=(std::experimental::string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;(std::experimental::string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;=(std::experimental::string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;(std::experimental::string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;=(std::experimental::string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
std::hash&lt;std::experimental::string_view&gt; =&gt; cpp/experimental/basic_string_view/hash
std::experimental::wstring_view =&gt; cpp/experimental/basic_string_view
std::experimental::wstring_view::wstring_view =&gt; cpp/experimental/basic_string_view/basic_string_view
std::experimental::wstring_view::operator= =&gt; cpp/experimental/basic_string_view/operator=
std::experimental::wstring_view::begin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::wstring_view::cbegin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::wstring_view::rbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::wstring_view::crbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::wstring_view::end =&gt; cpp/experimental/basic_string_view/end
std::experimental::wstring_view::cend =&gt; cpp/experimental/basic_string_view/end
std::experimental::wstring_view::rend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::wstring_view::crend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::wstring_view::operator[] =&gt; cpp/experimental/basic_string_view/operator_at
std::experimental::wstring_view::at =&gt; cpp/experimental/basic_string_view/at
std::experimental::wstring_view::front =&gt; cpp/experimental/basic_string_view/front
std::experimental::wstring_view::back =&gt; cpp/experimental/basic_string_view/back
std::experimental::wstring_view::data =&gt; cpp/experimental/basic_string_view/data
std::experimental::wstring_view::size =&gt; cpp/experimental/basic_string_view/size
std::experimental::wstring_view::length =&gt; cpp/experimental/basic_string_view/size
std::experimental::wstring_view::max_size =&gt; cpp/experimental/basic_string_view/max_size
std::experimental::wstring_view::empty =&gt; cpp/experimental/basic_string_view/empty
std::experimental::wstring_view::remove_prefix =&gt; cpp/experimental/basic_string_view/remove_prefix
std::experimental::wstring_view::remove_suffix =&gt; cpp/experimental/basic_string_view/remove_suffix
std::experimental::wstring_view::swap =&gt; cpp/experimental/basic_string_view/swap
std::experimental::wstring_view::to_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::wstring_view::operator basic_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::wstring_view::copy =&gt; cpp/experimental/basic_string_view/copy
std::experimental::wstring_view::substr =&gt; cpp/experimental/basic_string_view/substr
std::experimental::wstring_view::compare =&gt; cpp/experimental/basic_string_view/compare
std::experimental::wstring_view::find =&gt; cpp/experimental/basic_string_view/find
std::experimental::wstring_view::rfind =&gt; cpp/experimental/basic_string_view/rfind
std::experimental::wstring_view::find_first_of =&gt; cpp/experimental/basic_string_view/find_first_of
std::experimental::wstring_view::find_last_of =&gt; cpp/experimental/basic_string_view/find_last_of
std::experimental::wstring_view::find_first_not_of =&gt; cpp/experimental/basic_string_view/find_first_not_of
std::experimental::wstring_view::find_last_not_of =&gt; cpp/experimental/basic_string_view/find_last_not_of
std::experimental::wstring_view::npos =&gt; cpp/experimental/basic_string_view/npos
operator==(std::experimental::wstring_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator!=(std::experimental::wstring_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;(std::experimental::wstring_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;=(std::experimental::wstring_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;(std::experimental::wstring_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;=(std::experimental::wstring_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
std::hash&lt;std::experimental::wstring_view&gt; =&gt; cpp/experimental/basic_string_view/hash
std::experimental::u16string_view =&gt; cpp/experimental/basic_string_view
std::experimental::u16string_view::u16string_view =&gt; cpp/experimental/basic_string_view/basic_string_view
std::experimental::u16string_view::operator= =&gt; cpp/experimental/basic_string_view/operator=
std::experimental::u16string_view::begin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::u16string_view::cbegin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::u16string_view::rbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::u16string_view::crbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::u16string_view::end =&gt; cpp/experimental/basic_string_view/end
std::experimental::u16string_view::cend =&gt; cpp/experimental/basic_string_view/end
std::experimental::u16string_view::rend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::u16string_view::crend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::u16string_view::operator[] =&gt; cpp/experimental/basic_string_view/operator_at
std::experimental::u16string_view::at =&gt; cpp/experimental/basic_string_view/at
std::experimental::u16string_view::front =&gt; cpp/experimental/basic_string_view/front
std::experimental::u16string_view::back =&gt; cpp/experimental/basic_string_view/back
std::experimental::u16string_view::data =&gt; cpp/experimental/basic_string_view/data
std::experimental::u16string_view::size =&gt; cpp/experimental/basic_string_view/size
std::experimental::u16string_view::length =&gt; cpp/experimental/basic_string_view/size
std::experimental::u16string_view::max_size =&gt; cpp/experimental/basic_string_view/max_size
std::experimental::u16string_view::empty =&gt; cpp/experimental/basic_string_view/empty
std::experimental::u16string_view::remove_prefix =&gt; cpp/experimental/basic_string_view/remove_prefix
std::experimental::u16string_view::remove_suffix =&gt; cpp/experimental/basic_string_view/remove_suffix
std::experimental::u16string_view::swap =&gt; cpp/experimental/basic_string_view/swap
std::experimental::u16string_view::to_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::u16string_view::operator basic_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::u16string_view::copy =&gt; cpp/experimental/basic_string_view/copy
std::experimental::u16string_view::substr =&gt; cpp/experimental/basic_string_view/substr
std::experimental::u16string_view::compare =&gt; cpp/experimental/basic_string_view/compare
std::experimental::u16string_view::find =&gt; cpp/experimental/basic_string_view/find
std::experimental::u16string_view::rfind =&gt; cpp/experimental/basic_string_view/rfind
std::experimental::u16string_view::find_first_of =&gt; cpp/experimental/basic_string_view/find_first_of
std::experimental::u16string_view::find_last_of =&gt; cpp/experimental/basic_string_view/find_last_of
std::experimental::u16string_view::find_first_not_of =&gt; cpp/experimental/basic_string_view/find_first_not_of
std::experimental::u16string_view::find_last_not_of =&gt; cpp/experimental/basic_string_view/find_last_not_of
std::experimental::u16string_view::npos =&gt; cpp/experimental/basic_string_view/npos
operator==(std::experimental::u16string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator!=(std::experimental::u16string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;(std::experimental::u16string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;=(std::experimental::u16string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;(std::experimental::u16string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;=(std::experimental::u16string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
std::hash&lt;std::experimental::u16string_view&gt; =&gt; cpp/experimental/basic_string_view/hash
std::experimental::u32string_view =&gt; cpp/experimental/basic_string_view
std::experimental::u32string_view::u32string_view =&gt; cpp/experimental/basic_string_view/basic_string_view
std::experimental::u32string_view::operator= =&gt; cpp/experimental/basic_string_view/operator=
std::experimental::u32string_view::begin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::u32string_view::cbegin =&gt; cpp/experimental/basic_string_view/begin
std::experimental::u32string_view::rbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::u32string_view::crbegin =&gt; cpp/experimental/basic_string_view/rbegin
std::experimental::u32string_view::end =&gt; cpp/experimental/basic_string_view/end
std::experimental::u32string_view::cend =&gt; cpp/experimental/basic_string_view/end
std::experimental::u32string_view::rend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::u32string_view::crend =&gt; cpp/experimental/basic_string_view/rend
std::experimental::u32string_view::operator[] =&gt; cpp/experimental/basic_string_view/operator_at
std::experimental::u32string_view::at =&gt; cpp/experimental/basic_string_view/at
std::experimental::u32string_view::front =&gt; cpp/experimental/basic_string_view/front
std::experimental::u32string_view::back =&gt; cpp/experimental/basic_string_view/back
std::experimental::u32string_view::data =&gt; cpp/experimental/basic_string_view/data
std::experimental::u32string_view::size =&gt; cpp/experimental/basic_string_view/size
std::experimental::u32string_view::length =&gt; cpp/experimental/basic_string_view/size
std::experimental::u32string_view::max_size =&gt; cpp/experimental/basic_string_view/max_size
std::experimental::u32string_view::empty =&gt; cpp/experimental/basic_string_view/empty
std::experimental::u32string_view::remove_prefix =&gt; cpp/experimental/basic_string_view/remove_prefix
std::experimental::u32string_view::remove_suffix =&gt; cpp/experimental/basic_string_view/remove_suffix
std::experimental::u32string_view::swap =&gt; cpp/experimental/basic_string_view/swap
std::experimental::u32string_view::to_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::u32string_view::operator basic_string =&gt; cpp/experimental/basic_string_view/to_string
std::experimental::u32string_view::copy =&gt; cpp/experimental/basic_string_view/copy
std::experimental::u32string_view::substr =&gt; cpp/experimental/basic_string_view/substr
std::experimental::u32string_view::compare =&gt; cpp/experimental/basic_string_view/compare
std::experimental::u32string_view::find =&gt; cpp/experimental/basic_string_view/find
std::experimental::u32string_view::rfind =&gt; cpp/experimental/basic_string_view/rfind
std::experimental::u32string_view::find_first_of =&gt; cpp/experimental/basic_string_view/find_first_of
std::experimental::u32string_view::find_last_of =&gt; cpp/experimental/basic_string_view/find_last_of
std::experimental::u32string_view::find_first_not_of =&gt; cpp/experimental/basic_string_view/find_first_not_of
std::experimental::u32string_view::find_last_not_of =&gt; cpp/experimental/basic_string_view/find_last_not_of
std::experimental::u32string_view::npos =&gt; cpp/experimental/basic_string_view/npos
operator==(std::experimental::u32string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator!=(std::experimental::u32string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;(std::experimental::u32string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&lt;=(std::experimental::u32string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;(std::experimental::u32string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
operator&gt;=(std::experimental::u32string_view) =&gt; cpp/experimental/basic_string_view/operator_cmp
std::hash&lt;std::experimental::u32string_view&gt; =&gt; cpp/experimental/basic_string_view/hash
std::experimental::is_void_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_null_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_integral_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_floating_point_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_array_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_lvalue_reference_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_rvalue_reference_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_member_object_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_member_function_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_enum_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_union_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_class_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_function_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_reference_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_arithmetic_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_fundamental_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_object_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_scalar_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_compound_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_member_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_const_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_volatile_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivial_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_copyable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_standard_layout_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_pod_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_literal_type_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_empty_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_polymorphic_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_abstract_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_final_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_signed_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_unsigned_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_default_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_default_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_default_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_copy_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_copy_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_copy_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_move_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_move_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_move_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_copy_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_copy_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_copy_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_move_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_move_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_move_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_destructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_destructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_destructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::has_virtual_destructor_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::alignment_of_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::rank_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::extent_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_same_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_base_of_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_convertible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_not_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_less_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_less_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_greater_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_greater_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::tuple_size_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::treat_as_floating_point_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_error_code_enum_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_error_condition_enum_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_bind_expression_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_placeholder_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::uses_allocator_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_detected =&gt; cpp/experimental/is_detected
std::experimental::is_detected_v =&gt; cpp/experimental/is_detected
std::experimental::detected_or =&gt; cpp/experimental/is_detected
std::experimental::detected_or_t =&gt; cpp/experimental/is_detected
std::experimental::is_detected_exact =&gt; cpp/experimental/is_detected
std::experimental::is_detected_exact_v =&gt; cpp/experimental/is_detected
std::experimental::is_detected_convertible =&gt; cpp/experimental/is_detected
std::experimental::is_detected_convertible_v =&gt; cpp/experimental/is_detected
std::experimental::nonesuch =&gt; cpp/experimental/nonesuch
std::experimental::propagate_const =&gt; cpp/experimental/propagate_const
std::experimental::not_fn =&gt; cpp/experimental/not_fn
std::experimental::observer_ptr =&gt; cpp/experimental/observer_ptr
std::experimental::make_array =&gt; cpp/experimental/make_array
std::experimental::to_array =&gt; cpp/experimental/to_array
std::experimental::ostream_joiner =&gt; cpp/experimental/ostream_joiner
std::experimental::gcd =&gt; cpp/experimental/gcd
std::experimental::lcm =&gt; cpp/experimental/lcm
std::experimental::source_location =&gt; cpp/experimental/source_location
std::as_const =&gt; cpp/utility/as_const
std::experimental::randint =&gt; cpp/experimental/randint
std::experimental::reseed =&gt; cpp/experimental/reseed
std::experimental::filesystem::path =&gt; cpp/experimental/fs/path
std::experimental::filesystem::path::path =&gt; cpp/experimental/fs/path/path
std::experimental::filesystem::path::~path =&gt; cpp/experimental/fs/path/~path
std::experimental::filesystem::path::operator= =&gt; cpp/experimental/fs/path/operator=
std::experimental::filesystem::path::assign =&gt; cpp/experimental/fs/path/assign
std::experimental::filesystem::path::append =&gt; cpp/experimental/fs/path/append
std::experimental::filesystem::path::operator/= =&gt; cpp/experimental/fs/path/append
std::experimental::filesystem::path::concat =&gt; cpp/experimental/fs/path/concat
std::experimental::filesystem::path::operator+= =&gt; cpp/experimental/fs/path/concat
std::experimental::filesystem::path::clear =&gt; cpp/experimental/fs/path/clear
std::experimental::filesystem::path::make_preferred =&gt; cpp/experimental/fs/path/make_preferred
std::experimental::filesystem::path::remove_filename =&gt; cpp/experimental/fs/path/remove_filename
std::experimental::filesystem::path::replace_filename =&gt; cpp/experimental/fs/path/replace_filename
std::experimental::filesystem::path::replace_extension =&gt; cpp/experimental/fs/path/replace_extension
std::experimental::filesystem::path::swap =&gt; cpp/experimental/fs/path/swap
std::experimental::filesystem::path::c_str =&gt; cpp/experimental/fs/path/native
std::experimental::filesystem::path::native =&gt; cpp/experimental/fs/path/native
std::experimental::filesystem::path::operator string_type =&gt; cpp/experimental/fs/path/native
std::experimental::filesystem::path::string =&gt; cpp/experimental/fs/path/string
std::experimental::filesystem::path::wstring =&gt; cpp/experimental/fs/path/string
std::experimental::filesystem::path::u8string =&gt; cpp/experimental/fs/path/string
std::experimental::filesystem::path::u16string =&gt; cpp/experimental/fs/path/string
std::experimental::filesystem::path::u32string =&gt; cpp/experimental/fs/path/string
std::experimental::filesystem::path::generic_string =&gt; cpp/experimental/fs/path/generic_string
std::experimental::filesystem::path::generic_wstring =&gt; cpp/experimental/fs/path/generic_string
std::experimental::filesystem::path::generic_u8string =&gt; cpp/experimental/fs/path/generic_string
std::experimental::filesystem::path::generic_u16string =&gt; cpp/experimental/fs/path/generic_string
std::experimental::filesystem::path::generic_u32string =&gt; cpp/experimental/fs/path/generic_string
std::experimental::filesystem::path::compare =&gt; cpp/experimental/fs/path/compare
std::experimental::filesystem::path::root_name =&gt; cpp/experimental/fs/path/root_name
std::experimental::filesystem::path::root_directory =&gt; cpp/experimental/fs/path/root_directory
std::experimental::filesystem::path::root_path =&gt; cpp/experimental/fs/path/root_path
std::experimental::filesystem::path::relative_path =&gt; cpp/experimental/fs/path/relative_path
std::experimental::filesystem::path::parent_path =&gt; cpp/experimental/fs/path/parent_path
std::experimental::filesystem::path::filename =&gt; cpp/experimental/fs/path/filename
std::experimental::filesystem::path::stem =&gt; cpp/experimental/fs/path/stem
std::experimental::filesystem::path::extension =&gt; cpp/experimental/fs/path/extension
std::experimental::filesystem::path::empty =&gt; cpp/experimental/fs/path/empty
std::experimental::filesystem::path::has_root_path =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::has_root_name =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::has_root_directory =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::has_relative_path =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::has_parent_path =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::has_filename =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::has_stem =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::has_extension =&gt; cpp/experimental/fs/path/has_path
std::experimental::filesystem::path::begin =&gt; cpp/experimental/fs/path/begin
std::experimental::filesystem::path::end =&gt; cpp/experimental/fs/path/begin
swap(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/swap2
operator==(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_cmp
operator!=(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_cmp
operator&lt;(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_cmp
operator&lt;=(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_cmp
operator&gt;(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_cmp
operator&gt;=(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_cmp
operator/(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_slash
operator&lt;&lt;(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_ltltgtgt
operator&gt;&gt;(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/operator_ltltgtgt
u8path(std::experimental::filesystem::path) =&gt; cpp/experimental/fs/path/u8path
std::experimental::filesystem::filesystem_error =&gt; cpp/experimental/fs/filesystem_error
std::experimental::filesystem::filesystem_error::filesystem_error =&gt; cpp/experimental/fs/filesystem_error/filesystem_error
std::experimental::filesystem::filesystem_error::path1 =&gt; cpp/experimental/fs/filesystem_error/path
std::experimental::filesystem::filesystem_error::path2 =&gt; cpp/experimental/fs/filesystem_error/path
std::experimental::filesystem::filesystem_error::what =&gt; cpp/experimental/fs/filesystem_error/what
std::experimental::filesystem::directory_entry =&gt; cpp/experimental/fs/directory_entry
std::experimental::filesystem::directory_entry::directory_entry =&gt; cpp/experimental/fs/directory_entry/directory_entry
std::experimental::filesystem::directory_entry::operator= =&gt; cpp/experimental/fs/directory_entry/operator=
std::experimental::filesystem::directory_entry::assign =&gt; cpp/experimental/fs/directory_entry/assign
std::experimental::filesystem::directory_entry::replace_filename =&gt; cpp/experimental/fs/directory_entry/replace_filename
std::experimental::filesystem::directory_entry::path =&gt; cpp/experimental/fs/directory_entry/path
std::experimental::filesystem::directory_entry::status =&gt; cpp/experimental/fs/directory_entry/status
std::experimental::filesystem::directory_entry::symlink_status =&gt; cpp/experimental/fs/directory_entry/status
operator==(std::experimental::filesystem::directory_entry) =&gt; cpp/experimental/fs/directory_entry/operator_cmp
operator!=(std::experimental::filesystem::directory_entry) =&gt; cpp/experimental/fs/directory_entry/operator_cmp
operator&lt;(std::experimental::filesystem::directory_entry) =&gt; cpp/experimental/fs/directory_entry/operator_cmp
operator&lt;=(std::experimental::filesystem::directory_entry) =&gt; cpp/experimental/fs/directory_entry/operator_cmp
operator&gt;(std::experimental::filesystem::directory_entry) =&gt; cpp/experimental/fs/directory_entry/operator_cmp
operator&gt;=(std::experimental::filesystem::directory_entry) =&gt; cpp/experimental/fs/directory_entry/operator_cmp
std::experimental::filesystem::directory_iterator =&gt; cpp/experimental/fs/directory_iterator
std::experimental::filesystem::directory_iterator::directory_iterator =&gt; cpp/experimental/fs/directory_iterator/directory_iterator
std::experimental::filesystem::directory_iterator::operator= =&gt; cpp/experimental/fs/directory_iterator/operator=
std::experimental::filesystem::directory_iterator::operator* =&gt; cpp/experimental/fs/directory_iterator/operator*
std::experimental::filesystem::directory_iterator::operator-&gt; =&gt; cpp/experimental/fs/directory_iterator/operator*
std::experimental::filesystem::directory_iterator::increment =&gt; cpp/experimental/fs/directory_iterator/increment
std::experimental::filesystem::directory_iterator::operator++ =&gt; cpp/experimental/fs/directory_iterator/increment
std::experimental::filesystem::begin(std::experimental::filesystem::directory_iterator) =&gt; cpp/experimental/fs/directory_iterator/begin
std::experimental::filesystem::end(std::experimental::filesystem::directory_iterator) =&gt; cpp/experimental/fs/directory_iterator/begin
std::experimental::filesystem::recursive_directory_iterator =&gt; cpp/experimental/fs/recursive_directory_iterator
std::experimental::filesystem::recursive_directory_iterator::recursive_directory_iterator =&gt; cpp/experimental/fs/recursive_directory_iterator/recursive_directory_iterator
std::experimental::filesystem::recursive_directory_iterator::operator* =&gt; cpp/experimental/fs/recursive_directory_iterator/operator*
std::experimental::filesystem::recursive_directory_iterator::operator-&gt; =&gt; cpp/experimental/fs/recursive_directory_iterator/operator*
std::experimental::filesystem::recursive_directory_iterator::options =&gt; cpp/experimental/fs/recursive_directory_iterator/options
std::experimental::filesystem::recursive_directory_iterator::depth =&gt; cpp/experimental/fs/recursive_directory_iterator/depth
std::experimental::filesystem::recursive_directory_iterator::recursion_pending =&gt; cpp/experimental/fs/recursive_directory_iterator/recursion_pending
std::experimental::filesystem::recursive_directory_iterator::operator= =&gt; cpp/experimental/fs/recursive_directory_iterator/operator=
std::experimental::filesystem::recursive_directory_iterator::increment =&gt; cpp/experimental/fs/recursive_directory_iterator/increment
std::experimental::filesystem::recursive_directory_iterator::operator++ =&gt; cpp/experimental/fs/recursive_directory_iterator/increment
std::experimental::filesystem::recursive_directory_iterator::pop =&gt; cpp/experimental/fs/recursive_directory_iterator/pop
std::experimental::filesystem::recursive_directory_iterator::disable_recursion_pending =&gt; cpp/experimental/fs/recursive_directory_iterator/disable_recursion_pending
std::experimental::filesystem::begin(std::experimental::filesystem::recursive_directory_iterator) =&gt; cpp/experimental/fs/recursive_directory_iterator/begin
std::experimental::filesystem::end(std::experimental::filesystem::recursive_directory_iterator) =&gt; cpp/experimental/fs/recursive_directory_iterator/begin
std::experimental::filesystem::file_status =&gt; cpp/experimental/fs/file_status
std::experimental::filesystem::file_status::file_status =&gt; cpp/experimental/fs/file_status/file_status
std::experimental::filesystem::file_status::operator= =&gt; cpp/experimental/fs/file_status/operator=
std::experimental::filesystem::file_status::type =&gt; cpp/experimental/fs/file_status/type
std::experimental::filesystem::file_status::permissions =&gt; cpp/experimental/fs/file_status/permissions
std::experimental::filesystem::space_info =&gt; cpp/experimental/fs/space_info
std::experimental::filesystem::space_info::capacity =&gt; cpp/experimental/fs/space_info
std::experimental::filesystem::space_info::free =&gt; cpp/experimental/fs/space_info
std::experimental::filesystem::space_info::available =&gt; cpp/experimental/fs/space_info
std::experimental::filesystem::file_type =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::none =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::not_found =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::regular =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::directory =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::symlink =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::block =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::character =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::fifo =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::socket =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::unknown =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::perms =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::none =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_read =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_write =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_exec =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_read =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_write =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_exec =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_read =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_write =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_exec =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::set_uid =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::set_gid =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::sticky_bit =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::mask =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::unknown =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::add_perms =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::remove_perms =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::resolve_symlinks =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::copy_options =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::none =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::skip_existing =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::overwrite_existing =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::update_existing =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::recursive =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::copy_symlinks =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::skip_symlinks =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::directories_only =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::create_symlinks =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::create_hard_links =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::directory_options =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::none =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::follow_directory_symlink =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::overwrite_existing =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::skip_permission_denied =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::file_time_type =&gt; cpp/experimental/fs/file_time_type
std::experimental::filesystem::absolute =&gt; cpp/experimental/fs/absolute
std::experimental::filesystem::system_complete =&gt; cpp/experimental/fs/absolute
std::experimental::filesystem::canonical =&gt; cpp/experimental/fs/canonical
std::experimental::filesystem::copy =&gt; cpp/experimental/fs/copy
std::experimental::filesystem::copy_file =&gt; cpp/experimental/fs/copy_file
std::experimental::filesystem::copy_symlink =&gt; cpp/experimental/fs/copy_symlink
std::experimental::filesystem::create_directory =&gt; cpp/experimental/fs/create_directory
std::experimental::filesystem::create_directories =&gt; cpp/experimental/fs/create_directory
std::experimental::filesystem::create_hard_link =&gt; cpp/experimental/fs/create_hard_link
std::experimental::filesystem::create_symlink =&gt; cpp/experimental/fs/create_symlink
std::experimental::filesystem::create_directory_symlink =&gt; cpp/experimental/fs/create_symlink
std::experimental::filesystem::current_path =&gt; cpp/experimental/fs/current_path
std::experimental::filesystem::exists =&gt; cpp/experimental/fs/exists
std::experimental::filesystem::equivalent =&gt; cpp/experimental/fs/equivalent
std::experimental::filesystem::file_size =&gt; cpp/experimental/fs/file_size
std::experimental::filesystem::hard_link_count =&gt; cpp/experimental/fs/hard_link_count
std::experimental::filesystem::last_write_time =&gt; cpp/experimental/fs/last_write_time
std::experimental::filesystem::permissions =&gt; cpp/experimental/fs/permissions
std::experimental::filesystem::read_symlink =&gt; cpp/experimental/fs/read_symlink
std::experimental::filesystem::remove =&gt; cpp/experimental/fs/remove
std::experimental::filesystem::remove_all =&gt; cpp/experimental/fs/remove
std::experimental::filesystem::rename =&gt; cpp/experimental/fs/rename
std::experimental::filesystem::resize_file =&gt; cpp/experimental/fs/resize_file
std::experimental::filesystem::space =&gt; cpp/experimental/fs/space
std::experimental::filesystem::status =&gt; cpp/experimental/fs/status
std::experimental::filesystem::symlink_status =&gt; cpp/experimental/fs/status
std::experimental::filesystem::temp_directory_path =&gt; cpp/experimental/fs/temp_directory_path
std::experimental::filesystem::is_block_file =&gt; cpp/experimental/fs/is_block_file
std::experimental::filesystem::is_character_file =&gt; cpp/experimental/fs/is_character_file
std::experimental::filesystem::is_directory =&gt; cpp/experimental/fs/is_directory
std::experimental::filesystem::is_empty =&gt; cpp/experimental/fs/is_empty
std::experimental::filesystem::is_fifo =&gt; cpp/experimental/fs/is_fifo
std::experimental::filesystem::is_other =&gt; cpp/experimental/fs/is_other
std::experimental::filesystem::is_regular_file =&gt; cpp/experimental/fs/is_regular_file
std::experimental::filesystem::is_socket =&gt; cpp/experimental/fs/is_socket
std::experimental::filesystem::is_symlink =&gt; cpp/experimental/fs/is_symlink
std::experimental::filesystem::status_known =&gt; cpp/experimental/fs/status_known
Basic concepts =&gt; cpp/language/basic_concepts
Comments =&gt; cpp/comment
Keywords =&gt; cpp/keyword
Escape sequences =&gt; cpp/language/escape
ASCII chart =&gt; cpp/language/ascii
Names =&gt; cpp/language/name
Identifiers =&gt; cpp/language/identifiers
Types =&gt; cpp/language/type
Arithmetic types =&gt; cpp/language/types
Objects =&gt; cpp/language/object
Scope =&gt; cpp/language/scope
Lifetime =&gt; cpp/language/lifetime
Storage duration and linkage =&gt; cpp/language/storage_duration
Definitions and one definition rule =&gt; cpp/language/definition
Name lookup  =&gt; cpp/language/lookup
Memory model =&gt; cpp/language/memory_model
Phases of translation =&gt; cpp/language/translation_phases
The main() function =&gt; cpp/language/main_function
Preprocessor =&gt; cpp/preprocessor
#if directive =&gt; cpp/preprocessor/conditional
#else directive =&gt; cpp/preprocessor/conditional
#elif directive =&gt; cpp/preprocessor/conditional
#endif directive =&gt; cpp/preprocessor/conditional
#ifdef directive =&gt; cpp/preprocessor/conditional
#ifndef directive =&gt; cpp/preprocessor/conditional
#define directive =&gt; cpp/preprocessor/replace
macro =&gt; cpp/preprocessor/replace
#include directive =&gt; cpp/preprocessor/include
#warning directive =&gt; cpp/preprocessor/warning
#error directive =&gt; cpp/preprocessor/error
#pragma directive =&gt; cpp/preprocessor/impl
#line directive =&gt; cpp/preprocessor/line
Expressions =&gt; cpp/language/expressions
Operators =&gt; cpp/language/expressions#Operators
Conversions =&gt; cpp/language/expressions#Conversions
Literals =&gt; cpp/language/expressions#Literals
Operator precedence =&gt; cpp/language/operator_precedence
Value categories =&gt; cpp/language/value_category
Evaluation order and sequencing =&gt; cpp/language/eval_order
sizeof operator =&gt; cpp/language/sizeof
alignof operator =&gt; cpp/language/alignof
typeid operator =&gt; cpp/language/typeid
new expression =&gt; cpp/language/new
delete expression =&gt; cpp/language/delete
Constant expressions =&gt; cpp/language/constant_expression
Statements =&gt; cpp/language/statements
if statement =&gt; cpp/language/if
switch statement =&gt; cpp/language/switch
for loop =&gt; cpp/language/for
range-for loop =&gt; cpp/language/range-for
while loop =&gt; cpp/language/while
do-while loop =&gt; cpp/language/do
continue statement =&gt; cpp/language/continue
break statement =&gt; cpp/language/break
goto statement =&gt; cpp/language/goto
return statement =&gt; cpp/language/return
Declaration =&gt; cpp/language/declarations
Namespace declaration =&gt; cpp/language/namespace
Namespace alias =&gt; cpp/language/namespace_alias
static_assert declaration =&gt; cpp/language/static_assert
Lvalue and rvalue references =&gt; cpp/language/reference
Pointers =&gt; cpp/language/pointer
Arrays =&gt; cpp/language/array
Enumerations and enumerators =&gt; cpp/language/enum
const/volatile =&gt; cpp/language/cv
constexpr specifier =&gt; cpp/language/constexpr
decltype operator =&gt; cpp/language/decltype
auto specifier =&gt; cpp/language/auto
alignas specifier =&gt; cpp/language/alignas
typedefs =&gt; cpp/language/typedef
Type alias =&gt; cpp/language/type_alias
Attributes =&gt; cpp/language/attributes
Initialization =&gt; cpp/language/initialization
Default initialization =&gt; cpp/language/default_initialization
Value initialization =&gt; cpp/language/value_initialization
Copy initialization =&gt; cpp/language/copy_initialization
Direct initialization =&gt; cpp/language/direct_initialization
Aggregate initialization =&gt; cpp/language/aggregate_initialization
List initialization =&gt; cpp/language/list_initialization
Reference initialization =&gt; cpp/language/reference_initialization
Functions =&gt; cpp/language/functions
Function declaration =&gt; cpp/language/function
Default arguments =&gt; cpp/language/default_arguments
Variadic arguments =&gt; cpp/language/variadic_arguments
Lambda expression =&gt; cpp/language/lambda
inline specifier =&gt; cpp/language/inline
Argument-dependent lookup =&gt; cpp/language/adl
Overload resolution =&gt; cpp/language/overload_resolution
Operator overloading =&gt; cpp/language/operators
Undefined behavior =&gt; cpp/language/ub
Address of an overload =&gt; cpp/language/overloaded_address
Exceptions =&gt; cpp/language/exceptions
throw expression =&gt; cpp/language/throw
try-catch block =&gt; cpp/language/try_catch
noexcept specifier =&gt; cpp/language/noexcept_spec
noexcept operator =&gt; cpp/language/noexcept
Exception specification =&gt; cpp/language/except_spec
Classes =&gt; cpp/language/classes
Class types =&gt; cpp/language/class
Union types =&gt; cpp/language/union
Data members =&gt; cpp/language/data_members
Member functions =&gt; cpp/language/member_functions
Static members =&gt; cpp/language/static
Nested types =&gt; cpp/language/nested_types
Member templates =&gt; cpp/language/member_template
Derived class =&gt; cpp/language/derived_class
Virtual function =&gt; cpp/language/virtual
Abstract class =&gt; cpp/language/abstract_class
Bit fields =&gt; cpp/language/bit_field
this pointer =&gt; cpp/language/this
Access specifiers =&gt; cpp/language/access
friend specifier =&gt; cpp/language/friend
Default constructor =&gt; cpp/language/default_constructor
Copy constructor =&gt; cpp/language/copy_constructor
Copy assignment operator =&gt; cpp/language/as_operator
Destructor =&gt; cpp/language/destructor
Move constructor =&gt; cpp/language/move_constructor
Move assignment operator =&gt; cpp/language/move_operator
Member initializer lists =&gt; cpp/language/initializer_list
Templates =&gt; cpp/language/templates
Class template =&gt; cpp/language/class_template
Function template =&gt; cpp/language/function_template
Variable template =&gt; cpp/language/variable_template
Explicit specialization =&gt; cpp/language/template_specialization
Partial specialization =&gt; cpp/language/partial_specialization
Dependent names =&gt; cpp/language/dependent_name
Parameter packs =&gt; cpp/language/parameter_pack
sizeof... operator =&gt; cpp/language/sizeof...
SFINAE =&gt; cpp/language/sfinae
History of C++ =&gt; cpp/language/history
Inline assembly =&gt; cpp/language/asm
Extending the namespace std =&gt; cpp/language/extending_std
RAII =&gt; cpp/language/raii
Rule of three =&gt; cpp/language/rule_of_three
As-if rule =&gt; cpp/language/as_if
Return value optimization =&gt; cpp/language/copy_elision
Copy elision =&gt; cpp/language/copy_elision
Empty base optimization =&gt; cpp/language/ebo
static_cast conversion =&gt; cpp/language/static_cast
dynamic_cast conversion =&gt; cpp/language/dynamic_cast
reinterpret_cast conversion =&gt; cpp/language/reinterpret_cast
const_cast conversion =&gt; cpp/language/const_cast
default constructible =&gt; cpp/concept/DefaultConstructible
move constructible =&gt; cpp/concept/MoveConstructible
copy constructible =&gt; cpp/concept/CopyConstructible
move assignable =&gt; cpp/concept/MoveAssignable
copy assignable =&gt; cpp/concept/CopyAssignable
destructible =&gt; cpp/concept/Destructible
trivially copyable =&gt; cpp/concept/TriviallyCopyable
trivial type =&gt; cpp/concept/TrivialType
standard layout type =&gt; cpp/concept/StandardLayoutType
POD type =&gt; cpp/concept/PODType
equality comparable =&gt; cpp/concept/EqualityComparable
less than comparable =&gt; cpp/concept/LessThanComparable
swappable =&gt; cpp/concept/Swappable
value swappable =&gt; cpp/concept/ValueSwappable
nullable pointer =&gt; cpp/concept/NullablePointer
hash =&gt; cpp/concept/Hash
allocator =&gt; cpp/concept/Allocator
function object =&gt; cpp/concept/FunctionObject
callable =&gt; cpp/concept/Callable
predicate =&gt; cpp/concept/Predicate
binary predicate =&gt; cpp/concept/BinaryPredicate
compare =&gt; cpp/concept/Compare
container =&gt; cpp/concept/Container
reversible container =&gt; cpp/concept/ReversibleContainer
allocator aware container =&gt; cpp/concept/AllocatorAwareContainer
sequence container =&gt; cpp/concept/SequenceContainer
associative container =&gt; cpp/concept/AssociativeContainer
unordered associative container =&gt; cpp/concept/UnorderedAssociativeContainer
default insertable =&gt; cpp/concept/DefaultInsertable
copy insertable =&gt; cpp/concept/CopyInsertable
move insertable =&gt; cpp/concept/MoveInsertable
emplace constructible =&gt; cpp/concept/EmplaceConstructible
erasable =&gt; cpp/concept/Erasable
iterator =&gt; cpp/concept/Iterator
input iterator =&gt; cpp/concept/InputIterator
output iterator =&gt; cpp/concept/OutputIterator
forward iterator =&gt; cpp/concept/ForwardIterator
bidirectional iterator =&gt; cpp/concept/BidirectionalIterator
random access iterator =&gt; cpp/concept/RandomAccessIterator
unformatted input function =&gt; cpp/concept/UnformattedInputFunction
formatted input function =&gt; cpp/concept/FormattedInputFunction
unformatted output function =&gt; cpp/concept/UnformattedOutputFunction
formatted output function =&gt; cpp/concept/FormattedOutputFunction
seed sequence =&gt; cpp/concept/SeedSequence
uniform random number generator =&gt; cpp/concept/UniformRandomNumberGenerator
random number distribution =&gt; cpp/concept/RandomNumberDistribution
basic lockable =&gt; cpp/concept/BasicLockable
lockable =&gt; cpp/concept/Lockable
timed lockable =&gt; cpp/concept/TimedLockable
mutex (concept) =&gt; cpp/concept/Mutex
timed mutex (concept) =&gt; cpp/concept/TimedMutex
shared mutex (concept) =&gt; cpp/concept/SharedMutex
shared timed mutex (concept) =&gt; cpp/concept/SharedTimedMutex
clock =&gt; cpp/concept/Clock
trivial clock =&gt; cpp/concept/TrivialClock
bitmask type =&gt; cpp/concept/BitmaskType
numeric type =&gt; cpp/concept/NumericType
literal type =&gt; cpp/concept/LiteralType
concept (core language feature) =&gt; cpp/language/concepts
concept (library type requirement) =&gt; cpp/concept
constraint =&gt; cpp/language/constraints
and keyword =&gt; cpp/language/operator_alternative
and_eq keyword =&gt; cpp/language/operator_alternative
asm keyword =&gt; cpp/language/asm
bitand keyword =&gt; cpp/language/operator_alternative
bitor keyword =&gt; cpp/language/operator_alternative
bool type =&gt; cpp/language/types#Boolean_type
case label =&gt; cpp/language/switch
default label =&gt; cpp/language/switch
type char =&gt; cpp/language/types
char16_t type =&gt; cpp/language/types#Character_types
char32_t type =&gt; cpp/language/types#Character_types
compl keyword =&gt; cpp/language/operator_alternative
defaulted function =&gt; cpp/language/member_functions#Special_member_functions
deleted function =&gt; cpp/language/function#Deleted_functions
type double =&gt; cpp/language/types#Floating_point_types
else keyword =&gt; cpp/language/if
enum declaration =&gt; cpp/language/enum
explicit constructor =&gt; cpp/language/explicit
explicit conversion function =&gt; cpp/language/explicit
extern keyword =&gt; cpp/keyword/extern
extern declaration =&gt; cpp/language/storage_duration
language linkage =&gt; cpp/language/language_linkage
extern template =&gt; cpp/language/class_template
false literal =&gt; cpp/language/bool_literal
type float =&gt; cpp/language/types#Floating_point_types
type int =&gt; cpp/language/types
inline namespace =&gt; cpp/language/namespace
type long =&gt; cpp/language/types
keyword mutable =&gt; cpp/keyword/mutable
not keyword =&gt; cpp/language/operator_alternative
not_eq keyword =&gt; cpp/language/operator_alternative
nullptr literal =&gt; cpp/language/nullptr
or keyword =&gt; cpp/language/operator_alternative
or_eq keyword =&gt; cpp/language/operator_alternative
private inheritance =&gt; cpp/language/derived_class#Private_inheritance
private member access =&gt; cpp/language/access#Private_member_access
protected inheritance =&gt; cpp/language/derived_class#Protected_inheritance
protected member access =&gt; cpp/language/access#Protected_member_access
public inheritance =&gt; cpp/language/derived_class#Public_inheritance
public member access =&gt; cpp/language/access#Public_member_access
register storage duration =&gt; cpp/language/storage_duration
requires expression =&gt; cpp/language/constraints
type short =&gt; cpp/language/types
signed types =&gt; cpp/language/types
static storage duration =&gt; cpp/language/storage_duration
struct declaration =&gt; cpp/language/class
thread_local storage duration =&gt; cpp/language/storage_duration
true literal =&gt; cpp/language/bool_literal
typename keyword =&gt; cpp/keyword/typename
unsigned types =&gt; cpp/language/types
virtual base =&gt; cpp/language/derived_class
void type =&gt; cpp/language/types
wchar_t type =&gt; cpp/language/types
xor keyword =&gt; cpp/language/operator_alternative
xor_eq keyword =&gt; cpp/language/operator_alternative
using directive =&gt; cpp/language/namespace
using declaration (namespace) =&gt; cpp/language/namespace
using declaration (class member) =&gt; cpp/language/using
using (type alias, alias template) =&gt; cpp/language/type_alias
ODR =&gt; cpp/language/definition#One_Definition_Rule
odr-use =&gt; cpp/language/definition#One_Definition_Rule
__has_include =&gt; cpp/preprocessor/include
final =&gt; cpp/language/final
override =&gt; cpp/language/override</text>
      <sha1>4gppkfgsvln05qev8dvsi96j54r60jq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-ColiruCompiler</title>
    <ns>8</ns>
    <id>12902</id>
    <revision>
      <id>64559</id>
      <timestamp>2013-08-20T15:58:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="85">Uses [http://coliru.stacked-crooked.com/ Coliru] online compiler for 'run this code'.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-ScrollableTable</title>
    <ns>8</ns>
    <id>14688</id>
    <revision>
      <id>82951</id>
      <timestamp>2016-01-17T13:07:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="30">Make certain tables scrollable</text>
      <sha1>jlf02n646tnvan5rptbp5dqm5psdjq6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-ShowEditLinks</title>
    <ns>8</ns>
    <id>8419</id>
    <revision>
      <id>30661</id>
      <timestamp>2012-05-07T18:21:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">Shows edit links in ''dcl lists'' to the pages of included templates (no JavaScript needed)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-coliru compiler.css</title>
    <ns>8</ns>
    <id>12904</id>
    <revision>
      <id>65047</id>
      <parentid>64744</parentid>
      <timestamp>2013-08-30T14:38:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1903">.t-example-live-link {
    display: block !important;
    position: relative;
    margin-top: 1em;
    padding: 0 1em;
    width: 55em;
}

.t-example-live-link &gt; a {
    display: none;
}

.coliru-btn {
    background-color: #eeeeee;
    background-image: linear-gradient(#ffffff, #eeeeee);
    background-repeat: repeat-x;
    border: 1px solid #cccccc;
    border-radius: 3px;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
    padding: 3px;
    margin: 3px;
    color: #333333;
    cursor: pointer;
    display: inline-block;
    font-size: 0.8em;
    font-weight: bold;
    line-height: 1em;
}

.coliru-btn:hover {
    background-color: #dddddd;
    background-image: linear-gradient(#ffffff, #dddddd);
}

.coliru-btn-disabled {
    color: #888888;
}

.coliru-btn-disabled:hover {
    background-color: #eeeeee;
    background-image: linear-gradient(#ffffff, #eeeeee);
}

.coliru-powered {
    font-size: 0.8em;
    position: absolute;
    bottom: 0;
    right: 0;
}

.ace_editor {
    display: block;
    position: relative !important;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 30em;
    font-family: DejaVuSansMono, &quot;DejaVu Sans Mono&quot;, courier, monospace !important;
}

.t-example-code {
    margin-top: 0 !important;
}

.coliru-output {
    overflow: auto;
    max-height: 15em;
}

.coliru-output &gt; div {
    display: table;
    width: 100%;
}

.coliru-output pre {
    border: none;
    display: table-row;
    padding: 0;
    margin: 0;
}

.coliru-output-line-shell {
    background-color: #ffd8d8;
}

.coliru-select-compiler select {
    background-color: #EEEEEE;
    background-image: linear-gradient(#FFFFFF, #EEEEEE);
    background-repeat: repeat-x;
    border: 1px solid #CCCCCC;
    border-radius: 3px 3px 3px 3px;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
    font-size: 0.8em;
    line-height: 1em;
    padding: 0;
    width: 12em;
}</text>
      <sha1/>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-coliru compiler.js</title>
    <ns>8</ns>
    <id>12903</id>
    <revision>
      <id>88099</id>
      <parentid>86849</parentid>
      <timestamp>2016-10-31T18:16:47Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>update ace JS repository link -- the old one started 404ing</comment>
      <text xml:space="preserve" bytes="20877">/*
    Copyright (C) 2013  Povilas Kanapickas &lt;povilas@radix.lt&gt;

    This file is part of cppreference.com

    This program 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 2 of the License, or
    (at your option) any later version.

    This program 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 program.  If not, see http://www.gnu.org/licenses/.
*/

String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g, &quot;&quot;);
};

/* We add two new divs for the live editor and the program output. The divs are
   inserted after the geshi code and output respectively. This way the ACE
   editor and the compilation output are independent from the static geshi
   text. We can easily switch between the live editor and the static version.
*/
function Editor(root) {

    var cmd_info_cxx = {
        cc: [
            { title: 'GCC 4.6', cmd: 'g++-4.6 -std=c++98 ' },
            { title: 'GCC 4.7', cmd: 'g++-4.7 -std=c++98 ' },
            { title: 'GCC 4.7 (C++11)', cmd: 'g++-4.7 -std=c++11 ' },
            { title: 'GCC 4.8', cmd: 'g++-4.8 -std=c++98 ' },
            { title: 'GCC 4.8 (C++11)', cmd: 'g++-4.8 -std=c++11 ' },
            { title: 'GCC 4.9', cmd: 'g++-4.9 -std=c++98 ' },
            { title: 'GCC 4.9 (C++11)', cmd: 'g++-4.9 -std=c++11 ', opt_suff: ' -latomic ' },
            { title: 'GCC 4.9 (C++14)', cmd: 'g++-4.9 -std=c++14 ', opt_suff: ' -latomic ' },
            { title: 'GCC 5.2 (C++98)', cmd: 'g++-5.2 -std=c++98 ' },
            { title: 'GCC 5.2 (C++11)', cmd: 'g++-5.2 -std=c++11 ', opt_suff: ' -latomic ' },
            { title: 'GCC 5.2 (C++14)', cmd: 'g++-5.2 -std=c++14 ', opt_suff: ' -latomic ' },
            { title: 'GCC 5.2 (C++17)', cmd: 'g++-5.2 -std=c++1z ', opt_suff: ' -latomic ' },
            { title: 'GCC 6.1 (C++98)', cmd: 'g++ -std=c++98 ' },
            { title: 'GCC 6.1 (C++11)', cmd: 'g++ -std=c++11 ', opt_suff: ' -latomic ' },
            { title: 'GCC 6.1 (C++14)', cmd: 'g++ -std=c++14 ', opt_suff: ' -latomic ' },
            { title: 'GCC 6.1 (C++17)', cmd: 'g++ -std=c++1z ', opt_suff: ' -latomic ' },
            { title: 'GCC 6.1 (C++17 + Concepts TS + TM TS + Filesystem TS)',
                cmd: 'g++ -std=c++1z -fconcepts -fgnu-tm ',
                opt_suff: ' -latomic -lstdc++fs' },
            { title: 'clang 3.8', cmd: 'clang++ -std=c++98 ' },
            { title: 'clang 3.8 (C++11)',
              cmd: 'clang++ -std=c++11 -stdlib=libc++ ',
              opt_suff: ' -latomic -lsupc++ '
            },
            { title: 'clang 3.8 (C++14)',
              cmd: 'clang++ -std=c++14 -stdlib=libc++ ',
              opt_suff: ' -latomic -lsupc++ '
            },
            { title: 'clang 3.8 (C++17)',
              cmd: 'clang++ -std=c++1z -stdlib=libc++ ',
              opt_suff: ' -latomic -lsupc++ '
            }
        ],
        default_id: 16,
        opt: ' -O2 -Wall -Wextra -pedantic -pthread -pedantic-errors main.cpp -lm ',
    }

    var cmd_info_c = {
        cc: [
            { title: 'GCC 4.6', cmd: 'gcc-4.6 -x c -std=c89 ' },
            { title: 'GCC 4.7', cmd: 'gcc-4.7 -x c -std=c89 ' },
            { title: 'GCC 4.8', cmd: 'gcc-4.8 -x c -std=c89 ' },
            { title: 'GCC 4.8 (C99)', cmd: 'g++-4.8 -x c -std=c99 ' },
            { title: 'GCC 4.9', cmd: 'gcc-4.9 -x c -std=c89 ' },
            { title: 'GCC 4.9 (C99)', cmd: 'g++-4.9 -x c -std=c99 ' },
            { title: 'GCC 4.9 (C11)', cmd: 'g++-4.9 -x c -std=c11 ', opt_suff: ' -latomic ' },
            { title: 'GCC 5.2 (C89)', cmd: 'g++-5.2 -x c -std=c89 ' },
            { title: 'GCC 5.2 (C99)', cmd: 'g++-5.2 -x c -std=c99 ' },
            { title: 'GCC 5.2 (C11)', cmd: 'g++-5.2 -x c -std=c11 ', opt_suff: ' -latomic ' },
            { title: 'GCC 6.1 (C89)', cmd: 'g++ -x c -std=c89 ' },
            { title: 'GCC 6.1 (C99)', cmd: 'g++ -x c -std=c99 ' },
            { title: 'GCC 6.1 (C11)', cmd: 'g++ -x c -std=c11 ', opt_suff: ' -latomic ' },
            { title: 'clang 3.8', cmd: 'clang -x c -std=c89 -Wno-newline-eof ' },
            { title: 'clang 3.8 (C99)', cmd: 'clang++ -x c -std=c99 -Wno-newline-eof '},
            { title: 'clang 3.8 (C11)', cmd: 'clang++ -x c -std=c11 -Wno-newline-eof '
                                      , opt_suff: ' -latomic '}
        ],
        default_id: 12,
        opt: ' -O2 -Wall -Wextra -pedantic -pthread -pedantic-errors main.cpp -lm ',
    }

    this.check_is_cxx = function() {
        if (mw.config.get('wgTitle').indexOf('c/') == 0) {
            return false;
        } else {
            return true;
        }
    };

    if (this.check_is_cxx()) {
        this.cmd_info = cmd_info_cxx;
    } else {
        this.cmd_info = cmd_info_c;
    }

    this.cmd_run_normal = ' 2&gt;&amp;1 | sed &quot;s/^/☘/&quot;; if [ -x a.out ]; then ./a.out | sed &quot;s/^/☢/&quot;; fi'
    this.cmd_run_share = ' &amp;&amp; ./a.out';

    this.el = {};
    this.el.root = root;
    this.is_orig = true;

    this.el.action_bar = this.el.root.children('.t-example-live-link:first');

    // initialize the action bar
    this.el.run_init_btn = this.el.action_bar.children('.coliru-btn-run-init');
    this.el.run_btn = $('&lt;div&gt;Run&lt;/div&gt;')
                        .addClass('coliru-btn coliru-btn-run')
                        .hide().appendTo(this.el.action_bar);
    this.el.share_btn = $('&lt;div&gt;Share&lt;/div&gt;')
                        .addClass('coliru-btn coliru-btn-share')
                        .hide().appendTo(this.el.action_bar);
    this.el.exit_btn = $('&lt;div&gt;Exit&lt;/div&gt;')
                        .addClass('coliru-btn coliru-btn-exit')
                        .hide().appendTo(this.el.action_bar);

    this.el.cc_select_div = $('&lt;div/&gt;')
                        .addClass('coliru-select-compiler')
                        .hide().appendTo(this.el.action_bar);
    this.el.cc_select = $('&lt;select/&gt;').appendTo(this.el.cc_select_div);

    for (var i = 0; i &lt; this.cmd_info.cc.length; ++i) {
        var cmd = this.cmd_info.cc[i];
        $('&lt;option/&gt;').text(cmd.title).attr('value', i.toString())
                                      .appendTo(this.el.cc_select);
    }
    this.el.cc_select.val(this.cmd_info.default_id.toString());

    this.el.pwr = $('&lt;div&gt;Powered by &lt;a href=&quot;http://coliru.stacked-crooked.com&quot;&gt;Coliru&lt;/a&gt; online compiler&lt;/div&gt;')
                        .addClass('coliru-powered')
                        .hide().appendTo(this.el.action_bar);

    // find and store the original code and output divs
    orig_code = this.el.root.children('.mw-geshi:first');
    if (orig_code.length &gt; 0) {
        this.has_orig_code = true;
        this.el.orig_code = orig_code.first();
    } else {
        this.has_orig_code = false;
        this.el.orig_code = $('&lt;div/&gt;').hide().insertAfter(this.el.action_bar);
    }

    orig_output = this.el.root.children('.mw-geshi:last');
    if (orig_output.length &gt; 0 &amp;&amp; !orig_output.is(orig_code)) {
        this.has_orig_output = true;
        this.el.orig_output = orig_output.first();
    } else {
        this.has_orig_output = false;
        this.el.output_p = $('&lt;p&gt;Output:&lt;/p&gt;').hide().insertAfter(this.el.orig_code);
        this.el.orig_output = $('&lt;div/&gt;').hide().insertAfter(this.el.output_p);
    }

    if (this.has_orig_code) {
        this.source_code = this.el.orig_code.text().replace(/\u00a0/g, &quot; &quot;);
    } else {
        this.source_code = '';
    }

    // initialize the editor
    this.el.edited_code = $('&lt;div/&gt;').addClass('t-example-code mw-geshi')
                                     .hide().insertAfter(this.el.orig_code);
    this.el.editor_div = $('&lt;div/&gt;').addClass('ace_editor ace-tm')
                                    .appendTo(this.el.edited_code);
    this.editor = ace.edit(this.el.editor_div.get(0));
    this.editor.setTheme(&quot;ace/theme/textmate&quot;);
    this.editor.getSession().setMode(&quot;ace/mode/c_cpp&quot;);

    this.editor.commands.bindKeys({&quot;Ctrl-l&quot;:null});
    this.editor.commands.bindKeys({&quot;Ctrl-t&quot;:null});
    this.editor.commands.bindKeys({&quot;Command-l&quot;:null});
    this.editor.commands.addCommand({
        name: 'Build and run',
        bindKey: {win: 'Ctrl-B', mac: 'Command-B'},
        exec: function(editor) { this.compile_now(); },
        readOnly: true
    });
    this.editor.commands.addCommand({
        name: 'Disable Ctrl-S',
        bindKey: {win: 'Ctrl-S', mac: 'Command-S'},
        exec: function(editor) {},
        readOnly: true
    });

    this.editor.getSession().setValue(this.source_code);

    // create compiler output block
    this.el.compiler_output_p = $('&lt;p&gt;Compiler messages:&lt;/p&gt;')
                                  .hide().insertAfter(this.el.edited_code);
    this.el.compiler_output = $('&lt;div/&gt;').addClass('coliru-output coliru-output-compiler mw-geshi')
                                         .hide().insertAfter(this.el.compiler_output_p);
    this.el.compiler_output_div = $('&lt;div/&gt;').appendTo(this.el.compiler_output);

    // create output block
    this.el.edited_output = $('&lt;div/&gt;').addClass('coliru-output coliru-output-program mw-geshi')
                                       .hide().insertAfter(this.el.orig_output);
    this.el.output_div = $('&lt;div/&gt;').appendTo(this.el.edited_output);

    this.reset_editor = function() {
        this.editor.getSession().setValue(this.source_code);
    };

    this.el.run_btn.click(function() {
        if (!this.el.run_btn.hasClass('coliru-btn-disabled')) {
            this.compile_now();
        }
    }.bind(this));
    this.el.share_btn.click(function() {
        if (!this.el.share_btn.hasClass('coliru-btn-disabled')) {
            this.share();
        }
    }.bind(this));
    this.el.exit_btn.click(function() {
        if (!this.el.exit_btn.hasClass('coliru-btn-disabled')) {
            this.restore_orig();
        }
    }.bind(this));

    this.enable_ui = function(value) {
        this.editor.setReadOnly(!value);

        if (value) {
            this.el.run_btn.removeClass('coliru-btn-disabled');
            this.el.share_btn.removeClass('coliru-btn-disabled');
            this.el.exit_btn.removeClass('coliru-btn-disabled');
        } else {
            this.el.run_btn.addClass('coliru-btn-disabled');
            this.el.share_btn.addClass('coliru-btn-disabled');
            this.el.exit_btn.addClass('coliru-btn-disabled');
        }
    };

    this.send = function(location, cmd, src, f) {
        this.enable_ui(false);

        var http_request = new XMLHttpRequest();
        http_request.open(&quot;POST&quot;,
                          &quot;http://coliru.stacked-crooked.com/&quot; + location, true);
        var parent = this;
        http_request.onreadystatechange = function() {
            if (http_request.readyState == 4) {
                parent.enable_ui(true);
                if (http_request.status == 200) {
                    parent.last_result = http_request.responseText.trim();
                    f({src: parent.editor.getValue(),
                       cmd: parent.cmd,
                       output: parent.last_result});
                }
            }
        };
        var post_data = JSON.stringify({
            &quot;cmd&quot; : cmd, &quot;src&quot; : src
        });
        http_request.send(post_data);
    };

    this.compile_now = function() {
        var parent = this;
        this.editor.getSession().clearAnnotations();
        this.el.compiler_output_p.fadeOut('fast');
        this.el.compiler_output.fadeOut('fast');

        this.el.output_div.html('Building and running...');

        var cmd = this.get_cmd(false);
        var src = this.editor.getValue();

        this.send(&quot;compile&quot;, cmd, src, function(obj) {
            var lines = obj.output.split(/\n/);

            // analyze the compiler output
            var annotations = [];
            var annotation_lines = [];

            var program_output = '';
            var compiler_output = '';

            for (var i = 0; i !== lines.length; ++i) {
                var line = lines[i];

                var is_compile_output = false;
                var is_shell_output = false;

                if (line.indexOf('☘') == 0) {
                    is_compile_output = true;
                    line = line.substring(1);
                } else if (line.indexOf('☢') == 0) {
                    line = line.substring(1);
                } else {
                    // everything else comes from the shell. Presumably, this
                    // indicates a serious error in the program
                    // (e.g. it segfaults).
                    // FIXME: probably need a better API
                    is_shell_output = true;
                }

                if (line !== '') {

                    line = line.replace(/&lt;/g, '&amp;lt').replace(/&gt;/g, '&amp;gt');

                    if (is_compile_output) {
                        // check if line contains an error
                        var has_error = false, has_any_error = false;
                        var error_lineno = 0;
                        var error_text = &quot;&quot;;

                        var match = line.match(/^main.cpp:(\d+):\d+:(.*)/);
                        if (match) {
                            has_error = true;
                            error_lineno = parseInt(match[1]);
                            error_text = match[2].trim();
                        }

                        // add annotation if possible
                        if (has_error) {
                            if (annotation_lines.indexOf(error_lineno) === -1) {
                                var error_type = 'error';
                                if (error_text.match(/^warning:/)) {
                                    error_type = 'warning';
                                }

                                annotation_lines.push(error_lineno);
                                annotations.push({row: error_lineno-1, column: 0,
                                                text: error_text, type:error_type});
                            }
                        }

                        // highlight the output line if possible
                        pre_open = '&lt;pre';
                        if (has_error) {
                            pre_open += ' onclick=&quot;window.jump_to_error(this, '
                                    + error_lineno + ')&quot; onmouseover=&quot;window.highlight_error(this, true)&quot; onmouseout=&quot;window.highlight_error(this, false)&quot;';
                        }
                        pre_open += '&gt;';
                        pre_close = '&lt;/pre&gt;';
                        compiler_output += pre_open + line + pre_close;
                    } else if (is_shell_output) {
                        pre_open = '&lt;pre class=&quot;coliru-output-line-shell&quot;&gt;';
                        pre_close = '&lt;/pre&gt;';
                        program_output += pre_open + line + pre_close;
                    } else {
                        pre_open = '&lt;pre class=&quot;coliru-output-line-exe&quot;&gt;';
                        pre_close = '&lt;/pre&gt;';
                        program_output += pre_open + line + pre_close;
                    }
                } else {
                    program_output += '&lt;br/&gt;';
                }
            }

            parent.el.output_div.html(program_output);

            if (compiler_output !== '') {
                parent.el.compiler_output_div.html(compiler_output);
                parent.el.compiler_output_p.fadeIn('fast');
                parent.el.compiler_output.fadeIn('fast');
            }

            // mark the errors in the code
            window.setTimeout(function() {
                parent.editor.getSession().setAnnotations(annotations);
            }, 100);
        });
    };

    this.share = function() {
        var cmd = this.get_cmd(true);
        var src = this.editor.getValue();

        this.send(&quot;share&quot;, cmd, src, function (obj) {
            var url = &quot;http://coliru.stacked-crooked.com/view?id=&quot; + obj.output;
            window.open(url, '_blank');
        })
    };

    this.get_cmd = function(is_shared) {
        var val = this.el.cc_select.val();
        var cc = this.cmd_info.cc[parseInt(val)].cmd;
        cc = cc + this.cmd_info.opt
        if (this.cmd_info.cc[parseInt(val)].opt_suff !== undefined) {
            cc = cc + this.cmd_info.cc[parseInt(val)].opt_suff;
        }
        if (is_shared) {
            return cc + this.cmd_run_share;
        } else {
            return cc + this.cmd_run_normal;
        }
    };

    this.replace_orig = function() {
        if (!this.is_orig) {
            return; // already replaced
        }

        this.el.root.height(this.el.root.height());

        var parent = this;
        this.el.run_init_btn.fadeOut(&quot;fast&quot;, function() {
            parent.el.run_btn.fadeIn(&quot;fast&quot;).css(&quot;display&quot;,&quot;inline-block&quot;);
            parent.el.share_btn.fadeIn(&quot;fast&quot;).css(&quot;display&quot;,&quot;inline-block&quot;);
            parent.el.exit_btn.fadeIn(&quot;fast&quot;).css(&quot;display&quot;,&quot;inline-block&quot;);
            parent.el.cc_select_div.fadeIn(&quot;fast&quot;).css(&quot;display&quot;,&quot;inline-block&quot;);
            parent.el.pwr.fadeIn(&quot;fast&quot;).css(&quot;display&quot;,&quot;inline-block&quot;);
        });

        this.el.orig_code.fadeOut(&quot;fast&quot;, function() {
            parent.el.edited_code.fadeIn(&quot;fast&quot;);
        });
        this.el.orig_output.fadeOut(&quot;fast&quot;, function() {
            if (!parent.has_orig_output) {
                parent.el.output_p.fadeIn('fast');
            }
            parent.el.edited_output.fadeIn(&quot;fast&quot;, function() {
                parent.el.root.height('auto');
            });
        });

        this.is_orig = false;
    };

    this.restore_orig = function() {
        if (this.is_orig) {
            return; // already replaced
        }

        this.el.root.height(this.el.root.height());

        var parent = this;

        this.el.run_btn.fadeOut(&quot;fast&quot;, function() {
            parent.el.run_init_btn.fadeIn(&quot;fast&quot;).css(&quot;display&quot;,&quot;inline-block&quot;);
        });
        this.el.share_btn.fadeOut(&quot;fast&quot;);
        this.el.exit_btn.fadeOut(&quot;fast&quot;);
        this.el.cc_select_div.fadeOut(&quot;fast&quot;);
        this.el.pwr.fadeOut(&quot;fast&quot;);

        this.el.edited_code.fadeOut(&quot;fast&quot;, function() {
            parent.el.orig_code.fadeIn(&quot;fast&quot;);
        });

        this.el.compiler_output_p.fadeOut('fast');
        this.el.compiler_output.fadeOut('fast');

        if (!this.has_orig_output) {
            this.el.output_p.fadeOut('fast');
        }

        var parent = this;
        this.el.edited_output.fadeOut(&quot;fast&quot;, function() {
            parent.el.orig_output.fadeIn(&quot;fast&quot;, function() {
                parent.el.root.height('auto');
            });
        });

        this.is_orig = true;
    };

    this.enable_ui(true);
};

function get_script_cached(url, callback) {
    return $.ajax({
            type: &quot;GET&quot;,
            url: url,
            success: callback,
            dataType: &quot;script&quot;,
            cache: true
    });
};

window.highlight_error = function(node, b) {
    node.style.cursor = b ? 'pointer' : 'auto';
};

window.jump_to_error = function(node, lineno) {
    var root = $(node).parents('.t-example');
    if (root.length &gt; 0) {
        for (var i = 0; i &lt; editors.length; ++i) {
            if (editors[i].el.root.is(root)) {
                var editor = editors[i];
                editor.editor.gotoLine(lineno, 0, true);
                editor.editor.focus();
            }
        }
    }
};

var editors = [];

$.when(
    get_script_cached('http://cdn.jsdelivr.net/ace/1.2.4/noconflict/ace.js')
).done(function() {
    $.when(
        get_script_cached('http://cdn.jsdelivr.net/ace/1.2.4/noconflict/mode-c_cpp.js'),
        $.Deferred(function(deferred) {
            $(deferred.resolve);
        })
    ).done(function() {
        $('.t-example-live-link &gt; a').each(function() {
            $(this).replaceWith('&lt;div class=&quot;coliru-btn coliru-btn-run-init&quot;&gt;Run this code&lt;/div&gt;');
        });
        $('.t-example &gt; .mw-geshi:first').each(function() {
            $(this).addClass('t-example-code');
        });

        $('.coliru-btn-run-init').click(function() {
            var root = $(this).parent().parent();

            // find the editor for this root element
            var i;
            for (i = 0; i &lt; editors.length; ++i) {
                if (editors[i].el.root.is(root)) {
                    break;
                }
            }
            if (i == editors.length) {
                editors[i] = new Editor(root);
            }

            var editor = editors[i];
            editor.replace_orig();
            editor.compile_now();
        });
    });
});</text>
      <sha1>sdxza0vljap43sb5jm8iw3l8avfkgoa</sha1>
      <model>javascript</model>
      <format>text/javascript</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-show edit links.css</title>
    <ns>8</ns>
    <id>8417</id>
    <revision>
      <id>61779</id>
      <parentid>61777</parentid>
      <timestamp>2013-06-09T13:54:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="280">.t-dsc span.editsection {
    display: inline;
}

.t-par span.editsection {
    display: inline;
}

.t-template-editlink span.editsection {
    display: inline;
}

.t-navbar-menu span.editsection {
    display: inline;
}

.t-page-template span.editsection {
    display: inline;
}</text>
      <sha1/>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-standard revisions.css</title>
    <ns>8</ns>
    <id>12957</id>
    <revision>
      <id>65196</id>
      <timestamp>2013-09-04T23:07:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>demo</comment>
      <text xml:space="preserve" bytes="704">
.stdrev-select {
    float: left;
    height: 2.5em;
}

.stdrev-select &gt; div {
    margin: 1.7em 1em 0 0;
    font-size: 0.7em;
}

.stdrev-text {
    display: inline-block;
    margin: 0.15em;
}

.stdrev-select select {
    background-color: #EEEEEE;
    background-image: linear-gradient(#FFFFFF, #EEEEEE);
    background-repeat: repeat-x;
    border: 1px solid #CCCCCC;
    border-radius: 3px 3px 3px 3px;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
    font-size: 1.0em;
    line-height: 1em;
    padding: 0;
    width: 6em;
}

.stdrev-rev-hide &gt; tbody &gt; tr &gt; td {
    border: none !important;
    padding: 0 !important;
}

.stdrev-rev-hide &gt; tbody &gt; tr &gt; td:nth-child(2) {
    display: none;
}</text>
      <sha1>csu6b5bm6bxwiv0esityipwwek1t4pj</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-standard revisions.js</title>
    <ns>8</ns>
    <id>12956</id>
    <revision>
      <id>80683</id>
      <parentid>80665</parentid>
      <timestamp>2015-08-26T02:09:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>next iteration</comment>
      <text xml:space="preserve" bytes="56351">/*
    Copyright (C) 2013-2015  Povilas Kanapickas &lt;povilas@radix.lt&gt;

    This file is part of cppreference.com

    This program 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 2 of the License, or
    (at your option) any later version.

    This program 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 program.  If not, see http://www.gnu.org/licenses/.
*/

$(function() {

    var debug = false;

    // Add console.log() if not present
    if (!window.console)
        window.console = {};
    if (!window.console.log)
        window.console.log = function() { };

    function array_equal(a, b) {
        var i = a.length;
        if (i !== b.length) {
            return false;
        }
        while (i--) {
            if (a[i] !== b[i]) {
                return false;
            }
        }
        return true;
    };

    function array_sort_unique(a) {
        a = a.sort(function(x, y) { return x - y; });
        var c = a[0];
        var res = [c];
        for (var i = 1; i &lt; a.length; i++) {
            if (a[i] !== c) {
                res.push(a[i]);
                c = a[i];
            }
        }
        return res;
    }

    // supports only arrays of bool
    function array_and(a, b) {
        var res = [];
        var length = a.length &lt; b.length ? a.length : b.length;
        for (var i = 0; i &lt; length; i++) {
            res.push(a[i] &amp;&amp; b[i]);
        }
        return res;
    }
    // supports only arrays of bool
    function array_or(a, b) {
        var res = [];
        var length = a.length &lt; b.length ? a.length : b.length;
        for (var i = 0; i &lt; length; i++) {
            res.push(a[i] || b[i]);
        }
        return res;
    }

    /// Exit if we are not in view mode
    if (mw.config.get('wgAction') != 'view') {
        return;
    }
    if (mw.config.get('wgNamespaceNumber') != 0) {
        return;
    }

    /// Are we dealing with C or C++
    var is_cxx = (mw.config.get('wgTitle').indexOf('c/') != 0);

    /// Standard revision identification 'enums'

    var Rev_c = { DIFF: 0, FIRST: 1, C89: 1, C99: 2, C11: 3, LAST: 4 };
    var Rev_cxx = { DIFF: 0, FIRST: 1, CXX98: 1, CXX11: 2, CXX14: 3, CXX17: 4, LAST: 5 };

    var Rev;

    if (is_cxx) {
        Rev = Rev_cxx;
    } else {
        Rev = Rev_c;
    }

    /// Standard revision description strings
    var desc_c = [
        { rev: Rev.DIFF, title: 'Diff' },
        { rev: Rev.C89, title: 'C89' },
        { rev: Rev.C99, title: 'C99' },
        { rev: Rev.C11, title: 'C11' },
    ];

    var desc_cxx = [
        { rev: Rev.DIFF, title: 'Diff' },
        { rev: Rev.CXX98, title: 'C++98/03' },
        { rev: Rev.CXX11, title: 'C++11' },
        { rev: Rev.CXX14, title: 'C++14' },
        { rev: Rev.CXX17, title: 'C++17' },
    ];

    var desc;

    if (is_cxx) {   // select either C or C++ version
        desc = desc_cxx;
    } else {
        desc = desc_c;
    }

    /// Several helper arrays and functions to identify on which revisions
    /// certain mark is shown.

    function should_be_shown(rev, mark) {
        if (rev === Rev.DIFF) {
            return true;
        }
        if (mark.since) {
            return (rev &gt;= mark.rev);
        } else {
            return (rev &lt; mark.rev);
        }
    }

    /** Returns mark for element. Use when at most single mark can be present */
    function get_mark_cxx(el) {
        if (el.hasClass('t-since-cxx11')) {
            return { since: true, rev: Rev.CXX11 };
        }
        if (el.hasClass('t-since-cxx14')) {
            return { since: true, rev: Rev.CXX14 };
        }
        if (el.hasClass('t-since-cxx17')) {
            return { since: true, rev: Rev.CXX17 };
        }
        if (el.hasClass('t-until-cxx11')) {
            return { since: false, rev: Rev.CXX11 };
        }
        if (el.hasClass('t-until-cxx14')) {
            return { since: false, rev: Rev.CXX14 };
        }
        if (el.hasClass('t-until-cxx17')) {
            return { since: false, rev: Rev.CXX17 };
        }
        return { since: true, rev: Rev.CXX98 };
    }

    function get_mark_c(el) {
        if (el.hasClass('t-since-c99')) {
            return { since: true, rev: Rev.C99 };
        }
        if (el.hasClass('t-since-c11')) {
            return { since: true, rev: Rev.C11 };
        }
        if (el.hasClass('t-until-c99')) {
            return { since: false, rev: Rev.C99 };
        }
        if (el.hasClass('t-until-c11')) {
            return { since: false, rev: Rev.C11 };
        }
        return { since: true, rev: Rev.C89 };
    }

    /** Returns a &quot;visibility map&quot;: a bool array indexed by revisions. If
        result[rev] is true for particular revision rev, then the element
        should be visible on that revision.
    */
    function get_visibility_on_rev_cxx(el) {
        // DIFF: 0, CXX98: 1, CXX11: 2, CXX14: 3, CXX17: 4
        // DIFF is always false
        if (el.hasClass('t-since-cxx17')) {
            return [false, false, false, false, true];
        }
        if (el.hasClass('t-since-cxx14')) {
            return [false, false, false, true, true];
        }
        if (el.hasClass('t-since-cxx11')) {
            if (el.hasClass('t-until-cxx14')) {
                return [false, false, true, false, false];
            }
            return [false, false, true, true, true];
        }
        if (el.hasClass('t-until-cxx11')) {
            return [false, true, false, false, false];
        }
        if (el.hasClass('t-until-cxx14')) {
            return [false, true, true, false, false];
        }
        if (el.hasClass('t-until-cxx17')) {
            return [false, true, true, true, false];
        }
        return [false, true, true, true, true];
    }

    function get_visibility_on_rev_c(el) {
        // DIFF: 0, C89: 1, C99: 2, C11: 3
        // DIFF is always false
        if (el.hasClass('t-since-c11')) {
            return [false, false, false, true];
        }
        if (el.hasClass('t-since-c99')) {
            if (el.hasClass('t-until-c11')) {
                return [false, false, true, false];
            }
            return [false, false, true, true];
        }
        if (el.hasClass('t-until-c99')) {
            return [false, true, false, false];
        }
        if (el.hasClass('t-until-c11')) {
            return [false, true, true, false];
        }
        return [false, true, true, true];
    }

    /* Result is similar to get_visibility_on_rev, except that all values are set to
       val
    */
    function visibility_fill_cxx(val) {
        // DIFF: 0, CXX98: 1, CXX11: 2, CXX14: 3, CXX17: 4
        return [val, val, val, val, val];
    }
    function visibility_fill_c(el) {
        // DIFF: 0, C89: 1, C99: 2, C11: 3
        return [val, val, val, val];
    }

    /// Prints values returned by get_visibility_on_rev
    function debug_print_visibility_map(revs) {
        var out = '{ ';
        for (var i = 0; i &lt; revs.length; i++) {
            if (revs[i]) {
                out += 't';
            } else {
                out += 'f';
            }
        }
        out += ' }';
        return out;
    }

    var get_mark, get_visibility_on_rev, visibility_fill;

    if (is_cxx) {   // select either C or C++ version
        get_mark = get_mark_cxx;
        get_visibility_on_rev = get_visibility_on_rev_cxx;
        visibility_fill = visibility_fill_cxx;
    } else {
        get_mark = get_mark_c;
        get_visibility_on_rev = get_visibility_on_rev_c;
        visibility_fill = visibility_fill_c;
    }

    /** Converts visibility map to an array of revisions as accepted by
        ObjectTracker's add_* methods
    */
    function visibility_to_shown_revs(revs) {
        var res = [];
        for (var rev = Rev.DIFF; rev != Rev.LAST; ++rev) {
            if (revs[rev]) {
                res.push(rev);
            }
        }
        return res;
    }

    function get_shown_revs(el) {
        return visibility_to_shown_revs(get_visibility_on_rev(el));
    }

    /** This class keeps track of objects that need to be shown or hidden for
        specific standard revision.
    */
    var ObjectTracker = function() {

        this.all_objects = [];
        // jQuery screws up restoring correct display property
        this.all_display = [];

        this.diff_ids = [];
        this.curr_rev = Rev.DIFF;

        // Maps revisions to object indexes within this.all_objects.
        this.rev2id_map = [];
        for (var i = 0; i &lt; Rev.LAST; ++i) {
            this.rev2id_map[i] = [];
        }
    }

    /** Adds a jQuery object @a obj that should be shown only on specific
        revisions identified by @a revs. @a orig_obj is used to compute the
        display property that should be set to the object when the visibility
        is restored.
    */
    ObjectTracker.prototype.add_object = function(obj, orig_obj, revs) {
        var id = this.all_objects.length;
        this.all_objects[id] = obj;
        this.all_display[id] = orig_obj.css('display');

        for (var i = 0; i &lt; revs.length; ++i) {
            this.rev2id_map[revs[i]].push(id);
        }
    };

    // Same as add_object except that obj is used to compute the display
    // property. The object must be already attached to DOM.
    ObjectTracker.prototype.add_diff_object = function(obj, revs) {
        this.add_object(obj, obj, revs);
    }

    /** Changes the visibility of objects */
    ObjectTracker.prototype.to_rev = function(rev) {
        if (rev === this.curr_rev) {
            return;
        }
        var visible_before = this.rev2id_map[this.curr_rev];
        var visible_after = this.rev2id_map[rev];

        for (var i = 0; i &lt; visible_before.length; ++i) {
            var curr = visible_before[i];
            if ($.inArray(curr, visible_after) === -1) {
                this.all_objects[curr].css('display', 'none');
            }
        }
        for (var i = 0; i &lt; visible_after.length; ++i) {
            var curr = visible_after[i];
            if ($.inArray(curr, visible_before) === -1) {
                this.all_objects[curr].css('display', this.all_display[curr]);
            }
        }
        this.curr_rev = rev;
    };

    /** This class tracks object visibility throughout section hierarchy. That
        is, for example, when section contents are not visible on a certain
        revision, then related visual objects such as section title are hidden
        too.

        In the context of this class, visual objects can be of one of the
        following three kinds:

         - primary: define the visibility of the section the objects are in.
         - secondary: visibility depends on visibility of primary objects.
         - unknown: it's unknown how the object should behave. Effectively
            identical to primary elements that are visible on all revisions.
         - container: Contains other visual objects. Such objects are
            explicitly tracked in cases when in order to completely hide the
            container, it's not enough to hide its contents (e.g. when
            container has padding).

        When all primary and unknown elements within a section are not visible
        in certain revision, then all secondary elements are hidden too. The
        process is repeated throughout entire section hierarchy.

        The section hierarchy tree is built by specifying hierarchy level via
        set_level() and adding elements via add_*() functions. Hierarchy levels
        are identified by ascending integer numbers. Container objects are set
        independently via enter_container() and exit_container() functions -
        these functions effectively form a parallel hierarchy.
    */
    var SectionContentsTracker = function() {
        this.root_section = new SectionNode(null);
        this.root_container = new ContainerNode(null, null);
        this.curr_section = this.root_section;
        this.curr_container = this.root_container;
    };

    var ObjectType = {
        PRIMARY : 0,
        SECONDARY : 1,
        UNKNOWN : 2,
        SECTION : 3,
        CONTAINER : 4
    };

    // internal classes for SectionContentsTracker
    var ObjectNode = function(parent_section, parent_container, type, obj) {
        this.parent_section = parent_section;
        this.parent_container = parent_container;
        this.level = parent_section.level + 1;
        this.children = null;
        this.obj = obj;
        this.type = type;
        this.visible = null;
    };

    var SectionNode = function(parent) {
        this.parent_section = parent;
        if (parent === null) {
            this.level = 0;
        } else {
            this.level = this.parent_section.level + 1;
        }
        this.children = [];
        this.obj = null;
        this.type = ObjectType.SECTION;
        this.visible = null;
    };

    var ContainerNode = function(parent, obj) {
        this.parent_container = parent;
        this.children = [];
        this.obj = obj;
        this.type = ObjectType.CONTAINER;
        this.visible = null;
    };

    /** Walks the internal section hierarchy tree to the specified level. If
        level is higher than current level, then new section nodes are created as
        descendants of the current section node. If the current level is the
        same, a new node is created.
    */
    SectionContentsTracker.prototype.set_level = function(level) {
        if (level &lt; 0) {
            console.log(&quot;Level must be positive&quot;);
            return;
        }

        while (this.curr_section.level &gt;= level &amp;&amp; this.curr_section.level &gt; 0) {
            this.curr_section = this.curr_section.parent_section;
        }
        while (this.curr_section.level &lt; level) {
            var new_section = new SectionNode(this.curr_section);
            this.curr_section.children.push(new_section);
            this.curr_section = new_section;
        }
    };

    SectionContentsTracker.prototype.add_object = function(obj, type, visible) {
        var new_node = new ObjectNode(this.curr_section, this.curr_container, type, obj);
        new_node.visible = visible;
        this.curr_section.children.push(new_node);
        this.curr_container.children.push(new_node);
    };

    SectionContentsTracker.prototype.add_primary = function(obj, visible) {
        this.add_object(obj, ObjectType.PRIMARY, visible);
    };

    SectionContentsTracker.prototype.add_secondary = function(obj) {
        this.add_object(obj, ObjectType.SECONDARY, null);
    };

    SectionContentsTracker.prototype.add_unknown = function(obj) {
        this.add_object(obj, ObjectType.UNKNOWN, visibility_fill(true));
    };

    SectionContentsTracker.prototype.enter_container = function(obj) {
        var new_node = new ContainerNode(this.curr_container, obj);
        this.curr_container.children.push(new_node);
        this.curr_container = new_node;
    };

    SectionContentsTracker.prototype.exit_container = function() {
        this.curr_container = this.curr_container.parent_container;
    };

    // Recursively evaluates visibility of a section object
    SectionContentsTracker.prototype.eval_section_visibility = function(obj) {
        var visible = visibility_fill(false);
        var i, child;
        for (i = 0; i &lt; obj.children.length; i++) {
            child = obj.children[i];
            switch (child.type) {
            case ObjectType.PRIMARY:
            case ObjectType.UNKNOWN:
                visible = array_or(visible, child.visible);
                break;
            case ObjectType.SECONDARY: // ignoring secondary objects
                break;
            case ObjectType.SECTION:
                visible = array_or(visible, this.eval_section_visibility(child));
                break;
            }
        }

        for (i = 0; i &lt; obj.children.length; i++) {
            child = obj.children[i];
            if (child.type === ObjectType.SECONDARY) {
                child.visible = visible;
            }
        }

        obj.visible = visible;
        return visible;
    };

    // Recursively evaluates visibility of container objects. Assumes that
    // visibility of secondary objects is already set
    SectionContentsTracker.prototype.eval_container_visibility = function(obj) {
        var visible = visibility_fill(false);
        for (var i = 0; i &lt; obj.children.length; i++) {
            var child = obj.children[i];
            if (child.type === ObjectType.CONTAINER) {
                visible = array_or(visible, this.eval_container_visibility(child));
            } else {
                visible = array_or(visible, child.visible);
            }
        }
        obj.visible = visible;
        return visible;
    };

    // Checks if the object needs to be hidden in any revisions identified in
    // mask and if yes, performs the hide operation.
    SectionContentsTracker.prototype.perform_hide_obj =  function(obj, tracker, visible_mask) {
        var wanted_visible = array_and(obj.visible, visible_mask);
        if (!array_equal(wanted_visible, visible_mask)) {
            tracker.add_diff_object(obj.obj, visibility_to_shown_revs(wanted_visible));
            return wanted_visible;
        }
        return visible_mask;
    };

    // Recursively evaluates the contents of a container and hides container
    // and secondary elements if needed. visible_mask identifies which
    // revisions the object may be visible in certain revision (it may not be
    // visible in case parent container is not visible).
    SectionContentsTracker.prototype.perform_hide = function(obj, tracker, visible_mask) {
        // handle visibility of the container
        if (obj !== this.root_container) {
            visible_mask = this.perform_hide_obj(obj, tracker, visible_mask);
        }

        // handle visibility of contents
        for (var i = 0; i &lt; obj.children.length; ++i) {
            var child = obj.children[i];
            switch (child.type) {
            case ObjectType.CONTAINER:
                this.perform_hide(child, tracker, visible_mask);
                break;
            case ObjectType.SECONDARY:
                this.perform_hide_obj(child, tracker, visible_mask);
                break;
            }
        }
    };

    SectionContentsTracker.prototype.run = function(tracker) {
        // evaluate visibility of sections and containers
        this.eval_section_visibility(this.root_section);
        this.eval_container_visibility(this.root_container);

        this.perform_hide(this.root_container, tracker, visibility_fill(true));
    };

    /** Used to aggregate a set of objects that need to be versioned. The set
        may be created from objects only in certain part of the DOM tree, this
        allows to perform independent versioning execution in different parts
        of the page.
    */
    var Scope = function(root) {
        this.root = root;
    };

    /** Creates a new scope and initializes it with the objects gathered from
        the given jQuery object. Returns the new scope.
    */
    Scope.create_root = function(obj) {
        var scope = new Scope(obj);
        scope.nv = scope.root.find('.t-navbar');
        scope.dcl_tables = scope.root.find('.t-dcl-begin');
        scope.dcl_rev_tables = scope.dcl_tables.filter('.t-dcl-rev-begin');
        scope.dsc_tables = scope.root.find('.t-dsc-begin');
        scope.rev_tables = scope.root.find('.t-rev-begin');
        scope.rev_inl_tables = scope.root.find('.t-rev-inl');
        scope.list_items = scope.root.find('.t-li1');
        scope.list_items.add(scope.root.find('.t-li2'));
        scope.list_items.add(scope.root.find('.t-li3'));
        return scope;
    };

    /** Given two scopes: parent scope and child scope, moves the elements
        contained within jQuery object in parent_scope[prop] to
        child_scope[prop] whenever they have child_scope.root as parent.
    */
    Scope.split_scope = function(parent_scope, child_scope, prop) {

        // get elements to move
        var to_move = parent_scope[prop].filter(function() {
            return $.contains(child_scope.root[0], this);
        });

        // remove elements from parent and add to child
        parent_scope[prop] = parent_scope[prop].not(to_move);
        child_scope[prop] = to_move;
    };

    /** Creates a new scope and initializes it with the objects from the given
        parent scope that also have the given jQuery object obj as parent. The
        filtered objects are removed from the parent scope. The function returns
        the new scope.
    */
    Scope.create_child = function(parent, obj) {
        var scope = new Scope(obj);
        Scope.split_scope(parent, scope, 'nv');
        Scope.split_scope(parent, scope, 'dcl_tables');
        Scope.split_scope(parent, scope, 'dcl_rev_tables');
        Scope.split_scope(parent, scope, 'dsc_tables');
        Scope.split_scope(parent, scope, 'rev_tables');
        Scope.split_scope(parent, scope, 'rev_inl_tables');
        Scope.split_scope(parent, scope, 'list_items');
        return scope;
    };

    var StandardRevisionPlugin = function() {
        this.curr_rev = Rev.DIFF;

        this.tracker = new ObjectTracker();
        this.is_prepared = false;
    };

    /** Prepares the navbar for versioning using object tracker. As the navbar
        contains many items, committing each of them to the object tracker, we
        make as many copies of the original navbar as there are revisions and
        customize each copy in-place.
    */
    StandardRevisionPlugin.prototype.prepare_navbar = function(scope) {
        var nv = scope.nv // main navbar
        if (nv.length === 0) {
            return; // no navbar
        }

        this.tracker.add_diff_object(nv, [Rev.DIFF]);

        var self = this;

        for (var rev = Rev.FIRST; rev &lt; Rev.LAST; ++rev) {
            // Create new navbar and insert it to the tracker
            var rev_nv = nv.clone().hide().insertAfter(nv);
            this.tracker.add_object(rev_nv, nv, [rev]);

            // Get interesting elements
            var nv_tables = rev_nv.find('.t-nv-begin');
            var nv_tables_tb = nv_tables.children('tbody');

            var el_h1 = nv_tables_tb.children('.t-nv-h1');
            var el_h2 = nv_tables_tb.children('.t-nv-h2');
            var el_col_tables = nv_tables_tb.children('.t-nv-col-table');
            var el_nv = nv_tables_tb.children('.t-nv');

            // Remove entries from the link tables that should not be visible
            // for the revision in question
            el_nv.each(function(){

                // Get the link table
                var link_tds = $(this).find('.t-nv-ln-table div');
                var marks;

                if (link_tds.length === 0) {
                    // bare nv template used. Check if we don't have a mark
                    // template by chance
                    marks = $(this).find('.t-mark-rev');
                    if (marks.length &gt; 0) {
                        var mark = get_mark(marks.first());
                        if (!should_be_shown(rev, mark)) {
                            $(this).remove();
                        } else {
                            marks.remove(); // do not show marks in any case
                        }
                    }
                    return;
                }

                if (link_tds.length === 1) {
                    // The earliest standard (always visible)
                    return;
                }
                var titles = link_tds.first().children().children().first().children();
                marks = link_tds.last().children().first().children();

                // Delete the lines
                if (self.delete_lines(titles, marks, rev)) {
                    $(this).remove();
                }
            });

            // Remove all empty column tables
            el_col_tables.each(function() {
                if ($(this).find('.t-nv').length === 0) {
                    $(this).remove();
                }
            });

            // Look for any headings that do not have items after them
            el_h2.each(function() {
                if ($(this).next().length === 0 ||
                    $(this).next().is('.t-nv-h2, .t-nv-h1')
                ) {
                    $(this).remove();
                }
            });

            el_h1.each(function() {
                if ($(this).next().length === 0 ||
                    $(this).next().is('.t-nv-h1')
                ) {
                    $(this).remove();
                }
            });

            // TODO: perhaps it's worth to reflow the remaining columns
        }
    };

    /** Handles rev_begin, rev, rev_end templates
        We don't copy the contents of this template around. We just add the
        rows to the element tracker and show and hide them as needed. To hide
        the frame on non-diff revisions, we have special treatment in
        on_selection_table. Note, that in order for this to work, the revision
        marks must not be touched.
    */
    StandardRevisionPlugin.prototype.prepare_all_revs = function(scope) {
        var rev_elems = scope.rev_tables.children('tbody').children('.t-rev');
        var self = this;
        rev_elems.each(function() {
            var shown_revs = get_shown_revs($(this));
            shown_revs.push(Rev.DIFF);

            self.tracker.add_diff_object($(this), shown_revs);
        });
    };

    /** Handles rev_inl template
    */
    StandardRevisionPlugin.prototype.prepare_all_inl_revs = function(scope) {
        var self = this;
        scope.rev_inl_tables.each(function() {
            self.tracker.add_diff_object($(this), [Rev.DIFF]);

            var shown_revs = get_shown_revs($(this));
            var copy = $(this).children().first().clone().hide()
                              .insertAfter($(this));

            self.tracker.add_object(copy, $(this), shown_revs);
        });
    };

    /** Handles all dsc_* templates.
        Prepares items in dsc lists
    */
    StandardRevisionPlugin.prototype.prepare_all_dscs = function(scope) {
        var self = this;
        scope.dsc_tables.each(function() {
            self.prepare_dsc_table($(this));
        });
    };

    StandardRevisionPlugin.prototype.is_secondary = function(el) {
        if (el.is('h2') ||
            el.is('h3') ||
            el.is('h5') ||
            el.is('p') ||
            (el.is('tr') &amp;&amp; el.has('td &gt; h5').length) ||
            el.is('.t-dsc-header'))
        {
            return true;
        }
        return false;
    };

    StandardRevisionPlugin.prototype.get_level = function(el) {
        if (el.is('h2'))
            return 0;
        if (el.is('h3'))
            return 1;
        if (el.is('h5'))
            return 2;
        if (el.is('tr') &amp;&amp; el.has('td &gt; h5').length)
            return 2;
        if (el.is('.t-dsc-header'))
            return 3;
        return -1;
    }

    StandardRevisionPlugin.prototype.set_level_if_needed = function(section_tracker, el) {
        var level = this.get_level(el);
        if (level &gt;= 0) {
            section_tracker.set_level(level);
        }
    };

    StandardRevisionPlugin.prototype.prepare_dsc_table = function(el) {
        var section_tracker = new SectionContentsTracker();

        var start_el = el;
        while (true) {
            var prev = start_el.prev();
            if (prev.length === 0 || !this.is_secondary(prev))
                break;
            start_el = prev;
        }

        while (start_el[0] !== el[0]) {
            this.set_level_if_needed(section_tracker, start_el);
            section_tracker.add_secondary(start_el);
            start_el = start_el.next();
        }

        section_tracker.enter_container(el);

        var rows = el.children('tbody').children();
        var self = this;
        rows.each(function() {
            var el = $(this);
            if (el.is('.t-dsc')) {
                section_tracker.add_primary(el, self.prepare_dsc(el));
            } else {
                self.set_level_if_needed(section_tracker, el);
                if (self.is_secondary(el)) {
                    section_tracker.add_secondary(el);
                } else {
                    section_tracker.add_unknown(el);
                }
            }
        });
        section_tracker.exit_container();
        section_tracker.run(this.tracker);
    };

    // Handles one dsc item. Returns a visibility map for that item.
    StandardRevisionPlugin.prototype.prepare_dsc = function(el) {
        var self = this;

        /*  Handles the case one of the specialized wrapper templates is
            used. This case is special in that the description may contain
            several names, each with standard tag attached.
        */
        function process_dsc_specialized(el, member) {
            var lines = member.find('.t-lines');
            if (lines.length !== 2) {
                return visibility_fill(true);
            }
            var marks = lines.last();

            var rev_map = self.get_revision_map(marks.children());
            self.tracker.add_diff_object(el, rev_map[Rev.DIFF]);

            for (var rev = Rev.FIRST; rev &lt; Rev.LAST; ++rev) {
                if (rev_map[rev].length === 0) {
                    continue;
                }

                var copy = el.clone().hide();
                self.tracker.add_object(copy, el, rev_map[rev]);

                member = copy.children().children('.t-dsc-member-div');
                lines = member.find('.t-lines');
                var titles = lines.first().children();
                marks = lines.last().children();

                self.delete_lines(titles, marks, rev);
                copy.insertAfter(el);
            }
            return self.revision_map_to_visibility(rev_map);
        };

        // Handles the generic dsc template case
        function process_dsc_generic(el) {
            var td = el.children().first();
            if (td.find('.t-mark-rev').length === 0) {
                return visibility_fill(true);
            }
            var rev_map = self.get_revision_map(td);
            self.tracker.add_diff_object(el, rev_map[Rev.DIFF]);

            for (var rev = Rev.FIRST; rev &lt; Rev.LAST; ++rev) {
                if (rev_map[rev].length === 0) {
                    continue;
                }

                var copy = el.clone().hide();
                self.tracker.add_object(copy, el, rev_map[rev]);
                // remove marks, but only in the first column
                copy.children().first().find('.t-mark-rev').remove();
                copy.insertAfter(el);
            }
            return self.revision_map_to_visibility(rev_map);
        };

        var member = el.children().children('.t-dsc-member-div');
        if (member.length !== 0) {
            return process_dsc_specialized(el, member);
        } else {
            return process_dsc_generic(el);
        }
    };

    /** Handles dcl_* templates.
        Returns &quot;numbering map&quot;, which defines how the list items are
        renumbered (or deleted) for each revision. The numbering map is a an
        two-dimensional array - the first index identifies the revision,
        the second -- original number. The value obtained this way
        identifies whether the entry should be hidden and if not, what
        version number should be displayed on the specific revision. Hidden
        entry is identified by -1.

        array[revision][orig_num] -&gt; target_num or -1
    */
    StandardRevisionPlugin.prototype.prepare_all_dcls = function(dcl_table) {

        var tracker = this.tracker;

        // get abstract description of the contents
        defs = [];

        /*
            &lt;Simple dcl&gt; :== {
                type: 'i',
                obj: &lt;jQuery object&gt;

                // The format is the same as returned by is_shown_on_ref
                // revs[Rev.DIFF] being true identifies that no versioning
                // information has been provided.
                revs: 'shown_revs',

                // -1 if not defined
                num: 'orig_num'
            }

            &lt;Rev-list dcl&gt; :== {
                type: 'r',
                obj: &lt;jQuery object&gt;,
                revs: 'shown_revs',  // see notes for &lt;Simple dcl&gt;
                num: 'orig_num',     // -1 if not defined
                aux: &lt;jQuery object&gt;, // potentially empty

                // The list of indexes of entries in defs array identifying
                // children dcls
                children: [ &lt;child id&gt;, ... ]
            }

            defs: [ &lt;either Simple dcl or rev-list dcl&gt;, ... ]

            If rev-list dcl has 'revs' defined, then those override revs for
            all children dcls.

            If rev-list dcl has 'num' defined, then 'num' for all children
            dcls is -1.
        */
        var num_regex = /\s*\((\d+)\)\s*/;
        function process_tr(el, is_num_overridden, is_rev_overridden,
                            overridden_revs) {
            var new_def = {
                type: 's',
                obj: el,
                num: -1,
                revs: visibility_fill(true)
            };

            // get version num
            if (!is_num_overridden) {
                var num_text = el.children('td').eq(1).text();
                var match = num_text.match(num_regex);
                if (match !== null) {
                    new_def.num = parseInt(match[1]);
                }
            }

            // get revision info
            if (!is_rev_overridden) {
                var notes_td = el.children('td').eq(2);
                if (notes_td.find('.t-mark-rev').length &gt; 0) {
                    new_def.revs = get_visibility_on_rev(el);
                }
            } else {
                new_def.revs = overridden_revs;
            }

            return defs.push(new_def) - 1;
        };

        function process_rev_tbody(el) {
            var new_def = {
                type: 'r',
                obj: el,
                num: -1,
                revs: visibility_fill(true),
                children: []
            };

            // potentially empty
            var aux_tr = el.children('.t-dcl-rev-aux').first();
            new_def.aux = aux_tr;

            // get version num
            var has_num = false;
            if (el.hasClass('t-dcl-rev-num')) {
                var num_text = aux_tr.children('td').eq(1).text();
                var match = num_text.match(num_regex);
                if (match !== null) {
                    new_def.num = parseInt(match[1]);
                    has_num = true;
                }
            }

            // get revision info
            var has_revs = false;
            if (el.hasClass('t-dcl-rev-notes')) {
                var mark_revs = aux_tr.children('td').eq(2).find('.t-mark-rev');
                if (mark_revs.length &gt; 0) {
                    new_def.revs = get_visibility_on_rev(el);
                    has_revs = true;
                }
            }

            // process the member dcls
            el.children('.t-dcl').each(function() {
                var new_id = process_tr($(this), has_num, has_revs,
                                        new_def.revs.slice());
                new_def.children.push(new_id);
            });

            defs.push(new_def);
        };

        $(dcl_table).children('tbody').each(function() {
            if ($(this).hasClass('t-dcl-rev')) {
                process_rev_tbody($(this));
            } else {
                $(this).children('.t-dcl').each(function() {
                    process_tr($(this), false, false, []);
                });
            }
        });

        // Prints defs to a string
        function debug_print_defs(defs) {
            var out = '';
            for (var i = 0; i &lt; defs.length; i++) {
                out += ' { ' + i + ': ' + defs[i].type + ' ' + defs[i].num;
                out += ' ' + debug_print_visibility_map(defs[i].revs);
                if (defs[i].type === 'r') {
                    out += ' { ';
                    for (var j = 0 ; j &lt; defs[i].children.length; ++j) {
                        out += defs[i].children[j] + ' ';
                    }
                    out += '}';
                }
                out += ' }\n';
            }
            return out;
        }

        /* Get the mapping between revisions and function version numbers.
           The function returns an array:

           array[revision][source version number] -&gt; version number to display
        */
        function get_num_map() {
            var num_map = [];

            // We need the maximum visible num to initialize the result array
            // properly
            var max_num = -1;
            for (var i = 0; i &lt; defs.length; ++i) {
                if (defs[i].num &gt; max_num) {
                    max_num = defs[i].num;
                }
            }

            if (max_num &gt; -1) {

                for (var rev = Rev.FIRST; rev !== Rev.LAST; ++rev) {

                    var visible_nums = [];

                    for (var i = 0; i &lt; defs.length; ++i) {
                        if (defs[i].revs[rev] === true &amp;&amp;
                            defs[i].num !== -1) {
                            visible_nums.push(defs[i].num);
                        }
                    }

                    visible_nums = array_sort_unique(visible_nums);

                    var curr_map = [-1];
                    for (var num = 1; num &lt;= max_num; ++num) {
                        curr_map[num] = -1;
                    }

                    var curr_num = 1;
                    for (var i = 0; i &lt; visible_nums.length; ++i) {
                        curr_map[visible_nums[i]] = curr_num;
                        curr_num++;
                    }
                    num_map[rev] = curr_map;
                }
            }
            return num_map;
        };

        // Prints num_map to a string
        function debug_print_num_map(num_map) {
            var out = '';
            for (var rev = Rev.FIRST; rev !== Rev.LAST; ++rev) {
                out += '[' + desc[rev].title + ']: { ';
                out +=  num_map[rev] + ' }\n';
            }
            return out;
        }

        var num_map = get_num_map();

        if (debug) {
            alert(debug_print_defs(defs) + '\n\n' +
                  debug_print_num_map(num_map));
        }

        // Analyze the abstract description again and modify the DOM
        function clear_rev_marks(tr) {
            marks = tr.children('td').eq(2).find('.t-mark-rev');
            marks.each(function() {
                // remove only one &lt;br&gt;
                $(this).prev('br').add($(this).next('br')).first().remove();
                $(this).remove();
            });
        };

        function set_number(tr, num) {
            tr.children('td').eq(1).text('('+num.toString()+')');
        };

        function get_tr_nums(num) {
            var nums = [];
            for (var rev = Rev.FIRST; rev !== Rev.LAST; ++rev) {
                nums[rev] = num_map[rev][num];
            }
            return nums;
        };

        /// Checks whether any children of a rev-list identified by @a def
        /// are shown in revision @a rev
        function any_children_visible_on_rev(def) {
            var res = visibility_fill(false);

            for (var i = 0; i !== def.children.length; ++i) {
                res = array_or(res, defs[def.children[i]].revs);
            }
            res[Rev.DIFF] = false;
            return res;
        };

        /** Returns infomation about the required copies of the base
            element.
        */
        function get_copy_info(revs, nums) {
            var res = [];

            var base_rev;   // Don't create a new element if it would
            var new_num;    // be identical to previous one
            var new_revs;
            var is_first = true;

            for (var rev = Rev.FIRST; rev !== Rev.LAST; ++rev) {
                if (!revs[rev]) {
                    continue;
                }
                if (!is_first &amp;&amp; new_num === nums[rev]) {
                    // Identical element already exists
                    new_revs.push(rev);
                    continue;
                }

                if (!is_first) {
                    res.push({ base_rev: base_rev, revs: new_revs,
                               num: new_num });
                }

                base_rev = rev;
                new_num = nums[rev];
                new_revs = [rev];
                is_first = false;
            }
            if (!is_first) {
                res.push({ base_rev: base_rev, revs: new_revs,
                           num: new_num });
            }
            return res;
        };

        function finalize_tr(def) {
            var sep_revs;

            var new_el;
            if (def.num === -1) {
                var tr_revs = visibility_to_shown_revs(def.revs);
                sep_revs = tr_revs;
                if (def.revs[Rev.DIFF] === true) {
                    // no num and no rev-marks -- shown always
                    tracker.add_diff_object(def.obj, tr_revs);
                } else {
                    // no num -- two versions: one with rev-marks and
                    // one without
                    new_el = def.obj.clone().hide().insertAfter(def.obj);
                    clear_rev_marks(new_el);
                    tracker.add_diff_object(def.obj, [Rev.DIFF]);
                    tracker.add_object(new_el, def.obj, tr_revs);
                    sep_revs.push(Rev.DIFF);
                }
            } else {
                // need to handle numbering
                var nums = get_tr_nums(def.num);

                tracker.add_diff_object(def.obj, [Rev.DIFF]);

                var copy_info = get_copy_info(def.revs, nums);

                sep_revs = [Rev.DIFF];
                for (var i = 0; i &lt; copy_info.length; i++) {
                    new_el = def.obj.clone().hide().insertAfter(def.obj);
                    clear_rev_marks(new_el);
                    set_number(new_el, copy_info[i].num);
                    tracker.add_object(new_el, def.obj, copy_info[i].revs);
                    sep_revs = sep_revs.concat(copy_info[i].revs);
                }
            }
        };

        // Roughly the same as finalize_tr, but while all modifications are
        // applied to the t-dcl-rev-aux element, we hide entire tbody
        // section when it has no contents or defs[i].revs[rev] == false
        function finalize_rev_tbody(def) {
            // The rev-list tbody does not ever change - we only need to
            // hide it sometimes
            var tbody_revs = array_and(def.revs, any_children_visible_on_rev(def));
            tbody_revs[Rev.DIFF] = true;
            tracker.add_diff_object(def.obj, visibility_to_shown_revs(tbody_revs));
            var new_el;

            if (def.num === -1) {
                if (def.revs[Rev.DIFF] === true) {
                    // No num and no rev-marks -- no further modifications
                    // needed.

                } else {
                    // No num -- two versions: one with rev-marks and
                    // one without
                    new_el = def.aux.clone().hide().insertAfter(def.aux);
                    clear_rev_marks(new_el);
                    tracker.add_diff_object(def.aux, [Rev.DIFF]);
                    var revs = tbody_revs.slice();
                    revs[Rev.DIFF] = false;

                    tracker.add_object(new_el, def.aux, visibility_to_shown_revs(revs));
                }
            } else {
                // need to handle numbering
                var nums = get_tr_nums(def.num);

                tracker.add_diff_object(def.aux, [Rev.DIFF]);

                var copy_info = get_copy_info(def.revs, nums);

                for (var i = 0; i &lt; copy_info.length; i++) {
                    new_el = def.aux.clone().hide().insertAfter(def.aux);
                    clear_rev_marks(new_el);
                    set_number(new_el, copy_info[i].num);
                    tracker.add_object(new_el, def.aux, copy_info[i].revs);
                }
            }
        };


        for (var i = 0; i &lt; defs.length; ++i) {
            if (defs[i].type === 's') {
                finalize_tr(defs[i]);
            } else {
                finalize_rev_tbody(defs[i]);
            }
        }

        return num_map;
    };

    /** Renumbers and hides the list items according to the given @a num_map
    */
    StandardRevisionPlugin.prototype.prepare_all_li = function(scope, num_map) {
        // FIXME: currently we process only the first t-li element out of
        // each block of elements assigned a single num.
        var descs = [];
        /*
           { obj: &lt;jQuery object&gt;,
             obj_num: &lt;jQuery object&gt;
             num: [&lt;num&gt;, &lt;num&gt;, ...],
           }
        */
        var num_regex = /^\s*(\d+)\s*$/;
        var range_regex = /^\s*(\d+)-(\d+)\s*$/;
        scope.list_items.each(function() {
            var el_num = $(this).children().first('.t-li');
            if (el_num.length === 0) {
                return;
            }

            var nums = [];
            var items = el_num.text().replace(')','').split(',');
            for (var i = 0; i &lt; items.length; ++i) {
                var match = items[i].match(num_regex);
                if (match !== null) {
                    nums.push(parseInt(match[1]));
                    continue;
                }
                match = items[i].match(range_regex);
                if (match !== null) {
                    var first = parseInt(match[1]);
                    var last = parseInt(match[2]);
                    if (first &gt; last) {
                        continue;
                    }
                    for (; first &lt;= last; ++first) {
                        nums.push(first);
                    }
                    continue;
                }
            }

            if (nums.length != 0) {
                descs.push({ obj: $(this), nums: nums, obj_num: el_num });
            }
        });


        for (var i = 0; i &lt; descs.length; ++i) {
            var nums = descs[i].nums;

            // get the description of what numbers to display for which
            // revision

            var revs_show = visibility_fill(true);
            var revs_show_all = true;

            var disp_desc = [];
            var prev_nums = nums;
            var prev_revs = [ Rev.DIFF ];

            for (var rev = Rev.FIRST; rev !== Rev.LAST; ++rev) {
                var target_nums = [];
                for (var j = 0; j &lt; nums.length; ++j) {
                    if (nums[j] &lt; num_map[rev].length) {
                        var target_num = num_map[rev][nums[j]];
                        if (target_num !== -1) {
                            target_nums.push(target_num);
                        }
                    }
                }

                if (target_nums.length === 0) {
                    // will hide entire t-liX element
                    revs_show[rev] = false;
                    revs_show_all = false;
                    continue;
                }

                if (array_equal(target_nums, prev_nums)) {
                    prev_revs.push(rev);
                } else {
                    disp_desc.push({ revs: prev_revs, nums: prev_nums });
                    prev_revs = [rev];
                    prev_nums = target_nums;
                }
            }
            disp_desc.push({ revs: prev_revs, nums: prev_nums });
            // hide entire t-liX element if needed
            if (!revs_show_all) {
                this.tracker.add_diff_object(descs[i].obj,
                                             visibility_to_shown_revs(revs_show));
            }

            // Add t-li elements with different text if needed
            // the first item always includes Rev.DIFF in .revs
            if (disp_desc.length &gt; 1) {
                this.tracker.add_diff_object(descs[i].obj_num, disp_desc[0].revs);
                for (var j = 1; j &lt; disp_desc.length; ++j) {
                    var new_el = descs[i].obj_num.clone().hide()
                                        .insertAfter(descs[i].obj_num);
                    var text = disp_desc[j].nums[0].toString();
                    // TODO: reduce to ranges
                    for (var k = 1; k &lt; disp_desc[j].nums.length; ++k) {
                        text = text + ',' + disp_desc[j].nums[k].toString();
                    }
                    new_el.text(text + ')');
                    this.tracker.add_object(new_el, descs[i].obj_num, disp_desc[j].revs);
                }
            }
        }
    };

    StandardRevisionPlugin.prototype.for_all_scopes = function(fun) {
        fun.call(this.root_scope);
        for (var i = 0; i &lt; this.child_scopes.length; ++i) {
            fun.call(this.child_scopes[i]);
        }
    };

    StandardRevisionPlugin.prototype.prepare = function() {
        if (this.is_prepared) {
            return;
        }

        // initialize scopes
        this.root_scope = Scope.create_root($('#mw-content-text').first());
        this.child_scopes = [];

        var self = this;
        this.root_scope.root.find('.t-member').each(function() {
            self.child_scopes.push(Scope.create_child(self.root_scope, $(this)));
        });

        // prepare scopes
        this.for_all_scopes(function() {

            var scope = this;
            self.prepare_navbar(scope);
            self.prepare_all_revs(scope);
            self.prepare_all_inl_revs(scope);
            self.prepare_all_dscs(scope);

            if (scope.dcl_tables.length &gt; 0) {
                var num_map = self.prepare_all_dcls(scope.dcl_tables.first());
                self.prepare_all_li(scope, num_map);
            }

        });

        this.is_prepared = true;
    };

    /** Utility function. Takes an jQuery object containing an array of
        elements that may or may not contain revision marker.
        Returns an a list of revisions for which a the node should be copied
        and for which revisions each of the copy would be shown. The result
        is an associative array: key identifies the revision to build the
        DOM for; the value identifies the revisions to show the result for.
    */
    StandardRevisionPlugin.prototype.get_revision_map = function(lines) {
        var res = [];
        res[Rev.DIFF] = [Rev.DIFF];

        var visible_by_line = [];

        // create separate elements when diff has rev marks
        var is_diff_clean = true;

        lines.each(function() {
            var rev_mark = $(this).find('.t-mark-rev').first();
            visible_by_line.push(get_visibility_on_rev(rev_mark));
            if (rev_mark.length &gt; 0) {
                is_diff_clean = false;
            }
        });

        // Track the lines shown in the previous revision. If the same lines
        // are shown in the current revision, simply display the element
        // of the previous revision, instead of creating a new one.
        var prev_rev = Rev.DIFF;
        var prev_visible = [];
        if (is_diff_clean) {
            // any further revisions will match this this array only if
            // original version of the element does not contain rev marks
            for (var i = 0; i &lt; visible_by_line.length; i++) {
                prev_visible.push(i); // DIFF shows all lines
            }
        }

        for (var rev = Rev.FIRST; rev &lt; Rev.LAST; ++rev) {
            res[rev] = [];

            var curr_visible = [];
            for (var i = 0; i &lt; visible_by_line.length; i++) {
                if (visible_by_line[i][rev] === true) {
                    curr_visible.push(i);
                }
            }

            if (curr_visible.length === 0) {
                continue;
            }

            // Maybe nothing has changed from the previous revision and we
            // can simply keep the node created for the previous revision
            if (array_equal(curr_visible, prev_visible)) {
                res[prev_rev].push(rev);
            } else {
                res[rev].push(rev);
                prev_visible = curr_visible;
                prev_rev = rev;
            }
        }

        return res;
    };

    /** Utility function. Takes a revision map as returned by
        get_revision_map and produces visibility map from that.
    */
    StandardRevisionPlugin.prototype.revision_map_to_visibility = function(revs) {
        var visible = visibility_fill(false);
        for (var i = 0; i &lt; revs.length; ++i) {
            for (var j = 0; j &lt; revs[i].length; ++j) {
                visible[revs[i][j]] = true;
            }
        }
        return visible;
    };

    /** Utility function. Deletes lines from multi-line links (such as these
        in dsc tables) that have marks nearby.
        Returns true if no lines are left. @a titles and @a marks must both
        refer to the children of .t-lines elements.
     */
    StandardRevisionPlugin.prototype.delete_lines = function(titles, marks, rev) {
        // Delete the lines
        var num_deleted = 0;
        var num_total = titles.length;

        marks.each(function(index) {
            var mark_span = $(this).children('.t-mark-rev');
            if (mark_span.length &gt; 0) {
                var mark = get_mark(mark_span.first());
                if (!should_be_shown(rev, mark)) {
                    titles.eq(index).remove();
                    $(this).remove();
                    num_deleted++;
                    return;
                }
            }
            mark_span.remove(); // delete marks in any case
        });

        // Delete this if empty
        return (num_deleted === num_total);
    };

    /** Creates the standard revision selection box
    */
    StandardRevisionPlugin.prototype.create_selection_box = function() {
        var head_parent = $('#cpp-head-tools-right');

        this.select_div = $('&lt;div/&gt;').addClass('stdrev-select');

        var inner_div = $('&lt;div/&gt;').appendTo(this.select_div);
        var span = $('&lt;span/&gt;').addClass('stdrev-text')
                               .text('Standard revision: ')
                               .appendTo(inner_div);
        this.select = $('&lt;select/&gt;').appendTo(inner_div);

        for (var i = 0; i &lt; desc.length; ++i) {
            $('&lt;option/&gt;').text(desc[i].title)
                          .attr('value', desc[i].rev.toString())
                          .appendTo(this.select);
        }

        this.select.one('mouseover', this.prepare.bind(this));
        this.select.change(this.on_selection_change.bind(this));
        this.select_div.prependTo(head_parent);
    };

    /** Callback to be run when the user changes the option selected in the
        selection box
    */
    StandardRevisionPlugin.prototype.on_selection_change = function() {
        this.prepare();
        var rev = parseInt(this.select.val());
        this.tracker.to_rev(rev);

        // special treatment for rev boxes
        if (this.curr_rev === Rev.DIFF &amp;&amp; rev !== Rev.DIFF) {
            this.for_all_scopes(function() {
                this.rev_tables.each(function() {
                    $(this).addClass('stdrev-rev-hide');
                });
            });
        }
        if (this.curr_rev !== Rev.DIFF &amp;&amp; rev === Rev.DIFF) {
            this.for_all_scopes(function() {
                this.rev_tables.each(function() {
                    $(this).removeClass('stdrev-rev-hide');
                });
            });
        }

        this.curr_rev = rev;
    };

    var plugin = new StandardRevisionPlugin();
    plugin.create_selection_box();

});</text>
      <sha1>l0m0zooc9zvcmho4wyzjnehhv0z3wje</sha1>
      <model>javascript</model>
      <format>text/javascript</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-tbody-scroll.css</title>
    <ns>8</ns>
    <id>14690</id>
    <revision>
      <id>82960</id>
      <timestamp>2016-01-17T13:54:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="146">.tbody-scroll-impl thead {
    display: block;
}

.tbody-scroll-impl tbody {
    display: block;
    overflow-x: hidden;
    overflow-y: scroll;
}</text>
      <sha1>rtrxsq2e6gyn10owppadvlzmh506h70</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadget-tbody-scroll.js</title>
    <ns>8</ns>
    <id>14689</id>
    <revision>
      <id>82969</id>
      <parentid>82968</parentid>
      <timestamp>2016-01-17T14:33:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1036">$('.tbody-scroll').each(function() {

    // sync the column widths
    var rows = $(this).find('tr');
    var columns = rows.first().children();
    var col_width = columns.map(function() {
        return $(this).width();
    }).get();
    rows.each(function() {
        $(this).children().each(function(i, el) {
            $(el).width(col_width[i]);
        });
    });

    var emulate_thead = function(table) {
        var rows = table.find('&gt; tbody &gt; tr');
        var thead = $('&lt;thead/&gt;');
        rows.each(function() {
            if ($(this).children('td').length &gt; 0) {
                return false;
            }
            thead.append(this);
        });
        table.prepend(thead);
        return thead;
    }

    var tbody = $(this).find('tbody').first();
    var thead = $(this).find('thead').first();
    if (thead.length == 0) {
        thead = emulate_thead($(this));
    }
    var height = $(window).height() - thead.height();

    $(this).addClass('tbody-scroll-impl');
    tbody.css('max-height', height);
});</text>
      <sha1>pivp2a1n8d50iy5c82jbmdxxf1yw387</sha1>
      <model>javascript</model>
      <format>text/javascript</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Gadgets-definition</title>
    <ns>8</ns>
    <id>8418</id>
    <revision>
      <id>82957</id>
      <parentid>82953</parentid>
      <timestamp>2016-01-17T13:51:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="299">* ShowEditLinks[ResourceLoader]|show_edit_links.css
* ColiruCompiler[ResourceLoader|default]|coliru_compiler.js|coliru_compiler.css
* StandardRevisions[ResourceLoader]|standard_revisions.js|standard_revisions.css
* ScrollableTable[ResourceLoader|dependencies=jquery]|tbody-scroll.js|tbody-scroll.css</text>
      <sha1>6iq9jy7ha1p5nex3fr7yxvewoelowzi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Geshi-keyword-list-c</title>
    <ns>8</ns>
    <id>9558</id>
    <revision>
      <id>74670</id>
      <parentid>73547</parentid>
      <timestamp>2014-12-21T17:20:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix wcsrtombs</comment>
      <text xml:space="preserve" bytes="29675">size_t =&gt; c/types/size_t
ptrdiff_t =&gt; c/types/ptrdiff_t
nullptr_t =&gt; c/types/nullptr_t
NULL =&gt; c/types/NULL
max_align_t =&gt; c/types/max_align_t
offsetof =&gt; c/types/offsetof
int8_t =&gt; c/types/integer
int16_t =&gt; c/types/integer
int32_t =&gt; c/types/integer
int64_t =&gt; c/types/integer
int_fast8_t =&gt; c/types/integer
int_fast16_t =&gt; c/types/integer
int_fast32_t =&gt; c/types/integer
int_fast64_t =&gt; c/types/integer
int_least8_t =&gt; c/types/integer
int_least16_t =&gt; c/types/integer
int_least32_t =&gt; c/types/integer
int_least64_t =&gt; c/types/integer
intmax_t =&gt; c/types/integer
intptr_t =&gt; c/types/integer
uint8_t =&gt; c/types/integer
uint16_t =&gt; c/types/integer
uint32_t =&gt; c/types/integer
uint64_t =&gt; c/types/integer
uint_fast8_t =&gt; c/types/integer
uint_fast16_t =&gt; c/types/integer
uint_fast32_t =&gt; c/types/integer
uint_fast64_t =&gt; c/types/integer
uint_least8_t =&gt; c/types/integer
uint_least16_t =&gt; c/types/integer
uint_least32_t =&gt; c/types/integer
uint_least64_t =&gt; c/types/integer
uintmax_t =&gt; c/types/integer
uintptr_t =&gt; c/types/integer
INT8_MIN =&gt; c/types/integer
INT16_MIN =&gt; c/types/integer
INT32_MIN =&gt; c/types/integer
INT64_MIN =&gt; c/types/integer
INT_FAST8_MIN =&gt; c/types/integer
INT_FAST16_MIN =&gt; c/types/integer
INT_FAST32_MIN =&gt; c/types/integer
INT_FAST64_MIN =&gt; c/types/integer
INT_LEAST8_MIN =&gt; c/types/integer
INT_LEAST16_MIN =&gt; c/types/integer
INT_LEAST32_MIN =&gt; c/types/integer
INT_LEAST64_MIN =&gt; c/types/integer
INTPTR_MIN =&gt; c/types/integer
INTMAX_MIN =&gt; c/types/integer
INT8_MAX =&gt; c/types/integer
INT16_MAX =&gt; c/types/integer
INT32_MAX =&gt; c/types/integer
INT64_MAX =&gt; c/types/integer
INT_FAST8_MAX =&gt; c/types/integer
INT_FAST16_MAX =&gt; c/types/integer
INT_FAST32_MAX =&gt; c/types/integer
INT_FAST64_MAX =&gt; c/types/integer
INT_LEAST8_MAX =&gt; c/types/integer
INT_LEAST16_MAX =&gt; c/types/integer
INT_LEAST32_MAX =&gt; c/types/integer
INT_LEAST64_MAX =&gt; c/types/integer
INTPTR_MAX =&gt; c/types/integer
INTMAX_MAX =&gt; c/types/integer
UINT8_MAX =&gt; c/types/integer
UINT16_MAX =&gt; c/types/integer
UINT32_MAX =&gt; c/types/integer
UINT64_MAX =&gt; c/types/integer
UINT_FAST8_MAX =&gt; c/types/integer
UINT_FAST16_MAX =&gt; c/types/integer
UINT_FAST32_MAX =&gt; c/types/integer
UINT_FAST64_MAX =&gt; c/types/integer
UINT_LEAST8_MAX =&gt; c/types/integer
UINT_LEAST16_MAX =&gt; c/types/integer
UINT_LEAST32_MAX =&gt; c/types/integer
UINT_LEAST64_MAX =&gt; c/types/integer
UINTPTR_MAX =&gt; c/types/integer
UINTMAX_MAX =&gt; c/types/integer
PRId8 =&gt; c/types/integer
PRId16 =&gt; c/types/integer
PRId32 =&gt; c/types/integer
PRId64 =&gt; c/types/integer
PRIdLEAST8 =&gt; c/types/integer
PRIdLEAST16 =&gt; c/types/integer
PRIdLEAST32 =&gt; c/types/integer
PRIdLEAST64 =&gt; c/types/integer
PRIdFAST8 =&gt; c/types/integer
PRIdFAST16 =&gt; c/types/integer
PRIdFAST32 =&gt; c/types/integer
PRIdFAST64 =&gt; c/types/integer
PRIdMAX =&gt; c/types/integer
PRIdPTR  =&gt; c/types/integer
PRIi8 =&gt; c/types/integer
PRIi16 =&gt; c/types/integer
PRIi32 =&gt; c/types/integer
PRIi64 =&gt; c/types/integer
PRIiLEAST8 =&gt; c/types/integer
PRIiLEAST16 =&gt; c/types/integer
PRIiLEAST32 =&gt; c/types/integer
PRIiLEAST64 =&gt; c/types/integer
PRIiFAST8 =&gt; c/types/integer
PRIiFAST16 =&gt; c/types/integer
PRIiFAST32 =&gt; c/types/integer
PRIiFAST64 =&gt; c/types/integer
PRIiMAX =&gt; c/types/integer
PRIiPTR  =&gt; c/types/integer
PRIu8 =&gt; c/types/integer
PRIu16 =&gt; c/types/integer
PRIu32 =&gt; c/types/integer
PRIu64 =&gt; c/types/integer
PRIuLEAST8 =&gt; c/types/integer
PRIuLEAST16 =&gt; c/types/integer
PRIuLEAST32 =&gt; c/types/integer
PRIuLEAST64 =&gt; c/types/integer
PRIuFAST8 =&gt; c/types/integer
PRIuFAST16 =&gt; c/types/integer
PRIuFAST32 =&gt; c/types/integer
PRIuFAST64 =&gt; c/types/integer
PRIuMAX =&gt; c/types/integer
PRIuPTR  =&gt; c/types/integer
PRIo8 =&gt; c/types/integer
PRIo16 =&gt; c/types/integer
PRIo32 =&gt; c/types/integer
PRIo64 =&gt; c/types/integer
PRIoLEAST8 =&gt; c/types/integer
PRIoLEAST16 =&gt; c/types/integer
PRIoLEAST32 =&gt; c/types/integer
PRIoLEAST64 =&gt; c/types/integer
PRIoFAST8 =&gt; c/types/integer
PRIoFAST16 =&gt; c/types/integer
PRIoFAST32 =&gt; c/types/integer
PRIoFAST64 =&gt; c/types/integer
PRIoMAX =&gt; c/types/integer
PRIoPTR  =&gt; c/types/integer
PRIx8 =&gt; c/types/integer
PRIx16 =&gt; c/types/integer
PRIx32 =&gt; c/types/integer
PRIx64 =&gt; c/types/integer
PRIxLEAST8 =&gt; c/types/integer
PRIxLEAST16 =&gt; c/types/integer
PRIxLEAST32 =&gt; c/types/integer
PRIxLEAST64 =&gt; c/types/integer
PRIxFAST8 =&gt; c/types/integer
PRIxFAST16 =&gt; c/types/integer
PRIxFAST32 =&gt; c/types/integer
PRIxFAST64 =&gt; c/types/integer
PRIxMAX =&gt; c/types/integer
PRIxPTR  =&gt; c/types/integer
PRIX8 =&gt; c/types/integer
PRIX16 =&gt; c/types/integer
PRIX32 =&gt; c/types/integer
PRIX64 =&gt; c/types/integer
PRIXLEAST8 =&gt; c/types/integer
PRIXLEAST16 =&gt; c/types/integer
PRIXLEAST32 =&gt; c/types/integer
PRIXLEAST64 =&gt; c/types/integer
PRIXFAST8 =&gt; c/types/integer
PRIXFAST16 =&gt; c/types/integer
PRIXFAST32 =&gt; c/types/integer
PRIXFAST64 =&gt; c/types/integer
PRIXMAX =&gt; c/types/integer
PRIXPTR  =&gt; c/types/integer
SCNd8 =&gt; c/types/integer
SCNd16 =&gt; c/types/integer
SCNd32 =&gt; c/types/integer
SCNd64 =&gt; c/types/integer
SCNdLEAST8 =&gt; c/types/integer
SCNdLEAST16 =&gt; c/types/integer
SCNdLEAST32 =&gt; c/types/integer
SCNdLEAST64 =&gt; c/types/integer
SCNdFAST8 =&gt; c/types/integer
SCNdFAST16 =&gt; c/types/integer
SCNdFAST32 =&gt; c/types/integer
SCNdFAST64 =&gt; c/types/integer
SCNdMAX =&gt; c/types/integer
SCNdPTR  =&gt; c/types/integer
SCNi8 =&gt; c/types/integer
SCNi16 =&gt; c/types/integer
SCNi32 =&gt; c/types/integer
SCNi64 =&gt; c/types/integer
SCNiLEAST8 =&gt; c/types/integer
SCNiLEAST16 =&gt; c/types/integer
SCNiLEAST32 =&gt; c/types/integer
SCNiLEAST64 =&gt; c/types/integer
SCNiFAST8 =&gt; c/types/integer
SCNiFAST16 =&gt; c/types/integer
SCNiFAST32 =&gt; c/types/integer
SCNiFAST64 =&gt; c/types/integer
SCNiMAX =&gt; c/types/integer
SCNiPTR  =&gt; c/types/integer
SCNu8 =&gt; c/types/integer
SCNu16 =&gt; c/types/integer
SCNu32 =&gt; c/types/integer
SCNu64 =&gt; c/types/integer
SCNuLEAST8 =&gt; c/types/integer
SCNuLEAST16 =&gt; c/types/integer
SCNuLEAST32 =&gt; c/types/integer
SCNuLEAST64 =&gt; c/types/integer
SCNuFAST8 =&gt; c/types/integer
SCNuFAST16 =&gt; c/types/integer
SCNuFAST32 =&gt; c/types/integer
SCNuFAST64 =&gt; c/types/integer
SCNuMAX =&gt; c/types/integer
SCNuPTR  =&gt; c/types/integer
SCNo8 =&gt; c/types/integer
SCNo16 =&gt; c/types/integer
SCNo32 =&gt; c/types/integer
SCNo64 =&gt; c/types/integer
SCNoLEAST8 =&gt; c/types/integer
SCNoLEAST16 =&gt; c/types/integer
SCNoLEAST32 =&gt; c/types/integer
SCNoLEAST64 =&gt; c/types/integer
SCNoFAST8 =&gt; c/types/integer
SCNoFAST16 =&gt; c/types/integer
SCNoFAST32 =&gt; c/types/integer
SCNoFAST64 =&gt; c/types/integer
SCNoMAX =&gt; c/types/integer
SCNoPTR  =&gt; c/types/integer
SCNx8 =&gt; c/types/integer
SCNx16 =&gt; c/types/integer
SCNx32 =&gt; c/types/integer
SCNx64 =&gt; c/types/integer
SCNxLEAST8 =&gt; c/types/integer
SCNxLEAST16 =&gt; c/types/integer
SCNxLEAST32 =&gt; c/types/integer
SCNxLEAST64 =&gt; c/types/integer
SCNxFAST8 =&gt; c/types/integer
SCNxFAST16 =&gt; c/types/integer
SCNxFAST32 =&gt; c/types/integer
SCNxFAST64 =&gt; c/types/integer
SCNxMAX =&gt; c/types/integer
SCNxPTR  =&gt; c/types/integer
SCNX8 =&gt; c/types/integer
SCNX16 =&gt; c/types/integer
SCNX32 =&gt; c/types/integer
SCNX64 =&gt; c/types/integer
SCNXLEAST8 =&gt; c/types/integer
SCNXLEAST16 =&gt; c/types/integer
SCNXLEAST32 =&gt; c/types/integer
SCNXLEAST64 =&gt; c/types/integer
SCNXFAST8 =&gt; c/types/integer
SCNXFAST16 =&gt; c/types/integer
SCNXFAST32 =&gt; c/types/integer
SCNXFAST64 =&gt; c/types/integer
SCNXMAX =&gt; c/types/integer
SCNXPTR =&gt; c/types/integer
PTRDIFF_MIN =&gt; c/types/limits
PTRDIFF_MAX =&gt; c/types/limits
SIZE_MAX =&gt; c/types/limits
SIG_ATOMIC_MIN =&gt; c/types/limits
SIG_ATOMIC_MAX =&gt; c/types/limits
WCHAR_MIN =&gt; c/types/limits
WCHAR_MAX =&gt; c/types/limits
WINT_MIN =&gt; c/types/limits
WINT_MAX =&gt; c/types/limits
CHAR_BIT =&gt; c/types/limits
MB_LEN_MAX =&gt; c/types/limits
CHAR_MIN =&gt; c/types/limits
CHAR_MAX =&gt; c/types/limits
SCHAR_MIN =&gt; c/types/limits
SHRT_MIN =&gt; c/types/limits
INT_MIN =&gt; c/types/limits
LONG_MIN =&gt; c/types/limits
LLONG_MIN =&gt; c/types/limits
SCHAR_MAX =&gt; c/types/limits
SHRT_MAX =&gt; c/types/limits
INT_MAX =&gt; c/types/limits
LONG_MAX =&gt; c/types/limits
LLONG_MAX =&gt; c/types/limits
UCHAR_MAX =&gt; c/types/limits
USHRT_MAX =&gt; c/types/limits
UINT_MAX =&gt; c/types/limits
ULONG_MAX =&gt; c/types/limits
ULLONG_MAX =&gt; c/types/limits
FLT_RADIX =&gt; c/types/limits
DECIMAL_DIG =&gt; c/types/limits
FLT_MIN =&gt; c/types/limits
DBL_MIN =&gt; c/types/limits
LDBL_MIN =&gt; c/types/limits
FLT_MAX =&gt; c/types/limits
DBL_MAX =&gt; c/types/limits
LDBL_MAX =&gt; c/types/limits
FLT_EPSILON =&gt; c/types/limits
DBL_EPSILON =&gt; c/types/limits
LDBL_EPSILON =&gt; c/types/limits
FLT_DIG =&gt; c/types/limits
DBL_DIG =&gt; c/types/limits
LDBL_DIG =&gt; c/types/limits
FLT_MANT_DIG =&gt; c/types/limits
DBL_MANT_DIG =&gt; c/types/limits
LDBL_MANT_DIG =&gt; c/types/limits
FLT_MIN_EXP =&gt; c/types/limits
DBL_MIN_EXP =&gt; c/types/limits
LDBL_MIN_EXP =&gt; c/types/limits
FLT_MIN_10_EXP =&gt; c/types/limits
DBL_MIN_10_EXP =&gt; c/types/limits
LDBL_MIN_10_EXP =&gt; c/types/limits
FLT_MAX_EXP =&gt; c/types/limits
DBL_MAX_EXP =&gt; c/types/limits
LDBL_MAX_EXP =&gt; c/types/limits
FLT_MAX_10_EXP =&gt; c/types/limits
DBL_MAX_10_EXP =&gt; c/types/limits
LDBL_MAX_10_EXP =&gt; c/types/limits
FLT_ROUNDS =&gt; c/types/limits/FLT_ROUNDS
FLT_EVAL_METHOD =&gt; c/types/limits/FLT_EVAL_METHOD
malloc =&gt; c/memory/malloc
calloc =&gt; c/memory/calloc
realloc =&gt; c/memory/realloc
free =&gt; c/memory/free
assert =&gt; c/error/assert
errno =&gt; c/error/errno
E2BIG =&gt; c/error/errno_macros
EACCESS =&gt; c/error/errno_macros
EADDRINUSE =&gt; c/error/errno_macros
EADDRNOTAVAIL =&gt; c/error/errno_macros
EAFNOSUPPORT =&gt; c/error/errno_macros
EAGAIN =&gt; c/error/errno_macros
EALREADY =&gt; c/error/errno_macros
EBADF =&gt; c/error/errno_macros
EBADMSG =&gt; c/error/errno_macros
EBUSY =&gt; c/error/errno_macros
ECANCELED =&gt; c/error/errno_macros
ECHILD =&gt; c/error/errno_macros
ECONNABORTED =&gt; c/error/errno_macros
ECONNREFUSED =&gt; c/error/errno_macros
ECONNRESET =&gt; c/error/errno_macros
EDEADLK =&gt; c/error/errno_macros
EDESTADDRREQ =&gt; c/error/errno_macros
EDOM =&gt; c/error/errno_macros
EEXIST =&gt; c/error/errno_macros
EFAULT =&gt; c/error/errno_macros
EFBIG =&gt; c/error/errno_macros
EHOSTUNREACH =&gt; c/error/errno_macros
EIDRM =&gt; c/error/errno_macros
EILSEQ =&gt; c/error/errno_macros
EINPROGRESS =&gt; c/error/errno_macros
EINTR =&gt; c/error/errno_macros
EINVAL =&gt; c/error/errno_macros
EIO =&gt; c/error/errno_macros
EISCONN =&gt; c/error/errno_macros
EISDIR =&gt; c/error/errno_macros
ELOOP =&gt; c/error/errno_macros
EMFILE =&gt; c/error/errno_macros
EMLINK =&gt; c/error/errno_macros
EMSGSIZE =&gt; c/error/errno_macros
ENAMETOOLONG =&gt; c/error/errno_macros
ENETDOWN =&gt; c/error/errno_macros
ENETRESET =&gt; c/error/errno_macros
ENETUNREACH =&gt; c/error/errno_macros
ENFILE =&gt; c/error/errno_macros
ENOBUFS =&gt; c/error/errno_macros
ENODATA =&gt; c/error/errno_macros
ENODEV =&gt; c/error/errno_macros
ENOENT =&gt; c/error/errno_macros
ENOEXEC =&gt; c/error/errno_macros
ENOLCK =&gt; c/error/errno_macros
ENOLINK =&gt; c/error/errno_macros
ENOMEM =&gt; c/error/errno_macros
ENOMSG =&gt; c/error/errno_macros
ENOPROTOOPT =&gt; c/error/errno_macros
ENOSPC =&gt; c/error/errno_macros
ENOSR =&gt; c/error/errno_macros
ENOSTR =&gt; c/error/errno_macros
ENOSYS =&gt; c/error/errno_macros
ENOTCONN =&gt; c/error/errno_macros
ENOTDIR =&gt; c/error/errno_macros
ENOTEMPTY =&gt; c/error/errno_macros
ENOTRECOVERABLE =&gt; c/error/errno_macros
ENOTSOCK =&gt; c/error/errno_macros
ENOTSUP =&gt; c/error/errno_macros
ENOTTY =&gt; c/error/errno_macros
ENXIO =&gt; c/error/errno_macros
EOPNOTSUPP =&gt; c/error/errno_macros
EOVERFLOW =&gt; c/error/errno_macros
EOWNERDEAD =&gt; c/error/errno_macros
EPERM =&gt; c/error/errno_macros
EPIPE =&gt; c/error/errno_macros
EPROTO =&gt; c/error/errno_macros
EPROTONOSUPPORT =&gt; c/error/errno_macros
EPROTOTYPE =&gt; c/error/errno_macros
ERANGE =&gt; c/error/errno_macros
EROFS =&gt; c/error/errno_macros
ESPIPE =&gt; c/error/errno_macros
ESRCH =&gt; c/error/errno_macros
ETIME =&gt; c/error/errno_macros
ETIMEDOUT =&gt; c/error/errno_macros
ETXTBSY =&gt; c/error/errno_macros
EWOULDBLOCK =&gt; c/error/errno_macros
EXDEV =&gt; c/error/errno_macros
abort =&gt; c/program/abort
exit =&gt; c/program/exit
quick_exit =&gt; c/program/quick_exit
_Exit =&gt; c/program/_Exit
atexit =&gt; c/program/atexit
at_quick_exit =&gt; c/program/at_quick_exit
EXIT_SUCCESS =&gt; c/program/EXIT_status
EXIT_FAILURE =&gt; c/program/EXIT_status
system =&gt; c/program/system
getenv =&gt; c/program/getenv
signal =&gt; c/program/signal
raise =&gt; c/program/raise
sig_atomic_t =&gt; c/program/sig_atomic_t
SIG_DFL =&gt; c/program/SIG_strategies
SIG_IGN =&gt; c/program/SIG_strategies
SIG_ERR =&gt; c/program/SIG_ERR
SIGABRT =&gt; c/program/SIG_types
SIGFPE =&gt; c/program/SIG_types
SIGILL =&gt; c/program/SIG_types
SIGINT =&gt; c/program/SIG_types
SIGSEGV =&gt; c/program/SIG_types
SIGTERM =&gt; c/program/SIG_types
longjmp =&gt; c/program/longjmp
setjmp =&gt; c/program/setjmp
jmp_buf =&gt; c/program/jmp_buf
difftime =&gt; c/chrono/difftime
time =&gt; c/chrono/time
clock =&gt; c/chrono/clock
asctime =&gt; c/chrono/asctime
ctime =&gt; c/chrono/ctime
strftime =&gt; c/chrono/strftime
wcsftime =&gt; c/chrono/wcsftime
gmtime =&gt; c/chrono/gmtime
localtime =&gt; c/chrono/localtime
mktime =&gt; c/chrono/mktime
CLOCKS_PER_SEC =&gt; c/chrono/CLOCKS_PER_SEC
tm =&gt; c/chrono/tm
time_t =&gt; c/chrono/time_t
clock_t =&gt; c/chrono/clock_t
isalnum =&gt; c/string/byte/isalnum
isalpha =&gt; c/string/byte/isalpha
islower =&gt; c/string/byte/islower
isupper =&gt; c/string/byte/isupper
isdigit =&gt; c/string/byte/isdigit
isxdigit =&gt; c/string/byte/isxdigit
iscntrl =&gt; c/string/byte/iscntrl
isgraph =&gt; c/string/byte/isgraph
isspace =&gt; c/string/byte/isspace
isblank =&gt; c/string/byte/isblank
isprint =&gt; c/string/byte/isprint
ispunct =&gt; c/string/byte/ispunct
tolower =&gt; c/string/byte/tolower
toupper =&gt; c/string/byte/toupper
atof =&gt; c/string/byte/atof
atoi =&gt; c/string/byte/atoi
atol =&gt; c/string/byte/atoi
atoll =&gt; c/string/byte/atoi
strtol =&gt; c/string/byte/strtol
strtoll =&gt; c/string/byte/strtol
strtoul =&gt; c/string/byte/strtoul
strtoull =&gt; c/string/byte/strtoul
strtof =&gt; c/string/byte/strtof
strtod =&gt; c/string/byte/strtof
strtold =&gt; c/string/byte/strtof
strtoimax =&gt; c/string/byte/strtoimax
strtoumax =&gt; c/string/byte/strtoimax
strcpy =&gt; c/string/byte/strcpy
strncpy =&gt; c/string/byte/strncpy
strcat =&gt; c/string/byte/strcat
strncat =&gt; c/string/byte/strncat
strxfrm =&gt; c/string/byte/strxfrm
strlen =&gt; c/string/byte/strlen
strcmp =&gt; c/string/byte/strcmp
strncmp =&gt; c/string/byte/strncmp
strcoll =&gt; c/string/byte/strcoll
strchr =&gt; c/string/byte/strchr
strrchr =&gt; c/string/byte/strrchr
strspn =&gt; c/string/byte/strspn
strcspn =&gt; c/string/byte/strcspn
strpbrk =&gt; c/string/byte/strpbrk
strstr =&gt; c/string/byte/strstr
strtok =&gt; c/string/byte/strtok
memchr =&gt; c/string/byte/memchr
memcmp =&gt; c/string/byte/memcmp
memset =&gt; c/string/byte/memset
memcpy =&gt; c/string/byte/memcpy
memmove =&gt; c/string/byte/memmove
strerror =&gt; c/string/byte/strerror
mblen =&gt; c/string/multibyte/mblen
mbtowc =&gt; c/string/multibyte/mbtowc
wctomb =&gt; c/string/multibyte/wctomb
mbstowcs =&gt; c/string/multibyte/mbstowcs
wcstombs =&gt; c/string/multibyte/wcstombs
mbsinit =&gt; c/string/multibyte/mbsinit
btowc =&gt; c/string/multibyte/btowc
wctob =&gt; c/string/multibyte/wctob
mbrlen =&gt; c/string/multibyte/mbrlen
mbrtowc =&gt; c/string/multibyte/mbrtowc
wcrtomb =&gt; c/string/multibyte/wcrtomb
mbsrtowcs =&gt; c/string/multibyte/mbsrtowcs
wcsrtombs =&gt; c/string/multibyte/wcsrtombs
mbrtoc16 =&gt; c/string/multibyte/mbrtoc16
c16rtomb =&gt; c/string/multibyte/c16rtomb
mbrtoc32 =&gt; c/string/multibyte/mbrtoc32
c32rtomb =&gt; c/string/multibyte/c32rtomb
mbstate_t =&gt; c/string/multibyte/mbstate_t
iswalnum =&gt; c/string/wide/iswalnum
iswalpha =&gt; c/string/wide/iswalpha
iswlower =&gt; c/string/wide/iswlower
iswupper =&gt; c/string/wide/iswupper
iswdigit =&gt; c/string/wide/iswdigit
iswxdigit =&gt; c/string/wide/iswxdigit
iswcntrl =&gt; c/string/wide/iswcntrl
iswgraph =&gt; c/string/wide/iswgraph
iswspace =&gt; c/string/wide/iswspace
iswblank =&gt; c/string/wide/iswblank
iswprint =&gt; c/string/wide/iswprint
iswpunct =&gt; c/string/wide/iswpunct
iswctype =&gt; c/string/wide/iswctype
wctype =&gt; c/string/wide/wctype
towlower =&gt; c/string/wide/towlower
towupper =&gt; c/string/wide/towupper
towctrans =&gt; c/string/wide/towctrans
wctrans =&gt; c/string/wide/wctrans
wcstof =&gt; c/string/wide/wcstof
wcstod =&gt; c/string/wide/wcstof
wcstold =&gt; c/string/wide/wcstof
wcstol =&gt; c/string/wide/wcstol
wcstoll =&gt; c/string/wide/wcstol
wcstoul =&gt; c/string/wide/wcstoul
wcstoull =&gt; c/string/wide/wcstoul
wcstoimax =&gt; c/string/wide/wcstoimax
wcstoumax =&gt; c/string/wide/wcstoimax
wcscpy =&gt; c/string/wide/wcscpy
wcsncpy =&gt; c/string/wide/wcsncpy
wcscat =&gt; c/string/wide/wcscat
wcsncat =&gt; c/string/wide/wcsncat
wcsxfrm =&gt; c/string/wide/wcsxfrm
wcslen =&gt; c/string/wide/wcslen
wcscmp =&gt; c/string/wide/wcscmp
wcsncmp =&gt; c/string/wide/wcsncmp
wcscoll =&gt; c/string/wide/wcscoll
wcschr =&gt; c/string/wide/wcschr
wcsrchr =&gt; c/string/wide/wcsrchr
wcsspn =&gt; c/string/wide/wcsspn
wcscspn =&gt; c/string/wide/wcscspn
wcspbrk =&gt; c/string/wide/wcspbrk
wcsstr =&gt; c/string/wide/wcsstr
wcstok =&gt; c/string/wide/wcstok
wmemchr =&gt; c/string/wide/wmemchr
wmemcmp =&gt; c/string/wide/wmemcmp
wmemset =&gt; c/string/wide/wmemset
wmemcpy =&gt; c/string/wide/wmemcpy
wmemmove =&gt; c/string/wide/wmemmove
abs =&gt; c/numeric/math/abs
labs =&gt; c/numeric/math/abs
llabs =&gt; c/numeric/math/abs
fabs =&gt; c/numeric/math/fabs
div =&gt; c/numeric/math/div
ldiv =&gt; c/numeric/math/div
fmod =&gt; c/numeric/math/fmod
remainder =&gt; c/numeric/math/remainder
remquo =&gt; c/numeric/math/remquo
fma =&gt; c/numeric/math/fma
fmax =&gt; c/numeric/math/fmax
fmin =&gt; c/numeric/math/fmin
fdim =&gt; c/numeric/math/fdim
nan =&gt; c/numeric/math/nan
nanf =&gt; c/numeric/math/nan
nanl =&gt; c/numeric/math/nan
exp =&gt; c/numeric/math/exp
exp2 =&gt; c/numeric/math/exp2
expm1 =&gt; c/numeric/math/expm1
log =&gt; c/numeric/math/log
log10 =&gt; c/numeric/math/log10
log1p =&gt; c/numeric/math/log1p
ilogb =&gt; c/numeric/math/ilogb
logb =&gt; c/numeric/math/logb
sqrt =&gt; c/numeric/math/sqrt
cbrt =&gt; c/numeric/math/cbrt
hypot =&gt; c/numeric/math/hypot
pow =&gt; c/numeric/math/pow
sin =&gt; c/numeric/math/sin
cos =&gt; c/numeric/math/cos
tan =&gt; c/numeric/math/tan
asin =&gt; c/numeric/math/asin
acos =&gt; c/numeric/math/acos
atan =&gt; c/numeric/math/atan
atan2 =&gt; c/numeric/math/atan2
sinh =&gt; c/numeric/math/sinh
cosh =&gt; c/numeric/math/cosh
tanh =&gt; c/numeric/math/tanh
asinh =&gt; c/numeric/math/asinh
acosh =&gt; c/numeric/math/acosh
atanh =&gt; c/numeric/math/atanh
erf =&gt; c/numeric/math/erf
erfc =&gt; c/numeric/math/erfc
lgamma =&gt; c/numeric/math/lgamma
tgamma =&gt; c/numeric/math/tgamma
ceil =&gt; c/numeric/math/ceil
floor =&gt; c/numeric/math/floor
trunc =&gt; c/numeric/math/trunc
round =&gt; c/numeric/math/round
lround =&gt; c/numeric/math/round
llround =&gt; c/numeric/math/round
nearbyint =&gt; c/numeric/math/nearbyint
rint =&gt; c/numeric/math/rint
lrint =&gt; c/numeric/math/rint
llrint =&gt; c/numeric/math/rint
frexp =&gt; c/numeric/math/frexp
ldexp =&gt; c/numeric/math/ldexp
modf =&gt; c/numeric/math/modf
scalbn =&gt; c/numeric/math/scalbn
scalbln =&gt; c/numeric/math/scalbn
nextafter =&gt; c/numeric/math/nextafter
nexttoward =&gt; c/numeric/math/nextafter
copysign =&gt; c/numeric/math/copysign
fpclassify =&gt; c/numeric/math/fpclassify
isfinite =&gt; c/numeric/math/isfinite
isinf =&gt; c/numeric/math/isinf
isnan =&gt; c/numeric/math/isnan
isnormal =&gt; c/numeric/math/isnormal
signbit =&gt; c/numeric/math/signbit
HUGE_VAL =&gt; c/numeric/math/HUGE_VAL
HUGE_VALF =&gt; c/numeric/math/HUGE_VAL
HUGE_VALL =&gt; c/numeric/math/HUGE_VAL
FP_INFINITE =&gt; c/numeric/math/FP_categories
FP_NAN =&gt; c/numeric/math/FP_categories
FP_NORMAL =&gt; c/numeric/math/FP_categories
FP_SUBNORMAL =&gt; c/numeric/math/FP_categories
FP_ZERO =&gt; c/numeric/math/FP_categories
feclearexcept =&gt; c/numeric/fenv/feclearexcept
fetestexcept =&gt; c/numeric/fenv/fetestexcept
feraiseexcept =&gt; c/numeric/fenv/feraiseexcept
fegetexceptflag =&gt; c/numeric/fenv/feexceptflag
fesetexceptflag =&gt; c/numeric/fenv/feexceptflag
fegetround =&gt; c/numeric/fenv/feround
fesetround =&gt; c/numeric/fenv/feround
fegetenv =&gt; c/numeric/fenv/feenv
fesetenv =&gt; c/numeric/fenv/feenv
feholdexcept =&gt; c/numeric/fenv/feholdexcept
feupdateenv =&gt; c/numeric/fenv/feupdateenv
FE_ALL_EXCEPT =&gt; c/numeric/fenv/FE_exceptions
FE_DIVBYZERO =&gt; c/numeric/fenv/FE_exceptions
FE_INEXACT =&gt; c/numeric/fenv/FE_exceptions
FE_INVALID =&gt; c/numeric/fenv/FE_exceptions
FE_OVERFLOW =&gt; c/numeric/fenv/FE_exceptions
FE_UNDERFLOW =&gt; c/numeric/fenv/FE_exceptions
FE_DOWNWARD =&gt; c/numeric/fenv/FE_round
FE_TONEAREST =&gt; c/numeric/fenv/FE_round
FE_TOWARDZERO =&gt; c/numeric/fenv/FE_round
FE_UPWARD =&gt; c/numeric/fenv/FE_round
FE_DFL_ENV =&gt; c/numeric/fenv/FE_DFL_ENV
srand =&gt; c/numeric/random/srand
rand =&gt; c/numeric/random/rand
RAND_MAX =&gt; c/numeric/random/RAND_MAX
complex =&gt; c/numeric/complex/complex
_Complex_I =&gt; c/numeric/complex/Complex_I
imaginary =&gt; c/numeric/complex/imaginary
_Imaginary_I =&gt; c/numeric/complex/Imaginary_I
_I =&gt; c/numeric/complex/I
CMPLX =&gt; c/numeric/complex/CMPLX
CMPLXF =&gt; c/numeric/complex/CMPLX
CMPLXL =&gt; c/numeric/complex/CMPLX
cimag =&gt; c/numeric/complex/cimag
cimagf =&gt; c/numeric/complex/cimag
cimagl =&gt; c/numeric/complex/cimag
creal =&gt; c/numeric/complex/creal
crealf =&gt; c/numeric/complex/creal
creall =&gt; c/numeric/complex/creal
carg =&gt; c/numeric/complex/carg
cargf =&gt; c/numeric/complex/carg
cargl =&gt; c/numeric/complex/carg
conj =&gt; c/numeric/complex/conj
conjf =&gt; c/numeric/complex/conj
conjl =&gt; c/numeric/complex/conj
cproj =&gt; c/numeric/complex/cproj
cprojf =&gt; c/numeric/complex/cproj
cprojl =&gt; c/numeric/complex/cproj
cabs =&gt; c/numeric/complex/cabs
cabsf =&gt; c/numeric/complex/cabs
cabsl =&gt; c/numeric/complex/cabs
cexp =&gt; c/numeric/complex/cexp
cexpf =&gt; c/numeric/complex/cexp
cexpl =&gt; c/numeric/complex/cexp
clog =&gt; c/numeric/complex/clog
clogf =&gt; c/numeric/complex/clog
clogl =&gt; c/numeric/complex/clog
cpow =&gt; c/numeric/complex/cpow
cpowf =&gt; c/numeric/complex/cpow
cpowl =&gt; c/numeric/complex/cpow
csqrt =&gt; c/numeric/complex/csqrt
csqrtf =&gt; c/numeric/complex/csqrt
csqrtl =&gt; c/numeric/complex/csqrt
cacos =&gt; c/numeric/complex/cacos
cacosf =&gt; c/numeric/complex/cacos
cacosl =&gt; c/numeric/complex/cacos
casin =&gt; c/numeric/complex/casin
casinf =&gt; c/numeric/complex/casin
casinl =&gt; c/numeric/complex/casin
catan =&gt; c/numeric/complex/catan
catanf =&gt; c/numeric/complex/catan
catanl =&gt; c/numeric/complex/catan
ccos =&gt; c/numeric/complex/ccos
ccosf =&gt; c/numeric/complex/ccos
ccosl =&gt; c/numeric/complex/ccos
csin =&gt; c/numeric/complex/csin
csinf =&gt; c/numeric/complex/csin
csinl =&gt; c/numeric/complex/csin
ctan =&gt; c/numeric/complex/ctan
ctanf =&gt; c/numeric/complex/ctan
ctanl =&gt; c/numeric/complex/ctan
cacosh =&gt; c/numeric/complex/cacosh
cacoshf =&gt; c/numeric/complex/cacosh
cacoshl =&gt; c/numeric/complex/cacosh
casinh =&gt; c/numeric/complex/casinh
casinhf =&gt; c/numeric/complex/casinh
casinhl =&gt; c/numeric/complex/casinh
catanh =&gt; c/numeric/complex/catanh
catanhf =&gt; c/numeric/complex/catanh
catanhl =&gt; c/numeric/complex/catanh
ccosh =&gt; c/numeric/complex/ccosh
ccoshf =&gt; c/numeric/complex/ccosh
ccoshl =&gt; c/numeric/complex/ccosh
csinh =&gt; c/numeric/complex/csinh
csinhf =&gt; c/numeric/complex/csinh
csinhl =&gt; c/numeric/complex/csinh
ctanh =&gt; c/numeric/complex/ctanh
ctanhf =&gt; c/numeric/complex/ctanh
ctanhl =&gt; c/numeric/complex/ctanh
qsort =&gt; c/algorithm/qsort
bsearch =&gt; c/algorithm/bsearch
fopen =&gt; c/io/fopen
freopen =&gt; c/io/freopen
fflush =&gt; c/io/fflush
fclose =&gt; c/io/fclose
setbuf =&gt; c/io/setbuf
setvbuf =&gt; c/io/setvbuf
fread =&gt; c/io/fread
fwrite =&gt; c/io/fwrite
fgetc =&gt; c/io/fgetc
getc =&gt; c/io/fgetc
fgets =&gt; c/io/fgets
fputc =&gt; c/io/fputc
putc =&gt; c/io/fputc
fputs =&gt; c/io/fputs
getchar =&gt; c/io/getchar
gets =&gt; c/io/gets
putchar =&gt; c/io/putchar
puts =&gt; c/io/puts
ungetc =&gt; c/io/ungetc
fgetwc =&gt; c/io/fgetwc
fgetss =&gt; c/io/fgetws
fputwc =&gt; c/io/fputwc
fputws =&gt; c/io/fputws
getwchar =&gt; c/io/getwchar
putwchar =&gt; c/io/putwchar
ungetwc =&gt; c/io/ungetwc
scanf =&gt; c/io/fscanf
fscanf =&gt; c/io/fscanf
sscanf =&gt; c/io/fscanf
vscanf =&gt; c/io/vfscanf
vfscanf =&gt; c/io/vfscanf
vsscanf =&gt; c/io/vfscanf
printf =&gt; c/io/fprintf
fprintf =&gt; c/io/fprintf
sprintf =&gt; c/io/fprintf
snprintf =&gt; c/io/fprintf
vprintf =&gt; c/io/vfprintf
vfprintf =&gt; c/io/vfprintf
vsprintf =&gt; c/io/vfprintf
vsnprintf =&gt; c/io/vfprintf
wscanf =&gt; c/io/fwscanf
fwscanf =&gt; c/io/fwscanf
swscanf =&gt; c/io/fwscanf
vwscanf =&gt; c/io/vfwscanf
vfwscanf =&gt; c/io/vfwscanf
vswscanf =&gt; c/io/vfwscanf
wprintf =&gt; c/io/fwprintf
fwprintf =&gt; c/io/fwprintf
swprintf =&gt; c/io/fwprintf
vwprintf =&gt; c/io/vfwprintf
vfwprintf =&gt; c/io/vfwprintf
vswprintf =&gt; c/io/vfwprintf
ftell =&gt; c/io/ftell
fgetpos =&gt; c/io/fgetpos
fseek =&gt; c/io/fseek
fsetpos =&gt; c/io/fsetpos
rewind =&gt; c/io/rewind
clearerr =&gt; c/io/clearerr
feof =&gt; c/io/feof
ferror =&gt; c/io/ferror
perror =&gt; c/io/perror
remove =&gt; c/io/remove
rename =&gt; c/io/rename
tmpfile =&gt; c/io/tmpfile
tmpnam =&gt; c/io/tmpnam
FILE =&gt; c/io
fpos_t =&gt; c/io
stdin =&gt; c/io
stdout =&gt; c/io
stderr =&gt; c/io
EOF =&gt; c/io
FOPEN_MAX =&gt; c/io
FILENAME_MAX =&gt; c/io
BUFSIZ =&gt; c/io
_IOFBF =&gt; c/io
_IOLBF =&gt; c/io
_IONBF =&gt; c/io
SEEK_SET =&gt; c/io
SEEK_CUR =&gt; c/io
SEEK_END =&gt; c/io
TMP_MAX =&gt; c/io
L_tmpnam =&gt; c/io
setlocale =&gt; c/locale/setlocale
localeconv =&gt; c/locale/localeconv
lconv =&gt; c/locale/lconv
LC_ALL =&gt; c/locale/LC_categories
LC_COLLATE =&gt; c/locale/LC_categories
LC_CTYPE =&gt; c/locale/LC_categories
LC_MONETARY =&gt; c/locale/LC_categories
LC_NUMERIC =&gt; c/locale/LC_categories
LC_TIME =&gt; c/locale/LC_categories
memory_order =&gt; c/atomic/memory_order
memory_order_relaxed =&gt; c/atomic/memory_order
memory_order_consume =&gt; c/atomic/memory_order
memory_order_acquire =&gt; c/atomic/memory_order
memory_order_release =&gt; c/atomic/memory_order
memory_order_acq_rel =&gt; c/atomic/memory_order
memory_order_seq_cst =&gt; c/atomic/memory_order
atomic_flag =&gt; c/atomic/atomic_flag
ATOMIC_BOOL_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_CHAR_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_CHAR16_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_CHAR32_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_WCHAR_T_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_SHORT_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_INT_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_LONG_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_LLONG_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_POINTER_LOCK_FREE =&gt; c/atomic/ATOMIC_LOCK_FREE_consts
ATOMIC_FLAG_INIT =&gt; c/atomic/ATOMIC_FLAG_INIT
ATOMIC_VAR_INIT =&gt; c/atomic/ATOMIC_VAR_INIT
kill_dependency =&gt; c/atomic/kill_dependency
atomic_flag_test_and_set =&gt; c/atomic/atomic_flag_test_and_set
atomic_flag_test_and_set_explicit =&gt; c/atomic/atomic_flag_test_and_set
atomic_flag_clear =&gt; c/atomic/atomic_flag_clear
atomic_flag_clear_explicit =&gt; c/atomic/atomic_flag_clear
atomic_init =&gt; c/atomic/atomic_init
atomic_is_lock_free =&gt; c/atomic/atomic_is_lock_free
atomic_store =&gt; c/atomic/atomic_store
atomic_store_explicit =&gt; c/atomic/atomic_store
atomic_load =&gt; c/atomic/atomic_load
atomic_load_explicit =&gt; c/atomic/atomic_load
atomic_exchange =&gt; c/atomic/atomic_exchange
atomic_exchange_explicit =&gt; c/atomic/atomic_exchange
atomic_compare_exchange_weak =&gt; c/atomic/atomic_compare_exchange
atomic_compare_exchange_weak_explicit =&gt; c/atomic/atomic_compare_exchange
atomic_compare_exchange_strong =&gt; c/atomic/atomic_compare_exchange
atomic_compare_exchange_strong_explicit =&gt; c/atomic/atomic_compare_exchange
atomic_fetch_add =&gt; c/atomic/atomic_fetch_add
atomic_fetch_add_explicit =&gt; c/atomic/atomic_fetch_add
atomic_fetch_sub =&gt; c/atomic/atomic_fetch_sub
atomic_fetch_sub_explicit =&gt; c/atomic/atomic_fetch_sub
atomic_fetch_or =&gt; c/atomic/atomic_fetch_or
atomic_fetch_or_explicit =&gt; c/atomic/atomic_fetch_or
atomic_fetch_xor =&gt; c/atomic/atomic_fetch_xor
atomic_fetch_xor_explicit =&gt; c/atomic/atomic_fetch_xor
atomic_fetch_and =&gt; c/atomic/atomic_fetch_and
atomic_fetch_and_explicit =&gt; c/atomic/atomic_fetch_and
atomic_thread_fence =&gt; c/atomic/atomic_thread_fence
atomic_signal_fence =&gt; c/atomic/atomic_signal_fence
atomic_bool =&gt; c/atomic
atomic_char =&gt; c/atomic
atomic_schar =&gt; c/atomic
atomic_uchar =&gt; c/atomic
atomic_short =&gt; c/atomic
atomic_ushort =&gt; c/atomic
atomic_int =&gt; c/atomic
atomic_uint =&gt; c/atomic
atomic_long =&gt; c/atomic
atomic_ulong =&gt; c/atomic
atomic_llong =&gt; c/atomic
atomic_ullong =&gt; c/atomic
atomic_char16_t =&gt; c/atomic
atomic_char32_t =&gt; c/atomic
atomic_wchar_t =&gt; c/atomic
atomic_int_least8_t =&gt; c/atomic
atomic_uint_least8_t =&gt; c/atomic
atomic_int_least16_t =&gt; c/atomic
atomic_uint_least16_t =&gt; c/atomic
atomic_int_least32_t =&gt; c/atomic
atomic_uint_least32_t =&gt; c/atomic
atomic_int_least64_t =&gt; c/atomic
atomic_uint_least64_t =&gt; c/atomic
atomic_int_fast8_t =&gt; c/atomic
atomic_uint_fast8_t =&gt; c/atomic
atomic_int_fast16_t =&gt; c/atomic
atomic_uint_fast16_t =&gt; c/atomic
atomic_int_fast32_t =&gt; c/atomic
atomic_uint_fast32_t =&gt; c/atomic
atomic_int_fast64_t =&gt; c/atomic
atomic_uint_fast64_t =&gt; c/atomic
atomic_intprt_t =&gt; c/atomic
atomic_uintprt_t =&gt; c/atomic
atomic_size_t =&gt; c/atomic
atomic_ptrdiff_t =&gt; c/atomic
atomic_intmax_t =&gt; c/atomic
atomic_uintmax_t =&gt; c/atomic
thrd_t =&gt; c/thread
thrd_create =&gt; c/thread/thrd_create
thrd_equal =&gt; c/thread/thrd_equal
thrd_current =&gt; c/thread/thrd_current
thrd_sleep =&gt; c/thread/thrd_sleep
thrd_yield =&gt; c/thread/thrd_yield
thrd_exit =&gt; c/thread/thrd_exit
thrd_detach =&gt; c/thread/thrd_detach
thrd_join =&gt; c/thread/thrd_join
thrd_success =&gt; c/thread/thrd_errors
thrd_timeout =&gt; c/thread/thrd_errors
thrd_busy =&gt; c/thread/thrd_errors
thrd_nomem =&gt; c/thread/thrd_errors
thrd_error =&gt; c/thread/thrd_errors
thrd_start_t =&gt; c/thread
mtx_t =&gt; c/thread
mtx_init =&gt; c/thread/mtx_init
mtx_lock =&gt; c/thread/mtx_lock
mtx_timedlock =&gt; c/thread/mtx_timedlock
mtx_trylock =&gt; c/thread/mtx_trylock
mtx_unlock =&gt; c/thread/mtx_unlock
mtx_destroy =&gt; c/thread/mtx_destroy
mtx_plain =&gt; c/thread/mtx_types
mtx_recursive =&gt; c/thread/mtx_types
mtx_timed =&gt; c/thread/mtx_types
thrd_start_t =&gt; c/thread
once_flag =&gt; c/thread
ONCE_FLAG_INIT =&gt; c/thread/ONCE_FLAG_INIT
call_once =&gt; c/thread/call_once
cnd_t =&gt; c/thread
cnd_init =&gt; c/thread/cnd_init
cnd_signal =&gt; c/thread/cnd_signal
cnd_broadcast =&gt; c/thread/cnd_broadcast
cnd_wait =&gt; c/thread/cnd_wait
cnd_timedwait =&gt; c/thread/cnd_timedwait
cnd_destroy =&gt; c/thread/cnd_destroy
thread_local =&gt; c/thread/thread_local
TSS_DTOR_ITERATIONS =&gt; c/thread/TSS_DTOR_ITERATIONS
tss_t =&gt; c/thread
tss_dtor_t =&gt; c/thread
tss_create =&gt; c/thread/tss_create
tss_get =&gt; c/thread/tss_get
tss_set =&gt; c/thread/tss_set
tss_delete =&gt; c/thread/tss_delete</text>
      <sha1>cmynn35shfu8knpxcrmfuyudq1e9xwx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Geshi-keyword-list-cpp</title>
    <ns>8</ns>
    <id>2531</id>
    <revision>
      <id>89805</id>
      <parentid>89804</parentid>
      <timestamp>2017-01-27T04:13:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Also projected, since that's used so frequently</comment>
      <text xml:space="preserve" bytes="123773">std::size_t =&gt; cpp/types/size_t
std::ptrdiff_t =&gt; cpp/types/ptrdiff_t
std::nullptr_t =&gt; cpp/types/nullptr_t
NULL =&gt; cpp/types/NULL
std::max_align_t =&gt; cpp/types/max_align_t
offsetof =&gt; cpp/types/offsetof
std::int8_t =&gt; cpp/types/integer
std::int16_t =&gt; cpp/types/integer
std::int32_t =&gt; cpp/types/integer
std::int64_t =&gt; cpp/types/integer
std::int_fast8_t =&gt; cpp/types/integer
std::int_fast16_t =&gt; cpp/types/integer
std::int_fast32_t =&gt; cpp/types/integer
std::int_fast64_t =&gt; cpp/types/integer
std::int_least8_t =&gt; cpp/types/integer
std::int_least16_t =&gt; cpp/types/integer
std::int_least32_t =&gt; cpp/types/integer
std::int_least64_t =&gt; cpp/types/integer
std::intmax_t =&gt; cpp/types/integer
std::intptr_t =&gt; cpp/types/integer
std::uint8_t =&gt; cpp/types/integer
std::uint16_t =&gt; cpp/types/integer
std::uint32_t =&gt; cpp/types/integer
std::uint64_t =&gt; cpp/types/integer
std::uint_fast8_t =&gt; cpp/types/integer
std::uint_fast16_t =&gt; cpp/types/integer
std::uint_fast32_t =&gt; cpp/types/integer
std::uint_fast64_t =&gt; cpp/types/integer
std::uint_least8_t =&gt; cpp/types/integer
std::uint_least16_t =&gt; cpp/types/integer
std::uint_least32_t =&gt; cpp/types/integer
std::uint_least64_t =&gt; cpp/types/integer
std::uintmax_t =&gt; cpp/types/integer
std::uintptr_t =&gt; cpp/types/integer
INT8_MIN =&gt; cpp/types/integer
INT16_MIN =&gt; cpp/types/integer
INT32_MIN =&gt; cpp/types/integer
INT64_MIN =&gt; cpp/types/integer
INT_FAST8_MIN =&gt; cpp/types/integer
INT_FAST16_MIN =&gt; cpp/types/integer
INT_FAST32_MIN =&gt; cpp/types/integer
INT_FAST64_MIN =&gt; cpp/types/integer
INT_LEAST8_MIN =&gt; cpp/types/integer
INT_LEAST16_MIN =&gt; cpp/types/integer
INT_LEAST32_MIN =&gt; cpp/types/integer
INT_LEAST64_MIN =&gt; cpp/types/integer
INTPTR_MIN =&gt; cpp/types/integer
INTMAX_MIN =&gt; cpp/types/integer
INT8_MAX =&gt; cpp/types/integer
INT16_MAX =&gt; cpp/types/integer
INT32_MAX =&gt; cpp/types/integer
INT64_MAX =&gt; cpp/types/integer
INT_FAST8_MAX =&gt; cpp/types/integer
INT_FAST16_MAX =&gt; cpp/types/integer
INT_FAST32_MAX =&gt; cpp/types/integer
INT_FAST64_MAX =&gt; cpp/types/integer
INT_LEAST8_MAX =&gt; cpp/types/integer
INT_LEAST16_MAX =&gt; cpp/types/integer
INT_LEAST32_MAX =&gt; cpp/types/integer
INT_LEAST64_MAX =&gt; cpp/types/integer
INTPTR_MAX =&gt; cpp/types/integer
INTMAX_MAX =&gt; cpp/types/integer
UINT8_MAX =&gt; cpp/types/integer
UINT16_MAX =&gt; cpp/types/integer
UINT32_MAX =&gt; cpp/types/integer
UINT64_MAX =&gt; cpp/types/integer
UINT_FAST8_MAX =&gt; cpp/types/integer
UINT_FAST16_MAX =&gt; cpp/types/integer
UINT_FAST32_MAX =&gt; cpp/types/integer
UINT_FAST64_MAX =&gt; cpp/types/integer
UINT_LEAST8_MAX =&gt; cpp/types/integer
UINT_LEAST16_MAX =&gt; cpp/types/integer
UINT_LEAST32_MAX =&gt; cpp/types/integer
UINT_LEAST64_MAX =&gt; cpp/types/integer
UINTPTR_MAX =&gt; cpp/types/integer
UINTMAX_MAX =&gt; cpp/types/integer
PRId8 =&gt; cpp/types/integer
PRId16 =&gt; cpp/types/integer
PRId32 =&gt; cpp/types/integer
PRId64 =&gt; cpp/types/integer
PRIdLEAST8 =&gt; cpp/types/integer
PRIdLEAST16 =&gt; cpp/types/integer
PRIdLEAST32 =&gt; cpp/types/integer
PRIdLEAST64 =&gt; cpp/types/integer
PRIdFAST8 =&gt; cpp/types/integer
PRIdFAST16 =&gt; cpp/types/integer
PRIdFAST32 =&gt; cpp/types/integer
PRIdFAST64 =&gt; cpp/types/integer
PRIdMAX =&gt; cpp/types/integer
PRIdPTR  =&gt; cpp/types/integer
PRIi8 =&gt; cpp/types/integer
PRIi16 =&gt; cpp/types/integer
PRIi32 =&gt; cpp/types/integer
PRIi64 =&gt; cpp/types/integer
PRIiLEAST8 =&gt; cpp/types/integer
PRIiLEAST16 =&gt; cpp/types/integer
PRIiLEAST32 =&gt; cpp/types/integer
PRIiLEAST64 =&gt; cpp/types/integer
PRIiFAST8 =&gt; cpp/types/integer
PRIiFAST16 =&gt; cpp/types/integer
PRIiFAST32 =&gt; cpp/types/integer
PRIiFAST64 =&gt; cpp/types/integer
PRIiMAX =&gt; cpp/types/integer
PRIiPTR  =&gt; cpp/types/integer
PRIu8 =&gt; cpp/types/integer
PRIu16 =&gt; cpp/types/integer
PRIu32 =&gt; cpp/types/integer
PRIu64 =&gt; cpp/types/integer
PRIuLEAST8 =&gt; cpp/types/integer
PRIuLEAST16 =&gt; cpp/types/integer
PRIuLEAST32 =&gt; cpp/types/integer
PRIuLEAST64 =&gt; cpp/types/integer
PRIuFAST8 =&gt; cpp/types/integer
PRIuFAST16 =&gt; cpp/types/integer
PRIuFAST32 =&gt; cpp/types/integer
PRIuFAST64 =&gt; cpp/types/integer
PRIuMAX =&gt; cpp/types/integer
PRIuPTR  =&gt; cpp/types/integer
PRIo8 =&gt; cpp/types/integer
PRIo16 =&gt; cpp/types/integer
PRIo32 =&gt; cpp/types/integer
PRIo64 =&gt; cpp/types/integer
PRIoLEAST8 =&gt; cpp/types/integer
PRIoLEAST16 =&gt; cpp/types/integer
PRIoLEAST32 =&gt; cpp/types/integer
PRIoLEAST64 =&gt; cpp/types/integer
PRIoFAST8 =&gt; cpp/types/integer
PRIoFAST16 =&gt; cpp/types/integer
PRIoFAST32 =&gt; cpp/types/integer
PRIoFAST64 =&gt; cpp/types/integer
PRIoMAX =&gt; cpp/types/integer
PRIoPTR  =&gt; cpp/types/integer
PRIx8 =&gt; cpp/types/integer
PRIx16 =&gt; cpp/types/integer
PRIx32 =&gt; cpp/types/integer
PRIx64 =&gt; cpp/types/integer
PRIxLEAST8 =&gt; cpp/types/integer
PRIxLEAST16 =&gt; cpp/types/integer
PRIxLEAST32 =&gt; cpp/types/integer
PRIxLEAST64 =&gt; cpp/types/integer
PRIxFAST8 =&gt; cpp/types/integer
PRIxFAST16 =&gt; cpp/types/integer
PRIxFAST32 =&gt; cpp/types/integer
PRIxFAST64 =&gt; cpp/types/integer
PRIxMAX =&gt; cpp/types/integer
PRIxPTR  =&gt; cpp/types/integer
PRIX8 =&gt; cpp/types/integer
PRIX16 =&gt; cpp/types/integer
PRIX32 =&gt; cpp/types/integer
PRIX64 =&gt; cpp/types/integer
PRIXLEAST8 =&gt; cpp/types/integer
PRIXLEAST16 =&gt; cpp/types/integer
PRIXLEAST32 =&gt; cpp/types/integer
PRIXLEAST64 =&gt; cpp/types/integer
PRIXFAST8 =&gt; cpp/types/integer
PRIXFAST16 =&gt; cpp/types/integer
PRIXFAST32 =&gt; cpp/types/integer
PRIXFAST64 =&gt; cpp/types/integer
PRIXMAX =&gt; cpp/types/integer
PRIXPTR  =&gt; cpp/types/integer
SCNd8 =&gt; cpp/types/integer
SCNd16 =&gt; cpp/types/integer
SCNd32 =&gt; cpp/types/integer
SCNd64 =&gt; cpp/types/integer
SCNdLEAST8 =&gt; cpp/types/integer
SCNdLEAST16 =&gt; cpp/types/integer
SCNdLEAST32 =&gt; cpp/types/integer
SCNdLEAST64 =&gt; cpp/types/integer
SCNdFAST8 =&gt; cpp/types/integer
SCNdFAST16 =&gt; cpp/types/integer
SCNdFAST32 =&gt; cpp/types/integer
SCNdFAST64 =&gt; cpp/types/integer
SCNdMAX =&gt; cpp/types/integer
SCNdPTR  =&gt; cpp/types/integer
SCNi8 =&gt; cpp/types/integer
SCNi16 =&gt; cpp/types/integer
SCNi32 =&gt; cpp/types/integer
SCNi64 =&gt; cpp/types/integer
SCNiLEAST8 =&gt; cpp/types/integer
SCNiLEAST16 =&gt; cpp/types/integer
SCNiLEAST32 =&gt; cpp/types/integer
SCNiLEAST64 =&gt; cpp/types/integer
SCNiFAST8 =&gt; cpp/types/integer
SCNiFAST16 =&gt; cpp/types/integer
SCNiFAST32 =&gt; cpp/types/integer
SCNiFAST64 =&gt; cpp/types/integer
SCNiMAX =&gt; cpp/types/integer
SCNiPTR  =&gt; cpp/types/integer
SCNu8 =&gt; cpp/types/integer
SCNu16 =&gt; cpp/types/integer
SCNu32 =&gt; cpp/types/integer
SCNu64 =&gt; cpp/types/integer
SCNuLEAST8 =&gt; cpp/types/integer
SCNuLEAST16 =&gt; cpp/types/integer
SCNuLEAST32 =&gt; cpp/types/integer
SCNuLEAST64 =&gt; cpp/types/integer
SCNuFAST8 =&gt; cpp/types/integer
SCNuFAST16 =&gt; cpp/types/integer
SCNuFAST32 =&gt; cpp/types/integer
SCNuFAST64 =&gt; cpp/types/integer
SCNuMAX =&gt; cpp/types/integer
SCNuPTR  =&gt; cpp/types/integer
SCNo8 =&gt; cpp/types/integer
SCNo16 =&gt; cpp/types/integer
SCNo32 =&gt; cpp/types/integer
SCNo64 =&gt; cpp/types/integer
SCNoLEAST8 =&gt; cpp/types/integer
SCNoLEAST16 =&gt; cpp/types/integer
SCNoLEAST32 =&gt; cpp/types/integer
SCNoLEAST64 =&gt; cpp/types/integer
SCNoFAST8 =&gt; cpp/types/integer
SCNoFAST16 =&gt; cpp/types/integer
SCNoFAST32 =&gt; cpp/types/integer
SCNoFAST64 =&gt; cpp/types/integer
SCNoMAX =&gt; cpp/types/integer
SCNoPTR  =&gt; cpp/types/integer
SCNx8 =&gt; cpp/types/integer
SCNx16 =&gt; cpp/types/integer
SCNx32 =&gt; cpp/types/integer
SCNx64 =&gt; cpp/types/integer
SCNxLEAST8 =&gt; cpp/types/integer
SCNxLEAST16 =&gt; cpp/types/integer
SCNxLEAST32 =&gt; cpp/types/integer
SCNxLEAST64 =&gt; cpp/types/integer
SCNxFAST8 =&gt; cpp/types/integer
SCNxFAST16 =&gt; cpp/types/integer
SCNxFAST32 =&gt; cpp/types/integer
SCNxFAST64 =&gt; cpp/types/integer
SCNxMAX =&gt; cpp/types/integer
SCNxPTR  =&gt; cpp/types/integer
SCNX8 =&gt; cpp/types/integer
SCNX16 =&gt; cpp/types/integer
SCNX32 =&gt; cpp/types/integer
SCNX64 =&gt; cpp/types/integer
SCNXLEAST8 =&gt; cpp/types/integer
SCNXLEAST16 =&gt; cpp/types/integer
SCNXLEAST32 =&gt; cpp/types/integer
SCNXLEAST64 =&gt; cpp/types/integer
SCNXFAST8 =&gt; cpp/types/integer
SCNXFAST16 =&gt; cpp/types/integer
SCNXFAST32 =&gt; cpp/types/integer
SCNXFAST64 =&gt; cpp/types/integer
SCNXMAX =&gt; cpp/types/integer
SCNXPTR =&gt; cpp/types/integer
std::numeric_limits =&gt; cpp/types/numeric_limits
std::numeric_limits::is_specialized =&gt; cpp/types/numeric_limits/is_specialized
std::numeric_limits::is_signed =&gt; cpp/types/numeric_limits/is_signed
std::numeric_limits::is_integer =&gt; cpp/types/numeric_limits/is_integer
std::numeric_limits::is_exact =&gt; cpp/types/numeric_limits/is_exact
std::numeric_limits::has_infinity =&gt; cpp/types/numeric_limits/has_infinity
std::numeric_limits::has_quiet_NaN =&gt; cpp/types/numeric_limits/has_quiet_NaN
std::numeric_limits::has_signaling_NaN =&gt; cpp/types/numeric_limits/has_signaling_NaN
std::numeric_limits::has_denorm =&gt; cpp/types/numeric_limits/has_denorm
std::numeric_limits::has_denorm_loss =&gt; cpp/types/numeric_limits/has_denorm_loss
std::numeric_limits::round_style =&gt; cpp/types/numeric_limits/round_style
std::numeric_limits::is_iec559 =&gt; cpp/types/numeric_limits/is_iec559
std::numeric_limits::is_bounded =&gt; cpp/types/numeric_limits/is_bounded
std::numeric_limits::is_modulo =&gt; cpp/types/numeric_limits/is_modulo
std::numeric_limits::digits =&gt; cpp/types/numeric_limits/digits
std::numeric_limits::digits10 =&gt; cpp/types/numeric_limits/digits10
std::numeric_limits::max_digits10 =&gt; cpp/types/numeric_limits/max_digits10
std::numeric_limits::radix =&gt; cpp/types/numeric_limits/radix
std::numeric_limits::min_exponent =&gt; cpp/types/numeric_limits/min_exponent
std::numeric_limits::min_exponent10 =&gt; cpp/types/numeric_limits/min_exponent10
std::numeric_limits::max_exponent =&gt; cpp/types/numeric_limits/max_exponent
std::numeric_limits::max_exponent10 =&gt; cpp/types/numeric_limits/max_exponent10
std::numeric_limits::traps =&gt; cpp/types/numeric_limits/traps
std::numeric_limits::tinyness_before =&gt; cpp/types/numeric_limits/tinyness_before
std::float_round_style =&gt; cpp/types/numeric_limits/float_round_style
std::round_indeterminate =&gt; cpp/types/numeric_limits/float_round_style
std::round_toward_zero =&gt; cpp/types/numeric_limits/float_round_style
std::round_to_nearest =&gt; cpp/types/numeric_limits/float_round_style
std::round_toward_infinity =&gt; cpp/types/numeric_limits/float_round_style
std::round_toward_neg_infinity =&gt; cpp/types/numeric_limits/float_round_style
std::float_denorm_style =&gt; cpp/types/numeric_limits/float_denorm_style
std::denorm_indeterminate =&gt; cpp/types/numeric_limits/float_denorm_style
std::denorm_absent =&gt; cpp/types/numeric_limits/float_denorm_style
std::denorm_present =&gt; cpp/types/numeric_limits/float_denorm_style
PTRDIFF_MIN =&gt; cpp/types/climits
PTRDIFF_MAX =&gt; cpp/types/climits
SIZE_MAX =&gt; cpp/types/climits
SIG_ATOMIC_MIN =&gt; cpp/types/climits
SIG_ATOMIC_MAX =&gt; cpp/types/climits
WCHAR_MIN =&gt; cpp/types/climits
WCHAR_MAX =&gt; cpp/types/climits
WINT_MIN =&gt; cpp/types/climits
WINT_MAX =&gt; cpp/types/climits
CHAR_BIT =&gt; cpp/types/climits
MB_LEN_MAX =&gt; cpp/types/climits
CHAR_MIN =&gt; cpp/types/climits
CHAR_MAX =&gt; cpp/types/climits
SCHAR_MIN =&gt; cpp/types/climits
SHRT_MIN =&gt; cpp/types/climits
INT_MIN =&gt; cpp/types/climits
LONG_MIN =&gt; cpp/types/climits
LLONG_MIN =&gt; cpp/types/climits
SCHAR_MAX =&gt; cpp/types/climits
SHRT_MAX =&gt; cpp/types/climits
INT_MAX =&gt; cpp/types/climits
LONG_MAX =&gt; cpp/types/climits
LLONG_MAX =&gt; cpp/types/climits
UCHAR_MAX =&gt; cpp/types/climits
USHRT_MAX =&gt; cpp/types/climits
UINT_MAX =&gt; cpp/types/climits
ULONG_MAX =&gt; cpp/types/climits
ULLONG_MAX =&gt; cpp/types/climits
FLT_RADIX =&gt; cpp/types/climits
DECIMAL_DIG =&gt; cpp/types/climits
FLT_DECIMAL_DIG =&gt; cpp/types/climits
DBL_DECIMAL_DIG =&gt; cpp/types/climits
LDBL_DECIMAL_DIG =&gt; cpp/types/climits
FLT_MIN =&gt; cpp/types/climits
DBL_MIN =&gt; cpp/types/climits
LDBL_MIN =&gt; cpp/types/climits
FLT_TRUE_MIN =&gt; cpp/types/climits
DBL_TRUE_MIN =&gt; cpp/types/climits
LDBL_TRUE_MIN =&gt; cpp/types/climits
FLT_MAX =&gt; cpp/types/climits
DBL_MAX =&gt; cpp/types/climits
LDBL_MAX =&gt; cpp/types/climits
FLT_EPSILON =&gt; cpp/types/climits
DBL_EPSILON =&gt; cpp/types/climits
LDBL_EPSILON =&gt; cpp/types/climits
FLT_DIG =&gt; cpp/types/climits
DBL_DIG =&gt; cpp/types/climits
LDBL_DIG =&gt; cpp/types/climits
FLT_MANT_DIG =&gt; cpp/types/climits
DBL_MANT_DIG =&gt; cpp/types/climits
LDBL_MANT_DIG =&gt; cpp/types/climits
FLT_MIN_EXP =&gt; cpp/types/climits
DBL_MIN_EXP =&gt; cpp/types/climits
LDBL_MIN_EXP =&gt; cpp/types/climits
FLT_MIN_10_EXP =&gt; cpp/types/climits
DBL_MIN_10_EXP =&gt; cpp/types/climits
LDBL_MIN_10_EXP =&gt; cpp/types/climits
FLT_MAX_EXP =&gt; cpp/types/climits
DBL_MAX_EXP =&gt; cpp/types/climits
LDBL_MAX_EXP =&gt; cpp/types/climits
FLT_MAX_10_EXP =&gt; cpp/types/climits
DBL_MAX_10_EXP =&gt; cpp/types/climits
LDBL_MAX_10_EXP =&gt; cpp/types/climits
FLT_ROUNDS =&gt; cpp/types/climits/FLT_ROUNDS
FLT_EVAL_METHOD =&gt; cpp/types/climits/FLT_EVAL_METHOD
FLT_HAS_SUBNORM =&gt; cpp/types/climits
DBL_HAS_SUBNORM =&gt; cpp/types/climits
LDBL_HAS_SUBNORM =&gt; cpp/types/climits
std::type_info =&gt; cpp/types/type_info
std::type_index =&gt; cpp/types/type_index
std::bad_typeid =&gt; cpp/types/bad_typeid
std::bad_cast =&gt; cpp/types/bad_cast
std::is_void =&gt; cpp/types/is_void
std::is_void_v =&gt; cpp/types/is_void
std::is_null_pointer =&gt; cpp/types/is_null_pointer
std::is_null_pointer_v =&gt; cpp/types/is_null_pointer
std::is_final =&gt; cpp/types/is_final
std::is_final_v =&gt; cpp/types/is_final
std::is_integral =&gt; cpp/types/is_integral
std::is_integral_v =&gt; cpp/types/is_integral
std::is_floating_point =&gt; cpp/types/is_floating_point
std::is_floating_point_v =&gt; cpp/types/is_floating_point
std::is_array =&gt; cpp/types/is_array
std::is_array_v =&gt; cpp/types/is_array
std::is_pointer =&gt; cpp/types/is_pointer
std::is_pointer_v =&gt; cpp/types/is_pointer
std::is_lvalue_reference =&gt; cpp/types/is_lvalue_reference
std::is_lvalue_reference_v =&gt; cpp/types/is_lvalue_reference
std::is_rvalue_reference =&gt; cpp/types/is_rvalue_reference
std::is_rvalue_reference_v =&gt; cpp/types/is_rvalue_reference
std::is_member_object_pointer =&gt; cpp/types/is_member_object_pointer
std::is_member_object_pointer_v =&gt; cpp/types/is_member_object_pointer
std::is_member_function_pointer =&gt; cpp/types/is_member_function_pointer
std::is_member_function_pointer_v =&gt; cpp/types/is_member_function_pointer
std::is_enum =&gt; cpp/types/is_enum
std::is_enum_v =&gt; cpp/types/is_enum
std::is_union =&gt; cpp/types/is_union
std::is_union_v =&gt; cpp/types/is_union
std::is_class =&gt; cpp/types/is_class
std::is_class_v =&gt; cpp/types/is_class
std::is_function =&gt; cpp/types/is_function
std::is_function_v =&gt; cpp/types/is_function
std::is_reference =&gt; cpp/types/is_reference
std::is_reference_v =&gt; cpp/types/is_reference
std::is_arithmetic =&gt; cpp/types/is_arithmetic
std::is_arithmetic_v =&gt; cpp/types/is_arithmetic
std::is_fundamental =&gt; cpp/types/is_fundamental
std::is_fundamental_v =&gt; cpp/types/is_fundamental
std::is_object =&gt; cpp/types/is_object
std::is_object_v =&gt; cpp/types/is_object
std::is_scalar =&gt; cpp/types/is_scalar
std::is_scalar_v =&gt; cpp/types/is_scalar
std::is_compound =&gt; cpp/types/is_compound
std::is_compound_v =&gt; cpp/types/is_compound
std::is_member_pointer =&gt; cpp/types/is_member_pointer
std::is_member_pointer_v =&gt; cpp/types/is_member_pointer
std::is_const =&gt; cpp/types/is_const
std::is_const_v =&gt; cpp/types/is_const
std::is_volatile =&gt; cpp/types/is_volatile
std::is_volatile_v =&gt; cpp/types/is_volatile
std::is_trivial =&gt; cpp/types/is_trivial
std::is_trivial_v =&gt; cpp/types/is_trivial
std::is_trivially_copyable =&gt; cpp/types/is_trivially_copyable
std::is_trivially_copyable_v =&gt; cpp/types/is_trivially_copyable
std::is_standard_layout =&gt; cpp/types/is_standard_layout
std::is_standard_layout_v =&gt; cpp/types/is_standard_layout
std::is_pod =&gt; cpp/types/is_pod
std::is_pod_v =&gt; cpp/types/is_pod
std::is_literal_type =&gt; cpp/types/is_literal_type
std::is_literal_type_v =&gt; cpp/types/is_literal_type
std::is_empty =&gt; cpp/types/is_empty
std::is_empty_v =&gt; cpp/types/is_empty
std::is_polymorphic =&gt; cpp/types/is_polymorphic
std::is_polymorphic_v =&gt; cpp/types/is_polymorphic
std::is_abstract =&gt; cpp/types/is_abstract
std::is_abstract_v =&gt; cpp/types/is_abstract
std::has_unique_object_representations =&gt; cpp/types/has_unique_object_representations
std::has_unique_object_representations_v =&gt; cpp/types/has_unique_object_representations
std::is_signed =&gt; cpp/types/is_signed
std::is_signed_v =&gt; cpp/types/is_signed
std::is_unsigned =&gt; cpp/types/is_unsigned
std::is_unsigned_v =&gt; cpp/types/is_unsigned
std::is_constructible =&gt; cpp/types/is_constructible
std::is_constructible_v =&gt; cpp/types/is_constructible
std::is_trivially_constructible =&gt; cpp/types/is_constructible
std::is_trivially_constructible_v =&gt; cpp/types/is_constructible
std::is_nothrow_constructible =&gt; cpp/types/is_constructible
std::is_nothrow_constructible_v =&gt; cpp/types/is_constructible
std::is_default_constructible =&gt; cpp/types/is_default_constructible
std::is_default_constructible_v =&gt; cpp/types/is_default_constructible
std::is_trivially_default_constructible =&gt; cpp/types/is_default_constructible
std::is_trivially_default_constructible_v =&gt; cpp/types/is_default_constructible
std::is_nothrow_default_constructible =&gt; cpp/types/is_default_constructible
std::is_nothrow_default_constructible_v =&gt; cpp/types/is_default_constructible
std::is_copy_constructible =&gt; cpp/types/is_copy_constructible
std::is_copy_constructible_v =&gt; cpp/types/is_copy_constructible
std::is_trivially_copy_constructible =&gt; cpp/types/is_copy_constructible
std::is_trivially_copy_constructible_v =&gt; cpp/types/is_copy_constructible
std::is_nothrow_copy_constructible =&gt; cpp/types/is_copy_constructible
std::is_nothrow_copy_constructible_v =&gt; cpp/types/is_copy_constructible
std::is_move_constructible =&gt; cpp/types/is_move_constructible
std::is_move_constructible_v =&gt; cpp/types/is_move_constructible
std::is_trivially_move_constructible =&gt; cpp/types/is_move_constructible
std::is_trivially_move_constructible_v =&gt; cpp/types/is_move_constructible
std::is_nothrow_move_constructible =&gt; cpp/types/is_move_constructible
std::is_nothrow_move_constructible_v =&gt; cpp/types/is_move_constructible
std::is_assignable =&gt; cpp/types/is_assignable
std::is_assignable_v =&gt; cpp/types/is_assignable
std::is_trivially_assignable =&gt; cpp/types/is_assignable
std::is_trivially_assignable_v =&gt; cpp/types/is_assignable
std::is_nothrow_assignable =&gt; cpp/types/is_assignable
std::is_nothrow_assignable_v =&gt; cpp/types/is_assignable
std::is_copy_assignable =&gt; cpp/types/is_copy_assignable
std::is_copy_assignable_v =&gt; cpp/types/is_copy_assignable
std::is_trivially_copy_assignable =&gt; cpp/types/is_copy_assignable
std::is_trivially_copy_assignable_v =&gt; cpp/types/is_copy_assignable
std::is_nothrow_copy_assignable =&gt; cpp/types/is_copy_assignable
std::is_nothrow_copy_assignable_v =&gt; cpp/types/is_copy_assignable
std::is_move_assignable =&gt; cpp/types/is_move_assignable
std::is_move_assignable_v =&gt; cpp/types/is_move_assignable
std::is_trivially_move_assignable =&gt; cpp/types/is_move_assignable
std::is_trivially_move_assignable_v =&gt; cpp/types/is_move_assignable
std::is_nothrow_move_assignable =&gt; cpp/types/is_move_assignable
std::is_nothrow_move_assignable_v =&gt; cpp/types/is_move_assignable
std::is_destructible =&gt; cpp/types/is_destructible
std::is_destructible_v =&gt; cpp/types/is_destructible
std::is_trivially_destructible =&gt; cpp/types/is_destructible
std::is_trivially_destructible_v =&gt; cpp/types/is_destructible
std::is_nothrow_destructible =&gt; cpp/types/is_destructible
std::is_nothrow_destructible_v =&gt; cpp/types/is_destructible
std::is_callable =&gt; cpp/types/is_callable
std::is_callable_v =&gt; cpp/types/is_callable
std::is_nothrow_callable =&gt; cpp/types/is_callable
std::is_nothrow_callable_v =&gt; cpp/types/is_callable
std::is_swappable =&gt; cpp/types/is_swappable
std::is_swappable_v =&gt; cpp/types/is_swappable
std::is_swappable_with =&gt; cpp/types/is_swappable_with
std::is_swappable_with_v =&gt; cpp/types/is_swappable_with
std::is_nothrow_swappable =&gt; cpp/types/is_swappable
std::is_nothrow_swappable_v =&gt; cpp/types/is_swappable
std::is_nothrow_swappable_with =&gt; cpp/types/is_swappable_with
std::is_nothrow_swappable_with_v =&gt; cpp/types/is_swappable_with
std::has_virtual_destructor =&gt; cpp/types/has_virtual_destructor
std::has_virtual_destructor_v =&gt; cpp/types/has_virtual_destructor
std::alignment_of =&gt; cpp/types/alignment_of
std::alignment_of_v =&gt; cpp/types/alignment_of
std::rank =&gt; cpp/types/rank
std::rank_v =&gt; cpp/types/rank
std::extent =&gt; cpp/types/extent
std::extent_v =&gt; cpp/types/extent
std::is_same =&gt; cpp/types/is_same
std::is_same_v =&gt; cpp/types/is_same
std::is_base_of =&gt; cpp/types/is_base_of
std::is_base_of_v =&gt; cpp/types/is_base_of
std::is_convertible =&gt; cpp/types/is_convertible
std::is_convertible_v =&gt; cpp/types/is_convertible
std::remove_cv =&gt; cpp/types/remove_cv
std::remove_const =&gt; cpp/types/remove_cv
std::remove_volatile =&gt; cpp/types/remove_cv
std::remove_cv_t =&gt; cpp/types/remove_cv
std::remove_const_t =&gt; cpp/types/remove_cv
std::remove_volatile_t =&gt; cpp/types/remove_cv
std::add_cv =&gt; cpp/types/add_cv
std::add_const =&gt; cpp/types/add_cv
std::add_volatile =&gt; cpp/types/add_cv
std::add_cv_t =&gt; cpp/types/add_cv
std::add_const_t =&gt; cpp/types/add_cv
std::add_volatile_t =&gt; cpp/types/add_cv
std::remove_reference =&gt; cpp/types/remove_reference
std::remove_reference_t =&gt; cpp/types/remove_reference
std::add_lvalue_reference =&gt; cpp/types/add_reference
std::add_lvalue_reference_t =&gt; cpp/types/add_reference
std::add_rvalue_reference =&gt; cpp/types/add_reference
std::add_rvalue_reference_t =&gt; cpp/types/add_reference
std::remove_pointer =&gt; cpp/types/remove_pointer
std::remove_pointer_t =&gt; cpp/types/remove_pointer
std::add_pointer =&gt; cpp/types/add_pointer
std::add_pointer_t =&gt; cpp/types/add_pointer
std::make_signed =&gt; cpp/types/make_signed
std::make_signed_t =&gt; cpp/types/make_signed
std::make_unsigned =&gt; cpp/types/make_unsigned
std::make_unsigned_t =&gt; cpp/types/make_unsigned
std::remove_extent =&gt; cpp/types/remove_extent
std::remove_extent_t =&gt; cpp/types/remove_extent
std::remove_all_extents =&gt; cpp/types/remove_all_extents
std::remove_all_extents_t =&gt; cpp/types/remove_all_extents
std::aligned_storage =&gt; cpp/types/aligned_storage
std::aligned_storage_t =&gt; cpp/types/aligned_storage
std::aligned_union =&gt; cpp/types/aligned_union
std::aligned_union_t =&gt; cpp/types/aligned_union
std::decay =&gt; cpp/types/decay
std::decay_t =&gt; cpp/types/decay
std::enable_if =&gt; cpp/types/enable_if
std::enable_if_t =&gt; cpp/types/enable_if
std::void_t =&gt; cpp/types/void_t
std::conditional =&gt; cpp/types/conditional
std::conditional_t =&gt; cpp/types/conditional
std::common_type =&gt; cpp/types/common_type
std::common_type_t =&gt; cpp/types/common_type
std::underlying_type =&gt; cpp/types/underlying_type
std::underlying_type_t =&gt; cpp/types/underlying_type
std::result_of =&gt; cpp/types/result_of
std::result_of_t =&gt; cpp/types/result_of
std::conjunction =&gt; cpp/types/conjunction
std::conjunction_v =&gt; cpp/types/conjunction
std::disjunction =&gt; cpp/types/disjunction
std::disjunction_v =&gt; cpp/types/disjunction
std::negation =&gt; cpp/types/negation
std::negation_v =&gt; cpp/types/negation
std::integral_constant =&gt; cpp/types/integral_constant
std::bool_constant =&gt; cpp/types/integral_constant
std::true_type =&gt; cpp/types/integral_constant
std::false_type =&gt; cpp/types/integral_constant
std::iterator_traits =&gt; cpp/iterator/iterator_traits
std::input_iterator_tag =&gt; cpp/iterator/iterator_tags
std::output_iterator_tag =&gt; cpp/iterator/iterator_tags
std::forward_iterator_tag =&gt; cpp/iterator/iterator_tags
std::bidirectional_iterator_tag =&gt; cpp/iterator/iterator_tags
std::random_access_iterator_tag =&gt; cpp/iterator/iterator_tags
std::iterator =&gt; cpp/iterator/iterator
std::reverse_iterator =&gt; cpp/iterator/reverse_iterator
std::move_iterator =&gt; cpp/iterator/move_iterator
std::back_insert_iterator =&gt; cpp/iterator/back_insert_iterator
std::front_insert_iterator =&gt; cpp/iterator/front_insert_iterator
std::insert_iterator =&gt; cpp/iterator/insert_iterator
std::make_reverse_iterator =&gt; cpp/iterator/make_reverse_iterator
std::make_move_iterator =&gt; cpp/iterator/make_move_iterator
std::back_inserter =&gt; cpp/iterator/back_inserter
std::front_inserter =&gt; cpp/iterator/front_inserter
std::inserter =&gt; cpp/iterator/inserter
std::istream_iterator =&gt; cpp/iterator/istream_iterator
std::istreambuf_iterator =&gt; cpp/iterator/istreambuf_iterator
std::ostream_iterator =&gt; cpp/iterator/ostream_iterator
std::ostreambuf_iterator =&gt; cpp/iterator/ostreambuf_iterator
std::advance =&gt; cpp/iterator/advance
std::distance =&gt; cpp/iterator/distance
std::next =&gt; cpp/iterator/next
std::prev =&gt; cpp/iterator/prev
std::begin =&gt; cpp/iterator/begin
std::cbegin =&gt; cpp/iterator/begin
std::rbegin =&gt; cpp/iterator/rbegin
std::crbegin =&gt; cpp/iterator/rbegin
std::end =&gt; cpp/iterator/end
std::cend =&gt; cpp/iterator/end
std::rend =&gt; cpp/iterator/rend
std::crend =&gt; cpp/iterator/rend
std::size =&gt; cpp/iterator/size
std::empty =&gt; cpp/iterator/empty
std::data =&gt; cpp/iterator/data
operator new =&gt; cpp/memory/new/operator_new
operator new[] =&gt; cpp/memory/new/operator_new
operator delete =&gt; cpp/memory/new/operator_delete
operator delete[] =&gt; cpp/memory/new/operator_delete
std::get_new_handler =&gt; cpp/memory/new/get_new_handler
std::set_new_handler =&gt; cpp/memory/new/set_new_handler
std::bad_alloc =&gt; cpp/memory/new/bad_alloc
std::bad_array_new_length =&gt; cpp/memory/new/bad_array_new_length
std::bad_array_length =&gt; cpp/memory/new/bad_array_length
std::nothrow_t =&gt; cpp/memory/new/nothrow_t
std::align_val_t =&gt; cpp/memory/new/align_val_t
std::new_handler =&gt; cpp/memory/new/new_handler
std::nothrow =&gt; cpp/memory/new/nothrow
std::allocator =&gt; cpp/memory/allocator
std::allocator_traits =&gt; cpp/memory/allocator_traits
std::allocator_arg_t =&gt; cpp/memory/allocator_arg_t
std::allocator_arg =&gt; cpp/memory/allocator_arg
std::uses_allocator =&gt; cpp/memory/uses_allocator
std::uses_allocator_v =&gt; cpp/memory/uses_allocator
std::scoped_allocator_adaptor =&gt; cpp/memory/scoped_allocator_adaptor
std::pmr::polymorphic_allocator =&gt; cpp/memory/polymorphic_allocator
std::pmr::memory_resource =&gt; cpp/memory/memory_resource
std::pmr::pool_options =&gt; cpp/memory/pool_options
std::pmr::synchronized_pool_resource =&gt; cpp/memory/synchronized_pool_resource
std::pmr::unsynchronized_pool_resource =&gt; cpp/memory/unsynchronized_pool_resource
std::pmr::monotonic_buffer_resource =&gt; cpp/memory/monotonic_buffer_resource
std::pmr::new_delete_resource =&gt; cpp/memory/new_delete_resource
std::pmr::null_memory_resource =&gt; cpp/memory/null_memory_resource
std::pmr::get_default_resource =&gt; cpp/memory/get_default_resource
std::pmr::set_default_resource =&gt; cpp/memory/set_default_resource
std::uninitialized_copy =&gt; cpp/memory/uninitialized_copy
std::uninitialized_copy_n =&gt; cpp/memory/uninitialized_copy_n
std::uninitialized_fill =&gt; cpp/memory/uninitialized_fill
std::uninitialized_fill_n =&gt; cpp/memory/uninitialized_fill_n
std::uninitialized_move =&gt; cpp/memory/uninitialized_move
std::uninitialized_move_n =&gt; cpp/memory/uninitialized_move_n
std::uninitialized_default_construct =&gt; cpp/memory/uninitialized_default_construct
std::uninitialized_default_construct_n =&gt; cpp/memory/uninitialized_default_construct_n
std::uninitialized_value_construct =&gt; cpp/memory/uninitialized_value_construct
std::uninitialized_value_construct_n =&gt; cpp/memory/uninitialized_value_construct_n
std::destroy =&gt; cpp/memory/destroy
std::destroy_at =&gt; cpp/memory/destroy_at
std::destroy_n =&gt; cpp/memory/destroy_n
std::raw_storage_iterator =&gt; cpp/memory/raw_storage_iterator
std::get_temporary_buffer =&gt; cpp/memory/get_temporary_buffer
std::return_temporary_buffer =&gt; cpp/memory/return_temporary_buffer
std::unique_ptr =&gt; cpp/memory/unique_ptr
std::shared_ptr =&gt; cpp/memory/shared_ptr
std::make_unique =&gt; cpp/memory/unique_ptr/make_unique
std::make_shared =&gt; cpp/memory/shared_ptr/make_shared
std::allocate_shared =&gt; cpp/memory/shared_ptr/allocate_shared
std::static_pointer_cast =&gt; cpp/memory/shared_ptr/pointer_cast
std::dynamic_pointer_cast =&gt; cpp/memory/shared_ptr/pointer_cast
std::const_pointer_cast =&gt; cpp/memory/shared_ptr/pointer_cast
std::weak_ptr =&gt; cpp/memory/weak_ptr
std::auto_ptr =&gt; cpp/memory/auto_ptr
std::owner_less =&gt; cpp/memory/owner_less
std::enable_shared_from_this =&gt; cpp/memory/enable_shared_from_this
std::bad_weak_ptr =&gt; cpp/memory/bad_weak_ptr
std::default_delete =&gt; cpp/memory/default_delete
std::declare_reachable =&gt; cpp/memory/gc/declare_reachable
std::undeclare_reachable =&gt; cpp/memory/gc/undeclare_reachable
std::declare_no_pointers =&gt; cpp/memory/gc/declare_no_pointers
std::undeclare_no_pointers =&gt; cpp/memory/gc/undeclare_no_pointers
std::pointer_safety =&gt; cpp/memory/gc/pointer_safety
std::pointer_safety::relaxed =&gt; cpp/memory/gc/pointer_safety
std::pointer_safety::preferred =&gt; cpp/memory/gc/pointer_safety
std::pointer_safety::strict =&gt; cpp/memory/gc/pointer_safety
std::get_pointer_safety =&gt; cpp/memory/gc/get_pointer_safety
std::pointer_traits =&gt; cpp/memory/pointer_traits
std::addressof =&gt; cpp/memory/addressof
std::align =&gt; cpp/memory/align
std::malloc =&gt; cpp/memory/c/malloc
std::aligned_alloc =&gt; cpp/memory/c/aligned_alloc
std::calloc =&gt; cpp/memory/c/calloc
std::realloc =&gt; cpp/memory/c/realloc
std::free =&gt; cpp/memory/c/free
std::exception =&gt; cpp/error/exception
std::logic_error =&gt; cpp/error/logic_error
std::domain_error =&gt; cpp/error/domain_error
std::length_error =&gt; cpp/error/length_error
std::out_of_range =&gt; cpp/error/out_of_range
std::invalid_argument =&gt; cpp/error/invalid_argument
std::runtime_error =&gt; cpp/error/runtime_error
std::range_error =&gt; cpp/error/range_error
std::overflow_error =&gt; cpp/error/overflow_error
std::underflow_error =&gt; cpp/error/underflow_error
assert =&gt; cpp/error/assert
std::uncaught_exception =&gt; cpp/error/uncaught_exception
std::exception_ptr =&gt; cpp/error/exception_ptr
std::make_exception_ptr =&gt; cpp/error/make_exception_ptr
std::current_exception =&gt; cpp/error/current_exception
std::rethrow_exception =&gt; cpp/error/rethrow_exception
std::nested_exception =&gt; cpp/error/nested_exception
std::throw_with_nested =&gt; cpp/error/throw_with_nested
std::rethrow_if_nested =&gt; cpp/error/rethrow_if_nested
std::terminate =&gt; cpp/error/terminate
std::terminate_handler =&gt; cpp/error/terminate_handler
std::get_terminate =&gt; cpp/error/get_terminate
std::set_terminate =&gt; cpp/error/set_terminate
std::unexpected =&gt; cpp/error/unexpected
std::bad_exception =&gt; cpp/error/bad_exception
std::unexpected_handler =&gt; cpp/error/unexpected_handler
std::get_unexpected =&gt; cpp/error/get_unexpected
std::set_unexpected =&gt; cpp/error/set_unexpected
errno =&gt; cpp/error/errno
E2BIG =&gt; cpp/error/errno_macros
EACCESS =&gt; cpp/error/errno_macros
EADDRINUSE =&gt; cpp/error/errno_macros
EADDRNOTAVAIL =&gt; cpp/error/errno_macros
EAFNOSUPPORT =&gt; cpp/error/errno_macros
EAGAIN =&gt; cpp/error/errno_macros
EALREADY =&gt; cpp/error/errno_macros
EBADF =&gt; cpp/error/errno_macros
EBADMSG =&gt; cpp/error/errno_macros
EBUSY =&gt; cpp/error/errno_macros
ECANCELED =&gt; cpp/error/errno_macros
ECHILD =&gt; cpp/error/errno_macros
ECONNABORTED =&gt; cpp/error/errno_macros
ECONNREFUSED =&gt; cpp/error/errno_macros
ECONNRESET =&gt; cpp/error/errno_macros
EDEADLK =&gt; cpp/error/errno_macros
EDESTADDRREQ =&gt; cpp/error/errno_macros
EDOM =&gt; cpp/error/errno_macros
EEXIST =&gt; cpp/error/errno_macros
EFAULT =&gt; cpp/error/errno_macros
EFBIG =&gt; cpp/error/errno_macros
EHOSTUNREACH =&gt; cpp/error/errno_macros
EIDRM =&gt; cpp/error/errno_macros
EILSEQ =&gt; cpp/error/errno_macros
EINPROGRESS =&gt; cpp/error/errno_macros
EINTR =&gt; cpp/error/errno_macros
EINVAL =&gt; cpp/error/errno_macros
EIO =&gt; cpp/error/errno_macros
EISCONN =&gt; cpp/error/errno_macros
EISDIR =&gt; cpp/error/errno_macros
ELOOP =&gt; cpp/error/errno_macros
EMFILE =&gt; cpp/error/errno_macros
EMLINK =&gt; cpp/error/errno_macros
EMSGSIZE =&gt; cpp/error/errno_macros
ENAMETOOLONG =&gt; cpp/error/errno_macros
ENETDOWN =&gt; cpp/error/errno_macros
ENETRESET =&gt; cpp/error/errno_macros
ENETUNREACH =&gt; cpp/error/errno_macros
ENFILE =&gt; cpp/error/errno_macros
ENOBUFS =&gt; cpp/error/errno_macros
ENODATA =&gt; cpp/error/errno_macros
ENODEV =&gt; cpp/error/errno_macros
ENOENT =&gt; cpp/error/errno_macros
ENOEXEC =&gt; cpp/error/errno_macros
ENOLCK =&gt; cpp/error/errno_macros
ENOLINK =&gt; cpp/error/errno_macros
ENOMEM =&gt; cpp/error/errno_macros
ENOMSG =&gt; cpp/error/errno_macros
ENOPROTOOPT =&gt; cpp/error/errno_macros
ENOSPC =&gt; cpp/error/errno_macros
ENOSR =&gt; cpp/error/errno_macros
ENOSTR =&gt; cpp/error/errno_macros
ENOSYS =&gt; cpp/error/errno_macros
ENOTCONN =&gt; cpp/error/errno_macros
ENOTDIR =&gt; cpp/error/errno_macros
ENOTEMPTY =&gt; cpp/error/errno_macros
ENOTRECOVERABLE =&gt; cpp/error/errno_macros
ENOTSOCK =&gt; cpp/error/errno_macros
ENOTSUP =&gt; cpp/error/errno_macros
ENOTTY =&gt; cpp/error/errno_macros
ENXIO =&gt; cpp/error/errno_macros
EOPNOTSUPP =&gt; cpp/error/errno_macros
EOVERFLOW =&gt; cpp/error/errno_macros
EOWNERDEAD =&gt; cpp/error/errno_macros
EPERM =&gt; cpp/error/errno_macros
EPIPE =&gt; cpp/error/errno_macros
EPROTO =&gt; cpp/error/errno_macros
EPROTONOSUPPORT =&gt; cpp/error/errno_macros
EPROTOTYPE =&gt; cpp/error/errno_macros
ERANGE =&gt; cpp/error/errno_macros
EROFS =&gt; cpp/error/errno_macros
ESPIPE =&gt; cpp/error/errno_macros
ESRCH =&gt; cpp/error/errno_macros
ETIME =&gt; cpp/error/errno_macros
ETIMEDOUT =&gt; cpp/error/errno_macros
ETXTBSY =&gt; cpp/error/errno_macros
EWOULDBLOCK =&gt; cpp/error/errno_macros
EXDEV =&gt; cpp/error/errno_macros
std::error_category =&gt; cpp/error/error_category
std::generic_category =&gt; cpp/error/generic_category
std::system_category =&gt; cpp/error/system_category
std::error_condition =&gt; cpp/error/error_condition
std::is_error_condition_enum =&gt; cpp/error/error_condition/is_error_condition_enum
std::is_error_condition_enum_v =&gt; cpp/error/error_condition/is_error_condition_enum
std::error_code =&gt; cpp/error/error_code
std::is_error_code_enum =&gt; cpp/error/error_code/is_error_code_enum
std::is_error_code_enum_v =&gt; cpp/error/error_code/is_error_code_enum
std::errc =&gt; cpp/error/errc
std::errc::address_family_not_supported =&gt; cpp/error/errc
std::errc::address_in_use =&gt; cpp/error/errc
std::errc::address_not_available =&gt; cpp/error/errc
std::errc::already_connected =&gt; cpp/error/errc
std::errc::argument_list_too_long =&gt; cpp/error/errc
std::errc::argument_out_of_domain =&gt; cpp/error/errc
std::errc::bad_address =&gt; cpp/error/errc
std::errc::bad_file_descriptor =&gt; cpp/error/errc
std::errc::bad_message =&gt; cpp/error/errc
std::errc::broken_pipe =&gt; cpp/error/errc
std::errc::connection_aborted =&gt; cpp/error/errc
std::errc::connection_already_in_progress =&gt; cpp/error/errc
std::errc::connection_refused =&gt; cpp/error/errc
std::errc::connection_reset =&gt; cpp/error/errc
std::errc::cross_device_link =&gt; cpp/error/errc
std::errc::destination_address_required =&gt; cpp/error/errc
std::errc::device_or_resource_busy =&gt; cpp/error/errc
std::errc::directory_not_empty =&gt; cpp/error/errc
std::errc::executable_format_error =&gt; cpp/error/errc
std::errc::file_exists =&gt; cpp/error/errc
std::errc::file_too_large =&gt; cpp/error/errc
std::errc::filename_too_long =&gt; cpp/error/errc
std::errc::function_not_supported =&gt; cpp/error/errc
std::errc::host_unreachable =&gt; cpp/error/errc
std::errc::identifier_removed =&gt; cpp/error/errc
std::errc::illegal_byte_sequence =&gt; cpp/error/errc
std::errc::inappropriate_io_control_operation =&gt; cpp/error/errc
std::errc::interrupted =&gt; cpp/error/errc
std::errc::invalid_argument =&gt; cpp/error/errc
std::errc::invalid_seek =&gt; cpp/error/errc
std::errc::io_error =&gt; cpp/error/errc
std::errc::is_a_directory =&gt; cpp/error/errc
std::errc::message_size =&gt; cpp/error/errc
std::errc::network_down =&gt; cpp/error/errc
std::errc::network_reset =&gt; cpp/error/errc
std::errc::network_unreachable =&gt; cpp/error/errc
std::errc::no_buffer_space =&gt; cpp/error/errc
std::errc::no_child_process =&gt; cpp/error/errc
std::errc::no_link =&gt; cpp/error/errc
std::errc::no_lock_available =&gt; cpp/error/errc
std::errc::no_message_available =&gt; cpp/error/errc
std::errc::no_message =&gt; cpp/error/errc
std::errc::no_protocol_option =&gt; cpp/error/errc
std::errc::no_space_on_device =&gt; cpp/error/errc
std::errc::no_stream_resources =&gt; cpp/error/errc
std::errc::no_such_device_or_address =&gt; cpp/error/errc
std::errc::no_such_device =&gt; cpp/error/errc
std::errc::no_such_file_or_directory =&gt; cpp/error/errc
std::errc::no_such_process =&gt; cpp/error/errc
std::errc::not_a_directory =&gt; cpp/error/errc
std::errc::not_a_socket =&gt; cpp/error/errc
std::errc::not_a_stream =&gt; cpp/error/errc
std::errc::not_connected =&gt; cpp/error/errc
std::errc::not_enough_memory =&gt; cpp/error/errc
std::errc::not_supported =&gt; cpp/error/errc
std::errc::operation_canceled =&gt; cpp/error/errc
std::errc::operation_in_progress =&gt; cpp/error/errc
std::errc::operation_not_permitted =&gt; cpp/error/errc
std::errc::operation_not_supported =&gt; cpp/error/errc
std::errc::operation_would_block =&gt; cpp/error/errc
std::errc::owner_dead =&gt; cpp/error/errc
std::errc::permission_denied =&gt; cpp/error/errc
std::errc::protocol_error =&gt; cpp/error/errc
std::errc::protocol_not_supported =&gt; cpp/error/errc
std::errc::read_only_file_system =&gt; cpp/error/errc
std::errc::resource_deadlock_would_occur =&gt; cpp/error/errc
std::errc::resource_unavailable_try_again =&gt; cpp/error/errc
std::errc::result_out_of_range =&gt; cpp/error/errc
std::errc::state_not_recoverable =&gt; cpp/error/errc
std::errc::stream_timeout =&gt; cpp/error/errc
std::errc::text_file_busy =&gt; cpp/error/errc
std::errc::timed_out =&gt; cpp/error/errc
std::errc::too_many_files_open_in_system =&gt; cpp/error/errc
std::errc::too_many_files_open =&gt; cpp/error/errc
std::errc::too_many_links =&gt; cpp/error/errc
std::errc::too_many_symbolic_link_levels =&gt; cpp/error/errc
std::errc::value_too_large =&gt; cpp/error/errc
std::errc::wrong_protocol_type =&gt; cpp/error/errc
std::system_error =&gt; cpp/error/system_error
std::initializer_list =&gt; cpp/utility/initializer_list
va_start =&gt; cpp/utility/variadic/va_start
va_copy =&gt; cpp/utility/variadic/va_copy
va_arg =&gt; cpp/utility/variadic/va_arg
va_end =&gt; cpp/utility/variadic/va_end
va_list =&gt; cpp/utility/variadic/va_list
std::abort =&gt; cpp/utility/program/abort
std::exit =&gt; cpp/utility/program/exit
std::quick_exit =&gt; cpp/utility/program/quick_exit
std::_Exit =&gt; cpp/utility/program/_Exit
std::atexit =&gt; cpp/utility/program/atexit
std::at_quick_exit =&gt; cpp/utility/program/at_quick_exit
EXIT_SUCCESS =&gt; cpp/utility/program/EXIT_status
EXIT_FAILURE =&gt; cpp/utility/program/EXIT_status
std::system =&gt; cpp/utility/program/system
std::getenv =&gt; cpp/utility/program/getenv
std::signal =&gt; cpp/utility/program/signal
std::raise =&gt; cpp/utility/program/raise
std::sig_atomic_t =&gt; cpp/utility/program/sig_atomic_t
SIG_DFL =&gt; cpp/utility/program/SIG_strategies
SIG_IGN =&gt; cpp/utility/program/SIG_strategies
SIG_ERR =&gt; cpp/utility/program/SIG_ERR
SIGABRT =&gt; cpp/utility/program/SIG_types
SIGFPE =&gt; cpp/utility/program/SIG_types
SIGILL =&gt; cpp/utility/program/SIG_types
SIGINT =&gt; cpp/utility/program/SIG_types
SIGSEGV =&gt; cpp/utility/program/SIG_types
SIGTERM =&gt; cpp/utility/program/SIG_types
std::longjmp =&gt; cpp/utility/program/longjmp
setjmp =&gt; cpp/utility/program/setjmp
std::jmp_buf =&gt; cpp/utility/program/jmp_buf
std::chrono::time_point =&gt; cpp/chrono/time_point
std::chrono::time_point_cast =&gt; cpp/chrono/time_point/time_point_cast
std::chrono::duration =&gt; cpp/chrono/duration
std::chrono::nanoseconds =&gt; cpp/chrono/duration
std::chrono::microseconds =&gt; cpp/chrono/duration
std::chrono::milliseconds =&gt; cpp/chrono/duration
std::chrono::seconds =&gt; cpp/chrono/duration
std::chrono::minutes =&gt; cpp/chrono/duration
std::chrono::hours =&gt; cpp/chrono/duration
std::chrono::duration_cast =&gt; cpp/chrono/duration/duration_cast
std::chrono::treat_as_floating_point =&gt; cpp/chrono/treat_as_floating_point
std::chrono::treat_as_floating_point =&gt; cpp/chrono/treat_as_floating_point
std::chrono::duration_values =&gt; cpp/chrono/duration_values
std::chrono::system_clock =&gt; cpp/chrono/system_clock
std::chrono::system_clock::is_steady =&gt; cpp/chrono/system_clock
std::chrono::steady_clock =&gt; cpp/chrono/steady_clock
std::chrono::steady_clock::is_steady =&gt; cpp/chrono/steady_clock
std::chrono::high_resolution_clock =&gt; cpp/chrono/high_resolution_clock
std::chrono::high_resolution_clock::is_steady =&gt; cpp/chrono/high_resolution_clock
std::difftime =&gt; cpp/chrono/c/difftime
std::time =&gt; cpp/chrono/c/time
std::clock =&gt; cpp/chrono/c/clock
std::timespec_get =&gt; cpp/chrono/c/timespec_get
TIME_UTC =&gt; cpp/chrono/c/timespec_get
std::asctime =&gt; cpp/chrono/c/asctime
std::ctime =&gt; cpp/chrono/c/ctime
std::strftime =&gt; cpp/chrono/c/strftime
std::wcsftime =&gt; cpp/chrono/c/wcsftime
std::gmtime =&gt; cpp/chrono/c/gmtime
std::localtime =&gt; cpp/chrono/c/localtime
std::mktime =&gt; cpp/chrono/c/mktime
CLOCKS_PER_SEC =&gt; cpp/chrono/c/CLOCKS_PER_SEC
std::tm =&gt; cpp/chrono/c/tm
std::time_t =&gt; cpp/chrono/c/time_t
std::clock_t =&gt; cpp/chrono/c/clock_t
std::timespec =&gt; cpp/chrono/c/timespec
std::bitset =&gt; cpp/utility/bitset
std::bitset::reference =&gt; cpp/utility/bitset/reference
std::plus =&gt; cpp/utility/functional/plus
std::minus =&gt; cpp/utility/functional/minus
std::multiplies =&gt; cpp/utility/functional/multiplies
std::divides =&gt; cpp/utility/functional/divides
std::modulus =&gt; cpp/utility/functional/modulus
std::negate =&gt; cpp/utility/functional/negate
std::equal_to =&gt; cpp/utility/functional/equal_to
std::not_equal_to =&gt; cpp/utility/functional/not_equal_to
std::greater =&gt; cpp/utility/functional/greater
std::greater_equal =&gt; cpp/utility/functional/greater_equal
std::less =&gt; cpp/utility/functional/less
std::less_equal =&gt; cpp/utility/functional/less_equal
std::logical_and =&gt; cpp/utility/functional/logical_and
std::logical_or =&gt; cpp/utility/functional/logical_or
std::logical_not =&gt; cpp/utility/functional/logical_not
std::bit_and =&gt; cpp/utility/functional/bit_and
std::bit_or =&gt; cpp/utility/functional/bit_or
std::bit_not =&gt; cpp/utility/functional/bit_not
std::unary_negate =&gt; cpp/utility/functional/unary_negate
std::binary_negate =&gt; cpp/utility/functional/binary_negate
std::not_fn =&gt; cpp/utility/functional/not_fn
std::not1 =&gt; cpp/utility/functional/not1
std::not2 =&gt; cpp/utility/functional/not2
std::bind =&gt; cpp/utility/functional/bind
std::is_bind_expression =&gt; cpp/utility/functional/is_bind_expression
std::is_placeholder =&gt; cpp/utility/functional/is_placeholder
std::is_bind_expression_v =&gt; cpp/utility/functional/is_bind_expression
std::is_placeholder_v =&gt; cpp/utility/functional/is_placeholder
std::mem_fn =&gt; cpp/utility/functional/mem_fn
std::invoke =&gt; cpp/utility/functional/invoke
std::function =&gt; cpp/utility/functional/function
std::bad_function_call =&gt; cpp/utility/functional/bad_function_call
std::placeholders =&gt; cpp/utility/functional/placeholders
std::default_searcher =&gt; cpp/utility/functional/default_searcher
std::boyer_moore_searcher =&gt; cpp/utility/functional/boyer_moore_searcher
std::boyer_moore_horspool_searcher =&gt; cpp/utility/functional/boyer_moore_horspool_searcher
std::make_default_searcher =&gt; cpp/utility/functional/default_searcher
std::make_boyer_moore_searcher =&gt; cpp/utility/functional/boyer_moore_searcher
std::make_boyer_moore_horspool_searcher =&gt; cpp/utility/functional/boyer_moore_horspool_searcher
std::reference_wrapper =&gt; cpp/utility/functional/reference_wrapper
std::ref =&gt; cpp/utility/functional/ref
std::cref =&gt; cpp/utility/functional/ref
std::any =&gt; cpp/utility/any
std::any_cast =&gt; cpp/utility/any/any_cast
std::make_any =&gt; cpp/utility/any/make_any
std::bad_any_cast =&gt; cpp/utility/any/bad_any_cast
std::optional =&gt; cpp/utility/optional
std::make_optional =&gt; cpp/utility/optional/make_optional
std::bad_optional_access =&gt; cpp/utility/optional/bad_optional_access
std::nullopt_t =&gt; cpp/utility/optional/nullopt_t
std::nullopt =&gt; cpp/utility/optional/nullopt
std::in_place_tag =&gt; cpp/utility/in_place_tag
std::in_place =&gt; cpp/utility/in_place
std::in_place_t =&gt; cpp/utility/in_place
std::in_place_type_t =&gt; cpp/utility/in_place
std::in_place_index_t =&gt; cpp/utility/in_place
std::variant =&gt; cpp/utility/variant
std::visit =&gt; cpp/utility/variant/visit
std::holds_alternative =&gt; cpp/utility/variant/holds_alternative
std::get_if =&gt; cpp/utility/variant/get_if
std::bad_variant_access =&gt; cpp/utility/variant/bad_variant_access
std::variant_npos =&gt; cpp/utility/variant/variant_npos
std::variant_size =&gt; cpp/utility/variant/variant_size
std::variant_size_v =&gt; cpp/utility/variant/variant_size
std::variant_alternative =&gt; cpp/utility/variant/variant_alternative
std::variant_alternative_t =&gt; cpp/utility/variant/variant_alternative
std::monostate =&gt; cpp/utility/variant/monostate
std::pair =&gt; cpp/utility/pair
std::make_pair =&gt; cpp/utility/pair/make_pair
std::tuple =&gt; cpp/utility/tuple
std::tuple_size_v =&gt; cpp/utility/tuple/tuple_size
std::apply =&gt; cpp/utility/apply
std::make_from_tuple =&gt; cpp/utility/make_from_tuple
std::piecewise_construct_t =&gt; cpp/utility/piecewise_construct_t
std::piecewise_construct =&gt; cpp/utility/piecewise_construct
std::integer_sequence =&gt; cpp/utility/integer_sequence
std::index_sequence =&gt; cpp/utility/integer_sequence
std::make_integer_sequence =&gt; cpp/utility/integer_sequence
std::make_index_sequence =&gt; cpp/utility/integer_sequence
std::index_sequence_for =&gt; cpp/utility/integer_sequence
std::make_tuple =&gt; cpp/utility/tuple/make_tuple
std::tie =&gt; cpp/utility/tuple/tie
std::forward_as_tuple =&gt; cpp/utility/tuple/forward_as_tuple
std::tuple_cat =&gt; cpp/utility/tuple/tuple_cat
std::ignore =&gt; cpp/utility/tuple/ignore
std::forward =&gt; cpp/utility/forward
std::exchange =&gt; cpp/utility/exchange
std::move_if_noexcept =&gt; cpp/utility/move_if_noexcept
std::declval =&gt; cpp/utility/declval
std::as_const =&gt; cpp/utility/as_const
std::launder =&gt; cpp/utility/launder
std::rel_ops::operator!= =&gt; cpp/utility/rel_ops/operator_cmp
std::hash =&gt; cpp/utility/hash
std::unary_function =&gt; cpp/utility/functional/unary_function
std::binary_function =&gt; cpp/utility/functional/binary_function
std::atof =&gt; cpp/string/byte/atof
std::atoi =&gt; cpp/string/byte/atoi
std::atol =&gt; cpp/string/byte/atoi
std::atoll =&gt; cpp/string/byte/atoi
std::strtol =&gt; cpp/string/byte/strtol
std::strtoll =&gt; cpp/string/byte/strtol
std::strtoul =&gt; cpp/string/byte/strtoul
std::strtoull =&gt; cpp/string/byte/strtoul
std::strtof =&gt; cpp/string/byte/strtof
std::strtod =&gt; cpp/string/byte/strtof
std::strtold =&gt; cpp/string/byte/strtof
std::strtoimax =&gt; cpp/string/byte/strtoimax
std::strtoumax =&gt; cpp/string/byte/strtoimax
std::strcpy =&gt; cpp/string/byte/strcpy
std::strncpy =&gt; cpp/string/byte/strncpy
std::strcat =&gt; cpp/string/byte/strcat
std::strncat =&gt; cpp/string/byte/strncat
std::strxfrm =&gt; cpp/string/byte/strxfrm
std::strlen =&gt; cpp/string/byte/strlen
std::strcmp =&gt; cpp/string/byte/strcmp
std::strncmp =&gt; cpp/string/byte/strncmp
std::strcoll =&gt; cpp/string/byte/strcoll
std::strchr =&gt; cpp/string/byte/strchr
std::strrchr =&gt; cpp/string/byte/strrchr
std::strspn =&gt; cpp/string/byte/strspn
std::strcspn =&gt; cpp/string/byte/strcspn
std::strpbrk =&gt; cpp/string/byte/strpbrk
std::strstr =&gt; cpp/string/byte/strstr
std::strtok =&gt; cpp/string/byte/strtok
std::memchr =&gt; cpp/string/byte/memchr
std::memcmp =&gt; cpp/string/byte/memcmp
std::memset =&gt; cpp/string/byte/memset
std::memcpy =&gt; cpp/string/byte/memcpy
std::memmove =&gt; cpp/string/byte/memmove
std::strerror =&gt; cpp/string/byte/strerror
std::mblen =&gt; cpp/string/multibyte/mblen
std::mbtowc =&gt; cpp/string/multibyte/mbtowc
std::wctomb =&gt; cpp/string/multibyte/wctomb
std::mbstowcs =&gt; cpp/string/multibyte/mbstowcs
std::wcstombs =&gt; cpp/string/multibyte/wcstombs
std::mbsinit =&gt; cpp/string/multibyte/mbsinit
std::btowc =&gt; cpp/string/multibyte/btowc
std::wctob =&gt; cpp/string/multibyte/wctob
std::mbrlen =&gt; cpp/string/multibyte/mbrlen
std::mbrtowc =&gt; cpp/string/multibyte/mbrtowc
std::wcrtomb =&gt; cpp/string/multibyte/wcrtomb
std::mbsrtowcs =&gt; cpp/string/multibyte/mbsrtowcs
std::wcsrtombs =&gt; cpp/string/multibyte/wcsrtombs
std::mbrtoc16 =&gt; cpp/string/multibyte/mbrtoc16
std::c16rtomb =&gt; cpp/string/multibyte/c16rtomb
std::mbrtoc32 =&gt; cpp/string/multibyte/mbrtoc32
std::c32rtomb =&gt; cpp/string/multibyte/c32rtomb
std::mbstate_t =&gt; cpp/string/multibyte/mbstate_t
std::iswalnum =&gt; cpp/string/wide/iswalnum
std::iswalpha =&gt; cpp/string/wide/iswalpha
std::iswlower =&gt; cpp/string/wide/iswlower
std::iswupper =&gt; cpp/string/wide/iswupper
std::iswdigit =&gt; cpp/string/wide/iswdigit
std::iswxdigit =&gt; cpp/string/wide/iswxdigit
std::iswcntrl =&gt; cpp/string/wide/iswcntrl
std::iswgraph =&gt; cpp/string/wide/iswgraph
std::iswspace =&gt; cpp/string/wide/iswspace
std::iswblank =&gt; cpp/string/wide/iswblank
std::iswprint =&gt; cpp/string/wide/iswprint
std::iswpunct =&gt; cpp/string/wide/iswpunct
std::iswctype =&gt; cpp/string/wide/iswctype
std::wctype =&gt; cpp/string/wide/wctype
std::towlower =&gt; cpp/string/wide/towlower
std::towupper =&gt; cpp/string/wide/towupper
std::towctrans =&gt; cpp/string/wide/towctrans
std::wctrans =&gt; cpp/string/wide/wctrans
std::wcstof =&gt; cpp/string/wide/wcstof
std::wcstod =&gt; cpp/string/wide/wcstof
std::wcstold =&gt; cpp/string/wide/wcstof
std::wcstol =&gt; cpp/string/wide/wcstol
std::wcstoll =&gt; cpp/string/wide/wcstol
std::wcstoul =&gt; cpp/string/wide/wcstoul
std::wcstoull =&gt; cpp/string/wide/wcstoul
std::wcstoimax =&gt; cpp/string/wide/wcstoimax
std::wcstoumax =&gt; cpp/string/wide/wcstoimax
std::wcscpy =&gt; cpp/string/wide/wcscpy
std::wcsncpy =&gt; cpp/string/wide/wcsncpy
std::wcscat =&gt; cpp/string/wide/wcscat
std::wcsncat =&gt; cpp/string/wide/wcsncat
std::wcsxfrm =&gt; cpp/string/wide/wcsxfrm
std::wcslen =&gt; cpp/string/wide/wcslen
std::wcscmp =&gt; cpp/string/wide/wcscmp
std::wcsncmp =&gt; cpp/string/wide/wcsncmp
std::wcscoll =&gt; cpp/string/wide/wcscoll
std::wcschr =&gt; cpp/string/wide/wcschr
std::wcsrchr =&gt; cpp/string/wide/wcsrchr
std::wcsspn =&gt; cpp/string/wide/wcsspn
std::wcscspn =&gt; cpp/string/wide/wcscspn
std::wcspbrk =&gt; cpp/string/wide/wcspbrk
std::wcsstr =&gt; cpp/string/wide/wcsstr
std::wcstok =&gt; cpp/string/wide/wcstok
std::wmemchr =&gt; cpp/string/wide/wmemchr
std::wmemcmp =&gt; cpp/string/wide/wmemcmp
std::wmemset =&gt; cpp/string/wide/wmemset
std::wmemcpy =&gt; cpp/string/wide/wmemcpy
std::wmemmove =&gt; cpp/string/wide/wmemmove
std::basic_string =&gt; cpp/string/basic_string
std::basic_string::npos =&gt; cpp/string/basic_string/npos
std::string =&gt; cpp/string/basic_string
std::string::npos =&gt; cpp/string/basic_string/npos
std::wstring =&gt; cpp/string/basic_string
std::wstring::npos =&gt; cpp/string/basic_string/npos
std::u16string =&gt; cpp/string/basic_string
std::u16string::npos =&gt; cpp/string/basic_string/npos
std::u32string =&gt; cpp/string/basic_string
std::u32string::npos =&gt; cpp/string/basic_string/npos
std::pmr::string =&gt; cpp/string/basic_string
std::pmr::string::npos =&gt; cpp/string/basic_string/npos
std::pmr::wstring =&gt; cpp/string/basic_string
std::pmr::wstring::npos =&gt; cpp/string/basic_string/npos
std::pmr::u16string =&gt; cpp/string/basic_string
std::pmr::u16string::npos =&gt; cpp/string/basic_string/npos
std::pmr::u32string =&gt; cpp/string/basic_string
std::pmr::u32string::npos =&gt; cpp/string/basic_string/npos
std::basic_string_view =&gt; cpp/string/basic_string_view
std::basic_string_view::npos =&gt; cpp/string/basic_string_view/npos
std::string_view =&gt; cpp/string/basic_string_view
std::string_view::npos =&gt; cpp/string/basic_string_view/npos
std::wstring_view =&gt; cpp/string/basic_string_view
std::wstring_view::npos =&gt; cpp/string/basic_string_view/npos
std::u16string_view =&gt; cpp/string/basic_string_view
std::u16string_view::npos =&gt; cpp/string/basic_string_view/npos
std::u32string_view =&gt; cpp/string/basic_string_view
std::u32string_view::npos =&gt; cpp/string/basic_string_view/npos
std::getline =&gt; cpp/string/basic_string/getline
std::stoi =&gt; cpp/string/basic_string/stol
std::stol =&gt; cpp/string/basic_string/stol
std::stoll =&gt; cpp/string/basic_string/stol
std::stoul =&gt; cpp/string/basic_string/stoul
std::stoull =&gt; cpp/string/basic_string/stoul
std::stof =&gt; cpp/string/basic_string/stof
std::stod =&gt; cpp/string/basic_string/stof
std::stold =&gt; cpp/string/basic_string/stof
std::to_string =&gt; cpp/string/basic_string/to_string
std::to_wstring =&gt; cpp/string/basic_string/to_wstring
std::char_traits =&gt; cpp/string/char_traits
std::array =&gt; cpp/container/array
std::vector =&gt; cpp/container/vector
std::pmr::vector =&gt; cpp/container/vector
std::deque =&gt; cpp/container/deque
std::pmr::deque =&gt; cpp/container/deque
std::forward_list =&gt; cpp/container/forward_list
std::pmr::forward_list =&gt; cpp/container/forward_list
std::list =&gt; cpp/container/list
std::pmr::list =&gt; cpp/container/list
std::set =&gt; cpp/container/set
std::pmr::set =&gt; cpp/container/set
std::multiset =&gt; cpp/container/multiset
std::pmr::multiset =&gt; cpp/container/multiset
std::map =&gt; cpp/container/map
std::map::value_compare =&gt; cpp/container/map/value_compare
std::pmr::map =&gt; cpp/container/map
std::pmr::map::value_compare =&gt; cpp/container/map/value_compare
std::multimap =&gt; cpp/container/multimap
std::multimap::value_compare =&gt; cpp/container/multimap/value_compare
std::pmr::multimap =&gt; cpp/container/multimap
std::pmr::multimap::value_compare =&gt; cpp/container/multimap/value_compare
std::unordered_set =&gt; cpp/container/unordered_set
std::pmr::unordered_set =&gt; cpp/container/unordered_set
std::unordered_multiset =&gt; cpp/container/unordered_multiset
std::pmr::unordered_multiset =&gt; cpp/container/unordered_multiset
std::unordered_map =&gt; cpp/container/unordered_map
std::pmr::unordered_map =&gt; cpp/container/unordered_map
std::unordered_multimap =&gt; cpp/container/unordered_multimap
std::pmr::unordered_multimap =&gt; cpp/container/unordered_multimap
std::stack =&gt; cpp/container/stack
std::queue =&gt; cpp/container/queue
std::priority_queue =&gt; cpp/container/priority_queue
std::labs =&gt; cpp/numeric/math/abs
std::llabs =&gt; cpp/numeric/math/abs
std::fabs =&gt; cpp/numeric/math/fabs
std::div =&gt; cpp/numeric/math/div
std::ldiv =&gt; cpp/numeric/math/div
std::lldiv =&gt; cpp/numeric/math/div
std::imaxdiv =&gt; cpp/numeric/math/div
std::div_t =&gt; cpp/numeric/math/div
std::ldiv_t =&gt; cpp/numeric/math/div
std::lldiv_t =&gt; cpp/numeric/math/div
std::imaxdiv_t =&gt; cpp/numeric/math/div
std::fmod =&gt; cpp/numeric/math/fmod
std::remainder =&gt; cpp/numeric/math/remainder
std::remquo =&gt; cpp/numeric/math/remquo
std::fma =&gt; cpp/numeric/math/fma
std::fmax =&gt; cpp/numeric/math/fmax
std::fmin =&gt; cpp/numeric/math/fmin
std::fdim =&gt; cpp/numeric/math/fdim
std::nan =&gt; cpp/numeric/math/nan
std::nanf =&gt; cpp/numeric/math/nan
std::nanl =&gt; cpp/numeric/math/nan
std::exp =&gt; cpp/numeric/math/exp
std::exp2 =&gt; cpp/numeric/math/exp2
std::expm1 =&gt; cpp/numeric/math/expm1
std::log =&gt; cpp/numeric/math/log
std::log10 =&gt; cpp/numeric/math/log10
std::log1p =&gt; cpp/numeric/math/log1p
std::ilogb =&gt; cpp/numeric/math/ilogb
std::logb =&gt; cpp/numeric/math/logb
std::sqrt =&gt; cpp/numeric/math/sqrt
std::cbrt =&gt; cpp/numeric/math/cbrt
std::hypot =&gt; cpp/numeric/math/hypot
std::pow =&gt; cpp/numeric/math/pow
std::sin =&gt; cpp/numeric/math/sin
std::cos =&gt; cpp/numeric/math/cos
std::tan =&gt; cpp/numeric/math/tan
std::asin =&gt; cpp/numeric/math/asin
std::acos =&gt; cpp/numeric/math/acos
std::atan =&gt; cpp/numeric/math/atan
std::atan2 =&gt; cpp/numeric/math/atan2
std::sinh =&gt; cpp/numeric/math/sinh
std::cosh =&gt; cpp/numeric/math/cosh
std::tanh =&gt; cpp/numeric/math/tanh
std::asinh =&gt; cpp/numeric/math/asinh
std::acosh =&gt; cpp/numeric/math/acosh
std::atanh =&gt; cpp/numeric/math/atanh
std::erf =&gt; cpp/numeric/math/erf
std::erfc =&gt; cpp/numeric/math/erfc
std::lgamma =&gt; cpp/numeric/math/lgamma
std::tgamma =&gt; cpp/numeric/math/tgamma
std::ceil =&gt; cpp/numeric/math/ceil
std::floor =&gt; cpp/numeric/math/floor
std::trunc =&gt; cpp/numeric/math/trunc
std::round =&gt; cpp/numeric/math/round
std::lround =&gt; cpp/numeric/math/round
std::llround =&gt; cpp/numeric/math/round
std::nearbyint =&gt; cpp/numeric/math/nearbyint
std::rint =&gt; cpp/numeric/math/rint
std::lrint =&gt; cpp/numeric/math/rint
std::llrint =&gt; cpp/numeric/math/rint
std::frexp =&gt; cpp/numeric/math/frexp
std::ldexp =&gt; cpp/numeric/math/ldexp
std::modf =&gt; cpp/numeric/math/modf
std::scalbn =&gt; cpp/numeric/math/scalbn
std::scalbln =&gt; cpp/numeric/math/scalbn
std::nextafter =&gt; cpp/numeric/math/nextafter
std::nexttoward =&gt; cpp/numeric/math/nextafter
std::copysign =&gt; cpp/numeric/math/copysign
std::fpclassify =&gt; cpp/numeric/math/fpclassify
std::isfinite =&gt; cpp/numeric/math/isfinite
std::isinf =&gt; cpp/numeric/math/isinf
std::isnan =&gt; cpp/numeric/math/isnan
std::isnormal =&gt; cpp/numeric/math/isnormal
std::signbit =&gt; cpp/numeric/math/signbit
HUGE_VAL =&gt; cpp/numeric/math/HUGE_VAL
HUGE_VALF =&gt; cpp/numeric/math/HUGE_VAL
HUGE_VALL =&gt; cpp/numeric/math/HUGE_VAL
INFINITY =&gt; cpp/numeric/math/INFINITY
NAN =&gt; cpp/numeric/math/NAN
math_errhandling =&gt; cpp/numeric/math/math_errhandling
MATH_ERRNO =&gt; cpp/numeric/math/math_errhandling
MATH_ERREXCEPT =&gt; cpp/numeric/math/math_errhandling
FP_INFINITE =&gt; cpp/numeric/math/FP_categories
FP_NAN =&gt; cpp/numeric/math/FP_categories
FP_NORMAL =&gt; cpp/numeric/math/FP_categories
FP_SUBNORMAL =&gt; cpp/numeric/math/FP_categories
FP_ZERO =&gt; cpp/numeric/math/FP_categories
std::assoc_laguerre =&gt; cpp/numeric/special_math/assoc_laguerre
std::assoc_laguerref =&gt; cpp/numeric/special_math/assoc_laguerre
std::assoc_laguerrel =&gt; cpp/numeric/special_math/assoc_laguerre
std::assoc_legendre =&gt; cpp/numeric/special_math/assoc_legendre
std::assoc_legendref =&gt; cpp/numeric/special_math/assoc_legendre
std::assoc_legendrel =&gt; cpp/numeric/special_math/assoc_legendre
std::beta =&gt; cpp/numeric/special_math/beta
std::betaf =&gt; cpp/numeric/special_math/beta
std::betal =&gt; cpp/numeric/special_math/beta
std::comp_ellint_1 =&gt; cpp/numeric/special_math/comp_ellint_1
std::comp_ellint_1f =&gt; cpp/numeric/special_math/comp_ellint_1
std::comp_ellint_1l =&gt; cpp/numeric/special_math/comp_ellint_1
std::comp_ellint_2 =&gt; cpp/numeric/special_math/comp_ellint_2
std::comp_ellint_2f =&gt; cpp/numeric/special_math/comp_ellint_2
std::comp_ellint_2l =&gt; cpp/numeric/special_math/comp_ellint_2
std::comp_ellint_3 =&gt; cpp/numeric/special_math/comp_ellint_3
std::comp_ellint_3f =&gt; cpp/numeric/special_math/comp_ellint_3
std::comp_ellint_3l =&gt; cpp/numeric/special_math/comp_ellint_3
std::cyl_bessel_i =&gt; cpp/numeric/special_math/cyl_bessel_i
std::cyl_bessel_if =&gt; cpp/numeric/special_math/cyl_bessel_i
std::cyl_bessel_il =&gt; cpp/numeric/special_math/cyl_bessel_i
std::cyl_bessel_j =&gt; cpp/numeric/special_math/cyl_bessel_j
std::cyl_bessel_jf =&gt; cpp/numeric/special_math/cyl_bessel_j
std::cyl_bessel_jl =&gt; cpp/numeric/special_math/cyl_bessel_j
std::cyl_bessel_k =&gt; cpp/numeric/special_math/cyl_bessel_k
std::cyl_bessel_kf =&gt; cpp/numeric/special_math/cyl_bessel_k
std::cyl_bessel_kl =&gt; cpp/numeric/special_math/cyl_bessel_k
std::cyl_neumann =&gt; cpp/numeric/special_math/cyl_neumann
std::cyl_neumannf =&gt; cpp/numeric/special_math/cyl_neumann
std::cyl_neumannl =&gt; cpp/numeric/special_math/cyl_neumann
std::ellint_1 =&gt; cpp/numeric/special_math/ellint_1
std::ellint_1f =&gt; cpp/numeric/special_math/ellint_1
std::ellint_1l =&gt; cpp/numeric/special_math/ellint_1
std::ellint_2 =&gt; cpp/numeric/special_math/ellint_2
std::ellint_2f =&gt; cpp/numeric/special_math/ellint_2
std::ellint_2l =&gt; cpp/numeric/special_math/ellint_2
std::ellint_3 =&gt; cpp/numeric/special_math/ellint_3
std::ellint_3f =&gt; cpp/numeric/special_math/ellint_3
std::ellint_3l =&gt; cpp/numeric/special_math/ellint_3
std::expint =&gt; cpp/numeric/special_math/expint
std::expintf =&gt; cpp/numeric/special_math/expint
std::expintl =&gt; cpp/numeric/special_math/expint
std::hermite =&gt; cpp/numeric/special_math/hermite
std::hermitef =&gt; cpp/numeric/special_math/hermite
std::hermitel =&gt; cpp/numeric/special_math/hermite
std::legendre =&gt; cpp/numeric/special_math/legendre
std::legendref =&gt; cpp/numeric/special_math/legendre
std::legendrel =&gt; cpp/numeric/special_math/legendre
std::laguerre =&gt; cpp/numeric/special_math/laguerre
std::laguerref =&gt; cpp/numeric/special_math/laguerre
std::laguerrel =&gt; cpp/numeric/special_math/laguerre
std::riemann_zeta =&gt; cpp/numeric/special_math/riemann_zeta
std::riemann_zetaf =&gt; cpp/numeric/special_math/riemann_zeta
std::riemann_zetal =&gt; cpp/numeric/special_math/riemann_zeta
std::sph_bessel =&gt; cpp/numeric/special_math/sph_bessel
std::sph_besself =&gt; cpp/numeric/special_math/sph_bessel
std::sph_bessell =&gt; cpp/numeric/special_math/sph_bessel
std::sph_legendre =&gt; cpp/numeric/special_math/sph_legendre
std::sph_legendref =&gt; cpp/numeric/special_math/sph_legendre
std::sph_legendrel =&gt; cpp/numeric/special_math/sph_legendre
std::sph_neumann =&gt; cpp/numeric/special_math/sph_neumann
std::sph_neumannf =&gt; cpp/numeric/special_math/sph_neumann
std::sph_neumannl =&gt; cpp/numeric/special_math/sph_neumann
std::feclearexcept =&gt; cpp/numeric/fenv/feclearexcept
std::fetestexcept =&gt; cpp/numeric/fenv/fetestexcept
std::feraiseexcept =&gt; cpp/numeric/fenv/feraiseexcept
std::fegetexceptflag =&gt; cpp/numeric/fenv/feexceptflag
std::fesetexceptflag =&gt; cpp/numeric/fenv/feexceptflag
std::fegetround =&gt; cpp/numeric/fenv/feround
std::fesetround =&gt; cpp/numeric/fenv/feround
std::fegetenv =&gt; cpp/numeric/fenv/feenv
std::fesetenv =&gt; cpp/numeric/fenv/feenv
std::feholdexcept =&gt; cpp/numeric/fenv/feholdexcept
std::feupdateenv =&gt; cpp/numeric/fenv/feupdateenv
FE_ALL_EXCEPT =&gt; cpp/numeric/fenv/FE_exceptions
FE_DIVBYZERO =&gt; cpp/numeric/fenv/FE_exceptions
FE_INEXACT =&gt; cpp/numeric/fenv/FE_exceptions
FE_INVALID =&gt; cpp/numeric/fenv/FE_exceptions
FE_OVERFLOW =&gt; cpp/numeric/fenv/FE_exceptions
FE_UNDERFLOW =&gt; cpp/numeric/fenv/FE_exceptions
FE_DOWNWARD =&gt; cpp/numeric/fenv/FE_round
FE_TONEAREST =&gt; cpp/numeric/fenv/FE_round
FE_TOWARDZERO =&gt; cpp/numeric/fenv/FE_round
FE_UPWARD =&gt; cpp/numeric/fenv/FE_round
FE_DFL_ENV =&gt; cpp/numeric/fenv/FE_DFL_ENV
std::complex =&gt; cpp/numeric/complex
std::valarray =&gt; cpp/numeric/valarray
std::slice =&gt; cpp/numeric/valarray/slice
std::gslice =&gt; cpp/numeric/valarray/gslice
std::slice_array =&gt; cpp/numeric/valarray/slice_array
std::gslice_array =&gt; cpp/numeric/valarray/gslice_array
std::mask_array =&gt; cpp/numeric/valarray/mask_array
std::indirect_array =&gt; cpp/numeric/valarray/indirect_array
std::linear_congruential_engine =&gt; cpp/numeric/random/linear_congruential_engine
std::mersenne_twister_engine =&gt; cpp/numeric/random/mersenne_twister_engine
std::subtract_with_carry_engine =&gt; cpp/numeric/random/subtract_with_carry_engine
std::discard_block_engine =&gt; cpp/numeric/random/discard_block_engine
std::independent_bits_engine =&gt; cpp/numeric/random/independent_bits_engine
std::shuffle_order_engine =&gt; cpp/numeric/random/shuffle_order_engine
std::random_device =&gt; cpp/numeric/random/random_device
std::minstd_rand0 =&gt; cpp/numeric/random/linear_congruential_engine
std::minstd_rand =&gt; cpp/numeric/random/linear_congruential_engine
std::mt19937 =&gt; cpp/numeric/random/mersenne_twister_engine
std::mt19937_64 =&gt; cpp/numeric/random/mersenne_twister_engine
std::ranlux24_base =&gt; cpp/numeric/random/subtract_with_carry_engine
std::ranlux48_base =&gt; cpp/numeric/random/subtract_with_carry_engine
std::ranlux24 =&gt; cpp/numeric/random/discard_block_engine
std::ranlux48 =&gt; cpp/numeric/random/discard_block_engine
std::knuth_b =&gt; cpp/numeric/random/shuffle_order_engine
std::default_random_engine =&gt; cpp/numeric/random
std::srand =&gt; cpp/numeric/random/srand
std::rand =&gt; cpp/numeric/random/rand
RAND_MAX =&gt; cpp/numeric/random/RAND_MAX
std::generate_canonical =&gt; cpp/numeric/random/generate_canonical
std::seed_seq =&gt; cpp/numeric/random/seed_seq
std::uniform_int_distribution =&gt; cpp/numeric/random/uniform_int_distribution
std::uniform_real_distribution =&gt; cpp/numeric/random/uniform_real_distribution
std::bernoulli_distribution =&gt; cpp/numeric/random/bernoulli_distribution
std::binomial_distribution =&gt; cpp/numeric/random/binomial_distribution
std::negative_binomial_distribution =&gt; cpp/numeric/random/negative_binomial_distribution
std::geometric_distribution =&gt; cpp/numeric/random/geometric_distribution
std::poisson_distribution =&gt; cpp/numeric/random/poisson_distribution
std::exponential_distribution =&gt; cpp/numeric/random/exponential_distribution
std::gamma_distribution =&gt; cpp/numeric/random/gamma_distribution
std::weibull_distribution =&gt; cpp/numeric/random/weibull_distribution
std::extreme_value_distribution =&gt; cpp/numeric/random/extreme_value_distribution
std::normal_distribution =&gt; cpp/numeric/random/normal_distribution
std::lognormal_distribution =&gt; cpp/numeric/random/lognormal_distribution
std::chi_squared_distribution =&gt; cpp/numeric/random/chi_squared_distribution
std::cauchy_distribution =&gt; cpp/numeric/random/cauchy_distribution
std::fisher_f_distribution =&gt; cpp/numeric/random/fisher_f_distribution
std::student_t_distribution =&gt; cpp/numeric/random/student_t_distribution
std::discrete_distribution =&gt; cpp/numeric/random/discrete_distribution
std::piecewise_constant_distribution =&gt; cpp/numeric/random/piecewise_constant_distribution
std::piecewise_linear_distribution =&gt; cpp/numeric/random/piecewise_linear_distribution
std::ratio =&gt; cpp/numeric/ratio/ratio
std::yocto =&gt; cpp/numeric/ratio/ratio
std::femto =&gt; cpp/numeric/ratio/ratio
std::pico =&gt; cpp/numeric/ratio/ratio
std::nano =&gt; cpp/numeric/ratio/ratio
std::micro =&gt; cpp/numeric/ratio/ratio
std::milli =&gt; cpp/numeric/ratio/ratio
std::centi =&gt; cpp/numeric/ratio/ratio
std::deci =&gt; cpp/numeric/ratio/ratio
std::deca =&gt; cpp/numeric/ratio/ratio
std::hecto =&gt; cpp/numeric/ratio/ratio
std::kilo =&gt; cpp/numeric/ratio/ratio
std::mega =&gt; cpp/numeric/ratio/ratio
std::giga =&gt; cpp/numeric/ratio/ratio
std::tera =&gt; cpp/numeric/ratio/ratio
std::peta =&gt; cpp/numeric/ratio/ratio
std::exa =&gt; cpp/numeric/ratio/ratio
std::zetta =&gt; cpp/numeric/ratio/ratio
std::yotta =&gt; cpp/numeric/ratio/ratio
std::ratio_add =&gt; cpp/numeric/ratio/ratio_add
std::ratio_subtract =&gt; cpp/numeric/ratio/ratio_subtract
std::ratio_multiply =&gt; cpp/numeric/ratio/ratio_multiply
std::ratio_divide =&gt; cpp/numeric/ratio/ratio_divide
std::ratio_equal =&gt; cpp/numeric/ratio/ratio_equal
std::ratio_equal_v =&gt; cpp/numeric/ratio/ratio_equal
std::ratio_not_equal =&gt; cpp/numeric/ratio/ratio_not_equal
std::ratio_not_equal_v =&gt; cpp/numeric/ratio/ratio_not_equal
std::ratio_less =&gt; cpp/numeric/ratio/ratio_less
std::ratio_less_v =&gt; cpp/numeric/ratio/ratio_less
std::ratio_less_equal =&gt; cpp/numeric/ratio/ratio_less_equal
std::ratio_less_equal_v =&gt; cpp/numeric/ratio/ratio_less_equal
std::ratio_greater =&gt; cpp/numeric/ratio/ratio_greater
std::ratio_greater_v =&gt; cpp/numeric/ratio/ratio_greater
std::ratio_greater_equal =&gt; cpp/numeric/ratio/ratio_greater_equal
std::ratio_greater_equal_v =&gt; cpp/numeric/ratio/ratio_greater_equal
std::execution::sequenced_policy =&gt; cpp/algorithm/execution_policy_tag_t
std::execution::parallel_policy =&gt; cpp/algorithm/execution_policy_tag_t
std::execution::parallel_unsequenced_policy =&gt; cpp/algorithm/execution_policy_tag_t
std::execution::seq =&gt; cpp/algorithm/execution_policy_tag
std::execution::par =&gt; cpp/algorithm/execution_policy_tag
std::execution::par_unseq =&gt; cpp/algorithm/execution_policy_tag
std::is_execution_policy =&gt; cpp/algorithm/is_execution_policy
std::is_execution_policy_v =&gt; cpp/algorithm/is_execution_policy
std::all_of =&gt; cpp/algorithm/all_any_none_of
std::any_of =&gt; cpp/algorithm/all_any_none_of
std::none_of =&gt; cpp/algorithm/all_any_none_of
std::for_each =&gt; cpp/algorithm/for_each
std::for_each_n =&gt; cpp/algorithm/for_each_n
std::count =&gt; cpp/algorithm/count
std::count_if =&gt; cpp/algorithm/count
std::mismatch =&gt; cpp/algorithm/mismatch
std::equal =&gt; cpp/algorithm/equal
std::find =&gt; cpp/algorithm/find
std::find_if =&gt; cpp/algorithm/find
std::find_if_not =&gt; cpp/algorithm/find
std::find_end =&gt; cpp/algorithm/find_end
std::find_first_of =&gt; cpp/algorithm/find_first_of
std::adjacent_find =&gt; cpp/algorithm/adjacent_find
std::search =&gt; cpp/algorithm/search
std::search_n =&gt; cpp/algorithm/search_n
std::copy =&gt; cpp/algorithm/copy
std::copy_if =&gt; cpp/algorithm/copy
std::copy_n =&gt; cpp/algorithm/copy_n
std::copy_backward =&gt; cpp/algorithm/copy_backward
std::move_backward =&gt; cpp/algorithm/move_backward
std::fill =&gt; cpp/algorithm/fill
std::fill_n =&gt; cpp/algorithm/fill_n
std::transform =&gt; cpp/algorithm/transform
std::generate =&gt; cpp/algorithm/generate
std::generate_n =&gt; cpp/algorithm/generate_n
std::remove_if =&gt; cpp/algorithm/remove
std::remove_copy =&gt; cpp/algorithm/remove_copy
std::remove_copy_if =&gt; cpp/algorithm/remove_copy
std::replace =&gt; cpp/algorithm/replace
std::replace_if =&gt; cpp/algorithm/replace
std::replace_copy =&gt; cpp/algorithm/replace_copy
std::replace_copy_if =&gt; cpp/algorithm/replace_copy
std::swap =&gt; cpp/algorithm/swap
std::swap_ranges =&gt; cpp/algorithm/swap_ranges
std::iter_swap =&gt; cpp/algorithm/iter_swap
std::reverse =&gt; cpp/algorithm/reverse
std::reverse_copy =&gt; cpp/algorithm/reverse_copy
std::rotate =&gt; cpp/algorithm/rotate
std::rotate_copy =&gt; cpp/algorithm/rotate_copy
std::random_shuffle =&gt; cpp/algorithm/random_shuffle
std::shuffle =&gt; cpp/algorithm/random_shuffle
std::sample =&gt; cpp/algorithm/sample
std::unique =&gt; cpp/algorithm/unique
std::unique_copy =&gt; cpp/algorithm/unique_copy
std::is_partitioned =&gt; cpp/algorithm/is_partitioned
std::partition =&gt; cpp/algorithm/partition
std::partition_copy =&gt; cpp/algorithm/partition_copy
std::stable_partition =&gt; cpp/algorithm/stable_partition
std::partition_point =&gt; cpp/algorithm/partition_point
std::is_sorted =&gt; cpp/algorithm/is_sorted
std::is_sorted_until =&gt; cpp/algorithm/is_sorted_until
std::sort =&gt; cpp/algorithm/sort
std::partial_sort =&gt; cpp/algorithm/partial_sort
std::partial_sort_copy =&gt; cpp/algorithm/partial_sort_copy
std::stable_sort =&gt; cpp/algorithm/stable_sort
std::nth_element =&gt; cpp/algorithm/nth_element
std::lower_bound =&gt; cpp/algorithm/lower_bound
std::upper_bound =&gt; cpp/algorithm/upper_bound
std::binary_search =&gt; cpp/algorithm/binary_search
std::equal_range =&gt; cpp/algorithm/equal_range
std::merge =&gt; cpp/algorithm/merge
std::inplace_merge =&gt; cpp/algorithm/inplace_merge
std::includes =&gt; cpp/algorithm/includes
std::set_difference =&gt; cpp/algorithm/set_difference
std::set_intersection =&gt; cpp/algorithm/set_intersection
std::set_symmetric_difference =&gt; cpp/algorithm/set_symmetric_difference
std::set_union =&gt; cpp/algorithm/set_union
std::is_heap =&gt; cpp/algorithm/is_heap
std::is_heap_until =&gt; cpp/algorithm/is_heap_until
std::make_heap =&gt; cpp/algorithm/make_heap
std::push_heap =&gt; cpp/algorithm/push_heap
std::pop_heap =&gt; cpp/algorithm/pop_heap
std::sort_heap =&gt; cpp/algorithm/sort_heap
std::max =&gt; cpp/algorithm/max
std::max_element =&gt; cpp/algorithm/max_element
std::min =&gt; cpp/algorithm/min
std::min_element =&gt; cpp/algorithm/min_element
std::minmax =&gt; cpp/algorithm/minmax
std::minmax_element =&gt; cpp/algorithm/minmax_element
std::clamp =&gt; cpp/algorithm/clamp
std::lexicographical_compare =&gt; cpp/algorithm/lexicographical_compare
std::is_permutation =&gt; cpp/algorithm/is_permutation
std::next_permutation =&gt; cpp/algorithm/next_permutation
std::prev_permutation =&gt; cpp/algorithm/prev_permutation
std::accumulate =&gt; cpp/algorithm/accumulate
std::inner_product =&gt; cpp/algorithm/inner_product
std::adjacent_difference =&gt; cpp/algorithm/adjacent_difference
std::partial_sum =&gt; cpp/algorithm/partial_sum
std::iota =&gt; cpp/algorithm/iota
std::reduce =&gt; cpp/algorithm/reduce
std::inclusive_scan =&gt; cpp/algorithm/inclusive_scan
std::exclusive_scan =&gt; cpp/algorithm/exclusive_scan
std::transform_reduce =&gt; cpp/algorithm/transform_reduce
std::transform_inclusive_scan =&gt; cpp/algorithm/transform_inclusive_scan
std::transform_exclusive_scan =&gt; cpp/algorithm/transform_exclusive_scan
std::gcd =&gt; cpp/numeric/gcd
std::lcm =&gt; cpp/numeric/lcm
std::qsort =&gt; cpp/algorithm/qsort
std::bsearch =&gt; cpp/algorithm/bsearch
std::basic_streambuf =&gt; cpp/io/basic_streambuf
std::basic_filebuf =&gt; cpp/io/basic_filebuf
std::basic_stringbuf =&gt; cpp/io/basic_stringbuf
std::ios_base =&gt; cpp/io/ios_base
std::ios_base::failure =&gt; cpp/io/ios_base/failure
std::ios_base::openmode =&gt; cpp/io/ios_base/openmode
std::ios_base::app =&gt; cpp/io/ios_base/openmode
std::ios_base::binary =&gt; cpp/io/ios_base/openmode
std::ios_base::in =&gt; cpp/io/ios_base/openmode
std::ios_base::out =&gt; cpp/io/ios_base/openmode
std::ios_base::trunc =&gt; cpp/io/ios_base/openmode
std::ios_base::ate =&gt; cpp/io/ios_base/openmode
std::ios_base::fmtflags =&gt; cpp/io/ios_base/fmtflags
std::ios_base::dec =&gt; cpp/io/ios_base/fmtflags
std::ios_base::oct =&gt; cpp/io/ios_base/fmtflags
std::ios_base::hex =&gt; cpp/io/ios_base/fmtflags
std::ios_base::basefield =&gt; cpp/io/ios_base/fmtflags
std::ios_base::left =&gt; cpp/io/ios_base/fmtflags
std::ios_base::right =&gt; cpp/io/ios_base/fmtflags
std::ios_base::internal =&gt; cpp/io/ios_base/fmtflags
std::ios_base::adjustfield =&gt; cpp/io/ios_base/fmtflags
std::ios_base::scientific =&gt; cpp/io/ios_base/fmtflags
std::ios_base::fixed =&gt; cpp/io/ios_base/fmtflags
std::ios_base::floatfield =&gt; cpp/io/ios_base/fmtflags
std::ios_base::boolalpha =&gt; cpp/io/ios_base/fmtflags
std::ios_base::showbase =&gt; cpp/io/ios_base/fmtflags
std::ios_base::showpoint =&gt; cpp/io/ios_base/fmtflags
std::ios_base::showpos =&gt; cpp/io/ios_base/fmtflags
std::ios_base::skipws =&gt; cpp/io/ios_base/fmtflags
std::ios_base::unitbuf =&gt; cpp/io/ios_base/fmtflags
std::ios_base::uppercase =&gt; cpp/io/ios_base/fmtflags
std::ios_base::iostate =&gt; cpp/io/ios_base/iostate
std::ios_base::goodbit =&gt; cpp/io/ios_base/iostate
std::ios_base::badbit =&gt; cpp/io/ios_base/iostate
std::ios_base::failbit =&gt; cpp/io/ios_base/iostate
std::ios_base::eofbit =&gt; cpp/io/ios_base/iostate
std::ios_base::seekdir =&gt; cpp/io/ios_base/seekdir
std::ios_base::beg =&gt; cpp/io/ios_base/seekdir
std::ios_base::cur =&gt; cpp/io/ios_base/seekdir
std::ios_base::end =&gt; cpp/io/ios_base/seekdir
std::ios_base::event =&gt; cpp/io/ios_base/event
std::ios_base::erase_event =&gt; cpp/io/ios_base/event
std::ios_base::imbue_event =&gt; cpp/io/ios_base/event
std::ios_base::copyfmt_event =&gt; cpp/io/ios_base/event
std::ios_base::event_callback =&gt; cpp/io/ios_base/event_callback
std::ios_base::Init =&gt; cpp/io/ios_base/Init
std::basic_ios =&gt; cpp/io/basic_ios
std::basic_istream =&gt; cpp/io/basic_istream
std::basic_istream::sentry =&gt; cpp/io/basic_istream/sentry
std::basic_ostream =&gt; cpp/io/basic_ostream
std::basic_ostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::basic_iostream =&gt; cpp/io/basic_iostream
std::basic_ifstream =&gt; cpp/io/basic_ifstream
std::basic_ofstream =&gt; cpp/io/basic_ofstream
std::basic_fstream =&gt; cpp/io/basic_fstream
std::basic_istringstream =&gt; cpp/io/basic_istringstream
std::basic_ostringstream =&gt; cpp/io/basic_ostringstream
std::basic_stringstream =&gt; cpp/io/basic_stringstream
std::streambuf =&gt; cpp/io/basic_streambuf
std::filebuf =&gt; cpp/io/basic_filebuf
std::stringbuf =&gt; cpp/io/basic_stringbuf
std::istream =&gt; cpp/io/basic_istream
std::istream::sentry =&gt; cpp/io/basic_istream/sentry
std::ostream =&gt; cpp/io/basic_ostream
std::ostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::iostream =&gt; cpp/io/basic_iostream
std::ifstream =&gt; cpp/io/basic_ifstream
std::ofstream =&gt; cpp/io/basic_ofstream
std::fstream =&gt; cpp/io/basic_fstream
std::istringstream =&gt; cpp/io/basic_istringstream
std::ostringstream =&gt; cpp/io/basic_ostringstream
std::stringstream =&gt; cpp/io/basic_stringstream
std::wstreambuf =&gt; cpp/io/basic_streambuf
std::wfilebuf =&gt; cpp/io/basic_filebuf
std::wstringbuf =&gt; cpp/io/basic_stringbuf
std::wistream =&gt; cpp/io/basic_istream
std::wistream::sentry =&gt; cpp/io/basic_istream/sentry
std::wostream =&gt; cpp/io/basic_ostream
std::wostream::sentry =&gt; cpp/io/basic_ostream/sentry
std::wiostream =&gt; cpp/io/basic_iostream
std::wifstream =&gt; cpp/io/basic_ifstream
std::wofstream =&gt; cpp/io/basic_ofstream
std::wfstream =&gt; cpp/io/basic_fstream
std::wistringstream =&gt; cpp/io/basic_istringstream
std::wostringstream =&gt; cpp/io/basic_ostringstream
std::wstringstream =&gt; cpp/io/basic_stringstream
std::strstreambuf =&gt; cpp/io/strstreambuf
std::istrstream =&gt; cpp/io/istrstream
std::ostrstream =&gt; cpp/io/ostrstream
std::strstream =&gt; cpp/io/strstream
std::cin =&gt; cpp/io/cin
std::wcin =&gt; cpp/io/cin
std::cout =&gt; cpp/io/cout
std::wcout =&gt; cpp/io/cout
std::cerr =&gt; cpp/io/cerr
std::wcerr =&gt; cpp/io/cerr
std::clog =&gt; cpp/io/clog
std::wclog =&gt; cpp/io/clog
std::boolalpha =&gt; cpp/io/manip/boolalpha
std::noboolalpha =&gt; cpp/io/manip/boolalpha
std::showbase =&gt; cpp/io/manip/showbase
std::noshowbase =&gt; cpp/io/manip/showbase
std::showpoint =&gt; cpp/io/manip/showpoint
std::noshowpoint =&gt; cpp/io/manip/showpoint
std::showpos =&gt; cpp/io/manip/showpos
std::noshowpos =&gt; cpp/io/manip/showpos
std::skipws =&gt; cpp/io/manip/skipws
std::noskipws =&gt; cpp/io/manip/skipws
std::uppercase =&gt; cpp/io/manip/uppercase
std::nouppercase =&gt; cpp/io/manip/uppercase
std::unitbuf =&gt; cpp/io/manip/unitbuf
std::nounitbuf =&gt; cpp/io/manip/unitbuf
std::internal =&gt; cpp/io/manip/left
std::left =&gt; cpp/io/manip/left
std::right =&gt; cpp/io/manip/left
std::dec =&gt; cpp/io/manip/hex
std::hex =&gt; cpp/io/manip/hex
std::oct =&gt; cpp/io/manip/hex
std::fixed =&gt; cpp/io/manip/fixed
std::scientific =&gt; cpp/io/manip/fixed
std::hexfloat =&gt; cpp/io/manip/fixed
std::defaultfloat =&gt; cpp/io/manip/fixed
std::ws =&gt; cpp/io/manip/ws
std::ends =&gt; cpp/io/manip/ends
std::flush =&gt; cpp/io/manip/flush
std::endl =&gt; cpp/io/manip/endl
std::resetiosflags =&gt; cpp/io/manip/resetiosflags
std::setiosflags =&gt; cpp/io/manip/setiosflags
std::setbase =&gt; cpp/io/manip/setbase
std::setfill =&gt; cpp/io/manip/setfill
std::setprecision =&gt; cpp/io/manip/setprecision
std::setw =&gt; cpp/io/manip/setw
std::get_money =&gt; cpp/io/manip/get_money
std::put_money =&gt; cpp/io/manip/put_money
std::get_time =&gt; cpp/io/manip/get_time
std::put_time =&gt; cpp/io/manip/put_time
std::quoted =&gt; cpp/io/manip/quoted
std::streamoff =&gt; cpp/io/streamoff
std::streamsize =&gt; cpp/io/streamsize
std::fpos =&gt; cpp/io/fpos
std::streampos =&gt; cpp/io/fpos
std::u16streampos =&gt; cpp/io/fpos
std::u32streampos =&gt; cpp/io/fpos
std::wstreampos =&gt; cpp/io/fpos
std::io_errc =&gt; cpp/io/io_errc
std::io_errc::stream =&gt; cpp/io/io_errc
std::iostream_category =&gt; cpp/io/iostream_category
std::fopen =&gt; cpp/io/c/fopen
std::freopen =&gt; cpp/io/c/freopen
std::fflush =&gt; cpp/io/c/fflush
std::fclose =&gt; cpp/io/c/fclose
std::setbuf =&gt; cpp/io/c/setbuf
std::setvbuf =&gt; cpp/io/c/setvbuf
std::fread =&gt; cpp/io/c/fread
std::fwrite =&gt; cpp/io/c/fwrite
std::fgetc =&gt; cpp/io/c/fgetc
std::getc =&gt; cpp/io/c/fgetc
std::fgets =&gt; cpp/io/c/fgets
std::fputc =&gt; cpp/io/c/fputc
std::putc =&gt; cpp/io/c/fputc
std::fputs =&gt; cpp/io/c/fputs
std::getchar =&gt; cpp/io/c/getchar
std::gets =&gt; cpp/io/c/gets
std::putchar =&gt; cpp/io/c/putchar
std::puts =&gt; cpp/io/c/puts
std::ungetc =&gt; cpp/io/c/ungetc
std::fgetwc =&gt; cpp/io/c/fgetwc
std::fgetws =&gt; cpp/io/c/fgetws
std::fputwc =&gt; cpp/io/c/fputwc
std::fputws =&gt; cpp/io/c/fputws
std::getwchar =&gt; cpp/io/c/getwchar
std::putwchar =&gt; cpp/io/c/putwchar
std::ungetwc =&gt; cpp/io/c/ungetwc
std::scanf =&gt; cpp/io/c/fscanf
std::fscanf =&gt; cpp/io/c/fscanf
std::sscanf =&gt; cpp/io/c/fscanf
std::vscanf =&gt; cpp/io/c/vfscanf
std::vfscanf =&gt; cpp/io/c/vfscanf
std::vsscanf =&gt; cpp/io/c/vfscanf
std::printf =&gt; cpp/io/c/fprintf
std::fprintf =&gt; cpp/io/c/fprintf
std::sprintf =&gt; cpp/io/c/fprintf
std::snprintf =&gt; cpp/io/c/fprintf
std::vprintf =&gt; cpp/io/c/vfprintf
std::vfprintf =&gt; cpp/io/c/vfprintf
std::vsprintf =&gt; cpp/io/c/vfprintf
std::vsnprintf =&gt; cpp/io/c/vfprintf
std::wscanf =&gt; cpp/io/c/fwscanf
std::fwscanf =&gt; cpp/io/c/fwscanf
std::swscanf =&gt; cpp/io/c/fwscanf
std::vwscanf =&gt; cpp/io/c/vfwscanf
std::vfwscanf =&gt; cpp/io/c/vfwscanf
std::vswscanf =&gt; cpp/io/c/vfwscanf
std::wprintf =&gt; cpp/io/c/fwprintf
std::fwprintf =&gt; cpp/io/c/fwprintf
std::swprintf =&gt; cpp/io/c/fwprintf
std::vwprintf =&gt; cpp/io/c/vfwprintf
std::vfwprintf =&gt; cpp/io/c/vfwprintf
std::vswprintf =&gt; cpp/io/c/vfwprintf
std::ftell =&gt; cpp/io/c/ftell
std::fgetpos =&gt; cpp/io/c/fgetpos
std::fseek =&gt; cpp/io/c/fseek
std::fsetpos =&gt; cpp/io/c/fsetpos
std::rewind =&gt; cpp/io/c/rewind
std::clearerr =&gt; cpp/io/c/clearerr
std::feof =&gt; cpp/io/c/feof
std::ferror =&gt; cpp/io/c/ferror
std::perror =&gt; cpp/io/c/perror
std::rename =&gt; cpp/io/c/rename
std::tmpfile =&gt; cpp/io/c/tmpfile
std::tmpnam =&gt; cpp/io/c/tmpnam
std::FILE =&gt; cpp/io/c
std::fpos_t =&gt; cpp/io/c
stdin =&gt; cpp/io/c
stdout =&gt; cpp/io/c
stderr =&gt; cpp/io/c
EOF =&gt; cpp/io/c
FOPEN_MAX =&gt; cpp/io/c
FILENAME_MAX =&gt; cpp/io/c
BUFSIZ =&gt; cpp/io/c
_IOFBF =&gt; cpp/io/c
_IOLBF =&gt; cpp/io/c
_IONBF =&gt; cpp/io/c
SEEK_SET =&gt; cpp/io/c
SEEK_CUR =&gt; cpp/io/c
SEEK_END =&gt; cpp/io/c
TMP_MAX =&gt; cpp/io/c
L_tmpnam =&gt; cpp/io/c
std::locale =&gt; cpp/locale/locale
std::locale::id =&gt; cpp/locale/locale/id
std::locale::facet =&gt; cpp/locale/locale/facet
std::use_facet =&gt; cpp/locale/use_facet
std::has_facet =&gt; cpp/locale/has_facet
std::wstring_convert =&gt; cpp/locale/wstring_convert
std::wbuffer_convert =&gt; cpp/locale/wbuffer_convert
std::ctype_base =&gt; cpp/locale/ctype_base
std::ctype_base::mask =&gt; cpp/locale/ctype_base
std::ctype_base::space =&gt; cpp/locale/ctype_base
std::ctype_base::print =&gt; cpp/locale/ctype_base
std::ctype_base::cntrl =&gt; cpp/locale/ctype_base
std::ctype_base::upper =&gt; cpp/locale/ctype_base
std::ctype_base::lower =&gt; cpp/locale/ctype_base
std::ctype_base::alpha =&gt; cpp/locale/ctype_base
std::ctype_base::digit =&gt; cpp/locale/ctype_base
std::ctype_base::punct =&gt; cpp/locale/ctype_base
std::ctype_base::xdigit =&gt; cpp/locale/ctype_base
std::ctype_base::blank =&gt; cpp/locale/ctype_base
std::ctype_base::alnum =&gt; cpp/locale/ctype_base
std::ctype_base::graph =&gt; cpp/locale/ctype_base
std::codecvt_base =&gt; cpp/locale/codecvt_base
std::codecvt_base::result =&gt; cpp/locale/codecvt_base
std::codecvt_base::ok =&gt; cpp/locale/codecvt_base
std::codecvt_base::partial =&gt; cpp/locale/codecvt_base
std::codecvt_base::error =&gt; cpp/locale/codecvt_base
std::codecvt_base::noconv =&gt; cpp/locale/codecvt_base
std::messages_base =&gt; cpp/locale/messages_base
std::messages_base::catalog =&gt; cpp/locale/messages_base
std::time_base =&gt; cpp/locale/time_base
std::time_base::dateorder =&gt; cpp/locale/time_base
std::time_base::no_order =&gt; cpp/locale/time_base
std::time_base::dmy =&gt; cpp/locale/time_base
std::time_base::mdy =&gt; cpp/locale/time_base
std::time_base::ymd =&gt; cpp/locale/time_base
std::time_base::ydm =&gt; cpp/locale/time_base
std::money_base =&gt; cpp/locale/money_base
std::money_base::part =&gt; cpp/locale/money_base
std::money_base::none =&gt; cpp/locale/money_base
std::money_base::space =&gt; cpp/locale/money_base
std::money_base::symbol =&gt; cpp/locale/money_base
std::money_base::sign =&gt; cpp/locale/money_base
std::money_base::value =&gt; cpp/locale/money_base
std::money_base::pattern =&gt; cpp/locale/money_base
std::ctype =&gt; cpp/locale/ctype
std::codecvt =&gt; cpp/locale/codecvt
std::codecvt::intern_type =&gt; cpp/locale/codecvt
std::codecvt::extern_type =&gt; cpp/locale/codecvt
std::codecvt::state_type =&gt; cpp/locale/codecvt
std::collate =&gt; cpp/locale/collate
std::collate::char_type =&gt; cpp/locale/collate
std::collate::string_type =&gt; cpp/locale/collate
std::messages =&gt; cpp/locale/messages
std::messages::char_type =&gt; cpp/locale/messages
std::messages::string_type =&gt; cpp/locale/messages
std::time_get =&gt; cpp/locale/time_get
std::time_get::char_type =&gt; cpp/locale/time_get
std::time_get::iter_type =&gt; cpp/locale/time_get
std::time_put =&gt; cpp/locale/time_put
std::time_put::char_type =&gt; cpp/locale/time_put
std::time_put::iter_type =&gt; cpp/locale/time_put
std::num_get =&gt; cpp/locale/num_get
std::num_get::char_type =&gt; cpp/locale/num_get
std::num_get::iter_type =&gt; cpp/locale/num_get
std::num_put =&gt; cpp/locale/num_put
std::num_put::char_type =&gt; cpp/locale/num_put
std::num_put::iter_type =&gt; cpp/locale/num_put
std::numpunct =&gt; cpp/locale/numpunct
std::numpunct::char_type =&gt; cpp/locale/numpunct
std::numpunct::string_type =&gt; cpp/locale/numpunct
std::money_get =&gt; cpp/locale/money_get
std::money_get::char_type =&gt; cpp/locale/money_get
std::money_get::iter_type =&gt; cpp/locale/money_get
std::money_get::string_type =&gt; cpp/locale/money_get
std::money_put =&gt; cpp/locale/money_put
std::money_put::char_type =&gt; cpp/locale/money_put
std::money_put::iter_type =&gt; cpp/locale/money_put
std::money_put::string_type =&gt; cpp/locale/money_put
std::moneypunct =&gt; cpp/locale/moneypunct
std::moneypunct::char_type =&gt; cpp/locale/moneypunct
std::moneypunct::string_type =&gt; cpp/locale/moneypunct
std::ctype_byname =&gt; cpp/locale/ctype_byname
std::codecvt_byname =&gt; cpp/locale/codecvt_byname
std::messages_byname =&gt; cpp/locale/messages_byname
std::collate_byname =&gt; cpp/locale/collate_byname
std::time_get_byname =&gt; cpp/locale/time_get_byname
std::time_put_byname =&gt; cpp/locale/time_put_byname
std::numpunct_byname =&gt; cpp/locale/numpunct_byname
std::moneypunct_byname =&gt; cpp/locale/moneypunct_byname
std::codecvt_utf8 =&gt; cpp/locale/codecvt_utf8
std::codecvt_utf16 =&gt; cpp/locale/codecvt_utf16
std::codecvt_utf8_utf16 =&gt; cpp/locale/codecvt_utf8_utf16
std::codecvt_mode =&gt; cpp/locale/codecvt_mode
std::consume_header =&gt; cpp/locale/codecvt_mode
std::generate_header =&gt; cpp/locale/codecvt_mode
std::little_endian =&gt; cpp/locale/codecvt_mode
std::setlocale =&gt; cpp/locale/setlocale
std::localeconv =&gt; cpp/locale/localeconv
std::lconv =&gt; cpp/locale/lconv
LC_ALL =&gt; cpp/locale/LC_categories
LC_COLLATE =&gt; cpp/locale/LC_categories
LC_CTYPE =&gt; cpp/locale/LC_categories
LC_MONETARY =&gt; cpp/locale/LC_categories
LC_NUMERIC =&gt; cpp/locale/LC_categories
LC_TIME =&gt; cpp/locale/LC_categories
std::basic_regex =&gt; cpp/regex/basic_regex
std::regex =&gt; cpp/regex/basic_regex
std::wregex =&gt; cpp/regex/basic_regex
std::sub_match =&gt; cpp/regex/sub_match
std::csub_match =&gt; cpp/regex/sub_match
std::wcsub_match =&gt; cpp/regex/sub_match
std::ssub_match =&gt; cpp/regex/sub_match
std::wssub_match =&gt; cpp/regex/sub_match
std::match_results =&gt; cpp/regex/match_results
std::cmatch =&gt; cpp/regex/match_results
std::wcmatch =&gt; cpp/regex/match_results
std::smatch =&gt; cpp/regex/match_results
std::wsmatch =&gt; cpp/regex/match_results
std::regex_match =&gt; cpp/regex/regex_match
std::regex_search =&gt; cpp/regex/regex_search
std::regex_replace =&gt; cpp/regex/regex_replace
std::regex_iterator =&gt; cpp/regex/regex_iterator
std::cregex_iterator =&gt; cpp/regex/regex_iterator
std::wcregex_iterator =&gt; cpp/regex/regex_iterator
std::sregex_iterator =&gt; cpp/regex/regex_iterator
std::wsregex_iterator =&gt; cpp/regex/regex_iterator
std::regex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::cregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::wcregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::sregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::wsregex_token_iterator =&gt; cpp/regex/regex_token_iterator
std::regex_error =&gt; cpp/regex/regex_error
std::regex_traits =&gt; cpp/regex/regex_traits
std::regex_constants::syntax_option_type =&gt; cpp/regex/syntax_option_type
std::regex_constants::icase =&gt; cpp/regex/syntax_option_type
std::regex_constants::nosubs =&gt; cpp/regex/syntax_option_type
std::regex_constants::optimize =&gt; cpp/regex/syntax_option_type
std::regex_constants::collate =&gt; cpp/regex/syntax_option_type
std::regex_constants::ECMAScript =&gt; cpp/regex/syntax_option_type
std::regex_constants::basic =&gt; cpp/regex/syntax_option_type
std::regex_constants::extended =&gt; cpp/regex/syntax_option_type
std::regex_constants::awk =&gt; cpp/regex/syntax_option_type
std::regex_constants::grep =&gt; cpp/regex/syntax_option_type
std::regex_constants::egrep =&gt; cpp/regex/syntax_option_type
std::regex_constants::match_flag_type =&gt; cpp/regex/match_flag_type
std::regex_constants::match_default =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_bol =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_eol =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_bow =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_eow =&gt; cpp/regex/match_flag_type
std::regex_constants::match_any =&gt; cpp/regex/match_flag_type
std::regex_constants::match_not_null =&gt; cpp/regex/match_flag_type
std::regex_constants::match_continuous =&gt; cpp/regex/match_flag_type
std::regex_constants::match_prev_avail =&gt; cpp/regex/match_flag_type
std::regex_constants::format_default =&gt; cpp/regex/match_flag_type
std::regex_constants::format_sed =&gt; cpp/regex/match_flag_type
std::regex_constants::format_no_copy =&gt; cpp/regex/match_flag_type
std::regex_constants::format_first_only =&gt; cpp/regex/match_flag_type
std::regex_constants::error_type =&gt; cpp/regex/error_type
std::regex_constants::error_collate =&gt; cpp/regex/error_type
std::regex_constants::error_ctype =&gt; cpp/regex/error_type
std::regex_constants::error_escape =&gt; cpp/regex/error_type
std::regex_constants::error_backref =&gt; cpp/regex/error_type
std::regex_constants::error_brack =&gt; cpp/regex/error_type
std::regex_constants::error_paren =&gt; cpp/regex/error_type
std::regex_constants::error_brace =&gt; cpp/regex/error_type
std::regex_constants::error_badbrace =&gt; cpp/regex/error_type
std::regex_constants::error_range =&gt; cpp/regex/error_type
std::regex_constants::error_space =&gt; cpp/regex/error_type
std::regex_constants::error_badrepeat =&gt; cpp/regex/error_type
std::regex_constants::error_complexity =&gt; cpp/regex/error_type
std::regex_constants::error_stack =&gt; cpp/regex/error_type
std::atomic =&gt; cpp/atomic/atomic
std::atomic_is_lock_free =&gt; cpp/atomic/atomic_is_lock_free
std::atomic_store =&gt; cpp/atomic/atomic_store
std::atomic_store_explicit =&gt; cpp/atomic/atomic_store
std::atomic_load =&gt; cpp/atomic/atomic_load
std::atomic_load_explicit =&gt; cpp/atomic/atomic_load
std::atomic_exchange =&gt; cpp/atomic/atomic_exchange
std::atomic_exchange_explicit =&gt; cpp/atomic/atomic_exchange
std::atomic_compare_exchange_weak =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_compare_exchange_weak_explicit =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_compare_exchange_strong =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_compare_exchange_strong_explicit =&gt; cpp/atomic/atomic_compare_exchange
std::atomic_fetch_add =&gt; cpp/atomic/atomic_fetch_add
std::atomic_fetch_add_explicit =&gt; cpp/atomic/atomic_fetch_add
std::atomic_fetch_sub =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_sub_explicit =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_and =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_and_explicit =&gt; cpp/atomic/atomic_fetch_sub
std::atomic_fetch_or =&gt; cpp/atomic/atomic_fetch_or
std::atomic_fetch_or_explicit =&gt; cpp/atomic/atomic_fetch_or
std::atomic_fetch_xor =&gt; cpp/atomic/atomic_fetch_xor
std::atomic_fetch_xor_explicit =&gt; cpp/atomic/atomic_fetch_xor
std::atomic_flag =&gt; cpp/atomic/atomic_flag
std::atomic_init =&gt; cpp/atomic/atomic_init
ATOMIC_VAR_INIT =&gt; cpp/atomic/ATOMIC_VAR_INIT
ATOMIC_FLAG_INIT =&gt; cpp/atomic/ATOMIC_FLAG_INIT
std::memory_order =&gt; cpp/atomic/memory_order
std::memory_order_relaxed =&gt; cpp/atomic/memory_order
std::memory_order_consume =&gt; cpp/atomic/memory_order
std::memory_order_acquire =&gt; cpp/atomic/memory_order
std::memory_order_release =&gt; cpp/atomic/memory_order
std::memory_order_acq_rel =&gt; cpp/atomic/memory_order
std::memory_order_seq_cst =&gt; cpp/atomic/memory_order
std::kill_dependency =&gt; cpp/atomic/kill_dependency
std::atomic_thread_fence =&gt; cpp/atomic/atomic_thread_fence
std::atomic_signal_fence =&gt; cpp/atomic/atomic_signal_fence
std::atomic_bool =&gt; cpp/atomic/atomic
std::atomic_schar =&gt; cpp/atomic/atomic
std::atomic_uchar =&gt; cpp/atomic/atomic
std::atomic_short =&gt; cpp/atomic/atomic
std::atomic_ushort =&gt; cpp/atomic/atomic
std::atomic_int =&gt; cpp/atomic/atomic
std::atomic_uint =&gt; cpp/atomic/atomic
std::atomic_long =&gt; cpp/atomic/atomic
std::atomic_ulong =&gt; cpp/atomic/atomic
std::atomic_llong =&gt; cpp/atomic/atomic
std::atomic_ullong =&gt; cpp/atomic/atomic
std::atomic_char16_t =&gt; cpp/atomic/atomic
std::atomic_char32_t =&gt; cpp/atomic/atomic
std::atomic_wchar_t =&gt; cpp/atomic/atomic
std::atomic_int8_t =&gt; cpp/atomic/atomic
std::atomic_uint8_t =&gt; cpp/atomic/atomic
std::atomic_int16_t =&gt; cpp/atomic/atomic
std::atomic_uint16_t =&gt; cpp/atomic/atomic
std::atomic_int32_t =&gt; cpp/atomic/atomic
std::atomic_uint32_t =&gt; cpp/atomic/atomic
std::atomic_int64_t =&gt; cpp/atomic/atomic
std::atomic_uint64_t =&gt; cpp/atomic/atomic
std::atomic_int_least8_t =&gt; cpp/atomic/atomic
std::atomic_uint_least8_t =&gt; cpp/atomic/atomic
std::atomic_int_least16_t =&gt; cpp/atomic/atomic
std::atomic_uint_least16_t =&gt; cpp/atomic/atomic
std::atomic_int_least32_t =&gt; cpp/atomic/atomic
std::atomic_uint_least32_t =&gt; cpp/atomic/atomic
std::atomic_int_least64_t =&gt; cpp/atomic/atomic
std::atomic_uint_least64_t =&gt; cpp/atomic/atomic
std::atomic_int_fast8_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast8_t =&gt; cpp/atomic/atomic
std::atomic_int_fast16_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast16_t =&gt; cpp/atomic/atomic
std::atomic_int_fast32_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast32_t =&gt; cpp/atomic/atomic
std::atomic_int_fast64_t =&gt; cpp/atomic/atomic
std::atomic_uint_fast64_t =&gt; cpp/atomic/atomic
std::atomic_intptr_t =&gt; cpp/atomic/atomic
std::atomic_uintptr_t =&gt; cpp/atomic/atomic
std::atomic_size_t =&gt; cpp/atomic/atomic
std::atomic_ptrdiff_t =&gt; cpp/atomic/atomic
std::atomic_intmax_t =&gt; cpp/atomic/atomic
std::atomic_uintmax_t =&gt; cpp/atomic/atomic
std::thread =&gt; cpp/thread/thread
std::thread::id =&gt; cpp/thread/thread/id
std::this_thread::get_id =&gt; cpp/thread/get_id
std::this_thread::sleep_for =&gt; cpp/thread/sleep_for
std::this_thread::sleep_until =&gt; cpp/thread/sleep_until
std::this_thread::yield =&gt; cpp/thread/yield
std::hardware_constructive_interference_size =&gt; cpp/thread/hardware_destructive_interference_size
std::hardware_destructive_interference_size =&gt; cpp/thread/hardware_destructive_interference_size
std::mutex =&gt; cpp/thread/mutex
std::recursive_mutex =&gt; cpp/thread/recursive_mutex
std::timed_mutex =&gt; cpp/thread/timed_mutex
std::recursive_timed_mutex =&gt; cpp/thread/recursive_timed_mutex
std::shared_timed_mutex =&gt; cpp/thread/shared_timed_mutex
std::shared_mutex =&gt; cpp/thread/shared_mutex
std::defer_lock_t =&gt; cpp/thread/lock_tag_t
std::try_to_lock_t =&gt; cpp/thread/lock_tag_t
std::adopt_lock_t =&gt; cpp/thread/lock_tag_t
std::defer_lock =&gt; cpp/thread/lock_tag
std::try_to_lock =&gt; cpp/thread/lock_tag
std::adopt_lock =&gt; cpp/thread/lock_tag
std::lock_guard =&gt; cpp/thread/lock_guard
std::unique_lock =&gt; cpp/thread/unique_lock
std::shared_lock =&gt; cpp/thread/shared_lock
std::lock =&gt; cpp/thread/lock
std::try_lock =&gt; cpp/thread/try_lock
std::condition_variable =&gt; cpp/thread/condition_variable
std::condition_variable_any =&gt; cpp/thread/condition_variable_any
std::notify_all_at_thread_exit =&gt; cpp/thread/notify_all_at_thread_exit
std::once_flag =&gt; cpp/thread/once_flag
std::call_once =&gt; cpp/thread/call_once
std::cv_status =&gt; cpp/thread/cv_status
std::cv_status::no_timeout =&gt; cpp/thread/cv_status
std::cv_status::timeout =&gt; cpp/thread/cv_status
std::promise =&gt; cpp/thread/promise
std::future =&gt; cpp/thread/future
std::shared_future =&gt; cpp/thread/shared_future
std::future_category =&gt; cpp/thread/future/future_category
std::packaged_task =&gt; cpp/thread/packaged_task
std::async =&gt; cpp/thread/async
std::launch =&gt; cpp/thread/launch
std::launch::async =&gt; cpp/thread/launch
std::launch::deferred =&gt; cpp/thread/launch
std::future_status =&gt; cpp/thread/future_status
std::future_status::ready =&gt; cpp/thread/future_status
std::future_status::timeout =&gt; cpp/thread/future_status
std::future_status::deferred =&gt; cpp/thread/future_status
std::future_error =&gt; cpp/thread/future_error
std::future_category =&gt; cpp/thread/future_category
std::future_errc =&gt; cpp/thread/future_errc
std::future_errc::broken_promise =&gt; cpp/thread/future_errc
std::future_errc::future_already_retrieved =&gt; cpp/thread/future_errc
std::future_errc::promise_already_satisfied =&gt; cpp/thread/future_errc
std::future_errc::no_state =&gt; cpp/thread/future_errc
std::filesystem::path =&gt; cpp/filesystem/path
std::filesystem::path::preferred_separator =&gt; cpp/filesystem/path
std::filesystem::u8path =&gt; cpp/filesystem/path/u8path
std::filesystem::filesystem_error =&gt; cpp/filesystem/filesystem_error
std::filesystem::directory_entry =&gt; cpp/filesystem/directory_entry
std::filesystem::directory_iterator =&gt; cpp/filesystem/directory_iterator
std::filesystem::recursive_directory_iterator =&gt; cpp/filesystem/recursive_directory_iterator
std::filesystem::file_status =&gt; cpp/filesystem/file_status
std::filesystem::space_info =&gt; cpp/filesystem/space_info
std::filesystem::file_type =&gt; cpp/filesystem/file_type
std::filesystem::file_type::none =&gt; cpp/filesystem/file_type
std::filesystem::file_type::not_found =&gt; cpp/filesystem/file_type
std::filesystem::file_type::regular =&gt; cpp/filesystem/file_type
std::filesystem::file_type::directory =&gt; cpp/filesystem/file_type
std::filesystem::file_type::symlink =&gt; cpp/filesystem/file_type
std::filesystem::file_type::block =&gt; cpp/filesystem/file_type
std::filesystem::file_type::character =&gt; cpp/filesystem/file_type
std::filesystem::file_type::fifo =&gt; cpp/filesystem/file_type
std::filesystem::file_type::socket =&gt; cpp/filesystem/file_type
std::filesystem::file_type::unknown =&gt; cpp/filesystem/file_type
std::filesystem::perms =&gt; cpp/filesystem/perms
std::filesystem::perms::none =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_read =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_write =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_exec =&gt; cpp/filesystem/perms
std::filesystem::perms::owner_all =&gt; cpp/filesystem/perms
std::filesystem::perms::group_read =&gt; cpp/filesystem/perms
std::filesystem::perms::group_write =&gt; cpp/filesystem/perms
std::filesystem::perms::group_exec =&gt; cpp/filesystem/perms
std::filesystem::perms::group_all =&gt; cpp/filesystem/perms
std::filesystem::perms::others_read =&gt; cpp/filesystem/perms
std::filesystem::perms::others_write =&gt; cpp/filesystem/perms
std::filesystem::perms::others_exec =&gt; cpp/filesystem/perms
std::filesystem::perms::others_all =&gt; cpp/filesystem/perms
std::filesystem::perms::all =&gt; cpp/filesystem/perms
std::filesystem::perms::set_uid =&gt; cpp/filesystem/perms
std::filesystem::perms::set_gid =&gt; cpp/filesystem/perms
std::filesystem::perms::sticky_bit =&gt; cpp/filesystem/perms
std::filesystem::perms::mask =&gt; cpp/filesystem/perms
std::filesystem::perms::unknown =&gt; cpp/filesystem/perms
std::filesystem::perms::add_perms =&gt; cpp/filesystem/perms
std::filesystem::perms::remove_perms =&gt; cpp/filesystem/perms
std::filesystem::perms::resolve_symlinks =&gt; cpp/filesystem/perms
std::filesystem::copy_options =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::none =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::skip_existing =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::overwrite_existing =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::update_existing =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::recursive =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::copy_symlinks =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::skip_symlinks =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::directories_only =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::create_symlinks =&gt; cpp/filesystem/copy_options
std::filesystem::copy_options::create_hard_links =&gt; cpp/filesystem/copy_options
std::filesystem::directory_options =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::none =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::follow_directory_symlink =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::overwrite_existing =&gt; cpp/filesystem/directory_options
std::filesystem::directory_options::skip_permission_denied =&gt; cpp/filesystem/directory_options
std::filesystem::file_time_type =&gt; cpp/filesystem/file_time_type
std::filesystem::absolute =&gt; cpp/filesystem/absolute
std::filesystem::system_complete =&gt; cpp/filesystem/absolute
std::filesystem::canonical =&gt; cpp/filesystem/canonical
std::filesystem::weakly_canonical =&gt; cpp/filesystem/canonical
std::filesystem::relative =&gt; cpp/filesystem/relative
std::filesystem::proximate =&gt; cpp/filesystem/relative
std::filesystem::copy =&gt; cpp/filesystem/copy
std::filesystem::copy_file =&gt; cpp/filesystem/copy_file
std::filesystem::copy_symlink =&gt; cpp/filesystem/copy_symlink
std::filesystem::create_directory =&gt; cpp/filesystem/create_directory
std::filesystem::create_directories =&gt; cpp/filesystem/create_directory
std::filesystem::create_hard_link =&gt; cpp/filesystem/create_hard_link
std::filesystem::create_symlink =&gt; cpp/filesystem/create_symlink
std::filesystem::create_directory_symlink =&gt; cpp/filesystem/create_symlink
std::filesystem::current_path =&gt; cpp/filesystem/current_path
std::filesystem::exists =&gt; cpp/filesystem/exists
std::filesystem::equivalent =&gt; cpp/filesystem/equivalent
std::filesystem::file_size =&gt; cpp/filesystem/file_size
std::filesystem::hard_link_count =&gt; cpp/filesystem/hard_link_count
std::filesystem::last_write_time =&gt; cpp/filesystem/last_write_time
std::filesystem::permissions =&gt; cpp/filesystem/permissions
std::filesystem::read_symlink =&gt; cpp/filesystem/read_symlink
std::filesystem::remove =&gt; cpp/filesystem/remove
std::filesystem::remove_all =&gt; cpp/filesystem/remove
std::filesystem::rename =&gt; cpp/filesystem/rename
std::filesystem::resize_file =&gt; cpp/filesystem/resize_file
std::filesystem::space =&gt; cpp/filesystem/space
std::filesystem::status =&gt; cpp/filesystem/status
std::filesystem::symlink_status =&gt; cpp/filesystem/status
std::filesystem::temp_directory_path =&gt; cpp/filesystem/temp_directory_path
std::filesystem::is_block_file =&gt; cpp/filesystem/is_block_file
std::filesystem::is_character_file =&gt; cpp/filesystem/is_character_file
std::filesystem::is_directory =&gt; cpp/filesystem/is_directory
std::filesystem::is_empty =&gt; cpp/filesystem/is_empty
std::filesystem::is_fifo =&gt; cpp/filesystem/is_fifo
std::filesystem::is_other =&gt; cpp/filesystem/is_other
std::filesystem::is_regular_file =&gt; cpp/filesystem/is_regular_file
std::filesystem::is_socket =&gt; cpp/filesystem/is_socket
std::filesystem::is_symlink =&gt; cpp/filesystem/is_symlink
std::filesystem::status_known =&gt; cpp/filesystem/status_known
std::experimental::optional =&gt; cpp/experimental/optional
std::experimental::make_optional =&gt; cpp/experimental/optional/make_optional
std::experimental::bad_optional_access =&gt; cpp/utility/optional/bad_optional_access
std::experimental::any =&gt; cpp/experimental/any
std::experimental::any_cast =&gt; cpp/experimental/any/any_cast
std::experimental::pmr::memory_resource =&gt; cpp/experimental/memory_resource
std::experimental::pmr::monotonic_buffer_resource =&gt; cpp/experimental/monotonic_buffer_resource
std::experimental::pmr::synchronized_pool_resource =&gt; cpp/experimental/synchronized_pool_resource
std::experimental::pmr::unsynchronized_pool_resource =&gt; cpp/experimental/unsynchronized_pool_resource
std::experimental::pmr::polymorphic_allocator =&gt; cpp/experimental/polymorphic_allocator
std::experimental::pmr::resource_adaptor =&gt; cpp/experimental/resource_adaptor
std::experimental::pmr::new_delete_resource =&gt; cpp/experimental/new_delete_resource
std::experimental::pmr::null_memory_resource =&gt; cpp/experimental/null_Memory_resource
std::experimental::pmr::get_default_resource =&gt; cpp/experimental/get_default_resource
std::experimental::pmr::set_default_resource =&gt; cpp/experimental/set_default_resource
std::experimental::sample =&gt; cpp/experimental/sample
std::experimental::search =&gt; cpp/experimental/search
std::experimental::default_searcher =&gt; cpp/experimental/default_searcher
std::experimental::make_default_searcher =&gt; cpp/experimental/make_default_searcher
std::experimental::boyer_moore_horspool_searcher =&gt; cpp/experimental/boyer_moore_horspool_searcher
std::experimental::make_boyer_moore_horspool_searcher =&gt; cpp/experimental/make_boyer_moore_horspool_searcher
std::experimental::boyer_moore_searcher =&gt; cpp/experimental/boyer_moore_searcher
std::experimental::make_boyer_moore_searcher =&gt; cpp/experimental/make_boyer_moore_searcher
std::experimental::apply =&gt; cpp/experimental/apply
std::experimental::erased_type =&gt; cpp/experimental/erased_type
std::experimental::invocation_type =&gt; cpp/experimental/invocation_type
std::experimental::raw_invocation_type =&gt; cpp/experimental/raw_invocation_type
std::experimental::basic_string_view =&gt; cpp/experimental/basic_string_view
std::experimental::basic_string_view::npos =&gt; cpp/experimental/basic_string_view/npos
std::experimental::string_view =&gt; cpp/experimental/basic_string_view
std::experimental::string_view::npos =&gt; cpp/experimental/basic_string_view/npos
std::experimental::wstring_view =&gt; cpp/experimental/basic_string_view
std::experimental::wstring_view::npos =&gt; cpp/experimental/basic_string_view/npos
std::experimental::u16string_view =&gt; cpp/experimental/basic_string_view
std::experimental::u16string_view::npos =&gt; cpp/experimental/basic_string_view/npos
std::experimental::u32string_view =&gt; cpp/experimental/basic_string_view
std::experimental::u32string_view::npos =&gt; cpp/experimental/basic_string_view/npos
std::experimental::is_void_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_null_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_integral_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_floating_point_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_array_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_lvalue_reference_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_rvalue_reference_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_member_object_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_member_function_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_enum_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_union_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_class_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_function_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_reference_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_arithmetic_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_fundamental_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_object_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_scalar_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_compound_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_member_pointer_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_const_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_volatile_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivial_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_copyable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_standard_layout_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_pod_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_literal_type_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_empty_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_polymorphic_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_abstract_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_final_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_signed_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_unsigned_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_default_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_default_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_default_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_copy_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_copy_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_copy_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_move_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_move_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_move_constructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_copy_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_copy_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_copy_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_move_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_move_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_move_assignable_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_destructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_trivially_destructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_nothrow_destructible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::has_virtual_destructor_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::alignment_of_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::rank_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::extent_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_same_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_base_of_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_convertible_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_not_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_less_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_less_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_greater_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::ratio_greater_equal_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::tuple_size_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::treat_as_floating_point_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_error_code_enum_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_error_condition_enum_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_bind_expression_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_placeholder_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::uses_allocator_v =&gt; cpp/experimental/type_trait_variable_templates
std::experimental::is_detected =&gt; cpp/experimental/is_detected
std::experimental::is_detected_v =&gt; cpp/experimental/is_detected
std::experimental::detected_or =&gt; cpp/experimental/is_detected
std::experimental::detected_or_t =&gt; cpp/experimental/is_detected
std::experimental::is_detected_exact =&gt; cpp/experimental/is_detected
std::experimental::is_detected_exact_v =&gt; cpp/experimental/is_detected
std::experimental::is_detected_convertible =&gt; cpp/experimental/is_detected
std::experimental::is_detected_convertible_v =&gt; cpp/experimental/is_detected
std::experimental::nonesuch =&gt; cpp/experimental/nonesuch
std::experimental::propagate_const =&gt; cpp/experimental/propagate_const
std::experimental::not_fn =&gt; cpp/experimental/not_fn
std::experimental::observer_ptr =&gt; cpp/experimental/observer_ptr
std::experimental::make_array =&gt; cpp/experimental/make_array
std::experimental::to_array =&gt; cpp/experimental/to_array
std::experimental::ostream_joiner =&gt; cpp/experimental/ostream_joiner
std::experimental::gcd =&gt; cpp/experimental/gcd
std::experimental::lcm =&gt; cpp/experimental/lcm
std::experimental::source_location =&gt; cpp/experimental/source_location
std::as_const =&gt; cpp/utility/as_const
std::experimental::randint =&gt; cpp/experimental/randint
std::experimental::reseed =&gt; cpp/experimental/reseed
std::experimental::filesystem::path =&gt; cpp/experimental/fs/path
std::experimental::filesystem::filesystem_error =&gt; cpp/experimental/fs/filesystem_error
std::experimental::filesystem::directory_entry =&gt; cpp/experimental/fs/directory_entry
std::experimental::filesystem::directory_iterator =&gt; cpp/experimental/fs/directory_iterator
std::experimental::filesystem::recursive_directory_iterator =&gt; cpp/experimental/fs/recursive_directory_iterator
std::experimental::filesystem::file_status =&gt; cpp/experimental/fs/file_status
std::experimental::filesystem::space_info =&gt; cpp/experimental/fs/space_info
std::experimental::filesystem::file_type =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::none =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::not_found =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::regular =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::directory =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::symlink =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::block =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::character =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::fifo =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::socket =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::file_type::unknown =&gt; cpp/experimental/fs/file_type
std::experimental::filesystem::perms =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::none =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_read =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_write =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_exec =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::owner_all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_read =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_write =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_exec =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::group_all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_read =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_write =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_exec =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::others_all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::all =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::set_uid =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::set_gid =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::sticky_bit =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::mask =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::unknown =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::add_perms =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::remove_perms =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::perms::resolve_symlinks =&gt; cpp/experimental/fs/perms
std::experimental::filesystem::copy_options =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::none =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::skip_existing =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::overwrite_existing =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::update_existing =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::recursive =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::copy_symlinks =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::skip_symlinks =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::directories_only =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::create_symlinks =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::copy_options::create_hard_links =&gt; cpp/experimental/fs/copy_options
std::experimental::filesystem::directory_options =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::none =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::follow_directory_symlink =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::overwrite_existing =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::directory_options::skip_permission_denied =&gt; cpp/experimental/fs/directory_options
std::experimental::filesystem::file_time_type =&gt; cpp/experimental/fs/file_time_type
std::experimental::filesystem::absolute =&gt; cpp/experimental/fs/absolute
std::experimental::filesystem::system_complete =&gt; cpp/experimental/fs/absolute
std::experimental::filesystem::canonical =&gt; cpp/experimental/fs/canonical
std::experimental::filesystem::copy =&gt; cpp/experimental/fs/copy
std::experimental::filesystem::copy_file =&gt; cpp/experimental/fs/copy_file
std::experimental::filesystem::copy_symlink =&gt; cpp/experimental/fs/copy_symlink
std::experimental::filesystem::create_directory =&gt; cpp/experimental/fs/create_directory
std::experimental::filesystem::create_directories =&gt; cpp/experimental/fs/create_directory
std::experimental::filesystem::create_hard_link =&gt; cpp/experimental/fs/create_hard_link
std::experimental::filesystem::create_symlink =&gt; cpp/experimental/fs/create_symlink
std::experimental::filesystem::create_directory_symlink =&gt; cpp/experimental/fs/create_symlink
std::experimental::filesystem::current_path =&gt; cpp/experimental/fs/current_path
std::experimental::filesystem::exists =&gt; cpp/experimental/fs/exists
std::experimental::filesystem::equivalent =&gt; cpp/experimental/fs/equivalent
std::experimental::filesystem::file_size =&gt; cpp/experimental/fs/file_size
std::experimental::filesystem::hard_link_count =&gt; cpp/experimental/fs/hard_link_count
std::experimental::filesystem::last_write_time =&gt; cpp/experimental/fs/last_write_time
std::experimental::filesystem::permissions =&gt; cpp/experimental/fs/permissions
std::experimental::filesystem::read_symlink =&gt; cpp/experimental/fs/read_symlink
std::experimental::filesystem::remove =&gt; cpp/experimental/fs/remove
std::experimental::filesystem::remove_all =&gt; cpp/experimental/fs/remove
std::experimental::filesystem::rename =&gt; cpp/experimental/fs/rename
std::experimental::filesystem::resize_file =&gt; cpp/experimental/fs/resize_file
std::experimental::filesystem::space =&gt; cpp/experimental/fs/space
std::experimental::filesystem::status =&gt; cpp/experimental/fs/status
std::experimental::filesystem::symlink_status =&gt; cpp/experimental/fs/status
std::experimental::filesystem::temp_directory_path =&gt; cpp/experimental/fs/temp_directory_path
std::experimental::filesystem::is_block_file =&gt; cpp/experimental/fs/is_block_file
std::experimental::filesystem::is_character_file =&gt; cpp/experimental/fs/is_character_file
std::experimental::filesystem::is_directory =&gt; cpp/experimental/fs/is_directory
std::experimental::filesystem::is_empty =&gt; cpp/experimental/fs/is_empty
std::experimental::filesystem::is_fifo =&gt; cpp/experimental/fs/is_fifo
std::experimental::filesystem::is_other =&gt; cpp/experimental/fs/is_other
std::experimental::filesystem::is_regular_file =&gt; cpp/experimental/fs/is_regular_file
std::experimental::filesystem::is_socket =&gt; cpp/experimental/fs/is_socket
std::experimental::filesystem::is_symlink =&gt; cpp/experimental/fs/is_symlink
std::experimental::filesystem::status_known =&gt; cpp/experimental/fs/status_known
ranges::Same =&gt; cpp/experimental/ranges/concepts/Same
ranges::DerivedFrom =&gt; cpp/experimental/ranges/concepts/DerivedFrom
ranges::ConvertibleTo =&gt; cpp/experimental/ranges/concepts/ConvertibleTo
ranges::CommonReference =&gt; cpp/experimental/ranges/concepts/CommonReference
ranges::Common =&gt; cpp/experimental/ranges/concepts/Common
ranges::Integral =&gt; cpp/experimental/ranges/concepts/Integral
ranges::SignedIntegral =&gt; cpp/experimental/ranges/concepts/SignedIntegral
ranges::UnsignedIntegral =&gt; cpp/experimental/ranges/concepts/UnsignedIntegral
ranges::Assignable =&gt; cpp/experimental/ranges/concepts/Assignable
ranges::Swappable =&gt; cpp/experimental/ranges/concepts/Swappable
ranges::Boolean =&gt; cpp/experimental/ranges/concepts/Boolean
ranges::WeaklyEqualityComparable =&gt; cpp/experimental/ranges/concepts/WeaklyEqualityComparable
ranges::EqualityComparable =&gt; cpp/experimental/ranges/concepts/EqualityComparable
ranges::StrictTotallyOrdered =&gt; cpp/experimental/ranges/concepts/StrictTotallyOrdered
ranges::Destructible =&gt; cpp/experimental/ranges/concepts/Destructible
ranges::Constructible =&gt; cpp/experimental/ranges/concepts/Constructible
ranges::DefaultConstructible =&gt; cpp/experimental/ranges/concepts/DefaultConstructible
ranges::MoveConstructible =&gt; cpp/experimental/ranges/concepts/MoveConstructible
ranges::CopyConstructible =&gt; cpp/experimental/ranges/concepts/CopyConstructible
ranges::Movable =&gt; cpp/experimental/ranges/concepts/Movable
ranges::Copyable =&gt; cpp/experimental/ranges/concepts/Copyable
ranges::Semiregular =&gt; cpp/experimental/ranges/concepts/Semiregular
ranges::Regular =&gt; cpp/experimental/ranges/concepts/Regular
ranges::Invocable =&gt; cpp/experimental/ranges/concepts/Invocable
ranges::RegularInvocable =&gt; cpp/experimental/ranges/concepts/Invocable
ranges::Predicate =&gt; cpp/experimental/ranges/concepts/Predicate
ranges::Relation =&gt; cpp/experimental/ranges/concepts/Relation
ranges::StrictWeakOrder =&gt; cpp/experimental/ranges/concepts/StrictWeakOrder
ranges::UniformRandomNumberGenerator =&gt; cpp/experimental/ranges/concepts/UniformRandomNumberGenerator
ranges::Readable =&gt; cpp/experimental/ranges/iterator/Readable
ranges::Writable =&gt; cpp/experimental/ranges/iterator/Writable
ranges::WeaklyIncrementable =&gt; cpp/experimental/ranges/iterator/WeaklyIncrementable
ranges::Incrementable =&gt; cpp/experimental/ranges/iterator/Incrementable
ranges::Iterator =&gt; cpp/experimental/ranges/iterator/Iterator
ranges::Sentinel =&gt; cpp/experimental/ranges/iterator/Sentinel
ranges::SizedSentinel =&gt; cpp/experimental/ranges/iterator/SizedSentinel
ranges::InputIterator =&gt; cpp/experimental/ranges/iterator/InputIterator
ranges::OutputIterator =&gt; cpp/experimental/ranges/iterator/OutputIterator
ranges::ForwardIterator =&gt; cpp/experimental/ranges/iterator/ForwardIterator
ranges::BidirectionalIterator =&gt; cpp/experimental/ranges/iterator/BidirectionalIterator
ranges::RandomAccessIterator =&gt; cpp/experimental/ranges/iterator/RandomAccessIterator
ranges::IndirectInvocable =&gt; cpp/experimental/ranges/iterator/IndirectInvocable
ranges::IndirectRegularInvocable =&gt; cpp/experimental/ranges/iterator/IndirectInvocable
ranges::IndirectPredicate =&gt; cpp/experimental/ranges/iterator/IndirectPredicate
ranges::IndirectRelation =&gt; cpp/experimental/ranges/iterator/IndirectRelation
ranges::IndirectStrictWeakOrder =&gt; cpp/experimental/ranges/iterator/IndirectStrictWeakOrder
ranges::IndirectlyMovable =&gt; cpp/experimental/ranges/iterator/IndirectlyMovable
ranges::IndirectlyMovableStorable =&gt; cpp/experimental/ranges/iterator/IndirectlyMovableStorable
ranges::IndirectlyCopyable =&gt; cpp/experimental/ranges/iterator/IndirectlyCopyable
ranges::IndirectlyCopyableStorable =&gt; cpp/experimental/ranges/iterator/IndirectlyCopyableStorable
ranges::IndirectlySwappable =&gt; cpp/experimental/ranges/iterator/IndirectlySwappable
ranges::IndirectlyComparable =&gt; cpp/experimental/ranges/iterator/IndirectlyComparable
ranges::Permutable =&gt; cpp/experimental/ranges/iterator/Permutable
ranges::Mergeable =&gt; cpp/experimental/ranges/iterator/Mergeable
ranges::Sortable =&gt; cpp/experimental/ranges/iterator/Sortable
ranges::Range =&gt; cpp/experimental/ranges/iterator/Range
ranges::SizedRange =&gt; cpp/experimental/ranges/iterator/SizedRange
ranges::View =&gt; cpp/experimental/ranges/iterator/View
ranges::BoundedRange =&gt; cpp/experimental/ranges/iterator/BoundedRange
ranges::InputRange =&gt; cpp/experimental/ranges/iterator/InputRange
ranges::OutputRange =&gt; cpp/experimental/ranges/iterator/OutputRange
ranges::ForwardRange =&gt; cpp/experimental/ranges/iterator/ForwardRange
ranges::BidirectionalRange =&gt; cpp/experimental/ranges/iterator/BidirectionalRange
ranges::RandomAccessRange =&gt; cpp/experimental/ranges/iterator/RandomAccessRange
ranges::projected =&gt; cpp/experimental/ranges/iterator/projected</text>
      <sha1>5rpa0z20jznukw8k4k46yn2bthwkohf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Loginprompt</title>
    <ns>8</ns>
    <id>2127</id>
    <revision>
      <id>41385</id>
      <parentid>41384</parentid>
      <timestamp>2012-10-22T18:14:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="226">You must have cookies enabled to log in to {{SITENAME}}.&lt;p style=&quot;line-height: 1.2em;&quot;&gt;Note, that logged-in users greatly increase resource usage on our server. &lt;br/&gt; Being logged-in offers benefits only for editing tasks.&lt;/p&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Newusernotifbody</title>
    <ns>8</ns>
    <id>8669</id>
    <revision>
      <id>36486</id>
      <timestamp>2012-06-22T14:45:58Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>make params noticable</comment>
      <text xml:space="preserve" bytes="519">Hello $1,

$3
$4
$9

A new user account, $2, has been created on $3 at $4 for $2&lt;$7&gt; from IP address $9.

If this is a desired user, you should approve at: {{fullurl:Special:UserRights}}/$2.

Then notify mailto:$10&lt;$7&gt;&amp;subject=Account%20Approved%20for%20$8%20Access&amp;body=A%20new%20user%20account,%20$2,%20has%20been%20approved%20on%20$8%20at%20your%20request.%0A%0AYou%20now%20have%20approved%20rights%20at%20{{urlencode:{{SERVER}}}}{{SCRIPTPATH}}%20for%20this%20wiki.%0A%0AYour%20Friendly%20Sysop

Your Friendly Sysop!</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Newusernotifsubj</title>
    <ns>8</ns>
    <id>8670</id>
    <revision>
      <id>36488</id>
      <parentid>36487</parentid>
      <timestamp>2012-06-22T14:52:21Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="39">New user notification for $1 from IP $3</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Noarticletext</title>
    <ns>8</ns>
    <id>2546</id>
    <revision>
      <id>13925</id>
      <parentid>9334</parentid>
      <timestamp>2011-11-14T21:20:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>clarified</comment>
      <text xml:space="preserve" bytes="328">There is currently no text in this page.

You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or &lt;span class=&quot;plainlinks&quot;&gt;[{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]&lt;/span&gt;.

If you came to this page via a [[enwiki:Link rot|broken link]], please report [[Cppreference_talk:FAQ|here]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Popularpages-summary</title>
    <ns>8</ns>
    <id>13036</id>
    <revision>
      <id>66093</id>
      <timestamp>2013-10-26T23:52:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Special:PopularPages is incorrect</comment>
      <text xml:space="preserve" bytes="115">'''The hitcounts in this page are incorrect'''. Cppreference gets a total of about 1.3 million pageviews per month.</text>
      <sha1>svsmxh4f1qsf4xckhcd2fol1ytuhksa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Print.css</title>
    <ns>8</ns>
    <id>9793</id>
    <revision>
      <id>45551</id>
      <parentid>45550</parentid>
      <timestamp>2013-01-02T22:49:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>reduce font size in print mode</comment>
      <text xml:space="preserve" bytes="359">/* CSS placed here will affect the print output */

/**
    Don't display the following items:
     * Navigation bar
     * Edit links
*/
.t-navbar,
.editsection {
    display: none !important;
}

#content {
    font-size: 0.7em;
    padding: 1em 3em !important;
}

.printfooter {
    margin-top: 1em;
    border-top: 1px solid silver;
    font-size: 0.8em;
}</text>
      <sha1/>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Sidebar</title>
    <ns>8</ns>
    <id>2213</id>
    <revision>
      <id>67281</id>
      <parentid>36634</parentid>
      <timestamp>2014-02-03T03:35:29Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>change from &quot;store&quot; to &quot;support us&quot;</comment>
      <text xml:space="preserve" bytes="193">* navigation
** http://www.cppreference.com/support|Support us
** recentchanges-url|recentchanges
** Cppreference:FAQ|FAQ
** Cppreference:Archives|Offline version
* SEARCH
* TOOLBOX
* LANGUAGES</text>
      <sha1>482lqk90daed84mtcmvhyutxbptd2yq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Talkpagetext</title>
    <ns>8</ns>
    <id>5312</id>
    <revision>
      <id>65401</id>
      <parentid>65400</parentid>
      <timestamp>2013-09-11T21:21:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="253">&lt;div style=&quot;background-color: #ffeeaa; margin: 0.2em 0; padding: 0.2em; text-align: center; border: 1px solid silver; border-radius: 3px;&quot;&gt;This is a talk page. Remember to sign your posts by typing four tildes (&lt;code&gt;&lt;nowiki&gt;~~~~&lt;/nowiki&gt;&lt;/code&gt;).&lt;/div&gt;</text>
      <sha1>qk0gglcbqh38w45jvvgnkgikwueddv4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Titleblacklist</title>
    <ns>8</ns>
    <id>6366</id>
    <revision>
      <id>25370</id>
      <parentid>25369</parentid>
      <timestamp>2012-04-21T11:02:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="329"># This is a title blacklist. Titles and users that match a regular expression here cannot be created.
# Use &quot;#&quot; for comments.
# This is case insensitive by default

#only allow ascii names
[^:]*:.*[^\x00-\x7F].*  #Non ascii usernames/articles are not allowed

[^:]*[^\x00-\x7F][^:]*  #Non ascii usernames/articles are not allowed</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Vector.css</title>
    <ns>8</ns>
    <id>1792</id>
    <revision>
      <id>3584</id>
      <parentid>3583</parentid>
      <timestamp>2011-06-06T23:01:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="2715">/* CSS placed here will affect users of the Vector skin */
/* &lt;syntaxhighlight lang=&quot;css&quot;&gt; */

/* Don't display some stuff on the main page */
body.page-Main_Page #deleteconfirm,
body.page-Main_Page #t-cite,
body.page-Main_Page #footer-info-lastmod,
body.page-Main_Page #siteSub,
body.page-Main_Page #contentSub,
body.page-Main_Page h1.firstHeading {
  display: none !important;
}

body.page-Main_Page #mp-topbanner {
  margin-top: 0 !important;
}

#coordinates {
  position: absolute;
  top: 0em;
  right: 0em;
  float: right;
  margin: 0.0em;
  padding: 0.0em;
  line-height: 1.5em;
  text-align: right;
  text-indent: 0;
  font-size: 85%;
  text-transform: none;
  white-space: nowrap;
}

/* For positioning icons at top-right, used in Templates
   &quot;Spoken Article&quot; and &quot;Featured Article&quot; */
div.topicon {
  position: absolute;
  top: -2em;
  margin-right: -10px;
  display: block !important;
}

/* FR topicon position */
div.flaggedrevs_short {
  position: absolute;
  top: -3em;
  right: 80px;
  z-index: 1;
  margin-left: 0;
  /* Because this is not yet a topicon, we emulate it's behavior, this ensure compatibility with edit lead section gadget */
  margin-right: -10px;
}

/* Menu over FR box */
div.vectorMenu div {
  z-index: 2;
}

/* Display &quot;From Wikipedia, the free encyclopedia&quot; */
#siteSub {
  display: inline;
  font-size: 92%;
  font-weight: normal;
}

/* {{tl|Link GA}} */
#mw-panel div.portal div.body ul li.GA {
  background: url(&quot;http://upload.wikimedia.org/wikipedia/commons/4/42/Monobook-bullet-ga.png&quot;) no-repeat 0% 0%;
  margin-left: -1.25em;
  padding-left: 1.25em;
}

/* {{tl|Link FA}} */
#mw-panel div.portal div.body ul li.FA {
  background: url(&quot;http://upload.wikimedia.org/wikipedia/commons/d/d4/Monobook-bullet-star.png&quot;) no-repeat 0% 0%;
  margin-left: -1.25em;
  padding-left: 1.25em;
}

/* Increase fontsize of diffs */
td.diff-context, td.diff-addedline, td.diff-deletedline {
  font-size: 85%;
  vertical-align: top;
}

/* Adjust font-size for inline HTML generated TeX formulae */
span.texhtml {
  font-family: 'Times New Roman', serif;
  font-size: 120%;
  line-height: 1em;
}

/* Blue instead of yellow padlock for secure links. */
#bodyContent a.external[href ^=&quot;https://&quot;],
.link-https {
  background: url(&quot;http://upload.wikimedia.org/wikipedia/en/0/00/Lock_icon_blue.gif&quot;) center right no-repeat;
  padding-right: 16px;
}

/* Soft redirect (bug:26544) */
.redirectText {
  font-size: 150%;
  margin: 5px;
}

/* Fix for empty diff-context lines. Remove when r75658 is live. */
td.diff-marker {
  height: 1.5em;
}

/* Change &quot;You have new messages&quot; bar back to orange */
div.usermessage {
  background-color: #FFCE7B;
  border: 1px solid orange;
}

/* &lt;/syntaxhighlight&gt; */</text>
      <sha1/>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>Standard Layout</title>
    <ns>0</ns>
    <id>14087</id>
    <redirect title="cpp/concept/StandardLayoutType" />
    <revision>
      <id>78370</id>
      <timestamp>2015-05-18T21:27:47Z</timestamp>
      <contributor>
        <username>Korval</username>
        <id>95</id>
      </contributor>
      <comment>So that people searching for &quot;Standard Layout&quot; got to the concept, not the `is_standard_layout` template.</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/concept/StandardLayoutType]]</text>
      <sha1>duazufkzy3nrc5w5sgiwpoyvvrhwv8w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:!</title>
    <ns>10</ns>
    <id>1793</id>
    <revision>
      <id>13545</id>
      <parentid>13543</parentid>
      <timestamp>2011-11-09T12:08:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Undo revision 13543 by [[Special:Contributions/P12|P12]] ([[User talk:P12|talk]])</comment>
      <text xml:space="preserve" bytes="60">|&lt;noinclude&gt;
{{documentation | Template:!/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:!!</title>
    <ns>10</ns>
    <id>1794</id>
    <revision>
      <id>13939</id>
      <parentid>13546</parentid>
      <timestamp>2011-11-15T21:57:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>undo again: breaks syntax highlighting</comment>
      <text xml:space="preserve" bytes="61">||&lt;noinclude&gt;
{{documentation | Template:!/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:!)</title>
    <ns>10</ns>
    <id>10100</id>
    <revision>
      <id>48131</id>
      <timestamp>2013-05-18T18:38:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">&lt;includeonly&gt;|}&lt;/includeonly&gt;&lt;noinclude&gt;&lt;nowiki&gt;|}&lt;/nowiki&gt;{{documentation | Template:!/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:!-</title>
    <ns>10</ns>
    <id>1795</id>
    <revision>
      <id>3590</id>
      <parentid>3589</parentid>
      <timestamp>2011-06-06T23:01:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="2">|-</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:!/doc</title>
    <ns>10</ns>
    <id>1796</id>
    <revision>
      <id>48132</id>
      <parentid>4623</parentid>
      <timestamp>2013-05-18T18:39:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync</comment>
      <text xml:space="preserve" bytes="297">This is one of the templates used to output special symbols:

{{tl|!}} - outputs &lt;tt&gt;|&lt;/tt&gt;

{{tl|!!}} - outputs &lt;tt&gt;||&lt;/tt&gt;

{{tl|1==}} - outputs &lt;tt&gt;=&lt;/tt&gt;

{{tl|1===}} - outputs &lt;tt&gt;==&lt;/tt&gt;

{{tl|1=!=}} - outputs &lt;tt&gt;|=&lt;/tt&gt;

{{tl|1=(!}} - outputs &lt;tt&gt;{|&lt;/tt&gt;

{{tl|1=!)}} - outputs &lt;tt&gt;|}&lt;/tt&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:!=</title>
    <ns>10</ns>
    <id>1797</id>
    <revision>
      <id>3594</id>
      <parentid>3593</parentid>
      <timestamp>2011-06-06T23:01:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="61">|=&lt;noinclude&gt;
{{documentation | Template:!/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:(!</title>
    <ns>10</ns>
    <id>10099</id>
    <revision>
      <id>48130</id>
      <timestamp>2013-05-18T18:38:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">&lt;includeonly&gt;{|&lt;/includeonly&gt;&lt;noinclude&gt;&lt;nowiki&gt;{|&lt;/nowiki&gt;{{documentation | Template:!/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:=</title>
    <ns>10</ns>
    <id>1798</id>
    <revision>
      <id>87622</id>
      <parentid>87620</parentid>
      <timestamp>2016-09-15T08:17:57Z</timestamp>
      <contributor>
        <ip>183.39.212.112</ip>
      </contributor>
      <text xml:space="preserve" bytes="58">=&lt;noinclude&gt;
{{documentation|Template:!/doc}}
&lt;/noinclude&gt;</text>
      <sha1>7d4g1o5fdecqw0ocyfzl0nf2ydwtu2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:==</title>
    <ns>10</ns>
    <id>1799</id>
    <revision>
      <id>87623</id>
      <parentid>87621</parentid>
      <timestamp>2016-09-15T08:18:22Z</timestamp>
      <contributor>
        <ip>183.39.212.112</ip>
      </contributor>
      <text xml:space="preserve" bytes="59">==&lt;noinclude&gt;
{{documentation|Template:!/doc}}
&lt;/noinclude&gt;</text>
      <sha1>0ir6mjtfxekixgyg1vugwfu529u2nh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Talk archive navigation</title>
    <ns>10</ns>
    <id>10095</id>
    <revision>
      <id>48014</id>
      <parentid>48012</parentid>
      <timestamp>2013-05-18T17:13:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>background</comment>
      <text xml:space="preserve" bytes="26908">{{fmbox
| style = background: none repeat scroll 0 0 #F8EABA; {{{style|}}}
| textstyle = {{{textstyle|}}}
| image = [[File:{{{icon|Replacement filing cabinet.svg}}}|40x40px|alt=|link=]]
| text  = 
This is an archive of past discussions{{#if:{{{period|}}}|&amp;#32;for the period '''{{{period}}}'''}}. '''Do not edit the contents of this page.''' If you wish to start a new discussion or revive an old one, please do so on the [[{{NAMESPACE}}:{{BASEPAGENAME}}|current page]].
}}
{| style=&quot;width: 32em; background: transparent; margin: 0 auto 0.5em; text-align: center&quot;
| {{#switch:{{SUBPAGENAME}}|
Archive 2={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 1|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 1|&amp;larr; Archive 1]]}}|
Archive 3={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 2|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 2|&amp;larr; Archive 2]]}}|
Archive 4={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 3|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 3|&amp;larr; Archive 3]]}}|
Archive 5={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 4|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 4|&amp;larr; Archive 4]]}}|
Archive 6={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 5|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 5|&amp;larr; Archive 5]]}}|
Archive 7={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 6|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 6|&amp;larr; Archive 6]]}}|
Archive 8={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 7|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 7|&amp;larr; Archive 7]]}}|
Archive 9={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 8|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 8|&amp;larr; Archive 8]]}}|
Archive 10={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 9|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 9|&amp;larr; Archive 9]]}}|
Archive 11={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 10|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 10|&amp;larr; Archive 10]]}}|
Archive 12={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 11|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 11|&amp;larr; Archive 11]]}}|
Archive 13={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 12|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 12|&amp;larr; Archive 12]]}}|
Archive 14={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 13|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 13|&amp;larr; Archive 13]]}}|
Archive 15={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 14|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 14|&amp;larr; Archive 14]]}}|
Archive 16={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 15|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 15|&amp;larr; Archive 15]]}}|
Archive 17={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 16|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 16|&amp;larr; Archive 16]]}}|
Archive 18={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 17|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 17|&amp;larr; Archive 17]]}}|
Archive 19={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 18|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 18|&amp;larr; Archive 18]]}}|
Archive 20={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 19|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 19|&amp;larr; Archive 19]]}}|
Archive 21={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 20|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 20|&amp;larr; Archive 20]]}}|
Archive 22={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 21|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 21|&amp;larr; Archive 21]]}}|
Archive 23={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 22|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 22|&amp;larr; Archive 22]]}}|
Archive 24={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 23|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 23|&amp;larr; Archive 23]]}}|
Archive 25={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 24|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 24|&amp;larr; Archive 24]]}}|
Archive 26={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 25|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 25|&amp;larr; Archive 25]]}}|
Archive 27={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 26|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 26|&amp;larr; Archive 26]]}}|
Archive 28={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 27|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 27|&amp;larr; Archive 27]]}}|
Archive 29={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 28|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 28|&amp;larr; Archive 28]]}}|
Archive 30={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 29|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 29|&amp;larr; Archive 29]]}}|
Archive 31={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 30|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 30|&amp;larr; Archive 30]]}}|
Archive 32={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 31|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 31|&amp;larr; Archive 31]]}}|
Archive 33={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 32|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 32|&amp;larr; Archive 32]]}}|
Archive 34={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 33|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 33|&amp;larr; Archive 33]]}}|
Archive 35={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 34|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 34|&amp;larr; Archive 34]]}}|
Archive 36={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 35|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 35|&amp;larr; Archive 35]]}}|
Archive 37={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 36|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 36|&amp;larr; Archive 36]]}}|
Archive 38={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 37|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 37|&amp;larr; Archive 37]]}}|
Archive 39={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 38|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 38|&amp;larr; Archive 38]]}}|
Archive 40={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 39|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 39|&amp;larr; Archive 39]]}}|
Archive 41={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 40|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 40|&amp;larr; Archive 40]]}}|
Archive 42={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 41|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 41|&amp;larr; Archive 41]]}}|
Archive 43={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 42|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 42|&amp;larr; Archive 42]]}}|
Archive 44={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 43|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 43|&amp;larr; Archive 43]]}}|
Archive 45={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 44|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 44|&amp;larr; Archive 44]]}}|
Archive 46={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 45|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 45|&amp;larr; Archive 45]]}}|
Archive 47={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 46|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 46|&amp;larr; Archive 46]]}}|
Archive 48={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 47|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 47|&amp;larr; Archive 47]]}}|
Archive 49={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 48|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 48|&amp;larr; Archive 48]]}}|
Archive 50={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 49|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 49|&amp;larr; Archive 49]]}}|
Archive 51={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 50|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 50|&amp;larr; Archive 50]]}}|
Archive 52={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 51|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 51|&amp;larr; Archive 51]]}}|
Archive 53={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 52|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 52|&amp;larr; Archive 52]]}}|
Archive 54={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 53|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 53|&amp;larr; Archive 53]]}}|
Archive 55={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 54|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 54|&amp;larr; Archive 54]]}}|
Archive 56={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 55|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 55|&amp;larr; Archive 55]]}}|
Archive 57={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 56|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 56|&amp;larr; Archive 56]]}}|
Archive 58={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 57|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 57|&amp;larr; Archive 57]]}}|
Archive 59={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 58|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 58|&amp;larr; Archive 58]]}}|
Archive 60={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 59|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 59|&amp;larr; Archive 59]]}}|
Archive 61={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 60|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 60|&amp;larr; Archive 60]]}}|
Archive 62={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 61|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 61|&amp;larr; Archive 61]]}}|
Archive 63={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 62|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 62|&amp;larr; Archive 62]]}}|
Archive 64={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 63|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 63|&amp;larr; Archive 63]]}}|
Archive 65={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 64|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 64|&amp;larr; Archive 64]]}}|
Archive 66={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 65|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 65|&amp;larr; Archive 65]]}}|
Archive 67={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 66|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 66|&amp;larr; Archive 66]]}}|
Archive 68={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 67|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 67|&amp;larr; Archive 67]]}}|
Archive 69={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 68|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 68|&amp;larr; Archive 68]]}}|
Archive 70={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 69|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 69|&amp;larr; Archive 69]]}}}}
| '''{{SUBPAGENAME}}'''
| {{#switch:{{SUBPAGENAME}}|
Archive 1={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 2|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 2|Archive 2 &amp;rarr;]]}}|
Archive 2={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 3|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 3|Archive 3 &amp;rarr;]]}}|
Archive 3={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 4|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 4|Archive 4 &amp;rarr;]]}}|
Archive 4={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 5|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 5|Archive 5 &amp;rarr;]]}}|
Archive 5={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 6|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 6|Archive 6 &amp;rarr;]]}}|
Archive 6={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 7|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 7|Archive 7 &amp;rarr;]]}}|
Archive 7={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 8|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 8|Archive 8 &amp;rarr;]]}}|
Archive 8={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 9|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 9|Archive 9 &amp;rarr;]]}}|
Archive 9={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 10|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 10|Archive 10 &amp;rarr;]]}}|
Archive 10={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 11|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 11|Archive 11 &amp;rarr;]]}}|
Archive 11={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 12|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 12|Archive 12 &amp;rarr;]]}}|
Archive 12={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 13|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 13|Archive 13 &amp;rarr;]]}}|
Archive 13={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 14|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 14|Archive 14 &amp;rarr;]]}}|
Archive 14={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 15|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 15|Archive 15 &amp;rarr;]]}}|
Archive 15={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 16|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 16|Archive 16 &amp;rarr;]]}}|
Archive 16={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 17|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 17|Archive 17 &amp;rarr;]]}}|
Archive 17={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 18|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 18|Archive 18 &amp;rarr;]]}}|
Archive 18={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 19|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 19|Archive 19 &amp;rarr;]]}}|
Archive 19={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 20|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 20|Archive 20 &amp;rarr;]]}}|
Archive 20={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 21|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 21|Archive 21 &amp;rarr;]]}}|
Archive 21={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 22|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 22|Archive 22 &amp;rarr;]]}}|
Archive 22={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 23|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 23|Archive 23 &amp;rarr;]]}}|
Archive 23={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 24|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 24|Archive 24 &amp;rarr;]]}}|
Archive 24={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 25|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 25|Archive 25 &amp;rarr;]]}}|
Archive 25={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 26|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 26|Archive 26 &amp;rarr;]]}}|
Archive 26={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 27|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 27|Archive 27 &amp;rarr;]]}}|
Archive 27={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 28|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 28|Archive 28 &amp;rarr;]]}}|
Archive 28={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 29|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 29|Archive 29 &amp;rarr;]]}}|
Archive 29={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 30|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 30|Archive 30 &amp;rarr;]]}}|
Archive 30={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 31|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 31|Archive 31 &amp;rarr;]]}}|
Archive 31={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 32|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 32|Archive 32 &amp;rarr;]]}}|
Archive 32={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 33|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 33|Archive 33 &amp;rarr;]]}}|
Archive 33={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 34|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 34|Archive 34 &amp;rarr;]]}}|
Archive 34={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 35|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 35|Archive 35 &amp;rarr;]]}}|
Archive 35={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 36|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 36|Archive 36 &amp;rarr;]]}}|
Archive 36={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 37|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 37|Archive 37 &amp;rarr;]]}}|
Archive 37={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 38|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 38|Archive 38 &amp;rarr;]]}}|
Archive 38={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 39|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 39|Archive 39 &amp;rarr;]]}}|
Archive 39={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 40|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 40|Archive 40 &amp;rarr;]]}}|
Archive 40={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 41|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 41|Archive 41 &amp;rarr;]]}}|
Archive 41={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 42|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 42|Archive 42 &amp;rarr;]]}}|
Archive 42={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 43|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 43|Archive 43 &amp;rarr;]]}}|
Archive 43={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 44|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 44|Archive 44 &amp;rarr;]]}}|
Archive 44={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 45|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 45|Archive 45 &amp;rarr;]]}}|
Archive 45={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 46|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 46|Archive 46 &amp;rarr;]]}}|
Archive 46={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 47|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 47|Archive 47 &amp;rarr;]]}}|
Archive 47={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 48|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 48|Archive 48 &amp;rarr;]]}}|
Archive 48={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 49|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 49|Archive 49 &amp;rarr;]]}}|
Archive 49={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 50|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 50|Archive 50 &amp;rarr;]]}}|
Archive 50={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 51|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 51|Archive 51 &amp;rarr;]]}}|
Archive 51={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 52|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 52|Archive 52 &amp;rarr;]]}}|
Archive 52={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 53|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 53|Archive 53 &amp;rarr;]]}}|
Archive 53={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 548|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 54|Archive 54 &amp;rarr;]]}}|
Archive 54={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 559|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 55|Archive 55 &amp;rarr;]]}}|
Archive 55={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 56|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 56|Archive 56 &amp;rarr;]]}}|
Archive 56={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 57|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 57|Archive 57 &amp;rarr;]]}}|
Archive 57={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 58|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 58|Archive 58 &amp;rarr;]]}}|
Archive 58={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 59|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 59|Archive 59 &amp;rarr;]]}}|
Archive 59={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 60|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 60|Archive 60 &amp;rarr;]]}}|
Archive 60={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 61|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 61|Archive 61 &amp;rarr;]]}}|
Archive 61={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 62|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 62|Archive 62 &amp;rarr;]]}}|
Archive 62={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 63|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 63|Archive 63 &amp;rarr;]]}}|
Archive 63={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 64|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 64|Archive 64 &amp;rarr;]]}}|
Archive 64={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 65|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 65|Archive 65 &amp;rarr;]]}}|
Archive 65={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 66|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 66|Archive 66 &amp;rarr;]]}}|
Archive 66={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 67|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 67|Archive 67 &amp;rarr;]]}}|
Archive 67={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 68|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 68|Archive 68 &amp;rarr;]]}}|
Archive 68={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 69|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 69|Archive 69 &amp;rarr;]]}}|
Archive 69={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 70|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 70|Archive 70 &amp;rarr;]]}}|
Archive 70={{#ifexpr:({{#ifeq:{{{noredlinks|}}}|y|1|0}} and {{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 71|0|1}})||[[{{NAMESPACE}}:{{BASEPAGENAME}}/Archive 71|Archive 71 &amp;rarr;]]}}}}
|}&lt;includeonly&gt;{{{category|__NOEDITSECTION__}}}__NONEWSECTIONLINK__&lt;/includeonly&gt;&lt;noinclude&gt;

{{documentation}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ambox</title>
    <ns>10</ns>
    <id>1801</id>
    <revision>
      <id>15475</id>
      <parentid>4144</parentid>
      <timestamp>2011-12-10T15:33:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc link</comment>
      <text xml:space="preserve" bytes="1288">{{#ifeq:{{{subst}}}|SUBST
 |{{#if:{{{name|}}}
  |{{error|Template {{tlx|{{{name}}}}} has been incorrectly substituted.}}
 }}
}}{{#ifeq:{{{small}}}|left
 |{{ambox/core
  |small      = left
  |type       = {{{type|}}}
  |image      = {{#if:{{{smallimage|}}}
   |{{{smallimage}}}
   |{{{image|}}}
  }}
  |imageright = {{#if:{{{smallimageright|}}}
   |{{{smallimageright}}}
   |{{{imageright|}}}
  }}
  |style      = {{{style|}}}
  |textstyle  = {{{textstyle|}}}
  |text       = {{#if:{{{smalltext|}}}
   |{{{smalltext}}} 
   |{{{text}}} 
  }}
 }}
 |{{ambox/core
  |type       = {{{type|}}}
  |image      = {{{image|}}}
  |imageright = {{{imageright|}}}
  |style      = {{{style|}}}
  |textstyle  = {{{textstyle|}}}
  |text       = {{{text}}}
  |date       = {{#ifeq:{{FULLROOTPAGENAME}}|Template:{{PAGENAME:{{{name}}}}}
   |{{#ifeq:{{{date|¬}}}|¬||{{CURRENTMONTHNAME}} {{CURRENTYEAR}}}}
   |{{{date|}}}
  }}
 }}
}}{{cat handler
 |main={{ambox/category
  |cat={{{cat|}}}
  |date={{{date|}}}
  |all={{{all|}}}
 }}
 |template={{#ifeq:{{BASEPAGENAME}}|{{SUBPAGENAME}}|}}
}}{{#ifeq:{{FULLPAGENAME}}|Template:{{PAGENAME:{{{name}}}}}
 |{{#ifeq:{{{doc}}}|no|
  |{{documentation}}&lt;!-- Transclude documentation on template page --&gt;
 }}
}}&lt;noinclude&gt;

{{documentation|Template:mbox/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ambox/category</title>
    <ns>10</ns>
    <id>1802</id>
    <revision>
      <id>3604</id>
      <parentid>3603</parentid>
      <timestamp>2011-06-06T23:01:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="308">{{#if:{{{cat|}}}
 |{{#if:{{{date|}}}
  |[[Category:{{{cat}}} {{{preposition|from}}} {{{date}}}]]{{#ifexist:Category:{{{cat}}} {{{preposition|from}}} {{{date}}}|
   |[[Category:Articles with invalid date parameter in template]]
  }}
  |[[Category:{{{cat}}}]]
 }}
}}{{#if:{{{all|}}}
 |[[Category:{{{all}}}]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ambox/core</title>
    <ns>10</ns>
    <id>1803</id>
    <revision>
      <id>20008</id>
      <parentid>10525</parentid>
      <timestamp>2012-03-19T18:26:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2900">&lt;table class=&quot;metadata plainlinks ambox {{#switch:{{{small|}}}
| left = mbox-small-left
}} {{#switch:{{{type|}}}
| speedy     = ambox-speedy
| delete     = ambox-delete
| content    = ambox-content
| style      = ambox-style
| move       = ambox-move
| protection = ambox-protection
| notice     &lt;!-- notice = default --&gt;
| #default   = ambox-notice
}}&quot; style=&quot;{{{style|}}}&quot;&gt;&lt;!--
--&gt;&lt;tr&gt;&lt;!--
  --&gt;{{#switch:{{{image|}}}
     | blank    &lt;!-- Fall back to &quot;none&quot;, since deprecated. --&gt;
     | none = &lt;td class=&quot;mbox-empty-cell&quot;&gt;&lt;/td&gt;   &lt;!-- No image. Cell with some width or padding necessary for text cell to have 100% width. --&gt;
     | #default = &lt;!--
  --&gt;&lt;td class=&quot;mbox-image&quot;&gt;&lt;!--
    --&gt;{{#switch:{{{small|}}}
       | left = &lt;!-- Don't use the DIV --&gt; 
       | #default = &lt;div style=&quot;width: 52px;&quot;&gt; 
       }}&lt;!--
    --&gt;{{#if:{{{image|}}}
       | {{{image}}}
       | [[File:&lt;!--
      --&gt;{{#switch:{{{type|}}}
         | speedy     = Ambox speedy deletion.png
         | delete     = Ambox deletion.png
         | content    = Ambox content.png
         | style      = Edit-clear.svg
         | move       = Ambox move.png
         | protection = Ambox protection.png
         | notice          &lt;!-- notice = default --&gt;
         | #default   = Ambox notice.png
         }} | &lt;!--
      --&gt;{{#switch:{{{small|}}} 
         | left = 20x20px 
         | #default = 40x40px 
         }} | link= |alt= &lt;!--
      --&gt;]]&lt;!--
    --&gt;}}&lt;!--
    --&gt;{{#switch:{{{small|}}}
       | left = &lt;!-- Don't use the /DIV --&gt;
       | #default = &lt;/div&gt; 
       }}&lt;!--
  --&gt;&lt;/td&gt;&lt;!--
  --&gt;}}&lt;!--
  --&gt;&lt;td class=&quot;mbox-text&quot; style=&quot;{{{textstyle|}}}&quot;&gt;&lt;!--
   --&gt;{{{text}}} {{#if:{{{date|}}}|&lt;small&gt;''({{{date}}})''&lt;/small&gt;}}&lt;!--
  --&gt;&lt;/td&gt;&lt;!--
  --&gt;{{#if:{{{imageright|}}}
     | {{#ifeq:{{{imageright|}}}|none
       | &lt;!-- No image.--&gt;
       | &lt;td class=&quot;mbox-imageright&quot;&gt;&lt;!--
        --&gt;{{#switch:{{{small|}}}
           | left = {{{imageright}}}
           | #default = &lt;div style=&quot;width: 52px;&quot;&gt; {{{imageright}}} &lt;/div&gt;
           }}&lt;!--
      --&gt;&lt;/td&gt;&lt;!--
    --&gt;}}&lt;!--
  --&gt;}}&lt;!--
--&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!-- 
Detect and report usage with faulty &quot;type&quot; parameter:
--&gt;{{#switch:{{{type|}}}
|   &lt;!-- No type fed, is also valid input --&gt;
| speedy
| delete
| content
| style
| move
| protection
| notice     = &lt;!-- Do nothing, valid &quot;type&quot; --&gt;
| #default   = &lt;div style=&quot;text-align: center;&quot;&gt;This message box is using an invalid &quot;type={{{type|}}}&quot; parameter and needs fixing.&lt;/div&gt;[[Category:Wikipedia message box parameter needs fixing|{{main other|Main:}}{{FULLPAGENAME}}]]&lt;!-- Sort on namespace --&gt;
}}&lt;!-- 
Detect and report usage of deprecated &quot;image=blank&quot;:
--&gt;{{#switch:{{{image|}}}
| blank = [[Category:Wikipedia message box parameter needs fixing|{{main other|Main:}}{{FULLPAGENAME}}]]&lt;!-- Sort on namespace --&gt;
}}&lt;noinclude&gt;
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:anchor</title>
    <ns>10</ns>
    <id>12964</id>
    <revision>
      <id>65279</id>
      <timestamp>2013-09-06T22:09:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="675">{{#if:{{{1|}}}|&lt;span id=&quot;{{{1|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{2|}}}|&lt;span id=&quot;{{{2|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{3|}}}|&lt;span id=&quot;{{{3|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{4|}}}|&lt;span id=&quot;{{{4|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{5|}}}|&lt;span id=&quot;{{{5|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{6|}}}|&lt;span id=&quot;{{{6|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{7|}}}|&lt;span id=&quot;{{{7|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{8|}}}|&lt;span id=&quot;{{{8|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{9|}}}|&lt;span id=&quot;{{{9|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{10|}}}|&lt;span id=&quot;{{{10|}}}&quot;&gt;&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{11|}}}|&lt;span class=&quot;error&quot;&gt;[[Template:Anchor]] (or Anchors): too many anchors, maximum is 10.&lt;/span&gt;}}&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1>c2yyfcwzozsbbn693ucl9hyjhetli94</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:archive list long</title>
    <ns>10</ns>
    <id>10097</id>
    <revision>
      <id>48129</id>
      <parentid>48128</parentid>
      <timestamp>2013-05-18T18:35:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="946">{{#if: {{{num|}}} | {{(!}} cellpadding=&quot;0&quot; width=&quot;100%&quot; style=&quot;text-align: center; background-color: transparent;&quot;
{{#ifexpr: 1 &lt;= {{{num|0}}} |
{{!}} [[{{#rel2abs:./Archive 1|{{{root|}}}}}|Archive 1]]
{{!}} {{#ifexpr: 2 &lt;= {{{num|0}}} | [[{{#rel2abs:./Archive 2|{{{root|}}}}}|Archive 2]]}}
{{!}} {{#ifexpr: 3 &lt;= {{{num|0}}} | [[{{#rel2abs:./Archive 3|{{{root|}}}}}|Archive 3]]}}
{{!}}-
}}
{{#ifexpr: 4 &lt;= {{{num|0}}} |
{{!}} [[{{#rel2abs:./Archive 4|{{{root|}}}}}|Archive 4]]
{{!}} {{#ifexpr: 5 &lt;= {{{num|0}}} | [[{{#rel2abs:./Archive 5|{{{root|}}}}}|Archive 5]]}}
{{!}} {{#ifexpr: 6 &lt;= {{{num|0}}} |[[{{#rel2abs:./Archive 6|{{{root|}}}}}|Archive 6]]}}
{{!}}-
}}
{{#ifexpr: 7 &lt;= {{{num|0}}} |
{{!}} [[{{#rel2abs:./Archive 7|{{{root|}}}}}|Archive 7]]
{{!}} {{#ifexpr: 8 &lt;= {{{num|0}}} |[[{{#rel2abs:./Archive 8|{{{root|}}}}}|Archive 8]]}}
{{!}} {{#ifexpr: 9 &lt;= {{{num|0}}} |[[{{#rel2abs:./Archive 9|{{{root|}}}}}|Archive 9]]}}
{{!}}-
}}
{{!)}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:archives</title>
    <ns>10</ns>
    <id>10096</id>
    <revision>
      <id>48126</id>
      <parentid>48021</parentid>
      <timestamp>2013-05-18T18:33:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+num param</comment>
      <text xml:space="preserve" bytes="371">&lt;table class=&quot;tmbox&quot; style=&quot;text-align: center; {{#if:{{{box-width|}}}|width:{{{box-width}}};}} {{{style|}}}&quot;&gt;
&lt;tr&gt;&lt;th style=&quot;padding: 0.5em;&quot;&gt;[[Image:Replacement filing cabinet.svg|40px]]
{{{title|Archives}}}
&lt;/th&gt;&lt;td style=&quot;text-align:left; padding: 0.5em; min-width: 100px;&quot;&gt;{{archive list long|num={{{num|}}}|{{#if:{{{root|}}}|root}}={{{root}}} }}
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c</title>
    <ns>10</ns>
    <id>6244</id>
    <revision>
      <id>64029</id>
      <parentid>64012</parentid>
      <timestamp>2013-08-06T23:08:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:c]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="185">&lt;onlyinclude&gt;&lt;span class=&quot;t-c&quot;&gt;{{#tag:source|{{{code|{{trim|{{{1}}}}}}}}|lang={{{lang|{{{2|{{get_lang}}}}}}}}|enclose=none}}&lt;/span&gt;&lt;/onlyinclude&gt;
{{documentation | Template:source/doc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/algorithm/dsc bsearch</title>
    <ns>10</ns>
    <id>5967</id>
    <revision>
      <id>75269</id>
      <parentid>53054</parentid>
      <timestamp>2015-01-13T21:00:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | c/algorithm/bsearch | title=bsearch&lt;br&gt;bsearch_s | notes=&lt;br&gt;{{mark c11}} | searches an array for an element of unspecified type}}</text>
      <sha1>3xsyjggx5zecmwna041nkabdph7t1rk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/algorithm/dsc qsort</title>
    <ns>10</ns>
    <id>5968</id>
    <revision>
      <id>75268</id>
      <parentid>53057</parentid>
      <timestamp>2015-01-13T21:00:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="131">{{dsc fun | c/algorithm/qsort | title=qsort&lt;br&gt;qsort_s | notes=&lt;br&gt;{{mark c11}} | sorts a range of elements with unspecified type}}</text>
      <sha1>tbp5hr36lctlc5opnl6s9v41teqy5m7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/algorithm/navbar</title>
    <ns>10</ns>
    <id>6117</id>
    <revision>
      <id>39835</id>
      <parentid>35717</parentid>
      <timestamp>2012-09-28T19:55:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="148">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/algorithm/navbar heading
|content2 = c/algorithm/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/algorithm/navbar content</title>
    <ns>10</ns>
    <id>6119</id>
    <revision>
      <id>75270</id>
      <parentid>51765</parentid>
      <timestamp>2015-01-13T21:01:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="173">{{nv begin}}
{{nv ln | c/algorithm/qsort | qsort | qsort_s | notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/algorithm/bsearch| bsearch| bsearch_s|  notes=&lt;br&gt;{{mark c11}}}}
{{nv end}}</text>
      <sha1>0yzerb5esoflg4a7n40jzvw3xec30eu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/algorithm/navbar heading</title>
    <ns>10</ns>
    <id>6118</id>
    <revision>
      <id>35470</id>
      <parentid>21442</parentid>
      <timestamp>2012-06-15T22:26:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/algorithm/sidebar heading]] to [[Template:c/algorithm/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="28">[[c/algorithm | Algorithms]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/align/dsc alignas is defined</title>
    <ns>10</ns>
    <id>13708</id>
    <revision>
      <id>71919</id>
      <timestamp>2014-07-01T20:43:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new template for alignas_is_defined</comment>
      <text xml:space="preserve" bytes="105">{{dsc macro const | c/align/alignas_is_defined | expands to the integer constant 1 | notes={{mark c11}}}}</text>
      <sha1>6hfboy5fwyrbjdvhq60b0kp38s8sstq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/align/dsc alignof</title>
    <ns>10</ns>
    <id>13707</id>
    <revision>
      <id>72009</id>
      <parentid>71923</parentid>
      <timestamp>2014-07-08T13:02:43Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>&quot;query&quot; replaced with &quot;get&quot;</comment>
      <text xml:space="preserve" bytes="111">{{dsc macro fun | c/align/alignof | get the alignment requirement of a type or an object | notes={{mark c11}}}}</text>
      <sha1>5zt4d36t3lw8glogkxdx91n6g3mp4nl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/align/dsc alignof is defined</title>
    <ns>10</ns>
    <id>13709</id>
    <revision>
      <id>71920</id>
      <timestamp>2014-07-01T20:47:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new template for alignof_is_defined</comment>
      <text xml:space="preserve" bytes="105">{{dsc macro const | c/align/alignof_is_defined | expands to the integer constant 1 | notes={{mark c11}}}}</text>
      <sha1>jmijj4eijjc9zff031h7qwlxd5qx74l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc ATOMIC FLAG INIT</title>
    <ns>10</ns>
    <id>9293</id>
    <revision>
      <id>53060</id>
      <parentid>51766</parentid>
      <timestamp>2013-06-01T04:58:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list ATOMIC FLAG INIT]] to [[Template:c/atomic/dsc ATOMIC FLAG INIT]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc macro const | c/atomic/ATOMIC_FLAG_INIT | initializes a new {{c|atomic_flag}} | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc ATOMIC LOCK FREE consts</title>
    <ns>10</ns>
    <id>9292</id>
    <revision>
      <id>53064</id>
      <parentid>51767</parentid>
      <timestamp>2013-06-01T04:58:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list ATOMIC LOCK FREE consts]] to [[Template:c/atomic/dsc ATOMIC LOCK FREE consts]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="397">{{dsc macro const | c/atomic/ATOMIC_LOCK_FREE_consts | title=ATOMIC_BOOL_LOCK_FREE&lt;br&gt;ATOMIC_CHAR_LOCK_FREE&lt;br&gt;ATOMIC_CHAR16_T_LOCK_FREE&lt;br&gt;ATOMIC_CHAR32_T_LOCK_FREE&lt;br&gt;ATOMIC_WCHAR_T_LOCK_FREE&lt;br&gt;ATOMIC_SHORT_LOCK_FREE&lt;br&gt;ATOMIC_INT_LOCK_FREE&lt;br&gt;ATOMIC_LONG_LOCK_FREE&lt;br&gt;ATOMIC_LLONG_LOCK_FREE&lt;br&gt;ATOMIC_POINTER_LOCK_FREE | indicates that the given atomic type is lock-free | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc ATOMIC VAR INIT</title>
    <ns>10</ns>
    <id>9294</id>
    <revision>
      <id>53067</id>
      <parentid>51768</parentid>
      <timestamp>2013-06-01T04:58:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list ATOMIC VAR INIT]] to [[Template:c/atomic/dsc ATOMIC VAR INIT]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc macro fun | c/atomic/ATOMIC_VAR_INIT | initializes a new atomic object | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic compare exchange</title>
    <ns>10</ns>
    <id>9284</id>
    <revision>
      <id>53070</id>
      <parentid>51769</parentid>
      <timestamp>2013-06-01T04:58:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic compare exchange]] to [[Template:c/atomic/dsc atomic compare exchange]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="332">{{dsc fun | c/atomic/atomic_compare_exchange | title=atomic_compare_exchange_strong&lt;br&gt;atomic_compare_exchange_strong_explicit&lt;br&gt;atomic_compare_exchange_weak&lt;br&gt;atomic_compare_exchange_weak_explicit| swaps a value with the an atomic object if the old value is what is expected, otherwise reads the old value | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic exchange</title>
    <ns>10</ns>
    <id>9283</id>
    <revision>
      <id>53074</id>
      <parentid>51770</parentid>
      <timestamp>2013-06-01T04:58:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic exchange]] to [[Template:c/atomic/dsc atomic exchange]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="162">{{dsc fun | c/atomic/atomic_exchange | title=atomic_exchange&lt;br&gt;atomic_exchange_explicit| swaps a value with the value of an atomic object | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic fetch add</title>
    <ns>10</ns>
    <id>9285</id>
    <revision>
      <id>53077</id>
      <parentid>51771</parentid>
      <timestamp>2013-06-01T04:58:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic fetch add]] to [[Template:c/atomic/dsc atomic fetch add]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | c/atomic/atomic_fetch_add | title=atomic_fetch_add&lt;br&gt;atomic_fetch_add_explicit| atomic addition | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic fetch and</title>
    <ns>10</ns>
    <id>9289</id>
    <revision>
      <id>53080</id>
      <parentid>51772</parentid>
      <timestamp>2013-06-01T04:58:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic fetch and]] to [[Template:c/atomic/dsc atomic fetch and]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc fun | c/atomic/atomic_fetch_and | title=atomic_fetch_and&lt;br&gt;atomic_fetch_and_explicit| atomic logical AND | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic fetch or</title>
    <ns>10</ns>
    <id>9287</id>
    <revision>
      <id>53084</id>
      <parentid>51773</parentid>
      <timestamp>2013-06-01T04:58:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic fetch or]] to [[Template:c/atomic/dsc atomic fetch or]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc fun | c/atomic/atomic_fetch_or | title=atomic_fetch_or&lt;br&gt;atomic_fetch_or_explicit| atomic logical OR | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic fetch sub</title>
    <ns>10</ns>
    <id>9286</id>
    <revision>
      <id>53087</id>
      <parentid>51774</parentid>
      <timestamp>2013-06-01T04:58:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic fetch sub]] to [[Template:c/atomic/dsc atomic fetch sub]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc fun | c/atomic/atomic_fetch_sub | title=atomic_fetch_sub&lt;br&gt;atomic_fetch_sub_explicit| atomic subtraction | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic fetch xor</title>
    <ns>10</ns>
    <id>9288</id>
    <revision>
      <id>53091</id>
      <parentid>51775</parentid>
      <timestamp>2013-06-01T04:58:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic fetch xor]] to [[Template:c/atomic/dsc atomic fetch xor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc fun | c/atomic/atomic_fetch_xor | title=atomic_fetch_xor&lt;br&gt;atomic_fetch_xor_explicit| atomic logical exclusive OR | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic flag</title>
    <ns>10</ns>
    <id>9297</id>
    <revision>
      <id>53094</id>
      <parentid>39141</parentid>
      <timestamp>2013-06-01T04:58:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic flag]] to [[Template:c/atomic/dsc atomic flag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dcl list struct | c/atomic/atomic_flag | lock-free atomic boolean flag | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic flag clear</title>
    <ns>10</ns>
    <id>9278</id>
    <revision>
      <id>53097</id>
      <parentid>51776</parentid>
      <timestamp>2013-06-01T04:58:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic flag clear]] to [[Template:c/atomic/dsc atomic flag clear]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc fun | c/atomic/atomic_flag_clear | title=atomic_flag_clear&lt;br&gt;atomic_flag_clear_explicit | sets an atomic_flag to false | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic flag test and set</title>
    <ns>10</ns>
    <id>9277</id>
    <revision>
      <id>53100</id>
      <parentid>51777</parentid>
      <timestamp>2013-06-01T04:58:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic flag test and set]] to [[Template:c/atomic/dsc atomic flag test and set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="195">{{dsc fun | c/atomic/atomic_flag_test_and_set | title=atomic_flag_test_and_set&lt;br&gt;atomic_flag_test_and_set_explicit | sets an atomic_flag to true and returns the old value | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic init</title>
    <ns>10</ns>
    <id>9279</id>
    <revision>
      <id>53104</id>
      <parentid>51778</parentid>
      <timestamp>2013-06-01T04:58:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic init]] to [[Template:c/atomic/dsc atomic init]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | c/atomic/atomic_init | initializes an existing atomic object | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic is lock free</title>
    <ns>10</ns>
    <id>9280</id>
    <revision>
      <id>53107</id>
      <parentid>51779</parentid>
      <timestamp>2013-06-01T04:59:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic is lock free]] to [[Template:c/atomic/dsc atomic is lock free]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc fun | c/atomic/atomic_is_lock_free | indicates whether the atomic object is lock-free | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic load</title>
    <ns>10</ns>
    <id>9282</id>
    <revision>
      <id>53110</id>
      <parentid>51780</parentid>
      <timestamp>2013-06-01T04:59:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic load]] to [[Template:c/atomic/dsc atomic load]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc fun | c/atomic/atomic_load | title=atomic_load&lt;br&gt;atomic_load_explicit| reads a value from an atomic object | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic signal fence</title>
    <ns>10</ns>
    <id>9291</id>
    <revision>
      <id>53114</id>
      <parentid>51781</parentid>
      <timestamp>2013-06-01T04:59:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic signal fence]] to [[Template:c/atomic/dsc atomic signal fence]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc fun | c/atomic/atomic_signal_fence | fence between a thread and a signal handler executed in the same thread | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic store</title>
    <ns>10</ns>
    <id>9281</id>
    <revision>
      <id>53117</id>
      <parentid>51782</parentid>
      <timestamp>2013-06-01T04:59:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic store]] to [[Template:c/atomic/dsc atomic store]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc fun | c/atomic/atomic_store | title=atomic_store&lt;br&gt;atomic_store_explicit| stores a value in an atomic object | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc atomic thread fence</title>
    <ns>10</ns>
    <id>9290</id>
    <revision>
      <id>53120</id>
      <parentid>51783</parentid>
      <timestamp>2013-06-01T04:59:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list atomic thread fence]] to [[Template:c/atomic/dsc atomic thread fence]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc fun | c/atomic/atomic_thread_fence | generic memory order-dependent fence synchronization primitive  | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc kill dependency</title>
    <ns>10</ns>
    <id>9295</id>
    <revision>
      <id>53123</id>
      <parentid>51784</parentid>
      <timestamp>2013-06-01T04:59:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list kill dependency]] to [[Template:c/atomic/dsc kill dependency]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc macro fun | c/atomic/kill_dependency | breaks a dependency chain for {{c|memory_order_consume}} | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/dsc memory order</title>
    <ns>10</ns>
    <id>9296</id>
    <revision>
      <id>53127</id>
      <parentid>51785</parentid>
      <timestamp>2013-06-01T04:59:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/atomic/dcl list memory order]] to [[Template:c/atomic/dsc memory order]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc enum | c/atomic/memory_order | defines memory ordering constraints | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/navbar</title>
    <ns>10</ns>
    <id>6535</id>
    <revision>
      <id>39836</id>
      <parentid>35471</parentid>
      <timestamp>2012-09-28T19:55:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="143">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/atomic/navbar heading
|content2 = c/atomic/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/navbar content</title>
    <ns>10</ns>
    <id>9382</id>
    <revision>
      <id>51786</id>
      <parentid>39551</parentid>
      <timestamp>2013-06-01T04:34:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="913">{{nv begin}}
{{nv h2 | Types }}
{{nv ln | c/atomic/memory_order}}
{{nv ln | c/atomic/atomic_flag}}

{{nv h2 | Macros }}
{{nv ln | c/atomic/ATOMIC_LOCK_FREE_consts | ATOMIC_***_LOCK_FREE}}
{{nv ln | c/atomic/ATOMIC_FLAG_INIT}}
{{nv ln | c/atomic/ATOMIC_VAR_INIT}}
{{nv ln | c/atomic/kill_dependency}}

{{nv h2 | Functions }}
{{nv ln | c/atomic/atomic_flag_test_and_set}}
{{nv ln | c/atomic/atomic_flag_clear}}
{{nv ln | c/atomic/atomic_init}}
{{nv ln | c/atomic/atomic_is_lock_free}}
{{nv ln | c/atomic/atomic_store}}
{{nv ln | c/atomic/atomic_load}}
{{nv ln | c/atomic/atomic_exchange}}
{{nv ln | c/atomic/atomic_compare_exchange}}
{{nv ln | c/atomic/atomic_fetch_add}}
{{nv ln | c/atomic/atomic_fetch_sub}}
{{nv ln | c/atomic/atomic_fetch_or}}
{{nv ln | c/atomic/atomic_fetch_xor}}
{{nv ln | c/atomic/atomic_fetch_and}}
{{nv ln | c/atomic/atomic_thread_fence}}
{{nv ln | c/atomic/atomic_signal_fence}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/navbar heading</title>
    <ns>10</ns>
    <id>6536</id>
    <revision>
      <id>39081</id>
      <parentid>35472</parentid>
      <timestamp>2012-08-28T14:24:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="40">[[c/atomic | Atomic operations library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/atomic/type-requirements</title>
    <ns>10</ns>
    <id>14475</id>
    <revision>
      <id>81126</id>
      <parentid>81121</parentid>
      <timestamp>2015-09-30T15:47:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+args</comment>
      <text xml:space="preserve" bytes="538">This is a [[c/language/generic|generic function]] defined for all [[c/language/atomic|atomic object types]] {{tt|A}}. The argument is pointer to a volatile atomic type to accept addresses of both non-volatile and [[c/language/volatile|volatile]] (e.g. memory-mapped I/O) atomic variables.{{#switch:{{{1|}}}
|math={{tt|M}} is either the non-atomic type corresponding to {{tt|A}} if {{tt|A}} is atomic integer type, or {{lc|ptrdiff_t}} if {{tt|A}} is atomic pointer type.
|noc=
|{{tt|C}} is the non-atomic type corresponding to {{tt|A}}.
}}</text>
      <sha1>pwa0cievcljb1fmc8ctj0569z8nsvq6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc CLOCKS PER SEC</title>
    <ns>10</ns>
    <id>5955</id>
    <revision>
      <id>53130</id>
      <parentid>51787</parentid>
      <timestamp>2013-06-01T04:59:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/chrono/dcl list CLOCKS PER SEC]] to [[Template:c/chrono/dsc CLOCKS PER SEC]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc macro const | c/chrono/CLOCKS_PER_SEC | number of processor clock ticks per second}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc TIME UTC</title>
    <ns>10</ns>
    <id>14063</id>
    <revision>
      <id>77782</id>
      <timestamp>2015-04-08T14:03:03Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>Created page with &quot;{{dsc macro const | c/chrono/TIME_UTC | designates the UTC time base}}&quot;</comment>
      <text xml:space="preserve" bytes="70">{{dsc macro const | c/chrono/TIME_UTC | designates the UTC time base}}</text>
      <sha1>iw30nu692go1u6wk3mcver3gu427v0c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc asctime</title>
    <ns>10</ns>
    <id>5962</id>
    <revision>
      <id>75288</id>
      <parentid>71359</parentid>
      <timestamp>2015-01-13T21:17:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | c/chrono/asctime | title=asctime&lt;br&gt;asctime_s | notes=&lt;br&gt;{{mark c11}} | converts a {{tt|tm}} object to a textual representation}}</text>
      <sha1>lo3h1spqqmkaaqexiwj1lmnnhows6qh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc clock</title>
    <ns>10</ns>
    <id>5963</id>
    <revision>
      <id>53137</id>
      <parentid>51789</parentid>
      <timestamp>2013-06-01T04:59:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/chrono/dcl list clock]] to [[Template:c/chrono/dsc clock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | c/chrono/clock | returns raw processor clock time since the program is started}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc clock t</title>
    <ns>10</ns>
    <id>6161</id>
    <revision>
      <id>78090</id>
      <parentid>53140</parentid>
      <timestamp>2015-04-29T15:10:25Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>7.27.2.1/2 uses &quot;processor time&quot; and /3 &quot;era&quot;</comment>
      <text xml:space="preserve" bytes="66">{{dsc typedef | c/chrono/clock_t | processor time since era type}}</text>
      <sha1>bi6ap194p8oucnt5x7b6czjpsgs1vge</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc ctime</title>
    <ns>10</ns>
    <id>5961</id>
    <revision>
      <id>75290</id>
      <parentid>75289</parentid>
      <timestamp>2015-01-13T21:18:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="139">{{dsc fun | c/chrono/ctime| title=ctime&lt;br&gt;ctime_s | notes=&lt;br&gt;{{mark c11}} | converts a {{tt|time_t}} object to a textual representation}}</text>
      <sha1>4orxfnjpcffpd2lc735t4dgezbxvm0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc difftime</title>
    <ns>10</ns>
    <id>5965</id>
    <revision>
      <id>53147</id>
      <parentid>51792</parentid>
      <timestamp>2013-06-01T04:59:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/chrono/dcl list difftime]] to [[Template:c/chrono/dsc difftime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | c/chrono/difftime | computes the difference between times}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc gmtime</title>
    <ns>10</ns>
    <id>5958</id>
    <revision>
      <id>75291</id>
      <parentid>71521</parentid>
      <timestamp>2015-01-13T21:19:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="172">{{dsc fun | c/chrono/gmtime | title=gmtime&lt;br&gt;gmtime_s | notes=&lt;br&gt;{{mark c11}} | converts time since epoch to calendar time expressed as Coordinated Universal Time (UTC)}}</text>
      <sha1>mc41it9k05ts3t484aet7hh7r861xcb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc localtime</title>
    <ns>10</ns>
    <id>5957</id>
    <revision>
      <id>75292</id>
      <parentid>53154</parentid>
      <timestamp>2015-01-13T21:19:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="159">{{dsc fun | c/chrono/localtime | title=localtime&lt;br&gt;localtime_s | notes=&lt;br&gt;{{mark c11}} | converts time since epoch to calendar time expressed as local time}}</text>
      <sha1>g5lw1a44cter39a2qm1x4ihziq187i6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc mktime</title>
    <ns>10</ns>
    <id>5956</id>
    <revision>
      <id>53157</id>
      <parentid>51795</parentid>
      <timestamp>2013-06-01T04:59:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/chrono/dcl list mktime]] to [[Template:c/chrono/dsc mktime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | c/chrono/mktime | converts calendar time to time since epoch}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc strftime</title>
    <ns>10</ns>
    <id>5960</id>
    <revision>
      <id>53160</id>
      <parentid>51796</parentid>
      <timestamp>2013-06-01T04:59:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/chrono/dcl list strftime]] to [[Template:c/chrono/dsc strftime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | c/chrono/strftime | converts a {{tt|tm}} object to custom textual representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc time</title>
    <ns>10</ns>
    <id>5964</id>
    <revision>
      <id>71566</id>
      <parentid>53164</parentid>
      <timestamp>2014-06-13T13:44:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted &quot;calendar&quot;</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | c/chrono/time | returns the current calendar time of the system as time since epoch}}</text>
      <sha1>540i5rcm6skrpqo0bh40ubxka5ptyod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc time t</title>
    <ns>10</ns>
    <id>6160</id>
    <revision>
      <id>71567</id>
      <parentid>53167</parentid>
      <timestamp>2014-06-13T13:53:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted &quot;calendar&quot;</comment>
      <text xml:space="preserve" bytes="66">{{dsc typedef | c/chrono/time_t | calendar time since epoch type}}</text>
      <sha1>i3q72wwfkuxprpdbc6nuvmxtfg13anm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc timespec</title>
    <ns>10</ns>
    <id>13680</id>
    <revision>
      <id>75411</id>
      <parentid>71563</parentid>
      <timestamp>2015-01-17T02:24:37Z</timestamp>
      <contributor>
        <username>A3f.at</username>
        <id>3652</id>
      </contributor>
      <minor/>
      <comment>s/class/struct</comment>
      <text xml:space="preserve" bytes="96">{{dsc struct | c/chrono/timespec | time in seconds and nanoseconds | notes={{mark since c11}} }}</text>
      <sha1>at2dmqkn91foqtnwygliwps9c0wpv0c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc timespec get</title>
    <ns>10</ns>
    <id>13681</id>
    <revision>
      <id>71556</id>
      <timestamp>2014-06-13T12:41:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | c/chrono/timespec_get | returns the calendar time based on a given time base | notes={{mark since c11}} }}</text>
      <sha1>l8xkqry1s64hdnvs267qb810aio27c5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc tm</title>
    <ns>10</ns>
    <id>6159</id>
    <revision>
      <id>75410</id>
      <parentid>53170</parentid>
      <timestamp>2015-01-17T02:24:15Z</timestamp>
      <contributor>
        <username>A3f.at</username>
        <id>3652</id>
      </contributor>
      <minor/>
      <comment>s/class/struct</comment>
      <text xml:space="preserve" bytes="49">{{dsc struct | c/chrono/tm | calendar time type}}</text>
      <sha1>3w2d3fxiog4u5aju9ilk84akfh3nnu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/dsc wcsftime</title>
    <ns>10</ns>
    <id>5959</id>
    <revision>
      <id>74567</id>
      <parentid>53173</parentid>
      <timestamp>2014-12-18T20:39:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | c/chrono/wcsftime | converts a tm object to custom wide string textual representation|notes={{mark c95}}}}</text>
      <sha1>qc2ml5ld9teb98to503ayk0gni8y05k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/gmtime localtime example</title>
    <ns>10</ns>
    <id>13997</id>
    <revision>
      <id>78629</id>
      <parentid>78559</parentid>
      <timestamp>2015-05-31T13:41:43Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>-parens</comment>
      <text xml:space="preserve" bytes="609">{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;time.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    time_t t = time(NULL);
    printf(&quot;UTC:   %s&quot;, asctime(gmtime(&amp;t)));
    printf(&quot;local: %s&quot;, asctime(localtime(&amp;t)));

#ifdef __STDC_LIB_EXT1__
    struct tm buf;
    char str[26];
    asctime_s(str,sizeof str,gmtime_s(&amp;t, &amp;buf));
    printf(&quot;UTC:   %s&quot;, str);
    asctime_s(str,sizeof str,localtime_s(&amp;t, &amp;buf)));
    printf(&quot;local: %s&quot;, str);
#endif
}
 | output=
UTC:   Tue Feb 17 18:12:09 2015
local: Tue Feb 17 13:12:09 2015
UTC:   Tue Feb 17 18:12:09 2015
local: Tue Feb 17 13:12:09 2015
}}</text>
      <sha1>aqj2pcpw8qufoo9ac4fsyaa9q0r997c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/navbar</title>
    <ns>10</ns>
    <id>6032</id>
    <revision>
      <id>39837</id>
      <parentid>35473</parentid>
      <timestamp>2012-09-28T19:55:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="142">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/chrono/navbar heading
|content2 = c/chrono/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/navbar content</title>
    <ns>10</ns>
    <id>6472</id>
    <revision>
      <id>75293</id>
      <parentid>74569</parentid>
      <timestamp>2015-01-13T21:20:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="840">{{nv begin}}
{{nv h1 | Functions}}
{{nv h2 | Time manipulation}}
{{nv ln | c/chrono/difftime}}
{{nv ln | c/chrono/time}}
{{nv ln | c/chrono/clock}}
{{nv ln | c/chrono/timespec_get | notes={{mark c11}}}}

{{nv h2 | Format conversions}}
{{nv ln | c/chrono/asctime|asctime|asctime_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/chrono/ctime|ctime|ctime_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/chrono/strftime}}
{{nv ln | c/chrono/wcsftime| notes={{mark c95}}}}
{{nv ln | c/chrono/gmtime|gmtime|gmtime_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/chrono/localtime|localtime|localtime_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/chrono/mktime}}

{{nv h1 | Constants}}
{{nv ln | c/chrono/CLOCKS_PER_SEC}}

{{nv h1 | Types}}
{{nv ln | c/chrono/tm}}
{{nv ln | c/chrono/time_t}}
{{nv ln | c/chrono/clock_t}}
{{nv ln | c/chrono/timespec | notes={{mark c11}}}}
{{nv end}}</text>
      <sha1>pkv6j6wgr4ziovxab3oq32p5aqaq7kj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/chrono/navbar heading</title>
    <ns>10</ns>
    <id>6035</id>
    <revision>
      <id>35338</id>
      <parentid>21351</parentid>
      <timestamp>2012-06-15T22:23:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/chrono/sidebar heading]] to [[Template:c/chrono/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="38">[[c/chrono | Date and time utilities]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/core</title>
    <ns>10</ns>
    <id>12774</id>
    <revision>
      <id>61673</id>
      <timestamp>2013-06-08T04:49:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="151">&lt;onlyinclude&gt;{{#tag:source|{{{code|{{{1}}}}}}|lang={{{lang|{{{2|{{get_lang}}}}}}}}|enclose=none}}&lt;/onlyinclude&gt;
{{documentation | Template:source/doc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/abort handler s</title>
    <ns>10</ns>
    <id>13935</id>
    <revision>
      <id>75313</id>
      <timestamp>2015-01-13T21:45:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc fun | c/error/abort_handler_s  | abort callback for the bounds-checked functions |notes={{mark c11}}}}</text>
      <sha1>l497hto72xc19fxkj46uk8uialmg0ki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/dsc assert</title>
    <ns>10</ns>
    <id>6400</id>
    <revision>
      <id>53177</id>
      <parentid>51802</parentid>
      <timestamp>2013-06-01T04:59:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/error/dcl list assert]] to [[Template:c/error/dsc assert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc macro fun | c/error/assert | aborts the program if the user-specified condition is not {{c|true}}. May be disabled for release builds}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/dsc errno</title>
    <ns>10</ns>
    <id>6402</id>
    <revision>
      <id>53180</id>
      <parentid>51803</parentid>
      <timestamp>2013-06-01T04:59:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/error/dcl list errno]] to [[Template:c/error/dsc errno]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc | {{dsc member | c/error/errno | errno }} | macro which expands to POSIX-compatible thread-local error number variable&lt;br/&gt;{{mark|macro variable}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/dsc errno macros</title>
    <ns>10</ns>
    <id>6401</id>
    <revision>
      <id>53183</id>
      <parentid>51804</parentid>
      <timestamp>2013-06-01T04:59:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/error/dcl list errno macros]] to [[Template:c/error/dsc errno macros]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc macro const | c/error/errno_macros | title=E2BIG, EACCES, ..., EXDEV | macros for standard POSIX-compatible error conditions}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/ignore handler s</title>
    <ns>10</ns>
    <id>13936</id>
    <revision>
      <id>75314</id>
      <timestamp>2015-01-13T21:46:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | c/error/ignore_handler_s  | ignore callback for the bounds-checked functions |notes={{mark c11}}}}</text>
      <sha1>2173i1jh36bchyn2suuto9ncsl09tne</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/navbar</title>
    <ns>10</ns>
    <id>6406</id>
    <revision>
      <id>39838</id>
      <parentid>35475</parentid>
      <timestamp>2012-09-28T19:55:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="140">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/error/navbar heading
|content2 = c/error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/navbar content</title>
    <ns>10</ns>
    <id>6408</id>
    <revision>
      <id>76089</id>
      <parentid>70418</parentid>
      <timestamp>2015-02-09T19:30:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>_s</comment>
      <text xml:space="preserve" bytes="430">{{nv begin}}
{{nv h2 | Error codes}}
{{nv | [[c/error/errno_macros | Error codes]] }}
{{nv ln | c/error/errno}}

{{nv h2 | Assertions}}
{{nv ln | c/error/assert}}
{{nv ln | c/error/static_assert|notes={{mark c11}}}}

{{nv h2 | Bounds checking}}
{{nv ln | c/error/set_constraint_handler_s|notes={{mark c11}}}}
{{nv ln | c/error/abort_handler_s|notes={{mark c11}}}}
{{nv ln | c/error/ignore_handler_s|notes={{mark c11}}}}
{{nv end}}</text>
      <sha1>65i7mxomxbe4vk2sjsnnx547tmviomm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/navbar heading</title>
    <ns>10</ns>
    <id>6407</id>
    <revision>
      <id>34620</id>
      <parentid>25464</parentid>
      <timestamp>2012-06-15T22:06:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/error/sidebar heading]] to [[Template:c/error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="28">[[c/error | Error handling]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/set constraint handler example</title>
    <ns>10</ns>
    <id>14110</id>
    <revision>
      <id>78578</id>
      <timestamp>2015-05-27T02:10:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="884">{{example|code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
#ifdef __STDC_LIB_EXT1__
    char dst[2];
    set_constraint_handler_s(ignore_handler_s);
    int r = strcpy_s(dst, sizeof dst, &quot;Too long!&quot;);
    printf(&quot;dst = \&quot;%s\&quot;, r = %d\n&quot;, dst, r);
    set_constraint_handler_s(abort_handler_s);
    r = strcpy_s(dst, sizeof dst, &quot;Too long!&quot;);
    printf(&quot;dst = \&quot;%s\&quot;, r = %d\n&quot;, dst, r);
#endif
}
|p=true
|output=
dst = &quot;&quot;, r = 22
abort_handler_s was called in response to a runtime-constraint violation.

The runtime-constraint violation was caused by the following expression in strcpy_s:
(s1max &lt;= (s2_len=strnlen_s(s2, s1max)) ) (in string_s.c:62)

Note to end users: This program was terminated as a result
of a bug present in the software. Please reach out to your
software's vendor to get more help.
Aborted
}}</text>
      <sha1>bq1gtg1klodoj22r5o1kv5eja0qy6xi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/error/set constraint handler s</title>
    <ns>10</ns>
    <id>13934</id>
    <revision>
      <id>75312</id>
      <timestamp>2015-01-13T21:44:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">{{dsc fun | c/error/set_constraint_handler_s  | set the error callback for bounds-checked functions |notes={{mark c11}}}}</text>
      <sha1>2nehqs5xva9c03xbvxrr971k4zqpbrp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/dsc asprintf</title>
    <ns>10</ns>
    <id>15498</id>
    <revision>
      <id>85672</id>
      <parentid>85660</parentid>
      <timestamp>2016-05-01T14:29:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark</comment>
      <text xml:space="preserve" bytes="238">{{dsc fun | c/experimental/dynamic/asprintf | title=asprintf&lt;br&gt;aswprintf&lt;br&gt;vasprintf&lt;br&gt;vaswprintf| variants of {{lc|sprintf}} etc that write to automatically-allocated buffer and return a pointer to it|notes={{mark since dynamic ts}}}}</text>
      <sha1>tf1ggokqhcswht2kc750mohysbpaoj8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/dsc fmemopen</title>
    <ns>10</ns>
    <id>15496</id>
    <revision>
      <id>85674</id>
      <parentid>85658</parentid>
      <timestamp>2016-05-01T14:29:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark</comment>
      <text xml:space="preserve" bytes="129">{{dsc fun | c/experimental/dynamic/fmemopen | opens a fixed-size memory buffer as an I/O stream|notes={{mark since dynamic ts}}}}</text>
      <sha1>gop2dc21wu0vt7n7wmq19zfc7zfipt3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/dsc getline</title>
    <ns>10</ns>
    <id>15494</id>
    <revision>
      <id>85687</id>
      <parentid>85670</parentid>
      <timestamp>2016-05-02T14:38:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merged getline and getdelim</comment>
      <text xml:space="preserve" bytes="214">{{dsc fun | c/experimental/dynamic/getline | title=getline&lt;br&gt;getwline&lt;br&gt;getdelim&lt;br&gt;getwdelim | read from a stream into a automatically resized buffer until delimiter/end of line|notes={{mark since dynamic ts}}}}</text>
      <sha1>473vupx1981igtpvx66iy5061p2813j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/dsc open memstream</title>
    <ns>10</ns>
    <id>15497</id>
    <revision>
      <id>85673</id>
      <parentid>85659</parentid>
      <timestamp>2016-05-01T14:29:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark</comment>
      <text xml:space="preserve" bytes="185">{{dsc fun | c/experimental/dynamic/open_memstream | title=open_memstream&lt;br&gt;open_wmemstream| opens a dynamically resized memory buffer as an I/O stream|notes={{mark since dynamic ts}}}}</text>
      <sha1>dpm5srgdnewlxo1wl9pb1jhtsydg9q9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/dsc strdup</title>
    <ns>10</ns>
    <id>15495</id>
    <revision>
      <id>85668</id>
      <parentid>85657</parentid>
      <timestamp>2016-05-01T14:28:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | c/experimental/dynamic/strdup | allocate a copy of a string|notes={{mark since dynamic ts}}}}</text>
      <sha1>jbx5pua3fuctcj37bnd7yxrb8oau9ce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/dsc strndup</title>
    <ns>10</ns>
    <id>15500</id>
    <revision>
      <id>85669</id>
      <parentid>85662</parentid>
      <timestamp>2016-05-01T14:28:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | c/experimental/dynamic/strndup | allocate a copy of a string up to specified size|notes={{mark since dynamic ts}}}}</text>
      <sha1>hwf3ek8bc5pnu5jmid1qfcy46rpci94</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/macro note</title>
    <ns>10</ns>
    <id>15506</id>
    <revision>
      <id>85681</id>
      <timestamp>2016-05-02T13:50:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="269">As all functions from Dynamic Memory TS, {{tt|{{{1}}}}} is only guaranteed to be available if {{c|__STDC_ALLOC_LIB__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT2__}} to the integer constant {{c|1}} before including {{tt|{{{2}}}}}.</text>
      <sha1>iljf0b0a7mc1uew56ero92orhjgqbjj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/navbar</title>
    <ns>10</ns>
    <id>13912</id>
    <revision>
      <id>75063</id>
      <timestamp>2015-01-05T15:16:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/experimental/navbar heading
|content2 = c/experimental/navbar content
|heading3 = c/experimental/dynamic/navbar heading
|content3 = c/experimental/dynamic/navbar content
}}</text>
      <sha1>8wwlr42cuz31wrypkabanelu4p4hqs3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/navbar content</title>
    <ns>10</ns>
    <id>13914</id>
    <revision>
      <id>85686</id>
      <parentid>75065</parentid>
      <timestamp>2016-05-02T14:37:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>combined getline and getdelim</comment>
      <text xml:space="preserve" bytes="470">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv ln | c/experimental/dynamic/fmemopen | fmemopen}}
{{nv ln | c/experimental/dynamic/open_memstream | open_memstream | open_wmemstream}}
{{nv ln | c/experimental/dynamic/asprintf | asprintf | aswprintf | vasprintf | vaswprintf}}
{{nv ln | c/experimental/dynamic/getline | getline | getwline| getdelim | getwdelim}}
{{nv ln | c/experimental/dynamic/strdup }}
{{nv ln | c/experimental/dynamic/strndup }}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>fwior2ns1zfiykk0urhvmxwo9hznqlf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/dynamic/navbar heading</title>
    <ns>10</ns>
    <id>13913</id>
    <revision>
      <id>75064</id>
      <timestamp>2015-01-05T15:16:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="54">[[c/experimental/dynamic | Dynamic memory extensions]]</text>
      <sha1>jdc1r61zpo86ol4mtdq270cu8r8js2h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext1/navbar</title>
    <ns>10</ns>
    <id>16220</id>
    <revision>
      <id>91182</id>
      <timestamp>2017-03-24T15:43:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/experimental/navbar heading
|content2 = c/experimental/navbar content
|heading3 = c/experimental/fpext1/navbar heading
|content3 = c/experimental/fpext1/navbar content
}}</text>
      <sha1>ba7dt6f0yoanw6f1r8odzx5hkfkdcik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext1/navbar heading</title>
    <ns>10</ns>
    <id>16221</id>
    <revision>
      <id>91184</id>
      <timestamp>2017-03-24T15:45:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="83">[[c/experimental/fpext1 | Floating-point extensions part 1: Binary floating-point]]</text>
      <sha1>pehc6osjyzkweqljspv81r2bwt4r4c7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc acospi</title>
    <ns>10</ns>
    <id>16156</id>
    <revision>
      <id>89949</id>
      <parentid>89948</parentid>
      <timestamp>2017-01-31T17:37:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="211">{{dsc fun | c/experimental/fpext4/acospi | title=acospi acospif acospil&lt;br&gt;acospifN acospifNx&lt;br&gt;acospidN acospidNx|compute arccos(x)/π (measuring the angle in half-revolutions)|notes={{mark since fpext4 ts}}}}</text>
      <sha1>4yqyha1ovg7y7zlxgaa2k0xvmn2w9wy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc asinpi</title>
    <ns>10</ns>
    <id>16157</id>
    <revision>
      <id>89950</id>
      <timestamp>2017-01-31T17:39:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="211">{{dsc fun | c/experimental/fpext4/asinpi | title=asinpi asinpif asinpil&lt;br&gt;asinpifN asinpifNx&lt;br&gt;asinpidN asinpidNx|compute arcsin(x)/π (measuring the angle in half-revolutions)|notes={{mark since fpext4 ts}}}}</text>
      <sha1>4sxbjzmjuo9lywct0dejdo8zky31hzx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc atan2pi</title>
    <ns>10</ns>
    <id>16159</id>
    <revision>
      <id>89952</id>
      <timestamp>2017-01-31T17:41:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="221">{{dsc fun | c/experimental/fpext4/atan2pi | title=atan2pi atan2pif atan2pil&lt;br&gt;atan2pifN atan2pifNx&lt;br&gt;atan2pidN atan2pidNx|compute arctan(y/x)/π (measuring the angle in half-revolutions)|notes={{mark since fpext4 ts}}}}</text>
      <sha1>4ntaq4peeex5hjtbtiso44qjkl2lz82</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc atanpi</title>
    <ns>10</ns>
    <id>16158</id>
    <revision>
      <id>89951</id>
      <timestamp>2017-01-31T17:40:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="211">{{dsc fun | c/experimental/fpext4/atanpi | title=atanpi atanpif atanpil&lt;br&gt;atanpifN atanpifNx&lt;br&gt;atanpidN atanpidNx|compute arctan(x)/π (measuring the angle in half-revolutions)|notes={{mark since fpext4 ts}}}}</text>
      <sha1>2yemhwhjjwprckjp79lt75aq48y3bv1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc compoundn</title>
    <ns>10</ns>
    <id>16170</id>
    <revision>
      <id>89965</id>
      <timestamp>2017-01-31T18:04:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="224">{{dsc fun | c/experimental/fpext4/compoundn | title=compoundn compoundnf compoundnl&lt;br&gt;compoundnfN compoundnfNx&lt;br&gt;compoundndN compoundndNx|compute compound interest, {{math|(1+x){{su|p=n}}}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>oy6efml9nfy0m8ibst5qe720mdmstsn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc cospi</title>
    <ns>10</ns>
    <id>16160</id>
    <revision>
      <id>89953</id>
      <timestamp>2017-01-31T17:43:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="199">{{dsc fun | c/experimental/fpext4/cospi | title=cospi cospif cospil&lt;br&gt;cospifN cospifNx&lt;br&gt;cospidN cospidNx|compute cos(πx) (measuring the angle in half-revolutions)|notes={{mark since fpext4 ts}}}}</text>
      <sha1>id8eqbl9jtoywep03n93hzidmaorpd8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc exp10</title>
    <ns>10</ns>
    <id>16165</id>
    <revision>
      <id>89959</id>
      <timestamp>2017-01-31T17:56:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="170">{{dsc fun | c/experimental/fpext4/exp10 | title=exp10 exp10f exp10l&lt;br&gt;exp10fN exp10fNx&lt;br&gt;exp10dN exp10dNx|compute {{math|10{{su|p=x}}}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>t779pextno28yvtyjdgt5bdxi65jj6h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc exp10m1</title>
    <ns>10</ns>
    <id>16166</id>
    <revision>
      <id>89960</id>
      <timestamp>2017-01-31T17:56:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="188">{{dsc fun | c/experimental/fpext4/exp10m1 | title=exp10m1 exp10m1f exp10m1l&lt;br&gt;exp10m1fN exp10m1fNx&lt;br&gt;exp10m1dN exp10m1dNx|compute {{math|10{{su|p=x}}-1}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>5vlaqawje233i7ft7n9y31ivwqdd41n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc exp2m1</title>
    <ns>10</ns>
    <id>16164</id>
    <revision>
      <id>89958</id>
      <timestamp>2017-01-31T17:54:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="179">{{dsc fun | c/experimental/fpext4/exp2m1 | title=exp2m1 exp2m1f exp2m1l&lt;br&gt;exp2m1fN exp2m1fNx&lt;br&gt;exp2m1dN exp2m1dNx|compute {{math|2{{su|p=x}}-1}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>9rdq2nrd555agrql3qqumlzqxallcet</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc log10p1</title>
    <ns>10</ns>
    <id>16168</id>
    <revision>
      <id>89962</id>
      <timestamp>2017-01-31T17:59:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="193">{{dsc fun | c/experimental/fpext4/log10p1 | title=log10p1 log10p1f log10p1l&lt;br&gt;log10p1fN log10p1fNx&lt;br&gt;log10p1dN log10p1dNx|compute {{math|log{{su|b=10}}(1+x)}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>mzsdujclzidw1l62hiv3l7te6agq46c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc log2p1</title>
    <ns>10</ns>
    <id>16167</id>
    <revision>
      <id>89961</id>
      <timestamp>2017-01-31T17:58:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="184">{{dsc fun | c/experimental/fpext4/log2p1 | title=log2p1 log2p1f log2p1l&lt;br&gt;log2p1fN log2p1fNx&lt;br&gt;log2p1dN log2p1dNx|compute {{math|log{{su|b=2}}(1+x)}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>bz8of70ymelansjqx727vtr16z9ol80</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc logp1</title>
    <ns>10</ns>
    <id>16163</id>
    <revision>
      <id>89981</id>
      <parentid>89980</parentid>
      <timestamp>2017-01-31T19:46:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>close paren</comment>
      <text xml:space="preserve" bytes="179">{{dsc fun | c/experimental/fpext4/logp1 | title=logp1 logp1f logp1l&lt;br&gt;logp1fN logp1fNx&lt;br&gt;logp1dN logp1dNx|compute ln(1+x) (same as {{lc|log1p}})|notes={{mark since fpext4 ts}}}}</text>
      <sha1>6odq5kd0su15ca9ccu6x0krc8wybqxq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc pown</title>
    <ns>10</ns>
    <id>16155</id>
    <revision>
      <id>89968</id>
      <parentid>89947</parentid>
      <timestamp>2017-01-31T18:08:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+where n is integer</comment>
      <text xml:space="preserve" bytes="186">{{dsc fun | c/experimental/fpext4/pown | title=pown pownf pownl&lt;br&gt;pownfN pownfNx&lt;br&gt;powndN powndNx|compute x raised to the nth power, where n is integer|notes={{mark since fpext4 ts}}}}</text>
      <sha1>j72iwvmp2u2e016wahdf00bygdf10zu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc powr</title>
    <ns>10</ns>
    <id>16172</id>
    <revision>
      <id>89967</id>
      <timestamp>2017-01-31T18:07:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="186">{{dsc fun | c/experimental/fpext4/powr | title=powr powrf powrl&lt;br&gt;powrfN powrfNx&lt;br&gt;powrdN powrdNx|compute x raised to the y power, {{math|x{{su|p=y}}}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>97hghoeainmr6pskgh7279tp18n8i3n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc reduc sum</title>
    <ns>10</ns>
    <id>16173</id>
    <revision>
      <id>89970</id>
      <timestamp>2017-01-31T18:19:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="213">{{dsc fun | c/experimental/fpext4/reduc_sum | title=reduc_sum reduc_sumf reduc_suml&lt;br&gt;reduc_sumfN reduc_sumfNx&lt;br&gt;reduc_sumdN reduc_sumdNx|compute the sum of n members of an array|notes={{mark since fpext4 ts}}}}</text>
      <sha1>01y15k5qrojucxnuol4m8tdy6xe2ykv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc reduc sumabs</title>
    <ns>10</ns>
    <id>16174</id>
    <revision>
      <id>89971</id>
      <timestamp>2017-01-31T18:20:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="260">{{dsc fun | c/experimental/fpext4/reduc_sumabs | title=reduc_sumabs reduc_sumabsf reduc_sumabsl&lt;br&gt;reduc_sumabsfN reduc_sumabsfNx&lt;br&gt;reduc_sumabsdN reduc_sumabsdNx|compute the sum of the absolute values of n members of an array|notes={{mark since fpext4 ts}}}}</text>
      <sha1>dt7smnewxd4qfiy0qy1phwtzk7u5f0v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc reduc sumprod</title>
    <ns>10</ns>
    <id>16176</id>
    <revision>
      <id>89973</id>
      <timestamp>2017-01-31T18:22:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="260">{{dsc fun | c/experimental/fpext4/reduc_sumprod | title=reduc_sumprod reduc_sumprodf reduc_sumprodl&lt;br&gt;reduc_sumprodfN reduc_sumprodfNx&lt;br&gt;reduc_sumproddN reduc_sumproddNx|compute the dot product between n members of two arrays|notes={{mark since fpext4 ts}}}}</text>
      <sha1>duyp19v7x6tmo6yf7vpl65aeehf89rr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc reduc sumsq</title>
    <ns>10</ns>
    <id>16175</id>
    <revision>
      <id>89972</id>
      <timestamp>2017-01-31T18:21:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="240">{{dsc fun | c/experimental/fpext4/reduc_sumsq | title=reduc_sumsq reduc_sumsqf reduc_sumsql&lt;br&gt;reduc_sumsqfN reduc_sumsqfNx&lt;br&gt;reduc_sumsqdN reduc_sumsqdNx|compute the sum of squares of n members of an array|notes={{mark since fpext4 ts}}}}</text>
      <sha1>fpwp7te42nt2xahb6z9dwiwsv03n3bp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc rootn</title>
    <ns>10</ns>
    <id>16171</id>
    <revision>
      <id>89966</id>
      <timestamp>2017-01-31T18:06:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="190">{{dsc fun | c/experimental/fpext4/rootn | title=rootn rootnf rootnl&lt;br&gt;rootnfN rootnfNx&lt;br&gt;rootndN rootndNx|compute the nth root of x, {{math|x{{su|p=1/n}}}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>3zprbx10g3pz6po42u42kbsugxxpiqf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc rsqrt</title>
    <ns>10</ns>
    <id>16169</id>
    <revision>
      <id>89963</id>
      <timestamp>2017-01-31T18:00:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="195">{{dsc fun | c/experimental/fpext4/rsqrt| title=rsqrt rsqrtf rsqrtl&lt;br&gt;rsqrtfN rsqrtfNx&lt;br&gt;rsqrtdN rsqrtdNx|compute the inverse square root {{math|x{{su|p=-1/2}}}}|notes={{mark since fpext4 ts}}}}</text>
      <sha1>g0l5e88g38fchr7fohjqlp7tmjbm4db</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc scaled prod</title>
    <ns>10</ns>
    <id>16177</id>
    <revision>
      <id>89975</id>
      <parentid>89974</parentid>
      <timestamp>2017-01-31T18:25:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>~</comment>
      <text xml:space="preserve" bytes="270">{{dsc fun | c/experimental/fpext4/scaled_prod | title=scaled_prod scaled_prodf scaled_prodl&lt;br&gt;scaled_prodfN scaled_prodfNx&lt;br&gt;scaled_proddN scaled_proddNx|compute the product of n members of an array as a scaled value and a scale factor|notes={{mark since fpext4 ts}}}}</text>
      <sha1>21zda1xx3ey0pjhkwhtxm35c7j8tle8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc scaled proddiff</title>
    <ns>10</ns>
    <id>16179</id>
    <revision>
      <id>89977</id>
      <timestamp>2017-01-31T18:27:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="342">{{dsc fun | c/experimental/fpext4/scaled_proddiff | title=scaled_proddiff scaled_proddifff scaled_proddiffl&lt;br&gt;scaled_proddifffN scaled_proddifffNx&lt;br&gt;scaled_proddiffdN scaled_proddiffdNx|compute the product of the differences between corresponding n members of two arrays as a scaled value and a scale factor|notes={{mark since fpext4 ts}}}}</text>
      <sha1>idl9ohhx6wsyblonvwexyqzml46nyd9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc scaled prodsum</title>
    <ns>10</ns>
    <id>16178</id>
    <revision>
      <id>89976</id>
      <timestamp>2017-01-31T18:26:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="300">{{dsc fun | c/experimental/fpext4/scaled_prodsum | title=scaled_prodsum scaled_prodsumf scaled_prodsuml&lt;br&gt;scaled_prodsumfN scaled_prodsumfNx&lt;br&gt;scaled_prodsumdN scaled_prodsumdNx|compute the dot product of n members of two arrays as a scaled value and a scale factor|notes={{mark since fpext4 ts}}}}</text>
      <sha1>pkn2vcwi1h55rxqqtlboldc0dqkrr2q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc sinpi</title>
    <ns>10</ns>
    <id>16161</id>
    <revision>
      <id>89954</id>
      <timestamp>2017-01-31T17:44:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="199">{{dsc fun | c/experimental/fpext4/sinpi | title=sinpi sinpif sinpil&lt;br&gt;sinpifN sinpifNx&lt;br&gt;sinpidN sinpidNx|compute sin(πx) (measuring the angle in half-revolutions)|notes={{mark since fpext4 ts}}}}</text>
      <sha1>5q99295duy0vo0zk789f8gygwf07455</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/dsc tanpi</title>
    <ns>10</ns>
    <id>16162</id>
    <revision>
      <id>89955</id>
      <timestamp>2017-01-31T17:45:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="199">{{dsc fun | c/experimental/fpext4/tanpi | title=tanpi tanpif tanpil&lt;br&gt;tanpifN tanpifNx&lt;br&gt;tanpidN tanpidNx|compute tan(πx) (measuring the angle in half-revolutions)|notes={{mark since fpext4 ts}}}}</text>
      <sha1>3l9fjb5a886eylvel3owoocvyddro85</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/navbar</title>
    <ns>10</ns>
    <id>16152</id>
    <revision>
      <id>89941</id>
      <timestamp>2017-01-31T17:13:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/experimental/navbar heading
|content2 = c/experimental/navbar content
|heading3 = c/experimental/fpext4/navbar heading
|content3 = c/experimental/fpext4/navbar content
}}</text>
      <sha1>j6g38eo56wu1huzaltf9ppzd3uicfj8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/fpext4/navbar heading</title>
    <ns>10</ns>
    <id>16153</id>
    <revision>
      <id>89943</id>
      <timestamp>2017-01-31T17:15:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="85">[[c/experimental/fpext4 | Floating-point extensions part 4: Supplementary functions]]</text>
      <sha1>fd8nudofaf7wda3b7xo7sd3eq7xhgad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/navbar</title>
    <ns>10</ns>
    <id>13909</id>
    <revision>
      <id>75060</id>
      <timestamp>2015-01-05T15:12:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/experimental/navbar heading
|content2 = c/experimental/navbar content
}}</text>
      <sha1>7gtrwoknzla5cqqeqiz774gil87woix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/navbar content</title>
    <ns>10</ns>
    <id>13911</id>
    <revision>
      <id>91183</id>
      <parentid>89942</parentid>
      <timestamp>2017-03-24T15:44:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+fpext1</comment>
      <text xml:space="preserve" bytes="413">{{nv begin}}
{{nv ln | c/experimental/embedded | extensions for embedded processors }}
{{nv ln | c/experimental/dynamic | dynamic memory extensions }}
{{nv ln | c/experimental/fpext1 | floating-point extensions part 1: binary floating-point }}
{{nv ln | c/experimental/fpext4 | floating-point extensions part 4: supplementary functions }}
{{nv ln | c/experimental/cplex | parallel library extensions }}
{{nv end}}</text>
      <sha1>2hn13djy6xsw75p4tk7tfvp8w53vd0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/experimental/navbar heading</title>
    <ns>10</ns>
    <id>13910</id>
    <revision>
      <id>75061</id>
      <timestamp>2015-01-05T15:13:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="45">[[c/experimental | Technical Specifications]]</text>
      <sha1>6igjmpx7ls47c11o0mxqv4k20tfzfek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/c/example1</title>
    <ns>10</ns>
    <id>13951</id>
    <revision>
      <id>75572</id>
      <timestamp>2015-01-22T15:26:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>shared example for C io</comment>
      <text xml:space="preserve" bytes="530">{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    FILE* fp = fopen(&quot;test.txt&quot;, &quot;r&quot;);
    if(!fp) {
        perror(&quot;File opening failed&quot;);
        return EXIT_FAILURE;
    }

    int c; // note: int, not char, required to handle EOF
    while ((c = fgetc(fp)) != EOF) { // standard C I/O file reading loop
       putchar(c);
    }

    if (ferror(fp))
        puts(&quot;I/O error when reading&quot;);
    else if (feof(fp))
        puts(&quot;End of file reached successfully&quot;);

    fclose(fp);
}
 | output=
}}</text>
      <sha1>svk8rlz960kenzqfmuol6ip6nrmml7b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc clearerr</title>
    <ns>10</ns>
    <id>5875</id>
    <revision>
      <id>53187</id>
      <parentid>51806</parentid>
      <timestamp>2013-06-01T04:59:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list clearerr]] to [[Template:c/io/dsc clearerr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">{{dsc fun | c/io/clearerr | clears errors}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fclose</title>
    <ns>10</ns>
    <id>5911</id>
    <revision>
      <id>53190</id>
      <parentid>51807</parentid>
      <timestamp>2013-06-01T04:59:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fclose]] to [[Template:c/io/dsc fclose]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="42">{{dsc fun | c/io/fclose | closes a file }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc feof</title>
    <ns>10</ns>
    <id>5874</id>
    <revision>
      <id>53194</id>
      <parentid>51808</parentid>
      <timestamp>2013-06-01T04:59:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list feof]] to [[Template:c/io/dsc feof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">{{dsc fun | c/io/feof | checks for the end-of-file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc ferror</title>
    <ns>10</ns>
    <id>5873</id>
    <revision>
      <id>53197</id>
      <parentid>51809</parentid>
      <timestamp>2013-06-01T04:59:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list ferror]] to [[Template:c/io/dsc ferror]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">{{dsc fun |c/io/ferror | checks for a file error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fflush</title>
    <ns>10</ns>
    <id>5910</id>
    <revision>
      <id>53201</id>
      <parentid>51810</parentid>
      <timestamp>2013-06-01T04:59:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fflush]] to [[Template:c/io/dsc fflush]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | c/io/fflush | synchronizes an output stream with the actual file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fgetc</title>
    <ns>10</ns>
    <id>5904</id>
    <revision>
      <id>53204</id>
      <parentid>51811</parentid>
      <timestamp>2013-06-01T04:59:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fgetc]] to [[Template:c/io/dsc fgetc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | c/io/fgetc | title=fgetc&lt;br&gt;getc | gets a character from a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fgetpos</title>
    <ns>10</ns>
    <id>5879</id>
    <revision>
      <id>53207</id>
      <parentid>51812</parentid>
      <timestamp>2013-06-01T04:59:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fgetpos]] to [[Template:c/io/dsc fgetpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">{{dsc fun | c/io/fgetpos | gets the file position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fgets</title>
    <ns>10</ns>
    <id>5903</id>
    <revision>
      <id>53210</id>
      <parentid>51813</parentid>
      <timestamp>2013-06-01T04:59:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fgets]] to [[Template:c/io/dsc fgets]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | c/io/fgets | gets a character string from a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fgetwc</title>
    <ns>10</ns>
    <id>5895</id>
    <revision>
      <id>74530</id>
      <parentid>53214</parentid>
      <timestamp>2014-12-18T20:12:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | c/io/fgetwc | title=fgetwc&lt;br&gt;getwc | gets a wide character from a file stream|notes={{mark c95}}}}</text>
      <sha1>hpqglclwdgxlheutvrc8fdb39th9frv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fgetws</title>
    <ns>10</ns>
    <id>5894</id>
    <revision>
      <id>74536</id>
      <parentid>53217</parentid>
      <timestamp>2014-12-18T20:17:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | c/io/fgetws | gets a wide string from a file stream|notes={{mark c95}}}}</text>
      <sha1>oyae36t0stswq50me25d8u37cuycoz5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fopen</title>
    <ns>10</ns>
    <id>5913</id>
    <revision>
      <id>75257</id>
      <parentid>53221</parentid>
      <timestamp>2015-01-13T20:42:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="90">{{dsc fun | c/io/fopen | title=fopen&lt;br&gt;fopen_s | notes=&lt;br&gt;{{mark c11}} | opens a file }}</text>
      <sha1>d0r09ffmndllwuolp3rn53hztjltzd0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fprintf</title>
    <ns>10</ns>
    <id>5886</id>
    <revision>
      <id>75260</id>
      <parentid>53224</parentid>
      <timestamp>2015-01-13T20:47:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="294">{{dsc fun | c/io/fprintf | title=printf&lt;br&gt;fprintf&lt;br&gt;sprintf&lt;br&gt;snprintf&lt;br&gt;printf_s&lt;br&gt;fprintf_s&lt;br&gt;sprintf_s&lt;br&gt;snprintf_s | prints formatted output to {{lc|stdout}}, a file stream or a buffer | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>qxnsf2agtx4c78w6k6ga4knnlbe86l9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fputc</title>
    <ns>10</ns>
    <id>5902</id>
    <revision>
      <id>53228</id>
      <parentid>51818</parentid>
      <timestamp>2013-06-01T04:59:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fputc]] to [[Template:c/io/dsc fputc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | c/io/fputc | title=fputc&lt;br&gt;putc | writes a character to a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fputs</title>
    <ns>10</ns>
    <id>5901</id>
    <revision>
      <id>53231</id>
      <parentid>51819</parentid>
      <timestamp>2013-06-01T04:59:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fputs]] to [[Template:c/io/dsc fputs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | c/io/fputs | writes a character string to a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fputwc</title>
    <ns>10</ns>
    <id>5893</id>
    <revision>
      <id>74531</id>
      <parentid>53234</parentid>
      <timestamp>2014-12-18T20:13:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | c/io/fputwc | title=fputwc&lt;br&gt;putwc | writes a wide character to a file stream|notes={{mark c95}}}}</text>
      <sha1>rqdp41jfpifkhhju6dt85y0x57xhtyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fputws</title>
    <ns>10</ns>
    <id>5892</id>
    <revision>
      <id>74537</id>
      <parentid>53238</parentid>
      <timestamp>2014-12-18T20:19:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | c/io/fputws | writes a wide string to a file stream|notes={{mark c95}}}}</text>
      <sha1>d9387nxvotuqjqniwjxr8y282js8f3k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fread</title>
    <ns>10</ns>
    <id>5906</id>
    <revision>
      <id>53241</id>
      <parentid>51822</parentid>
      <timestamp>2013-06-01T04:59:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fread]] to [[Template:c/io/dsc fread]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="44">{{dsc fun | c/io/fread | reads from a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc freopen</title>
    <ns>10</ns>
    <id>5912</id>
    <revision>
      <id>75258</id>
      <parentid>53244</parentid>
      <timestamp>2015-01-13T20:43:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="128">{{dsc fun | c/io/freopen | title=freopen&lt;br&gt;freopen_s | notes=&lt;br&gt;{{mark c11}} | open an existing stream with a different name}}</text>
      <sha1>dy628q2vvhwj31dlgmrgxenfgsb94hn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fscanf</title>
    <ns>10</ns>
    <id>5888</id>
    <revision>
      <id>75263</id>
      <parentid>53247</parentid>
      <timestamp>2015-01-13T20:52:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="228">{{dsc fun | c/io/fscanf | title=scanf&lt;br&gt;fscanf&lt;br&gt;sscanf&lt;br&gt;scanf_s&lt;br&gt;fscanf_s&lt;br&gt;sscanf_s | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}} | reads formatted input from {{lc|stdin}}, a file stream or a buffer}}</text>
      <sha1>i898jxwkfxg0c8dl2zlx7wwpvp2b24r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fseek</title>
    <ns>10</ns>
    <id>5878</id>
    <revision>
      <id>53251</id>
      <parentid>51825</parentid>
      <timestamp>2013-06-01T05:00:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fseek]] to [[Template:c/io/dsc fseek]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc fun | c/io/fseek | moves the file position indicator to a specific location in a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fsetpos</title>
    <ns>10</ns>
    <id>5877</id>
    <revision>
      <id>53254</id>
      <parentid>51826</parentid>
      <timestamp>2013-06-01T05:00:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fsetpos]] to [[Template:c/io/dsc fsetpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc fun | c/io/fsetpos | moves the file position indicator to a specific location in a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc ftell</title>
    <ns>10</ns>
    <id>5880</id>
    <revision>
      <id>53258</id>
      <parentid>51827</parentid>
      <timestamp>2013-06-01T05:00:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list ftell]] to [[Template:c/io/dsc ftell]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc fun | c/io/ftell | returns the current file position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fwide</title>
    <ns>10</ns>
    <id>5909</id>
    <revision>
      <id>74541</id>
      <parentid>53261</parentid>
      <timestamp>2014-12-18T20:20:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | c/io/fwide | switches a file stream between wide character I/O and narrow character I/O|notes={{mark c95}}}}</text>
      <sha1>fc9l0sgf9zyiz49pe44i8w9y1afxzht</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fwprintf</title>
    <ns>10</ns>
    <id>5882</id>
    <revision>
      <id>77848</id>
      <parentid>75294</parentid>
      <timestamp>2015-04-13T16:16:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>snwprintf_s</comment>
      <text xml:space="preserve" bytes="323">{{dsc fun | c/io/fwprintf | title=wprintf&lt;br&gt;fwprintf&lt;br&gt;swprintf&lt;br&gt;wprintf_s&lt;br&gt;fwprintf_s&lt;br&gt;swprintf_s&lt;br&gt;snwprintf_s | prints formatted wide character output to {{lc|stdout}}, a file stream or a buffer|notes={{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>2ug3ivpnqu4295y0de1m091nu0kg4hq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fwrite</title>
    <ns>10</ns>
    <id>5905</id>
    <revision>
      <id>53268</id>
      <parentid>51830</parentid>
      <timestamp>2013-06-01T05:00:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list fwrite]] to [[Template:c/io/dsc fwrite]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="44">{{dsc fun | c/io/fwrite | writes to a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc fwscanf</title>
    <ns>10</ns>
    <id>5884</id>
    <revision>
      <id>75295</id>
      <parentid>74535</parentid>
      <timestamp>2015-01-13T21:22:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="284">{{dsc fun | c/io/fwscanf | title=wscanf&lt;br&gt;fwscanf&lt;br&gt;swscanf&lt;br&gt;wscanf_s&lt;br&gt;fwscanf_s&lt;br&gt;swscanf_s | reads formatted wide character input from {{lc|stdin}}, a file stream or a buffer|notes={{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>rjdh9tcauq3krt8cpqcof52lljesiwk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc getchar</title>
    <ns>10</ns>
    <id>5900</id>
    <revision>
      <id>53274</id>
      <parentid>51832</parentid>
      <timestamp>2013-06-01T05:00:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list getchar]] to [[Template:c/io/dsc getchar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc fun | c/io/getchar | reads a character from {{lc|stdin}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc gets</title>
    <ns>10</ns>
    <id>5899</id>
    <revision>
      <id>75262</id>
      <parentid>71871</parentid>
      <timestamp>2015-01-13T20:50:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | c/io/gets |title=gets&lt;br&gt;gets_s| reads a character string from {{tt|stdin}}|notes={{mark until c11}}&lt;br&gt;{{mark since c11}}}}</text>
      <sha1>i37vamkvjyjllhb3xc754kblq7uvyq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc getwchar</title>
    <ns>10</ns>
    <id>5891</id>
    <revision>
      <id>74538</id>
      <parentid>53281</parentid>
      <timestamp>2014-12-18T20:19:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="89">{{dsc fun | c/io/getwchar | reads a wide character from {{tt|stdin}}|notes={{mark c95}}}}</text>
      <sha1>gn1fkhui02ykwgyr1dnm75q9n9tfw6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc perror</title>
    <ns>10</ns>
    <id>5872</id>
    <revision>
      <id>53284</id>
      <parentid>51835</parentid>
      <timestamp>2013-06-01T05:00:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list perror]] to [[Template:c/io/dsc perror]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | c/io/perror | displays a character string corresponding of the current error to {{lc|stderr}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc putchar</title>
    <ns>10</ns>
    <id>5898</id>
    <revision>
      <id>53287</id>
      <parentid>51836</parentid>
      <timestamp>2013-06-01T05:00:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list putchar]] to [[Template:c/io/dsc putchar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">{{dsc fun | c/io/putchar |  writes a character to {{tt|stdout}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc puts</title>
    <ns>10</ns>
    <id>5897</id>
    <revision>
      <id>53291</id>
      <parentid>51837</parentid>
      <timestamp>2013-06-01T05:00:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list puts]] to [[Template:c/io/dsc puts]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | c/io/puts | writes a character string to {{lc|stdout}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc putwchar</title>
    <ns>10</ns>
    <id>5890</id>
    <revision>
      <id>74539</id>
      <parentid>53294</parentid>
      <timestamp>2014-12-18T20:20:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="89">{{dsc fun | c/io/putwchar | writes a wide character to {{lc|stdout}}|notes={{mark c95}}}}</text>
      <sha1>5khviv4n7xt2b5pn39o2wqfecaxxw4p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc remove</title>
    <ns>10</ns>
    <id>5871</id>
    <revision>
      <id>53297</id>
      <parentid>51839</parentid>
      <timestamp>2013-06-01T05:00:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list remove]] to [[Template:c/io/dsc remove]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="41">{{dsc fun | c/io/remove | erases a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc rename</title>
    <ns>10</ns>
    <id>5870</id>
    <revision>
      <id>53301</id>
      <parentid>51840</parentid>
      <timestamp>2013-06-01T05:00:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list rename]] to [[Template:c/io/dsc rename]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="42">{{dsc fun | c/io/rename | renames a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc rewind</title>
    <ns>10</ns>
    <id>5876</id>
    <revision>
      <id>53304</id>
      <parentid>51841</parentid>
      <timestamp>2013-06-01T05:00:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list rewind]] to [[Template:c/io/dsc rewind]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | c/io/rewind | moves the file position indicator to the beginning in a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc setbuf</title>
    <ns>10</ns>
    <id>5908</id>
    <revision>
      <id>53307</id>
      <parentid>51842</parentid>
      <timestamp>2013-06-01T05:00:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list setbuf]] to [[Template:c/io/dsc setbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">{{dsc fun | c/io/setbuf | sets the buffer for a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc setvbuf</title>
    <ns>10</ns>
    <id>5907</id>
    <revision>
      <id>53310</id>
      <parentid>51843</parentid>
      <timestamp>2013-06-01T05:00:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list setvbuf]] to [[Template:c/io/dsc setvbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | c/io/setvbuf | sets the buffer and its size for a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc tmpfile</title>
    <ns>10</ns>
    <id>5869</id>
    <revision>
      <id>75255</id>
      <parentid>53314</parentid>
      <timestamp>2015-01-13T20:40:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | c/io/tmpfile |title=tmpfile&lt;br&gt;tmpfile_s|notes=&lt;br&gt;{{mark c11}}| returns a pointer to a temporary file}}</text>
      <sha1>hmfninmznwm2nhp51hz405egaztyr6g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc tmpnam</title>
    <ns>10</ns>
    <id>5868</id>
    <revision>
      <id>75256</id>
      <parentid>53317</parentid>
      <timestamp>2015-01-13T20:41:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | c/io/tmpnam | title=tmpnam&lt;br&gt;tmpnam_s | notes=&lt;br&gt;{{mark c11}} | returns a unique filename}}</text>
      <sha1>hk6leuz9lqy67qrys6kymyy4g9ry83g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc ungetc</title>
    <ns>10</ns>
    <id>5896</id>
    <revision>
      <id>53320</id>
      <parentid>51846</parentid>
      <timestamp>2013-06-01T05:00:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/dcl list ungetc]] to [[Template:c/io/dsc ungetc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | c/io/ungetc | puts a character back into a file stream }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc ungetwc</title>
    <ns>10</ns>
    <id>5889</id>
    <revision>
      <id>74540</id>
      <parentid>53324</parentid>
      <timestamp>2014-12-18T20:20:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="93">{{dsc fun | c/io/ungetwc | puts a wide character back into a file stream|notes={{mark c95}}}}</text>
      <sha1>otc9qztp1q0r95kxqbjv44ujed8hmu9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc vfprintf</title>
    <ns>10</ns>
    <id>5885</id>
    <revision>
      <id>75261</id>
      <parentid>53327</parentid>
      <timestamp>2015-01-13T20:49:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="336">{{dsc fun | c/io/vfprintf | title=vprintf&lt;br&gt;vfprintf&lt;br&gt;vsprintf&lt;br&gt;vsnprintf&lt;br&gt;vprintf_s&lt;br&gt;vfprintf_s&lt;br&gt;vsprintf_s&lt;br&gt;vsnprintf_s | prints formatted output to {{lc|stdout}}, a file stream or a buffer&lt;br&gt; using variable argument list | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>r63ifa65182zhkkp1ie2xii1tjke2cj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc vfscanf</title>
    <ns>10</ns>
    <id>5887</id>
    <revision>
      <id>75264</id>
      <parentid>53330</parentid>
      <timestamp>2015-01-13T20:53:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="304">{{dsc fun | c/io/vfscanf | title=vscanf&lt;br&gt;vfscanf&lt;br&gt;vsscanf&lt;br&gt;vscanf_s&lt;br&gt;vfscanf_s&lt;br&gt;vsscanf_s | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}} | reads formatted input from {{lc|stdin}}, a file stream or a buffer&lt;br&gt; using variable argument list}}</text>
      <sha1>odv7b969wzrwzbel5z50gdjx2qwp3qz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc vfwprintf</title>
    <ns>10</ns>
    <id>5881</id>
    <revision>
      <id>77856</id>
      <parentid>75297</parentid>
      <timestamp>2015-04-13T18:15:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>vsnwprintf_s</comment>
      <text xml:space="preserve" bytes="364">{{dsc fun | c/io/vfwprintf | title=vwprintf&lt;br&gt;vfwprintf&lt;br&gt;vswprintf&lt;br&gt;vwprintf_s&lt;br&gt;vfwprintf_s&lt;br&gt;vswprintf_s&lt;br&gt;vsnwprintf_s | prints formatted wide character output to {{lc|stdout}}, a file stream&lt;br&gt; or a buffer using variable argument list|notes={{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>82mac0y1rv9cmfh9c3rzvk7joale6cj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/dsc vfwscanf</title>
    <ns>10</ns>
    <id>5883</id>
    <revision>
      <id>75296</id>
      <parentid>53337</parentid>
      <timestamp>2015-01-13T21:23:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="326">{{dsc fun | c/io/vfwscanf | title=vwscanf&lt;br&gt;vfwscanf&lt;br&gt;vswscanf&lt;br&gt;vwscanf_s&lt;br&gt;vfwscanf_s&lt;br&gt;vswscanf_s | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}} | reads formatted wide character input from {{lc|stdin}}, a file stream&lt;br&gt; or a buffer using variable argument list}}</text>
      <sha1>eeh59cfaq9z2m296b47k9qu20rfno05</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/file access flags</title>
    <ns>10</ns>
    <id>9893</id>
    <revision>
      <id>78605</id>
      <parentid>75574</parentid>
      <timestamp>2015-05-29T06:29:31Z</timestamp>
      <contributor>
        <ip>37.220.35.61</ip>
      </contributor>
      <comment>Add an important note from the c standard regarding the how one should work with files opened using the '+' access flag.</comment>
      <text xml:space="preserve" bytes="2200">{| class=&quot;wikitable&quot;
|-
! File access &lt;br&gt;mode string
! Meaning
! Explanation
! Action if file &lt;br&gt; already exists
! Action if file &lt;br&gt; does not exist
|-
| {{tt|&quot;r&quot;}}
| read
| Open a file for reading
| read from start
| failure to open
|-
| {{tt|&quot;w&quot;}}
| write
| Create a file for writing
| destroy contents
| create new
|-
| {{tt|&quot;a&quot;}}
| append
| Append to a file
| write to end
| create new
|-
| {{tt|&quot;r+&quot;}}
| read extended
| Open a file for read/write
| read from start
| error
|-
| {{tt|&quot;w+&quot;}}
| write extended
| Create a file for read/write
| destroy contents
| create new
|-
| {{tt|&quot;a+&quot;}}
| append extended
| Open a file for read/write
| write to end
| create new
|-
| colspan=&quot;5&quot; | File access mode flag {{tt|&quot;b&quot;}} can optionally be specified to open a file in binary mode. This flag has effect only on Windows systems. &lt;br&gt; On the append file access modes, data is written to the end of the file regardless of the current position of the file position indicator.
|-
| colspan=&quot;5&quot; | When a file is opened with update mode ('+' as the second or third character in the above list of mode argument values), both input and output may be performed on the associated stream. However, output shall not be directly followed by input without an intervening call to the {{lc|fflush}} function or to a file positioning function ({{lc|fseek}}, {{lc|fsetpos}}, or {{lc|rewind}}), and input shall not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end- of-file. Opening (or creating) a text file with update mode may instead open (or create) a binary stream in some implementations. 
|-
| colspan=&quot;5&quot; | File access mode flag {{tt|&quot;x&quot;}} can optionally be appended to &quot;w&quot; or &quot;w+&quot; specifiers. This flag forces the function to fail if the file exists, instead of overwriting it. {{mark c11}}
|-
| colspan=&quot;5&quot; | When using {{tt|fopen_s}} or {{tt|freopen_s}}, file access permissions for any file created with &quot;w&quot; or &quot;a&quot; prevents other users from accessing it. File access mode flag {{tt|&quot;u&quot;}} can optionally be prepended to any specifier that begins with &quot;w&quot; or &quot;a&quot;, to enable the default {{tt|fopen}} permissions. {{mark c11}}
|}</text>
      <sha1>j6qgeo7nbhrzbc0r4t5u6uuh8wxw35r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/navbar</title>
    <ns>10</ns>
    <id>5914</id>
    <revision>
      <id>39839</id>
      <parentid>36002</parentid>
      <timestamp>2012-09-28T19:55:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="134">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/io/navbar heading
|content2 = c/io/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/navbar content</title>
    <ns>10</ns>
    <id>6196</id>
    <revision>
      <id>77857</id>
      <parentid>77849</parentid>
      <timestamp>2015-04-13T18:18:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>last _s</comment>
      <text xml:space="preserve" bytes="3429">{{nv begin}}
{{nv h1 | Functions}}

{{nv h2 | File access}}
{{nv col begin}}
{{nv ln | c/io/fopen | fopen | fopen_s | notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/io/freopen| freopen | freopen_s | notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/io/fwide|notes={{mark c95}}}}
{{nv col next}}
{{nv ln | c/io/setbuf}}
{{nv ln | c/io/setvbuf}}
{{nv ln | c/io/fclose}}
{{nv ln | c/io/fflush}}
{{nv col end}}

{{nv h2 | Direct input/output}}
{{nv ln | c/io/fread}}
{{nv ln | c/io/fwrite}}

{{nv h2 | Unformatted input/output}}
{{nv col begin}}
{{nv ln | c/io/fgetc}}
{{nv ln | c/io/fgets}}
{{nv ln | c/io/fputc}}
{{nv ln | c/io/fputs}}
{{nv ln | c/io/getchar}}
{{nv ln | c/io/gets | gets | gets_s | notes={{mark until c11}}&lt;br&gt;{{mark since c11}}}}
{{nv ln | c/io/putchar}}
{{nv ln | c/io/puts}}
{{nv ln | c/io/ungetc}}
{{nv col next}}
{{nv ln | c/io/fgetwc|fgetwc|getwc|notes={{mark c95}}&lt;br&gt;{{mark c95}}}}
{{nv ln | c/io/fgetws|notes={{mark c95}}}}
{{nv ln | c/io/fputwc|fputwc|putwc|notes={{mark c95}}&lt;br&gt;{{mark c95}}}}
{{nv ln | c/io/fputws|notes={{mark c95}}}}
{{nv ln | c/io/getwchar|notes={{mark c95}}}}
{{nv ln | c/io/putwchar|notes={{mark c95}}}}
{{nv ln | c/io/ungetwc|notes={{mark c95}}}}
{{nv col end}}

{{nv h2 | Formatted input}}
{{nv col begin}}
{{nv ln | c/io/fscanf | scanf | fscanf | sscanf | scanf_s | fscanf_s | sscanf_s | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/io/fwscanf | wscanf | fwscanf | swscanf|wscanf_s | fwscanf_s | swscanf_s|notes={{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv col next}}
{{nv ln | c/io/vfscanf | vscanf | vfscanf | vsscanf | vscanf_s | vfscanf_s | vsscanf_s | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/io/vfwscanf | vwscanf | vfwscanf | vswscanf |vwscanf_s | vfwscanf_s | vswscanf_s | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv col end}}

{{nv h2 | Formatted output}}
{{nv col begin}}
{{nv ln | c/io/fprintf | printf | fprintf | sprintf | snprintf |  printf_s | fprintf_s | sprintf_s | snprintf_s | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/io/fwprintf | wprintf | fwprintf | swprintf|wprintf_s|fwprintf_s|swprintf_s|snwprintf_s|notes={{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv col next}}
{{nv ln | c/io/vfprintf | vprintf | vfprintf | vsprintf | vsnprintf |vprintf_s | vfprintf_s | vsprintf_s | vsnprintf_s | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/io/vfwprintf | vwprintf | vfwprintf | vswprintf|vwprintf_s|vfwprintf_s|vswprintf_s|vsnwprintf_s|notes={{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv col end}}


{{nv h2 | File positioning}}
{{nv ln | c/io/ftell}}
{{nv ln | c/io/fgetpos}}
{{nv ln | c/io/fseek}}
{{nv ln | c/io/fsetpos}}
{{nv ln | c/io/rewind}}

{{nv h2 | Error handling}}
{{nv ln | c/io/clearerr}}
{{nv ln | c/io/feof}}
{{nv ln | c/io/ferror}}
{{nv ln | c/io/perror}}

{{nv h2 | Operations on files}}
{{nv ln | c/io/remove}}
{{nv ln | c/io/rename}}
{{nv ln | c/io/tmpfile|tmpfile|tmpfile_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/io/tmpnam|tmpnam|tmpnam_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv end}}</text>
      <sha1>jpo93yw66e9q8kanoieuo7tlbdlr1uy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/io/navbar heading</title>
    <ns>10</ns>
    <id>6153</id>
    <revision>
      <id>35480</id>
      <parentid>21480</parentid>
      <timestamp>2012-06-15T22:26:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/io/sidebar heading]] to [[Template:c/io/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="28">[[c/io | File input/output]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/keyword/navbar</title>
    <ns>10</ns>
    <id>6193</id>
    <revision>
      <id>39840</id>
      <parentid>35481</parentid>
      <timestamp>2012-09-28T19:55:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="144">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/keyword/navbar heading
|content2 = c/keyword/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/keyword/navbar content</title>
    <ns>10</ns>
    <id>6195</id>
    <revision>
      <id>76120</id>
      <parentid>51853</parentid>
      <timestamp>2015-02-10T14:20:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fortran/asm</comment>
      <text xml:space="preserve" bytes="1549">{{nv begin}}
{{nv col begin}}
{{nv ln | c/keyword/auto}}
{{nv ln | c/keyword/break}}
{{nv ln | c/keyword/case}}
{{nv ln | c/keyword/char}}
{{nv ln | c/keyword/const}}
{{nv ln | c/keyword/continue}}
{{nv ln | c/keyword/default}}
{{nv ln | c/keyword/do}}
{{nv ln | c/keyword/double}}
{{nv ln | c/keyword/else}}
{{nv ln | c/keyword/enum}}
{{nv ln | c/keyword/extern}}
{{nv col next}}
{{nv ln | c/keyword/float}}
{{nv ln | c/keyword/for}}
{{nv ln | c/keyword/goto}}
{{nv ln | c/keyword/if}}
{{nv ln | c/keyword/inline}}
{{nv ln | c/keyword/int}}
{{nv ln | c/keyword/long}}
{{nv ln | c/keyword/register}}
{{nv ln | c/keyword/restrict}}
{{nv ln | c/keyword/return}}
{{nv ln | c/keyword/short}}
{{nv col next}}
{{nv ln | c/keyword/signed}}
{{nv ln | c/keyword/sizeof}}
{{nv ln | c/keyword/static}}
{{nv ln | c/keyword/struct}}
{{nv ln | c/keyword/switch}}
{{nv ln | c/keyword/typedef}}
{{nv ln | c/keyword/union}}
{{nv ln | c/keyword/unsigned}}
{{nv ln | c/keyword/void}}
{{nv ln | c/keyword/volatile}}
{{nv ln | c/keyword/while}}
{{nv col next}}
{{nv ln | c/keyword/_Alignas}}
{{nv ln | c/keyword/_Alignof}}
{{nv ln | c/keyword/_Atomic}}
{{nv ln | c/keyword/_Bool}}
{{nv ln | c/keyword/_Complex}}
{{nv ln | c/keyword/_Generic}}
{{nv ln | c/keyword/_Imaginary}}
{{nv ln | c/keyword/_Noreturn}}
{{nv ln | c/keyword/_Static_assert}}
{{nv ln | c/keyword/_Thread_local}}
{{nv col end}}
{{nv h2|preprocessor-specific}}
{{nv ln | c/preprocessor/impl| _Pragma}}
{{nv h2|conditionally-supported}}
{{nv ln | c/keyword/fortran}}
{{nv ln | c/language/asm}}
{{nv end}}</text>
      <sha1>8ze9ohtrbxoaj5gn9f660gj95q08v3w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/keyword/navbar heading</title>
    <ns>10</ns>
    <id>6194</id>
    <revision>
      <id>35483</id>
      <parentid>21530</parentid>
      <timestamp>2012-06-15T22:26:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/keyword/sidebar heading]] to [[Template:c/keyword/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="26">[[c/keyword | C keywords]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/keyword/title</title>
    <ns>10</ns>
    <id>8588</id>
    <revision>
      <id>31762</id>
      <timestamp>2012-06-08T14:07:57Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="68">&lt;onlyinclude&gt;{{title | {{small|C keywords:}} {{{1}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/basics/navbar</title>
    <ns>10</ns>
    <id>13875</id>
    <revision>
      <id>74789</id>
      <timestamp>2014-12-26T22:37:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="197">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/language/navbar heading
|heading3 = c/language/basics/navbar heading
|content3 = c/language/basics/navbar content
}}</text>
      <sha1>a0fnopv5pa8f3irhlqh79jgj4albdsp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/basics/navbar content</title>
    <ns>10</ns>
    <id>13884</id>
    <revision>
      <id>74935</id>
      <timestamp>2014-12-30T14:40:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="598">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv | [[c/comment | comments]]}}
{{nv | [[c/language/ascii | ASCII]]}}
{{nv | [[c/language/translation_phases | Translation phases]]}}
{{nv | [[c/language/identifier|identifier]]}}
{{nv | [[c/language/scope|scope]]}}
{{nv | [[c/language/lifetime|lifetime]]}}
{{nv | [[c/language/name_space|lookup and name spaces]]}}
{{nv | [[c/language/type|type]]}}
{{nv | [[c/language/arithmetic_types|arithmetic types]]}}
{{nv | [[c/language/main_function|the main() function]]}}
{{nv | [[c/language/memory_model|memory model and data races]]}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>05ncu5kexpmd3nxbj6u6wblpquhnaqc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/basics/navbar heading</title>
    <ns>10</ns>
    <id>13876</id>
    <revision>
      <id>74790</id>
      <timestamp>2014-12-26T22:37:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="46">[[c/language/basic_concepts | Basic Concepts]]</text>
      <sha1>izffgypkb2uz73i0ksbvwghn7bykso9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/declarations/navbar</title>
    <ns>10</ns>
    <id>13872</id>
    <revision>
      <id>76197</id>
      <parentid>74777</parentid>
      <timestamp>2015-02-11T19:35:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>content2</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/language/navbar heading
|content2 = c/language/navbar content
|heading3 = c/language/declarations/navbar heading
|content3 = c/language/declarations/navbar content
}}</text>
      <sha1>051pgkk017djyio2if678m7lw6n0ssv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/declarations/navbar content</title>
    <ns>10</ns>
    <id>13949</id>
    <revision>
      <id>75673</id>
      <parentid>75622</parentid>
      <timestamp>2015-01-27T15:45:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>tentative is worth the title</comment>
      <text xml:space="preserve" bytes="724">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv ln | c/language/pointer }}
{{nv ln | c/language/array}}
{{nv ln | c/language/enum}}
{{nv ln | c/language/storage duration | storage duration and linkage}}
{{nv ln | c/language/const}}
{{nv ln | c/language/volatile}}
{{nv ln | c/language/restrict | notes={{mark c99}}}}
{{nv ln | c/language/struct}}
{{nv ln | c/language/union}}
{{nv ln | c/language/bit field}}
{{nv ln | c/language/_Alignas| alignas | notes={{mark c11}}}}
{{nv ln | c/language/typedef}}
{{nv ln | c/language/_Static_assert|static_assert| notes={{mark c11}}}}
{{nv ln | c/language/atomic|atomic types| notes={{mark c11}}}}
{{nv ln | c/language/extern|external and tentative definitions}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>2oule2fqha5xu0ilgnxg651xmwkgjke</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/declarations/navbar heading</title>
    <ns>10</ns>
    <id>13873</id>
    <revision>
      <id>74778</id>
      <timestamp>2014-12-26T19:12:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="42">[[c/language/declarations | Declarations]]</text>
      <sha1>k373oxgnmydwnuc03lg3uc3p6v68f98</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/expressions/navbar</title>
    <ns>10</ns>
    <id>13870</id>
    <revision>
      <id>76168</id>
      <parentid>74770</parentid>
      <timestamp>2015-02-11T14:43:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+top-level content</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/language/navbar heading
|content2 = c/language/navbar content
|heading3 = c/language/expressions/navbar heading
|content3 = c/language/expressions/navbar content
}}</text>
      <sha1>6cew6ahysqxb3vtsi5ps8chzj5m9k8u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/expressions/navbar content</title>
    <ns>10</ns>
    <id>13900</id>
    <revision>
      <id>75067</id>
      <parentid>75018</parentid>
      <timestamp>2015-01-05T15:26:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>use nv lns</comment>
      <text xml:space="preserve" bytes="1416">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | General }}
{{nv ln | c/language/value category }}
{{nv ln | c/language/eval order | evaluation order and sequence points}}
{{nv ln | c/language/constant expression|constant expressions}}
{{nv ln | c/language/conversion|implicit conversions}}
{{nv ln | c/language/generic|generic selection|notes={{mark c11}}}}
{{nv h2 | [[c/language/expressions#Constants_and_literals|constants and literals]] }}
{{nv ln | c/language/integer constant}}
{{nv ln | c/language/floating constant}}
{{nv ln | c/language/character constant}}
{{nv ln | c/language/string literal}}
{{nv ln | c/language/compound literal|notes={{mark c99}}}}
{{nv h2 | [[c/language/expressions#Operators|operators]] }}
{{nv ln | c/language/operator precedence|operator precedence}}
{{nv ln | c/language/operator member access|member access and indirection}}
{{nv ln | c/language/operator logical|logical operators}}
{{nv ln | c/language/operator comparison|comparison operators}}
{{nv ln | c/language/operator arithmetic|arithmetic operators}}
{{nv ln | c/language/operator assignment|assignment operators}}
{{nv ln | c/language/operator incdec|increment and decrement}}
{{nv ln | c/language/operator other|function call, comma, conditional operator}}
{{nv ln | c/language/sizeof}}
{{nv ln | c/language/_Alignof|alignof|notes={{mark c11}}}}
{{nv ln | c/language/cast|cast operators}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>qc7e31u95vstxs22z1qh1lqcrvmhp1h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/expressions/navbar heading</title>
    <ns>10</ns>
    <id>13871</id>
    <revision>
      <id>74771</id>
      <timestamp>2014-12-26T17:47:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="40">[[c/language/expressions | Expressions]]</text>
      <sha1>fu7vi22jbipe28syf964zfhkve67kxy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/forward progress note</title>
    <ns>10</ns>
    <id>15691</id>
    <revision>
      <id>87460</id>
      <parentid>87459</parentid>
      <timestamp>2016-08-24T20:25:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="712">A program with an endless loop has undefined behavior if the loop has no observable behavior (I/O, volatile accesses, atomic or synchronization operation) in any part of its {{#switch: {{{1}}}|for={{spar|cond_expression}}, {{spar|iteration_expression}} or {{spar|loop_statement}}
|do|while={{spar|statement}} or {{spar|expression}}}}. This allows the compilers to optimize out all unobservable loops without proving that they terminate. The only exceptions are the loops where 
{{#ifeq:{{{1}}}|for|{{spar|cond_expression}} is omitted or|{{spar|expression}}}} is a constant expression; {{#switch: {{{1}}}
|for={{tt|for(;;)}}
|do={{tt|do {...} while(true);}}
|while={{tt|while(true)}}
}} is always an endless loop.</text>
      <sha1>r8tlrxen2aectnvfkhftguo4qnqhr1i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/functions/navbar</title>
    <ns>10</ns>
    <id>13952</id>
    <revision>
      <id>76185</id>
      <parentid>75588</parentid>
      <timestamp>2015-02-11T15:39:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>content2</comment>
      <text xml:space="preserve" bytes="241">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/language/navbar heading
|content2 = c/language/navbar content
|heading3 = c/language/functions/navbar heading
|content3 = c/language/functions/navbar content
}}</text>
      <sha1>4mlwh12ivvrdk47m6p54gpcymt2s5q8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/functions/navbar content</title>
    <ns>10</ns>
    <id>13991</id>
    <revision>
      <id>76184</id>
      <timestamp>2015-02-11T15:38:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="303">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv ln | c/language/function declaration}}
{{nv ln | c/language/function definition}}
{{nv ln | c/language/variadic|variadic arguments}}
{{nv ln | c/language/inline|notes={{mark c99}}}}
{{nv ln | c/language/noreturn|notes={{mark c11}}}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>97ap75f1mzq9jslttzkde2vedog1uvv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/functions/navbar heading</title>
    <ns>10</ns>
    <id>13953</id>
    <revision>
      <id>75590</id>
      <timestamp>2015-01-22T21:09:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="36">[[c/language/functions | Functions]]</text>
      <sha1>4y402w29c6nyx51dt889zldq3gc9656</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/initialization/navbar</title>
    <ns>10</ns>
    <id>13890</id>
    <revision>
      <id>76186</id>
      <parentid>74962</parentid>
      <timestamp>2015-02-11T15:47:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>content2</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/language/navbar heading
|content2 = c/language/navbar content
|heading3 = c/language/initialization/navbar heading
|content3 = c/language/initialization/navbar content
}}</text>
      <sha1>6mkl8nz0v9q4qq89l0l5xxpcp0dlirs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/initialization/navbar content</title>
    <ns>10</ns>
    <id>13894</id>
    <revision>
      <id>75069</id>
      <parentid>75000</parentid>
      <timestamp>2015-01-05T15:34:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>nv ln</comment>
      <text xml:space="preserve" bytes="415">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv ln | c/language/initialization#Explicit_initialization | explicit initialization }}
{{nv ln | c/language/initialization#Implicit_initialization | implicit initialization }}
{{nv ln | c/language/scalar initialization }}
{{nv ln | c/language/array initialization  }}
{{nv ln | c/language/struct_initialization | struct and union initialization }}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>igqc05btji4hb6xm7uwikisa1utx1yk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/initialization/navbar heading</title>
    <ns>10</ns>
    <id>13891</id>
    <revision>
      <id>74963</id>
      <timestamp>2014-12-30T21:50:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="46">[[c/language/initialization | Initialization]]</text>
      <sha1>mk50wgrea4epng23vype80zafn0634g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/navbar</title>
    <ns>10</ns>
    <id>6318</id>
    <revision>
      <id>39841</id>
      <parentid>35484</parentid>
      <timestamp>2012-09-28T19:55:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="146">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/language/navbar heading
|content2 = c/language/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/navbar content</title>
    <ns>10</ns>
    <id>6550</id>
    <revision>
      <id>75115</id>
      <parentid>75114</parentid>
      <timestamp>2015-01-06T17:04:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>h2</comment>
      <text xml:space="preserve" bytes="966">{{nv begin}}
{{nv ln | c/language/ascii | ASCII chart}}
{{nv h2 | [[c/language/basic_concepts|Basic concepts]]}}
{{nv ln | c/language/translation phases}}
{{nv ln | c/comment}}
{{nv ln | c/language/identifier}}
{{nv ln | c/language/scope}}
{{nv ln | c/language/lifetime}}
{{nv ln | c/language/name space}}
{{nv ln | c/language/type}}
{{nv ln | c/language/arithmetic types}}
{{nv ln | c/language/object}}
{{nv ln | c/language/main function}}
{{nv ln | c/language/memory model}}
{{nv h2 | [[c/keyword | Keywords]]}}
{{nv h2 | [[c/preprocessor | Preprocessor]]}}
{{nv h2 | [[c/language/statements | Statements]]}}
{{nv h2 | [[c/language/expressions | Expressions]]}}
{{nv h2 | [[c/language/initialization | Initialization]]}}
{{nv h2 | [[c/language/declarations | Declarations]]}}
{{nv h2 | [[c/language/functions | Functions]]}}
{{nv h2 | Miscellaneous}}
{{nv ln | c/language/history | history of C}}
{{nv h2 | [[c/experimental|Technical Specifications]] }}
{{nv end}}</text>
      <sha1>61qpwhuwnuar2wzpl72hnsxkkbd5vhy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/navbar heading</title>
    <ns>10</ns>
    <id>6319</id>
    <revision>
      <id>35254</id>
      <parentid>22199</parentid>
      <timestamp>2012-06-15T22:21:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/language/sidebar heading]] to [[Template:c/language/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="27">[[c/language | C language]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/operators</title>
    <ns>10</ns>
    <id>8465</id>
    <revision>
      <id>41451</id>
      <parentid>41450</parentid>
      <timestamp>2012-10-26T15:57:06Z</timestamp>
      <contributor>
        <username>OrangeBuzzard</username>
        <id>1124</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="894">{| class=&quot;wikitable&quot;
|- style=&quot;text-align:center&quot;
! colspan=&quot;7&quot; | Common operators 
|- style=&quot;text-align:center&quot;
| [[c/language/operator assignment | assignment]]
| [[c/language/operator incdec | increment&lt;br&gt;decrement]]
| [[c/language/operator arithmetic | arithmetic]]
| [[c/language/operator logical | logical]]
| [[c/language/operator comparison | comparison]]
| [[c/language/operator member access | member&lt;br&gt;access]]
| [[c/language/operator other | other]]
|- style=&quot;text-align:center&quot;
| 
{{c|1=a = b
a += b
a -= b
a *= b
a /= b
a %= b
a &amp;= b
a {{!}}= b
a ^= b
a &lt;&lt;= b
a &gt;&gt;= b}}
| 
{{c|1=++a
--a
a++
a--
}}
| 
{{c|1=+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a &amp; b
a {{!}} b
a ^ b
a &lt;&lt; b
a &gt;&gt; b
}}
| 
{{c|1=!a
a &amp;&amp; b
a {{!!}} b
}}
| 
{{c|1=a == b
a != b
a &lt; b
a &gt; b
a &lt;= b
a &gt;= b
}}
| 
{{c|1=a[b]
*a
&amp;a
a-&gt;b
a.b
}}
| 
{{c|1=a(...)
a, b
(type) a
? :
sizeof
_Alignof}} {{mark since c11}}
|-
|}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/statements/navbar</title>
    <ns>10</ns>
    <id>13863</id>
    <revision>
      <id>74703</id>
      <timestamp>2014-12-23T16:46:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="205">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
|heading2 = c/language/navbar heading
|heading3 = c/language/statements/navbar heading
|content3 = c/language/statements/navbar content
}}</text>
      <sha1>2qmbzicltekjn20s1g5gyn2c37baspd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/statements/navbar content</title>
    <ns>10</ns>
    <id>13865</id>
    <revision>
      <id>75066</id>
      <parentid>74715</parentid>
      <timestamp>2015-01-05T15:23:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>use nv ln's</comment>
      <text xml:space="preserve" bytes="761">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | Labels }}
{{nv ln | c/language/statements#Labels | {{spar|label}} : {{spar|statement}}}}
{{nv h2 | Expression statements }}
{{nv ln | c/language/statements#Expression_statements | {{spar|expression}} ; }}
{{nv h2 | Compound statements }}
{{nv ln | c/language/statements#Compound_statements | { {{spar|statement}}... } }}
{{nv h2 | Selection statements }}
{{nv ln | c/language/if}}
{{nv ln | c/language/switch}}
{{nv h2 | Iteration statements }}
{{nv ln | c/language/while}}
{{nv ln | c/language/do | do-while}}
{{nv ln | c/language/for}}
{{nv h2 | Jump statements }}
{{nv ln | c/language/break}}
{{nv ln | c/language/continue}}
{{nv ln | c/language/return}}
{{nv ln | c/language/goto}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>ewycy45idsvr8m3oj768ped1cvxva42</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/language/statements/navbar heading</title>
    <ns>10</ns>
    <id>13864</id>
    <revision>
      <id>74704</id>
      <timestamp>2014-12-23T16:47:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="38">[[c/language/statements | Statements]]</text>
      <sha1>pe1ieu2i5vynnneg71x3cbu54hsbrer</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/locale/dsc LC categories</title>
    <ns>10</ns>
    <id>5928</id>
    <revision>
      <id>53340</id>
      <parentid>51855</parentid>
      <timestamp>2013-06-01T05:00:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/locale/dcl list LC categories]] to [[Template:c/locale/dsc LC categories]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc macro const | c/locale/LC_categories | title=LC_ALL&lt;br&gt;LC_COLLATE&lt;br&gt;LC_CTYPE&lt;br&gt;LC_MONETARY&lt;br&gt;LC_NUMERIC&lt;br&gt;LC_TIME | locale categories for {{c|setlocale}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/locale/dsc lconv</title>
    <ns>10</ns>
    <id>5926</id>
    <revision>
      <id>75634</id>
      <parentid>53343</parentid>
      <timestamp>2015-01-24T16:01:49Z</timestamp>
      <contributor>
        <username>A3f.at</username>
        <id>3652</id>
      </contributor>
      <minor/>
      <comment>s/class/struct</comment>
      <text xml:space="preserve" bytes="83">{{dsc struct | c/locale/lconv | formatting details, returned by {{c|localeconv}} }}</text>
      <sha1>chamfn7brjpdtzv887lh4jsm72qfcm4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/locale/dsc localeconv</title>
    <ns>10</ns>
    <id>5927</id>
    <revision>
      <id>53347</id>
      <parentid>51857</parentid>
      <timestamp>2013-06-01T05:00:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/locale/dcl list localeconv]] to [[Template:c/locale/dsc localeconv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | c/locale/localeconv | queries numeric and monetary formatting details of the current locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/locale/dsc setlocale</title>
    <ns>10</ns>
    <id>5925</id>
    <revision>
      <id>53350</id>
      <parentid>51858</parentid>
      <timestamp>2013-06-01T05:00:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/locale/dcl list setlocale]] to [[Template:c/locale/dsc setlocale]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | c/locale/setlocale | gets and sets the current C locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/locale/navbar</title>
    <ns>10</ns>
    <id>5929</id>
    <revision>
      <id>39842</id>
      <parentid>35486</parentid>
      <timestamp>2012-09-28T19:55:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="142">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/locale/navbar heading
|content2 = c/locale/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/locale/navbar content</title>
    <ns>10</ns>
    <id>6479</id>
    <revision>
      <id>51859</id>
      <parentid>33775</parentid>
      <timestamp>2013-06-01T04:35:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="248">{{nv begin}}
{{nv ln | c/locale/setlocale}}
{{nv ln | c/locale/localeconv}}
{{nv ln | c/locale/lconv}}
{{nv h2 | Locale categories}}
{{nv ln | c/locale/LC_categories | LC_ALL | LC_COLLATE | LC_CTYPE | LC_MONETARY | LC_NUMERIC | LC_TIME}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/locale/navbar heading</title>
    <ns>10</ns>
    <id>5930</id>
    <revision>
      <id>35487</id>
      <parentid>21240</parentid>
      <timestamp>2012-06-15T22:26:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/locale/sidebar heading]] to [[Template:c/locale/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="35">[[c/locale | Localization support]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/dsc aligned alloc</title>
    <ns>10</ns>
    <id>15505</id>
    <revision>
      <id>85679</id>
      <timestamp>2016-05-02T13:48:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="83">{{dsc fun | c/memory/aligned_alloc | allocates aligned memory |notes={{mark c11}}}}</text>
      <sha1>mx5ym8t1blgdi3azah2npleytx0t446</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/dsc calloc</title>
    <ns>10</ns>
    <id>15502</id>
    <revision>
      <id>85676</id>
      <timestamp>2016-05-02T13:48:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="59">{{dsc fun | c/memory/calloc | allocates and zeroes memory}}</text>
      <sha1>ah1llfj7yekfct5xdj3j6aslvysx53c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/dsc free</title>
    <ns>10</ns>
    <id>15504</id>
    <revision>
      <id>85678</id>
      <timestamp>2016-05-02T13:48:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | c/memory/free | deallocates previously allocated memory}}</text>
      <sha1>rghno8r4z9bed3yx55ah0wpknc99fa1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/dsc malloc</title>
    <ns>10</ns>
    <id>15501</id>
    <revision>
      <id>85675</id>
      <timestamp>2016-05-02T13:47:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="48">{{dsc fun | c/memory/malloc | allocates memory}}</text>
      <sha1>1e5qbcqetla629eab6p0s2kzw5h97h8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/dsc realloc</title>
    <ns>10</ns>
    <id>15503</id>
    <revision>
      <id>85677</id>
      <timestamp>2016-05-02T13:48:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | c/memory/realloc | expands previously allocated memory block}}</text>
      <sha1>ixiktsx2jdjhvan6i3smsh76x0di9rf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/navbar</title>
    <ns>10</ns>
    <id>5744</id>
    <revision>
      <id>39843</id>
      <parentid>36001</parentid>
      <timestamp>2012-09-28T19:55:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="142">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/memory/navbar heading
|content2 = c/memory/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/navbar content</title>
    <ns>10</ns>
    <id>5747</id>
    <revision>
      <id>66070</id>
      <parentid>51860</parentid>
      <timestamp>2013-10-24T13:39:30Z</timestamp>
      <contributor>
        <username>Ruediger</username>
        <id>752</id>
      </contributor>
      <comment>aligned_alloc</comment>
      <text xml:space="preserve" bytes="189">{{nv begin}}
{{nv ln | c/memory/malloc}}
{{nv ln | c/memory/calloc}}
{{nv ln | c/memory/realloc}}
{{nv ln | c/memory/free}}
{{nv ln | c/memory/aligned_alloc |notes={{mark c11}}}}
{{nv end}}</text>
      <sha1>lfn59ofo40s10fynw07m5nxh9myaft6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/memory/navbar heading</title>
    <ns>10</ns>
    <id>5746</id>
    <revision>
      <id>35204</id>
      <parentid>21041</parentid>
      <timestamp>2012-06-15T22:19:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/memory/sidebar heading]] to [[Template:c/memory/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="40">[[c/memory | Dynamic memory management]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/navbar</title>
    <ns>10</ns>
    <id>6312</id>
    <revision>
      <id>39844</id>
      <parentid>35510</parentid>
      <timestamp>2012-09-28T19:55:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="69">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/navbar content</title>
    <ns>10</ns>
    <id>5753</id>
    <revision>
      <id>76176</id>
      <parentid>75130</parentid>
      <timestamp>2015-02-11T15:23:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+variaidc</comment>
      <text xml:space="preserve" bytes="758">{{nv begin| style=line-height:1.1em;}}
{{nv | [[c/language | Language]] }}
{{nv | [[c/header | headers]] }}
{{nv | [[c/types | Type support]] }}
{{nv | [[c/memory | Dynamic memory management]] }}
{{nv | [[c/error | Error handling]] }}
{{nv | [[c/program | Program utilities]] }}
{{nv | [[c/variadic | Variadic function support]] }}
{{nv | [[c/chrono | Date and time utilities]] }}
{{nv | [[c/string | Strings library]] }}
{{nv | [[c/algorithm | Algorithms]] }}
{{nv | [[c/numeric | Numerics]] }}
{{nv | [[c/io | Input/output support]] }}
{{nv | [[c/locale | Localization support]] }}
{{nv | [[c/thread | Thread support]] {{mark c11}} }}
{{nv | [[c/atomic | Atomic operations]] {{mark c11}} }}
{{nv ln | c/experimental | Technical Specifications }}
{{nv end}}</text>
      <sha1>fdql08xx1o2csuzmrafjp4tlhiwo7hr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/navbar heading</title>
    <ns>10</ns>
    <id>5745</id>
    <revision>
      <id>35512</id>
      <parentid>32824</parentid>
      <timestamp>2012-06-15T22:27:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/sidebar heading]] to [[Template:c/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="9">[[c | C]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc CMPLX</title>
    <ns>10</ns>
    <id>9331</id>
    <revision>
      <id>53353</id>
      <parentid>51862</parentid>
      <timestamp>2013-06-01T05:00:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list CMPLX]] to [[Template:c/numeric/complex/dsc CMPLX]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="190">{{dsc macro fun | c/numeric/complex/CMPLX | title=CMPLX&lt;br&gt;CMPLXF&lt;br&gt;CMPLXL | constructs a complex number from real and imaginary parts | notes={{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc Complex I</title>
    <ns>10</ns>
    <id>9327</id>
    <revision>
      <id>73133</id>
      <parentid>53357</parentid>
      <timestamp>2014-10-15T17:08:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix name</comment>
      <text xml:space="preserve" bytes="118">{{dsc macro const | c/numeric/complex/Complex_I | title=_Complex_I | the complex unit constant i| notes={{mark c99}}}}</text>
      <sha1>lsalsoiuzjsgnrxukbs62s1jjehjgr2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc I</title>
    <ns>10</ns>
    <id>9330</id>
    <revision>
      <id>53360</id>
      <parentid>51864</parentid>
      <timestamp>2013-06-01T05:00:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list I]] to [[Template:c/numeric/complex/dsc I]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc macro const | c/numeric/complex/I  | the complex or imaginary unit constant i| notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc Imaginary I</title>
    <ns>10</ns>
    <id>9329</id>
    <revision>
      <id>73132</id>
      <parentid>73131</parentid>
      <timestamp>2014-10-15T17:06:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/name/title</comment>
      <text xml:space="preserve" bytes="124">{{dsc macro const | c/numeric/complex/Imaginary_I | title=_Imaginary_I | the imaginary unit constant i| notes={{mark c99}}}}</text>
      <sha1>8d6c0ixlfmfifwgox864h5x8hgk0ut3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc cabs</title>
    <ns>10</ns>
    <id>9346</id>
    <revision>
      <id>53367</id>
      <parentid>51866</parentid>
      <timestamp>2013-06-01T05:00:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list cabs]] to [[Template:c/numeric/complex/dsc cabs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="167">{{dsc fun | c/numeric/complex/cabs |title=cabs&lt;br&gt;cabsf&lt;br&gt;cabsl | computes the magnitude of a complex number | notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc cacos</title>
    <ns>10</ns>
    <id>9332</id>
    <revision>
      <id>53370</id>
      <parentid>51867</parentid>
      <timestamp>2013-06-01T05:00:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list cacos]] to [[Template:c/numeric/complex/dsc cacos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="157">{{dsc fun | c/numeric/complex/cacos |title=cacos&lt;br&gt;cacosf&lt;br&gt;cacosl | computes the complex arc cosine| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc cacosh</title>
    <ns>10</ns>
    <id>9338</id>
    <revision>
      <id>53372</id>
      <parentid>51868</parentid>
      <timestamp>2013-06-01T05:00:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list cacosh]] to [[Template:c/numeric/complex/dsc cacosh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="172">{{dsc fun | c/numeric/complex/cacosh |title=cacosh&lt;br&gt;cacoshf&lt;br&gt;cacoshl | computes the complex arc hyperbolic cosine| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc carg</title>
    <ns>10</ns>
    <id>9351</id>
    <revision>
      <id>53375</id>
      <parentid>51869</parentid>
      <timestamp>2013-06-01T05:00:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list carg]] to [[Template:c/numeric/complex/dsc carg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="169">{{dsc fun | c/numeric/complex/carg |title=carg&lt;br&gt;cargf&lt;br&gt;cargl | computes the phase angle of a complex number | notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc casin</title>
    <ns>10</ns>
    <id>9333</id>
    <revision>
      <id>53378</id>
      <parentid>51870</parentid>
      <timestamp>2013-06-01T05:00:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list casin]] to [[Template:c/numeric/complex/dsc casin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc fun | c/numeric/complex/casin |title=casin&lt;br&gt;casinf&lt;br&gt;casinl | computes the complex arc sine| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc casinh</title>
    <ns>10</ns>
    <id>9339</id>
    <revision>
      <id>53381</id>
      <parentid>51871</parentid>
      <timestamp>2013-06-01T05:01:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list casinh]] to [[Template:c/numeric/complex/dsc casinh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc fun | c/numeric/complex/casinh |title=casinh&lt;br&gt;casinhf&lt;br&gt;casinhl | computes the complex arc hyperbolic sine| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc catan</title>
    <ns>10</ns>
    <id>9334</id>
    <revision>
      <id>53386</id>
      <parentid>51872</parentid>
      <timestamp>2013-06-01T05:01:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list catan]] to [[Template:c/numeric/complex/dsc catan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | c/numeric/complex/catan |title=catan&lt;br&gt;catanf&lt;br&gt;catanl | computes the complex arc tangent| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc catanh</title>
    <ns>10</ns>
    <id>9340</id>
    <revision>
      <id>53388</id>
      <parentid>51873</parentid>
      <timestamp>2013-06-01T05:01:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list catanh]] to [[Template:c/numeric/complex/dsc catanh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="173">{{dsc fun | c/numeric/complex/catanh |title=catanh&lt;br&gt;catanhf&lt;br&gt;catanhl | computes the complex arc hyperbolic tangent| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc ccos</title>
    <ns>10</ns>
    <id>9335</id>
    <revision>
      <id>53487</id>
      <parentid>51874</parentid>
      <timestamp>2013-06-01T05:02:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list ccos]] to [[Template:c/numeric/complex/dsc ccos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc fun | c/numeric/complex/ccos |title=ccos&lt;br&gt;ccosf&lt;br&gt;ccosl | computes the complex cosine| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc ccosh</title>
    <ns>10</ns>
    <id>9341</id>
    <revision>
      <id>53490</id>
      <parentid>51875</parentid>
      <timestamp>2013-06-01T05:02:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list ccosh]] to [[Template:c/numeric/complex/dsc ccosh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="166">{{dsc fun | c/numeric/complex/ccosh |title=ccosh&lt;br&gt;ccoshf&lt;br&gt;ccoshl | computes the complex hyperbolic cosine| notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc cexp</title>
    <ns>10</ns>
    <id>9344</id>
    <revision>
      <id>53493</id>
      <parentid>51876</parentid>
      <timestamp>2013-06-01T05:02:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list cexp]] to [[Template:c/numeric/complex/dsc cexp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc fun | c/numeric/complex/cexp |title=cexp&lt;br&gt;cexpf&lt;br&gt;cexpl | computes the complex base-e exponential| notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc cimag</title>
    <ns>10</ns>
    <id>9349</id>
    <revision>
      <id>53497</id>
      <parentid>51877</parentid>
      <timestamp>2013-06-01T05:02:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list cimag]] to [[Template:c/numeric/complex/dsc cimag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="173">{{dsc fun | c/numeric/complex/cimag |title=cimag&lt;br&gt;cimagf&lt;br&gt;cimagl | computes the imaginary part a complex number | notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc clog</title>
    <ns>10</ns>
    <id>9345</id>
    <revision>
      <id>53500</id>
      <parentid>51878</parentid>
      <timestamp>2013-06-01T05:02:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list clog]] to [[Template:c/numeric/complex/dsc clog]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="162">{{dsc fun | c/numeric/complex/clog |title=clog&lt;br&gt;clogf&lt;br&gt;clogl | computes the complex natural logarithm| notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc complex</title>
    <ns>10</ns>
    <id>9326</id>
    <revision>
      <id>53503</id>
      <parentid>51879</parentid>
      <timestamp>2013-06-01T05:02:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list complex]] to [[Template:c/numeric/complex/dsc complex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc macro const | c/numeric/complex/complex | complex type macro | notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc conj</title>
    <ns>10</ns>
    <id>9352</id>
    <revision>
      <id>53507</id>
      <parentid>51880</parentid>
      <timestamp>2013-06-01T05:02:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list conj]] to [[Template:c/numeric/complex/dsc conj]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc fun | c/numeric/complex/conj |title=conj&lt;br&gt;conjf&lt;br&gt;conjl | computes the complex conjugate | notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc cpow</title>
    <ns>10</ns>
    <id>9347</id>
    <revision>
      <id>53510</id>
      <parentid>51881</parentid>
      <timestamp>2013-06-01T05:03:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list cpow]] to [[Template:c/numeric/complex/dsc cpow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc fun | c/numeric/complex/cpow |title=cpow&lt;br&gt;cpowf&lt;br&gt;cpowl | computes the complex power function | notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc cproj</title>
    <ns>10</ns>
    <id>9353</id>
    <revision>
      <id>53513</id>
      <parentid>51882</parentid>
      <timestamp>2013-06-01T05:03:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list cproj]] to [[Template:c/numeric/complex/dsc cproj]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="168">{{dsc fun | c/numeric/complex/cproj |title=cproj&lt;br&gt;cprojf&lt;br&gt;cprojl | computes the projection on Riemann sphere | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc creal</title>
    <ns>10</ns>
    <id>9350</id>
    <revision>
      <id>53516</id>
      <parentid>51883</parentid>
      <timestamp>2013-06-01T05:03:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list creal]] to [[Template:c/numeric/complex/dsc creal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="171">{{dsc fun | c/numeric/complex/creal |title=creal&lt;br&gt;crealf&lt;br&gt;creall | computes the real part of a complex number | notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc csin</title>
    <ns>10</ns>
    <id>9336</id>
    <revision>
      <id>53518</id>
      <parentid>51884</parentid>
      <timestamp>2013-06-01T05:03:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list csin]] to [[Template:c/numeric/complex/dsc csin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="147">{{dsc fun | c/numeric/complex/csin |title=csin&lt;br&gt;csinf&lt;br&gt;csinl | computes the complex sine| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc csinh</title>
    <ns>10</ns>
    <id>9342</id>
    <revision>
      <id>53520</id>
      <parentid>51885</parentid>
      <timestamp>2013-06-01T05:03:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list csinh]] to [[Template:c/numeric/complex/dsc csinh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="164">{{dsc fun | c/numeric/complex/csinh |title=csinh&lt;br&gt;csinhf&lt;br&gt;csinhl | computes the complex hyperbolic sine| notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc csqrt</title>
    <ns>10</ns>
    <id>9348</id>
    <revision>
      <id>53522</id>
      <parentid>51886</parentid>
      <timestamp>2013-06-01T05:03:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list csqrt]] to [[Template:c/numeric/complex/dsc csqrt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc fun | c/numeric/complex/csqrt |title=csqrt&lt;br&gt;csqrtf&lt;br&gt;csqrtl | computes the complex square root | notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc ctan</title>
    <ns>10</ns>
    <id>9337</id>
    <revision>
      <id>53524</id>
      <parentid>51887</parentid>
      <timestamp>2013-06-01T05:03:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list ctan]] to [[Template:c/numeric/complex/dsc ctan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc fun | c/numeric/complex/ctan |title=ctan&lt;br&gt;ctanf&lt;br&gt;ctanl | computes the complex tangent| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc ctanh</title>
    <ns>10</ns>
    <id>9343</id>
    <revision>
      <id>53526</id>
      <parentid>51888</parentid>
      <timestamp>2013-06-01T05:03:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list ctanh]] to [[Template:c/numeric/complex/dsc ctanh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="167">{{dsc fun | c/numeric/complex/ctanh |title=ctanh&lt;br&gt;ctanhf&lt;br&gt;ctanhl | computes the complex hyperbolic tangent| notes={{mark c99}}&lt;br/&gt;{{mark c99}}&lt;br/&gt;{{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/dsc imaginary</title>
    <ns>10</ns>
    <id>9328</id>
    <revision>
      <id>53528</id>
      <parentid>51889</parentid>
      <timestamp>2013-06-01T05:03:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/dcl list imaginary]] to [[Template:c/numeric/complex/dsc imaginary]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc macro const | c/numeric/complex/imaginary | imaginary type macro  | notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/navbar</title>
    <ns>10</ns>
    <id>6519</id>
    <revision>
      <id>39846</id>
      <parentid>35489</parentid>
      <timestamp>2012-09-28T19:56:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="235">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/numeric/navbar heading
|content2 = c/numeric/navbar content

|heading3 = c/numeric/complex/navbar heading
|content3 = c/numeric/complex/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/navbar content</title>
    <ns>10</ns>
    <id>8492</id>
    <revision>
      <id>73294</id>
      <parentid>73134</parentid>
      <timestamp>2014-10-21T14:40:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>cabs was lost</comment>
      <text xml:space="preserve" bytes="1495">{{nv begin}}

{{nv h2 | Types and the imaginary constant}}
{{nv col begin}}
{{nv ln | c/numeric/complex/complex}}
{{nv ln | c/numeric/complex/Complex_I | _Complex_I}}
{{nv ln | c/numeric/complex/CMPLX}}
{{nv col next}}
{{nv ln | c/numeric/complex/imaginary}}
{{nv ln | c/numeric/complex/Imaginary_I | _Imaginary_I }}
{{nv ln | c/numeric/complex/I}}
{{nv col end}}

{{nv h2 | Manipulation}}
{{nv col begin}}
{{nv ln | c/numeric/complex/cimag}}
{{nv ln | c/numeric/complex/creal}}
{{nv ln | c/numeric/complex/carg}}
{{nv col next}}
{{nv ln | c/numeric/complex/cabs}}
{{nv ln | c/numeric/complex/conj}}
{{nv ln | c/numeric/complex/cproj}}
{{nv col end}}

{{nv h2 | Power and exponential functions}}
{{nv col begin}}
{{nv ln | c/numeric/complex/cexp}}
{{nv ln | c/numeric/complex/clog}}
{{nv col next}}
{{nv ln | c/numeric/complex/cpow}}
{{nv ln | c/numeric/complex/csqrt}}
{{nv col end}}

{{nv h2 | Trigonometric functions}}
{{nv col begin}}
{{nv ln | c/numeric/complex/ccos}}
{{nv ln | c/numeric/complex/csin}}
{{nv ln | c/numeric/complex/ctan}}
{{nv col next}}
{{nv ln | c/numeric/complex/cacos}}
{{nv ln | c/numeric/complex/casin}}
{{nv ln | c/numeric/complex/catan}}
{{nv col end}}

{{nv h2 | Hyperbolic functions}}
{{nv col begin}}
{{nv ln | c/numeric/complex/ccosh}}
{{nv ln | c/numeric/complex/csinh}}
{{nv ln | c/numeric/complex/ctanh}}
{{nv col next}}
{{nv ln | c/numeric/complex/cacosh}}
{{nv ln | c/numeric/complex/casinh}}
{{nv ln | c/numeric/complex/catanh}}
{{nv col end}}

{{nv end}}</text>
      <sha1>in04z6mntoef8yuvk2h31k7pj7zsnis</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/complex/navbar heading</title>
    <ns>10</ns>
    <id>6520</id>
    <revision>
      <id>35314</id>
      <parentid>25696</parentid>
      <timestamp>2012-06-15T22:22:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/complex/sidebar heading]] to [[Template:c/numeric/complex/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="49">[[c/numeric/complex | Complex number arithmetic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc FE DFL ENV</title>
    <ns>10</ns>
    <id>8609</id>
    <revision>
      <id>53531</id>
      <parentid>51891</parentid>
      <timestamp>2013-06-01T05:03:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list FE DFL ENV]] to [[Template:c/numeric/fenv/dsc FE DFL ENV]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc macro const | c/numeric/fenv/FE_DFL_ENV | default floating-point environment|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc FE exceptions</title>
    <ns>10</ns>
    <id>8607</id>
    <revision>
      <id>53534</id>
      <parentid>51892</parentid>
      <timestamp>2013-06-01T05:03:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list FE exceptions]] to [[Template:c/numeric/fenv/dsc FE exceptions]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="196">{{dsc macro const | c/numeric/fenv/FE_exceptions | title=FE_ALL_EXCEPT&lt;br&gt;FE_DIVBYZERO&lt;br&gt;FE_INEXACT&lt;br&gt;FE_INVALID&lt;br&gt;FE_OVERFLOW&lt;br&gt;FE_UNDERFLOW | floating-point exceptions | notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc FE round</title>
    <ns>10</ns>
    <id>8608</id>
    <revision>
      <id>53538</id>
      <parentid>51893</parentid>
      <timestamp>2013-06-01T05:03:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list FE round]] to [[Template:c/numeric/fenv/dsc FE round]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="166">{{dsc macro const | c/numeric/fenv/FE_round | title=FE_DOWNWARD&lt;br&gt;FE_TONEAREST&lt;br&gt;FE_TOWARDZERO&lt;br&gt;FE_UPWARD | floating-point rounding direction|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc feclearexcept</title>
    <ns>10</ns>
    <id>8599</id>
    <revision>
      <id>53541</id>
      <parentid>51894</parentid>
      <timestamp>2013-06-01T05:03:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list feclearexcept]] to [[Template:c/numeric/fenv/dsc feclearexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc fun | c/numeric/fenv/feclearexcept | clears the specified floating-point status flags|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc feenv</title>
    <ns>10</ns>
    <id>8604</id>
    <revision>
      <id>53544</id>
      <parentid>51895</parentid>
      <timestamp>2013-06-01T05:03:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list feenv]] to [[Template:c/numeric/fenv/dsc feenv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | c/numeric/fenv/feenv | title=fegetenv&lt;br&gt;fesetenv |  saves or restores the current floating point environment|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc feexceptflag</title>
    <ns>10</ns>
    <id>8602</id>
    <revision>
      <id>53547</id>
      <parentid>51896</parentid>
      <timestamp>2013-06-01T05:03:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list feexceptflag]] to [[Template:c/numeric/fenv/dsc feexceptflag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="223">{{dsc fun | c/numeric/fenv/feexceptflag | title=fegetexceptflag&lt;br&gt;fesetexceptflag|copies the state of the specified floating-point status flags from or to the floating-point environment|notes={{mark c99}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc feholdexcept</title>
    <ns>10</ns>
    <id>8605</id>
    <revision>
      <id>53551</id>
      <parentid>51897</parentid>
      <timestamp>2013-06-01T05:03:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list feholdexcept]] to [[Template:c/numeric/fenv/dsc feholdexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc fun | c/numeric/fenv/feholdexcept | saves the environment, clears all status flags and ignores all future errors|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc feraiseexcept</title>
    <ns>10</ns>
    <id>8601</id>
    <revision>
      <id>53607</id>
      <parentid>51898</parentid>
      <timestamp>2013-06-01T05:04:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list feraiseexcept]] to [[Template:c/numeric/fenv/dsc feraiseexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | c/numeric/fenv/feraiseexcept | raises the specified floating-point exceptions|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc feround</title>
    <ns>10</ns>
    <id>8603</id>
    <revision>
      <id>53610</id>
      <parentid>51899</parentid>
      <timestamp>2013-06-01T05:04:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list feround]] to [[Template:c/numeric/fenv/dsc feround]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc fun | c/numeric/fenv/feround | title=fegetround&lt;br&gt;fesetround | gets or sets rounding  direction | notes={{mark c99}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc fetestexcept</title>
    <ns>10</ns>
    <id>8600</id>
    <revision>
      <id>53614</id>
      <parentid>51900</parentid>
      <timestamp>2013-06-01T05:04:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list fetestexcept]] to [[Template:c/numeric/fenv/dsc fetestexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | c/numeric/fenv/fetestexcept | determines which of the specified floating-point status flags are set|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/dsc feupdateenv</title>
    <ns>10</ns>
    <id>8606</id>
    <revision>
      <id>53617</id>
      <parentid>51901</parentid>
      <timestamp>2013-06-01T05:04:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/dcl list feupdateenv]] to [[Template:c/numeric/fenv/dsc feupdateenv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc fun | c/numeric/fenv/feupdateenv | restores the floating-point environment and raises the previously raise exceptions|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/navbar</title>
    <ns>10</ns>
    <id>6521</id>
    <revision>
      <id>39847</id>
      <parentid>35491</parentid>
      <timestamp>2012-09-28T19:56:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="229">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/numeric/navbar heading
|content2 = c/numeric/navbar content

|heading3 = c/numeric/fenv/navbar heading
|content3 = c/numeric/fenv/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/navbar content</title>
    <ns>10</ns>
    <id>8682</id>
    <revision>
      <id>51902</id>
      <parentid>36559</parentid>
      <timestamp>2013-06-01T04:36:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="987">{{nv begin}}
{{nv h1 | Functions}}
{{nv ln | c/numeric/fenv/feclearexcept | notes={{mark c99}}}}
{{nv ln | c/numeric/fenv/fetestexcept | notes={{mark c99}}}}
{{nv ln | c/numeric/fenv/feraiseexcept | notes={{mark c99}}}}
{{nv ln | c/numeric/fenv/feexceptflag | fegetexceptflag | fesetexceptflag | notes={{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv ln | c/numeric/fenv/feround | fegetround | fesetround | notes={{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv ln | c/numeric/fenv/feenv | fegetenv | fesetenv | notes={{mark c99}}}}
{{nv ln | c/numeric/fenv/feholdexcept | notes={{mark c99}}}}
{{nv ln | c/numeric/fenv/feupdateenv | notes={{mark c99}}}}

{{nv h1 | Macro constants}}
{{nv ln | c/numeric/fenv/FE_exceptions | FE_ALL_EXCEPT| FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | notes={{mark c99}}}}
{{nv ln | c/numeric/fenv/FE_round | FE_DOWNWARD | FE_TONEAREST | FE_TOWARDZERO | FE_UPWARD | notes={{mark c99}}}}
{{nv ln | c/numeric/fenv/FE_DFL_ENV | notes={{mark c99}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/fenv/navbar heading</title>
    <ns>10</ns>
    <id>6522</id>
    <revision>
      <id>35492</id>
      <parentid>25700</parentid>
      <timestamp>2012-06-15T22:26:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/fenv/sidebar heading]] to [[Template:c/numeric/fenv/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="47">[[c/numeric/fenv | Floating point environment]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc FP FAST FMA</title>
    <ns>10</ns>
    <id>15711</id>
    <revision>
      <id>87838</id>
      <parentid>87837</parentid>
      <timestamp>2016-10-06T10:05:46Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>sp</comment>
      <text xml:space="preserve" bytes="274">{{dsc macro const | c/numeric/math/fma | title=FP_FAST_FMAF&lt;br&gt;FP_FAST_FMA&lt;br&gt;FP_FAST_FMAL | indicates that the fma function generally executes about as fast as, or faster than, a multiply and an add of double operands  | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1>euiug49bfv3okr7sg4mzzijty0h6cyr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc FP ILOGB0</title>
    <ns>10</ns>
    <id>15710</id>
    <revision>
      <id>87836</id>
      <parentid>87822</parentid>
      <timestamp>2016-10-06T09:21:36Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>&quot;C99&quot; next to each macro name</comment>
      <text xml:space="preserve" bytes="171">{{dsc macro const | c/numeric/math/ilogb | title=FP_ILOGB0&lt;br&gt;FP_ILOGBNAN | evaluates to ilogb(x) if x is zero or NaN, respectively | notes={{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>jmdjzb9h5z7cd2lvai6x7d3d8c3vnwh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc FP categories</title>
    <ns>10</ns>
    <id>6029</id>
    <revision>
      <id>71606</id>
      <parentid>53620</parentid>
      <timestamp>2014-06-15T02:14:06Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>FP_INFINITY ==&gt; FP_INFINITE</comment>
      <text xml:space="preserve" bytes="243">{{dsc macro const | c/numeric/math/FP_categories | title=FP_NORMAL&lt;br&gt;FP_SUBNORMAL&lt;br&gt;FP_ZERO&lt;br&gt;FP_INFINITE&lt;br&gt;FP_NAN | indicates a floating-point category | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1>io31nyb5es8ingbjwic2lqgozc304al</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc HUGE VAL</title>
    <ns>10</ns>
    <id>6030</id>
    <revision>
      <id>53624</id>
      <parentid>51904</parentid>
      <timestamp>2013-06-01T05:04:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/math/dcl list HUGE VAL]] to [[Template:c/numeric/math/dsc HUGE VAL]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="251">{{dsc macro const | c/numeric/math/HUGE_VAL | title=HUGE_VALF&lt;br&gt;HUGE_VAL&lt;br&gt;HUGE_VALL | indicates value too big to be representable (infinity) by {{c|float}}, {{c|double}} and {{c|long double}} respectively  | notes={{mark c99}}&lt;br&gt;&lt;br&gt;{{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc INFINITY</title>
    <ns>10</ns>
    <id>13549</id>
    <revision>
      <id>70463</id>
      <timestamp>2014-05-23T22:14:41Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>+ INFINITY (C99) template</comment>
      <text xml:space="preserve" bytes="149">{{dsc macro const | c/numeric/math/INFINITY | evaluates to positive infinity or the value guaranteed to overflow a {{c|float}}| notes={{mark c99}} }}</text>
      <sha1>5hzvv54c6b13b7kurtua1mj9plinee5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc NAN</title>
    <ns>10</ns>
    <id>13550</id>
    <revision>
      <id>70464</id>
      <timestamp>2014-05-23T22:16:22Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>+ NAN (C99) template</comment>
      <text xml:space="preserve" bytes="109">{{dsc macro const | c/numeric/math/NAN | evaluates to a quiet NaN of type {{c|float}} | notes={{mark c99}} }}</text>
      <sha1>plt9p6mibvgrr5turj29n88d2xv7k74</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc abs</title>
    <ns>10</ns>
    <id>6001</id>
    <revision>
      <id>71914</id>
      <parentid>71912</parentid>
      <timestamp>2014-07-01T19:32:02Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>mark c99 for llabs</comment>
      <text xml:space="preserve" bytes="161">{{dsc fun | c/numeric/math/abs | title=abs&lt;br&gt;labs&lt;br&gt;llabs | computes absolute value of an integral value ({{math|{{!}}x{{!}}}}) | notes=&lt;br&gt;&lt;br&gt;{{mark c99}} }}</text>
      <sha1>n5jnv2co7gjlve7f72o7i9rqoxbr61w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc acos</title>
    <ns>10</ns>
    <id>5975</id>
    <revision>
      <id>70726</id>
      <parentid>53630</parentid>
      <timestamp>2014-05-29T13:37:03Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="149">{{dsc fun | c/numeric/math/acos | title=acos&lt;br&gt;acosf&lt;br&gt;acosl | computes arc cosine ({{math|arccos(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>bn9e4bmo4ix05dt8m5jg9htbck3uds0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc acosh</title>
    <ns>10</ns>
    <id>6026</id>
    <revision>
      <id>70733</id>
      <parentid>70599</parentid>
      <timestamp>2014-05-29T15:00:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>inserted C99</comment>
      <text xml:space="preserve" bytes="180">{{dsc fun | c/numeric/math/acosh | title=acosh&lt;br&gt;acoshf&lt;br&gt;acoshl | computes inverse hyperbolic cosine ({{math|arcosh(x)}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>6q2ghvf48ggmv6f22gsnmwvq7g0nkvq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc asin</title>
    <ns>10</ns>
    <id>5976</id>
    <revision>
      <id>70725</id>
      <parentid>53637</parentid>
      <timestamp>2014-05-29T13:35:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="147">{{dsc fun | c/numeric/math/asin | title=asin&lt;br&gt;asinf&lt;br&gt;asinl | computes arc sine ({{math|arcsin(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>rbtv4n9q20gnc7wsgao6rh0av1numje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc asinh</title>
    <ns>10</ns>
    <id>6028</id>
    <revision>
      <id>70734</id>
      <parentid>70732</parentid>
      <timestamp>2014-05-29T15:01:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>deleted &quot;the&quot;</comment>
      <text xml:space="preserve" bytes="175">{{dsc fun | c/numeric/math/asinh |title=asinh&lt;br&gt;asinhf&lt;br&gt;asinhl |computes inverse hyperbolic sine ({{math|arsinh(x)}})| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>cff6d9q14ip7tibtflbbh1xxc3mcgbf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc atan</title>
    <ns>10</ns>
    <id>5974</id>
    <revision>
      <id>70727</id>
      <parentid>53644</parentid>
      <timestamp>2014-05-29T13:38:58Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="149">{{dsc fun | c/numeric/math/atan | title=atan&lt;br&gt;atanf&lt;br&gt;atanl |computes arc tangent ({{math|arctan(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>qzfxk609n8wll1496bqbytqb39zhayh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc atan2</title>
    <ns>10</ns>
    <id>5973</id>
    <revision>
      <id>70728</id>
      <parentid>53647</parentid>
      <timestamp>2014-05-29T13:42:24Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="169">{{dsc fun | c/numeric/math/atan2 | title=atan2&lt;br&gt;atan2f&lt;br&gt;atan2l | computes arc tangent, using signs to determine quadrants | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>qkyqu83fbn0jnagqadanaw3ha8yz85b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc atanh</title>
    <ns>10</ns>
    <id>6025</id>
    <revision>
      <id>70735</id>
      <parentid>70600</parentid>
      <timestamp>2014-05-29T15:03:46Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted C99</comment>
      <text xml:space="preserve" bytes="181">{{dsc fun | c/numeric/math/atanh | title=atanh&lt;br&gt;atanhf&lt;br&gt;atanhl | computes inverse hyperbolic tangent ({{math|artanh(x)}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>p528d04deu5jgb2aa9fmlkkkez5avp4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc cbrt</title>
    <ns>10</ns>
    <id>5983</id>
    <revision>
      <id>70720</id>
      <parentid>53654</parentid>
      <timestamp>2014-05-29T13:17:42Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="165">{{dsc fun | c/numeric/math/cbrt | title=cbrt&lt;br&gt;cbrtf&lt;br&gt;cbrtl | computes cubic root  ({{math|{{mrad|x|3}}}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>5oz69m1l1qwlcmrzpvjzahivqne3con</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc ceil</title>
    <ns>10</ns>
    <id>6020</id>
    <revision>
      <id>70748</id>
      <parentid>53657</parentid>
      <timestamp>2014-05-29T20:18:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb; corrected explanation</comment>
      <text xml:space="preserve" bytes="164">{{dsc fun | c/numeric/math/ceil | title=ceil&lt;br&gt;ceilf&lt;br&gt;ceill | computes smallest integer not less than the given value | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>94i0g8ljdh0jqln0cnhn5ysvufzb9fl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc copysign</title>
    <ns>10</ns>
    <id>6008</id>
    <revision>
      <id>70761</id>
      <parentid>53660</parentid>
      <timestamp>2014-05-29T21:17:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; used clause found in 7.12.11.1 of n1570</comment>
      <text xml:space="preserve" bytes="225">{{dsc fun | c/numeric/math/copysign | title=copysign&lt;br&gt;copysignf&lt;br&gt;copysignl | produces a value with the magnitude of a given value and the sign of another given value | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>a3osy7unyvw65ipdhsvn0f6vga68b0i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc cos</title>
    <ns>10</ns>
    <id>5979</id>
    <revision>
      <id>70723</id>
      <parentid>53664</parentid>
      <timestamp>2014-05-29T13:30:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="138">{{dsc fun | c/numeric/math/cos | title=cos&lt;br&gt;cosf&lt;br&gt;cosl | computes cosine ({{math|cos(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>ssim214pftultbra5ljacli7u5opko3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc cosh</title>
    <ns>10</ns>
    <id>5971</id>
    <revision>
      <id>70730</id>
      <parentid>53667</parentid>
      <timestamp>2014-05-29T14:47:22Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="152">{{dsc fun | c/numeric/math/cosh | title=cosh&lt;br&gt;coshf&lt;br&gt;coshl | computes hyperbolic cosine ({{math|ch(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>agw07gkpp9yuzfrq216d0p5tvc3cm0p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc div</title>
    <ns>10</ns>
    <id>5999</id>
    <revision>
      <id>71915</id>
      <parentid>71913</parentid>
      <timestamp>2014-07-01T19:33:00Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>mark c99 for lldiv</comment>
      <text xml:space="preserve" bytes="145">{{dsc fun | c/numeric/math/div | title=div&lt;br&gt;ldiv&lt;br&gt;lldiv | computes quotient and remainder of integer division | notes=&lt;br&gt;&lt;br&gt;{{mark c99}} }}</text>
      <sha1>7g3p1d0f4k78d547whccvr26w2j8gdo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc div t</title>
    <ns>10</ns>
    <id>13637</id>
    <revision>
      <id>71478</id>
      <parentid>71364</parentid>
      <timestamp>2014-06-11T20:08:22Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>link to div</comment>
      <text xml:space="preserve" bytes="101">{{dsc typedef | c/numeric/math/div | title=div_t | structure type, return of the {{c|div}} function}}</text>
      <sha1>8mb81d6s29r0z33ejwcwxjvh2p3b3g7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc double t</title>
    <ns>10</ns>
    <id>13634</id>
    <revision>
      <id>87843</id>
      <parentid>71484</parentid>
      <timestamp>2016-10-06T13:07:49Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted a link for double_t</comment>
      <text xml:space="preserve" bytes="149">{{dsc typedef | c/numeric/math/float_t | title=double_t | most efficient floating-point type at least as wide as {{c|double}} | notes={{mark c99}} }}</text>
      <sha1>e9zoksngka6rqgaghwc9nrivjcbi1nh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc erf</title>
    <ns>10</ns>
    <id>6024</id>
    <revision>
      <id>70737</id>
      <parentid>53674</parentid>
      <timestamp>2014-05-29T19:41:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb</comment>
      <text xml:space="preserve" bytes="139">{{dsc fun |c/numeric/math/erf | title=erf&lt;br&gt;erff&lt;br&gt;erfl | computes error function | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>0rsj3qrr81g9rq0o9cdyn2ro57etpue</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc erfc</title>
    <ns>10</ns>
    <id>6023</id>
    <revision>
      <id>70738</id>
      <parentid>53677</parentid>
      <timestamp>2014-05-29T19:44:30Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | c/numeric/math/erfc | title=erfc&lt;br&gt;erfcf&lt;br&gt;erfcl | computes complementary error function | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>q1elx6rckly2zeiozfhvb3lgdddhkfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc exp</title>
    <ns>10</ns>
    <id>5991</id>
    <revision>
      <id>70707</id>
      <parentid>53680</parentid>
      <timestamp>2014-05-29T12:01:44Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names; inserted verb</comment>
      <text xml:space="preserve" bytes="170">{{dsc fun | c/numeric/math/exp | title=exp&lt;br&gt;expf&lt;br&gt;expl | computes ''e'' raised to the given power ({{math|e&lt;sup&gt;x&lt;/sup&gt;}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>6uodpz1hswes6l13rvleeepx2vl3xig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc exp2</title>
    <ns>10</ns>
    <id>5990</id>
    <revision>
      <id>70708</id>
      <parentid>53684</parentid>
      <timestamp>2014-05-29T12:07:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names; inserted verb</comment>
      <text xml:space="preserve" bytes="186">{{dsc fun | c/numeric/math/exp2 | title=exp2&lt;br&gt;exp2f&lt;br&gt;exp2l | computes ''2'' raised to the given power ({{math|2&lt;sup&gt;x&lt;/sup&gt;}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>ezh77td6k877fgqacb22j3zr0yytkrf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc expm1</title>
    <ns>10</ns>
    <id>5989</id>
    <revision>
      <id>70709</id>
      <parentid>53687</parentid>
      <timestamp>2014-05-29T12:12:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names; inserted verb</comment>
      <text xml:space="preserve" bytes="203">{{dsc fun | c/numeric/math/expm1 | title=expm1&lt;br&gt;expm1f&lt;br&gt;expm1l | computes ''e'' raised to the given power, minus one ({{math|e&lt;sup&gt;x&lt;/sup&gt;-1}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>4xd6g0oqle4l6igvutfvtzlpiuwqvtm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fabs</title>
    <ns>10</ns>
    <id>6000</id>
    <revision>
      <id>70789</id>
      <parentid>70675</parentid>
      <timestamp>2014-05-30T10:59:23Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="179">{{dsc fun | c/numeric/math/fabs | title=fabs&lt;br&gt;fabsf&lt;br&gt;fabsl | computes absolute value of a floating-point value ({{math|{{!}}x{{!}}}})|notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>gtqop1duplycuot336zmhgcror2burl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fdim</title>
    <ns>10</ns>
    <id>5993</id>
    <revision>
      <id>70794</id>
      <parentid>70706</parentid>
      <timestamp>2014-05-30T11:05:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="203">{{dsc fun | c/numeric/math/fdim | title=fdim&lt;br&gt;fdimf&lt;br&gt;fdiml | determines positive difference of two floating-point values ({{math|max(0, x-y)}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>hd6qs9vtqmgzuor7zg3h8f66n98bdjj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc float t</title>
    <ns>10</ns>
    <id>13580</id>
    <revision>
      <id>87841</id>
      <parentid>71483</parentid>
      <timestamp>2016-10-06T13:05:35Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted a link for float_t</comment>
      <text xml:space="preserve" bytes="147">{{dsc typedef | c/numeric/math/float_t | title=float_t | most efficient floating-point type at least as wide as {{c|float}} | notes={{mark c99}} }}</text>
      <sha1>jk3u71ibigoa17jrenuxz30nrapjtix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc floor</title>
    <ns>10</ns>
    <id>6027</id>
    <revision>
      <id>70750</id>
      <parentid>53697</parentid>
      <timestamp>2014-05-29T20:21:11Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb; corrected explanation</comment>
      <text xml:space="preserve" bytes="170">{{dsc fun | c/numeric/math/floor | title=floor&lt;br&gt;floorf&lt;br&gt;floorl | computes largest integer not greater than the given value | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>cajvm2nlq8v6zilvw6oo97a0byq8r6h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fma</title>
    <ns>10</ns>
    <id>5995</id>
    <revision>
      <id>70699</id>
      <parentid>53701</parentid>
      <timestamp>2014-05-29T01:22:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double function names; inserted verb</comment>
      <text xml:space="preserve" bytes="154">{{dsc fun | c/numeric/math/fma | title=fma&lt;br&gt;fmaf&lt;br&gt;fmal | computes fused multiply-add operation | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>1x7qcos7ux99uxdodjvyjhvg2lyrdrl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fmax</title>
    <ns>10</ns>
    <id>5994</id>
    <revision>
      <id>70792</id>
      <parentid>70704</parentid>
      <timestamp>2014-05-30T11:02:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="167">{{dsc fun | c/numeric/math/fmax | title=fmax&lt;br&gt;fmaxf&lt;br&gt;fmaxl | determines larger of two floating-point values | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>ry501hev3aeqy7wi29okvg1tsk24q66</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fmin</title>
    <ns>10</ns>
    <id>5970</id>
    <revision>
      <id>70793</id>
      <parentid>70705</parentid>
      <timestamp>2014-05-30T11:03:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="168">{{dsc fun | c/numeric/math/fmin | title=fmin&lt;br&gt;fminf&lt;br&gt;fminl | determines smaller of two floating-point values | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>nwozu3bkj8mt5a3f5q0qo747yz5q9vi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fmod</title>
    <ns>10</ns>
    <id>5998</id>
    <revision>
      <id>70790</id>
      <parentid>70695</parentid>
      <timestamp>2014-05-30T11:00:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="166">{{dsc fun | c/numeric/math/fmod | title=fmod&lt;br&gt;fmodf&lt;br&gt;fmodl| computes remainder of the floating-point division operation |notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>brpxc1qzhxeifgl3yf5j4ygixlps7sd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fnan</title>
    <ns>10</ns>
    <id>5992</id>
    <revision>
      <id>70858</id>
      <parentid>53714</parentid>
      <timestamp>2014-05-31T11:16:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted verb</comment>
      <text xml:space="preserve" bytes="144">{{dsc fun | c/numeric/math/nan | title=nan&lt;br&gt;nanf&lt;br&gt;nanl | returns a NaN (not-a-number) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1>r6qpbc74pbhyqpmgnhy2ihxnykgt6ju</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc fpclassify</title>
    <ns>10</ns>
    <id>6007</id>
    <revision>
      <id>70796</id>
      <parentid>53718</parentid>
      <timestamp>2014-05-30T11:12:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen; entry now uses the same verb that appears in 7.12.3.1 of n1570</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | c/numeric/math/fpclassify | classifies the given floating-point value | notes={{mark c99}} }}</text>
      <sha1>gfxv7v9yd833iksd31rb78knd8sj8k9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc frexp</title>
    <ns>10</ns>
    <id>6015</id>
    <revision>
      <id>70751</id>
      <parentid>53721</parentid>
      <timestamp>2014-05-29T20:28:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; used verb found in 7.12.6.4 of n1570</comment>
      <text xml:space="preserve" bytes="168">{{dsc fun | c/numeric/math/frexp | title=frexp&lt;br&gt;frexpf&lt;br&gt;frexpl | breaks a number into significand and a power of {{c|2}} | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>c0bmy4ct1dv99rkl2j48o8knu26oeju</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc hypot</title>
    <ns>10</ns>
    <id>5982</id>
    <revision>
      <id>70721</id>
      <parentid>53724</parentid>
      <timestamp>2014-05-29T13:20:43Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="236">{{dsc fun | c/numeric/math/hypot | title=hypot&lt;br&gt;hypotf&lt;br&gt;hypotl | computes square root of the sum of the squares of two given numbers ({{math|{{mrad|x{{su|p=2}}+y{{su|p=2}}}}}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>27bdcnddn5cdb4ma6drtjwkiu14desd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc ilogb</title>
    <ns>10</ns>
    <id>6011</id>
    <revision>
      <id>70755</id>
      <parentid>53727</parentid>
      <timestamp>2014-05-29T20:53:21Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function</comment>
      <text xml:space="preserve" bytes="162">{{dsc fun | c/numeric/math/ilogb | title=ilogb&lt;br&gt;ilogbf&lt;br&gt;ilogbl | extracts exponent of the given number | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>ghabn3i5cs32jjvc6v624sxatftwdl4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc imaxabs</title>
    <ns>10</ns>
    <id>13704</id>
    <revision>
      <id>71909</id>
      <timestamp>2014-07-01T19:22:24Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>New template to separate abs and imaxabs, like in C++ templates</comment>
      <text xml:space="preserve" bytes="140">{{dsc fun | c/numeric/math/abs | title=imaxabs | computes absolute value of an integral value ({{math|{{!}}x{{!}}}}) | notes={{mark c99}} }}</text>
      <sha1>n0rgi8l3eqa8x9ymosja3xh6t6g8g56</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc imaxdiv</title>
    <ns>10</ns>
    <id>13705</id>
    <revision>
      <id>71910</id>
      <timestamp>2014-07-01T19:24:28Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>New template to separate div and imaxdiv, like in C++ templates</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | c/numeric/math/div | title=imaxdiv | computes quotient and remainder of integer division | notes={{mark c99}} }}</text>
      <sha1>1o9r29hpzri6p3at3zl2vh1lqvy5426</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc imaxdiv t</title>
    <ns>10</ns>
    <id>13636</id>
    <revision>
      <id>71481</id>
      <parentid>71362</parentid>
      <timestamp>2014-06-11T20:10:54Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>link to div</comment>
      <text xml:space="preserve" bytes="131">{{dsc typedef | c/numeric/math/div | title=imaxdiv_t | structure type, return of the {{c|imaxdiv}} function | notes={{mark c99}} }}</text>
      <sha1>equqmciwh3dkgtzi8m861qh86isgdia</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isfinite</title>
    <ns>10</ns>
    <id>6006</id>
    <revision>
      <id>53731</id>
      <parentid>51936</parentid>
      <timestamp>2013-06-01T05:05:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/math/dcl list isfinite]] to [[Template:c/numeric/math/dsc isfinite]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | c/numeric/math/isfinite | checks if the given number has finite value | notes={{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isgreater</title>
    <ns>10</ns>
    <id>13533</id>
    <revision>
      <id>70403</id>
      <timestamp>2014-05-21T22:19:29Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>Add missing isgreater (C99) like isgreater (c++11)</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | c/numeric/math/isgreater | checks if the first floating-point argument is greater than the second| notes={{mark c99}} }}</text>
      <sha1>dc6mzeybg2qbc2h7xu7paaj60txqlto</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isgreaterequal</title>
    <ns>10</ns>
    <id>13534</id>
    <revision>
      <id>70404</id>
      <timestamp>2014-05-21T22:22:58Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>Add missing isgreaterequal (C99) like isgreaterequal (C++11)</comment>
      <text xml:space="preserve" bytes="146">{{dsc fun | c/numeric/math/isgreaterequal | checks if the first floating-point argument is greater or equal than the second| notes={{mark c99}} }}</text>
      <sha1>79nkfxf5yj85fwcxuclumynnkp65s2r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isinf</title>
    <ns>10</ns>
    <id>6005</id>
    <revision>
      <id>53734</id>
      <parentid>51937</parentid>
      <timestamp>2013-06-01T05:05:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/math/dcl list isinf]] to [[Template:c/numeric/math/dsc isinf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | c/numeric/math/isinf | checks if the given number is infinite | notes={{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isless</title>
    <ns>10</ns>
    <id>13535</id>
    <revision>
      <id>70405</id>
      <timestamp>2014-05-21T22:26:04Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>Add missing isless (C99) like isless (C++11)</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | c/numeric/math/isless | checks if the first floating-point argument is less than the second| notes={{mark c99}} }}</text>
      <sha1>5hjj45q6hh9t7ttcx7euuislb9drm1r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc islessequal</title>
    <ns>10</ns>
    <id>13536</id>
    <revision>
      <id>70406</id>
      <timestamp>2014-05-21T22:27:56Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>Add missing islessequal (C99) like islessequal (C++11)</comment>
      <text xml:space="preserve" bytes="140">{{dsc fun | c/numeric/math/islessequal | checks if the first floating-point argument is less or equal than the second| notes={{mark c99}} }}</text>
      <sha1>g58k6qm6c8ltankx4qttnhvadn0srs3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc islessgreater</title>
    <ns>10</ns>
    <id>13537</id>
    <revision>
      <id>70407</id>
      <timestamp>2014-05-21T22:30:40Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>Add missing islessgreater (C99) like islessgreater (C++11)</comment>
      <text xml:space="preserve" bytes="144">{{dsc fun | c/numeric/math/islessgreater | checks if the first floating-point argument is less or greater than the second| notes={{mark c99}} }}</text>
      <sha1>o3ez0fioote8lwn3yonkmfugjzixvdj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isnan</title>
    <ns>10</ns>
    <id>6004</id>
    <revision>
      <id>53737</id>
      <parentid>51938</parentid>
      <timestamp>2013-06-01T05:05:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/math/dcl list isnan]] to [[Template:c/numeric/math/dsc isnan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc fun | c/numeric/math/isnan | checks if the given number is NaN| notes={{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isnormal</title>
    <ns>10</ns>
    <id>6003</id>
    <revision>
      <id>87720</id>
      <parentid>87719</parentid>
      <timestamp>2016-09-28T04:51:27Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <comment>Undo revision 87719 by [[Special:Contributions/Fruderica|Fruderica]] ([[User talk:Fruderica|talk]])</comment>
      <text xml:space="preserve" bytes="98">{{dsc fun | c/numeric/math/isnormal | checks if the given number is normal | notes={{mark c99}} }}</text>
      <sha1>60ir83cu2sb9oslioswotwnnvyr97ir</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc isunordered</title>
    <ns>10</ns>
    <id>13538</id>
    <revision>
      <id>70408</id>
      <timestamp>2014-05-21T22:33:05Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>Add missing isunordered (C99) like isunordered (C++11)</comment>
      <text xml:space="preserve" bytes="113">{{dsc fun | c/numeric/math/isunordered | checks if two floating-point values are unordered| notes={{mark c99}} }}</text>
      <sha1>mrgy9ej30vxweelpntho4y650ncpy6b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc ldexp</title>
    <ns>10</ns>
    <id>6014</id>
    <revision>
      <id>70752</id>
      <parentid>53744</parentid>
      <timestamp>2014-05-29T20:32:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function</comment>
      <text xml:space="preserve" bytes="161">{{dsc fun | c/numeric/math/ldexp | title=ldexp&lt;br&gt;ldexpf&lt;br&gt;ldexpl | multiplies a number by {{c|2}} raised to a power | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>kidw0ls29j54e58a2z57naqktrloj8o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc ldiv t</title>
    <ns>10</ns>
    <id>13638</id>
    <revision>
      <id>71479</id>
      <parentid>71365</parentid>
      <timestamp>2014-06-11T20:09:11Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>link to div</comment>
      <text xml:space="preserve" bytes="103">{{dsc typedef | c/numeric/math/div | title=ldiv_t | structure type, return of the {{c|ldiv}} function}}</text>
      <sha1>lsa98jak47ab0nlfj35tx884uqv3v9m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc lgamma</title>
    <ns>10</ns>
    <id>6022</id>
    <revision>
      <id>70739</id>
      <parentid>53750</parentid>
      <timestamp>2014-05-29T19:47:55Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb</comment>
      <text xml:space="preserve" bytes="190">{{dsc fun | c/numeric/math/lgamma | title=lgamma&lt;br&gt;lgammaf&lt;br&gt;lgammal | computes natural (base-''e'') logarithm of the gamma function | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>oh4fal8rg0zie864ey5stw46fpz8jcl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc lldiv t</title>
    <ns>10</ns>
    <id>13635</id>
    <revision>
      <id>71480</id>
      <parentid>71361</parentid>
      <timestamp>2014-06-11T20:10:08Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>link to div</comment>
      <text xml:space="preserve" bytes="127">{{dsc typedef | c/numeric/math/div | title=lldiv_t | structure type, return of the {{c|lldiv}} function | notes={{mark c99}} }}</text>
      <sha1>b1kdl9ta2xogvv175ctjsz6hz89ua53</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc log</title>
    <ns>10</ns>
    <id>5988</id>
    <revision>
      <id>70714</id>
      <parentid>70710</parentid>
      <timestamp>2014-05-29T12:38:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="161">{{dsc fun | c/numeric/math/log | title=log&lt;br&gt;logf&lt;br&gt;logl | computes natural (base-''e'') logarithm ({{math|ln(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>t3a7zr8ymw9ss074xrqipi6junb7eyf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc log10</title>
    <ns>10</ns>
    <id>5987</id>
    <revision>
      <id>70715</id>
      <parentid>70711</parentid>
      <timestamp>2014-05-29T12:39:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="183">{{dsc fun | c/numeric/math/log10 | title=log10&lt;br&gt;log10f&lt;br&gt;log10l | computes common (base-''10'') logarithm ({{math|log&lt;sub&gt;10&lt;/sub&gt;(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>spyc8ib1fhd8iaalcc6ecy6afmk7gko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc log1p</title>
    <ns>10</ns>
    <id>5986</id>
    <revision>
      <id>70716</id>
      <parentid>70713</parentid>
      <timestamp>2014-05-29T12:40:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="210">{{dsc fun | c/numeric/math/log1p | title=log1p&lt;br&gt;log1pf&lt;br&gt;log1pl | computes natural (base-''e'') logarithm of 1 plus the given number ({{math|ln(1+x)}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>18505dud9izzq7zy2h8oasfml40jt9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc log2</title>
    <ns>10</ns>
    <id>5985</id>
    <revision>
      <id>70712</id>
      <parentid>70591</parentid>
      <timestamp>2014-05-29T12:28:36Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names; inserted verb; deleted superfluous prepositional phrase</comment>
      <text xml:space="preserve" bytes="177">{{dsc fun | c/numeric/math/log2 | title=log2&lt;br&gt;log2f&lt;br&gt;log2l  | computes base-2 logarithm ({{math|log&lt;sub&gt;2&lt;/sub&gt;(x)}}) | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>av8tzx2glykoqoflg5flz99t438kdsy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc logb</title>
    <ns>10</ns>
    <id>6010</id>
    <revision>
      <id>70757</id>
      <parentid>53766</parentid>
      <timestamp>2014-05-29T20:56:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | c/numeric/math/logb | title=logb&lt;br&gt;logbf&lt;br&gt;logbl | extracts exponent of the given number | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>my5vz1hzf3tv3bx90do7yygim64uvem</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc math errhandling</title>
    <ns>10</ns>
    <id>13523</id>
    <revision>
      <id>70183</id>
      <timestamp>2014-05-11T16:00:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="244">{{dsc macro const | c/numeric/math/math_errhandling |title=math_errhandling&lt;br&gt;MATH_ERRNO&lt;br&gt;MATH_ERREXCEPT | defines the error handling mechanism used by the common mathematical functions | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>prti65erh25oue1z8gelcopetsujwiq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc modf</title>
    <ns>10</ns>
    <id>6013</id>
    <revision>
      <id>70753</id>
      <parentid>53768</parentid>
      <timestamp>2014-05-29T20:37:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; used verb found in 7.12.6.12 of n1570</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | c/numeric/math/modf | title=modf&lt;br&gt;modff&lt;br&gt;modfl | breaks a number into integer and fractional parts | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>8fflhq8nn3cvf49e2oo9l7e6hyq7tlr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc nearbyint</title>
    <ns>10</ns>
    <id>6017</id>
    <revision>
      <id>70743</id>
      <parentid>53772</parentid>
      <timestamp>2014-05-29T20:04:11Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb; correct explanation</comment>
      <text xml:space="preserve" bytes="189">{{dsc fun | c/numeric/math/nearbyint | title=nearbyint&lt;br&gt;nearbyintf&lt;br&gt;nearbyintl | rounds to an integer using current rounding mode | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>e79bbzdjl8euv4t6s6eg8yo0kaa7o52</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc nextafter</title>
    <ns>10</ns>
    <id>6009</id>
    <revision>
      <id>70795</id>
      <parentid>70759</parentid>
      <timestamp>2014-05-30T11:07:06Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="307">{{dsc fun | c/numeric/math/nextafter | title=nextafter&lt;br&gt;nextafterf&lt;br&gt;nextafterl&lt;br&gt;nexttoward&lt;br&gt;nexttowardf&lt;br&gt;nexttowardl | determines next representable floating-point value towards the given value | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>oqttn84v0n010lh6fnos8e7j9xol8et</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc pow</title>
    <ns>10</ns>
    <id>5981</id>
    <revision>
      <id>70717</id>
      <parentid>53781</parentid>
      <timestamp>2014-05-29T12:48:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names; inserted verb</comment>
      <text xml:space="preserve" bytes="173">{{dsc fun | c/numeric/math/pow | title=pow&lt;br&gt;powf&lt;br&gt;powl | computes a number raised to the given power ({{math|x&lt;sup&gt;y&lt;/sup&gt;}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>dbcajzqneswc1zzuwto0bgsp0yb75qs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc remainder</title>
    <ns>10</ns>
    <id>5997</id>
    <revision>
      <id>70791</id>
      <parentid>70696</parentid>
      <timestamp>2014-05-30T11:01:17Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted hyphen</comment>
      <text xml:space="preserve" bytes="207">{{dsc fun | c/numeric/math/remainder | title=remainder&lt;br&gt;remainderf&lt;br&gt;remainderl | computes signed remainder of the floating-point division operation | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>nhtootw4lbwoujo4nob0wc9kotvn9k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc remquo</title>
    <ns>10</ns>
    <id>5996</id>
    <revision>
      <id>70698</id>
      <parentid>53786</parentid>
      <timestamp>2014-05-29T01:13:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double function names; inserted verb</comment>
      <text xml:space="preserve" bytes="211">{{dsc fun | c/numeric/math/remquo | title=remquo&lt;br&gt;remquof&lt;br&gt;remquol | computes signed remainder as well as the three last bits of the division operation | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>itf3utfwqe2ulayi95855508j667f2a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc rint</title>
    <ns>10</ns>
    <id>6016</id>
    <revision>
      <id>70745</id>
      <parentid>53792</parentid>
      <timestamp>2014-05-29T20:11:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb; correct explanation</comment>
      <text xml:space="preserve" bytes="368">{{dsc fun | c/numeric/math/rint | title=rint&lt;br&gt;rintf&lt;br&gt;rintl&lt;br&gt;lrint&lt;br&gt;lrintf&lt;br&gt;lrintl&lt;br&gt;llrint&lt;br&gt;llrintf&lt;br&gt;llrintl | rounds to an integer using current rounding mode with &lt;br&gt; exception if the result differs | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>8y59tiit498zi6v5528ddiw47a8zyf4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc round</title>
    <ns>10</ns>
    <id>6018</id>
    <revision>
      <id>70742</id>
      <parentid>53796</parentid>
      <timestamp>2014-05-29T19:59:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted verb</comment>
      <text xml:space="preserve" bytes="193">{{dsc fun | c/numeric/math/round | title=round&lt;br&gt;lround&lt;br&gt;llround | rounds to nearest integer, rounding away from zero in halfway cases | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>m9h5jiq3qu75abmgnplg9st3zifgaab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc scalbn</title>
    <ns>10</ns>
    <id>6012</id>
    <revision>
      <id>70754</id>
      <parentid>53801</parentid>
      <timestamp>2014-05-29T20:45:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; used verb found in 7.12.6.13 of n1570</comment>
      <text xml:space="preserve" bytes="282">{{dsc fun | c/numeric/math/scalbn | title=scalbn&lt;br&gt;scalbnf&lt;br&gt;scalbnl&lt;br&gt;scalbln&lt;br&gt;scalblnf&lt;br&gt;scalblnl | computes efficiently a number times {{lc|FLT_RADIX}} raised to a power | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>22d7h3ip8c5cbuq2ptv6w7ryqtup5q5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc signbit</title>
    <ns>10</ns>
    <id>6002</id>
    <revision>
      <id>53805</id>
      <parentid>51956</parentid>
      <timestamp>2013-06-01T05:05:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/math/dcl list signbit]] to [[Template:c/numeric/math/dsc signbit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc fun | c/numeric/math/signbit | checks if the given number is negative | notes={{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc sin</title>
    <ns>10</ns>
    <id>5980</id>
    <revision>
      <id>70722</id>
      <parentid>53811</parentid>
      <timestamp>2014-05-29T13:26:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="137">{{dsc fun | c/numeric/math/sin | title=sin&lt;br&gt;sinf&lt;br&gt;sinl  | computes sine ({{math|sin(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>r5kaupqynxyxi3nyrl6lsgvl59gmq9r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc sinh</title>
    <ns>10</ns>
    <id>5972</id>
    <revision>
      <id>70729</id>
      <parentid>53814</parentid>
      <timestamp>2014-05-29T14:44:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="150">{{dsc fun | c/numeric/math/sinh | title=sinh&lt;br&gt;sinhf&lt;br&gt;sinhl | computes hyperbolic sine ({{math|sh(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>5fg57wnhz7uqn5xshjze5sushru1rh7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc sqrt</title>
    <ns>10</ns>
    <id>5984</id>
    <revision>
      <id>70718</id>
      <parentid>53816</parentid>
      <timestamp>2014-05-29T12:51:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="152">{{dsc fun | c/numeric/math/sqrt | title=sqrt&lt;br&gt;sqrtf&lt;br&gt;sqrtl | computes square root ({{math|{{mrad|x}}}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}  }}</text>
      <sha1>a8jswl94sin24sepeqxn05wk1udydqj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc tan</title>
    <ns>10</ns>
    <id>5977</id>
    <revision>
      <id>70724</id>
      <parentid>53819</parentid>
      <timestamp>2014-05-29T13:32:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="139">{{dsc fun | c/numeric/math/tan | title=tan&lt;br&gt;tanf&lt;br&gt;tanl | computes tangent ({{math|tan(x)}}) | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>tjyps4p6vin0ax9uk8omz3uyp3pxpgn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc tanh</title>
    <ns>10</ns>
    <id>5978</id>
    <revision>
      <id>70731</id>
      <parentid>53821</parentid>
      <timestamp>2014-05-29T14:52:04Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>inserted the float and long double function names</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | c/numeric/math/tanh | title=tanh&lt;br&gt;tanhf&lt;br&gt;tanhl | computes hyperbolic tangent | notes=&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>59wtvi4p9uarcfdg3syzy5b9rpio450</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc tgamma</title>
    <ns>10</ns>
    <id>6021</id>
    <revision>
      <id>70740</id>
      <parentid>53824</parentid>
      <timestamp>2014-05-29T19:50:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb</comment>
      <text xml:space="preserve" bytes="152">{{dsc fun | c/numeric/math/tgamma | title=tgamma&lt;br&gt;tgammaf&lt;br&gt;tgammal | computes gamma function | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>pmh94ra7mzihxh6vmovo3m7ywmxotfk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/dsc trunc</title>
    <ns>10</ns>
    <id>6019</id>
    <revision>
      <id>70741</id>
      <parentid>53828</parentid>
      <timestamp>2014-05-29T19:55:57Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted float and long double names of the function; inserted verb</comment>
      <text xml:space="preserve" bytes="196">{{dsc fun | c/numeric/math/trunc | title=trunc&lt;br&gt;truncf&lt;br&gt;truncl | rounds to nearest integer not greater in magnitude than the given value | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}</text>
      <sha1>3krx8ypb4291eb3fvzxjvam6kup276w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/navbar</title>
    <ns>10</ns>
    <id>6033</id>
    <revision>
      <id>39848</id>
      <parentid>35494</parentid>
      <timestamp>2012-09-28T19:56:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="229">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/numeric/navbar heading
|content2 = c/numeric/navbar content

|heading3 = c/numeric/math/navbar heading
|content3 = c/numeric/math/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/navbar content</title>
    <ns>10</ns>
    <id>6409</id>
    <revision>
      <id>87848</id>
      <parentid>87847</parentid>
      <timestamp>2016-10-06T14:47:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+missing macros, too</comment>
      <text xml:space="preserve" bytes="5284">{{nv begin}}
{{nv h1 | Functions}}
{{nv h2 | Basic operations}}
{{nv col begin}}
{{nv ln | c/numeric/math/abs | abs | labs | llabs |imaxabs|notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}}}}
{{nv ln | c/numeric/math/fabs}}
{{nv ln | c/numeric/math/div | div | ldiv | lldiv| imaxdiv|notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}}}}
{{nv ln | c/numeric/math/fmod}}
{{nv col next}}
{{nv ln | c/numeric/math/remainder | notes={{mark c99}} }}
{{nv ln | c/numeric/math/remquo | notes={{mark c99}} }}
{{nv ln | c/numeric/math/fma | notes={{mark c99}} }}
{{nv ln | c/numeric/math/fmax | notes={{mark c99}} }}
{{nv ln | c/numeric/math/fmin | notes={{mark c99}} }}
{{nv ln | c/numeric/math/fdim | notes={{mark c99}} }}
{{nv ln | c/numeric/math/nan | nan | nanf | nanl | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}
{{nv col end}}

{{nv h2 | Exponential functions}}
{{nv col begin}}
{{nv ln | c/numeric/math/exp}}
{{nv ln | c/numeric/math/exp2 | notes={{mark c99}} }}
{{nv ln | c/numeric/math/expm1 | notes={{mark c99}} }}
{{nv col next}}
{{nv ln | c/numeric/math/log}}
{{nv ln | c/numeric/math/log10}}
{{nv ln | c/numeric/math/log1p | notes={{mark c99}} }}
{{nv ln | c/numeric/math/log2| notes={{mark c99}} }}
{{nv col end}}

{{nv h2 | Power functions}}
{{nv col begin}}
{{nv ln | c/numeric/math/sqrt}}
{{nv ln | c/numeric/math/cbrt | notes={{mark c99}} }}
{{nv col next}}
{{nv ln | c/numeric/math/hypot | notes={{mark c99}} }}
{{nv ln | c/numeric/math/pow}}
{{nv col end}}

{{nv h2 | Trigonometric and hyperbolic functions}}
{{nv col begin}}
{{nv ln | c/numeric/math/sin}}
{{nv ln | c/numeric/math/cos}}
{{nv ln | c/numeric/math/tan}}
{{nv ln | c/numeric/math/asin}}
{{nv ln | c/numeric/math/acos}}
{{nv ln | c/numeric/math/atan}}
{{nv ln | c/numeric/math/atan2}}
{{nv col next}}
{{nv ln | c/numeric/math/sinh}}
{{nv ln | c/numeric/math/cosh}}
{{nv ln | c/numeric/math/tanh}}
{{nv ln | c/numeric/math/asinh | notes={{mark c99}} }}
{{nv ln | c/numeric/math/acosh | notes={{mark c99}} }}
{{nv ln | c/numeric/math/atanh | notes={{mark c99}} }}
{{nv col end}}

{{nv h2 | Error and gamma functions}}
{{nv col begin}}
{{nv ln | c/numeric/math/erf | notes={{mark c99}} }}
{{nv ln | c/numeric/math/erfc | notes={{mark c99}} }}
{{nv col next}}
{{nv ln | c/numeric/math/lgamma | notes={{mark c99}} }}
{{nv ln | c/numeric/math/tgamma | notes={{mark c99}} }}
{{nv col end}}

{{nv h2 | Nearest integer floating point operations}}
{{nv col begin}}
{{nv ln | c/numeric/math/ceil}}
{{nv ln | c/numeric/math/floor}}
{{nv ln | c/numeric/math/round | round | lround | llround  | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv col next}}
{{nv ln | c/numeric/math/trunc | notes={{mark c99}} }}
{{nv ln | c/numeric/math/nearbyint | notes={{mark c99}} }}
{{nv ln | c/numeric/math/rint | rint | lrint | llrint | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}
{{nv col end}}

{{nv h2 | Floating point manipulation functions}}
{{nv col begin}}
{{nv ln | c/numeric/math/ldexp}}
{{nv ln | c/numeric/math/scalbn | scalbn | scalbln | notes={{mark c99}}&lt;br&gt;{{mark c99}} }}
{{nv ln | c/numeric/math/ilogb | notes={{mark c99}} }}
{{nv ln | c/numeric/math/logb | notes={{mark c99}} }}
{{nv col next}}
{{nv ln | c/numeric/math/frexp}}
{{nv ln | c/numeric/math/modf}}
{{nv ln | c/numeric/math/nextafter | nextafter | nexttoward | notes={{mark c99}}&lt;br&gt;{{mark c99}} }}
{{nv ln | c/numeric/math/copysign | notes={{mark c99}} }}
{{nv col end}}

{{nv h2 | Classification}}
{{nv col begin}}
{{nv ln | c/numeric/math/fpclassify | notes={{mark c99}} }}
{{nv ln | c/numeric/math/isfinite | notes={{mark c99}} }}
{{nv ln | c/numeric/math/isinf | notes={{mark c99}} }}
{{nv ln | c/numeric/math/isnan | notes={{mark c99}} }}
{{nv ln | c/numeric/math/isnormal | notes={{mark c99}} }}
{{nv ln | c/numeric/math/signbit | notes={{mark c99}} }}
{{nv col next}}
{{nv ln | c/numeric/math/isgreater | notes={{mark c99}} }}
{{nv ln | c/numeric/math/isgreaterequal | notes={{mark c99}} }}
{{nv ln | c/numeric/math/isless | notes={{mark c99}} }}
{{nv ln | c/numeric/math/islessequal | notes={{mark c99}} }}
{{nv ln | c/numeric/math/islessgreater | notes={{mark c99}} }}
{{nv ln | c/numeric/math/isunordered | notes={{mark c99}} }}
{{nv col end}}

{{nv h1 | Types}}
{{nv col begin}}
{{nv ln | c/numeric/math/div | div_t| ldiv_t|lldiv_t|imaxdiv_t| notes=&lt;br&gt;&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv col next}}
{{nv ln | c/numeric/math/float_t | float_t| double_t | notes={{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv col end}}

{{nv h1 | Macro constants}}
{{nv col begin}}
{{nv ln | c/numeric/math/HUGE_VAL | HUGE_VALF | HUGE_VAL | HUGE_VALL | notes={{mark c99}}&lt;br&gt;&lt;br&gt;{{mark c99}}}}
{{nv ln | c/numeric/math/fma|FP_FAST_FMAF|FP_FAST_FMA|FP_FAST_FMAL| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv ln | c/numeric/math/math_errhandling|math_errhandling|MATH_ERRNO|MATH_ERRNOEXCEPT| notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv col next}}
{{nv ln | c/numeric/math/INFINITY | notes={{mark c99}}}}
{{nv ln | c/numeric/math/NAN| notes={{mark c99}}}}
{{nv ln|c/numeric/math/ilogb|FP_ILOGB0|FP_ILOGBNAN|notes={{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv ln | c/numeric/math/FP_categories | FP_NORMAL | FP_SUBNORMAL | FP_ZERO | FP_INFINITE | FP_NAN | notes={{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}}&lt;br&gt;{{mark c99}} }}
{{nv col end}}
{{nv end}}</text>
      <sha1>l3zhvlhf0fys3apuxnzt45l2vflfrj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/math/navbar heading</title>
    <ns>10</ns>
    <id>6034</id>
    <revision>
      <id>35498</id>
      <parentid>25272</parentid>
      <timestamp>2012-06-15T22:26:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/math/sidebar heading]] to [[Template:c/numeric/math/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="50">[[c/numeric/math | Common mathematical functions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/navbar</title>
    <ns>10</ns>
    <id>6358</id>
    <revision>
      <id>39849</id>
      <parentid>35503</parentid>
      <timestamp>2012-09-28T19:56:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="144">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/numeric/navbar heading
|content2 = c/numeric/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/navbar content</title>
    <ns>10</ns>
    <id>6360</id>
    <revision>
      <id>51965</id>
      <parentid>34982</parentid>
      <timestamp>2013-06-01T04:37:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="302">{{nv begin}}
{{nv | [[c/numeric/math|Common mathematical functions]] }}
{{nv | [[c/numeric/fenv|Floating-point environment]] }}
{{nv | [[c/numeric/complex|Complex number arithmetics]] }}
{{nv | [[c/numeric/random|Random number generation]] }}
{{nv | [[c/numeric/tgmath|Type-generic math]] }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/navbar heading</title>
    <ns>10</ns>
    <id>6359</id>
    <revision>
      <id>35454</id>
      <parentid>25050</parentid>
      <timestamp>2012-06-15T22:25:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/sidebar heading]] to [[Template:c/numeric/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="24">[[c/numeric | Numerics]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/random/dsc RAND MAX</title>
    <ns>10</ns>
    <id>6412</id>
    <revision>
      <id>53830</id>
      <parentid>51966</parentid>
      <timestamp>2013-06-01T05:06:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/random/dcl list RAND MAX]] to [[Template:c/numeric/random/dsc RAND MAX]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc macro const | c/numeric/random/RAND_MAX | maximum possible value generated by {{c|rand()}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/random/dsc rand</title>
    <ns>10</ns>
    <id>6413</id>
    <revision>
      <id>53832</id>
      <parentid>51967</parentid>
      <timestamp>2013-06-01T05:06:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/random/dcl list rand]] to [[Template:c/numeric/random/dsc rand]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | c/numeric/random/rand | generates a pseudo-random number }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/random/dsc srand</title>
    <ns>10</ns>
    <id>6414</id>
    <revision>
      <id>53834</id>
      <parentid>51968</parentid>
      <timestamp>2013-06-01T05:06:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/random/dcl list srand]] to [[Template:c/numeric/random/dsc srand]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | c/numeric/random/srand | seeds pseudo-random number generator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/random/navbar</title>
    <ns>10</ns>
    <id>6418</id>
    <revision>
      <id>39850</id>
      <parentid>35500</parentid>
      <timestamp>2012-09-28T19:56:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="233">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/numeric/navbar heading
|content2 = c/numeric/navbar content

|heading3 = c/numeric/random/navbar heading
|content3 = c/numeric/random/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/random/navbar content</title>
    <ns>10</ns>
    <id>6420</id>
    <revision>
      <id>51969</id>
      <parentid>35501</parentid>
      <timestamp>2013-06-01T04:37:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="139">{{nv begin}}
{{nv ln | cpp/numeric/random/rand }}
{{nv ln | cpp/numeric/random/srand }}
{{nv ln | cpp/numeric/random/RAND_MAX }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/numeric/random/navbar heading</title>
    <ns>10</ns>
    <id>6419</id>
    <revision>
      <id>35502</id>
      <parentid>25487</parentid>
      <timestamp>2012-06-15T22:26:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/numeric/random/sidebar heading]] to [[Template:c/numeric/random/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="54">[[c/numeric/random | Pseudo-random number generation]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/preprocessor/navbar</title>
    <ns>10</ns>
    <id>12668</id>
    <revision>
      <id>61446</id>
      <timestamp>2013-06-06T00:37:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="231">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/language/navbar heading
|content2 = c/language/navbar content

|heading3 = c/preprocessor/navbar heading
|content3 = c/preprocessor/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/preprocessor/navbar content</title>
    <ns>10</ns>
    <id>12670</id>
    <revision>
      <id>72160</id>
      <parentid>61449</parentid>
      <timestamp>2014-07-19T14:28:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>no #warning in C</comment>
      <text xml:space="preserve" bytes="413">{{nv begin}}
{{nv ln | c/preprocessor/conditional | &amp;#35;if | &amp;#35;ifdef | &amp;#35;ifndef | &amp;#35;else | &amp;#35;elif | &amp;#35;endif}}
{{nv ln | c/preprocessor/replace | &amp;#35;define | &amp;#35;undef | &amp;#35;,&amp;#35;&amp;#35; operators}}
{{nv ln | c/preprocessor/include | &amp;#35;include}}
{{nv ln | c/preprocessor/error | &amp;#35;error}}
{{nv ln | c/preprocessor/impl | &amp;#35;pragma}}
{{nv ln | c/preprocessor/line | &amp;#35;line}}
{{nv end}}</text>
      <sha1>ggz6at849rnkfzazqcyp0ik6y895byc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/preprocessor/navbar heading</title>
    <ns>10</ns>
    <id>12669</id>
    <revision>
      <id>61448</id>
      <parentid>61447</parentid>
      <timestamp>2013-06-06T00:38:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="33">[[c/preprocessor | Preprocessor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc EXIT status</title>
    <ns>10</ns>
    <id>5948</id>
    <revision>
      <id>53838</id>
      <parentid>51970</parentid>
      <timestamp>2013-06-01T05:06:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list EXIT status]] to [[Template:c/program/dsc EXIT status]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc macro const | c/program/EXIT_status | title=EXIT_SUCCESS&lt;br&gt;EXIT_FAILURE | indicates program execution execution status}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc Exit</title>
    <ns>10</ns>
    <id>5951</id>
    <revision>
      <id>53840</id>
      <parentid>51971</parentid>
      <timestamp>2013-06-01T05:06:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list Exit]] to [[Template:c/program/dsc Exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc fun | c/program/_Exit | causes normal program termination without cleaning up |notes={{mark c99}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc SIG ERR</title>
    <ns>10</ns>
    <id>5942</id>
    <revision>
      <id>53842</id>
      <parentid>51972</parentid>
      <timestamp>2013-06-01T05:06:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list SIG ERR]] to [[Template:c/program/dsc SIG ERR]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc macro const | c/program/SIG_ERR | error was encountered }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc SIG strategies</title>
    <ns>10</ns>
    <id>5943</id>
    <revision>
      <id>53844</id>
      <parentid>51973</parentid>
      <timestamp>2013-06-01T05:06:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list SIG strategies]] to [[Template:c/program/dsc SIG strategies]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc macro const | c/program/SIG_strategies | title=SIG_DFL&lt;br&gt;SIG_IGN | defines signal handling strategies }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc SIG types</title>
    <ns>10</ns>
    <id>6336</id>
    <revision>
      <id>53846</id>
      <parentid>51974</parentid>
      <timestamp>2013-06-01T05:06:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list SIG types]] to [[Template:c/program/dsc SIG types]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc macro const | c/program/SIG_types | title=SIGABRT&lt;br&gt;SIGFPE&lt;br&gt;SIGILL&lt;br&gt;SIGINT&lt;br&gt;SIGSEGV&lt;br&gt;SIGTERM | defines signal types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc abort</title>
    <ns>10</ns>
    <id>5954</id>
    <revision>
      <id>53848</id>
      <parentid>51975</parentid>
      <timestamp>2013-06-01T05:06:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list abort]] to [[Template:c/program/dsc abort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc fun | c/program/abort | causes abnormal program termination (without cleaning up)}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc at quick exit</title>
    <ns>10</ns>
    <id>5949</id>
    <revision>
      <id>76315</id>
      <parentid>53850</parentid>
      <timestamp>2015-02-15T13:40:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>c99 --&gt; c11</comment>
      <text xml:space="preserve" bytes="137">{{dsc fun | c/program/at_quick_exit | registers a function to be called on {{ltt|c/program/quick_exit}} invocation |notes={{mark c11}} }}</text>
      <sha1>jwk9mv0rwkejon6zfbr1mqty735sq69</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc atexit</title>
    <ns>10</ns>
    <id>5950</id>
    <revision>
      <id>64382</id>
      <parentid>53852</parentid>
      <timestamp>2013-08-15T18:49:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | c/program/atexit | registers a function to be called on {{lc|exit()}} invocation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc exit</title>
    <ns>10</ns>
    <id>5953</id>
    <revision>
      <id>53854</id>
      <parentid>51978</parentid>
      <timestamp>2013-06-01T05:06:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list exit]] to [[Template:c/program/dsc exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc fun | c/program/exit | causes normal program termination with cleaning up}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc getenv</title>
    <ns>10</ns>
    <id>5946</id>
    <revision>
      <id>75266</id>
      <parentid>53856</parentid>
      <timestamp>2015-01-13T20:58:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="129">{{dsc fun | c/program/getenv | title=getenv&lt;br&gt;getenv_s | notes=&lt;br&gt;{{mark c11}} | access to the list of environment variables }}</text>
      <sha1>exld477d9apehbd55kj9oga2r770ufm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc jmp buf</title>
    <ns>10</ns>
    <id>5934</id>
    <revision>
      <id>87832</id>
      <parentid>53858</parentid>
      <timestamp>2016-10-05T12:03:09Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="61">{{dsc typedef | c/program/jmp_buf | execution context type }}</text>
      <sha1>gf0pccuaey4nk86h3bmidushsnkubk8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc longjmp</title>
    <ns>10</ns>
    <id>5935</id>
    <revision>
      <id>53860</id>
      <parentid>51981</parentid>
      <timestamp>2013-06-01T05:06:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list longjmp]] to [[Template:c/program/dsc longjmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">{{dsc fun | c/program/longjmp | jumps to specified location }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc quick exit</title>
    <ns>10</ns>
    <id>5952</id>
    <revision>
      <id>76311</id>
      <parentid>53862</parentid>
      <timestamp>2015-02-15T12:53:25Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>c99 --&gt; c11</comment>
      <text xml:space="preserve" bytes="121">{{dsc fun | c/program/quick_exit | causes normal program termination without completely cleaning up |notes={{mark c11}}}}</text>
      <sha1>8qm4nm0itxlhwwnu5rg088ev3qglt6f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc raise</title>
    <ns>10</ns>
    <id>5944</id>
    <revision>
      <id>53864</id>
      <parentid>51983</parentid>
      <timestamp>2013-06-01T05:06:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list raise]] to [[Template:c/program/dsc raise]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | c/program/raise | runs the signal handler for particular signal }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc setjmp</title>
    <ns>10</ns>
    <id>5936</id>
    <revision>
      <id>53866</id>
      <parentid>51984</parentid>
      <timestamp>2013-06-01T05:06:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list setjmp]] to [[Template:c/program/dsc setjmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">{{dsc macro fun | c/program/setjmp | saves the context }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc signal</title>
    <ns>10</ns>
    <id>5945</id>
    <revision>
      <id>53868</id>
      <parentid>51985</parentid>
      <timestamp>2013-06-01T05:06:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list signal]] to [[Template:c/program/dsc signal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc fun | c/program/signal | sets a signal handler for particular signal }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/dsc system</title>
    <ns>10</ns>
    <id>5947</id>
    <revision>
      <id>53870</id>
      <parentid>51986</parentid>
      <timestamp>2013-06-01T05:06:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/dcl list system]] to [[Template:c/program/dsc system]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc fun | c/program/system | calls the host environment's command processor }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/navbar</title>
    <ns>10</ns>
    <id>6031</id>
    <revision>
      <id>39851</id>
      <parentid>35505</parentid>
      <timestamp>2012-09-28T19:56:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="144">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/program/navbar heading
|content2 = c/program/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/navbar content</title>
    <ns>10</ns>
    <id>6471</id>
    <revision>
      <id>75408</id>
      <parentid>75404</parentid>
      <timestamp>2015-01-17T02:16:30Z</timestamp>
      <contributor>
        <username>A3f.at</username>
        <id>3652</id>
      </contributor>
      <minor/>
      <comment>Changing quick_exit from C99 to correct C11</comment>
      <text xml:space="preserve" bytes="1110">{{nv begin}}
{{nv h1 | Program termination}}
{{nv col begin}}
{{nv ln | c/program/abort}}
{{nv ln | c/program/exit}}
{{nv ln | c/program/quick_exit | notes={{mark c11}}}}
{{nv ln | c/program/_Exit | notes={{mark c99}}}}
{{nv col next}}
{{nv ln | c/program/atexit}}
{{nv ln | c/program/at_quick_exit | notes={{mark c11}}}}
{{nv ln | c/program/EXIT_status | EXIT_SUCCESS | EXIT_FAILURE}}
{{nv col end}}

{{nv h1 | Communicating with the environment}}
{{nv col begin}}
{{nv ln | c/program/system}}
{{nv col next}}
{{nv ln | c/program/getenv | getenv | getenv_s | notes=&lt;br&gt;{{mark c11}}}}
{{nv col end}}

{{nv h1 | Signals}}
{{nv col begin}}
{{nv ln | c/program/signal}}
{{nv ln | c/program/raise}}
{{nv ln | c/program/sig_atomic_t}}
{{nv col next}}
{{nv ln | c/program/SIG_strategies | SIG_DFL | SIG_IGN}}
{{nv ln | c/program/SIG_ERR}}
{{nv col end}}

{{nv h2 | Signal types}}
{{nv ln | c/program/SIG_types | SIGABRT | SIGFPE | SIGILL | SIGINT | SIGSEGV | SIGTERM}}

{{nv h1 | Non-local jumps}}
{{nv ln | c/program/setjmp}}
{{nv ln | c/program/longjmp}}

{{nv h2 | Types}}
{{nv ln | c/program/jmp_buf}}
{{nv end}}</text>
      <sha1>bonb7vxh1t8tiw2emujunfeas52d1tv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/program/navbar heading</title>
    <ns>10</ns>
    <id>6036</id>
    <revision>
      <id>35509</id>
      <parentid>21352</parentid>
      <timestamp>2012-06-15T22:27:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/program/sidebar heading]] to [[Template:c/program/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="41">[[c/program | Program support utilities]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc atof</title>
    <ns>10</ns>
    <id>5865</id>
    <revision>
      <id>87708</id>
      <parentid>53873</parentid>
      <timestamp>2016-09-27T09:51:58Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>hyphen</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | c/string/byte/atof | converts a byte string to a floating-point value }}</text>
      <sha1>ghpo2dp536bh7coj8qqreohou0bijrq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc atoi</title>
    <ns>10</ns>
    <id>5864</id>
    <revision>
      <id>78818</id>
      <parentid>53877</parentid>
      <timestamp>2015-06-09T13:11:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c99</comment>
      <text xml:space="preserve" bytes="135">{{dsc fun | c/string/byte/atoi | title=atoi&lt;br&gt;atol&lt;br&gt;atoll | converts a byte string to an integer value|notes=&lt;br&gt;&lt;br&gt;{{mark c99}} }}</text>
      <sha1>mebqklnn5nq4t2t7usrl62cmc30emrc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isalnum</title>
    <ns>10</ns>
    <id>5838</id>
    <revision>
      <id>53881</id>
      <parentid>51990</parentid>
      <timestamp>2013-06-01T05:06:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isalnum]] to [[Template:c/string/byte/dsc isalnum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | c/string/byte/isalnum | checks if a character is alphanumeric}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isalpha</title>
    <ns>10</ns>
    <id>5837</id>
    <revision>
      <id>53883</id>
      <parentid>51991</parentid>
      <timestamp>2013-06-01T05:06:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isalpha]] to [[Template:c/string/byte/dsc isalpha]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | c/string/byte/isalpha | checks if a character is alphabetic}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isblank</title>
    <ns>10</ns>
    <id>5829</id>
    <revision>
      <id>53886</id>
      <parentid>51992</parentid>
      <timestamp>2013-06-01T05:06:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isblank]] to [[Template:c/string/byte/dsc isblank]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | c/string/byte/isblank | checks if a character is a blank character | notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc iscntrl</title>
    <ns>10</ns>
    <id>5832</id>
    <revision>
      <id>53888</id>
      <parentid>51993</parentid>
      <timestamp>2013-06-01T05:06:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list iscntrl]] to [[Template:c/string/byte/dsc iscntrl]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc fun | c/string/byte/iscntrl | checks if a character is a control character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isdigit</title>
    <ns>10</ns>
    <id>5834</id>
    <revision>
      <id>53890</id>
      <parentid>51994</parentid>
      <timestamp>2013-06-01T05:06:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isdigit]] to [[Template:c/string/byte/dsc isdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc fun | c/string/byte/isdigit | checks if a character is a digit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isgraph</title>
    <ns>10</ns>
    <id>5831</id>
    <revision>
      <id>53893</id>
      <parentid>51995</parentid>
      <timestamp>2013-06-01T05:06:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isgraph]] to [[Template:c/string/byte/dsc isgraph]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | c/string/byte/isgraph | checks if a character is a graphical character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc islower</title>
    <ns>10</ns>
    <id>5836</id>
    <revision>
      <id>53895</id>
      <parentid>51996</parentid>
      <timestamp>2013-06-01T05:07:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list islower]] to [[Template:c/string/byte/dsc islower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc fun | c/string/byte/islower | checks if a character is lowercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isprint</title>
    <ns>10</ns>
    <id>5828</id>
    <revision>
      <id>53898</id>
      <parentid>51997</parentid>
      <timestamp>2013-06-01T05:07:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isprint]] to [[Template:c/string/byte/dsc isprint]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc fun | c/string/byte/isprint | checks if a character is a printing character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc ispunct</title>
    <ns>10</ns>
    <id>5827</id>
    <revision>
      <id>53900</id>
      <parentid>51998</parentid>
      <timestamp>2013-06-01T05:07:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list ispunct]] to [[Template:c/string/byte/dsc ispunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc fun | c/string/byte/ispunct | checks if a character is a punctuation character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isspace</title>
    <ns>10</ns>
    <id>5830</id>
    <revision>
      <id>53905</id>
      <parentid>51999</parentid>
      <timestamp>2013-06-01T05:07:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isspace]] to [[Template:c/string/byte/dsc isspace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc fun | c/string/byte/isspace | checks if a character is a space character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isupper</title>
    <ns>10</ns>
    <id>5835</id>
    <revision>
      <id>53909</id>
      <parentid>52000</parentid>
      <timestamp>2013-06-01T05:07:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isupper]] to [[Template:c/string/byte/dsc isupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc fun | c/string/byte/isupper | checks if a character is an uppercase character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc isxdigit</title>
    <ns>10</ns>
    <id>5833</id>
    <revision>
      <id>53914</id>
      <parentid>52001</parentid>
      <timestamp>2013-06-01T05:07:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list isxdigit]] to [[Template:c/string/byte/dsc isxdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | c/string/byte/isxdigit | checks if a character is a hexadecimal character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc memchr</title>
    <ns>10</ns>
    <id>5843</id>
    <revision>
      <id>53918</id>
      <parentid>52002</parentid>
      <timestamp>2013-06-01T05:07:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list memchr]] to [[Template:c/string/byte/dsc memchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | c/string/byte/memchr | searches an array for the first occurrence of a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc memcmp</title>
    <ns>10</ns>
    <id>5866</id>
    <revision>
      <id>53924</id>
      <parentid>52003</parentid>
      <timestamp>2013-06-01T05:07:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list memcmp]] to [[Template:c/string/byte/dsc memcmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">{{dsc fun | c/string/byte/memcmp | compares two buffers}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc memcpy</title>
    <ns>10</ns>
    <id>5841</id>
    <revision>
      <id>75276</id>
      <parentid>53927</parentid>
      <timestamp>2015-01-13T21:06:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | c/string/byte/memcpy| title=memcpy&lt;br&gt;memcpy_s | notes=&lt;br&gt;{{mark c11}} | copies one buffer to another}}</text>
      <sha1>ck9zncd0iqxcq0mn51mvoxrt5xel1b0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc memmove</title>
    <ns>10</ns>
    <id>5840</id>
    <revision>
      <id>75277</id>
      <parentid>53931</parentid>
      <timestamp>2015-01-13T21:06:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | c/string/byte/memmove | title=memmove&lt;br&gt;memmove_s | notes=&lt;br&gt;{{mark c11}} | moves one buffer to another}}</text>
      <sha1>pebptcoaaf0zsqkthfocr3w5qi4temr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc memset</title>
    <ns>10</ns>
    <id>5842</id>
    <revision>
      <id>75283</id>
      <parentid>53934</parentid>
      <timestamp>2015-01-13T21:11:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | c/string/byte/memset | title=memset&lt;br&gt;memset_s | notes=&lt;br&gt;{{mark c11}} | fills a buffer with a character}}</text>
      <sha1>9louneytw38pkgpl7xlf6qczbwm8vlr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strcat</title>
    <ns>10</ns>
    <id>5857</id>
    <revision>
      <id>75280</id>
      <parentid>53937</parentid>
      <timestamp>2015-01-13T21:09:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="113">{{dsc fun | c/string/byte/strcat | title=strcat&lt;br&gt;strcat_s | notes=&lt;br&gt;{{mark c11}} | concatenates two strings}}</text>
      <sha1>4i7dypvda49llewh8ivk4ru0ajug9kw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strchr</title>
    <ns>10</ns>
    <id>5850</id>
    <revision>
      <id>53941</id>
      <parentid>52008</parentid>
      <timestamp>2013-06-01T05:07:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strchr]] to [[Template:c/string/byte/dsc strchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | c/string/byte/strchr | finds the first occurrence of a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strcmp</title>
    <ns>10</ns>
    <id>5853</id>
    <revision>
      <id>53943</id>
      <parentid>52009</parentid>
      <timestamp>2013-06-01T05:07:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strcmp]] to [[Template:c/string/byte/dsc strcmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">{{dsc fun | c/string/byte/strcmp | compares two strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strcoll</title>
    <ns>10</ns>
    <id>5851</id>
    <revision>
      <id>53945</id>
      <parentid>52010</parentid>
      <timestamp>2013-06-01T05:07:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strcoll]] to [[Template:c/string/byte/dsc strcoll]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | c/string/byte/strcoll | compares two strings in accordance to the current locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strcpy</title>
    <ns>10</ns>
    <id>5859</id>
    <revision>
      <id>75278</id>
      <parentid>53948</parentid>
      <timestamp>2015-01-13T21:07:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="117">{{dsc fun | c/string/byte/strcpy | title=strcpy&lt;br&gt;strcpy_s | notes=&lt;br&gt;{{mark c11}} | copies one string to another}}</text>
      <sha1>bvcbfx2tiluipsn18pl25lxzs3g8ag4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strcspn</title>
    <ns>10</ns>
    <id>5847</id>
    <revision>
      <id>53953</id>
      <parentid>52012</parentid>
      <timestamp>2013-06-01T05:07:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strcspn]] to [[Template:c/string/byte/dsc strcspn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc fun | c/string/byte/strcspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the characters not found in another byte string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strerror</title>
    <ns>10</ns>
    <id>5839</id>
    <revision>
      <id>75285</id>
      <parentid>75284</parentid>
      <timestamp>2015-01-13T21:12:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+strerrorlen_s</comment>
      <text xml:space="preserve" bytes="172">{{dsc fun | c/string/byte/strerror | title=strerror&lt;br&gt;strerror_s&lt;br&gt;strerrorlen_s | notes=&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}} | returns a text version of a given error code}}</text>
      <sha1>fj76doz0loodf7092kfgqookpkiw0yz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strlen</title>
    <ns>10</ns>
    <id>5854</id>
    <revision>
      <id>75286</id>
      <parentid>53963</parentid>
      <timestamp>2015-01-13T21:12:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | c/string/byte/strlen | title=strlen&lt;br&gt;strnlen_s | notes=&lt;br&gt;{{mark c11}} | returns the length of a given string}}</text>
      <sha1>q8cfixx7nzyr62nstmf9p2u166b7ioj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strncat</title>
    <ns>10</ns>
    <id>5856</id>
    <revision>
      <id>75281</id>
      <parentid>53969</parentid>
      <timestamp>2015-01-13T21:09:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="150">{{dsc fun | c/string/byte/strncat | title=strncat&lt;br&gt;strncat_s | notes=&lt;br&gt;{{mark c11}} | concatenates a certain amount of characters of two strings}}</text>
      <sha1>1awda36noshhlt5cxb5rym2u0wme8b7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strncmp</title>
    <ns>10</ns>
    <id>5852</id>
    <revision>
      <id>53973</id>
      <parentid>52016</parentid>
      <timestamp>2013-06-01T05:07:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strncmp]] to [[Template:c/string/byte/dsc strncmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | c/string/byte/strncmp | compares a certain amount of characters of two strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strncpy</title>
    <ns>10</ns>
    <id>5858</id>
    <revision>
      <id>75279</id>
      <parentid>53979</parentid>
      <timestamp>2015-01-13T21:08:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="156">{{dsc fun | c/string/byte/strncpy | title=strncpy&lt;br&gt;strncpy_s | notes=&lt;br&gt;{{mark c11}} | copies a certain amount of characters from one string to another}}</text>
      <sha1>e9tqiqx5drna0rzvaimaqebot7as6tk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strpbrk</title>
    <ns>10</ns>
    <id>5846</id>
    <revision>
      <id>53982</id>
      <parentid>52018</parentid>
      <timestamp>2013-06-01T05:07:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strpbrk]] to [[Template:c/string/byte/dsc strpbrk]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc fun | c/string/byte/strpbrk | finds the first location of any character in one string, in another string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strrchr</title>
    <ns>10</ns>
    <id>5849</id>
    <revision>
      <id>53986</id>
      <parentid>52019</parentid>
      <timestamp>2013-06-01T05:07:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strrchr]] to [[Template:c/string/byte/dsc strrchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | c/string/byte/strrchr | finds the last occurrence of a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strspn</title>
    <ns>10</ns>
    <id>5848</id>
    <revision>
      <id>53989</id>
      <parentid>52020</parentid>
      <timestamp>2013-06-01T05:08:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strspn]] to [[Template:c/string/byte/dsc strspn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | c/string/byte/strspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the characters found in another byte string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strstr</title>
    <ns>10</ns>
    <id>5845</id>
    <revision>
      <id>53995</id>
      <parentid>52021</parentid>
      <timestamp>2013-06-01T05:08:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strstr]] to [[Template:c/string/byte/dsc strstr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | c/string/byte/strstr | finds the first occurrence of a substring of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strtof</title>
    <ns>10</ns>
    <id>5861</id>
    <revision>
      <id>78821</id>
      <parentid>54005</parentid>
      <timestamp>2015-06-09T13:14:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c99</comment>
      <text xml:space="preserve" bytes="161">{{dsc fun | c/string/byte/strtof | title=strtof&lt;br&gt;strtod&lt;br&gt;strtold | converts a byte string to a floating point value|notes={{mark c99}}&lt;br&gt;&lt;br&gt;{{mark c99}} }}</text>
      <sha1>busegxzx1y60c5onjpve4gto0ff7giu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strtoimax</title>
    <ns>10</ns>
    <id>5860</id>
    <revision>
      <id>54011</id>
      <parentid>52023</parentid>
      <timestamp>2013-06-01T05:08:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list strtoimax]] to [[Template:c/string/byte/dsc strtoimax]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="166">{{dsc fun | c/string/byte/strtoimax| title=strtoimax&lt;br&gt;strtoumax | converts a byte string to {{c|intmax_t}} or {{c|uintmax_t}} | notes={{mark c99}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strtok</title>
    <ns>10</ns>
    <id>5844</id>
    <revision>
      <id>75282</id>
      <parentid>54015</parentid>
      <timestamp>2015-01-13T21:10:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | c/string/byte/strtok | title=strtok&lt;br&gt;strtok_s | notes=&lt;br&gt;{{mark c11}} | finds the next token in a byte string}}</text>
      <sha1>lk212vgteyai0wnlm2jf0s0rt9eqt3d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strtol</title>
    <ns>10</ns>
    <id>5863</id>
    <revision>
      <id>78819</id>
      <parentid>54025</parentid>
      <timestamp>2015-06-09T13:12:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c99</comment>
      <text xml:space="preserve" bytes="129">{{dsc fun | c/string/byte/strtol | title=strtol&lt;br&gt;strtoll | converts a byte string to an integer value|notes=&lt;br&gt;{{mark c99}} }}</text>
      <sha1>qtr5vk3ext8daogtjv70wmpp00ebl69</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strtoul</title>
    <ns>10</ns>
    <id>5862</id>
    <revision>
      <id>78820</id>
      <parentid>54029</parentid>
      <timestamp>2015-06-09T13:12:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c99</comment>
      <text xml:space="preserve" bytes="141">{{dsc fun | c/string/byte/strtoul| title=strtoul&lt;br&gt; strtoull | converts a byte string to an unsigned integer value |notes=&lt;br&gt;{{mark c99}}}}</text>
      <sha1>pva60m6nqlfout1uswh4qsxjq5i8ax9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc strxfrm</title>
    <ns>10</ns>
    <id>5855</id>
    <revision>
      <id>73582</id>
      <parentid>54031</parentid>
      <timestamp>2014-11-06T14:49:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>desc</comment>
      <text xml:space="preserve" bytes="112">{{dsc fun | c/string/byte/strxfrm | transform a string so that strcmp would produce the same result as strcoll}}</text>
      <sha1>j1f63ygxqj540unpmqe64ou47xucw1x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc tolower</title>
    <ns>10</ns>
    <id>5826</id>
    <revision>
      <id>54034</id>
      <parentid>52028</parentid>
      <timestamp>2013-06-01T05:08:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list tolower]] to [[Template:c/string/byte/dsc tolower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | c/string/byte/tolower | converts a character to lowercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/dsc toupper</title>
    <ns>10</ns>
    <id>5825</id>
    <revision>
      <id>54039</id>
      <parentid>52029</parentid>
      <timestamp>2013-06-01T05:08:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/dcl list toupper]] to [[Template:c/string/byte/dsc toupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | c/string/byte/toupper | converts a character to uppercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/navbar</title>
    <ns>10</ns>
    <id>5916</id>
    <revision>
      <id>39852</id>
      <parentid>35514</parentid>
      <timestamp>2012-09-28T19:56:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="225">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/string/navbar heading
|content2 = c/string/navbar content

|heading3 = c/string/byte/navbar heading
|content3 = c/string/byte/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/navbar content</title>
    <ns>10</ns>
    <id>6361</id>
    <revision>
      <id>76515</id>
      <parentid>75287</parentid>
      <timestamp>2015-02-19T20:55:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2381">{{nv begin}}
{{nv h1 | Functions}}

{{nv h2 | Character manipulation}}
{{nv col begin}}
{{nv ln | c/string/byte/isalnum}}
{{nv ln | c/string/byte/isalpha}}
{{nv ln | c/string/byte/islower}}
{{nv ln | c/string/byte/isupper}}
{{nv ln | c/string/byte/isdigit}}
{{nv ln | c/string/byte/isxdigit}}
{{nv ln | c/string/byte/isblank|notes={{mark c99}}}}
{{nv col next}}
{{nv ln | c/string/byte/iscntrl}}
{{nv ln | c/string/byte/isgraph}}
{{nv ln | c/string/byte/isspace}}
{{nv ln | c/string/byte/isprint}}
{{nv ln | c/string/byte/ispunct}}
{{nv ln | c/string/byte/tolower}}
{{nv ln | c/string/byte/toupper}}
{{nv col end}}

{{nv h2 | Conversions to numeric formats}}
{{nv col begin}}
{{nv ln | c/string/byte/atof}}
{{nv ln | c/string/byte/atoi|atoi|atol|atoll}}
{{nv ln | c/string/byte/strtol|strtol|strtoll}}
{{nv col next}}
{{nv ln | c/string/byte/strtoul|strtoul|strtoull}}
{{nv ln | c/string/byte/strtof|strtof|strtod|strtold}}
{{nv ln | c/string/byte/strtoimax|strtoimax|strtoumax|notes={{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv col end}}

{{nv h2 | String manipulation}}
{{nv ln | c/string/byte/strcpy|strcpy|strcpy_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/byte/strncpy|strncpy|strncpy_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/byte/strcat|strcat|strcat_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/byte/strncat|strncat|strncat_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/byte/strxfrm}}

{{nv h2 | String examination}}
{{nv col begin}}
{{nv ln | c/string/byte/strlen|strlen|strnlen_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/byte/strcmp}}
{{nv ln | c/string/byte/strncmp}}
{{nv ln | c/string/byte/strcoll}}
{{nv ln | c/string/byte/strchr}}
{{nv ln | c/string/byte/strrchr}}
{{nv col next}}
{{nv ln | c/string/byte/strspn}}
{{nv ln | c/string/byte/strcspn}}
{{nv ln | c/string/byte/strpbrk}}
{{nv ln | c/string/byte/strstr}}
{{nv ln | c/string/byte/strtok|strtok|strtok_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv col end}}

{{nv h2 | Memory manipulation}}
{{nv ln | c/string/byte/memchr}}
{{nv ln | c/string/byte/memcmp}}
{{nv ln | c/string/byte/memset|memset|memset_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/byte/memcpy|memcpy|memcpy_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/byte/memmove|memmove|memmove_s|notes=&lt;br&gt;{{mark c11}}}}

{{nv h2 | Miscellaneous}}
{{nv ln | c/string/byte/strerror|strerror|strerror_s|strerrorlen_s|notes=&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}
{{nv end}}</text>
      <sha1>l7qopc2n9hourauktca2zbsxxn8pxyw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/byte/navbar heading</title>
    <ns>10</ns>
    <id>5921</id>
    <revision>
      <id>35516</id>
      <parentid>21231</parentid>
      <timestamp>2012-06-15T22:27:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/byte/sidebar heading]] to [[Template:c/string/byte/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="48">[[c/string/byte | Null-terminated byte strings]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/character classes</title>
    <ns>10</ns>
    <id>5760</id>
    <revision>
      <id>21061</id>
      <timestamp>2012-04-13T00:37:53Z</timestamp>
      <contributor>
        <username>Eendy</username>
        <id>539</id>
      </contributor>
      <comment>Created page with &quot;{| class=&quot;wikitable&quot; style=&quot;font-size:85%; text-align:center;&quot; |- ! colspan=&quot;2&quot; | ASCII values &lt;br&gt; (hex) ! characters ! style=&quot;font-size:85%;&quot; | {{ltt|c/string/byte/iscntrl | is...&quot;</comment>
      <text xml:space="preserve" bytes="9241">{| class=&quot;wikitable&quot; style=&quot;font-size:85%; text-align:center;&quot;
|-
! colspan=&quot;2&quot; | ASCII values &lt;br&gt; (hex)
! characters
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/iscntrl | iscntrl}} &lt;br&gt;
{{ltt|c/string/wide/iswcntrl | iswcntrl}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isprint | isprint}} &lt;br&gt;
{{ltt|c/string/wide/iswprint | iswprint}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isspace | isspace}} &lt;br&gt;
{{ltt|c/string/wide/iswspace | iswspace}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isblank | isblank}} &lt;br&gt;
{{ltt|c/string/wide/iswblank | iswblank}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isgraph | isgraph}} &lt;br&gt;
{{ltt|c/string/wide/iswgraph | iswgraph}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/ispunct | ispunct}} &lt;br&gt;
{{ltt|c/string/wide/iswpunct | iswpunct}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isalnum | isalnum}} &lt;br&gt;
{{ltt|c/string/wide/iswalnum | iswalnum}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isalpha | isalpha}} &lt;br&gt;
{{ltt|c/string/wide/iswalpha | iswalpha}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isupper | isupper}} &lt;br&gt;
{{ltt|c/string/wide/iswupper | iswupper}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/islower | islower}} &lt;br&gt;
{{ltt|c/string/wide/iswlower | iswlower}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isdigit | isdigit}} &lt;br&gt;
{{ltt|c/string/wide/iswdigit | iswdigit}}
! style=&quot;font-size:85%;&quot; |
{{ltt|c/string/byte/isxdigit | isxdigit}} &lt;br&gt;
{{ltt|c/string/wide/iswxdigit | iswxdigit}}
|-
| 0  - 8 
| {{tt|0x00-0x08}}
| control codes ({{tt|NUL}}, etc.)
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 9 
| {{tt|0x09}}
| tab ({{tt|\t}})
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 10  - 13 
| {{tt|0x0A-0x0D}}
| whitespaces ({{tt|\n}},{{tt|\v}},{{tt|\f}},{{tt|\r}})
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 14 - 31 
| {{tt|0x0E-0x1F}}
| control codes
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 32 
| {{tt|0x20}}
| space
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 33 - 47 
| {{tt|0x21-0x2F}}
| {{tt|!&quot;#$%&amp;'()*+,-./}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 48 - 57 
| {{tt|0x30-0x39}}
| {{tt|0123456789}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}} 
|-
| 58 - 64 
| {{tt|0x3a-0x40}}
| {{tt|:;&lt;{{=}}&gt;?@}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 65 - 70 
| {{tt|0x41-0x46}}
| {{tt|ABCDEF}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}} 
|-
| 71 - 90 
| {{tt|0x47-0x5A}}
| {{tt|GHIJKLMNOPQRSTUVWXYZ}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 91 - 96 
| {{tt|0x5B-0x60}}
| {{tt|[\]&lt;nowiki&gt;^&lt;/nowiki&gt;_`}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 97 -102 
| {{tt|0x61-0x66}}
| {{tt|abcdef}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}} 
|-
| 103-122 
| {{tt|0x67-0x7A}}
| {{tt|ghijklmnopqrstuvwxyz}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 123-126 
| {{tt|0x7B-0x7E}}
| {{tt|{&lt;nowiki&gt;|&lt;/nowiki&gt;}~}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 127 
| {{tt|0x7F}}
| backspace character ({{tt|DEL}})
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc MB CUR MAX</title>
    <ns>10</ns>
    <id>5805</id>
    <revision>
      <id>90443</id>
      <parentid>54045</parentid>
      <timestamp>2017-02-23T12:21:39Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>removed the C++-ism; C is not C++</comment>
      <text xml:space="preserve" bytes="155">{{dsc | {{dsc member | nolink=true | MB_CUR_MAX }} | maximum number of bytes in a multibyte character, in the current locale&lt;br/&gt;{{mark|macro variable}} }}</text>
      <sha1>litrhtbmaqpavbri7homzt2vn050zc0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc MB LEN MAX</title>
    <ns>10</ns>
    <id>5806</id>
    <revision>
      <id>90442</id>
      <parentid>54050</parentid>
      <timestamp>2017-02-23T12:19:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted phrase to emphasize how the term differs with MB_CUR_LEN</comment>
      <text xml:space="preserve" bytes="124">{{dsc macro const | MB_LEN_MAX | nolink=true | maximum number of bytes in a multibyte character, for any supported locale }}</text>
      <sha1>tblskzd3dlzof42zfym18c8n4ru1hnq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc btowc</title>
    <ns>10</ns>
    <id>5807</id>
    <revision>
      <id>74572</id>
      <parentid>54054</parentid>
      <timestamp>2014-12-18T20:48:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="128">{{dsc fun | c/string/multibyte/btowc | widens a single-byte narrow character to wide character, if possible|notes={{mark c95}}}}</text>
      <sha1>a7t7j8v7zrte2nzexcn8teus24pe0g0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc c16rtomb</title>
    <ns>10</ns>
    <id>5811</id>
    <revision>
      <id>90371</id>
      <parentid>54059</parentid>
      <timestamp>2017-02-22T10:35:04Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>verb tense now conforms with other entries</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | c/string/multibyte/c16rtomb | converts a 16-bit wide character to narrow multibyte string| notes={{mark c11}} }}</text>
      <sha1>5jkoc4w3loycchhtzdr8k7mdhedqq5r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc c32rtomb</title>
    <ns>10</ns>
    <id>5808</id>
    <revision>
      <id>90370</id>
      <parentid>54065</parentid>
      <timestamp>2017-02-22T10:34:11Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>verb tense now conforms with other entries</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | c/string/multibyte/c32rtomb | converts a 32-bit wide character to narrow multibyte string| notes={{mark c11}} }}</text>
      <sha1>ioxenfe57v84rt3po52ujc4z7bsks9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc char16 t</title>
    <ns>10</ns>
    <id>6524</id>
    <revision>
      <id>90440</id>
      <parentid>54069</parentid>
      <timestamp>2017-02-23T11:43:56Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>term now conforms with other occurrences</comment>
      <text xml:space="preserve" bytes="95">{{dsc typedef | c/string/multibyte/char16_t | 16-bit wide character type | notes={{mark c11}}}}</text>
      <sha1>cxzkcqnv8s9jw0v8ezyz1hx6nn0ueav</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc char32 t</title>
    <ns>10</ns>
    <id>6525</id>
    <revision>
      <id>90441</id>
      <parentid>54074</parentid>
      <timestamp>2017-02-23T11:44:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>term now conforms with other occurrences</comment>
      <text xml:space="preserve" bytes="95">{{dsc typedef | c/string/multibyte/char32_t | 32-bit wide character type | notes={{mark c11}}}}</text>
      <sha1>hmiug8ivivn0rgh6yskr5ck90kk0qsx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mblen</title>
    <ns>10</ns>
    <id>5824</id>
    <revision>
      <id>54080</id>
      <parentid>52038</parentid>
      <timestamp>2013-06-01T05:09:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/multibyte/dcl list mblen]] to [[Template:c/string/multibyte/dsc mblen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | c/string/multibyte/mblen  | returns the number of bytes in the next multibyte character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbrlen</title>
    <ns>10</ns>
    <id>5817</id>
    <revision>
      <id>74575</id>
      <parentid>54084</parentid>
      <timestamp>2014-12-18T20:51:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="133">{{dsc fun | c/string/multibyte/mbrlen | returns the number of bytes in the next multibyte character, given state|notes={{mark c95}}}}</text>
      <sha1>cgvwx9n9ytjhkgv6s87tplblqaae05h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbrtoc16</title>
    <ns>10</ns>
    <id>5812</id>
    <revision>
      <id>90368</id>
      <parentid>54089</parentid>
      <timestamp>2017-02-22T10:32:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>verb tense now conforms with other entries</comment>
      <text xml:space="preserve" bytes="137">{{dsc fun | c/string/multibyte/mbrtoc16 | generates the next 16-bit wide character from a narrow multibyte string | notes={{mark c11}} }}</text>
      <sha1>7r78jyrzfhxexen9dw5ari06mbr7hvn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbrtoc32</title>
    <ns>10</ns>
    <id>5810</id>
    <revision>
      <id>90369</id>
      <parentid>54092</parentid>
      <timestamp>2017-02-22T10:33:18Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>verb tense now conforms with other entries</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | c/string/multibyte/mbrtoc32 | generates the next 32-bit wide character from a narrow multibyte string| notes={{mark c11}} }}</text>
      <sha1>0exedfd1atle2m8dvms07ede003nca2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbrtowc</title>
    <ns>10</ns>
    <id>5816</id>
    <revision>
      <id>74576</id>
      <parentid>54096</parentid>
      <timestamp>2014-12-18T20:51:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="131">{{dsc fun | c/string/multibyte/mbrtowc  | converts the next multibyte character to wide character, given state|notes={{mark c95}}}}</text>
      <sha1>9fyv5pz7sxsuy2wo504vgqsoi9faf0r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbsinit</title>
    <ns>10</ns>
    <id>5819</id>
    <revision>
      <id>74574</id>
      <parentid>54099</parentid>
      <timestamp>2014-12-18T20:50:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | c/string/multibyte/mbsinit  | checks if the mbstate_t object represents initial shift state|notes={{mark c95}}}}</text>
      <sha1>nxq8p6snmevgunghy3d0wp0ewd6l7bt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbsrtowcs</title>
    <ns>10</ns>
    <id>5814</id>
    <revision>
      <id>75309</id>
      <parentid>74578</parentid>
      <timestamp>2015-01-13T21:38:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="182">{{dsc fun | c/string/multibyte/mbsrtowcs|title=mbsrtowcs&lt;br&gt;mbsrtowcs_s| converts a narrow multibyte character string to wide string, given state|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>l38qvhab97iq85ecqq4i3b7fj0o1yj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbstate t</title>
    <ns>10</ns>
    <id>5809</id>
    <revision>
      <id>74527</id>
      <parentid>54108</parentid>
      <timestamp>2014-12-18T20:07:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="143">{{dsc class | c/string/multibyte/mbstate_t | conversion state information necessary to iterate multibyte character strings|notes={{mark c95}}}}</text>
      <sha1>evmgaihbvx44hhoefoozdk2lrikghoh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbstowcs</title>
    <ns>10</ns>
    <id>5821</id>
    <revision>
      <id>75272</id>
      <parentid>54111</parentid>
      <timestamp>2015-01-13T21:02:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="159">{{dsc fun | c/string/multibyte/mbstowcs | title=mbstowcs&lt;br&gt;mbstowcs_s | notes=&lt;br&gt;{{mark c11}} | converts a narrow multibyte character string to wide string}}</text>
      <sha1>l28urp8apzrk1zj34nb31esa3dlchrv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc mbtowc</title>
    <ns>10</ns>
    <id>5823</id>
    <revision>
      <id>54115</id>
      <parentid>52047</parentid>
      <timestamp>2013-06-01T05:09:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/multibyte/dcl list mbtowc]] to [[Template:c/string/multibyte/dsc mbtowc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc fun | c/string/multibyte/mbtowc  | converts the next multibyte character to wide character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc wcrtomb</title>
    <ns>10</ns>
    <id>5815</id>
    <revision>
      <id>75308</id>
      <parentid>74577</parentid>
      <timestamp>2015-01-13T21:37:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="176">{{dsc fun | c/string/multibyte/wcrtomb|title=wcrtomb&lt;br&gt;wcrtomb_s  | converts a wide character to its multibyte representation, given state|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>d01u9hxujk1kxcwfkvsczl2osgn7w8h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc wcsrtombs</title>
    <ns>10</ns>
    <id>5813</id>
    <revision>
      <id>75310</id>
      <parentid>74579</parentid>
      <timestamp>2015-01-13T21:38:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="182">{{dsc fun | c/string/multibyte/wcsrtombs|title=wcsrtombs&lt;br&gt;wcsrtombs_s| converts a wide string to narrow multibyte character string, given state|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>93os76j4mtm8gn471ila7q014slc2aa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc wcstombs</title>
    <ns>10</ns>
    <id>5820</id>
    <revision>
      <id>75274</id>
      <parentid>75273</parentid>
      <timestamp>2015-01-13T21:03:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="160">{{dsc fun | c/string/multibyte/wcstombs | title=wcstombs&lt;br&gt;wcstombs_s | notes=&lt;br&gt;{{mark c11}}  | converts a wide string to narrow multibyte character string}}</text>
      <sha1>8oi80pgrvyjlt1uui8284kopaxhfpri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc wctob</title>
    <ns>10</ns>
    <id>5818</id>
    <revision>
      <id>74573</id>
      <parentid>54129</parentid>
      <timestamp>2014-12-18T20:50:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="131">{{dsc fun | c/string/multibyte/wctob | narrows a wide character to a single-byte narrow character, if possible|notes={{mark c95}}}}</text>
      <sha1>tf31tiya1z59rvd0il85se4cq3g9yeu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/dsc wctomb</title>
    <ns>10</ns>
    <id>5822</id>
    <revision>
      <id>75271</id>
      <parentid>54134</parentid>
      <timestamp>2015-01-13T21:02:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="150">{{dsc fun | c/string/multibyte/wctomb |title=wctomb&lt;br&gt;wctomb_s | notes=&lt;br&gt;{{mark c11}} | converts a wide character to its multibyte representation}}</text>
      <sha1>44qpbhthcc4n3krf0kojs6zlac53ezz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/navbar</title>
    <ns>10</ns>
    <id>5917</id>
    <revision>
      <id>39853</id>
      <parentid>35517</parentid>
      <timestamp>2012-09-28T19:56:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="235">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/string/navbar heading
|content2 = c/string/navbar content

|heading3 = c/string/multibyte/navbar heading
|content3 = c/string/multibyte/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/navbar content</title>
    <ns>10</ns>
    <id>6363</id>
    <revision>
      <id>75311</id>
      <parentid>75275</parentid>
      <timestamp>2015-01-13T21:41:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="1315">{{nv begin}}
{{nv h2 | Wide/multibyte conversions}}
{{nv ln | c/string/multibyte/mbsinit|notes={{mark c95}}}}
{{nv col begin}}
{{nv ln | c/string/multibyte/mbtowc}}
{{nv ln | c/string/multibyte/mbstowcs|mbstowcs|mbstowcs_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/multibyte/btowc|notes={{mark c95}}}}
{{nv ln | c/string/multibyte/mbrtowc|notes={{mark c95}}}}
{{nv ln | c/string/multibyte/mbsrtowcs|mbsrtowcs|mbsrtowcs_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/multibyte/mbrtoc16|notes={{mark c11}}}}
{{nv ln | c/string/multibyte/c16rtomb|notes={{mark c11}}}}
{{nv ln | c/string/multibyte/c32rtomb|notes={{mark c11}}}}
{{nv ln | c/string/multibyte/mbrtoc32|notes={{mark c11}}}}
{{nv col next}}
{{nv ln | c/string/multibyte/mblen}}
{{nv ln | c/string/multibyte/wctomb|wctomb|wctomb_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/multibyte/wcstombs|wcstombs|wcstombs_s|notes=&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/multibyte/wctob|notes={{mark c95}}}}
{{nv ln | c/string/multibyte/wcrtomb|wcrtomb|wcrtomb_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/multibyte/wcsrtombs|wcsrtombs|wcsrtombs_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/multibyte/mbrlen|notes={{mark c95}}}}
{{nv col end}}
{{nv h2 | Types}}
{{nv ln | c/string/multibyte/mbstate_t|notes={{mark c95}}}}
{{nv end}}</text>
      <sha1>kfyie44ooq1m9qr8w50oomw2bnlxgap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/multibyte/navbar heading</title>
    <ns>10</ns>
    <id>5922</id>
    <revision>
      <id>35518</id>
      <parentid>21232</parentid>
      <timestamp>2012-06-15T22:27:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/multibyte/sidebar heading]] to [[Template:c/string/multibyte/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="58">[[c/string/multibyte | Null-terminated multibyte strings]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/navbar</title>
    <ns>10</ns>
    <id>5915</id>
    <revision>
      <id>39854</id>
      <parentid>35519</parentid>
      <timestamp>2012-09-28T19:56:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="142">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/string/navbar heading
|content2 = c/string/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/navbar content</title>
    <ns>10</ns>
    <id>5920</id>
    <revision>
      <id>52054</id>
      <parentid>35520</parentid>
      <timestamp>2013-06-01T04:39:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="162">{{nv begin}}
{{nv | [[c/string/byte | Byte strings]] }}
{{nv | [[c/string/multibyte | Multibyte strings]] }}
{{nv | [[c/string/wide | Wide strings]] }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/navbar heading</title>
    <ns>10</ns>
    <id>5919</id>
    <revision>
      <id>35521</id>
      <parentid>21228</parentid>
      <timestamp>2012-06-15T22:27:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/sidebar heading]] to [[Template:c/string/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="30">[[c/string | Strings library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswalnum</title>
    <ns>10</ns>
    <id>5799</id>
    <revision>
      <id>74509</id>
      <parentid>54138</parentid>
      <timestamp>2014-12-18T19:45:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | c/string/wide/iswalnum | checks if a wide character is alphanumeric|notes={{mark c95}}}}</text>
      <sha1>ot9zxmqki21ra8aqo5w60v4xbt8dzle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswalpha</title>
    <ns>10</ns>
    <id>5798</id>
    <revision>
      <id>74510</id>
      <parentid>54141</parentid>
      <timestamp>2014-12-18T19:46:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="98">{{dsc fun | c/string/wide/iswalpha | checks if a wide character is alphabetic|notes={{mark c95}}}}</text>
      <sha1>q8p3dt8frkth3rac11oiqgm60ha9erf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswblank</title>
    <ns>10</ns>
    <id>5790</id>
    <revision>
      <id>54145</id>
      <parentid>52057</parentid>
      <timestamp>2013-06-01T05:09:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/wide/dcl list iswblank]] to [[Template:c/string/wide/dsc iswblank]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | c/string/wide/iswblank | checks if a wide character is a blank character|notes={{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswcntrl</title>
    <ns>10</ns>
    <id>5793</id>
    <revision>
      <id>74515</id>
      <parentid>54148</parentid>
      <timestamp>2014-12-18T19:50:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | c/string/wide/iswcntrl | checks if a wide character is a control character|notes={{mark c95}}}}</text>
      <sha1>o1lofwx3erxnurcyqinl86sw2ik9gc2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswctype</title>
    <ns>10</ns>
    <id>5787</id>
    <revision>
      <id>74520</id>
      <parentid>54152</parentid>
      <timestamp>2014-12-18T19:55:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="130">{{dsc fun | c/string/wide/iswctype | classifies a wide character according to the specified LC_CTYPE category|notes={{mark c95}}}}</text>
      <sha1>jw94lzqhi3qqzcw7w0rlgveu7pn6x7k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswdigit</title>
    <ns>10</ns>
    <id>5795</id>
    <revision>
      <id>74513</id>
      <parentid>54155</parentid>
      <timestamp>2014-12-18T19:48:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="95">{{dsc fun | c/string/wide/iswdigit | checks if a wide character is a digit|notes={{mark c95}}}}</text>
      <sha1>o7t4lq99vuacmozt2ubytat5gifl2e1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswgraph</title>
    <ns>10</ns>
    <id>5792</id>
    <revision>
      <id>74516</id>
      <parentid>54158</parentid>
      <timestamp>2014-12-18T19:52:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | c/string/wide/iswgraph | checks if a wide character is a graphical character|notes={{mark c95}}}}</text>
      <sha1>aqix7zkmy9ruvyfkv7fh77f3gp4k4x6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswlower</title>
    <ns>10</ns>
    <id>5797</id>
    <revision>
      <id>74511</id>
      <parentid>54161</parentid>
      <timestamp>2014-12-18T19:47:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | c/string/wide/iswlower | checks if a wide character is an lowercase character|notes={{mark c95}}}}</text>
      <sha1>1sv8xrs8zhpgq5rukngsp4dgw2j2qwe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswprint</title>
    <ns>10</ns>
    <id>5789</id>
    <revision>
      <id>74518</id>
      <parentid>54167</parentid>
      <timestamp>2014-12-18T19:54:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="108">{{dsc fun | c/string/wide/iswprint | checks if a wide character is a printing character|notes={{mark c95}}}}</text>
      <sha1>8d0lza9zx86o29dhpoxa21wi49tij0s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswpunct</title>
    <ns>10</ns>
    <id>5788</id>
    <revision>
      <id>74519</id>
      <parentid>54171</parentid>
      <timestamp>2014-12-18T19:55:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | c/string/wide/iswpunct | checks if a wide character is a punctuation character|notes={{mark c95}}}}</text>
      <sha1>i4upbmhdrngrlkpzfaxxwez5bj94c4a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswspace</title>
    <ns>10</ns>
    <id>5791</id>
    <revision>
      <id>74517</id>
      <parentid>54175</parentid>
      <timestamp>2014-12-18T19:53:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | c/string/wide/iswspace | checks if a wide character is a space character|notes={{mark c95}}}}</text>
      <sha1>m4t0tuswwgwc4tny46wjux608sdan8e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswupper</title>
    <ns>10</ns>
    <id>5796</id>
    <revision>
      <id>74512</id>
      <parentid>54186</parentid>
      <timestamp>2014-12-18T19:47:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | c/string/wide/iswupper | checks if a wide character is an uppercase character|notes={{mark c95}}}}</text>
      <sha1>bg6mmclzfg3hyq9ww4vhvthq08r9hnp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc iswxdigit</title>
    <ns>10</ns>
    <id>5794</id>
    <revision>
      <id>74514</id>
      <parentid>54190</parentid>
      <timestamp>2014-12-18T19:50:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | c/string/wide/iswxdigit | checks if a character is a hexadecimal character|notes={{mark c95}}}}</text>
      <sha1>g27oaconsb1a16drcm8w7njm1wnbqn4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc towctrans</title>
    <ns>10</ns>
    <id>5783</id>
    <revision>
      <id>74524</id>
      <parentid>54193</parentid>
      <timestamp>2014-12-18T19:59:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="138">{{dsc fun | c/string/wide/towctrans | performs character mapping according to the specified LC_CTYPE mapping category|notes={{mark c95}}}}</text>
      <sha1>tdkj15i4xqzfkemw8di2f7nxm1cy96i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc towlower</title>
    <ns>10</ns>
    <id>5785</id>
    <revision>
      <id>74522</id>
      <parentid>54198</parentid>
      <timestamp>2014-12-18T19:56:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | c/string/wide/towlower | converts a wide character to lowercase|notes={{mark c95}}}}</text>
      <sha1>dbvanwcry1qsak9c2r02rwfj96619h5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc towupper</title>
    <ns>10</ns>
    <id>5784</id>
    <revision>
      <id>74523</id>
      <parentid>54201</parentid>
      <timestamp>2014-12-18T19:58:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | c/string/wide/towupper | converts a wide character to uppercase|notes={{mark c95}}}}</text>
      <sha1>9qjg904ispywo19wzj6frdzg4y0qs49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcscat</title>
    <ns>10</ns>
    <id>5774</id>
    <revision>
      <id>75303</id>
      <parentid>74548</parentid>
      <timestamp>2015-01-13T21:31:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | c/string/wide/wcscat |title=wcscat&lt;br&gt;wcscat_s | appends a copy of one wide string to another|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>jr6vlhm7ckhjlhuvdepiy2q2ga5891l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcschr</title>
    <ns>10</ns>
    <id>5767</id>
    <revision>
      <id>74554</id>
      <parentid>54208</parentid>
      <timestamp>2014-12-18T20:29:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | c/string/wide/wcschr | finds the first occurrence of a wide character in a wide string|notes={{mark c95}}}}</text>
      <sha1>aji2oq1b26ei9cfh9wgovz5ryiiswqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcscmp</title>
    <ns>10</ns>
    <id>5770</id>
    <revision>
      <id>74550</id>
      <parentid>54212</parentid>
      <timestamp>2014-12-18T20:27:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="81">{{dsc fun | c/string/wide/wcscmp | compares two wide strings|notes={{mark c95}}}}</text>
      <sha1>lmtgcigewiyt991srsdjz8cbewfmjld</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcscoll</title>
    <ns>10</ns>
    <id>5768</id>
    <revision>
      <id>74551</id>
      <parentid>54216</parentid>
      <timestamp>2014-12-18T20:28:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | c/string/wide/wcscoll | compares two wide strings in accordance to the current locale|notes={{mark c95}}}}</text>
      <sha1>4atcjh5svf5ldrmmayibi7ynw96v3r9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcscpy</title>
    <ns>10</ns>
    <id>5776</id>
    <revision>
      <id>75299</id>
      <parentid>74546</parentid>
      <timestamp>2015-01-13T21:28:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | c/string/wide/wcscpy | title=wcscpy&lt;br&gt;wcscpy_s | copies one wide string to another|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>emwuwkarzs22e418mwtb554h9dfegr8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcscspn</title>
    <ns>10</ns>
    <id>5764</id>
    <revision>
      <id>74555</id>
      <parentid>54226</parentid>
      <timestamp>2014-12-18T20:33:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="185">{{dsc fun | c/string/wide/wcscspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the wide chars ''not'' found in another wide string|notes={{mark c95}}}}</text>
      <sha1>9v74b7l8kkdl3wlml0hj668pi42k3t4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcslen</title>
    <ns>10</ns>
    <id>5771</id>
    <revision>
      <id>75306</id>
      <parentid>74560</parentid>
      <timestamp>2015-01-13T21:33:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="133">{{dsc fun | c/string/wide/wcslen|title=wcslen&lt;br&gt;wcsnlen_s | returns the length of a wide string|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>bcakn7uvo9r68bkuxw08900rj8hx8hp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcsncat</title>
    <ns>10</ns>
    <id>5773</id>
    <revision>
      <id>75304</id>
      <parentid>74549</parentid>
      <timestamp>2015-01-13T21:31:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="175">{{dsc fun | c/string/wide/wcsncat|title=wcsncat&lt;br&gt;wcsncat_s | appends a certain amount of wide characters from one wide string to another|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>ba6ahv1lcb1h0in9ok60byjf7dnz9oi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcsncmp</title>
    <ns>10</ns>
    <id>5769</id>
    <revision>
      <id>74552</id>
      <parentid>54237</parentid>
      <timestamp>2014-12-18T20:28:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | c/string/wide/wcsncmp | compares a certain amount of characters from two wide strings|notes={{mark c95}}}}</text>
      <sha1>avdlec9kwxuhramjulg2kn0w76sbooc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcsncpy</title>
    <ns>10</ns>
    <id>5775</id>
    <revision>
      <id>75300</id>
      <parentid>74547</parentid>
      <timestamp>2015-01-13T21:29:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="170">{{dsc fun | c/string/wide/wcsncpy |title=wcsncpy&lt;br&gt;wcsncpy_s | copies a certain amount of wide characters from one string to another|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>furzd2r1tmo4in3ghx8a9jljw2bhydq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcspbrk</title>
    <ns>10</ns>
    <id>5763</id>
    <revision>
      <id>74556</id>
      <parentid>54244</parentid>
      <timestamp>2014-12-18T20:34:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="146">{{dsc fun | c/string/wide/wcspbrk | finds the first location of any wide character in one wide string, in another wide string|notes={{mark c95}}}}</text>
      <sha1>gz67kjsd9mw4b1n468cd6uy8fifzeim</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcsrchr</title>
    <ns>10</ns>
    <id>5766</id>
    <revision>
      <id>74557</id>
      <parentid>54248</parentid>
      <timestamp>2014-12-18T20:34:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | c/string/wide/wcsrchr | finds the last occurrence of a wide character in a wide string|notes={{mark c95}}}}</text>
      <sha1>82h4owrb9qifccnonpv9r8dg4yb3jnt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcsspn</title>
    <ns>10</ns>
    <id>5765</id>
    <revision>
      <id>74558</id>
      <parentid>54251</parentid>
      <timestamp>2014-12-18T20:35:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="181">{{dsc fun | c/string/wide/wcsspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the wide characters found in another wide string|notes={{mark c95}}}}</text>
      <sha1>nw7pmhr32j60kjerzq7am8qg81vybv8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcsstr</title>
    <ns>10</ns>
    <id>5762</id>
    <revision>
      <id>74559</id>
      <parentid>54254</parentid>
      <timestamp>2014-12-18T20:35:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | c/string/wide/wcsstr | finds the first occurrence of a wide string within another wide string|notes={{mark c95}}}}</text>
      <sha1>8tki0cgqtk6wmtmpl6ol5os5e6llm0l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcstof</title>
    <ns>10</ns>
    <id>5779</id>
    <revision>
      <id>87709</id>
      <parentid>74613</parentid>
      <timestamp>2016-09-27T09:54:15Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>hyphen</comment>
      <text xml:space="preserve" bytes="172">{{dsc fun | c/string/wide/wcstof | title=wcstof&lt;br&gt;wcstod&lt;br&gt;wcstold | converts a wide string to a floating-point value|notes={{mark c99}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1>czdoxx5es5uhd05oipwqt32r0njp5fl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcstoimax</title>
    <ns>10</ns>
    <id>5777</id>
    <revision>
      <id>54263</id>
      <parentid>52086</parentid>
      <timestamp>2013-06-01T05:11:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/wide/dcl list wcstoimax]] to [[Template:c/string/wide/dsc wcstoimax]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="167">{{dsc fun | c/string/wide/wcstoimax | title=wcstoimax&lt;br&gt;wcstoumax | converts a wide string to {{c|intmax_t}} or {{c|uintmax_t}} | notes={{mark c99}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcstok</title>
    <ns>10</ns>
    <id>5761</id>
    <revision>
      <id>75305</id>
      <parentid>74566</parentid>
      <timestamp>2015-01-13T21:32:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | c/string/wide/wcstok | title=wcstok&lt;br&gt;wcstok_s | finds the next token in a wide string|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>pp281npmurq9o36c339a2yqial6z2zc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcstol</title>
    <ns>10</ns>
    <id>5781</id>
    <revision>
      <id>74544</id>
      <parentid>74543</parentid>
      <timestamp>2014-12-18T20:23:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>er, ll is 99</comment>
      <text xml:space="preserve" bytes="140">{{dsc fun | c/string/wide/wcstol | title=wcstol&lt;br&gt;wcstoll | converts a wide string to an integer value|notes={{mark c95}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1>3w3j9q5p87ugk5jqhl8l3py58nczgpb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcstoul</title>
    <ns>10</ns>
    <id>5780</id>
    <revision>
      <id>74545</id>
      <parentid>54277</parentid>
      <timestamp>2014-12-18T20:24:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95/c99</comment>
      <text xml:space="preserve" bytes="152">{{dsc fun | c/string/wide/wcstoul | title=wcstoul&lt;br&gt;wcstoull | converts a wide string to an unsigned integer value|notes={{mark c95}}&lt;br&gt;{{mark c99}}}}</text>
      <sha1>kd6hs5r9d9k6q1xsfpkg7i9e5gsdilg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wcsxfrm</title>
    <ns>10</ns>
    <id>5772</id>
    <revision>
      <id>74553</id>
      <parentid>54282</parentid>
      <timestamp>2014-12-18T20:29:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | c/string/wide/wcsxfrm | transform a wide string so that wcscmp would produce the same result as wcscoll|notes={{mark c95}}}}</text>
      <sha1>kfgo5vjmdtdmpdkm6kngq9pqw0xckas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wctrans</title>
    <ns>10</ns>
    <id>5782</id>
    <revision>
      <id>74525</id>
      <parentid>54286</parentid>
      <timestamp>2014-12-18T19:59:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | c/string/wide/wctrans | looks up a character mapping category in the current C locale|notes={{mark c95}}}}</text>
      <sha1>1ao7vu195d21ek2k7as2rl0s1g6w0vn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wctype</title>
    <ns>10</ns>
    <id>5786</id>
    <revision>
      <id>74521</id>
      <parentid>54292</parentid>
      <timestamp>2014-12-18T19:56:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | c/string/wide/wctype | looks up a character classification category in the current C locale|notes={{mark c95}}}}</text>
      <sha1>5k9w161yevo97d9knlm53c7wi360eit</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wmemchr</title>
    <ns>10</ns>
    <id>5801</id>
    <revision>
      <id>74561</id>
      <parentid>54294</parentid>
      <timestamp>2014-12-18T20:36:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="129">{{dsc fun | c/string/wide/wmemchr | finds the first occurrence of a wide character in a wide character array|notes={{mark c95}}}}</text>
      <sha1>kgloqgyx2cfmyy1fuqpzwn5q3570koa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wmemcmp</title>
    <ns>10</ns>
    <id>5802</id>
    <revision>
      <id>74562</id>
      <parentid>54296</parentid>
      <timestamp>2014-12-18T20:37:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="117">{{dsc fun | c/string/wide/wmemcmp | compares a certain amount of wide characters from two arrays|notes={{mark c95}}}}</text>
      <sha1>shijve3qbt6fx0ok404qzidwkp5nysr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wmemcpy</title>
    <ns>10</ns>
    <id>5804</id>
    <revision>
      <id>75301</id>
      <parentid>74563</parentid>
      <timestamp>2015-01-13T21:30:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="178">{{dsc fun | c/string/wide/wmemcpy |title=wmemcpy&lt;br&gt;wmemcpy_s | copies a certain amount of wide characters between two non-overlapping arrays|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>3x19mkfo797jfo747a5dz3dv6q8ejz1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wmemmove</title>
    <ns>10</ns>
    <id>5803</id>
    <revision>
      <id>75302</id>
      <parentid>74564</parentid>
      <timestamp>2015-01-13T21:30:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c11</comment>
      <text xml:space="preserve" bytes="189">{{dsc fun | c/string/wide/wmemmove | title=wmemmove&lt;br&gt;wmemmove_s | copies a certain amount of wide characters between two, possibly overlapping, arrays|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>rpvvlbfcofu310477ndrdnjdbto6ifi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/dsc wmemset</title>
    <ns>10</ns>
    <id>5800</id>
    <revision>
      <id>74565</id>
      <parentid>54308</parentid>
      <timestamp>2014-12-18T20:38:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c95</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | c/string/wide/wmemset | copies the given wide character to every position in a wide character array|notes={{mark c95}}}}</text>
      <sha1>1u6nshxex85b4as7d4ehviac3vrbb5u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/navbar</title>
    <ns>10</ns>
    <id>5918</id>
    <revision>
      <id>39855</id>
      <parentid>35522</parentid>
      <timestamp>2012-09-28T19:56:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="225">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/string/navbar heading
|content2 = c/string/navbar content

|heading3 = c/string/wide/navbar heading
|content3 = c/string/wide/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/navbar content</title>
    <ns>10</ns>
    <id>6362</id>
    <revision>
      <id>76658</id>
      <parentid>75307</parentid>
      <timestamp>2015-02-25T16:01:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reflow</comment>
      <text xml:space="preserve" bytes="3093">{{nv begin}}
{{nv h1 | Functions}}

{{nv h2 | Character manipulation}}
{{nv col begin}}
{{nv ln | c/string/wide/iswalnum|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswalpha|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswlower|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswupper|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswdigit|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswxdigit|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswblank|notes={{mark c99}}}}
{{nv ln | c/string/wide/wctype|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswctype|notes={{mark c95}}}}
{{nv col next}}
{{nv ln | c/string/wide/iswcntrl|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswgraph|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswspace|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswprint|notes={{mark c95}}}}
{{nv ln | c/string/wide/iswpunct|notes={{mark c95}}}}
{{nv ln | c/string/wide/towlower|notes={{mark c95}}}}
{{nv ln | c/string/wide/towupper|notes={{mark c95}}}}
{{nv ln | c/string/wide/wctrans|notes={{mark c95}}}}
{{nv ln | c/string/wide/towctrans|notes={{mark c95}}}}
{{nv col end}}

{{nv h2 | Conversions to numeric formats}}
{{nv col begin}}
{{nv ln | c/string/wide/wcstol|wcstol|wcstoll|notes={{mark c95}}&lt;br&gt;{{mark c99}}}}
{{nv ln | c/string/wide/wcstoul|wcstoul|wcstoull|notes={{mark c95}}&lt;br&gt;{{mark c99}}}}
{{nv col next}}
{{nv ln | c/string/wide/wcstof|wcstof|wcstod|wcstold|notes={{mark c99}}&lt;br&gt;{{mark c95}}&lt;br&gt;{{mark c99}}}}
{{nv ln | c/string/wide/wcstoimax|wcstoimax|wcstoumax|notes={{mark c99}}&lt;br&gt;{{mark c99}}}}
{{nv col end}}

{{nv h2 | String manipulation}}
{{nv col begin}}
{{nv ln | c/string/wide/wcslen|wcslen|wcsnlen_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/wide/wcscpy|wcscpy|wcscpy_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/wide/wcsncpy|wcsncpy|wcsncpy_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/wide/wcscat|wcscat|wcscat_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/wide/wcsncat|wcsncat|wcsncat_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/wide/wcsstr|notes={{mark c95}}}}
{{nv col next}}
{{nv ln | c/string/wide/wcscmp|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcsncmp|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcscoll|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcsxfrm|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcschr|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcsrchr|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcspbrk|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcsspn|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcscspn|notes={{mark c95}}}}
{{nv ln | c/string/wide/wcstok|wcstok|wcstok_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv col end}}

{{nv h2 | Array manipulation}}
{{nv col begin}}
{{nv ln | c/string/wide/wmemcpy|wmemcpy|wmemcpy_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv ln | c/string/wide/wmemmove|wmemmove|wmemmove_s|notes={{mark c95}}&lt;br&gt;{{mark c11}}}}
{{nv col next}}
{{nv ln | c/string/wide/wmemcmp|notes={{mark c95}}}}
{{nv ln | c/string/wide/wmemchr|notes={{mark c95}}}}
{{nv ln | c/string/wide/wmemset|notes={{mark c95}}}}
{{nv col end}}

{{nv end}}</text>
      <sha1>2y6dcw0v8846rgxkf5eqf55iz7ykgeb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/string/wide/navbar heading</title>
    <ns>10</ns>
    <id>5923</id>
    <revision>
      <id>35524</id>
      <parentid>21233</parentid>
      <timestamp>2012-06-15T22:27:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/string/wide/sidebar heading]] to [[Template:c/string/wide/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="48">[[c/string/wide | Null-terminated wide strings]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc ONCE FLAG INIT</title>
    <ns>10</ns>
    <id>9174</id>
    <revision>
      <id>54320</id>
      <parentid>52099</parentid>
      <timestamp>2013-06-01T05:11:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list ONCE FLAG INIT]] to [[Template:c/thread/dsc ONCE FLAG INIT]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc macro const | c/thread/ONCE_FLAG_INIT | initializes a once_flag | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc TSS DTOR ITERATIONS</title>
    <ns>10</ns>
    <id>9189</id>
    <revision>
      <id>54325</id>
      <parentid>52100</parentid>
      <timestamp>2013-06-01T05:11:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list TSS DTOR ITERATIONS]] to [[Template:c/thread/dsc TSS DTOR ITERATIONS]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc macro const | c/thread/TSS_DTOR_ITERATIONS | maximum number of times destructors are called | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc call once</title>
    <ns>10</ns>
    <id>9175</id>
    <revision>
      <id>54327</id>
      <parentid>52101</parentid>
      <timestamp>2013-06-01T05:11:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list call once]] to [[Template:c/thread/dsc call once]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc fun | c/thread/call_once| calls a function exactly once | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc cnd broadcast</title>
    <ns>10</ns>
    <id>9178</id>
    <revision>
      <id>54329</id>
      <parentid>52102</parentid>
      <timestamp>2013-06-01T05:11:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list cnd broadcast]] to [[Template:c/thread/dsc cnd broadcast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc fun | c/thread/cnd_broadcast | unblocks all threads blocked on a condition variable | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc cnd destroy</title>
    <ns>10</ns>
    <id>9181</id>
    <revision>
      <id>54332</id>
      <parentid>52103</parentid>
      <timestamp>2013-06-01T05:11:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list cnd destroy]] to [[Template:c/thread/dsc cnd destroy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | c/thread/cnd_destroy | destroys a condition variable | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc cnd init</title>
    <ns>10</ns>
    <id>9176</id>
    <revision>
      <id>54336</id>
      <parentid>52104</parentid>
      <timestamp>2013-06-01T05:11:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list cnd init]] to [[Template:c/thread/dsc cnd init]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | c/thread/cnd_init | creates a condition variable | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc cnd signal</title>
    <ns>10</ns>
    <id>9177</id>
    <revision>
      <id>54338</id>
      <parentid>52105</parentid>
      <timestamp>2013-06-01T05:11:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list cnd signal]] to [[Template:c/thread/dsc cnd signal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | c/thread/cnd_signal | unblocks one thread blocked on a condition variable | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc cnd timedwait</title>
    <ns>10</ns>
    <id>9180</id>
    <revision>
      <id>54341</id>
      <parentid>52106</parentid>
      <timestamp>2013-06-01T05:11:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list cnd timedwait]] to [[Template:c/thread/dsc cnd timedwait]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | c/thread/cnd_timedwait | blocks on a condition variable, with a timeout | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc cnd wait</title>
    <ns>10</ns>
    <id>9179</id>
    <revision>
      <id>54343</id>
      <parentid>52107</parentid>
      <timestamp>2013-06-01T05:11:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list cnd wait]] to [[Template:c/thread/dsc cnd wait]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc fun | c/thread/cnd_wait | blocks on a condition variable | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx destroy</title>
    <ns>10</ns>
    <id>9171</id>
    <revision>
      <id>54346</id>
      <parentid>52108</parentid>
      <timestamp>2013-06-01T05:12:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list mtx destroy]] to [[Template:c/thread/dsc mtx destroy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | c/thread/mtx_destroy | destroys a mutex | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx init</title>
    <ns>10</ns>
    <id>9166</id>
    <revision>
      <id>54348</id>
      <parentid>52109</parentid>
      <timestamp>2013-06-01T05:12:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list mtx init]] to [[Template:c/thread/dsc mtx init]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | c/thread/mtx_init | creates a mutex | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx lock</title>
    <ns>10</ns>
    <id>9167</id>
    <revision>
      <id>54350</id>
      <parentid>52110</parentid>
      <timestamp>2013-06-01T05:12:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list mtx lock]] to [[Template:c/thread/dsc mtx lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc fun | c/thread/mtx_lock | blocks until locks a mutex | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx t</title>
    <ns>10</ns>
    <id>9165</id>
    <revision>
      <id>54353</id>
      <parentid>52111</parentid>
      <timestamp>2013-06-01T05:12:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list mtx t]] to [[Template:c/thread/dsc mtx t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">{{dsc | {{ttb|mtx_t}} | mutex identifier | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx timedlock</title>
    <ns>10</ns>
    <id>9168</id>
    <revision>
      <id>54355</id>
      <parentid>52112</parentid>
      <timestamp>2013-06-01T05:12:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list mtx timedlock]] to [[Template:c/thread/dsc mtx timedlock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | c/thread/mtx_timedlock | blocks until locks a mutex or times out | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx trylock</title>
    <ns>10</ns>
    <id>9169</id>
    <revision>
      <id>54357</id>
      <parentid>52113</parentid>
      <timestamp>2013-06-01T05:12:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list mtx trylock]] to [[Template:c/thread/dsc mtx trylock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | c/thread/mtx_trylock | locks a mutex or returns without blocking if already locked | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx types</title>
    <ns>10</ns>
    <id>9172</id>
    <revision>
      <id>67311</id>
      <parentid>54359</parentid>
      <timestamp>2014-02-04T15:17:50Z</timestamp>
      <contributor>
        <ip>130.75.117.49</ip>
      </contributor>
      <comment>It's C11, not C++11</comment>
      <text xml:space="preserve" bytes="164">{{dsc enum | c/thread/mtx_types | title=mtx_plain&lt;br&gt;mtx_recursive&lt;br&gt;mtx_timed | defines the type of a mutex | notes={{mark c11}}&lt;br&gt;{{mark c11}}&lt;br&gt;{{mark c11}}}}</text>
      <sha1>45mt3eryotegx4q788hx0a2oehaxmux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc mtx unlock</title>
    <ns>10</ns>
    <id>9170</id>
    <revision>
      <id>54361</id>
      <parentid>52115</parentid>
      <timestamp>2013-06-01T05:12:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list mtx unlock]] to [[Template:c/thread/dsc mtx unlock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | c/thread/mtx_unlock | unlocks a mutex | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc once flag</title>
    <ns>10</ns>
    <id>9173</id>
    <revision>
      <id>54363</id>
      <parentid>52116</parentid>
      <timestamp>2013-06-01T05:12:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list once flag]] to [[Template:c/thread/dsc once flag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc | {{ttb|once_flag}} | the type of the flag used by call_once | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd create</title>
    <ns>10</ns>
    <id>9153</id>
    <revision>
      <id>54365</id>
      <parentid>52117</parentid>
      <timestamp>2013-06-01T05:12:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd create]] to [[Template:c/thread/dsc thrd create]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | c/thread/thrd_create | creates a thread | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd current</title>
    <ns>10</ns>
    <id>9155</id>
    <revision>
      <id>54367</id>
      <parentid>52118</parentid>
      <timestamp>2013-06-01T05:12:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd current]] to [[Template:c/thread/dsc thrd current]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | c/thread/thrd_current | obtains the current thread identifier | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd detach</title>
    <ns>10</ns>
    <id>9154</id>
    <revision>
      <id>54369</id>
      <parentid>52119</parentid>
      <timestamp>2013-06-01T05:12:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd detach]] to [[Template:c/thread/dsc thrd detach]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc fun | c/thread/thrd_detach | detaches a thread | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd equal</title>
    <ns>10</ns>
    <id>9156</id>
    <revision>
      <id>54371</id>
      <parentid>52120</parentid>
      <timestamp>2013-06-01T05:12:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd equal]] to [[Template:c/thread/dsc thrd equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc fun | c/thread/thrd_equal | checks if two identifiers refer to the same thread | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd errors</title>
    <ns>10</ns>
    <id>9161</id>
    <revision>
      <id>54375</id>
      <parentid>52121</parentid>
      <timestamp>2013-06-01T05:12:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd errors]] to [[Template:c/thread/dsc thrd errors]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc const | c/thread/thrd_errors | title=thrd_success&lt;br&gt;thrd_timedout&lt;br&gt;thrd_busy&lt;br&gt;thrd_nomem&lt;br&gt;thrd_error | indicates a thread error status | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd exit</title>
    <ns>10</ns>
    <id>9157</id>
    <revision>
      <id>54379</id>
      <parentid>52122</parentid>
      <timestamp>2013-06-01T05:12:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd exit]] to [[Template:c/thread/dsc thrd exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc fun | c/thread/thrd_exit | terminates the calling thread | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd join</title>
    <ns>10</ns>
    <id>9158</id>
    <revision>
      <id>54385</id>
      <parentid>52123</parentid>
      <timestamp>2013-06-01T05:12:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd join]] to [[Template:c/thread/dsc thrd join]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc fun | c/thread/thrd_join | blocks until a thread terminates | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd sleep</title>
    <ns>10</ns>
    <id>9159</id>
    <revision>
      <id>54390</id>
      <parentid>52124</parentid>
      <timestamp>2013-06-01T05:12:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd sleep]] to [[Template:c/thread/dsc thrd sleep]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | c/thread/thrd_sleep | suspends execution of the calling thread for the given period of time | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd start t</title>
    <ns>10</ns>
    <id>9164</id>
    <revision>
      <id>73030</id>
      <parentid>54394</parentid>
      <timestamp>2014-10-09T14:33:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>what this is</comment>
      <text xml:space="preserve" bytes="153">{{dsc typedef | nolink=true | thrd_start_t | a typedef of the function pointer type {{c|int(*)(void*)}}, used by {{c|thrd_create}} | notes={{mark c11}}}}</text>
      <sha1>l7gn185cg237arcntta90kswk43fx0p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd t</title>
    <ns>10</ns>
    <id>9163</id>
    <revision>
      <id>76528</id>
      <parentid>54400</parentid>
      <timestamp>2015-02-20T16:31:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>complete object type</comment>
      <text xml:space="preserve" bytes="112">{{dsc | {{ttb|thrd_t}} | implementation-defined complete object type identifying a thread | notes={{mark c11}}}}</text>
      <sha1>rkqwj878f3uk55b0s9hmxal94rxx63f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thrd yield</title>
    <ns>10</ns>
    <id>9160</id>
    <revision>
      <id>54404</id>
      <parentid>52127</parentid>
      <timestamp>2013-06-01T05:12:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thrd yield]] to [[Template:c/thread/dsc thrd yield]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | c/thread/thrd_yield | yields the current time slice | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc thread local</title>
    <ns>10</ns>
    <id>9182</id>
    <revision>
      <id>54408</id>
      <parentid>52128</parentid>
      <timestamp>2013-06-01T05:12:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list thread local]] to [[Template:c/thread/dsc thread local]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc macro const | c/thread/thread_local | thread local type macro | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc tss create</title>
    <ns>10</ns>
    <id>9185</id>
    <revision>
      <id>54412</id>
      <parentid>52129</parentid>
      <timestamp>2013-06-01T05:12:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list tss create]] to [[Template:c/thread/dsc tss create]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc fun | c/thread/tss_create | creates thread-specific storage pointer with a given destructor | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc tss delete</title>
    <ns>10</ns>
    <id>9188</id>
    <revision>
      <id>54414</id>
      <parentid>52130</parentid>
      <timestamp>2013-06-01T05:12:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list tss delete]] to [[Template:c/thread/dsc tss delete]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc fun | c/thread/tss_delete | releases the resources held by a given thread-specific pointer  | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc tss dtor t</title>
    <ns>10</ns>
    <id>9184</id>
    <revision>
      <id>75801</id>
      <parentid>54417</parentid>
      <timestamp>2015-01-30T14:04:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>show which type it is</comment>
      <text xml:space="preserve" bytes="119">{{dsc | {{ttb|tss_dtor_t}} | function pointer type {{c|void(*)(void*)}}, used for TSS destructor | notes={{mark c11}}}}</text>
      <sha1>rbzciidsb65kcnvb7c1p9kg7alxfo2i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc tss get</title>
    <ns>10</ns>
    <id>9186</id>
    <revision>
      <id>54421</id>
      <parentid>52132</parentid>
      <timestamp>2013-06-01T05:12:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list tss get]] to [[Template:c/thread/dsc tss get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc fun | c/thread/tss_get | reads from thread-specific storage | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc tss set</title>
    <ns>10</ns>
    <id>9187</id>
    <revision>
      <id>54423</id>
      <parentid>52133</parentid>
      <timestamp>2013-06-01T05:12:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list tss set]] to [[Template:c/thread/dsc tss set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | c/thread/tss_set | write to thread-specific storage | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/dsc tss t</title>
    <ns>10</ns>
    <id>9183</id>
    <revision>
      <id>54426</id>
      <parentid>52134</parentid>
      <timestamp>2013-06-01T05:12:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/dcl list tss t]] to [[Template:c/thread/dsc tss t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc | {{ttb|tss_t}} | thread-specific storage pointer | notes={{mark c11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/navbar</title>
    <ns>10</ns>
    <id>6527</id>
    <revision>
      <id>39856</id>
      <parentid>35525</parentid>
      <timestamp>2012-09-28T19:56:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="143">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/thread/navbar heading
|content2 = c/thread/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/navbar content</title>
    <ns>10</ns>
    <id>9207</id>
    <revision>
      <id>79132</id>
      <parentid>74989</parentid>
      <timestamp>2015-06-24T15:13:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merged once_flag_init into call_once</comment>
      <text xml:space="preserve" bytes="1379">{{nv begin}}
{{nv h1 | Threads}}
{{nv col begin}}
{{nv ln | c/thread/thrd_create}}
{{nv ln | c/thread/thrd_equal}}
{{nv ln | c/thread/thrd_current}}
{{nv ln | c/thread/thrd_sleep}}
{{nv ln | c/thread/thrd_yield}}
{{nv ln | c/thread/thrd_exit}}
{{nv col next}}
{{nv ln | c/thread/thrd_detach}}
{{nv ln | c/thread/thrd_join}}
{{nv ln | c/thread/thrd_errors | thrd_success | thrd_timedout | thrd_busy | thrd_nomem | thrd_error}}
{{nv col end}}

{{nv h1 | Mutual exclusion}}
{{nv col begin}}
{{nv ln | c/thread/mtx_init}}
{{nv ln | c/thread/mtx_lock}}
{{nv ln | c/thread/mtx_timedlock}}
{{nv ln | c/thread/mtx_trylock}}
{{nv ln | c/thread/call_once}}
{{nv col next}}
{{nv ln | c/thread/mtx_unlock}}
{{nv ln | c/thread/mtx_destroy}}
{{nv ln | c/thread/mtx_types | mtx_plain | mtx_recursive | mtx_timed}}
{{nv col end}}

{{nv h1 | Condition variables}}
{{nv col begin}}
{{nv ln | c/thread/cnd_init}}
{{nv ln | c/thread/cnd_signal}}
{{nv ln | c/thread/cnd_broadcast}}
{{nv col next}}
{{nv ln | c/thread/cnd_wait}}
{{nv ln | c/thread/cnd_timedwait}}
{{nv ln | c/thread/cnd_destroy}}
{{nv col end}}

{{nv h1 | Thread-local storage}}
{{nv col begin}}
{{nv ln | c/thread/thread_local}}
{{nv ln | c/thread/TSS_DTOR_ITERATIONS}}
{{nv ln | c/thread/tss_create}}
{{nv col next}}
{{nv ln | c/thread/tss_get}}
{{nv ln | c/thread/tss_set}}
{{nv ln | c/thread/tss_delete}}
{{nv col end}}
{{nv end}}</text>
      <sha1>dyjkgw3zim72mswsnhmnxo7mdyug6cw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/navbar heading</title>
    <ns>10</ns>
    <id>6528</id>
    <revision>
      <id>35526</id>
      <parentid>25714</parentid>
      <timestamp>2012-06-15T22:27:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/thread/sidebar heading]] to [[Template:c/thread/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="37">[[c/thread | Thread support library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/thread/tss example</title>
    <ns>10</ns>
    <id>13972</id>
    <revision>
      <id>75786</id>
      <timestamp>2015-01-29T16:48:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>micro-example for TSS</comment>
      <text xml:space="preserve" bytes="303">{{todo|improve, perhaps look for POSIX examples for inspiration}}
{{source|1=
int thread_func(void *arg) {
    tss_t key;
    if (thrd_success == tss_create(&amp;key, free)) {
        tss_set(key, malloc(4)); // stores a pointer on TSS
        // ...
    }
} // calls free() for the pointer stored on TSS
}}</text>
      <sha1>tc7hrlwexyhtyxl3qt54vj8do0gghon</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/title</title>
    <ns>10</ns>
    <id>5752</id>
    <revision>
      <id>21051</id>
      <timestamp>2012-04-13T00:24:32Z</timestamp>
      <contributor>
        <username>Eendy</username>
        <id>539</id>
      </contributor>
      <comment>copy paste from c++ version</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{ctitle | {{{1|}}} | {{{2|}}} | {{{3|}}} | {{{4|}}} | {{{5|}}} | {{{6|}}} }}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/dsc NULL</title>
    <ns>10</ns>
    <id>6542</id>
    <revision>
      <id>54432</id>
      <parentid>52136</parentid>
      <timestamp>2013-06-01T05:12:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/types/dcl list NULL]] to [[Template:c/types/dsc NULL]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc macro const | c/types/NULL | implementation-defined null pointer constant}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/dsc max align t</title>
    <ns>10</ns>
    <id>9385</id>
    <revision>
      <id>54434</id>
      <parentid>52137</parentid>
      <timestamp>2013-06-01T05:12:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/types/dcl list max align t]] to [[Template:c/types/dsc max align t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc typedef | c/types/max_align_t | a type with alignment requirement as great as any other scalar type | notes={{mark c11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/dsc offsetof</title>
    <ns>10</ns>
    <id>6543</id>
    <revision>
      <id>54441</id>
      <parentid>52138</parentid>
      <timestamp>2013-06-01T05:13:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/types/dcl list offsetof]] to [[Template:c/types/dsc offsetof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc macro fun | c/types/offsetof | byte offset from the beginning of a struct type to specified member}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/dsc ptrdiff t</title>
    <ns>10</ns>
    <id>6544</id>
    <revision>
      <id>54445</id>
      <parentid>52139</parentid>
      <timestamp>2013-06-01T05:13:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/types/dcl list ptrdiff t]] to [[Template:c/types/dsc ptrdiff t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc typedef | c/types/ptrdiff_t | signed integer type returned when subtracting two pointers}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/dsc size t</title>
    <ns>10</ns>
    <id>6545</id>
    <revision>
      <id>54451</id>
      <parentid>52140</parentid>
      <timestamp>2013-06-01T05:13:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:c/types/dcl list size t]] to [[Template:c/types/dsc size t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc typedef | c/types/size_t | unsigned integer type returned by the {{ltt|c/language/sizeof | sizeof}} operator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/limits/navbar</title>
    <ns>10</ns>
    <id>9520</id>
    <revision>
      <id>40424</id>
      <parentid>40418</parentid>
      <timestamp>2012-10-13T08:40:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="225">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/types/navbar heading
|content2 = c/types/navbar content

|heading3 = c/types/limits/navbar heading
|content3 = c/types/limits/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/limits/navbar content</title>
    <ns>10</ns>
    <id>9524</id>
    <revision>
      <id>52141</id>
      <parentid>40425</parentid>
      <timestamp>2013-06-01T04:40:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="104">{{nv begin}}
{{nv ln | c/types/limits/FLT_ROUNDS}}
{{nv ln | c/types/limits/FLT_EVAL_METHOD}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/limits/navbar heading</title>
    <ns>10</ns>
    <id>9525</id>
    <revision>
      <id>40426</id>
      <timestamp>2012-10-13T08:41:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="35">[[c/types/limits | Numeric limits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/navbar</title>
    <ns>10</ns>
    <id>9309</id>
    <revision>
      <id>39857</id>
      <parentid>39240</parentid>
      <timestamp>2012-09-28T19:56:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="140">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/types/navbar heading
|content2 = c/types/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/navbar content</title>
    <ns>10</ns>
    <id>9526</id>
    <revision>
      <id>52142</id>
      <parentid>40428</parentid>
      <timestamp>2013-06-01T04:40:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="238">{{nv begin}}
{{nv ln | c/types/size_t}}
{{nv ln | c/types/ptrdiff_t}}
{{nv ln | c/types/NULL}}
{{nv ln | c/types/max_align_t | notes={{mark since c11}}}}
{{nv ln | c/types/offsetof}}
{{nv | [[c/types/limits | Numeric limits]]}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/types/navbar heading</title>
    <ns>10</ns>
    <id>9310</id>
    <revision>
      <id>39241</id>
      <timestamp>2012-08-29T22:07:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="26">[[c/types | Type support]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/dsc va arg</title>
    <ns>10</ns>
    <id>13687</id>
    <revision>
      <id>71739</id>
      <timestamp>2014-06-22T13:13:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new template for va_arg</comment>
      <text xml:space="preserve" bytes="84">{{dsc macro fun | c/variadic/va_arg | accesses the next variadic function argument}}</text>
      <sha1>3ez97toc3h2yr42osp3soxweihy8gte</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/dsc va copy</title>
    <ns>10</ns>
    <id>13688</id>
    <revision>
      <id>71770</id>
      <parentid>71769</parentid>
      <timestamp>2014-06-23T20:20:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>deleted extra '/'</comment>
      <text xml:space="preserve" bytes="109">{{dsc macro fun | c/variadic/va_copy | makes a copy of the variadic function arguments | notes={{mark c99}}}}</text>
      <sha1>mau1huw0dnu7t0fwdtrqrpth7k3xo52</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/dsc va end</title>
    <ns>10</ns>
    <id>13689</id>
    <revision>
      <id>71743</id>
      <timestamp>2014-06-22T17:35:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new template for va_end</comment>
      <text xml:space="preserve" bytes="89">{{dsc macro fun | c/variadic/va_end | ends traversal of the variadic function arguments}}</text>
      <sha1>oot4sz3jo2o9uh2wdqbtv4cl20tpqzz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/dsc va list</title>
    <ns>10</ns>
    <id>13685</id>
    <revision>
      <id>71744</id>
      <parentid>71735</parentid>
      <timestamp>2014-06-22T18:47:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>replaced class with typedef</comment>
      <text xml:space="preserve" bytes="108">{{dsc typedef | c/variadic/va_list | holds the information needed by va_start, va_arg, va_end, and va_copy}}</text>
      <sha1>c9ay0p94bprh3jpwdij8zjp8eds3ti4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/dsc va start</title>
    <ns>10</ns>
    <id>13686</id>
    <revision>
      <id>71738</id>
      <timestamp>2014-06-22T12:59:31Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new template for va_start</comment>
      <text xml:space="preserve" bytes="87">{{dsc macro fun | c/variadic/va_start | enables access to variadic function arguments}}</text>
      <sha1>i6be6or37y7lx5zsiimlwe2z1t7z638</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/navbar</title>
    <ns>10</ns>
    <id>13960</id>
    <revision>
      <id>75654</id>
      <parentid>75645</parentid>
      <timestamp>2015-01-26T01:07:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>this is library, not language</comment>
      <text xml:space="preserve" bytes="146">{{navbar
|heading1 = c/navbar heading
|content1 = c/navbar content

|heading2 = c/variadic/navbar heading
|content2 = c/variadic/navbar content
}}</text>
      <sha1>g1a3tvv8i6azkld6fug0q9udcxiqdec</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/navbar content</title>
    <ns>10</ns>
    <id>13961</id>
    <revision>
      <id>75641</id>
      <timestamp>2015-01-25T12:38:16Z</timestamp>
      <contributor>
        <username>A3f.at</username>
        <id>3652</id>
      </contributor>
      <comment>Created page with &quot;{{nv begin}} {{nv ln | c/variadic/va_start}} {{nv ln | c/variadic/va_arg}} {{nv ln | c/variadic/va_copy}} {{nv ln | c/variadic/va_end}} {{nv ln | c/variadic/va_list}} {{nv end}}&quot;</comment>
      <text xml:space="preserve" bytes="177">{{nv begin}}
{{nv ln | c/variadic/va_start}}
{{nv ln | c/variadic/va_arg}}
{{nv ln | c/variadic/va_copy}}
{{nv ln | c/variadic/va_end}}
{{nv ln | c/variadic/va_list}}
{{nv end}}</text>
      <sha1>pm0iduhljugqm9wglghj1l0dmfe9lrr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:c/variadic/navbar heading</title>
    <ns>10</ns>
    <id>13962</id>
    <revision>
      <id>75642</id>
      <timestamp>2015-01-25T12:38:45Z</timestamp>
      <contributor>
        <username>A3f.at</username>
        <id>3652</id>
      </contributor>
      <comment>Created page with &quot;[[c/variadic | Variadic functions]]&quot;</comment>
      <text xml:space="preserve" bytes="35">[[c/variadic | Variadic functions]]</text>
      <sha1>m0jk3yod1lmr0bahv4xrpmly76b5nrr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cast req1</title>
    <ns>10</ns>
    <id>1806</id>
    <revision>
      <id>24607</id>
      <parentid>3612</parentid>
      <timestamp>2012-04-20T05:59:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp|&quot; to &quot;{{c|&quot;</comment>
      <text xml:space="preserve" bytes="456">{{#if: {{{p1|}}}
 | The type {{c|{{{1}}}}} must be such that an object of type {{c|{{{p1}}}}} can be dereferenced and then implicitly converted to {{c|{{{1}}}}}.&lt;!--
--&gt;| {{#if: {{{t1|}}}&lt;!--
   --&gt;| The type {{c|{{{1}}}}} must be such that an object of type {{c|{{{t1}}}}} can be implicitly converted to {{c|{{{1}}}}}.&lt;!--
   --&gt;| {{error|requirement not defined}}&lt;!--
   --&gt;}}&lt;!--
--&gt;}}&lt;noinclude&gt;{{documentation | content={{cast rreq/doc}}}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cast req2</title>
    <ns>10</ns>
    <id>1807</id>
    <revision>
      <id>84049</id>
      <parentid>84048</parentid>
      <timestamp>2016-03-15T10:10:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Undo revision 84048 by [[Special:Contributions/T. Canens|T. Canens]] ([[User talk:T. Canens|talk]]) done</comment>
      <text xml:space="preserve" bytes="2142">{{#if:{{{t2|}}}
 |{{#if:{{{t1|}}} 
   | &lt;!--t1t2--&gt; The types {{c|{{{1}}}}} and {{c|{{{2}}}}} must be such that objects of types {{c|{{{t1}}}}} and {{c|{{{t2}}}}} can be implicitly converted to {{c|{{{1}}}}} and {{c|{{{2}}}}} respectively.
   |{{#if:{{{p1|}}}
     | &lt;!--p1t2--&gt; The type {{c|{{{1}}}}} must be such that an object of type {{c|{{{p1}}}}} can be dereferenced and then implicitly converted to {{c|{{{1}}}}}. The type {{c|{{{2}}}}} must be such that an object of type {{c|{{{t2}}}}} can be implicitly converted to {{c|{{{2}}}}}.
     | {{error|requirement not defined}}
    }}
  }}
 |{{#if:{{{p2|}}}
   |{{#if:{{{t1|}}} 
     | &lt;!--t1p2--&gt; {{#if:{{{bidirectional|}}}
      | The types {{c|{{{1}}}}} and {{c|{{{2}}}}} must be such that an object of type {{c|{{{t1}}}}} can be implicitly converted to both {{c|{{{1}}}}} and {{c|{{{2}}}}}, and an object of type {{c|{{{p2}}}}} can be dereferenced and then implicitly converted to both {{c|{{{1}}}}} and {{c|{{{2}}}}}.
      | The type {{c|{{{1}}}}} must be such that an object of type {{c|{{{t1}}}}} can be implicitly converted to {{c|{{{1}}}}}. The type {{c|{{{2}}}}} must be such that an object of type {{c|{{{p2}}}}} can be dereferenced and then implicitly converted to {{c|{{{2}}}}}.}}
     |{{#if:{{{p1|}}}
       | &lt;!--p1p2--&gt; The types {{c|{{{1}}}}} and {{c|{{{2}}}}} must be such that objects of types {{c|{{{p1}}}}} and {{c|{{{p2}}}}} can be dereferenced and then implicitly converted to {{#if:{{{bidirectional|}}}|both {{c|{{{1}}}}} and {{c|{{{2}}}}}|{{c|{{{1}}}}} and {{c|{{{2}}}}} respectively}}.
       | {{error|requirement not defined}}
      }}
    }}
   |{{#if:{{{t1|}}} 
     | &lt;!--t1t1--&gt; The types {{c|{{{1}}}}} and {{c|{{{2}}}}} must be such that an object of type {{c|{{{t1}}}}} can be implicitly converted to both of them.
     |{{#if:{{{p1|}}}
       | &lt;!--p1p1--&gt; The types {{c|{{{1}}}}} and {{c|{{{2}}}}} must be such that an object of type {{c|{{{p1}}}}} can be dereferenced and then implicitly converted to both of them.
       | {{error|requirement not defined}}
      }}
    }}
  }}
}}&lt;noinclude&gt;{{documentation | content={{cast rreq/doc}}}}&lt;/noinclude&gt;</text>
      <sha1>p2s4lkodanvznyts62d7xvcyfse3muj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cast rreq</title>
    <ns>10</ns>
    <id>1808</id>
    <revision>
      <id>24609</id>
      <parentid>3945</parentid>
      <timestamp>2012-04-20T05:59:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp|&quot; to &quot;{{c|&quot;</comment>
      <text xml:space="preserve" bytes="393">{{#if: {{{rp|}}}
 | The type {{c|{{{1}}}}} must be such that an object of type {{c|{{{rp}}}}} can be dereferenced and assigned a value of type {{c|{{{1}}}}}.
 | {{#if: {{{rt|}}}
    | The type {{c|{{{1}}}}} must be such that an object of type {{c|{{{rt}}}}} can be assigned a value of type {{c|{{{1}}}}}.
    | {{error|requirement not defined}}
   }}
}}&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cast rreq/doc</title>
    <ns>10</ns>
    <id>1809</id>
    <revision>
      <id>23852</id>
      <parentid>3618</parentid>
      <timestamp>2012-04-20T03:37:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp|&quot; to &quot;{{c|&quot;</comment>
      <text xml:space="preserve" bytes="1229">This is one of the templates used to specify that some type must be convertible to another. All these templates can emit either of the requirements that it must be possible to convert an object of particular type to another type or it must be possible to dereference an object of particular type and then convert it to another type. This behavior depends an the supplied parameters ({{tt|t}} means plain type, {{tt|p}} - type that must be dereferenced first).

{{tl|cast rreq | ''base_type'' | rt{{=}}''type'' {{small|or}} rp{{=}}''pointer_type''}} - ''base_type'' must be convertible to {{c|rt}} or {{c|*rp}}.

{{tl|cast req1 | ''base_type'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type''}} - {{tt|t1}} or {{tt|*p1}} must be convertible to ''base_type''.

{{tl|cast req2 | ''base_type1'' | ''base_type2'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type'' | t2{{=}}''type'' {{small|or}} p2{{=}}''pointer_type'' {{small|(optional)}}}} - {{tt|t1}} or {{tt|*p1}} must be convertible to ''base_type1'' or {{tt|t2}} or {{tt|*p2}} must be convertible to ''base_type2''. If neither {{tt|t2}} nor {{tt|p2}} is supplied, it is assumed that {{tt|t1}} or {{tt|*p1}} must be convertible to both ''base_type1'' or ''base_type2''.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cat handler</title>
    <ns>10</ns>
    <id>1810</id>
    <revision>
      <id>20018</id>
      <parentid>3620</parentid>
      <timestamp>2012-03-19T18:30:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="3223">{{#if:
  {{#ifeq: {{lc: {{{nocat|}}} }} | true
  | dontcat    &lt;!--&quot;nocat=true&quot;, don't categorize--&gt;
  }}{{#ifeq: {{lc: {{{categories|}}} }} | no
  | dontcat
  }}{{#switch: {{lc: {{{category2|¬}}} }}
  | yes
  | ¬   =   &lt;!--Not defined--&gt;
  | #default = dontcat   &lt;!--&quot;category2 = no/'defined but empty'/'anything'&quot;--&gt;
  }}{{#switch: {{lc: {{{subpage|}}} }}
  | no = 
    {{basepage subpage
    | 
    | dontcat    &lt;!--&quot;subpage=no&quot; and on a subpage--&gt;
    | page = {{{page|}}}   &lt;!--For testing--&gt;
    }}
  | only = 
    {{basepage subpage
    | dontcat    &lt;!--&quot;subpage=only&quot; and not on a subpage--&gt;
    | page = {{{page|}}}   &lt;!--For testing--&gt;
    }}
  }}

|   &lt;!--Don't categorise (result was &quot;dontcat&quot; or &quot;dontcatdontcat&quot; and so on)--&gt;
| &lt;!--Check blacklist--&gt;
  {{#switch:
    {{#ifeq: {{lc: {{{nocat|}}} }} | false
    |   &lt;!--&quot;nocat=false&quot;, skip blacklist check--&gt;
    | {{#ifeq: {{lc: {{{categories|}}} }} | yes
      |   &lt;!--Skip blacklist check--&gt;
      | {{#ifeq: {{lc: {{{category2|}}} }} | yes
        |   &lt;!--Skip blacklist check--&gt;
        | {{cat handler/blacklist| page = {{{page|}}} }}   &lt;!--Check blacklist--&gt;
        }}
      }}
    }}
  | hide = &lt;!--Blacklist returned &quot;hide&quot;, don't categorize--&gt;
  | #default  = 
    &lt;!--Check if any namespace parameter is defined--&gt;
    {{#ifeq: h0#384!5nea+w9 | {{{all| {{{main| {{{talk| {{{user| {{{wikipedia| {{{file| {{{mediawiki| {{{template| {{{help| {{{category| {{{portal| {{{book| {{{other| h0#384!5nea+w9 }}} }}} }}} }}} }}} }}} }}} }}} }}} }}} }}} }}} }}}
    | &lt;!--No namespace parameters fed, basic usage--&gt;
      {{namespace detect
      | main = {{{1|}}}
      | file = {{{1|}}}
      | help = {{{1|}}}
      | category = {{{1|}}}
      | portal = {{{1|}}}
      | book = {{{1|}}}
      | page = {{{page|}}}   &lt;!--For testing and demonstration--&gt;
      }}
    | &lt;!--Namespace parameters fed, advanced usage.
          If &quot;data&quot; is a number, return the corresponding 
          numbered parameter, else return &quot;data&quot;.  --&gt;
      {{{all|}}}{{cat handler/numbered
      | 1 = {{{1|}}}
      | 2 = {{{2|}}}
      | 3 = {{{3|}}}
      | 4 = {{{4|}}}
      | 5 = {{{5|}}}
      | 6 = {{{6|}}}
      | 7 = {{{7|}}}
      | 8 = {{{8|}}}
      | 9 = {{{9|}}}
      | 10 = {{{10|}}}
      | data = 
        &lt;!--Check what namespace, and return the data for it.
            Respecting empty parameters on purpose.  --&gt;
        {{namespace detect
        | main = {{{main| {{{other|}}} }}}
        | talk = {{{talk| {{{other|}}} }}}
        | user = {{{user| {{{other|}}} }}}
        | wikipedia = {{{wikipedia| {{{project| {{{other|}}} }}} }}}
        | file = {{{file| {{{image| {{{other|}}} }}} }}}
        | mediawiki = {{{mediawiki| {{{other|}}} }}}
        | template = {{{template| {{{other|}}} }}}
        | help = {{{help| {{{other|}}} }}}
        | category = {{{category| {{{other|}}} }}}
        | portal = {{{portal| {{{other|}}} }}}
        | book = {{{book| {{{other|}}} }}}
        | other = {{{other|}}}  &lt;!--Namespace special or a new namespace--&gt;
        | page = {{{page|}}}   &lt;!--For testing and demonstration--&gt;
        }}
      }}
    }}
  }}
}}&lt;noinclude&gt;
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cat handler/blacklist</title>
    <ns>10</ns>
    <id>1811</id>
    <revision>
      <id>3622</id>
      <parentid>3621</parentid>
      <timestamp>2011-06-06T23:01:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cat handler/numbered</title>
    <ns>10</ns>
    <id>1812</id>
    <revision>
      <id>20016</id>
      <parentid>3624</parentid>
      <timestamp>2012-03-19T18:30:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="278">{{#iferror: {{#expr: 1 + {{{data|}}} }} 
| {{{data|}}}   &lt;!--Not a number, return &quot;data&quot; as is--&gt; 
| {{{ {{{data|}}} |}}}   &lt;!--&quot;data&quot; is a number, return that numbered parameter--&gt;
}}&lt;noinclude&gt;
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cc</title>
    <ns>10</ns>
    <id>10091</id>
    <revision>
      <id>48003</id>
      <parentid>47984</parentid>
      <timestamp>2013-05-18T16:42:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>force inline</comment>
      <text xml:space="preserve" bytes="177">&lt;onlyinclude&gt;&lt;span class=&quot;t-cc&quot;&gt;{{#tag:source|{{{code|{{{1}}}}}}|lang={{{lang|{{{2|{{get_lang}}}}}}}}|enclose=none}}&lt;/span&gt;&lt;/onlyinclude&gt;
{{documentation | Template:source/doc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:center</title>
    <ns>10</ns>
    <id>1813</id>
    <revision>
      <id>3626</id>
      <parentid>3625</parentid>
      <timestamp>2011-06-06T23:01:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="159">&lt;includeonly&gt;&lt;div class=&quot;center&quot; style=&quot;width:auto; margin-left:auto; margin-right:auto;&quot;&gt;{{{1}}}&lt;/div&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:center/doc</title>
    <ns>10</ns>
    <id>2747</id>
    <revision>
      <id>10400</id>
      <timestamp>2011-09-10T20:11:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="224">Aligns a snippet of text passed as the first unnamed parameter

{{tl|left|''text''}} - aligns ''text'' to the left

{{tl|center|''text''}} - aligns ''text'' to the center

{{tl|right|''text''}} - aligns ''text'' to the right</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cmark</title>
    <ns>10</ns>
    <id>1814</id>
    <revision>
      <id>17981</id>
      <parentid>13150</parentid>
      <timestamp>2012-01-19T23:34:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>shorter css class name (we ship at least 1.5MB just for that word)</comment>
      <text xml:space="preserve" bytes="90">&lt;span class=&quot;t-cmark&quot; &gt;[{{trim|{{{1}}}}}]&lt;/span&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cmark deleted</title>
    <ns>10</ns>
    <id>1816</id>
    <revision>
      <id>3940</id>
      <parentid>3632</parentid>
      <timestamp>2011-06-10T19:57:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:cmark deleted]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="80">{{cmark|deleted}}&lt;noinclude&gt;
{{documentation | Template:cmark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cmark static</title>
    <ns>10</ns>
    <id>1817</id>
    <revision>
      <id>3937</id>
      <parentid>3634</parentid>
      <timestamp>2011-06-10T19:56:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:cmark static]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="79">{{cmark|static}}&lt;noinclude&gt;
{{documentation | Template:cmark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cmark virtual</title>
    <ns>10</ns>
    <id>1818</id>
    <revision>
      <id>3939</id>
      <parentid>3636</parentid>
      <timestamp>2011-06-10T19:57:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:cmark virtual]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="80">{{cmark|virtual}}&lt;noinclude&gt;
{{documentation | Template:cmark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cmark/doc</title>
    <ns>10</ns>
    <id>1815</id>
    <revision>
      <id>3630</id>
      <parentid>3629</parentid>
      <timestamp>2011-06-06T23:01:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="230">Creates an annotation for a function. Several annotations are already defined: 

{{tl|cmark virtual}} results in {{cmark virtual}}

{{tl|cmark static}} results in {{cmark static}}

{{tl|cmark deleted}} results in {{cmark deleted}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cob</title>
    <ns>10</ns>
    <id>14442</id>
    <redirect title="Template:collapse bottom" />
    <revision>
      <id>80387</id>
      <timestamp>2015-08-08T03:27:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Template:collapse bottom]]</text>
      <sha1>ltx053bdu59lru2g6lvg29vhm95m25j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:collapse bottom</title>
    <ns>10</ns>
    <id>14439</id>
    <revision>
      <id>80385</id>
      <parentid>80378</parentid>
      <timestamp>2015-08-08T03:26:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust to match</comment>
      <text xml:space="preserve" bytes="35">&lt;includeonly&gt;|}&lt;/div&gt;&lt;/includeonly&gt;</text>
      <sha1>5ul6vumze6wsc8nhvfug8rfe8fhec7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:collapse top</title>
    <ns>10</ns>
    <id>14438</id>
    <revision>
      <id>80390</id>
      <parentid>80389</parentid>
      <timestamp>2015-08-08T03:31:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+note</comment>
      <text xml:space="preserve" bytes="1313">&lt;div style=&quot;margin-left:{{{indent|0px}}}&quot;&gt;&lt;!-- NOTE: width renders incorrectly if added to main STYLE section--&gt;
{| &lt;!-- Template:Collapse top --&gt; class=&quot;mw-collapsible {{{{{|safesubst:}}}#if:{{{expand|}}}||mw-collapsed}}&quot; style=&quot;background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|silver}}}; margin: 0.2em auto auto; width:{{{{{|safesubst:}}}#if:{{{width|}}}|{{{width}}}|100%}}; clear: both; padding: 1px;&quot;
|-
! style=&quot;background: {{{bg|#{{main other|F0F2F5|CFC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{{{{|safesubst:}}}#if:{{{left|}}}|left|center}}; {{{{{|safesubst:}}}#if:{{{fc|}}}|color: {{{fc}}};|}}&quot; | &lt;span style=&quot;font-size:115%&quot;&gt;{{{1|{{{title|{{{reason|{{{header|{{{heading|Extended content}}} }}} }}} }}} }}}&lt;/span&gt;   
{{{{{|safesubst:}}}#if:{{{warning|{{{2|}}}}}}
|{{{{{|safesubst:}}}!}}-
{{{{{|safesubst:}}}!}} style=&quot;text-align:center; font-style:italic;&quot; {{{{{|safesubst:}}}!}} {{{2|The following is a closed debate. {{strongbad|Please do not modify it.}} }}} }}
|-
| style=&quot;border: solid {{{border2|1px silver}}}; padding: {{{padding|8px}}}; background: {{{bg2|white}}};&quot; {{{{{|safesubst:}}}!}}&lt;noinclude&gt;
{{collapse bottom}}
See [https://en.wikipedia.org/wiki/Template:Collapse_top the English Wikipedia page] for documentation.
&lt;/noinclude&gt;</text>
      <sha1>25knrb0zzyqeilxsvekhttz5wyt3qys</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:column-count</title>
    <ns>10</ns>
    <id>14437</id>
    <revision>
      <id>80376</id>
      <timestamp>2015-08-08T03:09:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Copy from https://en.wikipedia.org/w/index.php?title=Template:Column-count&amp;oldid=638540848</comment>
      <text xml:space="preserve" bytes="114">&lt;includeonly&gt;-moz-column-count: {{{1|2}}}; -webkit-column-count: {{{1|2}}}; column-count: {{{1|2}}};&lt;/includeonly&gt;</text>
      <sha1>36euadrzge9ns9gk79xfkw3k9ygqacb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:compiler support row</title>
    <ns>10</ns>
    <id>14156</id>
    <revision>
      <id>86487</id>
      <parentid>86486</parentid>
      <timestamp>2016-07-04T03:28:52Z</timestamp>
      <contributor>
        <username>PhilMiller</username>
        <id>4811</id>
      </contributor>
      <comment>Move compilers that show almost no modern C++ support to the end of the list</comment>
      <text xml:space="preserve" bytes="2023">&lt;noinclude&gt;
== Template ==

Used for creating a row in the [[cpp/compiler_support|compiler support]] table.  The parameters are as follows:

{| class=&quot;wikitable&quot;
|-
! Parameter
! Required?
! Meaning
|-
| {{tt|feature}}
| Yes
| A value for the feature column.  Use page links to the areas on the wiki explaining the feature, if possible.
|-
| {{tt|reference}}
| Yes
| The normative reference for the changes to the standard defining the feature.
|-
| {{tt|version}}
| No
| The version of the C++ standard that first adopted the feature.
|}

The remaining parameters are all optional and specify the compiler support for the feature.  If left unspecified, then &lt;nowiki&gt;{{no|}}&lt;/nowiki&gt; will be used.

{| class=&quot;wikitable sortable&quot; style=&quot;font-size:0.8em; width: 820px;&quot;
|- style=&quot;height:15em&quot;
! style=&quot;vertical-align:bottom;&quot; | C++ feature&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! {{vertical|GCC}}
! {{vertical|Clang}}
! {{vertical|MSVC}}
! {{vertical|EDG eccp}}
! {{vertical|Intel C++}}
! {{vertical|IBM XLC++}}
! {{vertical|Sun/Oracle C++}}
! {{vertical|Embarcadero C++ Builder}}
! {{vertical|Cray}}
! {{vertical|Portland Group (pgi)}}
! {{vertical|HP aCC}}
! {{vertical|Digital Mars C++}}
&lt;/noinclude&gt;{{!}}-
{{!}} {{{feature}}}
{{!}} {{{reference}}}
{{!}} {{{version&lt;includeonly&gt;|&lt;/includeonly&gt;}}}
{{!}} {{{gcc&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{clang&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{msvc&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{edg&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{icc&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{ibm&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{sun&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{embar&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{cray&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{pgi&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{hp&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
{{!}} {{{mars&lt;includeonly&gt;|{{no|}}&lt;/includeonly&gt;}}}
&lt;noinclude&gt;|}&lt;/noinclude&gt;</text>
      <sha1>pd84q318vi47naagqw35w38fyn5oyqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:concept</title>
    <ns>10</ns>
    <id>5429</id>
    <revision>
      <id>39826</id>
      <parentid>38365</parentid>
      <timestamp>2012-09-28T17:47:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>tt -&gt; code</comment>
      <text xml:space="preserve" bytes="136">{{#if: {{{1|}}} |[[cpp/concept/{{trim|{{{1|}}}}}|&lt;code&gt;{{trim|{{{1|}}}}}&lt;/code&gt;]]| {{error|no concept given}} }}&lt;noinclude&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cot</title>
    <ns>10</ns>
    <id>14441</id>
    <redirect title="Template:collapse top" />
    <revision>
      <id>80386</id>
      <timestamp>2015-08-08T03:27:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:collapse top]]</text>
      <sha1>77z0s3g8jzotyuwu3sf6beq1w4l06ck</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp//title</title>
    <ns>10</ns>
    <id>1827</id>
    <revision>
      <id>3654</id>
      <parentid>3653</parentid>
      <timestamp>2011-06-06T23:01:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="134">&lt;onlyinclude&gt;{{cpp/title | n=&amp;#123;&amp;#123;&amp;#123;1&amp;#125;&amp;#125;&amp;#125;::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc accumulate</title>
    <ns>10</ns>
    <id>1828</id>
    <revision>
      <id>54453</id>
      <parentid>52143</parentid>
      <timestamp>2013-06-01T05:13:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list accumulate]] to [[Template:cpp/algorithm/dsc accumulate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc tfun | cpp/algorithm/accumulate | sums up a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc adjacent difference</title>
    <ns>10</ns>
    <id>1829</id>
    <revision>
      <id>54455</id>
      <parentid>52144</parentid>
      <timestamp>2013-06-01T05:13:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list adjacent difference]] to [[Template:cpp/algorithm/dsc adjacent difference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc tfun | cpp/algorithm/adjacent_difference | computes the differences between adjacent elements in a range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc adjacent find</title>
    <ns>10</ns>
    <id>1830</id>
    <revision>
      <id>71756</id>
      <parentid>54458</parentid>
      <timestamp>2014-06-23T05:21:18Z</timestamp>
      <contributor>
        <username>Jeremy murphy</username>
        <id>3174</id>
      </contributor>
      <comment>Change wording to use &quot;equality&quot; not &quot;identity&quot;; specify that it is the _first_ two adjacent items; use more technical terminology.</comment>
      <text xml:space="preserve" bytes="126">{{dsc tfun | cpp/algorithm/adjacent_find | finds the first two adjacent items that are equal (or satisfy a given predicate) }}</text>
      <sha1>6cnqoin1vk19txa657136s755z1imu9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc all any none of</title>
    <ns>10</ns>
    <id>1831</id>
    <revision>
      <id>54460</id>
      <parentid>52146</parentid>
      <timestamp>2013-06-01T05:13:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list all any none of]] to [[Template:cpp/algorithm/dsc all any none of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="225">{{dsc tfun | cpp/algorithm/all_any_none_of | title=all_of&lt;br&gt;any_of&lt;br&gt;none_of | checks if a predicate is {{c|true}} for all, any or none of the elements in a range |notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc binary search</title>
    <ns>10</ns>
    <id>1832</id>
    <revision>
      <id>54465</id>
      <parentid>52147</parentid>
      <timestamp>2013-06-01T05:13:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list binary search]] to [[Template:cpp/algorithm/dsc binary search]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc tfun | cpp/algorithm/binary_search | determines if an element exists in a certain range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc bsearch</title>
    <ns>10</ns>
    <id>1833</id>
    <revision>
      <id>54469</id>
      <parentid>52148</parentid>
      <timestamp>2013-06-01T05:13:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list bsearch]] to [[Template:cpp/algorithm/dsc bsearch]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc fun | cpp/algorithm/bsearch | searches an array for an element of unspecified type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc clamp</title>
    <ns>10</ns>
    <id>14759</id>
    <revision>
      <id>83899</id>
      <timestamp>2016-03-13T18:21:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">{{dsc tfun | cpp/algorithm/clamp | clamps a value between a pair of boundary values | notes={{mark c++17}} }}</text>
      <sha1>cirz4x3g5qoiky4uoemjbwrdal5aoey</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc copy</title>
    <ns>10</ns>
    <id>1834</id>
    <revision>
      <id>54473</id>
      <parentid>52149</parentid>
      <timestamp>2013-06-01T05:13:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list copy]] to [[Template:cpp/algorithm/dsc copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/algorithm/copy | copies a range of elements to a new location | title=copy&lt;br&gt;copy_if | notes=&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc copy backward</title>
    <ns>10</ns>
    <id>1835</id>
    <revision>
      <id>54476</id>
      <parentid>52150</parentid>
      <timestamp>2013-06-01T05:13:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list copy backward]] to [[Template:cpp/algorithm/dsc copy backward]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/algorithm/copy_backward | copies a range of elements in backwards order }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc copy n</title>
    <ns>10</ns>
    <id>2437</id>
    <revision>
      <id>54478</id>
      <parentid>52151</parentid>
      <timestamp>2013-06-01T05:13:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list copy n]] to [[Template:cpp/algorithm/dsc copy n]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/algorithm/copy_n | copies a number of elements to a new location | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc count</title>
    <ns>10</ns>
    <id>1836</id>
    <revision>
      <id>54481</id>
      <parentid>52152</parentid>
      <timestamp>2013-06-01T05:13:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list count]] to [[Template:cpp/algorithm/dsc count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/algorithm/count | title=count&lt;br&gt;count_if | returns the number of elements satisfying specific criteria }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc equal</title>
    <ns>10</ns>
    <id>1837</id>
    <revision>
      <id>54485</id>
      <parentid>52153</parentid>
      <timestamp>2013-06-01T05:13:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list equal]] to [[Template:cpp/algorithm/dsc equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc tfun | cpp/algorithm/equal | determines if two sets of elements are the same }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc equal range</title>
    <ns>10</ns>
    <id>1838</id>
    <revision>
      <id>54489</id>
      <parentid>52154</parentid>
      <timestamp>2013-06-01T05:13:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list equal range]] to [[Template:cpp/algorithm/dsc equal range]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc tfun | cpp/algorithm/equal_range | returns range of elements matching a specific key}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc exclusive scan</title>
    <ns>10</ns>
    <id>15069</id>
    <revision>
      <id>84484</id>
      <timestamp>2016-03-18T18:36:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="150">{{dsc tfun | cpp/algorithm/exclusive_scan | similar to {{lc|std::partial_sum}}, excludes the ith input element from the ith sum|notes={{mark c++17}}}}</text>
      <sha1>htr09p0cf4pjfhe7gdyp7zvnb1l0y4f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc execution policy tag</title>
    <ns>10</ns>
    <id>15075</id>
    <revision>
      <id>86176</id>
      <parentid>84491</parentid>
      <timestamp>2016-06-24T17:24:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>P0336r1 renames</comment>
      <text xml:space="preserve" bytes="174">{{dsc const | cpp/algorithm/execution_policy_tag | title=seq&lt;br/&gt;par&lt;br/&gt;par_unseq| global execution policy objects|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>sn94pu09e4p4lo1rurbhq4ubaq6kbgp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc execution policy tag t</title>
    <ns>10</ns>
    <id>15074</id>
    <revision>
      <id>86179</id>
      <parentid>86177</parentid>
      <timestamp>2016-06-24T17:26:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="211">{{dsc class | cpp/algorithm/execution_policy_tag_t | title=sequenced_policy&lt;br/&gt;parallel_policy&lt;br/&gt;parallel_unsequenced_policy | execution policy types|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>rxdk2dhe9w8h886c18qnwmqzs7hdxg5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc fill</title>
    <ns>10</ns>
    <id>1839</id>
    <revision>
      <id>89094</id>
      <parentid>54491</parentid>
      <timestamp>2016-12-29T16:29:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>harmonizing with generate and rewording a bit</comment>
      <text xml:space="preserve" bytes="93">{{dsc tfun | cpp/algorithm/fill | copy-assigns the given value to every element in a range }}</text>
      <sha1>167clw7o4q8p6rw31lax3x6bfe5qcnw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc fill n</title>
    <ns>10</ns>
    <id>1840</id>
    <revision>
      <id>89093</id>
      <parentid>54494</parentid>
      <timestamp>2016-12-29T16:29:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>harmonizing with generate and rewording a bit</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/algorithm/fill_n | copy-assigns the given value to N elements in a range}}</text>
      <sha1>59ru5t95nej1boqsbete0hn2a6779l5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc find</title>
    <ns>10</ns>
    <id>1841</id>
    <revision>
      <id>54498</id>
      <parentid>52157</parentid>
      <timestamp>2013-06-01T05:13:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list find]] to [[Template:cpp/algorithm/dsc find]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc tfun | cpp/algorithm/find | title=find&lt;br&gt;find_if&lt;br&gt;find_if_not | finds the first element satisfying specific criteria | notes=&lt;br&gt;&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc find end</title>
    <ns>10</ns>
    <id>1842</id>
    <revision>
      <id>54500</id>
      <parentid>52158</parentid>
      <timestamp>2013-06-01T05:13:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list find end]] to [[Template:cpp/algorithm/dsc find end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc tfun | cpp/algorithm/find_end | finds the last sequence of elements in a certain range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc find first of</title>
    <ns>10</ns>
    <id>1843</id>
    <revision>
      <id>54503</id>
      <parentid>52159</parentid>
      <timestamp>2013-06-01T05:13:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list find first of]] to [[Template:cpp/algorithm/dsc find first of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc tfun | cpp/algorithm/find_first_of | searches for any one of a set of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc for each</title>
    <ns>10</ns>
    <id>1844</id>
    <revision>
      <id>54509</id>
      <parentid>52160</parentid>
      <timestamp>2013-06-01T05:13:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list for each]] to [[Template:cpp/algorithm/dsc for each]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc tfun | cpp/algorithm/for_each | applies a function to a range of elements}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc for each n</title>
    <ns>10</ns>
    <id>15067</id>
    <revision>
      <id>84482</id>
      <timestamp>2016-03-18T18:35:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/algorithm/for_each_n | applies a function object to the first n elements of a sequence |notes={{mark c++17}}}}</text>
      <sha1>d9yzj650ee0ba3hmbbmdczzh1vjuwqx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc generate</title>
    <ns>10</ns>
    <id>1845</id>
    <revision>
      <id>89096</id>
      <parentid>54513</parentid>
      <timestamp>2016-12-29T16:29:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>harmonizing with fill and rewording a bit</comment>
      <text xml:space="preserve" bytes="116">{{dsc tfun | cpp/algorithm/generate | assigns the results of successive function calls to every element in a range}}</text>
      <sha1>dqcbx6lckgmfmiwm7e48j6u5lcvvgr0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc generate n</title>
    <ns>10</ns>
    <id>1846</id>
    <revision>
      <id>89095</id>
      <parentid>54517</parentid>
      <timestamp>2016-12-29T16:29:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>harmonizing with fill and rewording a bit</comment>
      <text xml:space="preserve" bytes="115">{{dsc tfun | cpp/algorithm/generate_n | assigns the results of successive function calls to N elements in a range}}</text>
      <sha1>95ka7mppxcfgpp2zv20hq3qijnunk6i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc includes</title>
    <ns>10</ns>
    <id>1847</id>
    <revision>
      <id>54520</id>
      <parentid>52163</parentid>
      <timestamp>2013-06-01T05:13:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list includes]] to [[Template:cpp/algorithm/dsc includes]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc tfun | cpp/algorithm/includes | returns true if one set is a subset of another }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc inclusive scan</title>
    <ns>10</ns>
    <id>15070</id>
    <revision>
      <id>84485</id>
      <timestamp>2016-03-18T18:37:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="148">{{dsc tfun | cpp/algorithm/inclusive_scan | similar to {{lc|std::partial_sum}}, includes the ith input element in the ith sum|notes={{mark c++17}}}}</text>
      <sha1>laxf1o4chzvbkj6cryre3elr4t8kt1j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc inner product</title>
    <ns>10</ns>
    <id>1848</id>
    <revision>
      <id>54526</id>
      <parentid>52164</parentid>
      <timestamp>2013-06-01T05:13:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list inner product]] to [[Template:cpp/algorithm/dsc inner product]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc tfun | cpp/algorithm/inner_product | computes the inner product of two ranges of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc inplace merge</title>
    <ns>10</ns>
    <id>1849</id>
    <revision>
      <id>54529</id>
      <parentid>52165</parentid>
      <timestamp>2013-06-01T05:13:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list inplace merge]] to [[Template:cpp/algorithm/dsc inplace merge]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc tfun | cpp/algorithm/inplace_merge | merges two ordered ranges in-place }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc iota</title>
    <ns>10</ns>
    <id>2436</id>
    <revision>
      <id>54531</id>
      <parentid>52166</parentid>
      <timestamp>2013-06-01T05:14:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list iota]] to [[Template:cpp/algorithm/dsc iota]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc tfun | cpp/algorithm/iota | fills a range with successive increments of the starting value | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc is execution policy</title>
    <ns>10</ns>
    <id>15077</id>
    <revision>
      <id>84493</id>
      <timestamp>2016-03-18T18:41:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc tclass | cpp/algorithm/is_execution_policy | test whether a class represents an execution policy|notes={{mark c++17}}}}</text>
      <sha1>7x64l4efkoskel72ni1evjrk7bgr6oy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc is heap</title>
    <ns>10</ns>
    <id>1850</id>
    <revision>
      <id>66011</id>
      <parentid>63741</parentid>
      <timestamp>2013-10-21T05:21:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++11</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/algorithm/is_heap | checks if the given range is a max heap| notes={{mark c++11}} }}</text>
      <sha1>0521c5c3rk6gs6ptjfm1r7mqp7v2w0n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc is heap until</title>
    <ns>10</ns>
    <id>1851</id>
    <revision>
      <id>63742</id>
      <parentid>54536</parentid>
      <timestamp>2013-07-23T19:55:23Z</timestamp>
      <contributor>
        <username>Extensive</username>
        <id>1328</id>
      </contributor>
      <comment>&quot;heap&quot; --&gt; &quot;max heap&quot;, cf. talk:cpp/algorithm/notes heap</comment>
      <text xml:space="preserve" bytes="113">{{dsc tfun | cpp/algorithm/is_heap_until | finds the largest subrange that is a max heap | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc is partitioned</title>
    <ns>10</ns>
    <id>2434</id>
    <revision>
      <id>54538</id>
      <parentid>52169</parentid>
      <timestamp>2013-06-01T05:14:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list is partitioned]] to [[Template:cpp/algorithm/dsc is partitioned]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/algorithm/is_partitioned | determines if the range is partitioned by the given predicate | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc is permutation</title>
    <ns>10</ns>
    <id>2431</id>
    <revision>
      <id>54540</id>
      <parentid>52170</parentid>
      <timestamp>2013-06-01T05:14:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list is permutation]] to [[Template:cpp/algorithm/dsc is permutation]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/algorithm/is_permutation | determines if a sequence is a permutation of another sequence | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc is sorted</title>
    <ns>10</ns>
    <id>1852</id>
    <revision>
      <id>54542</id>
      <parentid>52171</parentid>
      <timestamp>2013-06-01T05:14:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list is sorted]] to [[Template:cpp/algorithm/dsc is sorted]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc tfun | cpp/algorithm/is_sorted | checks whether a range is sorted into ascending order | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc is sorted until</title>
    <ns>10</ns>
    <id>1853</id>
    <revision>
      <id>54544</id>
      <parentid>52172</parentid>
      <timestamp>2013-06-01T05:14:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list is sorted until]] to [[Template:cpp/algorithm/dsc is sorted until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc tfun | cpp/algorithm/is_sorted_until | finds the largest sorted subrange | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc iter swap</title>
    <ns>10</ns>
    <id>1854</id>
    <revision>
      <id>54546</id>
      <parentid>52173</parentid>
      <timestamp>2013-06-01T05:14:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list iter swap]] to [[Template:cpp/algorithm/dsc iter swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc tfun | cpp/algorithm/iter_swap | swaps the elements pointed to by two iterators }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc lexicographical compare</title>
    <ns>10</ns>
    <id>1855</id>
    <revision>
      <id>54548</id>
      <parentid>52174</parentid>
      <timestamp>2013-06-01T05:14:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list lexicographical compare]] to [[Template:cpp/algorithm/dsc lexicographical compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc tfun | cpp/algorithm/lexicographical_compare | returns true if one range is lexicographically less than another }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc lower bound</title>
    <ns>10</ns>
    <id>1856</id>
    <revision>
      <id>54550</id>
      <parentid>52175</parentid>
      <timestamp>2013-06-01T05:14:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list lower bound]] to [[Template:cpp/algorithm/dsc lower bound]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc tfun | cpp/algorithm/lower_bound | returns an iterator to the first element ''not less'' than the given value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc make heap</title>
    <ns>10</ns>
    <id>1857</id>
    <revision>
      <id>63743</id>
      <parentid>54552</parentid>
      <timestamp>2013-07-23T19:55:30Z</timestamp>
      <contributor>
        <username>Extensive</username>
        <id>1328</id>
      </contributor>
      <comment>&quot;heap&quot; --&gt; &quot;max heap&quot;, cf. talk:cpp/algorithm/notes heap</comment>
      <text xml:space="preserve" bytes="87">{{dsc tfun | cpp/algorithm/make_heap | creates a max heap out of a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc max</title>
    <ns>10</ns>
    <id>1858</id>
    <revision>
      <id>81078</id>
      <parentid>54554</parentid>
      <timestamp>2015-09-28T01:00:04Z</timestamp>
      <contributor>
        <ip>174.21.177.152</ip>
      </contributor>
      <comment>Changed to match the (more accurate) description used on the main article</comment>
      <text xml:space="preserve" bytes="75">{{dsc tfun | cpp/algorithm/max | returns the greater of the given values }}</text>
      <sha1>86x86nn9cbpodjkhdzympui718hlsbc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc max element</title>
    <ns>10</ns>
    <id>1859</id>
    <revision>
      <id>54558</id>
      <parentid>52178</parentid>
      <timestamp>2013-06-01T05:14:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list max element]] to [[Template:cpp/algorithm/dsc max element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc tfun | cpp/algorithm/max_element | returns the largest element in a range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc merge</title>
    <ns>10</ns>
    <id>1860</id>
    <revision>
      <id>54564</id>
      <parentid>52179</parentid>
      <timestamp>2013-06-01T05:14:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list merge]] to [[Template:cpp/algorithm/dsc merge]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">{{dsc tfun | cpp/algorithm/merge | merges two sorted ranges }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc min</title>
    <ns>10</ns>
    <id>1861</id>
    <revision>
      <id>81077</id>
      <parentid>54568</parentid>
      <timestamp>2015-09-28T00:57:59Z</timestamp>
      <contributor>
        <ip>174.21.177.152</ip>
      </contributor>
      <comment>Changed to match the (more accurate) description used on the main article</comment>
      <text xml:space="preserve" bytes="75">{{dsc tfun | cpp/algorithm/min | returns the smaller of the given values }}</text>
      <sha1>natnjulbt9rycitzxdcz9dcco84fgcc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc min element</title>
    <ns>10</ns>
    <id>1862</id>
    <revision>
      <id>54571</id>
      <parentid>52181</parentid>
      <timestamp>2013-06-01T05:14:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list min element]] to [[Template:cpp/algorithm/dsc min element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc tfun | cpp/algorithm/min_element | returns the smallest element in a range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc minmax</title>
    <ns>10</ns>
    <id>2429</id>
    <revision>
      <id>85257</id>
      <parentid>54574</parentid>
      <timestamp>2016-04-12T19:02:09Z</timestamp>
      <contributor>
        <username>Murrayc</username>
        <id>5228</id>
      </contributor>
      <comment>&quot;larger and smaller&quot; suggested that smaller was first in the pair, but it's the other way around.</comment>
      <text xml:space="preserve" bytes="108">{{dsc tfun | cpp/algorithm/minmax | returns the smaller and larger of two elements | notes={{mark c++11}} }}</text>
      <sha1>6ff6v2fmwhdwzgei7zcvkywqe84ebb2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc minmax element</title>
    <ns>10</ns>
    <id>2430</id>
    <revision>
      <id>85258</id>
      <parentid>54576</parentid>
      <timestamp>2016-04-12T19:03:47Z</timestamp>
      <contributor>
        <username>Murrayc</username>
        <id>5228</id>
      </contributor>
      <comment>minor typo</comment>
      <text xml:space="preserve" bytes="125">{{dsc tfun | cpp/algorithm/minmax_element | returns the smallest and the largest elements in a range |notes={{mark c++11}} }}</text>
      <sha1>6gyzrbe58fbfqa774yji3obqwm9yb9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc mismatch</title>
    <ns>10</ns>
    <id>1863</id>
    <revision>
      <id>54579</id>
      <parentid>52184</parentid>
      <timestamp>2013-06-01T05:14:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list mismatch]] to [[Template:cpp/algorithm/dsc mismatch]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc tfun | cpp/algorithm/mismatch | finds the first position where two ranges differ }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc move</title>
    <ns>10</ns>
    <id>2432</id>
    <revision>
      <id>54585</id>
      <parentid>52185</parentid>
      <timestamp>2013-06-01T05:14:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list move]] to [[Template:cpp/algorithm/dsc move]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc tfun | cpp/algorithm/move | moves a range of elements to a new location | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc move backward</title>
    <ns>10</ns>
    <id>2433</id>
    <revision>
      <id>54590</id>
      <parentid>52186</parentid>
      <timestamp>2013-06-01T05:14:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list move backward]] to [[Template:cpp/algorithm/dsc move backward]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/algorithm/move_backward | moves a range of elements to a new location in backwards order | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc next permutation</title>
    <ns>10</ns>
    <id>1864</id>
    <revision>
      <id>54594</id>
      <parentid>52187</parentid>
      <timestamp>2013-06-01T05:14:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list next permutation]] to [[Template:cpp/algorithm/dsc next permutation]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc tfun | cpp/algorithm/next_permutation | generates the next greater lexicographic permutation of a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc nth element</title>
    <ns>10</ns>
    <id>1865</id>
    <revision>
      <id>54600</id>
      <parentid>52188</parentid>
      <timestamp>2013-06-01T05:14:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list nth element]] to [[Template:cpp/algorithm/dsc nth element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/algorithm/nth_element | partially sorts the given range making sure that it is partitioned by the given element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc partial sort</title>
    <ns>10</ns>
    <id>1866</id>
    <revision>
      <id>54603</id>
      <parentid>52189</parentid>
      <timestamp>2013-06-01T05:14:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list partial sort]] to [[Template:cpp/algorithm/dsc partial sort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc tfun | cpp/algorithm/partial_sort | sorts the first N elements of a range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc partial sort copy</title>
    <ns>10</ns>
    <id>1867</id>
    <revision>
      <id>54607</id>
      <parentid>52190</parentid>
      <timestamp>2013-06-01T05:14:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list partial sort copy]] to [[Template:cpp/algorithm/dsc partial sort copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc tfun | cpp/algorithm/partial_sort_copy | copies and partially sorts a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc partial sum</title>
    <ns>10</ns>
    <id>1868</id>
    <revision>
      <id>54609</id>
      <parentid>52191</parentid>
      <timestamp>2013-06-01T05:14:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list partial sum]] to [[Template:cpp/algorithm/dsc partial sum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/algorithm/partial_sum | computes the partial sum of a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc partition</title>
    <ns>10</ns>
    <id>1869</id>
    <revision>
      <id>54612</id>
      <parentid>52192</parentid>
      <timestamp>2013-06-01T05:14:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list partition]] to [[Template:cpp/algorithm/dsc partition]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc tfun | cpp/algorithm/partition | divides a range of elements into two groups }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc partition copy</title>
    <ns>10</ns>
    <id>2514</id>
    <revision>
      <id>54618</id>
      <parentid>52193</parentid>
      <timestamp>2013-06-01T05:14:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list partition copy]] to [[Template:cpp/algorithm/dsc partition copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc tfun | cpp/algorithm/partition_copy | copies a range dividing the elements into two groups | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc partition point</title>
    <ns>10</ns>
    <id>2435</id>
    <revision>
      <id>54621</id>
      <parentid>52194</parentid>
      <timestamp>2013-06-01T05:14:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list partition point]] to [[Template:cpp/algorithm/dsc partition point]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc tfun | cpp/algorithm/partition_point | locates the partition point of a partitioned range | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc pop heap</title>
    <ns>10</ns>
    <id>1870</id>
    <revision>
      <id>63744</id>
      <parentid>54626</parentid>
      <timestamp>2013-07-23T19:55:46Z</timestamp>
      <contributor>
        <username>Extensive</username>
        <id>1328</id>
      </contributor>
      <comment>&quot;heap&quot; --&gt; &quot;max heap&quot;, cf. talk:cpp/algorithm/notes heap</comment>
      <text xml:space="preserve" bytes="84">{{dsc tfun | cpp/algorithm/pop_heap | removes the largest element from a max heap }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc prev permutation</title>
    <ns>10</ns>
    <id>1871</id>
    <revision>
      <id>54629</id>
      <parentid>52196</parentid>
      <timestamp>2013-06-01T05:15:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list prev permutation]] to [[Template:cpp/algorithm/dsc prev permutation]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc tfun | cpp/algorithm/prev_permutation | generates the next smaller lexicographic permutation of a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc push heap</title>
    <ns>10</ns>
    <id>1872</id>
    <revision>
      <id>63745</id>
      <parentid>54633</parentid>
      <timestamp>2013-07-23T19:55:57Z</timestamp>
      <contributor>
        <username>Extensive</username>
        <id>1328</id>
      </contributor>
      <comment>&quot;heap&quot; --&gt; &quot;max heap&quot;, cf. talk:cpp/algorithm/notes heap</comment>
      <text xml:space="preserve" bytes="71">{{dsc tfun | cpp/algorithm/push_heap | adds an element to a max heap }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc qsort</title>
    <ns>10</ns>
    <id>1873</id>
    <revision>
      <id>54637</id>
      <parentid>52198</parentid>
      <timestamp>2013-06-01T05:15:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list qsort]] to [[Template:cpp/algorithm/dsc qsort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc fun | cpp/algorithm/qsort | sorts a range of elements with unspecified type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc random shuffle</title>
    <ns>10</ns>
    <id>1874</id>
    <revision>
      <id>73957</id>
      <parentid>54643</parentid>
      <timestamp>2014-11-24T20:33:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>random_shuffle gone in c++17</comment>
      <text xml:space="preserve" bytes="166">{{dsc tfun | cpp/algorithm/random_shuffle | randomly re-orders elements in a range | title=random_shuffle&lt;br&gt;shuffle | notes={{mark until c++17}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1>d6fw06pr90dock2v096n62rl55awcae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc reduce</title>
    <ns>10</ns>
    <id>15068</id>
    <revision>
      <id>84483</id>
      <timestamp>2016-03-18T18:36:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc tfun | cpp/algorithm/reduce | similar to {{lc|std::accumulate}}, except out of order |notes={{mark c++17}}}}</text>
      <sha1>a26elbm16nbv50iesml3is2mbw98td9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc remove</title>
    <ns>10</ns>
    <id>1875</id>
    <revision>
      <id>54646</id>
      <parentid>52200</parentid>
      <timestamp>2013-06-01T05:15:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list remove]] to [[Template:cpp/algorithm/dsc remove]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc tfun | cpp/algorithm/remove | title=remove&lt;br&gt;remove_if | removes elements satisfying specific criteria }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc remove copy</title>
    <ns>10</ns>
    <id>1876</id>
    <revision>
      <id>54651</id>
      <parentid>52201</parentid>
      <timestamp>2013-06-01T05:15:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list remove copy]] to [[Template:cpp/algorithm/dsc remove copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc tfun | cpp/algorithm/remove_copy | title=remove_copy&lt;br&gt;remove_copy_if | copies a range of elements omitting those that satisfy specific criteria }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc replace</title>
    <ns>10</ns>
    <id>1877</id>
    <revision>
      <id>54655</id>
      <parentid>52202</parentid>
      <timestamp>2013-06-01T05:15:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list replace]] to [[Template:cpp/algorithm/dsc replace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc tfun | cpp/algorithm/replace | title=replace&lt;br&gt;replace_if| replaces all values satisfying specific criteria with another value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc replace copy</title>
    <ns>10</ns>
    <id>1878</id>
    <revision>
      <id>54659</id>
      <parentid>52203</parentid>
      <timestamp>2013-06-01T05:15:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list replace copy]] to [[Template:cpp/algorithm/dsc replace copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="167">{{dsc tfun | cpp/algorithm/replace_copy | title=replace_copy&lt;br&gt;replace_copy_if | copies a range, replacing elements satisfying specific criteria with another value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc reverse</title>
    <ns>10</ns>
    <id>1879</id>
    <revision>
      <id>79632</id>
      <parentid>54665</parentid>
      <timestamp>2015-07-15T19:21:03Z</timestamp>
      <contributor>
        <username>Crayzeewulf</username>
        <id>4273</id>
      </contributor>
      <minor/>
      <comment>Adding a missing &quot;of&quot; in the description.</comment>
      <text xml:space="preserve" bytes="81">{{dsc tfun | cpp/algorithm/reverse | reverses the order of elements in a range }}</text>
      <sha1>db6f1n44o2rkznw87auvnns14bmdr12</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc reverse copy</title>
    <ns>10</ns>
    <id>1880</id>
    <revision>
      <id>54668</id>
      <parentid>52205</parentid>
      <timestamp>2013-06-01T05:15:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list reverse copy]] to [[Template:cpp/algorithm/dsc reverse copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc tfun | cpp/algorithm/reverse_copy | creates a copy of a range that is reversed }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc rotate</title>
    <ns>10</ns>
    <id>1881</id>
    <revision>
      <id>54674</id>
      <parentid>52206</parentid>
      <timestamp>2013-06-01T05:15:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list rotate]] to [[Template:cpp/algorithm/dsc rotate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc tfun | cpp/algorithm/rotate | rotates the order of elements in a range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc rotate copy</title>
    <ns>10</ns>
    <id>1882</id>
    <revision>
      <id>54676</id>
      <parentid>52207</parentid>
      <timestamp>2013-06-01T05:15:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list rotate copy]] to [[Template:cpp/algorithm/dsc rotate copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc tfun | cpp/algorithm/rotate_copy | copies and rotate a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc sample</title>
    <ns>10</ns>
    <id>14803</id>
    <revision>
      <id>84038</id>
      <timestamp>2016-03-14T18:38:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/algorithm/sample | selects n random elements from a sequence|notes={{mark c++17}} }}</text>
      <sha1>gbryaqy2f3kyc2fg6txmnhisxlxk08c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc search</title>
    <ns>10</ns>
    <id>1883</id>
    <revision>
      <id>54683</id>
      <parentid>52208</parentid>
      <timestamp>2013-06-01T05:15:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list search]] to [[Template:cpp/algorithm/dsc search]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc tfun | cpp/algorithm/search | searches for a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc search n</title>
    <ns>10</ns>
    <id>1884</id>
    <revision>
      <id>54686</id>
      <parentid>52209</parentid>
      <timestamp>2013-06-01T05:15:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list search n]] to [[Template:cpp/algorithm/dsc search n]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc tfun | cpp/algorithm/search_n | searches for a number consecutive copies of an element in a range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc set difference</title>
    <ns>10</ns>
    <id>1885</id>
    <revision>
      <id>54691</id>
      <parentid>52210</parentid>
      <timestamp>2013-06-01T05:15:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list set difference]] to [[Template:cpp/algorithm/dsc set difference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc tfun | cpp/algorithm/set_difference | computes the difference between two sets }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc set intersection</title>
    <ns>10</ns>
    <id>1886</id>
    <revision>
      <id>54693</id>
      <parentid>52211</parentid>
      <timestamp>2013-06-01T05:15:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list set intersection]] to [[Template:cpp/algorithm/dsc set intersection]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc tfun | cpp/algorithm/set_intersection | computes the intersection of two sets }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc set symmetric difference</title>
    <ns>10</ns>
    <id>1887</id>
    <revision>
      <id>54695</id>
      <parentid>52212</parentid>
      <timestamp>2013-06-01T05:15:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list set symmetric difference]] to [[Template:cpp/algorithm/dsc set symmetric difference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/algorithm/set_symmetric_difference | computes the symmetric difference between two sets }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc set union</title>
    <ns>10</ns>
    <id>1888</id>
    <revision>
      <id>54698</id>
      <parentid>52213</parentid>
      <timestamp>2013-06-01T05:15:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list set union]] to [[Template:cpp/algorithm/dsc set union]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc tfun | cpp/algorithm/set_union | computes the union of two sets }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc sort</title>
    <ns>10</ns>
    <id>1889</id>
    <revision>
      <id>54700</id>
      <parentid>52214</parentid>
      <timestamp>2013-06-01T05:15:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list sort]] to [[Template:cpp/algorithm/dsc sort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc tfun | cpp/algorithm/sort | sorts a range into ascending order }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc sort heap</title>
    <ns>10</ns>
    <id>1890</id>
    <revision>
      <id>63748</id>
      <parentid>54705</parentid>
      <timestamp>2013-07-23T19:57:47Z</timestamp>
      <contributor>
        <username>Extensive</username>
        <id>1328</id>
      </contributor>
      <comment>&quot;heap&quot; --&gt; &quot;max heap&quot;, cf. talk:cpp/algorithm/notes heap</comment>
      <text xml:space="preserve" bytes="109">{{dsc tfun | cpp/algorithm/sort_heap | turns a max heap into a range of elements sorted in ascending order }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc stable partition</title>
    <ns>10</ns>
    <id>1891</id>
    <revision>
      <id>54709</id>
      <parentid>52216</parentid>
      <timestamp>2013-06-01T05:15:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list stable partition]] to [[Template:cpp/algorithm/dsc stable partition]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc tfun | cpp/algorithm/stable_partition | divides elements into two groups while preserving their relative order }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc stable sort</title>
    <ns>10</ns>
    <id>1892</id>
    <revision>
      <id>54714</id>
      <parentid>52217</parentid>
      <timestamp>2013-06-01T05:15:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list stable sort]] to [[Template:cpp/algorithm/dsc stable sort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc tfun | cpp/algorithm/stable_sort | sorts a range of elements while preserving order between equal elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc swap</title>
    <ns>10</ns>
    <id>1893</id>
    <revision>
      <id>54720</id>
      <parentid>52218</parentid>
      <timestamp>2013-06-01T05:16:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list swap]] to [[Template:cpp/algorithm/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc tfun | cpp/algorithm/swap | swaps the values of two objects }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc swap ranges</title>
    <ns>10</ns>
    <id>1894</id>
    <revision>
      <id>54724</id>
      <parentid>52219</parentid>
      <timestamp>2013-06-01T05:16:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list swap ranges]] to [[Template:cpp/algorithm/dsc swap ranges]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc tfun | cpp/algorithm/swap_ranges | swaps two ranges of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc transform</title>
    <ns>10</ns>
    <id>1895</id>
    <revision>
      <id>54729</id>
      <parentid>52220</parentid>
      <timestamp>2013-06-01T05:16:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list transform]] to [[Template:cpp/algorithm/dsc transform]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc tfun | cpp/algorithm/transform | applies a function to a range of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc transform exclusive scan</title>
    <ns>10</ns>
    <id>15072</id>
    <revision>
      <id>84487</id>
      <timestamp>2016-03-18T18:38:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/algorithm/transform_exclusive_scan | applies a functor, then calculates exclusive scan|notes={{mark c++17}} }}</text>
      <sha1>fkpvy1mroek1yx2e6erhi3fgj2qv67q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc transform inclusive scan</title>
    <ns>10</ns>
    <id>15073</id>
    <revision>
      <id>84488</id>
      <timestamp>2016-03-18T18:39:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc tfun | cpp/algorithm/transform_inclusive_scan | applies a functor, then calculates inclusive scan|notes={{mark c++17}}}}</text>
      <sha1>83emt45zxop4sivx5kn907x67ine9n3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc transform reduce</title>
    <ns>10</ns>
    <id>15071</id>
    <revision>
      <id>84486</id>
      <timestamp>2016-03-18T18:38:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc tfun | cpp/algorithm/transform_reduce | applies a functor, then reduces out of order |notes={{mark c++17}}}}</text>
      <sha1>q4arwz2okkzluiqe9hubcntdpqijwgr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc unique</title>
    <ns>10</ns>
    <id>1896</id>
    <revision>
      <id>54735</id>
      <parentid>52221</parentid>
      <timestamp>2013-06-01T05:16:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list unique]] to [[Template:cpp/algorithm/dsc unique]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc tfun | cpp/algorithm/unique | removes consecutive duplicate elements in a range }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc unique copy</title>
    <ns>10</ns>
    <id>1897</id>
    <revision>
      <id>54739</id>
      <parentid>52222</parentid>
      <timestamp>2013-06-01T05:16:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list unique copy]] to [[Template:cpp/algorithm/dsc unique copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc tfun | cpp/algorithm/unique_copy | creates a copy of some range of elements that contains no consecutive duplicates }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/dsc upper bound</title>
    <ns>10</ns>
    <id>1898</id>
    <revision>
      <id>54742</id>
      <parentid>52223</parentid>
      <timestamp>2013-06-01T05:16:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/dcl list upper bound]] to [[Template:cpp/algorithm/dsc upper bound]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc tfun | cpp/algorithm/upper_bound | returns an iterator to the first element ''greater'' than a certain value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/execution/title</title>
    <ns>10</ns>
    <id>15530</id>
    <revision>
      <id>86182</id>
      <timestamp>2016-06-24T17:33:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=execution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}} | {{{4|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>69siqsx3rtnp9yian55c7mk50j9e2hn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/minmax danger note</title>
    <ns>10</ns>
    <id>14473</id>
    <revision>
      <id>83903</id>
      <parentid>81062</parentid>
      <timestamp>2016-03-13T18:37:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>accomodate clamp</comment>
      <text xml:space="preserve" bytes="346">Capturing the result of {{tt|std::{{{1|}}}}} by reference if one of the parameters is rvalue produces a dangling reference if that parameter is returned:
{{#ifeq:{{{1|}}}|clamp|
{{source|1=
int n = -1;
const int&amp; r = std::clamp(n, 0, 255);
// r is dangling
}}
|
{{source|1=
int n = 1;
const int&amp; r = std::{{{1}}}(n-1, n+1);
// r is dangling
}}
}}</text>
      <sha1>j8422cyeuzzoju7ie80lr7lgvcp773w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/navbar</title>
    <ns>10</ns>
    <id>1900</id>
    <revision>
      <id>39858</id>
      <parentid>35527</parentid>
      <timestamp>2012-09-28T19:56:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="158">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/algorithm/navbar heading
|content2 = cpp/algorithm/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/navbar content</title>
    <ns>10</ns>
    <id>1901</id>
    <revision>
      <id>87315</id>
      <parentid>86184</parentid>
      <timestamp>2016-08-10T15:45:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+uninit moves to match copies and fills</comment>
      <text xml:space="preserve" bytes="6529">{{nv begin}}
{{nv h2 | Execution policies {{mark c++17}}}}
{{nv col begin}}
{{nv ln | cpp/algorithm/is_execution_policy}}
{{nv col next}}
{{nv ln | cpp/algorithm/execution_policy_tag|execution::seq|execution::par|execution::par_unseq}}
{{nv col next}}
{{nv ln | cpp/algorithm/execution_policy_tag_t|execution::sequenced_policy|execution::parallel_policy|execution::parallel_unsequenced_policy}}
{{nv col end}}

{{nv h2 | Non-modifying sequence operations }}
{{nv col begin}}
{{nv ln | cpp/algorithm/all_any_none_of | all_of | any_of | none_of | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/algorithm/for_each }}
{{nv ln | cpp/algorithm/for_each_n | notes={{mark c++17}}}}
{{nv col next}}
{{nv ln | cpp/algorithm/count | count | count_if}}
{{nv ln | cpp/algorithm/mismatch }}
{{nv ln | cpp/algorithm/equal }}
{{nv ln | cpp/algorithm/lexicographical_compare }}
{{nv col next}}
{{nv ln | cpp/algorithm/find | find | find_if | find_if_not | notes=&lt;br&gt;&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/algorithm/find_end }}
{{nv ln | cpp/algorithm/find_first_of }}
{{nv col next}}
{{nv ln | cpp/algorithm/adjacent_find }}
{{nv ln | cpp/algorithm/search }}
{{nv ln | cpp/algorithm/search_n }}
{{nv ph}}
{{nv ph}}
{{nv col end}}

{{nv h2 | Modifying sequence operations }}
{{nv col begin}}
{{nv ln | cpp/algorithm/copy | copy | copy_if | notes=&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/algorithm/copy_n | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/copy_backward }}
{{nv ln | cpp/algorithm/move | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/move_backward | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/transform }}
{{nv ph}}
{{nv col next}}
{{nv ln | cpp/algorithm/fill }}
{{nv ln | cpp/algorithm/fill_n }}
{{nv ln | cpp/algorithm/generate }}
{{nv ln | cpp/algorithm/generate_n }}
{{nv ln | cpp/algorithm/swap }}
{{nv ln | cpp/algorithm/iter_swap }}
{{nv ln | cpp/algorithm/swap_ranges }}
{{nv ln | cpp/algorithm/sample|notes={{mark c++17}}}}
{{nv col next}}
{{nv ln | cpp/algorithm/remove | remove | remove_if}}
{{nv ln | cpp/algorithm/replace | replace | replace_if}}
{{nv ln | cpp/algorithm/reverse }}
{{nv ln | cpp/algorithm/rotate }}
{{nv ln | cpp/algorithm/unique }}
{{nv ln | cpp/algorithm/random_shuffle| notes={{mark until c++17}} }}

{{nv col next}}
{{nv ln | cpp/algorithm/remove_copy | remove_copy | remove_copy_if}}
{{nv ln | cpp/algorithm/replace_copy | replace_copy | replace_copy_if}}
{{nv ln | cpp/algorithm/reverse_copy }}
{{nv ln | cpp/algorithm/rotate_copy }}
{{nv ln | cpp/algorithm/unique_copy }}
{{nv ln | cpp/algorithm/random_shuffle | shuffle | notes={{mark c++11}} }}
{{nv col end}}
{{nv h2 | Operations on uninitialized storage }}
{{nv col begin}}
{{nv ln | cpp/memory/uninitialized_copy }}
{{nv ln | cpp/memory/uninitialized_move|notes={{mark c++17}} }}
{{nv col next}}
{{nv ln | cpp/memory/uninitialized_copy_n|notes={{mark c++11}} }}
{{nv ln | cpp/memory/uninitialized_move_n|notes={{mark c++17}} }}
{{nv col next}}
{{nv ln | cpp/memory/uninitialized_fill }}
{{nv col next}}
{{nv ln | cpp/memory/uninitialized_fill_n }}
{{nv col end}}
{{nv h2 | Partitioning operations}}
{{nv col begin}}
{{nv ln | cpp/algorithm/is_partitioned | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/partition_point | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/algorithm/partition}}
{{nv ln | cpp/algorithm/partition_copy | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/algorithm/stable_partition }}
{{nv ph}}
{{nv col end}}

{{nv h2 | Sorting operations }}
{{nv col begin}}
{{nv ln | cpp/algorithm/is_sorted | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/is_sorted_until | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/algorithm/sort }}
{{nv ln | cpp/algorithm/stable_sort }}
{{nv col next}}
{{nv ln | cpp/algorithm/partial_sort }}
{{nv ln | cpp/algorithm/partial_sort_copy }}
{{nv col next}}
{{nv ln | cpp/algorithm/nth_element }}
{{nv ph}}
{{nv col end}}

{{nv h2 | Binary search operations}}
{{nv col begin}}
{{nv ln | cpp/algorithm/lower_bound }}
{{nv col next}}
{{nv ln | cpp/algorithm/upper_bound }}
{{nv col next}}
{{nv ln | cpp/algorithm/binary_search }}
{{nv col next}}
{{nv ln | cpp/algorithm/equal_range }}
{{nv col end}}

{{nv h2 | Set operations (on sorted ranges) }}
{{nv col begin}}
{{nv ln | cpp/algorithm/merge }}
{{nv ln | cpp/algorithm/inplace_merge }}
{{nv col next}}
{{nv ln | cpp/algorithm/set_difference }}
{{nv ln | cpp/algorithm/set_intersection }}
{{nv col next}}
{{nv ln | cpp/algorithm/set_symmetric_difference }}
{{nv ln | cpp/algorithm/set_union }}
{{nv col next}}
{{nv ln | cpp/algorithm/includes }}
{{nv ph}}
{{nv col end}}

{{nv h2 | Heap operations }}
{{nv col begin}}
{{nv ln | cpp/algorithm/is_heap | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/is_heap_until | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/algorithm/make_heap }}
{{nv ln | cpp/algorithm/sort_heap }}
{{nv col next}}
{{nv ln | cpp/algorithm/push_heap }}
{{nv ln | cpp/algorithm/pop_heap }}
{{nv col end}}

{{nv h2 | Minimum/maximum operations }}
{{nv col begin}}
{{nv ln | cpp/algorithm/max }}
{{nv ln | cpp/algorithm/max_element }}
{{nv col next}}
{{nv ln | cpp/algorithm/min }}
{{nv ln | cpp/algorithm/min_element }}
{{nv col next}}
{{nv ln | cpp/algorithm/minmax | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/minmax_element | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/algorithm/clamp | notes={{mark c++17}}}}
{{nv ph}}
{{nv col end}}
{{nv h2 | Permutations }}
{{nv col begin}}
{{nv ln | cpp/algorithm/is_permutation | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/algorithm/next_permutation }}
{{nv col next}}
{{nv ln | cpp/algorithm/prev_permutation }}
{{nv col end}}
{{nv h2 | Numeric operations }}
{{nv col begin}}
{{nv ln | cpp/algorithm/iota | notes={{mark c++11}}}}
{{nv ln | cpp/algorithm/inner_product }}
{{nv ln | cpp/algorithm/adjacent_difference }}
{{nv col next}}
{{nv ln | cpp/algorithm/accumulate }}
{{nv ln | cpp/algorithm/reduce|notes={{mark c++17}} }}
{{nv ln | cpp/algorithm/transform_reduce|notes={{mark c++17}} }}
{{nv col next}}
{{nv ln | cpp/algorithm/partial_sum }}
{{nv ln | cpp/algorithm/inclusive_scan|notes={{mark c++17}} }}
{{nv ln | cpp/algorithm/exclusive_scan|notes={{mark c++17}} }}
{{nv col next}}
{{nv ph}}
{{nv ln | cpp/algorithm/transform_inclusive_scan|notes={{mark c++17}} }}
{{nv ln | cpp/algorithm/transform_exclusive_scan|notes={{mark c++17}} }}
{{nv col end}}
{{nv h2 | C library }}
{{nv col begin}}
{{nv ln | cpp/algorithm/qsort }}
{{nv col next}}
{{nv ln | cpp/algorithm/bsearch }}
{{nv col end}}

{{nv end}}</text>
      <sha1>46dsrq9ax0j1ddplfi6k38637hwhhh8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/navbar heading</title>
    <ns>10</ns>
    <id>1902</id>
    <revision>
      <id>35479</id>
      <parentid>3803</parentid>
      <timestamp>2012-06-15T22:26:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/algorithm/sidebar heading]] to [[Template:cpp/algorithm/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="37">[[cpp/algorithm | Algorithm library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/notes heap</title>
    <ns>10</ns>
    <id>1899</id>
    <revision>
      <id>88244</id>
      <parentid>88243</parentid>
      <timestamp>2016-11-15T01:21:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="336">A ''max heap'' is a range of elements {{tt|[f,l)}} that has the following properties:
:* With {{tt|1=N = l - f}}, for all {{tt|0 &lt; i &lt; N}}, {{tt|f[floor({{mfrac||i-1|2}})]}} does not compare less than {{tt|f[i]}}.
:* a new element can be added using {{c|std::push_heap()}}
:* the first element can be removed using {{c|std::pop_heap()}}</text>
      <sha1>pfl6e69aai7qy4v8i1sczbe0ipa0ctc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/algorithm/parallel exceptions reporting behavior</title>
    <ns>10</ns>
    <id>15081</id>
    <revision>
      <id>88427</id>
      <parentid>86163</parentid>
      <timestamp>2016-11-18T14:43:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0502r0: only the three standard policies terminate, others might not</comment>
      <text xml:space="preserve" bytes="550">The {{#ifeq:{{{singular|no}}}|no|overloads|overload}} with a template parameter named {{tt|ExecutionPolicy}} {{#ifeq:{{{singular|no}}}|no|report|reports}} errors as follows:
*If execution of a function invoked as part of the algorithm throws an exception and {{tt|ExecutionPolicy}} is one of the three [[cpp/algorithm/execution_policy_tag_t|standard policies]], {{lc|std::terminate}} is called. For any other {{tt|ExecutionPolicy}}, the behavior is implementation-defined.
* If the algorithm fails to allocate memory, {{lc|std::bad_alloc}} is thrown.</text>
      <sha1>t503pngjx5t1p6o9co2hcc2aufnef04</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/any/title</title>
    <ns>10</ns>
    <id>14842</id>
    <revision>
      <id>84125</id>
      <timestamp>2016-03-15T15:34:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">&lt;onlyinclude&gt;{{cpp/title | n=any::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>1sxyflcbdnf0d9ny98grgbl6qy75qnr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic fetch cond example</title>
    <ns>10</ns>
    <id>10127</id>
    <revision>
      <id>48266</id>
      <parentid>48257</parentid>
      <timestamp>2013-05-21T21:58:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>rm heading</comment>
      <text xml:space="preserve" bytes="2005">{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;atomic&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
#include &lt;functional&gt;

// Binary semaphore for demonstrative purposes only
// This is a simple yet meaningful example: atomic operations
// are unnecessary without threads. 
class Semaphore {
    std::atomic_char m_signaled;
  public:
    Semaphore(bool initial = false)
    {
        m_signaled = initial;
    }
    // Block until semaphore is signaled
    void take() 
    {
        while (!std::atomic_fetch_and(&amp;m_signaled, false)) {
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }
    }

    void put() 
    {
        std::atomic_fetch_or(&amp;m_signaled, true);
    }
};

class ThreadedCounter {
    static const int N = 100;
    static const int REPORT_INTERVAL = 10;
    int m_count;
    bool m_done;
    Semaphore m_count_sem;
    Semaphore m_print_sem;

    void count_up() 
    {
        for (m_count = 1; m_count &lt;= N; m_count++) {
            if (m_count % REPORT_INTERVAL == 0) {
                if (m_count == N) m_done = true;
                m_print_sem.put(); // signal printing to occur
                m_count_sem.take(); // wait until printing is complete proceeding
            }
        }
        std::cout &lt;&lt; &quot;count_up() done\n&quot;;
        m_done = true;
        m_print_sem.put();
    }

    void print_count() 
    {
        do {
            m_print_sem.take();
            std::cout &lt;&lt; m_count &lt;&lt; '\n';
            m_count_sem.put();
        } while (!m_done);
        std::cout &lt;&lt; &quot;print_count() done\n&quot;;
    }

  public:
    ThreadedCounter() : m_done(false) {}
    void run() 
    {
        auto print_thread = std::thread(&amp;ThreadedCounter::print_count, this);
        auto count_thread = std::thread(&amp;ThreadedCounter::count_up, this);
        print_thread.join();
        count_thread.join();
    }
};

int main() 
{
    ThreadedCounter m_counter;
    m_counter.run();
}
 | output=
10
20
30
40
50
60
70
80
90
100
print_count() done
count_up() done
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic flag/dsc clear</title>
    <ns>10</ns>
    <id>2828</id>
    <revision>
      <id>54799</id>
      <parentid>52241</parentid>
      <timestamp>2013-06-01T05:16:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic flag/dcl list clear]] to [[Template:cpp/atomic/atomic flag/dsc clear]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun  | cpp/atomic/atomic_flag/clear | atomically sets flag to {{c|false}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic flag/dsc test and set</title>
    <ns>10</ns>
    <id>2829</id>
    <revision>
      <id>54805</id>
      <parentid>52242</parentid>
      <timestamp>2013-06-01T05:16:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic flag/dcl list test and set]] to [[Template:cpp/atomic/atomic flag/dsc test and set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun  | cpp/atomic/atomic_flag/test_and_set | atomically sets the flag to {{c|true}} and obtains its previous value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic flag/navbar</title>
    <ns>10</ns>
    <id>2836</id>
    <revision>
      <id>39860</id>
      <parentid>35530</parentid>
      <timestamp>2012-09-28T19:56:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/atomic/navbar heading
|content2 = cpp/atomic/navbar content

|heading3 = cpp/atomic/atomic_flag/navbar heading
|content3 = cpp/atomic/atomic_flag/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic flag/navbar content</title>
    <ns>10</ns>
    <id>2838</id>
    <revision>
      <id>52243</id>
      <parentid>35531</parentid>
      <timestamp>2013-06-01T04:42:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="253">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/atomic/atomic_flag/atomic_flag}}
{{nv mem ln | cpp/atomic/atomic_flag/operator{{=}}}}
{{nv mem ln | cpp/atomic/atomic_flag/clear}}
{{nv mem ln | cpp/atomic/atomic_flag/test_and_set}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic flag/navbar heading</title>
    <ns>10</ns>
    <id>2837</id>
    <revision>
      <id>48029</id>
      <parentid>35532</parentid>
      <timestamp>2013-05-18T17:58:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/atomic/atomic_flag|std::atomic_flag}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic flag/title</title>
    <ns>10</ns>
    <id>2814</id>
    <revision>
      <id>10685</id>
      <timestamp>2011-09-20T13:53:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=atomic_flag::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=atomic_flag::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic-vs-volatile</title>
    <ns>10</ns>
    <id>14006</id>
    <revision>
      <id>90589</id>
      <parentid>90588</parentid>
      <timestamp>2017-03-06T15:23:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>C link was already about expressions</comment>
      <text xml:space="preserve" bytes="1384">Within a thread of execution, accesses (reads and writes) through {{#ifeq:{{{1}}}|cpp|[[cpp/language/cv|volatile glvalues]]|[[c/language/volatile|volatile lvalues]]}} cannot be reordered past observable side-effects (including other volatile accesses) that are {{#ifeq:{{{1}}}|cpp|''sequenced-before'' or ''sequenced-after''|separated by a sequence point}} within the same thread, but this order is not guaranteed to be observed by another thread, since volatile access does not establish inter-thread synchronization.

In addition, volatile accesses are not atomic (concurrent read and write is a {{#ifeq:{{{1}}}|cpp|[[cpp/language/memory_model|data race]]|[[c/language/memory_model|data race]]}}) and do not order memory (non-volatile memory accesses may be freely reordered around the volatile access).

One notable exception is Visual Studio, where, with default settings, every volatile write has release semantics and every volatile read has acquire semantics ([http://msdn.microsoft.com/en-us/library/12a04hfd(v=vs.100).aspx MSDN]), and thus volatiles may be used for inter-thread synchronization. Standard {{c|volatile}} semantics are not applicable to multithreaded programming, although they are sufficient for e.g. communication with a {{#ifeq:{{{1}}}|cpp|{{lc|std::signal}}|{{lc|signal}}}} handler that runs in the same thread when applied to {{c|sig_atomic_t}} variables.</text>
      <sha1>q4qzrpzrbzgi1lfcent7qyi1ch9vohj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc compare exchange</title>
    <ns>10</ns>
    <id>6323</id>
    <revision>
      <id>54747</id>
      <parentid>52225</parentid>
      <timestamp>2013-06-01T05:16:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic/dcl list compare exchange]] to [[Template:cpp/atomic/atomic/dsc compare exchange]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="249">{{dsc mem fun  | cpp/atomic/atomic/compare_exchange | title=compare_exchange_weak&lt;br&gt;compare_exchange_strong | atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc constructor</title>
    <ns>10</ns>
    <id>6731</id>
    <revision>
      <id>54749</id>
      <parentid>52226</parentid>
      <timestamp>2013-06-01T05:16:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic/dcl list constructor]] to [[Template:cpp/atomic/atomic/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem ctor | cpp/atomic/atomic/atomic | constructs an atomic object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc exchange</title>
    <ns>10</ns>
    <id>4722</id>
    <revision>
      <id>85348</id>
      <parentid>65897</parentid>
      <timestamp>2016-04-20T21:13:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="152">{{dsc mem fun | cpp/atomic/atomic/exchange | mem={{{mem|}}} | atomically replaces the value of the atomic object and obtains the value held previously}}</text>
      <sha1>78aqf5hayvqu1dgme87jrd6iltsgcuy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc fetch add</title>
    <ns>10</ns>
    <id>4724</id>
    <revision>
      <id>85349</id>
      <parentid>54756</parentid>
      <timestamp>2016-04-20T21:13:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="173">{{dsc mem fun | cpp/atomic/atomic/fetch_add | mem={{{mem|}}} | atomically adds the argument to the value stored in the atomic object and obtains the value held previously }}</text>
      <sha1>mrsvy1wbh6aawp4mlas0mmmffk0orl9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc fetch and</title>
    <ns>10</ns>
    <id>4728</id>
    <revision>
      <id>85351</id>
      <parentid>54760</parentid>
      <timestamp>2016-04-20T21:14:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="191">{{dsc mem fun | cpp/atomic/atomic/fetch_and | mem={{{mem|}}} | atomically performs bitwise AND between the argument and the value of the atomic object and obtains the value held previously }}</text>
      <sha1>t184zx7yz7l32y8tc8o68ol01le64p9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc fetch or</title>
    <ns>10</ns>
    <id>4730</id>
    <revision>
      <id>85352</id>
      <parentid>54764</parentid>
      <timestamp>2016-04-20T21:14:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="189">{{dsc mem fun | cpp/atomic/atomic/fetch_or | mem={{{mem|}}} | atomically performs bitwise OR between the argument and the value of the atomic object and obtains the value held previously }}</text>
      <sha1>go5l35a30dn4yf5mxan6i768arvv40o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc fetch sub</title>
    <ns>10</ns>
    <id>4726</id>
    <revision>
      <id>85350</id>
      <parentid>54768</parentid>
      <timestamp>2016-04-20T21:13:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="180">{{dsc mem fun | cpp/atomic/atomic/fetch_sub | mem={{{mem|}}} | atomically subtracts the argument from the value stored in the atomic object and obtains the value held previously }}</text>
      <sha1>htdmorwax7b2vxt8wv9mmz5irvsqhl0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc fetch xor</title>
    <ns>10</ns>
    <id>4732</id>
    <revision>
      <id>85353</id>
      <parentid>54773</parentid>
      <timestamp>2016-04-20T21:14:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="191">{{dsc mem fun | cpp/atomic/atomic/fetch_xor | mem={{{mem|}}} | atomically performs bitwise XOR between the argument and the value of the atomic object and obtains the value held previously }}</text>
      <sha1>qqy070mtqnwr5uwvgqp6y3e0bimumb0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc is always lock free</title>
    <ns>10</ns>
    <id>14752</id>
    <revision>
      <id>83819</id>
      <timestamp>2016-03-08T20:04:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem sconst | cpp/atomic/atomic/is_always_lock_free | indicates that the type is always lock-free|notes={{mark c++17}} }}</text>
      <sha1>n3rf0pvcw32eja9vpv38kuhodfgb4e1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc is lock free</title>
    <ns>10</ns>
    <id>6730</id>
    <revision>
      <id>54777</id>
      <parentid>52233</parentid>
      <timestamp>2013-06-01T05:16:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic/dcl list is lock free]] to [[Template:cpp/atomic/atomic/dsc is lock free]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun  | cpp/atomic/atomic/is_lock_free | checks if the atomic object is lock-free}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc load</title>
    <ns>10</ns>
    <id>4721</id>
    <revision>
      <id>85347</id>
      <parentid>54783</parentid>
      <timestamp>2016-04-20T21:13:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun | cpp/atomic/atomic/load | mem={{{mem|}}} | atomically obtains the value of the atomic object }}</text>
      <sha1>p40jmk0m00dbz47hhjvsqt76ehay8o8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc operator T</title>
    <ns>10</ns>
    <id>6732</id>
    <revision>
      <id>54788</id>
      <parentid>52236</parentid>
      <timestamp>2013-06-01T05:16:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic/dcl list operator T]] to [[Template:cpp/atomic/atomic/dsc operator T]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun  | cpp/atomic/atomic/operator T | loads a value from an atomic object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc operator arith</title>
    <ns>10</ns>
    <id>6734</id>
    <revision>
      <id>54791</id>
      <parentid>52237</parentid>
      <timestamp>2013-06-01T05:16:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic/dcl list operator arith]] to [[Template:cpp/atomic/atomic/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="201">{{dsc mem fun | cpp/atomic/atomic/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}}&lt;br&gt;operator--&lt;br&gt;operator--{{dsc small|(int)}} | increments or decrements the atomic value by one }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc operator arith2</title>
    <ns>10</ns>
    <id>6735</id>
    <revision>
      <id>54793</id>
      <parentid>52238</parentid>
      <timestamp>2013-06-01T05:16:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic/dcl list operator arith2]] to [[Template:cpp/atomic/atomic/dsc operator arith2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="204">{{dsc mem fun | cpp/atomic/atomic/operator_arith2 | title=operator+=&lt;br&gt;operator-=&lt;br&gt;operator&amp;=&lt;br&gt;operator{{!}}=&lt;br&gt;operator^= | adds, subtracts, or performs bitwise AND, OR, XOR with the atomic value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc operator=</title>
    <ns>10</ns>
    <id>6733</id>
    <revision>
      <id>54786</id>
      <parentid>52235</parentid>
      <timestamp>2013-06-01T05:16:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/atomic/dcl list operator=]] to [[Template:cpp/atomic/atomic/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun  | cpp/atomic/atomic/operator{{=}} | stores a value into an atomic object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/dsc store</title>
    <ns>10</ns>
    <id>4719</id>
    <revision>
      <id>85346</id>
      <parentid>54796</parentid>
      <timestamp>2016-04-20T21:13:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>the whole class template is C++11</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/atomic/atomic/store | mem={{{mem|}}} | atomically replaces the value of the atomic object with a non-atomic argument }}</text>
      <sha1>nwxpk5u3ku4wzromuoe82j9zmsaby2r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/navbar</title>
    <ns>10</ns>
    <id>4735</id>
    <revision>
      <id>39859</id>
      <parentid>35528</parentid>
      <timestamp>2012-09-28T19:56:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/atomic/navbar heading
|content2 = cpp/atomic/navbar content

|heading3 = cpp/atomic/atomic/navbar heading
|content3 = cpp/atomic/atomic/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/navbar content</title>
    <ns>10</ns>
    <id>9231</id>
    <revision>
      <id>52240</id>
      <parentid>38851</parentid>
      <timestamp>2013-06-01T04:42:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="913">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/atomic/atomic/atomic}}
{{nv mem ln | cpp/atomic/atomic/operator{{=}}}}
{{nv mem ln | cpp/atomic/atomic/is_lock_free}}
{{nv mem ln | cpp/atomic/atomic/store}}
{{nv mem ln | cpp/atomic/atomic/load}}
{{nv mem ln | cpp/atomic/atomic/operator T}}
{{nv mem ln | cpp/atomic/atomic/exchange}}
{{nv mem ln | cpp/atomic/atomic/compare_exchange}}

{{nv h1 | Specialized member functions}}
{{nv mem ln | cpp/atomic/atomic/fetch_add}}
{{nv mem ln | cpp/atomic/atomic/fetch_sub}}
{{nv mem ln | cpp/atomic/atomic/fetch_and}}
{{nv mem ln | cpp/atomic/atomic/fetch_or}}
{{nv mem ln | cpp/atomic/atomic/fetch_xor}}
{{nv mem ln | cpp/atomic/atomic/operator_arith | operator++ | operator++(int) | operator-- | operator--(int)}}
{{nv mem ln | cpp/atomic/atomic/operator_arith2 | operator+{{=}} | operator-{{=}} | operator&amp;{{=}} | operator{{!=}} | operator^{{=}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/navbar heading</title>
    <ns>10</ns>
    <id>4736</id>
    <revision>
      <id>48080</id>
      <parentid>35529</parentid>
      <timestamp>2013-05-18T18:06:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="37">{{ltt|cpp/atomic/atomic|std::atomic}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/atomic/title</title>
    <ns>10</ns>
    <id>5000</id>
    <revision>
      <id>18053</id>
      <timestamp>2012-01-20T14:45:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=atomic::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc ATOMIC FLAG INIT</title>
    <ns>10</ns>
    <id>2815</id>
    <revision>
      <id>54808</id>
      <parentid>52244</parentid>
      <timestamp>2013-06-01T05:16:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list ATOMIC FLAG INIT]] to [[Template:cpp/atomic/dsc ATOMIC FLAG INIT]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc macro const | cpp/atomic/ATOMIC_FLAG_INIT | initializes an {{lc|std::atomic_flag}} to {{c|false}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc ATOMIC VAR INIT</title>
    <ns>10</ns>
    <id>2827</id>
    <revision>
      <id>54814</id>
      <parentid>52245</parentid>
      <timestamp>2013-06-01T05:17:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list ATOMIC VAR INIT]] to [[Template:cpp/atomic/dsc ATOMIC VAR INIT]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc macro fun | cpp/atomic/ATOMIC_VAR_INIT | constant initialization of an atomic variable of static storage duration | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic</title>
    <ns>10</ns>
    <id>4710</id>
    <revision>
      <id>54816</id>
      <parentid>52246</parentid>
      <timestamp>2013-06-01T05:17:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic]] to [[Template:cpp/atomic/dsc atomic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tclass | cpp/atomic/atomic | atomic class template and specializations for bool, integral, and pointer types | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic compare exchange</title>
    <ns>10</ns>
    <id>4713</id>
    <revision>
      <id>54818</id>
      <parentid>52247</parentid>
      <timestamp>2013-06-01T05:17:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic compare exchange]] to [[Template:cpp/atomic/dsc atomic compare exchange]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="419">{{dsc tfun | cpp/atomic/atomic_compare_exchange | title=atomic_compare_exchange_weak&lt;br&gt;atomic_compare_exchange_weak_explicit&lt;br&gt;atomic_compare_exchange_strong&lt;br&gt;atomic_compare_exchange_strong_explicit | atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic exchange</title>
    <ns>10</ns>
    <id>4712</id>
    <revision>
      <id>54821</id>
      <parentid>52248</parentid>
      <timestamp>2013-06-01T05:17:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic exchange]] to [[Template:cpp/atomic/dsc atomic exchange]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="252">{{dsc tfun | cpp/atomic/atomic_exchange | title=atomic_exchange&lt;br&gt;atomic_exchange_explicit | atomically replaces the value of the atomic object with non-atomic argument and returns the old value of the atomic | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic fetch add</title>
    <ns>10</ns>
    <id>4714</id>
    <revision>
      <id>54823</id>
      <parentid>52249</parentid>
      <timestamp>2013-06-01T05:17:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic fetch add]] to [[Template:cpp/atomic/dsc atomic fetch add]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="228">{{dsc tfun | cpp/atomic/atomic_fetch_add | title=atomic_fetch_add&lt;br&gt;atomic_fetch_add_explicit | adds a non-atomic value to an atomic object and obtains the previous value of the atomic | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic fetch and</title>
    <ns>10</ns>
    <id>4716</id>
    <revision>
      <id>54826</id>
      <parentid>52250</parentid>
      <timestamp>2013-06-01T05:17:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic fetch and]] to [[Template:cpp/atomic/dsc atomic fetch and]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="269">{{dsc tfun | cpp/atomic/atomic_fetch_and | title=atomic_fetch_and&lt;br&gt;atomic_fetch_and_explicit | replaces the atomic object with the result of logical AND with a non-atomic argument and obtains the previous value of the atomic | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic fetch or</title>
    <ns>10</ns>
    <id>4717</id>
    <revision>
      <id>54828</id>
      <parentid>52251</parentid>
      <timestamp>2013-06-01T05:17:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic fetch or]] to [[Template:cpp/atomic/dsc atomic fetch or]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="265">{{dsc tfun | cpp/atomic/atomic_fetch_or | title=atomic_fetch_or&lt;br&gt;atomic_fetch_or_explicit | replaces the atomic object with the result of logical OR with a non-atomic argument and obtains the previous value of the atomic | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic fetch sub</title>
    <ns>10</ns>
    <id>4715</id>
    <revision>
      <id>54833</id>
      <parentid>52252</parentid>
      <timestamp>2013-06-01T05:17:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic fetch sub]] to [[Template:cpp/atomic/dsc atomic fetch sub]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="235">{{dsc tfun | cpp/atomic/atomic_fetch_sub | title=atomic_fetch_sub&lt;br&gt;atomic_fetch_sub_explicit | subtracts a non-atomic value from an atomic object and obtains the previous value of the atomic | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic fetch xor</title>
    <ns>10</ns>
    <id>4718</id>
    <revision>
      <id>54837</id>
      <parentid>52253</parentid>
      <timestamp>2013-06-01T05:17:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic fetch xor]] to [[Template:cpp/atomic/dsc atomic fetch xor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="270">{{dsc tfun | cpp/atomic/atomic_fetch_xor | title=atomic_fetch_xor&lt;br&gt;atomic_fetch_xor_explicit | replaces the atomic object with the result of logical XOR with a non-atomic argument and obtains the previous value of the atomic  | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic flag</title>
    <ns>10</ns>
    <id>2817</id>
    <revision>
      <id>54842</id>
      <parentid>52254</parentid>
      <timestamp>2013-06-01T05:17:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic flag]] to [[Template:cpp/atomic/dsc atomic flag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc class | cpp/atomic/atomic_flag | the lock-free boolean atomic type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic flag clear</title>
    <ns>10</ns>
    <id>2825</id>
    <revision>
      <id>54846</id>
      <parentid>52255</parentid>
      <timestamp>2013-06-01T05:17:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic flag clear]] to [[Template:cpp/atomic/dsc atomic flag clear]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="195">{{dsc fun | cpp/atomic/atomic_flag_clear | title=atomic_flag_clear&lt;br&gt;atomic_flag_clear_explicit | atomically sets the value of the flag to {{c|false}} | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic flag test and set</title>
    <ns>10</ns>
    <id>2824</id>
    <revision>
      <id>54849</id>
      <parentid>52256</parentid>
      <timestamp>2013-06-01T05:17:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic flag test and set]] to [[Template:cpp/atomic/dsc atomic flag test and set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="232">{{dsc fun | cpp/atomic/atomic_flag_test_and_set | title=atomic_flag_test_and_set&lt;br&gt;atomic_flag_test_and_set_explicit | atomically sets the flag to {{c|true}} and returns its previous value | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic init</title>
    <ns>10</ns>
    <id>2826</id>
    <revision>
      <id>54852</id>
      <parentid>52257</parentid>
      <timestamp>2013-06-01T05:17:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic init]] to [[Template:cpp/atomic/dsc atomic init]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/atomic/atomic_init | non-atomic initialization of a default-constructed atomic object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic is lock free</title>
    <ns>10</ns>
    <id>4711</id>
    <revision>
      <id>54856</id>
      <parentid>52258</parentid>
      <timestamp>2013-06-01T05:17:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic is lock free]] to [[Template:cpp/atomic/dsc atomic is lock free]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/atomic/atomic_is_lock_free | checks if the atomic type's operations are lock-free | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic load</title>
    <ns>10</ns>
    <id>4708</id>
    <revision>
      <id>54859</id>
      <parentid>52259</parentid>
      <timestamp>2013-06-01T05:17:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic load]] to [[Template:cpp/atomic/dsc atomic load]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="180">{{dsc tfun | cpp/atomic/atomic_load | title=atomic_load&lt;br&gt;atomic_load_explicit | atomically obtains the value stored in an atomic object | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic signal fence</title>
    <ns>10</ns>
    <id>2823</id>
    <revision>
      <id>54863</id>
      <parentid>52260</parentid>
      <timestamp>2013-06-01T05:17:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic signal fence]] to [[Template:cpp/atomic/dsc atomic signal fence]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | cpp/atomic/atomic_signal_fence | fence between a thread and a signal handler executed in the same thread | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic store</title>
    <ns>10</ns>
    <id>4709</id>
    <revision>
      <id>54868</id>
      <parentid>52261</parentid>
      <timestamp>2013-06-01T05:17:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic store]] to [[Template:cpp/atomic/dsc atomic store]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="205">{{dsc tfun | cpp/atomic/atomic_store | title=atomic_store&lt;br&gt;atomic_store_explicit | atomically replaces the value of the atomic object with a non-atomic argument | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc atomic thread fence</title>
    <ns>10</ns>
    <id>2822</id>
    <revision>
      <id>54872</id>
      <parentid>52262</parentid>
      <timestamp>2013-06-01T05:17:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list atomic thread fence]] to [[Template:cpp/atomic/dsc atomic thread fence]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc fun | cpp/atomic/atomic_thread_fence | generic memory order-dependent fence synchronization primitive | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc kill dependency</title>
    <ns>10</ns>
    <id>2821</id>
    <revision>
      <id>54878</id>
      <parentid>52263</parentid>
      <timestamp>2013-06-01T05:17:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list kill dependency]] to [[Template:cpp/atomic/dsc kill dependency]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="153">{{dsc tfun | cpp/atomic/kill_dependency | removes the specified object from the {{lc|std::memory_order_consume}} dependency tree | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/dsc memory order</title>
    <ns>10</ns>
    <id>2820</id>
    <revision>
      <id>54881</id>
      <parentid>52264</parentid>
      <timestamp>2013-06-01T05:17:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/dcl list memory order]] to [[Template:cpp/atomic/dsc memory order]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc typedef | cpp/atomic/memory_order | defines memory ordering constraints for the given atomic operation | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/external-links</title>
    <ns>10</ns>
    <id>14010</id>
    <revision>
      <id>81068</id>
      <parentid>81067</parentid>
      <timestamp>2015-09-25T17:25:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Nice link. +names, adj todo</comment>
      <text xml:space="preserve" bytes="612">* [[enwiki:MOESI protocol|MOESI protocol]]
{{todo|let's find good refs on QPI, MOESI, and maybe Dragon}}
* [http://www.cl.cam.ac.uk/~pes20/weakmemory/cacm.pdf x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors] P. Sewell et. al., 2010
* [http://www.cl.cam.ac.uk/~pes20/ppc-supplemental/test7.pdf A Tutorial Introduction to the ARM and POWER Relaxed Memory Models] P. Sewell et al, 2012
* [https://researchspace.auckland.ac.nz/bitstream/handle/2292/11594/MESIF-2009.pdf?sequence=6 MESIF: A Two-Hop Cache Coherency Protocol for Point-to-Point Interconnects]  J.R. Goodman, H.H.J. Hum, 2009</text>
      <sha1>koqzuos989z1xr996rj28g1nz5i2nkl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/memory-order-constants</title>
    <ns>10</ns>
    <id>14008</id>
    <revision>
      <id>90245</id>
      <parentid>87949</parentid>
      <timestamp>2017-02-14T17:03:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>a discussion on gamedev.net makes the point that the wording about relaxed is unclear (it can be read as if *this* atomic access is not synchronized)</comment>
      <text xml:space="preserve" bytes="2454">{{dsc | {{tt|memory_order_relaxed}} | Relaxed operation: there are no synchronization or ordering constraints imposed on other reads or writes, only this operation's atomicity is guaranteed (see [[#Relaxed_ordering|Relaxed ordering]] below)}}
{{dsc | {{tt|memory_order_consume}} | A load operation with this memory order performs a ''consume operation'' on the affected memory location: no reads or writes in the current thread dependent on the value currently loaded can be reordered before this load. Writes to data-dependent variables in other threads that release the same atomic variable are visible in the current thread. On most platforms, this affects compiler optimizations only (see [[#Release-Consume_ordering|Release-Consume ordering]] below)}}
{{dsc | {{tt|memory_order_acquire}} | A load operation with this memory order performs the ''acquire operation'' on the affected memory location: no reads or writes in the current thread can be reordered before this load. All writes in other threads that release the same atomic variable are visible in the current thread (see [[#Release-Acquire_ordering|Release-Acquire ordering]] below)}}
{{dsc | {{tt|memory_order_release}} | A store operation with this memory order performs the ''release operation'': no reads or writes in the current thread can be reordered after this store. All writes in the current thread are visible in other threads that acquire the same atomic variable (see [[#Release-Acquire_ordering|Release-Acquire ordering]] below) and writes that carry a dependency into the atomic variable become visible in other threads that consume the same atomic (see [[#Release-Consume_ordering|Release-Consume ordering]] below).}}
{{dsc | {{tt|memory_order_acq_rel}} | A read-modify-write operation with this memory order is both an ''acquire operation'' and a ''release operation''. No memory reads or writes in the current thread can be reordered before or after this store. All writes in other threads that release the same atomic variable are visible before the modification and the modification is visible in other threads that acquire the same atomic variable.}}
{{dsc | {{tt|memory_order_seq_cst}} | Any operation with this memory order is both an ''acquire operation'' and a ''release operation'', plus a single total order exists in which all threads observe all modifications in the same order (see [[#Sequentially-consistent_ordering|Sequentially-consistent ordering]] below)}}</text>
      <sha1>ieb1k9q8le2sdvp2m041oes611wzdyb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/memory-order-intro</title>
    <ns>10</ns>
    <id>14007</id>
    <revision>
      <id>76745</id>
      <parentid>76710</parentid>
      <timestamp>2015-02-27T23:52:44Z</timestamp>
      <contributor>
        <ip>70.24.253.243</ip>
      </contributor>
      <comment>fix typo memory_oder -&gt; memory_order</comment>
      <text xml:space="preserve" bytes="1080">{{#ifeq:{{{1}}}|cpp|{{tt|std::memory_order}}|{{tt|memory_order}}}} specifies how regular, non-atomic memory accesses are to be ordered around an atomic operation. Absent any constraints on a multi-core system, when multiple threads simultaneously read and write to several variables, one thread can observe the values change in an order different from the order another thread wrote them. Indeed, the apparent order of changes can even differ among multiple reader threads. Some similar effects can occur even on uniprocessor systems due to compiler transformations allowed by the memory model.

The default behavior of all atomic operations in the {{#ifeq:{{{1}}}|c|[[c/language/atomic|language]] and the}} library provides for ''sequentially consistent ordering'' (see discussion below). That default can hurt performance, but the library's atomic operations can be given an additional {{#ifeq:{{{1}}}|cpp|{{tt|std::memory_order}}|{{tt|memory_order}}}} argument to specify the exact constraints, beyond atomicity, that the compiler and processor must enforce for that operation.</text>
      <sha1>hb93hn78iz1nxkavjyqh9848sqqrovr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/navbar</title>
    <ns>10</ns>
    <id>1903</id>
    <revision>
      <id>39861</id>
      <parentid>35533</parentid>
      <timestamp>2012-09-28T19:56:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="152">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/atomic/navbar heading
|content2 = cpp/atomic/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/navbar content</title>
    <ns>10</ns>
    <id>2813</id>
    <revision>
      <id>52265</id>
      <parentid>35534</parentid>
      <timestamp>2013-06-01T04:43:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="2305">{{nv begin}}
{{nv h1 | Types}}
{{nv ln | cpp/atomic/atomic | notes={{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_is_lock_free | notes={{mark c++11}}}}

{{nv h1 | Functions}}
{{nv ln | cpp/atomic/atomic_store | atomic_store | atomic_store_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_load | atomic_load | atomic_load_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_exchange | atomic_exchange | atomic_exchange_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_compare_exchange | atomic_compare_exchange_weak | atomic_compare_exchange_weak_explicit | atomic_compare_exchange_strong | atomic_compare_exchange_strong_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_fetch_add | atomic_fetch_add | atomic_fetch_add_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_fetch_sub | atomic_fetch_sub | atomic_fetch_sub_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_fetch_and | atomic_fetch_and | atomic_fetch_and_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_fetch_or | atomic_fetch_or | atomic_fetch_or_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_fetch_xor | atomic_fetch_xor | atomic_fetch_xor_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}

{{nv h1 | Atomic flags}}
{{nv ln | cpp/atomic/atomic_flag | notes={{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_flag_test_and_set | atomic_flag_test_and_set | atomic_flag_test_and_set_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_flag_clear | atomic_flag_clear | atomic_flag_clear_explicit | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}

{{nv h1 | Initialization}}
{{nv ln | cpp/atomic/atomic_init | notes={{mark c++11}}}}
{{nv ln | cpp/atomic/ATOMIC_VAR_INIT | notes={{mark c++11}}}}
{{nv ln | cpp/atomic/ATOMIC_FLAG_INIT | notes={{mark c++11}}}}

{{nv h1 | Memory ordering}}
{{nv ln | cpp/atomic/memory_order | notes={{mark c++11}}}}
{{nv ln | cpp/atomic/kill_dependency | notes={{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_thread_fence | notes={{mark c++11}}}}
{{nv ln | cpp/atomic/atomic_signal_fence | notes={{mark c++11}}}}

{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/navbar heading</title>
    <ns>10</ns>
    <id>1904</id>
    <revision>
      <id>35535</id>
      <parentid>3807</parentid>
      <timestamp>2012-06-15T22:28:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/atomic/sidebar heading]] to [[Template:cpp/atomic/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="42">[[cpp/atomic | Atomic operations library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/relaxed</title>
    <ns>10</ns>
    <id>14004</id>
    <revision>
      <id>87274</id>
      <parentid>82705</parentid>
      <timestamp>2016-08-07T19:14:30Z</timestamp>
      <contributor>
        <ip>63.231.142.134</ip>
      </contributor>
      <comment>Language and punctuation that are more precise</comment>
      <text xml:space="preserve" bytes="2282">Atomic operations tagged {{c|memory_order_relaxed}} are not synchronization operations; they do not impose an order among concurrent memory accesses. They only guarantee atomicity and modification order consistency.

For example, with {{tt|x}} and {{tt|y}} initially zero,

{{#ifeq:{{{1}}}|cpp|
{{source|1=
// Thread 1:
r1 = y.load(memory_order_relaxed); // A
x.store(r1, memory_order_relaxed); // B
// Thread 2:
r2 = x.load(memory_order_relaxed); // C 
y.store(42, memory_order_relaxed); // D
}}
|
{{c|1=
// Thread 1:
r1 = atomic_load_explicit(y, memory_order_relaxed); // A
atomic_store_explicit(x, r1, memory_order_relaxed); // B
// Thread 2:
r2 = atomic_load_explicit(x, memory_order_relaxed); // C
atomic_store_explicit(y, 42, memory_order_relaxed); // D
}}
}}

is allowed to produce {{tt|1=r1 == r2 == 42}} because, although A is ''sequenced-before'' B within thread 1 and C is ''sequenced before'' D within thread 2, nothing prevents D from appearing before A in the modification order of y, and B from appearing before C in the modification order of x. The side-effect of D on y could be visible to the load A in Thread 1  while the side effect of B on x could be visible to the load C in Thread 2.

{{#ifeq:{{{1}}}|cpp|
{{rev begin}}
{{rev|since=c++14|
Even with relaxed memory model, out-of-thin-air values are not allowed to circularly depend on their own computations, for example, with {{tt|x}} and {{tt|y}} initially zero,
{{source|1=
// Thread 1:
r1 = x.load(memory_order_relaxed);
if (r1 == 42) y.store(r1, memory_order_relaxed);
// Thread 2:
r2 = y.load(memory_order_relaxed);
if (r2 == 42) x.store(42, memory_order_relaxed);
}}
is not allowed to produce {{tt|1=r1 == r2 == 42}} since the store of 42 to y is only possible if the store to x stores 42, which circularly depends on the store to y storing 42. Note that until C++14, this was technically allowed by the specification, but not recommended for implementors.
}}
{{rev end}} }}

Typical use for relaxed memory ordering is incrementing counters, such as the reference counters {{#ifeq:{{{1}}}|cpp|of {{lc|std::shared_ptr}}}}, since this only requires atomicity, but not ordering or synchronization (note that decrementing the shared_ptr counters requires acquire-release synchronization with the destructor)</text>
      <sha1>skhhc8ukrekg7f7ix7o70set40adp8d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/release-acquire</title>
    <ns>10</ns>
    <id>14003</id>
    <revision>
      <id>76694</id>
      <timestamp>2015-02-26T16:07:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1740">If an atomic store in thread A is tagged {{c|memory_order_release}} and an atomic load in thread B from the same variable is tagged {{c|memory_order_acquire}}, all memory writes (non-atomic and relaxed atomic) that ''happened-before'' the atomic store from the point of view of thread A, become ''visible side-effects'' in thread B, that is, once the atomic load is completed, thread B is guaranteed to see everything thread A wrote to memory.

The synchronization is established only between the threads ''releasing'' and ''acquiring'' the same atomic variable. Other threads can see different order of memory accesses than either or both of the synchronized threads.

On strongly-ordered systems (x86, SPARC TSO, IBM mainframe), release-acquire ordering is automatic for the majority of operations. No additional CPU instructions are issued for this synchronization mode, only certain compiler optimizations are affected (e.g. the compiler is prohibited from moving non-atomic stores past the atomic store-release or perform non-atomic loads earlier than the atomic load-acquire). On weakly-ordered systems (ARM, Itanium, PowerPC), special CPU load or memory fence instructions have to be used.

Mutual exclusion locks (such as {{#ifeq:{{{1}}}|cpp|{{lc|std::mutex}}|[[c/thread#Mutual_exclusion|mutexes]]}} or {{#ifeq:{{{1}}}|cpp|[[cpp/atomic/atomic_flag|atomic spinlock]]|[[c/atomic/atomic_flag_test_and_set|atomic spinlock]]}}) are an example of release-acquire synchronization: when the lock is released by thread A and acquired by thread B, everything that took place in the critical section (before the release) in the context of thread A has to be visible to thread B (after the acquire) which is executing the same critical section.</text>
      <sha1>8kgkqhdugjz9hd7gxsu885plbkxhn29</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/release-consume</title>
    <ns>10</ns>
    <id>14002</id>
    <revision>
      <id>76692</id>
      <parentid>76690</parentid>
      <timestamp>2015-02-26T16:03:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>more</comment>
      <text xml:space="preserve" bytes="2072">If an atomic store in thread A is tagged {{c|memory_order_release}} and an atomic load in thread B from the same variable is tagged {{c|memory_order_consume}}, all memory writes (non-atomic and relaxed atomic) that are ''dependency-ordered-before'' the atomic store from the point of view of thread A, become ''visible side-effects'' within those operations in thread B into which the load operation ''carries dependency'', that is, once the atomic load is completed, those operators and functions in thread B that use the value obtained from the load are guaranteed to see what thread A wrote to memory.

The synchronization is established only between the threads ''releasing'' and ''consuming'' the same atomic variable. Other threads can see different order of memory accesses than either or both of the synchronized threads.

On all mainstream CPUs other than DEC Alpha, dependency ordering is automatic, no additional CPU instructions are issued for this synchronization mode, only certain compiler optimizations are affected (e.g. the compiler is prohibited from performing speculative loads on the objects that are involved in the dependency chain). 

Typical use cases for this ordering involve read access to rarely written concurrent data structures (routing tables, configuration, security policies, firewall rules, etc) and publisher-subscriber situations with pointer-mediated publication, that is, when the producer publishes a pointer through which the consumer can access information: there is no need to make everything else the producer wrote to memory visible to the consumer (which may be an expensive operation on weakly-ordered architectures). An example of such scenario is [[enwiki:Read-copy-update|rcu_dereference]].

{{#ifeq:{{{1}}}|cpp|See also {{lc|std::kill_dependency}} and [[cpp/language/attributes|[&lt;nowiki&gt;[&lt;/nowiki&gt;carries_dependency]&lt;nowiki&gt;]&lt;/nowiki&gt;]] for fine-grained dependency chain control.}}

Note that currently (2/2015) no known production compilers track dependency chains: consume operations are lifted to acquire operations.</text>
      <sha1>et5oj2jo75n4htfvmx6q3u737jy6sdk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/sequentially-consistent</title>
    <ns>10</ns>
    <id>14005</id>
    <revision>
      <id>90047</id>
      <parentid>90002</parentid>
      <timestamp>2017-02-03T16:26:36Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>C version</comment>
      <text xml:space="preserve" bytes="3172">Atomic operations tagged {{c|memory_order_seq_cst}} not only order memory the same way as release/acquire ordering (everything that ''happened-before'' a store in one thread becomes a ''visible side effect'' in the thread that did a load), but also establish a ''single total modification order'' of all atomic operations that are so tagged.

Formally,

Each {{tt|memory_order_seq_cst}} operation B that loads from atomic variable M, observes one of the following:
* the result of the last operation A that modified M, which appears before B in the single total order
* OR, if there was such an A, B may observe the result of some modification on M that is not {{tt|memory_order_seq_cst}} and does not ''happen-before'' A
* OR, if there wasn't such an A, B may observe the result of some unrelated modification of M that is not {{tt|memory_order_seq_cst}}

If there was a {{tt|memory_order_seq_cst}} {{lc|{{#ifeq:{{get_lang}}|cpp|std::}}atomic_thread_fence}} operation X ''sequenced-before'' B, then B observes one of the following:
* the last {{tt|memory_order_seq_cst}} modification of M that appears before X in the single total order
* some unrelated modification of M that appears later in M's modification order

For a pair of atomic operations on M called A and B, where A writes and B reads M's value, if there are two {{tt|memory_order_seq_cst}} {{lc|{{#ifeq:{{get_lang}}|cpp|std::}}atomic_thread_fence}}s X and Y, and if A is ''sequenced-before'' X, Y is ''sequenced-before'' B, and X appears before Y in the Single Total Order, then B observes either:
* the effect of A
* some unrelated modification of M that appears after A in M's modification order

For a pair of atomic modifications of M called A and B, B occurs after A in M's modification order if 
* there is a {{tt|memory_order_seq_cst}} {{lc|{{#ifeq:{{get_lang}}|cpp|std::}}atomic_thread_fence}} X such that A is ''sequenced-before'' X and X appears before B in the Single Total Order
* or, there is a {{tt|memory_order_seq_cst}} {{lc|{{#ifeq:{{get_lang}}|cpp|std::}}atomic_thread_fence}} Y such that Y is ''sequenced-before'' B and A appears before Y in the Single Total Order
* or, there are {{tt|memory_order_seq_cst}} {{lc|{{#ifeq:{{get_lang}}|cpp|std::}}atomic_thread_fence}}s X and Y such that A is ''sequenced-before'' X, Y is ''sequenced-before'' B, and X appears before Y in the Single Total Order.

Note that this means that:
@1@ as soon as atomic operations that are not tagged {{tt|memory_order_seq_cst}} enter the picture, the sequential consistency is lost
@2@ the sequentially-consistent fences are only establishing total ordering for the fences themselves, not for the atomic operations in the general case (''sequenced-before'' is not a cross-thread relationship, unlike ''happens-before'')

Sequential ordering may be necessary for multiple producer-multiple consumer situations where all consumers must observe the actions of all producers occurring in the same order.

Total sequential ordering requires a full memory fence CPU instruction on all multi-core systems. This may become a performance bottleneck since it forces the affected memory accesses to propagate to every core.</text>
      <sha1>6e6b0tmny71rsmx78hlorhe8ng3mwum</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/atomic/title</title>
    <ns>10</ns>
    <id>6324</id>
    <revision>
      <id>22225</id>
      <timestamp>2012-04-18T15:31:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=atomic::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono//navbar</title>
    <ns>10</ns>
    <id>5284</id>
    <revision>
      <id>35537</id>
      <parentid>19211</parentid>
      <timestamp>2012-06-15T22:28:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono//sidebar]] to [[Template:cpp/chrono//navbar]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono//title</title>
    <ns>10</ns>
    <id>5283</id>
    <revision>
      <id>19210</id>
      <timestamp>2012-02-29T16:42:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc CLOCKS PER SEC</title>
    <ns>10</ns>
    <id>2050</id>
    <revision>
      <id>54885</id>
      <parentid>52266</parentid>
      <timestamp>2013-06-01T05:17:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list CLOCKS PER SEC]] to [[Template:cpp/chrono/c/dsc CLOCKS PER SEC]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc macro const | cpp/chrono/c/CLOCKS_PER_SEC | number of processor clock ticks per second}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc asctime</title>
    <ns>10</ns>
    <id>2041</id>
    <revision>
      <id>54891</id>
      <parentid>52267</parentid>
      <timestamp>2013-06-01T05:17:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list asctime]] to [[Template:cpp/chrono/c/dsc asctime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | cpp/chrono/c/asctime | converts a {{tt|tm}} object to a textual representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc clock</title>
    <ns>10</ns>
    <id>2042</id>
    <revision>
      <id>54894</id>
      <parentid>52268</parentid>
      <timestamp>2013-06-01T05:17:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list clock]] to [[Template:cpp/chrono/c/dsc clock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/chrono/c/clock | returns raw processor clock time since the program is started}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc clock t</title>
    <ns>10</ns>
    <id>8473</id>
    <revision>
      <id>54900</id>
      <parentid>52269</parentid>
      <timestamp>2013-06-01T05:17:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list clock t]] to [[Template:cpp/chrono/c/dsc clock t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">{{dsc typedef | cpp/chrono/c/clock_t | process running time}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc ctime</title>
    <ns>10</ns>
    <id>2043</id>
    <revision>
      <id>54903</id>
      <parentid>52270</parentid>
      <timestamp>2013-06-01T05:17:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list ctime]] to [[Template:cpp/chrono/c/dsc ctime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/chrono/c/ctime | converts a {{tt|time_t}} object to a textual representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc difftime</title>
    <ns>10</ns>
    <id>2044</id>
    <revision>
      <id>54905</id>
      <parentid>52271</parentid>
      <timestamp>2013-06-01T05:17:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list difftime]] to [[Template:cpp/chrono/c/dsc difftime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | cpp/chrono/c/difftime | computes the difference between times}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc gmtime</title>
    <ns>10</ns>
    <id>2045</id>
    <revision>
      <id>54909</id>
      <parentid>52272</parentid>
      <timestamp>2013-06-01T05:18:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list gmtime]] to [[Template:cpp/chrono/c/dsc gmtime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | cpp/chrono/c/gmtime | converts time since epoch to calendar time expressed as Universal Coordinated Time}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc localtime</title>
    <ns>10</ns>
    <id>2048</id>
    <revision>
      <id>54915</id>
      <parentid>52273</parentid>
      <timestamp>2013-06-01T05:18:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list localtime]] to [[Template:cpp/chrono/c/dsc localtime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | cpp/chrono/c/localtime | converts time since epoch to calendar time expressed as local time}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc mktime</title>
    <ns>10</ns>
    <id>2046</id>
    <revision>
      <id>54918</id>
      <parentid>52274</parentid>
      <timestamp>2013-06-01T05:18:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list mktime]] to [[Template:cpp/chrono/c/dsc mktime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/chrono/c/mktime | converts calendar time to time since epoch}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc strftime</title>
    <ns>10</ns>
    <id>2047</id>
    <revision>
      <id>54920</id>
      <parentid>52275</parentid>
      <timestamp>2013-06-01T05:18:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list strftime]] to [[Template:cpp/chrono/c/dsc strftime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc fun | cpp/chrono/c/strftime | converts a {{tt|tm}} object to custom textual representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc time</title>
    <ns>10</ns>
    <id>2049</id>
    <revision>
      <id>54922</id>
      <parentid>52276</parentid>
      <timestamp>2013-06-01T05:18:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list time]] to [[Template:cpp/chrono/c/dsc time]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | cpp/chrono/c/time | returns the current time of the system as time since epoch}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc time t</title>
    <ns>10</ns>
    <id>8472</id>
    <revision>
      <id>54927</id>
      <parentid>52277</parentid>
      <timestamp>2013-06-01T05:18:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list time t]] to [[Template:cpp/chrono/c/dsc time t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">{{dsc typedef | cpp/chrono/c/time_t | time since epoch type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc timespec</title>
    <ns>10</ns>
    <id>15533</id>
    <revision>
      <id>86215</id>
      <timestamp>2016-06-24T19:59:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc struct | cpp/chrono/c/timespec | time in seconds and nanoseconds | notes={{mark since c++17}} }}</text>
      <sha1>lhjwfirs0g0afeffw68ora48pdykakr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc timespec get</title>
    <ns>10</ns>
    <id>15534</id>
    <revision>
      <id>86216</id>
      <timestamp>2016-06-24T20:00:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc fun | cpp/chrono/c/timespec_get | returns the calendar time based on a given time base | notes={{mark since c++17}}}}</text>
      <sha1>7e3mnx6mol08fywtil8gfbodi7sn6zo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc tm</title>
    <ns>10</ns>
    <id>8471</id>
    <revision>
      <id>54931</id>
      <parentid>52278</parentid>
      <timestamp>2013-06-01T05:18:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list tm]] to [[Template:cpp/chrono/c/dsc tm]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">{{dsc class | cpp/chrono/c/tm | calendar time type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/dsc wcsftime</title>
    <ns>10</ns>
    <id>4648</id>
    <revision>
      <id>54937</id>
      <parentid>52279</parentid>
      <timestamp>2013-06-01T05:18:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/dcl list wcsftime]] to [[Template:cpp/chrono/c/dsc wcsftime]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc fun | cpp/chrono/c/wcsftime | converts a tm object to custom wide string textual representation }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/navbar</title>
    <ns>10</ns>
    <id>2052</id>
    <revision>
      <id>39862</id>
      <parentid>36012</parentid>
      <timestamp>2012-09-28T19:57:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="311">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content

|heading4 = cpp/chrono/c/navbar heading
|content4 = cpp/chrono/c/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/navbar content</title>
    <ns>10</ns>
    <id>2593</id>
    <revision>
      <id>86218</id>
      <parentid>52280</parentid>
      <timestamp>2016-06-24T20:01:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0063r3 (c11)</comment>
      <text xml:space="preserve" bytes="722">{{nv begin}}
{{nv h1 | Functions}}
{{nv h2 | Time manipulation}}
{{nv ln | cpp/chrono/c/difftime}}
{{nv ln | cpp/chrono/c/time}}
{{nv ln | cpp/chrono/c/clock}}
{{nv ln | cpp/chrono/c/timespec_get|notes={{mark c++17}}}}

{{nv h2 | Format conversions}}
{{nv ln | cpp/chrono/c/asctime}}
{{nv ln | cpp/chrono/c/ctime}}
{{nv ln | cpp/chrono/c/strftime}}
{{nv ln | cpp/chrono/c/wcsftime}}
{{nv ln | cpp/chrono/c/gmtime}}
{{nv ln | cpp/chrono/c/localtime}}
{{nv ln | cpp/chrono/c/mktime}}

{{nv h1 | Constants}}
{{nv ln | cpp/chrono/c/CLOCKS_PER_SEC}}

{{nv h1 | Types}}
{{nv ln | cpp/chrono/c/tm}}
{{nv ln | cpp/chrono/c/time_t}}
{{nv ln | cpp/chrono/c/clock_t}}
{{nv ln | cpp/chrono/c/timespec|notes={{mark c++17}}}}
{{nv end}}</text>
      <sha1>s2foyysfymith6vqd615wj4kdg1nkxj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/navbar heading</title>
    <ns>10</ns>
    <id>2592</id>
    <revision>
      <id>35540</id>
      <parentid>9782</parentid>
      <timestamp>2012-06-15T22:28:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/c/sidebar heading]] to [[Template:cpp/chrono/c/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="48">[[cpp/chrono/c|C-style date and time utilities]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/c/strftime format</title>
    <ns>10</ns>
    <id>2062</id>
    <revision>
      <id>89244</id>
      <parentid>89243</parentid>
      <timestamp>2017-01-13T00:11:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>not sure if &quot;including century' is clear.. let's just use standard wording for Y</comment>
      <text xml:space="preserve" bytes="10365">The format string consists of zero or more conversion specifiers and ordinary characters (except {{tt|%}}). All ordinary characters, including the terminating null character, are copied to the output string without modification. Each conversion specification begins with {{tt|%}} character, optionally followed by {{tt|E}} or {{tt|O}} modifier (ignored if unsupported by the locale), followed by the character that determines the behavior of the specifier. The following format specifiers are available:

{| class=&quot;wikitable&quot; style=&quot;font-size:85%; max-width:90em;&quot;
|-
! Conversion&lt;br&gt; specifier
! Explanation
! Used fields
|-
! {{tt|%}} 
| writes literal {{tt|%}}. The full conversion specification must be {{tt|%%}}.
|
|-
! {{tt|n}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes newline character
|
|-
! {{tt|t}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes horizontal tab character
|
|-
! colspan=3 | Year
|-
! {{tt|Y}}
| writes '''year''' as a decimal number, e.g. 2017
| {{ttb|tm_year}}
|-
! {{tt|EY}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''year''' in the alternative representation, e.g.平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale
| {{ttb|tm_year}}
|-
! {{tt|y}}
| writes last 2 digits of '''year''' as a decimal number (range {{tt|[00,99]}})
| {{ttb|tm_year}}
|-
! {{tt|Oy}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes last 2 digits of '''year''' using the alternative numeric system, e.g. 十一 instead of 11 in ja_JP locale
| {{ttb|tm_year}}
|-
! {{tt|Ey}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''year''' as offset from locale's alternative calendar period {{tt|%EC}} (locale-dependent)
| {{ttb|tm_year}}
|-
! {{tt|C}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes first 2 digits of '''year''' as a decimal number (range {{tt|[00,99]}})
| {{ttb|tm_year}}
|-
! {{tt|EC}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes name of the '''base year (period)''' in the locale's alternative representation, e.g. 平成 (Heisei era) in ja_JP
| {{ttb|tm_year}}
|-
! {{tt|G}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''ISO 8601 week-based year''', i.e. the year that contains the specified week.
In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:
* Includes January 4
* Includes first Thursday of the year
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|g}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes last 2 digits of '''ISO 8601 week-based year''', i.e. the year that contains the specified week (range {{tt|[00,99]}}).
In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:
* Includes January 4
* Includes first Thursday of the year 
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! colspan=3 | Month
|-
! {{tt|b}}
| writes '''abbreviated month''' name, e.g. {{tt|Oct}} (locale dependent)
| {{ttb|tm_mon}}
|-
! {{tt|h}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| synonym of {{tt|b}}
| {{ttb|tm_mon}}
|-
! {{tt|B}}
| writes '''full month''' name, e.g. {{tt|October}} (locale dependent)
| {{ttb|tm_mon}}
|-
! {{tt|m}}
| writes '''month''' as a decimal number (range {{tt|[01,12]}})
| {{ttb|tm_mon}}
|-
! {{tt|Om}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''month''' using the alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale
| {{ttb|tm_mon}}
|-
! colspan=3 | Week
|-
! {{tt|U}}
| writes '''week of the year''' as a decimal number (Sunday is the first day of the week) (range {{tt|[00,53]}})
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|OU}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''week of the year''', as by {{tt|%U}}, using the alternative numeric system, e.g. 五十二 instead of 52 in ja_JP locale
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|W}}
| writes '''week of the year''' as a decimal number (Monday is the first day of the week) (range {{tt|[00,53]}})
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|OW}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''week of the year''', as by {{tt|%W}}, using the alternative numeric system, e.g. 五十二 instead of 52 in ja_JP locale
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|V}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''ISO 8601 week of the year''' (range {{tt|[01,53]}}).
In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:
* Includes January 4
* Includes first Thursday of the year 
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|OV}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''week of the year''', as by {{tt|%V}}, using the alternative numeric system, e.g. 五十二 instead of 52 in ja_JP locale
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! colspan=3 | Day of the year/month
|-
! {{tt|j}}
| writes '''day of the year''' as a decimal number (range {{tt|[001,366]}})
| {{ttb|tm_yday}}
|-
! {{tt|d}}
| writes '''day of the month''' as a decimal number (range {{tt|[01,31]}})
| {{ttb|tm_mday}}
|-
! {{tt|Od}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes zero-based '''day of the month''' using the alternative numeric system, e.g 二十七 instead of 23 in ja_JP locale
Single character is preceded by a space.
| {{ttb|tm_mday}}
|-
! {{tt|e}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''day of the month''' as a decimal number (range {{tt|[1,31]}}).
Single digit is preceded by a space.
| {{ttb|tm_mday}}
|-
! {{tt|Oe}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes one-based '''day of the month''' using the alternative numeric system, e.g. 二十七 instead of 27 in ja_JP locale
Single character is preceded by a space.
| {{ttb|tm_mday}}
|-
! colspan=3 | Day of the week
|-
! {{tt|a}}
| writes '''abbreviated weekday''' name, e.g. {{tt|Fri}} (locale dependent)
| {{ttb|tm_wday}}
|-
! {{tt|A}}
| writes '''full weekday''' name, e.g. {{tt|Friday}} (locale dependent)
| {{ttb|tm_wday}}
|-
! {{tt|w}}
| writes '''weekday''' as a decimal number, where Sunday is {{tt|0}} (range {{tt|[0-6]}})
| {{ttb|tm_wday}}
|-
! {{tt|Ow}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''weekday''', where Sunday is {{tt|0}}, using the alternative numeric system, e.g. 二 instead of 2 in ja_JP locale
| {{ttb|tm_wday}}
|-
! {{tt|u}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''weekday''' as a decimal number, where Monday is {{tt|1}} (ISO 8601 format) (range {{tt|[1-7]}})
| {{ttb|tm_wday}}
|-
! {{tt|Ou}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''weekday''', where Monday is {{tt|1}}, using the alternative numeric system, e.g. 二 instead of 2 in ja_JP locale
| {{ttb|tm_wday}}
|-
! colspan=3 | Hour, minute, second
|-
! {{tt|H}}
| writes '''hour''' as a decimal number, 24 hour clock (range {{tt|[00-23]}})
| {{ttb|tm_hour}}
|-
! {{tt|OH}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''hour''' from 24-hour clock using the alternative numeric system, e.g. 十八 instead of 18 in ja_JP locale
| {{ttb|tm_hour}}
|-
! {{tt|I}}
| writes '''hour''' as a decimal number, 12 hour clock (range {{tt|[01,12]}})
| {{ttb|tm_hour}}
|-
! {{tt|OI}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''hour''' from 12-hour clock using the alternative numeric system, e.g. 六 instead of 06 in ja_JP locale
| {{ttb|tm_hour}}
|-
! {{tt|M}}
| writes '''minute''' as a decimal number (range {{tt|[00,59]}})
| {{ttb|tm_min}}
|-
! {{tt|OM}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''minute''' using the alternative numeric system, e.g. 二十五 instead of 25 in ja_JP locale
| {{ttb|tm_min}}
|-
! {{tt|S}}
| writes '''second''' as a decimal number (range {{tt|[00,60]}})
| {{ttb|tm_sec}}
|-
! {{tt|OS}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''second''' using the alternative numeric system, e.g. 二十四 instead of 24 in ja_JP locale
| {{ttb|tm_sec}}
|-
! colspan=3 | Other
|-
! {{tt|c}}
| writes '''standard date and time string''', e.g. {{tt|Sun Oct 17 04:41:13 2010}} (locale dependent)
| all
|-
! {{tt|Ec}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''alternative date and time string''', e.g. using 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale
| all
|-
! {{tt|x}}
| writes localized '''date representation''' (locale dependent)
| all
|-
! {{tt|Ex}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''alternative date representation''', e.g. using 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale
| all
|-
! {{tt|X}}
| writes localized '''time representation''' (locale dependent)
| all
|-
! {{tt|EX}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''alternative time representation''' (locale dependent)
| all
|-
! {{tt|D}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| equivalent to '''&quot;%m/%d/%y&quot;'''
| {{ttb|tm_mon}}, {{ttb|tm_mday}}, {{ttb|tm_year}}
|-
! {{tt|F}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| equivalent to '''&quot;%Y-%m-%d&quot;''' (the ISO 8601 date format)
| {{ttb|tm_mon}}, {{ttb|tm_mday}}, {{ttb|tm_year}}
|-
! {{tt|r}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes localized '''12-hour clock''' time (locale dependent)
| {{ttb|tm_hour}}, {{ttb|tm_min}}, {{ttb|tm_sec}}
|-
! {{tt|R}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| equivalent to '''&quot;%H:%M&quot;'''
| {{ttb|tm_hour}}, {{ttb|tm_min}}
|-
! {{tt|T}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| equivalent to '''&quot;%H:%M:%S&quot;''' (the ISO 8601 time format)
| {{ttb|tm_hour}}, {{ttb|tm_min}}, {{ttb|tm_sec}}
|-
! {{tt|p}}
| writes localized '''a.m. or p.m.''' (locale dependent)
| {{ttb|tm_hour}}
|-
! {{tt|z}}&lt;br/&gt;{{#ifeq:{{{1|}}}|c|{{mark c99}}|{{mark c++11}}}}
| writes '''offset from UTC''' in the ISO 8601 format (e.g. {{tt|-0430}}), or no characters if the time zone information is not available
| {{ttb|tm_isdst}}
|-
! {{tt|Z}}
| writes '''time zone name or abbreviation''', or no characters if the time zone information is not available (locale dependent)
| {{ttb|tm_isdst}}
|}</text>
      <sha1>1nlzavoxxqq49bgqmw9gsxirt6l0y5u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/chrono literals namespace</title>
    <ns>10</ns>
    <id>13464</id>
    <revision>
      <id>77546</id>
      <parentid>68731</parentid>
      <timestamp>2015-03-29T16:08:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention the shorter using</comment>
      <text xml:space="preserve" bytes="659">These operators are declared in the namespace {{tt|std::literals::chrono_literals}}, where both {{tt|literals}} and {{tt|chrono_literals}} are inline namespaces. Access to these operators can be gained with {{c|using namespace std::literals}}, {{c|using namespace std::chrono_literals}}, and {{c|using namespace std::literals::chrono_literals}}.

In addition, within the namespace {{tt|std::chrono}}, the directive {{c|using namespace literals::chrono_literals;}} is provided by the standard library, so that if a programmer uses {{c|using namespace std::chrono;}} to gain access to the duration classes, the duration literal operators become visible as well.</text>
      <sha1>i77ojxk0a1joijv11xplfa20lk6rmo7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/clock/now</title>
    <ns>10</ns>
    <id>5278</id>
    <revision>
      <id>91946</id>
      <parentid>77886</parentid>
      <timestamp>2017-03-31T20:17:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1403">{{cpp/chrono/{{{1|}}}/title | now }}
{{cpp/chrono/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
static std::chrono::time_point&lt;std::chrono::{{{1}}}&gt; now();
}}
{{dcl end}}

Returns a time point representing the current point in time.

===Parameters===
(none)

===Return value===
A time point representing the current time.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
|p=true
|code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;numeric&gt;
#include &lt;chrono&gt;

volatile int sink;
int main()
{
    for (auto size = 1ull; size &lt; 1000000000ull; size *= 100) {
        // record start time
        auto start = std::chrono::{{{1|}}}::now();
        // do some work
        std::vector&lt;int&gt; v(size, 42);
        sink = std::accumulate(v.begin(), v.end(), 0u); // make sure it's a side effect
        // record end time
        auto end = std::chrono::{{{1|}}}::now();
        std::chrono::duration&lt;double&gt; diff = end-start;
        std::cout &lt;&lt; &quot;Time to fill and iterate a vector of &quot; 
                  &lt;&lt; size &lt;&lt; &quot; ints : &quot; &lt;&lt; diff.count() &lt;&lt; &quot; s\n&quot;;
    }
}
|output=
Time to fill and iterate a vector of 1 ints : 2.43e-07 s
Time to fill and iterate a vector of 100 ints : 4.1e-07 s
Time to fill and iterate a vector of 10000 ints : 2.519e-05 s
Time to fill and iterate a vector of 1000000 ints : 0.00207669 s
Time to fill and iterate a vector of 100000000 ints : 0.423087 s
}}</text>
      <sha1>3d53tvr9n5zllo10qe81yhmigsbyi9g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc duration</title>
    <ns>10</ns>
    <id>8466</id>
    <revision>
      <id>54940</id>
      <parentid>52281</parentid>
      <timestamp>2013-06-01T05:18:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/dcl list duration]] to [[Template:cpp/chrono/dsc duration]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc tclass | cpp/chrono/duration | a time interval | notes={{mark c++11}}  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc high resolution clock</title>
    <ns>10</ns>
    <id>8470</id>
    <revision>
      <id>54946</id>
      <parentid>52282</parentid>
      <timestamp>2013-06-01T05:18:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/dcl list high resolution clock]] to [[Template:cpp/chrono/dsc high resolution clock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc class | cpp/chrono/high_resolution_clock | the clock with the shortest tick period available | notes={{mark c++11}}  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc operator&quot;&quot;h</title>
    <ns>10</ns>
    <id>12886</id>
    <revision>
      <id>64323</id>
      <timestamp>2013-08-15T17:45:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | cpp/chrono/operator&quot;&quot;h | A {{lc|std::chrono::duration}} literal representing hours | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc operator&quot;&quot;min</title>
    <ns>10</ns>
    <id>12887</id>
    <revision>
      <id>83414</id>
      <parentid>83413</parentid>
      <timestamp>2016-02-08T05:03:44Z</timestamp>
      <contributor>
        <username>Wizardforcel</username>
        <id>4882</id>
      </contributor>
      <comment>Undo revision 83413 by [[Special:Contributions/Wizardforcel|Wizardforcel]] ([[User talk:Wizardforcel|talk]])</comment>
      <text xml:space="preserve" bytes="123">{{dsc fun | cpp/chrono/operator&quot;&quot;min | A {{lc|std::chrono::duration}} literal representing minutes | notes={{mark c++14}}}}</text>
      <sha1>p34qyokilujlhpoau5hbozgnqjypbhq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc operator&quot;&quot;ms</title>
    <ns>10</ns>
    <id>12889</id>
    <revision>
      <id>64331</id>
      <parentid>64326</parentid>
      <timestamp>2013-08-15T17:47:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste typo</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/chrono/operator&quot;&quot;ms | A {{lc|std::chrono::duration}} literal representing milliseconds | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc operator&quot;&quot;ns</title>
    <ns>10</ns>
    <id>12891</id>
    <revision>
      <id>64333</id>
      <parentid>64328</parentid>
      <timestamp>2013-08-15T17:48:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste typo</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | cpp/chrono/operator&quot;&quot;ns | A {{lc|std::chrono::duration}} literal representing nanoseconds | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc operator&quot;&quot;s</title>
    <ns>10</ns>
    <id>12888</id>
    <revision>
      <id>64330</id>
      <parentid>64325</parentid>
      <timestamp>2013-08-15T17:47:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste typo</comment>
      <text xml:space="preserve" bytes="121">{{dsc fun | cpp/chrono/operator&quot;&quot;s | A {{lc|std::chrono::duration}} literal representing seconds | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc operator&quot;&quot;us</title>
    <ns>10</ns>
    <id>12890</id>
    <revision>
      <id>64332</id>
      <parentid>64327</parentid>
      <timestamp>2013-08-15T17:47:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste typo</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/chrono/operator&quot;&quot;us | A {{lc|std::chrono::duration}} literal representing microseconds | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc steady clock</title>
    <ns>10</ns>
    <id>8469</id>
    <revision>
      <id>54949</id>
      <parentid>52283</parentid>
      <timestamp>2013-06-01T05:18:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/dcl list steady clock]] to [[Template:cpp/chrono/dsc steady clock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc class | cpp/chrono/steady_clock | monotonic clock that will never be adjusted | notes={{mark c++11}}  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc system clock</title>
    <ns>10</ns>
    <id>8468</id>
    <revision>
      <id>54951</id>
      <parentid>52284</parentid>
      <timestamp>2013-06-01T05:18:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/dcl list system clock]] to [[Template:cpp/chrono/dsc system clock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc class | cpp/chrono/system_clock | wall clock time from the system-wide realtime clock  | notes={{mark c++11}}  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/dsc time point</title>
    <ns>10</ns>
    <id>8467</id>
    <revision>
      <id>54954</id>
      <parentid>52285</parentid>
      <timestamp>2013-06-01T05:18:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/dcl list time point]] to [[Template:cpp/chrono/dsc time point]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc tclass | cpp/chrono/time_point | a point in time | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration values/dsc max</title>
    <ns>10</ns>
    <id>8638</id>
    <revision>
      <id>55003</id>
      <parentid>52300</parentid>
      <timestamp>2013-06-01T05:19:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration values/dcl list max]] to [[Template:cpp/chrono/duration values/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem sfun | cpp/chrono/duration_values/max | returns the largest possible representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration values/dsc min</title>
    <ns>10</ns>
    <id>8637</id>
    <revision>
      <id>55009</id>
      <parentid>52301</parentid>
      <timestamp>2013-06-01T05:19:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration values/dcl list min]] to [[Template:cpp/chrono/duration values/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem sfun | cpp/chrono/duration_values/min | returns the smallest possible representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration values/dsc zero</title>
    <ns>10</ns>
    <id>8639</id>
    <revision>
      <id>55012</id>
      <parentid>52302</parentid>
      <timestamp>2013-06-01T05:19:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration values/dcl list zero]] to [[Template:cpp/chrono/duration values/dsc zero]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem sfun | cpp/chrono/duration_values/zero | returns a zero-length representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration values/navbar</title>
    <ns>10</ns>
    <id>8647</id>
    <revision>
      <id>39864</id>
      <parentid>36374</parentid>
      <timestamp>2012-09-28T19:57:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="433">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content

|heading4 = cpp/chrono/duration/navbar heading
|content4 = cpp/chrono/duration/navbar content

|heading5 = cpp/chrono/duration_values/navbar heading
|content5 = cpp/chrono/duration_values/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration values/navbar content</title>
    <ns>10</ns>
    <id>8645</id>
    <revision>
      <id>52303</id>
      <parentid>36372</parentid>
      <timestamp>2013-06-01T04:43:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="194">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/chrono/duration_values/zero}}
{{nv mem ln | cpp/chrono/duration_values/min}}
{{nv mem ln | cpp/chrono/duration_values/max}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration values/navbar heading</title>
    <ns>10</ns>
    <id>8646</id>
    <revision>
      <id>36373</id>
      <timestamp>2012-06-18T15:08:06Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="63">{{ltt|cpp/chrono/duration_values|std::chrono::duration_values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration values/title</title>
    <ns>10</ns>
    <id>8644</id>
    <revision>
      <id>36369</id>
      <timestamp>2012-06-18T13:56:45Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="120">&lt;onlyinclude&gt;{{cpp/title | n=chrono::duration_values::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc abs</title>
    <ns>10</ns>
    <id>14495</id>
    <revision>
      <id>81518</id>
      <parentid>81514</parentid>
      <timestamp>2015-10-27T15:50:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mark as overload (a-la abs(std::complex))</comment>
      <text xml:space="preserve" bytes="154">{{dsc tfun | cpp/chrono/duration/abs | title=abs{{dsc small|(std::chrono::duration)}} | obtains the absolute value of the duration|notes={{mark c++17}} }}</text>
      <sha1>g7dsqxzujwju1vn1fw50nr5x8ccqcwa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc ceil</title>
    <ns>10</ns>
    <id>14490</id>
    <revision>
      <id>81516</id>
      <parentid>81512</parentid>
      <timestamp>2015-10-27T15:50:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark as overload</comment>
      <text xml:space="preserve" bytes="158">{{dsc tfun | cpp/chrono/duration/ceil | title=ceil{{dsc small|(std::chrono::duration)}}  | converts a duration to another, rounding up|notes={{mark c++17}} }}</text>
      <sha1>t583xjq9o9nxe6dk3o7n86tmm0jigki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc common type</title>
    <ns>10</ns>
    <id>3410</id>
    <revision>
      <id>54956</id>
      <parentid>52286</parentid>
      <timestamp>2013-06-01T05:18:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list common type]] to [[Template:cpp/chrono/duration/dsc common type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc ptclass | cpp/chrono/duration/common_type | title=std::common_type{{dsc small|&lt;std::chrono::duration&gt;}} | specializes the {{lc|std::common_type}} trait}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc constructor</title>
    <ns>10</ns>
    <id>8621</id>
    <revision>
      <id>54959</id>
      <parentid>52287</parentid>
      <timestamp>2013-06-01T05:18:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list constructor]] to [[Template:cpp/chrono/duration/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem ctor | cpp/chrono/duration/duration | constructs new duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc count</title>
    <ns>10</ns>
    <id>8623</id>
    <revision>
      <id>54963</id>
      <parentid>52288</parentid>
      <timestamp>2013-06-01T05:18:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list count]] to [[Template:cpp/chrono/duration/dsc count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/chrono/duration/count | returns the count of ticks}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc duration cast</title>
    <ns>10</ns>
    <id>8633</id>
    <revision>
      <id>54966</id>
      <parentid>52289</parentid>
      <timestamp>2013-06-01T05:18:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list duration cast]] to [[Template:cpp/chrono/duration/dsc duration cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc tfun | cpp/chrono/duration/duration_cast | converts a duration to another, with a different tick interval}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc floor</title>
    <ns>10</ns>
    <id>14489</id>
    <revision>
      <id>81515</id>
      <parentid>81505</parentid>
      <timestamp>2015-10-27T15:49:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark as overload</comment>
      <text xml:space="preserve" bytes="161">{{dsc tfun | cpp/chrono/duration/floor | title=floor{{dsc small|(std::chrono::duration)}} | converts a duration to another, rounding down|notes={{mark c++17}} }}</text>
      <sha1>lukevk1t0ocrw97hhoopmmimqir77k8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc max</title>
    <ns>10</ns>
    <id>8626</id>
    <revision>
      <id>54969</id>
      <parentid>52290</parentid>
      <timestamp>2013-06-01T05:18:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list max]] to [[Template:cpp/chrono/duration/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem sfun | cpp/chrono/duration/max | returns the special duration value max}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc min</title>
    <ns>10</ns>
    <id>8625</id>
    <revision>
      <id>54975</id>
      <parentid>52291</parentid>
      <timestamp>2013-06-01T05:18:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list min]] to [[Template:cpp/chrono/duration/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem sfun | cpp/chrono/duration/min | returns the special duration value min}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc operator arith</title>
    <ns>10</ns>
    <id>8627</id>
    <revision>
      <id>54980</id>
      <parentid>52293</parentid>
      <timestamp>2013-06-01T05:18:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list operator arith]] to [[Template:cpp/chrono/duration/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/chrono/duration/operator_arith | title=operator+&lt;br&gt;operator-| implements unary + and unary -}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc operator arith2</title>
    <ns>10</ns>
    <id>8628</id>
    <revision>
      <id>54983</id>
      <parentid>52294</parentid>
      <timestamp>2013-06-01T05:18:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list operator arith2]] to [[Template:cpp/chrono/duration/dsc operator arith2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="193">{{dsc mem fun | cpp/chrono/duration/operator_arith2 | title=operator++&lt;br&gt;operator++{{dsc small|(int)}}&lt;br&gt;operator--&lt;br&gt;operator--{{dsc small|(int)}}| increments or decrements the tick count}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc operator arith3</title>
    <ns>10</ns>
    <id>8629</id>
    <revision>
      <id>54985</id>
      <parentid>52295</parentid>
      <timestamp>2013-06-01T05:18:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list operator arith3]] to [[Template:cpp/chrono/duration/dsc operator arith3]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="182">{{dsc mem fun | cpp/chrono/duration/operator_arith3 | title=operator+=&lt;br&gt;operator-=&lt;br&gt;operator*=&lt;br&gt;operator/=&lt;br&gt;operator%=| implements compound assignment between two durations}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc operator arith4</title>
    <ns>10</ns>
    <id>9402</id>
    <revision>
      <id>54990</id>
      <parentid>52296</parentid>
      <timestamp>2013-06-01T05:18:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list operator arith4]] to [[Template:cpp/chrono/duration/dsc operator arith4]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="183">{{dsc tfun | cpp/chrono/duration/operator_arith4 | title=operator+&lt;br&gt;operator-&lt;br&gt;operator*&lt;br&gt;operator/&lt;br&gt;operator% | implements arithmetic operations with durations as arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc operator cmp</title>
    <ns>10</ns>
    <id>9403</id>
    <revision>
      <id>54994</id>
      <parentid>52297</parentid>
      <timestamp>2013-06-01T05:18:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list operator cmp]] to [[Template:cpp/chrono/duration/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc tfun | cpp/chrono/duration/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares two durations}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc operator=</title>
    <ns>10</ns>
    <id>8622</id>
    <revision>
      <id>54978</id>
      <parentid>52292</parentid>
      <timestamp>2013-06-01T05:18:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list operator=]] to [[Template:cpp/chrono/duration/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/chrono/duration/operator{{=}} | assigns the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc round</title>
    <ns>10</ns>
    <id>14491</id>
    <revision>
      <id>81517</id>
      <parentid>81513</parentid>
      <timestamp>2015-10-27T15:50:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark as overload</comment>
      <text xml:space="preserve" bytes="181">{{dsc tfun | cpp/chrono/duration/round | title=round{{dsc small|(std::chrono::duration)}} | converts a duration to another, rounding to nearest, ties to even|notes={{mark c++17}} }}</text>
      <sha1>koe7rmn7iovgrkci7qg7xvs6lh1u9al</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/dsc zero</title>
    <ns>10</ns>
    <id>8624</id>
    <revision>
      <id>54999</id>
      <parentid>52298</parentid>
      <timestamp>2013-06-01T05:18:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/dcl list zero]] to [[Template:cpp/chrono/duration/dsc zero]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem sfun | cpp/chrono/duration/zero | returns the special duration value zero}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/navbar</title>
    <ns>10</ns>
    <id>5054</id>
    <revision>
      <id>39863</id>
      <parentid>36014</parentid>
      <timestamp>2012-09-28T19:57:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="324">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content

|heading4 = cpp/chrono/duration/navbar heading
|content4 = cpp/chrono/duration/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/navbar content</title>
    <ns>10</ns>
    <id>8630</id>
    <revision>
      <id>81522</id>
      <parentid>66475</parentid>
      <timestamp>2015-10-27T15:54:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+p0092r1 stuff</comment>
      <text xml:space="preserve" bytes="1714">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/chrono/duration/duration}}
{{nv mem ln | cpp/chrono/duration/operator{{=}} }}
{{nv mem ln | cpp/chrono/duration/count}}
{{nv mem ln | cpp/chrono/duration/zero}}
{{nv mem ln | cpp/chrono/duration/min}}
{{nv mem ln | cpp/chrono/duration/max}}
{{nv mem ln | cpp/chrono/duration/operator_arith | operator+ | operator-}}
{{nv mem ln | cpp/chrono/duration/operator_arith2 | operator++ | operator--}}
{{nv mem ln | cpp/chrono/duration/operator_arith3 | operator+{{=}} | operator-{{=}} | operator*{{=}} | operator/{{=}} | operator%{{=}} }}
{{nv h1 | Non-member functions}}
{{nv col begin}}
{{nv ln | cpp/chrono/duration/operator_arith4 | operator+ | operator- | operator* | operator/ | operator% }}
{{nv ln | cpp/chrono/duration/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}} }}
{{nv col next}}
{{nv ln | cpp/chrono/duration/common_type }}
{{nv ln | cpp/chrono/duration/duration_cast }}
{{nv ln | cpp/chrono/duration/floor|notes={{mark c++17}} }}
{{nv ln | cpp/chrono/duration/ceil|notes={{mark c++17}} }}
{{nv ln | cpp/chrono/duration/round|notes={{mark c++17}} }}
{{nv ln | cpp/chrono/duration/abs|notes={{mark c++17}} }}
{{nv ln | cpp/chrono/operator&quot;&quot;h|notes={{mark c++14}}}}
{{nv ln | cpp/chrono/operator&quot;&quot;min|notes={{mark c++14}}}}
{{nv ln | cpp/chrono/operator&quot;&quot;s|notes={{mark c++14}}}}
{{nv ln | cpp/chrono/operator&quot;&quot;ms|notes={{mark c++14}}}}
{{nv ln | cpp/chrono/operator&quot;&quot;us|notes={{mark c++14}}}}
{{nv ln | cpp/chrono/operator&quot;&quot;ns|notes={{mark c++14}}}}
{{nv col end}}
{{nv h1 | Helper classes}}
{{nv ln | cpp/chrono/treat_as_floating_point }}
{{nv ln | cpp/chrono/duration_values}}
{{nv end}}</text>
      <sha1>4dq44zegsnju3lzd97cygsmz5m5sl16</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/navbar heading</title>
    <ns>10</ns>
    <id>5056</id>
    <revision>
      <id>35542</id>
      <parentid>18303</parentid>
      <timestamp>2012-06-15T22:28:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/duration/sidebar heading]] to [[Template:cpp/chrono/duration/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="49">{{ltt|cpp/chrono/duration|std::chrono::duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/duration/title</title>
    <ns>10</ns>
    <id>8475</id>
    <revision>
      <id>31219</id>
      <timestamp>2012-05-16T05:03:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=chrono::duration::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/high resolution clock/navbar</title>
    <ns>10</ns>
    <id>5264</id>
    <revision>
      <id>39865</id>
      <parentid>36016</parentid>
      <timestamp>2012-09-28T19:57:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="350">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content

|heading4 = cpp/chrono/high_resolution_clock/navbar heading
|content4 = cpp/chrono/high_resolution_clock/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/high resolution clock/navbar content</title>
    <ns>10</ns>
    <id>5276</id>
    <revision>
      <id>52304</id>
      <parentid>35544</parentid>
      <timestamp>2013-06-01T04:43:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="105">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/chrono/high_resolution_clock/now}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/high resolution clock/navbar heading</title>
    <ns>10</ns>
    <id>5268</id>
    <revision>
      <id>35536</id>
      <parentid>19190</parentid>
      <timestamp>2012-06-15T22:28:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/high resolution clock/sidebar heading]] to [[Template:cpp/chrono/high resolution clock/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="75">{{ltt|cpp/chrono/high_resolution_clock|std::chrono::high_resolution_clock}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/high resolution clock/title</title>
    <ns>10</ns>
    <id>5281</id>
    <revision>
      <id>19208</id>
      <timestamp>2012-02-29T16:41:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">&lt;onlyinclude&gt;{{cpp/title | n=chrono::high_resolution_clock::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/navbar</title>
    <ns>10</ns>
    <id>2039</id>
    <revision>
      <id>39866</id>
      <parentid>36017</parentid>
      <timestamp>2012-09-28T19:57:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="229">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/navbar content</title>
    <ns>10</ns>
    <id>2715</id>
    <revision>
      <id>52305</id>
      <parentid>36470</parentid>
      <timestamp>2013-06-01T04:43:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="371">{{nv begin}}
{{nv ln | cpp/chrono/time_point | notes={{mark c++11}}}}
{{nv ln | cpp/chrono/duration | notes={{mark c++11}}}}
{{nv ln | cpp/chrono/system_clock | notes={{mark c++11}}}}
{{nv ln | cpp/chrono/steady_clock | notes={{mark c++11}}}}
{{nv ln | cpp/chrono/high_resolution_clock | notes={{mark c++11}}}}
{{nv | [[cpp/chrono/c | C-style date and time]]}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/navbar heading</title>
    <ns>10</ns>
    <id>2040</id>
    <revision>
      <id>35546</id>
      <parentid>4345</parentid>
      <timestamp>2012-06-15T22:28:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/sidebar heading]] to [[Template:cpp/chrono/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="38">[[cpp/chrono|Date and time utilities]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/steady clock/navbar</title>
    <ns>10</ns>
    <id>5263</id>
    <revision>
      <id>39867</id>
      <parentid>36018</parentid>
      <timestamp>2012-09-28T19:57:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="332">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content

|heading4 = cpp/chrono/steady_clock/navbar heading
|content4 = cpp/chrono/steady_clock/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/steady clock/navbar content</title>
    <ns>10</ns>
    <id>5275</id>
    <revision>
      <id>52306</id>
      <parentid>35548</parentid>
      <timestamp>2013-06-01T04:43:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="96">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/chrono/steady_clock/now}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/steady clock/navbar heading</title>
    <ns>10</ns>
    <id>5265</id>
    <revision>
      <id>35549</id>
      <parentid>19185</parentid>
      <timestamp>2012-06-15T22:28:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/steady clock/sidebar heading]] to [[Template:cpp/chrono/steady clock/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="57">{{ltt|cpp/chrono/steady_clock|std::chrono::steady_clock}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/steady clock/title</title>
    <ns>10</ns>
    <id>5282</id>
    <revision>
      <id>19209</id>
      <timestamp>2012-02-29T16:41:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=chrono::steady_clock::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/system clock/dsc from time t</title>
    <ns>10</ns>
    <id>5273</id>
    <revision>
      <id>55016</id>
      <parentid>52307</parentid>
      <timestamp>2013-06-01T05:19:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/system clock/dcl list from time t]] to [[Template:cpp/chrono/system clock/dsc from time t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem sfun | cpp/chrono/system_clock/from_time_t | converts {{lc|std::time_t}} to a system clock time point}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/system clock/dsc now</title>
    <ns>10</ns>
    <id>5271</id>
    <revision>
      <id>55020</id>
      <parentid>52308</parentid>
      <timestamp>2013-06-01T05:19:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/system clock/dcl list now]] to [[Template:cpp/chrono/system clock/dsc now]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc mem sfun | cpp/chrono/system_clock/now  | returns a {{lc|std::chrono::time_point}} representing the current point in time}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/system clock/dsc to time t</title>
    <ns>10</ns>
    <id>5272</id>
    <revision>
      <id>55023</id>
      <parentid>52309</parentid>
      <timestamp>2013-06-01T05:19:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/system clock/dcl list to time t]] to [[Template:cpp/chrono/system clock/dsc to time t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem sfun | cpp/chrono/system_clock/to_time_t | converts a system clock time point to {{lc|std::time_t}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/system clock/navbar</title>
    <ns>10</ns>
    <id>5262</id>
    <revision>
      <id>39868</id>
      <parentid>36000</parentid>
      <timestamp>2012-09-28T19:57:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="333">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content

|heading4 = cpp/chrono/system_clock/navbar heading
|content4 = cpp/chrono/system_clock/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/system clock/navbar content</title>
    <ns>10</ns>
    <id>5274</id>
    <revision>
      <id>52310</id>
      <parentid>34003</parentid>
      <timestamp>2013-06-01T04:43:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="198">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/chrono/system_clock/now}}
{{nv mem ln | cpp/chrono/system_clock/to_time_t}}
{{nv mem ln | cpp/chrono/system_clock/from_time_t}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/system clock/navbar heading</title>
    <ns>10</ns>
    <id>5267</id>
    <revision>
      <id>35550</id>
      <parentid>19187</parentid>
      <timestamp>2012-06-15T22:28:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/system clock/sidebar heading]] to [[Template:cpp/chrono/system clock/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="57">{{ltt|cpp/chrono/system_clock|std::chrono::system_clock}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/system clock/title</title>
    <ns>10</ns>
    <id>5270</id>
    <revision>
      <id>19192</id>
      <timestamp>2012-02-29T16:30:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=chrono::system_clock::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time poind/dsc time since epoch</title>
    <ns>10</ns>
    <id>9534</id>
    <revision>
      <id>55027</id>
      <parentid>52311</parentid>
      <timestamp>2013-06-01T05:19:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time poind/dcl list time since epoch]] to [[Template:cpp/chrono/time poind/dsc time since epoch]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/chrono/time_point/time_since_epoch | returns the time point as duration since the start of its clock }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc ceil</title>
    <ns>10</ns>
    <id>14493</id>
    <revision>
      <id>81520</id>
      <parentid>81511</parentid>
      <timestamp>2015-10-27T15:51:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark as overload</comment>
      <text xml:space="preserve" bytes="163">{{dsc tfun | cpp/chrono/time_point/ceil | title=ceil{{dsc small|(std::chrono::time_point)}} | converts a time_point to another, rounding up|notes={{mark c++17}} }}</text>
      <sha1>hpbpi2wl80nqw284ss5gzwfjss3vegd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc common type</title>
    <ns>10</ns>
    <id>3411</id>
    <revision>
      <id>55030</id>
      <parentid>52312</parentid>
      <timestamp>2013-06-01T05:19:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time point/dcl list common type]] to [[Template:cpp/chrono/time point/dsc common type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc ptclass | cpp/chrono/time_point/common_type | title=std::common_type{{dsc small|&lt;std::chrono::time_point&gt;}} | specializes the {{lc|std::common_type}} trait}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc constructor</title>
    <ns>10</ns>
    <id>9533</id>
    <revision>
      <id>55035</id>
      <parentid>52313</parentid>
      <timestamp>2013-06-01T05:19:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time point/dcl list constructor]] to [[Template:cpp/chrono/time point/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem ctor | cpp/chrono/time_point/time_point | constructs a new time point}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc floor</title>
    <ns>10</ns>
    <id>14492</id>
    <revision>
      <id>81519</id>
      <parentid>81508</parentid>
      <timestamp>2015-10-27T15:51:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mask as overload</comment>
      <text xml:space="preserve" bytes="167">{{dsc tfun | cpp/chrono/time_point/floor | title=floor{{dsc small|(std::chrono::time_point)}} | converts a time_point to another, rounding down|notes={{mark c++17}} }}</text>
      <sha1>ma07m0b35ftkggvnthdiv8nwtp1jvkp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc max</title>
    <ns>10</ns>
    <id>8655</id>
    <revision>
      <id>55038</id>
      <parentid>52314</parentid>
      <timestamp>2013-06-01T05:19:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time point/dcl list max]] to [[Template:cpp/chrono/time point/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem sfun | cpp/chrono/time_point/max | returns the time point corresponding to the largest duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc min</title>
    <ns>10</ns>
    <id>8654</id>
    <revision>
      <id>55044</id>
      <parentid>52315</parentid>
      <timestamp>2013-06-01T05:19:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time point/dcl list min]] to [[Template:cpp/chrono/time point/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem sfun | cpp/chrono/time_point/min | returns the time point corresponding to the smallest duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc operator arith</title>
    <ns>10</ns>
    <id>9535</id>
    <revision>
      <id>61304</id>
      <parentid>55046</parentid>
      <timestamp>2013-06-05T21:15:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem fun | cpp/chrono/time_point/operator_arith | title=operator+=&lt;br&gt;operator-= | modifies the time point by the given duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc operator arith2</title>
    <ns>10</ns>
    <id>9536</id>
    <revision>
      <id>61292</id>
      <parentid>55051</parentid>
      <timestamp>2013-06-05T14:24:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/chrono/time_point/operator_arith2 | title=operator+&lt;br&gt;operator- | modifies the time point by the given duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc operator cmp</title>
    <ns>10</ns>
    <id>9537</id>
    <revision>
      <id>55055</id>
      <parentid>52318</parentid>
      <timestamp>2013-06-01T05:19:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time point/dcl list operator cmp]] to [[Template:cpp/chrono/time point/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc tfun | cpp/chrono/time_point/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares two time points}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc round</title>
    <ns>10</ns>
    <id>14494</id>
    <revision>
      <id>81521</id>
      <parentid>81510</parentid>
      <timestamp>2015-10-27T15:51:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark as overload</comment>
      <text xml:space="preserve" bytes="187">{{dsc tfun | cpp/chrono/time_point/round | title=round{{dsc small|(std::chrono::time_point)}} | converts a time_point to another, rounding to nearest, ties to even|notes={{mark c++17}} }}</text>
      <sha1>kdolzn4wib0p7s43xhigyitlm412m3t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/dsc time point cast</title>
    <ns>10</ns>
    <id>9538</id>
    <revision>
      <id>55059</id>
      <parentid>52319</parentid>
      <timestamp>2013-06-01T05:19:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time point/dcl list time point cast]] to [[Template:cpp/chrono/time point/dsc time point cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc tfun | cpp/chrono/time_point/time_point_cast | converts a time point to another time point on the same clock, with a different duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/navbar</title>
    <ns>10</ns>
    <id>5055</id>
    <revision>
      <id>39869</id>
      <parentid>36019</parentid>
      <timestamp>2012-09-28T19:57:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="328">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/chrono/navbar heading
|content3 = cpp/chrono/navbar content

|heading4 = cpp/chrono/time_point/navbar heading
|content4 = cpp/chrono/time_point/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/navbar content</title>
    <ns>10</ns>
    <id>8652</id>
    <revision>
      <id>81523</id>
      <parentid>52320</parentid>
      <timestamp>2015-10-27T15:55:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+p0092r1 stuff</comment>
      <text xml:space="preserve" bytes="847">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/chrono/time_point/time_point}}
{{nv mem ln | cpp/chrono/time_point/time_since_epoch}}
{{nv mem ln | cpp/chrono/time_point/operator_arith | operator+ | operator-}}
{{nv mem ln | cpp/chrono/time_point/min}}
{{nv mem ln | cpp/chrono/time_point/max}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/chrono/time_point/common_type }}
{{nv ln | cpp/chrono/time_point/operator_arith2 | operator+ | operator-}}
{{nv ln | cpp/chrono/time_point/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}} }}
{{nv ln | cpp/chrono/time_point/time_point_cast }}
{{nv ln | cpp/chrono/time_point/floor|notes={{mark c++17}} }}
{{nv ln | cpp/chrono/time_point/ceil|notes={{mark c++17}} }}
{{nv ln | cpp/chrono/time_point/round|notes={{mark c++17}} }}
{{nv end}}</text>
      <sha1>p9tz5rv4lsp9k1q334q21uklwer4wya</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/navbar heading</title>
    <ns>10</ns>
    <id>5057</id>
    <revision>
      <id>35552</id>
      <parentid>18304</parentid>
      <timestamp>2012-06-15T22:28:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/chrono/time point/sidebar heading]] to [[Template:cpp/chrono/time point/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="53">{{ltt|cpp/chrono/time_point|std::chrono::time_point}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/time point/title</title>
    <ns>10</ns>
    <id>8650</id>
    <revision>
      <id>36413</id>
      <timestamp>2012-06-19T15:32:50Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=chrono::time_point::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/chrono/title</title>
    <ns>10</ns>
    <id>5052</id>
    <revision>
      <id>18297</id>
      <timestamp>2012-01-29T16:02:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=chrono::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/codecvt/title</title>
    <ns>10</ns>
    <id>4436</id>
    <revision>
      <id>15808</id>
      <timestamp>2011-12-15T18:43:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=codecvt::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/concept/concept note</title>
    <ns>10</ns>
    <id>5544</id>
    <revision>
      <id>20409</id>
      <timestamp>2012-03-25T14:25:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="192">Note, that the standard doesn't define a named requirement or concept with this name. This is a type category defined by the core language. It is included here as concept only for consistency.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/concept/navbar</title>
    <ns>10</ns>
    <id>5423</id>
    <revision>
      <id>39870</id>
      <parentid>35553</parentid>
      <timestamp>2012-09-28T19:57:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="154">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/concept/navbar heading
|content2 = cpp/concept/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/concept/navbar content</title>
    <ns>10</ns>
    <id>5425</id>
    <revision>
      <id>86193</id>
      <parentid>78671</parentid>
      <timestamp>2016-06-24T18:13:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>P0346R1: URNG -&gt; URBG</comment>
      <text xml:space="preserve" bytes="4061">{{nv begin}}

{{nv h1 | Basic}}
{{nv col begin}}
{{nv ln | cpp/concept/DefaultConstructible}}
{{nv ln | cpp/concept/CopyAssignable}}
{{nv ln | cpp/concept/CopyConstructible}}
{{nv col next}}
{{nv ln | cpp/concept/MoveAssignable | notes={{mark c++11}}}}
{{nv ln | cpp/concept/MoveConstructible | notes={{mark c++11}}}}
{{nv ln | cpp/concept/Destructible}}
{{nv col end}}

{{nv h1 | Layout}}
{{nv col begin}}
{{nv ln | cpp/concept/TrivialType | notes={{mark c++11}}}}
{{nv ln | cpp/concept/TriviallyCopyable | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/concept/StandardLayoutType | notes={{mark c++11}}}}
{{nv ln | cpp/concept/PODType}}
{{nv col end}}

{{nv h1 | Library-Wide}}
{{nv col begin}}
{{nv ln | cpp/concept/EqualityComparable}}
{{nv ln | cpp/concept/LessThanComparable}}
{{nv ln | cpp/concept/Swappable | notes={{mark c++11}} }}
{{nv ln | cpp/concept/ValueSwappable | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/concept/NullablePointer | notes={{mark c++11}} }}
{{nv ln | cpp/concept/Hash | notes={{mark c++11}} }}
{{nv ln | cpp/concept/Allocator}}
{{nv col end}}

{{nv h1 | Container}}
{{nv col begin}}
{{nv ln | cpp/concept/Container}}
{{nv ln | cpp/concept/SequenceContainer}}
{{nv ln | cpp/concept/ContiguousContainer|notes={{mark c++17}}}}
{{nv ln | cpp/concept/ReversibleContainer}}
{{nv col next}}
{{nv ln | cpp/concept/AssociativeContainer}}
{{nv ln | cpp/concept/AllocatorAwareContainer}}
{{nv ln | cpp/concept/UnorderedAssociativeContainer | notes={{mark c++11}} }}
{{nv col end}}
{{nv h2 | Container Elements}}
{{nv col begin}}
{{nv ln | cpp/concept/DefaultInsertable | notes={{mark c++11}} }}
{{nv ln | cpp/concept/CopyInsertable | notes={{mark c++11}} }}
{{nv ln | cpp/concept/MoveInsertable | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/concept/EmplaceConstructible | notes={{mark c++11}} }}
{{nv ln | cpp/concept/Erasable | notes={{mark c++11}} }}
{{nv col end}}

{{nv h1 | Iterator}}
{{nv col begin}}
{{nv ln | cpp/concept/Iterator}}
{{nv ln | cpp/concept/OutputIterator}}
{{nv ln | cpp/concept/InputIterator}}
{{nv col next}}
{{nv ln | cpp/concept/ForwardIterator}}
{{nv ln | cpp/concept/BidirectionalIterator}}
{{nv ln | cpp/concept/RandomAccessIterator}}
{{nv ln | cpp/concept/ContiguousIterator | notes={{mark c++17}}}}
{{nv col end}}

{{nv h1 | Stream I/O}}
{{nv col begin}}
{{nv ln | cpp/concept/FormattedInputFunction}}
{{nv ln | cpp/concept/UnformattedInputFunction}}
{{nv col next}}
{{nv ln | cpp/concept/FormattedOutputFunction}}
{{nv ln | cpp/concept/UnformattedOutputFunction}}
{{nv col end}}

{{nv h1 | Random Numbers}}
{{nv col begin}}
{{nv ln | cpp/concept/SeedSequence | notes={{mark c++11}} }}
{{nv ln | cpp/concept/RandomNumberEngine|notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/concept/RandomNumberDistribution | notes={{mark c++11}} }}
{{nv ln | cpp/concept/UniformRandomBitGenerator | notes={{mark c++11}} }}
{{nv ln | cpp/concept/RandomNumberEngineAdaptor | notes={{mark c++11}} }}
{{nv col end}}

{{nv h1 | Concurrency}}
{{nv col begin}}
{{nv ln | cpp/concept/BasicLockable | notes={{mark c++11}} }}
{{nv ln | cpp/concept/Lockable | notes={{mark c++11}} }}
{{nv ln | cpp/concept/TimedLockable | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/concept/Mutex | notes={{mark c++11}} }}
{{nv ln | cpp/concept/TimedMutex | notes={{mark c++11}} }}
{{nv ln | cpp/concept/SharedMutex | notes={{mark c++17}} }}
{{nv ln | cpp/concept/SharedTimedMutex | notes={{mark c++14}} }}
{{nv col end}}

{{nv h1 | Other}}
{{nv col begin}}
{{nv ln | cpp/concept/CharTraits }}
{{nv ln | cpp/concept/pos_type }}
{{nv ln | cpp/concept/off_type}}
{{nv ln | cpp/concept/Clock | notes={{mark c++11}} }}
{{nv ln | cpp/concept/BitmaskType }}
{{nv col next}}
{{nv ln | cpp/concept/UnaryTypeTrait | notes={{mark c++11}} }}
{{nv ln | cpp/concept/BinaryTypeTrait | notes={{mark c++11}} }}
{{nv ln | cpp/concept/TransformationTrait | notes={{mark c++11}} }}
{{nv ln | cpp/concept/TrivialClock | notes={{mark c++11}} }}
{{nv ln | cpp/concept/LiteralType |notes={{mark c++11}} }}
{{nv col end}}

{{nv end}}</text>
      <sha1>ecxitdettx8wt4a81iwt0fbc037eaee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/concept/navbar heading</title>
    <ns>10</ns>
    <id>5424</id>
    <revision>
      <id>35555</id>
      <parentid>19661</parentid>
      <timestamp>2012-06-15T22:28:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/concept/sidebar heading]] to [[Template:cpp/concept/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="30">[[cpp/concept | C++ concepts]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/concept/title</title>
    <ns>10</ns>
    <id>5421</id>
    <revision>
      <id>19637</id>
      <timestamp>2012-03-11T12:41:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="70">&lt;onlyinclude&gt;{{title | {{small|C++ concepts:}} {{{1}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container adaptor/operator cmp</title>
    <ns>10</ns>
    <id>9090</id>
    <revision>
      <id>52551</id>
      <parentid>47050</parentid>
      <timestamp>2013-06-01T04:49:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1582">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;={{small|(std::{{{1}}})}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{cpp/container/get_types|{{{1|}}}}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; {{#var:types}} &gt;
bool operator==( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; {{#var:types}} &gt;
bool operator!=( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=3 | 1=
template&lt; {{#var:types}} &gt;
bool operator&lt;( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=4 | 1=
template&lt; {{#var:types}} &gt;
bool operator&lt;=( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=5 | 1=
template&lt; {{#var:types}} &gt;
bool operator&gt;( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=6 | 1=
template&lt; {{#var:types}} &gt;
bool operator&gt;=( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl end}}

Compares the contents of the underlying containers of two container adaptors. The comparison is done by applying the corresponding operator to the underlying containers.

===Parameters===
{{par begin}}
{{par | lhs, rhs | container adaptors whose contents to compare}}
{{par req concept | T | EqualityComparable}}
{{par end}} 

===Return value===
{{c|true}} if the corresponding comparison yields {{c|true}}, {{c|false}} otherwise.

===Complexity===
Linear in the size of the container</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container//navbar</title>
    <ns>10</ns>
    <id>1905</id>
    <redirect title="Template:cpp/container/navbar" />
    <revision>
      <id>36847</id>
      <parentid>35556</parentid>
      <timestamp>2012-07-02T17:52:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Template:cpp/container/navbar]]</comment>
      <text xml:space="preserve" bytes="43">#redirect [[Template:cpp/container/navbar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container//title</title>
    <ns>10</ns>
    <id>1906</id>
    <revision>
      <id>3811</id>
      <parentid>3810</parentid>
      <timestamp>2011-06-06T23:02:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container//value compare/title</title>
    <ns>10</ns>
    <id>9935</id>
    <revision>
      <id>47093</id>
      <timestamp>2013-04-23T16:35:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;!-- --&gt;&quot;</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/dsc get</title>
    <ns>10</ns>
    <id>4579</id>
    <revision>
      <id>55062</id>
      <parentid>52322</parentid>
      <timestamp>2013-06-01T05:19:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/array/dcl list get]] to [[Template:cpp/container/array/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/container/array/get | title=std::get{{dsc small|(std::array)}} | accesses an element of an {{tt|array}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/dsc tuple element</title>
    <ns>10</ns>
    <id>4581</id>
    <revision>
      <id>55066</id>
      <parentid>52323</parentid>
      <timestamp>2013-06-01T05:19:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/array/dcl list tuple element]] to [[Template:cpp/container/array/dsc tuple element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc ptclass | cpp/container/array/tuple_element | title=std::tuple_element{{dsc small|&lt;std::array&gt;}}|obtains the type of the elements of {{tt|array}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/dsc tuple size</title>
    <ns>10</ns>
    <id>4580</id>
    <revision>
      <id>55069</id>
      <parentid>52324</parentid>
      <timestamp>2013-06-01T05:19:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/array/dcl list tuple size]] to [[Template:cpp/container/array/dsc tuple size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc ptclass | cpp/container/array/tuple_size | title=std::tuple_size{{dsc small|&lt;std::array&gt;}} |obtains the size of an {{tt|array}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/example empty</title>
    <ns>10</ns>
    <id>10032</id>
    <revision>
      <id>52325</id>
      <parentid>47711</parentid>
      <timestamp>2013-06-01T04:44:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="439">{{example
 | The following code uses {{tt|empty}} to check if a {{lc|std::array}} contains any elements:
 | code=
#include &lt;array&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::array&lt;int, 4&gt; numbers {3, 1, 4, 1};
    std::array&lt;int, 0&gt; no_numbers;

    std::cout &lt;&lt; &quot;numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;no_numbers.empty(): &quot; &lt;&lt; no_numbers.empty() &lt;&lt; '\n';
}
 | output=
numbers.empty(): 0
no_numbers.empty(): 1
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/example size</title>
    <ns>10</ns>
    <id>10043</id>
    <revision>
      <id>52326</id>
      <parentid>47732</parentid>
      <timestamp>2013-06-01T04:44:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="322">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::array}}:
 | code=
#include &lt;array&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::array&lt;int, 4&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/navbar</title>
    <ns>10</ns>
    <id>1907</id>
    <revision>
      <id>39871</id>
      <parentid>35557</parentid>
      <timestamp>2012-09-28T19:57:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/array/navbar heading
|content3 = cpp/container/array/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/navbar content</title>
    <ns>10</ns>
    <id>1908</id>
    <revision>
      <id>83921</id>
      <parentid>52327</parentid>
      <timestamp>2016-03-13T19:43:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missing operator_cmp</comment>
      <text xml:space="preserve" bytes="1166">{{nv begin}}
{{nv h1 | Member functions}}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/array/at }}
{{nv mem ln | cpp/container/array/operator_at | operator[] }}
{{nv mem ln | cpp/container/array/front }}
{{nv mem ln | cpp/container/array/back }}
{{nv mem ln | cpp/container/array/data }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/array/begin | begin | cbegin}}
{{nv mem ln | cpp/container/array/end | end | cend}}
{{nv mem ln | cpp/container/array/rbegin | rbegin | crbegin}}
{{nv mem ln | cpp/container/array/rend | rend | crend}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/array/empty}}
{{nv mem ln | cpp/container/array/size}}
{{nv mem ln | cpp/container/array/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/array/fill}}
{{nv mem ln | cpp/container/array/swap}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/container/array/get}}
{{nv ln | cpp/container/array/swap2|swap}}
{{nv ln | cpp/container/array/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;|operator&gt;|operator&lt;{{=}}|operator&gt;{{=}}}}
{{nv h1 | Helper classes}}
{{nv ln | cpp/container/array/tuple_size}}
{{nv ln | cpp/container/array/tuple_element}}
{{nv end}}</text>
      <sha1>6eucseqvxo42xmru62hm8cigojpp58i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/navbar heading</title>
    <ns>10</ns>
    <id>1909</id>
    <revision>
      <id>35559</id>
      <parentid>3817</parentid>
      <timestamp>2012-06-15T22:28:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/array/sidebar heading]] to [[Template:cpp/container/array/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="40">{{ltt|cpp/container/array | std::array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/array/title</title>
    <ns>10</ns>
    <id>1910</id>
    <revision>
      <id>3819</id>
      <parentid>3818</parentid>
      <timestamp>2011-06-06T23:02:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=array::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/assign</title>
    <ns>10</ns>
    <id>1911</id>
    <revision>
      <id>86527</id>
      <parentid>74060</parentid>
      <timestamp>2016-07-06T07:40:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1968">{{cpp/container/{{{1|}}}/title | assign}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} | 
void assign( size_type count, const T&amp; value );
}}
{{dcl | num=2 | since={{cpp/std|{{{1|}}}}} |
template&lt; class InputIt &gt;
void assign( InputIt first, InputIt last );
}}
{{dcl | num=3 | since=c++11 |
void assign( std::initializer_list&lt;T&gt; ilist );
}}
{{dcl end}}

Replaces the contents of the container.

@1@ Replaces the contents with {{tt|count}} copies of value {{tt|value}}

@2@ Replaces the contents with copies of those in the range {{tt|[first, last)}}.
{{rev begin}}
{{rev|until=c++11|This overload has the same effect as overload {{v|1}} if {{tt|InputIt}} is an integral type.}}
{{rev|since=c++11|{{cpp/enable if|{{tt|InputIt}} satisfies {{concept|InputIterator}}}}.}}
{{rev end}}
@3@ Replaces the contents with the elements from the initializer list {{tt|ilist}}.

All iterators, pointers and references to the elements of the container are invalidated. {{#switch:{{{1|}}}|vector|deque=The past-the-end iterator is also invalidated.}}

===Parameters===
{{par begin}}
{{par | count | the new size of the container}}
{{par | value | the value to initialize elements of the container with}}
{{par | first, last | the range to copy the elements from}}
{{par | ilist | initializer list to copy the values from}}
{{par end}} 

===Complexity===

@1@ Linear in {{tt|count}}

@2@ Linear in distance between {{tt|first}} and {{tt|last}}

@3@ Linear in {{c|ilist.size()}}

===Example===
{{example
 | The following code uses {{tt|assign}} to add several characters to a {{c|std::{{{1}}}&lt;char&gt;}}:
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::{{{1}}}&lt;char&gt; characters;
 
    characters.assign(5, 'a');

    for (char c : characters) {
        std::cout &lt;&lt; c &lt;&lt; '\n';
    } 

    return 0;
}
 | output=
a
a
a
a
a
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>5wqnohn4l5878ii6pjmu7r7rjoav80x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/assoc note</title>
    <ns>10</ns>
    <id>9952</id>
    <revision>
      <id>47247</id>
      <timestamp>2013-05-02T14:49:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+note on equivalence of iterator and const_iterator and how to avoid ODR violations</comment>
      <text xml:space="preserve" bytes="267">The member types {{tt|iterator}} and {{tt|const_iterator}} may be aliases to the same type. Since {{tt|iterator}} is convertible to {{tt|const_iterator}}, {{tt|const_iterator}} should be used in function parameter lists to avoid violations of the One Definition Rule.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/at</title>
    <ns>10</ns>
    <id>1912</id>
    <revision>
      <id>83781</id>
      <parentid>83225</parentid>
      <timestamp>2016-03-08T04:31:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0031r0 (constexpr array)</comment>
      <text xml:space="preserve" bytes="1168">{{cpp/container/{{{1|}}}/title | at}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
reference at( size_type pos );
}}
{{dcl | since=c++17|
constexpr reference at( size_type pos );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++14 |
const_reference at( size_type pos ) const;
}}
{{dcl | since=c++14 |
constexpr const_reference at( size_type pos ) const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
reference       at( size_type pos );
}}
{{dcl | 
const_reference at( size_type pos ) const;
}}
{{dcl end}}}}

Returns a reference to the element at specified location {{tt|pos}}, with bounds checking. 

If {{tt|pos}} is not within the range of the container, an exception of type {{lc|std::out_of_range}} is thrown.

===Parameters===
{{par begin}}
{{par | pos | position of the element to return}}
{{par end}}

===Return value===
Reference to the requested element.

===Exceptions===
{{lc|std::out_of_range}} if {{c|!(pos &lt; size())}}.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_at |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>2i0mak30myls2swz6xqyqmceb005pth</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/at assoc</title>
    <ns>10</ns>
    <id>1913</id>
    <revision>
      <id>75418</id>
      <parentid>63568</parentid>
      <timestamp>2015-01-17T06:46:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>make use of [[template:templated]]</comment>
      <text xml:space="preserve" bytes="955">{{cpp/container/{{{1|}}}/title | at}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
T&amp; at( const Key&amp; key );
}}
{{dcl | num=2 | since=c++11 |
const T&amp; at( const Key&amp; key ) const;
}}
{{dcl end}}

Returns a reference to the mapped value of the element with key equivalent to {{tt|key}}. If no such element exists, an exception of type {{lc|std::out_of_range}} is thrown.

===Parameters===
{{par begin}}
{{par | key | the key of the element to find}}
{{par end}}

===Return value===
Reference to the mapped value of the requested element

===Exceptions===
{{lc|std::out_of_range}} if the container does not have an element with the specified {{tt|key}}

===Complexity===
{{#switch: {{{1|}}} 
| map = Logarithmic in the size of the container.
| unordered_map = Average case: constant, worst case: linear in size.
| {{templated}} }}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_at |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>74sxux8q086atblaymuh4ymo0hxtrjr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/back</title>
    <ns>10</ns>
    <id>1914</id>
    <revision>
      <id>85496</id>
      <parentid>83783</parentid>
      <timestamp>2016-04-22T12:54:26Z</timestamp>
      <contributor>
        <username>BigSeb</username>
        <id>5266</id>
      </contributor>
      <comment>No indexing parameter to the back member function</comment>
      <text xml:space="preserve" bytes="1510">{{cpp/container/{{{1|}}}/title | back}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
reference back();
}}
{{dcl | since=c++17|
constexpr reference back();
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++14 |
const_reference back() const;
}}
{{dcl | since=c++14 |
constexpr const_reference back() const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
reference back();
}}
{{dcl | since={{cpp/std|{{{1|}}}}}|
const_reference back() const;
}}
{{dcl end}}}}

Returns reference to the last element in the container. 

Calling {{tt|back}} on an empty container is undefined.

===Parameters===
(none)

===Return value===
Reference to the last element.

===Complexity===
Constant.

===Notes===
For a container {{tt|c}}, the expression {{c|return c.back();}} is equivalent to {{c|{ auto tmp {{=}} c.end(); --tmp; return *tmp; } }}

===Example===
{{example
 | The following code uses {{tt|back}} to display the last element of a {{c|std::{{{1}}}&lt;char&gt;}}:
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;iostream&gt;
 
int main()
{
    {{#ifeq:{{{1|}}}|array
|std::{{{1}}}&lt;char, 6&gt; letters {'o', 'm', 'g', 'w', 't', 'f'};
|std::{{{1}}}&lt;char&gt; letters {'o', 'm', 'g', 'w', 't', 'f'};
}}
    if (!letters.empty()) {
        std::cout &lt;&lt; &quot;The last character is: &quot; &lt;&lt; letters.back() &lt;&lt; '\n';
    }  
}
 | output=
The last character is f
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc front |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>awblckgux9luajccdzclu44zt3jwnc5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/begin</title>
    <ns>10</ns>
    <id>1915</id>
    <revision>
      <id>90345</id>
      <parentid>90340</parentid>
      <timestamp>2017-02-21T21:12:42Z</timestamp>
      <contributor>
        <username>Mgkrupa</username>
        <id>6350</id>
      </contributor>
      <text xml:space="preserve" bytes="7342">{{cpp/container/{{{1|}}}/title | begin | cbegin}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
iterator begin();
}}
{{dcl | since=c++17|
constexpr iterator begin();
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_iterator begin() const;
}}
{{dcl | since=c++17|
constexpr const_iterator begin() const;
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_iterator cbegin() const;
}}
{{dcl | since=c++17|
constexpr const_iterator cbegin() const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
iterator begin();
}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
const_iterator begin() const;
}}
{{dcl | since={{cpp/std|{{{1|}}}|c++11}} |
const_iterator cbegin() const;
}}
{{dcl end}}}}

Returns an iterator to the first element of the container. 

If the container is empty, the returned iterator will be equal to {{lc|end()}}.

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
Iterator to the first element

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant

===Example===
{{#switch:{{{1|}}}|unordered_multiset=
{{example|code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
#include &lt;unordered_set&gt;

int main() {
    const std::unordered_multiset&lt;std::string&gt; words = {
        &quot;some&quot;, &quot;words&quot;, &quot;to&quot;, &quot;count&quot;,
        &quot;count&quot;, &quot;these&quot;, &quot;words&quot;
    };

    for(auto it = words.begin(); it != words.end(); )
    {
        auto cnt = words.count(*it);
        std::cout &lt;&lt; *it &lt;&lt; &quot;:\t&quot; &lt;&lt; cnt &lt;&lt; '\n';
        std::advance(it, cnt); // all cnt elements have equivalent keys
    }
}
|p=true
|std=c++11
|output=
some:   1
words:  2
to:     1
count:  2
these:  1
}}
|map=
{{example|code=
#include &lt;iostream&gt;
#include &lt;map&gt;
 
int main() {
  std::map&lt;int, float&gt; num_map;
  num_map[4] = 4.13;
  num_map[9] = 9.24;
  num_map[1] = 1.09;
  // calls a_map.begin() and a_map.end()
  for (auto it = num_map.begin(); it != num_map.end(); ++it) {
    std::cout &lt;&lt; it-&gt;first &lt;&lt; &quot;, &quot; &lt;&lt; it-&gt;second &lt;&lt; '\n';
  }
}
| output=
1, 1.09
4, 4.13
9, 9.24
}}
====Example using a custom comparison function====
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
#include &lt;map&gt;
 
struct Point { double x, y; };

typedef Point * PointPtr;
//Compare the x-coordinates of two Point pointers
struct PointCmp {
    bool operator()(const PointPtr &amp;lhs, const PointPtr &amp;rhs) const { 
        return lhs-&gt;x &lt; rhs-&gt;x; 
    }
};
 
int main() {
    //Note that although the x-coordinates are out of order, the
    // map will be iterated through by increasing x-coordinates
    Point points[3] = { {2, 0}, {1, 0}, {3, 0} };

    //mag is a map sending the address of node to its magnitude in the x-y plane
    //Although the keys are pointers-to-Point, we want to order the map by the
    // x-coordinates of the points and NOT by the addresses of the Points. This
    // is done by using the PointCmp class's comparison method.
    std::map&lt;Point *, double, PointCmp&gt; mag({
        { points,     2 },
        { points + 1, 1 },
        { points + 2, 3 }
    });

    //Change each y-coordinate from 0 to the magnitude
    for(auto iter = mag.begin(); iter != mag.end(); ++iter){
        auto cur = iter-&gt;first; // pointer to Node
        cur-&gt;y = mag[cur]; // could also have used  cur-&gt;y = iter-&gt;second;
    }
 
    //Update and print the magnitude of each node
    for(auto iter = mag.begin(); iter != mag.end(); ++iter){
        auto cur = iter-&gt;first;
        mag[cur] = std::hypot(cur-&gt;x, cur-&gt;y);
        std::cout &lt;&lt; &quot;The magnitude of (&quot; &lt;&lt; cur-&gt;x &lt;&lt; &quot;, &quot; &lt;&lt; cur-&gt;y &lt;&lt; &quot;) is &quot;;
        std::cout &lt;&lt; iter-&gt;second &lt;&lt; '\n';
    }
 
    //Repeat the above with the range-based for loop
    for(auto i : mag) {
        auto cur = i.first;
        cur-&gt;y = i.second;
        mag[cur] = std::hypot(cur-&gt;x, cur-&gt;y);
        std::cout &lt;&lt; &quot;The magnitude of (&quot; &lt;&lt; cur-&gt;x &lt;&lt; &quot;, &quot; &lt;&lt; cur-&gt;y &lt;&lt; &quot;) is &quot;;
        std::cout &lt;&lt; mag[cur] &lt;&lt; '\n';
        //Note that in contrast to std::cout &lt;&lt; iter-&gt;second &lt;&lt; '\n'; above, 
        // std::cout &lt;&lt; i.second &lt;&lt; '\n'; will NOT print the updated magnitude
    }
}
| output=
The magnitude of (1, 2) is 2.23607
The magnitude of (2, 1) is 2.23607
The magnitude of (3, 3) is 4.24264
The magnitude of (1, 2.23607) is 2.44949
The magnitude of (2, 2.23607) is 3
The magnitude of (3, 4.24264) is 5.19615
}}
|set=
{{example|code=
#include &lt;set&gt;
#include &lt;iostream&gt;
 
int main() {
  std::set&lt;int&gt; set = { 6, 1, 3, 4, 2, 5 };
  for (auto it = set.begin(); it != set.end(); ++it)
    std::cout &lt;&lt; *it &lt;&lt; &quot;\n&quot;;
}
|p=true
|std=c++11
|output=
1
2
3
4
5
6
}}
|unordered_map=
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
#include &lt;unordered_map&gt;

struct Node { double x, y; };

int main() {
    Node nodes[3] = { {1, 0}, {2, 0}, {3, 0} };
    
    //mag is a map mapping the address of a Node to its magnitude in the plane
    std::unordered_map&lt;Node *, double&gt; mag = {
        { nodes,     1 },
        { nodes + 1, 2 },
        { nodes + 2, 3 }
    };
    
    //Change each y-coordinate from 0 to the magnitude
    for(auto iter = mag.begin(); iter != mag.end(); ++iter){
        auto cur = iter-&gt;first; // pointer to Node
        cur-&gt;y = mag[cur]; // could also have used  cur-&gt;y = iter-&gt;second;
    }
 
    //Update and print the magnitude of each node
    for(auto iter = mag.begin(); iter != mag.end(); ++iter){
        auto cur = iter-&gt;first;
        mag[cur] = std::hypot(cur-&gt;x, cur-&gt;y);
        std::cout &lt;&lt; &quot;The magnitude of (&quot; &lt;&lt; cur-&gt;x &lt;&lt; &quot;, &quot; &lt;&lt; cur-&gt;y &lt;&lt; &quot;) is &quot;;
        std::cout &lt;&lt; iter-&gt;second &lt;&lt; '\n';
    }

    //Repeat the above with the range-based for loop
    for(auto i : mag) {
        auto cur = i.first;
        cur-&gt;y = i.second;
        mag[cur] = std::hypot(cur-&gt;x, cur-&gt;y);
        std::cout &lt;&lt; &quot;The magnitude of (&quot; &lt;&lt; cur-&gt;x &lt;&lt; &quot;, &quot; &lt;&lt; cur-&gt;y &lt;&lt; &quot;) is &quot;;
        std::cout &lt;&lt; mag[cur] &lt;&lt; '\n';
        //Note that in contrast to std::cout &lt;&lt; iter-&gt;second &lt;&lt; '\n'; above, 
        // std::cout &lt;&lt; i.second &lt;&lt; '\n'; will NOT print the updated magnitude
    }
}
|p=true
|std=c++11
|output=
The magnitude of (3, 3) is 4.24264
The magnitude of (1, 1) is 1.41421
The magnitude of (2, 2) is 2.82843
The magnitude of (3, 4.24264) is 5.19615
The magnitude of (1, 1.41421) is 1.73205
The magnitude of (2, 2.82843) is 3.4641

}}
|unordered_set=
{{example|code=
#include &lt;iostream&gt;
#include &lt;unordered_set&gt;

struct Point { double x, y; };

int main() {
    Point pts[3] = { {1, 0}, {2, 0}, {3, 0} };
    
    //points is a set containing the addresses of points
    std::unordered_set&lt;Point *&gt; points = { pts, pts + 1, pts + 2 };
    
    //Change each y-coordinate of (i, 0) from 0 into i^2 and print the point
    for(auto iter = points.begin(); iter != points.end(); ++iter){
        (*iter)-&gt;y = ((*iter)-&gt;x) * ((*iter)-&gt;x); //iter is a pointer-to-Point*
        std::cout &lt;&lt; &quot;(&quot; &lt;&lt; (*iter)-&gt;x &lt;&lt; &quot;, &quot; &lt;&lt; (*iter)-&gt;y &lt;&lt; &quot;) &quot;;
    }
    std::cout &lt;&lt; '\n';
    
    //Now using the range-based for loop, we increase each y-coordinate by 10
    for(Point * i : points) {
        i-&gt;y += 10;
        std::cout &lt;&lt; &quot;(&quot; &lt;&lt; i-&gt;x &lt;&lt; &quot;, &quot; &lt;&lt; i-&gt;y &lt;&lt; &quot;) &quot;;
    }
}
|p=true
|std=c++11
|output=
(3, 9) (1, 1) (2, 4) 
(3, 19) (1, 11) (2, 14) 
}}
|{{example}}
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc end |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>kn0a2nc3sjnf1i91o3b4py3oxr59aj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/begin(int)</title>
    <ns>10</ns>
    <id>9085</id>
    <redirect title="Template:cpp/container/begin2" />
    <revision>
      <id>38139</id>
      <timestamp>2012-07-24T13:29:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/container/begin(int)]] to [[Template:cpp/container/begin2]]: Text replace - &quot;/begin(int)&quot; to &quot;/begin2&quot;</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/container/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/begin2</title>
    <ns>10</ns>
    <id>1916</id>
    <revision>
      <id>88026</id>
      <parentid>63849</parentid>
      <timestamp>2016-10-23T21:36:16Z</timestamp>
      <contributor>
        <ip>188.98.95.136</ip>
      </contributor>
      <comment>Changed a variable name in the description text to be consistent with the given signatures.</comment>
      <text xml:space="preserve" bytes="722">{{cpp/container/{{{1|}}}/title | begin{{small|(int)}} | cbegin{{small|(int)}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
local_iterator begin( size_type n );
}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
const_local_iterator begin( size_type n ) const;
}}
{{dcl | since=c++11 |
const_local_iterator cbegin( size_type n ) const;
}}
{{dcl end}}

Returns an iterator to the first element of the bucket with index {{tt|n}}. 

===Parameters===
{{par begin}}
{{par | n | the index of the bucket to access}}
{{par end}}

===Return value===
Iterator to the first element.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc end(int) |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>1vxgj01d4m8u2phdl7kwavgfbz4gtph</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/bucket</title>
    <ns>10</ns>
    <id>1917</id>
    <revision>
      <id>62476</id>
      <parentid>62402</parentid>
      <timestamp>2013-07-01T17:16:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>shorten the summary sentence, expand</comment>
      <text xml:space="preserve" bytes="776">{{cpp/container/{{{1|}}}/title | bucket}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type bucket( const Key&amp; key ) const;
}}
{{dcl end}}

Returns the index of the bucket for key {{tt|key}}. Elements (if any) with keys equivalent to {{tt|key}} are always found in this bucket. The returned value is valid only for instances of the container for which {{lc|bucket_count()}} returns the same value.

The behavior is undefined if {{lc|bucket_count()}} is zero.

===Parameters===
{{par begin}}
{{par | key | the value of the key to examine}}
{{par end}}

===Return value===
Bucket index for the key {{tt|key}}.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc bucket_size |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/bucket count</title>
    <ns>10</ns>
    <id>1918</id>
    <revision>
      <id>62207</id>
      <parentid>55714</parentid>
      <timestamp>2013-06-25T12:09:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="496">{{cpp/container/{{{1|}}}/title | bucket_count}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type bucket_count() const;
}}
{{dcl end}}

Returns the number of buckets in the container.

===Parameters===
(none)

===Return value===
The number of buckets in the container.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc bucket_size |{{{1|}}}}}
{{dsc inc | cpp/container/dsc max_bucket_count |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/bucket size</title>
    <ns>10</ns>
    <id>1919</id>
    <revision>
      <id>62206</id>
      <parentid>55715</parentid>
      <timestamp>2013-06-25T12:09:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="542">{{cpp/container/{{{1|}}}/title | bucket_size}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type bucket_size( size_type n ) const;
}}
{{dcl end}}

Returns the number of elements in the bucket with index {{tt|n}}.

===Parameters===
{{par begin}}
{{par | n | the index of the bucket to examine}}
{{par end}}

===Return value===
The number of elements in the bucket {{tt|n}}.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc bucket_count |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/capacity</title>
    <ns>10</ns>
    <id>1920</id>
    <revision>
      <id>64769</id>
      <parentid>62205</parentid>
      <timestamp>2013-08-26T23:50:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix std markers</comment>
      <text xml:space="preserve" bytes="569">{{cpp/container/{{{1|}}}/title | capacity}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type capacity() const;
}}
{{dcl end}}

Returns the number of elements that the container has currently allocated space for. 

===Parameters===
(none)

===Return value===
Capacity of the currently allocated storage.

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc size |{{{1|}}}}}
{{dsc inc | cpp/container/dsc reserve |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/clear</title>
    <ns>10</ns>
    <id>1921</id>
    <revision>
      <id>86529</id>
      <parentid>86528</parentid>
      <timestamp>2016-07-06T07:48:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="1387">{{cpp/container/{{{1|}}}/title | clear}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void clear();
}}
{{dcl end}}

Removes all elements from the container. 

Invalidates any references, pointers, or iterators referring to contained elements. {{#switch:{{{1|}}}|list|forward_list|map|multimap|set|multiset=Any past-the-end iterator remains valid.|vector|deque=Any past-the-end iterators are also invalidated.|unordered_map|unordered_multimap|unordered_set|unordered_multiset=May also invalidate past-the-end iterators.}}
{{#ifeq: {{{1|}}} | vector | &amp;nbsp;

Leaves the {{lc|capacity()}} of the vector unchanged (note: the standard's restriction on the changes to capacity is in the specification of {{tt|vector::reserve}}, see [http://stackoverflow.com/a/18467916]) 
}}
===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Linear in the size of the container.

{{cpp/container/if seq|{{{1|}}}|
===Defect reports===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2231|std=C++11|before=complexity guarantee was mistakenly omitted in C++11|after=complexity reaffirmed as linear}}
{{dr list end}}
}}

===See also===
{{dsc begin}}
{{#ifeq: {{{1|}}} | forward_list
 | {{dsc inc | cpp/container/dsc erase_after |{{{1|}}}}}
 | {{dsc inc | cpp/container/dsc erase |{{{1|}}}}}
}}
{{dsc end}}</text>
      <sha1>hbbo77f7a9p7ccceu43intruxiv6w1h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/constructor</title>
    <ns>10</ns>
    <id>1922</id>
    <revision>
      <id>92058</id>
      <parentid>92004</parentid>
      <timestamp>2017-04-03T21:13:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Treat the allocator-extended move ctor separately; merge the noexcept</comment>
      <text xml:space="preserve" bytes="6390">{{cpp/container/{{{1|}}}/title | {{{1}}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | since={{cpp/std|{{{1|}}}}} | until=c++14 | 1=
explicit {{{1}}}( const Allocator&amp; alloc = Allocator() );
}}
{{#ifeq:{{{1}}}|vector|
{{dcl | since=c++14 | until=c++17 | 1=
{{{1}}}() : {{{1}}}( Allocator() ) {}
explicit {{{1}}}( const Allocator&amp; alloc );
}}
{{dcl | since=c++17 | 1=
{{{1}}}() noexcept(noexcept(Allocator())): {{{1}}}( Allocator() ) {}
explicit {{{1}}}( const Allocator&amp; alloc ) noexcept;
}}
|
{{dcl | since=c++14| 1=
{{{1}}}() : {{{1}}}( Allocator() ) {}
explicit {{{1}}}( const Allocator&amp; alloc );
}}}}
{{dcl rev end}}
{{#ifeq:{{{1}}}|forward_list
|{{dcl | num=2 | since=c++11 | 1=
{{{1}}}( size_type count, 
{{space as|{{{1}}}}}  const T&amp; value,
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator());
}}
|{{dcl rev begin | num=2}}
{{dcl | until=c++11 | 1=
explicit {{{1}}}( size_type count, 
         {{space as|{{{1}}}}}  const T&amp; value = T(),
         {{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator());
}}
{{dcl | since=c++11 | 1=
         {{{1}}}( size_type count, 
         {{space as|{{{1}}}}}  const T&amp; value,
         {{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator());
}}
{{dcl rev end}}
}}
{{dcl rev begin | num=3}}
{{dcl | since=c++11 | until=c++14 |
explicit {{{1}}}( size_type count );
}}
{{dcl | since=c++14 | 1=
explicit {{{1}}}( size_type count, const Allocator&amp; alloc = Allocator() );
}}
{{dcl rev end}}
{{dcl | num=4 | since={{cpp/std|{{{1|}}}}} | 1=
template&lt; class InputIt &gt;
{{{1}}}( InputIt first, InputIt last, 
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=5 | since={{cpp/std|{{{1|}}}}} |
{{{1}}}( const {{{1}}}&amp; other );                           
}}
{{dcl | num=5 | since=c++11 |
{{{1}}}( const {{{1}}}&amp; other, const Allocator&amp; alloc );
}}
{{#ifeq:{{{1}}}|vector|
{{dcl rev multi | num=6 | since1=c++11 | dcl1=
{{{1}}}( {{{1}}}&amp;&amp; other );
| since2=c++17 | dcl2=
{{{1}}}( {{{1}}}&amp;&amp; other ) noexcept;
}}
|
{{dcl | num=6 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other );
}}
}}
{{dcl | num=7 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other, const Allocator&amp; alloc );
}}
{{dcl | num=8 | since=c++11 | 1=
{{{1}}}( std::initializer_list&lt;T&gt; init, 
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl end}}

Constructs a new container from a variety of data sources, optionally using a user supplied allocator {{tt|alloc}}.

@1@ Default constructor. Constructs an empty container.

@2@ Constructs the container with {{tt|count}} copies of elements with value {{tt|value}}.

@3@ Constructs the container with {{tt|count}} [[cpp/concept/DefaultInsertable|default-inserted]] instances of {{tt|T}}. No copies are made.

@4@ Constructs the container with the contents of the range {{tt|[first, last)}}. 
{{rev begin}}
{{rev|until=c++11|This constructor has the same effect as {{c|{{{1}}}(static_cast&lt;size_type&gt;(first), static_cast&lt;value_type&gt;(last), a)}} if {{tt|InputIt}} is an integral type.}}
{{rev|since=c++11|{{cpp/enable if|{{tt|InputIt}} satisfies {{concept|InputIterator}}}}, to avoid ambiguity with the overload {{v|2}}.}}
{{rev end}}
@5@ Copy constructor. Constructs the container with the copy of the contents of {{tt|other}}. If {{tt|alloc}} is not provided, allocator is obtained as if by calling {{c|std::allocator_traits&lt;allocator_type&gt;::select_on_container_copy_construction(other.get_allocator())}}.
@6@ Move constructor. Constructs the container with the contents of {{tt|other}} using move semantics. Allocator is obtained by move-construction from the allocator belonging to {{tt|other}}.
@7@ Allocator-extended move constructor. Using {{tt|alloc}} as the allocator for the new container, moving the contents from {{tt|other}}; if {{c|alloc !{{=}} other.get_allocator()}}, this results in an element-wise move.
@8@ Constructs the container with the contents of the initializer list {{tt|init}}. 

===Parameters===
{{par begin}}
{{par | alloc | allocator to use for all memory allocations of this container}}
{{par | count | the size of the container}}
{{par | value | the value to initialize elements of the container with}}
{{par | first, last | the range to copy the elements from}}
{{par | other | another container to be used as source to initialize the elements of the container with}}
{{par | init | initializer list to initialize the elements of the container with}}
{{par end}} 

===Complexity===
@1@ Constant

@2-3@ Linear in {{tt|count}}

@4@ Linear in distance between {{tt|first}} and {{tt|last}}

@5@ Linear in size of {{tt|other}}

@6@ Constant.

@7@ Linear if {{c|alloc !{{=}} other.get_allocator()}}, otherwise constant.

@8@ Linear in size of {{tt|init}}.

===Notes===
{{cpp/container/lwg2321-note|6}}
{{#ifeq:{{{1}}}|vector|
&lt;br&gt;
The overload {{v|3}} zeroes out elements of non-class types such as {{c|int}}, which is different from the behavior of {{ltt|cpp/language/new|new[]}}, which leaves them uninitialized. To match the behavior of {{tt|new[]}}, a [http://stackoverflow.com/a/21028912/273767 custom Allocator::construct] can be provided which leaves such elements uninitialized.
}}

===Example===
{{example
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

template&lt;typename T&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::{{{1}}}&lt;T&gt;&amp; v) {
    s.put('[');
    char comma[3] = {'\0', ' ', '\0'};
    for (const auto&amp; e : v) {
        s &lt;&lt; comma &lt;&lt; e;
        comma[0] = ',';
    }
    return s &lt;&lt; ']';
}

int main() 
{
    // c++11 initializer list syntax:
    std::{{{1}}}&lt;std::string&gt; words1 {&quot;the&quot;, &quot;frogurt&quot;, &quot;is&quot;, &quot;also&quot;, &quot;cursed&quot;};
    std::cout &lt;&lt; &quot;words1: &quot; &lt;&lt; words1 &lt;&lt; '\n';

    // words2 == words1
    std::{{{1}}}&lt;std::string&gt; words2(words1.begin(), words1.end());
    std::cout &lt;&lt; &quot;words2: &quot; &lt;&lt; words2 &lt;&lt; '\n';

    // words3 == words1
    std::{{{1}}}&lt;std::string&gt; words3(words1);
    std::cout &lt;&lt; &quot;words3: &quot; &lt;&lt; words3 &lt;&lt; '\n';

    // words4 is {&quot;Mo&quot;, &quot;Mo&quot;, &quot;Mo&quot;, &quot;Mo&quot;, &quot;Mo&quot;}
    std::{{{1}}}&lt;std::string&gt; words4(5, &quot;Mo&quot;);
    std::cout &lt;&lt; &quot;words4: &quot; &lt;&lt; words4 &lt;&lt; '\n';
}
 | output=
words1: [the, frogurt, is, also, cursed]
words2: [the, frogurt, is, also, cursed]
words3: [the, frogurt, is, also, cursed]
words4: [Mo, Mo, Mo, Mo, Mo]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc assign |{{{1|}}}}}
{{dsc inc | cpp/container/dsc operator{{=}} |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>4y82p86twrtxj64z72ysnrwl2d3q8wn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/constructor ad</title>
    <ns>10</ns>
    <id>1923</id>
    <revision>
      <id>83659</id>
      <parentid>63571</parentid>
      <timestamp>2016-03-06T05:54:03Z</timestamp>
      <contributor>
        <ip>183.206.175.40</ip>
      </contributor>
      <text xml:space="preserve" bytes="3857">{{cpp/container/{{{1|}}}/title | {{{1}}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 | 1=
explicit {{{1}}}( const Container&amp; cont = Container() );
}}
{{dcl | since=c++11 | 
explicit {{{1}}}( const Container&amp; cont );
}}
{{dcl rev end}}
{{dcl | num=2 | since=c++11 |1=
explicit {{{1}}}( Container&amp;&amp; cont = Container() );
}}
{{dcl | num=3 |1=
{{{1}}}( const {{{1}}}&amp; other );
}}
{{dcl | num=4 | since=c++11 | 1=
{{{1}}}( {{{1}}}&amp;&amp; other );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class Alloc &gt; 
explicit {{{1}}}( const Alloc&amp; alloc );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class Alloc &gt; 
{{{1}}}( const Container&amp; cont, const Alloc&amp; alloc );
}}
{{dcl | num=7 | since=c++11 | 1=
template&lt; class Alloc &gt; 
{{{1}}}( Container&amp;&amp; cont, const Alloc&amp; alloc );
}}
{{dcl | num=8 | since=c++11 | 1=
template&lt; class Alloc &gt; 
{{{1}}}( const {{{1}}}&amp; other, const Alloc&amp; alloc );
}}
{{dcl | num=9 | since=c++11 | 1=
template&lt; class Alloc &gt; 
{{{1}}}( {{{1}}}&amp;&amp; other, const Alloc&amp; alloc );
}}
{{dcl end}}

Constructs new underlying container of the container adaptor from a variety of data sources.

@1@ Copy-constructs the underlying container {{tt|c}} with the contents of {{tt|cont}}. {{rev inl|This is also the default constructor|until=c++11}}

@2@ Move-constructs the underlying container {{tt|c}} with {{c|std::move(cont)}}. {{rev inl|This is also the default constructor|since=c++11}}

@3@ Copy constructor. The adaptor is copy-constructed with the contents of {{c|other.c}}. {{mark implicit}}

@4@ Move constructor. The adaptor is constructed with {{c|std::move(other.c)}}. {{mark implicit}}

@5-9@ The following constructors are only defined if {{c|1=std::uses_allocator&lt;container_type, Alloc&gt;::value == true}}, that is, if the underlying container is an allocator-aware container (true for all standard library containers).

:@5@ Constructs the underlying container using {{tt|alloc}} as allocator, as if by {{c|c(alloc)}}.

:@6@ Constructs the underlying container with the contents of {{tt|cont}} and using {{tt|alloc}} as allocator, as if by {{c|c(cont, alloc)}}.

:@7@ Constructs the underlying container with the contents of {{tt|cont}} using move semantics while utilising {{tt|alloc}} as allocator, as if by {{c|c(std::move(cont), alloc)}}.

:@8@ Constructs the adaptor with the contents of {{tt|other.c}} and using {{tt|alloc}} as allocator, as if by {{c|c(other.c, alloc)}}.

:@9@ Constructs the adaptor with the contents of {{tt|other}} using move semantics while utilising {{tt|alloc}} as allocator, as if by {{c|c(std::move(other.c), alloc)}}.

===Parameters===
{{par begin}}
{{par | alloc | allocator to use for all memory allocations of the underlying container}}
{{par | other | another container adaptor to be used as source to initialize the underlying container}}
{{par | cont | container to be used as source to initialize the underlying container}}
{{par | first, last | range of elements to initialize with}}
{{par hreq}}
{{par req concept | Alloc | Allocator}}
{{par req concept | Container | Container | notes=The constructors (5-10) are only defined if {{tt|Container}} meets the requirements of {{concept|AllocatorAwareContainer}}}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Complexity===
1, 3, 5, 6, 8: linear in {{tt|cont}} or {{tt|other}}

2, 4, 7, 9: constant
{{todo}}

===Example===
{{example
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;deque&gt;
#include &lt;iostream&gt;

int main()
{
    std::{{{1}}}&lt;int&gt; c1;
    c1.push(5);
    std::cout &lt;&lt; c1.size() &lt;&lt; '\n';

    std::{{{1}}}&lt;int&gt; c2(c1);
    std::cout &lt;&lt; c2.size() &lt;&lt; '\n';
 
    std::deque&lt;int&gt; deq {3, 1, 4, 1, 5};
    std::{{{1}}}&lt;int&gt; c3(deq);
    std::cout &lt;&lt; c3.size() &lt;&lt; '\n';
}
 | output=
1
1
5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator{{=}} | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>n60977od3i9te7gvfvpcymho8uz0gdp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/constructor ord</title>
    <ns>10</ns>
    <id>1924</id>
    <revision>
      <id>91175</id>
      <parentid>90515</parentid>
      <timestamp>2017-03-24T13:57:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg2488 note if unique</comment>
      <text xml:space="preserve" bytes="8080">{{cpp/container/{{{1|}}}/title | {{{1}}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | since={{cpp/std|{{{1|}}}}} | until=c++14 | 1=
explicit {{{1}}}( const Compare&amp; comp = Compare(), 
{{space as|explicit {{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++14 | 1=
{{{1}}}() : {{{1}}}( Compare() ) {}
explicit {{{1}}}( const Compare&amp; comp, 
{{space as|explicit {{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl rev end}}
{{dcl | num=1 | since=c++11 | 1=
explicit {{{1}}}( const Allocator&amp; alloc );
}}
{{dcl rev begin | num=2}}
{{dcl | since={{cpp/std|{{{1|}}}}} | 1=
template&lt; class InputIterator &gt;
{{{1}}}( InputIterator first, InputIterator last,
{{space as|{{{1}}}}}  const Compare&amp; comp = Compare(),
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++14 | 1=
template&lt; class InputIterator &gt;
{{{1}}}( InputIterator first, InputIterator last,
{{space as|{{{1}}}}}  const Allocator&amp; alloc );
}}
{{dcl rev end}}
{{dcl | num=3 | since={{cpp/std|{{{1|}}}}} | 1=
{{{1}}}( const {{{1}}}&amp; other );
}}
{{dcl | num=3 | since=c++11 |
{{{1}}}( const {{{1}}}&amp; other, const Allocator&amp; alloc );
}}
{{dcl | num=4 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other );
}}
{{dcl | num=4 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other, const Allocator&amp; alloc );
}}
{{dcl rev begin | num=5}}
{{dcl | since=c++11 | 1=
{{{1}}}( std::initializer_list&lt;value_type&gt; init,
{{space as|{{{1}}}}}  const Compare&amp; comp = Compare(),
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++14 | 1=
{{{1}}}( std::initializer_list&lt;value_type&gt; init,
{{space as|{{{1}}}}}  const Allocator&amp; );
}}
{{dcl rev end}}
{{dcl end}}

Constructs new container from a variety of data sources and optionally using user supplied allocator {{tt|alloc}} or comparison function object {{tt|comp}}.

@1@ Default constructor. Constructs empty container.

@2@ Constructs the container with the contents of the range {{tt|[first, last)}}. {{cpp/container/if uniq |{{{1|}}}|{{cpp/container/lwg2488-note}}}}

@3@ Copy constructor. Constructs the container with the copy of the contents of {{tt|other}}. If {{tt|alloc}} is not provided, allocator is obtained by calling {{c|std::allocator_traits&lt;allocator_type&gt;::select_on_container_copy_construction(other.get_allocator())}}.

@4@ Move constructor. Constructs the container with the contents of {{tt|other}} using move semantics. If {{tt|alloc}} is not provided, allocator is obtained by move-construction from the allocator belonging to {{tt|other}}.

@5@ Constructs the container with the contents of the initializer list {{tt|init}}. {{cpp/container/if uniq |{{{1|}}}|{{cpp/container/lwg2488-note}}}}

===Parameters===
{{par begin}}
{{par | alloc | allocator to use for all memory allocations of this container}}
{{par | comp | comparison function object to use for all comparisons of keys}}
{{par | first, last | the range to copy the elements from}}
{{par | other | another container to be used as source to initialize the elements of the container with}}
{{par | init | initializer list to initialize the elements of the container with}}
{{par hreq}}
{{par req concept | InputIterator | InputIterator}}
{{par req concept | Compare | Compare}}
{{par req concept | Allocator | Allocator}}
{{par end}} 

===Complexity===
@1@ Constant

@2@ {{math|N log(N)}} where {{c|N {{=}} std::distance(first, last)}} in general, linear in {{tt|N}} if the range is already sorted by {{tt|value_comp()}}.

@3@ Linear in size of {{tt|other}}

@4@ Constant. If {{tt|alloc}} is given and {{c|alloc !{{=}} other.get_allocator()}}, then linear.

@5@ {{math|N log(N)}} where {{c|N {{=}} init.size())}} in general, linear in {{tt|N}} if {{tt|init}} is already sorted by {{tt|value_comp()}}.

===Notes===
{{cpp/container/lwg2321-note|4}}

===Example===
{{#switch: {{{1|}}}|map=
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;iomanip&gt;
#include &lt;map&gt;

template&lt;typename Map&gt;
void print_map(Map&amp; m)
{
   std::cout &lt;&lt; '{';
   for(auto&amp; p: m)
        std::cout &lt;&lt; p.first &lt;&lt; ':' &lt;&lt; p.second &lt;&lt; ' ';
   std::cout &lt;&lt; &quot;}\n&quot;;
}

struct Point { double x, y; };
struct PointCmp {
    bool operator()(const Point&amp; lhs, const Point&amp; rhs) const { 
        return lhs.x &lt; rhs.x; // NB. intentionally ignores y
    }
};

int main()
{
  // (1) Default constructor
  std::map&lt;std::string, int&gt; map1;
  map1[&quot;something&quot;] = 69;
  map1[&quot;anything&quot;] = 199;
  map1[&quot;that thing&quot;] = 50;
  std::cout &lt;&lt; &quot;map1 = &quot;; print_map(map1);

  // (2) Range constructor
  std::map&lt;std::string, int&gt; iter(map1.find(&quot;anything&quot;), map1.end());
  std::cout &lt;&lt; &quot;\niter = &quot;; print_map(iter);
  std::cout &lt;&lt; &quot;map1 = &quot;; print_map(map1);

  // (3) Copy constructor
  std::map&lt;std::string, int&gt; copied(map1);
  std::cout &lt;&lt; &quot;\ncopied = &quot;; print_map(copied);
  std::cout &lt;&lt; &quot;map1 = &quot;; print_map(map1);

  // (4) Move constructor
  std::map&lt;std::string, int&gt; moved(std::move(map1));
  std::cout &lt;&lt; &quot;\nmoved = &quot;; print_map(moved);
  std::cout &lt;&lt; &quot;map1 = &quot;; print_map(map1);

  // (5) Initializer list constructor
  const std::map&lt;std::string, int&gt; init {
    {&quot;this&quot;, 100},
    {&quot;can&quot;, 100},
    {&quot;be&quot;, 100},
    {&quot;const&quot;, 100},
  };
  std::cout &lt;&lt; &quot;\ninit = &quot;; print_map(init);


  // Custom Key class option 1:
  // Use a comparison struct
  std::map&lt;Point, double, PointCmp&gt; mag = {
      { {5, -12}, 13 },
      { {3, 4},   5 },
      { {-8, -15}, 17 }
  };
 
  for(auto p : mag)
      std::cout &lt;&lt; &quot;The magnitude of (&quot; &lt;&lt; p.first.x
                &lt;&lt; &quot;, &quot; &lt;&lt; p.first.y &lt;&lt; &quot;) is &quot;
                &lt;&lt; p.second &lt;&lt; '\n';
                
  // Custom Key class option 2:    
  // Use a comparison lambda
  // This lambda sorts points according to their magnitudes, where note that
  //  these magnitudes are taken from the local variable mag
  auto cmpLambda = [&amp;mag](const Point &amp;lhs, const Point &amp;rhs) { return mag[lhs] &lt; mag[rhs]; };
  //You could also use a lambda that is not dependent on local variables, like this:
  //auto cmpLambda = [](const Point &amp;lhs, const Point &amp;rhs) { return lhs.y &lt; rhs.y; };
  std::map&lt;Point, double, decltype(cmpLambda)&gt; magy(cmpLambda);
  
  //Various ways of inserting elements:
  magy.insert(std::pair&lt;Point, double&gt;({5, -12}, 13));
  magy.insert({ {3, 4}, 5});
  magy.insert({Point{-8.0, -15.0}, 17});
  
  std::cout &lt;&lt; '\n';
  for(auto p : magy)
      std::cout &lt;&lt; &quot;The magnitude of (&quot; &lt;&lt; p.first.x
                &lt;&lt; &quot;, &quot; &lt;&lt; p.first.y &lt;&lt; &quot;) is &quot;
                &lt;&lt; p.second &lt;&lt; '\n';
}
| output=
map1 = {anything:199 something:69 that thing:50 }

iter = {anything:199 something:69 that thing:50 }
map1 = {anything:199 something:69 that thing:50 }

copied = {anything:199 something:69 that thing:50 }
map1 = {anything:199 something:69 that thing:50 }

moved = {anything:199 something:69 that thing:50 }
map1 = {}

init = {be:100 can:100 const:100 this:100 }
The magnitude of (-8, -15) is 17
The magnitude of (3, 4) is 5
The magnitude of (5, -12) is 13

The magnitude of (3, 4) is 5
The magnitude of (5, -12) is 13
The magnitude of (-8, -15) is 17
}}
|multimap=
{{example
|code=
#include &lt;iostream&gt;
#include &lt;map&gt;
 
struct Point { double x, y; };
struct PointCmp {
    bool operator()(const Point&amp; lhs, const Point&amp; rhs) const { 
        return lhs.x &lt; rhs.x; // NB. ignores y on purpose
    }
};
 
int main() {
    std::multimap&lt;int, int&gt; m = {{1,1},{2,2},{3,3},{4,4},{5,5},{4,4},{3,3},{2,2},{1,1}};
    for(auto&amp; p: m) std::cout &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; p.second &lt;&lt; '\n';

    // custom comparison
    std::multimap&lt;Point, double, PointCmp&gt; mag{
        { {5, 12}, 13 },
        { {3, 4}, 5 },
        { {8, 15}, 17 },
        { {3, -3}, -1 },
    };

  for(auto p : mag)
      std::cout &lt;&lt; &quot;The magnitude of (&quot; &lt;&lt; p.first.x
                &lt;&lt; &quot;, &quot; &lt;&lt; p.first.y &lt;&lt; &quot;) is &quot;
                &lt;&lt; p.second &lt;&lt; '\n';
}
|output=
1 1
1 1
2 2
2 2
3 3
3 3
4 4
4 4
5 5
The magnitude of (3, 4) is 5
The magnitude of (3, -3) is -1
The magnitude of (5, 12) is 13
The magnitude of (8, 15) is 17
}}
|
{{example}}
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc operator{{=}} |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>5yfh3y2jyhmk5bruw96cjqckeb1579o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/constructor ordset</title>
    <ns>10</ns>
    <id>13684</id>
    <revision>
      <id>91172</id>
      <parentid>90535</parentid>
      <timestamp>2017-03-24T13:53:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg2844 note</comment>
      <text xml:space="preserve" bytes="5666">{{cpp/container/{{{1|}}}/title | {{{1}}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | since={{cpp/std|{{{1|}}}}} | until=c++14 | 1=
explicit {{{1}}}( const Compare&amp; comp = Compare(), 
{{space as|explicit {{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++14 | 1=
{{{1}}}() : {{{1}}}( Compare() ) {}
explicit {{{1}}}( const Compare&amp; comp, 
{{space as|explicit {{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl rev end}}
{{dcl | num=1 | since=c++11 | 1=
explicit {{{1}}}( const Allocator&amp; alloc );
}}
{{dcl rev begin | num=2}}
{{dcl | since={{cpp/std|{{{1|}}}}} | 1=
template&lt; class InputIt &gt;
{{{1}}}( InputIt first, InputIt last,
{{space as|{{{1}}}}}  const Compare&amp; comp = Compare(),
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++14 | 1=
template&lt; class InputIt &gt;
{{{1}}}( InputIt first, InputIt last, const Allocator&amp; alloc)
{{space as|{{{1}}}}} : {{{1}}}(first, last, Compare(), alloc) {}
}}
{{dcl rev end}}
{{dcl | num=3 | since={{cpp/std|{{{1|}}}}} | 1=
{{{1}}}( const {{{1}}}&amp; other );
}}
{{dcl | num=3 | since=c++11 |
{{{1}}}( const {{{1}}}&amp; other, const Allocator&amp; alloc );
}}
{{dcl | num=4 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other );
}}
{{dcl | num=4 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other, const Allocator&amp; alloc );
}}
{{dcl rev begin | num=5}}
{{dcl | since=c++11 | 1=
{{{1}}}( std::initializer_list&lt;value_type&gt; init,
{{space as|{{{1}}}}}  const Compare&amp; comp = Compare(),
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++14 | 1=
{{{1}}}( std::initializer_list&lt;value_type&gt; init, const Allocator&amp; alloc )
{{space as|{{{1}}}}} : {{{1}}}(init, Compare(), alloc) {}
}}
{{dcl rev end}}
{{dcl end}}

Constructs new container from a variety of data sources and optionally using user supplied allocator {{tt|alloc}} or comparison function object {{tt|comp}}.

@1@ [[cpp/language/default constructor|Default constructor]]. Constructs empty container.
@2@ Range constructor. Constructs the container with the contents of the range {{tt|[first, last)}}. {{cpp/container/lwg2488-note}}
@3@ [[cpp/language/copy constructor|Copy constructor]]. Constructs the container with the copy of the contents of {{tt|other}}. If {{tt|alloc}} is not provided, allocator is obtained by calling {{c|std::allocator_traits&lt;allocator_type&gt;::select_on_container_copy_construction(other.get_allocator())}}.
@4@ [[cpp/language/move constructor|Move constructor]]. Constructs the container with the contents of {{tt|other}} using move semantics. If {{tt|alloc}} is not provided, allocator is obtained by move-construction from the allocator belonging to {{tt|other}}.
@5@ [[cpp/language/list_initialization|Initializer-list constructor]]. Constructs the container with the contents of the initializer list {{tt|init}}. {{cpp/container/lwg2488-note}}

===Parameters===
{{par begin}}
{{par | alloc | allocator to use for all memory allocations of this container}}
{{par | comp | comparison function object to use for all comparisons of keys}}
{{par | first, last | the range to copy the elements from}}
{{par | other | another container to be used as source to initialize the elements of the container with}}
{{par | init | initializer list to initialize the elements of the container with}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | Compare | Compare}}
{{par req concept | Allocator | Allocator}}
{{par end}} 

===Complexity===
1) Constant

2) {{math|N log(N)}} where {{c|N {{=}} std::distance(first, last)}} in general, linear in {{tt|N}} if the range is already sorted by {{tt|value_comp()}}.

3) Linear in size of {{tt|other}}

4) Constant. If {{tt|alloc}} is given and {{c|alloc !{{=}} other.get_allocator()}}, then linear.

5) {{math|N log(N)}} where {{c|N {{=}} init.size())}} in general, linear in {{tt|N}} if {{tt|init}} is already sorted by {{tt|value_comp()}}.

===Notes===
{{cpp/container/lwg2321-note|4}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;set&gt;
#include &lt;cmath&gt;

struct Point { double x, y; };
struct PointCmp {
    bool operator()(const Point&amp; lhs, const Point&amp; rhs) const { 
        return std::hypot(lhs.x, lhs.y) &lt; std::hypot(rhs.x, rhs.y); 
    }
};
 
int main()
{
  // (1) Default constructor
  std::set&lt;std::string&gt; a;
  a.insert(&quot;cat&quot;);
  a.insert(&quot;dog&quot;);
  a.insert(&quot;horse&quot;);
  for(auto&amp; str: a) std::cout &lt;&lt; str &lt;&lt; ' ';
  std::cout &lt;&lt; '\n';
 
  // (2) Iterator constructor
  std::set&lt;std::string&gt; b(a.find(&quot;dog&quot;), a.end());
  for(auto&amp; str: b) std::cout &lt;&lt; str &lt;&lt; ' ';
  std::cout &lt;&lt; '\n';
 
  // (3) Copy constructor
  std::set&lt;std::string&gt; c(a);
  c.insert(&quot;another horse&quot;);
  for(auto&amp; str: c) std::cout &lt;&lt; str &lt;&lt; ' ';
  std::cout &lt;&lt; '\n';
 
  // (4) Move constructor
  std::set&lt;std::string&gt; d(std::move(a));
  for(auto&amp; str: d) std::cout &lt;&lt; str &lt;&lt; ' ';
  std::cout &lt;&lt; '\n';
  std::cout &lt;&lt; &quot;moved-from set is &quot;;
  for(auto&amp; str: a) std::cout &lt;&lt; str &lt;&lt; ' ';
  std::cout &lt;&lt; '\n';
 
  // (5) Initializer list constructor
  std::set&lt;std::string&gt; e {&quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;five&quot;, &quot;eight&quot;};
  for(auto&amp; str: e) std::cout &lt;&lt; str &lt;&lt; ' ';
  std::cout &lt;&lt; '\n';
  
  // custom comparison
  std::set&lt;Point, PointCmp&gt; z = {{2, 5}, {3, 4}, {1, 1}};
  z.insert({1, -1}); // this fails because the magnitude of 1,-1 equals 1,1
  for(auto&amp; p: z) std::cout &lt;&lt; '(' &lt;&lt; p.x &lt;&lt; ',' &lt;&lt; p.y &lt;&lt; &quot;) &quot;;
  std::cout &lt;&lt; '\n';
}
|output=
cat dog horse 
dog horse 
another horse cat dog horse 
cat dog horse 
moved-from set is 
eight five one three two 
(1,1) (3,4) (2,5) 
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc operator{{=}} |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>k3w9dm4l2dxif13ydd4d1vio8fkpo6d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/constructor unord</title>
    <ns>10</ns>
    <id>1925</id>
    <revision>
      <id>91174</id>
      <parentid>90835</parentid>
      <timestamp>2017-03-24T13:56:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg2488 note if unique</comment>
      <text xml:space="preserve" bytes="8359">{{cpp/container/{{{1|}}}/title | {{{1}}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++14 | 1=
explicit {{{1}}}( size_type bucket_count = /*implementation-defined*/,
{{space as|explicit {{{1}}}}}  const Hash&amp; hash = Hash(),
{{space as|explicit {{{1}}}}}  const KeyEqual&amp; equal = KeyEqual(),
{{space as|explicit {{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++14 | 1=
{{{1}}}() : {{{1}}}( size_type(/*implementation-defined*/) ) {}
explicit {{{1}}}( size_type bucket_count,
{{space as|explicit {{{1}}}}}  const Hash&amp; hash = Hash(),
{{space as|explicit {{{1}}}}}  const KeyEqual&amp; equal = KeyEqual(),
{{space as|explicit {{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl rev end}}
{{dcl | num=1 | since=c++14 | 1=
{{{1}}}( size_type bucket_count,
{{space as|{{{1}}}}}  const Allocator&amp; alloc )
{{space as|{{{1}}}}} : {{{1}}}(bucket_count, Hash(), KeyEqual(), alloc) {}
{{{1}}}( size_type bucket_count,
{{space as|{{{1}}}}}  const Hash&amp; hash,
{{space as|{{{1}}}}}  const Allocator&amp; alloc )
{{space as|{{{1}}}}} : {{{1}}}(bucket_count, hash, KeyEqual(), alloc) {}
}}
{{dcl | num=1 | since=c++11 | 1=
explicit {{{1}}}( const Allocator&amp; alloc );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class InputIt &gt;
{{{1}}}( InputIt first, InputIt last,
{{space as|{{{1}}}}}  size_type bucket_count = /*implementation-defined*/,
{{space as|{{{1}}}}}  const Hash&amp; hash = Hash(),
{{space as|{{{1}}}}}  const KeyEqual&amp; equal = KeyEqual(),
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=2 | since=c++14 |1=
template&lt; class InputIt &gt;
{{{1}}}( InputIt first, InputIt last,
{{space as|{{{1}}}}}  size_type bucket_count,
{{space as|{{{1}}}}}  const Allocator&amp; alloc )
{{space as|{{{1}}}}} : {{{1}}}(first, last, 
{{space as|{{{1}}} : (}} bucket_count, Hash(), KeyEqual(), alloc) {}
}}
{{dcl | num=2 | since=c++14 |1=
template&lt; class InputIt &gt;
{{{1}}}( InputIt first, InputIt last,
{{space as|{{{1}}}}}  size_type bucket_count,
{{space as|{{{1}}}}}  const Hash&amp; hash,
{{space as|{{{1}}}}}  const Allocator&amp; alloc ) 
{{space as|{{{1}}}}} : {{{1}}}(first, last, 
{{space as|{{{1}}} : (}} bucket_count, hash, KeyEqual(), alloc) {}
}}
{{dcl | num=3 | since=c++11 | 1=
{{{1}}}( const {{{1}}}&amp; other );
}}
{{dcl | num=3 | since=c++11 |
{{{1}}}( const {{{1}}}&amp; other, const Allocator&amp; alloc );
}}
{{dcl | num=4 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other );
}}
{{dcl | num=4 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other, const Allocator&amp; alloc );
}}
{{dcl | num=5 | since=c++11 | 1=
{{{1}}}( std::initializer_list&lt;value_type&gt; init,
{{space as|{{{1}}}}}  size_type bucket_count = /*implementation-defined*/,
{{space as|{{{1}}}}}  const Hash&amp; hash = Hash(),
{{space as|{{{1}}}}}  const KeyEqual&amp; equal = KeyEqual(),
{{space as|{{{1}}}}}  const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=5 | since=c++14 | 1=
{{{1}}}( std::initializer_list&lt;value_type&gt; init,
{{space as|{{{1}}}}}  size_type bucket_count,
{{space as|{{{1}}}}}  const Allocator&amp; alloc ) 
{{space as|{{{1}}}}} : {{{1}}}(init, bucket_count, 
{{space as|{{{1}}} : (}} Hash(), KeyEqual(), alloc) {}
}}
{{dcl | num=5 | since=c++14 | 1=
{{{1}}}( std::initializer_list&lt;value_type&gt; init,
{{space as|{{{1}}}}}  size_type bucket_count,
{{space as|{{{1}}}}}  const Hash&amp; hash,
{{space as|{{{1}}}}}  const Allocator&amp; alloc ) 
{{space as|{{{1}}}}} : {{{1}}}(init, bucket_count, 
{{space as|{{{1}}} : (}} hash, KeyEqual(), alloc) {}
}}
{{dcl end}}

Constructs new container from a variety of data sources. Optionally uses user supplied {{tt|bucket_count}} as a minimal number of buckets to create, {{tt|hash}} as the hash function, {{tt|equal}} as the function to compare keys and {{tt|alloc}} as the allocator. 

@1@ Constructs empty container. Sets {{tt|max_load_factor()}} to 1.0. For the default constructor, the number of buckets is implementation-defined.
@2@ constructs the container with the contents of the range {{tt|[first, last)}}. Sets {{tt|max_load_factor()}} to 1.0. {{cpp/container/if uniq |{{{1|}}}|{{cpp/container/lwg2488-note}}}}
@3@ copy constructor. Constructs the container with the copy of the contents of {{tt|other}}, copies the load factor, the predicate, and the hash function as well. If {{tt|alloc}} is not provided, allocator is obtained by calling {{c|std::allocator_traits&lt;allocator_type&gt;::select_on_container_copy_construction(other.get_allocator())}}.
@4@ move constructor. Constructs the container with the contents of {{tt|other}} using move semantics. If {{tt|alloc}} is not provided, allocator is obtained by move-construction from the allocator belonging to {{tt|other}}.
@5@ constructs the container with the contents of the initializer list {{tt|init}}, same as {{{1}}}(init.begin(), init.end()).

===Parameters===
{{par begin}}
{{par | alloc | allocator to use for all memory allocations of this container}}
{{par | bucket_count | minimal number of buckets to use on initialization. If it is not specified, implementation-defined default value is used}}
{{par | hash | hash function to use}}
{{par | equal | comparison function to use for all key comparisons of this container}}
{{par | first, last | the range to copy the elements from}}
{{par | other | another container to be used as source to initialize the elements of the container with}}
{{par | init | initializer list to initialize the elements of the container with}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Complexity===
@1@ constant
@2@ average case linear worst case quadratic in distance between {{tt|first}} and {{tt|last}}
@3@ linear in size of {{tt|other}}
@4@ constant. If {{tt|alloc}} is given and {{c|alloc !{{=}} other.get_allocator()}}, then linear.
@5@ average case linear worst case quadratic in size of {{tt|init}}

===Notes===
{{include|cpp/container/lwg2321-note|4}}

===Example===
{{example
 | code=
{{#switch:{{{1|}}} |unordered_map=
#include &lt;unordered_map&gt;
#include &lt;vector&gt;
#include &lt;bitset&gt;
#include &lt;string&gt;
#include &lt;utility&gt;

struct Key {
    std::string first;
    std::string second;
};

struct KeyHash {
 std::size_t operator()(const Key&amp; k) const
 {
     return std::hash&lt;std::string&gt;()(k.first) ^
            (std::hash&lt;std::string&gt;()(k.second) &lt;&lt; 1);
 }
};

struct KeyEqual {
 bool operator()(const Key&amp; lhs, const Key&amp; rhs) const
 {
    return lhs.first == rhs.first &amp;&amp; lhs.second == rhs.second;
 }
};

struct Foo {
    Foo(int val_) : val(val_) {}
    int val;
    bool operator==(const Foo &amp;rhs) const { return val == rhs.val; }
};

namespace std {
    template&lt;&gt; struct hash&lt;Foo&gt; {
        std::size_t operator()(const Foo &amp;f) const {
            return std::hash&lt;int&gt;{}(f.val);
        }  
    };
}

int main()
{
    // default constructor: empty map
    std::unordered_map&lt;std::string, std::string&gt; m1;

    // list constructor
    std::unordered_map&lt;int, std::string&gt; m2 =
    {
        {1, &quot;foo&quot;},
        {3, &quot;bar&quot;},
        {2, &quot;baz&quot;},
    };

    // copy constructor
    std::unordered_map&lt;int, std::string&gt; m3 = m2;

    // move constructor
    std::unordered_map&lt;int, std::string&gt; m4 = std::move(m2);

    // range constructor
    std::vector&lt;std::pair&lt;std::bitset&lt;8&gt;, int&gt;&gt; v = { {0x12, 1}, {0x01,-1} };
    std::unordered_map&lt;std::bitset&lt;8&gt;, double&gt; m5(v.begin(), v.end());

    //Option 1 for a constructor with a custom Key type
    // Define the KeyHash and KeyEqual structs and use them in the template
    std::unordered_map&lt;Key, std::string, KeyHash, KeyEqual&gt; m6 = {
            { {&quot;John&quot;, &quot;Doe&quot;}, &quot;example&quot;},
            { {&quot;Mary&quot;, &quot;Sue&quot;}, &quot;another&quot;}
    };
    
    //Option 2 for a constructor with a custom Key type
    // Define a const == operator for the class/struct and specialize std::hash
    // structure in the std namespace
    std::unordered_map&lt;Foo, std::string&gt; m7 = {
        { Foo(1), &quot;One&quot;}, { 2, &quot;Two&quot;}, { 3, &quot;Three&quot;}
    };

    //Option 3: Use lambdas
    // Note that the initial bucket count has to be passed to the constructor
    struct Goo {int val; };
    auto hash = [](const Goo &amp;g){ return std::hash&lt;int&gt;{}(g.val); };
    auto comp = [](const Goo &amp;l, const Goo &amp;r){ return l.val == r.val; };
    std::unordered_map&lt;Goo, double, decltype(hash), decltype(comp)&gt; m8(10, hash, comp);
}
|}}
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc operator{{=}} |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>0tc9n2yz1tr5ifdyausoro13upa5cdm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/correct include assoc</title>
    <ns>10</ns>
    <id>13697</id>
    <revision>
      <id>71797</id>
      <timestamp>2014-06-24T14:14:54Z</timestamp>
      <contributor>
        <username>DizzySkin</username>
        <id>3171</id>
      </contributor>
      <comment>Includes the correct std lib for associative containers. Defaults to &quot;set&quot;.</comment>
      <text xml:space="preserve" bytes="156">#include &lt;{{cpp/container/if ord| {{{1|set}}}| {{cpp/container/if map| {{{1|set}}}| map| set}}| unordered_{{cpp/container/if map| {{{1|set}}}| map| set}}}}&gt;</text>
      <sha1>by1ye91arxkriuuqd3vgt2wdcqy71c8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/count ord</title>
    <ns>10</ns>
    <id>1926</id>
    <revision>
      <id>83185</id>
      <parentid>74661</parentid>
      <timestamp>2016-01-23T14:50:19Z</timestamp>
      <contributor>
        <ip>183.206.161.6</ip>
      </contributor>
      <text xml:space="preserve" bytes="1452">{{cpp/container/{{{1|}}}/title | count}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
size_type count( const Key&amp; key ) const;
}}
{{dcl | num=2 | since=c++14 |
template&lt; class K &gt; 
size_type count( const K&amp; x ) const;
}}
{{dcl end}}
Returns the number of elements with key that compares ''equivalent'' to the specified argument{{cpp/container/if uniq|{{{1|}}}|, which is either 1 or 0 since this container does not allow duplicates}}.

@1@ Returns the number of elements with key {{tt|key}}.

@2@ Returns the number of elements with key that compares equivalent to the value {{tt|x}}. {{cpp/enable if |the qualified-id {{c|Compare::is_transparent}} is valid and denotes a type}}. They allow calling this function without constructing an instance of {{tt|Key}}.

===Parameters===
{{par begin}}
{{par | key | key value of the elements to count}}
{{par | x | alternative value to compare to the keys}}
{{par end}} 

===Return value===
Number of elements with key that compares ''equivalent'' to {{tt|key}} or {{tt|x}}{{cpp/container/if uniq|{{{1|}}}|, that is either 1 or 0}}.

===Complexity===
{{cpp/container/if uniq|{{{1|}}}
|Logarithmic in the size of the container.
|Logarithmic in the size of the container plus linear in the number of the elements found.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc find |{{{1|}}}}}
{{dsc inc | cpp/container/dsc equal_range |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>2pkusoyez9akd60ewzc5g1b5zkbi36s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/count unord</title>
    <ns>10</ns>
    <id>12947</id>
    <revision>
      <id>87973</id>
      <parentid>87972</parentid>
      <timestamp>2016-10-17T21:55:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>same note on the return value</comment>
      <text xml:space="preserve" bytes="989">{{cpp/container/{{{1|}}}/title | count}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
size_type count( const Key&amp; key ) const;
}}
{{dcl end}}

Returns the number of elements with key that compares equal to the specified argument {{tt|key}}{{cpp/container/if uniq|{{{1|}}}|, which is either 1 or 0 since this container does not allow duplicates}}.

===Parameters===
{{par begin}}
{{par | key | key value of the elements to count}}
{{par end}} 

===Return value===
Number of elements with key {{tt|key}}{{cpp/container/if uniq|{{{1|}}}|, that is either 1 or 0}}.

===Complexity===
{{cpp/container/if uniq| {{{1|}}}|
Constant on average, worst case linear in the size of the container.
|linear in the number of elements with key {{tt|key}} on average, worst case linear in the size of the container.}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc find |{{{1|}}}}}
{{dsc inc | cpp/container/dsc equal_range |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>si49baqx7r4db9192tzu3im3nqlbj7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/data</title>
    <ns>10</ns>
    <id>1927</id>
    <revision>
      <id>91961</id>
      <parentid>84114</parentid>
      <timestamp>2017-03-31T20:17:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1122">{{cpp/container/{{{1|}}}/title | data}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17 |
T* data();
}}
{{dcl | since=c++17 |
constexpr T* data();
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17 |
const T* data() const;
}}
{{dcl | since=c++17 |
constexpr const T* data() const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}|c++11}} |
T* data();
}}
{{dcl | since={{cpp/std|{{{1|}}}|c++11}} |
const T* data() const;
}}
{{dcl end}}}}

Returns pointer to the underlying array serving as element storage. The pointer is such that range {{tt|[data(); data() + size())}} is always a valid range, even if the container is empty ({{tt|data()}} is not dereferenceable in that case).

===Parameters===
(none)

===Return value===
Pointer to the underlying element storage. For non-empty containers, returns {{c|&amp;front()}}

===Complexity===
Constant.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc front |{{{1|}}}}}
{{dsc inc | cpp/container/dsc back |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>ht89u7juavoni0f11gfju84id2q4z2g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/example empty</title>
    <ns>10</ns>
    <id>10033</id>
    <revision>
      <id>47712</id>
      <timestamp>2013-05-16T19:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="509">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::deque&lt;int&gt;}} contains any elements:
 | code=
#include &lt;deque&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::deque&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.push_back(42);
    numbers.push_back(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/example operator=</title>
    <ns>10</ns>
    <id>12826</id>
    <revision>
      <id>63233</id>
      <timestamp>2013-07-06T11:58:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1138">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::deque}} to another:
 | code=
#include &lt;deque&gt;
#include &lt;iostream&gt;

void display_sizes(const std::deque&lt;int&gt;&amp; nums1,
                   const std::deque&lt;int&gt;&amp; nums2,
                   const std::deque&lt;int&gt;&amp; nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::deque&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::deque&lt;int&gt; nums2; 
    std::deque&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/example shrink to fit</title>
    <ns>10</ns>
    <id>9954</id>
    <revision>
      <id>65257</id>
      <parentid>47813</parentid>
      <timestamp>2013-09-06T13:52:10Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>deque doesn't have capacity</comment>
      <text xml:space="preserve" bytes="335">{{example
 |
 | code=
#include &lt;deque&gt;

int main() {
    std::deque&lt;int&gt; nums(1000, 42);
    nums.push_front(1);
    nums.pop_front();

    nums.clear();

    // nums now contains no items, but it may still be holding allocated memory. 
    // Calling shrink_to_fit will free any unused memory.
    nums.shrink_to_fit();
}
| output=
}}</text>
      <sha1>a4mkwrh7arru3quq1b2mfa3v75g1q2w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/example size</title>
    <ns>10</ns>
    <id>10044</id>
    <revision>
      <id>52456</id>
      <parentid>47733</parentid>
      <timestamp>2013-06-01T04:47:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="319">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::deque}}:
 | code=
#include &lt;deque&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::deque&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/navbar</title>
    <ns>10</ns>
    <id>1064</id>
    <revision>
      <id>39872</id>
      <parentid>35560</parentid>
      <timestamp>2012-09-28T19:57:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/deque/navbar heading
|content3 = cpp/container/deque/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/navbar content</title>
    <ns>10</ns>
    <id>1065</id>
    <revision>
      <id>52457</id>
      <parentid>35561</parentid>
      <timestamp>2013-06-01T04:47:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1517">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/deque/deque }}
{{nv mem ln | cpp/container/deque/~deque }}
{{nv mem ln | cpp/container/deque/operator{{=}} }}
{{nv mem ln | cpp/container/deque/assign }}
{{nv mem ln | cpp/container/deque/get_allocator }}

{{nv h2 | Element access}}
{{nv mem ln | cpp/container/deque/front }}
{{nv mem ln | cpp/container/deque/back }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/deque/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/deque/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/deque/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/deque/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/deque/empty}}
{{nv mem ln | cpp/container/deque/size}}
{{nv mem ln | cpp/container/deque/max_size}}
{{nv mem ln | cpp/container/deque/shrink_to_fit}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/deque/clear}}
{{nv mem ln | cpp/container/deque/insert}}
{{nv mem ln | cpp/container/deque/emplace}}
{{nv mem ln | cpp/container/deque/erase}}
{{nv mem ln | cpp/container/deque/push_front}}
{{nv mem ln | cpp/container/deque/emplace_front}}
{{nv mem ln | cpp/container/deque/pop_front}}
{{nv mem ln | cpp/container/deque/push_back}}
{{nv mem ln | cpp/container/deque/emplace_back}}
{{nv mem ln | cpp/container/deque/pop_back}}
{{nv mem ln | cpp/container/deque/resize}}
{{nv mem ln | cpp/container/deque/swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/navbar heading</title>
    <ns>10</ns>
    <id>1066</id>
    <revision>
      <id>47252</id>
      <parentid>35562</parentid>
      <timestamp>2013-05-02T15:02:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="40">{{ltt|cpp/container/deque | std::deque}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/deque/title</title>
    <ns>10</ns>
    <id>1067</id>
    <revision>
      <id>2135</id>
      <parentid>2134</parentid>
      <timestamp>2011-06-06T22:52:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=deque::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/destructor</title>
    <ns>10</ns>
    <id>1068</id>
    <revision>
      <id>92008</id>
      <parentid>62193</parentid>
      <timestamp>2017-04-01T20:41:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="549">{{cpp/container/{{{1|}}}/title | ~{{{1}}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
~{{{1}}}();
}}
{{dcl end}}

{{cpp/container/if ad|{{{1|}}}
|Destructs the container adaptor.
|Destructs the container.
}} The destructors of the elements are called and the used storage is deallocated. Note, that if the elements are pointers, the pointed-to objects are not destroyed.

===Complexity===
{{cpp/container/if ad|{{{1|}}}
|Linear in the size of the container adaptor.
|Linear in the size of the container.
}}</text>
      <sha1>8y8xsdznsop1treokb9gsh8cf432ecu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc allocator type</title>
    <ns>10</ns>
    <id>1186</id>
    <revision>
      <id>87083</id>
      <parentid>55072</parentid>
      <timestamp>2016-07-25T17:23:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+node handle</comment>
      <text xml:space="preserve" bytes="173">{{#ifeq:{{{1|}}}|node_handle
|{{dsc | {{tt|allocator_type}} | the allocator to be used when destroying the element }}
|{{dsc | {{tt|allocator_type}} | {{tt|Allocator}} }}
}}</text>
      <sha1>7r9k0yst173q426hm2gyxq52axnqoyy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc array</title>
    <ns>10</ns>
    <id>5089</id>
    <revision>
      <id>55076</id>
      <parentid>52346</parentid>
      <timestamp>2013-06-01T05:19:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list array]] to [[Template:cpp/container/dsc array]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tclass | cpp/container/array | static contiguous array | notes={{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc assign</title>
    <ns>10</ns>
    <id>1928</id>
    <revision>
      <id>55079</id>
      <parentid>52347</parentid>
      <timestamp>2013-06-01T05:19:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list assign]] to [[Template:cpp/container/dsc assign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/container/{{{1|}}}/assign | assigns values to the container }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc at</title>
    <ns>10</ns>
    <id>1929</id>
    <revision>
      <id>55083</id>
      <parentid>52348</parentid>
      <timestamp>2013-06-01T05:19:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list at]] to [[Template:cpp/container/dsc at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc mem fun | cpp/container/{{{1|}}}/at | access specified element with bounds checking | notes={{#ifeq: {{{1|}}} | map | {{mark c++11}}}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc back</title>
    <ns>10</ns>
    <id>1930</id>
    <revision>
      <id>55086</id>
      <parentid>52349</parentid>
      <timestamp>2013-06-01T05:19:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list back]] to [[Template:cpp/container/dsc back]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/container/{{{1|}}}/back | access the last element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc before begin</title>
    <ns>10</ns>
    <id>1931</id>
    <revision>
      <id>55090</id>
      <parentid>52350</parentid>
      <timestamp>2013-06-01T05:19:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list before begin]] to [[Template:cpp/container/dsc before begin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="147">{{dsc mem fun | cpp/container/{{{1|}}}/before_begin | title=before_begin&lt;br&gt; cbefore_begin | returns an iterator to the element before beginning }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc begin</title>
    <ns>10</ns>
    <id>1932</id>
    <revision>
      <id>55092</id>
      <parentid>52351</parentid>
      <timestamp>2013-06-01T05:19:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list begin]] to [[Template:cpp/container/dsc begin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc mem fun | cpp/container/{{{1|}}}/begin | title=begin&lt;br&gt; cbegin | returns an iterator to the beginning | notes=&lt;br&gt;{{cpp/container/mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc begin(int)</title>
    <ns>10</ns>
    <id>1933</id>
    <revision>
      <id>55095</id>
      <parentid>52352</parentid>
      <timestamp>2013-06-01T05:19:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list begin(int)]] to [[Template:cpp/container/dsc begin(int)]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="174">{{dsc mem fun | cpp/container/{{{1|}}}/begin2 | title=begin{{dsc small|(int)}}&lt;br&gt; cbegin{{dsc small|(int)}} | returns an iterator to the beginning of the specified bucket }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc bucket</title>
    <ns>10</ns>
    <id>1934</id>
    <revision>
      <id>55101</id>
      <parentid>52353</parentid>
      <timestamp>2013-06-01T05:20:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list bucket]] to [[Template:cpp/container/dsc bucket]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/container/{{{1|}}}/bucket | returns the bucket for specific key}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc bucket count</title>
    <ns>10</ns>
    <id>1935</id>
    <revision>
      <id>55105</id>
      <parentid>52354</parentid>
      <timestamp>2013-06-01T05:20:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list bucket count]] to [[Template:cpp/container/dsc bucket count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/container/{{{1|}}}/bucket_count | returns the number of buckets}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc bucket size</title>
    <ns>10</ns>
    <id>1936</id>
    <revision>
      <id>55110</id>
      <parentid>52355</parentid>
      <timestamp>2013-06-01T05:20:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list bucket size]] to [[Template:cpp/container/dsc bucket size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/container/{{{1|}}}/bucket_size | returns the number of elements in specific bucket}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc c</title>
    <ns>10</ns>
    <id>2199</id>
    <revision>
      <id>55116</id>
      <parentid>52356</parentid>
      <timestamp>2013-06-01T05:20:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list c]] to [[Template:cpp/container/dsc c]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc prot mem obj | nolink=true | {{dsc small|Container}} c | the underlying container}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc capacity</title>
    <ns>10</ns>
    <id>1937</id>
    <revision>
      <id>55120</id>
      <parentid>52357</parentid>
      <timestamp>2013-06-01T05:20:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list capacity]] to [[Template:cpp/container/dsc capacity]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc mem fun | cpp/container/{{{1|}}}/capacity | returns the number of elements that can be held in currently allocated storage }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc clear</title>
    <ns>10</ns>
    <id>1938</id>
    <revision>
      <id>55125</id>
      <parentid>52358</parentid>
      <timestamp>2013-06-01T05:20:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list clear]] to [[Template:cpp/container/dsc clear]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/container/{{{1|}}}/clear | clears the contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc const iterator</title>
    <ns>10</ns>
    <id>1187</id>
    <revision>
      <id>92010</id>
      <parentid>83789</parentid>
      <timestamp>2017-04-01T20:42:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="678">{{#switch:{{{1|}}}
| array = {{dsc | {{tt|const_iterator}} | Constant random access iterator {{rev inl|since=c++17|and {{concept|LiteralType}}&lt;!--side effect of P0031--&gt;}} }}
| vector
| deque
| basic_string = {{dsc | {{tt|const_iterator}} | Constant random access iterator }}
| forward_list = {{dsc | {{tt|const_iterator}} | Constant forward iterator }}
| list 
| set
| multiset
| map
| multimap = {{dsc | {{tt|const_iterator}} | Constant bidirectional iterator }}
| unordered_set
| unordered_multiset
| unordered_map
| unordered_multimap = {{dsc | {{tt|const_iterator}} | Constant forward iterator }}
| vector_bool = {{dsc | {{tt|const_iterator}} | implementation-defined }}
}}</text>
      <sha1>gc778zab8iuilvuac1tl93s1e7e7k5r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc const local iterator</title>
    <ns>10</ns>
    <id>1188</id>
    <revision>
      <id>55134</id>
      <parentid>52360</parentid>
      <timestamp>2013-06-01T05:20:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list const local iterator]] to [[Template:cpp/container/dsc const local iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="250">{{dsc | {{tt|const_local_iterator}} | An iterator type whose category, value, difference, pointer and&lt;br&gt; reference types are the same as {{tt|const_iterator}}. This iterator&lt;br&gt; can be used to iterate through a single bucket but not across buckets}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc const pointer</title>
    <ns>10</ns>
    <id>1189</id>
    <revision>
      <id>92009</id>
      <parentid>71981</parentid>
      <timestamp>2017-04-01T20:42:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="613">{{#switch:{{{1|}}}
| vector
| deque 
| list
| set
| multiset
| map
| multimap
| basic_string = {{dsc | {{tt|const_pointer}} | {{rev begin|noborder=true}}{{rev|until=c++11|{{tt|Allocator::const_pointer}}}}{{rev|since=c++11|{{c|std::allocator_traits&lt;Allocator&gt;::const_pointer}}}}{{rev end}} }}
| array = {{dsc | {{tt|const_pointer}} | {{tt|const value_type*}}}}
| forward_list
| unordered_set
| unordered_multiset
| unordered_map
| unordered_multimap = {{dsc | {{tt|const_pointer}} | {{c|std::allocator_traits&lt;Allocator&gt;::const_pointer}} }}
| vector_bool = {{dsc | {{tt|const_pointer}} | implementation-defined}}
}}</text>
      <sha1>i5j9j108ri5c70dql7colmgowfa6j8b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc const reference</title>
    <ns>10</ns>
    <id>1190</id>
    <revision>
      <id>92011</id>
      <parentid>71982</parentid>
      <timestamp>2017-04-01T20:42:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="597">{{#switch:{{{1|}}}
| vector
| deque 
| list
| set
| multiset
| map
| multimap
| basic_string = {{dsc | {{tt|const_reference}} | {{rev begin|noborder=true}}{{rev|until=c++11|{{tt|Allocator::const_reference}}}}{{rev|since=c++11|{{tt|const value_type&amp;}}}}{{rev end}} }}
| vector_bool = {{dsc | {{tt|const_reference}} | {{c|bool}} }}
| array
| forward_list
| unordered_set
| unordered_multiset
| unordered_map
| unordered_multimap = {{dsc | {{tt|const_reference}} | {{tt|const value_type&amp;}} }}
| stack
| queue
| priority_queue = {{dsc | {{tt|const_reference}} | {{tt|Container::const_reference}} }}
}}</text>
      <sha1>rq4bj1q1x1e461s9tiv1i4afhvq8p0p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc const reverse iterator</title>
    <ns>10</ns>
    <id>1191</id>
    <revision>
      <id>55146</id>
      <parentid>52363</parentid>
      <timestamp>2013-06-01T05:20:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list const reverse iterator]] to [[Template:cpp/container/dsc const reverse iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc | &lt;code&gt;const_reverse_iterator&lt;/code&gt; | {{c|std::reverse_iterator&lt;const_iterator&gt;}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc constructor</title>
    <ns>10</ns>
    <id>1939</id>
    <revision>
      <id>55150</id>
      <parentid>52364</parentid>
      <timestamp>2013-06-01T05:20:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list constructor]] to [[Template:cpp/container/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem ctor | cpp/container/{{{1|}}}/{{{1|constructor}}} | constructs the {{tt|{{{1}}}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc container type</title>
    <ns>10</ns>
    <id>1192</id>
    <revision>
      <id>55153</id>
      <parentid>52365</parentid>
      <timestamp>2013-06-01T05:20:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list container type]] to [[Template:cpp/container/dsc container type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">{{dsc | {{tt|container_type}} | {{tt|Container}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc count</title>
    <ns>10</ns>
    <id>1940</id>
    <revision>
      <id>55157</id>
      <parentid>52366</parentid>
      <timestamp>2013-06-01T05:20:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list count]] to [[Template:cpp/container/dsc count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem fun | cpp/container/{{{1|}}}/count | returns the number of elements matching specific key }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc data</title>
    <ns>10</ns>
    <id>1941</id>
    <revision>
      <id>55160</id>
      <parentid>52367</parentid>
      <timestamp>2013-06-01T05:20:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list data]] to [[Template:cpp/container/dsc data]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/container/{{{1|}}}/data | direct access to the underlying array | notes={{cpp/container/mark c++11|{{{1|}}}}}  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc deque</title>
    <ns>10</ns>
    <id>5093</id>
    <revision>
      <id>55162</id>
      <parentid>52368</parentid>
      <timestamp>2013-06-01T05:20:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list deque]] to [[Template:cpp/container/dsc deque]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">{{dsc tclass | cpp/container/deque | double-ended queue}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc destructor</title>
    <ns>10</ns>
    <id>1942</id>
    <revision>
      <id>55164</id>
      <parentid>52369</parentid>
      <timestamp>2013-06-01T05:20:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list destructor]] to [[Template:cpp/container/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem dtor | cpp/container/{{{1|}}}/~{{{1|}}} | destructs the {{tt|{{{1}}}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc difference type</title>
    <ns>10</ns>
    <id>1193</id>
    <revision>
      <id>92012</id>
      <parentid>77807</parentid>
      <timestamp>2017-04-01T20:42:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="621">{{#switch:{{{1|}}}
| array = {{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
| vector
| deque 
| forward_list
| list
| set
| multiset
| unordered_set
| unordered_multiset
| map
| multimap
| unordered_map
| unordered_multimap = {{dsc | {{tt|difference_type}} | Signed integer type (usually {{lc|std::ptrdiff_t}}) }}
| basic_string = {{dsc | {{tt|difference_type}} | {{rev begin|noborder=true}}{{rev|until=c++11|{{tt|Allocator::difference_type}}}}{{rev|since=c++11|{{c|std::allocator_traits&lt;Allocator&gt;::difference_type}}}}{{rev end}} }}
| vector_bool = {{dsc | {{tt|difference_type}} | implementation-defined}}
}}</text>
      <sha1>1me1e4pmwjzvavos023e30ubnklus0f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc emplace</title>
    <ns>10</ns>
    <id>1943</id>
    <revision>
      <id>74461</id>
      <parentid>74460</parentid>
      <timestamp>2014-12-17T18:21:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 74460 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) self-undo</comment>
      <text xml:space="preserve" bytes="554">{{#switch:{{{1|}}}
| stack
= {{dsc mem fun | cpp/container/{{{1|}}}/emplace | constructs element in-place at the top | notes={{mark c++11}} }}
| queue
= {{dsc mem fun | cpp/container/{{{1|}}}/emplace | constructs element in-place at the end | notes={{mark c++11}} }}
| priority_queue
= {{dsc mem fun | cpp/container/{{{1|}}}/emplace | constructs element in-place and sorts the underlying container | notes={{mark c++11}} }}
| {{dsc mem fun | cpp/container/{{{1|}}}/emplace | constructs element in-place | notes={{cpp/container/mark c++11|{{{1|}}}}} }}
}}</text>
      <sha1>kmbldz5wnlpqzorzmhkp8apo8b1q4zv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc emplace after</title>
    <ns>10</ns>
    <id>1944</id>
    <revision>
      <id>55172</id>
      <parentid>52373</parentid>
      <timestamp>2013-06-01T05:20:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list emplace after]] to [[Template:cpp/container/dsc emplace after]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/container/{{{1|}}}/emplace_after | constructs elements in-place after an element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc emplace back</title>
    <ns>10</ns>
    <id>1945</id>
    <revision>
      <id>80863</id>
      <parentid>55176</parentid>
      <timestamp>2015-09-11T06:13:13Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/container/{{{1|}}}/emplace_back | constructs an element in-place at the end | notes={{mark c++11}} }}</text>
      <sha1>1j3k84kxi16wyowjjnz5jbzd36ybv34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc emplace front</title>
    <ns>10</ns>
    <id>1946</id>
    <revision>
      <id>80862</id>
      <parentid>55179</parentid>
      <timestamp>2015-09-11T06:12:59Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="150">{{dsc mem fun | cpp/container/{{{1|}}}/emplace_front | constructs an element in-place at the beginning | notes={{cpp/container/mark c++11|{{{1}}}}} }}</text>
      <sha1>7706odgaih6iz0jytgbrgmzeeqg8b0t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc emplace hint</title>
    <ns>10</ns>
    <id>1947</id>
    <revision>
      <id>74462</id>
      <parentid>74459</parentid>
      <timestamp>2014-12-17T18:22:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>self-undo, didn't realize what the template actually does</comment>
      <text xml:space="preserve" bytes="144">{{dsc mem fun | cpp/container/{{{1|}}}/emplace_hint | constructs elements in-place using a hint | notes={{cpp/container/mark c++11|{{{1|}}}}} }}</text>
      <sha1>2uc07c9onenrv63zy10m6a3hch4d3a9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc empty</title>
    <ns>10</ns>
    <id>1948</id>
    <revision>
      <id>55187</id>
      <parentid>52377</parentid>
      <timestamp>2013-06-01T05:20:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list empty]] to [[Template:cpp/container/dsc empty]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="243">{{#switch:{{{1|}}}
| stack | queue | priority_queue
={{dsc mem fun | cpp/container/{{{1|}}}/empty | checks whether the underlying container is empty }}
|{{dsc mem fun | cpp/container/{{{1|}}}/empty | checks whether the container is empty }}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc end</title>
    <ns>10</ns>
    <id>1949</id>
    <revision>
      <id>55191</id>
      <parentid>52378</parentid>
      <timestamp>2013-06-01T05:21:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list end]] to [[Template:cpp/container/dsc end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/container/{{{1|}}}/end | title=end &lt;br&gt;cend | returns an iterator to the end | notes=&lt;br&gt;{{cpp/container/mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc end(int)</title>
    <ns>10</ns>
    <id>1950</id>
    <revision>
      <id>55197</id>
      <parentid>52379</parentid>
      <timestamp>2013-06-01T05:21:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list end(int)]] to [[Template:cpp/container/dsc end(int)]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="162">{{dsc mem fun | cpp/container/{{{1|}}}/end2 | title=end{{dsc small|(int)}}&lt;br&gt; cend{{dsc small|(int)}} | returns an iterator to the end of the specified bucket }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc equal range</title>
    <ns>10</ns>
    <id>1951</id>
    <revision>
      <id>55200</id>
      <parentid>52380</parentid>
      <timestamp>2013-06-01T05:21:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list equal range]] to [[Template:cpp/container/dsc equal range]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/container/{{{1|}}}/equal_range | returns range of elements matching a specific key}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc erase</title>
    <ns>10</ns>
    <id>1952</id>
    <revision>
      <id>55206</id>
      <parentid>52381</parentid>
      <timestamp>2013-06-01T05:21:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list erase]] to [[Template:cpp/container/dsc erase]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">{{dsc mem fun | cpp/container/{{{1|}}}/erase | erases elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc erase after</title>
    <ns>10</ns>
    <id>1953</id>
    <revision>
      <id>55208</id>
      <parentid>52382</parentid>
      <timestamp>2013-06-01T05:21:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list erase after]] to [[Template:cpp/container/dsc erase after]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/container/{{{1|}}}/erase_after | erases an element after an element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc extract</title>
    <ns>10</ns>
    <id>15647</id>
    <revision>
      <id>86979</id>
      <parentid>86978</parentid>
      <timestamp>2016-07-19T21:18:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/container/{{{1|}}}/extract | extracts nodes from the container |notes={{mark c++17}}}}</text>
      <sha1>er3bugyfm78jqlh0bwwh1ywuy1f5k8w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc fill</title>
    <ns>10</ns>
    <id>1954</id>
    <revision>
      <id>55210</id>
      <parentid>52383</parentid>
      <timestamp>2013-06-01T05:21:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list fill]] to [[Template:cpp/container/dsc fill]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/container/{{{1|}}}/fill | fill the container with specified value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc find</title>
    <ns>10</ns>
    <id>1955</id>
    <revision>
      <id>55213</id>
      <parentid>52384</parentid>
      <timestamp>2013-06-01T05:21:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list find]] to [[Template:cpp/container/dsc find]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/container/{{{1|}}}/find | finds element with specific key}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc forward list</title>
    <ns>10</ns>
    <id>5091</id>
    <revision>
      <id>55215</id>
      <parentid>52385</parentid>
      <timestamp>2013-06-01T05:21:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list forward list]] to [[Template:cpp/container/dsc forward list]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc tclass | cpp/container/forward_list | singly-linked list | notes={{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc front</title>
    <ns>10</ns>
    <id>1956</id>
    <revision>
      <id>55218</id>
      <parentid>52386</parentid>
      <timestamp>2013-06-01T05:21:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list front]] to [[Template:cpp/container/dsc front]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/container/{{{1|}}}/front | access the first element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc get allocator</title>
    <ns>10</ns>
    <id>1957</id>
    <revision>
      <id>55220</id>
      <parentid>52387</parentid>
      <timestamp>2013-06-01T05:21:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list get allocator]] to [[Template:cpp/container/dsc get allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/container/{{{1|}}}/get_allocator | returns the associated allocator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc hash function</title>
    <ns>10</ns>
    <id>1958</id>
    <revision>
      <id>55224</id>
      <parentid>52388</parentid>
      <timestamp>2013-06-01T05:21:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list hash function]] to [[Template:cpp/container/dsc hash function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem fun | cpp/container/{{{1|}}}/hash_function | returns function used to hash the keys }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc hasher</title>
    <ns>10</ns>
    <id>1194</id>
    <revision>
      <id>55227</id>
      <parentid>52389</parentid>
      <timestamp>2013-06-01T05:21:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list hasher]] to [[Template:cpp/container/dsc hasher]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="38">{{dsc | {{tt|hasher}} | {{tt|Hash}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc insert</title>
    <ns>10</ns>
    <id>1959</id>
    <revision>
      <id>86991</id>
      <parentid>86990</parentid>
      <timestamp>2016-07-19T21:26:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun | cpp/container/{{{1|}}}/insert | inserts elements {{cpp/container/if assoc|{{{1}}}|{{rev inl|since=c++17|or nodes}}}}}}</text>
      <sha1>snl1dscc0z0yg4x1o79aelcge7656ra</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc insert after</title>
    <ns>10</ns>
    <id>1960</id>
    <revision>
      <id>55232</id>
      <parentid>52391</parentid>
      <timestamp>2013-06-01T05:21:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list insert after]] to [[Template:cpp/container/dsc insert after]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/container/{{{1|}}}/insert_after | inserts elements after an element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc insert or assign</title>
    <ns>10</ns>
    <id>13809</id>
    <revision>
      <id>73711</id>
      <timestamp>2014-11-13T14:29:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem fun | cpp/container/{{{1|}}}/insert_or_assign | inserts an element or assigns to the current element if the key already exists | notes={{mark c++17}}}}</text>
      <sha1>lw3xvs9uutvuio70ykwq16juiwdl6eb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc insert return type</title>
    <ns>10</ns>
    <id>15646</id>
    <revision>
      <id>88929</id>
      <parentid>88928</parentid>
      <timestamp>2016-12-20T15:24:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>back to {{source}}</comment>
      <text xml:space="preserve" bytes="361">{{dsc | {{tt|insert_return_type}} | type describing the result of inserting a {{tt|node_type}}, a specialization of {{source|
template &lt;class Iterator, class NodeType&gt; struct /*unspecified*/ {
    Iterator position;
    bool     inserted;
    NodeType node;
};}} instantiated with template arguments {{tt|iterator}} and {{tt|node_type}}. {{mark since c++17}} }}</text>
      <sha1>1pnoq2wmk0lf746wqbutpeqods5w01z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc iterator</title>
    <ns>10</ns>
    <id>1195</id>
    <revision>
      <id>92013</id>
      <parentid>91963</parentid>
      <timestamp>2017-04-01T20:42:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="873">{{#switch:{{{1|}}}
| array = {{dsc | {{tt|iterator}} | {{concept|RandomAccessIterator}} {{rev inl|since=c++17|and {{concept|LiteralType}}&lt;!--side effect of P0031--&gt;}}}}
| vector
| deque
| basic_string = {{dsc | {{tt|iterator}} | {{concept|RandomAccessIterator}} }}
| vector_bool = {{dsc | {{tt|iterator}} | implementation-defined }}
| set
| multiset = {{dsc | {{tt|iterator}} | {{rev begin|noborder=true}}{{rev|until=c++11|{{concept|BidirectionalIterator}}}}{{rev|since=c++11|Constant {{concept|BidirectionalIterator}}}}{{rev end}} }}{{mark unreviewed dr|LWG|103}}
| list 
| map
| multimap = {{dsc | {{tt|iterator}} | {{concept|BidirectionalIterator}} }}
| unordered_set
| unordered_multiset = {{dsc | {{tt|iterator}} | Constant {{concept|ForwardIterator}} }}
| forward_list
| unordered_map
| unordered_multimap = {{dsc | {{tt|iterator}} | {{concept|ForwardIterator}} }}
}}</text>
      <sha1>a0tuv9nt2rfn4h38wlpcfetfthmin6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc iterator semantics</title>
    <ns>10</ns>
    <id>13501</id>
    <revision>
      <id>69299</id>
      <parentid>69298</parentid>
      <timestamp>2014-04-02T16:19:51Z</timestamp>
      <contributor>
        <username>Shachar</username>
        <id>2974</id>
      </contributor>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/container/{{{1|}}}/iterator semantics | Invalidation rules for the iterators. }}</text>
      <sha1>alk1hysd8n4bt5y16rtsq6s5h6sn8uf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc key comp</title>
    <ns>10</ns>
    <id>1961</id>
    <revision>
      <id>55239</id>
      <parentid>52393</parentid>
      <timestamp>2013-06-01T05:21:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list key comp]] to [[Template:cpp/container/dsc key comp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/container/{{{1|}}}/key_comp | returns the function that compares keys}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc key compare</title>
    <ns>10</ns>
    <id>1196</id>
    <revision>
      <id>55243</id>
      <parentid>52394</parentid>
      <timestamp>2013-06-01T05:21:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list key compare]] to [[Template:cpp/container/dsc key compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">{{dsc | {{tt|key_compare}} | {{tt|Compare}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc key eq</title>
    <ns>10</ns>
    <id>1962</id>
    <revision>
      <id>55249</id>
      <parentid>52395</parentid>
      <timestamp>2013-06-01T05:21:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list key eq]] to [[Template:cpp/container/dsc key eq]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/container/{{{1|}}}/key_eq | returns the function used to compare keys for equality }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc key equal</title>
    <ns>10</ns>
    <id>1197</id>
    <revision>
      <id>55253</id>
      <parentid>52396</parentid>
      <timestamp>2013-06-01T05:21:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list key equal]] to [[Template:cpp/container/dsc key equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">{{dsc | {{tt|key_equal}} | {{tt|KeyEqual}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc key type</title>
    <ns>10</ns>
    <id>1198</id>
    <revision>
      <id>87081</id>
      <parentid>55255</parentid>
      <timestamp>2016-07-25T17:20:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+node handle</comment>
      <text xml:space="preserve" bytes="157">{{#ifeq:{{{1|}}}|node_handle
|{{dsc | {{tt|key_type}}{{mark|map containers only}} | the key stored in the node }}
|{{dsc | {{tt|key_type}} | {{tt|Key}} }}
}}</text>
      <sha1>q4x6h9t0d4kxv5xinl2w7fw1qhogx7n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc list</title>
    <ns>10</ns>
    <id>5092</id>
    <revision>
      <id>55258</id>
      <parentid>52398</parentid>
      <timestamp>2013-06-01T05:21:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list list]] to [[Template:cpp/container/dsc list]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">{{dsc tclass | cpp/container/list | doubly-linked list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc load factor</title>
    <ns>10</ns>
    <id>1963</id>
    <revision>
      <id>55260</id>
      <parentid>52399</parentid>
      <timestamp>2013-06-01T05:21:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list load factor]] to [[Template:cpp/container/dsc load factor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/container/{{{1|}}}/load_factor | returns average number of elements per bucket}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc local iterator</title>
    <ns>10</ns>
    <id>1199</id>
    <revision>
      <id>55263</id>
      <parentid>52400</parentid>
      <timestamp>2013-06-01T05:21:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list local iterator]] to [[Template:cpp/container/dsc local iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="238">{{dsc | {{tt|local_iterator}} | An iterator type whose category, value, difference, pointer and&lt;br&gt; reference types are the same as {{tt|iterator}}. This iterator&lt;br&gt; can be used to iterate through a single bucket but not across buckets}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc lower bound</title>
    <ns>10</ns>
    <id>1034</id>
    <revision>
      <id>73046</id>
      <parentid>73045</parentid>
      <timestamp>2014-10-09T22:23:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>that still doesn't work: std::set::iterator has no i-&gt;first, and equality is not involved at all.. however, good point that 'value' doesn't match the actual desc, so switching to 'key'</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/container/{{{1|}}}/lower_bound | returns an iterator to the first element ''not less'' than the given key}}</text>
      <sha1>r2aa6fo3rta3geny77xrdif2ldoisw6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc map</title>
    <ns>10</ns>
    <id>5095</id>
    <revision>
      <id>55273</id>
      <parentid>52402</parentid>
      <timestamp>2013-06-01T05:21:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list map]] to [[Template:cpp/container/dsc map]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc tclass | cpp/container/map | collection of key-value pairs, sorted by keys, keys are unique}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc mapped type</title>
    <ns>10</ns>
    <id>1200</id>
    <revision>
      <id>87082</id>
      <parentid>55277</parentid>
      <timestamp>2016-07-25T17:21:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+node handle</comment>
      <text xml:space="preserve" bytes="184">{{#ifeq:{{{1|}}}|node_handle
|{{dsc | {{tt|mapped_type}}{{mark|map containers only}} | the mapped part of the element stored in the node }}
|{{dsc | {{tt|mapped_type}} | {{tt|T}} }}
}}</text>
      <sha1>g5smix5n0kp8kh3quthwwsmystjwolc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc max bucket count</title>
    <ns>10</ns>
    <id>1035</id>
    <revision>
      <id>55281</id>
      <parentid>52404</parentid>
      <timestamp>2013-06-01T05:21:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list max bucket count]] to [[Template:cpp/container/dsc max bucket count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/container/{{{1|}}}/max_bucket_count | returns the maximum number of buckets}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc max load factor</title>
    <ns>10</ns>
    <id>1036</id>
    <revision>
      <id>55287</id>
      <parentid>52405</parentid>
      <timestamp>2013-06-01T05:22:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list max load factor]] to [[Template:cpp/container/dsc max load factor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/container/{{{1|}}}/max_load_factor | manages maximum average number of elements per bucket}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc max size</title>
    <ns>10</ns>
    <id>1037</id>
    <revision>
      <id>55291</id>
      <parentid>52406</parentid>
      <timestamp>2013-06-01T05:22:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list max size]] to [[Template:cpp/container/dsc max size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/container/{{{1|}}}/max_size | returns the maximum possible number of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc merge</title>
    <ns>10</ns>
    <id>1038</id>
    <revision>
      <id>86980</id>
      <parentid>86977</parentid>
      <timestamp>2016-07-19T21:18:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17 for assoc</comment>
      <text xml:space="preserve" bytes="200">{{dsc mem fun | cpp/container/{{{1|}}}/merge | {{cpp/container/if assoc|{{{1}}}|splices nodes from another container|merges two sorted lists}}|notes={{cpp/container/if assoc|{{{1}}}|{{mark c++17}}}}}}</text>
      <sha1>ti2qei5ka2bb6i0lxfv8bol3htfh4e3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc multimap</title>
    <ns>10</ns>
    <id>5097</id>
    <revision>
      <id>55297</id>
      <parentid>52408</parentid>
      <timestamp>2013-06-01T05:22:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list multimap]] to [[Template:cpp/container/dsc multimap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc tclass | cpp/container/multimap | collection of key-value pairs, sorted by keys}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc multiset</title>
    <ns>10</ns>
    <id>5096</id>
    <revision>
      <id>55301</id>
      <parentid>52409</parentid>
      <timestamp>2013-06-01T05:22:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list multiset]] to [[Template:cpp/container/dsc multiset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc tclass | cpp/container/multiset | collection of keys, sorted by keys}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc node type</title>
    <ns>10</ns>
    <id>15645</id>
    <revision>
      <id>86967</id>
      <parentid>86964</parentid>
      <timestamp>2016-07-19T21:05:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="142">{{dsc | {{tt|node_type}} | a specialization of [[cpp/container/node handle|node handle]] representing a container node {{mark since c++17}} }}</text>
      <sha1>jrry3ehzc2mmmn0qgfew4gidvae060z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc operator at</title>
    <ns>10</ns>
    <id>1040</id>
    <revision>
      <id>55310</id>
      <parentid>52411</parentid>
      <timestamp>2013-06-01T05:22:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list operator at]] to [[Template:cpp/container/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/container/{{{1|}}}/operator_at | title=operator[] | access specified element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc operator cmp</title>
    <ns>10</ns>
    <id>1986</id>
    <revision>
      <id>55315</id>
      <parentid>52412</parentid>
      <timestamp>2013-06-01T05:22:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list operator cmp]] to [[Template:cpp/container/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="194">{{dsc tfun | cpp/container/{{{1|}}}/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | lexicographically compares the values in the {{{1|}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc operator cmp unord</title>
    <ns>10</ns>
    <id>2007</id>
    <revision>
      <id>55319</id>
      <parentid>52413</parentid>
      <timestamp>2013-06-01T05:22:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list operator cmp unord]] to [[Template:cpp/container/dsc operator cmp unord]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc tfun | cpp/container/{{{1|}}}/operator_cmp | title=operator==&lt;br&gt;operator!= | compares the values in the {{{1|}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc operator=</title>
    <ns>10</ns>
    <id>1039</id>
    <revision>
      <id>92014</id>
      <parentid>55304</parentid>
      <timestamp>2017-04-01T20:43:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="243">{{#switch:{{{1|}}}
| stack | queue | priority_queue
={{dsc mem fun | cpp/container/{{{1|}}}/operator{{=}} | assigns values to the container adaptor}}
|{{dsc mem fun | cpp/container/{{{1|}}}/operator{{=}} | assigns values to the container }}
}}</text>
      <sha1>tg3wzrwdnefhy3d3xxyz5e5lspie5j0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc pointer</title>
    <ns>10</ns>
    <id>1201</id>
    <revision>
      <id>92015</id>
      <parentid>71980</parentid>
      <timestamp>2017-04-01T20:43:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="565">{{#switch:{{{1|}}}
| vector
| deque 
| list
| set
| multiset
| map
| multimap
| basic_string = {{dsc | {{tt|pointer}} | {{rev begin|noborder=true}}{{rev|until=c++11|{{tt|Allocator::pointer}}}}{{rev|since=c++11|{{c|std::allocator_traits&lt;Allocator&gt;::pointer}}}}{{rev end}} }}
| array = {{dsc | {{tt|pointer}} | {{tt|value_type*}}}}
| vector_bool = {{dsc | {{tt|pointer}} | implementation-defined}}
| forward_list
| unordered_set
| unordered_multiset
| unordered_map
| unordered_multimap = {{dsc | {{tt|pointer}} | {{c|std::allocator_traits&lt;Allocator&gt;::pointer}} }}
}}</text>
      <sha1>s44ipi27p6d6z0nbptdg8wqwhejya4h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc pop</title>
    <ns>10</ns>
    <id>1041</id>
    <revision>
      <id>67278</id>
      <parentid>55327</parentid>
      <timestamp>2014-02-02T21:02:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix the description of priority_queue::pop</comment>
      <text xml:space="preserve" bytes="193">{{#switch:{{{1|}}}
|stack|priority_queue
= {{dsc mem fun | cpp/container/{{{1|}}}/pop | removes the top element }}
| {{dsc mem fun | cpp/container/{{{1|}}}/pop | removes the first element }}
}}</text>
      <sha1>ngzm5akgi8lufrkynsu8ftminvsfpf1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc pop back</title>
    <ns>10</ns>
    <id>1042</id>
    <revision>
      <id>55329</id>
      <parentid>52416</parentid>
      <timestamp>2013-06-01T05:22:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list pop back]] to [[Template:cpp/container/dsc pop back]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/container/{{{1|}}}/pop_back | removes the last element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc pop front</title>
    <ns>10</ns>
    <id>1043</id>
    <revision>
      <id>55332</id>
      <parentid>52417</parentid>
      <timestamp>2013-06-01T05:22:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list pop front]] to [[Template:cpp/container/dsc pop front]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/container/{{{1|}}}/pop_front | removes the first element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc priority queue</title>
    <ns>10</ns>
    <id>5102</id>
    <revision>
      <id>55334</id>
      <parentid>52418</parentid>
      <timestamp>2013-06-01T05:22:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list priority queue]] to [[Template:cpp/container/dsc priority queue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc tclass | cpp/container/priority_queue | adapts a container to provide priority queue}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc push</title>
    <ns>10</ns>
    <id>1044</id>
    <revision>
      <id>55337</id>
      <parentid>52419</parentid>
      <timestamp>2013-06-01T05:22:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list push]] to [[Template:cpp/container/dsc push]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="308">{{#switch:{{{1|}}}
|stack
= {{dsc mem fun | cpp/container/{{{1|}}}/push | inserts element at the top }}
|queue
= {{dsc mem fun | cpp/container/{{{1|}}}/push | inserts element at the end}}
|priority_queue|
= {{dsc mem fun | cpp/container/{{{1|}}}/push | inserts element and sorts the underlying container}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc push back</title>
    <ns>10</ns>
    <id>1045</id>
    <revision>
      <id>80861</id>
      <parentid>55339</parentid>
      <timestamp>2015-09-11T03:16:02Z</timestamp>
      <contributor>
        <username>Squelart</username>
        <id>4321</id>
      </contributor>
      <comment>push_back only adds one element at a time</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/container/{{{1|}}}/push_back | adds an element to the end}}</text>
      <sha1>i5xfkaq8o1je67nr0uomfoqnyw6h6m0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc push front</title>
    <ns>10</ns>
    <id>1046</id>
    <revision>
      <id>80860</id>
      <parentid>55343</parentid>
      <timestamp>2015-09-11T03:14:18Z</timestamp>
      <contributor>
        <username>Squelart</username>
        <id>4321</id>
      </contributor>
      <comment>push_front only inserts one element at a time</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/container/{{{1|}}}/push_front | inserts an element to the beginning}}</text>
      <sha1>owvpfw4vv50dib09swd6ruzh527tlgp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc queue</title>
    <ns>10</ns>
    <id>5103</id>
    <revision>
      <id>55346</id>
      <parentid>52422</parentid>
      <timestamp>2013-06-01T05:22:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list queue]] to [[Template:cpp/container/dsc queue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc tclass | cpp/container/queue | adapts a container to provide queue (FIFO data structure) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc rbegin</title>
    <ns>10</ns>
    <id>1047</id>
    <revision>
      <id>55349</id>
      <parentid>52423</parentid>
      <timestamp>2013-06-01T05:22:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list rbegin]] to [[Template:cpp/container/dsc rbegin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem fun | cpp/container/{{{1|}}}/rbegin | title=rbegin&lt;br&gt; crbegin | returns a reverse iterator to the beginning | notes=&lt;br&gt;{{cpp/container/mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc reference</title>
    <ns>10</ns>
    <id>1202</id>
    <revision>
      <id>92016</id>
      <parentid>71978</parentid>
      <timestamp>2017-04-01T20:43:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="492">{{#switch:{{{1|}}}
| vector
| deque 
| list
| set
| multiset
| map
| multimap
| basic_string = {{dsc | {{tt|reference}} | {{rev begin|noborder=true}}{{rev|until=c++11|{{tt|Allocator::reference}}}}{{rev|since=c++11|{{tt|value_type&amp;}}}}{{rev end}} }}
| array
| forward_list
| unordered_set
| unordered_multiset
| unordered_map
| unordered_multimap = {{dsc | {{tt|reference}} | {{tt|value_type&amp;}} }}
| stack
| queue
| priority_queue = {{dsc | {{tt|reference}} | {{tt|Container::reference}} }}
}}</text>
      <sha1>bvmuofv268514wh7ycvk1h5qoogr69z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc rehash</title>
    <ns>10</ns>
    <id>1048</id>
    <revision>
      <id>55358</id>
      <parentid>52425</parentid>
      <timestamp>2013-06-01T05:22:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list rehash]] to [[Template:cpp/container/dsc rehash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem fun | cpp/container/{{{1|}}}/rehash | reserves at least the specified number of buckets.&lt;br&gt;This regenerates the hash table.}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc remove</title>
    <ns>10</ns>
    <id>1049</id>
    <revision>
      <id>55360</id>
      <parentid>52426</parentid>
      <timestamp>2013-06-01T05:22:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list remove]] to [[Template:cpp/container/dsc remove]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/container/{{{1|}}}/remove | title=remove&lt;br&gt;remove_if | removes elements satisfying specific criteria}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc rend</title>
    <ns>10</ns>
    <id>1051</id>
    <revision>
      <id>55363</id>
      <parentid>52427</parentid>
      <timestamp>2013-06-01T05:22:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list rend]] to [[Template:cpp/container/dsc rend]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc mem fun | cpp/container/{{{1|}}}/rend | title=rend&lt;br&gt; crend | returns a reverse iterator to the end | notes=&lt;br&gt;{{cpp/container/mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc reserve</title>
    <ns>10</ns>
    <id>1052</id>
    <revision>
      <id>55365</id>
      <parentid>52428</parentid>
      <timestamp>2013-06-01T05:22:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list reserve]] to [[Template:cpp/container/dsc reserve]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="254">{{cpp/container/if unord|{{{1}}}
|{{dsc mem fun | cpp/container/{{{1|}}}/reserve | reserves space for at least the specified number of elements.&lt;br&gt;This regenerates the hash table.}}
|{{dsc mem fun | cpp/container/{{{1|}}}/reserve | reserves storage}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc resize</title>
    <ns>10</ns>
    <id>1053</id>
    <revision>
      <id>55367</id>
      <parentid>52429</parentid>
      <timestamp>2013-06-01T05:22:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list resize]] to [[Template:cpp/container/dsc resize]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/container/{{{1|}}}/resize | changes the number of elements stored }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc reverse</title>
    <ns>10</ns>
    <id>1054</id>
    <revision>
      <id>55369</id>
      <parentid>52430</parentid>
      <timestamp>2013-06-01T05:22:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list reverse]] to [[Template:cpp/container/dsc reverse]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/container/{{{1|}}}/reverse | reverses the order of the elements}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc reverse iterator</title>
    <ns>10</ns>
    <id>1203</id>
    <revision>
      <id>55371</id>
      <parentid>52431</parentid>
      <timestamp>2013-06-01T05:22:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list reverse iterator]] to [[Template:cpp/container/dsc reverse iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc | &lt;code&gt;reverse_iterator&lt;/code&gt; | {{c|std::reverse_iterator&lt;iterator&gt;}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc set</title>
    <ns>10</ns>
    <id>5094</id>
    <revision>
      <id>55375</id>
      <parentid>52432</parentid>
      <timestamp>2013-06-01T05:23:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list set]] to [[Template:cpp/container/dsc set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc tclass | cpp/container/set | collection of unique keys, sorted by keys}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc shrink to fit</title>
    <ns>10</ns>
    <id>1055</id>
    <revision>
      <id>55381</id>
      <parentid>52433</parentid>
      <timestamp>2013-06-01T05:23:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list shrink to fit]] to [[Template:cpp/container/dsc shrink to fit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/container/{{{1|}}}/shrink_to_fit | reduces memory usage by freeing unused memory | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc size</title>
    <ns>10</ns>
    <id>1056</id>
    <revision>
      <id>55385</id>
      <parentid>52434</parentid>
      <timestamp>2013-06-01T05:23:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list size]] to [[Template:cpp/container/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/container/{{{1|}}}/size | returns the number of elements }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc size type</title>
    <ns>10</ns>
    <id>1204</id>
    <revision>
      <id>92017</id>
      <parentid>88048</parentid>
      <timestamp>2017-04-01T20:43:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="675">{{#switch:{{{1|}}}
| array = {{dsc | {{tt|size_type}} | {{lc|std::size_t}} }}
| vector
| deque 
| forward_list
| list
| set
| multiset
| unordered_set
| unordered_multiset
| map
| multimap
| unordered_map
| unordered_multimap = {{dsc | {{tt|size_type}} | Unsigned integer type (usually {{lc|std::size_t}}) }}
| basic_string = {{dsc | {{tt|size_type}} | {{rev begin|noborder=true}}{{rev|until=c++11|{{tt|Allocator::size_type}}}}{{rev|since=c++11|{{c|std::allocator_traits&lt;Allocator&gt;::size_type}}}}{{rev end}} }}
| vector_bool = {{dsc | {{tt|size_type}} | implementation-defined }}
| stack
| queue
| priority_queue = {{dsc | {{tt|size_type}} | {{tt|Container::size_type}} }}
}}</text>
      <sha1>0g7309mktsfnihldnwym9mt1zu80i61</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc sort</title>
    <ns>10</ns>
    <id>1057</id>
    <revision>
      <id>55395</id>
      <parentid>52436</parentid>
      <timestamp>2013-06-01T05:23:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list sort]] to [[Template:cpp/container/dsc sort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/container/{{{1|}}}/sort | sorts the elements}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc splice</title>
    <ns>10</ns>
    <id>1058</id>
    <revision>
      <id>55399</id>
      <parentid>52437</parentid>
      <timestamp>2013-06-01T05:23:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list splice]] to [[Template:cpp/container/dsc splice]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/container/{{{1|}}}/splice | moves elements from another {{tt|{{{1}}}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc splice after</title>
    <ns>10</ns>
    <id>2447</id>
    <revision>
      <id>55402</id>
      <parentid>52438</parentid>
      <timestamp>2013-06-01T05:23:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list splice after]] to [[Template:cpp/container/dsc splice after]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/container/{{{1|}}}/splice_after | moves elements from another {{tt|{{{1}}}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc stack</title>
    <ns>10</ns>
    <id>5104</id>
    <revision>
      <id>55407</id>
      <parentid>52439</parentid>
      <timestamp>2013-06-01T05:23:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list stack]] to [[Template:cpp/container/dsc stack]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc tclass | cpp/container/stack | adapts a container to provide stack (LIFO data structure) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc swap</title>
    <ns>10</ns>
    <id>1059</id>
    <revision>
      <id>55411</id>
      <parentid>52440</parentid>
      <timestamp>2013-06-01T05:23:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list swap]] to [[Template:cpp/container/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc mem fun | cpp/container/{{{1|}}}/swap | swaps the contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc swap2</title>
    <ns>10</ns>
    <id>1987</id>
    <revision>
      <id>72238</id>
      <parentid>72237</parentid>
      <timestamp>2014-07-26T07:16:45Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="224">{{dsc tfun | cpp/container/{{{1|}}}/swap2 | title=std::swap{{dsc small|(std::{{{1|}}})}} | specializes the {{lc|std::swap}} algorithm | notes={{#ifeq:{{cpp/std|{{{1}}}}}|c++98|&lt;!--empty--&gt;|{{mark {{cpp/std|{{{1}}} }} }}}} }}</text>
      <sha1>mvmg2p73vcv4irta6rdbip9rrkd7fid</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc top</title>
    <ns>10</ns>
    <id>1060</id>
    <revision>
      <id>67279</id>
      <parentid>55416</parentid>
      <timestamp>2014-02-02T21:03:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>consistency</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/container/{{{1|}}}/top | accesses the top element }}</text>
      <sha1>evmpmi59z7htoipsmo4l5eex4se07gr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc try emplace</title>
    <ns>10</ns>
    <id>13808</id>
    <revision>
      <id>73710</id>
      <timestamp>2014-11-13T14:29:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="152">{{dsc mem fun | cpp/container/{{{1|}}}/try_emplace | inserts in-place if the key does not exist, does nothing if the key exists| notes={{mark c++17}} }}</text>
      <sha1>5umelj8vj9w4qgy6i16motc7ntzp8ll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc unique</title>
    <ns>10</ns>
    <id>1061</id>
    <revision>
      <id>55418</id>
      <parentid>52443</parentid>
      <timestamp>2013-06-01T05:23:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list unique]] to [[Template:cpp/container/dsc unique]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/container/{{{1|}}}/unique | removes consecutive duplicate elements}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc unordered map</title>
    <ns>10</ns>
    <id>5098</id>
    <revision>
      <id>55421</id>
      <parentid>52444</parentid>
      <timestamp>2013-06-01T05:23:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list unordered map]] to [[Template:cpp/container/dsc unordered map]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc tclass | cpp/container/unordered_map | collection of key-value pairs, hashed by keys, keys are unique | notes={{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc unordered multimap</title>
    <ns>10</ns>
    <id>5101</id>
    <revision>
      <id>55423</id>
      <parentid>52445</parentid>
      <timestamp>2013-06-01T05:23:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list unordered multimap]] to [[Template:cpp/container/dsc unordered multimap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc tclass | cpp/container/unordered_multimap | collection of key-value pairs, hashed by keys | notes={{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc unordered multiset</title>
    <ns>10</ns>
    <id>5100</id>
    <revision>
      <id>55425</id>
      <parentid>52446</parentid>
      <timestamp>2013-06-01T05:23:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list unordered multiset]] to [[Template:cpp/container/dsc unordered multiset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc tclass | cpp/container/unordered_multiset | collection of keys, hashed by keys | notes={{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc unordered set</title>
    <ns>10</ns>
    <id>5099</id>
    <revision>
      <id>55430</id>
      <parentid>52447</parentid>
      <timestamp>2013-06-01T05:23:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list unordered set]] to [[Template:cpp/container/dsc unordered set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc tclass | cpp/container/unordered_set | collection of unique keys, hashed by keys | notes={{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc upper bound</title>
    <ns>10</ns>
    <id>1062</id>
    <revision>
      <id>73047</id>
      <parentid>73018</parentid>
      <timestamp>2014-10-09T22:24:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/certain value/given key</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/container/{{{1|}}}/upper_bound | returns an iterator to the first element ''greater'' than the given key}}</text>
      <sha1>3yx8v7kq363xizckwwmvm0s3c2dic22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc uses allocator</title>
    <ns>10</ns>
    <id>3386</id>
    <revision>
      <id>55439</id>
      <parentid>52449</parentid>
      <timestamp>2013-06-01T05:23:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list uses allocator]] to [[Template:cpp/container/dsc uses allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="189">{{dsc tfun | cpp/container/{{{1|}}}/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::{{{1|}}}&gt;}} | specializes the {{lc|std::uses_allocator}} type trait | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc value comp</title>
    <ns>10</ns>
    <id>1063</id>
    <revision>
      <id>55445</id>
      <parentid>52450</parentid>
      <timestamp>2013-06-01T05:23:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list value comp]] to [[Template:cpp/container/dsc value comp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/container/{{{1|}}}/value_comp | returns the function that compares keys in objects of type value_type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc value compare</title>
    <ns>10</ns>
    <id>3615</id>
    <revision>
      <id>55449</id>
      <parentid>52451</parentid>
      <timestamp>2013-06-01T05:23:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list value compare]] to [[Template:cpp/container/dsc value compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc class | cpp/container/{{{1|}}}/value_compare | compares objects of type {{tt|value_type}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc value compare2</title>
    <ns>10</ns>
    <id>1205</id>
    <revision>
      <id>55452</id>
      <parentid>52452</parentid>
      <timestamp>2013-06-01T05:23:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list value compare2]] to [[Template:cpp/container/dsc value compare2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">{{dsc | {{tt|value_compare}} | {{tt|Compare}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc value type</title>
    <ns>10</ns>
    <id>1206</id>
    <revision>
      <id>92018</id>
      <parentid>87080</parentid>
      <timestamp>2017-04-01T20:43:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="585">{{#switch:{{{1|}}}
| array
| vector
| deque 
| forward_list
| list = {{dsc | {{tt|value_type}} | {{tt|T}} }}
| vector_bool = {{dsc | {{tt|value_type}} | {{c|bool}} }}
| set
| multiset
| unordered_set
| unordered_multiset = {{dsc | {{tt|value_type}} | {{tt|Key}} }}
| map
| multimap
| unordered_map
| unordered_multimap = {{dsc | {{tt|value_type}} | {{c|std::pair&lt;const Key, T&gt;}} }}
| stack
| queue
| priority_queue = {{dsc | {{tt|value_type}} | {{tt|Container::value_type}} }}
| node_handle = {{dsc | {{tt|value_type}}{{mark|set containers only}} | the element stored in the node }}
}}</text>
      <sha1>05lj9yr4veck91mnnd3u7m1ptnfzw3y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc vector</title>
    <ns>10</ns>
    <id>5090</id>
    <revision>
      <id>55460</id>
      <parentid>52454</parentid>
      <timestamp>2013-06-01T05:23:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/dcl list vector]] to [[Template:cpp/container/dsc vector]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc tclass | cpp/container/vector | dynamic contiguous array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/dsc vector bool</title>
    <ns>10</ns>
    <id>8649</id>
    <revision>
      <id>64075</id>
      <parentid>64074</parentid>
      <timestamp>2013-08-08T12:44:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Undo revision 64074 by [[Special:Contributions/P12|P12]] ([[User talk:P12|talk]])</comment>
      <text xml:space="preserve" bytes="111">{{dsc ptclass | cpp/container/vector_bool | title=vector{{dsc small|&lt;bool&gt;}} | space-efficient dynamic bitset}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/emplace</title>
    <ns>10</ns>
    <id>1069</id>
    <revision>
      <id>75433</id>
      <parentid>75427</parentid>
      <timestamp>2015-01-17T14:03:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 75427 by [[Special:Contributions/D41D8CD98F|D41D8CD98F]] ([[User talk:D41D8CD98F|talk]]) no, strong exception safety is for all containers; 23.2.1[container.requirements.general]p11.1</comment>
      <text xml:space="preserve" bytes="1806">{{cpp/container/{{{1|}}}/title | emplace}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class... Args &gt; 
iterator emplace( const_iterator pos, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element into the container directly before {{tt|pos}}. The element is constructed through {{lc|std::allocator_traits::construct}}, which typically uses placement-new to construct the element in-place at a location provided by the container. The arguments {{tt|args...}} are forwarded to the constructor as {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|emplace}}

===Parameters===
{{par begin}}
{{par | pos | iterator before which the new element will be constructed}}
{{par | args | arguments to forward to the constructor of the element}}
{{par hreq}}
{{#switch:{{{1|}}}|list=
{{par req concept | T (the container's element type) | EmplaceConstructible}}
|vector|deque=
{{par req concept | T (the container's element type) | EmplaceConstructible | MoveInsertable | MoveAssignable}}
}}
{{par end}} 

===Return value===
Iterator pointing to the emplaced element. 

===Complexity===
{{#switch:{{{1|}}}
|list=
Constant.
|deque=
Linear in the lesser of the distances between {{tt|pos}} and either of the ends of the container.
|vector=
Linear in the distance between {{tt|pos}} and end of the container.
| {{included}}
}}

===Exceptions===
If an exception is thrown (e.g. by the constructor), the container is left unmodified, as if this function was never called (strong exception guarantee).
{{#ifeq:{{{1|}}}|vector|

===Notes===
The specialization [[cpp/container/vector_bool|std::vector&lt;bool&gt;]] did not have {{tt|emplace()}} member until C++14.

}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc insert |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>gjo9y9y13zjlr1brdastghtd943ey39</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/emplace ad</title>
    <ns>10</ns>
    <id>1070</id>
    <revision>
      <id>86414</id>
      <parentid>67096</parentid>
      <timestamp>2016-06-29T15:39:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0084R2</comment>
      <text xml:space="preserve" bytes="2118">{{cpp/container/{{{1|}}}/title | emplace}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{#switch:{{{1|}}}
| priority_queue=
{{dcl | since=c++11 |
template&lt; class... Args &gt;
void emplace( Args&amp;&amp;... args );
}}
| stack
| queue=
{{dcl | since=c++11 | until=c++17 |
template&lt; class... Args &gt;
void emplace( Args&amp;&amp;... args );
}}
{{dcl | since=c++17 |
template&lt; class... Args &gt;
reference emplace( Args&amp;&amp;... args );
}}
}}
{{dcl end}}

{{#switch:{{{1|}}}
| stack = Pushes new element on top of the stack. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments as supplied to the function.

Effectively calls {{c|return c.emplace_back(std::forward&lt;Args&gt;(args)...);}}

| queue = Pushes new element to the end of the queue. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments as supplied to the function.

Effectively calls {{c|return c.emplace_back(std::forward&lt;Args&gt;(args)...);}}

| priority_queue = Pushes new element to the priority queue. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments as supplied to the function.

Effectively calls {{c|c.emplace_back(std::forward&lt;Args&gt;(args)...); std::push_heap(c.begin(), c.end(), comp);}}
}}

===Parameters===
{{par begin}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
{{#switch:{{{1|}}}
| stack
| queue =
{{rev begin}}
{{rev | until=c++17 | (none) }}
{{rev | since=c++17 | A reference to the new element. }}
{{rev end}}
| priority_queue= (none)
}}

===Complexity===
{{#switch:{{{1|}}}
| priority_queue = Logarithmic number of comparisons plus the complexity of {{c|Container::emplace_back}}.
| #default = Identical to the complexity of {{c|Container::emplace_back}}.
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc push | {{{1|}}}}}
{{dsc inc | cpp/container/dsc pop | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>py5ms21cb6dk0blg898w1seyidtidnc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/emplace assoc</title>
    <ns>10</ns>
    <id>1071</id>
    <revision>
      <id>90492</id>
      <parentid>90491</parentid>
      <timestamp>2017-02-26T05:14:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Example */</comment>
      <text xml:space="preserve" bytes="5060">{{cpp/container/{{{1|}}}/title | emplace}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
{{cpp/container/if uniq | {{{1|}}}
 |template&lt; class... Args &gt;
std::pair&lt;iterator,bool&gt; emplace( Args&amp;&amp;... args );
 |template&lt; class... Args &gt;
iterator emplace( Args&amp;&amp;... args );
}}
}}
{{dcl end}}

Inserts a new element into the container constructed in-place with the given {{tt|args}}  {{cpp/container/if uniq |{{{1|}}} |  if there is no element with the key in the container | }}.

Careful use of {{tt|emplace}} allows the new element to be constructed while avoiding unnecessary copy or move operations.
{{cpp/container/if set | {{{1|}}} | The constructor of the new element is called with exactly the same arguments as supplied to {{tt|emplace}}, forwarded via {{c|std::forward&lt;Args&gt;(args)...}}. | The constructor of the new element (i.e. {{c|std::pair&lt;const Key, T&gt;}}) is called with exactly the same arguments as supplied to {{tt|emplace}}, forwarded via {{c|std::forward&lt;Args&gt;(args)...}}.}}
{{cpp/container/if uniq |{{{1|}}} | The element may be constructed even if there already is an element with the key in the container, in which case the newly constructed element will be destroyed immediately. | }}

{{cpp/container/note_iterator_invalidation|{{{1|}}}|emplace}}

===Parameters===
{{par begin}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
{{cpp/container/if uniq | {{{1|}}}
 |Returns a pair consisting of an iterator to the inserted element, or the already-existing element if no insertion happened, and a {{c|bool}} denoting whether the insertion took place. True for Insertion, False for No Insertion.
 |Returns an iterator to the inserted element.
}}

===Exceptions===
If an exception is thrown by any operation, this function has no effect.

===Complexity===
{{cpp/container/if ord | {{{1|}}}
 | Logarithmic in the size of the container.
 | Amortized constant on average, worst case linear in the size of the container.
}}

===Example===
{{#switch: {{{1|}}} | map | multimap | unordered_map | unordered_multimap =
{{example |
| code =
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;string&gt;
#include &lt;{{cpp/container/get header| {{{1|}}} }}&gt;

int main()
{
    std::{{{1|}}}&lt;std::string, std::string&gt; m;

    // uses pair's move constructor
    m.emplace(std::make_pair(std::string(&quot;a&quot;), std::string(&quot;a&quot;)));

    // uses pair's converting move constructor
    m.emplace(std::make_pair(&quot;b&quot;, &quot;abcd&quot;));

    // uses pair's template constructor
    m.emplace(&quot;d&quot;, &quot;ddd&quot;);

    // uses pair's piecewise constructor
    m.emplace(std::piecewise_construct,
              std::forward_as_tuple(&quot;c&quot;),
              std::forward_as_tuple(10, 'c'));
    {{#switch: {{{1|}}} | map | unordered_map=
    // as of C++17, m.try_emplace(&quot;c&quot;, 10, 'c'); can be used
    }}

    for (const auto &amp;p : m) {
        std::cout &lt;&lt; p.first &lt;&lt; &quot; =&gt; &quot; &lt;&lt; p.second &lt;&lt; '\n';
    }
}
| p = {{cpp/container/if unord | {{{1|}}} | true}}
| output =
a =&gt; a
b =&gt; abcd
c =&gt; cccccccccc
d =&gt; ddd
}}
|set=
{{example |
| code =
#include &lt;chrono&gt;
#include &lt;functional&gt;
#include &lt;iomanip&gt;
#include &lt;iostream&gt;
#include &lt;set&gt;
#include &lt;string&gt;

class Dew
{
  private:
    int a;
    int b;
    int c;

  public:
    Dew(int _a, int _b, int _c)
      : a(_a), b(_b), c(_c)
    {}

    bool operator&lt;(const Dew &amp;other) const
    {
      if (a &lt; other.a)
        return true;
      if (a == other.a &amp;&amp; b &lt; other.b)
        return true;
      return (a == other.a &amp;&amp; b == other.b &amp;&amp; c &lt; other.c);
    }
};

const int nof_operations = 120;

int set_emplace() {
    std::set&lt;Dew&gt; set;
    for(int i = 0; i &lt; nof_operations; ++i)
        for(int j = 0; j &lt; nof_operations; ++j)
            for(int k = 0; k &lt; nof_operations; ++k)
              set.emplace(i, j, k);

    return set.size();
}

int set_insert() {
    std::set&lt;Dew&gt; set;
    for(int i = 0; i &lt; nof_operations; ++i)
        for(int j = 0; j &lt; nof_operations; ++j)
            for(int k = 0; k &lt; nof_operations; ++k)
              set.insert(Dew(i, j, k));

    return set.size();
}

void timeit(std::function&lt;int()&gt; set_test, std::string what = &quot;&quot;) {
  auto start = std::chrono::system_clock::now();
  int setsize = set_test();
  auto stop = std::chrono::system_clock::now();
  std::chrono::duration&lt;double, std::milli&gt; time = stop - start;
  if (what.size() &gt; 0 &amp;&amp; setsize &gt; 0) {
    std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(2)
        &lt;&lt; time.count() &lt;&lt; &quot;  ms for &quot; &lt;&lt; what &lt;&lt; '\n';
  }
}

int main()
{
  set_insert();
  timeit(set_insert, &quot;insert&quot;);
  timeit(set_emplace, &quot;emplace&quot;);
  timeit(set_insert, &quot;insert&quot;);
  timeit(set_emplace, &quot;emplace&quot;);
}
|p = true
|output=
638.45  ms for insert
619.44  ms for emplace
609.43  ms for insert
652.55  ms for emplace
}}
|#default=
{{example
|code=
|output=
}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace_hint |{{{1|}}}}}
{{#switch: {{{1|}}}
|map|unordered_map = 
{{dsc inc | cpp/container/dsc try_emplace |{{{1|}}}}}
}}
{{dsc inc | cpp/container/dsc insert |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>ifrjh7lvw7tdwijo9ayjqtv892zo42j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/emplace back</title>
    <ns>10</ns>
    <id>1072</id>
    <revision>
      <id>86411</id>
      <parentid>85826</parentid>
      <timestamp>2016-06-29T15:32:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0084R2</comment>
      <text xml:space="preserve" bytes="3863">{{cpp/container/{{{1|}}}/title | emplace_back}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | until=c++17 |
template&lt; class... Args &gt;
void emplace_back( Args&amp;&amp;... args );
}}
{{dcl | since=c++17 |
template&lt; class... Args &gt;
reference emplace_back( Args&amp;&amp;... args );
}}
{{dcl end}}

Appends a new element to the end of the container. The element is constructed through {{lc|std::allocator_traits::construct}}, which typically uses placement-new to construct the element in-place at the location provided by the container. The arguments {{tt|args...}} are forwarded to the constructor as {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|emplace_back}}

===Parameters===
{{par begin}}
{{par | args | arguments to forward to the constructor of the element}}
{{par hreq}}
{{#switch:{{{1|}}}|deque|list=
{{par req concept | T (the container's element type) | EmplaceConstructible}}
|vector=
{{par req concept | T (the container's element type) | EmplaceConstructible | MoveInsertable}}
}}
{{par end}} 

===Return value===
{{rev begin}}
{{rev | until=c++17 | (none)}}
{{rev | since=c++17 | A reference to the inserted element.}}
{{rev end}}

===Complexity===
{{#ifeq:{{{1|}}}|vector|Amortized constant.|Constant.}}

===Exceptions===
If an exception is thrown, this function has no effect (strong exception guarantee).
{{#ifeq: {{{1|}}} | vector |
If {{tt|T}}'s move constructor is not {{c|noexcept}} and is not {{concept|CopyInsertable}} into {{tt|*this}}, vector will use the throwing move constructor. If it throws, the guarantee is waived and the effects are unspecified.
}}
{{#ifeq:{{{1|}}}|vector|

===Notes===
The specialization [[cpp/container/vector_bool|std::vector&lt;bool&gt;]] did not have {{tt|emplace_back()}} member until C++14.

}}
===Example===
{{example
 | The following code uses {{tt|emplace_back}} to append an object of type {{tt|President}} to a {{c|std::{{{1}}}}}. It demonstrates how {{tt|emplace_back}} forwards parameters to the {{tt|President}} constructor and shows how using {{tt|emplace_back}} avoids the extra copy or move operation required when using {{tt|push_back}}.
 | code =
#include &lt;{{{1}}}&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
 
struct President
{
    std::string name;
    std::string country;
    int year;
  
    President(std::string p_name, std::string p_country, int p_year)
        : name(std::move(p_name)), country(std::move(p_country)), year(p_year)
    {
        std::cout &lt;&lt; &quot;I am being constructed.\n&quot;;
    }
    President(President&amp;&amp; other)
        : name(std::move(other.name)), country(std::move(other.country)), year(other.year)
    {
        std::cout &lt;&lt; &quot;I am being moved.\n&quot;;
    }
    President&amp; operator=(const President&amp; other) = default;
};

int main()
{
    std::{{{1}}}&lt;President&gt; elections;
    std::cout &lt;&lt; &quot;emplace_back:\n&quot;;
    elections.emplace_back(&quot;Nelson Mandela&quot;, &quot;South Africa&quot;, 1994);

    std::{{{1}}}&lt;President&gt; reElections;
    std::cout &lt;&lt; &quot;\npush_back:\n&quot;;
    reElections.push_back(President(&quot;Franklin Delano Roosevelt&quot;, &quot;the USA&quot;, 1936));
 
    std::cout &lt;&lt; &quot;\nContents:\n&quot;;
    for (President const&amp; president: elections) {
        std::cout &lt;&lt; president.name &lt;&lt; &quot; was elected president of &quot;
                  &lt;&lt; president.country &lt;&lt; &quot; in &quot; &lt;&lt; president.year &lt;&lt; &quot;.\n&quot;;
    }
    for (President const&amp; president: reElections) {
        std::cout &lt;&lt; president.name &lt;&lt; &quot; was re-elected president of &quot;
                  &lt;&lt; president.country &lt;&lt; &quot; in &quot; &lt;&lt; president.year &lt;&lt; &quot;.\n&quot;;
    }
}
 | output=
emplace_back:
I am being constructed.

push_back:
I am being constructed.
I am being moved.

Contents:
Nelson Mandela was elected president of South Africa in 1994.
Franklin Delano Roosevelt was re-elected president of the USA in 1936.
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc push_back |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>65lqdx6bxfuy1qthlnj7f1lzc1jw9bh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/emplace front</title>
    <ns>10</ns>
    <id>1073</id>
    <revision>
      <id>86412</id>
      <parentid>73729</parentid>
      <timestamp>2016-06-29T15:34:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0084R2</comment>
      <text xml:space="preserve" bytes="1293">{{cpp/container/{{{1|}}}/title | emplace_front}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | until=c++17 |
template&lt; class... Args &gt;
void emplace_front( Args&amp;&amp;... args );
}}
{{dcl | since=c++17 |
template&lt; class... Args &gt;
reference emplace_front( Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the beginning of the container. The element is constructed through {{lc|std::allocator_traits::construct}}, which typically uses placement-new to construct the element in-place at the location provided by the container. The arguments {{tt|args...}} are forwarded to the constructor as {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|emplace_front}}

===Parameters===
{{par begin}}
{{par | args | arguments to forward to the constructor of the element}}
{{par hreq}}
{{par req concept | T (the container's element type) | EmplaceConstructible}}
{{par end}} 

===Return value===
{{rev begin}}
{{rev | until=c++17 | (none)}}
{{rev | since=c++17 | A reference to the inserted element.}}
{{rev end}}

===Complexity===
Constant.

===Exceptions===
If an exception is thrown, this function has no effect (strong exception guarantee).

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc push_front |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>f2n0kwxpr5j2npgoky8n64t1s6q888e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/emplace hint</title>
    <ns>10</ns>
    <id>1074</id>
    <revision>
      <id>62189</id>
      <parentid>55758</parentid>
      <timestamp>2013-06-25T11:59:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="1750">{{cpp/container/{{{1|}}}/title | emplace_hint}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the container, using {{tt|hint}} as a suggestion where the element should go. The element is constructed in-place, i.e. no copy or move operations are performed. {{cpp/container/if set | {{{1|}}} | The constructor of the element is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}. | The constructor of the element type ({{tt|value_type}}, that is, {{c|std::pair&lt;const Key, T&gt;}}) is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}.}}

{{cpp/container/note_iterator_invalidation|{{{1|}}}|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the new element}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.
{{cpp/container/if uniq | {{{1|}}}
 | 
If the insertion failed because the element already exists, returns an iterator to the already existing element with the equivalent key.|}}

===Complexity===
{{cpp/container/if ord | {{{1|}}}
 | Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before {{tt|hint}}.
 | Amortized constant on average, worst case linear in the size of the container.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |{{{1|}}}}}
{{dsc inc | cpp/container/dsc insert |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/empty</title>
    <ns>10</ns>
    <id>1075</id>
    <revision>
      <id>64774</id>
      <parentid>64687</parentid>
      <timestamp>2013-08-26T23:52:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix noexcept</comment>
      <text xml:space="preserve" bytes="805">{{cpp/container/{{{1|}}}/title | empty}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{#ifeq:{{{1|}}}|array
|
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
constexpr bool empty();
}}
{{dcl | since=c++14 |
constexpr bool empty() const;
}}
{{dcl rev end}}
|
{{dcl | since={{cpp/std|{{{1|}}}}} |
bool empty() const;
}}
}}
{{dcl end}}

Checks if the container has no elements, i.e. whether {{c|begin() {{==}} end()}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the container is empty, {{c|false}} otherwise

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant.

===Example===
{{include | cpp/container/{{{1|}}}/example_empty}}

{{#ifeq: {{{1|}}} | forward_list||
===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc size |{{{1|}}}}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/empty ad</title>
    <ns>10</ns>
    <id>1076</id>
    <revision>
      <id>62191</id>
      <parentid>55762</parentid>
      <timestamp>2013-06-25T12:00:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="478">{{cpp/container/{{{1|}}}/title | empty}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
bool empty() const;
}}
{{dcl end}}

Checks if the underlying container has no elements, i.e. whether {{c|c.empty()}}.

===Parameters===
(none)

===Return value===

{{c|true}} if the underlying container is empty, {{c|false}} otherwise

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc size | {{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/end</title>
    <ns>10</ns>
    <id>1077</id>
    <revision>
      <id>83776</id>
      <parentid>64868</parentid>
      <timestamp>2016-03-08T04:22:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0031r0 (constexpr for std::array members)</comment>
      <text xml:space="preserve" bytes="1256">{{cpp/container/{{{1|}}}/title | end | cend}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
iterator end();
}}
{{dcl | since=c++17|
constexpr iterator end();
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_iterator end() const;
}}
{{dcl | since=c++17|
constexpr const_iterator end() const;
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_iterator cend() const;
}}
{{dcl | since=c++17|
constexpr const_iterator cend() const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
iterator end();
}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
const_iterator end() const;
}}
{{dcl | since={{cpp/std|{{{1|}}}|c++11}} |
const_iterator cend() const;
}}
{{dcl end}}}}

Returns an iterator to the element following the last element of the container. 

This element acts as a placeholder; attempting to access it results in undefined behavior. 

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
Iterator to the element following the last element.

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc begin |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>kd1vom69jtgpq55xzuv7kg4z5tbwu1r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/end(int)</title>
    <ns>10</ns>
    <id>9091</id>
    <redirect title="Template:cpp/container/end2" />
    <revision>
      <id>38160</id>
      <timestamp>2012-07-24T13:44:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/container/end(int)]] to [[Template:cpp/container/end2]]: Text replace - &quot;/end(int)&quot; to &quot;/end2&quot;</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[Template:cpp/container/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/end2</title>
    <ns>10</ns>
    <id>1078</id>
    <revision>
      <id>63575</id>
      <parentid>55768</parentid>
      <timestamp>2013-07-10T01:44:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="820">{{cpp/container/{{{1|}}}/title | end{{small|(int)}} | cend{{small|(int)}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
local_iterator end( size_type n );
}}
{{dcl | since=c++11 |
const_local_iterator end( size_type n ) const;
}}
{{dcl | since=c++11 |
const_local_iterator cend( size_type n ) const;
}}
{{dcl end}}

Returns an iterator to the element following the last element of the bucket with index {{tt|n}}. 
. This element acts as a placeholder, attempting to access it results in undefined behavior. 

===Parameters===
{{par begin}}
{{par | n | the index of the bucket to access}}
{{par end}}

===Return value===

iterator to the element following the last element

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc begin(int) |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/equal range ord</title>
    <ns>10</ns>
    <id>1079</id>
    <revision>
      <id>87782</id>
      <parentid>87781</parentid>
      <timestamp>2016-10-02T00:30:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>er, it was a multimap example, re-ifeq</comment>
      <text xml:space="preserve" bytes="2795">{{cpp/container/{{{1|}}}/title | equal_range}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 |
std::pair&lt;iterator,iterator&gt; equal_range( const Key&amp; key );
}}
{{dcl | num=2 |
std::pair&lt;const_iterator,const_iterator&gt; equal_range( const Key&amp; key ) const;
}}
{{dcl | num=3 | since=c++14 |
template&lt; class K &gt;
std::pair&lt;iterator,iterator&gt; equal_range( const K&amp; x );
}}
{{dcl | num=4 | since=c++14 |
template&lt; class K &gt;
std::pair&lt;const_iterator,const_iterator&gt; equal_range( const K&amp; x ) const;
}}
{{dcl end}}

Returns a range containing all elements with the given key in the container. The range is defined by two iterators, one pointing to the first element that is ''not less'' than {{tt|key}} and another pointing to the first element ''greater'' than {{tt|key}}. Alternatively, the first iterator may be obtained with {{lc|lower_bound()}}, and the second with {{lc|upper_bound()}}.

@1,2@ Compares the keys to {{tt|key}}.

@3,4@ Compares the keys to the value {{tt|x}}. {{cpp/enable if |the qualified-id {{c|Compare::is_transparent}} is valid and denotes a type}}. They allow calling this function without constructing an instance of {{tt|Key}}. {{todo|explain better}}

===Parameters===
{{par begin}}
{{par | key | key value to compare the elements to}}
{{par | x | alternative value that can be compared to {{tt|Key}} }}
{{par end}} 

===Return value===
{{lc|std::pair}} containing a pair of iterators defining the wanted range: the first pointing to the first element that is not ''less'' than {{tt|key}} and the second pointing to the first element ''greater'' than {{tt|key}}. 

If there are no elements ''not less'' than {{tt|key}}, past-the-end (see {{lc|end()}}) iterator is returned as the first element. Similarly if there are no elements ''greater'' than {{tt|key}}, past-the-end iterator is returned as the second element.

{{cpp/container/if uniq|{{{1|}}}||
{{rev begin}}
{{rev|since=c++11 | Since {{rlp|insert}} always inserts at the upper bound, the order of equivalent elements in the equal range is the order of insertion.
}}
{{rev end}}
}}

===Complexity===
Logarithmic in the size of the container.

===Example===
{{#ifeq:{{{1}}}|multimap|
{{example
|code=#include &lt;iostream&gt;
#include &lt;map&gt;

int main()
{
    std::multimap&lt;int, char&gt; dict {
        {1, 'A'},
        {2, 'B'},
        {2, 'C'},
        {2, 'D'},
        {4, 'E'},
        {3, 'F'}
    };

    auto range = dict.equal_range(2);

    for (auto i = range.first; i != range.second; ++i)
    {
        std::cout &lt;&lt; i-&gt;first &lt;&lt; &quot;: &quot; &lt;&lt; i-&gt;second &lt;&lt; '\n';
    }
}
|output=2: B
2: C
2: D}}
|{{example}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc find |{{{1|}}}}}
{{dsc inc | cpp/container/dsc upper_bound |{{{1|}}}}}
{{dsc inc | cpp/container/dsc lower_bound |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>lwk879gpu8ohawolnidob6dprp07koo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/equal range unord</title>
    <ns>10</ns>
    <id>12946</id>
    <revision>
      <id>82071</id>
      <parentid>70011</parentid>
      <timestamp>2015-12-01T02:59:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>This is O(count(key)) average case</comment>
      <text xml:space="preserve" bytes="1525">{{cpp/container/{{{1|}}}/title | equal_range}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
std::pair&lt;iterator,iterator&gt; equal_range( const Key&amp; key );
}}
{{dcl | since=c++11 |
std::pair&lt;const_iterator,const_iterator&gt; equal_range( const Key&amp; key ) const;
}}
{{dcl end}}

Returns a range containing all elements with key {{tt|key}} in the container. The range is defined by two iterators, the first pointing to the first element of the wanted range and the second pointing past the last element of the range.

===Parameters===
{{par begin}}
{{par | key | key value to compare the elements to}}
{{par end}} 

===Return value===
{{lc|std::pair}} containing a pair of iterators defining the wanted range. If there are no such elements, past-the-end (see {{lc|end()}}) iterators are returned as both elements of the pair.

===Complexity===
Average case linear in the number of elements with the key {{tt|key}}, worst case linear in the size of the container.

===Example===
{{cpp/container/if map| {{{1|}}} |
{{example|code=
#include &lt;iostream&gt;
#include &lt;unordered_map&gt;
 
int main()
{  
    std::{{{1}}}&lt;int,char&gt; map = {{1,'a'},{1,'b'},{1,'d'},{2,'b'}};
    auto range = map.equal_range(1);
    for (auto it = range.first; it != range.second; ++it) {
        std::cout &lt;&lt; it-&gt;first &lt;&lt; ' ' &lt;&lt; it-&gt;second &lt;&lt; '\n';
    }
}
|output=
1 a
{{cpp/container/if uniq|{{{1}}}||
1 b
1 d
}}
}}
| 
{{example
|code=
|output=
}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc find |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>c0vwokz0wsu6sola4a628vrks1xgifb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/erase</title>
    <ns>10</ns>
    <id>1080</id>
    <revision>
      <id>91285</id>
      <parentid>88170</parentid>
      <timestamp>2017-03-30T21:39:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Exceptions */ LWG 2853. &quot;move assignment operator&quot; is just a kind of &quot;assignment operator&quot;. Also, same rule should apply to deque</comment>
      <text xml:space="preserve" bytes="3170">{{cpp/container/{{{1|}}}/title | erase}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
iterator erase( iterator pos );
}}
{{dcl | since=c++11 |
iterator erase( const_iterator pos );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c++11 |
iterator erase( iterator first, iterator last );
}}
{{dcl | since=c++11 |
iterator erase( const_iterator first, const_iterator last );
}}
{{dcl rev end}}
{{dcl end}}

Removes specified elements from the container. 

@1@ Removes the element at {{tt|pos}}.

@2@ Removes the elements in the range {{tt|[first; last)}}.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|erase}}

The iterator {{tt|pos}} must be valid and dereferenceable. Thus the {{lc|end()}} iterator (which is valid, but is not dereferencable) cannot be used as a value for {{tt|pos}}.

The iterator {{tt|first}} does not need to be dereferenceable if {{tt|first{{==}}last}}: erasing an empty range is a no-op.

===Parameters===
{{par begin}}
{{par | pos | iterator to the element to remove}}
{{par | first, last | range of elements to remove}}&lt;!--
--&gt;{{#switch:{{{1}}}
|vector|deque=
{{par hreq}}
{{par req concept | T | MoveAssignable}}
}}
{{par end}} 

===Return value===
Iterator following the last removed element. If the iterator {{tt|pos}} refers to the last element, the {{lc|end()}} iterator is returned.

===Exceptions===
{{#switch:{{{1|}}}
|list=(none)
|vector|deque=
Does not throw unless an exception is thrown by the assignment operator of {{tt|T}}.
|{{templated}}
}}

===Complexity===
{{#switch:{{{1|}}} 
| list=
@1@ Constant.
@2@ Linear in the distance between {{tt|first}} and {{tt|last}}.
| vector=
Linear: the number of calls to the destructor of T is the same as the number of elements erased, the assignment operator of T is called the number of times equal to the number of elements in the vector after the erased elements
| deque=
Linear: the number of calls to the destructor of T is the same as the number of elements erased, the number of calls to the assignment operator of T is no more than the lesser of the number of elements before the erased elements and the number of elements after the erased elements
| {{templated}}
}}

===Example===
{{example
 |code=
#include &lt;{{{1}}}&gt;
#include &lt;iostream&gt;
{{#switch:{{{1}}}
| vector
| deque = 
|
#include &lt;iterator&gt;
}}

int main( )
{
    std::{{{1}}}&lt;int&gt; c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    for (auto &amp;i : c) {
        std::cout &lt;&lt; i &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';

    c.erase(c.begin());

    for (auto &amp;i : c) {
        std::cout &lt;&lt; i &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';

    {{#switch:{{{1}}}
| vector
| deque = 
    c.erase(c.begin()+2, c.begin()+5);
|
    std::{{{1}}}&lt;int&gt;::iterator range_begin {{=}} c.begin();
    std::{{{1}}}&lt;int&gt;::iterator range_end {{=}} c.begin();
    std::advance(range_begin,2);
    std::advance(range_end,5);

    c.erase(range_begin, range_end);
}}

    for (auto &amp;i : c) {
        std::cout &lt;&lt; i &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';
}
| output=
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 6 7 8 9
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc clear |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>79azxlgkwggnui9egt68k92wrx3aa1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/erase assoc</title>
    <ns>10</ns>
    <id>1081</id>
    <revision>
      <id>90133</id>
      <parentid>83184</parentid>
      <timestamp>2017-02-06T20:28:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>will &quot;if unord&quot; work around p=true?</comment>
      <text xml:space="preserve" bytes="3696">{{cpp/container/{{{1|}}}/title | erase}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{cpp/container/if ord | {{{1|}}} |
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
void erase( iterator pos );
}}
{{dcl | since=c++11 |
iterator erase( const_iterator pos );
}}
{{dcl | since=c++17 |
iterator erase( iterator pos );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c++11 |
void erase( iterator first, iterator last );
}}
{{dcl | since=c++11 |
iterator erase( const_iterator first, const_iterator last );
}}
{{dcl rev end}}
{{dcl | num=3 |
size_type erase( const key_type&amp; key );
}}
|{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
iterator erase( const_iterator pos );
}}
{{dcl | num=2 | since={{cpp/std|{{{1|}}}}} |
iterator erase( const_iterator first, const_iterator last );
}}
{{dcl | num=3 | since={{cpp/std|{{{1|}}}}} |
size_type erase( const key_type&amp; key );
}}
}}
{{dcl end}}

Removes specified elements from the container. 

@1@ Removes the element at {{tt|pos}}.
@2@ Removes the elements in the range {{tt|[first; last)}}, which must be a valid range in {{c|*this}}.
@3@ Removes {{cpp/container/if uniq|{{{1|}}}|the element (if one exists)|all elements}} with the key equivalent to {{tt|key}}.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|erase}}

The iterator {{tt|pos}} must be valid and dereferenceable. Thus the {{lc|end()}} iterator (which is valid, but is not dereferencable) cannot be used as a value for {{tt|pos}}.

{{cpp/container/if unord | {{{1|}}} |
{{rev begin}}
{{rev|since=c++14|
The order of the elements that are not erased is preserved (this makes it possible to erase individual elements while iterating through the container)
}}
{{rev end}}
}}
===Parameters===
{{par begin}}
{{par | pos | iterator to the element to remove}}
{{par | first, last | range of elements to remove}}
{{par | key | key value of the elements to remove}}
{{par end}} 

===Return value===
@1-2@ Iterator following the last removed element.
@3@ Number of elements removed.

===Exceptions===
@1,2@ (none)
@3@ Any exceptions thrown by the {{tt|Compare}} object.

===Complexity===
Given an instance {{tt|c}} of {{tt|{{{1}}}}}:
{{cpp/container/if ord | {{{1|}}} |
@1@ Amortized constant

@2@ {{c|log(c.size()) + std::distance(first, last)}}

@3@ {{c|log(c.size()) + c.count(k)}}
|
@1@ Average case: constant, worst case: {{c|c.size()}}

@2@ Average case: {{c|std::distance(first, last)}}, worst case: {{c|c.size()}}

@3@ Average case: {{c|c.count(key)}}, worst case: {{c|c.size()}}
}}

===Example===
{{cpp/container/if set|{{{1|}}}|
{{example|code=
#include &lt;{{cpp/container/get_header| {{{1}}} }}&gt;
#include &lt;iostream&gt;
int main()
{
    std::{{{1}}}&lt;int&gt; c = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    // erase all odd numbers from c
    for(auto it = c.begin(); it != c.end(); )
        if(*it % 2 == 1)
            it = c.erase(it);
        else
            ++it;
    for(int n : c)
        std::cout &lt;&lt; n &lt;&lt; ' ';
}
|p={{cpp/container/if unord | {{{1|}}} |true|false}}
|output=
2 4 6 8 
}}
}}
{{cpp/container/if map | {{{1|}}} |
{{example|code=
#include &lt;{{cpp/container/get_header| {{{1}}} }}&gt;
#include &lt;iostream&gt;
int main()
{
    std::{{{1}}}&lt;int, std::string&gt; c = {{1, &quot;one&quot;}, {2, &quot;two&quot;}, {3, &quot;three&quot;},
                                    {4, &quot;four&quot;}, {5, &quot;five&quot;}, {6, &quot;six&quot;}};
    // erase all odd numbers from c
    for(auto it = c.begin(); it != c.end(); )
        if(it-&gt;first % 2 == 1)
            it = c.erase(it);
        else
            ++it;
    for(auto&amp; p : c)
        std::cout &lt;&lt; p.second &lt;&lt; ' ';
}
|p={{cpp/container/if unord | {{{1|}}} |true|false}}
|output=
two four six
}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc clear |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>l80lrd5t4r9q4wvmxfcvtp2a7tcsjkx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/extract assoc</title>
    <ns>10</ns>
    <id>15673</id>
    <revision>
      <id>88028</id>
      <parentid>87132</parentid>
      <timestamp>2016-10-24T02:20:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="2840">{{cpp/container/{{{1|}}}/title|extract}}
{{cpp/container/{{{1|}}}/navbar}}

{{dcl begin}}
{{dcl|num=1|since=c++17|
node_type extract( const_iterator position );
}}
{{dcl|num=2|since=c++17|
node_type extract( const key_type&amp; x );
}}
{{dcl end}}

@1@ Unlinks the node that contains the element pointed to by {{tt|position}} and returns a [[cpp/container/node_handle|node handle]] that owns it
@2@ If the container has an element with key equivalent to {{tt|x}}, unlinks the node that contains {{cpp/container/if eq|{{{1}}}|the first such|that}} element from the container and returns a [[cpp/container/node_handle|node handle]] that owns it. Otherwise, returns an empty node handle.

In either case, no elements are copied or moved, only the internal pointers of the container nodes are repointed {{cpp/container/if ord|{{{1}}}|(rebalancing may occur, as with {{lc|erase()}})}}

{{cpp/container/if ord|{{{1}}}|
Extracting a node invalidates the iterators to the extracted element. Pointers and references to the extracted element remain valid, but cannot be used while element is owned by a node handle: they become usable if the element is inserted into a container.}}
{{cpp/container/if unord|{{{1}}}|
Extracting a node invalidates only the iterators to the extracted element, and preserves the relative order of the elements that are not erased. Pointers and references to the extracted element remain valid, but cannot be used while element is owned by a node handle: they become usable if the element is inserted into a container.}}
&lt;!-- {{cpp/container/note_iterator_invalidation|{{{1|}}}|extract}} --&gt;
===Parameters===
{{par begin}}
{{par | position | a valid iterator into this container }}
{{par | x | a key to identify the node to be extracted }}
{{par end}} 

===Return value===
A [[cpp/container/node_handle|node handle]] that owns the extracted element, or empty node handle in case the element is not found in overload {{v|2}}

===Complexity===
{{cpp/container/if ord|{{{1}}}|
@1@ amortized constant
@2@ log(a.size())
}}{{cpp/container/if unord|{{{1}}}|
@1,2@ Average case O(1), worst case O(a.size()).
}}

===Notes===
{{cpp/container/if set|{{{1}}}|
extract is the only way to take a move-only object out of a set
{{source|1=
set&lt;move_only_type&gt; s;
s.emplace(...);
move_only_type mot = move(s.extract(s.begin()).value());
}}
|
extract is the only way to change a key of a map element without reallocation:
{{source|1=
map&lt;int, string&gt; m{{1,”mango”}, {2,”papaya”}, {3,”guava”}};
auto nh = m.extract(2);
nh.key() = 4;
m.insert(move(nh));
// m == {{1,”mango”}, {3,”guava”}, {4,”papaya”}}
}}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc merge |{{{1|}}}}}
{{dsc inc | cpp/container/dsc insert |{{{1|}}}}}
{{dsc inc | cpp/container/dsc erase|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>g7lynid1u41zndyepfatmynq4p7t8tq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/fill</title>
    <ns>10</ns>
    <id>10052</id>
    <revision>
      <id>63853</id>
      <parentid>52472</parentid>
      <timestamp>2013-07-29T15:20:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{cpp/std}}</comment>
      <text xml:space="preserve" bytes="419">{{cpp/container/{{{1|}}}/title | fill}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void fill( const T&amp; value );
}}
{{dcl end}}

Assigns the given value {{tt|value}} to all elements in the container.

===Parameters===
{{par begin}}
{{par | value | the value to assign to the elements}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the size of the container</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/find</title>
    <ns>10</ns>
    <id>1082</id>
    <revision>
      <id>76149</id>
      <parentid>74660</parentid>
      <timestamp>2015-02-11T10:57:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/they/it</comment>
      <text xml:space="preserve" bytes="2222">{{cpp/container/{{{1|}}}/title | find}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num = 1 |
iterator find( const Key&amp; key );
}}
{{dcl | num = 2 |
const_iterator find( const Key&amp; key ) const;
}}
{{cpp/container/if ord | {{{1|}}}
|{{dcl | num=3 | since=c++14 |
template&lt; class K &gt; iterator find( const K&amp; x );
}}
{{dcl | num=4 | since=c++14 |
template&lt; class K &gt; const_iterator find( const K&amp; x ) const;
}}
}}
{{dcl end}}

@1,2@ Finds an element with key equivalent to {{tt|key}}. {{#ifeq:{{{1|}}}|multimap|If there are several elements with {{tt|key}} in the container, any of them may be returned.}} 

{{cpp/container/if ord | {{{1|}}}
|@3,4@ Finds an element with key that compares ''equivalent'' to the value {{tt|x}}. {{cpp/enable if|the qualified-id {{c|Compare::is_transparent}} is valid and denotes a type}}. It allows calling this function without constructing an instance of {{tt|Key}}
}}
===Parameters===
{{par begin}}
{{par | key | key value of the element to search for}}
{{cpp/container/if ord | {{{1|}}} |
{{par | x | a value of any type that can be transparently compared with a key}}
}}
{{par end}} 

===Return value===
Iterator to an element with key equivalent to {{tt|key}}. If no such element is found, past-the-end (see {{lc|end()}}) iterator is returned.

===Complexity===
{{cpp/container/if ord | {{{1|}}}
 | Logarithmic in the size of the container.
 | Constant on average, worst case linear in the size of the container.
}}

===Example===
{{example|code=
#include &lt;iostream&gt;
{{cpp/container/correct include assoc| {{{1|set}}}}}
 
int main()
{  
    std::{{{1|set}}}{{cpp/container/if map| {{{1|set}}}| &lt;int,char&gt;| &lt;int&gt;}} example = {{cpp/container/if map| {{{1|set}}}| {{1,'a'},{2,'b'}}| {1, 2, 3, 4} }};
    
    auto search = example.find(2);
    if(search != example.end()) {
        std::cout &lt;&lt; &quot;Found &quot; &lt;&lt; {{cpp/container/if map| {{{1|set}}}| search-&gt;first &lt;&lt; &quot; &quot; &lt;&lt; search-&gt;second| (*search)}} &lt;&lt; '\n';
    }
    else {
        std::cout &lt;&lt; &quot;Not found\n&quot;;
    }
}
|output=
{{cpp/container/if map| {{{1|set}}}| Found 2 b| Found 2}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc count |{{{1|}}}}}
{{dsc inc | cpp/container/dsc equal_range |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>iph87ov8xfhdcc8vbi3ct7zjgbbuxju</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/forward list/example empty</title>
    <ns>10</ns>
    <id>10034</id>
    <revision>
      <id>65139</id>
      <parentid>47713</parentid>
      <timestamp>2013-08-30T21:57:07Z</timestamp>
      <contributor>
        <ip>98.159.213.242</ip>
      </contributor>
      <comment>forward list doesn't have push_back</comment>
      <text xml:space="preserve" bytes="532">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::forward_list&lt;int&gt;}} contains any elements:
 | code=
#include &lt;forward_list&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::forward_list&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.push_front(42);
    numbers.push_front(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/forward list/example operator=</title>
    <ns>10</ns>
    <id>12823</id>
    <revision>
      <id>63230</id>
      <timestamp>2013-07-06T11:57:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1281">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::forward_list}} to another:
 | code=
#include &lt;forward_list&gt;
#include &lt;iostream&gt;

void display_sizes(const std::forward_list&lt;int&gt; &amp;nums1,
                   const std::forward_list&lt;int&gt; &amp;nums2,
                   const std::forward_list&lt;int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; std::distance(nums1.begin(), nums1.end()) 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; std::distance(nums2.begin(), nums2.end())
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; std::distance(nums3.begin(), nums3.end()) &lt;&lt; '\n';
}

int main()
{
    std::forward_list&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::forward_list&lt;int&gt; nums2; 
    std::forward_list&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/forward list/navbar</title>
    <ns>10</ns>
    <id>1083</id>
    <revision>
      <id>39873</id>
      <parentid>35563</parentid>
      <timestamp>2012-09-28T19:57:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="267">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/forward_list/navbar heading
|content3 = cpp/container/forward_list/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/forward list/navbar content</title>
    <ns>10</ns>
    <id>1084</id>
    <revision>
      <id>52474</id>
      <parentid>35564</parentid>
      <timestamp>2013-06-01T04:47:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1617">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/forward_list/forward_list }}
{{nv mem ln | cpp/container/forward_list/~forward_list }}
{{nv mem ln | cpp/container/forward_list/operator{{=}} }}
{{nv mem ln | cpp/container/forward_list/assign }}
{{nv mem ln | cpp/container/forward_list/get_allocator }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/forward_list/front }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/forward_list/before_begin | before_begin | cbefore_begin}}
{{nv mem ln | cpp/container/forward_list/begin | begin | cbegin}}
{{nv mem ln | cpp/container/forward_list/end | end | cend}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/forward_list/empty}}
{{nv mem ln | cpp/container/forward_list/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/forward_list/clear}}
{{nv mem ln | cpp/container/forward_list/insert_after}}
{{nv mem ln | cpp/container/forward_list/emplace_after}}
{{nv mem ln | cpp/container/forward_list/erase_after}}
{{nv mem ln | cpp/container/forward_list/push_front}}
{{nv mem ln | cpp/container/forward_list/emplace_front}}
{{nv mem ln | cpp/container/forward_list/pop_front}}
{{nv mem ln | cpp/container/forward_list/resize}}
{{nv mem ln | cpp/container/forward_list/swap}}
{{nv h2 | Operations}}
{{nv mem ln | cpp/container/forward_list/merge}}
{{nv mem ln | cpp/container/forward_list/splice_after}}
{{nv mem ln | cpp/container/forward_list/remove | remove | remove_if}}
{{nv mem ln | cpp/container/forward_list/reverse}}
{{nv mem ln | cpp/container/forward_list/unique}}
{{nv mem ln | cpp/container/forward_list/sort}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/forward list/navbar heading</title>
    <ns>10</ns>
    <id>1085</id>
    <revision>
      <id>34972</id>
      <parentid>2171</parentid>
      <timestamp>2012-06-15T22:15:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/forward list/sidebar heading]] to [[Template:cpp/container/forward list/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="54">{{ltt|cpp/container/forward_list | std::forward_list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/forward list/title</title>
    <ns>10</ns>
    <id>1086</id>
    <revision>
      <id>2173</id>
      <parentid>2172</parentid>
      <timestamp>2011-06-06T22:52:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=forward_list::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/front</title>
    <ns>10</ns>
    <id>1087</id>
    <revision>
      <id>85495</id>
      <parentid>83782</parentid>
      <timestamp>2016-04-22T12:54:12Z</timestamp>
      <contributor>
        <username>BigSeb</username>
        <id>5266</id>
      </contributor>
      <comment>No indexing parameter to the front member function</comment>
      <text xml:space="preserve" bytes="1432">{{cpp/container/{{{1|}}}/title | front}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
reference front();
}}
{{dcl | since=c++17|
constexpr reference front();
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++14 |
const_reference front() const;
}}
{{dcl | since=c++14 |
constexpr const_reference front() const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
reference front();
}}
{{dcl | since={{cpp/std|{{{1|}}}}}|
const_reference front() const;
}}
{{dcl end}}}}

Returns a reference to the first element in the container. 

Calling {{tt|front}} on an empty container is undefined.

===Parameters===
(none)

===Return value===
reference to the first element

===Complexity===
Constant

===Notes===
For a container {{tt|c}}, the expression {{c|c.front()}} is equivalent to {{c|*c.begin()}}.

===Example===
{{example
 | The following code uses {{tt|front}} to display the first element of a {{c|std::{{{1}}}&lt;char&gt;}}:
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::{{{1}}}&lt;char&gt; letters {'o', 'm', 'g', 'w', 't', 'f'};
 
    if (!letters.empty()) {
        std::cout &lt;&lt; &quot;The first character is: &quot; &lt;&lt; letters.front() &lt;&lt; '\n';
    }  
}
 | output=
The first character is o
}}

{{#ifeq: {{{1|}}} | forward_list ||
===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc back |{{{1|}}}}}
{{dsc end}}
}}</text>
      <sha1>n0wt1n9m1ihqx9jnevl4gq9cpm95gas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/get allocator</title>
    <ns>10</ns>
    <id>1088</id>
    <revision>
      <id>62195</id>
      <parentid>35207</parentid>
      <timestamp>2013-06-25T12:03:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="339">{{cpp/container/{{{1|}}}/title | get_allocator}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
allocator_type get_allocator() const;
}}
{{dcl end}}

Returns the allocator associated with the container.

===Parameters===
(none)

===Return value===
The associated allocator.

===Complexity===
Constant.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/get header</title>
    <ns>10</ns>
    <id>14694</id>
    <revision>
      <id>83183</id>
      <parentid>83180</parentid>
      <timestamp>2016-01-23T14:14:00Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 83180 by [[Special:Contributions/D41D8CD98F|D41D8CD98F]] ([[User talk:D41D8CD98F|talk]])</comment>
      <text xml:space="preserve" bytes="632">&lt;includeonly&gt;{{#switch:{{{1|}}}&lt;/includeonly&gt;
 |basic_string=string
 |array=array
 |vector=vector
 |list=list
 |forward_list=forward_list
 |deque=deque
 |set|multiset=set
 |map|multimap=map
 |unordered_set|unordered_multiset=unordered_set
 |unordered_map|unordered_multimap=unordered_map
 |stack=stack
 |queue|priority_queue=queue
&lt;includeonly&gt; |...
}}&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation|content=Get the header in which the specified standard C++ container lives in.

Name of the header in which the standard C++ containers live in are not always regular. This may become a problem when writing template pages.
}}
&lt;/noinclude&gt;</text>
      <sha1>8xs21ma6htp4iqkg7h11u8ls1hiz49b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/get types</title>
    <ns>10</ns>
    <id>8824</id>
    <revision>
      <id>92019</id>
      <parentid>83176</parentid>
      <timestamp>2017-04-01T20:44:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="1034">{{#vardefine:types|{{#switch:{{{1|}}}
 |basic_string=class CharT, class Traits, class Alloc
 |array=class T, std::size_t N
 |vector|deque|list|forward_list=class T, class Alloc
 |set|multiset=class Key, class Compare, class Alloc
 |map|multimap=class Key, class T, class Compare, class Alloc
 |unordered_set|unordered_multiset=class Key, class Hash, class KeyEqual, class Alloc
 |unordered_map|unordered_multimap=class Key, class T, class Hash, class KeyEqual, class Alloc
 |stack|queue=class T, class Container
 |priority_queue=class T, class Container, class Compare
 |...
}}}}{{#vardefine:types_short|{{#switch:{{{1|}}}
 |basic_string=CharT,Traits,Alloc
 |array=T,N
 |vector|deque|list|forward_list=T,Alloc
 |set|multiset=Key,Compare,Alloc
 |map|multimap=Key,T,Compare,Alloc
 |unordered_set|unordered_multiset=Key,Hash,KeyEqual,Alloc
 |unordered_map|unordered_multimap=Key,T,Hash,KeyEqual,Alloc
 |stack|queue=T,Container
 |priority_queue=T,Container,Compare
 |...
}}}}&lt;noinclude&gt;{{documentation|Template:get_types/doc}}&lt;/noinclude&gt;</text>
      <sha1>c229ov39zvdgdl5nl0brefmjkbwjugn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/hash function</title>
    <ns>10</ns>
    <id>1089</id>
    <revision>
      <id>62196</id>
      <parentid>60822</parentid>
      <timestamp>2013-06-25T12:04:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="390">{{cpp/container/{{{1|}}}/title | hash_function}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
hasher hash_function() const;
}}
{{dcl end}}

Returns the function that hashes the keys.

===Parameters===
(none)

===Return value===
The hash function.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc key_eq |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/hinted insert note</title>
    <ns>10</ns>
    <id>14476</id>
    <revision>
      <id>81202</id>
      <parentid>81201</parentid>
      <timestamp>2015-10-06T17:39:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>er, back to rlp</comment>
      <text xml:space="preserve" bytes="351">The hinted insert {{v|3,4}} does not return a boolean in order to be signature-compatible with positional insert on sequential containers, such as {{lc|std::vector::insert}}. This makes it possible to create generic inserters such as {{lc|std::inserter}}. One way to check success of a hinted insert is to compare {{rlp|size|size()}} before and after.</text>
      <sha1>661ok1plskwyk8jeft0tkok8sr6nnhv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if ad</title>
    <ns>10</ns>
    <id>1090</id>
    <revision>
      <id>10956</id>
      <parentid>2181</parentid>
      <timestamp>2011-09-24T10:57:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>include the content correctly</comment>
      <text xml:space="preserve" bytes="160">{{#switch: {{{1|}}}
 | stack | queue | priority_queue = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc }}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if assoc</title>
    <ns>10</ns>
    <id>1091</id>
    <revision>
      <id>2183</id>
      <parentid>2182</parentid>
      <timestamp>2011-06-06T22:52:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="196">{{#switch: {{{1|}}}
 | set | multiset | map | multimap | unordered_set | unordered_multiset | unordered_map | unordered_multimap = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if assoc/doc</title>
    <ns>10</ns>
    <id>1092</id>
    <revision>
      <id>64763</id>
      <parentid>2185</parentid>
      <timestamp>2013-08-26T23:40:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+if c++11</comment>
      <text xml:space="preserve" bytes="2699">This is one of the group of the templates used to categorize containers. 

{{tl|cpp/container/if seq| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|array}}, {{tt|vector}}, {{tt|deque}}, {{tt|list}}, {{tt|forward_list}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if assoc| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|set}}, {{tt|multiset}}, {{tt|map}}, {{tt|multimap}}, {{tt|unordered_set}}, {{tt|unordered_multiset}}, {{tt|unordered_map}} and {{tt|unordered_multimap}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if ord| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|set}}, {{tt|multiset}}, {{tt|map}} and {{tt|multimap}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if unord| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|unordered_set}}, {{tt|unordered_multiset}}, {{tt|unordered_map}} and {{tt|unordered_multimap}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if uniq| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|set}}, {{tt|map}}, {{tt|unordered_set}} and {{tt|unordered_map}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if eq| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|multiset}}, {{tt|multimap}}, {{tt|unordered_multiset}} and {{tt|unordered_multimap}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if set| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|set}}, {{tt|multiset}}, {{tt|unordered_set}} and {{tt|unordered_multiset}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if map| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|map}}, {{tt|multimap}}, {{tt|unordered_map}} and {{tt|unordered_multimap}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if ad| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|stack}}, {{tt|queue}} and {{tt|priority_queue}}. ''if_false'' is returned otherwise, if present.

{{tl|cpp/container/if c++11| ''container'' | ''if_true'' | ''it_false''}} - results in ''if_true'' if ''container'' is one of {{tt|array}}, {{tt|unordered_set}}, {{tt|unordered_multiset}}, {{tt|unordered_map}} and {{tt|unordered_multimap}}. ''if_false'' is returned otherwise, if present.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if c++11</title>
    <ns>10</ns>
    <id>12918</id>
    <revision>
      <id>64762</id>
      <timestamp>2013-08-26T23:39:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="208">{{#switch: {{{1|}}}
 | array | unordered_set | unordered_multiset | unordered_map | unordered_multimap = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if eq</title>
    <ns>10</ns>
    <id>1093</id>
    <revision>
      <id>2187</id>
      <parentid>2186</parentid>
      <timestamp>2011-06-06T22:52:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="190">{{#switch: {{{1|}}}
 | multiset | multimap | unordered_multiset | unordered_multimap = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if map</title>
    <ns>10</ns>
    <id>1094</id>
    <revision>
      <id>2189</id>
      <parentid>2188</parentid>
      <timestamp>2011-06-06T22:52:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="180">{{#switch: {{{1|}}}
 | map | multimap | unordered_map | unordered_multimap = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if ord</title>
    <ns>10</ns>
    <id>1095</id>
    <revision>
      <id>2191</id>
      <parentid>2190</parentid>
      <timestamp>2011-06-06T22:52:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="160">{{#switch: {{{1|}}}
 | set | multiset | map | multimap = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if seq</title>
    <ns>10</ns>
    <id>1096</id>
    <revision>
      <id>2193</id>
      <parentid>2192</parentid>
      <timestamp>2011-06-06T22:52:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="173">{{#switch: {{{1|}}}
 | array | vector | deque | forward_list | list = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if set</title>
    <ns>10</ns>
    <id>1097</id>
    <revision>
      <id>2195</id>
      <parentid>2194</parentid>
      <timestamp>2011-06-06T22:52:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="180">{{#switch: {{{1|}}}
 | set | multiset | unordered_set | unordered_multiset = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if uniq</title>
    <ns>10</ns>
    <id>1098</id>
    <revision>
      <id>2197</id>
      <parentid>2196</parentid>
      <timestamp>2011-06-06T22:52:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="171">{{#switch: {{{1|}}}
 | set | map | unordered_set | unordered_map = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}} 
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/if unord</title>
    <ns>10</ns>
    <id>1099</id>
    <revision>
      <id>2199</id>
      <parentid>2198</parentid>
      <timestamp>2011-06-06T22:52:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="200">{{#switch: {{{1|}}}
 | unordered_set | unordered_multiset | unordered_map | unordered_multimap = {{{2|}}}
 | {{{3|}}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/if assoc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/insert</title>
    <ns>10</ns>
    <id>1100</id>
    <revision>
      <id>75420</id>
      <parentid>74979</parentid>
      <timestamp>2015-01-17T07:38:40Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="6204">{{cpp/container/{{{1|}}}/title | insert}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
iterator insert( iterator pos, const T&amp; value );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator pos, const T&amp; value );
}}
{{dcl rev end}}
{{dcl | num=2 | since=c++11 |
iterator insert( const_iterator pos, T&amp;&amp; value );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
void insert( iterator pos, size_type count, const T&amp; value );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator pos, size_type count, const T&amp; value );
}}
{{dcl rev end}}
{{dcl rev begin | num=4}}
{{dcl | until=c++11 |
template&lt; class InputIt &gt;
void insert( iterator pos, InputIt first, InputIt last);
}}
{{dcl | since=c++11 |
template&lt; class InputIt &gt;
iterator insert( const_iterator pos, InputIt first, InputIt last );
}}
{{dcl rev end}}
{{dcl | num=5 | since=c++11 |
iterator insert( const_iterator pos, std::initializer_list&lt;T&gt; ilist );
}}
{{dcl end}}

Inserts elements at the specified location in the container.

@1-2@ inserts {{tt|value}} before {{tt|pos}}

@3@ inserts {{tt|count}} copies of the {{tt|value}} before {{tt|pos}}

@4@ inserts elements from range {{tt|[first, last)}} before {{tt|pos}}. 
{{rev begin}}
{{rev|until=c++11|This overload has the same effect as overload {{v|3}} if {{tt|InputIt}} is an integral type.}}
{{rev|since=c++11|{{cpp/enable if|{{tt|InputIt}} qualifies as {{concept|InputIterator}}}}, to avoid ambiguity with the overload {{v|3}}.}}
{{rev end}}
The behavior is undefined if {{tt|first}} and {{tt|last}} are iterators into {{c|*this}}. 

@5@ inserts elements from initializer list {{tt|ilist}} before {{tt|pos}}.

{{#ifeq:{{{1|}}}|vector|Causes reallocation if the new {{lc|size()}} is greater than the old {{lc|capacity()}}.&amp;#32;

}}{{cpp/container/note_iterator_invalidation|{{{1|}}}|insert}}

===Parameters===
{{par begin}}
{{par | pos | iterator before which the content will be inserted. {{tt|pos}} may be the {{lc|end()}} iterator}}
{{par | value | element value to insert}}
{{par | first, last | the range of elements to insert, can't be iterators into container for which insert is called}}
{{par | ilist | initializer list to insert the values from}}
{{par hreq}}
{{par req concept | T | CopyInsertable | {{#switch:{{{1}}}|vector|deque=CopyAssignable}} | overload=1}}
{{par req concept | T | MoveInsertable | {{#switch:{{{1}}}|vector|deque=MoveAssignable}} | overload=2}}
{{par req concept | T | CopyInsertable | CopyAssignable | overload=3}}
{{par req concept | T | EmplaceConstructible | overload=4,5}}
{{#switch:{{{1}}}
|vector=
{{par req concept | T | MoveInsertable | MoveAssignable | overload=4 | notes=required only if {{tt|InputIt}} satisfies {{concept|InputIterator}} but not {{concept|ForwardIterator}}. {{mark until c++17}} }}
{{par req concept | T | MoveInsertable | MoveConstructible | MoveAssignable | Swappable | overload=4,5 | notes={{mark since c++17}}}}
|deque=
{{par req concept | T | MoveInsertable | MoveConstructible | MoveAssignable | Swappable | overload=4,5 | notes={{mark since c++17}}}}
|list=
| {{included}}
}}
{{par end}} 

===Return value===
@1-2@ Iterator pointing to the inserted {{tt|value}}

@3@ Iterator pointing to the first element inserted, or {{tt|pos}} if {{c|1=count==0}}.

@4@ Iterator pointing to the first element inserted, or {{tt|pos}} if {{c|1=first==last}}.

@5@ Iterator pointing to the first element inserted, or {{tt|pos}} if {{tt|ilist}} is empty.

===Complexity===
{{#switch:{{{1|}}}
|list=
@1-2@ Constant.
@3@ Linear in {{c|count}}
@4@ Linear in {{c|std::distance(first, last)}}
@5@ Linear in {{c|ilist.size()}}

|deque=
@1-2@ Constant plus linear in the lesser of the distances between {{tt|pos}} and either of the ends of the container.
@3@ Linear in {{c|count}}  plus linear in the lesser of the distances between {{tt|pos}} and either of the ends of the container.
@4@ Linear in {{c|std::distance(first, last)}} plus linear in the lesser of the distances between {{tt|pos}} and either of the ends of the container.
@5@ Linear in {{c|ilist.size()}} plus linear in the lesser of the distances between {{tt|pos}} and either of the ends of the container.

|vector=
@1-2@ Constant plus linear in the distance between {{tt|pos}} and end of the container.
@3@ Linear in {{c|count}} plus linear in the distance between {{tt|pos}} and end of the container.
@4@ Linear in {{c|std::distance(first, last)}} plus linear in the distance between {{tt|pos}} and end of the container.
@5@ Linear in {{c|ilist.size()}} plus linear in the distance between {{tt|pos}} and end of the container.
| {{included}}
}}
===Exceptions===
{{#switch:{{{1|}}}
|list=
If an exception is thrown, there are no effects (strong exception guarantee).

|deque=
If an exception is thrown when inserting a single element at either end, this function has no effect (strong exception guarantee).

|vector=
If an exception is thrown when inserting a single element at the end, and T is {{concept|CopyInsertable}} or {{lc|std::is_nothrow_move_constructible&lt;T&gt;::value}} is {{lc|true}}, there are no effects (strong exception guarantee).
| {{included}}
}}
{{#switch:{{{1|}}}
|vector=
===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

void print_vec(const std::vector&lt;int&gt;&amp; vec)
{
    for (auto x: vec) {
         std::cout &lt;&lt; ' ' &lt;&lt; x;
    }
    std::cout &lt;&lt; '\n';
}

int main ()
{
    std::vector&lt;int&gt; vec(3,100);
    print_vec(vec);

    auto it = vec.begin();
    it = vec.insert(it, 200);
    print_vec(vec);

    vec.insert(it,2,300);
    print_vec(vec);

    // &quot;it&quot; no longer valid, get a new one:
    it = vec.begin();

    std::vector&lt;int&gt; vec2(2,400);
    vec.insert(it+2, vec2.begin(), vec2.end());
    print_vec(vec);

    int arr[] = { 501,502,503 };
    vec.insert(vec.begin(), arr, arr+3);
    print_vec(vec);
}
|output=
100 100 100
200 100 100 100
300 300 200 100 100 100
300 300 400 400 200 100 100 100
501 502 503 300 300 400 400 200 100 100 100
}}
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |{{{1|}}}}}
{{#ifeq: {{{1|}}} | vector | | {{dsc inc | cpp/container/dsc push_front |{{{1|}}}}} }}
{{dsc inc | cpp/container/dsc push_back |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>8aut53iyalb6bitv0opp7e4rdk29l8n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/insert assoc</title>
    <ns>10</ns>
    <id>1101</id>
    <revision>
      <id>64574</id>
      <parentid>64397</parentid>
      <timestamp>2013-08-20T21:17:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="4623">{{cpp/container/{{{1|}}}/title | insert}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
{{cpp/container/if uniq | {{{1|}}}
 |std::pair&lt;iterator,bool&gt; insert( const value_type&amp; value );
 |iterator insert( const value_type&amp; value );
}}
}}
{{dcl | num=2 | since=c++11 |
{{#switch: {{{1|}}}
 | set | unordered_set =
std::pair&lt;iterator,bool&gt; insert( value_type&amp;&amp; value );
 | multiset | unordered_multiset =
iterator insert( value_type&amp;&amp; value );
 | map | unordered_map =
template&lt; class P &gt;
std::pair&lt;iterator,bool&gt; insert( P&amp;&amp; value );
 | multimap | unordered_multimap=
template&lt; class P &gt;
iterator insert( P&amp;&amp; value );
}}
}}
{{cpp/container/if unord | {{{1|}}} |
{{dcl | num=3 | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
|
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
iterator insert( iterator hint, const value_type&amp; value );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl rev end}}
}}
{{dcl | num=4 | since=c++11 |
{{#switch: {{{1|}}}
 | set | unordered_set | multiset | unordered_multiset =
iterator insert( const_iterator hint, value_type&amp;&amp; value );
 | map | unordered_map | multimap | unordered_multimap =
template&lt; class P &gt;
iterator insert( const_iterator hint, P&amp;&amp; value );
}}
}}
{{dcl | num=5 | since={{cpp/std|{{{1|}}}}} |
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl end}}

{{cpp/container/if uniq | {{{1|}}}
 |Inserts element(s) into the container, if the container doesn't already contain an element with an equivalent key.
 |Inserts element(s) into the container.
}}

@1-2@ inserts {{tt|value}}. {{cpp/container/if uniq | {{{1|}}} | | {{cpp/container/if ord | {{{1|}}} | If the container has elements with equivalent key, inserts at the upper bound of that range.{{mark since c++11}} }} }} {{cpp/container/if map | {{{1|}}} | The overload 2) is equivalent to {{c|emplace(std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.
}}

{{cpp/container/if ord | {{{1|}}}
| @3-4@ inserts {{tt|value}} in the position as close as possible, just prior{{mark since c++11}}, to {{tt|hint}}. 
| @3-4@ inserts {{tt|value}}, using {{tt|hint}} as a non-binding suggestion to where the search should start.
}} {{cpp/container/if map | {{{1|}}} | The overload 4) is equivalent to {{c|emplace_hint(hint, std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.
}}

@5@ inserts elements from range {{tt|[first, last)}}.

@6@ inserts elements from initializer list {{tt|ilist}}.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|insert}}
===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the content}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
{{cpp/container/if uniq | {{{1|}}}
 |@1-2@ Returns a pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a {{c|bool}} denoting whether the insertion took place.

@3-4@ Returns an iterator to the inserted element, or to the element that prevented the insertion.
 |@1-4@ Returns an iterator to the inserted element.
}}

@5-6@ (none)

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===

{{cpp/container/if unord | {{{1|}}}
| @1-4@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

@5-6@ Average case: {{tt|O(N)}}, where N is the number of elements to insert. Worse case: {{tt|O(N*size()+N)}}
| @1-2@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

{{rev begin}}
{{rev | until=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''after'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev | since=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev end}}

@5-6@ {{tt|O(N*log(size() + N))}}, where N is the number of elements to insert.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |{{{1|}}}}}
{{dsc inc | cpp/container/dsc emplace_hint |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/insert or assign assoc</title>
    <ns>10</ns>
    <id>13855</id>
    <revision>
      <id>83482</id>
      <parentid>83481</parentid>
      <timestamp>2016-02-15T16:16:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 83481 by [[Special:Contributions/193.248.47.22|193.248.47.22]] ([[User talk:193.248.47.22|talk]]) it was correct</comment>
      <text xml:space="preserve" bytes="2147">{{cpp/container/{{{1|}}}/title | insert_or_assign}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template &lt;class M&gt;
pair&lt;iterator, bool&gt; insert_or_assign(const key_type&amp; k, M&amp;&amp; obj);
}}
{{dcl | num=2 |since=c++17 |
template &lt;class M&gt;
pair&lt;iterator, bool&gt; insert_or_assign(key_type&amp;&amp; k, M&amp;&amp; obj);
}}
{{dcl | num=3 |since=c++17 |
template &lt;class M&gt;
iterator insert_or_assign(const_iterator hint, const key_type&amp; k, M&amp;&amp; obj);
}}
{{dcl | num=4 |since=c++17 |
template &lt;class M&gt;
iterator insert_or_assign(const_iterator hint, key_type&amp;&amp; k, M&amp;&amp; obj);
}}
{{dcl end}}

@1,3@ If a key equivalent to {{tt|k}} already exists in the container, assigns {{c|std::forward&lt;M&gt;(obj)}} to the {{tt|mapped_type}} corresponding to the key {{tt|k}}. If the key does not exist, inserts the new value as if by {{rlp|insert}}, constructing it from {{c|value_type(k, std::forward&lt;M&gt;(obj))}}
@2,4@ Same as {{v|1,3}}, except the mapped value is constructed from {{c|value_type(std::move(k), std::forward&lt;M&gt;(obj))}}

{{cpp/container/note_iterator_invalidation|{{{1|}}}|insert}}

===Parameters===
{{par begin}}
{{par | k | the key used both to look up and to insert if not found}}
{{par | hint | iterator to the position before which the new element will be inserted}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
@1,2@ The bool component is {{c|true}} if the insertion took place and {{c|false}} if the assignment took place. The iterator component is pointing at the element that was inserted or updated
@3,4@ Iterator pointing at the element that was inserted or updated

===Complexity===
@1,2@ Same as for {{rlp|emplace}}
@3,4@ Same as for {{rlp|emplace_hint}}

===Notes===
{{tt|insert_or_assign}} returns more information than {{tt|operator[]}} and does not require default-constructibility of the mapped type.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_at | {{{1|}}}}}
{{dsc inc | cpp/container/dsc at | {{{1|}}}}}
{{dsc inc | cpp/container/dsc insert |{{{1|}}}}}
{{dsc inc | cpp/container/dsc emplace |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>066j1r47km7gw4jz8wleo0jlggja0up</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/key comp</title>
    <ns>10</ns>
    <id>1102</id>
    <revision>
      <id>67371</id>
      <parentid>67370</parentid>
      <timestamp>2014-02-06T15:22:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix link to ctor</comment>
      <text xml:space="preserve" bytes="772">{{cpp/container/{{{1|}}}/title | key_comp}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
key_compare key_comp() const;
}}
{{dcl end}}

{{cpp/container/if map | {{{1|}}}
 |Returns the function object that compares the keys, which is a copy of this container's [[cpp/container/{{{1|}}}/{{{1|}}}|constructor]] argument {{tt|comp}}.
 |Returns the function object that compares the keys, which is a copy of this container's [[cpp/container/{{{1|}}}/{{{1|}}}|constructor]] argument {{tt|comp}}. It is the same as {{lc|value_comp}}.
}}

===Parameters===
(none)

===Return value===
The key comparison function object.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc value_comp |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>0zw14j8ujbdc5yqf7ag6wg8pizxell4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/key eq</title>
    <ns>10</ns>
    <id>1103</id>
    <revision>
      <id>62198</id>
      <parentid>60826</parentid>
      <timestamp>2013-06-25T12:05:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="422">{{cpp/container/{{{1|}}}/title | key_eq}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
key_equal key_eq() const;
}}
{{dcl end}}

Returns the function that compares keys for equality.

===Parameters===
(none)

===Return value===
The key comparison function.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc hash_function |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/list/example empty</title>
    <ns>10</ns>
    <id>10035</id>
    <revision>
      <id>47714</id>
      <timestamp>2013-05-16T19:20:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="506">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::list&lt;int&gt;}} contains any elements:
 | code=
#include &lt;list&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::list&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.push_back(42);
    numbers.push_back(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/list/example operator=</title>
    <ns>10</ns>
    <id>12825</id>
    <revision>
      <id>63232</id>
      <timestamp>2013-07-06T11:58:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1130">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::list}} to another:
 | code=
#include &lt;list&gt;
#include &lt;iostream&gt;

void display_sizes(const std::list&lt;int&gt;&amp; nums1,
                   const std::list&lt;int&gt;&amp; nums2,
                   const std::list&lt;int&gt;&amp; nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::list&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::list&lt;int&gt; nums2; 
    std::list&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/list/example size</title>
    <ns>10</ns>
    <id>10045</id>
    <revision>
      <id>52481</id>
      <parentid>47734</parentid>
      <timestamp>2013-06-01T04:47:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::list}}:
 | code=
#include &lt;list&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::list&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/list/navbar</title>
    <ns>10</ns>
    <id>1104</id>
    <revision>
      <id>39874</id>
      <parentid>35565</parentid>
      <timestamp>2012-09-28T19:57:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/list/navbar heading
|content3 = cpp/container/list/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/list/navbar content</title>
    <ns>10</ns>
    <id>1105</id>
    <revision>
      <id>52482</id>
      <parentid>34652</parentid>
      <timestamp>2013-06-01T04:47:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1801">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/list/list }}
{{nv mem ln | cpp/container/list/~list }}
{{nv mem ln | cpp/container/list/operator{{=}} }}
{{nv mem ln | cpp/container/list/assign }}
{{nv mem ln | cpp/container/list/get_allocator }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/list/front }}
{{nv mem ln | cpp/container/list/back }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/list/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/list/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/list/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/list/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/list/empty}}
{{nv mem ln | cpp/container/list/size}}
{{nv mem ln | cpp/container/list/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/list/clear}}
{{nv mem ln | cpp/container/list/insert}}
{{nv mem ln | cpp/container/list/emplace | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/list/erase}}
{{nv mem ln | cpp/container/list/push_front}}
{{nv mem ln | cpp/container/list/emplace_front | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/list/pop_front}}
{{nv mem ln | cpp/container/list/push_back}}
{{nv mem ln | cpp/container/list/emplace_back | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/list/pop_back}}
{{nv mem ln | cpp/container/list/resize}}
{{nv mem ln | cpp/container/list/swap}}
{{nv h2 | Operations}}
{{nv mem ln | cpp/container/list/merge}}
{{nv mem ln | cpp/container/list/splice}}
{{nv mem ln | cpp/container/list/remove | remove | remove_if}}
{{nv mem ln | cpp/container/list/reverse}}
{{nv mem ln | cpp/container/list/unique}}
{{nv mem ln | cpp/container/list/sort}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/list/navbar heading</title>
    <ns>10</ns>
    <id>1106</id>
    <revision>
      <id>35566</id>
      <parentid>2213</parentid>
      <timestamp>2012-06-15T22:28:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/list/sidebar heading]] to [[Template:cpp/container/list/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="38">{{ltt|cpp/container/list | std::list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/list/title</title>
    <ns>10</ns>
    <id>1107</id>
    <revision>
      <id>2215</id>
      <parentid>2214</parentid>
      <timestamp>2011-06-06T22:52:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="101">&lt;onlyinclude&gt;{{cpp/title | n=list::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/load factor</title>
    <ns>10</ns>
    <id>1108</id>
    <revision>
      <id>85323</id>
      <parentid>62199</parentid>
      <timestamp>2016-04-17T16:06:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>explain how it's calculated</comment>
      <text xml:space="preserve" bytes="494">{{cpp/container/{{{1|}}}/title | load_factor}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
float load_factor() const;
}}
{{dcl end}}

Returns the average number of elements per bucket, that is, {{lc|size()}} divided by {{lc|bucket_count()}}.

===Parameters===
(none)

===Return value===
Average number of elements per bucket.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc max_load_factor |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>t9lugzw2yk5qi5siiyju2c0szbo4spz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/lower bound</title>
    <ns>10</ns>
    <id>1109</id>
    <revision>
      <id>74664</id>
      <parentid>65132</parentid>
      <timestamp>2014-12-21T13:10:50Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>LWG 2299 (the type {{c|Compare::is_transparent}} exists =&gt; the qualified-id {{c|Compare::is_transparent}} is valid and denotes a type)</comment>
      <text xml:space="preserve" bytes="1352">{{cpp/container/{{{1|}}}/title | lower_bound}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |num=1|
iterator lower_bound( const Key&amp; key );
}}
{{dcl |num=1|
const_iterator lower_bound( const Key&amp; key ) const;
}}
{{dcl | num=2 | since=c++14 |
template&lt; class K &gt; 
iterator lower_bound(const K&amp; x);
}}
{{dcl | num=2 | since=c++14 |
template&lt; class K &gt; 
const_iterator lower_bound(const K&amp; x) const;
}}
{{dcl end}}

@1@ Returns an iterator pointing to the first element that is ''not less'' than {{tt|key}}.

@2@ Returns an iterator pointing to the first element that compares ''not less'' to the value {{tt|x}}. {{cpp/enable if |the qualified-id {{c|Compare::is_transparent}} is valid and denotes a type}}. They allow calling this function without constructing an instance of {{tt|Key}}.

===Parameters===
{{par begin}}
{{par | key | key value to compare the elements to}}
{{par | x | alternative value that can be compared to {{tt|Key}} }}
{{par end}} 

===Return value===
Iterator pointing to the first element that is not ''less'' than {{tt|key}}. If no such element is found, a past-the-end iterator (see {{lc|end()}}) is returned.

===Complexity===
Logarithmic in the size of the container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc equal_range |{{{1|}}}}}
{{dsc inc | cpp/container/dsc upper_bound |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>152nonak8f329f0w8j15jvcw9e5lq00</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/lwg2321-note</title>
    <ns>10</ns>
    <id>14672</id>
    <revision>
      <id>82693</id>
      <parentid>82684</parentid>
      <timestamp>2015-12-29T17:06:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>use overload #</comment>
      <text xml:space="preserve" bytes="455">After container move construction (overload {{v|{{{1|}}}}}), references, pointers, and iterators (other than the end iterator) to {{tt|other}} remain valid, but refer to elements that are now in {{c|*this}}. The current standard makes this guarantee via the blanket statement in §23.2.1[container.requirements.general]/12, and a more direct guarantee is under consideration via [http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#2321 LWG 2321].</text>
      <sha1>k4kul31lzvskqhnw6xokhgkrw1xmy7w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/lwg2488-note</title>
    <ns>10</ns>
    <id>16217</id>
    <revision>
      <id>91167</id>
      <parentid>91166</parentid>
      <timestamp>2017-03-24T13:48:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="157">if multiple elements in the range have keys that compare equivalent, it is unspecified which element is inserted (pending [http://wg21.link/lwg2844 LWG2844])</text>
      <sha1>8eiebrmqs5mrh4smpew57kvd8ie47lo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/example empty</title>
    <ns>10</ns>
    <id>10036</id>
    <revision>
      <id>69149</id>
      <parentid>47718</parentid>
      <timestamp>2014-03-28T16:55:10Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="551">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::map&lt;int, int&gt;}} contains any elements:
 | code=
#include &lt;map&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
 
int main()
{
    std::map&lt;int,int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.emplace(42, 13);
    numbers.insert(std::make_pair(13317, 123)); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1>1o6y4rch3auf8473k5rtk15l4j41r02</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/example operator=</title>
    <ns>10</ns>
    <id>12820</id>
    <revision>
      <id>63227</id>
      <parentid>63226</parentid>
      <timestamp>2013-07-06T11:54:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sp</comment>
      <text xml:space="preserve" bytes="1213">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::map}} to another:
 | code=
#include &lt;map&gt;
#include &lt;iostream&gt;

void display_sizes(const std::map&lt;int, int&gt; &amp;nums1,
                   const std::map&lt;int, int&gt; &amp;nums2,
                   const std::map&lt;int, int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::map&lt;int, int&gt; nums1 {{3, 1}, {4, 1}, {5, 9}, 
                              {6, 1}, {7, 1}, {8, 9}};
    std::map&lt;int, int&gt; nums2; 
    std::map&lt;int, int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/example size</title>
    <ns>10</ns>
    <id>10048</id>
    <revision>
      <id>52485</id>
      <parentid>47739</parentid>
      <timestamp>2013-06-01T04:47:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="346">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::map}}:
 | code=
#include &lt;map&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::map&lt;int,char&gt; nums {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/navbar</title>
    <ns>10</ns>
    <id>1110</id>
    <revision>
      <id>39875</id>
      <parentid>35567</parentid>
      <timestamp>2012-09-28T19:57:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="249">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/map/navbar heading
|content3 = cpp/container/map/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/navbar content</title>
    <ns>10</ns>
    <id>1111</id>
    <revision>
      <id>86997</id>
      <parentid>73720</parentid>
      <timestamp>2016-07-19T21:30:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>extract,merge</comment>
      <text xml:space="preserve" bytes="1781">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/map/map }}
{{nv mem ln | cpp/container/map/~map }}
{{nv mem ln | cpp/container/map/operator{{=}} }}
{{nv mem ln | cpp/container/map/get_allocator }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/map/at}}
{{nv mem ln | cpp/container/map/operator_at | operator[]}}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/map/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/map/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/map/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/map/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/map/empty}}
{{nv mem ln | cpp/container/map/size}}
{{nv mem ln | cpp/container/map/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/map/clear}}
{{nv mem ln | cpp/container/map/insert}}
{{nv mem ln | cpp/container/map/insert_or_assign | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/map/emplace | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/map/emplace_hint | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/map/try_emplace | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/map/erase}}
{{nv mem ln | cpp/container/map/swap}}
{{nv mem ln | cpp/container/map/extract | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/map/merge | notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/map/count}}
{{nv mem ln | cpp/container/map/find}}
{{nv mem ln | cpp/container/map/equal_range}}
{{nv mem ln | cpp/container/map/lower_bound}}
{{nv mem ln | cpp/container/map/upper_bound}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/map/key_comp}}
{{nv mem ln | cpp/container/map/value_comp}}
{{nv end}}</text>
      <sha1>fo9vrafdsjdzyl012gggnhu71177si8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/navbar heading</title>
    <ns>10</ns>
    <id>1112</id>
    <revision>
      <id>35570</id>
      <parentid>2225</parentid>
      <timestamp>2012-06-15T22:28:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/map/sidebar heading]] to [[Template:cpp/container/map/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="39">{{tt|[[cpp/container/map | std::map]]}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/title</title>
    <ns>10</ns>
    <id>1113</id>
    <revision>
      <id>2227</id>
      <parentid>2226</parentid>
      <timestamp>2011-06-06T22:52:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="100">&lt;onlyinclude&gt;{{cpp/title | n=map::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/map/value compare/title</title>
    <ns>10</ns>
    <id>8565</id>
    <revision>
      <id>31726</id>
      <timestamp>2012-06-06T20:44:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">&lt;onlyinclude&gt;{{cpp/container/map/title | n=value_compare::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/mark c++11</title>
    <ns>10</ns>
    <id>1114</id>
    <revision>
      <id>5599</id>
      <parentid>5598</parentid>
      <timestamp>2011-08-02T01:34:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/mark c++0x]] to [[Template:cpp/container/mark c++11]]: c++0x -&gt; c++11</comment>
      <text xml:space="preserve" bytes="314">{{#switch:{{{1|}}}
| array =
| vector
| deque
| list = {{mark c++11}}
| forward_list = 
| set
| multiset
| map
| multimap = {{mark c++11}}
| unordered_set
| unordered_multiset
| unordered_map
| unordered_multimap = 
| stack
| queue
| priority_queue = {{mark c++11}}
|  
}}&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/mark c++11/doc</title>
    <ns>10</ns>
    <id>1115</id>
    <revision>
      <id>18974</id>
      <parentid>18957</parentid>
      <timestamp>2012-02-20T10:38:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;mark c++11 feature&quot; to &quot;mark since c++11&quot;</comment>
      <text xml:space="preserve" bytes="679">This is one of the templates that are used to mark since c++11s according to the container.

{{tl|cpp/container/mark c++11|''container''}} - outputs {{mark c++11}} if the container is ''not'' new in C++11. This is used to omit redundant C++11 mark in containers that are C++11 features themselves.

{{tl|cpp/container/mark since c++11 |''container''}} - outputs {{mark since c++11}} if the container is new in C++11.

===Example===

  
  &lt;nowiki&gt; array: {{cpp/container/mark since c++11 | array}}&lt;br&gt;
  vector: {{cpp/container/mark since c++11 | vector}}&lt;/nowiki&gt;

Output

array: {{cpp/container/mark since c++11 | array}} &lt;br&gt;
vector: {{cpp/container/mark since c++11 | vector}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/mark since c++11</title>
    <ns>10</ns>
    <id>1116</id>
    <revision>
      <id>92020</id>
      <parentid>47679</parentid>
      <timestamp>2017-04-01T20:44:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="410">{{#switch:{{{1|}}}
| array = {{mark since c++11}}
| vector
| deque
| list =
| forward_list = {{mark since c++11}}
| set
| multiset
| map
| multimap = 
| unordered_set
| unordered_multiset
| unordered_map
| unordered_multimap = {{mark since c++11}}
| stack
| queue
| priority_queue =
| {{small|(no container - C++11 feature)}}
}}&lt;noinclude&gt;
{{documentation | Template:cpp/container/mark c++11/doc}}
&lt;/noinclude&gt;</text>
      <sha1>3imhrt8oro6nayy1fofyy6498khsmrh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/max bucket count</title>
    <ns>10</ns>
    <id>1117</id>
    <revision>
      <id>62203</id>
      <parentid>60829</parentid>
      <timestamp>2013-06-25T12:07:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="506">{{cpp/container/{{{1|}}}/title | max_bucket_count}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type max_bucket_count() const;
}}
{{dcl end}}

Returns the maximum number of buckets the container is able to hold due to system or library implementation limitations.

===Parameters===
(none)

===Return value===
Maximum number of buckets.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc bucket_count |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/max load factor</title>
    <ns>10</ns>
    <id>1118</id>
    <revision>
      <id>63577</id>
      <parentid>60830</parentid>
      <timestamp>2013-07-10T01:44:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="776">{{cpp/container/{{{1|}}}/title | max_load_factor}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
float max_load_factor() const;
}}
{{dcl | num=2 | since=c++11 |
void max_load_factor( float ml );
}}
{{dcl end}}

Manages the maximum load factor (number of elements per bucket). The container automatically increases the number of buckets if the load factor exceeds this threshold.

1) Returns current maximum load factor.

2) Sets the maximum load factor to {{tt|ml}}.

===Parameters===
{{par begin}}
{{par | ml | new maximum load factor setting}}
{{par end}}

===Return value===

1) current maximum load factor.

2) none.

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc load_factor |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/max size</title>
    <ns>10</ns>
    <id>1119</id>
    <revision>
      <id>85703</id>
      <parentid>85701</parentid>
      <timestamp>2016-05-04T15:24:55Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Notes */ rmv &quot;This value is typically equal to std::numeric_limits&lt;size_type&gt;::max()&quot;</comment>
      <text xml:space="preserve" bytes="1745">{{cpp/container/{{{1|}}}/title | max_size}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{#ifeq:{{{1|}}}|array
|
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
constexpr size_type max_size();
}}
{{dcl | since=c++14 |
constexpr size_type max_size() const;
}}
{{dcl rev end}}
|
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type max_size() const;
}}
}}
{{dcl end}}

Returns the maximum number of elements the container is able to hold due to system or library implementation limitations, i.e. {{c|std::distance(begin(), end())}} for the largest container.

===Parameters===
(none)

===Return value===
Maximum number of elements.

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant.

===Notes===
{{#ifeq:{{{1|}}}|array|
Because each {{tt|std::array&lt;T, N&gt;}} is a fixed-size container, the value returned by {{tt|max_size}} equals {{tt|N}} (which is also the value returned by {{lc|size}})
|
This value typically reflects the theoretical limit on the size of the container. At runtime, the size of the container may be limited to a value smaller than {{tt|max_size()}} by the amount of RAM available.
}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;{{cpp/container/get_header|{{{1}}}}}&gt;

int main()
{
    std::{{{1}}}&lt;char{{#switch: {{{1|}}}|array=, 10|map|multimap|unordered_map|unordered_multimap=,char}}&gt; s;
    std::cout &lt;&lt; &quot;Maximum size of a '{{{1}}}' is &quot; &lt;&lt; s.max_size() &lt;&lt; &quot;\n&quot;;
}
|p=true
|output=Maximum size of a '{{{1}}}' is {{#ifeq:{{{1}}}|array|10|18446744073709551615}}
}}

{{#ifeq: {{{1|}}} | forward_list||
===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc size |{{{1|}}} }}
{{#ifeq: {{{1|}}} | vector | {{dsc inc | cpp/container/dsc capacity |{{{1|}}}}} }}
{{dsc end}}
}}</text>
      <sha1>kmzajxxt7kp7fzvbs79q9la9irstuwl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/merge</title>
    <ns>10</ns>
    <id>1120</id>
    <revision>
      <id>91211</id>
      <parentid>68833</parentid>
      <timestamp>2017-03-27T16:41:06Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="2568">{{cpp/container/{{{1|}}}/title | merge}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
void merge( {{{1}}}&amp; other );
}}
{{dcl | num=1 | since=c++11 |
void merge( {{{1}}}&amp;&amp; other );
}}
{{dcl | num=2 | since={{cpp/std|{{{1|}}}}} |
template &lt;class Compare&gt; 
void merge( {{{1}}}&amp; other, Compare comp );
}}
{{dcl | num=2 | since=c++11 |
template &lt;class Compare&gt; 
void merge( {{{1}}}&amp;&amp; other, Compare comp );
}}
{{dcl end}}

Merges two sorted lists into one. The lists should be sorted into ascending order. 

No elements are copied. The container {{tt|other}} becomes empty after the operation. The function does nothing if {{c|this {{==}} &amp;other}}. If {{c|get_allocator() !{{=}} other.get_allocator()}}, the behavior is undefined. No iterators or references become invalidated, except that the iterators of moved elements now refer into {{c|*this}}, not into {{tt|other}}. The first version uses {{c|operator&lt;}} to compare the elements, the second version uses the given comparison function {{tt|comp}}.

This operation is stable: for equivalent elements in the two lists, the elements from {{tt|*this}} shall always precede the elements from {{tt|other}}, and the order of equivalent elements of {{tt|*this}} and {{tt|other}} does not change.

===Parameters===
{{par begin}}
{{par | other | another container to merge}}
{{par cmp ord | comp | p1={{{1}}}&lt;T,Allocator&gt;::const_iterator }} 
{{par end}} 

===Return value===
(none)

===Exceptions===
If an exception is thrown, this function has no effect (strong exception guarantee), except if the exception comes from the comparison function.

===Complexity===
at most {{c|std::distance(begin(), end()) + std::distance(other.begin(), other.end()) - 1}} comparisons.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;{{{1}}}&gt;
 
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, const std::{{{1}}}&lt;int&gt;&amp; list)
{
    for (auto &amp;i : list) {
        ostr &lt;&lt; &quot; &quot; &lt;&lt; i;
    }
    return ostr;
}
 
int main()
{
    std::{{{1}}}&lt;int&gt; list1 = { 5,9,0,1,3 };
    std::{{{1}}}&lt;int&gt; list2 = { 8,7,2,6,4 };
 
    list1.sort();
    list2.sort();
    std::cout &lt;&lt; &quot;list1:  &quot; &lt;&lt; list1 &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; &quot;list2:  &quot; &lt;&lt; list2 &lt;&lt; &quot;\n&quot;;
    list1.merge(list2);
    std::cout &lt;&lt; &quot;merged: &quot; &lt;&lt; list1 &lt;&lt; &quot;\n&quot;;
}
 | output=
list1:   0 1 3 5 9
list2:   2 4 6 7 8
merged:  0 1 2 3 4 5 6 7 8 9
}}

===See also===
{{dsc begin}}
{{#switch: {{{1|}}}
 | list={{dsc inc | cpp/container/dsc splice |{{{1|}}}}}
 | forward_list={{dsc inc | cpp/container/dsc splice_after |{{{1|}}}}}
}}
{{dsc end}}</text>
      <sha1>asp1kva0j3stsrbedn4x1jq7wxz7t67</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/merge assoc</title>
    <ns>10</ns>
    <id>15657</id>
    <revision>
      <id>87143</id>
      <parentid>87048</parentid>
      <timestamp>2016-07-28T11:11:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>improve wording</comment>
      <text xml:space="preserve" bytes="3890">{{cpp/container/{{{1|}}}/title|merge}}
{{cpp/container/{{{1|}}}/navbar}}

{{#switch:{{{1|}}}
|map|multimap=
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template&lt;class C2&gt;
void merge(std::map&lt;Key, T, C2, Allocator&gt;&amp; source);
}}
{{dcl | num=2 |since=c++17 |
template&lt;class C2&gt;
void merge(std::map&lt;Key, T, C2, Allocator&gt;&amp;&amp; source);
}}
{{dcl | num=3 |since=c++17 |
template&lt;class C2&gt;
void merge(std::multimap&lt;Key, T, C2, Allocator&gt;&amp; source);
}}
{{dcl | num=4 |since=c++17 |
template&lt;class C2&gt;
void merge(std::multimap&lt;Key, T, C2, Allocator&gt;&amp;&amp; source);
}}
{{dcl end}}
|set|multiset=
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template&lt;class C2&gt;
void merge(std::set&lt;Key, C2, Allocator&gt;&amp; source);
}}
{{dcl | num=2 |since=c++17 |
template&lt;class C2&gt;
void merge(std::set&lt;Key, C2, Allocator&gt;&amp;&amp; source);
}}
{{dcl | num=3 |since=c++17 |
template&lt;class C2&gt;
void merge(std::multiset&lt;Key, C2, Allocator&gt;&amp; source);
}}
{{dcl | num=4 |since=c++17 |
template&lt;class C2&gt;
void merge(std::multiset&lt;Key, C2, Allocator&gt;&amp;&amp; source);
}}
{{dcl end}}
|unordered_map|unordered_multimap=
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_map&lt;Key, T, H2, P2, Allocator&gt;&amp; source);
}}
{{dcl | num=2 |since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_map&lt;Key, T, H2, P2, Allocator&gt;&amp;&amp; source);
}}
{{dcl | num=3 |since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_multimap&lt;Key, T, H2, P2, Allocator&gt;&amp; source);
}}
{{dcl | num=4 |since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_multimap&lt;Key, T, H2, P2, Allocator&gt;&amp;&amp; source);
}}
{{dcl end}}
|unordered_set|unordered_multiset=
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_set&lt;Key, H2, P2, Allocator&gt;&amp; source);
}}
{{dcl | num=2 |since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_set&lt;Key, H2, P2, Allocator&gt;&amp;&amp; source);
}}
{{dcl | num=3 |since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_multiset&lt;Key, H2, P2, Allocator&gt;&amp; source);
}}
{{dcl | num=4 |since=c++17 |
template&lt;class H2, class P2&gt;
void merge(std::unordered_multiset&lt;Key, H2, P2, Allocator&gt;&amp;&amp; source);
}}
{{dcl end}}
}}

Attempts to extract (&quot;splice&quot;) each element in {{tt|source}} and insert it into {{tt|*this}} using the {{cpp/container/if ord|{{{1}}}|the comparison object}}{{cpp/container/if unord|{{{1}}}|hash function and key equality predicate}} of {{tt|*this}}.
{{cpp/container/if uniq|{{{1}}}|
If there is an element in {{tt|*this}} with key equivalent to the key of an element from {{tt|source}}, then that element is not extracted from {{tt|source}}.
}}
No elements are copied or moved, only the internal pointers of the container nodes are repointed. All pointers and references to the transferred elements remain valid, but now refer into {{tt|*this}}, not into {{tt|source}}. {{cpp/container/if unord|{{{1}}}|Iterators referring to the transferred elements and all iterators referring to {{tt|*this}} are invalidated. {{cpp/container/if uniq|{{{1}}}|Iterators to elements remaining in {{tt|source}} remain valid.}}}}

The behavior is undefined if {{c|1=get_allocator() != source.get_allocator()}}.
&lt;!-- {{cpp/container/note_iterator_invalidation|{{{1|}}}|merge}} --&gt;
===Parameters===
{{par begin}}
{{par | source | compatible container to transfer the nodes from }}
{{par end}} 

===Return value===
(none)

===Exceptions===
Does not throw unless {{cpp/container/if ord|{{{1}}}|comparison throws}}{{cpp/container/if unord|{{{1}}}|equality or hash function throw}}.

===Complexity===
{{cpp/container/if ord|{{{1}}}|N*log(size()+N))}}{{cpp/container/if unord|{{{1}}}|Average case O(N), worst case O(N*size()+N)}}, where N is {{tt|source.size()}}


===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc extract |{{{1|}}}}}
{{dsc inc | cpp/container/dsc insert |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>3l5p2l7wf01ddyfk7humfd9cflna1p2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/example empty</title>
    <ns>10</ns>
    <id>10037</id>
    <revision>
      <id>69151</id>
      <parentid>47719</parentid>
      <timestamp>2014-03-28T17:02:49Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <text xml:space="preserve" bytes="563">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::multimap&lt;int, int&gt;}} contains any elements:
 | code=
#include &lt;map&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
 
int main()
{
    std::multimap&lt;int, int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.emplace(42, 13);
    numbers.insert(std::make_pair(13317, 123));  
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1>rn0sdvolrsx168fl5scdsqp2e1bejuq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/example operator=</title>
    <ns>10</ns>
    <id>12819</id>
    <revision>
      <id>63225</id>
      <timestamp>2013-07-06T11:54:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1253">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::multimap}} to another:
 | code=
#include &lt;map&gt;
#include &lt;iostream&gt;

void display_sizes(const std::multimap&lt;int, int&gt; &amp;nums1,
                   const std::multimap&lt;int, int&gt; &amp;nums2,
                   const std::multimap&lt;int, int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::multimap&lt;int, int&gt; nums1 {{3, 1}, {4, 1}, {5, 9}, 
                                   {6, 1}, {7, 1}, {8, 9}};
    std::multimap&lt;int, int&gt; nums2; 
    std::multimap&lt;int, int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/example size</title>
    <ns>10</ns>
    <id>10047</id>
    <revision>
      <id>52491</id>
      <parentid>47738</parentid>
      <timestamp>2013-06-01T04:47:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="356">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::multimap}}:
 | code=
#include &lt;map&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::multimap&lt;int,char&gt; nums {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/navbar</title>
    <ns>10</ns>
    <id>1121</id>
    <revision>
      <id>39876</id>
      <parentid>35572</parentid>
      <timestamp>2012-09-28T19:57:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="259">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/multimap/navbar heading
|content3 = cpp/container/multimap/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/navbar content</title>
    <ns>10</ns>
    <id>1122</id>
    <revision>
      <id>86999</id>
      <parentid>52492</parentid>
      <timestamp>2016-07-19T21:31:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>extract,merge</comment>
      <text xml:space="preserve" bytes="1655">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/multimap/multimap }}
{{nv mem ln | cpp/container/multimap/~multimap }}
{{nv mem ln | cpp/container/multimap/operator{{=}} }}
{{nv mem ln | cpp/container/multimap/get_allocator }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/multimap/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/multimap/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/multimap/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/multimap/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/multimap/erase}}
{{nv mem ln | cpp/container/multimap/size}}
{{nv mem ln | cpp/container/multimap/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/multimap/clear}}
{{nv mem ln | cpp/container/multimap/insert}}
{{nv mem ln | cpp/container/multimap/emplace | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/multimap/emplace_hint | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/multimap/erase}}
{{nv mem ln | cpp/container/multimap/swap}}
{{nv mem ln | cpp/container/multimap/extract | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/multimap/merge | notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/multimap/count}}
{{nv mem ln | cpp/container/multimap/find}}
{{nv mem ln | cpp/container/multimap/equal_range}}
{{nv mem ln | cpp/container/multimap/lower_bound}}
{{nv mem ln | cpp/container/multimap/upper_bound}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/multimap/key_comp}}
{{nv mem ln | cpp/container/multimap/value_comp}}
{{nv end}}</text>
      <sha1>1ydvhk11y0exbyyj2pjf6b0o30fblz9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/navbar heading</title>
    <ns>10</ns>
    <id>1123</id>
    <revision>
      <id>35574</id>
      <parentid>2247</parentid>
      <timestamp>2012-06-15T22:28:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/multimap/sidebar heading]] to [[Template:cpp/container/multimap/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="46">{{ltt|cpp/container/multimap | std::multimap}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/title</title>
    <ns>10</ns>
    <id>1124</id>
    <revision>
      <id>2249</id>
      <parentid>2248</parentid>
      <timestamp>2011-06-06T22:52:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=multimap::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multimap/value compare/title</title>
    <ns>10</ns>
    <id>8562</id>
    <revision>
      <id>31723</id>
      <timestamp>2012-06-06T20:44:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="129">&lt;onlyinclude&gt;{{cpp/container/multimap/title | n=value_compare::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multiset/example empty</title>
    <ns>10</ns>
    <id>10038</id>
    <revision>
      <id>47717</id>
      <timestamp>2013-05-16T19:20:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="507">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::multiset&lt;int&gt;}} contains any elements:
 | code=
#include &lt;set&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::multiset&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.insert(42);
    numbers.insert(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multiset/example operator=</title>
    <ns>10</ns>
    <id>12818</id>
    <revision>
      <id>63224</id>
      <timestamp>2013-07-06T11:52:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1157">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::multiset}} to another:
 | code=
#include &lt;set&gt;
#include &lt;iostream&gt;

void display_sizes(const std::multiset&lt;int&gt; &amp;nums1,
                   const std::multiset&lt;int&gt; &amp;nums2,
                   const std::multiset&lt;int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::multiset&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::multiset&lt;int&gt; nums2; 
    std::multiset&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multiset/example size</title>
    <ns>10</ns>
    <id>10046</id>
    <revision>
      <id>52493</id>
      <parentid>47737</parentid>
      <timestamp>2013-06-01T04:47:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="323">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::multiset}}:
 | code=
#include &lt;set&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::multiset&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multiset/navbar</title>
    <ns>10</ns>
    <id>1125</id>
    <revision>
      <id>39877</id>
      <parentid>35575</parentid>
      <timestamp>2012-09-28T19:57:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="259">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/multiset/navbar heading
|content3 = cpp/container/multiset/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multiset/navbar content</title>
    <ns>10</ns>
    <id>1126</id>
    <revision>
      <id>86998</id>
      <parentid>52494</parentid>
      <timestamp>2016-07-19T21:31:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>extract,merge</comment>
      <text xml:space="preserve" bytes="1655">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/multiset/multiset }}
{{nv mem ln | cpp/container/multiset/~multiset }}
{{nv mem ln | cpp/container/multiset/operator{{=}} }}
{{nv mem ln | cpp/container/multiset/get_allocator }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/multiset/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/multiset/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/multiset/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/multiset/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/multiset/empty}}
{{nv mem ln | cpp/container/multiset/size}}
{{nv mem ln | cpp/container/multiset/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/multiset/clear}}
{{nv mem ln | cpp/container/multiset/insert}}
{{nv mem ln | cpp/container/multiset/emplace | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/multiset/emplace_hint | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/multiset/erase}}
{{nv mem ln | cpp/container/multiset/swap}}
{{nv mem ln | cpp/container/multiset/extract | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/multiset/merge | notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/multiset/count}}
{{nv mem ln | cpp/container/multiset/find}}
{{nv mem ln | cpp/container/multiset/equal_range}}
{{nv mem ln | cpp/container/multiset/lower_bound}}
{{nv mem ln | cpp/container/multiset/upper_bound}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/multiset/key_comp}}
{{nv mem ln | cpp/container/multiset/value_comp}}
{{nv end}}</text>
      <sha1>7ciidau7won69m1grecqhuktyfrq6vm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multiset/navbar heading</title>
    <ns>10</ns>
    <id>1127</id>
    <revision>
      <id>35576</id>
      <parentid>2255</parentid>
      <timestamp>2012-06-15T22:28:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/multiset/sidebar heading]] to [[Template:cpp/container/multiset/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="46">{{ltt|cpp/container/multiset | std::multiset}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/multiset/title</title>
    <ns>10</ns>
    <id>1128</id>
    <revision>
      <id>2257</id>
      <parentid>2256</parentid>
      <timestamp>2011-06-06T22:52:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=multiset::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/navbar</title>
    <ns>10</ns>
    <id>1161</id>
    <revision>
      <id>61572</id>
      <parentid>39878</parentid>
      <timestamp>2013-06-06T04:31:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="156">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/navbar content</title>
    <ns>10</ns>
    <id>1162</id>
    <revision>
      <id>65911</id>
      <parentid>52495</parentid>
      <timestamp>2013-10-15T04:19:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>no dynarray in n3797</comment>
      <text xml:space="preserve" bytes="739">{{nv begin}}
{{nv ln | cpp/container/array | notes={{mark c++11}} }}
{{nv ln | cpp/container/vector}}
{{nv ln | cpp/container/deque}}
{{nv ln | cpp/container/forward_list | notes={{mark c++11}} }}
{{nv ln | cpp/container/list}}
{{nv ln | cpp/container/set}}
{{nv ln | cpp/container/multiset}}
{{nv ln | cpp/container/map}}
{{nv ln | cpp/container/multimap}}
{{nv ln | cpp/container/unordered_set | notes={{mark c++11}} }}
{{nv ln | cpp/container/unordered_multiset | notes={{mark c++11}} }}
{{nv ln | cpp/container/unordered_map | notes={{mark c++11}} }}
{{nv ln | cpp/container/unordered_multimap | notes={{mark c++11}} }}
{{nv ln | cpp/container/stack}}
{{nv ln | cpp/container/queue}}
{{nv ln | cpp/container/priority_queue}}
{{nv end}}</text>
      <sha1>enbhe7puc11s9f1djxhmgmd3386zwd1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/navbar heading</title>
    <ns>10</ns>
    <id>1163</id>
    <revision>
      <id>35584</id>
      <parentid>2327</parentid>
      <timestamp>2012-06-15T22:28:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/sidebar heading]] to [[Template:cpp/container/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="38">[[cpp/container | Containers library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/node handle insert desc</title>
    <ns>10</ns>
    <id>15662</id>
    <revision>
      <id>87115</id>
      <parentid>87114</parentid>
      <timestamp>2016-07-26T22:09:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>and anoter</comment>
      <text xml:space="preserve" bytes="1447">@{{{2}}}@  If {{tt|nh}} is an empty [[cpp/container/node handle|node handle]], does nothing. Otherwise, inserts the element owned by {{tt|nh}} into the container {{cpp/container/if uniq|{{{1}}}|, if the container doesn't already contain an element with a key equivalent to {{c|nh.key()}}|and returns an iterator pointing at the inserted element. {{cpp/container/if ord|{{{1}}}|If a range containing elements with keys equivalent to {{c|nh.key()}} exists in the container, the element is inserted at the end of that range}}}}. The behavior is undefined if {{tt|nh}} is not empty and {{c|1=get_allocator() != nh.get_allocator()}}.

@{{{3}}}@ If {{tt|nh}} is an empty [[cpp/container/node handle|node handle]], does nothing and returns the end iterator. Otherwise, inserts the element owned by {{tt|nh}} into the container{{cpp/container/if uniq|{{{1}}}|, if the container doesn't already contain an element with a key equivalent to {{c|nh.key()}}}}, and returns the iterator pointing to the element with key equivalent to {{c|nh.key()}} {{cpp/container/if uniq|{{{1}}}|(regardless of whether the insert succeeded or failed). If the insertion succeeds, {{tt|nh}} is moved from, otherwise it retains ownership of the element.}} The element is inserted as close as possible to {{cpp/container/if ord|{{{1}}}|the position just prior to}} {{tt|hint}}. The behavior is undefined if {{tt|nh}} is not empty and {{c|1=get_allocator() != nh.get_allocator()}}.</text>
      <sha1>kpn4vjg9tn5pj0usree9i3kfy3lxm23</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/node handle insert return</title>
    <ns>10</ns>
    <id>15663</id>
    <revision>
      <id>87103</id>
      <parentid>87102</parentid>
      <timestamp>2016-07-26T21:44:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="885">{{cpp/container/if uniq|{{{1}}}|
@{{{2}}}@ Returns an {{tt|insert_return_type}} with the members initialized as follows: if {{tt|nh}} is empty, {{tt|inserted}} is {{tt|false}}, {{tt|position}} is {{c|end()}}, and {{tt|node}} is empty. Otherwise if the insertion took place, {{tt|inserted}} is {{tt|true}}, {{tt|position}} points to the inserted element, and {{tt|node}} is empty. If the insertion failed, {{tt|inserted}} is {{tt|false}}, {{tt|node}} has the previous value of {{tt|nh}}, and {{tt|position}} points to an element with a key equivalent to {{c|nh.key()}}.
@{{{3}}}@ End iterator if {{tt|nh}} was empty, iterator pointing to the inserted element if insertion took place, and iterator pointing to an element with a key equivalent to {{c|nh.key()}} if it failed.
|
@{{{2}}},{{{3}}}@ End iterator if {{tt|nh}} was empty, iterator pointing to the inserted element otherwise.
}}</text>
      <sha1>qnpu4mr8g0i17x7z77i3q1xsdu8n3sj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/noexcept</title>
    <ns>10</ns>
    <id>12919</id>
    <revision>
      <id>91948</id>
      <parentid>64766</parentid>
      <timestamp>2017-03-31T20:17:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="237">{{#switch:{{{1|}}}
| vector | list | deque | set | map | multiset | multimap | stack | queue | priority_queue = {{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}
| {{unreviewed noexcept}}
}}</text>
      <sha1>8gb1b46gpvqoygqbnazu27p3s0pedp9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/note iterator invalidation</title>
    <ns>10</ns>
    <id>5107</id>
    <revision>
      <id>89873</id>
      <parentid>88596</parentid>
      <timestamp>2017-01-27T13:50:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention that references are invalidated when shrink_to_fit reallocates (also re http://stackoverflow.com/questions/4188296 perhaps it should say &quot;references to elements&quot; for all entries...)</comment>
      <text xml:space="preserve" bytes="6215">{{#switch:{{{1|}}}
|vector={{#switch:{{{2|}}}
  |insert|emplace=If the new {{lc|size()}} is greater than {{lc|capacity()}}, all iterators and references are invalidated. Otherwise, only the iterators and references before the insertion point remain valid. The past-the-end iterator is also invalidated.
  |erase=Invalidates iterators and references at or after the point of the erase, including the {{lc|end()}} iterator.
  |push_back|emplace_back=If the new {{lc|size()}} is greater than {{lc|capacity()}} then all iterators and references (including the past-the-end iterator) are invalidated. Otherwise only the past-the-end iterator is invalidated.
  |pop_back=No iterators or references except for {{lc|back()}} and {{lc|end()}} are invalidated.
  |reserve=If {{tt|new_cap}} is greater than {{lc|capacity()}}, all iterators, including the past-the-end iterator, and all references to the elements are invalidated. Otherwise, no iterators or references are invalidated.
  |shrink_to_fit=If reallocation occurs, all iterators, including the past the end iterator, and all references to the elements are invalidated. If no reallocation takes place, no iterators or references are invalidated.
  |swap=All iterators and references remain valid. The past-the-end iterator is invalidated.
}}
|deque={{#switch:{{{2|}}}
  |insert|emplace=All iterators, including the past-the-end iterator, are invalidated. References are invalidated too, unless {{c|pos {{==}} begin()}} or {{c|pos {{==}} end()}}, in which case they are not invalidated.
  |erase=
All iterators and references are invalidated, unless the erased elements are at the end or the beginning of the container, in which case only the iterators and references to the erased elements are invalidated.
{{rev begin}}
{{rev | until=c++11 | It is unspecified when the past-the-end iterator is invalidated. }}
{{rev | since=c++11 | The past-the-end iterator is also invalidated unless the erased elements are at the beginning of the container and the last element is not erased.
}}
{{rev end}}
  |push_back|emplace_back|push_front|push_back=All iterators, including the past-the-end iterator, are invalidated. No references are invalidated.
  |pop_back=
{{rev begin}}
{{rev | until=c++11 | Iterators and references to the erased element are invalidated. It is unspecified whether the past-the-end iterator is invalidated. Other references and iterators are not affected.
}}
{{rev | since=c++11 | Iterators and references to the erased element are invalidated. The past-the-end iterator is also invalidated. Other references and iterators are not affected.
}}
{{rev end}}
  |pop_front=
{{rev begin}}
{{rev | since=c++11 | Iterators and references to the erased element are invalidated. It is unspecified whether the past-the-end iterator is invalidated if the element is the last element in the container. Other references and iterators are not affected.
}}
{{rev | until=c++11 | Iterators and references to the erased element are invalidated. If the element is the last element in the container, the past-the-end iterator is also invalidated. Other references and iterators are not affected.
}}
{{rev end}}
  |shrink_to_fit=All iterators and references are invalidated. Past-the-end iterator is also invalidated.
  |swap=All iterators and references remain valid. The past-the-end iterator is invalidated.
}}
|forward_list|list={{#switch:{{{2|}}}
  |insert|insert_after|emplace|emplace_after|push_back|emplace_back|push_front|emplace_front=No iterators or references are invalidated.
  |erase=References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
  |pop_front|pop_back=References and iterators to the erased element are invalidated.
  |swap=All iterators and references remain valid. It is unspecified whether an iterator holding the past-the-end value in this container will refer to this or the other container after the operation.
}}
|set|multiset|map|multimap={{#switch:{{{2|}}}
  |insert=No iterators or references are invalidated. {{rev inl|since=c++17|If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.}}
  |emplace|emplace_hint|at|operator_at=No iterators or references are invalidated.
  |erase=References and iterators to the erased elements are invalidated. Other references and iterators are not affected.
  |swap=All iterators and references remain valid. The past-the-end iterator is invalidated.
}}
|unordered_set|unordered_map|unordered_multimap|unordered_multiset={{#switch:{{{2|}}}
  |insert=If rehashing occurs due to the insertion, all iterators are invalidated. Otherwise iterators are not affected. References are not invalidated. Rehashing occurs only if the new number of elements is greater than {{c|max_load_factor()*bucket_count()}}. {{rev inl|since=c++17|If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.}}
  |emplace|emplace_hint=If rehashing occurs due to the insertion, all iterators are invalidated. Otherwise iterators are not affected. References are not invalidated. Rehashing occurs only if the new number of elements is greater than {{c|max_load_factor()*bucket_count()}}.
  |at|operator_at=If an insertion occurs and results in a rehashing of the container, all iterators are invalidated. Otherwise iterators are not affected. References are not invalidated. Rehashing occurs only if the new number of elements is greater than {{c|max_load_factor()*bucket_count()}}.
  |erase=References and iterators to the erased elements are invalidated. Other iterators and references are not invalidated.
  |swap=All iterators and references remain valid. The past-the-end iterator is invalidated.
}}
|&lt;!-- default --&gt;&lt;span style{{=}}&quot;border:1px solid #CCC; padding: 2px&quot;&gt;Information on iterator invalidation is copied from [[Template:cpp/container/note_iterator_invalidation|here]]&lt;/span&gt;
}}&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1>s9uo9z16rp7381n7njo1x8ucim1q0vb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/note iterator invalidation/doc</title>
    <ns>10</ns>
    <id>5108</id>
    <revision>
      <id>18432</id>
      <timestamp>2012-02-02T17:05:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="185">This template contains the information about iterator invalidation of all containers. 

===Usage===

{{tl|cpp/container/note iterator invalidation|''container_name''|''function_name''}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/operator at</title>
    <ns>10</ns>
    <id>1131</id>
    <revision>
      <id>83780</id>
      <parentid>76195</parentid>
      <timestamp>2016-03-08T04:30:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0031r0 (array constexpr)</comment>
      <text xml:space="preserve" bytes="1696">{{cpp/container/{{{1|}}}/title | operator[]}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
reference operator[]( size_type pos );
}}
{{dcl | since=c++17|
constexpr reference operator[]( size_type pos );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++14 |
const_reference operator[]( size_type pos ) const;
}}
{{dcl | since=c++14 |
constexpr const_reference operator[]( size_type pos ) const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
reference       operator[]( size_type pos );
}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
const_reference operator[]( size_type pos ) const;
}}
{{dcl end}}}}

Returns a reference to the element at specified location {{tt|pos}}. No bounds checking is performed.

===Parameters===
{{par begin}}
{{par | pos | position of the element to return}}
{{par end}}

===Return value===
Reference to the requested element.

===Complexity===
Constant.

===Notes===
Unlike {{lc|std::map::operator[]}}, this operator never inserts a new element into the container.

===Example===
{{example
 | The following code uses {{tt|operator[]}} to read from and write to a {{c|std::{{{1}}}&lt;int&gt;}}:
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::{{{1}}}&lt;int{{#ifeq:{{{1}}}|array|,4}}&gt; numbers {2, 4, 6, 8};

    std::cout &lt;&lt; &quot;Second element: &quot; &lt;&lt; numbers[1] &lt;&lt; '\n';

    numbers[0] = 5;

    std::cout &lt;&lt; &quot;All numbers:&quot;;
    for (auto i : numbers) {
        std::cout &lt;&lt; ' ' &lt;&lt; i;
    }
    std::cout &lt;&lt; '\n';
}
 | output=
Second element: 4
All numbers: 5 4 6 8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc at |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>moqnifl4r28z2vidl4oe7t7fkdj6f7g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/operator at assoc</title>
    <ns>10</ns>
    <id>1132</id>
    <revision>
      <id>87179</id>
      <parentid>87178</parentid>
      <timestamp>2016-08-01T14:47:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix output for ordered and p=true for unordered</comment>
      <text xml:space="preserve" bytes="5926">{{cpp/container/{{{1|}}}/title | operator[]}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
T&amp; operator[]( const Key&amp; key );
}}
{{dcl | num=2 | since=c++11 |
T&amp; operator[]( Key&amp;&amp; key );
}}
{{dcl end}}

Returns a reference to the value that is mapped to a key equivalent to {{tt|key}}, performing an insertion if such key does not already exist. 
{{#ifeq:{{{1|map}}}|map|
{{rev begin}}
{{rev|until=c++11|
@1@ Inserts {{c|value_type(key, T())}} if the key does not exist. This function is equivalent to {{c|return insert(std::make_pair(key, T())).first-&gt;second;}}
{{par begin}}
{{par req concept | key_type | CopyConstructible }}
{{par req concept | mapped_type | DefaultConstructible| CopyConstructible}}
{{par end}}
If an insertion is performed, the mapped value is [[cpp/language/value initialization|value-initialized]] (default-constructed for class types, zero-initialized otherwise) and a reference to it is returned.}}
}}{{rev if|rev={{#ifeq:{{{1|map}}}|map|yes|no}}|since=c++11|
@1@ Inserts a {{tt|value_type}} object constructed in-place from {{c|std::piecewise_construct, std::forward_as_tuple(key), std::tuple&lt;&gt;()}} if the key does not exist. {{rev inl| since=c++17 | This function is equivalent to {{c|return this-&gt;try_emplace(key).first-&gt;second;}}.}} &lt;br /&gt; When the default allocator is used, this results in the key being copy constructed from {{tt|key}} and the mapped value being [[cpp/language/value initialization|value-initialized]].
{{par begin}}
{{par req | {{tt|value_type}} must be {{concept|EmplaceConstructible}} from {{c|std::piecewise_construct, std::forward_as_tuple(key), std::tuple&lt;&gt;()}}. When the default allocator is used, this means that {{tt|key_type}} must be {{concept|CopyConstructible}} and {{tt|mapped_type}} must be {{concept|DefaultConstructible}}. }}
{{par end}}

@2@ Inserts a {{tt|value_type}} object constructed in-place from {{c|std::piecewise_construct, std::forward_as_tuple(std::move(key)), std::tuple&lt;&gt;()}} if the key does not exist. {{rev inl| since=c++17 | This function is equivalent to {{c|return this-&gt;try_emplace(std::move(key)).first-&gt;second;}}.}} &lt;br /&gt; When the default allocator is used, this results in the key being move constructed from {{tt|key}} and the mapped value being [[cpp/language/value initialization|value-initialized]].
{{par begin}}
{{par req | {{tt|value_type}} must be {{concept|EmplaceConstructible}} from {{c|std::piecewise_construct, std::forward_as_tuple(std::move(key)), std::tuple&lt;&gt;()}}. When the default allocator is used, this means that {{tt|key_type}} must be {{concept|MoveConstructible}} and {{tt|mapped_type}} must be {{concept|DefaultConstructible}}. }}
{{par end}}
}}{{#ifeq:{{{1|map}}}|map|
{{rev end}}}}
{{cpp/container/note_iterator_invalidation|{{{1|}}}|operator_at}}

===Parameters===
{{par begin}}
{{par | key | the key of the element to find}}
{{par end}}

===Return value===
Reference to the mapped value of the new element if no element with key {{tt|key}} existed. Otherwise a reference to the mapped value of the existing element whose key is equivalent to {{tt|key}}.

===Exceptions===
If an exception is thrown by any operation, the insertion has no effect

===Complexity===
{{#switch: {{{1|}}} 
| map = Logarithmic in the size of the container.
| unordered_map=Average case: constant, worst case: linear in size.
| {{included}}}}

===Notes===
In the published C++11 and C++14 standards, this function was specified to require {{tt|mapped_type}} to be {{concept|DefaultInsertable}} and {{tt|key_type}} to be {{concept|CopyInsertable}} or {{concept|MoveInsertable}} into {{c|*this}}. This specification was defective and was fixed by [http://cplusplus.github.io/LWG/lwg-defects.html#2469 LWG issue 2469], and the description above incorporates the resolution of that issue. 

However, one implementation (libc++) is known to construct the {{tt|key_type}} and {{tt|mapped_type}} objects via two separate allocator {{tt|construct()}} calls, as arguably required by the standards as published, rather than emplacing a {{tt|value_type}} object.

{{tt|operator[]}} is non-const because it inserts the key if it doesn't exist. If this behavior is undesirable or if the container is {{tt|const}}, {{rlp|at|{{tt|at()}}}} may be used.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;{{{1|}}}&gt;

int main()
{
    std::{{{1|}}}&lt;char, int&gt; letter_counts {{'a', 27}, {'b', 3}, {'c', 1}};

    std::cout &lt;&lt; &quot;initially:\n&quot;;
    for (const auto &amp;pair : letter_counts) {
        std::cout &lt;&lt; pair.first &lt;&lt; &quot;: &quot; &lt;&lt; pair.second &lt;&lt; '\n';
    }

    letter_counts['b'] = 42;  // update an existing value
    letter_counts['x'] = 9;  // insert a new value

    std::cout &lt;&lt; &quot;after modifications:\n&quot;;
    for (const auto &amp;pair : letter_counts) {
        std::cout &lt;&lt; pair.first &lt;&lt; &quot;: &quot; &lt;&lt; pair.second &lt;&lt; '\n';
    }

    // count the number of occurrences of each word
    // (the first call to operator[] initialized the counter with zero)
    std::{{{1|}}}&lt;std::string, size_t&gt;  word_map;
    for (const auto &amp;w : { &quot;this&quot;, &quot;sentence&quot;, &quot;is&quot;, &quot;not&quot;, &quot;a&quot;, &quot;sentence&quot;,
                           &quot;this&quot;, &quot;sentence&quot;, &quot;is&quot;, &quot;a&quot;, &quot;hoax&quot;}) {
        ++word_map[w];
    }

    for (const auto &amp;pair : word_map) {
        std::cout &lt;&lt; pair.second &lt;&lt; &quot; occurrences of word '&quot; &lt;&lt; pair.first &lt;&lt; &quot;'\n&quot;;
    }
}
|p={{cpp/container/if ord|{{{1}}}|false|true}}
| output=
initially:
a: 27
b: 3
c: 1
after modifications:
a: 27
b: 42
c: 1
x: 9
2 occurrences of word 'a'
1 occurrences of word 'hoax'
2 occurrences of word 'is'
1 occurrences of word 'not'
3 occurrences of word 'sentence'
2 occurrences of word 'this'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc at |{{{1|}}}}}
{{#switch: {{{1|}}}
|map|unordered_map = 
{{dsc inc | cpp/container/dsc insert_or_assign |{{{1|}}}}}
{{dsc inc | cpp/container/dsc try_emplace |{{{1|}}}}}
}}
{{dsc end}}</text>
      <sha1>stu60rp33jqfrxc9tro4susr3axugvu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/operator cmp</title>
    <ns>10</ns>
    <id>2012</id>
    <revision>
      <id>92021</id>
      <parentid>65833</parentid>
      <timestamp>2017-04-01T20:45:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="3283">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;={{small|(std::{{{1}}})}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{cpp/container/get_types|{{{1|}}}}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; {{#var:types}} &gt;
bool operator==( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; {{#var:types}} &gt;
bool operator!=( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=3 | 1=
template&lt; {{#var:types}} &gt;
bool operator&lt;( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=4 | 1=
template&lt; {{#var:types}} &gt;
bool operator&lt;=( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=5 | 1=
template&lt; {{#var:types}} &gt;
bool operator&gt;( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=6 | 1=
template&lt; {{#var:types}} &gt;
bool operator&gt;=( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl end}}

Compares the contents of two containers.

@1-2@ {{#ifeq:{{{1|}}}|array|
Checks if the contents of {{tt|lhs}} and {{tt|rhs}} are equal, that is, whether each element in {{tt|lhs}} compares equal with the element in {{tt|rhs}} at the same position.
|
Checks if the contents of {{tt|lhs}} and {{tt|rhs}} are equal, that is, whether {{c|1=lhs.size() == rhs.size()}} and each element in {{tt|lhs}} compares equal with the element in {{tt|rhs}} at the same position.
}}

@3-6@ Compares the contents of {{tt|lhs}} and {{tt|rhs}} lexicographically. The comparison is performed by a function equivalent to {{lc|std::lexicographical_compare}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | containers whose contents to compare}} {{#switch:{{{1|}}} 
| array | vector | deque | list | forward_list =
{{par req concept | T | EqualityComparable | overloads=1-2}}
{{par req concept | T | LessThanComparable | overloads=3-6 | notes=The ordering relation must establish total order. }}
| set | multiset =
{{par req concept | Key | EqualityComparable | overloads=1-2}}
| map | multimap =
{{par req concept | T, Key | EqualityComparable | overloads=1-2}}
{{par req concept | Key | LessThanComparable | overloads=3-6 | notes=The ordering relation must establish total order. }}
| {{included}} 
}}
{{par end}} 

===Return value===
@1@ {{c|true}} if the contents of the containers are equal, {{c|false}} otherwise

@2@ {{c|true}} if the contents of the containers are not equal, {{c|false}} otherwise

@3@ {{c|true}} if the contents of the {{tt|lhs}} are lexicographically ''less'' than the contents of {{tt|rhs}}, {{c|false}} otherwise

@4@ {{c|true}} if the contents of the {{tt|lhs}} are lexicographically ''less'' than or ''equal'' the contents of {{tt|rhs}}, {{c|false}} otherwise

@5@ {{c|true}} if the contents of the {{tt|lhs}} are lexicographically ''greater'' than the contents of {{tt|rhs}}, {{c|false}} otherwise

@6@ {{c|true}} if the contents of the {{tt|lhs}} are lexicographically ''greater'' than or ''equal'' the contents of {{tt|rhs}}, {{c|false}} otherwise

===Complexity===
Linear in the size of the container</text>
      <sha1>dpwd14aznc3bic6h48f4nh5irr9mw0n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/operator cmp unord</title>
    <ns>10</ns>
    <id>2006</id>
    <revision>
      <id>85908</id>
      <parentid>85907</parentid>
      <timestamp>2016-06-03T02:55:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/key_equal/key_eq</comment>
      <text xml:space="preserve" bytes="3703">{{title | operator{{==}},!{{=}}&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}} &lt;!-- switch to apprepriate declarations --&gt;
{{#switch: {{{1}}}
|unordered_set|unordered_multiset=
{{dcl | num=1 | 1=
template&lt; class Key, class Hash, class KeyEqual, class Allocator &gt;
bool operator==( const {{{1}}}&lt;Key,Hash,KeyEqual,Allocator&gt;&amp; lhs, 
                 const {{{1}}}&lt;Key,Hash,KeyEqual,Allocator&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; class Key, class Hash, class KeyEqual, class Allocator &gt;
bool operator!=( const {{{1}}}&lt;Key,Hash,KeyEqual,Allocator&gt;&amp; lhs, 
                 const {{{1}}}&lt;Key,Hash,KeyEqual,Allocator&gt;&amp; rhs );
}}
|unordered_map|unordered_multimap=
{{dcl | num=1 | 1=
template&lt; class Key, class T, class Hash, class KeyEqual, class Allocator &gt;
bool operator==( const {{{1}}}&lt;Key,T,Hash,KeyEqual,Allocator&gt;&amp; lhs, 
                 const {{{1}}}&lt;Key,T,Hash,KeyEqual,Allocator&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; class Key, class T, class Hash, class KeyEqual, class Allocator &gt;
bool operator!=( const {{{1}}}&lt;Key,T,Hash,KeyEqual,Allocator&gt;&amp; lhs, 
                 const {{{1}}}&lt;Key,T,Hash,KeyEqual,Allocator&gt;&amp; rhs );
}}
|{{included}}
}}
{{dcl end}}

Compares the contents of two unordered containers. 

The contents of two unordered containers {{tt|lhs}} and {{tt|rhs}} are equal if the following conditions hold:
* {{c|1=lhs.size() == rhs.size()}}
* each group of equivalent elements {{tt|[lhs_eq1, lhs_eq2)}} obtained from {{c|lhs.equal_range(lhs_eq1)}} has a corresponding group of equivalent elements in the other container {{tt|[rhs_eq1, rhs_eq2)}} obtained from {{c|rhs.equal_range(rhs_eq1)}}, that has the following properties:
:* {{c|1=std::distance(lhs_eq1, lhs_eq2) == std::distance(rhs_eq1, rhs_eq2)}}.
:* {{c|1=std::is_permutation(lhs_eq1, lhs_eq2, rhs_eq1) == true}}.

{{#switch:{{{1|}}}
|unordered_set|unordered_multiset=The behavior is undefined if {{tt|Key}} is not {{concept|EqualityComparable}}.
|unordered_map|unordered_multimap=The behavior is undefined if {{tt|Key}} or {{tt|T}} are not {{concept|EqualityComparable}}.
|{{included}}
}}

The behavior is also undefined if Hash and KeyEqual do not have the same behavior on lhs and rhs or if {{c|1=operator==}} for {{tt|value_type}} is not a refinement of the partition into equivalent-key groups introduced by KeyEqual (that is, if two elements that compare equal using {{c|1=operator==}} fall into different partitions)

===Parameters===
{{par begin}}
{{par | lhs, rhs | unordered containers to compare}}
{{par end}} 

===Return value===
@1@ {{c|true}} if the contents of the containers are equal, {{c|false}} otherwise

@2@ {{c|true}} if the contents of the containers are not equal, {{c|false}} otherwise

===Complexity===
{{#switch: {{{1}}}
|unordered_set | unordered_map |1=
Proportional to ''N'' calls to {{c|1=operator==}} on {{tt|value_type}}, calls to the predicate returned by {{rlp|key_eq}}, and calls to the hasher returned by {{rlp|hash_function}}, in the average case, proportional to ''N&lt;sup&gt;2&lt;/sup&gt;'' in the worst case where ''N'' is the size of the container.
|unordered_multiset | unordered_multimap |1=
Proportional to ''ΣS&lt;sub&gt;i&lt;/sub&gt;&lt;sup&gt;2&lt;/sup&gt;'' calls to {{c|1=operator==}} on {{tt|value_type}}, calls to the predicate returned by {{rlp|key_eq}}, and calls to the hasher returned by {{rlp|hash_function}} in the average case, where ''S'' is the size of the ''i''th equivalent key group. Proprotional to ''N&lt;sup&gt;2&lt;/sup&gt;'' in the worst case, where ''N'' is the size of the container. Average case becomes proportional to ''N'' if the elements within each equivalent key group are arranged in the same order (happens when the containers are copies of each other).
}}</text>
      <sha1>q5ezzjb0sprrp42k8arwxsm1vpjy1iy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/operator=</title>
    <ns>10</ns>
    <id>1129</id>
    <revision>
      <id>92055</id>
      <parentid>91953</parentid>
      <timestamp>2017-04-03T20:57:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="4054">{{cpp/container/{{{1|}}}/title | operator{{=}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} | 1=
{{{1}}}&amp; operator=( const {{{1}}}&amp; other );
}}
{{dcl rev multi | num=2 | since1=c++11 | dcl1=
{{{1}}}&amp; operator=( {{{1}}}&amp;&amp; other );
| since2=c++17 | dcl2=
{{{1}}}&amp; operator=( {{{1}}}&amp;&amp; other ) noexcept(/* see below */);
}}
{{cpp/container/if assoc|{{{1|}}}|
{{dcl | num=3 | since=c++11 | 1=
{{{1}}}&amp; operator=( std::initializer_list&lt;value_type&gt; ilist );
}}
|{{dcl | num=3 | since=c++11 | 1=
{{{1}}}&amp; operator=( std::initializer_list&lt;T&gt; ilist );
}}
}}
{{dcl end}}

Replaces the contents of the container.

@1@ Copy assignment operator. Replaces the contents with a copy of the contents of {{tt|other}}.{{rev inl|since=c++11|If {{lc|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_copy_assignment()}} is {{c|true}}, the target allocator is replaced by a copy of the source allocator. If the target and the source allocators do not compare equal, the target ({{c|*this}}) allocator is used to deallocate the memory, then {{tt|other}}'s allocator is used to allocate it before copying the elements.}}.

@2@ Move assignment operator. Replaces the contents with those of {{tt|other}} using move semantics (i.e. the data in {{tt|other}} is moved from {{tt|other}} into this container). {{tt|other}} is in a valid but unspecified state afterwards. If {{lc|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_move_assignment()}} is {{c|true}}, the target allocator is replaced by a copy of the source allocator. If it is {{c|false}} and the source and the target allocators do not compare equal, the target cannot take ownership of the source memory and must move-assign each element individually, allocating additional memory using its own allocator as needed. In any case, all element originally present in {{c|*this}} are either destroyed or replaced by elementwise move-assignment.

@3@ Replaces the contents with those identified by initializer list {{tt|ilist}}.

===Parameters===
{{par begin}}
{{par | other | another container to use as data source}}
{{par | ilist | initializer list to use as data source}}
{{par end}}

===Return value===
{{c|*this}}

===Complexity===
@1@ Linear in the size of {{tt|*this}} and {{tt|other}}.
@2@ Linear in the size of {{tt|*this}} unless the allocators do not compare equal and do not propagate, in which case linear in the size of {{tt|*this}} and {{tt|other}}
@3@ Linear in the size of {{tt|*this}} and {{tt|ilist}}.

{{rev begin}}
{{rev|since=c++17|
===Exceptions===
{{#switch:{{{1|}}}|deque|forward_list|list=
@2@ {{noexcept|std::allocator_traits&lt;Allocator&gt;::is_always_equal::value}}
|vector=
@2@ {{noexcept|std::allocator_traits&lt;Allocator&gt;::propagate_on_container_move_assignment::value
{{!!}} std::allocator_traits&lt;Allocator&gt;::is_always_equal::value}}
|set|multiset|map|multimap=
@2@ {{noexcept|std::allocator_traits&lt;Allocator&gt;::is_always_equal::value
&amp;&amp; std::is_nothrow_move_assignable&lt;Compare&gt;::value}}
|unordered_map|unordered_multimap|unordered_set|unordered_multiset=
@2@ {{noexcept|std::allocator_traits&lt;Allocator&gt;::is_always_equal::value
&amp;&amp; std::is_nothrow_move_assignable&lt;Hash&gt;::value
&amp;&amp; std::is_nothrow_move_assignable&lt;Pred&gt;::value}}
}}
}}
{{rev end}}

===Notes===
After container move assignment (overload {{v|2}}), unless elementwise move assignment is forced by incompatible allocators, references, pointers, and iterators (other than the end iterator) to {{tt|other}} remain valid, but refer to elements that are now in {{c|*this}}. The current standard makes this guarantee via the blanket statement in §23.2.1[container.requirements.general]/12, and a more direct guarantee is under consideration via [http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#2321 LWG 2321].

===Example===
{{include|cpp/container/{{{1|}}}/example operator{{=}}}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor |{{{1|}}}}}
{{cpp/container/if seq|{{{1|}}}|{{dsc inc | cpp/container/dsc assign |{{{1|}}}}}}}
{{dsc end}}</text>
      <sha1>fgvq8h9gpbbjq0g5ahsr0yon286gxlv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/operator= ad</title>
    <ns>10</ns>
    <id>1130</id>
    <revision>
      <id>80226</id>
      <parentid>63579</parentid>
      <timestamp>2015-08-01T12:11:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>removed template args to remove confusion that the arg has independent template args</comment>
      <text xml:space="preserve" bytes="978">{{cpp/container/{{{1|}}}/title | operator{{=}}}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
{{{1}}} operator=( const {{{1}}}&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
{{{1}}} operator=( {{{1}}}&amp;&amp; other );
}}
{{dcl end}}

Replaces the contents of the container adaptor with those of {{tt|other}}.

@1@ Copy assignment operator. Replaces the contents with a copy of the contents of {{tt|other}}. Effectively calls {{c|c {{=}} other.c;}}. {{mark implicit}}

@2@ Move assignment operator. Replaces the contents with those of {{tt|other}} using move semantics. Effectively calls {{c|c {{=}} std::move(other.c);}} {{mark implicit}}

===Parameters===
{{par begin}}
{{par | other | another container adaptor to be used as source}}
{{par end}}

===Return value===
{{c|*this}}

===Complexity===
Equivalent to that of {{c|1=operator=}} of the underlying container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>rrrkskjzmfm64kx6ej6ox6nioyqfme8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/param list Allocator</title>
    <ns>10</ns>
    <id>9969</id>
    <revision>
      <id>89127</id>
      <parentid>83410</parentid>
      <timestamp>2017-01-03T14:22:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>allocators don't just allocate (from https://www.reddit.com/r/cpp/comments/5lh84k/challenging_assumptions_arrays_vs_vectors/dbxt87p/ )</comment>
      <text xml:space="preserve" bytes="275">{{par | Allocator | An allocator that is used to acquire/release memory and to construct/destroy the elements in that memory. The type must meet the requirements of {{concept|Allocator}}. The behavior is undefined if {{c|Allocator::value_type}} is not the same as {{c|T}}. }}</text>
      <sha1>m3ea05tkqxj8mn2oae6sq717mbcluz4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/param list T</title>
    <ns>10</ns>
    <id>9968</id>
    <revision>
      <id>78590</id>
      <parentid>78589</parentid>
      <timestamp>2015-05-27T12:32:02Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1308">{{par | T | The type of the elements. 
{{rev begin}}
{{#switch:{{{1|}}} | vector | deque | list=
{{rev | until=c++11 | {{tt|T}} must meet the requirements of {{concept|CopyAssignable}} and {{concept|CopyConstructible}}. }}
}}
{{rev | since={{#switch:{{{1|}}} | vector | deque | list=c++11}} | until={{#switch:{{{1|}}} | vector | list | forward_list=c++17}} | The requirements that are imposed on the elements depend on the actual operations performed on the container. Generally, it is required that element type is a complete type&lt;!--17.6.4.8[res.on.functions]/2, last bullet--&gt; and meets the requirements of {{concept|Erasable}}&lt;!-- in order to instantiate X::value_type --&gt;, but many member functions impose stricter requirements. }}
{{#switch:{{{1|}}} | vector | list | forward_list=
{{rev | since=c++17 | 
The requirements that are imposed on the elements depend on the actual operations performed on the container. Generally, it is required that element type meets the requirements of {{concept|Erasable}}, but many member functions impose stricter requirements. This container (but not its members) can be instantiated with an incomplete element type if the allocator satisfies the [[cpp/concept/Allocator#Allocator_completeness_requirements|allocator completeness requirements]]. }}
}}
{{rev end}}
}}</text>
      <sha1>6fn1xoeufr0qkj6fqn21ld7k7mzo6z6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/pop</title>
    <ns>10</ns>
    <id>1133</id>
    <revision>
      <id>82037</id>
      <parentid>62202</parentid>
      <timestamp>2015-11-27T12:07:34Z</timestamp>
      <contributor>
        <ip>95.108.175.136</ip>
      </contributor>
      <comment>Add link from pop to top. This is reverse to already existing link from top to pop.</comment>
      <text xml:space="preserve" bytes="1162">{{cpp/container/{{{1|}}}/title | pop}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void pop();
}}
{{dcl end}}

{{#switch:{{{1|}}}
| stack = Removes the top element from the stack. Effectively calls {{c|c.pop_back()}}
| queue = Removes an element from the front of the queue. Effectively calls {{c|c.pop_front()}}
| priority_queue = Removes the top element from the priority queue. Effectively calls {{c|std::pop_heap(c.begin(), c.end(), comp); c.pop_back();}}
}}

===Parameters===
(none)

===Return value===
(none)

===Complexity===
{{#switch:{{{1|}}}
| stack = Equal to the complexity of {{c|Container::pop_back}}.
| queue = Equal to the complexity of {{c|Container::pop_front}}.
| priority_queue = Logarithmic number of comparisons plus the complexity of {{c|Container::pop_back}}.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace|{{{1|}}}}}
{{dsc inc | cpp/container/dsc push|{{{1|}}}}}
{{#switch:{{{1|}}}
| stack = {{dsc inc | cpp/container/dsc top|{{{1|}}}}}
| queue = {{dsc inc | cpp/container/dsc front|{{{1|}}}}}
| priority_queue = {{dsc inc | cpp/container/dsc top|{{{1|}}}}}
}}
{{dsc end}}</text>
      <sha1>hlnq05p4cc9oxxrms9nlg411542xfv1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/pop back</title>
    <ns>10</ns>
    <id>1134</id>
    <revision>
      <id>72252</id>
      <parentid>70356</parentid>
      <timestamp>2014-07-31T12:04:19Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Calling pop_back on an empty container is undefined.</comment>
      <text xml:space="preserve" bytes="613">{{cpp/container/{{{1|}}}/title | pop_back}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void pop_back();
}}
{{dcl end}}

Removes the last element of the container. 

Calling {{tt|pop_back}} on an empty container is undefined.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|pop_back}}

===Parameters===
(none)

===Return value===
(none)

===Complexity===
Constant.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{#ifeq: {{{1|}}} | vector ||{{dsc inc | cpp/container/dsc pop_front |{{{1|}}}}} }}
{{dsc inc | cpp/container/dsc push_back |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>9ou9a6vfhiru23ej9v1g1hz3jfyjfub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/pop front</title>
    <ns>10</ns>
    <id>1135</id>
    <revision>
      <id>70358</id>
      <parentid>62219</parentid>
      <timestamp>2014-05-20T17:15:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>also nothrow guarantee</comment>
      <text xml:space="preserve" bytes="570">{{cpp/container/{{{1|}}}/title | pop_front}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void pop_front();
}}
{{dcl end}}

Removes the first element of the container.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|pop_front}}

===Parameters===
(none)

===Return value===
(none)

===Complexity===
Constant.

===Exceptions===
Does not throw.

===See also===
{{dsc begin}}
{{#ifeq: {{{1|}}} | forward_list ||{{dsc inc | cpp/container/dsc pop_back |{{{1|}}}}} }}
{{dsc inc | cpp/container/dsc push_front |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>meoqlka9mtbhru8pu96mkckeq3w9dvr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/priority queue/navbar</title>
    <ns>10</ns>
    <id>1136</id>
    <revision>
      <id>39879</id>
      <parentid>35577</parentid>
      <timestamp>2012-09-28T19:57:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="271">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/priority_queue/navbar heading
|content3 = cpp/container/priority_queue/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/priority queue/navbar content</title>
    <ns>10</ns>
    <id>1137</id>
    <revision>
      <id>52507</id>
      <parentid>35578</parentid>
      <timestamp>2013-06-01T04:48:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="658">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/priority_queue/priority_queue }}
{{nv mem ln | cpp/container/priority_queue/~priority_queue }}
{{nv mem ln | cpp/container/priority_queue/operator{{=}} }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/priority_queue/top }}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/priority_queue/empty}}
{{nv mem ln | cpp/container/priority_queue/size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/priority_queue/push}}
{{nv mem ln | cpp/container/priority_queue/emplace}}
{{nv mem ln | cpp/container/priority_queue/pop}}
{{nv mem ln | cpp/container/priority_queue/swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/priority queue/navbar heading</title>
    <ns>10</ns>
    <id>1138</id>
    <revision>
      <id>35579</id>
      <parentid>2277</parentid>
      <timestamp>2012-06-15T22:28:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/priority queue/sidebar heading]] to [[Template:cpp/container/priority queue/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="61">{{tt|[[cpp/container/priority_queue | std::priority_queue]]}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/priority queue/title</title>
    <ns>10</ns>
    <id>1139</id>
    <revision>
      <id>2279</id>
      <parentid>2278</parentid>
      <timestamp>2011-06-06T22:52:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=priority_queue::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/push</title>
    <ns>10</ns>
    <id>1140</id>
    <revision>
      <id>82217</id>
      <parentid>63862</parentid>
      <timestamp>2015-12-07T14:10:17Z</timestamp>
      <contributor>
        <username>Bogdan</username>
        <id>4063</id>
      </contributor>
      <comment>The declarations in the Standard use value_type, not T; this can make a difference in cases such as this one: http://stackoverflow.com/q/34128782/4326278.</comment>
      <text xml:space="preserve" bytes="1430">{{cpp/container/{{{1|}}}/title | push}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void push( const value_type&amp; value );
}}
{{dcl | since=c++11 |
void push( value_type&amp;&amp; value );
}}
{{dcl end}}

{{#switch:{{{1|}}}
| stack = Pushes the given element {{tt|value}} to the top of the stack. 

@1@ Effectively calls {{c|c.push_back(value)}}

@2@ Effectively calls {{c|c.push_back(std::move(value))}}
| queue = Pushes the given element {{tt|value}} to the end of the queue.

@1@ Effectively calls {{c|c.push_back(value)}}

@2@ Effectively calls {{c|c.push_back(std::move(value))}}
| priority_queue | Pushes the given element {{tt|value}} to the priority queue.

@1@ Effectively calls {{c|c.push_back(value); std::push_heap(c.begin(), c.end(), comp);}}

@2@ Effectively calls {{c|c.push_back(std::move(value)); std::push_heap(c.begin(), c.end(), comp);}}
}}

===Parameters===
{{par begin}}
{{par | value | the value of the element to push}}
{{par end}} 

===Return value===
(none)

===Complexity===
{{#switch:{{{1|}}}
| stack = Equal to the complexity of {{c|Container::push_back}}.
| queue = Equal to the complexity of {{c|Container::push_back}}.
| priority_queue = Logarithmic number of comparisons plus the complexity of {{c|Container::push_back}}.
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace | {{{1|}}}}}
{{dsc inc | cpp/container/dsc pop | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>ls1mjd1cfupmrxxekxqs8zvj35palpy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/push back</title>
    <ns>10</ns>
    <id>1141</id>
    <revision>
      <id>89347</id>
      <parentid>89344</parentid>
      <timestamp>2017-01-19T06:22:19Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>[[Talk:cpp/container/deque]]</comment>
      <text xml:space="preserve" bytes="2336">{{cpp/container/{{{1|}}}/title | push_back}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
void push_back( const T&amp; value );
}}
{{dcl | num=2 | since=c++11 |
void push_back( T&amp;&amp; value );
}}
{{dcl end}}

Appends the given element {{tt|value}} to the end of the container.

@1@ The new element is initialized as a copy of {{tt|value}}.

@2@ {{tt|value}} is moved into the new element.

{{cpp/container/note_iterator_invalidation|{{{1|}}}|push_back}}

===Parameters===
{{par begin}}
{{par | value | the value of the element to append}}
{{par hreq}}
{{par req concept | T | CopyInsertable | overload=1}}
{{par req concept | T | MoveInsertable | overload=2}}
{{par end}} 

===Return value===
(none)

===Complexity===
{{#switch:{{{1|}}}
 | vector = Amortized constant.
 | deque | list = Constant.
 | {{included}}
}}

===Exceptions===
If an exception is thrown (which can be due to {{tt|Allocator::allocate()}} or element copy/move constructor/assignment), this function has no effect (strong exception guarantee).
{{#ifeq: {{{1|}}} | vector |
{{rev begin}}
{{rev | since=c++11 |
If {{tt|T}}'s move constructor is not {{c|noexcept}} and T is not {{concept|CopyInsertable}} into {{tt|*this}}, vector will use the throwing move constructor. If it throws, the guarantee is waived and the effects are unspecified.}}
{{rev end}}
}}
{{#ifeq: {{{1|}}} | vector |
===Notes===
Some implementations also throw {{lc|std::length_error}} when {{tt|push_back}} causes a reallocation that would exceed {{lc|max_size}}, due to implicitly calling an equivalent of {{lc|reserve(size()+1)}}.
}}

===Example===
{{example
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
 
int main()
{
    std::{{{1}}}&lt;std::string&gt; numbers;
 
    numbers.push_back(&quot;abc&quot;);
    std::string s = &quot;def&quot;;
    numbers.push_back(std::move(s));

    std::cout &lt;&lt; &quot;{{{1}}} holds: &quot;;
    for (auto&amp;&amp; i : numbers) std::cout &lt;&lt; std::quoted(i) &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;\nMoved-from string holds &quot; &lt;&lt; std::quoted(s) &lt;&lt; '\n';
}
 | output={{{1}}} holds: &quot;abc&quot; &quot;def&quot; 
Moved-from string holds &quot;&quot;
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace_back |{{{1|}}}}}
{{#ifeq: {{{1|}}} | vector ||{{dsc inc | cpp/container/dsc push_front |{{{1|}}}}} }}
{{dsc inc | cpp/container/dsc pop_back |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>3lcz69m1et2tg7oubq1bfn7958kq862</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/push front</title>
    <ns>10</ns>
    <id>1142</id>
    <revision>
      <id>89348</id>
      <parentid>89345</parentid>
      <timestamp>2017-01-19T06:24:27Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>[[Talk:cpp/container/deque]]. Maybe [container.requirements.general]/2 should be explicitly mentioned somewhere.</comment>
      <text xml:space="preserve" bytes="876">{{cpp/container/{{{1|}}}/title | push_front}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void push_front( const T&amp; value );
}}
{{dcl | since=c++11 |
void push_front( T&amp;&amp; value );
}}
{{dcl end}}

Prepends the given element {{tt|value}} to the beginning of the container. 

{{cpp/container/note_iterator_invalidation|{{{1|}}}|push_front}}

===Parameters===
{{par begin}}
{{par | value | the value of the element to prepend}}
{{par end}} 

===Return value===
(none)

===Complexity===
Constant.

===Exceptions===
If an exception is thrown, this function has no effect (strong exception guarantee).

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace_front |{{{1|}}}}}
{{#ifeq: {{{1|}}} | forward_list ||{{dsc inc | cpp/container/dsc push_back |{{{1|}}}}} }}
{{dsc inc | cpp/container/dsc pop_front |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>5y98jxpi4n70p22sxzwky2whurhjwmc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/queue/navbar</title>
    <ns>10</ns>
    <id>1143</id>
    <revision>
      <id>39880</id>
      <parentid>35999</parentid>
      <timestamp>2012-09-28T19:57:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="252">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/queue/navbar heading
|content3 = cpp/container/queue/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/queue/navbar content</title>
    <ns>10</ns>
    <id>1144</id>
    <revision>
      <id>52511</id>
      <parentid>35580</parentid>
      <timestamp>2013-06-01T04:48:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="594">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/queue/queue }}
{{nv mem ln | cpp/container/queue/~queue }}
{{nv mem ln | cpp/container/queue/operator{{=}} }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/queue/front }}
{{nv mem ln | cpp/container/queue/back }}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/queue/empty}}
{{nv mem ln | cpp/container/queue/size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/queue/push}}
{{nv mem ln | cpp/container/queue/emplace}}
{{nv mem ln | cpp/container/queue/pop}}
{{nv mem ln | cpp/container/queue/swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/queue/navbar heading</title>
    <ns>10</ns>
    <id>1145</id>
    <revision>
      <id>35581</id>
      <parentid>2291</parentid>
      <timestamp>2012-06-15T22:28:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/queue/sidebar heading]] to [[Template:cpp/container/queue/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="43">{{tt|[[cpp/container/queue | std::queue]]}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/queue/title</title>
    <ns>10</ns>
    <id>1146</id>
    <revision>
      <id>2293</id>
      <parentid>2292</parentid>
      <timestamp>2011-06-06T22:52:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=queue::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/rbegin</title>
    <ns>10</ns>
    <id>1147</id>
    <revision>
      <id>89155</id>
      <parentid>83778</parentid>
      <timestamp>2017-01-04T23:04:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="1318">{{cpp/container/{{{1|}}}/title | rbegin | crbegin}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
reverse_iterator rbegin();
}}
{{dcl | since=c++17|
constexpr reverse_iterator rbegin();
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_reverse_iterator rbegin() const;
}}
{{dcl | since=c++17|
constexpr const_reverse_iterator  rbegin() const;
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_reverse_iterator crbegin() const;
}}
{{dcl | since=c++17|
constexpr const_reverse_iterator crbegin() const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
reverse_iterator rbegin();
}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
const_reverse_iterator rbegin() const;
}}
{{dcl | since={{cpp/std|{{{1|}}}|c++11}} |
const_reverse_iterator crbegin() const;
}}
{{dcl end}}}}

Returns a reverse iterator to the first element of the reversed container. It corresponds to the last element of the non-reversed container. 

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
Reverse iterator to the first element.

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc rend |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>90uvgpwjm1y3rodlzlwg1zxa33az8t5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/rehash</title>
    <ns>10</ns>
    <id>1148</id>
    <revision>
      <id>77404</id>
      <parentid>62216</parentid>
      <timestamp>2015-03-24T15:43:53Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="999">{{cpp/container/{{{1|}}}/title | rehash}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void rehash( size_type count );
}}
{{dcl end}}

Sets the number of buckets to {{tt|count}} and rehashes the container, i.e. puts the elements into appropriate buckets considering that total number of buckets has changed. If the new number of buckets makes load factor more than maximum load factor ({{c|count &lt; size() / max_load_factor()}}), then the new number of buckets is at least {{c|size() / max_load_factor()}}. 

===Parameters===
{{par begin}}
{{par | count | new number of buckets}}
{{par end}}

===Return value===
(none)

===Complexity===
Average case linear in the size of the container, worst case quadratic.

===Notes===
{{tt|rehash(0)}} may be used to force an unconditional rehash, such as after suspension of automatic rehashing by temporarily increasing {{c|max_load_factor()}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc reserve |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>3l2z9g84q8omlew0o223xueijl7gre4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/remove</title>
    <ns>10</ns>
    <id>1149</id>
    <revision>
      <id>63858</id>
      <parentid>62117</parentid>
      <timestamp>2013-07-29T15:21:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{cpp/std}}</comment>
      <text xml:space="preserve" bytes="1247">{{cpp/container/{{{1|}}}/title | remove, remove_if}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void remove( const T&amp; value );
}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
template&lt; class UnaryPredicate &gt;
void remove_if( UnaryPredicate p );
}}
{{dcl end}}

Removes all elements satisfying specific criteria. The first version removes all elements that are equal to {{tt|value}}, the second version removes all elements for which predicate {{tt|p}} returns {{c|true}}. 

===Parameters===
{{par begin}}
{{par | value | value of the elements to remove}}
{{par pred1 | p | if the element should be removed | p1={{{1}}}&lt;T,Allocator&gt;::const_iterator}}
{{par end}} 

===Return value===
(none)

===Complexity===
Linear in the size of the container

===Example===
{{example
 | code=
#include &lt;{{{1}}}&gt;
#include &lt;iostream&gt;

int main()
{
    std::{{{1}}}&lt;int&gt; l = { 1,100,2,3,10,1,11,-1,12 };

    l.remove(1); // remove both elements equal to 1
    l.remove_if([](int n){ return n &gt; 10; }); // remove all elements greater than 10

    for (int n : l) {
        std::cout &lt;&lt; n &lt;&lt; ' '; 
    }
    std::cout &lt;&lt; '\n';
}
 | output=
2 3 10 -1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc remove}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/rend</title>
    <ns>10</ns>
    <id>1151</id>
    <revision>
      <id>89154</id>
      <parentid>83779</parentid>
      <timestamp>2017-01-04T23:03:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="1453">{{cpp/container/{{{1|}}}/title | rend | crend}}
{{cpp/container/{{{1|}}}/navbar}}
{{#switch:{{{1|}}}|array=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
reverse_iterator rend();
}}
{{dcl | since=c++17|
constexpr reverse_iterator  rend();
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_reverse_iterator rend() const;
}}
{{dcl | since=c++17|
constexpr const_reverse_iterator rend() const;
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++17|
const_reverse_iterator crend() const;
}}
{{dcl | since=c++17|
constexpr const_reverse_iterator crend() const;
}}
{{dcl rev end}}
{{dcl end}}
|{{dcl begin}}
{{dcl |since={{cpp/std|{{{1|}}}}} |
reverse_iterator rend();
}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
const_reverse_iterator rend() const;
}}
{{dcl | since={{cpp/std|{{{1|}}}|c++11}} |
const_reverse_iterator crend() const;
}}
{{dcl end}}}}

Returns a reverse iterator to the element following the last element of the reversed container. It corresponds to the element preceding the first element of the non-reversed container. This element acts as a placeholder, attempting to access it results in undefined behavior. 

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
Reverse iterator to the element following the last element.

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc rbegin |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>f7qka1qx30dwb3nsyuqpwznlqz87foz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/reserve</title>
    <ns>10</ns>
    <id>1152</id>
    <revision>
      <id>90165</id>
      <parentid>86505</parentid>
      <timestamp>2017-02-07T16:34:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ +note</comment>
      <text xml:space="preserve" bytes="3317">{{cpp/container/{{{1|}}}/title | reserve}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void reserve( size_type new_cap );
}}
{{dcl end}}

Increase the capacity of the container to a value that's greater or equal to {{tt|new_cap}}. If {{tt|new_cap}} is greater than the current {{lc|capacity()}}, new storage is allocated, otherwise the method does nothing.

{{cpp/container/note iterator invalidation|{{{1|}}}|reserve}}

===Parameters===
{{par begin}}
{{par | new_cap | new capacity of the container }}
{{#ifeq:{{{1|}}}|vector|
{{par hreq}}
{{par req concept | T | MoveInsertable}}
}}
{{par end}}

===Return value===
(none)

===Exceptions===
* {{lc|std::length_error}} if {{c|new_cap &gt; max_size()}}.
* any exception thrown by {{tt|Allocator::allocate()}} (typically {{lc|std::bad_alloc}})

===Complexity===
At most linear in the {{lc|size()}} of the container.

===Notes===
{{lc|reserve()}} cannot be used to reduce the capacity of the container, to that end {{lc|shrink_to_fit()}} is provided.

Correctly using {{lc|reserve()}} can prevent unnecessary reallocations, but inappropriate uses of {{lc|reserve()}} (for instance, calling it before every {{lc|push_back()}} call) may actually increase the number of reallocations (by causing the capacity to grow linearly rather than exponentially) and result in increased computational complexity and decreased performance.

===Example===
{{#ifeq:{{{1}}}|vector|
{{example
|code=
#include &lt;cstddef&gt;
#include &lt;new&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

// minimal C++11 allocator with debug output
template &lt;class Tp&gt;
struct NAlloc {
    typedef Tp value_type;
    NAlloc() = default;
    template &lt;class T&gt; NAlloc(const NAlloc&lt;T&gt;&amp;) {}
    Tp* allocate(std::size_t n) {
        n *= sizeof(Tp);
        std::cout &lt;&lt; &quot;allocating &quot; &lt;&lt; n &lt;&lt; &quot; bytes\n&quot;;
        return static_cast&lt;Tp*&gt;(::operator new(n));
    }
    void deallocate(Tp* p, std::size_t n) {
        std::cout &lt;&lt; &quot;deallocating &quot; &lt;&lt; n*sizeof*p &lt;&lt; &quot; bytes\n&quot;;
        ::operator delete(p);
    }
};
template &lt;class T, class U&gt;
bool operator==(const NAlloc&lt;T&gt;&amp;, const NAlloc&lt;U&gt;&amp;) { return true; }
template &lt;class T, class U&gt;
bool operator!=(const NAlloc&lt;T&gt;&amp;, const NAlloc&lt;U&gt;&amp;) { return false; }

int main()
{
    int sz = 100;
    std::cout &lt;&lt; &quot;using reserve: \n&quot;;
    {
        std::vector&lt;int, NAlloc&lt;int&gt;&gt; v1;
        v1.reserve(sz);
        for(int n = 0; n &lt; sz; ++n)
            v1.push_back(n);
    }
    std::cout &lt;&lt; &quot;not using reserve: \n&quot;;
    {
        std::vector&lt;int, NAlloc&lt;int&gt;&gt; v1;
        for(int n = 0; n &lt; sz; ++n)
            v1.push_back(n);
    }
}
|p=true
|output=
using reserve: 
allocating 400 bytes
deallocating 400 bytes
not using reserve: 
allocating 4 bytes
allocating 8 bytes
deallocating 4 bytes
allocating 16 bytes
deallocating 8 bytes
allocating 32 bytes
deallocating 16 bytes
allocating 64 bytes
deallocating 32 bytes
allocating 128 bytes
deallocating 64 bytes
allocating 256 bytes
deallocating 128 bytes
allocating 512 bytes
deallocating 256 bytes
deallocating 512 bytes
}}
|{{example}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc capacity |{{{1|}}}}}
{{dsc inc | cpp/container/dsc max_size |{{{1|}}}}}
{{dsc inc | cpp/container/dsc resize |{{{1|}}}}}
{{dsc inc | cpp/container/dsc shrink_to_fit |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>62yz7yhtluqu6u5m2y3kzup6mrknzif</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/reserve unord</title>
    <ns>10</ns>
    <id>1153</id>
    <revision>
      <id>62214</id>
      <parentid>60848</parentid>
      <timestamp>2013-06-25T12:12:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="792">{{cpp/container/{{{1|}}}/title | reserve}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void reserve( size_type count );
}}
{{dcl end}}

Sets the number of buckets to the number needed to accomodate at least {{tt|count}} elements without exceeding maximum load factor and rehashes the container, i.e. puts the elements into appropriate buckets considering that total number of buckets has changed. Effectively calls {{c|rehash(std::ceil(count / max_load_factor()))}}.

===Parameters===
{{par begin}}
{{par | count | new capacity of the container}}
{{par end}}

===Return value===
(none)

===Complexity===
Average case linear in the size of the container, worst case quadratic.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc rehash |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/resize</title>
    <ns>10</ns>
    <id>1154</id>
    <revision>
      <id>78437</id>
      <parentid>78046</parentid>
      <timestamp>2015-05-23T08:36:31Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>LWG2160 (don't say &quot;as if by repeatedly calling `pop_back()`&quot;); correct the Complexity section</comment>
      <text xml:space="preserve" bytes="3695">{{cpp/container/{{{1|}}}/title | resize}}
{{cpp/container/{{{1|}}}/navbar}}
{{#ifeq: {{{1|}}} | forward_list |
{{dcl begin}}
{{dcl | num=1|
void resize( size_type count );
}}
{{dcl | num=2|
void resize( size_type count, const value_type&amp; value );
}}
{{dcl end}}
|
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
void resize( size_type count, T value {{=}} T() );
}}
{{dcl | since=c++11 | num=1|
void resize( size_type count );
}}
{{dcl | since=c++11 | num=2|
void resize( size_type count, const value_type&amp; value );
}}
{{dcl rev end}}
{{dcl end}}
}}

Resizes the container to contain {{tt|count}} elements.

If the current size is greater than {{tt|count}}, the container is reduced to its first {{tt|count}} elements.

{{#ifeq: {{{1|}}} | forward_list |
If the current size is less than {{tt|count}},
@1@ additional [[cpp/concept/DefaultInsertable|default-inserted]] elements are appended
@2@ additional copies of {{tt|value}} are appended
|
{{rev begin}}
{{rev|until=c++11|
If the current size is less than {{tt|count}}, additional elements are appended and initialized with copies of {{tt|value}}.
}}
{{rev|since=c++11|
If the current size is less than {{tt|count}},
@1@ additional [[cpp/concept/DefaultInsertable|default-inserted]] elements are appended
@2@ additional copies of {{tt|value}} are appended
}}
{{rev end}}
}}
===Parameters===
{{par begin}}
{{par | count | new size of the container}}
{{par | value | the value to initialize the new elements with }}
{{par hreq}}
{{par req concept | T | DefaultInsertable | {{#switch:{{{1}}}|vector|deque=MoveInsertable}} | overload=1 }}
{{par req concept | T | CopyInsertable | overload=2 }}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the difference between the current size and {{tt|count}}.
{{#ifeq:{{{1}}}|vector|

===Exceptions===
If an exception is thrown, this function has no effect ([[cpp/language/exceptions|strong exception guarantee]]).
{{rev begin}}
{{rev | since=c++11 |
In overload {{v|1}}, if {{tt|T}}'s move constructor is not {{c|noexcept}} and T is not {{concept|CopyInsertable}} into {{tt|*this}}, vector will use the throwing move constructor. If it throws, the guarantee is waived and the effects are unspecified.}}
{{rev end}}

===Notes===
If value-initialization in overload {{v|1}} is undesirable, for example, if the elements are of non-class type and zeroing out is not needed, it can be avoided by providing a [http://stackoverflow.com/a/21028912/273767 custom Allocator::construct].

Vector capacity is never reduced when resizing to smaller size because that would invalidate all iterators, rather than only the ones that would be invalidated by the equivalent sequence of pop_back() calls.

}}
===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;{{{1}}}&gt;
int main()
{
    std::{{{1}}}&lt;int&gt; c = {1, 2, 3};
    std::cout &lt;&lt; &quot;The {{{1}}} holds: &quot;;
    for(auto&amp; el: c) std::cout &lt;&lt; el &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
    c.resize(5);
    std::cout &lt;&lt; &quot;After resize up 5: &quot;;
    for(auto&amp; el: c) std::cout &lt;&lt; el &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
    c.resize(2);
    std::cout &lt;&lt; &quot;After resize down to 2: &quot;;
    for(auto&amp; el: c) std::cout &lt;&lt; el &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
| output=
The {{{1}}} holds: 1 2 3
After resize up 5: 1 2 3 0 0
After resize down to 2: 1 2
}}

===See also===
{{dsc begin}}
{{#ifeq:{{{1|}}} | forward_list || {{dsc inc | cpp/container/dsc size |{{{1|}}}}} }}
{{#ifeq:{{{1|}}} | forward_list | {{dsc inc | cpp/container/dsc insert_after |{{{1|}}}}} | {{dsc inc | cpp/container/dsc insert |{{{1|}}}}} }}
{{#ifeq:{{{1|}}} | forward_list | {{dsc inc | cpp/container/dsc erase_after |{{{1|}}}}} | {{dsc inc | cpp/container/dsc erase |{{{1|}}}}} }}
{{dsc end}}</text>
      <sha1>og3r5jv36zpiyvxv23odjey9g89qasg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/reverse</title>
    <ns>10</ns>
    <id>1155</id>
    <revision>
      <id>89256</id>
      <parentid>89255</parentid>
      <timestamp>2017-01-13T15:38:03Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>use [[template:cpp/container/noexcept]]</comment>
      <text xml:space="preserve" bytes="1106">{{cpp/container/{{{1|}}}/title | reverse}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void reverse();
}}
{{dcl end}}

Reverses the order of the elements in the container. No references or iterators become invalidated.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Linear in the size of the container

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;{{{1}}}&gt;

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, const std::{{{1}}}&lt;int&gt;&amp; list)
{
    for (auto &amp;i : list) {
        ostr &lt;&lt; &quot; &quot; &lt;&lt; i;
    }
    return ostr;
}

int main()
{
    std::{{{1}}}&lt;int&gt; list = { 8,7,5,9,0,1,3,2,6,4 };

    std::cout &lt;&lt; &quot;before:     &quot; &lt;&lt; list &lt;&lt; &quot;\n&quot;;
    list.sort();
    std::cout &lt;&lt; &quot;ascending:  &quot; &lt;&lt; list &lt;&lt; &quot;\n&quot;;
    list.reverse();
    std::cout &lt;&lt; &quot;descending: &quot; &lt;&lt; list &lt;&lt; &quot;\n&quot;;
}
 | output=
before:      8 7 5 9 0 1 3 2 6 4
ascending:   0 1 2 3 4 5 6 7 8 9
descending:  9 8 7 6 5 4 3 2 1 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc sort |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>opm16tx03nffkrtktb4ckifqcnx7o6z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/set/example empty</title>
    <ns>10</ns>
    <id>10026</id>
    <revision>
      <id>47705</id>
      <parentid>47704</parentid>
      <timestamp>2013-05-16T19:16:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="497">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::set&lt;int&gt;}} contains any elements:
 | code=
#include &lt;set&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::set&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.insert(42);
    numbers.insert(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/set/example operator=</title>
    <ns>10</ns>
    <id>12815</id>
    <revision>
      <id>63219</id>
      <timestamp>2013-07-06T11:49:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1122">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::set}} to another:
 | code=
#include &lt;set&gt;
#include &lt;iostream&gt;

void display_sizes(const std::set&lt;int&gt; &amp;nums1,
                   const std::set&lt;int&gt; &amp;nums2,
                   const std::set&lt;int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::set&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::set&lt;int&gt; nums2; 
    std::set&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/set/example size</title>
    <ns>10</ns>
    <id>10039</id>
    <revision>
      <id>47728</id>
      <timestamp>2013-05-16T20:08:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="317">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{c|std::set&lt;int&gt;}}:
 | code=
#include &lt;set&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::set&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/set/navbar</title>
    <ns>10</ns>
    <id>1156</id>
    <revision>
      <id>39881</id>
      <parentid>35582</parentid>
      <timestamp>2012-09-28T19:57:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="249">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/set/navbar heading
|content3 = cpp/container/set/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/set/navbar content</title>
    <ns>10</ns>
    <id>1157</id>
    <revision>
      <id>86996</id>
      <parentid>52520</parentid>
      <timestamp>2016-07-19T21:30:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>extract,merge</comment>
      <text xml:space="preserve" bytes="1515">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/set/set }}
{{nv mem ln | cpp/container/set/~set }}
{{nv mem ln | cpp/container/set/operator{{=}} }}
{{nv mem ln | cpp/container/set/get_allocator }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/set/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/set/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/set/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/set/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/set/empty}}
{{nv mem ln | cpp/container/set/size}}
{{nv mem ln | cpp/container/set/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/set/clear}}
{{nv mem ln | cpp/container/set/insert}}
{{nv mem ln | cpp/container/set/emplace | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/set/emplace_hint | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/set/erase}}
{{nv mem ln | cpp/container/set/swap}}
{{nv mem ln | cpp/container/set/extract | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/set/merge | notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/set/count}}
{{nv mem ln | cpp/container/set/find}}
{{nv mem ln | cpp/container/set/equal_range}}
{{nv mem ln | cpp/container/set/lower_bound}}
{{nv mem ln | cpp/container/set/upper_bound}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/set/key_comp}}
{{nv mem ln | cpp/container/set/value_comp}}
{{nv end}}</text>
      <sha1>ccmtdlx3zonf4r8flegu977s3y0ixkx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/set/navbar heading</title>
    <ns>10</ns>
    <id>1158</id>
    <revision>
      <id>35021</id>
      <parentid>2317</parentid>
      <timestamp>2012-06-15T22:16:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/set/sidebar heading]] to [[Template:cpp/container/set/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="36">{{ltt|cpp/container/set | std::set}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/set/title</title>
    <ns>10</ns>
    <id>1159</id>
    <revision>
      <id>2319</id>
      <parentid>2318</parentid>
      <timestamp>2011-06-06T22:52:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="100">&lt;onlyinclude&gt;{{cpp/title | n=set::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/shrink to fit</title>
    <ns>10</ns>
    <id>1160</id>
    <revision>
      <id>88358</id>
      <parentid>68835</parentid>
      <timestamp>2016-11-17T04:52:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1028">{{cpp/container/{{{1|}}}/title | shrink_to_fit}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void shrink_to_fit();
}}
{{dcl end}}

Requests the removal of unused capacity.

It is a non-binding request to {{#ifeq:{{{1|}}}|vector|reduce {{lc|capacity()}} to {{lc|size()}}|reduce the memory usage without changing the size of the sequence}}. It depends on the implementation if the request is fulfilled. 

{{cpp/container/note iterator invalidation|{{{1|}}}|shrink_to_fit}}

===Parameters===
(none)

{{par begin}}
{{par hreq}}
{{par req concept | T | MoveInsertable}}
{{par end}}

===Return value===
(none)

===Complexity===
At most linear in the size of the container.

===Notes===
If an exception is thrown other than by T's move constructor, there are no effects.

===Example===
{{include|cpp/container/{{{1|}}}/example_shrink_to_fit}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc size |{{{1|}}}}}
{{#ifeq: {{{1|}}}|vector|{{dsc inc | cpp/container/dsc capacity |{{{1|}}}}}}}
{{dsc end}}</text>
      <sha1>jx33judeu3jcgit6w59qsq9rpqff28g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/size</title>
    <ns>10</ns>
    <id>1164</id>
    <revision>
      <id>64981</id>
      <parentid>64977</parentid>
      <timestamp>2013-08-28T22:22:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>no more list</comment>
      <text xml:space="preserve" bytes="822">{{cpp/container/{{{1|}}}/title | size}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type size() const;
}}
{{dcl end}}

Returns the number of elements in the container, i.e. {{c|std::distance(begin(), end())}}.

===Parameters===
(none)

===Return value===
The number of elements in the container.

===Exceptions===
{{cpp/container/noexcept|{{{1|}}}}}

===Complexity===
Constant.

===Example===
{{include | cpp/container/{{{1|}}}/example_size}}

===See also===
{{dsc begin}}
{{#ifeq: {{{1|}}} | vector | {{dsc inc | cpp/container/dsc capacity |{{{1|}}}}} }}
{{dsc inc | cpp/container/dsc empty |{{{1|}}}}}
{{dsc inc | cpp/container/dsc max_size |{{{1|}}}}}
{{#switch:{{{1|}}} | vector | deque | list | forward_list={{dsc inc | cpp/container/dsc resize |{{{1|}}}}} }}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/size ad</title>
    <ns>10</ns>
    <id>1165</id>
    <revision>
      <id>62271</id>
      <parentid>62211</parentid>
      <timestamp>2013-06-26T03:43:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ce</comment>
      <text xml:space="preserve" bytes="454">{{cpp/container/{{{1|}}}/title | size}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
size_type size() const;
}}
{{dcl end}}

Returns the number of elements in the underlying container, that is, {{c|c.size()}}.

===Parameters===
(none)

===Return value===
The number of elements in the container.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc empty | {{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/sort</title>
    <ns>10</ns>
    <id>1166</id>
    <revision>
      <id>91210</id>
      <parentid>91209</parentid>
      <timestamp>2017-03-27T16:30:49Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1745">{{cpp/container/{{{1|}}}/title | sort}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
void sort();
}}
{{dcl | num=2 | since={{cpp/std|{{{1|}}}}} |
template&lt; class Compare &gt; 
void sort( Compare comp );
}}
{{dcl end}}

Sorts the elements in ascending order. The order of equal elements is preserved. The first version uses {{c|operator&lt;}} to compare the elements, the second version uses the given comparison function {{tt|comp}}.

If an exception is thrown, the order of elements in {{c|*this}} is unspecified.

===Parameters===
{{par begin}}
{{par cmp ord | comp | p1={{{1}}}&lt;T,Allocator&gt;::const_iterator }} 
{{par end}} 

===Return value===
(none)

===Complexity===
Approximately {{c|N log N}} comparisons, where N is the number of elements in the list.

===Notes===
{{lc|std::sort}} requires random access iterators and so cannot be used with {{tt|{{{1}}} }}. This function also differs from {{lc|std::sort}} in that it does not require the element type of the {{tt|{{{1}}} }} to be swappable, preserves the values of all iterators, and performs a stable sort.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;functional&gt;
#include &lt;{{{1}}}&gt;

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, const std::{{{1}}}&lt;int&gt;&amp; list)
{
    for (auto &amp;i : list) {
        ostr &lt;&lt; &quot; &quot; &lt;&lt; i;
    }
    return ostr;
}

int main()
{
    std::{{{1}}}&lt;int&gt; list = { 8,7,5,9,0,1,3,2,6,4 };

    std::cout &lt;&lt; &quot;before:     &quot; &lt;&lt; list &lt;&lt; &quot;\n&quot;;
    list.sort();
    std::cout &lt;&lt; &quot;ascending:  &quot; &lt;&lt; list &lt;&lt; &quot;\n&quot;;
    list.sort(std::greater&lt;int&gt;());
    std::cout &lt;&lt; &quot;descending: &quot; &lt;&lt; list &lt;&lt; &quot;\n&quot;;
}
 | output=
before:      8 7 5 9 0 1 3 2 6 4
ascending:   0 1 2 3 4 5 6 7 8 9
descending:  9 8 7 6 5 4 3 2 1 0
}}</text>
      <sha1>t17d1eqkyyqv7vm7tj84xum3u5ew5i1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/splice</title>
    <ns>10</ns>
    <id>1167</id>
    <revision>
      <id>71184</id>
      <parentid>63846</parentid>
      <timestamp>2014-06-07T22:01:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>since this doesn't call move constructors, reword from 'moves' to 'transfers'</comment>
      <text xml:space="preserve" bytes="3234">{{cpp/container/{{{1|}}}/title | splice}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
void splice( const_iterator pos, {{{1}}}&amp; other );
}}
{{dcl | num=1 | since=c++11 |
void splice( const_iterator pos, {{{1}}}&amp;&amp; other );
}}
{{dcl | num=2 | since={{cpp/std|{{{1|}}}}} |
void splice( const_iterator pos, {{{1}}}&amp; other, const_iterator it );
}}
{{dcl | num=2 | since=c++11 |
void splice( const_iterator pos, {{{1}}}&amp;&amp; other, const_iterator it );
}}
{{dcl | num=3 |since={{cpp/std|{{{1|}}}}} |
void splice( const_iterator pos, {{{1}}}&amp; other, 
             const_iterator first, const_iterator last);
}}
{{dcl | num=3 | since=c++11 |
void splice( const_iterator pos, {{{1}}}&amp;&amp; other, 
             const_iterator first, const_iterator last );
}}
{{dcl end}}

Transfers elements from one list to another.

No elements are copied or moved, only the internal pointers of the list nodes are re-pointed. The behavior is undefined if: {{c|get_allocator() !{{=}} other.get_allocator()}}. No iterators or references become invalidated, the iterators to moved elements remain valid, but now refer into {{c|*this}}, not into {{tt|other}}.

@1@ Transfers all elements from {{tt|other}} into {{c|*this}}. The elements are inserted before the element pointed to by {{tt|pos}}. The container {{tt|other}} becomes empty after the operation. The behavior is undefined if {{c|this {{==}} &amp;other}}.

@2@ Transfers the element pointed to by {{tt|it}} from {{tt|other}} into {{c|*this}}. The element is inserted before the element pointed to by {{tt|pos}}.

@3@ Transfers the elements in the range {{tt|[first, last)}} from {{tt|other}} into {{c|*this}}. The elements are inserted before the element pointed to by {{tt|pos}}. The behavior is undefined if {{tt|pos}} is an iterator in the range {{tt|[first,last)}}.

===Parameters===
{{par begin}}
{{par | pos | element before which the content will be inserted }}
{{par | other | another container to transfer the content from}}
{{par | it | the element to transfer from {{tt|other}} to {{c|*this}}}}
{{par | first, last | the range of elements to transfer from {{tt|other}} to {{c|*this}}}}
{{par end}} 

===Return value===
(none)

===Complexity===
1-2) Constant.

3) Constant if {{c|this {{==}} &amp;other}}, otherwise linear in {{c|std::distance(first, last)}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;list&gt;

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; ostr, const std::list&lt;int&gt;&amp; list)
{
    for (auto &amp;i : list) {
        ostr &lt;&lt; &quot; &quot; &lt;&lt; i;
    }
    return ostr;
}

int main ()
{
    std::list&lt;int&gt; list1 = { 1, 2, 3, 4, 5 };
    std::list&lt;int&gt; list2 = { 10, 20, 30, 40, 50 };

    auto it = list1.begin();
    std::advance(it, 2);

    list1.splice(it, list2);

    std::cout &lt;&lt; &quot;list1: &quot; &lt;&lt; list1 &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; &quot;list2: &quot; &lt;&lt; list2 &lt;&lt; &quot;\n&quot;;

    list2.splice(list2.begin(), list1, it, list1.end());

    std::cout &lt;&lt; &quot;list1: &quot; &lt;&lt; list1 &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; &quot;list2: &quot; &lt;&lt; list2 &lt;&lt; &quot;\n&quot;;
}
 | output=
list1:  1 2 10 20 30 40 50 3 4 5
list2: 
list1:  1 2 10 20 30 40 50
list2:  3 4 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc merge |{{{1|}}}}}
{{dsc inc | cpp/container/dsc remove |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>sk43s8rnop8futggbsm496ckebzuokv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/splice after</title>
    <ns>10</ns>
    <id>2449</id>
    <revision>
      <id>63587</id>
      <parentid>60855</parentid>
      <timestamp>2013-07-10T01:44:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="3186">{{cpp/container/{{{1|}}}/title | splice_after}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
void splice_after( const_iterator pos, {{{1}}}&amp; other );
}}
{{dcl | num=1 | since=c++11 |
void splice_after( const_iterator pos, {{{1}}}&amp;&amp; other );
}}
{{dcl | num=2 | since=c++11 |
void splice_after( const_iterator pos, {{{1}}}&amp; other, const_iterator it );
}}
{{dcl | num=2 | since=c++11 |
void splice_after( const_iterator pos, {{{1}}}&amp;&amp; other, const_iterator it );
}}
{{dcl | num=3 | since=c++11 |
void splice_after( const_iterator pos, {{{1}}}&amp; other, 
                   const_iterator first, const_iterator last );
}}
{{dcl | num=3 | since=c++11 |
void splice_after( const_iterator pos, {{{1}}}&amp;&amp; other, 
                   const_iterator first, const_iterator last );
}}
{{dcl end}}

Moves elements from another {{tt|{{{1}}}}} to {{c|*this}}.

No elements are copied. {{tt|pos}} is a valid iterator in {{c|*this}} or is the {{c|before_begin()}} iterator. The behavior is undefined if {{c|get_allocator() !{{=}} other.get_allocator()}}. No iterators or references become invalidated, the iterators to moved elements now refer into {{c|*this}}, not into {{tt|other}}.

1) Moves all elements from {{tt|other}} into {{c|*this}}. The elements are inserted after the element pointed to by {{tt|pos}}. The container {{tt|other}} becomes empty after the operation. The behavior is undefined if {{c|this {{==}} &amp;other}}

2) Moves the element pointed to by the iterator following {{tt|it}} from {{tt|other}} into {{c|*this}}. The element is inserted after the element pointed to by {{tt|pos}}.

3) Moves the elements in the range {{tt|(first, last)}} from {{tt|other}} into {{c|*this}}. The elements are inserted after the element pointed to by {{tt|pos}}. The element pointed-to by {{tt|first}} is not moved. The behavior is undefined if {{tt|pos}} is an iterator in the range {{tt|(first,last)}}.

===Parameters===
{{par begin}}
{{par | pos | element after which the content will be inserted }}
{{par | other | another container to move the content from}}
{{par | it | iterator preceding the iterator to the element to move from {{tt|other}} to {{c|*this}}}}
{{par | first, last | the range of elements to move from {{tt|other}} to {{c|*this}}}}
{{par end}} 

===Return value===
(none)

===Complexity===
1) Linear in the size of {{tt|other}}

2) Constant

3) Linear in {{c|std::distance(first, last)}}

===Example===
{{example
 | Demonstrates the meaning of open interval (first, last) in the third form of splice_after(): the first element of l1 is not moved.
 | code =
#include &lt;iostream&gt;
#include &lt;forward_list&gt;
int main()
{
    std::forward_list&lt;int&gt; l1 = {1,2,3,4,5};
    std::forward_list&lt;int&gt; l2 = {10,11,12};

    l2.splice_after(l2.cbegin(), l1, l1.cbegin(), l1.cend());
    // not equivalent to l2.splice_after(l2.cbegin(), l1);

    for(int n : l1)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    for(int n : l2)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
1
10 2 3 4 5 11 12
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc merge |{{{1|}}}}}
{{dsc inc | cpp/container/dsc remove |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/stack/navbar</title>
    <ns>10</ns>
    <id>1168</id>
    <revision>
      <id>39883</id>
      <parentid>35390</parentid>
      <timestamp>2012-09-28T19:57:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/stack/navbar heading
|content3 = cpp/container/stack/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/stack/navbar content</title>
    <ns>10</ns>
    <id>1169</id>
    <revision>
      <id>52527</id>
      <parentid>35057</parentid>
      <timestamp>2013-06-01T04:48:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="550">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/stack/stack }}
{{nv mem ln | cpp/container/stack/~stack }}
{{nv mem ln | cpp/container/stack/operator{{=}} }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/stack/top }}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/stack/empty}}
{{nv mem ln | cpp/container/stack/size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/stack/push}}
{{nv mem ln | cpp/container/stack/emplace}}
{{nv mem ln | cpp/container/stack/pop}}
{{nv mem ln | cpp/container/stack/swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/stack/navbar heading</title>
    <ns>10</ns>
    <id>1170</id>
    <revision>
      <id>35585</id>
      <parentid>2341</parentid>
      <timestamp>2012-06-15T22:28:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/stack/sidebar heading]] to [[Template:cpp/container/stack/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="43">{{tt|[[cpp/container/stack | std::stack]]}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/stack/title</title>
    <ns>10</ns>
    <id>1171</id>
    <revision>
      <id>2343</id>
      <parentid>2342</parentid>
      <timestamp>2011-06-06T22:53:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=stack::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/swap</title>
    <ns>10</ns>
    <id>1172</id>
    <revision>
      <id>92000</id>
      <parentid>91958</parentid>
      <timestamp>2017-04-01T10:35:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="2485">{{cpp/container/{{{1|}}}/title | swap}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} | until=c++17 |
void swap( {{{1}}}&amp; other );
}}
{{dcl | since=c++17 |
void swap( {{{1}}}&amp; other ) noexcept(/* see below */);
}}
{{dcl end}}

Exchanges the contents of the container with those of {{tt|other}}. Does not invoke any move, copy, or swap operations on individual elements.

{{cpp/container/note iterator invalidation|{{{1|}}}|swap}}

{{#switch:{{{1|}}}
|map | set | multimap | multiset=The {{tt|Pred}} objects must be {{concept|Swappable}}, and they are exchanged using unqualified call to non-member {{tt|swap}}.
|unordered_map | unordered_set | unordered_multimap| unordered_multiset=The {{tt|Hash}} and {{tt|KeyEqual}} objects must be {{concept|Swappable}}, and they are exchanged using unqualified calls to non-member {{tt|swap}}.
}}
{{rev begin}}
{{rev |since=c++11|
If {{c|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_swap::value}} is true, then the allocators are exchanged using an unqualified call to non-member {{tt|swap}}. Otherwise, they are not swapped (and if {{c|1=get_allocator() != other.get_allocator()}}, the behavior is undefined).}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | other | container to exchange the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev|until=c++17|
{{#switch:{{{1|}}}
|map | set | multimap | multiset=Any exception thrown by the swap of the {{tt|Compare}} objects.
|unordered_map | unordered_set | unordered_multimap| unordered_multiset=Any exception thrown by the swap of the {{tt|Hash}} or {{tt|KeyEqual}} objects.
|(none)
}}
}}
{{rev|since=c++17|
{{#switch:{{{1|}}}|deque|forward_list|list=
{{noexcept|std::allocator_traits&lt;Allocator&gt;::is_always_equal::value}}
|vector=
{{noexcept|std::allocator_traits&lt;Allocator&gt;::propagate_on_container_swap::value
{{!!}} std::allocator_traits&lt;Allocator&gt;::is_always_equal::value}}
|set|multiset|map|multimap=
{{noexcept|std::allocator_traits&lt;Allocator&gt;::is_always_equal::value
&amp;&amp; std::is_nothrow_swappable&lt;Compare&gt;::value}}
|unordered_map|unordered_multimap|unordered_set|unordered_multiset=
{{noexcept|std::allocator_traits&lt;Allocator&gt;::is_always_equal::value
&amp;&amp; std::is_nothrow_swappable&lt;Hash&gt;::value
&amp;&amp; std::is_nothrow_swappable&lt;KeyEqual&gt;::value}}
|{{included}}
}}
}}
{{rev end}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc swap2 |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>fjibyxbbielkiys2emtf9pv2yr7fmos</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/swap ad</title>
    <ns>10</ns>
    <id>1173</id>
    <revision>
      <id>92022</id>
      <parentid>91947</parentid>
      <timestamp>2017-04-01T22:59:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge conditional noexcept, adjust pre-C++17 description</comment>
      <text xml:space="preserve" bytes="1394">{{cpp/container/{{{1|}}}/title | swap}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}|c++11}} |
void swap( {{{1}}}&amp; other ) noexcept(/* see below */);
}}
{{dcl end}}

Exchanges the contents of the container adaptor with those of {{tt|other}}. {{#switch:{{{1|}}}
 | stack|queue=Effectively calls {{c|using std::swap; swap(c, other.c);}}
 | priority_queue|=Effectively calls {{c|using std::swap; swap(c, other.c); swap(comp, other.comp);}}
}}

===Parameters===
{{par begin}}
{{par | other | container adaptor to exchange the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev|until=c++17|
In the {{c|noexcept}} expressions below, the identifier {{tt|swap}} is looked up in the same manner as the C++17 {{lc|std::is_nothrow_swappable}} trait.
{{#switch:{{{1|}}}
| stack|queue={{noexcept|noexcept(swap(c, other.c))}}
| priority_queue|={{noexcept|noexcept(swap(c, other.c)) &amp;&amp; noexcept(swap(comp, other.comp))}}
}}
}}
{{rev|since=c++17|
{{#switch:{{{1|}}}
| stack|queue={{noexcept|std::is_nothrow_swappable&lt;Container&gt;::value}}
| priority_queue|={{noexcept|std::is_nothrow_swappable&lt;Container&gt;::value &amp;&amp; std::is_nothrow_swappable&lt;Compare&gt;::value}}
}}
}}
{{rev end}}

===Complexity===
Same as underlying container (typically constant)

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc swap2 |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>thx7lat7ke442g8l5159xeej3xlbtmd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/swap2</title>
    <ns>10</ns>
    <id>1997</id>
    <revision>
      <id>92001</id>
      <parentid>91952</parentid>
      <timestamp>2017-04-01T10:37:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="1321">{{cpp/title | swap&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/container/{{{1|}}}/navbar}}
{{cpp/container/get_types|{{{1|}}}}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} | until=c++17 |
template&lt; {{#var:types}} &gt;
void swap( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs, 
           {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | since=c++17 |
template&lt; {{#var:types}} &gt;
void swap( {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs, 
           {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs ) noexcept(/* see below */);
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{c|std::{{{1}}}}}. Swaps the contents of {{tt|lhs}} and {{tt|rhs}}. Calls {{c|lhs.swap(rhs)}}.
{{#ifeq:{{{1}}}|array|{{rev begin}}{{rev|since=c++17|This function does not participate in overload resolution unless {{tt|N {{==}} 0}} or {{c|std::is_swappable&lt;T&gt;::value}} is true}}{{rev end}}}}
===Parameters===
{{par begin}}
{{par | lhs, rhs | containers whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Complexity===
{{#switch: {{{1}}}
|array=
Linear in size of the container.
|stack|queue|priority_queue=
Same as swapping the underlying container.
|Constant.
}}

===Exceptions===
{{rev begin}}
{{rev|since=c++17|
{{noexcept|noexcept(lhs.swap(rhs))}}
}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc swap |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>clu3kp1nvs4d2ds9910ch7l9ara2hlm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell</title>
    <ns>10</ns>
    <id>1174</id>
    <revision>
      <id>19159</id>
      <parentid>19143</parentid>
      <timestamp>2012-02-27T14:31:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>specify center on the table element</comment>
      <text xml:space="preserve" bytes="62">&lt;span style=&quot;font-size:0.9em; color: #505050;&quot;&gt;{{{1|}}}&lt;/span&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell 17</title>
    <ns>10</ns>
    <id>15716</id>
    <revision>
      <id>88033</id>
      <parentid>88031</parentid>
      <timestamp>2016-10-24T02:30:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>color</comment>
      <text xml:space="preserve" bytes="364">style = &quot;padding: 0;  background: #ffeebc;&quot; | [[ {{{1|cpp}}} | &lt;div style=&quot;padding: 0; margin: 0;&quot; &gt;
{| style=&quot;border-spacing: 0px; border: none; vertical-align: middle; padding: 0; margin: 0; width: 100%; height: 100%;&quot;
|- style=&quot;background: #ffeebc;&quot;
| style=&quot;border: none;&quot; | {{cpp/container/table cell|&lt;tt&gt;{{{2|{{ltt/core|{{{1|&amp;nbsp;}}}}}}}}&lt;/tt&gt;}}
|}
&lt;/div&gt;]]</text>
      <sha1>hpirmnswpn7f0uvlaoio353brn4fp9d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell hn</title>
    <ns>10</ns>
    <id>1175</id>
    <revision>
      <id>2351</id>
      <parentid>2350</parentid>
      <timestamp>2011-06-06T22:53:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="362">style = &quot;padding: 0;  background: #b0d0b0;&quot; | [[ {{{1|cpp}}} | &lt;div style=&quot;padding: 0; margin: 0;&quot; &gt;
{| style=&quot;border-spacing: 0px; border: none; vertical-align: middle; text-align: center; padding: 0; margin: 0; width: 100%; height: 100%;&quot;
|- style=&quot;background: #b0d0b0;&quot;
| style=&quot;border: none;&quot; | &lt;tt&gt;&lt;b&gt;{{{2|{{ltt/core|{{{1|&amp;nbsp;}}}}}}}}&lt;/b&gt;&lt;/tt&gt;
|}
&lt;/div&gt;]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell ho</title>
    <ns>10</ns>
    <id>1176</id>
    <revision>
      <id>2353</id>
      <parentid>2352</parentid>
      <timestamp>2011-06-06T22:53:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="362">style = &quot;padding: 0;  background: #b0b0d0;&quot; | [[ {{{1|cpp}}} | &lt;div style=&quot;padding: 0; margin: 0;&quot; &gt;
{| style=&quot;border-spacing: 0px; border: none; vertical-align: middle; text-align: center; padding: 0; margin: 0; width: 100%; height: 100%;&quot;
|- style=&quot;background: #b0b0d0;&quot;
| style=&quot;border: none;&quot; | &lt;tt&gt;&lt;b&gt;{{{2|{{ltt/core|{{{1|&amp;nbsp;}}}}}}}}&lt;/b&gt;&lt;/tt&gt;
|}
&lt;/div&gt;]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell ln</title>
    <ns>10</ns>
    <id>1177</id>
    <revision>
      <id>2355</id>
      <parentid>2354</parentid>
      <timestamp>2011-06-06T22:53:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="315">style = &quot;padding: 0;  background: #b0d0b0;&quot; | &lt;div style=&quot;padding: 0; margin: 0;&quot; &gt;
{| style=&quot;border-spacing: 0px; border: none; vertical-align: middle; text-align: center; padding: 0; margin: 0; width: 100%; height: 100%;&quot;
|- style=&quot;background: #b0d0b0;&quot;
| style=&quot;border: none;&quot; | &lt;tt&gt;{{{1|&amp;nbsp;}}}&lt;/tt&gt;
|}
&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell lnn</title>
    <ns>10</ns>
    <id>1178</id>
    <revision>
      <id>2357</id>
      <parentid>2356</parentid>
      <timestamp>2011-06-06T22:53:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="386">style = &quot;padding: 0 0 0 0;&quot; | &lt;div style=&quot;padding: 0 0 0 0;&quot; &gt;
{| width=&quot;100%&quot; height=&quot;100%&quot; style=&quot;border-spacing: 0px; vertical-align: middle; text-align: center; padding: 0 0 0 0;&quot;
|- style=&quot;background: #b0b0d0;&quot;
| style=&quot;border: 0; border-bottom: 1px solid #AAAAAA;&quot; | &lt;tt&gt;{{{1|&amp;nbsp;}}}&lt;/tt&gt;
|-  style=&quot;background: #b0b0d0;&quot;
| style=&quot;border: 0;&quot; | &lt;tt&gt;{{{2|&amp;nbsp;}}}&lt;/tt&gt;
|}
&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell lo</title>
    <ns>10</ns>
    <id>1179</id>
    <revision>
      <id>2359</id>
      <parentid>2358</parentid>
      <timestamp>2011-06-06T22:53:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="315">style = &quot;padding: 0;  background: #b0b0d0;&quot; | &lt;div style=&quot;padding: 0; margin: 0;&quot; &gt;
{| style=&quot;border-spacing: 0px; border: none; vertical-align: middle; text-align: center; padding: 0; margin: 0; width: 100%; height: 100%;&quot;
|- style=&quot;background: #b0b0d0;&quot;
| style=&quot;border: none;&quot; | &lt;tt&gt;{{{1|&amp;nbsp;}}}&lt;/tt&gt;
|}
&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell lon</title>
    <ns>10</ns>
    <id>1180</id>
    <revision>
      <id>2361</id>
      <parentid>2360</parentid>
      <timestamp>2011-06-06T22:53:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="346">style = &quot;padding: 0 0 0 0;&quot; |
{| width=&quot;100%&quot; height=&quot;100%&quot; style=&quot;border-spacing: 0px; vertical-align: middle; text-align: center; padding: 0 0 0 0;&quot;
|- style=&quot;background: #b0b0d0;&quot;
| style=&quot;border: 0; border-bottom: 1px solid #AAAAAA;&quot; | &lt;tt&gt;{{{1|&amp;nbsp;}}}&lt;/tt&gt;
|-  style=&quot;background: #b0d0b0;&quot;
| style=&quot;border: 0;&quot; | &lt;tt&gt;{{{2|&amp;nbsp;}}}&lt;/tt&gt;
|}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell n</title>
    <ns>10</ns>
    <id>1181</id>
    <revision>
      <id>19160</id>
      <parentid>2363</parentid>
      <timestamp>2012-02-27T14:33:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>move to the main table</comment>
      <text xml:space="preserve" bytes="350">style = &quot;padding: 0; background: #bcffbc;&quot; | [[ {{{1|cpp}}} | &lt;div  style=&quot;padding: 0; margin: 0;&quot; &gt;
{| style=&quot;border-spacing: 0px; vertical-align: middle; padding: 0; margin: 0; width: 100%; height: 100%;&quot;
|- style=&quot;background: #bcffbc;&quot;
| style=&quot;border: none;&quot; | {{cpp/container/table cell|&lt;tt&gt;{{{2|{{ltt/core|{{{1|&amp;nbsp;}}}}}}}}&lt;/tt&gt;}}
|}
&lt;/div&gt;]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell nn</title>
    <ns>10</ns>
    <id>1182</id>
    <revision>
      <id>19161</id>
      <parentid>2365</parentid>
      <timestamp>2012-02-27T14:34:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>move to the main table</comment>
      <text xml:space="preserve" bytes="443">style = &quot;padding: 0 0 0 0;&quot; | [[ {{{1|cpp}}} | &lt;div style=&quot;padding: 0 0 0 0;&quot; &gt;
{| width=&quot;100%&quot; height=&quot;100%&quot; style=&quot;border-spacing: 0px; vertical-align: middle; padding: 0 0 0 0;&quot;
|- style=&quot;background: #bcffbc;&quot;
| style=&quot;border: 0; border-bottom: 1px solid #AAAAAA;&quot; | {{cpp/container/table cell|&lt;tt&gt;{{{2|&amp;nbsp;}}}&lt;/tt&gt;}}
|-  style=&quot;background: #bcffbc;&quot;
| style=&quot;border: 0;&quot; | {{cpp/container/table cell|&lt;tt&gt;{{{3|&amp;nbsp;}}}&lt;/tt&gt;}}
|}
&lt;/div&gt;]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell o</title>
    <ns>10</ns>
    <id>1183</id>
    <revision>
      <id>19162</id>
      <parentid>2367</parentid>
      <timestamp>2012-02-27T14:34:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>move to the main table</comment>
      <text xml:space="preserve" bytes="364">style = &quot;padding: 0;  background: #bcbcff;&quot; | [[ {{{1|cpp}}} | &lt;div style=&quot;padding: 0; margin: 0;&quot; &gt;
{| style=&quot;border-spacing: 0px; border: none; vertical-align: middle; padding: 0; margin: 0; width: 100%; height: 100%;&quot;
|- style=&quot;background: #bcbcff;&quot;
| style=&quot;border: none;&quot; | {{cpp/container/table cell|&lt;tt&gt;{{{2|{{ltt/core|{{{1|&amp;nbsp;}}}}}}}}&lt;/tt&gt;}}
|}
&lt;/div&gt;]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell on</title>
    <ns>10</ns>
    <id>1184</id>
    <revision>
      <id>19163</id>
      <parentid>2369</parentid>
      <timestamp>2012-02-27T14:34:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>move to the main table</comment>
      <text xml:space="preserve" bytes="443">style = &quot;padding: 0 0 0 0;&quot; | [[ {{{1|cpp}}} | &lt;div style=&quot;padding: 0 0 0 0;&quot; &gt;
{| width=&quot;100%&quot; height=&quot;100%&quot; style=&quot;border-spacing: 0px; vertical-align: middle; padding: 0 0 0 0;&quot;
|- style=&quot;background: #bcbcff;&quot;
| style=&quot;border: 0; border-bottom: 1px solid #AAAAAA;&quot; | {{cpp/container/table cell|&lt;tt&gt;{{{2|&amp;nbsp;}}}&lt;/tt&gt;}}
|-  style=&quot;background: #bcffbc;&quot;
| style=&quot;border: 0;&quot; | {{cpp/container/table cell|&lt;tt&gt;{{{3|&amp;nbsp;}}}&lt;/tt&gt;}}
|}
&lt;/div&gt;]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/table cell oo</title>
    <ns>10</ns>
    <id>1185</id>
    <revision>
      <id>2371</id>
      <parentid>2370</parentid>
      <timestamp>2011-06-06T22:53:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="387">style = &quot;padding: 0 0 0 0;&quot; | [[ {{{1|cpp}}} | &lt;div style=&quot;padding: 0 0 0 0;&quot; &gt;
{| width=&quot;100%&quot; height=&quot;100%&quot; style=&quot;border-spacing: 0px; vertical-align: middle; text-align: center; padding: 0 0 0 0;&quot;
|- style=&quot;background: #bcbcff;&quot;
| style=&quot;border: 0; border-bottom: 1px solid #AAAAAA;&quot; | {{{2|&amp;nbsp;}}}
|-  style=&quot;background: #bcbcff;&quot;
| style=&quot;border: 0;&quot; | {{{3|&amp;nbsp;}}}
|}
&lt;/div&gt;]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/try emplace assoc</title>
    <ns>10</ns>
    <id>13851</id>
    <revision>
      <id>86464</id>
      <parentid>86040</parentid>
      <timestamp>2016-07-01T18:07:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ adjust.</comment>
      <text xml:space="preserve" bytes="3551">{{cpp/container/{{{1|}}}/title | try_emplace}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template &lt;class... Args&gt;
pair&lt;iterator, bool&gt; try_emplace(const key_type&amp; k, Args&amp;&amp;... args);
}}
{{dcl | num=2 |since=c++17 |
template &lt;class... Args&gt;
pair&lt;iterator, bool&gt; try_emplace(key_type&amp;&amp; k, Args&amp;&amp;... args);
}}
{{dcl | num=3 |since=c++17 |
template &lt;class... Args&gt;
iterator try_emplace(const_iterator hint, const key_type&amp; k, Args&amp;&amp;... args);
}}
{{dcl | num=4 |since=c++17 |
template &lt;class... Args&gt;
iterator try_emplace(const_iterator hint, key_type&amp;&amp; k, Args&amp;&amp;... args);
}}
{{dcl end}}

@1@ If a key equivalent to {{tt|k}} already exists in the container, does nothing. Otherwise, behaves like {{rlp|emplace}} except that the element is constructed as {{tt|value_type(std::piecewise_construct, std::forward_as_tuple(k), std::forward_as_tuple(forward&lt;Args&gt;(args)...))}}
@2@ If a key equivalent to {{tt|k}} already exists in the container, does nothing. Otherwise, behaves like {{rlp|emplace}} except that the element is constructed as {{tt|value_type(std::piecewise_construct, std::forward_as_tuple(std::move(k)), std::forward_as_tuple(forward&lt;Args&gt;(args)...))}}
@3@ If a key equivalent to {{tt|k}} already exists in the container, does nothing. Otherwise, behaves like {{rlp|emplace_hint}} except that the element is constructed as {{tt|value_type(std::piecewise_construct, std::forward_as_tuple(k), std::forward_as_tuple(forward&lt;Args&gt;(args)...))}}
@4@ If a key equivalent to {{tt|k}} already exists in the container, does nothing. Otherwise, behaves like {{rlp|emplace_hint}} except that the element is constructed as {{tt|value_type(std::piecewise_construct, std::forward_as_tuple(std::move(k)), std::forward_as_tuple(forward&lt;Args&gt;(args)...))}}

{{cpp/container/note_iterator_invalidation|{{{1|}}}|emplace}}

===Parameters===
{{par begin}}
{{par | k | the key used both to look up and to insert if not found}}
{{par | hint | iterator to the position before which the new element will be inserted}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
@1,2@ Same as for {{rlp|emplace}}
@3,4@ Same as for {{rlp|emplace_hint}}

===Complexity===
@1,2@ Same as for {{rlp|emplace}}
@3,4@ Same as for {{rlp|emplace_hint}}

===Notes===
Unlike {{rlp|insert}} or {{rlp|emplace}}, these functions do not move from rvalue arguments if the insertion does not happen, which makes it easy to manipulate maps whose values are move-only types, such as {{tt|std::{{{1|}}}&lt;std::string, std::unique_ptr&lt;foo&gt;&gt;}}. In addition, {{tt|try_emplace}} treats the key and the arguments to the {{tt|mapped_type}} separately, unlike {{rlp|emplace}}, which requires the arguments to construct a {{tt|value_type}} (that is, a {{tt|std::pair}})

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;string&gt;
{{cpp/container/if ord | {{{1|}}}
| #include &lt;map&gt;
| #include &lt;unordered_map&gt;
}}
int main()
{
    using namespace std::literals;
    std::{{{1|}}}&lt;std::string, std::string&gt; m;
 
    m.try_emplace(&quot;a&quot;, &quot;a&quot;s);
    m.try_emplace(&quot;b&quot;, &quot;abcd&quot;);
    m.try_emplace(&quot;c&quot;, 10, 'c');

    for (const auto &amp;p : m) {
        std::cout &lt;&lt; p.first &lt;&lt; &quot; =&gt; &quot; &lt;&lt; p.second &lt;&lt; '\n';
    }
}
| p={{#switch:{{{1|}}}|unordered_map=true|false}}
| output =
a =&gt; a
b =&gt; abcd
c =&gt; cccccccccc
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |{{{1|}}}}}
{{dsc inc | cpp/container/dsc emplace_hint |{{{1|}}}}}
{{dsc inc | cpp/container/dsc insert |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>t43od7ob644phrubtpjejgw0cmxos7a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unique</title>
    <ns>10</ns>
    <id>1207</id>
    <revision>
      <id>63854</id>
      <parentid>60859</parentid>
      <timestamp>2013-07-29T15:20:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{cpp/std}}</comment>
      <text xml:space="preserve" bytes="1285">{{cpp/container/{{{1|}}}/title | unique}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since={{cpp/std|{{{1|}}}}} |
void unique();
}}
{{dcl | num=2 | since={{cpp/std|{{{1|}}}}} |
template&lt; class BinaryPredicate &gt;
void unique( BinaryPredicate p );

}}
{{dcl end}}

Removes all ''consecutive'' duplicate elements from the container. Only the first element in each group of equal elements is left. The first version uses {{tt|operator{{==}}}} to compare the elements, the second version uses the given binary predicate {{tt|p}}.

===Parameters===
{{par begin}}
{{par pred2 eq | p | p1={{{1}}}&lt;T,Allocator&gt;::const_iterator}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the size of the container

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;{{{1}}}&gt;

int main()
{
  std::{{{1}}}&lt;int&gt; x = {1, 2, 2, 3, 3, 2, 1, 1, 2};

  std::cout &lt;&lt; &quot;contents before:&quot;;
  for (auto val : x)
    std::cout &lt;&lt; ' ' &lt;&lt; val;
  std::cout &lt;&lt; '\n';

  x.unique();
  std::cout &lt;&lt; &quot;contents after unique():&quot;;
  for (auto val : x)
    std::cout &lt;&lt; ' ' &lt;&lt; val;
  std::cout &lt;&lt; '\n';

  return 0;
}
|output=
contents before: 1 2 2 3 3 2 1 1 2
contents after unique(): 1 2 3 2 1 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc unique}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered map/example empty</title>
    <ns>10</ns>
    <id>10027</id>
    <revision>
      <id>69152</id>
      <parentid>47721</parentid>
      <timestamp>2014-03-28T17:06:30Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="582">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::unordered_map&lt;int,int&gt;}} contains any elements:
 | code=
#include &lt;unordered_map&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
 
int main()
{
    std::unordered_map&lt;int, int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.emplace(42, 13);
    numbers.insert(std::make_pair(13317, 123));  
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1>d9vqo4xbpajsvo4s5xacedh55vzs7lv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered map/example operator=</title>
    <ns>10</ns>
    <id>12822</id>
    <revision>
      <id>63229</id>
      <timestamp>2013-07-06T11:55:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1303">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::unordered_map}} to another:
 | code=
#include &lt;unordered_map&gt;
#include &lt;iostream&gt;

void display_sizes(const std::unordered_map&lt;int, int&gt; &amp;nums1,
                   const std::unordered_map&lt;int, int&gt; &amp;nums2,
                   const std::unordered_map&lt;int, int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::unordered_map&lt;int, int&gt; nums1 {{3, 1}, {4, 1}, {5, 9}, 
                                        {6, 1}, {7, 1}, {8, 9}};
    std::unordered_map&lt;int, int&gt; nums2; 
    std::unordered_map&lt;int, int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered map/example size</title>
    <ns>10</ns>
    <id>10050</id>
    <revision>
      <id>52532</id>
      <parentid>47741</parentid>
      <timestamp>2013-06-01T04:48:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="376">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::unordered_map}}:
 | code=
#include &lt;unordered_map&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::unordered_map&lt;int,char&gt; nums {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered map/navbar</title>
    <ns>10</ns>
    <id>1208</id>
    <revision>
      <id>39884</id>
      <parentid>35586</parentid>
      <timestamp>2012-09-28T19:58:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="269">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/unordered_map/navbar heading
|content3 = cpp/container/unordered_map/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered map/navbar content</title>
    <ns>10</ns>
    <id>1209</id>
    <revision>
      <id>86995</id>
      <parentid>74193</parentid>
      <timestamp>2016-07-19T21:29:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>extract,merge</comment>
      <text xml:space="preserve" bytes="2158">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/unordered_map/unordered_map }}
{{nv mem ln | cpp/container/unordered_map/~unordered_map }}
{{nv mem ln | cpp/container/unordered_map/operator{{=}} }}
{{nv mem ln | cpp/container/unordered_map/get_allocator }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/unordered_map/begin | begin | cbegin}}
{{nv mem ln | cpp/container/unordered_map/end | end | cend}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/unordered_map/erase}}
{{nv mem ln | cpp/container/unordered_map/size}}
{{nv mem ln | cpp/container/unordered_map/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/unordered_map/clear}}
{{nv mem ln | cpp/container/unordered_map/insert}}
{{nv mem ln | cpp/container/unordered_map/insert_or_assign | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/unordered_map/emplace}}
{{nv mem ln | cpp/container/unordered_map/emplace_hint}}
{{nv mem ln | cpp/container/unordered_map/try_emplace | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/unordered_map/erase}}
{{nv mem ln | cpp/container/unordered_map/swap}}
{{nv mem ln | cpp/container/unordered_map/extract | notes={{mark c++17}}}}
{{nv mem ln | cpp/container/unordered_map/merge | notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/unordered_map/count}}
{{nv mem ln | cpp/container/unordered_map/find}}
{{nv mem ln | cpp/container/unordered_map/equal_range}}
{{nv h2 | Bucket interface}}
{{nv mem ln | cpp/container/unordered_map/begin2 }}
{{nv mem ln | cpp/container/unordered_map/end2 }}
{{nv mem ln | cpp/container/unordered_map/bucket_count}}
{{nv mem ln | cpp/container/unordered_map/max_bucket_count}}
{{nv mem ln | cpp/container/unordered_map/bucket_size}}
{{nv mem ln | cpp/container/unordered_map/bucket}}
{{nv h2 | Hash policy}}
{{nv mem ln | cpp/container/unordered_map/load_factor}}
{{nv mem ln | cpp/container/unordered_map/max_load_factor}}
{{nv mem ln | cpp/container/unordered_map/rehash}}
{{nv mem ln | cpp/container/unordered_map/reserve}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/unordered_map/hash_function}}
{{nv mem ln | cpp/container/unordered_map/key_eq}}
{{nv end}}</text>
      <sha1>trkyp7dyybqjswc65d42evh03o005k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered map/navbar heading</title>
    <ns>10</ns>
    <id>1210</id>
    <revision>
      <id>35588</id>
      <parentid>2421</parentid>
      <timestamp>2012-06-15T22:28:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/unordered map/sidebar heading]] to [[Template:cpp/container/unordered map/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="56">{{ltt|cpp/container/unordered_map | std::unordered_map}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered map/title</title>
    <ns>10</ns>
    <id>1211</id>
    <revision>
      <id>2423</id>
      <parentid>2422</parentid>
      <timestamp>2011-06-06T22:53:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=unordered_map::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multimap/example empty</title>
    <ns>10</ns>
    <id>10028</id>
    <revision>
      <id>69153</id>
      <parentid>47720</parentid>
      <timestamp>2014-03-28T17:07:17Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <text xml:space="preserve" bytes="590">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::unordered_multimap&lt;int,int&gt;}} contains any elements:
 | code=
#include &lt;unordered_map&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;

int main()
{
    std::unordered_multimap&lt;int, int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.emplace(42, 13);
    numbers.insert(std::make_pair(13317, 123)); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1>3vnz3z7sthcf2eyil4zhcz1fmlhe244</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multimap/example operator=</title>
    <ns>10</ns>
    <id>12821</id>
    <revision>
      <id>63228</id>
      <timestamp>2013-07-06T11:55:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1333">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::unordered_multimap}} to another:
 | code=
#include &lt;unordered_map&gt;
#include &lt;iostream&gt;

void display_sizes(const std::unordered_multimap&lt;int, int&gt; &amp;nums1,
                   const std::unordered_multimap&lt;int, int&gt; &amp;nums2,
                   const std::unordered_multimap&lt;int, int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::unordered_multimap&lt;int, int&gt; nums1 {{3, 1}, {4, 1}, {5, 9}, 
                                   {6, 1}, {7, 1}, {8, 9}};
    std::unordered_multimap&lt;int, int&gt; nums2; 
    std::unordered_multimap&lt;int, int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multimap/example size</title>
    <ns>10</ns>
    <id>10049</id>
    <revision>
      <id>52534</id>
      <parentid>47740</parentid>
      <timestamp>2013-06-01T04:48:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="386">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::unordered_multimap}}:
 | code=
#include &lt;unordered_map&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::unordered_multimap&lt;int,char&gt; nums {{1, 'a'}, {3, 'b'}, {5, 'c'}, {7, 'd'}};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multimap/navbar</title>
    <ns>10</ns>
    <id>1212</id>
    <revision>
      <id>39885</id>
      <parentid>35589</parentid>
      <timestamp>2012-09-28T19:58:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="279">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/unordered_multimap/navbar heading
|content3 = cpp/container/unordered_multimap/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multimap/navbar content</title>
    <ns>10</ns>
    <id>1213</id>
    <revision>
      <id>86992</id>
      <parentid>52535</parentid>
      <timestamp>2016-07-19T21:28:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+extract,merge</comment>
      <text xml:space="preserve" bytes="2161">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/unordered_multimap/unordered_multimap }}
{{nv mem ln | cpp/container/unordered_multimap/~unordered_multimap }}
{{nv mem ln | cpp/container/unordered_multimap/operator{{=}} }}
{{nv mem ln | cpp/container/unordered_multimap/get_allocator }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/unordered_multimap/begin | begin | cbegin}}
{{nv mem ln | cpp/container/unordered_multimap/end | end | cend}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/unordered_multimap/erase}}
{{nv mem ln | cpp/container/unordered_multimap/size}}
{{nv mem ln | cpp/container/unordered_multimap/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/unordered_multimap/clear}}
{{nv mem ln | cpp/container/unordered_multimap/insert}}
{{nv mem ln | cpp/container/unordered_multimap/emplace}}
{{nv mem ln | cpp/container/unordered_multimap/emplace_hint}}
{{nv mem ln | cpp/container/unordered_multimap/erase}}
{{nv mem ln | cpp/container/unordered_multimap/swap}}
{{nv mem ln | cpp/container/unordered_multimap/extract|notes={{mark c++17}}}}
{{nv mem ln | cpp/container/unordered_multimap/merge|notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/unordered_multimap/count}}
{{nv mem ln | cpp/container/unordered_multimap/find}}
{{nv mem ln | cpp/container/unordered_multimap/equal_range}}
{{nv h2 | Bucket interface}}
{{nv mem ln | cpp/container/unordered_multimap/begin2 }}
{{nv mem ln | cpp/container/unordered_multimap/end2 }}
{{nv mem ln | cpp/container/unordered_multimap/bucket_count}}
{{nv mem ln | cpp/container/unordered_multimap/max_bucket_count}}
{{nv mem ln | cpp/container/unordered_multimap/bucket_size}}
{{nv mem ln | cpp/container/unordered_multimap/bucket}}
{{nv h2 | Hash policy}}
{{nv mem ln | cpp/container/unordered_multimap/load_factor}}
{{nv mem ln | cpp/container/unordered_multimap/max_load_factor}}
{{nv mem ln | cpp/container/unordered_multimap/rehash}}
{{nv mem ln | cpp/container/unordered_multimap/reserve}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/unordered_multimap/hash_function}}
{{nv mem ln | cpp/container/unordered_multimap/key_eq}}
{{nv end}}</text>
      <sha1>cl5esqxjk4f0xp9k3krerk0l38knjn2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multimap/navbar heading</title>
    <ns>10</ns>
    <id>1214</id>
    <revision>
      <id>35591</id>
      <parentid>2429</parentid>
      <timestamp>2012-06-15T22:28:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/unordered multimap/sidebar heading]] to [[Template:cpp/container/unordered multimap/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="69">{{tt|[[cpp/container/unordered_multimap | std::unordered_multimap]]}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multimap/title</title>
    <ns>10</ns>
    <id>1215</id>
    <revision>
      <id>2431</id>
      <parentid>2430</parentid>
      <timestamp>2011-06-06T22:53:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=unordered_multimap::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multiset/example empty</title>
    <ns>10</ns>
    <id>10029</id>
    <revision>
      <id>47708</id>
      <timestamp>2013-05-16T19:18:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="537">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::unordered_multiset&lt;int&gt;}} contains any elements:
 | code=
#include &lt;unordered_set&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::unordered_multiset&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.insert(42);
    numbers.insert(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multiset/example operator=</title>
    <ns>10</ns>
    <id>12816</id>
    <revision>
      <id>69154</id>
      <parentid>63223</parentid>
      <timestamp>2014-03-28T17:13:28Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <text xml:space="preserve" bytes="1237">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::unordered_multiset}} to another:
 | code=
#include &lt;unordered_set&gt;
#include &lt;iostream&gt;

void display_sizes(const std::unordered_multiset&lt;int&gt; &amp;nums1,
                   const std::unordered_multiset&lt;int&gt; &amp;nums2,
                   const std::unordered_multiset&lt;int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::unordered_multiset&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::unordered_multiset&lt;int&gt; nums2; 
    std::unordered_multiset&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1>hq4x38h6ltqqs1ppteyyn4bwp6562la</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multiset/example size</title>
    <ns>10</ns>
    <id>10040</id>
    <revision>
      <id>47729</id>
      <timestamp>2013-05-16T20:09:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="357">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{c|std::unordered_multiset&lt;int&gt;}}:
 | code=
#include &lt;unordered_set&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::unordered_multiset&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multiset/navbar</title>
    <ns>10</ns>
    <id>1216</id>
    <revision>
      <id>39886</id>
      <parentid>35592</parentid>
      <timestamp>2012-09-28T19:58:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="279">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/unordered_multiset/navbar heading
|content3 = cpp/container/unordered_multiset/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multiset/navbar content</title>
    <ns>10</ns>
    <id>1217</id>
    <revision>
      <id>86993</id>
      <parentid>52536</parentid>
      <timestamp>2016-07-19T21:28:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+extract,merge</comment>
      <text xml:space="preserve" bytes="2161">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/unordered_multiset/unordered_multiset }}
{{nv mem ln | cpp/container/unordered_multiset/~unordered_multiset }}
{{nv mem ln | cpp/container/unordered_multiset/operator{{=}} }}
{{nv mem ln | cpp/container/unordered_multiset/get_allocator }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/unordered_multiset/begin | begin | cbegin}}
{{nv mem ln | cpp/container/unordered_multiset/end | end | cend}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/unordered_multiset/erase}}
{{nv mem ln | cpp/container/unordered_multiset/size}}
{{nv mem ln | cpp/container/unordered_multiset/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/unordered_multiset/clear}}
{{nv mem ln | cpp/container/unordered_multiset/insert}}
{{nv mem ln | cpp/container/unordered_multiset/emplace}}
{{nv mem ln | cpp/container/unordered_multiset/emplace_hint}}
{{nv mem ln | cpp/container/unordered_multiset/erase}}
{{nv mem ln | cpp/container/unordered_multiset/swap}}
{{nv mem ln | cpp/container/unordered_multiset/extract|notes={{mark c++17}}}}
{{nv mem ln | cpp/container/unordered_multiset/merge|notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/unordered_multiset/count}}
{{nv mem ln | cpp/container/unordered_multiset/find}}
{{nv mem ln | cpp/container/unordered_multiset/equal_range}}
{{nv h2 | Bucket interface}}
{{nv mem ln | cpp/container/unordered_multiset/begin2 }}
{{nv mem ln | cpp/container/unordered_multiset/end2 }}
{{nv mem ln | cpp/container/unordered_multiset/bucket_count}}
{{nv mem ln | cpp/container/unordered_multiset/max_bucket_count}}
{{nv mem ln | cpp/container/unordered_multiset/bucket_size}}
{{nv mem ln | cpp/container/unordered_multiset/bucket}}
{{nv h2 | Hash policy}}
{{nv mem ln | cpp/container/unordered_multiset/load_factor}}
{{nv mem ln | cpp/container/unordered_multiset/max_load_factor}}
{{nv mem ln | cpp/container/unordered_multiset/rehash}}
{{nv mem ln | cpp/container/unordered_multiset/reserve}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/unordered_multiset/hash_function}}
{{nv mem ln | cpp/container/unordered_multiset/key_eq}}
{{nv end}}</text>
      <sha1>16iai9opaypd45onrlwbrlimsrdeb2a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multiset/navbar heading</title>
    <ns>10</ns>
    <id>1218</id>
    <revision>
      <id>35594</id>
      <parentid>2437</parentid>
      <timestamp>2012-06-15T22:29:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/unordered multiset/sidebar heading]] to [[Template:cpp/container/unordered multiset/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="69">{{tt|[[cpp/container/unordered_multiset | std::unordered_multiset]]}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered multiset/title</title>
    <ns>10</ns>
    <id>1219</id>
    <revision>
      <id>2439</id>
      <parentid>2438</parentid>
      <timestamp>2011-06-06T22:53:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=unordered_multiset::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered set/example empty</title>
    <ns>10</ns>
    <id>10030</id>
    <revision>
      <id>47709</id>
      <timestamp>2013-05-16T19:18:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="527">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::unordered_set&lt;int&gt;}} contains any elements:
 | code=
#include &lt;unordered_set&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::unordered_set&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.insert(42);
    numbers.insert(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered set/example operator=</title>
    <ns>10</ns>
    <id>12817</id>
    <revision>
      <id>63222</id>
      <timestamp>2013-07-06T11:50:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;{{example  | The following code uses {{tt|operator=}} to assign one {{c|std::unordered_set}} to another:  | code= #include &lt;unordered_set&gt; #include &lt;iostream&gt;  void display_si...&quot;</comment>
      <text xml:space="preserve" bytes="1202">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::unordered_set}} to another:
 | code=
#include &lt;unordered_set&gt;
#include &lt;iostream&gt;

void display_sizes(const std::unordered_set&lt;int&gt; &amp;nums1,
                   const std::unordered_set&lt;int&gt; &amp;nums2,
                   const std::unordered_set&lt;int&gt; &amp;nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::unordered_set&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::unordered_set&lt;int&gt; nums2; 
    std::unordered_set&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered set/example size</title>
    <ns>10</ns>
    <id>10041</id>
    <revision>
      <id>47730</id>
      <timestamp>2013-05-16T20:09:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="347">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{c|std::unordered_set&lt;int&gt;}}:
 | code=
#include &lt;unordered_set&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::unordered_set&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered set/navbar</title>
    <ns>10</ns>
    <id>1220</id>
    <revision>
      <id>39887</id>
      <parentid>35541</parentid>
      <timestamp>2012-09-28T19:58:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="269">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/unordered_set/navbar heading
|content3 = cpp/container/unordered_set/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered set/navbar content</title>
    <ns>10</ns>
    <id>1221</id>
    <revision>
      <id>87503</id>
      <parentid>86994</parentid>
      <timestamp>2016-08-30T11:06:50Z</timestamp>
      <contributor>
        <ip>110.174.80.43</ip>
      </contributor>
      <text xml:space="preserve" bytes="2013">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/unordered_set/unordered_set }}
{{nv mem ln | cpp/container/unordered_set/~unordered_set }}
{{nv mem ln | cpp/container/unordered_set/operator{{=}} }}
{{nv mem ln | cpp/container/unordered_set/get_allocator }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/unordered_set/begin | begin | cbegin}}
{{nv mem ln | cpp/container/unordered_set/end | end | cend}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/unordered_set/erase}}
{{nv mem ln | cpp/container/unordered_set/size}}
{{nv mem ln | cpp/container/unordered_set/max_size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/unordered_set/clear}}
{{nv mem ln | cpp/container/unordered_set/insert}}
{{nv mem ln | cpp/container/unordered_set/emplace}}
{{nv mem ln | cpp/container/unordered_set/emplace_hint}}
{{nv mem ln | cpp/container/unordered_set/erase}}
{{nv mem ln | cpp/container/unordered_set/swap}}
{{nv mem ln | cpp/container/unordered_set/extract|notes={{mark c++17}}}}
{{nv mem ln | cpp/container/unordered_set/merge|notes={{mark c++17}}}}
{{nv h2 | Lookup}}
{{nv mem ln | cpp/container/unordered_set/count}}
{{nv mem ln | cpp/container/unordered_set/find}}
{{nv mem ln | cpp/container/unordered_set/equal_range}}
{{nv h2 | Bucket interface}}
{{nv mem ln | cpp/container/unordered_set/begin2 | begin(int)}}
{{nv mem ln | cpp/container/unordered_set/end2 | end(int)}}
{{nv mem ln | cpp/container/unordered_set/bucket_count}}
{{nv mem ln | cpp/container/unordered_set/max_bucket_count}}
{{nv mem ln | cpp/container/unordered_set/bucket_size}}
{{nv mem ln | cpp/container/unordered_set/bucket}}
{{nv h2 | Hash policy}}
{{nv mem ln | cpp/container/unordered_set/load_factor}}
{{nv mem ln | cpp/container/unordered_set/max_load_factor}}
{{nv mem ln | cpp/container/unordered_set/rehash}}
{{nv mem ln | cpp/container/unordered_set/reserve}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/container/unordered_set/hash_function}}
{{nv mem ln | cpp/container/unordered_set/key_eq}}
{{nv end}}</text>
      <sha1>sfv6n4595fbxg1l54lat3gbqydwy4ki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered set/navbar heading</title>
    <ns>10</ns>
    <id>1222</id>
    <revision>
      <id>35244</id>
      <parentid>2445</parentid>
      <timestamp>2012-06-15T22:20:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/unordered set/sidebar heading]] to [[Template:cpp/container/unordered set/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="59">{{tt|[[cpp/container/unordered_set | std::unordered_set]]}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/unordered set/title</title>
    <ns>10</ns>
    <id>1223</id>
    <revision>
      <id>2447</id>
      <parentid>2446</parentid>
      <timestamp>2011-06-06T22:53:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=unordered_set::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/upper bound</title>
    <ns>10</ns>
    <id>1224</id>
    <revision>
      <id>74663</id>
      <parentid>65134</parentid>
      <timestamp>2014-12-21T13:10:31Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>LWG 2299 (the type {{c|Compare::is_transparent}} exists =&gt; the qualified-id {{c|Compare::is_transparent}} is valid and denotes a type)</comment>
      <text xml:space="preserve" bytes="1351">{{cpp/container/{{{1|}}}/title | upper_bound}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |num=1|
iterator upper_bound( const Key&amp; key );
}}
{{dcl |num=1|
const_iterator upper_bound( const Key&amp; key ) const;
}}
{{dcl | num=2 | since=c++14 |
template&lt; class K &gt; 
iterator upper_bound( const K&amp; x );
}}
{{dcl | num=2 | since=c++14 |
template&lt; class K &gt; 
const_iterator upper_bound( const K&amp; x ) const;
}}
{{dcl end}}

@1@ Returns an iterator pointing to the first element that is ''greater'' than {{tt|key}}.

@2@ Returns an iterator pointing to the first element that compares ''greater'' to the value {{tt|x}}. {{cpp/enable if |the qualified-id {{c|Compare::is_transparent}} is valid and denotes a type}}. They allow calling this function without constructing an instance of {{tt|Key}}.

===Parameters===
{{par begin}}
{{par | key | key value to compare the elements to}}
{{par | x | alternative value that can be compared to {{tt|Key}} }}
{{par end}} 

===Return value===
Iterator pointing to the first element that is ''greater'' than {{tt|key}}. If no such element is found, past-the-end (see {{lc|end()}}) iterator is returned.

===Complexity===
Logarithmic in the size of the container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc equal_range |{{{1|}}}}}
{{dsc inc | cpp/container/dsc lower_bound |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>ac9gk23t94cupjmdnumm63y1z1uzb8a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/uses allocator</title>
    <ns>10</ns>
    <id>3404</id>
    <revision>
      <id>63588</id>
      <parentid>61344</parentid>
      <timestamp>2013-07-10T01:44:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="729">{{cpp/title | uses_allocator&lt;small&gt;&lt;std::{{{1}}}&gt;&lt;/small&gt;}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |1=
template&lt; class T, class Container, {{#ifeq:{{{1|}}}|priority_queue|class Compare,}}class Alloc &gt;
struct uses_allocator&lt;{{{1}}}&lt;T,{{#ifeq:{{{1|}}}|priority_queue|Compare,}}Container&gt;,Alloc&gt; : 
    std::uses_allocator&lt;Container, Alloc&gt;::type { };
}}
{{dcl end}}

Provides a transparent specialization of the {{lc|std::uses_allocator}} type trait for {{c|std::{{{1}}}}}: the container adaptor uses allocator if and only if the underlying container does. 

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/value comp</title>
    <ns>10</ns>
    <id>1225</id>
    <revision>
      <id>67369</id>
      <parentid>64350</parentid>
      <timestamp>2014-02-06T15:17:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention that key_comp is used to do the key comparison in map's value_comp</comment>
      <text xml:space="preserve" bytes="707">{{cpp/container/{{{1|}}}/title | value_comp}}
{{cpp/container/{{trim|{{{1|}}}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
std::{{{1}}}::value_compare value_comp() const;
}}
{{dcl end}}

{{cpp/container/if map | {{{1|}}}
 |Returns a function object that compares objects of type std::{{{1}}}::value_type (key-value pairs) by using {{lc|key_comp}} to compare the first components of the pairs.
 |Returns the function object that compares the values. It is the same as {{lc|key_comp}}.
}}

===Parameters===
(none)

===Return value===
The value comparison function object.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc key_comp |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>iep4x5k3421k3mb578qb58bvhvxu13u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/value compare</title>
    <ns>10</ns>
    <id>3616</id>
    <revision>
      <id>83713</id>
      <parentid>74209</parentid>
      <timestamp>2016-03-07T14:46:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="1780">{{cpp/container/{{{1|}}}/title | value_compare}}
{{cpp/container/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
class value_compare;
}}
{{dcl end}}

{{tt|std::{{{1}}}::value_compare}} is a function object that compares objects of type {{tt|std::{{{1}}}::value_type}} (key-value pairs) by comparing of the first components of the pairs.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{c|bool}} }}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|value_type}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|value_type}} }}
{{dsc end}}

===Protected member objects===
{{dsc begin}}
{{dsc prot mem obj | nolink=true | {{dsc small|Compare}} comp |  the stored comparator}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/value_compare/dsc constructor | {{{1|}}} }}
{{dsc inc | cpp/container/value_compare/dsc operator() | {{{1|}}} }}
{{dsc end}}

{{member | {{small|std::{{{1|}}}&lt;Key,T,Compare,Alloc&gt;::value_compare::}}value_compare | 2=
{{dcl begin}}
{{dcl |
protected:
value_compare( Compare c );
}}
{{dcl end}}

Initializes the internal instance of the comparator to {{tt|c}}.

===Parameters===
{{par begin}}
{{par | c | comparator to assign}}
{{par end}}
}}

{{member | {{small|std::{{{1|}}}&lt;Key,T,Compare,Alloc&gt;::value_compare::}}operator() | 2=
{{dcl begin}}
{{dcl | 1=
bool operator()( const value_type&amp; lhs, const value_type&amp; rhs ) const;
}}
{{dcl end}}

Compares {{tt|lhs.first}} and {{tt|rhs.first}} by calling the stored comparator.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
{{c|comp(lhs.first, rhs.first)}}.

===Exceptions===
(none)
}}</text>
      <sha1>ovy5khj4508ph3dapqckfdhl51q27ux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/value compare/dsc constructor</title>
    <ns>10</ns>
    <id>6395</id>
    <revision>
      <id>55465</id>
      <parentid>52542</parentid>
      <timestamp>2013-06-01T05:23:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/value compare/dcl list constructor]] to [[Template:cpp/container/value compare/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc prot mem ctor | cpp/container/{{{1|}}}/value_compare | inlinemem=true | constructs a new {{tt|value_compare}} object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/value compare/dsc operator()</title>
    <ns>10</ns>
    <id>5001</id>
    <revision>
      <id>55468</id>
      <parentid>52543</parentid>
      <timestamp>2013-06-01T05:23:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/value compare/dcl list operator()]] to [[Template:cpp/container/value compare/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem fun | cpp/container/{{{1|}}}/value_compare | title=operator() | inlinemem=true | compares two values of type {{tt|value_type}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/dsc emplace</title>
    <ns>10</ns>
    <id>13462</id>
    <revision>
      <id>68715</id>
      <timestamp>2014-03-20T02:27:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/container/vector/emplace | constructs element in-place | notes={{mark since c++14}} }}</text>
      <sha1>jp01ldw9t3m9dk2js5iaj6lhwobrht2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/dsc emplace back</title>
    <ns>10</ns>
    <id>13463</id>
    <revision>
      <id>68716</id>
      <timestamp>2014-03-20T02:27:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun | cpp/container/vector/emplace_back | constructs elements in-place at the end | notes={{mark c++14}} }}</text>
      <sha1>938wu5yqe4nrljkelrrxmv3482yg9j0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/dsc flip</title>
    <ns>10</ns>
    <id>5552</id>
    <revision>
      <id>55470</id>
      <parentid>52545</parentid>
      <timestamp>2013-06-01T05:24:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/vector bool/dcl list flip]] to [[Template:cpp/container/vector bool/dsc flip]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/container/vector_bool/flip | title=flip | flips all the bits}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/dsc hash</title>
    <ns>10</ns>
    <id>9782</id>
    <revision>
      <id>55473</id>
      <parentid>52546</parentid>
      <timestamp>2013-06-01T05:24:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/vector bool/dcl list hash]] to [[Template:cpp/container/vector bool/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="166">{{dsc ptclass | cpp/container/vector_bool/hash | title=std::hash{{dsc small|&lt;std::vector&lt;bool&gt;&gt;}} | hash support for {{c|std::vector&lt;bool&gt;}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/dsc swap</title>
    <ns>10</ns>
    <id>5563</id>
    <revision>
      <id>55479</id>
      <parentid>52547</parentid>
      <timestamp>2013-06-01T05:24:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/vector bool/dcl list swap]] to [[Template:cpp/container/vector bool/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem sfun | cpp/container/vector_bool/swap | title=swap | swaps two {{tt|std::vector&lt;bool&gt;::reference}}s}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/dsc swap2</title>
    <ns>10</ns>
    <id>5560</id>
    <revision>
      <id>63852</id>
      <parentid>60864</parentid>
      <timestamp>2013-07-29T15:19:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="608">{{cpp/title | swap&lt;small&gt;(std::vector&lt;bool&gt;)&lt;/small&gt;}}
{{cpp/container/vector_bool/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class T, class Alloc &gt;
void swap( {{{1}}}&lt;T,Alloc&gt; &amp;lhs, {{{1}}}&lt;T,Alloc&gt; &amp;rhs );
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{c|std::vector&lt;bool&gt;}}. Swaps the contents of {{tt|lhs}} and {{tt|rhs}}. Calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | containers whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc swap |vector}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/navbar</title>
    <ns>10</ns>
    <id>5549</id>
    <revision>
      <id>39889</id>
      <parentid>35599</parentid>
      <timestamp>2012-09-28T19:58:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="265">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/vector_bool/navbar heading
|content3 = cpp/container/vector_bool/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/navbar content</title>
    <ns>10</ns>
    <id>5550</id>
    <revision>
      <id>52549</id>
      <parentid>45465</parentid>
      <timestamp>2013-06-01T04:49:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1730">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/vector/vector }}
{{nv mem ln | cpp/container/vector/~vector }}
{{nv mem ln | cpp/container/vector/operator{{=}} }}
{{nv mem ln | cpp/container/vector/assign }}
{{nv mem ln | cpp/container/vector/get_allocator }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/vector/at }}
{{nv mem ln | cpp/container/vector/operator_at | operator[] }}
{{nv mem ln | cpp/container/vector/front }}
{{nv mem ln | cpp/container/vector/back }}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/vector/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/vector/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/vector/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/vector/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/vector/empty}}
{{nv mem ln | cpp/container/vector/size}}
{{nv mem ln | cpp/container/vector/max_size}}
{{nv mem ln | cpp/container/vector/reserve}}
{{nv mem ln | cpp/container/vector/capacity}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/vector/clear}}
{{nv mem ln | cpp/container/vector/insert}}
{{nv mem ln | cpp/container/vector/erase}}
{{nv mem ln | cpp/container/vector/push_back}}
{{nv mem ln | cpp/container/vector/pop_back}}
{{nv mem ln | cpp/container/vector/resize}}
{{nv mem ln | cpp/container/vector/swap}}
{{nv h2 | Helper classes}}
{{nv ln | cpp/container/vector_bool/hash | std::hash | notes={{mark c++11}}}}
{{nv h2 | std::vector&lt;bool&gt; specific}}
{{nv | {{ltt|cpp/container/vector_bool/flip | vector&lt;bool&gt;::flip}}}}
{{nv | {{ltt|cpp/container/vector_bool/swap | vector&lt;bool&gt;::swap}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/navbar heading</title>
    <ns>10</ns>
    <id>5551</id>
    <revision>
      <id>48103</id>
      <parentid>35601</parentid>
      <timestamp>2013-05-18T18:12:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="46">{{ltt|cpp/container/vector|std::vector&lt;bool&gt;}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/reference/dsc operator bool</title>
    <ns>10</ns>
    <id>9932</id>
    <revision>
      <id>55487</id>
      <parentid>52550</parentid>
      <timestamp>2013-06-01T05:24:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/vector bool/reference/dcl list operator bool]] to [[Template:cpp/container/vector bool/reference/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/container/vector_bool/reference | title=operator bool | inlinemem=true | returns the referenced bit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/reference/title</title>
    <ns>10</ns>
    <id>8555</id>
    <revision>
      <id>31715</id>
      <parentid>31714</parentid>
      <timestamp>2012-06-06T20:41:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>vector-&gt;vector bool</comment>
      <text xml:space="preserve" bytes="128">&lt;onlyinclude&gt;{{cpp/container/vector bool/title | n=reference::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector bool/title</title>
    <ns>10</ns>
    <id>5568</id>
    <revision>
      <id>20509</id>
      <timestamp>2012-03-27T23:43:46Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added title</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=vector&lt;bool&gt;::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/example empty</title>
    <ns>10</ns>
    <id>10031</id>
    <revision>
      <id>47710</id>
      <timestamp>2013-05-16T19:18:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="512">{{example
 | The following code uses {{tt|empty}} to check if a {{c|std::vector&lt;int&gt;}} contains any elements:
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::vector&lt;int&gt; numbers;
    std::cout &lt;&lt; &quot;Initially, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';

    numbers.push_back(42);
    numbers.push_back(13317); 
    std::cout &lt;&lt; &quot;After adding elements, numbers.empty(): &quot; &lt;&lt; numbers.empty() &lt;&lt; '\n';
}
 | output=
Initially, numbers.empty(): 1
After adding elements, numbers.empty(): 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/example operator=</title>
    <ns>10</ns>
    <id>12824</id>
    <revision>
      <id>63231</id>
      <timestamp>2013-07-06T11:58:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1146">{{example
 | The following code uses {{tt|operator=}} to assign one {{c|std::vector}} to another:
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;

void display_sizes(const std::vector&lt;int&gt;&amp; nums1,
                   const std::vector&lt;int&gt;&amp; nums2,
                   const std::vector&lt;int&gt;&amp; nums3)
{
    std::cout &lt;&lt; &quot;nums1: &quot; &lt;&lt; nums1.size() 
              &lt;&lt; &quot; nums2: &quot; &lt;&lt; nums2.size()
              &lt;&lt; &quot; nums3: &quot; &lt;&lt; nums3.size() &lt;&lt; '\n';
}

int main()
{
    std::vector&lt;int&gt; nums1 {3, 1, 4, 6, 5, 9};
    std::vector&lt;int&gt; nums2; 
    std::vector&lt;int&gt; nums3;

    std::cout &lt;&lt; &quot;Initially:\n&quot;;
    display_sizes(nums1, nums2, nums3);

    // copy assignment copies data from nums1 to nums2
    nums2 = nums1;

    std::cout &lt;&lt; &quot;After assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
 
    // move assignment moves data from nums1 to nums3,
    // modifying both nums1 and nums3
    nums3 = std::move(nums1);

    std::cout &lt;&lt; &quot;After move assigment:\n&quot;; 
    display_sizes(nums1, nums2, nums3);
}
 | output=
Initially:
nums1: 6 nums2: 0 nums3: 0
After assigment:
nums1: 6 nums2: 6 nums3: 0
After move assigment:
nums1: 0 nums2: 6 nums3: 6
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/example shrink to fit</title>
    <ns>10</ns>
    <id>9953</id>
    <revision>
      <id>47814</id>
      <parentid>47257</parentid>
      <timestamp>2013-05-16T22:06:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/container/vector/shrink to fit example]] to [[Template:cpp/container/vector/example shrink to fit]]</comment>
      <text xml:space="preserve" bytes="627">{{example
 |
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v;
    std::cout &lt;&lt; &quot;Default-constructed capacity is &quot; &lt;&lt; v.capacity() &lt;&lt; '\n';
    v.resize(100);
    std::cout &lt;&lt; &quot;Capacity of a 100-element vector is &quot; &lt;&lt; v.capacity() &lt;&lt; '\n';
    v.clear();
    std::cout &lt;&lt; &quot;Capacity after clear() is &quot; &lt;&lt; v.capacity() &lt;&lt; '\n';
    v.shrink_to_fit();
    std::cout &lt;&lt; &quot;Capacity after shrink_to_fit() is &quot; &lt;&lt; v.capacity() &lt;&lt; '\n';
}
| output=
Default-constructed capacity is 0
Capacity of a 100-element vector is 100
Capacity after clear() is 100
Capacity after shrink_to_fit() is 0
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/example size</title>
    <ns>10</ns>
    <id>10042</id>
    <revision>
      <id>85086</id>
      <parentid>85085</parentid>
      <timestamp>2016-03-30T11:56:39Z</timestamp>
      <contributor>
        <username>Thomas Huxhorn</username>
        <id>5123</id>
      </contributor>
      <comment>= is not needed. Undo revision 85085 by [[Special:Contributions/199.201.66.0|199.201.66.0]] ([[User talk:199.201.66.0|talk]])</comment>
      <text xml:space="preserve" bytes="326">{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{c|std::vector&lt;int&gt;}}:
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::vector&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}</text>
      <sha1>d3pso8aiu6econ9ce2e705u93260t28</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/navbar</title>
    <ns>10</ns>
    <id>1226</id>
    <revision>
      <id>47781</id>
      <parentid>39888</parentid>
      <timestamp>2013-05-16T20:26:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/container/navbar heading
|content2 = cpp/container/navbar content

|heading3 = cpp/container/vector/navbar heading
|content3 = cpp/container/vector/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/navbar content</title>
    <ns>10</ns>
    <id>1227</id>
    <revision>
      <id>52544</id>
      <parentid>45463</parentid>
      <timestamp>2013-06-01T04:49:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1726">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/container/vector/vector }}
{{nv mem ln | cpp/container/vector/~vector }}
{{nv mem ln | cpp/container/vector/operator{{=}} }}
{{nv mem ln | cpp/container/vector/assign }}
{{nv mem ln | cpp/container/vector/get_allocator }}
{{nv h2 | Element access}}
{{nv mem ln | cpp/container/vector/at }}
{{nv mem ln | cpp/container/vector/operator_at | operator[] }}
{{nv mem ln | cpp/container/vector/front }}
{{nv mem ln | cpp/container/vector/back }}
{{nv mem ln | cpp/container/vector/data|notes={{mark c++11}}}}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/container/vector/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/vector/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/vector/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/container/vector/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/container/vector/empty}}
{{nv mem ln | cpp/container/vector/size}}
{{nv mem ln | cpp/container/vector/max_size}}
{{nv mem ln | cpp/container/vector/reserve}}
{{nv mem ln | cpp/container/vector/capacity}}
{{nv mem ln | cpp/container/vector/shrink_to_fit | notes={{mark c++11}}}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/container/vector/clear}}
{{nv mem ln | cpp/container/vector/insert}}
{{nv mem ln | cpp/container/vector/emplace | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/vector/erase}}
{{nv mem ln | cpp/container/vector/push_back}}
{{nv mem ln | cpp/container/vector/emplace_back | notes={{mark c++11}}}}
{{nv mem ln | cpp/container/vector/pop_back}}
{{nv mem ln | cpp/container/vector/resize}}
{{nv mem ln | cpp/container/vector/swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/navbar heading</title>
    <ns>10</ns>
    <id>1228</id>
    <revision>
      <id>47756</id>
      <parentid>35598</parentid>
      <timestamp>2013-05-16T20:22:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="40">{{ltt|cpp/container/vector|std::vector}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/container/vector/title</title>
    <ns>10</ns>
    <id>1229</id>
    <revision>
      <id>2459</id>
      <parentid>2458</parentid>
      <timestamp>2011-06-06T22:53:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=vector::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/enable if</title>
    <ns>10</ns>
    <id>13827</id>
    <revision>
      <id>91968</id>
      <parentid>75542</parentid>
      <timestamp>2017-03-31T21:05:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>plural support</comment>
      <text xml:space="preserve" bytes="127">{{#ifeq:{{{plural|no}}}|no|This overload only participates|These overloads only participate}} in overload resolution if {{{1}}}</text>
      <sha1>3k0dzhfaf67mmb1g193tnfzq5tqot8p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/bad exception/navbar</title>
    <ns>10</ns>
    <id>8990</id>
    <revision>
      <id>39890</id>
      <parentid>37797</parentid>
      <timestamp>2012-09-28T19:58:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="330">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/bad_exception/navbar heading
|content4 = cpp/error/bad_exception/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/bad exception/navbar content</title>
    <ns>10</ns>
    <id>8992</id>
    <revision>
      <id>52552</id>
      <parentid>37799</parentid>
      <timestamp>2013-06-01T04:49:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="205">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/bad_exception/bad_exception}}
{{nv mem ln | cpp/error/bad_exception/operator{{=}}}}
{{nv mem ln | cpp/error/bad_exception/what}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/bad exception/navbar heading</title>
    <ns>10</ns>
    <id>8991</id>
    <revision>
      <id>60987</id>
      <parentid>37798</parentid>
      <timestamp>2013-06-03T11:42:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="50">{{ltt|cpp/error/bad_exception|std::bad_exception}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/bad exception/title</title>
    <ns>10</ns>
    <id>8993</id>
    <revision>
      <id>37800</id>
      <timestamp>2012-07-18T23:52:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=bad_exception::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/domain error/navbar</title>
    <ns>10</ns>
    <id>2093</id>
    <revision>
      <id>39891</id>
      <parentid>35992</parentid>
      <timestamp>2012-09-28T19:58:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="328">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/domain_error/navbar heading
|content4 = cpp/error/domain_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/domain error/navbar content</title>
    <ns>10</ns>
    <id>2552</id>
    <revision>
      <id>52585</id>
      <parentid>35233</parentid>
      <timestamp>2013-06-01T04:50:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="154">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/domain_error/domain_error}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/domain error/navbar heading</title>
    <ns>10</ns>
    <id>2107</id>
    <revision>
      <id>34865</id>
      <parentid>26312</parentid>
      <timestamp>2012-06-15T22:12:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/domain error/sidebar heading]] to [[Template:cpp/error/domain error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="48">{{ltt|cpp/error/domain_error|std::domain_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc assert</title>
    <ns>10</ns>
    <id>6399</id>
    <revision>
      <id>55492</id>
      <parentid>52553</parentid>
      <timestamp>2013-06-01T05:24:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list assert]] to [[Template:cpp/error/dsc assert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc macro fun | cpp/error/assert | aborts the program if the user-specified condition is not {{c|true}}. May be disabled for release builds}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc bad exception</title>
    <ns>10</ns>
    <id>3508</id>
    <revision>
      <id>88698</id>
      <parentid>55494</parentid>
      <timestamp>2016-12-06T17:54:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>post-c++17 description</comment>
      <text xml:space="preserve" bytes="128">{{dsc class | cpp/error/bad_exception | exception thrown when {{lc|std::current_exception}} fails to copy the exception object}}</text>
      <sha1>solt6vcz2nnptofrzegvq6jjof3q3l8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc current exception</title>
    <ns>10</ns>
    <id>3498</id>
    <revision>
      <id>55496</id>
      <parentid>52555</parentid>
      <timestamp>2013-06-01T05:24:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list current exception]] to [[Template:cpp/error/dsc current exception]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/error/current_exception | captures the current exception in a {{lc|std::exception_ptr}}| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc errc</title>
    <ns>10</ns>
    <id>4783</id>
    <revision>
      <id>55499</id>
      <parentid>52556</parentid>
      <timestamp>2013-06-01T05:24:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list errc]] to [[Template:cpp/error/dsc errc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc class  | cpp/error/errc | the {{lc|std::error_condition}} enumeration listing all standard {{header|cerrno}} macro constants| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc errno</title>
    <ns>10</ns>
    <id>5445</id>
    <revision>
      <id>55501</id>
      <parentid>52557</parentid>
      <timestamp>2013-06-01T05:24:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list errno]] to [[Template:cpp/error/dsc errno]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="157">{{dsc | {{dsc member | cpp/error/errno | errno }} | macro which expands to POSIX-compatible thread-local error number variable&lt;br/&gt;{{mark|macro variable}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc errno macros</title>
    <ns>10</ns>
    <id>5446</id>
    <revision>
      <id>55504</id>
      <parentid>52558</parentid>
      <timestamp>2013-06-01T05:24:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list errno macros]] to [[Template:cpp/error/dsc errno macros]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc macro const | cpp/error/errno_macros | title=E2BIG, EACCES, ..., EXDEV | macros for standard POSIX-compatible error conditions}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc error category</title>
    <ns>10</ns>
    <id>4773</id>
    <revision>
      <id>55506</id>
      <parentid>52559</parentid>
      <timestamp>2013-06-01T05:24:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list error category]] to [[Template:cpp/error/dsc error category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc class  | cpp/error/error_category | base class for error categories | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc error code</title>
    <ns>10</ns>
    <id>4784</id>
    <revision>
      <id>55510</id>
      <parentid>52560</parentid>
      <timestamp>2013-06-01T05:24:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list error code]] to [[Template:cpp/error/dsc error code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc class  | cpp/error/error_code | holds a platform-dependent error code | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc error condition</title>
    <ns>10</ns>
    <id>4780</id>
    <revision>
      <id>55516</id>
      <parentid>52561</parentid>
      <timestamp>2013-06-01T05:24:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list error condition]] to [[Template:cpp/error/dsc error condition]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc class  | cpp/error/error_condition | holds a portable error code| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc exception</title>
    <ns>10</ns>
    <id>3494</id>
    <revision>
      <id>55520</id>
      <parentid>52562</parentid>
      <timestamp>2013-06-01T05:24:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list exception]] to [[Template:cpp/error/dsc exception]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc class | cpp/error/exception | base class for exceptions thrown by the standard library components}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc exception list</title>
    <ns>10</ns>
    <id>14923</id>
    <revision>
      <id>84262</id>
      <parentid>84261</parentid>
      <timestamp>2016-03-17T02:36:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>class</comment>
      <text xml:space="preserve" bytes="157">{{dsc class | cpp/error/exception_list | sequence of {{tt|exception_ptr}} objects, used to communicate errors in parallel algorithms | notes={{mark c++17}}}}</text>
      <sha1>s088nfcu6djz1wnd8el5gcgaajd102e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc exception ptr</title>
    <ns>10</ns>
    <id>3496</id>
    <revision>
      <id>55522</id>
      <parentid>52563</parentid>
      <timestamp>2013-06-01T05:24:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list exception ptr]] to [[Template:cpp/error/dsc exception ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc typedef | cpp/error/exception_ptr | shared pointer type for handling exception objects | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc generic category</title>
    <ns>10</ns>
    <id>4778</id>
    <revision>
      <id>55525</id>
      <parentid>52564</parentid>
      <timestamp>2013-06-01T05:24:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list generic category]] to [[Template:cpp/error/dsc generic category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc fun | cpp/error/generic_category | identifies the generic error category | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc get terminate</title>
    <ns>10</ns>
    <id>3505</id>
    <revision>
      <id>55527</id>
      <parentid>52565</parentid>
      <timestamp>2013-06-01T05:24:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list get terminate]] to [[Template:cpp/error/dsc get terminate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | cpp/error/get_terminate | obtains the current terminate_handler | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc get unexpected</title>
    <ns>10</ns>
    <id>3510</id>
    <revision>
      <id>88694</id>
      <parentid>88692</parentid>
      <timestamp>2016-12-06T17:50:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>lost mark c++11</comment>
      <text xml:space="preserve" bytes="122">{{dsc fun | cpp/error/get_unexpected | notes={{mark c++11}}{{mark until c++17}} | obtains the current unexpected_handler}}</text>
      <sha1>ssoftaqifk3ctmp096na1qd5m6uv6ta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc make exception ptr</title>
    <ns>10</ns>
    <id>3497</id>
    <revision>
      <id>55553</id>
      <parentid>52571</parentid>
      <timestamp>2013-06-01T05:24:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list make exception ptr]] to [[Template:cpp/error/dsc make exception ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc tfun | cpp/error/make_exception_ptr | creates an {{lc|std::exception_ptr}} from an exception object| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc nested exception</title>
    <ns>10</ns>
    <id>3500</id>
    <revision>
      <id>55557</id>
      <parentid>52572</parentid>
      <timestamp>2013-06-01T05:24:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list nested exception]] to [[Template:cpp/error/dsc nested exception]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc class | cpp/error/nested_exception | a mixin type to capture and store current exceptions| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc rethrow exception</title>
    <ns>10</ns>
    <id>3499</id>
    <revision>
      <id>55560</id>
      <parentid>52573</parentid>
      <timestamp>2013-06-01T05:24:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list rethrow exception]] to [[Template:cpp/error/dsc rethrow exception]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | cpp/error/rethrow_exception | throws the exception from an {{lc|std::exception_ptr}}| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc rethrow if nested</title>
    <ns>10</ns>
    <id>3502</id>
    <revision>
      <id>55563</id>
      <parentid>52574</parentid>
      <timestamp>2013-06-01T05:25:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list rethrow if nested]] to [[Template:cpp/error/dsc rethrow if nested]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/error/rethrow_if_nested | throws the exception from a {{lc|std::nested_exception}}| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc set terminate</title>
    <ns>10</ns>
    <id>3506</id>
    <revision>
      <id>55567</id>
      <parentid>52575</parentid>
      <timestamp>2013-06-01T05:25:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list set terminate]] to [[Template:cpp/error/dsc set terminate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc fun | cpp/error/set_terminate | changes the function to be called by {{lc|std::terminate}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc set unexpected</title>
    <ns>10</ns>
    <id>3511</id>
    <revision>
      <id>88711</id>
      <parentid>88693</parentid>
      <timestamp>2016-12-07T05:27:44Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/error/set_unexpected |notes={{mark until c++17}}| changes the function to be called by {{lc|std::unexpected}}}}</text>
      <sha1>enpthka7huii88akj9ks64hw538aygg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc system category</title>
    <ns>10</ns>
    <id>4779</id>
    <revision>
      <id>55576</id>
      <parentid>52577</parentid>
      <timestamp>2013-06-01T05:25:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list system category]] to [[Template:cpp/error/dsc system category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | cpp/error/system_category | identifies the operating system error category | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc system error</title>
    <ns>10</ns>
    <id>4787</id>
    <revision>
      <id>55579</id>
      <parentid>52578</parentid>
      <timestamp>2013-06-01T05:25:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list system error]] to [[Template:cpp/error/dsc system error]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc class  | cpp/error/system_error | exception class used to report conditions that have an error_code| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc terminate</title>
    <ns>10</ns>
    <id>3503</id>
    <revision>
      <id>55581</id>
      <parentid>52579</parentid>
      <timestamp>2013-06-01T05:25:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list terminate]] to [[Template:cpp/error/dsc terminate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc fun | cpp/error/terminate | function called when exception handling fails}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc terminate handler</title>
    <ns>10</ns>
    <id>3504</id>
    <revision>
      <id>55583</id>
      <parentid>52580</parentid>
      <timestamp>2013-06-01T05:25:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list terminate handler]] to [[Template:cpp/error/dsc terminate handler]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc typedef | cpp/error/terminate_handler | the type of the function called by {{lc|std::terminate}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc throw with nested</title>
    <ns>10</ns>
    <id>3501</id>
    <revision>
      <id>55586</id>
      <parentid>52581</parentid>
      <timestamp>2013-06-01T05:25:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/dcl list throw with nested]] to [[Template:cpp/error/dsc throw with nested]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc tfun | cpp/error/throw_with_nested | throws its argument with {{lc|std::nested_exception}} mixed in| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc uncaught exception</title>
    <ns>10</ns>
    <id>3495</id>
    <revision>
      <id>73694</id>
      <parentid>55589</parentid>
      <timestamp>2014-11-13T04:16:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++17 form</comment>
      <text xml:space="preserve" bytes="174">{{dsc fun | cpp/error/uncaught_exception | title=uncaught_exception&lt;br&gt;uncaught_exceptions | checks if exception handling is currently in progress| notes=&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>4q611hv0zpjwtzdn0bj5v2smmmfaz3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc unexpected</title>
    <ns>10</ns>
    <id>3507</id>
    <revision>
      <id>88697</id>
      <parentid>88691</parentid>
      <timestamp>2016-12-06T17:53:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>lost &quot;notes=&quot;</comment>
      <text xml:space="preserve" bytes="130">{{dsc fun | cpp/error/unexpected | notes={{mark until c++17}} | function called when dynamic exception specification is violated}}</text>
      <sha1>5g8flzhe4sqgq4g9yid87r4ibyryliq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/dsc unexpected handler</title>
    <ns>10</ns>
    <id>3509</id>
    <revision>
      <id>88695</id>
      <parentid>80031</parentid>
      <timestamp>2016-12-06T17:51:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0003r5 until c++17</comment>
      <text xml:space="preserve" bytes="137">{{dsc typedef | cpp/error/unexpected_handler | notes={{mark until c++17}} |  the type of the function called by {{lc|std::unexpected}} }}</text>
      <sha1>7ky7q1621h0mtwwrorcitknalxlzgll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/errc/dsc is error condition enum</title>
    <ns>10</ns>
    <id>12624</id>
    <revision>
      <id>61329</id>
      <timestamp>2013-06-05T21:38:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="258">{{dsc tfun | cpp/error/errc/is_error_condition_enum  | title=is_error_condition_enum{{dsc small|&lt;std::errc&gt;}}| notes={{mark c++11}} | extends the type trait {{lc|std::is_error_condition_enum}} to identify the the {{lc|std::errc}} values as error conditions}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/errc/dsc make error code</title>
    <ns>10</ns>
    <id>12633</id>
    <revision>
      <id>61330</id>
      <timestamp>2013-06-05T21:38:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="160">{{dsc fun | cpp/error/errc/make_error_code | title=make_error_code{{dsc small|(std::errc)}} | notes={{mark c++11}} | constructs an {{lc|std::errc}} error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/errc/dsc make error condition</title>
    <ns>10</ns>
    <id>12632</id>
    <revision>
      <id>61331</id>
      <timestamp>2013-06-05T21:38:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="176">{{dsc fun | cpp/error/errc/make_error_condition  | title=make_error_condition{{dsc small|(std::errc)}} | notes={{mark c++11}} | constructs an {{lc|std::errc}} error condition}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/errc/navbar</title>
    <ns>10</ns>
    <id>12634</id>
    <revision>
      <id>78609</id>
      <parentid>61366</parentid>
      <timestamp>2015-05-29T13:41:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo (heading3 two times)</comment>
      <text xml:space="preserve" bytes="312">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/errc/navbar heading
|content4 = cpp/error/errc/navbar content
}}</text>
      <sha1>9f3clmxrrksvrlx5iqkcgrl8mpcesme</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/errc/navbar content</title>
    <ns>10</ns>
    <id>12636</id>
    <revision>
      <id>61370</id>
      <parentid>61369</parentid>
      <timestamp>2013-06-05T22:25:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sb -&gt; nv</comment>
      <text xml:space="preserve" bytes="226">{{nv begin}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/error/errc/make_error_code}}
{{nv ln | cpp/error/errc/make_error_condition}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/error/errc/is_error_condition_enum}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/errc/navbar heading</title>
    <ns>10</ns>
    <id>12635</id>
    <revision>
      <id>61367</id>
      <timestamp>2013-06-05T22:23:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="34">{{ltt|cpp/error/errc | std::errc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc constructor</title>
    <ns>10</ns>
    <id>8910</id>
    <revision>
      <id>55601</id>
      <parentid>52586</parentid>
      <timestamp>2013-06-01T05:25:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list constructor]] to [[Template:cpp/error/error category/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem ctor | cpp/error/error_category/error_category | constructs an {{tt|error_category}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc default error condition</title>
    <ns>10</ns>
    <id>8912</id>
    <revision>
      <id>55608</id>
      <parentid>52587</parentid>
      <timestamp>2013-06-01T05:25:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list default error condition]] to [[Template:cpp/error/error category/dsc default error condition]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem vfun | cpp/error/error_category/default_error_condition | maps {{tt|error_code}} to {{tt|error_condition}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc destructor</title>
    <ns>10</ns>
    <id>8916</id>
    <revision>
      <id>55610</id>
      <parentid>52588</parentid>
      <timestamp>2013-06-01T05:25:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list destructor]] to [[Template:cpp/error/error category/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem vdtor | cpp/error/error_category/~error_category | destructs an {{tt|error_category}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc equivalent</title>
    <ns>10</ns>
    <id>8913</id>
    <revision>
      <id>55612</id>
      <parentid>52589</parentid>
      <timestamp>2013-06-01T05:25:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list equivalent]] to [[Template:cpp/error/error category/dsc equivalent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem vfun | cpp/error/error_category/equivalent | compares {{tt|error_code}} and {{tt|error_condition}} for equivalence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc message</title>
    <ns>10</ns>
    <id>8914</id>
    <revision>
      <id>55615</id>
      <parentid>52590</parentid>
      <timestamp>2013-06-01T05:25:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list message]] to [[Template:cpp/error/error category/dsc message]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem vfun | cpp/error/error_category/message | obtains the explanatory string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc name</title>
    <ns>10</ns>
    <id>8911</id>
    <revision>
      <id>55617</id>
      <parentid>52591</parentid>
      <timestamp>2013-06-01T05:25:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list name]] to [[Template:cpp/error/error category/dsc name]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem vfun | cpp/error/error_category/name | obtains the name of the category}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc operator cmp</title>
    <ns>10</ns>
    <id>8915</id>
    <revision>
      <id>55624</id>
      <parentid>52593</parentid>
      <timestamp>2013-06-01T05:25:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list operator cmp]] to [[Template:cpp/error/error category/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc fun | cpp/error/error_category/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt; | compares two error categories}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/dsc operator=</title>
    <ns>10</ns>
    <id>8917</id>
    <revision>
      <id>55621</id>
      <parentid>52592</parentid>
      <timestamp>2013-06-01T05:25:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error category/dcl list operator=]] to [[Template:cpp/error/error category/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | operator{{=}} | nolink=true | notes={{cmark deleted}} | not copy assignable}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/navbar</title>
    <ns>10</ns>
    <id>4829</id>
    <revision>
      <id>39892</id>
      <parentid>36015</parentid>
      <timestamp>2012-09-28T19:58:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="332">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/error_category/navbar heading
|content4 = cpp/error/error_category/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/navbar content</title>
    <ns>10</ns>
    <id>4831</id>
    <revision>
      <id>52594</id>
      <parentid>37607</parentid>
      <timestamp>2013-06-01T04:50:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="471">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/error/error_category/error_category}}
{{nv mem ln | cpp/error/error_category/~error_category}}
{{nv mem ln | cpp/error/error_category/name}}
{{nv mem ln | cpp/error/error_category/default_error_condition}}
{{nv mem ln | cpp/error/error_category/equivalent}}
{{nv mem ln | cpp/error/error_category/message}}
{{nv mem ln | cpp/error/error_category/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/navbar heading</title>
    <ns>10</ns>
    <id>4830</id>
    <revision>
      <id>60993</id>
      <parentid>35604</parentid>
      <timestamp>2013-06-03T11:45:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="52">{{ltt|cpp/error/error_category|std::error_category}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error category/title</title>
    <ns>10</ns>
    <id>8920</id>
    <revision>
      <id>37598</id>
      <timestamp>2012-07-15T21:35:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=error_category::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc assign</title>
    <ns>10</ns>
    <id>9005</id>
    <revision>
      <id>55629</id>
      <parentid>52595</parentid>
      <timestamp>2013-06-01T05:25:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list assign]] to [[Template:cpp/error/error code/dsc assign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/error/error_code/assign | assigns another error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc category</title>
    <ns>10</ns>
    <id>9008</id>
    <revision>
      <id>55633</id>
      <parentid>52596</parentid>
      <timestamp>2013-06-01T05:25:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list category]] to [[Template:cpp/error/error code/dsc category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem fun | cpp/error/error_code/category | obtains the error_category for this error_code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc clear</title>
    <ns>10</ns>
    <id>9006</id>
    <revision>
      <id>76548</id>
      <parentid>55638</parentid>
      <timestamp>2015-02-20T21:07:23Z</timestamp>
      <contributor>
        <username>Rapptz</username>
        <id>1465</id>
      </contributor>
      <comment>system_category not generic_category</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/error/error_code/clear | sets the error_code to value 0 in system_category }}</text>
      <sha1>dvcfod6uoc273r28gxngrggw8wl630a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc constructor</title>
    <ns>10</ns>
    <id>9003</id>
    <revision>
      <id>55643</id>
      <parentid>52598</parentid>
      <timestamp>2013-06-01T05:25:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list constructor]] to [[Template:cpp/error/error code/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem ctor | cpp/error/error_code/error_code | constructs an error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc default error condition</title>
    <ns>10</ns>
    <id>9009</id>
    <revision>
      <id>55646</id>
      <parentid>52599</parentid>
      <timestamp>2013-06-01T05:25:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list default error condition]] to [[Template:cpp/error/error code/dsc default error condition]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/error/error_code/default_error_condition | obtains the error_condition for this error_code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc hash</title>
    <ns>10</ns>
    <id>4816</id>
    <revision>
      <id>55652</id>
      <parentid>52600</parentid>
      <timestamp>2013-06-01T05:25:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list hash]] to [[Template:cpp/error/error code/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc ptclass | cpp/error/error_code/hash | title=std::hash{{dsc small|&lt;std::error_code&gt;}} | hash support for {{lc|std::error_code}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc is error code enum</title>
    <ns>10</ns>
    <id>4812</id>
    <revision>
      <id>55656</id>
      <parentid>52601</parentid>
      <timestamp>2013-06-01T05:25:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list is error code enum]] to [[Template:cpp/error/error code/dsc is error code enum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc tclass  | cpp/error/error_code/is_error_code_enum | identifies a class as an error_code enumeration| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc message</title>
    <ns>10</ns>
    <id>9010</id>
    <revision>
      <id>55665</id>
      <parentid>52603</parentid>
      <timestamp>2013-06-01T05:26:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list message]] to [[Template:cpp/error/error code/dsc message]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/error/error_code/message | obtains the explanatory string for this error_code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc operator bool</title>
    <ns>10</ns>
    <id>9011</id>
    <revision>
      <id>55675</id>
      <parentid>52605</parentid>
      <timestamp>2013-06-01T05:26:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list operator bool]] to [[Template:cpp/error/error code/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/error/error_code/operator bool | checks if the value is non-zero }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc operator cmp</title>
    <ns>10</ns>
    <id>9012</id>
    <revision>
      <id>55680</id>
      <parentid>52606</parentid>
      <timestamp>2013-06-01T05:26:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list operator cmp]] to [[Template:cpp/error/error code/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/error/error_code/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt; | compares two {{tt|error_code}}s}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc operator ltlt</title>
    <ns>10</ns>
    <id>9013</id>
    <revision>
      <id>72601</id>
      <parentid>55683</parentid>
      <timestamp>2014-09-07T19:19:43Z</timestamp>
      <contributor>
        <username>Roysc</username>
        <id>2387</id>
      </contributor>
      <text xml:space="preserve" bytes="129">{{dsc fun | cpp/error/error_code/operator_ltlt | title=operator&lt;&lt; | outputs the value and the category name to an output stream}}</text>
      <sha1>45ocy9ggqpjuzyt9sb7ljf50fe16oqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc operator=</title>
    <ns>10</ns>
    <id>9004</id>
    <revision>
      <id>55671</id>
      <parentid>52604</parentid>
      <timestamp>2013-06-01T05:26:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list operator=]] to [[Template:cpp/error/error code/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/error/error_code/operator{{=}} | assigns another error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/dsc value</title>
    <ns>10</ns>
    <id>9007</id>
    <revision>
      <id>55685</id>
      <parentid>52608</parentid>
      <timestamp>2013-06-01T05:26:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error code/dcl list value]] to [[Template:cpp/error/error code/dsc value]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/error/error_code/value | obtains the value of the error_code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/navbar</title>
    <ns>10</ns>
    <id>4817</id>
    <revision>
      <id>39893</id>
      <parentid>35975</parentid>
      <timestamp>2012-09-28T19:59:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="325">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/error_code/navbar heading
|content4 = cpp/error/error_code/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/navbar content</title>
    <ns>10</ns>
    <id>4819</id>
    <revision>
      <id>61357</id>
      <parentid>52609</parentid>
      <timestamp>2013-06-05T22:14:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>move make_error_code</comment>
      <text xml:space="preserve" bytes="864">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/error_code/error_code}}
{{nv mem ln | cpp/error/error_code/operator{{=}}}}
{{nv mem ln | cpp/error/error_code/assign}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/error/error_code/clear}}
{{nv h2 | Observers}}
{{nv mem ln | cpp/error/error_code/value}}
{{nv mem ln | cpp/error/error_code/category}}
{{nv mem ln | cpp/error/error_code/default_error_condition}}
{{nv mem ln | cpp/error/error_code/message}}
{{nv mem ln | cpp/error/error_code/operator bool}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/error/error_code/operator_cmp|operator&lt;&lt;br&gt;operator{{==}}&lt;br&gt;operator!{{=}}}}
{{nv ln | cpp/error/error_code/operator_ltlt|operator&lt;&lt;}}
{{nv h1 | Helper classes}}
{{nv ln | cpp/error/error_code/is_error_code_enum}}
{{nv ln | cpp/error/error_code/hash|hash{{dsc small|&lt;std::error_code&gt;}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/navbar heading</title>
    <ns>10</ns>
    <id>4818</id>
    <revision>
      <id>48084</id>
      <parentid>35606</parentid>
      <timestamp>2013-05-18T18:06:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="44">{{ltt|cpp/error/error_code|std::error_code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error code/title</title>
    <ns>10</ns>
    <id>8558</id>
    <revision>
      <id>31718</id>
      <timestamp>2012-06-06T20:42:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=error_code::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc assign</title>
    <ns>10</ns>
    <id>9621</id>
    <revision>
      <id>55688</id>
      <parentid>52610</parentid>
      <timestamp>2013-06-01T05:26:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list assign]] to [[Template:cpp/error/error condition/dsc assign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/error/error_condition/assign | replaces the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc category</title>
    <ns>10</ns>
    <id>9624</id>
    <revision>
      <id>55696</id>
      <parentid>52611</parentid>
      <timestamp>2013-06-01T05:26:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list category]] to [[Template:cpp/error/error condition/dsc category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/error/error_condition/category | obtains the {{tt|error_category}} for this {{tt|error_condition}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc clear</title>
    <ns>10</ns>
    <id>9622</id>
    <revision>
      <id>55705</id>
      <parentid>52612</parentid>
      <timestamp>2013-06-01T05:26:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list clear]] to [[Template:cpp/error/error condition/dsc clear]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem fun | cpp/error/error_condition/clear | sets the error_condition to value 0 in generic_category }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc constructor</title>
    <ns>10</ns>
    <id>9619</id>
    <revision>
      <id>55712</id>
      <parentid>52613</parentid>
      <timestamp>2013-06-01T05:26:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list constructor]] to [[Template:cpp/error/error condition/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem ctor | cpp/error/error_condition/error_condition | constructs an {{tt|error_condition}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc hash</title>
    <ns>10</ns>
    <id>15727</id>
    <revision>
      <id>88235</id>
      <timestamp>2016-11-14T22:34:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="173">{{dsc ptclass | cpp/error/error_condition/hash | title=std::hash{{dsc small|&lt;std::error_condition&gt;}} | hash support for {{lc|std::error_condition}} | notes={{mark c++17}} }}</text>
      <sha1>0riz6687u82t51dww5r1tj3j3t2iqvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc is error condition enum</title>
    <ns>10</ns>
    <id>4810</id>
    <revision>
      <id>55719</id>
      <parentid>52614</parentid>
      <timestamp>2013-06-01T05:26:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list is error condition enum]] to [[Template:cpp/error/error condition/dsc is error condition enum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc tclass  | cpp/error/error_condition/is_error_condition_enum | identifies an enumeration as an {{lc|std::error_condition}}| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc message</title>
    <ns>10</ns>
    <id>9625</id>
    <revision>
      <id>55731</id>
      <parentid>52616</parentid>
      <timestamp>2013-06-01T05:26:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list message]] to [[Template:cpp/error/error condition/dsc message]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/error/error_condition/message | obtains the explanatory string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc operator bool</title>
    <ns>10</ns>
    <id>9626</id>
    <revision>
      <id>55744</id>
      <parentid>52618</parentid>
      <timestamp>2013-06-01T05:26:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list operator bool]] to [[Template:cpp/error/error condition/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/error/error_condition/operator bool | checks if the value is non-zero }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc operator cmp</title>
    <ns>10</ns>
    <id>9627</id>
    <revision>
      <id>55750</id>
      <parentid>52619</parentid>
      <timestamp>2013-06-01T05:27:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list operator cmp]] to [[Template:cpp/error/error condition/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | cpp/error/error_condition/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt; | compares error_conditions and error_codes}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc operator=</title>
    <ns>10</ns>
    <id>9620</id>
    <revision>
      <id>55737</id>
      <parentid>52617</parentid>
      <timestamp>2013-06-01T05:26:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list operator=]] to [[Template:cpp/error/error condition/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/error/error_condition/operator{{=}} | replaces the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/dsc value</title>
    <ns>10</ns>
    <id>9623</id>
    <revision>
      <id>55756</id>
      <parentid>52620</parentid>
      <timestamp>2013-06-01T05:27:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/error condition/dcl list value]] to [[Template:cpp/error/error condition/dsc value]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/error/error_condition/value | obtains the value of the error_condition}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/navbar</title>
    <ns>10</ns>
    <id>4807</id>
    <revision>
      <id>39894</id>
      <parentid>36020</parentid>
      <timestamp>2012-09-28T19:59:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="334">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/error_condition/navbar heading
|content4 = cpp/error/error_condition/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/navbar content</title>
    <ns>10</ns>
    <id>4814</id>
    <revision>
      <id>88238</id>
      <parentid>61354</parentid>
      <timestamp>2016-11-14T22:36:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="765">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/error/error_condition/error_condition}}
{{nv mem ln | cpp/error/error_condition/operator{{=}}}}
{{nv mem ln | cpp/error/error_condition/assign}}
{{nv mem ln | cpp/error/error_condition/clear}}
{{nv mem ln | cpp/error/error_condition/value}}
{{nv mem ln | cpp/error/error_condition/category}}
{{nv mem ln | cpp/error/error_condition/message}}
{{nv mem ln | cpp/error/error_condition/operator bool}}
{{nv h2 | Non-member functions}}
{{nv ln | cpp/error/error_condition/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;}}
{{nv h2 | Helper classes}}
{{nv ln | cpp/error/error_condition/is_error_condition_enum}}
{{nv ln | cpp/error/error_condition/hash|hash{{dsc small|&lt;std::error_condition&gt;}}}}
{{nv end}}</text>
      <sha1>417auu10aa3hk2kmng6v9rynp8ffcto</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/navbar heading</title>
    <ns>10</ns>
    <id>4813</id>
    <revision>
      <id>48083</id>
      <parentid>34199</parentid>
      <timestamp>2013-05-18T18:06:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="54">{{ltt|cpp/error/error_condition|std::error_condition}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/error condition/title</title>
    <ns>10</ns>
    <id>8581</id>
    <revision>
      <id>31742</id>
      <timestamp>2012-06-06T20:46:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=error_condition::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/example errno</title>
    <ns>10</ns>
    <id>5562</id>
    <revision>
      <id>76275</id>
      <parentid>76274</parentid>
      <timestamp>2015-02-13T20:20:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p=true since coliru doesn't have it</comment>
      <text xml:space="preserve" bytes="550">{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;clocale&gt;

int main()
{
    double not_a_number = std::log(-1.0);
    if (errno == EDOM) {
        std::cout &lt;&lt; &quot;log(-1) failed: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
        std::setlocale(LC_MESSAGES, &quot;de_DE.utf8&quot;);
        std::cout &lt;&lt; &quot;Or, in German, &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    }
}
|p=true
 | output=
log(-1) failed: Numerical argument out of domain
Or, in German, Das numerische Argument ist ausserhalb des Definitionsbereiches
}}</text>
      <sha1>63ttcrbu7s0fd9ah8y47yjhp677lxlv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/example exception ptr</title>
    <ns>10</ns>
    <id>5607</id>
    <revision>
      <id>69691</id>
      <parentid>26077</parentid>
      <timestamp>2014-04-20T03:16:07Z</timestamp>
      <contributor>
        <ip>84.52.101.196</ip>
      </contributor>
      <comment>converts to bool</comment>
      <text xml:space="preserve" bytes="718">{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;exception&gt;
#include &lt;stdexcept&gt;

void handle_eptr(std::exception_ptr eptr) // passing by value is ok
{
    try {
        if (eptr) {
            std::rethrow_exception(eptr);
        }
    } catch(const std::exception&amp; e) {
        std::cout &lt;&lt; &quot;Caught exception \&quot;&quot; &lt;&lt; e.what() &lt;&lt; &quot;\&quot;\n&quot;;
    }
}

int main()
{
    std::exception_ptr eptr;
    try {
        std::string().at(1); // this generates an std::out_of_range
    } catch(...) {
        eptr = std::current_exception(); // capture
    }
    handle_eptr(eptr);
} // destructor for std::out_of_range called here, when the eptr is destructed
 | output=
Caught exception &quot;basic_string::at&quot;
}}</text>
      <sha1>r4dvzigp7hwq663blpktw3artpuyma7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/example nested exception</title>
    <ns>10</ns>
    <id>5553</id>
    <revision>
      <id>26079</id>
      <parentid>23438</parentid>
      <timestamp>2012-04-29T08:29:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/exception/example nested exception]] to [[Template:cpp/error/example nested exception]]: merge cpp/error/exception path to cpp/error</comment>
      <text xml:space="preserve" bytes="1466">{{example
 | Demonstrates construction and recursion through a nested exception object
 | code=
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;
#include &lt;exception&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

// prints the explanatory string of an exception. If the exception is nested,
// recurses to print the explanatory of the exception it holds
void print_exception(const std::exception&amp; e, int level =  0)
{
    std::cerr &lt;&lt; std::string(level, ' ') &lt;&lt; &quot;exception: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    try {
        std::rethrow_if_nested(e);
    } catch(const std::exception&amp; e) {
        print_exception(e, level+1);
    } catch(...) {}
}

// sample function that catches an exception and wraps it in a nested exception
void open_file(const std::string&amp; s)
{
    try {
        std::ifstream file(s);
        file.exceptions(std::ios_base::failbit);
    } catch(...) {
        std::throw_with_nested( std::runtime_error(&quot;Couldn't open &quot; + s) );
    }
}

// sample function that catches an exception and wraps it in a nested exception
void run()
{
    try {
        open_file(&quot;nonexistent.file&quot;);
    } catch(...) {
        std::throw_with_nested( std::runtime_error(&quot;run() failed&quot;) );
    }
}

// runs the sample function above and prints the caught exception
int main()
{
    try {
        run();
    } catch(const std::exception&amp; e) {
        print_exception(e);
    }
}
 | output=
exception: run() failed
 exception: Couldn't open nonexistent.file
  exception: basic_ios::clear
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception list/dsc begin</title>
    <ns>10</ns>
    <id>15182</id>
    <revision>
      <id>84775</id>
      <timestamp>2016-03-22T13:47:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun| cpp/error/exception list/begin | returns an iterator to the beginning of the list}}</text>
      <sha1>4b4d05zqgkfpua7v07dg0ujzu36wa5a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception list/dsc end</title>
    <ns>10</ns>
    <id>15181</id>
    <revision>
      <id>84774</id>
      <timestamp>2016-03-22T13:47:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun| cpp/error/exception list/end  | returns an iterator to the end of the list}}</text>
      <sha1>g7zbmrbz9640hya62je3cczqvvwsbpf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception list/dsc size</title>
    <ns>10</ns>
    <id>15183</id>
    <revision>
      <id>84776</id>
      <timestamp>2016-03-22T13:47:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun| cpp/error/exception list/size | returns the number of exceptions in the list}}</text>
      <sha1>a2zhphrbwtje9b3pshc7d3frg7pva7x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception list/navbar</title>
    <ns>10</ns>
    <id>15174</id>
    <revision>
      <id>84764</id>
      <timestamp>2016-03-22T13:39:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="332">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/exception list/navbar heading
|content4 = cpp/error/exception list/navbar content
}}</text>
      <sha1>ie448y58mevewrudbgwxxgzi97wwbma</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception list/navbar content</title>
    <ns>10</ns>
    <id>15176</id>
    <revision>
      <id>84782</id>
      <parentid>84767</parentid>
      <timestamp>2016-03-22T13:50:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="239">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/exception_list/begin}}
{{nv mem ln | cpp/error/exception_list/end}}
{{nv mem ln | cpp/error/exception_list/size}}
{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1>lc73fsc7v5bslrxeybh59wuk2y5cndy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception list/navbar heading</title>
    <ns>10</ns>
    <id>15175</id>
    <revision>
      <id>84765</id>
      <timestamp>2016-03-22T13:40:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="55">{{ltt| cpp/error/exception_list | std::exception_list}}</text>
      <sha1>7txos0tzxuxwkya7g9sbx76frax59ss</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception list/title</title>
    <ns>10</ns>
    <id>15180</id>
    <revision>
      <id>84773</id>
      <timestamp>2016-03-22T13:44:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=exception_list::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>oygx8bma455b83xtt45t9k2jqj4x4az</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/constructor</title>
    <ns>10</ns>
    <id>4496</id>
    <revision>
      <id>91964</id>
      <parentid>88792</parentid>
      <timestamp>2017-03-31T20:22:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>This is not retroactive even though done via an issue, doesn't need a marker.</comment>
      <text xml:space="preserve" bytes="758">{{member | {{small|std::{{{1}}}::}}{{{1}}} | 2=
{{dcl begin}}
{{dcl | num=1 |
explicit {{{1}}}( const std::string&amp; what_arg );
}}
{{dcl | num=2 | since=c++11 |
explicit {{{1}}}( const char* what_arg );
}}
{{dcl end}}

Constructs the exception object with {{tt|what_arg}} as explanatory string that can be accessed through {{lc|what()}}.

Because copying {{tt|std::exception}} is not permitted to throw exceptions, this message is typically stored internally as a separately-allocated reference-counted string. This is also why there is no constructor taking {{tt|std::string&amp;&amp;}}: it would have to copy the content anyway.

===Parameters===
{{par begin}}
{{par | what_arg | explanatory string}}
{{par end}}

===Exceptions===
May throw {{lc|std::bad_alloc}}
}}</text>
      <sha1>n85ykdizu9qoua1q45guyal0kqtoycn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/dsc constructor</title>
    <ns>10</ns>
    <id>2116</id>
    <revision>
      <id>55763</id>
      <parentid>52623</parentid>
      <timestamp>2013-06-01T05:27:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/exception/dcl list constructor]] to [[Template:cpp/error/exception/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem ctor | cpp/error/{{{1|/}}} | inlinemem=true | constructs the exception object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/dsc destructor</title>
    <ns>10</ns>
    <id>2074</id>
    <revision>
      <id>55770</id>
      <parentid>52624</parentid>
      <timestamp>2013-06-01T05:27:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/exception/dcl list destructor]] to [[Template:cpp/error/exception/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem vdtor | cpp/error/exception/~exception | destructs the exception object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/dsc operator=</title>
    <ns>10</ns>
    <id>4518</id>
    <revision>
      <id>55774</id>
      <parentid>52625</parentid>
      <timestamp>2013-06-01T05:27:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/exception/dcl list operator=]] to [[Template:cpp/error/exception/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/error/exception/operator{{=}} | copies exception object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/dsc what</title>
    <ns>10</ns>
    <id>2075</id>
    <revision>
      <id>55777</id>
      <parentid>52626</parentid>
      <timestamp>2013-06-01T05:27:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/exception/dcl list what]] to [[Template:cpp/error/exception/dsc what]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem vfun | cpp/error/exception/what | returns an explanatory string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/inherit</title>
    <ns>10</ns>
    <id>2076</id>
    <revision>
      <id>60865</id>
      <parentid>52628</parentid>
      <timestamp>2013-06-01T11:59:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="210">{{inherited | [[cpp/error/exception | {{small|std::}}exception]] |
===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc destructor}}
{{dsc inc | cpp/error/exception/dsc what}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/inherit sidebar</title>
    <ns>10</ns>
    <id>4760</id>
    <revision>
      <id>52629</id>
      <parentid>48095</parentid>
      <timestamp>2013-06-01T04:50:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="157">{{nv h2 | Inherited from {{ltt|cpp/error/exception|std::exception}}}}
{{nv mem ln | cpp/error/exception/~exception}}
{{nv mem ln | cpp/error/exception/what}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/navbar</title>
    <ns>10</ns>
    <id>2078</id>
    <revision>
      <id>39895</id>
      <parentid>36021</parentid>
      <timestamp>2012-09-28T19:59:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="322">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/exception/navbar heading
|content4 = cpp/error/exception/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/navbar content</title>
    <ns>10</ns>
    <id>2559</id>
    <revision>
      <id>52630</id>
      <parentid>35610</parentid>
      <timestamp>2013-06-01T04:50:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="236">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/exception/exception}}
{{nv mem ln | cpp/error/exception/~exception}}
{{nv mem ln | cpp/error/exception/operator{{=}}}}
{{nv mem ln | cpp/error/exception/what}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/navbar heading</title>
    <ns>10</ns>
    <id>2079</id>
    <revision>
      <id>35611</id>
      <parentid>26321</parentid>
      <timestamp>2012-06-15T22:29:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/exception/sidebar heading]] to [[Template:cpp/error/exception/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="45">{{ltt| cpp/error/exception | std::exception}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/exception/title</title>
    <ns>10</ns>
    <id>4515</id>
    <revision>
      <id>26097</id>
      <parentid>15998</parentid>
      <timestamp>2012-04-29T08:29:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/exception/exception/title]] to [[Template:cpp/error/exception/title]]: merge cpp/error/exception path to cpp/error</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=exception::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/invalid argument/navbar</title>
    <ns>10</ns>
    <id>2092</id>
    <revision>
      <id>39896</id>
      <parentid>36022</parentid>
      <timestamp>2012-09-28T20:01:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="336">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/invalid_argument/navbar heading
|content4 = cpp/error/invalid_argument/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/invalid argument/navbar content</title>
    <ns>10</ns>
    <id>2551</id>
    <revision>
      <id>52631</id>
      <parentid>35615</parentid>
      <timestamp>2013-06-01T04:50:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="162">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/invalid_argument/invalid_argument}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/invalid argument/navbar heading</title>
    <ns>10</ns>
    <id>2100</id>
    <revision>
      <id>35617</id>
      <parentid>26316</parentid>
      <timestamp>2012-06-15T22:29:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/invalid argument/sidebar heading]] to [[Template:cpp/error/invalid argument/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="56">{{ltt|cpp/error/invalid_argument|std::invalid_argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/length error/navbar</title>
    <ns>10</ns>
    <id>2098</id>
    <revision>
      <id>39898</id>
      <parentid>36023</parentid>
      <timestamp>2012-09-28T20:09:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="329">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content 

|heading4 = cpp/error/length_error/navbar heading
|content4 = cpp/error/length_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/length error/navbar content</title>
    <ns>10</ns>
    <id>2553</id>
    <revision>
      <id>52632</id>
      <parentid>35618</parentid>
      <timestamp>2013-06-01T04:50:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="154">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/length_error/length_error}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/length error/navbar heading</title>
    <ns>10</ns>
    <id>2106</id>
    <revision>
      <id>35619</id>
      <parentid>26326</parentid>
      <timestamp>2012-06-15T22:29:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/length error/sidebar heading]] to [[Template:cpp/error/length error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="48">{{ltt|cpp/error/length_error|std::length_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/logic error/navbar</title>
    <ns>10</ns>
    <id>2090</id>
    <revision>
      <id>39899</id>
      <parentid>36011</parentid>
      <timestamp>2012-09-28T20:09:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="326">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/logic_error/navbar heading
|content4 = cpp/error/logic_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/logic error/navbar content</title>
    <ns>10</ns>
    <id>2550</id>
    <revision>
      <id>52633</id>
      <parentid>35621</parentid>
      <timestamp>2013-06-01T04:50:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="152">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/logic_error/logic_error}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/logic error/navbar heading</title>
    <ns>10</ns>
    <id>2099</id>
    <revision>
      <id>35622</id>
      <parentid>26329</parentid>
      <timestamp>2012-06-15T22:29:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/logic error/sidebar heading]] to [[Template:cpp/error/logic error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="46">{{ltt|cpp/error/logic_error|std::logic_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/navbar</title>
    <ns>10</ns>
    <id>2072</id>
    <revision>
      <id>61365</id>
      <parentid>39900</parentid>
      <timestamp>2013-06-05T22:23:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="227">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/navbar content</title>
    <ns>10</ns>
    <id>3493</id>
    <revision>
      <id>88690</id>
      <parentid>86161</parentid>
      <timestamp>2016-12-06T17:46:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0003r5 (until c++17 for (get_|set_) unexpected (_handler)</comment>
      <text xml:space="preserve" bytes="2203">{{nv begin}}
{{nv col begin}}
{{nv h2 | Exception handling}}
{{nv ln | cpp/error/exception }}
{{nv ln | cpp/error/uncaught_exception|uncaught_exception|uncaught_exceptions|notes=&lt;br&gt;{{mark c++17}}}}
{{nv ln | cpp/error/exception_ptr |notes={{mark c++11}}}}
{{nv ln | cpp/error/make_exception_ptr |notes={{mark c++11}}}}
{{nv ln | cpp/error/current_exception |notes={{mark c++11}}}}
{{nv ln | cpp/error/rethrow_exception |notes={{mark c++11}}}}
{{nv ln | cpp/error/nested_exception |notes={{mark c++11}}}}
{{nv ln | cpp/error/throw_with_nested |notes={{mark c++11}}}}
{{nv ln | cpp/error/rethrow_if_nested |notes={{mark c++11}}}}

{{nv h2 | Exception handling failures}}
{{nv ln | cpp/error/terminate}}
{{nv ln | cpp/error/terminate_handler}}
{{nv ln | cpp/error/get_terminate | notes={{mark c++11}}}}
{{nv ln | cpp/error/set_terminate}}
{{nv ln | cpp/error/bad_exception}}
{{nv ln | cpp/error/unexpected|notes={{mark until c++17}}}}
{{nv ln | cpp/error/unexpected_handler|notes={{mark until c++17}}}}
{{nv ln | cpp/error/get_unexpected|notes={{mark c++11}}{{mark until c++17}}}}
{{nv ln | cpp/error/set_unexpected|notes={{mark until c++17}}}}

{{nv col next}}
{{nv h2 | Exception categories}}
{{nv ln | cpp/error/logic_error}}
{{nv ln | cpp/error/invalid_argument}}
{{nv ln | cpp/error/domain_error}}
{{nv ln | cpp/error/length_error}}
{{nv ln | cpp/error/out_of_range}}
{{nv ln | cpp/error/runtime_error}}
{{nv ln | cpp/error/range_error}}
{{nv ln | cpp/error/overflow_error}}
{{nv ln | cpp/error/underflow_error}}
{{nv ln | cpp/error/tx_exception|notes={{mark since tm ts}}}}

{{nv h2 | Error codes}}
{{nv | [[cpp/error/errno_macros | Error codes]] }}
{{nv ln | cpp/error/errno}}

{{nv h2 | Assertions}}
{{nv ln | cpp/error/assert}}

{{nv h2 | system_error facility}}
{{nv ln | cpp/error/error_category | notes={{mark c++11}}}}
{{nv ln | cpp/error/generic_category | notes={{mark c++11}}}}
{{nv ln | cpp/error/system_category | notes={{mark c++11}}}}
{{nv ln | cpp/error/error_condition | notes={{mark c++11}}}}
{{nv ln | cpp/error/errc | notes={{mark c++11}}}}
{{nv ln | cpp/error/error_code | notes={{mark c++11}}}}
{{nv ln | cpp/error/system_error | notes={{mark c++11}}}}
{{nv col end}}
{{nv end}}</text>
      <sha1>3cifbcqv7khbbbb3fbcdt31k6hqt1o9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/navbar heading</title>
    <ns>10</ns>
    <id>2073</id>
    <revision>
      <id>35633</id>
      <parentid>4439</parentid>
      <timestamp>2012-06-15T22:29:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/sidebar heading]] to [[Template:cpp/error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="30">[[cpp/error | Error handling]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/nested exception/navbar</title>
    <ns>10</ns>
    <id>9890</id>
    <revision>
      <id>46530</id>
      <timestamp>2013-03-23T00:22:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="336">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/nested_exception/navbar heading
|content4 = cpp/error/nested_exception/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/nested exception/navbar content</title>
    <ns>10</ns>
    <id>9892</id>
    <revision>
      <id>61286</id>
      <parentid>52635</parentid>
      <timestamp>2013-06-05T14:18:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync</comment>
      <text xml:space="preserve" bytes="342">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/nested_exception/nested_exception}}
{{nv mem ln | cpp/error/nested_exception/~nested_exception}}
{{nv mem ln | cpp/error/nested_exception/operator{{=}}}}
{{nv mem ln | cpp/error/nested_exception/rethrow_nested}}
{{nv mem ln | cpp/error/nested_exception/nested_ptr}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/nested exception/navbar heading</title>
    <ns>10</ns>
    <id>9891</id>
    <revision>
      <id>46531</id>
      <timestamp>2013-03-23T00:23:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="59">{{ltt| cpp/error/nested_exception | std::nested_exception}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/nested exception/title</title>
    <ns>10</ns>
    <id>9889</id>
    <revision>
      <id>46529</id>
      <timestamp>2013-03-23T00:22:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=nested_exception::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/out of range/navbar</title>
    <ns>10</ns>
    <id>2094</id>
    <revision>
      <id>39901</id>
      <parentid>36009</parentid>
      <timestamp>2012-09-28T20:09:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="328">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/out_of_range/navbar heading
|content4 = cpp/error/out_of_range/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/out of range/navbar content</title>
    <ns>10</ns>
    <id>2554</id>
    <revision>
      <id>52636</id>
      <parentid>35625</parentid>
      <timestamp>2013-06-01T04:50:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="154">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/out_of_range/out_of_range}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/out of range/navbar heading</title>
    <ns>10</ns>
    <id>2105</id>
    <revision>
      <id>35626</id>
      <parentid>26332</parentid>
      <timestamp>2012-06-15T22:29:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/out of range/sidebar heading]] to [[Template:cpp/error/out of range/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="48">{{ltt|cpp/error/out_of_range|std::out_of_range}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/overflow error/navbar</title>
    <ns>10</ns>
    <id>2096</id>
    <revision>
      <id>39902</id>
      <parentid>36008</parentid>
      <timestamp>2012-09-28T20:09:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="332">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/overflow_error/navbar heading
|content4 = cpp/error/overflow_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/overflow error/navbar content</title>
    <ns>10</ns>
    <id>2557</id>
    <revision>
      <id>52637</id>
      <parentid>34831</parentid>
      <timestamp>2013-06-01T04:50:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="158">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/overflow_error/overflow_error}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/overflow error/navbar heading</title>
    <ns>10</ns>
    <id>2102</id>
    <revision>
      <id>33481</id>
      <parentid>26335</parentid>
      <timestamp>2012-06-15T20:19:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/overflow error/sidebar heading]] to [[Template:cpp/error/overflow error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="52">{{ltt|cpp/error/overflow_error|std::overflow_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/range error/navbar</title>
    <ns>10</ns>
    <id>2095</id>
    <revision>
      <id>39903</id>
      <parentid>35949</parentid>
      <timestamp>2012-09-28T20:09:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="326">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/range_error/navbar heading
|content4 = cpp/error/range_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/range error/navbar content</title>
    <ns>10</ns>
    <id>2556</id>
    <revision>
      <id>52638</id>
      <parentid>34954</parentid>
      <timestamp>2013-06-01T04:51:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="152">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/range_error/range_error}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/range error/navbar heading</title>
    <ns>10</ns>
    <id>2103</id>
    <revision>
      <id>35628</id>
      <parentid>26338</parentid>
      <timestamp>2012-06-15T22:29:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/range error/sidebar heading]] to [[Template:cpp/error/range error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="46">{{ltt|cpp/error/range_error|std::range_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/runtime error/inherit</title>
    <ns>10</ns>
    <id>12786</id>
    <revision>
      <id>62099</id>
      <timestamp>2013-06-22T02:04:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="148">{{inherited | [[cpp/error/runtime_error | {{small|std::}}runtime_error]] |
&lt;!-- nothing special, it's only here to show the inheritance chain --&gt;
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/runtime error/navbar</title>
    <ns>10</ns>
    <id>2091</id>
    <revision>
      <id>39904</id>
      <parentid>36007</parentid>
      <timestamp>2012-09-28T20:09:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="330">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/runtime_error/navbar heading
|content4 = cpp/error/runtime_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/runtime error/navbar content</title>
    <ns>10</ns>
    <id>2555</id>
    <revision>
      <id>52639</id>
      <parentid>35630</parentid>
      <timestamp>2013-06-01T04:51:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="156">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/runtime_error/runtime_error}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/runtime error/navbar heading</title>
    <ns>10</ns>
    <id>2104</id>
    <revision>
      <id>35631</id>
      <parentid>26341</parentid>
      <timestamp>2012-06-15T22:29:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/runtime error/sidebar heading]] to [[Template:cpp/error/runtime error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="50">{{ltt|cpp/error/runtime_error|std::runtime_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/dsc code</title>
    <ns>10</ns>
    <id>4776</id>
    <revision>
      <id>55784</id>
      <parentid>52640</parentid>
      <timestamp>2013-06-01T05:27:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/system error/dcl list code]] to [[Template:cpp/error/system error/dsc code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/error/system_error/code | returns error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/dsc constructor</title>
    <ns>10</ns>
    <id>8973</id>
    <revision>
      <id>55790</id>
      <parentid>52641</parentid>
      <timestamp>2013-06-01T05:27:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/system error/dcl list constructor]] to [[Template:cpp/error/system error/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem ctor | cpp/error/system_error/system_error | constructs the {{tt|system_error}} object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/dsc what</title>
    <ns>10</ns>
    <id>4775</id>
    <revision>
      <id>55794</id>
      <parentid>52642</parentid>
      <timestamp>2013-06-01T05:27:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/system error/dcl list what]] to [[Template:cpp/error/system error/dsc what]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem vfun | cpp/error/system_error/what | returns explanatory string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/inherit</title>
    <ns>10</ns>
    <id>4777</id>
    <revision>
      <id>62098</id>
      <parentid>60866</parentid>
      <timestamp>2013-06-22T02:04:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>consistency</comment>
      <text xml:space="preserve" bytes="216">{{inherited | [[cpp/error/system_error | {{small|std::}}system_error]] |
===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/system_error/dsc code}}
{{dsc inc | cpp/error/system_error/dsc what}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/navbar</title>
    <ns>10</ns>
    <id>5448</id>
    <revision>
      <id>39905</id>
      <parentid>36006</parentid>
      <timestamp>2012-09-28T20:09:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="328">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/system_error/navbar heading
|content4 = cpp/error/system_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/navbar content</title>
    <ns>10</ns>
    <id>5450</id>
    <revision>
      <id>52644</id>
      <parentid>35635</parentid>
      <timestamp>2013-06-01T04:51:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="192">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/error/system_error/system_error}}
{{nv mem ln | cpp/error/system_error/code}}
{{nv mem ln | cpp/error/system_error/what}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/navbar heading</title>
    <ns>10</ns>
    <id>5449</id>
    <revision>
      <id>48102</id>
      <parentid>35636</parentid>
      <timestamp>2013-05-18T18:12:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="48">{{ltt|cpp/error/system_error|std::system_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/system error/title</title>
    <ns>10</ns>
    <id>5003</id>
    <revision>
      <id>26202</id>
      <parentid>18074</parentid>
      <timestamp>2012-04-29T08:36:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/system error/system error/title]] to [[Template:cpp/error/system error/title]]: Merge cpp/error/system_error path to cpp/error</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=system_error::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/underflow error/navbar</title>
    <ns>10</ns>
    <id>2097</id>
    <revision>
      <id>39906</id>
      <parentid>36005</parentid>
      <timestamp>2012-09-28T20:09:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="334">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/error/navbar heading
|content3 = cpp/error/navbar content

|heading4 = cpp/error/underflow_error/navbar heading
|content4 = cpp/error/underflow_error/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/underflow error/navbar content</title>
    <ns>10</ns>
    <id>2558</id>
    <revision>
      <id>52645</id>
      <parentid>35638</parentid>
      <timestamp>2013-06-01T04:51:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="160">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/error/underflow_error/underflow_error}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/error/underflow error/navbar heading</title>
    <ns>10</ns>
    <id>2101</id>
    <revision>
      <id>35347</id>
      <parentid>26346</parentid>
      <timestamp>2012-06-15T22:23:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/error/underflow error/sidebar heading]] to [[Template:cpp/error/underflow error/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="54">{{ltt|cpp/error/underflow_error|std::underflow_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc any cast</title>
    <ns>10</ns>
    <id>13648</id>
    <revision>
      <id>71488</id>
      <parentid>71457</parentid>
      <timestamp>2014-06-12T00:22:30Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Update description to match draft doc.</comment>
      <text xml:space="preserve" bytes="88">{{dsc tfun | cpp/experimental/any/any_cast | type-safe access to the contained object }}</text>
      <sha1>4qkfqk15pq6d5grlh4rwkxkztcfreuw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc bad any cast</title>
    <ns>10</ns>
    <id>14655</id>
    <revision>
      <id>82343</id>
      <timestamp>2015-12-14T14:16:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="170">{{dsc class | cpp/experimental/any/bad_any_cast | exception thrown by the value-returning forms of {{tt|any_cast}} on a type mismatch | notes={{mark since libfund_ts}} }}</text>
      <sha1>fi7edj2u15msytmhtw6vqbybt9gw04p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc clear</title>
    <ns>10</ns>
    <id>13668</id>
    <revision>
      <id>71494</id>
      <timestamp>2014-06-12T00:46:26Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/experimental/any/clear | destroys contained object}}</text>
      <sha1>2gf4dpow2wvv4118lfuttpyw7yw92w4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc constructor</title>
    <ns>10</ns>
    <id>13650</id>
    <revision>
      <id>71417</id>
      <timestamp>2014-06-11T01:26:18Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem ctor | cpp/experimental/any/any | constructs an {{tt|any}} object}}</text>
      <sha1>03krhfh78yeca1uahqqg1ueua0uiz2j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc destructor</title>
    <ns>10</ns>
    <id>14654</id>
    <revision>
      <id>82340</id>
      <timestamp>2015-12-14T14:12:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem dtor | cpp/experimental/any/~any | destroys an {{tt|any}} object}}</text>
      <sha1>1dnz1zxvn490pvcdcy8674h6d92r1ea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc empty</title>
    <ns>10</ns>
    <id>13652</id>
    <revision>
      <id>71419</id>
      <timestamp>2014-06-11T01:28:24Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/experimental/any/empty | checks if object holds a value }}</text>
      <sha1>ihbomfakak4fje026o7tpw57vfd2fgl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc operator=</title>
    <ns>10</ns>
    <id>13651</id>
    <revision>
      <id>71418</id>
      <timestamp>2014-06-11T01:27:16Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/experimental/any/operator{{=}} | assigns an {{tt|any}} object }}</text>
      <sha1>eejfoiwn5cd0iznc3juibqtsnv4ovyo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc swap</title>
    <ns>10</ns>
    <id>13647</id>
    <revision>
      <id>71415</id>
      <parentid>71410</parentid>
      <timestamp>2014-06-11T01:22:03Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Fix description.</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/experimental/any/swap | swaps two {{tt|any}} objects}}</text>
      <sha1>on8ck1hb8zobpz4bb634h2dk1652z6x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc swap2</title>
    <ns>10</ns>
    <id>13649</id>
    <revision>
      <id>71520</id>
      <parentid>71414</parentid>
      <timestamp>2014-06-12T08:27:15Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Fix namespace &amp; function declaration.</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | cpp/experimental/any/swap2 | title=swap | swaps two {{tt|any}} instances }}</text>
      <sha1>d6ra4cky7uozb2z9tw5xeu02bjj0kpu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/dsc type</title>
    <ns>10</ns>
    <id>13653</id>
    <revision>
      <id>71420</id>
      <timestamp>2014-06-11T01:29:10Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/experimental/any/type | returns the {{tt|typeid}} of the contained value }}</text>
      <sha1>473s1n3omvyh3pdl5p8ei7mb13nmryt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/navbar</title>
    <ns>10</ns>
    <id>13654</id>
    <revision>
      <id>76761</id>
      <parentid>71421</parentid>
      <timestamp>2015-03-01T03:56:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reorg</comment>
      <text xml:space="preserve" bytes="375">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content
|heading4 = cpp/experimental/any/navbar heading
|content4 = cpp/experimental/any/navbar content
}}</text>
      <sha1>5sdsdwp24sas30qdww9ivtj1r9heuqf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/navbar content</title>
    <ns>10</ns>
    <id>13655</id>
    <revision>
      <id>71497</id>
      <parentid>71422</parentid>
      <timestamp>2014-06-12T00:49:10Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add clear function.</comment>
      <text xml:space="preserve" bytes="521">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/experimental/any/any}}
{{nv mem ln | cpp/experimental/any/operator{{=}}}}

{{nv h2 | Modifers}}
{{nv mem ln | cpp/experimental/any/clear}}
{{nv mem ln | cpp/experimental/any/swap}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/experimental/any/empty}}
{{nv mem ln | cpp/experimental/any/type}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/experimental/any/swap2 | swap{{dsc small|(std::experimental::any)}} }}
{{nv ln | cpp/experimental/any/any_cast }}
{{nv end}}</text>
      <sha1>ifj1vp8bm8fqskaacabdtoidu8spebk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/navbar heading</title>
    <ns>10</ns>
    <id>13656</id>
    <revision>
      <id>71423</id>
      <timestamp>2014-06-11T01:36:22Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="51">{{ltt|cpp/experimental/any|std::experimental::any}}</text>
      <sha1>og67p143q7v0l3hs3oqw2cmcl3wmq0m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/any/title</title>
    <ns>10</ns>
    <id>13658</id>
    <revision>
      <id>71449</id>
      <timestamp>2014-06-11T05:31:19Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="114">&lt;onlyinclude&gt;{{cpp/title | n=experimental::any::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>hfhrb57ytknr82iogc7pxp08ym7a9h8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/atomic remarks</title>
    <ns>10</ns>
    <id>15472</id>
    <revision>
      <id>85567</id>
      <parentid>85564</parentid>
      <timestamp>2016-04-25T20:45:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="587">{{#ifeq:{{{readonly|no}}}|yes|All associated {{ltt|cpp/memory/shared_ptr/use_count|use_count}} increments are guaranteed to be performed as part of the atomic operation.|All changes to the {{tt|atomic_shared_ptr}} object itself, and all associated {{ltt|cpp/memory/shared_ptr/use_count|use_count}} increments, are guaranteed to be performed atomically. Associated {{tt|use_count}} decrements take place after the atomic operation, but are not required to be part of it. Any associated destruction or deallocation operations take place after the atomic operation and are not part of it.}}</text>
      <sha1>0ssxmtflbf54frnsymv7aixu5swdgj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc compare exchange</title>
    <ns>10</ns>
    <id>15384</id>
    <revision>
      <id>85345</id>
      <timestamp>2016-04-20T21:11:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="266">{{dsc mem fun  | cpp/experimental/atomic_shared_ptr/compare_exchange | title=compare_exchange_weak&lt;br&gt;compare_exchange_strong | atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not }}</text>
      <sha1>n77nlkcxiesrm4jwj3adcrbme0obwnu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc constructor</title>
    <ns>10</ns>
    <id>15385</id>
    <revision>
      <id>85354</id>
      <timestamp>2016-04-20T21:16:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem ctor | cpp/experimental/atomic_shared_ptr/atomic_shared_ptr | constructs an {{tt|atomic_shared_ptr}} object }}</text>
      <sha1>koh6zcgc3eug0sa6l1i52gy16og9yi5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc exchange</title>
    <ns>10</ns>
    <id>15391</id>
    <revision>
      <id>85362</id>
      <timestamp>2016-04-20T21:17:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="169">{{dsc mem fun | cpp/experimental/atomic_shared_ptr/exchange | mem={{{mem|}}} | atomically replaces the value of the atomic object and obtains the value held previously}}</text>
      <sha1>j6di0bzzv0ukx9x4hn898s3n8in5i9s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc is lock free</title>
    <ns>10</ns>
    <id>15387</id>
    <revision>
      <id>85356</id>
      <timestamp>2016-04-20T21:16:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun  | cpp/experimental/atomic_shared_ptr/is_lock_free | checks if the {{tt|atomic_shared_ptr}} object is lock-free}}</text>
      <sha1>c0zfmel793e1bstf832g3l1bkbtnxgs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc load</title>
    <ns>10</ns>
    <id>15389</id>
    <revision>
      <id>85358</id>
      <timestamp>2016-04-20T21:17:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/experimental/atomic_shared_ptr/load | mem={{{mem|}}} | atomically obtains the value of the atomic object }}</text>
      <sha1>7c3q92utaszrg55s5uw6cn1ej03opuy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc operator shared ptr</title>
    <ns>10</ns>
    <id>15390</id>
    <revision>
      <id>85361</id>
      <parentid>85360</parentid>
      <timestamp>2016-04-20T21:17:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="140">{{dsc mem fun  | cpp/experimental/atomic_shared_ptr/operator shared_ptr|title=operator shared_ptr&lt;T&gt;| loads a value from an atomic object }}</text>
      <sha1>fvz1h3h5m36kxvsns54xiiq0v78lfu0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc operator=</title>
    <ns>10</ns>
    <id>15386</id>
    <revision>
      <id>85355</id>
      <timestamp>2016-04-20T21:16:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem fun  | cpp/experimental/atomic_shared_ptr/operator{{=}} | stores a value into an {{tt|atomic_shared_ptr}} object}}</text>
      <sha1>ndsmibv3xgkoii3tgu45v2pte5i2f3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/dsc store</title>
    <ns>10</ns>
    <id>15388</id>
    <revision>
      <id>85377</id>
      <parentid>85357</parentid>
      <timestamp>2016-04-20T21:25:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="156">{{dsc mem fun | cpp/experimental/atomic_shared_ptr/store | mem={{{mem|}}} | atomically replaces the value of the atomic object with a non-atomic argument }}</text>
      <sha1>itljunx4eoxp8qlae2uiv0mxagg82y8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic shared ptr/title</title>
    <ns>10</ns>
    <id>15464</id>
    <revision>
      <id>85517</id>
      <timestamp>2016-04-22T22:07:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="96">{{cpp/title | n=experimental::atomic_shared_ptr::{{trim|}} | {{{1|}}}  | {{{2|}}}  | {{{3|}}} }}</text>
      <sha1>mnaq8ac1r71yekanen91yw58caq7c1s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/atomic remarks</title>
    <ns>10</ns>
    <id>15479</id>
    <revision>
      <id>85583</id>
      <parentid>85582</parentid>
      <timestamp>2016-04-25T21:21:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="581">{{#ifeq:{{{readonly|no}}}|yes|All associated {{ltt|cpp/memory/weak_ptr/use_count|use_count}} increments are guaranteed to be performed as part of the atomic operation.|All changes to the {{tt|atomic_weak_ptr}} object itself, and all associated {{ltt|cpp/memory/weak_ptr/use_count|use_count}} increments, are guaranteed to be performed atomically. Associated {{tt|use_count}} decrements take place after the atomic operation, but are not required to be part of it. Any associated destruction or deallocation operations take place after the atomic operation and are not part of it.}}</text>
      <sha1>h8ljhxpqsb4cfcojeryk05bysckqvr5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc compare exchange</title>
    <ns>10</ns>
    <id>15400</id>
    <revision>
      <id>85371</id>
      <timestamp>2016-04-20T21:24:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="264">{{dsc mem fun  | cpp/experimental/atomic_weak_ptr/compare_exchange | title=compare_exchange_weak&lt;br&gt;compare_exchange_strong | atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not }}</text>
      <sha1>riyma7jxke92hcffq2udwz6rfqbbqu8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc constructor</title>
    <ns>10</ns>
    <id>15407</id>
    <revision>
      <id>85380</id>
      <timestamp>2016-04-20T21:25:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem ctor | cpp/experimental/atomic_weak_ptr/atomic_weak_ptr | constructs an {{tt|atomic_weak_ptr}} object }}</text>
      <sha1>jbx6cs0ja9bvevri5juw6d33r2lqup3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc exchange</title>
    <ns>10</ns>
    <id>15401</id>
    <revision>
      <id>85372</id>
      <timestamp>2016-04-20T21:24:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="157">{{dsc mem fun | cpp/experimental/atomic_weak_ptr/exchange | mem= | atomically replaces the value of the atomic object and obtains the value held previously}}</text>
      <sha1>qtng89itwfxpa37dfcidseaizbhgaj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc is lock free</title>
    <ns>10</ns>
    <id>15405</id>
    <revision>
      <id>85378</id>
      <timestamp>2016-04-20T21:25:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun  | cpp/experimental/atomic_weak_ptr/is_lock_free | checks if the {{tt|atomic_weak_ptr}} object is lock-free}}</text>
      <sha1>p0b0fkboo2y7gp3w38746cr2p0tyt9o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc load</title>
    <ns>10</ns>
    <id>15402</id>
    <revision>
      <id>85373</id>
      <timestamp>2016-04-20T21:24:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/experimental/atomic_weak_ptr/load | mem= | atomically obtains the value of the atomic object }}</text>
      <sha1>ocz7c8gmpr7lbfemvqyiouzz8zyn0b2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc operator weak ptr</title>
    <ns>10</ns>
    <id>15403</id>
    <revision>
      <id>85374</id>
      <timestamp>2016-04-20T21:24:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun  | cpp/experimental/atomic_weak_ptr/operator weak_ptr|title=operator weak_ptr&lt;T&gt;| loads a value from an atomic object }}</text>
      <sha1>ig4rk1yfyhkg7gsol83b8dgvspoqcnd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc operator=</title>
    <ns>10</ns>
    <id>15406</id>
    <revision>
      <id>85379</id>
      <timestamp>2016-04-20T21:25:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun  | cpp/experimental/atomic_weak_ptr/operator{{=}} | stores a value into an {{tt|atomic_weak_ptr}} object}}</text>
      <sha1>9olsxy1p4im8gz33vrdjq6klcm9ghyy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/dsc store</title>
    <ns>10</ns>
    <id>15404</id>
    <revision>
      <id>85376</id>
      <parentid>85375</parentid>
      <timestamp>2016-04-20T21:25:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="144">{{dsc mem fun | cpp/experimental/atomic_weak_ptr/store | mem= | atomically replaces the value of the atomic object with a non-atomic argument }}</text>
      <sha1>kdx76e537xgrde6plholjix578qh4v9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/atomic weak ptr/title</title>
    <ns>10</ns>
    <id>15478</id>
    <revision>
      <id>85581</id>
      <timestamp>2016-04-25T21:20:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{cpp/title | n=experimental::atomic_weak_ptr::{{trim|}} | {{{1|}}}  | {{{2|}}}  | {{{3|}}} }}</text>
      <sha1>in6wmhw63uthtrn2nx9kwfmoyvhmrv0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/barrier/dsc arrive and drop</title>
    <ns>10</ns>
    <id>15416</id>
    <revision>
      <id>85392</id>
      <parentid>85391</parentid>
      <timestamp>2016-04-20T21:41:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="165">{{dsc mem fun | cpp/experimental/barrier/arrive_and_drop | arrive at the synchronization point and remove the current thread from the set of participating threads }}</text>
      <sha1>9ryl19cya0pbh68sktdobo1b8v1cspt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/barrier/dsc arrive and wait</title>
    <ns>10</ns>
    <id>15415</id>
    <revision>
      <id>85390</id>
      <timestamp>2016-04-20T21:40:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/experimental/barrier/arrive_and_wait | arrive at the synchronization point and block }}</text>
      <sha1>jttzjfmsw6x0c6vi4aa1cc4s8svonrj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/barrier/dsc constructor</title>
    <ns>10</ns>
    <id>15412</id>
    <revision>
      <id>85387</id>
      <timestamp>2016-04-20T21:39:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem ctor | cpp/experimental/barrier/barrier | constructs a {{tt|barrier}} }}</text>
      <sha1>qok9t7nvtfw5kid1ydt25fpvx6tqzqt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/barrier/dsc destructor</title>
    <ns>10</ns>
    <id>15413</id>
    <revision>
      <id>85388</id>
      <timestamp>2016-04-20T21:39:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem dtor | cpp/experimental/barrier/~barrier | destroys the barrier }}</text>
      <sha1>ndf1q5gg57usn4m99ydp8sz8erq5tb6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/barrier/dsc operator=</title>
    <ns>10</ns>
    <id>15414</id>
    <revision>
      <id>85389</id>
      <timestamp>2016-04-20T21:39:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}</text>
      <sha1>77x2gksrw7nfpw4adu5pydi8kdymkor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/barrier/title</title>
    <ns>10</ns>
    <id>15431</id>
    <revision>
      <id>85419</id>
      <parentid>85418</parentid>
      <timestamp>2016-04-21T18:29:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="86">{{cpp/title | n=experimental::barrier::{{trim|}} | {{{1|}}}  | {{{2|}}}  | {{{3|}}} }}</text>
      <sha1>0oocilrx11av66x8112t8vyshrq5ggf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/basic string view</title>
    <ns>10</ns>
    <id>13587</id>
    <revision>
      <id>71280</id>
      <timestamp>2014-06-09T03:54:20Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem ctor | cpp/experimental/basic_string_view/basic_string_view | constructs a {{tt| basic_string_view}} }}</text>
      <sha1>arc5jvk2n4nq11klcvu0nc0aco5ryfd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc at</title>
    <ns>10</ns>
    <id>13594</id>
    <revision>
      <id>71293</id>
      <timestamp>2014-06-09T04:25:33Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/experimental/basic string view/at | access specified character with bounds checking }}</text>
      <sha1>4d1wq3abartko1hco4sx44wmrkg8xbf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc back</title>
    <ns>10</ns>
    <id>13595</id>
    <revision>
      <id>71295</id>
      <parentid>71294</parentid>
      <timestamp>2014-06-09T04:27:15Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Fix function typo</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/experimental/basic string view/back | accesses the last character }}</text>
      <sha1>68b82i5ij4jszvu7m4e8wvw8wedxsxo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc begin</title>
    <ns>10</ns>
    <id>13589</id>
    <revision>
      <id>71283</id>
      <timestamp>2014-06-09T03:58:41Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/experimental/basic string view/begin | title=begin&lt;br&gt;cbegin | returns an iterator to the beginning }}</text>
      <sha1>se8m1guti72ace6nz47rb4j7sgdun83</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc compare</title>
    <ns>10</ns>
    <id>13629</id>
    <revision>
      <id>71349</id>
      <timestamp>2014-06-09T10:19:29Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/experimental/basic string view/compare | compares two views }}</text>
      <sha1>bsolh4sh5ofx7srglbbi6zq7hsx0pn8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc constructor</title>
    <ns>10</ns>
    <id>13588</id>
    <revision>
      <id>71282</id>
      <timestamp>2014-06-09T03:56:19Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem ctor | cpp/experimental/basic_string_view/basic_string_view | constructs a {{tt| basic_string_view}} }}</text>
      <sha1>arc5jvk2n4nq11klcvu0nc0aco5ryfd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc copy</title>
    <ns>10</ns>
    <id>13607</id>
    <revision>
      <id>71313</id>
      <timestamp>2014-06-09T06:43:38Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/experimental/basic string view/copy | copies characters }}</text>
      <sha1>0jmn51hrqyv7aika1kkvts3vv5a4ixd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc data</title>
    <ns>10</ns>
    <id>13626</id>
    <revision>
      <id>71346</id>
      <timestamp>2014-06-09T10:17:06Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/experimental/basic string view/data | returns a pointer to the first character of a view }}</text>
      <sha1>kkp2orbn01wrscn4ccn5nlz4l9ooenh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc empty</title>
    <ns>10</ns>
    <id>13597</id>
    <revision>
      <id>71297</id>
      <timestamp>2014-06-09T04:31:26Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/experimental/basic string view/empty | checks whether the view is empty  }}</text>
      <sha1>te4u0qsjml4x2io8kcu7h0a5ehjnd0v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc end</title>
    <ns>10</ns>
    <id>13590</id>
    <revision>
      <id>71284</id>
      <timestamp>2014-06-09T03:59:33Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun | cpp/experimental/basic string view/end | title=end&lt;br&gt;cend | returns an iterator to the end }}</text>
      <sha1>rfs0ispzsbzqbfgcy2jr6o3yw7q6b66</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc find</title>
    <ns>10</ns>
    <id>13608</id>
    <revision>
      <id>71314</id>
      <timestamp>2014-06-09T06:44:05Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/experimental/basic string view/find | find characters in the view }}</text>
      <sha1>18muzezkc35szatzpaev1rded6rnhuw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc find first not of</title>
    <ns>10</ns>
    <id>13615</id>
    <revision>
      <id>71325</id>
      <timestamp>2014-06-09T09:05:15Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/experimental/basic_string_view/find_first_not_of | find first absence of characters }}</text>
      <sha1>fvltbwccc7swye1kdy7e3vdee8zvj8n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc find first of</title>
    <ns>10</ns>
    <id>13613</id>
    <revision>
      <id>71323</id>
      <timestamp>2014-06-09T09:03:37Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/experimental/basic_string_view/find_first_of | find first occurrence of characters }}</text>
      <sha1>atot08qa4r7g1k85vefgvx487614ds3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc find last not of</title>
    <ns>10</ns>
    <id>13616</id>
    <revision>
      <id>71326</id>
      <timestamp>2014-06-09T09:05:39Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/experimental/basic_string_view/find_last_not_of | find last absence of characters }}</text>
      <sha1>12lao19dbef57insa9bgke974jqdlwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc find last of</title>
    <ns>10</ns>
    <id>13614</id>
    <revision>
      <id>71324</id>
      <timestamp>2014-06-09T09:03:55Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/experimental/basic_string_view/find_last_of | find last occurrence of characters }}</text>
      <sha1>nbfn535ei5i5yk2jz5ar51er5t6qwsi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc front</title>
    <ns>10</ns>
    <id>13596</id>
    <revision>
      <id>71296</id>
      <timestamp>2014-06-09T04:27:56Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/experimental/basic string view/front | accesses the first character }}</text>
      <sha1>s5g017t2r27vopu35g9raaneg7n7km6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc hash</title>
    <ns>10</ns>
    <id>13632</id>
    <revision>
      <id>71352</id>
      <timestamp>2014-06-09T10:23:37Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="331">{{dsc ptclass | cpp/experimental/basic_string_view/hash | title=std::hash{{dsc small|&lt;std::experimental::string_view&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::experimental::wstring_view&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::experimental::u16string_view&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::experimental::u32string_view&gt;}} | hash support for views }}</text>
      <sha1>5fd6s35yw56lleudtxyfb1j2xrkq5g5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc max size</title>
    <ns>10</ns>
    <id>13598</id>
    <revision>
      <id>71298</id>
      <timestamp>2014-06-09T04:31:56Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/experimental/basic string view/max_size | returns the maximum number of characters }}</text>
      <sha1>rub1nizvsqdl99dclv3joxpktshnn53</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc npos</title>
    <ns>10</ns>
    <id>13630</id>
    <revision>
      <id>71350</id>
      <timestamp>2014-06-09T10:20:18Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem sconst | cpp/experimental/basic string view/npos | special value. The exact meaning depends on the context}}</text>
      <sha1>2zq87wypifaqihlnkwpuf770jrptw7g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc operator at</title>
    <ns>10</ns>
    <id>13593</id>
    <revision>
      <id>71292</id>
      <timestamp>2014-06-09T04:24:25Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/experimental/basic string view/operator_at|title=operator[] | access specified character }}</text>
      <sha1>6k3a4ya9izeu6wbcuaaeef9io4r9r0h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc operator cmp</title>
    <ns>10</ns>
    <id>13610</id>
    <revision>
      <id>71317</id>
      <timestamp>2014-06-09T07:05:52Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="189">{{dsc tfun | cpp/experimental/basic string view/operator cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&gt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;= | lexicographically compares two views }}</text>
      <sha1>lpnjaz56tyyh4hcuir24dyz4qc526dl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc operator ltlt</title>
    <ns>10</ns>
    <id>13631</id>
    <revision>
      <id>71351</id>
      <timestamp>2014-06-09T10:22:31Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="117">{{dsc tfun | cpp/experimental/basic_string_view/operator_ltlt | title=operator&lt;&lt; | performs stream output on views }}</text>
      <sha1>bco0p5wqinq5sn0fe07e6oeqw8dhqhk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc operator=</title>
    <ns>10</ns>
    <id>13586</id>
    <revision>
      <id>71276</id>
      <parentid>71275</parentid>
      <timestamp>2014-06-09T03:45:47Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Fix class typo</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/experimental/basic_string_view/operator{{=}} | assigns a view }}</text>
      <sha1>2rm8miqd9my5sch8agt33pxw9cd6rhj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc rbegin</title>
    <ns>10</ns>
    <id>13592</id>
    <revision>
      <id>71287</id>
      <timestamp>2014-06-09T04:12:48Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem fun | cpp/experimental/basic string view/rbegin | title=rbegin&lt;br&gt;crbegin | returns a reverse iterator to the beginning }}</text>
      <sha1>0zv8od5eb55psl5rj1lthgw757hzayz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc remove prefix</title>
    <ns>10</ns>
    <id>13600</id>
    <revision>
      <id>77021</id>
      <parentid>71301</parentid>
      <timestamp>2015-03-12T18:27:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rephrase</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/experimental/basic string view/remove_prefix | Shrinks the view by moving its start forward }}</text>
      <sha1>tvfv6e85g16ptdfi2frbgrg4g3xmwdk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc remove suffix</title>
    <ns>10</ns>
    <id>13601</id>
    <revision>
      <id>77022</id>
      <parentid>71302</parentid>
      <timestamp>2015-03-12T18:28:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rephrase</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem fun | cpp/experimental/basic string view/remove_suffix | Shrinks the view by moving its end backward }}</text>
      <sha1>3s11d3s4xdrv0n3bn9y5jl4hffud9ny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc rend</title>
    <ns>10</ns>
    <id>13591</id>
    <revision>
      <id>71285</id>
      <timestamp>2014-06-09T04:06:12Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/experimental/basic string view/rend | title=rend&lt;br&gt;crend | returns a reverse iterator to the end }}</text>
      <sha1>kp8usk90621iuiuz9ttqaojvh9c4e1g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc rfind</title>
    <ns>10</ns>
    <id>13612</id>
    <revision>
      <id>71322</id>
      <timestamp>2014-06-09T09:02:38Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/experimental/basic_string_view/rfind | find the last occurrence of a substring }}</text>
      <sha1>s2j9i537dt0zk900kurr52x9xrzuqfq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc size</title>
    <ns>10</ns>
    <id>13599</id>
    <revision>
      <id>71299</id>
      <timestamp>2014-06-09T04:33:07Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun | cpp/experimental/basic string view/size | title=size&lt;br/&gt;length | returns the number of characters }}</text>
      <sha1>4slu4hor3dvolzgzjxalc7tncz8vfv4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc substr</title>
    <ns>10</ns>
    <id>13605</id>
    <revision>
      <id>71309</id>
      <timestamp>2014-06-09T06:15:40Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/experimental/basic_string_view/substr | returns a substring}}</text>
      <sha1>a43yrq48w0zjayickkvy49slwz5amx4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc swap</title>
    <ns>10</ns>
    <id>13627</id>
    <revision>
      <id>71347</id>
      <timestamp>2014-06-09T10:17:31Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/experimental/basic string view/swap | swaps the contents }}</text>
      <sha1>fyzctcvgbh2fujg0rv5xj94e94bw0eh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/dsc to string</title>
    <ns>10</ns>
    <id>13628</id>
    <revision>
      <id>71348</id>
      <timestamp>2014-06-09T10:19:02Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/experimental/basic string view/to_string | title=to_string&lt;br/&gt;operator basic_string | creates a string from the view}}</text>
      <sha1>rrezuiztj38qxb08ypmz77ep6md8t98</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/navbar</title>
    <ns>10</ns>
    <id>13559</id>
    <revision>
      <id>76762</id>
      <parentid>71114</parentid>
      <timestamp>2015-03-01T03:57:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reorg</comment>
      <text xml:space="preserve" bytes="403">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content
|heading4 = cpp/experimental/basic_string_view/navbar heading
|content4 = cpp/experimental/basic_string_view/navbar content
}}</text>
      <sha1>euwl1xu2q2a3fksku1tpai0wbaf270x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/navbar content</title>
    <ns>10</ns>
    <id>13561</id>
    <revision>
      <id>74262</id>
      <parentid>71118</parentid>
      <timestamp>2014-12-10T18:00:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-clear</comment>
      <text xml:space="preserve" bytes="2555">{{nv begin}}
{{nv col begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/experimental/basic_string_view/basic_string_view}}
{{nv mem ln | cpp/experimental/basic_string_view/operator{{=}}}}

{{nv h2 | Iterators}}
{{nv mem ln | cpp/experimental/basic_string_view/begin | begin | cbegin}}
{{nv mem ln | cpp/experimental/basic_string_view/end | end | cend }}
{{nv mem ln | cpp/experimental/basic_string_view/rbegin | rbegin | crbegin }}
{{nv mem ln | cpp/experimental/basic_string_view/rend | rend | crend }}

{{nv h2 | Element access}}
{{nv mem ln | cpp/experimental/basic_string_view/at}}
{{nv mem ln | cpp/experimental/basic_string_view/operator_at | operator[]}}
{{nv mem ln | cpp/experimental/basic_string_view/front}}
{{nv mem ln | cpp/experimental/basic_string_view/back}}
{{nv mem ln | cpp/experimental/basic_string_view/data}}

{{nv h2 | Capacity}}
{{nv mem ln | cpp/experimental/basic_string_view/size | size | length}}
{{nv mem ln | cpp/experimental/basic_string_view/max_size}}
{{nv mem ln | cpp/experimental/basic_string_view/empty}}

{{nv h2 | Modifers}}
{{nv mem ln | cpp/experimental/basic_string_view/remove_prefix}}
{{nv mem ln | cpp/experimental/basic_string_view/remove_suffix}}
{{nv mem ln | cpp/experimental/basic_string_view/swap}}

{{nv col next}}

{{nv h2 | Operations}}
{{nv mem ln | cpp/experimental/basic_string_view/to_string | to_string | operator basic_string}}
{{nv mem ln | cpp/experimental/basic_string_view/copy}}
{{nv mem ln | cpp/experimental/basic_string_view/substr}}
{{nv mem ln | cpp/experimental/basic_string_view/compare}}
{{nv mem ln | cpp/experimental/basic_string_view/find}}
{{nv mem ln | cpp/experimental/basic_string_view/rfind}}
{{nv mem ln | cpp/experimental/basic_string_view/find_first_of}}
{{nv mem ln | cpp/experimental/basic_string_view/find_last_of}}
{{nv mem ln | cpp/experimental/basic_string_view/find_first_not_of}}
{{nv mem ln | cpp/experimental/basic_string_view/find_last_not_of}}

{{nv h1 | Constants}}
{{nv mem ln | cpp/experimental/basic_string_view/npos}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/experimental/basic_string_view/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&gt; | operator&lt;{{=}} | operator&gt;{{=}} }}
{{nv ln | cpp/experimental/basic_string_view/operator_ltlt | operator&lt;&lt;}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/experimental/basic_string_view/hash | hash{{dsc small|&lt;std::string_view&gt;}} |  hash{{dsc small|&lt;std::wstring_view&gt;}} | hash{{dsc small|&lt;std::u16string_view&gt;}} | hash{{dsc small|&lt;std::u32string_view&gt;}} }}
{{nv col end}}
{{nv end}}</text>
      <sha1>5d2l4jcg2bwyyztngwvk3qbj8zccn5l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/navbar heading</title>
    <ns>10</ns>
    <id>13560</id>
    <revision>
      <id>71115</id>
      <timestamp>2014-06-06T14:44:54Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Created page with &quot;{{ltt|cpp/experimental/basic_string_view|std::experimental::basic_string_view}}&quot;</comment>
      <text xml:space="preserve" bytes="79">{{ltt|cpp/experimental/basic_string_view|std::experimental::basic_string_view}}</text>
      <sha1>dwqocf758l5dfs09vt704taso2csbuh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/basic string view/title</title>
    <ns>10</ns>
    <id>13558</id>
    <revision>
      <id>71254</id>
      <parentid>71113</parentid>
      <timestamp>2014-06-09T01:35:56Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Fix template params.</comment>
      <text xml:space="preserve" bytes="128">&lt;onlyinclude&gt;{{cpp/title | n=experimental::basic_string_view::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>gkv1tvufzmny8l6gpvxtzhe13a6xrjf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/atomic shared ptr/navbar</title>
    <ns>10</ns>
    <id>15392</id>
    <revision>
      <id>85363</id>
      <timestamp>2016-04-20T21:18:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="421">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
|heading4 = cpp/experimental/concurrency/atomic_shared_ptr/navbar heading
|content4 = cpp/experimental/concurrency/atomic_shared_ptr/navbar content
}}</text>
      <sha1>41823zr4huevjphoc02c24cfsiiyuoh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/atomic shared ptr/navbar content</title>
    <ns>10</ns>
    <id>15394</id>
    <revision>
      <id>85382</id>
      <parentid>85365</parentid>
      <timestamp>2016-04-20T21:26:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="602">{{nv begin}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/atomic_shared_ptr}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/operator{{=}}}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/is_lock_free}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/store}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/load}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/operator shared_ptr|operator shared_ptr&lt;T&gt;}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/exchange}}
{{nv mem ln | cpp/experimental/atomic_shared_ptr/compare_exchange|compare_exchange_weak|compare_exchange_strong}}
{{nv end}}</text>
      <sha1>fws6mhrp9dqzzbm2dgolecjyg1ns6wh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/atomic shared ptr/navbar heading</title>
    <ns>10</ns>
    <id>15393</id>
    <revision>
      <id>85364</id>
      <timestamp>2016-04-20T21:19:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="79">{{ltt|cpp/experimental/atomic_shared_ptr|std::experimental::atomic_shared_ptr}}</text>
      <sha1>ley4t5yckgrkborbba9l0j4pwcv9u50</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/atomic weak ptr/navbar</title>
    <ns>10</ns>
    <id>15397</id>
    <revision>
      <id>85368</id>
      <timestamp>2016-04-20T21:24:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="417">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
|heading4 = cpp/experimental/concurrency/atomic_weak_ptr/navbar heading
|content4 = cpp/experimental/concurrency/atomic_weak_ptr/navbar content
}}</text>
      <sha1>kcpdi3tykrtc9uayruw9jdowarkw57o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/atomic weak ptr/navbar content</title>
    <ns>10</ns>
    <id>15398</id>
    <revision>
      <id>85381</id>
      <parentid>85369</parentid>
      <timestamp>2016-04-20T21:26:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="581">{{nv begin}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr/atomic_weak_ptr}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr/operator{{=}}}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr/is_lock_free}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr/store}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr/load}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr/operator weak_ptr|operator weak_ptr&lt;T&gt;}}

{{nv mem ln | cpp/experimental/atomic_weak_ptr/exchange}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr/compare_exchange|compare_exchange_weak|compare_exchange_strong}}
{{nv end}}</text>
      <sha1>h2u28h2nn3883yig7z840jlylywd2i0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/atomic weak ptr/navbar heading</title>
    <ns>10</ns>
    <id>15399</id>
    <revision>
      <id>85370</id>
      <timestamp>2016-04-20T21:24:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="75">{{ltt|cpp/experimental/atomic_weak_ptr|std::experimental::atomic_weak_ptr}}</text>
      <sha1>7vnvj4mdtae473eul1zp0hg0en8x4i1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/barrier/navbar</title>
    <ns>10</ns>
    <id>15409</id>
    <revision>
      <id>85384</id>
      <timestamp>2016-04-20T21:37:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="401">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
|heading4 = cpp/experimental/concurrency/barrier/navbar heading
|content4 = cpp/experimental/concurrency/barrier/navbar content
}}</text>
      <sha1>1xajq0u8k0bdf9wuhxvw4i1cdqehu2v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/barrier/navbar content</title>
    <ns>10</ns>
    <id>15411</id>
    <revision>
      <id>85386</id>
      <timestamp>2016-04-20T21:38:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="236">{{nv begin}}
{{nv mem ln | cpp/experimental/barrier/barrier}}
{{nv mem ln | cpp/experimental/barrier/~barrier}}
{{nv mem ln | cpp/experimental/barrier/arrive_and_wait}}
{{nv mem ln | cpp/experimental/barrier/arrive_and_drop}}
{{nv end}}</text>
      <sha1>8f56qj7kvl43v2s4vaws4e1flnyz58x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/barrier/navbar heading</title>
    <ns>10</ns>
    <id>15410</id>
    <revision>
      <id>85385</id>
      <timestamp>2016-04-20T21:37:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="59">{{ltt|cpp/experimental/barrier|std::experimental::barrier}}</text>
      <sha1>j0aencac8u7c3u71xyuj8nnkatbcexo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/flex barrier/navbar</title>
    <ns>10</ns>
    <id>15418</id>
    <revision>
      <id>85396</id>
      <timestamp>2016-04-20T21:52:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="411">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
|heading4 = cpp/experimental/concurrency/flex_barrier/navbar heading
|content4 = cpp/experimental/concurrency/flex_barrier/navbar content
}}</text>
      <sha1>9kfd2g4fa7djh5daeqlt4oep8y5idnj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/flex barrier/navbar content</title>
    <ns>10</ns>
    <id>15420</id>
    <revision>
      <id>85398</id>
      <timestamp>2016-04-20T21:52:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="266">{{nv begin}}
{{nv mem ln | cpp/experimental/flex_barrier/flex_barrier}}
{{nv mem ln | cpp/experimental/flex_barrier/~flex_barrier}}
{{nv mem ln | cpp/experimental/flex_barrier/arrive_and_wait}}
{{nv mem ln | cpp/experimental/flex_barrier/arrive_and_drop}}
{{nv end}}</text>
      <sha1>94opsloeacqevhs5xcj26yeplgzsasl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/flex barrier/navbar heading</title>
    <ns>10</ns>
    <id>15419</id>
    <revision>
      <id>85397</id>
      <timestamp>2016-04-20T21:52:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{ltt|cpp/experimental/flex_barrier|std::experimental::flex_barrier}}</text>
      <sha1>lcb1sf03cmzxu7rlche15v422o3ipqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/future/navbar</title>
    <ns>10</ns>
    <id>15441</id>
    <revision>
      <id>85442</id>
      <timestamp>2016-04-21T19:48:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Created page with &quot;{{subst:#replace:{{subst::{{subst:#replace:{{subst:FULLPAGENAME}}|future|barrier}}}}|barrier|future}}&quot;</comment>
      <text xml:space="preserve" bytes="399">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
|heading4 = cpp/experimental/concurrency/future/navbar heading
|content4 = cpp/experimental/concurrency/future/navbar content
}}</text>
      <sha1>8lt4vlbnu4xophkd1o10c4iflzovr5n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/future/navbar content</title>
    <ns>10</ns>
    <id>15443</id>
    <revision>
      <id>91061</id>
      <parentid>85444</parentid>
      <timestamp>2017-03-16T19:22:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="218">{{nv begin}}
{{nv mem ln | cpp/experimental/future/future}}
{{nv mem ln | cpp/experimental/future/operator{{=}}}}
{{nv mem ln | cpp/experimental/future/is_ready}}
{{nv mem ln | cpp/experimental/future/then}}
{{nv end}}</text>
      <sha1>e1ccf2pwjc6qegbjxtd9uc6lt3ssdzs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/future/navbar heading</title>
    <ns>10</ns>
    <id>15442</id>
    <revision>
      <id>85443</id>
      <timestamp>2016-04-21T19:48:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="57">{{ltt|cpp/experimental/future|std::experimental::future}}</text>
      <sha1>mh2hdbjmroo00o6kgaies63su82fbdb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/latch/navbar</title>
    <ns>10</ns>
    <id>14665</id>
    <revision>
      <id>82450</id>
      <parentid>82449</parentid>
      <timestamp>2015-12-17T10:43:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="397">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
|heading4 = cpp/experimental/concurrency/latch/navbar heading
|content4 = cpp/experimental/concurrency/latch/navbar content
}}</text>
      <sha1>15pzhn2d8y62s0wevx4wo1zfdjmycqj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/latch/navbar content</title>
    <ns>10</ns>
    <id>14667</id>
    <revision>
      <id>82452</id>
      <timestamp>2015-12-17T10:45:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="316">{{nv begin}}

{{nv mem ln | cpp/experimental/latch/latch}}
{{nv mem ln | cpp/experimental/latch/~latch}}
{{nv mem ln | cpp/experimental/latch/count_down_and_wait}}
{{nv mem ln | cpp/experimental/latch/count_down}}
{{nv mem ln | cpp/experimental/latch/is_ready}}
{{nv mem ln | cpp/experimental/latch/wait}}
{{nv end}}</text>
      <sha1>pjj76u7qr24qn7tjydlshfbj1v7j4d3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/latch/navbar heading</title>
    <ns>10</ns>
    <id>14666</id>
    <revision>
      <id>82451</id>
      <timestamp>2015-12-17T10:44:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="55">{{ltt|cpp/experimental/latch|std::experimental::latch}}</text>
      <sha1>sntitq7wegaletoxzvshx1r7uzr821o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/navbar</title>
    <ns>10</ns>
    <id>14146</id>
    <revision>
      <id>78850</id>
      <timestamp>2015-06-09T18:10:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="273">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
}}</text>
      <sha1>6qwqwfn161qqjsbdu3chudp9idyb98r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/navbar content</title>
    <ns>10</ns>
    <id>14148</id>
    <revision>
      <id>82485</id>
      <parentid>78853</parentid>
      <timestamp>2015-12-18T00:21:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <text xml:space="preserve" bytes="632">{{nv begin}}
{{nv h2 | std::future extensions}}
{{nv mem ln | cpp/experimental/future}}
{{nv mem ln | cpp/experimental/shared_future}}
{{nv mem ln | cpp/experimental/when_all}}
{{nv mem ln | cpp/experimental/when_any}}
{{nv mem ln | cpp/experimental/make_ready_future}}
{{nv mem ln | cpp/experimental/make_exceptional_future}}
{{nv h2 | Latches and barriers }}
{{nv mem ln | cpp/experimental/latch}}
{{nv mem ln | cpp/experimental/barrier}}
{{nv mem ln | cpp/experimental/flex_barrier}}
{{nv h2 | Atomic smart pointers }}
{{nv mem ln | cpp/experimental/atomic_shared_ptr}}
{{nv mem ln | cpp/experimental/atomic_weak_ptr}}
{{nv end}}</text>
      <sha1>7v7bp0xdyb92xwgncpv431j4f3fpgmv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/navbar heading</title>
    <ns>10</ns>
    <id>14147</id>
    <revision>
      <id>78851</id>
      <timestamp>2015-06-09T18:10:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="60">[[cpp/experimental/concurrency |Extensions for concurrency]]</text>
      <sha1>6s4s0b5yqbxfpir0mvnrn8c3robufir</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/shared future/navbar</title>
    <ns>10</ns>
    <id>15449</id>
    <revision>
      <id>85457</id>
      <timestamp>2016-04-21T20:01:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="413">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/concurrency/navbar heading
|content3 = cpp/experimental/concurrency/navbar content
|heading4 = cpp/experimental/concurrency/shared_future/navbar heading
|content4 = cpp/experimental/concurrency/shared_future/navbar content
}}</text>
      <sha1>8h5l2kcaphabmvjhge3a0ewqrqece40</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/shared future/navbar content</title>
    <ns>10</ns>
    <id>15451</id>
    <revision>
      <id>91067</id>
      <parentid>85459</parentid>
      <timestamp>2017-03-16T19:26:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="253">{{nv begin}}
{{nv mem ln | cpp/experimental/shared_future/shared_future}}
{{nv mem ln | cpp/experimental/shared_future/operator{{=}}}}
{{nv mem ln | cpp/experimental/shared_future/is_ready}}
{{nv mem ln | cpp/experimental/shared_future/then}}
{{nv end}}</text>
      <sha1>80bxow4pmntkhvrj8z3jvxpit2upcce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/concurrency/shared future/navbar heading</title>
    <ns>10</ns>
    <id>15450</id>
    <revision>
      <id>85458</id>
      <timestamp>2016-04-21T20:01:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="71">{{ltt|cpp/experimental/shared_future|std::experimental::shared_future}}</text>
      <sha1>736ca9ledhgki7ekzwqswlhau9ovgg2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc atomic shared ptr</title>
    <ns>10</ns>
    <id>14144</id>
    <revision>
      <id>78848</id>
      <timestamp>2015-06-09T18:09:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc tclass | cpp/experimental/atomic_shared_ptr | atomic version of std::shared_ptr | notes={{mark since concurrency ts}}}}</text>
      <sha1>rtvmpa4zo22ma3iaydrab21pyd8a39d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc atomic weak ptr</title>
    <ns>10</ns>
    <id>14143</id>
    <revision>
      <id>78847</id>
      <timestamp>2015-06-09T18:08:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">{{dsc tclass | cpp/experimental/atomic_weak_ptr | atomic version of std::weak_ptr | notes={{mark since concurrency ts}}}}</text>
      <sha1>iymolsew1mmh1tiulzwoq362r5hpf4p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc barrier</title>
    <ns>10</ns>
    <id>14141</id>
    <revision>
      <id>78845</id>
      <timestamp>2015-06-09T18:06:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">{{dsc class | cpp/experimental/barrier | reusable thread barrier | notes={{mark since concurrency ts}}}}</text>
      <sha1>khivqnnhm2nceei29snr11axwftoc98</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc erase</title>
    <ns>10</ns>
    <id>14167</id>
    <revision>
      <id>79332</id>
      <parentid>79331</parentid>
      <timestamp>2015-07-05T20:37:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweak</comment>
      <text xml:space="preserve" bytes="228">{{dsc tfun | cpp/experimental/{{{1}}}/erase | title=erase {{dsc small|(std::{{{1}}})}} | notes={{#ifeq:{{{mark|yes}}}|yes|{{mark since libfund 2 ts}}}}| Erases all elements equal to a specific value from a {{lc|std::{{{1}}}}} }}</text>
      <sha1>rqpb1zb0kg71c23szofqmdfrg2fuk41</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc erase if</title>
    <ns>10</ns>
    <id>14166</id>
    <revision>
      <id>79334</id>
      <parentid>79323</parentid>
      <timestamp>2015-07-05T20:38:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweak</comment>
      <text xml:space="preserve" bytes="232">{{dsc tfun | cpp/experimental/{{{1}}}/erase_if | title=erase_if {{dsc small|(std::{{{1}}})}} | notes={{#ifeq:{{{mark|yes}}}|yes|{{mark since libfund 2 ts}}|}}| Erases all elements satisfying a predicate from a {{lc|std::{{{1}}}}} }}</text>
      <sha1>gw3wz8i5mew7ba45g3bdx1m7hrw71iv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc flex barrier</title>
    <ns>10</ns>
    <id>14142</id>
    <revision>
      <id>78846</id>
      <timestamp>2015-06-09T18:07:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="150">{{dsc class | cpp/experimental/flex_barrier | reusable thread barrier with customizable behavior on completion | notes={{mark since concurrency ts}}}}</text>
      <sha1>8vxgt24aqpb3o0jd55bx8yuakjkc1wl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc future</title>
    <ns>10</ns>
    <id>15448</id>
    <revision>
      <id>85454</id>
      <parentid>85453</parentid>
      <timestamp>2016-04-21T20:00:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="159">{{dsc tclass | cpp/experimental/future | A version of {{lc|std::future}} enhanced with continuations and other features | notes={{mark since concurrency ts}}}}</text>
      <sha1>gbp8svyjixe16gg4bds1damupaww7ju</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc gcd</title>
    <ns>10</ns>
    <id>14199</id>
    <revision>
      <id>79373</id>
      <timestamp>2015-07-05T21:59:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/experimental/gcd | {{tt|constexpr}} function template returning the greatest common divisor of two integers }}</text>
      <sha1>refn8wrnwkaci5scdl4qb2hvwoq84s7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc latch</title>
    <ns>10</ns>
    <id>14140</id>
    <revision>
      <id>78844</id>
      <timestamp>2015-06-09T18:05:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">{{dsc class | cpp/experimental/latch | single-use thread barrier | notes={{mark since concurrency ts}}}}</text>
      <sha1>p26u93z662ztve9z0u2yovde071gi05</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc lcm</title>
    <ns>10</ns>
    <id>14200</id>
    <revision>
      <id>79374</id>
      <timestamp>2015-07-05T21:59:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="125">{{dsc tfun | cpp/experimental/lcm | {{tt|constexpr}} function template returning the least common multiple of two integers }}</text>
      <sha1>aba0bnja5jb22hj0d2nlqv7txj6xqkx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc make array</title>
    <ns>10</ns>
    <id>14195</id>
    <revision>
      <id>79357</id>
      <timestamp>2015-07-05T21:16:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="149">{{dsc tfun | cpp/experimental/make_array| Creates a {{lc|std::array}} object whose size and optionally element type are deduced from the arguments }}</text>
      <sha1>ahrtnqz9947b3l1qlj7t6fqt5b991n8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc make exceptional future</title>
    <ns>10</ns>
    <id>14139</id>
    <revision>
      <id>78842</id>
      <timestamp>2015-06-09T18:03:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="169">{{dsc tfun | cpp/experimental/make_exceptional_future | produces a future that is ready immediately and holds the given exception | notes={{mark since concurrency ts}}}}</text>
      <sha1>qk125rjpebm0bosocv2x97qi2093uh4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc make ready future</title>
    <ns>10</ns>
    <id>14138</id>
    <revision>
      <id>78843</id>
      <parentid>78841</parentid>
      <timestamp>2015-06-09T18:03:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>~</comment>
      <text xml:space="preserve" bytes="159">{{dsc tfun | cpp/experimental/make_ready_future | produces a future that is ready immediately and holds the given value | notes={{mark since concurrency ts}}}}</text>
      <sha1>7udfzzri333jw9gs9qp4zpqa1dlvlfm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc not fn</title>
    <ns>10</ns>
    <id>14675</id>
    <revision>
      <id>82790</id>
      <timestamp>2016-01-04T14:11:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Created page with &quot;{{dsc tfun | cpp/experimental/not_fn | Creates a function object that returns the complement of the result of the function object it holds}}&quot;</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/experimental/not_fn | Creates a function object that returns the complement of the result of the function object it holds}}</text>
      <sha1>52xogg6nzfs1peu6tphm7ajgf1hrv87</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc randint</title>
    <ns>10</ns>
    <id>14521</id>
    <revision>
      <id>81725</id>
      <timestamp>2015-11-06T05:25:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc tfun | cpp/experimental/randint | generates a random integer in the specified range }}</text>
      <sha1>fl6eiwbyi1zysmx3dn0zgybt8dp7oaz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc reseed</title>
    <ns>10</ns>
    <id>14519</id>
    <revision>
      <id>81722</id>
      <timestamp>2015-11-06T05:23:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="77">{{dsc fun | cpp/experimental/reseed | reseeds the per-thread random engine }}</text>
      <sha1>agzg7hi6lek1iu973hvxua3qs2zksxg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc shared future</title>
    <ns>10</ns>
    <id>15440</id>
    <revision>
      <id>85441</id>
      <timestamp>2016-04-21T19:48:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="173">{{dsc tclass | cpp/experimental/shared_future | A version of {{lc|std::shared_future}} enhanced with continuations and other features | notes={{mark since concurrency ts}}}}</text>
      <sha1>943uzm7xriv4j27lom2lvwo0atpoic8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc to array</title>
    <ns>10</ns>
    <id>14194</id>
    <revision>
      <id>79356</id>
      <timestamp>2015-07-05T21:16:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="99">{{dsc tfun | cpp/experimental/to_array| Creates a {{lc|std::array}} object from a built-in array }}</text>
      <sha1>p7mcir3a9enpv5x7f9eqh0t20pi02jc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc when all</title>
    <ns>10</ns>
    <id>14136</id>
    <revision>
      <id>78839</id>
      <timestamp>2015-06-09T17:58:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="168">{{dsc tfun | cpp/experimental/when_all | produces a future that becomes ready when all given futures or shared_futures are ready | notes={{mark since concurrency ts}}}}</text>
      <sha1>7wkvjtlbzlm6dcyub3gahomlh2zvohq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/dsc when any</title>
    <ns>10</ns>
    <id>14137</id>
    <revision>
      <id>78852</id>
      <parentid>78840</parentid>
      <timestamp>2015-06-09T18:12:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="183">{{dsc tfun | cpp/experimental/when_any | produces a future that becomes ready when at least one of the given futures or shared_futures is ready | notes={{mark since concurrency ts}}}}</text>
      <sha1>g4iyffkolp66fc9qxfo38th17slww7z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/erase</title>
    <ns>10</ns>
    <id>14172</id>
    <revision>
      <id>79653</id>
      <parentid>79652</parentid>
      <timestamp>2015-07-17T07:30:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>m</comment>
      <text xml:space="preserve" bytes="1535">{{cpp/experimental/title | erase &lt;small&gt;(std::{{{1|}}})&lt;/small&gt;}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{dcl begin}}
{{#switch:{{{1|}}}
|vector
|list
|forward_list
|deque=
{{dcl header |experimental/{{{1}}}}}
{{dcl| since=libfund_ts_2 | 1=
template &lt;class T, class A, class U&gt;
void erase(std::{{{1}}}&lt;T, A&gt;&amp; c, const U&amp; value);
}}
|basic_string=
{{dcl header |experimental/string}}
{{dcl| since=libfund_ts_2 | 1=
template &lt;class charT, class traits, class A, class U&gt;
void erase(std::{{{1}}}&lt;charT, traits, A&gt;&amp; c, const U&amp; value);
}}
}}
{{dcl end}}

Erases all elements that compare equal to {{tt|value}} from the container. {{#switch:{{{1|}}}
|vector
|basic_string
|deque=
Equivalent to {{c|c.erase(std::remove(c.begin(), c.end(), value), c.end());}}
|list
|forward_list=
Equivalent to {{c|1=c.remove_if([&amp;](auto&amp; elem) { return elem == value; });}}
}}

===Parameters===
{{par begin}}
{{par | c | container from which to erase}}
{{par | value | value to be removed}}
{{par end}} 

===Complexity===
Linear.

===Example===
{{example
 |code=
 | output=
}}

{{#switch:{{{1|}}}
|list
|forward_list=
=== Notes ===
Unlike {{lc|std::{{{1|}}}::remove}}, this function template accepts heterogenous types and does not force a conversion to the container's value type before invoking the {{c|{{==}}}} operator.
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc remove}}
{{#switch:{{{1}}}
|list
|forward_list=
{{dsc inc | cpp/container/dsc remove|{{{1}}}}}
}}
{{dsc inc | cpp/experimental/dsc erase_if|{{{1}}}}}
{{dsc end}}</text>
      <sha1>5364z005zmxpdy5fu984n9hku4mcnpl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/erase if</title>
    <ns>10</ns>
    <id>14178</id>
    <revision>
      <id>83181</id>
      <parentid>79651</parentid>
      <timestamp>2016-01-23T14:05:07Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>avoid repetition</comment>
      <text xml:space="preserve" bytes="1441">{{cpp/experimental/title | erase_if &lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/experimental/lib_extensions_2/navbar}}
{{cpp/container/get_types|{{{1}}}}}
{{dcl begin}}
{{dcl header |experimental/{{cpp/container/get_header| {{{1}}} }} }}
{{dcl| since=libfund_ts_2 | 1=
template &lt;{{#var:types}}, class Predicate&gt;
void erase_if(std::{{{1}}}&lt;{{#var:types_short}}&gt;&amp; c, Predicate pred);
}}
{{dcl end}}

Erases all elements that satisfy the predicate {{tt|pred}} from the container. {{#switch:{{{1}}}
|vector
|basic_string
|deque=
Equivalent to {{c|c.erase(std::remove_if(c.begin(), c.end(), pred), c.end());}}
|list
|forward_list=
Equivalent to {{c|1=c.remove_if(pred);}}
|map
|multimap
|set
|multiset
|unordered_map
|unordered_multimap
|unordered_set
|unordered_multiset=Equivalent to
{{source|1=
for (auto i = c.begin(), last = c.end(); i != last; ) {
  if (pred(*i)) {
    i = c.erase(i);
  } else {
    ++i;
  }
}
}}

}}

===Parameters===
{{par begin}}
{{par | c | container from which to erase}}
{{par | pred | predicate that determines which elements should be erased}}
{{par end}} 

===Complexity===
Linear.

===Example===
{{example
 |code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc remove}}
{{#switch:{{{1}}}
|list
|forward_list=
{{dsc inc | cpp/container/dsc remove|{{{1}}}}}
}}
{{#switch:{{{1}}}
|vector
|list
|forward_list
|deque
|basic_string=
{{dsc inc | cpp/experimental/dsc erase|{{{1}}}}}
}}
{{dsc end}}</text>
      <sha1>fow6581y5dnko56femejvi4wlvm7l16</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/exceptions reporting behavior</title>
    <ns>10</ns>
    <id>14458</id>
    <revision>
      <id>80799</id>
      <parentid>80793</parentid>
      <timestamp>2015-08-30T12:54:59Z</timestamp>
      <contributor>
        <ip>117.136.45.156</ip>
      </contributor>
      <text xml:space="preserve" bytes="874">*If execution of a function invoked as part of the algorithm throws an exception, 
:* if {{tt|policy}} is {{tt|parallel_vector_execution_policy}}, {{lc|std::terminate}} is called
:* if {{tt|policy}} is {{tt|sequential_execution_policy}} or {{tt|parallel_execution_policy}}, the algorithm exits with an {{ltt|cpp/experimental/exception_list|exception_list}} containing all uncaught exceptions. If there was only one uncaught exception, the algorithm may rethrow it without wrapping in {{tt|exception_list}}. It is unspecified how much work the algorithm will perform before returning after the first exception was encountered.
:* if {{tt|policy}} is some other type, the behavior is implementation-defined
* If the algorithm fails to allocate memory (either for itself or to construct an {{tt|exception_list}} when handling a user exception), {{lc|std::bad_alloc}} is thrown.</text>
      <sha1>m19ny1inzt4wuavagiea9q7c1zj4e30</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/execution policy note</title>
    <ns>10</ns>
    <id>14459</id>
    <revision>
      <id>80794</id>
      <timestamp>2015-08-29T18:35:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="650">* If {{tt|policy}} is an instance of {{tt|sequential_execution_policy}}, all operations are performed in the calling thread.
* If {{tt|policy}} is an instance of {{tt|parallel_execution_policy}}, operations may be performed in unspecified number of threads, indeterminately sequenced with each other 
* If {{tt|policy}} is an instance of {{tt|parallel_vector_execution_policy}}, execution may be both parallelized and vectorized: function body boundaries are not respected and user code may be overlapped and combined in arbitrary manner (in particular, this implies that a user-provided Callable must not acquire a mutex to access a shared resource)</text>
      <sha1>eorhrpodj52bblv835bx8v2lg71o1l2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/flex barrier/dsc arrive and drop</title>
    <ns>10</ns>
    <id>15425</id>
    <revision>
      <id>85404</id>
      <timestamp>2016-04-20T21:52:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="170">{{dsc mem fun | cpp/experimental/flex_barrier/arrive_and_drop | arrive at the synchronization point and remove the current thread from the set of participating threads }}</text>
      <sha1>j7gad0xek8l1r33wmn7mxrin7khlm36</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/flex barrier/dsc arrive and wait</title>
    <ns>10</ns>
    <id>15424</id>
    <revision>
      <id>85403</id>
      <timestamp>2016-04-20T21:52:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/experimental/flex_barrier/arrive_and_wait | arrive at the synchronization point and block }}</text>
      <sha1>4bb2o43x7y9hdm3xck1eol2ih2hua4d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/flex barrier/dsc constructor</title>
    <ns>10</ns>
    <id>15421</id>
    <revision>
      <id>85399</id>
      <timestamp>2016-04-20T21:52:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem ctor | cpp/experimental/flex_barrier/flex_barrier | constructs a {{tt|flex_barrier}} }}</text>
      <sha1>drcaiuxrqgcys89myfcmp4zdklyjblp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/flex barrier/dsc destructor</title>
    <ns>10</ns>
    <id>15422</id>
    <revision>
      <id>85401</id>
      <parentid>85400</parentid>
      <timestamp>2016-04-20T21:52:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="98">{{dsc mem dtor | cpp/experimental/flex_barrier/~flex_barrier | destroys the {{tt|flex_barrier}} }}</text>
      <sha1>f0u4oyj44w8c2zdxtr7t7ugma8ni839</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/flex barrier/dsc operator=</title>
    <ns>10</ns>
    <id>15423</id>
    <revision>
      <id>85402</id>
      <timestamp>2016-04-20T21:52:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}</text>
      <sha1>77x2gksrw7nfpw4adu5pydi8kdymkor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/flex barrier/title</title>
    <ns>10</ns>
    <id>15436</id>
    <revision>
      <id>85428</id>
      <timestamp>2016-04-21T19:04:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{cpp/title | n=experimental::flex_barrier::{{trim|}} | {{{1|}}}  | {{{2|}}}  | {{{3|}}} }}</text>
      <sha1>s16xwf4ggw909sv2affjs3ojy3cudlk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/copy example</title>
    <ns>10</ns>
    <id>14065</id>
    <revision>
      <id>77887</id>
      <timestamp>2015-04-15T15:51:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="780">{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/dir/subdir&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;).put('a');
    fs::copy(&quot;sandbox/file1.txt&quot;, &quot;sandbox/file2.txt&quot;); // copy file
    fs::copy(&quot;sandbox/dir&quot;, &quot;sandbox/dir2&quot;); // copy directory (non-recursive)
    // sandbox holds 2 files and 2 directories, one of which has a subdirectory
    // sandbox/file1.txt
    // sandbox/file2.txt
    // sandbox/dir2
    // sandbox/dir
    //    sandbox/dir/subdir
    fs::copy(&quot;sandbox&quot;, &quot;sandbox/copy&quot;, fs::copy_options::recursive);
    // sandbox/copy holds copies of the above files and subdirectories
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
}}</text>
      <sha1>lm98yh0d0l6t46e82l664xetzszvevw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc assign</title>
    <ns>10</ns>
    <id>13234</id>
    <revision>
      <id>68223</id>
      <parentid>68222</parentid>
      <timestamp>2014-03-19T00:36:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/experimental/fs/directory_entry/assign | assigns contents}}</text>
      <sha1>c44eixgwds6iibhes9hgc103k8p4rkj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc constructor</title>
    <ns>10</ns>
    <id>13235</id>
    <revision>
      <id>68225</id>
      <parentid>68224</parentid>
      <timestamp>2014-03-19T00:36:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem ctor | cpp/experimental/fs/directory_entry/directory_entry | constructs a directory entry}}</text>
      <sha1>1t2jc41vfsv8gbwpouq45hsf4e4pxsy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc destructor</title>
    <ns>10</ns>
    <id>13236</id>
    <revision>
      <id>68227</id>
      <parentid>68226</parentid>
      <timestamp>2014-03-19T00:36:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="50">{{dsc mem dtor | nolink=true |default destructor}}</text>
      <sha1>i01ji52k8tx9kvhkfyft88iuv6guyyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc operator cmp</title>
    <ns>10</ns>
    <id>13238</id>
    <revision>
      <id>72600</id>
      <parentid>72599</parentid>
      <timestamp>2014-09-07T16:57:11Z</timestamp>
      <contributor>
        <ip>84.50.136.238</ip>
      </contributor>
      <comment>One more typofix</comment>
      <text xml:space="preserve" bytes="215">{{dsc mem fun | cpp/experimental/fs/directory_entry/operator_cmp | title=operator{{==}}&lt;br/&gt;operator!=&lt;br/&gt;operator&amp;lt;&lt;br/&gt;operator&amp;lt;{{=}}&lt;br/&gt;operator&amp;gt;&lt;br/&gt;operator&amp;gt;{{=}} | compares two directory entries}}</text>
      <sha1>qav99x7l9doyrvwuzcxdjqc3c9ulpw7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc operator=</title>
    <ns>10</ns>
    <id>13237</id>
    <revision>
      <id>68229</id>
      <parentid>68228</parentid>
      <timestamp>2014-03-19T00:36:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/experimental/fs/directory_entry/operator{{=}} | assigns contents}}</text>
      <sha1>64f29tni7ac58dwzeqayd8mlp2tgess</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc path</title>
    <ns>10</ns>
    <id>13239</id>
    <revision>
      <id>78624</id>
      <parentid>68233</parentid>
      <timestamp>2015-05-30T14:02:52Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+ operator const path&amp;</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun | cpp/experimental/fs/directory_entry/path | title=path&lt;br&gt;operator const path&amp; | returns the path the entry refers to}}</text>
      <sha1>kmf66kgmwh96mdup0sylwf4ou2hs0ie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc replace filename</title>
    <ns>10</ns>
    <id>13240</id>
    <revision>
      <id>68235</id>
      <parentid>68234</parentid>
      <timestamp>2014-03-19T00:36:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/experimental/fs/directory_entry/replace_filename | sets the filename }}</text>
      <sha1>22mh5arepkdz5qfq5qxdunltzl1rgec</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc status</title>
    <ns>10</ns>
    <id>13241</id>
    <revision>
      <id>84984</id>
      <parentid>84982</parentid>
      <timestamp>2016-03-23T15:22:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84982 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops, this is the TS version</comment>
      <text xml:space="preserve" bytes="225">{{dsc mem fun | cpp/experimental/fs/directory_entry/status |title=status&lt;br&gt;symlink_status|cached status of the file designated by this directory entry&lt;br&gt;cached symlink_status of the file designated by this directory entry}}</text>
      <sha1>7icrizn9o0ck5dumq0s0m3b3hmhga8u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/dsc symlink status</title>
    <ns>10</ns>
    <id>13242</id>
    <revision>
      <id>68239</id>
      <parentid>68238</parentid>
      <timestamp>2014-03-19T00:36:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/experimental/fs/directory_entry/symbolic_status | returns the status of the target of the symbolic link}}</text>
      <sha1>flcmh3my8ki2o4np7e189d8wnj8ewsr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/navbar</title>
    <ns>10</ns>
    <id>13243</id>
    <revision>
      <id>68241</id>
      <parentid>68240</parentid>
      <timestamp>2014-03-19T00:36:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="295">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/fs/navbar heading
|content2 = cpp/experimental/fs/navbar content

|heading3 = cpp/experimental/fs/directory_entry/navbar heading
|content3 = cpp/experimental/fs/directory_entry/navbar content
}}</text>
      <sha1>tt3nhlw5bi65pwk3wgpghz5wzbexaxc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/navbar heading</title>
    <ns>10</ns>
    <id>13244</id>
    <revision>
      <id>68674</id>
      <parentid>68243</parentid>
      <timestamp>2014-03-19T00:39:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ns is evident from the title</comment>
      <text xml:space="preserve" bytes="63">{{ltt | cpp/experimental/fs/directory_entry | directory_entry}}</text>
      <sha1>oyx6fcyg7i8ub6ib9pkxxqhjki9gvpi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory entry/title</title>
    <ns>10</ns>
    <id>13245</id>
    <revision>
      <id>68685</id>
      <parentid>68245</parentid>
      <timestamp>2014-03-19T00:47:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="138">&lt;onlyinclude&gt;{{cpp/title | n=experimental::filesystem::directory_entry::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>4dvxeh10fin0987f3v3f9fjidpkfsde</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/dsc begin</title>
    <ns>10</ns>
    <id>14079</id>
    <revision>
      <id>78172</id>
      <timestamp>2015-05-08T13:13:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="226">{{dsc fun | cpp/experimental/fs/directory_iterator/begin | title=filesystem::begin{{dsc small|(filesystem::directory_iterator)}}&lt;br&gt;filesystem::end{{dsc small|(filesystem::directory_iterator)}} | range-based for loop support}}</text>
      <sha1>0qagosjgwdxatoiuxbajhrd264breek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/dsc constructor</title>
    <ns>10</ns>
    <id>13246</id>
    <revision>
      <id>68247</id>
      <parentid>68246</parentid>
      <timestamp>2014-03-19T00:36:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem ctor | cpp/experimental/fs/directory_iterator/directory_iterator | constructs a directory iterator}}</text>
      <sha1>3q7rldqxa1shwoztv6c94rcn7uyz9qd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/dsc destructor</title>
    <ns>10</ns>
    <id>13247</id>
    <revision>
      <id>68249</id>
      <parentid>68248</parentid>
      <timestamp>2014-03-19T00:36:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="51">{{dsc mem dtor | nolink=true | default destructor}}</text>
      <sha1>pht56euirfx3859r0v6ael8a57qtkx3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/dsc increment</title>
    <ns>10</ns>
    <id>13248</id>
    <revision>
      <id>68251</id>
      <parentid>68250</parentid>
      <timestamp>2014-03-19T00:36:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem fun | cpp/experimental/fs/directory_iterator/increment | title=increment&lt;br/&gt;operator++ | advances to the next entry}}</text>
      <sha1>7ts1ez9vcw0j07vjfbs4pojf9wn6gv5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/dsc operator*</title>
    <ns>10</ns>
    <id>13249</id>
    <revision>
      <id>68253</id>
      <parentid>68252</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="131">{{dsc mem fun | cpp/experimental/fs/directory_iterator/operator* | title=operator*&lt;br/&gt;operator-&gt; | accesses the pointed-to entry}}</text>
      <sha1>9lwqw5sjuo28k57pkku6ixhfahr1a6v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/dsc operator=</title>
    <ns>10</ns>
    <id>13250</id>
    <revision>
      <id>68255</id>
      <parentid>68254</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/experimental/fs/directory_iterator/operator{{=}} | assigns contents}}</text>
      <sha1>12mgodp9519zoh7qs0owjw0x230dixn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/navbar</title>
    <ns>10</ns>
    <id>13251</id>
    <revision>
      <id>68257</id>
      <parentid>68256</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="301">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/fs/navbar heading
|content2 = cpp/experimental/fs/navbar content

|heading3 = cpp/experimental/fs/directory_iterator/navbar heading
|content3 = cpp/experimental/fs/directory_iterator/navbar content
}}</text>
      <sha1>3hcye2xypztsqfkrkxr0jjgfmubl8x8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/navbar content</title>
    <ns>10</ns>
    <id>14116</id>
    <revision>
      <id>78615</id>
      <timestamp>2015-05-29T19:08:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="642">{{nv begin}}
{{nv h2 | Member functions}}
{{nv ln | cpp/experimental/fs/directory_iterator/directory_iterator|directory_iterator::directory_iterator}}
{{nv ln | cpp/experimental/fs/directory_iterator/operator*|directory_iterator::operator*|directory_iterator::operator-&gt;}}
{{nv ln | cpp/experimental/fs/directory_iterator/operator{{=}}|directory_iterator::operator{{=}}}}
{{nv ln | cpp/experimental/fs/directory_iterator/increment|directory_iterator::increment|directory_iterator::operator++}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/experimental/fs/directory_iterator/begin|begin(directory_iterator)|end(directory_iterator)}}
{{nv end}}</text>
      <sha1>6xdul5x9j1odjtv6jj40xqsdypf9woy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/navbar heading</title>
    <ns>10</ns>
    <id>13252</id>
    <revision>
      <id>68675</id>
      <parentid>68259</parentid>
      <timestamp>2014-03-19T00:39:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ns is evident from the title</comment>
      <text xml:space="preserve" bytes="69">{{ltt | cpp/experimental/fs/directory_iterator | directory_iterator}}</text>
      <sha1>pywv5fg520syu1qtsnupj4b4bhbuvjy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/directory iterator/title</title>
    <ns>10</ns>
    <id>13253</id>
    <revision>
      <id>68686</id>
      <parentid>68261</parentid>
      <timestamp>2014-03-19T00:47:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="141">&lt;onlyinclude&gt;{{cpp/title | n=experimental::filesystem::directory_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>nceec0nj0b5vk92oq8ffq9jw8izrukt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc absolute</title>
    <ns>10</ns>
    <id>13254</id>
    <revision>
      <id>77054</id>
      <parentid>68263</parentid>
      <timestamp>2015-03-13T17:04:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+system_complete</comment>
      <text xml:space="preserve" bytes="176">{{dsc fun | cpp/experimental/fs/absolute | title=absolute&lt;br&gt;system_complete|composes an absolute path&lt;br&gt;converts a path to an absolute path replicating OS-specific behavior}}</text>
      <sha1>9ptm5vd7jj0s4ty18isf42yg5bp1sa4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc canonical</title>
    <ns>10</ns>
    <id>13255</id>
    <revision>
      <id>68265</id>
      <parentid>68264</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | cpp/experimental/fs/canonical | composes a canonical path}}</text>
      <sha1>m2daqjfthi2a46o6iyl2dbw4ag3f8uv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc copy</title>
    <ns>10</ns>
    <id>13256</id>
    <revision>
      <id>77145</id>
      <parentid>77142</parentid>
      <timestamp>2015-03-16T21:01:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 77142 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) nevermind</comment>
      <text xml:space="preserve" bytes="68">{{dsc fun | cpp/experimental/fs/copy | copies files or directories}}</text>
      <sha1>s7kzu0o91rn6ej9axb60r3a8erj4a9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc copy file</title>
    <ns>10</ns>
    <id>13257</id>
    <revision>
      <id>68269</id>
      <parentid>68268</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="66">{{dsc fun | cpp/experimental/fs/copy_file | copies file contents}}</text>
      <sha1>il3x53g39f3omcqentd4hfidvs0c3mt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc copy options</title>
    <ns>10</ns>
    <id>13258</id>
    <revision>
      <id>68271</id>
      <parentid>68270</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="88">{{dsc enum | cpp/experimental/fs/copy_options | specifies semantics of copy operations}}</text>
      <sha1>gy3vcbd87sncfpjqjwq6jrr1tsljwdi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc copy symlink</title>
    <ns>10</ns>
    <id>13259</id>
    <revision>
      <id>68273</id>
      <parentid>68272</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | cpp/experimental/fs/copy_symlink | copies a symbolic link}}</text>
      <sha1>hwjznbk7ju5yjwp14u7je3z67yg7hao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc create directory</title>
    <ns>10</ns>
    <id>13260</id>
    <revision>
      <id>68275</id>
      <parentid>68274</parentid>
      <timestamp>2014-03-19T00:36:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="122">{{dsc fun | cpp/experimental/fs/create_directory | title=create_directory&lt;br/&gt;create_directories | creates new directory}}</text>
      <sha1>k3for7u74sipsnhox9ldidxybr9my16</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc create hard link</title>
    <ns>10</ns>
    <id>13261</id>
    <revision>
      <id>68277</id>
      <parentid>68276</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="72">{{dsc fun | cpp/experimental/fs/create_hard_link | creates a hard link}}</text>
      <sha1>m09qrbglsggkvp5hcdnw62mhnka0vsd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc create symlink</title>
    <ns>10</ns>
    <id>13262</id>
    <revision>
      <id>68279</id>
      <parentid>68278</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | cpp/experimental/fs/create_symlink | title=create_symlink&lt;br/&gt;create_directory_symlink | creates a symbolic link}}</text>
      <sha1>o2wub8qszd1g01era4o2bm89hjrrnpr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc current path</title>
    <ns>10</ns>
    <id>13263</id>
    <revision>
      <id>68281</id>
      <parentid>68280</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="81">{{dsc fun | cpp/experimental/fs/current_path | return current working directory}}</text>
      <sha1>6cubudg98ozcvhnxw6qcawz47wa5e81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc directory entry</title>
    <ns>10</ns>
    <id>13264</id>
    <revision>
      <id>68283</id>
      <parentid>68282</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="71">{{dsc class | cpp/experimental/fs/directory_entry | a directory entry}}</text>
      <sha1>lg4nry74n2phnsxk95i17yql3ivy7bm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc directory iterator</title>
    <ns>10</ns>
    <id>13265</id>
    <revision>
      <id>68285</id>
      <parentid>68284</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="101">{{dsc class | cpp/experimental/fs/directory_iterator | an iterator to the contents of the directory}}</text>
      <sha1>nv7tx6v9mlh8hbageb7ws3hfh3b7ne7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc directory options</title>
    <ns>10</ns>
    <id>13266</id>
    <revision>
      <id>68287</id>
      <parentid>68286</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="95">{{dsc enum | cpp/experimental/fs/directory_options | options for iterating directory contents}}</text>
      <sha1>r1jjkde3esbxcvj69fg8gt7yhfakt5i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc equivalent</title>
    <ns>10</ns>
    <id>13267</id>
    <revision>
      <id>84576</id>
      <parentid>84575</parentid>
      <timestamp>2016-03-21T16:07:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84575 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="108">{{dsc fun | cpp/experimental/fs/equivalent | checks whether two paths refer to the same file system object}}</text>
      <sha1>lonpiufl3dhqc7hvy6syuhd7r9153f8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc exists</title>
    <ns>10</ns>
    <id>13268</id>
    <revision>
      <id>68291</id>
      <parentid>68290</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | cpp/experimental/fs/exists | checks whether path refers to existing file system object }}</text>
      <sha1>7monmoyq77kwblqas5nrs1eldppzs3n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc file size</title>
    <ns>10</ns>
    <id>13269</id>
    <revision>
      <id>68293</id>
      <parentid>68292</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="72">{{dsc fun | cpp/experimental/fs/file_size | returns the size of a file}}</text>
      <sha1>3joayy4af0vi0s3thg7v70e8p4t8skr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc file status</title>
    <ns>10</ns>
    <id>13270</id>
    <revision>
      <id>68295</id>
      <parentid>68294</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="86">{{dsc class | cpp/experimental/fs/file_status | represents file type and permissions}}</text>
      <sha1>ry70oxc52c3nr4xn00oytbld14cygj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc file time type</title>
    <ns>10</ns>
    <id>13271</id>
    <revision>
      <id>68297</id>
      <parentid>68296</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="82">{{dsc typedef | cpp/experimental/fs/file_time_type | represents file time values}}</text>
      <sha1>139f2zmxq7y6b7epptvwy69j7tdam2x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc file type</title>
    <ns>10</ns>
    <id>13272</id>
    <revision>
      <id>68299</id>
      <parentid>68298</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="65">{{dsc enum | cpp/experimental/fs/file_type | the type of a file}}</text>
      <sha1>680kyx3ijxvtrh20j22ij8t5nobw4f4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc filesystem error</title>
    <ns>10</ns>
    <id>13273</id>
    <revision>
      <id>68301</id>
      <parentid>68300</parentid>
      <timestamp>2014-03-19T00:36:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="96">{{dsc class | cpp/experimental/fs/filesystem_error | an exception thrown on file system errors}}</text>
      <sha1>1g91ipf4tx0p7fg1fyxk34cs2pbrm69</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc hard link count</title>
    <ns>10</ns>
    <id>13274</id>
    <revision>
      <id>68303</id>
      <parentid>68302</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="115">{{dsc fun | cpp/experimental/fs/hard_link_count | returns the number of hard links referring to the specific file}}</text>
      <sha1>cr0v6nhhym9o5tcksgbugkehwil4ljb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is block file</title>
    <ns>10</ns>
    <id>13275</id>
    <revision>
      <id>77594</id>
      <parentid>68305</parentid>
      <timestamp>2015-03-31T15:54:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/file/device (&quot;special file&quot; would be the precise standardese, but device is more recognizable)</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/experimental/fs/is_block_file | checks whether the given path refers to block device}}</text>
      <sha1>8mnxzunevo2xhadt5i039tj634fj5t6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is character file</title>
    <ns>10</ns>
    <id>13276</id>
    <revision>
      <id>77593</id>
      <parentid>68307</parentid>
      <timestamp>2015-03-31T15:54:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/file/device (&quot;special file&quot; would be the precise standardese, but device is more recognizable)</comment>
      <text xml:space="preserve" bytes="112">{{dsc fun | cpp/experimental/fs/is_character_file | checks whether the given path refers to a character device}}</text>
      <sha1>kg1jgdcrtx2c4lq6h66yuustbjp2kwx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is directory</title>
    <ns>10</ns>
    <id>13277</id>
    <revision>
      <id>68309</id>
      <parentid>68308</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | cpp/experimental/fs/is_directory | checks whether the given path refers to a directory}}</text>
      <sha1>dmodnix9mmnqduf54an4eb6jm7c9tzx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is empty</title>
    <ns>10</ns>
    <id>13278</id>
    <revision>
      <id>68311</id>
      <parentid>68310</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | cpp/experimental/fs/is_empty | checks whether the given path refers to an empty file or directory}}</text>
      <sha1>20flqh3n7o7b0i25z1ht9audqnafajq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is fifo</title>
    <ns>10</ns>
    <id>13279</id>
    <revision>
      <id>77595</id>
      <parentid>68313</parentid>
      <timestamp>2015-03-31T15:56:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>named pipe is more recognizable</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/experimental/fs/is_fifo | checks whether the given path refers to a named pipe}}</text>
      <sha1>4gsg938ssw0rm7rdhx0w5e1pr6pb5u1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is other</title>
    <ns>10</ns>
    <id>13280</id>
    <revision>
      <id>68315</id>
      <parentid>68314</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | cpp/experimental/fs/is_other | checks whether the argument refers to an ''other'' file}}</text>
      <sha1>3umzcfmificywhnigufm9rrunwn5c9u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is regular file</title>
    <ns>10</ns>
    <id>13281</id>
    <revision>
      <id>68317</id>
      <parentid>68316</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="104">{{dsc fun | cpp/experimental/fs/is_regular_file | checks whether the argument refers to a regular file}}</text>
      <sha1>gxl5sowl4n69ty7uasncyxc125b8819</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is socket</title>
    <ns>10</ns>
    <id>13282</id>
    <revision>
      <id>77596</id>
      <parentid>68319</parentid>
      <timestamp>2015-03-31T15:57:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>named (as opposed to what you get from socketpair) IPC (as opposed to networking) socket</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/experimental/fs/is_socket | checks whether the argument refers to a named IPC socket}}</text>
      <sha1>hp4n518xyqk5mxy05logtfqvi8jy0ib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is symlink</title>
    <ns>10</ns>
    <id>13283</id>
    <revision>
      <id>68321</id>
      <parentid>68320</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | cpp/experimental/fs/is_symlink | checks whether the argument refers to a symbolic link}}</text>
      <sha1>r8d3ueoivanwbzwsvqxndfhzg2il07m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc is type</title>
    <ns>10</ns>
    <id>13284</id>
    <revision>
      <id>68323</id>
      <parentid>68322</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="262">{{dsc fun | cpp/experimental/fs/is_type | title=is_block_file&lt;br/&gt;is_character_file&lt;br/&gt;is_directory&lt;br/&gt;is_empty&lt;br/&gt;is_fifo&lt;br/&gt;is_other&lt;br/&gt;is_regular_file&lt;br/&gt;is_socket&lt;br/&gt;is_symlink | checks checks whether the given path refers to a file of specific type}}</text>
      <sha1>bykl8xfnhsvnimicrznnriiuzmkxuj5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc last write time</title>
    <ns>10</ns>
    <id>14026</id>
    <revision>
      <id>77610</id>
      <parentid>77048</parentid>
      <timestamp>2015-03-31T19:27:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>this is a setter, too</comment>
      <text xml:space="preserve" bytes="104">{{dsc fun | cpp/experimental/fs/last_write_time | gets or sets the time of the last data modification }}</text>
      <sha1>lnged5pqq5ugf2z3qsuo5t3rjb93bpx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc path</title>
    <ns>10</ns>
    <id>13285</id>
    <revision>
      <id>68325</id>
      <parentid>68324</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="74">{{dsc class | cpp/experimental/fs/path | represents a path | since=fs_ts}}</text>
      <sha1>r5rxb1dka5ow2ej2mlq94g9p984h65w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc permissions</title>
    <ns>10</ns>
    <id>14027</id>
    <revision>
      <id>77049</id>
      <timestamp>2015-03-13T16:55:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="80">{{dsc fun | cpp/experimental/fs/permissions | modifies file access permissions}}</text>
      <sha1>qomhfk2i8q9cd9po1i1d9y31qx4s160</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc perms</title>
    <ns>10</ns>
    <id>13286</id>
    <revision>
      <id>68327</id>
      <parentid>68326</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="77">{{dsc enum | cpp/experimental/fs/perms | identifies file system permissions}}</text>
      <sha1>r0zujezib4g44ymd7imow8719kcropz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc read symlink</title>
    <ns>10</ns>
    <id>14028</id>
    <revision>
      <id>77050</id>
      <timestamp>2015-03-13T16:56:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="86">{{dsc fun | cpp/experimental/fs/read_symlink | obtains the target of a symbolic link}}</text>
      <sha1>nrflznt7mgrlxoaalj62s09ex88q8it</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc recursive directory iterator</title>
    <ns>10</ns>
    <id>13287</id>
    <revision>
      <id>68329</id>
      <parentid>68328</parentid>
      <timestamp>2014-03-19T00:36:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="132">{{dsc class | cpp/experimental/fs/recursive_directory_iterator | an iterator to the contents of a directory and its subdirectories}}</text>
      <sha1>pn4kiqpr9xbzsk04qj09q6u4f3m0nul</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc remove</title>
    <ns>10</ns>
    <id>14023</id>
    <revision>
      <id>77150</id>
      <parentid>77044</parentid>
      <timestamp>2015-03-16T21:41:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix desc</comment>
      <text xml:space="preserve" bytes="170">{{dsc fun | cpp/experimental/fs/remove | title=remove&lt;br&gt;remove_all | removes a file or empty directory&lt;br&gt;removes a file or directory and all its contents, recursively}}</text>
      <sha1>9c5coafdj7nnqjxnkfw99li1ifptk9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc rename</title>
    <ns>10</ns>
    <id>14029</id>
    <revision>
      <id>77051</id>
      <timestamp>2015-03-13T16:58:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="79">{{dsc fun | cpp/experimental/fs/rename | moves or renames a file or directory}}</text>
      <sha1>fm9d5jg5djlz43q92jn76w0crxmiybr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc resize file</title>
    <ns>10</ns>
    <id>14030</id>
    <revision>
      <id>77052</id>
      <timestamp>2015-03-13T17:00:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | cpp/experimental/fs/resize_file | changes the size of a regular file by truncation or zero-fill}}</text>
      <sha1>0o752xn1xed0kjwfwkl3ro28w0i4sze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc space</title>
    <ns>10</ns>
    <id>14031</id>
    <revision>
      <id>77053</id>
      <timestamp>2015-03-13T17:01:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | cpp/experimental/fs/space | determines available free space on the file system}}</text>
      <sha1>lk7p68b1mlwi783k6dmwd56bttuyci3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc space info</title>
    <ns>10</ns>
    <id>13288</id>
    <revision>
      <id>68331</id>
      <parentid>68330</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="109">{{dsc class | cpp/experimental/fs/space_info | information about free and available space on the filesystem}}</text>
      <sha1>hbqfeu0yakzmtjvnkd7ciqd7vppy2p4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc status</title>
    <ns>10</ns>
    <id>14024</id>
    <revision>
      <id>77179</id>
      <parentid>77045</parentid>
      <timestamp>2015-03-17T16:08:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-status_known</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | cpp/experimental/fs/status|title=status&lt;br&gt;symlink_status |determines file attributes&lt;br&gt;determines file attributes, checking the symlink target}}</text>
      <sha1>ntm61e4s2x4gebod9z58qrf4sqw7e49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc status known</title>
    <ns>10</ns>
    <id>14039</id>
    <revision>
      <id>77172</id>
      <timestamp>2015-03-17T15:53:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | cpp/experimental/fs/status_known | checks whether file status is known}}</text>
      <sha1>j9ue5vjtmtuxv0758j6hmli23zjhh12</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc temp directory path</title>
    <ns>10</ns>
    <id>13289</id>
    <revision>
      <id>68333</id>
      <parentid>68332</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="104">{{dsc fun | cpp/experimental/fs/temp_directory_path | returns a directory suitable for temporary files}}</text>
      <sha1>nokupvel84j5ek7u66zpfnvbddhkq9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/dsc u8path</title>
    <ns>10</ns>
    <id>14025</id>
    <revision>
      <id>77047</id>
      <timestamp>2015-03-13T16:53:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc fun | cpp/experimental/fs/u8path |creates a path in native encoding from its UTF-8 string representation}}</text>
      <sha1>ebh2r1gdwbpa3qceomvh2yth5u0bvko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/error handling</title>
    <ns>10</ns>
    <id>14032</id>
    <revision>
      <id>91959</id>
      <parentid>77688</parentid>
      <timestamp>2017-03-31T20:17:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="565">The overload that does not take a {{tt|error_code&amp;}} parameter throws {{rlp|filesystem_error}} on underlying OS API errors, constructed with {{#if:{{{1|}}}|{{tt|{{{1}}}}} as the first argument{{#if:{{{2|}}}|, {{tt|{{{2}}}}} as the second argument,}} and}} the OS error code as the error code argument. {{c|std::bad_alloc}} may be thrown if memory allocation fails. The overload taking a {{tt|error_code&amp;}} parameter sets it to the OS API error code if an OS API call fails, and executes {{c|ec.clear()}} if no errors occur. This overload has {{unreviewed noexcept}}</text>
      <sha1>qjklzb5wzy1wu8540ydnt60keg6354q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/error handling exception only</title>
    <ns>10</ns>
    <id>14070</id>
    <revision>
      <id>78001</id>
      <parentid>77999</parentid>
      <timestamp>2015-04-23T18:37:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="151">May throw {{ltt|cpp/experimental/fs/filesystem_error|filesystem_error}} on underlying OS API errors or {{c|std::bad_alloc}} if memory allocation fails.</text>
      <sha1>agy30ke50obajlahpx5nqsli92hsoee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/dsc constructor</title>
    <ns>10</ns>
    <id>13290</id>
    <revision>
      <id>68335</id>
      <parentid>68334</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem ctor | cpp/experimental/fs/file_status/file_status | constructs a {{tt|file_status}} object}}</text>
      <sha1>3fvrqs8x4cs1qj1vjutpiafhn6u3mg1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/dsc destructor</title>
    <ns>10</ns>
    <id>13291</id>
    <revision>
      <id>68337</id>
      <parentid>68336</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="52">{{dsc mem dtor | nolink=true | implicit destructor}}</text>
      <sha1>bqy69mkfl93bt5tnxpbi6657yobcrft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/dsc operator=</title>
    <ns>10</ns>
    <id>13292</id>
    <revision>
      <id>68339</id>
      <parentid>68338</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/experimental/fs/file_status/operator{{=}} | assigns contents}}</text>
      <sha1>0d7yfe2ysydenkbw7hjw86dmhbci7n6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/dsc permissions</title>
    <ns>10</ns>
    <id>13293</id>
    <revision>
      <id>68341</id>
      <parentid>68340</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/experimental/fs/file_status/permissions | gets or sets the permissions of the file}}</text>
      <sha1>oavt0lid3u7xmojot76obygqdpw79qp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/dsc type</title>
    <ns>10</ns>
    <id>13294</id>
    <revision>
      <id>68343</id>
      <parentid>68342</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/experimental/fs/file_status/type | gets or sets the type of the file}}</text>
      <sha1>g3e6ul62jt0ziby31xkfw1jekiuao3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/navbar</title>
    <ns>10</ns>
    <id>13295</id>
    <revision>
      <id>68345</id>
      <parentid>68344</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="287">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/fs/navbar heading
|content2 = cpp/experimental/fs/navbar content

|heading3 = cpp/experimental/fs/file_status/navbar heading
|content3 = cpp/experimental/fs/file_status/navbar content
}}</text>
      <sha1>topwua6nt21el7kr6i2yg15zl1xjozq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/navbar heading</title>
    <ns>10</ns>
    <id>13296</id>
    <revision>
      <id>68676</id>
      <parentid>68347</parentid>
      <timestamp>2014-03-19T00:39:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ns is evident from the title</comment>
      <text xml:space="preserve" bytes="55">{{ltt | cpp/experimental/fs/file_status | file_status}}</text>
      <sha1>kpgkdbt8424hl49kb8r6ew8ts5wmchf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/file status/title</title>
    <ns>10</ns>
    <id>13297</id>
    <revision>
      <id>68687</id>
      <parentid>68349</parentid>
      <timestamp>2014-03-19T00:47:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="134">&lt;onlyinclude&gt;{{cpp/title | n=experimental::filesystem::file_status::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>f76y8q6hspznd8la0lp0zg264nfcvub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/filesystem error/dsc constructor</title>
    <ns>10</ns>
    <id>13298</id>
    <revision>
      <id>68351</id>
      <parentid>68350</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem ctor | cpp/experimental/fs/filesystem_error/filesystem_error | constructs the error object}}</text>
      <sha1>l2wmt7ljae3g95w5whsi8lug3s8dpq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/filesystem error/dsc path</title>
    <ns>10</ns>
    <id>13299</id>
    <revision>
      <id>68353</id>
      <parentid>68352</parentid>
      <timestamp>2014-03-19T00:36:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem fun | cpp/experimental/fs/filesystem_error/path | title=path1&lt;br/&gt;path2 | returns the paths that were involved in the operation that caused the error}}</text>
      <sha1>i2euy6157p70jvaiyclc635b0bseucu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/filesystem error/dsc what</title>
    <ns>10</ns>
    <id>13300</id>
    <revision>
      <id>68355</id>
      <parentid>68354</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/experimental/fs/filesystem_error/what | returns the explanatory string}}</text>
      <sha1>otb8ju5crq2m3uco2az6uyezsa56yj5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/filesystem error/navbar</title>
    <ns>10</ns>
    <id>13301</id>
    <revision>
      <id>68357</id>
      <parentid>68356</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="297">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/fs/navbar heading
|content2 = cpp/experimental/fs/navbar content

|heading3 = cpp/experimental/fs/filesystem_error/navbar heading
|content3 = cpp/experimental/fs/filesystem_error/navbar content
}}</text>
      <sha1>q7csbek2u8mrbnz4ncpa03vg8jwndqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/filesystem error/navbar content</title>
    <ns>10</ns>
    <id>14083</id>
    <revision>
      <id>78279</id>
      <parentid>78278</parentid>
      <timestamp>2015-05-14T14:14:16Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="350">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/experimental/fs/filesystem_error/filesystem_error}}
{{nv mem ln | cpp/experimental/fs/filesystem_error/path | path1 | path2}}
{{nv mem ln | cpp/experimental/fs/filesystem_error/what}}
{{nv h2 | Inherited from {{lc|std::system_error}}}}
{{nv mem ln | cpp/error/system_error/code}}
{{nv end}}</text>
      <sha1>nkhducbwuehbeb95nco5qj0a7msu8o1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/filesystem error/navbar heading</title>
    <ns>10</ns>
    <id>13302</id>
    <revision>
      <id>68677</id>
      <parentid>68359</parentid>
      <timestamp>2014-03-19T00:39:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ns is evident from the title</comment>
      <text xml:space="preserve" bytes="65">{{ltt | cpp/experimental/fs/filesystem_error | filesystem_error}}</text>
      <sha1>rp8i9lhpd2zwcyqgzd08dvuan11ufnc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/filesystem error/title</title>
    <ns>10</ns>
    <id>13303</id>
    <revision>
      <id>68688</id>
      <parentid>68361</parentid>
      <timestamp>2014-03-19T00:47:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="139">&lt;onlyinclude&gt;{{cpp/title | n=experimental::filesystem::filesystem_error::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>qzkh3o13i8mjzc66q8wpxbe53rnngoe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/navbar</title>
    <ns>10</ns>
    <id>13304</id>
    <revision>
      <id>77041</id>
      <parentid>68363</parentid>
      <timestamp>2015-03-13T15:30:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>move to level 3 to show ts's at lvl 2</comment>
      <text xml:space="preserve" bytes="255">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/fs/navbar heading
|content3 = cpp/experimental/fs/navbar content
}}</text>
      <sha1>4kkc9o0h0fw1v4dji6bn3a2zkd21see</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/navbar content</title>
    <ns>10</ns>
    <id>14034</id>
    <revision>
      <id>78626</id>
      <parentid>77173</parentid>
      <timestamp>2015-05-30T20:44:24Z</timestamp>
      <contributor>
        <ip>81.136.63.231</ip>
      </contributor>
      <comment>Fixed typo &quot;asolute&quot; --&gt; &quot;absolute&quot;.</comment>
      <text xml:space="preserve" bytes="3417">{{nv begin}}
{{nv h2 | Classes}}
{{nv col begin}}
{{nv ln | cpp/experimental/fs/path|filesystem::path}}
{{nv ln | cpp/experimental/fs/filesystem_error|filesystem::filesystem_error}}
{{nv ln | cpp/experimental/fs/directory_entry|filesystem::directory_entry}}
{{nv ln | cpp/experimental/fs/directory_iterator|filesystem::directory_iterator}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator|filesystem::recursive_directory_iterator}}
{{nv ln | cpp/experimental/fs/file_status|filesystem::file_status}}
{{nv col next}}
{{nv ln | cpp/experimental/fs/space_info|filesystem::space_info}}
{{nv ln | cpp/experimental/fs/file_type|filesystem::file_type}}
{{nv ln | cpp/experimental/fs/perms|filesystem::perms}}
{{nv ln | cpp/experimental/fs/copy_options|filesystem::copy_options}}
{{nv ln | cpp/experimental/fs/directory_options|filesystem::directory_options}}
{{nv ln | cpp/experimental/fs/file_time_type|filesystem::file_time_type}}
{{nv col end}}
{{nv h2 | Functions}}
{{nv col begin}}
{{nv ln | cpp/experimental/fs/absolute|filesystem::absolute&lt;br&gt;filesystem::system_complete}}
{{nv ln | cpp/experimental/fs/canonical|filesystem::canonical}}
{{nv ln | cpp/experimental/fs/copy|filesystem::copy}}
{{nv ln | cpp/experimental/fs/copy_file|filesystem::copy_file}}
{{nv ln | cpp/experimental/fs/copy_symlink|filesystem::copy_symlink}}
{{nv ln | cpp/experimental/fs/create_directory|filesystem::create_directory&lt;br&gt;filesystem::create_directories}}
{{nv ln | cpp/experimental/fs/create_hard_link|filesystem::create_hard_link}}
{{nv ln | cpp/experimental/fs/create_symlink|filesystem::create_symlink&lt;br&gt;filesystem::create_directory_symlink}}
{{nv ln | cpp/experimental/fs/current_path|filesystem::current_path}}
{{nv ln | cpp/experimental/fs/exists|filesystem::exists}}
{{nv ln | cpp/experimental/fs/equivalent|filesystem::equivalent}}
{{nv col next}}
{{nv ln | cpp/experimental/fs/file_size|filesystem::file_size}}
{{nv ln | cpp/experimental/fs/hard_link_count|filesystem::hard_link_count}}
{{nv ln | cpp/experimental/fs/last_write_time|filesystem::last_write_time}}
{{nv ln | cpp/experimental/fs/permissions|filesystem::permissions}}
{{nv ln | cpp/experimental/fs/read_symlink|filesystem::read_symlink}}
{{nv ln | cpp/experimental/fs/remove|filesystem::remove&lt;br&gt;filesystem::remove_all}}
{{nv ln | cpp/experimental/fs/rename|filesystem::rename}}
{{nv ln | cpp/experimental/fs/resize_file|filesystem::resize_file}}
{{nv ln | cpp/experimental/fs/space|filesystem::space}}
{{nv ln | cpp/experimental/fs/status|filesystem::status&lt;br&gt;filesystem::symlink_status}}
{{nv ln | cpp/experimental/fs/temp_directory_path|filesystem::temp_directory_path}}
{{nv col end}}
{{nv h2|File types}}
{{nv col begin}}
{{nv ln | cpp/experimental/fs/is_block_file|filesystem::is_block_file}}
{{nv ln | cpp/experimental/fs/is_character_file|filesystem::is_character_file}}
{{nv ln | cpp/experimental/fs/is_directory|filesystem::is_directory}}
{{nv ln | cpp/experimental/fs/is_empty|filesystem::is_empty}}
{{nv ln | cpp/experimental/fs/status_known|filesystem::status_known}}
{{nv col next}}
{{nv ln | cpp/experimental/fs/is_fifo|filesystem::is_fifo}}
{{nv ln | cpp/experimental/fs/is_other|filesystem::is_other}}
{{nv ln | cpp/experimental/fs/is_regular_file|filesystem::is_regular_file}}
{{nv ln | cpp/experimental/fs/is_socket|filesystem::is_socket}}
{{nv ln | cpp/experimental/fs/is_symlink|filesystem::is_symlink}}
{{nv col end}}
{{nv end}}</text>
      <sha1>gs5qrhqiilwbs2wgtnxvikhz2n1smi1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/navbar heading</title>
    <ns>10</ns>
    <id>13305</id>
    <revision>
      <id>68683</id>
      <parentid>68365</parentid>
      <timestamp>2014-03-19T00:45:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="44">[[cpp/experimental/fs | Filesystem library]]</text>
      <sha1>jxd0nq57djl5yxphu93r7nmh0ayhwin</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc append</title>
    <ns>10</ns>
    <id>13306</id>
    <revision>
      <id>68367</id>
      <parentid>68366</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/experimental/fs/path/append | title=append&lt;br/&gt;operator/{{=}} | appends elements to the path}}</text>
      <sha1>kxr1nmjq7dy8vrahiuusbu6hw8jtjao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc assign</title>
    <ns>10</ns>
    <id>13307</id>
    <revision>
      <id>68369</id>
      <parentid>68368</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="68">{{dsc mem fun | cpp/experimental/fs/path/assign | assigns contents}}</text>
      <sha1>qz8gnuxc74j3w1fljavr03sa1tbalf7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc begin</title>
    <ns>10</ns>
    <id>13308</id>
    <revision>
      <id>77127</id>
      <parentid>68371</parentid>
      <timestamp>2015-03-16T14:51:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>end should merge with this one</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem fun | cpp/experimental/fs/path/begin | title=begin&lt;br&gt;end| iterator access to the path as a sequence of elements}}</text>
      <sha1>fg24mc96rsvawtnw0juk9dmv9euatcb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc c str</title>
    <ns>10</ns>
    <id>13309</id>
    <revision>
      <id>68373</id>
      <parentid>68372</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/experimental/fs/path/c_str | returns the native version of the path }}</text>
      <sha1>5os0ge8p87yt45gn1i1s470r48hrppy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc clear</title>
    <ns>10</ns>
    <id>13310</id>
    <revision>
      <id>68375</id>
      <parentid>68374</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/experimental/fs/path/clear | erases the contents }}</text>
      <sha1>byiy9gfvv6025rd1rzd8ir7jtsh0h5l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc compare</title>
    <ns>10</ns>
    <id>13311</id>
    <revision>
      <id>68377</id>
      <parentid>68376</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/experimental/fs/path/compare | compares the lexical representations of two paths lexicographically}}</text>
      <sha1>bdibplq25x0bsnsrqsnr42pgzodqcdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc concat</title>
    <ns>10</ns>
    <id>13312</id>
    <revision>
      <id>78010</id>
      <parentid>68379</parentid>
      <timestamp>2015-04-23T21:08:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention separator</comment>
      <text xml:space="preserve" bytes="150">{{dsc mem fun | cpp/experimental/fs/path/concat | title=concat&lt;br/&gt;operator+{{=}} | concatenates two paths without introducing a directory separator}}</text>
      <sha1>gf4vz127b93f7mo1za7h3vwv08fbxlv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc constructor</title>
    <ns>10</ns>
    <id>13313</id>
    <revision>
      <id>68381</id>
      <parentid>68380</parentid>
      <timestamp>2014-03-19T00:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem ctor | cpp/experimental/fs/path/path | constructs a {{tt|path}}}}</text>
      <sha1>69anpce93u80wqmpsdp2likox9nmjlt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc destructor</title>
    <ns>10</ns>
    <id>13314</id>
    <revision>
      <id>68383</id>
      <parentid>68382</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem dtor | cpp/experimental/fs/path/~path | destroys a {{tt|path}} object}}</text>
      <sha1>exruayy7cripzvh8plibj9krh6jritz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc empty</title>
    <ns>10</ns>
    <id>13315</id>
    <revision>
      <id>68385</id>
      <parentid>68384</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/experimental/fs/path/empty | checks if the path is empty}}</text>
      <sha1>rza32dlwu0mex3bzvvs0l60jdf9nqrw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc extension</title>
    <ns>10</ns>
    <id>13317</id>
    <revision>
      <id>68389</id>
      <parentid>68388</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem fun | cpp/experimental/fs/path/extension | returns the file extension path component}}</text>
      <sha1>kykzys0qgb995e095rs5sbqow0xs96f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc filename</title>
    <ns>10</ns>
    <id>13318</id>
    <revision>
      <id>68391</id>
      <parentid>68390</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/experimental/fs/path/filename | returns the filename path component}}</text>
      <sha1>irw0d6xpsd13258vvy1pio0mw2xdk9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc generic string</title>
    <ns>10</ns>
    <id>13319</id>
    <revision>
      <id>68393</id>
      <parentid>68392</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="233">{{dsc mem fun | cpp/experimental/fs/path/generic_string | title=generic_string&lt;br/&gt;generic_wstring&lt;br/&gt;generic_u8string&lt;br/&gt;generic_u16string&lt;br/&gt;generic_u32string | returns the path in generic pathname format converted to a string}}</text>
      <sha1>khh2mxriyqrc4a7erntcc2dghwx36v8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc has path</title>
    <ns>10</ns>
    <id>13320</id>
    <revision>
      <id>68395</id>
      <parentid>68394</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="260">{{dsc mem fun | cpp/experimental/fs/path/has_path | title=has_root_path&lt;br/&gt;has_root_name&lt;br/&gt;has_root_directory&lt;br/&gt;has_relative_path&lt;br/&gt;has_parent_path&lt;br/&gt;has_filename&lt;br/&gt;has_stem&lt;br/&gt;has_extension | checks if the corresponding path element is not empty}}</text>
      <sha1>5mqx0lmv1d8pvnry40o8rxmddi6o98m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc is absrel</title>
    <ns>10</ns>
    <id>13321</id>
    <revision>
      <id>68397</id>
      <parentid>68396</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="160">{{dsc mem fun | cpp/experimental/fs/path/is_absrel | title=is_absolute&lt;br/&gt;is_relative | checks if {{lc|root_path()}} uniquely identifies file system location}}</text>
      <sha1>ipd3o9y18dmmv8gkbxyg0galc8w1ppj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc make preferred</title>
    <ns>10</ns>
    <id>13322</id>
    <revision>
      <id>68399</id>
      <parentid>68398</parentid>
      <timestamp>2014-03-19T00:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/experimental/fs/path/make_preferred | converts directory separators to preferred directory separator}}</text>
      <sha1>mwv72ou6dhw6uwepdvyl2xz4mo6ev5e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc native</title>
    <ns>10</ns>
    <id>13323</id>
    <revision>
      <id>77123</id>
      <parentid>68401</parentid>
      <timestamp>2015-03-16T14:39:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c_str should be merged in here</comment>
      <text xml:space="preserve" bytes="140">{{dsc mem fun | cpp/experimental/fs/path/native | title=c_str&lt;br&gt;native&lt;br/&gt;operator string_type | returns the native version of the path }}</text>
      <sha1>1rfigu2oxqf11ezai7f7xh5ymv0wz6l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc operator +=</title>
    <ns>10</ns>
    <id>13326</id>
    <revision>
      <id>68407</id>
      <parentid>68406</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/experimental/fs/path/operator+{{=}} | appends elements to the path}}</text>
      <sha1>fqn65f5jaxig5cy5yp6hbgdb5c4b5qs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc operator cmp</title>
    <ns>10</ns>
    <id>13327</id>
    <revision>
      <id>68409</id>
      <parentid>68408</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="210">{{dsc fun | cpp/experimental/fs/path/operator_cmp | title=operator{{==}}&lt;br/&gt;operator!{{=}}&lt;br/&gt;operator&amp;lt;&lt;br/&gt;operator&amp;lt;{{=}}&lt;br/&gt;operator&amp;gt;&lt;br/&gt;operator&amp;gt;{{=}} | lexicographically compares two paths}}</text>
      <sha1>fabrtt6qdmkli8duw3h5xgnzm3q2ru6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>13328</id>
    <revision>
      <id>68411</id>
      <parentid>68410</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="147">{{dsc fun | cpp/experimental/fs/path/operator_ltltgtgt | title=operator&amp;lt;&amp;lt;&lt;br/&gt;operator&amp;gt;&amp;gt; | performs stream input and output on a path}}</text>
      <sha1>0lqa4n0i8j0b187f1usjrptwvapzqcr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc operator slash</title>
    <ns>10</ns>
    <id>13329</id>
    <revision>
      <id>68413</id>
      <parentid>68412</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/experimental/fs/path/operator_slash | title=operator/ | concatenates two paths}}</text>
      <sha1>efuw2rhkiqjd9x90hdn0kcdgp59b78m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc operator slash=</title>
    <ns>10</ns>
    <id>13330</id>
    <revision>
      <id>68415</id>
      <parentid>68414</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem fun | cpp/experimental/fs/path/operator_slash{{=}} | title=operator/{{=}} | appends elements to the path}}</text>
      <sha1>7k0m7a4oj9t90j0s43fhadzfl6ydt5f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc operator/</title>
    <ns>10</ns>
    <id>13324</id>
    <revision>
      <id>78009</id>
      <parentid>68403</parentid>
      <timestamp>2015-04-23T21:08:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention separator</comment>
      <text xml:space="preserve" bytes="123">{{dsc fun | cpp/experimental/fs/path/operator_slash | title=operator/ | concatenates two paths with a directory separator}}</text>
      <sha1>at5hdy2lok0zvnh89pee1pnkqki978f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc operator=</title>
    <ns>10</ns>
    <id>13325</id>
    <revision>
      <id>68405</id>
      <parentid>68404</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/experimental/fs/path/operator{{=}} | assigns another path}}</text>
      <sha1>rqy0a4slnmspg1g4u53x31ego33fu20</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc parent path</title>
    <ns>10</ns>
    <id>13331</id>
    <revision>
      <id>68417</id>
      <parentid>68416</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/experimental/fs/path/parent_path | returns the path of the parent path}}</text>
      <sha1>5rdyyyzxmnu4i7el0nc2eetoot2ckhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc relative path</title>
    <ns>10</ns>
    <id>13332</id>
    <revision>
      <id>68419</id>
      <parentid>68418</parentid>
      <timestamp>2014-03-19T00:36:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/experimental/fs/path/relative_path | returns path relative to the root path}}</text>
      <sha1>e5w5gwwqalofcpi0j7os7bab1glskwo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc remove filename</title>
    <ns>10</ns>
    <id>13333</id>
    <revision>
      <id>68421</id>
      <parentid>68420</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/experimental/fs/path/remove_filename | removes filename path component}}</text>
      <sha1>tga4jwfl8mzrw6anj6eecmg2205cqv8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc replace extension</title>
    <ns>10</ns>
    <id>13334</id>
    <revision>
      <id>68423</id>
      <parentid>68422</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/experimental/fs/path/replace_extension | replaces the extension}}</text>
      <sha1>l9t96vf6g4k91d45wwsurcavs1xjhgi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc replace filename</title>
    <ns>10</ns>
    <id>13335</id>
    <revision>
      <id>68698</id>
      <parentid>68425</parentid>
      <timestamp>2014-03-19T13:49:43Z</timestamp>
      <contributor>
        <ip>159.178.227.1</ip>
      </contributor>
      <comment>fix typo</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/experimental/fs/path/replace_filename | replaces the last path component with another path}}</text>
      <sha1>tj2w14v9o076z3wr09fcn7s10wy9fsm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc root directory</title>
    <ns>10</ns>
    <id>13336</id>
    <revision>
      <id>68427</id>
      <parentid>68426</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun | cpp/experimental/fs/path/root_directory | returns the root directory of the path, if present}}</text>
      <sha1>bzkusw9w9oo3dqpk591w0336qdr2laf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc root name</title>
    <ns>10</ns>
    <id>13337</id>
    <revision>
      <id>68429</id>
      <parentid>68428</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/experimental/fs/path/root_name | returns the root-name of the path, if present}}</text>
      <sha1>0pcznf1vwsb8a4nfbxpx461wqzvtiv2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc root path</title>
    <ns>10</ns>
    <id>13338</id>
    <revision>
      <id>68431</id>
      <parentid>68430</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/experimental/fs/path/root_path | returns the root path of the path, if present}}</text>
      <sha1>pq5g9whrf61ky2by50kypfbryd8230y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc stem</title>
    <ns>10</ns>
    <id>13339</id>
    <revision>
      <id>68433</id>
      <parentid>68432</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/experimental/fs/path/stem | returns the stem path component}}</text>
      <sha1>qmeb9ajpxlxjr43bnq9lpmye4h0qza9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc string</title>
    <ns>10</ns>
    <id>13340</id>
    <revision>
      <id>68435</id>
      <parentid>68434</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="184">{{dsc mem fun | cpp/experimental/fs/path/string | title=string&lt;br/&gt;wstring&lt;br/&gt;u8string&lt;br/&gt;u16string&lt;br/&gt;u32string | returns the path in native pathname format converted to a string}}</text>
      <sha1>s3t53j597elk83n221hzzm8xzga9h6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc swap</title>
    <ns>10</ns>
    <id>13341</id>
    <revision>
      <id>68437</id>
      <parentid>68436</parentid>
      <timestamp>2014-03-19T00:36:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="65">{{dsc mem fun | cpp/experimental/fs/path/swap | swaps two paths}}</text>
      <sha1>pn2w8fjw1ecrcqoj20i2gcxgx5ush58</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc swap2</title>
    <ns>10</ns>
    <id>13342</id>
    <revision>
      <id>77993</id>
      <parentid>68439</parentid>
      <timestamp>2015-04-23T15:16:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>no such thing as &quot;std::fs&quot;</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | cpp/experimental/fs/path/swap2 | title=swap{{dsc small|(std::experimental::filesystem::path)}} | swaps two paths}}</text>
      <sha1>olane6hdn1dephouap7s4gug9eax93p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/dsc u8path</title>
    <ns>10</ns>
    <id>13343</id>
    <revision>
      <id>68441</id>
      <parentid>68440</parentid>
      <timestamp>2014-03-19T00:36:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | cpp/experimental/fs/path/u8path | creates a {{tt|path}} from a UTF-8 encoded source}}</text>
      <sha1>ompx12553b85cxsiner53l65dlaiuf7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/navbar</title>
    <ns>10</ns>
    <id>13344</id>
    <revision>
      <id>77141</id>
      <parentid>68443</parentid>
      <timestamp>2015-03-16T20:49:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+TSes at level 2</comment>
      <text xml:space="preserve" bytes="362">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content

|heading3 = cpp/experimental/fs/navbar heading
|content3 = cpp/experimental/fs/navbar content

|heading4 = cpp/experimental/fs/path/navbar heading
|content4 = cpp/experimental/fs/path/navbar content
}}</text>
      <sha1>j01m773i1efmwwsovgqo16qoe5v2rnp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/navbar content</title>
    <ns>10</ns>
    <id>14069</id>
    <revision>
      <id>77991</id>
      <timestamp>2015-04-23T14:59:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2737">{{nv begin}}
{{nv h2 | Member functions}}
{{nv col begin}}
{{nv ln | cpp/experimental/fs/path/path|path::path}}
{{nv ln | cpp/experimental/fs/path/~path|path::~path}}
{{nv ln | cpp/experimental/fs/path/operator{{=}}|path::operator{{=}}}}
{{nv ln | cpp/experimental/fs/path/assign|path::assign}}
{{nv ln | cpp/experimental/fs/path/append|path::append|operator /{{=}}}}
{{nv ln | cpp/experimental/fs/path/concat|path::concat|operator +{{=}}}}
{{nv ln | cpp/experimental/fs/path/clear|path::clear}}
{{nv ln | cpp/experimental/fs/path/make_preferred|path::make_preferred}}
{{nv ln | cpp/experimental/fs/path/remove_filename|path::remove_filename}}
{{nv ln | cpp/experimental/fs/path/replace_filename|path::replace_filename}}
{{nv ln | cpp/experimental/fs/path/replace_extension|path::replace_extension}}
{{nv ln | cpp/experimental/fs/path/swap|path::swap}}
{{nv ln | cpp/experimental/fs/path/compare|path::compare}}
{{nv col next}}
{{nv ln | cpp/experimental/fs/path/native|path::c_str|path::native|operator string_type}}
{{nv ln | cpp/experimental/fs/path/string|path::string|path::u8string|path::u16string|path::u32string|path::wstring}}
{{nv ln | cpp/experimental/fs/path/generic_string|path::generic_string|path::generic_u8string|path::generic_u16string|path::generic_u32string|path::generic_wstring}}
{{nv ln | cpp/experimental/fs/path/begin|path::begin|path::end}}
{{nv col end}}
{{nv h2|Path decomposition}}
{{nv col begin}}
{{nv ln | cpp/experimental/fs/path/root_name|path::root_name}}
{{nv ln | cpp/experimental/fs/path/root_directory|path::root_directory}}
{{nv ln | cpp/experimental/fs/path/root_path|path::root_path}}
{{nv ln | cpp/experimental/fs/path/relative_path|path::relative_path}}
{{nv ln | cpp/experimental/fs/path/parent_path|path::parent_path}}
{{nv ln | cpp/experimental/fs/path/filename|path::filename}}
{{nv ln | cpp/experimental/fs/path/stem|path::stem}}
{{nv ln | cpp/experimental/fs/path/extension|path::extension}}
{{nv ln | cpp/experimental/fs/path/empty|path::empty}}
{{nv col next}}
{{nv ln | cpp/experimental/fs/path/has_path|path::has_root_path|path::has_root_name|path::has_root_directory|path::has_relative_path|path::has_parent_path|path::has_filename|path::has_stem|path::has_extension}}
{{nv ln | cpp/experimental/fs/path/is_absrel|path::is_absolute|path::is_relative}}
{{nv col end}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/experimental/fs/path/swap2|swap(path)}}
{{nv ln | cpp/experimental/fs/path/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;|operator&lt;{{=}}|operator&gt;|operator&gt;{{=}}}}
{{nv ln | cpp/experimental/fs/path/operator_slash|operator/}}
{{nv ln | cpp/experimental/fs/path/operator_ltltgtgt|operator&lt;&lt;|operator&gt;&gt;}}
{{nv ln | cpp/experimental/fs/path/u8path|u8path}}
{{nv end}}</text>
      <sha1>9atsvuwoiawooqlz6hd1fi43j1yfyvf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/navbar heading</title>
    <ns>10</ns>
    <id>13345</id>
    <revision>
      <id>68678</id>
      <parentid>68445</parentid>
      <timestamp>2014-03-19T00:39:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ns is evident from the title</comment>
      <text xml:space="preserve" bytes="39">{{ltt|cpp/experimental/fs/path | path}}</text>
      <sha1>hbzn2vcm7rpsbxob0f82zddp4ujg0d6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/string example</title>
    <ns>10</ns>
    <id>14121</id>
    <revision>
      <id>78686</id>
      <timestamp>2015-06-03T01:49:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1088">{{example|code=
#include &lt;cstdio&gt;
#include &lt;clocale&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));

    fs::path p = fs::u8path(u8&quot;要らない.txt&quot;);

    // native string representation can be used with OS APIs
    std::ofstream(p) &lt;&lt; &quot;File contents&quot;; // this uses operator string()
    if(std::FILE* f = std::fopen(p.c_str(), &quot;r&quot;)) {
        int ch;
        while((ch=fgetc(f))!= EOF) putchar(ch);
        std::fclose(f);
    }

    // multibyte and wide representation can be used for output
    std::cout.imbue(std::locale());
    std::cout &lt;&lt; &quot;\nFile name in narrow multibyte encoding: &quot;
              &lt;&lt; p.string() &lt;&lt; '\n';

    std::wcerr.imbue(std::locale());
    std::wcerr &lt;&lt; &quot;File name in wide encoding: &quot;
               &lt;&lt; p.wstring() &lt;&lt; '\n';

    fs::remove(p);
}
|output=
File contents
File name in narrow multibyte encoding: 要らない.txt
File name in wide encoding: 要らない.txt
}}</text>
      <sha1>d3a79ebf245cm98ifjsge6bb3dp9xki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/path/title</title>
    <ns>10</ns>
    <id>13346</id>
    <revision>
      <id>68684</id>
      <parentid>68447</parentid>
      <timestamp>2014-03-19T00:47:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="127">&lt;onlyinclude&gt;{{cpp/title | n=experimental::filesystem::path::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>ar2fat2kpzwxv9kfvfcp28kgsq7miyv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/permissions example</title>
    <ns>10</ns>
    <id>14061</id>
    <revision>
      <id>87508</id>
      <parentid>87505</parentid>
      <timestamp>2016-08-30T13:46:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>match output</comment>
      <text xml:space="preserve" bytes="1468">{{example|code=
#include &lt;fstream&gt;
#include &lt;bitset&gt;
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

void demo_perms(fs::perms p)
{
     std::cout &lt;&lt; ((p &amp; fs::perms::owner_read) != fs::perms::none ? &quot;r&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::owner_write) != fs::perms::none ? &quot;w&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::owner_exec) != fs::perms::none ? &quot;x&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::group_read) != fs::perms::none ? &quot;r&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::group_write) != fs::perms::none ? &quot;w&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::group_exec) != fs::perms::none ? &quot;x&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::others_read) != fs::perms::none ? &quot;r&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::others_write) != fs::perms::none ? &quot;w&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::others_exec) != fs::perms::none ? &quot;x&quot; : &quot;-&quot;)
              &lt;&lt; '\n';
}

int main()
{
    std::ofstream(&quot;test.txt&quot;); // create file

    std::cout &lt;&lt; &quot;Created file with permissions: &quot;;
    demo_perms(fs::status(&quot;test.txt&quot;).permissions());

    fs::permissions(&quot;test.txt&quot;, fs::perms::add_perms {{!}}
                                fs::perms::owner_all {{!}} fs::perms::group_all);

    std::cout &lt;&lt; &quot;After adding o+rwx and g+rwx:  &quot;;
    demo_perms(fs::status(&quot;test.txt&quot;).permissions());

    fs::remove(&quot;test.txt&quot;);
}
|p=true
|output=
Created file with permissions: rw-r--r--
After adding o+rwx and g+rwx:  rwxrwxr--
}}</text>
      <sha1>5ufvp7s5w7w22qwvmqbs7w779ut409j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc begin</title>
    <ns>10</ns>
    <id>14078</id>
    <revision>
      <id>78160</id>
      <timestamp>2015-05-07T20:19:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="256">{{dsc fun | cpp/experimental/fs/recursive_directory_iterator/begin | title=filesystem::begin{{dsc small|(filesystem::recursive_directory_iterator)}}&lt;br&gt;filesystem::end{{dsc small|(filesystem::recursive_directory_iterator)}} | range-based for loop support}}</text>
      <sha1>hrn7yk5svizv7ve0g2fxny5984pfzck</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc constructor</title>
    <ns>10</ns>
    <id>13347</id>
    <revision>
      <id>68449</id>
      <parentid>68448</parentid>
      <timestamp>2014-03-19T00:36:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="140">{{dsc mem ctor | cpp/experimental/fs/recursive_directory_iterator/recursive_directory_iterator | constructs a recursive directory iterator}}</text>
      <sha1>jlskpc317uqsrnqp35gj2llvgprl2rs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc depth</title>
    <ns>10</ns>
    <id>13348</id>
    <revision>
      <id>68451</id>
      <parentid>68450</parentid>
      <timestamp>2014-03-19T00:36:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/depth | returns the current recursion depth}}</text>
      <sha1>53pj4sb35mclh6jc3g168xo4z02pxfq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc destructor</title>
    <ns>10</ns>
    <id>13349</id>
    <revision>
      <id>68453</id>
      <parentid>68452</parentid>
      <timestamp>2014-03-19T00:36:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="51">{{dsc mem dtor | nolink=true | default destructor}}</text>
      <sha1>pht56euirfx3859r0v6ael8a57qtkx3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc disable recursion pending</title>
    <ns>10</ns>
    <id>13350</id>
    <revision>
      <id>68455</id>
      <parentid>68454</parentid>
      <timestamp>2014-03-19T00:36:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/disable_recursion_pending | disables recursion until the next increment}}</text>
      <sha1>penerct343tr8as1pzyxkub6jqt4lt0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc increment</title>
    <ns>10</ns>
    <id>13351</id>
    <revision>
      <id>68457</id>
      <parentid>68456</parentid>
      <timestamp>2014-03-19T00:36:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/increment | title=increment&lt;br/&gt;operator++ | advances to the next entry}}</text>
      <sha1>c58ijtww4d25gdj1b5hv3kz94lkz495</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc operator*</title>
    <ns>10</ns>
    <id>13352</id>
    <revision>
      <id>68459</id>
      <parentid>68458</parentid>
      <timestamp>2014-03-19T00:36:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="141">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/operator* | title=operator*&lt;br/&gt;operator-&gt; | accesses the pointed-to entry}}</text>
      <sha1>lj9chjisp2jqpufgttrwj3tlzj4d0df</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc operator=</title>
    <ns>10</ns>
    <id>13353</id>
    <revision>
      <id>68461</id>
      <parentid>68460</parentid>
      <timestamp>2014-03-19T00:37:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/operator{{=}} | assigns contents}}</text>
      <sha1>fqqo4ivtux6c326b5kb2qmof8qk701m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc options</title>
    <ns>10</ns>
    <id>13354</id>
    <revision>
      <id>68463</id>
      <parentid>68462</parentid>
      <timestamp>2014-03-19T00:37:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/options | returns the currently active options that affect the iteration}}</text>
      <sha1>a83htxodzz8yq8qpc6zr0vxk0x1ntl1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc pop</title>
    <ns>10</ns>
    <id>13355</id>
    <revision>
      <id>68465</id>
      <parentid>68464</parentid>
      <timestamp>2014-03-19T00:37:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="131">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/pop | moves the iterator one level up in the directory hierarchy}}</text>
      <sha1>otjykq8y10a800jkp6xgqdt9we8cds7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/dsc recursion pending</title>
    <ns>10</ns>
    <id>13356</id>
    <revision>
      <id>68467</id>
      <parentid>68466</parentid>
      <timestamp>2014-03-19T00:37:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="153">{{dsc mem fun | cpp/experimental/fs/recursive_directory_iterator/recursion_pending | checks whether the recursion is disabled for the current directory}}</text>
      <sha1>kwbrp0ikyssuns53x0heq7tq7rwyysf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/navbar</title>
    <ns>10</ns>
    <id>13357</id>
    <revision>
      <id>78163</id>
      <parentid>68469</parentid>
      <timestamp>2015-05-07T21:27:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+level 2</comment>
      <text xml:space="preserve" bytes="410">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content

|heading3 = cpp/experimental/fs/navbar heading
|content3 = cpp/experimental/fs/navbar content

|heading4 = cpp/experimental/fs/recursive_directory_iterator/navbar heading
|content4 = cpp/experimental/fs/recursive_directory_iterator/navbar content
}}</text>
      <sha1>2enxjayya69zf0x1i2bylxyxcv2iulf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/navbar content</title>
    <ns>10</ns>
    <id>14115</id>
    <revision>
      <id>78614</id>
      <timestamp>2015-05-29T19:06:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1371">{{nv begin}}
{{nv h2 | Member functions}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/recursive_directory_iterator|recursive_directory_iterator::recursive_directory_iterator}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/operator*|recursive_directory_iterator::operator*|recursive_directory_iterator::operator-&gt;}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/options|recursive_directory_iterator::options}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/depth|recursive_directory_iterator::depth}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/recursion_pending|recursive_directory_iterator::recursion_pending}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/operator{{=}}|recursive_directory_iterator::operator{{=}}}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/increment|recursive_directory_iterator::increment|recursive_directory_iterator::operator++}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/pop|recursive_directory_iterator::pop}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/disable_recursion_pending|recursive_directory_iterator::disable_recursion_pending}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/experimental/fs/recursive_directory_iterator/begin|begin(recursive_directory_iterator)|end(recursive_directory_iterator)}}
{{nv end}}</text>
      <sha1>lpxeg29w223j9xrd6bimdrazcrhnxhq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/navbar heading</title>
    <ns>10</ns>
    <id>13358</id>
    <revision>
      <id>68679</id>
      <parentid>68471</parentid>
      <timestamp>2014-03-19T00:40:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ns is evident from the title</comment>
      <text xml:space="preserve" bytes="89">{{ltt | cpp/experimental/fs/recursive_directory_iterator | recursive_directory_iterator}}</text>
      <sha1>t3a9y85tevh6zf9n6om179p5mij7c1p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/recursive directory iterator/title</title>
    <ns>10</ns>
    <id>13359</id>
    <revision>
      <id>68689</id>
      <parentid>68473</parentid>
      <timestamp>2014-03-19T00:48:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="151">&lt;onlyinclude&gt;{{cpp/title | n=experimental::filesystem::recursive_directory_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>rmhc3ob1qfu8t9tqrmxgs45pnp16rvs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/space example</title>
    <ns>10</ns>
    <id>14052</id>
    <revision>
      <id>77601</id>
      <timestamp>2015-03-31T18:56:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Created page with &quot;{{example|code= #include &lt;iostream&gt; #include &lt;experimental/filesystem&gt; namespace fs = std::experimental::filesystem; int main() {     fs::space_info devi = fs::space(&quot;/dev/nul...&quot;</comment>
      <text xml:space="preserve" bytes="680">{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::space_info devi = fs::space(&quot;/dev/null&quot;);
    fs::space_info tmpi = fs::space(&quot;/tmp&quot;);
    
    std::cout &lt;&lt; &quot;.        Capacity       Free      Available\n&quot;
              &lt;&lt; &quot;/dev:   &quot; &lt;&lt; devi.capacity &lt;&lt; &quot;   &quot;
              &lt;&lt; devi.free &lt;&lt; &quot;   &quot; &lt;&lt; devi.available  &lt;&lt; '\n'
              &lt;&lt; &quot;/tmp: &quot; &lt;&lt; tmpi.capacity &lt;&lt; &quot; &quot;
              &lt;&lt; tmpi.free &lt;&lt; &quot; &quot; &lt;&lt; tmpi.available  &lt;&lt; '\n';
}
|p=true
|output=
.         Capacity       Free      Available
/dev:   4175114240   4175110144   4175110144
/tmp: 420651237376 411962273792 390570749952
}}</text>
      <sha1>3c6hhdw003rb9ygpenr62n9sb2mdq0v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/status example</title>
    <ns>10</ns>
    <id>14041</id>
    <revision>
      <id>77196</id>
      <parentid>77195</parentid>
      <timestamp>2015-03-17T18:23:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>comments</comment>
      <text xml:space="preserve" bytes="2153">{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cstring&gt;
#include &lt;experimental/filesystem&gt;
#include &lt;unistd.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;sys/un.h&gt;
#include &lt;sys/stat.h&gt;

namespace fs = std::experimental::filesystem;

void demo_status(const fs::path&amp; p, fs::file_status s)
{
    std::cout &lt;&lt; p;
    // alternative: switch(s.type()) { case fs::file_type::regular: ...}
    if(fs::is_regular_file(s)) std::cout &lt;&lt; &quot; is a regular file\n&quot;;
    if(fs::is_directory(s)) std::cout &lt;&lt; &quot; is a directory\n&quot;;
    if(fs::is_block_file(s)) std::cout &lt;&lt; &quot; is a block device\n&quot;;
    if(fs::is_character_file(s)) std::cout &lt;&lt; &quot; is a character device\n&quot;;
    if(fs::is_fifo(s)) std::cout &lt;&lt; &quot; is a named IPC pipe\n&quot;;
    if(fs::is_socket(s)) std::cout &lt;&lt; &quot; is a named IPC socket\n&quot;;
    if(fs::is_symlink(s)) std::cout &lt;&lt; &quot; is a symlink\n&quot;;
    if(!fs::exists(s)) std::cout &lt;&lt; &quot; does not exist\n&quot;;
}
int main()
{
    // create files of different kinds
    fs::create_directory(&quot;sandbox&quot;);
    std::ofstream(&quot;sandbox/file&quot;); // create regular file
    fs::create_directory(&quot;sandbox/dir&quot;);
    mkfifo(&quot;sandbox/pipe&quot;, 0644);
    struct sockaddr_un addr;
    addr.sun_family = AF_UNIX;
    std::strcpy(addr.sun_path, &quot;sandbox/sock&quot;);
    int fd = socket(PF_UNIX, SOCK_STREAM, 0);
    bind(fd, (struct sockaddr*)&amp;addr, sizeof addr);
    fs::create_symlink(&quot;file&quot;, &quot;sandbox/symlink&quot;);

    // demo different status accessors
    for(auto it = fs::directory_iterator(&quot;sandbox&quot;); it != fs::directory_iterator(); ++it)
        demo_status(*it, it-&gt;symlink_status()); // use cached status from directory entry
    demo_status(&quot;dev/null&quot;, fs::status(&quot;/dev/null&quot;)); // direct calls to status
    demo_status(&quot;dev/sda&quot;, fs::status(&quot;/dev/sda&quot;));
    demo_status(&quot;sandbox/no&quot;, fs::status(&quot;/sandbox/no&quot;));

    // cleanup
    close(fd);
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/file&quot; is a regular file
&quot;sandbox/dir&quot; is a directory
&quot;sandbox/pipe&quot; is a named IPC pipe
&quot;sandbox/sock&quot; is a named IPC socket
&quot;sandbox/symlink&quot; is a symlink
&quot;dev/null&quot; is a character device
&quot;dev/sda&quot; is a block device
&quot;sandbox/no&quot; does not exist
}}</text>
      <sha1>dyumt5w00m1uobxtev7b0u9m8ok451s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/time example</title>
    <ns>10</ns>
    <id>14054</id>
    <revision>
      <id>77617</id>
      <parentid>77616</parentid>
      <timestamp>2015-03-31T19:54:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="983">{{example|code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;iomanip&gt;
#include &lt;fstream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
using namespace std::chrono_literals;
int main()
{
    fs::path p = fs::current_path() / &quot;example.bin&quot;;
    std::ofstream(p.c_str()).put('a'); // create file
    auto ftime = fs::last_write_time(p);

    std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime); // assuming system_clock
    std::cout &lt;&lt; &quot;File write time is &quot; &lt;&lt; std::asctime(std::localtime(&amp;cftime)) &lt;&lt; '\n';

    fs::last_write_time(p, ftime + 1h); // move file write time 1 hour to the future
    ftime = fs::last_write_time(p); // read back from the filesystem

    cftime = decltype(ftime)::clock::to_time_t(ftime);
    std::cout &lt;&lt; &quot;File write time is &quot; &lt;&lt; std::asctime(std::localtime(&amp;cftime)) &lt;&lt; '\n';
    fs::remove(p);
}
|p=true
|output=
File write time is Tue Mar 31 19:47:04 2015

File write time is Tue Mar 31 20:47:04 2015
}}</text>
      <sha1>ktk6s8zhzdcd79wwz0hq85vdrirhn3z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fs/title</title>
    <ns>10</ns>
    <id>13360</id>
    <revision>
      <id>68475</id>
      <parentid>68474</parentid>
      <timestamp>2014-03-19T00:37:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="121">&lt;onlyinclude&gt;{{cpp/title | n=experimental::filesystem::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>cn40gsjoxscq80wy5ilato0tfgig3l7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/dsc constructor</title>
    <ns>10</ns>
    <id>14410</id>
    <revision>
      <id>80167</id>
      <timestamp>2015-07-30T23:50:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem ctor | cpp/experimental/function/function | constructs a new {{tt|std::experimental::function}} instance}}</text>
      <sha1>6fzixicq85hcoue6j2zow539q7pxoiw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/dsc get memory resource</title>
    <ns>10</ns>
    <id>14415</id>
    <revision>
      <id>80172</id>
      <timestamp>2015-07-30T23:52:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="147">{{dsc mem fun | cpp/experimental/function/get_memory_resource | retrieves a pointer to the memory resource used by this object to allocate memory}}</text>
      <sha1>ne4ozdqftd6v9q6elofgbxv74aapwg6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/dsc operator cmp</title>
    <ns>10</ns>
    <id>14417</id>
    <revision>
      <id>80174</id>
      <timestamp>2015-07-30T23:55:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{dsc tfun | cpp/experimental/function/operator_cmp | title=operator==&lt;br&gt;operator!= | compares an {{lc|std::experimental::function}} with {{c|nullptr}}}}</text>
      <sha1>itbzon9y9yug2v9f7v90akcuj902hdh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/dsc operator=</title>
    <ns>10</ns>
    <id>14411</id>
    <revision>
      <id>80168</id>
      <timestamp>2015-07-30T23:50:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/experimental/function/operator{{=}} | assigns a new target}}</text>
      <sha1>rntakqtu2qgb137mtxvfgj0a9gkp7jz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/dsc swap</title>
    <ns>10</ns>
    <id>14412</id>
    <revision>
      <id>80169</id>
      <timestamp>2015-07-30T23:50:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/experimental/function/swap | swaps the contents}}</text>
      <sha1>9kjx422288l0wbubyu9k88jx7k9wuu9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/dsc swap2</title>
    <ns>10</ns>
    <id>14414</id>
    <revision>
      <id>80171</id>
      <timestamp>2015-07-30T23:51:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">{{dsc tfun | cpp/experimental/function/swap2 | title=std::experimental::swap{{dsc small|(std::experimental::function)}} | specializes the {{tt|swap}} algorithm}}</text>
      <sha1>qmyaexfaw3jdv9awzpqgl4x00mwl49m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/dsc uses allocator</title>
    <ns>10</ns>
    <id>14413</id>
    <revision>
      <id>80170</id>
      <timestamp>2015-07-30T23:51:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="186">{{dsc ptclass | cpp/experimental/function/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::experimental::function&gt;}} | specializes the {{lc|std::uses_allocator}} type trait }}</text>
      <sha1>dxom4iw98av8st6tjrofqrlauyi5kuh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/function/title</title>
    <ns>10</ns>
    <id>14425</id>
    <revision>
      <id>80221</id>
      <timestamp>2015-07-31T22:37:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=experimental::function::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>2rine1eef8z05d0sd6ejhwjq17if07g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/fund conc disambiguate</title>
    <ns>10</ns>
    <id>14396</id>
    <revision>
      <id>80160</id>
      <parentid>80148</parentid>
      <timestamp>2015-07-30T22:35:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="764">{{cpp/experimental/title|{{{1}}}}}
{{cpp/experimental/navbar}}

{{tt|std::experimental::{{{1}}}}} may refer to:
* [[cpp/experimental/lib extensions/{{{1}}}|{{tt|std::experimental::fundamentals_v1::{{{1}}}}} or {{tt|std::experimental::fundamentals_v2::{{{1}}}}}]], a modified version of {{lc|std::{{{1}}}}} provided by the [[cpp/experimental/lib extensions|library fundamentals TS]] with support for type-erased allocators;
* [[cpp/experimental/concurrency/{{{1}}}|{{tt|std::experimental::concurrency_v1::{{{1}}}}}]], a modified version of {{tt|std::{{{1}}}}} provided by the [[cpp/experimental/concurrency|concurrency TS]] whose {{tt|get_future()}} member function returns the improved {{ltt|cpp/experimental/future|std::experimental::future}} provided by that TS.</text>
      <sha1>5wngukd3hvmomzaisb6i52y6gwn3w3j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/dsc constructor</title>
    <ns>10</ns>
    <id>14129</id>
    <revision>
      <id>91056</id>
      <parentid>85462</parentid>
      <timestamp>2017-03-16T19:18:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>since we have them all now</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem ctor | cpp/experimental/future/future | construct a {{tt|future}} object }}</text>
      <sha1>l08qrii7zwbwpr2rn5340ehg5ijk5cg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/dsc get</title>
    <ns>10</ns>
    <id>15444</id>
    <redirect title="Template:cpp/experimental/future/dsc then" />
    <revision>
      <id>85446</id>
      <timestamp>2016-04-21T19:54:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/experimental/future/dsc get]] to [[Template:cpp/experimental/future/dsc then]]: s/get/then</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/experimental/future/dsc then]]</text>
      <sha1>0zmuwzj09nuo4l3ic6khte96myzywja</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/dsc is ready</title>
    <ns>10</ns>
    <id>14131</id>
    <revision>
      <id>85463</id>
      <parentid>78834</parentid>
      <timestamp>2016-04-21T20:02:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rm note</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/experimental/future/is_ready | checks if the shared state is ready}}</text>
      <sha1>bipnvxtsoap59tgrhd4wa49xivjjjsq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/dsc operator=</title>
    <ns>10</ns>
    <id>16208</id>
    <revision>
      <id>91057</id>
      <timestamp>2017-03-16T19:19:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/experimental/future/operator{{=}} | moves the future object}}</text>
      <sha1>p0a04id7hu8i8qanrqw77g2cb880jj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/dsc then</title>
    <ns>10</ns>
    <id>14130</id>
    <revision>
      <id>85464</id>
      <parentid>85445</parentid>
      <timestamp>2016-04-21T20:02:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/experimental/future/then | attaches a continuation to a future}}</text>
      <sha1>4tanhwx2sfeks6pq1ontf058qq04qb0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/future</title>
    <ns>10</ns>
    <id>15457</id>
    <revision>
      <id>91055</id>
      <parentid>91054</parentid>
      <timestamp>2017-03-16T19:16:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>qualify those too</comment>
      <text xml:space="preserve" bytes="2297">{{cpp/experimental/{{{1|}}}/title|{{{1|}}}}}
{{cpp/experimental/concurrency/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
{{{1}}}() noexcept;
}}
{{dcl | num=2 |
{{{1}}}(std::experimental::{{{1}}}&lt;T&gt;&amp;&amp; f) noexcept;
}}
{{dcl | num=3 |1=
{{#switch:{{{1|future}}}|future=
future(const std::experimental::future&lt;T&gt;&amp;) = delete;
|shared_future=
shared_future(const std::experimental::shared_future&lt;T&gt;&amp; f);
}}
}}
{{dcl | num=4 |
{{{1}}}(std::experimental::future&lt;std::experimental::{{{1}}}&lt;T&gt;&gt; &amp;&amp; other) noexcept;
}}
{{#ifeq:{{{1}}}|shared_future|
{{dcl | num=5 |1=
shared_future(std::experimental::future&lt;T&gt;&amp;&amp; f) noexcept;
}}
}}
{{dcl end}}

@1@ Default constructor. Constructs an empty {{tt|{{{1}}}}} object that does not refer to a shared state.
@2@ Constructs a {{tt|{{{1}}}}} object, transferring the shared state held by {{tt|f}}, if any. After construction, {{c|f.valid()}} is {{c|false}}.
@3@ {{#switch:{{{1|future}}}|future=Copy constructor is deleted. {{tt|future}}} cannot be copied.|shared_future=Constructs a shared future that refers to the same shared state as {{tt|f}}, if any.}}
@4@ Constructs a {{tt|{{{1}}}}} object from the shared state referred to by {{tt|other}}. The resulting {{tt|{{{1}}}}} object becomes ready when one of the following happens:
* {{c|other}} and {{c|other.get()}} are both ready. The value or exception from {{c|other.get()}} is stored in the shared state associated with the resulting {{tt|{{{1}}}}} object.
* {{c|other}} is ready, but {{c|other.get()}} is invalid. An exception of type {{lc|std::future_error}} with an error condition of {{lc|std::future_errc::broken_promise}} is stored in the shared state associated with the resulting {{tt|{{{1}}}}} object.
@@After this constructor returns, {{c|1=valid() == true}} and {{c|1=other.valid() == false}}.
{{#ifeq:{{{1}}}|shared_future|
@5@ Constructs a {{tt|{{{1}}}}} object, transferring the shared state held by {{tt|f}}, if any. After construction, {{c|f.valid()}} is {{c|false}}.
}}
===Parameters===
{{par begin}}
{{par | f | another future object to initialize with}}
{{par | other | A {{tt|std::experimental::future}} object to unwrap}}
{{par end}}

===Example===
{{example|
 | code=
 | output=
}}

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc constructor| {{{1|}}} }}
{{dsc end}}</text>
      <sha1>b8m0ob9k20q2j0zf5y6etb2ja5pa9b7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/is ready</title>
    <ns>10</ns>
    <id>15454</id>
    <revision>
      <id>85479</id>
      <parentid>85474</parentid>
      <timestamp>2016-04-21T21:24:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>bah</comment>
      <text xml:space="preserve" bytes="529">{{cpp/experimental/{{{1|}}}/title|is_ready}}
{{cpp/experimental/concurrency/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 
bool is_ready() const;
}}
{{dcl end}}

Checks if the associated shared state is ready.

The behavior is undefined if {{c|valid()}} is {{c|false}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the associated shared state is ready, otherwise {{c|false}}.

===Example===
{{example|
 | code=
 | output=
}}

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc valid| {{{1|}}} }}
{{dsc end}}</text>
      <sha1>ailbg5etnrhje0h3v9t8homlflhjvsv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/then</title>
    <ns>10</ns>
    <id>15460</id>
    <revision>
      <id>85510</id>
      <parentid>85494</parentid>
      <timestamp>2016-04-22T20:42:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2531">{{cpp/experimental/{{{1|}}}/title|then}}
{{cpp/experimental/concurrency/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |
template &lt; class F &gt;
future&lt;/* see below */&gt; then(F&amp;&amp; func) {{#ifeq:{{{1}}}|shared_future|const}};
}}
{{dcl end}}

Attach the continuation {{tt|func}} to {{c|*this}}. The behavior is undefined if {{c|*this}} has no associated shared state (i.e., {{c|valid() {{==}} false}}).

Creates a shared state associated with the {{tt|future}} object to be returned, and a copy {{c|fd}} of {{tt|func}} constructed as if by {{c|DECAY_COPY(std::forward&lt;F&gt;(func))}} evaluated in the thread calling {{tt|then}}, where {{c|DECAY_COPY}} is defined as
{{eq fun|
template &lt;class T&gt;
std::decay_t&lt;T&gt; DECAY_COPY(T&amp;&amp; v) {
    return std::forward&lt;T&gt;(v);
}
}}

When the shared state currently associated with {{c|*this}} is ready, the ''continuation'' {{#ifeq:{{{1}}}|shared_future|{{c|INVOKE(std::move(fd), *this)}}|{{c|INVOKE(std::move(fd), std::move(*this))}}}} is called on an unspecified thread of execution, where {{c|INVOKE}} is the operation defined in {{concept|Callable}}. If that expression is invalid, the behavior is undefined.

Any value returned from the continuation is stored as the result in the shared state of the returned {{tt|future}} object. Any exception propagated from the execution of the continuation is stored as the exceptional result in the shared state of the returned {{tt|future}} object.  

Let {{tt|U}} be the return type of the continuation (i.e. {{c|std::result_of_t&lt;std::decay_t&lt;F&gt;({{#switch:{{{1|}}}|future=std::experimental::future&lt;T&gt;|shared_future=const std::experimental::shared_future&lt;T&gt; &amp;}})&gt;}}). If {{tt|U}} is {{c|std::experimental::future&lt;T2&gt;}} for some type {{tt|T2}}, then the return type of {{tt|then}} is {{c|std::experimental::future&lt;T2&gt;}}, otherwise it is {{c|std::experimental::future&lt;U&gt;}}. This is known as ''implicit unwrapping''.

If implicit unwrapping takes place and the continuation returns an invalid {{tt|future}}, then the shared state is made ready with an exception of type {{lc|std::future_error}} with an error condition of {{lc|std::future_errc::broken_promise}}.

After this function returns, {{c|valid()}} is {{c|{{#ifeq:{{{1}}}|shared_future|true|false}}}}.

===Parameters===
{{par begin}}
{{par | func | A continuation to be attached. }}
{{par end}}

=== Return value ===
A {{lc|std::experimental::future}} object associated with the shared state created by this object. {{c|valid() {{==}} true}} for the returned object.

===Example===
{{example|
 | code=
 | output=
}}</text>
      <sha1>0xfi2zeytwzhlymozth64059qsejxxq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/future/title</title>
    <ns>10</ns>
    <id>14132</id>
    <revision>
      <id>78835</id>
      <timestamp>2015-06-09T17:53:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/experimental/title | n=future::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/experimental/title | n=future::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>9ytgpf8ki8ofcv3vocnnkp6ne3yi3s5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/get memory resource</title>
    <ns>10</ns>
    <id>14423</id>
    <revision>
      <id>80222</id>
      <parentid>80219</parentid>
      <timestamp>2015-07-31T22:38:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="626">{{cpp/experimental/{{{1}}}/title|get_memory_resource}}
{{cpp/experimental/lib extensions/pmr/navbar}}

{{ddcl | since=libfund_ts | 1=
std::experimental::pmr::memory_resource* get_memory_resource();
}}

Returns a pointer to the memory resource used by this object to allocate memory.

===Parameters===
(none)

===Return value===
A pointer to the memory resource used by this object to allocate memory.

=== See also ===
{{dsc begin}}
{{#switch:{{{1}}}
|packaged_task
|promise=
{{dsc inc | cpp/experimental/lib_extensions/{{{1}}}/dsc constructor}}
|function=
{{dsc inc | cpp/experimental/{{{1}}}/dsc constructor}}
}}
{{dsc end}}</text>
      <sha1>gcpk51n5uo6kohic6mfcdinw2f3m39t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/dsc constructor</title>
    <ns>10</ns>
    <id>14617</id>
    <revision>
      <id>82253</id>
      <parentid>82251</parentid>
      <timestamp>2015-12-11T22:29:30Z</timestamp>
      <contributor>
        <ip>77.119.130.60</ip>
      </contributor>
      <comment>Started to document &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem ctor | cpp/experimental/latch/latch | constructs a {{tt|latch}} }}</text>
      <sha1>qd5oxqkyrfs6u77m3jc4459jysy6qta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/dsc count down</title>
    <ns>10</ns>
    <id>14619</id>
    <revision>
      <id>82255</id>
      <timestamp>2015-12-11T22:36:31Z</timestamp>
      <contributor>
        <ip>77.119.130.60</ip>
      </contributor>
      <comment>Started to document &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/experimental/latch/count_down | decrements the counter in a non-blocking manner}}</text>
      <sha1>ci6cvzkutsc78y9w0g70oa8oxpldtbw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/dsc count down and wait</title>
    <ns>10</ns>
    <id>14620</id>
    <revision>
      <id>82269</id>
      <parentid>82257</parentid>
      <timestamp>2015-12-12T20:09:14Z</timestamp>
      <contributor>
        <ip>178.115.129.114</ip>
      </contributor>
      <comment>Harmonizations in &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="131">{{dsc mem fun | cpp/experimental/latch/count_down_and_wait | decrements the counter by {{tt|1}} and blocks until it reaches zero }}</text>
      <sha1>0x12u3lr9tie1xq1ugkljnpswo3vb34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/dsc destructor</title>
    <ns>10</ns>
    <id>14622</id>
    <revision>
      <id>82259</id>
      <timestamp>2015-12-11T22:41:16Z</timestamp>
      <contributor>
        <ip>77.119.130.60</ip>
      </contributor>
      <comment>Started to document &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem dtor | cpp/experimental/latch/~latch | destroys the latch }}</text>
      <sha1>jlfr19hd2nzitn30fxvke61bgs7z032</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/dsc is ready</title>
    <ns>10</ns>
    <id>14618</id>
    <revision>
      <id>82252</id>
      <timestamp>2015-12-11T22:28:44Z</timestamp>
      <contributor>
        <ip>77.119.130.60</ip>
      </contributor>
      <comment>Started to document &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/experimental/latch/is_ready | tests if the internal counter equals zero}}</text>
      <sha1>5nc4amof9vptuji3p9yhlpazbegw7dl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/dsc operator=</title>
    <ns>10</ns>
    <id>14623</id>
    <revision>
      <id>82260</id>
      <timestamp>2015-12-11T22:42:39Z</timestamp>
      <contributor>
        <ip>77.119.130.60</ip>
      </contributor>
      <comment>Started to document &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}</text>
      <sha1>77x2gksrw7nfpw4adu5pydi8kdymkor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/dsc wait</title>
    <ns>10</ns>
    <id>14621</id>
    <revision>
      <id>82270</id>
      <parentid>82262</parentid>
      <timestamp>2015-12-12T20:09:38Z</timestamp>
      <contributor>
        <ip>178.115.129.114</ip>
      </contributor>
      <comment>Harmonizations in &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/experimental/latch/wait | blocks until the counter reaches zero }}</text>
      <sha1>8flkp0l7ikma4ccyb5rdrgfk9eg4qas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/latch/title</title>
    <ns>10</ns>
    <id>14664</id>
    <revision>
      <id>82448</id>
      <timestamp>2015-12-17T10:42:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=experimental::latch::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>rr1xw3rayjdpkkyqkqy8c2zo6xrvcy8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions 2/navbar</title>
    <ns>10</ns>
    <id>14096</id>
    <revision>
      <id>78455</id>
      <timestamp>2015-05-23T20:08:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="283">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions_2/navbar heading
|content3 = cpp/experimental/lib_extensions_2/navbar content
}}</text>
      <sha1>rn96zo0811u3gpjv0866e94hvaa05a4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions 2/navbar content</title>
    <ns>10</ns>
    <id>14098</id>
    <revision>
      <id>83512</id>
      <parentid>81719</parentid>
      <timestamp>2016-02-18T18:58:45Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>add to_array</comment>
      <text xml:space="preserve" bytes="716">{{nv begin}}
{{nv mem ln | cpp/experimental/propagate_const}}
{{nv mem ln | cpp/experimental/not_fn}}
{{nv mem ln | cpp/experimental/observer_ptr}}
{{nv mem ln | cpp/experimental/make_array}}
{{nv mem ln | cpp/experimental/to_array}}
{{nv mem ln | cpp/experimental/ostream_joiner}}
{{nv mem ln | cpp/experimental/gcd}}
{{nv mem ln | cpp/experimental/lcm}}
{{nv mem ln | cpp/experimental/source_location}}
{{nv mem ln | cpp/experimental/randint}}
{{nv ln | cpp/experimental/is_detected|detection idiom }}
{{nv ln | cpp/experimental/lib extensions 2#Uniform container erasure|uniform container erasure}}
{{nv ln | cpp/experimental/lib extensions 2#Logical operator type traits|logical operator type traits}}
{{nv end}}</text>
      <sha1>klfrdpit5cufh5q0y0hrb2ewq8y4pig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions 2/navbar heading</title>
    <ns>10</ns>
    <id>14097</id>
    <revision>
      <id>78456</id>
      <timestamp>2015-05-23T20:09:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="63">[[cpp/experimental/lib_extensions_2 | Library fundamentals v2]]</text>
      <sha1>hygazc6869rrk5ttzyp85wkaj39rm06</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions 2/observer ptr/navbar</title>
    <ns>10</ns>
    <id>14217</id>
    <revision>
      <id>79401</id>
      <timestamp>2015-07-05T23:21:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="397">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions_2/navbar heading
|content3 = cpp/experimental/lib_extensions_2/navbar content
|heading4 = cpp/experimental/observer_ptr/navbar heading
|content4 = cpp/experimental/observer_ptr/navbar content
}}</text>
      <sha1>e77ra4fl1pzs9pmrqhc5958t61zey0m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions 2/ostream joiner/navbar</title>
    <ns>10</ns>
    <id>14210</id>
    <revision>
      <id>79388</id>
      <timestamp>2015-07-05T22:41:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="401">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions_2/navbar heading
|content3 = cpp/experimental/lib_extensions_2/navbar content
|heading4 = cpp/experimental/ostream_joiner/navbar heading
|content4 = cpp/experimental/ostream_joiner/navbar content
}}</text>
      <sha1>n4cteyx2v3kg0dewetlsp6byvbynqx1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions 2/propagate const/navbar</title>
    <ns>10</ns>
    <id>14269</id>
    <revision>
      <id>79496</id>
      <timestamp>2015-07-08T08:45:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="403">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions_2/navbar heading
|content3 = cpp/experimental/lib_extensions_2/navbar content
|heading4 = cpp/experimental/propagate_const/navbar heading
|content4 = cpp/experimental/propagate_const/navbar content
}}</text>
      <sha1>pv1mxwcocfeai30op3bvkm4iy81madr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions 2/source location/navbar</title>
    <ns>10</ns>
    <id>14250</id>
    <revision>
      <id>79472</id>
      <timestamp>2015-07-07T22:36:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="403">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions_2/navbar heading
|content3 = cpp/experimental/lib_extensions_2/navbar content
|heading4 = cpp/experimental/source_location/navbar heading
|content4 = cpp/experimental/source_location/navbar content
}}</text>
      <sha1>htdlk234xrdr4lqabtr84n83d7kkhep</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/navbar</title>
    <ns>10</ns>
    <id>13918</id>
    <revision>
      <id>75092</id>
      <timestamp>2015-01-05T19:59:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="279">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content
}}</text>
      <sha1>6505dkjz0m6tosd01h0jsitdrnkyrif</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/navbar content</title>
    <ns>10</ns>
    <id>14012</id>
    <revision>
      <id>83743</id>
      <parentid>82293</parentid>
      <timestamp>2016-03-08T02:02:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+invocation_type</comment>
      <text xml:space="preserve" bytes="1000">{{nv begin}}
{{nv mem ln | cpp/experimental/optional}}
{{nv mem ln | cpp/experimental/any}}
{{nv mem ln | cpp/experimental/basic_string_view}}
{{nv mem ln | cpp/experimental/sample}}
{{nv mem ln | cpp/experimental/shared_ptr}}
{{nv mem ln | cpp/experimental/weak_ptr}}
{{nv mem ln | cpp/experimental/apply}}
{{nv mem ln | cpp/experimental/invocation_type|invocation_type&lt;br&gt;experimental::raw_invocation_type}}
{{nv mem ln | cpp/experimental/search}}
{{nv mem ln | cpp/experimental/default_searcher|default_searcher&lt;br&gt;experimental::make_default_searcher}}
{{nv mem ln | cpp/experimental/boyer_moore_searcher|boyer_moore_searcher&lt;br&gt;experimental::make_boyer_moore_searcher}}
{{nv mem ln | cpp/experimental/boyer_moore_horspool_searcher|boyer_moore_horspool_searcher&lt;br&gt;experimental::make_boyer_moore_horspool_searcher}}
{{nv ln | cpp/experimental/memory|type-erased and polymorphic allocators }}
{{nv ln | cpp/experimental/type_trait_variable_templates|variable templates for type traits }}
{{nv end}}</text>
      <sha1>byx4rglaikasf5imsdeoult1p32bhh8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/navbar heading</title>
    <ns>10</ns>
    <id>13919</id>
    <revision>
      <id>75095</id>
      <parentid>75093</parentid>
      <timestamp>2015-01-05T20:01:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="58">[[cpp/experimental/lib_extensions | Library fundamentals]]</text>
      <sha1>efr8qfu1xabjxm2oliexl1fp8rb2an9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/packaged task/dsc constructor</title>
    <ns>10</ns>
    <id>14400</id>
    <revision>
      <id>80154</id>
      <timestamp>2015-07-30T22:25:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem ctor | cpp/experimental/lib extensions/packaged_task/packaged_task | constructs the task object}}</text>
      <sha1>dryx8fve63x9yjc02jgnghduxlo5a3m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/packaged task/dsc get memory resource</title>
    <ns>10</ns>
    <id>14401</id>
    <revision>
      <id>80155</id>
      <timestamp>2015-07-30T22:27:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc mem fun | cpp/experimental/lib extensions/packaged_task/get_memory_resource | retrieves a pointer to the memory resource used by this object to allocate memory}}</text>
      <sha1>nh0mfpep4tona5wdic5zu7elho04emo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/packaged task/dsc swap2</title>
    <ns>10</ns>
    <id>14402</id>
    <revision>
      <id>80156</id>
      <timestamp>2015-07-30T22:28:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="186">{{dsc tfun | cpp/experimental/lib extensions/packaged_task/swap2 | title=std::experimental::swap{{dsc small|(std::experimental::packaged_task)}} | specializes the {{tt|swap}} algorithm}}</text>
      <sha1>42rpx6ihmz4nc5ljkga38b3i9ns8c0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/packaged task/dsc uses allocator</title>
    <ns>10</ns>
    <id>14403</id>
    <revision>
      <id>80157</id>
      <timestamp>2015-07-30T22:29:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="211">{{dsc ptclass | cpp/experimental/lib extensions/packaged_task/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::experimental::packaged_task&gt;}} | specializes the {{lc|std::uses_allocator}} type trait }}</text>
      <sha1>8couf7l9564fq7kyq33l9rdqjayqlkv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/memory resource/navbar</title>
    <ns>10</ns>
    <id>14337</id>
    <revision>
      <id>79817</id>
      <parentid>79811</parentid>
      <timestamp>2015-07-27T22:02:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>comment out one level, as it's too long otherwise</comment>
      <text xml:space="preserve" bytes="575">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

&lt;!--|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
--&gt;
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content

|heading4 = cpp/experimental/lib_extensions/pmr/navbar heading
|content4 = cpp/experimental/lib_extensions/pmr/navbar content

|heading5 = cpp/experimental/lib_extensions/pmr/memory_resource/navbar heading
|content5 = cpp/experimental/lib_extensions/pmr/memory_resource/navbar content

}}</text>
      <sha1>ar7e7rppmxd5fetn6o70whwmix5j1ig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/memory resource/navbar content</title>
    <ns>10</ns>
    <id>14340</id>
    <revision>
      <id>80076</id>
      <parentid>79814</parentid>
      <timestamp>2015-07-29T05:25:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rm</comment>
      <text xml:space="preserve" bytes="646">{{nv begin}}
{{nv mem ln | cpp/experimental/memory_resource/memory_resource }}
{{nv h2|Public member functions}}
{{nv mem ln | cpp/experimental/memory_resource/allocate }}
{{nv mem ln | cpp/experimental/memory_resource/deallocate }}
{{nv mem ln | cpp/experimental/memory_resource/is_equal }}
{{nv h2|Protected member functions}}
{{nv mem ln | cpp/experimental/memory_resource/do_allocate }}
{{nv mem ln | cpp/experimental/memory_resource/do_deallocate }}
{{nv mem ln | cpp/experimental/memory_resource/do_is_equal }}
{{nv h2|Non-member functions}}
{{nv ln | cpp/experimental/memory_resource/operator_eq |operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1>djhztf3g82vspw6da7fpw5vb5ccbdh0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/memory resource/navbar heading</title>
    <ns>10</ns>
    <id>14339</id>
    <revision>
      <id>79813</id>
      <timestamp>2015-07-27T21:51:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="80">{{ltt|cpp/experimental/memory_resource|std::experimental::pmr::memory_resource}}</text>
      <sha1>nt1ulaqxksmroqrta8zmmgll2qyd5hj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/monotonic buffer resource/navbar</title>
    <ns>10</ns>
    <id>14373</id>
    <revision>
      <id>80112</id>
      <timestamp>2015-07-29T22:14:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="595">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

&lt;!--|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
--&gt;
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content

|heading4 = cpp/experimental/lib_extensions/pmr/navbar heading
|content4 = cpp/experimental/lib_extensions/pmr/navbar content

|heading5 = cpp/experimental/lib_extensions/pmr/monotonic_buffer_resource/navbar heading
|content5 = cpp/experimental/lib_extensions/pmr/monotonic_buffer_resource/navbar content

}}</text>
      <sha1>jkx7qpofast3nz8hdedztdz8rk151y1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/monotonic buffer resource/navbar content</title>
    <ns>10</ns>
    <id>14371</id>
    <revision>
      <id>82125</id>
      <parentid>80110</parentid>
      <timestamp>2015-12-05T08:16:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rm, it's deleted</comment>
      <text xml:space="preserve" bytes="629">{{nv begin}}
{{nv mem ln | cpp/experimental/monotonic_buffer_resource/monotonic_buffer_resource}}
{{nv mem ln | cpp/experimental/monotonic_buffer_resource/~monotonic_buffer_resource}}
{{nv h2 | Public member functions}}
{{nv mem ln | cpp/experimental/monotonic_buffer_resource/release}}
{{nv mem ln | cpp/experimental/monotonic_buffer_resource/upstream_resource}}
{{nv h2|Protected member functions}}
{{nv mem ln | cpp/experimental/monotonic_buffer_resource/do_allocate }}
{{nv mem ln | cpp/experimental/monotonic_buffer_resource/do_deallocate }}
{{nv mem ln | cpp/experimental/monotonic_buffer_resource/do_is_equal }}
{{nv end}}</text>
      <sha1>9zwjas92kgg7e6ufdshzj2mgohqkrym</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/monotonic buffer resource/navbar heading</title>
    <ns>10</ns>
    <id>14372</id>
    <revision>
      <id>80111</id>
      <timestamp>2015-07-29T22:14:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="100">{{ltt|cpp/experimental/monotonic_buffer_resource|std::experimental::pmr::monotonic_buffer_resource}}</text>
      <sha1>ok84as8xfgwr938sc4125lfc09izhoi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/navbar</title>
    <ns>10</ns>
    <id>13675</id>
    <revision>
      <id>79760</id>
      <parentid>79754</parentid>
      <timestamp>2015-07-25T06:36:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="408">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content

|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content

|heading4 = cpp/experimental/lib_extensions/pmr/navbar heading
|content4 = cpp/experimental/lib_extensions/pmr/navbar content
}}</text>
      <sha1>01n8a3tlz75a19on4i3a4t6tedy4pnh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/navbar content</title>
    <ns>10</ns>
    <id>13677</id>
    <revision>
      <id>80186</id>
      <parentid>80178</parentid>
      <timestamp>2015-07-31T12:30:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="948">{{nv begin}}
{{nv ln | cpp/experimental/polymorphic_allocator}}
{{nv ln | cpp/experimental/lib_extensions/pmr container| convenience aliases for containers using polymorphic_allocator}}
{{nv h2 | Memory resource classes}}
{{nv ln | cpp/experimental/memory_resource }}
{{nv ln | cpp/experimental/synchronized_pool_resource}}
{{nv ln | cpp/experimental/unsynchronized_pool_resource}}
{{nv ln | cpp/experimental/monotonic_buffer_resource}}
{{nv ln | cpp/experimental/resource_adaptor }}

{{nv h2 | Global memory resources}}
{{nv ln | cpp/experimental/new_delete_resource }}
{{nv ln | cpp/experimental/null_memory_resource }}
{{nv ln | cpp/experimental/get_default_resource }}
{{nv ln | cpp/experimental/set_default_resource }}

{{nv h2 | Type-erased allocator support for existing classes}}
{{nv ln | cpp/experimental/function }}
{{nv ln | cpp/experimental/lib extensions/packaged_task}}
{{nv ln | cpp/experimental/lib extensions/promise}}

{{nv end}}</text>
      <sha1>pog54qb11jy3rpo7crj5oca7moy39m4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/navbar heading</title>
    <ns>10</ns>
    <id>13676</id>
    <revision>
      <id>79758</id>
      <parentid>71545</parentid>
      <timestamp>2015-07-25T06:36:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>T. Canens moved page [[Template:cpp/experimental/memory/navbar heading]] to [[Template:cpp/experimental/lib extensions/pmr/navbar heading]]</comment>
      <text xml:space="preserve" bytes="59">[[cpp/experimental/memory | Polymorphic allocator library]]</text>
      <sha1>dluxsrk783etviwchwf8opwd39seisj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/polymorphic allocator/navbar</title>
    <ns>10</ns>
    <id>14392</id>
    <revision>
      <id>80132</id>
      <timestamp>2015-07-29T22:46:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="587">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

&lt;!--|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
--&gt;
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content

|heading4 = cpp/experimental/lib_extensions/pmr/navbar heading
|content4 = cpp/experimental/lib_extensions/pmr/navbar content

|heading5 = cpp/experimental/lib_extensions/pmr/polymorphic_allocator/navbar heading
|content5 = cpp/experimental/lib_extensions/pmr/polymorphic_allocator/navbar content

}}</text>
      <sha1>edlam0fvry0jaa5wcbc9bdarjk5dhwg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/polymorphic allocator/navbar content</title>
    <ns>10</ns>
    <id>14395</id>
    <revision>
      <id>80136</id>
      <timestamp>2015-07-29T22:49:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="739">{{nv begin}}
{{nv h2|Member functions}}
{{nv mem ln | cpp/experimental/polymorphic_allocator/polymorphic_allocator}}
{{nv mem ln | cpp/experimental/polymorphic_allocator/operator{{=}}}}
{{nv mem ln | cpp/experimental/polymorphic_allocator/allocate }}
{{nv mem ln | cpp/experimental/polymorphic_allocator/deallocate }}
{{nv mem ln | cpp/experimental/polymorphic_allocator/construct }}
{{nv mem ln | cpp/experimental/polymorphic_allocator/destroy}}
{{nv mem ln | cpp/experimental/polymorphic_allocator/select_on_container_copy_construction}}
{{nv mem ln | cpp/experimental/polymorphic_allocator/resource}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/experimental/polymorphic_allocator/operator_eq |operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1>pyunpboqeccibjtyuadh6r8sqc055uf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/polymorphic allocator/navbar heading</title>
    <ns>10</ns>
    <id>14393</id>
    <revision>
      <id>80133</id>
      <timestamp>2015-07-29T22:46:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{ltt|cpp/experimental/polymorphic_allocator|std::experimental::pmr::polymorphic_allocator}}</text>
      <sha1>7f1k5a9eb1fxxx04477yur43jpx7jvs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/synchronized pool resource/navbar</title>
    <ns>10</ns>
    <id>14550</id>
    <revision>
      <id>82123</id>
      <timestamp>2015-12-05T08:15:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="597">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

&lt;!--|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
--&gt;
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content

|heading4 = cpp/experimental/lib_extensions/pmr/navbar heading
|content4 = cpp/experimental/lib_extensions/pmr/navbar content

|heading5 = cpp/experimental/lib_extensions/pmr/synchronized pool resource/navbar heading
|content5 = cpp/experimental/lib_extensions/pmr/synchronized pool resource/navbar content

}}</text>
      <sha1>i7i3v7gtgf2lbgo4jgguym2y77cajjh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/synchronized pool resource/navbar content</title>
    <ns>10</ns>
    <id>14552</id>
    <revision>
      <id>82126</id>
      <timestamp>2015-12-05T08:17:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="706">{{nv begin}}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/synchronized_pool_resource}}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/~synchronized_pool_resource}}
{{nv h2 | Public member functions}}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/release}}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/upstream_resource}}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/options}}
{{nv h2|Protected member functions}}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/do_allocate }}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/do_deallocate }}
{{nv mem ln | cpp/experimental/synchronized_pool_resource/do_is_equal }}
{{nv end}}</text>
      <sha1>6wequzjg3kpyju4kewlljrxgmxb0ntl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/synchronized pool resource/navbar heading</title>
    <ns>10</ns>
    <id>14551</id>
    <revision>
      <id>82124</id>
      <timestamp>2015-12-05T08:16:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{ltt|cpp/experimental/synchronized_pool_resource|std::experimental::pmr::synchronized_pool_resource}}</text>
      <sha1>oo1cbu7nj0ayzsdwp0yxf69qdode7hs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/unsynchronized pool resource/navbar</title>
    <ns>10</ns>
    <id>14563</id>
    <revision>
      <id>82137</id>
      <timestamp>2015-12-05T08:30:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="601">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

&lt;!--|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
--&gt;
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content

|heading4 = cpp/experimental/lib_extensions/pmr/navbar heading
|content4 = cpp/experimental/lib_extensions/pmr/navbar content

|heading5 = cpp/experimental/lib_extensions/pmr/unsynchronized pool resource/navbar heading
|content5 = cpp/experimental/lib_extensions/pmr/unsynchronized pool resource/navbar content

}}</text>
      <sha1>ivku2416q8kq91juzs56o1ov5rx2nlp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/unsynchronized pool resource/navbar content</title>
    <ns>10</ns>
    <id>14565</id>
    <revision>
      <id>82139</id>
      <timestamp>2015-12-05T08:31:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="726">{{nv begin}}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/unsynchronized_pool_resource}}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/~unsynchronized_pool_resource}}
{{nv h2 | Public member functions}}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/release}}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/upstream_resource}}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/options}}
{{nv h2|Protected member functions}}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/do_allocate }}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/do_deallocate }}
{{nv mem ln | cpp/experimental/unsynchronized_pool_resource/do_is_equal }}
{{nv end}}</text>
      <sha1>able96hvo7k2a10ctlvphc4svva7ixk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/pmr/unsynchronized pool resource/navbar heading</title>
    <ns>10</ns>
    <id>14564</id>
    <revision>
      <id>82140</id>
      <parentid>82138</parentid>
      <timestamp>2015-12-05T08:31:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="106">{{ltt|cpp/experimental/unsynchronized_pool_resource|std::experimental::pmr::unsynchronized_pool_resource}}</text>
      <sha1>cmit7ez8byp17td1l85e7k5z6hny74x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/promise/dsc constructor</title>
    <ns>10</ns>
    <id>14406</id>
    <revision>
      <id>80162</id>
      <timestamp>2015-07-30T23:18:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem ctor | cpp/experimental/lib extensions/promise/promise | constructs the promise object}}</text>
      <sha1>cinvd58n9bg2uri5v8y68mgea518sdi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/promise/dsc get memory resource</title>
    <ns>10</ns>
    <id>14407</id>
    <revision>
      <id>80164</id>
      <parentid>80163</parentid>
      <timestamp>2015-07-30T23:19:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="161">{{dsc mem fun | cpp/experimental/lib extensions/promise/get_memory_resource | retrieves a pointer to the memory resource used by this object to allocate memory}}</text>
      <sha1>k8skbxvskqc6sq6vr4kszncd2e1dixw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/promise/dsc swap2</title>
    <ns>10</ns>
    <id>14408</id>
    <revision>
      <id>80165</id>
      <timestamp>2015-07-30T23:19:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="174">{{dsc tfun | cpp/experimental/lib extensions/promise/swap2 | title=std::experimental::swap{{dsc small|(std::experimental::promise)}} | specializes the {{tt|swap}} algorithm}}</text>
      <sha1>3odsfitrnnwkw5be75x70irw8p6eeuq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/lib extensions/promise/dsc uses allocator</title>
    <ns>10</ns>
    <id>14409</id>
    <revision>
      <id>80166</id>
      <timestamp>2015-07-30T23:19:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="199">{{dsc ptclass | cpp/experimental/lib extensions/promise/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::experimental::promise&gt;}} | specializes the {{lc|std::uses_allocator}} type trait }}</text>
      <sha1>0tbq063nvdj55grgbx7qn568ram3tkt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc allocate</title>
    <ns>10</ns>
    <id>14329</id>
    <revision>
      <id>79800</id>
      <timestamp>2015-07-27T21:38:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/experimental/memory_resource/allocate | allocates memory}}</text>
      <sha1>q90rga70p4nyt3ubsf3swfupcuz5mf5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc constructor</title>
    <ns>10</ns>
    <id>14326</id>
    <revision>
      <id>79796</id>
      <timestamp>2015-07-27T21:34:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem ctor | cpp/experimental/memory_resource/memory_resource| constructs a new {{tt|memory_resource}} | notes={{mark implicit}}}}</text>
      <sha1>0uvyv85om4fid352dpxoqmlvrpy49k4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc deallocate</title>
    <ns>10</ns>
    <id>14330</id>
    <revision>
      <id>79801</id>
      <timestamp>2015-07-27T21:40:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/experimental/memory_resource/deallocate | deallocates memory}}</text>
      <sha1>1lvcjg11q1ryn9wapub1ia9x4zz8fai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc destructor</title>
    <ns>10</ns>
    <id>14327</id>
    <revision>
      <id>80074</id>
      <parentid>79848</parentid>
      <timestamp>2015-07-29T05:24:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rm link. Nothing more to say, really.</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem vdtor | nolink=true | destructs an {{tt|memory_resource}}}}</text>
      <sha1>pu6ee98v1ve76475cq6v2dej8s3onk8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14332</id>
    <revision>
      <id>79803</id>
      <timestamp>2015-07-27T21:41:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="88">{{dsc prot mem vfun  | cpp/experimental/memory_resource/do_allocate | allocates memory}}</text>
      <sha1>d8tc4wo936ckq6dm24cgfsste8t2mws</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14333</id>
    <revision>
      <id>79804</id>
      <timestamp>2015-07-27T21:41:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="92">{{dsc prot mem vfun  | cpp/experimental/memory_resource/do_deallocate | deallocates memory}}</text>
      <sha1>iy62py4cp5xc17k2s4kttqh36nm5nzb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14334</id>
    <revision>
      <id>79805</id>
      <timestamp>2015-07-27T21:41:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="128">{{dsc prot mem vfun  | cpp/experimental/memory_resource/do_is_equal | compare for equality with another {{tt|memory_resource}}}}</text>
      <sha1>cj2q6qbegawen41nkfkualf7ozk385v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc is equal</title>
    <ns>10</ns>
    <id>14331</id>
    <revision>
      <id>79802</id>
      <timestamp>2015-07-27T21:40:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem fun | cpp/experimental/memory_resource/is_equal | compare for equality with another {{tt|memory_resource}}}}</text>
      <sha1>63btpehmawhv48izwag28w4p6tbpnxg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc operator eq</title>
    <ns>10</ns>
    <id>14335</id>
    <revision>
      <id>79810</id>
      <parentid>79807</parentid>
      <timestamp>2015-07-27T21:46:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="128">{{dsc fun  | cpp/experimental/memory_resource/operator_eq | title=operator==&lt;br&gt;operator!=|compare two {{tt|memory_resource}}s}}</text>
      <sha1>lbreqyp6ijxelfr1p5q3cr16xoblmbf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc operator equality</title>
    <ns>10</ns>
    <id>14336</id>
    <redirect title="Template:cpp/experimental/memory resource/dsc operator eq" />
    <revision>
      <id>79808</id>
      <timestamp>2015-07-27T21:43:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/experimental/memory resource/dsc operator equality]] to [[Template:cpp/experimental/memory resource/dsc operator eq]]</comment>
      <text xml:space="preserve" bytes="71">#REDIRECT [[Template:cpp/experimental/memory resource/dsc operator eq]]</text>
      <sha1>fy4peht3vpt5cz2mp6gdedwghble5by</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/dsc operator=</title>
    <ns>10</ns>
    <id>14328</id>
    <revision>
      <id>79799</id>
      <timestamp>2015-07-27T21:38:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun | operator{{=}} | nolink=true| notes={{mark implicit}} | Implicitly declared copy assignment operator}}</text>
      <sha1>llqsyay1i84dbxv02w7ux96h079vjw3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory resource/title</title>
    <ns>10</ns>
    <id>14585</id>
    <redirect title="Template:cpp/experimental/pmr/memory resource/title" />
    <revision>
      <id>82164</id>
      <timestamp>2015-12-05T09:10:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Redirected page to [[Template:cpp/experimental/pmr/memory resource/title]]</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/experimental/pmr/memory resource/title]]</text>
      <sha1>lj0rtr06no37kj64yl30dtg6dk2bib4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory/navbar</title>
    <ns>10</ns>
    <id>14319</id>
    <redirect title="Template:cpp/experimental/lib extensions/pmr/navbar" />
    <revision>
      <id>79755</id>
      <timestamp>2015-07-25T06:35:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/experimental/memory/navbar]] to [[Template:cpp/experimental/lib extensions/pmr/navbar]]</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/experimental/lib extensions/pmr/navbar]]</text>
      <sha1>n5dhmjfcvx2hc25w7pyvsgn2ka2men3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory/navbar content</title>
    <ns>10</ns>
    <id>14320</id>
    <redirect title="Template:cpp/experimental/lib extensions/pmr/navbar content" />
    <revision>
      <id>79757</id>
      <timestamp>2015-07-25T06:36:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/experimental/memory/navbar content]] to [[Template:cpp/experimental/lib extensions/pmr/navbar content]]</comment>
      <text xml:space="preserve" bytes="73">#REDIRECT [[Template:cpp/experimental/lib extensions/pmr/navbar content]]</text>
      <sha1>l77eke0gggfcpk949354yzcg0co4w8p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory/navbar heading</title>
    <ns>10</ns>
    <id>14321</id>
    <redirect title="Template:cpp/experimental/lib extensions/pmr/navbar heading" />
    <revision>
      <id>79759</id>
      <timestamp>2015-07-25T06:36:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/experimental/memory/navbar heading]] to [[Template:cpp/experimental/lib extensions/pmr/navbar heading]]</comment>
      <text xml:space="preserve" bytes="73">#REDIRECT [[Template:cpp/experimental/lib extensions/pmr/navbar heading]]</text>
      <sha1>aw1n15vjtrxku6zd2p6ztjrjeplma6k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/memory/title</title>
    <ns>10</ns>
    <id>14322</id>
    <redirect title="Template:cpp/experimental/pmr/title" />
    <revision>
      <id>79762</id>
      <timestamp>2015-07-25T06:37:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/experimental/memory/title]] to [[Template:cpp/experimental/pmr/title]]</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/experimental/pmr/title]]</text>
      <sha1>fu7rj1m6c5x18e3ui4euf37kunir2s7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc constructor</title>
    <ns>10</ns>
    <id>14374</id>
    <revision>
      <id>80113</id>
      <timestamp>2015-07-29T22:15:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem ctor | cpp/experimental/monotonic_buffer_resource/monotonic_buffer_resource | Constructs a {{tt|monotonic_buffer_resource}}}}</text>
      <sha1>mrgpj1t2a74oxs1r5bly2yuyhj1lyo1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc destructor</title>
    <ns>10</ns>
    <id>14375</id>
    <revision>
      <id>80114</id>
      <timestamp>2015-07-29T22:16:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="167">{{dsc mem vdtor | cpp/experimental/monotonic_buffer_resource/~monotonic_buffer_resource | Destroys a {{tt|monotonic_buffer_resource}}, releasing all allocated memory}}</text>
      <sha1>3zir35fxtu74sodz0hvdp6pxms6d4do</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14379</id>
    <revision>
      <id>80118</id>
      <timestamp>2015-07-29T22:20:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{dsc prot mem vfun | cpp/experimental/monotonic_buffer_resource/do_allocate | Allocate memory }}</text>
      <sha1>lmjih8m6jvxbys7qcimptpp4lkuzbqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14380</id>
    <revision>
      <id>80119</id>
      <timestamp>2015-07-29T22:20:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="89">{{dsc prot mem vfun | cpp/experimental/monotonic_buffer_resource/do_deallocate | No-op }}</text>
      <sha1>998ksjrtq5vwk2n4mk0dcrauxemapuc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14381</id>
    <revision>
      <id>80120</id>
      <timestamp>2015-07-29T22:21:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="138">{{dsc prot mem vfun | cpp/experimental/monotonic_buffer_resource/do_is_equal | Compare for equality with another {{tt|memory_resource}} }}</text>
      <sha1>tdt0eihx5fh4tiz1fdlplf9rj9v7ogu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc operator=</title>
    <ns>10</ns>
    <id>14376</id>
    <revision>
      <id>80115</id>
      <timestamp>2015-07-29T22:18:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="163">{{dsc mem fun|nolink=true | operator{{=}} | notes={{cmark deleted}}| Copy assignment operator is deleted. {{tt|monotonic_buffer_resource}} is not copy assignable}}</text>
      <sha1>c88fgatqjv0ujggef6a17vvyieo2zo4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc release</title>
    <ns>10</ns>
    <id>14377</id>
    <revision>
      <id>80116</id>
      <timestamp>2015-07-29T22:19:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun | cpp/experimental/monotonic_buffer_resource/release| Release all allocated memory}}</text>
      <sha1>sqvyg4lk8cwixzi6gkp2cj7nuf5t909</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/monotonic buffer resource/dsc upstream resource</title>
    <ns>10</ns>
    <id>14378</id>
    <revision>
      <id>80117</id>
      <timestamp>2015-07-29T22:19:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">{{dsc mem fun | cpp/experimental/monotonic_buffer_resource/upstream_resource | Returns a pointer to the upstream memory resource}}</text>
      <sha1>d0jgzyoo9omu35jtjq2sb8zfy7s2ecp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/navbar</title>
    <ns>10</ns>
    <id>13917</id>
    <revision>
      <id>75089</id>
      <timestamp>2015-01-05T19:55:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="162">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
}}</text>
      <sha1>k9rzo45b2lrjnb3j4gdkrgrjzca3t7q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/navbar content</title>
    <ns>10</ns>
    <id>13585</id>
    <revision>
      <id>88630</id>
      <parentid>83373</parentid>
      <timestamp>2016-12-03T00:19:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="736">{{nv begin}}
{{nv | [[cpp/experimental/fs|Filesystem library]] {{mark since fs ts}} }}
{{nv | [[cpp/experimental/lib extensions|Library fundamentals]] {{mark since libfund ts}}}}
{{nv | [[cpp/experimental/lib extensions 2|Library fundamentals 2]] {{mark since libfund 2 ts}}}}
{{nv | [[cpp/experimental/parallelism|Extensions for parallelism]] {{mark since parallelism ts}} }}
{{nv | [[cpp/experimental/concurrency|Extensions for concurrency]] {{mark since concurrency ts}} }}
{{nv | [[cpp/language/constraints|Concepts]] {{mark since concepts ts}} }}
{{nv | [[cpp/experimental/ranges|Ranges]] {{mark since ranges ts}}}}
{{nv | [[cpp/experimental/special_math|Special mathematical functions]] {{mark since special math tr}}}}
{{nv end}}</text>
      <sha1>gsolfoph0c3ty0gsh4r5pza43zicyow</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/navbar heading</title>
    <ns>10</ns>
    <id>13233</id>
    <revision>
      <id>75090</id>
      <parentid>68184</parentid>
      <timestamp>2015-01-05T19:56:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rename to technical specifications</comment>
      <text xml:space="preserve" bytes="47">[[cpp/experimental | Technical specifications]]</text>
      <sha1>mb6wz0ahgxenfito0rqo2od0yis424c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc constructor</title>
    <ns>10</ns>
    <id>14221</id>
    <revision>
      <id>79405</id>
      <timestamp>2015-07-05T23:42:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem ctor | cpp/experimental/observer_ptr/observer_ptr| constructs a new {{tt|observer_ptr}} }}</text>
      <sha1>583aq15fnlpvtxjz1z5ws0nj08hcp8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc destructor</title>
    <ns>10</ns>
    <id>14222</id>
    <revision>
      <id>79406</id>
      <timestamp>2015-07-05T23:43:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem dtor | nolink=true| destructs an {{tt|observer_ptr}} | notes={{mark implicit}} }}</text>
      <sha1>du9tedzz0wkm27atzmlgwt0903iimx5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc get</title>
    <ns>10</ns>
    <id>14226</id>
    <revision>
      <id>79410</id>
      <timestamp>2015-07-05T23:46:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/experimental/observer_ptr/get | returns a pointer to the watched object }}</text>
      <sha1>ivfwrrou8ywyijerf6veidxxnur1m1m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc hash</title>
    <ns>10</ns>
    <id>14231</id>
    <revision>
      <id>79415</id>
      <timestamp>2015-07-05T23:50:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="157">{{dsc ptclass | cpp/experimental/observer_ptr/hash | title=std::hash{{dsc small|&lt;std::experimental::observer_ptr&gt;}} | hash support for {{tt|observer_ptr}} }}</text>
      <sha1>snf0r7amwcknrh9nncjgr6sjw4flq92</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc make observer</title>
    <ns>10</ns>
    <id>14233</id>
    <revision>
      <id>79417</id>
      <timestamp>2015-07-05T23:51:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="112">{{dsc tfun | cpp/experimental/observer_ptr/make_observer| creates a {{tt|observer_ptr}} that watches an object}}</text>
      <sha1>czjv0kydne5dz6kdm16y4rvrqvt1jfm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc operator bool</title>
    <ns>10</ns>
    <id>14229</id>
    <revision>
      <id>79413</id>
      <timestamp>2015-07-05T23:48:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/experimental/observer_ptr/operator bool | checks if there is an associated watched object }}</text>
      <sha1>qkk5qcjmjpffgw8stghe52w84dow8sm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc operator cmp</title>
    <ns>10</ns>
    <id>14227</id>
    <revision>
      <id>79411</id>
      <timestamp>2015-07-05T23:47:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="209">{{dsc tfun | cpp/experimental/observer_ptr/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares to another {{tt|observer_ptr}} or with {{c|nullptr}} }}</text>
      <sha1>0u1y9ztofngededjlmt4jy3rxlog6ua</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc operator pointer</title>
    <ns>10</ns>
    <id>14234</id>
    <revision>
      <id>82759</id>
      <parentid>82758</parentid>
      <timestamp>2016-01-02T17:02:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>let's call it it element_type*</comment>
      <text xml:space="preserve" bytes="146">{{dsc mem fun | cpp/experimental/observer_ptr/operator pointer|title=operator element_type*| explicit conversion function to the stored pointer }}</text>
      <sha1>htwpcyw779jpsm2zcotv41rx4jhmorw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc operator*</title>
    <ns>10</ns>
    <id>14228</id>
    <revision>
      <id>79412</id>
      <timestamp>2015-07-05T23:48:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem fun | cpp/experimental/observer_ptr/operator* | title=operator*&lt;br&gt;operator-&gt; | dereferences pointer to the watched object }}</text>
      <sha1>qhpxrsqrq5plyzjbp3vb9vpyj0q5xut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc operator=</title>
    <ns>10</ns>
    <id>14223</id>
    <revision>
      <id>79407</id>
      <timestamp>2015-07-05T23:44:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="159">{{dsc mem fun | operator{{=}} | nolink=true| implicitly declared copy and move assignment operators that assign the stored pointer | notes={{mark implicit}} }}</text>
      <sha1>etchs476tv1ejvxk7do4debu3v7fs9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc release</title>
    <ns>10</ns>
    <id>14224</id>
    <revision>
      <id>79408</id>
      <timestamp>2015-07-05T23:45:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem fun | cpp/experimental/observer_ptr/release | returns a pointer to the watched object and stops watching the object }}</text>
      <sha1>ozr7nm4t7utgvqdszr84s3wrbf7ky87</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc reset</title>
    <ns>10</ns>
    <id>14225</id>
    <revision>
      <id>79409</id>
      <timestamp>2015-07-05T23:46:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/experimental/observer_ptr/reset | replaces the watched object }}</text>
      <sha1>s9zwupao3l6jmpfmvjmwukkb9c2kwco</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc swap</title>
    <ns>10</ns>
    <id>14230</id>
    <revision>
      <id>79414</id>
      <timestamp>2015-07-05T23:49:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/experimental/observer_ptr/swap | swaps the watched objects }}</text>
      <sha1>6pge2o6ioe3rxvcwcfvwhy6jrqxh8g3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/dsc swap2</title>
    <ns>10</ns>
    <id>14232</id>
    <revision>
      <id>79439</id>
      <parentid>79416</parentid>
      <timestamp>2015-07-06T08:26:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="169">{{dsc tfun | cpp/experimental/observer_ptr/swap2 | title=std::experimental::swap{{dsc small|(std::experimental::observer_ptr)}} | specializes the {{tt|swap}} algorithm}}</text>
      <sha1>f7codlpdquqdvdd73xuwqcofstkq3ca</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/navbar content</title>
    <ns>10</ns>
    <id>14219</id>
    <revision>
      <id>82761</id>
      <parentid>82757</parentid>
      <timestamp>2016-01-02T17:02:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>ditto</comment>
      <text xml:space="preserve" bytes="961">{{nv begin}}

{{nv h1 | Member functions}}
{{nv mem ln | cpp/experimental/observer_ptr/observer_ptr}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/experimental/observer_ptr/release}}
{{nv mem ln | cpp/experimental/observer_ptr/reset}}
{{nv mem ln | cpp/experimental/observer_ptr/swap}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/experimental/observer_ptr/get}}
{{nv mem ln | cpp/experimental/observer_ptr/operator bool}}
{{nv mem ln | cpp/experimental/observer_ptr/operator*|operator*|operator-&gt;}}

{{nv h2 | Conversions}}
{{nv mem ln | cpp/experimental/observer_ptr/operator pointer|operator element_type*}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/experimental/observer_ptr/make_observer}}
{{nv ln | cpp/experimental/observer_ptr/operator_cmp |operator{{==}}|operator!{{=}}|operator&lt;|operator&gt;|operator&lt;{{=}}|operator&gt;|operator&gt;{{=}}}}
{{nv ln | cpp/experimental/observer_ptr/swap2 |swap}}
{{nv ln | cpp/experimental/observer_ptr/hash |std::hash}}
{{nv end}}</text>
      <sha1>7g9pud0h2t9b366xgmtl8nn4ytzl3wl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/navbar heading</title>
    <ns>10</ns>
    <id>14218</id>
    <revision>
      <id>79402</id>
      <timestamp>2015-07-05T23:21:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="69">{{ltt|cpp/experimental/observer_ptr|std::experimental::observer_ptr}}</text>
      <sha1>fst8n83266g1dcqzqzcim3ve803rjmd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/observer ptr/title</title>
    <ns>10</ns>
    <id>14235</id>
    <revision>
      <id>79422</id>
      <timestamp>2015-07-06T07:36:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="123">&lt;onlyinclude&gt;{{cpp/title | n=experimental::observer_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>is51f81gbpiy4j8gxkwcwmpp67vw6a3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/bad optional access/dsc constructor</title>
    <ns>10</ns>
    <id>10107</id>
    <revision>
      <id>80193</id>
      <parentid>80192</parentid>
      <timestamp>2015-07-31T14:47:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Cubbi moved page [[Template:cpp/utility/bad optional access/dsc constructor]] to [[Template:cpp/experimental/optional/bad optional access/dsc constructor]] without leaving a redirect: to cpp/experimental/optional</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem ctor | cpp/experimental/optional/bad_optional_access | inlinemem=true | constructs the exception object }}</text>
      <sha1>k85bahyzmzcvo483ilw0jojrjj6b5ha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list constructor</title>
    <ns>10</ns>
    <id>12523</id>
    <redirect title="Template:cpp/utility/optional/dsc constructor" />
    <revision>
      <id>68069</id>
      <parentid>60711</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list constructor]] to [[Template:cpp/experimental/optional/dcl list constructor]]</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/utility/optional/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list destructor</title>
    <ns>10</ns>
    <id>12524</id>
    <redirect title="Template:cpp/utility/optional/dsc destructor" />
    <revision>
      <id>68071</id>
      <parentid>60713</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list destructor]] to [[Template:cpp/experimental/optional/dcl list destructor]]</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/optional/dsc destructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list emplace</title>
    <ns>10</ns>
    <id>12525</id>
    <redirect title="Template:cpp/utility/optional/dsc emplace" />
    <revision>
      <id>68073</id>
      <parentid>60715</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list emplace]] to [[Template:cpp/experimental/optional/dcl list emplace]]</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/optional/dsc emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list hash</title>
    <ns>10</ns>
    <id>12526</id>
    <redirect title="Template:cpp/utility/optional/dsc hash" />
    <revision>
      <id>68075</id>
      <parentid>60717</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list hash]] to [[Template:cpp/experimental/optional/dcl list hash]]</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/utility/optional/dsc hash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list make optional</title>
    <ns>10</ns>
    <id>12527</id>
    <redirect title="Template:cpp/utility/optional/dsc make optional" />
    <revision>
      <id>68077</id>
      <parentid>60719</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list make optional]] to [[Template:cpp/experimental/optional/dcl list make optional]]</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/optional/dsc make optional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list operator bool</title>
    <ns>10</ns>
    <id>12530</id>
    <redirect title="Template:cpp/utility/optional/dsc operator bool" />
    <revision>
      <id>68083</id>
      <parentid>60725</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list operator bool]] to [[Template:cpp/experimental/optional/dcl list operator bool]]</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/optional/dsc operator bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list operator cmp</title>
    <ns>10</ns>
    <id>12531</id>
    <redirect title="Template:cpp/utility/optional/dsc operator cmp" />
    <revision>
      <id>68085</id>
      <parentid>60727</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list operator cmp]] to [[Template:cpp/experimental/optional/dcl list operator cmp]]</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/optional/dsc operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list operator*</title>
    <ns>10</ns>
    <id>12528</id>
    <redirect title="Template:cpp/utility/optional/dsc operator*" />
    <revision>
      <id>68079</id>
      <parentid>60721</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list operator*]] to [[Template:cpp/experimental/optional/dcl list operator*]]</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/optional/dsc operator*]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list operator=</title>
    <ns>10</ns>
    <id>12529</id>
    <redirect title="Template:cpp/utility/optional/dsc operator=" />
    <revision>
      <id>68081</id>
      <parentid>60723</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list operator=]] to [[Template:cpp/experimental/optional/dcl list operator=]]</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/optional/dsc operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list swap</title>
    <ns>10</ns>
    <id>12532</id>
    <redirect title="Template:cpp/utility/optional/dsc swap" />
    <revision>
      <id>68087</id>
      <parentid>60729</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list swap]] to [[Template:cpp/experimental/optional/dcl list swap]]</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/utility/optional/dsc swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list swap2</title>
    <ns>10</ns>
    <id>12533</id>
    <redirect title="Template:cpp/utility/optional/dsc swap2" />
    <revision>
      <id>68089</id>
      <parentid>60731</parentid>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list swap2]] to [[Template:cpp/experimental/optional/dcl list swap2]]</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/optional/dsc swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list value</title>
    <ns>10</ns>
    <id>12534</id>
    <redirect title="Template:cpp/utility/optional/dsc value" />
    <revision>
      <id>68091</id>
      <parentid>60733</parentid>
      <timestamp>2014-03-16T20:19:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list value]] to [[Template:cpp/experimental/optional/dcl list value]]</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/optional/dsc value]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dcl list value or</title>
    <ns>10</ns>
    <id>12535</id>
    <redirect title="Template:cpp/utility/optional/dsc value or" />
    <revision>
      <id>68093</id>
      <parentid>60735</parentid>
      <timestamp>2014-03-16T20:19:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>P12 moved page [[Template:cpp/utility/optional/dcl list value or]] to [[Template:cpp/experimental/optional/dcl list value or]]</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/optional/dsc value or]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc bad optional access</title>
    <ns>10</ns>
    <id>9989</id>
    <revision>
      <id>80190</id>
      <parentid>80189</parentid>
      <timestamp>2015-07-31T14:45:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/c++14/libfund_ts</comment>
      <text xml:space="preserve" bytes="178">{{dsc class | cpp/experimental/optional/bad_optional_access | exception indicating checked access to an optional that doesn't contain a value | notes={{mark since libfund_ts}} }}</text>
      <sha1>k66vk9x0mudzupt0pv2tkgh17lfps1m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc constructor</title>
    <ns>10</ns>
    <id>10062</id>
    <revision>
      <id>68131</id>
      <parentid>68095</parentid>
      <timestamp>2014-03-16T20:27:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update location</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem ctor | cpp/experimental/optional/optional | constructs the optional object}}</text>
      <sha1>ngtuygnr7q1cgqrzwz7d53ikwwg2rud</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc destructor</title>
    <ns>10</ns>
    <id>10063</id>
    <revision>
      <id>79153</id>
      <parentid>68132</parentid>
      <timestamp>2015-06-25T19:39:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-engaged</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem dtor | cpp/experimental/optional/~optional | destroys the contained value, if there is one}}</text>
      <sha1>7bhwdohv7wlw93oqlapxybc5xetmy4a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc emplace</title>
    <ns>10</ns>
    <id>10074</id>
    <revision>
      <id>68139</id>
      <parentid>68099</parentid>
      <timestamp>2014-03-16T20:27:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update location</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/experimental/optional/emplace | constructs the contained value in-place}}</text>
      <sha1>6u6o0efvnhz984adylq0o8a9rzhdbmz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc hash</title>
    <ns>10</ns>
    <id>10073</id>
    <revision>
      <id>68180</id>
      <parentid>68101</parentid>
      <timestamp>2014-03-17T01:40:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>cpp/utility/optional -&gt; cpp/experimental/optional</comment>
      <text xml:space="preserve" bytes="155">{{dsc ptclass | cpp/experimental/optional/hash | title=std::hash{{dsc small|&lt;std::experimental::optional&gt;}} | specializes the {{lc|std::hash}} algorithm }}</text>
      <sha1>afmdo3m45t6axpgtav4ompcilu742uv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc in place</title>
    <ns>10</ns>
    <id>9985</id>
    <revision>
      <id>80565</id>
      <parentid>80563</parentid>
      <timestamp>2015-08-20T21:35:27Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Part of library fundamentals TS.</comment>
      <text xml:space="preserve" bytes="139">{{dsc fun | cpp/experimental/optional/in_place | an object of type {{c|std::experimental::in_place_t}} | notes={{mark since libfund_ts}} }}</text>
      <sha1>nu5sxkvot5nerbvnz8xzd1yrs959t3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc in place t</title>
    <ns>10</ns>
    <id>9986</id>
    <revision>
      <id>80568</id>
      <parentid>80566</parentid>
      <timestamp>2015-08-20T21:38:24Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Part of library fundamentals TS.</comment>
      <text xml:space="preserve" bytes="157">{{dsc class | cpp/experimental/optional/in_place_t | disambiguation tag type for in-place construction of optional types | notes={{mark since libfund_ts}} }}</text>
      <sha1>cwjl07hgkk20iureh1bxhkdxnwnx6ie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc make optional</title>
    <ns>10</ns>
    <id>10071</id>
    <revision>
      <id>68178</id>
      <parentid>68103</parentid>
      <timestamp>2014-03-17T01:40:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>cpp/utility/optional -&gt; cpp/experimental/optional</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/experimental/optional/make_optional | creates an {{tt|optional}} object }}</text>
      <sha1>cpep8w4u1od1py1q43g9o4kzfomsb6k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc nullopt</title>
    <ns>10</ns>
    <id>9987</id>
    <revision>
      <id>75959</id>
      <parentid>75957</parentid>
      <timestamp>2015-02-05T03:36:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>ts</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | cpp/experimental/optional/nullopt | an object of type {{tt|nullopt_t}} | notes={{mark since libfund_ts}} }}</text>
      <sha1>0n66f5r67bks5urovb5dxbossaj54h0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc nullopt t</title>
    <ns>10</ns>
    <id>9988</id>
    <revision>
      <id>75956</id>
      <parentid>75954</parentid>
      <timestamp>2015-02-05T03:35:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>ts</comment>
      <text xml:space="preserve" bytes="140">{{dsc class | cpp/experimental/optional/nullopt_t | indicator of optional type with uninitialized state | notes={{mark since libfund_ts}} }}</text>
      <sha1>j53fk0vmk7r3rkp7sq0jxx3q56w1t3c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc operator bool</title>
    <ns>10</ns>
    <id>10066</id>
    <revision>
      <id>79154</id>
      <parentid>68135</parentid>
      <timestamp>2015-06-25T19:40:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-engaged</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem fun | cpp/experimental/optional/operator bool | checks whether the object contains a value}}</text>
      <sha1>n3ke67hxhc47cfhokw6grxdv9bmd2vz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc operator cmp</title>
    <ns>10</ns>
    <id>10070</id>
    <revision>
      <id>82408</id>
      <parentid>68177</parentid>
      <timestamp>2015-12-16T05:41:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="189">{{dsc tfun | cpp/experimental/optional/operator_cmp | title=operator{{==}}&lt;br/&gt;operator!{{=}}&lt;br/&gt;operator&lt;&lt;br/&gt;operator&lt;=&lt;br/&gt;operator&gt;&lt;br/&gt;operator&gt;= | compares {{tt|optional}} objects }}</text>
      <sha1>1qk4sb0a1s43538jwrzno7pgvctowi2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc operator*</title>
    <ns>10</ns>
    <id>10065</id>
    <revision>
      <id>68134</id>
      <parentid>68105</parentid>
      <timestamp>2014-03-16T20:27:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update location</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/experimental/optional/operator* | title=operator-&amp;gt;&lt;br/&gt;operator* | accesses the contained value}}</text>
      <sha1>d23mixdslyzsy49qnmscxlqy39e4jg5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc operator=</title>
    <ns>10</ns>
    <id>10064</id>
    <revision>
      <id>68133</id>
      <parentid>68107</parentid>
      <timestamp>2014-03-16T20:27:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update location</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/experimental/optional/operator{{=}} | assigns contents}}</text>
      <sha1>g78rv70kvmjbe61g1qtlyomltrx1md1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc optional</title>
    <ns>10</ns>
    <id>9984</id>
    <revision>
      <id>80572</id>
      <parentid>80570</parentid>
      <timestamp>2015-08-20T21:46:43Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Part of library fundamentals TS.</comment>
      <text xml:space="preserve" bytes="124">{{dsc tclass | cpp/experimental/optional | a wrapper that may or may not hold an object | notes={{mark since libfund_ts}} }}</text>
      <sha1>ngxsnys33cp12klc2dz5qynqjirka14</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc swap</title>
    <ns>10</ns>
    <id>10069</id>
    <revision>
      <id>68138</id>
      <parentid>68113</parentid>
      <timestamp>2014-03-16T20:27:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update location</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/experimental/optional/swap| exchanges the contents}}</text>
      <sha1>ki9mih3qaon9161r9ty1kmlg7lxtwhx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc swap2</title>
    <ns>10</ns>
    <id>10072</id>
    <revision>
      <id>68179</id>
      <parentid>68115</parentid>
      <timestamp>2014-03-17T01:40:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>cpp/utility/optional -&gt; cpp/experimental/optional</comment>
      <text xml:space="preserve" bytes="152">{{dsc fun | cpp/experimental/optional/swap2 | title=std::swap{{dsc small|(std::experimental::optional)}} | specializes the {{lc|std::swap}} algorithm }}</text>
      <sha1>mkp3gejldjp10tyog2wfzk3c1g57c5l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc value</title>
    <ns>10</ns>
    <id>10067</id>
    <revision>
      <id>68136</id>
      <parentid>68117</parentid>
      <timestamp>2014-03-16T20:27:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update location</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/experimental/optional/value| returns the contained value}}</text>
      <sha1>jhxero14wzgfcded415yj1v8w3bggnd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/dsc value or</title>
    <ns>10</ns>
    <id>10068</id>
    <revision>
      <id>78304</id>
      <parentid>68137</parentid>
      <timestamp>2015-05-16T03:57:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-engaged</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/experimental/optional/value_or | returns the contained value if available, another value otherwise }}</text>
      <sha1>9vx3qzcqdbygodmffjsww28if68s1t8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/navbar</title>
    <ns>10</ns>
    <id>10075</id>
    <revision>
      <id>76760</id>
      <parentid>68183</parentid>
      <timestamp>2015-03-01T03:56:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reorg</comment>
      <text xml:space="preserve" bytes="385">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content
|heading4 = cpp/experimental/optional/navbar heading
|content4 = cpp/experimental/optional/navbar content
}}</text>
      <sha1>bijv960giv8zbavhanymlrz441t8z68</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/navbar content</title>
    <ns>10</ns>
    <id>10077</id>
    <revision>
      <id>82410</id>
      <parentid>80577</parentid>
      <timestamp>2015-12-16T06:14:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1214">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/experimental/optional/optional}}
{{nv mem ln | cpp/experimental/optional/~optional}}
{{nv mem ln | cpp/experimental/optional/operator{{=}}}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/experimental/optional/operator* | operator-&gt; | operator*}}
{{nv mem ln | cpp/experimental/optional/operator bool}}
{{nv mem ln | cpp/experimental/optional/value}}
{{nv mem ln | cpp/experimental/optional/value_or}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/experimental/optional/emplace}}
{{nv mem ln | cpp/experimental/optional/swap}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/experimental/optional/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}} }}
{{nv ln | cpp/experimental/optional/make_optional}}
{{nv ln | cpp/experimental/optional/swap2 | swap}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/experimental/optional/hash}}
{{nv ln | cpp/experimental/optional/nullopt_t}}
{{nv ln | cpp/experimental/optional/in_place_t}}
{{nv ln | cpp/experimental/optional/bad_optional_access}}

{{nv h1 | Helper objects}}
{{nv ln | cpp/experimental/optional/nullopt}}
{{nv ln | cpp/experimental/optional/in_place}}
{{nv end}}</text>
      <sha1>82ctg6z3r384352jd1zs3z20s3vsowq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/navbar heading</title>
    <ns>10</ns>
    <id>10076</id>
    <revision>
      <id>68142</id>
      <parentid>68125</parentid>
      <timestamp>2014-03-16T20:33:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="61">{{ltt|cpp/experimental/optional|std::experimental::optional}}</text>
      <sha1>ohswhcpeohpk29bzi4waoamua941srx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/optional/title</title>
    <ns>10</ns>
    <id>10080</id>
    <revision>
      <id>68182</id>
      <parentid>68127</parentid>
      <timestamp>2014-03-17T01:50:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=experimental::optional::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>t2aln1e9n6ii7sfki6joohdqhn3hxea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/dsc constructor</title>
    <ns>10</ns>
    <id>14205</id>
    <revision>
      <id>79383</id>
      <timestamp>2015-07-05T22:24:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem ctor | cpp/experimental/ostream_joiner/ostream_joiner| constructs a new {{tt|ostream_joiner}}}}</text>
      <sha1>dwvlso5emdoibz1t150dnkagtvc5xiu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/dsc destructor</title>
    <ns>10</ns>
    <id>14204</id>
    <revision>
      <id>79382</id>
      <timestamp>2015-07-05T22:24:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem dtor | nolink=true| destructs an {{tt|ostream_joiner}} | notes={{mark implicit}} }}</text>
      <sha1>i4bf1ep4agw8csk7yxy61ihnfdip5c6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/dsc make ostream joiner</title>
    <ns>10</ns>
    <id>14206</id>
    <revision>
      <id>79384</id>
      <timestamp>2015-07-05T22:28:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="174">{{dsc tfun | cpp/experimental/ostream_joiner/make_ostream_joiner| creates a {{tt|ostream_joiner}} object, deducing the template's type arguments from the function arguments}}</text>
      <sha1>dnmv54epgw8qbttwdsa7wbbznu06o8e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/dsc operator arith</title>
    <ns>10</ns>
    <id>14201</id>
    <revision>
      <id>79379</id>
      <timestamp>2015-07-05T22:22:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/experimental/ostream_joiner/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | no-op }}</text>
      <sha1>ix6r2futtjaz079tlakbyz2puwwvgsi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/dsc operator*</title>
    <ns>10</ns>
    <id>14202</id>
    <revision>
      <id>79380</id>
      <timestamp>2015-07-05T22:23:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="68">{{dsc mem fun | cpp/experimental/ostream_joiner/operator* | no-op }}</text>
      <sha1>s90qq9gsonckmj129frowgks2857q40</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/dsc operator=</title>
    <ns>10</ns>
    <id>14203</id>
    <revision>
      <id>79381</id>
      <timestamp>2015-07-05T22:23:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem fun | cpp/experimental/ostream_joiner/operator{{=}} | writes a object to the associated output sequence }}</text>
      <sha1>525vphlklofvtdxa6oh3akgqouw2ui1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/navbar content</title>
    <ns>10</ns>
    <id>14212</id>
    <revision>
      <id>79391</id>
      <timestamp>2015-07-05T22:44:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="422">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/experimental/ostream_joiner/ostream_joiner}}
{{nv mem ln | cpp/experimental/ostream_joiner/operator{{=}}}}
{{nv mem ln | cpp/experimental/ostream_joiner/operator*}}
{{nv mem ln | cpp/experimental/ostream_joiner/operator_arith|operator++|operator++(int)}}
{{nv h2 | Non-member functions}}
{{nv ln | cpp/experimental/ostream_joiner/make_ostream_joiner}}
{{nv end}}</text>
      <sha1>oo655m8v8tfpuqp16geu3gxvjda8okc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/navbar heading</title>
    <ns>10</ns>
    <id>14211</id>
    <revision>
      <id>79390</id>
      <timestamp>2015-07-05T22:42:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="73">{{ltt|cpp/experimental/ostream_joiner|std::experimental::ostream_joiner}}</text>
      <sha1>4zan2lh5nljtmatpsn2cv375ol26r18</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ostream joiner/title</title>
    <ns>10</ns>
    <id>14209</id>
    <revision>
      <id>79387</id>
      <timestamp>2015-07-05T22:40:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="125">&lt;onlyinclude&gt;{{cpp/title | n=experimental::ostream_joiner::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>qxniihs5r0sxdzfr7pufzmpmunb3z8p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/packaged task/title</title>
    <ns>10</ns>
    <id>14418</id>
    <revision>
      <id>80204</id>
      <timestamp>2015-07-31T20:13:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">&lt;onlyinclude&gt;{{cpp/title | n=experimental::packaged_task::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>hk4lg3dl70qmycvvsm93fsulsz0hbhs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallel/title</title>
    <ns>10</ns>
    <id>14365</id>
    <revision>
      <id>80068</id>
      <timestamp>2015-07-29T04:59:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=experimental::parallel::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>qajyu3rgrabvc1khjkh8s23zi0hws6d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/dsc algorithm</title>
    <ns>10</ns>
    <id>14361</id>
    <revision>
      <id>80063</id>
      <parentid>79932</parentid>
      <timestamp>2015-07-28T23:52:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>change to /existing and anchor</comment>
      <text xml:space="preserve" bytes="189">{{dsc tfun | cpp/experimental/parallelism/existing#{{{1}}} | title=std::experimental::parallel::{{{1|}}} | parallelized version of {{tt|std::{{{1}}}}} |notes={{mark since parallelism_ts}}}}</text>
      <sha1>cfqxqjehyojbiksmml0yj7eawhfbvyx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/dsc exclusive scan</title>
    <ns>10</ns>
    <id>14360</id>
    <revision>
      <id>79861</id>
      <timestamp>2015-07-28T10:25:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="168">{{dsc tfun | cpp/experimental/exclusive_scan | similar to {{lc|std::partial_sum}}, excludes the ith input element from the ith sum|notes={{mark since parallelism_ts}}}}</text>
      <sha1>9ndvrted602jjlwcnbrdc4895uwbgsa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/dsc for each</title>
    <ns>10</ns>
    <id>14357</id>
    <revision>
      <id>79855</id>
      <timestamp>2015-07-28T10:21:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+template for seealso</comment>
      <text xml:space="preserve" bytes="130">{{dsc tfun | cpp/experimental/for_each | similar to {{lc|std::for_each}} except returns void|notes={{mark since parallelism_ts}}}}</text>
      <sha1>2kobcndp9a6aant0dp277w7d2e7b51b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/dsc for each n</title>
    <ns>10</ns>
    <id>14356</id>
    <revision>
      <id>79854</id>
      <timestamp>2015-07-28T10:21:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>for seealso</comment>
      <text xml:space="preserve" bytes="146">{{dsc tfun | cpp/experimental/for_each_n | applies a function object to the first n elements of a sequence  |notes={{mark since parallelism_ts}}}}</text>
      <sha1>ptqfsjokejmj6izhntrnmu94xgalrm6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/dsc inclusive scan</title>
    <ns>10</ns>
    <id>14359</id>
    <revision>
      <id>79860</id>
      <timestamp>2015-07-28T10:24:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc tfun | cpp/experimental/inclusive_scan | similar to {{lc|std::partial_sum}}, includes the ith input element in the ith sum |notes={{mark since parallelism_ts}}}}</text>
      <sha1>sw1cuniztif7k2gypccngw2aoh73ljn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/dsc reduce</title>
    <ns>10</ns>
    <id>14358</id>
    <revision>
      <id>79858</id>
      <timestamp>2015-07-28T10:22:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/experimental/reduce | similar to {{lc|std::accumulate}}, except out of order |notes={{mark since parallelism_ts}}}}</text>
      <sha1>jqvequ9ckcaf0fdvgt9x8db01pqf47q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/dsc transform reduce</title>
    <ns>10</ns>
    <id>14460</id>
    <revision>
      <id>80809</id>
      <timestamp>2015-08-30T21:27:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/experimental/transform_reduce | applies a functor, then reduces out of order |notes={{mark since parallelism_ts}}}}</text>
      <sha1>a49tf3eslafzc2o4sh57s5kjohk6h0k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/existing</title>
    <ns>10</ns>
    <id>14363</id>
    <revision>
      <id>80054</id>
      <parentid>80044</parentid>
      <timestamp>2015-07-28T22:38:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>trim that one too</comment>
      <text xml:space="preserve" bytes="158">{{dsc| {{anchor|{{trim|{{{1}}}}}}}{{c/core|1={{{2}}}}}|{{#if:{{{override|}}}|{{ltt|{{{override}}}|std::{{trim|1={{{1}}}}}}}|{{lc|std::{{trim|1={{{1}}}}}}}}}}}</text>
      <sha1>tw06l1lfhewz4jfmrtiy42auo30df6v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/navbar</title>
    <ns>10</ns>
    <id>14020</id>
    <revision>
      <id>77040</id>
      <timestamp>2015-03-13T15:30:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="273">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/parallelism/navbar heading
|content3 = cpp/experimental/parallelism/navbar content
}}</text>
      <sha1>k0d4vif56bmap4hkp6vcpvz318yi4vv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/navbar content</title>
    <ns>10</ns>
    <id>14022</id>
    <revision>
      <id>80071</id>
      <parentid>80066</parentid>
      <timestamp>2015-07-29T05:13:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>reorganize</comment>
      <text xml:space="preserve" bytes="1293">{{nv begin}}
{{nv h1 | [[cpp/experimental/parallelism/execution_policy|Execution policies]]}}
{{nv ln | cpp/experimental/execution_policy | parallel::execution_policy}}
{{nv ln | cpp/experimental/execution_policy_tag_t | parallel::sequential_execution_policy| parallel::parallel_execution_policy | parallel::parallel_vector_execution_policy }}
{{nv ln | cpp/experimental/execution_policy_tag | parallel::seq | parallel::par | parallel::par_vec}}
{{nv h1 | [[cpp/experimental/parallelism/parallel_algorithms|Parallel algorithms]]}}
{{nv h2 | Parallel exceptions }}
{{nv ln | cpp/experimental/exception_list | parallel::exception_list }}
{{nv h2 | [[cpp/experimental/parallelism/existing|Parallelized version of existing algorithms]] }}
{{nv h2 | New algorithms }}
{{nv ln | cpp/experimental/for_each|parallel::for_each|parallel::for_each_n}}
{{nv ln | cpp/experimental/reduce|parallel::reduce}}
{{nv ln | cpp/experimental/exclusive_scan|parallel::exclusive_scan}}
{{nv ln | cpp/experimental/inclusive_scan|parallel::inclusive_scan}}
{{nv ln | cpp/experimental/transform_reduce|parallel::transform_reduce}}
{{nv ln | cpp/experimental/transform_exclusive_scan|parallel::transform_exclusive_scan}}
{{nv ln | cpp/experimental/transform_inclusive_scan|parallel::transform_inclusive_scan}}
{{nv end}}</text>
      <sha1>il6wgwo8gmo2nm30pqsqztouxouq4sq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/parallelism/navbar heading</title>
    <ns>10</ns>
    <id>14021</id>
    <revision>
      <id>77042</id>
      <timestamp>2015-03-13T15:31:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="60">[[cpp/experimental/parallelism |Extensions for parallelism]]</text>
      <sha1>dysjeg2w9yf2aibqud2e3p67ns19n2l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr container</title>
    <ns>10</ns>
    <id>14315</id>
    <revision>
      <id>80050</id>
      <parentid>79735</parentid>
      <timestamp>2015-07-28T22:20:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>anchor</comment>
      <text xml:space="preserve" bytes="437">{{#if:{{{multiline|}}}|{{dsc|{{anchor|{{{name|{{{1}}}}}}}}{{c/core|1=template&lt;{{{tpdecl|class T}}}&gt; 
using {{{name|{{{1}}}}}} =}} | {{c/core|std::{{{name|{{{1}}}}}}&lt;{{{tpargs|T}}},
    polymorphic_allocator&lt;{{{allocargs|T}}}&gt;&gt;;}}}}|{{dsc|{{anchor|{{{name|{{{1}}}}}}}}{{c/core|1=template&lt;{{{tpdecl|class T}}}&gt; using {{{name|{{{1}}}}}} =}} | {{c/core|std::{{{name|{{{1}}}}}}&lt;{{{tpargs|T}}}, polymorphic_allocator&lt;{{{allocargs|T}}}&gt;&gt;;}}}}}}</text>
      <sha1>8ab0jucfu35d6x0bh0jvztvp96fgbuo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr container special</title>
    <ns>10</ns>
    <id>14316</id>
    <revision>
      <id>80051</id>
      <parentid>79734</parentid>
      <timestamp>2015-07-28T22:20:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>anchor</comment>
      <text xml:space="preserve" bytes="133">{{dsc|{{anchor|{{{name|{{{1}}}}}}}}{{c/core|1=using {{{name|{{{1}}}}}} =}} | {{c/core|pmr::{{{base|{{{2}}}}}}&lt;{{{arg|{{{3}}}}}}&gt;;}}}}</text>
      <sha1>bl0nb7r0aimyh4pucsokoma0xp04usj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/dsc get default resource</title>
    <ns>10</ns>
    <id>14352</id>
    <revision>
      <id>79838</id>
      <timestamp>2015-07-27T23:04:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/experimental/get_default_resource | gets the default {{tt|memory_resource}} }}</text>
      <sha1>mmpapgl23vhgki4z5p1pokln7pcf8fn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/dsc new delete resource</title>
    <ns>10</ns>
    <id>13671</id>
    <revision>
      <id>79846</id>
      <parentid>79833</parentid>
      <timestamp>2015-07-28T00:29:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="207">{{dsc fun | cpp/experimental/new_delete_resource | returns a static program-wide {{tt|memory_resource}} that uses the global {{lc|operator new}} and {{lc|operator delete}} to allocate and deallocate memory}}</text>
      <sha1>ki79qt2gt7ylpn01mtuxc0dq2hee7lc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/dsc null memory resource</title>
    <ns>10</ns>
    <id>13672</id>
    <revision>
      <id>79834</id>
      <parentid>71535</parentid>
      <timestamp>2015-07-27T22:44:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweak</comment>
      <text xml:space="preserve" bytes="122">{{dsc fun | cpp/experimental/null_memory_resource | returns a static {{tt|memory_resource}} that performs no allocation }}</text>
      <sha1>skxlalgh1242uvm6hq5p0n0mk7av4ti</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/dsc set default resource</title>
    <ns>10</ns>
    <id>13673</id>
    <revision>
      <id>79839</id>
      <parentid>79835</parentid>
      <timestamp>2015-07-27T23:04:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>split</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/experimental/set_default_resource | sets the default {{tt|memory_resource}} }}</text>
      <sha1>jzzqcrntv9972d8bj87ygxxuxdlwldf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/dsc synchronized pool resource</title>
    <ns>10</ns>
    <id>14575</id>
    <revision>
      <id>82153</id>
      <parentid>82151</parentid>
      <timestamp>2015-12-05T08:43:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>tweak</comment>
      <text xml:space="preserve" bytes="197">{{dsc class | cpp/experimental/synchronized_pool_resource | a thread-safe {{lc|std::experimental::pmr::memory_resource|memory_resource}} for managing allocations in pools of different block sizes}}</text>
      <sha1>pjfdgaa4flwsp8w0e9j1zyn5r1f1aes</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/dsc unsynchronized pool resource</title>
    <ns>10</ns>
    <id>14576</id>
    <revision>
      <id>82152</id>
      <timestamp>2015-12-05T08:43:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="201">{{dsc class | cpp/experimental/unsynchronized_pool_resource | a thread-unsafe {{lc|std::experimental::pmr::memory_resource|memory_resource}} for managing allocations in pools of different block sizes}}</text>
      <sha1>ixocwulcr286c1ri4upjnxkrfn51rtn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/memory resource/dsc operator cmp</title>
    <ns>10</ns>
    <id>13669</id>
    <redirect title="Template:cpp/experimental/memory resource/dsc operator eq" />
    <revision>
      <id>80141</id>
      <parentid>80140</parentid>
      <timestamp>2015-07-30T03:07:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Redirected page to [[Template:cpp/experimental/memory resource/dsc operator eq]]</comment>
      <text xml:space="preserve" bytes="71">#REDIRECT [[Template:cpp/experimental/memory resource/dsc operator eq]]</text>
      <sha1>fy4peht3vpt5cz2mp6gdedwghble5by</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/memory resource/title</title>
    <ns>10</ns>
    <id>14338</id>
    <revision>
      <id>79812</id>
      <timestamp>2015-07-27T21:51:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="131">&lt;onlyinclude&gt;{{cpp/title | n=experimental::pmr::memory_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>gyyg0qbsfylce5a1il2zuqq9e74czr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/monotonic buffer resource/title</title>
    <ns>10</ns>
    <id>14597</id>
    <revision>
      <id>82179</id>
      <timestamp>2015-12-05T09:38:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="141">&lt;onlyinclude&gt;{{cpp/title | n=experimental::pmr::monotonic_buffer_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>mwpzm20awvov943pq3bs2pmj86jdyvo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/polymorphic allocator/dsc operator cmp</title>
    <ns>10</ns>
    <id>13670</id>
    <revision>
      <id>71528</id>
      <timestamp>2014-06-13T03:54:25Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add template.</comment>
      <text xml:space="preserve" bytes="130">{{dsc tfun | cpp/experimental/pmr/polymorphic_allocator/operator cmp | title=operator==&lt;br&gt;operator!= | compares two allocators }}</text>
      <sha1>kjecfdrplys7j4dyol2svd2yxmtt2i6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/polymorphic allocator/title</title>
    <ns>10</ns>
    <id>14605</id>
    <revision>
      <id>82191</id>
      <timestamp>2015-12-05T10:22:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="137">&lt;onlyinclude&gt;{{cpp/title | n=experimental::pmr::polymorphic_allocator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>mbshzbj1morqzh337bv7uayln5htjct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/synchronized pool resource/title</title>
    <ns>10</ns>
    <id>14578</id>
    <revision>
      <id>82156</id>
      <timestamp>2015-12-05T08:48:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">&lt;onlyinclude&gt;{{cpp/title | n=experimental::pmr::synchronized_pool_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>esshie6lbgr9ylohj1837d9i0f8lj08</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/title</title>
    <ns>10</ns>
    <id>14318</id>
    <revision>
      <id>79761</id>
      <parentid>79753</parentid>
      <timestamp>2015-07-25T06:37:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>T. Canens moved page [[Template:cpp/experimental/memory/title]] to [[Template:cpp/experimental/pmr/title]]</comment>
      <text xml:space="preserve" bytes="114">&lt;onlyinclude&gt;{{cpp/title | n=experimental::pmr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>m0w6i7n5ve54b2ms9pjp2zf3fvytbov</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/pmr/unsynchronized pool resource/title</title>
    <ns>10</ns>
    <id>14579</id>
    <revision>
      <id>82157</id>
      <timestamp>2015-12-05T08:48:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">&lt;onlyinclude&gt;{{cpp/title | n=experimental::pmr::unsynchronized_pool_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>5fts4n849zl3xbko9zecuj518w97owi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc allocate</title>
    <ns>10</ns>
    <id>14386</id>
    <revision>
      <id>80125</id>
      <timestamp>2015-07-29T22:40:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun|cpp/experimental/polymorphic_allocator/allocate | Allocate memory }}</text>
      <sha1>7eg98p6lfyijasg0rd24kt1g233xty7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc construct</title>
    <ns>10</ns>
    <id>14388</id>
    <revision>
      <id>80128</id>
      <parentid>80127</parentid>
      <timestamp>2015-07-29T22:42:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem fun|cpp/experimental/polymorphic_allocator/construct | Constructs an object in allocated storage }}</text>
      <sha1>4t5vaemvgw7ucbo725qw1yd1sn6t768</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc constructor</title>
    <ns>10</ns>
    <id>14383</id>
    <revision>
      <id>80122</id>
      <timestamp>2015-07-29T22:37:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem ctor|cpp/experimental/polymorphic_allocator/polymorphic_allocator | Constructs a {{tt|polymorphic_allocator}}}}</text>
      <sha1>74uya381vxbpok1ezimun0xz8gdhmnr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc deallocate</title>
    <ns>10</ns>
    <id>14387</id>
    <revision>
      <id>80126</id>
      <timestamp>2015-07-29T22:40:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun|cpp/experimental/polymorphic_allocator/deallocate | Deallocate memory }}</text>
      <sha1>65numl2uy2bsmklfuxd4jgk0gxgdkxs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc destroy</title>
    <ns>10</ns>
    <id>14389</id>
    <revision>
      <id>80129</id>
      <timestamp>2015-07-29T22:43:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun|cpp/experimental/polymorphic_allocator/destroy | Destroys an object in allocated storage }}</text>
      <sha1>1f1uck4zc44ah3iadyki89tt8o63tcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc destructor</title>
    <ns>10</ns>
    <id>14384</id>
    <revision>
      <id>80123</id>
      <timestamp>2015-07-29T22:38:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem dtor | nolink=true | notes={{mark implicit}} | Implicitly declared destructor}}</text>
      <sha1>jmj0542oplaubg96761gnyulb105m5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc operator eq</title>
    <ns>10</ns>
    <id>14394</id>
    <revision>
      <id>80135</id>
      <timestamp>2015-07-29T22:48:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="140">{{dsc fun  | cpp/experimental/polymorphic_allocator/operator_eq | title=operator==&lt;br&gt;operator!=|compare two {{tt|polymorphic_allocator}}s}}</text>
      <sha1>3842ermm3na80zg5ned6x8926dmssqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc operator=</title>
    <ns>10</ns>
    <id>14385</id>
    <revision>
      <id>80124</id>
      <timestamp>2015-07-29T22:39:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun|cpp/experimental/polymorphic_allocator/operator{{=}} | Copy assignment operator}}</text>
      <sha1>69bp4usyagd9id6f07b0nllahbdjrgo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc resource</title>
    <ns>10</ns>
    <id>14390</id>
    <revision>
      <id>80130</id>
      <timestamp>2015-07-29T22:43:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun|cpp/experimental/polymorphic_allocator/resource| Returns a pointer to the underlying memory resource }}</text>
      <sha1>d1sxspda3wgehzq2wu1shl1iosy43ue</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/polymorphic allocator/dsc select on container copy construction</title>
    <ns>10</ns>
    <id>14391</id>
    <revision>
      <id>80131</id>
      <timestamp>2015-07-29T22:45:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="179">{{dsc mem fun|cpp/experimental/polymorphic_allocator/select_on_container_copy_construction | Create a new {{tt|polymorphic_allocator}} for use by a container's copy constructor }}</text>
      <sha1>b97cerl5dd6knjmjilcjkux54xcerzu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/promise/title</title>
    <ns>10</ns>
    <id>14422</id>
    <revision>
      <id>80217</id>
      <timestamp>2015-07-31T22:34:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">&lt;onlyinclude&gt;{{cpp/title | n=experimental::promise::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>etdwpjk7ka6p8j4svffvmmnw81749sv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc cmp func</title>
    <ns>10</ns>
    <id>14283</id>
    <revision>
      <id>83231</id>
      <parentid>79510</parentid>
      <timestamp>2016-01-26T10:31:09Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>remove extra &lt;br/&gt;</comment>
      <text xml:space="preserve" bytes="566">{{dsc ptclass | cpp/experimental/propagate_const/cmp func| title=std::equal_to{{dsc small|&lt;std::experimental::propagate_const&gt;}}&lt;br/&gt;std::not_equal_to{{dsc small|&lt;std::experimental::propagate_const&gt;}}&lt;br/&gt;std::less{{dsc small|&lt;std::experimental::propagate_const&gt;}}&lt;br/&gt;std::greater{{dsc small|&lt;std::experimental::propagate_const&gt;}}&lt;br/&gt;std::less_equal{{dsc small|&lt;std::experimental::propagate_const&gt;}}&lt;br/&gt;std::greater_equal{{dsc small|&lt;std::experimental::propagate_const&gt;}} | Specializations of the standard comparison function objects for {{tt|propagate_const}} }}</text>
      <sha1>2ef6bxb7yokalfmk8v8u5k4k0055mn4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc constructor</title>
    <ns>10</ns>
    <id>14272</id>
    <revision>
      <id>79499</id>
      <timestamp>2015-07-08T08:54:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem ctor | cpp/experimental/propagate_const/propagate_const| constructs a new {{tt|propagate_const}} }}</text>
      <sha1>1vqfr9n36b06j9a5xaysjpsttk8esgj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc destructor</title>
    <ns>10</ns>
    <id>14273</id>
    <revision>
      <id>79500</id>
      <timestamp>2015-07-08T08:55:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem dtor | nolink=true| destructs an {{tt|propagate_const}}, destroying the contained pointer | notes={{mark implicit}} }}</text>
      <sha1>jk91xkc8d4jcwnadgpelorslrtwwexl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc get</title>
    <ns>10</ns>
    <id>14276</id>
    <revision>
      <id>79503</id>
      <timestamp>2015-07-08T09:00:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/experimental/propagate_const/get | returns a pointer to the object pointed to by the wrapped pointer }}</text>
      <sha1>3tbg854892or5luu9wvde059ksik8u4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc get underlying</title>
    <ns>10</ns>
    <id>14284</id>
    <revision>
      <id>79511</id>
      <timestamp>2015-07-08T09:08:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="120">{{dsc tfun | cpp/experimental/propagate_const/get_underlying| Retrieves a reference to the wrapped pointer-like object}}</text>
      <sha1>8xdlv53edagl1qvaccrd2t5joc5pdil</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc hash</title>
    <ns>10</ns>
    <id>14282</id>
    <revision>
      <id>79509</id>
      <timestamp>2015-07-08T09:05:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="166">{{dsc ptclass | cpp/experimental/propagate_const/hash | title=std::hash{{dsc small|&lt;std::experimental::propagate_const&gt;}} | hash support for {{tt|propagate_const}} }}</text>
      <sha1>l57uea94zepuudpfp57hxy1ugy6rpfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc operator bool</title>
    <ns>10</ns>
    <id>14277</id>
    <revision>
      <id>79504</id>
      <timestamp>2015-07-08T09:00:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/experimental/propagate_const/operator bool | checks if the wrapped pointer is null }}</text>
      <sha1>o98tuyhlydj2pmkt8i8f26yqylohikz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc operator cmp</title>
    <ns>10</ns>
    <id>14280</id>
    <revision>
      <id>79507</id>
      <timestamp>2015-07-08T09:04:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="233">{{dsc tfun | cpp/experimental/propagate_const/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares to another {{tt|propagate_const}}, another pointer, or with {{c|nullptr}} }}</text>
      <sha1>h59vlmczwzvtvgqluvgrd05tnn6p9w9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc operator element type*</title>
    <ns>10</ns>
    <id>14279</id>
    <revision>
      <id>79506</id>
      <timestamp>2015-07-08T09:03:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="179">{{dsc mem fun | cpp/experimental/propagate_const/operator element_type*| title=operator element_type*&lt;br/&gt;operator const element_type* | implicit conversion function to pointer }}</text>
      <sha1>dp77w0nh9nuoly7wmca926ertagqn25</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc operator*</title>
    <ns>10</ns>
    <id>14278</id>
    <revision>
      <id>79505</id>
      <timestamp>2015-07-08T09:01:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/experimental/propagate_const/operator*| title=operator*&lt;br&gt;operator-&gt; |dereferences the wrapped pointer }}</text>
      <sha1>k9783i4ie9u2kq0bll1pxe7or72f5jn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc operator=</title>
    <ns>10</ns>
    <id>14275</id>
    <revision>
      <id>79502</id>
      <timestamp>2015-07-08T08:59:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem fun | cpp/experimental/propagate_const/operator{{=}} | assigns the {{tt|propagate_const}} object }}</text>
      <sha1>0l6gpmx9m7qytbkzdpn11w5umm8nkbt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc swap</title>
    <ns>10</ns>
    <id>14274</id>
    <revision>
      <id>79501</id>
      <timestamp>2015-07-08T08:56:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/experimental/propagate_const/swap | swaps the wrapped pointer }}</text>
      <sha1>2u57pympdbd1mb5av2ep8m660pvl9vf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/dsc swap2</title>
    <ns>10</ns>
    <id>14281</id>
    <revision>
      <id>79508</id>
      <timestamp>2015-07-08T09:04:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="175">{{dsc tfun | cpp/experimental/propagate_const/swap2 | title=std::experimental::swap{{dsc small|(std::experimental::propagate_const)}} | specializes the {{tt|swap}} algorithm}}</text>
      <sha1>lztr3rg781h4yv6vj0pg0u6r8c8tc9r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/navbar content</title>
    <ns>10</ns>
    <id>14271</id>
    <revision>
      <id>79560</id>
      <parentid>79523</parentid>
      <timestamp>2015-07-10T06:40:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+missing</comment>
      <text xml:space="preserve" bytes="1128">{{nv begin}}

{{nv h1 | Member functions}}
{{nv mem ln | cpp/experimental/propagate_const/propagate_const}}
{{nv mem ln | cpp/experimental/propagate_const/operator{{=}}}}
{{nv mem ln | cpp/experimental/propagate_const/swap}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/experimental/propagate_const/get}}
{{nv mem ln | cpp/experimental/propagate_const/operator bool}}
{{nv mem ln | cpp/experimental/propagate_const/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/experimental/propagate_const/operator element_type*|operator element_type*|operator const element_type*}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/experimental/propagate_const/operator_cmp |operator{{==}}|operator!{{=}}|operator&lt;|operator&gt;|operator&lt;{{=}}|operator&gt;|operator&gt;{{=}}}}
{{nv ln | cpp/experimental/propagate_const/swap2 |swap}}
{{nv ln | cpp/experimental/propagate_const/get_underlying |get_underlying}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/experimental/propagate_const/hash |std::hash}}
{{nv ln | cpp/experimental/propagate_const/cmp_func |std::equal_to|std::not_equal_to|std::less|std::greater|std::less_equal|std::greater_equal}}
{{nv end}}</text>
      <sha1>q2l3ujd1pm0l7jq38w1fj9z2zdlso64</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/navbar heading</title>
    <ns>10</ns>
    <id>14270</id>
    <revision>
      <id>79497</id>
      <timestamp>2015-07-08T08:46:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="75">{{ltt|cpp/experimental/propagate_const|std::experimental::propagate_const}}</text>
      <sha1>33zy4vqf5o83iarzcebsufvvgdcoqrj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/propagate const/title</title>
    <ns>10</ns>
    <id>14285</id>
    <revision>
      <id>79512</id>
      <timestamp>2015-07-08T09:10:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="126">&lt;onlyinclude&gt;{{cpp/title | n=experimental::propagate_const::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>5z7cxmq8yd6bbana1fv1mz6mlv0r3cm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc adjacent find</title>
    <ns>10</ns>
    <id>16024</id>
    <revision>
      <id>89541</id>
      <timestamp>2017-01-22T04:56:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="146">{{dsc tfun | cpp/experimental/ranges/algorithm/adjacent_find | finds the first two adjacent items that are equal (or satisfy a given predicate) }}</text>
      <sha1>efjvhhc85oe9x9a5hzng3ang6p8v0wl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc all any none of</title>
    <ns>10</ns>
    <id>16016</id>
    <revision>
      <id>89533</id>
      <timestamp>2017-01-22T04:55:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="187">{{dsc tfun | cpp/experimental/ranges/algorithm/all_any_none_of | title=all_of&lt;br&gt;any_of&lt;br&gt;none_of | checks if a predicate is {{c|true}} for all, any or none of the elements in a range }}</text>
      <sha1>9dfrxait157test3sgygazvui3izr9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc binary search</title>
    <ns>10</ns>
    <id>16063</id>
    <revision>
      <id>89580</id>
      <timestamp>2017-01-22T05:00:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc tfun | cpp/experimental/ranges/algorithm/binary_search | determines if an element exists in a certain range }}</text>
      <sha1>t5pub2nk32tp5pfnv0jx3pbaza8t0ai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc copy</title>
    <ns>10</ns>
    <id>16027</id>
    <revision>
      <id>89544</id>
      <timestamp>2017-01-22T04:56:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc tfun | cpp/experimental/ranges/algorithm/copy | copies a range of elements to a new location | title=copy&lt;br&gt;copy_if }}</text>
      <sha1>1o0l8afzpyxicz3weqyhb9be4z6nbfz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc copy backward</title>
    <ns>10</ns>
    <id>16029</id>
    <revision>
      <id>89546</id>
      <timestamp>2017-01-22T04:57:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc tfun | cpp/experimental/ranges/algorithm/copy_backward | copies a range of elements in backwards order }}</text>
      <sha1>ps9r2uz28izhn16p979cxlcxrx2jw31</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc copy n</title>
    <ns>10</ns>
    <id>16028</id>
    <revision>
      <id>89545</id>
      <timestamp>2017-01-22T04:57:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc tfun | cpp/experimental/ranges/algorithm/copy_n | copies a number of elements to a new location  }}</text>
      <sha1>0kem90zfgsv72zkzmoyr21puau0o57x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc count</title>
    <ns>10</ns>
    <id>16018</id>
    <revision>
      <id>89535</id>
      <timestamp>2017-01-22T04:55:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="143">{{dsc tfun | cpp/experimental/ranges/algorithm/count | title=count&lt;br&gt;count_if | returns the number of elements satisfying specific criteria }}</text>
      <sha1>sg791k9jmpurhtsvsxcqw5p56x7qave</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc equal</title>
    <ns>10</ns>
    <id>16020</id>
    <revision>
      <id>89537</id>
      <timestamp>2017-01-22T04:56:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc tfun | cpp/experimental/ranges/algorithm/equal | determines if two sets of elements are the same }}</text>
      <sha1>sncfa3q7zns9ng628l6i3c5o9d4spv2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc equal range</title>
    <ns>10</ns>
    <id>16064</id>
    <revision>
      <id>89581</id>
      <timestamp>2017-01-22T05:00:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc tfun | cpp/experimental/ranges/algorithm/equal_range | returns range of elements matching a specific key}}</text>
      <sha1>gb66wskrykk7j3loj0hmqqvukhq1bdn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc fill</title>
    <ns>10</ns>
    <id>16032</id>
    <revision>
      <id>89549</id>
      <timestamp>2017-01-22T04:57:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc tfun | cpp/experimental/ranges/algorithm/fill | assigns a range of elements a certain value }}</text>
      <sha1>bg7fcc8ojg1xhlo0bfj32sc8vodp7bt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc fill n</title>
    <ns>10</ns>
    <id>16033</id>
    <revision>
      <id>89550</id>
      <timestamp>2017-01-22T04:57:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc tfun | cpp/experimental/ranges/algorithm/fill_n | assigns a value to a number of elements }}</text>
      <sha1>lkt090ly08wvddfe0s6v4d1gwmytuz9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc find</title>
    <ns>10</ns>
    <id>16021</id>
    <revision>
      <id>89538</id>
      <timestamp>2017-01-22T04:56:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="147">{{dsc tfun | cpp/experimental/ranges/algorithm/find | title=find&lt;br&gt;find_if&lt;br&gt;find_if_not | finds the first element satisfying specific criteria}}</text>
      <sha1>k2x7oy4twsl7p4dgchlp81d9j5egmmi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc find end</title>
    <ns>10</ns>
    <id>16022</id>
    <revision>
      <id>89539</id>
      <timestamp>2017-01-22T04:56:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc tfun | cpp/experimental/ranges/algorithm/find_end | finds the last sequence of elements in a certain range }}</text>
      <sha1>0cazg5hg02yi358j42dji1u13bjhf9g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc find first of</title>
    <ns>10</ns>
    <id>16023</id>
    <revision>
      <id>89540</id>
      <timestamp>2017-01-22T04:56:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/experimental/ranges/algorithm/find_first_of | searches for any one of a set of elements }}</text>
      <sha1>no0f8qo4gg2wvhr51pk2mu46ubxnmy6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc for each</title>
    <ns>10</ns>
    <id>16017</id>
    <revision>
      <id>89534</id>
      <timestamp>2017-01-22T04:55:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/experimental/ranges/algorithm/for_each | applies a function to a range of elements}}</text>
      <sha1>m5dg8ik2t17xqmx3ggkm0wuxgc4fx2l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc generate</title>
    <ns>10</ns>
    <id>16035</id>
    <revision>
      <id>89552</id>
      <timestamp>2017-01-22T04:57:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc tfun | cpp/experimental/ranges/algorithm/generate | saves the result of a function in a range }}</text>
      <sha1>t0nushxoql066zgthssqut5mlesnqz3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc generate n</title>
    <ns>10</ns>
    <id>16036</id>
    <revision>
      <id>89553</id>
      <timestamp>2017-01-22T04:57:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc tfun | cpp/experimental/ranges/algorithm/generate_n | saves the result of N applications of a function }}</text>
      <sha1>kjndq88ohummbexhc99lfrv1g681mvm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc includes</title>
    <ns>10</ns>
    <id>16067</id>
    <revision>
      <id>89584</id>
      <timestamp>2017-01-22T05:00:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/experimental/ranges/algorithm/includes | returns true if one set is a subset of another }}</text>
      <sha1>gegl5289s1c5gh35rmop012o1qpt802</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc inplace merge</title>
    <ns>10</ns>
    <id>16066</id>
    <revision>
      <id>89583</id>
      <timestamp>2017-01-22T05:00:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc tfun | cpp/experimental/ranges/algorithm/inplace_merge | merges two ordered ranges in-place }}</text>
      <sha1>oh3qmaevmj6ewked3d6g37qma40syn5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc is heap</title>
    <ns>10</ns>
    <id>16072</id>
    <revision>
      <id>89589</id>
      <timestamp>2017-01-22T05:01:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc tfun | cpp/experimental/ranges/algorithm/is_heap | checks if the given range is a max heap}}</text>
      <sha1>eosx6rerembcs0ewewdwnsbjwzpsztk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc is heap until</title>
    <ns>10</ns>
    <id>16073</id>
    <revision>
      <id>89590</id>
      <timestamp>2017-01-22T05:01:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc tfun | cpp/experimental/ranges/algorithm/is_heap_until | finds the largest subrange that is a max heap }}</text>
      <sha1>dlkxrr7m7snf0j9zung6gtibog6tmo0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc is partitioned</title>
    <ns>10</ns>
    <id>16049</id>
    <revision>
      <id>89566</id>
      <timestamp>2017-01-22T04:59:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="129">{{dsc tfun | cpp/experimental/ranges/algorithm/is_partitioned | determines if the range is partitioned by the given predicate  }}</text>
      <sha1>cwhu0wyqfj0apouxszsamg1i491d2tb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc is permutation</title>
    <ns>10</ns>
    <id>16085</id>
    <revision>
      <id>89602</id>
      <timestamp>2017-01-22T05:06:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">{{dsc tfun | cpp/experimental/ranges/algorithm/is_permutation | determines if a sequence is a permutation of another sequence }}</text>
      <sha1>e55jycrv709gixriblkx0lqmfpq2i7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc is sorted</title>
    <ns>10</ns>
    <id>16054</id>
    <revision>
      <id>89571</id>
      <timestamp>2017-01-22T04:59:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc tfun | cpp/experimental/ranges/algorithm/is_sorted | checks whether a range is sorted into ascending order }}</text>
      <sha1>bdnzaz4u1kmr65ps15lkx5xmgpyjyz6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc is sorted until</title>
    <ns>10</ns>
    <id>16055</id>
    <revision>
      <id>89572</id>
      <timestamp>2017-01-22T04:59:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/experimental/ranges/algorithm/is_sorted_until | finds the largest sorted subrange }}</text>
      <sha1>tci40hpybclgur9z93u26h8mcqdgdl7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc lexicographical compare</title>
    <ns>10</ns>
    <id>16084</id>
    <revision>
      <id>89601</id>
      <timestamp>2017-01-22T05:02:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/experimental/ranges/algorithm/lexicographical_compare | returns true if one range is lexicographically less than another }}</text>
      <sha1>dy09c0blwqsmcszomzbqvuu39jvjhfm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc lower bound</title>
    <ns>10</ns>
    <id>16061</id>
    <revision>
      <id>89578</id>
      <timestamp>2017-01-22T05:00:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="137">{{dsc tfun | cpp/experimental/ranges/algorithm/lower_bound | returns an iterator to the first element ''not less'' than the given value}}</text>
      <sha1>tithl9lv7ux3ca0oepwls4ifte9t1mc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc make heap</title>
    <ns>10</ns>
    <id>16074</id>
    <revision>
      <id>89591</id>
      <timestamp>2017-01-22T05:01:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/experimental/ranges/algorithm/make_heap | creates a max heap out of a range of elements }}</text>
      <sha1>g34b7daar6xzxjvofiysukdiy8jzwh3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc max</title>
    <ns>10</ns>
    <id>16078</id>
    <revision>
      <id>89595</id>
      <timestamp>2017-01-22T05:01:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc tfun | cpp/experimental/ranges/algorithm/max | returns the greater of the given values }}</text>
      <sha1>kgkanbnz7wexaesjncr6ixpbytw2x0k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc max element</title>
    <ns>10</ns>
    <id>16079</id>
    <revision>
      <id>89596</id>
      <timestamp>2017-01-22T05:01:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc tfun | cpp/experimental/ranges/algorithm/max_element | returns the largest element in a range }}</text>
      <sha1>id05fjz4yqxnkfr2qw9n2ur3qtyx2k0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc merge</title>
    <ns>10</ns>
    <id>16065</id>
    <revision>
      <id>89582</id>
      <timestamp>2017-01-22T05:00:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{dsc tfun | cpp/experimental/ranges/algorithm/merge | merges two sorted ranges }}</text>
      <sha1>b2mqaxx0j3gjh58106g0ujdcquv141s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc min</title>
    <ns>10</ns>
    <id>16080</id>
    <revision>
      <id>89597</id>
      <timestamp>2017-01-22T05:01:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc tfun | cpp/experimental/ranges/algorithm/min | returns the smaller of the given values }}</text>
      <sha1>dyx79qo5e5cu4etpne2x04bepvmr2ly</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc min element</title>
    <ns>10</ns>
    <id>16081</id>
    <revision>
      <id>89598</id>
      <timestamp>2017-01-22T05:02:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">{{dsc tfun | cpp/experimental/ranges/algorithm/min_element | returns the smallest element in a range }}</text>
      <sha1>1vxn79g0gh6ogui8i46rjm70d5ib0du</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc minmax</title>
    <ns>10</ns>
    <id>16082</id>
    <revision>
      <id>89599</id>
      <timestamp>2017-01-22T05:02:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc tfun | cpp/experimental/ranges/algorithm/minmax | returns the smaller and larger of two elements }}</text>
      <sha1>as0ih5cy3emt3y7ojwfoqw9bhv2d3r1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc minmax element</title>
    <ns>10</ns>
    <id>16083</id>
    <revision>
      <id>89600</id>
      <timestamp>2017-01-22T05:02:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/experimental/ranges/algorithm/minmax_element | returns the smallest and the largest elements in a range }}</text>
      <sha1>kj0ypbp8v2igatnd0zreusw9r6y7eno</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc mismatch</title>
    <ns>10</ns>
    <id>16019</id>
    <revision>
      <id>89536</id>
      <timestamp>2017-01-22T04:55:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">{{dsc tfun | cpp/experimental/ranges/algorithm/mismatch | finds the first position where two ranges differ }}</text>
      <sha1>dn60z5e2tfby0owihl36h4si572d0fa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc move</title>
    <ns>10</ns>
    <id>16030</id>
    <revision>
      <id>89547</id>
      <timestamp>2017-01-22T04:57:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/experimental/ranges/algorithm/move | moves a range of elements to a new location  }}</text>
      <sha1>isf2y4r0ko6uzb7np405l24xlbsifh3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc move backward</title>
    <ns>10</ns>
    <id>16031</id>
    <revision>
      <id>89548</id>
      <timestamp>2017-01-22T04:57:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/experimental/ranges/algorithm/move_backward | moves a range of elements to a new location in backwards order}}</text>
      <sha1>hsfspjnxoah7spyjb035xy8e0ynp8kr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc next permutation</title>
    <ns>10</ns>
    <id>16086</id>
    <revision>
      <id>89603</id>
      <timestamp>2017-01-22T05:06:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc tfun | cpp/experimental/ranges/algorithm/next_permutation | generates the next greater lexicographic permutation of a range of elements }}</text>
      <sha1>2ch1xu24416enkwymjxxzd4g7mhzqaw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc nth element</title>
    <ns>10</ns>
    <id>16060</id>
    <revision>
      <id>89577</id>
      <timestamp>2017-01-22T05:00:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="151">{{dsc tfun | cpp/experimental/ranges/algorithm/nth_element | partially sorts the given range making sure that it is partitioned by the given element }}</text>
      <sha1>ac2oopzkkzzt6qd2gwy26hfko4ee8rd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc partial sort</title>
    <ns>10</ns>
    <id>16057</id>
    <revision>
      <id>89574</id>
      <timestamp>2017-01-22T04:59:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc tfun | cpp/experimental/ranges/algorithm/partial_sort | sorts the first N elements of a range }}</text>
      <sha1>e3erscnuk40mqm7wzn6zpzcf1gsnp37</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc partial sort copy</title>
    <ns>10</ns>
    <id>16058</id>
    <revision>
      <id>89575</id>
      <timestamp>2017-01-22T04:59:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc tfun | cpp/experimental/ranges/algorithm/partial_sort_copy | copies and partially sorts a range of elements }}</text>
      <sha1>mul08ia4zkg8aeufk8qg7tzbceu99uy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc partition</title>
    <ns>10</ns>
    <id>16050</id>
    <revision>
      <id>89567</id>
      <timestamp>2017-01-22T04:59:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc tfun | cpp/experimental/ranges/algorithm/partition | divides a range of elements into two groups }}</text>
      <sha1>j3ot4aghru5se78toeyz3yxmeqwdpwj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc partition copy</title>
    <ns>10</ns>
    <id>16051</id>
    <revision>
      <id>89568</id>
      <timestamp>2017-01-22T04:59:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc tfun | cpp/experimental/ranges/algorithm/partition_copy | copies a range dividing the elements into two groups }}</text>
      <sha1>qmseg0zry142sz0m87xmclk0ewvy13w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc partition point</title>
    <ns>10</ns>
    <id>16053</id>
    <revision>
      <id>89570</id>
      <timestamp>2017-01-22T04:59:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc tfun | cpp/experimental/ranges/algorithm/partition_point | locates the partition point of a partitioned range }}</text>
      <sha1>sbjfmmytg86u8p6h0u0bswoupgdoxxy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc pop heap</title>
    <ns>10</ns>
    <id>16076</id>
    <revision>
      <id>89593</id>
      <timestamp>2017-01-22T05:01:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">{{dsc tfun | cpp/experimental/ranges/algorithm/pop_heap | removes the largest element from a max heap }}</text>
      <sha1>bw6u8g122g7wcxoq46olwysffvv4tyv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc prev permutation</title>
    <ns>10</ns>
    <id>16087</id>
    <revision>
      <id>89604</id>
      <timestamp>2017-01-22T05:06:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc tfun | cpp/experimental/ranges/algorithm/prev_permutation | generates the next smaller lexicographic permutation of a range of elements }}</text>
      <sha1>i3yovrctdnul76wwuae3c3rbtbrd917</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc push heap</title>
    <ns>10</ns>
    <id>16075</id>
    <revision>
      <id>89592</id>
      <timestamp>2017-01-22T05:01:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/experimental/ranges/algorithm/push_heap | adds an element to a max heap }}</text>
      <sha1>ht0rmi41snfk8ed8f248q0b7pj9d61i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc remove</title>
    <ns>10</ns>
    <id>16037</id>
    <revision>
      <id>89554</id>
      <timestamp>2017-01-22T04:57:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/experimental/ranges/algorithm/remove | title=remove&lt;br&gt;remove_if | removes elements satisfying specific criteria }}</text>
      <sha1>1rt65lxhb48a3mm81yrzamyf7foi5s3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc remove copy</title>
    <ns>10</ns>
    <id>16038</id>
    <revision>
      <id>89555</id>
      <timestamp>2017-01-22T04:58:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="174">{{dsc tfun | cpp/experimental/ranges/algorithm/remove_copy | title=remove_copy&lt;br&gt;remove_copy_if | copies a range of elements omitting those that satisfy specific criteria }}</text>
      <sha1>2n91zmv5zrpf2io2bj17bcoz4v8392i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc replace</title>
    <ns>10</ns>
    <id>16039</id>
    <revision>
      <id>89556</id>
      <timestamp>2017-01-22T04:58:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">{{dsc tfun | cpp/experimental/ranges/algorithm/replace | title=replace&lt;br&gt;replace_if| replaces all values satisfying specific criteria with another value }}</text>
      <sha1>kqd8my7nrmqn9e9apwsiezabcf2677w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc replace copy</title>
    <ns>10</ns>
    <id>16040</id>
    <revision>
      <id>89557</id>
      <timestamp>2017-01-22T04:58:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="187">{{dsc tfun | cpp/experimental/ranges/algorithm/replace_copy | title=replace_copy&lt;br&gt;replace_copy_if | copies a range, replacing elements satisfying specific criteria with another value }}</text>
      <sha1>bym8fyfl46k0pdah9rzsnw84teflgd7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc reverse</title>
    <ns>10</ns>
    <id>16042</id>
    <revision>
      <id>89559</id>
      <timestamp>2017-01-22T04:58:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/experimental/ranges/algorithm/reverse | reverses the order of elements in a range }}</text>
      <sha1>13gun0ygz575c0yiczxc6ogql5d9nmn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc reverse copy</title>
    <ns>10</ns>
    <id>16043</id>
    <revision>
      <id>89560</id>
      <timestamp>2017-01-22T04:58:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/experimental/ranges/algorithm/reverse_copy | creates a copy of a range that is reversed }}</text>
      <sha1>et6kepbyad66mehecuw6mbd7tvqqlr7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc rotate</title>
    <ns>10</ns>
    <id>16044</id>
    <revision>
      <id>89561</id>
      <timestamp>2017-01-22T04:58:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc tfun | cpp/experimental/ranges/algorithm/rotate | rotates the order of elements in a range }}</text>
      <sha1>88a47kfxv4j2mlspo15mddyxfbr94il</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc rotate copy</title>
    <ns>10</ns>
    <id>16045</id>
    <revision>
      <id>89562</id>
      <timestamp>2017-01-22T04:58:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/experimental/ranges/algorithm/rotate_copy | copies and rotate a range of elements }}</text>
      <sha1>36ly0j21fsz621smcf9ipyui79weir4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc search</title>
    <ns>10</ns>
    <id>16025</id>
    <revision>
      <id>89542</id>
      <timestamp>2017-01-22T04:56:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/experimental/ranges/algorithm/search | searches for a range of elements }}</text>
      <sha1>9tfr2fgiz3vl83ook3afxmcic670c6t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc search n</title>
    <ns>10</ns>
    <id>16026</id>
    <revision>
      <id>89543</id>
      <timestamp>2017-01-22T04:56:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc tfun | cpp/experimental/ranges/algorithm/search_n | searches for a number consecutive copies of an element in a range }}</text>
      <sha1>tjs53wfv389uid13xidnkn9ocfck4af</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc set difference</title>
    <ns>10</ns>
    <id>16068</id>
    <revision>
      <id>89585</id>
      <timestamp>2017-01-22T05:00:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/experimental/ranges/algorithm/set_difference | computes the difference between two sets }}</text>
      <sha1>76hcqad2ei0bcbwifre7r8p9g5ofjev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc set intersection</title>
    <ns>10</ns>
    <id>16069</id>
    <revision>
      <id>89586</id>
      <timestamp>2017-01-22T05:00:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{dsc tfun | cpp/experimental/ranges/algorithm/set_intersection | computes the intersection of two sets }}</text>
      <sha1>rd0ixv0sm8iecputqm1js137guur8e3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc set symmetric difference</title>
    <ns>10</ns>
    <id>16070</id>
    <revision>
      <id>89587</id>
      <timestamp>2017-01-22T05:01:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/experimental/ranges/algorithm/set_symmetric_difference | computes the symmetric difference between two sets }}</text>
      <sha1>m96u7g7jqdlv2c61t4jdmib1xr6ke54</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc set union</title>
    <ns>10</ns>
    <id>16071</id>
    <revision>
      <id>89588</id>
      <timestamp>2017-01-22T05:01:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc tfun | cpp/experimental/ranges/algorithm/set_union | computes the union of two sets }}</text>
      <sha1>1c3rsj6bi5smwm0sr6gjh9jaokhmqua</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc shuffle</title>
    <ns>10</ns>
    <id>16046</id>
    <revision>
      <id>89563</id>
      <timestamp>2017-01-22T04:58:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc tfun | cpp/experimental/ranges/algorithm/shuffle | randomly re-orders elements in a range }}</text>
      <sha1>j8rxdo83gzb1v7r7ajrg4lt5tz2apxh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc sort</title>
    <ns>10</ns>
    <id>16056</id>
    <revision>
      <id>89573</id>
      <timestamp>2017-01-22T04:59:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/experimental/ranges/algorithm/sort | sorts a range into ascending order }}</text>
      <sha1>4nzkwb04cxghh7l810h3nbcyfzjnhpg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc sort heap</title>
    <ns>10</ns>
    <id>16077</id>
    <revision>
      <id>89594</id>
      <timestamp>2017-01-22T05:01:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="129">{{dsc tfun | cpp/experimental/ranges/algorithm/sort_heap | turns a max heap into a range of elements sorted in ascending order }}</text>
      <sha1>58oyf3nsl5ll1ri7q1jh6nf4a900q04</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc stable partition</title>
    <ns>10</ns>
    <id>16052</id>
    <revision>
      <id>89569</id>
      <timestamp>2017-01-22T04:59:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="139">{{dsc tfun | cpp/experimental/ranges/algorithm/stable_partition | divides elements into two groups while preserving their relative order }}</text>
      <sha1>k8d40z18ezf65qz8oul7v600ixt47p1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc stable sort</title>
    <ns>10</ns>
    <id>16059</id>
    <revision>
      <id>89576</id>
      <timestamp>2017-01-22T04:59:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc tfun | cpp/experimental/ranges/algorithm/stable_sort | sorts a range of elements while preserving order between equal elements }}</text>
      <sha1>tqprf1br6y15o3zo72nr6qanblhvnck</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc swap ranges</title>
    <ns>10</ns>
    <id>16041</id>
    <revision>
      <id>89558</id>
      <timestamp>2017-01-22T04:58:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc tfun | cpp/experimental/ranges/algorithm/swap_ranges | swaps two ranges of elements }}</text>
      <sha1>krf7u6albt0ezs9uv3ebs3xg0duslxw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc tags</title>
    <ns>10</ns>
    <id>15933</id>
    <revision>
      <id>89443</id>
      <timestamp>2017-01-22T04:37:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="190">{{dsc class | cpp/experimental/ranges/algorithm/tags | title=in&lt;br&gt;in1&lt;br&gt;in2&lt;br&gt;out&lt;br&gt;out1&lt;br&gt;out2&lt;br&gt;fun&lt;br&gt;min&lt;br&gt;max&lt;br&gt;begin&lt;br&gt;end| tag specifiers for use with {{lc|ranges::tagged}}}}</text>
      <sha1>ozppwxg38jynwetcoiqmhoccb7qoa7d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc transform</title>
    <ns>10</ns>
    <id>16034</id>
    <revision>
      <id>89551</id>
      <timestamp>2017-01-22T04:57:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">{{dsc tfun | cpp/experimental/ranges/algorithm/transform | applies a function to a range of elements }}</text>
      <sha1>d8w4zge6145z38pfr61q3d0ec4sb4ht</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc unique</title>
    <ns>10</ns>
    <id>16047</id>
    <revision>
      <id>89564</id>
      <timestamp>2017-01-22T04:58:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc tfun | cpp/experimental/ranges/algorithm/unique | removes consecutive duplicate elements in a range }}</text>
      <sha1>8mrlvdspom6zzcj83mqwl4ikcq7d8uc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc unique copy</title>
    <ns>10</ns>
    <id>16048</id>
    <revision>
      <id>89565</id>
      <timestamp>2017-01-22T04:59:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc tfun | cpp/experimental/ranges/algorithm/unique_copy | creates a copy of some range of elements that contains no consecutive duplicates }}</text>
      <sha1>qil0r7z3a957ryherah67ait0986vzw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/dsc upper bound</title>
    <ns>10</ns>
    <id>16062</id>
    <revision>
      <id>89579</id>
      <timestamp>2017-01-22T05:00:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="136">{{dsc tfun | cpp/experimental/ranges/algorithm/upper_bound | returns an iterator to the first element ''greater'' than a certain value}}</text>
      <sha1>e5oidbg1lt3m5s6nntklcfs7ck7ogth</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/navbar</title>
    <ns>10</ns>
    <id>15872</id>
    <revision>
      <id>89364</id>
      <timestamp>2017-01-20T03:08:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="385">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/ranges/navbar heading
|content3 = cpp/experimental/ranges/navbar content
|heading4 = cpp/experimental/ranges/algorithm/navbar heading
|content4 = cpp/experimental/ranges/algorithm/navbar content
}}</text>
      <sha1>szivp4mgisyqmhgr9ml342yr074bho6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/navbar content</title>
    <ns>10</ns>
    <id>15876</id>
    <revision>
      <id>89368</id>
      <timestamp>2017-01-20T03:33:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="5496">{{nv begin}}
{{nv h2 | Non-modifying sequence operations }}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/all_any_none_of | all_of | any_of | none_of }}
{{nv ln | cpp/experimental/ranges/algorithm/count | count | count_if}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/find | find | find_if | find_if_not}}
{{nv ln | cpp/experimental/ranges/algorithm/find_end }}
{{nv ln | cpp/experimental/ranges/algorithm/find_first_of }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/adjacent_find }}
{{nv ln | cpp/experimental/ranges/algorithm/search }}
{{nv ln | cpp/experimental/ranges/algorithm/search_n }}
{{nv ln | cpp/experimental/ranges/algorithm/mismatch }}
{{nv ph space}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/equal }}
{{nv ln | cpp/experimental/ranges/algorithm/for_each }}
{{nv ln | cpp/experimental/ranges/algorithm/lexicographical_compare }}
{{nv ph}}
{{nv ph}}
{{nv col end}}

{{nv h2 | Modifying sequence operations }}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/copy | copy | copy_if }}
{{nv ln | cpp/experimental/ranges/algorithm/copy_n }}
{{nv ln | cpp/experimental/ranges/algorithm/copy_backward }}
{{nv ln | cpp/experimental/ranges/algorithm/move }}
{{nv ln | cpp/experimental/ranges/algorithm/move_backward }}
{{nv ph space}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/fill }}
{{nv ln | cpp/experimental/ranges/algorithm/fill_n }}
{{nv ln | cpp/experimental/ranges/algorithm/generate }}
{{nv ln | cpp/experimental/ranges/algorithm/generate_n }}
{{nv ln | cpp/experimental/ranges/algorithm/swap_ranges }}
{{nv ln | cpp/experimental/ranges/algorithm/shuffle  }}
{{nv ln | cpp/experimental/ranges/algorithm/transform }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/remove | remove | remove_if}}
{{nv ln | cpp/experimental/ranges/algorithm/replace | replace | replace_if}}
{{nv ln | cpp/experimental/ranges/algorithm/reverse }}
{{nv ln | cpp/experimental/ranges/algorithm/rotate }}
{{nv ln | cpp/experimental/ranges/algorithm/unique }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/remove_copy | remove_copy | remove_copy_if}}
{{nv ln | cpp/experimental/ranges/algorithm/replace_copy | replace_copy | replace_copy_if}}
{{nv ln | cpp/experimental/ranges/algorithm/reverse_copy }}
{{nv ln | cpp/experimental/ranges/algorithm/rotate_copy }}
{{nv ln | cpp/experimental/ranges/algorithm/unique_copy }}
{{nv col end}}

{{nv h2 | Partitioning operations}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/is_partitioned }}
{{nv ln | cpp/experimental/ranges/algorithm/partition_point }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/partition}}
{{nv ln | cpp/experimental/ranges/algorithm/partition_copy }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/stable_partition }}
{{nv ph}}
{{nv col end}}

{{nv h2 | Sorting operations }}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/is_sorted }}
{{nv ln | cpp/experimental/ranges/algorithm/is_sorted_until }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/sort }}
{{nv ln | cpp/experimental/ranges/algorithm/stable_sort }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/partial_sort }}
{{nv ln | cpp/experimental/ranges/algorithm/partial_sort_copy }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/nth_element }}
{{nv ph}}
{{nv col end}}

{{nv h2 | Binary search operations}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/lower_bound }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/upper_bound }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/binary_search }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/equal_range }}
{{nv col end}}

{{nv h2 | Set operations (on sorted ranges) }}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/merge }}
{{nv ln | cpp/experimental/ranges/algorithm/inplace_merge }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/includes }}
{{nv ph space}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/set_difference }}
{{nv ln | cpp/experimental/ranges/algorithm/set_intersection }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/set_symmetric_difference }}
{{nv ln | cpp/experimental/ranges/algorithm/set_union }}
{{nv col end}}

{{nv h2 | Heap operations }}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/is_heap }}
{{nv ln | cpp/experimental/ranges/algorithm/is_heap_until }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/make_heap }}
{{nv ln | cpp/experimental/ranges/algorithm/sort_heap }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/push_heap }}
{{nv ln | cpp/experimental/ranges/algorithm/pop_heap }}
{{nv col end}}

{{nv h2 | Minimum/maximum operations }}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/max }}
{{nv ln | cpp/experimental/ranges/algorithm/max_element }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/min }}
{{nv ln | cpp/experimental/ranges/algorithm/min_element }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/minmax }}
{{nv ln | cpp/experimental/ranges/algorithm/minmax_element }}
{{nv col end}}
{{nv h2 | Permutations }}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/algorithm/is_permutation }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/next_permutation }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/algorithm/prev_permutation }}
{{nv col end}}

{{nv end}}</text>
      <sha1>lkk8gct2pgnazhznn0izocbi34gamlv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/algorithm/navbar heading</title>
    <ns>10</ns>
    <id>15873</id>
    <revision>
      <id>89365</id>
      <timestamp>2017-01-20T03:08:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="57">[[cpp/experimental/ranges#Algorithms|Algorithms library]]</text>
      <sha1>t5bz4j6k5yg7gv4aus6dayptdpa63jj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Assignable</title>
    <ns>10</ns>
    <id>15893</id>
    <revision>
      <id>89403</id>
      <timestamp>2017-01-22T04:32:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc rconcept | cpp/experimental/ranges/concepts/Assignable | specifies that a type is assignable from another type}}</text>
      <sha1>l4dufku02ev1i2bpuy1e7ln8onouc25</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Boolean</title>
    <ns>10</ns>
    <id>15895</id>
    <revision>
      <id>89405</id>
      <timestamp>2017-01-22T04:32:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc rconcept | cpp/experimental/ranges/concepts/Boolean | specifies that a type can be used in Boolean contexts}}</text>
      <sha1>k9wub6qvz1qkmvcr4tnsv4akqpuvy68</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Common</title>
    <ns>10</ns>
    <id>15889</id>
    <revision>
      <id>89399</id>
      <timestamp>2017-01-22T04:31:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc rconcept | cpp/experimental/ranges/concepts/Common | specifies that two types share a common type}}</text>
      <sha1>rzo1bszrv3tv5fbuua11kx9m6uqmbdp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc CommonReference</title>
    <ns>10</ns>
    <id>15888</id>
    <revision>
      <id>89398</id>
      <timestamp>2017-01-22T04:31:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc rconcept | cpp/experimental/ranges/concepts/CommonReference| specifies that two types share a common reference type}}</text>
      <sha1>54r1r8qb8hly6jpttdfh652rnzsmu8c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Constructible</title>
    <ns>10</ns>
    <id>15900</id>
    <revision>
      <id>89410</id>
      <timestamp>2017-01-22T04:33:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="165">{{dsc rconcept | cpp/experimental/ranges/concepts/Constructible| specifies that a variable of the type can be constructed from or bound to a set of argument types }}</text>
      <sha1>sxv3g2enkgos5hcs5vsr4g3czgoif5h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc ConvertibleTo</title>
    <ns>10</ns>
    <id>15887</id>
    <revision>
      <id>89397</id>
      <timestamp>2017-01-22T04:31:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="131">{{dsc rconcept | cpp/experimental/ranges/concepts/ConvertibleTo | specifies that a type is implicitly convertible to another type}}</text>
      <sha1>ncj75kx4n6rkntzx6t97coa56ovo10i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc CopyConstructible</title>
    <ns>10</ns>
    <id>15903</id>
    <revision>
      <id>89413</id>
      <timestamp>2017-01-22T04:33:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="151">{{dsc rconcept | cpp/experimental/ranges/concepts/CopyConstructible|specifies that an object of a type can be copy constructed and move constructed  }}</text>
      <sha1>4ytxht7297wv6tdr60qs3de0lha4337</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Copyable</title>
    <ns>10</ns>
    <id>15905</id>
    <revision>
      <id>89415</id>
      <timestamp>2017-01-22T04:33:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">{{dsc rconcept | cpp/experimental/ranges/concepts/Copyable|specifies that an object of a type can be copied, moved, and swapped }}</text>
      <sha1>a5anugm7umswtm4cbech7c022zfeoit</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc DefaultConstructible</title>
    <ns>10</ns>
    <id>15901</id>
    <revision>
      <id>89411</id>
      <timestamp>2017-01-22T04:33:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="136">{{dsc rconcept | cpp/experimental/ranges/concepts/DefaultConstructible| specifies that an object of a type can be default constructed }}</text>
      <sha1>6s6ht098r8pmgo4y1qqw1orfp3aa2iz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc DerivedFrom</title>
    <ns>10</ns>
    <id>15886</id>
    <revision>
      <id>89396</id>
      <timestamp>2017-01-22T04:31:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc rconcept | cpp/experimental/ranges/concepts/DerivedFrom | specifies that a type is derived from another type}}</text>
      <sha1>17qp6io68esr5sl9tnci27dv5exk0dj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Destructible</title>
    <ns>10</ns>
    <id>15899</id>
    <revision>
      <id>89409</id>
      <timestamp>2017-01-22T04:33:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="166">{{dsc rconcept | cpp/experimental/ranges/concepts/Destructible| specifies that an object of the type can be destroyed and have its address taken with unary {{c|&amp;}} }}</text>
      <sha1>onqf6o46612hwminz6187j319nf55fl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc EqualityComparable</title>
    <ns>10</ns>
    <id>15897</id>
    <revision>
      <id>89407</id>
      <timestamp>2017-01-22T04:32:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">{{dsc rconcept | cpp/experimental/ranges/concepts/EqualityComparable | title=EqualityComparable |specifies that operator {{c|1===}} is an equivalence relation }}</text>
      <sha1>skehdk4868xkot24g6eikmvkxgdr6u8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Integral</title>
    <ns>10</ns>
    <id>15890</id>
    <revision>
      <id>89400</id>
      <timestamp>2017-01-22T04:31:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">{{dsc rconcept | cpp/experimental/ranges/concepts/Integral | specifies that a type is an integral type}}</text>
      <sha1>mwdpobyeolobdmeo3wc4g44m1gygrmk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Invocable</title>
    <ns>10</ns>
    <id>15908</id>
    <revision>
      <id>89418</id>
      <timestamp>2017-01-22T04:34:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="181">{{dsc rconcept | cpp/experimental/ranges/concepts/Invocable|title=Invocable&lt;br/&gt;RegularInvocable |specifies that a callable type can be invoked with a given set of argument types }}</text>
      <sha1>40bf689tn1q4e49z8z1pqmzrh17atn0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Movable</title>
    <ns>10</ns>
    <id>15904</id>
    <revision>
      <id>89414</id>
      <timestamp>2017-01-22T04:33:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc rconcept | cpp/experimental/ranges/concepts/Movable|specifies that an object of a type can be moved and swapped}}</text>
      <sha1>fh99kixb0kdfrxiaeq3g6lkz1stme0c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc MoveConstructible</title>
    <ns>10</ns>
    <id>15902</id>
    <revision>
      <id>89412</id>
      <timestamp>2017-01-22T04:33:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">{{dsc rconcept | cpp/experimental/ranges/concepts/MoveConstructible|specifies that an object of a type can be move constructed}}</text>
      <sha1>cwzszt6o3o43s6le4hlop0zw6e7vs6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Predicate</title>
    <ns>10</ns>
    <id>15909</id>
    <revision>
      <id>89419</id>
      <timestamp>2017-01-22T04:34:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc rconcept | cpp/experimental/ranges/concepts/Predicate| specifies that a callable type is a Boolean predicate }}</text>
      <sha1>djggr0foauahwyr6kz8chbgcba3d39e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Regular</title>
    <ns>10</ns>
    <id>15907</id>
    <revision>
      <id>89417</id>
      <timestamp>2017-01-22T04:33:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="176">{{dsc rconcept | cpp/experimental/ranges/concepts/Regular| specifies that a type is regular, that is, it is both {{rconcept|Semiregular}} and {{rconcept|EqualityComparable}} }}</text>
      <sha1>tn48fruzc59crx090g6wl7n7795owcr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Relation</title>
    <ns>10</ns>
    <id>15910</id>
    <revision>
      <id>89420</id>
      <timestamp>2017-01-22T04:34:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc rconcept | cpp/experimental/ranges/concepts/Relation| specifies that a callable type is a binary relation }}</text>
      <sha1>ki6tlpzcxx8dmeseq86onvfd4l6r10n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Same</title>
    <ns>10</ns>
    <id>15885</id>
    <revision>
      <id>89395</id>
      <timestamp>2017-01-22T04:31:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc rconcept | cpp/experimental/ranges/concepts/Same | specifies that a type is the same as another type}}</text>
      <sha1>d66rp5wj0mlw1hbh77krveom31i1zzq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Semiregular</title>
    <ns>10</ns>
    <id>15906</id>
    <revision>
      <id>89416</id>
      <timestamp>2017-01-22T04:33:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{dsc rconcept | cpp/experimental/ranges/concepts/Semiregular| specifies that an object of a type can be copied, moved, swapped, and default constructed}}</text>
      <sha1>rtd0fikysg6dji1f51dfwebf7fmh3dv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc SignedIntegral</title>
    <ns>10</ns>
    <id>15891</id>
    <revision>
      <id>89401</id>
      <timestamp>2017-01-22T04:32:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">{{dsc rconcept | cpp/experimental/ranges/concepts/SignedIntegral | specifies that a type is a integral type that is signed}}</text>
      <sha1>559u0fhixkp70iuzpmztavjt95a141c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc StrictTotallyOrdered</title>
    <ns>10</ns>
    <id>15898</id>
    <revision>
      <id>89408</id>
      <timestamp>2017-01-22T04:32:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="146">{{dsc rconcept | cpp/experimental/ranges/concepts/StrictTotallyOrdered | specifies that the comparison operators on the type yield a total order}}</text>
      <sha1>nmzi4grynm6vhu66y01811x309azhtb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc StrictWeakOrder</title>
    <ns>10</ns>
    <id>15911</id>
    <revision>
      <id>89421</id>
      <timestamp>2017-01-22T04:34:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="139">{{dsc rconcept | cpp/experimental/ranges/concepts/StrictWeakOrder| specifies that a {{rconcept|Relation}} imposes a strict weak ordering }}</text>
      <sha1>8d8ryb3x97fiuofah70po3m0ejjhewq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc Swappable</title>
    <ns>10</ns>
    <id>15894</id>
    <revision>
      <id>89404</id>
      <timestamp>2017-01-22T04:32:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="149">{{dsc rconcept | cpp/experimental/ranges/concepts/Swappable | specifies that a type can be swapped or that two types can be swapped with each other}}</text>
      <sha1>a39z4qg918mhiqnhg61e6rgcc2gqc7x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc UniformRandomNumberGenerator</title>
    <ns>10</ns>
    <id>15912</id>
    <revision>
      <id>89680</id>
      <parentid>89679</parentid>
      <timestamp>2017-01-23T09:05:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>T. Canens moved page [[Template:cpp/experimental/ranges/concept/dsc UniformRandomNumberGenerator]] to [[Template:cpp/experimental/ranges/concepts/dsc UniformRandomNumberGenerator]]</comment>
      <text xml:space="preserve" bytes="147">{{dsc rconcept|cpp/experimental/ranges/concepts/UniformRandomNumberGenerator|specifies that a type qualifies as a uniform random number generator}}</text>
      <sha1>io798xbxxsoh6r16c6q09l0x92qkpl9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc UnsignedIntegral</title>
    <ns>10</ns>
    <id>15892</id>
    <revision>
      <id>89402</id>
      <timestamp>2017-01-22T04:32:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="131">{{dsc rconcept | cpp/experimental/ranges/concepts/UnsignedIntegral | specifies that a type is an integral type that is not signed}}</text>
      <sha1>08j1u3u0q6d3ejrv9rzggsjxxo7bk9w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/dsc WeaklyEqualityComparable</title>
    <ns>10</ns>
    <id>15896</id>
    <revision>
      <id>89406</id>
      <timestamp>2017-01-22T04:32:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="207">{{dsc rconcept | cpp/experimental/ranges/concepts/WeaklyEqualityComparable| title=WeaklyEqualityComparable |specifies that two types can be compared for equality using operators {{c|1===}} and {{c|1=!=}}  }}</text>
      <sha1>dehz7nzuapgtv7dy4xu3jgqailxrqou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/navbar</title>
    <ns>10</ns>
    <id>15765</id>
    <revision>
      <id>88661</id>
      <timestamp>2016-12-05T21:58:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="383">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/ranges/navbar heading
|content3 = cpp/experimental/ranges/navbar content
|heading4 = cpp/experimental/ranges/concepts/navbar heading
|content4 = cpp/experimental/ranges/concepts/navbar content
}}</text>
      <sha1>juk0ehen9davj38jss0kkiqczgqj20n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/navbar content</title>
    <ns>10</ns>
    <id>15766</id>
    <revision>
      <id>89369</id>
      <parentid>88801</parentid>
      <timestamp>2017-01-20T03:42:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="2321">{{nv begin}}
{{nv h2 | Core language concepts}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/concepts/Same }}
{{nv ln | cpp/experimental/ranges/concepts/DerivedFrom }}
{{nv ln | cpp/experimental/ranges/concepts/ConvertibleTo }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/CommonReference}}
{{nv ln | cpp/experimental/ranges/concepts/Common }}
{{nv ph space}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/Integral }}
{{nv ln | cpp/experimental/ranges/concepts/SignedIntegral }}
{{nv ln | cpp/experimental/ranges/concepts/UnsignedIntegral }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/Assignable }}
{{nv ln | cpp/experimental/ranges/concepts/Swappable }}
{{nv ph}}
{{nv col end}}
{{nv h2 | Object concepts}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/concepts/Destructible}}
{{nv ln | cpp/experimental/ranges/concepts/Constructible}}
{{nv ln | cpp/experimental/ranges/concepts/DefaultConstructible}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/MoveConstructible}}
{{nv ln | cpp/experimental/ranges/concepts/CopyConstructible}}
{{nv ph space}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/Movable}}
{{nv ln | cpp/experimental/ranges/concepts/Copyable}}
{{nv ph space}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/Semiregular}}
{{nv ln | cpp/experimental/ranges/concepts/Regular}}
{{nv ph}}
{{nv col end}}
{{nv h2 | Comparison concepts}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/concepts/Boolean }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/WeaklyEqualityComparable}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/EqualityComparable}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/StrictTotallyOrdered }}
{{nv col end}}
{{nv h2 | Callable concepts}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/concepts/Invocable|Invocable|RegularInvocable }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/Predicate}}
{{nv ph space|40}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/Relation}}
{{nv ph space}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/concepts/StrictWeakOrder}}
{{nv ph}}
{{nv col end}}
{{nv h2 | URNG concept}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/concepts/UniformRandomNumberGenerator}}
{{nv col end}}
{{nv end}}</text>
      <sha1>c909cqqbi1y26eim1sscwctwzkmv9tn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/concepts/navbar heading</title>
    <ns>10</ns>
    <id>15767</id>
    <revision>
      <id>88663</id>
      <timestamp>2016-12-05T22:04:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="53">[[cpp/experimental/ranges#Concepts|Concepts library]]</text>
      <sha1>q40mfll8k0f9e7kgqinkgcuikm033s5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc equal to</title>
    <ns>10</ns>
    <id>15916</id>
    <revision>
      <id>89426</id>
      <timestamp>2017-01-22T04:35:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc tclass   | cpp/experimental/ranges/functional/equal_to|function object implementing {{c|1=x == y}} }}</text>
      <sha1>hipfoxmkr2ev8uy3mmvzvlwdxhxqkp1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc greater</title>
    <ns>10</ns>
    <id>15918</id>
    <revision>
      <id>89428</id>
      <timestamp>2017-01-22T04:35:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc tclass   | cpp/experimental/ranges/functional/greater|function object implementing {{c|x &gt; y}}}}</text>
      <sha1>jqklj0mid6tuj8w8xijgf6ggnsotnw3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc greater equal</title>
    <ns>10</ns>
    <id>15920</id>
    <revision>
      <id>89430</id>
      <timestamp>2017-01-22T04:36:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc tclass   | cpp/experimental/ranges/functional/greater_equal|function object implementing {{c|1=x &gt;= y}}}}</text>
      <sha1>j8m681bzlucvly2ihzbq3dn98r18x8j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc identity</title>
    <ns>10</ns>
    <id>15922</id>
    <revision>
      <id>89432</id>
      <timestamp>2017-01-22T04:36:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">{{dsc class   | cpp/experimental/ranges/functional/identity|function object that returns its argument unchanged}}</text>
      <sha1>s5qwd663uu65d83egujqjiyc5j3wxnq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc invoke</title>
    <ns>10</ns>
    <id>15915</id>
    <revision>
      <id>89425</id>
      <timestamp>2017-01-22T04:35:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc tfun     | cpp/experimental/ranges/functional/invoke | invokes a {{concept|Callable}} object with the given arguments}}</text>
      <sha1>gqelv6s5w6oy5kuz99rcx3b98ovw957</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc less</title>
    <ns>10</ns>
    <id>15919</id>
    <revision>
      <id>89429</id>
      <timestamp>2017-01-22T04:35:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc tclass   | cpp/experimental/ranges/functional/less|function object implementing {{c|x &lt; y}}}}</text>
      <sha1>8pwtco6m5g4foe32o6aqq8pu1hhbt65</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc less equal</title>
    <ns>10</ns>
    <id>15921</id>
    <revision>
      <id>89431</id>
      <timestamp>2017-01-22T04:36:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc tclass   | cpp/experimental/ranges/functional/less_equal|function object implementing {{c|1=x &lt;= y}}}}</text>
      <sha1>aldei0hthfbnseyfaqoe91t59x3ejgf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/functional/dsc not equal to</title>
    <ns>10</ns>
    <id>15917</id>
    <revision>
      <id>89427</id>
      <timestamp>2017-01-22T04:35:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc tclass   | cpp/experimental/ranges/functional/not_equal_to|function object implementing {{c|1=x != y}}}}</text>
      <sha1>esnk9bgxqx6ecv5adocjv52tog5b0fu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc BidirectionalIterator</title>
    <ns>10</ns>
    <id>15944</id>
    <revision>
      <id>89454</id>
      <timestamp>2017-01-22T04:41:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="183">{{dsc rconcept | cpp/experimental/ranges/iterator/BidirectionalIterator| specifies that a {{rconcept|ForwardIterator|i}} is a bidirectional interator, supporting movement backwards }}</text>
      <sha1>6694jh5iumveht65iazgwthpwixsh9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc BidirectionalRange</title>
    <ns>10</ns>
    <id>15966</id>
    <revision>
      <id>89479</id>
      <timestamp>2017-01-22T04:45:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">{{dsc rconcept | cpp/experimental/ranges/iterator/BidirectionalRange |specifies a range whose iterator type satisfies {{rconcept|BidirectionalIterator|i}}}}</text>
      <sha1>0uy36m6m0zo6qitsjeqd4o2bl16kmcm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc BoundedRange</title>
    <ns>10</ns>
    <id>15962</id>
    <revision>
      <id>89475</id>
      <timestamp>2017-01-22T04:44:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="131">{{dsc rconcept | cpp/experimental/ranges/iterator/BoundedRange |specifies that a range has identical iterator and sentinel types }}</text>
      <sha1>jmb558fg689ra277q9m7mswlvbmtc9g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc ForwardIterator</title>
    <ns>10</ns>
    <id>15943</id>
    <revision>
      <id>89453</id>
      <timestamp>2017-01-22T04:41:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="184">{{dsc rconcept | cpp/experimental/ranges/iterator/ForwardIterator| specifies that an {{rconcept|InputIterator|i}} is a forward iterator, supporting equality comparison and multi-pass}}</text>
      <sha1>0qfkigyl1274x918jcn84g3vs4lp3ap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc ForwardRange</title>
    <ns>10</ns>
    <id>15965</id>
    <revision>
      <id>89478</id>
      <timestamp>2017-01-22T04:45:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc rconcept | cpp/experimental/ranges/iterator/ForwardRange |specifies a range whose iterator type satisfies {{rconcept|ForwardIterator|i}}}}</text>
      <sha1>l90oc2bw6jsgb1dx14jcuroabb7u3nx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Incrementable</title>
    <ns>10</ns>
    <id>15937</id>
    <revision>
      <id>89447</id>
      <timestamp>2017-01-22T04:40:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="227">{{dsc rconcept | cpp/experimental/ranges/iterator/Incrementable| specifies that the increment operation on a {{rconcept|WeaklyIncrementable|i}} type is equality-preserving and that the type is {{rconcept|EqualityComparable}} }}</text>
      <sha1>f7jpbgxh8b9d8jgn1vpqc6g3ov5hw2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectInvocable</title>
    <ns>10</ns>
    <id>15946</id>
    <revision>
      <id>89456</id>
      <timestamp>2017-01-22T04:41:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="238">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectInvocable|title= IndirectInvocable&lt;br/&gt;IndirectRegularInvocable|specifies that a callable type can be invoked with the result of dereferencing some {{rconcept|Readable|i}} types }}</text>
      <sha1>mgvdoxh51j1ow179ph2qoon3gvi4o9h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectPredicate</title>
    <ns>10</ns>
    <id>15947</id>
    <revision>
      <id>89462</id>
      <parentid>89457</parentid>
      <timestamp>2017-01-22T04:43:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="218">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectPredicate|specifies that a callable object, when invoked with the result of dereferencing some {{rconcept|Readable|i}} types, satisfies {{rconcept|Predicate}}}}</text>
      <sha1>lwkri236fux8gx3oca7vctfr106dybf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectRelation</title>
    <ns>10</ns>
    <id>15948</id>
    <revision>
      <id>89461</id>
      <parentid>89458</parentid>
      <timestamp>2017-01-22T04:42:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="217">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectRelation| specifies that a callable object, when invoked with the result of dereferencing some {{rconcept|Readable|i}} types, satisfies {{rconcept|Relation}}}}</text>
      <sha1>rkdjn3h0tyiwqnr8q87znhn7nrmp61t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectStrictWeakOrder</title>
    <ns>10</ns>
    <id>15949</id>
    <revision>
      <id>89460</id>
      <parentid>89459</parentid>
      <timestamp>2017-01-22T04:42:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="230">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectStrictWeakOrder|specifies that a callable object, when invoked with the result of dereferencing some {{rconcept|Readable|i}} types, satisfies {{rconcept|StrictWeakOrder}}}}</text>
      <sha1>c8u6lsi2i35t9tgteem18tjyshmy3lw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectlyComparable</title>
    <ns>10</ns>
    <id>15955</id>
    <revision>
      <id>89468</id>
      <timestamp>2017-01-22T04:43:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="163">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectlyComparable| specifies that the values referenced by two {{rconcept|Readable|i}} types can be compared}}</text>
      <sha1>ezo3qck1vkmw7tqr9ifca7fi0w5mctf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectlyCopyable</title>
    <ns>10</ns>
    <id>15952</id>
    <revision>
      <id>89465</id>
      <timestamp>2017-01-22T04:43:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="177">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectlyCopyable|specifies that values may be copied from a {{rconcept|Readable|i}} type to a {{rconcept|Writable|i}} type }}</text>
      <sha1>tp5gtjjrj31b9ql7r7hp8foww4jnsa6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectlyCopyableStorable</title>
    <ns>10</ns>
    <id>15953</id>
    <revision>
      <id>89466</id>
      <timestamp>2017-01-22T04:43:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="247">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectlyCopyableStorable| specifies that values may be copied from a {{rconcept|Readable|i}} type to a {{rconcept|Writable|i}} type and that the copy may be performed via an intermediate object}}</text>
      <sha1>prov9iqkod7rei0udrpky3vf2rngurb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectlyMovable</title>
    <ns>10</ns>
    <id>15950</id>
    <revision>
      <id>89463</id>
      <timestamp>2017-01-22T04:43:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="176">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectlyMovable| specifies that values may be moved from a {{rconcept|Readable|i}} type to a {{rconcept|Writable|i}} type }}</text>
      <sha1>c1rilksiu5ijqc436ofnjtj4yfu1pet</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectlyMovableStorable</title>
    <ns>10</ns>
    <id>15951</id>
    <revision>
      <id>89464</id>
      <timestamp>2017-01-22T04:43:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="245">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectlyMovableStorable|specifies that values may be moved from a {{rconcept|Readable|i}} type to a {{rconcept|Writable|i}} type and that the move may be performed via an intermediate object }}</text>
      <sha1>5bd4er5urggp5cts9wqk0mcxau709qa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc IndirectlySwappable</title>
    <ns>10</ns>
    <id>15954</id>
    <revision>
      <id>89467</id>
      <timestamp>2017-01-22T04:43:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">{{dsc rconcept | cpp/experimental/ranges/iterator/IndirectlySwappable| specifies that the values referenced by two {{rconcept|Readable|i}} types can be swapped}}</text>
      <sha1>7f4b8tabsz4pwoia4jnq7r6tkxl7qvv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc InputIterator</title>
    <ns>10</ns>
    <id>15941</id>
    <revision>
      <id>89451</id>
      <timestamp>2017-01-22T04:41:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="199">{{dsc rconcept | cpp/experimental/ranges/iterator/InputIterator| specifies that a type is an input iterator, that is, its referenced values can be read and it can be both pre- and post-incremented }}</text>
      <sha1>48hymxz8dzatpuz5pnmer8u80bzy192</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc InputRange</title>
    <ns>10</ns>
    <id>15963</id>
    <revision>
      <id>89476</id>
      <timestamp>2017-01-22T04:44:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="141">{{dsc rconcept | cpp/experimental/ranges/iterator/InputRange |specifies a range whose iterator type satisfies {{rconcept|InputIterator|i}} }}</text>
      <sha1>2iqcb5q21ehayqvy902pfgk4olpkwmm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Iterator</title>
    <ns>10</ns>
    <id>15938</id>
    <revision>
      <id>89448</id>
      <timestamp>2017-01-22T04:40:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="131">{{dsc rconcept | cpp/experimental/ranges/iterator/Iterator| specifies that objects of a type can be incremented and dereferenced }}</text>
      <sha1>iktkbqnxy0mfzjka0p8b7op3p90rgyw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Mergeable</title>
    <ns>10</ns>
    <id>15957</id>
    <revision>
      <id>89470</id>
      <timestamp>2017-01-22T04:44:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="176">{{dsc rconcept | cpp/experimental/ranges/iterator/Mergeable| specifies the requirements of algorithms that merge sorted sequences into an output sequence by copying elements }}</text>
      <sha1>aivbderv7vxim4w0v8vzk9saasgjzx5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc OutputIterator</title>
    <ns>10</ns>
    <id>15942</id>
    <revision>
      <id>89452</id>
      <timestamp>2017-01-22T04:41:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="231">{{dsc rconcept | cpp/experimental/ranges/iterator/OutputIterator| specifies that a type is an output iterator for a given value type, that is, values of that type can be written to it and it can be both pre- and post-incremented }}</text>
      <sha1>06llmnyvn4mu2j36brckjtdf3r31q10</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc OutputRange</title>
    <ns>10</ns>
    <id>15964</id>
    <revision>
      <id>89477</id>
      <timestamp>2017-01-22T04:44:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">{{dsc rconcept | cpp/experimental/ranges/iterator/OutputRange |specifies a range whose iterator type satisfies {{rconcept|OutputIterator|i}}}}</text>
      <sha1>dkqg9g3xslq2l9z5w4rdyykgydgfv8v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Permutable</title>
    <ns>10</ns>
    <id>15956</id>
    <revision>
      <id>89469</id>
      <timestamp>2017-01-22T04:44:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="143">{{dsc rconcept | cpp/experimental/ranges/iterator/Permutable| specifies the common requirements of algorithms that reorder elements in place }}</text>
      <sha1>06jw9gmlhjbiptm8oh9oi4o5r6cwnig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc RandomAccessIterator</title>
    <ns>10</ns>
    <id>15945</id>
    <revision>
      <id>89455</id>
      <timestamp>2017-01-22T04:41:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="215">{{dsc rconcept | cpp/experimental/ranges/iterator/RandomAccessIterator| specifies that a {{rconcept|BidirectionalIterator|i}} is a random-access interator, supporting advancement in constant time and subscripting }}</text>
      <sha1>b2gkdlv2m7s77gkz6ufw7afm8zdbdh1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc RandomAccessRange</title>
    <ns>10</ns>
    <id>15967</id>
    <revision>
      <id>89480</id>
      <timestamp>2017-01-22T04:45:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{dsc rconcept | cpp/experimental/ranges/iterator/RandomAccessRange |specifies a range whose iterator type satisfies {{rconcept|RandomAccessIterator|i}}}}</text>
      <sha1>rc0lpxxkd2fzemdbqfoie9nzy8ivcf3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Range</title>
    <ns>10</ns>
    <id>15959</id>
    <revision>
      <id>89472</id>
      <timestamp>2017-01-22T04:44:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="166">{{dsc rconcept | cpp/experimental/ranges/iterator/Range | specifies that a type is a range, that is, it provides a {{tt|begin}} iterator and an {{tt|end}} sentinel }}</text>
      <sha1>7ohgsk2npo9zltz685j8g5rquyu0ldx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Readable</title>
    <ns>10</ns>
    <id>15934</id>
    <revision>
      <id>89444</id>
      <timestamp>2017-01-22T04:40:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc rconcept | cpp/experimental/ranges/iterator/Readable|specifies that a type is readable by applying operator {{tt|*}} }}</text>
      <sha1>hvnt48z4thyy2ulfat88ai1g8jqlacd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Sentinel</title>
    <ns>10</ns>
    <id>15939</id>
    <revision>
      <id>89449</id>
      <timestamp>2017-01-22T04:40:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc rconcept | cpp/experimental/ranges/iterator/Sentinel| specifies that objects of a type is a sentinel for an {{rconcept|Iterator|i}} type}}</text>
      <sha1>j1wzg4dxyil4uzgue691e1wgzcl6usc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc SizedRange</title>
    <ns>10</ns>
    <id>15960</id>
    <revision>
      <id>89473</id>
      <timestamp>2017-01-22T04:44:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc rconcept | cpp/experimental/ranges/iterator/SizedRange | specifies that a range knows its size in constant time}}</text>
      <sha1>crhb7dshp8rzm6431chmosiwr6bfd6j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc SizedSentinel</title>
    <ns>10</ns>
    <id>15940</id>
    <revision>
      <id>89450</id>
      <timestamp>2017-01-22T04:41:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="196">{{dsc rconcept | cpp/experimental/ranges/iterator/SizedSentinel| specifies that the {{tt|-}} operator can be applied to an iterator and a sentinel to calculate their difference in constant time }}</text>
      <sha1>dyuix18ibbtvgcodr3oks0u4m5rhova</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Sortable</title>
    <ns>10</ns>
    <id>15958</id>
    <revision>
      <id>89471</id>
      <timestamp>2017-01-22T04:44:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">{{dsc rconcept | cpp/experimental/ranges/iterator/Sortable| specifies the common requirements of algorithms that permute sequences into ordered sequences }}</text>
      <sha1>9gezd2oiatu717ozkjgg3p59409vt6r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc View</title>
    <ns>10</ns>
    <id>15961</id>
    <revision>
      <id>89474</id>
      <timestamp>2017-01-22T04:44:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="141">{{dsc rconcept | cpp/experimental/ranges/iterator/View|specifies that a range is a view, that is, it has constant time copy/move/assignment}}</text>
      <sha1>5bkolrif5x4fwkgjtcz3om0qnogcpig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc WeaklyIncrementable</title>
    <ns>10</ns>
    <id>15936</id>
    <revision>
      <id>89446</id>
      <timestamp>2017-01-22T04:40:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="152">{{dsc rconcept | cpp/experimental/ranges/iterator/WeaklyIncrementable| specifies that a type can be incremented with pre- and post-increment operators}}</text>
      <sha1>6zt1s9k3j3ae4n7fgxdse19v48ey244</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc Writable</title>
    <ns>10</ns>
    <id>15935</id>
    <revision>
      <id>89445</id>
      <timestamp>2017-01-22T04:40:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{dsc rconcept | cpp/experimental/ranges/iterator/Writable|specifies that a value can be written to an iterator's referenced object}}</text>
      <sha1>tm0wkofcx72b72786z7swhzc7ux2tm1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc advance</title>
    <ns>10</ns>
    <id>15987</id>
    <revision>
      <id>89503</id>
      <timestamp>2017-01-22T04:50:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc tfun     | cpp/experimental/ranges/iterator/advance |advances an iterator by given distance}}</text>
      <sha1>mgliyo7opivhvdc9z0rz3jh8wzjw62c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc back insert iterator</title>
    <ns>10</ns>
    <id>15992</id>
    <revision>
      <id>89508</id>
      <timestamp>2017-01-22T04:51:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="129">{{dsc tclass   | cpp/experimental/ranges/iterator/back_insert_iterator|iterator adaptor for insertion at the end of a container}}</text>
      <sha1>j0uean4dloievmo8kd59mlxibkr1xwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc begin</title>
    <ns>10</ns>
    <id>16007</id>
    <revision>
      <id>89523</id>
      <timestamp>2017-01-22T04:52:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="131">{{dsc custpt   | cpp/experimental/ranges/iterator/begin | title=begin&lt;br/&gt;cbegin|returns an iterator to the beginning of a range }}</text>
      <sha1>3iju2qj46acu0pxxrsomuu15o57jmb1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc common iterator</title>
    <ns>10</ns>
    <id>15997</id>
    <revision>
      <id>89513</id>
      <timestamp>2017-01-22T04:51:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="159">{{dsc tclass   | cpp/experimental/ranges/iterator/common_iterator|adapt an iterator-sentinel pair into a common iterator type for use with legacy algorithms }}</text>
      <sha1>oju784qhamgv48a8mzhzevwhesep4mx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc counted iterator</title>
    <ns>10</ns>
    <id>15998</id>
    <revision>
      <id>89514</id>
      <timestamp>2017-01-22T04:52:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="145">{{dsc tclass   | cpp/experimental/ranges/iterator/counted_iterator|iterator adaptor that keeps track of its distance from its starting position}}</text>
      <sha1>bsogilt1g3kjqbgqyvvw1q0z0cebva4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc dangling</title>
    <ns>10</ns>
    <id>16000</id>
    <revision>
      <id>89516</id>
      <timestamp>2017-01-22T04:52:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tclass   | cpp/experimental/ranges/iterator/dangling|wrapper for a possibly dangling iterator}}</text>
      <sha1>hksqb5s2w5hsolnyp5ibqs4mrmw742b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc data</title>
    <ns>10</ns>
    <id>16015</id>
    <revision>
      <id>89532</id>
      <timestamp>2017-01-22T04:53:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="137">{{dsc custpt   | cpp/experimental/ranges/iterator/data | title=data&lt;br/&gt;cdata|obtains a pointer to the beginning of a contiguous range }}</text>
      <sha1>oqsfeakor1mtmer76cxzeizintyd44v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc default sentinel</title>
    <ns>10</ns>
    <id>15999</id>
    <revision>
      <id>89515</id>
      <timestamp>2017-01-22T04:52:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="151">{{dsc class    | cpp/experimental/ranges/iterator/default_sentinel|empty sentinel type for use with iterator types that know the bound of their range}}</text>
      <sha1>dvksy9v9710t17fm9x2uos8pp3l85yq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc difference type</title>
    <ns>10</ns>
    <id>15976</id>
    <revision>
      <id>89493</id>
      <parentid>89490</parentid>
      <timestamp>2017-01-22T04:48:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="140">{{dsc tclass   | cpp/experimental/ranges/iterator/difference_type|obtains the difference type of a {{rconcept|WeaklyIncrementable|i}} type}}</text>
      <sha1>2vizacldpau24vkbssld8pm0pbmjn22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc disable sized range</title>
    <ns>10</ns>
    <id>15971</id>
    <revision>
      <id>89484</id>
      <timestamp>2017-01-22T04:45:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">{{dsc tvar     | cpp/experimental/ranges/iterator/disable_sized_range| Provide a mechanism to declare that a range does not meet {{rconcept|SizedRange|i}}}}</text>
      <sha1>93z2qy283zvl27gin9ceu88qtqbyrft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc disable sized sentinel</title>
    <ns>10</ns>
    <id>15970</id>
    <revision>
      <id>89483</id>
      <timestamp>2017-01-22T04:45:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="185">{{dsc tvar     | cpp/experimental/ranges/iterator/disable_sized_sentinel| provides a mechanism to declare that an iterator-sentinel pair does not satisfy {{rconcept|SizedSentinel|i}} }}</text>
      <sha1>ga8wbald8ddhqjmbb6uyqwibt7pi1yk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc distance</title>
    <ns>10</ns>
    <id>15988</id>
    <revision>
      <id>89504</id>
      <timestamp>2017-01-22T04:51:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="165">{{dsc tfun     | cpp/experimental/ranges/iterator/distance|returns the distance between an iterator and a sentinel, or between the beginning and the end of a range}}</text>
      <sha1>0pfhl23w7ro1bufurczpfp7w87hu551</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc empty</title>
    <ns>10</ns>
    <id>16014</id>
    <revision>
      <id>89531</id>
      <timestamp>2017-01-22T04:53:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc custpt   | cpp/experimental/ranges/iterator/empty| checks whether a range is empty }}</text>
      <sha1>hwuqhl0t53gosymd6frcbjrczs4uhp8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc enable view</title>
    <ns>10</ns>
    <id>15973</id>
    <revision>
      <id>89486</id>
      <timestamp>2017-01-22T04:46:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc tclass   | cpp/experimental/ranges/iterator/enable_view|helper trait to differentiate views from other ranges}}</text>
      <sha1>nbsfzh8nuy89o06wdiv55noqt9s0yzi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc end</title>
    <ns>10</ns>
    <id>16008</id>
    <revision>
      <id>89524</id>
      <timestamp>2017-01-22T04:53:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc custpt   | cpp/experimental/ranges/iterator/end | title=end&lt;br/&gt;cend|returns an iterator to the end of a range}}</text>
      <sha1>42rng5phzbg639qjbrsetjuvh05c2dm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc front insert iterator</title>
    <ns>10</ns>
    <id>15993</id>
    <revision>
      <id>89509</id>
      <timestamp>2017-01-22T04:51:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc tclass   | cpp/experimental/ranges/iterator/front_insert_iterator|iterator adaptor for insertion at the front of a container}}</text>
      <sha1>is4q21vckl3iapiiev7iipg8d7wu67y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc indirect result of</title>
    <ns>10</ns>
    <id>15968</id>
    <revision>
      <id>89481</id>
      <timestamp>2017-01-22T04:45:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="192">{{dsc tclass   | cpp/experimental/ranges/iterator/indirect_result_of|compute the result of invoking a callable object on the result of dereferencing some set of {{rconcept|Readable|i}} types}}</text>
      <sha1>0erjbjs6u34j8hiterkihopqtzdptvu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc insert iterator</title>
    <ns>10</ns>
    <id>15994</id>
    <revision>
      <id>89510</id>
      <timestamp>2017-01-22T04:51:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc tclass   | cpp/experimental/ranges/iterator/insert_iterator|iterator adaptor for insertion into a container}}</text>
      <sha1>0ykl9sjrhiasflspjm6gyclrkbgrt7t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc is indirectly movable</title>
    <ns>10</ns>
    <id>15983</id>
    <revision>
      <id>89499</id>
      <timestamp>2017-01-22T04:49:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="201">{{dsc tclass   | cpp/experimental/ranges/iterator/is_indirectly_movable|title= is_indirectly_movable&lt;br/&gt;is_nothrow_indirectly_movable|tests whether two types satisfy {{rconcept|IndirectlyMovable|i}}}}</text>
      <sha1>ffknbbcdacw17qrwr3nro7bw1bzsuir</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc is indirectly swappable</title>
    <ns>10</ns>
    <id>15984</id>
    <revision>
      <id>89500</id>
      <timestamp>2017-01-22T04:49:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="209">{{dsc tclass   | cpp/experimental/ranges/iterator/is_indirectly_swappable|title= is_indirectly_swappable&lt;br/&gt;is_nothrow_indirectly_swappable|tests whether two types satisfy {{rconcept|IndirectlySwappable|i}}}}</text>
      <sha1>citjk253ys3dw4wtl321yiohv9uer2j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc istream iterator</title>
    <ns>10</ns>
    <id>16003</id>
    <revision>
      <id>89519</id>
      <timestamp>2017-01-22T04:52:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc tclass   | cpp/experimental/ranges/iterator/istream_iterator|input iterator that reads from {{lc|std::basic_istream}} }}</text>
      <sha1>exov9lydia0lhxde55kfr8q4b0i4p9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc istreambuf iterator</title>
    <ns>10</ns>
    <id>16005</id>
    <revision>
      <id>89521</id>
      <timestamp>2017-01-22T04:52:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">{{dsc tclass   | cpp/experimental/ranges/iterator/istreambuf_iterator|input iterator that reads from {{lc|std::basic_streambuf}}}}</text>
      <sha1>j7hl1hbzei2o1nrp2a9brbsmqj4ib2r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc iter common reference t</title>
    <ns>10</ns>
    <id>15982</id>
    <revision>
      <id>89498</id>
      <timestamp>2017-01-22T04:49:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="204">{{dsc talias   | cpp/experimental/ranges/iterator/iter_common_reference_t|compute the common reference type of a {{rconcept|Readable|i}} object's reference type and an lvalue reference to its value type}}</text>
      <sha1>nnmjppisme9vfil3pj31xpb4t7y2x5p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc iter move</title>
    <ns>10</ns>
    <id>15974</id>
    <revision>
      <id>89487</id>
      <timestamp>2017-01-22T04:46:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="147">{{dsc custpt   | cpp/experimental/ranges/iterator/iter_move | casts the result of dereferencing an object to its associated rvalue reference type}}</text>
      <sha1>9k0dl41ju30b6ygf5gjf2vp5enwo25b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc iter swap</title>
    <ns>10</ns>
    <id>15975</id>
    <revision>
      <id>89489</id>
      <parentid>89488</parentid>
      <timestamp>2017-01-22T04:46:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="121">{{dsc custpt   | cpp/experimental/ranges/iterator/iter_swap | swap the values referenced by two dereferenceable objects}}</text>
      <sha1>1tpwhbuf8xpm2asfgg2apezekkt3xtu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc iterator category</title>
    <ns>10</ns>
    <id>15978</id>
    <revision>
      <id>89494</id>
      <timestamp>2017-01-22T04:48:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc tclass   | cpp/experimental/ranges/iterator/iterator_category|obtains the iterator category of an input iterator type }}</text>
      <sha1>0zauuauldeofi3f74p2qtt291pdpk83</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc iterator t</title>
    <ns>10</ns>
    <id>16011</id>
    <revision>
      <id>89527</id>
      <timestamp>2017-01-22T04:53:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc talias   | cpp/experimental/ranges/iterator/iterator_t|obtains the iterator type of a range}}</text>
      <sha1>a2j8bro0aay5uwvck6jbjt0zhkg2z9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc iterator tags</title>
    <ns>10</ns>
    <id>15985</id>
    <revision>
      <id>89501</id>
      <timestamp>2017-01-22T04:50:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="252">{{dsc class | cpp/experimental/ranges/iterator/iterator_tags | title=input_iterator_tag&lt;br&gt;output_iterator_tag&lt;br&gt;forward_iterator_tag&lt;br&gt;bidirectional_iterator_tag&lt;br&gt;random_access_iterator_tag| empty class types used to indicate iterator categories}}</text>
      <sha1>kyoyyn37j7g5sjj1l6iur9ftpu9v63x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc iterator traits</title>
    <ns>10</ns>
    <id>15979</id>
    <revision>
      <id>89495</id>
      <timestamp>2017-01-22T04:48:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">{{dsc talias   | cpp/experimental/ranges/iterator/iterator_traits| compatibility traits class that collects an iterator’s associated types}}</text>
      <sha1>5ntagk49djkgrehm1ofc52mb9j36nyx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc move iterator</title>
    <ns>10</ns>
    <id>15995</id>
    <revision>
      <id>89511</id>
      <timestamp>2017-01-22T04:51:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc tclass   | cpp/experimental/ranges/iterator/move_iterator|iterator adaptor which dereferences to an rvalue reference }}</text>
      <sha1>o08ihlzzngsk7df2o5h22vpg12ovdh2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc move sentinel</title>
    <ns>10</ns>
    <id>15996</id>
    <revision>
      <id>89512</id>
      <timestamp>2017-01-22T04:51:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc tclass   | cpp/experimental/ranges/iterator/move_sentinel|sentinel adaptor for use with {{tt|move_iterator}} }}</text>
      <sha1>rsr4h4vvwdegt5gsv29c5ekip686ink</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc next</title>
    <ns>10</ns>
    <id>15989</id>
    <revision>
      <id>89505</id>
      <timestamp>2017-01-22T04:51:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="79">{{dsc tfun     | cpp/experimental/ranges/iterator/next|increment an iterator }}</text>
      <sha1>h4sjfrc9d6olu95btsy1zeuupuvgafg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc ostream iterator</title>
    <ns>10</ns>
    <id>16004</id>
    <revision>
      <id>89520</id>
      <timestamp>2017-01-22T04:52:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc tclass   | cpp/experimental/ranges/iterator/ostream_iterator|output iterator that writes to {{lc|std::basic_ostream}} }}</text>
      <sha1>m7bu3yu7u95x5rohsahm2jdhmth5kpr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc ostreambuf iterator</title>
    <ns>10</ns>
    <id>16006</id>
    <revision>
      <id>89522</id>
      <timestamp>2017-01-22T04:52:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">{{dsc tclass   | cpp/experimental/ranges/iterator/ostreambuf_iterator|output iterator that writes to {{lc|std::basic_streambuf}}}}</text>
      <sha1>7d4b6ky67gvjvimj0gd4ncpyks93w94</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc prev</title>
    <ns>10</ns>
    <id>15990</id>
    <revision>
      <id>89506</id>
      <timestamp>2017-01-22T04:51:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="79">{{dsc tfun     | cpp/experimental/ranges/iterator/prev|decrement an iterator }}</text>
      <sha1>gax1exl1p7z8ppqeh1lnrp49clk7mhj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc projected</title>
    <ns>10</ns>
    <id>15969</id>
    <revision>
      <id>89482</id>
      <timestamp>2017-01-22T04:45:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="146">{{dsc tclass   | cpp/experimental/ranges/iterator/projected|helper template for specifying the constraints on algorithms that accept projections}}</text>
      <sha1>22sv893svqibheu1n3gktjk1akm73yh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc rbegin</title>
    <ns>10</ns>
    <id>16009</id>
    <revision>
      <id>89525</id>
      <timestamp>2017-01-22T04:53:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc custpt   | cpp/experimental/ranges/iterator/rbegin | title=rbegin&lt;br/&gt;crbegin|returns a reverse iterator to a range}}</text>
      <sha1>1q67rbrjtrggc9nlb9i5zw6eb8b41a4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc reference t</title>
    <ns>10</ns>
    <id>15980</id>
    <revision>
      <id>89496</id>
      <timestamp>2017-01-22T04:48:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">{{dsc talias   | cpp/experimental/ranges/iterator/reference_t|obtains a dereferenceable object's reference type}}</text>
      <sha1>ie4b99hmww8b3f66p80qlqmkd3oehpi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc rend</title>
    <ns>10</ns>
    <id>16010</id>
    <revision>
      <id>89526</id>
      <timestamp>2017-01-22T04:53:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">{{dsc custpt   | cpp/experimental/ranges/iterator/rend| title=rend&lt;br/&gt;crend|returns a reverse end iterator to a range }}</text>
      <sha1>434waoi0nio76c4ask38wqave3zzgmu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc reverse iterator</title>
    <ns>10</ns>
    <id>15991</id>
    <revision>
      <id>89507</id>
      <timestamp>2017-01-22T04:51:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc tclass   | cpp/experimental/ranges/iterator/reverse_iterator|iterator adaptor for reverse-order traversal }}</text>
      <sha1>9in4e50kuta8jue1d72cd9nlt4iq398</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc rvalue reference t</title>
    <ns>10</ns>
    <id>15981</id>
    <revision>
      <id>89497</id>
      <timestamp>2017-01-22T04:48:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc talias   | cpp/experimental/ranges/iterator/rvalue_reference_t|obtains a dereferenceable object's rvalue reference type}}</text>
      <sha1>ftyswidvkg9y09qvmlmw57228y2uv8t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc safe iterator t</title>
    <ns>10</ns>
    <id>16001</id>
    <revision>
      <id>89517</id>
      <timestamp>2017-01-22T04:52:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="152">{{dsc talias   | cpp/experimental/ranges/iterator/safe_iterator_t|alias template that wraps the iterator type of an rvalue range with {{tt|dangling}} }}</text>
      <sha1>r54ppnzxiwdofhg1i0ogahdo8qoin0y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc sentinel t</title>
    <ns>10</ns>
    <id>16012</id>
    <revision>
      <id>89528</id>
      <timestamp>2017-01-22T04:53:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc talias   | cpp/experimental/ranges/iterator/sentinel_t|obtains the sentinel type of a range}}</text>
      <sha1>0w103hedkv9tav4thhw6z6a50h7lm61</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc size</title>
    <ns>10</ns>
    <id>16013</id>
    <revision>
      <id>89530</id>
      <parentid>89529</parentid>
      <timestamp>2017-01-22T04:53:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>duh</comment>
      <text xml:space="preserve" bytes="132">{{dsc custpt   | cpp/experimental/ranges/iterator/size | obtains the size of a range whose size can be calculated in constant time}}</text>
      <sha1>7q2eq472uvymouzenyqac02y34jmy1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc std iter traits</title>
    <ns>10</ns>
    <id>15986</id>
    <revision>
      <id>89502</id>
      <timestamp>2017-01-22T04:50:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="233">{{dsc ptclass | cpp/experimental/ranges/iterator/std_iter_traits|title=std::iterator_traits{{small|&lt;InputIterator&gt;}}&lt;br/&gt;std::iterator_traits{{small|&lt;OutputIterator&gt;}}|specializes {{lc|std::iterator_traits}} for ranges TS iterators}}</text>
      <sha1>jy3k4eiem3aat6mcs5bh12qbp01njqf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc unreachable</title>
    <ns>10</ns>
    <id>16002</id>
    <revision>
      <id>89518</id>
      <timestamp>2017-01-22T04:52:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">{{dsc class    | cpp/experimental/ranges/iterator/unreachable|sentinel type used with any iterator to denote an infinite range}}</text>
      <sha1>hog05902k2qis8a4srk1ujgjx2xbvgu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc value type</title>
    <ns>10</ns>
    <id>15977</id>
    <revision>
      <id>89492</id>
      <parentid>89491</parentid>
      <timestamp>2017-01-22T04:47:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="119">{{dsc tclass   | cpp/experimental/ranges/iterator/value_type|obtains the value type of a {{rconcept|Readable|i}} type}}</text>
      <sha1>qn0gmxmw2y5b87d8bqfxq6n2mp6wnrv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/dsc view base</title>
    <ns>10</ns>
    <id>15972</id>
    <revision>
      <id>89485</id>
      <timestamp>2017-01-22T04:45:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc class    | cpp/experimental/ranges/iterator/view_base|empty base class to signify that a class is a view}}</text>
      <sha1>cpstsanghf5gnt27b37jv9sztfokhyl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/navbar</title>
    <ns>10</ns>
    <id>15869</id>
    <revision>
      <id>89361</id>
      <timestamp>2017-01-19T23:39:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="383">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/ranges/navbar heading
|content3 = cpp/experimental/ranges/navbar content
|heading4 = cpp/experimental/ranges/iterator/navbar heading
|content4 = cpp/experimental/ranges/iterator/navbar content
}}</text>
      <sha1>ri4ph8mer8wlaich77wwmna7k9gcnk1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/navbar content</title>
    <ns>10</ns>
    <id>15871</id>
    <revision>
      <id>89381</id>
      <parentid>89372</parentid>
      <timestamp>2017-01-20T21:57:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>reorder one bit</comment>
      <text xml:space="preserve" bytes="6690">{{nv begin}}
{{nv h2 | Iterator concepts}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/Readable }}
{{nv ln | cpp/experimental/ranges/iterator/Writable }}
{{nv ln | cpp/experimental/ranges/iterator/Sentinel}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/WeaklyIncrementable}}
{{nv ln | cpp/experimental/ranges/iterator/Incrementable}}
{{nv ln | cpp/experimental/ranges/iterator/SizedSentinel}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/Iterator}}
{{nv ln | cpp/experimental/ranges/iterator/InputIterator}}
{{nv ln | cpp/experimental/ranges/iterator/OutputIterator}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/ForwardIterator}}
{{nv ln | cpp/experimental/ranges/iterator/BidirectionalIterator}}
{{nv ln | cpp/experimental/ranges/iterator/RandomAccessIterator}}
{{nv col end}}
{{nv h2 | Indirect callable concepts}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectInvocable|IndirectInvocable|IndirectRegularInvocable }}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectPredicate }}
{{nv ph space|50}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectRelation}}
{{nv ph space|50}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectStrictWeakOrder}}
{{nv ph space|50}}
{{nv col end}}
{{nv h2 | Common algorithm requirements}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectlyMovable}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectlyMovableStorable }}
{{nv ph space|50}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectlyCopyable}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectlyCopyableStorable}}
{{nv ph}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectlySwappable}}
{{nv ln | cpp/experimental/ranges/iterator/IndirectlyComparable}}
{{nv ph}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/Permutable}}
{{nv ln | cpp/experimental/ranges/iterator/Mergeable}}
{{nv ln | cpp/experimental/ranges/iterator/Sortable}}
{{nv col end}}
{{nv h2 | Range concepts}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/Range}}
{{nv ln | cpp/experimental/ranges/iterator/SizedRange}}
{{nv ln | cpp/experimental/ranges/iterator/View}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/BoundedRange}}
{{nv ln | cpp/experimental/ranges/iterator/InputRange}}
{{nv ln | cpp/experimental/ranges/iterator/OutputRange}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/ForwardRange}}
{{nv ln | cpp/experimental/ranges/iterator/BidirectionalRange}}
{{nv ln | cpp/experimental/ranges/iterator/RandomAccessRange}}
{{nv col end}}
{{nv h2 | Concept utilities}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/indirect_result_of}}
{{nv ln | cpp/experimental/ranges/iterator/projected}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/disable_sized_sentinel}}
{{nv ln | cpp/experimental/ranges/iterator/disable_sized_range}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/view_base}}
{{nv ln | cpp/experimental/ranges/iterator/enable_view}}
{{nv col end}}
{{nv h2 | Iterator utilities and operations}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/iter_move}}
{{nv ln | cpp/experimental/ranges/iterator/iter_swap}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/advance}}
{{nv ln | cpp/experimental/ranges/iterator/distance}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/next}}
{{nv ln | cpp/experimental/ranges/iterator/prev}}
{{nv col end}}
{{nv h2 | Iterator traits}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/difference_type}}
{{nv ln | cpp/experimental/ranges/iterator/value_type}}
{{nv ln | cpp/experimental/ranges/iterator/iterator_category}}
{{nv ln | cpp/experimental/ranges/iterator/iterator_traits}}
{{nv ph}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/reference_t}}
{{nv ln | cpp/experimental/ranges/iterator/rvalue_reference_t}}
{{nv ln | cpp/experimental/ranges/iterator/iter_common_reference_t}}
{{nv ln | cpp/experimental/ranges/iterator/std iter traits|std::iterator_traits{{small|&lt;InputIterator&gt;}}|std::iterator_traits{{small|&lt;OutputIterator&gt;}}}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/is_indirectly_movable| is_indirectly_movable | is_nothrow_indirectly_movable}}
{{nv ln | cpp/experimental/ranges/iterator/is_indirectly_swappable| is_indirectly_swappable|is_nothrow_indirectly_swappable}}
{{nv ph}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/iterator tags|input_iterator_tag | output_iterator_tag | forward_iterator_tag | bidirectional_iterator_tag | random_access_iterator_tag}}
{{nv col end}}
{{nv h2 | Iterator adaptors}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/reverse_iterator}}
{{nv ln | cpp/experimental/ranges/iterator/move_iterator}}
{{nv ln | cpp/experimental/ranges/iterator/move_sentinel}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/back_insert_iterator}}
{{nv ln | cpp/experimental/ranges/iterator/front_insert_iterator}}
{{nv ln | cpp/experimental/ranges/iterator/insert_iterator}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/common_iterator}}
{{nv ln | cpp/experimental/ranges/iterator/counted_iterator}}
{{nv ln | cpp/experimental/ranges/iterator/default_sentinel}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/dangling}}
{{nv ln | cpp/experimental/ranges/iterator/safe_iterator_t}}
{{nv ln | cpp/experimental/ranges/iterator/unreachable}}
{{nv col end}}
{{nv h2 | Stream iterators}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/istream_iterator}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/ostream_iterator}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/istreambuf_iterator}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/ostreambuf_iterator}}
{{nv col end}}
{{nv h2 | Range access}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/begin|begin|cbegin}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/end|end|cend}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/rbegin|rbegin|crbegin}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/rend|rend|crend}}
{{nv col end}}
{{nv h2 | Range primitives}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/iterator/iterator_t}}
{{nv ln | cpp/experimental/ranges/iterator/sentinel_t}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/distance}}
{{nv ln | cpp/experimental/ranges/iterator/size}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/data|data|cdata}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/iterator/empty}}
{{nv ph}}
{{nv col end}}
{{nv end}}</text>
      <sha1>m9zo3jj5e7om9mjc324g31s2hllx9d3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/iterator/navbar heading</title>
    <ns>10</ns>
    <id>15870</id>
    <revision>
      <id>89362</id>
      <timestamp>2017-01-19T23:40:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="55">[[cpp/experimental/ranges#Iterators|Iterators library]]</text>
      <sha1>ie9udmozi9vmosr3kq155a99uzu2irn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/navbar</title>
    <ns>10</ns>
    <id>15758</id>
    <revision>
      <id>88624</id>
      <timestamp>2016-12-02T23:02:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="263">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/ranges/navbar heading
|content3 = cpp/experimental/ranges/navbar content
}}</text>
      <sha1>18pqioyyji7zkoxq3e4far5959l0c37</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/navbar content</title>
    <ns>10</ns>
    <id>15759</id>
    <revision>
      <id>88797</id>
      <parentid>88627</parentid>
      <timestamp>2016-12-12T20:52:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="268">{{nv begin}}
{{nv ln | cpp/experimental/ranges#Concepts | Concepts}}
{{nv ln | cpp/experimental/ranges#General utilities| General utilities}}
{{nv ln | cpp/experimental/ranges#Iterators| Iterators}}
{{nv ln | cpp/experimental/ranges#Algorithms| Algorithms}}
{{nv end}}</text>
      <sha1>1k0c3vd0am1i5dv856pylx5hwh8pe1c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/navbar heading</title>
    <ns>10</ns>
    <id>15760</id>
    <revision>
      <id>88626</id>
      <timestamp>2016-12-02T23:03:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="36">[[cpp/experimental/ranges | Ranges]]</text>
      <sha1>gdhfmxuy90nqgi6gxwozd6fiht789tb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/title</title>
    <ns>10</ns>
    <id>15764</id>
    <revision>
      <id>88660</id>
      <timestamp>2016-12-05T21:57:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="150">&lt;onlyinclude&gt;{{cpp/title | n=experimental::ranges::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}| {{{4|}}} | {{{5|}}} | {{{6|}}} }}&lt;/onlyinclude&gt;</text>
      <sha1>nx6gs82t10t2prex5ncm2mwjb9q43av</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/type traits/dsc common reference</title>
    <ns>10</ns>
    <id>15924</id>
    <revision>
      <id>89434</id>
      <timestamp>2017-01-22T04:36:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="175">{{dsc tclass   | cpp/experimental/ranges/type_traits/common_reference|title=basic_common_reference&lt;br/&gt;common_reference|determine the common reference type of a set of types}}</text>
      <sha1>szsqkj17uayzwj9pgprc4c43qp4qcxu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/type traits/dsc common type</title>
    <ns>10</ns>
    <id>15925</id>
    <revision>
      <id>89435</id>
      <timestamp>2017-01-22T04:36:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc tclass   | cpp/experimental/ranges/type_traits/common_type| determine the common type of a set of types}}</text>
      <sha1>ap6605just44oeoompo9zml48eduklg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/type traits/dsc is swappable</title>
    <ns>10</ns>
    <id>15923</id>
    <revision>
      <id>89433</id>
      <timestamp>2017-01-22T04:36:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="246">{{dsc tclass   | cpp/experimental/ranges/type_traits/is_swappable|title=is_swappable_with&lt;br/&gt;is_swappable&lt;br/&gt;is_nothrow_swappable_with&lt;br/&gt;is_nothrow_swappable|checks if objects of a type can be swapped with objects of same or different type }}</text>
      <sha1>0uhuwpr2ylmq517n5rmeqpk1l01wmi5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc TagSpecifier</title>
    <ns>10</ns>
    <id>15926</id>
    <revision>
      <id>89436</id>
      <timestamp>2017-01-22T04:36:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{dsc rconcept | cpp/experimental/ranges/utility/TagSpecifier | specifies that a type is a tag specifier}}</text>
      <sha1>pev30y256o7n5zrkohwidx1q9pijwa5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc TaggedType</title>
    <ns>10</ns>
    <id>15927</id>
    <revision>
      <id>89437</id>
      <timestamp>2017-01-22T04:36:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{dsc rconcept | cpp/experimental/ranges/utility/TaggedType| specifies that a type represents a tag specifier and its element type }}</text>
      <sha1>qowyz7b61pnx7zvhdqa9t0i7alf1220</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc exchange</title>
    <ns>10</ns>
    <id>15914</id>
    <revision>
      <id>89424</id>
      <timestamp>2017-01-22T04:35:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun     | cpp/experimental/ranges/utility/exchange | replaces the argument with a new value and returns its previous value }}</text>
      <sha1>ex283tfitjfrxxm7r0d1s95670m37b9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc make tagged pair</title>
    <ns>10</ns>
    <id>15930</id>
    <revision>
      <id>89440</id>
      <timestamp>2017-01-22T04:37:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">{{dsc tfun     | cpp/experimental/ranges/utility/make_tagged_pair| convenience function for creating a {{tt|tagged_pair}} }}</text>
      <sha1>sbqqqc4fi7gg0p5fjbirimf9re2x95s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc make tagged tuple</title>
    <ns>10</ns>
    <id>15932</id>
    <revision>
      <id>89442</id>
      <timestamp>2017-01-22T04:37:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc tfun     | cpp/experimental/ranges/utility/make_tagged_tuple| convenience function for creating a {{tt|tagged_tuple}} }}</text>
      <sha1>bpu0v566uss2m1mo8njwlbwpq68wwgd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc swap</title>
    <ns>10</ns>
    <id>15913</id>
    <revision>
      <id>89423</id>
      <timestamp>2017-01-22T04:35:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="88">{{dsc custpt   | cpp/experimental/ranges/utility/swap | swaps the value of two objects}}</text>
      <sha1>lzlco2lx93aqlvun1nisxnfu6wr3ed9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc tagged</title>
    <ns>10</ns>
    <id>15928</id>
    <revision>
      <id>89438</id>
      <timestamp>2017-01-22T04:36:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc tclass   | cpp/experimental/ranges/utility/tagged | augument a tuple-like type with named accessors }}</text>
      <sha1>6824s9pozc5chjpnmldxi8xr8r0unpp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc tagged pair</title>
    <ns>10</ns>
    <id>15929</id>
    <revision>
      <id>89439</id>
      <timestamp>2017-01-22T04:36:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">{{dsc talias   | cpp/experimental/ranges/utility/tagged_pair| alias template for a tagged {{lc|std::pair}} }}</text>
      <sha1>69xwk4c6sxt89hbh4eiqrlao727kye6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/dsc tagged tuple</title>
    <ns>10</ns>
    <id>15931</id>
    <revision>
      <id>89441</id>
      <timestamp>2017-01-22T04:37:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc talias   | cpp/experimental/ranges/utility/tagged_tuple| alias template for a tagged {{lc|std::tuple}}}}</text>
      <sha1>f8ch3y3oqmmefkbvteggr8jw9m11quz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/navbar</title>
    <ns>10</ns>
    <id>15877</id>
    <revision>
      <id>89377</id>
      <timestamp>2017-01-20T21:46:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="381">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/ranges/navbar heading
|content3 = cpp/experimental/ranges/navbar content
|heading4 = cpp/experimental/ranges/utility/navbar heading
|content4 = cpp/experimental/ranges/utility/navbar content
}}</text>
      <sha1>6gdf2cych2ozk2nvg939dfwmlziwkv0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/navbar content</title>
    <ns>10</ns>
    <id>15879</id>
    <revision>
      <id>89379</id>
      <timestamp>2017-01-20T21:55:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1921">{{nv begin}}
{{nv h2 | Utility components}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/utility/swap}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/utility/exchange}}
{{nv col end}}
{{nv h2 | Function objects}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/functional/invoke}}
{{nv ln | cpp/experimental/ranges/functional/identity}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/functional/equal_to}}
{{nv ln | cpp/experimental/ranges/functional/not_equal_to}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/functional/greater}}
{{nv ln | cpp/experimental/ranges/functional/less}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/functional/greater_equal}}
{{nv ln | cpp/experimental/ranges/functional/less_equal}}
{{nv col end}}
{{nv h2 | Metaprogramming and type traits}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/type_traits/is_swappable|is_swappable_with|is_swappable}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/type_traits/is_swappable|is_nothrow_swappable_with|is_nothrow_swappable}}
{{nv col next}}
{{nv ln |cpp/experimental/ranges/type_traits/common_reference|basic_common_reference|common_reference}}
{{nv col next}}
{{nv ln |cpp/experimental/ranges/type_traits/common_type}}
{{nv ph}}
{{nv col end}}
{{nv h2 | Tagged pairs and tuples}}
{{nv col begin}}
{{nv ln | cpp/experimental/ranges/utility/TagSpecifier}}
{{nv ln | cpp/experimental/ranges/utility/TaggedType}}
{{nv ph space|40}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/utility/tagged}}
{{nv ln | cpp/experimental/ranges/algorithm/tags|tag specifiers}}
{{nv ph space |40}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/utility/tagged_pair}}
{{nv ln | cpp/experimental/ranges/utility/make_tagged_pair}}
{{nv ph space|40}}
{{nv col next}}
{{nv ln | cpp/experimental/ranges/utility/tagged_tuple}}
{{nv ln | cpp/experimental/ranges/utility/make_tagged_tuple}}
{{nv ph space |40}}
{{nv col end}}
{{nv end}}</text>
      <sha1>8wvpl804z3up9aax95qqx2gnd2wkxaj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/ranges/utility/navbar heading</title>
    <ns>10</ns>
    <id>15878</id>
    <revision>
      <id>89380</id>
      <parentid>89378</parentid>
      <timestamp>2017-01-20T21:56:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>wrong page</comment>
      <text xml:space="preserve" bytes="71">[[cpp/experimental/ranges#General utilities|General utilities library]]</text>
      <sha1>jqh1eyzi01z0vdne9e3iclbufwv4y9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared future/dsc constructor</title>
    <ns>10</ns>
    <id>14133</id>
    <revision>
      <id>91064</id>
      <parentid>85461</parentid>
      <timestamp>2017-03-16T19:24:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem ctor | cpp/experimental/shared_future/shared_future | constructs a {{tt|shared_future}}}}</text>
      <sha1>m70itgeitgsabd79r1tqzghwe53rzjm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared future/dsc get</title>
    <ns>10</ns>
    <id>15445</id>
    <redirect title="Template:cpp/experimental/shared future/dsc then" />
    <revision>
      <id>85448</id>
      <timestamp>2016-04-21T19:54:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/experimental/shared future/dsc get]] to [[Template:cpp/experimental/shared future/dsc then]]: ditto</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/experimental/shared future/dsc then]]</text>
      <sha1>dfb094wiv9dc56f0ojepzvfrq8gtbrw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared future/dsc is ready</title>
    <ns>10</ns>
    <id>14135</id>
    <revision>
      <id>85465</id>
      <parentid>78838</parentid>
      <timestamp>2016-04-21T20:03:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/experimental/shared_future/is_ready | checks if the shared state is ready}}</text>
      <sha1>n8438n5m3qj0mip71l2qzjy3gw5ozuy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared future/dsc then</title>
    <ns>10</ns>
    <id>14134</id>
    <revision>
      <id>85467</id>
      <parentid>85466</parentid>
      <timestamp>2016-04-21T20:03:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>tt</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/experimental/shared_future/then | attaches a continuation to a {{tt|shared_future}}}}</text>
      <sha1>bgobdqpc57gpxpov7edgwoymdtg21sm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared future/title</title>
    <ns>10</ns>
    <id>14149</id>
    <revision>
      <id>78858</id>
      <timestamp>2015-06-09T18:21:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">&lt;onlyinclude&gt;{{cpp/experimental/title | n=shared_future::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>b3ccqpa0g7c73a61m29gz1ew6q6t4bd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/dsc constructor</title>
    <ns>10</ns>
    <id>14634</id>
    <revision>
      <id>82287</id>
      <timestamp>2015-12-13T01:16:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem ctor | cpp/experimental/shared_ptr/shared_ptr | constructs new {{tt|shared_ptr}} }}</text>
      <sha1>3xdhrdrc13bil8bsx2606egbwnf3tur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/dsc get</title>
    <ns>10</ns>
    <id>14635</id>
    <revision>
      <id>82306</id>
      <parentid>82288</parentid>
      <timestamp>2015-12-13T02:05:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/experimental/shared_ptr/get | returns the stored pointer }}</text>
      <sha1>3ne3yhxr7i8eifgb9t5zn7u4isoiwtl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/dsc hash</title>
    <ns>10</ns>
    <id>14638</id>
    <revision>
      <id>82291</id>
      <timestamp>2015-12-13T01:18:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="170">{{dsc ptclass | cpp/experimental/shared_ptr/hash | title=std::hash{{dsc small|&lt;std::experimental::shared_ptr&gt;}} | hash support for {{lc|std::experimental::shared_ptr}} }}</text>
      <sha1>kb0qa1yg4rth1rdeaibcgwssajm9hdk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/dsc operator at</title>
    <ns>10</ns>
    <id>14637</id>
    <revision>
      <id>82313</id>
      <parentid>82290</parentid>
      <timestamp>2015-12-13T02:20:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>this uses get(), too</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/experimental/shared_ptr/operator at | title=operator[] | provides index access to the array }}</text>
      <sha1>fo6udr7pzb6vrfepl0pgi3ybv4lg342</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/dsc operator*</title>
    <ns>10</ns>
    <id>14636</id>
    <revision>
      <id>82312</id>
      <parentid>82289</parentid>
      <timestamp>2015-12-13T02:19:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/experimental/shared_ptr/operator* | title=operator*&lt;br&gt;operator-&gt; | dereferences the stored pointer }}</text>
      <sha1>7uo8aukpuqmfsgpaobeflh2hb58f3j3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/dsc pointer cast</title>
    <ns>10</ns>
    <id>14639</id>
    <revision>
      <id>82325</id>
      <parentid>82292</parentid>
      <timestamp>2015-12-13T03:31:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>stored pointer</comment>
      <text xml:space="preserve" bytes="332">{{dsc tfun | cpp/experimental/shared_ptr/pointer_cast | title=static_pointer_cast&lt;br&gt;dynamic_pointer_cast&lt;br&gt;const_pointer_cast&lt;br&gt;reinterpret_pointer_cast | applies {{ltt|cpp/language/static_cast}}, {{ltt|cpp/language/dynamic_cast}}, {{ltt|cpp/language/const_cast}}, or {{ltt|cpp/language/reinterpret_cast}} to the stored pointer}}</text>
      <sha1>g7l093bbodem0mrat4mesgb5ts3jfx2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/navbar</title>
    <ns>10</ns>
    <id>14631</id>
    <revision>
      <id>82280</id>
      <timestamp>2015-12-13T01:04:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="389">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content
|heading4 = cpp/experimental/shared_ptr/navbar heading
|content4 = cpp/experimental/shared_ptr/navbar content
}}</text>
      <sha1>0v8dmlyr70uakwjgg2jkskhtzjf50sf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/navbar content</title>
    <ns>10</ns>
    <id>14633</id>
    <revision>
      <id>82286</id>
      <timestamp>2015-12-13T01:15:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="725">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/experimental/shared_ptr/shared_ptr}}
{{nv mem ln | cpp/experimental/shared_ptr/get}}
{{nv mem ln | cpp/experimental/shared_ptr/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/experimental/shared_ptr/operator at|operator[]}}

{{nv h2 | Non-member functions}}
{{nv ln | cpp/experimental/shared_ptr/pointer_cast | experimental::static_pointer_cast | experimental::dynamic_pointer_cast | experimental::const_pointer_cast|experimental::reinterpret_pointer_cast}}
{{nv ln | cpp/experimental/shared_ptr/hash | std::hash}}

{{nv h2 | [[cpp/experimental/shared_ptr#identical-shared_ptr | Members and non-members identical to those of {{tt|std::shared_ptr}}]]}}
{{nv end}}</text>
      <sha1>q6si05ptladfpkt9wtdj2y981fz696g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/navbar heading</title>
    <ns>10</ns>
    <id>14632</id>
    <revision>
      <id>82281</id>
      <timestamp>2015-12-13T01:05:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="65">{{ltt|cpp/experimental/shared_ptr|std::experimental::shared_ptr}}</text>
      <sha1>p1mmnsowayn1u4hfsrwgx50iob75wla</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/shared ptr/title</title>
    <ns>10</ns>
    <id>14646</id>
    <revision>
      <id>82302</id>
      <timestamp>2015-12-13T01:45:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">&lt;onlyinclude&gt;{{cpp/title | n=experimental::shared_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>hbk7zbi3xr3gy9rtyvuo6z917cbahex</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc column</title>
    <ns>10</ns>
    <id>14258</id>
    <revision>
      <id>79484</id>
      <parentid>79481</parentid>
      <timestamp>2015-07-07T22:44:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun| cpp/experimental/source_location/column| return the column number represented by this object }}</text>
      <sha1>c9jvc5jf4eh52ykq29qpncowl06o00t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc constructor</title>
    <ns>10</ns>
    <id>14254</id>
    <revision>
      <id>79476</id>
      <timestamp>2015-07-07T22:40:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="145">{{dsc mem ctor | cpp/experimental/source_location/source_location | constructs a new {{tt|source_location}} with implementation-defined values }}</text>
      <sha1>83f505kwyqotxwdmtiqoiwvsb7x6dvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc current</title>
    <ns>10</ns>
    <id>14253</id>
    <revision>
      <id>79477</id>
      <parentid>79475</parentid>
      <timestamp>2015-07-07T22:41:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem sfun| cpp/experimental/source_location/current| constructs a new {{tt|source_location}}}}</text>
      <sha1>ch2duv3d3mrtm5gvyxws0o78lkxbb15</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc destructor</title>
    <ns>10</ns>
    <id>14255</id>
    <revision>
      <id>79478</id>
      <timestamp>2015-07-07T22:41:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem dtor | nolink=true| destructs an {{tt|source_location}} | notes={{mark implicit}} }}</text>
      <sha1>axg7lv7yqztphedwqim278h09tq0tni</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc file name</title>
    <ns>10</ns>
    <id>14259</id>
    <revision>
      <id>79482</id>
      <timestamp>2015-07-07T22:43:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem fun| cpp/experimental/source_location/file_name| return the file name represented by this object }}</text>
      <sha1>cajoyk89j0kp5lbvas11p719ps3y3lf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc function name</title>
    <ns>10</ns>
    <id>14260</id>
    <revision>
      <id>79483</id>
      <timestamp>2015-07-07T22:44:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem fun| cpp/experimental/source_location/function_name| return the name of the function represented by this object, if any }}</text>
      <sha1>rikhgzpc85103rdyvq2h4taz7vwmgst</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc line</title>
    <ns>10</ns>
    <id>14257</id>
    <revision>
      <id>79480</id>
      <timestamp>2015-07-07T22:43:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun| cpp/experimental/source_location/line | return the line number represented by this object }}</text>
      <sha1>cf42u63x55rmooev9ogxzj93vmzcatr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/dsc operator=</title>
    <ns>10</ns>
    <id>14256</id>
    <revision>
      <id>79479</id>
      <timestamp>2015-07-07T22:41:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun| operator{{=}} | nolink=true| Implicitly declared copy/move assignment operators | notes={{mark implicit}} }}</text>
      <sha1>j4atfrumb9qcsghuyb483e338moe69m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/navbar content</title>
    <ns>10</ns>
    <id>14251</id>
    <revision>
      <id>79473</id>
      <timestamp>2015-07-07T22:38:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="425">{{nv begin}}

{{nv h2 | Creation}}
{{nv mem ln | cpp/experimental/source_location/source_location}}
{{nv mem ln | cpp/experimental/source_location/current}}

{{nv h2 | Field Access}}
{{nv mem ln | cpp/experimental/source_location/line}}
{{nv mem ln | cpp/experimental/source_location/column}}
{{nv mem ln | cpp/experimental/source_location/file_name}}
{{nv mem ln | cpp/experimental/source_location/function_name}}
{{nv end}}</text>
      <sha1>8ys7uqjm2pfytl1svv3n9yutph2z9tk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/navbar heading</title>
    <ns>10</ns>
    <id>14252</id>
    <revision>
      <id>79474</id>
      <timestamp>2015-07-07T22:38:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="75">{{ltt|cpp/experimental/source_location|std::experimental::source_location}}</text>
      <sha1>aclyp9mvz74a78o8wtf18xcahnvfss7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/source location/title</title>
    <ns>10</ns>
    <id>14261</id>
    <revision>
      <id>79486</id>
      <timestamp>2015-07-07T22:47:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="126">&lt;onlyinclude&gt;{{cpp/title | n=experimental::source_location::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>cpicf7996pbt0rzf4tlq96klgmf2eiq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc assoc laguerre</title>
    <ns>10</ns>
    <id>14706</id>
    <revision>
      <id>83274</id>
      <timestamp>2016-01-29T16:52:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="153">{{dsc fun | cpp/experimental/special_math/assoc_laguerre | title=assoc_laguerre&lt;br&gt;assoc_laguerref&lt;br&gt;assoc_laguerrel | associated Laguerre polynomials}}</text>
      <sha1>fjh4vbwlsn5496v0f2u7cza0t8zlt4b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc assoc legendre</title>
    <ns>10</ns>
    <id>14707</id>
    <revision>
      <id>83275</id>
      <timestamp>2016-01-29T16:53:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="153">{{dsc fun | cpp/experimental/special_math/assoc_legendre | title=assoc_legendre&lt;br&gt;assoc_legendref&lt;br&gt;assoc_legendrel | associated Legendre polynomials}}</text>
      <sha1>6nbfvd83oslrgrgx7nyc6tdy1v4i1nf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc beta</title>
    <ns>10</ns>
    <id>14708</id>
    <revision>
      <id>83276</id>
      <timestamp>2016-01-29T16:53:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/experimental/special_math/beta| title=beta&lt;br&gt;betaf&lt;br&gt;betal | beta function}}</text>
      <sha1>ln8sstkp60kmuxtt4p8r4kha9mj396b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc comp ellint 1</title>
    <ns>10</ns>
    <id>14709</id>
    <revision>
      <id>83277</id>
      <timestamp>2016-01-29T16:54:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="163">{{dsc fun | cpp/experimental/special_math/comp_ellint_1| title=comp_ellint_1&lt;br&gt;comp_ellint_1f&lt;br&gt;comp_ellint_1l | (complete) elliptic integral of the first kind}}</text>
      <sha1>bkv15g8fdlvb83xwmc6l0dawa329wrq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc comp ellint 2</title>
    <ns>10</ns>
    <id>14710</id>
    <revision>
      <id>83278</id>
      <timestamp>2016-01-29T16:54:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="165">{{dsc fun | cpp/experimental/special_math/comp_ellint_2| title=comp_ellint_2&lt;br&gt;comp_ellint_2f&lt;br&gt;comp_ellint_2l |  (complete) elliptic integral of the second kind}}</text>
      <sha1>re37qa46ybx3pc4m6t0pbli91dglerf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc comp ellint 3</title>
    <ns>10</ns>
    <id>14711</id>
    <revision>
      <id>83279</id>
      <timestamp>2016-01-29T16:55:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="163">{{dsc fun | cpp/experimental/special_math/comp_ellint_3| title=comp_ellint_3&lt;br&gt;comp_ellint_3f&lt;br&gt;comp_ellint_3l | (complete) elliptic integral of the third kind}}</text>
      <sha1>b03hy78zwap476uzng1l7nqot39h1cs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc cyl bessel i</title>
    <ns>10</ns>
    <id>14712</id>
    <revision>
      <id>83280</id>
      <timestamp>2016-01-29T16:56:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | cpp/experimental/special_math/cyl_bessel_i| title=cyl_bessel_i&lt;br&gt;cyl_bessel_if&lt;br&gt;cyl_bessel_il | regular modified cylindrical Bessel functions}}</text>
      <sha1>qhw30zkjl7fi0gynnv6m22wue558yec</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc cyl bessel j</title>
    <ns>10</ns>
    <id>14713</id>
    <revision>
      <id>83281</id>
      <timestamp>2016-01-29T16:56:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">{{dsc fun | cpp/experimental/special_math/cyl_bessel_j| title=cyl_bessel_j&lt;br&gt;cyl_bessel_jf&lt;br&gt;cyl_bessel_jl | cylindrical Bessel functions (of the first kind)}}</text>
      <sha1>qcld9157j1e6kh1xri4metxqk65ifqe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc cyl bessel k</title>
    <ns>10</ns>
    <id>14714</id>
    <revision>
      <id>83282</id>
      <timestamp>2016-01-29T16:57:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="160">{{dsc fun | cpp/experimental/special_math/cyl_bessel_k| title=cyl_bessel_k&lt;br&gt;cyl_bessel_kf&lt;br&gt;cyl_bessel_kl | irregular modified cylindrical Bessel functions}}</text>
      <sha1>kgec1ljg1nguruxhk7on0bq9bohwy5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc cyl neumann</title>
    <ns>10</ns>
    <id>14726</id>
    <revision>
      <id>83294</id>
      <timestamp>2016-01-29T18:13:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="137">{{dsc fun | cpp/experimental/special_math/cyl_neumann| title=cyl_neumann&lt;br&gt;cyl_neumannf&lt;br&gt;cyl_neumannl |cylindrical Neumann functions}}</text>
      <sha1>62i87s1ws52a51bpfe1db3z2b6azg6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc ellint 1</title>
    <ns>10</ns>
    <id>14725</id>
    <revision>
      <id>83293</id>
      <timestamp>2016-01-29T18:12:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="143">{{dsc fun | cpp/experimental/special_math/ellint_1|title=ellint_1&lt;br&gt;ellint_1f&lt;br&gt;ellint_1l| (incomplete) elliptic integral of the first kind}}</text>
      <sha1>c2hvalcbsonxygadtvtr95qo72svlqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc ellint 2</title>
    <ns>10</ns>
    <id>14724</id>
    <revision>
      <id>83292</id>
      <timestamp>2016-01-29T18:12:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="143">{{dsc fun | cpp/experimental/special_math/ellint_2|title=ellint_2&lt;br&gt;ellint_2f&lt;br&gt;ellint_2l|(incomplete) elliptic integral of the second kind}}</text>
      <sha1>kk4sya2pfbdxb91kiolb8iry2fawbm7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc ellint 3</title>
    <ns>10</ns>
    <id>14723</id>
    <revision>
      <id>83291</id>
      <timestamp>2016-01-29T18:11:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | cpp/experimental/special_math/ellint_3|title=ellint_3&lt;br&gt;ellint_3f&lt;br&gt;ellint_3l|(incomplete) elliptic integral of the third kind}}</text>
      <sha1>9ips3ltugevy3vve00j1rd6e1xze6it</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc expint</title>
    <ns>10</ns>
    <id>14722</id>
    <revision>
      <id>83290</id>
      <timestamp>2016-01-29T18:11:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{dsc fun | cpp/experimental/special_math/expint|title=expint&lt;br&gt;expintf&lt;br&gt;expintl|exponential integral}}</text>
      <sha1>9lp9msrib3gdst0s6az0fqx9hv56xzb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc hermite</title>
    <ns>10</ns>
    <id>14721</id>
    <revision>
      <id>83289</id>
      <timestamp>2016-01-29T18:10:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | cpp/experimental/special_math/hermite| title=hermite&lt;br&gt;hermitef&lt;br&gt;hermitel| Hermite polynomials}}</text>
      <sha1>dvsdjjoju3ntc9slryckngr81khhvcy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc laguerre</title>
    <ns>10</ns>
    <id>14720</id>
    <revision>
      <id>83288</id>
      <timestamp>2016-01-29T18:10:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/experimental/special_math/laguerre| title=laguerre&lt;br&gt;laguerref&lt;br&gt;laguerrel| Laguerre polynomials}}</text>
      <sha1>slf72ogf13uv5jhidocewlcpqtsvfur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc legendre</title>
    <ns>10</ns>
    <id>14719</id>
    <revision>
      <id>83287</id>
      <timestamp>2016-01-29T18:09:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc fun | cpp/experimental/special_math/legendre| title=legendre&lt;br&gt;legendref&lt;br&gt;legendrel | Legendre polynomials}}</text>
      <sha1>9lhhkoa2chlqhgomslwdq82lps87ko4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc riemann zeta</title>
    <ns>10</ns>
    <id>14718</id>
    <revision>
      <id>83286</id>
      <timestamp>2016-01-29T18:08:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="134">{{dsc fun | cpp/experimental/special_math/riemann_zeta| title=riemann_zeta&lt;br&gt;riemann_zetaf&lt;br&gt;riemann_zetal | Riemann zeta function}}</text>
      <sha1>kbltisu62t8u3x06wm8r0vrp2hos9i3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc sph bessel</title>
    <ns>10</ns>
    <id>14717</id>
    <revision>
      <id>83285</id>
      <timestamp>2016-01-29T18:08:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="151">{{dsc fun | cpp/experimental/special_math/sph_bessel| title=sph_bessel&lt;br&gt;sph_besself&lt;br&gt;sph_bessell | spherical Bessel functions (of the first kind)}}</text>
      <sha1>onpgm0ej5u843giuqyexh8uvfpdwoit</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc sph legendre</title>
    <ns>10</ns>
    <id>14715</id>
    <revision>
      <id>83283</id>
      <timestamp>2016-01-29T18:07:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="152">{{dsc fun | cpp/experimental/special_math/sph_legendre| title=sph_legendre&lt;br&gt;sph_legendref&lt;br&gt;sph_legendrel | spherical associated Legendre functions}}</text>
      <sha1>2o4daiis3dwf5t2gvecajpbxxbig5ab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/dsc sph neumann</title>
    <ns>10</ns>
    <id>14716</id>
    <revision>
      <id>83284</id>
      <timestamp>2016-01-29T18:07:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | cpp/experimental/special_math/sph_neumann| title=sph_neumann&lt;br&gt;sph_neumannf&lt;br&gt;sph_neumannl | spherical Neumann functions}}</text>
      <sha1>agt7h8n58oynwax6mj9bo6dum64pm6i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/macro note</title>
    <ns>10</ns>
    <id>14727</id>
    <revision>
      <id>83318</id>
      <parentid>83315</parentid>
      <timestamp>2016-01-31T16:18:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>moving tr1 down to notes</comment>
      <text xml:space="preserve" bytes="302">As all special functions, {{tt|{{{1|}}}}} is only guaranteed to be available in {{tt|&lt;cmath&gt;}} if {{tt|__STDCPP_MATH_SPEC_FUNCS__}} is defined by the implementation to a value at least 201003L and if the user defines {{tt|__STDCPP_WANT_MATH_SPEC_FUNCS__}} before including any standard library headers.</text>
      <sha1>pf1saoczhr8cnomhv6u2kxebgsz5cdn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/navbar</title>
    <ns>10</ns>
    <id>14703</id>
    <revision>
      <id>83271</id>
      <timestamp>2016-01-29T16:41:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="275">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/special_math/navbar heading
|content3 = cpp/experimental/special_math/navbar content
}}</text>
      <sha1>7juo5h6kbsfyupp1rmvcgje2y4uj7o1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/navbar content</title>
    <ns>10</ns>
    <id>14705</id>
    <revision>
      <id>83273</id>
      <timestamp>2016-01-29T16:49:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1959">{{nv begin}}
{{nv col begin}}
{{nv ln | cpp/experimental/special_math/assoc_laguerre|assoc_laguerre|assoc_laguerref|assoc_laguerrel}}
{{nv ln | cpp/experimental/special_math/assoc_legendre|assoc_legendre|assoc_legendref|assoc_legendrel}}
{{nv ln | cpp/experimental/special_math/beta|beta|betaf|betal}}
{{nv ln | cpp/experimental/special_math/comp_ellint_1|comp_ellint_1|comp_ellint_1f|comp_ellint_1l}}
{{nv ln | cpp/experimental/special_math/comp_ellint_2|comp_ellint_2|comp_ellint_2f|comp_ellint_2l}}
{{nv ln | cpp/experimental/special_math/comp_ellint_3|comp_ellint_3|comp_ellint_3f|comp_ellint_3l}}
{{nv ln | cpp/experimental/special_math/cyl_bessel_i|cyl_bessel_i|cyl_bessel_if|cyl_bessel_il}}
{{nv col next}}
{{nv ln | cpp/experimental/special_math/cyl_bessel_j|cyl_bessel_j|cyl_bessel_jf|cyl_bessel_jl}}
{{nv ln | cpp/experimental/special_math/cyl_bessel_k|cyl_bessel_k|cyl_bessel_kf|cyl_bessel_kl}}
{{nv ln | cpp/experimental/special_math/cyl_neumann|cyl_neumann|cyl_neumannf|cyl_neumannl}}
{{nv ln | cpp/experimental/special_math/ellint_1|ellint_1|ellint_1f|ellint_1l}}
{{nv ln | cpp/experimental/special_math/ellint_2|ellint_2|ellint_2f|ellint_2l}}
{{nv ln | cpp/experimental/special_math/ellint_3|ellint_3|ellint_3f|ellint_3l}}
{{nv ln | cpp/experimental/special_math/expint|expint|expintf|expintl}}
{{nv col next}}
{{nv ln | cpp/experimental/special_math/hermite|hermite|hermitef|hermitel}}
{{nv ln | cpp/experimental/special_math/laguerre|laguerre|laguerref|laguerrel}}
{{nv ln | cpp/experimental/special_math/legendre|legendre|legendref|legendrel}}
{{nv ln | cpp/experimental/special_math/riemann_zeta|riemann_zeta|riemann_zetaf|riemann_zetal}}
{{nv ln | cpp/experimental/special_math/sph_bessel|sph_bessel|sph_besself|sph_bessell}}
{{nv ln | cpp/experimental/special_math/sph_legendre|sph_legendre|sph_legendref|sph_legendrel}}
{{nv ln | cpp/experimental/special_math/sph_neumann|sph_neumann|sph_neumannf|sph_neumannl}}
{{nv col end}}
{{nv end}}</text>
      <sha1>qg4zph1vkk52nh8pzh8lnbjmtseacjd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/special math/navbar heading</title>
    <ns>10</ns>
    <id>14704</id>
    <revision>
      <id>83272</id>
      <timestamp>2016-01-29T16:42:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="66">[[cpp/experimental/special_math | Mathematical special functions]]</text>
      <sha1>ihqol57ozlas2ssgw4hyacg4dqytrwi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc constructor</title>
    <ns>10</ns>
    <id>14560</id>
    <revision>
      <id>82134</id>
      <timestamp>2015-12-05T08:20:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem ctor | cpp/experimental/synchronized_pool_resource/synchronized_pool_resource | Constructs a {{tt|synchronized_pool_resource}}}}</text>
      <sha1>9t8m2fm5liipw05f9o8f1iouvmk5s1w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc destructor</title>
    <ns>10</ns>
    <id>14559</id>
    <revision>
      <id>82133</id>
      <timestamp>2015-12-05T08:20:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="170">{{dsc mem vdtor | cpp/experimental/synchronized_pool_resource/~synchronized_pool_resource | Destroys a {{tt|synchronized_pool_resource}}, releasing all allocated memory}}</text>
      <sha1>amhabl10xe58rd6780fmr82wsartplr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14555</id>
    <revision>
      <id>82129</id>
      <timestamp>2015-12-05T08:19:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc prot mem vfun | cpp/experimental/synchronized_pool_resource/do_allocate | Allocate memory }}</text>
      <sha1>sqannqpemh2rtpc9j7ou127gmwv30er</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14554</id>
    <revision>
      <id>82128</id>
      <timestamp>2015-12-05T08:19:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc prot mem vfun | cpp/experimental/synchronized_pool_resource/do_deallocate | Return memory to the pool }}</text>
      <sha1>9525m1319mx1glv42kh55cmltz3blj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14553</id>
    <revision>
      <id>82127</id>
      <timestamp>2015-12-05T08:19:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="139">{{dsc prot mem vfun | cpp/experimental/synchronized_pool_resource/do_is_equal | Compare for equality with another {{tt|memory_resource}} }}</text>
      <sha1>cbi5ltyu53t58phee63s0n8wc6840gq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc operator=</title>
    <ns>10</ns>
    <id>14558</id>
    <revision>
      <id>82132</id>
      <timestamp>2015-12-05T08:20:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="164">{{dsc mem fun|nolink=true | operator{{=}} | notes={{cmark deleted}}| Copy assignment operator is deleted. {{tt|synchronized_pool_resource}} is not copy assignable}}</text>
      <sha1>5yf49dc8svcq6eeyoji8irtcx728bqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc options</title>
    <ns>10</ns>
    <id>14561</id>
    <revision>
      <id>82135</id>
      <timestamp>2015-12-05T08:21:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">{{dsc mem fun | cpp/experimental/synchronized_pool_resource/options | Returns the options that control the pooling behavior of this resource}}</text>
      <sha1>9dnrj1wn06biokcay9fmkpgwh6svlnw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc release</title>
    <ns>10</ns>
    <id>14557</id>
    <revision>
      <id>82131</id>
      <timestamp>2015-12-05T08:20:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/experimental/synchronized_pool_resource/release| Release all allocated memory}}</text>
      <sha1>62f2frzumu6ogti1axtnd89ul25ekkz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/synchronized pool resource/dsc upstream resource</title>
    <ns>10</ns>
    <id>14556</id>
    <revision>
      <id>82130</id>
      <timestamp>2015-12-05T08:20:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="131">{{dsc mem fun | cpp/experimental/synchronized_pool_resource/upstream_resource | Returns a pointer to the upstream memory resource}}</text>
      <sha1>2wr1htt3p9cl8v6jdmfvkbb55lczi9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/title</title>
    <ns>10</ns>
    <id>13846</id>
    <revision>
      <id>82318</id>
      <parentid>74252</parentid>
      <timestamp>2015-12-13T03:09:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>take 6</comment>
      <text xml:space="preserve" bytes="142">&lt;onlyinclude&gt;{{cpp/title | n=experimental::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}| {{{4|}}} | {{{5|}}} | {{{6|}}} }}&lt;/onlyinclude&gt;</text>
      <sha1>5vnurksc56uxz4pr9e3duvtsuiz7cqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/type erased allocator</title>
    <ns>10</ns>
    <id>14419</id>
    <revision>
      <id>80215</id>
      <parentid>80213</parentid>
      <timestamp>2015-07-31T21:58:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Type-erased allocator */ fix</comment>
      <text xml:space="preserve" bytes="1373">=== Type-erased allocator ===
The constructors of {{tt|{{{1}}}}} taking an allocator argument {{tt|{{{alloc|alloc}}}}} treats that argument as a type-erased allocator. The memory resource pointer used by {{tt|{{{1}}}}} to allocate memory is determined using the allocator argument (if specified) as follows:

{{dsc begin}}
{{dsc hitem|Type of {{tt|{{{alloc|alloc}}}}} | value of the memory resource pointer }}
{{dsc | Non-existent (no allocator specified at time of construction) | The value of {{c|std::experimental::pmr::get_default_resource()}} at time of construction. }}
{{dsc | {{lc|std::nullptr_t}} | The value of {{c|std::experimental::pmr::get_default_resource()}} at time of construction }}
{{dsc | A pointer type convertible to&lt;br/&gt;{{c|std::experimental::pmr::memory_resource*}} | {{c|static_cast&lt;std::experimental::pmr::memory_resource*&gt;({{{alloc|alloc}}})}}}}
{{dsc | A specialization of&lt;br/&gt;{{lc|std::experimental::pmr::polymorphic_allocator}} | {{c|{{{alloc|alloc}}}.resource()}}}}
{{dsc | Any other type meeting the {{concept|Allocator}} requirements | A pointer to a value of type {{c|std::experimental::pmr::resource_adaptor&lt;A&gt;({{{alloc|alloc}}})}}, where {{tt|A}} is the type of {{tt|{{{alloc|alloc}}}}}. The pointer remains valid only for the lifetime of the {{tt|{{{1}}}}} object. }}
{{dsc | None of the above | The program is ill-formed.}}
{{dsc end}}</text>
      <sha1>jt01jj3ldwtikjen5zkjm7xh24okm0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/type traits v</title>
    <ns>10</ns>
    <id>14362</id>
    <revision>
      <id>80048</id>
      <parentid>80046</parentid>
      <timestamp>2015-07-28T22:17:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>p2, then</comment>
      <text xml:space="preserve" bytes="213">{{dsc tvar | cpp/experimental/type_trait_variable_templates#{{{1|}}} | title=std::{{{2|}}}experimental::{{{1|}}}_v | variable template alias of {{tt|std::{{{2|}}}{{{1}}}::value}} |notes={{mark since libfund_ts}}}}</text>
      <sha1>9rqyyjfb1u8h4tfayp8deop7zsw9vs3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc constructor</title>
    <ns>10</ns>
    <id>14574</id>
    <revision>
      <id>82149</id>
      <timestamp>2015-12-05T08:34:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc mem ctor | cpp/experimental/unsynchronized_pool_resource/unsynchronized_pool_resource | Constructs a {{tt|unsynchronized_pool_resource}}}}</text>
      <sha1>o1bg2os6pdpc0rp8p83edlxslxww1um</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc destructor</title>
    <ns>10</ns>
    <id>14573</id>
    <revision>
      <id>82148</id>
      <timestamp>2015-12-05T08:34:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="176">{{dsc mem vdtor | cpp/experimental/unsynchronized_pool_resource/~unsynchronized_pool_resource | Destroys a {{tt|unsynchronized_pool_resource}}, releasing all allocated memory}}</text>
      <sha1>4rh8mseu7akijqakig4ew1l6eeg8g75</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14569</id>
    <revision>
      <id>82144</id>
      <timestamp>2015-12-05T08:33:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc prot mem vfun | cpp/experimental/unsynchronized_pool_resource/do_allocate | Allocate memory }}</text>
      <sha1>8vy21w1daldypxrvmvds1kqoygs5652</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14570</id>
    <revision>
      <id>82145</id>
      <timestamp>2015-12-05T08:33:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc prot mem vfun | cpp/experimental/unsynchronized_pool_resource/do_deallocate | Return memory to the pool }}</text>
      <sha1>6uopbqx97vc7ihw3tm2iztcfvvl9ys1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14571</id>
    <revision>
      <id>82146</id>
      <timestamp>2015-12-05T08:33:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="141">{{dsc prot mem vfun | cpp/experimental/unsynchronized_pool_resource/do_is_equal | Compare for equality with another {{tt|memory_resource}} }}</text>
      <sha1>oysrnhykat97lsx0kf74qysc4xfls1g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc operator=</title>
    <ns>10</ns>
    <id>14572</id>
    <revision>
      <id>82147</id>
      <timestamp>2015-12-05T08:33:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="166">{{dsc mem fun|nolink=true | operator{{=}} | notes={{cmark deleted}}| Copy assignment operator is deleted. {{tt|unsynchronized_pool_resource}} is not copy assignable}}</text>
      <sha1>s592hc1typie49j4iabr3c8gqx4ugbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc options</title>
    <ns>10</ns>
    <id>14568</id>
    <revision>
      <id>82143</id>
      <timestamp>2015-12-05T08:33:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc mem fun | cpp/experimental/unsynchronized_pool_resource/options | Returns the options that control the pooling behavior of this resource}}</text>
      <sha1>2fxljjs8729iusqz7ljl9whv1ibfnib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc release</title>
    <ns>10</ns>
    <id>14566</id>
    <revision>
      <id>82141</id>
      <timestamp>2015-12-05T08:33:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/experimental/unsynchronized_pool_resource/release| Release all allocated memory}}</text>
      <sha1>tdubxeekx0u5fin592groyx5bsw3wi7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/unsynchronized pool resource/dsc upstream resource</title>
    <ns>10</ns>
    <id>14567</id>
    <revision>
      <id>82142</id>
      <timestamp>2015-12-05T08:33:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/experimental/unsynchronized_pool_resource/upstream_resource | Returns a pointer to the upstream memory resource}}</text>
      <sha1>r4jqdwznf4noxj55fp2vkiwkvibwcle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/vttt</title>
    <ns>10</ns>
    <id>14312</id>
    <revision>
      <id>80042</id>
      <parentid>80041</parentid>
      <timestamp>2015-07-28T22:03:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="233">{{dsc | {{anchor|{{{name}}}|{{{name}}}_v}}{{c/core|1=template &lt;{{{tpdecl|class T}}}&gt; constexpr {{{type|bool}}} {{{name}}}_v =}}| {{c/core|std::{{{ns|}}}{{{name}}}&lt;{{{tpargs|T}}}&gt;::value;}}{{#if:{{{note|}}}|&lt;sup&gt;[{{{note}}}]&lt;/sup&gt;}}}}</text>
      <sha1>clbqdl44vp5bqotm0fh44ptw5zbn52y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/weak ptr/dsc constructor</title>
    <ns>10</ns>
    <id>14644</id>
    <revision>
      <id>82298</id>
      <timestamp>2015-12-13T01:34:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem ctor | cpp/experimental/weak_ptr/weak_ptr| constructs new {{tt|weak_ptr}} }}</text>
      <sha1>o6inmfnmhllurdbpswded0brjvf6muc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/weak ptr/navbar</title>
    <ns>10</ns>
    <id>14642</id>
    <revision>
      <id>82296</id>
      <timestamp>2015-12-13T01:32:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="385">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/experimental/navbar heading
|content2 = cpp/experimental/navbar content
|heading3 = cpp/experimental/lib_extensions/navbar heading
|content3 = cpp/experimental/lib_extensions/navbar content
|heading4 = cpp/experimental/weak_ptr/navbar heading
|content4 = cpp/experimental/weak_ptr/navbar content
}}</text>
      <sha1>doxv05d8e9abm499tlrvy8ow5wvioyn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/weak ptr/navbar content</title>
    <ns>10</ns>
    <id>14643</id>
    <revision>
      <id>82297</id>
      <timestamp>2015-12-13T01:33:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="205">{{nv begin}}
{{nv mem ln | cpp/experimental/weak_ptr/weak_ptr}}

{{nv h2 | [[cpp/experimental/weak_ptr#identical-weak_ptr | Members and non-members identical to those of {{tt|std::weak_ptr}}]]}}
{{nv end}}</text>
      <sha1>1a9lw0a9t6vsp11h029h17ka0r4lz5e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/weak ptr/navbar heading</title>
    <ns>10</ns>
    <id>14641</id>
    <revision>
      <id>82295</id>
      <timestamp>2015-12-13T01:32:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="61">{{ltt|cpp/experimental/weak_ptr|std::experimental::weak_ptr}}</text>
      <sha1>26xel441gtgfdrsug23ajggzzh6m66o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/experimental/weak ptr/title</title>
    <ns>10</ns>
    <id>14645</id>
    <revision>
      <id>82301</id>
      <timestamp>2015-12-13T01:45:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=experimental::weak_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>m2duva6vka8him41e7smj4d44kt91l3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/copy example</title>
    <ns>10</ns>
    <id>15158</id>
    <revision>
      <id>84714</id>
      <timestamp>2016-03-21T20:22:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="753">{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/dir/subdir&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;).put('a');
    fs::copy(&quot;sandbox/file1.txt&quot;, &quot;sandbox/file2.txt&quot;); // copy file
    fs::copy(&quot;sandbox/dir&quot;, &quot;sandbox/dir2&quot;); // copy directory (non-recursive)
    // sandbox holds 2 files and 2 directories, one of which has a subdirectory
    // sandbox/file1.txt
    // sandbox/file2.txt
    // sandbox/dir2
    // sandbox/dir
    //    sandbox/dir/subdir
    fs::copy(&quot;sandbox&quot;, &quot;sandbox/copy&quot;, fs::copy_options::recursive);
    // sandbox/copy holds copies of the above files and subdirectories
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
}}</text>
      <sha1>2kociabj0gzqaov61k6de3tgyenlili</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc assign</title>
    <ns>10</ns>
    <id>15205</id>
    <revision>
      <id>84806</id>
      <timestamp>2016-03-22T15:34:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/filesystem/directory_entry/assign | assigns contents}}</text>
      <sha1>bzkk3uszrz6h4xyiaw1ujpwxm0qkbz8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc constructor</title>
    <ns>10</ns>
    <id>15202</id>
    <revision>
      <id>84803</id>
      <timestamp>2016-03-22T15:34:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem ctor | cpp/filesystem/directory_entry/directory_entry | constructs a directory entry}}</text>
      <sha1>2f2xxmjv3b24ux9jh94ci3irneh8pa2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc destructor</title>
    <ns>10</ns>
    <id>15203</id>
    <revision>
      <id>84804</id>
      <timestamp>2016-03-22T15:34:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="50">{{dsc mem dtor | nolink=true |default destructor}}</text>
      <sha1>i01ji52k8tx9kvhkfyft88iuv6guyyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc operator cmp</title>
    <ns>10</ns>
    <id>15208</id>
    <revision>
      <id>84809</id>
      <timestamp>2016-03-22T15:34:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="210">{{dsc mem fun | cpp/filesystem/directory_entry/operator_cmp | title=operator{{==}}&lt;br/&gt;operator!=&lt;br/&gt;operator&amp;lt;&lt;br/&gt;operator&amp;lt;{{=}}&lt;br/&gt;operator&amp;gt;&lt;br/&gt;operator&amp;gt;{{=}} | compares two directory entries}}</text>
      <sha1>soz8k6ftcq8xhwvqpdn96fep0axhqvg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc operator=</title>
    <ns>10</ns>
    <id>15204</id>
    <revision>
      <id>84805</id>
      <timestamp>2016-03-22T15:34:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/filesystem/directory_entry/operator{{=}} | assigns contents}}</text>
      <sha1>ffj1im86q5ywd1wrgu43syp3ez2fsm4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc path</title>
    <ns>10</ns>
    <id>15207</id>
    <revision>
      <id>84808</id>
      <timestamp>2016-03-22T15:34:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="129">{{dsc mem fun | cpp/filesystem/directory_entry/path | title=path&lt;br&gt;operator const path&amp; | returns the path the entry refers to}}</text>
      <sha1>5br8pvo8ttmwmwwrc7w1woez2p9reee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc replace filename</title>
    <ns>10</ns>
    <id>15206</id>
    <revision>
      <id>84807</id>
      <timestamp>2016-03-22T15:34:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/filesystem/directory_entry/replace_filename | sets the filename }}</text>
      <sha1>h5acacuw6fcp0vfhey2edptr4veobz6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/dsc status</title>
    <ns>10</ns>
    <id>15198</id>
    <revision>
      <id>84987</id>
      <parentid>84795</parentid>
      <timestamp>2016-03-23T15:26:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-cached</comment>
      <text xml:space="preserve" bytes="206">{{dsc mem fun | cpp/filesystem/directory_entry/status |title=status&lt;br&gt;symlink_status|status of the file designated by this directory entry&lt;br&gt;symlink_status of the file designated by this directory entry}}</text>
      <sha1>ggybznoe8ubk133x9m3r5olhbdq0qqe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/navbar</title>
    <ns>10</ns>
    <id>15209</id>
    <revision>
      <id>84810</id>
      <timestamp>2016-03-22T15:39:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="275">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/filesystem/navbar heading
|content2 = cpp/filesystem/navbar content

|heading3 = cpp/filesystem/directory_entry/navbar heading
|content3 = cpp/filesystem/directory_entry/navbar content
}}</text>
      <sha1>hyaexom06tmegpz156ed754v597la81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/navbar content</title>
    <ns>10</ns>
    <id>15211</id>
    <revision>
      <id>84845</id>
      <parentid>84813</parentid>
      <timestamp>2016-03-22T16:19:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>nv mem</comment>
      <text xml:space="preserve" bytes="635">{{nv begin}}
{{nv mem ln | cpp/filesystem/directory_entry/directory_entry}}
{{nv mem ln | cpp/filesystem/directory_entry/operator{{=}}}}
{{nv mem ln | cpp/filesystem/directory_entry/assign}}
{{nv mem ln | cpp/filesystem/directory_entry/replace_filename}}
{{nv mem ln | cpp/filesystem/directory_entry/path|path|operator const path&amp;}}
{{nv mem ln | cpp/filesystem/directory_entry/status|status|symlink_status}}
{{nv mem ln | cpp/filesystem/directory_entry/status|status|symlink_status}}
{{nv mem ln | cpp/filesystem/directory_entry/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;|operator&gt;|operator&lt;{{=}}|operator&gt;{{=}}}}
{{nv end}}</text>
      <sha1>lq7k38jcqug5mw1kvv4kxgibbf2h3oz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/navbar heading</title>
    <ns>10</ns>
    <id>15210</id>
    <revision>
      <id>84811</id>
      <timestamp>2016-03-22T15:40:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="75">{{ltt | cpp/filesystem/directory_entry | std::filesystem::directory_entry}}</text>
      <sha1>jecinwv3x7i3gugn43jteu5yftdt1ah</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory entry/title</title>
    <ns>10</ns>
    <id>15200</id>
    <revision>
      <id>84801</id>
      <timestamp>2016-03-22T15:15:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">&lt;onlyinclude&gt;{{cpp/title | n=filesystem::directory_entry::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>7nny9vlopq4c9s51ikbawelril4auwm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/dsc begin</title>
    <ns>10</ns>
    <id>15334</id>
    <revision>
      <id>85001</id>
      <timestamp>2016-03-23T16:31:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="207">{{dsc fun | cpp/filesystem/directory_iterator/begin | title=begin{{dsc small|(std::filesystem::directory_iterator)}}&lt;br&gt;end{{dsc small|(std::filesystem::directory_iterator)}} | range-based for loop support}}</text>
      <sha1>eud6ow9vcxzjjoic8ss3d64zxxzk12u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/dsc constructor</title>
    <ns>10</ns>
    <id>15222</id>
    <revision>
      <id>84824</id>
      <timestamp>2016-03-22T15:59:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem ctor | cpp/filesystem/directory_iterator/directory_iterator | constructs a directory iterator}}</text>
      <sha1>s4jz2rjoo9546u72f73026zsq52hjy4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/dsc destructor</title>
    <ns>10</ns>
    <id>15328</id>
    <revision>
      <id>84995</id>
      <timestamp>2016-03-23T16:27:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="51">{{dsc mem dtor | nolink=true | default destructor}}</text>
      <sha1>pht56euirfx3859r0v6ael8a57qtkx3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/dsc increment</title>
    <ns>10</ns>
    <id>15333</id>
    <revision>
      <id>85000</id>
      <timestamp>2016-03-23T16:31:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/filesystem/directory_iterator/increment | title=increment&lt;br/&gt;operator++ | advances to the next entry}}</text>
      <sha1>661p57etmuq53q8vax7ly54b3dr0d4m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/dsc operator*</title>
    <ns>10</ns>
    <id>15332</id>
    <revision>
      <id>84999</id>
      <timestamp>2016-03-23T16:31:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/filesystem/directory_iterator/operator* | title=operator*&lt;br/&gt;operator-&gt; | accesses the pointed-to entry}}</text>
      <sha1>8v3xop0aqyxg6faxvvrcnf5bwxd91r9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/dsc operator=</title>
    <ns>10</ns>
    <id>15331</id>
    <revision>
      <id>84998</id>
      <timestamp>2016-03-23T16:30:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/filesystem/directory_iterator/operator{{=}} | assigns contents}}</text>
      <sha1>o3m58hrvtj6ri0xvf6cr4yu92tsx7cw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/navbar</title>
    <ns>10</ns>
    <id>15326</id>
    <revision>
      <id>84993</id>
      <timestamp>2016-03-23T16:26:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="281">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/filesystem/navbar heading
|content2 = cpp/filesystem/navbar content

|heading3 = cpp/filesystem/directory_iterator/navbar heading
|content3 = cpp/filesystem/directory_iterator/navbar content
}}</text>
      <sha1>cc9s0dsx9ahs3b1cvuhsocsntzhm3vf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/navbar content</title>
    <ns>10</ns>
    <id>15330</id>
    <revision>
      <id>84997</id>
      <timestamp>2016-03-23T16:30:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="530">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/filesystem/directory_iterator/directory_iterator}}
{{nv mem ln | cpp/filesystem/directory_iterator/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/filesystem/directory_iterator/operator{{=}}}}
{{nv ln | cpp/filesystem/directory_iterator/increment|increment|operator++}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/filesystem/directory_iterator/begin|begin{{small|std::filesystem::(directory_iterator)}}|end{{small|std::filesystem::(directory_iterator)}}}}
{{nv end}}</text>
      <sha1>gy09o2wb2vcnqmuqfdg4rm22id0gxb1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/navbar heading</title>
    <ns>10</ns>
    <id>15329</id>
    <revision>
      <id>84996</id>
      <timestamp>2016-03-23T16:29:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="81">{{ltt | cpp/filesystem/directory_iterator | std::filesystem::directory_iterator}}</text>
      <sha1>b8bbn2y8ku0yz3v2erwmbp55d8u9rjz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/directory iterator/title</title>
    <ns>10</ns>
    <id>15224</id>
    <revision>
      <id>84826</id>
      <timestamp>2016-03-22T16:00:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">&lt;onlyinclude&gt;{{cpp/title | n=filesystem::directory_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>ckapq0r3cverhdnu37bghno5ultfjna</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc absolute</title>
    <ns>10</ns>
    <id>15106</id>
    <revision>
      <id>84566</id>
      <timestamp>2016-03-21T16:04:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="210">{{dsc fun | cpp/filesystem/absolute | title=absolute&lt;br&gt;system_complete|composes an absolute path&lt;br&gt;converts a path to an absolute path replicating OS-specific behavior|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>555c2rcqyoz9ab01k3lonzjxrxtbc9b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc canonical</title>
    <ns>10</ns>
    <id>15105</id>
    <revision>
      <id>86322</id>
      <parentid>84565</parentid>
      <timestamp>2016-06-27T14:54:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+weakly</comment>
      <text xml:space="preserve" bytes="123">{{dsc fun | cpp/filesystem/canonical|title=canonical&lt;br&gt;weakly_canonical | composes a canonical path|notes={{mark c++17}}}}</text>
      <sha1>emioyi2zggtrcvm0acihz6xajaheefh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc copy</title>
    <ns>10</ns>
    <id>15107</id>
    <revision>
      <id>84567</id>
      <timestamp>2016-03-21T16:04:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | cpp/filesystem/copy | copies files or directories|notes={{mark c++17}}}}</text>
      <sha1>9w94rj0g6k9kwr0ni25dxzyxoob7h0u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc copy file</title>
    <ns>10</ns>
    <id>15108</id>
    <revision>
      <id>84568</id>
      <timestamp>2016-03-21T16:04:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{dsc fun | cpp/filesystem/copy_file | copies file contents|notes={{mark c++17}}}}</text>
      <sha1>0ah2cj3z9b16usfyhinn6gl278b8o3w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc copy options</title>
    <ns>10</ns>
    <id>15102</id>
    <revision>
      <id>84562</id>
      <timestamp>2016-03-21T16:01:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">{{dsc enum | cpp/filesystem/copy_options | specifies semantics of copy operations|notes={{mark c++17}}}}</text>
      <sha1>c2q4g7wl9fcgeavhtsuibq3a4kn02wu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc copy symlink</title>
    <ns>10</ns>
    <id>15109</id>
    <revision>
      <id>84569</id>
      <timestamp>2016-03-21T16:04:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | cpp/filesystem/copy_symlink | copies a symbolic link|notes={{mark c++17}}}}</text>
      <sha1>1ffc18d3ao0teoqm9jbmiprb1ygfeje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc create directory</title>
    <ns>10</ns>
    <id>15110</id>
    <revision>
      <id>84570</id>
      <timestamp>2016-03-21T16:04:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">{{dsc fun | cpp/filesystem/create_directory | title=create_directory&lt;br/&gt;create_directories | creates new directory|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>d8dtjx02ehx0adyx6gsaqhdhnb3eq33</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc create hard link</title>
    <ns>10</ns>
    <id>15111</id>
    <revision>
      <id>84571</id>
      <timestamp>2016-03-21T16:04:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/filesystem/create_hard_link | creates a hard link|notes={{mark c++17}}}}</text>
      <sha1>0rlflex44yldbio6xuzm6zsiuypem2i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc create symlink</title>
    <ns>10</ns>
    <id>15112</id>
    <revision>
      <id>84572</id>
      <timestamp>2016-03-21T16:05:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="160">{{dsc fun | cpp/filesystem/create_symlink | title=create_symlink&lt;br/&gt;create_directory_symlink | creates a symbolic link|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>hvl3a3nnnff916fibmgeyw77gapm5xi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc current path</title>
    <ns>10</ns>
    <id>15113</id>
    <revision>
      <id>84573</id>
      <timestamp>2016-03-21T16:05:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | cpp/filesystem/current_path | return current working directory|notes={{mark c++17}}}}</text>
      <sha1>tdaqj4lmfxzgkqqgd4fcppou4lhhzdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc directory entry</title>
    <ns>10</ns>
    <id>15095</id>
    <revision>
      <id>84553</id>
      <parentid>84552</parentid>
      <timestamp>2016-03-21T15:57:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c+=17</comment>
      <text xml:space="preserve" bytes="87">{{dsc class | cpp/filesystem/directory_entry | a directory entry|notes={{mark c++17}}}}</text>
      <sha1>i6dyz0u5x8zyhsbt7v0clzlntf5i3sr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc directory iterator</title>
    <ns>10</ns>
    <id>15096</id>
    <revision>
      <id>84556</id>
      <timestamp>2016-03-21T15:58:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc class | cpp/filesystem/directory_iterator | an iterator to the contents of the directory|notes={{mark c++17}}}}</text>
      <sha1>122etp9m84n2g357y5emwmnf89v42e9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc directory options</title>
    <ns>10</ns>
    <id>15103</id>
    <revision>
      <id>84563</id>
      <timestamp>2016-03-21T16:01:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc enum | cpp/filesystem/directory_options | options for iterating directory contents|notes={{mark c++17}}}}</text>
      <sha1>dtahgp15tp76iezahfjzh7obmhwrg1i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc equivalent</title>
    <ns>10</ns>
    <id>15115</id>
    <revision>
      <id>84577</id>
      <timestamp>2016-03-21T16:09:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | cpp/filesystem/equivalent | checks whether two paths refer to the same file system object|notes={{mark c++17}}}}</text>
      <sha1>2i0zjf8uokbdt5is33pfur66kurjtvh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc exists</title>
    <ns>10</ns>
    <id>15114</id>
    <revision>
      <id>84574</id>
      <timestamp>2016-03-21T16:05:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/filesystem/exists | checks whether path refers to existing file system object|notes={{mark c++17}}}}</text>
      <sha1>02pid8qf2vfvd32hpvp6keu3grrljdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc file size</title>
    <ns>10</ns>
    <id>15116</id>
    <revision>
      <id>84578</id>
      <timestamp>2016-03-21T16:09:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/filesystem/file_size | returns the size of a file|notes={{mark c++17}}}}</text>
      <sha1>nmbsiodu2w93dmkp4zz7gna1yeux1o6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc file status</title>
    <ns>10</ns>
    <id>15098</id>
    <revision>
      <id>84558</id>
      <timestamp>2016-03-21T16:00:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc class | cpp/filesystem/file_status | represents file type and permissions|notes={{mark c++17}}}}</text>
      <sha1>huy547ho296feowio6foitdmqn4aeel</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc file time type</title>
    <ns>10</ns>
    <id>15104</id>
    <revision>
      <id>84564</id>
      <timestamp>2016-03-21T16:01:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc typedef | cpp/filesystem/file_time_type | represents file time values|notes={{mark c++17}}}}</text>
      <sha1>jrnk48i2tndlkluuusbkvekm2mvrh3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc file type</title>
    <ns>10</ns>
    <id>15100</id>
    <revision>
      <id>84560</id>
      <timestamp>2016-03-21T16:00:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="81">{{dsc enum | cpp/filesystem/file_type | the type of a file|notes={{mark c++17}}}}</text>
      <sha1>qpy2za1lu3yaa4rv56ciu2jg3moxqvn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc filesystem error</title>
    <ns>10</ns>
    <id>15094</id>
    <revision>
      <id>84554</id>
      <parentid>84551</parentid>
      <timestamp>2016-03-21T15:58:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="112">{{dsc class | cpp/filesystem/filesystem_error | an exception thrown on file system errors|notes={{mark c++17}}}}</text>
      <sha1>al3diqbaeigkhst03nczxsk5vwye424</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc hard link count</title>
    <ns>10</ns>
    <id>15117</id>
    <revision>
      <id>84579</id>
      <timestamp>2016-03-21T16:09:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="131">{{dsc fun | cpp/filesystem/hard_link_count | returns the number of hard links referring to the specific file|notes={{mark c++17}}}}</text>
      <sha1>sxvd09xkub4jeom5l5e1xbtrxjz0az7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is block file</title>
    <ns>10</ns>
    <id>15128</id>
    <revision>
      <id>84590</id>
      <timestamp>2016-03-21T16:13:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | cpp/filesystem/is_block_file | checks whether the given path refers to block device|notes={{mark c++17}}}}</text>
      <sha1>6hko5g6k47s263zbszff8os61hzbe4k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is character file</title>
    <ns>10</ns>
    <id>15130</id>
    <revision>
      <id>84592</id>
      <timestamp>2016-03-21T16:13:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">{{dsc fun | cpp/filesystem/is_character_file | checks whether the given path refers to a character device|notes={{mark c++17}}}}</text>
      <sha1>grs47162av7otbkegghld1jbskqqgar</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is directory</title>
    <ns>10</ns>
    <id>15131</id>
    <revision>
      <id>84593</id>
      <timestamp>2016-03-21T16:14:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/filesystem/is_directory | checks whether the given path refers to a directory|notes={{mark c++17}}}}</text>
      <sha1>k874de83o6owenapp9s2ixe3cekfdox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is empty</title>
    <ns>10</ns>
    <id>15132</id>
    <revision>
      <id>84594</id>
      <timestamp>2016-03-21T16:14:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/filesystem/is_empty | checks whether the given path refers to an empty file or directory|notes={{mark c++17}}}}</text>
      <sha1>j7hl92o3rpbtabpp9zuglchiffff6nv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is fifo</title>
    <ns>10</ns>
    <id>15133</id>
    <revision>
      <id>84595</id>
      <timestamp>2016-03-21T16:14:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc fun | cpp/filesystem/is_fifo | checks whether the given path refers to a named pipe|notes={{mark c++17}}}}</text>
      <sha1>bbdmqf0xxeujmau939ot3236aqh501n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is other</title>
    <ns>10</ns>
    <id>15134</id>
    <revision>
      <id>84596</id>
      <timestamp>2016-03-21T16:14:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/filesystem/is_other | checks whether the argument refers to an ''other'' file|notes={{mark c++17}}}}</text>
      <sha1>rw54stowgy3h880suilvut8x3z9f5vx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is regular file</title>
    <ns>10</ns>
    <id>15135</id>
    <revision>
      <id>84597</id>
      <timestamp>2016-03-21T16:14:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | cpp/filesystem/is_regular_file | checks whether the argument refers to a regular file|notes={{mark c++17}}}}</text>
      <sha1>5als23klt1tglbbar6peuu4o7twtyci</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is socket</title>
    <ns>10</ns>
    <id>15136</id>
    <revision>
      <id>84598</id>
      <timestamp>2016-03-21T16:14:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | cpp/filesystem/is_socket | checks whether the argument refers to a named IPC socket|notes={{mark c++17}}}}</text>
      <sha1>bgw762bv1ysezpmdx86nqchtw2xzex1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc is symlink</title>
    <ns>10</ns>
    <id>15137</id>
    <revision>
      <id>84599</id>
      <timestamp>2016-03-21T16:14:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/filesystem/is_symlink | checks whether the argument refers to a symbolic link|notes={{mark c++17}}}}</text>
      <sha1>8mp9w0pm72yu750dlvwzum36dtzqxtd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc last write time</title>
    <ns>10</ns>
    <id>15118</id>
    <revision>
      <id>84580</id>
      <timestamp>2016-03-21T16:09:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | cpp/filesystem/last_write_time | gets or sets the time of the last data modification|notes={{mark c++17}}}}</text>
      <sha1>swdpt5xqc8d9r7r15gfchj6xh2gtk9e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc path</title>
    <ns>10</ns>
    <id>15093</id>
    <revision>
      <id>84555</id>
      <parentid>84550</parentid>
      <timestamp>2016-03-21T15:58:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="78">{{dsc class | cpp/filesystem/path | represents a path | notes={{mark c++17}}}}</text>
      <sha1>a2pw9vjiw78htbf70egmevcj507ejcp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc permissions</title>
    <ns>10</ns>
    <id>15119</id>
    <revision>
      <id>84581</id>
      <timestamp>2016-03-21T16:09:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/filesystem/permissions | modifies file access permissions|notes={{mark c++17}}}}</text>
      <sha1>eaiid8glsok4l51h0jqev5nrona9v4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc perms</title>
    <ns>10</ns>
    <id>15101</id>
    <revision>
      <id>84561</id>
      <timestamp>2016-03-21T16:01:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="93">{{dsc enum | cpp/filesystem/perms | identifies file system permissions|notes={{mark c++17}}}}</text>
      <sha1>fw50ulb37lzg5md42jv9ouxmxz5rocu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc read symlink</title>
    <ns>10</ns>
    <id>15120</id>
    <revision>
      <id>84582</id>
      <timestamp>2016-03-21T16:09:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/filesystem/read_symlink | obtains the target of a symbolic link|notes={{mark c++17}}}}</text>
      <sha1>6bb40xl3ki6qo7g3ujgvmpxakf5hs2t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc recursive directory iterator</title>
    <ns>10</ns>
    <id>15097</id>
    <revision>
      <id>84557</id>
      <timestamp>2016-03-21T15:58:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="148">{{dsc class | cpp/filesystem/recursive_directory_iterator | an iterator to the contents of a directory and its subdirectories|notes={{mark c++17}}}}</text>
      <sha1>h2y7dzi8yyllw0e1wbrnjive0l31ced</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc relative</title>
    <ns>10</ns>
    <id>15544</id>
    <revision>
      <id>86323</id>
      <timestamp>2016-06-27T14:55:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc fun | cpp/filesystem/relative|title=relative&lt;br&gt;proximate| composes a relative path|notes={{mark c++17}}}}</text>
      <sha1>qorq6ler73bdf3xjdgloqk9xsdmenaw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc remove</title>
    <ns>10</ns>
    <id>15121</id>
    <revision>
      <id>84583</id>
      <timestamp>2016-03-21T16:09:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="204">{{dsc fun | cpp/filesystem/remove | title=remove&lt;br&gt;remove_all | removes a file or empty directory&lt;br&gt;removes a file or directory and all its contents, recursively|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>kzdctxafsylv6nr6ndng1hxkl9a2oi2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc rename</title>
    <ns>10</ns>
    <id>15122</id>
    <revision>
      <id>84584</id>
      <timestamp>2016-03-21T16:09:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc fun | cpp/filesystem/rename | moves or renames a file or directory|notes={{mark c++17}}}}</text>
      <sha1>ltcszka47iw053p5caq95xng65uwemv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc resize file</title>
    <ns>10</ns>
    <id>15123</id>
    <revision>
      <id>84585</id>
      <timestamp>2016-03-21T16:10:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc fun | cpp/filesystem/resize_file | changes the size of a regular file by truncation or zero-fill|notes={{mark c++17}}}}</text>
      <sha1>lk41zcfej26f4hspuvn1ownn3xnos59</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc space</title>
    <ns>10</ns>
    <id>15124</id>
    <revision>
      <id>84586</id>
      <timestamp>2016-03-21T16:10:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc fun | cpp/filesystem/space | determines available free space on the file system|notes={{mark c++17}}}}</text>
      <sha1>tw1q4bej4fhukpvgu6z7wikuk0yvds4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc space info</title>
    <ns>10</ns>
    <id>15099</id>
    <revision>
      <id>84559</id>
      <timestamp>2016-03-21T16:00:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc class | cpp/filesystem/space_info | information about free and available space on the filesystem|notes={{mark c++17}}}}</text>
      <sha1>1fzitgi9kt9b1dlt1rf9h20r1wcw0ph</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc status</title>
    <ns>10</ns>
    <id>15126</id>
    <revision>
      <id>84588</id>
      <timestamp>2016-03-21T16:13:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="192">{{dsc fun | cpp/filesystem/status|title=status&lt;br&gt;symlink_status |determines file attributes&lt;br&gt;determines file attributes, checking the symlink target|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>cx8m849lchw3vj7ep720zb8u5zlgg6p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc status known</title>
    <ns>10</ns>
    <id>15138</id>
    <revision>
      <id>84600</id>
      <timestamp>2016-03-21T16:15:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | cpp/filesystem/status_known | checks whether file status is known|notes={{mark c++17}}}}</text>
      <sha1>ez00bvhzhbm16zl90o0ftu6t8kmvcr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/dsc temp directory path</title>
    <ns>10</ns>
    <id>15127</id>
    <revision>
      <id>84589</id>
      <timestamp>2016-03-21T16:13:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | cpp/filesystem/temp_directory_path | returns a directory suitable for temporary files|notes={{mark c++17}}}}</text>
      <sha1>ld4v1si3azu8ofz3ndscyg33id6qudf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/error handling</title>
    <ns>10</ns>
    <id>15143</id>
    <revision>
      <id>91950</id>
      <parentid>84698</parentid>
      <timestamp>2017-03-31T20:17:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="574">The overload that does not take a {{c|std::error_code&amp;}} parameter throws {{rlp|filesystem_error}} on underlying OS API errors, constructed with {{#if:{{{1|}}}|{{tt|{{{1}}}}} as the first argument{{#if:{{{2|}}}|, {{tt|{{{2}}}}} as the second argument,}} and}} the OS error code as the error code argument. {{lc|std::bad_alloc}} may be thrown if memory allocation fails. The overload taking a {{c|std::error_code&amp;}} parameter sets it to the OS API error code if an OS API call fails, and executes {{c|ec.clear()}} if no errors occur. This overload has {{unreviewed noexcept}}</text>
      <sha1>0ysjhs4j7hogkzpu1k6kgexgevf3pzh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/error handling exception only</title>
    <ns>10</ns>
    <id>15281</id>
    <revision>
      <id>84886</id>
      <timestamp>2016-03-22T16:42:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="146">May throw {{ltt|cpp/filesystem/filesystem_error|filesystem_error}} on underlying OS API errors or {{c|std::bad_alloc}} if memory allocation fails.</text>
      <sha1>b269164lsuy6av097fmvds8vv1ooask</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/dsc constructor</title>
    <ns>10</ns>
    <id>15234</id>
    <revision>
      <id>84836</id>
      <timestamp>2016-03-22T16:09:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem ctor | cpp/filesystem/file_status/file_status | constructs a {{tt|file_status}} object}}</text>
      <sha1>jjdgi90i9qbk4d6kjvzwc158w6x87lm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/dsc destructor</title>
    <ns>10</ns>
    <id>15232</id>
    <revision>
      <id>84834</id>
      <timestamp>2016-03-22T16:09:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="52">{{dsc mem dtor | nolink=true | implicit destructor}}</text>
      <sha1>bqy69mkfl93bt5tnxpbi6657yobcrft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/dsc operator=</title>
    <ns>10</ns>
    <id>15233</id>
    <revision>
      <id>84835</id>
      <timestamp>2016-03-22T16:09:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/filesystem/file_status/operator{{=}} | assigns contents}}</text>
      <sha1>9crrz8w0bo8z2c37fuhsxt5c83mdcsy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/dsc permissions</title>
    <ns>10</ns>
    <id>15230</id>
    <revision>
      <id>84832</id>
      <timestamp>2016-03-22T16:08:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/filesystem/file_status/permissions | gets or sets the permissions of the file}}</text>
      <sha1>79i0jqpyan44ip58ok0wz2zn1el3cii</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/dsc type</title>
    <ns>10</ns>
    <id>15231</id>
    <revision>
      <id>84833</id>
      <timestamp>2016-03-22T16:09:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/filesystem/file_status/type | gets or sets the type of the file}}</text>
      <sha1>gyxzqrhlvgaxflwa6wo7ml501bv4z3m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/navbar</title>
    <ns>10</ns>
    <id>15236</id>
    <revision>
      <id>84838</id>
      <timestamp>2016-03-22T16:12:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="267">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/filesystem/navbar heading
|content2 = cpp/filesystem/navbar content

|heading3 = cpp/filesystem/file_status/navbar heading
|content3 = cpp/filesystem/file_status/navbar content
}}</text>
      <sha1>qcv0zpxylz22infqsdkpvtjlk6u92b0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/navbar content</title>
    <ns>10</ns>
    <id>15242</id>
    <revision>
      <id>84844</id>
      <timestamp>2016-03-22T16:18:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="238">{{nv begin}}
{{nv mem ln | cpp/filesystem/file_status/file_status}}
{{nv mem ln | cpp/filesystem/file_status/operator{{=}}}}
{{nv mem ln | cpp/filesystem/file_status/type}}
{{nv mem ln | cpp/filesystem/file_status/permissions}}
{{nv end}}</text>
      <sha1>thiv3vr4i5iuttea9p0i7whrds6tfzn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/navbar heading</title>
    <ns>10</ns>
    <id>15237</id>
    <revision>
      <id>84839</id>
      <timestamp>2016-03-22T16:13:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="67">{{ltt | cpp/filesystem/file_status | std::filesystem::file_status}}</text>
      <sha1>eumfxkunr2u0rxejrxvh5xe7w1d1nns</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/file status/title</title>
    <ns>10</ns>
    <id>15235</id>
    <revision>
      <id>84837</id>
      <timestamp>2016-03-22T16:12:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">&lt;onlyinclude&gt;{{cpp/title | n=filesystem::file_status::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>0mfosxjls1ird32gvb9ew2m3hwmhmgd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/filesystem error/dsc constructor</title>
    <ns>10</ns>
    <id>15145</id>
    <revision>
      <id>84701</id>
      <timestamp>2016-03-21T20:05:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem ctor | cpp/filesystem/filesystem_error/filesystem_error | constructs the error object}}</text>
      <sha1>ou5oil0n2fqlm2lg4qhxweziuvu6k1x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/filesystem error/dsc path</title>
    <ns>10</ns>
    <id>15146</id>
    <revision>
      <id>84702</id>
      <timestamp>2016-03-21T20:05:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">{{dsc mem fun | cpp/filesystem/filesystem_error/path | title=path1&lt;br/&gt;path2 | returns the paths that were involved in the operation that caused the error}}</text>
      <sha1>46t7c9xnk2gn3go09fowbrv6xd7mc7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/filesystem error/dsc what</title>
    <ns>10</ns>
    <id>15147</id>
    <revision>
      <id>84703</id>
      <timestamp>2016-03-21T20:06:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/filesystem/filesystem_error/what | returns the explanatory string}}</text>
      <sha1>0jdgfqaccfpl81wkbtmesr7f1snkzqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/filesystem error/navbar</title>
    <ns>10</ns>
    <id>15151</id>
    <revision>
      <id>84707</id>
      <timestamp>2016-03-21T20:09:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="277">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/filesystem/navbar heading
|content2 = cpp/filesystem/navbar content

|heading3 = cpp/filesystem/filesystem_error/navbar heading
|content3 = cpp/filesystem/filesystem_error/navbar content
}}</text>
      <sha1>8ft3w89avf8ft2zjrry4digh9lhgh6y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/filesystem error/navbar content</title>
    <ns>10</ns>
    <id>15153</id>
    <revision>
      <id>84709</id>
      <timestamp>2016-03-21T20:10:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="335">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/filesystem/filesystem_error/filesystem_error}}
{{nv mem ln | cpp/filesystem/filesystem_error/path | path1 | path2}}
{{nv mem ln | cpp/filesystem/filesystem_error/what}}
{{nv h2 | Inherited from {{lc|std::system_error}}}}
{{nv mem ln | cpp/error/system_error/code}}
{{nv end}}</text>
      <sha1>kahp0rdd16dsqujpqtndqcnsojx65mt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/filesystem error/navbar heading</title>
    <ns>10</ns>
    <id>15152</id>
    <revision>
      <id>84708</id>
      <timestamp>2016-03-21T20:10:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="60">{{ltt | cpp/filesystem/filesystem_error | filesystem_error}}</text>
      <sha1>qdenthuhffbslxc8lyr9prwzuhipuoy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/filesystem error/title</title>
    <ns>10</ns>
    <id>15150</id>
    <revision>
      <id>84706</id>
      <timestamp>2016-03-21T20:08:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">&lt;onlyinclude&gt;{{cpp/title | n=filesystem::filesystem_error::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>e0aspohbu1yh6mobpmqmqmvok8cm8xq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/navbar</title>
    <ns>10</ns>
    <id>15090</id>
    <revision>
      <id>84547</id>
      <timestamp>2016-03-21T15:52:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="157">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/filesystem/navbar heading
|content2 = cpp/filesystem/navbar content
}}</text>
      <sha1>2zzbf5w1k03ttpih1hb1byh26bui5o2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/navbar content</title>
    <ns>10</ns>
    <id>15092</id>
    <revision>
      <id>86326</id>
      <parentid>84549</parentid>
      <timestamp>2016-06-27T14:58:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+relative etc</comment>
      <text xml:space="preserve" bytes="3305">{{nv begin}}
{{nv h2 | Classes}}
{{nv col begin}}
{{nv ln | cpp/filesystem/path|filesystem::path}}
{{nv ln | cpp/filesystem/filesystem_error|filesystem::filesystem_error}}
{{nv ln | cpp/filesystem/directory_entry|filesystem::directory_entry}}
{{nv ln | cpp/filesystem/directory_iterator|filesystem::directory_iterator}}
{{nv ln | cpp/filesystem/recursive_directory_iterator|filesystem::recursive_directory_iterator}}
{{nv ln | cpp/filesystem/file_status|filesystem::file_status}}
{{nv col next}}
{{nv ln | cpp/filesystem/space_info|filesystem::space_info}}
{{nv ln | cpp/filesystem/file_type|filesystem::file_type}}
{{nv ln | cpp/filesystem/perms|filesystem::perms}}
{{nv ln | cpp/filesystem/copy_options|filesystem::copy_options}}
{{nv ln | cpp/filesystem/directory_options|filesystem::directory_options}}
{{nv ln | cpp/filesystem/file_time_type|filesystem::file_time_type}}
{{nv col end}}
{{nv h2 | Functions}}
{{nv col begin}}
{{nv ln | cpp/filesystem/absolute|filesystem::absolute&lt;br&gt;filesystem::system_complete}}
{{nv ln | cpp/filesystem/canonical|filesystem::canonical|filesystem::weakly_canonical}}
{{nv ln | cpp/filesystem/relative|filesystem::relative|filesystem::proximate}}
{{nv ln | cpp/filesystem/copy|filesystem::copy}}
{{nv ln | cpp/filesystem/copy_file|filesystem::copy_file}}
{{nv ln | cpp/filesystem/copy_symlink|filesystem::copy_symlink}}
{{nv ln | cpp/filesystem/create_directory|filesystem::create_directory&lt;br&gt;filesystem::create_directories}}
{{nv ln | cpp/filesystem/create_hard_link|filesystem::create_hard_link}}
{{nv ln | cpp/filesystem/create_symlink|filesystem::create_symlink&lt;br&gt;filesystem::create_directory_symlink}}
{{nv ln | cpp/filesystem/current_path|filesystem::current_path}}
{{nv col next}}
{{nv ln | cpp/filesystem/exists|filesystem::exists}}
{{nv ln | cpp/filesystem/equivalent|filesystem::equivalent}}
{{nv ln | cpp/filesystem/file_size|filesystem::file_size}}
{{nv ln | cpp/filesystem/hard_link_count|filesystem::hard_link_count}}
{{nv ln | cpp/filesystem/last_write_time|filesystem::last_write_time}}
{{nv ln | cpp/filesystem/permissions|filesystem::permissions}}
{{nv ln | cpp/filesystem/read_symlink|filesystem::read_symlink}}
{{nv ln | cpp/filesystem/remove|filesystem::remove&lt;br&gt;filesystem::remove_all}}
{{nv ln | cpp/filesystem/rename|filesystem::rename}}
{{nv ln | cpp/filesystem/resize_file|filesystem::resize_file}}
{{nv ln | cpp/filesystem/space|filesystem::space}}
{{nv ln | cpp/filesystem/status|filesystem::status&lt;br&gt;filesystem::symlink_status}}
{{nv ln | cpp/filesystem/temp_directory_path|filesystem::temp_directory_path}}
{{nv col end}}
{{nv h2|File types}}
{{nv col begin}}
{{nv ln | cpp/filesystem/is_block_file|filesystem::is_block_file}}
{{nv ln | cpp/filesystem/is_character_file|filesystem::is_character_file}}
{{nv ln | cpp/filesystem/is_directory|filesystem::is_directory}}
{{nv ln | cpp/filesystem/is_empty|filesystem::is_empty}}
{{nv ln | cpp/filesystem/status_known|filesystem::status_known}}
{{nv col next}}
{{nv ln | cpp/filesystem/is_fifo|filesystem::is_fifo}}
{{nv ln | cpp/filesystem/is_other|filesystem::is_other}}
{{nv ln | cpp/filesystem/is_regular_file|filesystem::is_regular_file}}
{{nv ln | cpp/filesystem/is_socket|filesystem::is_socket}}
{{nv ln | cpp/filesystem/is_symlink|filesystem::is_symlink}}
{{nv col end}}
{{nv end}}</text>
      <sha1>mrf4g1gsm2xxia44jvivaa021xuh5dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/navbar heading</title>
    <ns>10</ns>
    <id>15091</id>
    <revision>
      <id>84548</id>
      <timestamp>2016-03-21T15:53:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="39">[[cpp/filesystem | Filesystem library]]</text>
      <sha1>h7ow8e9jfon26ddy1bxtnpf6h52i51s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc append</title>
    <ns>10</ns>
    <id>15252</id>
    <revision>
      <id>84921</id>
      <parentid>84857</parentid>
      <timestamp>2016-03-22T18:30:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>&quot;with a directory separator&quot; (to contrast +=)</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem fun | cpp/filesystem/path/append | title=append&lt;br/&gt;operator/{{=}} | appends elements to the path with a directory separator}}</text>
      <sha1>1sz3kpjnv0hdzvcgfrd0gzdnr0j4oyh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc assign</title>
    <ns>10</ns>
    <id>15251</id>
    <revision>
      <id>84856</id>
      <timestamp>2016-03-22T16:31:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="63">{{dsc mem fun | cpp/filesystem/path/assign | assigns contents}}</text>
      <sha1>c6moit2uz41isiz7s2sv6c2xkz99iuz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc begin</title>
    <ns>10</ns>
    <id>15275</id>
    <revision>
      <id>84880</id>
      <timestamp>2016-03-22T16:38:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc mem fun | cpp/filesystem/path/begin | title=begin&lt;br&gt;end| iterator access to the path as a sequence of elements}}</text>
      <sha1>nreanz4qk1dl6k0mm9z0ydsta4t7e99</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc clear</title>
    <ns>10</ns>
    <id>15254</id>
    <revision>
      <id>84859</id>
      <timestamp>2016-03-22T16:32:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/filesystem/path/clear | erases the contents }}</text>
      <sha1>o07due0ng940e8t3002v4bnfup0t79c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc compare</title>
    <ns>10</ns>
    <id>15263</id>
    <revision>
      <id>84868</id>
      <timestamp>2016-03-22T16:35:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/filesystem/path/compare | compares the lexical representations of two paths lexicographically}}</text>
      <sha1>leywck6d64bybjbjblp1znjzps7poto</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc concat</title>
    <ns>10</ns>
    <id>15253</id>
    <revision>
      <id>84858</id>
      <timestamp>2016-03-22T16:32:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="145">{{dsc mem fun | cpp/filesystem/path/concat | title=concat&lt;br/&gt;operator+{{=}} | concatenates two paths without introducing a directory separator}}</text>
      <sha1>b35tuh80pjdaufk0jeydns25qh8q0fp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc constructor</title>
    <ns>10</ns>
    <id>15248</id>
    <revision>
      <id>84853</id>
      <timestamp>2016-03-22T16:31:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem ctor | cpp/filesystem/path/path | constructs a {{tt|path}}}}</text>
      <sha1>4hkmf3qxv305zgakmpmor12phvjvv81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc destructor</title>
    <ns>10</ns>
    <id>15249</id>
    <revision>
      <id>84854</id>
      <timestamp>2016-03-22T16:31:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem dtor | cpp/filesystem/path/~path | destroys a {{tt|path}} object}}</text>
      <sha1>kxp6rnbk4z0dctcwjrm6l0v2k2yxnr0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc empty</title>
    <ns>10</ns>
    <id>15272</id>
    <revision>
      <id>84877</id>
      <timestamp>2016-03-22T16:38:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/filesystem/path/empty | checks if the path is empty}}</text>
      <sha1>sn2i3dan2d0ag9htprspkg0007x638f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc extension</title>
    <ns>10</ns>
    <id>15271</id>
    <revision>
      <id>84876</id>
      <timestamp>2016-03-22T16:38:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/filesystem/path/extension | returns the file extension path component}}</text>
      <sha1>61q9t3zp0jjabfriry0pe11uy70armc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc filename</title>
    <ns>10</ns>
    <id>15269</id>
    <revision>
      <id>84874</id>
      <timestamp>2016-03-22T16:36:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/filesystem/path/filename | returns the filename path component}}</text>
      <sha1>taba2ldb6uhoa9yz85cms4w1eq6dln6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc generic string</title>
    <ns>10</ns>
    <id>15262</id>
    <revision>
      <id>84867</id>
      <timestamp>2016-03-22T16:35:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="228">{{dsc mem fun | cpp/filesystem/path/generic_string | title=generic_string&lt;br/&gt;generic_wstring&lt;br/&gt;generic_u8string&lt;br/&gt;generic_u16string&lt;br/&gt;generic_u32string | returns the path in generic pathname format converted to a string}}</text>
      <sha1>rn26jxk79qvxl0aw18moyx1jtp1e2fa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc has path</title>
    <ns>10</ns>
    <id>15273</id>
    <revision>
      <id>84878</id>
      <timestamp>2016-03-22T16:38:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="255">{{dsc mem fun | cpp/filesystem/path/has_path | title=has_root_path&lt;br/&gt;has_root_name&lt;br/&gt;has_root_directory&lt;br/&gt;has_relative_path&lt;br/&gt;has_parent_path&lt;br/&gt;has_filename&lt;br/&gt;has_stem&lt;br/&gt;has_extension | checks if the corresponding path element is not empty}}</text>
      <sha1>0ynddetrje0dqsy0v4lezawdea6rra2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc hash value</title>
    <ns>10</ns>
    <id>15310</id>
    <revision>
      <id>84929</id>
      <timestamp>2016-03-22T18:39:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/filesystem/path/hash_value | calculates a hash value for a path object}}</text>
      <sha1>5ztglu3u7ytmb8u5hipsa48qq7ozdn1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc is absrel</title>
    <ns>10</ns>
    <id>15274</id>
    <revision>
      <id>84879</id>
      <timestamp>2016-03-22T16:38:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="155">{{dsc mem fun | cpp/filesystem/path/is_absrel | title=is_absolute&lt;br/&gt;is_relative | checks if {{lc|root_path()}} uniquely identifies file system location}}</text>
      <sha1>3705v6usj9243hdji0k4pzw6flj1a7y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc lexically normal</title>
    <ns>10</ns>
    <id>15542</id>
    <revision>
      <id>86320</id>
      <parentid>86318</parentid>
      <timestamp>2016-06-27T14:39:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="225">{{dsc mem fun | cpp/filesystem/path/lexically_normal | title=lexically_normal&lt;br/&gt;lexically_relative&lt;br/&gt;lexically_proximate |converts path to normal form&lt;br&gt;converts path to relative form&lt;br&gt;converts path to proximate form}}</text>
      <sha1>etql6k7c0vkmhmsd3qzopqlulvwvrqo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc make preferred</title>
    <ns>10</ns>
    <id>15255</id>
    <revision>
      <id>84860</id>
      <timestamp>2016-03-22T16:32:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun | cpp/filesystem/path/make_preferred | converts directory separators to preferred directory separator}}</text>
      <sha1>gulgseyocynmpefiumnlpdodfqne7jl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc native</title>
    <ns>10</ns>
    <id>15260</id>
    <revision>
      <id>84865</id>
      <timestamp>2016-03-22T16:35:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem fun | cpp/filesystem/path/native | title=c_str&lt;br&gt;native&lt;br/&gt;operator string_type | returns the native version of the path }}</text>
      <sha1>fhjl02kniio8a18u6mss0m0ce1req4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc operator cmp</title>
    <ns>10</ns>
    <id>15277</id>
    <revision>
      <id>84882</id>
      <timestamp>2016-03-22T16:39:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="205">{{dsc fun | cpp/filesystem/path/operator_cmp | title=operator{{==}}&lt;br/&gt;operator!{{=}}&lt;br/&gt;operator&amp;lt;&lt;br/&gt;operator&amp;lt;{{=}}&lt;br/&gt;operator&amp;gt;&lt;br/&gt;operator&amp;gt;{{=}} | lexicographically compares two paths}}</text>
      <sha1>p9qalugckq16kylj8mmexpa1tjmsx6k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>15279</id>
    <revision>
      <id>84884</id>
      <timestamp>2016-03-22T16:39:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | cpp/filesystem/path/operator_ltltgtgt | title=operator&amp;lt;&amp;lt;&lt;br/&gt;operator&amp;gt;&amp;gt; | performs stream input and output on a path}}</text>
      <sha1>g065f9dc6qy1kw8ou4o3lm2sv4de148</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc operator/</title>
    <ns>10</ns>
    <id>15278</id>
    <revision>
      <id>84883</id>
      <timestamp>2016-03-22T16:39:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | cpp/filesystem/path/operator_slash | title=operator/ | concatenates two paths with a directory separator}}</text>
      <sha1>a9us1jlj2z05hbi09z1tnjdonwsy6eu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc operator=</title>
    <ns>10</ns>
    <id>15250</id>
    <revision>
      <id>84855</id>
      <timestamp>2016-03-22T16:31:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/filesystem/path/operator{{=}} | assigns another path}}</text>
      <sha1>0pa34qai3p7ar0eslrecfepzi74cft0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc parent path</title>
    <ns>10</ns>
    <id>15268</id>
    <revision>
      <id>84873</id>
      <timestamp>2016-03-22T16:36:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/filesystem/path/parent_path | returns the path of the parent path}}</text>
      <sha1>4xqic5wzem6b9lo5rhm1ank48bu0bm1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc preferred separator</title>
    <ns>10</ns>
    <id>15246</id>
    <revision>
      <id>84851</id>
      <timestamp>2016-03-22T16:29:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="307">{{dsc mem sconst | nolink=true | {{dsc small|constexpr value_type}} preferred_separator | alternative directory separator which may be used in addition to the portable {{c|/}}. On Windows, this is the backslash character {{c|\}}. On POSIX, this is the same forward slash {{c|/}} as the portable separator }}</text>
      <sha1>grb3kswc70hmxm2le67z4obrpk1zm19</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc relative path</title>
    <ns>10</ns>
    <id>15267</id>
    <revision>
      <id>84872</id>
      <timestamp>2016-03-22T16:35:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/filesystem/path/relative_path | returns path relative to the root path}}</text>
      <sha1>lm7anwajrzss2ziodrawtol43s4uhej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc remove filename</title>
    <ns>10</ns>
    <id>15256</id>
    <revision>
      <id>84861</id>
      <timestamp>2016-03-22T16:32:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/filesystem/path/remove_filename | removes filename path component}}</text>
      <sha1>kuwfpz7j3of51ilnpm3ncjt6xr0saly</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc replace extension</title>
    <ns>10</ns>
    <id>15258</id>
    <revision>
      <id>84863</id>
      <timestamp>2016-03-22T16:35:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/filesystem/path/replace_extension | replaces the extension}}</text>
      <sha1>67mdzt2p9ya8xrr4w3tgwn32m07xjtj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc replace filename</title>
    <ns>10</ns>
    <id>15257</id>
    <revision>
      <id>84862</id>
      <timestamp>2016-03-22T16:32:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/filesystem/path/replace_filename | replaces the last path component with another path}}</text>
      <sha1>nbgn2lgcgp7bvh6j411mt7qrax10pad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc root directory</title>
    <ns>10</ns>
    <id>15265</id>
    <revision>
      <id>84870</id>
      <timestamp>2016-03-22T16:35:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/filesystem/path/root_directory | returns the root directory of the path, if present}}</text>
      <sha1>7gvm1tdlf98seydioafr8llkycq5a1g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc root name</title>
    <ns>10</ns>
    <id>15264</id>
    <revision>
      <id>84869</id>
      <timestamp>2016-03-22T16:35:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/filesystem/path/root_name | returns the root-name of the path, if present}}</text>
      <sha1>qw8bdonm49v33ggog9c0qvfioa2mmvg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc root path</title>
    <ns>10</ns>
    <id>15266</id>
    <revision>
      <id>84871</id>
      <timestamp>2016-03-22T16:35:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/filesystem/path/root_path | returns the root path of the path, if present}}</text>
      <sha1>l59uue03v2r3nc67d4zpwlyxj1mmq4f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc stem</title>
    <ns>10</ns>
    <id>15270</id>
    <revision>
      <id>84875</id>
      <timestamp>2016-03-22T16:38:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/filesystem/path/stem | returns the stem path component}}</text>
      <sha1>b1gzgw9jza7jk3f55cu7gt2kgw61z18</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc string</title>
    <ns>10</ns>
    <id>15261</id>
    <revision>
      <id>84866</id>
      <timestamp>2016-03-22T16:35:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="179">{{dsc mem fun | cpp/filesystem/path/string | title=string&lt;br/&gt;wstring&lt;br/&gt;u8string&lt;br/&gt;u16string&lt;br/&gt;u32string | returns the path in native pathname format converted to a string}}</text>
      <sha1>9bd8b653qki6sb687hngqabg5jfvxnp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc swap</title>
    <ns>10</ns>
    <id>15259</id>
    <revision>
      <id>84864</id>
      <timestamp>2016-03-22T16:35:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="60">{{dsc mem fun | cpp/filesystem/path/swap | swaps two paths}}</text>
      <sha1>ekmlmqaxsggxjznorc96rk0efgc314k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc swap2</title>
    <ns>10</ns>
    <id>15276</id>
    <revision>
      <id>84881</id>
      <timestamp>2016-03-22T16:39:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | cpp/filesystem/path/swap2 | title=swap{{dsc small|(std::filesystem::path)}} | swaps two paths}}</text>
      <sha1>lxp9tipyfdqfl9b67y5v97316e6nsee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/dsc u8path</title>
    <ns>10</ns>
    <id>15280</id>
    <revision>
      <id>84885</id>
      <timestamp>2016-03-22T16:39:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc fun | cpp/filesystem/path/u8path | creates a {{tt|path}} from a UTF-8 encoded source | notes={{mark c++17}}}}</text>
      <sha1>drryg204pbkg6ipt7369n6vynjl67ot</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/encoding rules</title>
    <ns>10</ns>
    <id>15286</id>
    <revision>
      <id>87577</id>
      <parentid>84891</parentid>
      <timestamp>2016-09-11T04:22:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/if/is</comment>
      <text xml:space="preserve" bytes="655">* If {{tt|path::value_type}} is {{c|char}}, conversion, if any, is system-dependent. This is the case on typical POSIX systems (such as Linux), where native encoding is UTF-8 and {{tt|string()}} performs no conversion.
* Otherwise, if {{tt|path::value_type}} is {{c|wchar_t}}, conversion, if any, is unspecified. This is the case on Windows, where wchar_t is 16 bit and the native encoding is UTF-16.
* Otherwise, if {{tt|path::value_type}} is {{c|char16_t}}, native encoding is UTF-16 and the conversion method is unspecified.
* Otherwise, if {{tt|path::value_type}} is {{c|char32_t}}, native encoding is UTF-32  and the conversion method is unspecified.</text>
      <sha1>hnehs2bv7dyucfkhtcfdz8itpmqqj7q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/navbar</title>
    <ns>10</ns>
    <id>15243</id>
    <revision>
      <id>84848</id>
      <timestamp>2016-03-22T16:24:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading3 = cpp/filesystem/navbar heading
|content3 = cpp/filesystem/navbar content

|heading4 = cpp/filesystem/path/navbar heading
|content4 = cpp/filesystem/path/navbar content
}}</text>
      <sha1>h8b8leo8m6h6b0d0r8rgc1dyptppjt0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/navbar content</title>
    <ns>10</ns>
    <id>15245</id>
    <revision>
      <id>86325</id>
      <parentid>86314</parentid>
      <timestamp>2016-06-27T14:57:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>lexically_*</comment>
      <text xml:space="preserve" bytes="2352">{{nv begin}}
{{nv h2 | Member functions}}
{{nv col begin}}
{{nv mem ln | cpp/filesystem/path/path}}
{{nv mem ln | cpp/filesystem/path/~path}}
{{nv mem ln | cpp/filesystem/path/operator{{=}}}}
{{nv mem ln | cpp/filesystem/path/assign}}
{{nv mem ln | cpp/filesystem/path/append|append|operator /{{=}}}}
{{nv mem ln | cpp/filesystem/path/concat|concat|operator +{{=}}}}
{{nv mem ln | cpp/filesystem/path/clear}}
{{nv mem ln | cpp/filesystem/path/make_preferred}}
{{nv mem ln | cpp/filesystem/path/remove_filename}}
{{nv mem ln | cpp/filesystem/path/replace_filename}}
{{nv mem ln | cpp/filesystem/path/replace_extension}}
{{nv mem ln | cpp/filesystem/path/swap}}
{{nv mem ln | cpp/filesystem/path/compare}}
{{nv mem ln | cpp/filesystem/path/begin|begin|end}}
{{nv col next}}
{{nv mem ln | cpp/filesystem/path/native|c_str|native|operator string_type}}
{{nv mem ln | cpp/filesystem/path/string|string|u8string|u16string|u32string|wstring}}
{{nv mem ln | cpp/filesystem/path/generic_string|generic_string|generic_u8string|generic_u16string|generic_u32string|generic_wstring}}
{{nv mem ln | cpp/filesystem/path/lexically_normal|lexically_normal|lexically_relative|lexically_proximate}}
{{nv col end}}
{{nv h2|Path decomposition}}
{{nv col begin}}
{{nv mem ln | cpp/filesystem/path/root_name}}
{{nv mem ln | cpp/filesystem/path/root_directory}}
{{nv mem ln | cpp/filesystem/path/root_path}}
{{nv mem ln | cpp/filesystem/path/relative_path}}
{{nv mem ln | cpp/filesystem/path/parent_path}}
{{nv mem ln | cpp/filesystem/path/filename}}
{{nv mem ln | cpp/filesystem/path/stem}}
{{nv mem ln | cpp/filesystem/path/extension}}
{{nv mem ln | cpp/filesystem/path/empty}}
{{nv col next}}
{{nv mem ln | cpp/filesystem/path/has_path|has_root_path|has_root_name|has_root_directory|has_relative_path|has_parent_path|has_filename|has_stem|has_extension}}
{{nv mem ln | cpp/filesystem/path/is_absrel|is_absolute|is_relative}}
{{nv col end}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/filesystem/path/swap2|swap(path)}}
{{nv ln | cpp/filesystem/path/hash_value}}
{{nv ln | cpp/filesystem/path/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;|operator&lt;{{=}}|operator&gt;|operator&gt;{{=}}}}
{{nv ln | cpp/filesystem/path/operator_slash|operator/}}
{{nv ln | cpp/filesystem/path/operator_ltltgtgt|operator&lt;&lt;|operator&gt;&gt;}}
{{nv ln | cpp/filesystem/path/u8path|u8path}}
{{nv end}}</text>
      <sha1>6cyknzeja59jyz7sycafie6p2ww0joa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/navbar heading</title>
    <ns>10</ns>
    <id>15244</id>
    <revision>
      <id>84849</id>
      <timestamp>2016-03-22T16:25:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="51">{{ltt|cpp/filesystem/path | std::filesystem::path}}</text>
      <sha1>cfrzxfh5zwacwavoqjny4o79jgshec1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/string example</title>
    <ns>10</ns>
    <id>15282</id>
    <revision>
      <id>88062</id>
      <parentid>88060</parentid>
      <timestamp>2016-10-25T19:24:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rephrased the comment on the fstream constructor from path to mention LWG2676</comment>
      <text xml:space="preserve" bytes="1536">{{example|code=
#include &lt;cstdio&gt;
#ifdef _MSC_VER
#include &lt;io.h&gt;
#include &lt;fcntl.h&gt;
#else
#include &lt;locale&gt;
#include &lt;clocale&gt;
#endif
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
#ifdef _MSC_VER
    _setmode(_fileno(stderr), _O_WTEXT);
#else
    std::setlocale(LC_ALL, &quot;&quot;);
    std::locale::global(std::locale(&quot;&quot;));
    std::cout.imbue(std::locale());
    std::wcerr.imbue(std::locale());
#endif

    fs::path p = fs::u8path(u8&quot;要らない.txt&quot;);
    std::ofstream(p) &lt;&lt; &quot;File contents&quot;; // Prior to LWG2676 uses operator string_type()
                                         // on MSVC, where string_type is wstring, only
                                         // works due to non-standard extension.
                                         // Post-LWG2676 uses new fstream constructors

    // native string representation can be used with OS APIs
    if (std::FILE* f =
#ifdef _MSC_VER
                _wfopen(p.c_str(), L&quot;r&quot;)
#else
                std::fopen(p.c_str(), &quot;r&quot;)
#endif
        )
    {
        int ch;
        while((ch=fgetc(f))!= EOF) putchar(ch);
        std::fclose(f);
    }

    // multibyte and wide representation can be used for output
    std::cout &lt;&lt; &quot;\nFile name in narrow multibyte encoding: &quot; &lt;&lt; p.string() &lt;&lt; '\n';
    std::wcerr &lt;&lt; &quot;File name in wide encoding: &quot; &lt;&lt; p.wstring() &lt;&lt; '\n';

    fs::remove(p);
}
|output=
File contents
File name in narrow multibyte encoding: 要らない.txt
File name in wide encoding: 要らない.txt
}}</text>
      <sha1>3987x1acxtkw2srho8kez4ke2n65dje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/path/title</title>
    <ns>10</ns>
    <id>15284</id>
    <revision>
      <id>84889</id>
      <timestamp>2016-03-22T16:45:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=filesystem::path::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>ahk454jd1jlwxfrg29ol1usiptf57nx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/permissions example</title>
    <ns>10</ns>
    <id>15189</id>
    <revision>
      <id>87506</id>
      <parentid>84784</parentid>
      <timestamp>2016-08-30T12:37:41Z</timestamp>
      <contributor>
        <username>Jwakely</username>
        <id>3078</id>
      </contributor>
      <comment>Fix example to not rely on invalid implicit conversion to bool</comment>
      <text xml:space="preserve" bytes="1439">{{example|code=
#include &lt;fstream&gt;
#include &lt;bitset&gt;
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

void demo_perms(fs::perms p)
{
    std::cout &lt;&lt; ((p &amp; fs::perms::owner_read) != fs::perms::none ? &quot;r&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::owner_write) != fs::perms::none ? &quot;w&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::owner_exec) != fs::perms::none ? &quot;x&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::group_read) != fs::perms::none ? &quot;r&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::group_write) != fs::perms::none ? &quot;w&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::group_exec) != fs::perms::none ? &quot;x&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::others_read) != fs::perms::none ? &quot;r&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::others_write) != fs::perms::none ? &quot;w&quot; : &quot;-&quot;)
              &lt;&lt; ((p &amp; fs::perms::others_exec) != fs::perms::none ? &quot;x&quot; : &quot;-&quot;)
              &lt;&lt; '\n';
}
int main()
{
    std::ofstream(&quot;test.txt&quot;); // create file

    std::cout &lt;&lt; &quot;Created file with permissions: &quot;;
    demo_perms(fs::status(&quot;test.txt&quot;).permissions());

    fs::permissions(&quot;test.txt&quot;, fs::perms::add_perms {{!}}
                                fs::perms::owner_all {{!}} fs::perms::group_all);

    std::cout &lt;&lt; &quot;After adding o+rwx and g+rwx:  &quot;;
    demo_perms(fs::status(&quot;test.txt&quot;).permissions());

    fs::remove(&quot;test.txt&quot;);
}
|p=true
|output=
Created file with permissions: rw-r--r--
After adding o+rwx and g+wrx:  rwxrwxr--
}}</text>
      <sha1>d0l9nyjy4k6812yu4vyaasi65syjryl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc begin</title>
    <ns>10</ns>
    <id>15348</id>
    <revision>
      <id>85017</id>
      <timestamp>2016-03-23T16:44:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="237">{{dsc fun | cpp/filesystem/recursive_directory_iterator/begin | title=begin{{dsc small|(std::filesystem::recursive_directory_iterator)}}&lt;br&gt;end{{dsc small|(std::filesystem::recursive_directory_iterator)}} | range-based for loop support}}</text>
      <sha1>jhvj34467ewa1om8dw7dvq0qlgn1tvn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc constructor</title>
    <ns>10</ns>
    <id>15221</id>
    <revision>
      <id>84823</id>
      <timestamp>2016-03-22T15:59:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem ctor | cpp/filesystem/recursive_directory_iterator/recursive_directory_iterator | constructs a recursive directory iterator}}</text>
      <sha1>tausey96y6mcg31kawlijh550eesn1x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc depth</title>
    <ns>10</ns>
    <id>15342</id>
    <revision>
      <id>85011</id>
      <timestamp>2016-03-23T16:43:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/depth | returns the current recursion depth}}</text>
      <sha1>06c6heofhtsqcvoutbd4cusl89iyyrs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc destructor</title>
    <ns>10</ns>
    <id>15339</id>
    <revision>
      <id>85008</id>
      <timestamp>2016-03-23T16:42:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="51">{{dsc mem dtor | nolink=true | default destructor}}</text>
      <sha1>pht56euirfx3859r0v6ael8a57qtkx3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc disable recursion pending</title>
    <ns>10</ns>
    <id>15347</id>
    <revision>
      <id>85016</id>
      <timestamp>2016-03-23T16:43:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/disable_recursion_pending | disables recursion until the next increment}}</text>
      <sha1>53m9h66wwf817247lwpqk55sa4yng7t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc increment</title>
    <ns>10</ns>
    <id>15345</id>
    <revision>
      <id>85014</id>
      <timestamp>2016-03-23T16:43:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/increment | title=increment&lt;br/&gt;operator++ | advances to the next entry}}</text>
      <sha1>crjsl7q5wvtectm9z4srykpdk97i21a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc operator*</title>
    <ns>10</ns>
    <id>15340</id>
    <revision>
      <id>85009</id>
      <timestamp>2016-03-23T16:43:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/operator* | title=operator*&lt;br/&gt;operator-&gt; | accesses the pointed-to entry}}</text>
      <sha1>14vezahrnbgwiu9nd0uom9ltv8a2p9n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc operator=</title>
    <ns>10</ns>
    <id>15344</id>
    <revision>
      <id>85013</id>
      <timestamp>2016-03-23T16:43:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/operator{{=}} | assigns contents}}</text>
      <sha1>hqd3fp2ome9wdc8fhqdukqcjnqcnksp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc options</title>
    <ns>10</ns>
    <id>15341</id>
    <revision>
      <id>85010</id>
      <timestamp>2016-03-23T16:43:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/options | returns the currently active options that affect the iteration}}</text>
      <sha1>cgobntujse9873ttg7bi7subq92ciio</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc pop</title>
    <ns>10</ns>
    <id>15346</id>
    <revision>
      <id>85015</id>
      <timestamp>2016-03-23T16:43:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/pop | moves the iterator one level up in the directory hierarchy}}</text>
      <sha1>5k8ejves3vedm43lkkwd94gkxyy8yr9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/dsc recursion pending</title>
    <ns>10</ns>
    <id>15343</id>
    <revision>
      <id>85012</id>
      <timestamp>2016-03-23T16:43:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="148">{{dsc mem fun | cpp/filesystem/recursive_directory_iterator/recursion_pending | checks whether the recursion is disabled for the current directory}}</text>
      <sha1>nzcjedk8v7fkhjvgr1qmxqygxwzboey</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/navbar</title>
    <ns>10</ns>
    <id>15336</id>
    <revision>
      <id>85004</id>
      <timestamp>2016-03-23T16:36:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="301">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/filesystem/navbar heading
|content2 = cpp/filesystem/navbar content

|heading4 = cpp/filesystem/recursive_directory_iterator/navbar heading
|content4 = cpp/filesystem/recursive_directory_iterator/navbar content
}}</text>
      <sha1>4t6j0t55sidg5n90c5dkf4d4oj9g84x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/navbar content</title>
    <ns>10</ns>
    <id>15338</id>
    <revision>
      <id>85007</id>
      <parentid>85006</parentid>
      <timestamp>2016-03-23T16:40:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="976">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/recursive_directory_iterator}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/options}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/depth}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/recursion_pending}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/operator{{=}}}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/increment|increment|operator++}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/pop}}
{{nv mem ln | cpp/filesystem/recursive_directory_iterator/disable_recursion_pending}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/filesystem/recursive_directory_iterator/begin|begin{{small|(std::filesystem::recursive_directory_iterator)}}|end{{small|(std::filesystem::recursive_directory_iterator)}}}}
{{nv end}}</text>
      <sha1>ohttfut13wc6xfjoulg4cp8nba6vx7o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/navbar heading</title>
    <ns>10</ns>
    <id>15337</id>
    <revision>
      <id>85005</id>
      <timestamp>2016-03-23T16:37:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{ltt | cpp/filesystem/recursive_directory_iterator | std::filesystem::recursive_directory_iterator}}</text>
      <sha1>54kzc12djnakw8u6b2p40jb6i1vrpjb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/recursive directory iterator/title</title>
    <ns>10</ns>
    <id>15223</id>
    <revision>
      <id>84825</id>
      <timestamp>2016-03-22T16:00:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="137">&lt;onlyinclude&gt;{{cpp/title | n=filesystem::recursive_directory_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>aftvy74phiie6jkjyfaicusxqvpetct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/space example</title>
    <ns>10</ns>
    <id>15196</id>
    <revision>
      <id>84793</id>
      <timestamp>2016-03-22T14:03:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="653">{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::space_info devi = fs::space(&quot;/dev/null&quot;);
    fs::space_info tmpi = fs::space(&quot;/tmp&quot;);
    
    std::cout &lt;&lt; &quot;.        Capacity       Free      Available\n&quot;
              &lt;&lt; &quot;/dev:   &quot; &lt;&lt; devi.capacity &lt;&lt; &quot;   &quot;
              &lt;&lt; devi.free &lt;&lt; &quot;   &quot; &lt;&lt; devi.available  &lt;&lt; '\n'
              &lt;&lt; &quot;/tmp: &quot; &lt;&lt; tmpi.capacity &lt;&lt; &quot; &quot;
              &lt;&lt; tmpi.free &lt;&lt; &quot; &quot; &lt;&lt; tmpi.available  &lt;&lt; '\n';
}
|p=true
|output=
.         Capacity       Free      Available
/dev:   4175114240   4175110144   4175110144
/tmp: 420651237376 411962273792 390570749952
}}</text>
      <sha1>my3rm4en17ja6rncor0bgk0nwhwb1ny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/status example</title>
    <ns>10</ns>
    <id>15197</id>
    <revision>
      <id>84794</id>
      <timestamp>2016-03-22T14:03:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2126">{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cstring&gt;
#include &lt;filesystem&gt;
#include &lt;unistd.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;sys/un.h&gt;
#include &lt;sys/stat.h&gt;

namespace fs = std::filesystem;

void demo_status(const fs::path&amp; p, fs::file_status s)
{
    std::cout &lt;&lt; p;
    // alternative: switch(s.type()) { case fs::file_type::regular: ...}
    if(fs::is_regular_file(s)) std::cout &lt;&lt; &quot; is a regular file\n&quot;;
    if(fs::is_directory(s)) std::cout &lt;&lt; &quot; is a directory\n&quot;;
    if(fs::is_block_file(s)) std::cout &lt;&lt; &quot; is a block device\n&quot;;
    if(fs::is_character_file(s)) std::cout &lt;&lt; &quot; is a character device\n&quot;;
    if(fs::is_fifo(s)) std::cout &lt;&lt; &quot; is a named IPC pipe\n&quot;;
    if(fs::is_socket(s)) std::cout &lt;&lt; &quot; is a named IPC socket\n&quot;;
    if(fs::is_symlink(s)) std::cout &lt;&lt; &quot; is a symlink\n&quot;;
    if(!fs::exists(s)) std::cout &lt;&lt; &quot; does not exist\n&quot;;
}
int main()
{
    // create files of different kinds
    fs::create_directory(&quot;sandbox&quot;);
    std::ofstream(&quot;sandbox/file&quot;); // create regular file
    fs::create_directory(&quot;sandbox/dir&quot;);
    mkfifo(&quot;sandbox/pipe&quot;, 0644);
    struct sockaddr_un addr;
    addr.sun_family = AF_UNIX;
    std::strcpy(addr.sun_path, &quot;sandbox/sock&quot;);
    int fd = socket(PF_UNIX, SOCK_STREAM, 0);
    bind(fd, (struct sockaddr*)&amp;addr, sizeof addr);
    fs::create_symlink(&quot;file&quot;, &quot;sandbox/symlink&quot;);

    // demo different status accessors
    for(auto it = fs::directory_iterator(&quot;sandbox&quot;); it != fs::directory_iterator(); ++it)
        demo_status(*it, it-&gt;symlink_status()); // use cached status from directory entry
    demo_status(&quot;dev/null&quot;, fs::status(&quot;/dev/null&quot;)); // direct calls to status
    demo_status(&quot;dev/sda&quot;, fs::status(&quot;/dev/sda&quot;));
    demo_status(&quot;sandbox/no&quot;, fs::status(&quot;/sandbox/no&quot;));

    // cleanup
    close(fd);
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/file&quot; is a regular file
&quot;sandbox/dir&quot; is a directory
&quot;sandbox/pipe&quot; is a named IPC pipe
&quot;sandbox/sock&quot; is a named IPC socket
&quot;sandbox/symlink&quot; is a symlink
&quot;dev/null&quot; is a character device
&quot;dev/sda&quot; is a block device
&quot;sandbox/no&quot; does not exist
}}</text>
      <sha1>19psz55kei90dodu4c20exzegs8rthk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/time example</title>
    <ns>10</ns>
    <id>15186</id>
    <revision>
      <id>84780</id>
      <timestamp>2016-03-22T13:49:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="956">{{example|code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;iomanip&gt;
#include &lt;fstream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
using namespace std::chrono_literals;
int main()
{
    fs::path p = fs::current_path() / &quot;example.bin&quot;;
    std::ofstream(p.c_str()).put('a'); // create file
    auto ftime = fs::last_write_time(p);

    std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime); // assuming system_clock
    std::cout &lt;&lt; &quot;File write time is &quot; &lt;&lt; std::asctime(std::localtime(&amp;cftime)) &lt;&lt; '\n';

    fs::last_write_time(p, ftime + 1h); // move file write time 1 hour to the future
    ftime = fs::last_write_time(p); // read back from the filesystem

    cftime = decltype(ftime)::clock::to_time_t(ftime);
    std::cout &lt;&lt; &quot;File write time is &quot; &lt;&lt; std::asctime(std::localtime(&amp;cftime)) &lt;&lt; '\n';
    fs::remove(p);
}
|p=true
|output=
File write time is Tue Mar 31 19:47:04 2015

File write time is Tue Mar 31 20:47:04 2015
}}</text>
      <sha1>deb55s3xn4yyu0bm6stljaewjxiahgu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/filesystem/title</title>
    <ns>10</ns>
    <id>15142</id>
    <revision>
      <id>84697</id>
      <timestamp>2016-03-21T19:54:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">&lt;onlyinclude&gt;{{cpp/title | n=filesystem::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}} | {{{4|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>jow41an4hj712uv8xwrmpk0y7koj1l7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/header/c</title>
    <ns>10</ns>
    <id>9757</id>
    <revision>
      <id>65252</id>
      <parentid>45302</parentid>
      <timestamp>2013-09-05T18:11:47Z</timestamp>
      <contributor>
        <username>Bazzy</username>
        <id>405</id>
      </contributor>
      <minor/>
      <comment>escape &lt;&gt;</comment>
      <text xml:space="preserve" bytes="101">This header was originally in the C standard library as {{ttb|&amp;lt;{{#sub:{{SUBPAGENAME}}|1}}.h&amp;gt;}}.</text>
      <sha1>feo8bs16vqb23fi9d8ay0pl2o21e2lo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/header/navbar</title>
    <ns>10</ns>
    <id>9656</id>
    <revision>
      <id>44980</id>
      <timestamp>2012-12-06T19:00:48Z</timestamp>
      <contributor>
        <username>Bazzy</username>
        <id>405</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="152">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/header/navbar heading
|content2 = cpp/header/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/header/navbar content</title>
    <ns>10</ns>
    <id>9659</id>
    <revision>
      <id>89750</id>
      <parentid>89740</parentid>
      <timestamp>2017-01-23T19:59:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>reorganize, move the C compat headers into their own little corner</comment>
      <text xml:space="preserve" bytes="3653">{{nv begin}}
{{nv h2 | Language Support}}
{{nv col begin}}
{{nv | {{header|cstddef}}}}
{{nv | {{header|limits}}}}
{{nv | {{header|climits}}}}
{{nv col next}}
{{nv | {{header|cfloat}}}}
{{nv | {{header|cstdint}}}}
{{nv | {{header|new}}}}
{{nv col next}}
{{nv | {{header|typeinfo}}}}
{{nv | {{header|exception}}}}
{{nv | {{header|initializer_list}}}}
{{nv col next}}
{{nv | {{header|csignal}}}}
{{nv | {{header|csetjmp}}}}
{{nv | {{header|cstdarg}}}}
{{nv col end}}

{{nv h2 | Diagnostics}}
{{nv col begin}}
{{nv | {{header|stdexcept}}}}
{{nv col next}}
{{nv | {{header|cassert}}}}
{{nv col next}}
{{nv | {{header|cerrno}}}}
{{nv col next}}
{{nv | {{header|system_error}}}}
{{nv col end}}

{{nv h2 | General utilities}}
{{nv col begin}}
{{nv | {{header|utility}}}}
{{nv | {{header|memory}}}}
{{nv | {{header|memory_resource}}}}
{{nv | {{header|scoped_allocator}}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}}
{{nv col next}}
{{nv | {{header|tuple}}}}
{{nv | {{header|optional}}}}
{{nv | {{header|any}}}}
{{nv | {{header|variant}}}}
{{nv col next}}
{{nv | {{header|bitset}}}}
{{nv | {{header|functional}}}}
{{nv | {{header|type_traits}}}}
{{nv | {{header|ratio}}}}
{{nv col next}}
{{nv | {{header|chrono}}}}
{{nv | {{header|ctime}}}}
{{nv | {{header|typeindex}}}}
{{nv | {{header|cstdlib}}}}
{{nv col end}}

{{nv h2 | Strings}}
{{nv col begin}}
{{nv | {{header|string}}}}
{{nv | {{header|string_view}}}}
{{nv col next}}
{{nv | {{header|cctype}}}}
{{nv | {{header|cwctype}}}}
{{nv col next}}
{{nv | {{header|cwchar}}}}
{{nv | {{header|cuchar}}}}
{{nv col next}}
{{nv | {{header|cstring}}}}
{{nv ph}}
{{nv col end}}
{{nv h2 | Localization}}
{{nv col begin}}
{{nv | {{header|locale}}}}
{{nv col next}}
{{nv | {{header|codecvt}}}}
{{nv col next}}
{{nv | {{header|clocale}}}}
{{nv col end}}

{{nv h2 | Containers}}
{{nv col begin}}
{{nv | {{header|array}}}}
{{nv | {{header|deque}}}}
{{nv | {{header|vector}}}}
{{nv col next}}
{{nv | {{header|forward_list}}}}
{{nv | {{header|list}}}}
{{nv ph}}
{{nv col next}}
{{nv | {{header|map}}}}
{{nv | {{header|set}}}}
{{nv | {{header|queue}}}}
{{nv col next}}
{{nv | {{header|unordered_map}}}}
{{nv | {{header|unordered_set}}}}
{{nv | {{header|stack}}}}
{{nv col end}}

{{nv h2 | Iterators}}
{{nv | {{header|iterator}}}}

{{nv h2 | Algorithms}}
{{nv col begin}}
{{nv | {{header|algorithm}}}}
{{nv col next}}
{{nv | {{header|execution_policy}}}}
{{nv col end}}

{{nv h2 | Numerics}}
{{nv col begin}}
{{nv | {{header|complex}}}}
{{nv | {{header|random}}}}
{{nv col next}}
{{nv | {{header|valarray}}}}
{{nv | {{header|numeric}}}}
{{nv col next}}
{{nv | {{header|cfenv}}}}
{{nv | {{header|cmath}}}}
{{nv col end}}

{{nv h2 | Input/Output}}
{{nv col begin}}
{{nv | {{header|iosfwd}}}}
{{nv | {{header|iostream}}}}
{{nv | {{header|ios}}}}
{{nv col next}}
{{nv | {{header|streambuf}}}}
{{nv | {{header|istream}}}}
{{nv | {{header|ostream}}}}
{{nv col next}}
{{nv | {{header|iomanip}}}}
{{nv | {{header|sstream}}}}
{{nv | {{header|fstream}}}}
{{nv col next}}
{{nv | {{header|filesystem}}}}
{{nv | {{header|cstdio}}}}
{{nv | {{header|cinttypes}}}}
{{nv col end}}

{{nv h2 | Regular expressions}}
{{nv | {{header|regex}}}}

{{nv h2 | Thread support}}
{{nv col begin}}
{{nv | {{header|thread}}}}
{{nv | {{header|atomic}}}}
{{nv col next}}
{{nv | {{header|mutex}}}}
{{nv | {{header|shared_mutex}}}}
{{nv col next}}
{{nv | {{header|condition_variable}}}}
{{nv | {{header|future}}}}
{{nv col end}}
{{nv h2 | C compatibility}}
{{nv col begin}}
{{nv | {{header|ciso646}}}}
{{nv | {{header|cstdalign}}}}
{{nv col next}}
{{nv | {{header|cstdbool}}}}
{{nv | {{header|ccomplex}}}}
{{nv col next}}
{{nv | {{header|ctgmath}}}}
{{nv ph}}
{{nv col end}}
{{nv end}}</text>
      <sha1>keujnioyj2ts95nnmfiylxr2gvts5l0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/header/navbar heading</title>
    <ns>10</ns>
    <id>9657</id>
    <revision>
      <id>44981</id>
      <timestamp>2012-12-06T19:02:33Z</timestamp>
      <contributor>
        <username>Bazzy</username>
        <id>405</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="47">[[cpp/header | Standard Library header files ]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/header/title</title>
    <ns>10</ns>
    <id>9655</id>
    <revision>
      <id>44979</id>
      <timestamp>2012-12-06T18:58:38Z</timestamp>
      <contributor>
        <username>Bazzy</username>
        <id>405</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="55">{{title | {{small|Standard library header}} &lt;{{{1}}}&gt;}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/invoke</title>
    <ns>10</ns>
    <id>9409</id>
    <revision>
      <id>39771</id>
      <parentid>39770</parentid>
      <timestamp>2012-09-28T12:34:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1072">Let's refer to {{#ifeq:{{{fun|f}}}|f||{{tt|{{{fun|}}}}} as {{tt|f}} and to }}{{tt|{{{args|{{error|args}}}}}}} as {{tt|t1}}, {{tt|t2}}, ..., {{tt|tN}}, where {{tt|N}} is {{c|sizeof...({{{args|args}}})}}{{{desc|.}}}&lt;div&gt;

* If {{tt|f}} is pointer to a member function of class {{tt|T}}, then it is called. The return value is ignored. Effectively, the following code is executed:
:* {{c|(t1.*f)(t2, ..., tN)}} if the type of {{tt|t1}} is either {{tt|T}}, reference to {{tt|T}} or reference to type derived from {{tt|T}}.
:* {{c|((*t1).*f)(t2, ..., tN)}} otherwise.

* If {{c|1=N == 1}} and {{tt|f}} is pointer to a member data object of a class, then it is accessed. The value of the object is ignored. Effectively, the following code is executed:
:* {{c|t1.*f}} if  and the type of {{tt|t1}} is either {{tt|T}}, reference to {{tt|T}} or reference to type derived from {{tt|T}}.
:* {{c|(*t1).*f}} otherwise.

* {{tt|f}} is called as a pointer to a non-member function in all other cases. The return value is ignored. Effectively, {{c|f(t1, t2, ..., tN)}} is executed.
&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/invoke r</title>
    <ns>10</ns>
    <id>9410</id>
    <revision>
      <id>39772</id>
      <parentid>39769</parentid>
      <timestamp>2012-09-28T12:34:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1069">Let's refer to {{#ifeq:{{{fun|f}}}|f||{{tt|{{{fun|}}}}} as {{tt|f}} and to }}{{tt|{{{args|{{error|args}}}}}}} as {{tt|t1}}, {{tt|t2}}, ..., {{tt|tN}}, where {{tt|N}} is {{c|sizeof...({{{args|args}}})}}{{{desc|.}}}&lt;div&gt;

* If {{tt|f}} is pointer to a member function of class {{tt|T}}, then it is called. The return value of {{tt|f}} is returned. Effectively, the following code is executed:
:* {{c|(t1.*f)(t2, ..., tN)}} if the type of {{tt|t1}} is either {{tt|T}}, reference to {{tt|T}} or reference to type derived from {{tt|T}}.
:* {{c|((*t1).*f)(t2, ..., tN)}} otherwise.

* If {{c|1=N == 1}} and {{tt|f}} is pointer to a member data object of a class, then its value is returned. Effectively, the following code is executed:
:* {{c|t1.*f}} if  and the type of {{tt|t1}} is either {{tt|T}}, reference to {{tt|T}} or reference to type derived from {{tt|T}}.
:* {{c|(*t1).*f}} otherwise.

* {{tt|f}} is called as a pointer to a non-member function in all other cases. The return value of {{tt|f}} is returned. Effectively, {{c|f(t1, t2, ..., tN)}} is executed.
&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io//navbar</title>
    <ns>10</ns>
    <id>1230</id>
    <revision>
      <id>35639</id>
      <parentid>2461</parentid>
      <timestamp>2012-06-15T22:29:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io//sidebar]] to [[Template:cpp/io//navbar]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io//title</title>
    <ns>10</ns>
    <id>1231</id>
    <revision>
      <id>2463</id>
      <parentid>2462</parentid>
      <timestamp>2011-06-06T22:53:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc basic filebuf</title>
    <ns>10</ns>
    <id>5630</id>
    <revision>
      <id>55797</id>
      <parentid>52647</parentid>
      <timestamp>2013-06-01T05:27:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list basic filebuf]] to [[Template:cpp/io/basic filebuf/dsc basic filebuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem ctor | cpp/io/basic_filebuf/basic_filebuf | constructs a basic_filebuf object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc close</title>
    <ns>10</ns>
    <id>5636</id>
    <revision>
      <id>55801</id>
      <parentid>52648</parentid>
      <timestamp>2013-06-01T05:27:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list close]] to [[Template:cpp/io/basic filebuf/dsc close]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/io/basic_filebuf/close | flushes the put area buffer and closes the associated file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc imbue</title>
    <ns>10</ns>
    <id>5645</id>
    <revision>
      <id>55804</id>
      <parentid>52649</parentid>
      <timestamp>2013-06-01T05:27:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list imbue]] to [[Template:cpp/io/basic filebuf/dsc imbue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc prot mem vfun | cpp/io/basic_filebuf/imbue | changes the associated locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc is open</title>
    <ns>10</ns>
    <id>5634</id>
    <revision>
      <id>55810</id>
      <parentid>52650</parentid>
      <timestamp>2013-06-01T05:27:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list is open]] to [[Template:cpp/io/basic filebuf/dsc is open]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/io/basic_filebuf/is_open | checks if the associated file is open}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc open</title>
    <ns>10</ns>
    <id>5635</id>
    <revision>
      <id>55814</id>
      <parentid>52651</parentid>
      <timestamp>2013-06-01T05:27:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list open]] to [[Template:cpp/io/basic filebuf/dsc open]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem fun | cpp/io/basic_filebuf/open | opens a file and configures it as the associated character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc operator=</title>
    <ns>10</ns>
    <id>5631</id>
    <revision>
      <id>55819</id>
      <parentid>52652</parentid>
      <timestamp>2013-06-01T05:27:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list operator=]] to [[Template:cpp/io/basic filebuf/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem fun | cpp/io/basic_filebuf/operator{{=}} | assigns a basic_filebuf object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc overflow</title>
    <ns>10</ns>
    <id>5641</id>
    <revision>
      <id>55825</id>
      <parentid>52653</parentid>
      <timestamp>2013-06-01T05:27:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list overflow]] to [[Template:cpp/io/basic filebuf/dsc overflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc prot mem vfun | cpp/io/basic_filebuf/overflow | writes characters to the associated file from the put area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc pbackfail</title>
    <ns>10</ns>
    <id>5640</id>
    <revision>
      <id>55829</id>
      <parentid>52654</parentid>
      <timestamp>2013-06-01T05:27:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list pbackfail]] to [[Template:cpp/io/basic filebuf/dsc pbackfail]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc prot mem vfun | cpp/io/basic_filebuf/pbackfail | backs out the input sequence to unget a character, not affecting the associated file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc seekoff</title>
    <ns>10</ns>
    <id>5642</id>
    <revision>
      <id>55835</id>
      <parentid>52655</parentid>
      <timestamp>2013-06-01T05:27:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list seekoff]] to [[Template:cpp/io/basic filebuf/dsc seekoff]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc prot mem vfun | cpp/io/basic_filebuf/seekoff | repositions the file position, using relative addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc seekpos</title>
    <ns>10</ns>
    <id>5643</id>
    <revision>
      <id>55839</id>
      <parentid>52656</parentid>
      <timestamp>2013-06-01T05:27:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list seekpos]] to [[Template:cpp/io/basic filebuf/dsc seekpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc prot mem vfun | cpp/io/basic_filebuf/seekpos | repositions the file position, using absolute addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc setbuf</title>
    <ns>10</ns>
    <id>4569</id>
    <revision>
      <id>55844</id>
      <parentid>52657</parentid>
      <timestamp>2013-06-01T05:27:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list setbuf]] to [[Template:cpp/io/basic filebuf/dsc setbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc prot mem vfun | cpp/io/basic_filebuf/setbuf | mem={{{mem|}}}| provides user-supplied buffer or turns this filebuf unbuffered}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc showmanyc</title>
    <ns>10</ns>
    <id>5637</id>
    <revision>
      <id>55848</id>
      <parentid>52658</parentid>
      <timestamp>2013-06-01T05:27:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list showmanyc]] to [[Template:cpp/io/basic filebuf/dsc showmanyc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc prot mem vfun | cpp/io/basic_filebuf/showmanyc | optionally provides the number of characters available for input from the file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc swap</title>
    <ns>10</ns>
    <id>5632</id>
    <revision>
      <id>55852</id>
      <parentid>52659</parentid>
      <timestamp>2013-06-01T05:27:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list swap]] to [[Template:cpp/io/basic filebuf/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/io/basic_filebuf/swap | swaps two basic_filebuf objects | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc swap2</title>
    <ns>10</ns>
    <id>5646</id>
    <revision>
      <id>55855</id>
      <parentid>52660</parentid>
      <timestamp>2013-06-01T05:28:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list swap2]] to [[Template:cpp/io/basic filebuf/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc tfun | cpp/io/basic_filebuf/swap2 | title=std::swap{{dsc small|(std::basic_filebuf)}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc sync</title>
    <ns>10</ns>
    <id>5644</id>
    <revision>
      <id>55859</id>
      <parentid>52661</parentid>
      <timestamp>2013-06-01T05:28:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list sync]] to [[Template:cpp/io/basic filebuf/dsc sync]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc prot mem vfun | cpp/io/basic_filebuf/sync | writes characters to the associated file from the put area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc uflow</title>
    <ns>10</ns>
    <id>5639</id>
    <revision>
      <id>55864</id>
      <parentid>52662</parentid>
      <timestamp>2013-06-01T05:28:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list uflow]] to [[Template:cpp/io/basic filebuf/dsc uflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc prot mem vfun | cpp/io/basic_filebuf/uflow | reads from the associated file and advances the next pointer in the get area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc underflow</title>
    <ns>10</ns>
    <id>5638</id>
    <revision>
      <id>55868</id>
      <parentid>52663</parentid>
      <timestamp>2013-06-01T05:28:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list underflow]] to [[Template:cpp/io/basic filebuf/dsc underflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc prot mem vfun | cpp/io/basic_filebuf/underflow | reads from the associated file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/dsc ~basic filebuf</title>
    <ns>10</ns>
    <id>5633</id>
    <revision>
      <id>55874</id>
      <parentid>52664</parentid>
      <timestamp>2013-06-01T05:28:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic filebuf/dcl list ~basic filebuf]] to [[Template:cpp/io/basic filebuf/dsc ~basic filebuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem vdtor | cpp/io/basic_filebuf/~basic_filebuf | destructs a basic_filebuf object and closes the file if it is open}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/navbar</title>
    <ns>10</ns>
    <id>1232</id>
    <revision>
      <id>47780</id>
      <parentid>39907</parentid>
      <timestamp>2013-05-16T20:26:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="239">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_filebuf/navbar heading
|content3 = cpp/io/basic_filebuf/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/navbar content</title>
    <ns>10</ns>
    <id>4372</id>
    <revision>
      <id>52665</id>
      <parentid>33610</parentid>
      <timestamp>2013-06-01T04:51:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1050">{{nv begin}}
{{nv h1 | Public member functions}}
{{nv mem ln | cpp/io/basic_filebuf/basic_filebuf}}
{{nv mem ln | cpp/io/basic_filebuf/~basic_filebuf}}
{{nv mem ln | cpp/io/basic_filebuf/operator{{=}}|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_filebuf/swap|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_filebuf/is_open}}
{{nv mem ln | cpp/io/basic_filebuf/open}}
{{nv mem ln | cpp/io/basic_filebuf/close}}

{{nv h1 | Protected member functions}}
{{nv mem ln | cpp/io/basic_filebuf/showmanyc}}
{{nv mem ln | cpp/io/basic_filebuf/underflow}}
{{nv mem ln | cpp/io/basic_filebuf/uflow}}
{{nv mem ln | cpp/io/basic_filebuf/pbackfail}}
{{nv mem ln | cpp/io/basic_filebuf/overflow}}
{{nv mem ln | cpp/io/basic_filebuf/setbuf}}
{{nv mem ln | cpp/io/basic_filebuf/seekoff}}
{{nv mem ln | cpp/io/basic_filebuf/seekpos}}
{{nv mem ln | cpp/io/basic_filebuf/sync}}
{{nv mem ln | cpp/io/basic_filebuf/imbue}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/io/basic_filebuf/swap2|swap{{dsc small|(std::basic_filebuf)}}|notes={{mark c++11}}}}

{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/navbar heading</title>
    <ns>10</ns>
    <id>2452</id>
    <revision>
      <id>48093</id>
      <parentid>35641</parentid>
      <timestamp>2013-05-18T18:09:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/io/basic_filebuf|std::basic_filebuf}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic filebuf/title</title>
    <ns>10</ns>
    <id>4566</id>
    <revision>
      <id>16109</id>
      <timestamp>2011-12-21T06:24:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=basic_filebuf::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/close</title>
    <ns>10</ns>
    <id>1233</id>
    <revision>
      <id>81310</id>
      <parentid>81256</parentid>
      <timestamp>2015-10-15T15:46:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>usage note, inspired by http://stackoverflow.com/questions/32833632</comment>
      <text xml:space="preserve" bytes="1375">{{cpp/io/{{{1|}}}/title | close}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |
void close();
}}
{{dcl end}}

Closes the associated file.

Effectively calls {{ltt|cpp/io/basic_filebuf/close|rdbuf()-&gt;close()}}. If an error occurs during operation, {{c|setstate(failbit)}} is called. 

===Parameters===
(none)

===Return value===
(none)

===Notes===
This function is called by the destructor of {{{1|}}} when the stream object goes out of scope and is not usually invoked directly.

===Example===
{{example
 | code=
{{#switch: {{{1|}}}
| basic_fstream= 

#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::fstream f1(&quot;example1&quot;, std::ios::out),
                 f2(&quot;example2&quot;, std::ios::out),
                 f3(&quot;example3&quot;, std::ios::out);

    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; f1.is_open() &lt;&lt; '\n'
              &lt;&lt; f2.is_open() &lt;&lt; '\n'
              &lt;&lt; f3.is_open() &lt;&lt; '\n';

    f1.close();
    f2.close();

    std::cout &lt;&lt; f1.is_open() &lt;&lt; '\n'
              &lt;&lt; f2.is_open() &lt;&lt; '\n'
              &lt;&lt; f3.is_open() &lt;&lt; '\n';
}
}}
 | p = true
 | output=

{{#switch: {{{1|}}}

| basic_fstream= 
 
true
true
true
false
false
true

}}

}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc is_open |{{{1|}}}}}
{{dsc inc | cpp/io/basic_fstream/dsc open |{{{1|}}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc close}}
{{dsc end}}</text>
      <sha1>njp8pwjp9iz0fhhpwd3a7d567dik97o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/constructor</title>
    <ns>10</ns>
    <id>1234</id>
    <revision>
      <id>90748</id>
      <parentid>90711</parentid>
      <timestamp>2017-03-09T05:25:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2676</comment>
      <text xml:space="preserve" bytes="4160">{{cpp/io/{{{1|}}}/title | {{{1}}}}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 |
{{{1}}}();
}}
{{dcl | num=2 | 1=
explicit {{{1}}}( const char* filename,
{{space as|{{{1}}}}}  std::ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=3 | since=c++17 | 1=
explicit {{{1}}}( const std::filesystem::path::value_type* filename,
{{space as|{{{1}}}}}  std::ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=4 | since=c++11 | 1=
explicit {{{1}}}( const std::string&amp; filename,
{{space as|{{{1}}}}}  std::ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=5 | since=c++17 | 1=
explicit {{{1}}}( const std::filesystem::path&amp; filename,
{{space as|{{{1}}}}}  std::ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=6 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other );
}}
{{dcl | num=7 | since=c++11 |1=
{{{1}}}( const {{{1}}}&amp; rhs) = delete;
}}
{{dcl end}}

Constructs new file stream.

@1@ Default constructor: constructs a stream that is not associated with a file: default-constructs the {{lc|std::basic_filebuf}} and constructs the base with the pointer to this default-constructed {{lc|std::basic_filebuf}} member.
@2-3@ First, performs the same steps as the default constructor, then associates the stream with a file by calling {{#switch: {{{1|}}}
 | basic_ifstream={{c|rdbuf()-&gt;open(filename, mode {{!}} std::ios_base::in)}}
 | basic_ofstream={{c|rdbuf()-&gt;open(filename, mode {{!}} std::ios_base::out)}}
 | basic_fstream={{c|rdbuf()-&gt;open(filename, mode)}}
}} (see {{lc|std::basic_filebuf::open}} for the details on the effects of that call). If the {{c|open()}} call returns a null pointer, sets {{c|setstate(failbit)}}. {{rev inl|since=c++17|Overload {{v|3}} is only provided if {{c|std::filesystem::path::value_type}} is not {{c|char}}.}}
@4-5@ Same as {{c|{{{1}}}(filename.c_str(), mode)}}. 
@6@ Move constructor. First, move-constructs the base class from {{tt|other}} (which does not affect the {{tt|rdbuf()}} pointer), then move-constructs the {{lc|std::basic_filebuf}} member, then calls {{c|this-&gt;set_rdbuf()}} to install the new {{tt|basic_filebuf}} as the {{c|rdbuf()}} pointer in the base class.
@7@ The copy-constructor is deleted: this class is not copyable.

===Parameters===
{{par begin}}
{{par | filename | the name of the file to be opened}}
{{par | mode | specifies stream open mode. It is bitmask type, the following constants are defined: 
{{cpp/io/ios_base/openmode consts}} }}
{{par | other | another file stream to use as source}}
{{par end}}

===Example===
{{example
 | std=cxx11
 | code=
#include &lt;fstream&gt;
#include &lt;utility&gt;
#include &lt;string&gt;
int main()
{
    {{#switch: {{{1|}}}
 | basic_ifstream=std::ifstream f0;
    std::ifstream f1(&quot;test.bin&quot;, std::ios::binary);
    std::string name = &quot;example.txt&quot;;
    std::ifstream f2(name);
    std::ifstream f3(std::move(f1));
 | basic_ofstream=std::ofstream f0;
    std::ofstream f1(&quot;test.bin&quot;, std::ios::binary);
    std::string name = &quot;example.txt&quot;;
    std::ofstream f2(name);
    std::ofstream f3(std::move(f1));
 | basic_fstream=std::fstream f0;
    std::fstream f1(&quot;test.bin&quot;, std::ios::binary);
    std::string name = &quot;example.txt&quot;;
    std::fstream f2(name);
    std::fstream f3(std::move(f1));
}}
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc open |{{{1|}}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc open}}
{{dsc inc | cpp/io/basic_ios/dsc set_rdbuf}}
{{#switch: {{{1|}}}
 | basic_ifstream={{dsc inc | cpp/io/basic_istream/dsc constructor}}
 | basic_ofstream={{dsc inc | cpp/io/basic_ostream/dsc constructor}}
 | basic_fstream={{dsc inc | cpp/io/basic_iostream/dsc constructor}}
}}
{{dsc end}}</text>
      <sha1>6kkixqpmvab3wx4cccy5l71k13q4plm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc close</title>
    <ns>10</ns>
    <id>1235</id>
    <revision>
      <id>55878</id>
      <parentid>52668</parentid>
      <timestamp>2013-06-01T05:28:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list close]] to [[Template:cpp/io/basic fstream/dsc close]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc mem fun | cpp/io/{{{1|}}}/close | closes the associated file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc constructor</title>
    <ns>10</ns>
    <id>1236</id>
    <revision>
      <id>55883</id>
      <parentid>52669</parentid>
      <timestamp>2013-06-01T05:28:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list constructor]] to [[Template:cpp/io/basic fstream/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem ctor | cpp/io/{{{1|}}}/{{{1|}}} | constructs the file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc destructor</title>
    <ns>10</ns>
    <id>4378</id>
    <revision>
      <id>55887</id>
      <parentid>52670</parentid>
      <timestamp>2013-06-01T05:28:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list destructor]] to [[Template:cpp/io/basic fstream/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem vdtor | nolink=true | notes={{mark implicit}} | destructs the {{{1}}} and the associated buffer, closes the file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc is open</title>
    <ns>10</ns>
    <id>1237</id>
    <revision>
      <id>55889</id>
      <parentid>52671</parentid>
      <timestamp>2013-06-01T05:28:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list is open]] to [[Template:cpp/io/basic fstream/dsc is open]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/io/{{{1|}}}/is_open | checks if the stream has an associated file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc open</title>
    <ns>10</ns>
    <id>1238</id>
    <revision>
      <id>55892</id>
      <parentid>52672</parentid>
      <timestamp>2013-06-01T05:28:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list open]] to [[Template:cpp/io/basic fstream/dsc open]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/io/{{{1|}}}/open | opens a file and associates it with the stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc operator=</title>
    <ns>10</ns>
    <id>1239</id>
    <revision>
      <id>55894</id>
      <parentid>52673</parentid>
      <timestamp>2013-06-01T05:28:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list operator=]] to [[Template:cpp/io/basic fstream/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/io/{{{1|}}}/operator{{=}} | moves the file stream | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc rdbuf</title>
    <ns>10</ns>
    <id>1240</id>
    <revision>
      <id>55896</id>
      <parentid>52674</parentid>
      <timestamp>2013-06-01T05:28:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list rdbuf]] to [[Template:cpp/io/basic fstream/dsc rdbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/io/{{{1|}}}/rdbuf | returns the underlying raw file device object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc swap</title>
    <ns>10</ns>
    <id>1241</id>
    <revision>
      <id>55901</id>
      <parentid>52675</parentid>
      <timestamp>2013-06-01T05:28:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list swap]] to [[Template:cpp/io/basic fstream/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/io/{{{1|}}}/swap | swaps two file streams | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/dsc swap2</title>
    <ns>10</ns>
    <id>4379</id>
    <revision>
      <id>55903</id>
      <parentid>52676</parentid>
      <timestamp>2013-06-01T05:28:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/dcl list swap2]] to [[Template:cpp/io/basic fstream/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc tfun | cpp/io/{{{1}}}/swap2 | title=std::swap{{dsc small|(std::{{{1}}})}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/is open</title>
    <ns>10</ns>
    <id>1242</id>
    <revision>
      <id>61927</id>
      <parentid>61910</parentid>
      <timestamp>2013-06-09T17:04:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="1598">{{cpp/io/{{{1|}}}/title | is_open}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
bool is_open();
}}
{{dcl | since=c++11 |
bool is_open() const;
}}
{{dcl rev end}}
{{dcl end}}

Checks if the file stream has an associated file.

Effectively calls {{ltt|cpp/io/basic_filebuf/is_open|rdbuf()-&gt;is_open()}}. 

===Parameters===
(none)

===Return value===
{{c|true}} if the file stream has an associated file, {{c|false}} otherwise

===Example===
{{example
 | code=
  {{#switch: {{{1|}}}

 | basic_fstream= 
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::string filename = &quot;some_file&quot;;

    std::fstream fs(filename, std::ios::in);

    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;fs.is_open() = &quot; &lt;&lt; fs.is_open() &lt;&lt; '\n';

    if(!fs.is_open())
    {
       fs.clear();
       fs.open(filename, std::ios::out);
       std::cout &lt;&lt; &quot;fs.is_open() = &quot; &lt;&lt; fs.is_open() &lt;&lt; '\n';
    }
}
  
| basic_ifstream=
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;
//this file is called main.cpp

bool file_exists(const std::string&amp; str)
{
   std::ifstream fs(str);
   return fs.is_open();
}

int main()
{
  std::boolalpha(std::cout);
  std::cout &lt;&lt; file_exists(&quot;main.cpp&quot;)  &lt;&lt; '\n'
            &lt;&lt; file_exists(&quot;strange_file&quot;) &lt;&lt; '\n';
} 

  }}


 | p = true
 | output= 
{{#switch: {{{1|}}}

| basic_fstream=
fs.is_open() = false
fs.is_open() = true


 | basic_ifstream=
true
false

}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc open |{{{1|}}}}}
{{dsc inc | cpp/io/basic_fstream/dsc close |{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/navbar</title>
    <ns>10</ns>
    <id>1246</id>
    <revision>
      <id>39908</id>
      <parentid>35642</parentid>
      <timestamp>2012-09-28T20:09:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="241">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_fstream/navbar heading
|content3 = cpp/io/basic_fstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/navbar content</title>
    <ns>10</ns>
    <id>1247</id>
    <revision>
      <id>52678</id>
      <parentid>35643</parentid>
      <timestamp>2013-06-01T04:51:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="579">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_fstream/basic_fstream}}
{{nv mem ln | cpp/io/basic_fstream/operator{{=}}|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_fstream/swap|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_fstream/rdbuf}}

{{nv h2 | File operations }}
{{nv mem ln | cpp/io/basic_fstream/is_open}}
{{nv mem ln | cpp/io/basic_fstream/open}}
{{nv mem ln | cpp/io/basic_fstream/close}}

{{nv h2 | Non-member functions }}
{{nv mem ln | cpp/io/basic_fstream/swap2|swap{{dsc small|(std::basic_fstream)}}|notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/navbar heading</title>
    <ns>10</ns>
    <id>1248</id>
    <revision>
      <id>35644</id>
      <parentid>2497</parentid>
      <timestamp>2012-06-15T22:29:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic fstream/sidebar heading]] to [[Template:cpp/io/basic fstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="51">{{ltt | cpp/io/basic_fstream | std::basic_fstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/open</title>
    <ns>10</ns>
    <id>1243</id>
    <revision>
      <id>90747</id>
      <parentid>77000</parentid>
      <timestamp>2017-03-09T05:21:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2676</comment>
      <text xml:space="preserve" bytes="3052">{{cpp/io/{{{1|}}}/title | open}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
void open( const char *filename,
           ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=2 | since=c++17 | 1=
void open( const std::filesystem::path::value_type *filename,
           ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=3 | since=c++11 | 1=
void open( const std::string &amp;filename,                                  
           ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=4 | since=c++17 | 1=
void open( const std::filesystem::path &amp;filename,                                  
           ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_ifstream=ios_base::in );
 | basic_ofstream=ios_base::out );
 | basic_fstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl end}}

Opens and associates the file with name {{tt|filename}} with the file stream.

Calls {{c|setstate(failbit)}} on failure.
{{rev begin}}
{{rev|since=c++11|Calls {{c|clear()}} on success.}}
{{rev end}}

@1-2@ Effectively calls {{#switch: {{{1|}}}
 | basic_ifstream={{c|rdbuf()-&gt;open(filename, mode {{!}} ios_base::in)}}.
 | basic_ofstream={{c|rdbuf()-&gt;open(filename, mode {{!}} ios_base::out)}}.
 | basic_fstream={{c|rdbuf()-&gt;open(filename, mode)}}.
}} (see {{lc|std::basic_filebuf::open}} for the details on the effects of that call). {{rev inl|since=c++17|Overload {{v|2}} is only provided if {{c|std::filesystem::path::value_type}} is not {{c|char}}.}}
@3-4@ Effectively calls {{v|1-2}} as if by {{c|open(filename.c_str(), mode)}}. 

===Parameters===
{{par begin}}
{{par | filename | the name of the file to be opened}}
{{par | mode | specifies stream open mode. It is bitmask type, the following constants are defined: 
{{cpp/io/ios_base/openmode consts}} }}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
{{#switch: {{{1|}}}

| basic_fstream=

#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::string filename = &quot;example.123&quot;;

    std::fstream fs;

    fs.open(filename);

    if(!fs.is_open())
    {
       fs.clear();
       fs.open(filename, std::ios::out); //Create file.
       fs.close();
       fs.open(filename);
    }

    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;fs.is_open() = &quot; &lt;&lt; fs.is_open() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;fs.good() = &quot; &lt;&lt; fs.good() &lt;&lt; '\n';
}

}}

 | p = true
 | output=
{{#switch: {{{1|}}}

basic_fstream=

fs.is_open() = true
fs.good() = true

}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc is_open |{{{1|}}}}}
{{dsc inc | cpp/io/basic_fstream/dsc close |{{{1|}}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc open}}
{{dsc end}}</text>
      <sha1>eq25w86tgci3fvfmb76tg5ca4eesueo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/operator=</title>
    <ns>10</ns>
    <id>1244</id>
    <revision>
      <id>91245</id>
      <parentid>86870</parentid>
      <timestamp>2017-03-29T16:23:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+note that move-assignment of the base swaps state</comment>
      <text xml:space="preserve" bytes="1082">{{cpp/io/{{{1|}}}/title | operator{{=}}}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
{{{1}}}&amp; operator{{=}}( {{{1}}}&amp;&amp; other );
}}
{{dcl end}}

Move assigns the file stream {{tt|other}} to {{tt|*this}}, effectively move-assigning both the {{lc|std::{{#switch:{{{1|}}}|basic_ifstream=basic_istream|basic_ofstream=basic_ostream|basic_fstream=basic_iostream}}}} base class and the associated {{lc|std::basic_filebuf}}.

{{tt|other}} is left with no associated file. Note that the base class move assignment swaps all stream state variables (except for {{c|rdbuf}}) between {{c|*this}} and {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | file stream to move. }}
{{par end}}

===Return value===
{{c|*this}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc swap |{{{1|}}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/{{#switch:{{{1|}}}|basic_ifstream=basic_istream|basic_ofstream=basic_ostream|basic_fstream=basic_iostream}}/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>8od0klpv1a9uutow2o1f4tsqmt5p1ug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/rdbuf</title>
    <ns>10</ns>
    <id>1245</id>
    <revision>
      <id>76900</id>
      <parentid>62258</parentid>
      <timestamp>2015-03-05T11:30:39Z</timestamp>
      <contributor>
        <ip>83.167.48.2</ip>
      </contributor>
      <comment>linkify basic_filebuf</comment>
      <text xml:space="preserve" bytes="357">{{cpp/io/{{{1|}}}/title | rdbuf}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
std::basic_filebuf&lt;CharT, Traits&gt;* rdbuf() const;
}}
{{dcl end}}

Returns pointer to the underlying raw file device object. 

===Parameters===
(none)

===Return value===
Pointer to the underlying raw file device.

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1>0h1qvuxb5ypirg6qu599d9susne0dj8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/swap</title>
    <ns>10</ns>
    <id>1249</id>
    <revision>
      <id>67199</id>
      <parentid>67188</parentid>
      <timestamp>2014-01-26T16:17:01Z</timestamp>
      <contributor>
        <ip>59.151.95.131</ip>
      </contributor>
      <comment>correcting</comment>
      <text xml:space="preserve" bytes="808">{{cpp/io/{{{1|}}}/title | swap}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void swap( {{{1}}}&amp; other );
}}
{{dcl end}}

Exchanges the state of the stream with those of {{tt|other}}. 

This is done by calling {{#switch: {{{1|}}} | basic_ifstream={{c|basic_istream&lt;CharT, Traits&gt;::swap(other)}} | basic_ofstream={{c|basic_ostream&lt;CharT, Traits&gt;::swap(other)}} | basic_fstream={{c|basic_iostream&lt;CharT, Traits&gt;::swap(other)}}
}} and {{c|rdbuf()-&gt;swap(other.rdbuf())}}.  

===Parameters===
{{par begin}}
{{par | other | stream to exchange the state with}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc operator{{=}} |{{{1|}}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap}}
{{dsc end}}</text>
      <sha1>gpr4udt2bhjuibbjibxkygeezu3qldr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/swap2</title>
    <ns>10</ns>
    <id>5491</id>
    <revision>
      <id>80230</id>
      <parentid>60873</parentid>
      <timestamp>2015-08-01T12:15:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fixed template params</comment>
      <text xml:space="preserve" bytes="676">{{cpp/title | swap&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class CharT, class Traits &gt;
void swap( {{{1}}}&lt;CharT,Traits&gt; &amp;lhs, {{{1}}}&lt;CharT,Traits&gt; &amp;rhs );
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{c|std::{{{1}}}}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | streams whose state to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc swap | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>oc1luovg69szelr0ui6i2fwf43w0rxr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic fstream/title</title>
    <ns>10</ns>
    <id>1250</id>
    <revision>
      <id>2501</id>
      <parentid>2500</parentid>
      <timestamp>2011-06-06T22:53:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=basic_fstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ifstream/navbar</title>
    <ns>10</ns>
    <id>1251</id>
    <revision>
      <id>39909</id>
      <parentid>35645</parentid>
      <timestamp>2012-09-28T20:09:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_ifstream/navbar heading
|content3 = cpp/io/basic_ifstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ifstream/navbar content</title>
    <ns>10</ns>
    <id>1252</id>
    <revision>
      <id>52683</id>
      <parentid>35646</parentid>
      <timestamp>2013-06-01T04:51:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="589">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_ifstream/basic_ifstream}}
{{nv mem ln | cpp/io/basic_ifstream/operator{{=}}|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_ifstream/swap|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_ifstream/rdbuf}}

{{nv h2 | File operations }}
{{nv mem ln | cpp/io/basic_ifstream/is_open}}
{{nv mem ln | cpp/io/basic_ifstream/open}}
{{nv mem ln | cpp/io/basic_ifstream/close}}

{{nv h2 | Non-member functions }}
{{nv mem ln | cpp/io/basic_ifstream/swap2|swap{{dsc small|(std::basic_ifstream)}}|notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ifstream/navbar heading</title>
    <ns>10</ns>
    <id>1253</id>
    <revision>
      <id>35647</id>
      <parentid>2507</parentid>
      <timestamp>2012-06-15T22:29:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ifstream/sidebar heading]] to [[Template:cpp/io/basic ifstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="53">{{ltt | cpp/io/basic_ifstream | std::basic_ifstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ifstream/title</title>
    <ns>10</ns>
    <id>1254</id>
    <revision>
      <id>2509</id>
      <parentid>2508</parentid>
      <timestamp>2011-06-06T22:53:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=basic_ifstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc bad</title>
    <ns>10</ns>
    <id>1255</id>
    <revision>
      <id>55907</id>
      <parentid>52684</parentid>
      <timestamp>2013-06-01T05:28:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list bad]] to [[Template:cpp/io/basic ios/dsc bad]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/io/basic_ios/bad | checks if a non-recoverable error has occurred}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc clear</title>
    <ns>10</ns>
    <id>1256</id>
    <revision>
      <id>55910</id>
      <parentid>52685</parentid>
      <timestamp>2013-06-01T05:28:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list clear]] to [[Template:cpp/io/basic ios/dsc clear]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/io/basic_ios/clear | clears error and eof flags}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc constructor</title>
    <ns>10</ns>
    <id>1257</id>
    <revision>
      <id>55914</id>
      <parentid>52686</parentid>
      <timestamp>2013-06-01T05:28:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list constructor]] to [[Template:cpp/io/basic ios/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem ctor | cpp/io/basic_ios/basic_ios | constructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc copyfmt</title>
    <ns>10</ns>
    <id>1258</id>
    <revision>
      <id>55920</id>
      <parentid>52687</parentid>
      <timestamp>2013-06-01T05:28:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list copyfmt]] to [[Template:cpp/io/basic ios/dsc copyfmt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/io/basic_ios/copyfmt | copies formatting information}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc destructor</title>
    <ns>10</ns>
    <id>1259</id>
    <revision>
      <id>55922</id>
      <parentid>52688</parentid>
      <timestamp>2013-06-01T05:28:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list destructor]] to [[Template:cpp/io/basic ios/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem vdtor | cpp/io/basic_ios/~basic_ios | destructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc eof</title>
    <ns>10</ns>
    <id>1260</id>
    <revision>
      <id>55924</id>
      <parentid>52689</parentid>
      <timestamp>2013-06-01T05:28:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list eof]] to [[Template:cpp/io/basic ios/dsc eof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/io/basic_ios/eof | checks if end-of-file has been reached}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc exceptions</title>
    <ns>10</ns>
    <id>1261</id>
    <revision>
      <id>55927</id>
      <parentid>52690</parentid>
      <timestamp>2013-06-01T05:28:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list exceptions]] to [[Template:cpp/io/basic ios/dsc exceptions]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/io/basic_ios/exceptions | manages exception mask}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc fail</title>
    <ns>10</ns>
    <id>1262</id>
    <revision>
      <id>90262</id>
      <parentid>55929</parentid>
      <timestamp>2017-02-17T13:58:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>this checks both failbit and badbit, so can't say &quot;recoverable error&quot;</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/io/basic_ios/fail | checks if an error has occurred}}</text>
      <sha1>bma4haocrxuldoodvikr5bywdjno3xd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc fill</title>
    <ns>10</ns>
    <id>1263</id>
    <revision>
      <id>55934</id>
      <parentid>52692</parentid>
      <timestamp>2013-06-01T05:28:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list fill]] to [[Template:cpp/io/basic ios/dsc fill]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/io/basic_ios/fill | mem={{{mem|}}} | manages the fill character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc good</title>
    <ns>10</ns>
    <id>1264</id>
    <revision>
      <id>55938</id>
      <parentid>52693</parentid>
      <timestamp>2013-06-01T05:28:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list good]] to [[Template:cpp/io/basic ios/dsc good]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/io/basic_ios/good | checks if no error has occurred i.e. I/O operations are available}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc imbue</title>
    <ns>10</ns>
    <id>1265</id>
    <revision>
      <id>55942</id>
      <parentid>52694</parentid>
      <timestamp>2013-06-01T05:28:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list imbue]] to [[Template:cpp/io/basic ios/dsc imbue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">{{dsc mem fun | cpp/io/basic_ios/imbue | sets the locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc init</title>
    <ns>10</ns>
    <id>8764</id>
    <revision>
      <id>55947</id>
      <parentid>52695</parentid>
      <timestamp>2013-06-01T05:28:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list init]] to [[Template:cpp/io/basic ios/dsc init]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc prot mem fun | cpp/io/basic_ios/init | initializes a default-constructed {{lc|std::basic_ios}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc move</title>
    <ns>10</ns>
    <id>8765</id>
    <revision>
      <id>69917</id>
      <parentid>55951</parentid>
      <timestamp>2014-05-01T14:23:01Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>mark c++11</comment>
      <text xml:space="preserve" bytes="134">{{dsc prot mem fun | cpp/io/basic_ios/move | moves from another {{lc|std::basic_ios}} except for {{tt|rdbuf}} |notes={{mark c++11}} }}</text>
      <sha1>39wy98s7npbvvlszta2rzhkq6v5wswt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc narrow</title>
    <ns>10</ns>
    <id>1266</id>
    <revision>
      <id>55955</id>
      <parentid>52697</parentid>
      <timestamp>2013-06-01T05:29:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list narrow]] to [[Template:cpp/io/basic ios/dsc narrow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">{{dsc mem fun | cpp/io/basic_ios/narrow | narrows characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc operator bool</title>
    <ns>10</ns>
    <id>1268</id>
    <revision>
      <id>61909</id>
      <parentid>61847</parentid>
      <timestamp>2013-06-09T16:44:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Undo revision 61847 by [[Special:Contributions/P12|P12]] ([[User talk:P12|talk]])</comment>
      <text xml:space="preserve" bytes="198">{{dsc mem fun | cpp/io/basic_ios/operator bool | title=operator void*&lt;br&gt;operator bool|checks if no error has occurred (synonym of {{c|!fail()}})|notes={{mark until c++11}}&lt;br&gt;{{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc operator!</title>
    <ns>10</ns>
    <id>1267</id>
    <revision>
      <id>69918</id>
      <parentid>64378</parentid>
      <timestamp>2014-05-01T14:25:54Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>missing ')'</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/io/basic_ios/operator! | checks if an error has occurred (synonym of {{lc|std::basic_ios::fail|fail()}}) }}</text>
      <sha1>3dq18r93zoj8jgwgbik8e59ogfr78sx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc rdbuf</title>
    <ns>10</ns>
    <id>1269</id>
    <revision>
      <id>55962</id>
      <parentid>52700</parentid>
      <timestamp>2013-06-01T05:29:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list rdbuf]] to [[Template:cpp/io/basic ios/dsc rdbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/io/basic_ios/rdbuf | manages associated stream buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc rdstate</title>
    <ns>10</ns>
    <id>1270</id>
    <revision>
      <id>55965</id>
      <parentid>52701</parentid>
      <timestamp>2013-06-01T05:29:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list rdstate]] to [[Template:cpp/io/basic ios/dsc rdstate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc mem fun | cpp/io/basic_ios/rdstate | returns state flags}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc set rdbuf</title>
    <ns>10</ns>
    <id>5530</id>
    <revision>
      <id>55967</id>
      <parentid>52702</parentid>
      <timestamp>2013-06-01T05:29:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list set rdbuf]] to [[Template:cpp/io/basic ios/dsc set rdbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc prot mem fun | cpp/io/basic_ios/set_rdbuf | replaces the {{tt|rdbuf}} without clearing its error state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc setstate</title>
    <ns>10</ns>
    <id>1271</id>
    <revision>
      <id>55970</id>
      <parentid>52703</parentid>
      <timestamp>2013-06-01T05:29:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list setstate]] to [[Template:cpp/io/basic ios/dsc setstate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">{{dsc mem fun | cpp/io/basic_ios/setstate | sets state flags}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc swap</title>
    <ns>10</ns>
    <id>8766</id>
    <revision>
      <id>69916</id>
      <parentid>55972</parentid>
      <timestamp>2014-05-01T14:20:38Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>mark c++11</comment>
      <text xml:space="preserve" bytes="134">{{dsc prot mem fun | cpp/io/basic_ios/swap | swaps with another {{lc|std::basic_ios}} except for {{tt|rdbuf}} |notes={{mark c++11}} }}</text>
      <sha1>ihpoflfdm2hupqsiowf2wyi5e2qca99</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc tie</title>
    <ns>10</ns>
    <id>1272</id>
    <revision>
      <id>55974</id>
      <parentid>52705</parentid>
      <timestamp>2013-06-01T05:29:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list tie]] to [[Template:cpp/io/basic ios/dsc tie]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">{{dsc mem fun | cpp/io/basic_ios/tie | manages tied stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/dsc widen</title>
    <ns>10</ns>
    <id>1273</id>
    <revision>
      <id>55976</id>
      <parentid>52706</parentid>
      <timestamp>2013-06-01T05:29:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/dcl list widen]] to [[Template:cpp/io/basic ios/dsc widen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">{{dsc mem fun | cpp/io/basic_ios/widen | widens characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/example1</title>
    <ns>10</ns>
    <id>9449</id>
    <revision>
      <id>40432</id>
      <parentid>40164</parentid>
      <timestamp>2012-10-14T09:49:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:template cpp/io/basic ios/example1]] to [[Template:cpp/io/basic ios/example1]]</comment>
      <text xml:space="preserve" bytes="741">{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
int main()
{
    std::ifstream file(&quot;test.txt&quot;);
    if(!file)  // operator! is used here
    {  
        std::cout &lt;&lt; &quot;File opening failed\n&quot;;
        return EXIT_FAILURE;
    }

    // typical C++ I/O loop uses the return value of the I/O function
    // as the loop controlling condition, operator bool() is used here
    for(int n; file &gt;&gt; n; ) {
       std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';

    if (file.bad())
        std::cout &lt;&lt; &quot;I/O error while reading\n&quot;;
    else if (file.eof())
        std::cout &lt;&lt; &quot;End of file reached successfully\n&quot;;
    else if (file.fail())
        std::cout &lt;&lt; &quot;Non-integer data encountered\n&quot;;
}
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/inherit</title>
    <ns>10</ns>
    <id>1274</id>
    <revision>
      <id>72869</id>
      <parentid>60874</parentid>
      <timestamp>2014-10-03T13:05:50Z</timestamp>
      <contributor>
        <username>Aitjcize</username>
        <id>3457</id>
      </contributor>
      <text xml:space="preserve" bytes="1235">{{inherited | [[cpp/io/basic_ios | {{small|std::}}basic_ios]] |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{c|CharT}}}}
{{dsc | {{tt|traits_type}} | {{c|Traits}}}}
{{dsc | {{tt|int_type}} | {{c|Traits::int_type}}}}
{{dsc | {{tt|pos_type}} | {{c|Traits::pos_type}}}}
{{dsc | {{tt|off_type}} | {{c|Traits::off_type}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc h2 | State functions}}
{{dsc inc | cpp/io/basic_ios/dsc good}}
{{dsc inc | cpp/io/basic_ios/dsc eof}}
{{dsc inc | cpp/io/basic_ios/dsc fail}}
{{dsc inc | cpp/io/basic_ios/dsc bad}}
{{dsc inc | cpp/io/basic_ios/dsc operator!}}
{{dsc inc | cpp/io/basic_ios/dsc operator bool}}
{{dsc inc | cpp/io/basic_ios/dsc rdstate}}
{{dsc inc | cpp/io/basic_ios/dsc setstate}}
{{dsc inc | cpp/io/basic_ios/dsc clear}}

{{dsc h2 | Formatting}}
{{dsc inc | cpp/io/basic_ios/dsc copyfmt}}
{{dsc inc | cpp/io/basic_ios/dsc fill}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/io/basic_ios/dsc exceptions}}
{{dsc inc | cpp/io/basic_ios/dsc imbue}}
{{dsc inc | cpp/io/basic_ios/dsc rdbuf}}
{{dsc inc | cpp/io/basic_ios/dsc tie}}
{{dsc inc | cpp/io/basic_ios/dsc narrow}}
{{dsc inc | cpp/io/basic_ios/dsc widen}}
{{dsc end}}
}}</text>
      <sha1>1xk1akvambu82ls3cl13wo2sdc7iiuw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/iostate accessors</title>
    <ns>10</ns>
    <id>9452</id>
    <revision>
      <id>65166</id>
      <parentid>64383</parentid>
      <timestamp>2013-09-03T19:50:35Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added an explanatory sentence</comment>
      <text xml:space="preserve" bytes="1821">The following table shows the value of {{tt|basic_ios}} accessors ({{ltt|cpp/io/basic_ios/good|good()}}, {{ltt|cpp/io/basic_ios/fail|fail()}}, etc.) for all possible combinations of {{ltt|cpp/io/ios_base/iostate|ios_base::iostate}} flags:

{| class=&quot;wikitable&quot; style=&quot;font-size:85%; text-align:center;&quot;
|-
| colspan=&quot;3&quot; | {{ltt|cpp/io/ios_base/iostate|ios_base::iostate}} flags
| colspan=&quot;6&quot; | {{tt|basic_ios}} accessors
|-
| eofbit
| failbit
| badbit

| {{ltt|cpp/io/basic_ios/good|good()}}
| {{ltt|cpp/io/basic_ios/fail|fail()}}
| {{ltt|cpp/io/basic_ios/bad|bad()}}
| {{ltt|cpp/io/basic_ios/eof|eof()}}
| {{ltt|cpp/io/basic_ios/operator bool|operator bool}}
| {{ltt|cpp/io/basic_ios/operator!|operator!}}
|-
| {{no|false}}
| {{no|false}}
| {{no|false}}

| {{yes|true}}
| {{no|false}}
| {{no|false}}
| {{no|false}}
| {{yes|true}}
| {{no|false}}
|-
| {{no|false}}
| {{no|false}}
| {{yes|true}}

| {{no|false}}
| {{yes|true}}
| {{yes|true}}
| {{no|false}}
| {{no|false}}
| {{yes|true}}
|-
| {{no|false}}
| {{yes|true}}
| {{no|false}}

| {{no|false}}
| {{yes|true}}
| {{no|false}}
| {{no|false}}
| {{no|false}}
| {{yes|true}}
|-
| {{no|false}}
| {{yes|true}}
| {{yes|true}}

| {{no|false}}
| {{yes|true}}
| {{yes|true}}
| {{no|false}}
| {{no|false}}
| {{yes|true}}
|-
| {{yes|true}}
| {{no|false}}
| {{no|false}}

| {{no|false}}
| {{no|false}}
| {{no|false}}
| {{yes|true}}
| {{yes|true}}
| {{no|false}}
|-
| {{yes|true}}
| {{no|false}}
| {{yes|true}}

| {{no|false}}
| {{yes|true}}
| {{yes|true}}
| {{yes|true}}
| {{no|false}}
| {{yes|true}}
|-
| {{yes|true}}
| {{yes|true}}
| {{no|false}}

| {{no|false}}
| {{yes|true}}
| {{no|false}}
| {{yes|true}}
| {{no|false}}
| {{yes|true}}
|-
| {{yes|true}}
| {{yes|true}}
| {{yes|true}}

| {{no|false}}
| {{yes|true}}
| {{yes|true}}
| {{yes|true}}
| {{no|false}}
| {{yes|true}}
|}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/navbar</title>
    <ns>10</ns>
    <id>1275</id>
    <revision>
      <id>39910</id>
      <parentid>35936</parentid>
      <timestamp>2012-09-28T20:09:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="231">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_ios/navbar heading
|content3 = cpp/io/basic_ios/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/navbar content</title>
    <ns>10</ns>
    <id>1276</id>
    <revision>
      <id>52708</id>
      <parentid>35648</parentid>
      <timestamp>2013-06-01T04:52:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1095">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_ios/basic_ios}}
{{nv mem ln | cpp/io/basic_ios/~basic_ios}}

{{nv h2 | State functions}}
{{nv mem ln | cpp/io/basic_ios/good}}
{{nv mem ln | cpp/io/basic_ios/eof}}
{{nv mem ln | cpp/io/basic_ios/fail}}
{{nv mem ln | cpp/io/basic_ios/bad}}
{{nv mem ln | cpp/io/basic_ios/operator!}}
{{nv mem ln | cpp/io/basic_ios/operator bool}}
{{nv mem ln | cpp/io/basic_ios/rdstate}}
{{nv mem ln | cpp/io/basic_ios/setstate}}
{{nv mem ln | cpp/io/basic_ios/clear}}

{{nv h2 | Formatting}}
{{nv mem ln | cpp/io/basic_ios/copyfmt}}
{{nv mem ln | cpp/io/basic_ios/fill}}

{{nv h2 | Miscellaneous}}
{{nv mem ln | cpp/io/basic_ios/exceptions}}
{{nv mem ln | cpp/io/basic_ios/imbue}}
{{nv mem ln | cpp/io/basic_ios/rdbuf}}
{{nv mem ln | cpp/io/basic_ios/tie}}
{{nv mem ln | cpp/io/basic_ios/narrow}}
{{nv mem ln | cpp/io/basic_ios/widen}}

{{nv h2 | Protected member functions}}
{{nv mem ln | cpp/io/basic_ios/init}}
{{nv mem ln | cpp/io/basic_ios/move}}
{{nv mem ln | cpp/io/basic_ios/swap}}
{{nv mem ln | cpp/io/basic_ios/set_rdbuf}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/navbar heading</title>
    <ns>10</ns>
    <id>1277</id>
    <revision>
      <id>35649</id>
      <parentid>2555</parentid>
      <timestamp>2012-06-15T22:29:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ios/sidebar heading]] to [[Template:cpp/io/basic ios/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="43">{{ltt | cpp/io/basic_ios | std::basic_ios}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ios/title</title>
    <ns>10</ns>
    <id>1278</id>
    <revision>
      <id>2557</id>
      <parentid>2556</parentid>
      <timestamp>2011-06-06T22:53:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=basic_ios::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/dsc constructor</title>
    <ns>10</ns>
    <id>2547</id>
    <revision>
      <id>55978</id>
      <parentid>52709</parentid>
      <timestamp>2013-06-01T05:29:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic iostream/dcl list constructor]] to [[Template:cpp/io/basic iostream/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem ctor | cpp/io/basic_iostream/basic_iostream | constructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/dsc destructor</title>
    <ns>10</ns>
    <id>2548</id>
    <revision>
      <id>55981</id>
      <parentid>52710</parentid>
      <timestamp>2013-06-01T05:29:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic iostream/dcl list destructor]] to [[Template:cpp/io/basic iostream/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem vdtor | cpp/io/basic_iostream/~basic_iostream | destructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/dsc operator=</title>
    <ns>10</ns>
    <id>8770</id>
    <revision>
      <id>86871</id>
      <parentid>55986</parentid>
      <timestamp>2016-07-13T21:37:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>protected</comment>
      <text xml:space="preserve" bytes="127">{{dsc prot mem fun | cpp/io/basic_iostream/operator{{=}} | move-assigns another {{tt|basic_iostream}} | notes={{mark c++11}} }}</text>
      <sha1>asbyj70yf23rtb44t2rtpsoyo0setvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/dsc swap</title>
    <ns>10</ns>
    <id>8771</id>
    <revision>
      <id>55988</id>
      <parentid>52712</parentid>
      <timestamp>2013-06-01T05:29:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic iostream/dcl list swap]] to [[Template:cpp/io/basic iostream/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/io/basic_iostream/swap | exchanges the state with another {{tt|basic_iostream}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/navbar</title>
    <ns>10</ns>
    <id>1279</id>
    <revision>
      <id>39911</id>
      <parentid>35650</parentid>
      <timestamp>2012-09-28T20:09:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_iostream/navbar heading
|content3 = cpp/io/basic_iostream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/navbar content</title>
    <ns>10</ns>
    <id>2549</id>
    <revision>
      <id>52713</id>
      <parentid>37059</parentid>
      <timestamp>2013-06-01T04:52:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="294">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_iostream/basic_iostream}}
{{nv mem ln | cpp/io/basic_iostream/~basic_iostream}}

{{nv h1 | Protected member functions}}
{{nv mem ln | cpp/io/basic_iostream/operator{{=}}}}
{{nv mem ln | cpp/io/basic_iostream/swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/navbar heading</title>
    <ns>10</ns>
    <id>1280</id>
    <revision>
      <id>35652</id>
      <parentid>2561</parentid>
      <timestamp>2012-06-15T22:29:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic iostream/sidebar heading]] to [[Template:cpp/io/basic iostream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="53">{{ltt | cpp/io/basic_iostream | std::basic_iostream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic iostream/title</title>
    <ns>10</ns>
    <id>8769</id>
    <revision>
      <id>37014</id>
      <timestamp>2012-07-03T12:31:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=basic_iostream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc constructor</title>
    <ns>10</ns>
    <id>2399</id>
    <revision>
      <id>55990</id>
      <parentid>52714</parentid>
      <timestamp>2013-06-01T05:29:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list constructor]] to [[Template:cpp/io/basic istream/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem ctor | cpp/io/basic_istream/basic_istream | constructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc destructor</title>
    <ns>10</ns>
    <id>2398</id>
    <revision>
      <id>55993</id>
      <parentid>52715</parentid>
      <timestamp>2013-06-01T05:29:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list destructor]] to [[Template:cpp/io/basic istream/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem vdtor | cpp/io/basic_istream/~basic_istream | destructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc gcount</title>
    <ns>10</ns>
    <id>1282</id>
    <revision>
      <id>55995</id>
      <parentid>52716</parentid>
      <timestamp>2013-06-01T05:29:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list gcount]] to [[Template:cpp/io/basic istream/dsc gcount]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/io/basic_istream/gcount | returns number of characters extracted by last unformatted input operation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc get</title>
    <ns>10</ns>
    <id>1283</id>
    <revision>
      <id>56000</id>
      <parentid>52717</parentid>
      <timestamp>2013-06-01T05:29:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list get]] to [[Template:cpp/io/basic istream/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">{{dsc mem fun |cpp/io/basic_istream/get | extracts characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc getline</title>
    <ns>10</ns>
    <id>1284</id>
    <revision>
      <id>56004</id>
      <parentid>52718</parentid>
      <timestamp>2013-06-01T05:29:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list getline]] to [[Template:cpp/io/basic istream/dsc getline]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/io/basic_istream/getline | extracts characters until the given character is found}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc ignore</title>
    <ns>10</ns>
    <id>1285</id>
    <revision>
      <id>56010</id>
      <parentid>52719</parentid>
      <timestamp>2013-06-01T05:29:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list ignore]] to [[Template:cpp/io/basic istream/dsc ignore]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem fun | cpp/io/basic_istream/ignore | mem={{{mem|}}} | extracts and discards characters until the given character is found}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc operator gtgt</title>
    <ns>10</ns>
    <id>1286</id>
    <revision>
      <id>56017</id>
      <parentid>52721</parentid>
      <timestamp>2013-06-01T05:29:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list operator gtgt]] to [[Template:cpp/io/basic istream/dsc operator gtgt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/io/basic_istream/operator_gtgt | title=operator&gt;&gt; | extracts formatted data}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc operator gtgt2</title>
    <ns>10</ns>
    <id>3763</id>
    <revision>
      <id>56022</id>
      <parentid>52722</parentid>
      <timestamp>2013-06-01T05:29:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list operator gtgt2]] to [[Template:cpp/io/basic istream/dsc operator gtgt2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="146">{{dsc tfun | cpp/io/basic_istream/operator_gtgt2 | title=operator&gt;&gt;{{dsc small|(std::basic_istream)}} | extracts characters and character arrays}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc operator=</title>
    <ns>10</ns>
    <id>4027</id>
    <revision>
      <id>86872</id>
      <parentid>56014</parentid>
      <timestamp>2016-07-13T21:38:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>how does operator= &quot;replace the buffer object?</comment>
      <text xml:space="preserve" bytes="152">{{dsc prot mem fun | cpp/io/basic_istream/operator{{=}} | move-assigns from another {{tt|basic_istream}} | notes={{mark c++11}} | notes={{mark c++11}}}}</text>
      <sha1>rpiyvgg73njxgdviafgh8z3p2n64cri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc peek</title>
    <ns>10</ns>
    <id>1287</id>
    <revision>
      <id>56024</id>
      <parentid>52723</parentid>
      <timestamp>2013-06-01T05:29:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list peek]] to [[Template:cpp/io/basic istream/dsc peek]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/io/basic_istream/peek | reads the next character without extracting it}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc putback</title>
    <ns>10</ns>
    <id>1288</id>
    <revision>
      <id>56026</id>
      <parentid>52724</parentid>
      <timestamp>2013-06-01T05:29:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list putback]] to [[Template:cpp/io/basic istream/dsc putback]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/io/basic_istream/putback | puts character into input stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc read</title>
    <ns>10</ns>
    <id>1289</id>
    <revision>
      <id>56029</id>
      <parentid>52725</parentid>
      <timestamp>2013-06-01T05:29:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list read]] to [[Template:cpp/io/basic istream/dsc read]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/io/basic_istream/read | extracts blocks of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc readsome</title>
    <ns>10</ns>
    <id>1290</id>
    <revision>
      <id>56031</id>
      <parentid>52726</parentid>
      <timestamp>2013-06-01T05:29:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list readsome]] to [[Template:cpp/io/basic istream/dsc readsome]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/io/basic_istream/readsome | extracts already available blocks of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc seekg</title>
    <ns>10</ns>
    <id>1291</id>
    <revision>
      <id>56034</id>
      <parentid>52727</parentid>
      <timestamp>2013-06-01T05:29:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list seekg]] to [[Template:cpp/io/basic istream/dsc seekg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/io/basic_istream/seekg | sets the input position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc sentry</title>
    <ns>10</ns>
    <id>1292</id>
    <revision>
      <id>56036</id>
      <parentid>52728</parentid>
      <timestamp>2013-06-01T05:29:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list sentry]] to [[Template:cpp/io/basic istream/dsc sentry]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem class | cpp/io/basic_istream/sentry | implements basic logic for preparation of the stream for input operations}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc swap</title>
    <ns>10</ns>
    <id>4026</id>
    <revision>
      <id>56041</id>
      <parentid>52729</parentid>
      <timestamp>2013-06-01T05:30:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list swap]] to [[Template:cpp/io/basic istream/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc prot mem fun | cpp/io/basic_istream/swap | swaps stream objects, except for the associated buffer|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc sync</title>
    <ns>10</ns>
    <id>1293</id>
    <revision>
      <id>56045</id>
      <parentid>52730</parentid>
      <timestamp>2013-06-01T05:30:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list sync]] to [[Template:cpp/io/basic istream/dsc sync]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun | cpp/io/basic_istream/sync | mem={{{mem|}}} | synchronizes with the underlying storage device}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc tellg</title>
    <ns>10</ns>
    <id>1294</id>
    <revision>
      <id>56050</id>
      <parentid>52731</parentid>
      <timestamp>2013-06-01T05:30:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list tellg]] to [[Template:cpp/io/basic istream/dsc tellg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem fun | cpp/io/basic_istream/tellg | returns the input position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/dsc unget</title>
    <ns>10</ns>
    <id>1295</id>
    <revision>
      <id>56056</id>
      <parentid>52732</parentid>
      <timestamp>2013-06-01T05:30:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/dcl list unget]] to [[Template:cpp/io/basic istream/dsc unget]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/io/basic_istream/unget | unextracts a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/inherit</title>
    <ns>10</ns>
    <id>1297</id>
    <revision>
      <id>82636</id>
      <parentid>60875</parentid>
      <timestamp>2015-12-27T17:02:44Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="929">{{inherited | [[cpp/io/basic_istream | {{small|std::}}basic_istream]] |
===Member functions===
{{dsc begin}}
{{dsc h2 | Formatted input}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}

{{dsc h2 | Unformatted input}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc peek}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc inc | cpp/io/basic_istream/dsc putback}}
{{dsc inc | cpp/io/basic_istream/dsc getline}}
{{dsc inc | cpp/io/basic_istream/dsc ignore}}
{{dsc inc | cpp/io/basic_istream/dsc read}}
{{dsc inc | cpp/io/basic_istream/dsc readsome}}
{{dsc inc | cpp/io/basic_istream/dsc gcount}}

{{dsc h2 | Positioning}}
{{dsc inc | cpp/io/basic_istream/dsc tellg}}
{{dsc inc | cpp/io/basic_istream/dsc seekg}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/io/basic_istream/dsc sync}}
{{dsc end}}

===Member classes===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc sentry}}
{{dsc end}}
}}</text>
      <sha1>0laee4tri1niypmlpb9jjrzgg2mgklf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/navbar</title>
    <ns>10</ns>
    <id>1303</id>
    <revision>
      <id>39912</id>
      <parentid>35656</parentid>
      <timestamp>2012-09-28T20:09:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="241">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_istream/navbar heading
|content3 = cpp/io/basic_istream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/navbar content</title>
    <ns>10</ns>
    <id>1304</id>
    <revision>
      <id>52734</id>
      <parentid>35659</parentid>
      <timestamp>2013-06-01T04:52:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1251">{{nv begin}}
{{nv h1 | Global objects}}
{{nv ln | cpp/io/cin| cin | wcin}}

{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_istream/basic_istream}}
{{nv mem ln | cpp/io/basic_istream/~basic_istream}}
{{nv mem ln | cpp/io/basic_istream/operator{{=}}|notes={{mark c++11}}}}

{{nv h2 | Formatted input}}
{{nv mem ln | cpp/io/basic_istream/operator_gtgt | operator&gt;&gt;}}

{{nv h2 | Unformatted input}}
{{nv mem ln | cpp/io/basic_istream/get}}
{{nv mem ln | cpp/io/basic_istream/peek}}
{{nv mem ln | cpp/io/basic_istream/unget}}
{{nv mem ln | cpp/io/basic_istream/putback}}
{{nv mem ln | cpp/io/basic_istream/getline}}
{{nv mem ln | cpp/io/basic_istream/ignore}}
{{nv mem ln | cpp/io/basic_istream/read}}
{{nv mem ln | cpp/io/basic_istream/readsome}}
{{nv mem ln | cpp/io/basic_istream/gcount}}

{{nv h2 | Positioning}}
{{nv mem ln | cpp/io/basic_istream/tellg}}
{{nv mem ln | cpp/io/basic_istream/seekg}}

{{nv h2 | Miscellaneous}}
{{nv mem ln | cpp/io/basic_istream/sync}}
{{nv mem ln | cpp/io/basic_istream/swap|notes={{mark c++11}}}}

{{nv h1 | Member classes}}
{{nv mem ln | cpp/io/basic_istream/sentry}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/io/basic_istream/operator_gtgt2 | operator&gt;&gt;{{dsc small|(std::basic_istream)}}}}

{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/navbar heading</title>
    <ns>10</ns>
    <id>1305</id>
    <revision>
      <id>35662</id>
      <parentid>2611</parentid>
      <timestamp>2012-06-15T22:30:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/sidebar heading]] to [[Template:cpp/io/basic istream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="51">{{ltt | cpp/io/basic_istream | std::basic_istream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/sentry/dsc constructor</title>
    <ns>10</ns>
    <id>1298</id>
    <revision>
      <id>56060</id>
      <parentid>52735</parentid>
      <timestamp>2013-06-01T05:30:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/sentry/dcl list constructor]] to [[Template:cpp/io/basic istream/sentry/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem ctor | cpp/io/basic_istream/sentry | inlinemem=true | constructs the sentry object. All the preparation tasks are done here }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/sentry/dsc destructor</title>
    <ns>10</ns>
    <id>10138</id>
    <revision>
      <id>56065</id>
      <parentid>52736</parentid>
      <timestamp>2013-06-01T05:30:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/sentry/dcl list destructor]] to [[Template:cpp/io/basic istream/sentry/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc mem dtor | cpp/io/basic_istream/sentry | inlinemem=true | finalizes the stream object after formatted input or after exception, if necessary}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/sentry/dsc operator bool</title>
    <ns>10</ns>
    <id>1299</id>
    <revision>
      <id>56070</id>
      <parentid>52737</parentid>
      <timestamp>2013-06-01T05:30:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istream/sentry/dcl list operator bool]] to [[Template:cpp/io/basic istream/sentry/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="147">{{dsc mem fun | cpp/io/basic_istream/sentry | title=operator bool| inlinemem=true | checks if the preparation of the stream object was successful}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/sentry/title</title>
    <ns>10</ns>
    <id>10139</id>
    <revision>
      <id>48407</id>
      <timestamp>2013-05-29T15:21:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">&lt;onlyinclude&gt;{{cpp/io/basic_istream/title | n=sentry::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istream/title</title>
    <ns>10</ns>
    <id>1306</id>
    <revision>
      <id>2613</id>
      <parentid>2612</parentid>
      <timestamp>2011-06-06T22:53:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=basic_istream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istringstream/navbar</title>
    <ns>10</ns>
    <id>1307</id>
    <revision>
      <id>39914</id>
      <parentid>35663</parentid>
      <timestamp>2012-09-28T20:09:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_istringstream/navbar heading
|content3 = cpp/io/basic_istringstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istringstream/navbar content</title>
    <ns>10</ns>
    <id>1308</id>
    <revision>
      <id>52739</id>
      <parentid>35664</parentid>
      <timestamp>2013-06-01T04:52:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="348">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_istringstream/basic_istringstream}}
{{nv mem ln | cpp/io/basic_istringstream/operator{{=}}}}
{{nv mem ln | cpp/io/basic_istringstream/swap}}
{{nv mem ln | cpp/io/basic_istringstream/rdbuf}}

{{nv h2 | String operations }}
{{nv mem ln | cpp/io/basic_istringstream/str}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istringstream/navbar heading</title>
    <ns>10</ns>
    <id>1309</id>
    <revision>
      <id>35665</id>
      <parentid>2619</parentid>
      <timestamp>2012-06-15T22:30:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic istringstream/sidebar heading]] to [[Template:cpp/io/basic istringstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="63">{{ltt | cpp/io/basic_istringstream | std::basic_istringstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic istringstream/title</title>
    <ns>10</ns>
    <id>1310</id>
    <revision>
      <id>2621</id>
      <parentid>2620</parentid>
      <timestamp>2011-06-06T22:53:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=basic_istringstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ofstream/navbar</title>
    <ns>10</ns>
    <id>1311</id>
    <revision>
      <id>39915</id>
      <parentid>35666</parentid>
      <timestamp>2012-09-28T20:09:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_ofstream/navbar heading
|content3 = cpp/io/basic_ofstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ofstream/navbar content</title>
    <ns>10</ns>
    <id>1312</id>
    <revision>
      <id>52740</id>
      <parentid>35667</parentid>
      <timestamp>2013-06-01T04:52:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="589">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_ofstream/basic_ofstream}}
{{nv mem ln | cpp/io/basic_ofstream/operator{{=}}|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_ofstream/swap|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_ofstream/rdbuf}}

{{nv h2 | File operations }}
{{nv mem ln | cpp/io/basic_ofstream/is_open}}
{{nv mem ln | cpp/io/basic_ofstream/open}}
{{nv mem ln | cpp/io/basic_ofstream/close}}

{{nv h2 | Non-member functions }}
{{nv mem ln | cpp/io/basic_ofstream/swap2|swap{{dsc small|(std::basic_ofstream)}}|notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ofstream/navbar heading</title>
    <ns>10</ns>
    <id>1313</id>
    <revision>
      <id>35668</id>
      <parentid>2627</parentid>
      <timestamp>2012-06-15T22:30:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ofstream/sidebar heading]] to [[Template:cpp/io/basic ofstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="53">{{ltt | cpp/io/basic_ofstream | std::basic_ofstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ofstream/title</title>
    <ns>10</ns>
    <id>1314</id>
    <revision>
      <id>2629</id>
      <parentid>2628</parentid>
      <timestamp>2011-06-06T22:53:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=basic_ofstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc constructor</title>
    <ns>10</ns>
    <id>2400</id>
    <revision>
      <id>56073</id>
      <parentid>52741</parentid>
      <timestamp>2013-06-01T05:30:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list constructor]] to [[Template:cpp/io/basic ostream/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem ctor | cpp/io/basic_ostream/basic_ostream | constructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc destructor</title>
    <ns>10</ns>
    <id>2401</id>
    <revision>
      <id>56076</id>
      <parentid>52742</parentid>
      <timestamp>2013-06-01T05:30:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list destructor]] to [[Template:cpp/io/basic ostream/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem vdtor | cpp/io/basic_ostream/~basic_ostream | destructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc flush</title>
    <ns>10</ns>
    <id>1316</id>
    <revision>
      <id>56079</id>
      <parentid>52743</parentid>
      <timestamp>2013-06-01T05:30:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list flush]] to [[Template:cpp/io/basic ostream/dsc flush]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/io/basic_ostream/flush | mem={{{mem|}}} | synchronizes with the underlying storage device}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc operator ltlt</title>
    <ns>10</ns>
    <id>1317</id>
    <revision>
      <id>56084</id>
      <parentid>52745</parentid>
      <timestamp>2013-06-01T05:30:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list operator ltlt]] to [[Template:cpp/io/basic ostream/dsc operator ltlt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem fun | cpp/io/basic_ostream/operator_ltlt | title=operator&lt;&lt; | inserts formatted data}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc operator ltlt2</title>
    <ns>10</ns>
    <id>3764</id>
    <revision>
      <id>72875</id>
      <parentid>56086</parentid>
      <timestamp>2014-10-03T14:05:14Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>dsc fun =&gt; dsc tfun</comment>
      <text xml:space="preserve" bytes="128">{{dsc tfun | cpp/io/basic_ostream/operator_ltlt2 | title=operator&lt;&lt;{{dsc small|(std::basic_ostream)}} | inserts character data}}</text>
      <sha1>e76bqg8j2anxkb5i4gp91n0uca5opxs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc operator=</title>
    <ns>10</ns>
    <id>4030</id>
    <revision>
      <id>86873</id>
      <parentid>56081</parentid>
      <timestamp>2016-07-13T21:38:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>ditto</comment>
      <text xml:space="preserve" bytes="129">{{dsc prot mem fun | cpp/io/basic_ostream/operator{{=}} | move-assigns from another {{tt|basic_ostream}} | notes={{mark c++11}}}}</text>
      <sha1>clpd5yymrmoamxyi2w43mg84mmtsyzl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc put</title>
    <ns>10</ns>
    <id>1318</id>
    <revision>
      <id>56089</id>
      <parentid>52747</parentid>
      <timestamp>2013-06-01T05:30:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list put]] to [[Template:cpp/io/basic ostream/dsc put]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc mem fun | cpp/io/basic_ostream/put | inserts a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc seekp</title>
    <ns>10</ns>
    <id>1319</id>
    <revision>
      <id>56091</id>
      <parentid>52748</parentid>
      <timestamp>2013-06-01T05:30:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list seekp]] to [[Template:cpp/io/basic ostream/dsc seekp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun | cpp/io/basic_ostream/seekp | mem={{{mem|}}} | sets the output position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc sentry</title>
    <ns>10</ns>
    <id>1320</id>
    <revision>
      <id>56094</id>
      <parentid>52749</parentid>
      <timestamp>2013-06-01T05:30:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list sentry]] to [[Template:cpp/io/basic ostream/dsc sentry]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem class | cpp/io/basic_ostream/sentry | implements basic logic for preparation of the stream for output operations}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc swap</title>
    <ns>10</ns>
    <id>4031</id>
    <revision>
      <id>56097</id>
      <parentid>52750</parentid>
      <timestamp>2013-06-01T05:30:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list swap]] to [[Template:cpp/io/basic ostream/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc prot mem fun | cpp/io/basic_ostream/swap | swaps stream objects, except for the associated buffer|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc tellp</title>
    <ns>10</ns>
    <id>1321</id>
    <revision>
      <id>56099</id>
      <parentid>52751</parentid>
      <timestamp>2013-06-01T05:30:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list tellp]] to [[Template:cpp/io/basic ostream/dsc tellp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/io/basic_ostream/tellp | mem={{{mem|}}} | returns the output position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/dsc write</title>
    <ns>10</ns>
    <id>1322</id>
    <revision>
      <id>56101</id>
      <parentid>52752</parentid>
      <timestamp>2013-06-01T05:30:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/dcl list write]] to [[Template:cpp/io/basic ostream/dsc write]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/io/basic_ostream/write | inserts blocks of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/inherit</title>
    <ns>10</ns>
    <id>1324</id>
    <revision>
      <id>60876</id>
      <parentid>52753</parentid>
      <timestamp>2013-06-01T11:59:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="612">{{inherited | [[cpp/io/basic_ostream | {{small|std::}}basic_ostream]] |
===Member functions===
{{dsc begin}}
{{dsc h2 | Formatted input }}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt}}

{{dsc h2 | Unformatted input }}
{{dsc inc | cpp/io/basic_ostream/dsc put}}
{{dsc inc | cpp/io/basic_ostream/dsc write}}

{{dsc h2 | Positioning }}
{{dsc inc | cpp/io/basic_ostream/dsc tellp}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp}}

{{dsc h2 | Miscellaneous }}
{{dsc inc | cpp/io/basic_ostream/dsc flush}}
{{dsc end}}

===Member classes===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc sentry}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/navbar</title>
    <ns>10</ns>
    <id>1455</id>
    <revision>
      <id>39916</id>
      <parentid>35672</parentid>
      <timestamp>2012-09-28T20:10:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="241">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_ostream/navbar heading
|content3 = cpp/io/basic_ostream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/navbar content</title>
    <ns>10</ns>
    <id>1456</id>
    <revision>
      <id>67813</id>
      <parentid>67812</parentid>
      <timestamp>2014-03-01T08:06:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix typo</comment>
      <text xml:space="preserve" bytes="1092">{{nv begin}}
{{nv h1 | Global objects}}
{{nv col begin}}
{{nv ln | cpp/io/cout| cout | wcout}}
{{nv col next}}
{{nv ln | cpp/io/cerr| cerr | wcerr}}
{{nv col next}}
{{nv ln | cpp/io/clog| clog | wclog}}
{{nv col end}}

{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_ostream/basic_ostream}}
{{nv mem ln | cpp/io/basic_ostream/~basic_ostream}}
{{nv mem ln | cpp/io/basic_ostream/operator{{=}}|notes={{mark c++11}}}}

{{nv h2 | Formatted output }}
{{nv mem ln | cpp/io/basic_ostream/operator_ltlt | operator&lt;&lt;}}

{{nv h2 | Unformatted output }}
{{nv mem ln | cpp/io/basic_ostream/put}}
{{nv mem ln | cpp/io/basic_ostream/write}}

{{nv h2 | Positioning }}
{{nv mem ln | cpp/io/basic_ostream/tellp}}
{{nv mem ln | cpp/io/basic_ostream/seekp}}

{{nv h2 | Miscellaneous }}
{{nv mem ln | cpp/io/basic_ostream/flush}}
{{nv mem ln | cpp/io/basic_ostream/swap|notes={{mark c++11}}}}

{{nv h1 | Member classes}}
{{nv mem ln | cpp/io/basic_ostream/sentry}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/io/basic_ostream/operator_ltlt2 | operator&lt;&lt;{{dsc small|(std::basic_ostream)}}}}
{{nv end}}</text>
      <sha1>klcp40ap5g5kz9ys6rcl9vdnj95aic9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/navbar heading</title>
    <ns>10</ns>
    <id>1457</id>
    <revision>
      <id>33605</id>
      <parentid>2914</parentid>
      <timestamp>2012-06-15T20:29:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/sidebar heading]] to [[Template:cpp/io/basic ostream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="51">{{ltt | cpp/io/basic_ostream | std::basic_ostream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/sentry/dsc constructor</title>
    <ns>10</ns>
    <id>1325</id>
    <revision>
      <id>56103</id>
      <parentid>52755</parentid>
      <timestamp>2013-06-01T05:30:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/sentry/dcl list constructor]] to [[Template:cpp/io/basic ostream/sentry/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem ctor | cpp/io/basic_ostream/sentry | inlinemem=true | constructs the sentry object. All the preparation tasks are done here }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/sentry/dsc operator bool</title>
    <ns>10</ns>
    <id>1326</id>
    <revision>
      <id>56105</id>
      <parentid>52756</parentid>
      <timestamp>2013-06-01T05:30:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostream/sentry/dcl list operator bool]] to [[Template:cpp/io/basic ostream/sentry/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc mem fun | cpp/io/basic_ostream/sentry | title=operator bool | inlinemem=true | checks if the preparation of the stream object was successful}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/sentry/title</title>
    <ns>10</ns>
    <id>10140</id>
    <revision>
      <id>48409</id>
      <parentid>48408</parentid>
      <timestamp>2013-05-29T15:21:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="120">&lt;onlyinclude&gt;{{cpp/io/basic_ostream/title | n=sentry::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostream/title</title>
    <ns>10</ns>
    <id>1458</id>
    <revision>
      <id>2916</id>
      <parentid>2915</parentid>
      <timestamp>2011-06-06T22:56:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=basic_ostream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostringstream/navbar</title>
    <ns>10</ns>
    <id>1459</id>
    <revision>
      <id>39918</id>
      <parentid>35929</parentid>
      <timestamp>2012-09-28T20:10:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="252">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_ostringstream/navbar heading
|content3 = cpp/io/basic_ostringstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostringstream/navbar content</title>
    <ns>10</ns>
    <id>1460</id>
    <revision>
      <id>52758</id>
      <parentid>35146</parentid>
      <timestamp>2013-06-01T04:53:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="348">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_ostringstream/basic_ostringstream}}
{{nv mem ln | cpp/io/basic_ostringstream/operator{{=}}}}
{{nv mem ln | cpp/io/basic_ostringstream/swap}}
{{nv mem ln | cpp/io/basic_ostringstream/rdbuf}}

{{nv h2 | String operations }}
{{nv mem ln | cpp/io/basic_ostringstream/str}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostringstream/navbar heading</title>
    <ns>10</ns>
    <id>1461</id>
    <revision>
      <id>34985</id>
      <parentid>2922</parentid>
      <timestamp>2012-06-15T22:15:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic ostringstream/sidebar heading]] to [[Template:cpp/io/basic ostringstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="63">{{ltt | cpp/io/basic_ostringstream | std::basic_ostringstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic ostringstream/title</title>
    <ns>10</ns>
    <id>1462</id>
    <revision>
      <id>2924</id>
      <parentid>2923</parentid>
      <timestamp>2011-06-06T22:56:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=basic_ostringstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc basic streambuf</title>
    <ns>10</ns>
    <id>4352</id>
    <revision>
      <id>56107</id>
      <parentid>52759</parentid>
      <timestamp>2013-06-01T05:30:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list basic streambuf]] to [[Template:cpp/io/basic streambuf/dsc basic streambuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc prot mem ctor | cpp/io/basic_streambuf/basic_streambuf | constructs a basic_streambuf object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc gbump</title>
    <ns>10</ns>
    <id>4358</id>
    <revision>
      <id>56109</id>
      <parentid>52760</parentid>
      <timestamp>2013-06-01T05:30:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list gbump]] to [[Template:cpp/io/basic streambuf/dsc gbump]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc prot mem fun | cpp/io/basic_streambuf/gbump | advances the next pointer in the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc getloc</title>
    <ns>10</ns>
    <id>4330</id>
    <revision>
      <id>56111</id>
      <parentid>52761</parentid>
      <timestamp>2013-06-01T05:30:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list getloc]] to [[Template:cpp/io/basic streambuf/dsc getloc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/io/basic_streambuf/getloc | obtains a copy of the associated locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc gptr</title>
    <ns>10</ns>
    <id>4356</id>
    <revision>
      <id>56113</id>
      <parentid>52762</parentid>
      <timestamp>2013-06-01T05:31:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list gptr]] to [[Template:cpp/io/basic streambuf/dsc gptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc prot mem fun | cpp/io/basic_streambuf/gptr | title=eback&lt;br&gt;gptr&lt;br&gt;egptr | returns a pointer to the beginning, current character and the end of the get area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc imbue</title>
    <ns>10</ns>
    <id>4332</id>
    <revision>
      <id>56115</id>
      <parentid>52763</parentid>
      <timestamp>2013-06-01T05:31:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list imbue]] to [[Template:cpp/io/basic streambuf/dsc imbue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc prot mem vfun | cpp/io/basic_streambuf/pubimbue | title=imbue | changes the associated locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc in avail</title>
    <ns>10</ns>
    <id>4341</id>
    <revision>
      <id>56117</id>
      <parentid>52764</parentid>
      <timestamp>2013-06-01T05:31:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list in avail]] to [[Template:cpp/io/basic streambuf/dsc in avail]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/io/basic_streambuf/in_avail | obtains the number of characters immediately available in the get area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc operator=</title>
    <ns>10</ns>
    <id>4353</id>
    <revision>
      <id>56119</id>
      <parentid>52765</parentid>
      <timestamp>2013-06-01T05:31:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list operator=]] to [[Template:cpp/io/basic streambuf/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc prot mem fun | cpp/io/basic_streambuf/operator{{=}} | replaces a basic_streambuf object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc overflow</title>
    <ns>10</ns>
    <id>4368</id>
    <revision>
      <id>56121</id>
      <parentid>52766</parentid>
      <timestamp>2013-06-01T05:31:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list overflow]] to [[Template:cpp/io/basic streambuf/dsc overflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc prot mem vfun | cpp/io/basic_streambuf/overflow | writes characters to the associated output sequence from the put area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pbackfail</title>
    <ns>10</ns>
    <id>4369</id>
    <revision>
      <id>56123</id>
      <parentid>52767</parentid>
      <timestamp>2013-06-01T05:31:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pbackfail]] to [[Template:cpp/io/basic streambuf/dsc pbackfail]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc prot mem vfun | cpp/io/basic_streambuf/pbackfail | puts a character back into the input sequence, possibly modifying the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pbump</title>
    <ns>10</ns>
    <id>4361</id>
    <revision>
      <id>56125</id>
      <parentid>52768</parentid>
      <timestamp>2013-06-01T05:31:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pbump]] to [[Template:cpp/io/basic streambuf/dsc pbump]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc prot mem fun | cpp/io/basic_streambuf/pbump | advances the next pointer of the output sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pptr</title>
    <ns>10</ns>
    <id>4363</id>
    <revision>
      <id>56127</id>
      <parentid>52769</parentid>
      <timestamp>2013-06-01T05:31:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pptr]] to [[Template:cpp/io/basic streambuf/dsc pptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc prot mem fun | cpp/io/basic_streambuf/pptr | title=pbase&lt;br&gt;pptr&lt;br&gt;epptr | returns a pointer to the beginning, current character and the end of the put area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pubimbue</title>
    <ns>10</ns>
    <id>4331</id>
    <revision>
      <id>56129</id>
      <parentid>52770</parentid>
      <timestamp>2013-06-01T05:31:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pubimbue]] to [[Template:cpp/io/basic streambuf/dsc pubimbue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/io/basic_streambuf/pubimbue | invokes {{c|imbue()}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pubseekoff</title>
    <ns>10</ns>
    <id>4335</id>
    <revision>
      <id>56132</id>
      <parentid>52771</parentid>
      <timestamp>2013-06-01T05:31:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pubseekoff]] to [[Template:cpp/io/basic streambuf/dsc pubseekoff]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/io/basic_streambuf/pubseekoff | invokes {{c|seekoff()}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pubseekpos</title>
    <ns>10</ns>
    <id>4337</id>
    <revision>
      <id>56134</id>
      <parentid>52772</parentid>
      <timestamp>2013-06-01T05:31:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pubseekpos]] to [[Template:cpp/io/basic streambuf/dsc pubseekpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/io/basic_streambuf/pubseekpos | invokes {{c|seekpos()}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pubsetbuf</title>
    <ns>10</ns>
    <id>4333</id>
    <revision>
      <id>56136</id>
      <parentid>52773</parentid>
      <timestamp>2013-06-01T05:31:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pubsetbuf]] to [[Template:cpp/io/basic streambuf/dsc pubsetbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/io/basic_streambuf/pubsetbuf | mem={{{mem|}}} | invokes {{c|setbuf()}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc pubsync</title>
    <ns>10</ns>
    <id>4339</id>
    <revision>
      <id>56138</id>
      <parentid>52774</parentid>
      <timestamp>2013-06-01T05:31:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list pubsync]] to [[Template:cpp/io/basic streambuf/dsc pubsync]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/io/basic_streambuf/pubsync | invokes {{c|sync()}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sbumpc</title>
    <ns>10</ns>
    <id>4343</id>
    <revision>
      <id>56140</id>
      <parentid>52775</parentid>
      <timestamp>2013-06-01T05:31:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sbumpc]] to [[Template:cpp/io/basic streambuf/dsc sbumpc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc mem fun | cpp/io/basic_streambuf/sbumpc | reads one character from the input sequence and advances the sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc seekoff</title>
    <ns>10</ns>
    <id>4336</id>
    <revision>
      <id>56142</id>
      <parentid>52776</parentid>
      <timestamp>2013-06-01T05:31:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list seekoff]] to [[Template:cpp/io/basic streambuf/dsc seekoff]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="179">{{dsc prot mem vfun | cpp/io/basic_streambuf/pubseekoff | title=seekoff | repositions the next pointer in the input sequence, output sequence, or both, using relative addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc seekpos</title>
    <ns>10</ns>
    <id>4338</id>
    <revision>
      <id>56144</id>
      <parentid>52777</parentid>
      <timestamp>2013-06-01T05:31:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list seekpos]] to [[Template:cpp/io/basic streambuf/dsc seekpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="178">{{dsc prot mem vfun | cpp/io/basic_streambuf/pubseekpos | title=seekpos | repositions the next pointer in the input sequence, output sequence, or both using absolute addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc setbuf</title>
    <ns>10</ns>
    <id>4334</id>
    <revision>
      <id>56146</id>
      <parentid>52778</parentid>
      <timestamp>2013-06-01T05:31:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list setbuf]] to [[Template:cpp/io/basic streambuf/dsc setbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc prot mem vfun | cpp/io/basic_streambuf/pubsetbuf | title=setbuf | replaces the buffer with user-defined array, if permitted}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc setg</title>
    <ns>10</ns>
    <id>4359</id>
    <revision>
      <id>56148</id>
      <parentid>52779</parentid>
      <timestamp>2013-06-01T05:31:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list setg]] to [[Template:cpp/io/basic streambuf/dsc setg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc prot mem fun | cpp/io/basic_streambuf/setg | repositions the beginning, next, and end pointers of the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc setp</title>
    <ns>10</ns>
    <id>4360</id>
    <revision>
      <id>56150</id>
      <parentid>52780</parentid>
      <timestamp>2013-06-01T05:31:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list setp]] to [[Template:cpp/io/basic streambuf/dsc setp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc prot mem fun | cpp/io/basic_streambuf/setp | repositions the beginning, next, and end pointers of the output sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sgetc</title>
    <ns>10</ns>
    <id>4342</id>
    <revision>
      <id>56152</id>
      <parentid>52781</parentid>
      <timestamp>2013-06-01T05:31:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sgetc]] to [[Template:cpp/io/basic streambuf/dsc sgetc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/io/basic_streambuf/sgetc | reads one character from the input sequence without advancing the sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sgetn</title>
    <ns>10</ns>
    <id>4345</id>
    <revision>
      <id>56154</id>
      <parentid>52782</parentid>
      <timestamp>2013-06-01T05:31:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sgetn]] to [[Template:cpp/io/basic streambuf/dsc sgetn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/io/basic_streambuf/sgetn | invokes {{c|xsgetn()}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc showmanyc</title>
    <ns>10</ns>
    <id>4365</id>
    <revision>
      <id>56156</id>
      <parentid>52783</parentid>
      <timestamp>2013-06-01T05:31:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list showmanyc]] to [[Template:cpp/io/basic streambuf/dsc showmanyc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc prot mem vfun | cpp/io/basic_streambuf/showmanyc | obtains the number of characters available for input in the associated input sequence, if known }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc snextc</title>
    <ns>10</ns>
    <id>4344</id>
    <revision>
      <id>56158</id>
      <parentid>52784</parentid>
      <timestamp>2013-06-01T05:31:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list snextc]] to [[Template:cpp/io/basic streambuf/dsc snextc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/io/basic_streambuf/snextc | advances the input sequence, then reads one character without advancing again}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sputbackc</title>
    <ns>10</ns>
    <id>4347</id>
    <revision>
      <id>56160</id>
      <parentid>52785</parentid>
      <timestamp>2013-06-01T05:31:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sputbackc]] to [[Template:cpp/io/basic streambuf/dsc sputbackc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun | cpp/io/basic_streambuf/sputbackc | puts one character back in the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sputc</title>
    <ns>10</ns>
    <id>4349</id>
    <revision>
      <id>56162</id>
      <parentid>52786</parentid>
      <timestamp>2013-06-01T05:32:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sputc]] to [[Template:cpp/io/basic streambuf/dsc sputc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/io/basic_streambuf/sputc | writes one character to the put area and advances the next pointer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sputn</title>
    <ns>10</ns>
    <id>4350</id>
    <revision>
      <id>56164</id>
      <parentid>52787</parentid>
      <timestamp>2013-06-01T05:32:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sputn]] to [[Template:cpp/io/basic streambuf/dsc sputn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/io/basic_streambuf/sputn | invokes {{c|xsputn()}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc stossc</title>
    <ns>10</ns>
    <id>4798</id>
    <revision>
      <id>85721</id>
      <parentid>64381</parentid>
      <timestamp>2016-05-07T04:17:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>gone in C++17</comment>
      <text xml:space="preserve" bytes="205">{{dsc mem fun | stossc | nolink=true | notes={{mark deprecated}} {{mark until c++17}} | advances the input sequence as if by calling {{lc|std::basic_streambuf::sbumpc|sbumpc()}} and discarding the result}}</text>
      <sha1>9ji8ixguyjhnu7m378icfuol1b4yrxr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sungetc</title>
    <ns>10</ns>
    <id>4348</id>
    <revision>
      <id>56168</id>
      <parentid>52789</parentid>
      <timestamp>2013-06-01T05:32:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sungetc]] to [[Template:cpp/io/basic streambuf/dsc sungetc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/io/basic_streambuf/sungetc | moves the next pointer in the input sequence back by one}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc swap</title>
    <ns>10</ns>
    <id>4354</id>
    <revision>
      <id>56170</id>
      <parentid>52790</parentid>
      <timestamp>2013-06-01T05:32:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list swap]] to [[Template:cpp/io/basic streambuf/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc prot mem fun | cpp/io/basic_streambuf/swap | swaps two basic_streambuf objects | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc sync</title>
    <ns>10</ns>
    <id>4340</id>
    <revision>
      <id>56173</id>
      <parentid>52791</parentid>
      <timestamp>2013-06-01T05:32:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list sync]] to [[Template:cpp/io/basic streambuf/dsc sync]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc prot mem vfun | cpp/io/basic_streambuf/pubsync | title=sync | synchronizes the buffers with the associated character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc uflow</title>
    <ns>10</ns>
    <id>4367</id>
    <revision>
      <id>56175</id>
      <parentid>52792</parentid>
      <timestamp>2013-06-01T05:32:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list uflow]] to [[Template:cpp/io/basic streambuf/dsc uflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc prot mem vfun | cpp/io/basic_streambuf/uflow | reads characters from the associated input sequence to the get area and advances the next pointer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc underflow</title>
    <ns>10</ns>
    <id>4366</id>
    <revision>
      <id>56177</id>
      <parentid>52793</parentid>
      <timestamp>2013-06-01T05:32:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list underflow]] to [[Template:cpp/io/basic streambuf/dsc underflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc prot mem vfun | cpp/io/basic_streambuf/underflow | reads characters from the associated input sequence to the get area}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc xsgetn</title>
    <ns>10</ns>
    <id>4346</id>
    <revision>
      <id>56179</id>
      <parentid>52794</parentid>
      <timestamp>2013-06-01T05:32:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list xsgetn]] to [[Template:cpp/io/basic streambuf/dsc xsgetn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc prot mem vfun | cpp/io/basic_streambuf/sgetn | title=xsgetn | reads multiple characters from the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc xsputn</title>
    <ns>10</ns>
    <id>4351</id>
    <revision>
      <id>56181</id>
      <parentid>52795</parentid>
      <timestamp>2013-06-01T05:32:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list xsputn]] to [[Template:cpp/io/basic streambuf/dsc xsputn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc prot mem vfun | cpp/io/basic_streambuf/sputn | title=xsputn | writes multiple characters to the output sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/dsc ~basic streambuf</title>
    <ns>10</ns>
    <id>4329</id>
    <revision>
      <id>56183</id>
      <parentid>52796</parentid>
      <timestamp>2013-06-01T05:32:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic streambuf/dcl list ~basic streambuf]] to [[Template:cpp/io/basic streambuf/dsc ~basic streambuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem vdtor | cpp/io/basic_streambuf/~basic_streambuf | destructs the basic_streambuf object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/example1</title>
    <ns>10</ns>
    <id>4917</id>
    <revision>
      <id>23446</id>
      <parentid>18611</parentid>
      <timestamp>2012-04-20T02:25:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{example cpp&quot; to &quot;{{example&quot;</comment>
      <text xml:space="preserve" bytes="899">{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

class null_filter_buf : public std::streambuf {
    std::streambuf* src;
    char ch; // single-byte buffer
protected:
    int underflow() {
        while( (ch= src-&gt;sbumpc()) == '\0') ; // skip zeroes
        setg(&amp;ch, &amp;ch, &amp;ch+1); // make one read position available
        return ch; // may return EOF
    }
public:
    null_filter_buf(std::streambuf* buf) : src(buf) {
        setg(&amp;ch, &amp;ch+1, &amp;ch+1); // buffer is initially full
    }
};

void filtered_read(std::istream&amp; in)
{
    std::streambuf* orig = in.rdbuf();
    null_filter_buf buf(orig);
    in.rdbuf(&amp;buf);
    for(char c; in.get(c); )
            std::cout &lt;&lt; c;
    in.rdbuf(orig);
}

int main()
{
    char a[] = &quot;This i\0s \0an e\0\0\0xample&quot;;
    std::istringstream in(std::string(std::begin(a), std::end(a)));
    filtered_read(in);
}
 | output=
This is an example
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/inherit</title>
    <ns>10</ns>
    <id>4374</id>
    <revision>
      <id>60877</id>
      <parentid>52797</parentid>
      <timestamp>2013-06-01T11:59:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2543">{{inherited | [[cpp/io/basic_streambuf | {{small|std::}}basic_streambuf]] |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc ~basic_streambuf}}

{{dsc h2 | Locales}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubimbue}}
{{dsc inc | cpp/io/basic_streambuf/dsc getloc}}

{{dsc h2 | Positioning}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsetbuf}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekoff}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekpos}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsync}}

{{dsc h2 | Get area}}
{{dsc inc | cpp/io/basic_streambuf/dsc in_avail}}
{{dsc inc | cpp/io/basic_streambuf/dsc snextc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sbumpc}}
{{dsc inc | cpp/io/basic_streambuf/dsc stossc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetn}}

{{dsc h2 | Put area}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputn}}

{{dsc h2 | Putback}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc basic_streambuf}}
{{dsc inc | cpp/io/basic_streambuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/basic_streambuf/dsc swap}}

{{dsc h2 | Locales}}
{{dsc inc | cpp/io/basic_streambuf/dsc imbue}}

{{dsc h2 | Positioning}}
{{dsc inc | cpp/io/basic_streambuf/dsc setbuf}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekpos}}
{{dsc inc | cpp/io/basic_streambuf/dsc sync}}

{{dsc h2 | Get area}}
{{dsc inc | cpp/io/basic_streambuf/dsc showmanyc}}
{{dsc inc | cpp/io/basic_streambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc uflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc xsgetn}}
{{dsc inc | cpp/io/basic_streambuf/dsc gptr}}
{{dsc inc | cpp/io/basic_streambuf/dsc gbump}}
{{dsc inc | cpp/io/basic_streambuf/dsc setg}}

{{dsc h2 | Put area}}
{{dsc inc | cpp/io/basic_streambuf/dsc xsputn}}
{{dsc inc | cpp/io/basic_streambuf/dsc overflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc pptr}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbump}}
{{dsc inc | cpp/io/basic_streambuf/dsc setp}}

{{dsc h2 | Putback}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbackfail}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/navbar</title>
    <ns>10</ns>
    <id>1463</id>
    <revision>
      <id>47779</id>
      <parentid>39919</parentid>
      <timestamp>2013-05-16T20:26:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_streambuf/navbar heading
|content3 = cpp/io/basic_streambuf/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/navbar content</title>
    <ns>10</ns>
    <id>4370</id>
    <revision>
      <id>52798</id>
      <parentid>33410</parentid>
      <timestamp>2013-06-01T04:53:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="2226">{{nv begin}}
{{nv h1 | Public member functions}}
{{nv mem ln | cpp/io/basic_streambuf/~basic_streambuf}}

{{nv h2 | Locales }}
{{nv mem ln | cpp/io/basic_streambuf/pubimbue}}
{{nv mem ln | cpp/io/basic_streambuf/getloc}}

{{nv h2 | Positioning }}
{{nv mem ln | cpp/io/basic_streambuf/pubsetbuf}}
{{nv mem ln | cpp/io/basic_streambuf/pubseekoff}}
{{nv mem ln | cpp/io/basic_streambuf/pubseekpos}}
{{nv mem ln | cpp/io/basic_streambuf/pubsync}}

{{nv h2 | Get area }}
{{nv mem ln | cpp/io/basic_streambuf/in_avail}}
{{nv mem ln | cpp/io/basic_streambuf/snextc}}
{{nv mem ln | cpp/io/basic_streambuf/sbumpc}}
{{nv mem ln | cpp/io/basic_streambuf/sgetc}}
{{nv mem ln | cpp/io/basic_streambuf/sgetn}}

{{nv h2 | Put area }}
{{nv mem ln | cpp/io/basic_streambuf/sputc}}
{{nv mem ln | cpp/io/basic_streambuf/sputn}}

{{nv h2 | Putback }}
{{nv mem ln | cpp/io/basic_streambuf/sputbackc}}
{{nv mem ln | cpp/io/basic_streambuf/sungetc}}

{{nv h1 | Protected member functions}}
{{nv mem ln | cpp/io/basic_streambuf/basic_streambuf}}
{{nv mem ln | cpp/io/basic_streambuf/operator{{=}}|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_streambuf/swap|notes={{mark c++11}}}}

{{nv h2 | Locales }}
{{nv mem ln | cpp/io/basic_streambuf/pubimbue|imbue}}

{{nv h2 | Positioning }}
{{nv mem ln | cpp/io/basic_streambuf/pubsetbuf|setbuf}}
{{nv mem ln | cpp/io/basic_streambuf/pubseekoff|seekoff}}
{{nv mem ln | cpp/io/basic_streambuf/pubseekpos|seekpos}}
{{nv mem ln | cpp/io/basic_streambuf/pubsync|sync}}

{{nv h2 | Get area }}
{{nv mem ln | cpp/io/basic_streambuf/showmanyc}}
{{nv mem ln | cpp/io/basic_streambuf/underflow}}
{{nv mem ln | cpp/io/basic_streambuf/uflow}}
{{nv mem ln | cpp/io/basic_streambuf/sgetn | xsgetn}}
{{nv mem ln | cpp/io/basic_streambuf/gptr | eback | gptr | egptr}}
{{nv mem ln | cpp/io/basic_streambuf/gbump}}
{{nv mem ln | cpp/io/basic_streambuf/setg}}

{{nv h2 | Put area }}
{{nv mem ln | cpp/io/basic_streambuf/sputn | xsputn}}
{{nv mem ln | cpp/io/basic_streambuf/overflow}}
{{nv mem ln | cpp/io/basic_streambuf/pptr | pbase | pptr | epptr}}
{{nv mem ln | cpp/io/basic_streambuf/pbump}}
{{nv mem ln | cpp/io/basic_streambuf/setp}}

{{nv h2 | Putback }}
{{nv mem ln | cpp/io/basic_streambuf/pbackfail}}

{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/navbar heading</title>
    <ns>10</ns>
    <id>2451</id>
    <revision>
      <id>48092</id>
      <parentid>35674</parentid>
      <timestamp>2013-05-18T18:09:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="51">{{ltt|cpp/io/basic_streambuf|std::basic_streambuf}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic streambuf/title</title>
    <ns>10</ns>
    <id>4567</id>
    <revision>
      <id>16114</id>
      <timestamp>2011-12-21T17:00:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=basic_streambuf::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc constructor</title>
    <ns>10</ns>
    <id>9047</id>
    <revision>
      <id>56185</id>
      <parentid>52799</parentid>
      <timestamp>2013-06-01T05:32:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list constructor]] to [[Template:cpp/io/basic stringbuf/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem ctor | cpp/io/basic_stringbuf/basic_stringbuf | constructs a basic_stringbuf object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc destructor</title>
    <ns>10</ns>
    <id>9050</id>
    <revision>
      <id>56189</id>
      <parentid>52800</parentid>
      <timestamp>2013-06-01T05:32:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list destructor]] to [[Template:cpp/io/basic stringbuf/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem vdtor | nolink=true | destructs a basic_stringbuf object and the string it holds| notes={{mark implicit}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc operator=</title>
    <ns>10</ns>
    <id>9048</id>
    <revision>
      <id>56191</id>
      <parentid>52801</parentid>
      <timestamp>2013-06-01T05:32:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list operator=]] to [[Template:cpp/io/basic stringbuf/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/io/basic_stringbuf/operator{{=}} | assigns a basic_stringbuf object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc overflow</title>
    <ns>10</ns>
    <id>6343</id>
    <revision>
      <id>56194</id>
      <parentid>52802</parentid>
      <timestamp>2013-06-01T05:32:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list overflow]] to [[Template:cpp/io/basic stringbuf/dsc overflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc prot mem vfun | cpp/io/basic_stringbuf/overflow | appends a character to the output sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc pbackfail</title>
    <ns>10</ns>
    <id>9053</id>
    <revision>
      <id>56196</id>
      <parentid>52803</parentid>
      <timestamp>2013-06-01T05:32:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list pbackfail]] to [[Template:cpp/io/basic stringbuf/dsc pbackfail]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc prot mem vfun | cpp/io/basic_stringbuf/pbackfail | puts a character back into the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc seekoff</title>
    <ns>10</ns>
    <id>9055</id>
    <revision>
      <id>56198</id>
      <parentid>52804</parentid>
      <timestamp>2013-06-01T05:32:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list seekoff]] to [[Template:cpp/io/basic stringbuf/dsc seekoff]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc prot mem vfun | cpp/io/basic_stringbuf/seekoff | repositions the next pointer in the input sequence, output sequence, or both, using relative addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc seekpos</title>
    <ns>10</ns>
    <id>9054</id>
    <revision>
      <id>56200</id>
      <parentid>52805</parentid>
      <timestamp>2013-06-01T05:32:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list seekpos]] to [[Template:cpp/io/basic stringbuf/dsc seekpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc prot mem vfun | cpp/io/basic_stringbuf/seekpos | repositions the next pointer in the input sequence, output sequence, or both using absolute addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc setbuf</title>
    <ns>10</ns>
    <id>4695</id>
    <revision>
      <id>56204</id>
      <parentid>52806</parentid>
      <timestamp>2013-06-01T05:32:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list setbuf]] to [[Template:cpp/io/basic stringbuf/dsc setbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc prot mem vfun | cpp/io/basic_stringbuf/setbuf | mem={{{1|}}}| attempts to replace the controlled character sequence with an array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc str</title>
    <ns>10</ns>
    <id>9051</id>
    <revision>
      <id>56206</id>
      <parentid>52807</parentid>
      <timestamp>2013-06-01T05:32:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list str]] to [[Template:cpp/io/basic stringbuf/dsc str]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem fun | cpp/io/basic_stringbuf/str | replaces or obtains a copy of the associated character string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc swap</title>
    <ns>10</ns>
    <id>9049</id>
    <revision>
      <id>56208</id>
      <parentid>52808</parentid>
      <timestamp>2013-06-01T05:32:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list swap]] to [[Template:cpp/io/basic stringbuf/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/io/basic_stringbuf/swap | swaps two basic_stringbuf objects | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc swap2</title>
    <ns>10</ns>
    <id>9056</id>
    <revision>
      <id>56210</id>
      <parentid>52809</parentid>
      <timestamp>2013-06-01T05:32:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list swap2]] to [[Template:cpp/io/basic stringbuf/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="164">{{dsc tfun | cpp/io/basic_stringbuf/swap2 | title=std::swap{{dsc small|(std::basic_stringbuf)}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/dsc underflow</title>
    <ns>10</ns>
    <id>9052</id>
    <revision>
      <id>56212</id>
      <parentid>52810</parentid>
      <timestamp>2013-06-01T05:32:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringbuf/dcl list underflow]] to [[Template:cpp/io/basic stringbuf/dsc underflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc prot mem vfun | cpp/io/basic_stringbuf/underflow | returns the next character available in the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/navbar</title>
    <ns>10</ns>
    <id>1464</id>
    <revision>
      <id>47778</id>
      <parentid>39920</parentid>
      <timestamp>2013-05-16T20:26:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_stringbuf/navbar heading
|content3 = cpp/io/basic_stringbuf/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/navbar content</title>
    <ns>10</ns>
    <id>4371</id>
    <revision>
      <id>52811</id>
      <parentid>38021</parentid>
      <timestamp>2013-06-01T04:54:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="760">{{nv begin}}
{{nv h1 | Public member functions}}
{{nv mem ln | cpp/io/basic_stringbuf/basic_stringbuf}}
{{nv mem ln | cpp/io/basic_stringbuf/operator{{=}}|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_stringbuf/swap|notes={{mark c++11}}}}
{{nv mem ln | cpp/io/basic_stringbuf/str}}

{{nv h1 | Protected member functions}}
{{nv mem ln | cpp/io/basic_stringbuf/underflow}}
{{nv mem ln | cpp/io/basic_stringbuf/pbackfail}}
{{nv mem ln | cpp/io/basic_stringbuf/overflow}}
{{nv mem ln | cpp/io/basic_stringbuf/setbuf}}
{{nv mem ln | cpp/io/basic_stringbuf/seekoff}}
{{nv mem ln | cpp/io/basic_stringbuf/seekpos}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/io/basic_stringbuf/swap2|swap{{dsc small|(std::basic_stringbuf)}}|notes={{mark c++11}}}}

{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/navbar heading</title>
    <ns>10</ns>
    <id>2453</id>
    <revision>
      <id>48094</id>
      <parentid>35676</parentid>
      <timestamp>2013-05-18T18:09:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="51">{{ltt|cpp/io/basic_stringbuf|std::basic_stringbuf}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringbuf/title</title>
    <ns>10</ns>
    <id>4577</id>
    <revision>
      <id>16132</id>
      <timestamp>2011-12-22T05:44:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=basic_stringbuf::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/constructor</title>
    <ns>10</ns>
    <id>1465</id>
    <revision>
      <id>73362</id>
      <parentid>65977</parentid>
      <timestamp>2014-10-24T17:48:20Z</timestamp>
      <contributor>
        <username>Kumiponi</username>
        <id>3351</id>
      </contributor>
      <comment>string, not file</comment>
      <text xml:space="preserve" bytes="2714">{{cpp/io/{{{1|}}}/title | {{{1|}}}}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
explicit {{{1}}}( ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_istringstream=ios_base::in );
 | basic_ostringstream=ios_base::out );
 | basic_stringstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=2  | 1=
explicit {{{1}}}( const std::basic_string&lt;CharT,Traits,Allocator&gt;&amp; str,
{{space as|{{{1}}}}}  ios_base::openmode mode {{=}} {{#switch: {{{1|}}}
 | basic_istringstream=ios_base::in );
 | basic_ostringstream=ios_base::out );
 | basic_stringstream= ios_base::in{{!}}ios_base::out );
}}
}}
{{dcl | num=3 | since=c++11 |
{{{1}}}( {{{1}}}&amp;&amp; other );
}}
{{dcl end}}

Constructs new string stream.

1) Constructs new underlying string device. The underlying {{tt|basic_stringbuf}} object is constructed as {{#switch: {{{1|}}}
 | basic_istringstream={{c|basic_stringbuf&lt;Char,Traits,Allocator&gt;(mode {{!}} ios_base::in)}}.
 | basic_ostringstream={{c|basic_stringbuf&lt;Char,Traits,Allocator&gt;(mode {{!}} ios_base::out)}}.
 | basic_stringstream={{c|basic_stringbuf&lt;Char,Traits,Allocator&gt;(mode)}}.
}}

2) Uses a copy of {{tt|str}} as initial contents of the underlying string device. The underlying {{tt|basic_stringbuf}} object is constructed as {{#switch: {{{1|}}}
 | basic_istringstream={{c|basic_stringbuf&lt;Char,Traits,Allocator&gt;(str, mode {{!}} ios_base::in)}}.
 | basic_ostringstream={{c|basic_stringbuf&lt;Char,Traits,Allocator&gt;(str, mode {{!}} ios_base::out)}}.
 | basic_stringstream={{c|basic_stringbuf&lt;Char,Traits,Allocator&gt;(str, mode)}}.
}}

3) Move constructor. Constructs the string stream with the state of {{tt|other}} using move semantics. 

===Parameters===
{{par begin}}
{{par | str | string to use as initial contents of the string stream}}
{{par | mode | specifies stream open mode. It is bitmask type, the following constants are defined: 
{{cpp/io/ios_base/openmode consts}} }}
{{par | other | another string stream to use as source}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
int main()
{
    // default constructor (input/output stream)
    std::stringstream buf1;
    buf1 &lt;&lt; 7;
    int n = 0;
    buf1 &gt;&gt; n;
    std::cout &lt;&lt; &quot;buf1 = &quot; &lt;&lt; buf1.str() &lt;&lt; &quot; n = &quot; &lt;&lt; n &lt;&lt; '\n';

    // input stream
    std::istringstream inbuf(&quot;-10&quot;);
    inbuf &gt;&gt; n;
    std::cout &lt;&lt; &quot;n = &quot; &lt;&lt; n &lt;&lt; '\n';

    // output stream in append mode (C++11)
    std::ostringstream buf2(&quot;test&quot;, std::ios_base::ate);
    buf2 &lt;&lt; '1';
    std::cout &lt;&lt; buf2.str() &lt;&lt; '\n';
}
 | output=
buf1 = 7 n = 7
n = -10
test1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc str |{{{1|}}}}}
{{dsc inc | cpp/io/basic_stringbuf/dsc constructor}}
{{dsc end}}</text>
      <sha1>rqt6ifutkju50j5j9rr1elvomko5d5n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/dsc constructor</title>
    <ns>10</ns>
    <id>1466</id>
    <revision>
      <id>56214</id>
      <parentid>52813</parentid>
      <timestamp>2013-06-01T05:32:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringstream/dcl list constructor]] to [[Template:cpp/io/basic stringstream/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem ctor | cpp/io/{{{1|}}}/{{{1|}}} | constructs the string stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/dsc operator=</title>
    <ns>10</ns>
    <id>1467</id>
    <revision>
      <id>56216</id>
      <parentid>52814</parentid>
      <timestamp>2013-06-01T05:32:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringstream/dcl list operator=]] to [[Template:cpp/io/basic stringstream/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/io/{{{1|}}}/operator{{=}} | moves the string stream | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/dsc rdbuf</title>
    <ns>10</ns>
    <id>1468</id>
    <revision>
      <id>56218</id>
      <parentid>52815</parentid>
      <timestamp>2013-06-01T05:33:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringstream/dcl list rdbuf]] to [[Template:cpp/io/basic stringstream/dsc rdbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/io/{{{1|}}}/rdbuf | returns the underlying raw string device object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/dsc str</title>
    <ns>10</ns>
    <id>1469</id>
    <revision>
      <id>56220</id>
      <parentid>52816</parentid>
      <timestamp>2013-06-01T05:33:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringstream/dcl list str]] to [[Template:cpp/io/basic stringstream/dsc str]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/io/{{{1|}}}/str | gets or sets the contents of underlying string device object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/dsc swap</title>
    <ns>10</ns>
    <id>1470</id>
    <revision>
      <id>56222</id>
      <parentid>52817</parentid>
      <timestamp>2013-06-01T05:33:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringstream/dcl list swap]] to [[Template:cpp/io/basic stringstream/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/io/{{{1|}}}/swap | swaps two string streams | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/dsc swap2</title>
    <ns>10</ns>
    <id>12581</id>
    <revision>
      <id>61068</id>
      <timestamp>2013-06-05T03:10:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="148">{{dsc tfun | cpp/io/{{{1}}}/swap2 | title=std::swap{{dsc small|(std::{{{1}}})}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/navbar</title>
    <ns>10</ns>
    <id>1473</id>
    <revision>
      <id>39921</id>
      <parentid>35677</parentid>
      <timestamp>2012-09-28T20:10:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/basic_stringstream/navbar heading
|content3 = cpp/io/basic_stringstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/navbar content</title>
    <ns>10</ns>
    <id>1474</id>
    <revision>
      <id>52818</id>
      <parentid>35679</parentid>
      <timestamp>2013-06-01T04:54:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="342">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/basic_stringstream/basic_stringstream}}
{{nv mem ln | cpp/io/basic_stringstream/operator{{=}}}}
{{nv mem ln | cpp/io/basic_stringstream/swap}}
{{nv mem ln | cpp/io/basic_stringstream/rdbuf}}

{{nv h2 | String operations }}
{{nv mem ln | cpp/io/basic_stringstream/str}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/navbar heading</title>
    <ns>10</ns>
    <id>1475</id>
    <revision>
      <id>35681</id>
      <parentid>2950</parentid>
      <timestamp>2012-06-15T22:30:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/basic stringstream/sidebar heading]] to [[Template:cpp/io/basic stringstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="61">{{ltt | cpp/io/basic_stringstream | std::basic_stringstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/operator=</title>
    <ns>10</ns>
    <id>1471</id>
    <revision>
      <id>91244</id>
      <parentid>91243</parentid>
      <timestamp>2017-03-29T16:22:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+seealso to base operator=</comment>
      <text xml:space="preserve" bytes="1122">{{cpp/title | n={{trim|{{{1|}}}}}:: | operator{{=}}}}
{{cpp/io/{{trim|{{{1|}}}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
{{trim|{{{1}}}}}&amp; operator{{=}}( {{trim|{{{1}}}}}&amp;&amp; other );
}}
{{dcl end}}

Move assigns the string stream {{tt|other}} to {{tt|*this}}, effectively move-assigning both the {{lc|std::{{#switch:{{{1|}}}|basic_istringstream=basic_istream|basic_ostringstream=basic_ostream|basic_stringstream=basic_iostream}}}} base class and the associated {{lc|std::basic_stringbuf}}.

Note that the base class move assignment swaps all stream state variables (except for {{c|rdbuf}}) between {{c|*this}} and {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | string stream to move from }}
{{par end}}

===Return value===
{{c|*this}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap |{{{1|}}}}}
{{dsc inc | cpp/io/basic_stringbuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/{{#switch:{{{1|}}}|basic_istringstream=basic_istream|basic_ostringstream=basic_ostream|basic_stringstream=basic_iostream}}/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>j1rbbkabxcy3zhyyzvw6slg5agfo0vx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/rdbuf</title>
    <ns>10</ns>
    <id>1472</id>
    <revision>
      <id>62255</id>
      <parentid>44673</parentid>
      <timestamp>2013-06-25T12:41:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="381">{{cpp/title | n={{trim|{{{1|}}}}}:: | rdbuf}}
{{cpp/io/{{trim|{{{1|}}}}}/navbar}}
{{dcl begin}}
{{dcl |
std::basic_stringbuf&lt;CharT, Traits, Allocator&gt;* rdbuf() const;
}}
{{dcl end}}

Returns pointer to the underlying raw string device object. 

===Parameters===
(none)

===Return value===
Pointer to the underlying raw string device.

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/str</title>
    <ns>10</ns>
    <id>1476</id>
    <revision>
      <id>64102</id>
      <parentid>64091</parentid>
      <timestamp>2013-08-09T00:42:12Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>not sure if this is entirely appropriate here, but cleaning it up a bit regardless</comment>
      <text xml:space="preserve" bytes="1985">{{cpp/io/{{{1|}}}/title | str}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
std::basic_string&lt;CharT,Traits,Allocator&gt; str() const;
}}
{{dcl | num=2 | 1=
void str(const std::basic_string&lt;CharT,Traits,Allocator&gt;&amp; new_str);
}}
{{dcl end}}

Manages the contents of the underlying string object. 

1) Returns a copy of the underlying string as if by calling {{c|rdbuf()-&gt;str()}}.

2) Replaces the contents of the underlying string as if by calling {{c|rdbuf()-&gt;str(new_str)}}.

===Parameters===
{{par begin}}
{{par | new_str | new contents of the underlying string}}
{{par end}}

===Return value===

1) a copy of the underlying string object.

2) (none)

===Notes===
The copy of the underlying string returned by {{tt|str}} is a temporary object that will be destructed at the end of the expression, so directly calling [[cpp/string/basic_string/c_str|{{c|c_str()}}]] on the result of {{c|str()}} (for example in {{c|1=auto *ptr = out.str().c_str();}}) results in a dangling pointer.

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
int main()
{
    int n;

    std::istringstream in;  // could also use in(&quot;1 2&quot;)
    in.str(&quot;1 2&quot;);
    in &gt;&gt; n;
    std::cout &lt;&lt; &quot;after reading the first int from \&quot;1 2\&quot;, the int is &quot;
              &lt;&lt; n &lt;&lt; &quot;, str() = \&quot;&quot; &lt;&lt; in.str() &lt;&lt; &quot;\&quot;\n&quot;;

    std::ostringstream out(&quot;1 2&quot;);
    out &lt;&lt; 3;
    std::cout &lt;&lt; &quot;after writing the int '3' to output stream \&quot;1 2\&quot;&quot;
              &lt;&lt; &quot;, str() = \&quot;&quot; &lt;&lt; out.str() &lt;&lt; &quot;\&quot;\n&quot;;

    std::ostringstream ate(&quot;1 2&quot;, std::ios_base::ate);
    ate &lt;&lt; 3;
    std::cout &lt;&lt; &quot;after writing the int '3' to append stream \&quot;1 2\&quot;&quot;
              &lt;&lt; &quot;, str() = \&quot;&quot; &lt;&lt; ate.str() &lt;&lt; &quot;\&quot;\n&quot;;
}
 | output=
after reading the first int from &quot;1 2&quot;, the int is 1, str() = &quot;1 2&quot;
after writing the int '3' to output stream &quot;1 2&quot;, str() = &quot;3 2&quot;
after writing the int '3' to append stream &quot;1 2&quot;, str() = &quot;1 23&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringbuf/dsc str}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/swap</title>
    <ns>10</ns>
    <id>1477</id>
    <revision>
      <id>72207</id>
      <parentid>62254</parentid>
      <timestamp>2014-07-23T15:26:30Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>correction</comment>
      <text xml:space="preserve" bytes="851">{{cpp/title | n={{trim|{{{1|}}}}}:: | swap}}
{{cpp/io/{{trim|{{{1|}}}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void swap( {{{1|}}}&amp; other );
}}
{{dcl end}}

Exchanges the state of the stream with those of {{tt|other}}. 

This is done by calling{{#switch: {{{1|}}} | basic_istringstream={{c|basic_istream&lt;CharT, Traits&gt;::swap(other)}} | basic_ostringstream={{c|basic_ostream&lt;CharT, Traits&gt;::swap(other)}} | basic_stringstream={{c|basic_iostream&lt;CharT, Traits&gt;::swap(other)}}}} and {{c|rdbuf()-&gt;swap(*other.rdbuf())}}.  

===Parameters===
{{par begin}}
{{par | other | stream to exchange the state with}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc operator{{=}} |{{{1|}}}}}
{{dsc inc | cpp/io/basic_stringbuf/dsc swap}}
{{dsc end}}</text>
      <sha1>tcju3npw0at94qypft8b46xk5wu9xf1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/swap2</title>
    <ns>10</ns>
    <id>5495</id>
    <revision>
      <id>80229</id>
      <parentid>72206</parentid>
      <timestamp>2015-08-01T12:14:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Allocator -&gt; Alloc</comment>
      <text xml:space="preserve" bytes="727">{{cpp/title | swap&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class CharT, class Traits, class Alloc &gt;
void swap( std::{{{1}}}&lt;CharT,Traits,Alloc&gt;&amp; lhs,
           std::{{{1}}}&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{c|std::{{{1}}}}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | streams whose state to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>bgo2eeqrb9k0lopnl57ksyrlqf01i21</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/basic stringstream/title</title>
    <ns>10</ns>
    <id>1478</id>
    <revision>
      <id>2956</id>
      <parentid>2955</parentid>
      <timestamp>2011-06-06T22:56:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=basic_stringstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/buffering modes</title>
    <ns>10</ns>
    <id>1479</id>
    <revision>
      <id>2958</id>
      <parentid>2957</parentid>
      <timestamp>2011-06-06T22:56:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="129">{| class=&quot;wikitable&quot;
|-
| {{tt|_IOFBF}}
| full buffering
|-
| {{tt|_IOLBF}}
| line buffering
|-
| {{tt|_IONBF}}
| no buffering
|}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc FILE</title>
    <ns>10</ns>
    <id>15514</id>
    <revision>
      <id>90159</id>
      <parentid>90156</parentid>
      <timestamp>2017-02-07T14:17:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rv and +&quot;object type&quot; since that's what std calls this</comment>
      <text xml:space="preserve" bytes="103">{{dsc | {{c|FILE}} | object type, capable of holding all information needed to control a C I/O stream}}</text>
      <sha1>hh5hlmpuhcreggqbt3rxrcghqdbkzqc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc clearerr</title>
    <ns>10</ns>
    <id>1480</id>
    <revision>
      <id>56224</id>
      <parentid>52823</parentid>
      <timestamp>2013-06-01T05:33:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list clearerr]] to [[Template:cpp/io/c/dsc clearerr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">{{dsc fun | cpp/io/c/clearerr | clears errors}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fclose</title>
    <ns>10</ns>
    <id>1481</id>
    <revision>
      <id>56226</id>
      <parentid>52824</parentid>
      <timestamp>2013-06-01T05:33:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fclose]] to [[Template:cpp/io/c/dsc fclose]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">{{dsc fun | cpp/io/c/fclose | closes a file }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc feof</title>
    <ns>10</ns>
    <id>1482</id>
    <revision>
      <id>56228</id>
      <parentid>52825</parentid>
      <timestamp>2013-06-01T05:33:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list feof]] to [[Template:cpp/io/c/dsc feof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">{{dsc fun | cpp/io/c/feof | checks for the end-of-file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc ferror</title>
    <ns>10</ns>
    <id>1483</id>
    <revision>
      <id>56230</id>
      <parentid>52826</parentid>
      <timestamp>2013-06-01T05:33:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list ferror]] to [[Template:cpp/io/c/dsc ferror]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">{{dsc fun |cpp/io/c/ferror | checks for a file error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fflush</title>
    <ns>10</ns>
    <id>1484</id>
    <revision>
      <id>56232</id>
      <parentid>52827</parentid>
      <timestamp>2013-06-01T05:33:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fflush]] to [[Template:cpp/io/c/dsc fflush]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc fun | cpp/io/c/fflush | synchronizes an output stream with the actual file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fgetc</title>
    <ns>10</ns>
    <id>1485</id>
    <revision>
      <id>56234</id>
      <parentid>52828</parentid>
      <timestamp>2013-06-01T05:33:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fgetc]] to [[Template:cpp/io/c/dsc fgetc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/io/c/fgetc | title=fgetc&lt;br&gt;getc | gets a character from a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fgetpos</title>
    <ns>10</ns>
    <id>1486</id>
    <revision>
      <id>56236</id>
      <parentid>52829</parentid>
      <timestamp>2013-06-01T05:33:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fgetpos]] to [[Template:cpp/io/c/dsc fgetpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">{{dsc fun | cpp/io/c/fgetpos | gets the file position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fgets</title>
    <ns>10</ns>
    <id>1487</id>
    <revision>
      <id>56239</id>
      <parentid>52830</parentid>
      <timestamp>2013-06-01T05:33:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fgets]] to [[Template:cpp/io/c/dsc fgets]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | cpp/io/c/fgets | gets a character string from a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fgetwc</title>
    <ns>10</ns>
    <id>1488</id>
    <revision>
      <id>56241</id>
      <parentid>52831</parentid>
      <timestamp>2013-06-01T05:33:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fgetwc]] to [[Template:cpp/io/c/dsc fgetwc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/io/c/fgetwc | title=fgetwc&lt;br&gt;getwc | gets a wide character from a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fgetws</title>
    <ns>10</ns>
    <id>1489</id>
    <revision>
      <id>56243</id>
      <parentid>52832</parentid>
      <timestamp>2013-06-01T05:33:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fgetws]] to [[Template:cpp/io/c/dsc fgetws]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | cpp/io/c/fgetws | gets a wide string from a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fopen</title>
    <ns>10</ns>
    <id>1490</id>
    <revision>
      <id>56245</id>
      <parentid>52833</parentid>
      <timestamp>2013-06-01T05:33:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fopen]] to [[Template:cpp/io/c/dsc fopen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="44">{{dsc fun | cpp/io/c/fopen | opens a file }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fpos t</title>
    <ns>10</ns>
    <id>15513</id>
    <revision>
      <id>90160</id>
      <parentid>90157</parentid>
      <timestamp>2017-02-07T14:19:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rv and +&quot;complete object type&quot; since that's what the std calls this</comment>
      <text xml:space="preserve" bytes="145">{{dsc | {{c|fpos_t}} | complete non-array object type, capable of uniquely specifying a position in a file, including its multibyte parse state}}</text>
      <sha1>nusje7i0x991ehk90p52xoabh4u25ka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fprintf</title>
    <ns>10</ns>
    <id>1491</id>
    <revision>
      <id>56247</id>
      <parentid>52834</parentid>
      <timestamp>2013-06-01T05:33:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fprintf]] to [[Template:cpp/io/c/dsc fprintf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="184">{{dsc fun | cpp/io/c/fprintf | title=printf&lt;br&gt;fprintf&lt;br&gt;sprintf&lt;br&gt;snprintf | prints formatted output to {{lc|stdout}}, a file stream or a buffer | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fputc</title>
    <ns>10</ns>
    <id>1492</id>
    <revision>
      <id>56249</id>
      <parentid>52835</parentid>
      <timestamp>2013-06-01T05:33:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fputc]] to [[Template:cpp/io/c/dsc fputc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/io/c/fputc | title=fputc&lt;br&gt;putc | writes a character to a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fputs</title>
    <ns>10</ns>
    <id>1493</id>
    <revision>
      <id>56251</id>
      <parentid>52836</parentid>
      <timestamp>2013-06-01T05:33:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fputs]] to [[Template:cpp/io/c/dsc fputs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | cpp/io/c/fputs | writes a character string to a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fputwc</title>
    <ns>10</ns>
    <id>1494</id>
    <revision>
      <id>56254</id>
      <parentid>52837</parentid>
      <timestamp>2013-06-01T05:33:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fputwc]] to [[Template:cpp/io/c/dsc fputwc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/io/c/fputwc | title=fputwc&lt;br&gt;putwc | writes a wide character to a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fputws</title>
    <ns>10</ns>
    <id>1495</id>
    <revision>
      <id>56256</id>
      <parentid>52838</parentid>
      <timestamp>2013-06-01T05:33:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fputws]] to [[Template:cpp/io/c/dsc fputws]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | cpp/io/c/fputws | writes a wide string to a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fread</title>
    <ns>10</ns>
    <id>1496</id>
    <revision>
      <id>56258</id>
      <parentid>52839</parentid>
      <timestamp>2013-06-01T05:33:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fread]] to [[Template:cpp/io/c/dsc fread]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">{{dsc fun | cpp/io/c/fread | reads from a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc freopen</title>
    <ns>10</ns>
    <id>1497</id>
    <revision>
      <id>56260</id>
      <parentid>52840</parentid>
      <timestamp>2013-06-01T05:33:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list freopen]] to [[Template:cpp/io/c/dsc freopen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/io/c/freopen | open an existing stream with a different name}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fscanf</title>
    <ns>10</ns>
    <id>1498</id>
    <revision>
      <id>56262</id>
      <parentid>52841</parentid>
      <timestamp>2013-06-01T05:33:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fscanf]] to [[Template:cpp/io/c/dsc fscanf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | cpp/io/c/fscanf | title=scanf&lt;br&gt;fscanf&lt;br&gt;sscanf | reads formatted input from {{lc|stdin}}, a file stream or a buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fseek</title>
    <ns>10</ns>
    <id>1499</id>
    <revision>
      <id>56264</id>
      <parentid>52842</parentid>
      <timestamp>2013-06-01T05:33:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fseek]] to [[Template:cpp/io/c/dsc fseek]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | cpp/io/c/fseek | moves the file position indicator to a specific location in a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fsetpos</title>
    <ns>10</ns>
    <id>1500</id>
    <revision>
      <id>56266</id>
      <parentid>52843</parentid>
      <timestamp>2013-06-01T05:33:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fsetpos]] to [[Template:cpp/io/c/dsc fsetpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc fun | cpp/io/c/fsetpos | moves the file position indicator to a specific location in a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc ftell</title>
    <ns>10</ns>
    <id>1501</id>
    <revision>
      <id>56268</id>
      <parentid>52844</parentid>
      <timestamp>2013-06-01T05:33:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list ftell]] to [[Template:cpp/io/c/dsc ftell]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/io/c/ftell | returns the current file position indicator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fwide</title>
    <ns>10</ns>
    <id>2935</id>
    <revision>
      <id>56270</id>
      <parentid>52845</parentid>
      <timestamp>2013-06-01T05:33:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fwide]] to [[Template:cpp/io/c/dsc fwide]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | cpp/io/c/fwide | switches a file stream between wide character I/O and narrow character I/O}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fwprintf</title>
    <ns>10</ns>
    <id>1502</id>
    <revision>
      <id>56272</id>
      <parentid>52846</parentid>
      <timestamp>2013-06-01T05:34:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fwprintf]] to [[Template:cpp/io/c/dsc fwprintf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="156">{{dsc fun | cpp/io/c/fwprintf | title=wprintf&lt;br&gt;fwprintf&lt;br&gt;swprintf | prints formatted wide character output to {{lc|stdout}}, a file stream or a buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fwrite</title>
    <ns>10</ns>
    <id>1503</id>
    <revision>
      <id>56274</id>
      <parentid>52847</parentid>
      <timestamp>2013-06-01T05:34:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fwrite]] to [[Template:cpp/io/c/dsc fwrite]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">{{dsc fun | cpp/io/c/fwrite | writes to a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc fwscanf</title>
    <ns>10</ns>
    <id>1504</id>
    <revision>
      <id>56276</id>
      <parentid>52848</parentid>
      <timestamp>2013-06-01T05:34:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list fwscanf]] to [[Template:cpp/io/c/dsc fwscanf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc fun | cpp/io/c/fwscanf | title=wscanf&lt;br&gt;fwscanf&lt;br&gt;swscanf | reads formatted wide character input from {{lc|stdin}}, a file stream or a buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc getchar</title>
    <ns>10</ns>
    <id>1505</id>
    <revision>
      <id>56278</id>
      <parentid>52849</parentid>
      <timestamp>2013-06-01T05:34:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list getchar]] to [[Template:cpp/io/c/dsc getchar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc fun | cpp/io/c/getchar | reads a character from {{lc|stdin}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc gets</title>
    <ns>10</ns>
    <id>1506</id>
    <revision>
      <id>73484</id>
      <parentid>68828</parentid>
      <timestamp>2014-11-01T03:35:56Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/io/c/gets | reads a character string from {{lc|stdin}} | notes={{mark until c++14}} }}</text>
      <sha1>ry66ylw4yznq0e985ietm3t9bx0ues0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc getwchar</title>
    <ns>10</ns>
    <id>1507</id>
    <revision>
      <id>56282</id>
      <parentid>52851</parentid>
      <timestamp>2013-06-01T05:34:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list getwchar]] to [[Template:cpp/io/c/dsc getwchar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/io/c/getwchar | reads a wide character from {{lc|stdin}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc perror</title>
    <ns>10</ns>
    <id>1508</id>
    <revision>
      <id>56284</id>
      <parentid>52852</parentid>
      <timestamp>2013-06-01T05:34:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list perror]] to [[Template:cpp/io/c/dsc perror]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | cpp/io/c/perror | displays a character string corresponding of the current error to {{lc|stderr}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc putchar</title>
    <ns>10</ns>
    <id>1509</id>
    <revision>
      <id>56287</id>
      <parentid>52853</parentid>
      <timestamp>2013-06-01T05:34:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list putchar]] to [[Template:cpp/io/c/dsc putchar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | cpp/io/c/putchar |  writes a character to {{lc|stdout}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc puts</title>
    <ns>10</ns>
    <id>1510</id>
    <revision>
      <id>56289</id>
      <parentid>52854</parentid>
      <timestamp>2013-06-01T05:34:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list puts]] to [[Template:cpp/io/c/dsc puts]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | cpp/io/c/puts | writes a character string to {{lc|stdout}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc putwchar</title>
    <ns>10</ns>
    <id>1511</id>
    <revision>
      <id>56291</id>
      <parentid>52855</parentid>
      <timestamp>2013-06-01T05:34:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list putwchar]] to [[Template:cpp/io/c/dsc putwchar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/io/c/putwchar | writes a wide character to {{lc|stdout}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc remove</title>
    <ns>10</ns>
    <id>1512</id>
    <revision>
      <id>56293</id>
      <parentid>52856</parentid>
      <timestamp>2013-06-01T05:34:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list remove]] to [[Template:cpp/io/c/dsc remove]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">{{dsc fun | cpp/io/c/remove | erases a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc rename</title>
    <ns>10</ns>
    <id>1513</id>
    <revision>
      <id>56295</id>
      <parentid>52857</parentid>
      <timestamp>2013-06-01T05:34:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list rename]] to [[Template:cpp/io/c/dsc rename]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">{{dsc fun | cpp/io/c/rename | renames a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc rewind</title>
    <ns>10</ns>
    <id>1514</id>
    <revision>
      <id>56297</id>
      <parentid>52858</parentid>
      <timestamp>2013-06-01T05:34:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list rewind]] to [[Template:cpp/io/c/dsc rewind]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | cpp/io/c/rewind | moves the file position indicator to the beginning in a file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc setbuf</title>
    <ns>10</ns>
    <id>1515</id>
    <revision>
      <id>56299</id>
      <parentid>52859</parentid>
      <timestamp>2013-06-01T05:34:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list setbuf]] to [[Template:cpp/io/c/dsc setbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">{{dsc fun | cpp/io/c/setbuf | sets the buffer for a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc setvbuf</title>
    <ns>10</ns>
    <id>1516</id>
    <revision>
      <id>56301</id>
      <parentid>52860</parentid>
      <timestamp>2013-06-01T05:34:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list setvbuf]] to [[Template:cpp/io/c/dsc setvbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc fun | cpp/io/c/setvbuf | sets the buffer and its size for a file stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc tmpfile</title>
    <ns>10</ns>
    <id>1517</id>
    <revision>
      <id>56303</id>
      <parentid>52861</parentid>
      <timestamp>2013-06-01T05:34:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list tmpfile]] to [[Template:cpp/io/c/dsc tmpfile]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc fun | cpp/io/c/tmpfile | creates and opens a temporary, auto-removing file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc tmpnam</title>
    <ns>10</ns>
    <id>1518</id>
    <revision>
      <id>56305</id>
      <parentid>52862</parentid>
      <timestamp>2013-06-01T05:34:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list tmpnam]] to [[Template:cpp/io/c/dsc tmpnam]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">{{dsc fun | cpp/io/c/tmpnam | returns a unique filename}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc ungetc</title>
    <ns>10</ns>
    <id>1519</id>
    <revision>
      <id>56307</id>
      <parentid>52863</parentid>
      <timestamp>2013-06-01T05:34:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list ungetc]] to [[Template:cpp/io/c/dsc ungetc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | cpp/io/c/ungetc | puts a character back into a file stream }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc ungetwc</title>
    <ns>10</ns>
    <id>1520</id>
    <revision>
      <id>56309</id>
      <parentid>52864</parentid>
      <timestamp>2013-06-01T05:34:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list ungetwc]] to [[Template:cpp/io/c/dsc ungetwc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc fun | cpp/io/c/ungetwc | puts a wide character back into a file stream }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc vfprintf</title>
    <ns>10</ns>
    <id>1521</id>
    <revision>
      <id>56311</id>
      <parentid>52865</parentid>
      <timestamp>2013-06-01T05:34:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list vfprintf]] to [[Template:cpp/io/c/dsc vfprintf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="222">{{dsc fun | cpp/io/c/vfprintf | title=vprintf&lt;br&gt;vfprintf&lt;br&gt;vsprintf&lt;br&gt;vsnprintf | prints formatted output to {{lc|stdout}}, a file stream or a buffer&lt;br&gt; using variable argument list | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc vfscanf</title>
    <ns>10</ns>
    <id>1522</id>
    <revision>
      <id>56313</id>
      <parentid>52866</parentid>
      <timestamp>2013-06-01T05:34:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list vfscanf]] to [[Template:cpp/io/c/dsc vfscanf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="228">{{dsc fun | cpp/io/c/vfscanf | title=vscanf&lt;br&gt;vfscanf&lt;br&gt;vsscanf | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} | reads formatted input from {{lc|stdin}}, a file stream or a buffer&lt;br&gt; using variable argument list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc vfwprintf</title>
    <ns>10</ns>
    <id>1523</id>
    <revision>
      <id>56315</id>
      <parentid>52867</parentid>
      <timestamp>2013-06-01T05:34:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list vfwprintf]] to [[Template:cpp/io/c/dsc vfwprintf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="193">{{dsc fun | cpp/io/c/vfwprintf | title=vwprintf&lt;br&gt;vfwprintf&lt;br&gt;vswprintf | prints formatted wide character output to {{lc|stdout}}, a file stream&lt;br&gt; or a buffer using variable argument list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/dsc vfwscanf</title>
    <ns>10</ns>
    <id>1524</id>
    <revision>
      <id>56317</id>
      <parentid>52868</parentid>
      <timestamp>2013-06-01T05:34:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/c/dcl list vfwscanf]] to [[Template:cpp/io/c/dsc vfwscanf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="247">{{dsc fun | cpp/io/c/vfwscanf | title=vwscanf&lt;br&gt;vfwscanf&lt;br&gt;vswscanf | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} | reads formatted wide character input from {{lc|stdin}}, a file stream&lt;br&gt; or a buffer using variable argument list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/example1</title>
    <ns>10</ns>
    <id>9450</id>
    <revision>
      <id>75571</id>
      <parentid>40438</parentid>
      <timestamp>2015-01-22T15:24:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>totally forgot fclose</comment>
      <text xml:space="preserve" bytes="569">{{example
 | 
 | code=
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;

int main()
{
    FILE* fp = std::fopen(&quot;test.txt&quot;, &quot;r&quot;);
    if(!fp) {
        std::perror(&quot;File opening failed&quot;);
        return EXIT_FAILURE;
    }

    int c; // note: int, not char, required to handle EOF
    while ((c = std::fgetc(fp)) != EOF) { // standard C I/O file reading loop
       std::putchar(c);
    }

    if (std::ferror(fp))
        std::puts(&quot;I/O error when reading&quot;);
    else if (std::feof(fp))
        std::puts(&quot;End of file reached successfully&quot;);

    std::fclose(fp);
}
 | output=
}}</text>
      <sha1>5a5dbsxjxbmaazf0r7pbqifhkd7a7uv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/file access flags</title>
    <ns>10</ns>
    <id>1526</id>
    <revision>
      <id>72560</id>
      <parentid>72340</parentid>
      <timestamp>2014-09-04T03:39:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link binary mode</comment>
      <text xml:space="preserve" bytes="1094">{| class=&quot;wikitable&quot;
|-
! File access &lt;br&gt;mode string
! Meaning
! Explanation
! Action if file &lt;br&gt; already exists
! Action if file &lt;br&gt; does not exist
|-
| {{tt|&quot;r&quot;}}
| read
| Open a file for reading
| read from start
| failure to open
|-
| {{tt|&quot;w&quot;}}
| write
| Create a file for writing
| destroy contents
| create new
|-
| {{tt|&quot;a&quot;}}
| append
| Append to a file
| write to end
| create new
|-
| {{tt|&quot;r+&quot;}}
| read extended
| Open a file for read/write
| read from start
| error
|-
| {{tt|&quot;w+&quot;}}
| write extended
| Create a file for read/write
| destroy contents
| create new
|-
| {{tt|&quot;a+&quot;}}
| append extended
| Open a file for read/write
| write to end
| create new
|-
| colspan=&quot;5&quot; | File access mode flag {{tt|&quot;b&quot;}} can optionally be specified to open a file [[cpp/io/c#Binary_and_text_modes|in binary mode]]. This flag has no effect on POSIX systems, but on Windows, for example, it disables special handling of {{c|'\n'}} and {{c|'\x1A'}}. &lt;br&gt; On the append file access modes, data is written to the end of the file regardless of the current position of the file position indicator.
|}</text>
      <sha1>hqovahtf87a2d6ef2brdnemyze43n0c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/navbar</title>
    <ns>10</ns>
    <id>1529</id>
    <revision>
      <id>39922</id>
      <parentid>35683</parentid>
      <timestamp>2012-09-28T20:10:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="217">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/c/navbar heading
|content3 = cpp/io/c/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/navbar content</title>
    <ns>10</ns>
    <id>1530</id>
    <revision>
      <id>73485</id>
      <parentid>52869</parentid>
      <timestamp>2014-11-01T03:41:19Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>{{mark until c++14}} for gets</comment>
      <text xml:space="preserve" bytes="2197">{{nv begin}}
{{nv h1 | Functions}}

{{nv h2 | File access}}
{{nv col begin}}
{{nv ln | cpp/io/c/fopen}}
{{nv ln | cpp/io/c/freopen}}
{{nv ln | cpp/io/c/fclose}}
{{nv ln | cpp/io/c/fflush}}
{{nv col next}}
{{nv ln | cpp/io/c/fwide}}
{{nv ln | cpp/io/c/setbuf}}
{{nv ln | cpp/io/c/setvbuf}}
{{nv col end}}

{{nv h2 | Direct input/output}}
{{nv ln | cpp/io/c/fread}}
{{nv ln | cpp/io/c/fwrite}}

{{nv h2 | Unformatted input/output}}
{{nv col begin}}
{{nv ln | cpp/io/c/fgetc}}
{{nv ln | cpp/io/c/fgets}}
{{nv ln | cpp/io/c/fputc}}
{{nv ln | cpp/io/c/fputs}}
{{nv ln | cpp/io/c/getchar}}
{{nv ln | cpp/io/c/gets | notes={{mark until c++14}} }}
{{nv ln | cpp/io/c/putchar}}
{{nv ln | cpp/io/c/puts}}
{{nv ln | cpp/io/c/ungetc}}
{{nv col next}}
{{nv ln | cpp/io/c/fgetwc}}
{{nv ln | cpp/io/c/fgetws}}
{{nv ln | cpp/io/c/fputwc}}
{{nv ln | cpp/io/c/fputws}}
{{nv ln | cpp/io/c/getwchar}}
{{nv ln | cpp/io/c/putwchar}}
{{nv ln | cpp/io/c/ungetwc}}
{{nv col end}}

{{nv h2 | Formatted input/output}}
{{nv col begin}}
{{nv ln | cpp/io/c/fscanf | scanf | fscanf | sscanf}}
{{nv ln | cpp/io/c/vfscanf | vscanf | vfscanf | vsscanf | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/io/c/fprintf | printf | fprintf | sprintf | snprintf | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/io/c/vfprintf | vprintf | vfprintf | vsprintf | vsnprintf  | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/io/c/fwscanf | wscanf | fwscanf | swscanf}}
{{nv ln | cpp/io/c/vfwscanf | vwscanf | vfwscanf | vswscanf | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/io/c/fwprintf | wprintf | fwprintf | swprintf}}
{{nv ln | cpp/io/c/vfwprintf | vwprintf | vfwprintf | vswprintf}}
{{nv col end}}

{{nv h2 | File positioning}}
{{nv ln | cpp/io/c/ftell}}
{{nv ln | cpp/io/c/fgetpos}}
{{nv ln | cpp/io/c/fseek}}
{{nv ln | cpp/io/c/fsetpos}}
{{nv ln | cpp/io/c/rewind}}

{{nv h2 | Error handling}}
{{nv ln | cpp/io/c/clearerr}}
{{nv ln | cpp/io/c/feof}}
{{nv ln | cpp/io/c/ferror}}
{{nv ln | cpp/io/c/perror}}

{{nv h2 | Operations on files}}
{{nv ln | cpp/io/c/remove}}
{{nv ln | cpp/io/c/rename}}
{{nv ln | cpp/io/c/tmpfile}}
{{nv ln | cpp/io/c/tmpnam}}
{{nv end}}</text>
      <sha1>tj3pti7popkovitenrmaabrrqf3skwk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/navbar heading</title>
    <ns>10</ns>
    <id>1531</id>
    <revision>
      <id>40058</id>
      <parentid>35685</parentid>
      <timestamp>2012-09-28T20:52:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="27">[[ cpp/io/c | C-style I/O]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/printf format</title>
    <ns>10</ns>
    <id>1527</id>
    <revision>
      <id>90485</id>
      <parentid>89891</parentid>
      <timestamp>2017-02-25T09:22:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>http://stackoverflow.com/questions/42450366 makes a good point, args are evaluated before printf is entered, so directly printing result of an earlier %n is hard to achieve</comment>
      <text xml:space="preserve" bytes="13505">The format string consists of ordinary {{#if:{{{wcs|}}}|wide|multibyte}} characters (except {{ttb|%}}), which are copied unchanged into the output stream, and conversion specifications. Each conversion specification has the following format:

:* introductory {{ttb|%}} character

:* {{mark optional}} one or more flags that modify the behavior of the conversion:
::* {{ttb|-}}: the result of the conversion is left-justified within the field (by default it is right-justified)
::* {{ttb|+}}: the sign of signed conversions is always prepended to the result of the conversion (by default the result is preceded by minus only when it is negative)
::* ''space'': if the result of a signed conversion does not start with a sign character, or is empty, space is prepended to the result. It is ignored if {{tt|+}} flag is present.
::* {{ttb|#}} : ''alternative form'' of the conversion is performed. See the table below for exact effects otherwise the behavior is undefined.
::* {{ttb|0}} : for integer and floating point number conversions, leading zeros are used to pad the field instead of ''space'' characters. For integer numbers it is ignored if the precision is explicitly specified. For other conversions using this flag results in undefined behavior. It is ignored if {{tt|-}} flag is present.

:* {{mark optional}} integer value or {{tt|*}} that specifies minimum field width. The result is padded with ''space'' characters (by default), if required, on the left when right-justified, or on the right if left-justified. In the case when {{tt|*}} is used, the width is specified by an additional argument of type {{c|int}}. If the value of the argument is negative, it results with the {{tt|-}} flag specified and positive field width. (Note: This is the minimum width: The value is never truncated.)

:* {{mark optional}} {{ttb|.}} followed by integer number or {{ttb|*}}, or neither that specifies ''precision'' of the conversion. In the case when {{tt|*}} is used, the ''precision'' is specified by an additional argument of type {{c|int}}. If the value of this argument is negative, it is ignored. If neither a number nor {{ttb|*}} is used, the precision is taken as zero. See the table below for exact effects of ''precision''. 

:* {{mark optional}} ''length modifier'' that specifies the size of the argument

:* conversion format specifier

The following format specifiers are available:

{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! rowspan=1 | Conversion&lt;br&gt; specifier
! rowspan=1 | Explanation
! colspan=9 | Argument type
|-
! colspan=2 style=&quot;text-align:right; font-weight:normal;&quot; | length modifier
&lt;!-- --&gt;
! {{tt|hh}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{tt|h}}
! style=&quot;font-weight:normal;&quot; | (none)
! {{ttb|l}}
! {{ttb|ll}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|j}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|z}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|t}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|L}}
|-
! {{tt|%}}
| style=&quot;text-align:left;&quot; | writes literal {{ttb|%}}. The full conversion specification must be {{ttb|%%}}.
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
|-
! {{tt|c}}
| style=&quot;text-align:left;&quot; |
: writes a '''single character'''.
{{#if:{{{wcs|}}}|The argument is first converted to {{c|wchar_t}} as if by calling {{lc|btowc}}.
If the '''l''' modifier is used, the {{tt|wint_t}} argument is first converted to {{c|wchar_t}}.
|The argument is first converted to {{c|unsigned char}}.
If the '''l''' modifier is used, the argument is first converted to a character string as if by '''%ls''' with a {{c|wchar_t[2]}} argument.
}}
| {{n/a}}
| {{n/a}}
| {{vertical|{{c|int}}}}
| {{vertical|{{c|wint_t}}}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
|-
! {{tt|s}}
| style=&quot;text-align:left;&quot; | 
: writes a '''character string'''
{{#if:{{{wcs|}}}|The argument must be a pointer to the initial element of a character array containing a multibyte character sequence beginning in the initial shift state, which is converted to wide character array as if by a call to {{lc|mbrtowc}} with zero-initialized conversion state.
''Precision'' specifies the maximum number of wide characters to be written. If ''Precision'' is not specified, writes every wide characters up to and not including the first null terminator.
If the '''l''' specifier is used, the argument must be a pointer to the initial element of an array of {{c|wchar_t}}. 
|The argument must be a pointer to the initial element of an array of characters. 
''Precision'' specifies the maximum number of bytes to be written. If ''Precision'' is not specified, writes every byte up to and not including the first null terminator.
If the '''l''' specifier is used, the argument must be a pointer to the initial element of an array of {{c|wchar_t}}, which is converted to char array as if by a call to {{lc|wcrtomb}} with zero-initialized conversion state.
}}
| {{n/a}}
| {{n/a}}
| {{vertical|{{c|char*}}}}
| {{vertical|{{c|wchar_t*}}}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
|-
! {{tt|d}}&lt;br&gt; {{tt|i}}
| style=&quot;text-align:left;&quot; | 
:converts a '''signed integer''' into decimal representation ''[-]dddd''.

''Precision'' specifies the minimum number of digits to appear. The default precision is {{c|1}}.&lt;br&gt; 
If both the converted value and the precision are {{c|0}} the conversion results in no characters.
| rowspan=1 | {{vertical|{{c|signed char}}}}
| rowspan=1 | {{vertical|{{c|short}}}}
| rowspan=1 | {{vertical|{{c|int}}}}
| rowspan=1 | {{vertical|{{c|long}}}}
| rowspan=1 | {{vertical|{{c|long long}}}}
| rowspan=1 | {{vertical|{{c|intmax_t}}}}
| rowspan=1 | {{vertical|signed {{c|size_t}}}}
| rowspan=1 | {{vertical|{{c|ptrdiff_t}}}}
| {{n/a}}
|-
! {{tt|o}}
| style=&quot;text-align:left;&quot; | 
:converts a '''unsigned integer''' into octal representation ''oooo''.

''Precision'' specifies the minimum number of digits to appear. The default precision is {{c|1}}. 
If both the converted value and the precision are {{c|0}} the conversion results in no characters.
In the ''alternative implementation'' precision is increased if necessary, to write one leading zero.
In that case if both the converted value and the precision are {{c|0}}, single {{c|0}} is written.
| rowspan=3 | {{vertical|{{c|unsigned char}}}}
| rowspan=3 | {{vertical|{{c|unsigned short}}}}
| rowspan=3 | {{vertical|{{c|unsigned int}}}}
| rowspan=3 | {{vertical|{{c|unsigned long}}}}
| rowspan=3 | {{vertical|{{c|unsigned long long}}}}
| rowspan=3 | {{vertical|{{c|uintmax_t}}}}
| rowspan=3 | {{vertical|{{c|size_t}}}}
| rowspan=3 | {{vertical|unsigned version of {{c|ptrdiff_t}}}}
| {{n/a}}
|-
! {{tt|x}}&lt;br&gt; {{tt|X}}
| style=&quot;text-align:left;&quot; | 
:converts an '''unsigned integer''' into hexadecimal representation ''hhhh''.

For the {{ttb|x}} conversion letters {{tt|abcdef}} are used.&lt;br&gt;
For the {{ttb|X}} conversion letters {{tt|ABCDEF}} are used.&lt;br&gt;
''Precision'' specifies the minimum number of digits to appear. The default precision is {{c|1}}.
If both the converted value and the precision are {{c|0}} the conversion results in no characters.
In the ''alternative implementation'' {{ttb|0x}} or {{ttb|0X}} is prefixed to results if the converted value is nonzero.
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
| {{n/a}}
|-
! {{tt|u}}
| style=&quot;text-align:left;&quot; | 
:converts an '''unsigned integer''' into decimal representation ''dddd''.

''Precision'' specifies the minimum number of digits to appear. 
The default precision is {{c|1}}. 
If both the converted value and the precision are {{c|0}} the conversion results in no characters.
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
| {{n/a}}
|-
! {{tt|f}}&lt;br&gt; {{tt|F}}
| style=&quot;text-align:left;&quot; | 
:converts '''floating-point number''' to the decimal notation in the style ''[-]ddd.ddd''.

''Precision'' specifies the minimum number of digits to appear after the decimal point character. 
The default precision is {{c|6}}.
In the ''alternative implementation'' decimal point character is written even if no digits follow it.
For infinity and not-a-number conversion style see notes.
| {{n/a}}
| {{n/a}}
| rowspan=4 | {{vertical|{{c|double}}}}
| rowspan=4 | {{vertical|{{c|double}} {{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| rowspan=4 | {{vertical|{{c|long double}}}}
|-
! {{tt|e}} &lt;br&gt; {{tt|E}}
| style=&quot;text-align:left;&quot; | 
:converts '''floating-point number''' to the decimal exponent notation.

For the {{ttb|e}} conversion style ''[-]d.ddd''{{ttb|e}}''±dd'' is used.&lt;br&gt;
For the {{ttb|E}} conversion style ''[-]d.ddd''{{ttb|E}}''±dd'' is used.&lt;br&gt;
The exponent contains at least two digits, more digits are used only if necessary. 
If the value is {{c|0}}, the exponent is also {{c|0}}.
''Precision'' specifies the minimum number of digits to appear after the decimal point character.
The default precision is {{c|6}}.
In the ''alternative implementation'' decimal point character is written even if no digits follow it.
For infinity and not-a-number conversion style see notes.
| {{n/a}}
| {{n/a}}
&lt;!-- --&gt;
&lt;!-- --&gt;
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
&lt;!-- --&gt;
|-
! {{tt|a}} &lt;br&gt; {{tt|A}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
| style=&quot;text-align:left;&quot; | 
:converts '''floating-point number''' to the hexadecimal exponent notation.

For the {{ttb|a}} conversion style ''[-]''{{ttb|0x}}''h.hhh''{{ttb|p}}''±d'' is used.&lt;br&gt;
For the {{ttb|A}} conversion style ''[-]''{{ttb|0X}}''h.hhh''{{ttb|P}}''±d'' is used.&lt;br&gt;
The first hexadecimal digit is {{tt|0}} if the argument is not a normalized floating point value.
If the value is {{c|0}}, the exponent is also {{c|0}}.
''Precision'' specifies the minimum number of digits to appear after the decimal point character.
The default precision is sufficient for exact representation of the value.
In the ''alternative implementation'' decimal point character is written even if no digits follow it.
For infinity and not-a-number conversion style see notes.
| {{n/a}}
| {{n/a}}
&lt;!-- --&gt;
&lt;!-- --&gt;
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
&lt;!-- --&gt;
|-
! {{tt|g}} &lt;br&gt; {{tt|G}}
| style=&quot;text-align:left;&quot; | 
:converts '''floating-point number''' to decimal or decimal exponent notation depending on the value and the ''precision''.

For the {{ttb|g}} conversion style conversion with style {{ttb|e}} or {{ttb|f}} will be performed.&lt;br&gt;
For the {{ttb|G}} conversion style conversion with style {{ttb|E}} or {{ttb|F}} will be performed.&lt;br&gt;
Let {{tt|P}} equal the precision if nonzero, {{c|6}} if the precision is not specified, or {{c|1}} if the precision is {{c|0}}. Then, if a conversion with style {{tt|E}} would have an exponent of {{tt|X}}:

* if ''P &gt; X ≥ −4'', the conversion is with style {{ttb|f}} or {{ttb|F}} and precision ''P − 1 − X''.
* otherwise, the conversion is with style {{ttb|e}} or {{ttb|E}} and precision ''P − 1''.

Unless ''alternative representation'' is requested the trailing zeros are removed, also the decimal point character is removed if no fractional part is left.
For infinity and not-a-number conversion style see notes.
| {{n/a}}
| {{n/a}}
&lt;!-- --&gt;
&lt;!-- --&gt;
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
&lt;!-- --&gt;
|-
! {{tt|n}}
| style=&quot;text-align:left;&quot; | 
:returns the '''number of characters written''' so far by this call to the function.

The result is ''written'' to the value pointed to by the argument. 
The specification may not contain any ''flag'', ''field width'', or ''precision''.
| {{vertical|{{c|signed char*}}}}
| {{vertical|{{c|short*}}}}
| {{vertical|{{c|int*}}}}
| {{vertical|{{c|long*}}}}
| {{vertical|{{c|long long*}}}}
| {{vertical|{{c|intmax_t*}}}}
| {{vertical|signed {{c|size_t*}}}}
| {{vertical|{{c|ptrdiff_t*}}}}
| {{n/a}}

|-
! {{tt|p}}
| style=&quot;text-align:left;&quot; | writes an implementation defined character sequence defining a '''pointer'''. 
| {{n/a}}
| {{n/a}}
| {{c|void*}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
|}
The floating point conversion functions convert infinity to {{tt|inf}} or {{tt|infinity}}. Which one is used is implementation defined.

Not-a-number is converted to {{tt|nan}} or {{tt|nan(''char_sequence'')}}. Which one is used is implementation defined.

The conversions {{ttb|F}}, {{ttb|E}}, {{ttb|G}}, {{ttb|A}} output {{tt|INF}}, {{tt|INFINITY}}, {{tt|NAN}} instead.

Even though {{tt|%c}} expects {{tt|int}} argument, it is safe to pass a {{tt|char}} because of the integer promotion that takes place when a variadic function is called.

The correct conversion specifications for the fixed-width character types ({{lc|int8_t}}, etc) are defined in the header {{#ifeq:{{get lang}}|c|[[c/types/integer|&lt;inttypes.h&gt;]]|[[cpp/types/integer|&lt;cinttypes&gt;]]}} (although {{lc|PRIdMAX}}, {{lc|PRIuMAX}}, etc is synonymous with {{tt|%jd}}, {{tt|%ju}}, etc).

The memory-writing conversion specifier {{c|%n}} is a common target of security exploits where format strings depend on user input and is not supported by the bounds-checked {{tt|printf_s}} family of functions.

There is a [[{{get lang}}/language/eval_order|sequence point]] after the action of each conversion specifier; this permits storing multiple {{c|%n}} results in the same variable or, as an edge case, printing a string modified by an earlier {{c|%n}} within the same call.

If a conversion specification is invalid, the behavior is undefined.</text>
      <sha1>mcdnt5piaiqmfcajq5fg7f96a238yg2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/printf posix note</title>
    <ns>10</ns>
    <id>15719</id>
    <revision>
      <id>88107</id>
      <timestamp>2016-11-02T13:31:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>extended posix note for printf</comment>
      <text xml:space="preserve" bytes="292">[http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html POSIX specifies] that {{lc|errno}} is set on error. It also specifies additional conversion specifications, most notably support for argument reordering ({{c|n$}} immediately after {{c|%}} indicates {{tt|n}}'th argument)</text>
      <sha1>4puhnmpc8o47b0vgfd5w3lzp8r05ffe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/c/scanf format</title>
    <ns>10</ns>
    <id>1528</id>
    <revision>
      <id>92028</id>
      <parentid>89892</parentid>
      <timestamp>2017-04-02T16:30:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+more fear in the note about the danger of %s and %[</comment>
      <text xml:space="preserve" bytes="11027">The format string consists of 
* non-whitespace {{#if:{{{wcs|}}}|wide|multibyte}} characters except {{ttb|%}}: each such character in the format string consumes exactly one identical character from the input stream, or causes the function to fail if the next character on the stream does not compare equal.
* whitespace characters: any single whitespace character in the format string consumes all available consecutive whitespace characters from the input (determined as if by calling {{#if:{{{wcs|}}}|{{ltt|{{get lang}}/string/wide/iswspace}}|{{ltt|{{get lang}}/string/byte/isspace}}}} in a loop). Note that there is no difference between {{c|&quot;\n&quot;}}, {{c|&quot; &quot;}}, {{c|&quot;\t\t&quot;}}, or other whitespace in the format string.
* conversion specifications. Each conversion specification has the following format:

:* introductory {{ttb|%}} character

:* {{mark optional}} assignment-suppressing character {{ttb|*}}. If this option is present, the function does not assign the result of the conversion to any receiving argument.

:* {{mark optional}} integer number (greater than zero) that specifies ''maximum field width'', that is, the maximum number of characters that the function is allowed to consume when doing the conversion specified by the current conversion specification. Note that %s and %[ may lead to buffer overflow if the width is not provided.

:* {{mark optional}} ''length modifier'' that specifies the size of the receiving argument, that is, the actual destination type. This affects the conversion accuracy and overflow rules. The default destination type is different for each conversion type (see table below).

:* conversion format specifier

The following format specifiers are available:

{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! rowspan=1 | Conversion&lt;br&gt; specifier
! rowspan=1 | Explanation
! colspan=9 | Argument type
|-
! colspan=2 style=&quot;text-align:right; font-weight:normal;&quot; | length modifier
&lt;!-- --&gt;
! {{tt|hh}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{tt|h}}
! style=&quot;font-weight:normal;&quot; | (none)
! {{ttb|l}}
! {{ttb|ll}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|j}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|z}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|t}}
{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}
! {{ttb|L}}
|-
! {{tt|%}}
| style=&quot;text-align:left;&quot; | matches literal {{ttb|%}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
|-
! {{tt|c}}
| style=&quot;text-align:left;&quot; |
: matches a '''character''' or a sequence of '''characters'''
If a width specifier is used, matches exactly ''width'' {{#if:{{{wcs|}}}|wide}} characters (the argument must be a pointer to an array with sufficient room). Unlike %s and %[, does not append the null character to the array.
| rowspan=3 {{n/a}}
| rowspan=3 {{n/a}}
| rowspan=3 | {{vertical|{{c|char*}}}}
| rowspan=3 | {{vertical|{{c|wchar_t*}}}}
| rowspan=3 {{n/a}}
| rowspan=3 {{n/a}}
| rowspan=3 {{n/a}}
| rowspan=3 {{n/a}}
| rowspan=3 {{n/a}}
|-
! {{tt|s}}
| style=&quot;text-align:left;&quot; |
: matches a sequence of non-whitespace characters (a '''string''')
If width specifier is used, matches up to ''width'' or until the first whitespace character, whichever appears first. Always stores a null character in addition to the characters matched (so the argument array must have room for at least ''width+1'' characters)
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|-
! {{tt|[}}{{spar|set}}{{tt|]}}
| style=&quot;text-align:left;&quot; | 
:matches a non-empty sequence of character from {{spar|set}} of characters.

If the first character of the set is {{tt|^}}, then all characters not in the set are matched. If the set begins with {{tt|]}} or {{tt|^]}} then the {{tt|]}} character is also included into the set. It is implementation-defined whether the character {{tt|-}} in the non-initial position in the scanset may be indicating a range, as in {{tt|[0-9]}}. If width specifier is used, matches only up to ''width''. Always stores a null character in addition to the characters matched (so the argument array must have room for at least ''width+1'' characters)
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|-
! {{tt|d}}  
| style=&quot;text-align:left;&quot; |
:matches a '''decimal integer'''.

The format of the number is the same as expected by {{#if:{{{wcs|}}}|{{ltf|{{get lang}}/string/wide/wcstol}}|{{ltf|{{get lang}}/string/byte/strtol}}}} with the value {{c|10}} for the {{tt|base}} argument
| rowspan=6 | {{vertical|{{c|signed char*}} or {{c|unsigned char*}}}}
| rowspan=6 | {{vertical|{{c|signed short*}} or {{c|unsigned short*}}}}
| rowspan=6 | {{vertical|{{c|signed int*}} or {{c|unsigned int*}}}}
| rowspan=6 | {{vertical|{{c|signed long*}} or {{c|unsigned long*}}}}
| rowspan=6 | {{vertical|{{c|signed long long*}} or {{c|unsigned long long*}}}}
| rowspan=6 | {{vertical|{{c|intmax_t*}} or {{c|uintmax_t*}}}}
| rowspan=6 | {{vertical|{{c|size_t*}}}}
| rowspan=6 | {{vertical|{{c|ptrdiff_t*}}}}
| rowspan=6 {{n/a}}
|-
! {{tt|i}}
| style=&quot;text-align:left;&quot; |
:matches an '''integer'''.

The format of the number is the same as expected by {{#if:{{{wcs|}}}|{{ltf|{{get lang}}/string/wide/wcstol}}|{{ltf|{{get lang}}/string/byte/strtol}}}} with the value {{c|0}} for the {{tt|base}} argument (base is determined by the first characters parsed)
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|-
! {{tt|u}}
| style=&quot;text-align:left;&quot; |
:matches an unsigned '''decimal integer'''. 

The format of the number is the same as expected by {{#if:{{{wcs|}}}|{{ltf|{{get lang}}/string/wide/wcstoul}}|{{ltf|{{get lang}}/string/byte/strtoul}}}} with the value {{c|10}} for the {{tt|base}} argument.
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|-
! {{tt|o}}
| style=&quot;text-align:left;&quot; | 
:matches an unsigned '''octal integer'''.

The format of the number is the same as expected by {{#if:{{{wcs|}}}|{{ltf|{{get lang}}/string/wide/wcstoul}}|{{ltf|{{get lang}}/string/byte/strtoul}}}} with the value {{c|8}} for the {{tt|base}} argument
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|-
! {{tt|x}}, {{tt|X}}
| style=&quot;text-align:left;&quot; | 
:matches an unsigned '''hexadecimal integer'''.

The format of the number is the same as expected by {{#if:{{{wcs|}}}|{{ltf|{{get lang}}/string/wide/wcstoul}}|{{ltf|{{get lang}}/string/byte/strtoul}}}} with the value {{c|16}} for the {{tt|base}} argument
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|-
! {{tt|n}}
| style=&quot;text-align:left;&quot; |
:returns the '''number of characters read so far'''.

No input is consumed. Does not increment the assignment count. If the specifier has assignment-suppressing operator defined, the behavior is undefined
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|-
! {{tt|a}}, {{tt|A}}{{#ifeq:{{get lang}}|c|{{mark c99}}|{{mark c++11}}}}&lt;br&gt; {{tt|e}}, {{tt|E}}&lt;br&gt; {{tt|f}}, {{tt|F}}&lt;br&gt; {{tt|g}}, {{tt|G}}
| style=&quot;text-align:left;&quot; | 
:matches a '''floating-point number'''.

The format of the number is the same as expected by {{#if:{{{wcs|}}}|{{ltf|{{get lang}}/string/wide/wcstof}}|{{ltf|{{get lang}}/string/byte/strtof}}}}
| {{n/a}}
| {{n/a}}
| {{vertical|{{c|float*}}}}
| {{vertical|{{c|double*}}}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{vertical|{{c|long double*}}}}
|-
! {{tt|p}}
| style=&quot;text-align:left;&quot; | 
:matches implementation defined character sequence defining a '''pointer'''.

{{tt|printf}} family of functions should produce the same sequence using {{ttb|%p}} format specifier
| {{n/a}}
| {{n/a}}
| {{vertical|{{c|void**}}}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
| {{n/a}}
|}
For every conversion specifier other than {{tt|n}}, the longest sequence of input characters which does not exceed any speciﬁed ﬁeld width and which either is exactly what the conversion specifier expects or is a prefix of a sequence it would expect, is what's consumed from the stream. The ﬁrst character, if any, after this consumed sequence remains unread. If the consumed sequence has length zero or if the consumed sequence cannot be converted as specified above, the matching failure occurs unless end-of-ﬁle, an encoding error, or a read error prevented input from the stream, in which case it is an input failure.

All conversion specifiers other than {{tt|[}}, {{tt|c}}, and {{tt|n}} consume and discard all leading whitespace characters (determined as if by calling {{#if:{{{wcs|}}}|{{ltt|{{get lang}}/string/wide/iswspace}}|{{ltt|{{get lang}}/string/byte/isspace}}}}) before attempting to parse the input. These consumed characters do not count towards the specified maximum field width.

{{#if:{{{wcs|}}}
|If the length specifier {{tt|l}} is not used, the conversion specifiers {{tt|c}}, {{tt|s}}, and {{tt|[}} perform wide-to-multibyte character conversion as if by calling {{ltf|{{get lang}}/string/multibyte/wcrtomb}} with an {{ltt|{{get lang}}/string/multibyte/mbstate_t}} object initialized to zero before the first character is converted.
|The conversion specifiers {{tt|lc}}, {{tt|ls}}, and {{tt|l[}} perform multibyte-to-wide character conversion as if by calling {{ltf|{{get lang}}/string/multibyte/mbrtowc}} with an {{ltt|{{get lang}}/string/multibyte/mbstate_t}} object initialized to zero before the first character is converted.
}}

The conversion specifiers {{tt|s}} and {{tt|[}} always store the null terminator in addition to the matched characters. The size of the destination array must be at least one greater than the specified field width. The use of {{c|%s}} or {{c|%[}}, without specifying the destination array size, is as unsafe as {{#ifeq:{{get lang}}|c|{{lc|gets}}|{{lc|std::gets}}}}

The correct conversion specifications for the [[{{get lang}}/types/integer|fixed-width integer types]] ({{tt|int8_t}}, etc) are defined in the header {{#ifeq:{{get lang}}|c|[[c/types/integer|&lt;inttypes.h&gt;]]|[[cpp/types/integer|&lt;cinttypes&gt;]]}} (although {{ltt|{{get lang}}/types/integer|SCNdMAX}}, {{ltt|{{get lang}}/types/integer|SCNuMAX}}, etc is synonymous with {{tt|%jd}}, {{tt|%ju}}, etc).

There is a [[{{get lang}}/language/eval_order|sequence point]] after the action of each conversion specifier; this permits storing multiple fields in the same &quot;sink&quot; variable.

When parsing an incomplete floating-point value that ends in the exponent with no digits, such as parsing {{c|&quot;100er&quot;}} with the conversion specifier {{c|%f}}, the sequence {{c|&quot;100e&quot;}} (the longest prefix of a possibly valid floating-point number) is consumed, resulting in a matching error (the consumed sequence cannot be converted to a floating-point number), with {{c|&quot;r&quot;}} remaining. Existing implementations do not follow this rule and roll back to consume only {{c|&quot;100&quot;}}, leaving {{c|&quot;er&quot;}}, e.g. [https://sourceware.org/bugzilla/show_bug.cgi?id=1765 glibc bug 1765]</text>
      <sha1>c773lszn71fcu0cqwcwqtcw3diic71j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc allocator type</title>
    <ns>10</ns>
    <id>1572</id>
    <revision>
      <id>56319</id>
      <parentid>52871</parentid>
      <timestamp>2013-06-01T05:34:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list allocator type]] to [[Template:cpp/io/dsc allocator type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc | {{tt|allocator_type}} | {{c|Allocator}} {{mark since c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc cerr</title>
    <ns>10</ns>
    <id>4281</id>
    <revision>
      <id>56321</id>
      <parentid>52872</parentid>
      <timestamp>2013-06-01T05:34:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list cerr]] to [[Template:cpp/io/dsc cerr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc | {{dsc member | cpp/io/cerr | cerr&lt;br&gt;wcerr }} | writes to the standard C error stream {{lc|stderr}}, unbuffered&lt;br&gt;{{mark|global object}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc char type</title>
    <ns>10</ns>
    <id>1573</id>
    <revision>
      <id>56323</id>
      <parentid>52873</parentid>
      <timestamp>2013-06-01T05:34:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list char type]] to [[Template:cpp/io/dsc char type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="40">{{dsc | {{tt|char_type}} | {{c|CharT}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc cin</title>
    <ns>10</ns>
    <id>4279</id>
    <revision>
      <id>56325</id>
      <parentid>52874</parentid>
      <timestamp>2013-06-01T05:34:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list cin]] to [[Template:cpp/io/dsc cin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc | {{dsc member | cpp/io/cin | cin&lt;br&gt;wcin }} | reads from the standard C input stream {{lc|stdin}} &lt;br&gt;{{mark|global object}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc clog</title>
    <ns>10</ns>
    <id>4282</id>
    <revision>
      <id>56327</id>
      <parentid>52875</parentid>
      <timestamp>2013-06-01T05:34:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list clog]] to [[Template:cpp/io/dsc clog]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc | {{dsc member | cpp/io/clog | clog&lt;br&gt;wclog }} | writes to the standard C error stream {{lc|stderr}}&lt;br&gt;{{mark|global object}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc cout</title>
    <ns>10</ns>
    <id>4280</id>
    <revision>
      <id>56329</id>
      <parentid>52876</parentid>
      <timestamp>2013-06-01T05:34:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list cout]] to [[Template:cpp/io/dsc cout]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc | {{dsc member | cpp/io/cout | cout&lt;br&gt;wcout }} | writes to the standard C output stream {{lc|stdout}}&lt;br&gt;{{mark|global object}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc int type</title>
    <ns>10</ns>
    <id>1574</id>
    <revision>
      <id>56331</id>
      <parentid>52877</parentid>
      <timestamp>2013-06-01T05:34:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list int type]] to [[Template:cpp/io/dsc int type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">{{dsc | {{tt|int_type}} | {{c|Traits::int_type}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc io errc</title>
    <ns>10</ns>
    <id>4771</id>
    <revision>
      <id>56333</id>
      <parentid>52878</parentid>
      <timestamp>2013-06-01T05:34:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list io errc]] to [[Template:cpp/io/dsc io errc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc enum | cpp/io/io_errc  | notes={{mark c++11}} | the IO stream error codes}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc iostream category</title>
    <ns>10</ns>
    <id>4772</id>
    <revision>
      <id>56335</id>
      <parentid>52879</parentid>
      <timestamp>2013-06-01T05:34:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list iostream category]] to [[Template:cpp/io/dsc iostream category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc fun | cpp/io/iostream_category  | notes={{mark c++11}} | identifies the iostream error category}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc off type</title>
    <ns>10</ns>
    <id>1575</id>
    <revision>
      <id>56337</id>
      <parentid>52880</parentid>
      <timestamp>2013-06-01T05:35:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list off type]] to [[Template:cpp/io/dsc off type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">{{dsc | {{tt|off_type}} | {{c|Traits::off_type}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc pos type</title>
    <ns>10</ns>
    <id>1576</id>
    <revision>
      <id>56341</id>
      <parentid>52881</parentid>
      <timestamp>2013-06-01T05:35:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list pos type]] to [[Template:cpp/io/dsc pos type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">{{dsc | {{tt|pos_type}} | {{c|Traits::pos_type}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/dsc traits type</title>
    <ns>10</ns>
    <id>1577</id>
    <revision>
      <id>56345</id>
      <parentid>52882</parentid>
      <timestamp>2013-06-01T05:35:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/dcl list traits type]] to [[Template:cpp/io/dsc traits type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">{{dsc | {{tt|traits_type}} | {{c|Traits}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/fpos/navbar</title>
    <ns>10</ns>
    <id>9648</id>
    <revision>
      <id>44949</id>
      <timestamp>2012-12-05T15:43:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="223">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/fpos/navbar heading
|content3 = cpp/io/fpos/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/fpos/navbar content</title>
    <ns>10</ns>
    <id>9650</id>
    <revision>
      <id>52883</id>
      <parentid>44951</parentid>
      <timestamp>2013-06-01T04:55:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="86">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/fpos/state}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/fpos/navbar heading</title>
    <ns>10</ns>
    <id>9649</id>
    <revision>
      <id>44950</id>
      <timestamp>2012-12-05T15:44:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="33">{{ltt | cpp/io/fpos | std::fpos}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/fpos/title</title>
    <ns>10</ns>
    <id>9647</id>
    <revision>
      <id>44948</id>
      <timestamp>2012-12-05T15:42:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">&lt;onlyinclude&gt;{{cpp/title | n=fpos::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/io errc/dsc is error code enum</title>
    <ns>10</ns>
    <id>12642</id>
    <revision>
      <id>61380</id>
      <timestamp>2013-06-05T22:30:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="217">{{dsc tclass | cpp/io/io_errc/is_error_code_enum  | title=is_error_code_enum{{dsc small|&lt;std::io_errc&gt;}}| notes={{mark c++11}} | extends the type trait {{lc|std::is_error_code_enum}} to identify iostream error codes}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/io errc/dsc make error code</title>
    <ns>10</ns>
    <id>12640</id>
    <revision>
      <id>61378</id>
      <timestamp>2013-06-05T22:30:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="155">{{dsc fun | cpp/io/io_errc/make_error_code | title=make_error_code{{dsc small|(std::io_errc)}} | notes={{mark c++11}} | constructs an iostream error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/io errc/dsc make error condition</title>
    <ns>10</ns>
    <id>12641</id>
    <revision>
      <id>61379</id>
      <timestamp>2013-06-05T22:30:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="171">{{dsc fun | cpp/io/io_errc/make_error_condition  | title=make_error_condition{{dsc small|(std::io_errc)}} | notes={{mark c++11}} | constructs an iostream error_condition}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/io errc/navbar</title>
    <ns>10</ns>
    <id>4789</id>
    <revision>
      <id>39923</id>
      <parentid>35686</parentid>
      <timestamp>2012-09-28T20:10:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="229">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/io_errc/navbar heading
|content3 = cpp/io/io_errc/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/io errc/navbar content</title>
    <ns>10</ns>
    <id>4791</id>
    <revision>
      <id>61382</id>
      <parentid>52884</parentid>
      <timestamp>2013-06-05T22:31:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>reorder</comment>
      <text xml:space="preserve" bytes="370">{{nv begin}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/io/io_errc/make_error_code | make_error_code{{dsc small|(std::io_errc)}} }}
{{nv ln | cpp/io/io_errc/make_error_condition | make_error_condition{{dsc small|(std::io_errc)}} }}

{{nv h1 | Helper classes}}
{{nv ln | cpp/io/io_errc/is_error_code_enum | is_error_code_enum{{dsc small|&lt;std::io_errc&gt;}} }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/io errc/navbar heading</title>
    <ns>10</ns>
    <id>4790</id>
    <revision>
      <id>35006</id>
      <parentid>17387</parentid>
      <timestamp>2012-06-15T22:16:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/io errc/sidebar heading]] to [[Template:cpp/io/io errc/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="39">{{ltt | cpp/io/io_errc | std::io_errc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc Init</title>
    <ns>10</ns>
    <id>1532</id>
    <revision>
      <id>56349</id>
      <parentid>52885</parentid>
      <timestamp>2013-06-01T05:35:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list Init]] to [[Template:cpp/io/ios base/dsc Init]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem class | cpp/io/ios_base/Init | initializes standard stream objects }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc constructor</title>
    <ns>10</ns>
    <id>1533</id>
    <revision>
      <id>56353</id>
      <parentid>52886</parentid>
      <timestamp>2013-06-01T05:35:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list constructor]] to [[Template:cpp/io/ios base/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc prot mem ctor | cpp/io/ios_base/ios_base | constructs the object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc destructor</title>
    <ns>10</ns>
    <id>1534</id>
    <revision>
      <id>56358</id>
      <parentid>52887</parentid>
      <timestamp>2013-06-01T05:35:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list destructor]] to [[Template:cpp/io/ios base/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem vdtor | cpp/io/ios_base/~ios_base | destructs the object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc event</title>
    <ns>10</ns>
    <id>1562</id>
    <revision>
      <id>56363</id>
      <parentid>52888</parentid>
      <timestamp>2013-06-01T05:35:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list event]] to [[Template:cpp/io/ios base/dsc event]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">{{dsc enum | cpp/io/ios_base/event | specifies event type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc event callback</title>
    <ns>10</ns>
    <id>1563</id>
    <revision>
      <id>56367</id>
      <parentid>52889</parentid>
      <timestamp>2013-06-01T05:35:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list event callback]] to [[Template:cpp/io/ios base/dsc event callback]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc typedef | cpp/io/ios_base/event_callback | callback function type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc failure</title>
    <ns>10</ns>
    <id>1535</id>
    <revision>
      <id>56371</id>
      <parentid>52890</parentid>
      <timestamp>2013-06-01T05:35:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list failure]] to [[Template:cpp/io/ios base/dsc failure]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">{{dsc mem class | cpp/io/ios_base/failure | stream exception }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc flags</title>
    <ns>10</ns>
    <id>1536</id>
    <revision>
      <id>56375</id>
      <parentid>52891</parentid>
      <timestamp>2013-06-01T05:35:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list flags]] to [[Template:cpp/io/ios base/dsc flags]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">{{dsc mem fun | cpp/io/ios_base/flags | manages format flags }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc fmtflags</title>
    <ns>10</ns>
    <id>1564</id>
    <revision>
      <id>56379</id>
      <parentid>52892</parentid>
      <timestamp>2013-06-01T05:35:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list fmtflags]] to [[Template:cpp/io/ios base/dsc fmtflags]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="145">{{dsc typedef | cpp/io/ios_base/fmtflags | formatting flags type

The following constants are also defined:
{{cpp/io/ios_base/fmtflags consts}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc getloc</title>
    <ns>10</ns>
    <id>1537</id>
    <revision>
      <id>56383</id>
      <parentid>52893</parentid>
      <timestamp>2013-06-01T05:35:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list getloc]] to [[Template:cpp/io/ios base/dsc getloc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/io/ios_base/getloc | returns current locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc imbue</title>
    <ns>10</ns>
    <id>1538</id>
    <revision>
      <id>56387</id>
      <parentid>52894</parentid>
      <timestamp>2013-06-01T05:35:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list imbue]] to [[Template:cpp/io/ios base/dsc imbue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">{{dsc mem fun | cpp/io/ios_base/imbue | sets locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc iostate</title>
    <ns>10</ns>
    <id>1565</id>
    <revision>
      <id>56391</id>
      <parentid>52895</parentid>
      <timestamp>2013-06-01T05:35:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list iostate]] to [[Template:cpp/io/ios base/dsc iostate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="146">{{dsc typedef | cpp/io/ios_base/iostate | state of the stream type

The following constants are also defined:
{{cpp/io/ios_base/iostate consts}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc iword</title>
    <ns>10</ns>
    <id>1539</id>
    <revision>
      <id>56396</id>
      <parentid>52896</parentid>
      <timestamp>2013-06-01T05:35:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list iword]] to [[Template:cpp/io/ios base/dsc iword]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem fun | cpp/io/ios_base/iword | resizes the private storage if necessary and access to the {{c|long}} element at the given index}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc openmode</title>
    <ns>10</ns>
    <id>1566</id>
    <revision>
      <id>56400</id>
      <parentid>52897</parentid>
      <timestamp>2013-06-01T05:35:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list openmode]] to [[Template:cpp/io/ios base/dsc openmode]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="145">{{dsc typedef | cpp/io/ios_base/openmode | stream open mode type

The following constants are also defined:
{{cpp/io/ios_base/openmode consts}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc precision</title>
    <ns>10</ns>
    <id>1540</id>
    <revision>
      <id>56405</id>
      <parentid>52898</parentid>
      <timestamp>2013-06-01T05:35:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list precision]] to [[Template:cpp/io/ios base/dsc precision]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/io/ios_base/precision | manages decimal precision of floating point operations }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc pword</title>
    <ns>10</ns>
    <id>1541</id>
    <revision>
      <id>56409</id>
      <parentid>52899</parentid>
      <timestamp>2013-06-01T05:35:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list pword]] to [[Template:cpp/io/ios base/dsc pword]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/io/ios_base/pword | resizes the private storage if necessary and access to the {{c|void*}} element at the given index}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc register callback</title>
    <ns>10</ns>
    <id>1542</id>
    <revision>
      <id>56413</id>
      <parentid>52900</parentid>
      <timestamp>2013-06-01T05:35:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list register callback]] to [[Template:cpp/io/ios base/dsc register callback]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/io/ios_base/register_callback | registers event callback function }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc seekdir</title>
    <ns>10</ns>
    <id>1567</id>
    <revision>
      <id>56417</id>
      <parentid>52901</parentid>
      <timestamp>2013-06-01T05:35:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list seekdir]] to [[Template:cpp/io/ios base/dsc seekdir]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc typedef | cpp/io/ios_base/seekdir | seeking direction type

The following constants are also defined:
{{cpp/io/ios_base/seekdir consts}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc setf</title>
    <ns>10</ns>
    <id>1543</id>
    <revision>
      <id>56422</id>
      <parentid>52902</parentid>
      <timestamp>2013-06-01T05:35:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list setf]] to [[Template:cpp/io/ios base/dsc setf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/io/ios_base/setf | mem={{{mem|}}} | sets specific format flag }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc sync with stdio</title>
    <ns>10</ns>
    <id>1544</id>
    <revision>
      <id>56427</id>
      <parentid>52903</parentid>
      <timestamp>2013-06-01T05:36:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list sync with stdio]] to [[Template:cpp/io/ios base/dsc sync with stdio]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem sfun | cpp/io/ios_base/sync_with_stdio | sets whether C++ and C IO libraries are interoperable }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc unsetf</title>
    <ns>10</ns>
    <id>1545</id>
    <revision>
      <id>56432</id>
      <parentid>52904</parentid>
      <timestamp>2013-06-01T05:36:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list unsetf]] to [[Template:cpp/io/ios base/dsc unsetf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/io/ios_base/unsetf | clears specific format flag }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc width</title>
    <ns>10</ns>
    <id>1546</id>
    <revision>
      <id>56436</id>
      <parentid>52905</parentid>
      <timestamp>2013-06-01T05:36:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list width]] to [[Template:cpp/io/ios base/dsc width]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/io/ios_base/width | manages field width|mem={{{mem|}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/dsc xalloc</title>
    <ns>10</ns>
    <id>1547</id>
    <revision>
      <id>56441</id>
      <parentid>52906</parentid>
      <timestamp>2013-06-01T05:36:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/dcl list xalloc]] to [[Template:cpp/io/ios base/dsc xalloc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem sfun | cpp/io/ios_base/xalloc | returns a program-wide unique integer that is safe to use as index to pword() and iword() }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/failure/dsc constructor</title>
    <ns>10</ns>
    <id>1548</id>
    <revision>
      <id>62097</id>
      <parentid>56445</parentid>
      <timestamp>2013-06-22T02:02:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>inlinemem=true</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem ctor | cpp/io/ios_base/failure | inlinemem=true | constructs the exception object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/failure/navbar</title>
    <ns>10</ns>
    <id>1551</id>
    <revision>
      <id>39924</id>
      <parentid>35688</parentid>
      <timestamp>2012-09-28T20:10:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/ios_base/failure/navbar heading
|content3 = cpp/io/ios_base/failure/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/failure/navbar content</title>
    <ns>10</ns>
    <id>1552</id>
    <revision>
      <id>52908</id>
      <parentid>35689</parentid>
      <timestamp>2013-06-01T04:55:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="100">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/ios_base/failure/failure}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/failure/navbar heading</title>
    <ns>10</ns>
    <id>1553</id>
    <revision>
      <id>37262</id>
      <parentid>35690</parentid>
      <timestamp>2012-07-03T17:35:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="49">{{ltt|cpp/io/ios_base/failure|ios_base::failure}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/failure/title</title>
    <ns>10</ns>
    <id>2788</id>
    <revision>
      <id>10608</id>
      <parentid>10607</parentid>
      <timestamp>2011-09-18T22:45:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/io/ios_base/title | n=failure::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/fmtflags consts</title>
    <ns>10</ns>
    <id>1554</id>
    <revision>
      <id>70864</id>
      <parentid>70863</parentid>
      <timestamp>2014-05-31T12:25:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>manipulator pages have more info: linking each manipulator page from fmtflag line</comment>
      <text xml:space="preserve" bytes="2616">{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|dec}} | use decimal base for integer I/O: see {{lc|std::dec}}}}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|oct}} | use octal base for integer I/O: see {{lc|std::oct}}}}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|hex}} | use hexadecimal base for integer I/O: see {{lc|std::hex}}}}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|basefield}} | {{c|dec{{!}}oct{{!}}hex{{!}}0}}. Useful for masking operations}}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|left}} |  left adjustment (adds fill characters to the right): see {{lc|std::left}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|right}} | right adjustment (adds fill characters to the left): see {{lc|std::right}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|internal}} | internal adjustment (adds fill characters to the internal designated point): see {{lc|std::internal}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|adjustfield}} | {{c|left{{!}}right{{!}}internal}}. Useful for masking operations }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|scientific}} |  generate floating point types using scientific notation, or hex notation if combined with fixed: see {{lc|std::scientific}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|fixed}} | generate floating point types using fixed notation, or hex notation if combined with scientific: see {{lc|std::fixed}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|floatfield}} | {{c|scientific{{!}}fixed{{!}}(scientific{{!}}fixed){{!}}0}}. Useful for masking operations }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|boolalpha}} |  insert and extract {{c|bool}} type in alphanumeric format: see {{lc|std::boolalpha}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|showbase}} | generate a prefix indicating the numeric base for integer output, require the currency indicator in monetary I/O: see {{lc|std::showbase}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|showpoint}} | generate a decimal-point character unconditionally for floating-point number output: see {{lc|std::showpoint}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|showpos}} | generate a {{c|+}} character for non-negative numeric output: see {{lc|std::showpos}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|skipws}} | skip leading whitespace before certain input operations: see {{lc|std::skipws}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|unitbuf}} | flush the output after each output operation: see {{lc|std::unitbuf}} }}
{{dsc | {{ltt|cpp/io/ios_base/fmtflags|uppercase}} | replace certain lowercase letters with their uppercase&lt;br&gt;equivalents in certain output output operations: see {{lc|std::uppercase}} }}
{{dsc end}}</text>
      <sha1>opx1u3wzja6bxlfsxw7majhqpjzs88s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/inherit</title>
    <ns>10</ns>
    <id>1555</id>
    <revision>
      <id>60883</id>
      <parentid>52910</parentid>
      <timestamp>2013-06-01T11:59:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1207">{{inherited | [[cpp/io/ios_base | {{small|std::}}ios_base]] |
===Member functions===
{{dsc begin}}

{{dsc h2 | Formatting}}
{{dsc inc | cpp/io/ios_base/dsc flags}}
{{dsc inc | cpp/io/ios_base/dsc setf}}
{{dsc inc | cpp/io/ios_base/dsc unsetf}}
{{dsc inc | cpp/io/ios_base/dsc precision}}
{{dsc inc | cpp/io/ios_base/dsc width}}

{{dsc h2 | Locales}}
{{dsc inc | cpp/io/ios_base/dsc imbue}}
{{dsc inc | cpp/io/ios_base/dsc getloc}}

{{dsc h2 | Internal extensible array}}
{{dsc inc | cpp/io/ios_base/dsc xalloc}}
{{dsc inc | cpp/io/ios_base/dsc iword}}
{{dsc inc | cpp/io/ios_base/dsc pword}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/io/ios_base/dsc register_callback}}
{{dsc inc | cpp/io/ios_base/dsc sync_with_stdio}}

{{dsc h2 | Member classes}}
{{dsc inc | cpp/io/ios_base/dsc failure}}
{{dsc inc | cpp/io/ios_base/dsc Init}}
{{dsc end}}

{{dsc begin}}
{{dsc h1 | Member types and constants}}
{{dsc hitem | Type | Explanation}}
{{dsc inc | cpp/io/ios_base/dsc openmode}}
{{dsc inc | cpp/io/ios_base/dsc fmtflags}}
{{dsc inc | cpp/io/ios_base/dsc iostate}}
{{dsc inc | cpp/io/ios_base/dsc seekdir}}
{{dsc inc | cpp/io/ios_base/dsc event}}
{{dsc inc | cpp/io/ios_base/dsc event_callback}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/iostate consts</title>
    <ns>10</ns>
    <id>1556</id>
    <revision>
      <id>52911</id>
      <parentid>36510</parentid>
      <timestamp>2013-06-01T04:56:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="423">{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{ltt|cpp/io/ios_base/iostate|goodbit}} | no error }}
{{dsc | {{ltt|cpp/io/ios_base/iostate|badbit}} | irrecoverable stream error }}
{{dsc | {{ltt|cpp/io/ios_base/iostate|failbit}} | input/output operation failed (formatting or extraction error) }}
{{dsc | {{ltt|cpp/io/ios_base/iostate|eofbit}} | associated input sequence has reached end-of-file }}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/navbar</title>
    <ns>10</ns>
    <id>1559</id>
    <revision>
      <id>39925</id>
      <parentid>35692</parentid>
      <timestamp>2012-09-28T20:10:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="231">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/ios_base/navbar heading
|content3 = cpp/io/ios_base/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/navbar content</title>
    <ns>10</ns>
    <id>1560</id>
    <revision>
      <id>52912</id>
      <parentid>35693</parentid>
      <timestamp>2013-06-01T04:56:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1108">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/ios_base/ios_base}}
{{nv mem ln | cpp/io/ios_base/~ios_base}}

{{nv h2 | Formatting}}
{{nv mem ln | cpp/io/ios_base/flags}}
{{nv mem ln | cpp/io/ios_base/setf}}
{{nv mem ln | cpp/io/ios_base/unsetf}}
{{nv mem ln | cpp/io/ios_base/precision}}
{{nv mem ln | cpp/io/ios_base/width}}

{{nv h2 | Locales}}
{{nv mem ln | cpp/io/ios_base/imbue}}
{{nv mem ln | cpp/io/ios_base/getloc}}

{{nv h2 | Internal extensible array}}
{{nv mem ln | cpp/io/ios_base/xalloc}}
{{nv mem ln | cpp/io/ios_base/iword}}
{{nv mem ln | cpp/io/ios_base/pword}}

{{nv h2 | Miscellaneous}}
{{nv mem ln | cpp/io/ios_base/register_callback}}
{{nv mem ln | cpp/io/ios_base/sync_with_stdio}}

{{nv h1 | Member classes}}
{{nv mem ln | cpp/io/ios_base/failure}}
{{nv mem ln | cpp/io/ios_base/Init}}

{{nv h1 | Member types}}
{{nv mem ln | cpp/io/ios_base/openmode}}
{{nv mem ln | cpp/io/ios_base/fmtflags}}
{{nv mem ln | cpp/io/ios_base/iostate}}
{{nv mem ln | cpp/io/ios_base/seekdir}}
{{nv mem ln | cpp/io/ios_base/event}}
{{nv mem ln | cpp/io/ios_base/event_callback}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/navbar heading</title>
    <ns>10</ns>
    <id>1561</id>
    <revision>
      <id>35695</id>
      <parentid>3122</parentid>
      <timestamp>2012-06-15T22:30:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ios base/sidebar heading]] to [[Template:cpp/io/ios base/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="41">{{ltt | cpp/io/ios_base | std::ios_base}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/openmode consts</title>
    <ns>10</ns>
    <id>1557</id>
    <revision>
      <id>72557</id>
      <parentid>52913</parentid>
      <timestamp>2014-09-04T03:32:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link binary mode</comment>
      <text xml:space="preserve" bytes="592">{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|app}} | seek to the end of stream before each write}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|binary}} | open in [[cpp/io/c#Binary_and_text_modes|binary mode]]}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|in}} | open for reading}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|out}} | open for writing}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|trunc}} | discard the contents of the stream when opening}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|ate}} | seek to the end of stream immediately after open}}
{{dsc end}}</text>
      <sha1>ks7adc5w13qkgbk2pg6ol3ftvi1lxus</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/openmode streambuf consts</title>
    <ns>10</ns>
    <id>4874</id>
    <revision>
      <id>52914</id>
      <parentid>32714</parentid>
      <timestamp>2013-06-01T04:56:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="214">{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|in}} | affect the input sequence}}
{{dsc | {{ltt|cpp/io/ios_base/openmode|out}} | affect the output sequence}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/seekdir consts</title>
    <ns>10</ns>
    <id>1558</id>
    <revision>
      <id>52915</id>
      <parentid>32715</parentid>
      <timestamp>2013-06-01T04:56:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="310">{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{ltt|cpp/io/ios_base/seekdir|beg}} | the beginning of a stream }}
{{dsc | {{ltt|cpp/io/ios_base/seekdir|end}} | the ending of a stream }}
{{dsc | {{ltt|cpp/io/ios_base/seekdir|cur}} | the current position of stream position indicator }}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/title</title>
    <ns>10</ns>
    <id>1568</id>
    <revision>
      <id>3136</id>
      <parentid>3135</parentid>
      <timestamp>2011-06-06T22:57:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=ios_base::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ios base/xalloc example</title>
    <ns>10</ns>
    <id>6539</id>
    <revision>
      <id>25785</id>
      <parentid>25783</parentid>
      <timestamp>2012-04-25T14:14:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+desc</comment>
      <text xml:space="preserve" bytes="1636">{{example
 | Uses base class pword storage for runtime type identification of derived stream objects.
 | code=
#include &lt;iostream&gt;

template&lt;class charT, class traits = std::char_traits&lt;charT&gt; &gt;
class mystream : public std::basic_ostream&lt;charT, traits&gt;
{
 public:
    static const int xindex;
    mystream(std::basic_ostream&lt;charT, traits&gt;&amp; ostr) :
        std::basic_ostream&lt;charT, traits&gt;(ostr.rdbuf())
    {
         this-&gt;pword(xindex) = this;
    }
 
    void myfn()
    {
        *this &lt;&lt; &quot;[special handling for mystream]&quot;;
    }
};

// each specialization of mystream obtains a unique index from xalloc()
template&lt;class charT, class traits&gt;
const int mystream&lt;charT, traits&gt;::xindex = std::ios_base::xalloc();

// This I/O manipulator will be able to recognize ostreams that are mystreams
// by looking up the pointer stored in pword
template&lt;class charT, class traits&gt;
std::basic_ostream&lt;charT,traits&gt;&amp; mymanip(std::basic_ostream&lt;charT,traits&gt;&amp; os)
{
 if (os.pword(mystream&lt;charT,traits&gt;::xindex) == &amp;os) 
    static_cast&lt;mystream&lt;charT,traits&gt;&amp;&gt;(os).myfn();
 return os;
}

int main()
{
    std::cout &lt;&lt; &quot;cout, narrow-character test &quot; &lt;&lt; mymanip &lt;&lt; '\n';

    mystream&lt;char&gt; myout(std::cout);
    myout &lt;&lt; &quot;myout, narrow-character test &quot; &lt;&lt; mymanip &lt;&lt; '\n';

    std::wcout &lt;&lt; &quot;wcout, wide-character test &quot; &lt;&lt; mymanip &lt;&lt; '\n';

    mystream&lt;wchar_t&gt; mywout(std::wcout);
    mywout &lt;&lt; &quot;mywout, wide-character test &quot; &lt;&lt; mymanip &lt;&lt; '\n';
}
 | output=
cout, narrow-character test 
myout, narrow-character test [special handling for mystream]
wcout, wide-character test 
mywout, wide-character test [special handling for mystream]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/istrstream/navbar</title>
    <ns>10</ns>
    <id>4697</id>
    <revision>
      <id>39926</id>
      <parentid>35696</parentid>
      <timestamp>2012-09-28T20:10:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="235">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/istrstream/navbar heading
|content3 = cpp/io/istrstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/istrstream/navbar content</title>
    <ns>10</ns>
    <id>4699</id>
    <revision>
      <id>52916</id>
      <parentid>35697</parentid>
      <timestamp>2013-06-01T04:56:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="221">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/istrstream/istrstream}}
{{nv mem ln | cpp/io/istrstream/~istrstream}}
{{nv mem ln | cpp/io/istrstream/rdbuf}}
{{nv mem ln | cpp/io/istrstream/str}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/istrstream/navbar heading</title>
    <ns>10</ns>
    <id>4698</id>
    <revision>
      <id>35504</id>
      <parentid>17075</parentid>
      <timestamp>2012-06-15T22:26:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/istrstream/sidebar heading]] to [[Template:cpp/io/istrstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="45">{{ltt | cpp/io/istrstream | std::istrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/istrstream/title</title>
    <ns>10</ns>
    <id>12790</id>
    <revision>
      <id>62231</id>
      <timestamp>2013-06-25T12:28:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=istrstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc boolalpha</title>
    <ns>10</ns>
    <id>4650</id>
    <revision>
      <id>56450</id>
      <parentid>52917</parentid>
      <timestamp>2013-06-01T05:36:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list boolalpha]] to [[Template:cpp/io/manip/dsc boolalpha]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc fun | cpp/io/manip/boolalpha | title=boolalpha&lt;br&gt;noboolalpha | switches between textual and numeric representation of booleans}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc endl</title>
    <ns>10</ns>
    <id>4663</id>
    <revision>
      <id>56455</id>
      <parentid>52918</parentid>
      <timestamp>2013-06-01T05:36:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list endl]] to [[Template:cpp/io/manip/dsc endl]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc tfun | cpp/io/manip/endl | outputs {{c|'\n'}} and flushes the output stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc ends</title>
    <ns>10</ns>
    <id>4661</id>
    <revision>
      <id>56460</id>
      <parentid>52919</parentid>
      <timestamp>2013-06-01T05:36:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list ends]] to [[Template:cpp/io/manip/dsc ends]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">{{dsc tfun | cpp/io/manip/ends | outputs {{c|'\0'}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc fixed</title>
    <ns>10</ns>
    <id>4659</id>
    <revision>
      <id>56465</id>
      <parentid>52920</parentid>
      <timestamp>2013-06-01T05:36:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list fixed]] to [[Template:cpp/io/manip/dsc fixed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="186">{{dsc fun | cpp/io/manip/fixed | title=fixed&lt;br&gt;scientific&lt;br&gt;hexfloat&lt;br&gt;defaultfloat | notes=&lt;br&gt;&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} | changes formatting used for floating-point I/O}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc flush</title>
    <ns>10</ns>
    <id>4662</id>
    <revision>
      <id>56470</id>
      <parentid>52921</parentid>
      <timestamp>2013-06-01T05:36:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list flush]] to [[Template:cpp/io/manip/dsc flush]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">{{dsc tfun | cpp/io/manip/flush | flushes the output stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc get money</title>
    <ns>10</ns>
    <id>4670</id>
    <revision>
      <id>56475</id>
      <parentid>52922</parentid>
      <timestamp>2013-06-01T05:36:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list get money]] to [[Template:cpp/io/manip/dsc get money]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc tfun | cpp/io/manip/get_money | parses a monetary value | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc get time</title>
    <ns>10</ns>
    <id>4645</id>
    <revision>
      <id>56480</id>
      <parentid>52923</parentid>
      <timestamp>2013-06-01T05:36:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list get time]] to [[Template:cpp/io/manip/dsc get time]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc tfun | cpp/io/manip/get_time | parses a date/time value of specified format| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc hex</title>
    <ns>10</ns>
    <id>4658</id>
    <revision>
      <id>56485</id>
      <parentid>52924</parentid>
      <timestamp>2013-06-01T05:37:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list hex]] to [[Template:cpp/io/manip/dsc hex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/io/manip/hex | title=dec&lt;br&gt;hex&lt;br&gt;oct | changes the base used for integer I/O}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc left</title>
    <ns>10</ns>
    <id>4657</id>
    <revision>
      <id>56490</id>
      <parentid>52925</parentid>
      <timestamp>2013-06-01T05:37:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list left]] to [[Template:cpp/io/manip/dsc left]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | cpp/io/manip/left | title=internal&lt;br&gt;left&lt;br&gt;right | sets the placement of fill characters  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc put money</title>
    <ns>10</ns>
    <id>4671</id>
    <revision>
      <id>56494</id>
      <parentid>52926</parentid>
      <timestamp>2013-06-01T05:37:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list put money]] to [[Template:cpp/io/manip/dsc put money]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc tfun | cpp/io/manip/put_money | formats and outputs a monetary value| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc put time</title>
    <ns>10</ns>
    <id>4646</id>
    <revision>
      <id>56497</id>
      <parentid>52927</parentid>
      <timestamp>2013-06-01T05:37:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list put time]] to [[Template:cpp/io/manip/dsc put time]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/io/manip/put_time | formats and outputs a date/time value according to the specified format| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc quoted</title>
    <ns>10</ns>
    <id>9991</id>
    <revision>
      <id>56501</id>
      <parentid>52928</parentid>
      <timestamp>2013-06-01T05:37:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list quoted]] to [[Template:cpp/io/manip/dsc quoted]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc tfun | cpp/io/manip/quoted | inserts and extracts quoted strings with embedded spaces | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc resetiosflags</title>
    <ns>10</ns>
    <id>4664</id>
    <revision>
      <id>56505</id>
      <parentid>52929</parentid>
      <timestamp>2013-06-01T05:37:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list resetiosflags]] to [[Template:cpp/io/manip/dsc resetiosflags]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/io/manip/resetiosflags | clears the specified ios_base flags}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc setbase</title>
    <ns>10</ns>
    <id>4666</id>
    <revision>
      <id>56509</id>
      <parentid>52930</parentid>
      <timestamp>2013-06-01T05:37:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list setbase]] to [[Template:cpp/io/manip/dsc setbase]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/io/manip/setbase | changes the base used for integer I/O}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc setfill</title>
    <ns>10</ns>
    <id>4667</id>
    <revision>
      <id>56514</id>
      <parentid>52931</parentid>
      <timestamp>2013-06-01T05:37:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list setfill]] to [[Template:cpp/io/manip/dsc setfill]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc tfun | cpp/io/manip/setfill | changes the fill character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc setiosflags</title>
    <ns>10</ns>
    <id>4665</id>
    <revision>
      <id>56518</id>
      <parentid>52932</parentid>
      <timestamp>2013-06-01T05:37:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list setiosflags]] to [[Template:cpp/io/manip/dsc setiosflags]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/io/manip/setiosflags | sets the specified ios_base flags}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc setprecision</title>
    <ns>10</ns>
    <id>4668</id>
    <revision>
      <id>56523</id>
      <parentid>52933</parentid>
      <timestamp>2013-06-01T05:37:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list setprecision]] to [[Template:cpp/io/manip/dsc setprecision]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/io/manip/setprecision | changes floating-point precision}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc setw</title>
    <ns>10</ns>
    <id>4669</id>
    <revision>
      <id>56528</id>
      <parentid>52934</parentid>
      <timestamp>2013-06-01T05:37:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list setw]] to [[Template:cpp/io/manip/dsc setw]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc fun | cpp/io/manip/setw | changes the width of the next input/output field}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc showbase</title>
    <ns>10</ns>
    <id>4651</id>
    <revision>
      <id>56533</id>
      <parentid>52935</parentid>
      <timestamp>2013-06-01T05:37:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list showbase]] to [[Template:cpp/io/manip/dsc showbase]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | cpp/io/manip/showbase | title=showbase&lt;br&gt;noshowbase | controls whether prefix is used to indicate numeric base }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc showpoint</title>
    <ns>10</ns>
    <id>4652</id>
    <revision>
      <id>56538</id>
      <parentid>52936</parentid>
      <timestamp>2013-06-01T05:37:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list showpoint]] to [[Template:cpp/io/manip/dsc showpoint]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc fun | cpp/io/manip/showpoint | title=showpoint&lt;br&gt;noshowpoint | controls whether decimal point is always included in floating-point representation }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc showpos</title>
    <ns>10</ns>
    <id>4653</id>
    <revision>
      <id>56543</id>
      <parentid>52937</parentid>
      <timestamp>2013-06-01T05:37:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list showpos]] to [[Template:cpp/io/manip/dsc showpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc fun | cpp/io/manip/showpos | title=showpos&lt;br&gt;noshowpos| controls whether the {{tt|+}} sign used with non-negative numbers}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc skipws</title>
    <ns>10</ns>
    <id>4654</id>
    <revision>
      <id>56547</id>
      <parentid>52938</parentid>
      <timestamp>2013-06-01T05:37:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list skipws]] to [[Template:cpp/io/manip/dsc skipws]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc fun | cpp/io/manip/skipws | title=skipws&lt;br&gt;noskipws| controls whether leading whitespace is skipped on input}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc unitbuf</title>
    <ns>10</ns>
    <id>4656</id>
    <revision>
      <id>56552</id>
      <parentid>52939</parentid>
      <timestamp>2013-06-01T05:37:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list unitbuf]] to [[Template:cpp/io/manip/dsc unitbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc fun | cpp/io/manip/unitbuf | title=unitbuf&lt;br&gt;nounitbuf | controls whether output is flushed after each operation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc uppercase</title>
    <ns>10</ns>
    <id>4655</id>
    <revision>
      <id>56557</id>
      <parentid>52940</parentid>
      <timestamp>2013-06-01T05:37:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list uppercase]] to [[Template:cpp/io/manip/dsc uppercase]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc fun | cpp/io/manip/uppercase | title=uppercase&lt;br&gt;nouppercase | controls whether uppercase characters are used with some output formats }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/dsc ws</title>
    <ns>10</ns>
    <id>4660</id>
    <revision>
      <id>56561</id>
      <parentid>52941</parentid>
      <timestamp>2013-06-01T05:38:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/dcl list ws]] to [[Template:cpp/io/manip/dsc ws]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">{{dsc tfun | cpp/io/manip/ws | consumes whitespace}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/navbar</title>
    <ns>10</ns>
    <id>2974</id>
    <revision>
      <id>39927</id>
      <parentid>36038</parentid>
      <timestamp>2012-09-28T20:10:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="223">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/manip/navbar heading
|content3 = cpp/io/manip/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/navbar content</title>
    <ns>10</ns>
    <id>4672</id>
    <revision>
      <id>78325</id>
      <parentid>52942</parentid>
      <timestamp>2015-05-17T10:47:02Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+ quoted</comment>
      <text xml:space="preserve" bytes="1936">{{nv begin}}

{{nv h2 | Floating-point formatting}}
{{nv col begin}}
{{nv ln | cpp/io/manip/showpoint|showpoint|noshowpoint}}
{{nv ln | cpp/io/manip/setprecision}}
{{nv col next}}
{{nv ln | cpp/io/manip/fixed|fixed|scientific|hexfloat|defaultfloat|notes=&lt;br&gt;&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv col end}}

{{nv h2 | Integer formatting}}
{{nv col begin}}
{{nv ln | cpp/io/manip/setbase}}
{{nv ln | cpp/io/manip/showbase|showbase|noshowbase}}
{{nv col next}}
{{nv ln | cpp/io/manip/hex|dec|hex|oct}}
{{nv col end}}

{{nv h2 | Boolean formatting}}
{{nv ln | cpp/io/manip/boolalpha|boolalpha|noboolalpha}}

{{nv h2 | Field width and fill control}}
{{nv col begin}}
{{nv ln | cpp/io/manip/setfill}}
{{nv ln | cpp/io/manip/setw}}
{{nv col next}}
{{nv ln | cpp/io/manip/left|internal|left|right}}
{{nv col end}}

{{nv h2 | Other formatting}}
{{nv col begin}}
{{nv ln | cpp/io/manip/showpos|showpos|noshowpos}}
{{nv col next}}
{{nv ln | cpp/io/manip/uppercase|uppercase|nouppercase}}
{{nv col end}}

{{nv h2 | Whitespace processing}}
{{nv col begin}}
{{nv ln | cpp/io/manip/ws}}
{{nv ln | cpp/io/manip/ends}}
{{nv col next}}
{{nv ln | cpp/io/manip/skipws|skipws|noskipws}}
{{nv col end}}

{{nv h2 | Output flushing}}
{{nv col begin}}
{{nv ln | cpp/io/manip/flush}}
{{nv ln | cpp/io/manip/endl}}
{{nv col next}}
{{nv ln | cpp/io/manip/unitbuf|unitbuf|nounitbuf}}
{{nv col end}}

{{nv h2 | Status flags manipulation}}
{{nv col begin}}
{{nv ln | cpp/io/manip/resetiosflags}}
{{nv col next}}
{{nv ln | cpp/io/manip/setiosflags}}
{{nv col end}}

{{nv h2 | Time and money I/O}}
{{nv col begin}}
{{nv ln | cpp/io/manip/get_money|notes={{mark c++11}}}}
{{nv ln | cpp/io/manip/get_time|notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/io/manip/put_money|notes={{mark c++11}}}}
{{nv ln | cpp/io/manip/put_time|notes={{mark c++11}}}}
{{nv col end}}

{{nv h2 | Quoted manipulator}}
{{nv ln | cpp/io/manip/quoted|notes={{mark c++14}}}}
{{nv end}}</text>
      <sha1>nhpxnjtap1lb8uujb355ffahaszg4g0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/manip/navbar heading</title>
    <ns>10</ns>
    <id>2975</id>
    <revision>
      <id>35700</id>
      <parentid>11235</parentid>
      <timestamp>2012-06-15T22:30:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/manip/sidebar heading]] to [[Template:cpp/io/manip/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="42">[[cpp/io/manip|Input/output manipulators]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/navbar</title>
    <ns>10</ns>
    <id>1569</id>
    <revision>
      <id>39928</id>
      <parentid>35704</parentid>
      <timestamp>2012-09-28T20:10:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="144">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/navbar content</title>
    <ns>10</ns>
    <id>1570</id>
    <revision>
      <id>52943</id>
      <parentid>35705</parentid>
      <timestamp>2013-06-01T04:56:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1196">{{nv begin}}
{{nv | [[cpp/io/manip | I/O manipulators]]}}
{{nv | [[cpp/io/c | C-style I/O]]}}
{{nv h1 | Buffers }}
{{nv ln | cpp/io/basic_streambuf}}
{{nv ln | cpp/io/basic_filebuf}}
{{nv ln | cpp/io/basic_stringbuf}}
{{nv ln | cpp/io/strstreambuf|notes={{mark deprecated}}}}
{{nv h1 | Streams }}
{{nv h2 | Abstractions }}
{{nv ln | cpp/io/ios_base}}
{{nv ln | cpp/io/basic_ios}}
{{nv ln | cpp/io/basic_istream}}
{{nv ln | cpp/io/basic_ostream}}
{{nv ln | cpp/io/basic_iostream}}
{{nv h2 | File I/O }}
{{nv ln | cpp/io/basic_ifstream}}
{{nv ln | cpp/io/basic_ofstream}}
{{nv ln | cpp/io/basic_fstream}}
{{nv h2 | String I/O }}
{{nv ln | cpp/io/basic_istringstream}}
{{nv ln | cpp/io/basic_ostringstream}}
{{nv ln | cpp/io/basic_stringstream}}
{{nv h2 | Array I/O }}
{{nv ln | cpp/io/istrstream | notes={{mark deprecated}}}}
{{nv ln | cpp/io/ostrstream | notes={{mark deprecated}}}}
{{nv ln | cpp/io/strstream | notes={{mark deprecated}}}}
{{nv h1 | Types }}
{{nv ln | cpp/io/streamoff}}
{{nv ln | cpp/io/streamsize}}
{{nv ln | cpp/io/fpos}}
{{nv h1 | Error category interface }}
{{nv ln | cpp/io/iostream_category |notes={{mark c++11}}}}
{{nv ln | cpp/io/io_errc|notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/navbar heading</title>
    <ns>10</ns>
    <id>1571</id>
    <revision>
      <id>35706</id>
      <parentid>3142</parentid>
      <timestamp>2012-06-15T22:30:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/sidebar heading]] to [[Template:cpp/io/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="33">[[cpp/io | Input/output library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ostrstream/navbar</title>
    <ns>10</ns>
    <id>4701</id>
    <revision>
      <id>39929</id>
      <parentid>35701</parentid>
      <timestamp>2012-09-28T20:10:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="234">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/ostrstream/navbar heading
|content3 = cpp/io/ostrstream/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ostrstream/navbar content</title>
    <ns>10</ns>
    <id>4703</id>
    <revision>
      <id>52944</id>
      <parentid>35702</parentid>
      <timestamp>2013-06-01T04:56:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="303">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/ostrstream/ostrstream}}
{{nv mem ln | cpp/io/ostrstream/~ostrstream}}
{{nv mem ln | cpp/io/ostrstream/rdbuf}}
{{nv mem ln | cpp/io/ostrstream/str}}
{{nv mem ln | cpp/io/ostrstream/freeze}}
{{nv mem ln | cpp/io/ostrstream/pcount}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ostrstream/navbar heading</title>
    <ns>10</ns>
    <id>4702</id>
    <revision>
      <id>35703</id>
      <parentid>17080</parentid>
      <timestamp>2012-06-15T22:30:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/ostrstream/sidebar heading]] to [[Template:cpp/io/ostrstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="45">{{ltt | cpp/io/ostrstream | std::ostrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/ostrstream/title</title>
    <ns>10</ns>
    <id>12789</id>
    <revision>
      <id>62230</id>
      <timestamp>2013-06-25T12:28:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=ostrstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/stream exceptions</title>
    <ns>10</ns>
    <id>12782</id>
    <revision>
      <id>61987</id>
      <parentid>61986</parentid>
      <timestamp>2013-06-14T13:01:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="298">{{lc|failure}} if an error occurred (the error state flag is not {{lc|goodbit}}) and {{lc|exceptions()}} is set to throw for that state.

If an internal operation throws an exception, it is caught and {{lc|badbit}} is set. If {{lc|exceptions()}} is set for {{tt|badbit}}, the exception is rethrown.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/dsc constructor</title>
    <ns>10</ns>
    <id>9708</id>
    <revision>
      <id>56586</id>
      <parentid>52945</parentid>
      <timestamp>2013-06-01T05:38:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstream/dcl list constructor]] to [[Template:cpp/io/strstream/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem ctor | cpp/io/{{{1|}}}/{{{1|}}} | constructs an strstream, optionally allocating the buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/dsc destructor</title>
    <ns>10</ns>
    <id>9709</id>
    <revision>
      <id>56590</id>
      <parentid>52946</parentid>
      <timestamp>2013-06-01T05:38:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstream/dcl list destructor]] to [[Template:cpp/io/strstream/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem vdtor | cpp/io/{{{1|}}}/~{{{1|}}} | destructs a strstream, optionally deallocating the buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/dsc freeze</title>
    <ns>10</ns>
    <id>9712</id>
    <revision>
      <id>56595</id>
      <parentid>52947</parentid>
      <timestamp>2013-06-01T05:38:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstream/dcl list freeze]] to [[Template:cpp/io/strstream/dsc freeze]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/io/{{{1|}}}/freeze | disables/enables automatic reallocation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/dsc pcount</title>
    <ns>10</ns>
    <id>9713</id>
    <revision>
      <id>56600</id>
      <parentid>52948</parentid>
      <timestamp>2013-06-01T05:38:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstream/dcl list pcount]] to [[Template:cpp/io/strstream/dsc pcount]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem fun | cpp/io/{{{1|}}}/pcount | obtains the number of characters written}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/dsc rdbuf</title>
    <ns>10</ns>
    <id>9710</id>
    <revision>
      <id>56604</id>
      <parentid>52949</parentid>
      <timestamp>2013-06-01T05:38:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstream/dcl list rdbuf]] to [[Template:cpp/io/strstream/dsc rdbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/io/{{{1|}}}/rdbuf | obtains a pointer to the associated strstreambuf}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/dsc str</title>
    <ns>10</ns>
    <id>9711</id>
    <revision>
      <id>56609</id>
      <parentid>52950</parentid>
      <timestamp>2013-06-01T05:38:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstream/dcl list str]] to [[Template:cpp/io/strstream/dsc str]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/io/{{{1|}}}/str | accesses the output buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/freeze</title>
    <ns>10</ns>
    <id>9725</id>
    <revision>
      <id>85062</id>
      <parentid>76970</parentid>
      <timestamp>2016-03-24T14:09:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>misisng ends</comment>
      <text xml:space="preserve" bytes="2289">{{cpp/io/{{{1|}}}/title | freeze}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 
void freeze(bool flag {{=}} true);
}}
{{dcl end}}

If the stream is using a dynamically-allocated array for output, disables ({{c|flag {{==}} true}}) or enables ({{c|flag {{==}} false}}) automatic allocation/deallocation of the buffer. Effectively calls {{c|rdbuf()-&gt;freeze(flag)}}

===Notes===
After a call to {{lc|str()}}, dynamic streams become frozen automatically. A call to {{c|freeze(false)}} is required before exiting the scope in which this {{c|{{{1|}}} }} object was created. otherwise the destructor will leak memory. Also, additional output to a frozen stream may be truncated once it reaches the end of the allocated buffer.

===Parameters===
{{par begin}}
{{par | flag | desired status}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::{{{1|}}} dyn; // dynamically-allocated output buffer
    dyn &lt;&lt; &quot;Test: &quot; &lt;&lt; 1.23; // note: no std::ends to demonstrate appending
    std::cout &lt;&lt; &quot;The output stream contains \&quot;&quot;;
    std::cout.write(dyn.str(), dyn.pcount()) &lt;&lt; &quot;\&quot;\n&quot;;
    // the stream is now frozen due to str()
    dyn &lt;&lt; &quot; More text&quot;; // output to a frozen stream may be truncated
    std::cout &lt;&lt; &quot;The output stream contains \&quot;&quot;;
    std::cout.write(dyn.str(), dyn.pcount()) &lt;&lt; &quot;\&quot;\n&quot;;
    dyn.freeze(false); // freeze(false) must be called or the  destructor will leak
 
    std::{{{1|}}} dyn2; // dynamically-allocated output buffer
    dyn2 &lt;&lt; &quot;Test: &quot; &lt;&lt; 1.23; // note: no std::ends
    std::cout &lt;&lt; &quot;The output stream contains \&quot;&quot;;
    std::cout.write(dyn2.str(), dyn2.pcount()) &lt;&lt; &quot;\&quot;\n&quot;;
    dyn2.freeze(false);   // unfreeze the stream after str()
    dyn2 &lt;&lt; &quot; More text&quot; &lt;&lt; std::ends; // output will not be truncated (buffer grows)
    std::cout &lt;&lt; &quot;The output stream contains \&quot;&quot; &lt;&lt; dyn2.str() &lt;&lt; &quot;\&quot;\n&quot;;
    dyn2.freeze(false); // freeze(false) must be called or the  destructor will leak 
}
 | p = true
 | output=
The output stream contains &quot;Test: 1.23&quot;
The output stream contains &quot;Test: 1.23 More &quot;
The output stream contains &quot;Test: 1.23&quot;
The output stream contains &quot;Test: 1.23 More text&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstreambuf/dsc freeze}}
{{dsc end}}</text>
      <sha1>g29cno5nkmer2qir0sahfzyjsq1jqrh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/navbar</title>
    <ns>10</ns>
    <id>4794</id>
    <revision>
      <id>39930</id>
      <parentid>35707</parentid>
      <timestamp>2012-09-28T20:10:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="233">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/strstream/navbar heading
|content3 = cpp/io/strstream/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/navbar content</title>
    <ns>10</ns>
    <id>4797</id>
    <revision>
      <id>52952</id>
      <parentid>35708</parentid>
      <timestamp>2013-06-01T04:56:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="295">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/io/strstream/strstream}}
{{nv mem ln | cpp/io/strstream/~strstream}}
{{nv mem ln | cpp/io/strstream/rdbuf}}
{{nv mem ln | cpp/io/strstream/str}}
{{nv mem ln | cpp/io/strstream/pcount}}
{{nv mem ln | cpp/io/strstream/freeze}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/navbar heading</title>
    <ns>10</ns>
    <id>4796</id>
    <revision>
      <id>35709</id>
      <parentid>17402</parentid>
      <timestamp>2012-06-15T22:30:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstream/sidebar heading]] to [[Template:cpp/io/strstream/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="43">{{ltt | cpp/io/strstream | std::strstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/pcount</title>
    <ns>10</ns>
    <id>9722</id>
    <revision>
      <id>85061</id>
      <parentid>62232</parentid>
      <timestamp>2016-03-24T14:05:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missing ends</comment>
      <text xml:space="preserve" bytes="1077">{{cpp/io/{{{1|}}}/title | pcount}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 
int pcount() const;
}}
{{dcl end}}

Returns the number of characters that were output in the put area of the associated {{c|std::strstreambuf}}. Effectively calls {{c|rdbuf()-&gt;pcount()}}

===Parameters===
(none)

===Return value===
The number of characters in the put area, or zero if nothing was output.

===Example===
{{example
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::{{{1|}}} dyn; // dynamically-allocated output buffer
    dyn &lt;&lt; &quot;Test: &quot; &lt;&lt; 1.23 &lt;&lt; std::ends;
    std::cout &lt;&lt; &quot;The size of the output is &quot; &lt;&lt; dyn.pcount()
              &lt;&lt; &quot; and it holds \&quot;&quot; &lt;&lt; dyn.str() &lt;&lt; &quot;\&quot;\n&quot;;
    dyn.freeze(false);

    char buf[10];
    std::{{{1|}}} user(buf, 10); // user-provided output buffer
    user &lt;&lt; 1.23; // note: no std::ends
    std::cout.write(buf, user.pcount());
    std::cout &lt;&lt; '\n';
}
 | output=
The size of the output is 11 and it holds &quot;Test: 1.23&quot;
1.23
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstreambuf/dsc pcount}}
{{dsc end}}</text>
      <sha1>lvgbyslt9trq0q3uwgba534bj7dlxyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/rdbuf</title>
    <ns>10</ns>
    <id>9733</id>
    <revision>
      <id>78114</id>
      <parentid>78113</parentid>
      <timestamp>2015-05-01T14:00:14Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fix indent</comment>
      <text xml:space="preserve" bytes="612">{{cpp/io/{{{1|}}}/title | rdbuf}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |  
strstreambuf* rdbuf() const;
}}
{{dcl end}}

Returns a pointer to the associated {{c|std::strstreambuf}}, casting away its constness (despite the const qualifier on the member function)

===Parameters===
(none)

===Return value===
Pointer to the associated {{c|std::strsteambuf}}, with constness cast away.

===Example===
{{example
 | code=
#include &lt;strstream&gt;
int main()
{
    {{#ifeq:{{{1|}}}|istrstream|const std::{{{1|}}} buf(&quot;example&quot;);|const std::{{{1|}}} buf;}}
    std::strstreambuf* ptr = buf.rdbuf();
}
 | output=
}}</text>
      <sha1>13a44l11l9ghd990hbhvpvwwuau4sj5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/str</title>
    <ns>10</ns>
    <id>9729</id>
    <revision>
      <id>85063</id>
      <parentid>85054</parentid>
      <timestamp>2016-03-24T14:13:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+note on ends</comment>
      <text xml:space="preserve" bytes="1901">{{cpp/io/{{{1|}}}/title | str}}
{{cpp/io/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |
char* str();
}}
{{dcl end}}

Returns the pointer to the beginning of the buffer, after freezing it. Effectively calls {{c|rdbuf()-&gt;str()}}

{{#ifeq:{{{1|}}}|istrstream||===Notes===
Before a call to {{lc|str()}} that uses the result as a C string, the stream buffer must be null-terminated. Regular output such as with {{c|stream &lt;&lt; 1.2}} does not store a null terminator, it must be appended explicitly, typically with the manipulator {{lc|std::ends}}.

After a call to {{lc|str()}}, dynamic streams become frozen. A call to {{c|freeze(false)}} is required before exiting the scope in which this {{c|{{{1|}}} }} object was created. otherwise the destructor will leak memory. Also, additional output to a frozen stream may be truncated once it reaches the end of the allocated buffer, which may leave the buffer not null-terminated.
}}
===Parameters===
(none)

===Return value===
Pointer to the beginning of the buffer in the associated {{c|std::strsteambuf}} or {{lc|NULL}} if no buffer is available.

===Example===
{{example
 | code=
{{#ifeq:{{{1|}}}|istrstream||#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::{{{1|}}} dyn; // dynamically-allocated output buffer
    dyn &lt;&lt; &quot;Test: &quot; &lt;&lt; 1.23; // not adding std::ends to demonstrate append behavior
    std::cout &lt;&lt; &quot;The output stream holds \&quot;&quot;;
    std::cout.write(dyn.str(), dyn.pcount()) &lt;&lt; &quot;\&quot;\n&quot;; 
    // the stream is now frozen due to str()
    dyn &lt;&lt; &quot; More text&quot; &lt;&lt; std::ends;
    std::cout &lt;&lt; &quot;The output stream holds \&quot;&quot;;
    std::cout.write(dyn.str(), dyn.pcount()) &lt;&lt; &quot;\&quot;\n&quot;;
    dyn.freeze(false);
}
}} | p = true
 | output=
{{#ifeq:{{{1|}}}|istrstream||The stream holds &quot;Test: 1.23&quot;
The stream holds &quot;Test: 1.23 More &quot;
}}}}

{{#ifeq:{{{1|}}}|istrstream||===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstreambuf/dsc str}}
{{dsc end}}
}}</text>
      <sha1>qdwg2jg8403wx16r4gj9rhnlb2c1759</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstream/title</title>
    <ns>10</ns>
    <id>9448</id>
    <revision>
      <id>40154</id>
      <timestamp>2012-10-03T14:21:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=strstream::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc freeze</title>
    <ns>10</ns>
    <id>9701</id>
    <revision>
      <id>56614</id>
      <parentid>52955</parentid>
      <timestamp>2013-06-01T05:38:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list freeze]] to [[Template:cpp/io/strstreambuf/dsc freeze]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/io/strstreambuf/freeze | sets/clears the frozen state of the buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc overflow</title>
    <ns>10</ns>
    <id>6344</id>
    <revision>
      <id>56618</id>
      <parentid>52956</parentid>
      <timestamp>2013-06-01T05:38:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list overflow]] to [[Template:cpp/io/strstreambuf/dsc overflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="172">{{dsc prot mem vfun | cpp/io/strstreambuf/overflow | appends a character to the output sequence, may reallocate or initially allocate the buffer if dynamic and not frozen}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc pbackfail</title>
    <ns>10</ns>
    <id>9692</id>
    <revision>
      <id>56622</id>
      <parentid>52957</parentid>
      <timestamp>2013-06-01T05:38:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list pbackfail]] to [[Template:cpp/io/strstreambuf/dsc pbackfail]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc prot mem vfun | cpp/io/strstreambuf/pbackfail | backs out the input sequence to unget a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc pcount</title>
    <ns>10</ns>
    <id>9703</id>
    <revision>
      <id>56625</id>
      <parentid>52958</parentid>
      <timestamp>2013-06-01T05:38:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list pcount]] to [[Template:cpp/io/strstreambuf/dsc pcount]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="157">{{dsc mem fun | cpp/io/strstreambuf/pcount | returns the next pointer minus the beginning pointer in the output sequence: the number of characters written }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc seekoff</title>
    <ns>10</ns>
    <id>9706</id>
    <revision>
      <id>56630</id>
      <parentid>52959</parentid>
      <timestamp>2013-06-01T05:38:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list seekoff]] to [[Template:cpp/io/strstreambuf/dsc seekoff]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="157">{{dsc prot mem vfun | cpp/io/strstreambuf/seekoff | repositions the next pointer in the input sequence, output sequence, or both, using relative addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc seekpos</title>
    <ns>10</ns>
    <id>9707</id>
    <revision>
      <id>56634</id>
      <parentid>52960</parentid>
      <timestamp>2013-06-01T05:39:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list seekpos]] to [[Template:cpp/io/strstreambuf/dsc seekpos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="156">{{dsc prot mem vfun | cpp/io/strstreambuf/seekpos | repositions the next pointer in the input sequence, output sequence, or both using absolute addressing}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc setbuf</title>
    <ns>10</ns>
    <id>9705</id>
    <revision>
      <id>56639</id>
      <parentid>52961</parentid>
      <timestamp>2013-06-01T05:39:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list setbuf]] to [[Template:cpp/io/strstreambuf/dsc setbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc prot mem vfun | cpp/io/strstreambuf/setbuf | attempts to replace the controlled character sequence with an array }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc str</title>
    <ns>10</ns>
    <id>9702</id>
    <revision>
      <id>56644</id>
      <parentid>52962</parentid>
      <timestamp>2013-06-01T05:39:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list str]] to [[Template:cpp/io/strstreambuf/dsc str]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/io/strstreambuf/str | marks the buffer frozen and returns the beginning pointer of the input sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc strstreambuf</title>
    <ns>10</ns>
    <id>9698</id>
    <revision>
      <id>56649</id>
      <parentid>52963</parentid>
      <timestamp>2013-06-01T05:39:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list strstreambuf]] to [[Template:cpp/io/strstreambuf/dsc strstreambuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem ctor | cpp/io/strstreambuf/strstreambuf | constructs a strstreambuf object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc underflow</title>
    <ns>10</ns>
    <id>9704</id>
    <revision>
      <id>56653</id>
      <parentid>52964</parentid>
      <timestamp>2013-06-01T05:39:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list underflow]] to [[Template:cpp/io/strstreambuf/dsc underflow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc prot mem vfun | cpp/io/strstreambuf/underflow | reads a character from the input sequence without advancing the next pointer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/dsc ~strstreambuf</title>
    <ns>10</ns>
    <id>9700</id>
    <revision>
      <id>56658</id>
      <parentid>52965</parentid>
      <timestamp>2013-06-01T05:39:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/io/strstreambuf/dcl list ~strstreambuf]] to [[Template:cpp/io/strstreambuf/dsc ~strstreambuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem vdtor | cpp/io/strstreambuf/~strstreambuf | destructs a strstreambuf object, optionally deallocating the character array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/navbar</title>
    <ns>10</ns>
    <id>4375</id>
    <revision>
      <id>39931</id>
      <parentid>35710</parentid>
      <timestamp>2012-09-28T20:10:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="239">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/io/navbar heading
|content2 = cpp/io/navbar content

|heading3 = cpp/io/strstreambuf/navbar heading
|content3 = cpp/io/strstreambuf/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/navbar content</title>
    <ns>10</ns>
    <id>4377</id>
    <revision>
      <id>52966</id>
      <parentid>33570</parentid>
      <timestamp>2013-06-01T04:57:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="592">{{nv begin}}
{{nv h1 | Public member functions}}
{{nv mem ln | cpp/io/strstreambuf/strstreambuf}}
{{nv mem ln | cpp/io/strstreambuf/~strstreambuf}}
{{nv mem ln | cpp/io/strstreambuf/freeze}}
{{nv mem ln | cpp/io/strstreambuf/str}}
{{nv mem ln | cpp/io/strstreambuf/pcount}}

{{nv h1 | Protected member functions}}
{{nv mem ln | cpp/io/strstreambuf/underflow}}
{{nv mem ln | cpp/io/strstreambuf/pbackfail}}
{{nv mem ln | cpp/io/strstreambuf/overflow}}
{{nv mem ln | cpp/io/strstreambuf/setbuf}}
{{nv mem ln | cpp/io/strstreambuf/seekoff}}
{{nv mem ln | cpp/io/strstreambuf/seekpos}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/navbar heading</title>
    <ns>10</ns>
    <id>4376</id>
    <revision>
      <id>48071</id>
      <parentid>35711</parentid>
      <timestamp>2013-05-18T18:05:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="45">{{ltt|cpp/io/strstreambuf|std::strstreambuf}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/io/strstreambuf/title</title>
    <ns>10</ns>
    <id>6345</id>
    <revision>
      <id>24009</id>
      <timestamp>2012-04-20T03:59:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=strstreambuf::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator//navbar</title>
    <ns>10</ns>
    <id>8724</id>
    <redirect title="Template:cpp/iterator/navbar" />
    <revision>
      <id>36848</id>
      <timestamp>2012-07-02T17:53:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Template:cpp/iterator/navbar]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[Template:cpp/iterator/navbar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator//title</title>
    <ns>10</ns>
    <id>8723</id>
    <revision>
      <id>36846</id>
      <timestamp>2012-07-02T17:50:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/base</title>
    <ns>10</ns>
    <id>8725</id>
    <revision>
      <id>83771</id>
      <parentid>83770</parentid>
      <timestamp>2016-03-08T04:11:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missed word</comment>
      <text xml:space="preserve" bytes="518">{{cpp/iterator/{{{1|}}}/title| base}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
Iterator base() const;
}}
{{dcl | since=c++17|
constexpr Iterator base() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the underlying base iterator.

===Parameters===
(none)

===Return value===
The underlying iterator.

===Exceptions===
(none)

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator*|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>es22zovjbbopmxzibdad75fhzjp18wk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/constructor</title>
    <ns>10</ns>
    <id>8717</id>
    <revision>
      <id>83767</id>
      <parentid>83607</parentid>
      <timestamp>2016-03-08T04:02:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>dcl revs</comment>
      <text xml:space="preserve" bytes="1265">{{cpp/iterator/{{{1|}}}/title | {{{1}}}}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl |until=c++17 |1=
{{{1}}}();
}}
{{dcl |since=c++17 |1=
constexpr {{{1}}}();
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl |until=c++17 |1=
explicit {{{1}}}( Iterator x ); 
}}
{{dcl |since=c++17 |1=
constexpr explicit {{{1}}}( Iterator x ); 
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl |until=c++17|1=
template&lt; class U &gt; 
{{{1}}}( const {{{1}}}&lt;U&gt;&amp; other );
}}
{{dcl |since=c++17|1=
template&lt; class U &gt; 
constexpr {{{1}}}( const {{{1}}}&lt;U&gt;&amp; other );
}}
{{dcl rev end}}
{{dcl end}}

Constructs a new iterator adaptor.

@1@ Default constructor. {{tt|current}} is value-initialized. Operations on the resulting iterator have defined behavior if and only if the corresponding operations on a value-initialized {{tt|Iterator}} also have defined behavior.

@2@ {{tt|current}} is initialized with {{tt|x}}.

@3@ Copy constructor. The underlying iterator is initialized with that of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | x | iterator to adapt}}
{{par | other | iterator adaptor to copy}}
{{par end}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator{{=}}| {{{1|}}}}}
{{dsc end}}</text>
      <sha1>ayebqz9ic6byp7cokrbcdzgfzo2p0ae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc base</title>
    <ns>10</ns>
    <id>8712</id>
    <revision>
      <id>56662</id>
      <parentid>52969</parentid>
      <timestamp>2013-06-01T05:39:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list base]] to [[Template:cpp/iterator/adaptor/dsc base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/iterator/{{{1|}}}/base | accesses the underlying iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc constructor</title>
    <ns>10</ns>
    <id>8710</id>
    <revision>
      <id>56667</id>
      <parentid>52970</parentid>
      <timestamp>2013-06-01T05:39:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list constructor]] to [[Template:cpp/iterator/adaptor/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem ctor | cpp/iterator/{{{1|}}}/{{{1|}}} | constructs a new iterator adaptor }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc operator arith</title>
    <ns>10</ns>
    <id>8715</id>
    <revision>
      <id>56687</id>
      <parentid>52975</parentid>
      <timestamp>2013-06-01T05:39:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list operator arith]] to [[Template:cpp/iterator/adaptor/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="246">{{dsc mem fun | cpp/iterator/{{{1|}}}/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}}&lt;br&gt;operator+=&lt;br&gt;operator+&lt;br&gt;operator--&lt;br&gt;operator--{{dsc small|(int)}}&lt;br&gt;operator-=&lt;br&gt;operator- | advances or decrements the iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc operator at</title>
    <ns>10</ns>
    <id>8714</id>
    <revision>
      <id>71933</id>
      <parentid>71903</parentid>
      <timestamp>2014-07-02T11:16:47Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="102">{{dsc mem fun | cpp/iterator/{{{1|}}}/operator_at | title=operator[] |  accesses an element by index}}</text>
      <sha1>m3rkcxhe4plq33nb7kolhayczc95rvk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc operator cmp</title>
    <ns>10</ns>
    <id>8720</id>
    <revision>
      <id>56697</id>
      <parentid>52977</parentid>
      <timestamp>2013-06-01T05:39:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list operator cmp]] to [[Template:cpp/iterator/adaptor/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="173">{{dsc tfun | cpp/iterator/{{{1|}}}/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares the underlying iterators }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc operator*</title>
    <ns>10</ns>
    <id>8713</id>
    <revision>
      <id>56671</id>
      <parentid>52971</parentid>
      <timestamp>2013-06-01T05:39:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list operator*]] to [[Template:cpp/iterator/adaptor/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/iterator/{{{1|}}}/operator* | title=operator*&lt;br&gt;operator-&gt; | accesses the pointed-to element}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc operator+</title>
    <ns>10</ns>
    <id>8738</id>
    <revision>
      <id>56676</id>
      <parentid>52972</parentid>
      <timestamp>2013-06-01T05:39:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list operator+]] to [[Template:cpp/iterator/adaptor/dsc operator+]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc tfun | cpp/iterator/{{{1|}}}/operator+ | advances the iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc operator-</title>
    <ns>10</ns>
    <id>8739</id>
    <revision>
      <id>56680</id>
      <parentid>52973</parentid>
      <timestamp>2013-06-01T05:39:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list operator-]] to [[Template:cpp/iterator/adaptor/dsc operator-]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc tfun | cpp/iterator/{{{1|}}}/operator- | computes the distance between two iterator adaptors}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/dsc operator=</title>
    <ns>10</ns>
    <id>8711</id>
    <revision>
      <id>56684</id>
      <parentid>52974</parentid>
      <timestamp>2013-06-01T05:39:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/adaptor/dcl list operator=]] to [[Template:cpp/iterator/adaptor/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/iterator/{{{1|}}}/operator{{=}} | assigns another iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/operator arith</title>
    <ns>10</ns>
    <id>8734</id>
    <revision>
      <id>83769</id>
      <parentid>83612</parentid>
      <timestamp>2016-03-08T04:06:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>dcl rev</comment>
      <text xml:space="preserve" bytes="2378">{{cpp/iterator/{{{1|}}}/title | 1=operator++,+,+=,--,-,-= }}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | until=c++17 | 
{{{1}}}&amp; operator++();
}}
{{dcl | since=c++17 | 
constexpr {{{1}}}&amp; operator++();
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++17| 
{{{1}}}&amp; operator--();
}}
{{dcl | since=c++17 | 
constexpr {{{1}}}&amp; operator--();
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | until=c++17 |
{{{1}}} operator++( int );
}}
{{dcl | since=c++17 | 
constexpr {{{1}}} operator++( int );
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | until=c++17 | 
{{{1}}} operator--( int );
}}
{{dcl | since=c++17 |
constexpr {{{1}}} operator--( int );
}}
{{dcl rev end}}
{{dcl rev begin|num=5}}
{{dcl | until=c++17 |
{{{1}}} operator+( difference_type n ) const;
}}
{{dcl | since=c++17 |
constexpr {{{1}}} operator+( difference_type n ) const;
}}
{{dcl rev end}}
{{dcl rev begin|num=6}}
{{dcl | until=c++17 |
{{{1}}} operator-( difference_type n ) const;
}}
{{dcl | since=c++17 |
constexpr {{{1}}} operator-( difference_type n ) const;
}}
{{dcl rev end}}
{{dcl rev begin|num=7}}
{{dcl | until=c++17 | 1=
{{{1}}}&amp; operator+=( difference_type n );
}}
{{dcl | since=c++17 | 1=
constexpr {{{1}}}&amp; operator+=( difference_type n );
}}
{{dcl rev end}}
{{dcl rev begin|num=8}}
{{dcl | until=c++17 | 1=
{{{1}}}&amp; operator-=( difference_type n );
}}
{{dcl | since=c++17 | 1=
constexpr {{{1}}}&amp; operator-=( difference_type n );
}}
{{dcl rev end}}
{{dcl end}}

Increments or decrements the iterator. {{#ifeq:{{{1|}}}|reverse_iterator|Inverse operations are applied to the underlying operator because of the reverse order.}}
@1-2@ Pre-increments or pre-decrements by one respectively.
@3-4@ Post-increments or post-decrements by one respectively.
@5-6@ Returns an iterator which is advanced by {{tt|n}} or {{tt|-n}} positions respectively.
@7-8@ Advances the iterator by {{tt|n}} or {{tt|-n}} positions respectively.

===Return value===
@1-2@ {{c|*this}}
@3-4@ a copy of {{c|*this}} that was made before the change
@5-6@ {{#switch:{{{1|}}}
|reverse_iterator={{c|{{{1}}}(base()-n)}} or {{c|{{{1}}}(base()+n)}} respectively.
|move_iterator|{{c|{{{1}}}(base()+n)}} or {{c|{{{1}}}(base()-n)}} respectively.
}}
@7-8@ {{c|*this}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator+|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>it5j5xhpz4c2ds5bcce2b7vh9rlb6r2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/operator at</title>
    <ns>10</ns>
    <id>8729</id>
    <revision>
      <id>83611</id>
      <parentid>71904</parentid>
      <timestamp>2016-03-03T13:48:08Z</timestamp>
      <contributor>
        <username>Bran</username>
        <id>4364</id>
      </contributor>
      <comment>constexpr since C++17 -&gt; http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0031r0.html</comment>
      <text xml:space="preserve" bytes="853">{{cpp/iterator/{{{1|}}}/title|operator[]}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} | until=c++17 | 1=
/*unspecified*/ operator[]( difference_type n ) const; 
}}
{{dcl | since=c++17 | 1=
constexpr /*unspecified*/ operator[]( difference_type n ) const; 
}}
{{dcl end}}

Returns a reference to the element at specified relative location.

===Parameters===
{{par begin}}
{{par | n | position relative to current location.}}
{{par end}}

===Return value===
{{#switch:{{{1|}}}
 |reverse_iterator=A reference to the element at relative location, that is, {{c| current[-n-1]}}
 |move_iterator=An rvalue reference to the element at relative location, that is, {{c|std::move(current[n])}}
}}.

===Examples===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator*|{{{1|}}}}}`
{{dsc end}}</text>
      <sha1>gdckdcb21f79e7e2lreumlm1rw5t4cp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/operator cmp</title>
    <ns>10</ns>
    <id>8732</id>
    <revision>
      <id>83757</id>
      <parentid>83613</parentid>
      <timestamp>2016-03-08T03:41:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>applied dcl revs around the last edit</comment>
      <text xml:space="preserve" bytes="3276">{{title | 1=operator&lt;,&lt;{{=}},&gt;,&gt;{{=}}&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | until=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
bool operator==( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                 const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl | since=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
constexpr bool operator==( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                           const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
bool operator!=( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                 const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl | since=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
constexpr bool operator!=( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                           const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | until=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
bool operator&lt;( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl | since=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
constexpr bool operator&lt;( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                          const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | until=c++17| 1=
template&lt; class Iterator1, class Iterator2 &gt;
bool operator&lt;=( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                 const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl | since=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
constexpr bool operator&lt;=( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                           const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin|num=5}}
{{dcl | until=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
bool operator&gt;( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl | since=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
constexpr bool operator&gt;( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                          const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin|num=6}}
{{dcl | until=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
bool operator&gt;=( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                 const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl | since=c++17 | 1=
template&lt; class Iterator1, class Iterator2 &gt;
constexpr bool operator&gt;=( const {{{1}}}&lt;Iterator1&gt;&amp; lhs,
                           const {{{1}}}&lt;Iterator2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl end}}

Compares the underlying iterators. {{#ifeq:{{{1|}}}|reverse_iterator| Inverse comparisons are applied in order to take into account that the iterator order is reversed.}}

===Parameters===
{{par begin}}
{{par | lhs, rhs | iterator adaptors to compare}}
{{par end}}

===Return Value===
@1@ {{c|1= lhs.base() == rhs.base()}}
@2@ {{c|1= lhs.base() != rhs.base()}}
{{#switch:{{{1|}}}
|move_iterator=
@3@ {{c|1= lhs.base() &lt; rhs.base()}}
@4@ {{c|1= lhs.base() &lt;= rhs.base()}}
@5@ {{c|1= lhs.base() &gt; rhs.base()}}
@6@ {{c|1= lhs.base() &gt;= rhs.base()}}
|reverse_iterator|
@3@ {{c|1= lhs.base() &gt; rhs.base()}}
@4@ {{c|1= lhs.base() &gt;= rhs.base()}}
@5@ {{c|1= lhs.base() &lt; rhs.base()}}
@6@ {{c|1= lhs.base() &lt;= rhs.base()}}
}}

===Example===
{{example}}</text>
      <sha1>fg3a9c4y5poensgc376eytds6tnlzuz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/operator*</title>
    <ns>10</ns>
    <id>8727</id>
    <revision>
      <id>60889</id>
      <parentid>52978</parentid>
      <timestamp>2013-06-01T11:59:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="852">{{cpp/iterator/{{{1|}}}/title | operator*,-&gt; }}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 |
reference operator* () const;
}}
{{dcl | num=2 | 
pointer   operator-&gt;() const;
}}
{{dcl end}}

Returns a reference or pointer to the element previous to {{tt|current}}.

@1@ Equivalent to {{c|1=d_tmp = current; --d_tmp; return *d_tmp;}};
@2@ Equivalent to {{c|&amp;(operator*())}}.

===Parameters===
(none)

===Return value===
Reference or pointer to the element previous to {{tt|current}}.

===Notes===
The iterator object contains an auxiliary member variable {{tt|d_tmp}}, not a temporary variable, to avoid returning a reference that persists beyond the lifetime of its associated iterator.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_at|{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/operator+</title>
    <ns>10</ns>
    <id>5620</id>
    <revision>
      <id>83614</id>
      <parentid>78860</parentid>
      <timestamp>2016-03-03T13:57:46Z</timestamp>
      <contributor>
        <username>Bran</username>
        <id>4364</id>
      </contributor>
      <comment>constexpr since C++17 -&gt; http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0031r0.html</comment>
      <text xml:space="preserve" bytes="1014">{{title | 1=operator+&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | until=c++17 |
template&lt; class Iterator &gt; 
{{{1}}}&lt;Iterator&gt; 
    operator+( typename {{{1}}}&lt;Iterator&gt;::difference_type n,
               const {{{1}}}&lt;Iterator&gt;&amp; it );
}}
{{dcl | since=c++17 |
template&lt; class Iterator &gt; 
constexpr {{{1}}}&lt;Iterator&gt; 
    operator+( typename {{{1}}}&lt;Iterator&gt;::difference_type n,
               const {{{1}}}&lt;Iterator&gt;&amp; it );
}}
{{dcl end}}

Returns the iterator {{tt|it}} incremented by {{tt|n}}.

===Parameters===
{{par begin}}
{{par | n | the number of positions to increment the iterator}}
{{par | it | the iterator adaptor to increment}}
{{par end}}

===Return value===
The incremented iterator, that is {{#switch:{{{1|}}}
|move_iterator={{c|{{{1}}}&lt;Iterator&gt;(x.current + n)}}
|reverse_iterator|{{c|{{{1}}}&lt;Iterator&gt;(x.current - n)}}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_arith|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>dy01bouxj1ss5mb7dhhkd8aopqa4zb6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/operator-</title>
    <ns>10</ns>
    <id>5621</id>
    <revision>
      <id>83758</id>
      <parentid>83618</parentid>
      <timestamp>2016-03-08T03:42:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fmt to fit the line with the trailing return type</comment>
      <text xml:space="preserve" bytes="1345">{{title | 1=operator-&lt;small&gt;({{{1}}})&lt;/small&gt;}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{#ifeq:{{{1|}}}|reverse_iterator|
{{dcl | until=c++11 |
template&lt; class Iterator &gt;
typename reverse_iterator&lt;Iterator&gt;::difference_type 
    operator-( const {{{1|}}}&lt;Iterator&gt;&amp; lhs,
               const {{{1|}}}&lt;Iterator&gt;&amp; rhs );
}}
}}
{{dcl | since=c++11 | until=c++17 |
template&lt; class Iterator1, class Iterator2 &gt;
auto operator-( const {{{1|}}}&lt;Iterator1&gt;&amp; lhs,
                const {{{1|}}}&lt;Iterator2&gt;&amp; rhs
              ) -&gt; decltype({{#switch:{{{1|}}}
|move_iterator=lhs.base() - rhs.base()
|reverse_iterator|rhs.base() - lhs.base()
}});
}}
{{dcl | since=c++17 |
template&lt; class Iterator1, class Iterator2 &gt;
constexpr auto operator-( const {{{1|}}}&lt;Iterator1&gt;&amp; lhs,
                          const {{{1|}}}&lt;Iterator2&gt;&amp; rhs
                        ) -&gt; decltype({{#switch:{{{1|}}}
|move_iterator=lhs.base() - rhs.base()
|reverse_iterator|rhs.base() - lhs.base()
}});
}}
{{dcl rev end}}
{{dcl end}}

Returns the distance between two iterator adaptors.

===Parameters===
{{par begin}}
{{par | lhs, rhs | iterator adaptors to compute the difference of}}
{{par end}}

===Return value===
{{#switch:{{{1|}}}
|move_iterator={{c|lhs.base() - rhs.base()}}
|reverse_iterator|{{c|rhs.base() - lhs.base()}}
}}

===Example===
{{example}}</text>
      <sha1>5xvx916rf0ip59n2iwhfe2n7ekyqcjn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/adaptor/operator=</title>
    <ns>10</ns>
    <id>8721</id>
    <revision>
      <id>83772</id>
      <parentid>83608</parentid>
      <timestamp>2016-03-08T04:12:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-empty dcl, +dcl rev</comment>
      <text xml:space="preserve" bytes="753">{{cpp/iterator/{{{1|}}}/title | operator{{=}} }}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++17|1=
template&lt; class U &gt; 
{{{1}}}&amp; operator=( const {{{1}}}&lt;U&gt;&amp; other );
}}
{{dcl |since=c++17|1=
template&lt; class U &gt; 
constexpr {{{1}}}&amp; operator=( const {{{1}}}&lt;U&gt;&amp; other );
}}
{{dcl rev end}}
{{dcl end}}

Copy assignment operator. The underlying iterator is assigned the value of the underlying iterator of {{tt|other}}, i.e. {{tt|other.base()}}.

===Parameters===
{{par begin}}
{{par | other | iterator adaptor to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc constructor|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>oploukky1ibvln91iczylv3mk8cie20</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/back insert iterator/navbar</title>
    <ns>10</ns>
    <id>4950</id>
    <revision>
      <id>39932</id>
      <parentid>35712</parentid>
      <timestamp>2012-09-28T20:10:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="278">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/back_insert_iterator/navbar heading
|content3 = cpp/iterator/back_insert_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/back insert iterator/navbar content</title>
    <ns>10</ns>
    <id>4952</id>
    <revision>
      <id>52985</id>
      <parentid>35446</parentid>
      <timestamp>2013-06-01T04:57:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="335">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/back_insert_iterator/back_insert_iterator}}
{{nv mem ln | cpp/iterator/back_insert_iterator/operator{{=}}}}
{{nv mem ln | cpp/iterator/back_insert_iterator/operator*}}
{{nv mem ln | cpp/iterator/back_insert_iterator/operator++|operator++|operator++(int)}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/back insert iterator/navbar heading</title>
    <ns>10</ns>
    <id>4951</id>
    <revision>
      <id>48098</id>
      <parentid>35713</parentid>
      <timestamp>2013-05-18T18:12:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="67">{{ltt|cpp/iterator/back_insert_iterator|std::back_insert_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/back insert iterator/title</title>
    <ns>10</ns>
    <id>8479</id>
    <revision>
      <id>31262</id>
      <timestamp>2012-05-17T03:03:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=back_insert_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc advance</title>
    <ns>10</ns>
    <id>2694</id>
    <revision>
      <id>56701</id>
      <parentid>52986</parentid>
      <timestamp>2013-06-01T05:40:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list advance]] to [[Template:cpp/iterator/dsc advance]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc fun | cpp/iterator/advance | advances an iterator by given distance }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc back insert iterator</title>
    <ns>10</ns>
    <id>4840</id>
    <revision>
      <id>56705</id>
      <parentid>52987</parentid>
      <timestamp>2013-06-01T05:40:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list back insert iterator]] to [[Template:cpp/iterator/dsc back insert iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc tclass | cpp/iterator/back_insert_iterator | iterator adaptor for insertion at the end of a container }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc back inserter</title>
    <ns>10</ns>
    <id>4841</id>
    <revision>
      <id>56710</id>
      <parentid>52988</parentid>
      <timestamp>2013-06-01T05:40:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list back inserter]] to [[Template:cpp/iterator/dsc back inserter]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc tfun | cpp/iterator/back_inserter | creates a {{lc|std::back_insert_iterator}} of type inferred from the argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc begin</title>
    <ns>10</ns>
    <id>2570</id>
    <revision>
      <id>56713</id>
      <parentid>52989</parentid>
      <timestamp>2013-06-01T05:40:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list begin]] to [[Template:cpp/iterator/dsc begin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc fun | cpp/iterator/begin | title=begin&lt;br/&gt;cbegin | returns an iterator to the beginning of a container or array| notes={{mark c++11}}&lt;br/&gt;{{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc data</title>
    <ns>10</ns>
    <id>13812</id>
    <revision>
      <id>73724</id>
      <timestamp>2014-11-13T14:57:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc fun | cpp/iterator/data | obtains the pointer to the underlying array| notes={{mark c++17}}}}</text>
      <sha1>fepot57eiezypzkoj4jl7l5ccbi5cnh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc distance</title>
    <ns>10</ns>
    <id>2695</id>
    <revision>
      <id>56718</id>
      <parentid>52990</parentid>
      <timestamp>2013-06-01T05:40:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list distance]] to [[Template:cpp/iterator/dsc distance]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc fun | cpp/iterator/distance | returns the distance between two iterators }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc empty</title>
    <ns>10</ns>
    <id>13813</id>
    <revision>
      <id>73725</id>
      <timestamp>2014-11-13T14:57:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/iterator/empty | checks whether the container is empty| notes={{mark c++17}}}}</text>
      <sha1>4369p6rwlp34fri222fymv1exbqpjov</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc end</title>
    <ns>10</ns>
    <id>2571</id>
    <revision>
      <id>56723</id>
      <parentid>52991</parentid>
      <timestamp>2013-06-01T05:40:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list end]] to [[Template:cpp/iterator/dsc end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc fun | cpp/iterator/end | title=end&lt;br/&gt;cend | returns an iterator to the end of a container or array | notes={{mark c++11}}&lt;br/&gt;{{mark c++14}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc front insert iterator</title>
    <ns>10</ns>
    <id>4842</id>
    <revision>
      <id>56728</id>
      <parentid>52992</parentid>
      <timestamp>2013-06-01T05:40:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list front insert iterator]] to [[Template:cpp/iterator/dsc front insert iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc tclass | cpp/iterator/front_insert_iterator | iterator adaptor for insertion at the front of a container }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc front inserter</title>
    <ns>10</ns>
    <id>4843</id>
    <revision>
      <id>56733</id>
      <parentid>52993</parentid>
      <timestamp>2013-06-01T05:40:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list front inserter]] to [[Template:cpp/iterator/dsc front inserter]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/iterator/front_inserter | creates a {{lc|std::front_insert_iterator}} of type inferred from the argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc insert iterator</title>
    <ns>10</ns>
    <id>4844</id>
    <revision>
      <id>56738</id>
      <parentid>52994</parentid>
      <timestamp>2013-06-01T05:40:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list insert iterator]] to [[Template:cpp/iterator/dsc insert iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc tclass | cpp/iterator/insert_iterator | iterator adaptor for insertion into a container}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc inserter</title>
    <ns>10</ns>
    <id>4845</id>
    <revision>
      <id>56742</id>
      <parentid>52995</parentid>
      <timestamp>2013-06-01T05:40:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list inserter]] to [[Template:cpp/iterator/dsc inserter]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc tfun | cpp/iterator/inserter | creates a {{lc|std::insert_iterator}} of type inferred from the argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc istream iterator</title>
    <ns>10</ns>
    <id>4846</id>
    <revision>
      <id>56747</id>
      <parentid>52996</parentid>
      <timestamp>2013-06-01T05:40:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list istream iterator]] to [[Template:cpp/iterator/dsc istream iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc tclass | cpp/iterator/istream_iterator | input iterator that reads from {{lc|std::basic_istream}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc istreambuf iterator</title>
    <ns>10</ns>
    <id>4848</id>
    <revision>
      <id>56751</id>
      <parentid>52997</parentid>
      <timestamp>2013-06-01T05:40:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list istreambuf iterator]] to [[Template:cpp/iterator/dsc istreambuf iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc tclass | cpp/iterator/istreambuf_iterator | input iterator that reads from {{lc|std::basic_streambuf}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc iterator</title>
    <ns>10</ns>
    <id>4852</id>
    <revision>
      <id>86392</id>
      <parentid>86284</parentid>
      <timestamp>2016-06-29T11:29:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>wording</comment>
      <text xml:space="preserve" bytes="151">{{dsc tclass | cpp/iterator/iterator | base class to ease the definition of required types for simple iterators | notes={{mark|deprecated in C++17}} }}</text>
      <sha1>ibyxd3q4f5big8a43ywjch0rygk806g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc iterator tags</title>
    <ns>10</ns>
    <id>4851</id>
    <revision>
      <id>56761</id>
      <parentid>52999</parentid>
      <timestamp>2013-06-01T05:40:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list iterator tags]] to [[Template:cpp/iterator/dsc iterator tags]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="232">{{dsc class | cpp/iterator/iterator_tags | title=input_iterator_tag&lt;br&gt;output_iterator_tag&lt;br&gt;forward_iterator_tag&lt;br&gt;bidirectional_iterator_tag&lt;br&gt;random_access_iterator_tag| empty class types used to indicate iterator categories}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc iterator traits</title>
    <ns>10</ns>
    <id>4850</id>
    <revision>
      <id>56766</id>
      <parentid>53000</parentid>
      <timestamp>2013-06-01T05:40:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list iterator traits]] to [[Template:cpp/iterator/dsc iterator traits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc tclass | cpp/iterator/iterator_traits | provides uniform interface to the properties of an iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc make move iterator</title>
    <ns>10</ns>
    <id>4839</id>
    <revision>
      <id>56771</id>
      <parentid>53001</parentid>
      <timestamp>2013-06-01T05:41:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list make move iterator]] to [[Template:cpp/iterator/dsc make move iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/iterator/make_move_iterator | creates a {{lc|std::move_iterator}} of type inferred from the argument|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc make reverse iterator</title>
    <ns>10</ns>
    <id>13166</id>
    <revision>
      <id>67805</id>
      <timestamp>2014-02-28T16:48:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>late-in-the-game c++14 addition, pushed in as LWG defect</comment>
      <text xml:space="preserve" bytes="146">{{dsc tfun | cpp/iterator/make_reverse_iterator | creates a {{lc|std::reverse_iterator}} of type inferred from the argument|notes={{mark c++14}}}}</text>
      <sha1>jwqjwtk29heeelljn9r1wsbo8z3v4pd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc move iterator</title>
    <ns>10</ns>
    <id>4838</id>
    <revision>
      <id>56775</id>
      <parentid>53002</parentid>
      <timestamp>2013-06-01T05:41:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list move iterator]] to [[Template:cpp/iterator/dsc move iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc tclass | cpp/iterator/move_iterator | iterator adaptor which dereferences to an rvalue reference |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc next</title>
    <ns>10</ns>
    <id>2738</id>
    <revision>
      <id>56780</id>
      <parentid>53003</parentid>
      <timestamp>2013-06-01T05:41:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list next]] to [[Template:cpp/iterator/dsc next]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/iterator/next | increment an iterator | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc ostream iterator</title>
    <ns>10</ns>
    <id>4847</id>
    <revision>
      <id>56784</id>
      <parentid>53004</parentid>
      <timestamp>2013-06-01T05:41:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list ostream iterator]] to [[Template:cpp/iterator/dsc ostream iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc tclass | cpp/iterator/ostream_iterator | output iterator that writes to {{lc|std::basic_ostream}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc ostreambuf iterator</title>
    <ns>10</ns>
    <id>4849</id>
    <revision>
      <id>56788</id>
      <parentid>53005</parentid>
      <timestamp>2013-06-01T05:41:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list ostreambuf iterator]] to [[Template:cpp/iterator/dsc ostreambuf iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc tclass | cpp/iterator/ostreambuf_iterator | output iterator that writes to {{lc|std::basic_streambuf}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc prev</title>
    <ns>10</ns>
    <id>2737</id>
    <revision>
      <id>56793</id>
      <parentid>53006</parentid>
      <timestamp>2013-06-01T05:41:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list prev]] to [[Template:cpp/iterator/dsc prev]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc fun | cpp/iterator/prev | decrement an iterator |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc rbegin</title>
    <ns>10</ns>
    <id>9995</id>
    <revision>
      <id>56798</id>
      <parentid>53007</parentid>
      <timestamp>2013-06-01T05:41:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list rbegin]] to [[Template:cpp/iterator/dsc rbegin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc fun | cpp/iterator/rbegin | title=rbegin&lt;br/&gt;crbegin | returns a reverse iterator to a container or array| notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc rend</title>
    <ns>10</ns>
    <id>9996</id>
    <revision>
      <id>56803</id>
      <parentid>53008</parentid>
      <timestamp>2013-06-01T05:41:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list rend]] to [[Template:cpp/iterator/dsc rend]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc fun | cpp/iterator/rend | title=rend&lt;br/&gt;crend | returns a reverse end iterator for a container or array| notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc reverse iterator</title>
    <ns>10</ns>
    <id>4837</id>
    <revision>
      <id>56807</id>
      <parentid>53009</parentid>
      <timestamp>2013-06-01T05:41:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/dcl list reverse iterator]] to [[Template:cpp/iterator/dsc reverse iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc tclass | cpp/iterator/reverse_iterator | iterator adaptor for reverse-order traversal}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/dsc size</title>
    <ns>10</ns>
    <id>13811</id>
    <revision>
      <id>73722</id>
      <timestamp>2014-11-13T14:56:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/iterator/size | returns the size of a container or array| notes={{mark c++17}}}}</text>
      <sha1>gaw7ki5sjsrkrhi1uolx6apz52s71h7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/front insert iterator/navbar</title>
    <ns>10</ns>
    <id>4954</id>
    <revision>
      <id>39933</id>
      <parentid>35714</parentid>
      <timestamp>2012-09-28T20:10:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="280">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/front_insert_iterator/navbar heading
|content3 = cpp/iterator/front_insert_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/front insert iterator/navbar content</title>
    <ns>10</ns>
    <id>4956</id>
    <revision>
      <id>53010</id>
      <parentid>35715</parentid>
      <timestamp>2013-06-01T04:57:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="340">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/front_insert_iterator/front_insert_iterator}}
{{nv mem ln | cpp/iterator/front_insert_iterator/operator{{=}}}}
{{nv mem ln | cpp/iterator/front_insert_iterator/operator*}}
{{nv mem ln | cpp/iterator/front_insert_iterator/operator++|operator++|operator++(int)}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/front insert iterator/navbar heading</title>
    <ns>10</ns>
    <id>4955</id>
    <revision>
      <id>48099</id>
      <parentid>35716</parentid>
      <timestamp>2013-05-18T18:12:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="69">{{ltt|cpp/iterator/front_insert_iterator|std::front_insert_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/front insert iterator/title</title>
    <ns>10</ns>
    <id>8480</id>
    <revision>
      <id>31263</id>
      <timestamp>2012-05-17T03:03:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">&lt;onlyinclude&gt;{{cpp/title | n=front_insert_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/insert iterator/navbar</title>
    <ns>10</ns>
    <id>4958</id>
    <revision>
      <id>39934</id>
      <parentid>35718</parentid>
      <timestamp>2012-09-28T20:10:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="268">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/insert_iterator/navbar heading
|content3 = cpp/iterator/insert_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/insert iterator/navbar content</title>
    <ns>10</ns>
    <id>4960</id>
    <revision>
      <id>53011</id>
      <parentid>35719</parentid>
      <timestamp>2013-06-01T04:57:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="310">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/insert_iterator/insert_iterator}}
{{nv mem ln | cpp/iterator/insert_iterator/operator{{=}}}}
{{nv mem ln | cpp/iterator/insert_iterator/operator*}}
{{nv mem ln | cpp/iterator/insert_iterator/operator++|operator++|operator++(int)}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/insert iterator/navbar heading</title>
    <ns>10</ns>
    <id>4959</id>
    <revision>
      <id>48101</id>
      <parentid>34605</parentid>
      <timestamp>2013-05-18T18:12:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="57">{{ltt|cpp/iterator/insert_iterator|std::insert_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/insert iterator/title</title>
    <ns>10</ns>
    <id>8481</id>
    <revision>
      <id>31264</id>
      <timestamp>2012-05-17T03:03:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=insert_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/constructor</title>
    <ns>10</ns>
    <id>8758</id>
    <revision>
      <id>90587</id>
      <parentid>68843</parentid>
      <timestamp>2017-03-06T12:00:42Z</timestamp>
      <contributor>
        <username>Chris.sharpe.99</username>
        <id>6373</id>
      </contributor>
      <text xml:space="preserve" bytes="562">{{cpp/iterator/{{{1|}}}/title|{{{1}}}}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 1=
explicit {{{1}}}( Container&amp; c{{#ifeq:{{{1|}}}|insert_iterator|, typename Container::iterator i}} );
}}
{{dcl end}}

Initializes the underlying pointer to the container to {{lc|std::addressof(c)}} {{#ifeq:{{{1|}}}|insert_iterator|and the underlying iterator to {{tt|i}}}}.

===Parameters===
{{par begin}}
{{par | c | container to initialize the inserter with}}
{{#ifeq:{{{1|}}}|insert_iterator|
{{par | i | iterator to initialize the inserter with}}
}}
{{par end}}</text>
      <sha1>29w8o8ntugodooe7zwt155n7j2al869</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/dsc constructor</title>
    <ns>10</ns>
    <id>8742</id>
    <revision>
      <id>56812</id>
      <parentid>53013</parentid>
      <timestamp>2013-06-01T05:41:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/inserter/dcl list constructor]] to [[Template:cpp/iterator/inserter/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem ctor | cpp/iterator/{{{1|}}}/{{{1|}}} | constructs a new {{tt|{{{1}}}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/dsc operator arith</title>
    <ns>10</ns>
    <id>8745</id>
    <revision>
      <id>56826</id>
      <parentid>53016</parentid>
      <timestamp>2013-06-01T05:41:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/inserter/dcl list operator arith]] to [[Template:cpp/iterator/inserter/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/iterator/{{{1|}}}/operator++ | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | no-op }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/dsc operator*</title>
    <ns>10</ns>
    <id>8744</id>
    <revision>
      <id>56816</id>
      <parentid>53014</parentid>
      <timestamp>2013-06-01T05:41:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/inserter/dcl list operator*]] to [[Template:cpp/iterator/inserter/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">{{dsc mem fun | cpp/iterator/{{{1|}}}/operator* | no-op }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/dsc operator=</title>
    <ns>10</ns>
    <id>8743</id>
    <revision>
      <id>56821</id>
      <parentid>53015</parentid>
      <timestamp>2013-06-01T05:41:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/inserter/dcl list operator=]] to [[Template:cpp/iterator/inserter/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/iterator/{{{1|}}}/operator{{=}} | inserts an object into the associated container }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/operator*</title>
    <ns>10</ns>
    <id>8760</id>
    <revision>
      <id>78712</id>
      <parentid>62248</parentid>
      <timestamp>2015-06-06T08:36:12Z</timestamp>
      <contributor>
        <ip>124.163.209.97</ip>
      </contributor>
      <text xml:space="preserve" bytes="522">{{cpp/iterator/{{{1|}}}/title|operator*}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 
{{{1}}}&amp; operator*();
}}
{{dcl end}}

Does nothing, this member function is provided to satisfy the requirements of {{concept|OutputIterator}}.

It returns the iterator itself, which makes it possible to use code such as {{c|1=*iter = value}} to output (insert) the value into the underlying {{#switch:{{{1|}}}|ostream_iterator|ostreambuf_iterator=stream|container}}.

===Parameters===
(none)

===Return value===
{{c|*this}}</text>
      <sha1>ktwbm39cuptf1nta79islnb5kmiajuc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/operator++</title>
    <ns>10</ns>
    <id>8761</id>
    <revision>
      <id>78711</id>
      <parentid>53017</parentid>
      <timestamp>2015-06-05T19:44:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>differentiate streams from containers</comment>
      <text xml:space="preserve" bytes="573">{{cpp/iterator/{{{1|}}}/title|operator++}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 1=
{{{1}}}&amp; operator++();
}}
{{dcl | 1=
{{{1}}}&amp; operator++( int );
}}
{{dcl end}}

Does nothing. These operator overloads are provided to satisfy the requirements of {{concept|OutputIterator}}. They make it possible for the expressions {{c|1=*iter++=value}} and {{c|1=*++iter=value}} to be used to output (insert) a value into the underlying {{#switch:{{{1|}}}|ostream_iterator|ostreambuf_iterator=stream|container}}.

===Parameters===
(none)

===Return value===
{{c|*this}}</text>
      <sha1>0pqgrjb9coedmpzxrdrjg0trmw2sos4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/inserter/operator=</title>
    <ns>10</ns>
    <id>8759</id>
    <revision>
      <id>81189</id>
      <parentid>72801</parentid>
      <timestamp>2015-10-06T17:09:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention the use of hinted insert</comment>
      <text xml:space="preserve" bytes="1407">{{cpp/iterator/{{{1|}}}/title|operator{{=}}}}
{{cpp/iterator/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 | 1=
{{{1}}}&lt;Container&gt;&amp;
    operator=( typename Container::const_reference value );
}}
{{dcl | since=c++11 | 1=
{{{1}}}&lt;Container&gt;&amp;
    operator=( const typename Container::value_type&amp; value );
}}
{{dcl rev end}}
{{dcl | since=c++11 | num=2 | 1=
{{{1}}}&lt;Container&gt;&amp;
    operator=( typename Container::value_type&amp;&amp; value );
}}
{{dcl end}}

Inserts the given value {{tt|value}} to the container.

{{#switch:{{{1|}}}
|insert_iterator=
@1@ Results in {{c|iter {{=}} container-&gt;insert(iter, value); ++iter;}}
@2@ Results in {{c|iter {{=}} container-&gt;insert(iter, std::move(value)); ++iter;}}
|back_insert_iterator=
@1@ Results in {{c|container-&gt;push_back(value)}}
@2@ Results in {{c|container-&gt;push_back(std::move(value))}}
|front_insert_iterator|
@1@ Results in {{c|container-&gt;push_front(value)}}
@2@ Results in {{c|container-&gt;push_front(std::move(value))}}
}}

===Parameters===
{{par begin}}
{{par | value | the value to insert}}
{{par end}}

===Return value===
{{c|*this}}

{{#ifeq:{{{1|}}}|insert_iterator|
===Notes===
This function exploits the signature compatibility between hinted insert for associative containers (such as {{lc|std::set::insert}}) and positional insert for sequential containers (such as {{lc|std::vector::insert}}).
}}

===Example===
{{example}}</text>
      <sha1>0zqpmw0s7dsjf8l7h64hlpvi8rkgswi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/dsc constructor</title>
    <ns>10</ns>
    <id>10147</id>
    <revision>
      <id>56831</id>
      <parentid>53019</parentid>
      <timestamp>2013-06-01T05:41:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/istream iterator/dcl list constructor]] to [[Template:cpp/iterator/istream iterator/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem ctor | cpp/iterator/istream_iterator/istream_iterator | constructs a new istream_iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/dsc destructor</title>
    <ns>10</ns>
    <id>10148</id>
    <revision>
      <id>88320</id>
      <parentid>56836</parentid>
      <timestamp>2016-11-16T15:36:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>giving it a page to explain when it is trivial</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem dtor | cpp/iterator/istream_iterator/~istream_iterator | destructs an istream_iterator, including the cached value }}</text>
      <sha1>i409xuccjpivcj85r19ylytqbxo8vts</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/dsc operator arith</title>
    <ns>10</ns>
    <id>10150</id>
    <revision>
      <id>56846</id>
      <parentid>53022</parentid>
      <timestamp>2013-06-01T05:42:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/istream iterator/dcl list operator arith]] to [[Template:cpp/iterator/istream iterator/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/iterator/istream_iterator/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | advances the iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/dsc operator cmp</title>
    <ns>10</ns>
    <id>10151</id>
    <revision>
      <id>61080</id>
      <parentid>56851</parentid>
      <timestamp>2013-06-05T10:39:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/iterator/istream_iterator/operator_cmp | title=operator==&lt;br&gt;operator!= | compares two {{tt|istream_iterator}}s }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/dsc operator*</title>
    <ns>10</ns>
    <id>10149</id>
    <revision>
      <id>61414</id>
      <parentid>56841</parentid>
      <timestamp>2013-06-05T23:58:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="119">{{dsc mem fun | cpp/iterator/istream_iterator/operator* | title=operator*&lt;br&gt;operator-&gt; | returns the current element}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/navbar</title>
    <ns>10</ns>
    <id>4910</id>
    <revision>
      <id>39935</id>
      <parentid>35720</parentid>
      <timestamp>2012-09-28T20:10:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="270">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/istream_iterator/navbar heading
|content3 = cpp/iterator/istream_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/navbar content</title>
    <ns>10</ns>
    <id>4912</id>
    <revision>
      <id>88321</id>
      <parentid>53024</parentid>
      <timestamp>2016-11-16T15:36:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+dtor</comment>
      <text xml:space="preserve" bytes="462">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/istream_iterator/istream_iterator}}
{{nv mem ln | cpp/iterator/istream_iterator/~istream_iterator}}
{{nv mem ln | cpp/iterator/istream_iterator/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/iterator/istream_iterator/operator_arith|operator++|operator++(int)}}
{{nv h2 | Non-member functions}}
{{nv ln | cpp/iterator/istream_iterator/operator_cmp|operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1>m7g2i6zt9vjuor95mvekbuxiwcqgz6i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/navbar heading</title>
    <ns>10</ns>
    <id>4911</id>
    <revision>
      <id>48108</id>
      <parentid>33247</parentid>
      <timestamp>2013-05-18T18:13:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="59">{{ltt|cpp/iterator/istream_iterator|std::istream_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istream iterator/title</title>
    <ns>10</ns>
    <id>8482</id>
    <revision>
      <id>31265</id>
      <timestamp>2012-05-17T03:04:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=istream_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/dsc constructor</title>
    <ns>10</ns>
    <id>10141</id>
    <revision>
      <id>61398</id>
      <parentid>56856</parentid>
      <timestamp>2013-06-05T23:01:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem ctor | cpp/iterator/istreambuf_iterator/istreambuf_iterator | constructs a new {{tt|istreambuf_iterator}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/dsc destructor</title>
    <ns>10</ns>
    <id>10142</id>
    <revision>
      <id>61399</id>
      <parentid>56860</parentid>
      <timestamp>2013-06-05T23:01:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem dtor | nolink=true| destructs an {{tt|istreambuf_iterator}} | notes={{mark implicit}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/dsc equal</title>
    <ns>10</ns>
    <id>10145</id>
    <revision>
      <id>61405</id>
      <parentid>56865</parentid>
      <timestamp>2013-06-05T23:10:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/iterator/istreambuf_iterator/equal | tests if both {{tt|istreambuf_iterator}}s are end-of-stream or if both are valid}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/dsc operator arith</title>
    <ns>10</ns>
    <id>10144</id>
    <revision>
      <id>56875</id>
      <parentid>53029</parentid>
      <timestamp>2013-06-01T05:42:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/istreambuf iterator/dcl list operator arith]] to [[Template:cpp/iterator/istreambuf iterator/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc mem fun | cpp/iterator/istreambuf_iterator/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | advances the iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/dsc operator cmp</title>
    <ns>10</ns>
    <id>10146</id>
    <revision>
      <id>61409</id>
      <parentid>56880</parentid>
      <timestamp>2013-06-05T23:26:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="137">{{dsc tfun | cpp/iterator/istreambuf_iterator/operator_cmp | title=operator==&lt;br&gt;operator!= | compares two {{tt|istreambuf_iterator}}s }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/dsc operator*</title>
    <ns>10</ns>
    <id>10143</id>
    <revision>
      <id>90701</id>
      <parentid>56870</parentid>
      <timestamp>2017-03-07T23:24:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2790</comment>
      <text xml:space="preserve" bytes="262">{{dsc mem fun | cpp/iterator/istreambuf_iterator/operator* | title=operator*&lt;br&gt;operator-&gt; | obtains a copy of the current character&lt;br&gt;accesses a member of the current character, if {{tt|CharT}} has members | notes=&lt;br&gt;{{mark since c++11}}{{mark until c++17}}}}</text>
      <sha1>hz1w2uppnm6uev3s3htuubks0hjnkli</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/navbar</title>
    <ns>10</ns>
    <id>4857</id>
    <revision>
      <id>39936</id>
      <parentid>35722</parentid>
      <timestamp>2012-09-28T20:10:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="276">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/istreambuf_iterator/navbar heading
|content3 = cpp/iterator/istreambuf_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/navbar content</title>
    <ns>10</ns>
    <id>4859</id>
    <revision>
      <id>90702</id>
      <parentid>61397</parentid>
      <timestamp>2017-03-07T23:24:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="513">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/istreambuf_iterator/istreambuf_iterator}}
{{nv mem ln | cpp/iterator/istreambuf_iterator/operator*|operator*|operator-&gt;|notes=&lt;br&gt;{{mark c++11}}{{mark until c++17}}}}
{{nv mem ln | cpp/iterator/istreambuf_iterator/operator_arith|operator++|operator++(int)}}
{{nv mem ln | cpp/iterator/istreambuf_iterator/equal}}
{{nv h2 | Non-member functions}}
{{nv ln | cpp/iterator/istreambuf_iterator/operator_cmp|operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1>e8bgq6jigbd4rqsk3dwgm9ix8nl6zwo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/navbar heading</title>
    <ns>10</ns>
    <id>4858</id>
    <revision>
      <id>48109</id>
      <parentid>35723</parentid>
      <timestamp>2013-05-18T18:13:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="65">{{ltt|cpp/iterator/istreambuf_iterator|std::istreambuf_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/istreambuf iterator/title</title>
    <ns>10</ns>
    <id>8484</id>
    <revision>
      <id>31268</id>
      <timestamp>2012-05-17T03:05:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=istreambuf_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/iterator/inherit</title>
    <ns>10</ns>
    <id>4908</id>
    <revision>
      <id>78506</id>
      <parentid>53032</parentid>
      <timestamp>2015-05-24T13:01:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="476">===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{c|{{{2|}}} }} }}
{{dsc | {{tt|difference_type}} | {{c|{{{3|}}} }} }}
{{dsc | {{tt|pointer}} | {{c|{{{4|}}} }} }}
{{dsc | {{tt|reference}} | {{c|{{{5|}}} }} }}
{{dsc | {{tt|iterator_category}} | {{c|{{{1|}}} }} }}
{{dsc end}}
Note: before C++17, these member types are required to be obtained by inheriting from {{c|std::iterator&lt;{{{1}}},{{{2}}},{{{3}}},{{{4}}},{{{5}}}&gt;}}.</text>
      <sha1>ayt8s0fzd3l92u7bopcue4x1vku04pj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/move iterator/navbar</title>
    <ns>10</ns>
    <id>4931</id>
    <revision>
      <id>39937</id>
      <parentid>35495</parentid>
      <timestamp>2012-09-28T20:11:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="264">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/move_iterator/navbar heading
|content3 = cpp/iterator/move_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/move iterator/navbar content</title>
    <ns>10</ns>
    <id>4933</id>
    <revision>
      <id>53033</id>
      <parentid>36923</parentid>
      <timestamp>2013-06-01T04:58:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="767">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/move_iterator/move_iterator}}
{{nv mem ln | cpp/iterator/move_iterator/operator{{=}}}}
{{nv mem ln | cpp/iterator/move_iterator/base}}
{{nv mem ln | cpp/iterator/move_iterator/operator* | operator* | operator-&gt;}}
{{nv mem ln | cpp/iterator/move_iterator/operator_at|operator[]}}
{{nv mem ln | cpp/iterator/move_iterator/operator_arith|operator++|operator+|operator+{{=}}|operator--|operator-|operator-{{=}}}}
{{nv h2 | Non-member functions}}
{{nv ln | cpp/iterator/move_iterator/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;|operator&lt;=|operator&gt;|operator&gt;=}}
{{nv ln | cpp/iterator/move_iterator/operator+ | operator+}}
{{nv ln | cpp/iterator/move_iterator/operator- | operator-}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/move iterator/navbar heading</title>
    <ns>10</ns>
    <id>4932</id>
    <revision>
      <id>71902</id>
      <parentid>48096</parentid>
      <timestamp>2014-07-01T13:15:09Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>correct</comment>
      <text xml:space="preserve" bytes="53">{{ltt|cpp/iterator/move_iterator|std::move_iterator}}</text>
      <sha1>kelyzphul7zwg39bhzzksd6ou0tyi9o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/move iterator/title</title>
    <ns>10</ns>
    <id>8477</id>
    <revision>
      <id>31242</id>
      <timestamp>2012-05-16T15:34:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=move_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/navbar</title>
    <ns>10</ns>
    <id>1578</id>
    <revision>
      <id>39938</id>
      <parentid>35733</parentid>
      <timestamp>2012-09-28T20:11:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="156">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/navbar content</title>
    <ns>10</ns>
    <id>2150</id>
    <revision>
      <id>75372</id>
      <parentid>67839</parentid>
      <timestamp>2015-01-15T19:19:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+size, empty,data</comment>
      <text xml:space="preserve" bytes="1827">{{nv begin}}

{{nv h1 | Iterator primitives}}
{{nv ln | cpp/iterator/iterator_traits}}
{{nv ln | cpp/iterator/iterator_tags|input_iterator_tag|output_iterator_tag|forward_iterator_tag|bidirectional_iterator_tag|random_access_iterator_tag}}
{{nv ln | cpp/iterator/iterator}}

{{nv h1 | Iterator adaptors}}
{{nv col begin}}
{{nv ln | cpp/iterator/reverse_iterator}}
{{nv ln | cpp/iterator/move_iterator | notes={{mark c++11}}}}
{{nv ln | cpp/iterator/back_insert_iterator}}
{{nv ln | cpp/iterator/front_insert_iterator}}
{{nv ln | cpp/iterator/insert_iterator}}
{{nv col next}}
{{nv ln | cpp/iterator/make_reverse_iterator| notes={{mark c++14}}}}
{{nv ln | cpp/iterator/make_move_iterator | notes={{mark c++11}}}}
{{nv ln | cpp/iterator/back_inserter}}
{{nv ln | cpp/iterator/front_inserter}}
{{nv ln | cpp/iterator/inserter}}
{{nv col end}}

{{nv h1 | Stream iterators}}
{{nv ln | cpp/iterator/istream_iterator}}
{{nv ln | cpp/iterator/ostream_iterator}}
{{nv ln | cpp/iterator/istreambuf_iterator}}
{{nv ln | cpp/iterator/ostreambuf_iterator}}

{{nv h1 | Iterator operations}}
{{nv ln | cpp/iterator/advance}}
{{nv ln | cpp/iterator/distance}}
{{nv ln | cpp/iterator/prev | notes={{mark c++11}}}}
{{nv ln | cpp/iterator/next | notes={{mark c++11}}}}

{{nv h1 | Range access}}
{{nv ln | cpp/iterator/begin | begin | cbegin | notes={{mark c++11}}&lt;br/&gt;{{mark c++14}}}}
{{nv ln | cpp/iterator/end | end | cend | notes={{mark c++11}}&lt;br/&gt;{{mark c++14}}}}
{{nv ln | cpp/iterator/rbegin | rbegin | crbegin | notes={{mark c++14}}&lt;br/&gt;{{mark c++14}}}}
{{nv ln | cpp/iterator/rend | rend | crend | notes={{mark c++14}}&lt;br/&gt;{{mark c++14}}}}

{{nv h1 | Container access}}
{{nv ln | cpp/iterator/size| notes={{mark c++17}}}}
{{nv ln | cpp/iterator/empty| notes={{mark c++17}}}}
{{nv ln | cpp/iterator/data| notes={{mark c++17}}}}
{{nv end}}</text>
      <sha1>dajqh9eijdgw1eb5go2ynw0tf19sbha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/navbar heading</title>
    <ns>10</ns>
    <id>1579</id>
    <revision>
      <id>35735</id>
      <parentid>3158</parentid>
      <timestamp>2012-06-15T22:30:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/sidebar heading]] to [[Template:cpp/iterator/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="35">[[cpp/iterator | Iterator library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/dsc constructor</title>
    <ns>10</ns>
    <id>10165</id>
    <revision>
      <id>56884</id>
      <parentid>53035</parentid>
      <timestamp>2013-06-01T05:42:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostream iterator/dcl list constructor]] to [[Template:cpp/iterator/ostream iterator/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem ctor | cpp/iterator/ostream_iterator/ostream_iterator | constructs a new ostream_iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/dsc destructor</title>
    <ns>10</ns>
    <id>10166</id>
    <revision>
      <id>56889</id>
      <parentid>53036</parentid>
      <timestamp>2013-06-01T05:42:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostream iterator/dcl list destructor]] to [[Template:cpp/iterator/ostream iterator/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem dtor | cpp/iterator/ostream_iterator/~ostream_iterator | destructs an {{tt|ostream_iterator}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/dsc operator arith</title>
    <ns>10</ns>
    <id>10169</id>
    <revision>
      <id>56904</id>
      <parentid>53039</parentid>
      <timestamp>2013-06-01T05:42:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostream iterator/dcl list operator arith]] to [[Template:cpp/iterator/ostream iterator/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/iterator/ostream_iterator/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | no-op }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/dsc operator*</title>
    <ns>10</ns>
    <id>10168</id>
    <revision>
      <id>56894</id>
      <parentid>53037</parentid>
      <timestamp>2013-06-01T05:42:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostream iterator/dcl list operator*]] to [[Template:cpp/iterator/ostream iterator/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/iterator/ostream_iterator/operator* | no-op }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/dsc operator=</title>
    <ns>10</ns>
    <id>10167</id>
    <revision>
      <id>56899</id>
      <parentid>53038</parentid>
      <timestamp>2013-06-01T05:42:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostream iterator/dcl list operator=]] to [[Template:cpp/iterator/ostream iterator/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/iterator/ostream_iterator/operator{{=}} | writes a object to the associated output sequence }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/navbar</title>
    <ns>10</ns>
    <id>4914</id>
    <revision>
      <id>39939</id>
      <parentid>35726</parentid>
      <timestamp>2012-09-28T20:11:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="270">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/ostream_iterator/navbar heading
|content3 = cpp/iterator/ostream_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/navbar content</title>
    <ns>10</ns>
    <id>4916</id>
    <revision>
      <id>53040</id>
      <parentid>48461</parentid>
      <timestamp>2013-06-01T04:58:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="383">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/ostream_iterator/ostream_iterator}}
{{nv mem ln | cpp/iterator/ostream_iterator/~ostream_iterator}}
{{nv mem ln | cpp/iterator/ostream_iterator/operator{{=}}}}
{{nv mem ln | cpp/iterator/ostream_iterator/operator*}}
{{nv mem ln | cpp/iterator/ostream_iterator/operator_arith|operator++|operator++(int)}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/navbar heading</title>
    <ns>10</ns>
    <id>4915</id>
    <revision>
      <id>48107</id>
      <parentid>33628</parentid>
      <timestamp>2013-05-18T18:13:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="59">{{ltt|cpp/iterator/ostream_iterator|std::ostream_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostream iterator/title</title>
    <ns>10</ns>
    <id>8483</id>
    <revision>
      <id>31267</id>
      <parentid>31266</parentid>
      <timestamp>2012-05-17T03:04:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=ostream_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/dsc constructor</title>
    <ns>10</ns>
    <id>10158</id>
    <revision>
      <id>61401</id>
      <parentid>56909</parentid>
      <timestamp>2013-06-05T23:03:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem ctor | cpp/iterator/ostreambuf_iterator/ostreambuf_iterator | constructs a new {{tt|ostreambuf_iterator}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/dsc destructor</title>
    <ns>10</ns>
    <id>10159</id>
    <revision>
      <id>61402</id>
      <parentid>56914</parentid>
      <timestamp>2013-06-05T23:03:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem dtor | nolink=true| destructs an {{tt|ostreambuf_iterator}} | notes={{mark implicit}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/dsc failed</title>
    <ns>10</ns>
    <id>10163</id>
    <revision>
      <id>56918</id>
      <parentid>53043</parentid>
      <timestamp>2013-06-01T05:43:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostreambuf iterator/dcl list failed]] to [[Template:cpp/iterator/ostreambuf iterator/dsc failed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/iterator/ostreambuf_iterator/failed | tests if output failed}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/dsc operator arith</title>
    <ns>10</ns>
    <id>10162</id>
    <revision>
      <id>56928</id>
      <parentid>53046</parentid>
      <timestamp>2013-06-01T05:43:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostreambuf iterator/dcl list operator arith]] to [[Template:cpp/iterator/ostreambuf iterator/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/iterator/ostreambuf_iterator/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | no-op }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/dsc operator*</title>
    <ns>10</ns>
    <id>10161</id>
    <revision>
      <id>56921</id>
      <parentid>53044</parentid>
      <timestamp>2013-06-01T05:43:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostreambuf iterator/dcl list operator*]] to [[Template:cpp/iterator/ostreambuf iterator/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/iterator/ostreambuf_iterator/operator* | no-op }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/dsc operator=</title>
    <ns>10</ns>
    <id>10160</id>
    <revision>
      <id>56924</id>
      <parentid>53045</parentid>
      <timestamp>2013-06-01T05:43:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/ostreambuf iterator/dcl list operator=]] to [[Template:cpp/iterator/ostreambuf iterator/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/iterator/ostreambuf_iterator/operator{{=}} | writes a character to the associated output sequence }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/navbar</title>
    <ns>10</ns>
    <id>4904</id>
    <revision>
      <id>39940</id>
      <parentid>35728</parentid>
      <timestamp>2012-09-28T20:11:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="276">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/ostreambuf_iterator/navbar heading
|content3 = cpp/iterator/ostreambuf_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/navbar content</title>
    <ns>10</ns>
    <id>4906</id>
    <revision>
      <id>53047</id>
      <parentid>48462</parentid>
      <timestamp>2013-06-01T04:58:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="390">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/ostreambuf_iterator/ostreambuf_iterator}}
{{nv mem ln | cpp/iterator/ostreambuf_iterator/operator{{=}}}}
{{nv mem ln | cpp/iterator/ostreambuf_iterator/operator*}}
{{nv mem ln | cpp/iterator/ostreambuf_iterator/operator_arith|operator++|operator++(int)}}
{{nv mem ln | cpp/iterator/ostreambuf_iterator/failed}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/navbar heading</title>
    <ns>10</ns>
    <id>4905</id>
    <revision>
      <id>75421</id>
      <parentid>48110</parentid>
      <timestamp>2015-01-17T07:48:39Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="65">{{ltt|cpp/iterator/ostreambuf_iterator|std::ostreambuf_iterator}}</text>
      <sha1>io85or397gdu2dsugjw17dba3yg57xz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/ostreambuf iterator/title</title>
    <ns>10</ns>
    <id>8485</id>
    <revision>
      <id>31269</id>
      <timestamp>2012-05-17T03:05:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=ostreambuf_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/range access availability</title>
    <ns>10</ns>
    <id>16223</id>
    <revision>
      <id>91267</id>
      <timestamp>2017-03-30T21:00:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="468">In addition to being included in {{tt|&lt;iterator&gt;}}, {{tt|std::{{{1}}}}} {{#if:{{{2|}}}|and {{tt|std::{{{2}}}}} are|is}} guaranteed to become available if any of the following headers are included: {{tt|&lt;array&gt;}}, {{tt|&lt;deque&gt;}}, {{tt|&lt;forward_list&gt;}}, {{tt|&lt;list&gt;}}, {{tt|&lt;map&gt;}}, {{tt|&lt;regex&gt;}}, {{tt|&lt;set&gt;}}, {{tt|&lt;string&gt;}}{{#ifeq:{{{nosv|false}}}|false|{{rev inl|since=c++17|, &lt;string_view&gt;}}}}, {{tt|&lt;unordered_map&gt;}}, {{tt|&lt;unordered_set&gt;}}, and {{tt|&lt;vector&gt;}}.</text>
      <sha1>4aeax9mqw4rdv8uaevwftmcho04yvnp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/dsc base</title>
    <ns>10</ns>
    <id>6377</id>
    <revision>
      <id>56932</id>
      <parentid>53048</parentid>
      <timestamp>2013-06-01T05:43:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/reverse iterator/dcl list base]] to [[Template:cpp/iterator/reverse iterator/dsc base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/iterator/reverse_iterator/base | accesses the underlying iterator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/dsc constructor</title>
    <ns>10</ns>
    <id>6375</id>
    <revision>
      <id>56936</id>
      <parentid>53049</parentid>
      <timestamp>2013-06-01T05:43:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/reverse iterator/dcl list constructor]] to [[Template:cpp/iterator/reverse iterator/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem ctor | cpp/iterator/reverse_iterator/reverse_iterator | constructs a new iterator adaptor }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/dsc operator at</title>
    <ns>10</ns>
    <id>6379</id>
    <revision>
      <id>56947</id>
      <parentid>53052</parentid>
      <timestamp>2013-06-01T05:43:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/reverse iterator/dcl list operator at]] to [[Template:cpp/iterator/reverse iterator/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem fun | cpp/iterator/reverse_iterator/operator_at | title=operator[] | accesses an element by index}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/dsc operator*</title>
    <ns>10</ns>
    <id>6378</id>
    <revision>
      <id>56940</id>
      <parentid>53050</parentid>
      <timestamp>2013-06-01T05:43:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/reverse iterator/dcl list operator*]] to [[Template:cpp/iterator/reverse iterator/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc mem fun | cpp/iterator/reverse_iterator/operator* | title=operator*&lt;br&gt;operator-&gt; | dereferences the decremented underlying iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/dsc operator=</title>
    <ns>10</ns>
    <id>6376</id>
    <revision>
      <id>56944</id>
      <parentid>53051</parentid>
      <timestamp>2013-06-01T05:43:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/iterator/reverse iterator/dcl list operator=]] to [[Template:cpp/iterator/reverse iterator/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/iterator/reverse_iterator/operator{{=}} | assigns contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/navbar</title>
    <ns>10</ns>
    <id>4937</id>
    <revision>
      <id>39941</id>
      <parentid>35731</parentid>
      <timestamp>2012-09-28T20:11:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="270">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/iterator/navbar heading
|content2 = cpp/iterator/navbar content

|heading3 = cpp/iterator/reverse_iterator/navbar heading
|content3 = cpp/iterator/reverse_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/navbar content</title>
    <ns>10</ns>
    <id>4939</id>
    <revision>
      <id>53053</id>
      <parentid>36922</parentid>
      <timestamp>2013-06-01T04:58:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="797">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/iterator/reverse_iterator/reverse_iterator}}
{{nv mem ln | cpp/iterator/reverse_iterator/operator{{=}}}}
{{nv mem ln | cpp/iterator/reverse_iterator/base}}
{{nv mem ln | cpp/iterator/reverse_iterator/operator* | operator* | operator-&gt;}}
{{nv mem ln | cpp/iterator/reverse_iterator/operator_at|operator[]}}
{{nv mem ln | cpp/iterator/reverse_iterator/operator_arith|operator++|operator+|operator+{{=}}|operator--|operator-|operator-{{=}}}}
{{nv h2 | Non-member functions}}
{{nv ln | cpp/iterator/reverse_iterator/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;|operator&lt;=|operator&gt;|operator&gt;=}}
{{nv ln | cpp/iterator/reverse_iterator/operator+ | operator+}}
{{nv ln | cpp/iterator/reverse_iterator/operator- | operator-}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/navbar heading</title>
    <ns>10</ns>
    <id>4938</id>
    <revision>
      <id>48097</id>
      <parentid>35732</parentid>
      <timestamp>2013-05-18T18:11:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="59">{{ltt|cpp/iterator/reverse_iterator|std::reverse_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/iterator/reverse iterator/title</title>
    <ns>10</ns>
    <id>6380</id>
    <revision>
      <id>25406</id>
      <timestamp>2012-04-21T12:08:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=reverse_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/keyword/navbar</title>
    <ns>10</ns>
    <id>1580</id>
    <revision>
      <id>39942</id>
      <parentid>36039</parentid>
      <timestamp>2012-09-28T20:11:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="233">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/language/navbar heading
|content2 = cpp/language/navbar content

|heading3 = cpp/keyword/navbar heading
|content3 = cpp/keyword/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/keyword/navbar content</title>
    <ns>10</ns>
    <id>1581</id>
    <revision>
      <id>67412</id>
      <parentid>67282</parentid>
      <timestamp>2014-02-08T09:58:45Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>mark c++11</comment>
      <text xml:space="preserve" bytes="3084">{{nv begin}}
{{nv col begin}}
{{nv ln | cpp/keyword/alignas | notes= {{mark c++11}} }} 
{{nv ln | cpp/keyword/alignof | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/and}}
{{nv ln | cpp/keyword/and_eq}}
{{nv ln | cpp/keyword/asm}}
{{nv ln | cpp/keyword/auto}}
{{nv ln | cpp/keyword/bitand}}
{{nv ln | cpp/keyword/bitor}}
{{nv ln | cpp/keyword/bool}}
{{nv ln | cpp/keyword/break}}
{{nv ln | cpp/keyword/case}}
{{nv ln | cpp/keyword/catch}}
{{nv ln | cpp/keyword/char}}
{{nv ln | cpp/keyword/char16_t | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/char32_t | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/class}}
{{nv ln | cpp/keyword/compl}}
{{nv ln | cpp/keyword/const}}
{{nv ln | cpp/keyword/constexpr | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/const_cast}}
{{nv ln | cpp/keyword/continue}}
{{nv ln | cpp/keyword/decltype | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/default}}
{{nv ln | cpp/keyword/delete}}
{{nv ln | cpp/keyword/do}}
{{nv ln | cpp/keyword/double}}
{{nv ln | cpp/keyword/dynamic_cast}}
{{nv ln | cpp/keyword/else}}

{{nv col next}}
{{nv ln | cpp/keyword/enum}}
{{nv ln | cpp/keyword/explicit}}
{{nv ln | cpp/keyword/export}} 
{{nv ln | cpp/keyword/extern}}
{{nv ln | cpp/keyword/false}}
{{nv ln | cpp/keyword/float}}
{{nv ln | cpp/keyword/for}}
{{nv ln | cpp/keyword/friend}}
{{nv ln | cpp/keyword/goto}}
{{nv ln | cpp/keyword/if}}
{{nv ln | cpp/keyword/inline}}
{{nv ln | cpp/keyword/int}}
{{nv ln | cpp/keyword/long}}
{{nv ln | cpp/keyword/mutable}}
{{nv ln | cpp/keyword/namespace}}
{{nv ln | cpp/keyword/new}}
{{nv ln | cpp/keyword/noexcept | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/not}}
{{nv ln | cpp/keyword/not_eq}}
{{nv ln | cpp/keyword/nullptr | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/operator}}
{{nv ln | cpp/keyword/or}}
{{nv ln | cpp/keyword/or_eq}}
{{nv ln | cpp/keyword/private}}
{{nv ln | cpp/keyword/protected}}
{{nv ln | cpp/keyword/public}}
{{nv ln | cpp/keyword/register}}
{{nv ln | cpp/keyword/reinterpret_cast}}

{{nv col next}}
{{nv ln | cpp/keyword/return}}
{{nv ln | cpp/keyword/short}}
{{nv ln | cpp/keyword/signed}}
{{nv ln | cpp/keyword/sizeof}}
{{nv ln | cpp/keyword/static}}
{{nv ln | cpp/keyword/static_assert | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/static_cast}}
{{nv ln | cpp/keyword/struct}}
{{nv ln | cpp/keyword/switch}}
{{nv ln | cpp/keyword/template}}
{{nv ln | cpp/keyword/this}}
{{nv ln | cpp/keyword/thread_local | notes= {{mark c++11}} }}
{{nv ln | cpp/keyword/throw}}
{{nv ln | cpp/keyword/true}}
{{nv ln | cpp/keyword/try}}
{{nv ln | cpp/keyword/typedef}}
{{nv ln | cpp/keyword/typeid}}
{{nv ln | cpp/keyword/typename}}
{{nv ln | cpp/keyword/union}}
{{nv ln | cpp/keyword/unsigned}}
{{nv ln | cpp/keyword/using}}
{{nv ln | cpp/keyword/virtual}}
{{nv ln | cpp/keyword/void}}
{{nv ln | cpp/keyword/volatile}}
{{nv ln | cpp/keyword/wchar_t}}
{{nv ln | cpp/keyword/while}}
{{nv ln | cpp/keyword/xor}}
{{nv ln | cpp/keyword/xor_eq}}
{{nv col end}}

{{nv h2 | Identifiers with special meaning {{mark since c++11}} }}
{{nv ln | cpp/keyword/override}}
{{nv ln | cpp/keyword/final}}
{{nv end}}</text>
      <sha1>hqp2m7ht2xzchj688wb0igz89a10zjr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/keyword/navbar heading</title>
    <ns>10</ns>
    <id>1582</id>
    <revision>
      <id>35383</id>
      <parentid>19606</parentid>
      <timestamp>2012-06-15T22:24:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/keyword/sidebar heading]] to [[Template:cpp/keyword/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="30">[[cpp/keyword | C++ keywords]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/keyword/title</title>
    <ns>10</ns>
    <id>1583</id>
    <revision>
      <id>19602</id>
      <parentid>3166</parentid>
      <timestamp>2012-03-11T12:18:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/keywords/title]] to [[Template:cpp/keyword/title]]</comment>
      <text xml:space="preserve" bytes="70">&lt;onlyinclude&gt;{{title | {{small|C++ keywords:}} {{{1}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/ascii</title>
    <ns>10</ns>
    <id>8405</id>
    <revision>
      <id>74405</id>
      <parentid>47194</parentid>
      <timestamp>2014-12-16T15:05:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link to Unicode definition of ASCII (which has great comments for most characters)</comment>
      <text xml:space="preserve" bytes="7682">{| class=&quot;wikitable&quot; style=&quot;text-align: left;&quot;
|- 
! {{tt|dec}} || {{tt|oct}} || {{tt|hex}}
!style=&quot;text-align: left;&quot;| {{tt|ch}}
| rowspan=33 | 
! {{tt|dec}} || {{tt|oct}} || {{tt|hex}}
!style=&quot;text-align: left;&quot;| {{tt|ch}}
| rowspan=33 |
! {{tt|dec}} || {{tt|oct}} || {{tt|hex}}
!style=&quot;text-align: left;&quot;| {{tt|ch}}
| rowspan=33 |
! {{tt|dec}} || {{tt|oct}} || {{tt|hex}}
!style=&quot;text-align: left;&quot;| {{tt|ch}}
|-
| {{tt| 0}}|| {{tt|0}}||{{tt|00}}||{{ttb|NUL}} (null) || {{tt|32}}||{{tt|40}}||{{tt|20}}||(space) || {{tt|64}}||{{tt|100}}||{{tt|40}}||{{tt|'''@'''}} || {{tt| 96}}||{{tt|140}}||{{tt|60}}||{{tt|'''`'''}} 
|-
| {{tt| 1}}|| {{tt|1}}||{{tt|01}}||{{ttb|SOH}} (start of header) || {{tt|33}}||{{tt|41}}||{{tt|21}}||{{tt|'''!'''}} || {{tt|65}}||{{tt|101}}||{{tt|41}}||{{tt|'''A'''}} || {{tt| 97}}||{{tt|141}}||{{tt|61}}||{{tt|'''a'''}} 
|-
| {{tt| 2}}|| {{tt|2}}||{{tt|02}}||{{ttb|STX}} (start of text) || {{tt|34}}||{{tt|42}}||{{tt|22}}||{{tt|'''&quot;'''}} || {{tt|66}}||{{tt|102}}||{{tt|42}}||{{tt|'''B'''}} || {{tt| 98}}||{{tt|142}}||{{tt|62}}||{{tt|'''b'''}}
|-
| {{tt| 3}}|| {{tt|3}}||{{tt|03}}||{{ttb|ETX}} (end of text) || {{tt|35}}||{{tt|43}}||{{tt|23}}||{{tt|'''#'''}} || {{tt|67}}||{{tt|103}}||{{tt|43}}||{{tt|'''C'''}} || {{tt| 99}}||{{tt|143}}||{{tt|63}}||{{tt|'''c'''}}
|-
| {{tt| 4}}|| {{tt|4}}||{{tt|04}}||{{ttb|EOT}} (end of transmission) || {{tt|36}}||{{tt|44}}||{{tt|24}}||{{tt|'''$'''}} || {{tt|68}}||{{tt|104}}||{{tt|44}}||{{tt|'''D'''}} || {{tt|100}}||{{tt|144}}||{{tt|64}}||{{tt|'''d'''}}
|-
| {{tt| 5}}|| {{tt|5}}||{{tt|05}}||{{ttb|ENQ}} (enquiry) || {{tt|37}}||{{tt|45}}||{{tt|25}}||{{tt|'''%'''}} || {{tt|69}}||{{tt|105}}||{{tt|45}}||{{tt|'''E'''}} || {{tt|101}}||{{tt|145}}||{{tt|65}}||{{tt|'''e'''}}
|-
| {{tt| 6}}|| {{tt|6}}||{{tt|06}}||{{ttb|ACK}} (acknowledge) || {{tt|38}}||{{tt|46}}||{{tt|26}}||{{tt|'''&amp;'''}} || {{tt|70}}||{{tt|106}}||{{tt|46}}||{{tt|'''F'''}} || {{tt|102}}||{{tt|146}}||{{tt|66}}||{{tt|'''f'''}}
|-
| {{tt| 7}}|| {{tt|7}}||{{tt|07}}||{{ttb|BEL}} (bell) || {{tt|39}}||{{tt|47}}||{{tt|27}}||{{tt|'''&lt;nowiki&gt;'&lt;/nowiki&gt;'''}} || {{tt|71}}||{{tt|107}}||{{tt|47}}||{{tt|'''G'''}} || {{tt|103}}||{{tt|147}}||{{tt|67}}||{{tt|'''g'''}}
|-
| {{tt| 8}}||{{tt|10}}||{{tt|08}}||{{ttb|BS}} (backspace) || {{tt|40}}||{{tt|50}}||{{tt|28}}||{{tt|'''('''}} || {{tt|72}}||{{tt|110}}||{{tt|48}}||{{tt|'''H'''}} || {{tt|104}}||{{tt|150}}||{{tt|68}}||{{tt|'''h'''}}
|-
| {{tt| 9}}||{{tt|11}}||{{tt|09}}||{{ttb|HT}} (horizontal tab) || {{tt|41}}||{{tt|51}}||{{tt|29}}||{{tt|''')'''}} || {{tt|73}}||{{tt|111}}||{{tt|49}}||{{tt|'''I'''}} || {{tt|105}}||{{tt|151}}||{{tt|69}}||{{tt|'''i'''}}
|-
| {{tt|10}}||{{tt|12}}||{{tt|0a}}||{{ttb|LF}} (line feed - new line) || {{tt|42}}||{{tt|52}}||{{tt|2a}}||{{tt|'''*'''}} || {{tt|74}}||{{tt|112}}||{{tt|4a}}||{{tt|'''J'''}} || {{tt|106}}||{{tt|152}}||{{tt|6a}}||{{tt|'''j'''}}
|-
| {{tt|11}}||{{tt|13}}||{{tt|0b}}||{{ttb|VT}} (vertical tab) || {{tt|43}}||{{tt|53}}||{{tt|2b}}||{{tt|'''+'''}} || {{tt|75}}||{{tt|113}}||{{tt|4b}}||{{tt|'''K'''}} || {{tt|107}}||{{tt|153}}||{{tt|6b}}||{{tt|'''k'''}}
|-
| {{tt|12}}||{{tt|14}}||{{tt|0c}}||{{ttb|FF}} (form feed - new page) || {{tt|44}}||{{tt|54}}||{{tt|2c}}||{{tt|''','''}} || {{tt|76}}||{{tt|114}}||{{tt|4c}}||{{tt|'''L'''}} || {{tt|108}}||{{tt|154}}||{{tt|6c}}||{{tt|'''l'''}}
|-
| {{tt|13}}||{{tt|15}}||{{tt|0d}}||{{ttb|CR}} (carriage return) || {{tt|45}}||{{tt|55}}||{{tt|2d}}||{{tt|'''-'''}} || {{tt|77}}||{{tt|115}}||{{tt|4d}}||{{tt|'''M'''}} || {{tt|109}}||{{tt|155}}||{{tt|6d}}||{{tt|'''m'''}}
|-
| {{tt|14}}||{{tt|16}}||{{tt|0e}}||{{ttb|SO}} (shift out) || {{tt|46}}||{{tt|56}}||{{tt|2e}}||{{tt|'''.'''}} || {{tt|78}}||{{tt|116}}||{{tt|4e}}||{{tt|'''N'''}} || {{tt|110}}||{{tt|156}}||{{tt|6e}}||{{tt|'''n'''}}
|-
| {{tt|15}}||{{tt|17}}||{{tt|0f}}||{{ttb|SI}} (shift in) || {{tt|47}}||{{tt|57}}||{{tt|2f}}||{{tt|'''/'''}} || {{tt|79}}||{{tt|117}}||{{tt|4f}}||{{tt|'''O'''}} || {{tt|111}}||{{tt|157}}||{{tt|6f}}||{{tt|'''o'''}}
|-
| {{tt|16}}||{{tt|20}}||{{tt|10}}||{{ttb|DLE}} (data link escape) || {{tt|48}}||{{tt|60}}||{{tt|30}}||{{tt|'''0'''}} || {{tt|80}}||{{tt|120}}||{{tt|50}}||{{tt|'''P'''}} || {{tt|112}}||{{tt|160}}||{{tt|70}}||{{tt|'''p'''}}
|-
| {{tt|17}}||{{tt|21}}||{{tt|11}}||{{ttb|DC1}} (device control 1) || {{tt|49}}||{{tt|61}}||{{tt|31}}||{{tt|'''1'''}} || {{tt|81}}||{{tt|121}}||{{tt|51}}||{{tt|'''Q'''}} || {{tt|113}}||{{tt|161}}||{{tt|71}}||{{tt|'''q'''}}
|-
| {{tt|18}}||{{tt|22}}||{{tt|12}}||{{ttb|DC2}} (device control 2) || {{tt|50}}||{{tt|62}}||{{tt|32}}||{{tt|'''2'''}} || {{tt|82}}||{{tt|122}}||{{tt|52}}||{{tt|'''R'''}} || {{tt|114}}||{{tt|162}}||{{tt|72}}||{{tt|'''r'''}}
|-
| {{tt|19}}||{{tt|23}}||{{tt|13}}||{{ttb|DC3}} (device control 3) || {{tt|51}}||{{tt|63}}||{{tt|33}}||{{tt|'''3'''}} || {{tt|83}}||{{tt|123}}||{{tt|53}}||{{tt|'''S'''}} || {{tt|115}}||{{tt|163}}||{{tt|73}}||{{tt|'''s'''}}
|-
| {{tt|20}}||{{tt|24}}||{{tt|14}}||{{ttb|DC4}} (device control 4) || {{tt|52}}||{{tt|64}}||{{tt|34}}||{{tt|'''4'''}} || {{tt|84}}||{{tt|124}}||{{tt|54}}||{{tt|'''T'''}} || {{tt|116}}||{{tt|164}}||{{tt|74}}||{{tt|'''t'''}}
|-
| {{tt|21}}||{{tt|25}}||{{tt|15}}||{{ttb|NAK}} (negative acknowledge) || {{tt|53}}||{{tt|65}}||{{tt|35}}||{{tt|'''5'''}} || {{tt|85}}||{{tt|125}}||{{tt|55}}||{{tt|'''U'''}} || {{tt|117}}||{{tt|165}}||{{tt|75}}||{{tt|'''u'''}}
|-
| {{tt|22}}||{{tt|26}}||{{tt|16}}||{{ttb|SYN}} (synchronous idle) || {{tt|54}}||{{tt|66}}||{{tt|36}}||{{tt|'''6'''}} || {{tt|86}}||{{tt|126}}||{{tt|56}}||{{tt|'''V'''}} || {{tt|118}}||{{tt|166}}||{{tt|76}}||{{tt|'''v'''}}
|-
| {{tt|23}}||{{tt|27}}||{{tt|17}}||{{ttb|ETB}} (end of transmission block) || {{tt|55}}||{{tt|67}}||{{tt|37}}||{{tt|'''7'''}} || {{tt|87}}||{{tt|127}}||{{tt|57}}||{{tt|'''W'''}} || {{tt|119}}||{{tt|167}}||{{tt|77}}||{{tt|'''w'''}}
|-
| {{tt|24}}||{{tt|30}}||{{tt|18}}||{{ttb|CAN}} (cancel) || {{tt|56}}||{{tt|70}}||{{tt|38}}||{{tt|'''8'''}} || {{tt|88}}||{{tt|130}}||{{tt|58}}||{{tt|'''X'''}} || {{tt|120}}||{{tt|170}}||{{tt|78}}||{{tt|'''x'''}}
|-
| {{tt|25}}||{{tt|31}}||{{tt|19}}||{{ttb|EM}} (end of medium) || {{tt|57}}||{{tt|71}}||{{tt|39}}||{{tt|'''9'''}} || {{tt|89}}||{{tt|131}}||{{tt|59}}||{{tt|'''Y'''}} || {{tt|121}}||{{tt|171}}||{{tt|79}}||{{tt|'''y'''}}
|-
| {{tt|26}}||{{tt|32}}||{{tt|1a}}||{{ttb|SUB}} (substitute) || {{tt|58}}||{{tt|72}}||{{tt|3a}}||{{tt|''':'''}} || {{tt|90}}||{{tt|132}}||{{tt|5a}}||{{tt|'''Z'''}} || {{tt|122}}||{{tt|172}}||{{tt|7a}}||{{tt|'''z'''}}
|-
| {{tt|27}}||{{tt|33}}||{{tt|1b}}||{{ttb|ESC}} (escape) || {{tt|59}}||{{tt|73}}||{{tt|3b}}||{{tt|''';'''}} || {{tt|91}}||{{tt|133}}||{{tt|5b}}||{{tt|'''['''}} || {{tt|123}}||{{tt|173}}||{{tt|7b}}||{{tt|'''{'''}}
|-
| {{tt|28}}||{{tt|34}}||{{tt|1c}}||{{ttb|FS}} (file separator) || {{tt|60}}||{{tt|74}}||{{tt|3c}}||{{tt|'''&lt;'''}} || {{tt|92}}||{{tt|134}}||{{tt|5c}}||{{tt|'''\ '''}} || {{tt|124}}||{{tt|174}}||{{tt|7c}}||{{tt|'''&amp;#124;'''}}
|-
| {{tt|29}}||{{tt|35}}||{{tt|1d}}||{{ttb|GS}} (group separator) || {{tt|61}}||{{tt|75}}||{{tt|3d}}||{{tt|'''{{=}}'''}} || {{tt|93}}||{{tt|135}}||{{tt|5d}}||{{tt|''']'''}} || {{tt|125}}||{{tt|175}}||{{tt|7d}}||{{tt|'''}'''}}
|-
| {{tt|30}}||{{tt|36}}||{{tt|1e}}||{{ttb|RS}} (record separator) || {{tt|62}}||{{tt|76}}||{{tt|3e}}||{{tt|'''&gt;'''}} || {{tt|94}}||{{tt|136}}||{{tt|5e}}||{{tt|'''^'''}} || {{tt|126}}||{{tt|176}}||{{tt|7e}}||{{tt|'''~'''}}
|-
| {{tt|31}}||{{tt|37}}||{{tt|1f}}||{{ttb|US}} (unit separator) || {{tt|63}}||{{tt|77}}||{{tt|3f}}||{{tt|'''?'''}} || {{tt|95}}||{{tt|137}}||{{tt|5f}}||{{tt|'''_'''}} || {{tt|127}}||{{tt|177}}||{{tt|7f}}||{{ttb|DEL}} (delete)
|}

Note: in Unicode, the ASCII character block is known as [http://www.unicode.org/charts/PDF/U0000.pdf {{tt|U+0000..U+007F}} Basic Latin].</text>
      <sha1>csyausr6ysc013hophtgmaag13u9zvp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/basics/navbar</title>
    <ns>10</ns>
    <id>13487</id>
    <revision>
      <id>68984</id>
      <timestamp>2014-03-23T15:54:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="207">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/basics/navbar heading
|content3 = cpp/language/basics/navbar content
}}</text>
      <sha1>494tqkw7j2x0gr3a8trv94rau4hrbj2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/basics/navbar content</title>
    <ns>10</ns>
    <id>13489</id>
    <revision>
      <id>76996</id>
      <parentid>76994</parentid>
      <timestamp>2015-03-11T22:48:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>base lookup page needs to be here oto</comment>
      <text xml:space="preserve" bytes="951">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv | [[cpp/keyword | language keywords]] }}
{{nv | [[cpp/language/translation_phases | phases of translation]] }}
{{nv | [[cpp/comment | comments ]] }}
{{nv | [[cpp/language/main_function | the main() function]] }}
{{nv | [[cpp/language/identifiers | names and identifiers]] }}
{{nv | [[cpp/language/type | types]] }}
{{nv | [[cpp/language/types | fundamental types]] }}
{{nv | [[cpp/language/object | objects]] }}
{{nv | [[cpp/language/scope | scope]] }}
{{nv | [[cpp/language/lifetime | object lifetime]] }}
{{nv | [[cpp/language/storage_duration | storage duration and linkage]] }}
{{nv | [[cpp/language/definition | definitions and ODR]] }}
{{nv | [[cpp/language/lookup | name lookup]] }}
{{nv | [[cpp/language/qualified lookup|qualified name lookup]] }}
{{nv | [[cpp/language/unqualified lookup|unqualified name lookup]] }}
{{nv | [[cpp/language/memory_model | memory model]] }}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>atenka6vvlr0oal4vxxrbrb0rwt58h2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/basics/navbar heading</title>
    <ns>10</ns>
    <id>13488</id>
    <revision>
      <id>68986</id>
      <timestamp>2014-03-23T15:55:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="48">[[cpp/language/basic_concepts | Basic Concepts]]</text>
      <sha1>ohi1tsmfd2j5t9jekr2fedmbzg16jic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/cast return</title>
    <ns>10</ns>
    <id>8406</id>
    <revision>
      <id>53059</id>
      <parentid>30595</parentid>
      <timestamp>2013-06-01T04:58:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="242">As with all cast expressions, the result is:
* an lvalue if {{spar|new_type}} is an lvalue reference type or an rvalue reference to function type;
* an xvalue if {{spar|new_type}} is an rvalue reference to object type; 
* a prvalue otherwise.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/classes/navbar</title>
    <ns>10</ns>
    <id>13144</id>
    <revision>
      <id>67451</id>
      <timestamp>2014-02-09T20:55:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="209">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/classes/navbar heading
|content3 = cpp/language/classes/navbar content
}}</text>
      <sha1>8s6ejlq1bzusosfjbbx2ikmhious75a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/classes/navbar content</title>
    <ns>10</ns>
    <id>13146</id>
    <revision>
      <id>82405</id>
      <parentid>81335</parentid>
      <timestamp>2015-12-16T03:04:51Z</timestamp>
      <contributor>
        <username>Franklin Yu</username>
        <id>4768</id>
      </contributor>
      <comment>fix internal link</comment>
      <text xml:space="preserve" bytes="1907">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | General }}
{{nv | [[cpp/language/classes | overview]] }}
{{nv | [[cpp/language/class | class/struct types]] }}
{{nv | [[cpp/language/union | union types]] }}
{{nv h2 | Members }}
{{nv | [[cpp/language/data_members|data members]]}}
{{nv | [[cpp/language/static|static members]]}}
{{nv | [[cpp/language/this|the {{tt|this}} pointer]]}}
{{nv | [[cpp/language/nested_classes|nested classes]]}}
{{nv | [[cpp/language/member_template|member templates]]}}
{{nv | [[cpp/language/bit_field|bit fields]]}}
{{nv | [[cpp/language/using_declaration|using-declarations]]}}
{{nv | [[cpp/language/member_functions|member functions]]}}
{{nv | [[cpp/language/access|member access specifiers]]}}
{{nv | [[cpp/language/initializer_list|constructors and member initializer lists]]}}
{{nv | [[cpp/language/data_members#Member_initialization|default member initializer]]{{mark c++11}}}}
{{nv | [[cpp/language/friend|{{tt|friend}} specifier]]}}
{{nv | [[cpp/language/explicit|{{tt|explicit}} specifier]]}}
{{nv | [[cpp/language/converting_constructor|converting constructor]]}}
{{nv h2 | Special member functions }}
{{nv | [[cpp/language/default_constructor|default constructor]]}}
{{nv | [[cpp/language/copy_constructor|copy constructor]]}}
{{nv | [[cpp/language/move_constructor|move constructor]]{{mark c++11}}}}
{{nv | [[cpp/language/copy_assignment|copy assignment operator]]}}
{{nv | [[cpp/language/move_assignment|move assignment operator]]{{mark c++11}}}}
{{nv | [[cpp/language/destructor|destructor]]}}
{{nv h2 | Inheritance }}
{{nv | [[cpp/language/derived_class|base and derived classes]]}}
{{nv | [[cpp/language/virtual|virtual member functions]]}}
{{nv | [[cpp/language/override|override]]{{mark c++11}}}}
{{nv | [[cpp/language/final|final]]{{mark c++11}}}}
{{nv | [[cpp/language/abstract_class|pure virtual functions and abstract classes]]}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>t4h3rqtiuy1rqq6z2cl92uda8xw0u6i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/classes/navbar heading</title>
    <ns>10</ns>
    <id>13145</id>
    <revision>
      <id>67452</id>
      <timestamp>2014-02-09T20:56:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="34">[[cpp/language/classes | Classes]]</text>
      <sha1>nt4itjvj64thg4ikbawpopq1hq4ylqo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/declarations/navbar</title>
    <ns>10</ns>
    <id>13157</id>
    <revision>
      <id>67700</id>
      <timestamp>2014-02-21T18:42:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="219">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/declarations/navbar heading
|content3 = cpp/language/declarations/navbar content
}}</text>
      <sha1>289j6e5ny68u8ybqc2occwdu8fgdt1t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/declarations/navbar content</title>
    <ns>10</ns>
    <id>13159</id>
    <revision>
      <id>76997</id>
      <parentid>67705</parentid>
      <timestamp>2015-03-11T22:50:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>elaborated type spec</comment>
      <text xml:space="preserve" bytes="2664">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv col begin}}
{{nv h2 | Overview }}
{{nv | [[cpp/language/declarations | declaration syntax]] }}
{{nv | [[cpp/language/declarations#Specifiers | decl-specifier-seq]] }}
{{nv | [[cpp/language/declarations#Declarators | declarator]] }}
{{nv h2 | Specifiers }}
{{nv ln | cpp/language/typedef}}
{{nv | [[cpp/language/inline | inline function specifier]] }}
{{nv | [[cpp/language/virtual | virtual function specifier]] }}
{{nv | [[cpp/language/explicit | explicit function specifier]] }}
{{nv ln | cpp/language/friend}}
{{nv ln | cpp/language/constexpr|notes={{mark c++11}}}}
{{nv | [[cpp/language/storage_duration | storage class specifiers]] }}
{{nv | [[cpp/language/class | class ]] }}
{{nv | [[cpp/language/union | union ]] }}
{{nv | [[cpp/language/enum | enum ]] }}
{{nv ln | cpp/language/decltype |notes={{mark c++11}}}}
{{nv ln | cpp/language/auto |notes={{mark c++11}}}}
{{nv ln | cpp/language/alignas |notes={{mark c++11}}}}
{{nv ln | cpp/language/cv | const/volatile  }}
{{nv | [[cpp/language/elaborated type specifier| elaborated type specifier]]}}
{{nv | [[cpp/language/attributes | attributes ]]{{mark c++11}} }}
{{nv h2 | Declarators }}
{{nv | [[cpp/language/reference | reference ]] }}
{{nv | [[cpp/language/pointer | pointer ]] }}
{{nv | [[cpp/language/array | array ]] }}
{{nv col next}}
{{nv h2 | Block declarations }}
{{nv | [[cpp/language/declarations | simple-declaration]] }}
{{nv | [[cpp/language/type_alias | alias declaration]]{{mark c++11}} }}
{{nv | [[cpp/language/namespace_alias | namespace alias definition ]]}}
{{nv | [[cpp/language/using_declaration | using-declaration]] }}
{{nv | [[cpp/language/namespace#Using-directives | using-directive]] }}
{{nv | [[cpp/language/static_assert | static_assert declaration]] {{mark c++11}}}}
{{nv | [[cpp/language/asm | asm-definition]] }}
{{nv | [[cpp/language/enum | opaque enum declaration]]{{mark c++11}} }}
{{nv h2 | Other declarations }}
{{nv | [[cpp/language/namespace | namespace definition]] }}
{{nv | [[cpp/language/function | function declaration]] }}
{{nv | [[cpp/language/class_template | class template declaration]] }}
{{nv | [[cpp/language/function_template | function template declaration]] }}
{{nv | [[cpp/language/class_template#Explicit_instantiation | explicit template instantiation]]{{mark c++11}}}}
{{nv | [[cpp/language/template_specialization | explicit template specialization]] }}
{{nv | [[cpp/language/language_linkage | linkage specification]] }}
{{nv | [[cpp/language/declarations | attribute declaration]] {{mark c++11}} }}
{{nv | [[cpp/language/declarations | empty declaration]] }}
{{nv col end}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>6u5obtvd1cr80w37d8yxr7nvhqw0kx1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/declarations/navbar heading</title>
    <ns>10</ns>
    <id>13158</id>
    <revision>
      <id>67701</id>
      <timestamp>2014-02-21T18:43:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="44">[[cpp/language/declarations | Declarations]]</text>
      <sha1>nobt9v0v7usiv1d037882t8ngo6pcls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc access</title>
    <ns>10</ns>
    <id>8380</id>
    <revision>
      <id>56951</id>
      <parentid>53062</parentid>
      <timestamp>2013-06-01T05:43:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list access]] to [[Template:cpp/language/dsc access]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc | [[cpp/language/access | access specifiers ]] | defines visibility of class members}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc alignas</title>
    <ns>10</ns>
    <id>6582</id>
    <revision>
      <id>56954</id>
      <parentid>53063</parentid>
      <timestamp>2013-06-01T05:43:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list alignas]] to [[Template:cpp/language/dsc alignas]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc | [[cpp/language/alignas | alignas specifier ]] | specifies that the storage for the variable should be aligned by specific amount {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc alignof</title>
    <ns>10</ns>
    <id>8402</id>
    <revision>
      <id>56958</id>
      <parentid>53066</parentid>
      <timestamp>2013-06-01T05:43:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list alignof]] to [[Template:cpp/language/dsc alignof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc | [[cpp/language/alignof | alignof operator ]] | queries alignment requirements of a type {{mark since c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc as operator</title>
    <ns>10</ns>
    <id>8392</id>
    <revision>
      <id>56962</id>
      <parentid>53069</parentid>
      <timestamp>2013-06-01T05:44:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list as operator]] to [[Template:cpp/language/dsc as operator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc | [[cpp/language/as_operator | assignment operator ]] | copies the contents of one object into another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc asm</title>
    <ns>10</ns>
    <id>8398</id>
    <revision>
      <id>56966</id>
      <parentid>53072</parentid>
      <timestamp>2013-06-01T05:44:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list asm]] to [[Template:cpp/language/dsc asm]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc | [[cpp/language/asm | inline assembly ]] | an inline listing of assembly code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc attributes</title>
    <ns>10</ns>
    <id>6597</id>
    <revision>
      <id>56970</id>
      <parentid>53073</parentid>
      <timestamp>2013-06-01T05:44:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list attributes]] to [[Template:cpp/language/dsc attributes]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc | [[cpp/language/attributes | attributes ]] | defines additional information about variable {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc auto</title>
    <ns>10</ns>
    <id>6581</id>
    <revision>
      <id>56974</id>
      <parentid>53076</parentid>
      <timestamp>2013-06-01T05:44:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list auto]] to [[Template:cpp/language/dsc auto]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc | [[cpp/language/auto | auto specifier ]] | specifies a type defined by an expression {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc bool literal</title>
    <ns>10</ns>
    <id>6587</id>
    <revision>
      <id>56978</id>
      <parentid>53079</parentid>
      <timestamp>2013-06-01T05:44:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list bool literal]] to [[Template:cpp/language/dsc bool literal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc | [[cpp/language/bool_literal | boolean literals ]] | values of type {{c|bool}}, that is {{c|true}} and {{c|false}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc break</title>
    <ns>10</ns>
    <id>6559</id>
    <revision>
      <id>56982</id>
      <parentid>53082</parentid>
      <timestamp>2013-06-01T05:44:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list break]] to [[Template:cpp/language/dsc break]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc | [[cpp/language/break | break ]] | terminates the enclosing loop}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc character literal</title>
    <ns>10</ns>
    <id>6584</id>
    <revision>
      <id>56986</id>
      <parentid>53083</parentid>
      <timestamp>2013-06-01T05:44:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list character literal]] to [[Template:cpp/language/dsc character literal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc | [[cpp/language/character_literal | character literals ]] | individual characters of type {{c|char}}, {{c|char16_t}}, {{c|char32_t}}, or {{c|wchar_t}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc class</title>
    <ns>10</ns>
    <id>6574</id>
    <revision>
      <id>56990</id>
      <parentid>53086</parentid>
      <timestamp>2013-06-01T05:44:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list class]] to [[Template:cpp/language/dsc class]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc | [[cpp/language/class | compound types ]] | defines types holding several data members (essentially the same as class)}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc class template</title>
    <ns>10</ns>
    <id>8395</id>
    <revision>
      <id>56994</id>
      <parentid>53089</parentid>
      <timestamp>2013-06-01T05:44:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list class template]] to [[Template:cpp/language/dsc class template]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc | [[cpp/language/class_template | class template declaration ]] | declares a class that can operate on different types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc const cast</title>
    <ns>10</ns>
    <id>8373</id>
    <revision>
      <id>56997</id>
      <parentid>53090</parentid>
      <timestamp>2013-06-01T05:44:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list const cast]] to [[Template:cpp/language/dsc const cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc | [[cpp/language/const_cast | const_cast conversion ]] | adds or removes const}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc constexpr</title>
    <ns>10</ns>
    <id>6580</id>
    <revision>
      <id>57003</id>
      <parentid>53093</parentid>
      <timestamp>2013-06-01T05:45:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list constexpr]] to [[Template:cpp/language/dsc constexpr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc | [[cpp/language/constexpr | constexpr specifier ]] | specifies that the value of a variable or function can be computed at compile time {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc continue</title>
    <ns>10</ns>
    <id>6558</id>
    <revision>
      <id>57007</id>
      <parentid>53096</parentid>
      <timestamp>2013-06-01T05:45:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list continue]] to [[Template:cpp/language/dsc continue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc | [[cpp/language/continue | continue ]] | skips the remaining part of the enclosing loop body}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc copy constructor</title>
    <ns>10</ns>
    <id>8390</id>
    <revision>
      <id>57011</id>
      <parentid>53099</parentid>
      <timestamp>2013-06-01T05:45:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list copy constructor]] to [[Template:cpp/language/dsc copy constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc | [[cpp/language/copy_constructor | copy constructor ]] | initializes an object with the contents of another object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc cv</title>
    <ns>10</ns>
    <id>6578</id>
    <revision>
      <id>57015</id>
      <parentid>53102</parentid>
      <timestamp>2013-06-01T05:45:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list cv]] to [[Template:cpp/language/dsc cv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc | [[cpp/language/cv | cv specifier ]] | specifies constness and volatility of a type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc cv function</title>
    <ns>10</ns>
    <id>8388</id>
    <revision>
      <id>57019</id>
      <parentid>53103</parentid>
      <timestamp>2013-06-01T05:45:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list cv function]] to [[Template:cpp/language/dsc cv function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc | [[cpp/language/cv_function | cv function specifier ]] | declares that a member function can only be used on cv-qualified objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc decltype</title>
    <ns>10</ns>
    <id>6577</id>
    <revision>
      <id>57023</id>
      <parentid>53106</parentid>
      <timestamp>2013-06-01T05:45:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list decltype]] to [[Template:cpp/language/dsc decltype]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc | [[cpp/language/decltype | decltype specifier ]] | defines a type equivalent to the type of an expression {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc default constructor</title>
    <ns>10</ns>
    <id>8389</id>
    <revision>
      <id>57026</id>
      <parentid>53109</parentid>
      <timestamp>2013-06-01T05:45:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list default constructor]] to [[Template:cpp/language/dsc default constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc | [[cpp/language/default_constructor | default constructor ]] | initializes an object with default values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc delete</title>
    <ns>10</ns>
    <id>8378</id>
    <revision>
      <id>57030</id>
      <parentid>53112</parentid>
      <timestamp>2013-06-01T05:45:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list delete]] to [[Template:cpp/language/dsc delete]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc | [[cpp/language/delete | delete expression ]] | deallocates memory dynamically}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc destructor</title>
    <ns>10</ns>
    <id>8394</id>
    <revision>
      <id>57034</id>
      <parentid>53113</parentid>
      <timestamp>2013-06-01T05:45:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list destructor]] to [[Template:cpp/language/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc | [[cpp/language/destructor | destructor ]] | releases claimed resources}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc do</title>
    <ns>10</ns>
    <id>6557</id>
    <revision>
      <id>57038</id>
      <parentid>53116</parentid>
      <timestamp>2013-06-01T05:45:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list do]] to [[Template:cpp/language/dsc do]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc | [[cpp/language/do | do-while loop ]] | executes loop, checking condition after each iteration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc dynamic cast</title>
    <ns>10</ns>
    <id>8375</id>
    <revision>
      <id>57042</id>
      <parentid>53119</parentid>
      <timestamp>2013-06-01T05:46:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list dynamic cast]] to [[Template:cpp/language/dsc dynamic cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc | [[cpp/language/dynamic_cast | dynamic_cast conversion ]] | performs checked polymorphic conversions}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc enum</title>
    <ns>10</ns>
    <id>6575</id>
    <revision>
      <id>57045</id>
      <parentid>53122</parentid>
      <timestamp>2013-06-01T05:46:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list enum]] to [[Template:cpp/language/dsc enum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc | [[cpp/language/enum | enumeration types ]] | defines types that are able to hold only one of the specified values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc eval order</title>
    <ns>10</ns>
    <id>6591</id>
    <revision>
      <id>57049</id>
      <parentid>53125</parentid>
      <timestamp>2013-06-01T05:46:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list eval order]] to [[Template:cpp/language/dsc eval order]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="147">{{dsc | [[cpp/language/eval_order | order of evaluation ]] | the order in which intermediate results of arguments and subexpressions are obtained}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc except spec</title>
    <ns>10</ns>
    <id>6566</id>
    <revision>
      <id>57053</id>
      <parentid>53126</parentid>
      <timestamp>2013-06-01T05:46:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list except spec]] to [[Template:cpp/language/dsc except spec]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc | [[cpp/language/except_spec | exception specification ]] | specifies what exceptions are thrown by a function {{mark deprecated}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc explicit</title>
    <ns>10</ns>
    <id>8386</id>
    <revision>
      <id>57057</id>
      <parentid>53129</parentid>
      <timestamp>2013-06-01T05:46:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list explicit]] to [[Template:cpp/language/dsc explicit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="175">{{dsc | [[cpp/language/explicit | explicit function specifier ]] | declares that a constructor or conversion operator can not be used in implicit conversions {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc explicit cast</title>
    <ns>10</ns>
    <id>9776</id>
    <revision>
      <id>57060</id>
      <parentid>53132</parentid>
      <timestamp>2013-06-01T05:46:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list explicit cast]] to [[Template:cpp/language/dsc explicit cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc | [[cpp/language/explicit_cast | explicit casts ]] | permissive conversions between types }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc final</title>
    <ns>10</ns>
    <id>8385</id>
    <revision>
      <id>57064</id>
      <parentid>53135</parentid>
      <timestamp>2013-06-01T05:46:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list final]] to [[Template:cpp/language/dsc final]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc | [[cpp/language/final | final specifier ]] | declares that a method cannot be overridden {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc floating literal</title>
    <ns>10</ns>
    <id>6585</id>
    <revision>
      <id>57067</id>
      <parentid>53136</parentid>
      <timestamp>2013-06-01T05:46:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list floating literal]] to [[Template:cpp/language/dsc floating literal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc | [[cpp/language/floating_literal | floating-point literals ]] | values of type {{c|float}}, {{c|double}}, or {{c|long double}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc for</title>
    <ns>10</ns>
    <id>6555</id>
    <revision>
      <id>57071</id>
      <parentid>53139</parentid>
      <timestamp>2013-06-01T05:46:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list for]] to [[Template:cpp/language/dsc for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">{{dsc | [[cpp/language/for | for loop ]] | executes loop}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc friend</title>
    <ns>10</ns>
    <id>8381</id>
    <revision>
      <id>57076</id>
      <parentid>53142</parentid>
      <timestamp>2013-06-01T05:46:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list friend]] to [[Template:cpp/language/dsc friend]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc | [[cpp/language/friend | friend specifier ]] | grants access to {{c|private}} and {{c|protected}} class members}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc function</title>
    <ns>10</ns>
    <id>6562</id>
    <revision>
      <id>57080</id>
      <parentid>53143</parentid>
      <timestamp>2013-06-01T05:46:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list function]] to [[Template:cpp/language/dsc function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc | [[cpp/language/function | function declaration ]] | declares a function}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc function template</title>
    <ns>10</ns>
    <id>6564</id>
    <revision>
      <id>57084</id>
      <parentid>53146</parentid>
      <timestamp>2013-06-01T05:47:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list function template]] to [[Template:cpp/language/dsc function template]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc | [[cpp/language/function_template | function template ]] | declares a function that can operate on different types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc goto</title>
    <ns>10</ns>
    <id>6560</id>
    <revision>
      <id>57087</id>
      <parentid>53149</parentid>
      <timestamp>2013-06-01T05:47:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list goto]] to [[Template:cpp/language/dsc goto]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc | [[cpp/language/goto | goto ]] | continues execution in another location}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc if</title>
    <ns>10</ns>
    <id>6553</id>
    <revision>
      <id>57091</id>
      <parentid>53152</parentid>
      <timestamp>2013-06-01T05:47:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list if]] to [[Template:cpp/language/dsc if]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc | [[cpp/language/if | if conditional ]] | executes code conditionally}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc implicit cast</title>
    <ns>10</ns>
    <id>6598</id>
    <revision>
      <id>57096</id>
      <parentid>53153</parentid>
      <timestamp>2013-06-01T05:47:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list implicit cast]] to [[Template:cpp/language/dsc implicit cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc | [[cpp/language/implicit_cast | standard conversions ]] | implicit conversions from one type to another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc initializer list</title>
    <ns>10</ns>
    <id>8382</id>
    <revision>
      <id>57099</id>
      <parentid>53156</parentid>
      <timestamp>2013-06-01T05:47:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list initializer list]] to [[Template:cpp/language/dsc initializer list]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc | [[cpp/language/initializer_list | initializer lists ]] | initializes class members}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc inline</title>
    <ns>10</ns>
    <id>6565</id>
    <revision>
      <id>57104</id>
      <parentid>53159</parentid>
      <timestamp>2013-06-01T05:47:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list inline]] to [[Template:cpp/language/dsc inline]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc | [[cpp/language/inline | inline specifier ]] | hints the compiler to insert a function's body directly into the calling code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc integer literal</title>
    <ns>10</ns>
    <id>6583</id>
    <revision>
      <id>57109</id>
      <parentid>53162</parentid>
      <timestamp>2013-06-01T05:47:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list integer literal]] to [[Template:cpp/language/dsc integer literal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc | [[cpp/language/integer_literal | integer literals ]] | decimal, octal, or hexadecimal numbers of integer type {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc lambda</title>
    <ns>10</ns>
    <id>6563</id>
    <revision>
      <id>57113</id>
      <parentid>53163</parentid>
      <timestamp>2013-06-01T05:47:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list lambda]] to [[Template:cpp/language/dsc lambda]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc | [[cpp/language/lambda | lambda function declaration ]] | declares a lambda function {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc move constructor</title>
    <ns>10</ns>
    <id>8391</id>
    <revision>
      <id>57117</id>
      <parentid>53166</parentid>
      <timestamp>2013-06-01T05:47:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list move constructor]] to [[Template:cpp/language/dsc move constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc | [[cpp/language/move_constructor | move constructor ]] | initializes an object by moving data from a temporary object {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc move operator</title>
    <ns>10</ns>
    <id>8393</id>
    <revision>
      <id>57122</id>
      <parentid>53169</parentid>
      <timestamp>2013-06-01T05:47:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list move operator]] to [[Template:cpp/language/dsc move operator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc | [[cpp/language/move_operator | move assignment operator ]] | moves the contents of a temporary object into another {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc namespace</title>
    <ns>10</ns>
    <id>6570</id>
    <revision>
      <id>57126</id>
      <parentid>53172</parentid>
      <timestamp>2013-06-01T05:47:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list namespace]] to [[Template:cpp/language/dsc namespace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc | [[cpp/language/namespace | namespace declaration ]] | identifies a namespace}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc namespace alias</title>
    <ns>10</ns>
    <id>6571</id>
    <revision>
      <id>57129</id>
      <parentid>53175</parentid>
      <timestamp>2013-06-01T05:48:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list namespace alias]] to [[Template:cpp/language/dsc namespace alias]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc | [[cpp/language/namespace_alias | namespace alias ]] | creates an alias of an existing namespace}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc new</title>
    <ns>10</ns>
    <id>8377</id>
    <revision>
      <id>57134</id>
      <parentid>53176</parentid>
      <timestamp>2013-06-01T05:48:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list new]] to [[Template:cpp/language/dsc new]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc | [[cpp/language/new | new expression ]] | allocates memory dynamically}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc noexcept</title>
    <ns>10</ns>
    <id>8400</id>
    <revision>
      <id>57137</id>
      <parentid>53179</parentid>
      <timestamp>2013-06-01T05:48:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list noexcept]] to [[Template:cpp/language/dsc noexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc | [[cpp/language/noexcept | noexcept operator ]] | determines if an expression throws any exceptions {{mark since c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc noexcept spec</title>
    <ns>10</ns>
    <id>6567</id>
    <revision>
      <id>57141</id>
      <parentid>53182</parentid>
      <timestamp>2013-06-01T05:48:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list noexcept spec]] to [[Template:cpp/language/dsc noexcept spec]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc | [[cpp/language/noexcept_spec | noexcept specifier ]] | requires a function to not throw any exceptions {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc nullptr</title>
    <ns>10</ns>
    <id>6588</id>
    <revision>
      <id>57145</id>
      <parentid>53185</parentid>
      <timestamp>2013-06-01T05:48:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list nullptr]] to [[Template:cpp/language/dsc nullptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc | [[cpp/language/nullptr | nullptr ]] | the pointer literal which specifies a null pointer value {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc operator alternative</title>
    <ns>10</ns>
    <id>6594</id>
    <revision>
      <id>57149</id>
      <parentid>53186</parentid>
      <timestamp>2013-06-01T05:48:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list operator alternative]] to [[Template:cpp/language/dsc operator alternative]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc | [[cpp/language/operator_alternative | alternative representations ]] | alternative spellings for certain operators}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc operator precedence</title>
    <ns>10</ns>
    <id>6593</id>
    <revision>
      <id>57153</id>
      <parentid>53189</parentid>
      <timestamp>2013-06-01T05:48:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list operator precedence]] to [[Template:cpp/language/dsc operator precedence]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc | [[cpp/language/operator_precedence | operator precedence ]] | the order in which operators are bound to their arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc operators</title>
    <ns>10</ns>
    <id>6592</id>
    <revision>
      <id>57158</id>
      <parentid>53192</parentid>
      <timestamp>2013-06-01T05:48:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list operators]] to [[Template:cpp/language/dsc operators]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc | [[cpp/language/operators | operators ]] | allows the use of syntax commonly found in mathematics}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc override</title>
    <ns>10</ns>
    <id>8384</id>
    <revision>
      <id>57163</id>
      <parentid>53193</parentid>
      <timestamp>2013-06-01T05:48:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list override]] to [[Template:cpp/language/dsc override]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc | [[cpp/language/override | override specifier ]] | explicitly declare that a method overrides another method {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc parameter pack</title>
    <ns>10</ns>
    <id>8397</id>
    <revision>
      <id>57167</id>
      <parentid>53196</parentid>
      <timestamp>2013-06-01T05:48:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list parameter pack]] to [[Template:cpp/language/dsc parameter pack]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc | [[cpp/language/parameter_pack | parameter packs ]] | specifies lists of types {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc pointer</title>
    <ns>10</ns>
    <id>6573</id>
    <revision>
      <id>57172</id>
      <parentid>53199</parentid>
      <timestamp>2013-06-01T05:48:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list pointer]] to [[Template:cpp/language/dsc pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc | [[cpp/language/pointer | pointer types ]] | holding a memory location}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc range-for</title>
    <ns>10</ns>
    <id>6546</id>
    <revision>
      <id>57177</id>
      <parentid>53200</parentid>
      <timestamp>2013-06-01T05:48:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list range-for]] to [[Template:cpp/language/dsc range-for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc | [[cpp/language/range-for | range-for loop ]] | executes loop over range {{mark since c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc reinterpret cast</title>
    <ns>10</ns>
    <id>8376</id>
    <revision>
      <id>57182</id>
      <parentid>53203</parentid>
      <timestamp>2013-06-01T05:48:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list reinterpret cast]] to [[Template:cpp/language/dsc reinterpret cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc | [[cpp/language/reinterpret_cast | reinterpret_cast conversion ]] | performs general low-level conversions}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc return</title>
    <ns>10</ns>
    <id>6561</id>
    <revision>
      <id>57186</id>
      <parentid>53206</parentid>
      <timestamp>2013-06-01T05:49:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list return]] to [[Template:cpp/language/dsc return]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc | [[cpp/language/return | return ]] | terminates execution of the enclosing function}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc static</title>
    <ns>10</ns>
    <id>8387</id>
    <revision>
      <id>57191</id>
      <parentid>53209</parentid>
      <timestamp>2013-06-01T05:49:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list static]] to [[Template:cpp/language/dsc static]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc | [[cpp/language/static | static function specifier ]]: declares that a method does not use class data}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc static assert</title>
    <ns>10</ns>
    <id>8403</id>
    <revision>
      <id>57194</id>
      <parentid>53212</parentid>
      <timestamp>2013-06-01T05:49:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list static assert]] to [[Template:cpp/language/dsc static assert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc | [[cpp/language/static_assert | static assertion ]] | performs compile-time assertion checking {{mark since c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc static cast</title>
    <ns>10</ns>
    <id>8374</id>
    <revision>
      <id>57199</id>
      <parentid>53213</parentid>
      <timestamp>2013-06-01T05:49:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list static cast]] to [[Template:cpp/language/dsc static cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc | [[cpp/language/static_cast | static_cast conversion ]] | performs basic conversions}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc storage duration</title>
    <ns>10</ns>
    <id>6579</id>
    <revision>
      <id>57204</id>
      <parentid>53216</parentid>
      <timestamp>2013-06-01T05:49:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list storage duration]] to [[Template:cpp/language/dsc storage duration]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc | [[cpp/language/storage_duration | storage duration specifier ]] | specifies storage duration of a type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc string literal</title>
    <ns>10</ns>
    <id>6586</id>
    <revision>
      <id>57208</id>
      <parentid>53219</parentid>
      <timestamp>2013-06-01T05:49:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list string literal]] to [[Template:cpp/language/dsc string literal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc | [[cpp/language/string_literal | string literals ]] | sequences of characters, which may be narrow, multibyte, or wide}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc switch</title>
    <ns>10</ns>
    <id>6554</id>
    <revision>
      <id>57213</id>
      <parentid>53220</parentid>
      <timestamp>2013-06-01T05:49:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list switch]] to [[Template:cpp/language/dsc switch]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc | [[cpp/language/switch | switch conditional ]] | executes code according to the value of an integral argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc template specialization</title>
    <ns>10</ns>
    <id>8396</id>
    <revision>
      <id>57218</id>
      <parentid>53223</parentid>
      <timestamp>2013-06-01T05:49:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list template specialization]] to [[Template:cpp/language/dsc template specialization]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc | [[cpp/language/template_specialization | template specialization ]] | defines a template for specific types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc this</title>
    <ns>10</ns>
    <id>8379</id>
    <revision>
      <id>57222</id>
      <parentid>53226</parentid>
      <timestamp>2013-06-01T05:49:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list this]] to [[Template:cpp/language/dsc this]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc | [[cpp/language/this | this pointer ]] | points to the current instance of a class in member methods}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc throw</title>
    <ns>10</ns>
    <id>6568</id>
    <revision>
      <id>57226</id>
      <parentid>53227</parentid>
      <timestamp>2013-06-01T05:49:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list throw]] to [[Template:cpp/language/dsc throw]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc | [[cpp/language/throw | throw expression ]] | signals an error and transfers control to error handler}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc try catch</title>
    <ns>10</ns>
    <id>6569</id>
    <revision>
      <id>57230</id>
      <parentid>53230</parentid>
      <timestamp>2013-06-01T05:49:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list try catch]] to [[Template:cpp/language/dsc try catch]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc | [[cpp/language/try_catch | try-catch block ]] | catches exceptions originating from specific block of code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc type alias</title>
    <ns>10</ns>
    <id>6596</id>
    <revision>
      <id>57235</id>
      <parentid>53233</parentid>
      <timestamp>2013-06-01T05:49:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list type alias]] to [[Template:cpp/language/dsc type alias]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc | [[cpp/language/type_alias | type alias declaration ]] | creates a synonym for a type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc typedef</title>
    <ns>10</ns>
    <id>6595</id>
    <revision>
      <id>57240</id>
      <parentid>53236</parentid>
      <timestamp>2013-06-01T05:49:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list typedef]] to [[Template:cpp/language/dsc typedef]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc | [[cpp/language/typedef | typedef declaration ]] | creates a synonym for a type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc types</title>
    <ns>10</ns>
    <id>6572</id>
    <revision>
      <id>57244</id>
      <parentid>53237</parentid>
      <timestamp>2013-06-01T05:49:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list types]] to [[Template:cpp/language/dsc types]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc | [[cpp/language/types | fundamental types ]] | defines basic character, integer and floating point types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc union</title>
    <ns>10</ns>
    <id>6576</id>
    <revision>
      <id>57249</id>
      <parentid>53240</parentid>
      <timestamp>2013-06-01T05:50:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list union]] to [[Template:cpp/language/dsc union]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc | [[cpp/language/union | union types ]] | defines types that can hold data in several representations}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc user literal</title>
    <ns>10</ns>
    <id>6589</id>
    <revision>
      <id>57252</id>
      <parentid>53243</parentid>
      <timestamp>2013-06-01T05:50:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list user literal]] to [[Template:cpp/language/dsc user literal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc | [[cpp/language/user_literal | user-defined literals ]] | constant values of user-specified type {{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc value category</title>
    <ns>10</ns>
    <id>6590</id>
    <revision>
      <id>57255</id>
      <parentid>53246</parentid>
      <timestamp>2013-06-01T05:50:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list value category]] to [[Template:cpp/language/dsc value category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc | [[cpp/language/value_category | value categories ]] | (lvalue, rvalue, glvalue, prvalue, xvalue) classify expressions by their values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc virtual</title>
    <ns>10</ns>
    <id>8383</id>
    <revision>
      <id>57259</id>
      <parentid>53249</parentid>
      <timestamp>2013-06-01T05:50:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list virtual]] to [[Template:cpp/language/dsc virtual]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc | [[cpp/language/virtual | virtual function specifier ]] | declares that a function is virtual}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/dsc while</title>
    <ns>10</ns>
    <id>6556</id>
    <revision>
      <id>57263</id>
      <parentid>53250</parentid>
      <timestamp>2013-06-01T05:50:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/dcl list while]] to [[Template:cpp/language/dsc while]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc | [[cpp/language/while | while loop ]] | executes loop, checking condition before each iteration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/example template</title>
    <ns>10</ns>
    <id>5066</id>
    <revision>
      <id>23453</id>
      <parentid>18322</parentid>
      <timestamp>2012-04-20T02:25:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{example cpp&quot; to &quot;{{example&quot;</comment>
      <text xml:space="preserve" bytes="227">{{example|code=
template&lt;typename T&gt;
struct S {
    template&lt;typename U&gt; void foo(){}
};

template&lt;typename T&gt;
void bar()
{
    S&lt;T&gt;s;
    s.foo&lt;T&gt;(); // error: &lt; parsed as less than operator
    s.template foo&lt;T&gt;(); // OK
}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/exceptions/navbar</title>
    <ns>10</ns>
    <id>13491</id>
    <revision>
      <id>69060</id>
      <timestamp>2014-03-25T16:22:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="215">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/exceptions/navbar heading
|content3 = cpp/language/exceptions/navbar content
}}</text>
      <sha1>nwqyz9l9vyud15njkj2pj2qm2pp1wof</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/exceptions/navbar content</title>
    <ns>10</ns>
    <id>13493</id>
    <revision>
      <id>83238</id>
      <parentid>69063</parentid>
      <timestamp>2016-01-27T06:52:33Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>exception specification{{mark deprecated}} =&gt; Dynamic exception specification{{mark deprecated}}</comment>
      <text xml:space="preserve" bytes="471">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv | [[cpp/language/throw | throw-expression]]}}
{{nv | [[cpp/language/function-try-block | function-try-block]]}}
{{nv | [[cpp/language/try_catch | try/catch block]]}}
{{nv | [[cpp/language/noexcept_spec | noexcept specifier]]{{mark c++11}}}}
{{nv | [[cpp/language/noexcept | noexcept operator]]{{mark c++11}}}}
{{nv | [[cpp/language/except_spec | Dynamic exception specification]]{{mark deprecated}}}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>ctr4p3woldaf1tjn37f4kypyqjyxxtv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/exceptions/navbar heading</title>
    <ns>10</ns>
    <id>13492</id>
    <revision>
      <id>69062</id>
      <timestamp>2014-03-25T16:22:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="40">[[cpp/language/exceptions | Exceptions]]</text>
      <sha1>4ontt73cckdlb2ohzf5bp38y1y1tpqi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/expressions/navbar</title>
    <ns>10</ns>
    <id>13112</id>
    <revision>
      <id>66830</id>
      <parentid>66829</parentid>
      <timestamp>2014-01-03T14:53:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 66829 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) er, not yet</comment>
      <text xml:space="preserve" bytes="217">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/expressions/navbar heading
|content3 = cpp/language/expressions/navbar content
}}</text>
      <sha1>1pfhhlqadriu0y9mnkroc7k241czydr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/expressions/navbar content</title>
    <ns>10</ns>
    <id>13114</id>
    <revision>
      <id>89283</id>
      <parentid>81013</parentid>
      <timestamp>2017-01-16T00:21:02Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3318">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | General }}
{{nv | [[cpp/language/value_category | value categories]] (lvalue, rvalue, xvalue)}}
{{nv | [[cpp/language/eval_order | order of evaluation]] (sequence points)}}
{{nv | [[cpp/language/constant_expression | constant expressions]]}}
{{nv | [[cpp/language/expressions#Unevaluated expressions | unevaluated expressions]]}}
{{nv | [[cpp/language/expressions#Primary expressions | primary expressions]]}}
{{nv| [[cpp/language/lambda|lambda-expression]]{{mark c++11}}}}
{{nv h2 | Literals }}
{{nv | [[cpp/language/integer_literal|integer literals]]}}
{{nv | [[cpp/language/floating_literal|floating-point literals]]}}
{{nv | [[cpp/language/bool_literal|boolean literals]]}}
{{nv | [[cpp/language/character_literal|character literals]] including [[cpp/language/escape|escape sequences]]}}
{{nv | [[cpp/language/string_literal|string literals]]}}
{{nv | [[cpp/language/nullptr|null pointer literal]]{{mark c++11}}}}
{{nv | [[cpp/language/user_literal|user-defined literal]]{{mark c++11}}}}
{{nv h2 | Operators }}
{{nv | [[cpp/language/operator_assignment | Assignment operators]]: 
{{tt|a{{=}}b}}, {{tt|a+{{=}}b}}, {{tt|a-{{=}}b}}, {{tt|a*{{=}}b}}, {{tt|a/{{=}}b}}, {{tt|a%{{=}}b}}, {{tt|a&amp;{{=}}b}}, {{tt|a{{!}}{{=}}b}}, {{tt|a^{{=}}b}}, {{tt|a&lt;&lt;{{=}}b}}, {{tt|a&gt;&gt;{{=}}b}}}}
{{nv | [[cpp/language/operator_incdec | Increment and decrement]]: {{tt|++a}}, {{tt|--a}}, {{tt|a++}}, {{tt|a--}}}}
{{nv | [[cpp/language/operator_arithmetic | Arithmetic operators]]:
{{tt|+a}}, {{tt|-a}}, {{tt|a+b}}, {{tt|a-b}}, {{tt|a*b}}, {{tt|a/b}}, {{tt|a%b}}, {{tt|~a}}, {{tt|a&amp;b}}, {{tt|a{{!}}b}}, {{tt|a^b}}, {{tt|a&lt;&lt;b}}, {{tt|a&gt;&gt;b}} }}
{{nv | [[cpp/language/operator_logical | Logical operators]]: {{tt|a{{!!}}b}}, {{tt|a&amp;&amp;b}}, {{tt|!a}}}}
{{nv | [[cpp/language/operator_comparison | Comparison operators]]: {{tt|a{{==}}b}}, {{tt|a!{{=}}b}}, {{tt|a&lt;b}}, {{tt|a&gt;b}}, {{tt|a&lt;{{=}}b}}, {{tt|a&gt;{{=}}b}}}}
{{nv | [[cpp/language/operator_member_access | Member access operators]]: {{tt|a[b]}}, {{tt|*a}}, {{tt|&amp;a}}, {{tt|a-&gt;b}}, {{tt|a.b}}, {{tt|a-&gt;*b}}, {{tt|a.*b}}}}
{{nv | [[cpp/language/operator_other | Other operators]]: {{tt|a(...)}}, {{tt|a,b}}, {{tt|a?b:c}} }}
{{nv| [[cpp/language/operator alternative|Alternative representations of operators]]}}
{{nv| [[cpp/language/operator precedence|Precedence and associativity]]}}
{{nv| [[cpp/language/fold|Fold expression]]{{mark c++17}}}}
{{nv| [[cpp/language/new|new-expression]]}}
{{nv| [[cpp/language/delete|delete-expression]]}}
{{nv| [[cpp/language/throw|throw-expression]]}}
{{nv| [[cpp/language/alignof|alignof]]}}
{{nv| [[cpp/language/sizeof|sizeof]]}}
{{nv| [[cpp/language/sizeof...|sizeof...]]{{mark c++11}}}}
{{nv| [[cpp/language/typeid|typeid]]}}
{{nv| [[cpp/language/noexcept|noexcept]]{{mark c++11}}}}
{{nv| [[cpp/language/operators|Operator overloading]]}}
{{nv h2 | Conversions }}
{{nv| [[cpp/language/implicit_cast|Implicit conversions]]}}
{{nv| [[cpp/language/const_cast|const_cast]]}}
{{nv| [[cpp/language/static_cast|static_cast]]}}
{{nv| [[cpp/language/reinterpret_cast|reinterpret_cast]]}}
{{nv| [[cpp/language/dynamic_cast|dynamic_cast]]}}
{{nv| [[cpp/language/explicit_cast|Explicit conversions]] {{tt|(T)a}}, {{tt|T(a)}}}}
{{nv| [[cpp/language/cast_operator|User-defined conversion]]}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>5mpbhyd9jdq6kzeq821k9u64h2e824t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/expressions/navbar heading</title>
    <ns>10</ns>
    <id>13113</id>
    <revision>
      <id>66824</id>
      <timestamp>2014-01-03T14:20:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="42">[[cpp/language/expressions | Expressions]]</text>
      <sha1>4pt4cm2j43vvk1r1wiidcrokawwrtgg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/functions/navbar</title>
    <ns>10</ns>
    <id>13498</id>
    <revision>
      <id>69210</id>
      <timestamp>2014-03-30T15:05:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="213">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/functions/navbar heading
|content3 = cpp/language/functions/navbar content
}}</text>
      <sha1>eavntocihgclvr6o8316fdv33wnsk6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/functions/navbar content</title>
    <ns>10</ns>
    <id>13500</id>
    <revision>
      <id>69606</id>
      <parentid>69214</parentid>
      <timestamp>2014-04-15T16:49:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++11</comment>
      <text xml:space="preserve" bytes="1039">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | Declarations }}
{{nv | [[cpp/language/function | function declaration]] }}
{{nv | [[cpp/language/function#Parameter_list | function parameter list]] }}
{{nv | [[cpp/language/function#Function_definition | function definition]] }}
{{nv | [[cpp/language/default_arguments | default arguments]] }}
{{nv | [[cpp/language/variadic_arguments | variadic arguments]] }}
{{nv | [[cpp/language/inline | inline specifier]] }}
{{nv | [[cpp/language/lambda | lambda expression]] {{mark c++11}}}}
{{nv h2 | Function calls }}
{{nv | [[cpp/language/adl | argument-dependent lookup (ADL)]] }}
{{nv | [[cpp/language/operator_other#Built-in_function_call_operator | function-call operator]] }}
{{nv | [[cpp/concept/FunctionObject | function objects]] }}
{{nv h2 | Overloading }}
{{nv | [[cpp/language/overload_resolution | overload resolution]] }}
{{nv | [[cpp/language/operators | operator overloading]] }}
{{nv | [[cpp/language/overloaded_address | address of an overload set]] }}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>ds7kwycabmcwvxco8b4t1pesv6p9cm1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/functions/navbar heading</title>
    <ns>10</ns>
    <id>13499</id>
    <revision>
      <id>69211</id>
      <timestamp>2014-03-30T15:05:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="38">[[cpp/language/functions | Functions]]</text>
      <sha1>06dtwcyxebt450vgua5ypqr99dlxm7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/initialization/navbar</title>
    <ns>10</ns>
    <id>13100</id>
    <revision>
      <id>66546</id>
      <timestamp>2013-12-05T14:46:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>sub-navbar</comment>
      <text xml:space="preserve" bytes="223">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/initialization/navbar heading
|content3 = cpp/language/initialization/navbar content
}}</text>
      <sha1>o8hk62ulv81f6pplvh9ktl0vnq10bm2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/initialization/navbar content</title>
    <ns>10</ns>
    <id>13102</id>
    <revision>
      <id>66551</id>
      <parentid>66550</parentid>
      <timestamp>2013-12-05T15:01:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="1350">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | [[cpp/language/initialization | Initializer ]] }}
{{nv | [[cpp/language/default_initialization | Default initialization]]}}
{{nv | [[cpp/language/value_initialization | Value initialization]]}}
{{nv | [[cpp/language/direct_initialization| Direct initialization]]}}
{{nv | [[cpp/language/copy_initialization|Copy initialization]]}}
{{nv | [[cpp/language/list_initialization|List initialization]]}}
{{nv | [[cpp/language/aggregate_initialization|Aggregate initialization]]}}
{{nv | [[cpp/language/reference_initialization|Reference initialization]]}}
{{nv h2 | [[cpp/language/initialization#Non-local_variables | Static initialization ]] }}
{{nv | [[cpp/language/zero_initialization|Zero initialization]]}}
{{nv | [[cpp/language/constant_initialization|Constant initialization]]}}
{{nv h2 | [[cpp/language/initialization#Non-local_variables | Dynamic non-local initialization]]}}
{{nv | [[cpp/language/initialization#Non-local_variables | Ordered dynamic initialization]]}}
{{nv | [[cpp/language/initialization#Non-local_variables|Unordered dynamic initialization]]}}
{{nv h2 | Class member initialization }}
{{nv | [[cpp/language/initializer_list|Member initializer list]]}}
{{nv | [[cpp/language/data_members#Member_initialization|in-class ''brace-or-equal'' initializer]]}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>nb28gheoo75oq56m4w1ymuv9d7x2dzq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/initialization/navbar heading</title>
    <ns>10</ns>
    <id>13101</id>
    <revision>
      <id>66547</id>
      <timestamp>2013-12-05T14:47:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>sub-navbar</comment>
      <text xml:space="preserve" bytes="48">[[cpp/language/initialization | Initialization]]</text>
      <sha1>alpabu4vmy2mr9o5ip1fmsmfk6bi8og</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/navbar</title>
    <ns>10</ns>
    <id>1585</id>
    <revision>
      <id>39943</id>
      <parentid>35658</parentid>
      <timestamp>2012-09-28T20:11:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="156">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/language/navbar heading
|content2 = cpp/language/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/navbar content</title>
    <ns>10</ns>
    <id>1586</id>
    <revision>
      <id>75561</id>
      <parentid>67830</parentid>
      <timestamp>2015-01-21T21:50:16Z</timestamp>
      <contributor>
        <username>Radix</username>
        <id>584</id>
      </contributor>
      <comment>Formatting</comment>
      <text xml:space="preserve" bytes="6770">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h1 | General topics}}
{{nv col begin}}
{{nv | [[cpp/preprocessor | Preprocessor]]}}
{{nv | [[cpp/comment | Comments]]}}
{{nv col next}}
{{nv | [[cpp/keyword | Keywords]]}}
{{nv | [[cpp/language/escape | Escape sequences]]}}
{{nv col end}}

{{nv h1 | Flow control}}
{{nv h2 | Conditional execution statements}}
{{nv col begin}}
{{nv | [[cpp/language/if | {{tt|if}}]]}}
{{nv col next}}
{{nv | [[cpp/language/switch | {{tt|switch}}]]}}
{{nv col end}}

{{nv h2 | Iteration statements (loops)}}
{{nv col begin}}
{{nv | [[cpp/language/for | {{tt|for}}]]}}
{{nv | [[cpp/language/range-for | range-{{tt|for}}]] {{mark c++11}}}}
{{nv col next}}
{{nv | [[cpp/language/while | {{tt|while}}]]}}
{{nv | [[cpp/language/do | {{tt|do-while}}]]}}
{{nv col end}}

{{nv h2 | Jump statements }}
{{nv col begin}}
{{nv | [[cpp/language/continue | {{tt|continue}}]] - [[cpp/language/break | {{tt|break}}]]}}
{{nv col next}}
{{nv | [[cpp/language/goto | {{tt|goto}}]] - [[cpp/language/return | {{tt|return}}]]}}
{{nv col end}}

{{nv h1 | Functions}}
{{nv | [[cpp/language/function | Function declaration]]}}
{{nv | [[cpp/language/lambda | Lambda function declaration]]}}
{{nv | [[cpp/language/inline | {{tt|inline}} specifier]]}}
{{nv | [[cpp/language/except_spec | Exception specifications]] {{mark deprecated}}}}
{{nv | [[cpp/language/noexcept_spec | {{tt|noexcept}} specifier]] {{mark c++11}}}}

{{nv h1 | Exceptions}}
{{nv col begin}}
{{nv | [[cpp/language/throw | {{tt|throw}}-expression]]}}
{{nv col next}}
{{nv | [[cpp/language/try_catch | {{tt|try}}-{{tt|catch}} block]]}}
{{nv col end}}

{{nv h1 | Namespaces}}
{{nv col begin}}
{{nv | [[cpp/language/namespace | Namespace declaration]]}}
{{nv col next}}
{{nv | [[cpp/language/namespace_alias | Namespace aliases]]}}
{{nv col end}}

{{nv h1 | Types}}
{{nv col begin}}
{{nv | [[cpp/language/types | Fundamental types]]}}
{{nv | [[cpp/language/enum | Enumeration types]]}}
{{nv | [[cpp/language/function | Function types]]}}
{{nv col next}}
{{nv | [[cpp/language/class | Compound types]]}}
{{nv | [[cpp/language/union | Union types]]}}
{{nv col end}}

{{nv h2 | Specifiers}}
{{nv col begin}}
{{nv | [[cpp/language/decltype | {{tt|decltype}}]] {{mark c++11}}}}
{{nv | [[cpp/language/auto | {{tt|auto}}]] {{mark c++11}}}}
{{nv | [[cpp/language/alignas | {{tt|alignas}}]] {{mark c++11}}}}
{{nv col next}}
{{nv | [[cpp/language/cv | {{tt|const}}/{{tt|volatile}}]]}}
{{nv | [[cpp/language/constexpr | {{tt|constexpr}}]] {{mark c++11}}}}
{{nv col end}}
{{nv | [[cpp/language/storage_duration | Storage duration specifiers]]}}

{{nv h2 | Initialization}}
{{nv col begin}}
{{nv | [[cpp/language/default_initialization | Default initialization]]}}
{{nv | [[cpp/language/value_initialization | Value initialization]]}}
{{nv | [[cpp/language/zero_initialization | Zero initialization]]}}
{{nv | [[cpp/language/copy_initialization | Copy initialization]]}}
{{nv | [[cpp/language/direct_initialization | Direct initialization]]}}
{{nv col next}}
{{nv | [[cpp/language/aggregate_initialization | Aggregate initialization]]}}
{{nv | [[cpp/language/list_initialization | List initialization]] {{mark c++11}}}}
{{nv | [[cpp/language/constant_initialization| Constant initialization]]}}
{{nv | [[cpp/language/reference_initialization| Reference initialization]]}}
{{nv col end}}
{{nv end}}
&lt;/div&gt;
&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h1 | Expressions}}
{{nv col begin}}
{{nv | [[cpp/language/value_category | Value categories]]}}
{{nv | [[cpp/language/eval_order | Order of evaluation]]}}
{{nv col next}}
{{nv | [[cpp/language/operators | Operators]]}}
{{nv | [[cpp/language/operator_precedence | Operator precedence]]}}
{{nv col end}}
{{nv | [[cpp/language/operator_alternative | Alternative representations]]}}

{{nv h2 | Literals}}
{{nv | [[cpp/language/bool_literal| Boolean]] - [[cpp/language/integer_literal | Integer]] - [[cpp/language/floating_literal | Floating-point]]}}   
{{nv | [[cpp/language/character_literal | Character]] - [[cpp/language/string_literal | String]] - [[cpp/language/nullptr | {{tt|nullptr}}]] {{mark c++11}}}} 
{{nv | [[cpp/language/user_literal | User-defined]] {{mark c++11}}}}

{{nv h1 | Utilities}}
{{nv | [[cpp/language/attributes | Attributes]] {{mark c++11}}}}
{{nv h2 | Types}}
{{nv | [[cpp/language/typedef | {{tt|typedef}} declaration]]}}
{{nv | [[cpp/language/type_alias | Type alias declaration]] {{mark c++11}}}}
{{nv h2 | Casts}}
{{nv | [[cpp/language/implicit_cast | Implicit conversions]] - [[cpp/language/explicit_cast | Explicit conversions]]}}
{{nv | [[cpp/language/static_cast | {{tt|static_cast}}]] - [[cpp/language/dynamic_cast | {{tt|dynamic_cast}}]]}}
{{nv | [[cpp/language/const_cast | {{tt|const_cast}}]] - [[cpp/language/reinterpret_cast | {{tt|reinterpret_cast}}]]}}

{{nv h2 | Memory allocation}}
{{nv col begin}}
{{nv | [[cpp/language/new | {{tt|new}} expression]]}}
{{nv col next}}
{{nv | [[cpp/language/delete | {{tt|delete}} expression]]}}
{{nv col end}}

{{nv h1 | Classes}}
{{nv col begin}}
{{nv | [[cpp/language/class | Class declaration]]}}
{{nv | [[cpp/language/initializer_list | Initializer lists]] }}
{{nv | [[cpp/language/this | {{tt|this}} pointer]]}}
{{nv col next}}
{{nv | [[cpp/language/access | Access specifiers]]}}
{{nv | [[cpp/language/friend | {{tt|friend}} specifier]]}}
{{nv col end}}

{{nv h2 | Class-specific function properties}}
{{nv col begin}}
{{nv | [[cpp/language/virtual | Virtual function]] }}
{{nv | [[cpp/language/override | override specifier]]  {{mark c++11}}}}
{{nv | [[cpp/language/final | final specifier]]  {{mark c++11}}}}
{{nv col next}}
{{nv | [[cpp/language/explicit | {{tt|explicit}}]]  {{mark c++11}}}}
{{nv | [[cpp/language/static | {{tt|static}}]] }}
{{nv col end}}

{{nv h2 | Special member functions}}
{{nv col begin}}
{{nv | [[cpp/language/default_constructor | Default constructor]]}}
{{nv | [[cpp/language/copy_constructor | Copy constructor]]}}
{{nv | [[cpp/language/move_constructor | Move constructor]] {{mark c++11}}}}
{{nv col next}}
{{nv | [[cpp/language/as_operator | Copy assignment]]}}
{{nv | [[cpp/language/move_operator | Move assignment]] {{mark c++11}}}}
{{nv | [[cpp/language/destructor | Destructor]]}}
{{nv col end}}
{{nv h1 |Templates }}
{{nv col begin}}
{{nv | [[cpp/language/class_template | Class template ]]}}
{{nv | [[cpp/language/function_template | Function template ]]}}
{{nv col next}}
{{nv | [[cpp/language/template_specialization | Template specialization]]}}   
{{nv | [[cpp/language/parameter_pack | Parameter packs]] {{mark c++11}}}}
{{nv col end}}
{{nv h1 | Miscellaneous }}
{{nv col begin}}
{{nv | [[cpp/language/asm | Inline assembly]]}}
{{nv col next}}
{{nv | [[cpp/language/history | History of C++]]}}
{{nv col end}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>34724sc11lirffhl12gdb5wui7rgme4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/navbar heading</title>
    <ns>10</ns>
    <id>1587</id>
    <revision>
      <id>34750</id>
      <parentid>3174</parentid>
      <timestamp>2012-06-15T22:08:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/language/sidebar heading]] to [[Template:cpp/language/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="31">[[cpp/language | C++ language]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/operators</title>
    <ns>10</ns>
    <id>1584</id>
    <revision>
      <id>91065</id>
      <parentid>91050</parentid>
      <timestamp>2017-03-16T19:24:59Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>change the description of new and delete</comment>
      <text xml:space="preserve" bytes="2080">{| class=&quot;wikitable&quot;
|- style=&quot;text-align:center&quot;
! colspan=&quot;7&quot; | Common operators 
|- style=&quot;text-align:center&quot;
| [[cpp/language/operator assignment | assignment]]
| [[cpp/language/operator incdec | increment&lt;br&gt;decrement]]
| [[cpp/language/operator arithmetic | arithmetic]]
| [[cpp/language/operator logical | logical]]
| [[cpp/language/operator comparison | comparison]]
| [[cpp/language/operator member access | member&lt;br&gt;access]]
| [[cpp/language/operator other | other]]
|- style=&quot;text-align:center&quot;
| 
{{c|1=a = b
a += b
a -= b
a *= b
a /= b
a %= b
a &amp;= b
a {{!}}= b
a ^= b
a &lt;&lt;= b
a &gt;&gt;= b}}
| 
{{c|1=++a
--a
a++
a--
}}
| 
{{c|1=+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a &amp; b
a {{!}} b
a ^ b
a &lt;&lt; b
a &gt;&gt; b
}}
| 
{{c|1=!a
a &amp;&amp; b
a {{!!}} b
}}
| 
{{c|1=a == b
a != b
a &lt; b
a &gt; b
a &lt;= b
a &gt;= b
}}
| 
{{c|1=a[b]
*a
&amp;a
a-&gt;b
a.b
a-&gt;*b
a.*b
}}
| 
{{c|1=a(...)
a, b
? :
}}
|-
! colspan=&quot;7&quot; | Special operators 
|-
| colspan=&quot;7&quot; |
{{ltt|cpp/language/static_cast}} converts one type to another related type &lt;br/&gt;
{{ltt|cpp/language/dynamic_cast}} converts within inheritance hierarchies &lt;br/&gt;
{{ltt|cpp/language/const_cast}} adds or removes [[cpp/language/cv|cv]] qualifiers&lt;br/&gt;
{{ltt|cpp/language/reinterpret_cast}} converts type to unrelated type&lt;br/&gt;
[[cpp/language/explicit cast|C-style cast]] converts one type to another by a mix of {{tt|static_cast}}, {{tt|const_cast}}, and {{tt|reinterpret_cast}} &lt;br/&gt;
{{ltt|cpp/language/new | new}} creates objects with dynamic storage duration&lt;br/&gt;
{{ltt|cpp/language/delete | delete}} destructs objects previously created by the new expression and releases obtained memory area&lt;br/&gt;
{{ltt|cpp/language/sizeof}} queries the size of a type&lt;br/&gt;
{{ltt|cpp/language/sizeof...}} queries the size of a [[cpp/language/parameter_pack|parameter pack]] {{mark since c++11}}&lt;br/&gt;
{{ltt|cpp/language/typeid}} queries the type information of a type&lt;br/&gt;
{{ltt|cpp/language/noexcept}} checks if an expression can throw an exception {{mark since c++11}}&lt;br/&gt;
{{ltt|cpp/language/alignof}} queries alignment requirements of a type {{mark since c++11}}
|}</text>
      <sha1>8ujxow25tao6arqfx1n10q53jvwcd07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/process guarantee note</title>
    <ns>10</ns>
    <id>15690</id>
    <revision>
      <id>87441</id>
      <parentid>87435</parentid>
      <timestamp>2016-08-24T15:08:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to forward progress</comment>
      <text xml:space="preserve" bytes="383">As part of the C++ [[cpp/language/memory_model#Forward_progress|forward progress guarantee]], the behavior is [[cpp/language/ub|undefined]] if a loop that has no [[cpp/language/as_if|observable behavior]] (does not make calls to I/O functions, access volatile objects, or perform atomic or synchronization operations) does not terminate. Compilers are permitted to remove such loops.</text>
      <sha1>ba2isjbx2i6xkss7ib7yv3xkaqbfheo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/statements/navbar</title>
    <ns>10</ns>
    <id>9951</id>
    <revision>
      <id>47222</id>
      <timestamp>2013-05-01T19:56:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>I wonder if the giant cpp/language navbar can be split up too..</comment>
      <text xml:space="preserve" bytes="215">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/statements/navbar heading
|content3 = cpp/language/statements/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/statements/navbar content</title>
    <ns>10</ns>
    <id>9949</id>
    <revision>
      <id>81272</id>
      <parentid>53256</parentid>
      <timestamp>2015-10-09T23:08:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+tm ts</comment>
      <text xml:space="preserve" bytes="1243">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | Labels }}
{{nv | [[cpp/language/statements | {{spar|label}} : {{spar|statement}}]]}}
{{nv h2 | Expression statements }}
{{nv | [[cpp/language/statements | {{spar|expression}} ; ]]}}
{{nv h2 | Compound statements }}
{{nv | [[cpp/language/statements | { {{spar|statement}}... } ]]}}
{{nv h2 | Selection statements }}
{{nv | [[cpp/language/if | if]]}}
{{nv | [[cpp/language/switch | switch]]}}
{{nv h2 | Iteration statements }}
{{nv | [[cpp/language/while | while]]}}
{{nv | [[cpp/language/do | do-while]]}}
{{nv | [[cpp/language/for | for]]}}
{{nv | [[cpp/language/range-for | range for]]{{mark c++11}}}}
{{nv h2 | Jump statements }}
{{nv | [[cpp/language/break | break]]}}
{{nv | [[cpp/language/continue | continue]]}}
{{nv | [[cpp/language/return | return]]}}
{{nv | [[cpp/language/goto | goto]]}}
{{nv h2 | Declaration statements }}
{{nv | [[cpp/language/declarations | {{spar|declaration}} ; ]]}}
{{nv h2 | Try blocks }}
{{nv | [[cpp/language/try_catch | try {{spar|compound-statement}} {{spar|handler-sequence}}]]}}
{{nv h2 | Transactional memory }}
{{nv | [[cpp/language/transactional_memory | {{tt|syncronized}}, {{tt|atomic_commit}}]], etc{{mark since tm ts}}}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>iph3rxts7f6lppg0a5pftqq2o2f832f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/statements/navbar heading</title>
    <ns>10</ns>
    <id>9950</id>
    <revision>
      <id>47221</id>
      <timestamp>2013-05-01T19:56:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>I wonder if the giant cpp/language navbar can be split up too..</comment>
      <text xml:space="preserve" bytes="40">[[cpp/language/statements | Statements]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/templates/navbar</title>
    <ns>10</ns>
    <id>13504</id>
    <revision>
      <id>69607</id>
      <timestamp>2014-04-15T16:50:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="213">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/language/navbar heading
|heading3 = cpp/language/templates/navbar heading
|content3 = cpp/language/templates/navbar content
}}</text>
      <sha1>1gn8s4nc3sp1v64kfbwc1isthoal879</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/templates/navbar content</title>
    <ns>10</ns>
    <id>13506</id>
    <revision>
      <id>86928</id>
      <parentid>75804</parentid>
      <timestamp>2016-07-15T21:05:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>redlnk class template deduction for p0091</comment>
      <text xml:space="preserve" bytes="1139">&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv | [[cpp/language/template_parameters | parameters and arguments]] }}
{{nv | [[cpp/language/class_template | class templates]] }}
{{nv | [[cpp/language/function_template | function templates]] }}
{{nv | [[cpp/language/member_template | class member templates]] }}
{{nv | [[cpp/language/variable_template | variable templates]]{{mark c++14}}}}
{{nv | [[cpp/language/template_argument_deduction | template argument deduction]] }}
{{nv | [[cpp/language/class_template_deduction | class template deduction]]{{mark c++17}} }}
{{nv | [[cpp/language/template_specialization | explicit (full) specialization]] }}
{{nv | [[cpp/language/partial_specialization | partial specialization]] }}
{{nv | [[cpp/language/dependent_name | dependent names]] }}
{{nv | [[cpp/language/parameter_pack | parameter packs]]{{mark c++11}}}}
{{nv ln | cpp/language/sizeof... | notes={{mark c++11}}}}
{{nv | [[cpp/language/fold | fold-expressions]]{{mark c++17}}}}
{{nv | [[cpp/language/sfinae | SFINAE]] }}
{{nv | [[cpp/language/constraints | Constraints and concepts]]{{mark since concepts_ts}} }}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>pm6sihx74ku185ajptn0s5c3h0c5aod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/language/templates/navbar heading</title>
    <ns>10</ns>
    <id>13505</id>
    <revision>
      <id>69608</id>
      <timestamp>2014-04-15T16:51:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="38">[[cpp/language/templates | Templates]]</text>
      <sha1>48m2z2aw4z9ycl7brwvx5j7idgootbm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale//navbar</title>
    <ns>10</ns>
    <id>4443</id>
    <revision>
      <id>35319</id>
      <parentid>15816</parentid>
      <timestamp>2012-06-15T22:22:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale//sidebar]] to [[Template:cpp/locale//navbar]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale//title</title>
    <ns>10</ns>
    <id>8420</id>
    <revision>
      <id>30676</id>
      <parentid>30670</parentid>
      <timestamp>2012-05-07T22:28:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/byname/constructor</title>
    <ns>10</ns>
    <id>12762</id>
    <revision>
      <id>61615</id>
      <parentid>61610</parentid>
      <timestamp>2013-06-06T07:19:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>make generic</comment>
      <text xml:space="preserve" bytes="678">{{member | {{small|std::{{{1}}}::}}{{{1}}} |
{{dcl begin}}
{{dcl | 1=
explicit {{{1}}}( const char* name, std::size_t refs = 0 );
}}
{{dcl | since=c++11 | 1=
explicit {{{1}}}( const std::string&amp; name, std::size_t refs = 0 );
}}
{{dcl end}}

Constructs a new {{tt|std::{{{1}}}}} facet for a locale with {{tt|name}}. 

{{tt|refs}} is used for resource management: if {{c|1=refs == 0}}, the implementation destroys the facet, when the last {{c|std::locale}} object holding it is destroyed. Otherwise, the object is not destroyed.

===Parameters===
{{par begin}}
{{par | name | the name of the locale}}
{{par | refs | the number of references that link to the facet}}
{{par end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/byname/destructor</title>
    <ns>10</ns>
    <id>12763</id>
    <revision>
      <id>61614</id>
      <parentid>61611</parentid>
      <timestamp>2013-06-06T07:18:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>make generic</comment>
      <text xml:space="preserve" bytes="132">{{member | {{small|std::{{{1}}}::}}~{{{1}}} |
{{dcl begin}}
{{dcl | 1=
protected:
~{{{1}}}();
}}
{{dcl end}}

Destroys the facet.
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/byname/dsc constructor</title>
    <ns>10</ns>
    <id>12760</id>
    <revision>
      <id>61636</id>
      <parentid>61612</parentid>
      <timestamp>2013-06-06T07:44:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="98">{{dsc mem ctor | cpp/locale/{{{1|/}}} | inlinemem=true | constructs a new {{tt|{{{1|}}}}} facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/byname/dsc destructor</title>
    <ns>10</ns>
    <id>12761</id>
    <revision>
      <id>61637</id>
      <parentid>61613</parentid>
      <timestamp>2013-06-06T07:44:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="97">{{dsc prot mem dtor | cpp/locale/{{{1|/}}} | inlinemem=true | destroys a {{tt|{{{1|}}}}} facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt base/inherit</title>
    <ns>10</ns>
    <id>4560</id>
    <revision>
      <id>53299</id>
      <parentid>32722</parentid>
      <timestamp>2013-06-01T05:00:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="590">{{ inherited | [[cpp/locale/codecvt_base | {{small|std::}}codecvt_base]] |
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|enum result { ok, partial, error, noconv };}} | Unscoped enumeration type}}
{{dsc end}}

{{dsc begin}}
{{dsc hitem | Enumeration constant | Definition}}
{{dsc | {{tt|ok}}      | conversion was completed with no error}}
{{dsc | {{tt|partial}} | not all source characters were converted}}
{{dsc | {{tt|error}}   | encountered an invalid character}}
{{dsc | {{tt|noconv}}  | no conversion required, input and output types are the same}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc always noconv</title>
    <ns>10</ns>
    <id>9471</id>
    <revision>
      <id>57267</id>
      <parentid>53257</parentid>
      <timestamp>2013-06-01T05:50:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list always noconv]] to [[Template:cpp/locale/codecvt/dsc always noconv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/locale/codecvt/always_noconv | invokes {{tt|do_always_noconv}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc do always noconv</title>
    <ns>10</ns>
    <id>4618</id>
    <revision>
      <id>57271</id>
      <parentid>53260</parentid>
      <timestamp>2013-06-01T05:50:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list do always noconv]] to [[Template:cpp/locale/codecvt/dsc do always noconv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc prot mem vfun | cpp/locale/codecvt/always_noconv | title=do_always_noconv |tests if the facet encodes an identity conversion for all valid argument values }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc do encoding</title>
    <ns>10</ns>
    <id>4617</id>
    <revision>
      <id>57276</id>
      <parentid>53263</parentid>
      <timestamp>2013-06-01T05:50:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list do encoding]] to [[Template:cpp/locale/codecvt/dsc do encoding]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc prot mem vfun | cpp/locale/codecvt/encoding | title=do_encoding | returns the number of externT characters necessary to produce one internT character, if constant}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc do in</title>
    <ns>10</ns>
    <id>4616</id>
    <revision>
      <id>57280</id>
      <parentid>53266</parentid>
      <timestamp>2013-06-01T05:50:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list do in]] to [[Template:cpp/locale/codecvt/dsc do in]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc prot mem vfun | cpp/locale/codecvt/in | title=do_in | mem={{{mem|}}} | converts a string from externT to internT, such as when reading from file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc do length</title>
    <ns>10</ns>
    <id>4619</id>
    <revision>
      <id>57283</id>
      <parentid>53267</parentid>
      <timestamp>2013-06-01T05:50:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list do length]] to [[Template:cpp/locale/codecvt/dsc do length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="175">{{dsc prot mem vfun | cpp/locale/codecvt/length | title=do_length |calculates the length of the externT string that would be consumed by conversion into given internT buffer}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc do max length</title>
    <ns>10</ns>
    <id>4620</id>
    <revision>
      <id>57287</id>
      <parentid>53270</parentid>
      <timestamp>2013-06-01T05:50:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list do max length]] to [[Template:cpp/locale/codecvt/dsc do max length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="182">{{dsc prot mem vfun | cpp/locale/codecvt/max_length | title=do_max_length | returns the maximum number of externT characters that could be converted into a single internT character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc do out</title>
    <ns>10</ns>
    <id>4615</id>
    <revision>
      <id>57290</id>
      <parentid>53273</parentid>
      <timestamp>2013-06-01T05:50:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list do out]] to [[Template:cpp/locale/codecvt/dsc do out]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc prot mem vfun | cpp/locale/codecvt/out | title=do_out | mem={{{mem|}}} | converts a string from internT to externT, such as when writing to file}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc do unshift</title>
    <ns>10</ns>
    <id>4621</id>
    <revision>
      <id>57294</id>
      <parentid>53276</parentid>
      <timestamp>2013-06-01T05:51:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list do unshift]] to [[Template:cpp/locale/codecvt/dsc do unshift]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="164">{{dsc prot mem vfun | cpp/locale/codecvt/unshift | title=do_unshift | generates the termination character sequence of externT characters for incomplete conversion}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc encoding</title>
    <ns>10</ns>
    <id>9470</id>
    <revision>
      <id>57299</id>
      <parentid>53279</parentid>
      <timestamp>2013-06-01T05:51:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list encoding]] to [[Template:cpp/locale/codecvt/dsc encoding]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/locale/codecvt/encoding | invokes {{tt|do_encoding}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc in</title>
    <ns>10</ns>
    <id>9468</id>
    <revision>
      <id>57302</id>
      <parentid>53280</parentid>
      <timestamp>2013-06-01T05:51:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list in]] to [[Template:cpp/locale/codecvt/dsc in]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">{{dsc mem fun | cpp/locale/codecvt/in | invokes {{tt|do_in}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc length</title>
    <ns>10</ns>
    <id>9472</id>
    <revision>
      <id>57306</id>
      <parentid>53283</parentid>
      <timestamp>2013-06-01T05:51:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list length]] to [[Template:cpp/locale/codecvt/dsc length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/locale/codecvt/length | invokes {{tt|do_length}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc max length</title>
    <ns>10</ns>
    <id>9473</id>
    <revision>
      <id>57309</id>
      <parentid>53286</parentid>
      <timestamp>2013-06-01T05:51:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list max length]] to [[Template:cpp/locale/codecvt/dsc max length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/locale/codecvt/max_length | invokes {{tt|do_max_length}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc out</title>
    <ns>10</ns>
    <id>9467</id>
    <revision>
      <id>57312</id>
      <parentid>53289</parentid>
      <timestamp>2013-06-01T05:51:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list out]] to [[Template:cpp/locale/codecvt/dsc out]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">{{dsc mem fun | cpp/locale/codecvt/out | invokes {{tt|do_out}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/dsc unshift</title>
    <ns>10</ns>
    <id>9469</id>
    <revision>
      <id>57314</id>
      <parentid>53290</parentid>
      <timestamp>2013-06-01T05:51:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/codecvt/dcl list unshift]] to [[Template:cpp/locale/codecvt/dsc unshift]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/locale/codecvt/unshift | invokes {{tt|do_unshift}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/inherit</title>
    <ns>10</ns>
    <id>4561</id>
    <revision>
      <id>60894</id>
      <parentid>53293</parentid>
      <timestamp>2013-06-01T11:59:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1196">{{ inherited | [[cpp/locale/codecvt | {{small|std::}}codecvt]] |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|intern_type}} | {{tt|internT}}}}
{{dsc | {{tt|extern_type}} | {{tt|externT}}}}
{{dsc | {{tt|state_type}} | {{tt|stateT}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc | {{tt|id}} {{mark|static}} | {{lc|std::locale::id}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/codecvt/dsc out}}
{{dsc inc | cpp/locale/codecvt/dsc in}}
{{dsc inc | cpp/locale/codecvt/dsc unshift}}
{{dsc inc | cpp/locale/codecvt/dsc encoding}}
{{dsc inc | cpp/locale/codecvt/dsc always_noconv}}
{{dsc inc | cpp/locale/codecvt/dsc length}}
{{dsc inc | cpp/locale/codecvt/dsc max_length}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc inc | cpp/locale/codecvt/dsc do_unshift}}
{{dsc inc | cpp/locale/codecvt/dsc do_encoding}}
{{dsc inc | cpp/locale/codecvt/dsc do_always_noconv}}
{{dsc inc | cpp/locale/codecvt/dsc do_length}}
{{dsc inc | cpp/locale/codecvt/dsc do_max_length}}
{{dsc end}}

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/navbar</title>
    <ns>10</ns>
    <id>4385</id>
    <revision>
      <id>39944</id>
      <parentid>35739</parentid>
      <timestamp>2012-09-28T20:11:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/codecvt/navbar heading
|content3 = cpp/locale/codecvt/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/navbar content</title>
    <ns>10</ns>
    <id>4387</id>
    <revision>
      <id>53296</id>
      <parentid>47436</parentid>
      <timestamp>2013-06-01T05:00:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="573">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/codecvt/codecvt}}
{{nv mem ln | cpp/locale/codecvt/~codecvt}}
{{nv mem ln | cpp/locale/codecvt/out|out|do_out}}
{{nv mem ln | cpp/locale/codecvt/in|in|do_in}}
{{nv mem ln | cpp/locale/codecvt/unshift|unshift|do_unshift}}
{{nv mem ln | cpp/locale/codecvt/encoding|encoding|do_encoding}}
{{nv mem ln | cpp/locale/codecvt/always_noconv|always_noconv|do_always_noconv}}
{{nv mem ln | cpp/locale/codecvt/length|length|do_length}}
{{nv mem ln | cpp/locale/codecvt/max_length|max_length|do_max_length}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/navbar heading</title>
    <ns>10</ns>
    <id>4386</id>
    <revision>
      <id>48072</id>
      <parentid>35741</parentid>
      <timestamp>2013-05-18T18:05:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="39">{{ltt|cpp/locale/codecvt|std::codecvt}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/codecvt/title</title>
    <ns>10</ns>
    <id>4384</id>
    <revision>
      <id>15733</id>
      <timestamp>2011-12-15T16:34:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=codecvt::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/collation note</title>
    <ns>10</ns>
    <id>9254</id>
    <revision>
      <id>46014</id>
      <parentid>46013</parentid>
      <timestamp>2013-02-13T04:18:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>another tweak</comment>
      <text xml:space="preserve" bytes="554">Collation order is the dictionary order: the position of the letter in the national alphabet (its ''equivalence class'') has higher priority than its case or variant. Within an equivalence class, lowercase characters collate before their uppercase equivalents and locale-specific order may apply to the characters with diacritics. In some locales, groups of characters compare as single ''collation units''. For example, {{c|&quot;ch&quot;}} in Czech follows {{c|&quot;h&quot;}} and precedes {{c|&quot;i&quot;}}, and {{c|&quot;dzs&quot;}} in Hungarian follows {{c|&quot;dz&quot;}} and precedes {{c|&quot;g&quot;}}.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/dsc compare</title>
    <ns>10</ns>
    <id>9491</id>
    <revision>
      <id>57316</id>
      <parentid>53300</parentid>
      <timestamp>2013-06-01T05:51:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/collate/dcl list compare]] to [[Template:cpp/locale/collate/dsc compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/locale/collate/compare | invokes {{tt|do_compare}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/dsc do compare</title>
    <ns>10</ns>
    <id>9256</id>
    <revision>
      <id>57318</id>
      <parentid>53303</parentid>
      <timestamp>2013-06-01T05:51:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/collate/dcl list do compare]] to [[Template:cpp/locale/collate/dsc do compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc prot mem vfun | cpp/locale/collate/compare | title=do_compare | compares two strings using this facet's collation rules}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/dsc do hash</title>
    <ns>10</ns>
    <id>9494</id>
    <revision>
      <id>57320</id>
      <parentid>53306</parentid>
      <timestamp>2013-06-01T05:51:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/collate/dcl list do hash]] to [[Template:cpp/locale/collate/dsc do hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc prot mem vfun | cpp/locale/collate/hash | title=do_hash | generates an integer hash value using this facet's collation rules }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/dsc do transform</title>
    <ns>10</ns>
    <id>9251</id>
    <revision>
      <id>57323</id>
      <parentid>53309</parentid>
      <timestamp>2013-06-01T05:51:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/collate/dcl list do transform]] to [[Template:cpp/locale/collate/dsc do transform]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc prot mem vfun | cpp/locale/collate/transform | title=do_transform | transforms a string so that collation can be replaced by comparison }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/dsc hash</title>
    <ns>10</ns>
    <id>9493</id>
    <revision>
      <id>57327</id>
      <parentid>53312</parentid>
      <timestamp>2013-06-01T05:51:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/collate/dcl list hash]] to [[Template:cpp/locale/collate/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc mem fun | cpp/locale/collate/hash | invokes {{tt|do_hash}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/dsc transform</title>
    <ns>10</ns>
    <id>9492</id>
    <revision>
      <id>57330</id>
      <parentid>53313</parentid>
      <timestamp>2013-06-01T05:51:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/collate/dcl list transform]] to [[Template:cpp/locale/collate/dsc transform]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/locale/collate/transform | invokes {{tt|do_transform}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/inherit</title>
    <ns>10</ns>
    <id>9314</id>
    <revision>
      <id>60895</id>
      <parentid>53316</parentid>
      <timestamp>2013-06-01T12:00:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="645">{{ inherited | [[cpp/locale/collate | {{small|std::}}collate]] |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|charT}}}}
{{dsc | {{tt|string_type}} | {{tt|std::basic_string&lt;charT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/collate/dsc compare}}
{{dsc inc | cpp/locale/collate/dsc transform}}
{{dsc inc | cpp/locale/collate/dsc hash}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/collate/dsc do_compare}}
{{dsc inc | cpp/locale/collate/dsc do_transform}}
{{dsc inc | cpp/locale/collate/dsc do_hash}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/navbar</title>
    <ns>10</ns>
    <id>4388</id>
    <revision>
      <id>39945</id>
      <parentid>35742</parentid>
      <timestamp>2012-09-28T20:11:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/collate/navbar heading
|content3 = cpp/locale/collate/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/navbar content</title>
    <ns>10</ns>
    <id>4390</id>
    <revision>
      <id>53319</id>
      <parentid>41221</parentid>
      <timestamp>2013-06-01T05:00:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="322">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/collate/collate}}
{{nv mem ln | cpp/locale/collate/~collate}}
{{nv mem ln | cpp/locale/collate/compare|compare|do_compare}}
{{nv mem ln | cpp/locale/collate/transform|transform|do_transform}}
{{nv mem ln | cpp/locale/collate/hash|hash|do_hash}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/navbar heading</title>
    <ns>10</ns>
    <id>4389</id>
    <revision>
      <id>48073</id>
      <parentid>35744</parentid>
      <timestamp>2013-05-18T18:05:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="39">{{ltt|cpp/locale/collate|std::collate}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/collate/title</title>
    <ns>10</ns>
    <id>4392</id>
    <revision>
      <id>38926</id>
      <parentid>15745</parentid>
      <timestamp>2012-08-10T04:09:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=collate::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype base/inherit</title>
    <ns>10</ns>
    <id>2783</id>
    <revision>
      <id>53362</id>
      <parentid>32723</parentid>
      <timestamp>2013-06-01T05:00:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1584">{{ inherited | {{small|std::}}ctype_base |
===Member types ===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|mask}} | unspecified bitmask type (enumeration, integer type, or bitset)}}
{{dsc end}}
===Member constants===
{{dsc begin}}
{{dsc mem sconst | space | nolink=true | the value of {{tt|mask}} identifying whitespace character classification }}
{{dsc mem sconst | print | nolink=true | the value of {{tt|mask}} identifying printable character classification }}
{{dsc mem sconst | cntrl | nolink=true | the value of {{tt|mask}} identifying control character classification }}
{{dsc mem sconst | upper | nolink=true | the value of {{tt|mask}} identifying uppercase character classification }}
{{dsc mem sconst | lower | nolink=true | the value of {{tt|mask}} identifying lowercase character classification }}
{{dsc mem sconst | alpha | nolink=true | the value of {{tt|mask}} identifying alphabetic character classification }}
{{dsc mem sconst | digit | nolink=true | the value of {{tt|mask}} identifying digit character classification  }}
{{dsc mem sconst | punct | nolink=true | the value of {{tt|mask}} identifying punctuation character classification }}
{{dsc mem sconst | xdigit | nolink=true | the value of {{tt|mask}} identifying hexadecimal digit character classification }}
{{dsc mem sconst | blank | nolink=true | the value of {{tt|mask}} identifying blank character classification | notes={{mark c++11}}}}
{{dsc mem sconst | alnum | nolink=true | {{c|alpha {{!}} digit}} }}
{{dsc mem sconst | graph | nolink=true | {{c|alnum {{!}} punct}} }}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/dsc classic table</title>
    <ns>10</ns>
    <id>9512</id>
    <revision>
      <id>57397</id>
      <parentid>53363</parentid>
      <timestamp>2013-06-01T05:52:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype char/dcl list classic table]] to [[Template:cpp/locale/ctype char/dsc classic table]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem sfun | cpp/locale/ctype_char/classic_table | obtains the &quot;C&quot; locale character classification table }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/dsc constructor</title>
    <ns>10</ns>
    <id>9509</id>
    <revision>
      <id>57401</id>
      <parentid>53366</parentid>
      <timestamp>2013-06-01T05:52:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype char/dcl list constructor]] to [[Template:cpp/locale/ctype char/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem ctor | cpp/locale/ctype_char/ctype | constructs a new {{c|std::ctype&lt;char&gt;}} facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/dsc destructor</title>
    <ns>10</ns>
    <id>9510</id>
    <revision>
      <id>57405</id>
      <parentid>53369</parentid>
      <timestamp>2013-06-01T05:53:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype char/dcl list destructor]] to [[Template:cpp/locale/ctype char/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc prot mem dtor | cpp/locale/ctype_char/~ctype | destructs a {{c|std::ctype&lt;char&gt;}} facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/dsc is</title>
    <ns>10</ns>
    <id>9513</id>
    <revision>
      <id>57408</id>
      <parentid>53374</parentid>
      <timestamp>2013-06-01T05:53:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype char/dcl list is]] to [[Template:cpp/locale/ctype char/dsc is]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/locale/ctype_char/is | classifies a character or a character sequence, using the classification table  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/dsc scan is</title>
    <ns>10</ns>
    <id>9514</id>
    <revision>
      <id>57412</id>
      <parentid>53377</parentid>
      <timestamp>2013-06-01T05:53:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype char/dcl list scan is]] to [[Template:cpp/locale/ctype char/dsc scan is]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc mem fun | cpp/locale/ctype_char/scan_is | locates the first character in a sequence that conforms to given classification, using the classification table  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/dsc scan not</title>
    <ns>10</ns>
    <id>9515</id>
    <revision>
      <id>57416</id>
      <parentid>53380</parentid>
      <timestamp>2013-06-01T05:53:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype char/dcl list scan not]] to [[Template:cpp/locale/ctype char/dsc scan not]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc mem fun | cpp/locale/ctype_char/scan_not | locates the first character in a sequence that fails given classification, using the classification table  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/dsc table</title>
    <ns>10</ns>
    <id>9511</id>
    <revision>
      <id>57421</id>
      <parentid>53383</parentid>
      <timestamp>2013-06-01T05:53:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype char/dcl list table]] to [[Template:cpp/locale/ctype char/dsc table]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/locale/ctype_char/table | obtains the character classification table }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/inherit</title>
    <ns>10</ns>
    <id>9244</id>
    <revision>
      <id>60897</id>
      <parentid>53384</parentid>
      <timestamp>2013-06-01T12:00:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1136">{{ inherited | {{small|std::}}ctype&lt;char&gt; |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|char}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc | {{tt|id}} {{mark|static}} | {{lc|std::locale::id}} }}
{{dsc | {{tt|table_size}} {{mark|static const}} | {{lc|std::size_t}} size of the classification table, at least 256}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype_char/dsc table}}
{{dsc inc | cpp/locale/ctype_char/dsc classic_table}}
{{dsc inc | cpp/locale/ctype_char/dsc is}}
{{dsc inc | cpp/locale/ctype_char/dsc scan_is}}
{{dsc inc | cpp/locale/ctype_char/dsc scan_not}}
{{dsc inc | cpp/locale/ctype/dsc toupper}}
{{dsc inc | cpp/locale/ctype/dsc tolower}}
{{dsc inc | cpp/locale/ctype/dsc widen}}
{{dsc inc | cpp/locale/ctype/dsc narrow}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_toupper}}
{{dsc inc | cpp/locale/ctype/dsc do_tolower}}
{{dsc inc | cpp/locale/ctype/dsc do_widen}}
{{dsc inc | cpp/locale/ctype/dsc do_narrow}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype char/title</title>
    <ns>10</ns>
    <id>9245</id>
    <revision>
      <id>53385</id>
      <parentid>38898</parentid>
      <timestamp>2013-06-01T05:01:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="122">&lt;onlyinclude&gt;{{cpp/title | n=ctype{{dsc small|&lt;char&gt;}}::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc do is</title>
    <ns>10</ns>
    <id>4631</id>
    <revision>
      <id>57334</id>
      <parentid>53322</parentid>
      <timestamp>2013-06-01T05:51:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list do is]] to [[Template:cpp/locale/ctype/dsc do is]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc prot mem vfun | cpp/locale/ctype/is | title=do_is | mem={{{mem|}}}| classifies a character or a character sequence }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc do narrow</title>
    <ns>10</ns>
    <id>4625</id>
    <revision>
      <id>57338</id>
      <parentid>53323</parentid>
      <timestamp>2013-06-01T05:51:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list do narrow]] to [[Template:cpp/locale/ctype/dsc do narrow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc prot mem vfun | cpp/locale/ctype/narrow | title=do_narrow | mem={{{mem|}}}|converts a character or characters from {{tt|charT}} to {{tt|char}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc do scan is</title>
    <ns>10</ns>
    <id>4630</id>
    <revision>
      <id>57346</id>
      <parentid>53326</parentid>
      <timestamp>2013-06-01T05:51:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list do scan is]] to [[Template:cpp/locale/ctype/dsc do scan is]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="164">{{dsc prot mem vfun | cpp/locale/ctype/scan_is | title=do_scan_is | mem={{{mem|}}}|locates the first character in a sequence that conforms to given classification}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc do scan not</title>
    <ns>10</ns>
    <id>4629</id>
    <revision>
      <id>57350</id>
      <parentid>53329</parentid>
      <timestamp>2013-06-01T05:52:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list do scan not]] to [[Template:cpp/locale/ctype/dsc do scan not]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc prot mem vfun | cpp/locale/ctype/scan_not | title=do_scan_not | mem={{{mem|}}}|locates the first character in a sequence that fails given classification}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc do tolower</title>
    <ns>10</ns>
    <id>4627</id>
    <revision>
      <id>57353</id>
      <parentid>53332</parentid>
      <timestamp>2013-06-01T05:52:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list do tolower]] to [[Template:cpp/locale/ctype/dsc do tolower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc prot mem vfun | cpp/locale/ctype/tolower | title=do_tolower | mem={{{mem|}}}|converts a character or characters to lowercase }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc do toupper</title>
    <ns>10</ns>
    <id>4628</id>
    <revision>
      <id>57357</id>
      <parentid>53333</parentid>
      <timestamp>2013-06-01T05:52:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list do toupper]] to [[Template:cpp/locale/ctype/dsc do toupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc prot mem vfun | cpp/locale/ctype/toupper | title=do_toupper |mem={{{mem|}}}|converts a character or characters to uppercase  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc do widen</title>
    <ns>10</ns>
    <id>4626</id>
    <revision>
      <id>57362</id>
      <parentid>53336</parentid>
      <timestamp>2013-06-01T05:52:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list do widen]] to [[Template:cpp/locale/ctype/dsc do widen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc prot mem vfun | cpp/locale/ctype/widen | title=do_widen | mem={{{mem|}}}|converts a character or characters from {{tt|char}} to {{tt|charT}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc is</title>
    <ns>10</ns>
    <id>9474</id>
    <revision>
      <id>57366</id>
      <parentid>53339</parentid>
      <timestamp>2013-06-01T05:52:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list is]] to [[Template:cpp/locale/ctype/dsc is]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">{{dsc mem fun | cpp/locale/ctype/is | invokes {{tt|do_is}}  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc narrow</title>
    <ns>10</ns>
    <id>9480</id>
    <revision>
      <id>57370</id>
      <parentid>53342</parentid>
      <timestamp>2013-06-01T05:52:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list narrow]] to [[Template:cpp/locale/ctype/dsc narrow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/locale/ctype/narrow | invokes {{tt|do_narrow}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc scan is</title>
    <ns>10</ns>
    <id>9475</id>
    <revision>
      <id>57374</id>
      <parentid>53345</parentid>
      <timestamp>2013-06-01T05:52:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list scan is]] to [[Template:cpp/locale/ctype/dsc scan is]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/locale/ctype/scan_is | invokes {{tt|do_scan_is}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc scan not</title>
    <ns>10</ns>
    <id>9476</id>
    <revision>
      <id>57378</id>
      <parentid>53346</parentid>
      <timestamp>2013-06-01T05:52:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list scan not]] to [[Template:cpp/locale/ctype/dsc scan not]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/locale/ctype/scan_not | invokes {{tt|do_scan_not}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc tolower</title>
    <ns>10</ns>
    <id>9478</id>
    <revision>
      <id>57383</id>
      <parentid>53349</parentid>
      <timestamp>2013-06-01T05:52:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list tolower]] to [[Template:cpp/locale/ctype/dsc tolower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/locale/ctype/tolower | invokes {{tt|do_tolower}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc toupper</title>
    <ns>10</ns>
    <id>9477</id>
    <revision>
      <id>57387</id>
      <parentid>53352</parentid>
      <timestamp>2013-06-01T05:52:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list toupper]] to [[Template:cpp/locale/ctype/dsc toupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/locale/ctype/toupper | invokes {{tt|do_toupper}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/dsc widen</title>
    <ns>10</ns>
    <id>9479</id>
    <revision>
      <id>57392</id>
      <parentid>53355</parentid>
      <timestamp>2013-06-01T05:52:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/ctype/dcl list widen]] to [[Template:cpp/locale/ctype/dsc widen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc mem fun | cpp/locale/ctype/widen | invokes {{tt|do_widen}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/inherit</title>
    <ns>10</ns>
    <id>9242</id>
    <revision>
      <id>65367</id>
      <parentid>61604</parentid>
      <timestamp>2013-09-10T17:24:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>include &lt;char&gt; specialization pecularities</comment>
      <text xml:space="preserve" bytes="1628">{{ inherited | {{small|std::}}ctype&lt;CharT&gt; |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc mem sconst | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc h2 | if {{c|CharT}} is {{c|char}}, the following member of {{lc|std::ctype&lt;char&gt;}} is inherited }}
{{dsc mem sconst | nolink=true | {{dsc small|static const std::size_t }} table_size | size of the classification table, at least 256}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc is}}
{{dsc inc | cpp/locale/ctype/dsc scan_is}}
{{dsc inc | cpp/locale/ctype/dsc scan_not}}
{{dsc inc | cpp/locale/ctype/dsc toupper}}
{{dsc inc | cpp/locale/ctype/dsc tolower}}
{{dsc inc | cpp/locale/ctype/dsc widen}}
{{dsc inc | cpp/locale/ctype/dsc narrow}}
{{dsc h2 | if {{c|CharT}} is {{c|char}}, the following members of {{lc|std::ctype&lt;char&gt;}} are inherited }}
{{dsc inc | cpp/locale/ctype_char/dsc table}}
{{dsc inc | cpp/locale/ctype_char/dsc classic_table}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_toupper}}
{{dsc inc | cpp/locale/ctype/dsc do_tolower}}
{{dsc inc | cpp/locale/ctype/dsc do_widen}}
{{dsc inc | cpp/locale/ctype/dsc do_narrow}}
{{dsc h2 | if {{c|CharT}} is {{c|char}}, the following members of {{lc|std::ctype}} are NOT inherited }}
{{dsc inc | cpp/locale/ctype/dsc do_is}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_is}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_not}}
{{dsc end}}
}}</text>
      <sha1>1s00rey8pe57y0r7fopnp8q33klp8uw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/navbar</title>
    <ns>10</ns>
    <id>3611</id>
    <revision>
      <id>39946</id>
      <parentid>35745</parentid>
      <timestamp>2012-09-28T20:11:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="241">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/ctype/navbar heading
|content3 = cpp/locale/ctype/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/navbar content</title>
    <ns>10</ns>
    <id>3613</id>
    <revision>
      <id>63666</id>
      <parentid>53359</parentid>
      <timestamp>2013-07-17T02:21:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>ctype&lt;char&gt; member functions</comment>
      <text xml:space="preserve" bytes="1009">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/ctype/ctype}}
{{nv mem ln | cpp/locale/ctype/~ctype}}
{{nv mem ln | cpp/locale/ctype/is|is|do_is}}
{{nv mem ln | cpp/locale/ctype/scan_is|scan_is|do_scan_is}}
{{nv mem ln | cpp/locale/ctype/scan_not|scan_not|do_scan_not}}
{{nv mem ln | cpp/locale/ctype/toupper|toupper|do_toupper}}
{{nv mem ln | cpp/locale/ctype/tolower|tolower|do_tolower}}
{{nv mem ln | cpp/locale/ctype/widen|widen|do_widen}}
{{nv mem ln | cpp/locale/ctype/narrow|narrow|do_narrow}}
{{nv h2 | Member functions of ctype&lt;char&gt;}}
{{nv ln | cpp/locale/ctype_char/ctype|ctype&lt;char&gt;::ctype}}
{{nv ln | cpp/locale/ctype_char/~ctype|ctype&lt;char&gt;::~ctype}}
{{nv ln | cpp/locale/ctype_char/table|ctype&lt;char&gt;::table}}
{{nv ln | cpp/locale/ctype_char/classic_table|ctype&lt;char&gt;::classic_table}}
{{nv ln | cpp/locale/ctype_char/is|ctype&lt;char&gt;::is}}
{{nv ln | cpp/locale/ctype_char/scan_is|ctype&lt;char&gt;::scan_is}}
{{nv ln | cpp/locale/ctype_char/scan_not|ctype&lt;char&gt;::scan_not}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/navbar heading</title>
    <ns>10</ns>
    <id>3612</id>
    <revision>
      <id>48042</id>
      <parentid>35747</parentid>
      <timestamp>2013-05-18T18:00:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="35">{{ltt|cpp/locale/ctype|std::ctype}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/ctype/title</title>
    <ns>10</ns>
    <id>3610</id>
    <revision>
      <id>13635</id>
      <timestamp>2011-11-10T16:50:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=ctype::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc LC categories</title>
    <ns>10</ns>
    <id>4404</id>
    <revision>
      <id>57424</id>
      <parentid>53390</parentid>
      <timestamp>2013-06-01T05:53:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list LC categories]] to [[Template:cpp/locale/dsc LC categories]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="173">{{dsc macro const | cpp/locale/LC_categories | title=LC_ALL&lt;br&gt;LC_COLLATE&lt;br&gt;LC_CTYPE&lt;br&gt;LC_MONETARY&lt;br&gt;LC_NUMERIC&lt;br&gt;LC_TIME | locale categories for {{lc|std::setlocale}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc codecvt</title>
    <ns>10</ns>
    <id>2895</id>
    <revision>
      <id>57427</id>
      <parentid>53391</parentid>
      <timestamp>2013-06-01T05:53:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list codecvt]] to [[Template:cpp/locale/dsc codecvt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc tclass | cpp/locale/codecvt | converts between character encodings, including UTF-8, UTF-16, UTF-32}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc codecvt base</title>
    <ns>10</ns>
    <id>3584</id>
    <revision>
      <id>57431</id>
      <parentid>53392</parentid>
      <timestamp>2013-06-01T05:53:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list codecvt base]] to [[Template:cpp/locale/dsc codecvt base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc class | cpp/locale/codecvt_base | defines character conversion errors }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc codecvt byname</title>
    <ns>10</ns>
    <id>3590</id>
    <revision>
      <id>57435</id>
      <parentid>53393</parentid>
      <timestamp>2013-06-01T05:53:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list codecvt byname]] to [[Template:cpp/locale/dsc codecvt byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc tclass | cpp/locale/codecvt_byname | represents the system-supplied {{lc|std::codecvt}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc codecvt mode</title>
    <ns>10</ns>
    <id>2896</id>
    <revision>
      <id>90609</id>
      <parentid>57438</parentid>
      <timestamp>2017-03-06T16:42:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="148">{{dsc enum | cpp/locale/codecvt_mode | tags to alter behavior of the standard codecvt facets| notes={{mark c++11}}&lt;br&gt;{{mark|deprecated in C++17}}}}</text>
      <sha1>pdg8nncm6c3wp3cec6wo4ilekjcmaai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc codecvt utf16</title>
    <ns>10</ns>
    <id>2898</id>
    <revision>
      <id>90610</id>
      <parentid>57442</parentid>
      <timestamp>2017-03-06T16:42:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="136">{{dsc tclass | cpp/locale/codecvt_utf16 | converts between UTF-16 and UCS2/UCS4 | notes={{mark c++11}}&lt;br&gt;{{mark|deprecated in C++17}}}}</text>
      <sha1>cp9d5patn62334nhgevtzym6hz5eofm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc codecvt utf8</title>
    <ns>10</ns>
    <id>2899</id>
    <revision>
      <id>90611</id>
      <parentid>57446</parentid>
      <timestamp>2017-03-06T16:42:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="134">{{dsc tclass | cpp/locale/codecvt_utf8 | converts between UTF-8 and UCS2/UCS4 | notes={{mark c++11}}&lt;br&gt;{{mark|deprecated in C++17}}}}</text>
      <sha1>dy9ucirifnsziqquopipd1wbu0mgvtn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc codecvt utf8 utf16</title>
    <ns>10</ns>
    <id>2897</id>
    <revision>
      <id>90612</id>
      <parentid>57449</parentid>
      <timestamp>2017-03-06T16:42:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="137">{{dsc tclass | cpp/locale/codecvt_utf8_utf16 | converts between UTF-8 and UTF-16 | notes={{mark c++11}}&lt;br&gt;{{mark|deprecated in C++17}}}}</text>
      <sha1>t35sco6090353y04ph4zu46eej5ugz2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc collate</title>
    <ns>10</ns>
    <id>2893</id>
    <revision>
      <id>57452</id>
      <parentid>53398</parentid>
      <timestamp>2013-06-01T05:53:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list collate]] to [[Template:cpp/locale/dsc collate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc tclass | cpp/locale/collate | defines lexicographical comparison and hashing of strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc collate byname</title>
    <ns>10</ns>
    <id>3592</id>
    <revision>
      <id>57457</id>
      <parentid>53399</parentid>
      <timestamp>2013-06-01T05:53:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list collate byname]] to [[Template:cpp/locale/dsc collate byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc tclass | cpp/locale/collate_byname | represents the system-supplied {{lc|std::collate}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc ctype</title>
    <ns>10</ns>
    <id>3570</id>
    <revision>
      <id>57461</id>
      <parentid>53400</parentid>
      <timestamp>2013-06-01T05:53:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list ctype]] to [[Template:cpp/locale/dsc ctype]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc tclass | cpp/locale/ctype | defines character classification tables }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc ctype base</title>
    <ns>10</ns>
    <id>3583</id>
    <revision>
      <id>57465</id>
      <parentid>53401</parentid>
      <timestamp>2013-06-01T05:54:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list ctype base]] to [[Template:cpp/locale/dsc ctype base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc class | cpp/locale/ctype_base | defines character classification categories }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc ctype byname</title>
    <ns>10</ns>
    <id>3588</id>
    <revision>
      <id>57468</id>
      <parentid>53402</parentid>
      <timestamp>2013-06-01T05:54:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list ctype byname]] to [[Template:cpp/locale/dsc ctype byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc tclass | cpp/locale/ctype_byname | represents the system-supplied {{lc|std::ctype}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc ctype byname char</title>
    <ns>10</ns>
    <id>3589</id>
    <revision>
      <id>57472</id>
      <parentid>53403</parentid>
      <timestamp>2013-06-01T05:54:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list ctype byname char]] to [[Template:cpp/locale/dsc ctype byname char]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="166">{{dsc ptclass | cpp/locale/ctype_byname_char | title=ctype_byname{{dsc small|&lt;char&gt;}} | represents the system-supplied {{c|std::ctype&lt;char&gt;}} for the named locale  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc ctype char</title>
    <ns>10</ns>
    <id>3571</id>
    <revision>
      <id>57476</id>
      <parentid>53404</parentid>
      <timestamp>2013-06-01T05:54:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list ctype char]] to [[Template:cpp/locale/dsc ctype char]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc ptclass | cpp/locale/ctype_char | title=ctype{{dsc small|&lt;char&gt;}} | specialization of {{lc|std::ctype}} for type {{c|char}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc has facet</title>
    <ns>10</ns>
    <id>2802</id>
    <revision>
      <id>57479</id>
      <parentid>53405</parentid>
      <timestamp>2013-06-01T05:54:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list has facet]] to [[Template:cpp/locale/dsc has facet]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc tfun | cpp/locale/has_facet | checks if a locale implements a specific facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isalnum</title>
    <ns>10</ns>
    <id>2798</id>
    <revision>
      <id>57483</id>
      <parentid>53406</parentid>
      <timestamp>2013-06-01T05:54:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isalnum]] to [[Template:cpp/locale/dsc isalnum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc tfun | cpp/locale/isalnum | title=isalnum{{dsc small|(std::locale)}} | checks if a character is classified as alphanumeric by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isalpha</title>
    <ns>10</ns>
    <id>2794</id>
    <revision>
      <id>57486</id>
      <parentid>53407</parentid>
      <timestamp>2013-06-01T05:54:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isalpha]] to [[Template:cpp/locale/dsc isalpha]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/locale/isalpha | title=isalpha{{dsc small|(std::locale)}} | checks if a character is classified as alphabetic by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isblank</title>
    <ns>10</ns>
    <id>2928</id>
    <revision>
      <id>57490</id>
      <parentid>53408</parentid>
      <timestamp>2013-06-01T05:54:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isblank]] to [[Template:cpp/locale/dsc isblank]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc tfun | cpp/locale/isblank | title=isblank{{dsc small|(std::locale)}} | checks if a character is classified as a blank character by a locale | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc iscntrl</title>
    <ns>10</ns>
    <id>2791</id>
    <revision>
      <id>57493</id>
      <parentid>53409</parentid>
      <timestamp>2013-06-01T05:54:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list iscntrl]] to [[Template:cpp/locale/dsc iscntrl]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc tfun | cpp/locale/iscntrl | title=iscntrl{{dsc small|(std::locale)}} | checks if a character is classified as a control character by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isdigit</title>
    <ns>10</ns>
    <id>2795</id>
    <revision>
      <id>57496</id>
      <parentid>53410</parentid>
      <timestamp>2013-06-01T05:54:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isdigit]] to [[Template:cpp/locale/dsc isdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc tfun | cpp/locale/isdigit | title=isdigit{{dsc small|(std::locale)}} | checks if a character is classified as a digit by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isgraph</title>
    <ns>10</ns>
    <id>2800</id>
    <revision>
      <id>57500</id>
      <parentid>53411</parentid>
      <timestamp>2013-06-01T05:54:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isgraph]] to [[Template:cpp/locale/dsc isgraph]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc tfun | cpp/locale/isgraph | title=isgraph{{dsc small|(std::locale)}} | checks if a character is classfied as graphical by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc islower</title>
    <ns>10</ns>
    <id>2793</id>
    <revision>
      <id>57503</id>
      <parentid>53412</parentid>
      <timestamp>2013-06-01T05:54:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list islower]] to [[Template:cpp/locale/dsc islower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc tfun | cpp/locale/islower | title=islower{{dsc small|(std::locale)}} | checks if a character is classified as lowercase by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isprint</title>
    <ns>10</ns>
    <id>2799</id>
    <revision>
      <id>57506</id>
      <parentid>53413</parentid>
      <timestamp>2013-06-01T05:54:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isprint]] to [[Template:cpp/locale/dsc isprint]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc tfun | cpp/locale/isprint | title=isprint{{dsc small|(std::locale)}} | checks if a character is classified as printable by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc ispunct</title>
    <ns>10</ns>
    <id>2796</id>
    <revision>
      <id>57509</id>
      <parentid>53414</parentid>
      <timestamp>2013-06-01T05:54:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list ispunct]] to [[Template:cpp/locale/dsc ispunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc tfun | cpp/locale/ispunct | title=ispunct{{dsc small|(std::locale)}} | checks if a character is classified as punctuation by a locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isspace</title>
    <ns>10</ns>
    <id>2775</id>
    <revision>
      <id>57513</id>
      <parentid>53415</parentid>
      <timestamp>2013-06-01T05:54:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isspace]] to [[Template:cpp/locale/dsc isspace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/locale/isspace | title=isspace{{dsc small|(std::locale)}} | checks if a character is classified as whitespace by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isupper</title>
    <ns>10</ns>
    <id>2792</id>
    <revision>
      <id>57519</id>
      <parentid>53416</parentid>
      <timestamp>2013-06-01T05:54:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isupper]] to [[Template:cpp/locale/dsc isupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc tfun | cpp/locale/isupper | title=isupper{{dsc small|(std::locale)}} | checks if a character is classified as uppercase by a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc isxdigit</title>
    <ns>10</ns>
    <id>2797</id>
    <revision>
      <id>57521</id>
      <parentid>53417</parentid>
      <timestamp>2013-06-01T05:54:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list isxdigit]] to [[Template:cpp/locale/dsc isxdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc tfun | cpp/locale/isxdigit | title=isxdigit{{dsc small|(std::locale)}} | checks if a character is classified as a hexadecimal digit by a locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc lconv</title>
    <ns>10</ns>
    <id>3604</id>
    <revision>
      <id>57525</id>
      <parentid>53418</parentid>
      <timestamp>2013-06-01T05:55:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list lconv]] to [[Template:cpp/locale/dsc lconv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc class | cpp/locale/lconv | formatting details, returned by {{lc|std::localeconv}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc locale</title>
    <ns>10</ns>
    <id>2801</id>
    <revision>
      <id>57528</id>
      <parentid>53419</parentid>
      <timestamp>2013-06-01T05:55:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list locale]] to [[Template:cpp/locale/dsc locale]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc class | cpp/locale/locale | set of polymorphic facets that encapsulate cultural differences}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc localeconv</title>
    <ns>10</ns>
    <id>3603</id>
    <revision>
      <id>57531</id>
      <parentid>53420</parentid>
      <timestamp>2013-06-01T05:55:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list localeconv]] to [[Template:cpp/locale/dsc localeconv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | cpp/locale/localeconv | queries numeric and monetary formatting details of the current locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc messages</title>
    <ns>10</ns>
    <id>3572</id>
    <revision>
      <id>57535</id>
      <parentid>53421</parentid>
      <timestamp>2013-06-01T05:55:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list messages]] to [[Template:cpp/locale/dsc messages]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc tclass | cpp/locale/messages | implements retrieval of strings from message catalogs}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc messages base</title>
    <ns>10</ns>
    <id>3585</id>
    <revision>
      <id>57538</id>
      <parentid>53422</parentid>
      <timestamp>2013-06-01T05:55:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list messages base]] to [[Template:cpp/locale/dsc messages base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc class | cpp/locale/messages_base | defines messages catalog type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc messages byname</title>
    <ns>10</ns>
    <id>3591</id>
    <revision>
      <id>57542</id>
      <parentid>53423</parentid>
      <timestamp>2013-06-01T05:55:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list messages byname]] to [[Template:cpp/locale/dsc messages byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc tclass | cpp/locale/messages_byname | represents the system-supplied {{lc|std::messages}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc money base</title>
    <ns>10</ns>
    <id>3587</id>
    <revision>
      <id>57546</id>
      <parentid>53424</parentid>
      <timestamp>2013-06-01T05:55:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list money base]] to [[Template:cpp/locale/dsc money base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc class | cpp/locale/money_base | defines monetary formatting patterns }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc money get</title>
    <ns>10</ns>
    <id>3578</id>
    <revision>
      <id>57549</id>
      <parentid>53425</parentid>
      <timestamp>2013-06-01T05:55:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list money get]] to [[Template:cpp/locale/dsc money get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc tclass | cpp/locale/money_get | parses and constructs a monetary value from an input character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc money put</title>
    <ns>10</ns>
    <id>3579</id>
    <revision>
      <id>57553</id>
      <parentid>53426</parentid>
      <timestamp>2013-06-01T05:55:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list money put]] to [[Template:cpp/locale/dsc money put]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc tclass | cpp/locale/money_put | formats a monetary value for output as a character sequence }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc moneypunct</title>
    <ns>10</ns>
    <id>3580</id>
    <revision>
      <id>57556</id>
      <parentid>53427</parentid>
      <timestamp>2013-06-01T05:55:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list moneypunct]] to [[Template:cpp/locale/dsc moneypunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc tclass | cpp/locale/moneypunct | defines monetary formatting parameters used by {{lc|std::money_get}} and {{lc|std::money_put}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc moneypunct byname</title>
    <ns>10</ns>
    <id>3596</id>
    <revision>
      <id>57560</id>
      <parentid>53428</parentid>
      <timestamp>2013-06-01T05:55:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list moneypunct byname]] to [[Template:cpp/locale/dsc moneypunct byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tclass | cpp/locale/moneypunct_byname | represents the system-supplied {{lc|std::moneypunct}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc num get</title>
    <ns>10</ns>
    <id>3575</id>
    <revision>
      <id>57565</id>
      <parentid>53429</parentid>
      <timestamp>2013-06-01T05:56:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list num get]] to [[Template:cpp/locale/dsc num get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc tclass | cpp/locale/num_get | parses numeric values from an input character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc num put</title>
    <ns>10</ns>
    <id>3576</id>
    <revision>
      <id>57569</id>
      <parentid>53430</parentid>
      <timestamp>2013-06-01T05:56:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list num put]] to [[Template:cpp/locale/dsc num put]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc tclass | cpp/locale/num_put | formats numeric values for output as character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc numpunct</title>
    <ns>10</ns>
    <id>3577</id>
    <revision>
      <id>57573</id>
      <parentid>53431</parentid>
      <timestamp>2013-06-01T05:56:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list numpunct]] to [[Template:cpp/locale/dsc numpunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc tclass | cpp/locale/numpunct | defines numeric punctuation rules }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc numpunct byname</title>
    <ns>10</ns>
    <id>3595</id>
    <revision>
      <id>57577</id>
      <parentid>53432</parentid>
      <timestamp>2013-06-01T05:56:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list numpunct byname]] to [[Template:cpp/locale/dsc numpunct byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc tclass | cpp/locale/numpunct_byname | represents the system-supplied {{lc|std::numpunct}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc setlocale</title>
    <ns>10</ns>
    <id>1588</id>
    <revision>
      <id>57581</id>
      <parentid>53433</parentid>
      <timestamp>2013-06-01T05:56:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list setlocale]] to [[Template:cpp/locale/dsc setlocale]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | cpp/locale/setlocale | gets and sets the current C locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc time base</title>
    <ns>10</ns>
    <id>3586</id>
    <revision>
      <id>57585</id>
      <parentid>53434</parentid>
      <timestamp>2013-06-01T05:56:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list time base]] to [[Template:cpp/locale/dsc time base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc class | cpp/locale/time_base | defines date format constants }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc time get</title>
    <ns>10</ns>
    <id>3573</id>
    <revision>
      <id>57589</id>
      <parentid>53435</parentid>
      <timestamp>2013-06-01T05:56:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list time get]] to [[Template:cpp/locale/dsc time get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc tclass | cpp/locale/time_get | parses time/date values from an input character sequence into {{c|struct std::tm}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc time get byname</title>
    <ns>10</ns>
    <id>3593</id>
    <revision>
      <id>57594</id>
      <parentid>53436</parentid>
      <timestamp>2013-06-01T05:56:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list time get byname]] to [[Template:cpp/locale/dsc time get byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc tclass | cpp/locale/time_get_byname | represents the system-supplied {{lc|std::time_get}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc time put</title>
    <ns>10</ns>
    <id>3574</id>
    <revision>
      <id>57597</id>
      <parentid>53437</parentid>
      <timestamp>2013-06-01T05:56:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list time put]] to [[Template:cpp/locale/dsc time put]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc tclass | cpp/locale/time_put | formats contents of {{c|struct std::tm}} for output as character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc time put byname</title>
    <ns>10</ns>
    <id>3594</id>
    <revision>
      <id>57601</id>
      <parentid>53438</parentid>
      <timestamp>2013-06-01T05:56:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list time put byname]] to [[Template:cpp/locale/dsc time put byname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc tclass | cpp/locale/time_put_byname | represents the system-supplied {{lc|std::time_put}} for the named locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc tolower</title>
    <ns>10</ns>
    <id>2805</id>
    <revision>
      <id>57606</id>
      <parentid>53439</parentid>
      <timestamp>2013-06-01T05:56:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list tolower]] to [[Template:cpp/locale/dsc tolower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="146">{{dsc tfun | cpp/locale/tolower | title=tolower{{dsc small|(std::locale)}} | converts a character to lowercase using the ctype facet of a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc toupper</title>
    <ns>10</ns>
    <id>2804</id>
    <revision>
      <id>57610</id>
      <parentid>53440</parentid>
      <timestamp>2013-06-01T05:57:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list toupper]] to [[Template:cpp/locale/dsc toupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="146">{{dsc tfun | cpp/locale/toupper | title=toupper{{dsc small|(std::locale)}} | converts a character to uppercase using the ctype facet of a locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc use facet</title>
    <ns>10</ns>
    <id>2803</id>
    <revision>
      <id>57615</id>
      <parentid>53441</parentid>
      <timestamp>2013-06-01T05:57:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/dcl list use facet]] to [[Template:cpp/locale/dsc use facet]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc tfun | cpp/locale/use_facet | obtains a facet from a locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc wbuffer convert</title>
    <ns>10</ns>
    <id>2807</id>
    <revision>
      <id>90608</id>
      <parentid>57619</parentid>
      <timestamp>2017-03-06T16:42:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="174">{{dsc tclass | cpp/locale/wbuffer_convert | performs conversion between a byte stream buffer and a wide stream buffer | notes={{mark c++11}}&lt;br&gt;{{mark|deprecated in C++17}}}}</text>
      <sha1>nxnngm8zob9lqxz7y3xc4drc1mv6gdq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/dsc wstring convert</title>
    <ns>10</ns>
    <id>2806</id>
    <revision>
      <id>90607</id>
      <parentid>57623</parentid>
      <timestamp>2017-03-06T16:42:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0618r0 deprecated codecvt (apparently only to keep a reference to the dead UCS-2 in the standard?)</comment>
      <text xml:space="preserve" bytes="162">{{dsc tclass | cpp/locale/wstring_convert | performs conversions between a wide string and a byte string | notes={{mark c++11}}&lt;br&gt;{{mark|deprecated in C++17}} }}</text>
      <sha1>ah2885oh2xnxiro2pgg2r95d837dxbb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/example1</title>
    <ns>10</ns>
    <id>5145</id>
    <revision>
      <id>23454</id>
      <parentid>18595</parentid>
      <timestamp>2012-04-20T02:25:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{example cpp&quot; to &quot;{{example&quot;</comment>
      <text xml:space="preserve" bytes="333">{{example
 | 
 | code=
#include &lt;clocale&gt;
#include &lt;iostream&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;ja_JP.UTF-8&quot;);
    std::lconv* lc = std::localeconv();
    std::cout &lt;&lt; &quot;Japanese currency symbol: &quot; &lt;&lt; lc-&gt;currency_symbol
              &lt;&lt; '(' &lt;&lt; lc-&gt;int_curr_symbol &lt;&lt; &quot;)\n&quot;;
}
 | output=
Japanese currency symbol: ￥(JPY )
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/facet/constructor</title>
    <ns>10</ns>
    <id>4382</id>
    <revision>
      <id>53444</id>
      <parentid>47784</parentid>
      <timestamp>2013-06-01T05:02:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="445">{{cpp/locale/{{{1|}}}/title | {{{1}}}}}
{{cpp/locale/{{{1|}}}/navbar}}

{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
explicit {{{1}}}( std::size_t refs = 0 );
}}
{{dcl end}}

Creates a {{c|std::{{{1}}}}} facet and forwards the starting reference count {{tt|refs}} to the base class constructor, {{ltt|cpp/locale/locale/facet/facet|locale::facet::facet()}}

===Parameters===
{{par begin}}
{{par | refs | starting reference count}}
{{par end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/facet/destructor</title>
    <ns>10</ns>
    <id>4435</id>
    <revision>
      <id>53445</id>
      <parentid>35331</parentid>
      <timestamp>2013-06-01T05:02:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="944">{{cpp/locale/{{{1|}}}/title | ~{{{1}}}}}
{{cpp/locale/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
protected: ~{{{1}}}();
}}
{{dcl end}}

Destructs a {{c|std::{{{1}}}}} facet. This destructor is protected and virtual (due to [[cpp/locale/locale/facet|base class]] destructor being virtual). An object of type {{c|std::{{{1}}}}}, like most facets, can only be destroyed when the last {{lc|std::locale}} object that implements this facet goes out of scope or if a user-defined class is derived from {{c|std::{{{1}}}}} and implements a public destructor.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
struct Destructible_{{{1}}} : public std::{{{1}}}&lt;wchar_t&gt;
{
    Destructible_{{{1}}}(std::size_t refs = 0) : {{{1}}}(refs) {}
    ~Destructible_{{{1}}}() {}; // public dtor
};
int main()
{
    Destructible_{{{1}}} dc;
    // std::{{{1}}}&lt;wchar_t&gt; c;  // compile error: protected destructor
}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/facet/title</title>
    <ns>10</ns>
    <id>2955</id>
    <revision>
      <id>11163</id>
      <timestamp>2011-09-28T21:51:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=locale::facet::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/id/title</title>
    <ns>10</ns>
    <id>2946</id>
    <revision>
      <id>11086</id>
      <timestamp>2011-09-28T05:26:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=locale::id::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc classic</title>
    <ns>10</ns>
    <id>2876</id>
    <revision>
      <id>57627</id>
      <parentid>53446</parentid>
      <timestamp>2013-06-01T05:57:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list classic]] to [[Template:cpp/locale/locale/dsc classic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem sfun | cpp/locale/locale/classic | obtains a reference to the &quot;C&quot; locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc combine</title>
    <ns>10</ns>
    <id>2887</id>
    <revision>
      <id>57631</id>
      <parentid>53447</parentid>
      <timestamp>2013-06-01T05:57:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list combine]] to [[Template:cpp/locale/locale/dsc combine]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem fun | cpp/locale/locale/combine | constructs a locale with compile-time identified facet copied from another locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc facet</title>
    <ns>10</ns>
    <id>2889</id>
    <revision>
      <id>57635</id>
      <parentid>53448</parentid>
      <timestamp>2013-06-01T05:57:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list facet]] to [[Template:cpp/locale/locale/dsc facet]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc class | cpp/locale/locale/facet | the base class for all facet categories: each facet of any category is derived from this type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc global</title>
    <ns>10</ns>
    <id>2875</id>
    <revision>
      <id>57639</id>
      <parentid>53449</parentid>
      <timestamp>2013-06-01T05:57:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list global]] to [[Template:cpp/locale/locale/dsc global]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem sfun | cpp/locale/locale/global | changes the global locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc id</title>
    <ns>10</ns>
    <id>2888</id>
    <revision>
      <id>57643</id>
      <parentid>53450</parentid>
      <timestamp>2013-06-01T05:57:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list id]] to [[Template:cpp/locale/locale/dsc id]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc class | cpp/locale/locale/id | the facet index type: each facet class must declare or inherit a public static member of this type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc locale</title>
    <ns>10</ns>
    <id>2884</id>
    <revision>
      <id>57647</id>
      <parentid>53451</parentid>
      <timestamp>2013-06-01T05:57:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list locale]] to [[Template:cpp/locale/locale/dsc locale]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem ctor | cpp/locale/locale/locale | constructs a new locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc name</title>
    <ns>10</ns>
    <id>2883</id>
    <revision>
      <id>57651</id>
      <parentid>53452</parentid>
      <timestamp>2013-06-01T05:57:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list name]] to [[Template:cpp/locale/locale/dsc name]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/locale/locale/name | returns the name of the locale or &quot;*&quot; if unnamed }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc operator cmp</title>
    <ns>10</ns>
    <id>2882</id>
    <revision>
      <id>57662</id>
      <parentid>53455</parentid>
      <timestamp>2013-06-01T05:58:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list operator cmp]] to [[Template:cpp/locale/locale/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/locale/locale/operator_cmp | title=operator==&lt;br&gt;operator!= | equality comparison between locale objects }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc operator()</title>
    <ns>10</ns>
    <id>2881</id>
    <revision>
      <id>57654</id>
      <parentid>53453</parentid>
      <timestamp>2013-06-01T05:57:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list operator()]] to [[Template:cpp/locale/locale/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/locale/locale/operator() | lexicographically compares two strings using this locale's collate facet}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc operator=</title>
    <ns>10</ns>
    <id>2886</id>
    <revision>
      <id>57659</id>
      <parentid>53454</parentid>
      <timestamp>2013-06-01T05:58:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list operator=]] to [[Template:cpp/locale/locale/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/locale/locale/operator{{=}} | replaces a locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/dsc ~locale</title>
    <ns>10</ns>
    <id>2885</id>
    <revision>
      <id>57666</id>
      <parentid>53456</parentid>
      <timestamp>2013-06-01T05:58:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/locale/dcl list ~locale]] to [[Template:cpp/locale/locale/dsc ~locale]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem dtor | cpp/locale/locale/~locale | destructs the locale and the facets whose reference count becomes zero }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/navbar</title>
    <ns>10</ns>
    <id>2878</id>
    <revision>
      <id>39947</id>
      <parentid>35748</parentid>
      <timestamp>2012-09-28T20:11:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/locale/navbar heading
|content3 = cpp/locale/locale/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/navbar content</title>
    <ns>10</ns>
    <id>2890</id>
    <revision>
      <id>53457</id>
      <parentid>35749</parentid>
      <timestamp>2013-06-01T05:02:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="612">{{nv begin}}
{{nv h2 | Member types}}
{{nv mem ln | cpp/locale/locale/id}}
{{nv mem ln | cpp/locale/locale/facet}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/locale/locale}}
{{nv mem ln | cpp/locale/locale/~locale}}
{{nv mem ln | cpp/locale/locale/operator{{=}}}}
{{nv mem ln | cpp/locale/locale/combine}}
{{nv mem ln | cpp/locale/locale/name}}
{{nv mem ln | cpp/locale/locale/operator_cmp | operator{{==}} | operator!{{=}} }}
{{nv mem ln | cpp/locale/locale/operator()}}
{{nv h2 | Static member functions}}
{{nv mem ln | cpp/locale/locale/global}}
{{nv mem ln | cpp/locale/locale/classic}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/navbar heading</title>
    <ns>10</ns>
    <id>2879</id>
    <revision>
      <id>48030</id>
      <parentid>35691</parentid>
      <timestamp>2013-05-18T17:58:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="37">{{ltt|cpp/locale/locale|std::locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/locale/title</title>
    <ns>10</ns>
    <id>2877</id>
    <revision>
      <id>18061</id>
      <parentid>10845</parentid>
      <timestamp>2012-01-20T14:56:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/title]] to [[Template:cpp/locale/locale/title]]: correct title</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=locale::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/dsc close</title>
    <ns>10</ns>
    <id>9487</id>
    <revision>
      <id>57670</id>
      <parentid>53458</parentid>
      <timestamp>2013-06-01T05:58:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/messages/dcl list close]] to [[Template:cpp/locale/messages/dsc close]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/locale/messages/close | invokes {{tt|do_close}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/dsc do close</title>
    <ns>10</ns>
    <id>9490</id>
    <revision>
      <id>57674</id>
      <parentid>53459</parentid>
      <timestamp>2013-06-01T05:58:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/messages/dcl list do close]] to [[Template:cpp/locale/messages/dsc do close]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc prot mem vfun | cpp/locale/messages/close | title=do_close | closes a message catalog}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/dsc do get</title>
    <ns>10</ns>
    <id>9489</id>
    <revision>
      <id>57678</id>
      <parentid>53460</parentid>
      <timestamp>2013-06-01T05:58:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/messages/dcl list do get]] to [[Template:cpp/locale/messages/dsc do get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc prot mem vfun | cpp/locale/messages/get | title=do_get | retrieves a message from an open message catalog}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/dsc do open</title>
    <ns>10</ns>
    <id>9488</id>
    <revision>
      <id>57682</id>
      <parentid>53461</parentid>
      <timestamp>2013-06-01T05:58:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/messages/dcl list do open]] to [[Template:cpp/locale/messages/dsc do open]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc prot mem vfun | cpp/locale/messages/open | title=do_open | opens a named message catalog }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/dsc get</title>
    <ns>10</ns>
    <id>9486</id>
    <revision>
      <id>57686</id>
      <parentid>53462</parentid>
      <timestamp>2013-06-01T05:58:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/messages/dcl list get]] to [[Template:cpp/locale/messages/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/locale/messages/get | invokes {{tt|do_get}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/dsc open</title>
    <ns>10</ns>
    <id>9485</id>
    <revision>
      <id>57690</id>
      <parentid>53463</parentid>
      <timestamp>2013-06-01T05:58:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/messages/dcl list open]] to [[Template:cpp/locale/messages/dsc open]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc mem fun | cpp/locale/messages/open | invokes {{tt|do_open}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/example</title>
    <ns>10</ns>
    <id>9863</id>
    <revision>
      <id>46316</id>
      <timestamp>2013-02-26T04:04:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>can't think of meaningfullly different examples for close, open, and get.. will templatize this one.</comment>
      <text xml:space="preserve" bytes="850">{{example
 | The following example demonstrated retrieval of messages: on a typical GNU/Linux system it reads from {{tt|/usr/share/locale/de/LC_MESSAGES/sed.mo}}
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    std::locale loc(&quot;de_DE.utf8&quot;);
    std::cout.imbue(loc);
    auto&amp; facet = std::use_facet&lt;std::messages&lt;char&gt;&gt;(loc);
    auto cat = facet.open(&quot;sed&quot;, loc);
    if(cat &lt; 0 )
        std::cout &lt;&lt; &quot;Could not open german \&quot;sed\&quot; message catalog\n&quot;;
    else
        std::cout &lt;&lt; &quot;\&quot;No match\&quot; in German: &quot;
                  &lt;&lt; facet.get(cat, 0, 0, &quot;No match&quot;) &lt;&lt; '\n'
                  &lt;&lt; &quot;\&quot;Memory exhausted\&quot; in German: &quot;
                  &lt;&lt; facet.get(cat, 0, 0, &quot;Memory exhausted&quot;) &lt;&lt; '\n';
    facet.close(cat);
}
 | output=
&quot;No match&quot; in German: Keine Übereinstimmung
&quot;Memory exhausted&quot; in German: Speicher erschöpft
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/inherit</title>
    <ns>10</ns>
    <id>9247</id>
    <revision>
      <id>60898</id>
      <parentid>53464</parentid>
      <timestamp>2013-06-01T12:00:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="782">{{ inherited | [[cpp/locale/messages | {{small|std::}}messages]] |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|charT}}}}
{{dsc | {{tt|string_type}} | {{tt|std::basic_string&lt;charT&gt;}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc | {{tt|id}} {{mark|static}} | {{lc|std::locale::id}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/messages/dsc open}}
{{dsc inc | cpp/locale/messages/dsc get}}
{{dsc inc | cpp/locale/messages/dsc close}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/messages/dsc do_open}}
{{dsc inc | cpp/locale/messages/dsc do_get}}
{{dsc inc | cpp/locale/messages/dsc do_close}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/navbar</title>
    <ns>10</ns>
    <id>4393</id>
    <revision>
      <id>39948</id>
      <parentid>35750</parentid>
      <timestamp>2012-09-28T20:11:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/messages/navbar heading
|content3 = cpp/locale/messages/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/navbar content</title>
    <ns>10</ns>
    <id>4395</id>
    <revision>
      <id>53465</id>
      <parentid>41224</parentid>
      <timestamp>2013-06-01T05:02:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="305">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/messages/messages}}
{{nv mem ln | cpp/locale/messages/~messages}}
{{nv mem ln | cpp/locale/messages/open|open|do_open}}
{{nv mem ln | cpp/locale/messages/get|get|do_get}}
{{nv mem ln | cpp/locale/messages/close|close|do_close}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/navbar heading</title>
    <ns>10</ns>
    <id>4394</id>
    <revision>
      <id>48074</id>
      <parentid>35751</parentid>
      <timestamp>2013-05-18T18:05:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="41">{{ltt|cpp/locale/messages|std::messages}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/messages/title</title>
    <ns>10</ns>
    <id>4397</id>
    <revision>
      <id>15751</id>
      <timestamp>2011-12-15T16:48:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=messages::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money base/inherit</title>
    <ns>10</ns>
    <id>12764</id>
    <revision>
      <id>80099</id>
      <parentid>61624</parentid>
      <timestamp>2015-07-29T13:26:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>...a link is a good idea though.</comment>
      <text xml:space="preserve" bytes="905">{{inherited | [[cpp/locale/money_base|{{small|std::}}money_base]] |
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|enum part { none, space, symbol, sign, value };}} | unscoped enumeration type}}
{{dsc | {{c|struct pattern { char field[4]; };}} | the monetary format type}}
{{dsc end}}

{{dsc begin}}
{{dsc hitem | Enumeration constant | Definition}}
{{dsc | {{tt|none}}     | whitespace is permitted but not required except in the last position, where whitespace is not permitted}}
{{dsc | {{tt|space}}    | one or more whitespace characters are required}}
{{dsc | {{tt|symbol}}   | the sequence of characters returned by moneypunct::curr_symbol is required}}
{{dsc | {{tt|sign}}     | the first of the characters returned by moneypunct::positive_sign or moneypunct::negative_sign is required}}
{{dsc | {{tt|value}}    | the absolute numeric monetary value is required}}
{{dsc end}}
}}</text>
      <sha1>3rjil84d0gaf2kx7ojxcd4zp9avb078</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money get/dsc do get</title>
    <ns>10</ns>
    <id>12895</id>
    <revision>
      <id>64430</id>
      <timestamp>2013-08-16T19:32:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc prot mem vfun | cpp/locale/money_get/get | title=do_get | parses a monetary value from an input stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money get/navbar</title>
    <ns>10</ns>
    <id>4424</id>
    <revision>
      <id>39949</id>
      <parentid>35920</parentid>
      <timestamp>2012-09-28T20:11:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/money_get/navbar heading
|content3 = cpp/locale/money_get/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money get/navbar content</title>
    <ns>10</ns>
    <id>4426</id>
    <revision>
      <id>53466</id>
      <parentid>41225</parentid>
      <timestamp>2013-06-01T05:02:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="199">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/money_get/money_get}}
{{nv mem ln | cpp/locale/money_get/~money_get}}
{{nv mem ln | cpp/locale/money_get/get|get|do_get}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money get/navbar heading</title>
    <ns>10</ns>
    <id>4425</id>
    <revision>
      <id>48077</id>
      <parentid>35754</parentid>
      <timestamp>2013-05-18T18:05:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="43">{{ltt|cpp/locale/money_get|std::money_get}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money get/title</title>
    <ns>10</ns>
    <id>4428</id>
    <revision>
      <id>30673</id>
      <parentid>15797</parentid>
      <timestamp>2012-05-07T22:26:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/money get/title]] to [[Template:cpp/locale/money get/title]]: fix the path</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=money_get::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money put/dsc do put</title>
    <ns>10</ns>
    <id>12896</id>
    <revision>
      <id>64433</id>
      <timestamp>2013-08-16T19:33:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc prot mem vfun | cpp/locale/money_put/put | title=do_put | formats a monetary value and writes to output stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money put/navbar</title>
    <ns>10</ns>
    <id>4429</id>
    <revision>
      <id>39950</id>
      <parentid>35755</parentid>
      <timestamp>2012-09-28T20:11:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="248">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/money_put/navbar heading
|content3 = cpp/locale/money_put/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money put/navbar content</title>
    <ns>10</ns>
    <id>4431</id>
    <revision>
      <id>61482</id>
      <parentid>61481</parentid>
      <timestamp>2013-06-06T02:44:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="199">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/money_put/money_put}}
{{nv mem ln | cpp/locale/money_put/~money_put}}
{{nv mem ln | cpp/locale/money_put/put|put|do_put}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money put/navbar heading</title>
    <ns>10</ns>
    <id>4430</id>
    <revision>
      <id>48078</id>
      <parentid>35297</parentid>
      <timestamp>2013-05-18T18:06:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <text xml:space="preserve" bytes="43">{{ltt|cpp/locale/money_put|std::money_put}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/money put/title</title>
    <ns>10</ns>
    <id>4433</id>
    <revision>
      <id>30672</id>
      <parentid>15803</parentid>
      <timestamp>2012-05-07T22:26:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/money put/title]] to [[Template:cpp/locale/money put/title]]: fix the path</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=money_put::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc constructor</title>
    <ns>10</ns>
    <id>12684</id>
    <revision>
      <id>61485</id>
      <timestamp>2013-06-06T02:48:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem ctor      | cpp/locale/moneypunct/moneypunct  | constructs a new moneypunct facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc curr symbol</title>
    <ns>10</ns>
    <id>12689</id>
    <revision>
      <id>61490</id>
      <timestamp>2013-06-06T02:49:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/locale/moneypunct/curr_symbol | invokes {{tt|do_curr_symbol}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc decimal point</title>
    <ns>10</ns>
    <id>12686</id>
    <revision>
      <id>61487</id>
      <timestamp>2013-06-06T02:48:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/locale/moneypunct/decimal_point | invokes {{tt|do_decimal_point}}  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc destructor</title>
    <ns>10</ns>
    <id>12685</id>
    <revision>
      <id>61486</id>
      <timestamp>2013-06-06T02:48:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="89">{{dsc prot mem dtor | cpp/locale/moneypunct/~moneypunct | destructs a moneypunct facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do curr symbol</title>
    <ns>10</ns>
    <id>12697</id>
    <revision>
      <id>61498</id>
      <timestamp>2013-06-06T02:50:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="138">{{dsc prot mem vfun | cpp/locale/moneypunct/curr_symbol | title=do_curr_symbol   | provides the string to use as the currency identifier}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do decimal point</title>
    <ns>10</ns>
    <id>12695</id>
    <revision>
      <id>61496</id>
      <timestamp>2013-06-06T02:49:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{dsc prot mem vfun | cpp/locale/moneypunct/decimal_point | title=do_decimal_point | provides the character to use as decimal point}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do frac digits</title>
    <ns>10</ns>
    <id>12700</id>
    <revision>
      <id>61501</id>
      <timestamp>2013-06-06T02:50:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="149">{{dsc prot mem vfun | cpp/locale/moneypunct/frac_digits | title=do_frac_digits   | provides the number of digits to display after the decimal point}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do grouping</title>
    <ns>10</ns>
    <id>12696</id>
    <revision>
      <id>61497</id>
      <timestamp>2013-06-06T02:49:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{dsc prot mem vfun | cpp/locale/moneypunct/grouping | title=do_grouping      | provides the numbers of digits between each pair of thousands separators}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do neg format</title>
    <ns>10</ns>
    <id>12702</id>
    <revision>
      <id>61503</id>
      <timestamp>2013-06-06T02:50:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc prot mem vfun | cpp/locale/moneypunct/neg_format | title=do_neg_format    | provides the formatting pattern for negative values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do negative sign</title>
    <ns>10</ns>
    <id>12699</id>
    <revision>
      <id>61500</id>
      <timestamp>2013-06-06T02:50:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc prot mem vfun | cpp/locale/moneypunct/negative_sign | title=do_negative_sign | provides the string to indicate a negative value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do pos format</title>
    <ns>10</ns>
    <id>12701</id>
    <revision>
      <id>64096</id>
      <parentid>61502</parentid>
      <timestamp>2013-08-08T23:49:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>combining pos and neg formats</comment>
      <text xml:space="preserve" bytes="152">{{dsc prot mem vfun | cpp/locale/moneypunct/pos_format | title=do_pos_format&lt;br&gt;do_neg_format    | provides the formatting pattern for currency values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do positive sign</title>
    <ns>10</ns>
    <id>12698</id>
    <revision>
      <id>64427</id>
      <parentid>61499</parentid>
      <timestamp>2013-08-16T19:28:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>merge with engative</comment>
      <text xml:space="preserve" bytes="167">{{dsc prot mem vfun | cpp/locale/moneypunct/positive_sign | title=do_positive_sign&lt;br&gt;do_negative_sign | provides the string to indicate a positive or negative value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc do thousands sep</title>
    <ns>10</ns>
    <id>12703</id>
    <revision>
      <id>61504</id>
      <timestamp>2013-06-06T02:50:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="139">{{dsc prot mem vfun | cpp/locale/moneypunct/thousands_sep | title=do_thousands_sep | provides the character to use as thousands separator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc frac digits</title>
    <ns>10</ns>
    <id>12692</id>
    <revision>
      <id>61493</id>
      <timestamp>2013-06-06T02:49:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/locale/moneypunct/frac_digits | invokes {{tt|do_frac_digits}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc grouping</title>
    <ns>10</ns>
    <id>12688</id>
    <revision>
      <id>61489</id>
      <timestamp>2013-06-06T02:49:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/locale/moneypunct/grouping | invokes {{tt|do_grouping}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc neg format</title>
    <ns>10</ns>
    <id>12694</id>
    <revision>
      <id>61495</id>
      <timestamp>2013-06-06T02:49:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/locale/moneypunct/neg_format | invokes {{tt|do_neg_format}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc negative sign</title>
    <ns>10</ns>
    <id>12691</id>
    <revision>
      <id>61492</id>
      <timestamp>2013-06-06T02:49:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/locale/moneypunct/negative_sign | invokes {{tt|do_negative_sign}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc pos format</title>
    <ns>10</ns>
    <id>12693</id>
    <revision>
      <id>64097</id>
      <parentid>61494</parentid>
      <timestamp>2013-08-08T23:50:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>combining pos and neg formats</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem fun | cpp/locale/moneypunct/pos_format | title=pos_format&lt;br&gt;neg_format | invokes {{tt|do_pos_format}}/{{tt|do_neg_format}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc positive sign</title>
    <ns>10</ns>
    <id>12690</id>
    <revision>
      <id>64428</id>
      <parentid>61491</parentid>
      <timestamp>2013-08-16T19:29:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>merge with negative</comment>
      <text xml:space="preserve" bytes="154">{{dsc mem fun | cpp/locale/moneypunct/positive_sign | title=positive_sign&lt;br&gt;negative_sign | invokes {{tt|do_positive_sign}} or {{tt|do_negative_sign}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/dsc thousands sep</title>
    <ns>10</ns>
    <id>12687</id>
    <revision>
      <id>61488</id>
      <timestamp>2013-06-06T02:49:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/locale/moneypunct/thousands_sep | invokes {{tt|do_thousands_sep}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/example1</title>
    <ns>10</ns>
    <id>12875</id>
    <revision>
      <id>64100</id>
      <parentid>64066</parentid>
      <timestamp>2013-08-09T00:04:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-redundant parens</comment>
      <text xml:space="preserve" bytes="822">{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;iterator&gt;
struct space_out : std::moneypunct&lt;char&gt; {
    pattern do_pos_format()      const { return { {value, none, none, none} };}
    int do_frac_digits()         const { return 0; }
    char_type do_thousands_sep() const { return ' ';}
    string_type do_grouping()    const { return &quot;\002&quot;;}
};
int main()
{
    std::cout.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    std::cout &lt;&lt; &quot;american locale: &quot; &lt;&lt; std::showbase
              &lt;&lt; std::put_money(12345678.0)&lt;&lt; '\n';

    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
    std::cout &lt;&lt; &quot;locale with modified moneypunct: &quot;
              &lt;&lt; std::put_money(12345678.0)&lt;&lt; '\n';
}
 | output=
american locale: $123,456.78
locale with modified moneypunct: 12 34 56 78
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/inherit</title>
    <ns>10</ns>
    <id>12765</id>
    <revision>
      <id>64594</id>
      <parentid>61627</parentid>
      <timestamp>2013-08-22T14:32:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>neg sign and neg format were merged</comment>
      <text xml:space="preserve" bytes="1443">{{ inherited | [[cpp/locale/moneypunct | {{small|std::}}moneypunct]] |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;CharT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc decimal_point}}
{{dsc inc | cpp/locale/moneypunct/dsc thousands_sep}}
{{dsc inc | cpp/locale/moneypunct/dsc grouping}}
{{dsc inc | cpp/locale/moneypunct/dsc curr_symbol}}
{{dsc inc | cpp/locale/moneypunct/dsc positive_sign}}
{{dsc inc | cpp/locale/moneypunct/dsc frac_digits}}
{{dsc inc | cpp/locale/moneypunct/dsc pos_format}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_decimal_point}}
{{dsc inc | cpp/locale/moneypunct/dsc do_thousands_sep}}
{{dsc inc | cpp/locale/moneypunct/dsc do_grouping}}
{{dsc inc | cpp/locale/moneypunct/dsc do_curr_symbol}}
{{dsc inc | cpp/locale/moneypunct/dsc do_positive_sign}}
{{dsc inc | cpp/locale/moneypunct/dsc do_frac_digits}}
{{dsc inc | cpp/locale/moneypunct/dsc do_pos_format}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc hitem | Member | Definition}}
{{dsc | {{dsc small|const bool}} {{tt|intl}} {{mark|static}} | {{tt|International}} }}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/navbar</title>
    <ns>10</ns>
    <id>3753</id>
    <revision>
      <id>39951</id>
      <parentid>35506</parentid>
      <timestamp>2012-09-28T20:11:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/moneypunct/navbar heading
|content3 = cpp/locale/moneypunct/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/navbar content</title>
    <ns>10</ns>
    <id>3755</id>
    <revision>
      <id>64426</id>
      <parentid>64424</parentid>
      <timestamp>2013-08-16T19:27:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>merged the signs too</comment>
      <text xml:space="preserve" bytes="752">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/moneypunct/moneypunct}}
{{nv mem ln | cpp/locale/moneypunct/~moneypunct}}
{{nv mem ln | cpp/locale/moneypunct/decimal_point|decimal_point|do_decimal_point}}
{{nv mem ln | cpp/locale/moneypunct/thousands_sep|thousands_sep|do_thousands_sep}}
{{nv mem ln | cpp/locale/moneypunct/grouping|grouping|do_grouping}}
{{nv mem ln | cpp/locale/moneypunct/curr_symbol|curr_symbol|do_curr_symbol}}
{{nv mem ln | cpp/locale/moneypunct/frac_digits|frac_digits|do_frac_digits}}
{{nv mem ln | cpp/locale/moneypunct/positive_sign|positive_sign|do_positive_sign|negative_sign|do_negative_sign}}
{{nv mem ln | cpp/locale/moneypunct/pos_format|pos_format|do_pos_format|neg_format|do_neg_format}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/navbar heading</title>
    <ns>10</ns>
    <id>3754</id>
    <revision>
      <id>48051</id>
      <parentid>35756</parentid>
      <timestamp>2013-05-18T18:01:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="45">{{ltt|cpp/locale/moneypunct|std::moneypunct}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/moneypunct/title</title>
    <ns>10</ns>
    <id>3752</id>
    <revision>
      <id>30671</id>
      <parentid>13979</parentid>
      <timestamp>2012-05-07T22:25:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/moneypunct/title]] to [[Template:cpp/locale/moneypunct/title]]: fix the path</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=moneypunct::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/navbar</title>
    <ns>10</ns>
    <id>1589</id>
    <revision>
      <id>39952</id>
      <parentid>35678</parentid>
      <timestamp>2012-09-28T20:11:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="152">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/navbar content</title>
    <ns>10</ns>
    <id>2776</id>
    <revision>
      <id>65364</id>
      <parentid>53469</parentid>
      <timestamp>2013-09-10T16:37:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>no ctype_byname&lt;char&gt;</comment>
      <text xml:space="preserve" bytes="2708">{{nv begin}}
{{nv h1 | Locales and facets}}
{{nv ln | cpp/locale/locale}}
{{nv col begin}}
{{nv ln | cpp/locale/use_facet}}
{{nv col next}}
{{nv ln | cpp/locale/has_facet}}
{{nv col end}}
{{nv h2 | Character classification}}
{{nv col begin}}
{{nv ln | cpp/locale/isspace}}
{{nv ln | cpp/locale/isblank | notes={{mark c++11}} }}
{{nv ln | cpp/locale/iscntrl}}
{{nv ln | cpp/locale/isupper}}
{{nv ln | cpp/locale/islower}}
{{nv ln | cpp/locale/isalpha}}
{{nv col next}}
{{nv ln | cpp/locale/isdigit}}
{{nv ln | cpp/locale/ispunct}}
{{nv ln | cpp/locale/isxdigit}}
{{nv ln | cpp/locale/isalnum}}
{{nv ln | cpp/locale/isprint}}
{{nv ln | cpp/locale/isgraph}}
{{nv col end}}

{{nv h2 | Conversions}}
{{nv col begin}}
{{nv ln | cpp/locale/toupper}}
{{nv ln | cpp/locale/tolower}}
{{nv col next}}
{{nv ln | cpp/locale/wstring_convert | notes={{mark c++11}}}}
{{nv ln | cpp/locale/wbuffer_convert | notes={{mark c++11}}}}
{{nv col end}}

{{nv h2 | Facet category base classes}}
{{nv col begin}}
{{nv ln | cpp/locale/ctype_base}}
{{nv ln | cpp/locale/codecvt_base}}
{{nv ln | cpp/locale/messages_base}}
{{nv col next}}
{{nv ln | cpp/locale/time_base}}
{{nv ln | cpp/locale/money_base}}
{{nv col end}}

{{nv h2 | Facet categories}}
{{nv col begin}}
{{nv ln | cpp/locale/ctype }}
{{nv ln | cpp/locale/ctype_char | ctype&lt;char&gt; }}
{{nv ln | cpp/locale/codecvt}}
{{nv ln | cpp/locale/collate}}
{{nv ln | cpp/locale/messages}}
{{nv ln | cpp/locale/time_get}}
{{nv ln | cpp/locale/time_put}}
{{nv col next}}
{{nv ln | cpp/locale/num_get }}
{{nv ln | cpp/locale/num_put }}
{{nv ln | cpp/locale/numpunct}}
{{nv ln | cpp/locale/money_get }}
{{nv ln | cpp/locale/money_put }}
{{nv ln | cpp/locale/moneypunct}}
{{nv col end}}

{{nv h2 | Locale-specific facets}}
{{nv col begin}}
{{nv ln | cpp/locale/ctype_byname}}
{{nv ln | cpp/locale/codecvt_byname}}
{{nv ln | cpp/locale/messages_byname}}
{{nv ln | cpp/locale/collate_byname}}
{{nv col next}}
{{nv ln | cpp/locale/time_get_byname}}
{{nv ln | cpp/locale/time_put_byname}}
{{nv ln | cpp/locale/numpunct_byname}}
{{nv ln | cpp/locale/moneypunct_byname}}
{{nv col end}}

{{nv h2 | Code conversion facets}}
{{nv col begin}}
{{nv ln | cpp/locale/codecvt_utf8 | notes={{mark c++11}}}}
{{nv ln | cpp/locale/codecvt_utf16 | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/locale/codecvt_utf8_utf16 | notes={{mark c++11}}}}
{{nv ln | cpp/locale/codecvt_mode | notes={{mark c++11}}}}
{{nv col end}}

{{nv h2 | C locale}}
{{nv col begin}}
{{nv ln | cpp/locale/setlocale}}
{{nv ln | cpp/locale/localeconv}}
{{nv ln | cpp/locale/lconv}}
{{nv col next}}
{{nv ln | cpp/locale/LC_categories | LC_ALL | LC_COLLATE | LC_CTYPE | LC_MONETARY | LC_NUMERIC | LC_TIME}}
{{nv col end}}
{{nv end}}</text>
      <sha1>do3eheimcn2kw07dlfnbov93j4ugddg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/navbar heading</title>
    <ns>10</ns>
    <id>1590</id>
    <revision>
      <id>35768</id>
      <parentid>3180</parentid>
      <timestamp>2012-06-15T22:31:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/sidebar heading]] to [[Template:cpp/locale/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="38">[[cpp/locale | Localizations library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num get/navbar</title>
    <ns>10</ns>
    <id>4045</id>
    <revision>
      <id>39953</id>
      <parentid>35757</parentid>
      <timestamp>2012-09-28T20:11:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/num_get/navbar heading
|content3 = cpp/locale/num_get/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num get/navbar content</title>
    <ns>10</ns>
    <id>4047</id>
    <revision>
      <id>53470</id>
      <parentid>47437</parentid>
      <timestamp>2013-06-01T05:02:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="189">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/num_get/num_get}}
{{nv mem ln | cpp/locale/num_get/~num_get}}
{{nv mem ln | cpp/locale/num_get/get|get|do_get}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num get/navbar heading</title>
    <ns>10</ns>
    <id>4046</id>
    <revision>
      <id>48069</id>
      <parentid>35759</parentid>
      <timestamp>2013-05-18T18:05:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="39">{{ltt|cpp/locale/num_get|std::num_get}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num get/title</title>
    <ns>10</ns>
    <id>4416</id>
    <revision>
      <id>15783</id>
      <timestamp>2011-12-15T17:13:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=num_get::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num put/navbar</title>
    <ns>10</ns>
    <id>4250</id>
    <revision>
      <id>39954</id>
      <parentid>35760</parentid>
      <timestamp>2012-09-28T20:11:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/num_put/navbar heading
|content3 = cpp/locale/num_put/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num put/navbar content</title>
    <ns>10</ns>
    <id>4252</id>
    <revision>
      <id>53471</id>
      <parentid>47415</parentid>
      <timestamp>2013-06-01T05:02:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="189">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/num_put/num_put}}
{{nv mem ln | cpp/locale/num_put/~num_put}}
{{nv mem ln | cpp/locale/num_put/put|put|do_put}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num put/navbar heading</title>
    <ns>10</ns>
    <id>4251</id>
    <revision>
      <id>48070</id>
      <parentid>35761</parentid>
      <timestamp>2013-05-18T18:05:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="39">{{ltt|cpp/locale/num_put|std::num_put}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/num put/title</title>
    <ns>10</ns>
    <id>4249</id>
    <revision>
      <id>30675</id>
      <parentid>15393</parentid>
      <timestamp>2012-05-07T22:26:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/num put/title]] to [[Template:cpp/locale/num put/title]]: fix the path</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=num_put::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc decimal point</title>
    <ns>10</ns>
    <id>4680</id>
    <revision>
      <id>57695</id>
      <parentid>53472</parentid>
      <timestamp>2013-06-01T05:59:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list decimal point]] to [[Template:cpp/locale/numpunct/dsc decimal point]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem fun | cpp/locale/numpunct/decimal_point | invokes {{tt|do_decimal_point}} | mem={{{mem|}}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc do decimal point</title>
    <ns>10</ns>
    <id>4685</id>
    <revision>
      <id>57700</id>
      <parentid>53473</parentid>
      <timestamp>2013-06-01T05:59:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list do decimal point]] to [[Template:cpp/locale/numpunct/dsc do decimal point]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc prot mem vfun | cpp/locale/numpunct/decimal_point | title=do_decimal_point | provides the character to use as decimal point  | mem={{{mem|}}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc do grouping</title>
    <ns>10</ns>
    <id>4687</id>
    <revision>
      <id>75892</id>
      <parentid>57704</parentid>
      <timestamp>2015-02-04T13:06:08Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="165">{{dsc prot mem vfun | cpp/locale/numpunct/grouping | title=do_grouping | provides the numbers of digits between each pair of thousands separators | mem={{{mem|}}} }}</text>
      <sha1>t7m2w7thpf7il83vsa7scryif82q7xn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc do thousands sep</title>
    <ns>10</ns>
    <id>4686</id>
    <revision>
      <id>57709</id>
      <parentid>53475</parentid>
      <timestamp>2013-06-01T05:59:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list do thousands sep]] to [[Template:cpp/locale/numpunct/dsc do thousands sep]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc prot mem vfun | cpp/locale/numpunct/thousands_sep | title=do_thousands_sep | provides the character to use as thousands separator | mem={{{mem|}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc do truefalsename</title>
    <ns>10</ns>
    <id>9925</id>
    <revision>
      <id>57714</id>
      <parentid>53476</parentid>
      <timestamp>2013-06-01T05:59:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list do truefalsename]] to [[Template:cpp/locale/numpunct/dsc do truefalsename]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="195">{{dsc prot mem vfun | cpp/locale/numpunct/truefalsename | title=do_truename&lt;br/&gt;do_falsename | provides the string to use as the name of the boolean {{c|true}} and {{c|false}} | mem={{{mem|}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc grouping</title>
    <ns>10</ns>
    <id>4682</id>
    <revision>
      <id>57718</id>
      <parentid>53477</parentid>
      <timestamp>2013-06-01T05:59:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list grouping]] to [[Template:cpp/locale/numpunct/dsc grouping]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/locale/numpunct/grouping | invokes {{tt|do_grouping}}  | mem={{{mem|}}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc numpunct</title>
    <ns>10</ns>
    <id>4678</id>
    <revision>
      <id>57722</id>
      <parentid>53478</parentid>
      <timestamp>2013-06-01T05:59:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list numpunct]] to [[Template:cpp/locale/numpunct/dsc numpunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem ctor | cpp/locale/numpunct/numpunct | constructs a new numpunct facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc thousands sep</title>
    <ns>10</ns>
    <id>4681</id>
    <revision>
      <id>57726</id>
      <parentid>53479</parentid>
      <timestamp>2013-06-01T05:59:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list thousands sep]] to [[Template:cpp/locale/numpunct/dsc thousands sep]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/locale/numpunct/thousands_sep | invokes {{tt|do_thousands_sep}} | mem={{{mem|}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc truefalsename</title>
    <ns>10</ns>
    <id>9924</id>
    <revision>
      <id>57731</id>
      <parentid>53480</parentid>
      <timestamp>2013-06-01T05:59:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list truefalsename]] to [[Template:cpp/locale/numpunct/dsc truefalsename]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc mem fun | title=truename&lt;br&gt;falsename | cpp/locale/numpunct/truefalsename | invokes {{tt|do_truename}} or {{tt|do_falsename}}| mem={{{mem|}}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/dsc ~numpunct</title>
    <ns>10</ns>
    <id>4679</id>
    <revision>
      <id>57735</id>
      <parentid>53481</parentid>
      <timestamp>2013-06-01T05:59:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/numpunct/dcl list ~numpunct]] to [[Template:cpp/locale/numpunct/dsc ~numpunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc prot mem dtor | cpp/locale/numpunct/~numpunct | destructs a numpunct facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/inherit</title>
    <ns>10</ns>
    <id>12766</id>
    <revision>
      <id>61632</id>
      <parentid>61631</parentid>
      <timestamp>2013-06-06T07:34:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>whitespace</comment>
      <text xml:space="preserve" bytes="929">{{inherited | [[cpp/locale/numpunct | {{small|std::}}numpunct]] |
===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|charT}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;charT&gt;}}}}
{{dsc end}}
===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/numpunct/dsc decimal_point}}
{{dsc inc | cpp/locale/numpunct/dsc thousands_sep}}
{{dsc inc | cpp/locale/numpunct/dsc grouping}}
{{dsc inc | cpp/locale/numpunct/dsc truefalsename}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/numpunct/dsc do_decimal_point}}
{{dsc inc | cpp/locale/numpunct/dsc do_thousands_sep}}
{{dsc inc | cpp/locale/numpunct/dsc do_grouping}}
{{dsc inc | cpp/locale/numpunct/dsc do_truefalsename}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/navbar</title>
    <ns>10</ns>
    <id>3748</id>
    <revision>
      <id>39955</id>
      <parentid>35762</parentid>
      <timestamp>2012-09-28T20:11:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/numpunct/navbar heading
|content3 = cpp/locale/numpunct/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/navbar content</title>
    <ns>10</ns>
    <id>3750</id>
    <revision>
      <id>53482</id>
      <parentid>47026</parentid>
      <timestamp>2013-06-01T05:02:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="465">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/numpunct/numpunct}}
{{nv mem ln | cpp/locale/numpunct/~numpunct}}
{{nv mem ln | cpp/locale/numpunct/decimal_point|decimal_point|do_decimal_point}}
{{nv mem ln | cpp/locale/numpunct/thousands_sep|thousands_sep|do_thousands_sep}}
{{nv mem ln | cpp/locale/numpunct/grouping|grouping|do_grouping}}
{{nv mem ln | cpp/locale/numpunct/truefalsename|truename|do_truename|falsename|do_falsename}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/navbar heading</title>
    <ns>10</ns>
    <id>3749</id>
    <revision>
      <id>48050</id>
      <parentid>35765</parentid>
      <timestamp>2013-05-18T18:01:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="41">{{ltt|cpp/locale/numpunct|std::numpunct}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/numpunct/title</title>
    <ns>10</ns>
    <id>3747</id>
    <revision>
      <id>47027</id>
      <parentid>30674</parentid>
      <timestamp>2013-04-23T13:24:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>support 4 arguments</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=numpunct::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}} | {{{4|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc date order</title>
    <ns>10</ns>
    <id>9495</id>
    <revision>
      <id>57739</id>
      <parentid>53483</parentid>
      <timestamp>2013-06-01T05:59:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list date order]] to [[Template:cpp/locale/time get/dsc date order]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/locale/time_get/date_order | invokes {{tt|do_date_order}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc do date order</title>
    <ns>10</ns>
    <id>9502</id>
    <revision>
      <id>57743</id>
      <parentid>53484</parentid>
      <timestamp>2013-06-01T05:59:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list do date order]] to [[Template:cpp/locale/time get/dsc do date order]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc prot mem vfun | cpp/locale/time_get/date_order | title=do_date_order| obtains preferred ordering of day, month, and year}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc do get</title>
    <ns>10</ns>
    <id>9508</id>
    <revision>
      <id>57747</id>
      <parentid>53485</parentid>
      <timestamp>2013-06-01T06:00:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list do get]] to [[Template:cpp/locale/time get/dsc do get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc prot mem vfun | cpp/locale/time_get/get | title=do_get | extracts date/time components from input stream, according to the specified format | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc do get date</title>
    <ns>10</ns>
    <id>9504</id>
    <revision>
      <id>57751</id>
      <parentid>53486</parentid>
      <timestamp>2013-06-01T06:00:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list do get date]] to [[Template:cpp/locale/time get/dsc do get date]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc prot mem vfun | cpp/locale/time_get/get_date | title=do_get_date  | extracts month, day, and year from input stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc do get monthname</title>
    <ns>10</ns>
    <id>9506</id>
    <revision>
      <id>57755</id>
      <parentid>53489</parentid>
      <timestamp>2013-06-01T06:00:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list do get monthname]] to [[Template:cpp/locale/time get/dsc do get monthname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc prot mem vfun | cpp/locale/time_get/get_monthname | title=do_get_monthname | extacts a month name from input stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc do get time</title>
    <ns>10</ns>
    <id>9503</id>
    <revision>
      <id>57759</id>
      <parentid>53492</parentid>
      <timestamp>2013-06-01T06:00:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list do get time]] to [[Template:cpp/locale/time get/dsc do get time]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc prot mem vfun | cpp/locale/time_get/get_time | title=do_get_time | extracts hours, minutes, and seconds from input stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc do get weekday</title>
    <ns>10</ns>
    <id>9505</id>
    <revision>
      <id>57763</id>
      <parentid>53495</parentid>
      <timestamp>2013-06-01T06:00:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list do get weekday]] to [[Template:cpp/locale/time get/dsc do get weekday]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc prot mem vfun | cpp/locale/time_get/get_weekday | title=do_get_weekday | extracts the name of a day of the week from input stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc do get year</title>
    <ns>10</ns>
    <id>9507</id>
    <revision>
      <id>57768</id>
      <parentid>53496</parentid>
      <timestamp>2013-06-01T06:00:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list do get year]] to [[Template:cpp/locale/time get/dsc do get year]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc prot mem vfun | cpp/locale/time_get/get_year | title=do_get_year | extracts a year from input stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc get</title>
    <ns>10</ns>
    <id>9501</id>
    <revision>
      <id>57772</id>
      <parentid>53499</parentid>
      <timestamp>2013-06-01T06:00:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list get]] to [[Template:cpp/locale/time get/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/locale/time_get/get | invokes {{tt|do_get}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc get date</title>
    <ns>10</ns>
    <id>9497</id>
    <revision>
      <id>57776</id>
      <parentid>53502</parentid>
      <timestamp>2013-06-01T06:00:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list get date]] to [[Template:cpp/locale/time get/dsc get date]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/locale/time_get/get_date | invokes {{tt|do_get_date}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc get monthname</title>
    <ns>10</ns>
    <id>9499</id>
    <revision>
      <id>57779</id>
      <parentid>53505</parentid>
      <timestamp>2013-06-01T06:00:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list get monthname]] to [[Template:cpp/locale/time get/dsc get monthname]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/locale/time_get/get_monthname | invokes {{tt|do_get_monthname}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc get time</title>
    <ns>10</ns>
    <id>9496</id>
    <revision>
      <id>57783</id>
      <parentid>53506</parentid>
      <timestamp>2013-06-01T06:00:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list get time]] to [[Template:cpp/locale/time get/dsc get time]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/locale/time_get/get_time | invokes {{tt|do_get_time}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc get weekday</title>
    <ns>10</ns>
    <id>9498</id>
    <revision>
      <id>57787</id>
      <parentid>53509</parentid>
      <timestamp>2013-06-01T06:01:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list get weekday]] to [[Template:cpp/locale/time get/dsc get weekday]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/locale/time_get/get_weekday | invokes {{tt|do_get_weekday}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/dsc get year</title>
    <ns>10</ns>
    <id>9500</id>
    <revision>
      <id>57791</id>
      <parentid>53512</parentid>
      <timestamp>2013-06-01T06:01:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time get/dcl list get year]] to [[Template:cpp/locale/time get/dsc get year]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/locale/time_get/get_year | invokes {{tt|do_get_year}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/inherit</title>
    <ns>10</ns>
    <id>9316</id>
    <revision>
      <id>60899</id>
      <parentid>53515</parentid>
      <timestamp>2013-06-01T12:00:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1418">{{ inherited | [[cpp/locale/time_get | {{small|std::}}time_get]] |
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|iter_type}} | {{tt|InputIt}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc | {{tt|id}} {{mark|static}} | {{lc|std::locale::id}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/time_get/dsc date_order}}
{{dsc inc | cpp/locale/time_get/dsc get_time}}
{{dsc inc | cpp/locale/time_get/dsc get_date}}
{{dsc inc | cpp/locale/time_get/dsc get_weekday}}
{{dsc inc | cpp/locale/time_get/dsc get_monthname}}
{{dsc inc | cpp/locale/time_get/dsc get_year}}
{{dsc inc | cpp/locale/time_get/dsc get}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/time_get/dsc do_date_order}}
{{dsc inc | cpp/locale/time_get/dsc do_get_time}}
{{dsc inc | cpp/locale/time_get/dsc do_get_date}}
{{dsc inc | cpp/locale/time_get/dsc do_get_weekday}}
{{dsc inc | cpp/locale/time_get/dsc do_get_monthname}}
{{dsc inc | cpp/locale/time_get/dsc do_get_year}}
{{dsc inc | cpp/locale/time_get/dsc do_get}}
{{dsc end}}
}}

{{ inherited | {{small|std::}}time_base |
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|dateorder}} | date order enumeration type, defining the values {{tt|no_order}}, {{tt|dmy}}, {{tt|mdy}}, {{tt|ymd}}, and {{tt|ydm}}}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/navbar</title>
    <ns>10</ns>
    <id>4398</id>
    <revision>
      <id>39956</id>
      <parentid>35769</parentid>
      <timestamp>2012-09-28T20:11:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/time_get/navbar heading
|content3 = cpp/locale/time_get/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/navbar content</title>
    <ns>10</ns>
    <id>4400</id>
    <revision>
      <id>53530</id>
      <parentid>41226</parentid>
      <timestamp>2013-06-01T05:03:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="620">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/time_get/time_get}}
{{nv mem ln | cpp/locale/time_get/~time_get}}
{{nv mem ln | cpp/locale/time_get/date_order|date_order|do_date_order}}
{{nv mem ln | cpp/locale/time_get/get_time|get_time|do_get_time}}
{{nv mem ln | cpp/locale/time_get/get_date|get_date|do_get_date}}
{{nv mem ln | cpp/locale/time_get/get_weekday|get_weekday|do_get_weekday}}
{{nv mem ln | cpp/locale/time_get/get_monthname|get_monthname|do_get_monthname}}
{{nv mem ln | cpp/locale/time_get/get_year|get_year|do_get_year}}
{{nv mem ln | cpp/locale/time_get/get|get|do_get}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/navbar heading</title>
    <ns>10</ns>
    <id>4399</id>
    <revision>
      <id>48075</id>
      <parentid>35771</parentid>
      <timestamp>2013-05-18T18:05:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="41">{{ltt|cpp/locale/time_get|std::time_get}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/time get format</title>
    <ns>10</ns>
    <id>4823</id>
    <revision>
      <id>71522</id>
      <parentid>70846</parentid>
      <timestamp>2014-06-12T16:51:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on tm_isdst</comment>
      <text xml:space="preserve" bytes="7141">The format string consists of zero or more conversion specifiers, whitespace characters, and ordinary characters (except {{tt|%}}). Each ordinary character is expected to match one character in the input stream in case-insensitive comparison. Each whitespace character matches arbitrary whitespace in the input string. Each conversion specification begins with {{tt|%}} character, optionally followed by {{tt|E}} or {{tt|O}} modifier (ignored if unsupported by the locale), followed by the character that determines the behavior of the specifier. The format specifiers match the POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html strptime()]:

{| class=&quot;wikitable&quot; style=&quot;font-size:85%; max-width:90em;&quot;
|-
! Conversion&lt;br&gt; specifier
! Explanation
! Writes to fields
|-
! {{tt|%}} 
| matches a literal {{tt|%}}. The full conversion specification must be {{tt|%%}}.
| (none)
|-
! {{tt|t}} 
| matches any whitespace.
| (none)
|-
! {{tt|n}} 
| matches any whitespace.
| (none)
|-
! colspan=3 | Year
|-
! {{tt|Y}}
| parses full '''year''' as a 4 digit decimal number, leading zeroes permitted but not required
| {{ttb|tm_year}}
|-
! {{tt|EY}}
| parses '''year''' in the alternative representation, e.g.平成23年 (year Heisei 23) which writes 2011 to tm_year in ja_JP locale
| {{ttb|tm_year}}
|-
! {{tt|y}}
| parses last 2 digits of '''year''' as a decimal number. Range {{tt|[69,99]}} results in values 1969 to 1999, range {{tt|[00,68]}} results in 2000-2068
| {{ttb|tm_year}}
|-
! {{tt|Oy}}
| parses last 2 digits of '''year''' using the alternative numeric system, e.g. 十一 is parsed as 11 in ja_JP locale
| {{ttb|tm_year}}
|-
! {{tt|Ey}}
| parses '''year''' as offset from locale's alternative calendar period {{tt|%EC}}
| {{ttb|tm_year}}
|-
! {{tt|C}}
| parses the first 2 digits of '''year''' as a decimal number (range {{tt|[00,99]}})
| {{ttb|tm_year}}
|-
! {{tt|EC}}
| parses the name of the base year (period) in the locale's alternative representation, e.g. 平成 (Heisei era) in ja_JP
| {{ttb|tm_year}}
|-
! colspan=3 | Month
|-
! {{tt|b}}
| parses the month name, either full or abbreviated, e.g. {{tt|Oct}}
| {{ttb|tm_mon}}
|-
! {{tt|h}}
| synonym of {{tt|b}}
| {{ttb|tm_mon}}
|-
! {{tt|B}}
| synonym of {{tt|b}}
| {{ttb|tm_mon}}
|-
! {{tt|m}}
| parses the '''month''' as a decimal number (range {{tt|[01,12]}}), leading zeroes permitted but not required
| {{ttb|tm_mon}}
|-
! {{tt|Om}}
| parses the '''month''' using the alternative numeric system, e.g. 十二 parses as 12 in ja_JP locale
| {{ttb|tm_mon}}
|-
! colspan=3 | Week
|-
! {{tt|U}}
| parses the '''week of the year''' as a decimal number (Sunday is the first day of the week) (range {{tt|[00,53]}}), leading zeroes permitted but not required
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|OU}}
| parses the '''week of the year''', as by {{tt|%U}}, using the alternative numeric system, e.g. 五十二 parses as 52 in ja_JP locale
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|W}}
| parses the '''week of the year''' as a decimal number (Monday is the first day of the week) (range {{tt|[00,53]}}), leading zeroes permitted but not required
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! {{tt|OW}}
| parses the '''week of the year''', as by {{tt|%W}}, using the alternative numeric system, e.g. 五十二 parses as 52 in ja_JP locale
| {{ttb|tm_year}}, {{ttb|tm_wday}}, {{ttb|tm_yday}}
|-
! colspan=3 | Day of the year/month
|-
! {{tt|j}}
| parses '''day of the year''' as a decimal number (range {{tt|[001,366]}}), leading zeroes permitted but not required
| {{ttb|tm_yday}}
|-
! {{tt|d}}
| parses the '''day of the month''' as a decimal number (range {{tt|[01,31]}}), leading zeroes permitted but not required
| {{ttb|tm_mday}}
|-
! {{tt|Od}}
| parses the '''day of the month''' using the alternative numeric system, e.g 二十七 parses as 27 in ja_JP locale, leading zeroes permitted but not required
| {{ttb|tm_mday}}
|-
! {{tt|e}}
| synonym of {{tt|d}}
| {{ttb|tm_mday}}
|-
! {{tt|Oe}}
| synonym of {{tt|Od}}
| {{ttb|tm_mday}}
|-
! colspan=3 | Day of the week
|-
! {{tt|a}}
| parses the name of the day of the week, either full or abbreviated, e.g. {{tt|Fri}}
| {{ttb|tm_wday}}
|-
! {{tt|A}}
| synonym of {{tt|a}}
| {{ttb|tm_wday}}
|-
! {{tt|w}}
| parses '''weekday''' as a decimal number, where Sunday is {{tt|0}} (range {{tt|[0-6]}})
| {{ttb|tm_wday}}
|-
! {{tt|Ow}}
| parses '''weekday''' as a decimal number, where Sunday is {{tt|0}}, using the alternative numeric system, e.g. 二 parses as 2 in ja_JP locale
| {{ttb|tm_wday}}
|-
! colspan=3 | Hour, minute, second
|-
! {{tt|H}}
| parses the '''hour''' as a decimal number, 24 hour clock (range {{tt|[00-23]}}), leading zeroes permitted but not required
| {{ttb|tm_hour}}
|-
! {{tt|OH}}
| parses '''hour''' from 24-hour clock using the alternative numeric system, e.g. 十八 parses as 18 in ja_JP locale
| {{ttb|tm_hour}}
|-
! {{tt|I}}
| parses '''hour''' as a decimal number, 12 hour clock (range {{tt|[01,12]}}), leading zeroes permitted but not required
| {{ttb|tm_hour}}
|-
! {{tt|OI}}
| parses '''hour''' from 12-hour clock using the alternative numeric system, e.g. 六 reads as 06 in ja_JP locale
| {{ttb|tm_hour}}
|-
! {{tt|M}}
| parses '''minute''' as a decimal number (range {{tt|[00,59]}}), leading zeroes permitted but not required
| {{ttb|tm_min}}
|-
! {{tt|OM}}
| parses '''minute''' using the alternative numeric system, e.g. 二十五 parses as 25 in ja_JP locale
| {{ttb|tm_min}}
|-
! {{tt|S}}
| parses '''second''' as a decimal number (range {{tt|[00,60]}}), leading zeroes permitted but not required
| {{ttb|tm_sec}}
|-
! {{tt|OS}}
| parses '''second''' using the alternative numeric system, e.g. 二十四 parses as 24 in ja_JP locale
| {{ttb|tm_sec}}
|-
! colspan=3 | Other
|-
! {{tt|c}}
| parses the locale's standard date and time string format, e.g. {{tt|Sun Oct 17 04:41:13 2010}} (locale dependent)
| all
|-
! {{tt|Ec}}
| parses the locale's alternative date and time string format, e.g. expecting 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale
| all
|-
! {{tt|x}}
| parses the locale's standard date representation
| all
|-
! {{tt|Ex}}
| parses the locale's alternative date representation, e.g. expecting 平成23年 (year Heisei 23) instead of 2011年 (year 2011) in ja_JP locale
| all
|-
! {{tt|X}}
| parses the locale's standard time representation
| all
|-
! {{tt|EX}}
| parses the locale's alternative time representation
| all
|-
! {{tt|D}}
| equivalent to '''&quot;%m / %d / %y &quot;'''
| {{ttb|tm_mon}}, {{ttb|tm_mday}}, {{ttb|tm_year}}
|-
! {{tt|r}}
| parses locale's standard 12-hour clock time (in POSIX, '''&quot;%I : %M : %S %p&quot;''')
| {{ttb|tm_hour}}, {{ttb|tm_min}}, {{ttb|tm_sec}}
|-
! {{tt|R}}
| equivalent to '''&quot;%H : %M&quot;'''
| {{ttb|tm_hour}}, {{ttb|tm_min}}
|-
! {{tt|T}}
| equivalent to '''&quot;%H : %M : %S&quot;'''
| {{ttb|tm_hour}}, {{ttb|tm_min}}, {{ttb|tm_sec}}
|-
! {{tt|p}}
| parses the locale's equivalent of '''a.m. or p.m.'''
| {{ttb|tm_hour}}
|}
Note: {{tt|tm_isdst}} is not written to, and needs to be set explicitly for use with functions such as {{tt|mktime}}</text>
      <sha1>d897a7ql5xf7epoobc0erxoq0yjr2bq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time get/title</title>
    <ns>10</ns>
    <id>4402</id>
    <revision>
      <id>15757</id>
      <timestamp>2011-12-15T16:59:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=time_get::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/dsc constructor</title>
    <ns>10</ns>
    <id>9481</id>
    <revision>
      <id>57795</id>
      <parentid>53533</parentid>
      <timestamp>2013-06-01T06:01:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time put/dcl list constructor]] to [[Template:cpp/locale/time put/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem ctor | cpp/locale/time_put/time_put | constructs a new time_put facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/dsc destructor</title>
    <ns>10</ns>
    <id>9482</id>
    <revision>
      <id>57799</id>
      <parentid>53536</parentid>
      <timestamp>2013-06-01T06:01:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time put/dcl list destructor]] to [[Template:cpp/locale/time put/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc prot mem dtor | cpp/locale/time_put/~time_put | destructs a time_put facet }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/dsc do put</title>
    <ns>10</ns>
    <id>9484</id>
    <revision>
      <id>57803</id>
      <parentid>53537</parentid>
      <timestamp>2013-06-01T06:01:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time put/dcl list do put]] to [[Template:cpp/locale/time put/dsc do put]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc prot mem vfun | cpp/locale/time_put/put | title=do_put  | formats date/time and writes to output stream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/dsc put</title>
    <ns>10</ns>
    <id>9483</id>
    <revision>
      <id>57808</id>
      <parentid>53540</parentid>
      <timestamp>2013-06-01T06:01:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/time put/dcl list put]] to [[Template:cpp/locale/time put/dsc put]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/locale/time_put/put | invokes {{tt|do_put}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/inherit</title>
    <ns>10</ns>
    <id>9249</id>
    <revision>
      <id>60900</id>
      <parentid>53543</parentid>
      <timestamp>2013-06-01T12:00:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="410">{{ inherited | [[cpp/locale/time_put | {{small|std::}}time_put]] |
===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc | {{tt|id}} {{mark|static}} | {{lc|std::locale::id}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/time_put/dsc put}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/time_put/dsc do_put}}
{{dsc end}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/navbar</title>
    <ns>10</ns>
    <id>4403</id>
    <revision>
      <id>39957</id>
      <parentid>35772</parentid>
      <timestamp>2012-09-28T20:11:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="246">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/time_put/navbar heading
|content3 = cpp/locale/time_put/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/navbar content</title>
    <ns>10</ns>
    <id>4412</id>
    <revision>
      <id>53546</id>
      <parentid>41223</parentid>
      <timestamp>2013-06-01T05:03:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="194">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/time_put/time_put}}
{{nv mem ln | cpp/locale/time_put/~time_put}}
{{nv mem ln | cpp/locale/time_put/put|put|do_put}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/navbar heading</title>
    <ns>10</ns>
    <id>4411</id>
    <revision>
      <id>48076</id>
      <parentid>34625</parentid>
      <timestamp>2013-05-18T18:05:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="41">{{ltt|cpp/locale/time_put|std::time_put}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/time put/title</title>
    <ns>10</ns>
    <id>4414</id>
    <revision>
      <id>15774</id>
      <timestamp>2011-12-15T17:05:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=time_put::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/unicode string conversions</title>
    <ns>10</ns>
    <id>2923</id>
    <revision>
      <id>91157</id>
      <parentid>91156</parentid>
      <timestamp>2017-03-23T21:53:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>er, wait, I dropped the locale-independent codecvt&lt;wchar_t&gt; by mistake.. the locale-depent one of course works .. it just breaks the layout a bit.. so extra br</comment>
      <text xml:space="preserve" bytes="1534">{| class=&quot;wikitable&quot; style=&quot;font-size:85%; text-align:center;&quot;
|-
! Character&lt;br&gt;conversions
! locale-defined multibyte&lt;br&gt;(UTF-8, GB18030)
! UTF-8&lt;br&gt;
! UTF-16&lt;br&gt;
|-
! UTF-16
| {{yes|{{ltt|cpp/string/multibyte/mbrtoc16}}}} / {{ltt|cpp/string/multibyte/c16rtomb}}{{mark|with C11's DR488}}
| {{yes|{{ltt|cpp/locale/codecvt}}&lt;char16_t, char, mbstate_t&gt;&lt;br&gt;{{ltt|cpp/locale/codecvt_utf8_utf16}}&lt;char16_t&gt;&lt;br&gt;{{ltt|cpp/locale/codecvt_utf8_utf16}}&lt;char32_t&gt;&lt;br&gt;{{ltt|cpp/locale/codecvt_utf8_utf16}}&lt;wchar_t&gt;}}
| {{n/a}}
|-
! UCS2
| {{yes|{{ltt|cpp/string/multibyte/c16rtomb}}}}{{mark|without C11's DR488}}
| {{yes|{{ltt|cpp/locale/codecvt_utf8}}&lt;char16_t&gt;&lt;br&gt;
{{ltt|cpp/locale/codecvt_utf8}}&lt;wchar_t&gt;{{mark|Windows}}}}
| {{yes|{{ltt|cpp/locale/codecvt_utf16}}&lt;char16_t&gt;&lt;br&gt;
{{ltt|cpp/locale/codecvt_utf16}}&lt;wchar_t&gt;{{mark|Windows}}}}
|- 
! UTF-32
| {{yes|
{{ltt|cpp/string/multibyte/mbrtoc32}} / {{ltt|cpp/string/multibyte/c32rtomb}}
}}
| {{yes|
{{ltt|cpp/locale/codecvt}}&lt;char32_t, char, mbstate_t&gt;&lt;br&gt;
{{ltt|cpp/locale/codecvt_utf8}}&lt;char32_t&gt;&lt;br&gt;
{{ltt|cpp/locale/codecvt_utf8}}&lt;wchar_t&gt;{{mark|non-Windows}}
}}
| {{yes|
{{ltt|cpp/locale/codecvt_utf16}}&lt;char32_t&gt;&lt;br&gt;
{{ltt|cpp/locale/codecvt_utf16}}&lt;wchar_t&gt;{{mark|non-Windows}}
}}
|-
! system wide:&lt;br&gt;UTF-32{{mark|non-Windows}}&lt;br&gt;UCS2{{mark|Windows}}
| {{yes|
{{ltt|cpp/string/multibyte/mbsrtowcs}} / {{ltt|cpp/string/multibyte/wcsrtombs}}&lt;br&gt;
{{ltt|cpp/locale/use_facet}}&lt;{{ltt|cpp/locale/codecvt}}&lt;br&gt;
&lt;wchar_t, char, mbstate_t&gt;&gt;({{ltt|cpp/locale/locale}})
}}
| {{no}}
| {{no}}
|}</text>
      <sha1>rodvof8jrfj18xhcd39vdfmvg7eiolk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wbuffer convert/dsc rdbuf</title>
    <ns>10</ns>
    <id>5193</id>
    <revision>
      <id>57812</id>
      <parentid>53549</parentid>
      <timestamp>2013-06-01T06:01:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wbuffer convert/dcl list rdbuf]] to [[Template:cpp/locale/wbuffer convert/dsc rdbuf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem fun | cpp/locale/wbuffer_convert/rdbuf | returns or replaces the underlying narrow stream buffer }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wbuffer convert/dsc state</title>
    <ns>10</ns>
    <id>5194</id>
    <revision>
      <id>57817</id>
      <parentid>53550</parentid>
      <timestamp>2013-06-01T06:01:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wbuffer convert/dcl list state]] to [[Template:cpp/locale/wbuffer convert/dsc state]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/locale/wbuffer_convert/state | returns the current conversion state }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wbuffer convert/dsc wbuffer convert</title>
    <ns>10</ns>
    <id>5191</id>
    <revision>
      <id>57822</id>
      <parentid>53553</parentid>
      <timestamp>2013-06-01T06:01:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wbuffer convert/dcl list wbuffer convert]] to [[Template:cpp/locale/wbuffer convert/dsc wbuffer convert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem ctor | cpp/locale/wbuffer_convert/wbuffer_convert | constructs a new wbuffer_convert }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wbuffer convert/dsc ~wbuffer convert</title>
    <ns>10</ns>
    <id>5192</id>
    <revision>
      <id>57827</id>
      <parentid>53554</parentid>
      <timestamp>2013-06-01T06:01:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wbuffer convert/dcl list ~wbuffer convert]] to [[Template:cpp/locale/wbuffer convert/dsc ~wbuffer convert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc mem dtor | cpp/locale/wbuffer_convert/~wbuffer_convert | destructs the wbuffer_convert and its conversion facet}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wbuffer convert/navbar</title>
    <ns>10</ns>
    <id>5195</id>
    <revision>
      <id>39958</id>
      <parentid>35388</parentid>
      <timestamp>2012-09-28T20:11:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="260">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/wbuffer_convert/navbar heading
|content3 = cpp/locale/wbuffer_convert/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wbuffer convert/navbar content</title>
    <ns>10</ns>
    <id>5197</id>
    <revision>
      <id>53555</id>
      <parentid>35774</parentid>
      <timestamp>2013-06-01T05:03:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="269">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/wbuffer_convert/wbuffer_convert}}
{{nv mem ln | cpp/locale/wbuffer_convert/~wbuffer_convert}}
{{nv mem ln | cpp/locale/wbuffer_convert/rdbuf}}
{{nv mem ln | cpp/locale/wbuffer_convert/state}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wbuffer convert/navbar heading</title>
    <ns>10</ns>
    <id>5196</id>
    <revision>
      <id>48111</id>
      <parentid>35775</parentid>
      <timestamp>2013-05-18T18:14:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="55">{{ltt|cpp/locale/wbuffer_convert|std::wbuffer_convert}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/dsc converted</title>
    <ns>10</ns>
    <id>5186</id>
    <revision>
      <id>57831</id>
      <parentid>53556</parentid>
      <timestamp>2013-06-01T06:01:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wstring convert/dcl list converted]] to [[Template:cpp/locale/wstring convert/dsc converted]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem fun | cpp/locale/wstring_convert/converted | returns the number of characters successfully converted }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/dsc from bytes</title>
    <ns>10</ns>
    <id>5178</id>
    <revision>
      <id>57835</id>
      <parentid>53557</parentid>
      <timestamp>2013-06-01T06:02:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wstring convert/dcl list from bytes]] to [[Template:cpp/locale/wstring convert/dsc from bytes]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/locale/wstring_convert/from_bytes | converts a byte string into a wide string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/dsc state</title>
    <ns>10</ns>
    <id>5187</id>
    <revision>
      <id>57840</id>
      <parentid>53558</parentid>
      <timestamp>2013-06-01T06:02:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wstring convert/dcl list state]] to [[Template:cpp/locale/wstring convert/dsc state]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/locale/wstring_convert/state | returns the current conversion state }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/dsc to bytes</title>
    <ns>10</ns>
    <id>5177</id>
    <revision>
      <id>57845</id>
      <parentid>53559</parentid>
      <timestamp>2013-06-01T06:02:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wstring convert/dcl list to bytes]] to [[Template:cpp/locale/wstring convert/dsc to bytes]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun | cpp/locale/wstring_convert/to_bytes | converts a wide string into a byte string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/dsc wstring convert</title>
    <ns>10</ns>
    <id>5184</id>
    <revision>
      <id>57849</id>
      <parentid>53560</parentid>
      <timestamp>2013-06-01T06:02:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wstring convert/dcl list wstring convert]] to [[Template:cpp/locale/wstring convert/dsc wstring convert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem ctor | cpp/locale/wstring_convert/wstring_convert | constructs a new wstring_convert }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/dsc ~wstring convert</title>
    <ns>10</ns>
    <id>5185</id>
    <revision>
      <id>57854</id>
      <parentid>53561</parentid>
      <timestamp>2013-06-01T06:02:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/locale/wstring convert/dcl list ~wstring convert]] to [[Template:cpp/locale/wstring convert/dsc ~wstring convert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc mem dtor | cpp/locale/wstring_convert/~wstring_convert | destructs the wstring_convert and its conversion facet}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/navbar</title>
    <ns>10</ns>
    <id>4571</id>
    <revision>
      <id>39959</id>
      <parentid>35776</parentid>
      <timestamp>2012-09-28T20:11:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="260">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/locale/navbar heading
|content2 = cpp/locale/navbar content

|heading3 = cpp/locale/wstring_convert/navbar heading
|content3 = cpp/locale/wstring_convert/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/navbar content</title>
    <ns>10</ns>
    <id>4573</id>
    <revision>
      <id>53562</id>
      <parentid>35777</parentid>
      <timestamp>2013-06-01T05:03:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/locale/wstring_convert/wstring_convert}}
{{nv mem ln | cpp/locale/wstring_convert/~wstring_convert}}
{{nv mem ln | cpp/locale/wstring_convert/from_bytes}}
{{nv mem ln | cpp/locale/wstring_convert/to_bytes}}
{{nv mem ln | cpp/locale/wstring_convert/converted}}
{{nv mem ln | cpp/locale/wstring_convert/state}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/navbar heading</title>
    <ns>10</ns>
    <id>4572</id>
    <revision>
      <id>48079</id>
      <parentid>35778</parentid>
      <timestamp>2013-05-18T18:06:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="55">{{ltt|cpp/locale/wstring_convert|std::wstring_convert}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/locale/wstring convert/title</title>
    <ns>10</ns>
    <id>5180</id>
    <revision>
      <id>18762</id>
      <timestamp>2012-02-12T18:50:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=wstring_convert::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory//navbar</title>
    <ns>10</ns>
    <id>5310</id>
    <revision>
      <id>35779</id>
      <parentid>19339</parentid>
      <timestamp>2012-06-15T22:31:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory//sidebar]] to [[Template:cpp/memory//navbar]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory//title</title>
    <ns>10</ns>
    <id>5311</id>
    <revision>
      <id>19340</id>
      <timestamp>2012-03-09T22:24:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>dummy page</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/dsc allocate</title>
    <ns>10</ns>
    <id>5665</id>
    <revision>
      <id>57898</id>
      <parentid>53573</parentid>
      <timestamp>2013-06-01T06:03:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator traits/dcl list allocate]] to [[Template:cpp/memory/allocator traits/dsc allocate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem sfun | cpp/memory/allocator_traits/allocate | allocates uninitialized storage using the allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/dsc construct</title>
    <ns>10</ns>
    <id>5667</id>
    <revision>
      <id>57902</id>
      <parentid>53574</parentid>
      <timestamp>2013-06-01T06:03:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator traits/dcl list construct]] to [[Template:cpp/memory/allocator traits/dsc construct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc tfun | cpp/memory/allocator_traits/construct |notes={{cmark static}} | constructs an object in the allocated storage}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/dsc deallocate</title>
    <ns>10</ns>
    <id>5666</id>
    <revision>
      <id>57906</id>
      <parentid>53575</parentid>
      <timestamp>2013-06-01T06:03:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator traits/dcl list deallocate]] to [[Template:cpp/memory/allocator traits/dsc deallocate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem sfun | cpp/memory/allocator_traits/deallocate | deallocates storage using the allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/dsc destroy</title>
    <ns>10</ns>
    <id>5668</id>
    <revision>
      <id>57910</id>
      <parentid>53576</parentid>
      <timestamp>2013-06-01T06:03:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator traits/dcl list destroy]] to [[Template:cpp/memory/allocator traits/dsc destroy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/memory/allocator_traits/destroy |notes={{cmark static}}| destructs an object stored in the allocated storage}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/dsc max size</title>
    <ns>10</ns>
    <id>5669</id>
    <revision>
      <id>57914</id>
      <parentid>53577</parentid>
      <timestamp>2013-06-01T06:03:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator traits/dcl list max size]] to [[Template:cpp/memory/allocator traits/dsc max size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem sfun | cpp/memory/allocator_traits/max_size | returns the maximum object size supported by the allocator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/dsc select on container copy construction</title>
    <ns>10</ns>
    <id>5670</id>
    <revision>
      <id>57918</id>
      <parentid>53578</parentid>
      <timestamp>2013-06-01T06:03:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator traits/dcl list select on container copy construction]] to [[Template:cpp/memory/allocator traits/dsc select on container copy construction]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc mem sfun | cpp/memory/allocator_traits/select_on_container_copy_construction | obtains the allocator to use after copying a standard container}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/navbar</title>
    <ns>10</ns>
    <id>3398</id>
    <revision>
      <id>39961</id>
      <parentid>35784</parentid>
      <timestamp>2012-09-28T20:12:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="263">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/allocator_traits/navbar heading
|content3 = cpp/memory/allocator_traits/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/navbar content</title>
    <ns>10</ns>
    <id>3400</id>
    <revision>
      <id>53579</id>
      <parentid>35785</parentid>
      <timestamp>2013-06-01T05:03:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="401">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/allocator_traits/allocate}}
{{nv mem ln | cpp/memory/allocator_traits/deallocate}}
{{nv mem ln | cpp/memory/allocator_traits/construct}}
{{nv mem ln | cpp/memory/allocator_traits/destroy}}
{{nv mem ln | cpp/memory/allocator_traits/max_size}}
{{nv mem ln | cpp/memory/allocator_traits/select_on_container_copy_construction}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/navbar heading</title>
    <ns>10</ns>
    <id>3399</id>
    <revision>
      <id>48037</id>
      <parentid>35786</parentid>
      <timestamp>2013-05-18T17:59:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="57">{{ltt|cpp/memory/allocator_traits|std::allocator_traits}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator traits/title</title>
    <ns>10</ns>
    <id>5662</id>
    <revision>
      <id>20851</id>
      <timestamp>2012-04-06T17:00:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=allocator_traits::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc address</title>
    <ns>10</ns>
    <id>5682</id>
    <revision>
      <id>86266</id>
      <parentid>57859</parentid>
      <timestamp>2016-06-27T08:21:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>{{mark|deprecated in C++17}}</comment>
      <text xml:space="preserve" bytes="157">{{dsc mem fun | cpp/memory/allocator/address | obtains the address of an object, even if {{c|operator&amp;}} is overloaded | notes={{mark|deprecated in C++17}}}}</text>
      <sha1>oab0o5xzfyd26rbgwt7ku7h6elzrw2x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc allocate</title>
    <ns>10</ns>
    <id>5683</id>
    <revision>
      <id>57863</id>
      <parentid>53564</parentid>
      <timestamp>2013-06-01T06:02:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator/dcl list allocate]] to [[Template:cpp/memory/allocator/dsc allocate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/memory/allocator/allocate | allocates uninitialized storage}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc allocator</title>
    <ns>10</ns>
    <id>5680</id>
    <revision>
      <id>57867</id>
      <parentid>53565</parentid>
      <timestamp>2013-06-01T06:02:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator/dcl list allocator]] to [[Template:cpp/memory/allocator/dsc allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem ctor | cpp/memory/allocator/allocator | creates a new allocator instance}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc construct</title>
    <ns>10</ns>
    <id>5686</id>
    <revision>
      <id>86264</id>
      <parentid>57871</parentid>
      <timestamp>2016-06-27T08:20:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>{{mark|deprecated in C++17}}</comment>
      <text xml:space="preserve" bytes="129">{{dsc mem fun | cpp/memory/allocator/construct | constructs an object in allocated storage | notes={{mark|deprecated in C++17}}}}</text>
      <sha1>6ke78l8cgh63c82v5cldkd5sipaamqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc deallocate</title>
    <ns>10</ns>
    <id>5684</id>
    <revision>
      <id>57876</id>
      <parentid>53567</parentid>
      <timestamp>2013-06-01T06:02:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator/dcl list deallocate]] to [[Template:cpp/memory/allocator/dsc deallocate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/memory/allocator/deallocate | deallocates storage}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc destroy</title>
    <ns>10</ns>
    <id>5687</id>
    <revision>
      <id>86265</id>
      <parentid>57881</parentid>
      <timestamp>2016-06-27T08:20:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>{{mark|deprecated in C++17}}</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem fun | cpp/memory/allocator/destroy | destructs an object in allocated storage|notes={{mark|deprecated in C++17}}}}</text>
      <sha1>byiyptazzz70awqkn74agwfu24qaddw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc max size</title>
    <ns>10</ns>
    <id>5685</id>
    <revision>
      <id>86274</id>
      <parentid>86271</parentid>
      <timestamp>2016-06-27T08:30:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/memory/allocator/max_size | returns the largest supported allocation size | notes= {{mark|deprecated in C++17}}}}</text>
      <sha1>o2m4si7eoaguxyhsyttp82j5pt9dfyt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc operator cmp</title>
    <ns>10</ns>
    <id>5688</id>
    <revision>
      <id>57890</id>
      <parentid>53570</parentid>
      <timestamp>2013-06-01T06:03:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator/dcl list operator cmp]] to [[Template:cpp/memory/allocator/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem fun | cpp/memory/allocator/operator_cmp |title=operator{{==}}&lt;br&gt;operator!{{=}}|compares two allocator instances}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/dsc ~allocator</title>
    <ns>10</ns>
    <id>5681</id>
    <revision>
      <id>57894</id>
      <parentid>53571</parentid>
      <timestamp>2013-06-01T06:03:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/allocator/dcl list ~allocator]] to [[Template:cpp/memory/allocator/dsc ~allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem dtor | cpp/memory/allocator/~allocator | destructs an allocator instance}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/navbar</title>
    <ns>10</ns>
    <id>3392</id>
    <revision>
      <id>48445</id>
      <parentid>39960</parentid>
      <timestamp>2013-05-29T15:44:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/allocator/navbar heading
|content3 = cpp/memory/allocator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/navbar content</title>
    <ns>10</ns>
    <id>3394</id>
    <revision>
      <id>53572</id>
      <parentid>35781</parentid>
      <timestamp>2013-06-01T05:03:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="533">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/allocator/allocator}}
{{nv mem ln | cpp/memory/allocator/~allocator}}
{{nv mem ln | cpp/memory/allocator/address}}
{{nv mem ln | cpp/memory/allocator/allocate}}
{{nv mem ln | cpp/memory/allocator/deallocate}}
{{nv mem ln | cpp/memory/allocator/max_size}}
{{nv mem ln | cpp/memory/allocator/construct}}
{{nv mem ln | cpp/memory/allocator/destroy}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/memory/allocator/operator_cmp|operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/navbar heading</title>
    <ns>10</ns>
    <id>3393</id>
    <revision>
      <id>48035</id>
      <parentid>35783</parentid>
      <timestamp>2013-05-18T17:59:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="43">{{ltt|cpp/memory/allocator|std::allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/allocator/title</title>
    <ns>10</ns>
    <id>5663</id>
    <revision>
      <id>20853</id>
      <timestamp>2012-04-06T17:11:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=allocator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/auto ptr ref note</title>
    <ns>10</ns>
    <id>13520</id>
    <revision>
      <id>70039</id>
      <parentid>70038</parentid>
      <timestamp>2014-05-07T18:36:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link move</comment>
      <text xml:space="preserve" bytes="627">The constructor and the copy assignment operator from {{tt|auto_ptr_ref}} is provided to allow copy-constructing and assigning {{lc|std::auto_ptr}} from nameless temporaries. Since its copy constructor and copy assignment operator take the argument as non-const reference, they cannot bind rvalue arguments directly. However, a [[cpp/memory/auto_ptr/operator_auto_ptr|user-defined conversion]] can be executed (which releases the original auto_ptr), followed by a call to the constructor or copy-assignment operator that take {{tt|auto_ptr_ref}} by value. This is an early implementation of [[cpp/utility/move|move semantics]].</text>
      <sha1>oyhmtf4j71bfn11qxdlw5rsqi6zr8xz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc auto ptr</title>
    <ns>10</ns>
    <id>9583</id>
    <revision>
      <id>57922</id>
      <parentid>53580</parentid>
      <timestamp>2013-06-01T06:03:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/auto ptr/dcl list auto ptr]] to [[Template:cpp/memory/auto ptr/dsc auto ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem ctor | cpp/memory/auto_ptr/auto_ptr  | creates a new {{tt|auto_ptr}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc get</title>
    <ns>10</ns>
    <id>9587</id>
    <revision>
      <id>81255</id>
      <parentid>57927</parentid>
      <timestamp>2015-10-09T15:09:05Z</timestamp>
      <contributor>
        <ip>89.176.108.246</ip>
      </contributor>
      <comment>the method returns, the caller obtains</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem fun | cpp/memory/auto_ptr/get | returns a pointer to the managed object}}</text>
      <sha1>7lu1pfpomkkl5p7d3ox8mmzj86szly3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc operator auto ptr</title>
    <ns>10</ns>
    <id>9586</id>
    <revision>
      <id>70027</id>
      <parentid>57940</parentid>
      <timestamp>2014-05-07T16:17:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention both operators in the dsc</comment>
      <text xml:space="preserve" bytes="174">{{dsc mem fun | cpp/memory/auto_ptr/operator_auto_ptr | title=operator auto_ptr&lt;Y&gt;&lt;br&gt;operator auto_ptr_ref&lt;Y&gt; | converts the managed pointer to a pointer to different type}}</text>
      <sha1>h04ky9rj1002nkmt2tehwxe321xp20q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc operator*</title>
    <ns>10</ns>
    <id>9588</id>
    <revision>
      <id>57932</id>
      <parentid>53582</parentid>
      <timestamp>2013-06-01T06:04:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/auto ptr/dcl list operator*]] to [[Template:cpp/memory/auto ptr/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem fun | cpp/memory/auto_ptr/operator* | title=operator*&lt;br&gt;operator-&gt;| accesses the managed object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc operator=</title>
    <ns>10</ns>
    <id>9585</id>
    <revision>
      <id>57936</id>
      <parentid>53583</parentid>
      <timestamp>2013-06-01T06:04:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/auto ptr/dcl list operator=]] to [[Template:cpp/memory/auto ptr/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem fun | cpp/memory/auto_ptr/operator{{=}} | transfers ownership from another {{tt|auto_ptr}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc release</title>
    <ns>10</ns>
    <id>9590</id>
    <revision>
      <id>57944</id>
      <parentid>53585</parentid>
      <timestamp>2013-06-01T06:04:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/auto ptr/dcl list release]] to [[Template:cpp/memory/auto ptr/dsc release]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/memory/auto_ptr/release | releases ownership of the managed object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc reset</title>
    <ns>10</ns>
    <id>9589</id>
    <revision>
      <id>57948</id>
      <parentid>53586</parentid>
      <timestamp>2013-06-01T06:04:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/auto ptr/dcl list reset]] to [[Template:cpp/memory/auto ptr/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/memory/auto_ptr/reset | destroys the managed object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/dsc ~auto ptr</title>
    <ns>10</ns>
    <id>9584</id>
    <revision>
      <id>57952</id>
      <parentid>53587</parentid>
      <timestamp>2013-06-01T06:04:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/auto ptr/dcl list ~auto ptr]] to [[Template:cpp/memory/auto ptr/dsc ~auto ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem dtor | cpp/memory/auto_ptr/~auto_ptr   | destroys an {{tt|auto_ptr}} and the managed object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/navbar</title>
    <ns>10</ns>
    <id>3422</id>
    <revision>
      <id>39962</id>
      <parentid>36076</parentid>
      <timestamp>2012-09-28T20:12:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="324">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/auto_ptr/navbar heading
|content4 = cpp/memory/auto_ptr/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/navbar content</title>
    <ns>10</ns>
    <id>3424</id>
    <revision>
      <id>70036</id>
      <parentid>53588</parentid>
      <timestamp>2014-05-07T16:33:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>display operator auto_ptr_ref</comment>
      <text xml:space="preserve" bytes="486">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/auto_ptr/auto_ptr}}
{{nv mem ln | cpp/memory/auto_ptr/~auto_ptr}}
{{nv mem ln | cpp/memory/auto_ptr/operator{{=}}}}
{{nv mem ln | cpp/memory/auto_ptr/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/memory/auto_ptr/get}}
{{nv mem ln | cpp/memory/auto_ptr/release}}
{{nv mem ln | cpp/memory/auto_ptr/reset}}
{{nv mem ln | cpp/memory/auto_ptr/operator_auto_ptr|operator auto_ptr&lt;Y&gt;|operator auto_ptr_ref&lt;Y&gt;}}
{{nv end}}</text>
      <sha1>owvcj2tptne8iw11rswgnpqrg4dewq7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/navbar heading</title>
    <ns>10</ns>
    <id>3423</id>
    <revision>
      <id>48039</id>
      <parentid>35789</parentid>
      <timestamp>2013-05-18T17:59:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="41">{{ltt|cpp/memory/auto_ptr|std::auto_ptr}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/auto ptr/title</title>
    <ns>10</ns>
    <id>8559</id>
    <revision>
      <id>31720</id>
      <timestamp>2012-06-06T20:43:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=auto_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/bad weak ptr/navbar</title>
    <ns>10</ns>
    <id>8984</id>
    <revision>
      <id>39963</id>
      <parentid>37785</parentid>
      <timestamp>2012-09-28T20:12:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="332">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/bad_weak_ptr/navbar heading
|content4 = cpp/memory/bad_weak_ptr/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/bad weak ptr/navbar content</title>
    <ns>10</ns>
    <id>8986</id>
    <revision>
      <id>53589</id>
      <parentid>37788</parentid>
      <timestamp>2013-06-01T05:04:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="105">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/bad_weak_ptr/bad_weak_ptr}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/bad weak ptr/navbar heading</title>
    <ns>10</ns>
    <id>8985</id>
    <revision>
      <id>48089</id>
      <parentid>37786</parentid>
      <timestamp>2013-05-18T18:07:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="49">{{ltt|cpp/memory/bad_weak_ptr|std::bad_weak_ptr}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/bad weak ptr/title</title>
    <ns>10</ns>
    <id>8988</id>
    <revision>
      <id>37793</id>
      <timestamp>2012-07-18T23:44:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=bad_weak_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/c/navbar</title>
    <ns>10</ns>
    <id>2160</id>
    <revision>
      <id>39964</id>
      <parentid>36075</parentid>
      <timestamp>2012-09-28T20:12:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="229">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/default delete/dsc constructor</title>
    <ns>10</ns>
    <id>9964</id>
    <revision>
      <id>66451</id>
      <parentid>58057</parentid>
      <timestamp>2013-11-22T16:24:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem ctor | cpp/memory/default_delete | inlinemem=true | constructs a {{tt|default_delete}} object}}</text>
      <sha1>kx0f3h0n3lm8qvdz7q85i6a00pgnp8o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/default delete/dsc operator()</title>
    <ns>10</ns>
    <id>9965</id>
    <revision>
      <id>58062</id>
      <parentid>53633</parentid>
      <timestamp>2013-06-01T06:07:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/default delete/dcl list operator()]] to [[Template:cpp/memory/default delete/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun | cpp/memory/default_delete | title=operator() | inlinemem=true | deletes the object or array }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/default delete/navbar</title>
    <ns>10</ns>
    <id>9605</id>
    <revision>
      <id>47434</id>
      <parentid>44705</parentid>
      <timestamp>2013-05-10T16:02:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>no content</comment>
      <text xml:space="preserve" bytes="283">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/default_delete/navbar heading
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/default delete/navbar heading</title>
    <ns>10</ns>
    <id>9604</id>
    <revision>
      <id>47138</id>
      <parentid>44704</parentid>
      <timestamp>2013-04-25T10:46:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="55">{{ltt|cpp/memory/default_delete | std::default_delete}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/default delete/title</title>
    <ns>10</ns>
    <id>8578</id>
    <revision>
      <id>31739</id>
      <timestamp>2012-06-06T20:46:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=default_delete::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc addressof</title>
    <ns>10</ns>
    <id>3378</id>
    <revision>
      <id>57956</id>
      <parentid>53590</parentid>
      <timestamp>2013-06-01T06:04:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list addressof]] to [[Template:cpp/memory/dsc addressof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc tfun | cpp/memory/addressof | obtains actual address of an object, even if the ''&amp;'' operator is overloaded |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc align</title>
    <ns>10</ns>
    <id>3379</id>
    <revision>
      <id>57960</id>
      <parentid>53591</parentid>
      <timestamp>2013-06-01T06:04:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list align]] to [[Template:cpp/memory/dsc align]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc fun | cpp/memory/align | aligns a pointer in a buffer |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc allocate ptr</title>
    <ns>10</ns>
    <id>4941</id>
    <revision>
      <id>57965</id>
      <parentid>53592</parentid>
      <timestamp>2013-06-01T06:04:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list allocate ptr]] to [[Template:cpp/memory/dsc allocate ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc tfun | cpp/memory/shared_ptr/allocate_shared | creates a shared pointer that manages a new object allocated using an allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc allocator</title>
    <ns>10</ns>
    <id>3355</id>
    <revision>
      <id>57969</id>
      <parentid>53593</parentid>
      <timestamp>2013-06-01T06:04:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list allocator]] to [[Template:cpp/memory/dsc allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">{{dsc tclass | cpp/memory/allocator | the default allocator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc allocator arg</title>
    <ns>10</ns>
    <id>3358</id>
    <revision>
      <id>57973</id>
      <parentid>53594</parentid>
      <timestamp>2013-06-01T06:05:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list allocator arg]] to [[Template:cpp/memory/dsc allocator arg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="156">{{dsc const  | cpp/memory/allocator_arg | an object of type {{lc|std::allocator_arg_t}} used to select allocator-aware constructors| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc allocator arg t</title>
    <ns>10</ns>
    <id>3357</id>
    <revision>
      <id>57976</id>
      <parentid>53595</parentid>
      <timestamp>2013-06-01T06:05:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list allocator arg t]] to [[Template:cpp/memory/dsc allocator arg t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc class  | cpp/memory/allocator_arg_t | tag type used to select allocator-aware constructor overloads| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc allocator traits</title>
    <ns>10</ns>
    <id>3356</id>
    <revision>
      <id>57981</id>
      <parentid>53596</parentid>
      <timestamp>2013-06-01T06:05:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list allocator traits]] to [[Template:cpp/memory/dsc allocator traits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc tclass | cpp/memory/allocator_traits | provides information about allocator types | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc auto ptr</title>
    <ns>10</ns>
    <id>3366</id>
    <revision>
      <id>73929</id>
      <parentid>57985</parentid>
      <timestamp>2014-11-24T20:10:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in C++17</comment>
      <text xml:space="preserve" bytes="122">{{dsc tclass | cpp/memory/auto_ptr   | smart pointer with strict object ownership semantics | notes={{mark until c++17}}}}</text>
      <sha1>mxcsuu4ueo5e0g6w2j6o56crt4ycd5d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc bad weak ptr</title>
    <ns>10</ns>
    <id>3369</id>
    <revision>
      <id>57989</id>
      <parentid>53598</parentid>
      <timestamp>2013-06-01T06:05:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list bad weak ptr]] to [[Template:cpp/memory/dsc bad weak ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc class | cpp/memory/bad_weak_ptr | exception thrown when accessing a {{tt|weak_ptr}} which refers to already destroyed object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc default delete</title>
    <ns>10</ns>
    <id>3370</id>
    <revision>
      <id>57993</id>
      <parentid>53599</parentid>
      <timestamp>2013-06-01T06:05:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list default delete]] to [[Template:cpp/memory/dsc default delete]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc tclass | cpp/memory/default_delete | default deleter for {{tt|unique_ptr}} |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc destroy</title>
    <ns>10</ns>
    <id>15628</id>
    <revision>
      <id>86833</id>
      <parentid>86784</parentid>
      <timestamp>2016-07-13T00:07:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="86">{{dsc tfun | cpp/memory/destroy | destroys a range of objects | notes={{mark c++17}}}}</text>
      <sha1>41bgx1sxmhw7r7sq3cnln5yznd0t4ab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc destroy at</title>
    <ns>10</ns>
    <id>15627</id>
    <revision>
      <id>86832</id>
      <parentid>86782</parentid>
      <timestamp>2016-07-13T00:07:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="99">{{dsc tfun | cpp/memory/destroy_at | destroys an object at a given address | notes={{mark c++17}}}}</text>
      <sha1>l5ty3os3en1so7paz1sgdmf71xqve9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc destroy n</title>
    <ns>10</ns>
    <id>15629</id>
    <revision>
      <id>86834</id>
      <parentid>86785</parentid>
      <timestamp>2016-07-13T00:07:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="100">{{dsc tfun | cpp/memory/destroy_n | destroys a number of objects in a range | notes={{mark c++17}}}}</text>
      <sha1>b817tajjb7xeqk4q2b81aw01pba22mf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc enable shared from this</title>
    <ns>10</ns>
    <id>3368</id>
    <revision>
      <id>57997</id>
      <parentid>53600</parentid>
      <timestamp>2013-06-01T06:05:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list enable shared from this]] to [[Template:cpp/memory/dsc enable shared from this]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc tclass | cpp/memory/enable_shared_from_this | allows an object to create a {{tt|shared_ptr}} referring to itself | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc get default resource</title>
    <ns>10</ns>
    <id>14868</id>
    <revision>
      <id>84189</id>
      <timestamp>2016-03-16T16:05:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | cpp/memory/get_default_resource | gets the default {{lc|std::pmr::memory_resource}}|notes={{mark c++17}}}}</text>
      <sha1>1jjioj95bklwb1jnw1s4xcffr8r5e3w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc get temporary buffer</title>
    <ns>10</ns>
    <id>3361</id>
    <revision>
      <id>86286</id>
      <parentid>58001</parentid>
      <timestamp>2016-06-27T08:41:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc tfun   | cpp/memory/get_temporary_buffer | obtains uninitialized storage  | notes= {{mark|deprecated in C++17}}}}</text>
      <sha1>49dlxvmej648mrljj1lenes68e2il8k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc memory resource</title>
    <ns>10</ns>
    <id>14870</id>
    <revision>
      <id>84191</id>
      <timestamp>2016-03-16T16:06:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc class | cpp/memory/memory_resource |  an abstract interface for classes that encapsulate memory resources |notes={{mark c++17}}}}</text>
      <sha1>8ftslviohqueui0u5eej69zqdgud5vg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc monotonic buffer resource</title>
    <ns>10</ns>
    <id>14873</id>
    <revision>
      <id>84195</id>
      <parentid>84194</parentid>
      <timestamp>2016-03-16T16:09:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="197">{{dsc class | cpp/memory/monotonic_buffer_resource | a special-purpose {{lc|std::pmr::memory_resource}} that releases the allocated memory only when the resource is destroyed|notes={{mark c++17}}}}</text>
      <sha1>rhg98jvhjug6lnf6edajvll36zu8vpc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc new delete resource</title>
    <ns>10</ns>
    <id>14866</id>
    <revision>
      <id>84188</id>
      <parentid>84185</parentid>
      <timestamp>2016-03-16T16:04:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>pmr</comment>
      <text xml:space="preserve" bytes="232">{{dsc fun | cpp/memory/new_delete_resource | returns a static program-wide {{lc|std::pmr::memory_resource}} that uses the global {{lc|operator new}} and {{lc|operator delete}} to allocate and deallocate memory|notes={{mark c++17}}}}</text>
      <sha1>m6ofwbwlrc7eeez2ciqvpf2tnaljrl8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc null memory resource</title>
    <ns>10</ns>
    <id>14867</id>
    <revision>
      <id>84186</id>
      <timestamp>2016-03-16T16:03:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="147">{{dsc fun | cpp/memory/null_memory_resource | returns a static {{lc|std::pmr::memory_resource}} that performs no allocation|notes={{mark c++17}} }}</text>
      <sha1>5dr3bf70nmk13lphnbawc1zkl1pb0eg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc owner less</title>
    <ns>10</ns>
    <id>3367</id>
    <revision>
      <id>58005</id>
      <parentid>53602</parentid>
      <timestamp>2013-06-01T06:05:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list owner less]] to [[Template:cpp/memory/dsc owner less]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc tclass | cpp/memory/owner_less | provides mixed-type owner-based ordering of shared and weak pointers | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc owner less void</title>
    <ns>10</ns>
    <id>14487</id>
    <revision>
      <id>81465</id>
      <timestamp>2015-10-27T09:41:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="210">{{dsc ptclass | cpp/memory/owner_less_void | title=owner_less{{dsc small|&lt;void&gt;}} | function object providing mixed-type owner-based ordering of shared and weak pointers, regardless of the type of the pointee}}</text>
      <sha1>srbkfzk5zuony18ztc1rlwsl4y46wv6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc pointer traits</title>
    <ns>10</ns>
    <id>3377</id>
    <revision>
      <id>58009</id>
      <parentid>53603</parentid>
      <timestamp>2013-06-01T06:05:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list pointer traits]] to [[Template:cpp/memory/dsc pointer traits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc tclass | cpp/memory/pointer_traits | provides information about pointer-like types | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc polymorphic allocator</title>
    <ns>10</ns>
    <id>14860</id>
    <revision>
      <id>84178</id>
      <parentid>84177</parentid>
      <timestamp>2016-03-16T15:55:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="185">{{dsc tclass | cpp/memory/polymorphic_allocator | an allocator that supports run-time polymorphism based on the {{lc|std::memory_resource}} it is constructed with|notes={{mark c++17}}}}</text>
      <sha1>mz8iuo82ukck6r5s6tuyfv5b1hk2zsx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc pool options</title>
    <ns>10</ns>
    <id>14897</id>
    <revision>
      <id>84226</id>
      <timestamp>2016-03-16T21:06:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc class | cpp/memory/pool_options| a set of constructor options for pool resources |notes={{mark c++17}}}}</text>
      <sha1>9nsrrrx7zxx5l25ni229bhmcyytvcf7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc raw storage iterator</title>
    <ns>10</ns>
    <id>3360</id>
    <revision>
      <id>86285</id>
      <parentid>58014</parentid>
      <timestamp>2016-06-27T08:41:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="173">{{dsc tclass | cpp/memory/raw_storage_iterator | an iterator that allows standard algorithms to store results in uninitialized memory | notes= {{mark|deprecated in C++17}}}}</text>
      <sha1>bls1fwpc8mngk8lno329wdfvixh0sqe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc resource adaptor</title>
    <ns>10</ns>
    <id>14865</id>
    <revision>
      <id>84187</id>
      <parentid>84184</parentid>
      <timestamp>2016-03-16T16:04:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>pmr</comment>
      <text xml:space="preserve" bytes="127">{{dsc talias | cpp/memory/resource_adaptor | adapts an allocator into a {{lc|std::pmr::memory_resource}}|notes={{mark c++17}}}}</text>
      <sha1>d0iy1nmtz5i2hxyvbo65eldqvgro1ni</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc return temporary buffer</title>
    <ns>10</ns>
    <id>3362</id>
    <revision>
      <id>86287</id>
      <parentid>58018</parentid>
      <timestamp>2016-06-27T08:41:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc tfun   | cpp/memory/return_temporary_buffer | frees uninitialized storage  | notes= {{mark|deprecated in C++17}}}}</text>
      <sha1>m310zj6qpmvxmpw43qejedekoxxdqvb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc scoped allocator adaptor</title>
    <ns>10</ns>
    <id>3359</id>
    <revision>
      <id>58022</id>
      <parentid>53606</parentid>
      <timestamp>2013-06-01T06:05:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list scoped allocator adaptor]] to [[Template:cpp/memory/dsc scoped allocator adaptor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc tclass | cpp/memory/scoped_allocator_adaptor | implements multi-level allocator for multi-level containers | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc set default resource</title>
    <ns>10</ns>
    <id>14869</id>
    <revision>
      <id>84190</id>
      <timestamp>2016-03-16T16:06:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | cpp/memory/set_default_resource | sets the default {{lc|std::pmr::memory_resource}}|notes={{mark c++17}} }}</text>
      <sha1>4heoes18pxs96bd39ogud2w4d35kb2k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc shared ptr</title>
    <ns>10</ns>
    <id>3364</id>
    <revision>
      <id>58026</id>
      <parentid>53609</parentid>
      <timestamp>2013-06-01T06:05:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list shared ptr]] to [[Template:cpp/memory/dsc shared ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc tclass | cpp/memory/shared_ptr | smart pointer with shared object ownership semantics | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc swap</title>
    <ns>10</ns>
    <id>5303</id>
    <revision>
      <id>58029</id>
      <parentid>53612</parentid>
      <timestamp>2013-06-01T06:05:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list swap]] to [[Template:cpp/memory/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc mem fun | cpp/memory/{{{1|}}}/swap | swaps the contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc synchronized pool resource</title>
    <ns>10</ns>
    <id>14871</id>
    <revision>
      <id>84192</id>
      <timestamp>2016-03-16T16:07:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="182">{{dsc class | cpp/memory/synchronized_pool_resource | a thread-safe {{lc|std::pmr::memory_resource}} for managing allocations in pools of different block sizes|notes={{mark c++17}}}}</text>
      <sha1>sskciokv1z1pq1n5iph6a2safdzezqw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized copy</title>
    <ns>10</ns>
    <id>2438</id>
    <revision>
      <id>58032</id>
      <parentid>53613</parentid>
      <timestamp>2013-06-01T06:06:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list uninitialized copy]] to [[Template:cpp/memory/dsc uninitialized copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/memory/uninitialized_copy | copies a range of objects to an uninitialized area of memory}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized copy n</title>
    <ns>10</ns>
    <id>2439</id>
    <revision>
      <id>58036</id>
      <parentid>53616</parentid>
      <timestamp>2013-06-01T06:06:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list uninitialized copy n]] to [[Template:cpp/memory/dsc uninitialized copy n]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/memory/uninitialized_copy_n | copies a number of objects to an uninitialized area of memory |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized default construct</title>
    <ns>10</ns>
    <id>15623</id>
    <revision>
      <id>86828</id>
      <parentid>86809</parentid>
      <timestamp>2016-07-13T00:06:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="221">{{dsc tfun | cpp/memory/uninitialized_default_construct | constructs objects by [[cpp/language/default_initialization|default-initialization]] in an uninitialized area of memory, defined by a range| notes={{mark c++17}}}}</text>
      <sha1>a0faaf7gmo6h11jgc2ifoom7pjg5gp5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized default construct n</title>
    <ns>10</ns>
    <id>15624</id>
    <revision>
      <id>86829</id>
      <parentid>86812</parentid>
      <timestamp>2016-07-13T00:07:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="236">{{dsc tfun | cpp/memory/uninitialized_default_construct_n | constructs objects by [[cpp/language/default_initialization|default-initialization]] in an uninitialized area of memory, defined by a start and a count| notes={{mark c++17}} }}</text>
      <sha1>qfeje03b6m44nsym42hnrvbqgm0gr69</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized fill</title>
    <ns>10</ns>
    <id>2440</id>
    <revision>
      <id>85261</id>
      <parentid>85260</parentid>
      <timestamp>2016-04-12T19:26:23Z</timestamp>
      <contributor>
        <username>Murrayc</username>
        <id>5228</id>
      </contributor>
      <comment>To distinguish it from uninitialized_fill_n</comment>
      <text xml:space="preserve" bytes="118">{{dsc tfun | cpp/memory/uninitialized_fill | copies an object to an uninitialized area of memory, defined by a range}}</text>
      <sha1>b30wrimb4mvpnzolffqqoxvrbdby702</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized fill n</title>
    <ns>10</ns>
    <id>2441</id>
    <revision>
      <id>85262</id>
      <parentid>58042</parentid>
      <timestamp>2016-04-12T19:27:33Z</timestamp>
      <contributor>
        <username>Murrayc</username>
        <id>5228</id>
      </contributor>
      <comment>To distinguish it from uninitialized_fill</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/memory/uninitialized_fill_n | copies an object to an uninitialized area of memory, defined by a start and a count}}</text>
      <sha1>hhhmbiphnjssry9kg39awg6s5v08hpl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized move</title>
    <ns>10</ns>
    <id>15630</id>
    <revision>
      <id>86826</id>
      <parentid>86797</parentid>
      <timestamp>2016-07-13T00:06:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="129">{{dsc tfun | cpp/memory/uninitialized_move | moves a range of objects to an uninitialized area of memory | notes={{mark c++17}}}}</text>
      <sha1>qlwpmzhewsg1gmg4qgygvtk41t7e9sg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized move n</title>
    <ns>10</ns>
    <id>15631</id>
    <revision>
      <id>86827</id>
      <parentid>86798</parentid>
      <timestamp>2016-07-13T00:06:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/memory/uninitialized_move_n | moves a number of objects to an uninitialized area of memory| notes={{mark c++17}}}}</text>
      <sha1>ohifrdr0p6zwhxzdaqcpwrl3qgkjejz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized value construct</title>
    <ns>10</ns>
    <id>15625</id>
    <revision>
      <id>86830</id>
      <parentid>86813</parentid>
      <timestamp>2016-07-13T00:07:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="215">{{dsc tfun | cpp/memory/uninitialized_value_construct | constructs objects by [[cpp/language/value_initialization|value-initialization]] in an uninitialized area of memory, defined by a range| notes={{mark c++17}}}}</text>
      <sha1>spcbin6j9mj0mokmv8yv4ptcz7cujwp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uninitialized value construct n</title>
    <ns>10</ns>
    <id>15626</id>
    <revision>
      <id>86831</id>
      <parentid>86814</parentid>
      <timestamp>2016-07-13T00:07:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="230">{{dsc tfun | cpp/memory/uninitialized_value_construct_n | constructs objects by [[cpp/language/value_initialization|value-initialization]] in an uninitialized area of memory, defined by a start and a count | notes={{mark c++17}}}}</text>
      <sha1>4e9s8r9kkgsebc5iembh515rep4sq65</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc unique ptr</title>
    <ns>10</ns>
    <id>3363</id>
    <revision>
      <id>58045</id>
      <parentid>53623</parentid>
      <timestamp>2013-06-01T06:06:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list unique ptr]] to [[Template:cpp/memory/dsc unique ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc tclass | cpp/memory/unique_ptr | smart pointer with unique object ownership semantics | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc unsynchronized pool resource</title>
    <ns>10</ns>
    <id>14872</id>
    <revision>
      <id>84193</id>
      <timestamp>2016-03-16T16:08:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="186">{{dsc class | cpp/memory/unsynchronized_pool_resource | a thread-unsafe {{lc|std::pmr::memory_resource}} for managing allocations in pools of different block sizes|notes={{mark c++17}}}}</text>
      <sha1>me7xtqlz6ib37cuz0hys77uexxgajsa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc uses allocator</title>
    <ns>10</ns>
    <id>3248</id>
    <revision>
      <id>58049</id>
      <parentid>53626</parentid>
      <timestamp>2013-06-01T06:06:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list uses allocator]] to [[Template:cpp/memory/dsc uses allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc tclass | cpp/memory/uses_allocator | checks if the specified type supports uses-allocator construction | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/dsc weak ptr</title>
    <ns>10</ns>
    <id>3365</id>
    <revision>
      <id>58053</id>
      <parentid>53629</parentid>
      <timestamp>2013-06-01T06:06:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/dcl list weak ptr]] to [[Template:cpp/memory/dsc weak ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc tclass | cpp/memory/weak_ptr   | weak reference to an object managed by {{lc|std::shared_ptr}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/enable shared from this/navbar</title>
    <ns>10</ns>
    <id>3426</id>
    <revision>
      <id>39965</id>
      <parentid>35904</parentid>
      <timestamp>2012-09-28T20:12:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="355">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/enable_shared_from_this/navbar heading
|content4 = cpp/memory/enable_shared_from_this/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/enable shared from this/navbar content</title>
    <ns>10</ns>
    <id>3428</id>
    <revision>
      <id>83931</id>
      <parentid>83930</parentid>
      <timestamp>2016-03-13T20:14:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>rev mark</comment>
      <text xml:space="preserve" bytes="469">{{nv begin}}
{{nv h1 | Protected member functions}}
{{nv mem ln | cpp/memory/enable_shared_from_this/enable_shared_from_this}}
{{nv mem ln | cpp/memory/enable_shared_from_this/~enable_shared_from_this}}
{{nv mem ln | cpp/memory/enable_shared_from_this/operator{{=}}}}
{{nv h1 | Public member functions}}
{{nv mem ln | cpp/memory/enable_shared_from_this/shared_from_this}}
{{nv mem ln | cpp/memory/enable_shared_from_this/weak_from_this|notes={{mark c++17}}}}
{{nv end}}</text>
      <sha1>pv34f811s3shms36wvj6gsbl7l0efjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/enable shared from this/navbar heading</title>
    <ns>10</ns>
    <id>3427</id>
    <revision>
      <id>48040</id>
      <parentid>35793</parentid>
      <timestamp>2013-05-18T17:59:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="71">{{ltt|cpp/memory/enable_shared_from_this|std::enable_shared_from_this}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/enable shared from this/title</title>
    <ns>10</ns>
    <id>8456</id>
    <revision>
      <id>30832</id>
      <timestamp>2012-05-11T22:24:18Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>created</comment>
      <text xml:space="preserve" bytes="120">&lt;onlyinclude&gt;{{cpp/title | n=enable_shared_from_this::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/example1</title>
    <ns>10</ns>
    <id>5316</id>
    <revision>
      <id>80287</id>
      <parentid>80285</parentid>
      <timestamp>2015-08-02T12:24:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>what is &quot;unmanaged&quot;? also, it certainly points at uninitialized memory at that point.. trying to rephrase comments in terms of postconditions</comment>
      <text xml:space="preserve" bytes="893">{{example |
|code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;

int main()
{
    const std::string s[] = {&quot;string&quot;, &quot;1&quot;, &quot;test&quot;, &quot;...&quot;};
    const auto p = std::get_temporary_buffer&lt;std::string&gt;(4);
    // requires that p.first is passed to return_temporary_buffer
    // (beware of early exit points and exceptions)

    std::copy(s, s + p.second,
              std::raw_storage_iterator&lt;std::string*, std::string&gt;(p.first));
    // requires that each string in p is individually destroyed
    // (beware of early exit points and exceptions)

    std::copy(p.first, p.first + p.second,
              std::ostream_iterator&lt;std::string&gt;{std::cout, &quot;\n&quot;});

    std::for_each(p.first, p.first + p.second, [](std::string&amp; e) {
        e.~basic_string&lt;char&gt;();
    });

    std::return_temporary_buffer(p.first);
}
|output=
string
1
test
...
}}</text>
      <sha1>bbdz7qxy6td20uyg1b1mhhzchwyksai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/gc/dsc declare no pointers</title>
    <ns>10</ns>
    <id>3373</id>
    <revision>
      <id>58066</id>
      <parentid>53639</parentid>
      <timestamp>2013-06-01T06:07:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/gc/dcl list declare no pointers]] to [[Template:cpp/memory/gc/dsc declare no pointers]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc fun | cpp/memory/gc/declare_no_pointers | declares that a memory area does not contain traceable pointers |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/gc/dsc declare reachable</title>
    <ns>10</ns>
    <id>3371</id>
    <revision>
      <id>58070</id>
      <parentid>53642</parentid>
      <timestamp>2013-06-01T06:07:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/gc/dcl list declare reachable]] to [[Template:cpp/memory/gc/dsc declare reachable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc fun | cpp/memory/gc/declare_reachable | declares that an object can not be recycled  |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/gc/dsc get pointer safety</title>
    <ns>10</ns>
    <id>3376</id>
    <revision>
      <id>58074</id>
      <parentid>53643</parentid>
      <timestamp>2013-06-01T06:07:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/gc/dcl list get pointer safety]] to [[Template:cpp/memory/gc/dsc get pointer safety]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | cpp/memory/gc/get_pointer_safety | returns the current pointer safety model |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/gc/dsc pointer safety</title>
    <ns>10</ns>
    <id>3375</id>
    <revision>
      <id>58078</id>
      <parentid>53646</parentid>
      <timestamp>2013-06-01T06:07:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/gc/dcl list pointer safety]] to [[Template:cpp/memory/gc/dsc pointer safety]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc class | cpp/memory/gc/pointer_safety | lists pointer safety models |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/gc/dsc undeclare no pointers</title>
    <ns>10</ns>
    <id>3374</id>
    <revision>
      <id>58081</id>
      <parentid>53649</parentid>
      <timestamp>2013-06-01T06:07:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/gc/dcl list undeclare no pointers]] to [[Template:cpp/memory/gc/dsc undeclare no pointers]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc fun | cpp/memory/gc/undeclare_no_pointers | cancels the effect of {{lc|std::declare_no_pointers}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/gc/dsc undeclare reachable</title>
    <ns>10</ns>
    <id>3372</id>
    <revision>
      <id>58085</id>
      <parentid>53652</parentid>
      <timestamp>2013-06-01T06:07:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/gc/dcl list undeclare reachable]] to [[Template:cpp/memory/gc/dsc undeclare reachable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc tfun | cpp/memory/gc/undeclare_reachable | declares that an object can be recycled |notes= {{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc allocate</title>
    <ns>10</ns>
    <id>14886</id>
    <revision>
      <id>84210</id>
      <timestamp>2016-03-16T16:20:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/memory/memory_resource/allocate | allocates memory}}</text>
      <sha1>r1hc85px7r33lfqpyf8kt4c81jt601w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc constructor</title>
    <ns>10</ns>
    <id>14902</id>
    <revision>
      <id>84233</id>
      <timestamp>2016-03-16T21:50:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem ctor | cpp/memory/memory_resource/memory_resource| constructs a new {{tt|memory_resource}} | notes={{mark implicit}}}}</text>
      <sha1>3iiumfvqvowh2appoztfh13eo5l90lr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc deallocate</title>
    <ns>10</ns>
    <id>14882</id>
    <revision>
      <id>84205</id>
      <timestamp>2016-03-16T16:16:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/memory/memory_resource/deallocate | deallocates memory}}</text>
      <sha1>ggsyac3ywz5wh0xvvk7k8xze9nhve1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc destructor</title>
    <ns>10</ns>
    <id>14903</id>
    <revision>
      <id>84234</id>
      <timestamp>2016-03-16T21:50:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem vdtor | nolink=true | destructs an {{tt|memory_resource}}}}</text>
      <sha1>pu6ee98v1ve76475cq6v2dej8s3onk8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14909</id>
    <revision>
      <id>86360</id>
      <parentid>84240</parentid>
      <timestamp>2016-06-28T10:00:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2724</comment>
      <text xml:space="preserve" bytes="82">{{dsc priv mem vfun  | cpp/memory/memory_resource/do_allocate | allocates memory}}</text>
      <sha1>1jvivvhv14amiylwhk82welnlxrfv2f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14911</id>
    <revision>
      <id>86359</id>
      <parentid>84242</parentid>
      <timestamp>2016-06-28T10:00:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2724</comment>
      <text xml:space="preserve" bytes="86">{{dsc priv mem vfun  | cpp/memory/memory_resource/do_deallocate | deallocates memory}}</text>
      <sha1>m394yy0xf79aa44a2nzacgh0s8q5mli</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14912</id>
    <revision>
      <id>86358</id>
      <parentid>84243</parentid>
      <timestamp>2016-06-28T10:00:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2724</comment>
      <text xml:space="preserve" bytes="122">{{dsc priv mem vfun  | cpp/memory/memory_resource/do_is_equal | compare for equality with another {{tt|memory_resource}}}}</text>
      <sha1>rg2wd8zfuoo1ea495ws68cn1706g7sp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc is equal</title>
    <ns>10</ns>
    <id>14905</id>
    <revision>
      <id>84236</id>
      <timestamp>2016-03-16T21:51:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/memory/memory_resource/is_equal | compare for equality with another {{tt|memory_resource}}}}</text>
      <sha1>82nug69khi0h3jzcygbw27cesgg9ash</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc operator eq</title>
    <ns>10</ns>
    <id>14913</id>
    <revision>
      <id>84244</id>
      <timestamp>2016-03-16T21:57:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="122">{{dsc fun  | cpp/memory/memory_resource/operator_eq | title=operator==&lt;br&gt;operator!=|compare two {{tt|memory_resource}}s}}</text>
      <sha1>mz1ea1ifrkygp3jp1a33xie8olde94q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/dsc operator=</title>
    <ns>10</ns>
    <id>14904</id>
    <revision>
      <id>84235</id>
      <timestamp>2016-03-16T21:51:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun | operator{{=}} | nolink=true| notes={{mark implicit}} | Implicitly declared copy assignment operator}}</text>
      <sha1>llqsyay1i84dbxv02w7ux96h079vjw3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/navbar</title>
    <ns>10</ns>
    <id>14899</id>
    <revision>
      <id>84230</id>
      <timestamp>2016-03-16T21:48:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="259">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/memory_resource/navbar heading
|content3 = cpp/memory/memory_resource/navbar content
}}</text>
      <sha1>4s2j6fzxo7fygunu2yty6e4tkepffrl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/navbar content</title>
    <ns>10</ns>
    <id>14901</id>
    <revision>
      <id>86361</id>
      <parentid>84232</parentid>
      <timestamp>2016-06-28T10:01:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2724</comment>
      <text xml:space="preserve" bytes="596">{{nv begin}}
{{nv mem ln | cpp/memory/memory_resource/memory_resource }}
{{nv h2|Public member functions}}
{{nv mem ln | cpp/memory/memory_resource/allocate }}
{{nv mem ln | cpp/memory/memory_resource/deallocate }}
{{nv mem ln | cpp/memory/memory_resource/is_equal }}
{{nv h2|Private member functions}}
{{nv mem ln | cpp/memory/memory_resource/do_allocate }}
{{nv mem ln | cpp/memory/memory_resource/do_deallocate }}
{{nv mem ln | cpp/memory/memory_resource/do_is_equal }}
{{nv h2|Non-member functions}}
{{nv ln | cpp/memory/memory_resource/operator_eq |operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1>ij9mklf031c8mc1xw5zvka6ads1tiyb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/navbar heading</title>
    <ns>10</ns>
    <id>14900</id>
    <revision>
      <id>84231</id>
      <timestamp>2016-03-16T21:48:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="60">{{ltt|cpp/memory/memory_resource|std::pmr::memory_resource}}</text>
      <sha1>hii9ein011d5q6mwfgenltpjqe5w2h5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/memory resource/title</title>
    <ns>10</ns>
    <id>14906</id>
    <revision>
      <id>84237</id>
      <timestamp>2016-03-16T21:52:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=pmr::memory_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>awns5mrkq03bhx3b5pythqckdii6rff</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc constructor</title>
    <ns>10</ns>
    <id>14972</id>
    <revision>
      <id>84322</id>
      <timestamp>2016-03-17T14:15:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="129">{{dsc mem ctor | cpp/memory/monotonic_buffer_resource/monotonic_buffer_resource | Constructs a {{tt|monotonic_buffer_resource}}}}</text>
      <sha1>0yq4nvgewsuw36n70dux3dfsup975g7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc destructor</title>
    <ns>10</ns>
    <id>14973</id>
    <revision>
      <id>84323</id>
      <timestamp>2016-03-17T14:16:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem vdtor | cpp/memory/monotonic_buffer_resource/~monotonic_buffer_resource | Destroys a {{tt|monotonic_buffer_resource}}, releasing all allocated memory}}</text>
      <sha1>2luseobi5pwx60bhwh6tzaevsn7mie7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14977</id>
    <revision>
      <id>84327</id>
      <timestamp>2016-03-17T14:17:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc prot mem vfun | cpp/memory/monotonic_buffer_resource/do_allocate | Allocate memory }}</text>
      <sha1>om1dofci6pzr2agpdw82i80bquwoedu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14978</id>
    <revision>
      <id>84328</id>
      <timestamp>2016-03-17T14:18:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="83">{{dsc prot mem vfun | cpp/memory/monotonic_buffer_resource/do_deallocate | No-op }}</text>
      <sha1>4r0dc65j2gd5rms04v9yewstfjvkpjz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14979</id>
    <revision>
      <id>84329</id>
      <timestamp>2016-03-17T14:18:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">{{dsc prot mem vfun | cpp/memory/monotonic_buffer_resource/do_is_equal | Compare for equality with another {{lc|std::pmr::memory_resource}} }}</text>
      <sha1>i775j4c7208n4nd9pt23dxn3owv950k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc operator=</title>
    <ns>10</ns>
    <id>14974</id>
    <revision>
      <id>84324</id>
      <timestamp>2016-03-17T14:16:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="163">{{dsc mem fun|nolink=true | operator{{=}} | notes={{cmark deleted}}| Copy assignment operator is deleted. {{tt|monotonic_buffer_resource}} is not copy assignable}}</text>
      <sha1>c88fgatqjv0ujggef6a17vvyieo2zo4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc release</title>
    <ns>10</ns>
    <id>14975</id>
    <revision>
      <id>84325</id>
      <timestamp>2016-03-17T14:17:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/memory/monotonic_buffer_resource/release| Release all allocated memory}}</text>
      <sha1>d4wfr02gxba5zzgab8zev3z74ppm9f5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/dsc upstream resource</title>
    <ns>10</ns>
    <id>14976</id>
    <revision>
      <id>84326</id>
      <timestamp>2016-03-17T14:17:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem fun | cpp/memory/monotonic_buffer_resource/upstream_resource | Returns a pointer to the upstream memory resource}}</text>
      <sha1>tlzj0gcrehauceri7xfc66mrwe3d91c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/navbar</title>
    <ns>10</ns>
    <id>14969</id>
    <revision>
      <id>84319</id>
      <timestamp>2016-03-17T14:13:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="279">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/monotonic_buffer_resource/navbar heading
|content3 = cpp/memory/monotonic_buffer_resource/navbar content
}}</text>
      <sha1>he96fxgpw1raabn9rcqlp8gkqthyndu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/navbar content</title>
    <ns>10</ns>
    <id>14971</id>
    <revision>
      <id>84321</id>
      <timestamp>2016-03-17T14:15:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="587">{{nv begin}}
{{nv mem ln | cpp/memory/monotonic_buffer_resource/monotonic_buffer_resource}}
{{nv mem ln | cpp/memory/monotonic_buffer_resource/~monotonic_buffer_resource}}
{{nv h2 | Public member functions}}
{{nv mem ln | cpp/memory/monotonic_buffer_resource/release}}
{{nv mem ln | cpp/memory/monotonic_buffer_resource/upstream_resource}}
{{nv h2|Protected member functions}}
{{nv mem ln | cpp/memory/monotonic_buffer_resource/do_allocate }}
{{nv mem ln | cpp/memory/monotonic_buffer_resource/do_deallocate }}
{{nv mem ln | cpp/memory/monotonic_buffer_resource/do_is_equal }}
{{nv end}}</text>
      <sha1>hkk3ncpk3idxopvjivdc8xgl5trfy34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/navbar heading</title>
    <ns>10</ns>
    <id>14970</id>
    <revision>
      <id>84320</id>
      <timestamp>2016-03-17T14:14:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="80">{{ltt|cpp/memory/monotonic_buffer_resource|std::pmr::monotonic_buffer_resource}}</text>
      <sha1>fixxb3goe6fvstpwexgwhodbfr0xf4i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/monotonic buffer resource/title</title>
    <ns>10</ns>
    <id>14981</id>
    <revision>
      <id>84331</id>
      <timestamp>2016-03-17T14:22:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">&lt;onlyinclude&gt;{{cpp/title | n=pmr::monotonic_buffer_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>9ileaol65ikm3x6exf3ispmpauwiaex</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/navbar</title>
    <ns>10</ns>
    <id>2117</id>
    <revision>
      <id>39966</id>
      <parentid>36074</parentid>
      <timestamp>2012-09-28T20:12:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="229">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/navbar content</title>
    <ns>10</ns>
    <id>2158</id>
    <revision>
      <id>86821</id>
      <parentid>86820</parentid>
      <timestamp>2016-07-12T23:58:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="4061">{{nv begin}}
{{nv col begin}}
{{nv h1 | Smart pointers}}
{{nv ln | cpp/memory/unique_ptr | notes={{mark c++11}} }}
{{nv ln | cpp/memory/shared_ptr | notes={{mark c++11}} }}
{{nv ln | cpp/memory/weak_ptr | notes={{mark c++11}} }}
{{nv ln | cpp/memory/auto_ptr | notes={{mark until c++17}} }}
{{nv ln | cpp/memory/owner_less | notes={{mark c++11}} }}
{{nv ln | cpp/memory/enable_shared_from_this | notes={{mark c++11}} }}
{{nv ln | cpp/memory/bad_weak_ptr | notes={{mark c++11}} }}
{{nv ln | cpp/memory/default_delete | notes={{mark c++11}} }}

{{nv h1 | Allocators}}
{{nv ln | cpp/memory/allocator}}
{{nv ln | cpp/memory/allocator_traits | notes={{mark c++11}} }}
{{nv ln | cpp/memory/allocator_arg_t | notes={{mark c++11}} }}
{{nv ln | cpp/memory/allocator_arg | notes={{mark c++11}} }}
{{nv ln | cpp/memory/uses_allocator | notes={{mark c++11}} }}
{{nv ln | cpp/memory/scoped_allocator_adaptor | notes={{mark c++11}} }}
{{nv ln | cpp/memory/polymorphic_allocator|pmr::polymorphic_allocator|notes={{mark c++17}} }}

{{nv h1 | Memory resources}}
{{nv ln | cpp/memory/memory_resource|pmr::memory_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/get_default_resource|pmr::get_default_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/set_default_resource|pmr::set_default_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/new_delete_resource|pmr::new_delete_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/null_memory_resource|pmr::null_memory_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/synchronized_pool_resource|pmr::synchronized_pool_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/unsynchronized_pool_resource|pmr::unsynchronized_pool_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/monotonic_buffer_resource|pmr::monotonic_buffer_resource|notes={{mark c++17}}}}
{{nv ln | cpp/memory/pool_options|pmr::pool_options|notes={{mark c++17}}}}

{{nv col next}}

{{nv h1 | Uninitialized storage}}
{{nv col begin}}
{{nv ln | cpp/memory/uninitialized_copy }}
{{nv ln | cpp/memory/uninitialized_fill }}
{{nv ln | cpp/memory/uninitialized_move | notes={{mark c++17}} }}
{{nv ln | cpp/memory/uninitialized_default_construct | notes={{mark c++17}} }}
{{nv ln | cpp/memory/uninitialized_value_construct | notes={{mark c++17}} }}
{{nv ln | cpp/memory/destroy | notes={{mark c++17}} }}
{{nv col next}}
{{nv ln | cpp/memory/uninitialized_copy_n | notes={{mark c++11}} }}
{{nv ln | cpp/memory/uninitialized_fill_n }}
{{nv ln | cpp/memory/uninitialized_move_n | notes={{mark c++17}} }}
{{nv ln | cpp/memory/uninitialized_default_construct_n | notes={{mark c++17}} }}
{{nv ln | cpp/memory/uninitialized_value_construct_n | notes={{mark c++17}} }}
{{nv ln | cpp/memory/destroy_n | notes={{mark c++17}} }}
{{nv col end}}
{{nv ln | cpp/memory/destroy_at | notes={{mark c++17}} }}
{{nv ln | cpp/memory/raw_storage_iterator | notes={{mark|deprecated since c++17}}}}
{{nv ln | cpp/memory/get_temporary_buffer | notes={{mark|deprecated since c++17}}}}
{{nv ln | cpp/memory/return_temporary_buffer | notes={{mark|deprecated since c++17}}}}

{{nv h1 | Garbage collection support}}
{{nv ln | cpp/memory/gc/declare_reachable | notes={{mark c++11}} }}
{{nv ln | cpp/memory/gc/undeclare_reachable | notes={{mark c++11}} }}
{{nv ln | cpp/memory/gc/declare_no_pointers | notes={{mark c++11}} }}
{{nv ln | cpp/memory/gc/undeclare_no_pointers | notes={{mark c++11}} }}
{{nv ln | cpp/memory/gc/pointer_safety | notes={{mark c++11}} }}
{{nv ln | cpp/memory/gc/get_pointer_safety | notes={{mark c++11}} }}

{{nv h1 | Miscellaneous}}
{{nv ln | cpp/memory/pointer_traits | notes={{mark c++11}} }}
{{nv ln | cpp/memory/addressof | notes={{mark c++11}} }}
{{nv ln | cpp/memory/align | notes={{mark c++11}} }}

{{nv h1 | [[cpp/memory/c|C Library]]}}
{{nv col begin}}
{{nv ln | cpp/memory/c/malloc}}
{{nv ln | cpp/memory/c/aligned_alloc|notes={{mark c++17}}}}
{{nv ln | cpp/memory/c/calloc}}
{{nv col next}}
{{nv ln | cpp/memory/c/realloc}}
{{nv ln | cpp/memory/c/free}}
{{nv col end}}

{{nv h1 | [[cpp/memory/new|Low level memory management]]}}
{{nv col end}}
{{nv end}}</text>
      <sha1>58zh0n55492u55zqi1c3ai2a1ak71af</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/navbar heading</title>
    <ns>10</ns>
    <id>2118</id>
    <revision>
      <id>35808</id>
      <parentid>4525</parentid>
      <timestamp>2012-06-15T22:32:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/sidebar heading]] to [[Template:cpp/memory/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="42">[[cpp/memory | Dynamic memory management]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad alloc/inherit</title>
    <ns>10</ns>
    <id>5580</id>
    <revision>
      <id>20556</id>
      <parentid>20555</parentid>
      <timestamp>2012-03-28T12:58:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="74">{{inherited | [[cpp/memory/new/bad_alloc | {{small|std::}}bad_alloc]] | }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad alloc/navbar</title>
    <ns>10</ns>
    <id>5581</id>
    <revision>
      <id>39967</id>
      <parentid>36073</parentid>
      <timestamp>2012-09-28T20:12:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="419">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/new/navbar heading
|content4 = cpp/memory/new/navbar content

|heading5 = cpp/memory/new/bad_alloc/navbar heading
|content5 = cpp/memory/new/bad_alloc/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad alloc/navbar content</title>
    <ns>10</ns>
    <id>5584</id>
    <revision>
      <id>53656</id>
      <parentid>35795</parentid>
      <timestamp>2013-06-01T05:04:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="153">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/new/bad_alloc/bad_alloc}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad alloc/navbar heading</title>
    <ns>10</ns>
    <id>5585</id>
    <revision>
      <id>35796</id>
      <parentid>20562</parentid>
      <timestamp>2012-06-15T22:32:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/bad alloc/sidebar heading]] to [[Template:cpp/memory/new/bad alloc/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/memory/new/bad_alloc|std::bad_alloc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad alloc/title</title>
    <ns>10</ns>
    <id>5002</id>
    <revision>
      <id>18073</id>
      <timestamp>2012-01-20T15:02:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=bad_alloc::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad array new length/navbar</title>
    <ns>10</ns>
    <id>5582</id>
    <revision>
      <id>39968</id>
      <parentid>36072</parentid>
      <timestamp>2012-09-28T20:12:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="441">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/new/navbar heading
|content4 = cpp/memory/new/navbar content

|heading5 = cpp/memory/new/bad_array_new_length/navbar heading
|content5 = cpp/memory/new/bad_array_new_length/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad array new length/navbar content</title>
    <ns>10</ns>
    <id>5583</id>
    <revision>
      <id>53659</id>
      <parentid>35496</parentid>
      <timestamp>2013-06-01T05:04:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="175">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/new/bad_array_new_length/bad_array_new_length}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad array new length/navbar heading</title>
    <ns>10</ns>
    <id>5586</id>
    <revision>
      <id>35798</id>
      <parentid>20563</parentid>
      <timestamp>2012-06-15T22:32:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/bad array new length/sidebar heading]] to [[Template:cpp/memory/new/bad array new length/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="69">{{ltt|cpp/memory/new/bad_array_new_length|std::bad_array_new_length}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/bad array new length/title</title>
    <ns>10</ns>
    <id>5579</id>
    <revision>
      <id>20554</id>
      <timestamp>2012-03-28T12:57:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=bad_array_new_length::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc align val t</title>
    <ns>10</ns>
    <id>15676</id>
    <revision>
      <id>87169</id>
      <timestamp>2016-07-31T19:48:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="151">{{dsc class | cpp/memory/new/align_val_t | type used to pass alignment to alignment-aware allocation and deallocation functions |notes={{mark c++17}}}}</text>
      <sha1>km0kq0csdde2egv3utpon32iy6d15zp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc bad alloc</title>
    <ns>10</ns>
    <id>3299</id>
    <revision>
      <id>58089</id>
      <parentid>53662</parentid>
      <timestamp>2013-06-01T06:07:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list bad alloc]] to [[Template:cpp/memory/new/dsc bad alloc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc class | cpp/memory/new/bad_alloc | exception thrown when memory allocation fails }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc bad array new length</title>
    <ns>10</ns>
    <id>3300</id>
    <revision>
      <id>58093</id>
      <parentid>53663</parentid>
      <timestamp>2013-06-01T06:07:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list bad array new length]] to [[Template:cpp/memory/new/dsc bad array new length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc class | cpp/memory/new/bad_array_new_length | exception thrown on allocation of array with invalid length | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc get new handler</title>
    <ns>10</ns>
    <id>3297</id>
    <revision>
      <id>58097</id>
      <parentid>53666</parentid>
      <timestamp>2013-06-01T06:07:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list get new handler]] to [[Template:cpp/memory/new/dsc get new handler]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | cpp/memory/new/get_new_handler | obtains the current new handler | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc new handler</title>
    <ns>10</ns>
    <id>3302</id>
    <revision>
      <id>58101</id>
      <parentid>53669</parentid>
      <timestamp>2013-06-01T06:07:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list new handler]] to [[Template:cpp/memory/new/dsc new handler]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc typedef | cpp/memory/new/new_handler | function pointer type of the new handler }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc nothrow</title>
    <ns>10</ns>
    <id>3303</id>
    <revision>
      <id>58105</id>
      <parentid>53672</parentid>
      <timestamp>2013-06-01T06:08:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list nothrow]] to [[Template:cpp/memory/new/dsc nothrow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc const | cpp/memory/new/nothrow | an object of type {{tt|nothrow_t}} used to select an non-throwing ''allocation function'' }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc nothrow t</title>
    <ns>10</ns>
    <id>3301</id>
    <revision>
      <id>58109</id>
      <parentid>53673</parentid>
      <timestamp>2013-06-01T06:08:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list nothrow t]] to [[Template:cpp/memory/new/dsc nothrow t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc class | cpp/memory/new/nothrow_t | tag type used to select an non-throwing ''allocation function'' }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc operator delete</title>
    <ns>10</ns>
    <id>3296</id>
    <revision>
      <id>58113</id>
      <parentid>53676</parentid>
      <timestamp>2013-06-01T06:08:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list operator delete]] to [[Template:cpp/memory/new/dsc operator delete]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc fun | cpp/memory/new/operator_delete | title=operator delete&lt;br&gt;operator delete[] | deallocation functions }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc operator new</title>
    <ns>10</ns>
    <id>3295</id>
    <revision>
      <id>58117</id>
      <parentid>53679</parentid>
      <timestamp>2013-06-01T06:08:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list operator new]] to [[Template:cpp/memory/new/dsc operator new]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc fun | cpp/memory/new/operator_new | title=operator new&lt;br&gt;operator new[] | allocation functions }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/dsc set new handler</title>
    <ns>10</ns>
    <id>3298</id>
    <revision>
      <id>58122</id>
      <parentid>53682</parentid>
      <timestamp>2013-06-01T06:08:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/dcl list set new handler]] to [[Template:cpp/memory/new/dsc set new handler]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc fun | cpp/memory/new/set_new_handler | registers a new handler}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/navbar</title>
    <ns>10</ns>
    <id>2161</id>
    <revision>
      <id>39969</id>
      <parentid>35885</parentid>
      <timestamp>2012-09-28T20:12:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="314">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/new/navbar heading
|content4 = cpp/memory/new/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/navbar content</title>
    <ns>10</ns>
    <id>3292</id>
    <revision>
      <id>87171</id>
      <parentid>76811</parentid>
      <timestamp>2016-07-31T19:48:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+align_val_t</comment>
      <text xml:space="preserve" bytes="632">{{nv begin}}
{{nv h1 | Functions}}
{{nv ln | cpp/memory/new/operator_new|operator new|operator new[]}}
{{nv ln | cpp/memory/new/operator_delete|operator delete|operator delete[]}}
{{nv ln | cpp/memory/new/get_new_handler|notes={{mark c++11}}}}
{{nv ln | cpp/memory/new/set_new_handler}}
{{nv h1 | Classes}}
{{nv ln | cpp/memory/new/bad_alloc}}
{{nv ln | cpp/memory/new/bad_array_new_length|notes={{mark c++11}}}}
{{nv ln | cpp/memory/new/nothrow_t}}
{{nv ln | cpp/memory/new/align_val_t|notes={{mark c++17}}}}
{{nv h1 | Types}}
{{nv ln | cpp/memory/new/new_handler}}
{{nv h1 | Objects}}
{{nv ln | cpp/memory/new/nothrow}}
{{nv end}}</text>
      <sha1>k5kud24e4kevsta4njmluynkdf5hgf1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/new/navbar heading</title>
    <ns>10</ns>
    <id>2162</id>
    <revision>
      <id>35800</id>
      <parentid>4854</parentid>
      <timestamp>2012-06-15T22:32:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/new/sidebar heading]] to [[Template:cpp/memory/new/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="48">[[cpp/memory/new | Low level memory management]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/owner before</title>
    <ns>10</ns>
    <id>5697</id>
    <revision>
      <id>91951</id>
      <parentid>90734</parentid>
      <timestamp>2017-03-31T20:17:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2494">{{cpp/memory/{{{1|}}}/title | owner_before}}
{{cpp/memory/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 1= 
template&lt; class Y &gt; 
bool owner_before( const {{{1}}}&lt;Y&gt;&amp; other) const;
}}
{{dcl | 1=
template&lt; class Y &gt;
bool owner_before( const std::{{#switch:{{{1|}}}|weak_ptr=shared_ptr|shared_ptr=weak_ptr|{{{~1}}}}}&lt;Y&gt;&amp; other) const;
}}
{{dcl end}}

Checks whether this {{tt|{{{1}}}}} precedes {{tt|other}} in implementation defined owner-based (as opposed to value-based) order. The order is such that two smart pointers compare equivalent only if they are both empty or if they both own the same object, even if the values of the pointers obtained by get() are different (e.g. because they point at different subobjects within the same object)

This ordering is used to make shared and weak pointers usable as keys in associative containers, typically through {{lc|std::owner_less}}.

===Parameters===
{{par begin}}
{{par | other | the {{lc|std::shared_ptr}} or {{lc|std::weak_ptr}} to be compared}}
{{par end}}

===Return value===
{{c|true}} if {{c|*this}} precedes {{tt|other}}, {{c|false}} otherwise. Common implementations compare the addresses of the control blocks.

{{#ifeq:{{{1|shared_ptr}}}|shared_ptr|
=== Exceptions ===
{{rev begin}}
{{rev | until=c++17 | (none)}}
{{rev | since=c++17 | {{unreviewed noexcept}}}}
{{rev end}}
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
 
struct Foo {
    int n1;
    int n2; 
    Foo(int a, int b) : n1(a), n2(b) {}
};
int main()
{   
    auto p1 = std::make_shared&lt;Foo&gt;(1, 2);
    std::shared_ptr&lt;int&gt; p2(p1, &amp;p1-&gt;n1);
    std::shared_ptr&lt;int&gt; p3(p1, &amp;p1-&gt;n2);

    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;p2 &lt; p3 &quot; &lt;&lt; (p2 &lt; p3) &lt;&lt; '\n'
              &lt;&lt; &quot;p3 &lt; p2 &quot; &lt;&lt; (p3 &lt; p2) &lt;&lt; '\n'
              &lt;&lt; &quot;p2.owner_before(p3) &quot; &lt;&lt; p2.owner_before(p3) &lt;&lt; '\n'
              &lt;&lt; &quot;p3.owner_before(p2) &quot; &lt;&lt; p3.owner_before(p2) &lt;&lt; '\n';

    std::weak_ptr&lt;int&gt; w2(p2);
    std::weak_ptr&lt;int&gt; w3(p3);
    std::cout 
//              &lt;&lt; &quot;w2 &lt; w3 &quot; &lt;&lt; (w2 &lt; w3) &lt;&lt; '\n'  // won't compile 
//              &lt;&lt; &quot;w3 &lt; w2 &quot; &lt;&lt; (w3 &lt; w2) &lt;&lt; '\n'  // won't compile
              &lt;&lt; &quot;w2.owner_before(w3) &quot; &lt;&lt; w2.owner_before(w3) &lt;&lt; '\n'
              &lt;&lt; &quot;w3.owner_before(w2) &quot; &lt;&lt; w3.owner_before(w2) &lt;&lt; '\n';

}
 | output=
p2 &lt; p3 true
p3 &lt; p2 false
p2.owner_before(p3) false
p3.owner_before(p2) false
w2.owner_before(w3) false
w3.owner_before(w2) false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc owner_less}}
{{dsc end}}</text>
      <sha1>itzw8bzhjoz4onoltso82xtidesm0y7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/pmr/title</title>
    <ns>10</ns>
    <id>14861</id>
    <revision>
      <id>84180</id>
      <timestamp>2016-03-16T15:58:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=pmr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}} | {{{4|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>9t5z6ftt92ovizisx0dwgbtbucxlern</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/pointer traits/dsc pointer to</title>
    <ns>10</ns>
    <id>15856</id>
    <revision>
      <id>89060</id>
      <timestamp>2016-12-27T16:54:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+ so it can be seealso'd</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem sfun | cpp/memory/pointer_traits/pointer_to | obtains a dereferenceable pointer to its argument  }}</text>
      <sha1>degv8bgev1q8xm3fk954upcfvp7cdxz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/pointer traits/navbar</title>
    <ns>10</ns>
    <id>9319</id>
    <revision>
      <id>39970</id>
      <parentid>39419</parentid>
      <timestamp>2012-09-28T20:12:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="259">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/pointer_traits/navbar heading
|content3 = cpp/memory/pointer_traits/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/pointer traits/navbar content</title>
    <ns>10</ns>
    <id>9321</id>
    <revision>
      <id>53689</id>
      <parentid>39421</parentid>
      <timestamp>2013-06-01T05:04:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="105">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/pointer_traits/pointer_to}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/pointer traits/navbar heading</title>
    <ns>10</ns>
    <id>9320</id>
    <revision>
      <id>48087</id>
      <parentid>39420</parentid>
      <timestamp>2013-05-18T18:07:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>v</comment>
      <text xml:space="preserve" bytes="53">{{ltt|cpp/memory/pointer_traits|std::pointer_traits}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/pointer traits/title</title>
    <ns>10</ns>
    <id>9318</id>
    <revision>
      <id>39418</id>
      <timestamp>2012-09-06T18:16:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=pointer_traits::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc allocate</title>
    <ns>10</ns>
    <id>14880</id>
    <revision>
      <id>84203</id>
      <timestamp>2016-03-16T16:15:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun|cpp/memory/polymorphic_allocator/allocate | Allocate memory }}</text>
      <sha1>sq1qrq20ody5ggu7k1webg843q7aale</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc construct</title>
    <ns>10</ns>
    <id>14887</id>
    <revision>
      <id>84211</id>
      <timestamp>2016-03-16T16:20:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun|cpp/memory/polymorphic_allocator/construct | Constructs an object in allocated storage }}</text>
      <sha1>62nn4mskf6lwwhixcdchpmy18pm4udh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc constructor</title>
    <ns>10</ns>
    <id>14874</id>
    <revision>
      <id>84196</id>
      <timestamp>2016-03-16T16:10:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem ctor|cpp/memory/polymorphic_allocator/polymorphic_allocator | Constructs a {{tt|polymorphic_allocator}}}}</text>
      <sha1>33e0ud0uyeb47tdbexrllwzmk7w2pp7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc deallocate</title>
    <ns>10</ns>
    <id>14883</id>
    <revision>
      <id>84206</id>
      <timestamp>2016-03-16T16:17:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun|cpp/memory/polymorphic_allocator/deallocate | Deallocate memory }}</text>
      <sha1>pg9x94md0aprmurwfzet2b6zvdkyonr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc destroy</title>
    <ns>10</ns>
    <id>14889</id>
    <revision>
      <id>84214</id>
      <timestamp>2016-03-16T16:23:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun|cpp/memory/polymorphic_allocator/destroy | Destroys an object in allocated storage }}</text>
      <sha1>iknord6gep7lfrwiql326rdsc63j7su</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc destructor</title>
    <ns>10</ns>
    <id>14877</id>
    <revision>
      <id>84200</id>
      <timestamp>2016-03-16T16:13:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem dtor | nolink=true | notes={{mark implicit}} | Implicitly declared destructor}}</text>
      <sha1>jmj0542oplaubg96761gnyulb105m5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc operator eq</title>
    <ns>10</ns>
    <id>14895</id>
    <revision>
      <id>84220</id>
      <timestamp>2016-03-16T16:27:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="134">{{dsc fun  | cpp/memory/polymorphic_allocator/operator_eq | title=operator==&lt;br&gt;operator!=|compare two {{tt|polymorphic_allocator}}s}}</text>
      <sha1>imbelna4ffevzk1cwrecj9jw079uccx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc operator=</title>
    <ns>10</ns>
    <id>14878</id>
    <revision>
      <id>86166</id>
      <parentid>84201</parentid>
      <timestamp>2016-06-24T16:18:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0337r0</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun| operator{{=}}  | nolink=true | notes={{cmark deleted}} | Copy assignment operator is deleted }}</text>
      <sha1>62h1hqq2aijo66gk6avquzkseteuoln</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc resource</title>
    <ns>10</ns>
    <id>14892</id>
    <revision>
      <id>84217</id>
      <timestamp>2016-03-16T16:25:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun|cpp/memory/polymorphic_allocator/resource| Returns a pointer to the underlying memory resource }}</text>
      <sha1>a1ydcfkl4stbpx8do71uaaw08mg522f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/dsc select on container copy construction</title>
    <ns>10</ns>
    <id>14891</id>
    <revision>
      <id>84216</id>
      <timestamp>2016-03-16T16:24:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="173">{{dsc mem fun|cpp/memory/polymorphic_allocator/select_on_container_copy_construction | Create a new {{tt|polymorphic_allocator}} for use by a container's copy constructor }}</text>
      <sha1>b813e6mc4w545lkaeiv4qamtzw8m0em</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/navbar</title>
    <ns>10</ns>
    <id>14862</id>
    <revision>
      <id>84181</id>
      <timestamp>2016-03-16T16:00:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="271">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/polymorphic_allocator/navbar heading
|content3 = cpp/memory/polymorphic_allocator/navbar content
}}</text>
      <sha1>n76ny8g15787psnhx0rl4owgvqifzij</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/navbar content</title>
    <ns>10</ns>
    <id>14885</id>
    <revision>
      <id>86169</id>
      <parentid>84208</parentid>
      <timestamp>2016-06-24T17:09:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-operator=</comment>
      <text xml:space="preserve" bytes="622">{{nv begin}}
{{nv h2|Member functions}}
{{nv mem ln | cpp/memory/polymorphic_allocator/polymorphic_allocator}}
{{nv mem ln | cpp/memory/polymorphic_allocator/allocate }}
{{nv mem ln | cpp/memory/polymorphic_allocator/deallocate }}
{{nv mem ln | cpp/memory/polymorphic_allocator/construct }}
{{nv mem ln | cpp/memory/polymorphic_allocator/destroy}}
{{nv mem ln | cpp/memory/polymorphic_allocator/select_on_container_copy_construction}}
{{nv mem ln | cpp/memory/polymorphic_allocator/resource}}
{{nv h2|Non-member functions}}
{{nv ln | cpp/memory/polymorphic_allocator/operator_eq |operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1>5ltkvo9tmyw3d16rty92z8z04iu2mwq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/navbar heading</title>
    <ns>10</ns>
    <id>14863</id>
    <revision>
      <id>84182</id>
      <timestamp>2016-03-16T16:00:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="72">{{ltt|cpp/memory/polymorphic_allocator|std::pmr::polymorphic_allocator}}</text>
      <sha1>eyvkc7lsk4it6azakopkhewlnvpmf8b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/polymorphic allocator/title</title>
    <ns>10</ns>
    <id>14876</id>
    <revision>
      <id>84199</id>
      <parentid>84198</parentid>
      <timestamp>2016-03-16T16:13:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="123">&lt;onlyinclude&gt;{{cpp/title | n=pmr::polymorphic_allocator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>89syqb0h3qfyu6ln8cv9zxt3ag919n5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/dsc base</title>
    <ns>10</ns>
    <id>14104</id>
    <revision>
      <id>78520</id>
      <timestamp>2015-05-24T14:51:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/memory/raw_storage_iterator/base | provides access to the wrapped iterator|notes={{mark since c++17}}}}</text>
      <sha1>pzw5ssm3pi9n6fb3hogljpnz7x5cqep</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/dsc constructor</title>
    <ns>10</ns>
    <id>10152</id>
    <revision>
      <id>61396</id>
      <parentid>58127</parentid>
      <timestamp>2013-06-05T22:59:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem ctor | cpp/memory/raw_storage_iterator/raw_storage_iterator | creates a new {{tt|raw_storage_iterator}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/dsc operator arith</title>
    <ns>10</ns>
    <id>10155</id>
    <revision>
      <id>58139</id>
      <parentid>53699</parentid>
      <timestamp>2013-06-01T06:08:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/raw storage iterator/dcl list operator arith]] to [[Template:cpp/memory/raw storage iterator/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc mem fun | cpp/memory/raw_storage_iterator/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | advances the iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/dsc operator*</title>
    <ns>10</ns>
    <id>10154</id>
    <revision>
      <id>61395</id>
      <parentid>58131</parentid>
      <timestamp>2013-06-05T22:59:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/memory/raw_storage_iterator/operator* | dereferences the iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/dsc operator=</title>
    <ns>10</ns>
    <id>10153</id>
    <revision>
      <id>81470</id>
      <parentid>58135</parentid>
      <timestamp>2015-10-27T09:56:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/memory/raw_storage_iterator/operator{{=}} | constructs an object at the pointed-to location in the buffer}}</text>
      <sha1>ptkz8s94jcl9q4f91peauh7ockqtkzc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/navbar</title>
    <ns>10</ns>
    <id>10156</id>
    <revision>
      <id>48446</id>
      <timestamp>2013-05-29T15:44:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="269">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/raw_storage_iterator/navbar heading
|content3 = cpp/memory/raw_storage_iterator/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/navbar content</title>
    <ns>10</ns>
    <id>12649</id>
    <revision>
      <id>78523</id>
      <parentid>61400</parentid>
      <timestamp>2015-05-24T14:53:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+base</comment>
      <text xml:space="preserve" bytes="409">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/raw_storage_iterator/raw_storage_iterator}}
{{nv mem ln | cpp/memory/raw_storage_iterator/operator{{=}}}}
{{nv mem ln | cpp/memory/raw_storage_iterator/operator*}}
{{nv mem ln | cpp/memory/raw_storage_iterator/base|notes={{mark c++17}}}}
{{nv mem ln | cpp/memory/raw_storage_iterator/operator_arith | operator++ | operator++(int)}}
{{nv end}}</text>
      <sha1>myf6ao3a6ch10n4mh4k3elo7xi5s9wu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/navbar heading</title>
    <ns>10</ns>
    <id>10157</id>
    <revision>
      <id>48447</id>
      <timestamp>2013-05-29T15:45:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="65">{{ltt|cpp/memory/raw_storage_iterator|std::raw_storage_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/raw storage iterator/title</title>
    <ns>10</ns>
    <id>8478</id>
    <revision>
      <id>31261</id>
      <timestamp>2012-05-17T03:02:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=raw_storage_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc allocate</title>
    <ns>10</ns>
    <id>5723</id>
    <revision>
      <id>58143</id>
      <parentid>53700</parentid>
      <timestamp>2013-06-01T06:08:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list allocate]] to [[Template:cpp/memory/scoped allocator adaptor/dsc allocate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/allocate | allocates uninitialized storage using the outer allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc construct</title>
    <ns>10</ns>
    <id>5726</id>
    <revision>
      <id>58148</id>
      <parentid>53703</parentid>
      <timestamp>2013-06-01T06:09:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list construct]] to [[Template:cpp/memory/scoped allocator adaptor/dsc construct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/construct | constructs an object in allocated storage, passing the inner allocator to its constructor if appropriate}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc deallocate</title>
    <ns>10</ns>
    <id>5724</id>
    <revision>
      <id>71611</id>
      <parentid>58152</parentid>
      <timestamp>2014-06-16T12:51:29Z</timestamp>
      <contributor>
        <username>Mhcox</username>
        <id>735</id>
      </contributor>
      <minor/>
      <comment>Typo</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/deallocate | deallocates storage using the outer allocator}}</text>
      <sha1>5qdpp8wy6dt9dt4twkd0p6rtmf0ub0p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc destroy</title>
    <ns>10</ns>
    <id>5727</id>
    <revision>
      <id>71610</id>
      <parentid>58157</parentid>
      <timestamp>2014-06-16T12:46:34Z</timestamp>
      <contributor>
        <username>Mhcox</username>
        <id>735</id>
      </contributor>
      <minor/>
      <comment>Typo</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/destroy | destructs an object in allocated storage}}</text>
      <sha1>o4ig6xuuh7vnmq11vismhpq0clq2ppv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc inner allocator</title>
    <ns>10</ns>
    <id>5721</id>
    <revision>
      <id>58161</id>
      <parentid>53710</parentid>
      <timestamp>2013-06-01T06:09:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list inner allocator]] to [[Template:cpp/memory/scoped allocator adaptor/dsc inner allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/inner_allocator | obtains an {{tt|inner_allocator}} reference}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc max size</title>
    <ns>10</ns>
    <id>5725</id>
    <revision>
      <id>58165</id>
      <parentid>53713</parentid>
      <timestamp>2013-06-01T06:09:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list max size]] to [[Template:cpp/memory/scoped allocator adaptor/dsc max size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/max_size | returns the largest allocation size supported by the outer allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc operator cmp</title>
    <ns>10</ns>
    <id>5729</id>
    <revision>
      <id>58169</id>
      <parentid>53716</parentid>
      <timestamp>2013-06-01T06:09:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list operator cmp]] to [[Template:cpp/memory/scoped allocator adaptor/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/operator_cmp |title=operator{{==}}&lt;br&gt;operator!{{=}}|compares two scoped_allocator_adaptor instances}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc operator=</title>
    <ns>10</ns>
    <id>14503</id>
    <revision>
      <id>81555</id>
      <timestamp>2015-10-27T21:52:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/operator{{=}}| assigns a {{tt|scoped_allocator_adaptor}}}}</text>
      <sha1>9cfhgk43xh3fj5mv7xmfsdaov3dm7c7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc outer allocator</title>
    <ns>10</ns>
    <id>5722</id>
    <revision>
      <id>58173</id>
      <parentid>53717</parentid>
      <timestamp>2013-06-01T06:09:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list outer allocator]] to [[Template:cpp/memory/scoped allocator adaptor/dsc outer allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/outer_allocator | obtains an {{tt|outer_allocator}} reference}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc scoped allocator adaptor</title>
    <ns>10</ns>
    <id>5719</id>
    <revision>
      <id>58176</id>
      <parentid>53720</parentid>
      <timestamp>2013-06-01T06:09:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list scoped allocator adaptor]] to [[Template:cpp/memory/scoped allocator adaptor/dsc scoped allocator adaptor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc mem ctor | cpp/memory/scoped_allocator_adaptor/scoped_allocator_adaptor | creates a new scoped_allocator_adaptor instance}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc select on container copy construction</title>
    <ns>10</ns>
    <id>5728</id>
    <revision>
      <id>58180</id>
      <parentid>53723</parentid>
      <timestamp>2013-06-01T06:09:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list select on container copy construction]] to [[Template:cpp/memory/scoped allocator adaptor/dsc select on container copy construction]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem fun | cpp/memory/scoped_allocator_adaptor/select_on_container_copy_construction | copies the state of scoped_allocator_adaptor and all its allocators}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/dsc ~scoped allocator adaptor</title>
    <ns>10</ns>
    <id>5720</id>
    <revision>
      <id>58184</id>
      <parentid>53726</parentid>
      <timestamp>2013-06-01T06:09:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/scoped allocator adaptor/dcl list ~scoped allocator adaptor]] to [[Template:cpp/memory/scoped allocator adaptor/dsc ~scoped allocator adaptor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem dtor | cpp/memory/scoped_allocator_adaptor/~scoped_allocator_adaptor | destructs a scoped_allocator_adaptor instance}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/navbar</title>
    <ns>10</ns>
    <id>3395</id>
    <revision>
      <id>39971</id>
      <parentid>35801</parentid>
      <timestamp>2012-09-28T20:12:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="279">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/scoped_allocator_adaptor/navbar heading
|content3 = cpp/memory/scoped_allocator_adaptor/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/navbar content</title>
    <ns>10</ns>
    <id>3397</id>
    <revision>
      <id>53729</id>
      <parentid>35238</parentid>
      <timestamp>2013-06-01T05:05:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="864">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/scoped_allocator_adaptor}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/~scoped_allocator_adaptor}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/inner_allocator}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/outer_allocator}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/allocate}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/deallocate}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/max_size}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/construct}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/destroy}}
{{nv mem ln | cpp/memory/scoped_allocator_adaptor/select_on_container_copy_construction}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/memory/scoped_allocator_adaptor/operator_cmp|operator{{==}}|operator!{{=}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/navbar heading</title>
    <ns>10</ns>
    <id>3396</id>
    <revision>
      <id>48036</id>
      <parentid>35802</parentid>
      <timestamp>2013-05-18T17:59:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="73">{{ltt|cpp/memory/scoped_allocator_adaptor|std::scoped_allocator_adaptor}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/scoped allocator adaptor/title</title>
    <ns>10</ns>
    <id>5677</id>
    <revision>
      <id>20879</id>
      <timestamp>2012-04-06T21:51:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">&lt;onlyinclude&gt;{{cpp/title | n=scoped_allocator_adaptor::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc allocate ptr</title>
    <ns>10</ns>
    <id>4942</id>
    <revision>
      <id>58187</id>
      <parentid>53730</parentid>
      <timestamp>2013-06-01T06:09:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list allocate ptr]] to [[Template:cpp/memory/shared ptr/dsc allocate ptr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc tfun | cpp/memory/shared_ptr/allocate_shared | creates a shared pointer that manages a new object allocated using an allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc allocate shared</title>
    <ns>10</ns>
    <id>4943</id>
    <revision>
      <id>58191</id>
      <parentid>53733</parentid>
      <timestamp>2013-06-01T06:10:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list allocate shared]] to [[Template:cpp/memory/shared ptr/dsc allocate shared]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc tfun | cpp/memory/shared_ptr/allocate_shared | creates a shared pointer that manages a new object allocated using an allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc atomic</title>
    <ns>10</ns>
    <id>4948</id>
    <revision>
      <id>85521</id>
      <parentid>58195</parentid>
      <timestamp>2016-04-22T22:14:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="805">{{dsc tfun | cpp/memory/shared_ptr/atomic | title=std::atomic_is_lock_free{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_load{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_load_explicit{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_store{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_store_explicit{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_exchange{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_exchange_explicit{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_compare_exchange_weak{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_compare_exchange_strong{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_compare_exchange_weak_explicit{{dsc small|(std::shared_ptr)}}&lt;br&gt;std::atomic_compare_exchange_strong_explicit{{dsc small|(std::shared_ptr)}}  | specializes atomic operations for {{lc|std::shared_ptr}} }}</text>
      <sha1>o66gpoas4yzhcokcn4q8morfqsnwb4a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc constructor</title>
    <ns>10</ns>
    <id>2180</id>
    <revision>
      <id>58199</id>
      <parentid>53739</parentid>
      <timestamp>2013-06-01T06:10:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list constructor]] to [[Template:cpp/memory/shared ptr/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem ctor | cpp/memory/shared_ptr/shared_ptr | constructs new {{tt|shared_ptr}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc destructor</title>
    <ns>10</ns>
    <id>2181</id>
    <revision>
      <id>58202</id>
      <parentid>53740</parentid>
      <timestamp>2013-06-01T06:10:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list destructor]] to [[Template:cpp/memory/shared ptr/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem dtor | cpp/memory/shared_ptr/~shared_ptr | destructs the owned object if no more {{tt|shared_ptr}}s link to it }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc get</title>
    <ns>10</ns>
    <id>2185</id>
    <revision>
      <id>82308</id>
      <parentid>58206</parentid>
      <timestamp>2015-12-13T02:06:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>this is the stored pointer, not the managed one</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/memory/shared_ptr/get | returns the stored pointer}}</text>
      <sha1>reh5hmpnsiswd3o63cvcits3vgy809c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc get deleter</title>
    <ns>10</ns>
    <id>4946</id>
    <revision>
      <id>58209</id>
      <parentid>53746</parentid>
      <timestamp>2013-06-01T06:10:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list get deleter]] to [[Template:cpp/memory/shared ptr/dsc get deleter]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc tfun | cpp/memory/shared_ptr/get_deleter | returns the deleter of specified type, if owned }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc hash</title>
    <ns>10</ns>
    <id>3004</id>
    <revision>
      <id>58213</id>
      <parentid>53747</parentid>
      <timestamp>2013-06-01T06:10:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list hash]] to [[Template:cpp/memory/shared ptr/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc ptclass | cpp/memory/shared_ptr/hash | title=std::hash{{dsc small|&lt;std::shared_ptr&gt;}} | hash support for {{lc|std::shared_ptr}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc make shared</title>
    <ns>10</ns>
    <id>4944</id>
    <revision>
      <id>58216</id>
      <parentid>53748</parentid>
      <timestamp>2013-06-01T06:10:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list make shared]] to [[Template:cpp/memory/shared ptr/dsc make shared]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc tfun | cpp/memory/shared_ptr/make_shared | creates a shared pointer that manages a new object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc operator at</title>
    <ns>10</ns>
    <id>14801</id>
    <revision>
      <id>84029</id>
      <timestamp>2016-03-14T17:54:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="137">{{dsc mem fun | cpp/memory/shared_ptr/operator_at | title=operator[] | provides indexed access to the stored array|notes={{mark c++17}}}}</text>
      <sha1>3zlp4u2tsk76evw7i4erx28hihidkic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc operator bool</title>
    <ns>10</ns>
    <id>2189</id>
    <revision>
      <id>88609</id>
      <parentid>58228</parentid>
      <timestamp>2016-12-01T14:09:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>operator bool deals with the stored pointer, not the managed one (from shared_ptr's talk)</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/memory/shared_ptr/operator bool | checks if the stored pointer is not null }}</text>
      <sha1>inerj1wsu9vhdn0cug6aluh7l1sjxgy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc operator cmp</title>
    <ns>10</ns>
    <id>3306</id>
    <revision>
      <id>58232</id>
      <parentid>53756</parentid>
      <timestamp>2013-06-01T06:11:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list operator cmp]] to [[Template:cpp/memory/shared ptr/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="201">{{dsc tfun | cpp/memory/shared_ptr/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares with another {{tt|shared_ptr}} or with {{c|nullptr}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc operator ltlt</title>
    <ns>10</ns>
    <id>4947</id>
    <revision>
      <id>82311</id>
      <parentid>58237</parentid>
      <timestamp>2015-12-13T02:15:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>this is the stored pointer, not the managed one</comment>
      <text xml:space="preserve" bytes="130">{{dsc tfun | cpp/memory/shared_ptr/operator_ltlt | title=operator&lt;&lt;| outputs the value of the stored pointer to an output stream}}</text>
      <sha1>f70df4mnody2wx4xt5kofp0emo7fl7c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc operator*</title>
    <ns>10</ns>
    <id>2186</id>
    <revision>
      <id>82309</id>
      <parentid>58220</parentid>
      <timestamp>2015-12-13T02:06:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>likewise</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/memory/shared_ptr/operator* | title=operator*&lt;br&gt;operator-&gt; | dereferences the stored pointer}}</text>
      <sha1>7ejzybu98ut8809qogwmzuz4tsws5cx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc operator=</title>
    <ns>10</ns>
    <id>2182</id>
    <revision>
      <id>58224</id>
      <parentid>53752</parentid>
      <timestamp>2013-06-01T06:10:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list operator=]] to [[Template:cpp/memory/shared ptr/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/memory/shared_ptr/operator{{=}} | assigns the {{tt|shared_ptr}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc owner before</title>
    <ns>10</ns>
    <id>2190</id>
    <revision>
      <id>58241</id>
      <parentid>53758</parentid>
      <timestamp>2013-06-01T06:11:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list owner before]] to [[Template:cpp/memory/shared ptr/dsc owner before]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/memory/shared_ptr/owner_before | provides owner-based ordering of shared pointers}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc pointer cast</title>
    <ns>10</ns>
    <id>4945</id>
    <revision>
      <id>84035</id>
      <parentid>82321</parentid>
      <timestamp>2016-03-14T18:05:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>reinterpret_cast</comment>
      <text xml:space="preserve" bytes="359">{{dsc tfun | cpp/memory/shared_ptr/pointer_cast | title=static_pointer_cast&lt;br&gt;dynamic_pointer_cast&lt;br&gt;const_pointer_cast&lt;br&gt;reinterpret_pointer_cast | applies {{ltt|cpp/language/static_cast}}, {{ltt|cpp/language/dynamic_cast}}, {{ltt|cpp/language/const_cast}}, or {{ltt|cpp/language/reinterpret_cast}} to the stored pointer|notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>r4yj1921ut5bjyc8hbo5rarz97ey8uc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc reset</title>
    <ns>10</ns>
    <id>2183</id>
    <revision>
      <id>58249</id>
      <parentid>53770</parentid>
      <timestamp>2013-06-01T06:11:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list reset]] to [[Template:cpp/memory/shared ptr/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/memory/shared_ptr/reset | replaces the managed object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc swap</title>
    <ns>10</ns>
    <id>2184</id>
    <revision>
      <id>58253</id>
      <parentid>53771</parentid>
      <timestamp>2013-06-01T06:11:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list swap]] to [[Template:cpp/memory/shared ptr/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/memory/shared_ptr/swap | swaps the managed objects }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc swap2</title>
    <ns>10</ns>
    <id>2770</id>
    <revision>
      <id>58257</id>
      <parentid>53774</parentid>
      <timestamp>2013-06-01T06:11:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list swap2]] to [[Template:cpp/memory/shared ptr/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc tfun | cpp/memory/shared_ptr/swap2 | title=std::swap{{dsc small|(std::shared_ptr)}} | specializes the {{lc|std::swap}} algorithm | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc unique</title>
    <ns>10</ns>
    <id>2188</id>
    <revision>
      <id>88222</id>
      <parentid>58261</parentid>
      <timestamp>2016-11-14T20:05:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated by p0521r0</comment>
      <text xml:space="preserve" bytes="167">{{dsc mem fun | cpp/memory/shared_ptr/unique | checks whether the managed object is managed only by the current {{tt|shared_ptr}} instance|notes={{mark deprecated}} }}</text>
      <sha1>p0fdkyw6cxwembdeqhmon4jtkjgqycy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/dsc use count</title>
    <ns>10</ns>
    <id>2187</id>
    <revision>
      <id>58266</id>
      <parentid>53776</parentid>
      <timestamp>2013-06-01T06:11:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/shared ptr/dcl list use count]] to [[Template:cpp/memory/shared ptr/dsc use count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc mem fun | cpp/memory/shared_ptr/use_count | returns the number of {{tt|shared_ptr}} objects referring to the same managed object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/enabling shared from this</title>
    <ns>10</ns>
    <id>15748</id>
    <revision>
      <id>88516</id>
      <parentid>88515</parentid>
      <timestamp>2016-11-23T04:35:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1111">A constructor ''enables {{tt|shared_from_this}}'' with a pointer {{tt|ptr}} of type {{tt|U*}} means that it determines if {{tt|U}} has an unambiguous and accessible base class that is a specialization of {{lc|std::enable_shared_from_this}}, and if so, the constructor evaluates the statement:
{{source|1=
if (ptr != nullptr &amp;&amp; ptr-&gt;weak_this.expired())
  ptr-&gt;weak_this = std::shared_ptr&lt;std::remove_cv_t&lt;U&gt;&gt;(*this,
                                  const_cast&lt;std::remove_cv_t&lt;U&gt;*&gt;(ptr));
}}
Where {{tt|weak_this}} is the hidden mutable {{tt|std::weak_ptr}} member of {{lc|std::shared_from_this}}. The assignment to the weak_this member is not atomic and conflicts with any potentially concurrent access to the same object. This ensures that future calls to {{ltt|cpp/memory/enable_shared_from_this/shared_from_this|shared_from_this()}} would share ownership with the {{tt|shared_ptr}} created by this raw pointer constructor.

The test {{tt|ptr-&gt;weak_this.expired()}} in the exposition code above makes sure that weak_this is not reassigned if it already indicates an owner. This test is required as of C++17.</text>
      <sha1>qrtb6e7vqgitljq0b6fi788hr0u5ut4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/navbar</title>
    <ns>10</ns>
    <id>2178</id>
    <revision>
      <id>39972</id>
      <parentid>36070</parentid>
      <timestamp>2012-09-28T20:12:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="328">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/shared_ptr/navbar heading
|content4 = cpp/memory/shared_ptr/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/navbar content</title>
    <ns>10</ns>
    <id>2922</id>
    <revision>
      <id>88225</id>
      <parentid>88224</parentid>
      <timestamp>2016-11-14T20:11:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1716">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/shared_ptr/shared_ptr}}
{{nv mem ln | cpp/memory/shared_ptr/~shared_ptr}}
{{nv mem ln | cpp/memory/shared_ptr/operator{{=}}}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/memory/shared_ptr/reset}}
{{nv mem ln | cpp/memory/shared_ptr/swap}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/memory/shared_ptr/get}}
{{nv mem ln | cpp/memory/shared_ptr/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/memory/shared_ptr/operator_at|operator[]|notes={{mark c++17}}}}
{{nv mem ln | cpp/memory/shared_ptr/use_count}}
{{nv mem ln | cpp/memory/shared_ptr/unique|notes={{mark deprecated}}}}
{{nv mem ln | cpp/memory/shared_ptr/operator bool}}
{{nv mem ln | cpp/memory/shared_ptr/owner_before}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/memory/shared_ptr/swap2 | std::swap}}
{{nv ln | cpp/memory/shared_ptr/make_shared}}
{{nv ln | cpp/memory/shared_ptr/allocate_shared}}
{{nv ln | cpp/memory/shared_ptr/pointer_cast | static_pointer_cast | dynamic_pointer_cast | const_pointer_cast|reinterpret_pointer_cast|notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++17}}}}
{{nv ln | cpp/memory/shared_ptr/get_deleter}}
{{nv ln | cpp/memory/shared_ptr/operator_cmp|operator{{==}}|operator{{!=}}|operator&lt;|operator&lt;{{=}}|operator&gt;|operator&gt;{{=}}}}
{{nv ln | cpp/memory/shared_ptr/operator_ltlt|operator&lt;&lt;}}
{{nv ln | cpp/memory/shared_ptr/atomic| atomic_is_lock_free | atomic_load | atomic_load_explicit | atomic_store | atomic_store_explicit | atomic_exchange | atomic_exchange_explicit | atomic_compare_exchange_weak| atomic_compare_exchange_strong | atomic_compare_exchange_weak_explicit | atomic_compare_exchange_strong_explicit }}
{{nv ln | cpp/memory/shared_ptr/hash | std::hash}}
{{nv end}}</text>
      <sha1>refs4jp3s696efyr9vzcdwd49pkvjw1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/navbar heading</title>
    <ns>10</ns>
    <id>2179</id>
    <revision>
      <id>47759</id>
      <parentid>35805</parentid>
      <timestamp>2013-05-16T20:23:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="45">{{ltt|cpp/memory/shared_ptr|std::shared_ptr}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/shared ptr/title</title>
    <ns>10</ns>
    <id>2423</id>
    <revision>
      <id>8446</id>
      <timestamp>2011-08-11T18:11:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=shared_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/swap2</title>
    <ns>10</ns>
    <id>5302</id>
    <revision>
      <id>91960</id>
      <parentid>83919</parentid>
      <timestamp>2017-03-31T20:17:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1005">{{cpp/title | swap&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/memory/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
{{#switch: {{{1}}}
|shared_ptr|weak_ptr=
template&lt; class T &gt;
void swap( {{{1}}}&lt;T&gt;&amp; lhs, {{{1}}}&lt;T&gt;&amp; rhs );
|unique_ptr=
template&lt; class T, class Deleter &gt;
void swap( {{{1}}}&lt;T,Deleter&gt;&amp; lhs, {{{1}}}&lt;T,Deleter&gt;&amp; rhs );
}}
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{c|std::{{{1}}}}}. Swaps the pointers of {{tt|lhs}} and {{tt|rhs}}. Calls {{c|lhs.swap(rhs)}}.

{{#ifeq:{{{1}}}|unique_ptr|
{{rev begin}}
{{rev|since=c++17|
This function does not participate in overload resolution unless {{c|std::is_swappable&lt;D&gt;::value}} is true.
}}{{rev end}}}}
===Parameters===
{{par begin}}
{{par | lhs, rhs | smart pointers whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/memory/dsc swap |{{{1|}}}}}
{{dsc end}}</text>
      <sha1>c9vgz5uhraj63k5t69cyubqobdxkhy4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc constructor</title>
    <ns>10</ns>
    <id>14928</id>
    <revision>
      <id>84272</id>
      <timestamp>2016-03-17T13:30:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem ctor | cpp/memory/synchronized_pool_resource/synchronized_pool_resource | Constructs a {{tt|synchronized_pool_resource}}}}</text>
      <sha1>bqzig2rcjbd4gq5e6f5f9jiz0i7ptc4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc destructor</title>
    <ns>10</ns>
    <id>14929</id>
    <revision>
      <id>84285</id>
      <parentid>84284</parentid>
      <timestamp>2016-03-17T13:38:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84284 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) nm</comment>
      <text xml:space="preserve" bytes="164">{{dsc mem vdtor | cpp/memory/synchronized_pool_resource/~synchronized_pool_resource | Destroys a {{tt|synchronized_pool_resource}}, releasing all allocated memory}}</text>
      <sha1>h1i5cwkw40k2bmogq2ho5xt4zqvm1b9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14934</id>
    <revision>
      <id>84278</id>
      <timestamp>2016-03-17T13:32:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc prot mem vfun | cpp/memory/synchronized_pool_resource/do_allocate | Allocate memory }}</text>
      <sha1>pn5uopsxy98j94azrcudtf713bz7jqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14935</id>
    <revision>
      <id>84279</id>
      <timestamp>2016-03-17T13:32:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">{{dsc prot mem vfun | cpp/memory/synchronized_pool_resource/do_deallocate | Return memory to the pool }}</text>
      <sha1>a8lym5yg33im4kpjdcolg69v2nf1gli</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14936</id>
    <revision>
      <id>84280</id>
      <timestamp>2016-03-17T13:32:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{dsc prot mem vfun | cpp/memory/synchronized_pool_resource/do_is_equal | Compare for equality with another {{tt|memory_resource}} }}</text>
      <sha1>e3camjo2nuufzpj7xft9976vasjz7l5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc operator=</title>
    <ns>10</ns>
    <id>14930</id>
    <revision>
      <id>84274</id>
      <timestamp>2016-03-17T13:31:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="164">{{dsc mem fun|nolink=true | operator{{=}} | notes={{cmark deleted}}| Copy assignment operator is deleted. {{tt|synchronized_pool_resource}} is not copy assignable}}</text>
      <sha1>5yf49dc8svcq6eeyoji8irtcx728bqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc options</title>
    <ns>10</ns>
    <id>14933</id>
    <revision>
      <id>84277</id>
      <timestamp>2016-03-17T13:31:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem fun | cpp/memory/synchronized_pool_resource/options | Returns the options that control the pooling behavior of this resource}}</text>
      <sha1>jvrrcymdsuir7r6z5s0l9kb87sco69v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc release</title>
    <ns>10</ns>
    <id>14931</id>
    <revision>
      <id>84275</id>
      <timestamp>2016-03-17T13:31:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/memory/synchronized_pool_resource/release| Release all allocated memory}}</text>
      <sha1>40kh89m0xyb8gex5xabin62iszn5bzh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/dsc upstream resource</title>
    <ns>10</ns>
    <id>14932</id>
    <revision>
      <id>84276</id>
      <timestamp>2016-03-17T13:31:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/memory/synchronized_pool_resource/upstream_resource | Returns a pointer to the upstream memory resource}}</text>
      <sha1>66o2pujnto2c5p88ibji0pfp5o9sxyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/navbar</title>
    <ns>10</ns>
    <id>14924</id>
    <revision>
      <id>84268</id>
      <timestamp>2016-03-17T13:27:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="281">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/synchronized_pool_resource/navbar heading
|content3 = cpp/memory/synchronized_pool_resource/navbar content
}}</text>
      <sha1>ta7hy6p74dp0n07fmx7guvtakicgy4d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/navbar content</title>
    <ns>10</ns>
    <id>14927</id>
    <revision>
      <id>84271</id>
      <timestamp>2016-03-17T13:28:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="658">{{nv begin}}
{{nv mem ln | cpp/memory/synchronized_pool_resource/synchronized_pool_resource}}
{{nv mem ln | cpp/memory/synchronized_pool_resource/~synchronized_pool_resource}}
{{nv h2 | Public member functions}}
{{nv mem ln | cpp/memory/synchronized_pool_resource/release}}
{{nv mem ln | cpp/memory/synchronized_pool_resource/upstream_resource}}
{{nv mem ln | cpp/memory/synchronized_pool_resource/options}}
{{nv h2|Protected member functions}}
{{nv mem ln | cpp/memory/synchronized_pool_resource/do_allocate }}
{{nv mem ln | cpp/memory/synchronized_pool_resource/do_deallocate }}
{{nv mem ln | cpp/memory/synchronized_pool_resource/do_is_equal }}
{{nv end}}</text>
      <sha1>2tjh6vawg25paq7hrsnuvviuz339xiw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/navbar heading</title>
    <ns>10</ns>
    <id>14926</id>
    <revision>
      <id>84270</id>
      <timestamp>2016-03-17T13:28:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{ltt|cpp/memory/synchronized_pool_resource|std::pmr::synchronized_pool_resource}}</text>
      <sha1>9ao2j0fj2a67917lqn2k19izy0ne2bn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/synchronized pool resource/title</title>
    <ns>10</ns>
    <id>14937</id>
    <revision>
      <id>84287</id>
      <parentid>84281</parentid>
      <timestamp>2016-03-17T13:39:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Cubbi moved page [[Template:cpp/memory/pmr/synchronized pool resource/title]] to [[Template:cpp/memory/synchronized pool resource/title]] without leaving a redirect: just putting these in cpp/memory</comment>
      <text xml:space="preserve" bytes="128">&lt;onlyinclude&gt;{{cpp/title | n=pmr::synchronized_pool_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>fqbbqm3a133q5624ydd6ysa9wi0fq3w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/thread safety note</title>
    <ns>10</ns>
    <id>15537</id>
    <revision>
      <id>86239</id>
      <parentid>86238</parentid>
      <timestamp>2016-06-24T22:12:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/are requires/are required</comment>
      <text xml:space="preserve" bytes="729">{{rev begin}}
{{rev|since=c++11|
The following functions are required to be thread-safe:
* The library versions of {{ltt|cpp/memory/new/operator_new|operator new}} and {{ltt|cpp/memory/new/operator_delete|operator delete}}
* User replacement versions of global {{ltt|cpp/memory/new/operator_new|operator new}} and {{ltt|cpp/memory/new/operator_delete|operator delete}}
* {{lc|std::calloc}}, {{lc|std::malloc}}, {{lc|std::realloc}}{{rev inl|since=c++17|, {{lc|std::aligned_alloc}}}}

Calls to these functions that allocate or deallocate a particular unit of storage occur in a single total order, and each such deallocation call [[cpp/atomic/memory_order|happens-before]] the next allocation (if any) in this order.
}}
{{rev end}}</text>
      <sha1>gcridk1223zsibkbj512o3a9i9zg4z8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc constructor</title>
    <ns>10</ns>
    <id>2402</id>
    <revision>
      <id>58270</id>
      <parentid>53785</parentid>
      <timestamp>2013-06-01T06:11:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list constructor]] to [[Template:cpp/memory/unique ptr/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem ctor | cpp/memory/unique_ptr/unique_ptr | constructs a new {{tt|unique_ptr}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc destructor</title>
    <ns>10</ns>
    <id>2403</id>
    <revision>
      <id>58272</id>
      <parentid>53788</parentid>
      <timestamp>2013-06-01T06:11:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list destructor]] to [[Template:cpp/memory/unique ptr/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem dtor | cpp/memory/unique_ptr/~unique_ptr | destructs the managed object if such is present }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc get</title>
    <ns>10</ns>
    <id>2228</id>
    <revision>
      <id>58274</id>
      <parentid>53789</parentid>
      <timestamp>2013-06-01T06:11:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list get]] to [[Template:cpp/memory/unique ptr/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/memory/unique_ptr/get | returns a pointer to the managed object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc get deleter</title>
    <ns>10</ns>
    <id>2237</id>
    <revision>
      <id>58276</id>
      <parentid>53790</parentid>
      <timestamp>2013-06-01T06:11:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list get deleter]] to [[Template:cpp/memory/unique ptr/dsc get deleter]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/memory/unique_ptr/get_deleter | returns the deleter that is used for destruction of the managed object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc hash</title>
    <ns>10</ns>
    <id>2988</id>
    <revision>
      <id>58278</id>
      <parentid>53791</parentid>
      <timestamp>2013-06-01T06:11:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list hash]] to [[Template:cpp/memory/unique ptr/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc ptclass | cpp/memory/unique_ptr/hash | title=std::hash{{dsc small|&lt;std::unique_ptr&gt;}} | hash support for {{lc|std::unique_ptr}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc make unique</title>
    <ns>10</ns>
    <id>9977</id>
    <revision>
      <id>58280</id>
      <parentid>53794</parentid>
      <timestamp>2013-06-01T06:11:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list make unique]] to [[Template:cpp/memory/unique ptr/dsc make unique]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc tfun | cpp/memory/unique_ptr/make_unique | creates a unique pointer that manages a new object | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc operator at</title>
    <ns>10</ns>
    <id>3304</id>
    <revision>
      <id>58291</id>
      <parentid>53799</parentid>
      <timestamp>2013-06-01T06:12:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list operator at]] to [[Template:cpp/memory/unique ptr/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem fun | cpp/memory/unique_ptr/operator_at | title=operator[] | provides indexed access to the managed array }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc operator bool</title>
    <ns>10</ns>
    <id>2236</id>
    <revision>
      <id>88807</id>
      <parentid>58295</parentid>
      <timestamp>2016-12-13T10:22:30Z</timestamp>
      <contributor>
        <ip>134.130.18.163</ip>
      </contributor>
      <comment>Added &quot;an&quot;</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/memory/unique_ptr/operator bool | checks if there is an associated managed object }}</text>
      <sha1>5nj716d80xvgg67lywzx2qsk5oh67ix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc operator cmp</title>
    <ns>10</ns>
    <id>3305</id>
    <revision>
      <id>58300</id>
      <parentid>53803</parentid>
      <timestamp>2013-06-01T06:12:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list operator cmp]] to [[Template:cpp/memory/unique ptr/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="199">{{dsc tfun | cpp/memory/unique_ptr/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares to another {{tt|unique_ptr}} or with {{c|nullptr}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc operator*</title>
    <ns>10</ns>
    <id>2235</id>
    <revision>
      <id>58282</id>
      <parentid>53795</parentid>
      <timestamp>2013-06-01T06:11:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list operator*]] to [[Template:cpp/memory/unique ptr/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/memory/unique_ptr/operator* | title=operator*&lt;br&gt;operator-&gt; | dereferences pointer to the managed object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc operator=</title>
    <ns>10</ns>
    <id>2234</id>
    <revision>
      <id>58286</id>
      <parentid>53798</parentid>
      <timestamp>2013-06-01T06:11:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list operator=]] to [[Template:cpp/memory/unique ptr/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/memory/unique_ptr/operator{{=}} | assigns the {{tt|unique_ptr}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc release</title>
    <ns>10</ns>
    <id>2230</id>
    <revision>
      <id>58305</id>
      <parentid>53804</parentid>
      <timestamp>2013-06-01T06:12:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list release]] to [[Template:cpp/memory/unique ptr/dsc release]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun | cpp/memory/unique_ptr/release | returns a pointer to the managed object and releases the ownership }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc reset</title>
    <ns>10</ns>
    <id>2229</id>
    <revision>
      <id>58309</id>
      <parentid>53807</parentid>
      <timestamp>2013-06-01T06:12:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list reset]] to [[Template:cpp/memory/unique ptr/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/memory/unique_ptr/reset | replaces the managed object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc swap</title>
    <ns>10</ns>
    <id>2233</id>
    <revision>
      <id>58313</id>
      <parentid>53808</parentid>
      <timestamp>2013-06-01T06:12:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list swap]] to [[Template:cpp/memory/unique ptr/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/memory/unique_ptr/swap | swaps the managed objects }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/dsc swap2</title>
    <ns>10</ns>
    <id>2771</id>
    <revision>
      <id>58318</id>
      <parentid>53809</parentid>
      <timestamp>2013-06-01T06:12:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/unique ptr/dcl list swap2]] to [[Template:cpp/memory/unique ptr/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc tfun | cpp/memory/unique_ptr/swap2 | title=std::swap{{dsc small|(std::unique_ptr)}} | specializes the {{lc|std::swap}} algorithm | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/navbar</title>
    <ns>10</ns>
    <id>2157</id>
    <revision>
      <id>39973</id>
      <parentid>36071</parentid>
      <timestamp>2012-09-28T20:14:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="328">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/unique_ptr/navbar heading
|content4 = cpp/memory/unique_ptr/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/navbar content</title>
    <ns>10</ns>
    <id>3111</id>
    <revision>
      <id>77086</id>
      <parentid>53810</parentid>
      <timestamp>2015-03-14T08:23:14Z</timestamp>
      <contributor>
        <username>Bazzy</username>
        <id>405</id>
      </contributor>
      <comment>Link to make_unique</comment>
      <text xml:space="preserve" bytes="1008">{{nv begin}}

{{nv h1 | Member functions}}
{{nv mem ln |  cpp/memory/unique_ptr/unique_ptr }}
{{nv mem ln |  cpp/memory/unique_ptr/~unique_ptr }}
{{nv mem ln | cpp/memory/unique_ptr/operator{{=}}}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/memory/unique_ptr/release}}
{{nv mem ln | cpp/memory/unique_ptr/reset}}
{{nv mem ln | cpp/memory/unique_ptr/swap}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/memory/unique_ptr/get}}
{{nv mem ln | cpp/memory/unique_ptr/get_deleter}}
{{nv mem ln | cpp/memory/unique_ptr/operator bool}}
{{nv mem ln | cpp/memory/unique_ptr/operator*|operator*|operator-&gt;}}
{{nv mem ln | cpp/memory/unique_ptr/operator_at|operator[]}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/memory/unique_ptr/make_unique |make_unique {{mark|C++14}}}}
{{nv ln | cpp/memory/unique_ptr/operator_cmp |operator{{==}}|operator!{{=}}|operator&lt;|operator&gt;|operator&lt;{{=}}|operator&gt;|operator&gt;{{=}}}}
{{nv ln | cpp/memory/unique_ptr/swap2 |std::swap}}
{{nv ln | cpp/memory/unique_ptr/hash |std::hash}}
{{nv end}}</text>
      <sha1>10fxrefa4in8986cf259ym7fprqt2oa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/navbar heading</title>
    <ns>10</ns>
    <id>2159</id>
    <revision>
      <id>47137</id>
      <parentid>35183</parentid>
      <timestamp>2013-04-25T10:42:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/memory/unique_ptr | std::unique_ptr}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unique ptr/title</title>
    <ns>10</ns>
    <id>2424</id>
    <revision>
      <id>8457</id>
      <timestamp>2011-08-11T18:14:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=unique_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc constructor</title>
    <ns>10</ns>
    <id>14958</id>
    <revision>
      <id>84307</id>
      <timestamp>2016-03-17T13:54:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem ctor | cpp/memory/unsynchronized_pool_resource/unsynchronized_pool_resource | Constructs a {{tt|unsynchronized_pool_resource}}}}</text>
      <sha1>1yfh3x5rrg1a4018skl3ahfpxkyhhw4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc destructor</title>
    <ns>10</ns>
    <id>14957</id>
    <revision>
      <id>84306</id>
      <timestamp>2016-03-17T13:54:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="170">{{dsc mem vdtor | cpp/memory/unsynchronized_pool_resource/~unsynchronized_pool_resource | Destroys a {{tt|unsynchronized_pool_resource}}, releasing all allocated memory}}</text>
      <sha1>map5lnibiapizjd8zvhs8xd9bjdpq7q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc do allocate</title>
    <ns>10</ns>
    <id>14952</id>
    <revision>
      <id>84301</id>
      <timestamp>2016-03-17T13:52:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{dsc prot mem vfun | cpp/memory/unsynchronized_pool_resource/do_allocate | Allocate memory }}</text>
      <sha1>lsm9vgjcstb9vw31pdzsgyit1glte4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc do deallocate</title>
    <ns>10</ns>
    <id>14951</id>
    <revision>
      <id>84300</id>
      <timestamp>2016-03-17T13:52:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{dsc prot mem vfun | cpp/memory/unsynchronized_pool_resource/do_deallocate | Return memory to the pool }}</text>
      <sha1>s9hyrpvmpeaawyrizfj6k3p4ezu7p5k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc do is equal</title>
    <ns>10</ns>
    <id>14950</id>
    <revision>
      <id>84299</id>
      <timestamp>2016-03-17T13:51:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="145">{{dsc prot mem vfun | cpp/memory/unsynchronized_pool_resource/do_is_equal | Compare for equality with another {{lc|std::pmr::memory_resource}} }}</text>
      <sha1>9aewuw1y9bcx4ctqgpx2gio3vkfryr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc operator=</title>
    <ns>10</ns>
    <id>14956</id>
    <revision>
      <id>84305</id>
      <timestamp>2016-03-17T13:54:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="166">{{dsc mem fun|nolink=true | operator{{=}} | notes={{cmark deleted}}| Copy assignment operator is deleted. {{tt|unsynchronized_pool_resource}} is not copy assignable}}</text>
      <sha1>s592hc1typie49j4iabr3c8gqx4ugbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc options</title>
    <ns>10</ns>
    <id>14953</id>
    <revision>
      <id>84302</id>
      <timestamp>2016-03-17T13:52:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem fun | cpp/memory/unsynchronized_pool_resource/options | Returns the options that control the pooling behavior of this resource}}</text>
      <sha1>msefosthiva7mux18zr5qrnihquvddt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc release</title>
    <ns>10</ns>
    <id>14955</id>
    <revision>
      <id>84304</id>
      <timestamp>2016-03-17T13:53:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/memory/unsynchronized_pool_resource/release| Release all allocated memory}}</text>
      <sha1>l44qym2t72tdzvwq8ggunxy7k3qhife</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/dsc upstream resource</title>
    <ns>10</ns>
    <id>14954</id>
    <revision>
      <id>84303</id>
      <timestamp>2016-03-17T13:53:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/memory/unsynchronized_pool_resource/upstream_resource | Returns a pointer to the upstream memory resource}}</text>
      <sha1>6tslc1tz8c0vh28a8t7gjm6vet3f1x0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/navbar</title>
    <ns>10</ns>
    <id>14946</id>
    <revision>
      <id>84295</id>
      <timestamp>2016-03-17T13:49:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="285">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/memory/navbar heading
|content2 = cpp/memory/navbar content

|heading3 = cpp/memory/unsynchronized_pool_resource/navbar heading
|content3 = cpp/memory/unsynchronized_pool_resource/navbar content
}}</text>
      <sha1>lrtgn9cgwdvdagbuqps1zxou4ayruai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/navbar content</title>
    <ns>10</ns>
    <id>14948</id>
    <revision>
      <id>84297</id>
      <timestamp>2016-03-17T13:50:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="678">{{nv begin}}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/unsynchronized_pool_resource}}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/~unsynchronized_pool_resource}}
{{nv h2 | Public member functions}}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/release}}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/upstream_resource}}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/options}}
{{nv h2|Protected member functions}}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/do_allocate }}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/do_deallocate }}
{{nv mem ln | cpp/memory/unsynchronized_pool_resource/do_is_equal }}
{{nv end}}</text>
      <sha1>glziamab3na5fou6q8hj2bqp2rczayz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/navbar heading</title>
    <ns>10</ns>
    <id>14947</id>
    <revision>
      <id>84296</id>
      <timestamp>2016-03-17T13:50:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="86">{{ltt|cpp/memory/unsynchronized_pool_resource|std::pmr::unsynchronized_pool_resource}}</text>
      <sha1>5detbugvhmvi6zzsuntlu9bvi3dr314</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/unsynchronized pool resource/title</title>
    <ns>10</ns>
    <id>14959</id>
    <revision>
      <id>84309</id>
      <timestamp>2016-03-17T14:06:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">&lt;onlyinclude&gt;{{cpp/title | n=pmr::unsynchronized_pool_resource::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>r0rx41u8qhgr7ljk1e2jgc00g3or8wy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc constructor</title>
    <ns>10</ns>
    <id>5704</id>
    <revision>
      <id>58323</id>
      <parentid>53813</parentid>
      <timestamp>2013-06-01T06:12:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list constructor]] to [[Template:cpp/memory/weak ptr/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem ctor | cpp/memory/weak_ptr/weak_ptr | creates a new {{tt|weak_ptr}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc destructor</title>
    <ns>10</ns>
    <id>5705</id>
    <revision>
      <id>58328</id>
      <parentid>53818</parentid>
      <timestamp>2013-06-01T06:12:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list destructor]] to [[Template:cpp/memory/weak ptr/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem dtor | cpp/memory/weak_ptr/~weak_ptr | destroys a {{tt|weak_ptr}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc expired</title>
    <ns>10</ns>
    <id>5710</id>
    <revision>
      <id>58333</id>
      <parentid>53823</parentid>
      <timestamp>2013-06-01T06:12:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list expired]] to [[Template:cpp/memory/weak ptr/dsc expired]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/memory/weak_ptr/expired | checks whether the referenced object was already deleted}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc lock</title>
    <ns>10</ns>
    <id>5711</id>
    <revision>
      <id>58338</id>
      <parentid>53826</parentid>
      <timestamp>2013-06-01T06:12:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list lock]] to [[Template:cpp/memory/weak ptr/dsc lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/memory/weak_ptr/lock | creates a {{tt|shared_ptr}} that manages the referenced object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc operator=</title>
    <ns>10</ns>
    <id>5706</id>
    <revision>
      <id>58342</id>
      <parentid>53827</parentid>
      <timestamp>2013-06-01T06:12:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list operator=]] to [[Template:cpp/memory/weak ptr/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/memory/weak_ptr/operator{{=}} | assigns the {{tt|weak_ptr}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc owner before</title>
    <ns>10</ns>
    <id>5712</id>
    <revision>
      <id>58346</id>
      <parentid>53872</parentid>
      <timestamp>2013-06-01T06:12:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list owner before]] to [[Template:cpp/memory/weak ptr/dsc owner before]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/memory/weak_ptr/owner_before | provides owner-based ordering of weak pointers }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc reset</title>
    <ns>10</ns>
    <id>5707</id>
    <revision>
      <id>58350</id>
      <parentid>53875</parentid>
      <timestamp>2013-06-01T06:13:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list reset]] to [[Template:cpp/memory/weak ptr/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/memory/weak_ptr/reset | releases the ownership of the managed object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc swap</title>
    <ns>10</ns>
    <id>5708</id>
    <revision>
      <id>58353</id>
      <parentid>53876</parentid>
      <timestamp>2013-06-01T06:13:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list swap]] to [[Template:cpp/memory/weak ptr/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/memory/weak_ptr/swap | swaps the managed objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc swap2</title>
    <ns>10</ns>
    <id>3416</id>
    <revision>
      <id>58357</id>
      <parentid>53879</parentid>
      <timestamp>2013-06-01T06:13:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list swap2]] to [[Template:cpp/memory/weak ptr/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/memory/weak_ptr/swap2 | title=std::swap{{dsc small|(std::weak_ptr)}} | specializes the {{lc|std::swap}} algorithm | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/dsc use count</title>
    <ns>10</ns>
    <id>5709</id>
    <revision>
      <id>58361</id>
      <parentid>53880</parentid>
      <timestamp>2013-06-01T06:13:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/memory/weak ptr/dcl list use count]] to [[Template:cpp/memory/weak ptr/dsc use count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/memory/weak_ptr/use_count | returns the number of {{tt|shared_ptr}} objects that manage the object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/navbar</title>
    <ns>10</ns>
    <id>3418</id>
    <revision>
      <id>39974</id>
      <parentid>36069</parentid>
      <timestamp>2012-09-28T20:14:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="324">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/memory/navbar heading
|content3 = cpp/memory/navbar content

|heading4 = cpp/memory/weak_ptr/navbar heading
|content4 = cpp/memory/weak_ptr/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/navbar content</title>
    <ns>10</ns>
    <id>3420</id>
    <revision>
      <id>53885</id>
      <parentid>35812</parentid>
      <timestamp>2013-06-01T05:06:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="586">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/memory/weak_ptr/weak_ptr}}
{{nv mem ln | cpp/memory/weak_ptr/~weak_ptr}}
{{nv mem ln | cpp/memory/weak_ptr/operator{{=}}}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/memory/weak_ptr/reset}}
{{nv mem ln | cpp/memory/weak_ptr/swap}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/memory/weak_ptr/use_count}}
{{nv mem ln | cpp/memory/weak_ptr/expired}}
{{nv mem ln | cpp/memory/weak_ptr/lock}}
{{nv mem ln | cpp/memory/weak_ptr/owner_before}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/memory/weak_ptr/swap2 | std::swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/navbar heading</title>
    <ns>10</ns>
    <id>3419</id>
    <revision>
      <id>48038</id>
      <parentid>35813</parentid>
      <timestamp>2013-05-18T17:59:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="41">{{ltt|cpp/memory/weak_ptr|std::weak_ptr}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/memory/weak ptr/title</title>
    <ns>10</ns>
    <id>5660</id>
    <revision>
      <id>20846</id>
      <timestamp>2012-04-06T15:46:20Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=weak_ptr::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/navbar</title>
    <ns>10</ns>
    <id>1669</id>
    <revision>
      <id>39975</id>
      <parentid>36083</parentid>
      <timestamp>2012-09-28T20:14:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="73">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/navbar content</title>
    <ns>10</ns>
    <id>1670</id>
    <revision>
      <id>84989</id>
      <parentid>77037</parentid>
      <timestamp>2016-03-23T15:40:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+filesystem</comment>
      <text xml:space="preserve" bytes="873">{{nv begin| style=line-height:1.1em;}}
{{nv | [[cpp/language | Language]] }}
{{nv | [[cpp/header | Standard library headers]] }}
{{nv | [[cpp/concept | Concepts]] }}
{{nv | [[cpp/utility | Utilities library]] }}
{{nv | [[cpp/string | Strings library]] }}
{{nv | [[cpp/container | Containers library]] }}
{{nv | [[cpp/algorithm | Algorithms library]] }}
{{nv | [[cpp/iterator | Iterators library]] }}
{{nv | [[cpp/numeric | Numerics library]] }}
{{nv | [[cpp/io | Input/output library]] }}
{{nv | [[cpp/locale | Localizations library]] }}
{{nv | [[cpp/regex | Regular expressions library]] {{mark c++11}} }}
{{nv | [[cpp/atomic | Atomic operations library]] {{mark c++11}} }}
{{nv | [[cpp/thread | Thread support library]] {{mark c++11}} }}
{{nv | [[cpp/filesystem | Filesystem library]] {{mark c++17}} }}
{{nv | [[cpp/experimental | Technical Specifications]] }}
{{nv end}}</text>
      <sha1>azw3y5y18bsmb6vtp5f9dfanggd5onm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/navbar heading</title>
    <ns>10</ns>
    <id>2141</id>
    <revision>
      <id>35906</id>
      <parentid>32823</parentid>
      <timestamp>2012-06-15T22:34:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/sidebar heading]] to [[Template:cpp/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="13">[[cpp | C++]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/num get/title</title>
    <ns>10</ns>
    <id>4044</id>
    <revision>
      <id>14900</id>
      <timestamp>2011-12-01T14:44:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=num_get::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc abs</title>
    <ns>10</ns>
    <id>2950</id>
    <revision>
      <id>58365</id>
      <parentid>53897</parentid>
      <timestamp>2013-06-01T06:13:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list abs]] to [[Template:cpp/numeric/complex/dsc abs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/numeric/complex/abs | title=abs{{dsc small|(std::complex)}} | returns the magnitude of a complex number }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc acos</title>
    <ns>10</ns>
    <id>3557</id>
    <revision>
      <id>58369</id>
      <parentid>53902</parentid>
      <timestamp>2013-06-01T06:13:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list acos]] to [[Template:cpp/numeric/complex/dsc acos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="168">{{dsc tfun | cpp/numeric/complex/acos | title=acos{{dsc small|(std::complex)}}   | computes arc cosine of a complex number ({{math|arccos(z)}}) | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc acosh</title>
    <ns>10</ns>
    <id>3563</id>
    <revision>
      <id>66439</id>
      <parentid>58373</parentid>
      <timestamp>2013-11-22T06:04:22Z</timestamp>
      <contributor>
        <username>Addaleax</username>
        <id>1023</id>
      </contributor>
      <minor/>
      <comment>Corrected inverse hyperbolic function name</comment>
      <text xml:space="preserve" bytes="159">{{dsc tfun | cpp/numeric/complex/acosh | title=acosh{{dsc small|(std::complex)}} | computes area hyperbolic cosine of a complex number | notes={{mark c++11}}}}</text>
      <sha1>io3zps5ju3izpcnwb0lqdz6swpmbpkk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc arg</title>
    <ns>10</ns>
    <id>4268</id>
    <revision>
      <id>58377</id>
      <parentid>53904</parentid>
      <timestamp>2013-06-01T06:13:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list arg]] to [[Template:cpp/numeric/complex/dsc arg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">{{dsc tfun | cpp/numeric/complex/arg | returns the phase angle }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc asin</title>
    <ns>10</ns>
    <id>3556</id>
    <revision>
      <id>58381</id>
      <parentid>53907</parentid>
      <timestamp>2013-06-01T06:13:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list asin]] to [[Template:cpp/numeric/complex/dsc asin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="166">{{dsc tfun | cpp/numeric/complex/asin | title=asin{{dsc small|(std::complex)}}   | computes arc sine of a complex number ({{math|arcsin(z)}})| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc asinh</title>
    <ns>10</ns>
    <id>3562</id>
    <revision>
      <id>66438</id>
      <parentid>58385</parentid>
      <timestamp>2013-11-22T06:04:12Z</timestamp>
      <contributor>
        <username>Addaleax</username>
        <id>1023</id>
      </contributor>
      <minor/>
      <comment>Corrected inverse hyperbolic function name</comment>
      <text xml:space="preserve" bytes="157">{{dsc tfun | cpp/numeric/complex/asinh | title=asinh{{dsc small|(std::complex)}} | computes area hyperbolic sine of a complex number | notes={{mark c++11}}}}</text>
      <sha1>dps6okmwmrsrjkkcussf93ncz9devys</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc atan</title>
    <ns>10</ns>
    <id>3558</id>
    <revision>
      <id>58389</id>
      <parentid>53911</parentid>
      <timestamp>2013-06-01T06:13:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list atan]] to [[Template:cpp/numeric/complex/dsc atan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="169">{{dsc tfun | cpp/numeric/complex/atan | title=atan{{dsc small|(std::complex)}}   | computes arc tangent of a complex number ({{math|arctan(z)}})| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc atanh</title>
    <ns>10</ns>
    <id>3564</id>
    <revision>
      <id>66437</id>
      <parentid>58394</parentid>
      <timestamp>2013-11-22T06:03:59Z</timestamp>
      <contributor>
        <username>Addaleax</username>
        <id>1023</id>
      </contributor>
      <minor/>
      <comment>Corrected inverse hyperbolic function name</comment>
      <text xml:space="preserve" bytes="160">{{dsc tfun | cpp/numeric/complex/atanh | title=atanh{{dsc small|(std::complex)}} | computes area hyperbolic tangent of a complex number | notes={{mark c++11}}}}</text>
      <sha1>drgbgxs1gn254swkhputo3q9lqo1iqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc complex</title>
    <ns>10</ns>
    <id>13567</id>
    <revision>
      <id>71231</id>
      <timestamp>2014-06-08T20:01:19Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem ctor | cpp/numeric/complex/complex | constructs a complex number}}</text>
      <sha1>asdhj86q513r7jfk8py86eont2809zp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc conj</title>
    <ns>10</ns>
    <id>4270</id>
    <revision>
      <id>58398</id>
      <parentid>53913</parentid>
      <timestamp>2013-06-01T06:14:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list conj]] to [[Template:cpp/numeric/complex/dsc conj]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc tfun | cpp/numeric/complex/conj | returns the complex conjugate }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc cos</title>
    <ns>10</ns>
    <id>3554</id>
    <revision>
      <id>58402</id>
      <parentid>53916</parentid>
      <timestamp>2013-06-01T06:14:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list cos]] to [[Template:cpp/numeric/complex/dsc cos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc tfun | cpp/numeric/complex/cos | title=cos{{dsc small|(std::complex)}}     | computes cosine of a complex number ({{math|cos(z)}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc cosh</title>
    <ns>10</ns>
    <id>3560</id>
    <revision>
      <id>58406</id>
      <parentid>53917</parentid>
      <timestamp>2013-06-01T06:14:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list cosh]] to [[Template:cpp/numeric/complex/dsc cosh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tfun | cpp/numeric/complex/cosh | title=cosh{{dsc small|(std::complex)}}   | computes hyperbolic cosine of a complex number ({{math|ch(z)}})  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc exp</title>
    <ns>10</ns>
    <id>3548</id>
    <revision>
      <id>58411</id>
      <parentid>53920</parentid>
      <timestamp>2013-06-01T06:14:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list exp]] to [[Template:cpp/numeric/complex/dsc exp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc tfun | cpp/numeric/complex/exp | title=exp{{dsc small|(std::complex)}} | complex base ''e'' exponential }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc imag</title>
    <ns>10</ns>
    <id>3543</id>
    <revision>
      <id>58415</id>
      <parentid>53921</parentid>
      <timestamp>2013-06-01T06:14:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list imag]] to [[Template:cpp/numeric/complex/dsc imag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/numeric/complex/imag | accesses the imaginary part of the complex number}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc imag2</title>
    <ns>10</ns>
    <id>4267</id>
    <revision>
      <id>58419</id>
      <parentid>53922</parentid>
      <timestamp>2013-06-01T06:14:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list imag2]] to [[Template:cpp/numeric/complex/dsc imag2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc tfun | cpp/numeric/complex/imag2 |title=imag| returns the imaginary component }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc log</title>
    <ns>10</ns>
    <id>3549</id>
    <revision>
      <id>58424</id>
      <parentid>53923</parentid>
      <timestamp>2013-06-01T06:14:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list log]] to [[Template:cpp/numeric/complex/dsc log]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="156">{{dsc tfun | cpp/numeric/complex/log | title=log{{dsc small|(std::complex)}} | complex natural logarithm with the branch cuts along the negative real axis}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc log10</title>
    <ns>10</ns>
    <id>3550</id>
    <revision>
      <id>58428</id>
      <parentid>53926</parentid>
      <timestamp>2013-06-01T06:14:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list log10]] to [[Template:cpp/numeric/complex/dsc log10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc tfun | cpp/numeric/complex/log10 | title=log10{{dsc small|(std::complex)}} | complex common logarithm with the branch cuts along the negative real axis}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc norm</title>
    <ns>10</ns>
    <id>4269</id>
    <revision>
      <id>58432</id>
      <parentid>53929</parentid>
      <timestamp>2013-06-01T06:14:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list norm]] to [[Template:cpp/numeric/complex/dsc norm]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc tfun | cpp/numeric/complex/norm | returns the squared magnitude }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc operator arith</title>
    <ns>10</ns>
    <id>9264</id>
    <revision>
      <id>58440</id>
      <parentid>53933</parentid>
      <timestamp>2013-06-01T06:15:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list operator arith]] to [[Template:cpp/numeric/complex/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="184">{{dsc mem fun | cpp/numeric/complex/operator_arith | title=operator+=&lt;br&gt;operator-=&lt;br&gt;operator/=&lt;br&gt;operator*= | compound assignment of two complex numbers or a complex and a scalar}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc operator arith2</title>
    <ns>10</ns>
    <id>9262</id>
    <revision>
      <id>58444</id>
      <parentid>53936</parentid>
      <timestamp>2013-06-01T06:15:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list operator arith2]] to [[Template:cpp/numeric/complex/dsc operator arith2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc tfun | cpp/numeric/complex/operator_arith2 | title=operator+&lt;br&gt;operator- | applies unary operators to complex numbers }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc operator arith3</title>
    <ns>10</ns>
    <id>9263</id>
    <revision>
      <id>58448</id>
      <parentid>53939</parentid>
      <timestamp>2013-06-01T06:15:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list operator arith3]] to [[Template:cpp/numeric/complex/dsc operator arith3]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="193">{{dsc tfun | cpp/numeric/complex/operator_arith3 | title=operator+&lt;br&gt;operator-&lt;br&gt;operator*&lt;br&gt;operator/ | performs complex number arithmetics on two complex values or a complex and a scalar}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc operator cmp</title>
    <ns>10</ns>
    <id>4264</id>
    <revision>
      <id>58452</id>
      <parentid>53940</parentid>
      <timestamp>2013-06-01T06:15:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list operator cmp]] to [[Template:cpp/numeric/complex/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc tfun | cpp/numeric/complex/operator_cmp | title=operator==&lt;br&gt;operator!= | compares two complex numbers or a complex and a scalar }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>4265</id>
    <revision>
      <id>58457</id>
      <parentid>53947</parentid>
      <timestamp>2013-06-01T06:15:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list operator ltltgtgt]] to [[Template:cpp/numeric/complex/dsc operator ltltgtgt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc tfun | cpp/numeric/complex/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | serializes and deserializes a complex number }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc operator=</title>
    <ns>10</ns>
    <id>3544</id>
    <revision>
      <id>58436</id>
      <parentid>53930</parentid>
      <timestamp>2013-06-01T06:14:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list operator=]] to [[Template:cpp/numeric/complex/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/numeric/complex/operator{{=}} | assigns the contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc polar</title>
    <ns>10</ns>
    <id>4272</id>
    <revision>
      <id>58462</id>
      <parentid>53950</parentid>
      <timestamp>2013-06-01T06:15:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list polar]] to [[Template:cpp/numeric/complex/dsc polar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc tfun | cpp/numeric/complex/polar | constructs a complex number from magnitude and phase angle }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc pow</title>
    <ns>10</ns>
    <id>3551</id>
    <revision>
      <id>58467</id>
      <parentid>53951</parentid>
      <timestamp>2013-06-01T06:15:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list pow]] to [[Template:cpp/numeric/complex/dsc pow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc tfun | cpp/numeric/complex/pow| title=pow{{dsc small|(std::complex)}} | complex power, one or both arguments may be a complex number }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc proj</title>
    <ns>10</ns>
    <id>4271</id>
    <revision>
      <id>58472</id>
      <parentid>53952</parentid>
      <timestamp>2013-06-01T06:15:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list proj]] to [[Template:cpp/numeric/complex/dsc proj]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc tfun | cpp/numeric/complex/proj | returns the projection onto the Riemann sphere |notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc real</title>
    <ns>10</ns>
    <id>3542</id>
    <revision>
      <id>58476</id>
      <parentid>53955</parentid>
      <timestamp>2013-06-01T06:15:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list real]] to [[Template:cpp/numeric/complex/dsc real]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/numeric/complex/real | accesses the real part of the complex number}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc real2</title>
    <ns>10</ns>
    <id>4266</id>
    <revision>
      <id>58480</id>
      <parentid>53956</parentid>
      <timestamp>2013-06-01T06:15:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list real2]] to [[Template:cpp/numeric/complex/dsc real2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc tfun | cpp/numeric/complex/real2 |title=real| returns the real component }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc sin</title>
    <ns>10</ns>
    <id>3553</id>
    <revision>
      <id>58485</id>
      <parentid>53957</parentid>
      <timestamp>2013-06-01T06:15:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list sin]] to [[Template:cpp/numeric/complex/dsc sin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc tfun | cpp/numeric/complex/sin | title=sin{{dsc small|(std::complex)}}     | computes sine of a complex number ({{math|sin(z)}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc sinh</title>
    <ns>10</ns>
    <id>3559</id>
    <revision>
      <id>58489</id>
      <parentid>53958</parentid>
      <timestamp>2013-06-01T06:15:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list sinh]] to [[Template:cpp/numeric/complex/dsc sinh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="147">{{dsc tfun | cpp/numeric/complex/sinh | title=sinh{{dsc small|(std::complex)}}   | computes hyperbolic sine of a complex number ({{math|sh(z)}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc sqrt</title>
    <ns>10</ns>
    <id>3552</id>
    <revision>
      <id>58494</id>
      <parentid>53961</parentid>
      <timestamp>2013-06-01T06:16:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list sqrt]] to [[Template:cpp/numeric/complex/dsc sqrt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/numeric/complex/sqrt | title=sqrt{{dsc small|(std::complex)}} | complex square root in the range of the right half-plane }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc tan</title>
    <ns>10</ns>
    <id>3555</id>
    <revision>
      <id>58499</id>
      <parentid>53962</parentid>
      <timestamp>2013-06-01T06:16:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list tan]] to [[Template:cpp/numeric/complex/dsc tan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc tfun | cpp/numeric/complex/tan | title=tan{{dsc small|(std::complex)}}     | computes tangent of a complex number ({{math|tan(z)}})  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/dsc tanh</title>
    <ns>10</ns>
    <id>3561</id>
    <revision>
      <id>58504</id>
      <parentid>53965</parentid>
      <timestamp>2013-06-01T06:16:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/complex/dcl list tanh]] to [[Template:cpp/numeric/complex/dsc tanh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc tfun | cpp/numeric/complex/tanh | title=tanh{{dsc small|(std::complex)}}   | computes hyperbolic tangent of a complex number }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/navbar</title>
    <ns>10</ns>
    <id>2708</id>
    <revision>
      <id>39976</id>
      <parentid>35814</parentid>
      <timestamp>2012-09-28T20:14:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="249">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/complex/navbar heading
|content3 = cpp/numeric/complex/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/navbar content</title>
    <ns>10</ns>
    <id>4273</id>
    <revision>
      <id>71067</id>
      <parentid>53966</parentid>
      <timestamp>2014-06-05T02:17:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+ operator&quot;&quot;i</comment>
      <text xml:space="preserve" bytes="2217">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/complex/complex}}
{{nv mem ln | cpp/numeric/complex/operator{{=}}}}
{{nv mem ln | cpp/numeric/complex/real}}
{{nv mem ln | cpp/numeric/complex/imag}}
{{nv mem ln | cpp/numeric/complex/operator_arith | operator+{{=}} | operator-{{=}} | operator*{{=}} | operator/{{=}} }}

{{nv h1 | Non-member functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/complex/operator_arith2 | operator+ | operator-}}
{{nv ln | cpp/numeric/complex/operator_arith3 | operator+ | operator- | operator* | operator/ }}
{{nv ln | cpp/numeric/complex/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/complex/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv col next}}
{{nv ln | cpp/numeric/complex/real2|real}}
{{nv ln | cpp/numeric/complex/imag2|imag}}
{{nv ln | cpp/numeric/complex/abs}}
{{nv ln | cpp/numeric/complex/arg}}
{{nv ln | cpp/numeric/complex/norm}}
{{nv ln | cpp/numeric/complex/conj}}
{{nv ln | cpp/numeric/complex/proj|notes={{mark c++11}}}}
{{nv ln | cpp/numeric/complex/polar}}
{{nv ln | cpp/numeric/complex/operator&quot;&quot;i|operator&quot;&quot;i|operator&quot;&quot;if|operator&quot;&quot;il|notes={{mark c++14}}&lt;br&gt;{{mark c++14}}&lt;br&gt;{{mark c++14}}}}
{{nv col end}}

{{nv h2 | Exponential functions}}
{{nv ln | cpp/numeric/complex/exp}}
{{nv ln | cpp/numeric/complex/log}}
{{nv ln | cpp/numeric/complex/log10}}

{{nv h2 | Power functions}}
{{nv ln | cpp/numeric/complex/pow}}
{{nv ln | cpp/numeric/complex/sqrt}}

{{nv h2 | Trigonometric functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/complex/sin}}
{{nv ln | cpp/numeric/complex/cos}}
{{nv ln | cpp/numeric/complex/tan}}
{{nv col next}}
{{nv ln | cpp/numeric/complex/asin | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/complex/acos | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/complex/atan | notes={{mark c++11}}}}
{{nv col end}}

{{nv h2 | Hyperbolic functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/complex/sinh}}
{{nv ln | cpp/numeric/complex/cosh}}
{{nv ln | cpp/numeric/complex/tanh}}
{{nv col next}}
{{nv ln | cpp/numeric/complex/asinh | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/complex/acosh | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/complex/atanh | notes={{mark c++11}}}}
{{nv col end}}
{{nv end}}</text>
      <sha1>57ifjd8obd7nigyob1bvu0cgtl1won4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/navbar heading</title>
    <ns>10</ns>
    <id>2709</id>
    <revision>
      <id>47104</id>
      <parentid>35816</parentid>
      <timestamp>2013-04-23T17:06:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update heading</comment>
      <text xml:space="preserve" bytes="40">{{ltt|cpp/numeric/complex|std::complex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/complex/title</title>
    <ns>10</ns>
    <id>3541</id>
    <revision>
      <id>13416</id>
      <timestamp>2011-11-08T18:49:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=complex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/dsc gcd</title>
    <ns>10</ns>
    <id>15538</id>
    <revision>
      <id>86290</id>
      <parentid>86288</parentid>
      <timestamp>2016-06-27T13:23:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Cubbi moved page [[Template:cpp/algorithm/dsc gcd]] to [[Template:cpp/numeric/dsc gcd]] without leaving a redirect: better place for these</comment>
      <text xml:space="preserve" bytes="143">{{dsc tfun | cpp/numeric/gcd | {{tt|constexpr}} function template returning the greatest common divisor of two integers|notes={{mark c++17}} }}</text>
      <sha1>knl4kptz2eg9o0aheyf3q14j6cj96mi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/dsc lcm</title>
    <ns>10</ns>
    <id>15539</id>
    <revision>
      <id>86291</id>
      <parentid>86289</parentid>
      <timestamp>2016-06-27T13:23:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Cubbi moved page [[Template:cpp/algorithm/dsc lcm]] to [[Template:cpp/numeric/dsc lcm]] without leaving a redirect: better place for these</comment>
      <text xml:space="preserve" bytes="141">{{dsc tfun | cpp/numeric/lcm | {{tt|constexpr}} function template returning the least common multiple of two integers|notes={{mark c++17}} }}</text>
      <sha1>0kvfbmdoh52on49jguiju12hbyoqwax</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/dsc operator&quot;&quot;i</title>
    <ns>10</ns>
    <id>13024</id>
    <revision>
      <id>71065</id>
      <parentid>65916</parentid>
      <timestamp>2014-06-05T02:11:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>in complex subdir</comment>
      <text xml:space="preserve" bytes="187">{{dsc fun | cpp/numeric/complex/operator&quot;&quot;i | title=operator&quot;&quot;if&lt;br&gt;operator&quot;&quot;i&lt;br&gt;operator&quot;&quot;il | A {{lc|std::complex}} literal representing pure imaginary number | notes={{mark c++14}}}}</text>
      <sha1>m26uhhid68lwlv84jdeekyqkw7fz1gl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc FE DFL ENV</title>
    <ns>10</ns>
    <id>5238</id>
    <revision>
      <id>58508</id>
      <parentid>53967</parentid>
      <timestamp>2013-06-01T06:16:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list FE DFL ENV]] to [[Template:cpp/numeric/fenv/dsc FE DFL ENV]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc macro const | cpp/numeric/fenv/FE_DFL_ENV | default floating-point environment|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc FE exceptions</title>
    <ns>10</ns>
    <id>5236</id>
    <revision>
      <id>58513</id>
      <parentid>53968</parentid>
      <timestamp>2013-06-01T06:16:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list FE exceptions]] to [[Template:cpp/numeric/fenv/dsc FE exceptions]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="200">{{dsc macro const | cpp/numeric/fenv/FE_exceptions | title=FE_ALL_EXCEPT&lt;br&gt;FE_DIVBYZERO&lt;br&gt;FE_INEXACT&lt;br&gt;FE_INVALID&lt;br&gt;FE_OVERFLOW&lt;br&gt;FE_UNDERFLOW | floating-point exceptions | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc FE round</title>
    <ns>10</ns>
    <id>5237</id>
    <revision>
      <id>58517</id>
      <parentid>53971</parentid>
      <timestamp>2013-06-01T06:16:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list FE round]] to [[Template:cpp/numeric/fenv/dsc FE round]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc macro const | cpp/numeric/fenv/FE_round | title=FE_DOWNWARD&lt;br&gt;FE_TONEAREST&lt;br&gt;FE_TOWARDZERO&lt;br&gt;FE_UPWARD | floating-point rounding direction|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc feclearexcept</title>
    <ns>10</ns>
    <id>5239</id>
    <revision>
      <id>58521</id>
      <parentid>53972</parentid>
      <timestamp>2013-06-01T06:16:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list feclearexcept]] to [[Template:cpp/numeric/fenv/dsc feclearexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/numeric/fenv/feclearexcept | clears the specified floating-point status flags|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc feenv</title>
    <ns>10</ns>
    <id>5245</id>
    <revision>
      <id>58525</id>
      <parentid>53975</parentid>
      <timestamp>2013-06-01T06:16:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list feenv]] to [[Template:cpp/numeric/fenv/dsc feenv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="146">{{dsc fun | cpp/numeric/fenv/feenv | title=fegetenv&lt;br&gt;fesetenv |  saves or restores the current floating point environment|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc feexceptflag</title>
    <ns>10</ns>
    <id>5240</id>
    <revision>
      <id>58528</id>
      <parentid>53976</parentid>
      <timestamp>2013-06-01T06:16:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list feexceptflag]] to [[Template:cpp/numeric/fenv/dsc feexceptflag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="229">{{dsc fun | cpp/numeric/fenv/feexceptflag | title=fegetexceptflag&lt;br&gt;fesetexceptflag|copies the state of the specified floating-point status flags from or to the floating-point environment|notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc feholdexcept</title>
    <ns>10</ns>
    <id>5246</id>
    <revision>
      <id>58533</id>
      <parentid>53977</parentid>
      <timestamp>2013-06-01T06:16:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list feholdexcept]] to [[Template:cpp/numeric/fenv/dsc feholdexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc fun | cpp/numeric/fenv/feholdexcept | saves the environment, clears all status flags and ignores all future errors|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc feraiseexcept</title>
    <ns>10</ns>
    <id>5241</id>
    <revision>
      <id>58537</id>
      <parentid>53978</parentid>
      <timestamp>2013-06-01T06:16:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list feraiseexcept]] to [[Template:cpp/numeric/fenv/dsc feraiseexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc fun | cpp/numeric/fenv/feraiseexcept | raises the specified floating-point exceptions|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc feround</title>
    <ns>10</ns>
    <id>3742</id>
    <revision>
      <id>58542</id>
      <parentid>53981</parentid>
      <timestamp>2013-06-01T06:16:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list feround]] to [[Template:cpp/numeric/fenv/dsc feround]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="147">{{dsc fun | cpp/numeric/fenv/feround | title=fegetround&lt;br&gt;fesetround | gets or sets rounding  direction | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc fetestexcept</title>
    <ns>10</ns>
    <id>5243</id>
    <revision>
      <id>58546</id>
      <parentid>53984</parentid>
      <timestamp>2013-06-01T06:16:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list fetestexcept]] to [[Template:cpp/numeric/fenv/dsc fetestexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | cpp/numeric/fenv/fetestexcept | determines which of the specified floating-point status flags are set|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/dsc feupdateenv</title>
    <ns>10</ns>
    <id>5248</id>
    <revision>
      <id>58551</id>
      <parentid>53985</parentid>
      <timestamp>2013-06-01T06:17:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/dcl list feupdateenv]] to [[Template:cpp/numeric/fenv/dsc feupdateenv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc fun | cpp/numeric/fenv/feupdateenv | restores the floating-point environment and raises the previously raise exceptions|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/example1</title>
    <ns>10</ns>
    <id>5250</id>
    <revision>
      <id>36104</id>
      <parentid>23458</parentid>
      <timestamp>2012-06-17T11:23:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>/* Example */ fmt</comment>
      <text xml:space="preserve" bytes="1189">{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cfenv&gt;
#include &lt;cmath&gt;

#pragma STDC FENV_ACCESS ON

volatile double zero = 0.0; // volatile not needed where FENV_ACCESS is supported
volatile double one = 1.0;  // volatile not needed where FENV_ACCESS is supported

int main()
{
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt;  &quot;1.0/0.0 = &quot; &lt;&lt; 1.0 / zero &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO)) {
        std::cout &lt;&lt; &quot;division by zero reported\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;divsion by zero not reported\n&quot;;
    }

    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;1.0/10 = &quot; &lt;&lt; one/10 &lt;&lt; '\n';
    if(std::fetestexcept(FE_INEXACT)) {
        std::cout &lt;&lt; &quot;inexact result reported\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;inexact result not reported\n&quot;;
    }

    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;sqrt(-1) = &quot; &lt;&lt; std::sqrt(-1) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID)) {
        std::cout &lt;&lt; &quot;invalid result reported\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;invalid result not reported\n&quot;;
    }
}
 | output=
1.0/0.0 = inf
division by zero reported
1.0/10 = 0.1
inexact result reported
sqrt(-1) = -nan
invalid result reported
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/navbar</title>
    <ns>10</ns>
    <id>2711</id>
    <revision>
      <id>39977</id>
      <parentid>35817</parentid>
      <timestamp>2012-09-28T20:14:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/fenv/navbar heading
|content3 = cpp/numeric/fenv/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/navbar content</title>
    <ns>10</ns>
    <id>5249</id>
    <revision>
      <id>53988</id>
      <parentid>36560</parentid>
      <timestamp>2013-06-01T05:08:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1035">{{nv begin}}
{{nv h1 | Functions}}
{{nv ln | cpp/numeric/fenv/feclearexcept | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/fetestexcept | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/feraiseexcept | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/feexceptflag | fegetexceptflag | fesetexceptflag | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/feround | fegetround | fesetround | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/feenv | fegetenv | fesetenv | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/feholdexcept | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/feupdateenv | notes={{mark c++11}}}}

{{nv h1 | Macro constants}}
{{nv ln | cpp/numeric/fenv/FE_exceptions | FE_ALL_EXCEPT| FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/FE_round | FE_DOWNWARD | FE_TONEAREST | FE_TOWARDZERO | FE_UPWARD | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/fenv/FE_DFL_ENV | notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/fenv/navbar heading</title>
    <ns>10</ns>
    <id>2712</id>
    <revision>
      <id>34067</id>
      <parentid>10221</parentid>
      <timestamp>2012-06-15T21:11:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/fenv/sidebar heading]] to [[Template:cpp/numeric/fenv/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="47">[[cpp/numeric/fenv|Floating-point environment]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc FP categories</title>
    <ns>10</ns>
    <id>3689</id>
    <revision>
      <id>71597</id>
      <parentid>58556</parentid>
      <timestamp>2014-06-14T14:28:46Z</timestamp>
      <contributor>
        <ip>89.241.169.113</ip>
      </contributor>
      <text xml:space="preserve" bytes="255">{{dsc macro const | cpp/numeric/math/FP_categories | title=FP_NORMAL&lt;br&gt;FP_SUBNORMAL&lt;br&gt;FP_ZERO&lt;br&gt;FP_INFINITE&lt;br&gt;FP_NAN | indicates a floating-point category | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1>s2aofidklpn6a3zb3pxws9n1tvf9pkk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc HUGE VAL</title>
    <ns>10</ns>
    <id>1597</id>
    <revision>
      <id>58560</id>
      <parentid>53992</parentid>
      <timestamp>2013-06-01T06:17:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list HUGE VAL]] to [[Template:cpp/numeric/math/dsc HUGE VAL]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="232">{{dsc macro const | cpp/numeric/math/HUGE_VAL | title=HUGE_VALF&lt;br&gt;HUGE_VAL&lt;br&gt;HUGE_VALL | indicates the overflow value for {{c|float}}, {{c|double}} and {{c|long double}} respectively  | notes={{mark c++11}}&lt;br&gt;&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc INFINITY</title>
    <ns>10</ns>
    <id>13531</id>
    <revision>
      <id>70378</id>
      <timestamp>2014-05-21T14:49:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{dsc macro const | cpp/numeric/math/INFINITY | evaluates to positive infinity or the value guaranteed to overflow a {{c|float}}| notes={{mark c++11}}  }}</text>
      <sha1>39d7gr5i8m0tmvxkq1ufxtehdmy41f5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc NAN</title>
    <ns>10</ns>
    <id>13532</id>
    <revision>
      <id>70380</id>
      <timestamp>2014-05-21T14:51:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc macro const | cpp/numeric/math/NAN | evaluates to a quiet NaN of type {{c|float}} | notes={{mark c++11}}}}</text>
      <sha1>m5nw1lgurh048zcl8wu79977mnsv94b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc abs</title>
    <ns>10</ns>
    <id>1600</id>
    <revision>
      <id>71891</id>
      <parentid>71145</parentid>
      <timestamp>2014-07-01T03:59:19Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>- imaxabs defined in other template</comment>
      <text xml:space="preserve" bytes="184">{{dsc fun | cpp/numeric/math/abs | title=abs{{dsc small|(int)}}&lt;br&gt;labs&lt;br&gt;llabs | computes absolute value of an integral value ({{math|{{!}}x{{!}}}}) | notes=&lt;br&gt;&lt;br&gt;{{mark c++11}} }}</text>
      <sha1>3ycszb6hzpayg719uneuh5fvwb4tcsu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc acos</title>
    <ns>10</ns>
    <id>1601</id>
    <revision>
      <id>58569</id>
      <parentid>53994</parentid>
      <timestamp>2013-06-01T06:17:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list acos]] to [[Template:cpp/numeric/math/dsc acos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/numeric/math/acos |computes arc cosine ({{math|arccos(x)}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc acosh</title>
    <ns>10</ns>
    <id>1602</id>
    <revision>
      <id>70601</id>
      <parentid>66440</parentid>
      <timestamp>2014-05-26T06:06:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>'inverse'</comment>
      <text xml:space="preserve" bytes="121">{{dsc fun | cpp/numeric/math/acosh |computes the inverse hyperbolic cosine ({{math|arcosh(x)}}) | notes={{mark c++11}} }}</text>
      <sha1>n2fcbf7350y38u6szmgtzds7x8g4xqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc asin</title>
    <ns>10</ns>
    <id>1603</id>
    <revision>
      <id>58578</id>
      <parentid>53998</parentid>
      <timestamp>2013-06-01T06:17:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list asin]] to [[Template:cpp/numeric/math/dsc asin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc fun | cpp/numeric/math/asin | computes arc sine ({{math|arcsin(x)}})}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc asinh</title>
    <ns>10</ns>
    <id>1604</id>
    <revision>
      <id>70571</id>
      <parentid>70570</parentid>
      <timestamp>2014-05-25T03:01:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>er, this isn't the C one..</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | cpp/numeric/math/asinh |computes the inverse hyperbolic sine ({{math|arsinh(x)}}) | notes={{mark c++11}} }}</text>
      <sha1>bozbz6dlj24sklkayot7exxderesxm5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc atan</title>
    <ns>10</ns>
    <id>1605</id>
    <revision>
      <id>58586</id>
      <parentid>54001</parentid>
      <timestamp>2013-06-01T06:17:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list atan]] to [[Template:cpp/numeric/math/dsc atan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/numeric/math/atan |computes arc tangent ({{math|arctan(x)}})}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc atan2</title>
    <ns>10</ns>
    <id>1606</id>
    <revision>
      <id>58590</id>
      <parentid>54002</parentid>
      <timestamp>2013-06-01T06:17:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list atan2]] to [[Template:cpp/numeric/math/dsc atan2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc fun | cpp/numeric/math/atan2 |arc tangent, using signs to determine quadrants }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc atanh</title>
    <ns>10</ns>
    <id>1607</id>
    <revision>
      <id>70602</id>
      <parentid>66442</parentid>
      <timestamp>2014-05-26T06:06:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>inverse</comment>
      <text xml:space="preserve" bytes="122">{{dsc fun | cpp/numeric/math/atanh |computes the inverse hyperbolic tangent ({{math|artanh(x)}}) | notes={{mark c++11}} }}</text>
      <sha1>qx7y45m2cwb6zlkvnu3z10wd7s3v8iw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc cbrt</title>
    <ns>10</ns>
    <id>1608</id>
    <revision>
      <id>58599</id>
      <parentid>54004</parentid>
      <timestamp>2013-06-01T06:18:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list cbrt]] to [[Template:cpp/numeric/math/dsc cbrt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc fun | cpp/numeric/math/cbrt | computes cubic root  ({{math|{{mrad|x|3}}}}) | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc ceil</title>
    <ns>10</ns>
    <id>1609</id>
    <revision>
      <id>58603</id>
      <parentid>54007</parentid>
      <timestamp>2013-06-01T06:18:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list ceil]] to [[Template:cpp/numeric/math/dsc ceil]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | cpp/numeric/math/ceil | nearest integer not less than the given value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc copysign</title>
    <ns>10</ns>
    <id>1610</id>
    <revision>
      <id>58608</id>
      <parentid>54008</parentid>
      <timestamp>2013-06-01T06:18:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list copysign]] to [[Template:cpp/numeric/math/dsc copysign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | cpp/numeric/math/copysign | copies the sign of a floating point value | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc cos</title>
    <ns>10</ns>
    <id>1611</id>
    <revision>
      <id>58612</id>
      <parentid>54009</parentid>
      <timestamp>2013-06-01T06:18:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list cos]] to [[Template:cpp/numeric/math/dsc cos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc fun | cpp/numeric/math/cos |computes cosine ({{math|cos(x)}})}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc cosh</title>
    <ns>10</ns>
    <id>1612</id>
    <revision>
      <id>58616</id>
      <parentid>54010</parentid>
      <timestamp>2013-06-01T06:18:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list cosh]] to [[Template:cpp/numeric/math/dsc cosh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc fun | cpp/numeric/math/cosh |computes hyperbolic cosine ({{math|ch(x)}})}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc div</title>
    <ns>10</ns>
    <id>1613</id>
    <revision>
      <id>71892</id>
      <parentid>71172</parentid>
      <timestamp>2014-07-01T04:01:45Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>- imaxdiv defined in other template</comment>
      <text xml:space="preserve" bytes="168">{{dsc fun | cpp/numeric/math/div | title=div{{dsc small|(int)}}&lt;br&gt;ldiv&lt;br&gt;lldiv | computes quotient and remainder of integer division | notes=&lt;br&gt;&lt;br&gt;{{mark c++11}} }}</text>
      <sha1>p0skqhytoucnklxtd11cb4qowsa9ua8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc div t</title>
    <ns>10</ns>
    <id>13641</id>
    <revision>
      <id>71384</id>
      <parentid>71375</parentid>
      <timestamp>2014-06-10T01:27:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link to where the type is defined</comment>
      <text xml:space="preserve" bytes="108">{{dsc typedef | cpp/numeric/math/div | title=div_t | structure type, return of the {{c|std::div}} function}}</text>
      <sha1>0v0h1xgy8ts1b7eimuoq2xkbgrjzoxk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc double t</title>
    <ns>10</ns>
    <id>13640</id>
    <revision>
      <id>71387</id>
      <parentid>71374</parentid>
      <timestamp>2014-06-10T01:30:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>nolink</comment>
      <text xml:space="preserve" bytes="134">{{dsc typedef | double_t | nolink=true | most efficient floating-point type at least as wide as {{c|double}} | notes={{mark c++11}} }}</text>
      <sha1>jpyls9mpmedj7xkt13vooke439953uh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc erf</title>
    <ns>10</ns>
    <id>1614</id>
    <revision>
      <id>58624</id>
      <parentid>54014</parentid>
      <timestamp>2013-06-01T06:18:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list erf]] to [[Template:cpp/numeric/math/dsc erf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun |cpp/numeric/math/erf | error function | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc erfc</title>
    <ns>10</ns>
    <id>1615</id>
    <revision>
      <id>58628</id>
      <parentid>54017</parentid>
      <timestamp>2013-06-01T06:18:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list erfc]] to [[Template:cpp/numeric/math/dsc erfc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc fun | cpp/numeric/math/erfc | complementary error function | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc exp</title>
    <ns>10</ns>
    <id>1616</id>
    <revision>
      <id>58632</id>
      <parentid>54018</parentid>
      <timestamp>2013-06-01T06:18:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list exp]] to [[Template:cpp/numeric/math/dsc exp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/numeric/math/exp | returns ''e'' raised to the given power ({{math|e&lt;sup&gt;x&lt;/sup&gt;}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc exp2</title>
    <ns>10</ns>
    <id>1617</id>
    <revision>
      <id>58636</id>
      <parentid>54019</parentid>
      <timestamp>2013-06-01T06:18:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list exp2]] to [[Template:cpp/numeric/math/dsc exp2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | cpp/numeric/math/exp2 | returns ''2'' raised to the given power ({{math|2&lt;sup&gt;x&lt;/sup&gt;}}) | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc expm1</title>
    <ns>10</ns>
    <id>1618</id>
    <revision>
      <id>58640</id>
      <parentid>54020</parentid>
      <timestamp>2013-06-01T06:19:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list expm1]] to [[Template:cpp/numeric/math/dsc expm1]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc fun | cpp/numeric/math/expm1 | returns ''e'' raised to the given power, minus one ({{math|e&lt;sup&gt;x&lt;/sup&gt;-1}}) | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fabs</title>
    <ns>10</ns>
    <id>1619</id>
    <revision>
      <id>58645</id>
      <parentid>54021</parentid>
      <timestamp>2013-06-01T06:19:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fabs]] to [[Template:cpp/numeric/math/dsc fabs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="145">{{dsc fun | cpp/numeric/math/fabs | title=abs{{dsc small|(float)}} &lt;br&gt; fabs | absolute value of a floating point value ({{math|{{!}}x{{!}}}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fdim</title>
    <ns>10</ns>
    <id>1620</id>
    <revision>
      <id>58649</id>
      <parentid>54022</parentid>
      <timestamp>2013-06-01T06:19:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fdim]] to [[Template:cpp/numeric/math/dsc fdim]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc fun | cpp/numeric/math/fdim | positive difference of two floating point values ({{math|max(0, x-y)}}) | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc float t</title>
    <ns>10</ns>
    <id>13639</id>
    <revision>
      <id>71388</id>
      <parentid>71380</parentid>
      <timestamp>2014-06-10T01:31:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>nolink</comment>
      <text xml:space="preserve" bytes="132">{{dsc typedef | nolink=true | float_t | most efficient floating-point type at least as wide as {{c|float}} | notes={{mark c++11}} }}</text>
      <sha1>997rhto9ft5s1kqgb391tf9i782fi0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc floor</title>
    <ns>10</ns>
    <id>1621</id>
    <revision>
      <id>58653</id>
      <parentid>54023</parentid>
      <timestamp>2013-06-01T06:19:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list floor]] to [[Template:cpp/numeric/math/dsc floor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/numeric/math/floor | nearest integer not greater than the given value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fma</title>
    <ns>10</ns>
    <id>1622</id>
    <revision>
      <id>58657</id>
      <parentid>54024</parentid>
      <timestamp>2013-06-01T06:19:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fma]] to [[Template:cpp/numeric/math/dsc fma]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc fun | cpp/numeric/math/fma | fused multiply-add operation | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fmax</title>
    <ns>10</ns>
    <id>1623</id>
    <revision>
      <id>58661</id>
      <parentid>54028</parentid>
      <timestamp>2013-06-01T06:19:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fmax]] to [[Template:cpp/numeric/math/dsc fmax]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | cpp/numeric/math/fmax | larger of two floating point values | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fmin</title>
    <ns>10</ns>
    <id>1624</id>
    <revision>
      <id>58665</id>
      <parentid>54033</parentid>
      <timestamp>2013-06-01T06:19:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fmin]] to [[Template:cpp/numeric/math/dsc fmin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc fun | cpp/numeric/math/fmin | smaller of two floating point values | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fmod</title>
    <ns>10</ns>
    <id>1625</id>
    <revision>
      <id>58670</id>
      <parentid>54036</parentid>
      <timestamp>2013-06-01T06:19:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fmod]] to [[Template:cpp/numeric/math/dsc fmod]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/numeric/math/fmod | remainder of the floating point division operation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fnan</title>
    <ns>10</ns>
    <id>1626</id>
    <revision>
      <id>58674</id>
      <parentid>54037</parentid>
      <timestamp>2013-06-01T06:19:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fnan]] to [[Template:cpp/numeric/math/dsc fnan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc fun | cpp/numeric/math/nan | title=nan&lt;br&gt;nanf&lt;br&gt;nanl | not-a-number (NaN) | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc fpclassify</title>
    <ns>10</ns>
    <id>1627</id>
    <revision>
      <id>58678</id>
      <parentid>54038</parentid>
      <timestamp>2013-06-01T06:19:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list fpclassify]] to [[Template:cpp/numeric/math/dsc fpclassify]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | cpp/numeric/math/fpclassify | categorizes the given floating point value | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc frexp</title>
    <ns>10</ns>
    <id>1628</id>
    <revision>
      <id>58682</id>
      <parentid>54041</parentid>
      <timestamp>2013-06-01T06:19:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list frexp]] to [[Template:cpp/numeric/math/dsc frexp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc fun | cpp/numeric/math/frexp |decomposes a number into significand and a power of {{c|2}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc hypot</title>
    <ns>10</ns>
    <id>1629</id>
    <revision>
      <id>58686</id>
      <parentid>54042</parentid>
      <timestamp>2013-06-01T06:19:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list hypot]] to [[Template:cpp/numeric/math/dsc hypot]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="174">{{dsc fun | cpp/numeric/math/hypot | computes square root of the sum of the squares of two given numbers ({{math|{{mrad|x{{su|p=2}}+y{{su|p=2}}}}}}) | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc ilogb</title>
    <ns>10</ns>
    <id>1630</id>
    <revision>
      <id>58690</id>
      <parentid>54043</parentid>
      <timestamp>2013-06-01T06:19:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list ilogb]] to [[Template:cpp/numeric/math/dsc ilogb]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/numeric/math/ilogb | extracts exponent of the number | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc imaxabs</title>
    <ns>10</ns>
    <id>13700</id>
    <revision>
      <id>71888</id>
      <timestamp>2014-07-01T03:54:56Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>New template to separate abs and imaxabs</comment>
      <text xml:space="preserve" bytes="199">{{dsc fun | cpp/numeric/math/abs | title=abs{{dsc small|(std::intmax_t)}}&lt;br&gt;imaxabs | computes absolute value of an integral value ({{math|{{!}}x{{!}} }}) | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1>o36lf13kp05l68412hcqil3j4h0k0fk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc imaxdiv</title>
    <ns>10</ns>
    <id>13701</id>
    <revision>
      <id>71889</id>
      <timestamp>2014-07-01T03:55:00Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>New template to separate div and imaxdiv</comment>
      <text xml:space="preserve" bytes="182">{{dsc fun | cpp/numeric/math/div | title=div{{dsc small|(std::intmax_t)}}&lt;br&gt;imaxdiv | computes quotient and remainder of integer division | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1>4w8747z77uadsn8ttbay5qaw1vxku2v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc imaxdiv t</title>
    <ns>10</ns>
    <id>13644</id>
    <revision>
      <id>71386</id>
      <parentid>71378</parentid>
      <timestamp>2014-06-10T01:28:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link to where the type is defined</comment>
      <text xml:space="preserve" bytes="140">{{dsc typedef | cpp/numeric/math/div | title=imaxdiv_t | structure type, return of the {{c|std::imaxdiv}} function | notes={{mark c++11}} }}</text>
      <sha1>oc8wmnsffr01rjppvv3i1bdckv05egm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isfinite</title>
    <ns>10</ns>
    <id>1631</id>
    <revision>
      <id>58694</id>
      <parentid>54044</parentid>
      <timestamp>2013-06-01T06:19:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isfinite]] to [[Template:cpp/numeric/math/dsc isfinite]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | cpp/numeric/math/isfinite | checks if the given number has finite value | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isgreater</title>
    <ns>10</ns>
    <id>9208</id>
    <revision>
      <id>58698</id>
      <parentid>54047</parentid>
      <timestamp>2013-06-01T06:19:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isgreater]] to [[Template:cpp/numeric/math/dsc isgreater]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc fun | cpp/numeric/math/isgreater | checks if the first floating-point argument is greater than the second| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isgreaterequal</title>
    <ns>10</ns>
    <id>9209</id>
    <revision>
      <id>58703</id>
      <parentid>54048</parentid>
      <timestamp>2013-06-01T06:20:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isgreaterequal]] to [[Template:cpp/numeric/math/dsc isgreaterequal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc fun | cpp/numeric/math/isgreaterequal | checks if the first floating-point argument is greater or equal than the second| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isinf</title>
    <ns>10</ns>
    <id>1632</id>
    <revision>
      <id>58707</id>
      <parentid>54049</parentid>
      <timestamp>2013-06-01T06:20:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isinf]] to [[Template:cpp/numeric/math/dsc isinf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | cpp/numeric/math/isinf | checks if the given number is infinite | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isless</title>
    <ns>10</ns>
    <id>9210</id>
    <revision>
      <id>58711</id>
      <parentid>54052</parentid>
      <timestamp>2013-06-01T06:20:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isless]] to [[Template:cpp/numeric/math/dsc isless]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc fun | cpp/numeric/math/isless | checks if the first floating-point argument is less than the second| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc islessequal</title>
    <ns>10</ns>
    <id>9211</id>
    <revision>
      <id>58715</id>
      <parentid>54053</parentid>
      <timestamp>2013-06-01T06:20:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list islessequal]] to [[Template:cpp/numeric/math/dsc islessequal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc fun | cpp/numeric/math/islessequal | checks if the first floating-point argument is less or equal than the second| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc islessgreater</title>
    <ns>10</ns>
    <id>9212</id>
    <revision>
      <id>58719</id>
      <parentid>54056</parentid>
      <timestamp>2013-06-01T06:20:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list islessgreater]] to [[Template:cpp/numeric/math/dsc islessgreater]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc fun | cpp/numeric/math/islessgreater | checks if the first floating-point argument is less or greater than the second| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isnan</title>
    <ns>10</ns>
    <id>1633</id>
    <revision>
      <id>58723</id>
      <parentid>54057</parentid>
      <timestamp>2013-06-01T06:20:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isnan]] to [[Template:cpp/numeric/math/dsc isnan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc fun | cpp/numeric/math/isnan | checks if the given number is NaN| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isnormal</title>
    <ns>10</ns>
    <id>1634</id>
    <revision>
      <id>58727</id>
      <parentid>54058</parentid>
      <timestamp>2013-06-01T06:20:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isnormal]] to [[Template:cpp/numeric/math/dsc isnormal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/numeric/math/isnormal | checks if the given number is normal | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc isunordered</title>
    <ns>10</ns>
    <id>9213</id>
    <revision>
      <id>58731</id>
      <parentid>54061</parentid>
      <timestamp>2013-06-01T06:20:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list isunordered]] to [[Template:cpp/numeric/math/dsc isunordered]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc fun | cpp/numeric/math/isunordered | checks if two floating-point values are unordered| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc ldexp</title>
    <ns>10</ns>
    <id>1635</id>
    <revision>
      <id>58734</id>
      <parentid>54062</parentid>
      <timestamp>2013-06-01T06:20:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list ldexp]] to [[Template:cpp/numeric/math/dsc ldexp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | cpp/numeric/math/ldexp | multiplies a number by {{c|2}} raised to a power}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc ldiv t</title>
    <ns>10</ns>
    <id>13642</id>
    <revision>
      <id>71385</id>
      <parentid>71376</parentid>
      <timestamp>2014-06-10T01:28:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link to where the type is defined</comment>
      <text xml:space="preserve" bytes="110">{{dsc typedef | cpp/numeric/math/div | title=ldiv_t | structure type, return of the {{c|std::ldiv}} function}}</text>
      <sha1>aswp18f0rjz4kzqe728ftecu0dvn7q7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc lgamma</title>
    <ns>10</ns>
    <id>1636</id>
    <revision>
      <id>58738</id>
      <parentid>54063</parentid>
      <timestamp>2013-06-01T06:20:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list lgamma]] to [[Template:cpp/numeric/math/dsc lgamma]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc fun | cpp/numeric/math/lgamma | natural logarithm of the gamma function | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc lldiv t</title>
    <ns>10</ns>
    <id>13643</id>
    <revision>
      <id>71383</id>
      <parentid>71377</parentid>
      <timestamp>2014-06-10T01:27:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to where the type is defined</comment>
      <text xml:space="preserve" bytes="136">{{dsc typedef | cpp/numeric/math/div | title=lldiv_t | structure type, return of the {{c|std::lldiv}} function | notes={{mark c++11}} }}</text>
      <sha1>eqod6ex7glxdmrltcpuy0ooywygzn7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc log</title>
    <ns>10</ns>
    <id>1637</id>
    <revision>
      <id>58742</id>
      <parentid>54064</parentid>
      <timestamp>2013-06-01T06:20:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list log]] to [[Template:cpp/numeric/math/dsc log]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | cpp/numeric/math/log | computes natural (base ''e'') logarithm (to base ''e'') ({{math|ln(x)}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc log10</title>
    <ns>10</ns>
    <id>1638</id>
    <revision>
      <id>58746</id>
      <parentid>54067</parentid>
      <timestamp>2013-06-01T06:20:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list log10]] to [[Template:cpp/numeric/math/dsc log10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | cpp/numeric/math/log10 | computes common (base ''10'') logarithm ({{math|log&lt;sub&gt;10&lt;/sub&gt;(x)}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc log1p</title>
    <ns>10</ns>
    <id>1639</id>
    <revision>
      <id>70590</id>
      <parentid>58750</parentid>
      <timestamp>2014-05-25T20:21:58Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ ({{math|ln(1+x)}})</comment>
      <text xml:space="preserve" bytes="143">{{dsc fun | cpp/numeric/math/log1p |  natural logarithm (to base ''e'') of 1 plus the given number ({{math|ln(1+x)}}) | notes={{mark c++11}} }}</text>
      <sha1>7vx05iylv8kl5lnzd3mb9iy9wzqvs6i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc log2</title>
    <ns>10</ns>
    <id>4901</id>
    <revision>
      <id>70592</id>
      <parentid>58754</parentid>
      <timestamp>2014-05-25T20:27:21Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ ({{math|log&lt;sub&gt;2&lt;/sub&gt;(x)}})</comment>
      <text xml:space="preserve" bytes="128">{{dsc fun | cpp/numeric/math/log2 | base 2 logarithm of the given number ({{math|log&lt;sub&gt;2&lt;/sub&gt;(x)}}) | notes={{mark c++11}} }}</text>
      <sha1>6ra8s26io4m4s0u4o78sdcnxg1p0sco</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc logb</title>
    <ns>10</ns>
    <id>1640</id>
    <revision>
      <id>58758</id>
      <parentid>54072</parentid>
      <timestamp>2013-06-01T06:20:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list logb]] to [[Template:cpp/numeric/math/dsc logb]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc fun | cpp/numeric/math/logb | extracts exponent of the number | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc math errhandling</title>
    <ns>10</ns>
    <id>9221</id>
    <revision>
      <id>58762</id>
      <parentid>54073</parentid>
      <timestamp>2013-06-01T06:20:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list math errhandling]] to [[Template:cpp/numeric/math/dsc math errhandling]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="252">{{dsc macro const | cpp/numeric/math/math_errhandling |title=math_errhandling&lt;br&gt;MATH_ERRNO&lt;br&gt;MATH_ERREXCEPT | defines the error handling mechanism used by the common mathematical functions | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc modf</title>
    <ns>10</ns>
    <id>1641</id>
    <revision>
      <id>58767</id>
      <parentid>54076</parentid>
      <timestamp>2013-06-01T06:20:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list modf]] to [[Template:cpp/numeric/math/dsc modf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc fun | cpp/numeric/math/modf |decomposes a number into integer and fractional parts }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc nearbyint</title>
    <ns>10</ns>
    <id>1642</id>
    <revision>
      <id>58770</id>
      <parentid>54077</parentid>
      <timestamp>2013-06-01T06:20:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list nearbyint]] to [[Template:cpp/numeric/math/dsc nearbyint]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | cpp/numeric/math/nearbyint | nearest integer using current rounding mode | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc nextafter</title>
    <ns>10</ns>
    <id>1643</id>
    <revision>
      <id>58774</id>
      <parentid>54078</parentid>
      <timestamp>2013-06-01T06:21:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list nextafter]] to [[Template:cpp/numeric/math/dsc nextafter]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="180">{{dsc fun | cpp/numeric/math/nextafter | title=nextafter&lt;br&gt;nexttoward | next representable floating point value towards the given value | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc pow</title>
    <ns>10</ns>
    <id>1645</id>
    <revision>
      <id>58779</id>
      <parentid>54079</parentid>
      <timestamp>2013-06-01T06:21:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list pow]] to [[Template:cpp/numeric/math/dsc pow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc fun | cpp/numeric/math/pow | raises a number to the given power ({{math|x&lt;sup&gt;y&lt;/sup&gt;}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc remainder</title>
    <ns>10</ns>
    <id>1646</id>
    <revision>
      <id>58784</id>
      <parentid>54082</parentid>
      <timestamp>2013-06-01T06:21:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list remainder]] to [[Template:cpp/numeric/math/dsc remainder]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | cpp/numeric/math/remainder | signed remainder of the division operation | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc remquo</title>
    <ns>10</ns>
    <id>1647</id>
    <revision>
      <id>58788</id>
      <parentid>54083</parentid>
      <timestamp>2013-06-01T06:21:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list remquo]] to [[Template:cpp/numeric/math/dsc remquo]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc fun | cpp/numeric/math/remquo | signed remainder as well as the three last bits of the division operation | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc rint</title>
    <ns>10</ns>
    <id>1648</id>
    <revision>
      <id>58792</id>
      <parentid>54086</parentid>
      <timestamp>2013-06-01T06:21:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list rint]] to [[Template:cpp/numeric/math/dsc rint]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="215">{{dsc fun | cpp/numeric/math/rint | title=rint&lt;br&gt;lrint&lt;br&gt;llrint | nearest integer using current rounding mode with &lt;br&gt; exception if the result differs | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc round</title>
    <ns>10</ns>
    <id>1649</id>
    <revision>
      <id>58797</id>
      <parentid>54087</parentid>
      <timestamp>2013-06-01T06:21:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list round]] to [[Template:cpp/numeric/math/dsc round]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="191">{{dsc fun | cpp/numeric/math/round | title=round&lt;br&gt;lround&lt;br&gt;llround | nearest integer, rounding away from zero in halfway cases | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc scalbn</title>
    <ns>10</ns>
    <id>1650</id>
    <revision>
      <id>58801</id>
      <parentid>54088</parentid>
      <timestamp>2013-06-01T06:21:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list scalbn]] to [[Template:cpp/numeric/math/dsc scalbn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc fun | cpp/numeric/math/scalbn | title=scalbn&lt;br&gt;scalbln | multiplies a number by {{lc|FLT_RADIX}} raised to a power | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc signbit</title>
    <ns>10</ns>
    <id>1651</id>
    <revision>
      <id>58805</id>
      <parentid>54091</parentid>
      <timestamp>2013-06-01T06:21:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list signbit]] to [[Template:cpp/numeric/math/dsc signbit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc fun | cpp/numeric/math/signbit | checks if the given number is negative | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc sin</title>
    <ns>10</ns>
    <id>1652</id>
    <revision>
      <id>58810</id>
      <parentid>54094</parentid>
      <timestamp>2013-06-01T06:21:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list sin]] to [[Template:cpp/numeric/math/dsc sin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc fun | cpp/numeric/math/sin | computes sine ({{math|sin(x)}})}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc sinh</title>
    <ns>10</ns>
    <id>1653</id>
    <revision>
      <id>58813</id>
      <parentid>54095</parentid>
      <timestamp>2013-06-01T06:21:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list sinh]] to [[Template:cpp/numeric/math/dsc sinh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc fun | cpp/numeric/math/sinh | computes hyperbolic sine ({{math|sh(x)}})}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc sqrt</title>
    <ns>10</ns>
    <id>1654</id>
    <revision>
      <id>58817</id>
      <parentid>54098</parentid>
      <timestamp>2013-06-01T06:21:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list sqrt]] to [[Template:cpp/numeric/math/dsc sqrt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc fun | cpp/numeric/math/sqrt | computes square root ({{math|{{mrad|x}}}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc tan</title>
    <ns>10</ns>
    <id>1655</id>
    <revision>
      <id>58822</id>
      <parentid>54101</parentid>
      <timestamp>2013-06-01T06:21:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list tan]] to [[Template:cpp/numeric/math/dsc tan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc fun | cpp/numeric/math/tan | computes tangent ({{math|tan(x)}})}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc tanh</title>
    <ns>10</ns>
    <id>1656</id>
    <revision>
      <id>58826</id>
      <parentid>54102</parentid>
      <timestamp>2013-06-01T06:22:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list tanh]] to [[Template:cpp/numeric/math/dsc tanh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">{{dsc fun | cpp/numeric/math/tanh |hyperbolic tangent }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc tgamma</title>
    <ns>10</ns>
    <id>1657</id>
    <revision>
      <id>58830</id>
      <parentid>54103</parentid>
      <timestamp>2013-06-01T06:22:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list tgamma]] to [[Template:cpp/numeric/math/dsc tgamma]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/numeric/math/tgamma | gamma function | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/dsc trunc</title>
    <ns>10</ns>
    <id>1658</id>
    <revision>
      <id>58834</id>
      <parentid>54104</parentid>
      <timestamp>2013-06-01T06:22:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/dcl list trunc]] to [[Template:cpp/numeric/math/dsc trunc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | cpp/numeric/math/trunc | nearest integer not greater in magnitude than the given value | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/example nearbyint</title>
    <ns>10</ns>
    <id>5600</id>
    <revision>
      <id>23459</id>
      <parentid>20679</parentid>
      <timestamp>2012-04-20T02:26:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{example cpp&quot; to &quot;{{example&quot;</comment>
      <text xml:space="preserve" bytes="1526">{{example
 | code=
#include &lt;cmath&gt;
#include &lt;cfenv&gt;
#include &lt;iostream&gt;

int main()
{
    #pragma STDC FENV_ACCESS ON
    std::fesetround(FE_DOWNWARD);
    std::cout &lt;&lt; &quot;rounding using FE_DOWNWARD: \n&quot; &lt;&lt; std::fixed
              &lt;&lt; &quot; 12.0 -&gt;  &quot; &lt;&lt; std::nearbyint(12.0) &lt;&lt; '\n'
              &lt;&lt; &quot; 12.1 -&gt;  &quot; &lt;&lt; std::nearbyint(12.1) &lt;&lt; '\n'
              &lt;&lt; &quot;-12.1 -&gt; &quot; &lt;&lt; std::nearbyint(-12.1) &lt;&lt; '\n'
              &lt;&lt; &quot; 12.5 -&gt;  &quot; &lt;&lt; std::nearbyint(12.5) &lt;&lt; '\n'
              &lt;&lt; &quot; 12.9 -&gt;  &quot; &lt;&lt; std::nearbyint(12.9) &lt;&lt; '\n'
              &lt;&lt; &quot;-12.9 -&gt; &quot; &lt;&lt; std::nearbyint(-12.9) &lt;&lt; '\n'
              &lt;&lt; &quot; 13.0 -&gt;  &quot; &lt;&lt; std::nearbyint(13.0) &lt;&lt; '\n';
    std::fesetround(FE_TONEAREST);
    std::cout &lt;&lt; &quot;rounding using FE_TONEAREST: \n&quot;
              &lt;&lt; &quot; 12.0 -&gt;  &quot; &lt;&lt; std::nearbyint(12.0) &lt;&lt; '\n'
              &lt;&lt; &quot; 12.1 -&gt;  &quot; &lt;&lt; std::nearbyint(12.1) &lt;&lt; '\n'
              &lt;&lt; &quot;-12.1 -&gt; &quot; &lt;&lt; std::nearbyint(-12.1) &lt;&lt; '\n'
              &lt;&lt; &quot; 12.5 -&gt;  &quot; &lt;&lt; std::nearbyint(12.5) &lt;&lt; '\n'
              &lt;&lt; &quot; 12.9 -&gt;  &quot; &lt;&lt; std::nearbyint(12.9) &lt;&lt; '\n'
              &lt;&lt; &quot;-12.9 -&gt; &quot; &lt;&lt; std::nearbyint(-12.9) &lt;&lt; '\n'
              &lt;&lt; &quot; 13.0 -&gt;  &quot; &lt;&lt; std::nearbyint(13.0) &lt;&lt; '\n';
}
| output =
rounding using FE_DOWNWARD:
 12.0 -&gt;  12.000000
 12.1 -&gt;  12.000000
-12.1 -&gt; -13.000000
 12.5 -&gt;  12.000000
 12.9 -&gt;  12.000000
-12.9 -&gt; -13.000000
 13.0 -&gt;  13.000000
rounding using FE_TONEAREST: 
 12.0 -&gt;  12.000000
 12.1 -&gt;  12.000000
-12.1 -&gt; -12.000000
 12.5 -&gt;  12.000000
 12.9 -&gt;  13.000000
-12.9 -&gt; -13.000000
 13.0 -&gt;  13.000000
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/navbar</title>
    <ns>10</ns>
    <id>1659</id>
    <revision>
      <id>39978</id>
      <parentid>36067</parentid>
      <timestamp>2012-09-28T20:14:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="242">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/math/navbar heading
|content3 = cpp/numeric/math/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/navbar content</title>
    <ns>10</ns>
    <id>1660</id>
    <revision>
      <id>54107</id>
      <parentid>40408</parentid>
      <timestamp>2013-06-01T05:09:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="5208">&lt;div style=&quot;display:inline-block; vertical-align:top;&quot;&gt;
{{nv begin}}
{{nv h1 | Functions}}
{{nv h2 | Basic operations}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/abs | abs(int) | labs | llabs |imaxabs|notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/numeric/math/fabs | abs(float) | fabs}}
{{nv ln | cpp/numeric/math/div | div | ldiv | lldiv| imaxdiv|notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/numeric/math/fmod}}
{{nv col next}}
{{nv ln | cpp/numeric/math/remainder | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/remquo | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/fma | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/fmax | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/fmin | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/fdim | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/nan | nan | nanf | nanl | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv col end}}

{{nv h2 | Exponential functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/exp}}
{{nv ln | cpp/numeric/math/exp2 | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/expm1 | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/numeric/math/log}}
{{nv ln | cpp/numeric/math/log10}}
{{nv ln | cpp/numeric/math/log1p | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/log2| notes={{mark c++11}} }}
{{nv col end}}

{{nv h2 | Power functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/sqrt}}
{{nv ln | cpp/numeric/math/cbrt | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/numeric/math/hypot | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/pow}}
{{nv col end}}

{{nv h2 | Trigonometric and hyperbolic functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/sin}}
{{nv ln | cpp/numeric/math/cos}}
{{nv ln | cpp/numeric/math/tan}}
{{nv ln | cpp/numeric/math/asin}}
{{nv ln | cpp/numeric/math/acos}}
{{nv ln | cpp/numeric/math/atan}}
{{nv ln | cpp/numeric/math/atan2}}
{{nv col next}}
{{nv ln | cpp/numeric/math/sinh}}
{{nv ln | cpp/numeric/math/cosh}}
{{nv ln | cpp/numeric/math/tanh}}
{{nv ln | cpp/numeric/math/asinh | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/acosh | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/atanh | notes={{mark c++11}} }}
{{nv col end}}
{{nv end}}
&lt;/div&gt;
&lt;div style=&quot;display:inline-block&quot;&gt;
{{nv begin}}
{{nv h2 | Error and gamma functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/erf | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/erfc | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/numeric/math/lgamma | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/tgamma | notes={{mark c++11}} }}
{{nv col end}}

{{nv h2 | Nearest integer floating point operations}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/ceil}}
{{nv ln | cpp/numeric/math/floor}}
{{nv ln | cpp/numeric/math/round | round | lround | llround  | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/numeric/math/trunc | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/nearbyint | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/rint | rint | lrint | llrint | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv col end}}

{{nv h2 | Floating point manipulation functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/ldexp}}
{{nv ln | cpp/numeric/math/scalbn | scalbn | scalbln | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv ln | cpp/numeric/math/ilogb | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/logb | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/numeric/math/frexp}}
{{nv ln | cpp/numeric/math/modf}}
{{nv ln | cpp/numeric/math/nextafter | nextafter | nexttoward | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv ln | cpp/numeric/math/copysign | notes={{mark c++11}} }}
{{nv col end}}

{{nv h2 | Classification/Comparison}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/fpclassify | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/isfinite | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/isinf | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/isnan | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/isnormal | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/signbit | notes={{mark c++11}} }}
{{nv col next}}
{{nv ln | cpp/numeric/math/isgreater | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/isgreaterequal | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/isless | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/islessequal | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/islessgreater | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/math/isunordered | notes={{mark c++11}} }}
{{nv col end}}

{{nv h1 | Macro constants}}
{{nv col begin}}
{{nv ln | cpp/numeric/math/HUGE_VAL | HUGE_VALF | HUGE_VAL | HUGE_VALL | notes={{mark c++11}}&lt;br&gt;&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/numeric/math/INFINITY | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/math/NAN | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/math/math_errhandling | math_errhandling | MATH_ERRNO | MATH_ERREXCEPT  | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/numeric/math/FP_categories | FP_NORMAL | FP_SUBNORMAL | FP_ZERO | FP_INFINITE | FP_NAN | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv col end}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/math/navbar heading</title>
    <ns>10</ns>
    <id>1661</id>
    <revision>
      <id>35109</id>
      <parentid>3322</parentid>
      <timestamp>2012-06-15T22:18:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/math/sidebar heading]] to [[Template:cpp/numeric/math/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="52">[[cpp/numeric/math | Common mathematical functions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/navbar</title>
    <ns>10</ns>
    <id>1662</id>
    <revision>
      <id>39979</id>
      <parentid>35568</parentid>
      <timestamp>2012-09-28T20:14:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="154">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/navbar content</title>
    <ns>10</ns>
    <id>2703</id>
    <revision>
      <id>86297</id>
      <parentid>83979</parentid>
      <timestamp>2016-06-27T13:27:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+gcd/lcm</comment>
      <text xml:space="preserve" bytes="864">{{nv begin}}
{{nv | [[cpp/numeric/math|Common mathematical functions]] }}
{{nv | [[cpp/numeric/special_math|Special mathematical functions]] }}
{{nv | [[cpp/numeric/fenv|Floating-point environment]] {{mark c++11}} }}
{{nv | [[cpp/numeric/complex|Complex numbers]] }}
{{nv | [[cpp/numeric/valarray|Numeric arrays]] }}
{{nv | [[cpp/numeric/random|Pseudo-random number generation]] }}
{{nv | [[cpp/numeric/ratio | Compile-time rational arithmetic]] {{mark c++11}} }}
{{nv h2 | Numeric algorithms }}
{{nv ln | cpp/numeric/gcd|notes={{mark c++17}}}}
{{nv ln | cpp/numeric/lcm|notes={{mark c++17}}}}
{{nv h2 | Generic numeric operations }}
{{nv ln | cpp/algorithm/iota | notes={{mark c++11}} }}
{{nv ln | cpp/algorithm/accumulate }}
{{nv ln | cpp/algorithm/inner_product }}
{{nv ln | cpp/algorithm/adjacent_difference }}
{{nv ln | cpp/algorithm/partial_sum }}
{{nv end}}</text>
      <sha1>547u4sk9g6m78dl3sesji8k9x39f3ad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/navbar heading</title>
    <ns>10</ns>
    <id>1663</id>
    <revision>
      <id>35888</id>
      <parentid>3326</parentid>
      <timestamp>2012-06-15T22:34:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/sidebar heading]] to [[Template:cpp/numeric/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="34">[[cpp/numeric | Numerics library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random//navbar</title>
    <ns>10</ns>
    <id>4541</id>
    <redirect title="Template:cpp/numeric/random/navbar" />
    <revision>
      <id>37186</id>
      <parentid>35821</parentid>
      <timestamp>2012-07-03T14:07:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Template:cpp/numeric/random/navbar]]</comment>
      <text xml:space="preserve" bytes="48">#redirect [[Template:cpp/numeric/random/navbar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random//title</title>
    <ns>10</ns>
    <id>3903</id>
    <revision>
      <id>14605</id>
      <timestamp>2011-11-27T12:32:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>dummy page</comment>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/base</title>
    <ns>10</ns>
    <id>8813</id>
    <revision>
      <id>91957</id>
      <parentid>62249</parentid>
      <timestamp>2017-03-31T20:17:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="302">{{cpp/numeric/random/{{{1|}}}/title|base}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
const Engine&amp; base() const;
}}
{{dcl end}}

Returns the underlying engine.

===Parameters===
(none)

===Return value===
The underlying engine.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>qoyob37jojy8mfy6vbwg3frd86p82of</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/constructor</title>
    <ns>10</ns>
    <id>8811</id>
    <revision>
      <id>76614</id>
      <parentid>67802</parentid>
      <timestamp>2015-02-22T15:04:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="1360">{{cpp/numeric/random/{{{1|}}}/title|{{{1}}}}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
{{{1}}}();
}}
{{dcl | num=2 | since=c++11 |
explicit {{{1}}}( result_type s );
}}
{{dcl | num=3 | since=c++11 |
template&lt; class Sseq &gt;
explicit {{{1}}}( Sseq&amp; seq );
}}
{{dcl | num=4 | since=c++11 |
explicit {{{1}}}( const Engine&amp; e );
}}
{{dcl | num=5 | since=c++11 |
explicit {{{1}}}( Engine&amp;&amp; e );
}}
{{dcl end}}

Constructs new pseudo-random engine adaptor.

@1@ Default constructor. The underlying engine is also default-constructed.
@2@ Constructs the underlying engine with {{tt|s}}.
@3@ Constructs the underlying engine with seed sequence {{tt|seq}}. 
This constructor only participate in overload resolution if {{tt|Sseq}} qualifies as a {{concept|SeedSequence}}. In particular, this constructor does not participate in overload resolution if {{tt|Sseq}} is implicitly convertible to {{tt|result_type}}.
@4@ Constructs the underlying engine with a copy of {{tt|e}}.
@5@ Move-constructs the underlying engine with {{tt|e}}. {{tt|e}} holds unspecified, but valid state afterwards.

===Parameters===
{{par begin}}
{{par | s | integer value to construct the underlying engine with}}
{{par | seq | seed sequence to construct the underlying engine with}}
{{par | e | pseudo-random number engine to initialize with}} 
{{par end}}</text>
      <sha1>p1jhsmqxqbkd5mb9puq6vfybdi5i7lt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/discard</title>
    <ns>10</ns>
    <id>8815</id>
    <revision>
      <id>64371</id>
      <parentid>62233</parentid>
      <timestamp>2013-08-15T18:43:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="669">{{cpp/numeric/random/{{{1|}}}/title|discard}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void discard( unsigned long long z );
}}
{{dcl end}}

Advances the internal state by {{tt|z}} times. Equivalent to calling {{lc|operator()}} {{tt|z}} times and discarding the result. The state of the underlying engine may be advanced by more than {{tt|z}} times.

===Parameters===
{{par begin}}
{{par | z | integer value specifying the number of times to advance the state by}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator()|{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc base</title>
    <ns>10</ns>
    <id>8783</id>
    <revision>
      <id>58839</id>
      <parentid>54114</parentid>
      <timestamp>2013-06-01T06:22:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/adaptor/dcl list base]] to [[Template:cpp/numeric/random/adaptor/dsc base]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/base | returns the underlying engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc constructor</title>
    <ns>10</ns>
    <id>8779</id>
    <revision>
      <id>58843</id>
      <parentid>54121</parentid>
      <timestamp>2013-06-01T06:22:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/adaptor/dcl list constructor]] to [[Template:cpp/numeric/random/adaptor/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem ctor | cpp/numeric/random/{{{1|}}}/{{{1|}}} | constructs the engine adaptor}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc discard</title>
    <ns>10</ns>
    <id>8782</id>
    <revision>
      <id>58848</id>
      <parentid>54122</parentid>
      <timestamp>2013-06-01T06:22:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/adaptor/dcl list discard]] to [[Template:cpp/numeric/random/adaptor/dsc discard]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/discard | advances the adaptor's state by a specified amount}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc max</title>
    <ns>10</ns>
    <id>8775</id>
    <revision>
      <id>66521</id>
      <parentid>66520</parentid>
      <timestamp>2013-11-30T08:04:55Z</timestamp>
      <contributor>
        <username>IMneme</username>
        <id>2601</id>
      </contributor>
      <minor/>
      <comment>fix typo</comment>
      <text xml:space="preserve" bytes="243">{{dsc mem sfun | cpp/numeric/random/{{{1|}}}/max | gets the largest possible value in the output range {{#switch:{{{1|}}}
|independent_bits_engine=(always 2{{su|p=w}}-1).
|shuffle_order_engine|discard_block_engine|of the underlying engine.}}}}</text>
      <sha1>t36vbpfdysxt2bd2bumuycl2jpss2eb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc min</title>
    <ns>10</ns>
    <id>8776</id>
    <revision>
      <id>66522</id>
      <parentid>58857</parentid>
      <timestamp>2013-11-30T08:06:20Z</timestamp>
      <contributor>
        <username>IMneme</username>
        <id>2601</id>
      </contributor>
      <comment>independent_bits_engine has a min of zero, not the min of the underlying engine</comment>
      <text xml:space="preserve" bytes="235">{{dsc mem sfun | cpp/numeric/random/{{{1|}}}/min | gets the smallest possible value in the output range {{#switch:{{{1|}}}
|independent_bits_engine=(always zero).
|shuffle_order_engine|discard_block_engine|of the underlying engine.}}}}</text>
      <sha1>esyjt5x1k4ml97ptax0wmo9qpfro0ll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc operator cmp</title>
    <ns>10</ns>
    <id>8780</id>
    <revision>
      <id>58864</id>
      <parentid>54128</parentid>
      <timestamp>2013-06-01T06:22:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/adaptor/dcl list operator cmp]] to [[Template:cpp/numeric/random/adaptor/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="166">{{dsc fun | cpp/numeric/random/{{{1|}}}/operator_cmp | title=operator{{==}}&lt;br&gt;operator!{{=}} | compares the internal states of the adaptors and underlying engines }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>8778</id>
    <revision>
      <id>58867</id>
      <parentid>54131</parentid>
      <timestamp>2013-06-01T06:22:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/adaptor/dcl list operator ltltgtgt]] to [[Template:cpp/numeric/random/adaptor/dsc operator ltltgtgt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="167">{{dsc fun | cpp/numeric/random/{{{1|}}}/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs stream input and output on pseudo-random number engine adaptor }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc operator()</title>
    <ns>10</ns>
    <id>8777</id>
    <revision>
      <id>58860</id>
      <parentid>54127</parentid>
      <timestamp>2013-06-01T06:22:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/adaptor/dcl list operator()]] to [[Template:cpp/numeric/random/adaptor/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/operator() | advances the state of the underlying engine and returns the generated value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/dsc seed</title>
    <ns>10</ns>
    <id>8781</id>
    <revision>
      <id>58871</id>
      <parentid>54132</parentid>
      <timestamp>2013-06-01T06:22:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/adaptor/dcl list seed]] to [[Template:cpp/numeric/random/adaptor/dsc seed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/seed | sets the state of the underlying engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/max</title>
    <ns>10</ns>
    <id>8829</id>
    <revision>
      <id>66523</id>
      <parentid>63595</parentid>
      <timestamp>2013-11-30T08:07:08Z</timestamp>
      <contributor>
        <username>IMneme</username>
        <id>2601</id>
      </contributor>
      <comment>2^w - 1, not 2^w</comment>
      <text xml:space="preserve" bytes="659">{{cpp/numeric/random/{{{1|}}}/title|max}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
static constexpr result_type max();
}}
{{dcl end}}

Returns the maximum value potentially generated by the engine adaptor. {{#switch:{{{1|}}}
|independent_bits_engine=This value is equal to 2{{su|p=w}}-1
|shuffle_order_engine|discard_block_engine|This value is equal to {{c|e.max()}} where {{tt|e}} is the underlying engine.
}}

===Parameters===
(none)

===Return value===
The maximum potentially generated value.

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc min|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>7ywuqrvvhatu8j0mbk1f06n5gswtj1s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/min</title>
    <ns>10</ns>
    <id>8816</id>
    <revision>
      <id>85925</id>
      <parentid>66518</parentid>
      <timestamp>2016-06-04T00:34:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="649">{{cpp/numeric/random/{{{1|}}}/title|min}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
static constexpr result_type min();
}}
{{dcl end}}

Returns the minimum value potentially generated by the engine adaptor. {{#switch:{{{1|}}}
|independent_bits_engine=This value is equal to 0u.
|shuffle_order_engine|discard_block_engine|This value is equal to {{c|e.min()}} where {{tt|e}} is the underlying engine.
}}

===Parameters===
(none)

===Return value===
The minimum potentially generated value.

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc max|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>ng5koeys6zamuntzlxfitqu8sx3g4rd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/operator cmp</title>
    <ns>10</ns>
    <id>8823</id>
    <revision>
      <id>80240</id>
      <parentid>63597</parentid>
      <timestamp>2015-08-01T12:22:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-&gt; !</comment>
      <text xml:space="preserve" bytes="1082">{{title|1=operator==,!=&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{cpp/numeric/random/get_types|{{{1|}}}}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; {{#var:types}} &gt;
bool operator==( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; {{#var:types}} &gt;
bool operator!=( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl end}}

Compares two pseudo-random number engine adaptors. Two engine adaptors are equal, if their underlying engines are equal and their internal state (if any) is equal, that is, if they would generate equivalent values for any number of calls of {{c|operator()}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | engine adaptors to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if the engine adaptors are equivalent, {{c|false}} otherwise.
@2@ {{c|true}} if the engine adaptors are not equivalent, {{c|false}} otherwise.

===Exceptions===
(none)</text>
      <sha1>13vvkox030vw210bg1d6zpp7f25tkbz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/operator ltltgtgt</title>
    <ns>10</ns>
    <id>8825</id>
    <revision>
      <id>82042</id>
      <parentid>82040</parentid>
      <timestamp>2015-11-28T14:59:22Z</timestamp>
      <contributor>
        <ip>183.206.165.67</ip>
      </contributor>
      <text xml:space="preserve" bytes="1957">{{title |operator&lt;&lt;,&gt;&gt;&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{cpp/numeric/random/get_types|{{{1|}}}}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class CharT, class Traits,
          {{#var:types}} &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp; 
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; ost, 
                const std::{{{1}}}&lt;{{#var:types_short}}&gt;&amp; e );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class CharT, class Traits,
          {{#var:types}} &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; 
    operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; ist, 
                std::{{{1}}}&lt;{{#var:types_short}}&gt;&amp; e );
}}
{{dcl end}}

@1@ Serializes the internal state of the pseudo-random number engine adaptor as a sequence of decimal numbers separated by one or more spaces, and inserts it to the stream {{tt|ost}}. The fill character and the formatting flags of the stream are ignored and unaffected. 

@2@ Restores the internal state of the pseudo-random number engine adaptor {{tt|e}} from the serialized representation, which was created by an earlier call to {{tt|operator&lt;&lt;}} using a stream with the same imbued locale and the same {{tt|CharT}} and {{tt|Traits}}. If the input cannot be deserialized, {{tt|e}} is left unchanged and {{tt|failbit}} is raised on {{tt|ist}}

If a textual representation is written using {{c|os &lt;&lt; x}} and that representation is restored into the same or a different object {{tt|y}} of the same type using {{c|is &gt;&gt; y}}, then {{c|1=x==y}}.

{{todo|standard also defines what the textual representation consists of}}

===Parameters===
{{par begin}}
{{par | ost | output stream to insert the data to}}
{{par | ist | input stream to extract the data from}}
{{par | e | engine adaptor to serialize or restore}}
{{par end}}

===Return value===
@1@ {{tt|ost}}
@2@ {{tt|ist}}

===Complexity===
{{todo}}

===Exceptions===
@1@ (none)
@2@ May throw {{c|std::ios::failure}} when setting {{tt|failbit}}</text>
      <sha1>7efk7kczf9927y38vc4lxcufps3k9my</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/operator()</title>
    <ns>10</ns>
    <id>8814</id>
    <revision>
      <id>83342</id>
      <parentid>62250</parentid>
      <timestamp>2016-02-01T16:07:07Z</timestamp>
      <contributor>
        <ip>173.198.189.234</ip>
      </contributor>
      <comment>fix title</comment>
      <text xml:space="preserve" bytes="438">{{cpp/numeric/random/{{{1|}}}/title|operator()}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
result_type operator()();
}}
{{dcl end}}

Generates a random value. The state of the underlying engine is advanced one or more times.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc discard|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>g24l4o2s26dt69cf8zs18v8ybwsdd8n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/adaptor/seed</title>
    <ns>10</ns>
    <id>8812</id>
    <revision>
      <id>76616</id>
      <parentid>63599</parentid>
      <timestamp>2015-02-22T15:18:04Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="1360">{{cpp/numeric/random/{{{1|}}}/title|seed}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
void seed();
}}
{{dcl | num=2 | since=c++11 |
void seed( result_type value );
}}
{{dcl | num=3 | since=c++11 |
template&lt; class Sseq &gt; 
void seed( Sseq&amp; seq );
}}
{{dcl end}}

Reinitializes the internal state of the underlying engine using a new seed value.

@1@ Seeds the underlying engine with the default seed value. Effectively calls {{c|e.seed()}}, where {{tt|e}} is the underlying engine.
@2@ Seeds the underlying engine with the seed value {{tt|s}}. Effectively calls {{c|e.seed(value)}}, where {{tt|e}} is the underlying engine.
@3@ Seeds the underlying engine with the seed sequence {{tt|seq}}. Effectively calls {{c|e.seed(seq)}}, where {{tt|e}} is the underlying engine.
This template only participate in overload resolution if {{tt|Sseq}} qualifies as a {{concept|SeedSequence}}. In particular, this template does not participate in overload resolution if {{tt|Sseq}} is implicitly convertible to {{tt|result_type}}.

===Parameters===
{{par begin}}
{{par | value | seed value to use in the initialization of the internal state of the underlying engine}}
{{par | seq | seed sequence to use in the initialization of the internal state of the underlying engine}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)</text>
      <sha1>blw8hn1yu9uvpzl8hxrtqzjw4hqx413</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/bernoulli distribution/dsc p</title>
    <ns>10</ns>
    <id>5004</id>
    <revision>
      <id>58876</id>
      <parentid>54150</parentid>
      <timestamp>2013-06-01T06:22:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/bernoulli distribution/dcl list p]] to [[Template:cpp/numeric/random/bernoulli distribution/dsc p]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc mem fun | cpp/numeric/random/bernoulli_distribution/p | returns the ''p'' distribution parameter (probability of generating {{c|true}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/bernoulli distribution/navbar</title>
    <ns>10</ns>
    <id>3930</id>
    <revision>
      <id>39980</id>
      <parentid>36065</parentid>
      <timestamp>2012-09-28T20:14:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="384">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/bernoulli_distribution/navbar heading
|content4 = cpp/numeric/random/bernoulli_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/bernoulli distribution/navbar content</title>
    <ns>10</ns>
    <id>4285</id>
    <revision>
      <id>54151</id>
      <parentid>35823</parentid>
      <timestamp>2013-06-01T05:09:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="740">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/bernoulli_distribution/bernoulli_distribution}}
{{nv mem ln | cpp/numeric/random/bernoulli_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/bernoulli_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/bernoulli_distribution/param}}
{{nv mem ln | cpp/numeric/random/bernoulli_distribution/min}}
{{nv mem ln | cpp/numeric/random/bernoulli_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/bernoulli_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/bernoulli_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/bernoulli distribution/navbar heading</title>
    <ns>10</ns>
    <id>3948</id>
    <revision>
      <id>60984</id>
      <parentid>35825</parentid>
      <timestamp>2013-06-03T11:41:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="77">{{ltt|cpp/numeric/random/bernoulli_distribution|std::bernoulli_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/bernoulli distribution/title</title>
    <ns>10</ns>
    <id>4001</id>
    <revision>
      <id>14747</id>
      <timestamp>2011-11-27T14:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=bernoulli_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/binomial distribution/navbar</title>
    <ns>10</ns>
    <id>3931</id>
    <revision>
      <id>39981</id>
      <parentid>36066</parentid>
      <timestamp>2012-09-28T20:14:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="382">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/binomial_distribution/navbar heading
|content4 = cpp/numeric/random/binomial_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/binomial distribution/navbar content</title>
    <ns>10</ns>
    <id>4286</id>
    <revision>
      <id>61162</id>
      <parentid>54160</parentid>
      <timestamp>2013-06-05T12:24:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge p and t</comment>
      <text xml:space="preserve" bytes="803">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/binomial_distribution/binomial_distribution}}
{{nv mem ln | cpp/numeric/random/binomial_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/binomial_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/binomial_distribution/params | p | t}}
{{nv mem ln | cpp/numeric/random/binomial_distribution/param}}
{{nv mem ln | cpp/numeric/random/binomial_distribution/min}}
{{nv mem ln | cpp/numeric/random/binomial_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/binomial_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/binomial_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/binomial distribution/navbar heading</title>
    <ns>10</ns>
    <id>3952</id>
    <revision>
      <id>48055</id>
      <parentid>35490</parentid>
      <timestamp>2013-05-18T18:02:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="75">{{ltt|cpp/numeric/random/binomial_distribution|std::binomial_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/binomial distribution/title</title>
    <ns>10</ns>
    <id>4000</id>
    <revision>
      <id>14746</id>
      <timestamp>2011-11-27T14:11:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">&lt;onlyinclude&gt;{{cpp/title | n=binomial_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/cauchy distribution/navbar</title>
    <ns>10</ns>
    <id>3942</id>
    <revision>
      <id>39982</id>
      <parentid>36050</parentid>
      <timestamp>2012-09-28T20:15:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="378">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/cauchy_distribution/navbar heading
|content4 = cpp/numeric/random/cauchy_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/cauchy distribution/navbar content</title>
    <ns>10</ns>
    <id>4299</id>
    <revision>
      <id>61123</id>
      <parentid>54165</parentid>
      <timestamp>2013-06-05T11:52:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge a and b</comment>
      <text xml:space="preserve" bytes="783">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/cauchy_distribution/cauchy_distribution}}
{{nv mem ln | cpp/numeric/random/cauchy_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/cauchy_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/cauchy_distribution/params | a | b}}
{{nv mem ln | cpp/numeric/random/cauchy_distribution/param}}
{{nv mem ln | cpp/numeric/random/cauchy_distribution/min}}
{{nv mem ln | cpp/numeric/random/cauchy_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/cauchy_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/cauchy_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/cauchy distribution/navbar heading</title>
    <ns>10</ns>
    <id>3960</id>
    <revision>
      <id>48063</id>
      <parentid>35829</parentid>
      <timestamp>2013-05-18T18:04:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="71">{{ltt|cpp/numeric/random/cauchy_distribution|std::cauchy_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/cauchy distribution/title</title>
    <ns>10</ns>
    <id>3989</id>
    <revision>
      <id>14735</id>
      <timestamp>2011-11-27T14:10:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=cauchy_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/chi squared distribution/dsc n</title>
    <ns>10</ns>
    <id>8891</id>
    <revision>
      <id>58896</id>
      <parentid>54166</parentid>
      <timestamp>2013-06-01T06:23:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/chi squared distribution/dcl list n]] to [[Template:cpp/numeric/random/chi squared distribution/dsc n]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem fun | cpp/numeric/random/chi_squared_distribution/n | returns the degrees of freedom ({{math|n}}) distribution parameter}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/chi squared distribution/navbar</title>
    <ns>10</ns>
    <id>3941</id>
    <revision>
      <id>39983</id>
      <parentid>36049</parentid>
      <timestamp>2012-09-28T20:15:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="388">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/chi_squared_distribution/navbar heading
|content4 = cpp/numeric/random/chi_squared_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/chi squared distribution/navbar content</title>
    <ns>10</ns>
    <id>4298</id>
    <revision>
      <id>54169</id>
      <parentid>37518</parentid>
      <timestamp>2013-06-01T05:10:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="820">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/chi_squared_distribution/chi_squared_distribution}}
{{nv mem ln | cpp/numeric/random/chi_squared_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/chi_squared_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/chi_squared_distribution/n}}
{{nv mem ln | cpp/numeric/random/chi_squared_distribution/param}}
{{nv mem ln | cpp/numeric/random/chi_squared_distribution/min}}
{{nv mem ln | cpp/numeric/random/chi_squared_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/chi_squared_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/chi_squared_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/chi squared distribution/navbar heading</title>
    <ns>10</ns>
    <id>3951</id>
    <revision>
      <id>48054</id>
      <parentid>35571</parentid>
      <timestamp>2013-05-18T18:02:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="81">{{ltt|cpp/numeric/random/chi_squared_distribution|std::chi_squared_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/chi squared distribution/title</title>
    <ns>10</ns>
    <id>3990</id>
    <revision>
      <id>14736</id>
      <timestamp>2011-11-27T14:10:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>=</comment>
      <text xml:space="preserve" bytes="121">&lt;onlyinclude&gt;{{cpp/title | n=chi_squared_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discard block engine/navbar</title>
    <ns>10</ns>
    <id>3707</id>
    <revision>
      <id>39984</id>
      <parentid>36048</parentid>
      <timestamp>2012-09-28T20:15:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="380">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/discard_block_engine/navbar heading
|content4 = cpp/numeric/random/discard_block_engine/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discard block engine/navbar content</title>
    <ns>10</ns>
    <id>6474</id>
    <revision>
      <id>54179</id>
      <parentid>35833</parentid>
      <timestamp>2013-06-01T05:10:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="784">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/discard_block_engine/discard_block_engine}}
{{nv mem ln | cpp/numeric/random/discard_block_engine/seed}}
{{nv mem ln | cpp/numeric/random/discard_block_engine/base}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/discard_block_engine/operator()}}
{{nv mem ln | cpp/numeric/random/discard_block_engine/discard}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/discard_block_engine/min}}
{{nv mem ln | cpp/numeric/random/discard_block_engine/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/discard_block_engine/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/discard_block_engine/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discard block engine/navbar heading</title>
    <ns>10</ns>
    <id>3713</id>
    <revision>
      <id>48047</id>
      <parentid>35834</parentid>
      <timestamp>2013-05-18T18:01:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="73">{{ltt|cpp/numeric/random/discard_block_engine|std::discard_block_engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discard block engine/title</title>
    <ns>10</ns>
    <id>8828</id>
    <revision>
      <id>37234</id>
      <timestamp>2012-07-03T17:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=discard_block_engine::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discrete distribution/dsc probabilities</title>
    <ns>10</ns>
    <id>4966</id>
    <revision>
      <id>58924</id>
      <parentid>54180</parentid>
      <timestamp>2013-06-01T06:23:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/discrete distribution/dcl list probabilities]] to [[Template:cpp/numeric/random/discrete distribution/dsc probabilities]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem fun | cpp/numeric/random/discrete_distribution/probabilities | obtains the list of probabilities }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discrete distribution/navbar</title>
    <ns>10</ns>
    <id>3945</id>
    <revision>
      <id>39985</id>
      <parentid>36068</parentid>
      <timestamp>2012-09-28T20:16:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="382">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/discrete_distribution/navbar heading
|content4 = cpp/numeric/random/discrete_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discrete distribution/navbar content</title>
    <ns>10</ns>
    <id>4302</id>
    <revision>
      <id>54181</id>
      <parentid>35836</parentid>
      <timestamp>2013-06-01T05:10:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="802">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/discrete_distribution/discrete_distribution}}
{{nv mem ln | cpp/numeric/random/discrete_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/discrete_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/discrete_distribution/probabilities}}
{{nv mem ln | cpp/numeric/random/discrete_distribution/param}}
{{nv mem ln | cpp/numeric/random/discrete_distribution/min}}
{{nv mem ln | cpp/numeric/random/discrete_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/discrete_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/discrete_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discrete distribution/navbar heading</title>
    <ns>10</ns>
    <id>3963</id>
    <revision>
      <id>48066</id>
      <parentid>34657</parentid>
      <timestamp>2013-05-18T18:04:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="75">{{ltt|cpp/numeric/random/discrete_distribution|std::discrete_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/discrete distribution/title</title>
    <ns>10</ns>
    <id>3986</id>
    <revision>
      <id>14732</id>
      <timestamp>2011-11-27T14:10:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">&lt;onlyinclude&gt;{{cpp/title | n=discrete_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc constructor</title>
    <ns>10</ns>
    <id>3909</id>
    <revision>
      <id>58932</id>
      <parentid>54182</parentid>
      <timestamp>2013-06-01T06:24:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/dcl list constructor]] to [[Template:cpp/numeric/random/distribution/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem ctor | cpp/numeric/random/{{{1|}}}/{{{1|}}} | constructs new distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc max</title>
    <ns>10</ns>
    <id>3309</id>
    <revision>
      <id>58936</id>
      <parentid>54183</parentid>
      <timestamp>2013-06-01T06:24:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/dcl list max]] to [[Template:cpp/numeric/random/distribution/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/max | returns the maximum potentially generated value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc min</title>
    <ns>10</ns>
    <id>3308</id>
    <revision>
      <id>58941</id>
      <parentid>54184</parentid>
      <timestamp>2013-06-01T06:24:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/dcl list min]] to [[Template:cpp/numeric/random/distribution/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/min | returns the minimum potentially generated value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc operator cmp</title>
    <ns>10</ns>
    <id>3323</id>
    <revision>
      <id>58951</id>
      <parentid>54188</parentid>
      <timestamp>2013-06-01T06:24:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/dcl list operator cmp]] to [[Template:cpp/numeric/random/distribution/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc fun | cpp/numeric/random/{{{1|}}}/operator_cmp | title=operator==&lt;br&gt;operator!= |  compares two distribution objects }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>3324</id>
    <revision>
      <id>72873</id>
      <parentid>58956</parentid>
      <timestamp>2014-10-03T14:03:49Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>dsc fun =&gt; dsc tfun</comment>
      <text xml:space="preserve" bytes="166">{{dsc tfun | cpp/numeric/random/{{{1|}}}/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs stream input and output on pseudo-random number distribution }}</text>
      <sha1>jqg25gd7q967eer086ghgw6oygvrpih</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc operator()</title>
    <ns>10</ns>
    <id>3310</id>
    <revision>
      <id>58946</id>
      <parentid>54185</parentid>
      <timestamp>2013-06-01T06:24:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/dcl list operator()]] to [[Template:cpp/numeric/random/distribution/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/operator() | generates the next random number in the distribution }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc param</title>
    <ns>10</ns>
    <id>3311</id>
    <revision>
      <id>58960</id>
      <parentid>54192</parentid>
      <timestamp>2013-06-01T06:24:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/dcl list param]] to [[Template:cpp/numeric/random/distribution/dsc param]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/param | gets or sets the distribution parameter object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc params</title>
    <ns>10</ns>
    <id>12595</id>
    <revision>
      <id>61174</id>
      <parentid>61169</parentid>
      <timestamp>2013-06-05T12:25:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="604">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/params | title={{#switch:{{{1|}}}
|uniform_int_distribution = a&lt;br/&gt;b
|uniform_real_distribution = a&lt;br/&gt;b
|binomial_distribution = p&lt;br/&gt;t
|negative_binomial_distribution = p&lt;br/&gt;k
|gamma_distribution = alpha&lt;br/&gt;beta
|normal_distribution = mean&lt;br/&gt;stddev
|weibull_distribution = a&lt;br/&gt;b
|extreme_value_distribution = a&lt;br/&gt;b
|lognormal_distribution = m&lt;br/&gt;s
|cauchy_distribution = a&lt;br/&gt;b
|fisher_f_distribution = m&lt;br/&gt;n
|piecewise_constant_distribution | piecewise_linear_distribution = intervals&lt;br/&gt;densities 
}}| returns the distribution parameters }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/dsc reset</title>
    <ns>10</ns>
    <id>3312</id>
    <revision>
      <id>58964</id>
      <parentid>54195</parentid>
      <timestamp>2013-06-01T06:24:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/dcl list reset]] to [[Template:cpp/numeric/random/distribution/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/reset | resets the internal state of the distribution }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/max</title>
    <ns>10</ns>
    <id>3319</id>
    <revision>
      <id>64049</id>
      <parentid>62234</parentid>
      <timestamp>2013-08-07T06:33:35Z</timestamp>
      <contributor>
        <username>Faithandbrave</username>
        <id>1470</id>
      </contributor>
      <comment>fixed max() function description : &quot;Returns the minimum value&quot; to &quot;Return the maximum value&quot;.</comment>
      <text xml:space="preserve" bytes="467">{{cpp/numeric/random/{{{1|}}}/title | max}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
result_type max() const;
}}
{{dcl end}}

Returns the maximum value potentially generated by the distribution.

===Parameters===
(none)

===Return value===
The maximum value potentially generated by the distribution.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc min|{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/min</title>
    <ns>10</ns>
    <id>3314</id>
    <revision>
      <id>64048</id>
      <parentid>62220</parentid>
      <timestamp>2013-08-07T06:32:39Z</timestamp>
      <contributor>
        <username>Faithandbrave</username>
        <id>1470</id>
      </contributor>
      <comment>fixed min() function description : &quot;Returns the maximum value&quot; to &quot;Return the minimum value&quot;.</comment>
      <text xml:space="preserve" bytes="466">{{cpp/numeric/random/{{{1|}}}/title | min}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
result_type min() const;
}}
{{dcl end}}

Returns the minimum value potentially generated by the distribution.

===Parameters===
(none)

===Return value===
The minimum value potentially generated by the distribution

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc max|{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/operator cmp</title>
    <ns>10</ns>
    <id>3326</id>
    <revision>
      <id>54203</id>
      <parentid>35364</parentid>
      <timestamp>2013-06-01T05:10:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="942">{{title | 1=operator==,!=&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}

{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class ResultType &gt;
bool operator==( const {{{1}}}&lt;ResultType&gt;&amp; lhs,
	         const {{{1}}}&lt;ResultType&gt;&amp; rhs );

}}
{{dcl | num=2 | 1=
template&lt; class ResultType &gt;
bool operator!=( const {{{1}}}&lt;ResultType&gt;&amp; lhs,
	         const {{{1}}}&lt;ResultType&gt;&amp; rhs );
}}
{{dcl end}}

Compares two distribution objects. Two distribution objects are equal when parameter values and internal state is the same.

1) Compares two distribution objects for equality.

2) Compares two distribution objects for inequality.

===Parameters===
{{par begin}}
{{par | lhs, rhs | distribution objects to compare}}
{{par end}}

===Return value===
1) {{c|true}} if the distribution objects are equal, {{c|false}} otherwise

2) {{c|true}} if the distribution objects are not equal, {{c|false}} otherwise

===Complexity===
Constant.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/operator ltltgtgt</title>
    <ns>10</ns>
    <id>4540</id>
    <revision>
      <id>78916</id>
      <parentid>63200</parentid>
      <timestamp>2015-06-12T02:10:13Z</timestamp>
      <contributor>
        <ip>39.119.38.60</ip>
      </contributor>
      <text xml:space="preserve" bytes="1684">{{title |operator&lt;&lt;,&gt;&gt;&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class CharT, class Traits, class ResultType &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp; operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; ost, 
                                              const {{{1}}}&lt;ResultType&gt;&amp; d );
}}
{{dcl | num=2 | 1=
template&lt; class CharT, class Traits, class ResultType &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; ist, 
                                              {{{1}}}&lt;ResultType&gt;&amp; d );
}}
{{dcl end}}

Performs stream input and output operations on pseudo-random number distribution {{tt|d}}.

@1@ Writes a textual representation of the distribution parameters and internal state to {{tt|ost}} as textual representation. The formatting flags and fill character of {{tt|ost}} are unchanged.

@2@ Restores the distribution parameters and internal state with data read from {{tt|ist}}. The formatting flags of {{tt|ist}} are unchanged. The data must have been written using a stream with the same locale, {{tt|CharT}} and {{tt|Traits}} template parameters, otherwise the behavior is undefined. If bad input is encountered, {{c|ist.setstate(std::ios::failbit)}} is called, which may throw {{lc|std::ios_base::failure}}. {{tt|d}} is unchanged in that case.

===Parameters===
{{par begin}}
{{par | ost | output stream to insert the data to}}
{{par | ist | input stream to extract the data from}}
{{par | d | pseudo-random number distribution}}
{{par end}}

===Return value===
@1@ {{tt|ost}}

@2@ {{tt|ist}}

===Exceptions===
@1@ (none)

@2@ may throw {{lc|std::ios_base::failure}} on bad input.</text>
      <sha1>2gllu8dm44iznql9xmi5yxb9vybixls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/operator()</title>
    <ns>10</ns>
    <id>4099</id>
    <revision>
      <id>86195</id>
      <parentid>78143</parentid>
      <timestamp>2016-06-24T18:14:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>P0346R1: URNG-&gt;URBG</comment>
      <text xml:space="preserve" bytes="1026">{{cpp/numeric/random/{{{1|}}}/title | operator()}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class Generator &gt;
result_type operator()( Generator&amp; g );
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class Generator &gt;
result_type operator()( Generator&amp; g, const param_type&amp; params );
}}
{{dcl end}}

Generates random numbers that are distributed according to the associated probability function. The entropy is acquired by calling {{c|g.operator()}}. 

The first version uses the associated parameter set, the second version uses {{tt|params}}. The associated parameter set is not modified.

===Parameters===
{{par begin}}
{{par | g | an uniform random bit generator object}}
{{par | params | distribution parameter set to use instead of the associated one}}
{{par hreq}}
{{par req concept | Generator | UniformRandomBitGenerator}} 
{{par end}}

===Return value===
The generated random number.

===Complexity===
Amortized constant number of invocations of {{c|g.operator()}}.</text>
      <sha1>6xqyaphugg3bkochd5harl5hz35yy5g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/param</title>
    <ns>10</ns>
    <id>4122</id>
    <revision>
      <id>63601</id>
      <parentid>54207</parentid>
      <timestamp>2013-07-10T01:45:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="597">{{cpp/numeric/random/{{{1|}}}/title | param}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
param_type param() const;
}}
{{dcl | since=c++11 | num=2 | 1=
void param( const param_type&amp; params );
}}
{{dcl end}}

Manages the associated distribution parameter set.

1) Returns the associated parameter set.

2) Sets the associated parameter set to {{tt|params}}

===Parameters===
{{par begin}}
{{par | params | new contents of the associated parameter set }}
{{par end}}

===Return value===
1) The associated parameter set

2) (none)

===Complexity===
Constant.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/distribution/reset</title>
    <ns>10</ns>
    <id>3322</id>
    <revision>
      <id>62237</id>
      <parentid>62235</parentid>
      <timestamp>2013-06-25T12:33:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use lc</comment>
      <text xml:space="preserve" bytes="440">{{cpp/numeric/random/{{{1|}}}/title | reset}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void reset();
}}
{{dcl end}}

Resets the internal state of the distribution object.  After a call to this function, the next call to {{lc|operator()}} on the distribution object will not be dependent on previous calls to {{lc|operator()}}.

===Parameters===
(none)

===Return value===
(none)

===Complexity===
Constant.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc RAND MAX</title>
    <ns>10</ns>
    <id>6410</id>
    <revision>
      <id>58901</id>
      <parentid>54170</parentid>
      <timestamp>2013-06-01T06:23:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/dcl list RAND MAX]] to [[Template:cpp/numeric/random/dsc RAND MAX]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc macro const | cpp/numeric/random/RAND_MAX | maximum possible value generated by {{lc|std::rand}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc generate canonical</title>
    <ns>10</ns>
    <id>4747</id>
    <revision>
      <id>58906</id>
      <parentid>54173</parentid>
      <timestamp>2013-06-01T06:23:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/dcl list generate canonical]] to [[Template:cpp/numeric/random/dsc generate canonical]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc tfun | cpp/numeric/random/generate_canonical | evenly distributes real values of given precision across [0, 1) | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc knuth b</title>
    <ns>10</ns>
    <id>12812</id>
    <revision>
      <id>72701</id>
      <parentid>63190</parentid>
      <timestamp>2014-09-20T04:09:22Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="82">{{dsc | {{tt|knuth_b}} | {{c|std::shuffle_order_engine&lt;std::minstd_rand0, 256&gt;}}}}</text>
      <sha1>0ca47k99beng1y2zr17kv7dxlw75kwl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc minstd rand</title>
    <ns>10</ns>
    <id>12805</id>
    <revision>
      <id>72706</id>
      <parentid>63886</parentid>
      <timestamp>2014-09-20T04:10:26Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="192">{{dsc | {{tt|minstd_rand}} | {{c|std::linear_congruential_engine&lt;std::uint_fast32_t, 48271, 0, 2147483647&gt;}}&lt;br&gt;
Newer &quot;Minimum standard&quot;, recommended by Park, Miller, and Stockmeyer in 1993}}</text>
      <sha1>dd2jka9tvgkstf0620e3glm6bbnos8m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc minstd rand0</title>
    <ns>10</ns>
    <id>12804</id>
    <revision>
      <id>72707</id>
      <parentid>65362</parentid>
      <timestamp>2014-09-20T04:10:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="222">{{dsc | {{tt|minstd_rand0}} | {{c|std::linear_congruential_engine&lt;std::uint_fast32_t, 16807, 0, 2147483647&gt;}}&lt;br&gt;
Discovered in 1969 by Lewis, Goodman and Miller, adopted as &quot;Minimal standard&quot; in 1988 by Park and Miller }}</text>
      <sha1>6k6uk0gx0p5ta3jblxnjeiwnzu45vsc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc mt19937</title>
    <ns>10</ns>
    <id>12806</id>
    <revision>
      <id>79606</id>
      <parentid>63887</parentid>
      <timestamp>2015-07-14T08:24:22Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>does this help?</comment>
      <text xml:space="preserve" bytes="355">{{dsc | {{tt|mt19937}} |
{{c|std::mersenne_twister_engine&lt;std::uint_fast32_t, 32, 624, 397, 31, 
                             0x9908b0df, 11, 
                             0xffffffff, 7, 
                             0x9d2c5680, 15, 
                             0xefc60000, 18, 1812433253&gt;}}&lt;br&gt;
32-bit Mersenne Twister by Matsumoto and Nishimura, 1998}}</text>
      <sha1>7uogoydjzzldl8pjzqlzjk9l3f5lgj6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc mt19937 64</title>
    <ns>10</ns>
    <id>12807</id>
    <revision>
      <id>79607</id>
      <parentid>72700</parentid>
      <timestamp>2015-07-14T08:53:06Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Seems that adding a newline does help removing HTML error</comment>
      <text xml:space="preserve" bytes="396">{{dsc | {{tt|mt19937_64}} |
{{c|std::mersenne_twister_engine&lt;std::uint_fast64_t, 64, 312, 156, 31,
                             0xb5026f5aa96619e9, 29,
                             0x5555555555555555, 17,
                             0x71d67fffeda60000, 37,
                             0xfff7eee000000000, 43, 6364136223846793005&gt;}}&lt;br&gt;
64-bit Mersenne Twister by Matsumoto and Nishimura, 2000}}</text>
      <sha1>khr5o6ke3khekqk81tv6saln9s7abnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc rand</title>
    <ns>10</ns>
    <id>2035</id>
    <revision>
      <id>58910</id>
      <parentid>54174</parentid>
      <timestamp>2013-06-01T06:23:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/dcl list rand]] to [[Template:cpp/numeric/random/dsc rand]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | cpp/numeric/random/rand | generates a pseudo-random number }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc random device</title>
    <ns>10</ns>
    <id>13723</id>
    <revision>
      <id>72303</id>
      <timestamp>2014-08-06T19:58:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc class | cpp/numeric/random/random_device | non-deterministic random number generator using hardware entropy source }}</text>
      <sha1>axdf7n4qpqj3xhduij9uh6h5sxxgvla</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc ranlux24</title>
    <ns>10</ns>
    <id>12810</id>
    <revision>
      <id>72703</id>
      <parentid>63889</parentid>
      <timestamp>2014-09-20T04:09:46Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="156">{{dsc | {{tt|ranlux24}} | {{c|std::discard_block_engine&lt;std::ranlux24_base, 223, 23&gt;}}&lt;br&gt;
24-bit RANLUX generator by Martin Lüscher and Fred James, 1994}}</text>
      <sha1>2u8hjr6d2akhowqp0cvxbbn9ut8j2h4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc ranlux24 base</title>
    <ns>10</ns>
    <id>12808</id>
    <revision>
      <id>72705</id>
      <parentid>63186</parentid>
      <timestamp>2014-09-20T04:10:15Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="102">{{dsc | {{tt|ranlux24_base}} | {{c|std::subtract_with_carry_engine&lt;std::uint_fast32_t, 24, 10, 24&gt;}}}}</text>
      <sha1>fk2g95aibtshked5tte8js6z1ymkz85</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc ranlux48</title>
    <ns>10</ns>
    <id>12811</id>
    <revision>
      <id>72702</id>
      <parentid>63890</parentid>
      <timestamp>2014-09-20T04:09:30Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="156">{{dsc | {{tt|ranlux48}} | {{c|std::discard_block_engine&lt;std::ranlux48_base, 389, 11&gt;}}&lt;br&gt;
48-bit RANLUX generator by Martin Lüscher and Fred James, 1994}}</text>
      <sha1>macu2plpdyq26ec2o5m01uxfbufw6iv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc ranlux48 base</title>
    <ns>10</ns>
    <id>12809</id>
    <revision>
      <id>72704</id>
      <parentid>63187</parentid>
      <timestamp>2014-09-20T04:10:04Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="101">{{dsc | {{tt|ranlux48_base}} | {{c|std::subtract_with_carry_engine&lt;std::uint_fast64_t, 48, 5, 12&gt;}}}}</text>
      <sha1>kl94ca8ucqskocipfbl9bd3rld1p8ot</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc srand</title>
    <ns>10</ns>
    <id>2034</id>
    <revision>
      <id>58914</id>
      <parentid>54177</parentid>
      <timestamp>2013-06-01T06:23:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/dcl list srand]] to [[Template:cpp/numeric/random/dsc srand]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc fun | cpp/numeric/random/srand | seeds pseudo-random number generator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc uniform int distribution</title>
    <ns>10</ns>
    <id>12974</id>
    <revision>
      <id>65360</id>
      <timestamp>2013-09-10T16:19:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="143">{{dsc tclass | cpp/numeric/random/uniform_int_distribution | produces integer values evenly distributed across a range | notes={{mark c++11}}}}</text>
      <sha1>b022zpc7zh9ri4hjkwspbs569jg0qcw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/dsc uniform real distribution</title>
    <ns>10</ns>
    <id>4746</id>
    <revision>
      <id>58920</id>
      <parentid>54178</parentid>
      <timestamp>2013-06-01T06:23:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/dcl list uniform real distribution]] to [[Template:cpp/numeric/random/dsc uniform real distribution]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc tclass | cpp/numeric/random/uniform_real_distribution | produces real values evenly distributed across a range | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/constructor</title>
    <ns>10</ns>
    <id>3902</id>
    <revision>
      <id>83136</id>
      <parentid>83135</parentid>
      <timestamp>2016-01-21T20:45:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>unglue line, s/overload participate/overload participates</comment>
      <text xml:space="preserve" bytes="2257">{{cpp/numeric/random/{{{1|}}}/title|{{{1}}}}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit {{{1}}}( result_type value = default_seed );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class Sseq &gt; 
explicit {{{1}}}( Sseq&amp; s );
}}
{{dcl | num=3 | since=c++11 | notes={{mark implicit}} | 1=
{{{1}}}( const {{{1}}}&amp; );
}}
{{dcl end}}

Constructs the pseudo-random number engine.

{{#switch: {{{1|}}}
|mersenne_twister_engine=
@1@ Constructs the engine and initializes the state ({{tt|n}} values {{math|X{{su|b=i}}}} of type {{tt|result_type}}) as follows: {{math|value mod 2{{su|p=w}}}} is used to initialize {{math|X{{su|b=0}}}} and the rest are initialized iteratively, for {{math|i{{=}}1-n,...,-1}}, each {{math|X{{su|b=i}}}} is initialized to {{math|[f·(X{{su|b=i-1}}xor(X{{su|b=i-1}}rshift(w-2)))+i mod n] mod 2{{su|p=w}}}}
@2@ Constructs the engine and initializes the state by calling {{c|s.generate(a, a+n*k)}} where a is an array of length n*k and k is ceil(w/32) and then, iteratively for {{math|i{{=}}-n,...,-1}}, setting each element of the engine state {{math|X{{su|b=i}}}} to {{math|(Σ{{su|p=k-1|b=j{{=}}0}}a{{su|b=k(i+n)+j}·2{{su|p=32j}}}}) mod 2{{su|p=w}}}}, and finally if the most significant {{math|w-r}} bits of {{math|X{{su|b=0}}}} are zero, and if all other {{math|X{{su|b=i}}}} are zero, replacing {{math|X{{su|b=0}}}} with {{math|2{{su|p=w-1}}}}.

Note: initialization requirements are based on the 2002 version of Mersenne Twister, [http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c mt19937ar.c]

|{{todo}}
}}

The overload {{v|2}} only participates in overload resolution if {{tt|Sseq}} qualifies as a {{concept|SeedSequence}}. In particular, it is excluded from the set of candidate functions if {{tt|Sseq}} is convertible to {{tt|result_type}}.
===Parameters===
{{par begin}}
{{par | value | seed value to use in the initialization of the internal state}}
{{par | s | seed sequence to use in the initialization of the internal state}}
{{par end}}

===Complexity===
{{#switch: {{{1|}}}
|mersenne_twister_engine=
linear in {{tt|n}} (the state size)
|{{todo}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc seed | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>d3p8jbfksrf22bztkd7tv6cbqajdagr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/discard</title>
    <ns>10</ns>
    <id>3906</id>
    <revision>
      <id>83137</id>
      <parentid>64311</parentid>
      <timestamp>2016-01-21T20:50:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on fast jumps</comment>
      <text xml:space="preserve" bytes="769">{{cpp/numeric/random/{{{1|}}}/title|discard}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
void discard( unsigned long long z );
}}
{{dcl end}}

Advances the internal state by {{tt|z}} times. Equivalent to calling {{lc|operator()}} {{tt|z}} times and discarding the result

===Parameters===
{{par begin}}
{{par | z | integer value specifying the number of times to advance the state by}}
{{par end}}

===Return value===
(none)

===Complexity===
{{todo}}

===Notes===
For some engines, &quot;fast jump&quot; algorithms are known, which advancing the state by many steps (order of millions) without calculating intermediate state transitions.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc operator()|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>l0m9sazcmujd73tf60oc91i0uybv6yo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc constructor</title>
    <ns>10</ns>
    <id>3690</id>
    <revision>
      <id>58969</id>
      <parentid>54211</parentid>
      <timestamp>2013-06-01T06:24:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/engine/dcl list constructor]] to [[Template:cpp/numeric/random/engine/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem ctor | cpp/numeric/random/{{{1|}}}/{{{1|}}} | constructs the engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc discard</title>
    <ns>10</ns>
    <id>3693</id>
    <revision>
      <id>58974</id>
      <parentid>54214</parentid>
      <timestamp>2013-06-01T06:24:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/engine/dcl list discard]] to [[Template:cpp/numeric/random/engine/dsc discard]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/discard | advances the engine's state by a specified amount}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc max</title>
    <ns>10</ns>
    <id>3694</id>
    <revision>
      <id>58979</id>
      <parentid>54215</parentid>
      <timestamp>2013-06-01T06:24:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/engine/dcl list max]] to [[Template:cpp/numeric/random/engine/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem sfun | cpp/numeric/random/{{{1|}}}/max | gets the largest possible value in the output range}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc min</title>
    <ns>10</ns>
    <id>3697</id>
    <revision>
      <id>58984</id>
      <parentid>54218</parentid>
      <timestamp>2013-06-01T06:25:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/engine/dcl list min]] to [[Template:cpp/numeric/random/engine/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem sfun | cpp/numeric/random/{{{1|}}}/min | gets the smallest possible value in the output range}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc operator cmp</title>
    <ns>10</ns>
    <id>3696</id>
    <revision>
      <id>77996</id>
      <parentid>58993</parentid>
      <timestamp>2015-04-23T17:07:44Z</timestamp>
      <contributor>
        <ip>103.244.252.151</ip>
      </contributor>
      <text xml:space="preserve" bytes="156">{{dsc tfun | cpp/numeric/random/{{{1|}}}/operator_cmp | title=operator==&lt;br&gt;operator!= | compares the internal states of two pseudo-random number engines }}</text>
      <sha1>2qdkrrdksknrq7lailbm1thrz7yb3v9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>3695</id>
    <revision>
      <id>72874</id>
      <parentid>58998</parentid>
      <timestamp>2014-10-03T14:04:16Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>dsc fun =&gt; dsc tfun</comment>
      <text xml:space="preserve" bytes="160">{{dsc tfun | cpp/numeric/random/{{{1|}}}/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs stream input and output on pseudo-random number engine }}</text>
      <sha1>n5r311bjp6i38qoxmy8tlwpi3j1vdca</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc operator()</title>
    <ns>10</ns>
    <id>3692</id>
    <revision>
      <id>58989</id>
      <parentid>54219</parentid>
      <timestamp>2013-06-01T06:25:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/engine/dcl list operator()]] to [[Template:cpp/numeric/random/engine/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/operator() | advances the engine's state and returns the generated value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/dsc seed</title>
    <ns>10</ns>
    <id>3691</id>
    <revision>
      <id>59002</id>
      <parentid>54224</parentid>
      <timestamp>2013-06-01T06:25:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/engine/dcl list seed]] to [[Template:cpp/numeric/random/engine/dsc seed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/numeric/random/{{{1|}}}/seed | sets the current state of the engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/max</title>
    <ns>10</ns>
    <id>3908</id>
    <revision>
      <id>85926</id>
      <parentid>83134</parentid>
      <timestamp>2016-06-04T00:35:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="833">{{cpp/numeric/random/{{{1|}}}/title|max}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
static constexpr result_type max();
}}
{{dcl end}}

Returns the maximum value potentially generated by the random-number engine. {{#switch:{{{1|}}}
|linear_congruential_engine=This value is one less than {{lc|modulus}}.
|mersenne_twister_engine|subtract_with_carry_engine=This value is equal to {{math|2{{su|p=w}} - 1}}, where {{tt|w}} is the template parameter also accessible as static member {{lc|word_size}}.
|random_device=This value is equal to {{c|std::numeric_limits&lt;unsigned int&gt;::max()}}.
}}

===Parameters===
(none)

===Return value===
The maximum potentially generated value.

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc min|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>sr426y9sj4np4rms38bunpq88o7mppm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/min</title>
    <ns>10</ns>
    <id>3907</id>
    <revision>
      <id>85924</id>
      <parentid>79667</parentid>
      <timestamp>2016-06-04T00:32:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>zero for random_device too</comment>
      <text xml:space="preserve" bytes="714">{{cpp/numeric/random/{{{1|}}}/title|min}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
static constexpr result_type min();
}}
{{dcl end}}

Returns the minimum value potentially generated by the random-number engine. {{#switch:{{{1|}}}
|linear_congruential_engine=This value is equal to {{tt|1u}} if {{lc|increment}} is {{tt|0u}}, and is equal to {{tt|0u}} otherwise.
|random_device|mersenne_twister_engine|subtract_with_carry_engine=This value is equal to {{tt|0u}}.
}}

===Parameters===
(none)

===Return value===
The minimum potentially generated value.

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc max|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>a7gm34t5ii9lese9zo54jm0lxo9nc20</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/operator cmp</title>
    <ns>10</ns>
    <id>8817</id>
    <revision>
      <id>85109</id>
      <parentid>85108</parentid>
      <timestamp>2016-04-01T13:22:28Z</timestamp>
      <contributor>
        <ip>88.98.12.57</ip>
      </contributor>
      <text xml:space="preserve" bytes="1001">{{title|1=operator==,!=&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{cpp/numeric/random/get_types|{{{1|}}}}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; {{#var:types}} &gt;
bool operator==( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; {{#var:types}} &gt;
bool operator!=( const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; lhs,
                 const {{{1}}}&lt;{{#var:types_short}}&gt;&amp; rhs );
}}
{{dcl end}}

Compares two pseudo-random number engines. Two engines are equal, if their internal states are equivalent, that is, if they would generate equivalent values for any number of calls of {{c|operator()}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | engines to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if the engines are equivalent, {{c|false}} otherwise.
@2@ {{c|true}} if the engines are not equivalent, {{c|false}} otherwise.

===Exceptions===
(none)</text>
      <sha1>mdumv61izcb0nmpw9fg76i8v1bkt8bc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/operator ltltgtgt</title>
    <ns>10</ns>
    <id>4542</id>
    <revision>
      <id>87964</id>
      <parentid>82046</parentid>
      <timestamp>2016-10-17T12:37:27Z</timestamp>
      <contributor>
        <ip>137.195.53.176</ip>
      </contributor>
      <comment>Removed some superfluous characters</comment>
      <text xml:space="preserve" bytes="2131">{{title |operator&lt;&lt;,&gt;&gt;&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{cpp/numeric/random/get_types|{{{1|}}}}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class CharT, class Traits,
          {{#var:types}} &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp; 
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; ost, 
                const std::{{{1}}}&lt;{{#var:types_short}}&gt;&amp; e );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class CharT, class Traits,
          {{#var:types}} &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; 
    operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; ist, 
                std::{{{1}}}&lt;{{#var:types_short}}&gt;&amp; e );
}}
{{dcl end}}

@1@ Serializes the internal state of the pseudo-random number engine {{tt|e}} as a sequence of decimal numbers separated by one or more spaces, and inserts it to the stream {{tt|ost}}. The fill character and the formatting flags of the stream are ignored and unaffected.

@2@ Restores the internal state of the pseudo-random number engine {{tt|e}} from the serialized representation, which was created by an earlier call to {{tt|operator&lt;&lt;}} using a stream with the same imbued locale and the same {{tt|CharT}} and {{tt|Traits}}. If the input cannot be deserialized, {{tt|e}} is left unchanged and {{tt|failbit}} is raised on {{tt|ist}}

If a textual representation is written using {{c|os &lt;&lt; x}} and that representation is restored into the same or a different object {{tt|y}} of the same type using {{c|is &gt;&gt; y}}, then {{c|1=x==y}}.

The textual representation is written with {{c|os.fmtflags}} set to {{c|ios_base::dec}}|{{c|ios_base::left}} and the fill character set to the space character.  The textual representation of the engine's internal state is a set of decimal numbers separated by spaces.

===Parameters===
{{par begin}}
{{par | ost | output stream to insert the data to}}
{{par | ist | input stream to extract the data from}}
{{par | e | pseudo-random number engine}}
{{par end}}

===Return value===
@1@ {{tt|ost}}
@2@ {{tt|ist}}

===Complexity===
{{todo}}

===Exceptions===
@1@ (none)
@2@ May throw {{c|std::ios::failure}} when setting {{tt|failbit}}</text>
      <sha1>b7msl5uzosobvqmk5w6tf0yukqvcs01</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/operator()</title>
    <ns>10</ns>
    <id>3905</id>
    <revision>
      <id>62238</id>
      <parentid>60913</parentid>
      <timestamp>2013-06-25T12:34:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="501">{{cpp/numeric/random/{{{1|}}}/title|operator()}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
result_type operator()();
}}
{{dcl end}}

Generates a pseudo-random value. The state of the engine is advanced by one position.

{{todo}}

===Parameters===
(none)

===Return value===
A pseudo-random number in [{{c|min()}}, {{c|max()}}].

===Complexity===
Amortized constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc discard|{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/engine/seed</title>
    <ns>10</ns>
    <id>3904</id>
    <revision>
      <id>63608</id>
      <parentid>54239</parentid>
      <timestamp>2013-07-10T01:45:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="622">{{cpp/numeric/random/{{{1|}}}/title|seed}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
void seed( result_type value = default_seed );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class Sseq &gt; 
void seed( Sseq&amp; seq );
}}
{{dcl end}}

Reinitializes the internal state of the random-number engine using new seed value.

{{todo}}

===Parameters===
{{par begin}}
{{par | value | seed value to use in the initialization of the internal state}}
{{par | seq | seed sequence to use in the initialization of the internal state}}
{{par end}}

===Exceptions===
(none)

===Complexity===
{{todo}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/exponential distribution/dsc lambda</title>
    <ns>10</ns>
    <id>5152</id>
    <revision>
      <id>59006</id>
      <parentid>54240</parentid>
      <timestamp>2013-06-01T06:25:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/exponential distribution/dcl list lambda]] to [[Template:cpp/numeric/random/exponential distribution/dsc lambda]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun | cpp/numeric/random/exponential_distribution/lambda | returns the ''lambda'' distribution parameter (rate of events) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/exponential distribution/navbar</title>
    <ns>10</ns>
    <id>3935</id>
    <revision>
      <id>39986</id>
      <parentid>36051</parentid>
      <timestamp>2012-09-28T20:18:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="388">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/exponential_distribution/navbar heading
|content4 = cpp/numeric/random/exponential_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/exponential distribution/navbar content</title>
    <ns>10</ns>
    <id>4292</id>
    <revision>
      <id>54243</id>
      <parentid>35838</parentid>
      <timestamp>2013-06-01T05:10:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="825">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/exponential_distribution/exponential_distribution}}
{{nv mem ln | cpp/numeric/random/exponential_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/exponential_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/exponential_distribution/lambda}}
{{nv mem ln | cpp/numeric/random/exponential_distribution/param}}
{{nv mem ln | cpp/numeric/random/exponential_distribution/min}}
{{nv mem ln | cpp/numeric/random/exponential_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/exponential_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/exponential_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/exponential distribution/navbar heading</title>
    <ns>10</ns>
    <id>3955</id>
    <revision>
      <id>48058</id>
      <parentid>34627</parentid>
      <timestamp>2013-05-18T18:03:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="81">{{ltt|cpp/numeric/random/exponential_distribution|std::exponential_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/exponential distribution/title</title>
    <ns>10</ns>
    <id>3996</id>
    <revision>
      <id>14742</id>
      <timestamp>2011-11-27T14:10:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">&lt;onlyinclude&gt;{{cpp/title | n=exponential_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/extreme value distribution/navbar</title>
    <ns>10</ns>
    <id>3938</id>
    <revision>
      <id>39987</id>
      <parentid>36052</parentid>
      <timestamp>2012-09-28T20:18:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="392">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/extreme_value_distribution/navbar heading
|content4 = cpp/numeric/random/extreme_value_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/extreme value distribution/navbar content</title>
    <ns>10</ns>
    <id>4295</id>
    <revision>
      <id>61137</id>
      <parentid>54250</parentid>
      <timestamp>2013-06-05T12:17:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge a and b</comment>
      <text xml:space="preserve" bytes="853">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/extreme_value_distribution/extreme_value_distribution}}
{{nv mem ln | cpp/numeric/random/extreme_value_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/extreme_value_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/extreme_value_distribution/params | a | b}}
{{nv mem ln | cpp/numeric/random/extreme_value_distribution/param}}
{{nv mem ln | cpp/numeric/random/extreme_value_distribution/min}}
{{nv mem ln | cpp/numeric/random/extreme_value_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/extreme_value_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/extreme_value_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/extreme value distribution/navbar heading</title>
    <ns>10</ns>
    <id>3950</id>
    <revision>
      <id>48053</id>
      <parentid>35839</parentid>
      <timestamp>2013-05-18T18:02:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="85">{{ltt|cpp/numeric/random/extreme_value_distribution|std::extreme_value_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/extreme value distribution/title</title>
    <ns>10</ns>
    <id>3993</id>
    <revision>
      <id>14739</id>
      <timestamp>2011-11-27T14:10:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">&lt;onlyinclude&gt;{{cpp/title | n=extreme_value_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/fisher f distribution/navbar</title>
    <ns>10</ns>
    <id>3943</id>
    <revision>
      <id>39988</id>
      <parentid>36064</parentid>
      <timestamp>2012-09-28T20:18:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="382">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/fisher_f_distribution/navbar heading
|content4 = cpp/numeric/random/fisher_f_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/fisher f distribution/navbar content</title>
    <ns>10</ns>
    <id>4300</id>
    <revision>
      <id>61118</id>
      <parentid>54257</parentid>
      <timestamp>2013-06-05T11:47:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync</comment>
      <text xml:space="preserve" bytes="803">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/fisher_f_distribution/fisher_f_distribution}}
{{nv mem ln | cpp/numeric/random/fisher_f_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/fisher_f_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/fisher_f_distribution/params | m | n}}
{{nv mem ln | cpp/numeric/random/fisher_f_distribution/param}}
{{nv mem ln | cpp/numeric/random/fisher_f_distribution/min}}
{{nv mem ln | cpp/numeric/random/fisher_f_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/fisher_f_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/fisher_f_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/fisher f distribution/navbar heading</title>
    <ns>10</ns>
    <id>3961</id>
    <revision>
      <id>48064</id>
      <parentid>35842</parentid>
      <timestamp>2013-05-18T18:04:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="75">{{ltt|cpp/numeric/random/fisher_f_distribution|std::fisher_f_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/fisher f distribution/title</title>
    <ns>10</ns>
    <id>3988</id>
    <revision>
      <id>14734</id>
      <timestamp>2011-11-27T14:10:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">&lt;onlyinclude&gt;{{cpp/title | n=fisher_f_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/gamma distribution/navbar</title>
    <ns>10</ns>
    <id>3936</id>
    <revision>
      <id>39989</id>
      <parentid>36063</parentid>
      <timestamp>2012-09-28T20:18:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="376">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/gamma_distribution/navbar heading
|content4 = cpp/numeric/random/gamma_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/gamma distribution/navbar content</title>
    <ns>10</ns>
    <id>4293</id>
    <revision>
      <id>61142</id>
      <parentid>61115</parentid>
      <timestamp>2013-06-05T12:19:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="780">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/gamma_distribution/gamma_distribution}}
{{nv mem ln | cpp/numeric/random/gamma_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/gamma_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/gamma_distribution/params | alpha | beta}}
{{nv mem ln | cpp/numeric/random/gamma_distribution/param}}
{{nv mem ln | cpp/numeric/random/gamma_distribution/min}}
{{nv mem ln | cpp/numeric/random/gamma_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/gamma_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/gamma_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/gamma distribution/navbar heading</title>
    <ns>10</ns>
    <id>3956</id>
    <revision>
      <id>48059</id>
      <parentid>35844</parentid>
      <timestamp>2013-05-18T18:03:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="69">{{ltt|cpp/numeric/random/gamma_distribution|std::gamma_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/gamma distribution/title</title>
    <ns>10</ns>
    <id>3995</id>
    <revision>
      <id>14741</id>
      <timestamp>2011-11-27T14:10:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=gamma_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/geometric distribution/dsc p</title>
    <ns>10</ns>
    <id>5146</id>
    <revision>
      <id>59038</id>
      <parentid>54265</parentid>
      <timestamp>2013-06-01T06:25:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/geometric distribution/dcl list p]] to [[Template:cpp/numeric/random/geometric distribution/dsc p]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc mem fun | cpp/numeric/random/geometric_distribution/p | returns the ''p'' distribution parameter (probability of a trial generating {{c|true}}) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/geometric distribution/navbar</title>
    <ns>10</ns>
    <id>3933</id>
    <revision>
      <id>39990</id>
      <parentid>36053</parentid>
      <timestamp>2012-09-28T20:18:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="384">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/geometric_distribution/navbar heading
|content4 = cpp/numeric/random/geometric_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/geometric distribution/navbar content</title>
    <ns>10</ns>
    <id>4290</id>
    <revision>
      <id>54266</id>
      <parentid>35846</parentid>
      <timestamp>2013-06-01T05:11:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="800">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/geometric_distribution/geometric_distribution}}
{{nv mem ln | cpp/numeric/random/geometric_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/geometric_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/geometric_distribution/p}}
{{nv mem ln | cpp/numeric/random/geometric_distribution/param}}
{{nv mem ln | cpp/numeric/random/geometric_distribution/min}}
{{nv mem ln | cpp/numeric/random/geometric_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/geometric_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/geometric_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/geometric distribution/navbar heading</title>
    <ns>10</ns>
    <id>3953</id>
    <revision>
      <id>48056</id>
      <parentid>35847</parentid>
      <timestamp>2013-05-18T18:02:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="77">{{ltt|cpp/numeric/random/geometric_distribution|std::geometric_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/geometric distribution/title</title>
    <ns>10</ns>
    <id>3998</id>
    <revision>
      <id>14744</id>
      <timestamp>2011-11-27T14:10:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=geometric_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/get types</title>
    <ns>10</ns>
    <id>8818</id>
    <revision>
      <id>82041</id>
      <parentid>37221</parentid>
      <timestamp>2015-11-28T14:56:07Z</timestamp>
      <contributor>
        <ip>183.206.165.67</ip>
      </contributor>
      <text xml:space="preserve" bytes="966">{{#vardefine:types|{{#switch:{{{1|}}}
 |linear_congruential_engine=class UIntType, UIntType a, UIntType c, UIntType m
 |mersenne_twister_engine=class UIntType,
          size_t w, size_t n, size_t m, size_t r,
          UIntType a, size_t u, UIntType d, size_t s,
          UIntType b, size_t t,
          UIntType c, size_t l, UIntType f
 |subtract_with_carry_engine=class UIntType, size_t w, size_t s, size_t r
 |discard_block_engine=class Engine, size_t p, size_t r
 |independent_bits_engine=class Engine, size_t w, class UIntType
 |shuffle_order_engine=class Engine, size_t k
 |...
}}}}{{#vardefine:types_short|{{#switch:{{{1|}}}
 |linear_congruential_engine=UIntType,a,c,m
 |mersenne_twister_engine=UIntType,w,n,m,r,a,u,d,s,b,t,c,l,f
 |subtract_with_carry_engine=UIntType,w,s,r
 |discard_block_engine=Engine,p,r
 |independent_bits_engine=Engine,w,UIntType
 |shuffle_order_engine=Engine,k
 |...
}}}}&lt;noinclude&gt;{{documentation|Template:get_types/doc}}&lt;/noinclude&gt;</text>
      <sha1>qzp0pniawny96vl5zrtbsz0f7su8caq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/independent bits engine/navbar</title>
    <ns>10</ns>
    <id>3708</id>
    <revision>
      <id>39991</id>
      <parentid>36062</parentid>
      <timestamp>2012-09-28T20:18:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="386">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/independent_bits_engine/navbar heading
|content4 = cpp/numeric/random/independent_bits_engine/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/independent bits engine/navbar content</title>
    <ns>10</ns>
    <id>6476</id>
    <revision>
      <id>54267</id>
      <parentid>35321</parentid>
      <timestamp>2013-06-01T05:11:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="814">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/independent_bits_engine/independent_bits_engine}}
{{nv mem ln | cpp/numeric/random/independent_bits_engine/seed}}
{{nv mem ln | cpp/numeric/random/independent_bits_engine/base}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/independent_bits_engine/operator()}}
{{nv mem ln | cpp/numeric/random/independent_bits_engine/discard}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/independent_bits_engine/min}}
{{nv mem ln | cpp/numeric/random/independent_bits_engine/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/independent_bits_engine/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/independent_bits_engine/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/independent bits engine/navbar heading</title>
    <ns>10</ns>
    <id>3714</id>
    <revision>
      <id>48048</id>
      <parentid>34628</parentid>
      <timestamp>2013-05-18T18:01:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="79">{{ltt|cpp/numeric/random/independent_bits_engine|std::independent_bits_engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/independent bits engine/title</title>
    <ns>10</ns>
    <id>8826</id>
    <revision>
      <id>37232</id>
      <timestamp>2012-07-03T17:10:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">&lt;onlyinclude&gt;{{cpp/title | n=independent_bits_engine::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/linear congruential engine/navbar</title>
    <ns>10</ns>
    <id>3704</id>
    <revision>
      <id>39992</id>
      <parentid>36060</parentid>
      <timestamp>2012-09-28T20:18:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="392">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/linear_congruential_engine/navbar heading
|content4 = cpp/numeric/random/linear_congruential_engine/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/linear congruential engine/navbar content</title>
    <ns>10</ns>
    <id>6478</id>
    <revision>
      <id>54268</id>
      <parentid>35850</parentid>
      <timestamp>2013-06-01T05:11:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="777">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/linear_congruential_engine/linear_congruential_engine}}
{{nv mem ln | cpp/numeric/random/linear_congruential_engine/seed}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/linear_congruential_engine/operator()}}
{{nv mem ln | cpp/numeric/random/linear_congruential_engine/discard}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/linear_congruential_engine/min}}
{{nv mem ln | cpp/numeric/random/linear_congruential_engine/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/linear_congruential_engine/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/linear_congruential_engine/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/linear congruential engine/navbar heading</title>
    <ns>10</ns>
    <id>3710</id>
    <revision>
      <id>48043</id>
      <parentid>35301</parentid>
      <timestamp>2013-05-18T18:00:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="85">{{ltt|cpp/numeric/random/linear_congruential_engine|std::linear_congruential_engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/linear congruential engine/title</title>
    <ns>10</ns>
    <id>4245</id>
    <revision>
      <id>15361</id>
      <timestamp>2011-12-08T17:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">&lt;onlyinclude&gt;{{cpp/title | n=linear_congruential_engine::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/lognormal distribution/navbar</title>
    <ns>10</ns>
    <id>3940</id>
    <revision>
      <id>39993</id>
      <parentid>36055</parentid>
      <timestamp>2012-09-28T20:18:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="384">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/lognormal_distribution/navbar heading
|content4 = cpp/numeric/random/lognormal_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/lognormal distribution/navbar content</title>
    <ns>10</ns>
    <id>4297</id>
    <revision>
      <id>61127</id>
      <parentid>54275</parentid>
      <timestamp>2013-06-05T12:11:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync</comment>
      <text xml:space="preserve" bytes="813">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/lognormal_distribution/lognormal_distribution}}
{{nv mem ln | cpp/numeric/random/lognormal_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/lognormal_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/lognormal_distribution/params | m | s}}
{{nv mem ln | cpp/numeric/random/lognormal_distribution/param}}
{{nv mem ln | cpp/numeric/random/lognormal_distribution/min}}
{{nv mem ln | cpp/numeric/random/lognormal_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/lognormal_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/lognormal_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/lognormal distribution/navbar heading</title>
    <ns>10</ns>
    <id>3959</id>
    <revision>
      <id>48062</id>
      <parentid>35851</parentid>
      <timestamp>2013-05-18T18:03:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="77">{{ltt|cpp/numeric/random/lognormal_distribution|std::lognormal_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/lognormal distribution/title</title>
    <ns>10</ns>
    <id>3991</id>
    <revision>
      <id>14737</id>
      <timestamp>2011-11-27T14:10:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=lognormal_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/mersenne twister engine/navbar</title>
    <ns>10</ns>
    <id>3705</id>
    <revision>
      <id>39994</id>
      <parentid>36054</parentid>
      <timestamp>2012-09-28T20:18:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="386">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/mersenne_twister_engine/navbar heading
|content4 = cpp/numeric/random/mersenne_twister_engine/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/mersenne twister engine/navbar content</title>
    <ns>10</ns>
    <id>6477</id>
    <revision>
      <id>54276</id>
      <parentid>35729</parentid>
      <timestamp>2013-06-01T05:11:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="750">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/mersenne_twister_engine/mersenne_twister_engine}}
{{nv mem ln | cpp/numeric/random/mersenne_twister_engine/seed}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/mersenne_twister_engine/operator()}}
{{nv mem ln | cpp/numeric/random/mersenne_twister_engine/discard}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/mersenne_twister_engine/min}}
{{nv mem ln | cpp/numeric/random/mersenne_twister_engine/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/mersenne_twister_engine/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/mersenne_twister_engine/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/mersenne twister engine/navbar heading</title>
    <ns>10</ns>
    <id>3711</id>
    <revision>
      <id>48044</id>
      <parentid>35854</parentid>
      <timestamp>2013-05-18T18:00:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="79">{{ltt|cpp/numeric/random/mersenne_twister_engine|std::mersenne_twister_engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/mersenne twister engine/title</title>
    <ns>10</ns>
    <id>4246</id>
    <revision>
      <id>15362</id>
      <timestamp>2011-12-08T17:11:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">&lt;onlyinclude&gt;{{cpp/title | n=mersenne_twister_engine::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/navbar</title>
    <ns>10</ns>
    <id>2036</id>
    <revision>
      <id>39995</id>
      <parentid>35767</parentid>
      <timestamp>2012-09-28T20:18:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/navbar content</title>
    <ns>10</ns>
    <id>2702</id>
    <revision>
      <id>54279</id>
      <parentid>35868</parentid>
      <timestamp>2013-06-01T05:11:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="2716">{{nv begin}}
{{nv h1 | Engines and engine adaptors}}
{{nv ln | cpp/numeric/random/linear_congruential_engine | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/random/mersenne_twister_engine| notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/subtract_with_carry_engine| notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/discard_block_engine| notes={{mark c++11}}}}
{{nv ln | cpp/numeric/random/independent_bits_engine| notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/shuffle_order_engine| notes={{mark c++11}} }}

{{nv h1 | Generators}}
{{nv ln | cpp/numeric/random/random_device | notes={{mark c++11}} }}

{{nv h1 | Distributions}}
{{nv h2 | Uniform distributions}}
{{nv ln | cpp/numeric/random/uniform_int_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/uniform_real_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/generate_canonical | notes={{mark c++11}} }}

{{nv h2 | Bernoulli distributions}}
{{nv ln | cpp/numeric/random/bernoulli_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/binomial_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/negative_binomial_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/geometric_distribution  | notes={{mark c++11}} }}

{{nv h2 | Poisson distributions}}
{{nv ln | cpp/numeric/random/poisson_distribution  | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/exponential_distribution  | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/gamma_distribution  | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/weibull_distribution  | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/extreme_value_distribution | notes={{mark c++11}} }}

{{nv h2 | Normal distributions}}
{{nv ln | cpp/numeric/random/normal_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/lognormal_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/chi_squared_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/cauchy_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/fisher_f_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/student_t_distribution | notes={{mark c++11}} }}

{{nv h2 | Sampling distributions}}
{{nv ln | cpp/numeric/random/discrete_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/piecewise_constant_distribution | notes={{mark c++11}} }}
{{nv ln | cpp/numeric/random/piecewise_linear_distribution | notes={{mark c++11}} }}

{{nv h1 | Seed Sequences}}
{{nv ln | cpp/numeric/random/seed_seq | notes={{mark c++11}} }}

{{nv h1 | C library}}
{{nv ln | cpp/numeric/random/rand }}
{{nv ln | cpp/numeric/random/srand }}
{{nv ln | cpp/numeric/random/RAND_MAX }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/navbar heading</title>
    <ns>10</ns>
    <id>2037</id>
    <revision>
      <id>33811</id>
      <parentid>4341</parentid>
      <timestamp>2012-06-15T20:50:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/sidebar heading]] to [[Template:cpp/numeric/random/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="54">[[cpp/numeric/random|Pseudo-random number generation]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/negative binomial distribution/navbar</title>
    <ns>10</ns>
    <id>3932</id>
    <revision>
      <id>39996</id>
      <parentid>36056</parentid>
      <timestamp>2012-09-28T20:18:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="400">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/negative_binomial_distribution/navbar heading
|content4 = cpp/numeric/random/negative_binomial_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/negative binomial distribution/navbar content</title>
    <ns>10</ns>
    <id>4289</id>
    <revision>
      <id>61176</id>
      <parentid>54284</parentid>
      <timestamp>2013-06-05T12:25:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge p and k</comment>
      <text xml:space="preserve" bytes="893">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/negative_binomial_distribution/negative_binomial_distribution}}
{{nv mem ln | cpp/numeric/random/negative_binomial_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/negative_binomial_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/negative_binomial_distribution/params | p | k}}
{{nv mem ln | cpp/numeric/random/negative_binomial_distribution/param}}
{{nv mem ln | cpp/numeric/random/negative_binomial_distribution/min}}
{{nv mem ln | cpp/numeric/random/negative_binomial_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/negative_binomial_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/negative_binomial_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/negative binomial distribution/navbar heading</title>
    <ns>10</ns>
    <id>3949</id>
    <revision>
      <id>48052</id>
      <parentid>35856</parentid>
      <timestamp>2013-05-18T18:02:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="93">{{ltt|cpp/numeric/random/negative_binomial_distribution|std::negative_binomial_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/negative binomial distribution/title</title>
    <ns>10</ns>
    <id>3999</id>
    <revision>
      <id>14745</id>
      <timestamp>2011-11-27T14:10:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">&lt;onlyinclude&gt;{{cpp/title | n=negative_binomial_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/non template distribution/operator cmp</title>
    <ns>10</ns>
    <id>14303</id>
    <revision>
      <id>79639</id>
      <timestamp>2015-07-16T05:09:58Z</timestamp>
      <contributor>
        <username>Cbadger</username>
        <id>4265</id>
      </contributor>
      <comment>Create version of Wiki template for the non-templated C++ distributions (e.g. bernoulli_distribution)</comment>
      <text xml:space="preserve" bytes="836">{{title | 1=operator==,!=&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}

{{dcl begin}}
{{dcl | num=1 | 1=
bool operator==( const {{{1}}}&amp; lhs,
	         const {{{1}}}&amp; rhs );

}}
{{dcl | num=2 | 1=
bool operator!=( const {{{1}}}&amp; lhs,
	         const {{{1}}}&amp; rhs );
}}
{{dcl end}}

Compares two distribution objects. Two distribution objects are equal when parameter values and internal state is the same.

1) Compares two distribution objects for equality.

2) Compares two distribution objects for inequality.

===Parameters===
{{par begin}}
{{par | lhs, rhs | distribution objects to compare}}
{{par end}}

===Return value===
1) {{c|true}} if the distribution objects are equal, {{c|false}} otherwise

2) {{c|true}} if the distribution objects are not equal, {{c|false}} otherwise

===Complexity===
Constant.</text>
      <sha1>fbluvpcje8vjvtinev8x3g59h24vm0i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/non template distribution/operator ltltgtgt</title>
    <ns>10</ns>
    <id>14304</id>
    <revision>
      <id>79641</id>
      <timestamp>2015-07-16T05:15:15Z</timestamp>
      <contributor>
        <username>Cbadger</username>
        <id>4265</id>
      </contributor>
      <comment>Create version of Wiki template for the non-templated C++ distributions (e.g. bernoulli_distribution)</comment>
      <text xml:space="preserve" bytes="1622">{{title |operator&lt;&lt;,&gt;&gt;&lt;small&gt;(std::{{{1}}})&lt;/small&gt;}}
{{cpp/numeric/random/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class CharT, class Traits&gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp; operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; ost, 
                                              const {{{1}}}&amp; d );
}}
{{dcl | num=2 | 1=
template&lt; class CharT, class Traits&gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; ist, 
                                              {{{1}}}&amp; d );
}}
{{dcl end}}

Performs stream input and output operations on pseudo-random number distribution {{tt|d}}.

@1@ Writes a textual representation of the distribution parameters and internal state to {{tt|ost}} as textual representation. The formatting flags and fill character of {{tt|ost}} are unchanged.

@2@ Restores the distribution parameters and internal state with data read from {{tt|ist}}. The formatting flags of {{tt|ist}} are unchanged. The data must have been written using a stream with the same locale, {{tt|CharT}} and {{tt|Traits}} template parameters, otherwise the behavior is undefined. If bad input is encountered, {{c|ist.setstate(std::ios::failbit)}} is called, which may throw {{lc|std::ios_base::failure}}. {{tt|d}} is unchanged in that case.

===Parameters===
{{par begin}}
{{par | ost | output stream to insert the data to}}
{{par | ist | input stream to extract the data from}}
{{par | d | pseudo-random number distribution}}
{{par end}}

===Return value===
@1@ {{tt|ost}}

@2@ {{tt|ist}}

===Exceptions===
@1@ (none)

@2@ may throw {{lc|std::ios_base::failure}} on bad input.</text>
      <sha1>7rbna78wx231t5jtd7s10jozijpf4f2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/normal distribution/navbar</title>
    <ns>10</ns>
    <id>3939</id>
    <revision>
      <id>39997</id>
      <parentid>36061</parentid>
      <timestamp>2012-09-28T20:18:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="378">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/normal_distribution/navbar heading
|content4 = cpp/numeric/random/normal_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/normal distribution/navbar content</title>
    <ns>10</ns>
    <id>4296</id>
    <revision>
      <id>61135</id>
      <parentid>54289</parentid>
      <timestamp>2013-06-05T12:15:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge mean and stddev</comment>
      <text xml:space="preserve" bytes="791">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/normal_distribution/normal_distribution}}
{{nv mem ln | cpp/numeric/random/normal_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/normal_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/normal_distribution/params | mean | stddev}}
{{nv mem ln | cpp/numeric/random/normal_distribution/param}}
{{nv mem ln | cpp/numeric/random/normal_distribution/min}}
{{nv mem ln | cpp/numeric/random/normal_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/normal_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/normal_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/normal distribution/navbar heading</title>
    <ns>10</ns>
    <id>3958</id>
    <revision>
      <id>48061</id>
      <parentid>35682</parentid>
      <timestamp>2013-05-18T18:03:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use simple ltt</comment>
      <text xml:space="preserve" bytes="71">{{ltt|cpp/numeric/random/normal_distribution|std::normal_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/normal distribution/title</title>
    <ns>10</ns>
    <id>3992</id>
    <revision>
      <id>14738</id>
      <timestamp>2011-11-27T14:10:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>=</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=normal_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/param list</title>
    <ns>10</ns>
    <id>13785</id>
    <revision>
      <id>73217</id>
      <timestamp>2014-10-18T10:08:08Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="462">{{par | {{{1|}}} | The result type generated by the generator. The effect is undefined if this is not {{#switch:{{{1|}}}
|RealType=one of {{c|float}}, {{c|double}}, or {{c|long double}}.
|IntType=one of {{c|short}}, {{c|int}}, {{c|long}}, {{c|long long}}, {{c|unsigned short}}, {{c|unsigned int}}, {{c|unsigned long}}, or {{c|unsigned long long}}.
|UIntType=one of {{c|unsigned short}}, {{c|unsigned int}}, {{c|unsigned long}}, or {{c|unsigned long long}}.
}}
}}</text>
      <sha1>42errel34hnheeg7wlf8009tqob4cwt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/param type</title>
    <ns>10</ns>
    <id>13980</id>
    <revision>
      <id>75929</id>
      <parentid>75919</parentid>
      <timestamp>2015-02-05T03:00:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link off to the concept instead</comment>
      <text xml:space="preserve" bytes="103">{{dsc | {{tt|param_type}} | the type of the parameter set, see {{concept|RandomNumberDistribution}}.
}}</text>
      <sha1>d6737hzsmza3z4ncbfjs5n1kn86jgjm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise constant distribution/dsc params</title>
    <ns>10</ns>
    <id>4968</id>
    <revision>
      <id>61098</id>
      <parentid>61097</parentid>
      <timestamp>2013-06-05T11:17:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="146">{{dsc mem fun | cpp/numeric/random/piecewise_constant_distribution/params | title=intervals&lt;br/&gt;densities | returns the distribution parameters }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise constant distribution/navbar</title>
    <ns>10</ns>
    <id>3946</id>
    <revision>
      <id>39998</id>
      <parentid>36059</parentid>
      <timestamp>2012-09-28T20:18:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="402">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/piecewise_constant_distribution/navbar heading
|content4 = cpp/numeric/random/piecewise_constant_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise constant distribution/navbar content</title>
    <ns>10</ns>
    <id>4303</id>
    <revision>
      <id>61095</id>
      <parentid>54298</parentid>
      <timestamp>2013-06-05T11:16:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge intervals and densitios</comment>
      <text xml:space="preserve" bytes="919">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/piecewise_constant_distribution/piecewise_constant_distribution}}
{{nv mem ln | cpp/numeric/random/piecewise_constant_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/piecewise_constant_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/piecewise_constant_distribution/params | intervals | densities}}
{{nv mem ln | cpp/numeric/random/piecewise_constant_distribution/param}}
{{nv mem ln | cpp/numeric/random/piecewise_constant_distribution/min}}
{{nv mem ln | cpp/numeric/random/piecewise_constant_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/piecewise_constant_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/piecewise_constant_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise constant distribution/navbar heading</title>
    <ns>10</ns>
    <id>3964</id>
    <revision>
      <id>48067</id>
      <parentid>35385</parentid>
      <timestamp>2013-05-18T18:04:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="95">{{ltt|cpp/numeric/random/piecewise_constant_distribution|std::piecewise_constant_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise constant distribution/title</title>
    <ns>10</ns>
    <id>3984</id>
    <revision>
      <id>14730</id>
      <timestamp>2011-11-27T14:08:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">&lt;onlyinclude&gt;{{cpp/title | n=piecewise_constant_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise linear distribution/dsc params</title>
    <ns>10</ns>
    <id>4971</id>
    <revision>
      <id>61108</id>
      <parentid>61107</parentid>
      <timestamp>2013-06-05T11:27:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="144">{{dsc mem fun | cpp/numeric/random/piecewise_linear_distribution/params | title=intervals&lt;br/&gt;densities | returns the distribution parameters }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise linear distribution/navbar</title>
    <ns>10</ns>
    <id>3947</id>
    <revision>
      <id>39999</id>
      <parentid>36058</parentid>
      <timestamp>2012-09-28T20:18:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="398">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/piecewise_linear_distribution/navbar heading
|content4 = cpp/numeric/random/piecewise_linear_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise linear distribution/navbar content</title>
    <ns>10</ns>
    <id>4304</id>
    <revision>
      <id>61106</id>
      <parentid>54306</parentid>
      <timestamp>2013-06-05T11:26:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync</comment>
      <text xml:space="preserve" bytes="899">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/piecewise_linear_distribution/piecewise_linear_distribution}}
{{nv mem ln | cpp/numeric/random/piecewise_linear_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/piecewise_linear_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/piecewise_linear_distribution/params | intervals | densities}}
{{nv mem ln | cpp/numeric/random/piecewise_linear_distribution/param}}
{{nv mem ln | cpp/numeric/random/piecewise_linear_distribution/min}}
{{nv mem ln | cpp/numeric/random/piecewise_linear_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/piecewise_linear_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/piecewise_linear_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise linear distribution/navbar heading</title>
    <ns>10</ns>
    <id>3965</id>
    <revision>
      <id>48068</id>
      <parentid>35857</parentid>
      <timestamp>2013-05-18T18:04:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="91">{{ltt|cpp/numeric/random/piecewise_linear_distribution|std::piecewise_linear_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/piecewise linear distribution/title</title>
    <ns>10</ns>
    <id>3985</id>
    <revision>
      <id>14731</id>
      <timestamp>2011-11-27T14:08:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">&lt;onlyinclude&gt;{{cpp/title | n=piecewise_linear_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/poisson distribution/dsc mean</title>
    <ns>10</ns>
    <id>5150</id>
    <revision>
      <id>59082</id>
      <parentid>54307</parentid>
      <timestamp>2013-06-01T06:26:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/poisson distribution/dcl list mean]] to [[Template:cpp/numeric/random/poisson distribution/dsc mean]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc mem fun | cpp/numeric/random/poisson_distribution/mean | returns the ''mean'' distribution parameter (mean number of occurrences of the event) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/poisson distribution/navbar</title>
    <ns>10</ns>
    <id>3934</id>
    <revision>
      <id>40000</id>
      <parentid>36057</parentid>
      <timestamp>2012-09-28T20:18:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="380">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/poisson_distribution/navbar heading
|content4 = cpp/numeric/random/poisson_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/poisson distribution/navbar content</title>
    <ns>10</ns>
    <id>4291</id>
    <revision>
      <id>54310</id>
      <parentid>35387</parentid>
      <timestamp>2013-06-01T05:11:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="783">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/poisson_distribution/poisson_distribution}}
{{nv mem ln | cpp/numeric/random/poisson_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/poisson_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/poisson_distribution/mean}}
{{nv mem ln | cpp/numeric/random/poisson_distribution/param}}
{{nv mem ln | cpp/numeric/random/poisson_distribution/min}}
{{nv mem ln | cpp/numeric/random/poisson_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/poisson_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/poisson_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/poisson distribution/navbar heading</title>
    <ns>10</ns>
    <id>3954</id>
    <revision>
      <id>48057</id>
      <parentid>35862</parentid>
      <timestamp>2013-05-18T18:02:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="73">{{ltt|cpp/numeric/random/poisson_distribution|std::poisson_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/poisson distribution/title</title>
    <ns>10</ns>
    <id>3997</id>
    <revision>
      <id>14743</id>
      <timestamp>2011-11-27T14:10:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=poisson_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=poisson_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/random device/dsc entropy</title>
    <ns>10</ns>
    <id>4973</id>
    <revision>
      <id>59087</id>
      <parentid>54311</parentid>
      <timestamp>2013-06-01T06:26:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/random device/dcl list entropy]] to [[Template:cpp/numeric/random/random device/dsc entropy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc mem fun | cpp/numeric/random/random_device/entropy | obtains the entropy estimate for the non-deterministic random number generator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/random device/navbar</title>
    <ns>10</ns>
    <id>4975</id>
    <revision>
      <id>40001</id>
      <parentid>36047</parentid>
      <timestamp>2012-09-28T20:18:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="366">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/random_device/navbar heading
|content4 = cpp/numeric/random/random_device/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/random device/navbar content</title>
    <ns>10</ns>
    <id>4977</id>
    <revision>
      <id>54312</id>
      <parentid>33416</parentid>
      <timestamp>2013-06-01T05:11:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="391">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/random_device/random_device}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/random_device/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/random_device/entropy}}
{{nv mem ln | cpp/numeric/random/random_device/min}}
{{nv mem ln | cpp/numeric/random/random_device/max}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/random device/navbar heading</title>
    <ns>10</ns>
    <id>4976</id>
    <revision>
      <id>48100</id>
      <parentid>35865</parentid>
      <timestamp>2013-05-18T18:12:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="59">{{ltt|cpp/numeric/random/random_device|std::random_device}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/random device/title</title>
    <ns>10</ns>
    <id>4979</id>
    <revision>
      <id>17906</id>
      <timestamp>2012-01-19T20:29:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=random_device::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/seed seq/navbar</title>
    <ns>10</ns>
    <id>8898</id>
    <revision>
      <id>40002</id>
      <parentid>37543</parentid>
      <timestamp>2012-09-28T20:18:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="356">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/seed_seq/navbar heading
|content4 = cpp/numeric/random/seed_seq/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/seed seq/navbar content</title>
    <ns>10</ns>
    <id>8900</id>
    <revision>
      <id>54313</id>
      <parentid>37545</parentid>
      <timestamp>2013-06-01T05:11:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="257">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/seed_seq/seed_seq}}
{{nv mem ln | cpp/numeric/random/seed_seq/generate}}
{{nv mem ln | cpp/numeric/random/seed_seq/size}}
{{nv mem ln | cpp/numeric/random/seed_seq/param}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/seed seq/navbar heading</title>
    <ns>10</ns>
    <id>8899</id>
    <revision>
      <id>48023</id>
      <parentid>37544</parentid>
      <timestamp>2013-05-18T17:54:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="49">{{ltt|cpp/numeric/random/seed_seq|std::seed_seq}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/seed seq/title</title>
    <ns>10</ns>
    <id>8939</id>
    <revision>
      <id>37665</id>
      <timestamp>2012-07-17T16:23:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=seed_seq::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/shuffle order engine/navbar</title>
    <ns>10</ns>
    <id>3709</id>
    <revision>
      <id>40003</id>
      <parentid>36046</parentid>
      <timestamp>2012-09-28T20:18:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="380">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/shuffle_order_engine/navbar heading
|content4 = cpp/numeric/random/shuffle_order_engine/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/shuffle order engine/navbar content</title>
    <ns>10</ns>
    <id>6475</id>
    <revision>
      <id>54314</id>
      <parentid>35657</parentid>
      <timestamp>2013-06-01T05:11:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="784">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/shuffle_order_engine/shuffle_order_engine}}
{{nv mem ln | cpp/numeric/random/shuffle_order_engine/seed}}
{{nv mem ln | cpp/numeric/random/shuffle_order_engine/base}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/shuffle_order_engine/operator()}}
{{nv mem ln | cpp/numeric/random/shuffle_order_engine/discard}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/shuffle_order_engine/min}}
{{nv mem ln | cpp/numeric/random/shuffle_order_engine/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/shuffle_order_engine/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/shuffle_order_engine/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/shuffle order engine/navbar heading</title>
    <ns>10</ns>
    <id>3715</id>
    <revision>
      <id>48049</id>
      <parentid>35867</parentid>
      <timestamp>2013-05-18T18:01:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="73">{{ltt|cpp/numeric/random/shuffle_order_engine|std::shuffle_order_engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/shuffle order engine/title</title>
    <ns>10</ns>
    <id>8827</id>
    <revision>
      <id>37233</id>
      <timestamp>2012-07-03T17:10:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=shuffle_order_engine::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/student t distribution/dsc n</title>
    <ns>10</ns>
    <id>5157</id>
    <revision>
      <id>59092</id>
      <parentid>54315</parentid>
      <timestamp>2013-06-01T06:26:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/student t distribution/dcl list n]] to [[Template:cpp/numeric/random/student t distribution/dsc n]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/numeric/random/student_t_distribution/n | returns the ''n'' distribution parameter (degrees of freedom) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/student t distribution/navbar</title>
    <ns>10</ns>
    <id>3944</id>
    <revision>
      <id>40004</id>
      <parentid>36045</parentid>
      <timestamp>2012-09-28T20:18:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="384">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/student_t_distribution/navbar heading
|content4 = cpp/numeric/random/student_t_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/student t distribution/navbar content</title>
    <ns>10</ns>
    <id>4301</id>
    <revision>
      <id>54316</id>
      <parentid>35870</parentid>
      <timestamp>2013-06-01T05:11:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="800">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/student_t_distribution/student_t_distribution}}
{{nv mem ln | cpp/numeric/random/student_t_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/student_t_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/student_t_distribution/n}}
{{nv mem ln | cpp/numeric/random/student_t_distribution/param}}
{{nv mem ln | cpp/numeric/random/student_t_distribution/min}}
{{nv mem ln | cpp/numeric/random/student_t_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/student_t_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/student_t_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/student t distribution/navbar heading</title>
    <ns>10</ns>
    <id>3962</id>
    <revision>
      <id>48065</id>
      <parentid>35871</parentid>
      <timestamp>2013-05-18T18:04:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="77">{{ltt|cpp/numeric/random/student_t_distribution|std::student_t_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/student t distribution/title</title>
    <ns>10</ns>
    <id>3987</id>
    <revision>
      <id>14733</id>
      <timestamp>2011-11-27T14:10:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=student_t_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/subtract with carry engine/navbar</title>
    <ns>10</ns>
    <id>3706</id>
    <revision>
      <id>40005</id>
      <parentid>36044</parentid>
      <timestamp>2012-09-28T20:19:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="392">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/subtract_with_carry_engine/navbar heading
|content4 = cpp/numeric/random/subtract_with_carry_engine/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/subtract with carry engine/navbar content</title>
    <ns>10</ns>
    <id>6473</id>
    <revision>
      <id>54317</id>
      <parentid>35873</parentid>
      <timestamp>2013-06-01T05:11:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="777">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/subtract_with_carry_engine/subtract_with_carry_engine}}
{{nv mem ln | cpp/numeric/random/subtract_with_carry_engine/seed}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/subtract_with_carry_engine/operator()}}
{{nv mem ln | cpp/numeric/random/subtract_with_carry_engine/discard}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/subtract_with_carry_engine/min}}
{{nv mem ln | cpp/numeric/random/subtract_with_carry_engine/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/subtract_with_carry_engine/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/subtract_with_carry_engine/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/subtract with carry engine/navbar heading</title>
    <ns>10</ns>
    <id>3712</id>
    <revision>
      <id>48046</id>
      <parentid>48045</parentid>
      <timestamp>2013-05-18T18:00:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>+std::</comment>
      <text xml:space="preserve" bytes="85">{{ltt|cpp/numeric/random/subtract_with_carry_engine|std::subtract_with_carry_engine}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/subtract with carry engine/title</title>
    <ns>10</ns>
    <id>4247</id>
    <revision>
      <id>15363</id>
      <timestamp>2011-12-08T17:11:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">&lt;onlyinclude&gt;{{cpp/title | n=subtract_with_carry_engine::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform int distribution/navbar</title>
    <ns>10</ns>
    <id>3344</id>
    <revision>
      <id>40006</id>
      <parentid>36043</parentid>
      <timestamp>2012-09-28T20:19:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="388">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/uniform_int_distribution/navbar heading
|content4 = cpp/numeric/random/uniform_int_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform int distribution/navbar content</title>
    <ns>10</ns>
    <id>4287</id>
    <revision>
      <id>61144</id>
      <parentid>54322</parentid>
      <timestamp>2013-06-05T12:20:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge a and b</comment>
      <text xml:space="preserve" bytes="833">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/uniform_int_distribution/uniform_int_distribution}}
{{nv mem ln | cpp/numeric/random/uniform_int_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/uniform_int_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/uniform_int_distribution/params | a | b}}
{{nv mem ln | cpp/numeric/random/uniform_int_distribution/param}}
{{nv mem ln | cpp/numeric/random/uniform_int_distribution/min}}
{{nv mem ln | cpp/numeric/random/uniform_int_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/uniform_int_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/uniform_int_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform int distribution/navbar heading</title>
    <ns>10</ns>
    <id>3346</id>
    <revision>
      <id>48034</id>
      <parentid>35876</parentid>
      <timestamp>2013-05-18T17:59:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="81">{{ltt|cpp/numeric/random/uniform_int_distribution|std::uniform_int_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform int distribution/title</title>
    <ns>10</ns>
    <id>3317</id>
    <revision>
      <id>12703</id>
      <parentid>12627</parentid>
      <timestamp>2011-10-30T02:28:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/random/distribution/uniform int distribution/title]] to [[Template:cpp/numeric/random/uniform int distribution/title]]</comment>
      <text xml:space="preserve" bytes="121">&lt;onlyinclude&gt;{{cpp/title | n=uniform_int_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform real distribution/navbar</title>
    <ns>10</ns>
    <id>3343</id>
    <revision>
      <id>40007</id>
      <parentid>36042</parentid>
      <timestamp>2012-09-28T20:19:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="390">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/uniform_real_distribution/navbar heading
|content4 = cpp/numeric/random/uniform_real_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform real distribution/navbar content</title>
    <ns>10</ns>
    <id>4288</id>
    <revision>
      <id>61147</id>
      <parentid>54331</parentid>
      <timestamp>2013-06-05T12:22:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge a and b</comment>
      <text xml:space="preserve" bytes="843">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/uniform_real_distribution/uniform_real_distribution}}
{{nv mem ln | cpp/numeric/random/uniform_real_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/uniform_real_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/uniform_real_distribution/params | a | b}}
{{nv mem ln | cpp/numeric/random/uniform_real_distribution/param}}
{{nv mem ln | cpp/numeric/random/uniform_real_distribution/min}}
{{nv mem ln | cpp/numeric/random/uniform_real_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/uniform_real_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/uniform_real_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform real distribution/navbar heading</title>
    <ns>10</ns>
    <id>3345</id>
    <revision>
      <id>48033</id>
      <parentid>35879</parentid>
      <timestamp>2013-05-18T17:58:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="83">{{ltt|cpp/numeric/random/uniform_real_distribution|std::uniform_real_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/uniform real distribution/title</title>
    <ns>10</ns>
    <id>3335</id>
    <revision>
      <id>14627</id>
      <parentid>12706</parentid>
      <timestamp>2011-11-27T13:10:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="122">&lt;onlyinclude&gt;{{cpp/title | n=uniform_real_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/weibull distribution/navbar</title>
    <ns>10</ns>
    <id>3937</id>
    <revision>
      <id>40008</id>
      <parentid>36041</parentid>
      <timestamp>2012-09-28T20:19:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="380">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/random/navbar heading
|content3 = cpp/numeric/random/navbar content

|heading4 = cpp/numeric/random/weibull_distribution/navbar heading
|content4 = cpp/numeric/random/weibull_distribution/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/weibull distribution/navbar content</title>
    <ns>10</ns>
    <id>4294</id>
    <revision>
      <id>61139</id>
      <parentid>54340</parentid>
      <timestamp>2013-06-05T12:18:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge a and b</comment>
      <text xml:space="preserve" bytes="793">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/random/weibull_distribution/weibull_distribution}}
{{nv mem ln | cpp/numeric/random/weibull_distribution/reset}}

{{nv h2 | Generation}}
{{nv mem ln | cpp/numeric/random/weibull_distribution/operator()}}

{{nv h2 | Characteristics}}
{{nv mem ln | cpp/numeric/random/weibull_distribution/params | a | b}}
{{nv mem ln | cpp/numeric/random/weibull_distribution/param}}
{{nv mem ln | cpp/numeric/random/weibull_distribution/min}}
{{nv mem ln | cpp/numeric/random/weibull_distribution/max}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/numeric/random/weibull_distribution/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv ln | cpp/numeric/random/weibull_distribution/operator_ltltgtgt | operator&lt;&lt; | operator&gt;&gt;}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/weibull distribution/navbar heading</title>
    <ns>10</ns>
    <id>3957</id>
    <revision>
      <id>48060</id>
      <parentid>35882</parentid>
      <timestamp>2013-05-18T18:03:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="73">{{ltt|cpp/numeric/random/weibull_distribution|std::weibull_distribution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/random/weibull distribution/title</title>
    <ns>10</ns>
    <id>3994</id>
    <revision>
      <id>14740</id>
      <timestamp>2011-11-27T14:10:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=weibull_distribution::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio add</title>
    <ns>10</ns>
    <id>4984</id>
    <revision>
      <id>78471</id>
      <parentid>59122</parentid>
      <timestamp>2015-05-23T21:44:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>alias</comment>
      <text xml:space="preserve" bytes="115">{{dsc talias | cpp/numeric/ratio/ratio_add | adds two {{tt|ratio}} objects at compile-time | notes={{mark c++11}}}}</text>
      <sha1>gg06pq4je9vpcgxytrfph0hanxiy0ig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio divide</title>
    <ns>10</ns>
    <id>4987</id>
    <revision>
      <id>78474</id>
      <parentid>59127</parentid>
      <timestamp>2015-05-23T21:45:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>alias</comment>
      <text xml:space="preserve" bytes="121">{{dsc talias | cpp/numeric/ratio/ratio_divide | divides two {{tt|ratio}} objects at compile-time | notes={{mark c++11}}}}</text>
      <sha1>cvtdeonjfg6bcwkfz8xcnb8ys59skn1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio equal</title>
    <ns>10</ns>
    <id>4988</id>
    <revision>
      <id>59132</id>
      <parentid>54373</parentid>
      <timestamp>2013-06-01T06:27:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/ratio/dcl list ratio equal]] to [[Template:cpp/numeric/ratio/dsc ratio equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc tclass | cpp/numeric/ratio/ratio_equal | compares two {{tt|ratio}} objects for equality at compile-time | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio greater</title>
    <ns>10</ns>
    <id>4992</id>
    <revision>
      <id>59136</id>
      <parentid>54374</parentid>
      <timestamp>2013-06-01T06:27:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/ratio/dcl list ratio greater]] to [[Template:cpp/numeric/ratio/dsc ratio greater]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc tclass | cpp/numeric/ratio/ratio_greater | compares two {{tt|ratio}} objects for ''greater than'' at compile-time | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio greater equal</title>
    <ns>10</ns>
    <id>4993</id>
    <revision>
      <id>59140</id>
      <parentid>54377</parentid>
      <timestamp>2013-06-01T06:27:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/ratio/dcl list ratio greater equal]] to [[Template:cpp/numeric/ratio/dsc ratio greater equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="162">{{dsc tclass | cpp/numeric/ratio/ratio_greater_equal | compares two {{tt|ratio}} objects for ''greater than or equal to'' at compile-time | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio less</title>
    <ns>10</ns>
    <id>4990</id>
    <revision>
      <id>59144</id>
      <parentid>54378</parentid>
      <timestamp>2013-06-01T06:27:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/ratio/dcl list ratio less]] to [[Template:cpp/numeric/ratio/dsc ratio less]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc tclass | cpp/numeric/ratio/ratio_less | compares two {{tt|ratio}} objects for ''less than'' at compile-time | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio less equal</title>
    <ns>10</ns>
    <id>4991</id>
    <revision>
      <id>59148</id>
      <parentid>54381</parentid>
      <timestamp>2013-06-01T06:27:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/ratio/dcl list ratio less equal]] to [[Template:cpp/numeric/ratio/dsc ratio less equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tclass | cpp/numeric/ratio/ratio_less_equal | compares two {{tt|ratio}} objects for ''less than or equal to'' at compile-time| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio multiply</title>
    <ns>10</ns>
    <id>4986</id>
    <revision>
      <id>78472</id>
      <parentid>59152</parentid>
      <timestamp>2015-05-23T21:44:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>alias</comment>
      <text xml:space="preserve" bytes="126">{{dsc talias | cpp/numeric/ratio/ratio_multiply | multiplies two {{tt|ratio}} objects at compile-time | notes={{mark c++11}}}}</text>
      <sha1>j18rne7h7kuxw06d54hwk1eobai7gmt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio not equal</title>
    <ns>10</ns>
    <id>4989</id>
    <revision>
      <id>59156</id>
      <parentid>54383</parentid>
      <timestamp>2013-06-01T06:27:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/ratio/dcl list ratio not equal]] to [[Template:cpp/numeric/ratio/dsc ratio not equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tclass | cpp/numeric/ratio/ratio_not_equal | compares two {{tt|ratio}} objects for inequality at compile-time | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/dsc ratio subtract</title>
    <ns>10</ns>
    <id>4985</id>
    <revision>
      <id>78473</id>
      <parentid>59160</parentid>
      <timestamp>2015-05-23T21:44:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>alias</comment>
      <text xml:space="preserve" bytes="125">{{dsc talias | cpp/numeric/ratio/ratio_subtract | subtracts two {{tt|ratio}} objects at compile-time | notes={{mark c++11}}}}</text>
      <sha1>er4dna7x948fot9wp8198kuda353spc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/navbar</title>
    <ns>10</ns>
    <id>3518</id>
    <revision>
      <id>40009</id>
      <parentid>35883</parentid>
      <timestamp>2012-09-28T20:19:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/ratio/navbar heading
|content3 = cpp/numeric/ratio/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/navbar content</title>
    <ns>10</ns>
    <id>2500</id>
    <revision>
      <id>54387</id>
      <parentid>35884</parentid>
      <timestamp>2013-06-01T05:12:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="801">{{nv begin}}
{{nv ln | cpp/numeric/ratio/ratio | notes={{mark c++11}}}}
{{nv h2 | Arithmetic}}
{{nv ln | cpp/numeric/ratio/ratio_add | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_subtract | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_multiply | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_divide | notes={{mark c++11}}}}
{{nv h2 | Comparison}}
{{nv ln | cpp/numeric/ratio/ratio_equal | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_not_equal | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_less | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_less_equal | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_greater | notes={{mark c++11}}}}
{{nv ln | cpp/numeric/ratio/ratio_greater_equal | notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/ratio/navbar heading</title>
    <ns>10</ns>
    <id>2485</id>
    <revision>
      <id>35886</id>
      <parentid>13331</parentid>
      <timestamp>2012-06-15T22:34:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/ratio/sidebar heading]] to [[Template:cpp/numeric/ratio/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="56">[[cpp/numeric/ratio | Compile time rational arithmetic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc assoc laguerre</title>
    <ns>10</ns>
    <id>14768</id>
    <revision>
      <id>83980</id>
      <parentid>83958</parentid>
      <timestamp>2016-03-14T14:27:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="205">{{dsc fun | cpp/numeric/special_math/assoc_laguerre | title=assoc_laguerre&lt;br&gt;assoc_laguerref&lt;br&gt;assoc_laguerrel | associated Laguerre polynomials|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>8kawj9qmwtwvcpvzi5qt91olnlmmfjc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc assoc legendre</title>
    <ns>10</ns>
    <id>14769</id>
    <revision>
      <id>83981</id>
      <parentid>83959</parentid>
      <timestamp>2016-03-14T14:28:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="205">{{dsc fun | cpp/numeric/special_math/assoc_legendre | title=assoc_legendre&lt;br&gt;assoc_legendref&lt;br&gt;assoc_legendrel | associated Legendre polynomials|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>ki8lainwpw1h7mamiei3b0dbuj5o1sa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc beta</title>
    <ns>10</ns>
    <id>14770</id>
    <revision>
      <id>83982</id>
      <parentid>83960</parentid>
      <timestamp>2016-03-14T14:28:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="146">{{dsc fun | cpp/numeric/special_math/beta| title=beta&lt;br&gt;betaf&lt;br&gt;betal | beta function|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>g6y9jtm11quvigma3tyuzk66ietom3m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc comp ellint 1</title>
    <ns>10</ns>
    <id>14771</id>
    <revision>
      <id>83983</id>
      <parentid>83961</parentid>
      <timestamp>2016-03-14T14:28:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="215">{{dsc fun | cpp/numeric/special_math/comp_ellint_1| title=comp_ellint_1&lt;br&gt;comp_ellint_1f&lt;br&gt;comp_ellint_1l | (complete) elliptic integral of the first kind|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>73fauwo5kxhltjnd2gvxhmh28a0in4x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc comp ellint 2</title>
    <ns>10</ns>
    <id>14772</id>
    <revision>
      <id>83984</id>
      <parentid>83962</parentid>
      <timestamp>2016-03-14T14:28:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="217">{{dsc fun | cpp/numeric/special_math/comp_ellint_2| title=comp_ellint_2&lt;br&gt;comp_ellint_2f&lt;br&gt;comp_ellint_2l |  (complete) elliptic integral of the second kind|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>frc46ht1366jh0ew0u63v4rkl74viru</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc comp ellint 3</title>
    <ns>10</ns>
    <id>14773</id>
    <revision>
      <id>83985</id>
      <parentid>83963</parentid>
      <timestamp>2016-03-14T14:29:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="215">{{dsc fun | cpp/numeric/special_math/comp_ellint_3| title=comp_ellint_3&lt;br&gt;comp_ellint_3f&lt;br&gt;comp_ellint_3l | (complete) elliptic integral of the third kind|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>4japq5excwqnlgfol15da4r11ouc63h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc cyl bessel i</title>
    <ns>10</ns>
    <id>14774</id>
    <revision>
      <id>83986</id>
      <parentid>83964</parentid>
      <timestamp>2016-03-14T14:29:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="210">{{dsc fun | cpp/numeric/special_math/cyl_bessel_i| title=cyl_bessel_i&lt;br&gt;cyl_bessel_if&lt;br&gt;cyl_bessel_il | regular modified cylindrical Bessel functions|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>9z81ym0yr0f870s757nf4sqea8ivlkl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc cyl bessel j</title>
    <ns>10</ns>
    <id>14775</id>
    <revision>
      <id>83987</id>
      <parentid>83965</parentid>
      <timestamp>2016-03-14T14:29:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="213">{{dsc fun | cpp/numeric/special_math/cyl_bessel_j| title=cyl_bessel_j&lt;br&gt;cyl_bessel_jf&lt;br&gt;cyl_bessel_jl | cylindrical Bessel functions (of the first kind)|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>2pmpd5udw972uf7wb72z98853v4hhly</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc cyl bessel k</title>
    <ns>10</ns>
    <id>14776</id>
    <revision>
      <id>83988</id>
      <parentid>83966</parentid>
      <timestamp>2016-03-14T14:29:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="212">{{dsc fun | cpp/numeric/special_math/cyl_bessel_k| title=cyl_bessel_k&lt;br&gt;cyl_bessel_kf&lt;br&gt;cyl_bessel_kl | irregular modified cylindrical Bessel functions|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>dxk1c4ccg8enqcs5xdv613tfzgim27i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc cyl neumann</title>
    <ns>10</ns>
    <id>14777</id>
    <revision>
      <id>83989</id>
      <parentid>83967</parentid>
      <timestamp>2016-03-14T14:30:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="189">{{dsc fun | cpp/numeric/special_math/cyl_neumann| title=cyl_neumann&lt;br&gt;cyl_neumannf&lt;br&gt;cyl_neumannl |cylindrical Neumann functions|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>1tinmficcl6t0pby3t385fl7fd872o1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc ellint 1</title>
    <ns>10</ns>
    <id>14778</id>
    <revision>
      <id>83990</id>
      <parentid>83968</parentid>
      <timestamp>2016-03-14T14:30:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="195">{{dsc fun | cpp/numeric/special_math/ellint_1|title=ellint_1&lt;br&gt;ellint_1f&lt;br&gt;ellint_1l| (incomplete) elliptic integral of the first kind|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>t82viiqa39z3lg70g3wb6g4p1fq3jev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc ellint 2</title>
    <ns>10</ns>
    <id>14779</id>
    <revision>
      <id>83991</id>
      <parentid>83969</parentid>
      <timestamp>2016-03-14T14:30:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="195">{{dsc fun | cpp/numeric/special_math/ellint_2|title=ellint_2&lt;br&gt;ellint_2f&lt;br&gt;ellint_2l|(incomplete) elliptic integral of the second kind|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>4m6d394xyu829fnxm5cyl94s7uf1btp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc ellint 3</title>
    <ns>10</ns>
    <id>14780</id>
    <revision>
      <id>83992</id>
      <parentid>83970</parentid>
      <timestamp>2016-03-14T14:30:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="194">{{dsc fun | cpp/numeric/special_math/ellint_3|title=ellint_3&lt;br&gt;ellint_3f&lt;br&gt;ellint_3l|(incomplete) elliptic integral of the third kind|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>hr9yyhioft63sdjz6vmwhn7n6xomanq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc expint</title>
    <ns>10</ns>
    <id>14781</id>
    <revision>
      <id>83993</id>
      <parentid>83971</parentid>
      <timestamp>2016-03-14T14:30:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | cpp/numeric/special_math/expint|title=expint&lt;br&gt;expintf&lt;br&gt;expintl|exponential integral|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>m5n2j9pm0zzgvelavpghh1nrkppofho</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc hermite</title>
    <ns>10</ns>
    <id>14782</id>
    <revision>
      <id>91199</id>
      <parentid>91198</parentid>
      <timestamp>2017-03-26T07:48:02Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <comment>Undo revision 91198 by [[Special:Contributions/Fruderica|Fruderica]] ([[User talk:Fruderica|talk]])</comment>
      <text xml:space="preserve" bytes="163">{{dsc fun | cpp/numeric/special_math/hermite| title=hermite&lt;br&gt;hermitef&lt;br&gt;hermitel| Hermite polynomials|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>iurps4fkpfs20t8gmi8pge5cwvv492b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc laguerre</title>
    <ns>10</ns>
    <id>14784</id>
    <revision>
      <id>83996</id>
      <parentid>83974</parentid>
      <timestamp>2016-03-14T14:31:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="168">{{dsc fun | cpp/numeric/special_math/laguerre| title=laguerre&lt;br&gt;laguerref&lt;br&gt;laguerrel| Laguerre polynomials|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>9z6ej6vlftbqw96gwg3vwu577hbg6ki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc legendre</title>
    <ns>10</ns>
    <id>14783</id>
    <revision>
      <id>83995</id>
      <parentid>83973</parentid>
      <timestamp>2016-03-14T14:31:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="169">{{dsc fun | cpp/numeric/special_math/legendre| title=legendre&lt;br&gt;legendref&lt;br&gt;legendrel | Legendre polynomials|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>r9ajl7wg42rdis7h7bg38qngqdu9idr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc riemann zeta</title>
    <ns>10</ns>
    <id>14785</id>
    <revision>
      <id>83997</id>
      <parentid>83975</parentid>
      <timestamp>2016-03-14T14:35:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="186">{{dsc fun | cpp/numeric/special_math/riemann_zeta| title=riemann_zeta&lt;br&gt;riemann_zetaf&lt;br&gt;riemann_zetal | Riemann zeta function|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>8osqzph8yum9aosilbr1p2n1mfe7ik3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc sph bessel</title>
    <ns>10</ns>
    <id>14786</id>
    <revision>
      <id>83998</id>
      <parentid>83976</parentid>
      <timestamp>2016-03-14T14:35:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="203">{{dsc fun | cpp/numeric/special_math/sph_bessel| title=sph_bessel&lt;br&gt;sph_besself&lt;br&gt;sph_bessell | spherical Bessel functions (of the first kind)|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>1hhi0vot74ct5sair82fykw0ec1oe5s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc sph legendre</title>
    <ns>10</ns>
    <id>14787</id>
    <revision>
      <id>83999</id>
      <parentid>83977</parentid>
      <timestamp>2016-03-14T14:35:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="204">{{dsc fun | cpp/numeric/special_math/sph_legendre| title=sph_legendre&lt;br&gt;sph_legendref&lt;br&gt;sph_legendrel | spherical associated Legendre functions|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>izx1ho9tow28xmoxbzy7xkmrfr4mu2o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/dsc sph neumann</title>
    <ns>10</ns>
    <id>14788</id>
    <revision>
      <id>84000</id>
      <parentid>83978</parentid>
      <timestamp>2016-03-14T14:36:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="188">{{dsc fun | cpp/numeric/special_math/sph_neumann| title=sph_neumann&lt;br&gt;sph_neumannf&lt;br&gt;sph_neumannl | spherical Neumann functions|notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>96q3ypa9x1z2osame3g4fle6fbe7df6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/navbar</title>
    <ns>10</ns>
    <id>14765</id>
    <revision>
      <id>83955</id>
      <timestamp>2016-03-14T14:15:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="258">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/special_math/navbar heading
|content3 = cpp/numeric/special_math/navbar content

}}</text>
      <sha1>7xaeqi7bmo7ifovefhkpkte3re63ed3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/navbar content</title>
    <ns>10</ns>
    <id>14767</id>
    <revision>
      <id>83957</id>
      <timestamp>2016-03-14T14:17:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1854">{{nv begin}}
{{nv col begin}}
{{nv ln | cpp/numeric/special_math/assoc_laguerre|assoc_laguerre|assoc_laguerref|assoc_laguerrel}}
{{nv ln | cpp/numeric/special_math/assoc_legendre|assoc_legendre|assoc_legendref|assoc_legendrel}}
{{nv ln | cpp/numeric/special_math/beta|beta|betaf|betal}}
{{nv ln | cpp/numeric/special_math/comp_ellint_1|comp_ellint_1|comp_ellint_1f|comp_ellint_1l}}
{{nv ln | cpp/numeric/special_math/comp_ellint_2|comp_ellint_2|comp_ellint_2f|comp_ellint_2l}}
{{nv ln | cpp/numeric/special_math/comp_ellint_3|comp_ellint_3|comp_ellint_3f|comp_ellint_3l}}
{{nv ln | cpp/numeric/special_math/cyl_bessel_i|cyl_bessel_i|cyl_bessel_if|cyl_bessel_il}}
{{nv col next}}
{{nv ln | cpp/numeric/special_math/cyl_bessel_j|cyl_bessel_j|cyl_bessel_jf|cyl_bessel_jl}}
{{nv ln | cpp/numeric/special_math/cyl_bessel_k|cyl_bessel_k|cyl_bessel_kf|cyl_bessel_kl}}
{{nv ln | cpp/numeric/special_math/cyl_neumann|cyl_neumann|cyl_neumannf|cyl_neumannl}}
{{nv ln | cpp/numeric/special_math/ellint_1|ellint_1|ellint_1f|ellint_1l}}
{{nv ln | cpp/numeric/special_math/ellint_2|ellint_2|ellint_2f|ellint_2l}}
{{nv ln | cpp/numeric/special_math/ellint_3|ellint_3|ellint_3f|ellint_3l}}
{{nv ln | cpp/numeric/special_math/expint|expint|expintf|expintl}}
{{nv col next}}
{{nv ln | cpp/numeric/special_math/hermite|hermite|hermitef|hermitel}}
{{nv ln | cpp/numeric/special_math/laguerre|laguerre|laguerref|laguerrel}}
{{nv ln | cpp/numeric/special_math/legendre|legendre|legendref|legendrel}}
{{nv ln | cpp/numeric/special_math/riemann_zeta|riemann_zeta|riemann_zetaf|riemann_zetal}}
{{nv ln | cpp/numeric/special_math/sph_bessel|sph_bessel|sph_besself|sph_bessell}}
{{nv ln | cpp/numeric/special_math/sph_legendre|sph_legendre|sph_legendref|sph_legendrel}}
{{nv ln | cpp/numeric/special_math/sph_neumann|sph_neumann|sph_neumannf|sph_neumannl}}
{{nv col end}}
{{nv end}}</text>
      <sha1>27ohhx0j6ynvxhjm0xil9ll1vcast1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/navbar heading</title>
    <ns>10</ns>
    <id>14766</id>
    <revision>
      <id>83956</id>
      <timestamp>2016-03-14T14:16:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="61">[[cpp/numeric/special_math | Special mathematical functions]]</text>
      <sha1>qx76da67ldq1q740xgqpc5sibvtuqei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/special math/older impl note</title>
    <ns>10</ns>
    <id>14789</id>
    <revision>
      <id>85855</id>
      <parentid>84001</parentid>
      <timestamp>2016-05-24T13:00:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>indeed, 29124 is not a TR</comment>
      <text xml:space="preserve" bytes="502">Implementations that do not support C++17, but support [[cpp/experimental/special_math|ISO 29124:2010]], provide this function if {{tt|__STDCPP_MATH_SPEC_FUNCS__}} is defined by the implementation to a value at least 201003L and if the user defines {{tt|__STDCPP_WANT_MATH_SPEC_FUNCS__}} before including any standard library headers.

Implementations that do not support ISO 29124:2010 but support TR 19768:2007 (TR1), provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}</text>
      <sha1>m0xeqpso0p5b99wzev43xs0zdjkh6x3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray//navbar</title>
    <ns>10</ns>
    <id>12745</id>
    <redirect title="Template:cpp/numeric/valarray/navbar" />
    <revision>
      <id>61573</id>
      <timestamp>2013-06-06T04:32:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="50">#redirect [[Template:cpp/numeric/valarray/navbar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray//title</title>
    <ns>10</ns>
    <id>12742</id>
    <revision>
      <id>61566</id>
      <timestamp>2013-06-06T03:28:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/constructor</title>
    <ns>10</ns>
    <id>12741</id>
    <revision>
      <id>61565</id>
      <parentid>61564</parentid>
      <timestamp>2013-06-06T03:27:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="410">{{cpp/numeric/valarray/{{{1|}}}/title | {{{1}}}}}
{{cpp/numeric/valarray/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |
{{{1}}}( const {{{1}}}&amp; other );
}}
{{dcl | 1=
{{{1}}}() = delete;
}}
{{dcl end}}

Constructs a {{tt|{{{1}}}}} from another {{tt|{{{1}}}}} {{tt|other}}. 

The default constructor is implicitly deleted.

===Parameters===
{{par begin}}
{{par | other | {{tt|{{{1}}}}} to initialize with}}
{{par end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/destructor</title>
    <ns>10</ns>
    <id>12740</id>
    <revision>
      <id>61574</id>
      <parentid>61563</parentid>
      <timestamp>2013-06-06T04:32:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="233">{{cpp/numeric/valarray/{{{1|}}}/title | ~{{{1}}}}}
{{cpp/numeric/valarray/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl |
~{{{1}}}();
}}
{{dcl end}}

Destroys the indexes in the array. The elements referred to by the object are not modified.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/dsc constructor</title>
    <ns>10</ns>
    <id>12705</id>
    <revision>
      <id>61520</id>
      <parentid>61513</parentid>
      <timestamp>2013-06-06T03:07:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/slice array/dsc constructor]] to [[Template:cpp/numeric/valarray/array/dsc constructor]]</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem ctor | cpp/numeric/valarray/{{{1|}}}/{{{1|}}} | constructs a {{tt|{{{1|}}}}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/dsc destructor</title>
    <ns>10</ns>
    <id>12706</id>
    <revision>
      <id>61519</id>
      <parentid>61514</parentid>
      <timestamp>2013-06-06T03:07:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/slice array/dsc destructor]] to [[Template:cpp/numeric/valarray/array/dsc destructor]]</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem dtor | cpp/numeric/valarray/{{{1|}}}/~{{{1|}}} | destroys a {{tt|{{{1|}}}}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/dsc operator arith</title>
    <ns>10</ns>
    <id>12708</id>
    <revision>
      <id>61521</id>
      <parentid>61517</parentid>
      <timestamp>2013-06-06T03:09:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="399">{{dsc mem fun | cpp/numeric/valarray/{{{1|}}}/operator_arith | title=operator+=&lt;br/&gt;operator-=&lt;br/&gt;operator*=&lt;br/&gt;operator/=&lt;br/&gt;operator%=&lt;br/&gt;operator&amp;=&lt;br&gt;operator{{!}}=&lt;br/&gt;operator^=&lt;br/&gt;operator&lt;&lt;=&lt;br/&gt;operator&gt;&gt;= | performs arithmetic operation on the array referred by {{#switch:{{{1|}}}
| slice_array=slice
| gslice_array=generic slice
| mask_array=mask
| indirect_array=indirect array}}.}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/dsc operator=</title>
    <ns>10</ns>
    <id>12707</id>
    <revision>
      <id>61518</id>
      <parentid>61515</parentid>
      <timestamp>2013-06-06T03:07:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/slice array/dsc operator=]] to [[Template:cpp/numeric/valarray/array/dsc operator=]]</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/numeric/valarray/{{{1|}}}/operator{{=}} | assigns contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/operator arith</title>
    <ns>10</ns>
    <id>12744</id>
    <revision>
      <id>61571</id>
      <timestamp>2013-06-06T04:31:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1180">{{cpp/numeric/valarray/{{{1|}}}/title | 1=operator+=,-=,*=,/=,%=,&amp;=,{{!}}=,^=,&lt;&lt;=,&gt;&gt;=}}
{{cpp/numeric/valarray/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | 1=
void operator+=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator-=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator*=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator/=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator%=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator&amp;=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator{{!}}=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator^=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator&lt;&lt;=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl | 1=
void operator&gt;&gt;=( const std::valarray&lt;T&gt;&amp; other );
}}
{{dcl end}}

Applies the corresponding operation to the referred elements and the elements of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | argument array to retrieve the values from }}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example &lt;!-- use {{include|cpp/numeric/valarray/{{{1|}}}/example_operator_arith}} --&gt;
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/array/operator=</title>
    <ns>10</ns>
    <id>12743</id>
    <revision>
      <id>61570</id>
      <parentid>61569</parentid>
      <timestamp>2013-06-06T04:26:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1045">{{cpp/numeric/valarray/{{{1|}}}/title | operator{{=}}}}
{{cpp/numeric/valarray/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
void operator=( const T&amp; value ) const;
}}
{{dcl | num=2 | 1=
void operator=( const std::valarray&lt;T&gt;&amp; val_arr ) const;
}}
{{dcl | num=3 | since=c++11 | 1=
const {{{1}}}&amp; operator=( const {{{1}}}&amp; sl_arr) const;
}}
{{dcl end}}

Assigns values to all referred elements.

@1@ Assigns {{tt|value}} to all of the elements.

@2@ Assigns the elements of {{tt|val_arr}} to the referred to elements of {{c|*this}}.

@3@ Assigns the selected elements from {{tt|sl_arr}} to the referred to elements of {{c|*this}}.

===Parameters===
{{par begin}}
{{par | value | a value to assign to all of the referred elements}}
{{par | val_arr | {{c|std::valarray}} to assign }}
{{par | sl_arr | {{c|std::{{{1}}}}} to assign }}
{{par end}}

===Return value===
@1-2@ (none)

@3@ {{c|*this}}

===Exceptions===
(none)

===Example===
{{example &lt;!-- use {{include|cpp/numeric/valarray/{{{1|}}}/example_operator{{=}}}} --&gt;
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc abs</title>
    <ns>10</ns>
    <id>3637</id>
    <revision>
      <id>59164</id>
      <parentid>54388</parentid>
      <timestamp>2013-06-01T06:28:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list abs]] to [[Template:cpp/numeric/valarray/dsc abs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tfun | cpp/numeric/valarray/abs   |  title=abs{{dsc small|(std::valarray)}} | applies the function {{c|std::abs}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc acos</title>
    <ns>10</ns>
    <id>3647</id>
    <revision>
      <id>59168</id>
      <parentid>54389</parentid>
      <timestamp>2013-06-01T06:28:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list acos]] to [[Template:cpp/numeric/valarray/dsc acos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/numeric/valarray/acos | title=acos{{dsc small|(std::valarray)}}     | applies the function {{lc|std::acos}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc apply</title>
    <ns>10</ns>
    <id>3632</id>
    <revision>
      <id>59172</id>
      <parentid>54392</parentid>
      <timestamp>2013-06-01T06:28:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list apply]] to [[Template:cpp/numeric/valarray/dsc apply]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem fun | cpp/numeric/valarray/apply | applies a function to every element of a valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc asin</title>
    <ns>10</ns>
    <id>3646</id>
    <revision>
      <id>59176</id>
      <parentid>54393</parentid>
      <timestamp>2013-06-01T06:28:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list asin]] to [[Template:cpp/numeric/valarray/dsc asin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/numeric/valarray/asin | title=asin{{dsc small|(std::valarray)}}     | applies the function {{lc|std::asin}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc atan</title>
    <ns>10</ns>
    <id>3648</id>
    <revision>
      <id>59180</id>
      <parentid>54396</parentid>
      <timestamp>2013-06-01T06:28:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list atan]] to [[Template:cpp/numeric/valarray/dsc atan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/numeric/valarray/atan | title=atan{{dsc small|(std::valarray)}}     | applies the function {{lc|std::atan}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc atan2</title>
    <ns>10</ns>
    <id>3649</id>
    <revision>
      <id>59185</id>
      <parentid>54397</parentid>
      <timestamp>2013-06-01T06:28:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list atan2]] to [[Template:cpp/numeric/valarray/dsc atan2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc tfun | cpp/numeric/valarray/atan2 | title=atan2{{dsc small|(std::valarray)}}   | applies the function {{lc|std::atan2}} to a valarray and a value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc begin2</title>
    <ns>10</ns>
    <id>3491</id>
    <revision>
      <id>59189</id>
      <parentid>54398</parentid>
      <timestamp>2013-06-01T06:28:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list begin2]] to [[Template:cpp/numeric/valarray/dsc begin2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="145">{{dsc tfun | cpp/numeric/valarray/begin2 | title=std::begin{{dsc small|(std::valarray)}} | specializes {{lc|std::begin}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc cos</title>
    <ns>10</ns>
    <id>3644</id>
    <revision>
      <id>59193</id>
      <parentid>54399</parentid>
      <timestamp>2013-06-01T06:28:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list cos]] to [[Template:cpp/numeric/valarray/dsc cos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc tfun | cpp/numeric/valarray/cos | title=cos{{dsc small|(std::valarray)}}     | applies the function {{lc|std::cos}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc cosh</title>
    <ns>10</ns>
    <id>3651</id>
    <revision>
      <id>59197</id>
      <parentid>54402</parentid>
      <timestamp>2013-06-01T06:28:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list cosh]] to [[Template:cpp/numeric/valarray/dsc cosh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/numeric/valarray/cosh | title=cosh{{dsc small|(std::valarray)}}     | applies the function {{lc|std::cosh}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc cshift</title>
    <ns>10</ns>
    <id>3633</id>
    <revision>
      <id>59201</id>
      <parentid>54403</parentid>
      <timestamp>2013-06-01T06:28:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list cshift]] to [[Template:cpp/numeric/valarray/dsc cshift]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/numeric/valarray/cshift | circular shift of the elements of the valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc end2</title>
    <ns>10</ns>
    <id>3489</id>
    <revision>
      <id>59206</id>
      <parentid>54406</parentid>
      <timestamp>2013-06-01T06:28:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list end2]] to [[Template:cpp/numeric/valarray/dsc end2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc tfun | cpp/numeric/valarray/end2 | title=std::end{{dsc small|(std::valarray)}} | specializes {{lc|std::end}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc exp</title>
    <ns>10</ns>
    <id>3638</id>
    <revision>
      <id>59210</id>
      <parentid>54407</parentid>
      <timestamp>2013-06-01T06:28:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list exp]] to [[Template:cpp/numeric/valarray/dsc exp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tfun | cpp/numeric/valarray/exp   |  title=exp{{dsc small|(std::valarray)}} | applies the function {{lc|std::exp}} to each element of valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc gslice</title>
    <ns>10</ns>
    <id>3655</id>
    <revision>
      <id>59214</id>
      <parentid>54410</parentid>
      <timestamp>2013-06-01T06:28:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list gslice]] to [[Template:cpp/numeric/valarray/dsc gslice]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc class | cpp/numeric/valarray/gslice | generalized slice of a valarray: starting index, set of lengths, set of strides}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc gslice array</title>
    <ns>10</ns>
    <id>3656</id>
    <revision>
      <id>59218</id>
      <parentid>54411</parentid>
      <timestamp>2013-06-01T06:28:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list gslice array]] to [[Template:cpp/numeric/valarray/dsc gslice array]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc tclass | cpp/numeric/valarray/gslice_array | proxy to a subset of a valarray after applying a gslice }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc indirect array</title>
    <ns>10</ns>
    <id>3658</id>
    <revision>
      <id>59223</id>
      <parentid>54416</parentid>
      <timestamp>2013-06-01T06:28:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list indirect array]] to [[Template:cpp/numeric/valarray/dsc indirect array]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc tclass | cpp/numeric/valarray/indirect_array | proxy to a subset of a valarray after applying indirect {{tt|operator[]}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc log</title>
    <ns>10</ns>
    <id>3639</id>
    <revision>
      <id>59227</id>
      <parentid>54419</parentid>
      <timestamp>2013-06-01T06:28:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list log]] to [[Template:cpp/numeric/valarray/dsc log]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tfun | cpp/numeric/valarray/log   |  title=log{{dsc small|(std::valarray)}} | applies the function {{lc|std::log}} to each element of valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc log10</title>
    <ns>10</ns>
    <id>3640</id>
    <revision>
      <id>59231</id>
      <parentid>54420</parentid>
      <timestamp>2013-06-01T06:29:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list log10]] to [[Template:cpp/numeric/valarray/dsc log10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/numeric/valarray/log10 | title=log10{{dsc small|(std::valarray)}} |  applies the function {{lc|std::log10}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc mask array</title>
    <ns>10</ns>
    <id>3657</id>
    <revision>
      <id>59235</id>
      <parentid>54425</parentid>
      <timestamp>2013-06-01T06:29:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list mask array]] to [[Template:cpp/numeric/valarray/dsc mask array]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc tclass | cpp/numeric/valarray/mask_array | proxy to a subset of a valarray after applying a boolean mask {{tt|operator[]}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc max</title>
    <ns>10</ns>
    <id>3630</id>
    <revision>
      <id>59240</id>
      <parentid>54428</parentid>
      <timestamp>2013-06-01T06:29:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list max]] to [[Template:cpp/numeric/valarray/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/numeric/valarray/max | returns the largest element}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc min</title>
    <ns>10</ns>
    <id>3629</id>
    <revision>
      <id>59245</id>
      <parentid>54429</parentid>
      <timestamp>2013-06-01T06:29:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list min]] to [[Template:cpp/numeric/valarray/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/numeric/valarray/min | returns the smallest element}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc operator arith</title>
    <ns>10</ns>
    <id>3623</id>
    <revision>
      <id>59254</id>
      <parentid>54431</parentid>
      <timestamp>2013-06-01T06:29:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list operator arith]] to [[Template:cpp/numeric/valarray/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="180">{{dsc mem fun | cpp/numeric/valarray/operator_arith | title=operator+&lt;br&gt;operator-&lt;br&gt;operator~&lt;br&gt;operator! | applies a unary arithmetic operator to each element of the valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc operator arith2</title>
    <ns>10</ns>
    <id>3624</id>
    <revision>
      <id>59257</id>
      <parentid>54436</parentid>
      <timestamp>2013-06-01T06:29:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list operator arith2]] to [[Template:cpp/numeric/valarray/dsc operator arith2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="276">{{dsc mem fun | cpp/numeric/valarray/operator_arith2 | title=operator+=&lt;br&gt;operator-=&lt;br&gt;operator*=&lt;br&gt;operator/=&lt;br&gt;operator%=&lt;br&gt;operator&amp;=&lt;br&gt;operator{{!}}=&lt;br&gt;operator^=&lt;br&gt;operator&lt;&lt;=&lt;br&gt;operator&gt;&gt;= | applies compound assignment operator to each element of the valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc operator arith3</title>
    <ns>10</ns>
    <id>3635</id>
    <revision>
      <id>59261</id>
      <parentid>54437</parentid>
      <timestamp>2013-06-01T06:29:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list operator arith3]] to [[Template:cpp/numeric/valarray/dsc operator arith3]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="325">{{dsc tfun | cpp/numeric/valarray/operator_arith3 | title=operator+&lt;br&gt;operator-&lt;br&gt;operator*&lt;br&gt;operator/&lt;br&gt;operator%&lt;br&gt;operator&amp;&lt;br&gt;operator{{!}}&lt;br&gt;operator^&lt;br&gt;operator&lt;&lt;&lt;br&gt;operator&gt;&gt;&lt;br&gt;operator&amp;&amp;&lt;br&gt;operator&lt;nowiki&gt;||&lt;/nowiki&gt; | applies binary operators to each element of two valarrays, or a valarray and a value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc operator at</title>
    <ns>10</ns>
    <id>3622</id>
    <revision>
      <id>59266</id>
      <parentid>54438</parentid>
      <timestamp>2013-06-01T06:29:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list operator at]] to [[Template:cpp/numeric/valarray/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem fun | cpp/numeric/valarray/operator_at | title=operator[] | get/set valarray element, slice, or mask}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc operator cmp</title>
    <ns>10</ns>
    <id>3636</id>
    <revision>
      <id>71173</id>
      <parentid>59271</parentid>
      <timestamp>2014-06-07T10:47:37Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>-extra &lt;br&gt;</comment>
      <text xml:space="preserve" bytes="188">{{dsc tfun | cpp/numeric/valarray/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares two valarrays or a valarray with a value }}</text>
      <sha1>34r36y7opdc70opjb2xjeae4jwp5bll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc operator=</title>
    <ns>10</ns>
    <id>3621</id>
    <revision>
      <id>59249</id>
      <parentid>54430</parentid>
      <timestamp>2013-06-01T06:29:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list operator=]] to [[Template:cpp/numeric/valarray/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/numeric/valarray/operator{{=}} | assigns the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc pow</title>
    <ns>10</ns>
    <id>3641</id>
    <revision>
      <id>59275</id>
      <parentid>54440</parentid>
      <timestamp>2013-06-01T06:29:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list pow]] to [[Template:cpp/numeric/valarray/dsc pow]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc tfun | cpp/numeric/valarray/pow   |  title=pow{{dsc small|(std::valarray)}} | applies the function {{lc|std::pow}} to two valarrays or a valarray and a value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc rbegin2</title>
    <ns>10</ns>
    <id>12770</id>
    <revision>
      <id>61645</id>
      <timestamp>2013-06-06T09:08:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="185">{{dsc fun | cpp/numeric/valarray/rbegin2 | title=rbegin{{dsc small|(std::valarray)}}&lt;br/&gt;crbegin{{dsc small|(std::valarray)}} | specializes {{lc|std::rbegin()}} | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc rend2</title>
    <ns>10</ns>
    <id>12769</id>
    <revision>
      <id>61644</id>
      <timestamp>2013-06-06T09:08:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="177">{{dsc fun | cpp/numeric/valarray/rend2 | title=rend{{dsc small|(std::valarray)}}&lt;br/&gt;crend{{dsc small|(std::valarray)}} | specializes {{lc|std::rend()}} | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc resize</title>
    <ns>10</ns>
    <id>3627</id>
    <revision>
      <id>59279</id>
      <parentid>54443</parentid>
      <timestamp>2013-06-01T06:29:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list resize]] to [[Template:cpp/numeric/valarray/dsc resize]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/numeric/valarray/resize | changes the size of valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc shift</title>
    <ns>10</ns>
    <id>3631</id>
    <revision>
      <id>59283</id>
      <parentid>54444</parentid>
      <timestamp>2013-06-01T06:29:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list shift]] to [[Template:cpp/numeric/valarray/dsc shift]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/numeric/valarray/shift | zero-filling shift the elements of the valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc sin</title>
    <ns>10</ns>
    <id>3643</id>
    <revision>
      <id>59288</id>
      <parentid>54447</parentid>
      <timestamp>2013-06-01T06:29:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list sin]] to [[Template:cpp/numeric/valarray/dsc sin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc tfun | cpp/numeric/valarray/sin | title=sin{{dsc small|(std::valarray)}}     | applies the function {{lc|std::sin}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc sinh</title>
    <ns>10</ns>
    <id>3650</id>
    <revision>
      <id>59291</id>
      <parentid>54448</parentid>
      <timestamp>2013-06-01T06:30:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list sinh]] to [[Template:cpp/numeric/valarray/dsc sinh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/numeric/valarray/sinh | title=sinh{{dsc small|(std::valarray)}}     | applies the function {{lc|std::sinh}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc size</title>
    <ns>10</ns>
    <id>3626</id>
    <revision>
      <id>59295</id>
      <parentid>54449</parentid>
      <timestamp>2013-06-01T06:30:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list size]] to [[Template:cpp/numeric/valarray/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/numeric/valarray/size | returns the size of valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc slice</title>
    <ns>10</ns>
    <id>3653</id>
    <revision>
      <id>59298</id>
      <parentid>54450</parentid>
      <timestamp>2013-06-01T06:30:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list slice]] to [[Template:cpp/numeric/valarray/dsc slice]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc class | cpp/numeric/valarray/slice | BLAS-like slice of a valarray: starting index, length, stride }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc slice array</title>
    <ns>10</ns>
    <id>3654</id>
    <revision>
      <id>59302</id>
      <parentid>54457</parentid>
      <timestamp>2013-06-01T06:30:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list slice array]] to [[Template:cpp/numeric/valarray/dsc slice array]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc tclass | cpp/numeric/valarray/slice_array | proxy to a subset of a valarray after applying a slice }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc sqrt</title>
    <ns>10</ns>
    <id>3642</id>
    <revision>
      <id>59307</id>
      <parentid>54462</parentid>
      <timestamp>2013-06-01T06:30:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list sqrt]] to [[Template:cpp/numeric/valarray/dsc sqrt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc tfun | cpp/numeric/valarray/sqrt  | title=sqrt{{dsc small|(std::valarray)}} | applies the function {{lc|std::sqrt}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc sum</title>
    <ns>10</ns>
    <id>3628</id>
    <revision>
      <id>59312</id>
      <parentid>54463</parentid>
      <timestamp>2013-06-01T06:30:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list sum]] to [[Template:cpp/numeric/valarray/dsc sum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/numeric/valarray/sum | calculates the sum of all elements}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc swap</title>
    <ns>10</ns>
    <id>3625</id>
    <revision>
      <id>59316</id>
      <parentid>54464</parentid>
      <timestamp>2013-06-01T06:30:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list swap]] to [[Template:cpp/numeric/valarray/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/numeric/valarray/swap | swaps with another valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc swap2</title>
    <ns>10</ns>
    <id>3634</id>
    <revision>
      <id>61072</id>
      <parentid>59320</parentid>
      <timestamp>2013-06-05T03:14:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="157">{{dsc tfun | cpp/numeric/valarray/swap2 | title=std::swap{{dsc small|(std::valarray)}} | specializes the {{lc|std::swap()}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc tan</title>
    <ns>10</ns>
    <id>3645</id>
    <revision>
      <id>59324</id>
      <parentid>54468</parentid>
      <timestamp>2013-06-01T06:30:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list tan]] to [[Template:cpp/numeric/valarray/dsc tan]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc tfun | cpp/numeric/valarray/tan | title=tan{{dsc small|(std::valarray)}}     | applies the function {{lc|std::tan}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc tanh</title>
    <ns>10</ns>
    <id>3652</id>
    <revision>
      <id>59329</id>
      <parentid>54471</parentid>
      <timestamp>2013-06-01T06:31:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list tanh]] to [[Template:cpp/numeric/valarray/dsc tanh]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/numeric/valarray/tanh | title=tanh{{dsc small|(std::valarray)}}     | applies the function {{lc|std::tanh}} to each element of valarray }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc valarray</title>
    <ns>10</ns>
    <id>3619</id>
    <revision>
      <id>59331</id>
      <parentid>54472</parentid>
      <timestamp>2013-06-01T06:31:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list valarray]] to [[Template:cpp/numeric/valarray/dsc valarray]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem ctor | cpp/numeric/valarray/valarray | constructs new numeric array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/dsc ~valarray</title>
    <ns>10</ns>
    <id>3620</id>
    <revision>
      <id>59335</id>
      <parentid>54475</parentid>
      <timestamp>2013-06-01T06:31:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/numeric/valarray/dcl list ~valarray]] to [[Template:cpp/numeric/valarray/dsc ~valarray]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem dtor | cpp/numeric/valarray/~valarray | destructs the numeric array }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/gslice array/navbar</title>
    <ns>10</ns>
    <id>12712</id>
    <revision>
      <id>61532</id>
      <timestamp>2013-06-06T03:13:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="372">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/valarray/navbar heading
|content3 = cpp/numeric/valarray/navbar content

|heading4 = cpp/numeric/valarray/gslice_array/navbar heading
|content4 = cpp/numeric/valarray/gslice_array/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/gslice array/navbar content</title>
    <ns>10</ns>
    <id>12719</id>
    <revision>
      <id>61540</id>
      <timestamp>2013-06-06T03:17:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="484">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/valarray/gslice_array/gslice_array}}
{{nv mem ln | cpp/numeric/valarray/gslice_array/~gslice_array}}
{{nv mem ln | cpp/numeric/valarray/gslice_array/operator{{=}}}}
{{nv mem ln | cpp/numeric/valarray/gslice_array/operator_arith | operator+{{=}} | operator-{{=}} | operator*{{=}} | operator/{{=}} | operator%{{=}} | operator&amp;{{=}} | operator{{!}}{{=}} | operator^{{=}} | operator&lt;&lt;{{=}} | operator&gt;&gt;{{=}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/gslice array/navbar heading</title>
    <ns>10</ns>
    <id>12715</id>
    <revision>
      <id>61536</id>
      <timestamp>2013-06-06T03:14:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="59">{{ltt|cpp/numeric/valarray/gslice_array|std::gslice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/gslice array/title</title>
    <ns>10</ns>
    <id>12747</id>
    <revision>
      <id>61576</id>
      <timestamp>2013-06-06T04:34:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=gslice_array::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/indirect array/navbar</title>
    <ns>10</ns>
    <id>12723</id>
    <revision>
      <id>61544</id>
      <timestamp>2013-06-06T03:18:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="376">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/valarray/navbar heading
|content3 = cpp/numeric/valarray/navbar content

|heading4 = cpp/numeric/valarray/indirect_array/navbar heading
|content4 = cpp/numeric/valarray/indirect_array/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/indirect array/navbar content</title>
    <ns>10</ns>
    <id>12722</id>
    <revision>
      <id>61543</id>
      <timestamp>2013-06-06T03:17:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>|</comment>
      <text xml:space="preserve" bytes="496">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/valarray/indirect_array/indirect_array}}
{{nv mem ln | cpp/numeric/valarray/indirect_array/~indirect_array}}
{{nv mem ln | cpp/numeric/valarray/indirect_array/operator{{=}}}}
{{nv mem ln | cpp/numeric/valarray/indirect_array/operator_arith | operator+{{=}} | operator-{{=}} | operator*{{=}} | operator/{{=}} | operator%{{=}} | operator&amp;{{=}} | operator{{!}}{{=}} | operator^{{=}} | operator&lt;&lt;{{=}} | operator&gt;&gt;{{=}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/indirect array/navbar heading</title>
    <ns>10</ns>
    <id>12718</id>
    <revision>
      <id>61539</id>
      <timestamp>2013-06-06T03:15:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="63">{{ltt|cpp/numeric/valarray/indirect_array|std::indirect_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/indirect array/title</title>
    <ns>10</ns>
    <id>12748</id>
    <revision>
      <id>61577</id>
      <timestamp>2013-06-06T04:34:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=indirect_array::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/mask array/navbar</title>
    <ns>10</ns>
    <id>12714</id>
    <revision>
      <id>61545</id>
      <parentid>61535</parentid>
      <timestamp>2013-06-06T03:19:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Undo revision 61535 by [[Special:Contributions/P12|P12]] ([[User talk:P12|talk]])</comment>
      <text xml:space="preserve" bytes="368">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/valarray/navbar heading
|content3 = cpp/numeric/valarray/navbar content

|heading4 = cpp/numeric/valarray/mask_array/navbar heading
|content4 = cpp/numeric/valarray/mask_array/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/mask array/navbar content</title>
    <ns>10</ns>
    <id>12721</id>
    <revision>
      <id>61542</id>
      <timestamp>2013-06-06T03:17:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="472">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/valarray/mask_array/mask_array}}
{{nv mem ln | cpp/numeric/valarray/mask_array/~mask_array}}
{{nv mem ln | cpp/numeric/valarray/mask_array/operator{{=}}}}
{{nv mem ln | cpp/numeric/valarray/mask_array/operator_arith | operator+{{=}} | operator-{{=}} | operator*{{=}} | operator/{{=}} | operator%{{=}} | operator&amp;{{=}} | operator{{!}}{{=}} | operator^{{=}} | operator&lt;&lt;{{=}} | operator&gt;&gt;{{=}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/mask array/navbar heading</title>
    <ns>10</ns>
    <id>12717</id>
    <revision>
      <id>61538</id>
      <timestamp>2013-06-06T03:14:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="55">{{ltt|cpp/numeric/valarray/mask_array|std::mask_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/mask array/title</title>
    <ns>10</ns>
    <id>12749</id>
    <revision>
      <id>61578</id>
      <timestamp>2013-06-06T04:34:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=mask_array::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/navbar</title>
    <ns>10</ns>
    <id>2705</id>
    <revision>
      <id>61531</id>
      <parentid>40010</parentid>
      <timestamp>2013-06-06T03:13:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="249">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/valarray/navbar heading
|content3 = cpp/numeric/valarray/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/navbar content</title>
    <ns>10</ns>
    <id>5017</id>
    <revision>
      <id>54480</id>
      <parentid>44884</parentid>
      <timestamp>2013-06-01T05:13:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="2523">{{nv begin}}
{{nv h1 | Member functions}}
{{nv col begin}}
{{nv mem ln | cpp/numeric/valarray/valarray}}
{{nv mem ln | cpp/numeric/valarray/~valarray}}
{{nv mem ln | cpp/numeric/valarray/operator{{=}}}}
{{nv mem ln | cpp/numeric/valarray/operator_at|operator[]}}
{{nv mem ln | cpp/numeric/valarray/swap}}
{{nv mem ln | cpp/numeric/valarray/size}}
{{nv mem ln | cpp/numeric/valarray/resize}}
{{nv mem ln | cpp/numeric/valarray/sum}}
{{nv mem ln | cpp/numeric/valarray/min}}
{{nv mem ln | cpp/numeric/valarray/max}}
{{nv mem ln | cpp/numeric/valarray/shift}}
{{nv mem ln | cpp/numeric/valarray/cshift}}
{{nv mem ln | cpp/numeric/valarray/apply}}
{{nv col next}}
{{nv mem ln | cpp/numeric/valarray/operator_arith|operator+|operator-|operator~|operator!}}
{{nv mem ln | cpp/numeric/valarray/operator_arith2|operator+{{=}}|operator-{{=}}|operator*{{=}}|operator/{{=}}|operator%{{=}}|operator&amp;{{=}}|operator{{!}}{{=}}|operator^{{=}}|operator&lt;&lt;{{=}}|operator&gt;&gt;{{=}}}}
{{nv col end}}

{{nv h1 | Non-member functions}}
{{nv col begin}}
{{nv ln | cpp/numeric/valarray/swap2|swap|notes={{mark c++11}}}}
{{nv ln | cpp/numeric/valarray/begin2|begin|notes={{mark c++11}}}}
{{nv ln | cpp/numeric/valarray/end2|end|notes={{mark c++11}}}}
{{nv ln | cpp/numeric/valarray/abs}}
{{nv ln | cpp/numeric/valarray/exp}}
{{nv ln | cpp/numeric/valarray/log}}
{{nv ln | cpp/numeric/valarray/log10}}
{{nv ln | cpp/numeric/valarray/pow}}
{{nv ln | cpp/numeric/valarray/sqrt}}
{{nv ln | cpp/numeric/valarray/sin}}
{{nv ln | cpp/numeric/valarray/cos}}
{{nv ln | cpp/numeric/valarray/tan}}
{{nv ln | cpp/numeric/valarray/asin}}
{{nv ln | cpp/numeric/valarray/acos}}
{{nv ln | cpp/numeric/valarray/atan}}
{{nv ln | cpp/numeric/valarray/atan2}}
{{nv ln | cpp/numeric/valarray/sinh}}
{{nv ln | cpp/numeric/valarray/cosh}}
{{nv ln | cpp/numeric/valarray/tanh}}
{{nv col next}}
{{nv ln | cpp/numeric/valarray/operator_arith3 |operator*|operator/|operator%|operator+|operator-|operator^|operator&amp;|operator{{!}}|operator&lt;&lt;|operator&gt;&gt;|operator&amp;&amp;|operator&amp;#124;&amp;#124;}}
{{nv ln | cpp/numeric/valarray/operator_cmp | operator{{==}} | operator!{{=}}|operator&lt;|operator&gt;|operator&lt;{{=}}|operator&gt;{{=}}}}
{{nv col end}}

{{nv h1 | Helper classes}}
{{nv col begin}}
{{nv ln | cpp/numeric/valarray/slice_array}}
{{nv ln | cpp/numeric/valarray/gslice_array}}
{{nv ln | cpp/numeric/valarray/indirect_array}}
{{nv col next}}
{{nv ln | cpp/numeric/valarray/slice}}
{{nv ln | cpp/numeric/valarray/gslice}}
{{nv ln | cpp/numeric/valarray/mask_array}}
{{nv col end}}

{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/navbar heading</title>
    <ns>10</ns>
    <id>2706</id>
    <revision>
      <id>48026</id>
      <parentid>37939</parentid>
      <timestamp>2013-05-18T17:56:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="42">{{ltt|cpp/numeric/valarray|std::valarray}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/notes ret</title>
    <ns>10</ns>
    <id>5018</id>
    <revision>
      <id>75650</id>
      <parentid>54483</parentid>
      <timestamp>2015-01-25T13:10:53Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>LWG 2058</comment>
      <text xml:space="preserve" bytes="910">The function can be implemented with the return type different from {{lc|std::valarray}}. In this case, the replacement type has the following properties:
:* All {{c|const}} member functions of {{lc|std::valarray}} are provided.
:* {{lc|std::valarray}}, {{c|std::slice_array}}, {{c|std::gslice_array}}, {{c|std::mask_array}} and {{c|std::indirect_array}} can be constructed from the replacement type.
:* All functions accepting an argument of type {{c|const std::valarray&amp;}}{{rev inl|since=c++14| except {{ltf|cpp/numeric/valarray/begin2|begin}} and {{ltf|cpp/numeric/valarray/end2|end}}}} should also accept the replacement type.
:* All functions accepting two arguments of type {{c|const std::valarray&amp;}} should accept every combination of {{c|const std::valarray&amp;}} and the replacement type.
:* The return type does not add more than two levels of template nesting over the most deeply-nested argument type.</text>
      <sha1>5ak4wnfamaftkhvhmlqgtni38o1rjmn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/notes unq</title>
    <ns>10</ns>
    <id>9041</id>
    <revision>
      <id>37975</id>
      <timestamp>2012-07-22T22:45:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="168">Unqualified function ({{c|{{{1}}}}}) is used to perform the computation. If such function is not available, {{c|std::{{{1}}}}} is used due to argument dependent lookup.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/slice array/navbar</title>
    <ns>10</ns>
    <id>12713</id>
    <revision>
      <id>61533</id>
      <timestamp>2013-06-06T03:13:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="370">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/numeric/navbar heading
|content2 = cpp/numeric/navbar content

|heading3 = cpp/numeric/valarray/navbar heading
|content3 = cpp/numeric/valarray/navbar content

|heading4 = cpp/numeric/valarray/slice_array/navbar heading
|content4 = cpp/numeric/valarray/slice_array/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/slice array/navbar content</title>
    <ns>10</ns>
    <id>12720</id>
    <revision>
      <id>61541</id>
      <timestamp>2013-06-06T03:17:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="478">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/numeric/valarray/slice_array/slice_array}}
{{nv mem ln | cpp/numeric/valarray/slice_array/~slice_array}}
{{nv mem ln | cpp/numeric/valarray/slice_array/operator{{=}}}}
{{nv mem ln | cpp/numeric/valarray/slice_array/operator_arith | operator+{{=}} | operator-{{=}} | operator*{{=}} | operator/{{=}} | operator%{{=}} | operator&amp;{{=}} | operator{{!}}{{=}} | operator^{{=}} | operator&lt;&lt;{{=}} | operator&gt;&gt;{{=}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/slice array/navbar heading</title>
    <ns>10</ns>
    <id>12716</id>
    <revision>
      <id>61537</id>
      <timestamp>2013-06-06T03:14:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="57">{{ltt|cpp/numeric/valarray/slice_array|std::slice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/slice array/title</title>
    <ns>10</ns>
    <id>12746</id>
    <revision>
      <id>61575</id>
      <timestamp>2013-06-06T04:34:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=slice_array::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/numeric/valarray/title</title>
    <ns>10</ns>
    <id>4551</id>
    <revision>
      <id>16063</id>
      <timestamp>2011-12-19T18:48:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=valarray::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/optional/title</title>
    <ns>10</ns>
    <id>14809</id>
    <revision>
      <id>84059</id>
      <timestamp>2016-03-15T12:58:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=optional::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>2ekkaaa8rx4d6l79wprc9tacqdkncez</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/preprocessor/navbar</title>
    <ns>10</ns>
    <id>1664</id>
    <revision>
      <id>40011</id>
      <parentid>36040</parentid>
      <timestamp>2012-09-28T20:19:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/language/navbar heading
|content2 = cpp/language/navbar content

|heading3 = cpp/preprocessor/navbar heading
|content3 = cpp/preprocessor/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/preprocessor/navbar content</title>
    <ns>10</ns>
    <id>1665</id>
    <revision>
      <id>81493</id>
      <parentid>81492</parentid>
      <timestamp>2015-10-27T14:03:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>lang tags</comment>
      <text xml:space="preserve" bytes="479">{{nv begin}}
{{nv ln | cpp/preprocessor/conditional | &amp;#35;if | &amp;#35;ifdef | &amp;#35;ifndef | &amp;#35;else | &amp;#35;elif | &amp;#35;endif}}
{{nv ln | cpp/preprocessor/replace | &amp;#35;define | &amp;#35;undef | &amp;#35;,&amp;#35;&amp;#35; operators}}
{{nv ln | cpp/preprocessor/include | &amp;#35;include | __has_include{{mark c++17}}}}
{{nv ln | cpp/preprocessor/error | &amp;#35;error}}
{{nv ln | cpp/preprocessor/impl | &amp;#35;pragma | _Pragma{{mark c++11}}}}
{{nv ln | cpp/preprocessor/line | &amp;#35;line}}
{{nv end}}</text>
      <sha1>2fbveb6req866xrryznrsqf11xhxjku</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/preprocessor/navbar heading</title>
    <ns>10</ns>
    <id>1666</id>
    <revision>
      <id>33674</id>
      <parentid>3332</parentid>
      <timestamp>2012-06-15T20:36:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/preprocessor/sidebar heading]] to [[Template:cpp/preprocessor/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="35">[[cpp/preprocessor | Preprocessor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/preprocessor/pragma once</title>
    <ns>10</ns>
    <id>15701</id>
    <revision>
      <id>87608</id>
      <timestamp>2016-09-14T13:53:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1077">{{c|#pragma once}} is a non-standard pragma that is supported by the [[enwiki:Pragma_once#Portability|vast majority of modern compilers]]. If it appears in a header file, it indicates that it is only to be parsed once, even if it is (directly or indirectly) included multiple times in the same source file.

Standard approach to preventing multiple inclusion of the same header is by using [[enwiki:Include_guard|include guard]]s:
{{source|1=
#ifndef FILENAME_H
#define FILENAME_H
// contents of the header
#endif /* FILENAME_H */
}}
So that all but the first inclusion of the header in any translation unit are excluded from compilation.

With {{c|#pragma once}}, the same header appears as
{{source|1=
#pragma once
// contents of the header
}}

Unlike header guards, this pragma makes it impossible to erroneously use the same macro name in more than one file. On the other hand, since with {{c|#pragma once}} files are excluded based on their filesystem-level identity, this can't protect against including a header twice if it exists in more than one location in a project.</text>
      <sha1>ffmolnxw6rnsnt0jjkm2v03w0ft6ry9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc assign</title>
    <ns>10</ns>
    <id>6350</id>
    <revision>
      <id>59339</id>
      <parentid>54487</parentid>
      <timestamp>2013-06-01T06:31:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list assign]] to [[Template:cpp/regex/basic regex/dsc assign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/regex/basic_regex/assign | assigns the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc constructor</title>
    <ns>10</ns>
    <id>6347</id>
    <revision>
      <id>59343</id>
      <parentid>54488</parentid>
      <timestamp>2013-06-01T06:31:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list constructor]] to [[Template:cpp/regex/basic regex/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem ctor | cpp/regex/basic_regex/basic_regex | constructs the regex object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc destructor</title>
    <ns>10</ns>
    <id>6348</id>
    <revision>
      <id>59347</id>
      <parentid>54493</parentid>
      <timestamp>2013-06-01T06:31:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list destructor]] to [[Template:cpp/regex/basic regex/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem dtor | cpp/regex/basic_regex/~basic_regex | destructs the regex object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc flags</title>
    <ns>10</ns>
    <id>6352</id>
    <revision>
      <id>59351</id>
      <parentid>54496</parentid>
      <timestamp>2013-06-01T06:31:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list flags]] to [[Template:cpp/regex/basic regex/dsc flags]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/regex/basic_regex/flags | returns the syntax flags }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc getloc</title>
    <ns>10</ns>
    <id>6353</id>
    <revision>
      <id>59355</id>
      <parentid>54497</parentid>
      <timestamp>2013-06-01T06:31:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list getloc]] to [[Template:cpp/regex/basic regex/dsc getloc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/regex/basic_regex/getloc | get locale information}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc imbue</title>
    <ns>10</ns>
    <id>6354</id>
    <revision>
      <id>59359</id>
      <parentid>54502</parentid>
      <timestamp>2013-06-01T06:31:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list imbue]] to [[Template:cpp/regex/basic regex/dsc imbue]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/regex/basic_regex/imbue | set locale information}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc mark count</title>
    <ns>10</ns>
    <id>6351</id>
    <revision>
      <id>59363</id>
      <parentid>54505</parentid>
      <timestamp>2013-06-01T06:31:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list mark count]] to [[Template:cpp/regex/basic regex/dsc mark count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem fun | cpp/regex/basic_regex/mark_count | returns the number of marked sub-expressions within the regular expression }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc operator=</title>
    <ns>10</ns>
    <id>6349</id>
    <revision>
      <id>59367</id>
      <parentid>54506</parentid>
      <timestamp>2013-06-01T06:32:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list operator=]] to [[Template:cpp/regex/basic regex/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/regex/basic_regex/operator{{=}} | assigns the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc swap</title>
    <ns>10</ns>
    <id>6355</id>
    <revision>
      <id>59371</id>
      <parentid>54507</parentid>
      <timestamp>2013-06-01T06:32:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list swap]] to [[Template:cpp/regex/basic regex/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/regex/basic_regex/swap | swaps the contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/dsc swap2</title>
    <ns>10</ns>
    <id>6368</id>
    <revision>
      <id>59376</id>
      <parentid>54508</parentid>
      <timestamp>2013-06-01T06:32:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/basic regex/dcl list swap2]] to [[Template:cpp/regex/basic regex/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc tfun | cpp/regex/basic_regex/swap2 | title=std::swap{{dsc small|(std::basic_regex)}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/navbar</title>
    <ns>10</ns>
    <id>2282</id>
    <revision>
      <id>47776</id>
      <parentid>40012</parentid>
      <timestamp>2013-05-16T20:26:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

|heading3 = cpp/regex/basic_regex/navbar heading
|content3 = cpp/regex/basic_regex/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/navbar content</title>
    <ns>10</ns>
    <id>3102</id>
    <revision>
      <id>54511</id>
      <parentid>35893</parentid>
      <timestamp>2013-06-01T05:13:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="745">{{nv begin}}
{{nv h1 | Member Functions}}
{{nv mem ln | cpp/regex/basic_regex/basic_regex }}
{{nv mem ln | cpp/regex/basic_regex/~basic_regex }}
{{nv mem ln | cpp/regex/basic_regex/operator{{=}}}}
{{nv mem ln | cpp/regex/basic_regex/assign }}
{{nv h2 | Observers}}
{{nv mem ln | cpp/regex/basic_regex/mark_count }}
{{nv mem ln | cpp/regex/basic_regex/flags }}
{{nv h2 | Locale}}
{{nv mem ln | cpp/regex/basic_regex/getloc }}
{{nv mem ln | cpp/regex/basic_regex/imbue }}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/regex/basic_regex/swap }}
{{nv h2 | Constants}}
{{nv ln | cpp/regex/basic_regex/constants|basic_regex constants}}
{{nv h1 | Non-member Functions}}
{{nv ln | cpp/regex/basic_regex/swap2|swap{{dsc small|(std::basic_regex)}} }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/navbar heading</title>
    <ns>10</ns>
    <id>2287</id>
    <revision>
      <id>47763</id>
      <parentid>35894</parentid>
      <timestamp>2013-05-16T20:24:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="46">{{ltt|cpp/regex/basic_regex|std::basic_regex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/basic regex/title</title>
    <ns>10</ns>
    <id>3099</id>
    <revision>
      <id>22284</id>
      <parentid>11917</parentid>
      <timestamp>2012-04-19T16:00:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic regex/title]] to [[Template:cpp/regex/basic regex/title]]: fix location</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=basic_regex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc basic regex</title>
    <ns>10</ns>
    <id>8453</id>
    <revision>
      <id>59381</id>
      <parentid>54512</parentid>
      <timestamp>2013-06-01T06:32:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list basic regex]] to [[Template:cpp/regex/dsc basic regex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc tclass | cpp/regex/basic_regex | regular expression object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc error type</title>
    <ns>10</ns>
    <id>8443</id>
    <revision>
      <id>59385</id>
      <parentid>54515</parentid>
      <timestamp>2013-06-01T06:32:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list error type]] to [[Template:cpp/regex/dsc error type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc typedef | cpp/regex/error_type | describes different types of matching errors | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc match flag type</title>
    <ns>10</ns>
    <id>8442</id>
    <revision>
      <id>59388</id>
      <parentid>54516</parentid>
      <timestamp>2013-06-01T06:32:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list match flag type]] to [[Template:cpp/regex/dsc match flag type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc typedef | cpp/regex/match_flag_type | options specific to matching | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc match results</title>
    <ns>10</ns>
    <id>8454</id>
    <revision>
      <id>59393</id>
      <parentid>54519</parentid>
      <timestamp>2013-06-01T06:32:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list match results]] to [[Template:cpp/regex/dsc match results]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc tclass | cpp/regex/match_results | identifies one regular expression match, including all sub-expression matches | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc regex error</title>
    <ns>10</ns>
    <id>8502</id>
    <revision>
      <id>59400</id>
      <parentid>54523</parentid>
      <timestamp>2013-06-01T06:33:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list regex error]] to [[Template:cpp/regex/dsc regex error]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc class | cpp/regex/regex_error | reports errors generated by the regular expressions library | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc regex iterator</title>
    <ns>10</ns>
    <id>8500</id>
    <revision>
      <id>59404</id>
      <parentid>54524</parentid>
      <timestamp>2013-06-01T06:33:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list regex iterator]] to [[Template:cpp/regex/dsc regex iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc tclass | cpp/regex/regex_iterator | iterates through all regex matches within a character sequence | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc regex match</title>
    <ns>10</ns>
    <id>8497</id>
    <revision>
      <id>59408</id>
      <parentid>54525</parentid>
      <timestamp>2013-06-01T06:33:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list regex match]] to [[Template:cpp/regex/dsc regex match]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc tfun | cpp/regex/regex_match | attempts to match a regular expression to an entire character sequence | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc regex replace</title>
    <ns>10</ns>
    <id>8499</id>
    <revision>
      <id>59412</id>
      <parentid>54528</parentid>
      <timestamp>2013-06-01T06:33:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list regex replace]] to [[Template:cpp/regex/dsc regex replace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/regex/regex_replace | replaces occurrences of a regular expression with formatted replacement text | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc regex search</title>
    <ns>10</ns>
    <id>8498</id>
    <revision>
      <id>59416</id>
      <parentid>54533</parentid>
      <timestamp>2013-06-01T06:33:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list regex search]] to [[Template:cpp/regex/dsc regex search]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc tfun | cpp/regex/regex_search | attempts to match a regular expression to any part of a character sequence | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc regex token iterator</title>
    <ns>10</ns>
    <id>8501</id>
    <revision>
      <id>59421</id>
      <parentid>54556</parentid>
      <timestamp>2013-06-01T06:34:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list regex token iterator]] to [[Template:cpp/regex/dsc regex token iterator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="194">{{dsc tclass | cpp/regex/regex_token_iterator | iterates through the specified sub-expressions within all regex matches in a given string or through unmatched substrings | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc regex traits</title>
    <ns>10</ns>
    <id>8503</id>
    <revision>
      <id>59424</id>
      <parentid>54557</parentid>
      <timestamp>2013-06-01T06:34:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list regex traits]] to [[Template:cpp/regex/dsc regex traits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="143">{{dsc tclass | cpp/regex/regex_traits | provides metainformation about a character type, required by the regex library | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc sub match</title>
    <ns>10</ns>
    <id>8496</id>
    <revision>
      <id>59428</id>
      <parentid>54560</parentid>
      <timestamp>2013-06-01T06:34:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list sub match]] to [[Template:cpp/regex/dsc sub match]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc tclass | cpp/regex/sub_match | identifies the sequence of characters matched by a sub-expression | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/dsc syntax option type</title>
    <ns>10</ns>
    <id>8431</id>
    <revision>
      <id>59431</id>
      <parentid>54561</parentid>
      <timestamp>2013-06-01T06:34:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/dcl list syntax option type]] to [[Template:cpp/regex/dsc syntax option type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc typedef | cpp/regex/syntax_option_type | general options controlling regex behavior | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/isctype example</title>
    <ns>10</ns>
    <id>13120</id>
    <revision>
      <id>67009</id>
      <parentid>67006</parentid>
      <timestamp>2014-01-16T05:26:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+desc</comment>
      <text xml:space="preserve" bytes="1428">{{example|demonstraits a custom regex_traits implementation of lookup_classname/isctype
|code=#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;regex&gt;
#include &lt;cwctype&gt;

// This custom regex traits uses wctype/iswctype to implement lookup_classname/isctype
struct wctype_traits : std::regex_traits&lt;wchar_t&gt;
{
    using char_class_type = std::wctype_t;
    template&lt;class It&gt;
    char_class_type lookup_classname(It first, It last, bool=false) const {
        return std::wctype(std::string(first, last).c_str());
    }
    bool isctype(wchar_t c, char_class_type f) const {
        return std::iswctype(c, f);
    }
};

int main()
{
    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    std::wcout.sync_with_stdio(false);
    std::wcout.imbue(std::locale());

    std::wsmatch m;
    std::wstring in = L&quot;風の谷のナウシカ&quot;;
    // matches all characters (they are classified as alnum)
    std::regex_search(in, m, std::wregex(L&quot;([[:alnum:]]+)&quot;));
    std::wcout &lt;&lt; &quot;alnums: &quot; &lt;&lt; m[1] &lt;&lt; '\n'; // prints &quot;風の谷のナウシカ&quot;
    // matches only the kanji
    std::regex_search(in, m,
                      std::basic_regex&lt;wchar_t, wctype_traits&gt;(L&quot;([[:jkata:]]+)&quot;));
    std::wcout &lt;&lt; &quot;katakana: &quot; &lt;&lt; m[1] &lt;&lt; '\n'; // prints &quot;ナウシカ&quot;
}
|output=
alnums: 風の谷のナウシカ
katakana: ナウシカ
}}
&lt;!-- note: this does not compile with the current libc++: http://llvm.org/bugs/show_bug.cgi?id=18501 --&gt;</text>
      <sha1>5b6kw8y70opwnx0hmkz43t45nq5jdvz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc begin</title>
    <ns>10</ns>
    <id>3125</id>
    <revision>
      <id>59435</id>
      <parentid>54562</parentid>
      <timestamp>2013-06-01T06:34:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list begin]] to [[Template:cpp/regex/match results/dsc begin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun | cpp/regex/match_results/begin | title=begin&lt;br&gt;cbegin | returns iterator to the beginning of the list of sub-matches}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc constructor</title>
    <ns>10</ns>
    <id>4257</id>
    <revision>
      <id>59438</id>
      <parentid>54563</parentid>
      <timestamp>2013-06-01T06:35:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list constructor]] to [[Template:cpp/regex/match results/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem ctor | cpp/regex/match_results/match_results | constructs the object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc destructor</title>
    <ns>10</ns>
    <id>4258</id>
    <revision>
      <id>59442</id>
      <parentid>54566</parentid>
      <timestamp>2013-06-01T06:35:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list destructor]] to [[Template:cpp/regex/match results/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem dtor | cpp/regex/match_results/~match_results | destructs the object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc empty</title>
    <ns>10</ns>
    <id>4260</id>
    <revision>
      <id>59445</id>
      <parentid>54567</parentid>
      <timestamp>2013-06-01T06:35:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list empty]] to [[Template:cpp/regex/match results/dsc empty]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/regex/match_results/empty | checks whether the match was successful}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc end</title>
    <ns>10</ns>
    <id>3126</id>
    <revision>
      <id>59449</id>
      <parentid>54570</parentid>
      <timestamp>2013-06-01T06:35:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list end]] to [[Template:cpp/regex/match results/dsc end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/regex/match_results/end | title=end&lt;br&gt;cend | returns iterator to the end of the list of sub-matches}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc format</title>
    <ns>10</ns>
    <id>6387</id>
    <revision>
      <id>59453</id>
      <parentid>54573</parentid>
      <timestamp>2013-06-01T06:35:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list format]] to [[Template:cpp/regex/match results/dsc format]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc mem fun | cpp/regex/match_results/format | formats match results for output}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc get allocator</title>
    <ns>10</ns>
    <id>4259</id>
    <revision>
      <id>59456</id>
      <parentid>54578</parentid>
      <timestamp>2013-06-01T06:35:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list get allocator]] to [[Template:cpp/regex/match results/dsc get allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/regex/match_results/get_allocator | returns the associated allocator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc length</title>
    <ns>10</ns>
    <id>6381</id>
    <revision>
      <id>59460</id>
      <parentid>54581</parentid>
      <timestamp>2013-06-01T06:36:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list length]] to [[Template:cpp/regex/match results/dsc length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/regex/match_results/length | returns the length of the particular sub-match}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc max size</title>
    <ns>10</ns>
    <id>4262</id>
    <revision>
      <id>59464</id>
      <parentid>54582</parentid>
      <timestamp>2013-06-01T06:36:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list max size]] to [[Template:cpp/regex/match results/dsc max size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/regex/match_results/max_size | returns the maximum possible number of sub-matches}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc operator at</title>
    <ns>10</ns>
    <id>6384</id>
    <revision>
      <id>59472</id>
      <parentid>54584</parentid>
      <timestamp>2013-06-01T06:36:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list operator at]] to [[Template:cpp/regex/match results/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem fun | cpp/regex/match_results/operator_at | title=operator[] | returns specified sub-match}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc operator cmp</title>
    <ns>10</ns>
    <id>9057</id>
    <revision>
      <id>59476</id>
      <parentid>54587</parentid>
      <timestamp>2013-06-01T06:36:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list operator cmp]] to [[Template:cpp/regex/match results/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc tfun | cpp/regex/match_results/operator_cmp | title=operator==&lt;br&gt;operator!= | lexicographically compares the values in the two match result }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc operator=</title>
    <ns>10</ns>
    <id>6389</id>
    <revision>
      <id>59468</id>
      <parentid>54583</parentid>
      <timestamp>2013-06-01T06:36:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list operator=]] to [[Template:cpp/regex/match results/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/regex/match_results/operator{{=}} | assigns the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc position</title>
    <ns>10</ns>
    <id>6382</id>
    <revision>
      <id>59481</id>
      <parentid>54588</parentid>
      <timestamp>2013-06-01T06:36:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list position]] to [[Template:cpp/regex/match results/dsc position]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem fun | cpp/regex/match_results/position | returns the position of the first character of the particular sub-match}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc prefix</title>
    <ns>10</ns>
    <id>6385</id>
    <revision>
      <id>59486</id>
      <parentid>54589</parentid>
      <timestamp>2013-06-01T06:36:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list prefix]] to [[Template:cpp/regex/match results/dsc prefix]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="153">{{dsc mem fun | cpp/regex/match_results/prefix | returns sub-sequence between the beginning of the target sequence and the beginning of the full match.}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc size</title>
    <ns>10</ns>
    <id>4261</id>
    <revision>
      <id>59491</id>
      <parentid>54592</parentid>
      <timestamp>2013-06-01T06:36:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list size]] to [[Template:cpp/regex/match results/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/regex/match_results/size | returns the number of matches in a fully-established result state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc str</title>
    <ns>10</ns>
    <id>6383</id>
    <revision>
      <id>59495</id>
      <parentid>54593</parentid>
      <timestamp>2013-06-01T06:36:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list str]] to [[Template:cpp/regex/match results/dsc str]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/regex/match_results/str | returns the sequence of characters for the particular sub-match}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc suffix</title>
    <ns>10</ns>
    <id>6386</id>
    <revision>
      <id>59499</id>
      <parentid>54596</parentid>
      <timestamp>2013-06-01T06:36:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list suffix]] to [[Template:cpp/regex/match results/dsc suffix]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc mem fun | cpp/regex/match_results/suffix | returns sub-sequence between the end of the full match and the end of the target sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc swap</title>
    <ns>10</ns>
    <id>6388</id>
    <revision>
      <id>59503</id>
      <parentid>54597</parentid>
      <timestamp>2013-06-01T06:36:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list swap]] to [[Template:cpp/regex/match results/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc mem fun | cpp/regex/match_results/swap | swaps the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/dsc swap2</title>
    <ns>10</ns>
    <id>9058</id>
    <revision>
      <id>59507</id>
      <parentid>54598</parentid>
      <timestamp>2013-06-01T06:37:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/match results/dcl list swap2]] to [[Template:cpp/regex/match results/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="185">{{dsc tfun | cpp/regex/match_results/swap2 | title=std::swap{{dsc small|(std::match_results)}} | specializes the {{ltt|cpp/algorithm/swap|std::swap()}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/navbar</title>
    <ns>10</ns>
    <id>2283</id>
    <revision>
      <id>47775</id>
      <parentid>40013</parentid>
      <timestamp>2013-05-16T20:26:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

|heading3 = cpp/regex/match_results/navbar heading
|content3 = cpp/regex/match_results/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/navbar content</title>
    <ns>10</ns>
    <id>3215</id>
    <revision>
      <id>74270</id>
      <parentid>54599</parentid>
      <timestamp>2014-12-10T22:06:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>operator[]</comment>
      <text xml:space="preserve" bytes="1072">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/regex/match_results/match_results}}
{{nv mem ln | cpp/regex/match_results/~match_results}}
{{nv mem ln | cpp/regex/match_results/operator{{=}}}}
{{nv mem ln | cpp/regex/match_results/get_allocator}}
{{nv h2 | State}}
{{nv mem ln | cpp/regex/match_results/ready}}
{{nv h2 | Element access}}
{{nv mem ln | cpp/regex/match_results/size}}
{{nv mem ln | cpp/regex/match_results/max_size}}
{{nv mem ln | cpp/regex/match_results/empty}}
{{nv mem ln | cpp/regex/match_results/length}}
{{nv mem ln | cpp/regex/match_results/position}}
{{nv mem ln | cpp/regex/match_results/str}}
{{nv mem ln | cpp/regex/match_results/operator_at|operator[]}}
{{nv mem ln | cpp/regex/match_results/prefix}}
{{nv mem ln | cpp/regex/match_results/suffix}}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/regex/match_results/begin | begin | cbegin}}
{{nv mem ln | cpp/regex/match_results/end | end | cend}}
{{nv h2 | Format}}
{{nv mem ln | cpp/regex/match_results/format}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/regex/match_results/swap}}
{{nv end}}</text>
      <sha1>lujdwycpuyi2k5j1nfw1wiyyn9xkf7h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/navbar heading</title>
    <ns>10</ns>
    <id>2286</id>
    <revision>
      <id>47762</id>
      <parentid>35896</parentid>
      <timestamp>2013-05-16T20:23:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="50">{{ltt|cpp/regex/match_results|std::match_results}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/match results/title</title>
    <ns>10</ns>
    <id>3122</id>
    <revision>
      <id>11991</id>
      <timestamp>2011-10-21T10:42:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=match_results::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/navbar</title>
    <ns>10</ns>
    <id>1667</id>
    <revision>
      <id>40014</id>
      <parentid>35898</parentid>
      <timestamp>2012-09-28T20:19:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="150">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/navbar content</title>
    <ns>10</ns>
    <id>3101</id>
    <revision>
      <id>66900</id>
      <parentid>54602</parentid>
      <timestamp>2014-01-05T23:11:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+grammar link</comment>
      <text xml:space="preserve" bytes="1027">{{nv begin}}
{{nv h1 | Classes}}
{{nv ln | cpp/regex/basic_regex | notes={{mark c++11}}}}
{{nv ln | cpp/regex/sub_match | notes={{mark c++11}}}}
{{nv ln | cpp/regex/match_results | notes={{mark c++11}}}}
{{nv h1 | Algorithms}}
{{nv ln | cpp/regex/regex_match | notes={{mark c++11}}}}
{{nv ln | cpp/regex/regex_search | notes={{mark c++11}}}}
{{nv ln | cpp/regex/regex_replace | notes={{mark c++11}}}}
{{nv h1 | Iterators}}
{{nv ln | cpp/regex/regex_iterator | notes={{mark c++11}}}}
{{nv ln | cpp/regex/regex_token_iterator | notes={{mark c++11}}}}
{{nv h1 | Exceptions}}
{{nv ln | cpp/regex/regex_error | notes={{mark c++11}}}}
{{nv h1 | Traits}}
{{nv ln | cpp/regex/regex_traits | notes={{mark c++11}}}}
{{nv h1 | Constants}}
{{nv ln | cpp/regex/syntax_option_type | notes={{mark c++11}}}}
{{nv ln | cpp/regex/match_flag_type | notes={{mark c++11}}}}
{{nv ln | cpp/regex/error_type | notes={{mark c++11}}}}
{{nv h1 | Regex Grammar}}
{{nv ln | cpp/regex/ecmascript | Modified ECMAScript-262 | notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1>03lbz60sqov74s6lqiryus9i5owtsna</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/navbar heading</title>
    <ns>10</ns>
    <id>1668</id>
    <revision>
      <id>35899</id>
      <parentid>3336</parentid>
      <timestamp>2012-06-15T22:34:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/sidebar heading]] to [[Template:cpp/regex/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="43">[[cpp/regex | Regular expressions library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex error/dsc code</title>
    <ns>10</ns>
    <id>8446</id>
    <revision>
      <id>59511</id>
      <parentid>54605</parentid>
      <timestamp>2013-06-01T06:37:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex error/dcl list code]] to [[Template:cpp/regex/regex error/dsc code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/regex/regex_error/code | gets the {{lc|std::regex_constants::error_type}} for a {{tt|regex_error}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex error/dsc regex error</title>
    <ns>10</ns>
    <id>8445</id>
    <revision>
      <id>59515</id>
      <parentid>54606</parentid>
      <timestamp>2013-06-01T06:37:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex error/dcl list regex error]] to [[Template:cpp/regex/regex error/dsc regex error]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem ctor | cpp/regex/regex_error/regex_error | constructs a {{tt|regex_error}} object }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex error/navbar</title>
    <ns>10</ns>
    <id>3104</id>
    <revision>
      <id>40015</id>
      <parentid>35897</parentid>
      <timestamp>2012-09-28T20:19:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="249">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

|heading3 = cpp/regex/regex_error/navbar heading
|content3 = cpp/regex/regex_error/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex error/navbar content</title>
    <ns>10</ns>
    <id>3106</id>
    <revision>
      <id>54611</id>
      <parentid>34011</parentid>
      <timestamp>2013-06-01T05:14:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="147">{{nv begin}}
{{nv h1 | Member Functions}}
{{nv mem ln | cpp/regex/regex_error/regex_error }}
{{nv mem ln | cpp/regex/regex_error/code }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex error/navbar heading</title>
    <ns>10</ns>
    <id>3105</id>
    <revision>
      <id>48032</id>
      <parentid>35358</parentid>
      <timestamp>2013-05-18T17:58:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="46">{{ltt|cpp/regex/regex_error|std::regex_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex error/title</title>
    <ns>10</ns>
    <id>3108</id>
    <revision>
      <id>11933</id>
      <timestamp>2011-10-20T17:14:15Z</timestamp>
      <contributor>
        <username>Bregma</username>
        <id>225</id>
      </contributor>
      <comment>created template</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=regex_error::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/dsc constructor</title>
    <ns>10</ns>
    <id>10129</id>
    <revision>
      <id>59520</id>
      <parentid>54614</parentid>
      <timestamp>2013-06-01T06:37:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex iterator/dcl list constructor]] to [[Template:cpp/regex/regex iterator/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem ctor | cpp/regex/regex_iterator/regex_iterator | constructs a new {{tt|regex_iterator}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/dsc destructor</title>
    <ns>10</ns>
    <id>10130</id>
    <revision>
      <id>59525</id>
      <parentid>54615</parentid>
      <timestamp>2013-06-01T06:37:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex iterator/dcl list destructor]] to [[Template:cpp/regex/regex iterator/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem dtor | nolink=true| destructs a {{tt|regex_iterator}}, including the cached value | notes={{mark implicit}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/dsc operator arith</title>
    <ns>10</ns>
    <id>10134</id>
    <revision>
      <id>59537</id>
      <parentid>54620</parentid>
      <timestamp>2013-06-01T06:37:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex iterator/dcl list operator arith]] to [[Template:cpp/regex/regex iterator/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="153">{{dsc mem fun | cpp/regex/regex_iterator/operator_arith | title=operator++&lt;br/&gt;operator++{{dsc small|(int)}} | advances the iterator to the next match }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/dsc operator cmp</title>
    <ns>10</ns>
    <id>10132</id>
    <revision>
      <id>59541</id>
      <parentid>54623</parentid>
      <timestamp>2013-06-01T06:37:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex iterator/dcl list operator cmp]] to [[Template:cpp/regex/regex iterator/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/regex/regex_iterator/operator_cmp | title=operator==&lt;br&gt;operator!= | compares two {{tt|regex_iterator}}s }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/dsc operator*</title>
    <ns>10</ns>
    <id>10133</id>
    <revision>
      <id>59529</id>
      <parentid>54616</parentid>
      <timestamp>2013-06-01T06:37:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex iterator/dcl list operator*]] to [[Template:cpp/regex/regex iterator/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem fun | cpp/regex/regex_iterator/operator* | title=operator*&lt;br&gt;operator-&gt; | accesses the current match}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/dsc operator=</title>
    <ns>10</ns>
    <id>10131</id>
    <revision>
      <id>59533</id>
      <parentid>54617</parentid>
      <timestamp>2013-06-01T06:37:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex iterator/dcl list operator=]] to [[Template:cpp/regex/regex iterator/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/regex/regex_iterator/operator{{=}} | assigns contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/navbar</title>
    <ns>10</ns>
    <id>9810</id>
    <revision>
      <id>45737</id>
      <timestamp>2013-01-14T23:56:01Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="254">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

|heading3 = cpp/regex/regex_iterator/navbar heading
|content3 = cpp/regex/regex_iterator/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/navbar content</title>
    <ns>10</ns>
    <id>9812</id>
    <revision>
      <id>54624</id>
      <parentid>48363</parentid>
      <timestamp>2013-06-01T05:15:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="474">{{nv begin}}
{{nv h1 | Member Functions}}
{{nv mem ln | cpp/regex/regex_iterator/regex_iterator }}
{{nv mem ln | cpp/regex/regex_iterator/operator{{=}}}}
{{nv h2 | Comparisons}}
{{nv mem ln | cpp/regex/regex_iterator/operator_cmp|operator{{==}}|operator!{{=}} }}
{{nv h2 | Observers}}
{{nv mem ln | cpp/regex/regex_iterator/operator*|operator*|operator-&gt; }}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/regex/regex_iterator/operator_arith|operator++|operator++(int) }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/navbar heading</title>
    <ns>10</ns>
    <id>9811</id>
    <revision>
      <id>48086</id>
      <parentid>45738</parentid>
      <timestamp>2013-05-18T18:07:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <text xml:space="preserve" bytes="52">{{ltt|cpp/regex/regex_iterator|std::regex_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex iterator/title</title>
    <ns>10</ns>
    <id>8486</id>
    <revision>
      <id>31270</id>
      <timestamp>2012-05-17T03:05:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=regex_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/dsc constructor</title>
    <ns>10</ns>
    <id>9760</id>
    <revision>
      <id>61461</id>
      <parentid>59545</parentid>
      <timestamp>2013-06-06T01:09:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem ctor | cpp/regex/regex_token_iterator/regex_token_iterator | constructs a new {{tt|regex_token_iterator}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/dsc destructor</title>
    <ns>10</ns>
    <id>9765</id>
    <revision>
      <id>61462</id>
      <parentid>59549</parentid>
      <timestamp>2013-06-06T01:09:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem dtor | nolink=true| destructs a {{tt|regex_token_iterator}}, including the cached value | notes={{mark implicit}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/dsc operator arith</title>
    <ns>10</ns>
    <id>9764</id>
    <revision>
      <id>59563</id>
      <parentid>54635</parentid>
      <timestamp>2013-06-01T06:38:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex token iterator/dcl list operator arith]] to [[Template:cpp/regex/regex token iterator/dsc operator arith]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem fun | cpp/regex/regex_token_iterator/operator_arith | title=operator++&lt;br&gt;operator++{{dsc small|(int)}} | advances the iterator to the next submatch }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/dsc operator cmp</title>
    <ns>10</ns>
    <id>9762</id>
    <revision>
      <id>61464</id>
      <parentid>59567</parentid>
      <timestamp>2013-06-06T01:09:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/regex/regex_token_iterator/operator_cmp | title=operator==&lt;br&gt;operator!= | compares two {{tt|regex_token_iterator}}s }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/dsc operator*</title>
    <ns>10</ns>
    <id>9763</id>
    <revision>
      <id>59553</id>
      <parentid>54631</parentid>
      <timestamp>2013-06-01T06:37:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/regex token iterator/dcl list operator*]] to [[Template:cpp/regex/regex token iterator/dsc operator*]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem fun | cpp/regex/regex_token_iterator/operator* | title=operator*&lt;br&gt;operator-&gt; | accesses current submatch}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/dsc operator=</title>
    <ns>10</ns>
    <id>9761</id>
    <revision>
      <id>61463</id>
      <parentid>59558</parentid>
      <timestamp>2013-06-06T01:09:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ce</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/regex/regex_token_iterator/operator{{=}} | assigns contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/navbar</title>
    <ns>10</ns>
    <id>9815</id>
    <revision>
      <id>45745</id>
      <timestamp>2013-01-15T00:39:25Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="266">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

|heading3 = cpp/regex/regex_token_iterator/navbar heading
|content3 = cpp/regex/regex_token_iterator/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/navbar content</title>
    <ns>10</ns>
    <id>9817</id>
    <revision>
      <id>61392</id>
      <parentid>54639</parentid>
      <timestamp>2013-06-05T22:47:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="510">{{nv begin}}
{{nv h1 | Member Functions}}
{{nv mem ln | cpp/regex/regex_token_iterator/regex_token_iterator }}
{{nv mem ln | cpp/regex/regex_token_iterator/operator{{=}}}}
{{nv h2 | Comparisons}}
{{nv mem ln | cpp/regex/regex_token_iterator/operator_cmp|operator{{==}}|operator!{{=}} }}
{{nv h2 | Observers}}
{{nv mem ln | cpp/regex/regex_token_iterator/operator*|operator*|operator-&gt; }}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/regex/regex_token_iterator/operator_arith|operator++|operator++(int) }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/navbar heading</title>
    <ns>10</ns>
    <id>9816</id>
    <revision>
      <id>48085</id>
      <parentid>45748</parentid>
      <timestamp>2013-05-18T18:07:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="64">{{ltt|cpp/regex/regex_token_iterator|std::regex_token_iterator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex token iterator/title</title>
    <ns>10</ns>
    <id>8487</id>
    <revision>
      <id>31271</id>
      <timestamp>2012-05-17T03:05:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="117">&lt;onlyinclude&gt;{{cpp/title | n=regex_token_iterator::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc constructor</title>
    <ns>10</ns>
    <id>12611</id>
    <revision>
      <id>61315</id>
      <timestamp>2013-06-05T21:31:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem ctor | cpp/regex/regex_traits/regex_traits | constructs the regex_traits object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc getloc</title>
    <ns>10</ns>
    <id>12622</id>
    <revision>
      <id>61326</id>
      <timestamp>2013-06-05T21:32:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="65">{{dsc mem fun | cpp/regex/regex_traits/getloc | gets the locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc imbue</title>
    <ns>10</ns>
    <id>12621</id>
    <revision>
      <id>61325</id>
      <timestamp>2013-06-05T21:32:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="64">{{dsc mem fun | cpp/regex/regex_traits/imbue | sets the locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc isctype</title>
    <ns>10</ns>
    <id>12619</id>
    <revision>
      <id>61323</id>
      <timestamp>2013-06-05T21:32:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/regex/regex_traits/isctype |indicates membership in a localized character class}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc length</title>
    <ns>10</ns>
    <id>12612</id>
    <revision>
      <id>61316</id>
      <timestamp>2013-06-05T21:31:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem sfun  | cpp/regex/regex_traits/length | calculates the length of a null-terminated character string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc lookup classname</title>
    <ns>10</ns>
    <id>12618</id>
    <revision>
      <id>61322</id>
      <timestamp>2013-06-05T21:32:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/regex/regex_traits/lookup_classname | gets a character class by name}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc lookup collatename</title>
    <ns>10</ns>
    <id>12617</id>
    <revision>
      <id>61321</id>
      <timestamp>2013-06-05T21:32:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/regex/regex_traits/lookup_collatename | gets a collation element by name}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc transform</title>
    <ns>10</ns>
    <id>12615</id>
    <revision>
      <id>61319</id>
      <timestamp>2013-06-05T21:31:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">{{dsc mem fun | cpp/regex/regex_traits/transform | determines the sort key for the given string, used to provide collation order}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc transform primary</title>
    <ns>10</ns>
    <id>12616</id>
    <revision>
      <id>61320</id>
      <timestamp>2013-06-05T21:32:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">{{dsc mem fun | cpp/regex/regex_traits/transform_primary | determines the primary sort key for the character sequence, used to determine equivalence class}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc translate</title>
    <ns>10</ns>
    <id>12613</id>
    <revision>
      <id>61317</id>
      <timestamp>2013-06-05T21:31:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/regex/regex_traits/translate | determines the equivalence key for a character }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc translate nocase</title>
    <ns>10</ns>
    <id>12614</id>
    <revision>
      <id>61318</id>
      <timestamp>2013-06-05T21:31:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/regex/regex_traits/translate_nocase | determines the case-insensitive equivalence key for a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/dsc value</title>
    <ns>10</ns>
    <id>12620</id>
    <revision>
      <id>61324</id>
      <timestamp>2013-06-05T21:32:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/regex/regex_traits/value | translates the character representing a numeric digit into an integral value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/navbar</title>
    <ns>10</ns>
    <id>8853</id>
    <revision>
      <id>40016</id>
      <parentid>37291</parentid>
      <timestamp>2012-09-28T20:19:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="250">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

|heading3 = cpp/regex/regex_traits/navbar heading
|content3 = cpp/regex/regex_traits/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/navbar content</title>
    <ns>10</ns>
    <id>8855</id>
    <revision>
      <id>54640</id>
      <parentid>37293</parentid>
      <timestamp>2013-06-01T05:15:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="670">{{nv begin}}
{{nv h1 | Member Functions}}
{{nv mem ln | cpp/regex/regex_traits/regex_traits }}
{{nv mem ln | cpp/regex/regex_traits/length }}
{{nv mem ln | cpp/regex/regex_traits/translate }}
{{nv mem ln | cpp/regex/regex_traits/translate_nocase }}
{{nv mem ln | cpp/regex/regex_traits/transform }}
{{nv mem ln | cpp/regex/regex_traits/transform_primary }}
{{nv mem ln | cpp/regex/regex_traits/lookup_collatename }}
{{nv mem ln | cpp/regex/regex_traits/lookup_classname }}
{{nv mem ln | cpp/regex/regex_traits/isctype }}
{{nv mem ln | cpp/regex/regex_traits/value }}
{{nv mem ln | cpp/regex/regex_traits/imbue }}
{{nv mem ln | cpp/regex/regex_traits/getloc }}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/navbar heading</title>
    <ns>10</ns>
    <id>8854</id>
    <revision>
      <id>48106</id>
      <parentid>37292</parentid>
      <timestamp>2013-05-18T18:13:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="48">{{ltt|cpp/regex/regex_traits|std::regex_traits}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/regex traits/title</title>
    <ns>10</ns>
    <id>8857</id>
    <revision>
      <id>37296</id>
      <timestamp>2012-07-05T02:56:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=regex_traits::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/dsc compare</title>
    <ns>10</ns>
    <id>6393</id>
    <revision>
      <id>59571</id>
      <parentid>54641</parentid>
      <timestamp>2013-06-01T06:38:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/sub match/dcl list compare]] to [[Template:cpp/regex/sub match/dsc compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/regex/sub_match/compare | compares matched subsequence (if any)}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/dsc constructor</title>
    <ns>10</ns>
    <id>6390</id>
    <revision>
      <id>59576</id>
      <parentid>54642</parentid>
      <timestamp>2013-06-01T06:38:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/sub match/dcl list constructor]] to [[Template:cpp/regex/sub match/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem ctor | cpp/regex/sub_match/sub_match | constructs the match object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/dsc length</title>
    <ns>10</ns>
    <id>6391</id>
    <revision>
      <id>59580</id>
      <parentid>54645</parentid>
      <timestamp>2013-06-01T06:38:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/sub match/dcl list length]] to [[Template:cpp/regex/sub match/dsc length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/regex/sub_match/length | returns the length of the match (if any)}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/dsc operator cmp</title>
    <ns>10</ns>
    <id>3128</id>
    <revision>
      <id>83175</id>
      <parentid>61429</parentid>
      <timestamp>2016-01-23T12:57:24Z</timestamp>
      <contributor>
        <ip>183.206.161.6</ip>
      </contributor>
      <text xml:space="preserve" bytes="175">{{dsc tfun | cpp/regex/sub_match/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares two {{tt|sub_match}} objects }}</text>
      <sha1>ru336ae4avpjig8l6apw3lyl44lippg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/dsc str</title>
    <ns>10</ns>
    <id>6392</id>
    <revision>
      <id>59584</id>
      <parentid>54648</parentid>
      <timestamp>2013-06-01T06:38:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/regex/sub match/dcl list str]] to [[Template:cpp/regex/sub match/dsc str]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem fun | cpp/regex/sub_match/str | title=str&lt;br&gt;operator string_type | converts to the underlying string type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/navbar</title>
    <ns>10</ns>
    <id>2284</id>
    <revision>
      <id>47774</id>
      <parentid>40017</parentid>
      <timestamp>2013-05-16T20:26:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/regex/navbar heading
|content2 = cpp/regex/navbar content

|heading3 = cpp/regex/sub_match/navbar heading
|content3 = cpp/regex/sub_match/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/navbar content</title>
    <ns>10</ns>
    <id>3129</id>
    <revision>
      <id>74722</id>
      <parentid>54649</parentid>
      <timestamp>2014-12-24T13:11:38Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>`std::sub_match` is entirely new in C++11. It's not conventional to make a mark for every member</comment>
      <text xml:space="preserve" bytes="484">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/regex/sub_match/sub_match}}
{{nv mem ln | cpp/regex/sub_match/length}}
{{nv mem ln | cpp/regex/sub_match/str | str | operator string_type}}
{{nv mem ln | cpp/regex/sub_match/compare}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/regex/sub_match/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt;&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}}}}
{{nv ln | cpp/regex/sub_match/operator_ltlt | operator&lt;&lt;}}
{{nv end}}</text>
      <sha1>digqa4yqvr0ndc6ehhcb3kuwghm92qj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/navbar heading</title>
    <ns>10</ns>
    <id>2285</id>
    <revision>
      <id>47761</id>
      <parentid>35902</parentid>
      <timestamp>2013-05-16T20:23:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="42">{{ltt|cpp/regex/sub_match|std::sub_match}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/sub match/title</title>
    <ns>10</ns>
    <id>3131</id>
    <revision>
      <id>12075</id>
      <timestamp>2011-10-21T14:29:56Z</timestamp>
      <contributor>
        <username>Bregma</username>
        <id>225</id>
      </contributor>
      <comment>Created template.</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=sub_match::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/regex/syntax option type consts</title>
    <ns>10</ns>
    <id>8450</id>
    <revision>
      <id>88362</id>
      <parentid>88361</parentid>
      <timestamp>2016-11-17T04:59:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>reorder modifiers before grammars</comment>
      <text xml:space="preserve" bytes="2528">{{dsc begin}}
{{dsc hitem | Value | Effect(s)}}
{{dsc | {{tt|icase}} |  Character matching should be performed without regard to case. }}
{{dsc | {{tt|nosubs}} |  When performing matches, all marked sub-expressions {{ttb|({{spar|expr}})}} are treated as non-marking sub-expressions {{ttb|(?:{{spar|expr}})}}. No matches are stored in the supplied {{lc|std::regex_match}} structure and {{tt|mark_count()}} is zero}}
{{dsc | {{tt|optimize}} |  Instructs the regular expression engine to make matching faster, with the potential cost of making construction slower.  For example, this might mean converting a non-deterministic FSA to a deterministic FSA. }}
{{dsc | {{tt|collate}} |  Character ranges of the form ''&quot;[a-b]&quot;'' will be locale sensitive. }}
{{dsc | {{tt|multiline}} {{mark c++17}} | Specifies that {{tt|^}} shall match the beginning of a line and {{tt|$}} shall match the end of a line, if the ECMAScript engine is selected. }}
{{dsc | {{tt|ECMAScript}} |  Use the [[cpp/regex/ecmascript|Modified ECMAScript regular expression grammar]]}} 
{{dsc | {{tt|basic}} | Use the basic POSIX regular expression grammar ([http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03 grammar documentation]). }}
{{dsc | {{tt|extended}} | Use the extended POSIX regular expression grammar ([http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04 grammar documentation]). }}
{{dsc | {{tt|awk}} | Use the regular expression grammar used by the ''awk'' utility in POSIX ([http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html#tag_20_06_13_04 grammar documentation]) }}
{{dsc | {{tt|grep}} |  Use the regular expression grammar used by the ''grep'' utility in POSIX. This is effectively the same as the {{tt|basic}} option with the addition of newline '\n' as an alternation separator.  }}
{{dsc | {{tt|egrep}} | Use the regular expression grammar used by the ''grep'' utility, with the ''-E'' option, in POSIX.  This is effectively the same as the {{tt|extended}} option with the addition of newline '\n' as an alternation separator in addtion to '&lt;nowiki&gt;|&lt;/nowiki&gt;'.  }}
{{dsc end}}

At most one grammar option must be chosen out of {{tt|ECMAScript}}, {{tt|basic}}, {{tt|extended}}, {{tt|awk}}, {{tt|grep}}, {{tt|egrep}}. If no grammar is chosen, {{tt|ECMAScript}} is assumed to be selected. The other options serve as modifiers, such that {{c|std::regex(&quot;meow&quot;, std::regex::icase)}} is equivalent to {{c|std::regex(&quot;meow&quot;, std::regex::ECMAScript{{!}}std::regex::icase)}}</text>
      <sha1>mk8f4k6d0euw4izizjzxtqujg84oogy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/std</title>
    <ns>10</ns>
    <id>12776</id>
    <revision>
      <id>92006</id>
      <parentid>78656</parentid>
      <timestamp>2017-04-01T20:41:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="887">&lt;onlyinclude&gt;{{#switch: {{{1|}}}
| shared_timed_mutex = {{cpp/std max|c++14|{{{2|none}}}}}
| shared_mutex = {{cpp/std max|c++17|{{{2|none}}}}}
| mutex | recursive_mutex | timed_mutex | recursive_timed_mutex = {{cpp/std max|c++11|{{{2|none}}}}}
| array | forward_list = {{cpp/std max|c++11|{{{2|none}}}}}
| unordered_set | unordered_map | unordered_multiset | unordered_multimap ={{cpp/std max|c++11|{{{2|none}}}}}
| vector | list | deque | set | multiset | map | multimap ={{cpp/std max|c++98|{{{2|none}}}}}
| queue | stack | priority_queue ={{cpp/std max|c++98|{{{2|none}}}}}
| reverse_iterator | back_insert_iterator | front_insert_iterator | insert_iterator={{cpp/std max|c++98|{{{2|none}}}}}
| move_iterator={{cpp/std max|c++11|{{{2|none}}}}}
| ostream_iterator | ostreambuf_iterator | istream_iterator | istreambuf_iterator={{cpp/std max|c++98|{{{2|none}}}}}
| none
}}&lt;/onlyinclude&gt;</text>
      <sha1>ms9925f0cbhplfw43dcp2it609xbyi9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/std max</title>
    <ns>10</ns>
    <id>12921</id>
    <revision>
      <id>78687</id>
      <parentid>78657</parentid>
      <timestamp>2015-06-03T05:46:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="772">&lt;onlyinclude&gt;{{#switch:{{trim|{{{1|none}}}}}{{trim|{{#if:{{{2|}}}|{{{2}}}|none}}}}
| c++98c++98=c++98
| c++03c++98=c++03
| c++11c++98=c++11
| c++14c++98=c++14
| c++17c++98=c++17
| nonec++98=none
| c++98c++03=c++03
| c++03c++03=c++03
| c++11c++03=c++11
| c++14c++03=c++14
| c++17c++03=c++17
| nonec++03=none
| c++98c++11=c++11
| c++03c++11=c++11
| c++11c++11=c++11
| c++14c++11=c++14
| c++17c++11=c++17
| nonec++11=none
| c++98c++14=c++14
| c++03c++14=c++14
| c++11c++14=c++14
| c++14c++14=c++14
| c++17c++14=c++17
| nonec++14=none
| c++98c++17=c++17
| c++03c++17=c++17
| c++11c++17=c++17
| c++14c++17=c++17
| c++17c++17=c++17
| nonec++17=none
| c++98none=c++98
| c++03none=c++03
| c++11none=c++11
| c++14none=c++14
| c++17none=c++17
| nonenone=none
| none
}}&lt;/onlyinclude&gt;</text>
      <sha1>7ymq6ze80c79o000l1i64b18kgi6okr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc at</title>
    <ns>10</ns>
    <id>15011</id>
    <revision>
      <id>84415</id>
      <timestamp>2016-03-18T14:10:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/string/basic string view/at | access specified character with bounds checking }}</text>
      <sha1>9kho61k5yfv5h766tc75m3h23tkl5b0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc back</title>
    <ns>10</ns>
    <id>15013</id>
    <revision>
      <id>84417</id>
      <timestamp>2016-03-18T14:11:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/string/basic string view/back | accesses the last character }}</text>
      <sha1>73rr8wuknudjk23l0iqlah2m9lgj7pi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc begin</title>
    <ns>10</ns>
    <id>15006</id>
    <revision>
      <id>84410</id>
      <timestamp>2016-03-18T14:08:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem fun | cpp/string/basic string view/begin | title=begin&lt;br&gt;cbegin | returns an iterator to the beginning }}</text>
      <sha1>tkpco8vdges1pvq8b6x7ursjgasvfdq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc compare</title>
    <ns>10</ns>
    <id>15024</id>
    <revision>
      <id>84428</id>
      <timestamp>2016-03-18T14:16:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem fun | cpp/string/basic string view/compare | compares two views }}</text>
      <sha1>1kuu97zsibf67avnylwkxqufmxrtxbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc constructor</title>
    <ns>10</ns>
    <id>15004</id>
    <revision>
      <id>84408</id>
      <timestamp>2016-03-18T14:08:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem ctor | cpp/string/basic_string_view/basic_string_view | constructs a {{tt| basic_string_view}} }}</text>
      <sha1>5vxdqy16blg3fxrv30dzlh5zh5nloo9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc copy</title>
    <ns>10</ns>
    <id>15022</id>
    <revision>
      <id>84426</id>
      <timestamp>2016-03-18T14:15:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/string/basic string view/copy | copies characters }}</text>
      <sha1>s0z63i00g29xdz7bj2rgfrid8s4qozz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc data</title>
    <ns>10</ns>
    <id>15015</id>
    <revision>
      <id>84419</id>
      <timestamp>2016-03-18T14:12:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/string/basic string view/data | returns a pointer to the first character of a view }}</text>
      <sha1>3uqaf74rj0jfbgnccdgsjj3qv0s447t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc empty</title>
    <ns>10</ns>
    <id>15014</id>
    <revision>
      <id>84418</id>
      <timestamp>2016-03-18T14:11:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/string/basic string view/empty | checks whether the view is empty  }}</text>
      <sha1>fk296t2rdy6pppz25l4sptejal5f5q2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc end</title>
    <ns>10</ns>
    <id>15007</id>
    <revision>
      <id>84411</id>
      <timestamp>2016-03-18T14:09:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">{{dsc mem fun | cpp/string/basic string view/end | title=end&lt;br&gt;cend | returns an iterator to the end }}</text>
      <sha1>4pkmnk1yg2peigvc8ytyh51zvjdelg8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc find</title>
    <ns>10</ns>
    <id>15025</id>
    <revision>
      <id>84429</id>
      <timestamp>2016-03-18T14:17:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/string/basic string view/find | find characters in the view }}</text>
      <sha1>gjb7twytzqbl8rpnldhw8tfkjycvgkl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc find first not of</title>
    <ns>10</ns>
    <id>15029</id>
    <revision>
      <id>84433</id>
      <timestamp>2016-03-18T14:18:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/string/basic_string_view/find_first_not_of | find first absence of characters }}</text>
      <sha1>hkvtytl02n0q39awcqvwjnjkttv3kg5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc find first of</title>
    <ns>10</ns>
    <id>15027</id>
    <revision>
      <id>84431</id>
      <timestamp>2016-03-18T14:18:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/string/basic_string_view/find_first_of | find first occurrence of characters }}</text>
      <sha1>oj6nx34sab741l516vdacsngcmne6qa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc find last not of</title>
    <ns>10</ns>
    <id>15030</id>
    <revision>
      <id>84434</id>
      <timestamp>2016-03-18T14:19:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun | cpp/string/basic_string_view/find_last_not_of | find last absence of characters }}</text>
      <sha1>qgy7x9yribh98evza5rjk1bwow5p6wj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc find last of</title>
    <ns>10</ns>
    <id>15028</id>
    <revision>
      <id>84432</id>
      <timestamp>2016-03-18T14:18:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/string/basic_string_view/find_last_of | find last occurrence of characters }}</text>
      <sha1>e87nvpcnbm3yqx0ewvlrjz0wdmifoc1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc front</title>
    <ns>10</ns>
    <id>15012</id>
    <revision>
      <id>84416</id>
      <timestamp>2016-03-18T14:10:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/string/basic string view/front | accesses the first character }}</text>
      <sha1>4c87nancid1y4acjhoiuxtx4deyc606</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc hash</title>
    <ns>10</ns>
    <id>15034</id>
    <revision>
      <id>87022</id>
      <parentid>84438</parentid>
      <timestamp>2016-07-20T22:01:21Z</timestamp>
      <contributor>
        <username>ElementW</username>
        <id>5585</id>
      </contributor>
      <comment>Add missing C++17 mark</comment>
      <text xml:space="preserve" bytes="300">{{dsc ptclass | cpp/string/basic_string_view/hash | title=std::hash{{dsc small|&lt;std::string_view&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::wstring_view&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::u16string_view&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::u32string_view&gt;}} | hash support for string views  | notes={{mark c++17}} }}</text>
      <sha1>0v205jricbvcvtk0nbb7s4c5a4ff7yt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc max size</title>
    <ns>10</ns>
    <id>15016</id>
    <revision>
      <id>84420</id>
      <timestamp>2016-03-18T14:12:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/string/basic string view/max_size | returns the maximum number of characters }}</text>
      <sha1>sd7dn6ktsphgz5wbrdz4dpnjsd394xt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc npos</title>
    <ns>10</ns>
    <id>15031</id>
    <revision>
      <id>84435</id>
      <timestamp>2016-03-18T14:19:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem sconst | cpp/string/basic string view/npos | special value. The exact meaning depends on the context}}</text>
      <sha1>hcbw1wgsolc96ehsypknz4ddsc82jw9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc operator at</title>
    <ns>10</ns>
    <id>15010</id>
    <revision>
      <id>90082</id>
      <parentid>90081</parentid>
      <timestamp>2017-02-06T06:19:17Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <comment>Undo revision 90081 by [[Special:Contributions/Fruderica|Fruderica]] ([[User talk:Fruderica|talk]])</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/string/basic string view/operator_at|title=operator[] | access specified character }}</text>
      <sha1>7jwmbwxx9fpp5erjyt98ngn4rz7i3h6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc operator cmp</title>
    <ns>10</ns>
    <id>15032</id>
    <revision>
      <id>84436</id>
      <timestamp>2016-03-18T14:20:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="190">{{dsc tfun | cpp/string/basic string view/operator cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&gt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;= | lexicographically compares two string views }}</text>
      <sha1>095k1xyueamdrhwz7z3f5jx1oegmzjj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc operator ltlt</title>
    <ns>10</ns>
    <id>15033</id>
    <revision>
      <id>84437</id>
      <timestamp>2016-03-18T14:20:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc tfun | cpp/string/basic_string_view/operator_ltlt | title=operator&lt;&lt; | performs stream output on string views }}</text>
      <sha1>c9tlqdht4r3xxhl2zr2zb0k82dm7se2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc operator&quot;&quot;sv</title>
    <ns>10</ns>
    <id>15723</id>
    <revision>
      <id>88207</id>
      <parentid>88204</parentid>
      <timestamp>2016-11-14T16:54:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo in file name</comment>
      <text xml:space="preserve" bytes="131">{{dsc fun | cpp/string/basic_string_view/operator&quot;&quot;sv | Creates a string view of a character array literal | notes={{mark c++17}}}}</text>
      <sha1>3yg2d0yeb2x3brs0eq7jhktd8fcnbeu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc operator=</title>
    <ns>10</ns>
    <id>15005</id>
    <revision>
      <id>84409</id>
      <timestamp>2016-03-18T14:08:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/string/basic_string_view/operator{{=}} | assigns a view }}</text>
      <sha1>5ge765t9kv1f5hqedtoniqm6swi00fs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc rbegin</title>
    <ns>10</ns>
    <id>15008</id>
    <revision>
      <id>84412</id>
      <timestamp>2016-03-18T14:09:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/string/basic string view/rbegin | title=rbegin&lt;br&gt;crbegin | returns a reverse iterator to the beginning }}</text>
      <sha1>pj1lb26s9b1x9tx7xkl04bi0kf2r3gr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc remove prefix</title>
    <ns>10</ns>
    <id>15018</id>
    <revision>
      <id>85728</id>
      <parentid>84422</parentid>
      <timestamp>2016-05-09T06:50:01Z</timestamp>
      <contributor>
        <ip>117.136.45.155</ip>
      </contributor>
      <text xml:space="preserve" bytes="108">{{dsc mem fun | cpp/string/basic string view/remove_prefix | shrinks the view by moving its start forward }}</text>
      <sha1>atdifqrmb78mw66pzyxlyo5nby1uas4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc remove suffix</title>
    <ns>10</ns>
    <id>15019</id>
    <revision>
      <id>85729</id>
      <parentid>84423</parentid>
      <timestamp>2016-05-09T06:50:41Z</timestamp>
      <contributor>
        <ip>117.136.45.155</ip>
      </contributor>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/string/basic string view/remove_suffix | shrinks the view by moving its end backward }}</text>
      <sha1>kftlswdi8dl5l2exyoj8mymg7bzt5yr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc rend</title>
    <ns>10</ns>
    <id>15009</id>
    <revision>
      <id>84413</id>
      <timestamp>2016-03-18T14:10:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/string/basic string view/rend | title=rend&lt;br&gt;crend | returns a reverse iterator to the end }}</text>
      <sha1>ot34ahw5mmm5ut0h0wepuiwzyi3zp4a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc rfind</title>
    <ns>10</ns>
    <id>15026</id>
    <revision>
      <id>84430</id>
      <timestamp>2016-03-18T14:17:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/string/basic_string_view/rfind | find the last occurrence of a substring }}</text>
      <sha1>hd9cys73aat18etvk05hbzwiub36f5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc size</title>
    <ns>10</ns>
    <id>15017</id>
    <revision>
      <id>84421</id>
      <timestamp>2016-03-18T14:13:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/string/basic string view/size | title=size&lt;br/&gt;length | returns the number of characters }}</text>
      <sha1>jvkkxzkolfzkg8okjkp64k8feug7hgq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc substr</title>
    <ns>10</ns>
    <id>15023</id>
    <revision>
      <id>84427</id>
      <timestamp>2016-03-18T14:16:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/string/basic_string_view/substr | returns a substring}}</text>
      <sha1>n3k6053buwqso7rqhwp5m17mv06um6w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/dsc swap</title>
    <ns>10</ns>
    <id>15020</id>
    <revision>
      <id>84424</id>
      <timestamp>2016-03-18T14:14:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/string/basic string view/swap | swaps the contents }}</text>
      <sha1>9b4jvozyyxr0p1h9bphi5z8ycvh5l8h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/navbar</title>
    <ns>10</ns>
    <id>15001</id>
    <revision>
      <id>84405</id>
      <timestamp>2016-03-18T14:05:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="261">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/string/navbar heading
|content2 = cpp/string/navbar content
|heading4 = cpp/string/basic_string_view/navbar heading
|content4 = cpp/string/basic_string_view/navbar content
}}</text>
      <sha1>oj0303zk0351tzyf5cmd593m2ymxiwi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/navbar content</title>
    <ns>10</ns>
    <id>15003</id>
    <revision>
      <id>88203</id>
      <parentid>86762</parentid>
      <timestamp>2016-11-14T16:47:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0403r1 literals</comment>
      <text xml:space="preserve" bytes="2333">{{nv begin}}
{{nv col begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/string/basic_string_view/basic_string_view}}
{{nv mem ln | cpp/string/basic_string_view/operator{{=}}}}

{{nv h2 | Iterators}}
{{nv mem ln | cpp/string/basic_string_view/begin | begin | cbegin}}
{{nv mem ln | cpp/string/basic_string_view/end | end | cend }}
{{nv mem ln | cpp/string/basic_string_view/rbegin | rbegin | crbegin }}
{{nv mem ln | cpp/string/basic_string_view/rend | rend | crend }}

{{nv h2 | Element access}}
{{nv mem ln | cpp/string/basic_string_view/at}}
{{nv mem ln | cpp/string/basic_string_view/operator_at | operator[]}}
{{nv mem ln | cpp/string/basic_string_view/front}}
{{nv mem ln | cpp/string/basic_string_view/back}}
{{nv mem ln | cpp/string/basic_string_view/data}}

{{nv h2 | Capacity}}
{{nv mem ln | cpp/string/basic_string_view/size | size | length}}
{{nv mem ln | cpp/string/basic_string_view/max_size}}
{{nv mem ln | cpp/string/basic_string_view/empty}}

{{nv h2 | Modifers}}
{{nv mem ln | cpp/string/basic_string_view/remove_prefix}}
{{nv mem ln | cpp/string/basic_string_view/remove_suffix}}
{{nv mem ln | cpp/string/basic_string_view/swap}}

{{nv col next}}

{{nv h2 | Operations}}
{{nv mem ln | cpp/string/basic_string_view/copy}}
{{nv mem ln | cpp/string/basic_string_view/substr}}
{{nv mem ln | cpp/string/basic_string_view/compare}}
{{nv mem ln | cpp/string/basic_string_view/find}}
{{nv mem ln | cpp/string/basic_string_view/rfind}}
{{nv mem ln | cpp/string/basic_string_view/find_first_of}}
{{nv mem ln | cpp/string/basic_string_view/find_last_of}}
{{nv mem ln | cpp/string/basic_string_view/find_first_not_of}}
{{nv mem ln | cpp/string/basic_string_view/find_last_not_of}}

{{nv h1 | Constants}}
{{nv mem ln | cpp/string/basic_string_view/npos}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/string/basic_string_view/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&gt; | operator&lt;{{=}} | operator&gt;{{=}} }}
{{nv ln | cpp/string/basic_string_view/operator_ltlt | operator&lt;&lt;}}
{{nv ln | cpp/string/basic_string_view/operator&quot;&quot;sv }}

{{nv h1 | Helper classes}}
{{nv ln | cpp/string/basic_string_view/hash | hash{{dsc small|&lt;std::string_view&gt;}} |  hash{{dsc small|&lt;std::wstring_view&gt;}} | hash{{dsc small|&lt;std::u16string_view&gt;}} | hash{{dsc small|&lt;std::u32string_view&gt;}} }}
{{nv col end}}
{{nv end}}</text>
      <sha1>5oku6tr04mr65pbyp239k31e8lpbwek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/navbar heading</title>
    <ns>10</ns>
    <id>15002</id>
    <revision>
      <id>84406</id>
      <timestamp>2016-03-18T14:06:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="59">{{ltt|cpp/string/basic_string_view|std::basic_string_view}}</text>
      <sha1>c41o9snitj3xdwuelsumtimmdbycfwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string view/title</title>
    <ns>10</ns>
    <id>15035</id>
    <revision>
      <id>84439</id>
      <timestamp>2016-03-18T16:00:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">&lt;onlyinclude&gt;{{cpp/title | n=basic_string_view::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>pqnk8kmfbrbgbjpd5e826hxjthi04y1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc append</title>
    <ns>10</ns>
    <id>1674</id>
    <revision>
      <id>59588</id>
      <parentid>54653</parentid>
      <timestamp>2013-06-01T06:38:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list append]] to [[Template:cpp/string/basic string/dsc append]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/string/basic_string/append | appends characters to the end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc assign</title>
    <ns>10</ns>
    <id>1675</id>
    <revision>
      <id>59592</id>
      <parentid>54654</parentid>
      <timestamp>2013-06-01T06:38:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list assign]] to [[Template:cpp/string/basic string/dsc assign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/string/basic_string/assign |  assign characters to a string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc at</title>
    <ns>10</ns>
    <id>1676</id>
    <revision>
      <id>59595</id>
      <parentid>54657</parentid>
      <timestamp>2013-06-01T06:38:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list at]] to [[Template:cpp/string/basic string/dsc at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/string/basic_string/at |  access specified character with bounds checking}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc back</title>
    <ns>10</ns>
    <id>1677</id>
    <revision>
      <id>59600</id>
      <parentid>54658</parentid>
      <timestamp>2013-06-01T06:38:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list back]] to [[Template:cpp/string/basic string/dsc back]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/string/basic_string/back | notes={{mark c++11}} | accesses the last character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc begin</title>
    <ns>10</ns>
    <id>1678</id>
    <revision>
      <id>59603</id>
      <parentid>54661</parentid>
      <timestamp>2013-06-01T06:38:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list begin]] to [[Template:cpp/string/basic string/dsc begin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc mem fun | cpp/string/basic_string/begin | title=begin&lt;br&gt;cbegin | returns an iterator to the beginning | notes=&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc c str</title>
    <ns>10</ns>
    <id>1679</id>
    <revision>
      <id>59607</id>
      <parentid>54662</parentid>
      <timestamp>2013-06-01T06:38:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list c str]] to [[Template:cpp/string/basic string/dsc c str]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem fun | cpp/string/basic_string/c_str | returns a non-modifiable standard C character array version of the string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc capacity</title>
    <ns>10</ns>
    <id>1680</id>
    <revision>
      <id>59611</id>
      <parentid>54663</parentid>
      <timestamp>2013-06-01T06:38:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list capacity]] to [[Template:cpp/string/basic string/dsc capacity]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="134">{{dsc mem fun | cpp/string/basic_string/capacity | returns the number of characters that can be held in currently allocated storage }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc clear</title>
    <ns>10</ns>
    <id>1681</id>
    <revision>
      <id>59616</id>
      <parentid>54664</parentid>
      <timestamp>2013-06-01T06:38:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list clear]] to [[Template:cpp/string/basic string/dsc clear]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/string/basic_string/clear | clears the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc compare</title>
    <ns>10</ns>
    <id>1682</id>
    <revision>
      <id>59620</id>
      <parentid>54667</parentid>
      <timestamp>2013-06-01T06:39:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list compare]] to [[Template:cpp/string/basic string/dsc compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/string/basic_string/compare | compares two strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc constructor</title>
    <ns>10</ns>
    <id>1683</id>
    <revision>
      <id>59624</id>
      <parentid>54670</parentid>
      <timestamp>2013-06-01T06:39:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list constructor]] to [[Template:cpp/string/basic string/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem ctor | cpp/string/basic_string/basic_string | constructs a {{tt|basic_string}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc copy</title>
    <ns>10</ns>
    <id>1684</id>
    <revision>
      <id>59628</id>
      <parentid>54671</parentid>
      <timestamp>2013-06-01T06:39:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list copy]] to [[Template:cpp/string/basic string/dsc copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">{{dsc mem fun | cpp/string/basic_string/copy | copies characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc data</title>
    <ns>10</ns>
    <id>1685</id>
    <revision>
      <id>59633</id>
      <parentid>54672</parentid>
      <timestamp>2013-06-01T06:39:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list data]] to [[Template:cpp/string/basic string/dsc data]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/string/basic_string/data | returns a pointer to the first character of a string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc empty</title>
    <ns>10</ns>
    <id>1686</id>
    <revision>
      <id>59637</id>
      <parentid>54673</parentid>
      <timestamp>2013-06-01T06:39:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list empty]] to [[Template:cpp/string/basic string/dsc empty]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/string/basic_string/empty | checks whether the string is empty }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc end</title>
    <ns>10</ns>
    <id>1687</id>
    <revision>
      <id>59642</id>
      <parentid>54678</parentid>
      <timestamp>2013-06-01T06:39:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list end]] to [[Template:cpp/string/basic string/dsc end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/string/basic_string/end | title=end &lt;br&gt;cend | returns an iterator to the end | notes=&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc erase</title>
    <ns>10</ns>
    <id>1688</id>
    <revision>
      <id>59646</id>
      <parentid>54679</parentid>
      <timestamp>2013-06-01T06:39:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list erase]] to [[Template:cpp/string/basic string/dsc erase]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/string/basic_string/erase | removes characters }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc find</title>
    <ns>10</ns>
    <id>1689</id>
    <revision>
      <id>59650</id>
      <parentid>54680</parentid>
      <timestamp>2013-06-01T06:39:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list find]] to [[Template:cpp/string/basic string/dsc find]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/string/basic_string/find | find characters in the string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc find first not of</title>
    <ns>10</ns>
    <id>1690</id>
    <revision>
      <id>59655</id>
      <parentid>54681</parentid>
      <timestamp>2013-06-01T06:39:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list find first not of]] to [[Template:cpp/string/basic string/dsc find first not of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/string/basic_string/find_first_not_of | find first absence of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc find first of</title>
    <ns>10</ns>
    <id>1691</id>
    <revision>
      <id>59659</id>
      <parentid>54682</parentid>
      <timestamp>2013-06-01T06:39:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list find first of]] to [[Template:cpp/string/basic string/dsc find first of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/string/basic_string/find_first_of | find first occurrence of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc find last not of</title>
    <ns>10</ns>
    <id>1692</id>
    <revision>
      <id>59664</id>
      <parentid>54685</parentid>
      <timestamp>2013-06-01T06:39:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list find last not of]] to [[Template:cpp/string/basic string/dsc find last not of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/string/basic_string/find_last_not_of | find last absence of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc find last of</title>
    <ns>10</ns>
    <id>1693</id>
    <revision>
      <id>59669</id>
      <parentid>54688</parentid>
      <timestamp>2013-06-01T06:39:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list find last of]] to [[Template:cpp/string/basic string/dsc find last of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/string/basic_string/find_last_of | find last occurrence of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc front</title>
    <ns>10</ns>
    <id>1694</id>
    <revision>
      <id>59673</id>
      <parentid>54689</parentid>
      <timestamp>2013-06-01T06:39:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list front]] to [[Template:cpp/string/basic string/dsc front]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/string/basic_string/front | notes={{mark c++11}} | accesses the first character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc get allocator</title>
    <ns>10</ns>
    <id>1695</id>
    <revision>
      <id>59677</id>
      <parentid>54690</parentid>
      <timestamp>2013-06-01T06:39:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list get allocator]] to [[Template:cpp/string/basic string/dsc get allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/string/basic_string/get_allocator | returns the associated allocator }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc getline</title>
    <ns>10</ns>
    <id>9541</id>
    <revision>
      <id>77896</id>
      <parentid>59682</parentid>
      <timestamp>2015-04-17T15:17:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>dsc fun =&gt; dsc tfun</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/string/basic_string/getline | read data from an I/O stream into a string}}</text>
      <sha1>aa3t79f52m0beu86h1j00oanjhbe1ra</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc hash</title>
    <ns>10</ns>
    <id>4744</id>
    <revision>
      <id>59685</id>
      <parentid>54702</parentid>
      <timestamp>2013-06-01T06:39:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list hash]] to [[Template:cpp/string/basic string/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="323">{{dsc ptclass | cpp/string/basic_string/hash | title=std::hash{{dsc small|&lt;std::string&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::u16string&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::u32string&gt;}}&lt;br&gt;std::hash{{dsc small|&lt;std::wstring&gt;}} | hash support for strings | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc insert</title>
    <ns>10</ns>
    <id>1696</id>
    <revision>
      <id>59690</id>
      <parentid>54703</parentid>
      <timestamp>2013-06-01T06:40:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list insert]] to [[Template:cpp/string/basic string/dsc insert]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/string/basic_string/insert | inserts characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc max size</title>
    <ns>10</ns>
    <id>1698</id>
    <revision>
      <id>59695</id>
      <parentid>54704</parentid>
      <timestamp>2013-06-01T06:40:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list max size]] to [[Template:cpp/string/basic string/dsc max size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc mem fun | cpp/string/basic_string/max_size | returns the maximum number of characters }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc npos</title>
    <ns>10</ns>
    <id>1699</id>
    <revision>
      <id>59699</id>
      <parentid>54707</parentid>
      <timestamp>2013-06-01T06:40:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list npos]] to [[Template:cpp/string/basic string/dsc npos]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem sconst | cpp/string/basic_string/npos | special value. The exact meaning depends on the context}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator at</title>
    <ns>10</ns>
    <id>1702</id>
    <revision>
      <id>59720</id>
      <parentid>54717</parentid>
      <timestamp>2013-06-01T06:40:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list operator at]] to [[Template:cpp/string/basic string/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/string/basic_string/operator_at|title=operator[] |  access specified character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator cmp</title>
    <ns>10</ns>
    <id>5160</id>
    <revision>
      <id>59722</id>
      <parentid>54718</parentid>
      <timestamp>2013-06-01T06:40:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list operator cmp]] to [[Template:cpp/string/basic string/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="180">{{dsc tfun | cpp/string/basic_string/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&gt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;= | lexicographically compares two strings }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>9540</id>
    <revision>
      <id>59724</id>
      <parentid>54719</parentid>
      <timestamp>2013-06-01T06:40:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list operator ltltgtgt]] to [[Template:cpp/string/basic string/dsc operator ltltgtgt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc tfun | cpp/string/basic_string/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs stream input and output on strings }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator string view</title>
    <ns>10</ns>
    <id>15621</id>
    <revision>
      <id>86766</id>
      <timestamp>2016-07-12T21:29:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="152">{{dsc mem fun | cpp/string/basic_string/operator basic_string_view | returns a non-modifiable string_view  into the entire string|notes={{mark c++17}}}}</text>
      <sha1>ddiwoam0559yq03t1jr8wyo8hxk5k1h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator&quot;&quot;</title>
    <ns>10</ns>
    <id>10125</id>
    <revision>
      <id>59703</id>
      <parentid>54708</parentid>
      <timestamp>2013-06-01T06:40:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list operator&quot;&quot;]] to [[Template:cpp/string/basic string/dsc operator&quot;&quot;]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | cpp/string/basic_string/operator&quot;&quot; | Returns a basic_string from a null-terminated string | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator&quot;&quot;s</title>
    <ns>10</ns>
    <id>10126</id>
    <revision>
      <id>64654</id>
      <parentid>61094</parentid>
      <timestamp>2013-08-24T14:51:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>null-terminatedness is misleading (regular ctor cares about null term, op&quot;&quot;s doesn't)</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | cpp/string/basic_string/operator&quot;&quot;s | Converts a character array literal to {{tt|basic_string}} | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator+</title>
    <ns>10</ns>
    <id>9539</id>
    <revision>
      <id>59711</id>
      <parentid>54712</parentid>
      <timestamp>2013-06-01T06:40:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list operator+]] to [[Template:cpp/string/basic string/dsc operator+]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc tfun | cpp/string/basic_string/operator+ | concatenates two strings or a string and a char }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator+=</title>
    <ns>10</ns>
    <id>1700</id>
    <revision>
      <id>59715</id>
      <parentid>54713</parentid>
      <timestamp>2013-06-01T06:40:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list operator+=]] to [[Template:cpp/string/basic string/dsc operator+=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/string/basic_string/operator+{{=}} | appends characters to the end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc operator=</title>
    <ns>10</ns>
    <id>1701</id>
    <revision>
      <id>59718</id>
      <parentid>54716</parentid>
      <timestamp>2013-06-01T06:40:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list operator=]] to [[Template:cpp/string/basic string/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc mem fun | cpp/string/basic_string/operator{{=}} | assigns values to the string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc pop back</title>
    <ns>10</ns>
    <id>1703</id>
    <revision>
      <id>59726</id>
      <parentid>54722</parentid>
      <timestamp>2013-06-01T06:40:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list pop back]] to [[Template:cpp/string/basic string/dsc pop back]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/string/basic_string/pop_back | removes the last character | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc push back</title>
    <ns>10</ns>
    <id>1704</id>
    <revision>
      <id>59728</id>
      <parentid>54723</parentid>
      <timestamp>2013-06-01T06:40:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list push back]] to [[Template:cpp/string/basic string/dsc push back]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/string/basic_string/push_back | appends a character to the end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc rbegin</title>
    <ns>10</ns>
    <id>1705</id>
    <revision>
      <id>59730</id>
      <parentid>54726</parentid>
      <timestamp>2013-06-01T06:40:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list rbegin]] to [[Template:cpp/string/basic string/dsc rbegin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="149">{{dsc mem fun | cpp/string/basic_string/rbegin | title=rbegin&lt;br&gt; crbegin | returns a reverse iterator to the beginning | notes=&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc rend</title>
    <ns>10</ns>
    <id>1706</id>
    <revision>
      <id>59732</id>
      <parentid>54727</parentid>
      <timestamp>2013-06-01T06:40:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list rend]] to [[Template:cpp/string/basic string/dsc rend]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc mem fun | cpp/string/basic_string/rend | title=rend&lt;br&gt; crend | returns a reverse iterator to the end | notes=&lt;br&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc replace</title>
    <ns>10</ns>
    <id>1707</id>
    <revision>
      <id>59734</id>
      <parentid>54728</parentid>
      <timestamp>2013-06-01T06:40:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list replace]] to [[Template:cpp/string/basic string/dsc replace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/string/basic_string/replace | replaces specified portion of a string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc reserve</title>
    <ns>10</ns>
    <id>1708</id>
    <revision>
      <id>59736</id>
      <parentid>54731</parentid>
      <timestamp>2013-06-01T06:40:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list reserve]] to [[Template:cpp/string/basic string/dsc reserve]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/string/basic_string/reserve | reserves storage }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc resize</title>
    <ns>10</ns>
    <id>1709</id>
    <revision>
      <id>59738</id>
      <parentid>54732</parentid>
      <timestamp>2013-06-01T06:40:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list resize]] to [[Template:cpp/string/basic string/dsc resize]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/string/basic_string/resize | changes the number of characters stored }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc rfind</title>
    <ns>10</ns>
    <id>1710</id>
    <revision>
      <id>59740</id>
      <parentid>54733</parentid>
      <timestamp>2013-06-01T06:40:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list rfind]] to [[Template:cpp/string/basic string/dsc rfind]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/string/basic_string/rfind | find the last occurrence of a substring}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc shrink to fit</title>
    <ns>10</ns>
    <id>1711</id>
    <revision>
      <id>59742</id>
      <parentid>54734</parentid>
      <timestamp>2013-06-01T06:40:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list shrink to fit]] to [[Template:cpp/string/basic string/dsc shrink to fit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/string/basic_string/shrink_to_fit | reduces memory usage by freeing unused memory | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc size</title>
    <ns>10</ns>
    <id>1712</id>
    <revision>
      <id>59744</id>
      <parentid>54737</parentid>
      <timestamp>2013-06-01T06:40:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list size]] to [[Template:cpp/string/basic string/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/string/basic_string/size | title=size&lt;br/&gt;length | returns the number of characters }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc stof</title>
    <ns>10</ns>
    <id>2153</id>
    <revision>
      <id>66444</id>
      <parentid>59746</parentid>
      <timestamp>2013-11-22T12:02:00Z</timestamp>
      <contributor>
        <ip>46.252.142.242</ip>
      </contributor>
      <comment>fix a typo</comment>
      <text xml:space="preserve" bytes="178">{{dsc fun | cpp/string/basic_string/stof | title=stof&lt;br&gt;stod&lt;br&gt;stold | converts a string to a floating point value | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}</text>
      <sha1>qeiqn8nf6hql51srz3kx3guu94gkg9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc stol</title>
    <ns>10</ns>
    <id>2469</id>
    <revision>
      <id>66443</id>
      <parentid>59748</parentid>
      <timestamp>2013-11-22T11:59:35Z</timestamp>
      <contributor>
        <ip>46.252.142.242</ip>
      </contributor>
      <comment>fix a typo</comment>
      <text xml:space="preserve" bytes="171">{{dsc fun | cpp/string/basic_string/stol | title=stoi&lt;br&gt;stol&lt;br&gt;stoll | converts a string to a signed integer | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1>amg4i3h44t7qzgt8zk70wnpi51ieqnx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc stoul</title>
    <ns>10</ns>
    <id>2470</id>
    <revision>
      <id>59750</id>
      <parentid>54744</parentid>
      <timestamp>2013-06-01T06:40:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list stoul]] to [[Template:cpp/string/basic string/dsc stoul]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc fun | cpp/string/basic_string/stoul | title=stoul&lt;br&gt;stoull | converts a string to an unsigned integer | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc substr</title>
    <ns>10</ns>
    <id>1713</id>
    <revision>
      <id>59752</id>
      <parentid>54745</parentid>
      <timestamp>2013-06-01T06:40:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list substr]] to [[Template:cpp/string/basic string/dsc substr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/string/basic_string/substr | returns a substring}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc swap</title>
    <ns>10</ns>
    <id>1714</id>
    <revision>
      <id>59754</id>
      <parentid>54746</parentid>
      <timestamp>2013-06-01T06:40:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list swap]] to [[Template:cpp/string/basic string/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc mem fun | cpp/string/basic_string/swap | swaps the contents }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc swap2</title>
    <ns>10</ns>
    <id>3447</id>
    <revision>
      <id>59756</id>
      <parentid>54753</parentid>
      <timestamp>2013-06-01T06:40:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list swap2]] to [[Template:cpp/string/basic string/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/string/basic_string/swap2 | title=std::swap{{dsc small|(std::basic_string)}} | specializes the {{lc|std::swap}} algorithm}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc to string</title>
    <ns>10</ns>
    <id>2154</id>
    <revision>
      <id>59758</id>
      <parentid>54754</parentid>
      <timestamp>2013-06-01T06:40:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list to string]] to [[Template:cpp/string/basic string/dsc to string]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc fun | cpp/string/basic_string/to_string | converts an integral or floating point value to {{tt|string}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/dsc to wstring</title>
    <ns>10</ns>
    <id>2155</id>
    <revision>
      <id>59760</id>
      <parentid>54755</parentid>
      <timestamp>2013-06-01T06:40:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/dcl list to wstring]] to [[Template:cpp/string/basic string/dsc to wstring]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc fun | cpp/string/basic_string/to_wstring | converts an integral or floating point value to {{tt|wstring}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/navbar</title>
    <ns>10</ns>
    <id>1715</id>
    <revision>
      <id>40018</id>
      <parentid>35907</parentid>
      <timestamp>2012-09-28T20:19:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="255">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/string/navbar heading
|content2 = cpp/string/navbar content

|heading3 = cpp/string/basic_string/navbar heading
|content3 = cpp/string/basic_string/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/navbar content</title>
    <ns>10</ns>
    <id>1716</id>
    <revision>
      <id>87042</id>
      <parentid>86768</parentid>
      <timestamp>2016-07-21T18:30:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>operator&quot;&quot;s was missing</comment>
      <text xml:space="preserve" bytes="3833">{{nv begin}}
{{nv col begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/string/basic_string/basic_string}}
{{nv mem ln | cpp/string/basic_string/operator{{=}}}}
{{nv mem ln | cpp/string/basic_string/assign}}
{{nv mem ln | cpp/string/basic_string/get_allocator}}

{{nv h2 | Element access}}
{{nv mem ln | cpp/string/basic_string/at}}
{{nv mem ln | cpp/string/basic_string/operator_at | operator[]}}
{{nv mem ln | cpp/string/basic_string/front | notes={{mark c++11}}}}
{{nv mem ln | cpp/string/basic_string/back | notes={{mark c++11}}}}
{{nv mem ln | cpp/string/basic_string/data}}
{{nv mem ln | cpp/string/basic_string/c_str}}
{{nv mem ln | cpp/string/basic_string/operator basic_string_view|notes={{mark c++17}}}}

{{nv h2 | Iterators}}
{{nv mem ln | cpp/string/basic_string/begin | begin | cbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/string/basic_string/end | end | cend | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/string/basic_string/rbegin | rbegin | crbegin | notes=&lt;br&gt;{{mark c++11}}}}
{{nv mem ln | cpp/string/basic_string/rend | rend | crend | notes=&lt;br&gt;{{mark c++11}}}}

{{nv h2 | Capacity}}
{{nv mem ln | cpp/string/basic_string/empty}}
{{nv mem ln | cpp/string/basic_string/size | size | length}}
{{nv mem ln | cpp/string/basic_string/max_size}}
{{nv mem ln | cpp/string/basic_string/reserve}}
{{nv mem ln | cpp/string/basic_string/capacity}}
{{nv mem ln | cpp/string/basic_string/shrink_to_fit | notes={{mark c++11}}}}

{{nv col next}}

{{nv h2 | Operations}}
{{nv mem ln | cpp/string/basic_string/clear}}
{{nv mem ln | cpp/string/basic_string/insert}}
{{nv mem ln | cpp/string/basic_string/erase}}
{{nv mem ln | cpp/string/basic_string/push_back}}
{{nv mem ln | cpp/string/basic_string/pop_back | notes={{mark c++11}}}}
{{nv mem ln | cpp/string/basic_string/append}}
{{nv mem ln | cpp/string/basic_string/operator+{{=}}}}
{{nv mem ln | cpp/string/basic_string/compare}}
{{nv mem ln | cpp/string/basic_string/replace}}
{{nv mem ln | cpp/string/basic_string/substr}}
{{nv mem ln | cpp/string/basic_string/copy}}
{{nv mem ln | cpp/string/basic_string/resize}}
{{nv mem ln | cpp/string/basic_string/swap}}

{{nv h2 | Search}}
{{nv mem ln | cpp/string/basic_string/find}}
{{nv mem ln | cpp/string/basic_string/rfind}}
{{nv mem ln | cpp/string/basic_string/find_first_of}}
{{nv mem ln | cpp/string/basic_string/find_first_not_of}}
{{nv mem ln | cpp/string/basic_string/find_last_of}}
{{nv mem ln | cpp/string/basic_string/find_last_not_of}}

{{nv h1 | Constants}}
{{nv mem ln | cpp/string/basic_string/npos}}

{{nv col next}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/string/basic_string/operator+}}
{{nv ln | cpp/string/basic_string/operator_cmp|operator{{==}}|operator!{{=}}|operator&lt;|operator&gt;|operator&lt;{{=}}|operator&gt;{{=}} }}
{{nv ln | cpp/string/basic_string/swap2|swap{{dsc small|(std::basic_string)}} }}
{{nv ln | cpp/string/basic_string/operator_ltltgtgt|operator&lt;&lt;|operator&gt;&gt;}}
{{nv ln | cpp/string/basic_string/getline}}
{{nv ln | cpp/string/basic_string/stol | stoi | stol | stoll | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv ln | cpp/string/basic_string/stoul | stoul | stoull | notes={{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv ln | cpp/string/basic_string/stof | stof | stod | stold | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv ln | cpp/string/basic_string/to_string | notes={{mark c++11}} }}
{{nv ln | cpp/string/basic_string/to_wstring | notes={{mark c++11}} }}
{{nv ln | cpp/string/basic_string/operator&quot;&quot;s | notes={{mark c++14}} }}
{{nv h1 | Helper classes}}
{{nv ln | cpp/string/basic_string/hash | hash{{dsc small|&lt;std::string&gt;}}| hash{{dsc small|&lt;std::wstring&gt;}} | hash{{dsc small|&lt;std::u32string&gt;}} | hash{{dsc small|&lt;std::u16string&gt;}} | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}} }}
{{nv col end}}
{{nv end}}</text>
      <sha1>p74o2zvkb75acfgqqvmio81sy6uthpn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/navbar heading</title>
    <ns>10</ns>
    <id>1717</id>
    <revision>
      <id>35467</id>
      <parentid>3434</parentid>
      <timestamp>2012-06-15T22:25:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/basic string/sidebar heading]] to [[Template:cpp/string/basic string/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="51">{{ltt|cpp/string/basic_string | std::basic_string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/basic string/title</title>
    <ns>10</ns>
    <id>1718</id>
    <revision>
      <id>3436</id>
      <parentid>3435</parentid>
      <timestamp>2011-06-06T22:58:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=basic_string::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc atof</title>
    <ns>10</ns>
    <id>1725</id>
    <revision>
      <id>59762</id>
      <parentid>54759</parentid>
      <timestamp>2013-06-01T06:41:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list atof]] to [[Template:cpp/string/byte/dsc atof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc fun | cpp/string/byte/atof | converts a byte string to a floating point value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc atoi</title>
    <ns>10</ns>
    <id>1726</id>
    <revision>
      <id>59764</id>
      <parentid>54762</parentid>
      <timestamp>2013-06-01T06:41:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list atoi]] to [[Template:cpp/string/byte/dsc atoi]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | cpp/string/byte/atoi | title=atoi&lt;br&gt;atol&lt;br&gt;atoll | converts a byte string to an integer value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isalnum</title>
    <ns>10</ns>
    <id>1727</id>
    <revision>
      <id>59766</id>
      <parentid>54763</parentid>
      <timestamp>2013-06-01T06:41:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isalnum]] to [[Template:cpp/string/byte/dsc isalnum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc fun | cpp/string/byte/isalnum | checks if a character is alphanumeric}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isalpha</title>
    <ns>10</ns>
    <id>1728</id>
    <revision>
      <id>59768</id>
      <parentid>54766</parentid>
      <timestamp>2013-06-01T06:41:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isalpha]] to [[Template:cpp/string/byte/dsc isalpha]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | cpp/string/byte/isalpha | checks if a character is alphabetic}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isblank</title>
    <ns>10</ns>
    <id>2929</id>
    <revision>
      <id>59770</id>
      <parentid>54767</parentid>
      <timestamp>2013-06-01T06:41:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isblank]] to [[Template:cpp/string/byte/dsc isblank]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc fun | cpp/string/byte/isblank | checks if a character is a blank character | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc iscntrl</title>
    <ns>10</ns>
    <id>1729</id>
    <revision>
      <id>59772</id>
      <parentid>54770</parentid>
      <timestamp>2013-06-01T06:41:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list iscntrl]] to [[Template:cpp/string/byte/dsc iscntrl]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | cpp/string/byte/iscntrl | checks if a character is a control character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isdigit</title>
    <ns>10</ns>
    <id>1730</id>
    <revision>
      <id>59774</id>
      <parentid>54771</parentid>
      <timestamp>2013-06-01T06:41:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isdigit]] to [[Template:cpp/string/byte/dsc isdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc fun | cpp/string/byte/isdigit | checks if a character is a digit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isgraph</title>
    <ns>10</ns>
    <id>1731</id>
    <revision>
      <id>59776</id>
      <parentid>54772</parentid>
      <timestamp>2013-06-01T06:41:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isgraph]] to [[Template:cpp/string/byte/dsc isgraph]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc fun | cpp/string/byte/isgraph | checks if a character is a graphical character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc islower</title>
    <ns>10</ns>
    <id>1732</id>
    <revision>
      <id>59778</id>
      <parentid>54775</parentid>
      <timestamp>2013-06-01T06:41:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list islower]] to [[Template:cpp/string/byte/dsc islower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/string/byte/islower | checks if a character is lowercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isprint</title>
    <ns>10</ns>
    <id>1733</id>
    <revision>
      <id>59780</id>
      <parentid>54776</parentid>
      <timestamp>2013-06-01T06:41:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isprint]] to [[Template:cpp/string/byte/dsc isprint]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc fun | cpp/string/byte/isprint | checks if a character is a printing character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc ispunct</title>
    <ns>10</ns>
    <id>1734</id>
    <revision>
      <id>59782</id>
      <parentid>54779</parentid>
      <timestamp>2013-06-01T06:41:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list ispunct]] to [[Template:cpp/string/byte/dsc ispunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/string/byte/ispunct | checks if a character is a punctuation character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isspace</title>
    <ns>10</ns>
    <id>1735</id>
    <revision>
      <id>59784</id>
      <parentid>54780</parentid>
      <timestamp>2013-06-01T06:41:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isspace]] to [[Template:cpp/string/byte/dsc isspace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc fun | cpp/string/byte/isspace | checks if a character is a space character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isupper</title>
    <ns>10</ns>
    <id>1736</id>
    <revision>
      <id>59786</id>
      <parentid>54781</parentid>
      <timestamp>2013-06-01T06:41:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isupper]] to [[Template:cpp/string/byte/dsc isupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | cpp/string/byte/isupper | checks if a character is an uppercase character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc isxdigit</title>
    <ns>10</ns>
    <id>1737</id>
    <revision>
      <id>59788</id>
      <parentid>54782</parentid>
      <timestamp>2013-06-01T06:41:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list isxdigit]] to [[Template:cpp/string/byte/dsc isxdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc fun | cpp/string/byte/isxdigit | checks if a character is a hexadecimal character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc memchr</title>
    <ns>10</ns>
    <id>1738</id>
    <revision>
      <id>59790</id>
      <parentid>54785</parentid>
      <timestamp>2013-06-01T06:41:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list memchr]] to [[Template:cpp/string/byte/dsc memchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/string/byte/memchr | searches an array for the first occurrence of a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc memcmp</title>
    <ns>10</ns>
    <id>1739</id>
    <revision>
      <id>59792</id>
      <parentid>54790</parentid>
      <timestamp>2013-06-01T06:41:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list memcmp]] to [[Template:cpp/string/byte/dsc memcmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">{{dsc fun | cpp/string/byte/memcmp | compares two buffers}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc memcpy</title>
    <ns>10</ns>
    <id>1740</id>
    <revision>
      <id>59794</id>
      <parentid>54795</parentid>
      <timestamp>2013-06-01T06:41:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list memcpy]] to [[Template:cpp/string/byte/dsc memcpy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc fun | cpp/string/byte/memcpy | copies one buffer to another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc memmove</title>
    <ns>10</ns>
    <id>1741</id>
    <revision>
      <id>59796</id>
      <parentid>54798</parentid>
      <timestamp>2013-06-01T06:41:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list memmove]] to [[Template:cpp/string/byte/dsc memmove]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc fun | cpp/string/byte/memmove | moves one buffer to another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc memset</title>
    <ns>10</ns>
    <id>1742</id>
    <revision>
      <id>59798</id>
      <parentid>54801</parentid>
      <timestamp>2013-06-01T06:41:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list memset]] to [[Template:cpp/string/byte/dsc memset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc fun | cpp/string/byte/memset | fills a buffer with a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strcat</title>
    <ns>10</ns>
    <id>1743</id>
    <revision>
      <id>59800</id>
      <parentid>54802</parentid>
      <timestamp>2013-06-01T06:41:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strcat]] to [[Template:cpp/string/byte/dsc strcat]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">{{dsc fun | cpp/string/byte/strcat | concatenates two strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strchr</title>
    <ns>10</ns>
    <id>1744</id>
    <revision>
      <id>59802</id>
      <parentid>54803</parentid>
      <timestamp>2013-06-01T06:41:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strchr]] to [[Template:cpp/string/byte/dsc strchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc fun | cpp/string/byte/strchr | finds the first occurrence of a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strcmp</title>
    <ns>10</ns>
    <id>1745</id>
    <revision>
      <id>59804</id>
      <parentid>54804</parentid>
      <timestamp>2013-06-01T06:41:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strcmp]] to [[Template:cpp/string/byte/dsc strcmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">{{dsc fun | cpp/string/byte/strcmp | compares two strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strcoll</title>
    <ns>10</ns>
    <id>1746</id>
    <revision>
      <id>59806</id>
      <parentid>54807</parentid>
      <timestamp>2013-06-01T06:41:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strcoll]] to [[Template:cpp/string/byte/dsc strcoll]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc fun | cpp/string/byte/strcoll | compares two strings in accordance to the current locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strcpy</title>
    <ns>10</ns>
    <id>1747</id>
    <revision>
      <id>59808</id>
      <parentid>54810</parentid>
      <timestamp>2013-06-01T06:41:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strcpy]] to [[Template:cpp/string/byte/dsc strcpy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc fun | cpp/string/byte/strcpy | copies one string to another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strcspn</title>
    <ns>10</ns>
    <id>1748</id>
    <revision>
      <id>59810</id>
      <parentid>54811</parentid>
      <timestamp>2013-06-01T06:41:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strcspn]] to [[Template:cpp/string/byte/dsc strcspn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc fun | cpp/string/byte/strcspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the characters not found in another byte string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strerror</title>
    <ns>10</ns>
    <id>2</id>
    <revision>
      <id>59812</id>
      <parentid>54812</parentid>
      <timestamp>2013-06-01T06:41:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strerror]] to [[Template:cpp/string/byte/dsc strerror]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc fun | cpp/string/byte/strerror | returns a text version of a given error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strlen</title>
    <ns>10</ns>
    <id>3</id>
    <revision>
      <id>59814</id>
      <parentid>54813</parentid>
      <timestamp>2013-06-01T06:41:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strlen]] to [[Template:cpp/string/byte/dsc strlen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc fun | cpp/string/byte/strlen | returns the length of a given string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strncat</title>
    <ns>10</ns>
    <id>4</id>
    <revision>
      <id>59816</id>
      <parentid>54820</parentid>
      <timestamp>2013-06-01T06:41:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strncat]] to [[Template:cpp/string/byte/dsc strncat]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc fun | cpp/string/byte/strncat | concatenates a certain amount of characters of two strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strncmp</title>
    <ns>10</ns>
    <id>5</id>
    <revision>
      <id>59818</id>
      <parentid>54825</parentid>
      <timestamp>2013-06-01T06:41:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strncmp]] to [[Template:cpp/string/byte/dsc strncmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/string/byte/strncmp | compares a certain amount of characters of two strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strncpy</title>
    <ns>10</ns>
    <id>6</id>
    <revision>
      <id>59820</id>
      <parentid>54830</parentid>
      <timestamp>2013-06-01T06:41:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strncpy]] to [[Template:cpp/string/byte/dsc strncpy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc fun | cpp/string/byte/strncpy | copies a certain amount of characters from one string to another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strpbrk</title>
    <ns>10</ns>
    <id>7</id>
    <revision>
      <id>72925</id>
      <parentid>59822</parentid>
      <timestamp>2014-10-05T14:15:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>more practical desc, hopefully</comment>
      <text xml:space="preserve" bytes="106">{{dsc fun | cpp/string/byte/strpbrk | finds the first location of any character from a set of separators}}</text>
      <sha1>jg52lspm2bjg483hbxiqcg5o6eok4yu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strrchr</title>
    <ns>10</ns>
    <id>8</id>
    <revision>
      <id>59824</id>
      <parentid>54832</parentid>
      <timestamp>2013-06-01T06:41:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strrchr]] to [[Template:cpp/string/byte/dsc strrchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc fun | cpp/string/byte/strrchr | finds the last occurrence of a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strspn</title>
    <ns>10</ns>
    <id>9</id>
    <revision>
      <id>59826</id>
      <parentid>54835</parentid>
      <timestamp>2013-06-01T06:41:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strspn]] to [[Template:cpp/string/byte/dsc strspn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc fun | cpp/string/byte/strspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the characters found in another byte string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strstr</title>
    <ns>10</ns>
    <id>10</id>
    <revision>
      <id>59828</id>
      <parentid>54836</parentid>
      <timestamp>2013-06-01T06:41:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strstr]] to [[Template:cpp/string/byte/dsc strstr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/string/byte/strstr | finds the first occurrence of a substring of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strtof</title>
    <ns>10</ns>
    <id>11</id>
    <revision>
      <id>59830</id>
      <parentid>54839</parentid>
      <timestamp>2013-06-01T06:41:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strtof]] to [[Template:cpp/string/byte/dsc strtof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc fun | cpp/string/byte/strtof | title=strtof&lt;br&gt;strtod&lt;br&gt;strtold | converts a byte string to a floating point value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strtoimax</title>
    <ns>10</ns>
    <id>3659</id>
    <revision>
      <id>59832</id>
      <parentid>54840</parentid>
      <timestamp>2013-06-01T06:41:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strtoimax]] to [[Template:cpp/string/byte/dsc strtoimax]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="184">{{dsc fun | cpp/string/byte/strtoimax| title=strtoimax&lt;br&gt;strtoumax | converts a byte string to {{lc|std::intmax_t}} or {{lc|std::uintmax_t}} | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strtok</title>
    <ns>10</ns>
    <id>12</id>
    <revision>
      <id>59834</id>
      <parentid>54841</parentid>
      <timestamp>2013-06-01T06:41:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strtok]] to [[Template:cpp/string/byte/dsc strtok]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc fun | cpp/string/byte/strtok | finds the next token in a byte string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strtol</title>
    <ns>10</ns>
    <id>13</id>
    <revision>
      <id>59836</id>
      <parentid>54844</parentid>
      <timestamp>2013-06-01T06:41:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strtol]] to [[Template:cpp/string/byte/dsc strtol]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc fun | cpp/string/byte/strtol | title=strtol&lt;br&gt;strtoll | converts a byte string to an integer value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strtoul</title>
    <ns>10</ns>
    <id>14</id>
    <revision>
      <id>59838</id>
      <parentid>54845</parentid>
      <timestamp>2013-06-01T06:41:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strtoul]] to [[Template:cpp/string/byte/dsc strtoul]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | cpp/string/byte/strtoul| title=strtoul&lt;br&gt; strtoull | converts a byte string to an unsigned integer value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc strxfrm</title>
    <ns>10</ns>
    <id>15</id>
    <revision>
      <id>59840</id>
      <parentid>54848</parentid>
      <timestamp>2013-06-01T06:41:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list strxfrm]] to [[Template:cpp/string/byte/dsc strxfrm]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc fun | cpp/string/byte/strxfrm | transform a string so that strcmp would produce the same result as strcoll }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc tolower</title>
    <ns>10</ns>
    <id>16</id>
    <revision>
      <id>59842</id>
      <parentid>54851</parentid>
      <timestamp>2013-06-01T06:41:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list tolower]] to [[Template:cpp/string/byte/dsc tolower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | cpp/string/byte/tolower | converts a character to lowercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/dsc toupper</title>
    <ns>10</ns>
    <id>17</id>
    <revision>
      <id>59844</id>
      <parentid>54854</parentid>
      <timestamp>2013-06-01T06:41:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/dcl list toupper]] to [[Template:cpp/string/byte/dsc toupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc fun | cpp/string/byte/toupper | converts a character to uppercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/navbar</title>
    <ns>10</ns>
    <id>18</id>
    <revision>
      <id>40019</id>
      <parentid>35753</parentid>
      <timestamp>2012-09-28T20:19:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="237">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/string/navbar heading
|content2 = cpp/string/navbar content

|heading3 = cpp/string/byte/navbar heading
|content3 = cpp/string/byte/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/navbar content</title>
    <ns>10</ns>
    <id>19</id>
    <revision>
      <id>76516</id>
      <parentid>54855</parentid>
      <timestamp>2015-02-19T20:56:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>missing strtoimax/uimax</comment>
      <text xml:space="preserve" bytes="2041">{{nv begin}}
{{nv h1 | Functions}}

{{nv h2 | Character manipulation}}
{{nv col begin}}
{{nv ln | cpp/string/byte/isalnum}}
{{nv ln | cpp/string/byte/isalpha}}
{{nv ln | cpp/string/byte/islower}}
{{nv ln | cpp/string/byte/isupper}}
{{nv ln | cpp/string/byte/isdigit}}
{{nv ln | cpp/string/byte/isxdigit}}
{{nv ln | cpp/string/byte/isblank|notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/string/byte/iscntrl}}
{{nv ln | cpp/string/byte/isgraph}}
{{nv ln | cpp/string/byte/isspace}}
{{nv ln | cpp/string/byte/isprint}}
{{nv ln | cpp/string/byte/ispunct}}
{{nv ln | cpp/string/byte/tolower}}
{{nv ln | cpp/string/byte/toupper}}
{{nv col end}}

{{nv h2 | Conversions to numeric formats}}
{{nv col begin}}
{{nv ln | cpp/string/byte/atof}}
{{nv ln | cpp/string/byte/atoi|atoi|atol|atoll}}
{{nv ln | cpp/string/byte/strtol|strtol|strtoll}}
{{nv col next}}
{{nv ln | cpp/string/byte/strtoul|strtoul|strtoull}}
{{nv ln | cpp/string/byte/strtof|strtof|strtod|strtold}}
{{nv ln | cpp/string/byte/strtoimax|strtoimax|strtouimax|notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv col end}}

{{nv h2 | String manipulation}}
{{nv ln | cpp/string/byte/strcpy}}
{{nv ln | cpp/string/byte/strncpy}}
{{nv ln | cpp/string/byte/strcat}}
{{nv ln | cpp/string/byte/strncat}}
{{nv ln | cpp/string/byte/strxfrm}}

{{nv h2 | String examination}}
{{nv col begin}}
{{nv ln | cpp/string/byte/strlen}}
{{nv ln | cpp/string/byte/strcmp}}
{{nv ln | cpp/string/byte/strncmp}}
{{nv ln | cpp/string/byte/strcoll}}
{{nv ln | cpp/string/byte/strchr}}
{{nv ln | cpp/string/byte/strrchr}}
{{nv col next}}
{{nv ln | cpp/string/byte/strspn}}
{{nv ln | cpp/string/byte/strcspn}}
{{nv ln | cpp/string/byte/strpbrk}}
{{nv ln | cpp/string/byte/strstr}}
{{nv ln | cpp/string/byte/strtok}}
{{nv col end}}

{{nv h2 | Memory manipulation}}
{{nv ln | cpp/string/byte/memchr}}
{{nv ln | cpp/string/byte/memcmp}}
{{nv ln | cpp/string/byte/memset}}
{{nv ln | cpp/string/byte/memcpy}}
{{nv ln | cpp/string/byte/memmove}}

{{nv h2 | Miscellaneous}}
{{nv ln | cpp/string/byte/strerror}}
{{nv end}}</text>
      <sha1>ekfr719vr6dzpzosyjvtbq6cuous4yn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/byte/navbar heading</title>
    <ns>10</ns>
    <id>20</id>
    <revision>
      <id>35910</id>
      <parentid>14561</parentid>
      <timestamp>2012-06-15T22:34:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/byte/sidebar heading]] to [[Template:cpp/string/byte/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="50">[[cpp/string/byte | Null-terminated byte strings]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc assign</title>
    <ns>10</ns>
    <id>9093</id>
    <revision>
      <id>59846</id>
      <parentid>54858</parentid>
      <timestamp>2013-06-01T06:41:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list assign]] to [[Template:cpp/string/char traits/dsc assign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem sfun | cpp/string/char_traits/assign | assigns a character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc cmp</title>
    <ns>10</ns>
    <id>9094</id>
    <revision>
      <id>59848</id>
      <parentid>54861</parentid>
      <timestamp>2013-06-01T06:41:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list cmp]] to [[Template:cpp/string/char traits/dsc cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem sfun | cpp/string/char_traits/cmp | title=eq&lt;br&gt;lt| compares two characters }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc compare</title>
    <ns>10</ns>
    <id>9097</id>
    <revision>
      <id>59850</id>
      <parentid>54862</parentid>
      <timestamp>2013-06-01T06:41:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list compare]] to [[Template:cpp/string/char traits/dsc compare]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem sfun | cpp/string/char_traits/compare | lexicographically compares two character sequences}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc copy</title>
    <ns>10</ns>
    <id>9096</id>
    <revision>
      <id>59852</id>
      <parentid>54865</parentid>
      <timestamp>2013-06-01T06:41:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list copy]] to [[Template:cpp/string/char traits/dsc copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem sfun | cpp/string/char_traits/copy | copies a character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc eof</title>
    <ns>10</ns>
    <id>9100</id>
    <revision>
      <id>59854</id>
      <parentid>54866</parentid>
      <timestamp>2013-06-01T06:42:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list eof]] to [[Template:cpp/string/char traits/dsc eof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem sfun | cpp/string/char_traits/eof | returns an ''eof'' value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc eq int type</title>
    <ns>10</ns>
    <id>9104</id>
    <revision>
      <id>59856</id>
      <parentid>54867</parentid>
      <timestamp>2013-06-01T06:42:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list eq int type]] to [[Template:cpp/string/char traits/dsc eq int type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem sfun | cpp/string/char_traits/eq_int_type | compares two {{tt|int_type}} values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc find</title>
    <ns>10</ns>
    <id>9103</id>
    <revision>
      <id>59858</id>
      <parentid>54870</parentid>
      <timestamp>2013-06-01T06:42:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list find]] to [[Template:cpp/string/char traits/dsc find]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem sfun | cpp/string/char_traits/find | finds a character in a character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc length</title>
    <ns>10</ns>
    <id>9098</id>
    <revision>
      <id>59860</id>
      <parentid>54871</parentid>
      <timestamp>2013-06-01T06:42:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list length]] to [[Template:cpp/string/char traits/dsc length]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem sfun | cpp/string/char_traits/length | returns the length of a character sequence}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc move</title>
    <ns>10</ns>
    <id>9095</id>
    <revision>
      <id>59862</id>
      <parentid>54874</parentid>
      <timestamp>2013-06-01T06:42:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list move]] to [[Template:cpp/string/char traits/dsc move]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem sfun | cpp/string/char_traits/move | moves one character sequence onto another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc not eof</title>
    <ns>10</ns>
    <id>9101</id>
    <revision>
      <id>59864</id>
      <parentid>54875</parentid>
      <timestamp>2013-06-01T06:42:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list not eof]] to [[Template:cpp/string/char traits/dsc not eof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem sfun | cpp/string/char_traits/not_eof | checks whether a character is ''eof'' value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc to char type</title>
    <ns>10</ns>
    <id>9102</id>
    <revision>
      <id>59866</id>
      <parentid>54876</parentid>
      <timestamp>2013-06-01T06:42:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list to char type]] to [[Template:cpp/string/char traits/dsc to char type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem sfun | cpp/string/char_traits/to_char_type | converts {{tt|int_type}} to equivalent  {{tt|char_type}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/dsc to int type</title>
    <ns>10</ns>
    <id>9099</id>
    <revision>
      <id>59868</id>
      <parentid>54877</parentid>
      <timestamp>2013-06-01T06:42:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/char traits/dcl list to int type]] to [[Template:cpp/string/char traits/dsc to int type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc mem sfun | cpp/string/char_traits/to_int_type | converts {{tt|char_type}} to equivalent  {{tt|int_type}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/navbar</title>
    <ns>10</ns>
    <id>9118</id>
    <revision>
      <id>40020</id>
      <parentid>38248</parentid>
      <timestamp>2012-09-28T20:19:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/string/navbar heading
|content2 = cpp/string/navbar content

|heading3 = cpp/string/char_traits/navbar heading
|content3 = cpp/string/char_traits/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/navbar content</title>
    <ns>10</ns>
    <id>9120</id>
    <revision>
      <id>54880</id>
      <parentid>38252</parentid>
      <timestamp>2013-06-01T05:17:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="610">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/string/char_traits/assign}}
{{nv mem ln | cpp/string/char_traits/cmp}}
{{nv mem ln | cpp/string/char_traits/move}}
{{nv mem ln | cpp/string/char_traits/copy}}
{{nv mem ln | cpp/string/char_traits/compare}}
{{nv mem ln | cpp/string/char_traits/length}}
{{nv mem ln | cpp/string/char_traits/find}}
{{nv mem ln | cpp/string/char_traits/to_char_type}}
{{nv mem ln | cpp/string/char_traits/to_int_type}}
{{nv mem ln | cpp/string/char_traits/eq_int_type}}
{{nv mem ln | cpp/string/char_traits/eof}}
{{nv mem ln | cpp/string/char_traits/not_eof}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/navbar heading</title>
    <ns>10</ns>
    <id>9119</id>
    <revision>
      <id>48088</id>
      <parentid>38249</parentid>
      <timestamp>2013-05-18T18:07:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/string/char_traits|std::char_traits}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/char traits/title</title>
    <ns>10</ns>
    <id>9114</id>
    <revision>
      <id>38242</id>
      <timestamp>2012-07-27T10:49:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=char_traits::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/character classes</title>
    <ns>10</ns>
    <id>1719</id>
    <revision>
      <id>14602</id>
      <parentid>12783</parentid>
      <timestamp>2011-11-27T02:19:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/string/narrow&quot; to &quot;cpp/string/byte&quot;</comment>
      <text xml:space="preserve" bytes="9289">{| class=&quot;wikitable&quot; style=&quot;font-size:85%; text-align:center;&quot;
|-
! colspan=&quot;2&quot; | ASCII values &lt;br&gt; (hex)
! characters
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/iscntrl | iscntrl}} &lt;br&gt;
{{ltt|cpp/string/wide/iswcntrl | iswcntrl}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isprint | isprint}} &lt;br&gt;
{{ltt|cpp/string/wide/iswprint | iswprint}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isspace | isspace}} &lt;br&gt;
{{ltt|cpp/string/wide/iswspace | iswspace}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isblank | isblank}} &lt;br&gt;
{{ltt|cpp/string/wide/iswblank | iswblank}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isgraph | isgraph}} &lt;br&gt;
{{ltt|cpp/string/wide/iswgraph | iswgraph}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/ispunct | ispunct}} &lt;br&gt;
{{ltt|cpp/string/wide/iswpunct | iswpunct}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isalnum | isalnum}} &lt;br&gt;
{{ltt|cpp/string/wide/iswalnum | iswalnum}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isalpha | isalpha}} &lt;br&gt;
{{ltt|cpp/string/wide/iswalpha | iswalpha}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isupper | isupper}} &lt;br&gt;
{{ltt|cpp/string/wide/iswupper | iswupper}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/islower | islower}} &lt;br&gt;
{{ltt|cpp/string/wide/iswlower | iswlower}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isdigit | isdigit}} &lt;br&gt;
{{ltt|cpp/string/wide/iswdigit | iswdigit}}
! style=&quot;font-size:85%;&quot; |
{{ltt|cpp/string/byte/isxdigit | isxdigit}} &lt;br&gt;
{{ltt|cpp/string/wide/iswxdigit | iswxdigit}}
|-
| 0  - 8 
| {{tt|0x00-0x08}}
| control codes ({{tt|NUL}}, etc.)
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 9 
| {{tt|0x09}}
| tab ({{tt|\t}})
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 10  - 13 
| {{tt|0x0A-0x0D}}
| whitespaces ({{tt|\n}},{{tt|\v}},{{tt|\f}},{{tt|\r}})
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 14 - 31 
| {{tt|0x0E-0x1F}}
| control codes
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 32 
| {{tt|0x20}}
| space
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 33 - 47 
| {{tt|0x21-0x2F}}
| {{tt|!&quot;#$%&amp;'()*+,-./}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 48 - 57 
| {{tt|0x30-0x39}}
| {{tt|0123456789}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}} 
|-
| 58 - 64 
| {{tt|0x3a-0x40}}
| {{tt|:;&lt;{{=}}&gt;?@}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 65 - 70 
| {{tt|0x41-0x46}}
| {{tt|ABCDEF}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}} 
|-
| 71 - 90 
| {{tt|0x47-0x5A}}
| {{tt|GHIJKLMNOPQRSTUVWXYZ}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 91 - 96 
| {{tt|0x5B-0x60}}
| {{tt|[\]&lt;nowiki&gt;^&lt;/nowiki&gt;_`}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 97 -102 
| {{tt|0x61-0x66}}
| {{tt|abcdef}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}} 
|-
| 103-122 
| {{tt|0x67-0x7A}}
| {{tt|ghijklmnopqrstuvwxyz}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 123-126 
| {{tt|0x7B-0x7E}}
| {{tt|{&lt;nowiki&gt;|&lt;/nowiki&gt;}~}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|-
| 127 
| {{tt|0x7F}}
| backspace character ({{tt|DEL}})
| {{cpp/string/character classes/yes}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
| {{cpp/string/character classes/no}}
|}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/character classes/no</title>
    <ns>10</ns>
    <id>1720</id>
    <revision>
      <id>3440</id>
      <parentid>3439</parentid>
      <timestamp>2011-06-06T22:58:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="22">{{no|&lt;b&gt;{{tt|0}}&lt;/b&gt;}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/character classes/yes</title>
    <ns>10</ns>
    <id>1721</id>
    <revision>
      <id>3442</id>
      <parentid>3441</parentid>
      <timestamp>2011-06-06T22:58:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="26">{{yes|&lt;b&gt;{{tt|≠0}}&lt;/b&gt;}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/cvt str2float</title>
    <ns>10</ns>
    <id>1722</id>
    <revision>
      <id>87711</id>
      <parentid>87707</parentid>
      <timestamp>2016-09-27T12:38:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>hyphen</comment>
      <text xml:space="preserve" bytes="1884">Function discards any whitespace characters (as determined by {{#switch:{{{1|}}}
 | wide |{{c|std::iswspace()}}
 | both |{{c|std::isspace()}} or {{c|std::iswspace()}}
 | {{c|std::isspace()}}
}}) until first non-whitespace character is found. Then it takes as many characters as possible to form a valid floating-point representation and converts them to a floating-point value. The valid floating-point value can be one of the following:

*decimal floating-point expression. It consists of the following parts:
:* {{mark optional}} plus or minus sign
:* nonempty sequence of decimal digits optionally containing decimal-point character (as determined by the current C {{lc|std::setlocale|locale}}) (defines significand)
:* {{mark optional}} {{ttb|e}} or {{ttb|E}} followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent)

*binary floating-point expression. It consists of the following parts:
:* {{mark optional}} plus or minus sign
:* {{ttb|0x}} or {{ttb|0X}}
:* nonempty sequence of hexadecimal digits optionally containing a decimal-point character (as determined by the current C {{lc|std::setlocale|locale}}) (defines significand)
:* {{mark optional}} {{ttb|p}} or {{ttb|P}} followed with optional minus or plus sign and nonempty sequence of decimal digits (defines exponent)

* infinity expression. It consists of the following parts:
:* {{mark optional}} plus or minus sign
:* {{ttb|INF}} or {{ttb|INFINITY}} ignoring case

* not-a-number expression. It consists of the following parts:
:* {{mark optional}} plus or minus sign
:* {{ttb|NAN}} or {{ttb|NAN(}}''char_sequence''{{ttb|)}} ignoring case of the {{ttb|NAN}} part. ''char_sequence'' can only contain alphanumeric characters. The result is a quiet NaN floating-point value.

* any other expression that may be accepted by the currently installed C {{lc|std::setlocale|locale}}</text>
      <sha1>hrdb19kkxrauesb9wczr363a6q56rk9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/cvt str2int</title>
    <ns>10</ns>
    <id>1723</id>
    <revision>
      <id>79023</id>
      <parentid>8793</parentid>
      <timestamp>2015-06-19T06:21:25Z</timestamp>
      <contributor>
        <username>Gubbins</username>
        <id>3701</id>
      </contributor>
      <minor/>
      <comment>grammar</comment>
      <text xml:space="preserve" bytes="326">Discards any whitespace characters until the first non-whitespace character is found, then takes as many characters as possible to form a valid integer number representation and converts them to an integer value. The valid integer value consists of the following parts:

* {{mark optional}} plus or minus sign
* numeric digits</text>
      <sha1>88rl1uffeq34rzku0bn4k2de18n4sn4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/cvt str2int base</title>
    <ns>10</ns>
    <id>1724</id>
    <revision>
      <id>89782</id>
      <parentid>89781</parentid>
      <timestamp>2017-01-25T18:30:38Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link for C/C++</comment>
      <text xml:space="preserve" bytes="1812">Discards any whitespace characters (as identified by calling {{tt|isspace()}}) until the first non-whitespace character is found, then takes as many characters as possible to form a valid ''base-n'' (where n={{{base}}}) {{#ifeq: {{{u|}}} | true | unsigned}} integer number representation and converts them to an {{#ifeq: {{{{u|}}} | true | unsigned}} integer value. The valid {{#ifeq: {{{u|}}} | true | unsigned}}  integer value consists of the following parts:
* {{mark optional}} plus or minus sign
* {{mark optional}} prefix ({{ttb|0}}) indicating octal base (applies only when the base is {{c|8}} or {{c|0}})
* {{mark optional}} prefix ({{ttb|0x}} or {{ttb|0X}}) indicating hexadecimal base (applies only when the base is {{c|16}} or {{c|0}})
* a sequence of digits

The set of valid values for base is {0,2,3,...,36}. The set of valid digits for base-2 integers is {{tt|{0,1}}}, for base-3 integers is {{tt|{0,1,2}}}, and so on. For bases larger than {{tt|10}}, valid digits include alphabetic characters, starting from {{tt|Aa}} for base-11 integer, to {{tt|Zz}} for base-36 integer. The case of the characters is ignored.

Additional numeric formats may be accepted by the currently installed C {{lc|{{#ifeq:{{get_lang}}|cpp|std::}}setlocale|locale}}.

If the value of {{{base}}} is {{c|0}}, the numeric base is auto-detected: if the prefix is {{ttb|0}}, the base is octal, if the prefix is {{ttb|0x}} or {{ttb|0X}}, the base is hexadecimal, otherwise the base is decimal.

If the minus sign was part of the input sequence, the numeric value calculated from the sequence of digits is negated as if by [[{{get_lang}}/language/operator_arithmetic#Unary_arithmetic_{{#ifeq:{{get_lang}}|cpp|operators}}|unary minus]] in the result type{{#ifeq:{{{u|}}}|true|, which applies unsigned integer wraparound rules}}.</text>
      <sha1>egk9nemitnl4pbu5fdik51scoihy3vg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/dsc basic string</title>
    <ns>10</ns>
    <id>2534</id>
    <revision>
      <id>59870</id>
      <parentid>54883</parentid>
      <timestamp>2013-06-01T06:42:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/dcl list basic string]] to [[Template:cpp/string/dsc basic string]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc tclass | cpp/string/basic_string | stores and manipulates sequences of characters}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc MB CUR MAX</title>
    <ns>10</ns>
    <id>5165</id>
    <revision>
      <id>59872</id>
      <parentid>54884</parentid>
      <timestamp>2013-06-01T06:42:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list MB CUR MAX]] to [[Template:cpp/string/multibyte/dsc MB CUR MAX]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="156">{{dsc | {{dsc member | nolink=true | MB_CUR_MAX }} | maximum number of bytes in a multibyte character in the current C locale&lt;br/&gt;{{mark|macro variable}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc MB LEN MAX</title>
    <ns>10</ns>
    <id>5164</id>
    <revision>
      <id>59874</id>
      <parentid>54887</parentid>
      <timestamp>2013-06-01T06:42:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list MB LEN MAX]] to [[Template:cpp/string/multibyte/dsc MB LEN MAX]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc macro const | MB_LEN_MAX | nolink=true | maximum number of bytes in a multibyte character }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc btowc</title>
    <ns>10</ns>
    <id>4603</id>
    <revision>
      <id>59876</id>
      <parentid>54888</parentid>
      <timestamp>2013-06-01T06:42:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list btowc]] to [[Template:cpp/string/multibyte/dsc btowc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc fun | cpp/string/multibyte/btowc | widens a single-byte narrow character to wide character, if possible}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc c16rtomb</title>
    <ns>10</ns>
    <id>4611</id>
    <revision>
      <id>59878</id>
      <parentid>54889</parentid>
      <timestamp>2013-06-01T06:42:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list c16rtomb]] to [[Template:cpp/string/multibyte/dsc c16rtomb]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/string/multibyte/c16rtomb | convert a 16-bit wide character to narrow multibyte string| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc c32rtomb</title>
    <ns>10</ns>
    <id>4613</id>
    <revision>
      <id>59880</id>
      <parentid>54890</parentid>
      <timestamp>2013-06-01T06:42:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list c32rtomb]] to [[Template:cpp/string/multibyte/dsc c32rtomb]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/string/multibyte/c32rtomb | convert a 32-bit wide character to narrow multibyte string| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mblen</title>
    <ns>10</ns>
    <id>4597</id>
    <revision>
      <id>59882</id>
      <parentid>54893</parentid>
      <timestamp>2013-06-01T06:42:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mblen]] to [[Template:cpp/string/multibyte/dsc mblen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc fun | cpp/string/multibyte/mblen  | returns the number of bytes in the next multibyte character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbrlen</title>
    <ns>10</ns>
    <id>4605</id>
    <revision>
      <id>59884</id>
      <parentid>54896</parentid>
      <timestamp>2013-06-01T06:42:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbrlen]] to [[Template:cpp/string/multibyte/dsc mbrlen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/string/multibyte/mbrlen | returns the number of bytes in the next multibyte character, given state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbrtoc16</title>
    <ns>10</ns>
    <id>4610</id>
    <revision>
      <id>59886</id>
      <parentid>54897</parentid>
      <timestamp>2013-06-01T06:42:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbrtoc16]] to [[Template:cpp/string/multibyte/dsc mbrtoc16]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc fun | cpp/string/multibyte/mbrtoc16 | generate the next 16-bit wide character from a narrow multibyte string | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbrtoc32</title>
    <ns>10</ns>
    <id>4612</id>
    <revision>
      <id>59888</id>
      <parentid>54898</parentid>
      <timestamp>2013-06-01T06:42:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbrtoc32]] to [[Template:cpp/string/multibyte/dsc mbrtoc32]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc fun | cpp/string/multibyte/mbrtoc32 | generate the next 32-bit wide character from a narrow multibyte string| notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbrtowc</title>
    <ns>10</ns>
    <id>4606</id>
    <revision>
      <id>59890</id>
      <parentid>54899</parentid>
      <timestamp>2013-06-01T06:42:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbrtowc]] to [[Template:cpp/string/multibyte/dsc mbrtowc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc fun | cpp/string/multibyte/mbrtowc  | converts the next multibyte character to wide character, given state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbsinit</title>
    <ns>10</ns>
    <id>4602</id>
    <revision>
      <id>59892</id>
      <parentid>54902</parentid>
      <timestamp>2013-06-01T06:42:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbsinit]] to [[Template:cpp/string/multibyte/dsc mbsinit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | cpp/string/multibyte/mbsinit  | checks if the mbstate_t object represents initial shift state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbsrtowcs</title>
    <ns>10</ns>
    <id>4608</id>
    <revision>
      <id>59894</id>
      <parentid>54907</parentid>
      <timestamp>2013-06-01T06:42:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbsrtowcs]] to [[Template:cpp/string/multibyte/dsc mbsrtowcs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | cpp/string/multibyte/mbsrtowcs  | converts a narrow multibyte character string to wide string, given state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbstate t</title>
    <ns>10</ns>
    <id>4614</id>
    <revision>
      <id>59896</id>
      <parentid>54908</parentid>
      <timestamp>2013-06-01T06:42:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbstate t]] to [[Template:cpp/string/multibyte/dsc mbstate t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc class | cpp/string/multibyte/mbstate_t | conversion state information necessary to iterate multibyte character strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbstowcs</title>
    <ns>10</ns>
    <id>4600</id>
    <revision>
      <id>59898</id>
      <parentid>54911</parentid>
      <timestamp>2013-06-01T06:42:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbstowcs]] to [[Template:cpp/string/multibyte/dsc mbstowcs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc fun | cpp/string/multibyte/mbstowcs  | converts a narrow multibyte character string to wide string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc mbtowc</title>
    <ns>10</ns>
    <id>4598</id>
    <revision>
      <id>59900</id>
      <parentid>54912</parentid>
      <timestamp>2013-06-01T06:42:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list mbtowc]] to [[Template:cpp/string/multibyte/dsc mbtowc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | cpp/string/multibyte/mbtowc  | converts the next multibyte character to wide character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc wcrtomb</title>
    <ns>10</ns>
    <id>4607</id>
    <revision>
      <id>59902</id>
      <parentid>54913</parentid>
      <timestamp>2013-06-01T06:42:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list wcrtomb]] to [[Template:cpp/string/multibyte/dsc wcrtomb]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/string/multibyte/wcrtomb  | converts a wide character to its multibyte representation, given state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc wcsrtombs</title>
    <ns>10</ns>
    <id>4609</id>
    <revision>
      <id>59904</id>
      <parentid>54914</parentid>
      <timestamp>2013-06-01T06:42:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list wcsrtombs]] to [[Template:cpp/string/multibyte/dsc wcsrtombs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | cpp/string/multibyte/wcsrtombs  | converts a wide string to narrow multibyte character string, given state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc wcstombs</title>
    <ns>10</ns>
    <id>4601</id>
    <revision>
      <id>59906</id>
      <parentid>54917</parentid>
      <timestamp>2013-06-01T06:42:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list wcstombs]] to [[Template:cpp/string/multibyte/dsc wcstombs]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc fun | cpp/string/multibyte/wcstombs  | converts a wide string to narrow multibyte character string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc wctob</title>
    <ns>10</ns>
    <id>4604</id>
    <revision>
      <id>59908</id>
      <parentid>54924</parentid>
      <timestamp>2013-06-01T06:42:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list wctob]] to [[Template:cpp/string/multibyte/dsc wctob]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc fun | cpp/string/multibyte/wctob | narrows a wide character to a single-byte narrow character, if possible}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/dsc wctomb</title>
    <ns>10</ns>
    <id>4599</id>
    <revision>
      <id>59910</id>
      <parentid>54925</parentid>
      <timestamp>2013-06-01T06:42:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/dcl list wctomb]] to [[Template:cpp/string/multibyte/dsc wctomb]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/string/multibyte/wctomb  | converts a wide character to its multibyte representation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/navbar</title>
    <ns>10</ns>
    <id>3900</id>
    <revision>
      <id>40021</id>
      <parentid>35911</parentid>
      <timestamp>2012-09-28T20:19:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="286">{{navbar
|name         = cpp/container/navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/string/navbar heading
|content2 = cpp/string/navbar content

|heading3 = cpp/string/multibyte/navbar heading
|content3 = cpp/string/multibyte/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/navbar content</title>
    <ns>10</ns>
    <id>4066</id>
    <revision>
      <id>54926</id>
      <parentid>35912</parentid>
      <timestamp>2013-06-01T05:18:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="953">{{nv begin}}
{{nv h2 | Wide/multibyte conversions}}
{{nv ln | cpp/string/multibyte/mbsinit}}
{{nv col begin}}
{{nv ln | cpp/string/multibyte/mbtowc}}
{{nv ln | cpp/string/multibyte/mbstowcs}}
{{nv ln | cpp/string/multibyte/btowc}}
{{nv ln | cpp/string/multibyte/mbrtowc}}
{{nv ln | cpp/string/multibyte/mbsrtowcs}}
{{nv ln | cpp/string/multibyte/mbrtoc16|notes={{mark c++11}}}}
{{nv ln | cpp/string/multibyte/mbrtoc32|notes={{mark c++11}}}}
{{nv ln | cpp/string/multibyte/mblen}}
{{nv col next}}
{{nv ln | cpp/string/multibyte/wctomb}}
{{nv ln | cpp/string/multibyte/wcstombs}}
{{nv ln | cpp/string/multibyte/wctob}}
{{nv ln | cpp/string/multibyte/wcrtomb}}
{{nv ln | cpp/string/multibyte/wcsrtombs}}
{{nv ln | cpp/string/multibyte/c16rtomb|notes={{mark c++11}}}}
{{nv ln | cpp/string/multibyte/c32rtomb|notes={{mark c++11}}}}
{{nv ln | cpp/string/multibyte/mbrlen}}
{{nv col end}}
{{nv h2 | Types}}
{{nv ln | cpp/string/multibyte/mbstate_t}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/multibyte/navbar heading</title>
    <ns>10</ns>
    <id>3901</id>
    <revision>
      <id>35913</id>
      <parentid>14512</parentid>
      <timestamp>2012-06-15T22:34:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/multibyte/sidebar heading]] to [[Template:cpp/string/multibyte/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="60">[[cpp/string/multibyte | Null-terminated multibyte strings]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/navbar</title>
    <ns>10</ns>
    <id>21</id>
    <revision>
      <id>40022</id>
      <parentid>38247</parentid>
      <timestamp>2012-09-28T20:19:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="150">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/string/navbar heading
|content2 = cpp/string/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/navbar content</title>
    <ns>10</ns>
    <id>22</id>
    <revision>
      <id>84398</id>
      <parentid>54929</parentid>
      <timestamp>2016-03-17T22:46:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>starting on string_view</comment>
      <text xml:space="preserve" bytes="357">{{nv begin}}
{{nv h1 | Null-terminated strings}}
{{nv | [[cpp/string/byte | Byte strings]] }}
{{nv | [[cpp/string/multibyte | Multibyte strings]] }}
{{nv | [[cpp/string/wide | Wide strings]] }}
{{nv h1 | Classes}}
{{nv ln | cpp/string/basic_string}}
{{nv ln | cpp/string/basic_string_view|notes={{mark c++17}}}}
{{nv ln | cpp/string/char_traits}}
{{nv end}}</text>
      <sha1>39ngv6ucrv2o8ob0lkjzlrraynm0jxa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/navbar heading</title>
    <ns>10</ns>
    <id>23</id>
    <revision>
      <id>35915</id>
      <parentid>45</parentid>
      <timestamp>2012-06-15T22:34:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/sidebar heading]] to [[Template:cpp/string/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="32">[[cpp/string | Strings library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswalnum</title>
    <ns>10</ns>
    <id>2602</id>
    <revision>
      <id>59912</id>
      <parentid>54930</parentid>
      <timestamp>2013-06-01T06:42:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswalnum]] to [[Template:cpp/string/wide/dsc iswalnum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc fun | cpp/string/wide/iswalnum | checks if a wide character is alphanumeric}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswalpha</title>
    <ns>10</ns>
    <id>2603</id>
    <revision>
      <id>59914</id>
      <parentid>54933</parentid>
      <timestamp>2013-06-01T06:42:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswalpha]] to [[Template:cpp/string/wide/dsc iswalpha]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc fun | cpp/string/wide/iswalpha | checks if a wide character is alphabetic}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswblank</title>
    <ns>10</ns>
    <id>2930</id>
    <revision>
      <id>59916</id>
      <parentid>54934</parentid>
      <timestamp>2013-06-01T06:42:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswblank]] to [[Template:cpp/string/wide/dsc iswblank]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | cpp/string/wide/iswblank | checks if a wide character is a blank character|notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswcntrl</title>
    <ns>10</ns>
    <id>2608</id>
    <revision>
      <id>59918</id>
      <parentid>54935</parentid>
      <timestamp>2013-06-01T06:42:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswcntrl]] to [[Template:cpp/string/wide/dsc iswcntrl]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc fun | cpp/string/wide/iswcntrl | checks if a wide character is a control character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswctype</title>
    <ns>10</ns>
    <id>2965</id>
    <revision>
      <id>59920</id>
      <parentid>54936</parentid>
      <timestamp>2013-06-01T06:42:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswctype]] to [[Template:cpp/string/wide/dsc iswctype]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc fun | cpp/string/wide/iswctype | classifies a wide character according to the specified LC_CTYPE category  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswdigit</title>
    <ns>10</ns>
    <id>2606</id>
    <revision>
      <id>59922</id>
      <parentid>54939</parentid>
      <timestamp>2013-06-01T06:42:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswdigit]] to [[Template:cpp/string/wide/dsc iswdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc fun | cpp/string/wide/iswdigit | checks if a wide character is a digit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswgraph</title>
    <ns>10</ns>
    <id>2609</id>
    <revision>
      <id>59924</id>
      <parentid>54942</parentid>
      <timestamp>2013-06-01T06:42:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswgraph]] to [[Template:cpp/string/wide/dsc iswgraph]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc fun | cpp/string/wide/iswgraph | checks if a wide character is a graphical character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswlower</title>
    <ns>10</ns>
    <id>2604</id>
    <revision>
      <id>59926</id>
      <parentid>54943</parentid>
      <timestamp>2013-06-01T06:42:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswlower]] to [[Template:cpp/string/wide/dsc iswlower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc fun | cpp/string/wide/iswlower | checks if a wide character is lowercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswprint</title>
    <ns>10</ns>
    <id>2611</id>
    <revision>
      <id>59928</id>
      <parentid>54944</parentid>
      <timestamp>2013-06-01T06:42:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswprint]] to [[Template:cpp/string/wide/dsc iswprint]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc fun | cpp/string/wide/iswprint | checks if a wide character is a printing character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswpunct</title>
    <ns>10</ns>
    <id>2612</id>
    <revision>
      <id>59930</id>
      <parentid>54945</parentid>
      <timestamp>2013-06-01T06:42:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswpunct]] to [[Template:cpp/string/wide/dsc iswpunct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc fun | cpp/string/wide/iswpunct | checks if a wide character is a punctuation character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswspace</title>
    <ns>10</ns>
    <id>2610</id>
    <revision>
      <id>59932</id>
      <parentid>54948</parentid>
      <timestamp>2013-06-01T06:42:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswspace]] to [[Template:cpp/string/wide/dsc iswspace]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/string/wide/iswspace | checks if a wide character is a space character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswupper</title>
    <ns>10</ns>
    <id>2605</id>
    <revision>
      <id>59934</id>
      <parentid>54953</parentid>
      <timestamp>2013-06-01T06:42:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswupper]] to [[Template:cpp/string/wide/dsc iswupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc fun | cpp/string/wide/iswupper | checks if a wide character is an uppercase character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc iswxdigit</title>
    <ns>10</ns>
    <id>2607</id>
    <revision>
      <id>59936</id>
      <parentid>54958</parentid>
      <timestamp>2013-06-01T06:42:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list iswxdigit]] to [[Template:cpp/string/wide/dsc iswxdigit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc fun | cpp/string/wide/iswxdigit | checks if a character is a hexadecimal character}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc towctrans</title>
    <ns>10</ns>
    <id>2963</id>
    <revision>
      <id>59938</id>
      <parentid>54961</parentid>
      <timestamp>2013-06-01T06:42:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list towctrans]] to [[Template:cpp/string/wide/dsc towctrans]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc fun | cpp/string/wide/towctrans | performs character mapping according to the specified LC_CTYPE mapping category }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc towlower</title>
    <ns>10</ns>
    <id>2613</id>
    <revision>
      <id>59940</id>
      <parentid>54962</parentid>
      <timestamp>2013-06-01T06:42:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list towlower]] to [[Template:cpp/string/wide/dsc towlower]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc fun | cpp/string/wide/towlower | converts a wide character to lowercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc towupper</title>
    <ns>10</ns>
    <id>2614</id>
    <revision>
      <id>59942</id>
      <parentid>54965</parentid>
      <timestamp>2013-06-01T06:42:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list towupper]] to [[Template:cpp/string/wide/dsc towupper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc fun | cpp/string/wide/towupper | converts a wide character to uppercase}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcscat</title>
    <ns>10</ns>
    <id>3769</id>
    <revision>
      <id>59944</id>
      <parentid>54968</parentid>
      <timestamp>2013-06-01T06:42:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcscat]] to [[Template:cpp/string/wide/dsc wcscat]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc fun | cpp/string/wide/wcscat | appends a copy of one wide string to another }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcschr</title>
    <ns>10</ns>
    <id>3776</id>
    <revision>
      <id>59946</id>
      <parentid>54971</parentid>
      <timestamp>2013-06-01T06:43:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcschr]] to [[Template:cpp/string/wide/dsc wcschr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/string/wide/wcschr | finds the first occurrence of a wide character in a wide string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcscmp</title>
    <ns>10</ns>
    <id>3773</id>
    <revision>
      <id>59948</id>
      <parentid>54972</parentid>
      <timestamp>2013-06-01T06:43:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcscmp]] to [[Template:cpp/string/wide/dsc wcscmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc fun | cpp/string/wide/wcscmp | compares two wide strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcscoll</title>
    <ns>10</ns>
    <id>3775</id>
    <revision>
      <id>59950</id>
      <parentid>54973</parentid>
      <timestamp>2013-06-01T06:43:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcscoll]] to [[Template:cpp/string/wide/dsc wcscoll]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | cpp/string/wide/wcscoll | compares two wide strings in accordance to the current locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcscpy</title>
    <ns>10</ns>
    <id>3767</id>
    <revision>
      <id>59952</id>
      <parentid>54974</parentid>
      <timestamp>2013-06-01T06:43:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcscpy]] to [[Template:cpp/string/wide/dsc wcscpy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc fun | cpp/string/wide/wcscpy | copies one wide string to another}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcscspn</title>
    <ns>10</ns>
    <id>3779</id>
    <revision>
      <id>59954</id>
      <parentid>54977</parentid>
      <timestamp>2013-06-01T06:43:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcscspn]] to [[Template:cpp/string/wide/dsc wcscspn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc fun | cpp/string/wide/wcscspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the wide ''not'' found in another wide string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcslen</title>
    <ns>10</ns>
    <id>3772</id>
    <revision>
      <id>59956</id>
      <parentid>54982</parentid>
      <timestamp>2013-06-01T06:43:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcslen]] to [[Template:cpp/string/wide/dsc wcslen]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc fun | cpp/string/wide/wcslen | returns the length of a wide string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcsncat</title>
    <ns>10</ns>
    <id>3770</id>
    <revision>
      <id>59958</id>
      <parentid>54987</parentid>
      <timestamp>2013-06-01T06:43:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcsncat]] to [[Template:cpp/string/wide/dsc wcsncat]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/string/wide/wcsncat | appends a certain amount of wide characters from one wide string to another }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcsncmp</title>
    <ns>10</ns>
    <id>3774</id>
    <revision>
      <id>59960</id>
      <parentid>54988</parentid>
      <timestamp>2013-06-01T06:43:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcsncmp]] to [[Template:cpp/string/wide/dsc wcsncmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | cpp/string/wide/wcsncmp | compares a certain amount of characters from two wide strings}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcsncpy</title>
    <ns>10</ns>
    <id>3768</id>
    <revision>
      <id>59962</id>
      <parentid>54989</parentid>
      <timestamp>2013-06-01T06:43:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcsncpy]] to [[Template:cpp/string/wide/dsc wcsncpy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | cpp/string/wide/wcsncpy | copies a certain amount of wide characters from one string to another }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcspbrk</title>
    <ns>10</ns>
    <id>3780</id>
    <revision>
      <id>59964</id>
      <parentid>54992</parentid>
      <timestamp>2013-06-01T06:43:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcspbrk]] to [[Template:cpp/string/wide/dsc wcspbrk]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc fun | cpp/string/wide/wcspbrk | finds the first location of any wide character in one wide string, in another wide string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcsrchr</title>
    <ns>10</ns>
    <id>3777</id>
    <revision>
      <id>59966</id>
      <parentid>54993</parentid>
      <timestamp>2013-06-01T06:43:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcsrchr]] to [[Template:cpp/string/wide/dsc wcsrchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/string/wide/wcsrchr | finds the last occurrence of a wide character in a wide string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcsspn</title>
    <ns>10</ns>
    <id>3778</id>
    <revision>
      <id>59968</id>
      <parentid>54996</parentid>
      <timestamp>2013-06-01T06:43:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcsspn]] to [[Template:cpp/string/wide/dsc wcsspn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc fun | cpp/string/wide/wcsspn | returns the length of the maximum initial segment that consists &lt;br&gt; of only the wide characters found in another wide string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcsstr</title>
    <ns>10</ns>
    <id>3781</id>
    <revision>
      <id>59970</id>
      <parentid>54997</parentid>
      <timestamp>2013-06-01T06:43:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcsstr]] to [[Template:cpp/string/wide/dsc wcsstr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | cpp/string/wide/wcsstr | finds the first occurrence of a wide string within another wide string}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcstof</title>
    <ns>10</ns>
    <id>4739</id>
    <revision>
      <id>59972</id>
      <parentid>54998</parentid>
      <timestamp>2013-06-01T06:43:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcstof]] to [[Template:cpp/string/wide/dsc wcstof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc fun | cpp/string/wide/wcstof | title=wcstof&lt;br&gt;wcstod&lt;br&gt;wcstold | converts a wide string to a floating point value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcstoimax</title>
    <ns>10</ns>
    <id>3660</id>
    <revision>
      <id>59974</id>
      <parentid>55001</parentid>
      <timestamp>2013-06-01T06:43:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcstoimax]] to [[Template:cpp/string/wide/dsc wcstoimax]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="185">{{dsc fun | cpp/string/wide/wcstoimax | title=wcstoimax&lt;br&gt;wcstoumax | converts a wide string to {{lc|std::intmax_t}} or {{lc|std::uintmax_t}} | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcstok</title>
    <ns>10</ns>
    <id>3782</id>
    <revision>
      <id>59976</id>
      <parentid>55002</parentid>
      <timestamp>2013-06-01T06:43:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcstok]] to [[Template:cpp/string/wide/dsc wcstok]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc fun | cpp/string/wide/wcstok | finds the next token in a wide string }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcstol</title>
    <ns>10</ns>
    <id>4737</id>
    <revision>
      <id>59978</id>
      <parentid>55005</parentid>
      <timestamp>2013-06-01T06:43:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcstol]] to [[Template:cpp/string/wide/dsc wcstol]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | cpp/string/wide/wcstol | title=wcstol&lt;br&gt;wcstoll | converts a wide string to an integer value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcstoul</title>
    <ns>10</ns>
    <id>4738</id>
    <revision>
      <id>59980</id>
      <parentid>55006</parentid>
      <timestamp>2013-06-01T06:43:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcstoul]] to [[Template:cpp/string/wide/dsc wcstoul]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | cpp/string/wide/wcstoul | title=wcstoul&lt;br&gt;wcstoull | converts a wide string to an unsigned integer value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wcsxfrm</title>
    <ns>10</ns>
    <id>3771</id>
    <revision>
      <id>59982</id>
      <parentid>55007</parentid>
      <timestamp>2013-06-01T06:43:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wcsxfrm]] to [[Template:cpp/string/wide/dsc wcsxfrm]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc fun | cpp/string/wide/wcsxfrm | transform a wide string so that wcscmp would produce the same result as wcscoll }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wctrans</title>
    <ns>10</ns>
    <id>2964</id>
    <revision>
      <id>59984</id>
      <parentid>55008</parentid>
      <timestamp>2013-06-01T06:43:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wctrans]] to [[Template:cpp/string/wide/dsc wctrans]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc fun | cpp/string/wide/wctrans | looks up a character mapping category in the current C locale }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wctype</title>
    <ns>10</ns>
    <id>2966</id>
    <revision>
      <id>59986</id>
      <parentid>55011</parentid>
      <timestamp>2013-06-01T06:43:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wctype]] to [[Template:cpp/string/wide/dsc wctype]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc fun | cpp/string/wide/wctype | looks up a character classification category in the current C locale}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wmemchr</title>
    <ns>10</ns>
    <id>3786</id>
    <revision>
      <id>59988</id>
      <parentid>55014</parentid>
      <timestamp>2013-06-01T06:43:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wmemchr]] to [[Template:cpp/string/wide/dsc wmemchr]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc fun | cpp/string/wide/wmemchr | finds the first occurrence of a wide character in a wide character array }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wmemcmp</title>
    <ns>10</ns>
    <id>3785</id>
    <revision>
      <id>59990</id>
      <parentid>55015</parentid>
      <timestamp>2013-06-01T06:43:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wmemcmp]] to [[Template:cpp/string/wide/dsc wmemcmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc fun | cpp/string/wide/wmemcmp | compares a certain amount of wide characters from two arrays }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wmemcpy</title>
    <ns>10</ns>
    <id>3783</id>
    <revision>
      <id>59992</id>
      <parentid>55018</parentid>
      <timestamp>2013-06-01T06:43:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wmemcpy]] to [[Template:cpp/string/wide/dsc wmemcpy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | cpp/string/wide/wmemcpy | copies a certain amount of wide characters between two non-overlapping arrays }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wmemmove</title>
    <ns>10</ns>
    <id>3784</id>
    <revision>
      <id>59994</id>
      <parentid>55019</parentid>
      <timestamp>2013-06-01T06:43:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wmemmove]] to [[Template:cpp/string/wide/dsc wmemmove]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc fun | cpp/string/wide/wmemmove | copies a certain amount of wide characters between two, possibly overlapping, arrays }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/dsc wmemset</title>
    <ns>10</ns>
    <id>3787</id>
    <revision>
      <id>59996</id>
      <parentid>55022</parentid>
      <timestamp>2013-06-01T06:43:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/dcl list wmemset]] to [[Template:cpp/string/wide/dsc wmemset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc fun | cpp/string/wide/wmemset | copies the given wide character to every position in a wide character array }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/navbar</title>
    <ns>10</ns>
    <id>24</id>
    <revision>
      <id>40023</id>
      <parentid>35916</parentid>
      <timestamp>2012-09-28T20:19:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="239">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/string/navbar heading
|content2 = cpp/string/navbar content

|heading3 = cpp/string/wide/navbar heading
|content3 = cpp/string/wide/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/navbar content</title>
    <ns>10</ns>
    <id>3382</id>
    <revision>
      <id>76517</id>
      <parentid>55025</parentid>
      <timestamp>2015-02-19T20:58:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>missing wcstoimax</comment>
      <text xml:space="preserve" bytes="2028">{{nv begin}}
{{nv h1 | Functions}}

{{nv h2 | Character manipulation}}
{{nv col begin}}
{{nv ln | cpp/string/wide/iswalnum}}
{{nv ln | cpp/string/wide/iswalpha}}
{{nv ln | cpp/string/wide/iswlower}}
{{nv ln | cpp/string/wide/iswupper}}
{{nv ln | cpp/string/wide/iswdigit}}
{{nv ln | cpp/string/wide/iswxdigit}}
{{nv ln | cpp/string/wide/iswblank|notes={{mark c++11}}}}
{{nv ln | cpp/string/wide/wctype}}
{{nv ln | cpp/string/wide/iswctype}}
{{nv col next}}
{{nv ln | cpp/string/wide/iswcntrl}}
{{nv ln | cpp/string/wide/iswgraph}}
{{nv ln | cpp/string/wide/iswspace}}
{{nv ln | cpp/string/wide/iswprint}}
{{nv ln | cpp/string/wide/iswpunct}}
{{nv ln | cpp/string/wide/towlower}}
{{nv ln | cpp/string/wide/towupper}}
{{nv ln | cpp/string/wide/wctrans}}
{{nv ln | cpp/string/wide/towctrans}}
{{nv col end}}

{{nv h2 | Conversions to numeric formats}}
{{nv col begin}}
{{nv ln | cpp/string/wide/wcstol|wcstol|wcstoll}}
{{nv ln | cpp/string/wide/wcstoul|wcstoul|wcstoull}}
{{nv col next}}
{{nv ln | cpp/string/wide/wcstof|wcstof|wcstod|wcstold}}
{{nv ln | cpp/string/wide/wcstoimax|wcstoimax|wcstouimax|notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv col end}}

{{nv h2 | String manipulation}}
{{nv col begin}}
{{nv ln | cpp/string/wide/wcslen}}
{{nv ln | cpp/string/wide/wcscpy}}
{{nv ln | cpp/string/wide/wcsncpy}}
{{nv ln | cpp/string/wide/wcscat}}
{{nv ln | cpp/string/wide/wcsncat}}
{{nv ln | cpp/string/wide/wcscmp}}
{{nv ln | cpp/string/wide/wcscoll}}
{{nv ln | cpp/string/wide/wcsncmp}}
{{nv col next}}
{{nv ln | cpp/string/wide/wcsxfrm}}
{{nv ln | cpp/string/wide/wcschr}}
{{nv ln | cpp/string/wide/wcsrchr}}
{{nv ln | cpp/string/wide/wcspbrk}}
{{nv ln | cpp/string/wide/wcsspn}}
{{nv ln | cpp/string/wide/wcscspn}}
{{nv ln | cpp/string/wide/wcsstr}}
{{nv ln | cpp/string/wide/wcstok}}
{{nv col end}}

{{nv h2 | Array manipulation}}
{{nv ln | cpp/string/wide/wmemcpy}}
{{nv ln | cpp/string/wide/wmemmove}}
{{nv ln | cpp/string/wide/wmemcmp}}
{{nv ln | cpp/string/wide/wmemchr}}
{{nv ln | cpp/string/wide/wmemset}}

{{nv end}}</text>
      <sha1>oe692nqav4qnnckqtq794lqpir03w0u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/string/wide/navbar heading</title>
    <ns>10</ns>
    <id>25</id>
    <revision>
      <id>35918</id>
      <parentid>14487</parentid>
      <timestamp>2012-06-15T22:34:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/string/wide/sidebar heading]] to [[Template:cpp/string/wide/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="50">[[cpp/string/wide | Null-terminated wide strings]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread//navbar</title>
    <ns>10</ns>
    <id>4493</id>
    <revision>
      <id>35919</id>
      <parentid>15974</parentid>
      <timestamp>2012-06-15T22:34:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread//sidebar]] to [[Template:cpp/thread//navbar]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread//title</title>
    <ns>10</ns>
    <id>4494</id>
    <revision>
      <id>15975</id>
      <timestamp>2011-12-18T16:41:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">&lt;onlyinclude&gt;{{cpp//title | n={{{n|}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable any/navbar</title>
    <ns>10</ns>
    <id>2391</id>
    <revision>
      <id>40025</id>
      <parentid>35616</parentid>
      <timestamp>2012-09-28T20:19:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="275">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/condition_variable_any/navbar heading
|content3 = cpp/thread/condition_variable_any/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable any/navbar content</title>
    <ns>10</ns>
    <id>2921</id>
    <revision>
      <id>78697</id>
      <parentid>55064</parentid>
      <timestamp>2015-06-04T09:01:56Z</timestamp>
      <contributor>
        <ip>124.163.209.102</ip>
      </contributor>
      <comment>rmv condition_variable_any::native_handle</comment>
      <text xml:space="preserve" bytes="543">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/condition_variable_any/condition_variable_any}}
{{nv mem ln | cpp/thread/condition_variable_any/~condition_variable_any}}

{{nv h2 | Notification}}
{{nv mem ln | cpp/thread/condition_variable_any/notify_one}}
{{nv mem ln | cpp/thread/condition_variable_any/notify_all}}

{{nv h2 | Waiting}}
{{nv mem ln | cpp/thread/condition_variable_any/wait}}
{{nv mem ln | cpp/thread/condition_variable_any/wait_for}}
{{nv mem ln | cpp/thread/condition_variable_any/wait_until}}
{{nv end}}</text>
      <sha1>7tpeft4oarumqoor1so3aryqxoeos9x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable any/navbar heading</title>
    <ns>10</ns>
    <id>2390</id>
    <revision>
      <id>47766</id>
      <parentid>35612</parentid>
      <timestamp>2013-05-16T20:24:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="69">{{ltt|cpp/thread/condition_variable_any|std::condition_variable_any}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable any/title</title>
    <ns>10</ns>
    <id>5028</id>
    <revision>
      <id>18201</id>
      <timestamp>2012-01-25T21:37:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">&lt;onlyinclude&gt;{{cpp/title | n=condition_variable_any::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/constructor</title>
    <ns>10</ns>
    <id>5111</id>
    <revision>
      <id>90346</id>
      <parentid>68883</parentid>
      <timestamp>2017-02-21T21:40:42Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="759">{{cpp/thread/{{{1|}}}/title|{{{1|}}}}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
{{{1|}}}();
}}
{{dcl | num=2 | since=c++11 |1=
{{{1|}}}(const {{{1|}}}&amp;) = delete;
}}
{{dcl end}}

1) Constructs an object of type {{tt|std::{{{1|}}}}}.

2) Copy constructor is deleted.

===Parameters===
(none)

===Exceptions===
1) May throw {{lc|std::system_error}} with {{lc|std::error_condition}} equal to {{lc|std::errc::operation_not_permitted}} if the thread has no privilege to create a condition variable, {{lc|std::errc::resource_unavailable_try_again}} if a non-memory resource limitation prevents this initialization, or another implementation-defined value.

===See also===
{{dsc begin}}
{{dsc see c | c/thread/cnd_init}}
{{dsc end}}</text>
      <sha1>ioazxiq6xegkb7h7lujnl7hx282bh7y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/destructor</title>
    <ns>10</ns>
    <id>5113</id>
    <revision>
      <id>90348</id>
      <parentid>63610</parentid>
      <timestamp>2017-02-21T21:45:03Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="839">{{cpp/thread/{{{1|}}}/title|~{{{1|}}}}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
~{{{1|}}}();
}}
{{dcl end}}

Destroys the object of type {{c|std::{{{1|}}}}}

It is only safe to invoke the destructor if all threads have been notified. It is not required that they have exited their respective wait functions: some threads may still be waiting to reacquire the associated lock, or may be waiting to be scheduled to run after reacquiring it.

The programmer must ensure that no threads attempt to wait on {{c|*this}} once the destructor has been started, especially when the waiting threads are calling the wait functions in a loop or are using the overloads of the wait functions that take a predicate.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc see c | c/thread/cnd_destroy}}
{{dsc end}}</text>
      <sha1>siatxleelru0z9f980qqt3s3yolpv4r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc constructor</title>
    <ns>10</ns>
    <id>2404</id>
    <revision>
      <id>59998</id>
      <parentid>55029</parentid>
      <timestamp>2013-06-01T06:43:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list constructor]] to [[Template:cpp/thread/condition variable/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem ctor | cpp/thread/{{{1|}}}/{{{1|}}} | constructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc destructor</title>
    <ns>10</ns>
    <id>2405</id>
    <revision>
      <id>60000</id>
      <parentid>55032</parentid>
      <timestamp>2013-06-01T06:43:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list destructor]] to [[Template:cpp/thread/condition variable/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem dtor | cpp/thread/{{{1|}}}/~{{{1|}}} | destructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc native handle</title>
    <ns>10</ns>
    <id>2412</id>
    <revision>
      <id>60002</id>
      <parentid>55033</parentid>
      <timestamp>2013-06-01T06:43:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list native handle]] to [[Template:cpp/thread/condition variable/dsc native handle]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/thread/{{{1|}}}/native_handle | returns the native handle}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc notify all</title>
    <ns>10</ns>
    <id>2407</id>
    <revision>
      <id>60004</id>
      <parentid>55034</parentid>
      <timestamp>2013-06-01T06:43:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list notify all]] to [[Template:cpp/thread/condition variable/dsc notify all]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/thread/{{{1|}}}/notify_all | notifies all waiting threads}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc notify one</title>
    <ns>10</ns>
    <id>2408</id>
    <revision>
      <id>60006</id>
      <parentid>55037</parentid>
      <timestamp>2013-06-01T06:43:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list notify one]] to [[Template:cpp/thread/condition variable/dsc notify one]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/thread/{{{1|}}}/notify_one | notifies one waiting thread}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc operator=</title>
    <ns>10</ns>
    <id>2406</id>
    <revision>
      <id>60008</id>
      <parentid>55040</parentid>
      <timestamp>2013-06-01T06:43:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list operator=]] to [[Template:cpp/thread/condition variable/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc wait</title>
    <ns>10</ns>
    <id>2409</id>
    <revision>
      <id>60010</id>
      <parentid>55041</parentid>
      <timestamp>2013-06-01T06:43:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list wait]] to [[Template:cpp/thread/condition variable/dsc wait]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/thread/{{{1|}}}/wait | blocks the current thread until the condition variable is woken up}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc wait for</title>
    <ns>10</ns>
    <id>2410</id>
    <revision>
      <id>60012</id>
      <parentid>55042</parentid>
      <timestamp>2013-06-01T06:43:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list wait for]] to [[Template:cpp/thread/condition variable/dsc wait for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="156">{{dsc mem fun | cpp/thread/{{{1|}}}/wait_for | blocks the current thread until the condition variable is woken up or after the specified timeout duration }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/dsc wait until</title>
    <ns>10</ns>
    <id>2411</id>
    <revision>
      <id>60014</id>
      <parentid>55043</parentid>
      <timestamp>2013-06-01T06:43:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/condition variable/dcl list wait until]] to [[Template:cpp/thread/condition variable/dsc wait until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc mem fun | cpp/thread/{{{1|}}}/wait_until | blocks the current thread until the condition variable is woken up or until specified time point has been reached }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/example1</title>
    <ns>10</ns>
    <id>5049</id>
    <revision>
      <id>64626</id>
      <parentid>47954</parentid>
      <timestamp>2013-08-23T16:10:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>de-pessimize the example, protect cerr in the signalling thread, and comment mutex usage</comment>
      <text xml:space="preserve" bytes="1248">{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;condition_variable&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

std::{{{1|}}} cv;
std::mutex cv_m; // This mutex is used for three purposes:
                 // 1) to synchronize accesses to i
                 // 2) to synchronize accesses to std::cerr
                 // 3) for the condition variable cv
int i = 0;

void waits()
{
    std::unique_lock&lt;std::mutex&gt; lk(cv_m);
    std::cerr &lt;&lt; &quot;Waiting... \n&quot;;
    cv.wait(lk, []{return i == 1;});
    std::cerr &lt;&lt; &quot;...finished waiting. i == 1\n&quot;;
}

void signals()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    {
        std::lock_guard&lt;std::mutex&gt; lk(cv_m);
        std::cerr &lt;&lt; &quot;Notifying...\n&quot;;
    }
    cv.notify_all();

    std::this_thread::sleep_for(std::chrono::seconds(1));

    {
        std::lock_guard&lt;std::mutex&gt; lk(cv_m);
        i = 1;
        std::cerr &lt;&lt; &quot;Notifying again...\n&quot;;
    }
    cv.notify_all();
}

int main()
{
    std::thread t1(waits), t2(waits), t3(waits), t4(signals);
    t1.join(); 
    t2.join(); 
    t3.join();
    t4.join();
}
 | output=
Waiting...
Waiting...
Waiting...
Notifying...
Notifying again...
...finished waiting. i == 1
...finished waiting. i == 1
...finished waiting. i == 1
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/native handle</title>
    <ns>10</ns>
    <id>5125</id>
    <revision>
      <id>63611</id>
      <parentid>60914</parentid>
      <timestamp>2013-07-10T01:45:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="604">{{cpp/thread/{{{1|}}}/title|native_handle}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
native_handle_type native_handle();
}}
{{dcl end}}

Accesses the native handle of {{c|*this}}.

The meaning and the type of the result of this function is implementation-defined. On a POSIX system, this may be a value of type {{c|pthread_cond_t*}}. On a Windows system, this may be a {{c|PCONDITION_VARIABLE}}.

===Parameters===
(none)

===Return value===
The native handle of this condition variable.

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc native_handle}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/navbar</title>
    <ns>10</ns>
    <id>2389</id>
    <revision>
      <id>47769</id>
      <parentid>40024</parentid>
      <timestamp>2013-05-16T20:25:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="265">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/condition_variable/navbar heading
|content3 = cpp/thread/condition_variable/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/navbar content</title>
    <ns>10</ns>
    <id>2920</id>
    <revision>
      <id>55050</id>
      <parentid>35922</parentid>
      <timestamp>2013-06-01T05:19:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="594">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/condition_variable/condition_variable}}
{{nv mem ln | cpp/thread/condition_variable/~condition_variable}}

{{nv h2 | Notification}}
{{nv mem ln | cpp/thread/condition_variable/notify_one}}
{{nv mem ln | cpp/thread/condition_variable/notify_all}}

{{nv h2 | Waiting}}
{{nv mem ln | cpp/thread/condition_variable/wait}}
{{nv mem ln | cpp/thread/condition_variable/wait_for}}
{{nv mem ln | cpp/thread/condition_variable/wait_until}}

{{nv h2 | Native handle}}
{{nv mem ln | cpp/thread/condition_variable/native handle}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/navbar heading</title>
    <ns>10</ns>
    <id>2392</id>
    <revision>
      <id>48091</id>
      <parentid>35923</parentid>
      <timestamp>2013-05-18T18:09:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="61">{{ltt|cpp/thread/condition_variable|std::condition_variable}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/notify all</title>
    <ns>10</ns>
    <id>5117</id>
    <revision>
      <id>91955</id>
      <parentid>90352</parentid>
      <timestamp>2017-03-31T20:17:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="852">{{cpp/thread/{{{1|}}}/title|notify_all}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void notify_all();
}}
{{dcl end}}

Unblocks all threads currently waiting for {{c|*this}}.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Notes===
{{cpp/thread/condition_variable/single_total_order_note}}

The notifying thread does not need to hold the lock on the same mutex as the one held by the waiting thread(s); in fact doing so is a pessimization, since the notified thread would immediately block again, waiting for the notifying thread to release the lock.

===Example===
{{include | cpp/thread/condition_variable/example1|{{{1|}}}}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc notify_one | {{{1|}}}}}
{{dsc see c | c/thread/cnd_broadcast}}
{{dsc end}}</text>
      <sha1>ih049ihgp5ms4w38gh1haixsmt1g4qr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/notify one</title>
    <ns>10</ns>
    <id>5115</id>
    <revision>
      <id>91954</id>
      <parentid>90350</parentid>
      <timestamp>2017-03-31T20:17:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2288">{{cpp/thread/{{{1|}}}/title|notify_one}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void notify_one();
}}
{{dcl end}}

If any threads are waiting on {{c|*this}}, calling {{tt|notify_one}} unblocks one of the waiting threads.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Notes===
{{cpp/thread/condition_variable/single_total_order_note}}

The notifying thread does not need to hold the lock on the same mutex as the one held by the waiting thread(s); in fact doing so is a pessimization, since the notified thread would immediately block again, waiting for the notifying thread to release the lock. However, some implementations (in particular many implementations of pthreads) recognize this situation and avoid this &quot;hurry up and wait&quot; scenario by transferring the waiting thread from the condition variable's queue directly to the queue of the mutex within the notify call, without waking it up.

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;condition_variable&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

std::{{{1}}} cv;
std::mutex cv_m;
int i = 0;
bool done = false;

void waits()
{
    std::unique_lock&lt;std::mutex&gt; lk(cv_m);
    std::cout &lt;&lt; &quot;Waiting... \n&quot;;
    cv.wait(lk, []{return i == 1;});
    std::cout &lt;&lt; &quot;...finished waiting. i == 1\n&quot;;
    done = true;
}

void signals()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout &lt;&lt; &quot;Notifying falsely...\n&quot;;
    cv.notify_one(); // waiting thread is notified with i == 0.
                     // cv.wait wakes up, checks i, and goes back to waiting

    std::unique_lock&lt;std::mutex&gt; lk(cv_m);
    i = 1;
    while (!done) 
    {
        std::cout &lt;&lt; &quot;Notifying true change...\n&quot;;
        lk.unlock();
        cv.notify_one(); // waiting thread is notified with i == 1, cv.wait returns
        std::this_thread::sleep_for(std::chrono::seconds(1));
        lk.lock();
    }
}

int main()
{
    std::thread t1(waits), t2(signals);
    t1.join(); 
    t2.join();
}
 | output=
Waiting... 
Notifying falsely...
Notifying true change...
...finished waiting. i == 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc notify_all | {{{1|}}}}}
{{dsc see c | c/thread/cnd_signal}}
{{dsc end}}</text>
      <sha1>48fen26fl7q835fc7d5jjvuudhg5i1e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/single total order note</title>
    <ns>10</ns>
    <id>15526</id>
    <revision>
      <id>91987</id>
      <parentid>86034</parentid>
      <timestamp>2017-04-01T05:38:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="636">The effects of {{tt|notify_one()}}/{{tt|notify_all()}} and each of the three atomic parts of  {{tt|wait()}}/{{tt|wait_for()}}/{{tt|wait_until()}} (unlock+wait, wakeup, and lock) take place in a single total order that can be viewed as [[cpp/atomic/memory_order#Modification_order|modification order]] of an atomic variable: the order is specific to this individual condition_variable. This makes it impossible for {{tt|notify_one()}} to, for example, be delayed and unblock a thread that started waiting just after the call to {{tt|notify_one()}} was made. {{mark unreviewed dr|LWG}}&lt;!--LWG issue 2190, C++14 30.5[thread.condition]/4--&gt;</text>
      <sha1>5xrhegowwdnw1qyd63ho3jxkgp2ejoj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/title</title>
    <ns>10</ns>
    <id>5023</id>
    <revision>
      <id>18189</id>
      <timestamp>2012-01-25T21:05:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=condition_variable::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/wait</title>
    <ns>10</ns>
    <id>5119</id>
    <revision>
      <id>90354</id>
      <parentid>86035</parentid>
      <timestamp>2017-02-21T21:51:13Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="3465">{{cpp/thread/{{{1|}}}/title|wait}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num = 1 | since=c++11 |
{{#ifeq:{{{1|}}} | condition_variable |
void wait( std::unique_lock&lt;std::mutex&gt;&amp; lock );
|
template&lt; class Lock &gt;
void wait( Lock&amp; lock );
}}
}}
{{dcl | num = 2 | since=c++11 |
{{#ifeq:{{{1|}}} | condition_variable |
template&lt; class Predicate &gt;
void wait( std::unique_lock&lt;std::mutex&gt;&amp; lock, Predicate pred );
|
template&lt; class Lock, class Predicate &gt;
void wait( Lock&amp; lock, Predicate pred );
}}
}}
{{dcl end}}

{{tt|wait}} causes the current thread to block until the condition variable is notified or a spurious wakeup occurs, optionally looping until some predicate is satisfied.

@1@ Atomically releases {{tt|lock}}, blocks the current executing thread, and adds it to the list of threads waiting on {{c|*this}}. The thread will be unblocked when {{lc|notify_all()}} or {{lc|notify_one()}} is executed. It may also be unblocked spuriously. When unblocked, regardless of the reason, {{tt|lock}} is reacquired and {{tt|wait}} exits. {{rev inl|until=c++14|If this function exits via exception, {{tt|lock}} is also reacquired.}}
@2@ Equivalent to 
{{source|1=
while (!pred()) {
    wait(lock);
}
}}
This overload may be used to ignore spurious awakenings while waiting for a specific condition to become true. Note that before enter to this method {{tt|lock}} must be acquired, after {{tt|wait(lock)}} exits it is also reacquired, i.e. {{tt|lock}} can be used as a guard to {{tt|pred()}} access.

{{rev begin}}
{{rev|since=c++14|If these functions fail to meet the postconditions 
({{#ifeq:{{{1|}}} | condition_variable |{{c|lock.owns_lock(){{==}}true}} and {{c|lock.mutex()}} is locked by the calling thread) | {{c|lock}} is locked by the calling thread)}}, {{lc|std::terminate}} is called. For example, this could happen if relocking the mutex throws an exception,}}
{{rev end}}

===Parameters===
{{par begin}}
{{#ifeq:{{{1|}}} | condition_variable|
{{par | lock | an object of type {{c|std::unique_lock&lt;std::mutex&gt;}}, which must be locked by the current thread}}
|
{{par | lock | an object of type {{tt|Lock}} that meets the {{concept|BasicLockable}} requirements, which must be locked by the current thread}}
}}
{{par pred0 | pred | value=false | if the waiting should be continued}}
{{par end}}

===Return value===
(none)

===Exceptions===
@1@ {{rev begin}}
{{rev|until=c++14|
May throw {{lc|std::system_error}}, may also propagate exceptions thrown by [[cpp/thread/unique_lock/lock|{{c|lock.lock()}}]] or [[cpp/thread/unique_lock/unlock|{{c|lock.unlock()}}]].
}}
{{rev|since=c++14|
Does not throw
}}
{{rev end}}
@2@ Same as {{v|1}} but may also propagate exceptions thrown by {{tt|pred}}

===Notes===
{{#ifeq:{{{1|}}} | condition_variable |
Calling this function if [[cpp/thread/unique_lock/mutex|{{c|lock.mutex()}}]] is not locked by the current thread is undefined behavior.

Calling this function if [[cpp/thread/unique_lock/mutex|{{c|lock.mutex()}}]] is not the same mutex as the one used by all other threads that are currently waiting on the same condition variable is undefined behavior.
}}

{{cpp/thread/condition_variable/single_total_order_note}}

===Example===
{{include | cpp/thread/condition_variable/example1|{{{1|}}}}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_for | {{{1|}}}}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_until | {{{1|}}}}}
{{dsc see c | c/thread/cnd_wait}}
{{dsc end}}</text>
      <sha1>5lot66yk3x9ejlxjv2jzus3mmpqd43k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/wait for</title>
    <ns>10</ns>
    <id>5121</id>
    <revision>
      <id>89112</id>
      <parentid>88023</parentid>
      <timestamp>2016-12-30T16:08:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>modernized example (s/std::chrono::milliseconds(120)/120ms)</comment>
      <text xml:space="preserve" bytes="5105">{{cpp/thread/{{{1|}}}/title|wait_for}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num = 1 | since=c++11 |
{{#ifeq:{{{1|}}} | condition_variable |
template&lt; class Rep, class Period &gt;
std::cv_status wait_for( std::unique_lock&lt;std::mutex&gt;&amp; lock,
|
template&lt; class Lock, class Rep, class Period &gt;
std::cv_status wait_for( Lock&amp; lock,
}}
                         const std::chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
}}
{{dcl | num = 2 | since=c++11 |
{{#ifeq:{{{1|}}} | condition_variable|
template&lt; class Rep, class Period, class Predicate &gt;
bool wait_for( std::unique_lock&lt;std::mutex&gt;&amp; lock,
|
template&lt; class Lock, class Rep, class Period, class Predicate &gt;
bool wait_for( Lock&amp; lock,
}}
               const std::chrono::duration&lt;Rep, Period&gt;&amp; rel_time,
               Predicate pred);
}}
{{dcl end}}

@1@ Atomically releases {{tt|lock}}, blocks the current executing thread, and adds it to the list of threads waiting on {{c|*this}}. The thread will be unblocked when {{lc|notify_all()}} or {{lc|notify_one()}} is executed, or when the relative timeout {{tt|rel_time}} expires. It may also be unblocked spuriously. When unblocked, regardless of the reason, {{tt|lock}} is reacquired and {{tt|wait_for()}} exits. {{rev inl|until=c++14|If this function exits via exception, {{tt|lock}} is also reacquired.}}

@2@ Equivalent to {{c|return wait_until(lock, std::chrono::steady_clock::now() + rel_time, std::move(pred));}}. This overload may be used to ignore spurious awakenings.

A steady clock is used to measure the duration. This function may block for longer than {{tt|timeout_duration}} due to scheduling or resource contention delays. 

{{#ifeq:{{{1|}}} | condition_variable|
Calling this function if {{tt|lock.mutex()}} is not locked by the current thread is undefined behavior.

Calling this function if {{tt|lock.mutex()}} is not the same mutex as the one used by all other threads that are currently waiting on the same condition variable is undefined behavior.
}}

{{rev begin}}
{{rev|since=c++14|If these functions fail to meet the postcondition ({{#ifeq:{{{1|}}} | condition_variable|{{c|lock.owns_lock(){{==}}true}} and {{c|lock.mutex()}} is locked by the calling thread|{{c|lock}} is locked by the calling thread}}), {{lc|std::terminate}} is called. For example, this could happen if relocking the mutex throws an exception,}}
{{rev end}}

===Parameters===
{{par begin}}
{{#ifeq:{{{1|}}} | condition_variable |
{{par | lock | an object of type {{c|std::unique_lock&lt;std::mutex&gt;}}, which must be locked by the current thread}}
|
{{par | lock | an object of type {{tt|Lock}} that meets the {{concept|BasicLockable}} requirements, which must be locked by the current thread}}
}}
{{par | rel_time | an object of type {{lc|std::chrono::duration}} representing the maximum time to spend waiting}}
{{par pred0 | pred | value=false | if the waiting should be continued}}
{{par end}}

===Return value===
@1@ {{lc|std::cv_status::timeout}} if the relative timeout specified by {{tt|rel_time}} expired, {{lc|std::cv_status::no_timeout}} otherwise.

@2@ {{c|false}} if the predicate {{tt|pred}} still evaluates to {{c|false}} after the {{tt|rel_time}} timeout expired, otherwise {{c|true}}.

===Exceptions===
@1@ {{rev begin}}
{{rev|until=c++14|
May throw {{lc|std::system_error}}, may also propagate exceptions thrown by {{c|lock.lock()}} or {{c|lock.unlock()}}.
}}
{{rev|since=c++14|
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)
}}
{{rev end}}
@2@ Same as {{v|1}} but may also propagate exceptions thrown by {{tt|pred}}

===Notes===
Even if notified under lock, overload {{v|1}} makes no guarantees about the state of the associated predicate when returning due to timeout.

{{cpp/thread/condition_variable/single_total_order_note}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;atomic&gt;
#include &lt;condition_variable&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
using namespace std::chrono_literals;

std::{{{1|}}} cv;
std::mutex cv_m;
int i;

void waits(int idx)
{
    std::unique_lock&lt;std::mutex&gt; lk(cv_m);
    if(cv.wait_for(lk, idx*100ms, []{return i == 1;})) 
        std::cerr &lt;&lt; &quot;Thread &quot; &lt;&lt; idx &lt;&lt; &quot; finished waiting. i == &quot; &lt;&lt; i &lt;&lt; '\n';
    else
        std::cerr &lt;&lt; &quot;Thread &quot; &lt;&lt; idx &lt;&lt; &quot; timed out. i == &quot; &lt;&lt; i &lt;&lt; '\n';
}
 
void signals()
{
    std::this_thread::sleep_for(120ms);
    std::cerr &lt;&lt; &quot;Notifying...\n&quot;;
    cv.notify_all();
    std::this_thread::sleep_for(100ms);
    {
        std::lock_guard&lt;std::mutex&gt; lk(cv_m);
        i = 1;
    }
    std::cerr &lt;&lt; &quot;Notifying again...\n&quot;;
    cv.notify_all();
}

int main()
{
    std::thread t1(waits, 1), t2(waits, 2), t3(waits, 3), t4(signals);
    t1.join(); t2.join(), t3.join(), t4.join();
}
 | output=
Thread 1 timed out. i == 0
Notifying...
Thread 2 timed out. i == 0
Notifying again...
Thread 3 finished waiting. i == 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc wait | {{{1|}}}}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_until | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>1o2svjj15fnnzlkeb0pixjqzw45qnnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/condition variable/wait until</title>
    <ns>10</ns>
    <id>5123</id>
    <revision>
      <id>90358</id>
      <parentid>86037</parentid>
      <timestamp>2017-02-21T21:53:06Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="5329">{{cpp/thread/{{{1|}}}/title|wait_until}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num = 1 | since=c++11 |
{{
#ifeq:{{{1|}}} | condition_variable|
template&lt; class Clock, class Duration &gt;
std::cv_status wait_until( std::unique_lock&lt;std::mutex&gt;&amp; lock,
|
template&lt; class Lock, class Clock, class Duration &gt;
std::cv_status wait_until( Lock&amp; lock,
}}
                           const std::chrono::time_point&lt;Clock, Duration&gt;&amp; timeout_time );
}}
{{dcl | num = 2 | since=c++11 |
{{#ifeq:{{{1|}}} | condition_variable|
template&lt; class Clock, class Duration, class Predicate &gt;
bool wait_until( std::unique_lock&lt;std::mutex&gt;&amp; lock,
|
template&lt; class Lock, class Clock, class Duration, class Predicate &gt;
bool wait_until( Lock&amp; lock,
}}
                 const std::chrono::time_point&lt;Clock, Duration&gt;&amp; timeout_time,
                 Predicate pred );
}}
{{dcl end}}

{{tt|wait_until}} causes the current thread to block until the condition variable is notified, a specific time is reached, or a spurious wakeup occurs, optionally looping until some predicate is satisfied.

@1@ Atomically releases {{tt|lock}}, blocks the current executing thread, and adds it to the list of threads waiting on {{c|*this}}. The thread will be unblocked when {{lc|notify_all()}} or {{lc|notify_one()}} is executed, or when the absolute time point {{tt|timeout_time}} is reached. It may also be unblocked spuriously. When unblocked, regardless of the reason, {{tt|lock}} is reacquired and {{tt|wait_until}} exits. {{rev inl|until=c++14|If this function exits via exception, {{tt|lock}} is also reacquired.}}

@2@ Equivalent to

{{source|1=
while (!pred()) {
    if (wait_until(lock, abs_time) == std::cv_status::timeout) {
        return pred();
    }
}
return true;
}}

@@This overload may be used to ignore spurious wakeups.

{{#ifeq:{{{1|}}} | condition_variable|
Calling this function if {{tt|lock.mutex()}} is not locked by the current thread is undefined behavior.

Calling this function if {{tt|lock.mutex()}} is not the same mutex as the one used by all other threads that are currently waiting on the same condition variable is undefined behavior.
}}

{{rev begin}}
{{rev|since=c++14|If these functions fail to meet the postcondition ({{#ifeq:{{{1|}}} | condition_variable|{{c|lock.owns_lock(){{==}}true}} and {{c|lock.mutex()}} is locked by the calling thread|{{c|lock}} is locked by the calling thread}}), {{lc|std::terminate}} is called. For example, this could happen if relocking the mutex throws an exception,}}
{{rev end}}

===Parameters===
{{par begin}}
{{#ifeq:{{{1|}}} | condition_variable|
{{par | lock | an object of type std::unique_lock&lt;std::mutex&gt;, which must be locked by the current thread}}
|
{{par | lock | an object of type {{tt|Lock}} that meets the requirements of {{concept|BasicLockable}}, which must be locked by the current thread}}
}}
{{par | timeout_time | an object of type {{lc|std::chrono::time_point}} representing the time when to stop waiting}}
{{par pred0 | pred | value=false | if the waiting should be continued}}
{{par end}}

===Return value===
@1@ {{lc|std::cv_status::timeout}} if the absolute timeout specified by {{tt|abs_time}} was reached, {{lc|std::cv_status::no_timeout}} overwise.

@2@ {{c|false}} if the predicate {{tt|pred}} still evaluates to {{c|false}} after the {{tt|abs_time}} timeout expired, otherwise {{c|true}}. If the timeout had already expired, evaluates and returns the result of {{tt|pred}}.

===Exceptions===
@1@ {{rev begin}}
{{rev|until=c++14|
May throw {{lc|std::system_error}}, may also propagate exceptions thrown by {{c|lock.lock()}} or {{c|lock.unlock()}}.
}}
{{rev|since=c++14|
Any exception thrown by clock, time point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)
}}
{{rev end}}
@2@ Same as {{v|1}} but may also propagate exceptions thrown by {{tt|pred}}

===Notes===
{{cpp/thread/wait_until_clock_note|cv}}

{{cpp/thread/condition_variable/single_total_order_note}}

===Example===
{{example
 | 
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;atomic&gt;
#include &lt;condition_variable&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
using namespace std::chrono_literals;

std::condition_variable cv;
std::mutex cv_m;
std::atomic&lt;int&gt; i{0};

void waits(int idx)
{
    std::unique_lock&lt;std::mutex&gt; lk(cv_m);
    auto now = std::chrono::system_clock::now();
    if(cv.wait_until(lk, now + idx*100ms, [](){return i == 1;}))
        std::cerr &lt;&lt; &quot;Thread &quot; &lt;&lt; idx &lt;&lt; &quot; finished waiting. i == &quot; &lt;&lt; i &lt;&lt; '\n';
    else
        std::cerr &lt;&lt; &quot;Thread &quot; &lt;&lt; idx &lt;&lt; &quot; timed out. i == &quot; &lt;&lt; i &lt;&lt; '\n';
}

void signals()
{
    std::this_thread::sleep_for(120ms);
    std::cerr &lt;&lt; &quot;Notifying...\n&quot;;
    cv.notify_all();
    std::this_thread::sleep_for(100ms);
    i = 1;
    std::cerr &lt;&lt; &quot;Notifying again...\n&quot;;
    cv.notify_all();
}

int main()
{
    std::thread t1(waits, 1), t2(waits, 2), t3(waits, 3), t4(signals);
    t1.join(); 
    t2.join();
    t3.join();
    t4.join();
}
 | output=
Thread 1 timed out. i == 0
Notifying...
Thread 2 timed out. i == 0
Notifying again...
Thread 3 finished waiting. i == 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc wait | {{{1|}}}}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_for | {{{1|}}}}}
{{dsc see c | c/thread/cnd_timedwait}}
{{dsc end}}</text>
      <sha1>nxy31zamnghiek9m2dl0qkn5bya5wm4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc async</title>
    <ns>10</ns>
    <id>6469</id>
    <revision>
      <id>60016</id>
      <parentid>55065</parentid>
      <timestamp>2013-06-01T06:43:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list async]] to [[Template:cpp/thread/dsc async]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="176">{{dsc tfun | cpp/thread/async | runs a function asynchronously (potentially in a new thread) and returns a {{lc|std::future}} that will hold the result | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc call once</title>
    <ns>10</ns>
    <id>2502</id>
    <revision>
      <id>60018</id>
      <parentid>55068</parentid>
      <timestamp>2013-06-01T06:43:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list call once]] to [[Template:cpp/thread/dsc call once]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc tfun | cpp/thread/call_once | invokes a function only once even if called from multiple threads | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc future</title>
    <ns>10</ns>
    <id>6467</id>
    <revision>
      <id>60020</id>
      <parentid>55071</parentid>
      <timestamp>2013-06-01T06:43:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list future]] to [[Template:cpp/thread/dsc future]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc tclass | cpp/thread/future | waits for a value that is set asynchronously | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc future category</title>
    <ns>10</ns>
    <id>8548</id>
    <revision>
      <id>60022</id>
      <parentid>55074</parentid>
      <timestamp>2013-06-01T06:43:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list future category]] to [[Template:cpp/thread/dsc future category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc fun | cpp/thread/future_category  | notes={{mark c++11}} | identifies the future error category}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc future errc</title>
    <ns>10</ns>
    <id>8549</id>
    <revision>
      <id>60024</id>
      <parentid>55075</parentid>
      <timestamp>2013-06-01T06:43:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list future errc]] to [[Template:cpp/thread/dsc future errc]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc enum | cpp/thread/future_errc  | notes={{mark c++11}} | identifies the future error codes}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc future error</title>
    <ns>10</ns>
    <id>8547</id>
    <revision>
      <id>60026</id>
      <parentid>55078</parentid>
      <timestamp>2013-06-01T06:43:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list future error]] to [[Template:cpp/thread/dsc future error]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc class | cpp/thread/future_error | notes={{mark c++11}} | reports an error related to futures or promises }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc future status</title>
    <ns>10</ns>
    <id>8553</id>
    <revision>
      <id>60028</id>
      <parentid>55081</parentid>
      <timestamp>2013-06-01T06:43:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list future status]] to [[Template:cpp/thread/dsc future status]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc enum | cpp/thread/future_status | specifies the results of timed waits performed on {{lc|std::future}} and {{lc|std::shared_future}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc get id</title>
    <ns>10</ns>
    <id>2242</id>
    <revision>
      <id>60030</id>
      <parentid>55082</parentid>
      <timestamp>2013-06-01T06:43:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list get id]] to [[Template:cpp/thread/dsc get id]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc fun | cpp/thread/get_id | returns the thread id of the current thread | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc hardware destructive interference size</title>
    <ns>10</ns>
    <id>14757</id>
    <revision>
      <id>83895</id>
      <parentid>83889</parentid>
      <timestamp>2016-03-13T18:16:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/ensure/promote, for true sharing</comment>
      <text xml:space="preserve" bytes="249">{{dsc const | cpp/thread/hardware_destructive_interference_size | min offset to avoid false sharing&lt;br&gt;max offset to promote true sharing| notes={{mark c++17}}|title=hardware_destructive_interference_size&lt;br&gt;hardware_constructive_interference_size}}</text>
      <sha1>bgw95hmgml8e7t40ficnbxxb472t78y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc launch</title>
    <ns>10</ns>
    <id>6470</id>
    <revision>
      <id>60032</id>
      <parentid>55085</parentid>
      <timestamp>2013-06-01T06:43:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list launch]] to [[Template:cpp/thread/dsc launch]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc enum | cpp/thread/launch | specifies the launch policy for {{lc|std::async}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc lock</title>
    <ns>10</ns>
    <id>2252</id>
    <revision>
      <id>60034</id>
      <parentid>55088</parentid>
      <timestamp>2013-06-01T06:43:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list lock]] to [[Template:cpp/thread/dsc lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc tfun | cpp/thread/lock | locks specified mutexes, blocks if any are unavailable | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc lock guard</title>
    <ns>10</ns>
    <id>2249</id>
    <revision>
      <id>60036</id>
      <parentid>55089</parentid>
      <timestamp>2013-06-01T06:44:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list lock guard]] to [[Template:cpp/thread/dsc lock guard]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc tclass | cpp/thread/lock_guard | implements a strictly scope-based mutex ownership wrapper | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc lock tag</title>
    <ns>10</ns>
    <id>4455</id>
    <revision>
      <id>60038</id>
      <parentid>55094</parentid>
      <timestamp>2013-06-01T06:44:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list lock tag]] to [[Template:cpp/thread/dsc lock tag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="194">{{dsc const | cpp/thread/lock_tag | title=defer_lock&lt;br&gt;try_to_lock&lt;br&gt;adopt_lock | tag constants used to specify locking strategy | notes={{mark c++11}}&lt;br/&gt;{{mark c++11}}&lt;br/&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc lock tag t</title>
    <ns>10</ns>
    <id>4454</id>
    <revision>
      <id>60040</id>
      <parentid>55097</parentid>
      <timestamp>2013-06-01T06:44:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list lock tag t]] to [[Template:cpp/thread/dsc lock tag t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="197">{{dsc class | cpp/thread/lock_tag_t | title=defer_lock_t&lt;br&gt;try_to_lock_t&lt;br&gt;adopt_lock_t | tag type used to specify locking strategy | notes={{mark c++11}}&lt;br/&gt;{{mark c++11}}&lt;br/&gt;{{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc mutex</title>
    <ns>10</ns>
    <id>2245</id>
    <revision>
      <id>60042</id>
      <parentid>55098</parentid>
      <timestamp>2013-06-01T06:44:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list mutex]] to [[Template:cpp/thread/dsc mutex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc class | cpp/thread/mutex | provides basic mutual exclusion facility | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc once flag</title>
    <ns>10</ns>
    <id>2501</id>
    <revision>
      <id>60044</id>
      <parentid>55099</parentid>
      <timestamp>2013-06-01T06:44:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list once flag]] to [[Template:cpp/thread/dsc once flag]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc class | cpp/thread/once_flag | helper object to ensure that {{ltt|cpp/thread/call_once}} invokes the function only once | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc packaged task</title>
    <ns>10</ns>
    <id>6466</id>
    <revision>
      <id>60046</id>
      <parentid>55100</parentid>
      <timestamp>2013-06-01T06:44:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list packaged task]] to [[Template:cpp/thread/dsc packaged task]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc tclass | cpp/thread/packaged_task | packages a function to store its return value for asynchronous retrieval | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc promise</title>
    <ns>10</ns>
    <id>6465</id>
    <revision>
      <id>60048</id>
      <parentid>55103</parentid>
      <timestamp>2013-06-01T06:44:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list promise]] to [[Template:cpp/thread/dsc promise]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc tclass | cpp/thread/promise | stores a value for asynchronous retrieval | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc recursive mutex</title>
    <ns>10</ns>
    <id>2246</id>
    <revision>
      <id>60050</id>
      <parentid>55104</parentid>
      <timestamp>2013-06-01T06:44:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list recursive mutex]] to [[Template:cpp/thread/dsc recursive mutex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="153">{{dsc class | cpp/thread/recursive_mutex | provides mutual exclusion facility which can be locked recursively by the same thread | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc recursive timed mutex</title>
    <ns>10</ns>
    <id>2248</id>
    <revision>
      <id>60052</id>
      <parentid>55107</parentid>
      <timestamp>2013-06-01T06:44:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list recursive timed mutex]] to [[Template:cpp/thread/dsc recursive timed mutex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="201">{{dsc class | cpp/thread/recursive_timed_mutex | provides mutual exclusion facility which can be locked recursively&lt;br&gt; by the same thread and implements locking with a timeout | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc scoped lock</title>
    <ns>10</ns>
    <id>15849</id>
    <revision>
      <id>89034</id>
      <timestamp>2016-12-22T21:54:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc tclass | cpp/thread/scoped_lock | deadlock-avoiding RAII wrapper for multiple mutexes | notes={{mark c++17}}}}</text>
      <sha1>efb1f05aq0kkzwxwmhd4zu9o12kyj05</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc shared future</title>
    <ns>10</ns>
    <id>6468</id>
    <revision>
      <id>60054</id>
      <parentid>55108</parentid>
      <timestamp>2013-06-01T06:44:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list shared future]] to [[Template:cpp/thread/dsc shared future]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tclass | cpp/thread/shared_future | waits for a value (possibly referenced by other futures) that is set asynchronously | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc shared lock</title>
    <ns>10</ns>
    <id>9980</id>
    <revision>
      <id>60056</id>
      <parentid>55109</parentid>
      <timestamp>2013-06-01T06:44:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list shared lock]] to [[Template:cpp/thread/dsc shared lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc tclass | cpp/thread/shared_lock | implements movable shared mutex ownership wrapper | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc shared mutex</title>
    <ns>10</ns>
    <id>13467</id>
    <revision>
      <id>78645</id>
      <parentid>68893</parentid>
      <timestamp>2015-06-02T20:23:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{dsc class | cpp/thread/shared_mutex | provides shared mutual exclusion facility | notes={{mark c++17}}}}</text>
      <sha1>oflrgdzunx7ihpwkessm28lfow8uasw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc shared timed mutex</title>
    <ns>10</ns>
    <id>9979</id>
    <revision>
      <id>68894</id>
      <parentid>68892</parentid>
      <timestamp>2014-03-22T22:24:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>rename</comment>
      <text xml:space="preserve" bytes="112">{{dsc class | cpp/thread/shared_timed_mutex | provides shared mutual exclusion facility | notes={{mark c++14}}}}</text>
      <sha1>jz0dpr7mupptkhss6trgra9pwt2n2nu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc sleep for</title>
    <ns>10</ns>
    <id>2243</id>
    <revision>
      <id>60060</id>
      <parentid>55113</parentid>
      <timestamp>2013-06-01T06:44:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list sleep for]] to [[Template:cpp/thread/dsc sleep for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc fun | cpp/thread/sleep_for | stops the execution of the current thread for a specified time duration | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc sleep until</title>
    <ns>10</ns>
    <id>2244</id>
    <revision>
      <id>60062</id>
      <parentid>55114</parentid>
      <timestamp>2013-06-01T06:44:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list sleep until]] to [[Template:cpp/thread/dsc sleep until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | cpp/thread/sleep_until | stops the execution of the current thread until a specified time point | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc thread</title>
    <ns>10</ns>
    <id>2240</id>
    <revision>
      <id>60064</id>
      <parentid>55115</parentid>
      <timestamp>2013-06-01T06:44:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list thread]] to [[Template:cpp/thread/dsc thread]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc class | cpp/thread/thread | manages a separate thread | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc timed mutex</title>
    <ns>10</ns>
    <id>2247</id>
    <revision>
      <id>60066</id>
      <parentid>55118</parentid>
      <timestamp>2013-06-01T06:44:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list timed mutex]] to [[Template:cpp/thread/dsc timed mutex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc class | cpp/thread/timed_mutex | provides mutual exclusion facility which implements locking with a timeout | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc try lock</title>
    <ns>10</ns>
    <id>2251</id>
    <revision>
      <id>60068</id>
      <parentid>55119</parentid>
      <timestamp>2013-06-01T06:44:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list try lock]] to [[Template:cpp/thread/dsc try lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc tfun | cpp/thread/try_lock | attempts to obtain ownership of mutexes via repeated calls to {{tt|try_lock}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc unique lock</title>
    <ns>10</ns>
    <id>2250</id>
    <revision>
      <id>60070</id>
      <parentid>55122</parentid>
      <timestamp>2013-06-01T06:44:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list unique lock]] to [[Template:cpp/thread/dsc unique lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc tclass | cpp/thread/unique_lock | implements movable mutex ownership wrapper | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/dsc yield</title>
    <ns>10</ns>
    <id>2241</id>
    <revision>
      <id>60072</id>
      <parentid>55123</parentid>
      <timestamp>2013-06-01T06:44:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/dcl list yield]] to [[Template:cpp/thread/dsc yield]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc fun | cpp/thread/yield | suggests that the implementation reschedule execution of threads| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/example lock tag</title>
    <ns>10</ns>
    <id>4474</id>
    <revision>
      <id>80847</id>
      <parentid>72892</parentid>
      <timestamp>2015-09-04T06:09:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>This needs a unique_lock.</comment>
      <text xml:space="preserve" bytes="1050">{{example |
|code=
#include &lt;mutex&gt;
#include &lt;thread&gt;

struct bank_account {
    explicit bank_account(int balance) : balance(balance) {}
    int balance;
    std::mutex m;
};

void transfer(bank_account &amp;from, bank_account &amp;to, int amount)
{
    // lock both mutexes without deadlock
    std::lock(from.m, to.m);
    // make sure both already-locked mutexes are unlocked at the end of scope
    std::lock_guard&lt;std::mutex&gt; lock1(from.m, std::adopt_lock);
    std::lock_guard&lt;std::mutex&gt; lock2(to.m, std::adopt_lock);

// equivalent approach:
//    std::unique_lock&lt;std::mutex&gt; lock1(from.m, std::defer_lock);
//    std::unique_lock&lt;std::mutex&gt; lock2(to.m, std::defer_lock);
//    std::lock(lock1, lock2);

    from.balance -= amount;
    to.balance += amount;
}

int main()
{
    bank_account my_account(100);
    bank_account your_account(50);

    std::thread t1(transfer, std::ref(my_account), std::ref(your_account), 10);
    std::thread t2(transfer, std::ref(your_account), std::ref(my_account), 5);

    t1.join();
    t2.join();
}
|output=
}}</text>
      <sha1>lgf4vd0m6fqjren6m91foi55ab9y9dw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future errc/dsc is error code enum</title>
    <ns>10</ns>
    <id>12637</id>
    <revision>
      <id>61373</id>
      <timestamp>2013-06-05T22:29:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="227">{{dsc tclass | cpp/thread/future_errc/is_error_code_enum  | title=is_error_code_enum{{dsc small|&lt;std::future_errc&gt;}}| notes={{mark c++11}} | extends the type trait {{lc|std::is_error_code_enum}} to identify future error codes}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future errc/dsc make error code</title>
    <ns>10</ns>
    <id>12639</id>
    <revision>
      <id>61375</id>
      <timestamp>2013-06-05T22:29:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="164">{{dsc fun | cpp/thread/future_errc/make_error_code | title=make_error_code{{dsc small|(std::future_errc)}} | notes={{mark c++11}} | constructs a future error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future errc/dsc make error condition</title>
    <ns>10</ns>
    <id>12638</id>
    <revision>
      <id>61374</id>
      <timestamp>2013-06-05T22:29:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="180">{{dsc fun | cpp/thread/future_errc/make_error_condition  | title=make_error_condition{{dsc small|(std::future_errc)}} | notes={{mark c++11}} | constructs a future error_condition}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future errc/navbar</title>
    <ns>10</ns>
    <id>9001</id>
    <revision>
      <id>40027</id>
      <parentid>35930</parentid>
      <timestamp>2012-09-28T20:19:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/future_errc/navbar heading
|content3 = cpp/thread/future_errc/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future errc/navbar content</title>
    <ns>10</ns>
    <id>9002</id>
    <revision>
      <id>61381</id>
      <parentid>55156</parentid>
      <timestamp>2013-06-05T22:31:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>reorder</comment>
      <text xml:space="preserve" bytes="245">{{nv begin}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/thread/future_errc/make_error_code}}
{{nv ln | cpp/thread/future_errc/make_error_condition}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/thread/future_errc/is_error_code_enum}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future errc/navbar heading</title>
    <ns>10</ns>
    <id>8545</id>
    <revision>
      <id>48104</id>
      <parentid>35931</parentid>
      <timestamp>2013-05-18T18:12:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/thread/future_errc|std::future_errc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future error/dsc code</title>
    <ns>10</ns>
    <id>8980</id>
    <revision>
      <id>60094</id>
      <parentid>55159</parentid>
      <timestamp>2013-06-01T06:44:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future error/dcl list code]] to [[Template:cpp/thread/future error/dsc code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/thread/future_error/code | returns the error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future error/dsc constructor</title>
    <ns>10</ns>
    <id>8979</id>
    <revision>
      <id>60096</id>
      <parentid>55174</parentid>
      <timestamp>2013-06-01T06:44:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future error/dcl list constructor]] to [[Template:cpp/thread/future error/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem ctor | cpp/thread/future_error/future_error | creates a {{tt|std::future_error}} object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future error/dsc what</title>
    <ns>10</ns>
    <id>8981</id>
    <revision>
      <id>60098</id>
      <parentid>55175</parentid>
      <timestamp>2013-06-01T06:44:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future error/dcl list what]] to [[Template:cpp/thread/future error/dsc what]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/thread/future_error/what | returns the explanatory string specific to the error code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future error/navbar</title>
    <ns>10</ns>
    <id>8551</id>
    <revision>
      <id>40028</id>
      <parentid>35932</parentid>
      <timestamp>2012-09-28T20:19:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="255">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/future_error/navbar heading
|content3 = cpp/thread/future_error/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future error/navbar content</title>
    <ns>10</ns>
    <id>8978</id>
    <revision>
      <id>55178</id>
      <parentid>37775</parentid>
      <timestamp>2013-06-01T05:20:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="195">{{nv begin}}
{{nv h2 | Member functions}}
{{nv mem ln | cpp/thread/future_error/future_error}}
{{nv mem ln | cpp/thread/future_error/code}}
{{nv mem ln | cpp/thread/future_error/what}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future error/navbar heading</title>
    <ns>10</ns>
    <id>8552</id>
    <revision>
      <id>48105</id>
      <parentid>34261</parentid>
      <timestamp>2013-05-18T18:13:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="49">{{ltt|cpp/thread/future_error|std::future_error}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future error/title</title>
    <ns>10</ns>
    <id>8977</id>
    <revision>
      <id>37774</id>
      <timestamp>2012-07-18T23:27:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=future_error::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future status values</title>
    <ns>10</ns>
    <id>5045</id>
    <revision>
      <id>55181</id>
      <parentid>41485</parentid>
      <timestamp>2013-06-01T05:20:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="376">{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc
| {{ltt|cpp/thread/future_status|future_status::deferred}}
| The function to calculate the result has not been started yet
}}
{{dsc
| {{ltt|cpp/thread/future_status|future_status::ready}}
| The result is ready
}}
{{dsc
| {{ltt|cpp/thread/future_status|future_status::timeout}}
| The timeout has expired
}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc constructor</title>
    <ns>10</ns>
    <id>5033</id>
    <revision>
      <id>85480</id>
      <parentid>60074</parentid>
      <timestamp>2016-04-21T21:26:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem ctor | cpp/thread/{{{1|future}}}/{{{1|future}}} | constructs the future object}}</text>
      <sha1>6i82dc2w3xl7rr6zgpj6a1t27jrb64n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc destructor</title>
    <ns>10</ns>
    <id>5034</id>
    <revision>
      <id>60076</id>
      <parentid>55127</parentid>
      <timestamp>2013-06-01T06:44:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list destructor]] to [[Template:cpp/thread/future/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem dtor | cpp/thread/future/~future | destructs the future object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc future category</title>
    <ns>10</ns>
    <id>4827</id>
    <revision>
      <id>60078</id>
      <parentid>55128</parentid>
      <timestamp>2013-06-01T06:44:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list future category]] to [[Template:cpp/thread/future/dsc future category]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc fun | cpp/thread/future/future_category  | notes={{mark c++11}} | identifies the future error category}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc get</title>
    <ns>10</ns>
    <id>5037</id>
    <revision>
      <id>60080</id>
      <parentid>55129</parentid>
      <timestamp>2013-06-01T06:44:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list get]] to [[Template:cpp/thread/future/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">{{dsc mem fun | cpp/thread/{{{1|}}}/get | returns the result}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc operator=</title>
    <ns>10</ns>
    <id>5035</id>
    <revision>
      <id>60082</id>
      <parentid>55130</parentid>
      <timestamp>2013-06-01T06:44:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list operator=]] to [[Template:cpp/thread/future/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/thread/future/operator{{=}} | moves the future object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc share</title>
    <ns>10</ns>
    <id>5036</id>
    <revision>
      <id>60084</id>
      <parentid>55133</parentid>
      <timestamp>2013-06-01T06:44:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list share]] to [[Template:cpp/thread/future/dsc share]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc mem fun | cpp/thread/future/share | transfers the shared state from {{tt|*this}} to a {{ltt|cpp/thread/shared_future|shared_future}} and returns it}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc valid</title>
    <ns>10</ns>
    <id>5038</id>
    <revision>
      <id>60086</id>
      <parentid>55136</parentid>
      <timestamp>2013-06-01T06:44:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list valid]] to [[Template:cpp/thread/future/dsc valid]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/thread/{{{1|}}}/valid | checks if the future has a shared state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc wait</title>
    <ns>10</ns>
    <id>5039</id>
    <revision>
      <id>60088</id>
      <parentid>55137</parentid>
      <timestamp>2013-06-01T06:44:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list wait]] to [[Template:cpp/thread/future/dsc wait]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/thread/{{{1|}}}/wait | waits for the result to become available}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc wait for</title>
    <ns>10</ns>
    <id>5040</id>
    <revision>
      <id>60090</id>
      <parentid>55140</parentid>
      <timestamp>2013-06-01T06:44:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list wait for]] to [[Template:cpp/thread/future/dsc wait for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem fun | cpp/thread/{{{1|}}}/wait_for | waits for the result, returns if it is not available for the specified timeout duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/dsc wait until</title>
    <ns>10</ns>
    <id>5041</id>
    <revision>
      <id>60092</id>
      <parentid>55143</parentid>
      <timestamp>2013-06-01T06:44:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/future/dcl list wait until]] to [[Template:cpp/thread/future/dsc wait until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="147">{{dsc mem fun | cpp/thread/{{{1|}}}/wait_until | waits for the result, returns if it is not available until specified time point has been reached}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/get</title>
    <ns>10</ns>
    <id>6454</id>
    <revision>
      <id>91310</id>
      <parentid>88326</parentid>
      <timestamp>2017-03-31T17:49:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Return value */ adjust</comment>
      <text xml:space="preserve" bytes="4344">{{cpp/thread/{{{1|}}}/title|get}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{#switch:{{{1|}}}
|shared_future=
{{dcl | num=1 | notes={{mark|member only of generic {{tt|{{{1}}}}} template}}&lt;br&gt;{{mark since c++11}} | 1=
const T&amp; get() const;
}}
{{dcl | num=2 | notes={{mark|member only of {{tt|{{{1}}}&lt;T&amp;&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T&amp; get() const;
}}
{{dcl | num=3 | notes={{mark|member only of {{tt|{{{1}}}&lt;void&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
void get() const;
}}
|
{{dcl | num=1 | notes={{mark|member only of generic {{tt|{{{1}}}}} template}}&lt;br&gt;{{mark since c++11}} | 1=
T get();
}}
{{dcl | num=2 | notes={{mark|member only of {{tt|{{{1}}}&lt;T&amp;&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T&amp; get();
}}
{{dcl | num=3 | notes={{mark|member only of {{tt|{{{1}}}&lt;void&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
void get();
}}
}}
{{dcl end}}

The {{tt|get}} method waits until the {{tt|{{{1}}}}} has a valid result and (depending on which template is used) retrieves it. It effectively calls {{lc|wait()}} in order to wait for the result.

The generic template and two template specializations each contain a single version of {{tt|get}}. The three versions of {{tt|get}} differ only in the return type.

The behavior is undefined if {{lc|valid()}} is {{c|false}} before the call to this function. 

{{#ifeq: {{{1}}} | future |
Any shared state is released. {{lc|valid()}} is {{c|false}} after a call to this method.
}}

===Parameters===
(none)

===Return value===
{{#switch:{{{1|}}}
|shared_future=
@1@ Const reference to the value stored in the shared state. Accessing the value through this reference is undefined after the shared state has been destroyed.
|future=
@1@ The value {{tt|v}} stored in the shared state, as {{c|std::move(v)}}.
}}
@2@ The reference stored as value in the shared state.

@3@ Nothing.

===Exceptions===
If an exception was stored in the shared state referenced by the future (e.g. via a call to {{ltt|cpp/thread/promise/set_exception|std::promise::set_exception()}}) then that exception will be thrown.

===Notes===
The implementations are encouraged to detect the case when {{lc|valid()}} is {{c|false}} before the call and throw a {{lc|std::future_error}} with an error condition of {{lc|std::future_errc::no_state}}.

===Example===
{{#ifeq:{{{1}}}|future|
{{example|
 | code=
#include &lt;thread&gt;
#include &lt;future&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;chrono&gt;

std::string time() {
    static auto start = std::chrono::steady_clock::now();
    std::chrono::duration&lt;double&gt; d = std::chrono::steady_clock::now() - start;
    return &quot;[&quot; + std::to_string(d.count()) + &quot;s]&quot;;
}
int main() {
    using namespace std::chrono_literals;
    {
        std::cout &lt;&lt; time() &lt;&lt; &quot; launching thread\n&quot;;
        std::future&lt;int&gt; f = std::async(std::launch::async, []{
            std::this_thread::sleep_for(1s);
            return 7;
        });
        std::cout &lt;&lt; time() &lt;&lt; &quot; waiting for the future, f.valid() == &quot;
                  &lt;&lt; f.valid() &lt;&lt; &quot;\n&quot;;
        int n = f.get();
        std::cout &lt;&lt; time() &lt;&lt; &quot; future.get() returned with &quot; &lt;&lt; n &lt;&lt; &quot;. f.valid() = &quot;
                  &lt;&lt; f.valid() &lt;&lt; '\n';
    }

    {
        std::cout &lt;&lt; time() &lt;&lt; &quot; launching thread\n&quot;;
        std::future&lt;int&gt; f = std::async(std::launch::async, []{
            std::this_thread::sleep_for(1s);
            return true ? throw std::runtime_error(&quot;7&quot;) : 7;
        });
        std::cout &lt;&lt; time() &lt;&lt; &quot; waiting for the future, f.valid() == &quot;
                  &lt;&lt; f.valid() &lt;&lt; &quot;\n&quot;;
        try {
            int n = f.get();
            std::cout &lt;&lt; time() &lt;&lt; &quot; future.get() returned with &quot; &lt;&lt; n
                      &lt;&lt; &quot; f.valid() = &quot; &lt;&lt; f.valid() &lt;&lt; '\n';
        } catch(const std::exception&amp; e) {
            std::cout &lt;&lt; time() &lt;&lt; &quot; caught exception &quot; &lt;&lt; e.what()
                      &lt;&lt; &quot;, f.valid() == &quot; &lt;&lt; f.valid() &lt;&lt; &quot;\n&quot;;
        }
    }
}
|p=true
| output=
[0.000004s] launching thread
[0.000461s] waiting for the future, f.valid() == 1
[1.001156s] future.get() returned with 7. f.valid() = 0
[1.001192s] launching thread
[1.001275s] waiting for the future, f.valid() == 1
[2.002356s] caught exception 7, f.valid() == 0
}}
|{{example}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc valid|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>a7w56pqaxrcw7j3vnajvpa3g01fk4b3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/navbar</title>
    <ns>10</ns>
    <id>2521</id>
    <revision>
      <id>40026</id>
      <parentid>35926</parentid>
      <timestamp>2012-09-28T20:19:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/future/navbar heading
|content3 = cpp/thread/future/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/navbar content</title>
    <ns>10</ns>
    <id>5047</id>
    <revision>
      <id>55145</id>
      <parentid>35927</parentid>
      <timestamp>2013-06-01T05:20:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="450">{{nv begin}}
{{nv mem ln | cpp/thread/future/future}}
{{nv mem ln | cpp/thread/future/~future}}
{{nv mem ln | cpp/thread/future/operator{{=}}}}
{{nv mem ln | cpp/thread/future/share}}

{{nv h2 | Getting the result}}
{{nv mem ln | cpp/thread/future/get}}

{{nv h2 | State}}
{{nv mem ln | cpp/thread/future/valid}}
{{nv mem ln | cpp/thread/future/wait}}
{{nv mem ln | cpp/thread/future/wait_for}}
{{nv mem ln | cpp/thread/future/wait_until}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/navbar heading</title>
    <ns>10</ns>
    <id>2525</id>
    <revision>
      <id>48027</id>
      <parentid>35928</parentid>
      <timestamp>2013-05-18T17:57:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="37">{{ltt|cpp/thread/future|std::future}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/title</title>
    <ns>10</ns>
    <id>5031</id>
    <revision>
      <id>18207</id>
      <timestamp>2012-01-25T22:18:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=future::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/valid</title>
    <ns>10</ns>
    <id>6455</id>
    <revision>
      <id>91949</id>
      <parentid>88393</parentid>
      <timestamp>2017-03-31T20:17:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1466">{{cpp/thread/{{{1|}}}/title|valid}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
bool valid() const;
}}
{{dcl end}}

Checks if the future refers to a shared state.

{{#ifeq:{{{1|}}}|future|This is the case only for futures that were not default-constructed or moved from (i.e. returned by {{lc|std::promise::get_future()}}, {{lc|std::packaged_task::get_future()}} or {{lc|std::async()}}) until the first time {{lc|get()}} or {{lc|share()}} is called.|This is the case only for futures that were not default-constructed or moved from. Unlike {{lc|std::future}}, {{tt|std::shared_future}}'s shared state is not invalidated when {{tt|get()}} is called.}}

The behavior is undefined if any member function other than the destructor{{#ifeq:{{{1|}}}|shared_future|, the copy-assignment operator}}, the move-assignment operator, or {{tt|valid}} is called on a {{tt|{{{1|}}} }} that does not refer to shared state (although implementations are encouraged to throw {{lc|std::future_error}} indicating {{tt|no_state}} in this case). It is valid to move {{#ifeq:{{{1|}}}|shared_future|or copy}} from a {{{1|}}} object for which {{tt|valid()}} is {{tt|false}}

===Parameters===
(none)

===Return value===
{{c|true}} if *this refers to a shared state, otherwise {{c|false}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc wait|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>0qtgzyipatmzhdzbv0zaw42vdlp67ve</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/wait</title>
    <ns>10</ns>
    <id>6456</id>
    <revision>
      <id>74014</id>
      <parentid>62242</parentid>
      <timestamp>2014-11-26T11:34:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>yep, that's in the book. Worth a note in .wait too</comment>
      <text xml:space="preserve" bytes="1605">{{cpp/thread/{{{1|}}}/title|wait}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void wait() const;
}}
{{dcl end}}

Blocks until the result becomes available. {{c|valid() {{==}} true}} after the call.

The behavior is undefined if [[cpp/thread/future/valid|{{c|valid()}}]]{{c| {{==}} false}} before the call to this function. 

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
(none)

===Notes===
The implementations are encouraged to detect the case when {{c|valid {{==}} false}} before the call and throw a {{lc|std::future_error}} with an error condition of {{lc|std::future_errc::no_state}}.

{{#ifeq:{{{1}}}|shared_future|
Calling wait on the same {{tt|std::shared_future}} from multiple threads is not safe; the intended use is for each thread that waits on the same shared state to have a copy of a {{tt|std::shared_future}}.}}

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;future&gt;
#include &lt;thread&gt;

int fib(int n)
{
  if (n &lt; 3) return 1;
  else return fib(n-1) + fib(n-2);
}

int main()
{
    std::{{{1|}}}&lt;int&gt; f1 = std::async(std::launch::async, [](){
        return fib(20);
    });
    std::{{{1|}}}&lt;int&gt; f2 = std::async(std::launch::async, [](){
        return fib(25);
    });

    std::cout &lt;&lt; &quot;waiting...\n&quot;;
    f1.wait();
    f2.wait();

    std::cout &lt;&lt; &quot;f1: &quot; &lt;&lt; f1.get() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;f2: &quot; &lt;&lt; f2.get() &lt;&lt; '\n';
}
 | output=
waiting...
f1: 6765
f2: 75025
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc wait_for|{{{1|}}}}}
{{dsc inc | cpp/thread/future/dsc wait_until|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>fj5gfjbm018nw2guh1of7jhrvkm151x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/wait for</title>
    <ns>10</ns>
    <id>6457</id>
    <revision>
      <id>64468</id>
      <parentid>62243</parentid>
      <timestamp>2013-08-18T00:16:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>exceptions clause from LWG 2185/C++14</comment>
      <text xml:space="preserve" bytes="2382">{{cpp/thread/{{{1|}}}/title|wait_for}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class Rep, class Period &gt;
std::future_status wait_for( const std::chrono::duration&lt;Rep,Period&gt;&amp; timeout_duration ) const;
}}
{{dcl end}}

Waits for the result to become available. Blocks until specified {{tt|timeout_duration}} has elapsed or the result becomes available, whichever comes first. Returns value identifies the state of the result. 

A steady clock is used to measure the duration. This function may block for longer than {{tt|timeout_duration}} due to scheduling or resource contention delays. 

The behavior is undefined if [[cpp/thread/future/valid|{{c|valid()}}]]{{c| {{==}} false}} before the call to this function. 

===Parameters===
{{par begin}}
{{par | timeout_duration | maximum duration to block for}}
{{par end}}

===Return value===
{{cpp/thread/future_status_values}}

===Exceptions===
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)

===Notes===
The implementations are encouraged to detect the case when {{c|valid {{==}} false}} before the call and throw a [[cpp/thread/future_error|{{c|future_error}}]] with an error condition of [[cpp/thread/future_errc|{{c|future_errc::no_state}}]].

===Example===
{{example|
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;future&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

int main()
{
    std::{{{1|}}}&lt;int&gt; future = std::async(std::launch::async, [](){ 
        std::this_thread::sleep_for(std::chrono::seconds(3));
        return 8;  
    }); 
 
    std::cout &lt;&lt; &quot;waiting...\n&quot;;
    std::future_status status;
    do {
        status = future.wait_for(std::chrono::seconds(1));
        if (status == std::future_status::deferred) {
            std::cout &lt;&lt; &quot;deferred\n&quot;;
        } else if (status == std::future_status::timeout) {
            std::cout &lt;&lt; &quot;timeout\n&quot;;
        } else if (status == std::future_status::ready) {
            std::cout &lt;&lt; &quot;ready!\n&quot;;
        }
    } while (status != std::future_status::ready); 

    std::cout &lt;&lt; &quot;result is &quot; &lt;&lt; future.get() &lt;&lt; '\n';
}
 | output=
waiting...
timeout
timeout
ready!
result is 8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc wait|{{{1|}}}}}
{{dsc inc | cpp/thread/future/dsc wait_until|{{{1|}}}}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/future/wait until</title>
    <ns>10</ns>
    <id>6458</id>
    <revision>
      <id>82872</id>
      <parentid>80768</parentid>
      <timestamp>2016-01-11T19:00:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>relocating the newly added example</comment>
      <text xml:space="preserve" bytes="3136">{{cpp/thread/{{{1|}}}/title|wait_until}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class Clock, class Duration &gt;
std::future_status wait_until( const std::chrono::time_point&lt;Clock,Duration&gt;&amp; timeout_time ) const;
}}
{{dcl end}}

{{tt|wait_until}} waits for a result to become available.  It blocks until specified {{tt|timeout_time}} has been reached or the result becomes available, whichever comes first. The return value indicates why {{tt|wait_until}} returned.

The behavior is undefined if [[cpp/thread/future/valid|{{c|valid()}}]]{{c| {{==}} false}} before the call to this function. 

===Parameters===
{{par begin}}
{{par | timeout_time | maximum time point to block until}}
{{par end}}

===Return value===
{{cpp/thread/future_status_values}}

===Exceptions===
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)

===Notes===
The implementations are encouraged to detect the case when {{c|valid {{==}} false}} before the call and throw a [[cpp/thread/future_error|{{c|future_error}}]] with an error condition of [[cpp/thread/future_errc|{{c|future_errc::no_state}}]].

{{cpp/thread/wait_until_clock_note}}

===Example===
{{#ifeq:{{{1}}}|future|
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;future&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
 
int main()
{
    std::chrono::system_clock::time_point two_seconds_passed
        = std::chrono::system_clock::now() + std::chrono::seconds(2);
    
    // Make a future that that takes 1 second to completed
    std::promise&lt;int&gt; p1;
    std::future&lt;int&gt; f_completes = p1.get_future();
    std::thread([](std::promise&lt;int&gt; p1)
                { 
                    std::this_thread::sleep_for(std::chrono::seconds(1)); 
                    p1.set_value_at_thread_exit(9); 
                }, 
                std::move(p1)
    ).detach();
    
    // Make a future that that takes 5 seconds to completed
    std::promise&lt;int&gt; p2;
    std::future&lt;int&gt; f_times_out = p2.get_future();
    std::thread([](std::promise&lt;int&gt; p2)
                { 
                    std::this_thread::sleep_for(std::chrono::seconds(5)); 
                    p2.set_value_at_thread_exit(8); 
                }, 
                std::move(p2)
    ).detach();
    
    std::cout &lt;&lt; &quot;Waiting for 2 seconds...&quot; &lt;&lt; std::endl;
    
    if(std::future_status::ready == f_completes.wait_until(two_seconds_passed))
        { std::cout &lt;&lt; &quot;f_completes: &quot; &lt;&lt; f_completes.get() &lt;&lt; &quot;\n&quot;; }
    else
        { std::cout &lt;&lt; &quot;f_completes did not complete!\n&quot;; }
    
    if(std::future_status::ready == f_times_out.wait_until(two_seconds_passed))
        { std::cout &lt;&lt; &quot;f_times_out: &quot; &lt;&lt; f_times_out.get() &lt;&lt; &quot;\n&quot;; }
    else
        { std::cout &lt;&lt; &quot;f_times_out did not complete!\n&quot;; }
    
    std::cout &lt;&lt; &quot;Done!\n&quot;;
}
 | p=true
 | output=
Waiting for 2 seconds...
f_completes: 9
f_times_out did not complete!
Done!
}}
|
{{example}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc wait|{{{1|}}}}}
{{dsc inc | cpp/thread/future/dsc wait_for|{{{1|}}}}}
{{dsc end}}</text>
      <sha1>cd1rvjah2rt8t2h2ox06np40tzblxl2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock guard/dsc constructor</title>
    <ns>10</ns>
    <id>2619</id>
    <revision>
      <id>60100</id>
      <parentid>55184</parentid>
      <timestamp>2013-06-01T06:44:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/lock guard/dcl list constructor]] to [[Template:cpp/thread/lock guard/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem ctor | cpp/thread/lock_guard/lock_guard | constructs a lock_guard, optionally locking the given mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock guard/dsc destructor</title>
    <ns>10</ns>
    <id>2620</id>
    <revision>
      <id>60102</id>
      <parentid>55185</parentid>
      <timestamp>2013-06-01T06:44:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/lock guard/dcl list destructor]] to [[Template:cpp/thread/lock guard/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem dtor | cpp/thread/lock_guard/~lock_guard | destructs the lock_guard object, unlocks the underlying mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock guard/dsc operator=</title>
    <ns>10</ns>
    <id>13121</id>
    <revision>
      <id>67021</id>
      <timestamp>2014-01-18T04:51:46Z</timestamp>
      <contributor>
        <username>Dieram3</username>
        <id>1346</id>
      </contributor>
      <comment>not copy-assignable</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}</text>
      <sha1>77x2gksrw7nfpw4adu5pydi8kdymkor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock guard/navbar</title>
    <ns>10</ns>
    <id>2616</id>
    <revision>
      <id>40029</id>
      <parentid>36003</parentid>
      <timestamp>2012-09-28T20:19:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="249">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/lock_guard/navbar heading
|content3 = cpp/thread/lock_guard/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock guard/navbar content</title>
    <ns>10</ns>
    <id>2617</id>
    <revision>
      <id>55186</id>
      <parentid>34941</parentid>
      <timestamp>2013-06-01T05:20:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="151">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/lock_guard/lock_guard}}
{{nv mem ln | cpp/thread/lock_guard/~lock_guard}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock guard/navbar heading</title>
    <ns>10</ns>
    <id>2618</id>
    <revision>
      <id>48025</id>
      <parentid>35933</parentid>
      <timestamp>2013-05-18T17:55:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="45">{{ltt|cpp/thread/lock_guard|std::lock_guard}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock guard/title</title>
    <ns>10</ns>
    <id>4452</id>
    <revision>
      <id>15844</id>
      <timestamp>2011-12-17T16:14:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=lock_guard::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/lock tag types</title>
    <ns>10</ns>
    <id>4473</id>
    <revision>
      <id>55189</id>
      <parentid>39039</parentid>
      <timestamp>2013-06-01T05:20:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="309">{{dsc begin}}
{{dsc hitem | Type | Effect(s)}}
{{dsc | {{tt|defer_lock_t}} | do not acquire ownership of the mutex}}
{{dsc | {{tt|try_to_lock_t}} | try to acquire ownership of the mutex without blocking}}
{{dsc | {{tt|adopt_lock_t}} | assume the calling thread already has ownership of the mutex}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/constructor</title>
    <ns>10</ns>
    <id>4492</id>
    <revision>
      <id>90382</id>
      <parentid>90381</parentid>
      <timestamp>2017-02-22T18:43:20Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="526">{{cpp/thread/{{{1|}}}/title|{{{1}}}}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | num=1 |since={{cpp/std|{{{1|}}}}} |
{{{1}}}();
}}
{{dcl | num=2 |since={{cpp/std|{{{1|}}}}} |1=
{{{1}}}( const {{{1}}}&amp; ) = delete;
}}
{{dcl end}}

@1@ Constructs the mutex. The mutex is in unlocked state after the call.

@2@ Copy constructor is deleted.

===Parameters===
(none)

===Exceptions===
{{lc|std::system_error}} if the construction is unsuccessful.

===See also===
{{dsc begin}}
{{dsc see c | c/thread/mtx_init}}
{{dsc end}}</text>
      <sha1>1fmwp0jyhzm1xqa2tk0lrylhhe9urmm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/destructor</title>
    <ns>10</ns>
    <id>13129</id>
    <revision>
      <id>90386</id>
      <parentid>67050</parentid>
      <timestamp>2017-02-22T18:50:38Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="328">{{cpp/thread/{{{1|}}}/title|~{{{1|}}}}}
{{cpp/thread/{{{1|}}}/navbar}}
{{ddcl |
~{{{1}}}(); 
}}

Destroys the mutex.

The behavior is undefined if the mutex is owned by any thread or if any thread terminates while holding any ownership of the mutex.

===See also===
{{dsc begin}}
{{dsc see c | c/thread/mtx_destroy}}
{{dsc end}}</text>
      <sha1>9sx1ox7fx2ybd0w934idcsoddwhky4u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc constructor</title>
    <ns>10</ns>
    <id>2304</id>
    <revision>
      <id>60104</id>
      <parentid>55193</parentid>
      <timestamp>2013-06-01T06:44:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list constructor]] to [[Template:cpp/thread/mutex/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem ctor | cpp/thread/{{{1|}}}/{{{1|}}} | constructs the mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc destructor</title>
    <ns>10</ns>
    <id>13123</id>
    <revision>
      <id>67039</id>
      <parentid>67028</parentid>
      <timestamp>2014-01-18T13:56:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>use {{{1}}}</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem dtor | cpp/thread/{{{1|}}}/~{{{1|}}} | destroys the mutex}}</text>
      <sha1>rx4zsih4fet1l9ugx4way7goqou6wm0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc lock</title>
    <ns>10</ns>
    <id>2305</id>
    <revision>
      <id>60106</id>
      <parentid>55194</parentid>
      <timestamp>2013-06-01T06:44:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list lock]] to [[Template:cpp/thread/mutex/dsc lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun | cpp/thread/{{{1|}}}/lock | locks the mutex, blocks if the mutex is not available}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc lock shared</title>
    <ns>10</ns>
    <id>10120</id>
    <revision>
      <id>60108</id>
      <parentid>55195</parentid>
      <timestamp>2013-06-01T06:44:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list lock shared]] to [[Template:cpp/thread/mutex/dsc lock shared]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/thread/{{{1|}}}/lock_shared | locks the mutex for shared ownership, blocks if the mutex is not available}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc native handle</title>
    <ns>10</ns>
    <id>2309</id>
    <revision>
      <id>60110</id>
      <parentid>55196</parentid>
      <timestamp>2013-06-01T06:44:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list native handle]] to [[Template:cpp/thread/mutex/dsc native handle]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem fun | cpp/thread/{{{1|}}}/native_handle | returns the underlying implementation-defined thread handle}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc operator=</title>
    <ns>10</ns>
    <id>13122</id>
    <revision>
      <id>67026</id>
      <timestamp>2014-01-18T05:25:21Z</timestamp>
      <contributor>
        <username>Dieram3</username>
        <id>1346</id>
      </contributor>
      <comment>Created page with &quot;{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}&quot;</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}</text>
      <sha1>77x2gksrw7nfpw4adu5pydi8kdymkor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc try lock</title>
    <ns>10</ns>
    <id>2306</id>
    <revision>
      <id>60112</id>
      <parentid>55199</parentid>
      <timestamp>2013-06-01T06:44:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list try lock]] to [[Template:cpp/thread/mutex/dsc try lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/thread/{{{1|}}}/try_lock | tries to lock the mutex, returns if the mutex is not available}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc try lock for</title>
    <ns>10</ns>
    <id>2307</id>
    <revision>
      <id>60114</id>
      <parentid>55202</parentid>
      <timestamp>2013-06-01T06:44:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list try lock for]] to [[Template:cpp/thread/mutex/dsc try lock for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="157">{{dsc mem fun | cpp/thread/{{{1|}}}/try_lock_for | tries to lock the mutex, returns if the mutex has been&lt;br&gt;unavailable for the specified timeout duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc try lock shared</title>
    <ns>10</ns>
    <id>10121</id>
    <revision>
      <id>60116</id>
      <parentid>55203</parentid>
      <timestamp>2013-06-01T06:44:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list try lock shared]] to [[Template:cpp/thread/mutex/dsc try lock shared]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc mem fun | cpp/thread/{{{1|}}}/try_lock_shared | tries to lock the mutex for shared ownership, returns if the mutex is not available}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc try lock shared for</title>
    <ns>10</ns>
    <id>10122</id>
    <revision>
      <id>60118</id>
      <parentid>55204</parentid>
      <timestamp>2013-06-01T06:44:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list try lock shared for]] to [[Template:cpp/thread/mutex/dsc try lock shared for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="185">{{dsc mem fun | cpp/thread/{{{1|}}}/try_lock_shared_for | tries to lock the mutex for shared ownership, returns if the mutex has been&lt;br&gt;unavailable for the specified timeout duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc try lock shared until</title>
    <ns>10</ns>
    <id>10123</id>
    <revision>
      <id>60120</id>
      <parentid>55205</parentid>
      <timestamp>2013-06-01T06:44:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list try lock shared until]] to [[Template:cpp/thread/mutex/dsc try lock shared until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="196">{{dsc mem fun | cpp/thread/{{{1|}}}/try_lock_shared_until | tries to lock the mutex for shared ownership, returns if the mutex has been&lt;br&gt;unavailable until specified time point has been reached}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc try lock until</title>
    <ns>10</ns>
    <id>2308</id>
    <revision>
      <id>60122</id>
      <parentid>55212</parentid>
      <timestamp>2013-06-01T06:44:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list try lock until]] to [[Template:cpp/thread/mutex/dsc try lock until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="168">{{dsc mem fun | cpp/thread/{{{1|}}}/try_lock_until | tries to lock the mutex, returns if the mutex has been&lt;br&gt;unavailable until specified time point has been reached}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc unlock</title>
    <ns>10</ns>
    <id>2310</id>
    <revision>
      <id>60124</id>
      <parentid>55217</parentid>
      <timestamp>2013-06-01T06:44:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list unlock]] to [[Template:cpp/thread/mutex/dsc unlock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">{{dsc mem fun | cpp/thread/{{{1|}}}/unlock | unlocks the mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/dsc unlock shared</title>
    <ns>10</ns>
    <id>10124</id>
    <revision>
      <id>60126</id>
      <parentid>55222</parentid>
      <timestamp>2013-06-01T06:44:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/mutex/dcl list unlock shared]] to [[Template:cpp/thread/mutex/dsc unlock shared]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/thread/{{{1|}}}/unlock_shared | unlocks the mutex (shared ownership)}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/example try lock</title>
    <ns>10</ns>
    <id>10118</id>
    <revision>
      <id>65057</id>
      <parentid>64906</parentid>
      <timestamp>2013-08-30T14:57:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>spacing</comment>
      <text xml:space="preserve" bytes="1422">{{example
 | p=true
 | code=
#include &lt;chrono&gt;
#include &lt;mutex&gt;
#include &lt;thread&gt;
#include &lt;iostream&gt; // std::cout

std::chrono::milliseconds interval(100);

std::mutex mutex;
int job_shared = 0; // both threads can modify 'job_shared',
    // mutex will protect this variable

int job_exclusive = 0; // only one thread can modify 'job_exclusive'
    // no protection needed

// this thread can modify both 'job_shared' and 'job_exclusive'
void job_1() 
{
    std::this_thread::sleep_for(interval); // let 'job_2' take a lock

    while (true) {
        // try to lock mutex to modify 'job_shared'
        if (mutex.try_lock()) {
            std::cout &lt;&lt; &quot;job shared (&quot; &lt;&lt; job_shared &lt;&lt; &quot;)\n&quot;;
            mutex.unlock();
            return;
        } else {
            // can't get lock to modify 'job_shared'
            // but there is some other work to do
            ++job_exclusive;
            std::cout &lt;&lt; &quot;job exclusive (&quot; &lt;&lt; job_exclusive &lt;&lt; &quot;)\n&quot;;
            std::this_thread::sleep_for(interval);
        }
    }
}

// this thread can modify only 'job_shared'
void job_2() 
{
    mutex.lock();
    std::this_thread::sleep_for(5 * interval);
    ++job_shared;
    mutex.unlock();
}

int main() 
{
    std::thread thread_1(job_1);
    std::thread thread_2(job_2);

    thread_1.join();
    thread_2.join();
}
 | output=
job exclusive (1)
job exclusive (2)
job exclusive (3)
job exclusive (4)
job shared (1)
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/lock</title>
    <ns>10</ns>
    <id>2343</id>
    <revision>
      <id>90383</id>
      <parentid>87468</parentid>
      <timestamp>2017-02-22T18:45:32Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="3312">{{cpp/thread/{{{1|}}}/title|lock}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void lock();
}}
{{dcl end}}

Locks the mutex. If another thread has already locked the mutex, a call to {{tt|lock}} will block execution until the lock is acquired.

{{#switch:{{{1}}}
|mutex
|timed_mutex=
If {{tt|lock}} is called by a thread that already owns the {{tt|mutex}}, the behavior is undefined: for example, the program ''may'' deadlock. An implementation that can detect the invalid usage is encouraged to throw a {{lc|std::system_error}} with error condition {{tt|resource_deadlock_would_occur}} instead of deadlocking.
|recursive_mutex
|recursive_timed_mutex=
A thread may call {{tt|lock}} on a recursive mutex repeatedly.  Ownership will only be released after the thread makes a matching number of calls to {{tt|unlock}}.  

The maximum number of levels of ownership is unspecified.  An exception of type {{lc|std::system_error}} will be thrown if this number is exceeded.
|shared_mutex|shared_timed_mutex=
If {{tt|lock}} is called by a thread that already owns the {{tt|mutex}} in any mode (shared or exclusive), the behavior is undefined.
|{{included}}
}}

Prior {{lc|unlock()}} operations on the same mutex ''synchronize-with'' (as defined in {{lc|std::memory_order}}) this operation.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
Throws {{lc|std::system_error}} when errors occur, including errors from the underlying operating system that would prevent {{tt|lock}} from meeting its specifications. The mutex is not locked in the case of any exception being thrown.

===Notes===
{{tt|lock()}} is usually not called directly: {{lc|std::unique_lock}} and {{lc|std::lock_guard}} are used to manage exclusive locking.

{{#switch:{{{1}}}
|shared_mutex
|shared_timed_mutex=
Shared mutexes do not support direct transition from shared to unique ownership mode: the shared lock has to be relinquished with {{lc|unlock_shared()}} before exclusive ownership may be obtained with {{tt|lock()}}.  [http://www.boost.org/doc/libs/release/doc/html/thread/synchronization.html#thread.synchronization.mutex_types.upgrade_mutex boost::upgrade_mutex] may be used for this purpose.
}}

===Example===
{{example
 | This example shows how {{tt|lock}} and {{tt|unlock}} can be used to protect shared data.
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;
#include &lt;mutex&gt;

int g_num = 0;  // protected by g_num_mutex
std::mutex g_num_mutex;

void slow_increment(int id) 
{
    for (int i = 0; i &lt; 3; ++i) {
        g_num_mutex.lock();
        ++g_num;
        std::cout &lt;&lt; id &lt;&lt; &quot; =&gt; &quot; &lt;&lt; g_num &lt;&lt; '\n';
        g_num_mutex.unlock();

        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

int main()
{
    std::thread t1(slow_increment, 0);
    std::thread t2(slow_increment, 1);
    t1.join();
    t2.join();
}
 | output=
0 =&gt; 1
1 =&gt; 2
0 =&gt; 3
1 =&gt; 4
0 =&gt; 5
1 =&gt; 6
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | {{{1|}}}}}
{{#switch:{{{1|}}} | timed_mutex | recursive_timed_mutex =
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | {{{1|}}}}}
}}
{{dsc inc | cpp/thread/mutex/dsc unlock | {{{1|}}}}}
{{dsc see c | c/thread/mtx_lock}}
{{dsc end}}</text>
      <sha1>1phcpsh7our7pbvg6t5froyj8dxp5lf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/native handle</title>
    <ns>10</ns>
    <id>2352</id>
    <revision>
      <id>78696</id>
      <parentid>72809</parentid>
      <timestamp>2015-06-04T07:52:35Z</timestamp>
      <contributor>
        <ip>124.163.209.102</ip>
      </contributor>
      <text xml:space="preserve" bytes="453">{{cpp/thread/{{{1|}}}/title|native_handle}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std| {{{1|}}} }} |notes={{mark optional}}|
native_handle_type native_handle();
}}
{{dcl end}}

Returns the underlying implementation-defined native handle object.

===Parameters===
(none)

===Return value===
Implementation-defined native handle object.

===Exceptions===
Implementation-defined.

===Example===
{{example |
 | code=
 | output=
}}</text>
      <sha1>nh7hn9205iumniyf5e65d273lpkemo5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/navbar</title>
    <ns>10</ns>
    <id>2311</id>
    <revision>
      <id>47773</id>
      <parentid>40030</parentid>
      <timestamp>2013-05-16T20:26:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="239">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/mutex/navbar heading
|content3 = cpp/thread/mutex/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/navbar content</title>
    <ns>10</ns>
    <id>2353</id>
    <revision>
      <id>67030</id>
      <parentid>55226</parentid>
      <timestamp>2014-01-18T07:24:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add dtor</comment>
      <text xml:space="preserve" bytes="346">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/mutex/mutex}}
{{nv mem ln | cpp/thread/mutex/~mutex}}

{{nv h2 | Locking}}
{{nv mem ln | cpp/thread/mutex/lock}}
{{nv mem ln | cpp/thread/mutex/try_lock}}
{{nv mem ln | cpp/thread/mutex/unlock}}

{{nv h2 | Native handle}}
{{nv mem ln | cpp/thread/mutex/native_handle}}
{{nv end}}</text>
      <sha1>a1udvlf55dvil734ijvo0hsur2x3fbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/navbar heading</title>
    <ns>10</ns>
    <id>2315</id>
    <revision>
      <id>47752</id>
      <parentid>35935</parentid>
      <timestamp>2013-05-16T20:21:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="35">{{ltt|cpp/thread/mutex|std::mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/title</title>
    <ns>10</ns>
    <id>2348</id>
    <revision>
      <id>5325</id>
      <timestamp>2011-07-24T19:04:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/try lock</title>
    <ns>10</ns>
    <id>2344</id>
    <revision>
      <id>90384</id>
      <parentid>78660</parentid>
      <timestamp>2017-02-22T18:47:50Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="2009">{{cpp/thread/{{{1|}}}/title|try_lock}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
bool try_lock();
}}
{{dcl end}}

Tries to lock the mutex. Returns immediately. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}.

This function is allowed to fail spuriously and return {{c|false}} even if the mutex is not currently locked by any other thread.

{{#switch:{{{1}}}
|mutex
|timed_mutex=
If {{tt|try_lock}} is called by a thread that already owns the {{tt|mutex}}, the behavior is undefined.
|recursive_mutex
|recursive_timed_mutex=
A thread may call {{tt|try_lock}} on a recursive mutex repeatedly. Successful calls to {{tt|try_lock}} increment the ownsership count: the mutex will only be released after the thread makes a matching number of calls to {{lc|unlock}}.  

The maximum number of levels of ownership is unspecified. A call to {{tt|try_lock}} will return {{c|false}} if this number is exceeded.
|shared_mutex|shared_timed_mutex=
If {{tt|try_lock}} is called by a thread that already owns the {{tt|mutex}} in any mode (shared or exclusive), the behavior is undefined.
|{{included}}
}}

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation if it returns {{c|true}}. Note that prior {{lc|lock()}} does not synchronize with this operation if it returns {{c|false}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the lock was acquired successfully, otherwise {{c|false}}.

===Exceptions===
(none)

===Example===
{{include | cpp/thread/{{{1|}}}/example_try_lock}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | {{{1|}}}}}
{{#switch:{{{1|}}} | timed_mutex | recursive_timed_mutex | shared_timed_mutex = 
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | {{{1|}}}}}
}}
{{dsc inc | cpp/thread/mutex/dsc unlock | {{{1|}}}}}
{{dsc see c | c/thread/mtx_trylock}}
{{dsc end}}</text>
      <sha1>pl70tk4gq88uuwoxwyeb9vczm3vk864</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/try lock for</title>
    <ns>10</ns>
    <id>2349</id>
    <revision>
      <id>68930</id>
      <parentid>68928</parentid>
      <timestamp>2014-03-22T22:42:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="3531">{{cpp/thread/{{{1|}}}/title|try_lock_for}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
template&lt; class Rep, class Period &gt;
bool try_lock_for( const std::chrono::duration&lt;Rep,Period&gt;&amp; timeout_duration );
}}
{{dcl end}}

Tries to lock the mutex. Blocks until specified {{tt|timeout_duration}} has elapsed or the lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}. 

If {{tt|timeout_duration}} is less or equal {{tt|timeout_duration.zero()}}, the function behaves like {{lc|try_lock()}}.

A steady clock is used to measure the duration. This function may block for longer than {{tt|timeout_duration}} due to scheduling or resource contention delays. 

As with {{lc|try_lock()}}, this function is allowed to fail spuriously and return {{c|false}} even if the mutex was not locked by any other thread at some point during {{tt|timeout_duration}}.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation if it returns {{c|true}}.

{{#switch:{{{1}}}
|mutex
|timed_mutex=
If {{tt|try_lock_for}} is called by a thread that already owns the {{tt|mutex}}, the behavior is undefined.
|recursive_mutex
|recursive_timed_mutex=
A thread may call {{tt|try_lock_for}} on a recursive mutex repeatedly. Successful calls to {{tt|try_lock_for}} increment the ownership count: the mutex will only be released after the thread makes a matching number of calls to {{lc|unlock}}.  

The maximum number of levels of ownership is unspecified. A call to {{tt|try_lock_for}} will return {{c|false}} if this number is exceeded.
|shared_timed_mutex=
If {{tt|try_lock_for}} is called by a thread that already owns the {{tt|mutex}} in any mode (shared or exclusive), the behavior is undefined.
|{{included}}
}}

===Parameters===
{{par begin}}
{{par | timeout_duration | maximum duration to block for}}
{{par end}}

===Return value===
{{c|true}} if the lock was acquired successfully, otherwise {{c|false}}.

===Exceptions===
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)

===Example===
{{example |
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;mutex&gt;
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt;

std::mutex cout_mutex; // control access to std::cout
std::timed_mutex mutex;

void job(int id) 
{
    using Ms = std::chrono::milliseconds;
    std::ostringstream stream;
    
    for (int i = 0; i &lt; 3; ++i) {
        if (mutex.try_lock_for(Ms(100))) {
            stream &lt;&lt; &quot;success &quot;;
            std::this_thread::sleep_for(Ms(100));
            mutex.unlock();
        } else {
            stream &lt;&lt; &quot;failed &quot;;
        }
        std::this_thread::sleep_for(Ms(100));
    }

    std::lock_guard&lt;std::mutex&gt; lock(cout_mutex);
    std::cout &lt;&lt; &quot;[&quot; &lt;&lt; id &lt;&lt; &quot;] &quot; &lt;&lt; stream.str() &lt;&lt; &quot;\n&quot;;
}

int main() 
{
    std::vector&lt;std::thread&gt; threads;
    for (int i = 0; i &lt; 4; ++i) {
        threads.emplace_back(job, i);
    }

    for (auto&amp; i: threads) {
        i.join();
    }
}
 | output=
[0] failed failed failed 
[3] failed failed success 
[2] failed success failed 
[1] success failed success
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc unlock | {{{1|}}}}}
{{dsc end}}</text>
      <sha1>1euf71noz2q02sqoilfcwn2m6eubpl3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/try lock until</title>
    <ns>10</ns>
    <id>2350</id>
    <revision>
      <id>90387</id>
      <parentid>68931</parentid>
      <timestamp>2017-02-22T18:52:24Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="3234">{{cpp/thread/{{{1|}}}/title|try_lock_until}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
template&lt; class Clock, class Duration &gt;
bool try_lock_until( const std::chrono::time_point&lt;Clock,Duration&gt;&amp; timeout_time );
}}
{{dcl end}}

Tries to lock the mutex. Blocks until specified {{tt|timeout_time}} has been reached or the lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}.

If {{tt|timeout_time}} has already passed, this function behaves like {{lc|try_lock()}}.

The clock tied to {{tt|timeout_time}} is used, which means that adjustments of the clock are taken into account. Thus, the maximum duration of the block might, but might not, be less or more than  {{c|timeout_time - Clock::now()}} at the time of the call, depending on the direction of the adjustment. The function also may block for longer than until after {{tt|timeout_time}} has been reached due to scheduling or resource contention delays.

As with {{lc|try_lock()}}, this function is allowed to fail spuriously and return {{c|false}} even if the mutex was not locked by any other thread at some point before {{tt|timeout_time}}.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation if it returns {{c|true}}.

{{#switch:{{{1}}}
|mutex
|timed_mutex=
If {{tt|try_lock_until}} is called by a thread that already owns the {{tt|mutex}}, the behavior is undefined.
|recursive_mutex
|recursive_timed_mutex=
A thread may call {{tt|try_lock_until}} on a recursive mutex repeatedly. Successful calls to {{tt|try_lock_until}} increment the ownership count: the mutex will only be released after the thread makes a matching number of calls to {{lc|unlock}}.  

The maximum number of levels of ownership is unspecified. A call to {{tt|try_lock_until}} will return {{c|false}} if this number is exceeded.
|shared_timed_mutex=
If {{tt|try_lock_until}} is called by a thread that already owns the {{tt|mutex}} in any mode (shared or exclusive), the behavior is undefined.
|{{included}}
}}

===Parameters===
{{par begin}}
{{par | timeout_time | maximum time point to block until}}
{{par end}}

===Return value===
{{c|true}} if the lock was acquired successfully, otherwise {{c|false}}.

===Exceptions===
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)

===Example===
{{example
 | This example shows a 10 seconds block
 | code=
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;mutex&gt;

std::{{{1|}}} test_mutex;

void f()
{
    auto now=std::chrono::steady_clock::now();
    test_mutex.try_lock_until(now + std::chrono::seconds(10));
    std::cout &lt;&lt; &quot;hello world\n&quot;;
}

int main()
{
    std::lock_guard&lt;std::{{{1|}}}&gt; l(test_mutex);
    std::thread t(f);
    t.join();
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc unlock | {{{1|}}}}}
{{dsc see c | c/thread/mtx_timedlock}}
{{dsc end}}</text>
      <sha1>0128bjmalc9c9br6hjlm3solpplgkpr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/mutex/unlock</title>
    <ns>10</ns>
    <id>2351</id>
    <revision>
      <id>90385</id>
      <parentid>89763</parentid>
      <timestamp>2017-02-22T18:49:30Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="2225">{{cpp/thread/{{{1|}}}/title|unlock}}
{{cpp/thread/{{{1|}}}/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|{{{1|}}}}} |
void unlock();
}}
{{dcl end}}

{{#switch:{{{1|}}}
| mutex | shared_mutex | shared_timed_mutex | timed_mutex =
Unlocks the mutex.
| recursive_mutex | recursive_timed_mutex =
Unlocks the mutex if its level of ownership is {{c|1}} (there was exactly one more call to {{lc|lock()}} than there were calls to {{tt|unlock()}} made by this thread), reduces the level of ownership by 1 otherwise.
}}

The mutex must be locked by the current thread of execution, otherwise, the behavior is undefined.

This operation ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) any subsequent lock operation that obtains ownership of the same mutex.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
(none)

===Notes===
{{tt|unlock()}} is usually not called directly: {{lc|std::unique_lock}} and {{lc|std::lock_guard}} are used to manage exclusive locking.

===Example===
{{#switch:{{{1|}}} | recursive_mutex | timed_mutex | recursive_timed_mutex | shared_mutex | shared_timed_mutex =
{{example}}
|
{{example
 | This example shows how {{tt|lock}} and {{tt|unlock}} can be used to protect shared data.
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;
#include &lt;mutex&gt;

int g_num = 0;  // protected by g_num_mutex
std::mutex g_num_mutex;

void slow_increment(int id) 
{
    for (int i = 0; i &lt; 3; ++i) {
        g_num_mutex.lock();
        ++g_num;
        std::cout &lt;&lt; id &lt;&lt; &quot; =&gt; &quot; &lt;&lt; g_num &lt;&lt; '\n';
        g_num_mutex.unlock();

        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

int main()
{
    std::thread t1(slow_increment, 0);
    std::thread t2(slow_increment, 1);
    t1.join();
    t2.join();
}
 | output=
0 =&gt; 1
1 =&gt; 2
0 =&gt; 3
1 =&gt; 4
0 =&gt; 5
1 =&gt; 6
}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | {{{1|}}}}}
{{#switch:{{{1|}}} | timed_mutex | recursive_timed_mutex| shared_timed_mutex =
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | {{{1|}}}}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | {{{1|}}}}}
}}
{{dsc see c | c/thread/mtx_unlock}}
{{dsc end}}</text>
      <sha1>k5kufknor542y0c6iu2fipjmwd1sfge</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/navbar</title>
    <ns>10</ns>
    <id>26</id>
    <revision>
      <id>40031</id>
      <parentid>35945</parentid>
      <timestamp>2012-09-28T20:19:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="152">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/navbar content</title>
    <ns>10</ns>
    <id>2319</id>
    <revision>
      <id>89037</id>
      <parentid>83893</parentid>
      <timestamp>2016-12-22T21:56:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+scoped_lock</comment>
      <text xml:space="preserve" bytes="2771">{{nv begin}}
{{nv h1 | Threads}}
{{nv ln | cpp/thread/thread | notes={{mark c++11}}}}
{{nv ln | cpp/thread/hardware_destructive_interference_size | hardware_destructive_interference_size | hardware_constructive_interference_size | notes={{mark c++17}}&lt;br&gt;{{mark c++17}}}}
{{nv h2 | {{tt|this_thread}} namespace}}
{{nv col begin}}
{{nv ln | cpp/thread/get_id | notes={{mark c++11}}}}
{{nv ln | cpp/thread/yield | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/thread/sleep_for | notes={{mark c++11}}}}
{{nv ln | cpp/thread/sleep_until | notes={{mark c++11}}}}
{{nv col end}}
{{nv h1 | Mutual exclusion}}
{{nv col begin}}
{{nv ln | cpp/thread/mutex | notes={{mark c++11}}}}
{{nv ln | cpp/thread/recursive_mutex | notes={{mark c++11}}}}
{{nv ln | cpp/thread/shared_mutex | notes={{mark c++17}}}}
{{nv col next}}
{{nv ln | cpp/thread/timed_mutex | notes={{mark c++11}}}}
{{nv ln | cpp/thread/recursive_timed_mutex | notes={{mark c++11}}}}
{{nv ln | cpp/thread/shared_timed_mutex | notes={{mark c++14}}}}
{{nv col end}}

{{nv h2 | Generic lock management}}
{{nv col begin}}
{{nv ln | cpp/thread/lock_guard | notes={{mark c++11}}}}
{{nv ln | cpp/thread/scoped_lock | notes={{mark c++17}}}}
{{nv ln | cpp/thread/unique_lock | notes={{mark c++11}}}}
{{nv ln | cpp/thread/shared_lock | notes={{mark c++14}}}}
{{nv ln | cpp/thread/lock_tag_t | defer_lock_t | try_to_lock_t | adopt_lock_t | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/thread/lock | notes={{mark c++11}}}}
{{nv ln | cpp/thread/try_lock | notes={{mark c++11}}}}
{{nv ln | cpp/thread/lock_tag | defer_lock | try_to_lock | adopt_lock | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/thread/once_flag | notes={{mark c++11}}}}
{{nv ln | cpp/thread/call_once | notes={{mark c++11}}}}
{{nv col end}}

{{nv h1 | Condition variables}}
{{nv ln | cpp/thread/condition_variable | notes={{mark c++11}}}}
{{nv ln | cpp/thread/condition_variable_any | notes={{mark c++11}}}}
{{nv ln | cpp/thread/notify_all_at_thread_exit | notes={{mark c++11}}}}
{{nv ln | cpp/thread/cv_status | notes={{mark c++11}}}}

{{nv h1 | Futures}}
{{nv col begin}}
{{nv ln | cpp/thread/promise | notes={{mark c++11}}}}
{{nv ln | cpp/thread/future | notes={{mark c++11}}}}
{{nv ln | cpp/thread/shared_future | notes={{mark c++11}}}}
{{nv ln | cpp/thread/packaged_task | notes={{mark c++11}}}}
{{nv ln | cpp/thread/async | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/thread/launch | notes={{mark c++11}}}}
{{nv ln | cpp/thread/future_status | notes={{mark c++11}}}}
{{nv ln | cpp/thread/future_error | notes={{mark c++11}}}}
{{nv ln | cpp/thread/future_category | notes={{mark c++11}}}}
{{nv ln | cpp/thread/future_errc | notes={{mark c++11}}}}
{{nv col end}}

{{nv end}}</text>
      <sha1>i05peqjpwfrklg2t79rtep690pfx2em</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/navbar heading</title>
    <ns>10</ns>
    <id>27</id>
    <revision>
      <id>35947</id>
      <parentid>53</parentid>
      <timestamp>2012-06-15T22:35:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/sidebar heading]] to [[Template:cpp/thread/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="39">[[cpp/thread | Thread support library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc constructor</title>
    <ns>10</ns>
    <id>6437</id>
    <revision>
      <id>60128</id>
      <parentid>55242</parentid>
      <timestamp>2013-06-01T06:45:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list constructor]] to [[Template:cpp/thread/packaged task/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem ctor | cpp/thread/packaged_task/packaged_task | constructs the task object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc destructor</title>
    <ns>10</ns>
    <id>6438</id>
    <revision>
      <id>60130</id>
      <parentid>55245</parentid>
      <timestamp>2013-06-01T06:45:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list destructor]] to [[Template:cpp/thread/packaged task/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem dtor | cpp/thread/packaged_task/~packaged_task | destructs the task object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc get future</title>
    <ns>10</ns>
    <id>6442</id>
    <revision>
      <id>60132</id>
      <parentid>55246</parentid>
      <timestamp>2013-06-01T06:45:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list get future]] to [[Template:cpp/thread/packaged task/dsc get future]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/thread/packaged_task/get_future | returns a {{lc|std::future}} associated with the promised result}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc make ready at thread exit</title>
    <ns>10</ns>
    <id>5085</id>
    <revision>
      <id>60134</id>
      <parentid>55247</parentid>
      <timestamp>2013-06-01T06:45:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list make ready at thread exit]] to [[Template:cpp/thread/packaged task/dsc make ready at thread exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem fun | cpp/thread/packaged_task/make_ready_at_thread_exit | executes the function ensuring that the result is ready only once the current thread exits}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc operator()</title>
    <ns>10</ns>
    <id>6443</id>
    <revision>
      <id>60136</id>
      <parentid>55248</parentid>
      <timestamp>2013-06-01T06:45:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list operator()]] to [[Template:cpp/thread/packaged task/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/thread/packaged_task/operator() | executes the function}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc operator=</title>
    <ns>10</ns>
    <id>6439</id>
    <revision>
      <id>60138</id>
      <parentid>55251</parentid>
      <timestamp>2013-06-01T06:45:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list operator=]] to [[Template:cpp/thread/packaged task/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem fun | cpp/thread/packaged_task/operator{{=}} | moves the task object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc reset</title>
    <ns>10</ns>
    <id>6444</id>
    <revision>
      <id>60140</id>
      <parentid>55252</parentid>
      <timestamp>2013-06-01T06:45:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list reset]] to [[Template:cpp/thread/packaged task/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/thread/packaged_task/reset | resets the state abandoning any stored results of previous executions}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc swap</title>
    <ns>10</ns>
    <id>6441</id>
    <revision>
      <id>60142</id>
      <parentid>55257</parentid>
      <timestamp>2013-06-01T06:45:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list swap]] to [[Template:cpp/thread/packaged task/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/thread/packaged_task/swap | swaps two task objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc swap2</title>
    <ns>10</ns>
    <id>6446</id>
    <revision>
      <id>60144</id>
      <parentid>55262</parentid>
      <timestamp>2013-06-01T06:45:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list swap2]] to [[Template:cpp/thread/packaged task/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="164">{{dsc tfun | cpp/thread/packaged_task/swap2 | title=std::swap{{dsc small|(std::packaged_task)}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc uses allocator</title>
    <ns>10</ns>
    <id>3389</id>
    <revision>
      <id>91213</id>
      <parentid>60146</parentid>
      <timestamp>2017-03-27T20:38:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>I don't care what the DIS says, this needs to go with the allocator support.</comment>
      <text xml:space="preserve" bytes="218">{{dsc ptclass | cpp/thread/packaged_task/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::packaged_task&gt;}} | specializes the {{lc|std::uses_allocator}} type trait | notes={{mark c++11}}{{mark until c++17}}}}</text>
      <sha1>3s9qtgb33s6kpkdpnwcyis5mncvw3ty</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/dsc valid</title>
    <ns>10</ns>
    <id>6440</id>
    <revision>
      <id>60148</id>
      <parentid>55266</parentid>
      <timestamp>2013-06-01T06:45:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/packaged task/dcl list valid]] to [[Template:cpp/thread/packaged task/dsc valid]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/thread/packaged_task/valid | checks if the task object has a valid function}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/navbar</title>
    <ns>10</ns>
    <id>2561</id>
    <revision>
      <id>40032</id>
      <parentid>35937</parentid>
      <timestamp>2012-09-28T20:19:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="257">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/packaged_task/navbar heading
|content3 = cpp/thread/packaged_task/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/navbar content</title>
    <ns>10</ns>
    <id>2918</id>
    <revision>
      <id>55269</id>
      <parentid>35938</parentid>
      <timestamp>2013-06-01T05:21:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="584">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/packaged_task/packaged_task}}
{{nv mem ln | cpp/thread/packaged_task/~packaged_task}}
{{nv mem ln | cpp/thread/packaged_task/operator{{=}}}}
{{nv mem ln | cpp/thread/packaged_task/valid}}
{{nv mem ln | cpp/thread/packaged_task/swap}}

{{nv h2 | Getting the result}}
{{nv mem ln | cpp/thread/packaged_task/get_future}}

{{nv h2 | Execution}}
{{nv mem ln | cpp/thread/packaged_task/operator()}}
{{nv mem ln | cpp/thread/packaged_task/make_ready_at_thread_exit}}
{{nv mem ln | cpp/thread/packaged_task/reset}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/navbar heading</title>
    <ns>10</ns>
    <id>2562</id>
    <revision>
      <id>48024</id>
      <parentid>34640</parentid>
      <timestamp>2013-05-18T17:55:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="51">{{ltt|cpp/thread/packaged_task|std::packaged_task}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/packaged task/title</title>
    <ns>10</ns>
    <id>5088</id>
    <revision>
      <id>18395</id>
      <timestamp>2012-02-02T04:41:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=packaged_task::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc constructor</title>
    <ns>10</ns>
    <id>6429</id>
    <revision>
      <id>60150</id>
      <parentid>55270</parentid>
      <timestamp>2013-06-01T06:45:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list constructor]] to [[Template:cpp/thread/promise/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem ctor | cpp/thread/promise/promise | constructs the promise object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc destructor</title>
    <ns>10</ns>
    <id>6430</id>
    <revision>
      <id>60152</id>
      <parentid>55271</parentid>
      <timestamp>2013-06-01T06:45:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list destructor]] to [[Template:cpp/thread/promise/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem dtor | cpp/thread/promise/~promise | destructs the promise object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc get future</title>
    <ns>10</ns>
    <id>6433</id>
    <revision>
      <id>60154</id>
      <parentid>55272</parentid>
      <timestamp>2013-06-01T06:45:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list get future]] to [[Template:cpp/thread/promise/dsc get future]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/thread/promise/get_future | returns a {{ltt|cpp/thread/future}} associated with the promised result}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc operator=</title>
    <ns>10</ns>
    <id>6431</id>
    <revision>
      <id>60156</id>
      <parentid>55275</parentid>
      <timestamp>2013-06-01T06:45:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list operator=]] to [[Template:cpp/thread/promise/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/thread/promise/operator{{=}} | assigns the shared state}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc set exception</title>
    <ns>10</ns>
    <id>6435</id>
    <revision>
      <id>60158</id>
      <parentid>55276</parentid>
      <timestamp>2013-06-01T06:45:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list set exception]] to [[Template:cpp/thread/promise/dsc set exception]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/thread/promise/set_exception | sets the result to indicate an exception}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc set exception at thread exit</title>
    <ns>10</ns>
    <id>6436</id>
    <revision>
      <id>60160</id>
      <parentid>55279</parentid>
      <timestamp>2013-06-01T06:45:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list set exception at thread exit]] to [[Template:cpp/thread/promise/dsc set exception at thread exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="162">{{dsc mem fun | cpp/thread/promise/set_exception_at_thread_exit | sets the result to indicate an exception while delivering the notification only at thread exit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc set value</title>
    <ns>10</ns>
    <id>6434</id>
    <revision>
      <id>60162</id>
      <parentid>55280</parentid>
      <timestamp>2013-06-01T06:45:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list set value]] to [[Template:cpp/thread/promise/dsc set value]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem fun | cpp/thread/promise/set_value | sets the result to specific value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc set value at thread exit</title>
    <ns>10</ns>
    <id>5084</id>
    <revision>
      <id>60164</id>
      <parentid>55283</parentid>
      <timestamp>2013-06-01T06:45:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list set value at thread exit]] to [[Template:cpp/thread/promise/dsc set value at thread exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc mem fun | cpp/thread/promise/set_value_at_thread_exit | sets the result to specific value while delivering the notification only at thread exit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc swap</title>
    <ns>10</ns>
    <id>6432</id>
    <revision>
      <id>60166</id>
      <parentid>55284</parentid>
      <timestamp>2013-06-01T06:45:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list swap]] to [[Template:cpp/thread/promise/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/thread/promise/swap | swaps two promise objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc swap2</title>
    <ns>10</ns>
    <id>6445</id>
    <revision>
      <id>60168</id>
      <parentid>55285</parentid>
      <timestamp>2013-06-01T06:45:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list swap2]] to [[Template:cpp/thread/promise/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc tfun | cpp/thread/promise/swap2 | title=std::swap{{dsc small|(std::promise)}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/dsc uses allocator</title>
    <ns>10</ns>
    <id>3387</id>
    <revision>
      <id>60170</id>
      <parentid>55286</parentid>
      <timestamp>2013-06-01T06:45:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/promise/dcl list uses allocator]] to [[Template:cpp/thread/promise/dsc uses allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="186">{{dsc ptclass | cpp/thread/promise/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::promise&gt;}} | specializes the {{lc|std::uses_allocator}} type trait | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/navbar</title>
    <ns>10</ns>
    <id>2522</id>
    <revision>
      <id>40033</id>
      <parentid>35614</parentid>
      <timestamp>2012-09-28T20:19:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/promise/navbar heading
|content3 = cpp/thread/promise/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/navbar content</title>
    <ns>10</ns>
    <id>2919</id>
    <revision>
      <id>55289</id>
      <parentid>35422</parentid>
      <timestamp>2013-06-01T05:22:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="556">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/promise/promise}}
{{nv mem ln | cpp/thread/promise/~promise}}
{{nv mem ln | cpp/thread/promise/operator{{=}}}}
{{nv mem ln | cpp/thread/promise/swap}}

{{nv h2 | Getting the result}}
{{nv mem ln | cpp/thread/promise/get_future}}

{{nv h2 | Setting the result}}
{{nv mem ln | cpp/thread/promise/set_value}}
{{nv mem ln | cpp/thread/promise/set_value_at_thread_exit}}
{{nv mem ln | cpp/thread/promise/set_exception}}
{{nv mem ln | cpp/thread/promise/set_exception_at_thread_exit}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/navbar heading</title>
    <ns>10</ns>
    <id>2524</id>
    <revision>
      <id>48090</id>
      <parentid>35212</parentid>
      <timestamp>2013-05-18T18:09:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="39">{{ltt|cpp/thread/promise|std::promise}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/promise/title</title>
    <ns>10</ns>
    <id>5087</id>
    <revision>
      <id>18394</id>
      <timestamp>2012-02-02T04:41:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=promise::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive mutex/example try lock</title>
    <ns>10</ns>
    <id>10115</id>
    <revision>
      <id>48182</id>
      <timestamp>2013-05-18T22:44:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="579">{{example
| code=
#include &lt;iostream&gt;
#include &lt;mutex&gt;
	
int main()
{
    std::mutex test;
    if (test.try_lock()==true) {
        std::cout &lt;&lt; &quot;lock acquired&quot; &lt;&lt; std::endl;
        test.unlock();	//now unlock the mutex    
    } else {
        std::cout &lt;&lt; &quot;lock not acquired&quot; &lt;&lt; std::endl;
    }

    test.lock();	//to lock it again
    if (test.try_lock()) {  //true can be left out
        std::cout &lt;&lt; &quot;lock acquired&quot; &lt;&lt; std::endl;
    } else {
        std::cout &lt;&lt; &quot;lock not acquired&quot; &lt;&lt; std::endl;
    }
    test.unlock(); 
}
 | output=
lock acquired
lock not acquired
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive mutex/navbar</title>
    <ns>10</ns>
    <id>2314</id>
    <revision>
      <id>47753</id>
      <parentid>40034</parentid>
      <timestamp>2013-05-16T20:21:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="259">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/recursive_mutex/navbar heading
|content3 = cpp/thread/recursive_mutex/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive mutex/navbar content</title>
    <ns>10</ns>
    <id>2354</id>
    <revision>
      <id>55290</id>
      <parentid>35939</parentid>
      <timestamp>2013-06-01T05:22:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="366">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/recursive_mutex/recursive_mutex}}

{{nv h2 | Locking}}
{{nv mem ln | cpp/thread/recursive_mutex/lock}}
{{nv mem ln | cpp/thread/recursive_mutex/try_lock}}
{{nv mem ln | cpp/thread/recursive_mutex/unlock}}

{{nv h2 | Native handle}}
{{nv mem ln | cpp/thread/recursive_mutex/native_handle}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive mutex/navbar heading</title>
    <ns>10</ns>
    <id>2317</id>
    <revision>
      <id>47750</id>
      <parentid>47749</parentid>
      <timestamp>2013-05-16T20:21:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="55">{{ltt|cpp/thread/recursive_mutex|std::recursive_mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive mutex/title</title>
    <ns>10</ns>
    <id>2347</id>
    <revision>
      <id>5324</id>
      <timestamp>2011-07-24T19:04:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=recursive_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=recursive_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive timed mutex/example try lock</title>
    <ns>10</ns>
    <id>10116</id>
    <revision>
      <id>48183</id>
      <timestamp>2013-05-18T22:44:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+todo</comment>
      <text xml:space="preserve" bytes="32">{{example
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive timed mutex/navbar</title>
    <ns>10</ns>
    <id>2313</id>
    <revision>
      <id>47754</id>
      <parentid>40035</parentid>
      <timestamp>2013-05-16T20:21:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="271">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/recursive_timed_mutex/navbar heading
|content3 = cpp/thread/recursive_timed_mutex/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive timed mutex/navbar content</title>
    <ns>10</ns>
    <id>2356</id>
    <revision>
      <id>55293</id>
      <parentid>35942</parentid>
      <timestamp>2013-06-01T05:22:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="528">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/recursive_timed_mutex/recursive_timed_mutex}}

{{nv h2 | Locking}}
{{nv mem ln | cpp/thread/recursive_timed_mutex/lock}}
{{nv mem ln | cpp/thread/recursive_timed_mutex/try_lock}}
{{nv mem ln | cpp/thread/recursive_timed_mutex/try_lock_for}}
{{nv mem ln | cpp/thread/recursive_timed_mutex/try_lock_until}}
{{nv mem ln | cpp/thread/recursive_timed_mutex/unlock}}

{{nv h2 | Native handle}}
{{nv mem ln | cpp/thread/recursive_timed_mutex/native_handle}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive timed mutex/navbar heading</title>
    <ns>10</ns>
    <id>2318</id>
    <revision>
      <id>47764</id>
      <parentid>34245</parentid>
      <timestamp>2013-05-16T20:24:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="67">{{ltt|cpp/thread/recursive_timed_mutex|std::recursive_timed_mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/recursive timed mutex/title</title>
    <ns>10</ns>
    <id>2346</id>
    <revision>
      <id>5323</id>
      <timestamp>2011-07-24T19:04:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=recursive_timed_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="118">&lt;onlyinclude&gt;{{cpp/title | n=recursive_timed_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/scoped lock/dsc constructor</title>
    <ns>10</ns>
    <id>15852</id>
    <revision>
      <id>89040</id>
      <timestamp>2016-12-22T22:02:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem ctor | cpp/thread/scoped_lock/scoped_lock | constructs a scoped_lock, optionally locking the given mutexes}}</text>
      <sha1>8309nwjv6d4v6fu226c348fmxdbaqeo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/scoped lock/dsc destructor</title>
    <ns>10</ns>
    <id>15853</id>
    <revision>
      <id>89041</id>
      <timestamp>2016-12-22T22:02:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem dtor | cpp/thread/scoped_lock/~scoped_lock| destructs the scoped_lock object, unlocks the underlying mutexes}}</text>
      <sha1>lm4ub5q9jq2s6b3idi0iqtv7xycrgzx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/scoped lock/dsc operator=</title>
    <ns>10</ns>
    <id>15854</id>
    <revision>
      <id>89042</id>
      <timestamp>2016-12-22T22:03:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | not copy-assignable}}</text>
      <sha1>77x2gksrw7nfpw4adu5pydi8kdymkor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/scoped lock/navbar</title>
    <ns>10</ns>
    <id>15850</id>
    <revision>
      <id>89038</id>
      <timestamp>2016-12-22T22:00:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/scoped_lock/navbar heading
|content3 = cpp/thread/scoped_lock/navbar content
}}</text>
      <sha1>i9zwllcy62okh00otujpm8r8f10yalb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/scoped lock/navbar content</title>
    <ns>10</ns>
    <id>15855</id>
    <revision>
      <id>89044</id>
      <timestamp>2016-12-22T22:04:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="155">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/scoped_lock/scoped_lock}}
{{nv mem ln | cpp/thread/scoped_lock/~scoped_lock}}
{{nv end}}</text>
      <sha1>4qa74b85012ibyps95hbvmiznqu0iux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/scoped lock/navbar heading</title>
    <ns>10</ns>
    <id>15851</id>
    <revision>
      <id>89039</id>
      <timestamp>2016-12-22T22:00:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/thread/scoped_lock|std::scoped_lock}}</text>
      <sha1>k4iyqgweuujik9r58486dibvuqbc9fw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/scoped lock/title</title>
    <ns>10</ns>
    <id>16193</id>
    <revision>
      <id>90547</id>
      <timestamp>2017-03-04T04:27:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=scoped_lock::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>djgc5ub4ou4ky08pih7tcavo22im7w9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared future/navbar</title>
    <ns>10</ns>
    <id>2520</id>
    <revision>
      <id>40036</id>
      <parentid>35943</parentid>
      <timestamp>2012-09-28T20:20:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="257">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/shared_future/navbar heading
|content3 = cpp/thread/shared_future/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared future/navbar content</title>
    <ns>10</ns>
    <id>2917</id>
    <revision>
      <id>55296</id>
      <parentid>35944</parentid>
      <timestamp>2013-06-01T05:22:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="509">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/shared_future/shared_future}}
{{nv mem ln | cpp/thread/shared_future/~shared_future}}
{{nv mem ln | cpp/thread/shared_future/operator{{=}}}}

{{nv h2 | Getting the result}}
{{nv mem ln | cpp/thread/shared_future/get}}

{{nv h2 | State}}
{{nv mem ln | cpp/thread/shared_future/valid}}
{{nv mem ln | cpp/thread/shared_future/wait}}
{{nv mem ln | cpp/thread/shared_future/wait_for}}
{{nv mem ln | cpp/thread/shared_future/wait_until}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared future/navbar heading</title>
    <ns>10</ns>
    <id>2523</id>
    <revision>
      <id>47782</id>
      <parentid>33196</parentid>
      <timestamp>2013-05-16T20:28:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="51">{{ltt|cpp/thread/shared_future|std::shared_future}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared future/title</title>
    <ns>10</ns>
    <id>6464</id>
    <revision>
      <id>25602</id>
      <timestamp>2012-04-23T09:36:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=shared_future::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc constructor</title>
    <ns>10</ns>
    <id>12933</id>
    <revision>
      <id>65024</id>
      <timestamp>2013-08-29T18:36:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem ctor | cpp/thread/shared_lock/shared_lock | constructs a {{tt|shared_lock}}, optionally locking the supplied mutex }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc destructor</title>
    <ns>10</ns>
    <id>12934</id>
    <revision>
      <id>65025</id>
      <timestamp>2013-08-29T18:37:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem dtor | cpp/thread/shared_lock/~shared_lock | unlocks the associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc lock</title>
    <ns>10</ns>
    <id>12935</id>
    <revision>
      <id>65026</id>
      <timestamp>2013-08-29T18:39:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/thread/shared_lock/lock | locks the associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc mutex</title>
    <ns>10</ns>
    <id>12942</id>
    <revision>
      <id>65033</id>
      <timestamp>2013-08-29T18:44:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/thread/shared_lock/mutex | returns a pointer to the associated mutex }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc operator bool</title>
    <ns>10</ns>
    <id>12944</id>
    <revision>
      <id>65035</id>
      <timestamp>2013-08-29T18:45:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/thread/shared_lock/operator bool |  tests whether the lock owns its associated mutex }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc operator=</title>
    <ns>10</ns>
    <id>12945</id>
    <revision>
      <id>65036</id>
      <timestamp>2013-08-29T18:46:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/thread/shared_lock/operator{{=}} | unlocks the mutex, if owned, and acquires ownership of another }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc owns lock</title>
    <ns>10</ns>
    <id>12943</id>
    <revision>
      <id>65034</id>
      <timestamp>2013-08-29T18:44:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem fun | cpp/thread/shared_lock/owns_lock | tests whether the lock owns its associated mutex  }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc release</title>
    <ns>10</ns>
    <id>12941</id>
    <revision>
      <id>65032</id>
      <timestamp>2013-08-29T18:43:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/thread/shared_lock/release | disassociates the mutex without unlocking}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc swap</title>
    <ns>10</ns>
    <id>12940</id>
    <revision>
      <id>65031</id>
      <timestamp>2013-08-29T18:42:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem fun | cpp/thread/shared_lock/swap | swaps the data members with another shared_lock}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc swap2</title>
    <ns>10</ns>
    <id>12802</id>
    <revision>
      <id>63149</id>
      <timestamp>2013-07-03T08:19:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="153">{{dsc tfun | cpp/thread/shared_lock/swap2 | title=std::swap{{dsc small|(std::shared_lock)}} | specialization of {{lc|std::swap}} for {{tt|shared_lock}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc try lock</title>
    <ns>10</ns>
    <id>12936</id>
    <revision>
      <id>65027</id>
      <timestamp>2013-08-29T18:39:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/thread/shared_lock/try_lock | tries to lock the associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc try lock for</title>
    <ns>10</ns>
    <id>12938</id>
    <revision>
      <id>65029</id>
      <timestamp>2013-08-29T18:41:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem fun | cpp/thread/shared_lock/try_lock_for | tries to lock the associated mutex, for the specified duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc try lock until</title>
    <ns>10</ns>
    <id>12937</id>
    <revision>
      <id>65028</id>
      <timestamp>2013-08-29T18:41:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/thread/shared_lock/try_lock_until | tries to lock the associated mutex, until a specified time point}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/dsc unlock</title>
    <ns>10</ns>
    <id>12939</id>
    <revision>
      <id>65030</id>
      <timestamp>2013-08-29T18:41:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem fun | cpp/thread/shared_lock/unlock | unlocks the associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/navbar</title>
    <ns>10</ns>
    <id>10113</id>
    <revision>
      <id>48176</id>
      <timestamp>2013-05-18T21:04:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/shared_lock/navbar heading
|content3 = cpp/thread/shared_lock/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/navbar content</title>
    <ns>10</ns>
    <id>12647</id>
    <revision>
      <id>63153</id>
      <parentid>63152</parentid>
      <timestamp>2013-07-03T08:20:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="864">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/shared_lock/shared_lock}}
{{nv mem ln | cpp/thread/shared_lock/~shared_lock}}
{{nv mem ln | cpp/thread/shared_lock/operator{{=}}}}

{{nv h2 | Shared locking}}
{{nv mem ln | cpp/thread/shared_lock/lock}}
{{nv mem ln | cpp/thread/shared_lock/try_lock}}
{{nv mem ln | cpp/thread/shared_lock/try_lock_for}}
{{nv mem ln | cpp/thread/shared_lock/try_lock_until}}
{{nv mem ln | cpp/thread/shared_lock/unlock}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/thread/shared_lock/swap}}
{{nv mem ln | cpp/thread/shared_lock/release}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/thread/shared_lock/mutex}}
{{nv mem ln | cpp/thread/shared_lock/owns_lock}}
{{nv mem ln | cpp/thread/shared_lock/operator bool}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/thread/shared_lock/swap2 | std::swap(shared_lock)}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/navbar heading</title>
    <ns>10</ns>
    <id>10114</id>
    <revision>
      <id>48177</id>
      <timestamp>2013-05-18T21:05:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/thread/shared_lock|std::shared_lock}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared lock/title</title>
    <ns>10</ns>
    <id>12976</id>
    <revision>
      <id>65371</id>
      <timestamp>2013-09-10T18:29:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=shared_lock::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>e8tmwncx7alcpmjjj5933bil4hnbm4b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared mutex/example try lock</title>
    <ns>10</ns>
    <id>14123</id>
    <revision>
      <id>78700</id>
      <timestamp>2015-06-04T13:34:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+todo</comment>
      <text xml:space="preserve" bytes="32">{{example
 | code=
 | output=
}}</text>
      <sha1>gevis2ubaplp2hmplvce2dn0kxswhhd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared mutex/navbar</title>
    <ns>10</ns>
    <id>13469</id>
    <revision>
      <id>78648</id>
      <parentid>68900</parentid>
      <timestamp>2015-06-02T20:31:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/shared_mutex/navbar heading
|content3 = cpp/thread/shared_mutex/navbar content
}}</text>
      <sha1>7ez7w5yigx75dkcd1ldgyyg88234gyo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared mutex/navbar content</title>
    <ns>10</ns>
    <id>13472</id>
    <revision>
      <id>78649</id>
      <parentid>68908</parentid>
      <timestamp>2015-06-02T20:32:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="548">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/shared_mutex/shared_mutex}}

{{nv h2 | Exclusive locking}}
{{nv mem ln | cpp/thread/shared_mutex/lock}}
{{nv mem ln | cpp/thread/shared_mutex/try_lock}}
{{nv mem ln | cpp/thread/shared_mutex/unlock}}

{{nv h2 | Shared locking}}
{{nv mem ln | cpp/thread/shared_mutex/lock_shared}}
{{nv mem ln | cpp/thread/shared_mutex/try_lock_shared}}
{{nv mem ln | cpp/thread/shared_mutex/unlock_shared}}

{{nv h2 | Native handle}}
{{nv mem ln | cpp/thread/shared_mutex/native_handle}}
{{nv end}}</text>
      <sha1>r7rot024uqmdj2ixf5b3sde83t5roro</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared mutex/navbar heading</title>
    <ns>10</ns>
    <id>13471</id>
    <revision>
      <id>78650</id>
      <parentid>68905</parentid>
      <timestamp>2015-06-02T20:32:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="49">{{ltt|cpp/thread/shared_mutex|std::shared_mutex}}</text>
      <sha1>ia5p812kfip6wni7tbddw7fj0t2qp8l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared mutex/title</title>
    <ns>10</ns>
    <id>13474</id>
    <revision>
      <id>78654</id>
      <parentid>68914</parentid>
      <timestamp>2015-06-02T20:39:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=shared_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>lsm003x12c6zxnn6m6oc8gwaqd8z39p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared timed mutex/example try lock</title>
    <ns>10</ns>
    <id>14122</id>
    <revision>
      <id>78699</id>
      <timestamp>2015-06-04T13:34:10Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+todo</comment>
      <text xml:space="preserve" bytes="32">{{example
 | code=
 | output=
}}</text>
      <sha1>gevis2ubaplp2hmplvce2dn0kxswhhd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared timed mutex/navbar</title>
    <ns>10</ns>
    <id>10110</id>
    <revision>
      <id>68903</id>
      <parentid>68899</parentid>
      <timestamp>2014-03-22T22:31:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>moved</comment>
      <text xml:space="preserve" bytes="265">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/shared_timed_mutex/navbar heading
|content3 = cpp/thread/shared_timed_mutex/navbar content
}}</text>
      <sha1>7eoonwem5i4iqdqy0bjy5nf8ifxy0rf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared timed mutex/navbar content</title>
    <ns>10</ns>
    <id>12648</id>
    <revision>
      <id>68918</id>
      <parentid>68909</parentid>
      <timestamp>2014-03-22T22:35:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="769">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/shared_timed_mutex/shared_timed_mutex}}

{{nv h2 | Exclusive locking}}
{{nv mem ln | cpp/thread/shared_timed_mutex/lock}}
{{nv mem ln | cpp/thread/shared_timed_mutex/try_lock}}
{{nv mem ln | cpp/thread/shared_timed_mutex/try_lock_for}}
{{nv mem ln | cpp/thread/shared_timed_mutex/try_lock_until}}
{{nv mem ln | cpp/thread/shared_timed_mutex/unlock}}

{{nv h2 | Shared locking}}
{{nv mem ln | cpp/thread/shared_timed_mutex/lock_shared}}
{{nv mem ln | cpp/thread/shared_timed_mutex/try_lock_shared}}
{{nv mem ln | cpp/thread/shared_timed_mutex/try_lock_shared_for}}
{{nv mem ln | cpp/thread/shared_timed_mutex/try_lock_shared_until}}
{{nv mem ln | cpp/thread/shared_timed_mutex/unlock_shared}}
{{nv end}}</text>
      <sha1>i2w3hbvpts7bh3wdyhzdvyvks77boi1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared timed mutex/navbar heading</title>
    <ns>10</ns>
    <id>10111</id>
    <revision>
      <id>68906</id>
      <parentid>68904</parentid>
      <timestamp>2014-03-22T22:31:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>moved</comment>
      <text xml:space="preserve" bytes="61">{{ltt|cpp/thread/shared_timed_mutex|std::shared_timed_mutex}}</text>
      <sha1>33wdabnzkjs8c12pnj5hnm9vl9uxxyx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/shared timed mutex/title</title>
    <ns>10</ns>
    <id>12991</id>
    <revision>
      <id>68915</id>
      <parentid>68913</parentid>
      <timestamp>2014-03-22T22:34:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=shared_timed_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>b82z49x76m9nlkt2gl5ni5ad5koekmv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list constructor</title>
    <ns>10</ns>
    <id>12254</id>
    <redirect title="Template:cpp/thread/thread/dsc constructor" />
    <revision>
      <id>60173</id>
      <timestamp>2013-06-01T06:45:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list constructor]] to [[Template:cpp/thread/thread/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/thread/thread/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list destructor</title>
    <ns>10</ns>
    <id>12255</id>
    <redirect title="Template:cpp/thread/thread/dsc destructor" />
    <revision>
      <id>60175</id>
      <timestamp>2013-06-01T06:45:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list destructor]] to [[Template:cpp/thread/thread/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/thread/thread/dsc destructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list detach</title>
    <ns>10</ns>
    <id>12256</id>
    <redirect title="Template:cpp/thread/thread/dsc detach" />
    <revision>
      <id>60177</id>
      <timestamp>2013-06-01T06:45:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list detach]] to [[Template:cpp/thread/thread/dsc detach]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/thread/thread/dsc detach]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list get id</title>
    <ns>10</ns>
    <id>12257</id>
    <redirect title="Template:cpp/thread/thread/dsc get id" />
    <revision>
      <id>60179</id>
      <timestamp>2013-06-01T06:45:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list get id]] to [[Template:cpp/thread/thread/dsc get id]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/thread/thread/dsc get id]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list hardware concurrency</title>
    <ns>10</ns>
    <id>12258</id>
    <redirect title="Template:cpp/thread/thread/dsc hardware concurrency" />
    <revision>
      <id>60181</id>
      <timestamp>2013-06-01T06:45:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list hardware concurrency]] to [[Template:cpp/thread/thread/dsc hardware concurrency]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/thread/thread/dsc hardware concurrency]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list id</title>
    <ns>10</ns>
    <id>12259</id>
    <redirect title="Template:cpp/thread/thread/dsc id" />
    <revision>
      <id>60183</id>
      <timestamp>2013-06-01T06:45:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list id]] to [[Template:cpp/thread/thread/dsc id]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/thread/thread/dsc id]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list join</title>
    <ns>10</ns>
    <id>12260</id>
    <redirect title="Template:cpp/thread/thread/dsc join" />
    <revision>
      <id>60185</id>
      <timestamp>2013-06-01T06:45:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list join]] to [[Template:cpp/thread/thread/dsc join]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/thread/thread/dsc join]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list joinable</title>
    <ns>10</ns>
    <id>12261</id>
    <redirect title="Template:cpp/thread/thread/dsc joinable" />
    <revision>
      <id>60187</id>
      <timestamp>2013-06-01T06:45:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list joinable]] to [[Template:cpp/thread/thread/dsc joinable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/thread/thread/dsc joinable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list native handle</title>
    <ns>10</ns>
    <id>12262</id>
    <redirect title="Template:cpp/thread/thread/dsc native handle" />
    <revision>
      <id>60189</id>
      <timestamp>2013-06-01T06:45:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list native handle]] to [[Template:cpp/thread/thread/dsc native handle]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/thread/thread/dsc native handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list operator=</title>
    <ns>10</ns>
    <id>12263</id>
    <redirect title="Template:cpp/thread/thread/dsc operator=" />
    <revision>
      <id>60191</id>
      <timestamp>2013-06-01T06:45:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list operator=]] to [[Template:cpp/thread/thread/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/thread/thread/dsc operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list swap</title>
    <ns>10</ns>
    <id>12264</id>
    <redirect title="Template:cpp/thread/thread/dsc swap" />
    <revision>
      <id>60193</id>
      <timestamp>2013-06-01T06:45:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list swap]] to [[Template:cpp/thread/thread/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/thread/thread/dsc swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dcl list swap2</title>
    <ns>10</ns>
    <id>12265</id>
    <redirect title="Template:cpp/thread/thread/dsc swap2" />
    <revision>
      <id>60195</id>
      <timestamp>2013-06-01T06:45:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/thread/dcl list swap2]] to [[Template:cpp/thread/thread/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/thread/thread/dsc swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc constructor</title>
    <ns>10</ns>
    <id>2256</id>
    <revision>
      <id>60172</id>
      <parentid>55299</parentid>
      <timestamp>2013-06-01T06:45:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list constructor]] to [[Template:cpp/thread/thread/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem ctor | cpp/thread/thread/thread | constructs new thread object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc destructor</title>
    <ns>10</ns>
    <id>2257</id>
    <revision>
      <id>60174</id>
      <parentid>55300</parentid>
      <timestamp>2013-06-01T06:45:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list destructor]] to [[Template:cpp/thread/thread/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem dtor | cpp/thread/thread/~thread | destructs the thread object, underlying thread must be joined or detached}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc detach</title>
    <ns>10</ns>
    <id>2264</id>
    <revision>
      <id>60176</id>
      <parentid>55303</parentid>
      <timestamp>2013-06-01T06:45:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list detach]] to [[Template:cpp/thread/thread/dsc detach]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/thread/thread/detach | permits the thread to execute independently from the thread handle}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc get id</title>
    <ns>10</ns>
    <id>2260</id>
    <revision>
      <id>87033</id>
      <parentid>87032</parentid>
      <timestamp>2016-07-21T15:46:09Z</timestamp>
      <contributor>
        <username>ElementW</username>
        <id>5585</id>
      </contributor>
      <minor/>
      <comment>Remove extraneous }}</comment>
      <text xml:space="preserve" bytes="117">{{dsc mem fun | cpp/thread/thread/get_id | mem={{{mem|}}} | returns the ''id'' of the thread | notes={{mark c++11}}}}</text>
      <sha1>9lbidnrmvjoh3zwhfvh4cbi1u2log9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc hardware concurrency</title>
    <ns>10</ns>
    <id>2262</id>
    <revision>
      <id>60180</id>
      <parentid>55307</parentid>
      <timestamp>2013-06-01T06:45:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list hardware concurrency]] to [[Template:cpp/thread/thread/dsc hardware concurrency]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem sfun | cpp/thread/thread/hardware_concurrency | returns the number of concurrent threads supported by the implementation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc id</title>
    <ns>10</ns>
    <id>8873</id>
    <revision>
      <id>60182</id>
      <parentid>55308</parentid>
      <timestamp>2013-06-01T06:45:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list id]] to [[Template:cpp/thread/thread/dsc id]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">{{dsc mem class | cpp/thread/thread/id | represents the ''id'' of a thread}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc join</title>
    <ns>10</ns>
    <id>2263</id>
    <revision>
      <id>60184</id>
      <parentid>55309</parentid>
      <timestamp>2013-06-01T06:45:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list join]] to [[Template:cpp/thread/thread/dsc join]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="85">{{dsc mem fun | cpp/thread/thread/join | waits for a thread to finish its execution}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc joinable</title>
    <ns>10</ns>
    <id>2259</id>
    <revision>
      <id>60186</id>
      <parentid>55312</parentid>
      <timestamp>2013-06-01T06:45:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list joinable]] to [[Template:cpp/thread/thread/dsc joinable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc mem fun | cpp/thread/thread/joinable | checks whether the thread is joinable, i.e. potentially running in parallel context}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc native handle</title>
    <ns>10</ns>
    <id>2261</id>
    <revision>
      <id>60188</id>
      <parentid>55313</parentid>
      <timestamp>2013-06-01T06:45:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list native handle]] to [[Template:cpp/thread/thread/dsc native handle]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem fun | cpp/thread/thread/native_handle | returns the underlying implementation-defined thread handle}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc operator=</title>
    <ns>10</ns>
    <id>2258</id>
    <revision>
      <id>60190</id>
      <parentid>55314</parentid>
      <timestamp>2013-06-01T06:45:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list operator=]] to [[Template:cpp/thread/thread/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/thread/thread/operator{{=}} | moves the thread object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc swap</title>
    <ns>10</ns>
    <id>2265</id>
    <revision>
      <id>60192</id>
      <parentid>55317</parentid>
      <timestamp>2013-06-01T06:45:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list swap]] to [[Template:cpp/thread/thread/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc mem fun | cpp/thread/thread/swap | swaps two thread objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/dsc swap2</title>
    <ns>10</ns>
    <id>2266</id>
    <revision>
      <id>60194</id>
      <parentid>55318</parentid>
      <timestamp>2013-06-01T06:45:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/thread/dcl list swap2]] to [[Template:cpp/thread/thread/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tfun | cpp/thread/thread/swap2 | title=std::swap{{dsc small|(std::thread)}} | specializes the {{lc|std::swap}} algorithm| notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/id/dsc operator cmp</title>
    <ns>10</ns>
    <id>12659</id>
    <revision>
      <id>61423</id>
      <timestamp>2013-06-06T00:14:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="197">{{dsc fun | cpp/thread/thread/id/operator_cmp | title=operator{{==}}&lt;br&gt;operator!{{=}}&lt;br&gt;operator&lt; &lt;br&gt; operator&lt;{{=}} &lt;br&gt; operator&gt; &lt;br&gt; operator&gt;{{=}} | compares two {{tt|thread::id}} objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/id/dsc operator ltlt</title>
    <ns>10</ns>
    <id>12660</id>
    <revision>
      <id>61425</id>
      <timestamp>2013-06-06T00:15:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc tfun | cpp/thread/thread/id/operator_ltlt | title=operator&lt;&lt; | serializes a {{tt|thread::id}} object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/id/navbar</title>
    <ns>10</ns>
    <id>5139</id>
    <revision>
      <id>40037</id>
      <parentid>36035</parentid>
      <timestamp>2012-09-28T20:20:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="338">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/thread/navbar heading
|content3 = cpp/thread/thread/navbar content

|heading4 = cpp/thread/thread/id/navbar heading
|content4 = cpp/thread/thread/id/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/id/navbar content</title>
    <ns>10</ns>
    <id>5141</id>
    <revision>
      <id>55321</id>
      <parentid>38107</parentid>
      <timestamp>2013-06-01T05:22:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="422">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/thread/id/id}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/thread/thread/id/operator_cmp | operator{{==}}|operator!{{=}}|operator&lt;|operator&lt;{{=}}|operator&gt;|operator&gt;{{=}} }}
{{nv ln | cpp/thread/thread/id/operator_ltlt | operator&lt;&lt;}}
{{nv h1 | Helper classes}}
{{nv ln | cpp/thread/thread/id/hash | std::hash{{dsc small|&lt;std::thread::id&gt;}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/id/navbar heading</title>
    <ns>10</ns>
    <id>5140</id>
    <revision>
      <id>60986</id>
      <parentid>60985</parentid>
      <timestamp>2013-06-03T11:42:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="44">{{ltt|cpp/thread/thread/id|std::thread::id}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/id/title</title>
    <ns>10</ns>
    <id>9077</id>
    <revision>
      <id>38111</id>
      <timestamp>2012-07-24T10:23:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/thread/thread/title | n=id::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/navbar</title>
    <ns>10</ns>
    <id>2254</id>
    <revision>
      <id>47777</id>
      <parentid>40038</parentid>
      <timestamp>2013-05-16T20:26:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="241">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/thread/navbar heading
|content3 = cpp/thread/thread/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/navbar content</title>
    <ns>10</ns>
    <id>2270</id>
    <revision>
      <id>55322</id>
      <parentid>35951</parentid>
      <timestamp>2013-06-01T05:22:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="682">{{nv begin}}
{{nv h1 | Member classes}}
{{nv mem ln | cpp/thread/thread/id}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/thread/thread}}
{{nv mem ln | cpp/thread/thread/~thread}}
{{nv mem ln | cpp/thread/thread/operator{{=}}}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/thread/thread/joinable}}
{{nv mem ln | cpp/thread/thread/get_id}}
{{nv mem ln | cpp/thread/thread/native_handle}}
{{nv mem ln | cpp/thread/thread/hardware_concurrency}}

{{nv h2 | Operations}}
{{nv mem ln | cpp/thread/thread/join}}
{{nv mem ln | cpp/thread/thread/detach}}
{{nv mem ln | cpp/thread/thread/swap}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/thread/thread/swap2 | std::swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/navbar heading</title>
    <ns>10</ns>
    <id>2255</id>
    <revision>
      <id>47760</id>
      <parentid>35952</parentid>
      <timestamp>2013-05-16T20:23:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="37">{{ltt|cpp/thread/thread|std::thread}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/thread/title</title>
    <ns>10</ns>
    <id>2269</id>
    <revision>
      <id>5141</id>
      <timestamp>2011-07-17T12:04:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=thread::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=thread::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/timed mutex/example try lock</title>
    <ns>10</ns>
    <id>10117</id>
    <revision>
      <id>48184</id>
      <timestamp>2013-05-18T22:45:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+todo</comment>
      <text xml:space="preserve" bytes="32">{{example
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/timed mutex/navbar</title>
    <ns>10</ns>
    <id>2312</id>
    <revision>
      <id>47772</id>
      <parentid>40039</parentid>
      <timestamp>2013-05-16T20:26:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/timed_mutex/navbar heading
|content3 = cpp/thread/timed_mutex/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/timed mutex/navbar content</title>
    <ns>10</ns>
    <id>2355</id>
    <revision>
      <id>55323</id>
      <parentid>35954</parentid>
      <timestamp>2013-06-01T05:22:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/timed_mutex/timed_mutex}}

{{nv h2 | Locking}}
{{nv mem ln | cpp/thread/timed_mutex/lock}}
{{nv mem ln | cpp/thread/timed_mutex/try_lock}}
{{nv mem ln | cpp/thread/timed_mutex/try_lock_for}}
{{nv mem ln | cpp/thread/timed_mutex/try_lock_until}}
{{nv mem ln | cpp/thread/timed_mutex/unlock}}

{{nv h2 | Native handle}}
{{nv mem ln | cpp/thread/timed_mutex/native_handle}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/timed mutex/navbar heading</title>
    <ns>10</ns>
    <id>2316</id>
    <revision>
      <id>47751</id>
      <parentid>35925</parentid>
      <timestamp>2013-05-16T20:21:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/thread/timed_mutex|std::timed_mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/timed mutex/title</title>
    <ns>10</ns>
    <id>2345</id>
    <revision>
      <id>5322</id>
      <timestamp>2011-07-24T19:03:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=timed_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=timed_mutex::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list constructor</title>
    <ns>10</ns>
    <id>12266</id>
    <redirect title="Template:cpp/thread/unique lock/dsc constructor" />
    <revision>
      <id>60197</id>
      <timestamp>2013-06-01T06:45:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list constructor]] to [[Template:cpp/thread/unique lock/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/thread/unique lock/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list destructor</title>
    <ns>10</ns>
    <id>12267</id>
    <redirect title="Template:cpp/thread/unique lock/dsc destructor" />
    <revision>
      <id>60199</id>
      <timestamp>2013-06-01T06:45:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list destructor]] to [[Template:cpp/thread/unique lock/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/thread/unique lock/dsc destructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list lock</title>
    <ns>10</ns>
    <id>12268</id>
    <redirect title="Template:cpp/thread/unique lock/dsc lock" />
    <revision>
      <id>60201</id>
      <timestamp>2013-06-01T06:45:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list lock]] to [[Template:cpp/thread/unique lock/dsc lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/thread/unique lock/dsc lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list mutex</title>
    <ns>10</ns>
    <id>12269</id>
    <redirect title="Template:cpp/thread/unique lock/dsc mutex" />
    <revision>
      <id>60203</id>
      <timestamp>2013-06-01T06:45:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list mutex]] to [[Template:cpp/thread/unique lock/dsc mutex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/thread/unique lock/dsc mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list operator bool</title>
    <ns>10</ns>
    <id>12271</id>
    <redirect title="Template:cpp/thread/unique lock/dsc operator bool" />
    <revision>
      <id>60207</id>
      <timestamp>2013-06-01T06:45:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list operator bool]] to [[Template:cpp/thread/unique lock/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/thread/unique lock/dsc operator bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list operator=</title>
    <ns>10</ns>
    <id>12270</id>
    <redirect title="Template:cpp/thread/unique lock/dsc operator=" />
    <revision>
      <id>60205</id>
      <timestamp>2013-06-01T06:45:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list operator=]] to [[Template:cpp/thread/unique lock/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/thread/unique lock/dsc operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list owns lock</title>
    <ns>10</ns>
    <id>12272</id>
    <redirect title="Template:cpp/thread/unique lock/dsc owns lock" />
    <revision>
      <id>60209</id>
      <timestamp>2013-06-01T06:45:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list owns lock]] to [[Template:cpp/thread/unique lock/dsc owns lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/thread/unique lock/dsc owns lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list release</title>
    <ns>10</ns>
    <id>12273</id>
    <redirect title="Template:cpp/thread/unique lock/dsc release" />
    <revision>
      <id>60211</id>
      <timestamp>2013-06-01T06:45:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list release]] to [[Template:cpp/thread/unique lock/dsc release]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/thread/unique lock/dsc release]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list swap</title>
    <ns>10</ns>
    <id>12274</id>
    <redirect title="Template:cpp/thread/unique lock/dsc swap" />
    <revision>
      <id>60213</id>
      <timestamp>2013-06-01T06:45:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list swap]] to [[Template:cpp/thread/unique lock/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/thread/unique lock/dsc swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list swap2</title>
    <ns>10</ns>
    <id>12275</id>
    <redirect title="Template:cpp/thread/unique lock/dsc swap2" />
    <revision>
      <id>60215</id>
      <timestamp>2013-06-01T06:45:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list swap2]] to [[Template:cpp/thread/unique lock/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/thread/unique lock/dsc swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list try lock</title>
    <ns>10</ns>
    <id>12276</id>
    <redirect title="Template:cpp/thread/unique lock/dsc try lock" />
    <revision>
      <id>60217</id>
      <timestamp>2013-06-01T06:45:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list try lock]] to [[Template:cpp/thread/unique lock/dsc try lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/thread/unique lock/dsc try lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list try lock for</title>
    <ns>10</ns>
    <id>12277</id>
    <redirect title="Template:cpp/thread/unique lock/dsc try lock for" />
    <revision>
      <id>60219</id>
      <timestamp>2013-06-01T06:45:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list try lock for]] to [[Template:cpp/thread/unique lock/dsc try lock for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/thread/unique lock/dsc try lock for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list try lock until</title>
    <ns>10</ns>
    <id>12278</id>
    <redirect title="Template:cpp/thread/unique lock/dsc try lock until" />
    <revision>
      <id>60221</id>
      <timestamp>2013-06-01T06:46:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list try lock until]] to [[Template:cpp/thread/unique lock/dsc try lock until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/thread/unique lock/dsc try lock until]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dcl list unlock</title>
    <ns>10</ns>
    <id>12279</id>
    <redirect title="Template:cpp/thread/unique lock/dsc unlock" />
    <revision>
      <id>60223</id>
      <timestamp>2013-06-01T06:46:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list unlock]] to [[Template:cpp/thread/unique lock/dsc unlock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/thread/unique lock/dsc unlock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc constructor</title>
    <ns>10</ns>
    <id>4456</id>
    <revision>
      <id>60196</id>
      <parentid>55324</parentid>
      <timestamp>2013-06-01T06:45:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list constructor]] to [[Template:cpp/thread/unique lock/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem ctor | cpp/thread/unique_lock/unique_lock | constructs a {{tt|unique_lock}}, optionally locking the supplied mutex }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc destructor</title>
    <ns>10</ns>
    <id>4457</id>
    <revision>
      <id>60198</id>
      <parentid>55331</parentid>
      <timestamp>2013-06-01T06:45:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list destructor]] to [[Template:cpp/thread/unique lock/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc mem dtor | cpp/thread/unique_lock/~unique_lock | unlocks the associated mutex, if owned}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc lock</title>
    <ns>10</ns>
    <id>4459</id>
    <revision>
      <id>60200</id>
      <parentid>55336</parentid>
      <timestamp>2013-06-01T06:45:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list lock]] to [[Template:cpp/thread/unique lock/dsc lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem fun | cpp/thread/unique_lock/lock | locks the associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc mutex</title>
    <ns>10</ns>
    <id>4466</id>
    <revision>
      <id>60202</id>
      <parentid>55341</parentid>
      <timestamp>2013-06-01T06:45:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list mutex]] to [[Template:cpp/thread/unique lock/dsc mutex]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/thread/unique_lock/mutex | returns a pointer to the associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc operator bool</title>
    <ns>10</ns>
    <id>4467</id>
    <revision>
      <id>60206</id>
      <parentid>55345</parentid>
      <timestamp>2013-06-01T06:45:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list operator bool]] to [[Template:cpp/thread/unique lock/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc mem fun | cpp/thread/unique_lock/operator bool | tests whether the lock owns its associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc operator=</title>
    <ns>10</ns>
    <id>4458</id>
    <revision>
      <id>60204</id>
      <parentid>55342</parentid>
      <timestamp>2013-06-01T06:45:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list operator=]] to [[Template:cpp/thread/unique lock/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem fun | cpp/thread/unique_lock/operator{{=}} | unlocks the mutex, if owned, and acquires ownership of another }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc owns lock</title>
    <ns>10</ns>
    <id>4468</id>
    <revision>
      <id>60208</id>
      <parentid>55348</parentid>
      <timestamp>2013-06-01T06:45:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list owns lock]] to [[Template:cpp/thread/unique lock/dsc owns lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem fun | cpp/thread/unique_lock/owns_lock | tests whether the lock owns its associated mutex}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc release</title>
    <ns>10</ns>
    <id>4465</id>
    <revision>
      <id>60210</id>
      <parentid>55351</parentid>
      <timestamp>2013-06-01T06:45:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list release]] to [[Template:cpp/thread/unique lock/dsc release]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/thread/unique_lock/release | disassociates the associated mutex without unlocking it}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc swap</title>
    <ns>10</ns>
    <id>4464</id>
    <revision>
      <id>60212</id>
      <parentid>55352</parentid>
      <timestamp>2013-06-01T06:45:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list swap]] to [[Template:cpp/thread/unique lock/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc mem fun | cpp/thread/unique_lock/swap | swaps state with another {{lc|std::unique_lock}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc swap2</title>
    <ns>10</ns>
    <id>5514</id>
    <revision>
      <id>66384</id>
      <parentid>60214</parentid>
      <timestamp>2013-11-17T01:16:25Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>+ {{mark c++11}}</comment>
      <text xml:space="preserve" bytes="175">{{dsc tfun | cpp/thread/unique_lock/swap2 | title=std::swap{{dsc small|(std::unique_lock)}} | specialization of {{lc|std::swap}} for {{tt|unique_lock}}| notes={{mark c++11}}}}</text>
      <sha1>dq6csrae602cxiwyuvsij8zkk5ez7o1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc try lock</title>
    <ns>10</ns>
    <id>4460</id>
    <revision>
      <id>60216</id>
      <parentid>55356</parentid>
      <timestamp>2013-06-01T06:45:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list try lock]] to [[Template:cpp/thread/unique lock/dsc try lock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/thread/unique_lock/try_lock | tries to lock the associated mutex, returns if the mutex is not available}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc try lock for</title>
    <ns>10</ns>
    <id>4461</id>
    <revision>
      <id>60218</id>
      <parentid>55357</parentid>
      <timestamp>2013-06-01T06:45:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list try lock for]] to [[Template:cpp/thread/unique lock/dsc try lock for]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="194">{{dsc mem fun | cpp/thread/unique_lock/try_lock_for | attempts to lock the associated {{concept|TimedLockable}} mutex, returns if the mutex has been unavailable for the specified time duration}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc try lock until</title>
    <ns>10</ns>
    <id>4462</id>
    <revision>
      <id>60220</id>
      <parentid>55362</parentid>
      <timestamp>2013-06-01T06:46:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list try lock until]] to [[Template:cpp/thread/unique lock/dsc try lock until]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="206">{{dsc mem fun | cpp/thread/unique_lock/try_lock_until | tries to lock the associated {{concept|TimedLockable}} mutex, returns if the mutex has been unavailable until specified time point has been reached }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/dsc unlock</title>
    <ns>10</ns>
    <id>4463</id>
    <revision>
      <id>60222</id>
      <parentid>55373</parentid>
      <timestamp>2013-06-01T06:46:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/thread/unique lock/dcl list unlock]] to [[Template:cpp/thread/unique lock/dsc unlock]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/thread/unique_lock/unlock | unlocks the associated mutex }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/navbar</title>
    <ns>10</ns>
    <id>2732</id>
    <revision>
      <id>48175</id>
      <parentid>40040</parentid>
      <timestamp>2013-05-18T21:04:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="251">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/thread/navbar heading
|content2 = cpp/thread/navbar content

|heading3 = cpp/thread/unique_lock/navbar heading
|content3 = cpp/thread/unique_lock/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/navbar content</title>
    <ns>10</ns>
    <id>4469</id>
    <revision>
      <id>55374</id>
      <parentid>35955</parentid>
      <timestamp>2013-06-01T05:22:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="844">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/thread/unique_lock/unique_lock}}
{{nv mem ln | cpp/thread/unique_lock/~unique_lock}}
{{nv mem ln | cpp/thread/unique_lock/operator{{=}}}}

{{nv h2 | Locking}}
{{nv mem ln | cpp/thread/unique_lock/lock}}
{{nv mem ln | cpp/thread/unique_lock/try_lock}}
{{nv mem ln | cpp/thread/unique_lock/try_lock_for}}
{{nv mem ln | cpp/thread/unique_lock/try_lock_until}}
{{nv mem ln | cpp/thread/unique_lock/unlock}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/thread/unique_lock/swap}}
{{nv mem ln | cpp/thread/unique_lock/release}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/thread/unique_lock/mutex}}
{{nv mem ln | cpp/thread/unique_lock/owns_lock}}
{{nv mem ln | cpp/thread/unique_lock/operator bool}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/thread/unique_lock/swap2 | std::swap}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/navbar heading</title>
    <ns>10</ns>
    <id>2733</id>
    <revision>
      <id>48028</id>
      <parentid>35956</parentid>
      <timestamp>2013-05-18T17:57:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="47">{{ltt|cpp/thread/unique_lock|std::unique_lock}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/unique lock/title</title>
    <ns>10</ns>
    <id>4476</id>
    <revision>
      <id>15900</id>
      <timestamp>2011-12-18T13:33:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=unique_lock::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/thread/wait until clock note</title>
    <ns>10</ns>
    <id>14302</id>
    <revision>
      <id>80765</id>
      <parentid>80764</parentid>
      <timestamp>2015-08-27T17:52:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>hide that in an if because not only cvs link to this note</comment>
      <text xml:space="preserve" bytes="871">The clock tied to {{tt|timeout_time}} is used, which is not required to be a monotonic clock.There are no guarantees regarding the behavior of this function if the clock is adjusted discontinuously, but the existing implementations convert {{tt|timeout_time}} from {{tt|Clock}} to {{lc|std::chrono::system_clock}} and delegate to POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_timedwait.html pthread_cond_timedwait] so that the wait honors ajustments to the system clock, but not to the the user-provided {{tt|Clock}}. In any case, the function also may wait for longer than until after {{tt|timeout_time}} has been reached due to scheduling or resource contention delays.

{{#ifeq:{{{1|}}}|cv|Even if the clock in use is {{lc|std::chrono::steady_clock}} or another monotonic clock, a system clock adjustment may induce a spurious wakeup.}}</text>
      <sha1>q474zk835yypg8htpb12cmy80ktm3y1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/title</title>
    <ns>10</ns>
    <id>28</id>
    <revision>
      <id>4535</id>
      <parentid>3947</parentid>
      <timestamp>2011-06-20T15:54:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="131">&lt;onlyinclude&gt;{{ctitle | n=std::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}} | {{{4|}}} | {{{5|}}} | {{{6|}}} }}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad cast/navbar</title>
    <ns>10</ns>
    <id>4754</id>
    <revision>
      <id>40041</id>
      <parentid>36029</parentid>
      <timestamp>2012-09-28T20:20:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="320">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/types/navbar heading
|content3 = cpp/types/navbar content

|heading4 = cpp/types/bad_cast/navbar heading
|content4 = cpp/types/bad_cast/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad cast/navbar content</title>
    <ns>10</ns>
    <id>4761</id>
    <revision>
      <id>55377</id>
      <parentid>35958</parentid>
      <timestamp>2013-06-01T05:23:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="146">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/types/bad_cast/bad_cast}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad cast/navbar heading</title>
    <ns>10</ns>
    <id>4756</id>
    <revision>
      <id>48081</id>
      <parentid>35832</parentid>
      <timestamp>2013-05-18T18:06:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="41">{{ltt| cpp/types/bad_cast|std::bad_cast}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad cast/title</title>
    <ns>10</ns>
    <id>4753</id>
    <revision>
      <id>17258</id>
      <timestamp>2012-01-09T16:40:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=bad_cast::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad typeid/navbar</title>
    <ns>10</ns>
    <id>4755</id>
    <revision>
      <id>40042</id>
      <parentid>36034</parentid>
      <timestamp>2012-09-28T20:20:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="324">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/types/navbar heading
|content3 = cpp/types/navbar content

|heading4 = cpp/types/bad_typeid/navbar heading
|content4 = cpp/types/bad_typeid/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad typeid/navbar content</title>
    <ns>10</ns>
    <id>4759</id>
    <revision>
      <id>55378</id>
      <parentid>35960</parentid>
      <timestamp>2013-06-01T05:23:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="150">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/types/bad_typeid/bad_typeid}}

{{nv inc | cpp/error/exception/inherit sidebar}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad typeid/navbar heading</title>
    <ns>10</ns>
    <id>4757</id>
    <revision>
      <id>48082</id>
      <parentid>35962</parentid>
      <timestamp>2013-05-18T18:06:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>use regular {{ltt}}</comment>
      <text xml:space="preserve" bytes="45">{{ltt| cpp/types/bad_typeid|std::bad_typeid}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/bad typeid/title</title>
    <ns>10</ns>
    <id>4752</id>
    <revision>
      <id>17257</id>
      <timestamp>2012-01-09T16:40:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=bad_typeid::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/climits/navbar</title>
    <ns>10</ns>
    <id>9521</id>
    <revision>
      <id>40421</id>
      <parentid>40419</parentid>
      <timestamp>2012-10-13T08:37:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>whoops</comment>
      <text xml:space="preserve" bytes="318">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/types/navbar heading
|content3 = cpp/types/navbar content

|heading4 = cpp/types/climits/navbar heading
|content4 = cpp/types/climits/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/climits/navbar content</title>
    <ns>10</ns>
    <id>9522</id>
    <revision>
      <id>55379</id>
      <parentid>40422</parentid>
      <timestamp>2013-06-01T05:23:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="110">{{nv begin}}
{{nv ln | cpp/types/climits/FLT_ROUNDS}}
{{nv ln | cpp/types/climits/FLT_EVAL_METHOD}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/climits/navbar heading</title>
    <ns>10</ns>
    <id>9523</id>
    <revision>
      <id>40423</id>
      <timestamp>2012-10-13T08:38:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="50">[[cpp/types/climits | C numeric limits interface]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/cvaub</title>
    <ns>10</ns>
    <id>14526</id>
    <revision>
      <id>89076</id>
      <parentid>89073</parentid>
      <timestamp>2016-12-27T19:56:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="382">{{#if:{{{packonly|}}}|The types in the parameter pack {{tt|{{{pack}}}}}|{{tt|{{{type1|T}}}}} {{#if:{{{pack|}}}|and all types in the parameter pack {{tt|{{{pack}}}}}|{{#if:{{{type2|}}}|and {{tt|{{{type2}}}}}}}}}}} shall {{#if:{{{pack|{{{type2|}}}}}}|each be|be}} a complete type, (possibly cv-qualified) {{c|void}}, or an array of unknown bound. Otherwise, the behavior is undefined.</text>
      <sha1>t26dt6ogh0tat6icxy8tu2jbwdnhoxj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list NULL</title>
    <ns>10</ns>
    <id>12280</id>
    <redirect title="Template:cpp/types/dsc NULL" />
    <revision>
      <id>60225</id>
      <timestamp>2013-06-01T06:46:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list NULL]] to [[Template:cpp/types/dsc NULL]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[Template:cpp/types/dsc NULL]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list add cv</title>
    <ns>10</ns>
    <id>12281</id>
    <redirect title="Template:cpp/types/dsc add cv" />
    <revision>
      <id>60227</id>
      <timestamp>2013-06-01T06:46:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list add cv]] to [[Template:cpp/types/dsc add cv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/types/dsc add cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list add pointer</title>
    <ns>10</ns>
    <id>12282</id>
    <redirect title="Template:cpp/types/dsc add pointer" />
    <revision>
      <id>60229</id>
      <timestamp>2013-06-01T06:46:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list add pointer]] to [[Template:cpp/types/dsc add pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc add pointer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list add reference</title>
    <ns>10</ns>
    <id>12283</id>
    <redirect title="Template:cpp/types/dsc add reference" />
    <revision>
      <id>60231</id>
      <timestamp>2013-06-01T06:46:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list add reference]] to [[Template:cpp/types/dsc add reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/types/dsc add reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list aligned storage</title>
    <ns>10</ns>
    <id>12284</id>
    <redirect title="Template:cpp/types/dsc aligned storage" />
    <revision>
      <id>60233</id>
      <timestamp>2013-06-01T06:46:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list aligned storage]] to [[Template:cpp/types/dsc aligned storage]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/types/dsc aligned storage]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list aligned union</title>
    <ns>10</ns>
    <id>12285</id>
    <redirect title="Template:cpp/types/dsc aligned union" />
    <revision>
      <id>60235</id>
      <timestamp>2013-06-01T06:46:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list aligned union]] to [[Template:cpp/types/dsc aligned union]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/types/dsc aligned union]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list alignment of</title>
    <ns>10</ns>
    <id>12286</id>
    <redirect title="Template:cpp/types/dsc alignment of" />
    <revision>
      <id>60237</id>
      <timestamp>2013-06-01T06:46:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list alignment of]] to [[Template:cpp/types/dsc alignment of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/types/dsc alignment of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list bad cast</title>
    <ns>10</ns>
    <id>12287</id>
    <redirect title="Template:cpp/types/dsc bad cast" />
    <revision>
      <id>60239</id>
      <timestamp>2013-06-01T06:46:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list bad cast]] to [[Template:cpp/types/dsc bad cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/types/dsc bad cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list bad typeid</title>
    <ns>10</ns>
    <id>12288</id>
    <redirect title="Template:cpp/types/dsc bad typeid" />
    <revision>
      <id>60241</id>
      <timestamp>2013-06-01T06:46:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list bad typeid]] to [[Template:cpp/types/dsc bad typeid]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/types/dsc bad typeid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list common type</title>
    <ns>10</ns>
    <id>12289</id>
    <redirect title="Template:cpp/types/dsc common type" />
    <revision>
      <id>60243</id>
      <timestamp>2013-06-01T06:46:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list common type]] to [[Template:cpp/types/dsc common type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc common type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list conditional</title>
    <ns>10</ns>
    <id>12290</id>
    <redirect title="Template:cpp/types/dsc conditional" />
    <revision>
      <id>60245</id>
      <timestamp>2013-06-01T06:46:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list conditional]] to [[Template:cpp/types/dsc conditional]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc conditional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list decay</title>
    <ns>10</ns>
    <id>12291</id>
    <redirect title="Template:cpp/types/dsc decay" />
    <revision>
      <id>60247</id>
      <timestamp>2013-06-01T06:46:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list decay]] to [[Template:cpp/types/dsc decay]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[Template:cpp/types/dsc decay]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list enable if</title>
    <ns>10</ns>
    <id>12292</id>
    <redirect title="Template:cpp/types/dsc enable if" />
    <revision>
      <id>60249</id>
      <timestamp>2013-06-01T06:46:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list enable if]] to [[Template:cpp/types/dsc enable if]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc enable if]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list extent</title>
    <ns>10</ns>
    <id>12293</id>
    <redirect title="Template:cpp/types/dsc extent" />
    <revision>
      <id>60251</id>
      <timestamp>2013-06-01T06:46:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list extent]] to [[Template:cpp/types/dsc extent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/types/dsc extent]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list has virtual destructor</title>
    <ns>10</ns>
    <id>12294</id>
    <redirect title="Template:cpp/types/dsc has virtual destructor" />
    <revision>
      <id>60253</id>
      <timestamp>2013-06-01T06:46:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list has virtual destructor]] to [[Template:cpp/types/dsc has virtual destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/types/dsc has virtual destructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list integral constant</title>
    <ns>10</ns>
    <id>12295</id>
    <redirect title="Template:cpp/types/dsc integral constant" />
    <revision>
      <id>60255</id>
      <timestamp>2013-06-01T06:46:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list integral constant]] to [[Template:cpp/types/dsc integral constant]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/types/dsc integral constant]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is abstract</title>
    <ns>10</ns>
    <id>12296</id>
    <redirect title="Template:cpp/types/dsc is abstract" />
    <revision>
      <id>60257</id>
      <timestamp>2013-06-01T06:46:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is abstract]] to [[Template:cpp/types/dsc is abstract]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc is abstract]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is arithmetic</title>
    <ns>10</ns>
    <id>12297</id>
    <redirect title="Template:cpp/types/dsc is arithmetic" />
    <revision>
      <id>60259</id>
      <timestamp>2013-06-01T06:46:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is arithmetic]] to [[Template:cpp/types/dsc is arithmetic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/types/dsc is arithmetic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is array</title>
    <ns>10</ns>
    <id>12298</id>
    <redirect title="Template:cpp/types/dsc is array" />
    <revision>
      <id>60261</id>
      <timestamp>2013-06-01T06:46:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is array]] to [[Template:cpp/types/dsc is array]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/types/dsc is array]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is assignable</title>
    <ns>10</ns>
    <id>12299</id>
    <redirect title="Template:cpp/types/dsc is assignable" />
    <revision>
      <id>60263</id>
      <timestamp>2013-06-01T06:46:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is assignable]] to [[Template:cpp/types/dsc is assignable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/types/dsc is assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is base of</title>
    <ns>10</ns>
    <id>12300</id>
    <redirect title="Template:cpp/types/dsc is base of" />
    <revision>
      <id>60265</id>
      <timestamp>2013-06-01T06:46:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is base of]] to [[Template:cpp/types/dsc is base of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/types/dsc is base of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is class</title>
    <ns>10</ns>
    <id>12301</id>
    <redirect title="Template:cpp/types/dsc is class" />
    <revision>
      <id>60267</id>
      <timestamp>2013-06-01T06:46:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is class]] to [[Template:cpp/types/dsc is class]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/types/dsc is class]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is compound</title>
    <ns>10</ns>
    <id>12302</id>
    <redirect title="Template:cpp/types/dsc is compound" />
    <revision>
      <id>60269</id>
      <timestamp>2013-06-01T06:46:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is compound]] to [[Template:cpp/types/dsc is compound]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc is compound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is const</title>
    <ns>10</ns>
    <id>12303</id>
    <redirect title="Template:cpp/types/dsc is const" />
    <revision>
      <id>60271</id>
      <timestamp>2013-06-01T06:46:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is const]] to [[Template:cpp/types/dsc is const]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/types/dsc is const]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is constructible</title>
    <ns>10</ns>
    <id>12304</id>
    <redirect title="Template:cpp/types/dsc is constructible" />
    <revision>
      <id>60273</id>
      <timestamp>2013-06-01T06:46:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is constructible]] to [[Template:cpp/types/dsc is constructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/types/dsc is constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is convertible</title>
    <ns>10</ns>
    <id>12305</id>
    <redirect title="Template:cpp/types/dsc is convertible" />
    <revision>
      <id>60275</id>
      <timestamp>2013-06-01T06:46:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is convertible]] to [[Template:cpp/types/dsc is convertible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/types/dsc is convertible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is copy assignable</title>
    <ns>10</ns>
    <id>12306</id>
    <redirect title="Template:cpp/types/dsc is copy assignable" />
    <revision>
      <id>60277</id>
      <timestamp>2013-06-01T06:46:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is copy assignable]] to [[Template:cpp/types/dsc is copy assignable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/types/dsc is copy assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is copy constructible</title>
    <ns>10</ns>
    <id>12307</id>
    <redirect title="Template:cpp/types/dsc is copy constructible" />
    <revision>
      <id>60279</id>
      <timestamp>2013-06-01T06:46:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is copy constructible]] to [[Template:cpp/types/dsc is copy constructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/types/dsc is copy constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is default constructible</title>
    <ns>10</ns>
    <id>12308</id>
    <redirect title="Template:cpp/types/dsc is default constructible" />
    <revision>
      <id>60281</id>
      <timestamp>2013-06-01T06:46:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is default constructible]] to [[Template:cpp/types/dsc is default constructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/types/dsc is default constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is destructible</title>
    <ns>10</ns>
    <id>12309</id>
    <redirect title="Template:cpp/types/dsc is destructible" />
    <revision>
      <id>60283</id>
      <timestamp>2013-06-01T06:46:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is destructible]] to [[Template:cpp/types/dsc is destructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/types/dsc is destructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is empty</title>
    <ns>10</ns>
    <id>12310</id>
    <redirect title="Template:cpp/types/dsc is empty" />
    <revision>
      <id>60285</id>
      <timestamp>2013-06-01T06:46:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is empty]] to [[Template:cpp/types/dsc is empty]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/types/dsc is empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is enum</title>
    <ns>10</ns>
    <id>12311</id>
    <redirect title="Template:cpp/types/dsc is enum" />
    <revision>
      <id>60287</id>
      <timestamp>2013-06-01T06:46:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is enum]] to [[Template:cpp/types/dsc is enum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[Template:cpp/types/dsc is enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is floating point</title>
    <ns>10</ns>
    <id>12312</id>
    <redirect title="Template:cpp/types/dsc is floating point" />
    <revision>
      <id>60289</id>
      <timestamp>2013-06-01T06:46:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is floating point]] to [[Template:cpp/types/dsc is floating point]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/types/dsc is floating point]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is function</title>
    <ns>10</ns>
    <id>12313</id>
    <redirect title="Template:cpp/types/dsc is function" />
    <revision>
      <id>60291</id>
      <timestamp>2013-06-01T06:46:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is function]] to [[Template:cpp/types/dsc is function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc is function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is fundamental</title>
    <ns>10</ns>
    <id>12314</id>
    <redirect title="Template:cpp/types/dsc is fundamental" />
    <revision>
      <id>60293</id>
      <timestamp>2013-06-01T06:46:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is fundamental]] to [[Template:cpp/types/dsc is fundamental]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/types/dsc is fundamental]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is integral</title>
    <ns>10</ns>
    <id>12315</id>
    <redirect title="Template:cpp/types/dsc is integral" />
    <revision>
      <id>60295</id>
      <timestamp>2013-06-01T06:46:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is integral]] to [[Template:cpp/types/dsc is integral]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc is integral]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is literal type</title>
    <ns>10</ns>
    <id>12316</id>
    <redirect title="Template:cpp/types/dsc is literal type" />
    <revision>
      <id>60297</id>
      <timestamp>2013-06-01T06:46:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is literal type]] to [[Template:cpp/types/dsc is literal type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/types/dsc is literal type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is lvalue reference</title>
    <ns>10</ns>
    <id>12317</id>
    <redirect title="Template:cpp/types/dsc is lvalue reference" />
    <revision>
      <id>60299</id>
      <timestamp>2013-06-01T06:46:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is lvalue reference]] to [[Template:cpp/types/dsc is lvalue reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/types/dsc is lvalue reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is member function pointer</title>
    <ns>10</ns>
    <id>12318</id>
    <redirect title="Template:cpp/types/dsc is member function pointer" />
    <revision>
      <id>60301</id>
      <timestamp>2013-06-01T06:46:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is member function pointer]] to [[Template:cpp/types/dsc is member function pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/types/dsc is member function pointer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is member object pointer</title>
    <ns>10</ns>
    <id>12319</id>
    <redirect title="Template:cpp/types/dsc is member object pointer" />
    <revision>
      <id>60303</id>
      <timestamp>2013-06-01T06:46:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is member object pointer]] to [[Template:cpp/types/dsc is member object pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/types/dsc is member object pointer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is member pointer</title>
    <ns>10</ns>
    <id>12320</id>
    <redirect title="Template:cpp/types/dsc is member pointer" />
    <revision>
      <id>60305</id>
      <timestamp>2013-06-01T06:46:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is member pointer]] to [[Template:cpp/types/dsc is member pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/types/dsc is member pointer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is move assignable</title>
    <ns>10</ns>
    <id>12321</id>
    <redirect title="Template:cpp/types/dsc is move assignable" />
    <revision>
      <id>60307</id>
      <timestamp>2013-06-01T06:46:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is move assignable]] to [[Template:cpp/types/dsc is move assignable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/types/dsc is move assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is move constructible</title>
    <ns>10</ns>
    <id>12322</id>
    <redirect title="Template:cpp/types/dsc is move constructible" />
    <revision>
      <id>60309</id>
      <timestamp>2013-06-01T06:46:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is move constructible]] to [[Template:cpp/types/dsc is move constructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/types/dsc is move constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is object</title>
    <ns>10</ns>
    <id>12323</id>
    <redirect title="Template:cpp/types/dsc is object" />
    <revision>
      <id>60311</id>
      <timestamp>2013-06-01T06:46:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is object]] to [[Template:cpp/types/dsc is object]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc is object]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is pod</title>
    <ns>10</ns>
    <id>12324</id>
    <redirect title="Template:cpp/types/dsc is pod" />
    <revision>
      <id>60313</id>
      <timestamp>2013-06-01T06:47:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is pod]] to [[Template:cpp/types/dsc is pod]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/types/dsc is pod]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is pointer</title>
    <ns>10</ns>
    <id>12325</id>
    <redirect title="Template:cpp/types/dsc is pointer" />
    <revision>
      <id>60315</id>
      <timestamp>2013-06-01T06:47:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is pointer]] to [[Template:cpp/types/dsc is pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/types/dsc is pointer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is polymorphic</title>
    <ns>10</ns>
    <id>12326</id>
    <redirect title="Template:cpp/types/dsc is polymorphic" />
    <revision>
      <id>60317</id>
      <timestamp>2013-06-01T06:47:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is polymorphic]] to [[Template:cpp/types/dsc is polymorphic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/types/dsc is polymorphic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is reference</title>
    <ns>10</ns>
    <id>12327</id>
    <redirect title="Template:cpp/types/dsc is reference" />
    <revision>
      <id>60319</id>
      <timestamp>2013-06-01T06:47:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is reference]] to [[Template:cpp/types/dsc is reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/types/dsc is reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is rvalue reference</title>
    <ns>10</ns>
    <id>12328</id>
    <redirect title="Template:cpp/types/dsc is rvalue reference" />
    <revision>
      <id>60321</id>
      <timestamp>2013-06-01T06:47:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is rvalue reference]] to [[Template:cpp/types/dsc is rvalue reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/types/dsc is rvalue reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is same</title>
    <ns>10</ns>
    <id>12329</id>
    <redirect title="Template:cpp/types/dsc is same" />
    <revision>
      <id>60323</id>
      <timestamp>2013-06-01T06:47:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is same]] to [[Template:cpp/types/dsc is same]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[Template:cpp/types/dsc is same]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is scalar</title>
    <ns>10</ns>
    <id>12330</id>
    <redirect title="Template:cpp/types/dsc is scalar" />
    <revision>
      <id>60325</id>
      <timestamp>2013-06-01T06:47:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is scalar]] to [[Template:cpp/types/dsc is scalar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc is scalar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is signed</title>
    <ns>10</ns>
    <id>12331</id>
    <redirect title="Template:cpp/types/dsc is signed" />
    <revision>
      <id>60327</id>
      <timestamp>2013-06-01T06:47:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is signed]] to [[Template:cpp/types/dsc is signed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc is signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is standard layout</title>
    <ns>10</ns>
    <id>12332</id>
    <redirect title="Template:cpp/types/dsc is standard layout" />
    <revision>
      <id>60329</id>
      <timestamp>2013-06-01T06:47:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is standard layout]] to [[Template:cpp/types/dsc is standard layout]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/types/dsc is standard layout]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is trivial</title>
    <ns>10</ns>
    <id>12333</id>
    <redirect title="Template:cpp/types/dsc is trivial" />
    <revision>
      <id>60331</id>
      <timestamp>2013-06-01T06:47:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is trivial]] to [[Template:cpp/types/dsc is trivial]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/types/dsc is trivial]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is trivially copyable</title>
    <ns>10</ns>
    <id>12334</id>
    <redirect title="Template:cpp/types/dsc is trivially copyable" />
    <revision>
      <id>60333</id>
      <timestamp>2013-06-01T06:47:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is trivially copyable]] to [[Template:cpp/types/dsc is trivially copyable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/types/dsc is trivially copyable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is union</title>
    <ns>10</ns>
    <id>12335</id>
    <redirect title="Template:cpp/types/dsc is union" />
    <revision>
      <id>60335</id>
      <timestamp>2013-06-01T06:47:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is union]] to [[Template:cpp/types/dsc is union]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/types/dsc is union]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is unsigned</title>
    <ns>10</ns>
    <id>12336</id>
    <redirect title="Template:cpp/types/dsc is unsigned" />
    <revision>
      <id>60337</id>
      <timestamp>2013-06-01T06:47:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is unsigned]] to [[Template:cpp/types/dsc is unsigned]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc is unsigned]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is void</title>
    <ns>10</ns>
    <id>12337</id>
    <redirect title="Template:cpp/types/dsc is void" />
    <revision>
      <id>60339</id>
      <timestamp>2013-06-01T06:47:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is void]] to [[Template:cpp/types/dsc is void]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[Template:cpp/types/dsc is void]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list is volatile</title>
    <ns>10</ns>
    <id>12338</id>
    <redirect title="Template:cpp/types/dsc is volatile" />
    <revision>
      <id>60341</id>
      <timestamp>2013-06-01T06:47:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list is volatile]] to [[Template:cpp/types/dsc is volatile]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc is volatile]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list make signed</title>
    <ns>10</ns>
    <id>12339</id>
    <redirect title="Template:cpp/types/dsc make signed" />
    <revision>
      <id>60343</id>
      <timestamp>2013-06-01T06:47:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list make signed]] to [[Template:cpp/types/dsc make signed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc make signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list make unsigned</title>
    <ns>10</ns>
    <id>12340</id>
    <redirect title="Template:cpp/types/dsc make unsigned" />
    <revision>
      <id>60345</id>
      <timestamp>2013-06-01T06:47:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list make unsigned]] to [[Template:cpp/types/dsc make unsigned]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/types/dsc make unsigned]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list max align t</title>
    <ns>10</ns>
    <id>12341</id>
    <redirect title="Template:cpp/types/dsc max align t" />
    <revision>
      <id>60347</id>
      <timestamp>2013-06-01T06:47:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list max align t]] to [[Template:cpp/types/dsc max align t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/types/dsc max align t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list nullptr t</title>
    <ns>10</ns>
    <id>12342</id>
    <redirect title="Template:cpp/types/dsc nullptr t" />
    <revision>
      <id>60349</id>
      <timestamp>2013-06-01T06:47:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list nullptr t]] to [[Template:cpp/types/dsc nullptr t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc nullptr t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list numeric limits</title>
    <ns>10</ns>
    <id>12343</id>
    <redirect title="Template:cpp/types/dsc numeric limits" />
    <revision>
      <id>60351</id>
      <timestamp>2013-06-01T06:47:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list numeric limits]] to [[Template:cpp/types/dsc numeric limits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/types/dsc numeric limits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list offsetof</title>
    <ns>10</ns>
    <id>12344</id>
    <redirect title="Template:cpp/types/dsc offsetof" />
    <revision>
      <id>60353</id>
      <timestamp>2013-06-01T06:47:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list offsetof]] to [[Template:cpp/types/dsc offsetof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/types/dsc offsetof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list ptrdiff t</title>
    <ns>10</ns>
    <id>12345</id>
    <redirect title="Template:cpp/types/dsc ptrdiff t" />
    <revision>
      <id>60355</id>
      <timestamp>2013-06-01T06:47:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list ptrdiff t]] to [[Template:cpp/types/dsc ptrdiff t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc ptrdiff t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list rank</title>
    <ns>10</ns>
    <id>12346</id>
    <redirect title="Template:cpp/types/dsc rank" />
    <revision>
      <id>60357</id>
      <timestamp>2013-06-01T06:47:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list rank]] to [[Template:cpp/types/dsc rank]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[Template:cpp/types/dsc rank]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list remove all extents</title>
    <ns>10</ns>
    <id>12347</id>
    <redirect title="Template:cpp/types/dsc remove all extents" />
    <revision>
      <id>60359</id>
      <timestamp>2013-06-01T06:47:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list remove all extents]] to [[Template:cpp/types/dsc remove all extents]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/types/dsc remove all extents]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list remove cv</title>
    <ns>10</ns>
    <id>12348</id>
    <redirect title="Template:cpp/types/dsc remove cv" />
    <revision>
      <id>60361</id>
      <timestamp>2013-06-01T06:47:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list remove cv]] to [[Template:cpp/types/dsc remove cv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc remove cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list remove extent</title>
    <ns>10</ns>
    <id>12349</id>
    <redirect title="Template:cpp/types/dsc remove extent" />
    <revision>
      <id>60363</id>
      <timestamp>2013-06-01T06:47:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list remove extent]] to [[Template:cpp/types/dsc remove extent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/types/dsc remove extent]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list remove pointer</title>
    <ns>10</ns>
    <id>12350</id>
    <redirect title="Template:cpp/types/dsc remove pointer" />
    <revision>
      <id>60365</id>
      <timestamp>2013-06-01T06:47:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list remove pointer]] to [[Template:cpp/types/dsc remove pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/types/dsc remove pointer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list remove reference</title>
    <ns>10</ns>
    <id>12351</id>
    <redirect title="Template:cpp/types/dsc remove reference" />
    <revision>
      <id>60367</id>
      <timestamp>2013-06-01T06:47:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list remove reference]] to [[Template:cpp/types/dsc remove reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/types/dsc remove reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list result of</title>
    <ns>10</ns>
    <id>12352</id>
    <redirect title="Template:cpp/types/dsc result of" />
    <revision>
      <id>60369</id>
      <timestamp>2013-06-01T06:47:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list result of]] to [[Template:cpp/types/dsc result of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc result of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list size t</title>
    <ns>10</ns>
    <id>12353</id>
    <redirect title="Template:cpp/types/dsc size t" />
    <revision>
      <id>60371</id>
      <timestamp>2013-06-01T06:47:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list size t]] to [[Template:cpp/types/dsc size t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/types/dsc size t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list type index</title>
    <ns>10</ns>
    <id>12354</id>
    <redirect title="Template:cpp/types/dsc type index" />
    <revision>
      <id>60373</id>
      <timestamp>2013-06-01T06:47:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list type index]] to [[Template:cpp/types/dsc type index]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/types/dsc type index]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list type info</title>
    <ns>10</ns>
    <id>12355</id>
    <redirect title="Template:cpp/types/dsc type info" />
    <revision>
      <id>60375</id>
      <timestamp>2013-06-01T06:47:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list type info]] to [[Template:cpp/types/dsc type info]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/types/dsc type info]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dcl list underlying type</title>
    <ns>10</ns>
    <id>12356</id>
    <redirect title="Template:cpp/types/dsc underlying type" />
    <revision>
      <id>60377</id>
      <timestamp>2013-06-01T06:47:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/dcl list underlying type]] to [[Template:cpp/types/dsc underlying type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/types/dsc underlying type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc CHAR BIT</title>
    <ns>10</ns>
    <id>15794</id>
    <revision>
      <id>88944</id>
      <timestamp>2016-12-20T20:57:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="70">{{dsc macro const | CHAR_BIT | number of bits in byte | nolink=true }}</text>
      <sha1>56oj5y8a0sjxp5s7zol0bnc5oi14frr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc CHAR MAX</title>
    <ns>10</ns>
    <id>15797</id>
    <revision>
      <id>88947</id>
      <timestamp>2016-12-20T20:58:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="75">{{dsc macro const | CHAR_MAX | maximum value of {{c|char}} | nolink=true }}</text>
      <sha1>nh95tjfxay4kmfr165njsun3lqepmab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc CHAR MIN</title>
    <ns>10</ns>
    <id>15796</id>
    <revision>
      <id>88946</id>
      <timestamp>2016-12-20T20:58:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="75">{{dsc macro const | CHAR_MIN | minimum value of {{c|char}} | nolink=true }}</text>
      <sha1>nw6aro9p6qdgybxeknrb0xtyun5b9s4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc DECIMAL DIG</title>
    <ns>10</ns>
    <id>15802</id>
    <revision>
      <id>88953</id>
      <timestamp>2016-12-20T21:04:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="353">{{dsc macro const | DECIMAL_DIG | conversion from {{c|long double}} to decimal with at least {{tt|DECIMAL_DIG}} digits and back to {{c|long double}} is the identity conversion. : this is the decimal precision required to serialize/deserialize a {{c|long double}} (see also {{lc|std::numeric_limits::max_digits10}}) | nolink=true | notes={{mark c++11}}}}</text>
      <sha1>hnkvsfztqnavbgk56l4qoqiiztgkstl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc FLT EVAL METHOD</title>
    <ns>10</ns>
    <id>15815</id>
    <revision>
      <id>88966</id>
      <timestamp>2016-12-20T21:06:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc macro const | cpp/types/climits/FLT_EVAL_METHOD | specifies in what precision all arithmetic operations are done | notes={{mark c++11}} }}</text>
      <sha1>gczsnd8p447ut2jxi3vceqk1h8jqj02</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc FLT RADIX</title>
    <ns>10</ns>
    <id>15801</id>
    <revision>
      <id>88952</id>
      <timestamp>2016-12-20T21:04:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="135">{{dsc macro const | FLT_RADIX | the radix (integer base) used by the representation of all three  floating-point types | nolink=true }}</text>
      <sha1>ai6gyiedg01a7qem69vis1q8fst1o2r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc FLT ROUNDS</title>
    <ns>10</ns>
    <id>15814</id>
    <revision>
      <id>88965</id>
      <timestamp>2016-12-20T21:06:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">{{dsc macro const | cpp/types/climits/FLT_ROUNDS | default rounding mode of floating-point arithmetics }}</text>
      <sha1>h6mmyj8rfmsgnkxzt0vbmqpz9p2mdng</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INT FASTn MAX</title>
    <ns>10</ns>
    <id>15833</id>
    <revision>
      <id>88986</id>
      <timestamp>2016-12-20T21:22:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="220">{{dsc macro const | INT_FAST8_MAX&lt;br&gt;INT_FAST16_MAX&lt;br&gt;INT_FAST32_MAX&lt;br&gt;INT_FAST64_MAX |  maximum value of an object of type {{c|int_fast8_t}}, {{c|int_fast16_t}}, {{c|int_fast32_t}}, {{c|int_fast64_t}} | nolink=true }}</text>
      <sha1>swbuqeegpfmc5t557x1ywkshqn7id73</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INT FASTn MIN</title>
    <ns>10</ns>
    <id>15828</id>
    <revision>
      <id>88981</id>
      <timestamp>2016-12-20T21:21:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="220">{{dsc macro const | INT_FAST8_MIN&lt;br&gt;INT_FAST16_MIN&lt;br&gt;INT_FAST32_MIN&lt;br&gt;INT_FAST64_MIN |  minimum value of an object of type {{c|int_fast8_t}}, {{c|int_fast16_t}}, {{c|int_fast32_t}}, {{c|int_fast64_t}} | nolink=true }}</text>
      <sha1>40r91593m7fybk7qdt86wjo42f58pyn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INT LEAST8 MAX</title>
    <ns>10</ns>
    <id>15834</id>
    <revision>
      <id>88987</id>
      <timestamp>2016-12-20T21:22:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="228">{{dsc macro const | INT_LEAST8_MAX&lt;br&gt;INT_LEAST16_MAX&lt;br&gt;INT_LEAST32_MAX&lt;br&gt;INT_LEAST64_MAX |  maximum value of an object of type {{c|int_least8_t}}, {{c|int_least16_t}}, {{c|int_least32_t}}, {{c|int_least64_t}} | nolink=true }}</text>
      <sha1>8i3pxy4s5iq24gjt4znpkd220fg0akc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INT LEASTn MIN</title>
    <ns>10</ns>
    <id>15829</id>
    <revision>
      <id>88982</id>
      <timestamp>2016-12-20T21:21:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="228">{{dsc macro const | INT_LEAST8_MIN&lt;br&gt;INT_LEAST16_MIN&lt;br&gt;INT_LEAST32_MIN&lt;br&gt;INT_LEAST64_MIN |  minimum value of an object of type {{c|int_least8_t}}, {{c|int_least16_t}}, {{c|int_least32_t}}, {{c|int_least64_t}} | nolink=true }}</text>
      <sha1>83o6ddf7muy0sbz25r1ccry5bkv3i0y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTMAX C</title>
    <ns>10</ns>
    <id>15843</id>
    <revision>
      <id>88996</id>
      <timestamp>2016-12-20T21:25:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="157">{{dsc macro fun | INTMAX_C | expands to an integer constant expression having the value specified by its argument and the type {{c|intmax_t}} | nolink=true}}</text>
      <sha1>lt1rgqffz5zy2czi9bgjm7semhajpxt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTMAX MAX</title>
    <ns>10</ns>
    <id>15836</id>
    <revision>
      <id>88989</id>
      <timestamp>2016-12-20T21:22:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc macro const | INTMAX_MAX | maximum value of an object of type {{c|intmax_t}} | nolink=true }}</text>
      <sha1>k6kdpx8lsligt8km7mzobd9b6wcb6ka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTMAX MIN</title>
    <ns>10</ns>
    <id>15831</id>
    <revision>
      <id>88984</id>
      <timestamp>2016-12-20T21:21:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc macro const | INTMAX_MIN | minimum value of an object of type {{c|intmax_t}} | nolink=true }}</text>
      <sha1>fmt8i7c26ozz4dopbbzxea5pq7op2pm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTPTR MAX</title>
    <ns>10</ns>
    <id>15835</id>
    <revision>
      <id>88988</id>
      <timestamp>2016-12-20T21:22:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc macro const | INTPTR_MAX | maximum value of an object of type {{c|intptr_t}} | nolink=true }}</text>
      <sha1>r3qvwvhrzpax3xofal68f4rwjppakvo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTPTR MIN</title>
    <ns>10</ns>
    <id>15830</id>
    <revision>
      <id>88983</id>
      <timestamp>2016-12-20T21:21:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="99">{{dsc macro const | INTPTR_MIN | minimum value of an object of type {{c|intptr_t}} | nolink=true }}</text>
      <sha1>eobct1yfmnsg9tv4i96ylk7agwa39ub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTn C</title>
    <ns>10</ns>
    <id>15842</id>
    <revision>
      <id>88995</id>
      <timestamp>2016-12-20T21:25:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="268">{{dsc macro fun | INT8_C&lt;br&gt;INT16_C&lt;br&gt;INT32_C&lt;br&gt;INT64_C | expands to an integer constant expression having the value specified by its argument and the type {{c|int_least8_t}}, {{c|int_least16_t}}, {{c|int_least32_t}}, {{c|int_least64_t}} respectively | nolink=true}}</text>
      <sha1>lui1wcgl74vaevn8fprxbhwkwvcks84</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTn MAX</title>
    <ns>10</ns>
    <id>15832</id>
    <revision>
      <id>88985</id>
      <timestamp>2016-12-20T21:21:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="180">{{dsc macro const | INT8_MAX&lt;br&gt;INT16_MAX&lt;br&gt;INT32_MAX&lt;br&gt;INT64_MAX |  maximum value of an object of type {{c|int8_t}}, {{c|int16_t}}, {{c|int32_t}}, {{c|int64_t}} | nolink=true }}</text>
      <sha1>07bgslj601fooa26ducg5feafj3k954</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc INTn MIN</title>
    <ns>10</ns>
    <id>15827</id>
    <revision>
      <id>88980</id>
      <timestamp>2016-12-20T21:21:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="180">{{dsc macro const | INT8_MIN&lt;br&gt;INT16_MIN&lt;br&gt;INT32_MIN&lt;br&gt;INT64_MIN |  minimum value of an object of type {{c|int8_t}}, {{c|int16_t}}, {{c|int32_t}}, {{c|int64_t}} | nolink=true }}</text>
      <sha1>6g92woxwk0el4m8h5mhy8kornzarzrk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc MB LEN MAX</title>
    <ns>10</ns>
    <id>15795</id>
    <revision>
      <id>88945</id>
      <timestamp>2016-12-20T20:58:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="98">{{dsc macro const | MB_LEN_MAX | maximum number of bytes in a multibyte character | nolink=true }}</text>
      <sha1>7nje0ptg1dfqa8yqfhc8fkq9qnfyadl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc NULL</title>
    <ns>10</ns>
    <id>2873</id>
    <revision>
      <id>60224</id>
      <parentid>55380</parentid>
      <timestamp>2013-06-01T06:46:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list NULL]] to [[Template:cpp/types/dsc NULL]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="83">{{dsc macro const | cpp/types/NULL | implementation-defined null pointer constant}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc PTRDIFF MAX</title>
    <ns>10</ns>
    <id>15786</id>
    <revision>
      <id>88936</id>
      <timestamp>2016-12-20T20:54:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc macro const | PTRDIFF_MAX | maximum value of object of {{lc|std::ptrdiff_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>fp11vo0bxzld5b70r2xn6upm99emy97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc PTRDIFF MIN</title>
    <ns>10</ns>
    <id>15785</id>
    <revision>
      <id>88935</id>
      <timestamp>2016-12-20T20:54:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc macro const | PTRDIFF_MIN | minimum value of object of {{lc|std::ptrdiff_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>oufvn3335784xjg8tpe705iu2q6rnby</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc SIG ATOMIC MAX</title>
    <ns>10</ns>
    <id>15789</id>
    <revision>
      <id>88939</id>
      <timestamp>2016-12-20T20:54:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc macro const | SIG_ATOMIC_MAX | maximum value of object of {{lc|std::sig_atomic_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>75xvjd2v0i1zcqqzki4yb5lgswp4nt1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc SIG ATOMIC MIN</title>
    <ns>10</ns>
    <id>15788</id>
    <revision>
      <id>88938</id>
      <timestamp>2016-12-20T20:54:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="132">{{dsc macro const | SIG_ATOMIC_MIN | minimum value of object of {{lc|std::sig_atomic_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>5lo25r618ykpw5dxmtjuqunfjnn3rk1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc SIZE MAX</title>
    <ns>10</ns>
    <id>15787</id>
    <revision>
      <id>88937</id>
      <timestamp>2016-12-20T20:54:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc macro const | SIZE_MAX | maximum value of object of {{lc|std::size_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>snii218uhxriqn5jx37v4zmfczhtorq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc UINT FASTn MAX</title>
    <ns>10</ns>
    <id>15838</id>
    <revision>
      <id>88991</id>
      <timestamp>2016-12-20T21:24:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="228">{{dsc macro const | UINT_FAST8_MAX&lt;br&gt;UINT_FAST16_MAX&lt;br&gt;UINT_FAST32_MAX&lt;br&gt;UINT_FAST64_MAX |  maximum value of an object of type {{c|uint_fast8_t}}, {{c|uint_fast16_t}}, {{c|uint_fast32_t}}, {{c|uint_fast64_t}} | nolink=true }}</text>
      <sha1>dovsizlpdtq7rwjasydfmxj8fncpz6k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc UINT LEASTn MAX</title>
    <ns>10</ns>
    <id>15839</id>
    <revision>
      <id>88992</id>
      <timestamp>2016-12-20T21:24:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="236">{{dsc macro const | UINT_LEAST8_MAX&lt;br&gt;UINT_LEAST16_MAX&lt;br&gt;UINT_LEAST32_MAX&lt;br&gt;UINT_LEAST64_MAX |  maximum value of an object of type {{c|uint_least8_t}}, {{c|uint_least16_t}}, {{c|uint_least32_t}}, {{c|uint_least64_t}} | nolink=true }}</text>
      <sha1>fm1097hihwl6har6ffgo9kcp5kqa3jo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc UINTMAX C</title>
    <ns>10</ns>
    <id>15845</id>
    <revision>
      <id>88999</id>
      <parentid>88998</parentid>
      <timestamp>2016-12-20T21:26:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="159">{{dsc macro fun | UINTMAX_C | expands to an integer constant expression having the value specified by its argument and the type {{c|uintmax_t}} | nolink=true}}</text>
      <sha1>fi5xp42e3lcmog08gr410ukgmp54evv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc UINTMAX MAX</title>
    <ns>10</ns>
    <id>15841</id>
    <revision>
      <id>88994</id>
      <timestamp>2016-12-20T21:24:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc macro const | UINTMAX_MAX | maximum value of an object of type {{c|uintmax_t}} | nolink=true }}</text>
      <sha1>a1hhlfvqnsj8rxqppwq66bunagnrabx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc UINTPTR MAX</title>
    <ns>10</ns>
    <id>15840</id>
    <revision>
      <id>88993</id>
      <timestamp>2016-12-20T21:24:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc macro const | UINTPTR_MAX | maximum value of an object of type {{c|uintptr_t}} | nolink=true }}</text>
      <sha1>53xnedylvjpwpist2jzm6mpmidypu7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc UINTn C</title>
    <ns>10</ns>
    <id>15844</id>
    <revision>
      <id>88997</id>
      <timestamp>2016-12-20T21:25:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="276">{{dsc macro fun | UINT8_C&lt;br&gt;UINT16_C&lt;br&gt;UINT32_C&lt;br&gt;UINT64_C | expands to an integer constant expression having the value specified by its argument and the type {{c|uint_least8_t}}, {{c|uint_least16_t}}, {{c|uint_least32_t}}, {{c|uint_least64_t}} respectively | nolink=true}}</text>
      <sha1>okw018wmntuwd1ay3cefp88du53u67m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc UINTn MAX</title>
    <ns>10</ns>
    <id>15837</id>
    <revision>
      <id>88990</id>
      <timestamp>2016-12-20T21:23:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="188">{{dsc macro const | UINT8_MAX&lt;br&gt;UINT16_MAX&lt;br&gt;UINT32_MAX&lt;br&gt;UINT64_MAX |  maximum value of an object of type {{c|uint8_t}}, {{c|uint16_t}}, {{c|uint32_t}}, {{c|uint64_t}} | nolink=true }}</text>
      <sha1>0nv9424g5vuxizavsusp13nrdriy0ld</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc WCHAR MAX</title>
    <ns>10</ns>
    <id>15791</id>
    <revision>
      <id>88941</id>
      <timestamp>2016-12-20T20:55:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc macro const | WCHAR_MAX | maximum value of object of {{c|wchar_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>r75sbn1cwxtogvfbnhhg1rd5q341h7a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc WCHAR MIN</title>
    <ns>10</ns>
    <id>15790</id>
    <revision>
      <id>88940</id>
      <timestamp>2016-12-20T20:55:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc macro const | WCHAR_MIN | minimum value of object of {{c|wchar_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>24tg12peuc3z9hidgtforqolce4nwmm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc WINT MAX</title>
    <ns>10</ns>
    <id>15793</id>
    <revision>
      <id>88943</id>
      <timestamp>2016-12-20T20:55:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc macro const | WINT_MAX | maximum value of object of {{c|std::wint_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>muy95trel57d20opffdbh614qnlz6jm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc WINT MIN</title>
    <ns>10</ns>
    <id>15792</id>
    <revision>
      <id>88942</id>
      <timestamp>2016-12-20T20:55:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{dsc macro const | WINT_MIN | minimum value of object of {{c|std::wint_t}} type | notes={{mark c++11}} | nolink=true}}</text>
      <sha1>bmidjhwr2d3109p6cda9m60m74m1ohd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc add cv</title>
    <ns>10</ns>
    <id>3234</id>
    <revision>
      <id>60226</id>
      <parentid>55383</parentid>
      <timestamp>2013-06-01T06:46:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list add cv]] to [[Template:cpp/types/dsc add cv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="206">{{dsc tclass | cpp/types/add_cv | title=add_cv&lt;br&gt;add_const&lt;br&gt;add_volatile | adds {{c|const}} or/and {{c|volatile}} specifiers to the given type | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc add pointer</title>
    <ns>10</ns>
    <id>3238</id>
    <revision>
      <id>60228</id>
      <parentid>55384</parentid>
      <timestamp>2013-06-01T06:46:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list add pointer]] to [[Template:cpp/types/dsc add pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc tclass | cpp/types/add_pointer | adds pointer to the given type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc add reference</title>
    <ns>10</ns>
    <id>3236</id>
    <revision>
      <id>60230</id>
      <parentid>55387</parentid>
      <timestamp>2013-06-01T06:46:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list add reference]] to [[Template:cpp/types/dsc add reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="194">{{dsc tclass | cpp/types/add_reference | title=add_lvalue_reference&lt;br&gt;add_rvalue_reference | adds ''lvalue'' or ''rvalue'' reference to the given type | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc aligned storage</title>
    <ns>10</ns>
    <id>3241</id>
    <revision>
      <id>60232</id>
      <parentid>55388</parentid>
      <timestamp>2013-06-01T06:46:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list aligned storage]] to [[Template:cpp/types/dsc aligned storage]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tclass | cpp/types/aligned_storage | defines the type suitable for use as uninitialized storage for types of given size | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc aligned union</title>
    <ns>10</ns>
    <id>3242</id>
    <revision>
      <id>60234</id>
      <parentid>55391</parentid>
      <timestamp>2013-06-01T06:46:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list aligned union]] to [[Template:cpp/types/dsc aligned union]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc tclass | cpp/types/aligned_union | defines the type suitable for use as uninitialized storage for all given types | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc alignment of</title>
    <ns>10</ns>
    <id>3230</id>
    <revision>
      <id>60236</id>
      <parentid>55392</parentid>
      <timestamp>2013-06-01T06:46:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list alignment of]] to [[Template:cpp/types/dsc alignment of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc tclass | cpp/types/alignment_of | obtains the type's alignment requirements | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc bad cast</title>
    <ns>10</ns>
    <id>3198</id>
    <revision>
      <id>60238</id>
      <parentid>55393</parentid>
      <timestamp>2013-06-01T06:46:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list bad cast]] to [[Template:cpp/types/dsc bad cast]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="157">{{dsc class | cpp/types/bad_cast | exception that is thrown by an invalid {{ltt|cpp/language/dynamic_cast}} expression, i.e. a cast of reference type fails}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc bad typeid</title>
    <ns>10</ns>
    <id>3197</id>
    <revision>
      <id>60240</id>
      <parentid>55394</parentid>
      <timestamp>2013-06-01T06:46:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list bad typeid]] to [[Template:cpp/types/dsc bad typeid]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc class | cpp/types/bad_typeid | exception that is thrown if an argument in a [[cpp/language/typeid | typeid expression]] is null}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc bool constant</title>
    <ns>10</ns>
    <id>14080</id>
    <revision>
      <id>78194</id>
      <timestamp>2015-05-10T15:05:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="126">{{dsc tclass | cpp/types/bool_constant | compile-time constant of type {{c|bool}} with specified type | notes={{mark c++17}}}}</text>
      <sha1>53hipmcfpgbtuogiza1425d8e90qm30</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc byte</title>
    <ns>10</ns>
    <id>16203</id>
    <revision>
      <id>90793</id>
      <timestamp>2017-03-10T17:09:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{dsc enum | cpp/types/byte | the byte type | notes={{mark c++17}} }}</text>
      <sha1>glmzq0e200a2ifxvipnyfn4g0xkiaip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc common type</title>
    <ns>10</ns>
    <id>3245</id>
    <revision>
      <id>88720</id>
      <parentid>60242</parentid>
      <timestamp>2016-12-07T17:15:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="110">{{dsc tclass | cpp/types/common_type | determines the common type of a group of types | notes={{mark c++11}}}}</text>
      <sha1>paxpen99oo7h32ekf148lhw3x8i60rc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc conditional</title>
    <ns>10</ns>
    <id>3244</id>
    <revision>
      <id>60244</id>
      <parentid>55398</parentid>
      <timestamp>2013-06-01T06:46:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list conditional]] to [[Template:cpp/types/dsc conditional]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc tclass | cpp/types/conditional | chooses one type or another based on compile-type boolean | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc conjunction</title>
    <ns>10</ns>
    <id>14508</id>
    <revision>
      <id>81617</id>
      <timestamp>2015-10-28T13:48:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{dsc tclass | cpp/types/conjunction | variadic logical AND metafunction | notes={{mark c++17}}}}</text>
      <sha1>j5130b7kmi6opeknp0f1npuo648jw6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc decay</title>
    <ns>10</ns>
    <id>3243</id>
    <revision>
      <id>60246</id>
      <parentid>55401</parentid>
      <timestamp>2013-06-01T06:46:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list decay]] to [[Template:cpp/types/dsc decay]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc tclass | cpp/types/decay | applies type transformations as when passing a function argument by value | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc disjunction</title>
    <ns>10</ns>
    <id>14509</id>
    <revision>
      <id>81618</id>
      <timestamp>2015-10-28T13:48:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="96">{{dsc tclass | cpp/types/disjunction | variadic logical OR metafunction | notes={{mark c++17}}}}</text>
      <sha1>21scp8l3y88ue2i4qgn6uegtwmhyzlb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc enable if</title>
    <ns>10</ns>
    <id>2723</id>
    <revision>
      <id>60248</id>
      <parentid>55404</parentid>
      <timestamp>2013-06-01T06:46:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list enable if]] to [[Template:cpp/types/dsc enable if]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc tclass | cpp/types/enable_if | hides a function overload or template specialization based on compile-time boolean | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc extent</title>
    <ns>10</ns>
    <id>2727</id>
    <revision>
      <id>60250</id>
      <parentid>55405</parentid>
      <timestamp>2013-06-01T06:46:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list extent]] to [[Template:cpp/types/dsc extent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc tclass | cpp/types/extent | obtains the size of an array type along a specified dimension | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp DECIMAL DIG</title>
    <ns>10</ns>
    <id>15803</id>
    <revision>
      <id>88954</id>
      <timestamp>2016-12-20T21:04:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="547">{{dsc macro const | FLT_DECIMAL_DIG&lt;br&gt;DBL_DECIMAL_DIG&lt;br&gt;LDBL_DECIMAL_DIG | conversion from {{c|float}}/{{c|double}}/{{c|long double}} to decimal with at least {{tt|FLT_DECIMAL_DIG}}/{{tt|DBL_DECIMAL_DIG}}/{{tt|LDBL_DECIMAL_DIG}} digits and back is the identity conversion. : this is the decimal precision required to serialize/deserialize a floating-point value (see also {{lc|std::numeric_limits::max_digits10}}). Defined to at least 6, 10, and 10 respectively, or 9 for IEEE float and 17 for IEEE double. | nolink=true | notes={{mark c++17}}}}</text>
      <sha1>qrpv9ilix8bel6yts6nnhmcsdo9v6xc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp DIG</title>
    <ns>10</ns>
    <id>15808</id>
    <revision>
      <id>88959</id>
      <timestamp>2016-12-20T21:05:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="304">{{dsc macro const | FLT_DIG&lt;br&gt;DBL_DIG&lt;br&gt;LDBL_DIG | number of decimal digits that are guaranteed to be preserved in text -&gt; {{c|float}}/{{c|double}}/{{c|long double}} -&gt; text roundtrip without change due to rounding or overflow (see {{lc|std::numeric_limits::digits10}} for explanation) | nolink=true }}</text>
      <sha1>kv7hoex0a1o295jywcfvk9bz1uxzus6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp EPSILON</title>
    <ns>10</ns>
    <id>15807</id>
    <revision>
      <id>88958</id>
      <timestamp>2016-12-20T21:05:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="208">{{dsc macro const | FLT_EPSILON&lt;br&gt;DBL_EPSILON&lt;br&gt;LDBL_EPSILON | difference between {{c|1.0}} and the next representable value for {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>c7naihhwt64u1a0l9ho24iazudg5psd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp HAS SUBNORM</title>
    <ns>10</ns>
    <id>15816</id>
    <revision>
      <id>88967</id>
      <timestamp>2016-12-20T21:06:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="247">{{dsc macro const | FLT_HAS_SUBNORM&lt;br&gt;DBL_HAS_SUBNORM&lt;br&gt;LDBL_HAS_SUBNORM | specifies whether the type supports subnormal ([[enwiki:Denormal number|denormal]]) numbers: -1 indeterminable, 0 absent, 1 present | nolink=true | notes={{mark c++17}}}}</text>
      <sha1>87u5zjao3tkwme4gxmpgba3a7dvoh9f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp MANT DIG</title>
    <ns>10</ns>
    <id>15809</id>
    <revision>
      <id>88960</id>
      <timestamp>2016-12-20T21:05:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="237">{{dsc macro const | FLT_MANT_DIG&lt;br&gt;DBL_MANT_DIG&lt;br&gt;LDBL_MANT_DIG | number of base {{tt|FLT_RADIX}} digits that can be represented without losing precision for {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>3nvsku45oagxav45408mq6y2rety5xb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp MAX</title>
    <ns>10</ns>
    <id>15806</id>
    <revision>
      <id>88957</id>
      <timestamp>2016-12-20T21:05:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="147">{{dsc macro const | FLT_MAX&lt;br&gt;DBL_MAX&lt;br&gt;LDBL_MAX | maximum value of {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>92szvmenbdhynic1pvndpp9os25euub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp MAX 10 EXP</title>
    <ns>10</ns>
    <id>15813</id>
    <revision>
      <id>88964</id>
      <timestamp>2016-12-20T21:06:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="254">{{dsc macro const | FLT_MAX_10_EXP&lt;br&gt;DBL_MAX_10_EXP&lt;br&gt;LDBL_MAX_10_EXP | maximum positive integer such that {{c|10}} raised by power one more than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>hm1k0p860jddgghflzxuhgmai5jx2w6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp MAX EXP</title>
    <ns>10</ns>
    <id>15812</id>
    <revision>
      <id>88963</id>
      <timestamp>2016-12-20T21:06:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="253">{{dsc macro const | FLT_MAX_EXP&lt;br&gt;DBL_MAX_EXP&lt;br&gt;LDBL_MAX_EXP | maximum positive integer such that {{tt|FLT_RADIX}} raised by power one more than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>hy0sqi4aebiqt7m664cox2ybpfoumla</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp MIN</title>
    <ns>10</ns>
    <id>15804</id>
    <revision>
      <id>88955</id>
      <timestamp>2016-12-20T21:04:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc macro const | FLT_MIN&lt;br&gt;DBL_MIN&lt;br&gt;LDBL_MIN | minimum normalized positive value of {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>5445cx98oy98xbi1izh59aoi4ew3zqx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp MIN 10 EXP</title>
    <ns>10</ns>
    <id>15811</id>
    <revision>
      <id>88962</id>
      <timestamp>2016-12-20T21:05:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="254">{{dsc macro const | FLT_MIN_10_EXP&lt;br&gt;DBL_MIN_10_EXP&lt;br&gt;LDBL_MIN_10_EXP | minimum negative integer such that {{c|10}} raised by power one less than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>7ae8mtjpz7s7kc4ncabo47nj34fumev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp MIN EXP</title>
    <ns>10</ns>
    <id>15810</id>
    <revision>
      <id>88961</id>
      <timestamp>2016-12-20T21:05:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="253">{{dsc macro const | FLT_MIN_EXP&lt;br&gt;DBL_MIN_EXP&lt;br&gt;LDBL_MIN_EXP | minimum negative integer such that {{tt|FLT_RADIX}} raised by power one less than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}</text>
      <sha1>nchiig8ssf69ezfgzizhqut59ridbcj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc fp TRUE MIN</title>
    <ns>10</ns>
    <id>15805</id>
    <revision>
      <id>88956</id>
      <timestamp>2016-12-20T21:04:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="192">{{dsc macro const | FLT_TRUE_MIN&lt;br&gt;DBL_TRUE_MIN&lt;br&gt;LDBL_TRUE_MIN | minimum positive value of {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true |notes={{mark c++17}}}}</text>
      <sha1>pcm3h3bb4ahy4pkp0zwh0r2g6oq783l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc has unique object representations</title>
    <ns>10</ns>
    <id>15642</id>
    <revision>
      <id>86916</id>
      <timestamp>2016-07-15T14:56:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="166">{{dsc tclass | cpp/types/has_unique_object_representations | checks if every bit in the type's object representation contributes to its value | notes={{mark c++17}}}}</text>
      <sha1>6sgg7p2momxdudg75hj3ii8noaqqkpj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc has virtual destructor</title>
    <ns>10</ns>
    <id>3229</id>
    <revision>
      <id>60252</id>
      <parentid>55406</parentid>
      <timestamp>2013-06-01T06:46:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list has virtual destructor]] to [[Template:cpp/types/dsc has virtual destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc tclass | cpp/types/has_virtual_destructor | checks if a type has a virtual destructor | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc int fastN t</title>
    <ns>10</ns>
    <id>15818</id>
    <revision>
      <id>88971</id>
      <timestamp>2016-12-20T21:17:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="180">{{dsc typedef | nolink=true | int_fast8_t&lt;br&gt;int_fast16_t&lt;br&gt;int_fast32_t&lt;br&gt;int_fast64_t | fastest signed integer type with width of at least 8, 16, 32 and 64 bits respectively }}</text>
      <sha1>5u2b27dq8nyepizvgs29jynlqxlvpg3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc int leastN t</title>
    <ns>10</ns>
    <id>15819</id>
    <revision>
      <id>88972</id>
      <timestamp>2016-12-20T21:17:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="185">{{dsc typedef | nolink=true | int_least8_t&lt;br&gt;int_least16_t&lt;br&gt;int_least32_t&lt;br&gt;int_least64_t | smallest signed integer type with width of at least 8, 16, 32 and 64 bits respectively }}</text>
      <sha1>17bqjzfcc1wg73vrlqdk9kn4a1oivhe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc intN t</title>
    <ns>10</ns>
    <id>15817</id>
    <revision>
      <id>88970</id>
      <timestamp>2016-12-20T21:16:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="314">{{dsc typedef | nolink=true | int8_t&lt;br&gt;int16_t&lt;br&gt;int32_t&lt;br&gt;int64_t | notes={{mark optional}} | signed integer type with width of exactly 8, 16, 32 and 64 bits respectively&lt;br&gt;with no padding bits and using 2's complement for negative values&lt;br&gt;(provided only if the implementation directly supports the type) }}</text>
      <sha1>5kwf1v9zaz2chxzwg8bfh0i67em08tj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc integral constant</title>
    <ns>10</ns>
    <id>2762</id>
    <revision>
      <id>78197</id>
      <parentid>60254</parentid>
      <timestamp>2015-05-10T15:07:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>bool_constant</comment>
      <text xml:space="preserve" bytes="192">{{dsc tclass | cpp/types/integral_constant | title=integral_constant&lt;br&gt;bool_constant | compile-time constant of specified type with specified value  | notes={{mark c++11}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>tsz1ugp1wnmle72sg22h8vsakqs0b0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc intmax t</title>
    <ns>10</ns>
    <id>15820</id>
    <revision>
      <id>88973</id>
      <timestamp>2016-12-20T21:17:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="70">{{dsc typedef | nolink=true | intmax_t | maximum width integer type }}</text>
      <sha1>nc5l3m5xeqd186uxqjfpequxrgb5f9u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc intptr t</title>
    <ns>10</ns>
    <id>15821</id>
    <revision>
      <id>88974</id>
      <timestamp>2016-12-20T21:17:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{dsc typedef | nolink=true | intptr_t | notes={{mark optional}} | integer type capable of holding a pointer}}</text>
      <sha1>0ug02zjaz6ptuwz645nog067chtyo6y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is abstract</title>
    <ns>10</ns>
    <id>3208</id>
    <revision>
      <id>60256</id>
      <parentid>55410</parentid>
      <timestamp>2013-06-01T06:46:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is abstract]] to [[Template:cpp/types/dsc is abstract]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc tclass | cpp/types/is_abstract | checks if a type is abstract class type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is aggregate</title>
    <ns>10</ns>
    <id>16196</id>
    <revision>
      <id>90723</id>
      <timestamp>2017-03-08T21:25:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="101">{{dsc tclass | cpp/types/is_aggregate| checks if a type is an aggregate type | notes={{mark c++17}}}}</text>
      <sha1>92cpxba0yxxjux2a6fka36gsx3y8zpw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is arithmetic</title>
    <ns>10</ns>
    <id>3160</id>
    <revision>
      <id>60258</id>
      <parentid>55415</parentid>
      <timestamp>2013-06-01T06:46:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is arithmetic]] to [[Template:cpp/types/dsc is arithmetic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc tclass | cpp/types/is_arithmetic | checks if a type is arithmetic type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is array</title>
    <ns>10</ns>
    <id>2728</id>
    <revision>
      <id>60260</id>
      <parentid>55420</parentid>
      <timestamp>2013-06-01T06:46:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is array]] to [[Template:cpp/types/dsc is array]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc tclass | cpp/types/is_array | checks if a type is an array type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is assignable</title>
    <ns>10</ns>
    <id>3225</id>
    <revision>
      <id>60262</id>
      <parentid>55427</parentid>
      <timestamp>2013-06-01T06:46:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is assignable]] to [[Template:cpp/types/dsc is assignable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="242">{{dsc tclass | cpp/types/is_assignable | title=is_assignable&lt;br&gt;is_trivially_assignable&lt;br&gt;is_nothrow_assignable | checks if a type has a assignment operator for a specific argument | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is base of</title>
    <ns>10</ns>
    <id>3231</id>
    <revision>
      <id>60264</id>
      <parentid>55428</parentid>
      <timestamp>2013-06-01T06:46:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is base of]] to [[Template:cpp/types/dsc is base of]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc tclass | cpp/types/is_base_of | checks if a type is derived from the other type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is class</title>
    <ns>10</ns>
    <id>3149</id>
    <revision>
      <id>81226</id>
      <parentid>60266</parentid>
      <timestamp>2015-10-08T01:44:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="103">{{dsc tclass | cpp/types/is_class | checks if a type is a non-union class type | notes={{mark c++11}}}}</text>
      <sha1>5wo1vjn6737ej7gegkkq6urngj8xa1k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is compound</title>
    <ns>10</ns>
    <id>3163</id>
    <revision>
      <id>60268</id>
      <parentid>55432</parentid>
      <timestamp>2013-06-01T06:46:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is compound]] to [[Template:cpp/types/dsc is compound]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc tclass | cpp/types/is_compound | checks if a type is compound type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is const</title>
    <ns>10</ns>
    <id>3199</id>
    <revision>
      <id>60270</id>
      <parentid>55433</parentid>
      <timestamp>2013-06-01T06:46:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is const]] to [[Template:cpp/types/dsc is const]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc tclass | cpp/types/is_const | checks if a type is const-qualified | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is constructible</title>
    <ns>10</ns>
    <id>3221</id>
    <revision>
      <id>60272</id>
      <parentid>55434</parentid>
      <timestamp>2013-06-01T06:46:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is constructible]] to [[Template:cpp/types/dsc is constructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="245">{{dsc tclass | cpp/types/is_constructible | title=is_constructible&lt;br&gt;is_trivially_constructible&lt;br&gt;is_nothrow_constructible | checks if a type has a constructor for specific arguments | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is convertible</title>
    <ns>10</ns>
    <id>3232</id>
    <revision>
      <id>60274</id>
      <parentid>55435</parentid>
      <timestamp>2013-06-01T06:46:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is convertible]] to [[Template:cpp/types/dsc is convertible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc tclass | cpp/types/is_convertible | checks if a type can be converted to the other type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is copy assignable</title>
    <ns>10</ns>
    <id>3226</id>
    <revision>
      <id>60276</id>
      <parentid>55438</parentid>
      <timestamp>2013-06-01T06:46:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is copy assignable]] to [[Template:cpp/types/dsc is copy assignable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="243">{{dsc tclass | cpp/types/is_copy_assignable | title=is_copy_assignable&lt;br&gt;is_trivially_copy_assignable&lt;br&gt;is_nothrow_copy_assignable | checks if a type has a copy assignment operator | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is copy constructible</title>
    <ns>10</ns>
    <id>3223</id>
    <revision>
      <id>60278</id>
      <parentid>55441</parentid>
      <timestamp>2013-06-01T06:46:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is copy constructible]] to [[Template:cpp/types/dsc is copy constructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="247">{{dsc tclass | cpp/types/is_copy_constructible | title=is_copy_constructible&lt;br&gt;is_trivially_copy_constructible&lt;br&gt;is_nothrow_copy_constructible | checks if a type has a copy constructor | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is default constructible</title>
    <ns>10</ns>
    <id>3222</id>
    <revision>
      <id>60280</id>
      <parentid>55442</parentid>
      <timestamp>2013-06-01T06:46:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is default constructible]] to [[Template:cpp/types/dsc is default constructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="262">{{dsc tclass | cpp/types/is_default_constructible | title=is_default_constructible&lt;br&gt;is_trivially_default_constructible&lt;br&gt;is_nothrow_default_constructible | checks if a type has a default constructor | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is destructible</title>
    <ns>10</ns>
    <id>3228</id>
    <revision>
      <id>60282</id>
      <parentid>55443</parentid>
      <timestamp>2013-06-01T06:46:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is destructible]] to [[Template:cpp/types/dsc is destructible]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="229">{{dsc tclass | cpp/types/is_destructible | title=is_destructible&lt;br&gt;is_trivially_destructible&lt;br&gt;is_nothrow_destructible | checks if a type has a non-deleted destructor | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is empty</title>
    <ns>10</ns>
    <id>3206</id>
    <revision>
      <id>60284</id>
      <parentid>55444</parentid>
      <timestamp>2013-06-01T06:46:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is empty]] to [[Template:cpp/types/dsc is empty]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc tclass | cpp/types/is_empty | checks if a type is class (but not union) type and has no data | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is enum</title>
    <ns>10</ns>
    <id>3147</id>
    <revision>
      <id>60286</id>
      <parentid>55447</parentid>
      <timestamp>2013-06-01T06:46:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is enum]] to [[Template:cpp/types/dsc is enum]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc tclass | cpp/types/is_enum | checks if a type is an enumeration type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is final</title>
    <ns>10</ns>
    <id>13169</id>
    <revision>
      <id>67836</id>
      <timestamp>2014-03-02T17:46:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>LWG 2112, accepted in Issaquah</comment>
      <text xml:space="preserve" bytes="99">{{dsc tclass | cpp/types/is_final | checks if a type is a final class type | notes={{mark c++14}}}}</text>
      <sha1>sgj7bp6l4aldebh6t8mqbtvwa6zu2mq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is floating point</title>
    <ns>10</ns>
    <id>3154</id>
    <revision>
      <id>60288</id>
      <parentid>55448</parentid>
      <timestamp>2013-06-01T06:46:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is floating point]] to [[Template:cpp/types/dsc is floating point]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc tclass | cpp/types/is_floating_point | checks if a type is floating-point type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is function</title>
    <ns>10</ns>
    <id>3150</id>
    <revision>
      <id>60290</id>
      <parentid>55451</parentid>
      <timestamp>2013-06-01T06:46:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is function]] to [[Template:cpp/types/dsc is function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc tclass | cpp/types/is_function | checks if a type is a function type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is fundamental</title>
    <ns>10</ns>
    <id>3161</id>
    <revision>
      <id>60292</id>
      <parentid>55454</parentid>
      <timestamp>2013-06-01T06:46:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is fundamental]] to [[Template:cpp/types/dsc is fundamental]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc tclass | cpp/types/is_fundamental | checks if a type is fundamental type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is integral</title>
    <ns>10</ns>
    <id>3153</id>
    <revision>
      <id>60294</id>
      <parentid>55457</parentid>
      <timestamp>2013-06-01T06:46:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is integral]] to [[Template:cpp/types/dsc is integral]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc tclass | cpp/types/is_integral | checks if a type is integral type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is invocable</title>
    <ns>10</ns>
    <id>14754</id>
    <revision>
      <id>90848</id>
      <parentid>90844</parentid>
      <timestamp>2017-03-14T01:12:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>invocable</comment>
      <text xml:space="preserve" bytes="245">{{dsc tclass | cpp/types/is_invocable | title=is_invocable&lt;br&gt;is_invocable_r&lt;br&gt;is_nothrow_invocable&lt;br&gt;is_nothrow_invocable_r | checks if a type can be invoked (as if by {{lc|std::invoke}}) with the given argument types | notes={{mark c++17}}}}</text>
      <sha1>p12f7ouo6hy8tfq75i6nnljyopzcms7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is literal type</title>
    <ns>10</ns>
    <id>3205</id>
    <revision>
      <id>86283</id>
      <parentid>60296</parentid>
      <timestamp>2016-06-27T08:41:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">{{dsc tclass | cpp/types/is_literal_type | checks if a type is literal type | notes={{mark c++11}}{{mark|deprecated in C++17}}}}</text>
      <sha1>j4egyagdeuvdzh2mu9gy01k08zuvr56</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is lvalue reference</title>
    <ns>10</ns>
    <id>3155</id>
    <revision>
      <id>60298</id>
      <parentid>55459</parentid>
      <timestamp>2013-06-01T06:46:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is lvalue reference]] to [[Template:cpp/types/dsc is lvalue reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc tclass | cpp/types/is_lvalue_reference | checks if a type is ''lvalue reference'' | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is member function pointer</title>
    <ns>10</ns>
    <id>3158</id>
    <revision>
      <id>60300</id>
      <parentid>55462</parentid>
      <timestamp>2013-06-01T06:46:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is member function pointer]] to [[Template:cpp/types/dsc is member function pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc tclass | cpp/types/is_member_function_pointer | checks if a type is a pointer to a non-static member function | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is member object pointer</title>
    <ns>10</ns>
    <id>3157</id>
    <revision>
      <id>60302</id>
      <parentid>55467</parentid>
      <timestamp>2013-06-01T06:46:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is member object pointer]] to [[Template:cpp/types/dsc is member object pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc tclass | cpp/types/is_member_object_pointer | checks if a type is a pointer to a non-static member object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is member pointer</title>
    <ns>10</ns>
    <id>3164</id>
    <revision>
      <id>60304</id>
      <parentid>55472</parentid>
      <timestamp>2013-06-01T06:46:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is member pointer]] to [[Template:cpp/types/dsc is member pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc tclass | cpp/types/is_member_pointer | checks if a type is a pointer to a non-static member function or object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is move assignable</title>
    <ns>10</ns>
    <id>3227</id>
    <revision>
      <id>60306</id>
      <parentid>55475</parentid>
      <timestamp>2013-06-01T06:46:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is move assignable]] to [[Template:cpp/types/dsc is move assignable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="243">{{dsc tclass | cpp/types/is_move_assignable | title=is_move_assignable&lt;br&gt;is_trivially_move_assignable&lt;br&gt;is_nothrow_move_assignable | checks if a type has a move assignment operator | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is move constructible</title>
    <ns>10</ns>
    <id>3224</id>
    <revision>
      <id>87787</id>
      <parentid>60308</parentid>
      <timestamp>2016-10-03T09:00:15Z</timestamp>
      <contributor>
        <username>Pepsiman</username>
        <id>1613</id>
      </contributor>
      <text xml:space="preserve" bytes="268">{{dsc tclass | cpp/types/is_move_constructible | title=is_move_constructible&lt;br&gt;is_trivially_move_constructible&lt;br&gt;is_nothrow_move_constructible | checks if a type can be constructed from an rvalue reference | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1>ljdg7delvod2r6f57f03c6srx9mkn6x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is null pointer</title>
    <ns>10</ns>
    <id>13043</id>
    <revision>
      <id>66208</id>
      <timestamp>2013-11-09T22:48:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc tclass | cpp/types/is_null_pointer | checks if a type is {{c|std::nullptr_t}} | notes={{mark c++14}}}}</text>
      <sha1>8nuson0hz4vwab1m6bxfgmn3ockinzv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is object</title>
    <ns>10</ns>
    <id>3151</id>
    <revision>
      <id>60310</id>
      <parentid>55477</parentid>
      <timestamp>2013-06-01T06:46:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is object]] to [[Template:cpp/types/dsc is object]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc tclass | cpp/types/is_object | checks if a type is object type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is pod</title>
    <ns>10</ns>
    <id>3204</id>
    <revision>
      <id>60312</id>
      <parentid>55478</parentid>
      <timestamp>2013-06-01T06:47:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is pod]] to [[Template:cpp/types/dsc is pod]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc tclass | cpp/types/is_pod | checks if a type is plain-old data (POD) type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is pointer</title>
    <ns>10</ns>
    <id>3146</id>
    <revision>
      <id>60314</id>
      <parentid>55481</parentid>
      <timestamp>2013-06-01T06:47:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is pointer]] to [[Template:cpp/types/dsc is pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc tclass | cpp/types/is_pointer | checks if a type is a pointer type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is polymorphic</title>
    <ns>10</ns>
    <id>3207</id>
    <revision>
      <id>60316</id>
      <parentid>55484</parentid>
      <timestamp>2013-06-01T06:47:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is polymorphic]] to [[Template:cpp/types/dsc is polymorphic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="109">{{dsc tclass | cpp/types/is_polymorphic | checks if a type is polymorphic class type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is reference</title>
    <ns>10</ns>
    <id>3159</id>
    <revision>
      <id>60318</id>
      <parentid>55485</parentid>
      <timestamp>2013-06-01T06:47:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is reference]] to [[Template:cpp/types/dsc is reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc tclass | cpp/types/is_reference | checks if a type is either ''lvalue reference'' or ''rvalue reference'' | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is rvalue reference</title>
    <ns>10</ns>
    <id>3156</id>
    <revision>
      <id>60320</id>
      <parentid>55486</parentid>
      <timestamp>2013-06-01T06:47:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is rvalue reference]] to [[Template:cpp/types/dsc is rvalue reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc tclass | cpp/types/is_rvalue_reference | checks if a type is ''rvalue reference'' | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is same</title>
    <ns>10</ns>
    <id>2730</id>
    <revision>
      <id>60322</id>
      <parentid>55489</parentid>
      <timestamp>2013-06-01T06:47:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is same]] to [[Template:cpp/types/dsc is same]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc tclass | cpp/types/is_same | checks if two types are the same | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is scalar</title>
    <ns>10</ns>
    <id>3162</id>
    <revision>
      <id>60324</id>
      <parentid>55490</parentid>
      <timestamp>2013-06-01T06:47:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is scalar]] to [[Template:cpp/types/dsc is scalar]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="93">{{dsc tclass | cpp/types/is_scalar | checks if a type is scalar type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is signed</title>
    <ns>10</ns>
    <id>3209</id>
    <revision>
      <id>60326</id>
      <parentid>55491</parentid>
      <timestamp>2013-06-01T06:47:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is signed]] to [[Template:cpp/types/dsc is signed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc tclass | cpp/types/is_signed | checks if a type is signed arithmetic type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is standard layout</title>
    <ns>10</ns>
    <id>3203</id>
    <revision>
      <id>60328</id>
      <parentid>55498</parentid>
      <timestamp>2013-06-01T06:47:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is standard layout]] to [[Template:cpp/types/dsc is standard layout]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc tclass | cpp/types/is_standard_layout | checks if a type is standard-layout type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is swappable</title>
    <ns>10</ns>
    <id>14761</id>
    <revision>
      <id>83913</id>
      <timestamp>2016-03-13T19:08:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Created page with &quot;{{dsc tclass | cpp/types/is_swappable | title=is_swappable_with&lt;br&gt;is_swappable&lt;br&gt;is_nothrow_swappable_with&lt;br&gt;is_nothrow_swappable | checks if objects of a type can be swapp...&quot;</comment>
      <text xml:space="preserve" bytes="294">{{dsc tclass | cpp/types/is_swappable | title=is_swappable_with&lt;br&gt;is_swappable&lt;br&gt;is_nothrow_swappable_with&lt;br&gt;is_nothrow_swappable | checks if objects of a type can be swapped with objects of same or different type| notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>3z259f4gtz8ynom50sa1obu5n0l5ig4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is trivial</title>
    <ns>10</ns>
    <id>3201</id>
    <revision>
      <id>60330</id>
      <parentid>55503</parentid>
      <timestamp>2013-06-01T06:47:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is trivial]] to [[Template:cpp/types/dsc is trivial]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc tclass | cpp/types/is_trivial | checks if a type is trivial | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is trivially copyable</title>
    <ns>10</ns>
    <id>3202</id>
    <revision>
      <id>60332</id>
      <parentid>55508</parentid>
      <timestamp>2013-06-01T06:47:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is trivially copyable]] to [[Template:cpp/types/dsc is trivially copyable]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="112">{{dsc tclass | cpp/types/is_trivially_copyable | checks if a type is trivially copyable | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is union</title>
    <ns>10</ns>
    <id>3148</id>
    <revision>
      <id>60334</id>
      <parentid>55509</parentid>
      <timestamp>2013-06-01T06:47:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is union]] to [[Template:cpp/types/dsc is union]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc tclass | cpp/types/is_union | checks if a type is an union type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is unsigned</title>
    <ns>10</ns>
    <id>3210</id>
    <revision>
      <id>60336</id>
      <parentid>55512</parentid>
      <timestamp>2013-06-01T06:47:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is unsigned]] to [[Template:cpp/types/dsc is unsigned]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc tclass | cpp/types/is_unsigned | checks if a type is unsigned arithmetic type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is void</title>
    <ns>10</ns>
    <id>3152</id>
    <revision>
      <id>60338</id>
      <parentid>55513</parentid>
      <timestamp>2013-06-01T06:47:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is void]] to [[Template:cpp/types/dsc is void]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc tclass | cpp/types/is_void | checks if a type is {{c|void}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc is volatile</title>
    <ns>10</ns>
    <id>3200</id>
    <revision>
      <id>60340</id>
      <parentid>55514</parentid>
      <timestamp>2013-06-01T06:47:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list is volatile]] to [[Template:cpp/types/dsc is volatile]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc tclass | cpp/types/is_volatile | checks if a type is volatile-qualified | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc make signed</title>
    <ns>10</ns>
    <id>3239</id>
    <revision>
      <id>60342</id>
      <parentid>55515</parentid>
      <timestamp>2013-06-01T06:47:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list make signed]] to [[Template:cpp/types/dsc make signed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc tclass | cpp/types/make_signed | makes the given integral type signed | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc make unsigned</title>
    <ns>10</ns>
    <id>3240</id>
    <revision>
      <id>60344</id>
      <parentid>55518</parentid>
      <timestamp>2013-06-01T06:47:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list make unsigned]] to [[Template:cpp/types/dsc make unsigned]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="104">{{dsc tclass | cpp/types/make_unsigned | makes the given integral type unsigned | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc max align t</title>
    <ns>10</ns>
    <id>3195</id>
    <revision>
      <id>60346</id>
      <parentid>55519</parentid>
      <timestamp>2013-06-01T06:47:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list max align t]] to [[Template:cpp/types/dsc max align t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc typedef | cpp/types/max_align_t | POD type with alignment requirement as great as any other scalar type | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc negation</title>
    <ns>10</ns>
    <id>14510</id>
    <revision>
      <id>81619</id>
      <timestamp>2015-10-28T13:48:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="85">{{dsc tclass | cpp/types/negation | logical NOT metafunction | notes={{mark c++17}}}}</text>
      <sha1>kxafdlr2fnieu93fzbwpclbw6n17y9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc nullptr t</title>
    <ns>10</ns>
    <id>3194</id>
    <revision>
      <id>60348</id>
      <parentid>55524</parentid>
      <timestamp>2013-06-01T06:47:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list nullptr t]] to [[Template:cpp/types/dsc nullptr t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc typedef | cpp/types/nullptr_t | the type of the null pointer literal {{ltt|cpp/language/nullptr | nullptr}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc numeric limits</title>
    <ns>10</ns>
    <id>3220</id>
    <revision>
      <id>60350</id>
      <parentid>55529</parentid>
      <timestamp>2013-06-01T06:47:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list numeric limits]] to [[Template:cpp/types/dsc numeric limits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="119">{{dsc tclass | cpp/types/numeric_limits | provides an interface to query properties of all fundamental numeric types.}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc offsetof</title>
    <ns>10</ns>
    <id>3196</id>
    <revision>
      <id>60352</id>
      <parentid>55532</parentid>
      <timestamp>2013-06-01T06:47:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list offsetof]] to [[Template:cpp/types/dsc offsetof]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc macro fun | cpp/types/offsetof | byte offset from the beginning of a standard-layout type to specified member}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc ptrdiff t</title>
    <ns>10</ns>
    <id>3193</id>
    <revision>
      <id>60354</id>
      <parentid>55535</parentid>
      <timestamp>2013-06-01T06:47:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list ptrdiff t]] to [[Template:cpp/types/dsc ptrdiff t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc typedef | cpp/types/ptrdiff_t | signed integer type returned when subtracting two pointers}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc rank</title>
    <ns>10</ns>
    <id>2726</id>
    <revision>
      <id>60356</id>
      <parentid>55536</parentid>
      <timestamp>2013-06-01T06:47:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list rank]] to [[Template:cpp/types/dsc rank]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc tclass | cpp/types/rank | obtains the number of dimensions of an array type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc remove all extents</title>
    <ns>10</ns>
    <id>2725</id>
    <revision>
      <id>60358</id>
      <parentid>55537</parentid>
      <timestamp>2013-06-01T06:47:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list remove all extents]] to [[Template:cpp/types/dsc remove all extents]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc tclass | cpp/types/remove_all_extents | removes all extents from the given array type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc remove cv</title>
    <ns>10</ns>
    <id>3233</id>
    <revision>
      <id>60360</id>
      <parentid>55540</parentid>
      <timestamp>2013-06-01T06:47:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list remove cv]] to [[Template:cpp/types/dsc remove cv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="223">{{dsc tclass | cpp/types/remove_cv | title=remove_cv&lt;br&gt;remove_const&lt;br&gt;remove_volatile | removes {{c|const}} or/and {{c|volatile}} specifiers from the given type | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc remove extent</title>
    <ns>10</ns>
    <id>2724</id>
    <revision>
      <id>60362</id>
      <parentid>55541</parentid>
      <timestamp>2013-06-01T06:47:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list remove extent]] to [[Template:cpp/types/dsc remove extent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc tclass | cpp/types/remove_extent | removes one extent from the given array type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc remove pointer</title>
    <ns>10</ns>
    <id>3237</id>
    <revision>
      <id>60364</id>
      <parentid>55544</parentid>
      <timestamp>2013-06-01T06:47:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list remove pointer]] to [[Template:cpp/types/dsc remove pointer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc tclass | cpp/types/remove_pointer | removes pointer from the given type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc remove reference</title>
    <ns>10</ns>
    <id>3235</id>
    <revision>
      <id>60366</id>
      <parentid>55545</parentid>
      <timestamp>2013-06-01T06:47:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list remove reference]] to [[Template:cpp/types/dsc remove reference]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc tclass | cpp/types/remove_reference | removes reference from the given type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc result of</title>
    <ns>10</ns>
    <id>2722</id>
    <revision>
      <id>90850</id>
      <parentid>60368</parentid>
      <timestamp>2017-03-14T01:13:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+invoke_result</comment>
      <text xml:space="preserve" bytes="218">{{dsc tclass | cpp/types/result_of|title=result_of&lt;br&gt;invoke_result | deduces the result type of invoking a callable object with a set of arguments | notes={{mark c++11}}{{mark|deprecated in C++17}}&lt;br&gt;{{mark c++17}}}}</text>
      <sha1>8bfw5egp83x1cdxclr5ux5qc22fgek9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc signed MAX</title>
    <ns>10</ns>
    <id>15799</id>
    <revision>
      <id>88949</id>
      <timestamp>2016-12-20T20:59:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="238">{{dsc macro const | SCHAR_MAX&lt;br&gt;SHRT_MAX&lt;br&gt;INT_MAX&lt;br&gt;LONG_MAX&lt;br&gt;LLONG_MAX | nolink=true | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}} | maximum value of {{c|signed char}}, {{c|short}}, {{c|int}}, {{c|long}} and {{c|long long}} respectively}}</text>
      <sha1>aahtzbj1cvwh19rjkk6q6dascod6m97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc signed MIN</title>
    <ns>10</ns>
    <id>15798</id>
    <revision>
      <id>88948</id>
      <timestamp>2016-12-20T20:58:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="238">{{dsc macro const | SCHAR_MIN&lt;br&gt;SHRT_MIN&lt;br&gt;INT_MIN&lt;br&gt;LONG_MIN&lt;br&gt;LLONG_MIN | nolink=true | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}} | minimum value of {{c|signed char}}, {{c|short}}, {{c|int}}, {{c|long}} and {{c|long long}} respectively}}</text>
      <sha1>r1rilzcg2f1m8ali8dqsq4axj6beqq6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc size t</title>
    <ns>10</ns>
    <id>3192</id>
    <revision>
      <id>60370</id>
      <parentid>55547</parentid>
      <timestamp>2013-06-01T06:47:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list size t]] to [[Template:cpp/types/dsc size t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc typedef | cpp/types/size_t | unsigned integer type returned by the {{ltt|cpp/language/sizeof | sizeof}} operator}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc type index</title>
    <ns>10</ns>
    <id>2744</id>
    <revision>
      <id>60372</id>
      <parentid>55550</parentid>
      <timestamp>2013-06-01T06:47:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list type index]] to [[Template:cpp/types/dsc type index]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="181">{{dsc class | cpp/types/type_index | wrapper around a {{tt|type_info}} object, that can be used as index in associative and unordered associative containers | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc type info</title>
    <ns>10</ns>
    <id>2743</id>
    <revision>
      <id>76978</id>
      <parentid>60374</parentid>
      <timestamp>2015-03-10T18:50:09Z</timestamp>
      <contributor>
        <username>Ashish20</username>
        <id>519</id>
      </contributor>
      <minor/>
      <comment>Grammar fix</comment>
      <text xml:space="preserve" bytes="185">{{dsc class | cpp/types/type_info | contains some type's information, generated by the implementation.&lt;br&gt; This is the class returned by the [[cpp/language/typeid | typeid]] operator.}}</text>
      <sha1>mr3j0nccn6m1xei9et0nu05zog6ei7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc uint fastN t</title>
    <ns>10</ns>
    <id>15823</id>
    <revision>
      <id>88976</id>
      <timestamp>2016-12-20T21:17:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="186">{{dsc typedef | nolink=true | uint_fast8_t&lt;br&gt;uint_fast16_t&lt;br&gt;uint_fast32_t&lt;br&gt;uint_fast64_t | fastest unsigned integer type with width of at least 8, 16, 32 and 64 bits respectively }}</text>
      <sha1>k3827jc2rz2a7bblyi5heb4d17w5fit</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc uint leastN t</title>
    <ns>10</ns>
    <id>15824</id>
    <revision>
      <id>88977</id>
      <timestamp>2016-12-20T21:18:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="191">{{dsc typedef | nolink=true | uint_least8_t&lt;br&gt;uint_least16_t&lt;br&gt;uint_least32_t&lt;br&gt;uint_least64_t | smallest unsigned integer type with width of at least 8, 16, 32 and 64 bits respectively }}</text>
      <sha1>7kfyic71f8nfvntlxkkxl8arkd31njn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc uintN t</title>
    <ns>10</ns>
    <id>15822</id>
    <revision>
      <id>88975</id>
      <timestamp>2016-12-20T21:17:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="252">{{dsc typedef | nolink=true | uint8_t&lt;br&gt;uint16_t&lt;br&gt;uint32_t&lt;br&gt;uint64_t | notes={{mark optional}} | unsigned integer type with width of exactly 8, 16, 32 and 64 bits respectively &lt;br&gt;(provided only if the implementation directly supports the type) }}</text>
      <sha1>fsxfov3mw6psqv5pbgzdvum3npayhuc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc uintmax t</title>
    <ns>10</ns>
    <id>15825</id>
    <revision>
      <id>88978</id>
      <timestamp>2016-12-20T21:18:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="80">{{dsc typedef | nolink=true | uintmax_t | maximum width unsigned integer type }}</text>
      <sha1>d1kveq3hw0fh94nfw3y1jqecq7gggmg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc uintptr t</title>
    <ns>10</ns>
    <id>15826</id>
    <revision>
      <id>88979</id>
      <timestamp>2016-12-20T21:18:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{dsc typedef | nolink=true | uintptr_t | notes={{mark optional}} | unsigned integer type capable of holding a pointer}}</text>
      <sha1>0pwfckav9egb28dgczww2uzy4r6bhtj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc underlying type</title>
    <ns>10</ns>
    <id>3246</id>
    <revision>
      <id>60376</id>
      <parentid>55552</parentid>
      <timestamp>2013-06-01T06:47:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/dcl list underlying type]] to [[Template:cpp/types/dsc underlying type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc tclass | cpp/types/underlying_type | obtains the underlying integer type for a given enumeration type | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc unsigned MAX</title>
    <ns>10</ns>
    <id>15800</id>
    <revision>
      <id>89002</id>
      <parentid>88950</parentid>
      <timestamp>2016-12-20T22:03:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste fix</comment>
      <text xml:space="preserve" bytes="283">{{dsc macro const | UCHAR_MAX&lt;br&gt;USHRT_MAX&lt;br&gt;UINT_MAX&lt;br&gt;ULONG_MAX&lt;br&gt;ULLONG_MAX | nolink=true | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c++11}} | maximum value of {{c|unsigned char}}, {{c|unsigned short}}, {{c|unsigned int}},&lt;br&gt;{{c|unsigned long}} and {{c|unsigned long long}} respectively}}</text>
      <sha1>masyh08wpkujmmqvuv96t3rxik01y8p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/dsc void t</title>
    <ns>10</ns>
    <id>14119</id>
    <revision>
      <id>78676</id>
      <timestamp>2015-06-02T21:29:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">{{dsc talias | cpp/types/void_t | void variadic alias template | notes={{mark c++17}}}}</text>
      <sha1>c621rd52leaqjlk12cmcialq6ud1v9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/integral constant/dcl list operator value type</title>
    <ns>10</ns>
    <id>12357</id>
    <redirect title="Template:cpp/types/integral constant/dsc operator value type" />
    <revision>
      <id>60379</id>
      <timestamp>2013-06-01T06:47:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/integral constant/dcl list operator value type]] to [[Template:cpp/types/integral constant/dsc operator value type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">#REDIRECT [[Template:cpp/types/integral constant/dsc operator value type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/integral constant/dsc operator value type</title>
    <ns>10</ns>
    <id>9933</id>
    <revision>
      <id>73759</id>
      <parentid>68212</parentid>
      <timestamp>2014-11-15T02:26:27Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="118">{{dsc mem fun | cpp/types/integral_constant | title=operator value_type | inlinemem=true | returns the wrapped value}}</text>
      <sha1>06b78mr9s4d2hc5onjvq409xfb7swk2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/integral constant/dsc operator()</title>
    <ns>10</ns>
    <id>12912</id>
    <revision>
      <id>73758</id>
      <parentid>68214</parentid>
      <timestamp>2014-11-15T02:25:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem fun | cpp/types/integral_constant | title=operator() |notes={{mark c++14}} | inlinemem=true | returns the wrapped value }}</text>
      <sha1>8m8ri72iatu0kj697doaix0j9azjzbw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/integral constant/inherit</title>
    <ns>10</ns>
    <id>3213</id>
    <revision>
      <id>75893</id>
      <parentid>73757</parentid>
      <timestamp>2015-02-04T13:13:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>make use of [[Template:cpp/types/integral_constant/inherit2]]</comment>
      <text xml:space="preserve" bytes="104">{{include | cpp/types/integral_constant/inherit2 | {{c|true}} if {{{1}}}, {{c|false}} otherwise | bool}}</text>
      <sha1>f2ek9oke4nyu7asvde44ocferinjjnu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/integral constant/inherit2</title>
    <ns>10</ns>
    <id>3247</id>
    <revision>
      <id>74993</id>
      <parentid>55559</parentid>
      <timestamp>2015-01-02T12:36:58Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+ `operator()`</comment>
      <text xml:space="preserve" bytes="633">{{inherited|[[cpp/types/integral_constant | {{small|std::}}integral_constant]]|
===Member constants===
{{dsc begin}}
{{dsc mem sconst | value | {{{1|}}} | nolink=true}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator {{{2|}}}| nolink=true | converts the object to {{c|{{{2|}}}}}, returns {{tt|value}} }}
{{dsc mem fun | operator() | nolink=true | notes={{mark c++14}} | returns {{tt|value}} }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|{{{2|}}}}} }}
{{dsc | {{tt|type}} | {{c|std::integral_constant&lt;{{{2|}}}, value&gt;}} }}
{{dsc end}}
}}</text>
      <sha1>gbqx1wuz8ymvnjepex2gi8aye8aozby</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/integral constant/title</title>
    <ns>10</ns>
    <id>8575</id>
    <revision>
      <id>31736</id>
      <timestamp>2012-06-06T20:45:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">&lt;onlyinclude&gt;{{cpp/title | n=integral_constant::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/navbar</title>
    <ns>10</ns>
    <id>2176</id>
    <revision>
      <id>40043</id>
      <parentid>36032</parentid>
      <timestamp>2012-09-28T20:20:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="227">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/types/navbar heading
|content3 = cpp/types/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/navbar content</title>
    <ns>10</ns>
    <id>2382</id>
    <revision>
      <id>90854</id>
      <parentid>90795</parentid>
      <timestamp>2017-03-14T01:17:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>invocable; +invoke_result</comment>
      <text xml:space="preserve" bytes="7672">&lt;div style=&quot;display:inline-block; vertical-align: top;&quot;&gt;
{{nv begin}}

{{nv h1 | Basic types}}
{{nv | [[cpp/language/types | Fundamental types]] }}
{{nv | [[cpp/types/integer | Fixed width integer types]] {{mark c++11}}}}

{{nv col begin}}
{{nv ln | cpp/types/ptrdiff_t}}
{{nv ln | cpp/types/size_t}}
{{nv ln | cpp/types/max_align_t | notes={{mark c++11}}}}
{{nv ln | cpp/types/byte| notes={{mark c++17}} }}
{{nv col next}}
{{nv ln | cpp/types/nullptr_t | notes={{mark c++11}} }}
{{nv ln | cpp/types/offsetof}}
{{nv ln | cpp/types/NULL}}
{{nv col end}}

{{nv h1 | Numeric limits}}
{{nv ln | cpp/types/numeric_limits}}
{{nv | [[cpp/types/climits|C numeric limits interface]]}}

{{nv h1 | Runtime type information}}
{{nv col begin}}
{{nv ln | cpp/types/type_info}}
{{nv ln | cpp/types/type_index | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/types/bad_typeid}}
{{nv ln | cpp/types/bad_cast}}
{{nv col end}}

{{nv h1 | Type traits}}
{{nv h2 | Type categories}}
{{nv col begin}}
{{nv ln | cpp/types/is_void | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_null_pointer | notes={{mark c++14}}}}
{{nv ln | cpp/types/is_array | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_pointer | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_enum | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_union | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_class | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_function | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/types/is_object | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_scalar | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_compound | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_integral | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_floating_point | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_fundamental | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_arithmetic | notes={{mark c++11}}}}
{{nv col end}}
{{nv ln | cpp/types/is_reference | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_lvalue_reference | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_rvalue_reference | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_member_pointer | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_member_object_pointer | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_member_function_pointer | notes={{mark c++11}}}}

{{nv end}}
{{nv begin}}

{{nv h2 | Type properties}}
{{nv col begin}}
{{nv ln | cpp/types/is_const | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_volatile | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_pod | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_empty | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_polymorphic | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_final | notes={{mark c++14}}}}
{{nv ln | cpp/types/is_abstract | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/types/is_trivial | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_trivially_copyable | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_standard_layout | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_literal_type | notes={{mark c++11}}{{mark|deprecated in C++17}}}}
{{nv ln | cpp/types/is_aggregate | notes={{mark c++17}}}}
{{nv ln | cpp/types/is_signed | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_unsigned | notes={{mark c++11}}}}
{{nv col end}}
{{nv ln | cpp/types/has_unique_object_representations| notes={{mark c++17}}}}
{{nv h2 | Type trait constants}}
{{nv ln | cpp/types/integral_constant |integral_constant|bool_constant|true_type|false_type|notes={{mark c++11}}&lt;br&gt;{{mark c++17
}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Metafunctions}}
{{nv ln | cpp/types/conjunction|notes={{mark c++17}}}}
{{nv ln | cpp/types/disjunction|notes={{mark c++17}}}}
{{nv ln | cpp/types/negation|notes={{mark c++17}}}}
{{nv end}}
&lt;/div&gt;
&lt;div style=&quot;display:inline-block; vertical-align: top;&quot;&gt;
{{nv begin}}
{{nv h2 | Supported operations}}
{{nv ln | cpp/types/is_constructible | is_constructible | is_trivially_constructible | is_nothrow_constructible | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/is_default_constructible | is_default_constructible | is_trivially_default_constructible | is_nothrow_default_constructible | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/is_copy_constructible | is_copy_constructible | is_trivially_copy_constructible | is_nothrow_copy_constructible | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/is_move_constructible | is_move_constructible | is_trivially_move_constructible | is_nothrow_move_constructible | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/is_assignable | is_assignable | is_trivially_assignable | is_nothrow_assignable | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/is_copy_assignable | is_copy_assignable | is_trivially_copy_assignable | is_nothrow_copy_assignable | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/is_move_assignable | is_move_assignable | is_trivially_move_assignable | is_nothrow_move_assignable | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/is_destructible | is_destructible | is_trivially_destructible | is_nothrow_destructible | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/has_virtual_destructor | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_swappable | is_swappable_with | is_swappable | is_nothrow_swappable_with | is_nothrow_swappable| notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}

{{nv h2 | Relationships and property queries}}
{{nv col begin}}
{{nv ln | cpp/types/is_same | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_base_of | notes={{mark c++11}}}}
{{nv ln | cpp/types/is_convertible | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/types/alignment_of | notes={{mark c++11}}}}
{{nv ln | cpp/types/rank | notes={{mark c++11}}}}
{{nv ln | cpp/types/extent | notes={{mark c++11}}}}
{{nv col end}}
{{nv ln | cpp/types/is_invocable|is_invocable|is_invocable_r|is_nothrow_invocable|is_nothrow_invocable_r| notes={{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}&lt;br&gt;{{mark c++17}}}}

{{nv h2 | Type modifications}}
{{nv col begin}}
{{nv ln | cpp/types/remove_cv | remove_cv | remove_const | remove_volatile | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/add_cv | add_cv | add_const | add_volatile | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/make_signed | notes={{mark c++11}}}}
{{nv ln | cpp/types/make_unsigned | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/types/remove_reference | notes={{mark c++11}}}}
{{nv ln | cpp/types/add_reference | add_lvalue_reference | add_rvalue_reference | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv ln | cpp/types/remove_pointer | notes={{mark c++11}}}}
{{nv ln | cpp/types/add_pointer | notes={{mark c++11}}}}
{{nv ln | cpp/types/remove_extent | notes={{mark c++11}}}}
{{nv ln | cpp/types/remove_all_extents | notes={{mark c++11}}}}
{{nv col end}}

{{nv h2 | Type transformations}}
{{nv col begin}}
{{nv ln | cpp/types/aligned_storage | notes={{mark c++11}}}}
{{nv ln | cpp/types/aligned_union | notes={{mark c++11}}}}
{{nv ln | cpp/types/decay | notes={{mark c++11}}}}
{{nv ln | cpp/types/enable_if | notes={{mark c++11}}}}
{{nv ln | cpp/types/void_t | notes={{mark c++17}}}}
{{nv col next}}
{{nv ln | cpp/types/conditional | notes={{mark c++11}}}}
{{nv ln | cpp/types/common_type | notes={{mark c++11}}}}
{{nv ln | cpp/types/underlying_type | notes={{mark c++11}}}}
{{nv ln | cpp/types/result_of | result_of | invoke_result| notes={{mark c++11}}{{mark|deprecated in C++17}}&lt;br&gt;{{mark c++17}}}}
{{nv col end}}
{{nv end}}
&lt;/div&gt;</text>
      <sha1>4r8lh63z485lvnyo3flhedy6ysgqngj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/navbar heading</title>
    <ns>10</ns>
    <id>2173</id>
    <revision>
      <id>35968</id>
      <parentid>4906</parentid>
      <timestamp>2012-06-15T22:35:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/sidebar heading]] to [[Template:cpp/types/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="28">[[cpp/types | Type support]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list denorm min</title>
    <ns>10</ns>
    <id>12358</id>
    <redirect title="Template:cpp/types/numeric limits/dsc denorm min" />
    <revision>
      <id>60381</id>
      <timestamp>2013-06-01T06:47:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list denorm min]] to [[Template:cpp/types/numeric limits/dsc denorm min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/types/numeric limits/dsc denorm min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list digits</title>
    <ns>10</ns>
    <id>12359</id>
    <redirect title="Template:cpp/types/numeric limits/dsc digits" />
    <revision>
      <id>60383</id>
      <timestamp>2013-06-01T06:47:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list digits]] to [[Template:cpp/types/numeric limits/dsc digits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/types/numeric limits/dsc digits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list digits10</title>
    <ns>10</ns>
    <id>12360</id>
    <redirect title="Template:cpp/types/numeric limits/dsc digits10" />
    <revision>
      <id>60385</id>
      <timestamp>2013-06-01T06:47:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list digits10]] to [[Template:cpp/types/numeric limits/dsc digits10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/types/numeric limits/dsc digits10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list epsilon</title>
    <ns>10</ns>
    <id>12361</id>
    <redirect title="Template:cpp/types/numeric limits/dsc epsilon" />
    <revision>
      <id>60387</id>
      <timestamp>2013-06-01T06:47:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list epsilon]] to [[Template:cpp/types/numeric limits/dsc epsilon]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/types/numeric limits/dsc epsilon]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list float denorm style</title>
    <ns>10</ns>
    <id>12362</id>
    <redirect title="Template:cpp/types/numeric limits/dsc float denorm style" />
    <revision>
      <id>60389</id>
      <timestamp>2013-06-01T06:47:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list float denorm style]] to [[Template:cpp/types/numeric limits/dsc float denorm style]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">#REDIRECT [[Template:cpp/types/numeric limits/dsc float denorm style]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list float round style</title>
    <ns>10</ns>
    <id>12363</id>
    <redirect title="Template:cpp/types/numeric limits/dsc float round style" />
    <revision>
      <id>60391</id>
      <timestamp>2013-06-01T06:47:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list float round style]] to [[Template:cpp/types/numeric limits/dsc float round style]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">#REDIRECT [[Template:cpp/types/numeric limits/dsc float round style]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list has denorm</title>
    <ns>10</ns>
    <id>12364</id>
    <redirect title="Template:cpp/types/numeric limits/dsc has denorm" />
    <revision>
      <id>60393</id>
      <timestamp>2013-06-01T06:47:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has denorm]] to [[Template:cpp/types/numeric limits/dsc has denorm]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/types/numeric limits/dsc has denorm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list has denorm loss</title>
    <ns>10</ns>
    <id>12365</id>
    <redirect title="Template:cpp/types/numeric limits/dsc has denorm loss" />
    <revision>
      <id>60395</id>
      <timestamp>2013-06-01T06:47:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has denorm loss]] to [[Template:cpp/types/numeric limits/dsc has denorm loss]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">#REDIRECT [[Template:cpp/types/numeric limits/dsc has denorm loss]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list has infinity</title>
    <ns>10</ns>
    <id>12366</id>
    <redirect title="Template:cpp/types/numeric limits/dsc has infinity" />
    <revision>
      <id>60397</id>
      <timestamp>2013-06-01T06:47:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has infinity]] to [[Template:cpp/types/numeric limits/dsc has infinity]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/types/numeric limits/dsc has infinity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list has quiet NaN</title>
    <ns>10</ns>
    <id>12367</id>
    <redirect title="Template:cpp/types/numeric limits/dsc has quiet NaN" />
    <revision>
      <id>60399</id>
      <timestamp>2013-06-01T06:47:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has quiet NaN]] to [[Template:cpp/types/numeric limits/dsc has quiet NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/types/numeric limits/dsc has quiet NaN]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list has signaling NaN</title>
    <ns>10</ns>
    <id>12368</id>
    <redirect title="Template:cpp/types/numeric limits/dsc has signaling NaN" />
    <revision>
      <id>60401</id>
      <timestamp>2013-06-01T06:47:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has signaling NaN]] to [[Template:cpp/types/numeric limits/dsc has signaling NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">#REDIRECT [[Template:cpp/types/numeric limits/dsc has signaling NaN]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list infinity</title>
    <ns>10</ns>
    <id>12369</id>
    <redirect title="Template:cpp/types/numeric limits/dsc infinity" />
    <revision>
      <id>60403</id>
      <timestamp>2013-06-01T06:47:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list infinity]] to [[Template:cpp/types/numeric limits/dsc infinity]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/types/numeric limits/dsc infinity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list is bounded</title>
    <ns>10</ns>
    <id>12370</id>
    <redirect title="Template:cpp/types/numeric limits/dsc is bounded" />
    <revision>
      <id>60405</id>
      <timestamp>2013-06-01T06:48:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is bounded]] to [[Template:cpp/types/numeric limits/dsc is bounded]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/types/numeric limits/dsc is bounded]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list is exact</title>
    <ns>10</ns>
    <id>12371</id>
    <redirect title="Template:cpp/types/numeric limits/dsc is exact" />
    <revision>
      <id>60407</id>
      <timestamp>2013-06-01T06:48:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is exact]] to [[Template:cpp/types/numeric limits/dsc is exact]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/types/numeric limits/dsc is exact]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list is iec559</title>
    <ns>10</ns>
    <id>12372</id>
    <redirect title="Template:cpp/types/numeric limits/dsc is iec559" />
    <revision>
      <id>60409</id>
      <timestamp>2013-06-01T06:48:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is iec559]] to [[Template:cpp/types/numeric limits/dsc is iec559]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/types/numeric limits/dsc is iec559]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list is integer</title>
    <ns>10</ns>
    <id>12373</id>
    <redirect title="Template:cpp/types/numeric limits/dsc is integer" />
    <revision>
      <id>60411</id>
      <timestamp>2013-06-01T06:48:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is integer]] to [[Template:cpp/types/numeric limits/dsc is integer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/types/numeric limits/dsc is integer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list is modulo</title>
    <ns>10</ns>
    <id>12374</id>
    <redirect title="Template:cpp/types/numeric limits/dsc is modulo" />
    <revision>
      <id>60413</id>
      <timestamp>2013-06-01T06:48:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is modulo]] to [[Template:cpp/types/numeric limits/dsc is modulo]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/types/numeric limits/dsc is modulo]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list is signed</title>
    <ns>10</ns>
    <id>12375</id>
    <redirect title="Template:cpp/types/numeric limits/dsc is signed" />
    <revision>
      <id>60415</id>
      <timestamp>2013-06-01T06:48:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is signed]] to [[Template:cpp/types/numeric limits/dsc is signed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/types/numeric limits/dsc is signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list is specialized</title>
    <ns>10</ns>
    <id>12376</id>
    <redirect title="Template:cpp/types/numeric limits/dsc is specialized" />
    <revision>
      <id>60417</id>
      <timestamp>2013-06-01T06:48:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is specialized]] to [[Template:cpp/types/numeric limits/dsc is specialized]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">#REDIRECT [[Template:cpp/types/numeric limits/dsc is specialized]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list lowest</title>
    <ns>10</ns>
    <id>12377</id>
    <redirect title="Template:cpp/types/numeric limits/dsc lowest" />
    <revision>
      <id>60419</id>
      <timestamp>2013-06-01T06:48:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list lowest]] to [[Template:cpp/types/numeric limits/dsc lowest]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/types/numeric limits/dsc lowest]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list max</title>
    <ns>10</ns>
    <id>12378</id>
    <redirect title="Template:cpp/types/numeric limits/dsc max" />
    <revision>
      <id>60421</id>
      <timestamp>2013-06-01T06:48:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max]] to [[Template:cpp/types/numeric limits/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/types/numeric limits/dsc max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list max digits10</title>
    <ns>10</ns>
    <id>12379</id>
    <redirect title="Template:cpp/types/numeric limits/dsc max digits10" />
    <revision>
      <id>60423</id>
      <timestamp>2013-06-01T06:48:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max digits10]] to [[Template:cpp/types/numeric limits/dsc max digits10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/types/numeric limits/dsc max digits10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list max exponent</title>
    <ns>10</ns>
    <id>12380</id>
    <redirect title="Template:cpp/types/numeric limits/dsc max exponent" />
    <revision>
      <id>60425</id>
      <timestamp>2013-06-01T06:48:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max exponent]] to [[Template:cpp/types/numeric limits/dsc max exponent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/types/numeric limits/dsc max exponent]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list max exponent10</title>
    <ns>10</ns>
    <id>12381</id>
    <redirect title="Template:cpp/types/numeric limits/dsc max exponent10" />
    <revision>
      <id>60427</id>
      <timestamp>2013-06-01T06:48:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max exponent10]] to [[Template:cpp/types/numeric limits/dsc max exponent10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">#REDIRECT [[Template:cpp/types/numeric limits/dsc max exponent10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list min</title>
    <ns>10</ns>
    <id>12382</id>
    <redirect title="Template:cpp/types/numeric limits/dsc min" />
    <revision>
      <id>60429</id>
      <timestamp>2013-06-01T06:48:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list min]] to [[Template:cpp/types/numeric limits/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/types/numeric limits/dsc min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list min exponent</title>
    <ns>10</ns>
    <id>12383</id>
    <redirect title="Template:cpp/types/numeric limits/dsc min exponent" />
    <revision>
      <id>60431</id>
      <timestamp>2013-06-01T06:48:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list min exponent]] to [[Template:cpp/types/numeric limits/dsc min exponent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/types/numeric limits/dsc min exponent]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list min exponent10</title>
    <ns>10</ns>
    <id>12384</id>
    <redirect title="Template:cpp/types/numeric limits/dsc min exponent10" />
    <revision>
      <id>60433</id>
      <timestamp>2013-06-01T06:48:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list min exponent10]] to [[Template:cpp/types/numeric limits/dsc min exponent10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">#REDIRECT [[Template:cpp/types/numeric limits/dsc min exponent10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list quiet NaN</title>
    <ns>10</ns>
    <id>12385</id>
    <redirect title="Template:cpp/types/numeric limits/dsc quiet NaN" />
    <revision>
      <id>60435</id>
      <timestamp>2013-06-01T06:48:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list quiet NaN]] to [[Template:cpp/types/numeric limits/dsc quiet NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/types/numeric limits/dsc quiet NaN]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list radix</title>
    <ns>10</ns>
    <id>12386</id>
    <redirect title="Template:cpp/types/numeric limits/dsc radix" />
    <revision>
      <id>60437</id>
      <timestamp>2013-06-01T06:48:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list radix]] to [[Template:cpp/types/numeric limits/dsc radix]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/types/numeric limits/dsc radix]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list round error</title>
    <ns>10</ns>
    <id>12387</id>
    <redirect title="Template:cpp/types/numeric limits/dsc round error" />
    <revision>
      <id>60439</id>
      <timestamp>2013-06-01T06:48:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list round error]] to [[Template:cpp/types/numeric limits/dsc round error]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/types/numeric limits/dsc round error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list round style</title>
    <ns>10</ns>
    <id>12388</id>
    <redirect title="Template:cpp/types/numeric limits/dsc round style" />
    <revision>
      <id>60441</id>
      <timestamp>2013-06-01T06:48:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list round style]] to [[Template:cpp/types/numeric limits/dsc round style]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/types/numeric limits/dsc round style]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list signaling NaN</title>
    <ns>10</ns>
    <id>12389</id>
    <redirect title="Template:cpp/types/numeric limits/dsc signaling NaN" />
    <revision>
      <id>60443</id>
      <timestamp>2013-06-01T06:48:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list signaling NaN]] to [[Template:cpp/types/numeric limits/dsc signaling NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/types/numeric limits/dsc signaling NaN]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list tinyness before</title>
    <ns>10</ns>
    <id>12390</id>
    <redirect title="Template:cpp/types/numeric limits/dsc tinyness before" />
    <revision>
      <id>60445</id>
      <timestamp>2013-06-01T06:48:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list tinyness before]] to [[Template:cpp/types/numeric limits/dsc tinyness before]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">#REDIRECT [[Template:cpp/types/numeric limits/dsc tinyness before]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dcl list traps</title>
    <ns>10</ns>
    <id>12391</id>
    <redirect title="Template:cpp/types/numeric limits/dsc traps" />
    <revision>
      <id>60447</id>
      <timestamp>2013-06-01T06:48:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list traps]] to [[Template:cpp/types/numeric limits/dsc traps]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/types/numeric limits/dsc traps]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc denorm min</title>
    <ns>10</ns>
    <id>3025</id>
    <revision>
      <id>60380</id>
      <parentid>55565</parentid>
      <timestamp>2013-06-01T06:47:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list denorm min]] to [[Template:cpp/types/numeric limits/dsc denorm min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem sfun | cpp/types/numeric_limits/denorm_min | returns the smallest positive subnormal value of the given floating-point type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc digits</title>
    <ns>10</ns>
    <id>3065</id>
    <revision>
      <id>60382</id>
      <parentid>55566</parentid>
      <timestamp>2013-06-01T06:47:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list digits]] to [[Template:cpp/types/numeric limits/dsc digits]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem sconst | cpp/types/numeric_limits/digits | number of {{tt|radix}} digits that can be represented without change }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc digits10</title>
    <ns>10</ns>
    <id>3066</id>
    <revision>
      <id>60384</id>
      <parentid>55569</parentid>
      <timestamp>2013-06-01T06:47:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list digits10]] to [[Template:cpp/types/numeric limits/dsc digits10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem sconst | cpp/types/numeric_limits/digits10 | number of decimal digits that can be represented without change}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc epsilon</title>
    <ns>10</ns>
    <id>3020</id>
    <revision>
      <id>60386</id>
      <parentid>55572</parentid>
      <timestamp>2013-06-01T06:47:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list epsilon]] to [[Template:cpp/types/numeric limits/dsc epsilon]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc mem sfun | cpp/types/numeric_limits/epsilon | returns the difference between {{tt|1.0}} and the next representable value of the given floating-point type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc float denorm style</title>
    <ns>10</ns>
    <id>3055</id>
    <revision>
      <id>60388</id>
      <parentid>55573</parentid>
      <timestamp>2013-06-01T06:47:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list float denorm style]] to [[Template:cpp/types/numeric limits/dsc float denorm style]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="107">{{dsc enum | cpp/types/numeric_limits/float_denorm_style | indicates floating-point denormalization modes}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc float round style</title>
    <ns>10</ns>
    <id>3054</id>
    <revision>
      <id>60390</id>
      <parentid>55574</parentid>
      <timestamp>2013-06-01T06:47:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list float round style]] to [[Template:cpp/types/numeric limits/dsc float round style]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc enum | cpp/types/numeric_limits/float_round_style | indicates floating-point rounding modes}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc has denorm</title>
    <ns>10</ns>
    <id>3031</id>
    <revision>
      <id>60392</id>
      <parentid>55575</parentid>
      <timestamp>2013-06-01T06:47:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has denorm]] to [[Template:cpp/types/numeric limits/dsc has denorm]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="128">{{dsc mem sconst | cpp/types/numeric_limits/has_denorm | identifies the denormalization style used by the floating-point type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc has denorm loss</title>
    <ns>10</ns>
    <id>3040</id>
    <revision>
      <id>60394</id>
      <parentid>55578</parentid>
      <timestamp>2013-06-01T06:47:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has denorm loss]] to [[Template:cpp/types/numeric limits/dsc has denorm loss]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="181">{{dsc mem sconst | cpp/types/numeric_limits/has_denorm_loss | identifies the floating-point types that detect loss of precision as denormalization loss rather than inexact result }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc has infinity</title>
    <ns>10</ns>
    <id>3037</id>
    <revision>
      <id>60396</id>
      <parentid>55585</parentid>
      <timestamp>2013-06-01T06:47:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has infinity]] to [[Template:cpp/types/numeric limits/dsc has infinity]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc mem sconst | cpp/types/numeric_limits/has_infinity | identifies floating-point types that can represent the special value &quot;positive infinity&quot; }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc has quiet NaN</title>
    <ns>10</ns>
    <id>3038</id>
    <revision>
      <id>60398</id>
      <parentid>55588</parentid>
      <timestamp>2013-06-01T06:47:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has quiet NaN]] to [[Template:cpp/types/numeric limits/dsc has quiet NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc mem sconst | cpp/types/numeric_limits/has_quiet_NaN | identifies floating-point types that can represent the special value &quot;quiet not-a-number&quot; (NaN) }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc has signaling NaN</title>
    <ns>10</ns>
    <id>3039</id>
    <revision>
      <id>60400</id>
      <parentid>55591</parentid>
      <timestamp>2013-06-01T06:47:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list has signaling NaN]] to [[Template:cpp/types/numeric limits/dsc has signaling NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="165">{{dsc mem sconst | cpp/types/numeric_limits/has_signaling_NaN | identifies floating-point types that can represent the special value &quot;signaling not-a-number&quot; (NaN)}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc infinity</title>
    <ns>10</ns>
    <id>3022</id>
    <revision>
      <id>60402</id>
      <parentid>55592</parentid>
      <timestamp>2013-06-01T06:47:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list infinity]] to [[Template:cpp/types/numeric limits/dsc infinity]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="123">{{dsc mem sfun | cpp/types/numeric_limits/infinity | returns the positive infinity value of the given floating-point type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc is bounded</title>
    <ns>10</ns>
    <id>3042</id>
    <revision>
      <id>60404</id>
      <parentid>55595</parentid>
      <timestamp>2013-06-01T06:48:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is bounded]] to [[Template:cpp/types/numeric limits/dsc is bounded]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem sconst | cpp/types/numeric_limits/is_bounded | identifies types that represent a finite set of values }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc is exact</title>
    <ns>10</ns>
    <id>3036</id>
    <revision>
      <id>60406</id>
      <parentid>55596</parentid>
      <timestamp>2013-06-01T06:48:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is exact]] to [[Template:cpp/types/numeric limits/dsc is exact]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc mem sconst | cpp/types/numeric_limits/is_exact | identifies exact types }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc is iec559</title>
    <ns>10</ns>
    <id>3041</id>
    <revision>
      <id>60408</id>
      <parentid>55597</parentid>
      <timestamp>2013-06-01T06:48:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is iec559]] to [[Template:cpp/types/numeric limits/dsc is iec559]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="110">{{dsc mem sconst | cpp/types/numeric_limits/is_iec559 | identifies the IEC 559/IEEE 754 floating-point types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc is integer</title>
    <ns>10</ns>
    <id>3035</id>
    <revision>
      <id>60410</id>
      <parentid>55598</parentid>
      <timestamp>2013-06-01T06:48:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is integer]] to [[Template:cpp/types/numeric limits/dsc is integer]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem sconst | cpp/types/numeric_limits/is_integer | identifies integer types }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc is modulo</title>
    <ns>10</ns>
    <id>3043</id>
    <revision>
      <id>60412</id>
      <parentid>55603</parentid>
      <timestamp>2013-06-01T06:48:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is modulo]] to [[Template:cpp/types/numeric limits/dsc is modulo]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="120">{{dsc mem sconst | cpp/types/numeric_limits/is_modulo | identifies types that handle overflows with modulo arithmetic }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc is signed</title>
    <ns>10</ns>
    <id>3034</id>
    <revision>
      <id>60414</id>
      <parentid>55604</parentid>
      <timestamp>2013-06-01T06:48:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is signed]] to [[Template:cpp/types/numeric limits/dsc is signed]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc mem sconst | cpp/types/numeric_limits/is_signed | identifies signed types }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc is specialized</title>
    <ns>10</ns>
    <id>3033</id>
    <revision>
      <id>60416</id>
      <parentid>55605</parentid>
      <timestamp>2013-06-01T06:48:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list is specialized]] to [[Template:cpp/types/numeric limits/dsc is specialized]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="131">{{dsc mem sconst | cpp/types/numeric_limits/is_specialized | identifies types for which {{lc|std::numeric_limits}} is specialized}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc lowest</title>
    <ns>10</ns>
    <id>3018</id>
    <revision>
      <id>60418</id>
      <parentid>55606</parentid>
      <timestamp>2013-06-01T06:48:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list lowest]] to [[Template:cpp/types/numeric limits/dsc lowest]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem sfun | cpp/types/numeric_limits/lowest | returns the lowest finite value of the given type | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc max</title>
    <ns>10</ns>
    <id>3019</id>
    <revision>
      <id>60420</id>
      <parentid>55607</parentid>
      <timestamp>2013-06-01T06:48:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max]] to [[Template:cpp/types/numeric limits/dsc max]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="101">{{dsc mem sfun | cpp/types/numeric_limits/max | returns the largest finite value of the given type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc max digits10</title>
    <ns>10</ns>
    <id>3046</id>
    <revision>
      <id>60422</id>
      <parentid>55614</parentid>
      <timestamp>2013-06-01T06:48:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max digits10]] to [[Template:cpp/types/numeric limits/dsc max digits10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc mem sconst | cpp/types/numeric_limits/max_digits10 | number of decimal digits necessary to differentiate all values of this type | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc max exponent</title>
    <ns>10</ns>
    <id>3050</id>
    <revision>
      <id>60424</id>
      <parentid>55619</parentid>
      <timestamp>2013-06-01T06:48:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max exponent]] to [[Template:cpp/types/numeric limits/dsc max exponent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc mem sconst | cpp/types/numeric_limits/max_exponent | one more than the largest integer power of the radix that is a valid finite floating-point value }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc max exponent10</title>
    <ns>10</ns>
    <id>3051</id>
    <revision>
      <id>60426</id>
      <parentid>55620</parentid>
      <timestamp>2013-06-01T06:48:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list max exponent10]] to [[Template:cpp/types/numeric limits/dsc max exponent10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="138">{{dsc mem sconst | cpp/types/numeric_limits/max_exponent10 | the largest integer power of 10 that is a valid finite floating-point value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc min</title>
    <ns>10</ns>
    <id>3017</id>
    <revision>
      <id>60428</id>
      <parentid>55623</parentid>
      <timestamp>2013-06-01T06:48:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list min]] to [[Template:cpp/types/numeric limits/dsc min]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem sfun | cpp/types/numeric_limits/min | returns the smallest finite value of the given type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc min exponent</title>
    <ns>10</ns>
    <id>3048</id>
    <revision>
      <id>60430</id>
      <parentid>55626</parentid>
      <timestamp>2013-06-01T06:48:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list min exponent]] to [[Template:cpp/types/numeric limits/dsc min exponent]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="163">{{dsc mem sconst | cpp/types/numeric_limits/min_exponent | one more than the smallest negative power of the radix that is a valid normalized floating-point value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc min exponent10</title>
    <ns>10</ns>
    <id>3049</id>
    <revision>
      <id>60432</id>
      <parentid>55627</parentid>
      <timestamp>2013-06-01T06:48:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list min exponent10]] to [[Template:cpp/types/numeric limits/dsc min exponent10]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="145">{{dsc mem sconst | cpp/types/numeric_limits/min_exponent10 | the smallest negative power of ten that is a valid normalized floating-point value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc quiet NaN</title>
    <ns>10</ns>
    <id>3023</id>
    <revision>
      <id>60434</id>
      <parentid>55628</parentid>
      <timestamp>2013-06-01T06:48:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list quiet NaN]] to [[Template:cpp/types/numeric limits/dsc quiet NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem sfun | cpp/types/numeric_limits/quiet_NaN | returns a quiet NaN value of the given floating-point type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc radix</title>
    <ns>10</ns>
    <id>3047</id>
    <revision>
      <id>60436</id>
      <parentid>55631</parentid>
      <timestamp>2013-06-01T06:48:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list radix]] to [[Template:cpp/types/numeric limits/dsc radix]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc mem sconst | cpp/types/numeric_limits/radix | the radix or integer base used by the representation of the given type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc round error</title>
    <ns>10</ns>
    <id>3021</id>
    <revision>
      <id>60438</id>
      <parentid>55632</parentid>
      <timestamp>2013-06-01T06:48:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list round error]] to [[Template:cpp/types/numeric limits/dsc round error]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem sfun | cpp/types/numeric_limits/round_error | returns the maximum rounding error of the given floating-point type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc round style</title>
    <ns>10</ns>
    <id>3029</id>
    <revision>
      <id>60440</id>
      <parentid>55635</parentid>
      <timestamp>2013-06-01T06:48:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list round style]] to [[Template:cpp/types/numeric limits/dsc round style]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem sconst | cpp/types/numeric_limits/round_style | identifies the rounding style used by the type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc signaling NaN</title>
    <ns>10</ns>
    <id>3024</id>
    <revision>
      <id>60442</id>
      <parentid>55636</parentid>
      <timestamp>2013-06-01T06:48:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list signaling NaN]] to [[Template:cpp/types/numeric limits/dsc signaling NaN]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem sfun | cpp/types/numeric_limits/signaling_NaN | returns a signaling NaN value of the given floating-point type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc tinyness before</title>
    <ns>10</ns>
    <id>3053</id>
    <revision>
      <id>60444</id>
      <parentid>55637</parentid>
      <timestamp>2013-06-01T06:48:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list tinyness before]] to [[Template:cpp/types/numeric limits/dsc tinyness before]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="132">{{dsc mem sconst | cpp/types/numeric_limits/tinyness_before | identifies floating-point types that detect tinyness before rounding}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/dsc traps</title>
    <ns>10</ns>
    <id>3052</id>
    <revision>
      <id>60446</id>
      <parentid>55640</parentid>
      <timestamp>2013-06-01T06:48:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/dcl list traps]] to [[Template:cpp/types/numeric limits/dsc traps]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem sconst | cpp/types/numeric_limits/traps | identifies types which can cause arithmetic operations to trap}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/navbar</title>
    <ns>10</ns>
    <id>3009</id>
    <revision>
      <id>40044</id>
      <parentid>36033</parentid>
      <timestamp>2012-09-28T20:21:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="332">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/types/navbar heading
|content3 = cpp/types/navbar content

|heading4 = cpp/types/numeric_limits/navbar heading
|content4 = cpp/types/numeric_limits/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/navbar content</title>
    <ns>10</ns>
    <id>3060</id>
    <revision>
      <id>55641</id>
      <parentid>35964</parentid>
      <timestamp>2013-06-01T05:25:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1930">{{nv begin}}
{{nv h1 | Static constants}}
{{nv mem ln | cpp/types/numeric_limits/is_specialized}}
{{nv mem ln | cpp/types/numeric_limits/is_signed}}
{{nv mem ln | cpp/types/numeric_limits/is_integer}}
{{nv mem ln | cpp/types/numeric_limits/is_exact}}
{{nv mem ln | cpp/types/numeric_limits/has_infinity}}
{{nv mem ln | cpp/types/numeric_limits/has_quiet_NaN}}
{{nv mem ln | cpp/types/numeric_limits/has_signaling_NaN}}
{{nv mem ln | cpp/types/numeric_limits/has_denorm}}
{{nv mem ln | cpp/types/numeric_limits/has_denorm_loss}}
{{nv mem ln | cpp/types/numeric_limits/round_style}}
{{nv mem ln | cpp/types/numeric_limits/is_iec559}}
{{nv mem ln | cpp/types/numeric_limits/is_bounded}}
{{nv mem ln | cpp/types/numeric_limits/is_modulo}}
{{nv mem ln | cpp/types/numeric_limits/digits}}
{{nv mem ln | cpp/types/numeric_limits/digits10}}
{{nv mem ln | cpp/types/numeric_limits/max_digits10|notes={{mark c++11}}}}
{{nv mem ln | cpp/types/numeric_limits/radix}}
{{nv mem ln | cpp/types/numeric_limits/min_exponent}}
{{nv mem ln | cpp/types/numeric_limits/min_exponent10}}
{{nv mem ln | cpp/types/numeric_limits/max_exponent}}
{{nv mem ln | cpp/types/numeric_limits/max_exponent10}}
{{nv mem ln | cpp/types/numeric_limits/traps}}
{{nv mem ln | cpp/types/numeric_limits/tinyness_before}}
{{nv h1 | Static member functions}}
{{nv mem ln | cpp/types/numeric_limits/min}}
{{nv mem ln | cpp/types/numeric_limits/lowest|notes={{mark c++11}}}}
{{nv mem ln | cpp/types/numeric_limits/max}}
{{nv mem ln | cpp/types/numeric_limits/epsilon}}
{{nv mem ln | cpp/types/numeric_limits/round_error}}
{{nv mem ln | cpp/types/numeric_limits/infinity}}
{{nv mem ln | cpp/types/numeric_limits/quiet_NaN}}
{{nv mem ln | cpp/types/numeric_limits/signaling_NaN}}
{{nv mem ln | cpp/types/numeric_limits/denorm_min}}
{{nv h1 | Helper types}}
{{nv ln | cpp/types/numeric_limits/float_round_style}}
{{nv ln | cpp/types/numeric_limits/float_denorm_style}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/navbar heading</title>
    <ns>10</ns>
    <id>3010</id>
    <revision>
      <id>35966</id>
      <parentid>11365</parentid>
      <timestamp>2012-06-15T22:35:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/numeric limits/sidebar heading]] to [[Template:cpp/types/numeric limits/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="56">{{ltt| cpp/types/numeric_limits | std::numeric_limits }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/numeric limits/title</title>
    <ns>10</ns>
    <id>3008</id>
    <revision>
      <id>11372</id>
      <parentid>11363</parentid>
      <timestamp>2011-10-05T22:34:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>rm &lt;T&gt; for consistency</comment>
      <text xml:space="preserve" bytes="111">&lt;onlyinclude&gt;{{cpp/title | n=numeric_limits::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dcl list constructor</title>
    <ns>10</ns>
    <id>12392</id>
    <redirect title="Template:cpp/types/type index/dsc constructor" />
    <revision>
      <id>60449</id>
      <timestamp>2013-06-01T06:48:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type index/dcl list constructor]] to [[Template:cpp/types/type index/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/types/type index/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dcl list hash</title>
    <ns>10</ns>
    <id>12393</id>
    <redirect title="Template:cpp/types/type index/dsc hash" />
    <revision>
      <id>60451</id>
      <timestamp>2013-06-01T06:48:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type index/dcl list hash]] to [[Template:cpp/types/type index/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/types/type index/dsc hash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dcl list hash code</title>
    <ns>10</ns>
    <id>12394</id>
    <redirect title="Template:cpp/types/type index/dsc hash code" />
    <revision>
      <id>60453</id>
      <timestamp>2013-06-01T06:48:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type index/dcl list hash code]] to [[Template:cpp/types/type index/dsc hash code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/types/type index/dsc hash code]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dcl list name</title>
    <ns>10</ns>
    <id>12395</id>
    <redirect title="Template:cpp/types/type index/dsc name" />
    <revision>
      <id>60455</id>
      <timestamp>2013-06-01T06:48:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type index/dcl list name]] to [[Template:cpp/types/type index/dsc name]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/types/type index/dsc name]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dcl list operator cmp</title>
    <ns>10</ns>
    <id>12396</id>
    <redirect title="Template:cpp/types/type index/dsc operator cmp" />
    <revision>
      <id>60457</id>
      <timestamp>2013-06-01T06:48:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type index/dcl list operator cmp]] to [[Template:cpp/types/type index/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/types/type index/dsc operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dsc constructor</title>
    <ns>10</ns>
    <id>2218</id>
    <revision>
      <id>60448</id>
      <parentid>55642</parentid>
      <timestamp>2013-06-01T06:48:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type index/dcl list constructor]] to [[Template:cpp/types/type index/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">{{dsc mem ctor | cpp/types/type_index/type_index | constructs the object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dsc hash</title>
    <ns>10</ns>
    <id>2989</id>
    <revision>
      <id>60450</id>
      <parentid>55645</parentid>
      <timestamp>2013-06-01T06:48:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type index/dcl list hash]] to [[Template:cpp/types/type index/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="158">{{dsc ptclass | cpp/types/type_index/hash | title=std::hash{{dsc small|&lt;std::type_index&gt;}} | hash support for {{lc|std::type_index}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dsc hash code</title>
    <ns>10</ns>
    <id>2220</id>
    <revision>
      <id>60452</id>
      <parentid>55648</parentid>
      <timestamp>2013-06-01T06:48:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type index/dcl list hash code]] to [[Template:cpp/types/type index/dsc hash code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/types/type_index/hash_code | returns hashed code}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dsc name</title>
    <ns>10</ns>
    <id>2221</id>
    <revision>
      <id>60454</id>
      <parentid>55649</parentid>
      <timestamp>2013-06-01T06:48:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type index/dcl list name]] to [[Template:cpp/types/type index/dsc name]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc mem fun | cpp/types/type_index/name | returns implementation defined name of the type,&lt;br&gt; associated with underlying {{ltt|cpp/types/type_info}} object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/dsc operator cmp</title>
    <ns>10</ns>
    <id>2219</id>
    <revision>
      <id>60456</id>
      <parentid>55650</parentid>
      <timestamp>2013-06-01T06:48:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type index/dcl list operator cmp]] to [[Template:cpp/types/type index/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="194">{{dsc mem fun | cpp/types/type_index/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | compares the underlying {{lc|std::type_info}} objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/navbar</title>
    <ns>10</ns>
    <id>2172</id>
    <revision>
      <id>40045</id>
      <parentid>36030</parentid>
      <timestamp>2012-09-28T20:21:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="324">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/types/navbar heading
|content3 = cpp/types/navbar content

|heading4 = cpp/types/type_index/navbar heading
|content4 = cpp/types/type_index/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/navbar content</title>
    <ns>10</ns>
    <id>2576</id>
    <revision>
      <id>55651</id>
      <parentid>35970</parentid>
      <timestamp>2013-06-01T05:25:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/types/type_index/type_index}}
{{nv mem ln | cpp/types/type_index/operator_cmp | operator{{=}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}}}}
{{nv mem ln | cpp/types/type_index/hash_code}}
{{nv mem ln | cpp/types/type_index/name}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/navbar heading</title>
    <ns>10</ns>
    <id>2175</id>
    <revision>
      <id>47758</id>
      <parentid>35971</parentid>
      <timestamp>2013-05-16T20:23:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="44">{{ltt|cpp/types/type_index|std::type_index}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type index/title</title>
    <ns>10</ns>
    <id>2384</id>
    <revision>
      <id>5456</id>
      <timestamp>2011-07-29T20:17:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>new</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=type_index::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dcl list before</title>
    <ns>10</ns>
    <id>12397</id>
    <redirect title="Template:cpp/types/type info/dsc before" />
    <revision>
      <id>60459</id>
      <timestamp>2013-06-01T06:48:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type info/dcl list before]] to [[Template:cpp/types/type info/dsc before]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/types/type info/dsc before]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dcl list hash code</title>
    <ns>10</ns>
    <id>12398</id>
    <redirect title="Template:cpp/types/type info/dsc hash code" />
    <revision>
      <id>60461</id>
      <timestamp>2013-06-01T06:48:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type info/dcl list hash code]] to [[Template:cpp/types/type info/dsc hash code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/types/type info/dsc hash code]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dcl list name</title>
    <ns>10</ns>
    <id>12399</id>
    <redirect title="Template:cpp/types/type info/dsc name" />
    <revision>
      <id>60463</id>
      <timestamp>2013-06-01T06:48:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type info/dcl list name]] to [[Template:cpp/types/type info/dsc name]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/types/type info/dsc name]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dcl list operator cmp</title>
    <ns>10</ns>
    <id>12400</id>
    <redirect title="Template:cpp/types/type info/dsc operator cmp" />
    <revision>
      <id>60465</id>
      <timestamp>2013-06-01T06:48:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/types/type info/dcl list operator cmp]] to [[Template:cpp/types/type info/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/types/type info/dsc operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dsc before</title>
    <ns>10</ns>
    <id>2215</id>
    <revision>
      <id>60458</id>
      <parentid>55654</parentid>
      <timestamp>2013-06-01T06:48:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type info/dcl list before]] to [[Template:cpp/types/type info/dsc before]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="211">{{dsc mem fun | cpp/types/type_info/before | checks whether the referred type precedes referred type of another {{tt|type_index}}&lt;br&gt; object in the implementation defined order, i.e. orders the referred types }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dsc hash code</title>
    <ns>10</ns>
    <id>2216</id>
    <revision>
      <id>60460</id>
      <parentid>55655</parentid>
      <timestamp>2013-06-01T06:48:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type info/dcl list hash code]] to [[Template:cpp/types/type info/dsc hash code]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="127">{{dsc mem fun | cpp/types/type_info/hash_code | returns a value which is identical for the same types | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dsc name</title>
    <ns>10</ns>
    <id>2217</id>
    <revision>
      <id>60462</id>
      <parentid>55658</parentid>
      <timestamp>2013-06-01T06:48:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type info/dcl list name]] to [[Template:cpp/types/type info/dsc name]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc mem fun | cpp/types/type_info/name | implementation defined name of the type}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/dsc operator cmp</title>
    <ns>10</ns>
    <id>2214</id>
    <revision>
      <id>60464</id>
      <parentid>55659</parentid>
      <timestamp>2013-06-01T06:48:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/types/type info/dcl list operator cmp]] to [[Template:cpp/types/type info/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem fun | cpp/types/type_info/operator_cmp| title=operator==&lt;br&gt;operator!= | checks whether the objects refer to the same type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/navbar</title>
    <ns>10</ns>
    <id>2171</id>
    <revision>
      <id>40046</id>
      <parentid>36028</parentid>
      <timestamp>2012-09-28T20:21:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="322">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/types/navbar heading
|content3 = cpp/types/navbar content

|heading4 = cpp/types/type_info/navbar heading
|content4 = cpp/types/type_info/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/navbar content</title>
    <ns>10</ns>
    <id>2222</id>
    <revision>
      <id>55660</id>
      <parentid>35655</parentid>
      <timestamp>2013-06-01T05:26:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="335">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/types/type_info/~type_info}}
{{nv mem ln | cpp/types/type_info/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv mem ln | cpp/types/type_info/before}}
{{nv mem ln | cpp/types/type_info/hash_code | notes={{mark c++11}}}}
{{nv mem ln | cpp/types/type_info/name}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/navbar heading</title>
    <ns>10</ns>
    <id>2174</id>
    <revision>
      <id>47757</id>
      <parentid>35448</parentid>
      <timestamp>2013-05-16T20:23:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="42">{{ltt|cpp/types/type_info|std::type_info}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/types/type info/title</title>
    <ns>10</ns>
    <id>2224</id>
    <revision>
      <id>5026</id>
      <timestamp>2011-07-11T17:02:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=type_info::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="106">&lt;onlyinclude&gt;{{cpp/title | n=type_info::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc any cast</title>
    <ns>10</ns>
    <id>14855</id>
    <revision>
      <id>84141</id>
      <parentid>84139</parentid>
      <timestamp>2016-03-15T15:44:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="103">{{dsc tfun | cpp/utility/any/any_cast | type-safe access to the contained object|notes={{mark c++17}}}}</text>
      <sha1>m0bi0eke73ntreirp53cra3dex72idu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc bad any cast</title>
    <ns>10</ns>
    <id>14857</id>
    <revision>
      <id>84142</id>
      <timestamp>2016-03-15T15:45:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{dsc class | cpp/utility/any/bad_any_cast | exception thrown by the value-returning forms of {{tt|any_cast}} on a type mismatch | notes={{mark c++17}} }}</text>
      <sha1>198zy6hcns74nv155xb9p7n8jled36c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc clear</title>
    <ns>10</ns>
    <id>15598</id>
    <redirect title="Template:cpp/utility/any/dsc reset" />
    <revision>
      <id>86673</id>
      <timestamp>2016-07-09T05:23:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/utility/any/dsc clear]] to [[Template:cpp/utility/any/dsc reset]]</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/utility/any/dsc reset]]</text>
      <sha1>bflezoonx6bo9c6cnqo6l08mynu6x2s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc constructor</title>
    <ns>10</ns>
    <id>14838</id>
    <revision>
      <id>84121</id>
      <timestamp>2016-03-15T15:31:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem ctor | cpp/utility/any/any | constructs an {{tt|any}} object}}</text>
      <sha1>q24fw7sb1uwbkf2vsozfe5mjljliblx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc destructor</title>
    <ns>10</ns>
    <id>14843</id>
    <revision>
      <id>84126</id>
      <timestamp>2016-03-15T15:34:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem dtor | cpp/utility/any/~any | destroys an {{tt|any}} object}}</text>
      <sha1>2a94ob9n3prt8djugmnnwag281hsvfc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc emplace</title>
    <ns>10</ns>
    <id>15600</id>
    <revision>
      <id>86682</id>
      <parentid>86680</parentid>
      <timestamp>2016-07-09T05:28:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="109">{{dsc mem fun | cpp/utility/any/emplace | change the contained object, constructing the new object directly}}</text>
      <sha1>kyhvylohttrcnfm0wsu2ioj8ye82g42</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc empty</title>
    <ns>10</ns>
    <id>15599</id>
    <redirect title="Template:cpp/utility/any/dsc has value" />
    <revision>
      <id>86676</id>
      <timestamp>2016-07-09T05:24:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[Template:cpp/utility/any/dsc empty]] to [[Template:cpp/utility/any/dsc has value]]</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/utility/any/dsc has value]]</text>
      <sha1>qhp3faztrf4cvik64jakgsc5zgtwb9m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc has value</title>
    <ns>10</ns>
    <id>14847</id>
    <revision>
      <id>86677</id>
      <parentid>86675</parentid>
      <timestamp>2016-07-09T05:24:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>renamed</comment>
      <text xml:space="preserve" bytes="77">{{dsc mem fun | cpp/utility/any/has_value | checks if object holds a value }}</text>
      <sha1>hkbi4kjm6wexlqf7fjidtiyzs3xxoyt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc make any</title>
    <ns>10</ns>
    <id>15601</id>
    <revision>
      <id>86681</id>
      <timestamp>2016-07-09T05:28:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc tfun | cpp/utility/any/make_any| creates an {{tt|any}} object|notes={{mark c++17}} }}</text>
      <sha1>dw0fmdb1ovp3q2vm0faz4ul5118bocl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc operator=</title>
    <ns>10</ns>
    <id>14840</id>
    <revision>
      <id>84123</id>
      <timestamp>2016-03-15T15:32:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="79">{{dsc mem fun | cpp/utility/any/operator{{=}} | assigns an {{tt|any}} object }}</text>
      <sha1>pficgblchttimfiwr735agdur8niy6w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc reset</title>
    <ns>10</ns>
    <id>14845</id>
    <revision>
      <id>86674</id>
      <parentid>86672</parentid>
      <timestamp>2016-07-09T05:23:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <text xml:space="preserve" bytes="67">{{dsc mem fun | cpp/utility/any/reset | destroys contained object}}</text>
      <sha1>cthhde6s2x29lgi8rn81kq6jdpc0rxu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc swap</title>
    <ns>10</ns>
    <id>14851</id>
    <revision>
      <id>84134</id>
      <timestamp>2016-03-15T15:39:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/utility/any/swap | swaps two {{tt|any}} objects}}</text>
      <sha1>6d0alye1ryc9pxbjn6pn06q0vymhrog</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc swap2</title>
    <ns>10</ns>
    <id>14853</id>
    <revision>
      <id>84136</id>
      <timestamp>2016-03-15T15:40:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{dsc fun | cpp/utility/any/swap2 | title=std::swap{{dsc small|(std::any)}} | specializes the {{lc|std::swap}} algorithm|notes={{mark c++17}} }}</text>
      <sha1>7pt4x5jratin8uw0f3kg2of5gw7dycg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/dsc type</title>
    <ns>10</ns>
    <id>14849</id>
    <revision>
      <id>84132</id>
      <timestamp>2016-03-15T15:38:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="90">{{dsc mem fun | cpp/utility/any/type | returns the {{tt|typeid}} of the contained value }}</text>
      <sha1>9sxz8yqimk4hx3ihzk5wubnb9bcnbkt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/navbar</title>
    <ns>10</ns>
    <id>14835</id>
    <revision>
      <id>84118</id>
      <timestamp>2016-03-15T15:29:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="237">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content
|heading4 = cpp/utility/any/navbar heading
|content4 = cpp/utility/any/navbar content
}}</text>
      <sha1>mt2h8st7urh7wcsadsd791bkmz22c05</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/navbar content</title>
    <ns>10</ns>
    <id>14837</id>
    <revision>
      <id>89767</id>
      <parentid>86671</parentid>
      <timestamp>2017-01-24T16:28:01Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>dtor</comment>
      <text xml:space="preserve" bytes="586">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/any/any}}
{{nv mem ln | cpp/utility/any/~any}}
{{nv mem ln | cpp/utility/any/operator{{=}}}}

{{nv h2 | Modifers}}
{{nv mem ln | cpp/utility/any/emplace}}
{{nv mem ln | cpp/utility/any/reset}}
{{nv mem ln | cpp/utility/any/swap}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/utility/any/has_value}}
{{nv mem ln | cpp/utility/any/type}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/utility/any/swap2 | swap{{dsc small|(std::any)}} }}
{{nv ln | cpp/utility/any/any_cast }}
{{nv ln | cpp/utility/any/make_any }}
{{nv end}}</text>
      <sha1>fzz3kjvna95ckenqb4t86j1iyi7ib0x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/any/navbar heading</title>
    <ns>10</ns>
    <id>14836</id>
    <revision>
      <id>84119</id>
      <timestamp>2016-03-15T15:29:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="32">{{ltt|cpp/utility/any|std::any}}</text>
      <sha1>8ssmrq4ufllimwj3zdg7qbk4ug9ktue</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bad optional access/dcl list constructor</title>
    <ns>10</ns>
    <id>12401</id>
    <redirect title="Template:cpp/utility/bad optional access/dsc constructor" />
    <revision>
      <id>60467</id>
      <timestamp>2013-06-01T06:48:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bad optional access/dcl list constructor]] to [[Template:cpp/utility/bad optional access/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">#REDIRECT [[Template:cpp/utility/bad optional access/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bad optional access/title</title>
    <ns>10</ns>
    <id>10108</id>
    <revision>
      <id>48166</id>
      <timestamp>2013-05-18T20:37:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{cpp/title | n=bad_optional_access::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list all any none</title>
    <ns>10</ns>
    <id>12402</id>
    <redirect title="Template:cpp/utility/bitset/dsc all any none" />
    <revision>
      <id>60469</id>
      <timestamp>2013-06-01T06:48:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list all any none]] to [[Template:cpp/utility/bitset/dsc all any none]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/bitset/dsc all any none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list constructor</title>
    <ns>10</ns>
    <id>12403</id>
    <redirect title="Template:cpp/utility/bitset/dsc constructor" />
    <revision>
      <id>60471</id>
      <timestamp>2013-06-01T06:48:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list constructor]] to [[Template:cpp/utility/bitset/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/bitset/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list count</title>
    <ns>10</ns>
    <id>12404</id>
    <redirect title="Template:cpp/utility/bitset/dsc count" />
    <revision>
      <id>60473</id>
      <timestamp>2013-06-01T06:48:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list count]] to [[Template:cpp/utility/bitset/dsc count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/utility/bitset/dsc count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list flip</title>
    <ns>10</ns>
    <id>12405</id>
    <redirect title="Template:cpp/utility/bitset/dsc flip" />
    <revision>
      <id>60475</id>
      <timestamp>2013-06-01T06:48:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list flip]] to [[Template:cpp/utility/bitset/dsc flip]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/utility/bitset/dsc flip]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list hash</title>
    <ns>10</ns>
    <id>12406</id>
    <redirect title="Template:cpp/utility/bitset/dsc hash" />
    <revision>
      <id>60477</id>
      <timestamp>2013-06-01T06:48:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list hash]] to [[Template:cpp/utility/bitset/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/utility/bitset/dsc hash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list operator at</title>
    <ns>10</ns>
    <id>12407</id>
    <redirect title="Template:cpp/utility/bitset/dsc operator at" />
    <revision>
      <id>60479</id>
      <timestamp>2013-06-01T06:48:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator at]] to [[Template:cpp/utility/bitset/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/bitset/dsc operator at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list operator cmp</title>
    <ns>10</ns>
    <id>12408</id>
    <redirect title="Template:cpp/utility/bitset/dsc operator cmp" />
    <revision>
      <id>60481</id>
      <timestamp>2013-06-01T06:48:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator cmp]] to [[Template:cpp/utility/bitset/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/bitset/dsc operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list operator logic</title>
    <ns>10</ns>
    <id>12409</id>
    <redirect title="Template:cpp/utility/bitset/dsc operator logic" />
    <revision>
      <id>60483</id>
      <timestamp>2013-06-01T06:48:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator logic]] to [[Template:cpp/utility/bitset/dsc operator logic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/bitset/dsc operator logic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list operator logic2</title>
    <ns>10</ns>
    <id>12410</id>
    <redirect title="Template:cpp/utility/bitset/dsc operator logic2" />
    <revision>
      <id>60485</id>
      <timestamp>2013-06-01T06:48:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator logic2]] to [[Template:cpp/utility/bitset/dsc operator logic2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/bitset/dsc operator logic2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list operator ltltgtgt</title>
    <ns>10</ns>
    <id>12411</id>
    <redirect title="Template:cpp/utility/bitset/dsc operator ltltgtgt" />
    <revision>
      <id>60487</id>
      <timestamp>2013-06-01T06:48:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator ltltgtgt]] to [[Template:cpp/utility/bitset/dsc operator ltltgtgt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/utility/bitset/dsc operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list operator ltltgtgt2</title>
    <ns>10</ns>
    <id>12412</id>
    <redirect title="Template:cpp/utility/bitset/dsc operator ltltgtgt2" />
    <revision>
      <id>60489</id>
      <timestamp>2013-06-01T06:48:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator ltltgtgt2]] to [[Template:cpp/utility/bitset/dsc operator ltltgtgt2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/utility/bitset/dsc operator ltltgtgt2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list reset</title>
    <ns>10</ns>
    <id>12413</id>
    <redirect title="Template:cpp/utility/bitset/dsc reset" />
    <revision>
      <id>60491</id>
      <timestamp>2013-06-01T06:48:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list reset]] to [[Template:cpp/utility/bitset/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/utility/bitset/dsc reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list set</title>
    <ns>10</ns>
    <id>12414</id>
    <redirect title="Template:cpp/utility/bitset/dsc set" />
    <revision>
      <id>60493</id>
      <timestamp>2013-06-01T06:48:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list set]] to [[Template:cpp/utility/bitset/dsc set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/utility/bitset/dsc set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list size</title>
    <ns>10</ns>
    <id>12415</id>
    <redirect title="Template:cpp/utility/bitset/dsc size" />
    <revision>
      <id>60495</id>
      <timestamp>2013-06-01T06:48:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list size]] to [[Template:cpp/utility/bitset/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/utility/bitset/dsc size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list test</title>
    <ns>10</ns>
    <id>12416</id>
    <redirect title="Template:cpp/utility/bitset/dsc test" />
    <revision>
      <id>60497</id>
      <timestamp>2013-06-01T06:49:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list test]] to [[Template:cpp/utility/bitset/dsc test]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/utility/bitset/dsc test]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list to string</title>
    <ns>10</ns>
    <id>12417</id>
    <redirect title="Template:cpp/utility/bitset/dsc to string" />
    <revision>
      <id>60499</id>
      <timestamp>2013-06-01T06:49:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list to string]] to [[Template:cpp/utility/bitset/dsc to string]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/bitset/dsc to string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list to ullong</title>
    <ns>10</ns>
    <id>12418</id>
    <redirect title="Template:cpp/utility/bitset/dsc to ullong" />
    <revision>
      <id>60501</id>
      <timestamp>2013-06-01T06:49:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list to ullong]] to [[Template:cpp/utility/bitset/dsc to ullong]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/bitset/dsc to ullong]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dcl list to ulong</title>
    <ns>10</ns>
    <id>12419</id>
    <redirect title="Template:cpp/utility/bitset/dsc to ulong" />
    <revision>
      <id>60503</id>
      <timestamp>2013-06-01T06:49:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/dcl list to ulong]] to [[Template:cpp/utility/bitset/dsc to ulong]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/bitset/dsc to ulong]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc all any none</title>
    <ns>10</ns>
    <id>2373</id>
    <revision>
      <id>60468</id>
      <parentid>55664</parentid>
      <timestamp>2013-06-01T06:48:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list all any none]] to [[Template:cpp/utility/bitset/dsc all any none]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="175">{{dsc mem fun | cpp/utility/bitset/all_any_none | title=all&lt;br&gt;any&lt;br&gt;none | checks if all, any or none bits are set to {{c|true}} | notes={{mark c++11}}&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc constructor</title>
    <ns>10</ns>
    <id>31</id>
    <revision>
      <id>60470</id>
      <parentid>55667</parentid>
      <timestamp>2013-06-01T06:48:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list constructor]] to [[Template:cpp/utility/bitset/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">{{dsc mem ctor | cpp/utility/bitset/bitset | constructs the bitset}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc count</title>
    <ns>10</ns>
    <id>32</id>
    <revision>
      <id>60472</id>
      <parentid>55668</parentid>
      <timestamp>2013-06-01T06:48:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list count]] to [[Template:cpp/utility/bitset/dsc count]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc mem fun | cpp/utility/bitset/count | returns the number of bits set to {{c|true}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc flip</title>
    <ns>10</ns>
    <id>33</id>
    <revision>
      <id>60474</id>
      <parentid>55669</parentid>
      <timestamp>2013-06-01T06:48:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list flip]] to [[Template:cpp/utility/bitset/dsc flip]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">{{dsc mem fun | cpp/utility/bitset/flip | toggles the values of bits}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc hash</title>
    <ns>10</ns>
    <id>2987</id>
    <revision>
      <id>60476</id>
      <parentid>55670</parentid>
      <timestamp>2013-06-01T06:48:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list hash]] to [[Template:cpp/utility/bitset/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc ptclass | cpp/utility/bitset/hash | title=std::hash{{dsc small|&lt;std::bitset&gt;}} | hash support for {{lc|std::bitset}} | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc operator at</title>
    <ns>10</ns>
    <id>37</id>
    <revision>
      <id>60478</id>
      <parentid>55673</parentid>
      <timestamp>2013-06-01T06:48:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator at]] to [[Template:cpp/utility/bitset/dsc operator at]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/utility/bitset/operator_at | title=operator[] | accesses specific bit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc operator cmp</title>
    <ns>10</ns>
    <id>38</id>
    <revision>
      <id>60480</id>
      <parentid>55674</parentid>
      <timestamp>2013-06-01T06:48:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator cmp]] to [[Template:cpp/utility/bitset/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="106">{{dsc mem fun | cpp/utility/bitset/operator_cmp | title=operator==&lt;br&gt;operator!= | compares the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc operator logic</title>
    <ns>10</ns>
    <id>39</id>
    <revision>
      <id>60482</id>
      <parentid>55677</parentid>
      <timestamp>2013-06-01T06:48:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator logic]] to [[Template:cpp/utility/bitset/dsc operator logic]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc mem fun | cpp/utility/bitset/operator_logic | title=operator&amp;=&lt;br&gt;operator{{!}}=&lt;br&gt;operator^=&lt;br&gt;operator~ | performs binary AND, OR, XOR and NOT}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc operator logic2</title>
    <ns>10</ns>
    <id>9542</id>
    <revision>
      <id>72878</id>
      <parentid>60484</parentid>
      <timestamp>2014-10-03T14:11:06Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>dsc tfun</comment>
      <text xml:space="preserve" bytes="143">{{dsc tfun | cpp/utility/bitset/operator_logic2 | title=operator&amp;&lt;br&gt;operator{{!}}&lt;br&gt;operator^ | performs binary logic operations on bitsets}}</text>
      <sha1>4xhb3ququew4zk03p02uputufp6npyd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc operator ltltgtgt</title>
    <ns>10</ns>
    <id>1985</id>
    <revision>
      <id>60486</id>
      <parentid>55679</parentid>
      <timestamp>2013-06-01T06:48:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list operator ltltgtgt]] to [[Template:cpp/utility/bitset/dsc operator ltltgtgt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="162">{{dsc mem fun | cpp/utility/bitset/operator_ltltgtgt | title=operator&lt;&lt;=&lt;br&gt;operator&gt;&gt;=&lt;br&gt;operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs binary shift left and shift right}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc operator ltltgtgt2</title>
    <ns>10</ns>
    <id>9543</id>
    <revision>
      <id>72872</id>
      <parentid>60488</parentid>
      <timestamp>2014-10-03T14:03:29Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>dsc fun =&gt; dsc tfun</comment>
      <text xml:space="preserve" bytes="131">{{dsc tfun | cpp/utility/bitset/operator_ltltgtgt2 | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs stream input and output of bitsets}}</text>
      <sha1>mspgy7dlzlsd1vpimwm1q7uk2t4bj9z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc reset</title>
    <ns>10</ns>
    <id>40</id>
    <revision>
      <id>60490</id>
      <parentid>55687</parentid>
      <timestamp>2013-06-01T06:48:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list reset]] to [[Template:cpp/utility/bitset/dsc reset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">{{dsc mem fun | cpp/utility/bitset/reset | sets bits to {{c|false}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc set</title>
    <ns>10</ns>
    <id>41</id>
    <revision>
      <id>60492</id>
      <parentid>55690</parentid>
      <timestamp>2013-06-01T06:48:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list set]] to [[Template:cpp/utility/bitset/dsc set]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/utility/bitset/set | sets bits to {{c|true}} or given value}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc size</title>
    <ns>10</ns>
    <id>42</id>
    <revision>
      <id>60494</id>
      <parentid>55691</parentid>
      <timestamp>2013-06-01T06:48:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list size]] to [[Template:cpp/utility/bitset/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem fun | cpp/utility/bitset/size | returns the size number of bits that the bitset can hold}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc test</title>
    <ns>10</ns>
    <id>43</id>
    <revision>
      <id>60496</id>
      <parentid>55692</parentid>
      <timestamp>2013-06-01T06:49:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list test]] to [[Template:cpp/utility/bitset/dsc test]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">{{dsc mem fun | cpp/utility/bitset/test | accesses specific bit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc to string</title>
    <ns>10</ns>
    <id>44</id>
    <revision>
      <id>60498</id>
      <parentid>55693</parentid>
      <timestamp>2013-06-01T06:49:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list to string]] to [[Template:cpp/utility/bitset/dsc to string]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc mem fun | cpp/utility/bitset/to_string | returns a string representation of the data}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc to ullong</title>
    <ns>10</ns>
    <id>45</id>
    <revision>
      <id>60500</id>
      <parentid>55695</parentid>
      <timestamp>2013-06-01T06:49:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list to ullong]] to [[Template:cpp/utility/bitset/dsc to ullong]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc mem fun | cpp/utility/bitset/to_ullong | returns an {{c|unsigned long long}} integer representation of the data | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/dsc to ulong</title>
    <ns>10</ns>
    <id>46</id>
    <revision>
      <id>60502</id>
      <parentid>55699</parentid>
      <timestamp>2013-06-01T06:49:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/dcl list to ulong]] to [[Template:cpp/utility/bitset/dsc to ulong]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem fun | cpp/utility/bitset/to_ulong | returns an {{c|unsigned long}} integer representation of the data}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/navbar</title>
    <ns>10</ns>
    <id>47</id>
    <revision>
      <id>47768</id>
      <parentid>40047</parentid>
      <timestamp>2013-05-16T20:25:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/bitset/navbar heading
|content3 = cpp/utility/bitset/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/navbar content</title>
    <ns>10</ns>
    <id>48</id>
    <revision>
      <id>55701</id>
      <parentid>35974</parentid>
      <timestamp>2013-06-01T05:26:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1419">{{nv begin}}
{{nv h1 | Member types}}
{{nv mem ln | cpp/utility/bitset/reference}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/bitset/bitset}}
{{nv mem ln | cpp/utility/bitset/operator_cmp | operator{{==}} | operator!{{=}}}}
{{nv h2 | Element access}}
{{nv mem ln | cpp/utility/bitset/operator_at | operator[]}}
{{nv mem ln | cpp/utility/bitset/test}}
{{nv mem ln | cpp/utility/bitset/all_any_none|all|any|none|notes={{mark c++11}}&lt;br&gt;&lt;br&gt;&amp;nbsp;}}
{{nv mem ln | cpp/utility/bitset/count}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/utility/bitset/size}}
{{nv h2 | Modifiers}}
{{nv mem ln | cpp/utility/bitset/operator_logic | operator&amp;{{=}} | operator{{!}}{{=}} | operator^{{=}} | operator~}}
{{nv mem ln | cpp/utility/bitset/operator_ltltgtgt | operator&lt;&lt;{{=}} | operator&gt;&gt;{{=}} | operator&lt;&lt; | operator&gt;&gt;}}
{{nv mem ln | cpp/utility/bitset/set}}
{{nv mem ln | cpp/utility/bitset/reset}}
{{nv mem ln | cpp/utility/bitset/flip}}
{{nv h2 | Conversions}}
{{nv mem ln | cpp/utility/bitset/to_string}}
{{nv mem ln | cpp/utility/bitset/to_ulong}}
{{nv mem ln | cpp/utility/bitset/to_ullong | notes={{mark c++11}}}}
{{nv h2 | Non-member functions}}
{{nv ln | cpp/utility/bitset/operator_logic2 | operator&amp; | operator{{!}} | operator^}}
{{nv ln | cpp/utility/bitset/operator_ltltgtgt2 | operator&lt;&lt; | operator&gt;&gt;}}
{{nv h2 | Helper classes}}
{{nv ln | cpp/utility/bitset/hash | std::hash| notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/navbar heading</title>
    <ns>10</ns>
    <id>49</id>
    <revision>
      <id>47755</id>
      <parentid>34087</parentid>
      <timestamp>2013-05-16T20:22:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="38">{{ltt|cpp/utility/bitset|std::bitset}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/reference/dcl list operator bool</title>
    <ns>10</ns>
    <id>12420</id>
    <redirect title="Template:cpp/utility/bitset/reference/dsc operator bool" />
    <revision>
      <id>60505</id>
      <timestamp>2013-06-01T06:49:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/bitset/reference/dcl list operator bool]] to [[Template:cpp/utility/bitset/reference/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">#REDIRECT [[Template:cpp/utility/bitset/reference/dsc operator bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/reference/dsc operator bool</title>
    <ns>10</ns>
    <id>9931</id>
    <revision>
      <id>60504</id>
      <parentid>55703</parentid>
      <timestamp>2013-06-01T06:49:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/bitset/reference/dcl list operator bool]] to [[Template:cpp/utility/bitset/reference/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/utility/bitset/reference | title=operator bool | inlinemem=true | returns the referenced bit}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/reference/title</title>
    <ns>10</ns>
    <id>8573</id>
    <revision>
      <id>31734</id>
      <timestamp>2012-06-06T20:45:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">&lt;onlyinclude&gt;{{cpp/utility/bitset/title | n=reference::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/bitset/title</title>
    <ns>10</ns>
    <id>50</id>
    <revision>
      <id>99</id>
      <parentid>98</parentid>
      <timestamp>2011-06-06T22:42:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=bitset::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list bitset</title>
    <ns>10</ns>
    <id>12422</id>
    <redirect title="Template:cpp/utility/dsc bitset" />
    <revision>
      <id>60509</id>
      <timestamp>2013-06-01T06:49:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list bitset]] to [[Template:cpp/utility/dsc bitset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Template:cpp/utility/dsc bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list declval</title>
    <ns>10</ns>
    <id>12423</id>
    <redirect title="Template:cpp/utility/dsc declval" />
    <revision>
      <id>60511</id>
      <timestamp>2013-06-01T06:49:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list declval]] to [[Template:cpp/utility/dsc declval]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/utility/dsc declval]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list exchange</title>
    <ns>10</ns>
    <id>12424</id>
    <redirect title="Template:cpp/utility/dsc exchange" />
    <revision>
      <id>60513</id>
      <timestamp>2013-06-01T06:49:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list exchange]] to [[Template:cpp/utility/dsc exchange]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/utility/dsc exchange]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list forward</title>
    <ns>10</ns>
    <id>12425</id>
    <redirect title="Template:cpp/utility/dsc forward" />
    <revision>
      <id>60515</id>
      <timestamp>2013-06-01T06:49:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list forward]] to [[Template:cpp/utility/dsc forward]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/utility/dsc forward]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list hash</title>
    <ns>10</ns>
    <id>12426</id>
    <redirect title="Template:cpp/utility/dsc hash" />
    <revision>
      <id>60517</id>
      <timestamp>2013-06-01T06:49:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list hash]] to [[Template:cpp/utility/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/utility/dsc hash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list in place</title>
    <ns>10</ns>
    <id>12427</id>
    <redirect title="Template:cpp/utility/dsc in place" />
    <revision>
      <id>60519</id>
      <timestamp>2013-06-01T06:49:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list in place]] to [[Template:cpp/utility/dsc in place]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/utility/dsc in place]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list in place t</title>
    <ns>10</ns>
    <id>12428</id>
    <redirect title="Template:cpp/utility/dsc in place t" />
    <revision>
      <id>60521</id>
      <timestamp>2013-06-01T06:49:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list in place t]] to [[Template:cpp/utility/dsc in place t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/utility/dsc in place t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list initializer list</title>
    <ns>10</ns>
    <id>12429</id>
    <redirect title="Template:cpp/utility/dsc initializer list" />
    <revision>
      <id>60523</id>
      <timestamp>2013-06-01T06:49:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list initializer list]] to [[Template:cpp/utility/dsc initializer list]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/dsc initializer list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list integer sequence</title>
    <ns>10</ns>
    <id>12430</id>
    <redirect title="Template:cpp/utility/dsc integer sequence" />
    <revision>
      <id>60525</id>
      <timestamp>2013-06-01T06:49:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list integer sequence]] to [[Template:cpp/utility/dsc integer sequence]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/dsc integer sequence]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list move</title>
    <ns>10</ns>
    <id>12431</id>
    <redirect title="Template:cpp/utility/dsc move" />
    <revision>
      <id>60527</id>
      <timestamp>2013-06-01T06:49:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list move]] to [[Template:cpp/utility/dsc move]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/utility/dsc move]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list move if noexcept</title>
    <ns>10</ns>
    <id>12432</id>
    <redirect title="Template:cpp/utility/dsc move if noexcept" />
    <revision>
      <id>60529</id>
      <timestamp>2013-06-01T06:49:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list move if noexcept]] to [[Template:cpp/utility/dsc move if noexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/dsc move if noexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list nullopt</title>
    <ns>10</ns>
    <id>12433</id>
    <redirect title="Template:cpp/utility/dsc nullopt" />
    <revision>
      <id>60531</id>
      <timestamp>2013-06-01T06:49:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list nullopt]] to [[Template:cpp/utility/dsc nullopt]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[Template:cpp/utility/dsc nullopt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list nullopt t</title>
    <ns>10</ns>
    <id>12434</id>
    <redirect title="Template:cpp/utility/dsc nullopt t" />
    <revision>
      <id>60533</id>
      <timestamp>2013-06-01T06:49:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list nullopt t]] to [[Template:cpp/utility/dsc nullopt t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/utility/dsc nullopt t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list optional</title>
    <ns>10</ns>
    <id>12435</id>
    <redirect title="Template:cpp/utility/dsc optional" />
    <revision>
      <id>60535</id>
      <timestamp>2013-06-01T06:49:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list optional]] to [[Template:cpp/utility/dsc optional]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/utility/dsc optional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list pair</title>
    <ns>10</ns>
    <id>12436</id>
    <redirect title="Template:cpp/utility/dsc pair" />
    <revision>
      <id>60537</id>
      <timestamp>2013-06-01T06:49:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list pair]] to [[Template:cpp/utility/dsc pair]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Template:cpp/utility/dsc pair]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list piecewise construct</title>
    <ns>10</ns>
    <id>12437</id>
    <redirect title="Template:cpp/utility/dsc piecewise construct" />
    <revision>
      <id>60539</id>
      <timestamp>2013-06-01T06:49:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list piecewise construct]] to [[Template:cpp/utility/dsc piecewise construct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/dsc piecewise construct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list piecewise construct t</title>
    <ns>10</ns>
    <id>12438</id>
    <redirect title="Template:cpp/utility/dsc piecewise construct t" />
    <revision>
      <id>60541</id>
      <timestamp>2013-06-01T06:49:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list piecewise construct t]] to [[Template:cpp/utility/dsc piecewise construct t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/dsc piecewise construct t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dcl list tuple</title>
    <ns>10</ns>
    <id>12439</id>
    <redirect title="Template:cpp/utility/dsc tuple" />
    <revision>
      <id>60543</id>
      <timestamp>2013-06-01T06:49:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/dcl list tuple]] to [[Template:cpp/utility/dsc tuple]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[Template:cpp/utility/dsc tuple]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc any</title>
    <ns>10</ns>
    <id>15523</id>
    <revision>
      <id>85996</id>
      <parentid>85994</parentid>
      <timestamp>2016-06-09T22:39:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="134">{{dsc class | notes={{mark since c++17}} | cpp/utility/any | Objects that hold instances of any {{concept|CopyConstructible}} type. }}</text>
      <sha1>heozb0elkd9o3cbegrl9gnt2j6vrhzh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc apply</title>
    <ns>10</ns>
    <id>14799</id>
    <revision>
      <id>84016</id>
      <timestamp>2016-03-14T15:17:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc tfun | cpp/utility/apply | calls a function with a tuple of arguments | notes={{mark c++17}}}}</text>
      <sha1>01ouf1bxu6irigprfk3uyw8uz48uilo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc as const</title>
    <ns>10</ns>
    <id>14505</id>
    <revision>
      <id>81589</id>
      <parentid>81582</parentid>
      <timestamp>2015-10-28T04:27:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/types/utility</comment>
      <text xml:space="preserve" bytes="105">{{dsc tfun | cpp/utility/as_const | obtains a reference to const to its argument | notes={{mark c++17}}}}</text>
      <sha1>he2l6xmii7xe5c8k1zh0q1jusdmcqhx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc bad optional access</title>
    <ns>10</ns>
    <id>14816</id>
    <revision>
      <id>84077</id>
      <timestamp>2016-03-15T13:17:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="168">{{dsc class | cpp/utility/optional/bad_optional_access | exception indicating checked access to an optional that doesn't contain a value | notes={{mark since c++17}} }}</text>
      <sha1>pofk52tj4kvwbxz6vwgme2ozw71u855</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc bitset</title>
    <ns>10</ns>
    <id>2985</id>
    <revision>
      <id>60508</id>
      <parentid>55709</parentid>
      <timestamp>2013-06-01T06:49:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list bitset]] to [[Template:cpp/utility/dsc bitset]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">{{dsc class | cpp/utility/bitset | implements constant length bit array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc chars format</title>
    <ns>10</ns>
    <id>15732</id>
    <revision>
      <id>88774</id>
      <parentid>88261</parentid>
      <timestamp>2016-12-11T02:59:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/fun/enum</comment>
      <text xml:space="preserve" bytes="137">{{dsc enum | cpp/utility/chars_format | specifies formatting for {{lc|std::to_chars}} and {{lc|std::from_chars}} | notes={{mark c++17}}}}</text>
      <sha1>4zatj75nl7mvte01zklq8rjs6un5cdq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc declval</title>
    <ns>10</ns>
    <id>2667</id>
    <revision>
      <id>81586</id>
      <parentid>60510</parentid>
      <timestamp>2015-10-28T04:26:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reword to mention that it obtains a reference</comment>
      <text xml:space="preserve" bytes="125">{{dsc tfun | cpp/utility/declval | obtains a reference to its argument for use in unevaluated context| notes={{mark c++11}}}}</text>
      <sha1>96tyhrwffp7nu8d62gax1g5i420g6v6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc exchange</title>
    <ns>10</ns>
    <id>9983</id>
    <revision>
      <id>60512</id>
      <parentid>55718</parentid>
      <timestamp>2013-06-01T06:49:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list exchange]] to [[Template:cpp/utility/dsc exchange]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc tfun | cpp/utility/exchange | replaces the argument with a new value and returns its previous value | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc forward</title>
    <ns>10</ns>
    <id>2662</id>
    <revision>
      <id>60514</id>
      <parentid>55721</parentid>
      <timestamp>2013-06-01T06:49:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list forward]] to [[Template:cpp/utility/dsc forward]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc tfun | cpp/utility/forward | forwards a function argument | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc from chars</title>
    <ns>10</ns>
    <id>15730</id>
    <revision>
      <id>88257</id>
      <parentid>88256</parentid>
      <timestamp>2016-11-15T14:15:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/string/char sequence</comment>
      <text xml:space="preserve" bytes="129">{{dsc fun | cpp/utility/from_chars | converts a character sequence to an integer or floating-point value | notes={{mark c++17}}}}</text>
      <sha1>ddqkly8w9e95lo2tn43sxhn95oyhpjw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc hash</title>
    <ns>10</ns>
    <id>2982</id>
    <revision>
      <id>60516</id>
      <parentid>55723</parentid>
      <timestamp>2013-06-01T06:49:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list hash]] to [[Template:cpp/utility/dsc hash]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="80">{{dsc tclass | cpp/utility/hash | hash function object | notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc in place</title>
    <ns>10</ns>
    <id>14833</id>
    <revision>
      <id>88424</id>
      <parentid>88340</parentid>
      <timestamp>2016-11-18T05:00:35Z</timestamp>
      <contributor>
        <ip>223.3.187.195</ip>
      </contributor>
      <text xml:space="preserve" bytes="211">{{dsc tclass | cpp/utility/in_place | in-place construction tag | notes={{mark c++17}} | title=in_place &lt;br /&gt; in_place_type &lt;br /&gt; in_place_index &lt;br /&gt; in_place_t &lt;br/&gt;in_place_type_t &lt;br/&gt;in_place_index_t  }}</text>
      <sha1>ebhu6pvikuy3kt3yih23p2qy88w2b3d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc in place t</title>
    <ns>10</ns>
    <id>14449</id>
    <revision>
      <id>84075</id>
      <parentid>80567</parentid>
      <timestamp>2016-03-15T13:16:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="147">{{dsc class | cpp/utility/optional/in_place_t | disambiguation tag type for in-place construction of optional types | notes={{mark since c++17}} }}</text>
      <sha1>rzxn2oslsfgzyr7h8btqslur7cckjjv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc initializer list</title>
    <ns>10</ns>
    <id>2986</id>
    <revision>
      <id>73493</id>
      <parentid>60522</parentid>
      <timestamp>2014-11-02T13:26:35Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>wording</comment>
      <text xml:space="preserve" bytes="185">{{dsc tclass | cpp/utility/initializer_list | allows the use of [[cpp/language/list_initialization | initializer list syntax]] to initialize non-aggregate types | notes={{mark c++11}}}}</text>
      <sha1>jdmccy4fueb0f8fofh2ov2783xyhes8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc integer sequence</title>
    <ns>10</ns>
    <id>9981</id>
    <revision>
      <id>60524</id>
      <parentid>55733</parentid>
      <timestamp>2013-06-01T06:49:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list integer sequence]] to [[Template:cpp/utility/dsc integer sequence]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="115">{{dsc tclass | cpp/utility/integer_sequence | implements compile-time sequence of integers | notes={{mark c++14}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc launder</title>
    <ns>10</ns>
    <id>15684</id>
    <revision>
      <id>87289</id>
      <timestamp>2016-08-08T14:02:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="87">{{dsc tfun | cpp/utility/launder| pointer optimization barrier | notes={{mark c++17}}}}</text>
      <sha1>jz5hgk7rvkkh6wmy96ryq6ldjlpm8xu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc make from tuple</title>
    <ns>10</ns>
    <id>15553</id>
    <revision>
      <id>86520</id>
      <timestamp>2016-07-06T03:46:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">{{dsc tfun | cpp/utility/make_from_tuple | Construct an object with a tuple of arguments | notes={{mark c++17}}}}</text>
      <sha1>i1x9qijs1kriumwk3iolv7gce3sihem</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc move</title>
    <ns>10</ns>
    <id>2665</id>
    <revision>
      <id>60526</id>
      <parentid>55735</parentid>
      <timestamp>2013-06-01T06:49:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list move]] to [[Template:cpp/utility/dsc move]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="84">{{dsc tfun | cpp/utility/move | obtains an rvalue reference | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc move if noexcept</title>
    <ns>10</ns>
    <id>2663</id>
    <revision>
      <id>60528</id>
      <parentid>55739</parentid>
      <timestamp>2013-06-01T06:49:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list move if noexcept]] to [[Template:cpp/utility/dsc move if noexcept]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc tfun | cpp/utility/move_if_noexcept | obtains an rvalue reference if the move constructor does not throw | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc nullopt</title>
    <ns>10</ns>
    <id>13982</id>
    <redirect title="Template:cpp/utility/optional/dsc nullopt" />
    <revision>
      <id>84113</id>
      <parentid>84098</parentid>
      <timestamp>2016-03-15T13:48:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>de-duplicate</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT[[Template:cpp/utility/optional/dsc nullopt]]</text>
      <sha1>pyyh8l29rr9nqg8ycfp2x66v34ulbnx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc nullopt t</title>
    <ns>10</ns>
    <id>13981</id>
    <revision>
      <id>84076</id>
      <parentid>75955</parentid>
      <timestamp>2016-03-15T13:16:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">{{dsc class | cpp/utility/optional/nullopt_t | indicator of optional type with uninitialized state | notes={{mark since c++17}} }}</text>
      <sha1>1zzjwsn81mdz6pahxs5d54iuzvr6m0f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc optional</title>
    <ns>10</ns>
    <id>14450</id>
    <revision>
      <id>84074</id>
      <parentid>80571</parentid>
      <timestamp>2016-03-15T13:15:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc tclass | cpp/utility/optional | a wrapper that may or may not hold an object | notes={{mark since c++17}} }}</text>
      <sha1>4i922nel860i39vap0c02e67aud8i15</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc pair</title>
    <ns>10</ns>
    <id>2983</id>
    <revision>
      <id>60536</id>
      <parentid>55749</parentid>
      <timestamp>2013-06-01T06:49:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list pair]] to [[Template:cpp/utility/dsc pair]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="82">{{dsc tclass | cpp/utility/pair | implements binary tuple, i.e. a pair of values}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc piecewise construct</title>
    <ns>10</ns>
    <id>2628</id>
    <revision>
      <id>60538</id>
      <parentid>55753</parentid>
      <timestamp>2013-06-01T06:49:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list piecewise construct]] to [[Template:cpp/utility/dsc piecewise construct]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="177">{{dsc const | cpp/utility/piecewise_construct | an object of type {{tt|piecewise_construct_t}} used to disambiguate functions for piecewise construction | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc piecewise construct t</title>
    <ns>10</ns>
    <id>2651</id>
    <revision>
      <id>60540</id>
      <parentid>55755</parentid>
      <timestamp>2013-06-01T06:49:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list piecewise construct t]] to [[Template:cpp/utility/dsc piecewise construct t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="151">{{dsc class | cpp/utility/piecewise_construct_t | tag type used to select correct function overload for piecewise construction | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc to chars</title>
    <ns>10</ns>
    <id>15731</id>
    <revision>
      <id>88258</id>
      <timestamp>2016-11-15T14:15:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{dsc fun | cpp/utility/to_chars | converts an integer or floating-point value to a character sequence | notes={{mark c++17}}}}</text>
      <sha1>m0lnyb9ni19ljhqfpzdncivy14y2g2y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc tuple</title>
    <ns>10</ns>
    <id>2984</id>
    <revision>
      <id>60542</id>
      <parentid>55759</parentid>
      <timestamp>2013-06-01T06:49:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/dcl list tuple]] to [[Template:cpp/utility/dsc tuple]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="141">{{dsc tclass | cpp/utility/tuple | implements fixed size container, which holds elements of possibly different types | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/dsc variant</title>
    <ns>10</ns>
    <id>15582</id>
    <revision>
      <id>86606</id>
      <timestamp>2016-07-07T15:35:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="100">{{dsc tclass | cpp/utility/variant | a type-safe discriminated union | notes={{mark since c++17}} }}</text>
      <sha1>hcu0z43xf9tj6igqsa609ugsbs57irk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/example piecewise construct</title>
    <ns>10</ns>
    <id>3124</id>
    <revision>
      <id>23471</id>
      <parentid>20671</parentid>
      <timestamp>2012-04-20T02:27:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{example cpp&quot; to &quot;{{example&quot;</comment>
      <text xml:space="preserve" bytes="606">
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;tuple&gt;

struct Foo {
    Foo(std::tuple&lt;int, float&gt;) 
    {
        std::cout &lt;&lt; &quot;Constructed a Foo from a tuple\n&quot;;
    }
    Foo(int, float) 
    {
        std::cout &lt;&lt; &quot;Constructed a Foo from an int and a float\n&quot;;
    }
};

int main()
{
    std::tuple&lt;int, float&gt; t(1, 3.14);
    std::pair&lt;Foo, Foo&gt; p1(t, t);
    std::pair&lt;Foo, Foo&gt; p2(std::piecewise_construct, t, t);
}
 | output=
Constructed a Foo from a tuple
Constructed a Foo from a tuple
Constructed a Foo from an int and a float
Constructed a Foo from an int and a float
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/binary negate/dcl list operator()</title>
    <ns>10</ns>
    <id>12440</id>
    <redirect title="Template:cpp/utility/functional/binary negate/dsc operator()" />
    <revision>
      <id>60545</id>
      <timestamp>2013-06-01T06:49:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/binary negate/dcl list operator()]] to [[Template:cpp/utility/functional/binary negate/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">#REDIRECT [[Template:cpp/utility/functional/binary negate/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/binary negate/dsc operator()</title>
    <ns>10</ns>
    <id>8849</id>
    <revision>
      <id>60544</id>
      <parentid>55761</parentid>
      <timestamp>2013-06-01T06:49:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/binary negate/dcl list operator()]] to [[Template:cpp/utility/functional/binary negate/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="171">{{dsc mem fun | cpp/utility/functional/binary_negate | title=operator() | inlinemem=true | returns the logical complement of the result of a call to the stored predicate}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/binary negate/title</title>
    <ns>10</ns>
    <id>8570</id>
    <revision>
      <id>31731</id>
      <timestamp>2012-06-06T20:45:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=binary_negate::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit and/dcl list operator()</title>
    <ns>10</ns>
    <id>12441</id>
    <redirect title="Template:cpp/utility/functional/bit and/dsc operator()" />
    <revision>
      <id>60547</id>
      <timestamp>2013-06-01T06:49:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/bit and/dcl list operator()]] to [[Template:cpp/utility/functional/bit and/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">#REDIRECT [[Template:cpp/utility/functional/bit and/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit and/dsc operator()</title>
    <ns>10</ns>
    <id>8845</id>
    <revision>
      <id>60546</id>
      <parentid>55765</parentid>
      <timestamp>2013-06-01T06:49:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/bit and/dcl list operator()]] to [[Template:cpp/utility/functional/bit and/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc mem fun | cpp/utility/functional/bit_and | title=operator() | inlinemem=true | returns the result of bitwise AND of two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit and/title</title>
    <ns>10</ns>
    <id>8569</id>
    <revision>
      <id>31730</id>
      <timestamp>2012-06-06T20:45:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=bit_and::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit or/dcl list operator()</title>
    <ns>10</ns>
    <id>12442</id>
    <redirect title="Template:cpp/utility/functional/bit or/dsc operator()" />
    <revision>
      <id>60549</id>
      <timestamp>2013-06-01T06:49:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/bit or/dcl list operator()]] to [[Template:cpp/utility/functional/bit or/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">#REDIRECT [[Template:cpp/utility/functional/bit or/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit or/dsc operator()</title>
    <ns>10</ns>
    <id>8846</id>
    <revision>
      <id>60548</id>
      <parentid>55767</parentid>
      <timestamp>2013-06-01T06:49:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/bit or/dcl list operator()]] to [[Template:cpp/utility/functional/bit or/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem fun | cpp/utility/functional/bit_or | title=operator() | inlinemem=true | returns the result of bitwise OR of two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit or/title</title>
    <ns>10</ns>
    <id>8567</id>
    <revision>
      <id>31728</id>
      <timestamp>2012-06-06T20:44:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=bit_or::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit xor/dcl list operator()</title>
    <ns>10</ns>
    <id>12443</id>
    <redirect title="Template:cpp/utility/functional/bit xor/dsc operator()" />
    <revision>
      <id>60551</id>
      <timestamp>2013-06-01T06:49:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/bit xor/dcl list operator()]] to [[Template:cpp/utility/functional/bit xor/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">#REDIRECT [[Template:cpp/utility/functional/bit xor/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit xor/dsc operator()</title>
    <ns>10</ns>
    <id>8847</id>
    <revision>
      <id>60550</id>
      <parentid>55769</parentid>
      <timestamp>2013-06-01T06:49:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/bit xor/dcl list operator()]] to [[Template:cpp/utility/functional/bit xor/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc mem fun | cpp/utility/functional/bit_xor | title=operator() | inlinemem=true | returns the result of bitwise XOR of two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/bit xor/title</title>
    <ns>10</ns>
    <id>8564</id>
    <revision>
      <id>31725</id>
      <timestamp>2012-06-06T20:44:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=bit_xor::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list bad function call</title>
    <ns>10</ns>
    <id>12444</id>
    <redirect title="Template:cpp/utility/functional/dsc bad function call" />
    <revision>
      <id>60553</id>
      <timestamp>2013-06-01T06:49:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list bad function call]] to [[Template:cpp/utility/functional/dsc bad function call]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">#REDIRECT [[Template:cpp/utility/functional/dsc bad function call]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list binary function</title>
    <ns>10</ns>
    <id>12445</id>
    <redirect title="Template:cpp/utility/functional/dsc binary function" />
    <revision>
      <id>60555</id>
      <timestamp>2013-06-01T06:49:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list binary function]] to [[Template:cpp/utility/functional/dsc binary function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/utility/functional/dsc binary function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list binary negate</title>
    <ns>10</ns>
    <id>12446</id>
    <redirect title="Template:cpp/utility/functional/dsc binary negate" />
    <revision>
      <id>60557</id>
      <timestamp>2013-06-01T06:49:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list binary negate]] to [[Template:cpp/utility/functional/dsc binary negate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/utility/functional/dsc binary negate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list bind</title>
    <ns>10</ns>
    <id>12447</id>
    <redirect title="Template:cpp/utility/functional/dsc bind" />
    <revision>
      <id>60559</id>
      <timestamp>2013-06-01T06:49:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list bind]] to [[Template:cpp/utility/functional/dsc bind]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/functional/dsc bind]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list bind12</title>
    <ns>10</ns>
    <id>12448</id>
    <redirect title="Template:cpp/utility/functional/dsc bind12" />
    <revision>
      <id>60561</id>
      <timestamp>2013-06-01T06:49:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list bind12]] to [[Template:cpp/utility/functional/dsc bind12]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/functional/dsc bind12]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list binder12</title>
    <ns>10</ns>
    <id>12449</id>
    <redirect title="Template:cpp/utility/functional/dsc binder12" />
    <revision>
      <id>60563</id>
      <timestamp>2013-06-01T06:49:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list binder12]] to [[Template:cpp/utility/functional/dsc binder12]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/functional/dsc binder12]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list bit and</title>
    <ns>10</ns>
    <id>12450</id>
    <redirect title="Template:cpp/utility/functional/dsc bit and" />
    <revision>
      <id>60565</id>
      <timestamp>2013-06-01T06:49:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list bit and]] to [[Template:cpp/utility/functional/dsc bit and]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/functional/dsc bit and]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list bit or</title>
    <ns>10</ns>
    <id>12451</id>
    <redirect title="Template:cpp/utility/functional/dsc bit or" />
    <revision>
      <id>60567</id>
      <timestamp>2013-06-01T06:49:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list bit or]] to [[Template:cpp/utility/functional/dsc bit or]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/functional/dsc bit or]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list bit xor</title>
    <ns>10</ns>
    <id>12452</id>
    <redirect title="Template:cpp/utility/functional/dsc bit xor" />
    <revision>
      <id>60569</id>
      <timestamp>2013-06-01T06:49:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list bit xor]] to [[Template:cpp/utility/functional/dsc bit xor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/functional/dsc bit xor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list divides</title>
    <ns>10</ns>
    <id>12453</id>
    <redirect title="Template:cpp/utility/functional/dsc divides" />
    <revision>
      <id>60571</id>
      <timestamp>2013-06-01T06:49:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list divides]] to [[Template:cpp/utility/functional/dsc divides]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/functional/dsc divides]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list equal to</title>
    <ns>10</ns>
    <id>12454</id>
    <redirect title="Template:cpp/utility/functional/dsc equal to" />
    <revision>
      <id>60573</id>
      <timestamp>2013-06-01T06:49:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list equal to]] to [[Template:cpp/utility/functional/dsc equal to]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/functional/dsc equal to]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list function</title>
    <ns>10</ns>
    <id>12455</id>
    <redirect title="Template:cpp/utility/functional/dsc function" />
    <revision>
      <id>60575</id>
      <timestamp>2013-06-01T06:49:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list function]] to [[Template:cpp/utility/functional/dsc function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/functional/dsc function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list greater</title>
    <ns>10</ns>
    <id>12456</id>
    <redirect title="Template:cpp/utility/functional/dsc greater" />
    <revision>
      <id>60577</id>
      <timestamp>2013-06-01T06:50:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list greater]] to [[Template:cpp/utility/functional/dsc greater]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/functional/dsc greater]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list greater equal</title>
    <ns>10</ns>
    <id>12457</id>
    <redirect title="Template:cpp/utility/functional/dsc greater equal" />
    <revision>
      <id>60579</id>
      <timestamp>2013-06-01T06:50:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list greater equal]] to [[Template:cpp/utility/functional/dsc greater equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/utility/functional/dsc greater equal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list is bind expression</title>
    <ns>10</ns>
    <id>12458</id>
    <redirect title="Template:cpp/utility/functional/dsc is bind expression" />
    <revision>
      <id>60581</id>
      <timestamp>2013-06-01T06:50:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list is bind expression]] to [[Template:cpp/utility/functional/dsc is bind expression]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">#REDIRECT [[Template:cpp/utility/functional/dsc is bind expression]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list is placeholder</title>
    <ns>10</ns>
    <id>12459</id>
    <redirect title="Template:cpp/utility/functional/dsc is placeholder" />
    <revision>
      <id>60583</id>
      <timestamp>2013-06-01T06:50:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list is placeholder]] to [[Template:cpp/utility/functional/dsc is placeholder]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/utility/functional/dsc is placeholder]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list less</title>
    <ns>10</ns>
    <id>12460</id>
    <redirect title="Template:cpp/utility/functional/dsc less" />
    <revision>
      <id>60585</id>
      <timestamp>2013-06-01T06:50:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list less]] to [[Template:cpp/utility/functional/dsc less]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/functional/dsc less]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list less equal</title>
    <ns>10</ns>
    <id>12461</id>
    <redirect title="Template:cpp/utility/functional/dsc less equal" />
    <revision>
      <id>60587</id>
      <timestamp>2013-06-01T06:50:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list less equal]] to [[Template:cpp/utility/functional/dsc less equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/functional/dsc less equal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list logical and</title>
    <ns>10</ns>
    <id>12462</id>
    <redirect title="Template:cpp/utility/functional/dsc logical and" />
    <revision>
      <id>60589</id>
      <timestamp>2013-06-01T06:50:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list logical and]] to [[Template:cpp/utility/functional/dsc logical and]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/functional/dsc logical and]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list logical not</title>
    <ns>10</ns>
    <id>12463</id>
    <redirect title="Template:cpp/utility/functional/dsc logical not" />
    <revision>
      <id>60591</id>
      <timestamp>2013-06-01T06:50:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list logical not]] to [[Template:cpp/utility/functional/dsc logical not]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/functional/dsc logical not]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list logical or</title>
    <ns>10</ns>
    <id>12464</id>
    <redirect title="Template:cpp/utility/functional/dsc logical or" />
    <revision>
      <id>60593</id>
      <timestamp>2013-06-01T06:50:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list logical or]] to [[Template:cpp/utility/functional/dsc logical or]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/functional/dsc logical or]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list mem fn</title>
    <ns>10</ns>
    <id>12465</id>
    <redirect title="Template:cpp/utility/functional/dsc mem fn" />
    <revision>
      <id>60595</id>
      <timestamp>2013-06-01T06:50:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list mem fn]] to [[Template:cpp/utility/functional/dsc mem fn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/functional/dsc mem fn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list mem fun</title>
    <ns>10</ns>
    <id>12466</id>
    <redirect title="Template:cpp/utility/functional/dsc mem fun" />
    <revision>
      <id>60597</id>
      <timestamp>2013-06-01T06:50:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list mem fun]] to [[Template:cpp/utility/functional/dsc mem fun]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/functional/dsc mem fun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list mem fun ref</title>
    <ns>10</ns>
    <id>12467</id>
    <redirect title="Template:cpp/utility/functional/dsc mem fun ref" />
    <revision>
      <id>60599</id>
      <timestamp>2013-06-01T06:50:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list mem fun ref]] to [[Template:cpp/utility/functional/dsc mem fun ref]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/functional/dsc mem fun ref]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list mem fun ref t</title>
    <ns>10</ns>
    <id>12468</id>
    <redirect title="Template:cpp/utility/functional/dsc mem fun ref t" />
    <revision>
      <id>60601</id>
      <timestamp>2013-06-01T06:50:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list mem fun ref t]] to [[Template:cpp/utility/functional/dsc mem fun ref t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/utility/functional/dsc mem fun ref t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list mem fun t</title>
    <ns>10</ns>
    <id>12469</id>
    <redirect title="Template:cpp/utility/functional/dsc mem fun t" />
    <revision>
      <id>60603</id>
      <timestamp>2013-06-01T06:50:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list mem fun t]] to [[Template:cpp/utility/functional/dsc mem fun t]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/utility/functional/dsc mem fun t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list minus</title>
    <ns>10</ns>
    <id>12470</id>
    <redirect title="Template:cpp/utility/functional/dsc minus" />
    <revision>
      <id>60605</id>
      <timestamp>2013-06-01T06:50:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list minus]] to [[Template:cpp/utility/functional/dsc minus]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/functional/dsc minus]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list modulus</title>
    <ns>10</ns>
    <id>12471</id>
    <redirect title="Template:cpp/utility/functional/dsc modulus" />
    <revision>
      <id>60607</id>
      <timestamp>2013-06-01T06:50:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list modulus]] to [[Template:cpp/utility/functional/dsc modulus]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/functional/dsc modulus]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list multiplies</title>
    <ns>10</ns>
    <id>12472</id>
    <redirect title="Template:cpp/utility/functional/dsc multiplies" />
    <revision>
      <id>60609</id>
      <timestamp>2013-06-01T06:50:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list multiplies]] to [[Template:cpp/utility/functional/dsc multiplies]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/functional/dsc multiplies]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list negate</title>
    <ns>10</ns>
    <id>12473</id>
    <redirect title="Template:cpp/utility/functional/dsc negate" />
    <revision>
      <id>60611</id>
      <timestamp>2013-06-01T06:50:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list negate]] to [[Template:cpp/utility/functional/dsc negate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/functional/dsc negate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list not equal to</title>
    <ns>10</ns>
    <id>12476</id>
    <redirect title="Template:cpp/utility/functional/dsc not equal to" />
    <revision>
      <id>60617</id>
      <timestamp>2013-06-01T06:50:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list not equal to]] to [[Template:cpp/utility/functional/dsc not equal to]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/utility/functional/dsc not equal to]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list not1</title>
    <ns>10</ns>
    <id>12474</id>
    <redirect title="Template:cpp/utility/functional/dsc not1" />
    <revision>
      <id>60613</id>
      <timestamp>2013-06-01T06:50:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list not1]] to [[Template:cpp/utility/functional/dsc not1]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/functional/dsc not1]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list not2</title>
    <ns>10</ns>
    <id>12475</id>
    <redirect title="Template:cpp/utility/functional/dsc not2" />
    <revision>
      <id>60615</id>
      <timestamp>2013-06-01T06:50:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list not2]] to [[Template:cpp/utility/functional/dsc not2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/functional/dsc not2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list placeholders</title>
    <ns>10</ns>
    <id>12477</id>
    <redirect title="Template:cpp/utility/functional/dsc placeholders" />
    <revision>
      <id>60619</id>
      <timestamp>2013-06-01T06:50:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list placeholders]] to [[Template:cpp/utility/functional/dsc placeholders]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/utility/functional/dsc placeholders]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list plus</title>
    <ns>10</ns>
    <id>12478</id>
    <redirect title="Template:cpp/utility/functional/dsc plus" />
    <revision>
      <id>60621</id>
      <timestamp>2013-06-01T06:50:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list plus]] to [[Template:cpp/utility/functional/dsc plus]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/functional/dsc plus]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list pointer to binary function</title>
    <ns>10</ns>
    <id>12479</id>
    <redirect title="Template:cpp/utility/functional/dsc pointer to binary function" />
    <revision>
      <id>60623</id>
      <timestamp>2013-06-01T06:50:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list pointer to binary function]] to [[Template:cpp/utility/functional/dsc pointer to binary function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="76">#REDIRECT [[Template:cpp/utility/functional/dsc pointer to binary function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list pointer to unary function</title>
    <ns>10</ns>
    <id>12480</id>
    <redirect title="Template:cpp/utility/functional/dsc pointer to unary function" />
    <revision>
      <id>60625</id>
      <timestamp>2013-06-01T06:50:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list pointer to unary function]] to [[Template:cpp/utility/functional/dsc pointer to unary function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">#REDIRECT [[Template:cpp/utility/functional/dsc pointer to unary function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list ptr fun</title>
    <ns>10</ns>
    <id>12481</id>
    <redirect title="Template:cpp/utility/functional/dsc ptr fun" />
    <revision>
      <id>60627</id>
      <timestamp>2013-06-01T06:50:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list ptr fun]] to [[Template:cpp/utility/functional/dsc ptr fun]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/functional/dsc ptr fun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list ref</title>
    <ns>10</ns>
    <id>12482</id>
    <redirect title="Template:cpp/utility/functional/dsc ref" />
    <revision>
      <id>60629</id>
      <timestamp>2013-06-01T06:50:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list ref]] to [[Template:cpp/utility/functional/dsc ref]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/functional/dsc ref]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list reference wrapper</title>
    <ns>10</ns>
    <id>12483</id>
    <redirect title="Template:cpp/utility/functional/dsc reference wrapper" />
    <revision>
      <id>60631</id>
      <timestamp>2013-06-01T06:50:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list reference wrapper]] to [[Template:cpp/utility/functional/dsc reference wrapper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">#REDIRECT [[Template:cpp/utility/functional/dsc reference wrapper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list unary function</title>
    <ns>10</ns>
    <id>12484</id>
    <redirect title="Template:cpp/utility/functional/dsc unary function" />
    <revision>
      <id>60633</id>
      <timestamp>2013-06-01T06:50:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list unary function]] to [[Template:cpp/utility/functional/dsc unary function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/utility/functional/dsc unary function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dcl list unary negate</title>
    <ns>10</ns>
    <id>12485</id>
    <redirect title="Template:cpp/utility/functional/dsc unary negate" />
    <revision>
      <id>60635</id>
      <timestamp>2013-06-01T06:50:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/dcl list unary negate]] to [[Template:cpp/utility/functional/dsc unary negate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/utility/functional/dsc unary negate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/divides/dcl list operator()</title>
    <ns>10</ns>
    <id>12486</id>
    <redirect title="Template:cpp/utility/functional/divides/dsc operator()" />
    <revision>
      <id>60637</id>
      <timestamp>2013-06-01T06:50:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/divides/dcl list operator()]] to [[Template:cpp/utility/functional/divides/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">#REDIRECT [[Template:cpp/utility/functional/divides/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/divides/dsc operator()</title>
    <ns>10</ns>
    <id>8833</id>
    <revision>
      <id>60636</id>
      <parentid>55850</parentid>
      <timestamp>2013-06-01T06:50:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/divides/dcl list operator()]] to [[Template:cpp/utility/functional/divides/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="167">{{dsc mem fun | cpp/utility/functional/divides | title=operator() | inlinemem=true | returns the result of the division of the first argument by the second argument }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/divides/title</title>
    <ns>10</ns>
    <id>8561</id>
    <revision>
      <id>31722</id>
      <timestamp>2012-06-06T20:44:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=divides::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bad function call</title>
    <ns>10</ns>
    <id>4182</id>
    <revision>
      <id>60552</id>
      <parentid>55772</parentid>
      <timestamp>2013-06-01T06:49:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list bad function call]] to [[Template:cpp/utility/functional/dsc bad function call]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="146">{{dsc class | cpp/utility/functional/bad_function_call | the exception thrown when invoking an empty {{lc|std::function}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc binary function</title>
    <ns>10</ns>
    <id>5207</id>
    <revision>
      <id>73935</id>
      <parentid>60554</parentid>
      <timestamp>2014-11-24T20:15:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in 17</comment>
      <text xml:space="preserve" bytes="133">{{dsc tclass | cpp/utility/functional/binary_function | adaptor-compatible binary function base class  | notes={{mark until c++17}}}}</text>
      <sha1>kui2lxptmtwxqbtwxngax2jrt464wl4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc binary negate</title>
    <ns>10</ns>
    <id>4173</id>
    <revision>
      <id>85127</id>
      <parentid>60556</parentid>
      <timestamp>2016-04-03T18:34:49Z</timestamp>
      <contributor>
        <ip>221.178.200.20</ip>
      </contributor>
      <text xml:space="preserve" bytes="166">{{dsc tclass | cpp/utility/functional/binary_negate | wrapper function object returning the complement of the binary predicate it holds | notes={{mark deprecated}} }}</text>
      <sha1>nxqoe4vtu39s8pc1j0cqqkgwx6h2xwp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bind</title>
    <ns>10</ns>
    <id>4176</id>
    <revision>
      <id>60558</id>
      <parentid>55779</parentid>
      <timestamp>2013-06-01T06:49:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list bind]] to [[Template:cpp/utility/functional/dsc bind]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc tfun | cpp/utility/functional/bind | binds one or more arguments to a function object | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bind12</title>
    <ns>10</ns>
    <id>5479</id>
    <revision>
      <id>73947</id>
      <parentid>60560</parentid>
      <timestamp>2014-11-24T20:26:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="166">{{dsc tfun | cpp/utility/functional/bind12 | title=bind1st&lt;br&gt;bind2nd | binds one argument to a binary function | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}}}}</text>
      <sha1>g8ormylyr2rgzciwaat0fgxombv9l6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc binder12</title>
    <ns>10</ns>
    <id>5478</id>
    <revision>
      <id>73946</id>
      <parentid>60562</parentid>
      <timestamp>2014-11-24T20:26:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="201">{{dsc tclass | cpp/utility/functional/binder12 | title=binder1st&lt;br&gt;binder2nd | function object holding a binary function and one of its arguments | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}}}}</text>
      <sha1>47f6oz0fati0rf5kx3j734x8yvwt3n9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit and</title>
    <ns>10</ns>
    <id>4201</id>
    <revision>
      <id>60564</id>
      <parentid>55786</parentid>
      <timestamp>2013-06-01T06:49:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list bit and]] to [[Template:cpp/utility/functional/dsc bit and]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tclass | cpp/utility/functional/bit_and | function object implementing {{c|x &amp; y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit and void</title>
    <ns>10</ns>
    <id>13074</id>
    <revision>
      <id>66292</id>
      <timestamp>2013-11-10T02:04:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc ptclass | cpp/utility/functional/bit_and_void | title=bit_and{{dsc small|&lt;void&gt;}} | function object implementing {{c|x &amp; y}} deducing argument and return types}}</text>
      <sha1>rpmya7x7jbt5rz6wriyr9rkv31ht0ly</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit not</title>
    <ns>10</ns>
    <id>12899</id>
    <revision>
      <id>64479</id>
      <timestamp>2013-08-18T02:57:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc tclass | notes={{mark c++14}} | cpp/utility/functional/bit_not | function object implementing {{c|~x}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit not void</title>
    <ns>10</ns>
    <id>13077</id>
    <revision>
      <id>66299</id>
      <timestamp>2013-11-10T02:11:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="164">{{dsc ptclass | cpp/utility/functional/bit_not_void | title=bit_not{{dsc small|&lt;void&gt;}} | function object implementing {{c|~x}} deducing argument and return types}}</text>
      <sha1>i43u7rlvv8imlsvvsm0zxiu1satb4n5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit or</title>
    <ns>10</ns>
    <id>4202</id>
    <revision>
      <id>60566</id>
      <parentid>55787</parentid>
      <timestamp>2013-06-01T06:49:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list bit or]] to [[Template:cpp/utility/functional/dsc bit or]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc tclass | cpp/utility/functional/bit_or | function object implementing {{c|x {{!}} y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit or void</title>
    <ns>10</ns>
    <id>13075</id>
    <revision>
      <id>66295</id>
      <parentid>66294</parentid>
      <timestamp>2013-11-10T02:06:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste error</comment>
      <text xml:space="preserve" bytes="169">{{dsc ptclass | cpp/utility/functional/bit_or_void | title=bit_or{{dsc small|&lt;void&gt;}} | function object implementing {{c|x {{!}} y}} deducing argument and return types}}</text>
      <sha1>098ml1odz2gpg9g9v6mze1metem131l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit xor</title>
    <ns>10</ns>
    <id>4203</id>
    <revision>
      <id>60568</id>
      <parentid>55788</parentid>
      <timestamp>2013-06-01T06:49:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list bit xor]] to [[Template:cpp/utility/functional/dsc bit xor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tclass | cpp/utility/functional/bit_xor | function object implementing {{c|x ^ y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc bit xor void</title>
    <ns>10</ns>
    <id>13076</id>
    <revision>
      <id>66297</id>
      <timestamp>2013-11-10T02:08:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc ptclass | cpp/utility/functional/bit_xor_void | title=bit_xor{{dsc small|&lt;void&gt;}} | function object implementing {{c|x ^ y}} deducing argument and return types}}</text>
      <sha1>kwblg9a826ua18c7dk1kne1z9zcxawx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc boyer moore horspool searcher</title>
    <ns>10</ns>
    <id>14995</id>
    <revision>
      <id>84382</id>
      <parentid>84373</parentid>
      <timestamp>2016-03-17T20:49:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move to functional</comment>
      <text xml:space="preserve" bytes="145">{{dsc tclass | cpp/utility/functional/boyer_moore_horspool_searcher | Boyer-Moore-Horspool search algorithm implementation|notes={{mark c++17}}}}</text>
      <sha1>brfq0fg2afxbkjgsb9ej3gmdljxsbd7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc boyer moore searcher</title>
    <ns>10</ns>
    <id>14993</id>
    <revision>
      <id>84380</id>
      <parentid>84369</parentid>
      <timestamp>2016-03-17T20:49:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move to functional</comment>
      <text xml:space="preserve" bytes="127">{{dsc tclass | cpp/utility/functional/boyer_moore_searcher | Boyer-Moore search algorithm implementation|notes={{mark c++17}}}}</text>
      <sha1>e2ou6rppmwgb5p255mqcactsenlvi9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc default searcher</title>
    <ns>10</ns>
    <id>14991</id>
    <revision>
      <id>84378</id>
      <parentid>84367</parentid>
      <timestamp>2016-03-17T20:49:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move to /functional/</comment>
      <text xml:space="preserve" bytes="133">{{dsc tclass | cpp/utility/functional/default_searcher | standard C++ library search algorithm implementation|notes={{mark c++17}} }}</text>
      <sha1>04bno9a8el5st9x0s4sa6qqoo2v7fe3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc divides</title>
    <ns>10</ns>
    <id>4189</id>
    <revision>
      <id>60570</id>
      <parentid>55789</parentid>
      <timestamp>2013-06-01T06:49:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list divides]] to [[Template:cpp/utility/functional/dsc divides]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tclass | cpp/utility/functional/divides | function object implementing {{c|x / y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc divides void</title>
    <ns>10</ns>
    <id>13047</id>
    <revision>
      <id>66226</id>
      <timestamp>2013-11-10T00:12:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc ptclass | cpp/utility/functional/divides_void | title=divides{{dsc small|&lt;void&gt;}} | function object implementing {{c|x / y}} deducing argument and return types}}</text>
      <sha1>f4x2x31zno6wetgjb1juw132wf815od</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc equal to</title>
    <ns>10</ns>
    <id>4192</id>
    <revision>
      <id>60572</id>
      <parentid>55792</parentid>
      <timestamp>2013-06-01T06:49:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list equal to]] to [[Template:cpp/utility/functional/dsc equal to]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc tclass | cpp/utility/functional/equal_to | function object implementing {{c|1=x == y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc equal to void</title>
    <ns>10</ns>
    <id>13055</id>
    <revision>
      <id>66239</id>
      <timestamp>2013-11-10T00:45:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="174">{{dsc ptclass | cpp/utility/functional/equal_to_void | title=equal_to{{dsc small|&lt;void&gt;}} | function object implementing {{c|x {{==}} y}} deducing argument and return types}}</text>
      <sha1>snt53735tasar7pdt4vaqeqh6uvqctx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc function</title>
    <ns>10</ns>
    <id>4181</id>
    <revision>
      <id>60574</id>
      <parentid>55793</parentid>
      <timestamp>2013-06-01T06:49:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list function]] to [[Template:cpp/utility/functional/dsc function]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="146">{{dsc tclass | cpp/utility/functional/function | wraps callable object of any type with specified function call signature | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc greater</title>
    <ns>10</ns>
    <id>4194</id>
    <revision>
      <id>60576</id>
      <parentid>55796</parentid>
      <timestamp>2013-06-01T06:50:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list greater]] to [[Template:cpp/utility/functional/dsc greater]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tclass | cpp/utility/functional/greater | function object implementing {{c|x &gt; y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc greater equal</title>
    <ns>10</ns>
    <id>4196</id>
    <revision>
      <id>60578</id>
      <parentid>55799</parentid>
      <timestamp>2013-06-01T06:50:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list greater equal]] to [[Template:cpp/utility/functional/dsc greater equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc tclass | cpp/utility/functional/greater_equal | function object implementing {{c|1=x &gt;= y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc greater equal void</title>
    <ns>10</ns>
    <id>13059</id>
    <revision>
      <id>66257</id>
      <parentid>66256</parentid>
      <timestamp>2013-11-10T01:04:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>=</comment>
      <text xml:space="preserve" bytes="184">{{dsc ptclass | cpp/utility/functional/greater_equal_void | title=greater_equal{{dsc small|&lt;void&gt;}} | function object implementing {{c|x &gt;{{=}} y}} deducing argument and return types}}</text>
      <sha1>i7iqbjuue5v3k9zlbocpq213fg7zvfu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc greater void</title>
    <ns>10</ns>
    <id>13057</id>
    <revision>
      <id>66251</id>
      <timestamp>2013-11-10T00:59:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc ptclass | cpp/utility/functional/greater_void | title=greater{{dsc small|&lt;void&gt;}} | function object implementing {{c|x &gt; y}} deducing argument and return types}}</text>
      <sha1>slu1l8iruxdyy888v0rjx7kgfg0dphf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc invoke</title>
    <ns>10</ns>
    <id>13868</id>
    <revision>
      <id>75417</id>
      <parentid>74733</parentid>
      <timestamp>2015-01-17T06:41:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="130">{{dsc tfun | cpp/utility/functional/invoke | invokes any {{concept|Callable}} object with given arguments | notes={{mark c++17}}}}</text>
      <sha1>551we1go98l1iwre3anzluzkq2v8lxc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc is bind expression</title>
    <ns>10</ns>
    <id>4177</id>
    <revision>
      <id>60580</id>
      <parentid>55800</parentid>
      <timestamp>2013-06-01T06:50:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list is bind expression]] to [[Template:cpp/utility/functional/dsc is bind expression]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc tclass | cpp/utility/functional/is_bind_expression | indicates that an object is {{tt|std::bind}} expression or can be used as one | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc is placeholder</title>
    <ns>10</ns>
    <id>4178</id>
    <revision>
      <id>60582</id>
      <parentid>55803</parentid>
      <timestamp>2013-06-01T06:50:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list is placeholder]] to [[Template:cpp/utility/functional/dsc is placeholder]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc tclass | cpp/utility/functional/is_placeholder | indicates that an object is a standard placeholder or can be used as one | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc less</title>
    <ns>10</ns>
    <id>4195</id>
    <revision>
      <id>60584</id>
      <parentid>55806</parentid>
      <timestamp>2013-06-01T06:50:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list less]] to [[Template:cpp/utility/functional/dsc less]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc tclass | cpp/utility/functional/less | function object implementing {{c|x &lt; y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc less equal</title>
    <ns>10</ns>
    <id>4197</id>
    <revision>
      <id>60586</id>
      <parentid>55807</parentid>
      <timestamp>2013-06-01T06:50:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list less equal]] to [[Template:cpp/utility/functional/dsc less equal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc tclass | cpp/utility/functional/less_equal | function object implementing {{c|1=x &lt;= y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc less equal void</title>
    <ns>10</ns>
    <id>13060</id>
    <revision>
      <id>66260</id>
      <timestamp>2013-11-10T01:09:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="178">{{dsc ptclass | cpp/utility/functional/less_equal_void | title=less_equal{{dsc small|&lt;void&gt;}} | function object implementing {{c|x &lt;{{=}} y}} deducing argument and return types}}</text>
      <sha1>3hbsz35rc3k6j0e04xp896ti28zqmd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc less void</title>
    <ns>10</ns>
    <id>13058</id>
    <revision>
      <id>66254</id>
      <timestamp>2013-11-10T01:02:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">{{dsc ptclass | cpp/utility/functional/less_void | title=less{{dsc small|&lt;void&gt;}} | function object implementing {{c|x &lt; y}} deducing argument and return types}}</text>
      <sha1>foipmec69cvvkdk8brpscyyd60o351r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc logical and</title>
    <ns>10</ns>
    <id>4198</id>
    <revision>
      <id>60588</id>
      <parentid>55808</parentid>
      <timestamp>2013-06-01T06:50:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list logical and]] to [[Template:cpp/utility/functional/dsc logical and]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="96">{{dsc tclass | cpp/utility/functional/logical_and | function object implementing {{c|x &amp;&amp; y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc logical and void</title>
    <ns>10</ns>
    <id>13068</id>
    <revision>
      <id>66283</id>
      <timestamp>2013-11-10T01:50:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="176">{{dsc ptclass | cpp/utility/functional/logical_and_void | title=logical_and{{dsc small|&lt;void&gt;}} | function object implementing {{c|x &amp;&amp; y}} deducing argument and return types}}</text>
      <sha1>smimej7ikfcir9jed33lbt80erh4pn2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc logical not</title>
    <ns>10</ns>
    <id>4200</id>
    <revision>
      <id>60590</id>
      <parentid>55809</parentid>
      <timestamp>2013-06-01T06:50:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list logical not]] to [[Template:cpp/utility/functional/dsc logical not]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="92">{{dsc tclass | cpp/utility/functional/logical_not | function object implementing {{c|!x}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc logical not void</title>
    <ns>10</ns>
    <id>13070</id>
    <revision>
      <id>66287</id>
      <timestamp>2013-11-10T01:55:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="172">{{dsc ptclass | cpp/utility/functional/logical_not_void | title=logical_not{{dsc small|&lt;void&gt;}} | function object implementing {{c|!x}} deducing argument and return types}}</text>
      <sha1>esxh720dnbejyyjbjaj09vl4j7eq1tr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc logical or</title>
    <ns>10</ns>
    <id>4199</id>
    <revision>
      <id>60592</id>
      <parentid>55812</parentid>
      <timestamp>2013-06-01T06:50:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list logical or]] to [[Template:cpp/utility/functional/dsc logical or]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="103">{{dsc tclass | cpp/utility/functional/logical_or | function object implementing {{c|x {{!}}{{!}} y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc logical or void</title>
    <ns>10</ns>
    <id>13069</id>
    <revision>
      <id>66285</id>
      <timestamp>2013-11-10T01:52:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="178">{{dsc ptclass | cpp/utility/functional/logical_or_void | title=logical_or{{dsc small|&lt;void&gt;}} | function object implementing {{c|x {{!!}} y}} deducing argument and return types}}</text>
      <sha1>hu6kovs1optt63d6mx6u69n9zgr8jiz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc mem fn</title>
    <ns>10</ns>
    <id>4180</id>
    <revision>
      <id>60594</id>
      <parentid>55813</parentid>
      <timestamp>2013-06-01T06:50:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list mem fn]] to [[Template:cpp/utility/functional/dsc mem fn]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="124">{{dsc tfun | cpp/utility/functional/mem_fn | creates a function object out of a pointer to a member | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc mem fun</title>
    <ns>10</ns>
    <id>5216</id>
    <revision>
      <id>73952</id>
      <parentid>60596</parentid>
      <timestamp>2014-11-24T20:29:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="163">{{dsc tfun | cpp/utility/functional/mem_fun | creates a wrapper from a pointer to member function, callable with a pointer to object| notes={{mark until c++17}} }}</text>
      <sha1>ig4zt2k65874e7yv66o8d7sw2czqrpi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc mem fun ref</title>
    <ns>10</ns>
    <id>5218</id>
    <revision>
      <id>73954</id>
      <parentid>60598</parentid>
      <timestamp>2014-11-24T20:29:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="169">{{dsc tfun | cpp/utility/functional/mem_fun_ref | creates a wrapper from a pointer to member function, callable with a reference to object| notes={{mark until c++17}} }}</text>
      <sha1>0aw1dmh7lz1k8oyze5a0w13ck0ts0uj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc mem fun ref t</title>
    <ns>10</ns>
    <id>5217</id>
    <revision>
      <id>80871</id>
      <parentid>73953</parentid>
      <timestamp>2015-09-13T07:23:24Z</timestamp>
      <contributor>
        <ip>75.149.50.14</ip>
      </contributor>
      <text xml:space="preserve" bytes="339">{{dsc tclass | cpp/utility/functional/mem_fun_ref_t | title=mem_fun_ref_t&lt;br&gt;mem_fun1_ref_t&lt;br&gt;const_mem_fun_ref_t&lt;br&gt;const_mem_fun1_ref_t | wrapper for a pointer to nullary or unary member function, callable with a reference to object | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}} }}</text>
      <sha1>kkt52u59osuiy782wjpzgd2e5xvwpmw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc mem fun t</title>
    <ns>10</ns>
    <id>5215</id>
    <revision>
      <id>73951</id>
      <parentid>63175</parentid>
      <timestamp>2014-11-24T20:28:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="317">{{dsc tclass | cpp/utility/functional/mem_fun_t | title=mem_fun_t&lt;br&gt;mem_fun1_t&lt;br&gt;const_mem_fun_t&lt;br&gt;const_mem_fun1_t | wrapper for a pointer to nullary or unary member function, callable with a pointer to object | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}} }}</text>
      <sha1>9akgtgxwlb0pqdebh6q0elqb8vhvu3s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc minus</title>
    <ns>10</ns>
    <id>4187</id>
    <revision>
      <id>60604</id>
      <parentid>55822</parentid>
      <timestamp>2013-06-01T06:50:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list minus]] to [[Template:cpp/utility/functional/dsc minus]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="89">{{dsc tclass | cpp/utility/functional/minus | function object implementing {{c|x - y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc minus void</title>
    <ns>10</ns>
    <id>13045</id>
    <revision>
      <id>66222</id>
      <timestamp>2013-11-10T00:07:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="163">{{dsc ptclass | cpp/utility/functional/minus_void | title=minus{{dsc small|&lt;void&gt;}} | function object implementing {{c|x - y}} deducing argument and return types}}</text>
      <sha1>0u4sdq4p0d2stpr445t9z1adeknwkiu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc modulus</title>
    <ns>10</ns>
    <id>4190</id>
    <revision>
      <id>60606</id>
      <parentid>55823</parentid>
      <timestamp>2013-06-01T06:50:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list modulus]] to [[Template:cpp/utility/functional/dsc modulus]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc tclass | cpp/utility/functional/modulus | function object implementing {{c|x % y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc modulus void</title>
    <ns>10</ns>
    <id>13048</id>
    <revision>
      <id>66228</id>
      <timestamp>2013-11-10T00:14:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc ptclass | cpp/utility/functional/modulus_void | title=modulus{{dsc small|&lt;void&gt;}} | function object implementing {{c|x % y}} deducing argument and return types}}</text>
      <sha1>npwgmqo784f752b4sdbhch241qhqjwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc multiplies</title>
    <ns>10</ns>
    <id>4188</id>
    <revision>
      <id>60608</id>
      <parentid>55824</parentid>
      <timestamp>2013-06-01T06:50:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list multiplies]] to [[Template:cpp/utility/functional/dsc multiplies]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc tclass | cpp/utility/functional/multiplies | function object implementing {{c|x * y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc multiplies void</title>
    <ns>10</ns>
    <id>13046</id>
    <revision>
      <id>66224</id>
      <timestamp>2013-11-10T00:10:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="173">{{dsc ptclass | cpp/utility/functional/multiplies_void | title=multiplies{{dsc small|&lt;void&gt;}} | function object implementing {{c|x * y}} deducing argument and return types}}</text>
      <sha1>g82lrw6smawcsddk41bkl47qxegyqk9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc negate</title>
    <ns>10</ns>
    <id>4191</id>
    <revision>
      <id>60610</id>
      <parentid>55827</parentid>
      <timestamp>2013-06-01T06:50:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list negate]] to [[Template:cpp/utility/functional/dsc negate]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc tclass | cpp/utility/functional/negate | function object implementing {{c|-x}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc negate void</title>
    <ns>10</ns>
    <id>13049</id>
    <revision>
      <id>66231</id>
      <timestamp>2013-11-10T00:16:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="162">{{dsc ptclass | cpp/utility/functional/negate_void | title=negate{{dsc small|&lt;void&gt;}} | function object implementing {{c|-x}} deducing argument and return types}}</text>
      <sha1>jxj38v1m5rf13j9wnmwaoa4u221jqz3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc not equal to</title>
    <ns>10</ns>
    <id>4193</id>
    <revision>
      <id>60616</id>
      <parentid>55832</parentid>
      <timestamp>2013-06-01T06:50:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list not equal to]] to [[Template:cpp/utility/functional/dsc not equal to]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc tclass | cpp/utility/functional/not_equal_to | function object implementing {{c|1=x != y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc not equal to void</title>
    <ns>10</ns>
    <id>13056</id>
    <revision>
      <id>66249</id>
      <timestamp>2013-11-10T00:55:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="182">{{dsc ptclass | cpp/utility/functional/not_equal_to_void | title=not_equal_to{{dsc small|&lt;void&gt;}} | function object implementing {{c|x !{{=}} y}} deducing argument and return types}}</text>
      <sha1>42mjwjz40gb0h2qxel1ya2ilic7pvno</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc not fn</title>
    <ns>10</ns>
    <id>14748</id>
    <revision>
      <id>83676</id>
      <timestamp>2016-03-07T14:07:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="167">{{dsc tfun | cpp/utility/functional/not_fn | Creates a function object that returns the complement of the result of the function object it holds|notes={{mark c++17}}}}</text>
      <sha1>b7l9qfl1iamw7do70peca53oyx03qa2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc not1</title>
    <ns>10</ns>
    <id>4174</id>
    <revision>
      <id>85125</id>
      <parentid>60612</parentid>
      <timestamp>2016-04-03T18:32:49Z</timestamp>
      <contributor>
        <ip>221.178.200.20</ip>
      </contributor>
      <text xml:space="preserve" bytes="122">{{dsc tfun | cpp/utility/functional/not1 | constructs custom {{lc|std::unary_negate}} object | notes={{mark deprecated}}}}</text>
      <sha1>a6tpwcr7kntszuzeug5wx53lp8h211w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc not2</title>
    <ns>10</ns>
    <id>4175</id>
    <revision>
      <id>85124</id>
      <parentid>60614</parentid>
      <timestamp>2016-04-03T18:31:52Z</timestamp>
      <contributor>
        <ip>221.178.200.20</ip>
      </contributor>
      <text xml:space="preserve" bytes="123">{{dsc tfun | cpp/utility/functional/not2 | constructs custom {{lc|std::binary_negate}} object | notes={{mark deprecated}}}}</text>
      <sha1>l2nspgb7uwm560ouxfue85n0cygq0nx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc placeholders</title>
    <ns>10</ns>
    <id>4179</id>
    <revision>
      <id>60618</id>
      <parentid>55833</parentid>
      <timestamp>2013-06-01T06:50:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list placeholders]] to [[Template:cpp/utility/functional/dsc placeholders]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="175">{{dsc const | cpp/utility/functional/placeholders | title=_1, _2, _3, _4, ... |placeholders for the unbound arguments in a {{tt|std::bind}} expression | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc plus</title>
    <ns>10</ns>
    <id>4186</id>
    <revision>
      <id>60620</id>
      <parentid>55834</parentid>
      <timestamp>2013-06-01T06:50:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list plus]] to [[Template:cpp/utility/functional/dsc plus]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc tclass | cpp/utility/functional/plus | function object implementing {{c|x + y}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc plus void</title>
    <ns>10</ns>
    <id>12878</id>
    <revision>
      <id>64076</id>
      <timestamp>2013-08-08T12:44:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">{{dsc ptclass | cpp/utility/functional/plus_void | title=plus{{dsc small|&lt;void&gt;}} | function object implementing {{c|x + y}} deducing argument and return types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc pointer to binary function</title>
    <ns>10</ns>
    <id>5214</id>
    <revision>
      <id>73949</id>
      <parentid>60622</parentid>
      <timestamp>2014-11-24T20:27:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="158">{{dsc tclass | cpp/utility/functional/pointer_to_binary_function | adaptor-compatible wrapper for a pointer to binary function | notes={{mark until c++17}} }}</text>
      <sha1>oz81il48hd0gxuhef46olzn5kdogd6j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc pointer to unary function</title>
    <ns>10</ns>
    <id>5213</id>
    <revision>
      <id>73948</id>
      <parentid>60624</parentid>
      <timestamp>2014-11-24T20:27:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="156">{{dsc tclass | cpp/utility/functional/pointer_to_unary_function | adaptor-compatible wrapper for a pointer to unary function | notes={{mark until c++17}} }}</text>
      <sha1>4yj668iq63469479vx0hd15ynouyr0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc ptr fun</title>
    <ns>10</ns>
    <id>5206</id>
    <revision>
      <id>73950</id>
      <parentid>60626</parentid>
      <timestamp>2014-11-24T20:28:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="158">{{dsc tfun | cpp/utility/functional/ptr_fun | creates an adaptor-compatible function object wrapper from a pointer to function | notes={{mark until c++17}} }}</text>
      <sha1>fx8uvb9rqd7tj70giyicomiv4610v5l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc ref</title>
    <ns>10</ns>
    <id>4184</id>
    <revision>
      <id>60628</id>
      <parentid>55842</parentid>
      <timestamp>2013-06-01T06:50:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list ref]] to [[Template:cpp/utility/functional/dsc ref]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="183">{{dsc tfun  | cpp/utility/functional/ref | title=ref&lt;br&gt;cref | creates a {{lc|std::reference_wrapper}} with a type deduced from its argument | notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc reference wrapper</title>
    <ns>10</ns>
    <id>4183</id>
    <revision>
      <id>60630</id>
      <parentid>55843</parentid>
      <timestamp>2013-06-01T06:50:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/dcl list reference wrapper]] to [[Template:cpp/utility/functional/dsc reference wrapper]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc tclass | cpp/utility/functional/reference_wrapper | {{concept|CopyConstructible}} and {{concept|CopyAssignable}} reference wrapper | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc unary function</title>
    <ns>10</ns>
    <id>5208</id>
    <revision>
      <id>73934</id>
      <parentid>60632</parentid>
      <timestamp>2014-11-24T20:15:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>gone in 17</comment>
      <text xml:space="preserve" bytes="130">{{dsc tclass | cpp/utility/functional/unary_function | adaptor-compatible unary function base class | notes={{mark until c++17}}}}</text>
      <sha1>r9q6jvtlvokp2y95ufd8blz1mr1z9bw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/dsc unary negate</title>
    <ns>10</ns>
    <id>4172</id>
    <revision>
      <id>85126</id>
      <parentid>60634</parentid>
      <timestamp>2016-04-03T18:33:57Z</timestamp>
      <contributor>
        <ip>221.178.200.20</ip>
      </contributor>
      <text xml:space="preserve" bytes="163">{{dsc tclass | cpp/utility/functional/unary_negate | wrapper function object returning the complement of the unary predicate it holds | notes={{mark deprecated}}}}</text>
      <sha1>f5ijfslftxg6g6jcq0h7ss8827w3m2j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/equal to/dcl list operator()</title>
    <ns>10</ns>
    <id>12487</id>
    <redirect title="Template:cpp/utility/functional/equal to/dsc operator()" />
    <revision>
      <id>60639</id>
      <timestamp>2013-06-01T06:50:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/equal to/dcl list operator()]] to [[Template:cpp/utility/functional/equal to/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">#REDIRECT [[Template:cpp/utility/functional/equal to/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/equal to/dsc operator()</title>
    <ns>10</ns>
    <id>8836</id>
    <revision>
      <id>60638</id>
      <parentid>55851</parentid>
      <timestamp>2013-06-01T06:50:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/equal to/dcl list operator()]] to [[Template:cpp/utility/functional/equal to/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/utility/functional/equal_to | title=operator() | inlinemem=true | checks if the arguments are equal}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/equal to/title</title>
    <ns>10</ns>
    <id>8556</id>
    <revision>
      <id>31716</id>
      <timestamp>2012-06-06T20:41:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=equal_to::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list assign</title>
    <ns>10</ns>
    <id>12488</id>
    <redirect title="Template:cpp/utility/functional/function/dsc assign" />
    <revision>
      <id>60641</id>
      <timestamp>2013-06-01T06:50:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list assign]] to [[Template:cpp/utility/functional/function/dsc assign]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/utility/functional/function/dsc assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list constructor</title>
    <ns>10</ns>
    <id>12489</id>
    <redirect title="Template:cpp/utility/functional/function/dsc constructor" />
    <revision>
      <id>60643</id>
      <timestamp>2013-06-01T06:50:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list constructor]] to [[Template:cpp/utility/functional/function/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">#REDIRECT [[Template:cpp/utility/functional/function/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list destructor</title>
    <ns>10</ns>
    <id>12490</id>
    <redirect title="Template:cpp/utility/functional/function/dsc destructor" />
    <revision>
      <id>60645</id>
      <timestamp>2013-06-01T06:50:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list destructor]] to [[Template:cpp/utility/functional/function/dsc destructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">#REDIRECT [[Template:cpp/utility/functional/function/dsc destructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list operator bool</title>
    <ns>10</ns>
    <id>12493</id>
    <redirect title="Template:cpp/utility/functional/function/dsc operator bool" />
    <revision>
      <id>60651</id>
      <timestamp>2013-06-01T06:50:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list operator bool]] to [[Template:cpp/utility/functional/function/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">#REDIRECT [[Template:cpp/utility/functional/function/dsc operator bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list operator()</title>
    <ns>10</ns>
    <id>12491</id>
    <redirect title="Template:cpp/utility/functional/function/dsc operator()" />
    <revision>
      <id>60647</id>
      <timestamp>2013-06-01T06:50:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list operator()]] to [[Template:cpp/utility/functional/function/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="69">#REDIRECT [[Template:cpp/utility/functional/function/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list operator=</title>
    <ns>10</ns>
    <id>12492</id>
    <redirect title="Template:cpp/utility/functional/function/dsc operator=" />
    <revision>
      <id>60649</id>
      <timestamp>2013-06-01T06:50:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list operator=]] to [[Template:cpp/utility/functional/function/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">#REDIRECT [[Template:cpp/utility/functional/function/dsc operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list swap</title>
    <ns>10</ns>
    <id>12494</id>
    <redirect title="Template:cpp/utility/functional/function/dsc swap" />
    <revision>
      <id>60653</id>
      <timestamp>2013-06-01T06:50:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list swap]] to [[Template:cpp/utility/functional/function/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[Template:cpp/utility/functional/function/dsc swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list swap2</title>
    <ns>10</ns>
    <id>12495</id>
    <redirect title="Template:cpp/utility/functional/function/dsc swap2" />
    <revision>
      <id>60655</id>
      <timestamp>2013-06-01T06:50:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list swap2]] to [[Template:cpp/utility/functional/function/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="64">#REDIRECT [[Template:cpp/utility/functional/function/dsc swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list target</title>
    <ns>10</ns>
    <id>12496</id>
    <redirect title="Template:cpp/utility/functional/function/dsc target" />
    <revision>
      <id>60657</id>
      <timestamp>2013-06-01T06:50:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list target]] to [[Template:cpp/utility/functional/function/dsc target]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/utility/functional/function/dsc target]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list target type</title>
    <ns>10</ns>
    <id>12497</id>
    <redirect title="Template:cpp/utility/functional/function/dsc target type" />
    <revision>
      <id>60659</id>
      <timestamp>2013-06-01T06:51:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list target type]] to [[Template:cpp/utility/functional/function/dsc target type]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="70">#REDIRECT [[Template:cpp/utility/functional/function/dsc target type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dcl list uses allocator</title>
    <ns>10</ns>
    <id>12498</id>
    <redirect title="Template:cpp/utility/functional/function/dsc uses allocator" />
    <revision>
      <id>60661</id>
      <timestamp>2013-06-01T06:51:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list uses allocator]] to [[Template:cpp/utility/functional/function/dsc uses allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">#REDIRECT [[Template:cpp/utility/functional/function/dsc uses allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc assign</title>
    <ns>10</ns>
    <id>5504</id>
    <revision>
      <id>81482</id>
      <parentid>60640</parentid>
      <timestamp>2015-10-27T10:22:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2385</comment>
      <text xml:space="preserve" bytes="107">{{dsc mem fun | cpp/utility/functional/function/assign | assigns a new target |notes={{mark until c++17}}}}</text>
      <sha1>maio2oy2bcijblgbqy6he3ehxwitigg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc constructor</title>
    <ns>10</ns>
    <id>5501</id>
    <revision>
      <id>61945</id>
      <parentid>60642</parentid>
      <timestamp>2013-06-11T10:50:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem ctor | cpp/utility/functional/function/function | constructs a new {{tt|std::function}} instance}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc destructor</title>
    <ns>10</ns>
    <id>5502</id>
    <revision>
      <id>61946</id>
      <parentid>60644</parentid>
      <timestamp>2013-06-11T10:50:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="103">{{dsc mem dtor | cpp/utility/functional/function/~function | destroys a {{tt|std::function}} instance}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc operator bool</title>
    <ns>10</ns>
    <id>5505</id>
    <revision>
      <id>60650</id>
      <parentid>55863</parentid>
      <timestamp>2013-06-01T06:50:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list operator bool]] to [[Template:cpp/utility/functional/function/dsc operator bool]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc mem fun | cpp/utility/functional/function/operator_bool | title=operator bool | checks if a valid target is contained}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc operator cmp</title>
    <ns>10</ns>
    <id>12658</id>
    <revision>
      <id>77969</id>
      <parentid>61421</parentid>
      <timestamp>2015-04-22T21:23:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>-std</comment>
      <text xml:space="preserve" bytes="146">{{dsc tfun | cpp/utility/functional/function/operator_cmp | title=operator==&lt;br&gt;operator!= | compares an {{lc|std::function}} with {{c|nullptr}}}}</text>
      <sha1>1vvxbayillpnahnyq2ru07a3qonh7g0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc operator()</title>
    <ns>10</ns>
    <id>5506</id>
    <revision>
      <id>60646</id>
      <parentid>55861</parentid>
      <timestamp>2013-06-01T06:50:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list operator()]] to [[Template:cpp/utility/functional/function/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem fun | cpp/utility/functional/function/operator() | invokes the target}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc operator=</title>
    <ns>10</ns>
    <id>5503</id>
    <revision>
      <id>61950</id>
      <parentid>60648</parentid>
      <timestamp>2013-06-11T11:16:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="86">{{dsc mem fun | cpp/utility/functional/function/operator{{=}} | assigns a new target}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc swap</title>
    <ns>10</ns>
    <id>5509</id>
    <revision>
      <id>60652</id>
      <parentid>55866</parentid>
      <timestamp>2013-06-01T06:50:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list swap]] to [[Template:cpp/utility/functional/function/dsc swap]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/utility/functional/function/swap | swaps the contents}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc swap2</title>
    <ns>10</ns>
    <id>3446</id>
    <revision>
      <id>60654</id>
      <parentid>55867</parentid>
      <timestamp>2013-06-01T06:50:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/function/dcl list swap2]] to [[Template:cpp/utility/functional/function/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="167">{{dsc tfun | cpp/utility/functional/function/swap2 | title=std::swap{{dsc small|(std::function)}} | specializes the {{lc|std::swap}} algorithm | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc target</title>
    <ns>10</ns>
    <id>5508</id>
    <revision>
      <id>80177</id>
      <parentid>60656</parentid>
      <timestamp>2015-07-30T23:56:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>trim</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem fun | cpp/utility/functional/function/target | obtains a pointer to the stored target}}</text>
      <sha1>mhs1821ofntwuxl2b8q58kna0khtzd7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc target type</title>
    <ns>10</ns>
    <id>5507</id>
    <revision>
      <id>80176</id>
      <parentid>60658</parentid>
      <timestamp>2015-07-30T23:56:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>trim</comment>
      <text xml:space="preserve" bytes="109">{{dsc mem fun | cpp/utility/functional/function/target_type | obtains the {{c|typeid}} of the stored target}}</text>
      <sha1>sr8nc1g0seoviylvf85ng3nzbrbo4nx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/dsc uses allocator</title>
    <ns>10</ns>
    <id>3388</id>
    <revision>
      <id>86410</id>
      <parentid>60660</parentid>
      <timestamp>2016-06-29T15:29:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="221">{{dsc ptclass | cpp/utility/functional/function/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::function&gt;}} | specializes the {{lc|std::uses_allocator}} type trait | notes={{mark c++11}} {{mark until c++17}}}}</text>
      <sha1>50dqppzcr9tpunlhf6exqpjtgkno5gv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/navbar</title>
    <ns>10</ns>
    <id>3448</id>
    <revision>
      <id>40048</id>
      <parentid>35976</parentid>
      <timestamp>2012-09-28T20:21:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="372">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/functional/navbar heading
|content3 = cpp/utility/functional/navbar content

|heading4 = cpp/utility/functional/function/navbar heading
|content4 = cpp/utility/functional/function/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/navbar content</title>
    <ns>10</ns>
    <id>3450</id>
    <revision>
      <id>86407</id>
      <parentid>82927</parentid>
      <timestamp>2016-06-29T15:27:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0302R1</comment>
      <text xml:space="preserve" bytes="965">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/functional/function/function}}
{{nv mem ln | cpp/utility/functional/function/~function}}
{{nv mem ln | cpp/utility/functional/function/operator{{=}}}}
{{nv mem ln | cpp/utility/functional/function/swap}}
{{nv mem ln | cpp/utility/functional/function/assign|assign|notes={{mark until c++17}}}} 
{{nv mem ln | cpp/utility/functional/function/operator_bool|operator bool}}
{{nv mem ln | cpp/utility/functional/function/operator()}}
{{nv mem ln | cpp/utility/functional/function/target_type}}
{{nv mem ln | cpp/utility/functional/function/target}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/utility/functional/function/operator_cmp|operator{{==}}|operator!{{=}}}}
{{nv ln | cpp/utility/functional/function/swap2|std::swap(std::function)}}
{{nv h1 | Helper classes}}
{{nv ln | cpp/utility/functional/function/uses_allocator|std::uses_allocator&lt;std::function&gt;|notes={{mark until c++17}}}}
{{nv end}}</text>
      <sha1>szsdvtca3bzp4hym39dt8l4vzfkqnm9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/navbar heading</title>
    <ns>10</ns>
    <id>3449</id>
    <revision>
      <id>48041</id>
      <parentid>35977</parentid>
      <timestamp>2013-05-18T18:00:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="55">{{ltt | cpp/utility/functional/function|std::function}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/function/title</title>
    <ns>10</ns>
    <id>5230</id>
    <revision>
      <id>19058</id>
      <timestamp>2012-02-22T21:52:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="105">&lt;onlyinclude&gt;{{cpp/title | n=function::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/greater equal/dcl list operator()</title>
    <ns>10</ns>
    <id>12500</id>
    <redirect title="Template:cpp/utility/functional/greater equal/dsc operator()" />
    <revision>
      <id>60665</id>
      <timestamp>2013-06-01T06:51:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/greater equal/dcl list operator()]] to [[Template:cpp/utility/functional/greater equal/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="74">#REDIRECT [[Template:cpp/utility/functional/greater equal/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/greater equal/dsc operator()</title>
    <ns>10</ns>
    <id>8840</id>
    <revision>
      <id>60664</id>
      <parentid>55877</parentid>
      <timestamp>2013-06-01T06:51:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/greater equal/dcl list operator()]] to [[Template:cpp/utility/functional/greater equal/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="160">{{dsc mem fun | cpp/utility/functional/greater_equal | title=operator() | inlinemem=true | checks if the first argument is greater than or equal to the second}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/greater equal/title</title>
    <ns>10</ns>
    <id>8580</id>
    <revision>
      <id>31741</id>
      <timestamp>2012-06-06T20:46:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">&lt;onlyinclude&gt;{{cpp/title | n=greater_equal::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/greater/dcl list operator()</title>
    <ns>10</ns>
    <id>12499</id>
    <redirect title="Template:cpp/utility/functional/greater/dsc operator()" />
    <revision>
      <id>60663</id>
      <timestamp>2013-06-01T06:51:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/greater/dcl list operator()]] to [[Template:cpp/utility/functional/greater/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">#REDIRECT [[Template:cpp/utility/functional/greater/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/greater/dsc operator()</title>
    <ns>10</ns>
    <id>8838</id>
    <revision>
      <id>60662</id>
      <parentid>55876</parentid>
      <timestamp>2013-06-01T06:51:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/greater/dcl list operator()]] to [[Template:cpp/utility/functional/greater/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc mem fun | cpp/utility/functional/greater | title=operator() | inlinemem=true | checks if the first argument is greater than the second}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/greater/title</title>
    <ns>10</ns>
    <id>8583</id>
    <revision>
      <id>31744</id>
      <timestamp>2012-06-06T20:46:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=greater::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/is transparent note</title>
    <ns>10</ns>
    <id>13065</id>
    <revision>
      <id>66269</id>
      <timestamp>2013-11-10T01:32:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="484">The member type {{tt|is_transparent}} indicates to the caller that this function object is a ''transparent'' function object: it accepts arguments of arbitrary types and uses perfect forwarding, which avoids unnecessary copying and conversion when the function object is used in heterogeneous context, or with rvalue arguments. In particular, template functions such as {{lc|std::set::find}} and {{lc|std::set::lower_bound}} make use of this member type on their {{tt|Compare}} types.</text>
      <sha1>kzz3muiyei9we8vqyo02ar7dlwy5611</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/less equal/dcl list operator()</title>
    <ns>10</ns>
    <id>12502</id>
    <redirect title="Template:cpp/utility/functional/less equal/dsc operator()" />
    <revision>
      <id>60669</id>
      <timestamp>2013-06-01T06:51:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/less equal/dcl list operator()]] to [[Template:cpp/utility/functional/less equal/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">#REDIRECT [[Template:cpp/utility/functional/less equal/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/less equal/dsc operator()</title>
    <ns>10</ns>
    <id>8841</id>
    <revision>
      <id>60668</id>
      <parentid>55881</parentid>
      <timestamp>2013-06-01T06:51:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/less equal/dcl list operator()]] to [[Template:cpp/utility/functional/less equal/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="154">{{dsc mem fun | cpp/utility/functional/less_equal | title=operator() | inlinemem=true | checks if the first argument is less than or equal to the second}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/less equal/title</title>
    <ns>10</ns>
    <id>8574</id>
    <revision>
      <id>31735</id>
      <timestamp>2012-06-06T20:45:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=less_equal::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/less/dcl list operator()</title>
    <ns>10</ns>
    <id>12501</id>
    <redirect title="Template:cpp/utility/functional/less/dsc operator()" />
    <revision>
      <id>60667</id>
      <timestamp>2013-06-01T06:51:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/less/dcl list operator()]] to [[Template:cpp/utility/functional/less/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/utility/functional/less/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/less/dsc operator()</title>
    <ns>10</ns>
    <id>8839</id>
    <revision>
      <id>60666</id>
      <parentid>55880</parentid>
      <timestamp>2013-06-01T06:51:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/less/dcl list operator()]] to [[Template:cpp/utility/functional/less/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="136">{{dsc mem fun | cpp/utility/functional/less | title=operator() | inlinemem=true | checks if the first argument is less than the second}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/less/title</title>
    <ns>10</ns>
    <id>8577</id>
    <revision>
      <id>31738</id>
      <timestamp>2012-06-06T20:45:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=less::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="101">&lt;onlyinclude&gt;{{cpp/title | n=less::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical and/dcl list operator()</title>
    <ns>10</ns>
    <id>12503</id>
    <redirect title="Template:cpp/utility/functional/logical and/dsc operator()" />
    <revision>
      <id>60671</id>
      <timestamp>2013-06-01T06:51:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/logical and/dcl list operator()]] to [[Template:cpp/utility/functional/logical and/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">#REDIRECT [[Template:cpp/utility/functional/logical and/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical and/dsc operator()</title>
    <ns>10</ns>
    <id>8842</id>
    <revision>
      <id>60670</id>
      <parentid>55882</parentid>
      <timestamp>2013-06-01T06:51:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/logical and/dcl list operator()]] to [[Template:cpp/utility/functional/logical and/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="135">{{dsc mem fun | cpp/utility/functional/logical_and | title=operator() | inlinemem=true | returns the logical AND of the two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical and/title</title>
    <ns>10</ns>
    <id>8572</id>
    <revision>
      <id>31733</id>
      <timestamp>2012-06-06T20:45:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=logical_and::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical not/dcl list operator()</title>
    <ns>10</ns>
    <id>12504</id>
    <redirect title="Template:cpp/utility/functional/logical not/dsc operator()" />
    <revision>
      <id>60673</id>
      <timestamp>2013-06-01T06:51:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/logical not/dcl list operator()]] to [[Template:cpp/utility/functional/logical not/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">#REDIRECT [[Template:cpp/utility/functional/logical not/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical not/dsc operator()</title>
    <ns>10</ns>
    <id>8844</id>
    <revision>
      <id>60672</id>
      <parentid>55885</parentid>
      <timestamp>2013-06-01T06:51:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/logical not/dcl list operator()]] to [[Template:cpp/utility/functional/logical not/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="130">{{dsc mem fun | cpp/utility/functional/logical_not | title=operator() | inlinemem=true | returns the logical NOT of the argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical not/title</title>
    <ns>10</ns>
    <id>8571</id>
    <revision>
      <id>31732</id>
      <timestamp>2012-06-06T20:45:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{cpp/title | n=logical_not::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical or/dcl list operator()</title>
    <ns>10</ns>
    <id>12505</id>
    <redirect title="Template:cpp/utility/functional/logical or/dsc operator()" />
    <revision>
      <id>60675</id>
      <timestamp>2013-06-01T06:51:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/logical or/dcl list operator()]] to [[Template:cpp/utility/functional/logical or/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">#REDIRECT [[Template:cpp/utility/functional/logical or/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical or/dsc operator()</title>
    <ns>10</ns>
    <id>8843</id>
    <revision>
      <id>60674</id>
      <parentid>55886</parentid>
      <timestamp>2013-06-01T06:51:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/logical or/dcl list operator()]] to [[Template:cpp/utility/functional/logical or/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/utility/functional/logical_or | title=operator() | inlinemem=true | returns the logical OR of the two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/logical or/title</title>
    <ns>10</ns>
    <id>8568</id>
    <revision>
      <id>31729</id>
      <timestamp>2012-06-06T20:45:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=logical_or::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/minus/dcl list operator()</title>
    <ns>10</ns>
    <id>12506</id>
    <redirect title="Template:cpp/utility/functional/minus/dsc operator()" />
    <revision>
      <id>60677</id>
      <timestamp>2013-06-01T06:51:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/minus/dcl list operator()]] to [[Template:cpp/utility/functional/minus/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="66">#REDIRECT [[Template:cpp/utility/functional/minus/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/minus/dsc operator()</title>
    <ns>10</ns>
    <id>8831</id>
    <revision>
      <id>60676</id>
      <parentid>55891</parentid>
      <timestamp>2013-06-01T06:51:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/minus/dcl list operator()]] to [[Template:cpp/utility/functional/minus/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc mem fun | cpp/utility/functional/minus | title=operator() | inlinemem=true | returns the difference between two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/minus/title</title>
    <ns>10</ns>
    <id>8566</id>
    <revision>
      <id>31727</id>
      <timestamp>2012-06-06T20:44:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=minus::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/modulus/dcl list operator()</title>
    <ns>10</ns>
    <id>12507</id>
    <redirect title="Template:cpp/utility/functional/modulus/dsc operator()" />
    <revision>
      <id>60679</id>
      <timestamp>2013-06-01T06:51:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/modulus/dcl list operator()]] to [[Template:cpp/utility/functional/modulus/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="68">#REDIRECT [[Template:cpp/utility/functional/modulus/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/modulus/dsc operator()</title>
    <ns>10</ns>
    <id>8834</id>
    <revision>
      <id>60678</id>
      <parentid>55898</parentid>
      <timestamp>2013-06-01T06:51:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/modulus/dcl list operator()]] to [[Template:cpp/utility/functional/modulus/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="172">{{dsc mem fun | cpp/utility/functional/modulus | title=operator() | inlinemem=true | returns the remainder from the division of the first argument by the second argument }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/modulus/title</title>
    <ns>10</ns>
    <id>8563</id>
    <revision>
      <id>31724</id>
      <timestamp>2012-06-06T20:44:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=modulus::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/multiplies/dcl list operator()</title>
    <ns>10</ns>
    <id>12508</id>
    <redirect title="Template:cpp/utility/functional/multiplies/dsc operator()" />
    <revision>
      <id>60681</id>
      <timestamp>2013-06-01T06:51:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/multiplies/dcl list operator()]] to [[Template:cpp/utility/functional/multiplies/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">#REDIRECT [[Template:cpp/utility/functional/multiplies/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/multiplies/dsc operator()</title>
    <ns>10</ns>
    <id>8832</id>
    <revision>
      <id>60680</id>
      <parentid>55899</parentid>
      <timestamp>2013-06-01T06:51:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/multiplies/dcl list operator()]] to [[Template:cpp/utility/functional/multiplies/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="126">{{dsc mem fun | cpp/utility/functional/multiplies | title=operator() | inlinemem=true | returns the product of two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/multiplies/title</title>
    <ns>10</ns>
    <id>8560</id>
    <revision>
      <id>31721</id>
      <timestamp>2012-06-06T20:43:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=multiplies::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/navbar</title>
    <ns>10</ns>
    <id>2358</id>
    <revision>
      <id>40049</id>
      <parentid>36024</parentid>
      <timestamp>2012-09-28T20:21:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="253">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/functional/navbar heading
|content3 = cpp/utility/functional/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/navbar content</title>
    <ns>10</ns>
    <id>2473</id>
    <revision>
      <id>90823</id>
      <parentid>87885</parentid>
      <timestamp>2017-03-11T16:46:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rm make_</comment>
      <text xml:space="preserve" bytes="3866">{{nv begin}}

{{nv col begin}}
{{nv h2 | Function wrappers }}
{{nv ln | cpp/utility/functional/function | notes={{mark c++11}} }}
{{nv ln | cpp/utility/functional/mem_fn | notes={{mark c++11}} }}
{{nv ln | cpp/utility/functional/bad_function_call | notes={{mark c++11}} }}
{{nv ln | cpp/utility/functional/invoke | notes={{mark c++17}} }}
{{nv col next}}
{{nv h2 | Bind }}
{{nv ln | cpp/utility/functional/bind | notes={{mark c++11}} }}
{{nv ln | cpp/utility/functional/is_bind_expression | notes={{mark c++11}} }}
{{nv ln | cpp/utility/functional/is_placeholder | notes={{mark c++11}} }}
{{nv ln | cpp/utility/functional/placeholders | _1, _2, _3, ... | notes={{mark c++11}} }}
{{nv col end}}
{{nv h2 | Reference wrappers }}
{{nv ln | cpp/utility/functional/reference_wrapper | notes={{mark c++11}} }}
{{nv ln | cpp/utility/functional/ref |ref|cref| notes={{mark c++11}}&lt;br&gt;{{mark c++11}}}}
{{nv h2 | Operator wrappers }}
{{nv col begin}}
{{nv ln | cpp/utility/functional/plus }}
{{nv ln | cpp/utility/functional/minus }}
{{nv ln | cpp/utility/functional/negate }}
{{nv ln | cpp/utility/functional/multiplies }}
{{nv ln | cpp/utility/functional/divides }}
{{nv ln | cpp/utility/functional/modulus }}
{{nv ln | cpp/utility/functional/logical_and }}
{{nv ln | cpp/utility/functional/logical_or }}
{{nv ln | cpp/utility/functional/logical_not }}
{{nv col next}}
{{nv ln | cpp/utility/functional/equal_to }}
{{nv ln | cpp/utility/functional/not_equal_to }}
{{nv ln | cpp/utility/functional/greater }}
{{nv ln | cpp/utility/functional/less }}
{{nv ln | cpp/utility/functional/greater_equal }}
{{nv ln | cpp/utility/functional/less_equal }}
{{nv ln | cpp/utility/functional/bit_and }}
{{nv ln | cpp/utility/functional/bit_or }}
{{nv ln | cpp/utility/functional/bit_xor }}
{{nv ln | cpp/utility/functional/bit_not |  notes={{mark c++14}}}}
{{nv col end}}

{{nv h2 | Negators }}
{{nv col begin}}
{{nv ln | cpp/utility/functional/not_fn}}
{{nv ln | cpp/utility/functional/not1|notes={{mark deprecated}}}}
{{nv ln | cpp/utility/functional/not2|notes={{mark deprecated}}}}
{{nv col next}}
{{nv ph}}
{{nv ln | cpp/utility/functional/unary_negate|notes={{mark deprecated}}}}
{{nv ln | cpp/utility/functional/binary_negate|notes={{mark deprecated}}}}
{{nv col end}}

{{nv h2 | Searchers }}
{{nv ln | cpp/utility/functional/default_searcher|notes={{mark c++17}}}}
{{nv ln | cpp/utility/functional/boyer_moore_searcher|notes={{mark c++17}}}}
{{nv ln | cpp/utility/functional/boyer_moore_horspool_searcher|notes={{mark c++17}}}}


{{nv h2 | Old binders and adaptors }}
{{nv col begin}}
{{nv ln | cpp/utility/functional/unary_function | notes={{mark until c++17}} }}
{{nv ln | cpp/utility/functional/binary_function | notes={{mark until c++17}} }}

{{nv ln | cpp/utility/functional/ptr_fun | notes={{mark until c++17}} }}
{{nv ln | cpp/utility/functional/pointer_to_unary_function | notes={{mark until c++17}} }}
{{nv ln | cpp/utility/functional/pointer_to_binary_function | notes={{mark until c++17}} }}

{{nv ln | cpp/utility/functional/mem_fun | notes={{mark until c++17}} }}
{{nv ln | cpp/utility/functional/mem_fun_t | mem_fun_t | mem_fun1_t | const_mem_fun_t | const_mem_fun1_t | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}} }}
{{nv col next}}
{{nv ln | cpp/utility/functional/binder12 | binder1st | binder2nd | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}} }}
{{nv ln | cpp/utility/functional/bind12 | bind1st | bind2nd | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}} }}
{{nv ph}}
{{nv ln | cpp/utility/functional/mem_fun_ref | notes={{mark until c++17}} }}
{{nv ln | cpp/utility/functional/mem_fun_ref_t | mem_fun_ref_t | mem_fun1_ref_t | const_mem_fun_ref_t | const_mem_fun1_ref_t | notes={{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}}&lt;br&gt;{{mark until c++17}} }}
{{nv col end}}
{{nv end}}</text>
      <sha1>kg0afmq0pp7v9qhqb3xxyh5obu7pv96</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/navbar heading</title>
    <ns>10</ns>
    <id>2359</id>
    <revision>
      <id>35982</id>
      <parentid>5351</parentid>
      <timestamp>2012-06-15T22:36:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/sidebar heading]] to [[Template:cpp/utility/functional/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="45">[[cpp/utility/functional | Function objects]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/negate/dcl list operator()</title>
    <ns>10</ns>
    <id>12509</id>
    <redirect title="Template:cpp/utility/functional/negate/dsc operator()" />
    <revision>
      <id>60683</id>
      <timestamp>2013-06-01T06:51:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/negate/dcl list operator()]] to [[Template:cpp/utility/functional/negate/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">#REDIRECT [[Template:cpp/utility/functional/negate/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/negate/dsc operator()</title>
    <ns>10</ns>
    <id>8835</id>
    <revision>
      <id>60682</id>
      <parentid>55905</parentid>
      <timestamp>2013-06-01T06:51:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/negate/dcl list operator()]] to [[Template:cpp/utility/functional/negate/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/utility/functional/negate | title=operator() | inlinemem=true | returns the negation of the argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/negate/title</title>
    <ns>10</ns>
    <id>8557</id>
    <revision>
      <id>31717</id>
      <timestamp>2012-06-06T20:41:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;{{cpp/title | n=negate::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/not equal to/dcl list operator()</title>
    <ns>10</ns>
    <id>12510</id>
    <redirect title="Template:cpp/utility/functional/not equal to/dsc operator()" />
    <revision>
      <id>60685</id>
      <timestamp>2013-06-01T06:51:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/not equal to/dcl list operator()]] to [[Template:cpp/utility/functional/not equal to/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">#REDIRECT [[Template:cpp/utility/functional/not equal to/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/not equal to/dsc operator()</title>
    <ns>10</ns>
    <id>8837</id>
    <revision>
      <id>60684</id>
      <parentid>55906</parentid>
      <timestamp>2013-06-01T06:51:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/not equal to/dcl list operator()]] to [[Template:cpp/utility/functional/not equal to/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="129">{{dsc mem fun | cpp/utility/functional/not_equal_to | title=operator() | inlinemem=true | checks if the arguments are not equal}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/not equal to/title</title>
    <ns>10</ns>
    <id>8582</id>
    <revision>
      <id>31743</id>
      <timestamp>2012-06-06T20:46:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=not_equal_to::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/plus void/dsc operator()</title>
    <ns>10</ns>
    <id>12879</id>
    <revision>
      <id>64079</id>
      <timestamp>2013-08-08T12:46:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="121">{{dsc mem fun | cpp/utility/functional/plus_void | title=operator() | inlinemem=true | returns the sum of two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/plus void/title</title>
    <ns>10</ns>
    <id>12880</id>
    <revision>
      <id>64080</id>
      <timestamp>2013-08-08T12:48:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="107">&lt;onlyinclude&gt;{{cpp/title | n=plus&lt;void&gt;::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/plus/dcl list operator()</title>
    <ns>10</ns>
    <id>12511</id>
    <redirect title="Template:cpp/utility/functional/plus/dsc operator()" />
    <revision>
      <id>60687</id>
      <timestamp>2013-06-01T06:51:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/plus/dcl list operator()]] to [[Template:cpp/utility/functional/plus/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[Template:cpp/utility/functional/plus/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/plus/dsc operator()</title>
    <ns>10</ns>
    <id>8830</id>
    <revision>
      <id>60686</id>
      <parentid>55909</parentid>
      <timestamp>2013-06-01T06:51:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/plus/dcl list operator()]] to [[Template:cpp/utility/functional/plus/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem fun | cpp/utility/functional/plus | title=operator() | inlinemem=true | returns the sum of two arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/plus/title</title>
    <ns>10</ns>
    <id>8579</id>
    <revision>
      <id>31745</id>
      <parentid>31740</parentid>
      <timestamp>2012-06-06T20:46:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="101">&lt;onlyinclude&gt;{{cpp/title | n=plus::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/pointer order</title>
    <ns>10</ns>
    <id>5051</id>
    <revision>
      <id>91962</id>
      <parentid>89751</parentid>
      <timestamp>2017-03-31T20:18:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg|LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|$1|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="1044">A specialization of {{tt|{{{2|}}} }} for any pointer type yields a strict total order, even if the built-in {{c|{{{1|}}} }} does not. {{mark unreviewed dr|lwg|2562}}The strict total order is consistent among specializations of {{lc|std::less}}, {{lc|std::greater}}, {{lc|std::less_equal}}, and {{lc|std::greater_equal}} for that pointer type, and is also consistent with the partial order imposed by the corresponding built-in operators ({{tt|&lt;}}, {{tt|&gt;}}, {{tt|1=&lt;=}} and {{tt|1=&gt;=}}).

{{rev begin}}
{{rev|since=c++14|
If the function call operator of the specialization {{tt|{{{2|}}}&lt;void&gt; }} calls a built-in operator comparing pointers, it yields a strict total order even if the built-in {{c|{{{1|}}} }} does not. {{mark unreviewed dr|lwg|2562}}This strict total order is consistent among the specializations {{tt|std::less&lt;void&gt;}}, {{tt|std::greater&lt;void&gt;}}, {{tt|std::less_equal&lt;void&gt;}}, and {{tt|std::greater_equal&lt;void&gt;}}, and  is also consistent with the partial order imposed by the corresponding built-in operators.
}}
{{rev end}}</text>
      <sha1>f80k8ni08kw2aksvpxuhi3sh3dstdqe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dcl list constructor</title>
    <ns>10</ns>
    <id>12512</id>
    <redirect title="Template:cpp/utility/functional/reference wrapper/dsc constructor" />
    <revision>
      <id>60689</id>
      <timestamp>2013-06-01T06:51:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list constructor]] to [[Template:cpp/utility/functional/reference wrapper/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="79">#REDIRECT [[Template:cpp/utility/functional/reference wrapper/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dcl list get</title>
    <ns>10</ns>
    <id>12513</id>
    <redirect title="Template:cpp/utility/functional/reference wrapper/dsc get" />
    <revision>
      <id>60691</id>
      <timestamp>2013-06-01T06:51:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list get]] to [[Template:cpp/utility/functional/reference wrapper/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">#REDIRECT [[Template:cpp/utility/functional/reference wrapper/dsc get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dcl list operator()</title>
    <ns>10</ns>
    <id>12514</id>
    <redirect title="Template:cpp/utility/functional/reference wrapper/dsc operator()" />
    <revision>
      <id>60693</id>
      <timestamp>2013-06-01T06:51:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list operator()]] to [[Template:cpp/utility/functional/reference wrapper/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="78">#REDIRECT [[Template:cpp/utility/functional/reference wrapper/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dcl list operator=</title>
    <ns>10</ns>
    <id>12515</id>
    <redirect title="Template:cpp/utility/functional/reference wrapper/dsc operator=" />
    <revision>
      <id>60695</id>
      <timestamp>2013-06-01T06:51:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list operator=]] to [[Template:cpp/utility/functional/reference wrapper/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="77">#REDIRECT [[Template:cpp/utility/functional/reference wrapper/dsc operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dsc constructor</title>
    <ns>10</ns>
    <id>5463</id>
    <revision>
      <id>60688</id>
      <parentid>55912</parentid>
      <timestamp>2013-06-01T06:51:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list constructor]] to [[Template:cpp/utility/functional/reference wrapper/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc mem ctor | cpp/utility/functional/reference_wrapper/reference_wrapper | stores a reference in a new {{lc|std::reference_wrapper}} object}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dsc get</title>
    <ns>10</ns>
    <id>5465</id>
    <revision>
      <id>60690</id>
      <parentid>55913</parentid>
      <timestamp>2013-06-01T06:51:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list get]] to [[Template:cpp/utility/functional/reference wrapper/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="122">{{dsc mem fun | cpp/utility/functional/reference_wrapper/get | title=get&lt;br&gt;operator T&amp; | accesses the stored reference }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dsc operator()</title>
    <ns>10</ns>
    <id>5466</id>
    <revision>
      <id>60692</id>
      <parentid>55916</parentid>
      <timestamp>2013-06-01T06:51:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list operator()]] to [[Template:cpp/utility/functional/reference wrapper/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc mem fun | cpp/utility/functional/reference_wrapper/operator() | calls the stored function }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/dsc operator=</title>
    <ns>10</ns>
    <id>5464</id>
    <revision>
      <id>60694</id>
      <parentid>55917</parentid>
      <timestamp>2013-06-01T06:51:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/reference wrapper/dcl list operator=]] to [[Template:cpp/utility/functional/reference wrapper/dsc operator=]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc mem fun | cpp/utility/functional/reference_wrapper/operator{{=}} | rebinds a {{lc|std::reference_wrapper}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/navbar</title>
    <ns>10</ns>
    <id>5220</id>
    <revision>
      <id>40050</id>
      <parentid>36025</parentid>
      <timestamp>2012-09-28T20:21:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="390">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/functional/navbar heading
|content3 = cpp/utility/functional/navbar content

|heading4 = cpp/utility/functional/reference_wrapper/navbar heading
|content4 = cpp/utility/functional/reference_wrapper/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/navbar content</title>
    <ns>10</ns>
    <id>5222</id>
    <revision>
      <id>55918</id>
      <parentid>34551</parentid>
      <timestamp>2013-06-01T05:28:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="347">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/functional/reference_wrapper/reference_wrapper}}
{{nv mem ln | cpp/utility/functional/reference_wrapper/operator{{=}}}}
{{nv mem ln | cpp/utility/functional/reference_wrapper/get | get | operator T&amp;}}
{{nv mem ln | cpp/utility/functional/reference_wrapper/operator()}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/navbar heading</title>
    <ns>10</ns>
    <id>5221</id>
    <revision>
      <id>36027</id>
      <parentid>35979</parentid>
      <timestamp>2012-06-16T19:12:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+tt</comment>
      <text xml:space="preserve" bytes="73">{{ltt|cpp/utility/functional/reference_wrapper | std::reference_wrapper}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/reference wrapper/title</title>
    <ns>10</ns>
    <id>5462</id>
    <revision>
      <id>19929</id>
      <timestamp>2012-03-18T19:49:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">&lt;onlyinclude&gt;{{cpp/title | n=reference_wrapper::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/unary negate/dcl list operator()</title>
    <ns>10</ns>
    <id>12516</id>
    <redirect title="Template:cpp/utility/functional/unary negate/dsc operator()" />
    <revision>
      <id>60697</id>
      <timestamp>2013-06-01T06:51:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/functional/unary negate/dcl list operator()]] to [[Template:cpp/utility/functional/unary negate/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="73">#REDIRECT [[Template:cpp/utility/functional/unary negate/dsc operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/unary negate/dsc operator()</title>
    <ns>10</ns>
    <id>8848</id>
    <revision>
      <id>60696</id>
      <parentid>55919</parentid>
      <timestamp>2013-06-01T06:51:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/functional/unary negate/dcl list operator()]] to [[Template:cpp/utility/functional/unary negate/dsc operator()]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="170">{{dsc mem fun | cpp/utility/functional/unary_negate | title=operator() | inlinemem=true | returns the logical complement of the result of a call to the stored predicate}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/functional/unary negate/title</title>
    <ns>10</ns>
    <id>8576</id>
    <revision>
      <id>31737</id>
      <timestamp>2012-06-06T20:45:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="109">&lt;onlyinclude&gt;{{cpp/title | n=unary_negate::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/hash/navbar</title>
    <ns>10</ns>
    <id>2991</id>
    <revision>
      <id>40051</id>
      <parentid>35983</parentid>
      <timestamp>2012-09-28T20:21:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/hash/navbar heading
|content3 = cpp/utility/hash/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/hash/navbar content</title>
    <ns>10</ns>
    <id>2993</id>
    <revision>
      <id>55926</id>
      <parentid>34631</parentid>
      <timestamp>2013-06-01T05:28:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="106">{{nv begin}}
{{nv mem ln | cpp/utility/hash/hash }}
{{nv mem ln | cpp/utility/hash/operator()}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/hash/navbar heading</title>
    <ns>10</ns>
    <id>2992</id>
    <revision>
      <id>48031</id>
      <parentid>35889</parentid>
      <timestamp>2013-05-18T17:58:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="34">{{ltt|cpp/utility/hash|std::hash}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dcl list begin</title>
    <ns>10</ns>
    <id>12517</id>
    <redirect title="Template:cpp/utility/initializer list/dsc begin" />
    <revision>
      <id>60699</id>
      <timestamp>2013-06-01T06:51:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list begin]] to [[Template:cpp/utility/initializer list/dsc begin]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/initializer list/dsc begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dcl list begin2</title>
    <ns>10</ns>
    <id>12518</id>
    <redirect title="Template:cpp/utility/initializer list/dsc begin2" />
    <revision>
      <id>60701</id>
      <timestamp>2013-06-01T06:51:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list begin2]] to [[Template:cpp/utility/initializer list/dsc begin2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[Template:cpp/utility/initializer list/dsc begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dcl list constructor</title>
    <ns>10</ns>
    <id>12519</id>
    <redirect title="Template:cpp/utility/initializer list/dsc constructor" />
    <revision>
      <id>60703</id>
      <timestamp>2013-06-01T06:51:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list constructor]] to [[Template:cpp/utility/initializer list/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">#REDIRECT [[Template:cpp/utility/initializer list/dsc constructor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dcl list end</title>
    <ns>10</ns>
    <id>12520</id>
    <redirect title="Template:cpp/utility/initializer list/dsc end" />
    <revision>
      <id>60705</id>
      <timestamp>2013-06-01T06:51:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list end]] to [[Template:cpp/utility/initializer list/dsc end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/utility/initializer list/dsc end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dcl list end2</title>
    <ns>10</ns>
    <id>12521</id>
    <redirect title="Template:cpp/utility/initializer list/dsc end2" />
    <revision>
      <id>60707</id>
      <timestamp>2013-06-01T06:51:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list end2]] to [[Template:cpp/utility/initializer list/dsc end2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/initializer list/dsc end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dcl list size</title>
    <ns>10</ns>
    <id>12522</id>
    <redirect title="Template:cpp/utility/initializer list/dsc size" />
    <revision>
      <id>60709</id>
      <timestamp>2013-06-01T06:51:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list size]] to [[Template:cpp/utility/initializer list/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/initializer list/dsc size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc begin</title>
    <ns>10</ns>
    <id>8507</id>
    <revision>
      <id>80210</id>
      <parentid>60698</parentid>
      <timestamp>2015-07-31T21:42:31Z</timestamp>
      <contributor>
        <username>Frog</username>
        <id>3671</id>
      </contributor>
      <text xml:space="preserve" bytes="93">{{dsc mem fun | cpp/utility/initializer_list/begin | returns a pointer to the first element}}</text>
      <sha1>0n99aqveehpg2esjz6j4e3a5r58o51h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc begin2</title>
    <ns>10</ns>
    <id>3490</id>
    <revision>
      <id>60700</id>
      <parentid>55932</parentid>
      <timestamp>2013-06-01T06:51:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list begin2]] to [[Template:cpp/utility/initializer list/dsc begin2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="161">{{dsc tfun | cpp/utility/initializer_list/begin2 | title=std::begin{{dsc small|(std::initializer_list)}} | specializes {{lc|std::begin}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc constructor</title>
    <ns>10</ns>
    <id>8509</id>
    <revision>
      <id>60702</id>
      <parentid>55933</parentid>
      <timestamp>2013-06-01T06:51:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list constructor]] to [[Template:cpp/utility/initializer list/dsc constructor]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="100">{{dsc mem ctor | cpp/utility/initializer_list/initializer_list | creates an empty initializer list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc end</title>
    <ns>10</ns>
    <id>8506</id>
    <revision>
      <id>60704</id>
      <parentid>55936</parentid>
      <timestamp>2013-06-01T06:51:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list end]] to [[Template:cpp/utility/initializer list/dsc end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc mem fun | cpp/utility/initializer_list/end | returns a pointer to one past the last element}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc end2</title>
    <ns>10</ns>
    <id>3488</id>
    <revision>
      <id>60706</id>
      <parentid>55937</parentid>
      <timestamp>2013-06-01T06:51:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list end2]] to [[Template:cpp/utility/initializer list/dsc end2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="155">{{dsc tfun | cpp/utility/initializer_list/end2 | title=std::end{{dsc small|(std::initializer_list)}} | specializes {{lc|std::end}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc rbegin2</title>
    <ns>10</ns>
    <id>12768</id>
    <revision>
      <id>65343</id>
      <parentid>61641</parentid>
      <timestamp>2013-09-09T20:03:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>no special crbegin for initializer_list</comment>
      <text xml:space="preserve" bytes="158">{{dsc fun | cpp/utility/initializer_list/rbegin2 | title=rbegin{{dsc small|(std::initializer_list)}} | specializes {{lc|std::rbegin}} | notes={{mark c++14}}}}</text>
      <sha1>bat6fe1jj3o662d25y2vjgrvo2xrmty</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc rend2</title>
    <ns>10</ns>
    <id>12767</id>
    <revision>
      <id>65876</id>
      <parentid>65344</parentid>
      <timestamp>2013-10-13T05:24:55Z</timestamp>
      <contributor>
        <ip>109.188.127.167</ip>
      </contributor>
      <text xml:space="preserve" bytes="152">{{dsc fun | cpp/utility/initializer_list/rend2 | title=rend{{dsc small|(std::initializer_list)}} | specializes {{lc|std::rend}} | notes={{mark c++14}}}}</text>
      <sha1>qupj923xcq7rf4b5pmd7t037nuf4747</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/dsc size</title>
    <ns>10</ns>
    <id>8508</id>
    <revision>
      <id>60708</id>
      <parentid>55940</parentid>
      <timestamp>2013-06-01T06:51:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/initializer list/dcl list size]] to [[Template:cpp/utility/initializer list/dsc size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem fun | cpp/utility/initializer_list/size | returns the number of elements in the initializer list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/navbar</title>
    <ns>10</ns>
    <id>2362</id>
    <revision>
      <id>47771</id>
      <parentid>40052</parentid>
      <timestamp>2013-05-16T20:26:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="265">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/initializer_list/navbar heading
|content3 = cpp/utility/initializer_list/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/navbar content</title>
    <ns>10</ns>
    <id>2916</id>
    <revision>
      <id>79567</id>
      <parentid>55941</parentid>
      <timestamp>2015-07-10T20:15:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+rbegin/rend</comment>
      <text xml:space="preserve" bytes="602">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/initializer_list/initializer_list}}
{{nv h2 | Capacity}}
{{nv mem ln | cpp/utility/initializer_list/size}}
{{nv h2 | Iterators}}
{{nv mem ln | cpp/utility/initializer_list/begin}}
{{nv mem ln | cpp/utility/initializer_list/end}}
{{nv h1 | Non-member functions}}
{{nv ln | cpp/utility/initializer_list/begin2|std::begin}}
{{nv ln | cpp/utility/initializer_list/end2|std::end}}
{{nv ln | cpp/utility/initializer_list/rbegin2|std::rbegin {{mark c++14}}}}
{{nv ln | cpp/utility/initializer_list/rend2|std::rend {{mark c++14}}}}
{{nv end}}</text>
      <sha1>f073gpxy7uuurd2fejdixtz3e83c4sz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/navbar heading</title>
    <ns>10</ns>
    <id>2363</id>
    <revision>
      <id>47765</id>
      <parentid>35986</parentid>
      <timestamp>2013-05-16T20:24:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="58">{{ltt|cpp/utility/initializer_list|std::initializer_list}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/initializer list/title</title>
    <ns>10</ns>
    <id>8504</id>
    <revision>
      <id>31494</id>
      <timestamp>2012-05-31T14:15:49Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="113">&lt;onlyinclude&gt;{{cpp/title | n=initializer_list::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/navbar</title>
    <ns>10</ns>
    <id>79</id>
    <revision>
      <id>40053</id>
      <parentid>35994</parentid>
      <timestamp>2012-09-28T20:21:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="154">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/navbar content</title>
    <ns>10</ns>
    <id>2025</id>
    <revision>
      <id>88331</id>
      <parentid>88262</parentid>
      <timestamp>2016-11-16T17:20:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0504r0 in_places</comment>
      <text xml:space="preserve" bytes="2060">{{nv begin}}
{{nv | [[cpp/types | Type support]] (basic types, RTTI, type traits) }}
{{nv | [[cpp/memory | Dynamic memory management]] }}
{{nv | [[cpp/error | Error handling]] }}
{{nv | [[cpp/utility/program | Program utilities]] }}
{{nv | [[cpp/utility/variadic | Variadic functions]] }}
{{nv | [[cpp/chrono | Date and time]] }}
{{nv | [[cpp/utility/functional | Function objects]] }}
{{nv ln | cpp/utility/initializer_list| notes={{mark c++11}}}}
{{nv ln | cpp/utility/bitset }}
{{nv ln | cpp/utility/hash | notes={{mark c++11}} }}
{{nv h2 | Relational operators}}
{{nv mem ln | cpp/utility/rel_ops/operator_cmp | operator!{{=}} | operator&gt; | operator&lt;{{=}} | operator&gt;{{=}}}}
{{nv h2 | {{tt|optional}}, {{tt|any}} and {{tt|variant}} {{mark c++17}}}}
{{nv ln | cpp/utility/optional }}
{{nv ln | cpp/utility/any }}
{{nv ln | cpp/utility/variant}}
{{nv ln | cpp/utility/in_place| in_place|in_place_type|in_place_index|in_place_t|in_place_type_t|in_place_index_t}}
{{nv h2 | Pairs and tuples}}
{{nv ln | cpp/utility/pair }}
{{nv ln | cpp/utility/tuple | notes={{mark c++11}} }}
{{nv ln | cpp/utility/apply | notes={{mark c++17}} }}
{{nv ln | cpp/utility/make_from_tuple | notes={{mark c++17}} }}
{{nv ln | cpp/utility/piecewise_construct_t| notes={{mark c++11}}}}
{{nv ln | cpp/utility/piecewise_construct| notes={{mark c++11}}}}
{{nv ln | cpp/utility/integer_sequence| notes={{mark c++14}}}}
{{nv h2 | Swap, forward and move}}
{{nv ln | cpp/algorithm/swap }}
{{nv ln | cpp/utility/exchange | notes={{mark c++14}} }}
{{nv ln | cpp/utility/forward | notes={{mark c++11}} }}
{{nv ln | cpp/utility/move | notes={{mark c++11}} }}
{{nv ln | cpp/utility/move_if_noexcept | notes={{mark c++11}} }}
{{nv h2 | Elementary string conversions}}
{{nv ln | cpp/utility/to_chars | notes={{mark c++17}} }}
{{nv ln | cpp/utility/from_chars | notes={{mark c++17}} }}
{{nv ln | cpp/utility/chars_format | notes={{mark c++17}} }}
{{nv h2 | Type operations}}
{{nv ln | cpp/utility/declval | notes={{mark c++11}} }}
{{nv ln | cpp/utility/as_const | notes={{mark c++17}} }}
{{nv end}}</text>
      <sha1>r46totu8bnk12vtx82rdcrhxk2nspyb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/navbar heading</title>
    <ns>10</ns>
    <id>80</id>
    <revision>
      <id>35965</id>
      <parentid>159</parentid>
      <timestamp>2012-06-15T22:35:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/sidebar heading]] to [[Template:cpp/utility/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="35">[[cpp/utility | Utilities library]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional</title>
    <ns>10</ns>
    <id>13200</id>
    <redirect title="Template:cpp/experimental/optional" />
    <revision>
      <id>68068</id>
      <timestamp>2014-03-16T20:19:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>P12 moved page [[Template:cpp/utility/optional]] to [[Template:cpp/experimental/optional]]</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/experimental/optional]]</text>
      <sha1>r52d6aw8g6hbc4yzni8s7695sz0jzec</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/bad optional access/dsc constructor</title>
    <ns>10</ns>
    <id>14831</id>
    <revision>
      <id>84107</id>
      <timestamp>2016-03-15T13:41:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="111">{{dsc mem ctor | cpp/utility/optional/bad_optional_access | inlinemem=true | constructs the exception object }}</text>
      <sha1>pz8ce6i1cih1fgn5mksa28pt8667b2k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc bad optional access</title>
    <ns>10</ns>
    <id>14829</id>
    <revision>
      <id>84104</id>
      <timestamp>2016-03-15T13:39:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="162">{{dsc class | cpp/utility/optional/bad_optional_access | exception indicating checked access to an optional that doesn't contain a value | notes={{mark c++17}} }}</text>
      <sha1>8dpnbc3qckrawh8b9hehw5y3swyw0mf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc constructor</title>
    <ns>10</ns>
    <id>14808</id>
    <revision>
      <id>84058</id>
      <timestamp>2016-03-15T12:55:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="81">{{dsc mem ctor | cpp/utility/optional/optional | constructs the optional object}}</text>
      <sha1>elr055momc9qd4xehabukxcbbftevxj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc destructor</title>
    <ns>10</ns>
    <id>14810</id>
    <revision>
      <id>84061</id>
      <timestamp>2016-03-15T12:59:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{dsc mem dtor | cpp/utility/optional/~optional | destroys the contained value, if there is one}}</text>
      <sha1>k7vi7ljdsyzbkopqkk2g9wwgcbxst91</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc emplace</title>
    <ns>10</ns>
    <id>14818</id>
    <revision>
      <id>84081</id>
      <timestamp>2016-03-15T13:21:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="88">{{dsc mem fun | cpp/utility/optional/emplace | constructs the contained value in-place}}</text>
      <sha1>nmx4kczpky0w17vyp3emfb1svv25f59</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc has value</title>
    <ns>10</ns>
    <id>15593</id>
    <revision>
      <id>86661</id>
      <parentid>86655</parentid>
      <timestamp>2016-07-09T05:04:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>zap - someone delete this</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc hash</title>
    <ns>10</ns>
    <id>14822</id>
    <revision>
      <id>84094</id>
      <timestamp>2016-03-15T13:31:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="157">{{dsc ptclass | cpp/utility/optional/hash | title=std::hash{{dsc small|&lt;std::optional&gt;}} | specializes the {{lc|std::hash}} algorithm |notes={{mark c++17}}}}</text>
      <sha1>5b72it8k0va9uf2073lf010vlqm129s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc in place</title>
    <ns>10</ns>
    <id>15587</id>
    <redirect title="Template:cpp/utility/dsc in place" />
    <revision>
      <id>86627</id>
      <timestamp>2016-07-07T17:34:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[Template:cpp/utility/optional/dsc in place]] to [[Template:cpp/utility/dsc in place]]: as requested by tc</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/utility/dsc in place]]</text>
      <sha1>26pdow3fgw0g20rfvfsv3q9c6ofqwn0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc make optional</title>
    <ns>10</ns>
    <id>14820</id>
    <revision>
      <id>84092</id>
      <parentid>84085</parentid>
      <timestamp>2016-03-15T13:30:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="107">{{dsc tfun | cpp/utility/optional/make_optional | creates an {{tt|optional}} object|notes={{mark c++17}} }}</text>
      <sha1>inus9ozabnp8wt1k1h50ukhcrfa18bi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc nullopt</title>
    <ns>10</ns>
    <id>14832</id>
    <revision>
      <id>84109</id>
      <parentid>84108</parentid>
      <timestamp>2016-03-15T13:44:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/fun/const</comment>
      <text xml:space="preserve" bytes="105">{{dsc const | cpp/utility/optional/nullopt | an object of type {{tt|nullopt_t}} | notes={{mark c++17}} }}</text>
      <sha1>25qe3tjbwstrtzab21k5hoyq9e96aga</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc nullopt t</title>
    <ns>10</ns>
    <id>14823</id>
    <revision>
      <id>84096</id>
      <timestamp>2016-03-15T13:33:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">{{dsc class | cpp/utility/optional/nullopt_t | indicator of optional type with uninitialized state | notes={{mark c++17}} }}</text>
      <sha1>su2b6mvyuybkr9irjn6q7cjuzaibp5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc operator bool</title>
    <ns>10</ns>
    <id>14813</id>
    <revision>
      <id>86658</id>
      <parentid>84068</parentid>
      <timestamp>2016-07-09T05:02:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+has_value</comment>
      <text xml:space="preserve" bytes="133">{{dsc mem fun | cpp/utility/optional/operator bool | checks whether the object contains a value | title=operator bool&lt;br/&gt;has_value}}</text>
      <sha1>7bkfgntcclegmqqr9fw5100s5l7dri7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc operator cmp</title>
    <ns>10</ns>
    <id>14819</id>
    <revision>
      <id>84093</id>
      <parentid>84083</parentid>
      <timestamp>2016-03-15T13:30:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="205">{{dsc tfun | cpp/utility/optional/operator_cmp | title=operator{{==}}&lt;br/&gt;operator!{{=}}&lt;br/&gt;operator&lt;&lt;br/&gt;operator&lt;=&lt;br/&gt;operator&gt;&lt;br/&gt;operator&gt;= | compares {{tt|optional}} objects|notes={{mark c++17}} }}</text>
      <sha1>a2ajki55t6dkixvaik4g3mm7w3kpxmu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc operator*</title>
    <ns>10</ns>
    <id>14812</id>
    <revision>
      <id>84065</id>
      <timestamp>2016-03-15T13:02:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">{{dsc mem fun | cpp/utility/optional/operator* | title=operator-&amp;gt;&lt;br/&gt;operator* | accesses the contained value}}</text>
      <sha1>hl26v3qagmbrfjiut82mtcsbsj5i3xx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc operator=</title>
    <ns>10</ns>
    <id>14811</id>
    <revision>
      <id>84063</id>
      <timestamp>2016-03-15T13:00:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/utility/optional/operator{{=}} | assigns contents}}</text>
      <sha1>gbl38cgjoih13njxdjhxtjfbylmr13n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc reset</title>
    <ns>10</ns>
    <id>15594</id>
    <revision>
      <id>86656</id>
      <timestamp>2016-07-09T05:00:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Created page with &quot;{{dsc mem fun | cpp/utility/optional/reset | destroys any contained value}}&quot;</comment>
      <text xml:space="preserve" bytes="75">{{dsc mem fun | cpp/utility/optional/reset | destroys any contained value}}</text>
      <sha1>sw3sguu7fqrifcvt3x8nyh0xmq6j4o5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc swap</title>
    <ns>10</ns>
    <id>14817</id>
    <revision>
      <id>84079</id>
      <timestamp>2016-03-15T13:19:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="67">{{dsc mem fun | cpp/utility/optional/swap| exchanges the contents}}</text>
      <sha1>sca8x4ptmlfygi2qatvosseavq6cbbi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc swap2</title>
    <ns>10</ns>
    <id>14821</id>
    <revision>
      <id>84091</id>
      <parentid>84090</parentid>
      <timestamp>2016-03-15T13:30:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark</comment>
      <text xml:space="preserve" bytes="154">{{dsc fun | cpp/utility/optional/swap2 | title=std::swap{{dsc small|(std::optional)}} | specializes the {{lc|std::swap}} algorithm|notes={{mark c++17}} }}</text>
      <sha1>t2ttfinxposhcz7ceavjsib2fabndc8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc value</title>
    <ns>10</ns>
    <id>14814</id>
    <revision>
      <id>84071</id>
      <timestamp>2016-03-15T13:12:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="73">{{dsc mem fun | cpp/utility/optional/value| returns the contained value}}</text>
      <sha1>9frr2xwi33nmyddwdd9xq57msbihb7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/dsc value or</title>
    <ns>10</ns>
    <id>14815</id>
    <revision>
      <id>84073</id>
      <timestamp>2016-03-15T13:15:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="116">{{dsc mem fun | cpp/utility/optional/value_or | returns the contained value if available, another value otherwise }}</text>
      <sha1>25i0xgqzhe3sqpvuadwa22mpb3ef8k4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/navbar</title>
    <ns>10</ns>
    <id>14805</id>
    <revision>
      <id>84055</id>
      <timestamp>2016-03-15T12:53:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content
|heading4 = cpp/utility/optional/navbar heading
|content4 = cpp/utility/optional/navbar content
}}</text>
      <sha1>nhlqolhx7ox6xs6b6jzfsmuibv1zon5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/navbar content</title>
    <ns>10</ns>
    <id>14807</id>
    <revision>
      <id>86660</id>
      <parentid>84057</parentid>
      <timestamp>2016-07-09T05:03:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1195">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/optional/optional}}
{{nv mem ln | cpp/utility/optional/~optional}}
{{nv mem ln | cpp/utility/optional/operator{{=}}}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/utility/optional/operator* | operator-&gt; | operator*}}
{{nv mem ln | cpp/utility/optional/operator bool | operator bool | has_value}}
{{nv mem ln | cpp/utility/optional/value}}
{{nv mem ln | cpp/utility/optional/value_or}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/utility/optional/emplace}}
{{nv mem ln | cpp/utility/optional/swap}}
{{nv mem ln | cpp/utility/optional/reset}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/utility/optional/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}} }}
{{nv ln | cpp/utility/optional/make_optional}}
{{nv ln | cpp/utility/optional/swap2 | swap}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/utility/optional/hash}}
{{nv ln | cpp/utility/optional/nullopt_t}}
{{nv ln | cpp/utility/optional/in_place_t}}
{{nv ln | cpp/utility/optional/bad_optional_access}}

{{nv h1 | Helper objects}}
{{nv ln | cpp/utility/optional/nullopt}}
{{nv ln | cpp/utility/optional/in_place}}
{{nv end}}</text>
      <sha1>djjrj2q5zfght2upvhnomzfehd52m5e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/optional/navbar heading</title>
    <ns>10</ns>
    <id>14806</id>
    <revision>
      <id>84056</id>
      <timestamp>2016-03-15T12:53:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="42">{{ltt|cpp/utility/optional|std::optional}}</text>
      <sha1>cr26rd65n7abzr3wec5yyaxjn4buwq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dcl list get</title>
    <ns>10</ns>
    <id>12536</id>
    <redirect title="Template:cpp/utility/pair/dsc get" />
    <revision>
      <id>60737</id>
      <timestamp>2013-06-01T06:52:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/pair/dcl list get]] to [[Template:cpp/utility/pair/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Template:cpp/utility/pair/dsc get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dcl list make pair</title>
    <ns>10</ns>
    <id>12537</id>
    <redirect title="Template:cpp/utility/pair/dsc make pair" />
    <revision>
      <id>60739</id>
      <timestamp>2013-06-01T06:52:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/pair/dcl list make pair]] to [[Template:cpp/utility/pair/dsc make pair]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/pair/dsc make pair]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dcl list operator cmp</title>
    <ns>10</ns>
    <id>12538</id>
    <redirect title="Template:cpp/utility/pair/dsc operator cmp" />
    <revision>
      <id>60741</id>
      <timestamp>2013-06-01T06:52:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/pair/dcl list operator cmp]] to [[Template:cpp/utility/pair/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/pair/dsc operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dcl list swap2</title>
    <ns>10</ns>
    <id>12539</id>
    <redirect title="Template:cpp/utility/pair/dsc swap2" />
    <revision>
      <id>60743</id>
      <timestamp>2013-06-01T06:52:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/pair/dcl list swap2]] to [[Template:cpp/utility/pair/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/utility/pair/dsc swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dcl list tuple element</title>
    <ns>10</ns>
    <id>12540</id>
    <redirect title="Template:cpp/utility/pair/dsc tuple element" />
    <revision>
      <id>60745</id>
      <timestamp>2013-06-01T06:52:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/pair/dcl list tuple element]] to [[Template:cpp/utility/pair/dsc tuple element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/pair/dsc tuple element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dcl list tuple size</title>
    <ns>10</ns>
    <id>12541</id>
    <redirect title="Template:cpp/utility/pair/dsc tuple size" />
    <revision>
      <id>60747</id>
      <timestamp>2013-06-01T06:52:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/pair/dcl list tuple size]] to [[Template:cpp/utility/pair/dsc tuple size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/pair/dsc tuple size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dsc get</title>
    <ns>10</ns>
    <id>2625</id>
    <revision>
      <id>60736</id>
      <parentid>55997</parentid>
      <timestamp>2013-06-01T06:52:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/pair/dcl list get]] to [[Template:cpp/utility/pair/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="139">{{dsc tfun | cpp/utility/pair/get | title=std::get{{dsc small|(std::pair)}} | accesses an element of a {{tt|pair}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dsc make pair</title>
    <ns>10</ns>
    <id>2624</id>
    <revision>
      <id>60738</id>
      <parentid>55998</parentid>
      <timestamp>2013-06-01T06:52:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/pair/dcl list make pair]] to [[Template:cpp/utility/pair/dsc make pair]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="111">{{dsc tfun | cpp/utility/pair/make_pair | creates a {{tt|pair}} object of type, defined by the argument types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dsc operator cmp</title>
    <ns>10</ns>
    <id>2565</id>
    <revision>
      <id>60740</id>
      <parentid>55999</parentid>
      <timestamp>2013-06-01T06:52:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/pair/dcl list operator cmp]] to [[Template:cpp/utility/pair/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="184">{{dsc tfun | cpp/utility/pair/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | lexicographically compares the values in the pair }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dsc swap2</title>
    <ns>10</ns>
    <id>2566</id>
    <revision>
      <id>60742</id>
      <parentid>56002</parentid>
      <timestamp>2013-06-01T06:52:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/pair/dcl list swap2]] to [[Template:cpp/utility/pair/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="148">{{dsc tfun | cpp/utility/pair/swap2 | title=std::swap{{dsc small|(std::pair)}} | specializes the {{lc|std::swap}} algorithm | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dsc tuple element</title>
    <ns>10</ns>
    <id>2627</id>
    <revision>
      <id>60744</id>
      <parentid>56003</parentid>
      <timestamp>2013-06-01T06:52:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/pair/dcl list tuple element]] to [[Template:cpp/utility/pair/dsc tuple element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="173">{{dsc ptclass | cpp/utility/pair/tuple_element | title=std::tuple_element{{dsc small|&lt;std::pair&gt;}} | obtains the type of the elements of {{tt|pair}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/dsc tuple size</title>
    <ns>10</ns>
    <id>2626</id>
    <revision>
      <id>60746</id>
      <parentid>56006</parentid>
      <timestamp>2013-06-01T06:52:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/pair/dcl list tuple size]] to [[Template:cpp/utility/pair/dsc tuple size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="152">{{dsc ptclass | cpp/utility/pair/tuple_size | title=std::tuple_size{{dsc small|&lt;std::pair&gt;}} |obtains the size of a {{tt|pair}} | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/navbar</title>
    <ns>10</ns>
    <id>2122</id>
    <revision>
      <id>47871</id>
      <parentid>40054</parentid>
      <timestamp>2013-05-17T02:13:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="241">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/pair/navbar heading
|content3 = cpp/utility/pair/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/navbar content</title>
    <ns>10</ns>
    <id>2637</id>
    <revision>
      <id>72379</id>
      <parentid>56007</parentid>
      <timestamp>2014-08-18T11:01:17Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="642">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/pair/pair}}
{{nv mem ln | cpp/utility/pair/operator{{=}}}}
{{nv mem ln | cpp/utility/pair/swap}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/utility/pair/make_pair}}
{{nv ln | cpp/utility/pair/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}}}}
{{nv ln | cpp/utility/pair/swap2 | std::swap}}
{{nv ln | cpp/utility/pair/get | notes={{mark c++11}}}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/utility/pair/tuple_size | notes={{mark c++11}}}}
{{nv ln | cpp/utility/pair/tuple_element | notes={{mark c++11}}}}
{{nv end}}</text>
      <sha1>ejr8p4rlny47i366gvdk7ifjsj080bg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/navbar heading</title>
    <ns>10</ns>
    <id>2123</id>
    <revision>
      <id>35989</id>
      <parentid>4584</parentid>
      <timestamp>2012-06-15T22:36:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/pair/sidebar heading]] to [[Template:cpp/utility/pair/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="37">{{ltt| cpp/utility/pair | std::pair}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/pair/title</title>
    <ns>10</ns>
    <id>2595</id>
    <revision>
      <id>9788</id>
      <timestamp>2011-08-25T13:54:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=pair::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="101">&lt;onlyinclude&gt;{{cpp/title | n=pair::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list EXIT status</title>
    <ns>10</ns>
    <id>12542</id>
    <redirect title="Template:cpp/utility/program/dsc EXIT status" />
    <revision>
      <id>60749</id>
      <timestamp>2013-06-01T06:52:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list EXIT status]] to [[Template:cpp/utility/program/dsc EXIT status]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/program/dsc EXIT status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list Exit</title>
    <ns>10</ns>
    <id>12543</id>
    <redirect title="Template:cpp/utility/program/dsc Exit" />
    <revision>
      <id>60751</id>
      <timestamp>2013-06-01T06:52:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list Exit]] to [[Template:cpp/utility/program/dsc Exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/utility/program/dsc Exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list SIG ERR</title>
    <ns>10</ns>
    <id>12544</id>
    <redirect title="Template:cpp/utility/program/dsc SIG ERR" />
    <revision>
      <id>60753</id>
      <timestamp>2013-06-01T06:52:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list SIG ERR]] to [[Template:cpp/utility/program/dsc SIG ERR]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/program/dsc SIG ERR]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list SIG strategies</title>
    <ns>10</ns>
    <id>12545</id>
    <redirect title="Template:cpp/utility/program/dsc SIG strategies" />
    <revision>
      <id>60755</id>
      <timestamp>2013-06-01T06:52:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list SIG strategies]] to [[Template:cpp/utility/program/dsc SIG strategies]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/program/dsc SIG strategies]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list SIG types</title>
    <ns>10</ns>
    <id>12546</id>
    <redirect title="Template:cpp/utility/program/dsc SIG types" />
    <revision>
      <id>60757</id>
      <timestamp>2013-06-01T06:52:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list SIG types]] to [[Template:cpp/utility/program/dsc SIG types]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/program/dsc SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list abort</title>
    <ns>10</ns>
    <id>12547</id>
    <redirect title="Template:cpp/utility/program/dsc abort" />
    <revision>
      <id>60759</id>
      <timestamp>2013-06-01T06:52:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list abort]] to [[Template:cpp/utility/program/dsc abort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/utility/program/dsc abort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list at quick exit</title>
    <ns>10</ns>
    <id>12548</id>
    <redirect title="Template:cpp/utility/program/dsc at quick exit" />
    <revision>
      <id>60761</id>
      <timestamp>2013-06-01T06:52:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list at quick exit]] to [[Template:cpp/utility/program/dsc at quick exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[Template:cpp/utility/program/dsc at quick exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list atexit</title>
    <ns>10</ns>
    <id>12549</id>
    <redirect title="Template:cpp/utility/program/dsc atexit" />
    <revision>
      <id>60763</id>
      <timestamp>2013-06-01T06:52:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list atexit]] to [[Template:cpp/utility/program/dsc atexit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/program/dsc atexit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list exit</title>
    <ns>10</ns>
    <id>12550</id>
    <redirect title="Template:cpp/utility/program/dsc exit" />
    <revision>
      <id>60765</id>
      <timestamp>2013-06-01T06:52:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list exit]] to [[Template:cpp/utility/program/dsc exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/utility/program/dsc exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list getenv</title>
    <ns>10</ns>
    <id>12551</id>
    <redirect title="Template:cpp/utility/program/dsc getenv" />
    <revision>
      <id>60767</id>
      <timestamp>2013-06-01T06:52:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list getenv]] to [[Template:cpp/utility/program/dsc getenv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/program/dsc getenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list jmp buf</title>
    <ns>10</ns>
    <id>12552</id>
    <redirect title="Template:cpp/utility/program/dsc jmp buf" />
    <revision>
      <id>60769</id>
      <timestamp>2013-06-01T06:52:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list jmp buf]] to [[Template:cpp/utility/program/dsc jmp buf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/program/dsc jmp buf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list longjmp</title>
    <ns>10</ns>
    <id>12553</id>
    <redirect title="Template:cpp/utility/program/dsc longjmp" />
    <revision>
      <id>60771</id>
      <timestamp>2013-06-01T06:52:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list longjmp]] to [[Template:cpp/utility/program/dsc longjmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/program/dsc longjmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list quick exit</title>
    <ns>10</ns>
    <id>12554</id>
    <redirect title="Template:cpp/utility/program/dsc quick exit" />
    <revision>
      <id>60773</id>
      <timestamp>2013-06-01T06:52:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list quick exit]] to [[Template:cpp/utility/program/dsc quick exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/program/dsc quick exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list raise</title>
    <ns>10</ns>
    <id>12555</id>
    <redirect title="Template:cpp/utility/program/dsc raise" />
    <revision>
      <id>60775</id>
      <timestamp>2013-06-01T06:52:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list raise]] to [[Template:cpp/utility/program/dsc raise]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/utility/program/dsc raise]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list setjmp</title>
    <ns>10</ns>
    <id>12556</id>
    <redirect title="Template:cpp/utility/program/dsc setjmp" />
    <revision>
      <id>60777</id>
      <timestamp>2013-06-01T06:52:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list setjmp]] to [[Template:cpp/utility/program/dsc setjmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/program/dsc setjmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list signal</title>
    <ns>10</ns>
    <id>12557</id>
    <redirect title="Template:cpp/utility/program/dsc signal" />
    <revision>
      <id>60779</id>
      <timestamp>2013-06-01T06:52:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list signal]] to [[Template:cpp/utility/program/dsc signal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/program/dsc signal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dcl list system</title>
    <ns>10</ns>
    <id>12558</id>
    <redirect title="Template:cpp/utility/program/dsc system" />
    <revision>
      <id>60781</id>
      <timestamp>2013-06-01T06:52:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/program/dcl list system]] to [[Template:cpp/utility/program/dsc system]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[Template:cpp/utility/program/dsc system]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc EXIT status</title>
    <ns>10</ns>
    <id>4548</id>
    <revision>
      <id>60748</id>
      <parentid>56008</parentid>
      <timestamp>2013-06-01T06:52:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list EXIT status]] to [[Template:cpp/utility/program/dsc EXIT status]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="137">{{dsc macro const | cpp/utility/program/EXIT_status | title=EXIT_SUCCESS&lt;br&gt;EXIT_FAILURE | indicates program execution execution status}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc Exit</title>
    <ns>10</ns>
    <id>53</id>
    <revision>
      <id>60750</id>
      <parentid>56009</parentid>
      <timestamp>2013-06-01T06:52:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list Exit]] to [[Template:cpp/utility/program/dsc Exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="118">{{dsc fun | cpp/utility/program/_Exit | causes normal program termination without cleaning up |notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc SIG ERR</title>
    <ns>10</ns>
    <id>4544</id>
    <revision>
      <id>60752</id>
      <parentid>56012</parentid>
      <timestamp>2013-06-01T06:52:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list SIG ERR]] to [[Template:cpp/utility/program/dsc SIG ERR]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="144">{{dsc macro const | cpp/utility/program/SIG_ERR | return value of {{ltt|cpp/utility/program/signal}} specifying that an error was encountered }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc SIG strategies</title>
    <ns>10</ns>
    <id>4543</id>
    <revision>
      <id>60754</id>
      <parentid>56013</parentid>
      <timestamp>2013-06-01T06:52:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list SIG strategies]] to [[Template:cpp/utility/program/dsc SIG strategies]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc macro const | cpp/utility/program/SIG_strategies | title=SIG_DFL&lt;br&gt;SIG_IGN | defines signal handling strategies }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc SIG types</title>
    <ns>10</ns>
    <id>6334</id>
    <revision>
      <id>60756</id>
      <parentid>56016</parentid>
      <timestamp>2013-06-01T06:52:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list SIG types]] to [[Template:cpp/utility/program/dsc SIG types]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="142">{{dsc macro const | cpp/utility/program/SIG_types | title=SIGABRT&lt;br&gt;SIGFPE&lt;br&gt;SIGILL&lt;br&gt;SIGINT&lt;br&gt;SIGSEGV&lt;br&gt;SIGTERM | defines signal types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc abort</title>
    <ns>10</ns>
    <id>63</id>
    <revision>
      <id>60758</id>
      <parentid>56019</parentid>
      <timestamp>2013-06-01T06:52:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list abort]] to [[Template:cpp/utility/program/dsc abort]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc fun | cpp/utility/program/abort | causes abnormal program termination (without cleaning up)}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc at quick exit</title>
    <ns>10</ns>
    <id>64</id>
    <revision>
      <id>60760</id>
      <parentid>56020</parentid>
      <timestamp>2013-06-01T06:52:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list at quick exit]] to [[Template:cpp/utility/program/dsc at quick exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="159">{{dsc fun | cpp/utility/program/at_quick_exit | registers a function to be called on {{ltt|cpp/utility/program/quick_exit}} invocation |notes={{mark c++11}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc atexit</title>
    <ns>10</ns>
    <id>65</id>
    <revision>
      <id>64384</id>
      <parentid>60762</parentid>
      <timestamp>2013-08-15T18:52:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="109">{{dsc fun | cpp/utility/program/atexit | registers a function to be called on {{lc|std::exit()}} invocation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc exit</title>
    <ns>10</ns>
    <id>66</id>
    <revision>
      <id>60764</id>
      <parentid>56028</parentid>
      <timestamp>2013-06-01T06:52:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list exit]] to [[Template:cpp/utility/program/dsc exit]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="91">{{dsc fun | cpp/utility/program/exit | causes normal program termination with cleaning up}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc getenv</title>
    <ns>10</ns>
    <id>67</id>
    <revision>
      <id>60766</id>
      <parentid>56033</parentid>
      <timestamp>2013-06-01T06:52:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list getenv]] to [[Template:cpp/utility/program/dsc getenv]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | cpp/utility/program/getenv | access to the list of environment variables }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc jmp buf</title>
    <ns>10</ns>
    <id>68</id>
    <revision>
      <id>60768</id>
      <parentid>56038</parentid>
      <timestamp>2013-06-01T06:52:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list jmp buf]] to [[Template:cpp/utility/program/dsc jmp buf]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="71">{{dsc typedef | cpp/utility/program/jmp_buf | execution context type }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc longjmp</title>
    <ns>10</ns>
    <id>69</id>
    <revision>
      <id>60770</id>
      <parentid>56039</parentid>
      <timestamp>2013-06-01T06:52:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list longjmp]] to [[Template:cpp/utility/program/dsc longjmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="72">{{dsc fun | cpp/utility/program/longjmp | jumps to specified location }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc quick exit</title>
    <ns>10</ns>
    <id>70</id>
    <revision>
      <id>71953</id>
      <parentid>60772</parentid>
      <timestamp>2014-07-04T16:02:18Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>quick_exit() is not normal program termination</comment>
      <text xml:space="preserve" bytes="132">{{dsc fun | cpp/utility/program/quick_exit | causes quick program termination without completely cleaning up |notes={{mark c++11}}}}</text>
      <sha1>1vwmohktuxjwla58qxxeah2m7jqj441</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc raise</title>
    <ns>10</ns>
    <id>71</id>
    <revision>
      <id>60774</id>
      <parentid>56043</parentid>
      <timestamp>2013-06-01T06:52:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list raise]] to [[Template:cpp/utility/program/dsc raise]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="88">{{dsc fun | cpp/utility/program/raise | runs the signal handler for particular signal }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc setjmp</title>
    <ns>10</ns>
    <id>72</id>
    <revision>
      <id>60776</id>
      <parentid>56044</parentid>
      <timestamp>2013-06-01T06:52:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list setjmp]] to [[Template:cpp/utility/program/dsc setjmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="67">{{dsc macro fun | cpp/utility/program/setjmp | saves the context }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc signal</title>
    <ns>10</ns>
    <id>73</id>
    <revision>
      <id>60778</id>
      <parentid>56047</parentid>
      <timestamp>2013-06-01T06:52:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list signal]] to [[Template:cpp/utility/program/dsc signal]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="87">{{dsc fun | cpp/utility/program/signal | sets a signal handler for particular signal }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/dsc system</title>
    <ns>10</ns>
    <id>74</id>
    <revision>
      <id>60780</id>
      <parentid>56048</parentid>
      <timestamp>2013-06-01T06:52:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/dcl list system]] to [[Template:cpp/utility/program/dsc system]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="90">{{dsc fun | cpp/utility/program/system | calls the host environment's command processor }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/navbar</title>
    <ns>10</ns>
    <id>75</id>
    <revision>
      <id>40055</id>
      <parentid>36026</parentid>
      <timestamp>2012-09-28T20:21:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="247">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/program/navbar heading
|content3 = cpp/utility/program/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/navbar content</title>
    <ns>10</ns>
    <id>2450</id>
    <revision>
      <id>56049</id>
      <parentid>36581</parentid>
      <timestamp>2013-06-01T05:30:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1251">{{nv begin}}
{{nv h1 | Program termination}}
{{nv col begin}}
{{nv ln | cpp/utility/program/abort}}
{{nv ln | cpp/utility/program/exit}}
{{nv ln | cpp/utility/program/quick_exit | notes={{mark c++11}}}}
{{nv ln | cpp/utility/program/_Exit | notes={{mark c++11}}}}
{{nv col next}}
{{nv ln | cpp/utility/program/atexit}}
{{nv ln | cpp/utility/program/at_quick_exit | notes={{mark c++11}}}}
{{nv ln | cpp/utility/program/EXIT_status | EXIT_SUCCESS | EXIT_FAILURE}}
{{nv col end}}

{{nv h1 | Communicating with the environment}}
{{nv col begin}}
{{nv ln | cpp/utility/program/system}}
{{nv col next}}
{{nv ln | cpp/utility/program/getenv}}
{{nv col end}}

{{nv h1 | Signals}}
{{nv col begin}}
{{nv ln | cpp/utility/program/signal}}
{{nv ln | cpp/utility/program/raise}}
{{nv ln | cpp/utility/program/sig_atomic_t}}
{{nv col next}}
{{nv ln | cpp/utility/program/SIG_strategies | SIG_DFL | SIG_IGN}}
{{nv ln | cpp/utility/program/SIG_ERR}}
{{nv col end}}

{{nv h2 | Signal types}}
{{nv ln | cpp/utility/program/SIG_types | SIGABRT | SIGFPE | SIGILL | SIGINT | SIGSEGV | SIGTERM}}

{{nv h1 | Non-local jumps}}
{{nv ln | cpp/utility/program/setjmp}}
{{nv ln | cpp/utility/program/longjmp}}

{{nv h2 | Types}}
{{nv ln | cpp/utility/program/jmp_buf}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/program/navbar heading</title>
    <ns>10</ns>
    <id>76</id>
    <revision>
      <id>35993</id>
      <parentid>151</parentid>
      <timestamp>2012-06-15T22:36:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/program/sidebar heading]] to [[Template:cpp/utility/program/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="51">[[cpp/utility/program | Program support utilities]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/rel ops/dcl list operator cmp</title>
    <ns>10</ns>
    <id>12559</id>
    <redirect title="Template:cpp/utility/rel ops/dsc operator cmp" />
    <revision>
      <id>60783</id>
      <timestamp>2013-06-01T06:52:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/rel ops/dcl list operator cmp]] to [[Template:cpp/utility/rel ops/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/utility/rel ops/dsc operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/rel ops/dsc operator cmp</title>
    <ns>10</ns>
    <id>4256</id>
    <revision>
      <id>60782</id>
      <parentid>56052</parentid>
      <timestamp>2013-06-01T06:52:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/rel ops/dcl list operator cmp]] to [[Template:cpp/utility/rel ops/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="218">{{dsc tfun | cpp/utility/rel_ops/operator_cmp | title=operator!=&lt;br&gt;operator&gt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;= | automatically generates comparison operators based on user-defined {{c|operator{{==}}}} and {{c|operator&lt;}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/rel ops/title</title>
    <ns>10</ns>
    <id>2995</id>
    <revision>
      <id>15427</id>
      <parentid>15426</parentid>
      <timestamp>2011-12-09T14:56:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add fourth option</comment>
      <text xml:space="preserve" bytes="115">&lt;onlyinclude&gt;{{cpp/title | n=rel_ops::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}} | {{{4|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list forward as tuple</title>
    <ns>10</ns>
    <id>12560</id>
    <redirect title="Template:cpp/utility/tuple/dsc forward as tuple" />
    <revision>
      <id>60785</id>
      <timestamp>2013-06-01T06:52:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list forward as tuple]] to [[Template:cpp/utility/tuple/dsc forward as tuple]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[Template:cpp/utility/tuple/dsc forward as tuple]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list get</title>
    <ns>10</ns>
    <id>12561</id>
    <redirect title="Template:cpp/utility/tuple/dsc get" />
    <revision>
      <id>60787</id>
      <timestamp>2013-06-01T06:52:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list get]] to [[Template:cpp/utility/tuple/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/utility/tuple/dsc get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list ignore</title>
    <ns>10</ns>
    <id>12562</id>
    <redirect title="Template:cpp/utility/tuple/dsc ignore" />
    <revision>
      <id>60789</id>
      <timestamp>2013-06-01T06:52:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list ignore]] to [[Template:cpp/utility/tuple/dsc ignore]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[Template:cpp/utility/tuple/dsc ignore]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list make tuple</title>
    <ns>10</ns>
    <id>12563</id>
    <redirect title="Template:cpp/utility/tuple/dsc make tuple" />
    <revision>
      <id>60791</id>
      <timestamp>2013-06-01T06:52:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list make tuple]] to [[Template:cpp/utility/tuple/dsc make tuple]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/tuple/dsc make tuple]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list operator cmp</title>
    <ns>10</ns>
    <id>12564</id>
    <redirect title="Template:cpp/utility/tuple/dsc operator cmp" />
    <revision>
      <id>60793</id>
      <timestamp>2013-06-01T06:52:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list operator cmp]] to [[Template:cpp/utility/tuple/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="57">#REDIRECT [[Template:cpp/utility/tuple/dsc operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list swap2</title>
    <ns>10</ns>
    <id>12565</id>
    <redirect title="Template:cpp/utility/tuple/dsc swap2" />
    <revision>
      <id>60795</id>
      <timestamp>2013-06-01T06:52:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list swap2]] to [[Template:cpp/utility/tuple/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[Template:cpp/utility/tuple/dsc swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list tie</title>
    <ns>10</ns>
    <id>12566</id>
    <redirect title="Template:cpp/utility/tuple/dsc tie" />
    <revision>
      <id>60797</id>
      <timestamp>2013-06-01T06:52:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tie]] to [[Template:cpp/utility/tuple/dsc tie]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[Template:cpp/utility/tuple/dsc tie]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list tuple cat</title>
    <ns>10</ns>
    <id>12567</id>
    <redirect title="Template:cpp/utility/tuple/dsc tuple cat" />
    <revision>
      <id>60799</id>
      <timestamp>2013-06-01T06:52:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tuple cat]] to [[Template:cpp/utility/tuple/dsc tuple cat]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/tuple/dsc tuple cat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list tuple element</title>
    <ns>10</ns>
    <id>12568</id>
    <redirect title="Template:cpp/utility/tuple/dsc tuple element" />
    <revision>
      <id>60801</id>
      <timestamp>2013-06-01T06:52:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tuple element]] to [[Template:cpp/utility/tuple/dsc tuple element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[Template:cpp/utility/tuple/dsc tuple element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list tuple size</title>
    <ns>10</ns>
    <id>12569</id>
    <redirect title="Template:cpp/utility/tuple/dsc tuple size" />
    <revision>
      <id>60803</id>
      <timestamp>2013-06-01T06:52:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tuple size]] to [[Template:cpp/utility/tuple/dsc tuple size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/tuple/dsc tuple size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dcl list uses allocator</title>
    <ns>10</ns>
    <id>12570</id>
    <redirect title="Template:cpp/utility/tuple/dsc uses allocator" />
    <revision>
      <id>60805</id>
      <timestamp>2013-06-01T06:52:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/tuple/dcl list uses allocator]] to [[Template:cpp/utility/tuple/dsc uses allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[Template:cpp/utility/tuple/dsc uses allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc forward as tuple</title>
    <ns>10</ns>
    <id>2686</id>
    <revision>
      <id>60784</id>
      <parentid>56053</parentid>
      <timestamp>2013-06-01T06:52:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list forward as tuple]] to [[Template:cpp/utility/tuple/dsc forward as tuple]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="95">{{dsc tfun | cpp/utility/tuple/forward_as_tuple | creates a {{tt|tuple}} of rvalue references}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc get</title>
    <ns>10</ns>
    <id>2765</id>
    <revision>
      <id>60786</id>
      <parentid>56054</parentid>
      <timestamp>2013-06-01T06:52:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list get]] to [[Template:cpp/utility/tuple/dsc get]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="114">{{dsc tfun | cpp/utility/tuple/get | title=std::get{{dsc small|(std::tuple)}} | tuple accesses specified element}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc ignore</title>
    <ns>10</ns>
    <id>2688</id>
    <revision>
      <id>60788</id>
      <parentid>56055</parentid>
      <timestamp>2013-06-01T06:52:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list ignore]] to [[Template:cpp/utility/tuple/dsc ignore]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="140">{{dsc const | cpp/utility/tuple/ignore | placeholder to skip an element when unpacking a {{tt|tuple}} using {{ltt|cpp/utility/tuple/tie}} }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc make tuple</title>
    <ns>10</ns>
    <id>2684</id>
    <revision>
      <id>60790</id>
      <parentid>56058</parentid>
      <timestamp>2013-06-01T06:52:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list make tuple]] to [[Template:cpp/utility/tuple/dsc make tuple]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="117">{{dsc tfun | cpp/utility/tuple/make_tuple | creates a {{tt|tuple}} object of the type defined by the argument types}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc operator cmp</title>
    <ns>10</ns>
    <id>2573</id>
    <revision>
      <id>60792</id>
      <parentid>56059</parentid>
      <timestamp>2013-06-01T06:52:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list operator cmp]] to [[Template:cpp/utility/tuple/dsc operator cmp]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="186">{{dsc tfun | cpp/utility/tuple/operator_cmp | title=operator==&lt;br&gt;operator!=&lt;br&gt;operator&lt;&lt;br&gt;operator&lt;=&lt;br&gt;operator&gt;&lt;br&gt;operator&gt;= | lexicographically compares the values in the tuple }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc swap2</title>
    <ns>10</ns>
    <id>2574</id>
    <revision>
      <id>60794</id>
      <parentid>56062</parentid>
      <timestamp>2013-06-01T06:52:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list swap2]] to [[Template:cpp/utility/tuple/dsc swap2]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="150">{{dsc tfun | cpp/utility/tuple/swap2 | title=std::swap{{dsc small|(std::tuple)}} | specializes the {{lc|std::swap}} algorithm | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc tie</title>
    <ns>10</ns>
    <id>2685</id>
    <revision>
      <id>60796</id>
      <parentid>56063</parentid>
      <timestamp>2013-06-01T06:52:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tie]] to [[Template:cpp/utility/tuple/dsc tie]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="125">{{dsc tfun | cpp/utility/tuple/tie | creates a {{tt|tuple}} of lvalue references or unpacks a tuple into individual objects}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc tuple cat</title>
    <ns>10</ns>
    <id>2687</id>
    <revision>
      <id>60798</id>
      <parentid>56064</parentid>
      <timestamp>2013-06-01T06:52:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tuple cat]] to [[Template:cpp/utility/tuple/dsc tuple cat]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="105">{{dsc tfun | cpp/utility/tuple/tuple_cat | creates a {{tt|tuple}} by concatenating any number of tuples}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc tuple element</title>
    <ns>10</ns>
    <id>2766</id>
    <revision>
      <id>60800</id>
      <parentid>56067</parentid>
      <timestamp>2013-06-01T06:52:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tuple element]] to [[Template:cpp/utility/tuple/dsc tuple element]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc ptclass | cpp/utility/tuple/tuple_element | obtains the type of the specified element }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc tuple size</title>
    <ns>10</ns>
    <id>2767</id>
    <revision>
      <id>60802</id>
      <parentid>56068</parentid>
      <timestamp>2013-06-01T06:52:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list tuple size]] to [[Template:cpp/utility/tuple/dsc tuple size]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="98">{{dsc ptclass | cpp/utility/tuple/tuple_size | obtains the size of {{tt|tuple}} at compile time }}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/dsc uses allocator</title>
    <ns>10</ns>
    <id>2768</id>
    <revision>
      <id>60804</id>
      <parentid>56069</parentid>
      <timestamp>2013-06-01T06:52:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/tuple/dcl list uses allocator]] to [[Template:cpp/utility/tuple/dsc uses allocator]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="183">{{dsc ptclass | cpp/utility/tuple/uses_allocator | title=std::uses_allocator{{dsc small|&lt;std::tuple&gt;}} | specializes the {{lc|std::uses_allocator}} type trait | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/navbar</title>
    <ns>10</ns>
    <id>2380</id>
    <revision>
      <id>47770</id>
      <parentid>40056</parentid>
      <timestamp>2013-05-16T20:26:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="243">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/tuple/navbar heading
|content3 = cpp/utility/tuple/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/navbar content</title>
    <ns>10</ns>
    <id>2680</id>
    <revision>
      <id>72380</id>
      <parentid>56072</parentid>
      <timestamp>2014-08-18T11:04:31Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="789">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/tuple/tuple}}
{{nv mem ln | cpp/utility/tuple/operator{{=}}}}
{{nv mem ln | cpp/utility/tuple/swap}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/utility/tuple/make_tuple}}
{{nv ln | cpp/utility/tuple/tie}}
{{nv ln | cpp/utility/tuple/forward_as_tuple}}
{{nv ln | cpp/utility/tuple/tuple_cat |}}
{{nv ln | cpp/utility/tuple/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}}}}
{{nv ln | cpp/utility/tuple/swap2 | std::swap}}
{{nv ln | cpp/utility/tuple/get}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/utility/tuple/tuple_size}}
{{nv ln | cpp/utility/tuple/tuple_element}}
{{nv ln | cpp/utility/tuple/uses_allocator}}
{{nv ln | cpp/utility/tuple/ignore}}
{{nv end}}</text>
      <sha1>ood7dat4hluhocqghgb4kkaio14vn41</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/navbar heading</title>
    <ns>10</ns>
    <id>2381</id>
    <revision>
      <id>47767</id>
      <parentid>33366</parentid>
      <timestamp>2013-05-16T20:24:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplify</comment>
      <text xml:space="preserve" bytes="36">{{ltt|cpp/utility/tuple|std::tuple}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/tuple/title</title>
    <ns>10</ns>
    <id>2674</id>
    <revision>
      <id>10068</id>
      <timestamp>2011-08-30T01:47:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Created page with &quot;&lt;onlyinclude&gt;{{cpp/title | n=tuple::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="102">&lt;onlyinclude&gt;{{cpp/title | n=tuple::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dcl list va arg</title>
    <ns>10</ns>
    <id>12571</id>
    <redirect title="Template:cpp/utility/variadic/dsc va arg" />
    <revision>
      <id>60807</id>
      <timestamp>2013-06-01T06:52:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va arg]] to [[Template:cpp/utility/variadic/dsc va arg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/variadic/dsc va arg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dcl list va copy</title>
    <ns>10</ns>
    <id>12572</id>
    <redirect title="Template:cpp/utility/variadic/dsc va copy" />
    <revision>
      <id>60809</id>
      <timestamp>2013-06-01T06:52:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va copy]] to [[Template:cpp/utility/variadic/dsc va copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/variadic/dsc va copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dcl list va end</title>
    <ns>10</ns>
    <id>12573</id>
    <redirect title="Template:cpp/utility/variadic/dsc va end" />
    <revision>
      <id>60811</id>
      <timestamp>2013-06-01T06:52:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va end]] to [[Template:cpp/utility/variadic/dsc va end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[Template:cpp/utility/variadic/dsc va end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dcl list va list</title>
    <ns>10</ns>
    <id>12574</id>
    <redirect title="Template:cpp/utility/variadic/dsc va list" />
    <revision>
      <id>60813</id>
      <timestamp>2013-06-01T06:52:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va list]] to [[Template:cpp/utility/variadic/dsc va list]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="55">#REDIRECT [[Template:cpp/utility/variadic/dsc va list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dcl list va start</title>
    <ns>10</ns>
    <id>12575</id>
    <redirect title="Template:cpp/utility/variadic/dsc va start" />
    <revision>
      <id>60815</id>
      <timestamp>2013-06-01T06:52:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va start]] to [[Template:cpp/utility/variadic/dsc va start]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[Template:cpp/utility/variadic/dsc va start]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dsc va arg</title>
    <ns>10</ns>
    <id>8530</id>
    <revision>
      <id>60806</id>
      <parentid>56075</parentid>
      <timestamp>2013-06-01T06:52:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va arg]] to [[Template:cpp/utility/variadic/dsc va arg]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="94">{{dsc macro fun | cpp/utility/variadic/va_arg | accesses the next variadic function argument}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dsc va copy</title>
    <ns>10</ns>
    <id>8531</id>
    <revision>
      <id>60808</id>
      <parentid>56078</parentid>
      <timestamp>2013-06-01T06:52:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va copy]] to [[Template:cpp/utility/variadic/dsc va copy]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="121">{{dsc macro fun | cpp/utility/variadic/va_copy | makes a copy of the variadic function arguments | notes={{mark c++11}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dsc va end</title>
    <ns>10</ns>
    <id>8532</id>
    <revision>
      <id>60810</id>
      <parentid>56083</parentid>
      <timestamp>2013-06-01T06:52:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va end]] to [[Template:cpp/utility/variadic/dsc va end]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="99">{{dsc macro fun | cpp/utility/variadic/va_end | ends traversal of the variadic function arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dsc va list</title>
    <ns>10</ns>
    <id>8533</id>
    <revision>
      <id>76369</id>
      <parentid>60812</parentid>
      <timestamp>2015-02-17T01:41:48Z</timestamp>
      <contributor>
        <ip>58.67.157.28</ip>
      </contributor>
      <text xml:space="preserve" bytes="118">{{dsc typedef | cpp/utility/variadic/va_list | holds the information needed by va_start, va_arg, va_end, and va_copy}}</text>
      <sha1>r40clgh2s3a6fmq9sf7ox2l37eq5gay</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/dsc va start</title>
    <ns>10</ns>
    <id>8529</id>
    <revision>
      <id>60814</id>
      <parentid>56093</parentid>
      <timestamp>2013-06-01T06:52:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/variadic/dcl list va start]] to [[Template:cpp/utility/variadic/dsc va start]]: Robot: Moved page</comment>
      <text xml:space="preserve" bytes="97">{{dsc macro fun | cpp/utility/variadic/va_start | enables access to variadic function arguments}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/navbar</title>
    <ns>10</ns>
    <id>3441</id>
    <revision>
      <id>40057</id>
      <parentid>35661</parentid>
      <timestamp>2012-09-28T20:21:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use new navbar interface</comment>
      <text xml:space="preserve" bytes="250">{{navbar
|heading1 = cpp/navbar heading

|content1 = cpp/navbar content

|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content

|heading3 = cpp/utility/variadic/navbar heading
|content3 = cpp/utility/variadic/navbar content
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/navbar content</title>
    <ns>10</ns>
    <id>3443</id>
    <revision>
      <id>56096</id>
      <parentid>35996</parentid>
      <timestamp>2013-06-01T05:30:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="227">{{nv begin}}
{{nv ln | cpp/utility/variadic/va_start}}
{{nv ln | cpp/utility/variadic/va_arg}}
{{nv ln | cpp/utility/variadic/va_copy}}
{{nv ln | cpp/utility/variadic/va_end}}
{{nv ln | cpp/utility/variadic/va_list}}
{{nv end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variadic/navbar heading</title>
    <ns>10</ns>
    <id>3442</id>
    <revision>
      <id>35235</id>
      <parentid>12961</parentid>
      <timestamp>2012-06-15T22:20:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:cpp/utility/variadic/sidebar heading]] to [[Template:cpp/utility/variadic/navbar heading]]: Text replace - &quot;/sidebar&quot; to &quot;/navbar&quot;</comment>
      <text xml:space="preserve" bytes="45">[[cpp/utility/variadic | Variadic functions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc bad variant access</title>
    <ns>10</ns>
    <id>15573</id>
    <revision>
      <id>86580</id>
      <timestamp>2016-07-06T21:18:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="141">{{dsc class | cpp/utility/variant/bad_variant_access | exception thrown on invalid accesses to the value of a variant|notes={{mark c++17}} }}</text>
      <sha1>butalq2fs6gnizacvdjqpcec6zv44n4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc constructor</title>
    <ns>10</ns>
    <id>15560</id>
    <revision>
      <id>86563</id>
      <timestamp>2016-07-06T20:56:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="78">{{dsc mem ctor | cpp/utility/variant/variant | constructs the variant object}}</text>
      <sha1>gisgrliszmvnryo7hvk4kh3yrhmikqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc destructor</title>
    <ns>10</ns>
    <id>15561</id>
    <revision>
      <id>86564</id>
      <timestamp>2016-07-06T20:57:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{dsc mem dtor | cpp/utility/variant/~variant | destroys the variant, along with its contained value}}</text>
      <sha1>ir8g3lalgf8dqyqt56qcjnwp5o5dg9q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc emplace</title>
    <ns>10</ns>
    <id>15565</id>
    <revision>
      <id>86568</id>
      <timestamp>2016-07-06T21:03:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="91">{{dsc mem fun | cpp/utility/variant/emplace | constructs a value in the variant, in place}}</text>
      <sha1>5txp49i8z2efmn9ckgapv05bficnxcg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc get</title>
    <ns>10</ns>
    <id>15569</id>
    <revision>
      <id>86744</id>
      <parentid>86576</parentid>
      <timestamp>2016-07-12T16:55:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>overload title</comment>
      <text xml:space="preserve" bytes="207">{{dsc tfun | cpp/utility/variant/get | title=std::get{{dsc small|(std::variant)}} |reads the value of the variant given the index or the type (if the type is unique), throws on error |notes={{mark c++17}} }}</text>
      <sha1>nhkmbo8k741xmnoy1um84autoas059x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc get if</title>
    <ns>10</ns>
    <id>15570</id>
    <revision>
      <id>86577</id>
      <parentid>86575</parentid>
      <timestamp>2016-07-06T21:13:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="182">{{dsc tfun | cpp/utility/variant/get_if |obtains a pointer to the value of a pointed-to variant given the index or the type (if unique), returns null on error|notes={{mark c++17}} }}</text>
      <sha1>4z0ce4cj57g7tha0fjeo24b452wn8pj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc hash</title>
    <ns>10</ns>
    <id>15576</id>
    <revision>
      <id>86585</id>
      <parentid>86583</parentid>
      <timestamp>2016-07-06T21:28:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="154">{{dsc ptclass | cpp/utility/variant/hash | title=std::hash{{dsc small|&lt;std::variant&gt;}} |specializes the {{lc|std::hash}} algorithm |notes={{mark c++17}}}}</text>
      <sha1>jj5ykwgp70ikhxat8wnhcacz5no83qr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc holds alternative</title>
    <ns>10</ns>
    <id>15568</id>
    <revision>
      <id>86573</id>
      <parentid>86572</parentid>
      <timestamp>2016-07-06T21:10:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 86572 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) wrong line</comment>
      <text xml:space="preserve" bytes="133">{{dsc tfun | cpp/utility/variant/holds_alternative | checks if a given type appears exactly once in a variant|notes={{mark c++17}} }}</text>
      <sha1>3ayjlbcof7jvyp3go2huf6jjdu2aagl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc in place index</title>
    <ns>10</ns>
    <id>15580</id>
    <revision>
      <id>86590</id>
      <parentid>86589</parentid>
      <timestamp>2016-07-06T21:33:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="201">{{dsc class | cpp/utility/variant/in_place_index|title=in_place_index_t&lt;br&gt;in_place_index| disambiguation tag and tag type for in-place index-based construction of variant types| notes={{mark c++17}}}}</text>
      <sha1>9h2q0ix1ut4bm4wzib5igth0fbtgb8p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc in place type</title>
    <ns>10</ns>
    <id>15579</id>
    <revision>
      <id>86588</id>
      <parentid>86587</parentid>
      <timestamp>2016-07-06T21:33:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="197">{{dsc class | cpp/utility/variant/in_place_type|title=in_place_type_t&lt;br&gt;in_place_type| disambiguation tag and tag type for in-place type-based construction of variant types| notes={{mark c++17}}}}</text>
      <sha1>an04m10po79rt37ubn67sjazonnht8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc index</title>
    <ns>10</ns>
    <id>15563</id>
    <revision>
      <id>86566</id>
      <timestamp>2016-07-06T21:01:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="113">{{dsc mem fun | cpp/utility/variant/index | returns the zero-based index of the alternative held by the variant}}</text>
      <sha1>hzld91n1h8iqde37d43db36qh54z38x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc monostate</title>
    <ns>10</ns>
    <id>15572</id>
    <revision>
      <id>86579</id>
      <timestamp>2016-07-06T21:17:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="166">{{dsc class | cpp/utility/variant/monostate | placeholder type for use as the first alternative in a variant of non-default-contructible types|notes={{mark c++17}} }}</text>
      <sha1>skk6fvvpepgu1kvdp0nebo8isor2cbm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc operator cmp</title>
    <ns>10</ns>
    <id>15571</id>
    <revision>
      <id>86578</id>
      <timestamp>2016-07-06T21:15:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="229">{{dsc tfun | cpp/utility/variant/operator_cmp | title=operator{{==}}&lt;br/&gt;operator!{{=}}&lt;br/&gt;operator&lt;&lt;br/&gt;operator&lt;=&lt;br/&gt;operator&gt;&lt;br/&gt;operator&gt;= | compares {{tt|variant}} objects as their contained values|notes={{mark c++17}} }}</text>
      <sha1>j9n1f9oe3o2q1s7et3svwnkxotfewci</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc operator=</title>
    <ns>10</ns>
    <id>15562</id>
    <revision>
      <id>86565</id>
      <timestamp>2016-07-06T20:59:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="72">{{dsc mem fun | cpp/utility/variant/operator{{=}} | assigns a variant }}</text>
      <sha1>pta7pgktd71uddmazephhtiy2kwzqbw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc swap</title>
    <ns>10</ns>
    <id>15566</id>
    <revision>
      <id>86569</id>
      <timestamp>2016-07-06T21:03:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="71">{{dsc mem fun | cpp/utility/variant/swap | swaps with another variant}}</text>
      <sha1>9aeoaixl8djetchozn152s7xcm67x7y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc swap2</title>
    <ns>10</ns>
    <id>15607</id>
    <revision>
      <id>86711</id>
      <timestamp>2016-07-11T14:55:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="152">{{dsc fun | cpp/utility/variant/swap2 | title=std::swap{{dsc small|(std::variant)}} | specializes the {{lc|std::swap}} algorithm|notes={{mark c++17}} }}</text>
      <sha1>1imabjfmr7xfdgnlslhrb0caqetglmf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc uses allocator</title>
    <ns>10</ns>
    <id>15577</id>
    <revision>
      <id>86584</id>
      <timestamp>2016-07-06T21:27:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="186">{{dsc ptclass | cpp/utility/variant/uses_allocator| title=std::uses_allocator{{dsc small|&lt;std::variant&gt;}} | specializes the {{lc|std::uses_allocator}} type trait | notes={{mark c++17}}}}</text>
      <sha1>pyymauo5k141dj54dd4n68n3zvoxaac</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc valueless by exception</title>
    <ns>10</ns>
    <id>15564</id>
    <revision>
      <id>86567</id>
      <timestamp>2016-07-06T21:01:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="108">{{dsc mem fun | cpp/utility/variant/valueless_by_exception | checks if the variant is in the invalid state}}</text>
      <sha1>ctztbcbt81zxqjju2xndxgoangg4d4f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc variant alternative</title>
    <ns>10</ns>
    <id>15575</id>
    <revision>
      <id>86752</id>
      <parentid>86582</parentid>
      <timestamp>2016-07-12T18:34:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>giving a try to a combined trait + trait_t dsc entry</comment>
      <text xml:space="preserve" bytes="214">{{dsc tclass_and_t | cpp/utility/variant/variant_alternative| title=variant_alternative&lt;br&gt;variant_alternative_t| obtains the type of the alternative specified by its index, at compile time |notes={{mark c++17}} }}</text>
      <sha1>5406rqo6eae1pjqfxuclbzcgl8985z1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc variant npos</title>
    <ns>10</ns>
    <id>15578</id>
    <revision>
      <id>86586</id>
      <timestamp>2016-07-06T21:30:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="114">{{dsc const | cpp/utility/variant/variant_npos | index of the variant in the invalid state| notes={{mark c++17}}}}</text>
      <sha1>j725fximuaml79e4zdhcrwg7umldqbg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc variant size</title>
    <ns>10</ns>
    <id>15574</id>
    <revision>
      <id>86750</id>
      <parentid>86581</parentid>
      <timestamp>2016-07-12T18:31:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>giving a try to a combined trait + trait_v dsc entry</comment>
      <text xml:space="preserve" bytes="188">{{dsc tclass_and_v | cpp/utility/variant/variant_size | title=variant_size&lt;br&gt;variant_size_v|obtains the size of the variant's list of alternatives at compile time |notes={{mark c++17}} }}</text>
      <sha1>t9uzl6l7twb2rdviscgc0yburvhb3jz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/dsc visit</title>
    <ns>10</ns>
    <id>15567</id>
    <revision>
      <id>86570</id>
      <timestamp>2016-07-06T21:06:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="140">{{dsc tfun | cpp/utility/variant/visit | calls the provided functor with the arguments held by one or more variants |notes={{mark c++17}} }}</text>
      <sha1>ew5osr96le0j9bqsgk6mg7733jfm1za</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/navbar</title>
    <ns>10</ns>
    <id>15557</id>
    <revision>
      <id>86559</id>
      <timestamp>2016-07-06T20:31:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="245">{{navbar
|heading1 = cpp/navbar heading
|content1 = cpp/navbar content
|heading2 = cpp/utility/navbar heading
|content2 = cpp/utility/navbar content
|heading4 = cpp/utility/variant/navbar heading
|content4 = cpp/utility/variant/navbar content
}}</text>
      <sha1>9kgttt9t2shhn9taqjkcbtcpk7vzl04</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/navbar content</title>
    <ns>10</ns>
    <id>15559</id>
    <revision>
      <id>86638</id>
      <parentid>86562</parentid>
      <timestamp>2016-07-07T19:02:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>moved out in_place</comment>
      <text xml:space="preserve" bytes="1178">{{nv begin}}
{{nv h1 | Member functions}}
{{nv mem ln | cpp/utility/variant/variant}}
{{nv mem ln | cpp/utility/variant/~variant}}
{{nv mem ln | cpp/utility/variant/operator{{=}}}}

{{nv h2 | Observers}}
{{nv mem ln | cpp/utility/variant/index}}
{{nv mem ln | cpp/utility/variant/valueless_by_exception}}

{{nv h2 | Modifiers}}
{{nv mem ln | cpp/utility/variant/emplace}}
{{nv mem ln | cpp/utility/variant/swap}}

{{nv h1 | Non-member functions}}
{{nv ln | cpp/utility/variant/visit}}
{{nv ln | cpp/utility/variant/holds_alternative}}
{{nv ln | cpp/utility/variant/get}}
{{nv ln | cpp/utility/variant/get_if}}
{{nv ln | cpp/utility/variant/operator_cmp | operator{{==}} | operator!{{=}} | operator&lt; | operator&lt;{{=}} | operator&gt; | operator&gt;{{=}} }}
{{nv ln | cpp/utility/variant/swap2 | swap}}

{{nv h1 | Helper classes}}
{{nv ln | cpp/utility/variant/monostate}}
{{nv ln | cpp/utility/variant/bad_variant_access}}
{{nv ln | cpp/utility/variant/variant_size}}
{{nv ln | cpp/utility/variant/variant_alternative}}
{{nv ln | cpp/utility/variant/hash}}
{{nv ln | cpp/utility/variant/uses_allocator}}

{{nv h1 | Helper objects}}
{{nv ln | cpp/utility/variant/variant_npos}}
{{nv end}}</text>
      <sha1>bnz17ykwmn3jdg26zbsu4ab6cgbpmxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/utility/variant/navbar heading</title>
    <ns>10</ns>
    <id>15558</id>
    <revision>
      <id>86560</id>
      <timestamp>2016-07-06T20:32:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="40">{{ltt|cpp/utility/variant|std::variant}}</text>
      <sha1>szfjmkb6n1unnshs0lzjzqyttr2hlm0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/variant/title</title>
    <ns>10</ns>
    <id>15581</id>
    <revision>
      <id>86604</id>
      <timestamp>2016-07-07T14:51:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;{{cpp/title | n=variant::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1>1sz6cze7n3jsg23w5eltvwoa287qwsd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/wbuffer convert/title</title>
    <ns>10</ns>
    <id>5199</id>
    <revision>
      <id>18804</id>
      <timestamp>2012-02-16T04:34:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=wbuffer_convert::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:cpp/wstring convert/title</title>
    <ns>10</ns>
    <id>4570</id>
    <revision>
      <id>16123</id>
      <timestamp>2011-12-21T21:56:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{{cpp/title | n=wstring_convert::{{trim|{{{n|}}}}} | {{{1|}}} | {{{2|}}} | {{{3|}}}}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ctitle</title>
    <ns>10</ns>
    <id>81</id>
    <revision>
      <id>18038</id>
      <parentid>17902</parentid>
      <timestamp>2012-01-20T00:36:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>remove trailing ::, if any</comment>
      <text xml:space="preserve" bytes="901">&lt;onlyinclude&gt;{{#if: {{#pos: #MAGICTITLESTRING# | {{{1|}}}}}&lt;!--
--&gt;|{{#replace:{{#replace:{{{n|}}}#MAGICTITLESTRING#|::#MAGICTITLESTRING#}}|#MAGICTITLESTRING#}}&lt;!-- remove trailing '::', if any
--&gt;|{{title|&lt;!--
  --&gt;{{#if:{{{n|}}}|{{small|{{trim|{{{n}}}}}}}}}{{trim|{{{1|}}}}}&lt;!--
  --&gt;{{#if:{{{2|}}}|&lt;!--
    --&gt;, {{#if:{{{n|}}}|{{small|{{trim|{{{n}}}}}}}}}{{trim|{{{2}}}}}&lt;!--
  --&gt;}}&lt;!--
  --&gt;{{#if:{{{3|}}}|&lt;!--
    --&gt;, {{#if:{{{n|}}}|{{small|{{trim|{{{n}}}}}}}}}{{trim|{{{3}}}}}&lt;!--
  --&gt;}}&lt;!--
  --&gt;{{#if:{{{4|}}}|&lt;!--
    --&gt;, {{#if:{{{n|}}}|{{small|{{trim|{{{n}}}}}}}}}{{trim|{{{4}}}}}&lt;!--
  --&gt;}}&lt;!--
  --&gt;{{#if:{{{5|}}}|&lt;!--
    --&gt;, {{#if:{{{n|}}}|{{small|{{trim|{{{n}}}}}}}}}{{trim|{{{5}}}}}&lt;!--
  --&gt;}}&lt;!--
  --&gt;{{#if:{{{6|}}}|&lt;!--
    --&gt;, {{#if:{{{n|}}}|{{small|{{trim|{{{n}}}}}}}}}{{trim|{{{6}}}}}&lt;!--
  --&gt;}}&lt;!--
  --&gt;}}&lt;!--
--&gt;}}&lt;/onlyinclude&gt;
{{documentation | Template:title/doc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl</title>
    <ns>10</ns>
    <id>114</id>
    <revision>
      <id>71964</id>
      <parentid>65204</parentid>
      <timestamp>2014-07-04T18:37:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Do not add an additional row for separators</comment>
      <text xml:space="preserve" bytes="809">{{dcl/std|since={{{since|}}}|until={{{until|}}}}}&lt;!--
--&gt;&lt;tr class=&quot;t-dcl {{#if:{{{since|}}}|t-since-{{#replace:{{{since}}}|+|x}}}} {{#if:{{{until|}}}|t-until-{{#replace:{{{until}}}|+|x}}}}&quot;&gt;
&lt;td {{#if: {{{num|}}}{{{notes|}}}{{#var:since}}{{#var:until}} || class=&quot;t-dcl-nopad&quot; }}&gt; &lt;div&gt;{{c/core|{{trim| {{{1|}}}}}}}&lt;/div&gt;&lt;/td&gt;
&lt;td {{#if: {{{num|}}} || class=&quot;t-dcl-nopad&quot; }}&gt; {{#if: {{{num|}}} | ({{{num}}}) }} &lt;/td&gt;
&lt;td {{#if: {{{notes|}}}{{#var:since}}{{#var:until}} || class=&quot;t-dcl-nopad&quot; }}&gt; &lt;!--
--&gt;{{#if: {{#var:since}}&lt;!--
  --&gt;|{{mark since {{#var:since}}}} {{#if: {{#var:until}}{{{notes|}}}|&lt;br/&gt;}}&lt;!--
--&gt;}}&lt;!--
--&gt;{{#if: {{#var:until}}&lt;!--
  --&gt;|{{mark until {{#var:until}}}} {{#if: {{{notes|}}}|&lt;br/&gt;}}&lt;!--
--&gt;}}{{{notes|}}} &lt;/td&gt;
&lt;/tr&gt;&lt;noinclude&gt;
{{documentation | Template:dcl/doc}}
&lt;/noinclude&gt;</text>
      <sha1>at349vojkri739tzztimllkitn8gg9e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl begin</title>
    <ns>10</ns>
    <id>110</id>
    <revision>
      <id>61692</id>
      <parentid>61215</parentid>
      <timestamp>2013-06-08T05:28:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="98">&lt;onlyinclude&gt;&lt;table class=&quot;t-dcl-begin&quot;&gt;&lt;tbody&gt;&lt;/onlyinclude&gt;
{{documentation | Template:dcl/doc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl end</title>
    <ns>10</ns>
    <id>111</id>
    <revision>
      <id>63870</id>
      <parentid>61216</parentid>
      <timestamp>2013-07-29T17:36:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use correct template</comment>
      <text xml:space="preserve" bytes="90">{{dcl sep}}
&lt;/tbody&gt;&lt;/table&gt;&lt;noinclude&gt;
{{documentation | Template:dcl/doc }}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl h</title>
    <ns>10</ns>
    <id>10092</id>
    <revision>
      <id>71963</id>
      <parentid>61693</parentid>
      <timestamp>2014-07-04T18:34:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Do not add an additional row for separators</comment>
      <text xml:space="preserve" bytes="147">&lt;tr class=&quot;t-dcl-h&quot;&gt;
&lt;td&gt; &lt;div&gt;{{trim| {{{1|}}}}}&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;noinclude&gt;
{{documentation | Template:dcl/doc}}
&lt;/noinclude&gt;</text>
      <sha1>to7w3vtzcpplyv37eh1lqgs19d4xtq5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl header</title>
    <ns>10</ns>
    <id>113</id>
    <revision>
      <id>82057</id>
      <parentid>64118</parentid>
      <timestamp>2015-11-30T14:05:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Fix missing &lt;/tr&gt;</comment>
      <text xml:space="preserve" bytes="378">&lt;tr class=&quot;t-dsc-header&quot;&gt;
&lt;td&gt; &lt;div&gt;{{#if: {{{1|}}} | Defined in header &lt;code&gt;{{dcl list header/link|{{trim|{{{1}}}}}}}&lt;/code&gt; }}
{{#if: {{{2|}}}|&lt;br&gt;Defined in header &lt;code&gt;{{dcl list header/link|{{trim|{{{2}}}}}}}&lt;/code&gt;}} &lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;{{#if: {{{notes|}}} | &lt;div&gt;{{{notes|}}}&lt;/div&gt;}}&lt;/td&gt;
&lt;/tr&gt;&lt;!--
--&gt;&lt;noinclude&gt;
{{documentation | Template:dcl/doc}}
&lt;/noinclude&gt;</text>
      <sha1>b7vc6bgpnuxkjon6bxojedre4bdx6bx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl item</title>
    <ns>10</ns>
    <id>10240</id>
    <redirect title="Template:dcl" />
    <revision>
      <id>48667</id>
      <timestamp>2013-05-31T18:49:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl item]] to [[Template:dcl]]</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[Template:dcl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list begin</title>
    <ns>10</ns>
    <id>10183</id>
    <redirect title="Template:dsc begin" />
    <revision>
      <id>48551</id>
      <timestamp>2013-05-31T18:26:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list begin]] to [[Template:dsc begin]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list break</title>
    <ns>10</ns>
    <id>10184</id>
    <redirect title="Template:dsc break" />
    <revision>
      <id>48553</id>
      <timestamp>2013-05-31T18:26:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list break]] to [[Template:dsc break]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc break]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list class</title>
    <ns>10</ns>
    <id>10185</id>
    <redirect title="Template:dsc class" />
    <revision>
      <id>48555</id>
      <timestamp>2013-05-31T18:26:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list class]] to [[Template:dsc class]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc class]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list concept</title>
    <ns>10</ns>
    <id>10186</id>
    <redirect title="Template:dsc concept" />
    <revision>
      <id>48557</id>
      <timestamp>2013-05-31T18:27:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list concept]] to [[Template:dsc concept]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc concept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list const</title>
    <ns>10</ns>
    <id>10233</id>
    <redirect title="Template:dsc const" />
    <revision>
      <id>48653</id>
      <timestamp>2013-05-31T18:47:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list const]] to [[Template:dsc const]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc const]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list editlink</title>
    <ns>10</ns>
    <id>10231</id>
    <redirect title="Template:dsc editlink" />
    <revision>
      <id>48648</id>
      <timestamp>2013-05-31T18:45:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list editlink]] to [[Template:dsc editlink]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:dsc editlink]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list end</title>
    <ns>10</ns>
    <id>10230</id>
    <redirect title="Template:dsc end" />
    <revision>
      <id>48646</id>
      <timestamp>2013-05-31T18:45:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list end]] to [[Template:dsc end]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:dsc end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list enum</title>
    <ns>10</ns>
    <id>10229</id>
    <redirect title="Template:dsc enum" />
    <revision>
      <id>48644</id>
      <timestamp>2013-05-31T18:45:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list enum]] to [[Template:dsc enum]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:dsc enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list fun</title>
    <ns>10</ns>
    <id>10228</id>
    <redirect title="Template:dsc fun" />
    <revision>
      <id>48642</id>
      <timestamp>2013-05-31T18:45:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list fun]] to [[Template:dsc fun]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:dsc fun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list guard</title>
    <ns>10</ns>
    <id>10227</id>
    <redirect title="Template:dsc guard" />
    <revision>
      <id>48640</id>
      <timestamp>2013-05-31T18:45:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list guard]] to [[Template:dsc guard]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc guard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list h1</title>
    <ns>10</ns>
    <id>10232</id>
    <redirect title="Template:dsc h1" />
    <revision>
      <id>48651</id>
      <timestamp>2013-05-31T18:46:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list h1]] to [[Template:dsc h1]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[Template:dsc h1]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list h2</title>
    <ns>10</ns>
    <id>10187</id>
    <redirect title="Template:dsc h2" />
    <revision>
      <id>48559</id>
      <timestamp>2013-05-31T18:37:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list h2]] to [[Template:dsc h2]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[Template:dsc h2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list header</title>
    <ns>10</ns>
    <id>10188</id>
    <redirect title="Template:dsc header" />
    <revision>
      <id>48561</id>
      <timestamp>2013-05-31T18:38:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list header]] to [[Template:dsc header]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[Template:dsc header]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list header/link</title>
    <ns>10</ns>
    <id>10189</id>
    <redirect title="Template:dsc header/link" />
    <revision>
      <id>48563</id>
      <timestamp>2013-05-31T18:38:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list header/link]] to [[Template:dsc header/link]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Template:dsc header/link]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list hitem</title>
    <ns>10</ns>
    <id>10190</id>
    <redirect title="Template:dsc hitem" />
    <revision>
      <id>48565</id>
      <timestamp>2013-05-31T18:39:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list hitem]] to [[Template:dsc hitem]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc hitem]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list item</title>
    <ns>10</ns>
    <id>10191</id>
    <redirect title="Template:dsc" />
    <revision>
      <id>48567</id>
      <timestamp>2013-05-31T18:39:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list item]] to [[Template:dsc]]</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[Template:dsc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list macro const</title>
    <ns>10</ns>
    <id>10192</id>
    <redirect title="Template:dsc macro const" />
    <revision>
      <id>48569</id>
      <timestamp>2013-05-31T18:39:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list macro const]] to [[Template:dsc macro const]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Template:dsc macro const]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list macro fun</title>
    <ns>10</ns>
    <id>10193</id>
    <redirect title="Template:dsc macro fun" />
    <revision>
      <id>48571</id>
      <timestamp>2013-05-31T18:39:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list macro fun]] to [[Template:dsc macro fun]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[Template:dsc macro fun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem class</title>
    <ns>10</ns>
    <id>10194</id>
    <redirect title="Template:dsc mem class" />
    <revision>
      <id>48573</id>
      <timestamp>2013-05-31T18:40:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem class]] to [[Template:dsc mem class]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[Template:dsc mem class]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem const</title>
    <ns>10</ns>
    <id>10195</id>
    <redirect title="Template:dsc mem const" />
    <revision>
      <id>48575</id>
      <timestamp>2013-05-31T18:40:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem const]] to [[Template:dsc mem const]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[Template:dsc mem const]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem ctor</title>
    <ns>10</ns>
    <id>10196</id>
    <redirect title="Template:dsc mem ctor" />
    <revision>
      <id>48577</id>
      <timestamp>2013-05-31T18:40:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem ctor]] to [[Template:dsc mem ctor]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:dsc mem ctor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem dtor</title>
    <ns>10</ns>
    <id>10197</id>
    <redirect title="Template:dsc mem dtor" />
    <revision>
      <id>48579</id>
      <timestamp>2013-05-31T18:40:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem dtor]] to [[Template:dsc mem dtor]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:dsc mem dtor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem fun</title>
    <ns>10</ns>
    <id>10198</id>
    <redirect title="Template:dsc mem fun" />
    <revision>
      <id>48581</id>
      <timestamp>2013-05-31T18:40:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem fun]] to [[Template:dsc mem fun]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc mem fun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem obj</title>
    <ns>10</ns>
    <id>10199</id>
    <redirect title="Template:dsc mem obj" />
    <revision>
      <id>48583</id>
      <timestamp>2013-05-31T18:41:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem obj]] to [[Template:dsc mem obj]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc mem obj]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem sconst</title>
    <ns>10</ns>
    <id>10200</id>
    <redirect title="Template:dsc mem sconst" />
    <revision>
      <id>48585</id>
      <timestamp>2013-05-31T18:41:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem sconst]] to [[Template:dsc mem sconst]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[Template:dsc mem sconst]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem sfun</title>
    <ns>10</ns>
    <id>10201</id>
    <redirect title="Template:dsc mem sfun" />
    <revision>
      <id>48587</id>
      <timestamp>2013-05-31T18:41:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem sfun]] to [[Template:dsc mem sfun]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:dsc mem sfun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem vdtor</title>
    <ns>10</ns>
    <id>10202</id>
    <redirect title="Template:dsc mem vdtor" />
    <revision>
      <id>48589</id>
      <timestamp>2013-05-31T18:41:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem vdtor]] to [[Template:dsc mem vdtor]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[Template:dsc mem vdtor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list mem vfun</title>
    <ns>10</ns>
    <id>10226</id>
    <redirect title="Template:dsc mem vfun" />
    <revision>
      <id>48637</id>
      <timestamp>2013-05-31T18:45:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list mem vfun]] to [[Template:dsc mem vfun]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:dsc mem vfun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list namespace</title>
    <ns>10</ns>
    <id>10225</id>
    <redirect title="Template:dsc namespace" />
    <revision>
      <id>48635</id>
      <timestamp>2013-05-31T18:44:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list namespace]] to [[Template:dsc namespace]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[Template:dsc namespace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list priv mem ctor</title>
    <ns>10</ns>
    <id>10224</id>
    <redirect title="Template:dsc priv mem ctor" />
    <revision>
      <id>48633</id>
      <timestamp>2013-05-31T18:44:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list priv mem ctor]] to [[Template:dsc priv mem ctor]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[Template:dsc priv mem ctor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list priv mem obj</title>
    <ns>10</ns>
    <id>10223</id>
    <redirect title="Template:dsc priv mem obj" />
    <revision>
      <id>48631</id>
      <timestamp>2013-05-31T18:44:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list priv mem obj]] to [[Template:dsc priv mem obj]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Template:dsc priv mem obj]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list prot mem ctor</title>
    <ns>10</ns>
    <id>10222</id>
    <redirect title="Template:dsc prot mem ctor" />
    <revision>
      <id>48629</id>
      <timestamp>2013-05-31T18:44:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list prot mem ctor]] to [[Template:dsc prot mem ctor]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[Template:dsc prot mem ctor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list prot mem dtor</title>
    <ns>10</ns>
    <id>10221</id>
    <redirect title="Template:dsc prot mem dtor" />
    <revision>
      <id>48627</id>
      <timestamp>2013-05-31T18:44:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list prot mem dtor]] to [[Template:dsc prot mem dtor]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[Template:dsc prot mem dtor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list prot mem fun</title>
    <ns>10</ns>
    <id>10220</id>
    <redirect title="Template:dsc prot mem fun" />
    <revision>
      <id>48625</id>
      <timestamp>2013-05-31T18:44:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list prot mem fun]] to [[Template:dsc prot mem fun]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Template:dsc prot mem fun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list prot mem obj</title>
    <ns>10</ns>
    <id>10219</id>
    <redirect title="Template:dsc prot mem obj" />
    <revision>
      <id>48623</id>
      <timestamp>2013-05-31T18:44:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list prot mem obj]] to [[Template:dsc prot mem obj]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Template:dsc prot mem obj]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list prot mem vdtor</title>
    <ns>10</ns>
    <id>10218</id>
    <redirect title="Template:dsc prot mem vdtor" />
    <revision>
      <id>48621</id>
      <timestamp>2013-05-31T18:43:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list prot mem vdtor]] to [[Template:dsc prot mem vdtor]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[Template:dsc prot mem vdtor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list prot mem vfun</title>
    <ns>10</ns>
    <id>10217</id>
    <redirect title="Template:dsc prot mem vfun" />
    <revision>
      <id>48619</id>
      <timestamp>2013-05-31T18:43:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list prot mem vfun]] to [[Template:dsc prot mem vfun]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[Template:dsc prot mem vfun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list ptclass</title>
    <ns>10</ns>
    <id>10216</id>
    <redirect title="Template:dsc ptclass" />
    <revision>
      <id>48617</id>
      <timestamp>2013-05-31T18:43:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list ptclass]] to [[Template:dsc ptclass]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc ptclass]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list see c</title>
    <ns>10</ns>
    <id>10215</id>
    <redirect title="Template:dsc see c" />
    <revision>
      <id>48615</id>
      <timestamp>2013-05-31T18:43:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list see c]] to [[Template:dsc see c]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc see c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list see cpp</title>
    <ns>10</ns>
    <id>10214</id>
    <redirect title="Template:dsc see cpp" />
    <revision>
      <id>48613</id>
      <timestamp>2013-05-31T18:43:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list see cpp]] to [[Template:dsc see cpp]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc see cpp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list sep</title>
    <ns>10</ns>
    <id>10213</id>
    <redirect title="Template:dsc sep" />
    <revision>
      <id>48611</id>
      <timestamp>2013-05-31T18:43:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list sep]] to [[Template:dsc sep]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:dsc sep]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list struct</title>
    <ns>10</ns>
    <id>10212</id>
    <redirect title="Template:dsc struct" />
    <revision>
      <id>48609</id>
      <timestamp>2013-05-31T18:43:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list struct]] to [[Template:dsc struct]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[Template:dsc struct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list tclass</title>
    <ns>10</ns>
    <id>10211</id>
    <redirect title="Template:dsc tclass" />
    <revision>
      <id>48607</id>
      <timestamp>2013-05-31T18:43:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list tclass]] to [[Template:dsc tclass]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[Template:dsc tclass]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list template</title>
    <ns>10</ns>
    <id>10210</id>
    <redirect title="Template:dsc inc" />
    <revision>
      <id>48790</id>
      <parentid>48605</parentid>
      <timestamp>2013-06-01T00:11:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Template:dsc inc]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:dsc inc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list tfun</title>
    <ns>10</ns>
    <id>10209</id>
    <redirect title="Template:dsc tfun" />
    <revision>
      <id>48603</id>
      <timestamp>2013-05-31T18:42:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list tfun]] to [[Template:dsc tfun]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:dsc tfun]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list todo</title>
    <ns>10</ns>
    <id>10208</id>
    <redirect title="Template:dsc todo" />
    <revision>
      <id>48601</id>
      <timestamp>2013-05-31T18:42:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list todo]] to [[Template:dsc todo]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:dsc todo]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list typedef</title>
    <ns>10</ns>
    <id>10207</id>
    <redirect title="Template:dsc typedef" />
    <revision>
      <id>48599</id>
      <timestamp>2013-05-31T18:42:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl list typedef]] to [[Template:dsc typedef]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc typedef]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl list/doc</title>
    <ns>10</ns>
    <id>10180</id>
    <redirect title="Template:dsc/doc" />
    <revision>
      <id>48537</id>
      <parentid>48533</parentid>
      <timestamp>2013-05-31T17:46:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Template:dsc/doc]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:dsc/doc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl mark mem</title>
    <ns>10</ns>
    <id>10206</id>
    <redirect title="Template:dsc mark mem" />
    <revision>
      <id>48597</id>
      <timestamp>2013-05-31T18:42:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl mark mem]] to [[Template:dsc mark mem]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:dsc mark mem]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl member</title>
    <ns>10</ns>
    <id>10205</id>
    <redirect title="Template:dsc member" />
    <revision>
      <id>48595</id>
      <timestamp>2013-05-31T18:42:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl member]] to [[Template:dsc member]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[Template:dsc member]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl rev begin</title>
    <ns>10</ns>
    <id>12579</id>
    <revision>
      <id>71962</id>
      <parentid>65221</parentid>
      <timestamp>2014-07-04T18:34:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Do not add an additional row for separators</comment>
      <text xml:space="preserve" bytes="813">&lt;onlyinclude&gt;&lt;/tbody&gt;
&lt;tbody class=&quot;t-dcl-rev {{#if:{{{num|}}}|t-dcl-rev-num}} {{#if:{{{since|}}}{{{until|}}}{{{notes|}}}|t-dcl-rev-notes}} {{#if:{{{since|}}}|t-since-{{#replace:{{{since}}}|+|x}}}} {{#if:{{{until|}}}|t-until-{{#replace:{{{until}}}|+|x}}}}&quot;&gt;&lt;!--
--&gt;{{#if:{{{num|}}}{{{since|}}}{{{until|}}}{{{notes|}}}|
&lt;tr class=&quot;t-dcl-rev-aux&quot;&gt;
&lt;td&gt;&lt;/td&gt;
{{#if:{{{num|}}}|&lt;td rowspan=&quot;142&quot;&gt;({{{num|}}})&lt;/td&gt;|&lt;td&gt;&lt;/td&gt;}}
{{#if:{{{since|}}}{{{until|}}}{{{notes|}}}|&lt;td rowspan=&quot;142&quot;&gt; &lt;!--
--&gt;{{#if: {{{since|}}}&lt;!--
  --&gt;|{{mark since {{{since}}}}} {{#if: {{{until|}}}{{{notes|}}}|&lt;br/&gt;}}&lt;!--
--&gt;}}&lt;!--
--&gt;{{#if: {{{until|}}}&lt;!--
  --&gt;|{{mark until {{{until}}}}} {{#if: {{{notes|}}}|&lt;br/&gt;}}&lt;!--
--&gt;}}{{{notes|}}} &lt;/td&gt;|&lt;td&gt;&lt;/td&gt;}}
&lt;/tr&gt;
}}&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:dcl/doc}}
&lt;/noinclude&gt;</text>
      <sha1>hzdlevmxh7m47k9ethc0ybbr6icazhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl rev end</title>
    <ns>10</ns>
    <id>12580</id>
    <revision>
      <id>61053</id>
      <parentid>61051</parentid>
      <timestamp>2013-06-05T02:39:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="103">&lt;onlyinclude&gt;&lt;/tbody&gt;&lt;tbody&gt;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:dcl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl rev multi</title>
    <ns>10</ns>
    <id>16201</id>
    <revision>
      <id>90772</id>
      <timestamp>2017-03-09T13:49:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1192">{{dcl rev begin|num={{{num|}}}}}
{{dcl|since={{{since1|}}}|until={{{until1|{{{since2|}}}}}}|notes={{{notes1|}}}|1={{{dcl1}}}}}
{{{{{|safesubst:}}}#if:{{{dcl2|}}}|{{dcl|since={{{since2|{{{until1|}}}}}}|until={{{until2|{{{since3|}}}}}}|notes={{{notes2|}}}|1={{{dcl2}}}}}
{{{{{|safesubst:}}}#if:{{{dcl3|}}}|{{dcl|since={{{since3|{{{until2|}}}}}}|until={{{until3|{{{since4|}}}}}}|notes={{{notes3|}}}|1={{{dcl3}}}}}
{{{{{|safesubst:}}}#if:{{{dcl4|}}}|{{dcl|since={{{since4|{{{until3|}}}}}}|until={{{until4|{{{since5|}}}}}}|notes={{{notes4|}}}|1={{{dcl4}}}}}
{{{{{|safesubst:}}}#if:{{{dcl5|}}}|{{dcl|since={{{since5|{{{until4|}}}}}}|until={{{until5|{{{since6|}}}}}}|notes={{{notes5|}}}|1={{{dcl5}}}}}
{{{{{|safesubst:}}}#if:{{{dcl6|}}}|{{dcl|since={{{since6|{{{until5|}}}}}}|until={{{until6|{{{since7|}}}}}}|notes={{{notes6|}}}|1={{{dcl6}}}}}
{{{{{|safesubst:}}}#if:{{{dcl7|}}}|{{dcl|since={{{since7|{{{until6|}}}}}}|until={{{until7|}}}|notes={{{notes7|}}}|1={{{dcl7}}}}}
{{{{{|safesubst:}}}#if:{{{dcl8|{{{since8|{{{until8|{{{notes8|}}}}}}}}}}}}|{{error|{{tl|dcl rev multi}} only supports up to 7 revisions}}}}
}}}}}}}}}}}}
{{dcl rev end}}&lt;noinclude&gt;
{{documentation|Template:dcl/doc}}
&lt;/noinclude&gt;</text>
      <sha1>5iy1kcopxmr9oswt91kbdqti8uknoke</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl sep</title>
    <ns>10</ns>
    <id>115</id>
    <revision>
      <id>61028</id>
      <parentid>61015</parentid>
      <timestamp>2013-06-05T01:53:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>define each column explicitly to permit separate styling</comment>
      <text xml:space="preserve" bytes="116">&lt;tr class=&quot;t-dcl-sep&quot;&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;noinclude&gt;
{{documentation | Template:dcl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl small</title>
    <ns>10</ns>
    <id>10204</id>
    <redirect title="Template:dsc small" />
    <revision>
      <id>48593</id>
      <timestamp>2013-05-31T18:42:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl small]] to [[Template:dsc small]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:dsc small]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl small/doc</title>
    <ns>10</ns>
    <id>10203</id>
    <redirect title="Template:dsc small/doc" />
    <revision>
      <id>48591</id>
      <timestamp>2013-05-31T18:42:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:dcl small/doc]] to [[Template:dsc small/doc]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[Template:dsc small/doc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl/doc</title>
    <ns>10</ns>
    <id>109</id>
    <revision>
      <id>90774</id>
      <parentid>90771</parentid>
      <timestamp>2017-03-09T14:00:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>++</comment>
      <text xml:space="preserve" bytes="3832">This is one of the family of templates used for creation of declaration lists.

{{list/doc}}

{{tl|dcl begin}}
: starts the declaration list

{{tl|dcl end}}
: ends the declaration list. This template automatically adds {{tlc|dcl sep}} above the item.

{{tl|dcl rev begin| num{{=}}''num''}}
: starts versioned declaration list. The {{tt|num}} parameter is optional and may be used for numbering purposes (overrides the ''num'' parameter of the {{tlc|dcl}} templates used within the versioned list (i.e., until {{tlc|dcl rev end}}).

{{tl|dcl rev end}}
: ends versioned declaration list.

{{tl|dcl header}}
: adds explanation which header the feature comes from

{{tl|dcl sep}}
: adds a separator

{{tl|dcl h | ''heading''}}
: adds a small heading. Useful to split and describe large groups of related declarations.

{{tl|dcl | notes{{=}}''notes'' | num{{=}}''num'' | since{{=}}''since-std'' | until{{=}}''until-std'' |  ''declaration'' }}
: adds an item to the declaration list. The {{tt|notes}} parameter is optional and may be used to add notes about the feature. The {{tt|num}} parameter is also optional and may be used for numbering purposes. ''declaration'' is the declaration of the feature. This template automatically adds {{tlc|dcl sep}} above the item.

:{{tt|since}} specifies the first standard the definition appears in, {{tt|until}} specifies the first standard that does not include this definition.

{{tl|dcl rev multi| num{{=}}''num''| notes''X''{{=}}''notes'' | since''X''{{=}}''since-std'' | until''X''{{=}}''until-std'' | dcl''X'' {{=}} ''declaration'' | ...}}
: single-template versioned declaration list; up to 7 versions are supported. The default for {{tt|since''X''}} is {{tt|until''X-1''}} and the default for {{tt|until''X''}} is {{tt|since''X+1''}}. This template may be substituted.

===Example===

  &lt;nowiki&gt;
    {{dcl header | abcd.h}}
    {{dcl | notes=Faster than {{c|foo_slow}} | num=1 |
    int foo( char a );
    }}
    {{dcl | since=c++11 | num=2 |
    int foo( char a, int b );
    }}
    {{dcl rev begin | num=3}}
    {{dcl | until=c++11 | 1=
    int foo( char a, char b = 'a' );
    }}
    {{dcl | since=c++11 | until=c++14 | 1=
    int foo( char a, char b = 'b' );
    }}
    {{dcl | since=c++14 | 1=
    int foo( char a, char b = 'c' );
    }}
    {{dcl rev end}}
    {{dcl rev begin}}
    {{dcl | until=c++11 | num=4 | 1=
    int foo( char a, char b = 'a' );
    }}
    {{dcl | since=c++11 | until=c++14 | num=5 | 1=
    int foo( char a, char b = 'b' );
    }}
    {{dcl | since=c++14 | num=6 | 1=
    int foo( char a, char b = 'c' );
    }}
    {{dcl rev end}}
    {{dcl rev multi | num=7 | dcl1=
    int foo( char a, char b = 'a' );
    |since2=c++11 | dcl2=
    int foo( char a, char b = 'b' );
    |since3=c++14 | dcl3=
    int foo( char a, char b = 'c' );
    |since4=c++17 | dcl4=
    int foo( char a, char b = 'd' );
    }}
  &lt;/nowiki&gt;

The above results in the following:

{{dcl begin}}
{{dcl header | abcd.h}}
{{dcl | notes=Faster than {{c|foo_slow}} | num=1 |
int foo( char a );
}}
{{dcl | since=c++11 | num=2 |
int foo( char a, int b );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 | 1=
int foo( char a, char b = 'a' );
}}
{{dcl | since=c++11 | until=c++14 | 1=
int foo( char a, char b = 'b' );
}}
{{dcl | since=c++14 | 1=
int foo( char a, char b = 'c' );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | until=c++11 | num=4 | 1=
int foo( char a, char b = 'a' );
}}
{{dcl | since=c++11 | until=c++14 | num=5 | 1=
int foo( char a, char b = 'b' );
}}
{{dcl | since=c++14 | num=6 | 1=
int foo( char a, char b = 'c' );
}}
{{dcl rev end}}
{{dcl rev multi | num=7 | dcl1=
int foo( char a, char b = 'a' );
|since2=c++11 | dcl2=
int foo( char a, char b = 'b' );
|since3=c++14 | dcl3=
int foo( char a, char b = 'c' );
|since4=c++17 | dcl4=
int foo( char a, char b = 'd' );
}}
{{dcl end}}</text>
      <sha1>le2fjc17tapov9cpbje0vqcjk547ei1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dcl/std</title>
    <ns>10</ns>
    <id>12777</id>
    <revision>
      <id>88664</id>
      <parentid>82459</parentid>
      <timestamp>2016-12-05T22:07:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="533">&lt;onlyinclude&gt;{{#vardefine:since|{{#switch:{{{since|}}}
 |c++98=
 |c++03=c++03
 |c++11=c++11
 |c++14=c++14
 |c++17=c++17
 |c95=c95
 |c99=c99
 |c11=c11
 |libfund
 |libfund_ts=libfund_ts
 |libfund2
 |libfund_ts_2=libfund_ts_2
 |ranges
 |ranges_ts=ranges_ts
 |concurrency
 |concurrency_ts=concurrency_ts
 |parallelism
 |parallelism_ts=parallelism_ts
 |fs_ts=fs_ts
 |none=none
}}}}{{#vardefine:until|{{#switch:{{{until|}}}
 |c++98=
 |c++03=c++03
 |c++11=c++11
 |c++14=c++14
 |c++17=c++17
 |c99=c99
 |c11=c11
 |none=none
}}}}&lt;/onlyinclude&gt;</text>
      <sha1>6ax19auq3keqx88gi5578ushn0jt6fa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ddcl</title>
    <ns>10</ns>
    <id>108</id>
    <revision>
      <id>62274</id>
      <parentid>9881</parentid>
      <timestamp>2013-06-26T03:54:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update the definition</comment>
      <text xml:space="preserve" bytes="163">{{dcl begin}}
{{#if: {{{header|}}} |{{dcl header | {{{header}}}}} }}
{{dcl | notes={{{notes|}}} | since={{{since|}}} | until={{{until|}}} | {{{1|}}} }}
{{dcl end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ddcl list h</title>
    <ns>10</ns>
    <id>10236</id>
    <redirect title="Template:dcl h" />
    <revision>
      <id>48659</id>
      <timestamp>2013-05-31T18:48:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:ddcl list h]] to [[Template:dcl h]]</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[Template:dcl h]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ddcl list header</title>
    <ns>10</ns>
    <id>10237</id>
    <redirect title="Template:dcl header" />
    <revision>
      <id>48661</id>
      <timestamp>2013-05-31T18:48:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:ddcl list header]] to [[Template:dcl header]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[Template:dcl header]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ddcl list item</title>
    <ns>10</ns>
    <id>10238</id>
    <redirect title="Template:dcl" />
    <revision>
      <id>48668</id>
      <parentid>48663</parentid>
      <timestamp>2013-05-31T18:50:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Template:dcl]]</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[Template:dcl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ddcl list sep</title>
    <ns>10</ns>
    <id>10239</id>
    <redirect title="Template:dcl sep" />
    <revision>
      <id>48665</id>
      <timestamp>2013-05-31T18:49:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:ddcl list sep]] to [[Template:dcl sep]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:dcl sep]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ddcl list/doc</title>
    <ns>10</ns>
    <id>10181</id>
    <redirect title="Template:dcl/doc" />
    <revision>
      <id>48544</id>
      <timestamp>2013-05-31T17:50:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:ddcl list/doc]] to [[Template:dcl/doc]]: prepare for renames</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:dcl/doc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:div col</title>
    <ns>10</ns>
    <id>14435</id>
    <revision>
      <id>80374</id>
      <timestamp>2015-08-08T03:07:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Copy from https://en.wikipedia.org/w/index.php?title=Template:Div_col&amp;oldid=649557752</comment>
      <text xml:space="preserve" bytes="687">&lt;includeonly&gt;&lt;div class=&quot;div-col columns &lt;!--
 --&gt;{{#if: {{{colwidth|{{{2|}}}}}}
    | column-width
    | column-count column-count-{{{cols|{{#if:1|{{{1|2}}}}}}}} }}&quot; style=&quot;&lt;!--
 --&gt;{{#if: {{{colwidth|{{{2|}}}}}}
    | {{column-width|{{{colwidth|{{#if:1|{{{2}}}}}}}}}}
    | {{column-count|{{{cols|{{#if:1|{{{1|2}}}}}}}}}} }} &lt;!--
 --&gt;{{#if: {{{gap|}}}
    | {{column-gap|{{{gap}}}}} }}&lt;!--
 --&gt;{{#switch: {{{rules|}}}
    | = &lt;!--empty--&gt;
    | yes = {{column-rule}}
    | {{Column-rule|{{{rules}}}}} }} &lt;!--
 --&gt;{{#ifeq: {{{small|}}}|yes
    | font-size:90%; }} &lt;!--
 --&gt;{{#if: {{{style|}}}
    | {{{style}}} }}&quot;&gt;&lt;!--
 --&gt;{{#if: {{{content|}}}
    |{{{content}}}&lt;/div&gt;}}&lt;/includeonly&gt;</text>
      <sha1>en6a5jvgcziyxu85s3av2tgal6c83u2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:div col end</title>
    <ns>10</ns>
    <id>14436</id>
    <revision>
      <id>80375</id>
      <timestamp>2015-08-08T03:08:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>copy from https://en.wikipedia.org/w/index.php?title=Template:Div_col_end&amp;oldid=627002509</comment>
      <text xml:space="preserve" bytes="33">&lt;includeonly&gt;&lt;/div&gt;&lt;/includeonly&gt;</text>
      <sha1>iezx7hubcrm3s9w6zqkqnynfjcqdd99</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation</title>
    <ns>10</ns>
    <id>116</id>
    <revision>
      <id>10053</id>
      <parentid>3941</parentid>
      <timestamp>2011-08-29T20:38:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>evaluate #ifexist only if needed</comment>
      <text xml:space="preserve" bytes="2335">&lt;!--
  Automatically add {{template sandbox notice}} when on a /sandbox page.
--&gt;{{#ifeq: {{SUBPAGENAME}} | sandbox
| &lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;{{template sandbox notice}}
}}&lt;!--
  Automatically add {{pp-template}} to protected templates.
--&gt;{{template other
| {{#ifeq: {{PROTECTIONLEVEL:move}} | sysop
  | {{pp-template|docusage=yes}}
  | {{#if: {{PROTECTIONLEVEL:edit}}
    | {{pp-template|docusage=yes}}
    | &lt;!--Not protected, or only semi-move-protected--&gt;
    }}
  }}
}}&lt;!--
  Start of green doc box.
--&gt;{{documentation/start box2
| preload = {{{preload|}}}   &lt;!--Allow custom preloads--&gt;
| heading = {{{heading|¬}}}   &lt;!--Empty but defined means no header--&gt;
| heading-style = {{{heading-style|}}}
| content = {{{content|}}}

&lt;!--Some namespaces must have the /doc, /sandbox and /testcases 
    in talk space--&gt;
| docspace = {{documentation/docspace}}

| 1 = {{{1|}}}   &lt;!--Other docname, if fed--&gt;

&lt;!--The namespace is added in /start box2--&gt;
| template page = {{documentation/template page}}

}}&lt;!-- Start content --&gt;&lt;!--
  Start load the /doc content:
  Note: The line breaks between this comment and the next line are necessary
  so  &quot;=== Headings ===&quot; at the start and end of docs are interpreted.
--&gt;
{{#if:{{{content|}}}&lt;!--
--&gt;|{{{content|}}}&lt;!--
--&gt;|{{#if:{{{1|}}}&lt;!--
  --&gt;|{{#ifexist:{{{1|}}}&lt;!--
    --&gt;|{{ {{{1}}} }}&lt;!--
    --&gt;|&lt;!--
   --&gt;}}&lt;!--
  --&gt;|{{#ifexist:{{documentation/docspace}}:{{documentation/template page}}/doc&lt;!--
    --&gt;|{{ {{documentation/docspace}}:{{documentation/template page}}/doc }}&lt;!--
    --&gt;|&lt;!--
   --&gt;}}&lt;!--
 --&gt;}}
}}
&lt;!--
  End load the /doc content:
  Note: The line breaks between this comment and the previous line are necessary
  so  &quot;=== Headings ===&quot; at the start and end of docs are interpreted.
--&gt;{{documentation/end box2
| preload = {{{preload|}}}   &lt;!--Allow custom preloads--&gt;
| content = {{{content|}}}
| link box = {{{link box|}}}   &lt;!--So &quot;link box=off&quot; works--&gt;

&lt;!--Some namespaces must have the /doc, /sandbox and /testcases 
    in talk space--&gt;
| docspace = {{documentation/docspace}}

| 1 = {{{1|}}}   &lt;!--Other docname, if fed--&gt;

&lt;!--The namespace is added in /end box2--&gt;
| template page = {{documentation/template page}}

}}&lt;!--
  End of green doc box
--&gt;&lt;noinclude&gt;

&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/doc</title>
    <ns>10</ns>
    <id>117</id>
    <revision>
      <id>4626</id>
      <parentid>4625</parentid>
      <timestamp>2011-07-01T18:57:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>link to the standard wikipedia</comment>
      <text xml:space="preserve" bytes="8070">&lt;!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE --&gt;

This is the {{tl|documentation}} template.

For most of the instructions about how and when to use this template, see [[enwiki:Wikipedia:Template documentation]].

This template displays a green doc box like you are seeing now, and automatically loads the content from a /doc subpage. It can also load the content from other places if instructed to.

This template is intended for documenting templates and other pages which are [[enwiki:Wikipedia:Transclusion|transcluded]] onto other pages. It can be used in template space and most other [[enwiki:Wikipedia:Namespace|namespaces]].

Use of this template allows templates to be [[enwiki:Wikipedia:Protection policy|protected]] where necessary, while allowing anyone to edit the documentation, categories, and interwiki links.

=== Usage ===

Normally this template is used without any parameters, placed at the bottom of the template or page being documented, within &lt;code&gt;&amp;lt;noinclude&gt;&lt;/code&gt;:

&lt;pre&gt;
&lt;!--Last line of your template code--&gt;&lt;noinclude&gt;

{{documentation}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;
&lt;/pre&gt;

Then this template automatically loads the content from the /doc subpage of the template it is used on.

This template can also load the content from any other page. Like this:

&lt;pre&gt;
&lt;!--Last line of your template code--&gt;&lt;noinclude&gt;

{{documentation|Template:Other page/doc}}
&lt;/noinclude&gt;
&lt;/pre&gt;

Note that when loading the documentation from another page than the local /doc page it becomes tricky to handle the categories and interwiki links.

The content can also be fed directly as text. Like this:

&lt;pre&gt;
&lt;!--Last line of your template code--&gt;&lt;noinclude&gt;

{{documentation
| content = Some documentation text.
}}
&lt;/noinclude&gt;
&lt;/pre&gt;

When the '''content''' parameter is used the doc box normally doesn't show the [edit] [purge] links in the top right corner. Note that if the /doc page exists a link to it is still shown in the link box below the doc box. &lt;!--and no link to a /doc page is shown in the link box below the doc box.--&gt;

But parameter 1 and the '''content''' parameter can also be combined, like this:

&lt;pre&gt;
&lt;!--Last line of your template code--&gt;&lt;noinclude&gt;

{{documentation
| 1 = Template:Any page/doc
| content = {{Template:Any page/doc|parameters}}
}}
&lt;/noinclude&gt;
&lt;/pre&gt;

Then the pagename fed as parameter 1 is used for the [edit] [purge] links and for the /doc link in the link box below the doc box. But the '''content''' parameter is used for the content shown in the doc box. The above code means that the content is transcluded as &quot;&lt;code&gt;&lt;nowiki&gt;{{Template:Any page/doc|parameters}}&lt;/nowiki&gt;&lt;/code&gt;&quot;. In this example a parameter is also fed to the /doc page being loaded.

=== Best practice ===

The code should be added at the bottom of the template code, with no space before &quot;&lt;code&gt;&amp;lt;noinclude&gt;&lt;/code&gt;&quot; (which would cause extra space on pages where the template is used).

Categories and interwiki links that apply to the template itself should be added to the bottom of the /doc subpage, inside &lt;code&gt;&amp;lt;includeonly&gt;&amp;lt;/includeonly&gt;&lt;/code&gt; tags. For more complex cases, see [[enwiki:Wikipedia:Template documentation#Categories and interwiki links]].

If the documentation page contains &amp;lt;includeonly&gt; or &amp;lt;noinclude&gt; tags as part of the visible documentation text, replace the &quot;&lt;code&gt;&amp;lt;&lt;/code&gt;&quot; with &quot;&lt;code&gt;&amp;amp;lt;&lt;/code&gt;&quot;.
&lt;!--
=== The heading ===

When in Template space this template shows this heading:
:[[File:Template-info.svg|32px]] '''Template documentation'''

In most other namespaces, such as &quot;Wikipedia:&quot;, it shows this heading:
:'''Documentation'''

But when on File (image) pages it shows this heading:
:'''Summary'''

The '''heading''' parameter can be used to set the heading to something else. Like this:

:&lt;code&gt;&lt;nowiki&gt;{{documentation| heading = Infobox documentation }}&lt;/nowiki&gt;&lt;/code&gt;

If the '''heading''' parameter is empty but defined, no heading is shown and no [edit] [purge] links are shown. Like this:

:&lt;code&gt;&lt;nowiki&gt;{{documentation| heading = }}&lt;/nowiki&gt;&lt;/code&gt;

The '''heading-style''' parameter can be fed optional [[Cascading Style Sheets|CSS]] values. Without quotation marks &lt;code&gt;&quot; &quot;&lt;/code&gt; but with the ending semicolons &lt;code&gt;;&lt;/code&gt;. For example:
:&lt;code&gt;heading-style = color: red; font-size: 150%;&lt;/code&gt;

=== The link box ===

Below the big doc box is a small link box that shows some meta-data about the documentation. The link box shows different things depending on what parameters are fed to this template, and in which namespace it is used. In some cases the link box is not shown at all.

To hide the link box, add the parameter &quot;{{para|link box|off}}&quot;.

You can also insert customised text in the link box, by defining the {{para|link box}} parameter. For example:
&lt;pre&gt;|link box=This documentation is automatically generated by [[Template:Country showdata]]&lt;/pre&gt;

=== Automatic functions ===

If the documentation page doesn't exist, the [create] link includes a [[mw:Manual:Creating pages with preloaded text|preload]] page so that clicking it will pre-fill the edit form with the basic documentation page format. Preload text is also used for the /sandbox and /testcases &lt;small&gt;(create)&lt;/small&gt; links.

When this template is on a protected template page it now automatically adds {{tl|pp-template}} which shows the grey or red padlock in the top right corner. So no need to manually add {{tlf|pp-template}} to templates that use {{tl|documentation}}.

When this template is on a /sandbox subpage it automatically adds the {{tl|template sandbox notice}}.

=== Subject space vs talk space ===

Terminology: ''Subject space'' is the opposite of ''talk space''. For instance &quot;Template:&quot; is the subject space of &quot;Template talk:&quot;.

This template is usually placed in subject space, within &amp;lt;noinclude&gt; tags. But in some cases this template needs to be on the talkpage:

* For preload pages (usually in Template or Wikipedia space), since they can't use &amp;lt;noinclude&gt;. See for instance [[Template talk:AfC preload]] and [[Template talk:RfD subpage starter]]. Such talkpages can be marked with {{tl|talkdoc}}.

* In MediaWiki space, since &amp;lt;noinclude&gt; often doesn't work in system messages and since MediaWiki space needs to be kept clean for performance reasons.

When placed on talkpages this template usually is placed near the top of the page and without &amp;lt;noinclude&gt; tags.

The /doc, /sandbox and /testcases pages should normally be in subject space, except in the namespaces that don't have the MediaWiki [[meta:Link#Subpage feature|subpage feature]] enabled: Main, File, MediaWiki and Category. (But currently we only show the /sandbox and /testcases links from User, User talk, Template and Template talk space.) There are also a whole bunch of other technical reasons why the /doc page must be stored under the talkpage for those namespaces.

This template automatically points its create links for the /doc, /sandbox and /testcases to the right namespace.

=== Technical details ===

This template calls {{tl|documentation/start box2}} and {{tl|documentation/end box2}} which in turn call {{tl|documentation/start box}} and {{tl|documentation/end box}}. /start box (and /end box) hold most of the code, while this template and /start box2 (and /end box2) do parameter preprocessing.

The preload page for the /doc [create] link is [[Template:Documentation/preload]], but in File space it is [[Template:Documentation/preload-filespace]]. The preload pages for the /sandbox and /testcases &lt;small&gt;(create)&lt;/small&gt; links are [[Template:Documentation/preload-sandbox]] and [[Template:Documentation/preload-testcases]].

For more technical details see the [[Template talk:Documentation|talk page]].
--&gt;
=== See also ===

&lt;!-- {{documentation/see also}} --&gt;
* {{tl|documentation}} – Placed on templates and other pages to document them.
&lt;!--* {{tl|documentation subpage}} – Used at the top of /doc subpages to explain what they are and to link back to the page they document.--&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/docspace</title>
    <ns>10</ns>
    <id>118</id>
    <revision>
      <id>20014</id>
      <parentid>235</parentid>
      <timestamp>2012-03-19T18:30:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="172">{{#switch: {{SUBJECTSPACE}}
  | {{ns:0}}
  | {{ns:File}}
  | {{ns:MediaWiki}}
  | {{ns:Category}} = {{TALKSPACE}}
  | #default = {{SUBJECTSPACE}}
}}&lt;noinclude&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/end box</title>
    <ns>10</ns>
    <id>119</id>
    <revision>
      <id>4627</id>
      <parentid>237</parentid>
      <timestamp>2011-07-01T18:58:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use links to the standard wikipedia</comment>
      <text xml:space="preserve" bytes="3706">&lt;noinclude&gt;&lt;div&gt;&lt;/noinclude&gt;&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;&lt;!--So right or left floating items don't stick out of the doc box.--&gt;
&lt;/div&gt;&lt;!--End of green doc box--&gt;&lt;!--
  Link box below for the doc meta-data:
--&gt;{{#if: 
  &lt;!--Check if we should show the link box--&gt;
  {{#ifeq: {{{link box|}}} | off
  |
  | {{{doc exist|yes}}}{{
    #switch: {{SUBJECTSPACE}}
    | {{ns:User}}
    | {{ns:Template}} = yes
    }}
  }}

| {{fmbox
  | id = documentation-meta-data
  | image = none
  | style = background-color: #ecfcf4;
  | textstyle = font-style: italic;
  | text = 
    {{#if: {{{link box|}}}
    | {{{link box}}}   &lt;!--Use custom link box content--&gt;
    | {{#if: {{{doc exist|yes}}}
      | &lt;!--/doc exists, link to it--&gt;
        The above [[enwiki:Wikipedia:Template documentation|documentation]] is [[enwiki:Wikipedia:Transclusion|transcluded]] from [[{{{docpage|{{FULLPAGENAME}}/doc}}}]]. &lt;small style=&quot;font-style: normal&quot;&gt;([{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=edit}} edit] &amp;#124; [{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=history}} history])&lt;/small&gt; &lt;br&gt;
      }}&lt;!-- 
        Add links to /sandbox and /testcases when appropriate:
   --&gt;&lt;!--{{#switch: {{SUBJECTSPACE}}
      | {{ns:User}}
      | {{ns:Template}} = 
        Editors can experiment in this template's {{
        #ifexist: {{{sandbox| {{FULLPAGENAME}}/sandbox }}}
        | [[{{{sandbox| {{FULLPAGENAME}}/sandbox }}}|sandbox]] &lt;small style=&quot;font-style: normal&quot;&gt;([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit }} edit] {{!}} [{{fullurl:Wikipedia:pagediff | withJS={{urlencode:MediaWiki:Common.js/pagediff.js}}&amp;oldpage={{urlencode:{{{template page|{{FULLPAGENAME}}}}}}}&amp;newpage={{urlencode:{{{sandbox|{{FULLPAGENAME}}/sandbox}}}}}}} diff])&lt;/small&gt; 
        | sandbox &lt;small style=&quot;font-style: normal&quot;&gt;([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit&amp;preload=Template:Documentation/preload-sandbox }} create])&lt;/small&gt; 
        }} and {{
        #ifexist: {{{testcases| {{FULLPAGENAME}}/testcases }}}
        | [[{{{testcases| {{FULLPAGENAME}}/testcases }}}|testcases]] &lt;small style=&quot;font-style: normal&quot;&gt;([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit }} edit])&lt;/small&gt;
        | testcases &lt;small style=&quot;font-style: normal&quot;&gt;([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit&amp;preload=Template:Documentation/preload-testcases }} create])&lt;/small&gt;
        }} pages. &lt;br&gt;
      }}--&gt;&lt;!--
        Show the cats and interwiki text, but not 
        if &quot;content&quot; fed or &quot;docname fed&quot; since then it is 
        unclear where to add the cats and interwikis.
   --&gt;{{#if: {{{content|}}} {{{docname fed|}}}
      | 
      | Please add categories and interwikis to the [[{{{docpage|{{FULLPAGENAME}}/doc}}}|/doc]] subpage.
      }}&lt;!--
        Show the &quot;Subpages&quot; link:
   --&gt;{{#switch: {{SUBJECTSPACE}}
      | {{ns:File}} =   &lt;!--Don't show it--&gt;
      | {{ns:Template}} = &amp;#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this template]].
      | #default = &amp;#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this page]].
      }}
    }}
  }}
}}&lt;!--End link box--&gt;&lt;!--

  Detect and report strange usage:
--&gt;{{#if:

  &lt;!--Check if {{documentation}} is transcluded 
      on a /doc or /testcases page--&gt;
  {{#switch: {{SUBPAGENAME}}
  | doc
  | testcases = strange
  }}
  &lt;!--More checks can be added here, just return anything
      to make the surrounding if-case trigger--&gt;

| &lt;includeonly&gt;[[Category:Wikipedia pages with strange ((documentation)) usage|{{main other|Main:}}{{FULLPAGENAME}}]]&lt;!-- Sort on namespace --&gt;&lt;/includeonly&gt;

}}&lt;noinclude&gt;
{{pp-template|small=yes}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/end box2</title>
    <ns>10</ns>
    <id>120</id>
    <revision>
      <id>239</id>
      <parentid>238</parentid>
      <timestamp>2011-06-06T22:43:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="880">{{documentation/end box
| preload = {{{preload|}}}   &lt;!--Allow custom preloads--&gt;
| content = {{{content|}}}
| link box = {{{link box|}}}   &lt;!--So &quot;link box=off&quot; works--&gt;

| docpage = 
  {{#if: {{{1|}}}
  | {{{1|}}}
  | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc
  }}
| doc exist = 
  {{#ifexist: 
    {{#if: {{{1|}}}
    | {{{1|}}}   &lt;!--Other docname fed--&gt;
    | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc
    }}
  | yes
  }}
| docname fed =
  {{#if: {{{1|}}}
  | yes
  }}

| sandbox = 
  {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/sandbox
| testcases = 
  {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/testcases

| template page = 
  {{NAMESPACE}}:{{{template page|{{PAGENAME}}}}}

}}&lt;noinclude&gt;

{{pp-template}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/start box</title>
    <ns>10</ns>
    <id>121</id>
    <revision>
      <id>241</id>
      <parentid>240</parentid>
      <timestamp>2011-06-06T22:43:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="1650">&lt;!--
  Start of green doc box
--&gt;&lt;div id=&quot;template-documentation&quot; class=&quot;template-documentation iezoomfix&quot;&gt;&lt;!--
  Add the heading at the top of the doc box:
--&gt;{{#ifeq: {{{heading|¬}}} | &lt;!--Defined but empty--&gt;
| &lt;!--&quot;heading=&quot;, do nothing--&gt;
| &lt;div style=&quot;padding-bottom: 3px; border-bottom: 1px solid #aaa; margin-bottom: 1ex;&quot;&gt;{{
  #if: {{{content|}}}
  | 
  | &lt;!--Add the [edit][purge] or [create] links--&gt;
    &lt;span class=&quot;editsection plainlinks&quot; id=&quot;doc_editlinks&quot;&gt;{{
    #if: {{{doc exist|yes}}}
    | [[{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=edit}} edit]] [{{purge|purge}}] 
    | &lt;!--/doc doesn't exist--&gt;
      [[{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}| action=edit&amp;preload={{
        #if: {{{preload|}}} 
        | {{urlencode:{{{preload}}}}}
        | {{#ifeq: {{SUBJECTSPACE}} | {{ns:File}}
          | Template:Documentation/preload-filespace
          | Template:Documentation/preload
          }} }} }} create]]
    }}&lt;/span&gt;
  }} &lt;span style=&quot;{{#if: {{{heading-style|}}}
  | {{{heading-style|}}}
  | {{#ifeq: {{SUBJECTSPACE}} | {{ns:Template}}
    | font-weight: bold; font-size: 125%
    | font-size: 150%
    }}
  }}&quot;&gt;{{#switch: {{{heading|¬}}}
  | ¬ =   
    &lt;!--&quot;heading&quot; not defined in this or previous level--&gt;
    {{#switch: {{SUBJECTSPACE}} 
    | {{ns:Template}} = Template documentation
    | {{ns:File}} = Summary
    | #default = Documentation
    }}
  | #default = 
    &lt;!--&quot;heading&quot; has data or is empty but defined--&gt;
    {{{heading|}}}
  }}&lt;/span&gt;&lt;/div&gt;
}}&lt;noinclude&gt;&lt;!-- close the div --&gt;&lt;/div&gt;

{{pp-template}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/start box2</title>
    <ns>10</ns>
    <id>122</id>
    <revision>
      <id>243</id>
      <parentid>242</parentid>
      <timestamp>2011-06-06T22:43:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="641">{{documentation/start box
| preload = {{{preload|}}}   &lt;!--Allow custom preloads--&gt;
| heading = {{{heading|¬}}}   &lt;!--Empty but defined means no header--&gt;
| heading-style = {{{heading-style|}}}
| content = {{{content|}}}

| docpage = 
  {{#if: {{{1|}}}
  | {{{1|}}}
  | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc
  }}

| doc exist = 
  {{#ifexist: 
    {{#if: {{{1|}}}
    | {{{1|}}}   &lt;!--Other docname fed--&gt;
    | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc
    }}
  | yes
  }}

}}&lt;noinclude&gt;

{{pp-template}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/template page</title>
    <ns>10</ns>
    <id>123</id>
    <revision>
      <id>20010</id>
      <parentid>245</parentid>
      <timestamp>2012-03-19T18:27:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="136">{{#switch: {{SUBPAGENAME}}
| sandbox
| testcases = {{BASEPAGENAME}}
| #default = {{PAGENAME}}
}}&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:documentation/template page/doc</title>
    <ns>10</ns>
    <id>5497</id>
    <revision>
      <id>20011</id>
      <timestamp>2012-03-19T18:28:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc</comment>
      <text xml:space="preserve" bytes="85">This subtemplate of {{tl|documentation}} is used to determine the template page name.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:done</title>
    <ns>10</ns>
    <id>15742</id>
    <revision>
      <id>88493</id>
      <parentid>88491</parentid>
      <timestamp>2016-11-22T21:34:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>heavy variant</comment>
      <text xml:space="preserve" bytes="191">&lt;span style=&quot;font-size:25px;color:green&quot;&gt;'''&amp;#x2714;'''&lt;/span&gt;&amp;nbsp;'''{{{1|Done}}}'''{{{{{|safesubst:}}}#if:{{{note|{{{reason|}}}}}}|&lt;nowiki /&gt;: {{{note|{{{reason}}}}}}}}&lt;!--template:done--&gt;</text>
      <sha1>h6ire7r5y00eyf0amvvho8r5fayxby2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dr list begin</title>
    <ns>10</ns>
    <id>14430</id>
    <revision>
      <id>80324</id>
      <parentid>80314</parentid>
      <timestamp>2015-08-04T23:58:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>.</comment>
      <text xml:space="preserve" bytes="217">The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
{| class=&quot;dsctable&quot; style=&quot;font-size:0.8em&quot;
! DR
! Applied to
! Behavior as published
! Correct behavior</text>
      <sha1>eh5gx4quusgem2414qk60ymkda5xfwm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dr list end</title>
    <ns>10</ns>
    <id>14431</id>
    <revision>
      <id>80315</id>
      <timestamp>2015-08-04T18:36:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>wip</comment>
      <text xml:space="preserve" bytes="2">|}</text>
      <sha1>14h6gj11h39pn3zk4kr6r3ghszdczjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dr list item</title>
    <ns>10</ns>
    <id>14432</id>
    <revision>
      <id>80319</id>
      <parentid>80318</parentid>
      <timestamp>2015-08-04T18:42:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="261">|-
| {{#switch:{{{wg|}}}|cwg=[http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#{{{dr|}}} CWG {{{dr|}}}]|lwg=[http://open-std.org/JTC1/SC22/WG21/docs/lwg-defects.html#{{{dr|}}} LWG {{{dr|}}}]|WG not specified}}
| {{{std|}}}
| {{{before|}}}
| {{{after|}}}</text>
      <sha1>gv3ytw8zcd30r19kssz1cjbfcpc5zgz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc</title>
    <ns>10</ns>
    <id>92</id>
    <revision>
      <id>71961</id>
      <parentid>61686</parentid>
      <timestamp>2014-07-04T18:33:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Do not add an additional row for separators</comment>
      <text xml:space="preserve" bytes="292">|- class=&quot;t-dsc&quot;
{{#if: {{{2|}}}
|{{!}} {{{1}}}
{{!}} {{{2}}}&lt;!--
--&gt;{{dsc editlink|dummy}}
|{{!}} colspan=&quot;2&quot; {{!}} {{{1}}}&lt;!--
--&gt;{{dsc editlink|dummy}}&lt;!-- dummy parameter to disable a MediaWiki optimization
--&gt;}}
{{dsc guard}}
&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>s9mltl58f8naj1a0bsp1wba9s5k6dqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc alias</title>
    <ns>10</ns>
    <id>14311</id>
    <redirect title="Template:dsc typedef" />
    <revision>
      <id>79707</id>
      <timestamp>2015-07-23T22:37:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Redirected page to [[Template:dsc typedef]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc typedef]]</text>
      <sha1>r4mcbakvjh69dllbau6r18f1kb2so38</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc begin</title>
    <ns>10</ns>
    <id>84</id>
    <revision>
      <id>61682</id>
      <parentid>61063</parentid>
      <timestamp>2013-06-08T05:25:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="112">&lt;includeonly&gt; {| class=&quot;t-dsc-begin&quot; &lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc break</title>
    <ns>10</ns>
    <id>5574</id>
    <revision>
      <id>61148</id>
      <parentid>48552</parentid>
      <timestamp>2013-06-05T12:22:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dcl list/doc&quot; to &quot;dsc/doc&quot;</comment>
      <text xml:space="preserve" bytes="124">&lt;includeonly&gt;{{dcl list end}}
{{dcl list begin}}&lt;/includeonly&gt;
&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc class</title>
    <ns>10</ns>
    <id>85</id>
    <revision>
      <id>61746</id>
      <parentid>61064</parentid>
      <timestamp>2013-06-08T05:37:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="196">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark class}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc concept</title>
    <ns>10</ns>
    <id>2426</id>
    <revision>
      <id>61716</id>
      <parentid>61150</parentid>
      <timestamp>2013-06-08T05:32:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="198">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark concept}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc const</title>
    <ns>10</ns>
    <id>2649</id>
    <revision>
      <id>61726</id>
      <parentid>61151</parentid>
      <timestamp>2013-06-08T05:34:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="196">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark const}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc custpt</title>
    <ns>10</ns>
    <id>15754</id>
    <revision>
      <id>88620</id>
      <parentid>88617</parentid>
      <timestamp>2016-12-02T21:57:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rm mark</comment>
      <text xml:space="preserve" bytes="196">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}}| nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark custpt}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>g1y13e53o9sk6n8km4pzk4c5xwksrlg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc editlink</title>
    <ns>10</ns>
    <id>8415</id>
    <revision>
      <id>56131</id>
      <parentid>48647</parentid>
      <timestamp>2013-06-01T05:31:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="284">&lt;onlyinclude&gt;{{#if:{{#var:dcl-list-template-name}}|&lt;span class=&quot;editsection noprint plainlinks&quot; title=&quot;Edit this template&quot;&gt;[{{fullurl:Template:{{#var:dcl-list-template-name}}|action=edit}} &amp;#91;edit&amp;#93;]&lt;/span&gt;}}&lt;/onlyinclude&gt;&lt;noinclude&gt;{{documentation|Template:dsc/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc end</title>
    <ns>10</ns>
    <id>86</id>
    <revision>
      <id>61152</id>
      <parentid>48645</parentid>
      <timestamp>2013-06-05T12:23:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dcl list/doc&quot; to &quot;dsc/doc&quot;</comment>
      <text xml:space="preserve" bytes="63">|}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc enum</title>
    <ns>10</ns>
    <id>5468</id>
    <revision>
      <id>61845</id>
      <parentid>61717</parentid>
      <timestamp>2013-06-09T15:55:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="195">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark enum}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc fun</title>
    <ns>10</ns>
    <id>87</id>
    <revision>
      <id>61742</id>
      <parentid>61154</parentid>
      <timestamp>2013-06-08T05:37:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="194">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark fun}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc guard</title>
    <ns>10</ns>
    <id>88</id>
    <revision>
      <id>48639</id>
      <parentid>3967</parentid>
      <timestamp>2013-05-31T18:45:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:dcl list guard]] to [[Template:dsc guard]]</comment>
      <text xml:space="preserve" bytes="2">|-</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc h1</title>
    <ns>10</ns>
    <id>89</id>
    <revision>
      <id>61713</id>
      <parentid>61155</parentid>
      <timestamp>2013-06-08T05:30:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="112">|-
| colspan=&quot;2&quot; | &lt;h3&gt;{{{1|}}}&lt;/h3&gt;
{{dsc guard}}&lt;noinclude&gt;
{{documentation | Template:dsc/doc }}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc h2</title>
    <ns>10</ns>
    <id>90</id>
    <revision>
      <id>61714</id>
      <parentid>61157</parentid>
      <timestamp>2013-06-08T05:30:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="115">|- 
| colspan=&quot;2&quot; | &lt;h5&gt; {{{1|}}} &lt;/h5&gt;
{{dsc guard}}&lt;noinclude&gt;
{{documentation | Template:dsc/doc }}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc h3</title>
    <ns>10</ns>
    <id>15756</id>
    <revision>
      <id>88621</id>
      <timestamp>2016-12-02T22:38:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="115">|- 
| colspan=&quot;2&quot; | &lt;h6&gt; {{{1|}}} &lt;/h6&gt;
{{dsc guard}}&lt;noinclude&gt;
{{documentation | Template:dsc/doc }}
&lt;/noinclude&gt;</text>
      <sha1>1vsld4cdxvgi4vw0etovkj6qxudgp4w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc header</title>
    <ns>10</ns>
    <id>91</id>
    <revision>
      <id>61688</id>
      <parentid>61158</parentid>
      <timestamp>2013-06-08T05:27:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="239">|- class=&quot;t-dsc-header&quot;
| colspan=&quot;2&quot; | &lt;div&gt;{{#if: {{{1|}}} | Defined in header &lt;code&gt;&lt;nowiki&gt;&lt;&lt;/nowiki&gt;{{trim|{{{1}}}}}&lt;nowiki&gt;&gt;&lt;/nowiki&gt;&lt;/code&gt; }} &lt;/div&gt;
{{dsc guard}}&lt;!--
--&gt;&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc header/link</title>
    <ns>10</ns>
    <id>9740</id>
    <revision>
      <id>48562</id>
      <parentid>45175</parentid>
      <timestamp>2013-05-31T18:38:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:dcl list header/link]] to [[Template:dsc header/link]]</comment>
      <text xml:space="preserve" bytes="133">&lt;onlyinclude&gt;{{#switch:{{#explode:{{PAGENAME}}|/|0}}
|cpp=[[cpp/header/{{{1|}}}|&amp;lt;{{{1|}}}&amp;gt;]]
|&amp;lt;{{{1|}}}&amp;gt;
}}&lt;/onlyinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc hitem</title>
    <ns>10</ns>
    <id>8593</id>
    <revision>
      <id>71960</id>
      <parentid>61687</parentid>
      <timestamp>2014-07-04T18:33:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Do not add an additional row for separators</comment>
      <text xml:space="preserve" bytes="298">|- class=&quot;t-dsc-hitem&quot;
{{#if: {{{2|}}}
|{{!}} {{{1}}}
{{!}} {{{2}}}&lt;!--
--&gt;{{dsc editlink|dummy}}
|{{!}} colspan=&quot;2&quot; {{!}} {{{1}}}&lt;!--
--&gt;{{dsc editlink|dummy}}&lt;!-- dummy parameter to disable a MediaWiki optimization
--&gt;}}
{{dsc guard}}
&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>nz0a00qeiy5kcaabbwwea862pse6ruy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc inc</title>
    <ns>10</ns>
    <id>106</id>
    <revision>
      <id>61160</id>
      <parentid>48789</parentid>
      <timestamp>2013-06-05T12:24:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dcl list/doc&quot; to &quot;dsc/doc&quot;</comment>
      <text xml:space="preserve" bytes="425">{{#if:{{{1|}}}&lt;!--
--&gt;|{{#vardefine:dcl-list-template-name|{{{1|}}}}}&lt;!--
 --&gt;{{ {{{1|}}}&lt;!--
    --&gt;|{{trim|{{{2|}}}}}&lt;!--
    --&gt;|{{trim|{{{3|}}}}}&lt;!--
    --&gt;|{{trim|{{{4|}}}}}&lt;!--
    --&gt;|{{trim|{{{5|}}}}}&lt;!--
    --&gt;|{{trim|{{{6|}}}}}&lt;!--
    --&gt;|{{trim|{{{7|}}}}}&lt;!--
--&gt;}}{{#vardefine:dcl-list-template-name}}&lt;!--
--&gt;|{{error | no template source given}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc macro const</title>
    <ns>10</ns>
    <id>93</id>
    <revision>
      <id>61727</id>
      <parentid>61161</parentid>
      <timestamp>2013-06-08T05:34:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="202">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark macro const}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc macro fun</title>
    <ns>10</ns>
    <id>2420</id>
    <revision>
      <id>61728</id>
      <parentid>61163</parentid>
      <timestamp>2013-06-08T05:34:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="200">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark macro fun}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mark mem</title>
    <ns>10</ns>
    <id>4972</id>
    <revision>
      <id>61164</id>
      <parentid>48596</parentid>
      <timestamp>2013-06-05T12:24:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dcl list/doc&quot; to &quot;dsc/doc&quot;</comment>
      <text xml:space="preserve" bytes="540">&lt;onlyinclude&gt;{{#if: {{#ifeq: {{#titleparts:{{PAGENAME}}|-1}} | {{#titleparts:{{{1}}}|-1}} |no}}
                    {{#ifeq: {{#titleparts:{{PAGENAME}}}} | {{#titleparts:{{{1}}}|-1}} |no}}
                    {{#ifeq: {{{nomem|}}}|true|no}} &lt;!-- check if additional description is needed
--&gt;|{{mark {{{2|mem fun}}} }} &lt;!-- 
--&gt;|{{mark {{{2|mem fun}}} | mem={{Template:{{#titleparts:{{{1|n//n}}}|{{#ifeq: {{{inlinemem|}}}|true|0|-1}}}}/title|#MAGICTITLESTRING#}} }}
}}&lt;/onlyinclude&gt;&lt;noinclude&gt;{{documentation | Template:dsc/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem class</title>
    <ns>10</ns>
    <id>94</id>
    <revision>
      <id>61743</id>
      <parentid>61165</parentid>
      <timestamp>2013-06-08T05:37:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="273">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem class | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem const</title>
    <ns>10</ns>
    <id>96</id>
    <revision>
      <id>61725</id>
      <parentid>61166</parentid>
      <timestamp>2013-06-08T05:34:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="273">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem const | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem ctor</title>
    <ns>10</ns>
    <id>2393</id>
    <revision>
      <id>61737</id>
      <parentid>61168</parentid>
      <timestamp>2013-06-08T05:36:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="324">{{dsc | {{dsc member | {{{1|}}} | (constructor) | notes={{{notes|}}} | nolink={{{nolink|}}} | nobold=true }}&lt;!--
--&gt;| {{#ifeq:{{{nolink|}}}|true|{{{1|}}}|{{{2|}}}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem fun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem dtor</title>
    <ns>10</ns>
    <id>2394</id>
    <revision>
      <id>61735</id>
      <parentid>61170</parentid>
      <timestamp>2013-06-08T05:36:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="323">{{dsc | {{dsc member | {{{1|}}} | (destructor) | notes={{{notes|}}} | nolink={{{nolink|}}} | nobold=true }}&lt;!--
--&gt;| {{#ifeq:{{{nolink|}}}|true|{{{1|}}}|{{{2|}}}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem fun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem fun</title>
    <ns>10</ns>
    <id>98</id>
    <revision>
      <id>61740</id>
      <parentid>61171</parentid>
      <timestamp>2013-06-08T05:36:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="271">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem fun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem obj</title>
    <ns>10</ns>
    <id>2196</id>
    <revision>
      <id>61722</id>
      <parentid>61172</parentid>
      <timestamp>2013-06-08T05:34:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="271">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem obj | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem sconst</title>
    <ns>10</ns>
    <id>99</id>
    <revision>
      <id>61724</id>
      <parentid>61173</parentid>
      <timestamp>2013-06-08T05:34:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="291">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{cmark static}} {{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem sconst | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem sfun</title>
    <ns>10</ns>
    <id>100</id>
    <revision>
      <id>61731</id>
      <parentid>61175</parentid>
      <timestamp>2013-06-08T05:35:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="289">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{cmark static}} {{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem sfun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem vdtor</title>
    <ns>10</ns>
    <id>2395</id>
    <revision>
      <id>61733</id>
      <parentid>61177</parentid>
      <timestamp>2013-06-08T05:35:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="342">{{dsc | {{dsc member | {{{1|}}} | (destructor) | notes={{cmark virtual}} {{{notes|}}} | nolink={{{nolink|}}} | nobold=true }}&lt;!--
--&gt;| {{#ifeq:{{{nolink|}}}|true|{{{1|}}}|{{{2|}}}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem vfun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc mem vfun</title>
    <ns>10</ns>
    <id>103</id>
    <revision>
      <id>61730</id>
      <parentid>61178</parentid>
      <timestamp>2013-06-08T05:35:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="290">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{cmark virtual}} {{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | mem vfun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc member</title>
    <ns>10</ns>
    <id>165</id>
    <revision>
      <id>80666</id>
      <parentid>65207</parentid>
      <timestamp>2015-08-25T00:36:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add missing {{lines}} template in nolink case</comment>
      <text xml:space="preserve" bytes="459">{{#if: {{{1|}}}&lt;!--
--&gt; | &lt;div class=&quot;t-dsc-member-div {{#ifeq:{{{nobold|}}}|true|t-dsc-member-nobold-div}}&quot;&gt;&lt;!--
     --&gt;&lt;div&gt;{{#ifeq:{{{nolink|}}} | true | {{lines|{{#if:{{{2|}}}|{{{2|}}}|{{{1|}}}}}}} | [[{{{1}}} | {{lines|{{ltt/core|{{{1}}}|{{{2|}}}}}}}]]}}&lt;/div&gt;&lt;!--
     --&gt;{{#if:{{{notes|}}}|&lt;div&gt;{{lines|{{{notes}}}}}&lt;/div&gt;}}&lt;!--
   --&gt;&lt;/div&gt;&lt;!--
--&gt; | {{error | no member given}} &lt;!--
--&gt;}}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>r9vob7whl9xtyrq4r5p76tkalb882bm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc namespace</title>
    <ns>10</ns>
    <id>2239</id>
    <revision>
      <id>64391</id>
      <parentid>64386</parentid>
      <timestamp>2013-08-15T20:22:38Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>the space following &quot;inline&quot; inside #ifeq was being stripped; let's try having a potential double space</comment>
      <text xml:space="preserve" bytes="242">|- class=&quot;t-dsc-header&quot;
| colspan=&quot;2&quot; | &lt;div&gt;{{#if: {{{1|}}} | Defined in {{#ifeq:{{{inline|}}}|true|inline}} namespace &lt;code&gt;{{trim|{{{1}}}}}&lt;/code&gt; }} &lt;/div&gt;
{{dsc guard}}&lt;!--
--&gt;&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc priv mem ctor</title>
    <ns>10</ns>
    <id>10137</id>
    <revision>
      <id>56172</id>
      <parentid>48632</parentid>
      <timestamp>2013-06-01T05:32:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="329">{{dsc | {{dsc member | {{{1|}}} | (constructor) | notes={{{notes|}}} | nolink={{{nolink|}}} | nobold=true }}&lt;!--
--&gt;| {{#ifeq:{{{nolink|}}}|true|{{{1|}}}|{{{2|}}}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | priv mem fun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc priv mem obj</title>
    <ns>10</ns>
    <id>2198</id>
    <revision>
      <id>61719</id>
      <parentid>61181</parentid>
      <timestamp>2013-06-08T05:33:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="275">{{dsc| {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | priv mem obj | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc priv mem vfun</title>
    <ns>10</ns>
    <id>15547</id>
    <revision>
      <id>86357</id>
      <timestamp>2016-06-28T09:59:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="295">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{cmark virtual}} {{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | priv mem vfun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>hqgx6ml08j3xwc1pokd5m7pz493x7vu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc prot mem ctor</title>
    <ns>10</ns>
    <id>5021</id>
    <revision>
      <id>61736</id>
      <parentid>61182</parentid>
      <timestamp>2013-06-08T05:36:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="329">{{dsc | {{dsc member | {{{1|}}} | (constructor) | notes={{{notes|}}} | nolink={{{nolink|}}} | nobold=true }}&lt;!--
--&gt;| {{#ifeq:{{{nolink|}}}|true|{{{1|}}}|{{{2|}}}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | prot mem fun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc prot mem dtor</title>
    <ns>10</ns>
    <id>2780</id>
    <revision>
      <id>61734</id>
      <parentid>61183</parentid>
      <timestamp>2013-06-08T05:36:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="328">{{dsc | {{dsc member | {{{1|}}} | (destructor) | notes={{{notes|}}} | nolink={{{nolink|}}} | nobold=true }}&lt;!--
--&gt;| {{#ifeq:{{{nolink|}}}|true|{{{1|}}}|{{{2|}}}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | prot mem fun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc prot mem fun</title>
    <ns>10</ns>
    <id>3439</id>
    <revision>
      <id>61739</id>
      <parentid>61186</parentid>
      <timestamp>2013-06-08T05:36:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="276">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | prot mem fun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc prot mem obj</title>
    <ns>10</ns>
    <id>2197</id>
    <revision>
      <id>61723</id>
      <parentid>61187</parentid>
      <timestamp>2013-06-08T05:34:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="276">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | prot mem obj | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc prot mem vdtor</title>
    <ns>10</ns>
    <id>5022</id>
    <revision>
      <id>61732</id>
      <parentid>61188</parentid>
      <timestamp>2013-06-08T05:35:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="347">{{dsc | {{dsc member | {{{1|}}} | (destructor) | notes={{cmark virtual}} {{{notes|}}} | nolink={{{nolink|}}} | nobold=true }}&lt;!--
--&gt;| {{#ifeq:{{{nolink|}}}|true|{{{1|}}}|{{{2|}}}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | prot mem vfun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc prot mem vfun</title>
    <ns>10</ns>
    <id>2777</id>
    <revision>
      <id>61729</id>
      <parentid>61189</parentid>
      <timestamp>2013-06-08T05:35:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="295">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{cmark virtual}} {{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{dsc mark mem | {{{1|}}} | prot mem vfun | nomem={{{nolink|}}} | inlinemem={{{inlinemem|}}} }} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc ptclass</title>
    <ns>10</ns>
    <id>2591</id>
    <revision>
      <id>61744</id>
      <parentid>61190</parentid>
      <timestamp>2013-06-08T05:37:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="198">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark ptclass}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc rconcept</title>
    <ns>10</ns>
    <id>15752</id>
    <redirect title="Template:dsc concept" />
    <revision>
      <id>88619</id>
      <parentid>88615</parentid>
      <timestamp>2016-12-02T21:56:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>not sure if I like the mark after all...</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:dsc concept]]</text>
      <sha1>9xii6syw0utnrb6p2ozhltftii64xqr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc see c</title>
    <ns>10</ns>
    <id>6314</id>
    <revision>
      <id>61691</id>
      <parentid>56187</parentid>
      <timestamp>2013-06-08T05:28:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="575">{{dsc|{{#if:{{{1|}}}|&lt;div class=&quot;t-dsc-see&quot;&gt;&lt;span&gt;[[{{{1}}}|C documentation]]&lt;/span&gt; for &lt;span class=&quot;{{#ifeq:{{{nomono|}}}|true||t-dsc-see-tt}}&quot;&gt;{{#if:{{{2|}}}&lt;!--
--&gt;|&lt;span&gt;{{trim|{{{2|}}}}}&lt;/span&gt;&lt;!--
--&gt;{{#if:{{{3|}}}|, &lt;span&gt;{{trim|{{{3|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{4|}}}|, &lt;span&gt;{{trim|{{{4|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{5|}}}|, &lt;span&gt;{{trim|{{{5|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{6|}}}|, &lt;span&gt;{{trim|{{{6|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;|&lt;span&gt;{{ltt/core|{{{1}}}}}&lt;/span&gt;}}&lt;/span&gt;&lt;/div&gt;|{{error|No link specified}}}}}}&lt;noinclude&gt;
{{documentation|Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc see cpp</title>
    <ns>10</ns>
    <id>6315</id>
    <revision>
      <id>61690</id>
      <parentid>56188</parentid>
      <timestamp>2013-06-08T05:28:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="577">{{dsc|{{#if:{{{1|}}}|&lt;div class=&quot;t-dsc-see&quot;&gt;&lt;span&gt;[[{{{1}}}|C++ documentation]]&lt;/span&gt; for &lt;span class=&quot;{{#ifeq:{{{nomono|}}}|true||t-dsc-see-tt}}&quot;&gt;{{#if:{{{2|}}}&lt;!--
--&gt;|&lt;span&gt;{{trim|{{{2|}}}}}&lt;/span&gt;&lt;!--
--&gt;{{#if:{{{3|}}}|, &lt;span&gt;{{trim|{{{3|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{4|}}}|, &lt;span&gt;{{trim|{{{4|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{5|}}}|, &lt;span&gt;{{trim|{{{5|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;{{#if:{{{6|}}}|, &lt;span&gt;{{trim|{{{6|}}}}}&lt;/span&gt;}}&lt;!--
--&gt;|&lt;span&gt;{{ltt/core|{{{1}}}}}&lt;/span&gt;}}&lt;/span&gt;&lt;/div&gt;|{{error|No link specified}}}}}}&lt;noinclude&gt;
{{documentation|Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc sep</title>
    <ns>10</ns>
    <id>104</id>
    <revision>
      <id>61689</id>
      <parentid>61193</parentid>
      <timestamp>2013-06-08T05:27:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="98">|- class=&quot;t-dsc-sep&quot;
| colspan=&quot;2&quot; |
&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc small</title>
    <ns>10</ns>
    <id>3407</id>
    <revision>
      <id>61681</id>
      <parentid>48592</parentid>
      <timestamp>2013-06-08T05:25:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="82">&lt;span class=&quot;t-dsc-small&quot;&gt;{{{1}}}&lt;/span&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc small/doc</title>
    <ns>10</ns>
    <id>3409</id>
    <revision>
      <id>48590</id>
      <parentid>13395</parentid>
      <timestamp>2013-05-31T18:42:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:dcl small/doc]] to [[Template:dsc small/doc]]</comment>
      <text xml:space="preserve" bytes="384">This template can be used in {{tlf|dcl list *}} templates in the ''title'' parameter if the target page specifies function overload, function or class template specialization. The first parameter should include ''()'' for functions (function template specializations are very similar to simple overloads) or ''&lt;&gt;'' for classes with a specific overload/specialization parameter inside.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc struct</title>
    <ns>10</ns>
    <id>6533</id>
    <revision>
      <id>56193</id>
      <parentid>48608</parentid>
      <timestamp>2013-06-01T05:32:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="197">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark struct}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc talias</title>
    <ns>10</ns>
    <id>14093</id>
    <revision>
      <id>78435</id>
      <timestamp>2015-05-23T08:35:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Create for alias templates</comment>
      <text xml:space="preserve" bytes="197">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark talias}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>m023rwr1d4cxrsij4rmarurt6tjqi08</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc tclass</title>
    <ns>10</ns>
    <id>2017</id>
    <revision>
      <id>61745</id>
      <parentid>61194</parentid>
      <timestamp>2013-06-08T05:37:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="197">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark tclass}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc tclass and t</title>
    <ns>10</ns>
    <id>15618</id>
    <revision>
      <id>86751</id>
      <timestamp>2016-07-12T18:33:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>giving a try to a combined trait + trait_t dsc entry</comment>
      <text xml:space="preserve" bytes="213">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark tclass}} {{mark talias}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>huntnf7fs00k6v4vbo1hx6rpjizduky</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc tclass and v</title>
    <ns>10</ns>
    <id>15617</id>
    <revision>
      <id>86749</id>
      <timestamp>2016-07-12T18:31:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>giving a try to a combined trait + trait_v dsc entry</comment>
      <text xml:space="preserve" bytes="211">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark tclass}} {{mark tvar}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>9ecgeswvtoadbh1ilqwvarc3yx9t6ep</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc tfun</title>
    <ns>10</ns>
    <id>107</id>
    <revision>
      <id>61741</id>
      <parentid>61195</parentid>
      <timestamp>2013-06-08T05:36:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="195">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark tfun}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc todo</title>
    <ns>10</ns>
    <id>3910</id>
    <revision>
      <id>63144</id>
      <parentid>61715</parentid>
      <timestamp>2013-07-03T08:04:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="84">{{dsc|{{todo|{{{1|}}}}}}}&lt;noinclude&gt;
{{documentation|Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc tvar</title>
    <ns>10</ns>
    <id>13837</id>
    <revision>
      <id>74045</id>
      <timestamp>2014-11-28T20:09:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>dsc tag for variable templates</comment>
      <text xml:space="preserve" bytes="195">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark tvar}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1>io2j0ho5km5ht4r892x0qj634ybgopc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc typedef</title>
    <ns>10</ns>
    <id>2589</id>
    <revision>
      <id>61844</id>
      <parentid>61721</parentid>
      <timestamp>2013-06-09T15:55:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>oops</comment>
      <text xml:space="preserve" bytes="198">{{dsc | {{dsc member | {{{1|}}} | {{{title|}}} | notes={{{notes|}}} | nolink={{{nolink|}}} }}&lt;!--
--&gt;| {{{2|}}} &lt;br/&gt; {{mark typedef}} }}&lt;noinclude&gt;
{{documentation | Template:dsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dsc/doc</title>
    <ns>10</ns>
    <id>83</id>
    <revision>
      <id>78436</id>
      <parentid>48788</parentid>
      <timestamp>2015-05-23T08:36:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+talias</comment>
      <text xml:space="preserve" bytes="11833">This is one of the family of templates used for creation of description list. These templates should be used to design function, variable or type lists.

{{list/doc}}

{{tl|dsc begin}}
: starts the description list

{{tl|dsc end}}
: ends the description list

{{tl|dsc h1 | ''heading''}}
: adds heading to the description list (&lt;tt&gt;h3&lt;/tt&gt; level)

{{tl|dsc h2 | ''heading''}}
: adds sub-heading to the description list (&lt;tt&gt;h5&lt;/tt&gt; level)

{{tl|dsc header}}
: adds explanation which header the features come from

{{tl|dsc namespace}}
: adds explanation which namespace the features are in

{{tl|dsc sep}}
: adds a separator

{{tl|dsc | ''name'' | ''explanation'' }}
: adds a generic item to the description list. If ''explanation'' is omitted, the item spans through both columns.

{{tl|dsc hitem | ''name'' | ''explanation'' }}
: adds a highlighted item to the description list. If ''explanation'' is omitted, the item spans through both columns.

{{tl|dsc inc | ''location'' | ''param1'' {{mark optional}} | ''param2'' {{mark optional}} ... }}
: Sets {{tt|dsc-list-template-name}} [https://www.mediawiki.org/wiki/Extension:Variables variable] to ''location'', includes the template from ''location'' and unsets the variable. Use this template whenever copying dsc items from a template; this will add an edit link to them. The unnamed parameters ''param1'', ''param2'', ... are passed to the template.

{{tl|dsc break}}
: breaks the columns. The width of the columns above does not depend on the content below and vice-versa.

{{tl|dsc todo | ''reason'' }}
: adds a todo item (similar to {{tl|todo}})

===Specialized templates===

There are templates already specialized for most of the usage cases.

; Classes

{{tl|dsc class | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a class.

{{tl|dsc tclass | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a class template.

{{tl|dsc talias| ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of an alias template.

{{tl|dsc ptclass | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a class template specialization.

{{tl|dsc mem class | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a member class.

; Functions

{{tl|dsc fun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a function

{{tl|dsc tfun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a function template.

&lt;!--
{{tl|dsc ptfun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a function template specialization.
--&gt;
{{tl|dsc mem fun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a public member function.

{{tl|dsc prot mem fun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a protected member function template.

{{tl|dsc mem ctor | ''link'' | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a public constructor.

{{tl|dsc prot mem ctor | ''link'' | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a protected constructor.

{{tl|dsc mem dtor | ''link'' | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a public destructor.

{{tl|dsc prot mem dtor | ''link'' | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a protected destructor.

{{tl|dsc mem vdtor | ''link'' | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a virtual public destructor.

{{tl|dsc prot mem vdtor | ''link'' | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a virtual protected destructor.

{{tl|dsc mem sfun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a static member function.

{{tl|dsc mem vfun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a virtual public member function template.

{{tl|dsc prot mem vfun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a virtual protected member function template.

{{tl|dsc macro fun | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}} -
adds an item linking to a description of a function macro.

; Constants

{{tl|dsc macro const | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a macro constant.

{{tl|dsc const | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a global constant variable.

{{tl|dsc mem const | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a constant member variable.

{{tl|dsc mem sconst | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a static constant member variable.

; Objects

{{tl|dsc mem obj | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a member object.

{{tl|dsc prot mem obj | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a protected member object.

{{tl|dsc priv mem obj | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a private member object.

; Miscellaneous

{{tl|dsc typedef | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a typedef.

{{tl|dsc enum | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a enum or enum class.

{{tl|dsc concept | ''link'' | title{{=}}''link title''{{mark optional}} | notes{{=}}''link notes''{{mark optional}} | ''explanation''}}
: adds an item linking to a description of a [[cpp/concept|concept]].

:; Parameters

''link''
: this parameter controls the link target.

{{tt|title}}=''link title''
: this parameter overrides the link title

{{tt|notes}}=''link notes''
: this parameter adds text besides the link that is not the part of the link

''explanation''
: the explanation of the feature.

All templates accept {{tt|nolink{{=}}true}} parameter. In that case no link is made, the formatting is the same.

The templates for member objects accept {{tt|inlinemem{{=}}true}} parameter. This should be used if the functionality is described inline in the page of the class.

===See also templates===
Used in ''see also'' lists.

{{tl|dsc see cpp | ''location'' 
 | ''nomono''{{=}}{{tt|true_if_serif}} {{mark optional}} 
 | ''title1''{{mark optional}} 
 | ''title2''{{mark optional}} ... 
}}
: adds a link to C++ documentation of a feature. 

{{tl|dsc see c | ''location'' 
 | ''nomono''{{=}}{{tt|true_if_serif}} {{mark optional}} 
 | ''title1''{{mark optional}} 
 | ''title2''{{mark optional}} ... 
}}
: adds a link to C documentation of a feature.

:; Parameters

''location''
: this parameter controls the link target.

''nomono''
: {{tt|true}} if serif font should be used for the title

''title1'', ''title2'', ...
: this parameter overrides the title (default the title is guessed from ''location''). Commas are placed between titles if several of them are provided.

===Example===

  &lt;nowiki&gt;
  {{dsc begin}}
  {{dsc h1 | Magic creatures}}
  {{dsc h2 | Dragon}}
  {{dsc header | dragon.h}}
  {{dsc fun | cpp/dragon/call_dragon | calls the dragon}}
  {{dsc fun | cpp/dragon/receive_fire | receives the fire}}
  {{dsc end}}
  &lt;/nowiki&gt;

The above results in the following:

{{dsc begin}}
{{dsc h1 | Magic creatures}}
{{dsc h2 | Dragon}}
{{dsc header | dragon.h}}
{{dsc fun | cpp/dragon/call_dragon | calls the dragon}}
{{dsc fun | cpp/dragon/receive_fire | receives the fire}}
{{dsc end}}

===Templates used in the implementation===

===={{tl|dsc member}}====
{{tl|dsc member | ''page'' | ''title'' {{mark optional}} | title=''title'' {{mark optional}} | nolink{{=}}''true_if_nolink'' {{mark optional}} | nobold{{=}}''true_if_nobold'' {{mark optional}} | notes{{=}}''notes'' {{mark optional}}}}
: Default title of the link is ''page''. Custom title can be supplied via the second unnamed parameter or {{tt|title}} parameter. If {{tt|nolink}} is ''true'', no link is produced. 

: Default font of the link is bold monospace. If {{tt|nobold}} is ''true'', the font is normal serif.

: Additional notes to be placed in the right of the link can be passed through {{tt|notes}} parameter.

: Both {{tt|title}} and {{tt|notes}} can accept &amp;lt;br&amp;gt; tags without breaking the layout.

===={{tl|dsc mark mem}}====
{{tl|dsc mark mem | ''link'' | ''mark_class'' | nomem{{=}}''true_if_nomem'' {{mark optional}} | inlinemem{{=}}''true_if_inlinemem'' {{mark optional}} }}
: Outputs {{tlc|mark ''mark_class''}} potentially appending additional description of the class the function/class is member of. 

: Specifically, the template checks if the parent of the page linked to by {{tt|link}} is a parent of the page the template is used in (i.e. they are siblings). For example, consider {{tt|link}} ''{{=}} a/b/c'' and ''page'' the page the template is used in. Then the template would append the additional description if {{tt|page}} equals to ''z/z/z'', or ''a/z'', or ''a/b/z/z'', but not if ''page'' is ''a/b/z'' or ''a/b''.

: If {{tt|nomem}} is ''true'' then additional description is never appended.

: The template fetches information about the name of the parent class from ''a/b/title'' page.

: If {{tt|inlinemem}} is ''true'' then the name of the parent class is fetched from ''a/b/c/title'' template. This is used when a class includes descriptions of its members inline.

===={{tl|dsc editlink}}====
{{tl|dsc editlink}}
: Outputs an &lt;nowiki&gt;[edit]&lt;/nowiki&gt; text with a link pointing to a page for editing the template whose name is defined in {{tt|dsc-list-template-name}} variable. At least one dummy parameter must be passed to this template, as Mediawiki software employs some optimizations that break the implementation.</text>
      <sha1>2fkpqko9ves0xdfaxg76brtitp940ix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dummy</title>
    <ns>10</ns>
    <id>124</id>
    <revision>
      <id>247</id>
      <parentid>246</parentid>
      <timestamp>2011-06-06T22:43:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="219">{{ambox
| type  = notice
| small = {{{small|left}}}
| text  = This is dummy page
| image = none
}}
{{lang}}&lt;noinclude&gt;
{{documentation}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:dummy/doc</title>
    <ns>10</ns>
    <id>4743</id>
    <revision>
      <id>17237</id>
      <timestamp>2012-01-09T15:56:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="67">Used as a placeholder in pages that do not contain any information.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:eq fun</title>
    <ns>10</ns>
    <id>126</id>
    <revision>
      <id>36943</id>
      <parentid>36941</parentid>
      <timestamp>2012-07-03T10:42:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix the link to the doc</comment>
      <text xml:space="preserve" bytes="594">{{#if:{{{1|}}}
|{{{!}} class{{=}}&quot;eq-fun-cpp-table&quot;
{{!-}}
{{#if: {{{2|}}}
|! First version
{{!-}}
}}
{{!}}
{{source | lang={{{lang|{{get lang}}}}} | 1={{{1|}}}}}
{{#if: {{{2|}}}|
{{!-}}
! Second version
{{!-}}
{{!}}
{{source | lang={{{lang|{{get lang}}}}} | 1={{{2|}}}}}
{{#if: {{{3|}}}
|{{!-}}
! Third version
{{!-}}
{{!}}
{{source | lang={{{lang|{{get lang}}}}} | 1={{{3|}}}}}
{{#if: {{{4|}}}
|{{!-}}
! Fourth version
{{!-}}
{{!}}
{{source | lang={{{lang|{{get lang}}}}} | 1={{{4|}}}}}
}}}}}}
{{!}}}
|{{todo|reason=no eq fun}}
}}&lt;noinclude&gt;
{{documentation|Template:source/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:error</title>
    <ns>10</ns>
    <id>127</id>
    <revision>
      <id>3993</id>
      <parentid>253</parentid>
      <timestamp>2011-06-10T20:45:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:error]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="232">&lt;{{#switch:{{lc:{{{tag}}}}}
 |p=p
 |span=span
 |div=div
 |#default=strong
}} class=&quot;error&quot;&gt;{{{message|{{{1}}}}}}&lt;/{{#switch:{{lc:{{{tag}}}}}
 |p=p
 |span=span
 |div=div
 |#default=strong
}}&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:error/doc</title>
    <ns>10</ns>
    <id>5496</id>
    <revision>
      <id>20009</id>
      <timestamp>2012-03-19T18:27:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;Shows an error.&quot;</comment>
      <text xml:space="preserve" bytes="15">Shows an error.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:example</title>
    <ns>10</ns>
    <id>6246</id>
    <revision>
      <id>73117</id>
      <parentid>73115</parentid>
      <timestamp>2014-10-15T00:14:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix previous edit</comment>
      <text xml:space="preserve" bytes="512">{{#if:{{{code|}}}
|&lt;div class=&quot;t-example {{#if:{{{std|}}}|t-example-std-{{{std}}}}}&quot;&gt;&lt;!--
--&gt;{{#if:{{{1|}}}| &lt;p&gt;{{{1|}}}&lt;/p&gt;

}}&lt;div class=&quot;t-example-live-link&quot;&gt;&lt;div class=&quot;coliru-btn coliru-btn-run-init&quot;&gt;Run this code&lt;/div&gt;&lt;/div&gt;
{{source | 1={{{code|}}} | lang={{{lang|{{get lang}}}}}}}

{{#if:{{{output|}}} | {{#ifeq: {{{p|}}} | true | Possible output: | Output:}}

{{source | lang=text | 1={{{output}}}}}
}} 
&lt;/div&gt; | {{todo|reason=no example}}}}&lt;noinclude&gt;
{{documentation|Template:source/doc}}
&lt;/noinclude&gt;</text>
      <sha1>5giphq5d7pwcxt44nt81szokp8s147f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:example editlink</title>
    <ns>10</ns>
    <id>8701</id>
    <revision>
      <id>36610</id>
      <parentid>36609</parentid>
      <timestamp>2012-06-25T18:31:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:example editlink]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="285">&lt;onlyinclude&gt;{{#if:{{#var:example-template-name}}|&lt;span class=&quot;editsection noprint plainlinks&quot; title=&quot;Edit this template&quot;&gt;[{{fullurl:Template:{{#var:example-template-name}}|action=edit}} &amp;#91;edit&amp;#93;]&lt;/span&gt;}}&lt;/onlyinclude&gt;&lt;noinclude&gt;{{documentation|Template:source/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:example template</title>
    <ns>10</ns>
    <id>8700</id>
    <revision>
      <id>47724</id>
      <parentid>47723</parentid>
      <timestamp>2013-05-16T20:02:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="661">{{#if:{{{1|}}}&lt;!--
--&gt;| {{#if: {{#pos:{{{1|}}}|//}}&lt;!--
  --&gt;|{{ambox
| type  = notice
| small = {{{small|left}}}
| text  = Templated example.&lt;br/&gt; The link is {{tt|{{#replace:{{{1|}}}|//|/&lt;PP&gt;/}}}}
| image = none
}}&lt;!--
  --&gt;|{{#vardefine:example-template-name|{{{1|}}}}}&lt;!--
    --&gt;{{ {{{1|}}}&lt;!--
      --&gt;|{{trim|{{{2|}}}}}&lt;!--
      --&gt;|{{trim|{{{3|}}}}}&lt;!--
      --&gt;|{{trim|{{{4|}}}}}&lt;!--
      --&gt;|{{trim|{{{5|}}}}}&lt;!--
      --&gt;|{{trim|{{{6|}}}}}&lt;!--
      --&gt;|{{trim|{{{7|}}}}}&lt;!--
    --&gt;}}{{#vardefine:example-template-name}}&lt;!--
  --&gt;}}&lt;!--
--&gt;|{{error | no template source given}} }}&lt;noinclude&gt;
{{documentation | Template:source/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:fmbox</title>
    <ns>10</ns>
    <id>130</id>
    <revision>
      <id>15476</id>
      <parentid>15474</parentid>
      <timestamp>2011-12-10T15:34:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1292">&lt;table {{#if:{{{id|}}}|id=&quot;{{{id|}}}&quot;}} class=&quot;plainlinks fmbox
{{#switch:{{{type|}}}
| warning    = fmbox-warning
| editnotice = fmbox-editnotice
| system          &lt;!-- system = default --&gt;
| #default   = fmbox-system
}} {{{class|}}}&quot; style=&quot;{{{style|}}}&quot;&gt;
&lt;tr&gt;
{{#ifeq:{{{image|}}}|none
| &lt;!-- No image. --&gt;
| &lt;td class=&quot;mbox-image&quot;&gt;
  {{#if:{{{image|}}}
  | {{{image}}}
  | [[File:{{#switch:{{{type|}}}
    | warning    = Cmbox deletion.png
    | editnotice = Imbox notice.png
    | system          &lt;!-- system = default --&gt;
    | #default   = Imbox notice.png
    }}|40x40px|link=|alt=]]
  }}&lt;/td&gt;
}}
&lt;td class=&quot;mbox-text&quot; style=&quot;{{{textstyle|}}}&quot;&gt; {{{text}}} &lt;/td&gt;
{{#if:{{{imageright|}}}
| &lt;td class=&quot;mbox-imageright&quot;&gt; {{{imageright}}} &lt;/td&gt;
}}
&lt;/tr&gt;
&lt;/table&gt;&lt;!--
  Detect and report usage with faulty &quot;type&quot; parameter:
--&gt;{{#switch:{{{type|}}}
|   &lt;!-- No type fed, is also valid input --&gt;
| warning
| editnotice
| system     =    &lt;!-- Do nothing, valid &quot;type&quot; --&gt;
| #default   = &lt;div style=&quot;text-align: center;&quot;&gt;This message box is using an invalid &quot;type={{{type|}}}&quot; parameter and needs fixing.&lt;/div&gt;[[Category:Wikipedia message box parameter needs fixing|{{main other|Main:}}{{FULLPAGENAME}}]]&lt;!-- Sort on namespace --&gt;
}}&lt;noinclude&gt;
{{documentation|Template:mbox/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:get lang</title>
    <ns>10</ns>
    <id>6248</id>
    <revision>
      <id>48671</id>
      <parentid>37229</parentid>
      <timestamp>2013-05-31T18:53:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>default to cpp</comment>
      <text xml:space="preserve" bytes="128">&lt;onlyinclude&gt;{{#switch:{{#explode:{{PAGENAME}}|/|0}}
|c=c
|cpp=cpp
|cpp
}}&lt;/onlyinclude&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:get lang/doc</title>
    <ns>10</ns>
    <id>6249</id>
    <revision>
      <id>48670</id>
      <parentid>21692</parentid>
      <timestamp>2013-05-31T18:52:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>default to cpp</comment>
      <text xml:space="preserve" bytes="317">Returns the programming language to use for a page by default. The output value depends on the title of the page this template is included in. 

If the page title begins with &quot;c/&quot;, then the output value is &quot;c&quot;, if the page title begins with &quot;cpp/&quot;, then the output value is &quot;cpp&quot;. Otherwise the output value is &quot;cpp&quot;.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:get types/doc</title>
    <ns>10</ns>
    <id>8822</id>
    <revision>
      <id>37223</id>
      <parentid>37222</parentid>
      <timestamp>2012-07-03T16:40:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1059">This is ''generic'' description of all ''***/get_types'' templates.

''***/get_types'' templates are used for easier definition of C++ template parameters. Often several related C++ templates have a non-member function which has identical behavior whichever of those templates are passed as parameter. For example, most of C++ containers have comparison operators that behave identically for most of the containers. We usually want to put the article for such functions in a template to reduce maintenance burden. The problem is that often C++ templates accepted as function arguments have different template arguments, so we end up with a huge {{tt|&lt;nowiki&gt;{{#switch:&lt;/nowiki&gt;}} statement.

This template solves the issue by defining the template arguments as variables. 
* {{tt|&lt;nowiki&gt;{{#var:types}}&lt;/nowiki&gt;}} contains the long type description (use it as {{tt|template&lt; &lt;nowiki&gt;{{#var:types}}&lt;/nowiki&gt; &gt;}}).
* {{tt|&lt;nowiki&gt;{{#var:types_short}}&lt;/nowiki&gt;}} contains the short type description (use it as {{tt|Type&lt;&lt;nowiki&gt;{{#var:types_short}}&lt;/nowiki&gt;&gt;}}).</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:header</title>
    <ns>10</ns>
    <id>9658</id>
    <revision>
      <id>45018</id>
      <parentid>44982</parentid>
      <timestamp>2012-12-07T18:14:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>tt font</comment>
      <text xml:space="preserve" bytes="74">{{ltt|cpp/header/{{trim|{{{1|header}}}}}|&amp;lt;{{trim|{{{1|header}}}}}&amp;gt;}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:identical</title>
    <ns>10</ns>
    <id>14399</id>
    <revision>
      <id>82284</id>
      <parentid>82283</parentid>
      <timestamp>2015-12-13T01:14:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="259">&lt;div style=&quot;overflow: hidden; margin: 1em 0 0 0; border: 1px solid #aaa; background-color: #e3f9df; padding: 0.2em 1em 1em 1em;&quot; id=&quot;identical-{{{id|}}}&quot;&gt;
&lt;h2&gt;Members {{#ifeq:{{{nonmember|no}}}|yes|and non-members}} identical to {{{1|}}} &lt;/h2&gt;
{{{2|}}}
&lt;/div&gt;</text>
      <sha1>2kpn32g7wvihhva8lc2pqb2cisptmiz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:image</title>
    <ns>10</ns>
    <id>10001</id>
    <revision>
      <id>47633</id>
      <parentid>47628</parentid>
      <timestamp>2013-05-16T14:42:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>pass the image through the first argument</comment>
      <text xml:space="preserve" bytes="210">&lt;div class=&quot;t-image&quot;&gt;
{{#if:{{{1|}}}
 |[[Image:{{{1|}}}]]
 |{{error|No image specified}}
}}
{{#if:{{{notes|}}}|&lt;div style=&quot;text-align:center;&quot;&gt;{{{notes|}}}&lt;/div&gt;}}
&lt;/div&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:image/doc</title>
    <ns>10</ns>
    <id>10002</id>
    <revision>
      <id>47634</id>
      <parentid>47632</parentid>
      <timestamp>2013-05-16T14:42:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync</comment>
      <text xml:space="preserve" bytes="86">{{tl|image|''image''|notes{{=}}''notes''{{mark optional}}}}

A container for an image.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:include</title>
    <ns>10</ns>
    <id>10058</id>
    <revision>
      <id>56202</id>
      <parentid>50427</parentid>
      <timestamp>2013-06-01T05:32:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="611">{{#if:{{{1|}}}&lt;!--
--&gt;| {{#if: {{#pos:{{{1|}}}|//}}&lt;!--
  --&gt;|{{ambox
| type  = notice
| small = {{{small|left}}}
| text  = Templated content.&lt;br/&gt; The link is {{tt|{{#replace:{{{1|}}}|//|/&lt;PP&gt;/}}}}
| image = none
}}&lt;!--
  --&gt;| {{include editlink|{{{1|}}}}}&lt;!--
    --&gt;{{ {{{1|}}}&lt;!--
      --&gt;|{{trim|{{{2|}}}}}&lt;!--
      --&gt;|{{trim|{{{3|}}}}}&lt;!--
      --&gt;|{{trim|{{{4|}}}}}&lt;!--
      --&gt;|{{trim|{{{5|}}}}}&lt;!--
      --&gt;|{{trim|{{{6|}}}}}&lt;!--
      --&gt;|{{trim|{{{7|}}}}}&lt;!--
    --&gt;}}&lt;!--
  --&gt;}}&lt;!--
--&gt;|{{error | no template source given}} }}&lt;noinclude&gt;
{{documentation | Template:include/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:include editlink</title>
    <ns>10</ns>
    <id>10057</id>
    <revision>
      <id>50428</id>
      <parentid>48784</parentid>
      <timestamp>2013-06-01T03:26:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix link to doc</comment>
      <text xml:space="preserve" bytes="314">&lt;div class=&quot;t-template-editlink&quot; style=&quot;{{{style|}}}&quot;&gt;
{{#if:{{{1|}}}|&lt;span class=&quot;t-template editsection noprint plainlinks&quot; title=&quot;Edit this template&quot;&gt;[{{fullurl:Template:{{{1}}}|action=edit}} &amp;#91;edit&amp;#93;]&lt;/span&gt;|{{error|no template given}}}}&lt;/div&gt;&lt;noinclude&gt;{{documentation|Template:include/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:include page</title>
    <ns>10</ns>
    <id>9528</id>
    <revision>
      <id>60934</id>
      <parentid>60933</parentid>
      <timestamp>2013-06-01T12:07:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="386">{{#if:{{{1|}}}&lt;!--
--&gt;|{{include page editlink| {{{1|}}}}}&lt;!--
 --&gt;{{ {{{1|}}}&lt;!--
    --&gt;|{{trim|{{{2|}}}}}&lt;!--
    --&gt;|{{trim|{{{3|}}}}}&lt;!--
    --&gt;|{{trim|{{{4|}}}}}&lt;!--
    --&gt;|{{trim|{{{5|}}}}}&lt;!--
    --&gt;|{{trim|{{{6|}}}}}&lt;!--
    --&gt;|{{trim|{{{7|}}}}}&lt;!--
--&gt;}}&lt;!--
--&gt;|{{error | no template source given}} }}&lt;noinclude&gt;
{{documentation | Template:include page/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:include page editlink</title>
    <ns>10</ns>
    <id>9529</id>
    <revision>
      <id>61441</id>
      <parentid>60935</parentid>
      <timestamp>2013-06-06T00:31:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="349">&lt;div class=&quot;t-page-template&quot; style=&quot;{{{style|}}}&quot;&gt;
{{#addbodyclass:cpp-page-template}}
{{#if:{{{1|}}}|&lt;span class=&quot;editsection noprint plainlinks&quot; title=&quot;Edit this template&quot;&gt;[{{fullurl:Template:{{{1}}}|action=edit}} &amp;#91;edit template&amp;#93;]&lt;/span&gt;|{{error|no template given}}}}&lt;/div&gt;&lt;noinclude&gt;{{documentation|Template:include page/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:include page/doc</title>
    <ns>10</ns>
    <id>9938</id>
    <revision>
      <id>64740</id>
      <parentid>50423</parentid>
      <timestamp>2013-08-26T20:16:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="300">{{tl|include page | ''template'' | ''arg1'' {{mark optional}} | ''arg2'' {{mark optional}} | ... }}
: includes the ''template'' while passing the given arguments. A convenience link is provided that enables to enter the page for editing the template without accessing the page of the template itself.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:include/doc</title>
    <ns>10</ns>
    <id>10059</id>
    <revision>
      <id>48787</id>
      <parentid>48786</parentid>
      <timestamp>2013-06-01T00:09:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:template/doc]] to [[Template:include/doc]]</comment>
      <text xml:space="preserve" bytes="443">{{tl|include | ''location'' | ''param1'' {{mark optional}} | ''param2'' {{mark optional}} ... }}
: Includes the template from ''location'' and adds an edit link. Use this template whenever using an some templated content that occupies full width of the page. The unnamed parameters ''param1'', ''param2'', ... are passed to the template.

===Implementation templates===
{{tl|include editlink | ''location''}}
: Adds an edit link to a template.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:included</title>
    <ns>10</ns>
    <id>5609</id>
    <revision>
      <id>48801</id>
      <parentid>46505</parentid>
      <timestamp>2013-06-01T00:17:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:templated]] to [[Template:included]]</comment>
      <text xml:space="preserve" bytes="161">{{ambox
| type  = notice
| small = {{{small|left}}}
| text  = Templated information. See page source.
| image = none
}}&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:included/doc</title>
    <ns>10</ns>
    <id>9929</id>
    <revision>
      <id>48803</id>
      <parentid>47061</parentid>
      <timestamp>2013-06-01T00:17:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:templated/doc]] to [[Template:included/doc]]</comment>
      <text xml:space="preserve" bytes="336">Used in switch statements that depend on a template argument as a placeholder for the default case - when the template argument is not provided at all. Since this is the case when viewing the template directly, showing a placeholder is less confusing than the alternatives of showing nothing or only some branch of the switch statement.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram</title>
    <ns>10</ns>
    <id>2278</id>
    <revision>
      <id>37651</id>
      <parentid>37650</parentid>
      <timestamp>2012-07-17T11:36:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc</comment>
      <text xml:space="preserve" bytes="350">&lt;div class=&quot;t-inheritance-diagram&quot;&gt;
{{#if:{{{image|}}}
 |{{#if:{{{map|}}}
   |{{#tag:imagemap |
      Image:{{{image|}}}{{!}}center
      {{{map|}}}
    }}
   |[[Image:{{{image|}}}]]
  }}
 |{{error|No image specified}}
}}
&lt;div style=&quot;text-align:center;&quot;&gt;
{{small|Inheritance diagram}}{{{notes|}}}
&lt;/div&gt;
&lt;/div&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/doc</title>
    <ns>10</ns>
    <id>8937</id>
    <revision>
      <id>37696</id>
      <parentid>37653</parentid>
      <timestamp>2012-07-18T16:09:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+subpages</comment>
      <text xml:space="preserve" bytes="411">Creates a frame for inheritance diagram.

{{tl|inheritance_diagram | image{{=}}''image location'' | map{{=}}''image map'' {{mark optional}} | notes{{=}}''additional notes'' {{mark optional}}}}

The template is usually used by wrapping it into another template. 
[http://en.cppreference.com/mwiki/index.php?title=Special%3APrefixIndex&amp;prefix=inheritance+diagram%2F&amp;namespace=10 This] is a list of such templates.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad alloc</title>
    <ns>10</ns>
    <id>8947</id>
    <revision>
      <id>37854</id>
      <parentid>37697</parentid>
      <timestamp>2012-07-20T20:13:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="124">{{inheritance diagram|image=std-bad_alloc-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad array new length</title>
    <ns>10</ns>
    <id>8948</id>
    <revision>
      <id>37838</id>
      <parentid>37698</parentid>
      <timestamp>2012-07-20T20:00:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="182">{{inheritance diagram|image=std-bad_array_new_length-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/memory/new/bad_alloc]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad cast</title>
    <ns>10</ns>
    <id>8949</id>
    <revision>
      <id>37833</id>
      <parentid>37699</parentid>
      <timestamp>2012-07-20T19:54:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="123">{{inheritance diagram|image=std-bad_cast-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad exception</title>
    <ns>10</ns>
    <id>8950</id>
    <revision>
      <id>37843</id>
      <parentid>37700</parentid>
      <timestamp>2012-07-20T20:04:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="128">{{inheritance diagram|image=std-bad_exception-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad function call</title>
    <ns>10</ns>
    <id>9137</id>
    <revision>
      <id>38345</id>
      <timestamp>2012-08-02T18:12:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="132">{{inheritance diagram|image=std-bad_function_call-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad optional access</title>
    <ns>10</ns>
    <id>10105</id>
    <revision>
      <id>48163</id>
      <timestamp>2013-05-18T20:30:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="178">{{inheritance diagram|image=std-bad_optional_access-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/logic_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad optional access-lwg2806</title>
    <ns>10</ns>
    <id>16225</id>
    <revision>
      <id>91293</id>
      <timestamp>2017-03-30T22:33:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="142">{{inheritance diagram|image=std-bad_optional_access-inheritance-lwg2806.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1>bxlmqwm3zzoteinicxiy3wmfg7asb1g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad typeid</title>
    <ns>10</ns>
    <id>8951</id>
    <revision>
      <id>37855</id>
      <parentid>37701</parentid>
      <timestamp>2012-07-20T20:14:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="125">{{inheritance diagram|image=std-bad_typeid-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-bad weak ptr</title>
    <ns>10</ns>
    <id>8952</id>
    <revision>
      <id>37842</id>
      <parentid>37702</parentid>
      <timestamp>2012-07-20T20:04:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="127">{{inheritance diagram|image=std-bad_weak_ptr-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic fstream</title>
    <ns>10</ns>
    <id>8953</id>
    <revision>
      <id>37858</id>
      <parentid>37703</parentid>
      <timestamp>2012-07-20T20:17:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="297">{{inheritance diagram|image=std-basic_fstream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 33 107 66 [[cpp/io/ios_base]]
rect 135 31 252 69 [[cpp/io/basic_ios]]
rect 278 4 395 42 [[cpp/io/basic_istream]]
rect 278 58 395 96 [[cpp/io/basic_ostream]]
rect 422 31 539 69 [[cpp/io/basic_iostream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic ifstream</title>
    <ns>10</ns>
    <id>8954</id>
    <revision>
      <id>37845</id>
      <parentid>37704</parentid>
      <timestamp>2012-07-20T20:06:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="207">{{inheritance diagram|image=std-basic_ifstream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/io/ios_base]]
rect 135 4 252 42 [[cpp/io/basic_ios]]
rect 278 4 395 42 [[cpp/io/basic_istream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic ios</title>
    <ns>10</ns>
    <id>8955</id>
    <revision>
      <id>37837</id>
      <parentid>37705</parentid>
      <timestamp>2012-07-20T20:00:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="120">{{inheritance diagram|image=std-basic_ios-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/io/ios_base]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic iostream</title>
    <ns>10</ns>
    <id>8956</id>
    <revision>
      <id>37832</id>
      <parentid>37706</parentid>
      <timestamp>2012-07-20T19:54:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="253">{{inheritance diagram|image=std-basic_iostream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 33 107 66 [[cpp/io/ios_base]]
rect 135 31 252 69 [[cpp/io/basic_ios]]
rect 278 4 395 42 [[cpp/io/basic_istream]]
rect 278 58 395 96 [[cpp/io/basic_ostream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic istream</title>
    <ns>10</ns>
    <id>8957</id>
    <revision>
      <id>37853</id>
      <parentid>37707</parentid>
      <timestamp>2012-07-20T20:13:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="163">{{inheritance diagram|image=std-basic_istream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/io/ios_base]]
rect 135 4 252 42 [[cpp/io/basic_ios]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic istringstream</title>
    <ns>10</ns>
    <id>8958</id>
    <revision>
      <id>37844</id>
      <parentid>37708</parentid>
      <timestamp>2012-07-20T20:05:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="212">{{inheritance diagram|image=std-basic_istringstream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/io/ios_base]]
rect 135 4 252 42 [[cpp/io/basic_ios]]
rect 278 4 395 42 [[cpp/io/basic_istream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic ofstream</title>
    <ns>10</ns>
    <id>8959</id>
    <revision>
      <id>37835</id>
      <parentid>37709</parentid>
      <timestamp>2012-07-20T19:58:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="207">{{inheritance diagram|image=std-basic_ofstream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/io/ios_base]]
rect 135 4 252 42 [[cpp/io/basic_ios]]
rect 278 4 395 42 [[cpp/io/basic_ostream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic ostream</title>
    <ns>10</ns>
    <id>8960</id>
    <revision>
      <id>37849</id>
      <parentid>37710</parentid>
      <timestamp>2012-07-20T20:09:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="163">{{inheritance diagram|image=std-basic_ostream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/io/ios_base]]
rect 135 4 252 42 [[cpp/io/basic_ios]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic ostringstream</title>
    <ns>10</ns>
    <id>8961</id>
    <revision>
      <id>37834</id>
      <parentid>37711</parentid>
      <timestamp>2012-07-20T19:57:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="212">{{inheritance diagram|image=std-basic_ostringstream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/io/ios_base]]
rect 135 4 252 42 [[cpp/io/basic_ios]]
rect 278 4 395 42 [[cpp/io/basic_ostream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-basic stringstream</title>
    <ns>10</ns>
    <id>8962</id>
    <revision>
      <id>37856</id>
      <parentid>37712</parentid>
      <timestamp>2012-07-20T20:15:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="302">{{inheritance diagram|image=std-basic_stringstream-inheritance.svg|notes={{{notes|}}}|map=
rect 5 33 107 66 [[cpp/io/ios_base]]
rect 135 31 252 69 [[cpp/io/basic_ios]]
rect 278 4 395 42 [[cpp/io/basic_istream]]
rect 278 58 395 96 [[cpp/io/basic_ostream]]
rect 422 31 539 69 [[cpp/io/basic_iostream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-codecvt</title>
    <ns>10</ns>
    <id>9067</id>
    <revision>
      <id>38068</id>
      <parentid>38052</parentid>
      <timestamp>2012-07-23T11:45:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="171">{{inheritance diagram|image=std-codecvt-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/locale/codecvt_base]]
rect 5 52 107 85 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-collate</title>
    <ns>10</ns>
    <id>9071</id>
    <revision>
      <id>38063</id>
      <parentid>38056</parentid>
      <timestamp>2012-07-23T11:44:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="126">{{inheritance diagram|image=std-collate-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-ctype</title>
    <ns>10</ns>
    <id>9066</id>
    <revision>
      <id>38064</id>
      <parentid>38051</parentid>
      <timestamp>2012-07-23T11:44:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="167">{{inheritance diagram|image=std-ctype-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/locale/ctype_base]]
rect 5 52 107 85 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-ctype char</title>
    <ns>10</ns>
    <id>9068</id>
    <revision>
      <id>38065</id>
      <parentid>38053</parentid>
      <timestamp>2012-07-23T11:44:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="172">{{inheritance diagram|image=std-ctype_char-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/locale/ctype_base]]
rect 5 52 107 85 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-domain error</title>
    <ns>10</ns>
    <id>8930</id>
    <revision>
      <id>37850</id>
      <parentid>37636</parentid>
      <timestamp>2012-07-20T20:10:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="171">{{inheritance diagram|image=std-domain_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/logic_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-future error</title>
    <ns>10</ns>
    <id>8967</id>
    <revision>
      <id>37839</id>
      <parentid>37720</parentid>
      <timestamp>2012-07-20T20:01:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="171">{{inheritance diagram|image=std-future_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/logic_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-invalid argument</title>
    <ns>10</ns>
    <id>8929</id>
    <revision>
      <id>37847</id>
      <parentid>37634</parentid>
      <timestamp>2012-07-20T20:08:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="175">{{inheritance diagram|image=std-invalid_argument-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/logic_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-io-complete</title>
    <ns>10</ns>
    <id>8963</id>
    <revision>
      <id>37846</id>
      <parentid>37713</parentid>
      <timestamp>2012-07-20T20:07:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="596">{{inheritance diagram|image=std-io-complete-inheritance.svg|notes={{{notes|}}}|map=
rect 225 4 328 36 [[cpp/io/ios_base]]
rect 218 62 335 100 [[cpp/io/basic_ios]]
rect 305 126 422 164 [[cpp/io/basic_istream]]
rect 419 319 536 357 [[cpp/io/basic_ifstream]]
rect 410 255 545 292 [[cpp/io/basic_istringstream]]
rect 130 126 247 164 [[cpp/io/basic_ostream]]
rect 14 319 132 357 [[cpp/io/basic_ofstream]]
rect 4 255 143 292 [[cpp/io/basic_ostringstream]]
rect 200 319 318 357 [[cpp/io/basic_fstream]]
rect 193 255 325 292 [[cpp/io/basic_stringstream]]
rect 221 190 339 228 [[cpp/io/basic_iostream]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-ios base-failure</title>
    <ns>10</ns>
    <id>8965</id>
    <revision>
      <id>37851</id>
      <parentid>37740</parentid>
      <timestamp>2012-07-20T20:11:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="222">{{inheritance diagram|image=std-ios_base-failure-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/runtime_error]]
rect 266 4 369 36 [[cpp/error/system_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-ios base-failure-2003</title>
    <ns>10</ns>
    <id>8964</id>
    <revision>
      <id>37831</id>
      <parentid>37739</parentid>
      <timestamp>2012-07-20T19:54:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="136">{{inheritance diagram|image=std-ios_base-failure-2003-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-length error</title>
    <ns>10</ns>
    <id>8936</id>
    <revision>
      <id>37852</id>
      <parentid>37648</parentid>
      <timestamp>2012-07-20T20:12:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="171">{{inheritance diagram|image=std-length_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/logic_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-logic error</title>
    <ns>10</ns>
    <id>8928</id>
    <revision>
      <id>37848</id>
      <parentid>37632</parentid>
      <timestamp>2012-07-20T20:09:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="126">{{inheritance diagram|image=std-logic_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-messages</title>
    <ns>10</ns>
    <id>9063</id>
    <revision>
      <id>38069</id>
      <parentid>38048</parentid>
      <timestamp>2012-07-23T11:45:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="173">{{inheritance diagram|image=std-messages-inheritance.svg|notes={{{notes|}}}|map=
rect 4 4 114 36 [[cpp/locale/messages_base]]
rect 7 52 110 85 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-money get</title>
    <ns>10</ns>
    <id>9062</id>
    <revision>
      <id>38061</id>
      <parentid>38047</parentid>
      <timestamp>2012-07-23T11:44:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="128">{{inheritance diagram|image=std-money_get-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-money put</title>
    <ns>10</ns>
    <id>9069</id>
    <revision>
      <id>38062</id>
      <parentid>38054</parentid>
      <timestamp>2012-07-23T11:44:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="128">{{inheritance diagram|image=std-money_put-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-moneypunct</title>
    <ns>10</ns>
    <id>9070</id>
    <revision>
      <id>38101</id>
      <parentid>38058</parentid>
      <timestamp>2012-07-23T15:58:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="172">{{inheritance diagram|image=std-moneypunct-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/locale/money_base]]
rect 5 52 107 85 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-num get</title>
    <ns>10</ns>
    <id>9065</id>
    <revision>
      <id>38067</id>
      <parentid>38050</parentid>
      <timestamp>2012-07-23T11:45:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="126">{{inheritance diagram|image=std-num_get-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-num put</title>
    <ns>10</ns>
    <id>9061</id>
    <revision>
      <id>38066</id>
      <parentid>38046</parentid>
      <timestamp>2012-07-23T11:45:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="126">{{inheritance diagram|image=std-num_put-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-numpunct</title>
    <ns>10</ns>
    <id>9064</id>
    <revision>
      <id>38070</id>
      <parentid>38049</parentid>
      <timestamp>2012-07-23T11:46:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="127">{{inheritance diagram|image=std-numpunct-inheritance.svg|notes={{{notes|}}}|map=
rect 5 6 107 39 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-out of range</title>
    <ns>10</ns>
    <id>8935</id>
    <revision>
      <id>37840</id>
      <parentid>37646</parentid>
      <timestamp>2012-07-20T20:02:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="171">{{inheritance diagram|image=std-out_of_range-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/logic_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-overflow error</title>
    <ns>10</ns>
    <id>8932</id>
    <revision>
      <id>37857</id>
      <parentid>37719</parentid>
      <timestamp>2012-07-20T20:16:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="175">{{inheritance diagram|image=std-overflow_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/runtime_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-range error</title>
    <ns>10</ns>
    <id>8933</id>
    <revision>
      <id>37841</id>
      <parentid>37718</parentid>
      <timestamp>2012-07-20T20:03:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="172">{{inheritance diagram|image=std-range_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/runtime_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-regex error</title>
    <ns>10</ns>
    <id>9570</id>
    <revision>
      <id>41491</id>
      <timestamp>2012-10-31T15:16:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="172">{{inheritance diagram|image=std-regex_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/runtime_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-runtime error</title>
    <ns>10</ns>
    <id>8934</id>
    <revision>
      <id>37859</id>
      <parentid>37644</parentid>
      <timestamp>2012-07-20T20:17:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="128">{{inheritance diagram|image=std-runtime_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-system error</title>
    <ns>10</ns>
    <id>8966</id>
    <revision>
      <id>37836</id>
      <parentid>37717</parentid>
      <timestamp>2012-07-20T19:59:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="173">{{inheritance diagram|image=std-system_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/runtime_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-time get</title>
    <ns>10</ns>
    <id>9059</id>
    <revision>
      <id>38059</id>
      <parentid>38044</parentid>
      <timestamp>2012-07-23T11:44:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="169">{{inheritance diagram|image=std-time_get-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/locale/time_base]]
rect 5 52 107 85 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-time put</title>
    <ns>10</ns>
    <id>9060</id>
    <revision>
      <id>38060</id>
      <parentid>38045</parentid>
      <timestamp>2012-07-23T11:44:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="169">{{inheritance diagram|image=std-time_put-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/locale/time_base]]
rect 5 52 107 85 [[cpp/locale/locale/facet]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inheritance diagram/std-underflow error</title>
    <ns>10</ns>
    <id>8931</id>
    <revision>
      <id>37830</id>
      <parentid>37716</parentid>
      <timestamp>2012-07-20T19:54:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>update</comment>
      <text xml:space="preserve" bytes="176">{{inheritance diagram|image=std-underflow_error-inheritance.svg|notes={{{notes|}}}|map=
rect 5 4 107 36 [[cpp/error/exception]]
rect 135 4 238 36 [[cpp/error/runtime_error]]
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:inherited</title>
    <ns>10</ns>
    <id>132</id>
    <revision>
      <id>17978</id>
      <parentid>13146</parentid>
      <timestamp>2012-01-19T23:34:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>shorter css class name (we ship at least 1.5MB just for that word)</comment>
      <text xml:space="preserve" bytes="74">&lt;div class=&quot;t-inherited&quot;&gt;
&lt;h2&gt;Inherited from {{{1|}}}&lt;/h2&gt;
{{{2|}}}
&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:issue table bottom</title>
    <ns>10</ns>
    <id>15741</id>
    <revision>
      <id>88489</id>
      <timestamp>2016-11-22T21:23:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>start</comment>
      <text xml:space="preserve" bytes="2">|}</text>
      <sha1>14h6gj11h39pn3zk4kr6r3ghszdczjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:issue table item</title>
    <ns>10</ns>
    <id>15744</id>
    <revision>
      <id>88503</id>
      <parentid>88500</parentid>
      <timestamp>2016-11-22T21:56:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <text xml:space="preserve" bytes="725">|-
|style=&quot;background-color:#{{issue table item/color|{{{status|nd}}}}}&quot;|'''{{#switch:{{{wg|}}}
|l|L|lwg|LWG=[{{{link|https://timsong-cpp.github.io/lwg-issues/{{{number|{{{no|{{{1}}}}}}}}}}}} LWG {{{number|{{{no|{{{1}}}}}}}}}]
|c|C|cwg|CWG=[{{{link|https://wg21.link/cwg{{{number|{{{no|{{{1}}}}}}}}}}}} CWG {{{number|{{{no|{{{1}}}}}}}}}]
|#default={{error|unrecognized WG}}
}}'''
|style=&quot;background-color:#{{issue table item/color|{{{status|nd}}}}}&quot;|{{#switch:{{{status|nd}}}
|nd|notdone|not done={{not done}}
|d|done={{done}}
|noop|no-op|nop={{done|No-op}}
|na|NA|N/A={{done|N/A}}
|#default={{error|unrecognized status}}
}}
|style=&quot;text-align:left; background-color:#{{issue table item/color|{{{status|nd}}}}}&quot;| {{{notes|}}}</text>
      <sha1>pyqpqwtvx67m367kffkrrz18bpll890</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:issue table item/color</title>
    <ns>10</ns>
    <id>15745</id>
    <revision>
      <id>88504</id>
      <parentid>88502</parentid>
      <timestamp>2016-11-22T21:58:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="92">{{#switch:{{{1}}}|nd|notdone|not done=FDEDED|d|done|noop|no-op|nop=E9FEE9|na|NA|N/A=F9F9F9}}</text>
      <sha1>rqgyx6q1yrx05svlr7vm6jmpj6xiyr5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:issue table top</title>
    <ns>10</ns>
    <id>15740</id>
    <revision>
      <id>88506</id>
      <parentid>88505</parentid>
      <timestamp>2016-11-22T22:00:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="148">{|class=&quot;wikitable sortable&quot; style=&quot;text-align:center;&quot;
|-
!style=&quot;width: 15%;&quot; |Issue #
!style=&quot;width: 15%;&quot; |Status
!style=&quot;width: 70%;&quot; |Notes
|-</text>
      <sha1>a6uzbqb7d1ptfeo1m2t566r71wir6ls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:itb</title>
    <ns>10</ns>
    <id>15747</id>
    <redirect title="Template:issue table bottom" />
    <revision>
      <id>88508</id>
      <timestamp>2016-11-23T03:56:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Redirected page to [[Template:issue table bottom]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[Template:issue table bottom]]</text>
      <sha1>nlbya02ryvlyklqcthfymexriv72go2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:itt</title>
    <ns>10</ns>
    <id>15746</id>
    <redirect title="Template:issue table top" />
    <revision>
      <id>88507</id>
      <timestamp>2016-11-23T03:56:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Redirected page to [[Template:issue table top]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Template:issue table top]]</text>
      <sha1>kpkync37mjjr37lm8eync8c2o4fvysp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:l2tt</title>
    <ns>10</ns>
    <id>134</id>
    <revision>
      <id>3985</id>
      <parentid>267</parentid>
      <timestamp>2011-06-10T20:45:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:l2tt]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="175">{{#if: {{{1|}}} |[[{{trim|{{{1|}}}}}|&lt;tt&gt;{{l2tt/core|{{{1}}}|{{{2|}}}|{{{3|}}}}}&lt;/tt&gt;]]| {{error|no link given}} }}&lt;noinclude&gt;
{{documentation | Template:rl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:l2tt/core</title>
    <ns>10</ns>
    <id>135</id>
    <revision>
      <id>18226</id>
      <parentid>269</parentid>
      <timestamp>2012-01-25T22:41:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:l2tt/core]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="102">{{#if:{{{3|}}}|{{{3}}}|{{#explode:{{{1}}}|/|-2}}}}::{{#if:{{{2|}}}|{{{2}}}|{{#explode:{{{1}}}|/|-1}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lang</title>
    <ns>10</ns>
    <id>136</id>
    <revision>
      <id>10242</id>
      <parentid>3987</parentid>
      <timestamp>2011-09-02T21:04:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add arabic wiki</comment>
      <text xml:space="preserve" bytes="402">[[ar:{{FULLPAGENAMEE}}]]
[[pt-br:{{FULLPAGENAMEE}}]]
[[zh:{{FULLPAGENAMEE}}]]
[[cs:{{FULLPAGENAMEE}}]]
[[de:{{FULLPAGENAMEE}}]]
[[es:{{FULLPAGENAMEE}}]]
[[fr:{{FULLPAGENAMEE}}]]
[[it:{{FULLPAGENAMEE}}]]
[[ja:{{FULLPAGENAMEE}}]]
[[lv:{{FULLPAGENAMEE}}]]
[[nl:{{FULLPAGENAMEE}}]]
[[pl:{{FULLPAGENAMEE}}]]
[[ro:{{FULLPAGENAMEE}}]]
[[ru:{{FULLPAGENAMEE}}]]
[[tr:{{FULLPAGENAMEE}}]]
[[tw:{{FULLPAGENAMEE}}]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:langlinks</title>
    <ns>10</ns>
    <id>15314</id>
    <revision>
      <id>84967</id>
      <parentid>84966</parentid>
      <timestamp>2016-03-22T21:36:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <text xml:space="preserve" bytes="722">&lt;includeonly&gt;{{langlinks/one|{{{1|}}}}}{{langlinks/one|{{{2|}}}}}{{langlinks/one|{{{3|}}}}}{{langlinks/one|{{{4|}}}}}{{langlinks/one|{{{5|}}}}}{{langlinks/one|{{{6|}}}}}{{langlinks/one|{{{7|}}}}}{{langlinks/one|{{{8|}}}}}{{langlinks/one|{{{9|}}}}}{{langlinks/one|{{{10|}}}}}{{langlinks/one|{{{11|}}}}}{{langlinks/one|{{{12|}}}}}{{langlinks/one|{{{13|}}}}}&lt;/includeonly&gt;&lt;noinclude&gt;
This template produces interwiki links to pages in other language versions of cppreference with the same name as the page it is used on. For example, {{tt|&lt;nowiki&gt;{{langlinks|de|zh}}&lt;/nowiki&gt;}} on a page named {{tt|&lt;nowiki&gt;[[Foo/Bar/Baz]]&lt;/nowiki&gt;}} is equivalent to {{tt|&lt;nowiki&gt;[[de:Foo/Bar/Baz]][[zh:Foo/Bar/Baz]]&lt;/nowiki&gt;}}.
&lt;/noinclude&gt;</text>
      <sha1>5xqsnladygmdscd9s1fqa9woui0gqhz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:langlinks-full</title>
    <ns>10</ns>
    <id>15301</id>
    <revision>
      <id>84944</id>
      <parentid>84938</parentid>
      <timestamp>2016-03-22T20:18:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="80">&lt;includeonly&gt;
{{langlinks|ar|cs|de|es|fr|it|ja|ko|pl|pt|ru|tr|zh}}&lt;/includeonly&gt;</text>
      <sha1>s6uyx4t7db6jfgnbcd5qa8lvi32zjn7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:langlinks/one</title>
    <ns>10</ns>
    <id>15315</id>
    <revision>
      <id>84941</id>
      <timestamp>2016-03-22T20:16:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="45">{{#if:{{{1|}}}|[[{{{1}}}:{{FULLPAGENAME}}]]}}</text>
      <sha1>ntohdc07vu3xzlajbvz0j32io2vw6l7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lc</title>
    <ns>10</ns>
    <id>10281</id>
    <revision>
      <id>64752</id>
      <parentid>64750</parentid>
      <timestamp>2013-08-26T21:14:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:lc]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="112">&lt;span class=&quot;t-lc&quot;&gt;{{#autolink:{{get_lang}}|{{{1|}}}|{{{2|}}}}}&lt;/span&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lc/doc</title>
    <ns>10</ns>
    <id>10282</id>
    <revision>
      <id>64751</id>
      <parentid>48773</parentid>
      <timestamp>2013-08-26T21:14:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>sync</comment>
      <text xml:space="preserve" bytes="443">{{tl|lc|''identifier''|''title_override''}}

Automatically creates a link to ''identifier''. Which identifiers are linked where are defined in [[MediaWiki:autolinker-definition-c]] and [[MediaWiki:autolinker-definition-cpp]]. Which of these lists are used depends on the output of {{tl|get_lang}} for the current page. 

The title of the link is ''identifier'', unless ''title_override'' is not empty, in which case ''title_override'' is used.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:left</title>
    <ns>10</ns>
    <id>137</id>
    <revision>
      <id>10399</id>
      <parentid>10398</parentid>
      <timestamp>2011-09-10T20:10:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="183">&lt;includeonly&gt;&lt;div style=&quot;text-align:left; width:auto; margin-left:auto; margin-right:auto;&quot;&gt;{{{1}}}&lt;/div&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:center/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:li</title>
    <ns>10</ns>
    <id>5736</id>
    <revision>
      <id>22529</id>
      <parentid>22353</parentid>
      <timestamp>2012-04-19T21:15:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>variables aren't necessary</comment>
      <text xml:space="preserve" bytes="189">&lt;includeonly&gt;&lt;onlyinclude&gt;&lt;/div&gt;&lt;div class=&quot;t-li1&quot;&gt;{{#if:{{{1|}}}|&lt;span class=&quot;t-li&quot;&gt;{{{1|}}})&lt;/span&gt;}}&lt;/onlyinclude&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation|Template:li/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:li begin</title>
    <ns>10</ns>
    <id>6331</id>
    <revision>
      <id>22528</id>
      <parentid>22527</parentid>
      <timestamp>2012-04-19T21:14:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="139">&lt;includeonly&gt;&lt;onlyinclude&gt;&lt;div style=&quot;display:none;&quot;&gt;&lt;/onlyinclude&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation|Template:li/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:li end</title>
    <ns>10</ns>
    <id>6332</id>
    <revision>
      <id>22524</id>
      <parentid>22342</parentid>
      <timestamp>2012-04-19T21:09:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:liend]] to [[Template:li end]]</comment>
      <text xml:space="preserve" bytes="91">&lt;onlyinclude&gt;&lt;/div&gt;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation|Template:li/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:li/doc</title>
    <ns>10</ns>
    <id>5737</id>
    <revision>
      <id>39365</id>
      <parentid>39291</parentid>
      <timestamp>2012-08-30T21:07:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>Undo revision 39291 by [[Special:Contributions/P12bot|P12bot]] ([[User talk:P12bot|talk]])</comment>
      <text xml:space="preserve" bytes="1041">Labeled list templates.

{{tl|li begin}} - starts a labeled list.

{{tl|li end}} - ends a labeled list.

{{tl|li|''label''}}

{{tl|lii|''label''}}

{{tl|liii|''label''}}

Adds an item with a custom label to an ordered list. The {{tt|label}} parameter specifies the label. If it is not specified, no label is added. {{tl|li}}, {{tl|lii}} and {{tl|liii}} differs by the amount of indentation.

===Shorter list syntax===
Shorter list syntax with almost equivalent behavior is implemented:

&lt;pre&gt;&lt;nowiki&gt;
@1@ text
@2@ text
@3-4@ text
:@5@ text
:@6@ text
&lt;/nowiki&gt;&lt;/pre&gt;

is equivalent to:

&lt;pre&gt;&lt;nowiki&gt;
{{li begin}}
{{li|1}} text
{{li|2}} text
{{li|3-4}} text
{{lii|5}} text
{{lii|6}} text
{{li end}}
&lt;/nowiki&gt;&lt;/pre&gt;

===Example===
{{source|lang=text|
&lt;nowiki&gt;
{{li begin}}
{{li|1}} item

{{li|2}} item

{{li|3-4}} item

{{lii|1}} item
{{lii|2-5}} item
{{lii|6-7}} item

{{li|5}} item
{{li end}}
&lt;/nowiki&gt;
}}

{{li begin}}
{{li|1}} item

{{li|2}} item

{{li|3-4}} item

{{lii|1}} item
{{lii|2-5}} item
{{lii|6-7}} item

{{li|5}} item
{{li end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lib</title>
    <ns>10</ns>
    <id>9258</id>
    <revision>
      <id>39408</id>
      <parentid>39007</parentid>
      <timestamp>2012-09-05T08:56:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>trim whitespace</comment>
      <text xml:space="preserve" bytes="329">[{{trim|{{{2|}}}}} {{trim|{{{1|}}}}}]&lt;span style=&quot;color: #BBB; font-size: 0.7em;&quot;&gt;{{#if:{{{src|}}}|&lt;nowiki&gt;[&lt;/nowiki&gt;[{{trim|{{{src|}}}}} src]&lt;nowiki&gt;]&lt;/nowiki&gt;}}{{#if:{{{doc|}}}|&lt;nowiki&gt;[&lt;/nowiki&gt;[{{trim|{{{doc|}}}}} doc]&lt;nowiki&gt;]&lt;/nowiki&gt;}}&lt;/span&gt;{{#if:{{{3|}}}|&amp;nbsp;-&amp;nbsp;{{{3|}}}}}&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lib/doc</title>
    <ns>10</ns>
    <id>9259</id>
    <revision>
      <id>39008</id>
      <parentid>39002</parentid>
      <timestamp>2012-08-21T20:30:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="200">Creates an entry for use in [[cpp/links/libs]].

{{tl|lib|''title''|''url''|''notes''{{mark optional}}|doc{{=}}''url to API docs''{{mark optional}}|src{{=}}''url to source tarball''{{mark optional}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lii</title>
    <ns>10</ns>
    <id>6328</id>
    <revision>
      <id>22530</id>
      <parentid>22354</parentid>
      <timestamp>2012-04-19T21:15:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>variables aren't necessary</comment>
      <text xml:space="preserve" bytes="189">&lt;includeonly&gt;&lt;onlyinclude&gt;&lt;/div&gt;&lt;div class=&quot;t-li2&quot;&gt;{{#if:{{{1|}}}|&lt;span class=&quot;t-li&quot;&gt;{{{1|}}})&lt;/span&gt;}}&lt;/onlyinclude&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation|Template:li/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:liii</title>
    <ns>10</ns>
    <id>6329</id>
    <revision>
      <id>22531</id>
      <parentid>22355</parentid>
      <timestamp>2012-04-19T21:15:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>variables aren't necessary</comment>
      <text xml:space="preserve" bytes="189">&lt;includeonly&gt;&lt;onlyinclude&gt;&lt;/div&gt;&lt;div class=&quot;t-li3&quot;&gt;{{#if:{{{1|}}}|&lt;span class=&quot;t-li&quot;&gt;{{{1|}}})&lt;/span&gt;}}&lt;/onlyinclude&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation|Template:li/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lines</title>
    <ns>10</ns>
    <id>12959</id>
    <revision>
      <id>65198</id>
      <timestamp>2013-09-04T23:12:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>creates &quot;proper&quot; html structure for lines separated by &lt;br&gt;</comment>
      <text xml:space="preserve" bytes="218">&lt;onlyinclude&gt;&lt;span class=&quot;t-lines&quot;&gt;&lt;span&gt;{{#replace:{{#replace:{{#replace:{{{1|}}}|&lt;br&gt;|&lt;/span&gt;&lt;span&gt;}}|&lt;br/&gt;|&lt;/span&gt;&lt;span&gt;}}|&lt;br /&gt;|&lt;/span&gt;&lt;span&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1>fzbvn59vjvsovf5gftimuwstua13l0y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lines/doc</title>
    <ns>10</ns>
    <id>12960</id>
    <revision>
      <id>65199</id>
      <timestamp>2013-09-04T23:13:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="133">{{tl|lines| ''text''}}

Extracts lines from {{tt|&lt;nowiki&gt;&lt;br&gt;&lt;/nowiki&gt;}}-separated text and puts each of them into separate HTML tag.</text>
      <sha1>h54pmilarva0afookfeoj4y8oel8h15</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:list guard</title>
    <ns>10</ns>
    <id>5322</id>
    <revision>
      <id>19392</id>
      <parentid>19380</parentid>
      <timestamp>2012-03-11T11:22:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:table guard]] to [[Template:list guard]]: better name</comment>
      <text xml:space="preserve" bytes="72">&lt;onlyinclude&gt;|-
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:list guard/doc</title>
    <ns>10</ns>
    <id>5323</id>
    <revision>
      <id>19393</id>
      <parentid>19381</parentid>
      <timestamp>2012-03-11T11:22:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:table guard/doc]] to [[Template:list guard/doc]]: better name</comment>
      <text xml:space="preserve" bytes="152">Forces an end of table row. 

This template is used in table building templates to prevent spaces after a template to be included into the cell content.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:list/doc</title>
    <ns>10</ns>
    <id>5326</id>
    <revision>
      <id>48546</id>
      <parentid>48540</parentid>
      <timestamp>2013-05-31T18:12:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="716">&lt;div style=&quot;margin: 1em 1em 2em 1em; padding: 0.2em 1em 1em; border: 1px solid #AAAAAA;&quot;&gt;
&lt;h4&gt;List template families&lt;/h4&gt;

* [[Template:dsc |dsc ****]] : For creation of member variable/function lists.
* [[Template:dcl |dcl ****]] : For creation of detailed declaration lists (those including actual declaration code)
* [[Template:sdsc | sdsc ****]] : For creation of lists representing various syntaxes of a language feature. Used in subpages of [[cpp/language]] 
* [[Template:par | par ****]] : For creation of lists explaining function parameters.
* [[Template:spar | spar ****]] : For creation of lists explaining syntax parameters.
* [[Template:nv | nv ****]] : For creation of feature lists in navbars.

&lt;/div&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:livecodelink</title>
    <ns>10</ns>
    <id>9916</id>
    <revision>
      <id>64253</id>
      <parentid>46821</parentid>
      <timestamp>2013-08-15T16:04:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:livecodelink]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="116">&lt;onlyinclude&gt;{{#tag:LiveCodeLink|{{{1}}}|compiler={{{compiler|}}}|text={{{text|}}}}}&lt;/onlyinclude&gt;
{{documentation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ltf</title>
    <ns>10</ns>
    <id>138</id>
    <revision>
      <id>10520</id>
      <parentid>4216</parentid>
      <timestamp>2011-09-15T13:43:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix html tag mismatch</comment>
      <text xml:space="preserve" bytes="178">{{#if: {{{1|}}} |[[{{trim|{{{1|}}}}}|&lt;tt&gt;{{ltt/core|{{{1}}}|{{{2|}}}}}({{{args|}}})&lt;/tt&gt;]]| {{error|no link given}} }}&lt;noinclude&gt;
{{documentation | Template:rl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ltt</title>
    <ns>10</ns>
    <id>139</id>
    <revision>
      <id>8686</id>
      <parentid>3977</parentid>
      <timestamp>2011-08-15T20:38:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix incorrect &lt;/tt&gt; placement</comment>
      <text xml:space="preserve" bytes="165">{{#if: {{{1|}}} |[[{{trim|{{{1|}}}}}|&lt;tt&gt;{{ltt/core|{{{1}}}|{{{2|}}}}}&lt;/tt&gt;]]| {{error|no link given}} }}&lt;noinclude&gt;
{{documentation | Template:rl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ltt/core</title>
    <ns>10</ns>
    <id>140</id>
    <revision>
      <id>4214</id>
      <parentid>279</parentid>
      <timestamp>2011-06-13T00:20:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:ltt/core]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="50">{{#if:{{{2|}}}|{{{2}}}|{{#explode:{{{1}}}|/|-1}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:main other</title>
    <ns>10</ns>
    <id>14440</id>
    <revision>
      <id>80383</id>
      <timestamp>2015-08-08T03:24:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Copy from https://en.wikipedia.org/w/index.php?title=Template:Main_other&amp;oldid=388689011</comment>
      <text xml:space="preserve" bytes="296">{{#switch:
  &lt;!--If no or empty &quot;demospace&quot; parameter then detect namespace--&gt;
  {{#if:{{{demospace|}}} 
  | {{lc: {{{demospace}}} }}    &lt;!--Use lower case &quot;demospace&quot;--&gt;
  | {{#ifeq:{{NAMESPACE}}|{{ns:0}}
    | main
    | other
    }} 
  }}
| main     = {{{1|}}}
| other
| #default = {{{2|}}}
}}</text>
      <sha1>sqmfbwuomr8zcds7kzxu7e9pnage1fa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark</title>
    <ns>10</ns>
    <id>141</id>
    <revision>
      <id>65203</id>
      <parentid>17982</parentid>
      <timestamp>2013-09-04T23:29:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add class= parameter</comment>
      <text xml:space="preserve" bytes="101">&lt;span class=&quot;t-mark {{{class|}}}&quot;&gt;({{trim|{{{1}}}}})&lt;/span&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1>mcxrwbmj3rkmqhq44sbnbo4ctbvum1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark c++03</title>
    <ns>10</ns>
    <id>13861</id>
    <revision>
      <id>74654</id>
      <timestamp>2014-12-19T22:49:05Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>To differentiate c++98 from c++03 in similar way of c95 mark does from c89</comment>
      <text xml:space="preserve" bytes="100">{{mark rev|class=t-since-cxx03|C++03}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>1z11jf841andupznrpq5zwneq6k9vkt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark c++11</title>
    <ns>10</ns>
    <id>2413</id>
    <revision>
      <id>65217</id>
      <parentid>5718</parentid>
      <timestamp>2013-09-04T23:29:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="100">{{mark rev|class=t-since-cxx11|C++11}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>lulbbxaumlfx83e6kyvhnuxmrarumof</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark c++14</title>
    <ns>10</ns>
    <id>9976</id>
    <revision>
      <id>65229</id>
      <parentid>65216</parentid>
      <timestamp>2013-09-04T23:32:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark c++14]]&quot;: High traffic page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))</comment>
      <text xml:space="preserve" bytes="100">{{mark rev|class=t-since-cxx14|C++14}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>tgh7ijxr4gkhma1hfoj9i87qz12uxq5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark c++17</title>
    <ns>10</ns>
    <id>13807</id>
    <revision>
      <id>73718</id>
      <parentid>73693</parentid>
      <timestamp>2014-11-13T14:43:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>class</comment>
      <text xml:space="preserve" bytes="100">{{mark rev|class=t-since-cxx17|C++17}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>nbctkonox52og4ex9ggpzxyn750pql0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark c11</title>
    <ns>10</ns>
    <id>6531</id>
    <revision>
      <id>65224</id>
      <parentid>25733</parentid>
      <timestamp>2013-09-04T23:29:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="96">{{mark rev|class=t-since-c11|C11}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>iwc5me5gauoqak2cxytnz6xmmx613pt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark c95</title>
    <ns>10</ns>
    <id>13857</id>
    <revision>
      <id>74503</id>
      <timestamp>2014-12-18T19:35:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>if we're going to get serious about C, we need since/until/mark C95</comment>
      <text xml:space="preserve" bytes="96">{{mark rev|class=t-since-c95|C95}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>a3ia0yp9ryrqori19tmrlw07ea5q2vs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark c99</title>
    <ns>10</ns>
    <id>5778</id>
    <revision>
      <id>65226</id>
      <parentid>22163</parentid>
      <timestamp>2013-09-04T23:29:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="96">{{mark rev|class=t-since-c99|C99}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>nvwejr2onbj1tvenwqw1m8nih46upy6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark class</title>
    <ns>10</ns>
    <id>146</id>
    <revision>
      <id>4010</id>
      <parentid>291</parentid>
      <timestamp>2011-06-10T20:51:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark class]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="76">{{mark|class}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark concept</title>
    <ns>10</ns>
    <id>2425</id>
    <revision>
      <id>15464</id>
      <parentid>8475</parentid>
      <timestamp>2011-12-10T15:06:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>import the documentation properly</comment>
      <text xml:space="preserve" bytes="75">{{mark|concept}}&lt;noinclude&gt;{{documentation| Template:mark/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark const</title>
    <ns>10</ns>
    <id>2650</id>
    <revision>
      <id>9966</id>
      <parentid>9965</parentid>
      <timestamp>2011-08-26T19:22:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark const]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="121">{{mark|constant {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark custpt</title>
    <ns>10</ns>
    <id>15753</id>
    <revision>
      <id>88616</id>
      <timestamp>2016-12-02T21:45:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="97">{{mark|customization point object}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>cu7x36abwevevludoj6t98or97xzcg7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark deprecated</title>
    <ns>10</ns>
    <id>147</id>
    <revision>
      <id>3946</id>
      <parentid>293</parentid>
      <timestamp>2011-06-10T20:40:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark deprecated]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="81">{{mark|deprecated}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark enum</title>
    <ns>10</ns>
    <id>5467</id>
    <revision>
      <id>19944</id>
      <parentid>19942</parentid>
      <timestamp>2012-03-19T13:17:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark enum]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="75">{{mark|enum}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark fun</title>
    <ns>10</ns>
    <id>148</id>
    <revision>
      <id>4003</id>
      <parentid>295</parentid>
      <timestamp>2011-06-10T20:47:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark fun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="79">{{mark|function}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark implicit</title>
    <ns>10</ns>
    <id>149</id>
    <revision>
      <id>12477</id>
      <parentid>4011</parentid>
      <timestamp>2011-10-27T09:16:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="86">{{mark|implicitly declared}}&lt;noinclude&gt;{{documentation|Template:mark/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark keyword</title>
    <ns>10</ns>
    <id>2844</id>
    <revision>
      <id>10756</id>
      <parentid>10755</parentid>
      <timestamp>2011-09-21T13:22:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark keyword]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="78">{{mark|keyword}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark language</title>
    <ns>10</ns>
    <id>6547</id>
    <revision>
      <id>25829</id>
      <parentid>25828</parentid>
      <timestamp>2012-04-27T13:54:13Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <minor/>
      <comment>Changed protection level for &quot;[[Template:mark language]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="79">{{mark|language}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark macro const</title>
    <ns>10</ns>
    <id>150</id>
    <revision>
      <id>3996</id>
      <parentid>299</parentid>
      <timestamp>2011-06-10T20:45:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark macro const]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="85">{{mark|macro constant}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark macro fun</title>
    <ns>10</ns>
    <id>2421</id>
    <revision>
      <id>8434</id>
      <parentid>8433</parentid>
      <timestamp>2011-08-09T21:05:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark macro fun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="85">{{mark|function macro}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark mem class</title>
    <ns>10</ns>
    <id>151</id>
    <revision>
      <id>17371</id>
      <parentid>4002</parentid>
      <timestamp>2012-01-10T20:29:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+mem param</comment>
      <text xml:space="preserve" bytes="132">{{mark|public member class {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark mem const</title>
    <ns>10</ns>
    <id>152</id>
    <revision>
      <id>4012</id>
      <parentid>303</parentid>
      <timestamp>2011-06-10T20:51:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark mem const]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="135">{{mark|public member constant {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark mem fun</title>
    <ns>10</ns>
    <id>153</id>
    <revision>
      <id>3995</id>
      <parentid>305</parentid>
      <timestamp>2011-06-10T20:45:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark mem fun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="135">{{mark|public member function {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark mem obj</title>
    <ns>10</ns>
    <id>2193</id>
    <revision>
      <id>4967</id>
      <parentid>4954</parentid>
      <timestamp>2011-07-10T20:13:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark mem obj]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="91">{{mark|public member object}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark mem sconst</title>
    <ns>10</ns>
    <id>154</id>
    <revision>
      <id>4001</id>
      <parentid>307</parentid>
      <timestamp>2011-06-10T20:46:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark mem sconst]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="142">{{mark|public static member constant {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark mem sfun</title>
    <ns>10</ns>
    <id>155</id>
    <revision>
      <id>4013</id>
      <parentid>309</parentid>
      <timestamp>2011-06-10T20:51:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark mem sfun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="142">{{mark|public static member function {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark mem vfun</title>
    <ns>10</ns>
    <id>156</id>
    <revision>
      <id>4005</id>
      <parentid>311</parentid>
      <timestamp>2011-06-10T20:48:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark mem vfun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="143">{{mark|virtual public member function {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark optional</title>
    <ns>10</ns>
    <id>157</id>
    <revision>
      <id>4000</id>
      <parentid>313</parentid>
      <timestamp>2011-06-10T20:46:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark optional]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="79">{{mark|optional}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark priv mem class</title>
    <ns>10</ns>
    <id>159</id>
    <revision>
      <id>4009</id>
      <parentid>317</parentid>
      <timestamp>2011-06-10T20:50:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark priv mem class]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="91">{{mark|private member class}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark priv mem fun</title>
    <ns>10</ns>
    <id>160</id>
    <revision>
      <id>3999</id>
      <parentid>319</parentid>
      <timestamp>2011-06-10T20:46:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark priv mem fun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="94">{{mark|private member function}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark priv mem obj</title>
    <ns>10</ns>
    <id>2194</id>
    <revision>
      <id>4968</id>
      <parentid>4955</parentid>
      <timestamp>2011-07-10T20:13:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark priv mem obj]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="92">{{mark|private member object}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark priv mem vfun</title>
    <ns>10</ns>
    <id>15546</id>
    <revision>
      <id>86356</id>
      <timestamp>2016-06-28T09:59:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="144">{{mark|virtual private member function {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>nf9f6kcwyvlnoit9iaaeotk13lmfugu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark prot mem class</title>
    <ns>10</ns>
    <id>161</id>
    <revision>
      <id>4014</id>
      <parentid>321</parentid>
      <timestamp>2011-06-10T20:51:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark prot mem class]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="94">{{mark |protected member class}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark prot mem fun</title>
    <ns>10</ns>
    <id>162</id>
    <revision>
      <id>3994</id>
      <parentid>323</parentid>
      <timestamp>2011-06-10T20:45:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark prot mem fun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="96">{{mark|protected member function}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark prot mem obj</title>
    <ns>10</ns>
    <id>2195</id>
    <revision>
      <id>4969</id>
      <parentid>4956</parentid>
      <timestamp>2011-07-10T20:13:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark prot mem obj]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="94">{{mark|protected member object}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark prot mem vfun</title>
    <ns>10</ns>
    <id>2778</id>
    <revision>
      <id>10750</id>
      <parentid>10545</parentid>
      <timestamp>2011-09-21T13:18:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark prot mem vfun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="146">{{mark|virtual protected member function {{#if: {{{mem|}}} | of {{tt|{{{mem}}}}}}}}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark ptclass</title>
    <ns>10</ns>
    <id>2588</id>
    <revision>
      <id>9763</id>
      <parentid>9751</parentid>
      <timestamp>2011-08-25T09:56:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark ptclass]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="100">{{mark|class template specialization}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark ptfun</title>
    <ns>10</ns>
    <id>2587</id>
    <revision>
      <id>9762</id>
      <parentid>9750</parentid>
      <timestamp>2011-08-25T09:56:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark ptfun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="103">{{mark|function template specialization}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark rev</title>
    <ns>10</ns>
    <id>12958</id>
    <revision>
      <id>65197</id>
      <timestamp>2013-09-04T23:11:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>custom class for all revision marks</comment>
      <text xml:space="preserve" bytes="105">&lt;span class=&quot;t-mark-rev {{{class|}}}&quot;&gt;({{trim|{{{1}}}}})&lt;/span&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1>iy3agkin2yoqxishxsofjtbvyxh2ckb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since c++03</title>
    <ns>10</ns>
    <id>13866</id>
    <revision>
      <id>74719</id>
      <timestamp>2014-12-23T20:08:46Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-since-cxx03|since C++03}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>p19shdm7979mk4x36rgm3o9jnmerg56</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since c++11</title>
    <ns>10</ns>
    <id>2414</id>
    <revision>
      <id>65214</id>
      <parentid>16181</parentid>
      <timestamp>2013-09-04T23:29:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-since-cxx11|since C++11}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>eys1z76ww125h4awr68uq4ev3zynfim</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since c++14</title>
    <ns>10</ns>
    <id>9978</id>
    <revision>
      <id>65230</id>
      <parentid>65218</parentid>
      <timestamp>2013-09-04T23:32:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark since c++14]]&quot;: High traffic page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-since-cxx14|since C++14}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>p9afmcxjd8mryr1omq29829qdnjifdo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since c++17</title>
    <ns>10</ns>
    <id>13806</id>
    <revision>
      <id>73717</id>
      <parentid>73691</parentid>
      <timestamp>2014-11-13T14:42:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>class</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-since-cxx17|since C++17}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>2z5b0d6ivqcqh9i1xyoby9q4qlucbyt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since c11</title>
    <ns>10</ns>
    <id>6365</id>
    <revision>
      <id>65223</id>
      <parentid>25358</parentid>
      <timestamp>2013-09-04T23:29:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="102">{{mark rev|class=t-since-c11|since C11}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>krg186glfmaabje14od6zb8hrav8aqf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since c95</title>
    <ns>10</ns>
    <id>13858</id>
    <revision>
      <id>74504</id>
      <timestamp>2014-12-18T19:36:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{mark rev|class=t-since-c95|since C95}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>16w6togrqomd9u3zcsjky3ldljlk14q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since c99</title>
    <ns>10</ns>
    <id>6084</id>
    <revision>
      <id>65225</id>
      <parentid>22164</parentid>
      <timestamp>2013-09-04T23:29:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="102">{{mark rev|class=t-since-c99|since C99}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>t5rjl3vtjm1q66fcrkl03ek2uiu4uvb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since concepts ts</title>
    <ns>10</ns>
    <id>13971</id>
    <revision>
      <id>75712</id>
      <timestamp>2015-01-28T14:47:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="122">{{mark rev|class=t-since-concepts-ts t-mark-ts|concepts TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>akwa1s3hpxtr8mzr25v5d6jm8l7v123</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since concurrency ts</title>
    <ns>10</ns>
    <id>14128</id>
    <revision>
      <id>78829</id>
      <timestamp>2015-06-09T17:38:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="128">{{mark rev|class=t-since-concurrency-ts t-mark-ts|concurrency TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>olozeu6ipvwq1wtgtgbp95mwaoyq13h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since cplex ts</title>
    <ns>10</ns>
    <id>13905</id>
    <revision>
      <id>75032</id>
      <timestamp>2015-01-03T16:59:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="124">{{mark rev|class=t-since-cplex-ts t-mark-ts|C parallelism TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>cm7r2dspd9dbjjv2mz5ilad60tpkkfm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since dynamic ts</title>
    <ns>10</ns>
    <id>13903</id>
    <revision>
      <id>75030</id>
      <timestamp>2015-01-03T16:58:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="127">{{mark rev|class=t-since-dynamic-tr t-mark-ts|dynamic memory TR}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>jdvbynwfxty64udjto6f4h8ok91y32j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since embedded ts</title>
    <ns>10</ns>
    <id>13902</id>
    <revision>
      <id>75029</id>
      <timestamp>2015-01-03T16:57:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="119">{{mark rev|class=t-since-embed-tr t-mark-ts|embedded TR}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>mq4r6kwfssmg11dit54b7knq6zujp1o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since fp ts</title>
    <ns>10</ns>
    <id>13904</id>
    <revision>
      <id>75031</id>
      <timestamp>2015-01-03T16:58:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="122">{{mark rev|class=t-since-fp-ts t-mark-ts|floating-point TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>3phouhmiucokckiynwrrf6diquyh4uf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since fpext1 ts</title>
    <ns>10</ns>
    <id>16218</id>
    <revision>
      <id>91180</id>
      <timestamp>2017-03-24T15:43:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{mark rev|class=t-since-fpext1-ts t-mark-ts|FP Ext 1 TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>3dn8ocziglks139mbt8bahr1h6paim8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since fpext4 ts</title>
    <ns>10</ns>
    <id>16154</id>
    <revision>
      <id>89946</id>
      <timestamp>2017-01-31T17:34:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="120">{{mark rev|class=t-since-fpext4-ts t-mark-ts|FP Ext 4 TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>0xzzgmuw0k6dpw7agmgx2dv7b2u8rol</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since fs ts</title>
    <ns>10</ns>
    <id>13232</id>
    <revision>
      <id>68155</id>
      <timestamp>2014-03-16T20:55:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{mark rev|class=t-since-fs-ts t-mark-ts|filesystem TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>9gvpnl8ddkqpb7nxv8b61r0q4gx7rvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since libfund 2 ts</title>
    <ns>10</ns>
    <id>14068</id>
    <revision>
      <id>77984</id>
      <timestamp>2015-04-23T14:18:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="137">{{mark rev|class=t-since-libfund-2-ts t-mark-ts|library fundamentals 2 TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>t20owf3gyqpamfs9bwss3wj0hyf4esm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since libfund ts</title>
    <ns>10</ns>
    <id>13231</id>
    <revision>
      <id>68151</id>
      <parentid>68147</parentid>
      <timestamp>2014-03-16T20:45:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix class</comment>
      <text xml:space="preserve" bytes="133">{{mark rev|class=t-since-libfund-ts t-mark-ts|library fundamentals TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>mt0yd6c2zg8f8ecylup43crpx9icano</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since libfund ts 2</title>
    <ns>10</ns>
    <id>14094</id>
    <revision>
      <id>78451</id>
      <timestamp>2015-05-23T19:49:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="138">{{mark rev|class=t-since-libfund-ts-2 t-mark-ts|library fundamentals TS v2}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>q7vvrqne6qx33c702hhfc7d67syxyyq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since modules ts</title>
    <ns>10</ns>
    <id>15489</id>
    <revision>
      <id>85609</id>
      <timestamp>2016-04-27T13:04:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+ (just the template for now)</comment>
      <text xml:space="preserve" bytes="120">{{mark rev|class=t-since-modules-ts t-mark-ts|modules TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>h4juhe8sotn424adal24iunn0225qj6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since none</title>
    <ns>10</ns>
    <id>12778</id>
    <revision>
      <id>61832</id>
      <parentid>61830</parentid>
      <timestamp>2013-06-09T15:06:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="99">{{mark|since &lt;nowiki&gt;{std}&lt;/nowiki&gt;}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since parallelism ts</title>
    <ns>10</ns>
    <id>13703</id>
    <revision>
      <id>82413</id>
      <parentid>71905</parentid>
      <timestamp>2015-12-16T06:52:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix class</comment>
      <text xml:space="preserve" bytes="128">{{mark rev|class=t-since-parallelism-ts t-mark-ts|parallelism TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>hqkdgsy5c5y0e3tws5639ua7royih08</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since parallelism ts 2</title>
    <ns>10</ns>
    <id>14659</id>
    <revision>
      <id>82414</id>
      <timestamp>2015-12-16T06:53:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>new work item for v2</comment>
      <text xml:space="preserve" bytes="133">{{mark rev|class=t-since-parallelism-ts-2 t-mark-ts|parallelism TS v2}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>kppf3n33ey3kf0que8dm9qfv8snoybd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since ranges ts</title>
    <ns>10</ns>
    <id>15751</id>
    <revision>
      <id>88614</id>
      <timestamp>2016-12-02T21:42:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="118">{{mark rev|class=t-since-ranges-ts t-mark-ts|ranges TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>t2lv0mh8i1ep3nsalyeksofyulgelny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since special math tr</title>
    <ns>10</ns>
    <id>14735</id>
    <revision>
      <id>83370</id>
      <timestamp>2016-02-03T14:40:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="130">{{mark rev|class=t-since-special-math-tr t-mark-ts|special math TR}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>3fxmqkh5eqq86duu416wwjjeq90iesu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark since tm ts</title>
    <ns>10</ns>
    <id>14479</id>
    <revision>
      <id>81265</id>
      <timestamp>2015-10-09T21:49:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="110">{{mark rev|class=t-since-tm-ts t-mark-ts|TM TS}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>ok7p3xnqicdr7d3h8wirakelesiiuc4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark struct</title>
    <ns>10</ns>
    <id>6534</id>
    <revision>
      <id>25757</id>
      <timestamp>2012-04-25T02:28:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>C has structs</comment>
      <text xml:space="preserve" bytes="77">{{mark|struct}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark talias</title>
    <ns>10</ns>
    <id>14092</id>
    <revision>
      <id>78433</id>
      <timestamp>2015-05-23T08:34:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Create for alias templates</comment>
      <text xml:space="preserve" bytes="85">{{mark|alias template}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>4bypkywonmp6u9xewklkyeci9clijwc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark tclass</title>
    <ns>10</ns>
    <id>2018</id>
    <revision>
      <id>4234</id>
      <timestamp>2011-06-13T05:38:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;{{mark|class template}}&lt;noinclude&gt; {{documentation | Template:mark/doc}} &lt;/noinclude&gt;&quot;</comment>
      <text xml:space="preserve" bytes="85">{{mark|class template}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark tfun</title>
    <ns>10</ns>
    <id>163</id>
    <revision>
      <id>3998</id>
      <parentid>325</parentid>
      <timestamp>2011-06-10T20:46:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark tfun]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="88">{{mark|function template}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark tvar</title>
    <ns>10</ns>
    <id>13838</id>
    <revision>
      <id>74046</id>
      <timestamp>2014-11-28T20:10:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>tag for variable templates</comment>
      <text xml:space="preserve" bytes="88">{{mark|variable template}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>rl3z8v9cjf0d7hpm85cyq6p9nkqmn6m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark typedef</title>
    <ns>10</ns>
    <id>2586</id>
    <revision>
      <id>9761</id>
      <parentid>9747</parentid>
      <timestamp>2011-08-25T09:56:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark typedef]]&quot; ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="78">{{mark|typedef}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark unreviewed dr</title>
    <ns>10</ns>
    <id>16231</id>
    <revision>
      <id>91639</id>
      <timestamp>2017-03-31T19:52:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="542">&lt;includeonly&gt;{{#switch:{{{1|}}}|CWG|cwg=[[Category:Pages with unreviewed CWG DR marker]]|LWG|lwg=[[Category:Pages with unreviewed LWG DR marker]]|default={{error|{{tl|mark unreviewed dr}} used without WG}}}}&lt;/includeonly&gt;&lt;noinclude&gt;{{documentation|content=
Usage: {{tl|mark unreviewed dr|wg|dr number}}. The second parameter is currently ignored. The first parameter categorizes the page into one of two tracking categories: [[:Category:Pages with unreviewed CWG DR marker]] or [[:Category:Pages with unreviewed LWG DR marker]].}}&lt;/noinclude&gt;</text>
      <sha1>565g0z74yyc69xs32wggvrbdvtfqmaz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until c++03</title>
    <ns>10</ns>
    <id>13760</id>
    <revision>
      <id>72830</id>
      <timestamp>2014-10-01T01:41:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-until-cxx11|until C++03}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>b7vb1u579i4ynwcg9ap4y6bh0vrn0vd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until c++11</title>
    <ns>10</ns>
    <id>2416</id>
    <revision>
      <id>65215</id>
      <parentid>16180</parentid>
      <timestamp>2013-09-04T23:29:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-until-cxx11|until C++11}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>1s6caggl0j0jmrd4o3lrohsezyf6e2p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until c++14</title>
    <ns>10</ns>
    <id>9992</id>
    <revision>
      <id>65231</id>
      <parentid>65219</parentid>
      <timestamp>2013-09-04T23:32:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mark until c++14]]&quot;: High traffic page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-until-cxx14|until C++14}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>lrebb6krqazt8w1zjrjn4nuhsa1y5tv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until c++17</title>
    <ns>10</ns>
    <id>13810</id>
    <revision>
      <id>73716</id>
      <parentid>73714</parentid>
      <timestamp>2014-11-13T14:42:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>I guess I need to use distinct classes for these</comment>
      <text xml:space="preserve" bytes="106">{{mark rev|class=t-until-cxx17|until C++17}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>gf7f7id10v791vnc1yeewwwi8d9epbi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until c11</title>
    <ns>10</ns>
    <id>6364</id>
    <revision>
      <id>65222</id>
      <parentid>25362</parentid>
      <timestamp>2013-09-04T23:29:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{mark rev}}</comment>
      <text xml:space="preserve" bytes="102">{{mark rev|class=t-until-c11|until C11}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>o4936at1strg60eamsjavv50fk49eoj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until c95</title>
    <ns>10</ns>
    <id>13859</id>
    <revision>
      <id>74505</id>
      <timestamp>2014-12-18T19:36:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="102">{{mark rev|class=t-until-c95|until C95}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1>q98glc4dj4h8yda7imp9fd26redjpj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until c99</title>
    <ns>10</ns>
    <id>9911</id>
    <revision>
      <id>46729</id>
      <timestamp>2013-04-09T13:12:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="80">{{mark|until C99}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark until none</title>
    <ns>10</ns>
    <id>12779</id>
    <revision>
      <id>61831</id>
      <parentid>61829</parentid>
      <timestamp>2013-06-09T15:06:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="99">{{mark|until &lt;nowiki&gt;{std}&lt;/nowiki&gt;}}&lt;noinclude&gt;
{{documentation | Template:mark/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mark/doc</title>
    <ns>10</ns>
    <id>142</id>
    <revision>
      <id>85611</id>
      <parentid>83371</parentid>
      <timestamp>2016-04-27T13:05:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+modules</comment>
      <text xml:space="preserve" bytes="3717">Creates an annotation. Several annotations are already defined:

; Miscellaneous

{{tl|mark deprecated}} results in {{mark deprecated}}

{{tl|mark optional}} results in {{mark optional}}

{{tl|mark implicit}} results in {{mark implicit}}

{{tl|mark concept}} results in {{mark concept}}

{{tl|mark typedef}} results in {{mark typedef}}

{{tl|mark enum}} results in {{mark enum}}

{{tl|mark keyword}} results in {{mark keyword}}

{{tl|mark language}} results in {{mark language}}

; Standards 

{{tl|mark c++03}} results in {{mark c++03}}

{{tl|mark since c++03}} results in {{mark since c++03}}

{{tl|mark until c++03}} results in {{mark until c++03}}

{{tl|mark c++11}} results in {{mark c++11}}

{{tl|mark since c++11}} results in {{mark since c++11}}

{{tl|mark until c++11}} results in {{mark until c++11}}

{{tl|mark c++14}} results in {{mark c++14}}

{{tl|mark since c++14}} results in {{mark since c++14}}

{{tl|mark until c++14}} results in {{mark until c++14}}

{{tl|mark c++17}} results in {{mark c++17}}

{{tl|mark since c++17}} results in {{mark since c++17}}

{{tl|mark until c++17}} results in {{mark until c++17}}

{{tl|mark c95}} results in {{mark c95}}

{{tl|mark since c95}} results in {{mark since c95}}

{{tl|mark until c95}} results in {{mark until c95}}

{{tl|mark c99}} results in {{mark c99}}

{{tl|mark since c99}} results in {{mark since c99}}

{{tl|mark until c99}} results in {{mark until c99}}

{{tl|mark c11}} results in {{mark c11}}

{{tl|mark since c11}} results in {{mark since c11}}

{{tl|mark until c11}} results in {{mark until c11}}

{{tl|mark since none}} results in {{mark since none}}

{{tl|mark until none}} results in {{mark until none}}

; Technical specifications

{{tl|mark since libfund ts}} results in {{mark since libfund ts}}

{{tl|mark since libfund ts 2}} results in {{mark since libfund ts 2}}

{{tl|mark since fs ts}} results in {{mark since fs ts}}

{{tl|mark since parallelism ts}} results in {{mark since parallelism ts}}

{{tl|mark since parallelism ts 2}} results in {{mark since parallelism ts 2}}

{{tl|mark since concepts ts}} results in  {{mark since concepts ts}}

{{tl|mark since concurrency ts}} results in  {{mark since concurrency ts}}

{{tl|mark since tm ts}} results in  {{mark since tm ts}}

{{tl|mark since special math tr}} results in {{mark since special math tr}}

{{tl|mark since modules ts}} results in  {{mark since modules ts}}

; Functions

{{tl|mark fun}} results in {{mark fun}}

{{tl|mark tfun}} results in {{mark tfun}}
&lt;!--
{{tl|mark ptfun}} results in {{mark ptfun}}
--&gt;

{{tl|mark mem fun}} results in {{mark mem fun}}

{{tl|mark mem sfun}} results in {{mark mem sfun}}

{{tl|mark mem vfun}} results in {{mark mem vfun}}

{{tl|mark priv mem fun}} results in {{mark priv mem fun}}

{{tl|mark prot mem fun}} results in {{mark prot mem fun}}

{{tl|mark prot mem vfun}} results in {{mark prot mem vfun}}

{{tl|mark macro fun}} results in {{mark macro fun}}

; Classes

{{tl|mark class}} results in {{mark class}}

{{tl|mark tclass}} results in {{mark tclass}}

{{tl|mark talias}} results in {{mark talias}}

{{tl|mark ptclass}} results in {{mark ptclass}}

{{tl|mark mem class}} results in {{mark mem class}}

{{tl|mark priv mem class}} results in {{mark priv mem class}}

{{tl|mark prot mem class}} results in {{mark prot mem class}}

; Constants

{{tl|mark macro const}} results in {{mark macro const}}

{{tl|mark const}} results in {{mark const}}

{{tl|mark mem const}} results in {{mark mem const}}

{{tl|mark mem sconst}} results in {{mark mem sconst}}

; Objects

{{tl|mark mem obj}} results in {{mark mem obj}}

{{tl|mark priv mem obj}} results in {{mark priv mem obj}}

{{tl|mark prot mem obj}} results in {{mark prot mem obj}}</text>
      <sha1>dx634mno2kiado3dozmk1sl9x09mszu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:math</title>
    <ns>10</ns>
    <id>2567</id>
    <revision>
      <id>15012</id>
      <parentid>15010</parentid>
      <timestamp>2011-12-07T19:36:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Undo revision 15010 by [[Special:Contributions/P12|P12]] ([[User talk:P12|talk]])</comment>
      <text xml:space="preserve" bytes="132">&lt;span class=&quot;texhtml&quot; style=&quot;white-space: nowrap;&quot;&gt;{{#replace:{{{1|}}}|{{!}}|&amp;#124;}}&lt;/span&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:math/doc</title>
    <ns>10</ns>
    <id>2902</id>
    <revision>
      <id>18120</id>
      <parentid>18119</parentid>
      <timestamp>2012-01-21T16:21:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>/* Examples */ +2</comment>
      <text xml:space="preserve" bytes="2211">The following templates are used to create wikimarkup generated mathematical formulas. The generated formula is displayed using the same-size font as the adjoining text.

{{tl|math|''source''}} - creates a formula from the specified ''source''.

===Helper templates===

The following templates can be in the ''source'' parameter of the {{tl|math}} template to create advanced formatting.

*{{tl|su|p{{=}}''superscript''{{mark optional}}|b{{=}}''subscript''{{mark optional}}}} - creates superscript and/or subscript, e.g. {{su|p=superscript|b=subscript}}

*{{tl|mrad}} - produces radicals

*{{tl|minteg|''min''|''max''|''body''}} - creates an integral, e.g. {{minteg|min|max|body}}.

*{{tl|mexp|''power''}} - creates an exponent raised to ''power'', e.g. {{mexp|power}}

*{{tl|mfrac|''integer''|''numerator''|''denominator''}} - creates a fraction, e.g. {{mfrac|integer|numerator|denominator}}.

*{{tl|mparen|''left_paren''|''right_paren''|''row1''|''row2''|...|style{{=}}''style''{{mark optional}}|rows{{=}}''row_number_override''{{mark optional}}}} - 
*:creates inline table with invisible borders and parentheses on the sides. E.g. {{mparen|(|}|line1|line2|line3}}
*:''left_paren'' and ''right_paren'' can be one of (){}[]. {{tt|rows}} forces parentheses to span ''row_number_override'' rows. Currently 4 rows are supported. {{tt|style}} denotes additional style for the content ({{tt|row#}} elements).

===Examples===
{| class=&quot;wikitable&quot;
|-
! Source
! Result
|-
|&lt;tt&gt;&lt;nowiki&gt;{{math|({{mrad|2}}){{su|p=2}} {{=}} 2}}&lt;/nowiki&gt;&lt;/tt&gt;
|{{math|({{mrad|2}}){{su|p=2}} {{=}} 2}}
|-
|&lt;tt&gt;&lt;nowiki&gt;{{math|A{{su|p=12|b=3}}}}&lt;/nowiki&gt;&lt;/tt&gt;
|{{math|A{{su|p=12|b=3}}}}
|-
|&lt;tt&gt;&lt;nowiki&gt;{{math|{{minteg|0|+∞|{{mexp|−''x''}} d''x''}} {{=}} 1}}&lt;/nowiki&gt;&lt;/tt&gt;
|{{math|{{minteg|0|+∞|{{mexp|−''x''}} d''x''}} {{=}} 1}}
|-
|&lt;tt&gt;&lt;nowiki&gt;{{math|{{mfrac|1|2}} − {{mfrac|1|3}} {{=}} {{mfrac|1|6}}}}&lt;/nowiki&gt;&lt;/tt&gt;
|{{math|{{mfrac|1|2}} − {{mfrac|1|3}} {{=}} {{mfrac|1|6}}}}
|-
|&lt;tt&gt;&lt;nowiki&gt;{{mparen|(|}|line1|line2|line3}}&lt;/nowiki&gt;&lt;/tt&gt;
|{{mparen|(|}|line1|line2|line3}}
|-
|&lt;tt&gt;&lt;nowiki&gt;{{mparen|{|]|line1|line2|style=font-style: italic;|rows=3}}&lt;/nowiki&gt;&lt;/tt&gt;
|{{mparen|{|]|line1|line2|style=font-style: italic;|rows=3}}
|}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mbox</title>
    <ns>10</ns>
    <id>164</id>
    <revision>
      <id>4015</id>
      <parentid>327</parentid>
      <timestamp>2011-06-10T20:51:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:mbox]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="597">{{
  {{namespace detect 
  | demospace = {{{demospace|}}}
  | main      = ambox
  | talk      = tmbox
  | file      = imbox
  | category  = cmbox
  | other     = ombox
  }}
| type       = {{{type|}}}
| image      = {{{image|}}}
| imageright = {{{imageright|}}}
| style      = {{{style|}}}
| textstyle  = {{{textstyle|}}}
| text       = {{{text}}}
| small      = {{{small|}}}
| smallimage = {{{smallimage|}}}
| smallimageright = {{{smallimageright|}}}
| smalltext  = {{{smalltext|}}}
}}&lt;noinclude&gt;
{{documentation}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mbox/doc</title>
    <ns>10</ns>
    <id>5223</id>
    <revision>
      <id>38035</id>
      <parentid>38034</parentid>
      <timestamp>2012-07-23T09:48:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="482">{{tl|mbox|''text''}} results in different box templates depending on the namespace it is placed in. Results in {{tl|ambox}} in the article namespace, &lt;!--{{tl|tmbox}} in the talk namespace, {{tl|cmbox}} in the category namespace,--&gt; {{tl|fmbox}} in the file namespace and {{tl|ombox}} if none of the previous applies.

{{tl|ambox|''text''}} results in {{ambox|{{{text}}}}}

{{tl|ombox|''text''}} results in {{ombox|{{{text}}}}}

{{tl|fmbox|''text''}} results in {{fmbox|{{{text}}}}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:member</title>
    <ns>10</ns>
    <id>4766</id>
    <revision>
      <id>79780</id>
      <parentid>19618</parentid>
      <timestamp>2015-07-25T18:41:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>h1 seems...excessive.</comment>
      <text xml:space="preserve" bytes="56">&lt;div class=&quot;t-member&quot;&gt;
&lt;h2&gt;{{{1|}}}&lt;/h2&gt;
{{{2|}}}
&lt;/div&gt;</text>
      <sha1>7edsqujan1cveltat0c0h3dedevvkuo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mexp</title>
    <ns>10</ns>
    <id>2905</id>
    <revision>
      <id>10905</id>
      <timestamp>2011-09-23T10:54:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="86">&lt;i&gt;e&lt;/i&gt;&lt;sup&gt;{{{1}}}&lt;/sup&gt;&lt;noinclude&gt;
{{documentation|Template:math/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mfrac</title>
    <ns>10</ns>
    <id>2906</id>
    <revision>
      <id>17951</id>
      <parentid>11148</parentid>
      <timestamp>2012-01-19T21:40:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>shorter css class name (we ship at least 1.5MB just with that word)</comment>
      <text xml:space="preserve" bytes="334">&lt;span class=&quot;t-mfrac&quot;&gt;{{#if:{{{3|}}}
 |{{{1}}}&lt;table&gt;&lt;tr&gt;&lt;td&gt;{{{2}}}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;{{{3}}}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
 |{{#if:{{{2|}}}
  |&lt;table&gt;&lt;tr&gt;&lt;td&gt;{{{1}}}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;{{{2}}}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
  |&lt;table&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;{{{1}}}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
 }}
}}&lt;/span&gt;&lt;noinclude&gt;
{{documentation|Template:math/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:minteg</title>
    <ns>10</ns>
    <id>2903</id>
    <revision>
      <id>11159</id>
      <parentid>11158</parentid>
      <timestamp>2011-09-28T20:27:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="183">&lt;span style=&quot;font-size: 1.3em; vertical-align:-0.08em; margin-right: 0.08em;&quot;&gt;&amp;int;&lt;/span&gt;{{su|b={{{1}}}|p={{{2}}}}}{{{3}}}&lt;noinclude&gt;
{{documentation|Template:math/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mparen</title>
    <ns>10</ns>
    <id>5006</id>
    <revision>
      <id>18111</id>
      <parentid>18108</parentid>
      <timestamp>2012-01-21T16:04:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Undo revision 18108 by [[Special:Contributions/P12|P12]] ([[User talk:P12|talk]])</comment>
      <text xml:space="preserve" bytes="409">{{mparen/core
 | lparen={{{1|}}}
 | rparen={{{2|}}}
 | row1={{{3|}}}
 | row2={{{4|}}}
 | row3={{{5|}}}
 | row4={{{6|}}}
 | numrows={{#if:{{{rows|}}}
             | {{{rows}}}
             | {{#if:{{{6|}}}
             | 4
             | {{#if:{{{5|}}}
             | 3
             | {{#if:{{{4|}}}
             | 2
             | {{#if:{{{3|}}}
             | 1
           }}}}}}}}}}
 | style={{{style|}}}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mparen/core</title>
    <ns>10</ns>
    <id>5007</id>
    <revision>
      <id>18121</id>
      <parentid>18113</parentid>
      <timestamp>2012-01-21T16:21:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>&quot;</comment>
      <text xml:space="preserve" bytes="514">&lt;span class=&quot;t-mparen&quot;&gt;&lt;!--
--&gt;&lt;span style=&quot;font-size: {{mparen/font|{{{lparen|}}}|{{{numrows|}}}}}em&quot;&gt;{{mparen/paren|{{{lparen|}}}|{{{numrows|}}}}}&lt;/span&gt;&lt;!--
--&gt;&lt;span style=&quot;{{{style|}}}&quot;&gt;&lt;!--
  --&gt;{{{row1|}}}&lt;!--
  --&gt;{{#if:{{{row2|}}}|&lt;br/&gt;{{{row2|}}} }}&lt;!--
  --&gt;{{#if:{{{row3|}}}|&lt;br/&gt;{{{row3|}}} }}&lt;!--
  --&gt;{{#if:{{{row4|}}}|&lt;br/&gt;{{{row4|}}} }}&lt;!--
--&gt;&lt;/span&gt;&lt;!--
--&gt;&lt;span style=&quot;font-size: {{mparen/font|{{{rparen|}}}|{{{numrows|}}}}}em&quot;&gt;{{mparen/paren|{{{rparen|}}}|{{{numrows|}}}}}&lt;/span&gt;&lt;!--
--&gt;&lt;/span&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mparen/font</title>
    <ns>10</ns>
    <id>5009</id>
    <revision>
      <id>18118</id>
      <parentid>18112</parentid>
      <timestamp>2012-01-21T16:12:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>increase font size</comment>
      <text xml:space="preserve" bytes="201">{{#switch:{{{1|}}}
 | lparen | ( 
 | rparen | )
 | lsq | [
 | rsq | ]={{#switch:{{{2|}}} | 1=0.5 | 2=1 | 1.5}}
 | lcurl | {
 | rcurl | }={{#switch:{{{2|}}} | 1=0.5 | 2=1 | 3=1.5 | 4=2 | 5=1.5}}
 | 1
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mparen/paren</title>
    <ns>10</ns>
    <id>5008</id>
    <revision>
      <id>18115</id>
      <parentid>18109</parentid>
      <timestamp>2012-01-21T16:08:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>wrong paren</comment>
      <text xml:space="preserve" bytes="641">{{#switch:{{{1|}}}
 | lparen
 | (={{#switch:{{{2|}}}
      |1|2|3=⎛&lt;br&gt;⎜&lt;br&gt;⎝
      |4=⎛&lt;br&gt;⎜&lt;br&gt;⎜&lt;br&gt;⎝
     }}
 | rparen
 | )={{#switch:{{{2|}}}
      |1|2|3=⎞&lt;br&gt;⎟&lt;br&gt;⎠
      |4=⎞&lt;br&gt;⎟&lt;br&gt;⎟&lt;br&gt;⎠
     }}
 | lcurl
 | {={{#switch:{{{2|}}}
      |1|2|3=⎧&lt;br&gt;⎨&lt;br&gt;⎩
      |4=⎧&lt;br&gt;⎨&lt;br&gt;⎩
     }}
 | rcurl
 | }={{#switch:{{{2|}}}
      |1|2|3=⎫&lt;br&gt;⎬&lt;br&gt;⎭
      |4=⎫&lt;br&gt;⎬&lt;br&gt;⎭
     }}
 | lsq
 | [={{#switch:{{{2|}}}
      |1|2|3=⎡&lt;br&gt;⎢&lt;br&gt;⎣
      |4=⎡&lt;br&gt;⎢&lt;br&gt;⎢&lt;br&gt;⎣
     }}
 | rsq
 | ]={{#switch:{{{2|}}}
      |1|2|3=⎤&lt;br&gt;⎥&lt;br&gt;⎦
      |4=⎤&lt;br&gt;⎥&lt;br&gt;⎥&lt;br&gt;⎦
     }}
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:mrad</title>
    <ns>10</ns>
    <id>2908</id>
    <revision>
      <id>17975</id>
      <parentid>11151</parentid>
      <timestamp>2012-01-19T23:34:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>shorter css class name (we ship at least 1.5MB just for that word)</comment>
      <text xml:space="preserve" bytes="161">&lt;span class=&quot;t-mrad&quot;&gt;{{#if:{{{2|}}}|&lt;span&gt;{{{2}}}&lt;/span&gt;}}&lt;span&gt;√&lt;/span&gt;&lt;span&gt;{{{1}}}&lt;/span&gt;&lt;/span&gt;&lt;noinclude&gt;
{{documentation|Template:math/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:n/a</title>
    <ns>10</ns>
    <id>168</id>
    <revision>
      <id>10950</id>
      <parentid>4021</parentid>
      <timestamp>2011-09-24T10:37:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc link</comment>
      <text xml:space="preserve" bytes="266">&lt;noinclude&gt;{| class=&quot;wikitable&quot;
|-
|&lt;/noinclude&gt;style=&quot;background: #ececec; color: grey; vertical-align: middle; text-align: {{{align|center}}}; {{{style|}}}&quot; class=&quot;table-na&quot; | &lt;small&gt;{{{1|N/A}}}&lt;/small&gt;&lt;noinclude&gt;
|}
{{documentation|Template:yes/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:namespace detect</title>
    <ns>10</ns>
    <id>169</id>
    <revision>
      <id>20007</id>
      <parentid>4093</parentid>
      <timestamp>2012-03-19T18:25:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="1448">{{#switch:
  {{lc:               &lt;!--Lower case the result--&gt;
    &lt;!--If no or empty &quot;demospace&quot; parameter then detect namespace--&gt;
    {{#if:{{{demospace|}}} 
    | {{{demospace}}}
    | {{#if:{{{page|}}} 
      | &lt;!--Detect the namespace in the &quot;page&quot; parameter--&gt;
        {{#ifeq:{{NAMESPACE:{{{page}}} }}|{{TALKSPACE:{{{page}}} }}
        | talk
        | {{SUBJECTSPACE:{{{page}}} }} 
        }}
      | &lt;!--No &quot;demospace&quot; or &quot;page&quot; parameters, so detect actual namespace--&gt;
        {{#ifeq:{{NAMESPACE}}|{{TALKSPACE}}
        | talk
        | {{SUBJECTSPACE}} 
        }}
      }}
    }}
  }}
&lt;!-- Only one of the lines below will be executed --&gt;
&lt;!-- Respecting empty parameters on purpose --&gt;
| main        &lt;!--&quot;demospace=main&quot; or {{SUBJECTSPACE}}={{ns:0}}=&quot;&quot;--&gt;
|           = {{{main| {{{other|}}} }}}
| talk      = {{{talk| {{{other|}}} }}}
| user      = {{{user| {{{other|}}} }}}
| wikipedia = {{{wikipedia| {{{other|}}} }}}
| file
| image     = {{{file| {{{image| {{{other|}}} }}} }}}
| mediawiki = {{{mediawiki| {{{other|}}} }}}
| template  = {{{template| {{{other|}}} }}}
| help      = {{{help| {{{other|}}} }}}
| category  = {{{category| {{{other|}}} }}}
| portal    = {{{portal| {{{other|}}} }}}
| book      = {{{book| {{{other|}}} }}}
| other
| #default  = {{{other|}}}   &lt;!--&quot;demospace=other&quot; or a new namespace--&gt;

}}&lt;!--End switch--&gt;&lt;noinclude&gt;

&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:navbar</title>
    <ns>10</ns>
    <id>8494</id>
    <revision>
      <id>39882</id>
      <parentid>32804</parentid>
      <timestamp>2012-09-28T19:57:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>transclude directly from given titles; add edit links</comment>
      <text xml:space="preserve" bytes="2415">&lt;div class=&quot;t-navbar&quot; style=&quot;{{{style|}}}&quot;&gt;&lt;!--

--&gt;{{#addbodyclass:cpp-navbar}}&lt;!--
--&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;!--
--&gt;{{#if:{{{heading1|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading1|}}} }}&lt;!--
  --&gt;{{#if:{{{content1|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content1}}} }}&lt;div&gt;{{navbar editlink| {{{content1}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--
--&gt;{{#if:{{{heading2|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading2|}}} }}&lt;!--
  --&gt;{{#if:{{{content2|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content2}}} }}&lt;div&gt;{{navbar editlink| {{{content2}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--
--&gt;{{#if:{{{heading3|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading3|}}} }}&lt;!--
  --&gt;{{#if:{{{content3|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content3}}} }}&lt;div&gt;{{navbar editlink| {{{content3}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--
--&gt;{{#if:{{{heading4|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading4|}}} }}&lt;!--
  --&gt;{{#if:{{{content4|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content4}}} }}&lt;div&gt;{{navbar editlink| {{{content4}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--
--&gt;{{#if:{{{heading5|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading5|}}} }}&lt;!--
  --&gt;{{#if:{{{content5|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content5}}} }}&lt;div&gt;{{navbar editlink| {{{content5}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--
--&gt;{{#if:{{{heading6|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading6|}}} }}&lt;!--
  --&gt;{{#if:{{{content6|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content6}}} }}&lt;div&gt;{{navbar editlink| {{{content6}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--
--&gt;{{#if:{{{heading7|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading7|}}} }}&lt;!--
  --&gt;{{#if:{{{content7|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content7}}} }}&lt;div&gt;{{navbar editlink| {{{content7}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--
--&gt;{{#if:{{{heading8|}}} |&lt;div class=&quot;t-navbar-head&quot;&gt;{{ {{{heading8|}}} }}&lt;!--
  --&gt;{{#if:{{{content8|}}} |&lt;div class=&quot;t-navbar-menu&quot;&gt;&lt;div&gt;{{ {{{content8}}} }}&lt;div&gt;{{navbar editlink| {{{content8}}} }}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}}&lt;!--
--&gt;&lt;/div&gt;&lt;div class=&quot;t-navbar-sep&quot;&gt;&amp;nbsp;&lt;/div&gt;}}&lt;!--

--&gt;&lt;/div&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:navbar editlink</title>
    <ns>10</ns>
    <id>9412</id>
    <revision>
      <id>64254</id>
      <parentid>39783</parentid>
      <timestamp>2013-08-15T16:04:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:navbar editlink]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="268">&lt;onlyinclude&gt;{{#if:{{{1|}}}|&lt;span class=&quot;editsection noprint plainlinks&quot; title=&quot;Edit this template&quot;&gt;[{{fullurl:Template:{{{1}}}|action=edit}} &amp;#91;edit&amp;#93;]&lt;/span&gt;|{{error|no template given}}}}&lt;/onlyinclude&gt;&lt;noinclude&gt;{{documentation|Template:navbar/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:navbar/doc</title>
    <ns>10</ns>
    <id>8594</id>
    <revision>
      <id>32805</id>
      <timestamp>2012-06-12T10:50:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="180">&lt;pre style=&quot;overflow: auto;&quot;&gt;
{{navbar
| style =

| heading1 = 
| content1 = 

| heading2 = 
| content2 = 

| heading3 = 
| content3 = 

...

| heading8 = 
| content8 = 

}}
&lt;/pre&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:news</title>
    <ns>10</ns>
    <id>10285</id>
    <revision>
      <id>90239</id>
      <parentid>88092</parentid>
      <timestamp>2017-02-14T07:21:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>new version of the offline archive</comment>
      <text xml:space="preserve" bytes="308">* 14 February 2017: New version of the [[Cppreference:Archives|offline archive]]

* 29 October 2016: New version of the [[Cppreference:Archives|offline archive]]

* 29 November 2015: New version of the [[Cppreference:Archives|offline archive]]. The Debian and Ubuntu packages will be updated to this version.</text>
      <sha1>4csz8q7zzjf3v2gxnuh8nwowpxk8v38</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:no</title>
    <ns>10</ns>
    <id>171</id>
    <revision>
      <id>10951</id>
      <parentid>4024</parentid>
      <timestamp>2011-09-24T10:37:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc link</comment>
      <text xml:space="preserve" bytes="249">&lt;noinclude&gt;{| class=&quot;wikitable&quot;
|-
|&lt;/noinclude&gt;style=&quot;background:#ff9090; color:black; vertical-align: middle; text-align: {{{align|center}}}; {{{style|}}}&quot; class=&quot;table-no&quot; | {{{1|No}}}&lt;noinclude&gt;
|}
{{documentation|Template:yes/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:noexcept</title>
    <ns>10</ns>
    <id>2456</id>
    <revision>
      <id>72221</id>
      <parentid>72090</parentid>
      <timestamp>2014-07-24T12:47:53Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>-default {{mark since c++11}}</comment>
      <text xml:space="preserve" bytes="544">{{#if:{{{1|}}}
|&lt;div class=&quot;t-noexcept-full&quot;&gt;{{ltt|cpp/language/noexcept_spec|noexcept}} specification:&amp;nbsp;&amp;nbsp;{{{notes|}}}
&lt;div class=&quot;t-noexcept-box&quot;&gt;{{cc|noexcept({{{1}}})}}&lt;/div&gt;&lt;/div&gt;&lt;includeonly&gt;[[Category:conditionally noexcept]]&lt;/includeonly&gt;
|&lt;div class=&quot;t-noexcept-inline&quot;&gt;{{ltt|cpp/language/noexcept_spec|noexcept}} specification:&amp;nbsp;&amp;nbsp;&lt;div class=&quot;t-noexcept-box&quot;&gt;{{cc|noexcept}}&lt;/div&gt;&amp;nbsp;&amp;nbsp;{{{notes|}}}&lt;/div&gt;&lt;includeonly&gt;[[Category:unconditionally noexcept]]&lt;/includeonly&gt;
}}&lt;noinclude&gt;
{{documentation}}&lt;/noinclude&gt;</text>
      <sha1>85n4quyk6qthut3bxn8godictwzv0vc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:noexcept/doc</title>
    <ns>10</ns>
    <id>2457</id>
    <revision>
      <id>72223</id>
      <parentid>16572</parentid>
      <timestamp>2014-07-24T13:04:08Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>- notes for the default {{mark since c++11}}</comment>
      <text xml:space="preserve" bytes="295">Adds information about noexcept specification. 

{{tl|noexcept|specification{{mark optional}}|notes{{=}}''notes''{{mark optional}}}}

{{tt|specification}} parameter specifies the code within {{tt|noexcept()}}.

{{tt|notes}} are additional notes that will appear next to the noexcept explanation.</text>
      <sha1>sw3nf8elut548vpc9jd2bkbiv72qaya</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:not done</title>
    <ns>10</ns>
    <id>15743</id>
    <revision>
      <id>88492</id>
      <timestamp>2016-11-22T21:33:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="197">&lt;span style=&quot;font-size:25px;color:red&quot;&gt;'''&amp;#x2718;'''&lt;/span&gt;&amp;nbsp;'''{{{1|Not done}}}'''{{{{{|safesubst:}}}#if:{{{note|{{{reason|}}}}}}|&lt;nowiki /&gt;: {{{note|{{{reason}}}}}}}}&lt;!--template:not done--&gt;</text>
      <sha1>eawqkrguk8ccq36eurosm5atmypckpq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:null</title>
    <ns>10</ns>
    <id>16207</id>
    <revision>
      <id>90950</id>
      <timestamp>2017-03-14T12:56:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="23">&lt;noinclude&gt;&lt;/noinclude&gt;</text>
      <sha1>pa70fp5gprlo59654laz2gm86wcleip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv</title>
    <ns>10</ns>
    <id>213</id>
    <revision>
      <id>65212</id>
      <parentid>61700</parentid>
      <timestamp>2013-09-04T23:29:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="112">&lt;tr class=&quot;t-nv&quot;&gt;&lt;td colspan=&quot;5&quot;&gt;{{{1|}}}&lt;/td&gt;&lt;/tr&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>k9g0fyqr5vaeij5mdaq71bk3lyvtdqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv begin</title>
    <ns>10</ns>
    <id>205</id>
    <revision>
      <id>65210</id>
      <parentid>61699</parentid>
      <timestamp>2013-09-04T23:29:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="154">&lt;includeonly&gt;&lt;div&gt;&lt;table class=&quot;t-nv-begin&quot; cellpadding=0 style=&quot;{{{style|}}}&quot;&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>0gje2zoqvtn00zl9lian71w4odiepjm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv col begin</title>
    <ns>10</ns>
    <id>206</id>
    <revision>
      <id>65206</id>
      <parentid>61761</parentid>
      <timestamp>2013-09-04T23:29:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables, update CSS</comment>
      <text xml:space="preserve" bytes="131">&lt;includeonly&gt;&lt;tr class=&quot;t-nv-col-table&quot;&gt;&lt;td&gt;{{nv begin}}&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>9j1byhtbgtpnwq0izjc5h24tsm6r8cd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv col end</title>
    <ns>10</ns>
    <id>207</id>
    <revision>
      <id>65211</id>
      <parentid>63134</parentid>
      <timestamp>2013-09-04T23:29:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="108">&lt;includeonly&gt;{{nv end}}&lt;/td&gt;&lt;/tr&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>rljnbleb7mdpkhk0s6xj6pir6dovlxh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv col next</title>
    <ns>10</ns>
    <id>208</id>
    <revision>
      <id>65200</id>
      <parentid>61762</parentid>
      <timestamp>2013-09-04T23:29:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="119">&lt;includeonly&gt;{{nv end}}&lt;/td&gt;&lt;td&gt;{{nv begin}}&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>s6sad95w9ebqysmhygaataaoawpke5v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv end</title>
    <ns>10</ns>
    <id>209</id>
    <revision>
      <id>65213</id>
      <parentid>61205</parentid>
      <timestamp>2013-09-04T23:29:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="75">&lt;/table&gt;&lt;/div&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>ga7au5eneygsy84aez715tk0myiy7vy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv guard</title>
    <ns>10</ns>
    <id>210</id>
    <revision>
      <id>48759</id>
      <parentid>4047</parentid>
      <timestamp>2013-05-31T19:39:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[Template:sb list guard]] to [[Template:nv guard]]</comment>
      <text xml:space="preserve" bytes="2">|-</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv h1</title>
    <ns>10</ns>
    <id>211</id>
    <revision>
      <id>65209</id>
      <parentid>61703</parentid>
      <timestamp>2013-09-04T23:29:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="115">&lt;tr class=&quot;t-nv-h1&quot;&gt;&lt;td colspan=&quot;5&quot;&gt;{{{1|}}}&lt;/td&gt;&lt;/tr&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>b91b0rwleuhoym82s6aallu7zmw4y4h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv h2</title>
    <ns>10</ns>
    <id>212</id>
    <revision>
      <id>65208</id>
      <parentid>61704</parentid>
      <timestamp>2013-09-04T23:29:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="115">&lt;tr class=&quot;t-nv-h2&quot;&gt;&lt;td colspan=&quot;5&quot;&gt;{{{1|}}}&lt;/td&gt;&lt;/tr&gt;&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>ssmsp4sut8p6yty7v9f9bbbdzlz4bcn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv inc</title>
    <ns>10</ns>
    <id>4758</id>
    <revision>
      <id>56238</id>
      <parentid>48799</parentid>
      <timestamp>2013-06-01T05:33:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="435">{{#if:{{{1|}}}&lt;!--
--&gt;|{{#if:{{trim|{{ {{{1}}} }}}}&lt;!--
 --&gt; |{{{{{1|}}}&lt;!--
    --&gt;|{{trim|{{{2|}}}}}&lt;!--
    --&gt;|{{trim|{{{3|}}}}}&lt;!--
    --&gt;|{{trim|{{{4|}}}}}&lt;!--
    --&gt;|{{trim|{{{5|}}}}}&lt;!--
    --&gt;|{{trim|{{{6|}}}}}&lt;!--
    --&gt;|{{trim|{{{7|}}}}}&lt;!--
   --&gt;}}&lt;!--
  --&gt;|{{error | given template does not exist}}&lt;!--
--&gt;}}&lt;!--
--&gt;|{{error | no template source given}} }}&lt;noinclude&gt;
{{documentation | Template:nv/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv ln</title>
    <ns>10</ns>
    <id>214</id>
    <revision>
      <id>65201</id>
      <parentid>61701</parentid>
      <timestamp>2013-09-04T23:29:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix the HTML structure, use {{lines}} for notes</comment>
      <text xml:space="preserve" bytes="1222">{{nv | 1= &lt;div class=&quot;t-nv-ln-table&quot;&gt;&lt;div&gt;&lt;!--
         --&gt;[[{{{1}}}|&lt;span class=&quot;t-lines&quot;&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{2|}}}}}&lt;!--
--&gt;{{#if:{{{3|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{3|}}}}}}}&lt;!--
--&gt;{{#if:{{{4|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{4|}}}}}}}&lt;!--
--&gt;{{#if:{{{5|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{5|}}}}}}}&lt;!--
--&gt;{{#if:{{{6|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{6|}}}}}}}&lt;!--
--&gt;{{#if:{{{7|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{7|}}}}}}}&lt;!--
--&gt;{{#if:{{{8|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{8|}}}}}}}&lt;!--
--&gt;{{#if:{{{9|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{9|}}}}}}}&lt;!--
--&gt;{{#if:{{{10|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{10|}}}}}}}&lt;!--
--&gt;{{#if:{{{11|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{11|}}}}}}}&lt;!--
--&gt;{{#if:{{{12|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{12|}}}}}}}&lt;!--
--&gt;{{#if:{{{13|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{13|}}}}}}}&lt;!--
--&gt;{{#if:{{{14|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{14|}}}}}}}&lt;!--
--&gt;{{#if:{{{15|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{15|}}}}}}}&lt;!--
--&gt;{{#if:{{{16|}}}|&lt;/span&gt;&lt;span&gt;{{ltt/core|{{{1}}}|{{{16|}}}}}}}&lt;/span&gt;&lt;/span&gt;]]&lt;/div&gt;{{#if:{{{notes|}}}|&lt;div&gt;{{lines|{{{notes}}}}}&lt;/div&gt;}}&lt;/div&gt;}}&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>0a5c3kp75mbykkal7o6kbinyl8mwn3n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv mem ln</title>
    <ns>10</ns>
    <id>215</id>
    <revision>
      <id>65202</id>
      <parentid>61702</parentid>
      <timestamp>2013-09-04T23:29:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix the HTML structure, use {{lines}} for notes</comment>
      <text xml:space="preserve" bytes="1372">{{nv | 1= &lt;div class=&quot;t-nv-ln-table&quot;&gt;&lt;div&gt;&lt;!--
         --&gt;[[{{{1}}}|&lt;span class=&quot;t-lines&quot;&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{2|}}}|{{{p|}}}}}&lt;!--
--&gt;{{#if:{{{3|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{3|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{4|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{4|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{5|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{5|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{6|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{6|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{7|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{7|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{8|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{8|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{9|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{9|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{10|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{10|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{11|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{11|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{12|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{12|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{13|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{13|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{14|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{14|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{15|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{15|}}}|{{{p|}}}}}}}&lt;!--
--&gt;{{#if:{{{16|}}}|&lt;/span&gt;&lt;span&gt;{{l2tt/core|{{{1}}}|{{{16|}}}|{{{p|}}}}}}}&lt;/span&gt;&lt;/span&gt;]]&lt;/div&gt;{{#if:{{{notes|}}}|&lt;div&gt;{{lines|{{{notes}}}}}&lt;/div&gt;}}&lt;/div&gt;}}&lt;noinclude&gt;
{{documentation | Template:nv/doc }}
&lt;/noinclude&gt;</text>
      <sha1>royd9jmtzza9xknxec0b08jh6cwshr9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv ph</title>
    <ns>10</ns>
    <id>15084</id>
    <revision>
      <id>84513</id>
      <parentid>84512</parentid>
      <timestamp>2016-03-18T21:48:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="50">&lt;tr class=&quot;t-nv&quot;&gt;&lt;td colspan=&quot;5&quot;&gt; &lt;br/&gt;
&lt;/td&gt;&lt;/tr&gt;</text>
      <sha1>qvprgoawuwrmbfykcf4l6i8jhm2o1cy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv ph space</title>
    <ns>10</ns>
    <id>15875</id>
    <revision>
      <id>89370</id>
      <parentid>89367</parentid>
      <timestamp>2017-01-20T03:43:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <text xml:space="preserve" bytes="441">{{nv|{{#switch:{{#expr: ceil({{{1|30}}} / 10)}}|5={{nv ph space/10 spaces}}{{nv ph space/10 spaces}}{{nv ph space/10 spaces}}{{nv ph space/10 spaces}}{{nv ph space/10 spaces}}|4={{nv ph space/10 spaces}}{{nv ph space/10 spaces}}{{nv ph space/10 spaces}}{{nv ph space/10 spaces}}|3={{nv ph space/10 spaces}}{{nv ph space/10 spaces}}{{nv ph space/10 spaces}}|2={{nv ph space/10 spaces}}{{nv ph space/10 spaces}}|1={{nv ph space/10 spaces}}}}}}</text>
      <sha1>mey0buql34njuvt2g97tzdr01tk6hzh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv ph space/10 spaces</title>
    <ns>10</ns>
    <id>15874</id>
    <revision>
      <id>89366</id>
      <timestamp>2017-01-20T03:31:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="60">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;</text>
      <sha1>9dh8fo6yqnol9plotjh1zvw3hj6cfcl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:nv/doc</title>
    <ns>10</ns>
    <id>204</id>
    <revision>
      <id>76421</id>
      <parentid>48798</parentid>
      <timestamp>2015-02-18T07:56:09Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1257">This is one of the family of templates used for creation of feature lists in sidebars.

{{list/doc}}

{{tl|nv begin}}
: starts the declaration list

{{tl|nv h1 | ''heading''}}
: adds heading to the feature list 

{{tl|nv h2 | ''heading''}}
: adds heading to the feature list 

{{tl|nv | ''explanation'' }}
: adds a generic item to the feature list

{{tl|nv ln | ''link'' | ''title override''{{small|(optional)}} | ... | ''title6 override'' {{small|(optional)}} }}
: adds a link item to the feature list

{{tl|nv mem ln | ''link'' | ''title override''{{small|(optional)}} | ... | ''title4 override'' {{small|(optional)}} }}
: adds a link item to the feature list

{{tl|nv inc | ''location'' | ''param1'' (optional) | ''param2'' (optional) ... }}
: includes a template from ''location''. It only invokes {{tlc|location| ''param1'' | ''param2'' ... }} and is included for consistency. Unnamed parameters are passed to the source template. The source template itself should consist from {{tlc|nv ...}} items.

{{tl|nv end}}
: ends the feature list

The following three templates are used to place features in several columns.

{{tl|nv col begin}}
: starts a column construct

{{tl|nv col next}}
: adds another column

{{tl|nv col end}}
: ends a column construct</text>
      <sha1>r6f6aaf0tg6007r0wxnltgvsraebd1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ombox</title>
    <ns>10</ns>
    <id>173</id>
    <revision>
      <id>15477</id>
      <parentid>4023</parentid>
      <timestamp>2011-12-10T15:35:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc link</comment>
      <text xml:space="preserve" bytes="691">{{#ifeq:{{{small|}}}|yes
| {{ombox/core
  | small = yes
  | type  = {{{type|}}}
  | image = {{#if:{{{smallimage|}}}| {{{smallimage}}} | {{{image|}}} }}
  | imageright = {{#if:{{{smallimageright|}}} | {{{smallimageright}}} | {{{imageright|}}} }}
  | style = {{{style|}}}
  | textstyle = {{{textstyle|}}}
  | text  = {{#if:{{{smalltext|}}}| {{{smalltext}}} | {{{text}}} }}
  }}
| {{ombox/core
  | type  = {{{type|}}}
  | image = {{{image|}}}
  | imageright = {{{imageright|}}} 
  | style = {{{style|}}}
  | textstyle = {{{textstyle|}}}
  | text  = {{{text}}}
  }}
}}&lt;noinclude&gt;{{documentation|Template:mbox/doc}}&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ombox/core</title>
    <ns>10</ns>
    <id>174</id>
    <revision>
      <id>20019</id>
      <parentid>347</parentid>
      <timestamp>2012-03-19T18:31:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="1839">&lt;table class=&quot;plainlinks ombox {{#ifeq:{{{small}}}|yes|mbox-small}} 
{{#switch:{{{type|}}}
| speedy     = ombox-speedy
| delete     = ombox-delete
| content    = ombox-content
| style      = ombox-style
| move       = ombox-move
| protection = ombox-protection
| notice          &lt;!-- notice = default --&gt;
| #default   = ombox-notice
}}&quot; style=&quot;{{{style|}}}&quot;&gt;
&lt;tr&gt;
{{#ifeq:{{{image|}}}|none
| &lt;!-- No image. Cell with some width or padding necessary for text cell to have 100% width. --&gt;&lt;td class=&quot;mbox-empty-cell&quot;&gt;&lt;/td&gt;
| &lt;td class=&quot;mbox-image&quot;&gt;
  {{#if:{{{image|}}}
  | {{{image}}}
  | [[Image:{{#switch:{{{type|}}}
    | speedy     = Imbox speedy deletion.png
    | delete     = Imbox deletion.png
    | content    = Imbox content.png
    | style      = Edit-clear.svg
    | move       = Imbox move.png
    | protection = Imbox protection.png
    | notice          &lt;!-- notice = default --&gt;
    | #default   = Imbox notice.png
    }} | {{#ifeq:{{{small|}}}|yes
    | 30x30px
    | 40x40px
    }}|link=|alt=]]
  }}&lt;/td&gt;
}}
&lt;td class=&quot;mbox-text&quot; style=&quot;{{{textstyle|}}}&quot;&gt; {{{text}}} &lt;/td&gt;
{{#if:{{{imageright|}}}
| {{#ifeq:{{{imageright|}}}|none
  | &lt;!-- No image. --&gt;
  | &lt;td class=&quot;mbox-imageright&quot;&gt; {{{imageright}}} &lt;/td&gt;
  }}
}}
&lt;/tr&gt;
&lt;/table&gt;&lt;!-- Detect and report usage with faulty &quot;type&quot; parameter:
--&gt;{{#switch:{{{type|}}}
|   &lt;!-- No type fed, is also valid input --&gt;
| speedy
| delete
| content
| style
| move
| protection
| notice     =    &lt;!-- Do nothing, valid &quot;type&quot; --&gt;
| #default   = &lt;div style=&quot;text-align: center;&quot;&gt;This message box is using an invalid &quot;type={{{type|}}}&quot; parameter and needs fixing.&lt;/div&gt;[[Category:Wikipedia message box parameter needs fixing|{{main other|Main:}}{{FULLPAGENAME}}]]&lt;!-- Sort on namespace --&gt;
}}&lt;noinclude&gt;
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:page template</title>
    <ns>10</ns>
    <id>10290</id>
    <redirect title="Template:include page" />
    <revision>
      <id>50425</id>
      <timestamp>2013-06-01T03:26:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:page template]] to [[Template:include page]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:include page]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par</title>
    <ns>10</ns>
    <id>181</id>
    <revision>
      <id>61706</id>
      <parentid>61217</parentid>
      <timestamp>2013-06-08T05:29:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="134">|- class=&quot;t-par&quot;
| {{{1|}}}
| -
| {{{2|}}}&lt;!--
--&gt;{{dsc editlink|dummy}}
&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par begin</title>
    <ns>10</ns>
    <id>176</id>
    <revision>
      <id>61705</id>
      <parentid>48673</parentid>
      <timestamp>2013-06-08T05:28:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="87">{| class=&quot;t-par-begin&quot;
&lt;noinclude&gt;
|}
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par ccmp</title>
    <ns>10</ns>
    <id>177</id>
    <revision>
      <id>76401</id>
      <parentid>61753</parentid>
      <timestamp>2015-02-17T15:02:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+consistency requirement</comment>
      <text xml:space="preserve" bytes="631">{{par | {{{1|}}} | comparison function which returns ​a negative integer value if the first argument is ''less'' than the second, &lt;br/&gt;
a positive integer value if the first argument is ''greater'' than the second and zero if the arguments are equal.{{{2|}}}&lt;br&gt;
The signature of the comparison function should be equivalent to the following:

{{cc | int cmp(const void *a, const void *b); }}

The function must not modify the objects passed to it and must return consistent results when called for the same objects, regardless of their positions in the array.
}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}}}
&lt;/noinclude&gt;</text>
      <sha1>8jqvu7hr0z4omodf9xdrdo2rbwg87rj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par cmp</title>
    <ns>10</ns>
    <id>178</id>
    <revision>
      <id>84046</id>
      <parentid>78425</parentid>
      <timestamp>2016-03-15T09:58:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="666">{{par | {{{1|}}} | comparison function object (i.e. an object that satisfies the requirements of {{concept|Compare}}) which returns ​{{c|{{{value|true}}}}} if {{{2|the first argument is ''less'' than the second}}}. &lt;br&gt;
The signature of the comparison function should be equivalent to the following:

{{cc | bool cmp(const Type1 &amp;a, const Type2 &amp;b);}}

The signature does not need to have {{c|const &amp;}}, but the function object must not modify the objects passed to it.&lt;br&gt;
{{cast req2 |Type1|Type2|bidirectional={{{bidirectional|true}}}| t1={{{t1|}}} | t2={{{t2|}}} | p1={{{p1|}}} | p2={{{p2|}}}}}}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1>op4dpd3sd86myajthw0wewosvqimotb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par cmp ord</title>
    <ns>10</ns>
    <id>13137</id>
    <revision>
      <id>78422</id>
      <parentid>69096</parentid>
      <timestamp>2015-05-22T20:46:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>passing a new param to par req2 from here to indicate that the functor can be applied both ways...</comment>
      <text xml:space="preserve" bytes="674">{{par | {{{1|}}} | comparison function object (i.e. an object that satisfies the requirements of {{concept|Compare}}) which returns ​{{c|{{{value|true}}}}} if {{{2|the first argument is ''less'' than (i.e. is ordered ''before'') the second}}}. &lt;br&gt;
The signature of the comparison function should be equivalent to the following:

{{cc | bool cmp(const Type1 &amp;a, const Type2 &amp;b);}}

The signature does not need to have {{c|const &amp;}}, but the function object must not modify the objects passed to it.&lt;br&gt;
{{cast req2 |Type1|Type2|bidirectional=true|t1={{{t1|}}} | t2={{{t2|}}} | p1={{{p1|}}} | p2={{{p2|}}}}}}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1>fh2s5rcuafc40m0nvrpz7ofucctytll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par end</title>
    <ns>10</ns>
    <id>179</id>
    <revision>
      <id>61220</id>
      <parentid>48679</parentid>
      <timestamp>2013-06-05T12:31:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;param list/doc&quot; to &quot;par/doc&quot;</comment>
      <text xml:space="preserve" bytes="66">&lt;onlyinclude&gt;|}&lt;/onlyinclude&gt;
{{documentation | Template:par/doc}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par exec pol</title>
    <ns>10</ns>
    <id>15129</id>
    <revision>
      <id>84591</id>
      <timestamp>2016-03-21T16:13:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="122">{{par | policy | the execution policy to use. See [[cpp/algorithm/execution_policy_tag_t|execution policy]] for details.}}</text>
      <sha1>dfr5wly4ib0zhmvd3yzcckgtosyyb0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par gen</title>
    <ns>10</ns>
    <id>180</id>
    <revision>
      <id>62264</id>
      <parentid>62263</parentid>
      <timestamp>2013-06-25T12:50:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>don't use ddcl</comment>
      <text xml:space="preserve" bytes="312">{{par | {{{1|}}} | generator function object that will be called. {{{2|}}}&lt;br&gt;
The signature of the function should be equivalent to the following:
{{dcl begin}}
{{dcl | 
Ret fun();
}}
{{dcl end}}
{{cast rreq | Ret | rt={{{rt|}}} | rp={{{rp|}}}}}}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par hreq</title>
    <ns>10</ns>
    <id>9138</id>
    <revision>
      <id>61707</id>
      <parentid>61223</parentid>
      <timestamp>2013-06-08T05:29:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="116">|- class=&quot;t-par-hitem&quot;
| colspan=3 | Type requirements
&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par inc</title>
    <ns>10</ns>
    <id>9967</id>
    <revision>
      <id>61290</id>
      <parentid>56253</parentid>
      <timestamp>2013-06-05T14:20:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update link</comment>
      <text xml:space="preserve" bytes="425">{{#if:{{{1|}}}&lt;!--
--&gt;|{{#vardefine:dcl-list-template-name|{{{1|}}}}}&lt;!--
 --&gt;{{ {{{1|}}}&lt;!--
    --&gt;|{{trim|{{{2|}}}}}&lt;!--
    --&gt;|{{trim|{{{3|}}}}}&lt;!--
    --&gt;|{{trim|{{{4|}}}}}&lt;!--
    --&gt;|{{trim|{{{5|}}}}}&lt;!--
    --&gt;|{{trim|{{{6|}}}}}&lt;!--
    --&gt;|{{trim|{{{7|}}}}}&lt;!--
--&gt;}}{{#vardefine:dcl-list-template-name}}&lt;!--
--&gt;|{{error | no template source given}} }}&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par op1</title>
    <ns>10</ns>
    <id>182</id>
    <revision>
      <id>61750</id>
      <parentid>61749</parentid>
      <timestamp>2013-06-08T05:40:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="412">{{par | {{{1|}}} | unary operation function object that will be applied. {{{2|}}}&lt;br&gt;
The signature of the function should be equivalent to the following:

{{cc | Ret fun(const Type &amp;a); }}

The signature does not need to have {{c|const &amp;}}. &lt;br&gt;{{cast req1 | Type | t1={{{t1|}}} | p1={{{p1|}}}}} {{cast rreq | Ret | rt={{{rt|}}} | rp={{{rp|}}}}}}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par op2</title>
    <ns>10</ns>
    <id>183</id>
    <revision>
      <id>61751</id>
      <parentid>61748</parentid>
      <timestamp>2013-06-08T05:40:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>spacing</comment>
      <text xml:space="preserve" bytes="469">{{par | {{{1|}}} | binary operation function object that will be applied. {{{2|}}}&lt;br&gt;
The signature of the function should be equivalent to the following:

{{cc | Ret fun(const Type1 &amp;a, const Type2 &amp;b); }}

The signature does not need to have {{c|const &amp;}}. &lt;br&gt;{{cast req2 | Type1 | Type2 | t1={{{t1|}}} | p1={{{p1|}}} | t2={{{t2|}}} | p2={{{p2|}}}}} {{cast rreq | Ret | rt={{{rt|}}} | rp={{{rp|}}}}}}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par opf</title>
    <ns>10</ns>
    <id>184</id>
    <revision>
      <id>61752</id>
      <parentid>61228</parentid>
      <timestamp>2013-06-08T05:40:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="329">{{par | {{{1|}}} | function object, {{{2|}}}&lt;br/&gt;
The signature of the function should be equivalent to the following:

{{cc | void fun(const Type &amp;a); }}

The signature does not need to have {{c|const &amp;}}. &lt;br/&gt;{{cast req1 | Type | t1={{{t1|}}} | p1={{{p1|}}}}}
}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par pred0</title>
    <ns>10</ns>
    <id>5048</id>
    <revision>
      <id>61759</id>
      <parentid>61758</parentid>
      <timestamp>2013-06-08T05:42:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="268">{{par | {{{1|}}} | predicate {{#if:{{{2|}}}|which returns ​{{c|{{{value|true}}}}} {{{2}}}}}. &lt;br/&gt;
The signature of the predicate function should be equivalent to the following:

{{cc | bool pred();}}​}}&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par pred1</title>
    <ns>10</ns>
    <id>185</id>
    <revision>
      <id>61757</id>
      <parentid>61231</parentid>
      <timestamp>2013-06-08T05:42:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="453">{{par | {{{1|}}} | unary predicate {{#if:{{{2|}}}|which returns ​{{c|{{{value|true}}}}} {{{2}}}}}. &lt;br/&gt;
The signature of the predicate function should be equivalent to the following:

{{cc | bool pred(const Type &amp;a);}}

The signature does not need to have {{c|const &amp;}}, but the function must not modify the objects passed to it.&lt;br&gt;
{{cast req1 |Type| | t1={{{t1|}}} | p1={{{p1|}}}}}}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par pred2</title>
    <ns>10</ns>
    <id>186</id>
    <revision>
      <id>61756</id>
      <parentid>61232</parentid>
      <timestamp>2013-06-08T05:41:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="513">{{par | {{{1|}}} | binary predicate {{#if:{{{2|}}}|which returns ​{{c|{{{value|true}}}}} {{{2}}}}}. &lt;br/&gt;
The signature of the predicate function should be equivalent to the following:

{{cc | bool pred(const Type1 &amp;a, const Type2 &amp;b); }}

The signature does not need to have {{c|const &amp;}}, but the function must not modify the objects passed to it.&lt;br/&gt;
{{cast req2 | Type1 | Type2 | t1={{{t1|}}} | t2={{{t2|}}} | p1={{{p1|}}} | p2={{{p2|}}}}}
}}​&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par pred2 eq</title>
    <ns>10</ns>
    <id>187</id>
    <revision>
      <id>61755</id>
      <parentid>61233</parentid>
      <timestamp>2013-06-08T05:41:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="190">{{par pred2 | {{{1|}}} | p1={{{p1|}}} | t1={{{t1|}}} | p2={{{p2|}}} | t2={{{t2|}}} | if the elements should be treated as equal}}&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par req</title>
    <ns>10</ns>
    <id>9139</id>
    <revision>
      <id>61708</id>
      <parentid>61234</parentid>
      <timestamp>2013-06-08T05:29:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="141">|- class=&quot;t-par-req&quot;
| colspan=3 | -&lt;div class=&quot;spacer&quot;&gt;&lt;/div&gt;{{trim|{{{1|}}}}}
&lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par req concept</title>
    <ns>10</ns>
    <id>9140</id>
    <revision>
      <id>61760</id>
      <parentid>61235</parentid>
      <timestamp>2013-06-08T05:42:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use new templates</comment>
      <text xml:space="preserve" bytes="737">{{par req | 1={{tt|{{trim|{{{1}}}}}}} must meet the requirements of {{#if:{{{6|}}}
|{{concept|{{{6}}}}}, {{concept|{{{5}}}}}, {{concept|{{{4}}}}}, {{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{#if:{{{5|}}}
|{{concept|{{{5}}}}}, {{concept|{{{4}}}}}, {{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{#if:{{{4|}}}
|{{concept|{{{4}}}}}, {{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{#if:{{{3|}}}
|{{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{concept|{{{2}}}}}
}}}}}}}}{{#if:{{{overload|}}}{{{overloads|}}} 
| {{#if:{{{overload|}}} |&lt;nowiki&gt; &lt;/nowiki&gt;in order to use overload ({{{overload}}}) |&lt;nowiki&gt; &lt;/nowiki&gt;in order to use overloads ({{{overloads}}}) }}
}}. {{{notes|}}} }} &lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par req concept deref</title>
    <ns>10</ns>
    <id>9308</id>
    <revision>
      <id>61289</id>
      <parentid>56286</parentid>
      <timestamp>2013-06-05T14:20:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update link</comment>
      <text xml:space="preserve" bytes="717">{{par req | 1=The type of dereferenced {{tt|{{trim|{{{1}}}}}}} must meet the requirements of {{#if:{{{6|}}}
|{{concept|{{{6}}}}}, {{concept|{{{5}}}}}, {{concept|{{{4}}}}}, {{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{#if:{{{5|}}}
|{{concept|{{{5}}}}}, {{concept|{{{4}}}}}, {{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{#if:{{{4|}}}
|{{concept|{{{4}}}}}, {{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{#if:{{{3|}}}
|{{concept|{{{3}}}}} and {{concept|{{{2}}}}}
|{{concept|{{{2}}}}}
}}}}}}}}{{#if:{{{version|}}}{{{versions|}}} 
| {{#if:{{{version|}}} | in order to use version {{{version}}} | in order to use versions {{{versions}}} }}
}}. {{{notes|}}} }} &lt;noinclude&gt;
{{documentation | Template:par/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:par/doc</title>
    <ns>10</ns>
    <id>175</id>
    <revision>
      <id>67344</id>
      <parentid>63254</parentid>
      <timestamp>2014-02-05T20:24:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+ par cmp ord</comment>
      <text xml:space="preserve" bytes="4587">This is one of the family of templates used for creation of parameter list.

{{list/doc}}

{{tl|par begin}}
: starts the parameter list

{{tl|par end}}
: ends the parameter list

{{tl|par | ''parameter'' | ''explanation''}}
: adds an item to the parameter list.

{{tl|par hreq}}
: results in &quot;Type requirements&quot;

{{tl|par req | ''requirement''}}
: adds a generic type requirement

{{tl|par req concept | ''parameter_name'' | ''concept'' | ''concept2'' {{mark optional}} | ... | ''concept_n'' {{mark optional}} | overload{{=}}''applicable overload''{{mark optional}} | overloads{{=}}''applicable overloads''{{mark optional}} | notes{{=}}''notes'' }}
: adds a concept requirement.

{{tl|par req concept deref | ''expression'' | ''concept'' | ''concept2'' {{mark optional}} || overload{{=}}''applicable overload''{{mark optional}} | overloads{{=}}''applicable overloads''{{mark optional}} |  ... | ''concept_n'' {{mark optional}} | notes{{=}}''notes'' }}
: adds a concept requirement on the result of dereference of type

{{tl|par inc | ''location'' | ''param1'' {{mark optional}} | ''param2'' {{mark optional}} ... }}
: Sets {{tt|dcl-list-template-name}} [https://www.mediawiki.org/wiki/Extension:Variables variable] to ''location'', includes the template from ''location'' and unsets the variable. Use this template whenever copying param list items from a template; this will add an edit link to them. The unnamed parameters ''param1'', ''param2'', ... are passed to the template.

Specific cases
: functions passed as parameters:

{{tl | par pred0 | ''parameter_name'' | value{{=}}''return_value'' {{mark optional}} | ''condition'' }}
: predicate with no arguments

{{tl | par pred1 | ''parameter_name'' | value{{=}}''return_value'' {{mark optional}} | ''condition'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type'' }}
: unary predicate 

{{tl | par pred2 | ''parameter_name'' | value{{=}}''return_value'' {{mark optional}} | ''condition'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type'' | t2{{=}}''type'' {{small|or}} p2{{=}}''pointer_type'' {{mark optional}} }}
: binary predicate 

{{tl | par pred2 eq | ''parameter_name'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type'' | t2{{=}}''type'' {{small|or}} p2{{=}}''pointer_type'' {{mark optional}} }}
: binary equality predicate

{{tl | par cmp | ''parameter_name'' | value{{=}}''return_value'' {{mark optional}} | ''condition'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type'' | t2{{=}}''type'' {{small|or}} p2{{=}}''pointer_type'' {{mark optional}} }}
: comparison function

{{tl | par cmp ord | ''parameter_name'' | value{{=}}''return_value'' {{mark optional}} | ''condition'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type'' | t2{{=}}''type'' {{small|or}} p2{{=}}''pointer_type'' {{mark optional}} }}
: comparison function for ordering

{{tl | par ccmp | ''parameter_name'' | ''additional_explanation'' {{mark optional}} }}
: C-style comparison function

{{tl | par opf | ''parameter_name'' | ''action'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type''}}
: function

{{tl | par op1 | ''parameter_name'' | ''action'' | rt{{=}}''type'' {{small|or}} rp{{=}}''pointer_type'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type''}}
: unary operation

{{tl | par op2 | ''parameter_name'' | ''action'' | rt{{=}}''type'' {{small|or}} rp{{=}}''pointer_type'' | t1{{=}}''type'' {{small|or}} p1{{=}}''pointer_type'' | t2{{=}}''type'' {{small|or}} p2{{=}}''pointer_type'' {{mark optional}} }}
: binary operation

{{tl | par gen | ''parameter_name'' | ''action'' | rt{{=}}''type'' {{small|or}} rp{{=}}''pointer_type'' }}
: generator

:; Parameters

:*''parameter_name'' is the name of the predicate parameter. 
:*{{tt|value}} is the expected return value when the ''condition'' is satisfied (defaults to {{c|true}}). 
:*{{tt|t1}}, {{tt|t2}}, {{tt|p1}}, {{tt|p2}} are types that the predicate is required to accept as its first and second parameters respectively. {{tt|p1}} and {{tt|p2}} describe a pointer parameter, i.e. it will be dereferenced before passed to the predicate. For each parameter, only one of either {{tt|t*}} or {{tt|p*}} can be used. If {{tt|t2/p2}} are not defined, {{tt|t1,p1}} are used for the second parameter instead.

===Example===

  &lt;nowiki&gt; {{par begin}}
  {{par | count | the size of the list}}
  {{par pred2 | p | p1=ForwardIt | t2=T | if the elements should be exchanged}}
  {{par end}}&lt;/nowiki&gt;

The above results in the following:

{{par begin}}
{{par | count | the size of the list}}
{{par pred2 | p | p1=ForwardIt | t2=T | if the elements should be exchanged}}
{{par end}}</text>
      <sha1>jwbk3bv7eiv6ogcm8jz7lzgtipbs8ab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list begin</title>
    <ns>10</ns>
    <id>10241</id>
    <redirect title="Template:par begin" />
    <revision>
      <id>48674</id>
      <timestamp>2013-05-31T18:54:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list begin]] to [[Template:par begin]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:par begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list ccmp</title>
    <ns>10</ns>
    <id>10242</id>
    <redirect title="Template:par ccmp" />
    <revision>
      <id>48676</id>
      <timestamp>2013-05-31T18:54:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list ccmp]] to [[Template:par ccmp]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:par ccmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list cmp</title>
    <ns>10</ns>
    <id>10243</id>
    <redirect title="Template:par cmp" />
    <revision>
      <id>48678</id>
      <timestamp>2013-05-31T18:55:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list cmp]] to [[Template:par cmp]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list end</title>
    <ns>10</ns>
    <id>10244</id>
    <redirect title="Template:par end" />
    <revision>
      <id>48680</id>
      <timestamp>2013-05-31T18:55:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list end]] to [[Template:par end]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list gen</title>
    <ns>10</ns>
    <id>10245</id>
    <redirect title="Template:par gen" />
    <revision>
      <id>48682</id>
      <timestamp>2013-05-31T18:55:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list gen]] to [[Template:par gen]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par gen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list hreq</title>
    <ns>10</ns>
    <id>10246</id>
    <redirect title="Template:par hreq" />
    <revision>
      <id>48684</id>
      <timestamp>2013-05-31T18:55:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list hreq]] to [[Template:par hreq]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:par hreq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list item</title>
    <ns>10</ns>
    <id>10247</id>
    <redirect title="Template:par" />
    <revision>
      <id>48686</id>
      <timestamp>2013-05-31T18:55:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list item]] to [[Template:par]]</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[Template:par]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list op1</title>
    <ns>10</ns>
    <id>10248</id>
    <redirect title="Template:par op1" />
    <revision>
      <id>48688</id>
      <timestamp>2013-05-31T18:55:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list op1]] to [[Template:par op1]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par op1]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list op2</title>
    <ns>10</ns>
    <id>10249</id>
    <redirect title="Template:par op2" />
    <revision>
      <id>48690</id>
      <timestamp>2013-05-31T18:56:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list op2]] to [[Template:par op2]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par op2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list opf</title>
    <ns>10</ns>
    <id>10250</id>
    <redirect title="Template:par opf" />
    <revision>
      <id>48692</id>
      <timestamp>2013-05-31T18:56:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list opf]] to [[Template:par opf]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par opf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list pred0</title>
    <ns>10</ns>
    <id>10251</id>
    <redirect title="Template:par pred0" />
    <revision>
      <id>48695</id>
      <timestamp>2013-05-31T18:57:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list pred0]] to [[Template:par pred0]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:par pred0]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list pred1</title>
    <ns>10</ns>
    <id>10252</id>
    <redirect title="Template:par pred1" />
    <revision>
      <id>48697</id>
      <timestamp>2013-05-31T18:57:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list pred1]] to [[Template:par pred1]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:par pred1]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list pred2</title>
    <ns>10</ns>
    <id>10253</id>
    <redirect title="Template:par pred2" />
    <revision>
      <id>48699</id>
      <timestamp>2013-05-31T18:57:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list pred2]] to [[Template:par pred2]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:par pred2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list pred2 eq</title>
    <ns>10</ns>
    <id>10254</id>
    <redirect title="Template:par pred2 eq" />
    <revision>
      <id>48701</id>
      <timestamp>2013-05-31T18:57:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list pred2 eq]] to [[Template:par pred2 eq]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:par pred2 eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list req</title>
    <ns>10</ns>
    <id>10255</id>
    <redirect title="Template:par req" />
    <revision>
      <id>48703</id>
      <timestamp>2013-05-31T18:57:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list req]] to [[Template:par req]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par req]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list req concept</title>
    <ns>10</ns>
    <id>10256</id>
    <redirect title="Template:par req concept" />
    <revision>
      <id>48705</id>
      <timestamp>2013-05-31T18:57:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list req concept]] to [[Template:par req concept]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Template:par req concept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list req concept deref</title>
    <ns>10</ns>
    <id>10257</id>
    <redirect title="Template:par req concept deref" />
    <revision>
      <id>48707</id>
      <timestamp>2013-05-31T18:57:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:param list req concept deref]] to [[Template:par req concept deref]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[Template:par req concept deref]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:param list/doc</title>
    <ns>10</ns>
    <id>10179</id>
    <redirect title="Template:par/doc" />
    <revision>
      <id>48693</id>
      <parentid>48529</parentid>
      <timestamp>2013-05-31T18:56:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Template:par/doc]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:par/doc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:plot</title>
    <ns>10</ns>
    <id>8461</id>
    <revision>
      <id>30896</id>
      <parentid>30887</parentid>
      <timestamp>2012-05-13T20:02:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>better specify image ourselves; add default size</comment>
      <text xml:space="preserve" bytes="435">&lt;div class=&quot;t-plot&quot;&gt;
{{#if:{{{1|}}}
|{{#if:{{{left|}}}|&lt;div class=&quot;t-plot-left&quot;&gt;{{{left}}}&lt;/div&gt;}}
{{#if:{{{right|}}}|&lt;div class=&quot;t-plot-right&quot;&gt;{{{right}}}&lt;/div&gt;}}
&lt;div class=&quot;t-plot-image{{#if:{{{left|}}}|-left}}{{#if:{{{right|}}}|-right}}&quot;&gt;[[Image:{{{1|}}}|{{{size|200x200px}}}]]&lt;/div&gt;
{{#if:{{{bottom|}}}|&lt;div class=&quot;t-plot-bottom&quot;&gt;{{{bottom}}}&lt;/div&gt;}}
|{{error|No image specified}}
}}
&lt;/div&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:plot/doc</title>
    <ns>10</ns>
    <id>8462</id>
    <revision>
      <id>39825</id>
      <parentid>30906</parentid>
      <timestamp>2012-09-28T17:46:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>tt -&gt; code</comment>
      <text xml:space="preserve" bytes="845">
{{tl|plot | ''location'' | left=''text_at_left'' {{optional}} | right=''text_at_right'' {{optional}} | bottom=''text_at_bottom'' {{optional}} | size='' '''width'''x'''height'''px''{{optional}}}}

Draws a plot image at ''location''. {{tt|left}}, {{tt|right}} and {{tt|bottom}} parameters optionally specify additional text that would appear to the left, right and bottom of the plot image. The {{tt|size}} parameter specifies the size of the image in the usual Mediawiki syntax (see [http://www.mediawiki.org/wiki/Help:Images this help page]). The default size value is 200 &amp;times; 200 pixels.

===Example===

{{tt|&lt;nowiki&gt;{{plot | math-atan2.png | left=Y argument | bottom=X argument | right=Return value | size=x240px}}&lt;/nowiki&gt;}}

results in:

{{plot | math-atan2.png | left=Y argument | bottom=X argument | right=Return value | size=x240px}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:pp-meta</title>
    <ns>10</ns>
    <id>190</id>
    <revision>
      <id>67343</id>
      <parentid>67342</parentid>
      <timestamp>2014-02-05T20:23:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>padlock</comment>
      <text xml:space="preserve" bytes="5413">{{#ifeq:{{#switch:{{lc:{{{type}}}}}
  |move=&lt;!--
 --&gt;{{#ifeq:
      {{#switch:{{lc:{{{demolevel|undefined}}}}}
        |semi
        |autoconfirmed=autoconfirmed
        |administrator
        |full
        |sysop=sysop
        |undefined={{PROTECTIONLEVEL:move}}
        |#default=&lt;!--fallback value: null
   --&gt;}}
      |sysop|yes|no
    }}
  |create=&lt;!--
 --&gt;{{#if:
      {{#switch:{{lc:{{{demolevel|undefined}}}}}
        |semi
        |autoconfirmed=autoconfirmed
        |administrator
        |full
        |sysop=sysop
        |undefined={{PROTECTIONLEVEL:create}}
        |#default=&lt;!--fallback value: null
   --&gt;}}
      |yes|no
    }}
|#default&lt;!--includes all other types--&gt;=&lt;!--
 --&gt;{{#if:
      {{#switch:{{lc:{{{demolevel|undefined}}}}}
        |semi
        |autoconfirmed=autoconfirmed
        |administrator
        |full
        |sysop=sysop
        |undefined={{PROTECTIONLEVEL:edit}}
        |#default=&lt;!--fallback value: null
   --&gt;}}
      |{{#ifeq:{{#switch:{{lc:{{{disallowlevel|}}}}}
                 |semi
                 |autoconfirmed=autoconfirmed
                 |administrator
                 |full
                 |sysop=sysop
                 |#default=&lt;!--fallback value: null--&gt;}}
         |{{#switch:{{lc:{{{demolevel|undefined}}}}}
            |semi
            |autoconfirmed=autoconfirmed
            |administrator
            |full
            |sysop=sysop
            |undefined={{PROTECTIONLEVEL:edit}}
            |#default=&lt;!--fallback value: null
       --&gt;}}
         |no|yes
       }}
   |no}}
}}|yes|{{#ifeq:{{lc:{{{small|}}}}}|yes|
&lt;div class=&quot;metadata topicon&quot; id=&quot;protected-icon&quot; style=&quot;display:none; right:55px;&quot;&gt;[[Image:{{{image|{{#switch:{{lc:{{{type}}}}}
 |full=Padlock-red.svg
 |semi=Padlock-red.svg
 |move=Padlock-red.svg
 |indef=Padlock-red.svg
 |office=Padlock-red.svg
 |create=Padlock-red.svg
 |#default=Transparent.gif
}}}}}|20px|link=|{{{icon-text|This {{pp-meta/pagetype}} is {{#switch:{{lc:{{{type}}}}}
 |semi=semi-
 |move=move-
 |indef=permanently&lt;nowiki&gt; &lt;/nowiki&gt;
 |create=creation-
 |office=&lt;!--null, but should this have a special tag?--&gt;
 |full
 |#default=&lt;!--null--&gt;
}}protected{{#ifeq:{{lc:{{{type}}}}}|indef||{{#if:{{{expiry|}}}|&lt;nowiki&gt; &lt;/nowiki&gt;until {{#time:F j, Y|{{{expiry}}}}}}}}}{{#if:{{{icon-reason|}}}|&lt;nowiki&gt; &lt;/nowiki&gt;{{{icon-reason}}}}}.}}}|alt=Page {{#switch:{{lc:{{{type}}}}}
 |semi=semi-
 |move=move-
 |indef=permanently&lt;nowiki&gt; &lt;/nowiki&gt;
 |create=creation-
 |office=&lt;!--null, but should this have a special tag?--&gt;
 |full
 |#default=&lt;!--null--&gt;
}}protected]]&lt;/div&gt;
|&lt;!-- else, not small --&gt;
{{mbox 
| demospace = {{{demospace|}}}
| type = protection
| image = [[Image:{{{image|{{#switch:{{lc:{{{type}}}}}
 |full=Padlock-red.svg
 |semi=Padlock-red.svg
 |move=Padlock-red.svg
 |indef=Padlock-red.svg
 |office=Padlock-red.svg
 |create=Padlock-red.svg
 |#default=Transparent.gif
}}}}}|40px|{{{icon-text|This page is {{#switch:{{lc:{{{type}}}}}
 |semi=semi-
 |move=move-
 |indef=permanently&lt;nowiki&gt; &lt;/nowiki&gt;
 |create=creation-
 |office=&lt;!--null, but should this have a special tag?--&gt;
 |full
 |#default=&lt;!--null--&gt;
}}protected.}}}]]
| text = '''{{{reason-text|{{#switch:{{lc:{{{type}}}}}
 |full=This page is currently protected from editing
 |semi=Editing of this {{pp-meta/pagetype}} by new or unregistered users is currently [[enwiki:Wikipedia:Protection policy|disabled]]
 |move=This {{pp-meta/pagetype}} is currently [[enwiki:Wikipedia:This page is protected|protected]] from [[enwiki:Help:Moving a page|page moves]]
 |indef=This page is protected from editing ''indefinitely''
 |office=This {{pp-meta/pagetype}} is currently protected from editing
 |create=[[enwiki:Help:Starting a new page|Recreation]] of this {{pp-meta/pagetype}} [[enwiki:Wikipedia:This page is protected|has been disabled]]
}}{{#ifeq:{{lc:{{{type}}}}}|indef||{{#if:{{{expiry|}}}|&amp;#32;until {{#time:F j, Y|{{{expiry}}}}}}}}}{{{reason&lt;includeonly&gt;|&lt;/includeonly&gt;}}}.}}}'''&lt;br /&gt; {{{explanation-text|{{#switch:{{lc:{{{type}}}}}
 |full|indef=Please discuss any changes on the talk page.
 |semi=If you cannot edit this {{pp-meta/pagetype}} and you wish to make a change, you can {{#ifeq:{{NAMESPACE}}|{{TALKSPACE}}||[[Template:Editsemiprotected|request an edit]], [[{{TALKPAGENAME}}|discuss changes on the talk page]],}} request unprotection, [[Special:Userlogin|log in]], or &lt;span class=&quot;plainlinks&quot;&gt;[http://en.cppreference.com/mwiki/index.php?title=Special:Userlogin&amp;type=signup &lt;span style=&quot;color:#002bb8;&quot; title=&quot;Sign in / create account&quot;&gt;create an account&lt;/span&gt;]&lt;/span&gt;.
 |move=The page may still be edited but cannot be moved until unprotected. Please discuss any suggested moves on the [[{{TALKPAGENAME}}|talk page]].  
 |office=If you are able to edit this page, please discuss all changes and additions on the [[{{TALKPAGENAME}}|talk page]] first. '''Do not remove protection from this page unless you are authorized by the Wikimedia Foundation to do so.'''
 |create=Please see the {{#if:{{{xfd|}}}|'''[[{{{xfd}}}|deletion discussion]]''' or the}} [{{fullurl:Special:Log|type=delete&amp;page={{FULLPAGENAMEE}}}} deletion log] for details of why this page was deleted.
}}}}}
}}
}}|[[Category:Wikipedia pages with incorrect protection templates]]}}&lt;!--End if small--&gt;&lt;includeonly&gt;{{#ifeq:{{lc:{{{categories|no}}}}}|no||{{{categories|}}}}}&lt;/includeonly&gt;&lt;noinclude&gt;

&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1>lmhxutzkviovxcjf3f6vxcugyy97d7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:pp-meta/pagetype</title>
    <ns>10</ns>
    <id>13138</id>
    <revision>
      <id>67341</id>
      <timestamp>2014-02-05T20:20:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="317">{{#ifeq:{{TALKSPACE}}|{{NAMESPACE}}|talk page|
{{#switch:{{NAMESPACE}}
 |{{ns:}}              = article
 |{{ns:File}}          = file
 |{{ns:Template}}      = template
 |{{ns:Category}}      = category
 |{{ns:Module}}        = module
 |#default             = page}}}}&lt;noinclude&gt;
{{doc|content={{NODOC}}}}
&lt;/noinclude&gt;</text>
      <sha1>pttdhb8ryrm4klhkfpi1swcyzsmrqxb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:pp-template</title>
    <ns>10</ns>
    <id>191</id>
    <revision>
      <id>19982</id>
      <parentid>19083</parentid>
      <timestamp>2012-03-19T16:45:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2981">&lt;includeonly&gt;{{pp-meta
|type={{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}
   |semi
   |autoconfirmed=semi
   |administrator
   |full
   |sysop=indef
   |move=move
   |#default=indef&lt;!--fallback value--&gt;}}
|small={{{small|no}}}
|demospace={{{demospace|}}}
|demolevel={{#ifeq:{{PAGENAME}}/{{NAMESPACE}}|{{SUBPAGENAME}}/{{ns:Template}}|{{{demolevel|undefined}}}|{{#ifeq:{{lc:{{SUBPAGENAME}}}}|sandbox|sysop|{{{demolevel|undefined}}}}}}}
|expiry=&lt;!--not applicable--&gt;
|dispute=no
|icon-text=This {{#ifeq:{{NAMESPACE}}|{{ns:6}}|image, included in a high-risk template or message,|high-risk template}} is indefinitely {{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}
   |semi
   |autoconfirmed=semi-protected from editing
   |move=move-protected
   |administrator
   |full
   |sysop
   |#default=&lt;!--fallback value--&gt;protected from editing}} to prevent vandalism.
|reason-text=This {{#switch:{{NAMESPACE}}
  |{{ns:image}}=image, used in one or more high-risk templates{{#switch:{{{demolevel|{{PROTECTIONLEVEL:edit}}}}}
   |semi
   |autoconfirmed=
   |administrator
   |full
   |sysop=&lt;nowiki&gt; &lt;/nowiki&gt;and/or system messages,
   |#default=&lt;!--fallback value--&gt;}}
  |#default=high-risk template
}} has been {{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}
   |semi
   |autoconfirmed=semi-
   |move=move-
   |administrator
   |full
   |sysop&lt;!--uses default--&gt;
   |#default=&lt;!--fallback value--&gt;}}protected{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop||&lt;nowiki&gt; &lt;/nowiki&gt;from editing}} to prevent vandalism. {{#switch:{{{demolevel|{{PROTECTIONLEVEL:edit}}}}}
   |semi
   |autoconfirmed=
   |administrator
   |full
   |sysop&lt;!--uses default--&gt;
   |#default={{#switch:{{NAMESPACE}}|{{ns:image}}=&lt;br /&gt;&lt;small&gt;'''Do not move this image''' to [[commons:|Wikimedia Commons]].&lt;/small&gt;}}}}
|categories={{{categories|{{#ifeq:{{NAMESPACE}}|{{ns:10}}|{{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}
   |semi
   |autoconfirmed=[[Category:Wikipedia semi-protected templates|{{PAGENAME}}]]{{#ifeq:{{PROTECTIONLEVEL:move}}|sysop|[[Category:Wikipedia move-protected templates|{{PAGENAME}}]]}}
   |move=[[Category:Wikipedia move-protected templates|{{PAGENAME}}]]
   |administrator
   |full
   |sysop&lt;!--uses default--&gt;
   |#default=[[Category:Wikipedia protected templates|{{PAGENAME}}]]&lt;!--fallback value--&gt;}}}}{{#ifeq:{{NAMESPACE}}|{{ns:6}}|[[Category:{{#switch:{{{demolevel|{{PROTECTIONLEVEL:edit}}}}}
   |semi
   |autoconfirmed=Semi-protected
   |administrator
   |full
   |sysop&lt;!--uses default--&gt;
   |#default=Protected&lt;!--fallback value--&gt;}} images|{{PAGENAME}}]]}}}}}}}&lt;/includeonly&gt;&lt;noinclude&gt;
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:purge</title>
    <ns>10</ns>
    <id>192</id>
    <revision>
      <id>20015</id>
      <parentid>4062</parentid>
      <timestamp>2012-03-19T18:30:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="56">{{[[Template:{{{1}}}|{{{1}}}]]}}&lt;noinclude&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rconcept</title>
    <ns>10</ns>
    <id>15761</id>
    <revision>
      <id>89642</id>
      <parentid>88649</parentid>
      <timestamp>2017-01-23T06:26:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>drop &quot;r&quot;</comment>
      <text xml:space="preserve" bytes="275">{{#if: {{{1|}}} |[[cpp/experimental/ranges/{{#switch:{{{2|c}}}|c=concepts|u=utility|i=iterator}}/{{trim|{{{1|}}}}}|&lt;code&gt;{{trim|{{{1|}}}}}&lt;/code&gt;]]{{#switch:{{{2|c}}}|c|u|i=|#default={{error|unrecognized concept type}}}}| {{error|no concept given}} }}&lt;noinclude&gt;
&lt;/noinclude&gt;</text>
      <sha1>p87tt1kr4p4rjgciv6g82ynzrgs18hy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std</title>
    <ns>10</ns>
    <id>13010</id>
    <revision>
      <id>66077</id>
      <parentid>65639</parentid>
      <timestamp>2013-10-24T15:49:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>don't show id by default</comment>
      <text xml:space="preserve" bytes="188">&lt;onlyinclude&gt;:* {{{section}}} {{{title}}} {{#if:{{{id|}}}|&amp;#91;{{{id}}}&amp;#93; }}{{#if:{{{p|}}}|(p: {{{p}}})}}
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>nuxqtaha4wp2d2orbjj6cyr5ixzktgx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std c++03</title>
    <ns>10</ns>
    <id>13007</id>
    <revision>
      <id>65631</id>
      <parentid>65630</parentid>
      <timestamp>2013-09-23T19:13:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="162">&lt;onlyinclude&gt;&lt;div class=&quot;t-ref-std-c++03&quot;&gt;
* C++03 standard (ISO/IEC 14882:2003): 
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>c1ayohl9nky5y894b0ctt2dymkf13g5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std c++11</title>
    <ns>10</ns>
    <id>13006</id>
    <revision>
      <id>65629</id>
      <timestamp>2013-09-23T19:12:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="162">&lt;onlyinclude&gt;&lt;div class=&quot;t-ref-std-c++11&quot;&gt;
* C++11 standard (ISO/IEC 14882:2011): 
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>mahnwd2mc2tjma6ixzfcz268o4erv5d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std c++14</title>
    <ns>10</ns>
    <id>13012</id>
    <revision>
      <id>76684</id>
      <parentid>65642</parentid>
      <timestamp>2015-02-26T15:23:21Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fix typo (C++11 =&gt; C++14)</comment>
      <text xml:space="preserve" bytes="162">&lt;onlyinclude&gt;&lt;div class=&quot;t-ref-std-c++14&quot;&gt;
* C++14 standard (ISO/IEC 14882:2014): 
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>tk34tnxmtr9zgc5yox1f1dldhbrke74</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std c++98</title>
    <ns>10</ns>
    <id>13008</id>
    <revision>
      <id>65632</id>
      <timestamp>2013-09-23T19:13:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="162">&lt;onlyinclude&gt;&lt;div class=&quot;t-ref-std-c++98&quot;&gt;
* C++98 standard (ISO/IEC 14882:1998): 
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>9m75bxuw5xuvn8jss03k0szjr8ssxo6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std c11</title>
    <ns>10</ns>
    <id>13033</id>
    <revision>
      <id>66073</id>
      <timestamp>2013-10-24T15:45:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="156">&lt;onlyinclude&gt;&lt;div class=&quot;t-ref-std-11&quot;&gt;
* C11 standard (ISO/IEC 9899:2011): 
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>sn3r63wwbtqzusu4ofcfd6l16ivtmu0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std c89</title>
    <ns>10</ns>
    <id>13035</id>
    <revision>
      <id>66075</id>
      <timestamp>2013-10-24T15:46:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="161">&lt;onlyinclude&gt;&lt;div class=&quot;t-ref-std-c89&quot;&gt;
* C89/C90 standard (ISO/IEC 9899:1990): 
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>1sbblqhyq6bf88e5yrhyafco6wg22g3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std c99</title>
    <ns>10</ns>
    <id>13034</id>
    <revision>
      <id>66074</id>
      <timestamp>2013-10-24T15:45:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="157">&lt;onlyinclude&gt;&lt;div class=&quot;t-ref-std-c99&quot;&gt;
* C99 standard (ISO/IEC 9899:1999): 
&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>3n8k9ks3jh3ukrqskpa4dnmwbdj1ovp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std end</title>
    <ns>10</ns>
    <id>13009</id>
    <revision>
      <id>66079</id>
      <parentid>65633</parentid>
      <timestamp>2013-10-24T15:50:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>rm space</comment>
      <text xml:space="preserve" bytes="98">&lt;onlyinclude&gt;&lt;/div&gt;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:ref std/doc}}
&lt;/noinclude&gt;</text>
      <sha1>hc4b0c94mn6dwdcm0vzc5b3l7u487o1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ref std/doc</title>
    <ns>10</ns>
    <id>13011</id>
    <revision>
      <id>66078</id>
      <parentid>66072</parentid>
      <timestamp>2013-10-24T15:50:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1291">{{tl|ref std c89}}

{{tl|ref std c99}}

{{tl|ref std c11}}

{{tl|ref std c++98}}

{{tl|ref std c++03}}

{{tl|ref std c++11}}

{{tl|ref std c++14}}

{{tl|ref std end}}

{{tl|ref std | section{{=}}''section'' | title{{=}}''title'' | id{{=}}''id''{{mark optional}}| p{{=}}''pages'' {{mark optional}}}}

Applies consistent formatting to the references to the C++ standards in the &quot;References&quot; section. Each section must always start with {{tlc|ref std c++*}} and end with {{tlc|ref std end}}.

===Example===
  &lt;nowiki&gt;
  {{ref std c++11}}
  {{ref std | section=8.3.5 | title=Functions | id=dcl.fct}}
  {{ref std | section=8.3.6 | title=Default arguments | id=dcl.fct.default | p=1-2,4}}
  {{ref std end}}
  {{ref std c++98}}
  {{ref std | section=8.3.5 | title=Functions | id=dcl.fct}}
  {{ref std | section=8.3.6 | title=Default arguments | id=dcl.fct.default | p=1-2,4}}
  {{ref std end}}
  &lt;/nowiki&gt;

The above wikitext is rendered as:

{{ref std c++11}}
{{ref std | section=8.3.5 | title=Functions | id=dcl.fct}}
{{ref std | section=8.3.6 | title=Default arguments | id=dcl.fct.default | p=1-2,4}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=8.3.5 | title=Functions | id=dcl.fct}}
{{ref std | section=8.3.6 | title=Default arguments | id=dcl.fct.default | p=1-2,4}}
{{ref std end}}</text>
      <sha1>p4lyrlw41z20b9rfcmwcn3s8rpm9ahm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rev</title>
    <ns>10</ns>
    <id>9554</id>
    <revision>
      <id>65234</id>
      <parentid>65228</parentid>
      <timestamp>2013-09-04T23:50:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use HTML tables</comment>
      <text xml:space="preserve" bytes="377">&lt;onlyinclude&gt;&lt;tr class=&quot;t-rev {{#if:{{{since|}}}|t-since-{{#replace:{{{since}}}|+|x}}}} {{#if:{{{until|}}}|t-until-{{#replace:{{{until}}}|+|x}}}}&quot;&gt;&lt;td&gt;{{{1|}}}&lt;/td&gt;
&lt;td&gt;{{#if:{{{since|}}}|{{mark since {{{since|}}}}}{{#if:{{{until|}}}|&lt;br/&gt;}}}}{{#if:{{{until|}}}|{{mark until {{{until|}}}}} }}&lt;/td&gt;&lt;/tr&gt;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:rev/doc}}
&lt;/noinclude&gt;</text>
      <sha1>i5ppwlmc2lipxki66hrb9bsst5e2vtf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rev begin</title>
    <ns>10</ns>
    <id>9552</id>
    <revision>
      <id>71974</id>
      <parentid>64791</parentid>
      <timestamp>2014-07-04T19:00:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add noborder param</comment>
      <text xml:space="preserve" bytes="168">&lt;includeonly&gt; &lt;table class=&quot;t-rev-begin {{#ifeq:{{{noborder|}}}|true|t-rev-begin-noborder}}&quot;&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:rev/doc}}
&lt;/noinclude&gt;</text>
      <sha1>s8ysl2lkxux795bhrw5657ha6yy6kle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rev end</title>
    <ns>10</ns>
    <id>9553</id>
    <revision>
      <id>64792</id>
      <parentid>61287</parentid>
      <timestamp>2013-08-27T00:50:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use explicit table syntax</comment>
      <text xml:space="preserve" bytes="69">&lt;/table&gt;&lt;noinclude&gt;
{{documentation | Template:rev/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rev if</title>
    <ns>10</ns>
    <id>14536</id>
    <revision>
      <id>82000</id>
      <timestamp>2015-11-24T03:39:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="536">&lt;onlyinclude&gt;{{#ifeq:{{{rev|}}}|yes|&lt;tr class=&quot;t-rev {{#if:{{{since|}}}|t-since-{{#replace:{{{since}}}|+|x}}}} {{#if:{{{until|}}}|t-until-{{#replace:{{{until}}}|+|x}}}}&quot;&gt;&lt;td&gt;}}{{{1|}}}{{#ifeq:{{{rev|}}}|yes|&lt;/td&gt;
&lt;td&gt;{{#if:{{{since|}}}|{{mark since {{{since|}}}}}{{#if:{{{until|}}}|&lt;br/&gt;}}}}{{#if:{{{until|}}}|{{mark until {{{until|}}}}} }}&lt;/td&gt;&lt;/tr&gt;}}&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation|content= {{tl|rev if|2=rev=yes|3=args|4=text}} is equivalent to {{tl|rev|args|text}}, otherwise it's equivalent to {{tt|text}}.}}
&lt;/noinclude&gt;</text>
      <sha1>rs3nd2pj0zun89s5476l7ywzaz3rd6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rev inl</title>
    <ns>10</ns>
    <id>12785</id>
    <revision>
      <id>71970</id>
      <parentid>71969</parentid>
      <timestamp>2014-07-04T18:54:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add a space between the text and the mark</comment>
      <text xml:space="preserve" bytes="424">&lt;span class=&quot;t-rev-inl {{#ifeq:{{{noborder|}}}|true|t-rev-inl-noborder}} {{#if:{{{since|}}}|t-since-{{#replace:{{{since}}}|+|x}}}} {{#if:{{{until|}}}|t-until-{{#replace:{{{until}}}|+|x}}}}&quot;&gt;&lt;span&gt;{{{1|}}}&lt;/span&gt; &lt;!--
--&gt;&lt;span&gt;{{#if:{{{since|}}}|{{mark since {{{since|}}}}}{{#if:{{{until|}}}|&lt;br/&gt;}}}}{{#if:{{{until|}}}|{{mark until {{{until|}}}}} }}&lt;/span&gt;&lt;/span&gt;&lt;noinclude&gt;
{{documentation | Template:rev/doc}}
&lt;/noinclude&gt;</text>
      <sha1>cahag97g6hemim8wpbd62iinl66dnio</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rev/doc</title>
    <ns>10</ns>
    <id>10262</id>
    <revision>
      <id>90770</id>
      <parentid>90769</parentid>
      <timestamp>2017-03-09T13:44:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1776">
Used to declare that certain part of the description in valid to only specific revisions of the standard.

{{tl|rev begin|noborder{{=}}''true_if_noborder''}}

Begins the set of text snippets specific to a specific revision(s) of the standard. If the {{tt|noborder}} parameter is ''true'' then the table is displayed with no border and as little padding as possible.

{{tl|rev|since{{=}}''since-std''{{mark optional}}|until{{=}}''until-std''{{mark optional}}|text}}

Specifies that ''text'' is valid only for standard revisions since ''since-std'' until ''until-std'' (''until-std'' is not inclusive).

{{tl|rev end}}

Ends the set of text snippets specific to a specific revision(s) of the standard.

{{tl|rrev|noborder{{=}}''true_if_noborder''{{mark optional}}|since{{=}}''since-std''{{mark optional}}|until{{=}}''until-std''{{mark optional}}|text}}

A combined {{tl|rev begin}}/{{tl|rev}}/{{tl|rev end}}, for when only a single {{tl|rev}} is needed.

{{tl|rrev multi|noborder{{=}}''true_if_noborder''{{mark optional}}|since''X''{{=}}''since-std''{{mark optional}}|until''X''{{=}}''until-std''{{mark optional}}|rev''X''{{=}}text|...}}

A combined {{tl|rev begin}}/{{tl|rev}}/{{tl|rev end}}. Up to 7 snippets are supported. The default for {{tt|since''X''}} is {{tt|until''X-1''}} and default for {{tt|until''X''}} is {{tt|since''X+1''}}. Thus, it is most useful when the snippets are relatively short and the revision ranges consecutive. This template may be substituted.

{{tl|rev inl|since{{=}}''since-std''{{mark optional}}|until{{=}}''until-std''{{mark optional}}|noborder{{=}}''true_if_noborder''|text}}

Same as {{tl|rev}}, just is displayed inline. {{tl|rev begin}} and {{tl|rev end}} must not be used.

Border is omitted if the {{tt|noborder}} parameter is ''true''.</text>
      <sha1>g9psl4viub2r327l8ck9gxpwxzk29i1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:right</title>
    <ns>10</ns>
    <id>2746</id>
    <revision>
      <id>10397</id>
      <parentid>4061</parentid>
      <timestamp>2011-09-10T20:09:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+ doc link</comment>
      <text xml:space="preserve" bytes="184">&lt;includeonly&gt;&lt;div style=&quot;text-align:right; width:auto; margin-left:auto; margin-right:auto;&quot;&gt;{{{1}}}&lt;/div&gt;&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation | Template:center/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rl</title>
    <ns>10</ns>
    <id>196</id>
    <revision>
      <id>391</id>
      <parentid>390</parentid>
      <timestamp>2011-06-06T22:43:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: import content</comment>
      <text xml:space="preserve" bytes="125">{{#if: {{{1|}}} |[[/{{trim|{{{1|}}}}}|{{{2|{{{1}}}}}}]]| {{error|no link given}} }}&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rl/doc</title>
    <ns>10</ns>
    <id>197</id>
    <revision>
      <id>64377</id>
      <parentid>64372</parentid>
      <timestamp>2013-08-15T18:46:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>rm rlf</comment>
      <text xml:space="preserve" bytes="1227">This is one of templates used to make links.

Absolute links:

{{tl|ltt|''path''|''title'' {{mark optional}} }} - link to a page using absolute path. The default title is only the last part of the path. Link font is {{tt|teletype}}.

{{tl|ltf|''path''|''title'' {{mark optional}} | args=''arguments'' {{mark optional}}  }} - link to a page using absolute path. The default title is only the last part of the path. Link font is {{tt|teletype}}. Parentheses indicating function are appended.

{{tl|l2tt|''page''|''title1'' {{mark optional}} | ''title2'' {{mark optional}} }} - makes a link to a page using absolute path. The title is formed from the two last parts of the path. {{tt|::}} is inserted between them. Each of these parts can be overridden by ''title1'' and ''title2''.  Link font is {{tt|teletype}}.

Relative links:

{{tl|rl|''page''|''title'' {{mark optional}} }} - makes a link to a page relative to this page. The link appears in normal font.

{{tl|rlp|''page''|''title'' {{mark optional}} }} - makes a link to a page relative to the parent page. The link appears in normal font.

{{tl|rlt|''page''|''title'' {{mark optional}} }} - makes a link to a page relative to this page. The link appears in teletype font.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rlp</title>
    <ns>10</ns>
    <id>199</id>
    <revision>
      <id>4058</id>
      <parentid>397</parentid>
      <timestamp>2011-06-11T14:19:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:rlp]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="145">{{#if: {{{1|}}} |[[../{{trim|{{{1|}}}}}|{{{2|{{{1}}}}}}]]| {{error|no link given}} }}&lt;noinclude&gt;
{{documentation | Template:rl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rlt</title>
    <ns>10</ns>
    <id>202</id>
    <revision>
      <id>4057</id>
      <parentid>403</parentid>
      <timestamp>2011-06-11T14:19:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:rlt]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="150">{{#if: {{{1|}}} |[[/{{trim|{{{1|}}}}}|{{tt|{{{2|{{{1}}}}}}}}]]| {{error|no link given}} }}&lt;noinclude&gt;
{{documentation | Template:rl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rrev</title>
    <ns>10</ns>
    <id>16198</id>
    <revision>
      <id>91085</id>
      <parentid>91083</parentid>
      <timestamp>2017-03-17T21:52:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>I think we can safely assume that we need a line break?</comment>
      <text xml:space="preserve" bytes="156">{{rev begin|noborder={{{noborder|}}}}}
{{rev|since={{{since|}}}|until={{{until|}}}|
{{{|{{{1}}}}}}
}}
{{rev end}}&lt;noinclude&gt;
{{documentation}}

&lt;/noinclude&gt;</text>
      <sha1>6wyjo6uqqj78wcwbvujx19qsy9chqos</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rrev multi</title>
    <ns>10</ns>
    <id>16200</id>
    <revision>
      <id>91086</id>
      <parentid>90773</parentid>
      <timestamp>2017-03-17T22:05:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>update with newfound knowledge about MW quirks</comment>
      <text xml:space="preserve" bytes="1087">{{rev begin|noborder={{{noborder|}}}}}
{{rev|since={{{since1|}}}|until={{{until1|{{{since2|}}}}}}|
{{{|{{{rev1}}}}}}
}}
{{{{{|safesubst:}}}#if:{{{rev2|}}}|{{rev|since={{{since2|{{{until1|}}}}}}|until={{{until2|{{{since3|}}}}}}|
{{{|{{{rev2}}}}}}
}}
{{{{{|safesubst:}}}#if:{{{rev3|}}}|{{rev|since={{{since3|{{{until2|}}}}}}|until={{{until3|{{{since4|}}}}}}|
{{{|{{{rev3}}}}}}
}}
{{{{{|safesubst:}}}#if:{{{rev4|}}}|{{rev|since={{{since4|{{{until3|}}}}}}|until={{{until4|{{{since5|}}}}}}|
{{{|{{{rev4}}}}}}
}}
{{{{{|safesubst:}}}#if:{{{rev5|}}}|{{rev|since={{{since5|{{{until4|}}}}}}|until={{{until5|{{{since6|}}}}}}|
{{{|{{{rev5}}}}}}
}}
{{{{{|safesubst:}}}#if:{{{rev6|}}}|{{rev|since={{{since6|{{{until5|}}}}}}|until={{{until6|{{{since7|}}}}}}|
{{{|{{{rev6}}}}}}
}}
{{{{{|safesubst:}}}#if:{{{rev7|}}}|{{rev|since={{{since7|{{{until6|}}}}}}|until={{{until7|}}}|
{{{|{{{rev7}}}}}}
}}
{{{{{|safesubst:}}}#if:{{{rev8|{{{since8|{{{until8|}}}}}}}}}|{{error|{{tl|rrev multi}} only supports up to 7 revisions}}}}
}}}}}}}}}}}}
{{rev end}}&lt;noinclude&gt;
{{documentation|Template:rev/doc}}
&lt;/noinclude&gt;</text>
      <sha1>3vvu2lgfda5mlxocke06hrynbcttu2h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:rrev/doc</title>
    <ns>10</ns>
    <id>16199</id>
    <revision>
      <id>90762</id>
      <timestamp>2017-03-09T12:19:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="20">{{Template:rev/doc}}</text>
      <sha1>a1q4zzzn1l2i91u3ubrv8apdjff3inr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list begin</title>
    <ns>10</ns>
    <id>10279</id>
    <redirect title="Template:nv begin" />
    <revision>
      <id>48770</id>
      <timestamp>2013-05-31T19:40:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list begin]] to [[Template:nv begin]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:nv begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list column begin</title>
    <ns>10</ns>
    <id>10278</id>
    <redirect title="Template:nv col begin" />
    <revision>
      <id>48768</id>
      <timestamp>2013-05-31T19:40:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list column begin]] to [[Template:nv col begin]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Template:nv col begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list column end</title>
    <ns>10</ns>
    <id>10277</id>
    <redirect title="Template:nv col end" />
    <revision>
      <id>48766</id>
      <timestamp>2013-05-31T19:40:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list column end]] to [[Template:nv col end]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[Template:nv col end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list column next</title>
    <ns>10</ns>
    <id>10276</id>
    <redirect title="Template:nv col next" />
    <revision>
      <id>48764</id>
      <timestamp>2013-05-31T19:40:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list column next]] to [[Template:nv col next]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[Template:nv col next]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list end</title>
    <ns>10</ns>
    <id>10275</id>
    <redirect title="Template:nv end" />
    <revision>
      <id>48762</id>
      <timestamp>2013-05-31T19:39:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list end]] to [[Template:nv end]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[Template:nv end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list guard</title>
    <ns>10</ns>
    <id>10274</id>
    <redirect title="Template:nv guard" />
    <revision>
      <id>48760</id>
      <timestamp>2013-05-31T19:39:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list guard]] to [[Template:nv guard]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:nv guard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list h1</title>
    <ns>10</ns>
    <id>10273</id>
    <redirect title="Template:nv h1" />
    <revision>
      <id>48758</id>
      <timestamp>2013-05-31T19:39:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list h1]] to [[Template:nv h1]]</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[Template:nv h1]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list h2</title>
    <ns>10</ns>
    <id>10272</id>
    <redirect title="Template:nv h2" />
    <revision>
      <id>48756</id>
      <timestamp>2013-05-31T19:39:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list h2]] to [[Template:nv h2]]</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[Template:nv h2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list item</title>
    <ns>10</ns>
    <id>10271</id>
    <redirect title="Template:nv" />
    <revision>
      <id>48754</id>
      <timestamp>2013-05-31T19:39:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list item]] to [[Template:nv]]</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[Template:nv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list ln</title>
    <ns>10</ns>
    <id>10270</id>
    <redirect title="Template:nv ln" />
    <revision>
      <id>48752</id>
      <timestamp>2013-05-31T19:39:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list ln]] to [[Template:nv ln]]</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[Template:nv ln]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list mem ln</title>
    <ns>10</ns>
    <id>10269</id>
    <redirect title="Template:nv mem ln" />
    <revision>
      <id>48750</id>
      <timestamp>2013-05-31T19:38:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list mem ln]] to [[Template:nv mem ln]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[Template:nv mem ln]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list template</title>
    <ns>10</ns>
    <id>10268</id>
    <redirect title="Template:nv inc" />
    <revision>
      <id>48800</id>
      <parentid>48748</parentid>
      <timestamp>2013-06-01T00:16:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>rename 'template' to 'inc'</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[Template:nv inc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sb list/doc</title>
    <ns>10</ns>
    <id>10178</id>
    <redirect title="Template:nv/doc" />
    <revision>
      <id>48525</id>
      <timestamp>2013-05-31T17:34:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sb list/doc]] to [[Template:nv/doc]]: Prepare for renames</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[Template:nv/doc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdcl list begin</title>
    <ns>10</ns>
    <id>10264</id>
    <redirect title="Template:sdsc begin" />
    <revision>
      <id>48740</id>
      <timestamp>2013-05-31T19:38:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sdcl list begin]] to [[Template:sdsc begin]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[Template:sdsc begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdcl list end</title>
    <ns>10</ns>
    <id>10265</id>
    <redirect title="Template:sdsc end" />
    <revision>
      <id>48742</id>
      <timestamp>2013-05-31T19:38:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sdcl list end]] to [[Template:sdsc end]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:sdsc end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdcl list item</title>
    <ns>10</ns>
    <id>10266</id>
    <redirect title="Template:sdsc" />
    <revision>
      <id>48744</id>
      <timestamp>2013-05-31T19:38:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sdcl list item]] to [[Template:sdsc]]</comment>
      <text xml:space="preserve" bytes="27">#REDIRECT [[Template:sdsc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdcl list sep</title>
    <ns>10</ns>
    <id>10267</id>
    <redirect title="Template:sdsc sep" />
    <revision>
      <id>48746</id>
      <timestamp>2013-05-31T19:38:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sdcl list sep]] to [[Template:sdsc sep]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:sdsc sep]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdcl list/doc</title>
    <ns>10</ns>
    <id>10182</id>
    <redirect title="Template:sdsc/doc" />
    <revision>
      <id>48548</id>
      <timestamp>2013-05-31T18:13:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:sdcl list/doc]] to [[Template:sdsc/doc]]: prepare for renames</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:sdsc/doc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdsc</title>
    <ns>10</ns>
    <id>220</id>
    <revision>
      <id>61697</id>
      <parentid>61020</parentid>
      <timestamp>2013-06-08T05:28:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="336">{{sdsc sep}}
|- class=&quot;t-sdsc&quot;
| {{#if: {{{num|{{{notes|}}}}}} || class=&quot;t-sdsc-nopad&quot; }} | {{trim| {{{1|}}}}}
| {{#if: {{{num|}}} || class=&quot;t-sdsc-nopad&quot; }} | {{#if: {{{num|}}} | ({{{num}}}) }}
| {{#if: {{{notes|}}} || class=&quot;t-sdsc-nopad&quot; }} | {{{notes|}}}
{{list guard}}
&lt;noinclude&gt;
{{documentation | Template:sdsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdsc begin</title>
    <ns>10</ns>
    <id>217</id>
    <revision>
      <id>61696</id>
      <parentid>61211</parentid>
      <timestamp>2013-06-08T05:28:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="112">&lt;onlyinclude&gt;{| class=&quot;t-sdsc-begin&quot;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation | Template:sdsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdsc end</title>
    <ns>10</ns>
    <id>218</id>
    <revision>
      <id>61213</id>
      <parentid>48741</parentid>
      <timestamp>2013-06-05T12:30:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;sdcl list/doc&quot; to &quot;sdsc/doc&quot;</comment>
      <text xml:space="preserve" bytes="82">{{sdcl list sep}}
|}&lt;noinclude&gt;
{{documentation | Template:sdsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdsc sep</title>
    <ns>10</ns>
    <id>221</id>
    <revision>
      <id>61698</id>
      <parentid>61214</parentid>
      <timestamp>2013-06-08T05:28:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="101">|-
| colspan=&quot;10&quot; class=&quot;t-sdsc-sep&quot; |
&lt;noinclude&gt;
{{documentation | Template:sdsc/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sdsc/doc</title>
    <ns>10</ns>
    <id>216</id>
    <revision>
      <id>48549</id>
      <parentid>48547</parentid>
      <timestamp>2013-05-31T18:13:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update template names</comment>
      <text xml:space="preserve" bytes="692">This is one of the family of templates used for creation of syntax explanation lists.

{{list/doc}}

{{tl|sdsc begin}}
: starts the declaration list

{{tl|sdsc end}}
: ends the declaration list. This template automatically adds {{tl|sdsc sep}} above the item.

{{tl|sdsc sep}}
: adds a separator

{{tl|sdsc | notes{{=}}''notes'' | num{{=}}''num'' | ''declaration'' }}
: adds an item to the declaration list. The {{tt|notes}} parameter is optional and may be used to add notes about the feature. The {{tt|num}} parameter is also optional and may be used for numbering purposes. ''declaration'' is the declaration of the feature. This template automatically adds {{tl|sdsc sep}} above the item.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:sidebar/doc</title>
    <ns>10</ns>
    <id>2133</id>
    <revision>
      <id>4666</id>
      <timestamp>2011-07-01T20:26:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;See [[enwiki:Template:sidebar|Wikipedia documentation]]&quot;</comment>
      <text xml:space="preserve" bytes="55">See [[enwiki:Template:sidebar|Wikipedia documentation]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:small</title>
    <ns>10</ns>
    <id>224</id>
    <revision>
      <id>4641</id>
      <parentid>4046</parentid>
      <timestamp>2011-07-01T19:31:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add documentation</comment>
      <text xml:space="preserve" bytes="178">&lt;span style=&quot;font-size:0.7em; line-height:130%&quot;&gt;{{{1}}}&lt;/span&gt;&lt;noinclude&gt;
&lt;!--Categories and interwikis go in the /doc sub-page.--&gt;
{{documentation|Template:tt/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:smalltt</title>
    <ns>10</ns>
    <id>225</id>
    <revision>
      <id>39822</id>
      <parentid>4643</parentid>
      <timestamp>2012-09-28T17:44:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>tt -&gt; code</comment>
      <text xml:space="preserve" bytes="89">{{small|&lt;code&gt;{{{1|}}}&lt;/code&gt;}}&lt;noinclude&gt;
{{documentation|Template:tt/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:source</title>
    <ns>10</ns>
    <id>226</id>
    <revision>
      <id>25273</id>
      <parentid>9742</parentid>
      <timestamp>2012-04-20T13:49:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use getlang for the language</comment>
      <text xml:space="preserve" bytes="108">&lt;onlyinclude&gt;{{#tag:source|{{{code|{{{1}}}}}}|lang={{{lang|{{get lang}}}}}}}&lt;/onlyinclude&gt;
{{documentation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:source/doc</title>
    <ns>10</ns>
    <id>227</id>
    <revision>
      <id>73113</id>
      <parentid>61674</parentid>
      <timestamp>2014-10-15T00:01:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2055">This is one of the templates used for syntax highlighting.

{{tl|c | 1{{=}}''code'' | lang{{=}}''language''{{mark optional}} }}
: Base template that is intended to highlight code inline. ''lang'' is optional; value returned by {{tl|get_lang}} is used by default. Applies a semi-transparent dark background.

{{tl|c/core | 1{{=}}''code'' | lang{{=}}''language''{{mark optional}} }}
: Same as {{tl|c}} just no background is applied. Intended to be used in other templates only.

{{tl|cc | 1{{=}}''code'' | lang{{=}}''language''{{mark optional}} }}
: Base template that is intended to highlight larger amounts of code inline. Usually used when the {{tl|c}} template doesn't display the code readable, but {{tl|source}} would waste too much space. ''lang'' is optional; value returned by {{tl|get_lang}} is used by default.

{{tl|source | 1{{=}}''code'' | lang{{=}}''language''{{mark optional}} }}
: Base template that is intended to highlight large amounts of code. ''lang'' is optional; value returned by {{tl|get_lang}} is used by default.

{{tl|eq fun| lang{{=}}''language''|''code1''|''code2''{{mark optional}}|...|''code4''{{mark optional}}}} - where {{tt|code1}}, {{tt|code2}}, etc. are code for each version of the described template function. If no code is supplied at all, the template results in {{tl|todo}}. ''lang'' is optional; value returned by {{tl|get_lang}} is used by default.

{{tl|example|''description''{{mark optional}}|lang{{=}}''language''{{mark optional}} | code{{=}}''code_to_display''| p{{=}}''true_if_nondeterministic''{{mark optional}} | std{{=}}''language standard''}}
: Base template for examples. If {{tt|code}} is not present, the template results in {{tl|todo}}. ''lang'' defaults to a value returned by {{tl|get_lang}}. ''output'' specifies the output which is displayed by the code. If the output is not deterministic, ''p'' can be set to {{tt|true}} to indicate this (''Possible output'' is shown instead of just ''Output'').

: The following language standards are available:
:: cxx98, cxx03, cxx11, cxx14, c89, c99, c11</text>
      <sha1>io4sckcu4h0z7uw1v3642lh8moch3f5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:space</title>
    <ns>10</ns>
    <id>229</id>
    <revision>
      <id>4671</id>
      <parentid>4044</parentid>
      <timestamp>2011-07-01T20:52:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add doc link</comment>
      <text xml:space="preserve" bytes="80">{{#pad:|{{{1}}}}}&lt;noinclude&gt;
{{documentation | Template:space/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:space as</title>
    <ns>10</ns>
    <id>230</id>
    <revision>
      <id>4672</id>
      <parentid>4095</parentid>
      <timestamp>2011-07-01T20:52:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add doc link</comment>
      <text xml:space="preserve" bytes="90">{{space|{{#len:{{{1|}}}}}}}&lt;noinclude&gt;
{{documentation | Template:space/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:space/doc</title>
    <ns>10</ns>
    <id>2137</id>
    <revision>
      <id>4689</id>
      <parentid>4675</parentid>
      <timestamp>2011-07-01T21:29:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>add trim</comment>
      <text xml:space="preserve" bytes="300">Handles space characters.

{{tl|space|''number''}} - outputs ''number'' of space characters

{{tl|space as|''text''}} - outputs as many space characters as there are characters in ''text''. Useful for indentation of templatized code.

{{tl|trim|''text''}} - trims both leading and trailing whitespace</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:spar</title>
    <ns>10</ns>
    <id>231</id>
    <revision>
      <id>61680</id>
      <parentid>48737</parentid>
      <timestamp>2013-06-08T05:25:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Update css class names, use new templates</comment>
      <text xml:space="preserve" bytes="86">&lt;span class=&quot;t-spar&quot;&gt;{{trim|{{{1}}}}}&lt;/span&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:spar/doc</title>
    <ns>10</ns>
    <id>4263</id>
    <revision>
      <id>85605</id>
      <parentid>48736</parentid>
      <timestamp>2016-04-26T17:47:24Z</timestamp>
      <contributor>
        <ip>114.222.140.216</ip>
      </contributor>
      <text xml:space="preserve" bytes="60">
Used to mark-up identifiers referring to syntax constructs.</text>
      <sha1>stme4e0m6e52jms04cfy2xn6tj7hay5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:stub</title>
    <ns>10</ns>
    <id>9031</id>
    <revision>
      <id>37946</id>
      <timestamp>2012-07-21T20:50:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="33">{{todo}}[[Category:Stub article]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:su</title>
    <ns>10</ns>
    <id>2904</id>
    <revision>
      <id>17976</id>
      <parentid>13558</parentid>
      <timestamp>2012-01-19T23:34:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>shorter css class name (we ship at least 1.5MB just for that word)</comment>
      <text xml:space="preserve" bytes="153">&lt;span class=&quot;t-su {{#if:{{{b|}}}|t-su-b}}&quot; &gt;&lt;!--
  --&gt;{{{p|}}}&lt;br /&gt;&lt;!--
  --&gt;{{{b|}}}&lt;/span&gt;&lt;noinclude&gt;
{{documentation|Template:math/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:template</title>
    <ns>10</ns>
    <id>10286</id>
    <redirect title="Template:include" />
    <revision>
      <id>48783</id>
      <timestamp>2013-06-01T00:08:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:template]] to [[Template:include]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Template:include]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:template editlink</title>
    <ns>10</ns>
    <id>10287</id>
    <redirect title="Template:include editlink" />
    <revision>
      <id>48785</id>
      <timestamp>2013-06-01T00:08:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:template editlink]] to [[Template:include editlink]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Template:include editlink]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:template other</title>
    <ns>10</ns>
    <id>243</id>
    <revision>
      <id>20013</id>
      <parentid>485</parentid>
      <timestamp>2012-03-19T18:29:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="416">{{#switch:
  &lt;!--If no or empty &quot;demospace&quot; parameter then detect namespace--&gt;
  {{#if:{{{demospace|}}}
  | {{lc: {{{demospace}}} }}    &lt;!--Use lower case &quot;demospace&quot;--&gt;
  | {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
    | template
    | other
    }}
  }}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}&lt;!--End switch--&gt;&lt;noinclude&gt;
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:templated</title>
    <ns>10</ns>
    <id>10288</id>
    <redirect title="Template:included" />
    <revision>
      <id>48802</id>
      <timestamp>2013-06-01T00:17:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[Template:templated]] to [[Template:included]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[Template:included]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:test live example</title>
    <ns>10</ns>
    <id>9915</id>
    <revision>
      <id>46846</id>
      <parentid>46845</parentid>
      <timestamp>2013-04-14T12:53:31Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>test</comment>
      <text xml:space="preserve" bytes="556">{{#if:{{{code|}}}
|&lt;div class=&quot;t-example&quot;&gt;{{example editlink|dummy}}&lt;!--
--&gt;{{#if:{{{1|}}}| &lt;p&gt;{{{1|}}}&lt;/p&gt;

}}&lt;div class=&quot;t-example-live-link&quot;&gt;{{livecodelink | 1={{{code}}} | compiler={{#ifeq: {{#pos:{{PAGENAME}}|c/|0}} | 0 | clangc | clangpp}} | text=run this code}}&lt;/div&gt;
{{source | 1={{{code|}}} | lang={{{lang|{{get lang}}}}}}}

{{#if:{{{output|}}} | {{#ifeq: {{{p|}}} | true | Possible output: | Output:}}

{{source | lang=text | 1={{{output}}}}}
}} 
&lt;/div&gt; | {{todo|reason=no example}}}}&lt;noinclude&gt;
{{documentation|Template:source/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:test rev box</title>
    <ns>10</ns>
    <id>9869</id>
    <revision>
      <id>46336</id>
      <parentid>46335</parentid>
      <timestamp>2013-02-27T01:11:42Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>test</comment>
      <text xml:space="preserve" bytes="219">{{#switch: {{{2|}}}
|untilc++11=
&lt;span class=&quot;rev-until-cpp11&quot;&gt;{{{1|}}}&lt;/span&gt;
|sincec++11=
&lt;span class=&quot;rev-since-cpp11&quot;&gt;{{{1|}}}&lt;/span&gt;
|#default=
Invalid version: {{{2|}}}
}}&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:test rev list begin</title>
    <ns>10</ns>
    <id>9861</id>
    <revision>
      <id>61433</id>
      <parentid>46402</parentid>
      <timestamp>2013-06-06T00:22:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="75">&lt;includeonly&gt; {| class=&quot;t2-rev-list&quot; &lt;/includeonly&gt;&lt;noinclude&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:test rev list end</title>
    <ns>10</ns>
    <id>9860</id>
    <revision>
      <id>61434</id>
      <parentid>46260</parentid>
      <timestamp>2013-06-06T00:22:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="26">|}&lt;noinclude&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:test rev list item</title>
    <ns>10</ns>
    <id>9859</id>
    <revision>
      <id>61435</id>
      <parentid>46401</parentid>
      <timestamp>2013-06-06T00:22:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>-doc</comment>
      <text xml:space="preserve" bytes="82">|- class=&quot;t2-rev-list-item&quot;
| {{{1|}}}
| {{{2|}}}
|-
&lt;noinclude&gt;
-doc
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:title</title>
    <ns>10</ns>
    <id>246</id>
    <revision>
      <id>4031</id>
      <parentid>491</parentid>
      <timestamp>2011-06-11T14:16:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Template:title]]&quot;: High traffic page ([edit=sysop] (indefinite) [move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="78">&lt;onlyinclude&gt;{{DISPLAYTITLE:{{{1|}}}}}&lt;!--
--&gt;&lt;/onlyinclude&gt;
{{documentation}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:title/doc</title>
    <ns>10</ns>
    <id>247</id>
    <revision>
      <id>17901</id>
      <parentid>493</parentid>
      <timestamp>2012-01-19T20:24:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update doc</comment>
      <text xml:space="preserve" bytes="1032">Sets the title of the page. The title can include the following formatting elements: 
{{tt|&lt;nowiki&gt;&lt;small&gt;&lt;/nowiki&gt;}}, 
{{tt|&lt;nowiki&gt;&lt;big&gt;&lt;/nowiki&gt;}}, 
{{tt|&lt;nowiki&gt;&lt;abbr&gt;&lt;/nowiki&gt;}}, 
{{tt|&lt;nowiki&gt;&lt;b&gt;&lt;/nowiki&gt;}}, 
{{tt|&lt;nowiki&gt;&lt;center&gt;&lt;/nowiki&gt;}}, 
{{tt|&lt;nowiki&gt;&lt;code&gt;&lt;/nowiki&gt;}}, 
{{tt|&lt;nowiki&gt;&lt;del&gt;&lt;/nowiki&gt;}}, 
{{tt|&lt;nowiki&gt;&lt;em&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;font&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;i&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;ins&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;s&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;strong&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;strike&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;s&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;span&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;sub&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;sup&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;u&gt;&lt;/nowiki&gt;}},
{{tt|&lt;nowiki&gt;&lt;tt&gt;&lt;/nowiki&gt;}}

{{tl | title | ''custom title''}} - general utility to set page title

{{tl | ctitle | n{{=}}''namespace'' | ''object1'' | ''object2'' ... }} - sets page title of a page that describes a library component.

If ''object1'' contains phrase {{tt|#MAGICTITLESTRING#}}, title is not altered, {{tt|n}} is returned instead.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tl</title>
    <ns>10</ns>
    <id>248</id>
    <revision>
      <id>11588</id>
      <parentid>4032</parentid>
      <timestamp>2011-10-11T19:52:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>rm excessive spacing</comment>
      <text xml:space="preserve" bytes="468">&amp;#123;&amp;#123;[[Template:{{{1}}}|{{#if:{{{1|}}}|{{{1}}}| tl&amp;#124;...}}]]&lt;!--
--&gt;{{#if:{{{2|}}}| &amp;#124;{{{2}}} | }}&lt;!--
--&gt;{{#if:{{{3|}}}| &amp;#124;{{{3}}} | }}&lt;!--
--&gt;{{#if:{{{4|}}}| &amp;#124;{{{4}}} | }}&lt;!--
--&gt;{{#if:{{{5|}}}| &amp;#124;{{{5}}} | }}&lt;!--
--&gt;{{#if:{{{6|}}}| &amp;#124;{{{6}}} | }}&lt;!--
--&gt;{{#if:{{{7|}}}| &amp;#124;{{{7}}} | }}&lt;!--
--&gt;{{#if:{{{8|}}}| &amp;#124;{{{8}}} | }}&lt;!--
--&gt;{{#if:{{{9|}}}| &amp;#124;{{{9}}} | }}&lt;!--
--&gt;&amp;#125;&amp;#125;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tl/doc</title>
    <ns>10</ns>
    <id>3408</id>
    <revision>
      <id>84969</id>
      <parentid>15466</parentid>
      <timestamp>2016-03-22T21:50:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>that documentation doesn't make sense</comment>
      <text xml:space="preserve" bytes="419">This is one of the templates used to refer to templates without inlining them.

{{tl|tl|''template''|''param1''|''param2''|...}} - equivalent to {{tl|''template''|''param1''|''param2''|...}}

{{tl|tlc|''template''|''param1''|''param2''|...}} - equivalent to {{tlc|''template''|''param1''|''param2''|...}} 

{{tl|tlf|''template''|''param1''|''param2''|...}} - equivalent to {{tlf|''template''|''param1''|''param2''|...}}</text>
      <sha1>jpimgw562fakace7f18ky3dxu97j3ds</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tlc</title>
    <ns>10</ns>
    <id>249</id>
    <revision>
      <id>12841</id>
      <parentid>4029</parentid>
      <timestamp>2011-11-01T21:19:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>doc link</comment>
      <text xml:space="preserve" bytes="614">&lt;span style=&quot;white-space:nowrap;&quot;&gt;&lt;code&gt;&amp;#123;&amp;#123;{{#if:{{{1|}}}|{{{1}}}| tlc&amp;#124;...}}&lt;!--
--&gt;{{#ifeq:{{{2|x}}}|{{{2|}}}| &amp;#124;{{{2}}} | }}&lt;!--
--&gt;{{#ifeq:{{{3|x}}}|{{{3|}}}| &amp;#124;{{{3}}} | }}&lt;!--
--&gt;{{#ifeq:{{{4|x}}}|{{{4|}}}| &amp;#124;{{{4}}} | }}&lt;!--
--&gt;{{#ifeq:{{{5|x}}}|{{{5|}}}| &amp;#124;{{{5}}} | }}&lt;!--
--&gt;{{#ifeq:{{{6|x}}}|{{{6|}}}| &amp;#124;{{{6}}} | }}&lt;!--
--&gt;{{#ifeq:{{{7|x}}}|{{{7|}}}| &amp;#124;{{{7}}} | }}&lt;!--
--&gt;{{#ifeq:{{{8|x}}}|{{{8|}}}| &amp;#124;{{{8}}} | }}&lt;!--
--&gt;{{#ifeq:{{{9|x}}}|{{{9|}}}| &amp;#124;{{{9}}} | }}&lt;!--
--&gt;&amp;#125;&amp;#125;&lt;/code&gt;&lt;/span&gt;&lt;noinclude&gt;
{{documentation|Template:tl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tlf</title>
    <ns>10</ns>
    <id>3070</id>
    <revision>
      <id>11593</id>
      <parentid>11592</parentid>
      <timestamp>2011-10-11T20:05:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>this should've result in no link</comment>
      <text xml:space="preserve" bytes="548">&amp;#123;&amp;#123;{{#if:{{{1|}}}
| {{{1}}} | tlf&amp;#124;... }}&lt;!--
--&gt;{{#ifeq:{{{2|x}}}|{{{2|}}}| &amp;#124;{{{2}}} }}&lt;!--
--&gt;{{#ifeq:{{{3|x}}}|{{{3|}}}| &amp;#124;{{{3}}} }}&lt;!--
--&gt;{{#ifeq:{{{4|x}}}|{{{4|}}}| &amp;#124;{{{4}}} }}&lt;!--
--&gt;{{#ifeq:{{{5|x}}}|{{{5|}}}| &amp;#124;{{{5}}} }}&lt;!--
--&gt;{{#ifeq:{{{6|x}}}|{{{6|}}}| &amp;#124;{{{6}}} }}&lt;!--
--&gt;{{#ifeq:{{{7|x}}}|{{{7|}}}| &amp;#124;{{{7}}} }}&lt;!--
--&gt;{{#ifeq:{{{8|x}}}|{{{8|}}}| &amp;#124;{{{8}}} }}&lt;!--
--&gt;{{#ifeq:{{{9|x}}}|{{{9|}}}| &amp;#124;{{{9}}} }}&lt;!--
--&gt;&amp;#125;&amp;#125;&lt;noinclude&gt;
{{documentation|Template:tl/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:todo</title>
    <ns>10</ns>
    <id>250</id>
    <revision>
      <id>30655</id>
      <parentid>30629</parentid>
      <timestamp>2012-05-07T17:53:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="448">{{ambox
| type  = notice
| small = {{{small|left}}}
| text  = This section is incomplete{{#if:{{{reason|{{{1|}}}}}}|&lt;br&gt;Reason: {{{reason|{{{1}}}}}}}}
| image = none
}}&lt;includeonly&gt;{{#switch:{{{reason|{{{1|}}}}}}
|=[[Category:Todo without reason]]
|no example=[[Category:Todo no example]]
|[[Category:Todo with reason]]
}}&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation}}
&lt;!-- Add categories and interwikis to the /doc subpage, not here! --&gt;
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:todo/doc</title>
    <ns>10</ns>
    <id>5498</id>
    <revision>
      <id>20012</id>
      <timestamp>2012-03-19T18:29:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc</comment>
      <text xml:space="preserve" bytes="74">Housekeeping template to keep track of known incomplete parts of the wiki.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tr</title>
    <ns>10</ns>
    <id>9555</id>
    <revision>
      <id>41458</id>
      <parentid>41395</parentid>
      <timestamp>2012-10-27T16:17:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use div due to mediawiki bug</comment>
      <text xml:space="preserve" bytes="630">&lt;div class=&quot;t-tr-text&quot;&gt;{{{1}}}&lt;div class=&quot;t-tr-dropdown&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;!--
--&gt;&lt;div class=&quot;t-tr-dropdown-arrow-border&quot;&gt;&lt;/div&gt;&lt;!--
--&gt;&lt;div class=&quot;t-tr-dropdown-arrow&quot;&gt;&lt;/div&gt;&lt;!--
--&gt;&lt;div class=&quot;t-tr-dropdown-h&quot;&gt;Original:&lt;/div&gt;&lt;!--
--&gt;&lt;div class=&quot;t-tr-dropdown-orig&quot;&gt;{{{2}}}&lt;/div&gt;&lt;!--
--&gt;&lt;div class=&quot;t-tr-dropdown-notes&quot;&gt;The text has been machine-translated via [http://translate.google.com Google Translate].&lt;br/&gt; You can help to correct and verify the translation. Click [http://en.cppreference.com/w/Cppreference:MachineTranslations here] for instructions.&lt;/div&gt;&lt;!--
--&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tr note</title>
    <ns>10</ns>
    <id>9557</id>
    <revision>
      <id>41426</id>
      <parentid>41396</parentid>
      <timestamp>2012-10-24T14:54:55Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>grammar</comment>
      <text xml:space="preserve" bytes="456">{{fmbox
 | style=font-size:0.9em; line-height: 1em
 |text=
&lt;p&gt;This page has been machine-translated from the English version of the wiki using [http://translate.google.com Google Translate].
&lt;/p&gt;&lt;p&gt;
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click [http://en.cppreference.com/w/Cppreference:MachineTranslations here].
&lt;/p&gt;
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tr/doc</title>
    <ns>10</ns>
    <id>9556</id>
    <revision>
      <id>63839</id>
      <parentid>61667</parentid>
      <timestamp>2013-07-29T14:56:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>clarify intent</comment>
      <text xml:space="preserve" bytes="778">{{tl|tr_note}}

Shows a note that the page is not completely translated. Disables search engine (such as Google) indexing of the page.

{{tl|tr|translated text | original text}}

Used for formatting automatically translated text in translations. On hover, a box containing the original text is shown.

{{tl|trd|''yyyy-mm-dd''}}

Tracks the date of the last synchronization of the translation with the English version. ''yyyy-mm-dd'' is the date of the last synchronization in the ISO-8601 format

The template outputs an invisible tag that can later be used by a bot (which is yet to be written) to find translations that need updates.

The template should be included at the end of the page. This template should not generally be included into ''dsc'' or other short templates.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:trd</title>
    <ns>10</ns>
    <id>12773</id>
    <revision>
      <id>61666</id>
      <parentid>61662</parentid>
      <timestamp>2013-06-08T04:28:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>just use the ISO format</comment>
      <text xml:space="preserve" bytes="149">&lt;onlyinclude&gt;&lt;span style=&quot;display:none;&quot; class=&quot;t-trd t-trd-{{{1|}}}&quot;&gt;&lt;/span&gt;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation|Template:tr/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:trim</title>
    <ns>10</ns>
    <id>251</id>
    <revision>
      <id>4688</id>
      <parentid>4027</parentid>
      <timestamp>2011-07-01T21:28:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>correct doc page</comment>
      <text xml:space="preserve" bytes="124">&lt;includeonly&gt;{{ {{{|safesubst:}}}#if:1|{{{1|}}}}}&lt;/includeonly&gt;&lt;noinclude&gt;
{{documentation|Template:space/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tt</title>
    <ns>10</ns>
    <id>252</id>
    <revision>
      <id>39819</id>
      <parentid>4025</parentid>
      <timestamp>2012-09-28T17:42:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>tt -&gt; code</comment>
      <text xml:space="preserve" bytes="61">&lt;code&gt;{{{1|}}}&lt;/code&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:tt/doc</title>
    <ns>10</ns>
    <id>2129</id>
    <revision>
      <id>39823</id>
      <parentid>39821</parentid>
      <timestamp>2012-09-28T17:44:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="355">Adds formatting to the enclosed text

{{tl|tt|''text''}} - monospace font ({{tt|&amp;lt;code&gt;}} html attribute)

{{tl|ttb|''text''}} - bold monospace font ({{tt|&amp;lt;code&gt;&amp;lt;b&gt;}} html attributes)

{{tl|small|''text''}} - small font ({{tt|&amp;lt;small&gt;}} html attribute)

{{tl|smalltt|''text''}} - small monospace font ({{tt|&amp;lt;small&gt;&amp;lt;code&gt;}} html attributes)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:ttb</title>
    <ns>10</ns>
    <id>253</id>
    <revision>
      <id>39820</id>
      <parentid>4630</parentid>
      <timestamp>2012-09-28T17:43:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>tt -&gt; code</comment>
      <text xml:space="preserve" bytes="83">&lt;code&gt;&lt;b&gt;{{{1}}}&lt;/b&gt;&lt;/code&gt;&lt;noinclude&gt;{{documentation|Template:tt/doc}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:unreviewed noexcept</title>
    <ns>10</ns>
    <id>16227</id>
    <revision>
      <id>91407</id>
      <parentid>91316</parentid>
      <timestamp>2017-03-31T19:42:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>two more tracking categories</comment>
      <text xml:space="preserve" bytes="1091">{{#if:{{{1|}}}
|&lt;div class=&quot;t-noexcept-full&quot;&gt;{{ltt|cpp/language/noexcept_spec|noexcept}} specification:&amp;nbsp;&amp;nbsp;{{{notes|}}}
&lt;div class=&quot;t-noexcept-box&quot;&gt;{{cc|noexcept({{{1}}})}}&lt;/div&gt;&lt;/div&gt;&lt;includeonly&gt;[[Category:conditionally noexcept]][[Category:Pages with unreviewed conditional noexcept template]]&lt;/includeonly&gt;
|&lt;div class=&quot;t-noexcept-inline&quot;&gt;{{ltt|cpp/language/noexcept_spec|noexcept}} specification:&amp;nbsp;&amp;nbsp;&lt;div class=&quot;t-noexcept-box&quot;&gt;{{cc|noexcept}}&lt;/div&gt;&amp;nbsp;&amp;nbsp;{{{notes|}}}&lt;/div&gt;&lt;includeonly&gt;[[Category:unconditionally noexcept]][[Category:Pages with unreviewed unconditional noexcept template]]&lt;/includeonly&gt;
}}&lt;includeonly&gt;[[Category:Pages with unreviewed noexcept template]]&lt;/includeonly&gt;&lt;noinclude&gt;{{documentation|content=
This is a clone of {{tl|noexcept}} that also puts the page it is on in [[:Category:Pages with unreviewed noexcept template]]. It also further categorizes these pages into [[:Category:Pages with unreviewed conditional noexcept template]] and [[:Category:Pages with unreviewed unconditional noexcept template]], depending on usage.}}&lt;/noinclude&gt;</text>
      <sha1>5w4wisbl57p9981wfdrotmuwd6yiuxe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:unsigned</title>
    <ns>10</ns>
    <id>14483</id>
    <revision>
      <id>81344</id>
      <timestamp>2015-10-23T06:19:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Adapt from https://en.wikipedia.org/w/index.php?title=Template:Unsigned&amp;oldid=645069201</comment>
      <text xml:space="preserve" bytes="227">&lt;small&gt;&lt;span class=&quot;autosigned&quot;&gt;—&amp;nbsp;Preceding unsigned comment added by [[User:{{{1}}}|{{{1}}}]] ([[User talk:{{{1}}}|talk]] • [[Special:Contributions/{{{1}}}|contribs]]) {{{2|}}}&lt;/span&gt;&lt;/small&gt;&lt;!-- Template:Unsigned --&gt;</text>
      <sha1>ns46mndpccbrxgtcdhzpxn3wpov9zdo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:v</title>
    <ns>10</ns>
    <id>12928</id>
    <revision>
      <id>65002</id>
      <timestamp>2013-08-28T22:59:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="104">&lt;onlyinclude&gt;&lt;span class=&quot;t-v&quot;&gt;({{{1|}}})&lt;/span&gt;&lt;/onlyinclude&gt;&lt;noinclude&gt;
{{documentation}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:v/doc</title>
    <ns>10</ns>
    <id>12929</id>
    <revision>
      <id>65004</id>
      <parentid>65003</parentid>
      <timestamp>2013-08-28T23:01:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="241">{{tl|v|''number''}} or {{tl|v|''number'',''number''}} or {{tl|v|''number''-''number''}}

Used to refer to the items in numbered lists, e.g. to specific overload, etc. This is required in order to JavaScript-based standard-versioning to work.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:vertical</title>
    <ns>10</ns>
    <id>8709</id>
    <revision>
      <id>36774</id>
      <parentid>36773</parentid>
      <timestamp>2012-07-01T23:22:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="89">&lt;div class=&quot;t-vertical&quot;&gt;&lt;div&gt;{{{1|}}}&lt;/div&gt;&lt;/div&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:vertical/doc</title>
    <ns>10</ns>
    <id>12606</id>
    <revision>
      <id>61291</id>
      <timestamp>2013-06-05T14:21:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="94">{{tl|vertical|''text''}}

Rotates the ''text'' to be read top to bottom instead left to right.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:yes</title>
    <ns>10</ns>
    <id>254</id>
    <revision>
      <id>10952</id>
      <parentid>4028</parentid>
      <timestamp>2011-09-24T10:37:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+doc link</comment>
      <text xml:space="preserve" bytes="251">&lt;noinclude&gt;{| class=&quot;wikitable&quot;
|-
|&lt;/noinclude&gt;style=&quot;background: #90ff90; color: black; vertical-align: middle; text-align: {{{align|center}}}; {{{style|}}}&quot; class=&quot;table-yes&quot;|{{{1|Yes}}}&lt;noinclude&gt;
|}
{{documentation|Template:yes/doc}}
&lt;/noinclude&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:yes/doc</title>
    <ns>10</ns>
    <id>2915</id>
    <revision>
      <id>45552</id>
      <parentid>10954</parentid>
      <timestamp>2013-01-02T22:53:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>improve doc</comment>
      <text xml:space="preserve" bytes="615">This is one of the templates used to provide consistent formatting for frequently used messages in table cells.

{|  class=&quot;wikitable&quot;
|-
! Template
! Result
|-
| {{tl|yes|''message''|align{{=}}''alignment''{{mark optional}}|style{{=}}''custom_style''{{mark optional}}}}
| {{yes}}
|-
| {{tl|no|''message''|align{{=}}''alignment''{{mark optional}}|style{{=}}''custom_style''{{mark optional}}}}
| {{no}}
|-
| {{tl|n/a|''message''|align{{=}}''alignment''{{mark optional}}|style{{=}}''custom_style''{{mark optional}}}}
| {{n/a}}
|}

{{tt|message}} overrides the default text which is &quot;Yes&quot;, &quot;No&quot; and &quot;N/A&quot; respectively.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c</title>
    <ns>0</ns>
    <id>5742</id>
    <revision>
      <id>83215</id>
      <parentid>79002</parentid>
      <timestamp>2016-01-25T08:30:10Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>cpp/language/escape =&gt; c/language/escape</comment>
      <text xml:space="preserve" bytes="1649">{{title|1=C reference}}
{{c/navbar}}
{| cellpadding=&quot;5&quot; style=&quot;font-size: 120%;&quot; 
|- valign=&quot;top&quot;
| 

'''[[Cppreference:FAQ|FAQ]]'''

'''[[c/language | Language]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/preprocessor | Preprocessor]]&lt;br&gt;
[[c/keyword | Keywords]]&lt;br&gt;
[[c/language/operator_precedence | Operator precedence]]&lt;br&gt;
[[c/language/escape | Escape sequences]]&lt;br&gt;
[[c/language/ascii | ASCII chart]]
&lt;/div&gt;

'''[[c/header | Headers]]'''

'''[[c/types | Type support]]'''

'''[[c/memory | Dynamic memory&lt;br/&gt; management]]'''

|

'''[[c/error | Error handling]]'''

'''[[c/program | Program utilities]]'''

'''[[c/variadic | Variadic functions]]'''

'''[[c/chrono | Date and time utilities]]'''

'''[[c/string | Strings library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/string/byte | Null-terminated byte strings]]&lt;br&gt;
[[c/string/multibyte | Null-terminated multibyte strings]]&lt;br&gt;
[[c/string/wide | Null-terminated wide strings]]
&lt;/div&gt;

'''[[c/algorithm | Algorithms]]'''

'''[[c/io | Input/output support]]'''

|

'''[[c/numeric | Numerics]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/numeric/math | Mathematical functions]]&lt;br&gt;
[[c/numeric/fenv | Floating-point environment]]&lt;br&gt;
[[c/numeric/random | Pseudo-random number generation]]&lt;br&gt;
[[c/numeric/complex| Complex number arithmetic]]&lt;br/&gt;
[[c/numeric/tgmath | Type-generic math]]
&lt;/div&gt;

'''[[c/locale | Localization support]]'''

'''[[c/atomic | Atomic operations library]]''' {{mark since c11}}

'''[[c/thread | Thread support library]]''' {{mark since c11}}

'''[[c/experimental | Technical Specifications]]'''
|}

[[cs:c]]
[[de:c]]
[[es:c]]
[[fr:c]]
[[it:c]]
[[ja:c]]
[[ko:c]]
[[pt:c]]
[[ru:c]]
[[zh:c]]</text>
      <sha1>c5l8qndy9q5eqdv9d8ewqbov0ikkovq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/algorithm</title>
    <ns>0</ns>
    <id>5966</id>
    <revision>
      <id>78962</id>
      <parentid>76394</parentid>
      <timestamp>2015-06-13T11:27:18Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="913">{{title|Algorithms}}
{{c/algorithm/navbar}}

{{dsc begin}}
{{dsc header | stdlib.h}}
{{dsc inc | c/algorithm/dsc qsort}}
{{dsc inc | c/algorithm/dsc bsearch}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.22.5  | title= Searching and sorting utilities | p=354-356}}
{{ref std | section=K.3.6.3 | title= Searching and sorting utilities | p=607-609}}
{{ref std c99}}
{{ref std | section=7.20.5  | title= Searching and sorting utilities | p=318-319}}
{{ref std c89}}
{{ref std | section=4.10.5  | title=Searching and sorting utilities}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/algorithm |Algorithms library}}
{{dsc end}}

[[ar:c/algorithm]]
[[cs:c/algorithm]]
[[de:c/algorithm]]
[[es:c/algorithm]]
[[fr:c/algorithm]]
[[it:c/algorithm]]
[[ja:c/algorithm]]
[[ko:c/algorithm]]
[[pl:c/algorithm]]
[[pt:c/algorithm]]
[[ru:c/algorithm]]
[[tr:c/algorithm]]
[[zh:c/algorithm]]</text>
      <sha1>sj4xjqpxlz5jjcmpj3ges8ot8690lel</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/algorithm/bsearch</title>
    <ns>0</ns>
    <id>6121</id>
    <revision>
      <id>83396</id>
      <parentid>83395</parentid>
      <timestamp>2016-02-05T19:30:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="5034">{{c/title|bsearch|bsearch_s}}
{{c/algorithm/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl | num=1 |
void* bsearch( const void *key, const void *ptr, size_t count, size_t size,
               int (*comp)(const void*, const void*) );
}}
{{dcl | num=2 | since=c11 |
void* bsearch_s( const void *key, const void *ptr, rsize_t count, rsize_t size,
                 int (*comp)(const void *, const void *, void *),
                 void *context );
}}
{{dcl end}}

@1@ Finds an element equal to element pointed to by {{tt|key}} in an array pointed to by {{tt|ptr}}. The array contains {{tt|count}} elements of {{tt|size}} bytes and must be partitioned with respect to {{tt|key}}, that is, all the elements that compare less than must appear before all the elements that compare equal to, and those must appear before all the elements that compare greater than the key object. A fully sorted array satisfies these requirements. The elements are compared using function pointed to by {{tt|comp}}. The behavior is undefined if the array is not already partitioned with respect to {{tt|*key}} in ascending order according to the same criterion that {{tt|comp}} uses.
@2@ Same as {{v|1}}, except that the additional context argument {{tt|context}} is passed to {{tt|comp}} and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|count}} or {{tt|size}} is greater than {{lc|RSIZE_MAX}}
:* {{tt|key}}, {{tt|ptr}} or {{tt|comp}} is a null pointer (unless {{tt|count}} is zero)
:As with all bounds-checked functions, {{tt|bsearch_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|stdlib.h}}.

If the array contains several elements that {{tt|comp}} would indicate as equal to the element searched for, then it is unspecified which element the function will return as the result.

===Parameters===
{{par begin}}
{{par | key | pointer to the element to search for}}
{{par | ptr | pointer to the array to examine}}
{{par | count | number of element in the array}}
{{par | size | size of each element in the array in bytes}}
{{par ccmp | comp | {{tt|key}} is passed as the first argument, an element from the array as the second.}}
{{par | context | additional information (e.g., collating sequence), passed to {{tt|comp}} as the third argument}}
{{par end}}

===Return value===
@1@ Pointer to an element in the array that compares equal to {{c|*key}}, or null pointer if such element has not been found.
@2@ Same as {{v|1}}, except that the null pointer is also returned on runtime constraints violations.

===Notes===
Despite the name, neither C nor POSIX standards require this function to be implemented using binary search or make any complexity guarantees.

Unlike other bounds-checked functions, {{tt|bsearch_s}} does not treat arrays of zero size as a runtime constraint violation and instead indicates element not found (the other function that accepts arrays of zero size is {{lc|qsort_s}}).

Until {{tt|bsearch_s}}, users of {{tt|bsearch}} often used global variables to pass additional context to the comparison function.

===Example===
{{example
 |
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

struct data {
    int nr;
    char const *value;
} dat[] = {
    {1, &quot;Foo&quot;}, {2, &quot;Bar&quot;}, {3, &quot;Hello&quot;}, {4, &quot;World&quot;}
};

int data_cmp(void const *lhs, void const *rhs) 
{
    struct data const *const l = lhs;
    struct data const *const r = rhs;

    if (l-&gt;nr &lt; r-&gt;nr) return -1;
    else if (l-&gt;nr &gt; r-&gt;nr) return 1;
    else return 0;
 
    // return (l-&gt;nr &gt; r-&gt;nr) - (l-&gt;nr &lt; r-&gt;nr); // possible shortcut
    // return l-&gt;nr - r-&gt;nr; // erroneous shortcut (fails if INT_MIN is present)
}

int main(void) 
{
    struct data key = { .nr = 3 };
    struct data const *res = bsearch(&amp;key, dat, sizeof dat / sizeof dat[0],
                                     sizeof dat[0], data_cmp);
    if (res) {
        printf(&quot;No %d: %s\n&quot;, res-&gt;nr, res-&gt;value);
    } else {
        printf(&quot;No %d not found\n&quot;, key.nr);
    }
}
 | output=
No 3: Hello
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.5.1  | title=The bsearch function | p=355}}
{{ref std | section=K.3.6.3.1 | title=The bsearch_s function | p=608-609}}
{{ref std c99}}
{{ref std | section=7.20.5.1 | title=The bsearch function | p=318-319}}
{{ref std c89}}
{{ref std | section=4.10.5.1 | title=The bsearch function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/algorithm/dsc qsort}}
{{dsc see cpp | cpp/algorithm/bsearch}}
{{dsc end}}

[[ar:c/algorithm/bsearch]]
[[cs:c/algorithm/bsearch]]
[[de:c/algorithm/bsearch]]
[[es:c/algorithm/bsearch]]
[[fr:c/algorithm/bsearch]]
[[it:c/algorithm/bsearch]]
[[ja:c/algorithm/bsearch]]
[[ko:c/algorithm/bsearch]]
[[pl:c/algorithm/bsearch]]
[[pt:c/algorithm/bsearch]]
[[ru:c/algorithm/bsearch]]
[[tr:c/algorithm/bsearch]]
[[zh:c/algorithm/bsearch]]</text>
      <sha1>h8fokgtq7s09g3bcekucsbdmyatty2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/algorithm/qsort</title>
    <ns>0</ns>
    <id>6120</id>
    <revision>
      <id>89167</id>
      <parentid>78117</parentid>
      <timestamp>2017-01-05T21:13:13Z</timestamp>
      <contributor>
        <username>AlexB</username>
        <id>6222</id>
      </contributor>
      <minor/>
      <comment>compar -&gt; comp</comment>
      <text xml:space="preserve" bytes="3940">{{c/title|qsort|qsort_s}}
{{c/algorithm/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl | num =1 |
void qsort( void *ptr, size_t count, size_t size,
            int (*comp)(const void *, const void *) );
}}
{{dcl | num =2 | since=c11 |
errno_t qsort_s( void *ptr, rsize_t count, rsize_t size,
                 int (*comp)(const void *, const void *, void *),
                 void *context );
}}
{{dcl end}}

@1@ Sorts the given array pointed to by {{tt|ptr}} in ascending order. The array contains {{tt|count}} elements of {{tt|size}} bytes. Function pointed to by {{tt|comp}} is used for object comparison. 
@2@ Same as {{v|1}}, except that the additional context parameter {{tt|context}} is passed to {{tt|comp}} and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|count}} or {{tt|size}} is greater than {{lc|RSIZE_MAX}}
:* {{tt|ptr}} or {{tt|comp}} is a null pointer (unless {{tt|count}} is zero)
:As with all bounds-checked functions, {{tt|qsort_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|stdlib.h}}.

If {{tt|comp}} indicates two elements as equivalent, their order in the resulting sorted array is undefined.

===Parameters===
{{par begin}}
{{par | ptr | pointer to the array to sort}}
{{par | count | number of element in the array}}
{{par | size | size of each element in the array in bytes}}
{{par ccmp | comp }}
{{par | context | additional information (e.g., collating sequence), passed to {{tt|comp}} as the third argument}}
{{par end}}

===Return value===
@1@ (none)
@2@ zero on success, non-zero if a runtime constraints violation was detected

===Notes===
Despite the name, neither C nor POSIX standards require this function to be implemented using [[enwiki:Quicksort|quicksort]] or make any complexity or stability guarantees.

Unlike other bounds-checked functions, {{tt|qsort_s}} does not treat arrays of zero size as a runtime constraint violation and instead returns successfully without altering the array (the other function that accepts arrays of zero size is {{lc|bsearch_s}}).

Until {{tt|qsort_s}}, users of {{tt|qsort}} often used global variables to pass additional context to the comparison function.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;limits.h&gt;
 
int compare_ints(const void* a, const void* b)
{
    int arg1 = *(const int*)a;
    int arg2 = *(const int*)b;

    if (arg1 &lt; arg2) return -1;
    if (arg1 &gt; arg2) return 1;
    return 0;

    // return (arg1 &gt; arg2) - (arg1 &lt; arg2); // possible shortcut
    // return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present)
}
 
int main(void)
{
    int ints[] = { -2, 99, 0, -743, 2, INT_MIN, 4 };
    int size = sizeof ints / sizeof *ints;
 
    qsort(ints, size, sizeof(int), compare_ints);
 
    for (int i = 0; i &lt; size; i++) {
        printf(&quot;%d &quot;, ints[i]);
    }

    printf(&quot;\n&quot;);
}
 | output=
-2147483648 -743 -2 0 2 4 99
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.5.2  | title=The qsort function | p=355-356}}
{{ref std | section=K.3.6.3.2 | title=The qsort_s function | p=609}}
{{ref std c99}}
{{ref std | section=7.20.5.2 | title=The qsort function | p=319}}
{{ref std c89}}
{{ref std | section=4.10.5.2 | title=The qsort function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/algorithm/dsc bsearch}}
{{dsc see cpp | cpp/algorithm/qsort}}
{{dsc end}}

[[ar:c/algorithm/qsort]]
[[cs:c/algorithm/qsort]]
[[de:c/algorithm/qsort]]
[[es:c/algorithm/qsort]]
[[fr:c/algorithm/qsort]]
[[it:c/algorithm/qsort]]
[[ja:c/algorithm/qsort]]
[[ko:c/algorithm/qsort]]
[[pl:c/algorithm/qsort]]
[[pt:c/algorithm/qsort]]
[[ru:c/algorithm/qsort]]
[[tr:c/algorithm/qsort]]
[[zh:c/algorithm/qsort]]</text>
      <sha1>ce0f1xd18t07hke82szqqgraga04acy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/align/alignof</title>
    <ns>0</ns>
    <id>13713</id>
    <revision>
      <id>73626</id>
      <parentid>72393</parentid>
      <timestamp>2014-11-07T13:06:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>rm this page</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic</title>
    <ns>0</ns>
    <id>6532</id>
    <revision>
      <id>83361</id>
      <parentid>78968</parentid>
      <timestamp>2016-02-02T23:03:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>address todo</comment>
      <text xml:space="preserve" bytes="4394">{{title|Atomic operations library}}
{{c/atomic/navbar}}

If the macro constant {{tt|__STDC_NO_ATOMICS__}}{{mark c11}} is defined by the compiler, the header {{tt|&lt;stdatomic.h&gt;}}, the keyword {{c|_Atomic}}, and all of the names listed here are not provided.

===Types===
{{dsc begin}}
{{dsc header | stdatomic.h}}
{{dsc inc | c/atomic/dsc memory_order}}
{{dsc inc | c/atomic/dsc atomic_flag}}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc header | stdatomic.h}}
{{dsc inc | c/atomic/dsc ATOMIC_LOCK_FREE_consts}}
{{dsc inc | c/atomic/dsc ATOMIC_FLAG_INIT}}
{{dsc inc | c/atomic/dsc ATOMIC_VAR_INIT}}
{{dsc inc | c/atomic/dsc kill_dependency}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc header | stdatomic.h}}
{{dsc inc | c/atomic/dsc atomic_flag_test_and_set}}
{{dsc inc | c/atomic/dsc atomic_flag_clear}}
{{dsc inc | c/atomic/dsc atomic_init}}
{{dsc inc | c/atomic/dsc atomic_is_lock_free}}
{{dsc inc | c/atomic/dsc atomic_store}}
{{dsc inc | c/atomic/dsc atomic_load}}
{{dsc inc | c/atomic/dsc atomic_exchange}}
{{dsc inc | c/atomic/dsc atomic_compare_exchange}}
{{dsc inc | c/atomic/dsc atomic_fetch_add}}
{{dsc inc | c/atomic/dsc atomic_fetch_sub}}
{{dsc inc | c/atomic/dsc atomic_fetch_or}}
{{dsc inc | c/atomic/dsc atomic_fetch_xor}}
{{dsc inc | c/atomic/dsc atomic_fetch_and}}
{{dsc inc | c/atomic/dsc atomic_thread_fence}}
{{dsc inc | c/atomic/dsc atomic_signal_fence}}
{{dsc end}}

===Types===
The standard library offers convenience typedefs for the [[c/language/atomic|core language atomic types]].
{{dsc begin}}
{{dsc hitem | Typedef name | Full type name }}
{{dsc | {{tt|atomic_bool}} | {{c|_Atomic _Bool}} }}
{{dsc | {{tt|atomic_char}} | {{c|_Atomic char}} }}
{{dsc | {{tt|atomic_schar}} | {{c|_Atomic signed char}} }}
{{dsc | {{tt|atomic_uchar}} | {{c|_Atomic unsigned char}} }}
{{dsc | {{tt|atomic_short}} | {{c|_Atomic short}} }}
{{dsc | {{tt|atomic_ushort}} | {{c|_Atomic unsigned short}} }}
{{dsc | {{tt|atomic_int}} | {{c|_Atomic int}} }}
{{dsc | {{tt|atomic_uint}} | {{c|_Atomic unsigned int}} }}
{{dsc | {{tt|atomic_long}} | {{c|_Atomic long}} }}
{{dsc | {{tt|atomic_ulong}} | {{c|_Atomic unsigned long}} }}
{{dsc | {{tt|atomic_llong}} | {{c|_Atomic long long}} }}
{{dsc | {{tt|atomic_ullong}} | {{c|_Atomic unsigned long long}} }}
{{dsc | {{tt|atomic_char16_t}} | {{c|_Atomic char16_t}} }}
{{dsc | {{tt|atomic_char32_t}} | {{c|_Atomic char32_t}} }}
{{dsc | {{tt|atomic_wchar_t}} | {{c|_Atomic wchar_t}} }}
{{dsc | {{tt|atomic_int_least8_t}} | {{c|_Atomic int_least8_t}} }}
{{dsc | {{tt|atomic_uint_least8_t}} | {{c|_Atomic uint_least8_t}} }}
{{dsc | {{tt|atomic_int_least16_t}} | {{c|_Atomic int_least16_t}} }}
{{dsc | {{tt|atomic_uint_least16_t}} | {{c|_Atomic uint_least16_t}} }}
{{dsc | {{tt|atomic_int_least32_t}} | {{c|_Atomic int_least32_t}} }}
{{dsc | {{tt|atomic_uint_least32_t}} | {{c|_Atomic uint_least32_t}} }}
{{dsc | {{tt|atomic_int_least64_t}} | {{c|_Atomic int_least64_t}} }}
{{dsc | {{tt|atomic_uint_least64_t}} | {{c|_Atomic uint_least64_t}} }}
{{dsc | {{tt|atomic_int_fast8_t}} | {{c|_Atomic int_fast8_t}} }}
{{dsc | {{tt|atomic_uint_fast8_t}} | {{c|_Atomic uint_fast8_t}} }}
{{dsc | {{tt|atomic_int_fast16_t}} | {{c|_Atomic int_fast16_t}} }}
{{dsc | {{tt|atomic_uint_fast16_t}} | {{c|_Atomic uint_fast16_t}} }}
{{dsc | {{tt|atomic_int_fast32_t}} | {{c|_Atomic int_fast32_t}} }}
{{dsc | {{tt|atomic_uint_fast32_t}} | {{c|_Atomic uint_fast32_t}} }}
{{dsc | {{tt|atomic_int_fast64_t}} | {{c|_Atomic int_fast64_t}} }}
{{dsc | {{tt|atomic_uint_fast64_t}} | {{c|_Atomic uint_fast64_t}} }}
{{dsc | {{tt|atomic_intptr_t}} | {{c|_Atomic intptr_t}} }}
{{dsc | {{tt|atomic_uintptr_t}} | {{c|_Atomic uintptr_t}} }}
{{dsc | {{tt|atomic_size_t}} | {{c|_Atomic size_t}} }}
{{dsc | {{tt|atomic_ptrdiff_t}} | {{c|_Atomic ptrdiff_t}} }}
{{dsc | {{tt|atomic_intmax_t}} | {{c|_Atomic intmax_t}} }}
{{dsc | {{tt|atomic_uintmax_t}} | {{c|_Atomic uintmax_t}} }}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.17 | title=Atomics &lt;stdatomic.h&gt; | p=273-286}}
{{ref std | section=7.31.8 | title=Atomics &lt;stdatomic.h&gt; | p=455-456}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/atomic |Atomic operations library}}
{{dsc end}}

[[ar:c/atomic]]
[[cs:c/atomic]]
[[de:c/atomic]]
[[es:c/atomic]]
[[fr:c/atomic]]
[[it:c/atomic]]
[[ja:c/atomic]]
[[ko:c/atomic]]
[[pl:c/atomic]]
[[pt:c/atomic]]
[[ru:c/atomic]]
[[tr:c/atomic]]
[[zh:c/atomic]]</text>
      <sha1>82maesqba6cxtiwpw0valzzbbqq2p72</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/ATOMIC FLAG INIT</title>
    <ns>0</ns>
    <id>9267</id>
    <revision>
      <id>77534</id>
      <parentid>63519</parentid>
      <timestamp>2015-03-29T13:15:04Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corr title; References; language links</comment>
      <text xml:space="preserve" bytes="995">{{c/title|ATOMIC_FLAG_INIT}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
#define ATOMIC_FLAG_INIT /* unspecified */
}}

Expands to an expression that can be used to initialize {{lc|atomic_flag}} type. The value {{tt|atomic_flag}} that is not initialized using this macro is undefined.

===References===
{{ref std c11}}
{{ref std | section=7.17.1/3 | title=ATOMIC_FLAG_INIT | p=273}}
{{ref std | section=7.17.8/4 | title=ATOMIC_FLAG_INIT | p=285}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc ATOMIC_VAR_INIT}}
{{dsc end}}

[[ar:c/atomic/ATOMIC_FLAG_INIT]]
[[cs:c/atomic/ATOMIC_FLAG_INIT]]
[[de:c/atomic/ATOMIC_FLAG_INIT]]
[[es:c/atomic/ATOMIC_FLAG_INIT]]
[[fr:c/atomic/ATOMIC_FLAG_INIT]]
[[it:c/atomic/ATOMIC_FLAG_INIT]]
[[ja:c/atomic/ATOMIC_FLAG_INIT]]
[[ko:c/atomic/ATOMIC_FLAG_INIT]]
[[pl:c/atomic/ATOMIC_FLAG_INIT]]
[[pt:c/atomic/ATOMIC_FLAG_INIT]]
[[ru:c/atomic/ATOMIC_FLAG_INIT]]
[[tr:c/atomic/ATOMIC_FLAG_INIT]]
[[zh:c/atomic/ATOMIC_FLAG_INIT]]</text>
      <sha1>80y4snvps5q0q62ax4qqr36447iz0qf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/ATOMIC LOCK FREE consts</title>
    <ns>0</ns>
    <id>9266</id>
    <revision>
      <id>77533</id>
      <parentid>75748</parentid>
      <timestamp>2015-03-29T13:05:10Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1853">{{c/title|ATOMIC_*_LOCK_FREE}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
#define ATOMIC_BOOL_LOCK_FREE     /* implementation-defined */
#define ATOMIC_CHAR_LOCK_FREE     /* implementation-defined */
#define ATOMIC_CHAR16_T_LOCK_FREE /* implementation-defined */
#define ATOMIC_CHAR32_T_LOCK_FREE /* implementation-defined */
#define ATOMIC_WCHAR_T_LOCK_FREE  /* implementation-defined */
#define ATOMIC_SHORT_LOCK_FREE    /* implementation-defined */
#define ATOMIC_INT_LOCK_FREE      /* implementation-defined */
#define ATOMIC_LONG_LOCK_FREE     /* implementation-defined */
#define ATOMIC_LLONG_LOCK_FREE    /* implementation-defined */
#define ATOMIC_POINTER_LOCK_FREE  /* implementation-defined */
}}

Expands to [[c/language/constant expression|preprocessor constant expressions]] that evaluate to either {{tt|0}}, {{tt|1}}, or {{tt|2}} which indicate the lock-free property of the corresponding [[c/atomic|atomic types]] (both signed and unsigned).

{{dsc begin}}
{{dsc hitem | Value | Explanation}}
{{dsc | {{tt|0}} | The atomic type is never lock-free}}
{{dsc | {{tt|1}} | The atomic type is sometimes lock-free}}
{{dsc | {{tt|2}} | The atomic type is always lock-free}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.17.1/3 | title=atomic lock-free macros | p=273}}
{{ref std end}}

[[ar:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[cs:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[de:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[es:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[fr:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[it:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[ja:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[ko:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[pl:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[pt:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[ru:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[tr:c/atomic/ATOMIC_LOCK_FREE_consts]]
[[zh:c/atomic/ATOMIC_LOCK_FREE_consts]]</text>
      <sha1>e198ory4dzbvnzfzyxkwxlridngnjz7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/ATOMIC VAR INIT</title>
    <ns>0</ns>
    <id>9268</id>
    <revision>
      <id>77535</id>
      <parentid>63521</parentid>
      <timestamp>2015-03-29T13:20:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1389">{{c/title|ATOMIC_VAR_INIT}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
#define ATOMIC_VAR_INIT(value) /* unspecified */
}}

Expands to an expression that can be used to initialize an atomic variable of the same type as {{tt|value}}. The initial value of atomic object of automatic storage duration that is not initialized using this macro is undefined. The default (zero) initialization of static and thread-local variables produces valid value however.

If this macro is not used for initialization of an atomic variable, any accesses during initialization from another thread, even through an atomic operation, is a data race (it may happen if the address is immediately passed to another thread with a {{lc|memory_order_relaxed}} operation).

===References===
{{ref std c11}}
{{ref std | section=7.17.2.1 | title=The ATOMIC_VAR_INIT macro | p=274}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc ATOMIC_FLAG_INIT}}
{{dsc end}}

[[ar:c/atomic/ATOMIC_VAR_INIT]]
[[cs:c/atomic/ATOMIC_VAR_INIT]]
[[de:c/atomic/ATOMIC_VAR_INIT]]
[[es:c/atomic/ATOMIC_VAR_INIT]]
[[fr:c/atomic/ATOMIC_VAR_INIT]]
[[it:c/atomic/ATOMIC_VAR_INIT]]
[[ja:c/atomic/ATOMIC_VAR_INIT]]
[[ko:c/atomic/ATOMIC_VAR_INIT]]
[[pl:c/atomic/ATOMIC_VAR_INIT]]
[[pt:c/atomic/ATOMIC_VAR_INIT]]
[[ru:c/atomic/ATOMIC_VAR_INIT]]
[[tr:c/atomic/ATOMIC_VAR_INIT]]
[[zh:c/atomic/ATOMIC_VAR_INIT]]</text>
      <sha1>3jmshujz1c6vc7axceiq1q46plbgnhc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic compare exchange</title>
    <ns>0</ns>
    <id>9302</id>
    <revision>
      <id>88198</id>
      <parentid>88197</parentid>
      <timestamp>2016-11-14T16:40:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 88197 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops, wrong language</comment>
      <text xml:space="preserve" bytes="4102">{{c/title|atomic_compare_exchange_weak|atomic_compare_exchange_strong|atomic_compare_exchange_weak_explicit|atomic_compare_exchange_strong_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
_Bool atomic_compare_exchange_strong( volatile A* obj,
                                      C* expected, C desired );
}}
{{dcl | since=c11 | num=2 |
_Bool atomic_compare_exchange_weak( volatile A *obj, 
                                    C* expected, C desired );
}}
{{dcl | since=c11 | num=3 |
_Bool atomic_compare_exchange_strong_explicit( volatile A* obj, 
                                               C* expected, C desired,
                                               memory_order succ, 
                                               memory_order fail );
}}
{{dcl | since=c11 | num=4 |
_Bool atomic_compare_exchange_weak_explicit( volatile A *obj, 
                                             C* expected, C desired,
                                             memory_order succ, 
                                             memory_order fail );
}}
{{dcl end}}

Atomically compares the value pointed to by {{tt|obj}} with the value pointed to by {{tt|expected}}, and if those are equal, replaces the former with {{tt|desired}} (performs read-modify-write operation). Otherwise, loads the actual value pointed to by {{tt|obj}} into {{tt|*expected}} (performs load operation).

The memory models for the read-modify-write and load operations are {{tt|succ}} and {{tt|fail}} respectively. The (1-2) versions use {{lc|memory_order_seq_cst}} by default.

The weak forms ((2) and (4)) of the functions are allowed to fail spuriously, that is, act as if {{c|1=*obj != *expected}} even if they are equal. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms. When a weak compare-and-exchange would require a loop and a strong one would not, the strong one is preferable.

{{c/atomic/type-requirements}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to test and modify}}
{{par | expected | pointer to the value expected to be found in the atomic object}}
{{par | desired | the value to store in the atomic object if it is as expected}}
{{par | succ | the memory synchronization ordering for the read-modify-write operation if the comparison succeeds. All values are permitted. }}
{{par | fail | the memory synchronization ordering for the load operation if the comparison fails. Cannot be {{lc|memory_order_release}} or {{lc|memory_order_acq_rel}} and cannot specify stronger ordering than {{tt|succ}}}}
{{par end}} 

===Return value===
The result of the comparison: {{c|true}} if {{tt|*obj}} was equal to {{tt|*exp}}, {{c|false}} otherwise.

===Notes===
The behavior of {{tt|atomic_compare_exchange_strong}} is as if the following was executed atomically:
{{source|1=
if (memcmp(obj, expected, sizeof *obj) == 0)
    memcpy(obj, &amp;desired, sizeof *obj);
else
    memcpy(expected, obj, sizeof *obj);
}}

(the standard wording which says the comparison is in terms of &quot;value&quot; was changed to &quot;bitwise equality&quot; by DR 431)

===References===
{{ref std c11}}
{{ref std | section=7.17.7.4 | title=The atomic_compare_exchange generic functions | p=283-284}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_exchange}}
{{dsc see cpp | cpp/atomic/atomic_compare_exchange | atomic_compare_exchange_weak | atomic_compare_exchange_strong | atomic_compare_exchange_weak_explicit | atomic_compare_exchange_strong_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_compare_exchange]]
[[cs:c/atomic/atomic_compare_exchange]]
[[de:c/atomic/atomic_compare_exchange]]
[[es:c/atomic/atomic_compare_exchange]]
[[fr:c/atomic/atomic_compare_exchange]]
[[it:c/atomic/atomic_compare_exchange]]
[[ja:c/atomic/atomic_compare_exchange]]
[[ko:c/atomic/atomic_compare_exchange]]
[[pl:c/atomic/atomic_compare_exchange]]
[[pt:c/atomic/atomic_compare_exchange]]
[[ru:c/atomic/atomic_compare_exchange]]
[[tr:c/atomic/atomic_compare_exchange]]
[[zh:c/atomic/atomic_compare_exchange]]</text>
      <sha1>shyqmunzq383ik68kjd4tih6x6oqpp0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic exchange</title>
    <ns>0</ns>
    <id>9303</id>
    <revision>
      <id>81124</id>
      <parentid>81119</parentid>
      <timestamp>2015-09-30T15:43:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>templating type requirements</comment>
      <text xml:space="preserve" bytes="1762">{{c/title|atomic_exchange|atomic_exchange_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
C atomic_exchange( volatile A* obj, C desired );
}}
{{dcl | since=c11 | num=2 |
C atomic_exchange_explicit( volatile A* obj, C desired, memory_order order );
}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with {{tt|desired}} and returns the value {{tt|obj}} held previously. The operation is read-modify-write operation. The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}. 

{{c/atomic/type-requirements}}.

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | desired | the value to replace the atomic object with}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
The value held previously be the atomic object pointed to by {{tt|obj}}.

===References===
{{ref std c11}}
{{ref std | section=7.17.7.3 | title=The atomic_exchange generic functions | p=283}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_compare_exchange}}
{{dsc see cpp | cpp/atomic/atomic_exchange | atomic_exchange | atomic_exchange_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_exchange]]
[[cs:c/atomic/atomic_exchange]]
[[de:c/atomic/atomic_exchange]]
[[es:c/atomic/atomic_exchange]]
[[fr:c/atomic/atomic_exchange]]
[[it:c/atomic/atomic_exchange]]
[[ja:c/atomic/atomic_exchange]]
[[ko:c/atomic/atomic_exchange]]
[[pl:c/atomic/atomic_exchange]]
[[pt:c/atomic/atomic_exchange]]
[[ru:c/atomic/atomic_exchange]]
[[tr:c/atomic/atomic_exchange]]
[[zh:c/atomic/atomic_exchange]]</text>
      <sha1>nv3t46g3o52oq6b0wmicomgxrq6qlhb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic fetch add</title>
    <ns>0</ns>
    <id>9274</id>
    <revision>
      <id>81127</id>
      <parentid>77572</parentid>
      <timestamp>2015-09-30T15:48:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>type requirements</comment>
      <text xml:space="preserve" bytes="2795">{{c/title|atomic_fetch_add|atomic_fetch_add_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
C atomic_fetch_add( volatile A* obj, M arg );
}}
{{dcl | since=c11 | num=2 |
C atomic_fetch_add_explicit( volatile A* obj, M arg, memory_order order );
}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of addition of {{tt|arg}} to the old value of {{tt|obj}}, and returns the value {{tt|obj}} held previously. The operation is read-modify-write operation. The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}.

{{c/atomic/type-requirements|math}}

For signed integer types, arithmetic is defined to use two’s complement representation. There
are no undefined results. For pointer types, the result may be an undefined address, but the operations otherwise have no undefined behavior.

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to add to the value stored in the atomic object}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
The value held previously be the atomic object pointed to by {{tt|obj}}.

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;threads.h&gt;
#include &lt;stdatomic.h&gt;
 
atomic_int acnt;
int cnt;
 
int f(void* thr_data)
{
    for(int n = 0; n &lt; 1000; ++n) {
        atomic_fetch_add_explicit(&amp;acnt, 1, memory_order_relaxed); // atomic
        ++cnt; // undefined behavior, in practice some updates missed
    }
    return 0;
}
 
int main(void)
{
    thrd_t thr[10];
    for(int n = 0; n &lt; 10; ++n)
        thrd_create(&amp;thr[n], f, NULL);
    for(int n = 0; n &lt; 10; ++n)
        thrd_join(thr[n], NULL);
 
    printf(&quot;The atomic counter is %u\n&quot;, acnt);
    printf(&quot;The non-atomic counter is %u\n&quot;, cnt);
}
|p=true
|output=
The atomic counter is 10000
The non-atomic counter is 9511
}}

===References===
{{ref std c11}}
{{ref std | section=7.17.7.5 | title=The atomic_fetch and modify generic functions | p=284-285}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_fetch_sub}}
{{dsc see cpp | cpp/atomic/atomic_fetch_add | atomic_fetch_add | atomic_fetch_add_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_fetch_add]]
[[cs:c/atomic/atomic_fetch_add]]
[[de:c/atomic/atomic_fetch_add]]
[[es:c/atomic/atomic_fetch_add]]
[[fr:c/atomic/atomic_fetch_add]]
[[it:c/atomic/atomic_fetch_add]]
[[ja:c/atomic/atomic_fetch_add]]
[[ko:c/atomic/atomic_fetch_add]]
[[pl:c/atomic/atomic_fetch_add]]
[[pt:c/atomic/atomic_fetch_add]]
[[ru:c/atomic/atomic_fetch_add]]
[[tr:c/atomic/atomic_fetch_add]]
[[zh:c/atomic/atomic_fetch_add]]</text>
      <sha1>j2tqmil4d8ovbwkkgk0oqvoiqx4aznh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic fetch and</title>
    <ns>0</ns>
    <id>9270</id>
    <revision>
      <id>81758</id>
      <parentid>81131</parentid>
      <timestamp>2015-11-10T04:07:04Z</timestamp>
      <contributor>
        <ip>114.222.142.228</ip>
      </contributor>
      <text xml:space="preserve" bytes="1906">{{c/title|atomic_fetch_and|atomic_fetch_and_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
C atomic_fetch_and( volatile A* obj, M arg );
}}
{{dcl | since=c11 | num=2 |
C atomic_fetch_and_explicit( volatile A* obj, M arg, memory_order order );
}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of bitwise AND between the old value of {{tt|obj}} and {{tt|arg}}, and returns the value {{tt|obj}} held previously. The operation is read-modify-write operation. The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}.

{{c/atomic/type-requirements|math}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to bitwise AND to the value stored in the atomic object}}
{{par | order | the memory sycnhronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
The value held previously be the atomic object pointed to by {{tt|obj}}.

===References===
{{ref std c11}}
{{ref std | section=7.17.7.5 | title=The atomic_fetch and modify generic functions | p=284-285}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_fetch_or}}
{{dsc inc | c/atomic/dsc atomic_fetch_xor}}
{{dsc see cpp | cpp/atomic/atomic_fetch_and | atomic_fetch_and | atomic_fetch_and_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_fetch_and]]
[[cs:c/atomic/atomic_fetch_and]]
[[de:c/atomic/atomic_fetch_and]]
[[es:c/atomic/atomic_fetch_and]]
[[fr:c/atomic/atomic_fetch_and]]
[[it:c/atomic/atomic_fetch_and]]
[[ja:c/atomic/atomic_fetch_and]]
[[ko:c/atomic/atomic_fetch_and]]
[[pl:c/atomic/atomic_fetch_and]]
[[pt:c/atomic/atomic_fetch_and]]
[[ru:c/atomic/atomic_fetch_and]]
[[tr:c/atomic/atomic_fetch_and]]
[[zh:c/atomic/atomic_fetch_and]]</text>
      <sha1>1b54oheflcrv0c1jiww3fqp1ep24uh2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic fetch or</title>
    <ns>0</ns>
    <id>9272</id>
    <revision>
      <id>81756</id>
      <parentid>81129</parentid>
      <timestamp>2015-11-09T23:37:37Z</timestamp>
      <contributor>
        <ip>115.70.189.243</ip>
      </contributor>
      <comment>Typo.</comment>
      <text xml:space="preserve" bytes="1884">{{c/title|atomic_fetch_or|atomic_fetch_or_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
C atomic_fetch_or( volatile A* obj, M arg );
}}
{{dcl | since=c11 | num=2 |
C atomic_fetch_or_explicit( volatile A* obj, M arg, memory_order order );
}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of bitwise OR between the old value of {{tt|obj}} and {{tt|arg}}, and returns the value {{tt|obj}} held previously. The operation is read-modify-write operation. The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}.

{{c/atomic/type-requirements|math}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to bitwise OR to the value stored in the atomic object}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
The value held previously be the atomic object pointed to by {{tt|obj}}.

===References===
{{ref std c11}}
{{ref std | section=7.17.7.5 | title=The atomic_fetch and modify generic functions | p=284-285}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_fetch_or}}
{{dsc inc | c/atomic/dsc atomic_fetch_xor}}
{{dsc see cpp | cpp/atomic/atomic_fetch_or | atomic_fetch_or | atomic_fetch_or_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_fetch_or]]
[[cs:c/atomic/atomic_fetch_or]]
[[de:c/atomic/atomic_fetch_or]]
[[es:c/atomic/atomic_fetch_or]]
[[fr:c/atomic/atomic_fetch_or]]
[[it:c/atomic/atomic_fetch_or]]
[[ja:c/atomic/atomic_fetch_or]]
[[ko:c/atomic/atomic_fetch_or]]
[[pl:c/atomic/atomic_fetch_or]]
[[pt:c/atomic/atomic_fetch_or]]
[[ru:c/atomic/atomic_fetch_or]]
[[tr:c/atomic/atomic_fetch_or]]
[[zh:c/atomic/atomic_fetch_or]]</text>
      <sha1>8gecb7rwl642hj0diguder4a5e4dh88</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic fetch sub</title>
    <ns>0</ns>
    <id>9273</id>
    <revision>
      <id>89116</id>
      <parentid>81128</parentid>
      <timestamp>2016-12-31T17:18:06Z</timestamp>
      <contributor>
        <username>Scottt</username>
        <id>6252</id>
      </contributor>
      <minor/>
      <comment>grammar: s|held be|held by|</comment>
      <text xml:space="preserve" bytes="2097">{{c/title|atomic_fetch_sub|atomic_fetch_sub_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
C atomic_fetch_sub( volatile A* obj, M arg );
}}
{{dcl | since=c11 | num=2 |
C atomic_fetch_sub_explicit( volatile A* obj, M arg, memory_order order );
}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of subtraction of {{tt|arg}} from the old value of {{tt|obj}}, and returns the value {{tt|obj}} held previously. The operation is read-modify-write operation. The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}.

{{c/atomic/type-requirements|math}}

For signed integer types, arithmetic is defined to use two’s complement representation. There
are no undefined results. For pointer types, the result may be an undefined address, but the operations otherwise have no undefined behavior.

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to subtract from the value stored in the atomic object}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
The value held previously by the atomic object pointed to by {{tt|obj}}.

===References===
{{ref std c11}}
{{ref std | section=7.17.7.5 | title=The atomic_fetch and modify generic functions | p=284-285}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_fetch_add}}
{{dsc see cpp | cpp/atomic/atomic_fetch_sub | atomic_fetch_sub | atomic_fetch_sub_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_fetch_sub]]
[[cs:c/atomic/atomic_fetch_sub]]
[[de:c/atomic/atomic_fetch_sub]]
[[es:c/atomic/atomic_fetch_sub]]
[[fr:c/atomic/atomic_fetch_sub]]
[[it:c/atomic/atomic_fetch_sub]]
[[ja:c/atomic/atomic_fetch_sub]]
[[ko:c/atomic/atomic_fetch_sub]]
[[pl:c/atomic/atomic_fetch_sub]]
[[pt:c/atomic/atomic_fetch_sub]]
[[ru:c/atomic/atomic_fetch_sub]]
[[tr:c/atomic/atomic_fetch_sub]]
[[zh:c/atomic/atomic_fetch_sub]]</text>
      <sha1>eslmzuoiel39fiumycgiho6vdtq161l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic fetch xor</title>
    <ns>0</ns>
    <id>9271</id>
    <revision>
      <id>81757</id>
      <parentid>81130</parentid>
      <timestamp>2015-11-10T00:16:28Z</timestamp>
      <contributor>
        <ip>121.249.14.255</ip>
      </contributor>
      <text xml:space="preserve" bytes="1907">{{c/title|atomic_fetch_xor|atomic_fetch_xor_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
C atomic_fetch_xor( volatile A* obj, M arg );
}}
{{dcl | since=c11 | num=2 |
C atomic_fetch_xor_explicit( volatile A* obj, M arg, memory_order order );
}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of bitwise XOR between the old value of {{tt|obj}} and {{tt|arg}}, and returns the value {{tt|obj}} held previously. The operation is read-modify-write operation. The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}.

{{c/atomic/type-requirements|math}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to bitwise XOR to the value stored in the atomic object}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
The value held previously be the atomic object pointed to by {{tt|obj}}.

===References===
{{ref std c11}}
{{ref std | section=7.17.7.5 | title=The atomic_fetch and modify generic functions | p=284-285}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_fetch_and}}
{{dsc inc | c/atomic/dsc atomic_fetch_xor}}
{{dsc see cpp | cpp/atomic/atomic_fetch_xor | atomic_fetch_xor | atomic_fetch_xor_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_fetch_xor]]
[[cs:c/atomic/atomic_fetch_xor]]
[[de:c/atomic/atomic_fetch_xor]]
[[es:c/atomic/atomic_fetch_xor]]
[[fr:c/atomic/atomic_fetch_xor]]
[[it:c/atomic/atomic_fetch_xor]]
[[ja:c/atomic/atomic_fetch_xor]]
[[ko:c/atomic/atomic_fetch_xor]]
[[pl:c/atomic/atomic_fetch_xor]]
[[pt:c/atomic/atomic_fetch_xor]]
[[ru:c/atomic/atomic_fetch_xor]]
[[tr:c/atomic/atomic_fetch_xor]]
[[zh:c/atomic/atomic_fetch_xor]]</text>
      <sha1>99db0daa5remn9hqemj0i1s5gi8uljg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic flag</title>
    <ns>0</ns>
    <id>9300</id>
    <revision>
      <id>87647</id>
      <parentid>77532</parentid>
      <timestamp>2016-09-16T09:09:20Z</timestamp>
      <contributor>
        <ip>113.107.246.26</ip>
      </contributor>
      <text xml:space="preserve" bytes="862">{{c/title|atomic_flag}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
struct atomic_flag;
}}

{{lc|atomic_flag}} is an atomic boolean type. Unlike other atomic types, it is guaranteed to be lock-free. Unlike {{lc|atomic_bool}}, {{tt|atomic_flag}} does not provide load or store operations.

===References===
{{ref std c11}}
{{ref std | section=7.17.1/4 | title=atomic_flag | p=273}}
{{ref std | section=7.17.8   | title=Atomic flag type and operations | p=285-286}}
{{ref std end}}

[[ar:c/atomic/atomic_flag]]
[[cs:c/atomic/atomic_flag]]
[[de:c/atomic/atomic_flag]]
[[es:c/atomic/atomic_flag]]
[[fr:c/atomic/atomic_flag]]
[[it:c/atomic/atomic_flag]]
[[ja:c/atomic/atomic_flag]]
[[ko:c/atomic/atomic_flag]]
[[pl:c/atomic/atomic_flag]]
[[pt:c/atomic/atomic_flag]]
[[ru:c/atomic/atomic_flag]]
[[tr:c/atomic/atomic_flag]]
[[zh:c/atomic/atomic_flag]]</text>
      <sha1>ol61m9m65n732ox5qnim3fxqmtudwd0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic flag clear</title>
    <ns>0</ns>
    <id>9275</id>
    <revision>
      <id>81134</id>
      <parentid>77578</parentid>
      <timestamp>2015-09-30T15:51:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>volatile note</comment>
      <text xml:space="preserve" bytes="1744">{{c/title|atomic_flag_clear|atomic_flag_clear_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
void atomic_flag_clear( volatile atomic_flag* obj );
}}
{{dcl | since=c11 | num=2 |
void atomic_flag_clear_explicit( volatile atomic_flag* obj, memory_order order );
}}
{{dcl end}}

Atomically changes the state of a {{tt|atomic_flag}} pointed to by {{tt|obj}} to clear ({{c|false}}). The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}.

The argument is pointer to a volatile atomic flag to accept addresses of both non-volatile and [[c/language/volatile|volatile]] (e.g. memory-mapped I/O) atomic flags.

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic flag object to modify}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.17.8.2 | title=The atomic_flag_clear functions | p=286}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_flag_test_and_set}}
{{dsc see cpp | cpp/atomic/atomic_flag_clear | atomic_flag_clear | atomic_flag_clear_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_flag_clear]]
[[cs:c/atomic/atomic_flag_clear]]
[[de:c/atomic/atomic_flag_clear]]
[[es:c/atomic/atomic_flag_clear]]
[[fr:c/atomic/atomic_flag_clear]]
[[it:c/atomic/atomic_flag_clear]]
[[ja:c/atomic/atomic_flag_clear]]
[[ko:c/atomic/atomic_flag_clear]]
[[pl:c/atomic/atomic_flag_clear]]
[[pt:c/atomic/atomic_flag_clear]]
[[ru:c/atomic/atomic_flag_clear]]
[[tr:c/atomic/atomic_flag_clear]]
[[zh:c/atomic/atomic_flag_clear]]</text>
      <sha1>77trnrj6xyirmsq719t0fu6k5c3d0ev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic flag test and set</title>
    <ns>0</ns>
    <id>9276</id>
    <revision>
      <id>81135</id>
      <parentid>77577</parentid>
      <timestamp>2015-09-30T15:52:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>volatile note</comment>
      <text xml:space="preserve" bytes="1980">{{c/title|atomic_flag_test_and_set|atomic_flag_test_and_set_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
_Bool atomic_flag_test_and_set( volatile atomic_flag* obj );
}}
{{dcl | since=c11 | num=2 |
_Bool atomic_flag_test_and_set_explicit( volatile atomic_flag* obj, memory_order order );
}}
{{dcl end}}

Atomically changes the state of a {{tt|atomic_flag}} pointed to by {{tt|obj}} to set ({{c|true}}) and returns the previous value. The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}.

The argument is pointer to a volatile atomic flag to accept addresses of both non-volatile and [[c/language/volatile|volatile]] (e.g. memory-mapped I/O) atomic flags.

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic flag object to modify}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted}}
{{par end}}

===Return value===
The previous value held by the atomic flag pointed to by {{tt|obj}}.

===References===
{{ref std c11}}
{{ref std | section=7.17.8.1 | title=The atomic_flag_test_and_set functions | p=285-286}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_flag_clear}}
{{dsc see cpp | cpp/atomic/atomic_flag_test_and_set | atomic_flag_test_and_set | atomic_flag_test_and_set_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_flag_test_and_set]]
[[cs:c/atomic/atomic_flag_test_and_set]]
[[de:c/atomic/atomic_flag_test_and_set]]
[[es:c/atomic/atomic_flag_test_and_set]]
[[fr:c/atomic/atomic_flag_test_and_set]]
[[it:c/atomic/atomic_flag_test_and_set]]
[[ja:c/atomic/atomic_flag_test_and_set]]
[[ko:c/atomic/atomic_flag_test_and_set]]
[[pl:c/atomic/atomic_flag_test_and_set]]
[[pt:c/atomic/atomic_flag_test_and_set]]
[[ru:c/atomic/atomic_flag_test_and_set]]
[[tr:c/atomic/atomic_flag_test_and_set]]
[[zh:c/atomic/atomic_flag_test_and_set]]</text>
      <sha1>01wmh5c5g0pfnqxc50i46y9625it1vh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic init</title>
    <ns>0</ns>
    <id>9304</id>
    <revision>
      <id>85254</id>
      <parentid>81133</parentid>
      <timestamp>2016-04-12T17:59:18Z</timestamp>
      <contributor>
        <ip>128.233.6.199</ip>
      </contributor>
      <comment>corrected typo</comment>
      <text xml:space="preserve" bytes="1196">{{c/title|atomic_init}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
void atomic_init( volatile A* obj, C desired );
}}

Initializes the default-constructed atomic object {{tt|obj}} with the value {{tt|desired}}. The function is not atomic: concurrent access from another thread, even through an atomic operation, is a data race. 

{{c/atomic/type-requirements}}

===Parameters===
{{par begin}}
{{par | obj | pointer to an atomic object to initialize}}
{{par | desired | the value to initialize atomic object with}}
{{par end}}

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.17.2.2 | title=The atomic_init generic function | p=274-275}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc ATOMIC_VAR_INIT}}
{{dsc see cpp | cpp/atomic/atomic_init}}
{{dsc end}}

[[ar:c/atomic/atomic_init]]
[[cs:c/atomic/atomic_init]]
[[de:c/atomic/atomic_init]]
[[es:c/atomic/atomic_init]]
[[fr:c/atomic/atomic_init]]
[[it:c/atomic/atomic_init]]
[[ja:c/atomic/atomic_init]]
[[ko:c/atomic/atomic_init]]
[[pl:c/atomic/atomic_init]]
[[pt:c/atomic/atomic_init]]
[[ru:c/atomic/atomic_init]]
[[tr:c/atomic/atomic_init]]
[[zh:c/atomic/atomic_init]]</text>
      <sha1>9d8nf82ntbv3jwb02vrzqkgft9rc3ci</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic is lock free</title>
    <ns>0</ns>
    <id>9301</id>
    <revision>
      <id>86848</id>
      <parentid>86847</parentid>
      <timestamp>2016-07-13T13:23:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>use prototype decl for main</comment>
      <text xml:space="preserve" bytes="2055">{{c/title|atomic_is_lock_free}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | 
_Bool atomic_is_lock_free( const volatile A* obj );
}}
{{dcl end}}

Determines if the atomic operations on all objects of the type {{tt|A}} (the type of the object pointed to by {{tt|obj}}) are lock-free. In any given program execution, the result of calling {{tt|atomic_is_lock_free}} is the same for all pointers of the same type.

{{c/atomic/type-requirements|noc}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to inspect}}
{{par end}}

===Return value===
{{c|true}} if the the operations on all objects of the type {{tt|A}} are lock-free, {{tt|false}} otherwise.

===Notes===
C11, as published, specified that this function is per-object, not per-type. This was corrected by DR 465.

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;stdatomic.h&gt;
 
_Atomic struct A { int a[100]; } a;
_Atomic struct B { int x, y; } b;
int main(void)
{
    printf(&quot;_Atomic struct A is lock free? %s\n&quot;, 
            atomic_is_lock_free(&amp;a) ? &quot;true&quot; : &quot;false&quot;);
    printf(&quot;_Atomic struct B is lock free? %s\n&quot;, 
            atomic_is_lock_free(&amp;b) ? &quot;true&quot; : &quot;false&quot;);
}
|p=true
|output=
_Atomic struct A is lock free? false
_Atomic struct B is lock free? true
}}

===References===
{{ref std c11}}
{{ref std | section=7.17.5.1 | title=The atomic_is_lock_free generic function | p=280}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc ATOMIC_LOCK_FREE_consts}}
{{dsc see cpp | cpp/atomic/atomic_is_lock_free}}
{{dsc end}}

[[ar:c/atomic/atomic_is_lock_free]]
[[cs:c/atomic/atomic_is_lock_free]]
[[de:c/atomic/atomic_is_lock_free]]
[[es:c/atomic/atomic_is_lock_free]]
[[fr:c/atomic/atomic_is_lock_free]]
[[it:c/atomic/atomic_is_lock_free]]
[[ja:c/atomic/atomic_is_lock_free]]
[[ko:c/atomic/atomic_is_lock_free]]
[[pl:c/atomic/atomic_is_lock_free]]
[[pt:c/atomic/atomic_is_lock_free]]
[[ru:c/atomic/atomic_is_lock_free]]
[[tr:c/atomic/atomic_is_lock_free]]
[[zh:c/atomic/atomic_is_lock_free]]</text>
      <sha1>jojuctpi0uhdq7qu256g5x2d1ywlm8f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic load</title>
    <ns>0</ns>
    <id>9305</id>
    <revision>
      <id>81122</id>
      <parentid>81120</parentid>
      <timestamp>2015-09-30T15:43:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>er, will just template it</comment>
      <text xml:space="preserve" bytes="1712">{{c/title|atomic_load|atomic_load_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
C atomic_load( const volatile A* obj );
}}
{{dcl | since=c11 | num=2 |
C atomic_load_explicit( const volatile A* obj, memory_order order );
}}
{{dcl end}}

Atomically loads and returns the current value of the atomic variable pointed to by {{tt|obj}}. The operation is atomic read operation. 

The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}. {{tt|order}} must be one of {{lc|memory_order_relaxed}}, {{lc|memory_order_consume}}, {{lc|memory_order_acquire}} or {{lc|memory_order_seq_cst}}. Otherwise the behavior is undefined.

{{c/atomic/type-requirements}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to access}}
{{par | order | the memory synchronization ordering for this operation}}
{{par end}}

===Return value===
The current value of the atomic variable pointed to by {{tt|obj}}.

===References===
{{ref std c11}}
{{ref std | section=7.17.7.2 | title=The atomic_load generic functions | p=282}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_store}}
{{dsc see cpp | cpp/atomic/atomic_load | atomic_load | atomic_load_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_load]]
[[cs:c/atomic/atomic_load]]
[[de:c/atomic/atomic_load]]
[[es:c/atomic/atomic_load]]
[[fr:c/atomic/atomic_load]]
[[it:c/atomic/atomic_load]]
[[ja:c/atomic/atomic_load]]
[[ko:c/atomic/atomic_load]]
[[pl:c/atomic/atomic_load]]
[[pt:c/atomic/atomic_load]]
[[ru:c/atomic/atomic_load]]
[[tr:c/atomic/atomic_load]]
[[zh:c/atomic/atomic_load]]</text>
      <sha1>mb9fvndbt0mbncyib8cv8fvdjh3ti4w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic signal fence</title>
    <ns>0</ns>
    <id>9298</id>
    <revision>
      <id>88729</id>
      <parentid>88728</parentid>
      <timestamp>2016-12-07T22:39:54Z</timestamp>
      <contributor>
        <ip>87.207.65.149</ip>
      </contributor>
      <text xml:space="preserve" bytes="1614">{{c/title|atomic_signal_fence}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
void atomic_signal_fence( memory_order order );
}}

Establishes memory synchronization ordering of non-atomic and relaxed atomic accesses, as instructed by {{tt|order}}, between a thread and a signal handler executed on the same thread. This is equivalent to {{lc|atomic_thread_fence}}, except no CPU instructions for memory ordering are issued. Only reordering of the instructions by the compiler is suppressed as {{tt|order}} instructs. For example, a fence with release semantics prevents reads or writes from being moved past subsequent writes and a fence with acquire semantics prevents reads or writes from being moved ahead of preceding reads.

===Parameters===
{{par begin}}
{{par | order | the memory ordering executed by this fence}}
{{par end}} 

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.17.4.2 | title=The atomic_signal_fence function | p=279}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_thread_fence}}
{{dsc see cpp | cpp/atomic/atomic_signal_fence}}
{{dsc end}}

[[ar:c/atomic/atomic_signal_fence]]
[[cs:c/atomic/atomic_signal_fence]]
[[de:c/atomic/atomic_signal_fence]]
[[es:c/atomic/atomic_signal_fence]]
[[fr:c/atomic/atomic_signal_fence]]
[[it:c/atomic/atomic_signal_fence]]
[[ja:c/atomic/atomic_signal_fence]]
[[ko:c/atomic/atomic_signal_fence]]
[[pl:c/atomic/atomic_signal_fence]]
[[pt:c/atomic/atomic_signal_fence]]
[[ru:c/atomic/atomic_signal_fence]]
[[tr:c/atomic/atomic_signal_fence]]
[[zh:c/atomic/atomic_signal_fence]]</text>
      <sha1>i311eottz2m3bym670lvvld9vkh87og</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic store</title>
    <ns>0</ns>
    <id>9306</id>
    <revision>
      <id>81125</id>
      <parentid>77541</parentid>
      <timestamp>2015-09-30T15:44:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>type requirements</comment>
      <text xml:space="preserve" bytes="1663">{{c/title|atomic_store|atomic_store_explicit}}
{{c/atomic/navbar}}
{{dcl begin}}
{{dcl header | stdatomic.h }}
{{dcl | since=c11 | num=1 |
void atomic_store( volatile A* obj , C desired);
}}
{{dcl | since=c11 | num=2 |
void atomic_store_explicit( volatile A* obj, C desired, memory_order order );
}}
{{dcl end}}

Atomically replaces the value of the atomic variable pointed to by {{tt|obj}} with {{tt|desired}}. The operation is atomic write operation. 

The first version orders memory accesses according to {{lc|memory_order_seq_cst}}, the second version orders memory accesses according to {{tt|order}}. {{tt|order}} must be one of {{lc|memory_order_relaxed}}, {{lc|memory_order_release}} or {{lc|memory_order_seq_cst}}. Otherwise the behavior is undefined.

{{c/atomic/type-requirements}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | order | the memory synchronization ordering for this operation}}
{{par end}}

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.17.7.1 | title=The atomic_store generic functions | p=282}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_load}}
{{dsc see cpp | cpp/atomic/atomic_store | atomic_store | atomic_store_explicit}}
{{dsc end}}

[[ar:c/atomic/atomic_store]]
[[cs:c/atomic/atomic_store]]
[[de:c/atomic/atomic_store]]
[[es:c/atomic/atomic_store]]
[[fr:c/atomic/atomic_store]]
[[it:c/atomic/atomic_store]]
[[ja:c/atomic/atomic_store]]
[[ko:c/atomic/atomic_store]]
[[pl:c/atomic/atomic_store]]
[[pt:c/atomic/atomic_store]]
[[ru:c/atomic/atomic_store]]
[[tr:c/atomic/atomic_store]]
[[zh:c/atomic/atomic_store]]</text>
      <sha1>gvg7p97alkw3exe5j6qedcr8zrkk349</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/atomic thread fence</title>
    <ns>0</ns>
    <id>9299</id>
    <revision>
      <id>77538</id>
      <parentid>65045</parentid>
      <timestamp>2015-03-29T13:50:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1445">{{c/title|atomic_thread_fence}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
void atomic_thread_fence( memory_order order );
}}

Establishes memory synchronization ordering of non-atomic and relaxed atomic accesses, as instructed by {{tt|order}}, without an associated atomic operation. For example, all non-atomic and relaxed atomic stores that happen before a {{lc|memory_order_release}} fence in thread A will be synchronized with non-atomic and relaxed atomic loads from the same locations made in thread B after an {{lc|memory_order_acquire}} fence.

===Parameters===
{{par begin}}
{{par | order | the memory ordering executed by this fence}}
{{par end}} 

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.17.4.1 | title=The atomic_thread_fence function | p=278-279}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/atomic/dsc atomic_signal_fence}}
{{dsc see cpp | cpp/atomic/atomic_thread_fence}}
{{dsc end}}

[[ar:c/atomic/atomic_thread_fence]]
[[cs:c/atomic/atomic_thread_fence]]
[[de:c/atomic/atomic_thread_fence]]
[[es:c/atomic/atomic_thread_fence]]
[[fr:c/atomic/atomic_thread_fence]]
[[it:c/atomic/atomic_thread_fence]]
[[ja:c/atomic/atomic_thread_fence]]
[[ko:c/atomic/atomic_thread_fence]]
[[pl:c/atomic/atomic_thread_fence]]
[[pt:c/atomic/atomic_thread_fence]]
[[ru:c/atomic/atomic_thread_fence]]
[[tr:c/atomic/atomic_thread_fence]]
[[zh:c/atomic/atomic_thread_fence]]</text>
      <sha1>snwfpwuds151c20aki3j0t5lcoltqmp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/kill dependency</title>
    <ns>0</ns>
    <id>9383</id>
    <revision>
      <id>77536</id>
      <parentid>63526</parentid>
      <timestamp>2015-03-29T13:25:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1190">{{c/title|kill_dependency}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 |
A kill_dependency(A y);
}}

Informs the compiler that the dependency tree started by an {{lc|memory_order_consume}} atomic load operation does not extend past the return value of {{tt|kill_dependency}}; that is, the argument does not carry a dependency into the return value.

The function is implemented as a macro. {{tt|A}} is the type of {{tt|y}}.

===Parameters===
{{par begin}}
{{par | y | the expression whose return value is to be removed from a dependency tree}}
{{par end}} 

===Return value===
Returns {{tt|y}}, no longer a part of a dependency tree.

===References===
{{ref std c11}}
{{ref std | section=7.17.3.1 | title=The kill_dependency macro | p=278}}
{{ref std end}}

[[ar:c/atomic/kill_dependency]]
[[cs:c/atomic/kill_dependency]]
[[de:c/atomic/kill_dependency]]
[[es:c/atomic/kill_dependency]]
[[fr:c/atomic/kill_dependency]]
[[it:c/atomic/kill_dependency]]
[[ja:c/atomic/kill_dependency]]
[[ko:c/atomic/kill_dependency]]
[[pl:c/atomic/kill_dependency]]
[[pt:c/atomic/kill_dependency]]
[[ru:c/atomic/kill_dependency]]
[[tr:c/atomic/kill_dependency]]
[[zh:c/atomic/kill_dependency]]</text>
      <sha1>cs7pg3fc9nbcdmfhlr4mgzcrhiiwqry</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/atomic/memory order</title>
    <ns>0</ns>
    <id>9269</id>
    <revision>
      <id>89879</id>
      <parentid>87519</parentid>
      <timestamp>2017-01-28T02:23:15Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>C header stdatomic.h</comment>
      <text xml:space="preserve" bytes="2306">{{c/title | memory_order}}
{{c/atomic/navbar}}
{{ddcl | header=stdatomic.h | since=c11 | 1=
enum memory_order {
    memory_order_relaxed,
    memory_order_consume,
    memory_order_acquire,
    memory_order_release,
    memory_order_acq_rel,
    memory_order_seq_cst
};
}}

{{cpp/atomic/memory-order-intro|c}}

===Constants===

{{dsc begin}}
{{dsc header | stdatomic.h}}
{{dsc hitem | Value | Explanation }}
{{cpp/atomic/memory-order-constants|c}}
{{dsc end}}

{{todo|happens-before and other concepts, as in C++, but keep modification orders and the four consistencies in [[c/language/atomic]]}}

{{todo|when doing above, don't forget that although happens-before wasn't acyclic in C11 as published, this was updated to match C++11 via DR 401}}

====Relaxed ordering====
{{cpp/atomic/relaxed|c}}

====Release-Consume ordering====
{{cpp/atomic/release-consume|c}}

====Release sequence====
If some atomic is store-released and several other threads perform read-modify-write operations on that atomic, a &quot;release sequence&quot; is formed: all threads that perform the read-modify-writes to the same atomic synchronize with the first thread and each other even if they have no {{tt|memory_order_release}} semantics. This makes single producer - multiple consumers situations possible without imposing unnecessary synchronization between individual consumer threads.

====Release-Acquire ordering====
{{cpp/atomic/release-acquire|c}}

====Sequentially-consistent ordering====
{{cpp/atomic/sequentially-consistent|c}}

===Relationship with volatile===
{{cpp/atomic/atomic-vs-volatile|c}}

===Examples===
{{example}}

===References===
{{ref std c11}}
{{ref std | section=7.17.1/4 | title=memory_order | p=273}}
{{ref std | section=7.17.3   | title=Order and consistency | p=275-277}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/atomic/memory order}}
{{dsc end}}

===External links===
{{cpp/atomic/external-links|c}}

[[ar:c/atomic/memory_order]]
[[cs:c/atomic/memory_order]]
[[de:c/atomic/memory_order]]
[[es:c/atomic/memory_order]]
[[fr:c/atomic/memory_order]]
[[it:c/atomic/memory_order]]
[[ja:c/atomic/memory_order]]
[[ko:c/atomic/memory_order]]
[[pl:c/atomic/memory_order]]
[[pt:c/atomic/memory_order]]
[[ru:c/atomic/memory_order]]
[[tr:c/atomic/memory_order]]
[[zh:c/atomic/memory_order]]</text>
      <sha1>md6yu07dusjtpnlb371jvydo6067l5m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono</title>
    <ns>0</ns>
    <id>5932</id>
    <revision>
      <id>88185</id>
      <parentid>78961</parentid>
      <timestamp>2016-11-14T13:27:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix &lt;time.h&gt; which is interpreted as html tag for some reason</comment>
      <text xml:space="preserve" bytes="1779">{{title|Date and time utilities}}
{{c/chrono/navbar}}

===Functions===
{{dsc begin}}
{{dsc h2 | Time manipulation}}
{{dsc header | time.h}}
{{dsc inc | c/chrono/dsc difftime}}
{{dsc inc | c/chrono/dsc time}}
{{dsc inc | c/chrono/dsc clock}}
{{dsc inc | c/chrono/dsc timespec_get}}
{{dsc h2 | Format conversions}}
{{dsc header | time.h}}
{{dsc inc | c/chrono/dsc asctime}}
{{dsc inc | c/chrono/dsc ctime}}
{{dsc inc | c/chrono/dsc strftime}}
{{dsc header | wchar.h}}
{{dsc inc | c/chrono/dsc wcsftime}}
{{dsc header | time.h}}
{{dsc inc | c/chrono/dsc gmtime}}
{{dsc inc | c/chrono/dsc localtime}}
{{dsc inc | c/chrono/dsc mktime}}
{{dsc end}}

===Constants===
{{dsc begin}}
{{dsc header | time.h}}
{{dsc inc | c/chrono/dsc CLOCKS_PER_SEC}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | time.h}}
{{dsc inc | c/chrono/dsc tm}}
{{dsc inc | c/chrono/dsc time_t}}
{{dsc inc | c/chrono/dsc clock_t}}
{{dsc inc | c/chrono/dsc timespec}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.27 | title=Date and time &amp;lt;time.h&amp;gt; | p=388-397}}
{{ref std | section=7.29.5.1 | title=The wcsftime function | p=439-440}}
{{ref std | section=7.31.14  | title=Date and time &amp;lt;time.h&amp;gt; | p=456}}
{{ref std c99}}
{{ref std | section=7.23 | title=Date and time &amp;lt;time.h&amp;gt; | p=338-347}}
{{ref std | section=7.24.5.1 | title=The wcsftime function | p=385-386}}
{{ref std c89}}
{{ref std | section=4.12 | title=DATE AND TIME &amp;lt;time.h&amp;gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/chrono/c |C Date and time utilities }}
{{dsc end}}

[[ar:c/chrono]]
[[cs:c/chrono]]
[[de:c/chrono]]
[[es:c/chrono]]
[[fr:c/chrono]]
[[it:c/chrono]]
[[ja:c/chrono]]
[[ko:c/chrono]]
[[pl:c/chrono]]
[[pt:c/chrono]]
[[ru:c/chrono]]
[[tr:c/chrono]]
[[zh:c/chrono]]</text>
      <sha1>hbpjh9rrrrrkkrm2897afbl7sm76z9t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/CLOCKS PER SEC</title>
    <ns>0</ns>
    <id>6158</id>
    <revision>
      <id>78788</id>
      <parentid>78771</parentid>
      <timestamp>2015-06-09T09:59:58Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+period</comment>
      <text xml:space="preserve" bytes="1627">{{title| CLOCKS_PER_SEC}}
{{c/chrono/navbar}}
{{ddcl | header=time.h |
#define CLOCKS_PER_SEC /*implementation defined*/
}}

Expands to an expression (not necessarily a compile-time constant) of type {{lc|clock_t}} equal to the number of clock ticks per second, as returned by {{lc|clock()}}. 

===Notes===
POSIX defines {{tt|CLOCKS_PER_SEC}} as one million, regardless of the actual precision of {{lc|clock}}.

Until standardized as {{tt|CLOCKS_PER_SEC}} in C89, this macro was sometimes known by its IEEE std 1003.1-1988 name {{tt|CLK_TCK}}: that name was not included in C89 and was removed from POSIX itself in 1996 over ambiguity with {{tt|_SC_CLK_TCK}}, which gives number of clocks per second for the function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/times.html times()]).

===References===
{{ref std c11}}
{{ref std | section=7.27.1/2 | title=Components of time | p=388}}
{{ref std c99}}
{{ref std | section=7.23.1/2 | title=Components of time | p=338}}
{{ref std c89}}
{{ref std | section=4.12.1 | title=Components of time}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc clock}}
{{dsc inc | c/chrono/dsc clock_t}}
{{dsc see cpp | cpp/chrono/c/CLOCKS_PER_SEC}}
{{dsc end}}

[[ar:c/chrono/CLOCKS_PER_SEC]]
[[cs:c/chrono/CLOCKS_PER_SEC]]
[[de:c/chrono/CLOCKS_PER_SEC]]
[[es:c/chrono/CLOCKS_PER_SEC]]
[[fr:c/chrono/CLOCKS_PER_SEC]]
[[it:c/chrono/CLOCKS_PER_SEC]]
[[ja:c/chrono/CLOCKS_PER_SEC]]
[[ko:c/chrono/CLOCKS_PER_SEC]]
[[pl:c/chrono/CLOCKS_PER_SEC]]
[[pt:c/chrono/CLOCKS_PER_SEC]]
[[ru:c/chrono/CLOCKS_PER_SEC]]
[[tr:c/chrono/CLOCKS_PER_SEC]]
[[zh:c/chrono/CLOCKS_PER_SEC]]</text>
      <sha1>rnsjz4iu18hdisflaxp4tnf822p7ar4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/TIME UTC</title>
    <ns>0</ns>
    <id>14064</id>
    <revision>
      <id>77786</id>
      <timestamp>2015-04-08T14:25:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new page for TIME_UTC</comment>
      <text xml:space="preserve" bytes="957">{{title| TIME_UTC}}
{{c/chrono/navbar}}
{{ddcl | header=time.h | since=c11 |
#define TIME_UTC /*implementation defined*/
}}

Expands to an integer constant greater than 0 that designates the UTC time base and used by {{lc|timespec_get()}}. 

===Notes===
Implementations may define additional time bases, but are only required to support a real time clock based on UTC

===References===
{{ref std c11}}
{{ref std | section=7.27.1/2 | title=TIME_UTC | p=388}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc timespec_get}}
{{dsc inc | c/chrono/dsc timespec}}
{{dsc see cpp | cpp/chrono/c/TIME_UTC}}
{{dsc end}}

[[ar:c/chrono/TIME_UTC]]
[[cs:c/chrono/TIME_UTC]]
[[de:c/chrono/TIME_UTC]]
[[es:c/chrono/TIME_UTC]]
[[fr:c/chrono/TIME_UTC]]
[[it:c/chrono/TIME_UTC]]
[[ja:c/chrono/TIME_UTC]]
[[ko:c/chrono/TIME_UTC]]
[[pl:c/chrono/TIME_UTC]]
[[pt:c/chrono/TIME_UTC]]
[[ru:c/chrono/TIME_UTC]]
[[tr:c/chrono/TIME_UTC]]
[[zh:c/chrono/TIME_UTC]]</text>
      <sha1>7n7ijfuegp3cd92qmt1trcc6j3pu0sw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/asctime</title>
    <ns>0</ns>
    <id>6167</id>
    <revision>
      <id>78632</id>
      <parentid>78623</parentid>
      <timestamp>2015-06-01T11:24:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+period</comment>
      <text xml:space="preserve" bytes="5180">{{c/title| asctime | asctime_s}}
{{c/chrono/navbar}}
{{dcl begin}}
{{dcl header|time.h}}
{{dcl|num=1|
char* asctime( const struct tm* time_ptr );
}}
{{dcl|num=2|since=c11|
errno_t asctime_s(char *buf, rsize_t bufsz, const struct tm *time_ptr);
}}
{{dcl end}}

@1@ Converts given calendar time {{lc|tm}} to a textual representation of the following fixed 25-character form: {{c|Www Mmm dd hh:mm:ss yyyy\n}}
*{{tt|Www}} - three-letter English abbreviated day of the week from {{c|time_ptr-&gt;tm_wday}}, one of {{tt|Mon}}, {{tt|Tue}}, {{tt|Wed}}, {{tt|Thu}}, {{tt|Fri}}, {{tt|Sat}}, {{tt|Sun}}.
*{{tt|Mmm}} - three-letter English abbreviated month name from {{c|time_ptr-&gt;tm_mon}}, one of {{tt|Jan}}, {{tt|Feb}}, {{tt|Mar}}, {{tt|Apr}}, {{tt|May}}, {{tt|Jun}}, {{tt|Jul}}, {{tt|Aug}}, {{tt|Sep}}, {{tt|Oct}}, {{tt|Nov}}, {{tt|Dec}}.
*{{tt|dd}} - 2-digit day of the month from {{c|timeptr-&gt;tm_mday}} as if printed by {{lc|sprintf}} using {{c|%2d}}
*{{tt|hh}} - 2-digit hour from {{c|timeptr-&gt;tm_hour}} as if printed by {{lc|sprintf}} using {{c|%.2d}}
*{{tt|mm}} - 2-digit minute from {{c|timeptr-&gt;tm_min}} as if printed by {{lc|sprintf}} using {{c|%.2d}}
*{{tt|ss}} - 2-digit second from {{c|timeptr-&gt;tm_sec}} as if printed by {{lc|sprintf}} using {{c|%.2d}}
*{{tt|yyyy}} - 4-digit year from {{c|timeptr-&gt;tm_year + 1900}} as if printed by {{lc|sprintf}} using {{c|%4d}}
@@ The behavior is undefined if any member of {{c|*time_ptr}} is outside its normal range
@@ The behavior is undefined if the calendar year indicated by {{c|time_ptr-&gt;tm_year}} has more than 4 digits or is less than the year 1000.
@@ The function does not support localization, and the newline character cannot be removed.
@@ The function modifies static storage and is not thread-safe.
@2@ Same as {{v|1}}, except that the message is copied into user-provided storage {{tt|buf}}, which is guaranteed to be null-terminated, and the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|buf}} or {{tt|time_ptr}} is a null pointer
:* {{tt|bufsz}} is less than 26 or greater than {{lc|RSIZE_MAX}}
:* not all members of {{c|*time_ptr}} are within their normal ranges
:* the year indicated by {{c|time_ptr-&gt;tm_year}} is less than 0 or greater than 9999
:As all bounds-checked functions, {{tt|asctime_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|time.h}}.

===Parameters===
{{par begin}}
{{par | time_ptr | pointer to a {{lc|tm}} object specifying the time to print}}
{{par | buf | pointer to a user-supplied buffer at least 26 bytes in length}}
{{par | bufsz | size of the user-supplied buffer}}
{{par end}}

===Return value===
@1@ pointer to a static null-terminated character string holding the textual representation of date and time as described above. The string may be shared between {{tt|asctime}} and {{lc|ctime}}, and may be overwritten on each invocation of any of those functions.
@2@ zero on success, non-zero on failure, in which case {{c|buf[0]}} is set to zero (unless {{tt|buf}} is a null pointer or {{tt|bufsz}} is zero or greater than {{lc|RSIZE_MAX}}).

===Notes===
This function returns a pointer to static data and is not thread-safe. POSIX marks this function obsolete and recommends {{lc|strftime}} instead. The C standard also recommends {{lc|strftime}} instead of {{tt|asctime}} and {{tt|asctime_s}} because {{tt|strftime}} is more flexible and locale-sensitive.

POSIX limits undefined behaviors only to when the output string would be longer than 25 characters, when {{tt|timeptr-&gt;tm_wday}} or {{tt|timeptr-&gt;tm_mon}} are not within the expected ranges, or when {{tt|timeptr-&gt;tm_year}} exceeds {{c|INT_MAX-1990}}.

Some implementations handle {{c|1=timeptr-&gt;tm_mday==0}} as meaning the last day of the preceding month.

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;time.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    struct tm tm = *localtime(&amp;(time_t){time(NULL)});
    printf(&quot;%s&quot;, asctime(&amp;tm));

#ifdef __STDC_LIB_EXT1__
    char str[26];
    asctime_s(str, sizeof str, &amp;tm);
    printf(&quot;%s&quot;, str);
#endif
}
 | p=true | output=
Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.2.1  | title=The asctime function | p=392-393}}
{{ref std | section=K.3.8.2.1 | title=The asctime_s function | p=624-625}}
{{ref std c99}}
{{ref std | section=7.23.3.1 | title=The asctime function | p=341-342}}
{{ref std c89}}
{{ref std | section=4.12.3.1 | title=The asctime function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc ctime}}
{{dsc inc | c/chrono/dsc strftime}}
{{dsc see cpp | cpp/chrono/c/asctime}}
{{dsc end}}

[[ar:c/chrono/asctime]]
[[cs:c/chrono/asctime]]
[[de:c/chrono/asctime]]
[[es:c/chrono/asctime]]
[[fr:c/chrono/asctime]]
[[it:c/chrono/asctime]]
[[ja:c/chrono/asctime]]
[[ko:c/chrono/asctime]]
[[pl:c/chrono/asctime]]
[[pt:c/chrono/asctime]]
[[ru:c/chrono/asctime]]
[[tr:c/chrono/asctime]]
[[zh:c/chrono/asctime]]</text>
      <sha1>1wa2jljj4gmg6acw9ebtpqlqfe4p3ft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/clock</title>
    <ns>0</ns>
    <id>6168</id>
    <revision>
      <id>89217</id>
      <parentid>78744</parentid>
      <timestamp>2017-01-10T19:07:46Z</timestamp>
      <contributor>
        <username>SteveWishnousky</username>
        <id>6287</id>
      </contributor>
      <text xml:space="preserve" bytes="3907">{{c/title| clock}}
{{c/chrono/navbar}}
{{ddcl | header=time.h |
clock_t clock(void);
}}

Returns the approximate processor time used by the process since the beginning of an implementation-defined era related to the program's execution. To convert result value to seconds, divide it by {{lc|CLOCKS_PER_SEC}}. 

Only the difference between two values returned by different calls to {{lc|clock}} is meaningful, as the beginning of the {{lc|clock}} era does not have to coincide with the start of the program. {{lc|clock}} time may advance faster or slower than the wall clock, depending on the execution resources given to the program by the operating system. For example, if the CPU is shared by other processes, {{lc|clock}} time may advance slower than wall clock. On the other hand, if the current process is multithreaded and more than one execution core is available, {{lc|clock}} time may advance faster than wall clock.

===Parameters===
(none)

===Return value===
Processor time used by the program so far or {{c|(clock_t)(-1)}} if that information is unavailable or its value cannot be represented.

===Notes===
On POSIX-compatible systems, &lt;code&gt;[http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html clock_gettime]&lt;/code&gt; with clock id {{c|CLOCK_PROCESS_CPUTIME_ID}} offers better resolution.

The value returned by {{tt|clock()}} may wrap around on some implementations. For example, on a machine with 32-bit  {{lc|clock_t}}, it wraps after 2147 seconds or 36 minutes.

===Example===
{{example
 | This example demonstrates the difference between clock() time and real time.
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;threads.h&gt; // pthread.h in POSIX

// the function f() does some time-consuming work
int f(void* thr_data) // return void* in POSIX
{
    volatile double d = 0;
    for (int n=0; n&lt;10000; ++n)
       for (int m=0; m&lt;10000; ++m)
           d += d*n*m;
    return 0;
}

int main(void)
{
    struct timespec ts1, tw1; // both C11 and POSIX
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &amp;ts1); // POSIX
    clock_gettime(CLOCK_MONOTONIC, &amp;tw1); // POSIX; use timespec_get in C11
    clock_t t1 = clock();

    thrd_t thr1, thr2;  // C11; use pthread_t in POSIX
    thrd_create(&amp;thr1, f, NULL); // C11; use pthread_create in POSIX
    thrd_create(&amp;thr2, f, NULL);
    thrd_join(thr1, NULL); // C11; use pthread_join in POSIX
    thrd_join(thr2, NULL);

    struct timespec ts2, tw2;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &amp;ts2);
    clock_gettime(CLOCK_MONOTONIC, &amp;tw2);
    clock_t t2 = clock();

    double dur = 1000.0*(t2-t1)/CLOCKS_PER_SEC;
    double posix_dur = 1000.0*ts2.tv_sec + 1e-6*ts2.tv_nsec
                       - (1000.0*ts1.tv_sec + 1e-6*ts1.tv_nsec);
    double posix_wall = 1000.0*tw2.tv_sec + 1e-6*tw2.tv_nsec
                       - (1000.0*tw1.tv_sec + 1e-6*tw1.tv_nsec);

    printf(&quot;CPU time used (per clock(): %.2f ms\n&quot;, dur);
    printf(&quot;CPU time used (per clock_gettime()): %.2f ms\n&quot;, posix_dur);
    printf(&quot;Wall time passed: %.2f ms\n&quot;, posix_wall);
}
 | p=true
 | output=
CPU time used (per clock(): 1580.00 ms
CPU time used (per clock_gettime()): 1582.76 ms
Wall time passed: 792.13 ms
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.2.1 | title=The clock function | p=389}}
{{ref std c99}}
{{ref std | section=7.23.2.1 | title=The clock function | p=339}}
{{ref std c89}}
{{ref std | section=4.12.2.1 | title=The clock function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc ctime}}
{{dsc inc | c/chrono/dsc time}}
{{dsc see cpp | cpp/chrono/c/clock}}
{{dsc end}}

[[ar:c/chrono/clock]]
[[cs:c/chrono/clock]]
[[de:c/chrono/clock]]
[[es:c/chrono/clock]]
[[fr:c/chrono/clock]]
[[it:c/chrono/clock]]
[[ja:c/chrono/clock]]
[[ko:c/chrono/clock]]
[[pl:c/chrono/clock]]
[[pt:c/chrono/clock]]
[[ru:c/chrono/clock]]
[[tr:c/chrono/clock]]
[[zh:c/chrono/clock]]</text>
      <sha1>5580l9p5fwym1tgijtds3s65ujmed9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/clock t</title>
    <ns>0</ns>
    <id>6155</id>
    <revision>
      <id>78093</id>
      <parentid>78092</parentid>
      <timestamp>2015-04-29T15:27:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>it's not a &quot;term&quot;. But it's true that it should be used on this page, so moving up from note to normative text.</comment>
      <text xml:space="preserve" bytes="1022">{{c/title|clock_t}}
{{c/chrono/navbar}}
{{ddcl | header=time.h | 1=
typedef /* unspecified */ clock_t;
}}
{{rev inl|until=c11|Arithmetic}}{{rev inl|since=c11|Real}} type capable of representing the processor time used by a process. It has implementation-defined range and precision.

===References===
{{ref std c11}}
{{ref std | section=7.27.1/3 | title=Components of time | p=388}}
{{ref std c99}}
{{ref std | section=7.23.1/3 | title=Components of time | p=338}}
{{ref std c89}}
{{ref std | section=4.12.1 | title=Components of time}}
{{ref std end}} 

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc clock}}
{{dsc inc | c/chrono/dsc CLOCKS_PER_SEC}}
{{dsc see cpp | cpp/chrono/c/clock_t}}
{{dsc end}}

[[ar:c/chrono/clock_t]]
[[cs:c/chrono/clock_t]]
[[de:c/chrono/clock_t]]
[[es:c/chrono/clock_t]]
[[fr:c/chrono/clock_t]]
[[it:c/chrono/clock_t]]
[[ja:c/chrono/clock_t]]
[[ko:c/chrono/clock_t]]
[[pl:c/chrono/clock_t]]
[[pt:c/chrono/clock_t]]
[[ru:c/chrono/clock_t]]
[[tr:c/chrono/clock_t]]
[[zh:c/chrono/clock_t]]</text>
      <sha1>34mrtnvne0fias54an7ceza4miemw5j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/ctime</title>
    <ns>0</ns>
    <id>6166</id>
    <revision>
      <id>78746</id>
      <parentid>78628</parentid>
      <timestamp>2015-06-08T12:23:02Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="4257">{{c/title| ctime | ctime_s}}
{{c/chrono/navbar}}
{{dcl begin}}
{{dcl header|time.h}}
{{dcl|num=1| char* ctime( const time_t* time ); }}
{{dcl|num=2|notes={{mark since c11}}|
errno_t ctime_s(char *buffer, rsize_t bufsz, const time_t *time);
}}
{{dcl end}}
@1@ Converts given time since epoch to a calendar local time and then to a textual representation, as if by calling {{c|asctime(localtime(time))}}.
@2@ Same as {{v|1}}, except that the function is equivalent to {{c|asctime_s(buffer, bufsz, localtime_s(time, &amp;(struct tm){0}))}}, and the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|buffer}} or {{tt|time}} is a null pointer
:* {{tt|bufsz}} is less than {{c|26}} or greater than {{lc|RSIZE_MAX}}
:As with all bounds-checked functions, {{tt|ctime_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|time.h}}.

The resulting string has the following format:

{{source|Www Mmm dd hh:mm:ss yyyy\n}}

*{{tt|Www}} - the day of the week (one of {{tt|Mon}}, {{tt|Tue}}, {{tt|Wed}}, {{tt|Thu}}, {{tt|Fri}}, {{tt|Sat}}, {{tt|Sun}}).
*{{tt|Mmm}} - the month (one of {{tt|Jan}}, {{tt|Feb}}, {{tt|Mar}}, {{tt|Apr}}, {{tt|May}}, {{tt|Jun}}, {{tt|Jul}}, {{tt|Aug}}, {{tt|Sep}}, {{tt|Oct}}, {{tt|Nov}}, {{tt|Dec}}).
*{{tt|dd}} - the day of the month
*{{tt|hh}} - hours
*{{tt|mm}} - minutes
*{{tt|ss}} - seconds 
*{{tt|yyyy}} - years

The function does not support localization.

===Parameters===
{{par begin}}
{{par | time | pointer to a {{lc|time_t}} object specifying the time to print}}
{{par | buffer | pointer to an element of a char array of size at least {{tt|bufsz}} }}
{{par | bufsz | max number of bytes to output, typically the size of the buffer pointed to by {{tt|buffer}} }}
{{par end}}

===Return value===
@1@ pointer to a static null-terminated character string holding the textual representation of date and time. The string may be shared between {{tt|asctime}} and {{lc|ctime}}, and may be overwritten on each invocation of any of those functions.
@2@ zero on success (in which case the string representatino of time has been written out to the array pointed to by {{tt|buffer}}), or non-zero on failure (in which case, the terminating null character is always written to {{c|buffer[0]}} unless {{tt|buffer}} is a null pointer or {{tt|bufsz}} is zero or greater than RSIZE_MAX.

===Notes===
{{tt|ctime}} returns a pointer to static data and is not thread-safe. In addition, it modifies the static {{lc|tm}} object which may be shared with {{lc|gmtime}} and {{lc|localtime}}. POSIX marks this function obsolete and recommends {{lc|strftime}} instead. The C standard also recommends {{lc|strftime}} instead of {{tt|ctime}} and {{tt|ctime_s}} because {{tt|strftime}} is more flexible and locale-sensitive.

The behavior of {{tt|ctime}} may be undefined for the values of time_t that result in the string longer than 25 characters (e.g. year 10000).

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;time.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    time_t result = time(NULL);
    printf(&quot;%s&quot;, ctime(&amp;result));

#ifdef __STDC_LIB_EXT1__
    char str[26];
    ctime_s(str,sizeof str,&amp;result);
    printf(&quot;%s&quot;, str);
#endif
}
 | output=
Tue May 26 21:51:03 2015
Tue May 26 21:51:03 2015
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.3.2  | title=The ctime function | p=393}}
{{ref std | section=K.3.8.2.2 | title=The ctime_s function | p=626}}
{{ref std c99}}
{{ref std | section=7.23.3.2  | title=The ctime function | p=342}}
{{ref std c89}}
{{ref std | section=4.12.3.2  | title=The ctime function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc asctime}}
{{dsc inc | c/chrono/dsc strftime}}
{{dsc see cpp | cpp/chrono/c/ctime}}
{{dsc end}}

[[ar:c/chrono/ctime]]
[[cs:c/chrono/ctime]]
[[de:c/chrono/ctime]]
[[es:c/chrono/ctime]]
[[fr:c/chrono/ctime]]
[[it:c/chrono/ctime]]
[[ja:c/chrono/ctime]]
[[ko:c/chrono/ctime]]
[[pl:c/chrono/ctime]]
[[pt:c/chrono/ctime]]
[[ru:c/chrono/ctime]]
[[tr:c/chrono/ctime]]
[[zh:c/chrono/ctime]]</text>
      <sha1>3gdcpr8zey2s4fscuczuwjyb3ai5hbm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/difftime</title>
    <ns>0</ns>
    <id>6170</id>
    <revision>
      <id>80479</id>
      <parentid>80478</parentid>
      <timestamp>2015-08-15T14:29:40Z</timestamp>
      <contributor>
        <ip>82.166.22.94</ip>
      </contributor>
      <comment>Sorry my mistake.</comment>
      <text xml:space="preserve" bytes="1988">{{c/title| difftime}}
{{c/chrono/navbar}}
{{ddcl | header=time.h |
double difftime( time_t time_end, time_t time_beg );
}}

Computes difference between two calendar times as {{lc|time_t}} objects ({{c|time_end - time_beg}}) in seconds. If {{tt|time_end}} refers to time point before {{tt|time_beg}} then the result is negative.

===Parameters===
{{par begin}}
{{par | time_beg, time_end | times to compare}}
{{par end}}

===Return value===
Difference between two times in seconds.

===Notes===
On POSIX systems, {{lc|time_t}} is measured in seconds, and {{tt|difftime}} is equivalent to arithmetic subtraction, but C and C++ allow fractional units for {{tt|time_t}}.

===Example===
{{example
 | The following program computes the number of seconds that have passed since the beginning of the month.
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    time_t now;
    time(&amp;now);

    struct tm beg;
    beg = *localtime(&amp;now);

    // set beg to the beginning of the month
    beg.tm_hour = 0;
    beg.tm_min = 0;
    beg.tm_sec = 0;
    beg.tm_mday = 1;

    double seconds = difftime(now, mktime(&amp;beg));

    printf(&quot;%.f seconds have passed since the beginning of the month.\n&quot;, seconds);

    return 0;
}
 | output=
1937968 seconds have passed since the beginning of the month.
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.2.2 | title=The difftime function | p=390}}
{{ref std c99}}
{{ref std | section=7.23.2.2 | title=The difftime function | p=339}}
{{ref std c89}}
{{ref std | section=4.12.2.2 | title=The difftime function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/chrono/c/difftime}}
{{dsc end}}

[[ar:c/chrono/difftime]]
[[cs:c/chrono/difftime]]
[[de:c/chrono/difftime]]
[[es:c/chrono/difftime]]
[[fr:c/chrono/difftime]]
[[it:c/chrono/difftime]]
[[ja:c/chrono/difftime]]
[[ko:c/chrono/difftime]]
[[pl:c/chrono/difftime]]
[[pt:c/chrono/difftime]]
[[ru:c/chrono/difftime]]
[[tr:c/chrono/difftime]]
[[zh:c/chrono/difftime]]</text>
      <sha1>4ypl653adm8aqhs91h09bx2slx3fgsr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/gmtime</title>
    <ns>0</ns>
    <id>6163</id>
    <revision>
      <id>78747</id>
      <parentid>76448</parentid>
      <timestamp>2015-06-08T12:25:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2942">{{c/title| gmtime|gmtime_s}}
{{c/chrono/navbar}}
{{dcl begin}}
{{dcl header | time.h }} 
{{dcl | num=1 |
struct tm *gmtime( const time_t *time );
}}
{{dcl | num=2 | since=c11 |
struct tm *gmtime_s(const time_t *restrict time, struct tm *restrict result);
}}
{{dcl end}}

@1@ Converts given time since epoch (a {{lc|time_t}} value pointed to by {{tt|time}}) into calendar time, expressed in Coordinated Universal Time (UTC) in the {{rlp|tm|struct tm}} format. The result is stored in static storage and a pointer to that static storage is returned.
@2@ Same as {{v|1}}, except that the function uses user-provided storage {{tt|result}} for the result and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|time}} or {{tt|result}} is a null pointer
:As with all bounds-checked functions, {{tt|gmtime_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|time.h}}.

===Parameters===
{{par begin}}
{{par | time | pointer to a time_t object to convert}}
{{par | result | pointer to a struct tm object to store the result}}
{{par end}}

===Return value===
@1@ pointer to a static internal {{lc|tm}} object on success, or null pointer otherwise. The structure may be shared between {{lc|gmtime}}, {{lc|localtime}}, and {{lc|ctime}} and may be overwritten on each invocation.
@2@ copy of the {{tt|result}} pointer, or null pointer on error (which may be a runtime constraint violation or a failure to convert the specified time to UTC)

===Notes===
This function {{tt|gmtime}} may not be thread-safe.

POSIX requires that this function sets {{lc|errno}} to {{lc|EOVERFLOW}} if it fails because the argument is too large.

POSIX defines a thread-safe alternative [http://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html gmtime_r], which is similar to the C11 function {{tt|gmtime_s}}, except that it does not check the validity of its input parameters.

===Example===
{{c/chrono/gmtime_localtime_example}}

===References===
{{ref std c11}}
{{ref std | section=7.27.3.3  | title=The gmtime function | p=393-394}}
{{ref std | section=K.3.8.2.3 | title=The gmtime_s function | p=626-627}}
{{ref std c99}}
{{ref std | section=7.23.3.3  | title=The gmtime function | p=343}}
{{ref std c89}}
{{ref std | section=4.12.3.3  | title=The gmtime function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc localtime}}
{{dsc see cpp | cpp/chrono/c/gmtime}}
{{dsc end}}


[[ar:c/chrono/gmtime]]
[[cs:c/chrono/gmtime]]
[[de:c/chrono/gmtime]]
[[es:c/chrono/gmtime]]
[[fr:c/chrono/gmtime]]
[[it:c/chrono/gmtime]]
[[ja:c/chrono/gmtime]]
[[ko:c/chrono/gmtime]]
[[pl:c/chrono/gmtime]]
[[pt:c/chrono/gmtime]]
[[ru:c/chrono/gmtime]]
[[tr:c/chrono/gmtime]]
[[zh:c/chrono/gmtime]]</text>
      <sha1>l9ca5kghi5nd3ljar6jvvkg0rgynk68</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/localtime</title>
    <ns>0</ns>
    <id>6154</id>
    <revision>
      <id>78748</id>
      <parentid>76450</parentid>
      <timestamp>2015-06-08T12:27:42Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3016">{{c/title| localtime | localtime_s}}
{{c/chrono/navbar}}
{{dcl begin}}
{{dcl header | time.h }} 
{{dcl | num=1 |
struct tm *localtime( const time_t *time );
}}
{{dcl | num=2 | since=c11 |
struct tm *localtime_s(const time_t *restrict time, struct tm *restrict result);
}}
{{dcl end}}

@1@ Converts given time since epoch (a {{lc|time_t}} value pointed to by {{tt|time}}) into calendar time, expressed in local time, in the {{rlp|tm|struct tm}} format. The result is stored in static storage and a pointer to that static storage is returned.
@2@ Same as {{v|1}}, except that the function uses user-provided storage {{tt|result}} for the result and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|time}} or {{tt|result}} is a null pointer
:As with all bounds-checked functions, {{tt|localtime_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|time.h}}.

===Parameters===
{{par begin}}
{{par | time | pointer to a {{tt|time_t}} object to convert}}
{{par | result | pointer to a struct tm object to store the result}}
{{par end}}

===Return value===
@1@ pointer to a static internal {{lc|tm}} object on success, or null pointer otherwise. The structure may be shared between {{lc|gmtime}}, {{lc|localtime}}, and {{lc|ctime}} and may be overwritten on each invocation.
@2@ copy of the {{tt|result}} pointer, or null pointer on error (which may be a runtime constraint violation or a failure to convert the specified time to local calendar time)

===Notes===
This function {{tt|localtime}} may not be thread-safe.

POSIX requires that this function sets {{lc|errno}} to {{lc|EOVERFLOW}} if it fails because the argument is too large.

POSIX defines a thread-safe alternative
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html localtime_r], which is similar to the C11 function {{tt|localtime_s}}, except that it does not check the validity of its input parameters.

===Example===
{{c/chrono/gmtime_localtime_example}}


===References===
{{ref std c11}}
{{ref std | section=7.27.3.4  | title=The localtime function | p=394}}
{{ref std | section=K.3.8.2.4 | title=The localtime_s function | p=627}}
{{ref std c99}}
{{ref std | section=7.23.3.4  | title=The localtime function | p=343}}
{{ref std c89}}
{{ref std | section=4.12.3.4  | title=The localtime function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc gmtime}}
{{dsc see cpp | cpp/chrono/c/localtime}}
{{dsc end}}

[[ar:c/chrono/localtime]]
[[cs:c/chrono/localtime]]
[[de:c/chrono/localtime]]
[[es:c/chrono/localtime]]
[[fr:c/chrono/localtime]]
[[it:c/chrono/localtime]]
[[ja:c/chrono/localtime]]
[[ko:c/chrono/localtime]]
[[pl:c/chrono/localtime]]
[[pt:c/chrono/localtime]]
[[ru:c/chrono/localtime]]
[[tr:c/chrono/localtime]]
[[zh:c/chrono/localtime]]</text>
      <sha1>qub6yvpuqsl974z9kh0kzp13x8gvi09</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/mktime</title>
    <ns>0</ns>
    <id>6162</id>
    <revision>
      <id>85502</id>
      <parentid>78745</parentid>
      <timestamp>2016-04-22T15:55:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>upd example to show the effects on isdst (and also fix TZ so that it reproduces on coliru)</comment>
      <text xml:space="preserve" bytes="2970">{{c/title| mktime}}
{{c/chrono/navbar}}
{{ddcl | header=time.h |
time_t mktime( struct tm *time );
}}

Renormalizes local calendar time expressed as a {{lc|tm|struct tm}} object and also converts it to time since epoch as a {{lc|time_t}} object. {{tt|time-&gt;tm_wday}} and {{tt|time-&gt;tm_yday}} are ignored. The values in {{tt|time}} are not checked for being out of range.

A negative value of {{tt|time-&gt;tm_isdst}} causes {{tt|mktime}} to attempt to determine if Daylight Saving Time was in effect in the specified time.

If the conversion to {{tt|time_t}} is successful, the {{tt|time}} object is modified. All fields of {{tt|time}} are updated to fit their proper ranges. {{tt|time-&gt;tm_wday}} and {{tt|time-&gt;tm_yday}} are recalculated using information available in other fields.

===Parameters===
{{par begin}}
{{par | time | pointer to a {{lc|tm}} object specifying local calendar time to convert}}
{{par end}}

===Return value===
time since epoch as a {{lc|time_t}} object on success or {{c|-1}} if {{tt|time}} cannot be represented as a {{lc|time_t}} object (POSIX also requires {{tt|EOVERFLOW}} to be stored in {{lc|errno}} in this case).

===Notes===
If the {{lc|tm|struct tm}} object was obtained from POSIX [http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html strptime] or equivalent function, the value of {{tt|tm_isdst}} is indeterminate, and needs to be set explicitly before calling {{tt|mktime}}.

===Example===
{{example
 | 
 | code=
#define _POSIX_C_SOURCE 200112L // for setenv on gcc
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    setenv(&quot;TZ&quot;, &quot;/usr/share/zoneinfo/America/New_York&quot;, 1); // POSIX-specific

    struct tm tm = *localtime(&amp;(time_t){time(NULL)});
    printf(&quot;Today is           %s&quot;, asctime(&amp;tm));
    printf(&quot;(DST is %s)\n&quot;, tm.tm_isdst ? &quot;in effect&quot; : &quot;not in effect&quot;);
    tm.tm_mon -= 100;  // tm_mon is now outside its normal range
    mktime(&amp;tm);       // tm_dst is not set to -1; today's DST status is used
    printf(&quot;100 months ago was %s&quot;, asctime(&amp;tm));
    printf(&quot;(DST was %s)\n&quot;, tm.tm_isdst ? &quot;in effect&quot; : &quot;not in effect&quot;);
}
 | output=
Today is           Fri Apr 22 11:53:36 2016
(DST is in effect)
100 months ago was Sat Dec 22 10:53:36 2007
(DST was not in effect)
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.2.3 | title=The mktime function | p=390-391}}
{{ref std c99}}
{{ref std | section=7.23.2.3 | title=The mktime function | p=340-341}}
{{ref std c89}}
{{ref std | section=4.12.2.3 | title=The mktime function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc localtime}}
{{dsc see cpp | cpp/chrono/c/mktime}}
{{dsc end}}

[[ar:c/chrono/mktime]]
[[cs:c/chrono/mktime]]
[[de:c/chrono/mktime]]
[[es:c/chrono/mktime]]
[[fr:c/chrono/mktime]]
[[it:c/chrono/mktime]]
[[ja:c/chrono/mktime]]
[[ko:c/chrono/mktime]]
[[pl:c/chrono/mktime]]
[[pt:c/chrono/mktime]]
[[ru:c/chrono/mktime]]
[[tr:c/chrono/mktime]]
[[zh:c/chrono/mktime]]</text>
      <sha1>q6qsnpczm9hzt9lmpr2ganh8le00jq2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/strftime</title>
    <ns>0</ns>
    <id>6165</id>
    <revision>
      <id>78749</id>
      <parentid>78703</parentid>
      <timestamp>2015-06-08T12:30:24Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2990">{{c/title| strftime}}
{{c/chrono/navbar}}
{{dcl begin}}
{{dcl header | time.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
size_t strftime( char *         str, size_t count, 
                 const char *         format, const struct tm *         time );
}}
{{dcl | since=c99 |
size_t strftime( char *restrict str, size_t count, 
                 const char *restrict format, const struct tm *restrict time );
}}
{{dcl rev end}}
{{dcl end}}

Converts the date and time information from a given calendar time {{tt|time}} to a null-terminated multibyte character string {{tt|str}} according to format string {{tt|format}}. Up to {{tt|count}} bytes are written.

===Parameters===
{{par begin}}
{{par | str | pointer to the first element of the char array for output}}
{{par | count | maximum number of bytes to write}}
{{par | format | pointer to a null-terminated multibyte character string specifying the format of conversion. 
{{cpp/chrono/c/strftime format|c}}
}}
{{par | time | pointer to a struct tm object specifying the time to format}}
{{par end}}

===Return value===
The number of bytes written into the character array pointed to by {{tt|str}} not including the terminating {{c|'\0'}} on success. If {{tt|count}} was reached before the entire string could be stored, {{c|0}} is returned and the contents are undefined.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    char buff[70];
    struct tm my_time = { .tm_year=112, // = year 2012
                          .tm_mon=9,    // = 10th month
                          .tm_mday=9,   // = 9th day
                          .tm_hour=8,   // = 8 hours
                          .tm_min=10,   // = 10 minutes
                          .tm_sec=20    // = 20 secs
    };

    if (strftime(buff, sizeof buff, &quot;%A %c&quot;, &amp;my_time)) {
        puts(buff);
    } else {
        puts(&quot;strftime failed&quot;);
    }

    setlocale(LC_TIME, &quot;el_GR.utf8&quot;);

    if (strftime(buff, sizeof buff, &quot;%A %c&quot;, &amp;my_time)) {
        puts(buff);
    } else {
        puts(&quot;strftime failed&quot;);
    }
}
 | output=
Sunday Sun Oct  9 08:10:20 2012
Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.3.5 | title=The strftime function | p=394-397}}
{{ref std c99}}
{{ref std | section=7.23.3.5 | title=The strftime function | p=343-347}}
{{ref std c89}}
{{ref std | section=4.12.3.5 | title=The strftime function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc asctime}}
{{dsc inc | c/chrono/dsc ctime}}
{{dsc inc | c/chrono/dsc wcsftime}}
{{dsc see cpp | cpp/chrono/c/strftime}}
{{dsc end}}

[[ar:c/chrono/strftime]]
[[cs:c/chrono/strftime]]
[[de:c/chrono/strftime]]
[[es:c/chrono/strftime]]
[[fr:c/chrono/strftime]]
[[it:c/chrono/strftime]]
[[ja:c/chrono/strftime]]
[[ko:c/chrono/strftime]]
[[pl:c/chrono/strftime]]
[[pt:c/chrono/strftime]]
[[ru:c/chrono/strftime]]
[[tr:c/chrono/strftime]]
[[zh:c/chrono/strftime]]</text>
      <sha1>0eequ1u17sbe9xs0p1x4p3sbcssdl4l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/time</title>
    <ns>0</ns>
    <id>6169</id>
    <revision>
      <id>78024</id>
      <parentid>78022</parentid>
      <timestamp>2015-04-24T15:12:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missed one use of argument</comment>
      <text xml:space="preserve" bytes="2179">{{c/title| time}}
{{c/chrono/navbar}}
{{ddcl | header=time.h |
time_t time( time_t *arg );
}}

Returns the current calendar time encoded as a {{lc|time_t}} object, and also stores it in the {{lc|time_t}} object pointed to by {{tt|arg}} (unless {{tt|arg}} is a null pointer)

===Parameters===
{{par begin}}
{{par | arg | pointer to a {{lc|time_t}} object where the time will be stored, or a null pointer}}
{{par end}}

===Return value===

Current calendar time encoded as {{lc|time_t}} object on success, {{c|(time_t)(-1)}} on error. If {{tt|arg}} is not a null pointer, the return value is also stored in the object pointed to by  {{tt|arg}}.

===Notes===
The encoding of calendar time in {{lc|time_t}} is unspecified, but most systems conform to [http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html POSIX specification] and return a value of integral type holding the number of seconds since the Epoch. Implementations in which {{lc|time_t}} is a 32-bit signed integer (many historical implementations) fail in the year 2038.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;stdint.h&gt;

int main(void)
{
    time_t result = time(NULL);
    if(result != -1)
        printf(&quot;The current time is %s(%ju seconds since the Epoch)\n&quot;,
               asctime(gmtime(&amp;result)), (uintmax_t)result);
}
 | p=true | output=
The current time is Fri Apr 24 15:05:25 2015
(1429887925 seconds since the Epoch)
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.2.4 | title=The time function | p=391}}
{{ref std c99}}
{{ref std | section=7.23.2.4 | title=The time function | p=341}}
{{ref std c89}}
{{ref std | section=4.12.2.4 | title=The time function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc localtime}}
{{dsc inc | c/chrono/dsc gmtime}}
{{dsc inc | c/chrono/dsc timespec_get}}
{{dsc see cpp | cpp/chrono/c/time}}
{{dsc end}}

[[ar:c/chrono/time]]
[[cs:c/chrono/time]]
[[de:c/chrono/time]]
[[es:c/chrono/time]]
[[fr:c/chrono/time]]
[[it:c/chrono/time]]
[[ja:c/chrono/time]]
[[ko:c/chrono/time]]
[[pl:c/chrono/time]]
[[pt:c/chrono/time]]
[[ru:c/chrono/time]]
[[tr:c/chrono/time]]
[[zh:c/chrono/time]]</text>
      <sha1>qte6nwq80vjfvvfplhcu94z7fe5wqef</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/time t</title>
    <ns>0</ns>
    <id>6156</id>
    <revision>
      <id>78752</id>
      <parentid>78091</parentid>
      <timestamp>2015-06-08T12:47:02Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1614">{{c/title|time_t}}
{{c/chrono/navbar}}
{{ddcl | header=time.h | 1=
typedef /* unspecified */ time_t;
}}
{{rev inl|until=c11|Arithmetic}} {{rev inl|since=c11|Real}} type capable of representing times.

Although not defined by the C standard, this is almost always an integral value holding the number of seconds (not counting leap seconds) since 00:00, Jan 1 1970 UTC, corresponding to [[enwiki:Unix_time | POSIX time]].

===Notes===
The standard uses the term ''calendar time'' when referring to a value of type {{lc|time_t}}.

===Example===
{{example
 | Show the start of the epoch.
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    time_t epoch = 0;
    printf(&quot;%ld seconds since the epoch began\n&quot;, (long)epoch);
    printf(&quot;%s&quot;, asctime(gmtime(&amp;epoch)));
}
 | p=true
 | output=
0 seconds since the epoch began
Thu Jan  1 00:00:00 1970
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.1/3 | title=Components of time | p=388}}
{{ref std c99}}
{{ref std | section=7.23.1/3 | title=Components of time | p=338}}
{{ref std c89}}
{{ref std | section=4.12.1   | title=Components of time}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc time}}
{{dsc inc | c/chrono/dsc localtime}}
{{dsc inc | c/chrono/dsc gmtime}}
{{dsc see cpp | cpp/chrono/c/time_t}}
{{dsc end}}

[[ar:c/chrono/time_t]]
[[cs:c/chrono/time_t]]
[[de:c/chrono/time_t]]
[[es:c/chrono/time_t]]
[[fr:c/chrono/time_t]]
[[it:c/chrono/time_t]]
[[ja:c/chrono/time_t]]
[[ko:c/chrono/time_t]]
[[pl:c/chrono/time_t]]
[[pt:c/chrono/time_t]]
[[ru:c/chrono/time_t]]
[[tr:c/chrono/time_t]]
[[zh:c/chrono/time_t]]</text>
      <sha1>912sm16r9szh58iad8vualjtbieawk3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/timespec</title>
    <ns>0</ns>
    <id>13942</id>
    <revision>
      <id>86500</id>
      <parentid>77521</parentid>
      <timestamp>2016-07-05T01:24:48Z</timestamp>
      <contributor>
        <username>Gubbins</username>
        <id>3701</id>
      </contributor>
      <minor/>
      <comment>formatting a bit cleaner (looked odd with the long dashes)</comment>
      <text xml:space="preserve" bytes="969">{{c/title| timespec}}
{{c/chrono/navbar}}

{{ddcl | header=time.h | since=c11 |
struct timespec;
}}
Structure holding an interval broken down into seconds and nanoseconds.

===Member objects===
{{dsc begin}}
{{dsc | nolink=true | {{dsc small|time_t}} tv_sec | 2=whole seconds (valid values are &amp;gt;= 0)}}
{{dsc | nolink=true | {{dsc small|long}} tv_nsec | nanoseconds (valid values are [0, 999999999])}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.27.1/3 | title=Components of time | p=388}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc timespec_get}}
{{dsc inc | c/chrono/dsc tm}}
{{dsc end}}

[[ar:c/chrono/timespec]]
[[cs:c/chrono/timespec]]
[[de:c/chrono/timespec]]
[[es:c/chrono/timespec]]
[[fr:c/chrono/timespec]]
[[it:c/chrono/timespec]]
[[ja:c/chrono/timespec]]
[[ko:c/chrono/timespec]]
[[pl:c/chrono/timespec]]
[[pt:c/chrono/timespec]]
[[ru:c/chrono/timespec]]
[[tr:c/chrono/timespec]]
[[zh:c/chrono/timespec]]</text>
      <sha1>n23loqx2s3bun78e8ujzlr6ut5r0j0r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/timespec get</title>
    <ns>0</ns>
    <id>13933</id>
    <revision>
      <id>76435</id>
      <parentid>76434</parentid>
      <timestamp>2015-02-18T14:36:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2297">{{c/title| timespec_get}}
{{c/chrono/navbar}}
{{dcl begin}}
{{dcl header| time.h}}
{{dcl | since=c11| int timespec_get( struct timespec *ts, int base) }}
{{dcl | since=c11|#define TIME_UTC /* implementation-defined */ }}
{{dcl end}}
@1@ Modifies the {{lc|timespec}} object pointed to by {{tt|ts}} to hold the current calendar time in the time base {{tt|base}}.
@2@ Expands to a value suitable for use as the {{tt|base}} argument of {{tt|timespec_get}}

Other macro constants beginning with {{tt|TIME_}} may be provided by the implementation to indicate additional time bases

If {{tt|base}} is {{tt|TIME_UTC}}, then
* ts-&gt;tv_sec is set to the number of seconds since an implementation defined epoch, truncated to a whole value
* ts-&gt;tv_nsec member is set to the integral number of nanoseconds, rounded to the resolution of the system clock

===Parameters===
{{par begin}}
{{par | ts | pointer to an object of type {{c|struct timespec}} }}
{{par | base | {{tt|TIME_UTC}} or another nonzero integer value indicating the time base}}
{{par end}}

===Return value===
The value of {{tt|base}} if successful, zero otherwise.

===Notes===
The POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html clock_gettime(CLOCK_REALTIME, ts)] may also be used to populate a {{tt|timespec}} with the time since the Epoch.

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    struct timespec ts;
    timespec_get(&amp;ts, TIME_UTC);
    char buff[100];
    strftime(buff, sizeof buff, &quot;%D %T&quot;, gmtime(&amp;ts.tv_sec));
    printf(&quot;Current time: %s.%09ld UTC\n&quot;, buff, ts.tv_nsec);
}
|output=
Current time: 02/18/15 14:34:03.048508855 UTC
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.2.5 | title=The timespec_get function | p=390}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc timespec}}
{{dsc inc | c/chrono/dsc time}}
{{dsc end}}

[[ar:c/chrono/timespec_get]]
[[cs:c/chrono/timespec_get]]
[[de:c/chrono/timespec_get]]
[[es:c/chrono/timespec_get]]
[[fr:c/chrono/timespec_get]]
[[it:c/chrono/timespec_get]]
[[ja:c/chrono/timespec_get]]
[[ko:c/chrono/timespec_get]]
[[pl:c/chrono/timespec_get]]
[[pt:c/chrono/timespec_get]]
[[ru:c/chrono/timespec_get]]
[[tr:c/chrono/timespec_get]]
[[zh:c/chrono/timespec_get]]</text>
      <sha1>ityzs3shubyn0nwsyzmedlgnrzv2d03</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/tm</title>
    <ns>0</ns>
    <id>6157</id>
    <revision>
      <id>86475</id>
      <parentid>86473</parentid>
      <timestamp>2016-07-03T04:01:39Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 86473 by [[Special:Contributions/59.40.123.77|59.40.123.77]] ([[User talk:59.40.123.77|talk]])</comment>
      <text xml:space="preserve" bytes="2266">{{c/title| tm}}
{{c/chrono/navbar}}

{{ddcl | header=time.h |
struct tm;
}}
Structure holding a calendar date and time broken down into its components.

===Member objects===
{{dsc begin}}
{{dsc | nolink=true | {{dsc small|int}} tm_sec | seconds after the minute &amp;ndash; [0, 61]{{mark until c99}} / [0, 60] {{mark since c99}}&lt;ref name=&quot;leapsecond&quot; group=&quot;note&quot;&gt;Range allows for a positive leap second. Two leap seconds in the same minute are not allowed (the C90 range 0..61 was a defect)&lt;/ref&gt;}}
{{dsc | nolink=true | {{dsc small|int}} tm_min | minutes after the hour &amp;ndash; [0, 59]}}
{{dsc | nolink=true | {{dsc small|int}} tm_hour | hours since midnight &amp;ndash; [0, 23]}}
{{dsc | nolink=true | {{dsc small|int}} tm_mday | day of the month &amp;ndash; [1, 31]}}
{{dsc | nolink=true | {{dsc small|int}} tm_mon | months since January &amp;ndash; [0, 11]}}
{{dsc | nolink=true | {{dsc small|int}} tm_year | years since 1900}}
{{dsc | nolink=true | {{dsc small|int}} tm_wday | days since Sunday &amp;ndash; [0, 6]}}
{{dsc | nolink=true | {{dsc small|int}} tm_yday | days since January 1 &amp;ndash; [0, 365]}}
{{dsc | nolink=true | {{dsc small|int}} tm_isdst | Daylight Saving Time flag. The value is positive if DST is in effect, zero if not and negative if no information is available}}
{{dsc end}}

======Notes======
&lt;references group=&quot;note&quot; /&gt;

===Example===
{{example
 | Show the start of calendar time.
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
 
int main(void)
{
    struct tm start = {.tm_mday=1};
    mktime(&amp;start);
    printf(&quot;%s\n&quot;, asctime(&amp;start));
}
 | p=true
 | output=
Mon Jan  1 00:00:00 1900
}}

===References===
{{ref std c11}}
{{ref std | section=7.27.1/3 | title=Components of time | p=388}}
{{ref std c99}}
{{ref std | section=7.23.1/3 | title=Components of time | p=338}}
{{ref std c89}}
{{ref std | section=4.12.1   | title=Components of time}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc localtime}}
{{dsc inc | c/chrono/dsc gmtime}}
{{dsc see cpp | cpp/chrono/c/tm}}
{{dsc end}}

[[ar:c/chrono/tm]]
[[cs:c/chrono/tm]]
[[de:c/chrono/tm]]
[[es:c/chrono/tm]]
[[fr:c/chrono/tm]]
[[it:c/chrono/tm]]
[[ja:c/chrono/tm]]
[[ko:c/chrono/tm]]
[[pl:c/chrono/tm]]
[[pt:c/chrono/tm]]
[[ru:c/chrono/tm]]
[[tr:c/chrono/tm]]
[[zh:c/chrono/tm]]</text>
      <sha1>rgu8diwi77l6ogedukd84flrp9cnzox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/chrono/wcsftime</title>
    <ns>0</ns>
    <id>6164</id>
    <revision>
      <id>76444</id>
      <parentid>74568</parentid>
      <timestamp>2015-02-18T16:38:22Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2558">{{c/title| wcsftime}}
{{c/chrono/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
size_t wcsftime( wchar_t* str, size_t count, const wchar_t* format, tm* time );
}}

Converts the date and time information from a given calendar time {{tt|time}} to a null-terminated wide character string {{tt|str}} according to format string {{tt|format}}. Up to {{tt|count}} bytes are written.

===Parameters===
{{par begin}}
{{par | str | pointer to the first element of the wchar_t array for output}}
{{par | count | maximum number of wide characters to write}}
{{par | format | pointer to a null-terminated wide character string specifying the format of conversion. 
{{cpp/chrono/c/strftime format|c}}
}}
{{par end}}

===Return value===

number of wide characters written into the wide character array pointed to by {{tt|str}} not including the terminating {{c|L'\0'}} on success. If {{tt|count}} was reached before the entire string could be stored, {{c|0}} is returned and the contents are undefined.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t buff[40];
    struct tm my_time = { .tm_year=112, // = year 2012
                          .tm_mon=9,    // = 10th month
                          .tm_mday=9,   // = 9th day
                          .tm_hour=8,   // = 8 hours
                          .tm_min=10,   // = 10 minutes
                          .tm_sec=20    // = 20 secs
    };

    if (wcsftime(buff, sizeof buff, L&quot;%A %c&quot;, &amp;my_time)) {
        printf(&quot;%ls\n&quot;, buff);
    } else {
        puts(&quot;wcsftime failed&quot;);
    }

    setlocale(LC_ALL, &quot;ja_JP.utf8&quot;);

    if (wcsftime(buff, sizeof buff, L&quot;%A %c&quot;, &amp;my_time)) {
        printf(&quot;%ls\n&quot;, buff);
    } else {
        puts(&quot;wcsftime failed&quot;);
    }
}
 | output=
Sunday Sun Oct  9 08:10:20 2012
日曜日 2012年10月09日 08時10分20秒
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.5.1 | title=The wcsftime function | p=439-440}}
{{ref std c99}}
{{ref std | section=7.24.5.1 | title=The wcsftime function | p=385-386}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/chrono/dsc strftime}}
{{dsc see cpp | cpp/chrono/c/wcsftime}}
{{dsc end}}

[[ar:c/chrono/wcsftime]]
[[cs:c/chrono/wcsftime]]
[[de:c/chrono/wcsftime]]
[[es:c/chrono/wcsftime]]
[[fr:c/chrono/wcsftime]]
[[it:c/chrono/wcsftime]]
[[ja:c/chrono/wcsftime]]
[[ko:c/chrono/wcsftime]]
[[pl:c/chrono/wcsftime]]
[[pt:c/chrono/wcsftime]]
[[ru:c/chrono/wcsftime]]
[[tr:c/chrono/wcsftime]]
[[zh:c/chrono/wcsftime]]</text>
      <sha1>26hm6wqy5gsl6fg67ct79vn16u4x5qt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/comment</title>
    <ns>0</ns>
    <id>13869</id>
    <revision>
      <id>76087</id>
      <parentid>76086</parentid>
      <timestamp>2015-02-09T17:52:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+c89 in refs</comment>
      <text xml:space="preserve" bytes="4788">{{title|Comments}}
{{c/language/basics/navbar}}
Comments serve as a sort of in-code documentation. When inserted into a program, they are effectively ignored by the compiler; they are solely intended to be used as notes by the humans that read source code.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|/*}} {{spar|comment}} {{ttb|*/}} }}
{{sdsc | num=2 | notes={{mark since c99}} | {{ttb|//}} {{spar|comment}}\n }}
{{sdsc end}}
@1@ Often known as &quot;C-style&quot; or &quot;multi-line&quot; comments.
@2@ Often known as &quot;C++-style&quot; or &quot;single-line&quot; comments.

All comments are removed from the program at [[c/language/translation phases|translation phase 3]] by replacing each comment with a single whitespace character.

===C-style===
C-style comments are usually used to comment large blocks of text or small fragments of code; however, they can be used to comment single lines. To insert text as a C-style comment, simply surround the text with {{tt|/*}} and {{tt|*/}}. C-style comments tell the compiler to ignore all content between {{tt|/*}} and {{tt|*/}}. Although it is not part of the C standard, {{tt|/**}} and {{tt|*/}} are often used to indicate documentation blocks; this is legal because the second asterisk is simply treated as part of the comment.

Except within a [[c/language/character constant|character constant]], a [[c/language/string literal|string literal]], or a comment, the characters {{tt|/*}} introduce a comment. The contents of such a comment are examined only to identify multibyte characters and to find the characters {{tt|*/}} that terminate the comment. C-style comments cannot be nested.

{{rev begin}}
{{rev|since=c99|
===C++-style===
C++-style comments are usually used to comment single lines of text or code; however, they can be placed together to form multi-line comments. To insert text as a C++-style comment, simply precede the text with {{tt|//}} and follow the text with the new line character. C++-style comments tell the compiler to ignore all content between {{tt|//}} and a new line.

Except within a [[c/language/character constant|character constant]], a [[c/language/string literal|string literal]], or a comment, the characters {{tt|//}}
introduce a comment that includes all multibyte characters up to, but not including, the next new-line character. The contents of such a comment are examined only to identify
multibyte characters and to find the new-line character that terminates the comment. C++-style comments can be nested:

{{source|1=
//  y = f(x);   // invoke algorithm
}}

A C-style comment may appear within a C++-style comment:
{{source|1=
//  y = f(x);   /* invoke algorithm */
}}

A C++-style comment may appear within a C-style comment; this is a mechanism for excluding a small block of source code:
{{source|1=
/*
    y = f(x);   // invoke algorithms
    z = g(x);
*/
}}

}}
{{rev end}}

===Notes===
Because comments [[c/language/translation phases|are removed]] before the preprocessor stage, a macro cannot be used to form a comment and an unterminated C-style comment doesn't spill over from an #include'd file.

{{source|1=
/* An attempt to use a macro to form a comment. */
/* But, a space replaces characters &quot;//&quot;.       */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
...  
PRINTF(&quot;Error in file %s at line %i\n&quot;, __FILE__, __LINE__);
}}

Besides commenting out, other mechanisms used for source code exclusion are:
{{source|1=
#if 0
    puts(&quot;this will not be compiled&quot;);
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
#endif
}}
and
{{source|1=
if(0) {
    puts(&quot;this will be compiled but not be executed&quot;);
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
}
}}

The introduction of // comments in C99 was a breaking change in some rare circumstances:
{{source|1=
a = b //*divisor:*/ c
+ d; /* C89 compiles a = b / c + d;
        C99 compiles a = b + d; */
}}

===Example===
{{example|
|code=
/*
C-style comments can contain
multiple lines.
*/

/* Or, just one line. */

// C++-style comments can comment one line.

// Or, they can
// be strung together.

int main(void)
{
  // The below code won't be run
  // return 1;

  // The below code will be run
  return 0;
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.4.9 | title=Comments | p=75}}
{{ref std c99}}
{{ref std | section=6.4.9 | title=Comments | p=66}}
{{ref std c89}}
{{ref std | section=3.1.9 | title=Comments}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/comments | Comments}}
{{dsc end}}

[[ar:c/comment]]
[[cs:c/comment]]
[[de:c/comment]]
[[es:c/comment]]
[[fr:c/comment]]
[[it:c/comment]]
[[ja:c/comment]]
[[ko:c/comment]]
[[pl:c/comment]]
[[pt:c/comment]]
[[ru:c/comment]]
[[tr:c/comment]]
[[zh:c/comment]]</text>
      <sha1>rdh0q2v39dvm6kumyeu8sxoc53kn57w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error</title>
    <ns>0</ns>
    <id>6398</id>
    <revision>
      <id>78959</id>
      <parentid>78722</parentid>
      <timestamp>2015-06-13T10:38:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>+refs to future library directions</comment>
      <text xml:space="preserve" bytes="3865">{{title|Error handling}}
{{c/error/navbar}}

===Error numbers===
{{dsc begin}}
{{dsc header | errno.h}}
{{dsc inc | c/error/dsc errno}}
{{dsc inc | c/error/dsc errno_macros}}
{{dsc end}}

===Assertions===
{{dsc begin}}
{{dsc header | assert.h}}
{{dsc inc | c/error/dsc assert}}
{{dsc macro fun | c/error/static_assert | issues a compile-time diagnostic if the value of a constant expression is false | notes={{mark c11}} }}
{{dsc end}}

{{rev begin}}
{{rev|since=c11|
===Bounds checking===
The standard library provides bounds-checked versions of some existing functions ({{lc|gets|gets_s}}, {{lc|fopen|fopen_s}}, {{lc|printf|printf_s}}, {{lc|strcpy|strcpy_s}}, {{lc|wcscpy|wcscpy_s}}, {{lc|mbstowcs|mbstowcs_s}}, {{lc|qsort|qsort_s}}, {{lc|getenv|getenv_s}}, etc). This functionality is optional and is only available if {{c|__STDC_LIB_EXT1__}} is defined. The following macros and functions support this functionality.
{{dsc begin}}
{{dsc header | errno.h}}
{{dsc header | stdio.h}}
{{dsc typedef | errno_t | nolink=true | a typedef for the type {{c|int}}, used to self-document functions that return {{lc|errno}} values | notes={{mark c11}}}}
{{dsc header | stddef.h}}
{{dsc typedef | rsize_t | nolink=true | a typedef for the same type as {{lc|size_t}}, used to self-document functions that range-check their parameters at runtime | notes={{mark c11}}}}
{{dsc header | stdint.h}}
{{dsc | {{dsc member | RSIZE_MAX | notes={{mark c11}} | nolink=true }} | largest acceptable size for bounds-checked functions, expands to either constant or variable which may change at runtime (e.g. as the currently allocated memory size changes)&lt;br/&gt;{{mark|macro variable}} }}
{{dsc header | stdlib.h}}
{{dsc inc | c/error/set_constraint_handler_s}}
{{dsc inc | c/error/abort_handler_s}}
{{dsc inc | c/error/ignore_handler_s}}
{{dsc end}}
}}
{{rev end}}

===References===
{{ref std c11}}
{{ref std | section=7.2  | title=Diagnostics &lt;assert.h&gt; | p=186-187}}
{{ref std | section=7.5  | title=Errors &lt;errno.h&gt; | p=205}}
{{ref std | section=7.19 | title=Common definitions &lt;stddef.h&gt; | p=288}}
{{ref std | section=7.20 | title=Integer types &lt;stdint.h&gt;| p=289-295}}
{{ref std | section=7.21 | title=Input/output &lt;stdio.h&gt; | p=296-339}}
{{ref std | section=7.22 | title=General utilities &lt;stdlib.h&gt;| p=340-360}}
{{ref std | section=K.3.1.3 | title=Use of errno | p=584}}
{{ref std | section=K.3.2/2 | title=errno_t | p=585}}
{{ref std | section=K.3.3/2 | title=rsize_t | p=585}}
{{ref std | section=K.3.4/2 | title=RSIZE_MAX | p=585}}
{{ref std | section=7.31.3  | title=Errors &lt;errno.h&gt; | p=455}}
{{ref std | section=7.31.10 | title=Integer types &lt;stdint.h&gt;| p=456}}
{{ref std | section=7.31.11 | title=Input/output &lt;stdio.h&gt; | p=456}}
{{ref std | section=7.31.12 | title=General utilities &lt;stdlib.h&gt;| p=456}}
{{ref std c99}}
{{ref std | section=7.2  | title=Diagnostics &lt;assert.h&gt; | p=169}}
{{ref std | section=7.5  | title=Errors &lt;errno.h&gt; | p=186}}
{{ref std | section=7.26.3  | title=Errors &lt;errno.h&gt; | p=401}}
{{ref std | section=7.26.8  | title=Integer types &lt;stdint.h&gt;| p=401}}
{{ref std | section=7.26.9  | title=Input/output &lt;stdio.h&gt; | p=402}}
{{ref std | section=7.26.10 | title=General utilities &lt;stdlib.h&gt;| p=402}}
{{ref std c89}}
{{ref std | section=4.2   | title=DIAGNOSTICS &lt;assert.h&gt;}}
{{ref std | section=4.1.3 | title=Errors &lt;errno.h&gt;}}
{{ref std | section=4.13.1 | title=Errors &lt;errno.h&gt;}}
{{ref std | section=4.13.6 | title=Input/output &lt;stdio.h&gt;}}
{{ref std | section=4.13.7 | title=General utilities &lt;stdlib.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc math_errhandling}}
{{dsc see cpp | cpp/error |Error handling}}
{{dsc end}}

[[ar:c/error]]
[[cs:c/error]]
[[de:c/error]]
[[es:c/error]]
[[fr:c/error]]
[[it:c/error]]
[[ja:c/error]]
[[ko:c/error]]
[[pl:c/error]]
[[pt:c/error]]
[[ru:c/error]]
[[tr:c/error]]
[[zh:c/error]]</text>
      <sha1>b4sm800jprs6qu1ujg0lue9epwwn2tv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/ Static assert</title>
    <ns>0</ns>
    <id>13540</id>
    <redirect title="c/keyword/ Static assert" />
    <revision>
      <id>70416</id>
      <timestamp>2014-05-22T13:35:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[c/error/ Static assert]] to [[c/keyword/ Static assert]]: keywords belong to /c/keyword or /c/language</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[c/keyword/ Static assert]]</text>
      <sha1>6a9cpws1hffm3n5vd550jqk22vnyk1z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/abort handler s</title>
    <ns>0</ns>
    <id>13994</id>
    <revision>
      <id>78577</id>
      <parentid>76349</parentid>
      <timestamp>2015-05-27T02:10:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>templatize example</comment>
      <text xml:space="preserve" bytes="2223">{{c/title|abort_handler_s}}
{{c/error/navbar}}
{{ddcl | header=stdlib.h | since=c11 | 
void abort_handler_s( const char * restrict msg,
                      void * restrict ptr,
                      errno_t error
                    );
}}

Writes an implementation-defined message to {{lc|stderr}} which must include the string pointed to by {{tt|msg}} and calls {{lc|abort()}}.

A pointer to this function can be passed to {{rlp|set_constraint_handler_s}} to establish a runtime constraints violation handler.

:As with all bounds-checked functions, {{tt|abort_handler_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdlib.h&gt;}}.

===Parameters===
{{par begin}}
{{par | msg   | pointer to the message written to the standard error stream }}
{{par | ptr   | pointer to an implementation-defined object or a null pointer. Examples of implementation-defined objects are objects that give the name of the function that detected the violation and the line number when the violation was detected }}
{{par | error | a positive value of type errno_t }}
{{par end}}

===Return value===
none; this function does not return to its caller

===Notes===
If {{tt|set_constraint_handler_s}} is never called, the default handler is implementation-defined: it may be {{lc|abort_handler_s}}, {{lc|ignore_handler_s}}, or some other implementation-defined handler.

===Example===
{{c/error/set_constraint_handler_example}}

===References===
{{ref std c11}}
{{ref std | section=K.3.6.1.2  | title=The abort_handler_s function | p=605}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/error/ignore_handler_s}}
{{dsc inc | c/error/set_constraint_handler_s}}
{{dsc end}}

[[ar:c/error/abort_handler_s]]
[[cs:c/error/abort_handler_s]]
[[de:c/error/abort_handler_s]]
[[es:c/error/abort_handler_s]]
[[fr:c/error/abort_handler_s]]
[[it:c/error/abort_handler_s]]
[[ja:c/error/abort_handler_s]]
[[ko:c/error/abort_handler_s]]
[[pl:c/error/abort_handler_s]]
[[pt:c/error/abort_handler_s]]
[[ru:c/error/abort_handler_s]]
[[tr:c/error/abort_handler_s]]
[[zh:c/error/abort_handler_s]]</text>
      <sha1>aws1md0iapocqc072wqi6ou01desws4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/assert</title>
    <ns>0</ns>
    <id>6405</id>
    <revision>
      <id>78721</id>
      <parentid>76334</parentid>
      <timestamp>2015-06-07T18:39:21Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2213">{{title|assert}}
{{c/error/navbar}}
{{ddcl | header=assert.h | 
#ifdef NDEBUG
#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/
#endif
}}

The definition of the macro {{tt|assert}} depends on another macro, {{c|NDEBUG}}, which is not defined by the standard library.

If {{c|NDEBUG}} is defined as a macro name at the point in the source code where {{tt|&lt;assert.h&gt;}} is included, then {{tt|assert}} does nothing.

If {{c|NDEBUG}} is not defined, then {{tt|assert}} checks if its argument (which must have scalar type) compares equal to zero. If it does, {{tt|assert}} outputs implementation-specific diagnostic information on the standard error output and calls {{c|abort()}}. The diagnostic information is required to include the text of {{tt|expression}}, as well as the values of the [[c/preprocessor/replace|standard macros]] {{c|__FILE__}},  {{c|__LINE__}}{{rev inl|since=c99|, and the [[c/language/function_definition|predefined variable]] {{c|__func__}}.}}

===Parameters===
{{par begin}}
{{par | condition | expression of scalar type}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
// uncomment to disable assert()
// #define NDEBUG
#include &lt;assert.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    double x = -1.0;
    assert(x &gt;= 0.0);
    printf(&quot;sqrt(x) = %f\n&quot;, sqrt(x));   

    return 0;
}
 | output=
output with NDEBUG not defined:
a.out: main.cpp:10: main: Assertion `x &gt;= 0.0' failed.

output with NDEBUG defined:
sqrt(x) = -nan
}}

===References===
{{ref std c11}}
{{ref std | section=7.2.1.1  | title=The assert macro | p=186-187}}
{{ref std c99}}
{{ref std | section=7.2.1.1  | title=The assert macro | p=169}}
{{ref std c89}}
{{ref std | section=4.2.1.1  | title=The assert macro}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc abort}}
{{dsc see cpp | cpp/error/assert |assert}}
{{dsc end}}

[[ar:c/error/assert]]
[[cs:c/error/assert]]
[[de:c/error/assert]]
[[es:c/error/assert]]
[[fr:c/error/assert]]
[[it:c/error/assert]]
[[ja:c/error/assert]]
[[ko:c/error/assert]]
[[pl:c/error/assert]]
[[pt:c/error/assert]]
[[ru:c/error/assert]]
[[tr:c/error/assert]]
[[zh:c/error/assert]]</text>
      <sha1>ooqb1v8c7vao7ghq203xvr0ox12skny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/errno</title>
    <ns>0</ns>
    <id>6403</id>
    <revision>
      <id>78762</id>
      <parentid>78719</parentid>
      <timestamp>2015-06-08T13:37:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mark thread-local with c11, one example per page</comment>
      <text xml:space="preserve" bytes="2586">{{title|errno}}
{{c/error/navbar}}
{{dcl begin}}
{{dcl header | errno.h}}
{{dcl |
#define errno /*implementation-defined*/
}}
{{dcl end}}

{{tt|errno}} is a preprocessor macro that expands to a {{rev inl|since=c11|thread-local}} modifiable lvalue of type {{c|int}}. Several standard library functions indicate errors by writing positive integers to {{tt|errno}}. Typically, the value of {{tt|errno}} is set to one of the error codes listed in {{tt|&lt;errno.h&gt;}} as macro constants beginning with the letter {{tt|E}} followed by uppercase letters or digits.

The value of {{tt|errno}} is {{c|0}} at program startup, and although library functions are allowed to write positive integers to {{tt|errno}} whether or not an error occurred, library functions never store {{c|0}} in {{tt|errno}}.

Library functions {{lc|perror}} and {{lc|strerror}} can be used to obtain textual descriptions of the error conditions that correspond to the current {{tt|errno}} value.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
 
void show_errno(void)
{
    if(errno==EDOM)   printf(&quot;domain error&quot;);
    if(errno==EILSEQ) printf(&quot;illegal sequence&quot;);    
    if(errno==ERANGE) printf(&quot;pole or range error&quot;);
    if(errno==0)      printf(&quot;no error&quot;);
    printf(&quot; occurred\n&quot;);
}
 
int main(void)
{
    printf(&quot;MATH_ERRNO is %s\n&quot;, math_errhandling &amp; MATH_ERRNO ? &quot;set&quot; : &quot;not set&quot;);

    errno = 0;
    1.0/0.0;
    show_errno();

    errno = 0;
    acos(+1.1);
    show_errno();
    
    errno = 0;
    log(0.0);
    show_errno();
    
    errno = 0;
    sin(0.0);
    show_errno();
}
 | output=
MATH_ERRNO is set
pole or range error occurred
domain error occurred
pole or range error occurred
no error occurred
}}

===References===
{{ref std c11}}
{{ref std | section=7.5  | title=Errors &lt;errno.h&gt; | p=205}}
{{ref std | section=K.3.1.3 | title=Use of errno | p=584}}
{{ref std | section=K.3.2 | title=Errors &lt;errno.h&gt; | p=585}}
{{ref std c99}}
{{ref std | section=7.5  | title=Errors &lt;errno.h&gt; | p=186}}
{{ref std c89}}
{{ref std | section=4.1.3 | title=Errors &lt;errno.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/error/dsc errno_macros}}
{{dsc inc | c/io/dsc perror}}
{{dsc inc | c/string/byte/dsc strerror}}
{{dsc inc | c/numeric/math/dsc math_errhandling}}
{{dsc end}}

[[ar:c/error/errno]]
[[cs:c/error/errno]]
[[de:c/error/errno]]
[[es:c/error/errno]]
[[fr:c/error/errno]]
[[it:c/error/errno]]
[[ja:c/error/errno]]
[[ko:c/error/errno]]
[[pl:c/error/errno]]
[[pt:c/error/errno]]
[[ru:c/error/errno]]
[[tr:c/error/errno]]
[[zh:c/error/errno]]</text>
      <sha1>nu1see5gfy5zomugbn6x7gd2kw8zi98</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/errno macros</title>
    <ns>0</ns>
    <id>6404</id>
    <revision>
      <id>90151</id>
      <parentid>90146</parentid>
      <timestamp>2017-02-07T09:22:43Z</timestamp>
      <contributor>
        <ip>36.149.1.131</ip>
      </contributor>
      <text xml:space="preserve" bytes="2293">{{title|Error numbers}}
{{c/error/navbar}}

Each of the macros defined in {{tt|&lt;errno.h&gt;}} expands to an integer constant expression with type {{c|int}} and with a unique positive value. The following constants are defined by ISO C. The implementation may define more, as long as they begin with {{c|'E'}} followed by digits or uppercase letters.

{{dsc begin}}
{{dsc header | errno.h}}
{{dsc macro const | EDOM             | nolink=true|                     Mathematics argument out of domain of function}}
{{dsc macro const | EILSEQ           | nolink=true| notes={{mark c95}}| Illegal byte sequence}}
{{dsc macro const | ERANGE           | nolink=true|                     Result too large}}
{{dsc end}}

===Notes===
Many additional errno constants are [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html defined by POSIX] and by the [[cpp/error/errno_macros|C++ standard library]], and individual implementations may define even more, e.g. {{tt|errno(3)}} on Linux or {{tt|intro(2)}} on BSD and OS X.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;string.h&gt;

int main(void)
{
    errno = 0;
    printf(&quot;log(-1.0) = %f\n&quot;, log(-1.0));
    printf(&quot;%s\n\n&quot;,strerror(errno));
 
    errno = 0;
    printf(&quot;log(0.0)  = %f\n&quot;, log(0.0));
    printf(&quot;%s\n&quot;,strerror(errno));
}
 | p=true
 | output=
log(-1.0) = nan
Numerical argument out of domain

log(0.0)  = -inf
Numerical result out of range
}}

===References===
{{ref std c11}}
{{ref std | section=7.5/2  | title=Errors &lt;errno.h&gt; | p=205}}
{{ref std c99}}
{{ref std | section=7.5/2  | title=Errors &lt;errno.h&gt; | p=186}}
{{ref std c89}}
{{ref std | section=4.1.3  | title=Errors &lt;errno.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/error/dsc errno}}
{{dsc inc | c/io/dsc perror}}
{{dsc inc | c/string/byte/dsc strerror}}
{{dsc see cpp | cpp/error/errno_macros | Error numbers }}
{{dsc end}}

[[ar:c/error/errno_macros]]
[[cs:c/error/errno_macros]]
[[de:c/error/errno_macros]]
[[es:c/error/errno_macros]]
[[fr:c/error/errno_macros]]
[[it:c/error/errno_macros]]
[[ja:c/error/errno_macros]]
[[ko:c/error/errno_macros]]
[[pl:c/error/errno_macros]]
[[pt:c/error/errno_macros]]
[[ru:c/error/errno_macros]]
[[tr:c/error/errno_macros]]
[[zh:c/error/errno_macros]]</text>
      <sha1>inpkbiigczut7sxh3vw5hyoybwv0bl0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/ignore handler s</title>
    <ns>0</ns>
    <id>13995</id>
    <revision>
      <id>78580</id>
      <parentid>76348</parentid>
      <timestamp>2015-05-27T02:11:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>templatize example</comment>
      <text xml:space="preserve" bytes="2542">{{c/title|ignore_handler_s}}
{{c/error/navbar}}
{{ddcl | header=stdlib.h | since=c11 | 
void ignore_handler_s( const char * restrict msg,
                       void * restrict ptr,
                       errno_t error
                     );
}}

The function simply returns to the caller without performing any other action.

A pointer to this function can be passed to {{rlp|set_constraint_handler_s}} to establish a runtime constraints violation handler that does nothing.

:As with all bounds-checked functions, {{tt|ignore_handler_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdlib.h&gt;}}.

===Parameters===
{{par begin}}
{{par | msg   | pointer to character string that describes the error}}
{{par | ptr   | pointer to an implementation-defined object or a null pointer. Examples of implementation-defined objects are objects that give the name of the function that detected the violation and the line number when the violation was detected }}
{{par | error | the error about to be returned by the calling function, if it happens to be one of the functions that return errno_t }}
{{par end}}

===Return value===
(none)

===Notes===
If {{tt|ignore_handler_s}} is used as a the runtime constraints handler, the violations may be detected by examining the results of the bounds-checked function calls, which may be different for different functions (non-zero {{lc|errno_t}}, null character written to the first byte of the output string, etc)

If {{tt|set_constraint_handler_s}} is never called, the default handler is implementation-defined: it may be {{lc|abort_handler_s}}, {{lc|ignore_handler_s}}, or some other implementation-defined handler.

===Example===
{{c/error/set_constraint_handler_example}}

===References===
{{ref std c11}}
{{ref std | section=K.3.6.1.3  | title=The ignore_handler_s function | p=606}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/error/abort_handler_s}}
{{dsc inc | c/error/set_constraint_handler_s}}
{{dsc end}}

[[ar:c/error/ignore_handler_s]]
[[cs:c/error/ignore_handler_s]]
[[de:c/error/ignore_handler_s]]
[[es:c/error/ignore_handler_s]]
[[fr:c/error/ignore_handler_s]]
[[it:c/error/ignore_handler_s]]
[[ja:c/error/ignore_handler_s]]
[[ko:c/error/ignore_handler_s]]
[[pl:c/error/ignore_handler_s]]
[[pt:c/error/ignore_handler_s]]
[[ru:c/error/ignore_handler_s]]
[[tr:c/error/ignore_handler_s]]
[[zh:c/error/ignore_handler_s]]</text>
      <sha1>9r9zds4iamc95hn6dk53jjc7vtdzzdw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/set constraint handler s</title>
    <ns>0</ns>
    <id>13988</id>
    <revision>
      <id>78579</id>
      <parentid>78576</parentid>
      <timestamp>2015-05-27T02:11:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>templatize</comment>
      <text xml:space="preserve" bytes="3012">{{c/title|set_constraint_handler_s | constraint_handler_t}}
{{c/error/navbar}}
{{ddcl | header=stdlib.h | since=c11 | 
constraint_handler_t set_constraint_handler_s( constraint_handler_t handler );
}}

Configures the handler to be called by all [[c/error#Bounds_checking|bounds-checked functions]] on a runtime constraint violation or restores the default handler (if {{tt|handler}} is a null pointer)

The handler must be a pointer to function of type {{c|constraint_handler_t}}, which is defined as
{{ddcl | header=stdlib.h | since=c11 | 
typedef void (*constraint_handler_t)( const char *restrict msg,
                                      void *restrict ptr,
                                      errno_t error);
}}

On a runtime constraint violation, it is called with the following arguments:
@1@ pointer to character string that describes the error
@2@ pointer to an implementation-defined object or a null pointer. Examples of implementation-defined objects are objects that give the name of the function that detected the violation and the line number when the violation was detected
@3@ the error about to be returned by the calling function, if it happens to be one of the functions that return {{tt|errno_t}}

If {{tt|set_constraint_handler_s}} is never called, the default handler is implementation-defined: it may be {{lc|abort_handler_s}}, {{lc|ignore_handler_s}}, or some other implementation-defined handler.

:As with all bounds-checked functions, {{tt|set_constraint_handler_s}} and {{tt|constraint_handler_t}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdlib.h&gt;}}.
===Parameters===
{{par begin}}
{{par | handler | pointer to function of type {{c|constraint_handler_t}} or a null pointer }}
{{par end}}

===Return value===
A pointer to the previously-installed runtime constraints handler. (note: this pointer is never a null pointer because calling {{c|set_constraint_handler_s(NULL)}} sets up the system default handler)

===Example===
{{c/error/set_constraint_handler_example}}

===References===
{{ref std c11}}
{{ref std | section=K.3.6/2    | title=constraint_handler_t | p=604}}
{{ref std | section=K.3.6.1.1  | title=The set_constraint_handler_s function | p=604-605}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/error/abort_handler_s}}
{{dsc inc | c/error/ignore_handler_s}}
{{dsc end}}

[[ar:c/error/set_constraint_handler_s]]
[[cs:c/error/set_constraint_handler_s]]
[[de:c/error/set_constraint_handler_s]]
[[es:c/error/set_constraint_handler_s]]
[[fr:c/error/set_constraint_handler_s]]
[[it:c/error/set_constraint_handler_s]]
[[ja:c/error/set_constraint_handler_s]]
[[ko:c/error/set_constraint_handler_s]]
[[pl:c/error/set_constraint_handler_s]]
[[pt:c/error/set_constraint_handler_s]]
[[ru:c/error/set_constraint_handler_s]]
[[tr:c/error/set_constraint_handler_s]]
[[zh:c/error/set_constraint_handler_s]]</text>
      <sha1>o70gc5dlq7mjyjouunz3ne9jy6o2l74</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/error/static assert</title>
    <ns>0</ns>
    <id>13541</id>
    <revision>
      <id>76335</id>
      <parentid>73488</parentid>
      <timestamp>2015-02-16T12:34:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1080">{{title|static_assert}}
{{c/error/navbar}}
{{ddcl | header=assert.h | 
#define static_assert _Static_assert
}}

This convenience macro expands to the keyword [[c/keyword/_Static_assert|_Static_assert]]

===Example===
{{example
|code=
#include &lt;assert.h&gt;
int main(void)
{
    static_assert(2 + 2 == 4, &quot;2+2 isn't 4&quot;);      // well-formed
    static_assert(sizeof(int) &lt; sizeof(char),
                 &quot;this program requires that int is less than char&quot;); // compile-time error
}
}}

===References===
{{ref std c11}}
{{ref std | section=7.2/3  | title=Diagnostics &lt;assert.h&gt; | p=186}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/static_assert |Static Assertion}}
{{dsc end}}

[[ar:c/error/static_assert]]
[[cs:c/error/static_assert]]
[[de:c/error/static_assert]]
[[es:c/error/static_assert]]
[[fr:c/error/static_assert]]
[[it:c/error/static_assert]]
[[ja:c/error/static_assert]]
[[ko:c/error/static_assert]]
[[pl:c/error/static_assert]]
[[pt:c/error/static_assert]]
[[ru:c/error/static_assert]]
[[tr:c/error/static_assert]]
[[zh:c/error/static_assert]]</text>
      <sha1>583cqaqutn4zz67xk3cswwwp0vwsju8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/experimental</title>
    <ns>0</ns>
    <id>13901</id>
    <revision>
      <id>91230</id>
      <parentid>91186</parentid>
      <timestamp>2017-03-28T19:36:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention the promised sequel to Secure Coding Rules</comment>
      <text xml:space="preserve" bytes="4803">{{title|Experimental C standard libraries}}
{{c/experimental/navbar}}

The C standards committee publishes experimental C language and library extensions for future standardization.

Note: until 2012, these publications used the TR (technical report) format. Since 2012 ISO procedure changed to use the TS (technical specification) format.

{|table class=wikitable
|-
!ISO number||Name||Status||links
|-
| ISO/IEC TR
19769:2004
| Extensions to support new character data types
| Published ([http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=33907 ISO store])
Final draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf n1040] (2003-11-07)&lt;br&gt;
Merged into C11
|
|-
| ISO/IEC TR
24731-1:2007
| Bounds-checking interfaces
| Published ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=38841 ISO store])
Final draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf n1225] (2007-03-28)&lt;br&gt;
Merged into C11
|
|-
| ISO/IEC TR 18037:2008
| Extensions to support embedded processors
| Published ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=51126 ISO store])
Final draft: [http://www.open-std.org/jtc1/SC22/wg14/www/docs/n1169.pdf n1169] (2006-04-04)
|
|-
| ISO/IEC TR
24732:2009
| Extensions to support to support decimal floating-point arithmetic
| Published ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=38842 ISO store])
Final draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1241.pdf n1241] (2007-07-05)&lt;br&gt;
Superseded by TS 18661-2:2015
|
|-
| ISO/IEC 
24747:2009
| Extensions to support mathematical special functions
| Published ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=38857 ISO store])
Draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1182.pdf n1182] (2006-08-02)
|
|-
| ISO/IEC TR
24731-2:2010
| Extensions to support dynamic allocation functions
| Published 2010-11-24 ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=51678 ISO store])
Draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1248.pdf n1248] (2007-08-15)
| [[c/experimental/dynamic|dynamic]]
|-
| ISO/IEC TS
17961:2013
| Secure coding rules
| Published 2013-11-15 ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=61134 ISO store])
Draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1624.pdf n1624] (2012-06-26)&lt;br&gt;
TC1 published 2016-08-09 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=72086 ISO store])
|
|-
| ISO/IEC TS
18661-1:2014
| Floating-point extensions: Binary floating-point arithmetic
| Published 2014-07-21 ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=63146 ISO store])
Draft: [http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1778.pdf n1778] (2013-11-05)
| [[c/experimental/fpext1|fpext1]]
|-
| ISO/IEC TS
18661-2:2015
| Floating-point extensions: Decimal floating-point arithmetic
| Published 2015-02-11, Revised 2015-05-18 ([http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=68882 ISO store]).
Post-publication draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1912.pdf n1912] (2015-03-09)
|
|-
| ISO/IEC TS
18661-3:2015
| Floating-point extensions: Interchange and extended types
| Published 2015-10-06 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65615 ISO store])
Draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1945.pdf n1945] (2014-06-10)
|
|-
| ISO/IEC TS
18661-4:2015
| Floating-point extensions: Supplementary functions
| Published 2015-10-06 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65616 ISO store])
Draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1950.pdf n1950] (2015-06-10)
| [[c/experimental/fpext4|fpext4]]
|-
| ISO/IEC TS 18661-5:2016
| Floating-point extensions: Supplementary attributes
| Published 2016-08-11 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65617 ISO store]) Draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2004.pdf n2004] (2016-03-07)
|
|-
| ISO/IEC TR 24772-3
| Vulnerability descriptions for the programming language C
| Draft [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2018.pdf n2018] (2016-03-08)
|
|-
| ISO/IEC TS 21938-1
| Parallel extensions part 1: Thread-based parallelism
| Early draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2017.pdf n2017] (2016-03-10)
|
|-
| 
| Parallel extensions part 2:  Vector-based parallelism 
| early development
|
|-
| 
| Transactional Memory TS
| Early draft: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1961.pdf n1961] (2015-09-23)
|
|-
| ISO/IEC TS
17961:xxxx
| Secure coding rules part 2
| Early development, estimated publication 2023, possibly as an IS rather than TS
|
|}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/experimental | Experimental C++ libraries}}
{{dsc end}}</text>
      <sha1>0hxz1vsg1oaigzo9p8ss1762i3b2o71</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/experimental/dynamic</title>
    <ns>0</ns>
    <id>13908</id>
    <revision>
      <id>89341</id>
      <parentid>85688</parentid>
      <timestamp>2017-01-18T17:36:01Z</timestamp>
      <contributor>
        <ip>219.82.159.158</ip>
      </contributor>
      <comment>link to Chinese version</comment>
      <text xml:space="preserve" bytes="1374">{{title|Dynamic memory extensions}}
{{c/experimental/dynamic/navbar}}

Extensions to the C Library Part II: Dynamic Allocation Functions, ISO/IEC TR 24731-2:2010, defines the following new components for the C standard library:

{{dsc begin}}
{{dsc macro const | nolink=true | __STDC_ALLOC_LIB__ | integer constant of type {{c|long}} indicating conformance level}}
{{dsc header | stdio.h }}
{{dsc inc | c/experimental/dynamic/dsc fmemopen}}
{{dsc inc | c/experimental/dynamic/dsc open_memstream}}
{{dsc inc | c/experimental/dynamic/dsc asprintf}}
{{dsc inc | c/experimental/dynamic/dsc getline}}
{{dsc header | string.h }}
{{dsc inc | c/experimental/dynamic/dsc strdup}}
{{dsc inc | c/experimental/dynamic/dsc strndup}}
{{dsc end}}

This library extension also introduces assignment-allocation character {{ttb|m}} for use with {{ttb|%s}}, {{ttb|%[}}, and {{ttb|%c}} conversion specifiers in {{lc|fscanf}} and {{lc|fwscanf}} family of functions.

===Notes===
The functions {{tt|fmemopen}}, {{tt|open_memstream}}, {{tt|open_wmemstream}}, {{tt|getdelim}}, {{tt|getline}}, {{tt|strdup}}, {{tt|strndup}}, and the extensions to {{tt|fscanf}} are available in [http://pubs.opengroup.org/onlinepubs/9699919799/ POSIX (ISO/IEC 9945:2003)].

The functions {{tt|asprintf}} and {{tt|vasprintf}} are available in Linux Standard Base (ISO/IEC IS 23360:2006)

[[zh:c/experimental/dynamic]]</text>
      <sha1>ihe9n2e0x54exwozeiojkr3l1rvgemb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/experimental/dynamic/getline</title>
    <ns>0</ns>
    <id>15509</id>
    <revision>
      <id>89342</id>
      <parentid>85692</parentid>
      <timestamp>2017-01-18T18:17:12Z</timestamp>
      <contributor>
        <ip>219.82.159.158</ip>
      </contributor>
      <text xml:space="preserve" bytes="3157">{{c/title|getline|getwline|getdelim|getwdelim}}
{{c/experimental/dynamic/navbar}}
{{dcl begin}}
{{dcl header|stdio.h}}
{{dcl | notes={{mark since dynamic ts}}|num=1 |
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
}}
{{dcl | notes={{mark since dynamic ts}}|num=2 |
ssize_t getwline(wchar_t **lineptr, size_t *n, FILE *stream);
}}
{{dcl | notes={{mark since dynamic ts}}|num=3 |
ssize_t getdelim(char ** restrict lineptr, size_t * restrict n,
                 int delimiter, FILE *stream);
}}
{{dcl | notes={{mark since dynamic ts}}|num=4|
ssize_t getwdelim(wchar_t ** restrict lineptr, size_t * restrict n,
                 wint_t delimiter, FILE * stream);
}}
{{dcl end}}

@1@ Behaves like {{c|getdelim(lineptr, n, '\n', stream)}}
@2@ Behaves like {{c|getwdelim(lineptr, n, L'\n', stream)}}
@3@ Reads from the stream {{tt|stream}} as if by {{lc|fgetc}}, until {{tt|delimiter}} is encountered, storing the characters in the buffer of size {{tt|*n}} pointed to by {{tt|*lineptr}}, automatically increasing its size as if by {{lc|realloc}} to fit the entire input, including the delimiter, and adding a null terminator. {{tt|*lineptr}} may be null, in which case {{tt|*n}} is ignored and {{tt|getline}} allocates a new buffer as if by {{lc|malloc}}.
The behavior is undefined if {{tt|delimiter}} has a value that is outside the range of {{tt|unsigned char}} or {{lc|EOF}}.
@4@ Same as {{v|3}}, except the characters are read as if by {{lc|fgetwc}} and that {{tt|delimiter}} must be a valid {{tt|wchar_t}} or {{lc|WEOF}}.

If {{tt|*lineptr}} is not null, the behavior is undefined if {{tt|*lineptr}} is not a pointer that can be passed to {{lc|free}} or if {{tt|*n}} is less than the size of the allocated memory pointed to by {{tt|*lineptr}}

{{c/experimental/dynamic/macro_note|getline|stdio.h}}

===Parameters===
{{par begin}}
{{par | lineptr | pointer to a pointer to the initial buffer or to a null pointer}}
{{par | n | pointer to the size of the initial buffer}}
{{par | delimiter | the delimiter character}}
{{par | stream | valid input stream, opened by {{lc|fopen}} }}
{{par end}}

===Return value===
The number of characters stored in the buffer, including the delimiter, but excluding the null terminator.

On error, returns {{c|-1}} and sets {{lc|feof}} or {{lc|ferror}} on {{tt|stream}}.

===Notes===
These functions are identical to their  [http://pubs.opengroup.org/onlinepubs/9699919799/functions/getdelim.html POSIX versions] except that it is allowed, but not required to set {{lc|errno}} on error.

===Example===
{{example|code=#define __STDC_WANT_LIB_EXT2__ 1
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
void get_y_or_n(void)
{
    char *response = NULL;
    size_t len;
    printf(&quot;Continue? [y] n: &quot;);
    if((getline(&amp;response, &amp;len, stdin) &lt; 0) {{!!}} (len &amp;&amp; response[0] == 'n')) {
        free(response);
        exit(0);
    }
    free(response);
    return;
}
int main() 
{
    get_y_or_n();
}
|output=
Continue? [y] n: 
}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fgets}}
{{dsc inc | c/io/dsc gets}}
{{dsc inc | c/io/dsc fgetws}}
{{dsc inc | c/memory/dsc malloc}}
{{dsc end}}

[[zh:c/experimental/dynamic/getline]]</text>
      <sha1>5dud913bkvwsbgyvp6n3bdk5j09ao1e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/experimental/dynamic/strdup</title>
    <ns>0</ns>
    <id>15507</id>
    <revision>
      <id>89355</id>
      <parentid>85682</parentid>
      <timestamp>2017-01-19T19:58:16Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to Chinese ver</comment>
      <text xml:space="preserve" bytes="1362">{{c/title|strdup}}
{{c/experimental/dynamic/navbar}}
{{dcl begin}}
{{dcl header|string.h}}
{{dcl | notes={{mark since dynamic ts}} |
char * strdup(const char *str1);
}}
{{dcl end}}

Returns a pointer to a null-terminated byte string, which is a duplicate
of the string pointed to by str1. The returned pointer must be passed to {{lc|free}} to avoid a memory leak.

If an error occurs, a null pointer is returned and {{lc|errno}} may be set.

{{c/experimental/dynamic/macro_note|strdup|string.h}}

===Parameters===
{{par begin}}
{{par | str1 | pointer to the null-terminated byte string to duplicate}}
{{par end}}

===Return value===
A pointer to the newly allocated string, or a null pointer if an error occurred.

===Notes===
The function is identical to the  [http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html POSIX strdup] except that it is allowed, but not required to set {{lc|errno}} on error.

===Example===
{{example|code=#define __STDC_WANT_LIB_EXT2__ 1
#include &lt;string.h&gt;
#include &lt;assert.h&gt;
#include &lt;stdlib.h&gt;

int main()
{
    char *s1 = &quot;String&quot;;
    char *s2 = strdup(s1);
    assert(strcmp(s1, s2) == 0);
    free(s2);
}
}}

===See also===
{{dsc begin}}
{{dsc inc | c/experimental/dynamic/dsc strndup}}
{{dsc inc | c/string/byte/dsc strcpy}}
{{dsc inc | c/memory/dsc malloc}}
{{dsc end}}

[[zh:c/experimental/dynamic/strdup]]</text>
      <sha1>0rhhgce4eg6otsxclt3xdenqxtuhqxa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/experimental/dynamic/strndup</title>
    <ns>0</ns>
    <id>15508</id>
    <revision>
      <id>89354</id>
      <parentid>85684</parentid>
      <timestamp>2017-01-19T19:50:16Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to Chinese zh</comment>
      <text xml:space="preserve" bytes="1646">{{c/title|strndup}}
{{c/experimental/dynamic/navbar}}
{{dcl begin}}
{{dcl header|string.h}}
{{dcl | notes={{mark since dynamic ts}} |
char *strndup(const char *str, size_t size);
}}
{{dcl end}}

Returns a pointer to a null-terminated byte string, which contains copies of at most  {{tt|size}} bytes from the string pointed to by {{tt|str}}. If the null terminator is not encountered in the first {{tt|size}} bytes, it is added to the duplicated string.

The returned pointer must be passed to {{lc|free}} to avoid a memory leak.

If an error occurs, a null pointer is returned and {{lc|errno}} may be set.

{{c/experimental/dynamic/macro_note|strndup|string.h}}

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to duplicate}}
{{par | size | max number of bytes to copy from {{tt|str}}}}
{{par end}}

===Return value===
A pointer to the newly allocated string, or a null pointer if an error occurred.

===Notes===
The function is identical to the  [http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html POSIX strndup] except that it is allowed, but not required to set {{lc|errno}} on error.

===Example===
{{example|code=#define __STDC_WANT_LIB_EXT2__ 1
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main()
{
    char *s1 = &quot;String&quot;;
    char *s2 = strndup(s1, 2);
    printf(&quot;strndup(\&quot;String\&quot;, 2) == %s\n&quot;, s2);
    free(s2);
}
|output=
strndup(&quot;String&quot;, 2) == St
}}

===See also===
{{dsc begin}}
{{dsc inc | c/experimental/dynamic/dsc strdup}}
{{dsc inc | c/string/byte/dsc strncpy}}
{{dsc inc | c/memory/dsc malloc}}
{{dsc end}}

[[zh:c/experimental/dynamic/strndup]]</text>
      <sha1>5u1e76slftjat05hbtuj8nwoo62c3jl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/experimental/fpext1</title>
    <ns>0</ns>
    <id>16219</id>
    <revision>
      <id>91181</id>
      <timestamp>2017-03-24T15:43:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="12435">{{title|Floating-point extensions part 1: binary floating-point arithmetic}}
{{c/experimental/fpext1/navbar}}

Floating-point extensions for C - Part 1: Binary floating-point arithmetic, ISO/IEC TS 18661-1:2014, defines the following new components for the C standard library, as recommended by ISO/IEC/IEEE 60559:2011 (the current revision of IEEE-754)

{{dsc begin}}
{{dsc macro const | nolink=true | __STDC_IEC_60559_BFP__ | integer constant of type {{c|long}} and value {{c|201ymmL}}, replaces {{lc|__STDC_IEC_559__}}}}
{{dsc macro const | nolink=true | __STDC_IEC_60559_COMPLEX__ | integer constant of type {{c|long}} and value {{c|201ymmL}}, replaces {{lc|__STDC_IEC_559_COMPLEX__}}}}
{{dsc header | limits.h }}
{{dsc macro const | nolink=true | CHAR_WIDTH SCHAR_WIDTH UCHAR_WIDTH&lt;br&gt;SHRT_WIDTH USHRT_WIDTH&lt;br&gt;INT_WIDTH UINT_WIDTH&lt;br&gt;LONG_WIDTH ULONG_WIDTH&lt;br&gt;LLONG_WIDTH ULLONG_WIDTH|width, in bits, of the corresponding type|notes={{mark since fpext1 ts}}}}
{{dsc header | float.h }}
{{dsc macro const | c/experimental/fpext1/CR_DECIMAL_DIG |conversions between all supported binary floating-point types and character sequences with at most CR_DECIMAL_DIG significant decimal digits are correctly rounded (this is at least DECIMAL_DIG + 3)|notes={{mark since fpext1 ts}}}}
{{dsc header | fenv.h }}
{{dsc typedef|nolink=true|femode_t|collection of dynamic floating-point control modes supported by the implementation, including the dynamic rounding direction mode|notes={{mark since fpext1 ts}}}}
{{dsc macro const|nolink=true|FE_DFL_MODE |pointer to the default femode_t |notes={{mark since fpext1 ts}}}}
{{dsc macro const | nolink=true | FE_SNANS_ALWAYS_SIGNAL | defined (as integer constant 1) if sNaN arguments cause the functions that suppress qNaNs, like {{lc|hypot}} or {{lc|fmax}}, to raise FE_INVALID and return a qNaN|notes={{mark since fpext1 ts}} }}
{{dsc fun | c/experimental/fpext1/fesetexcept|sets the specified floating-point exception flags without causing any side-effects that raising them would|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fetestexceptflag|tests if given flags are in a saved representation of the floating-point exception flags|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fegetmode_fesetmode|title=fegetmode&lt;br&gt;fesetmode|gets and sets  all the implementation’s dynamic floating-point control modes collectively|notes={{mark since fpext1 ts}}}}
{{dsc header | stdint.h }}
{{dsc macro const | nolink=true | INTn_WIDTH UINTn_WIDTH&lt;br&gt;INT_LEASTn_WIDTH UINT_LEASTn_WIDTH&lt;br&gt;INT_FASTn_WIDTH UINT_FASTn_WIDTH&lt;br&gt;INTPTR_WIDTH UINTPTR_WIDTH&lt;br&gt;INTMAX_WIDTH  UINTMAX_WIDTH&lt;br&gt;PTRDIFF_WIDTH&lt;br&gt;SIG_ATOMIC_WIDTH&lt;br&gt;SIZE_WIDTH&lt;br&gt;WCHAR_WIDTH WINT_WIDTH|width, in bits, of the corresponding type|notes={{mark since fpext1 ts}}}}
{{dsc header | stdlib.h}}
{{dsc fun | c/experimental/fpext1/strfromf |title=strfromd&lt;br&gt;strfromf&lt;br&gt;strfroml|convert a single foating-point number to string using the specified snprintf format|notes={{mark since fpext1 ts}}}}
{{dsc header | math.h }}
{{dsc macro const | nolink=true | FP_INT_UPWARD&lt;br&gt;FP_INT_DOWNWARD&lt;br&gt;FP_INT_TOWARDZERO&lt;br&gt;
FP_INT_TONEARESTFROMZERO&lt;br&gt;FP_INT_TONEAREST&lt;br&gt;| rounding direction for the functions ceil, floor, trunc, round, and roundeven, suitable for use with fromfp family of functions|notes={{mark since fpext1 ts}}}}
{{dsc macro const|nolink=true|FP_LLOGB0|value returned by {{lc|llogb}} if the argument is zero|notes={{mark since fpext1 ts}}}}
{{dsc macro const|nolink=true|FP_LLOGBNAN |value returned by {{lc|llogb}} if the argument is NaN|notes={{mark since fpext1 ts}}}}
{{dsc macro const | c/experimental/fpext1/SNAN |title=SNANF&lt;br&gt;SNAN&lt;br&gt;SNANL|represents a signalling NaN for float, double, long double respectively|notes={{mark since fpext1 ts}}}}
{{dsc macro const | nolink=true|FP_FAST_FADD FP_FAST_FADDL FP_FAST_DADDL&lt;br&gt;FP_FAST_FSUB FP_FAST_FSUBL FP_FAST_DSUBL&lt;br&gt;FP_FAST_FMUL FP_FAST_FMULL FP_FAST_DMULL&lt;br&gt;FP_FAST_FDIV FP_FAST_FDIVL FP_FAST_DDIVL&lt;br&gt;FP_FAST_FFMA FP_FAST_FFMAL FP_FAST_DFMAL&lt;br&gt;FP_FAST_FSQRT FP_FAST_FSQRTL FP_FAST_DSQRTL|if defined, indicates that the corresponding function executes faster than the equivalent function in a larger type followed by a cast to target type|notes={{mark since fpext1 ts}}}}
{{dsc macro fun|nolink=true|iseqsig |compares two floating-point values for equality, same as x == y, but raising FE_INVALID for NaN arguments|notes={{mark since fpext1 ts}}}}
{{dsc macro fun|nolink=true|iscanonical|tests if the floating-point value is canonical|notes={{mark since fpext1 ts}}}}
{{dsc macro fun|nolink=true|issignaling|tests if the floating-point value is a signalling NaN|notes={{mark since fpext1 ts}}}}
{{dsc macro fun|nolink=true|issubnormal|tests if the floating-point value is subnormal|notes={{mark since fpext1 ts}}}}
{{dsc macro fun|nolink=true|iszero|tests if the floating-point value is a zero (positive, negative, unsigned)|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fromfp |title=fromfp&lt;br&gt;fromfpf&lt;br&gt;fromfpl|round to signed integer using the specified rounding direction|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/ufromfp |title=ufromfp&lt;br&gt;ufromfpf&lt;br&gt;ufromfpl |round to unsigned integer using the specified rounding direction|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fromfpx |title=fromfpx&lt;br&gt;fromfpxf&lt;br&gt;fromfpxl|round to signed integer using the specified rounding direction, reporting inexactness|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/ufromfpx |title=ufromfpx&lt;br&gt;ufromfpxf&lt;br&gt;ufromfpxl |round to unsigned integer using the specified rounding direction, reporting inexactness|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/roundeven |title=roundeven&lt;br&gt;roundevenf&lt;br&gt;roundevenl|rounds to nearest, halfway cases to even|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/llogb|title=llogb&lt;br&gt;llogbf&lt;br&gt;llogbl|equivalent to {{lc|logb}} except the return type is {{c|long}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fmaxmag |title=fmaxmag&lt;br&gt;fmaxmagf&lt;br&gt;fmaxmagl|returns the value of their argument of maximum magnitude|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fminmag |title=fminmag&lt;br&gt;fminmagf&lt;br&gt;fminmagl|returns the value of their argument of minimum magnitude|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/nextup  |title=nextup&lt;br&gt;nextupf&lt;br&gt;nextupl|returns the next greater representable floating-point value|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/nextdown |title=nextdown&lt;br&gt;nextdownf&lt;br&gt;nextdown l|returns the next smaller representable floating-point value|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fadd |title=fadd&lt;br&gt;faddl&lt;br&gt;daddl|calculates x+y as if in infinite precision and rounded once to target type|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fsub |title=fsub&lt;br&gt;fsubl&lt;br&gt;dsubl|calculates x-y as if in infinite precision and rounded once to target type|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fmul |title=fmul&lt;br&gt;fmull&lt;br&gt;dmull|calculates x*y as if in infinite precision and rounded once to target type|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fdiv |title=fdiv&lt;br&gt;fdivl&lt;br&gt;ddivl|calculates x/y as if in infinite precision and rounded once to target type|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/ffma |title=ffma&lt;br&gt;ffmal&lt;br&gt;dfmal|calculates the same as {{lc|fma}} as if in infinite precision and rounded once to target type|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/fsqrt|title=fsqrt&lt;br&gt;fsqrtl&lt;br&gt;dsqrtl|calculates the same as {{lc|sqrt}} as if in infinite precision and rounded once to target type|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/totalorder|title=totalorder&lt;br&gt;totalorderf&lt;br&gt;totalorderl|orders two floating-point values using the ISO 60559 total order relation|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/totalordermag|title=totalordermag&lt;br&gt;totalordermagf&lt;br&gt;totalordermagl|orders the magnitudes of two floating-point values using the ISO 60559 total order relation|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/canonicalize|title=canonicalize&lt;br&gt;canonicalizef&lt;br&gt;canonicalizel|obtains the ISO 60559 canonical binary encoding of the given floating-point value|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/getpayload|title=getpayload&lt;br&gt;getpayloadf&lt;br&gt;getpayloadl|extracts the payload from the given NaN value|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/setpayload |title=setpayload&lt;br&gt;setpayloadf&lt;br&gt;setpayloadl|creates a quiet NaN with the specified payload|notes={{mark since fpext1 ts}}}}
{{dsc fun | c/experimental/fpext1/setpayloadsig|title=setpayloadsig&lt;br&gt;setpayloadsigf&lt;br&gt;setpayloadsigl|creates a signalling NaN with the specified payload|notes={{mark since fpext1 ts}}}}
{{dsc header | tgmath.h }}
{{dsc fun | nolink=true  | roundeven | generic overload of {{lc|roundeven}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | llogb | generic overload of {{lc|llogb}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fmaxmag| generic overload of {{lc|fmaxmag}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fminmag| generic overload of {{lc|fminmag}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | nextup| generic overload of {{lc|nextup}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | nextdown| generic overload of {{lc|nextdown}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fromfp| generic overload of {{lc|fromfp}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | ufromfp| generic overload of {{lc|ufromfp}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fromfpx | generic overload of {{lc|fromfpx }}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | ufromfpx| generic overload of {{lc|ufromfpx}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | nextdown| generic overload of {{lc|nextdown}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | totalorder | generic overload of {{lc|totalorder}}|notes={{mark since fpext1 ts}}}}

{{dsc fun | nolink=true  | totalordermag| generic overload of {{lc|totalordermag}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fadd | generic overload of {{lc|fadd}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | dadd | generic overload of {{lc|dadd}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fsub | generic overload of {{lc|fsub}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | dsub | generic overload of {{lc|dsub}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fmul| generic overload of {{lc|fmul}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | dmul| generic overload of {{lc|dmul}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fdiv| generic overload of {{lc|fdiv}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | ddiv| generic overload of {{lc|ddiv}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | ffma| generic overload of {{lc|ffma}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | dfma| generic overload of {{lc|dfma}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | fsqrt| generic overload of {{lc|fsqrt}}|notes={{mark since fpext1 ts}}}}
{{dsc fun | nolink=true  | dsqrt| generic overload of {{lc|dsqrt}}|notes={{mark since fpext1 ts}}}}
{{dsc end}}

===Notes===
The standard C macros {{lc|__STDC_IEC_559__}} and {{lc|__STDC_IEC_559_COMPLEX__}} are made obsolete by this technical specification.

All functions and macros added to the C library by this extension are only declared if a macro {{c|__STDC_WANT_IEC_60559_BFP_EXT__}} is defined before the corresponding header is included.

Besides additions to the standard library, ISO/IEC TS 18661-1:2014 makes a number of changes to the core language, notably splitting floating-point control between static (controlled by the new {{c|#pragma STDC FENV_ROUND}}), and dynamic (controlled by {{lc|fesetround}}). Most math.h functions respect the static rounding mode, if set, over the dynamic rounding mode.

{{todo|add to the pragma page or describe the pragma in full here?}}

[[zh:c/experimental/fpext1]]</text>
      <sha1>1fdxrgfv3c2qque81ax45e7igq5giu1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/experimental/fpext4</title>
    <ns>0</ns>
    <id>16151</id>
    <revision>
      <id>89978</id>
      <parentid>89969</parentid>
      <timestamp>2017-01-31T18:32:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>complex ones are also  optional / future direction.. and done</comment>
      <text xml:space="preserve" bytes="9784">{{title|Floating-point extensions part 4: supplementary functions}}
{{c/experimental/fpext4/navbar}}

Floating-point extensions for C - Part 4: Supplementary functions, ISO/IEC TS 18661-4:2015, defines the following new components for the C standard library, as recommended by ISO/IEC/IEEE 60559:2011 (the current revision of IEEE-754)

{{dsc begin}}
{{dsc macro const | nolink=true | __STDC_IEC_60559_FUNCS__ | integer constant of type {{c|long}} and value {{c|201506L}}}}
{{dsc header | math.h }}
{{dsc inc | c/experimental/fpext4/dsc exp2m1}}
{{dsc inc | c/experimental/fpext4/dsc exp10}}
{{dsc inc | c/experimental/fpext4/dsc exp10m1}}
{{dsc inc | c/experimental/fpext4/dsc logp1}}
{{dsc inc | c/experimental/fpext4/dsc log2p1}}
{{dsc inc | c/experimental/fpext4/dsc log10p1}}
{{dsc inc | c/experimental/fpext4/dsc rsqrt}}
{{dsc inc | c/experimental/fpext4/dsc compoundn}}
{{dsc inc | c/experimental/fpext4/dsc rootn}}
{{dsc inc | c/experimental/fpext4/dsc pown}}
{{dsc inc | c/experimental/fpext4/dsc powr}}
{{dsc inc | c/experimental/fpext4/dsc acospi}}
{{dsc inc | c/experimental/fpext4/dsc asinpi}}
{{dsc inc | c/experimental/fpext4/dsc atanpi}}
{{dsc inc | c/experimental/fpext4/dsc atan2pi}}
{{dsc inc | c/experimental/fpext4/dsc cospi}}
{{dsc inc | c/experimental/fpext4/dsc sinpi}}
{{dsc inc | c/experimental/fpext4/dsc tanpi}}
{{dsc inc | c/experimental/fpext4/dsc reduc_sum}}
{{dsc inc | c/experimental/fpext4/dsc reduc_sumabs}}
{{dsc inc | c/experimental/fpext4/dsc reduc_sumsq}}
{{dsc inc | c/experimental/fpext4/dsc reduc_sumprod}}
{{dsc inc | c/experimental/fpext4/dsc scaled_prod}}
{{dsc inc | c/experimental/fpext4/dsc scaled_prodsum}}
{{dsc inc | c/experimental/fpext4/dsc scaled_proddiff}}

{{dsc fun | nolink=true  | crexp{{mark optional}} | correctly-rounded version of {{lc|exp}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crexpm1{{mark optional}} | correctly-rounded version of {{lc|expm1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crexp2{{mark optional}} | correctly-rounded version of {{lc|exp2}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crexp2m1{{mark optional}} | correctly-rounded version of {{lc|exp2m1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crexp10{{mark optional}} | correctly-rounded version of {{lc|exp10}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crexp10m1{{mark optional}} | correctly-rounded version of {{lc|exp10m1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crlog{{mark optional}} | correctly-rounded version of {{lc|log}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crlog2{{mark optional}} | correctly-rounded version of {{lc|log2}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crlog10{{mark optional}} | correctly-rounded version of {{lc|log10}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crlog1p{{mark optional}} | correctly-rounded version of {{lc|log1p}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crlogp1{{mark optional}} | correctly-rounded version of {{lc|logp1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crlog2p1{{mark optional}} | correctly-rounded version of {{lc|log2p1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crlog10p1{{mark optional}} | correctly-rounded version of {{lc|log10p1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crrsqrt{{mark optional}} | correctly-rounded version of {{lc|rsqrt}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crcompoundn{{mark optional}} | correctly-rounded version of {{lc|compoundn}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crrootn{{mark optional}} | correctly-rounded version of {{lc|rootn}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crpown{{mark optional}} | correctly-rounded version of {{lc|pown}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crpow{{mark optional}} | correctly-rounded version of {{lc|pow}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crpowr{{mark optional}} | correctly-rounded version of {{lc|powr}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crsin{{mark optional}} | correctly-rounded version of {{lc|sin}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crcos{{mark optional}} | correctly-rounded version of {{lc|cos}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crtan{{mark optional}} | correctly-rounded version of {{lc|tan}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crsinpi{{mark optional}} | correctly-rounded version of {{lc|sinpi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crcospi{{mark optional}} | correctly-rounded version of {{lc|cospi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crtanpi{{mark optional}} | correctly-rounded version of {{lc|tanpi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crasinpi{{mark optional}} | correctly-rounded version of {{lc|asinpi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cracospi{{mark optional}} | correctly-rounded version of {{lc|acospi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cracospi{{mark optional}} | correctly-rounded version of {{lc|acospi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cratanpi{{mark optional}} | correctly-rounded version of {{lc|atanpi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cratan2pi{{mark optional}} | correctly-rounded version of {{lc|atan2pi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crasin{{mark optional}} | correctly-rounded version of {{lc|asin}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cracos{{mark optional}} | correctly-rounded version of {{lc|acos}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cratan{{mark optional}} | correctly-rounded version of {{lc|atan}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cratan2{{mark optional}} | correctly-rounded version of {{lc|atan2}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crsinh{{mark optional}} | correctly-rounded version of {{lc|sinh}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crcosh{{mark optional}} | correctly-rounded version of {{lc|cosh}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crtanh{{mark optional}} | correctly-rounded version of {{lc|tanh}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crasinh{{mark optional}} | correctly-rounded version of {{lc|asinh}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cracosh{{mark optional}} | correctly-rounded version of {{lc|acosh}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cratanh{{mark optional}} | correctly-rounded version of {{lc|atanh}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crhypot{{mark optional}} | correctly-rounded version of {{lc|hypot}}|notes={{mark since fpext4 ts}}}}
{{dsc header | complex.h }}
{{dsc fun | nolink=true  | cexp2m1{{mark optional}} | complex number version of {{lc|exp2m1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cexp10{{mark optional}} | complex number version of {{lc|exp10}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cexp10m1{{mark optional}} | complex number version of {{lc|exp10m1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | clogp1{{mark optional}} | complex number version of {{lc|logp1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | clog2p1{{mark optional}} | complex number version of {{lc|log2p1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | clog10p1{{mark optional}} | complex number version of {{lc|log10p1}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crsqrt {{mark optional}} | complex number version of {{lc|rsqrt }}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | ccompoundn {{mark optional}} | complex number version of {{lc|compoundn }}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | crootn{{mark optional}} | complex number version of {{lc|rootn}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cpown {{mark optional}} | complex number version of {{lc|pown }}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cpowr{{mark optional}} | complex number version of {{lc|powr}}|notes=
{{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | cacospi{{mark optional}} | complex number version of {{lc|acospi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | casinpi{{mark optional}} | complex number version of {{lc|asinpi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | catanpi{{mark optional}} | complex number version of {{lc|atanpi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | ccospi{{mark optional}} | complex number version of {{lc|cospi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | csinpi{{mark optional}} | complex number version of {{lc|sinpi}}|notes={{mark since fpext4 ts}}}}
{{dsc fun | nolink=true  | ctanpi{{mark optional}} | complex number version of {{lc|tanpi}}|notes={{mark since fpext4 ts}}}}
{{dsc end}}

===Notes===
All functions added to the C library by this extension are only declared if a macro {{c|__STDC_WANT_IEC_60559_FUNCS_EXT__}} is defined before math.h is included.

The decimal floating-point variants of every function are only defined if {{c|__STDC_WANT_IEC_60559_DFP_EXT__}} is also defined before math.h is included.

The extended precision variants of every function are only defined if {{c|__STDC_WANT_IEC_60559_TYPES_EXT__}} is defined before math.h is included.

The correctly-rounded versions of all functions (with the {{c|cr-}} prefix) are optional.

[[zh:c/experimental/fpext4]]</text>
      <sha1>ihput03qsumq4e0sw7t2cabve1sgsbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/header</title>
    <ns>0</ns>
    <id>6313</id>
    <revision>
      <id>78953</id>
      <parentid>76329</parentid>
      <timestamp>2015-06-12T17:27:00Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3365">{{title|C Standard Library header files}}
{{c/navbar}}

{{dsc begin}}
{{dsc|{{ttb|&amp;lt;assert.h&amp;gt;}} |[[c/error|Conditionally compiled macro that compares its argument to zero]]}}
{{dsc|{{ttb|&amp;lt;complex.h&amp;gt;}} {{mark since c99}}|[[c/numeric/complex|Complex number arithmetic]] }}
{{dsc|{{ttb|&amp;lt;ctype.h&amp;gt;}} |[[c/string/byte|Functions to determine the type contained in character data]]}}
{{dsc|{{ttb|&amp;lt;errno.h&amp;gt;}} |[[c/error|Macros reporting error conditions]]}}
{{dsc|{{ttb|&amp;lt;fenv.h&amp;gt;}} {{mark since c99}}|[[c/numeric/fenv|Floating-point environment]] }}
{{dsc|{{ttb|&amp;lt;float.h&amp;gt;}} |[[c/types/limits#Limits of floating point types|Limits of float types]]}}
{{dsc|{{ttb|&amp;lt;inttypes.h&amp;gt;}} {{mark since c99}}|[[c/types/integer|Format conversion of integer types]] }}
{{dsc|{{ttb|&amp;lt;iso646.h&amp;gt;}} {{mark since c95}}|[[c/language/operator_alternative | Alternative operator spellings]] }}
{{dsc|{{ttb|&amp;lt;limits.h&amp;gt;}} |[[c/types/limits|Sizes of basic types]]}}
{{dsc|{{ttb|&amp;lt;locale.h&amp;gt;}} |[[c/locale|Localization utilities]]}}
{{dsc|{{ttb|&amp;lt;math.h&amp;gt;}} |[[c/numeric/math|Common mathematics functions]]}}
{{dsc|{{ttb|&amp;lt;setjmp.h&amp;gt;}} |[[c/program|Nonlocal jumps]]}}
{{dsc|{{ttb|&amp;lt;signal.h&amp;gt;}} |[[c/program|Signal handling]]}}
{{dsc|{{ttb|&amp;lt;stdalign.h&amp;gt;}} {{mark since c11}} |[[c/types|alignas and alignof]] convenience macros}}
{{dsc|{{ttb|&amp;lt;stdarg.h&amp;gt;}} |[[c/variadic|Variable arguments]]}}
{{dsc|{{ttb|&amp;lt;stdatomic.h&amp;gt;}} {{mark since c11}}|[[c/atomic|Atomic types]] }}
{{dsc|{{ttb|&amp;lt;stdbool.h&amp;gt;}} {{mark since c99}}|[[c/types/boolean|Boolean type]] }}
{{dsc|{{ttb|&amp;lt;stddef.h&amp;gt;}} |[[c/types|Common macro definitions]] }}
{{dsc|{{ttb|&amp;lt;stdint.h&amp;gt;}} {{mark since c99}}|[[c/types/integer|Fixed-width integer types]] }}
{{dsc|{{ttb|&amp;lt;stdio.h&amp;gt;}} |[[c/io|Input/output]]}}
{{dsc|{{ttb|&amp;lt;stdlib.h&amp;gt;}} |General utilities: [[c/memory|memory management]], [[c/program|program utilities]], [[c/string|string conversions]], [[c/numeric/random|random numbers]] }}
{{dsc|{{ttb|&amp;lt;stdnoreturn.h&amp;gt;}} {{mark since c11}}|[[c/types|noreturn]] convenience macros }}
{{dsc|{{ttb|&amp;lt;string.h&amp;gt;}} |[[c/string/byte|String handling]]}}
{{dsc|{{ttb|&amp;lt;tgmath.h&amp;gt;}} {{mark since c99}}|[[c/numeric/tgmath|Type-generic math]] (macros wrapping math.h and complex.h) }}
{{dsc|{{ttb|&amp;lt;threads.h&amp;gt;}} {{mark since c11}}|[[c/thread|Thread library]] }}
{{dsc|{{ttb|&amp;lt;time.h&amp;gt;}} |[[c/chrono|Time/date utilities]]}}
{{dsc|{{ttb|&amp;lt;uchar.h&amp;gt;}} {{mark since c11}}|[[c/string/multibyte|UTF-16 and UTF-32 character utilities]] }}
{{dsc|{{ttb|&amp;lt;wchar.h&amp;gt;}} {{mark since c95}}|[[c/string/wide|Extended multibyte and wide character utilities]] }}
{{dsc|{{ttb|&amp;lt;wctype.h&amp;gt;}} {{mark since c95}}|[[c/string/wide|Wide character classification and mapping utilities]] }}
{{dsc end}}


===References===
{{ref std c11}}
{{ref std | section=7 | title=Library | p=180-457}}
{{ref std c99}}
{{ref std | section=7 | title=Library | p=164-402}}
{{ref std c89}}
{{ref std | section=4 | title=LIBRARY}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/header |C++ Standard Library header files}}
{{dsc end}}

[[ar:c/header]]
[[cs:c/header]]
[[de:c/header]]
[[es:c/header]]
[[fr:c/header]]
[[it:c/header]]
[[ja:c/header]]
[[ko:c/header]]
[[pl:c/header]]
[[pt:c/header]]
[[ru:c/header]]
[[tr:c/header]]
[[zh:c/header]]</text>
      <sha1>dvj1hohos8yg01hrm6rjrm2eg1k19bz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io</title>
    <ns>0</ns>
    <id>5867</id>
    <revision>
      <id>89056</id>
      <parentid>82018</parentid>
      <timestamp>2016-12-26T13:15:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>minor grammar</comment>
      <text xml:space="preserve" bytes="9740">{{title|File input/output}}
{{c/io/navbar}}
The {{tt|&lt;stdio.h&gt;}} header provides generic file operation support and supplies functions with narrow character input/output capabilities.

The {{tt|&lt;wchar.h&gt;}} header supplies functions with wide character input/output capabilities.  

I/O streams are objects of type {{lc|FILE}} that can only be accessed and manipulated through pointers of type {{c|FILE*}} (Note: while it may be possible to create a local object of type {{lc|FILE}} by dereferencing and copying a valid {{c|FILE*}}, using the address of such copy in the I/O functions is undefined behavior). Each stream is associated with an external physical device (file, standard input stream, printer, serial port, etc).

I/O streams can be used for both unformatted and formatted input and output. They are locale-sensitive and may perform wide/multibyte conversions as necessary. All streams access the same locale object: the one most recently installed with {{lc|setlocale}}.

Besides the system-specific information necessary to access the device (e.g. a POSIX file descriptor), each stream object holds the following:
@1@ {{mark c95}} Character width: unset, narrow, or wide
@2@ Buffering state: unbuffered, line-buffered, fully buffered.
@3@ The buffer, which may be replaced by an external, user-provided buffer.
@4@ I/O mode: input, output, or update (both input and output).
@5@ Binary/text mode indicator.
@6@ End-of-file status indicator.
@7@ Error status indicator.
@8@ File position indicator (an object of type {{lc|fpos_t}}), which, for wide character streams, includes the parse state (an object of type {{lc|mbstate_t}}{{mark c95}}).
@9@ {{mark c11}} Reentrant lock used to prevent data races when multiple threads read, write, position, or query the position of a stream.

====Narrow and wide orientation====
A newly opened stream has no orientation. The first call to {{lc|fwide}} or to any I/O function establishes the orientation: a wide I/O function makes the stream wide-oriented, a narrow I/O function makes the stream narrow-oriented. Once set, the orientation can only be changed with {{lc|freopen}}. Narrow I/O functions cannot be called on a wide-oriented stream; wide I/O functions cannot be called on a narrow-oriented stream. Wide I/O functions convert between wide and multibyte characters as if by calling {{lc|mbrtowc}} and {{lc|wcrtomb}}. Unlike the multibyte character strings that are valid in a program, multibyte character sequences in the file may contain embedded nulls and do not have to begin or end in the initial shift state.

POSIX requires that the LC_CTYPE facet of the currently installed C locale is stored within the stream object the moment its orientation becomes wide, and is used for all future I/O on this stream until the orientation is changed, regardless of any subsequent calls to {{lc|setlocale}}.

====Binary and text modes====
A ''text stream'' is an ordered sequence of characters composed into lines (zero or more characters plus a terminating {{c|'\n'}}). Whether the last line requires a terminating {{c|'\n'}} is implementation-defined. Characters may have to be added, altered, or deleted on input and output to conform to the conventions for representing text in the OS (in particular, C streams on Windows OS convert {{tt|\n}} to {{tt|\r\n}} on output, and convert {{tt|\r\n}} to {{tt|\n}} on input)

Data read in from a text stream is guaranteed to compare equal to the data that were earlier written out to that stream only if all of the following is true:
* the data consist only of printing characters and the control characters {{tt|\t}} and {{tt|\n}} (in particular, on Windows OS, the character {{tt|'\0x1A'}} terminates input)
* no \n is immediately preceded by a space character (space characters that are written out immediately before a \n may disappear when read)
* the last character is \n

A ''binary stream'' is an ordered sequence of characters that can transparently record internal data. Data read in from a binary stream always equals to the data that were earlier written out to that stream. Implementations are only allowed to append a number of null characters to the end of the stream. A wide binary stream doesn't need to end in the initial shift state.

POSIX implementations do not distinguish between text and binary streams (there is no special mapping for \n or any other characters)

===Functions===
{{dsc begin}}
{{dsc h2 | File access}}
{{dsc header | stdio.h}}
{{dsc inc | c/io/dsc fopen}}
{{dsc inc | c/io/dsc freopen}}
{{dsc inc | c/io/dsc fclose}}
{{dsc inc | c/io/dsc fflush}}
{{dsc inc | c/io/dsc setbuf}}
{{dsc inc | c/io/dsc setvbuf}}
{{dsc header | wchar.h}}
{{dsc inc | c/io/dsc fwide}}

{{dsc h2 | Direct input/output}}
{{dsc header | stdio.h}}
{{dsc inc | c/io/dsc fread}}
{{dsc inc | c/io/dsc fwrite}}

{{dsc h2 | Unformatted input/output}}
{{dsc h2 | {{small|Narrow character}}}}
{{dsc header | stdio.h}}
{{dsc inc | c/io/dsc fgetc}}
{{dsc inc | c/io/dsc fgets}}
{{dsc inc | c/io/dsc fputc}}
{{dsc inc | c/io/dsc fputs}}
{{dsc inc | c/io/dsc getchar}}
{{dsc inc | c/io/dsc gets}}
{{dsc inc | c/io/dsc putchar}}
{{dsc inc | c/io/dsc puts}}
{{dsc inc | c/io/dsc ungetc}}

{{dsc h2 | {{small|Wide character}}}}
{{dsc header | wchar.h}}
{{dsc inc | c/io/dsc fgetwc}}
{{dsc inc | c/io/dsc fgetws}}
{{dsc inc | c/io/dsc fputwc}}
{{dsc inc | c/io/dsc fputws}}
{{dsc inc | c/io/dsc getwchar}}
{{dsc inc | c/io/dsc putwchar}}
{{dsc inc | c/io/dsc ungetwc}}

{{dsc h2 | Formatted input/output}}
{{dsc h2 | {{small|Narrow character}}}}
{{dsc header | stdio.h}}
{{dsc inc | c/io/dsc fscanf}}
{{dsc inc | c/io/dsc vfscanf}}
{{dsc inc | c/io/dsc fprintf}}
{{dsc inc | c/io/dsc vfprintf}}

{{dsc h2 | {{small|Wide character}}}}
{{dsc header | wchar.h}}
{{dsc inc | c/io/dsc fwscanf}}
{{dsc inc | c/io/dsc vfwscanf}}
{{dsc inc | c/io/dsc fwprintf}}
{{dsc inc | c/io/dsc vfwprintf}}

{{dsc h2 | File positioning}}
{{dsc header | stdio.h}}
{{dsc inc | c/io/dsc ftell}}
{{dsc inc | c/io/dsc fgetpos}}
{{dsc inc | c/io/dsc fseek}}
{{dsc inc | c/io/dsc fsetpos}}
{{dsc inc | c/io/dsc rewind}}

{{dsc h2 | Error handling}}
{{dsc header | stdio.h}}
{{dsc inc | c/io/dsc clearerr}}
{{dsc inc | c/io/dsc feof}}
{{dsc inc | c/io/dsc ferror}}
{{dsc inc | c/io/dsc perror}}

{{dsc h2 | Operations on files}}
{{dsc header | stdio.h}}
{{dsc inc | c/io/dsc remove}}
{{dsc inc | c/io/dsc rename}}
{{dsc inc | c/io/dsc tmpfile}}
{{dsc inc | c/io/dsc tmpnam}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | stdio.h}}
{{dsc hitem | Type | Definition}}
{{dsc | {{lc|FILE}} | type, capable of holding all information needed to control a C I/O stream}}
{{dsc | {{lc|fpos_t}} | type, capable of uniquely specifying a position and mutibyte parser state in a file}}
{{dsc end}}

===Macros===

{{dsc begin}}
{{dsc header | stdio.h}}
{{dsc macro const | stdin | nolink=true| title=stdin&lt;br&gt;stdout&lt;br&gt;stderr | expression of type FILE* associated with the input stream&lt;br&gt;expression of type FILE* associated with the output stream&lt;br&gt;expression of type FILE* associated with the error output stream}}
{{dsc macro const | EOF | nolink=true| integer constant expression of type {{c|int}} and negative value }}
{{dsc macro const | FOPEN_MAX | nolink=true| number of files that can be open simultaneously }}
{{dsc macro const | FILENAME_MAX | nolink=true| size needed for an array of char to hold the longest supported file name}}
{{dsc macro const | BUFSIZ | nolink=true| size of the buffer used by setbuf() }}
{{dsc macro const | _IOFBF| nolink=true| title=_IOFBF&lt;br&gt;_IOLBF&lt;br&gt;_IONBF|argument to setvbuf() indicating fully buffered I/O&lt;br&gt;argument to setvbuf() indicating line buffered I/O&lt;br&gt;argument to setvbuf() indicating unbuffered I/O}}
{{dsc macro const | SEEK_SET | nolink=true| title=SEEK_SET&lt;br&gt;SEEK_CUR&lt;br&gt;SEEK_END | argument to fseek() indicating seeking from beginning of the file&lt;br&gt;argument to fseek() indicating seeking from the current file position&lt;br&gt;argument to fseek() indicating seeking from end of the file}}
{{dsc macro const | TMP_MAX | title=TMP_MAX&lt;br&gt;TMP_MAX_S|notes=&lt;br&gt;{{mark c11}}|nolink=true| maximum number of unique filenames that can be generated by {{lc|tmpnam}}&lt;br&gt;maximum number of unique filenames that can be generated by {{lc|tmpnam_s}}}}
{{dsc macro const | L_tmpnam |title=L_tmpnam&lt;br&gt;L_tmpnam_s|notes=&lt;br&gt;{{mark c11}}|nolink=true|  size needed for an array of char to hold the result of {{lc|tmpnam}}&lt;br&gt;size needed for an array of char to hold the result of {{lc|tmpnam_s}}}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.21  | title=Input/output &lt;stdio.h&gt; | p=296-339}}
{{ref std | section=7.29  | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=402-446}}
{{ref std | section=7.31.11 | title=Input/output &lt;stdio.h&gt; | p=456}}
{{ref std | section=7.31.16 | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=456}}
{{ref std | section=K.3.5 | title=Input/output &lt;stdio.h&gt; | p=586-603}}
{{ref std c99}}
{{ref std | section=7.19  | title=Input/output &lt;stdio.h&gt; | p=262-305}}
{{ref std | section=7.24  | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=348-392}}
{{ref std | section=7.26.9  | title=Input/output &lt;stdio.h&gt; | p=402}}
{{ref std | section=7.26.12 | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=402}}
{{ref std c89}}
{{ref std | section=4.9    | title=INPUT/OUTPUT &lt;stdio.h&gt;}}
{{ref std | section=4.13.6 | title=Input/output &lt;stdio.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/io/c |C-style file input/output}}
{{dsc end}}

[[ar:c/io]]
[[cs:c/io]]
[[de:c/io]]
[[es:c/io]]
[[fr:c/io]]
[[it:c/io]]
[[ja:c/io]]
[[ko:c/io]]
[[pl:c/io]]
[[pt:c/io]]
[[ru:c/io]]
[[tr:c/io]]
[[zh:c/io]]</text>
      <sha1>kkp9gtw9yg0ytitagkxafh5cixhs4op</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/clearerr</title>
    <ns>0</ns>
    <id>6235</id>
    <revision>
      <id>84358</id>
      <parentid>78947</parentid>
      <timestamp>2016-03-17T18:47:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>-example with UB (not to mention 1 example per page). Simpler eof example</comment>
      <text xml:space="preserve" bytes="1602">{{c/title | clearerr}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
void clearerr( FILE *stream );
}}

Resets the error flags and the {{tt|EOF}} indicator for the given file stream.

===Parameters===
{{par begin}}
{{par | stream | the file to reset the error flags for }}
{{par end}}

===Return value===
(none)

===Example===
{{example | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;assert.h&gt;
 
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs(&quot;abcde\n&quot;, tmpf);
    rewind(tmpf);
    int ch;
    while ((ch=fgetc(tmpf)) != EOF)
          printf(&quot;%c&quot;, ch);
    assert(feof(tmpf)); // the loop is expected to terminate by eof
    puts(&quot;End of file reached&quot;);
    
    clearerr(tmpf);  // clear eof

    if (feof(tmpf))
        puts(&quot;EOF indicator set&quot;);
    else
        puts(&quot;EOF indicator cleared\n&quot;);
}
 | output=
abcde
End of file reached
EOF indicator cleared
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.10.1 | title=The clearerr function | p=338}}
{{ref std c99}}
{{ref std | section=7.19.10.1 | title=The clearerr function | p=304}}
{{ref std c89}}
{{ref std | section=4.9.10.1  | title=The clearerr function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc feof}}
{{dsc inc | c/io/dsc perror}}
{{dsc inc | c/io/dsc ferror}}
{{dsc see cpp | cpp/io/c/clearerr}}
{{dsc end}}

[[ar:c/io/clearerr]]
[[cs:c/io/clearerr]]
[[de:c/io/clearerr]]
[[es:c/io/clearerr]]
[[fr:c/io/clearerr]]
[[it:c/io/clearerr]]
[[ja:c/io/clearerr]]
[[ko:c/io/clearerr]]
[[pl:c/io/clearerr]]
[[pt:c/io/clearerr]]
[[ru:c/io/clearerr]]
[[tr:c/io/clearerr]]
[[zh:c/io/clearerr]]</text>
      <sha1>cs387h1p81k37tud3hlkizfcggdfsyl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fclose</title>
    <ns>0</ns>
    <id>6199</id>
    <revision>
      <id>84359</id>
      <parentid>78923</parentid>
      <timestamp>2016-03-17T18:52:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+mention UB on using the pointer after the call</comment>
      <text xml:space="preserve" bytes="1394">{{c/title | fclose}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int fclose( FILE *stream );
}}

Closes the given file stream. Any unwritten buffered data are flushed to the OS. Any unread buffered data are discarded.

Whether or not the operation succeeds, the stream is no longer associated with a file, and the buffer allocated by {{lc|setbuf}} or {{lc|setvbuf}}, if any, is also disassociated and deallocated if automatic allocation was used.

The behavior is undefined if the value of the pointer {{tt|stream}} is used after {{tt|fclose}} returns.

===Parameters===
{{par begin}}
{{par | stream | the file stream to close}}
{{par end}}

===Return value===

{{c|0}} on success, {{lc|EOF}} otherwise

===Example===
{{c/io/c/example1}}

===References===
{{ref std c11}}
{{ref std | section=7.21.5.1 | title=The fclose function | p=304}}
{{ref std c99}}
{{ref std | section=7.19.5.1 | title=The fclose function | p=270}}
{{ref std c89}}
{{ref std | section=4.9.5.1  | title=The fclose function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fopen}}
{{dsc inc | c/io/dsc freopen}}
{{dsc see cpp | cpp/io/c/fclose}}
{{dsc end}}

[[ar:c/io/fclose]]
[[cs:c/io/fclose]]
[[de:c/io/fclose]]
[[es:c/io/fclose]]
[[fr:c/io/fclose]]
[[it:c/io/fclose]]
[[ja:c/io/fclose]]
[[ko:c/io/fclose]]
[[pl:c/io/fclose]]
[[pt:c/io/fclose]]
[[ru:c/io/fclose]]
[[tr:c/io/fclose]]
[[zh:c/io/fclose]]</text>
      <sha1>gsyxeyk8o3mwp6rbbc6sgy8vycp52q2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/feof</title>
    <ns>0</ns>
    <id>6236</id>
    <revision>
      <id>78948</id>
      <parentid>77726</parentid>
      <timestamp>2015-06-12T16:32:16Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1578">{{c/title | feof}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int feof( FILE *stream );
}}

Checks if the end of the given file stream has been reached.

===Parameters===
{{par begin}}
{{par | stream | the file stream to check }}
{{par end}}

===Return value===
nonzero value if the end of the stream has been reached, otherwise {{c|0}}

===Notes===
This function only reports the stream state as reported by the most recent I/O operation, it does not examine the associated data source. For example, if the most recent I/O was a {{lc|fgetc}}, which returned the last byte of a file, {{tt|feof}} returns zero. The next {{lc|fgetc}} fails and changes the stream state to ''end-of-file''. Only then {{tt|feof}} returns non-zero.

In typical usage, input stream processing stops on any error; {{tt|feof}} and {{lc|ferror}} are then used to distinguish between different error conditions.

===Example===
{{c/io/c/example1}}

===References===
{{ref std c11}}
{{ref std | section=7.21.10.2 | title=The feof function | p=339}}
{{ref std c99}}
{{ref std | section=7.19.10.2 | title=The feof function | p=305}}
{{ref std c89}}
{{ref std | section=4.9.10.2  | title=The feof function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc clearerr}}
{{dsc inc | c/io/dsc perror}}
{{dsc inc | c/io/dsc ferror}}
{{dsc see cpp | cpp/io/c/feof}}
{{dsc end}}

[[ar:c/io/feof]]
[[cs:c/io/feof]]
[[de:c/io/feof]]
[[es:c/io/feof]]
[[fr:c/io/feof]]
[[it:c/io/feof]]
[[ja:c/io/feof]]
[[ko:c/io/feof]]
[[pl:c/io/feof]]
[[pt:c/io/feof]]
[[ru:c/io/feof]]
[[tr:c/io/feof]]
[[zh:c/io/feof]]</text>
      <sha1>i6wpi3knou55kcr4vjfz5i6gifkm6p9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/ferror</title>
    <ns>0</ns>
    <id>6237</id>
    <revision>
      <id>90269</id>
      <parentid>84363</parentid>
      <timestamp>2017-02-18T12:44:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-perror from seealso per main:talk</comment>
      <text xml:space="preserve" bytes="1578">{{c/title | ferror}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int ferror( FILE *stream );
}}

Checks the given stream for errors.

===Parameters===
{{par begin}}
{{par | stream | the file stream to check }}
{{par end}}

===Return value===
Nonzero value if the file stream has errors occurred, {{c|0}} otherwise 

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;locale.h&gt;
#include &lt;wchar.h&gt;
 
int main(void)
{
    char* fname = tmpnam(NULL);
    FILE* f = fopen(fname, &quot;wb&quot;);
    fputs(&quot;\xff\xff\n&quot;, f); // not a valid UTF-8 character sequence
    fclose(f);

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    f = fopen(fname, &quot;rb&quot;);
    wint_t ch;
    while ((ch=fgetwc(f)) != WEOF) // attempt to read as UTF-8 fails
          printf(&quot;%#x &quot;, ch);
    
    if (feof(f))
        puts(&quot;EOF indicator set&quot;);
    if (ferror(f))
        puts(&quot;Error indicator set&quot;);
}
|output=
Error indicator set
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.10.3 | title=The ferror function | p=339}}
{{ref std c99}}
{{ref std | section=7.19.10.3 | title=The ferror function | p=305}}
{{ref std c89}}
{{ref std | section=4.9.10.3  | title=The ferror function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc clearerr}}
{{dsc inc | c/io/dsc feof}}
{{dsc see cpp | cpp/io/c/ferror}}
{{dsc end}}

[[ar:c/io/ferror]]
[[cs:c/io/ferror]]
[[de:c/io/ferror]]
[[es:c/io/ferror]]
[[fr:c/io/ferror]]
[[it:c/io/ferror]]
[[ja:c/io/ferror]]
[[ko:c/io/ferror]]
[[pl:c/io/ferror]]
[[pt:c/io/ferror]]
[[ru:c/io/ferror]]
[[tr:c/io/ferror]]
[[zh:c/io/ferror]]</text>
      <sha1>s2h5g8gvz2qzwhpa0av9gqnb9oykmbd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fflush</title>
    <ns>0</ns>
    <id>6200</id>
    <revision>
      <id>78924</id>
      <parentid>77690</parentid>
      <timestamp>2015-06-12T15:28:34Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1925">{{c/title | fflush}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int fflush( FILE *stream );
}}

For output streams (and for update streams on which the last operation was output), writes any unwritten data from the {{tt|stream}}'s buffer to the associated output device.

For input streams (and for update streams on which the last operation was input), the behavior is undefined.

If {{tt|stream}} is a null pointer, all open output streams are flushed, including the ones manipulated within library packages or otherwise not directly accessible to the program.

===Parameters===
{{par begin}}
{{par | stream | the file stream to write out}}
{{par end}}

===Return value===
Returns zero on success. Otherwise {{lc|EOF}} is returned and the error indicator of the file stream is set.

===Notes===
POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html extends the specification of fflush] by defining its effects on an input stream, as long as that stream represents a file or another seekable device: in that case the POSIX file pointer is repositioned to match the C stream pointer (which effectively undoes any read buffering) and the effects of any {{lc|ungetc}} or {{lc|ungetwc}} that weren't yet read back from the stream are discarded.

===References===
{{ref std c11}}
{{ref std | section=7.21.5.2 | title=The fflush function | p=305}}
{{ref std c99}}
{{ref std | section=7.19.5.2 | title=The fflush function | p=270-271}}
{{ref std c89}}
{{ref std | section=4.9.5.2  | title=The fflush function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fopen}}
{{dsc inc | c/io/dsc fclose}}
{{dsc see cpp | cpp/io/c/fflush}}
{{dsc end}}

[[ar:c/io/fflush]]
[[cs:c/io/fflush]]
[[de:c/io/fflush]]
[[es:c/io/fflush]]
[[fr:c/io/fflush]]
[[it:c/io/fflush]]
[[ja:c/io/fflush]]
[[ko:c/io/fflush]]
[[pl:c/io/fflush]]
[[pt:c/io/fflush]]
[[ru:c/io/fflush]]
[[tr:c/io/fflush]]
[[zh:c/io/fflush]]</text>
      <sha1>lnylgtp7wm8jr1zn58b7vge465j3hmn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fgetc</title>
    <ns>0</ns>
    <id>6206</id>
    <revision>
      <id>78931</id>
      <parentid>77709</parentid>
      <timestamp>2015-06-12T15:55:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1643">{{c/title | fgetc | getc}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl |
int fgetc( FILE *stream );
}}
{{dcl |
int getc( FILE *stream );
}}
{{dcl rev end}}
{{dcl end}}

Reads the next character from the given input stream. {{c|getc()}} may be implemented as a macro. 

===Parameters===
{{par begin}}
{{par | stream | to read the character from }}
{{par end}}

===Return value===
The obtained character on success or {{lc|EOF}} on failure. 

If the failure has been caused by end-of-file condition, additionally sets the ''eof'' indicator (see {{lc|feof()}}) on {{tt|stream}}. If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|ferror()}}) on {{tt|stream}}.

===Example===
{{c/io/c/example1}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.1 | title=The fgetc function | p=330}}
{{ref std | section=7.21.7.5 | title=The getc function  | p=332}}
{{ref std c99}}
{{ref std | section=7.19.7.1 | title=The fgetc function | p=296}}
{{ref std | section=7.19.7.5 | title=The getc function  | p=297-298}}
{{ref std c89}}
{{ref std | section=4.9.7.1  | title=The fgetc function}}
{{ref std | section=4.9.7.5  | title=The getc function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc gets}}
{{dsc inc | c/io/dsc fputc}}
{{dsc inc | c/io/dsc ungetc}}
{{dsc see cpp | cpp/io/c/fgetc | fgetc | getc}}
{{dsc end}}

[[ar:c/io/fgetc]]
[[cs:c/io/fgetc]]
[[de:c/io/fgetc]]
[[es:c/io/fgetc]]
[[fr:c/io/fgetc]]
[[it:c/io/fgetc]]
[[ja:c/io/fgetc]]
[[ko:c/io/fgetc]]
[[pl:c/io/fgetc]]
[[pt:c/io/fgetc]]
[[ru:c/io/fgetc]]
[[tr:c/io/fgetc]]
[[zh:c/io/fgetc]]</text>
      <sha1>i2gl91g2f3fjw1nslmcm2yq00u3boaf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fgetpos</title>
    <ns>0</ns>
    <id>6231</id>
    <revision>
      <id>82021</id>
      <parentid>82020</parentid>
      <timestamp>2015-11-25T19:09:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>example tweaks (use one double to read since only one is ever read, close the file, actually show fsetpos failing)</comment>
      <text xml:space="preserve" bytes="2637">{{c/title | fgetpos}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
int fgetpos( FILE          *stream, fpos_t          *pos );
}}
{{dcl | since=c99 |
int fgetpos( FILE *restrict stream, fpos_t *restrict pos );
}}
{{dcl rev end}}
{{dcl end}}

Obtains the file position indicator and the current parse state (if any) for the file stream {{tt|stream}} and stores them in the object pointed to by {{tt|pos}}. The value stored is only meaningful as the input to {{lc|fsetpos}}.


===Parameters===
{{par begin}}
{{par | stream | file stream to examine}}
{{par | pos | pointer to a {{lc|fpos_t}} object to store the file position indicator to}}
{{par end}}

===Return value===
{{c|0}} upon success, nonzero value otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;assert.h&gt;

int main(void)
{
    // prepare a file holding 4 values of type double
    enum {SIZE = 4};
    FILE* fp = fopen(&quot;test.bin&quot;, &quot;wb&quot;);
    assert(fp);
    int rc = fwrite((double[SIZE]){1.1, 2.2, 3.3, 4.4}, sizeof(double), SIZE, fp);
    assert(rc == SIZE);
    fclose(fp);

    // demo using fsetpos to return to the beginning of a file
    fp = fopen(&quot;test.bin&quot;, &quot;rb&quot;);
    fpos_t pos;
    fgetpos(fp, &amp;pos);               // store start of file in pos
    double d;
    rc = fread(&amp;d, sizeof d, 1, fp); // read the first double
    assert(rc == 1);
    printf(&quot;First value in the file: %.1f\n&quot;, d);
    fsetpos(fp,&amp;pos);                 // move file position back to the start of the file
    rc = fread(&amp;d, sizeof d, 1, fp);  // read the first double again
    assert(rc == 1);
    printf(&quot;First value in the file again: %.1f\n&quot;, d);
    fclose(fp);

    // demo error handling
    rc = fsetpos(stdin, &amp;pos);
    if(rc) perror(&quot;could not fsetpos stdin&quot;);
}
 | output=
First value in the file: 1.1
First value in the file again: 1.1
could not fsetpos stdin: Illegal seek
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.9.1 | title=The fgetpos function | p=336}}
{{ref std c99}}
{{ref std | section=7.19.9.1 | title=The fgetpos function | p=302}}
{{ref std c89}}
{{ref std | section=4.9.9.1  | title=The fgetpos function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc ftell}}
{{dsc inc | c/io/dsc fseek}}
{{dsc inc | c/io/dsc fsetpos}}
{{dsc see cpp | cpp/io/c/fgetpos}}
{{dsc end}}

[[ar:c/io/fgetpos]]
[[cs:c/io/fgetpos]]
[[de:c/io/fgetpos]]
[[es:c/io/fgetpos]]
[[fr:c/io/fgetpos]]
[[it:c/io/fgetpos]]
[[ja:c/io/fgetpos]]
[[ko:c/io/fgetpos]]
[[pl:c/io/fgetpos]]
[[pt:c/io/fgetpos]]
[[ru:c/io/fgetpos]]
[[tr:c/io/fgetpos]]
[[zh:c/io/fgetpos]]</text>
      <sha1>awhowr8wh9ruxyppcc8ytt2vraoqflh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fgets</title>
    <ns>0</ns>
    <id>6207</id>
    <revision>
      <id>85689</id>
      <parentid>83815</parentid>
      <timestamp>2016-05-02T14:39:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso getline</comment>
      <text xml:space="preserve" bytes="3144">{{c/title | fgets}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
char *fgets( char          *str, int count, FILE          *stream );
}}
{{dcl | since=c99 |
char *fgets( char *restrict str, int count, FILE *restrict stream );
}}
{{dcl rev end}}
{{dcl end}}

Reads at most {{c|count - 1}} characters from the given file stream and stores them in the character array pointed to by {{tt|str}}. Parsing stops if end-of-file occurs or a newline character is found, in which case {{tt|str}} will contain that newline character. If no errors occur, writes a null character at the position immediately after the last character written to {{tt|str}}.

The behavior is undefined if {{tt|count}} is less than 1.

===Parameters===
{{par begin}}
{{par | str | pointer to an element of a char array}}
{{par | count | maximum number of characters to write (typically the length of {{tt|str}})}}
{{par | stream | file stream to read the data from}}
{{par end}}

===Return value===
{{tt|str}} on success, null pointer on failure.

If the failure has been caused by end-of-file condition, additionally sets the ''eof'' indicator (see {{lc|feof()}}) on {{tt|stream}}. The contents of the array pointed to by {{tt|str}} are not altered in this case.

If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|ferror()}}) on {{tt|stream}}. The contents of the array pointed to by {{tt|str}} are indeterminate (it may not even be null-terminated).

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html POSIX additionally requires] that {{c|fgets}} sets {{lc|errno}} if it encounters an failure other than the end-of-file condition.

Although the standard specification is ambiguous in the case where {{c|1=count==1}}, common implementations read no characters, store zero in {{c|str[0]}}, and report success (return {{tt|str}})

===Example===
{{example | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
 
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs(&quot;Alan Turing\n&quot;, tmpf);
    fputs(&quot;John von Neumann\n&quot;, tmpf);
    fputs(&quot;Alonzo Church\n&quot;, tmpf);
 
    rewind(tmpf);
    
    char buf[8];
    while (fgets(buf, sizeof buf, tmpf) != NULL)
          printf(&quot;\&quot;%s\&quot;\n&quot;, buf);

    if (feof(tmpf))
       puts(&quot;End of file reached&quot;);
}
 | output=
&quot;Alan Tu&quot;
&quot;ring
&quot;
&quot;John vo&quot;
&quot;n Neuma&quot;
&quot;nn
&quot;
&quot;Alonzo &quot;
&quot;Church
&quot;
End of file reached
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.2 | title=The fgets function | p=331}}
{{ref std c99}}
{{ref std | section=7.19.7.2 | title=The fgets function | p=296}}
{{ref std c89}}
{{ref std | section=4.9.7.2  | title=The fgets function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fscanf}}
{{dsc inc | c/io/dsc gets}}
{{dsc inc | c/io/dsc fputs}}
{{dsc inc | c/experimental/dynamic/dsc getline}}
{{dsc see cpp | cpp/io/c/fgets}}
{{dsc end}}

[[ar:c/io/fgets]]
[[cs:c/io/fgets]]
[[de:c/io/fgets]]
[[es:c/io/fgets]]
[[fr:c/io/fgets]]
[[it:c/io/fgets]]
[[ja:c/io/fgets]]
[[ko:c/io/fgets]]
[[pl:c/io/fgets]]
[[pt:c/io/fgets]]
[[ru:c/io/fgets]]
[[tr:c/io/fgets]]
[[zh:c/io/fgets]]</text>
      <sha1>lry6672xtommyzuzw8fgzas4n2en40n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fgetwc</title>
    <ns>0</ns>
    <id>6215</id>
    <revision>
      <id>77739</id>
      <parentid>77734</parentid>
      <timestamp>2015-04-04T21:10:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="1533">{{c/title | fgetwc }}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin}}
{{dcl |notes={{mark since c95}}|
wint_t fgetwc( FILE *stream );
}}
{{dcl |notes={{mark since c95}}|
wint_t getwc( FILE *stream );
}}
{{dcl rev end}}
{{dcl end}}

Reads the next wide character from the given input stream. {{c|getwc()}} may be implemented as a macro and may evaluate {{tt|stream}} more than once.

===Parameters===
{{par begin}}
{{par | stream | to read the wide character from }}
{{par end}}

===Return value===
The next wide character from the stream or {{c|WEOF}} if an error has occurred or the end of file has been reached. If an encoding error occurred, {{lc|errno}} is set to {{tt|EILSEQ}}.

===Example===
{{example
|code=
|output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.3.1 | title=The fgetwc function | p=421-422}}
{{ref std | section=7.29.3.6 | title=The getwc function  | p=424}}
{{ref std c99}}
{{ref std | section=7.24.3.1 | title=The fgetwc function | p=367}}
{{ref std | section=7.24.3.6 | title=The getwc function  | p=369}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fgetc}}
{{dsc inc | c/io/dsc fgetws}}
{{dsc inc | c/io/dsc fputwc}}
{{dsc inc | c/io/dsc ungetwc}}
{{dsc see cpp | cpp/io/c/fgetwc}}
{{dsc end}}

[[ar:c/io/fgetwc]]
[[cs:c/io/fgetwc]]
[[de:c/io/fgetwc]]
[[es:c/io/fgetwc]]
[[fr:c/io/fgetwc]]
[[it:c/io/fgetwc]]
[[ja:c/io/fgetwc]]
[[ko:c/io/fgetwc]]
[[pl:c/io/fgetwc]]
[[pt:c/io/fgetwc]]
[[ru:c/io/fgetwc]]
[[tr:c/io/fgetwc]]
[[zh:c/io/fgetwc]]</text>
      <sha1>6sraxgknvh6d0jd7b932ew1i77rpo2x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fgetws</title>
    <ns>0</ns>
    <id>6216</id>
    <revision>
      <id>85690</id>
      <parentid>77735</parentid>
      <timestamp>2016-05-02T14:39:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso getline</comment>
      <text xml:space="preserve" bytes="1377">{{c/title | fgetws}}
{{c/io/navbar}}
{{ddcl | header=wchar.h | notes={{mark since c95}}|
wchar_t *fgetws( wchar_t *str, int count, FILE *stream );
}}

Reads at most {{c|count - 1}} wide characters from the given file stream and stores them in {{tt|str}}. The produced wide string is always null-terminated. Parsing stops if end-of-file occurs or a newline wide character is found, in which case {{tt|str}} will contain that wide newline character.

===Parameters===
{{par begin}}
{{par | str | wide string to read the characters to}}
{{par | count | the length of {{tt|str}}}}
{{par | stream | file stream to read the data from}}
{{par end}}

===Return value===

{{tt|str}} on success, {{lc|NULL}} on an error

===References===
{{ref std c11}}
{{ref std | section=7.29.3.2 | title=The fgetws function | p=422}}
{{ref std c99}}
{{ref std | section=7.24.3.2 | title=The fgetws function | p=367-368}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fwscanf}}
{{dsc inc | c/io/dsc fgetwc}}
{{dsc inc | c/io/dsc fputws}}
{{dsc inc | c/experimental/dynamic/dsc getline}}
{{dsc see cpp | cpp/io/c/fgetws}}
{{dsc end}}

[[ar:c/io/fgetws]]
[[cs:c/io/fgetws]]
[[de:c/io/fgetws]]
[[es:c/io/fgetws]]
[[fr:c/io/fgetws]]
[[it:c/io/fgetws]]
[[ja:c/io/fgetws]]
[[ko:c/io/fgetws]]
[[pl:c/io/fgetws]]
[[pt:c/io/fgetws]]
[[ru:c/io/fgetws]]
[[tr:c/io/fgetws]]
[[zh:c/io/fgetws]]</text>
      <sha1>4omp2ecjbtjgdq8fyfuz5mh0e7hf5kf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fopen</title>
    <ns>0</ns>
    <id>6197</id>
    <revision>
      <id>78925</id>
      <parentid>77829</parentid>
      <timestamp>2015-06-12T15:30:18Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3248">{{c/title | fopen | fopen_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin| num=1}}
{{dcl | until=c99 |
FILE *fopen( const char *filename, const char *mode );
}}
{{dcl | since=c99 |
FILE *fopen( const char *restrict filename, const char *restrict mode );
}}
{{dcl rev end}}
{{dcl | num=2 | since=c11|
errno_t fopen_s(FILE *restrict *restrict streamptr,
                const char *restrict filename,
                const char *restrict mode);
}}
{{dcl end}}

@1@ Opens a file indicated by {{tt|filename}} and returns a pointer to the file stream associated with that file. {{tt|mode}} is used to determine the file access mode. 
@2@ Same as {{v|1}}, except that the pointer to the file stream is written to {{tt|streamptr}} and the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|streamptr}} is a null pointer
:* {{tt|filename}} is a null pointer
:* {{tt|mode}} is a null pointer
:As all bounds-checked functions, {{tt|fopen_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

===Parameters===
{{par begin}}
{{par | filename | file name to associate the file stream to}}
{{par | mode | null-terminated character string determining file access mode

{{c/io/file access flags}}}}
{{par | streamptr | pointer to a pointer where the function stores the result (an out-parameter)}}
{{par end}}

===Return value===
@1@ If successful, returns a pointer to the new file stream. The stream is fully buffered unless {{tt|filename}} refers to an interactive device.  On error, returns a {{lc|null pointer}}. [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html POSIX requires] that {{lc|errno}} is set in this case.

@2@ 
If successful, returns zero and a pointer to the new file stream is written to {{tt|*streamptr}}.  On error, returns a non-zero error code and writes the null pointer to {{tt|*streamptr}} (unless {{tt|streamptr}} is a null pointer itself).

===Notes===
The format of {{tt|filename}} is implementation-defined, and does not necessarily refer to a file (e.g. it may be the console or another device accessible though filesystem API). On platforms that support them, {{tt|filename}} may include absolute or relative filesystem path.

===Example===
{{c/io/c/example1}}

===References===
{{ref std c11}}
{{ref std | section=7.21.5.3  | title=The fopen function   | p=305-306}}
{{ref std | section=K.3.5.2.1 | title=The fopen_s function | p=588-590}}
{{ref std c99}}
{{ref std | section=7.19.5.3  | title=The fopen function   | p=271-272}}
{{ref std c89}}
{{ref std | section=4.9.5.3   | title=The fopen function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fclose}}
{{dsc inc | c/io/dsc fflush}}
{{dsc inc | c/io/dsc freopen}}
{{dsc see cpp | cpp/io/c/fopen}}
{{dsc end}}

[[ar:c/io/fopen]]
[[cs:c/io/fopen]]
[[de:c/io/fopen]]
[[es:c/io/fopen]]
[[fr:c/io/fopen]]
[[it:c/io/fopen]]
[[ja:c/io/fopen]]
[[ko:c/io/fopen]]
[[pl:c/io/fopen]]
[[pt:c/io/fopen]]
[[ru:c/io/fopen]]
[[tr:c/io/fopen]]
[[zh:c/io/fopen]]</text>
      <sha1>sp52ab8y9ao33jhtpaxyzgjtj599grd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fprintf</title>
    <ns>0</ns>
    <id>6224</id>
    <revision>
      <id>88109</id>
      <parentid>87150</parentid>
      <timestamp>2016-11-02T13:33:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>templated posix note</comment>
      <text xml:space="preserve" bytes="8640">{{c/title | printf | fprintf | sprintf | snprintf | printf_s | fprintf_s | sprintf_s | snprintf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin | num=1}}
{{dcl | until=c99 |
​int printf( const char *format, ... );​
}}
{{dcl | since=c99 |
​int printf( const char *restrict format, ... );​
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c99 |
int fprintf( FILE *stream, const char *format, ... );
}}
{{dcl | since=c99 |
int fprintf( FILE *restrict stream, const char *restrict format, ... );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | until=c99 |
int sprintf( char *buffer, const char *format, ... );
}}
{{dcl | since=c99 |
int sprintf( char *restrict buffer, const char *restrict format, ... );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c99 |
int snprintf( char *restrict buffer, int bufsz, 
              const char *restrict format, ... );
}}
{{dcl | num=5 | since=c11 |
int printf_s(const char *restrict format, ...);
}}
{{dcl | num=6 | since=c11 |
int fprintf_s(FILE *restrict stream, const char *restrict format, ...);
}}
{{dcl | num=7 | since=c11 |
int sprintf_s(char *restrict buffer, rsize_t bufsz,
              const char *restrict format, ...);
}}
{{dcl | num=8 | since=c11 |
int snprintf_s(char *restrict buffer, rsize_t bufsz,
               const char *restrict format, ...);
}}
{{dcl end}}

Loads the data from the given locations, converts them to character string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to the output stream {{lc|stdout}}.
@2@ Writes the results to the output stream {{tt|stream}}.
@3@ Writes the results to a character string {{tt|buffer}}. The behavior is undefined if the string to be written (plus the terminating null character) exceeds the size of the array pointed to by {{tt|buffer}}.
@4@ Writes the results to a character string {{tt|buffer}}. At most {{tt|bufsz}} - 1 characters are written. The resulting character string will be terminated with a null character, unless {{tt|bufsz}} is zero. If {{tt|bufsz}} is zero, nothing is written and {{tt|buffer}} may be a null pointer, however the return value (number of bytes that would be written) is still calculated and returned.
@5-8@ Same as {{v|1-4}}, except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* the conversion specifier {{tt|%n}} is present in {{tt|format}}
:* any of the arguments corresponding to {{tt|%s}} is a null pointer
:* {{tt|format}} or {{tt|buffer}} is a null pointer
:* {{tt|bufsz}} is zero or greater than {{lc|RSIZE_MAX}}
:* encoding errors occur in any of string and character conversion specifiers
:* (for {{tt|sprintf_s}} only), the string to be stored in {{tt|buffer}} (including the trailing null) would be exceed {{tt|bufsz}}
:As all bounds-checked functions, {{tt|printf_s}}, {{tt|fprintf_s}}, {{tt|sprintf_s}}, and {{tt|snrintf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | output file stream to write to}}
{{par | buffer | pointer to a character string to write to}}
{{par | bufsz | up to bufsz - 1 characters may be written, plus the null terminator}}
{{par | format | pointer to a null-terminated multibyte string specifying how to interpret the data.
{{cpp/io/c/printf format}}
}}
{{par | ... | arguments specifying data to print }}
{{par end}}

===Return value===
@1,2@ number of characters transmitted to the output stream or negative value if an output error  or an encoding error (for string and character conversion specifiers) occurred
@3@ number of characters written to {{tt|buffer}} (not counting the terminating null character), or a negative value if an encoding error (for string and character conversion specifiers) occurred
@4@ number of characters (not including the terminating null character) which would have been written to {{tt|buffer}} if {{tt|bufsz}} was ignored, or a negative value if an encoding error (for string and character conversion specifiers) occurred
@5,6@ number of characters transmitted to the output stream or negative value if an output error, a runtime constrants violation error, or an encoding error occurred.
@7@ number of characters written to {{tt|buffer}}, not counting the null character (which is always written as long as {{tt|buffer}} is not a null pointer and {{tt|bufsz}} is not zero and not greater than {{tt|RSIZE_MAX}}), or zero on runtime constraint violations, and negative value on encoding errors
@8@ number of characters not including the terminating null character (which is always written as long as {{tt|buffer}} is not a null pointer and {{tt|bufsz}} is not zero and not greater than {{tt|RSIZE_MAX}}), which would have been written to {{tt|buffer}} if {{tt|bufsz}} was ignored, or a negative value if a runtime constraints violation or an encoding error occurred

===Notes===

The C standard and  [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html POSIX] specify that the behavior of {{tt|sprintf}} and its variants is undefined when an argument overlaps with the destination buffer. Example:

{{source|1=
sprintf(dst, &quot;%s and %s&quot;, dst, t); // &lt;- broken: undefined behavior
}}

{{cpp/io/c/printf posix note}}

Calling {{tt|snprintf}} with zero {{tt|bufsz}} and null pointer for {{tt|buffer}} is useful to determine the necessary buffer size to contain the output:
{{source|1=
const char *fmt = &quot;sqrt(2) = %f&quot;;
int sz = snprintf(NULL, 0, fmt, sqrt(2));
char buf[sz + 1]; // note +1 for terminating null byte
snprintf(buf, sizeof buf, fmt, sqrt(2));
}}

{{tt|snprintf_s}}, just like {{tt|snprintf}}, but unlike {{tt|sprintf_s}}, will truncate the output to fit in {{tt|bufsz-1}}.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;

int main(void)
{
    printf(&quot;Strings:\n&quot;);
    const char* s = &quot;Hello&quot;;
    printf(&quot;\t.%10s.\n\t.%-10s.\n\t.%*s.\n&quot;, s, s, 10, s);

    printf(&quot;Characters:\t%c %%\n&quot;, 65);

    printf(&quot;Integers\n&quot;);
    printf(&quot;Decimal:\t%i %d %.6i %i %.0i %+i %u\n&quot;, 1, 2, 3, 0, 0, 4, -1);
    printf(&quot;Hexadecimal:\t%x %x %X %#x\n&quot;, 5, 10, 10, 6);
    printf(&quot;Octal:\t%o %#o %#o\n&quot;, 10, 10, 4);

    printf(&quot;Floating point\n&quot;);
    printf(&quot;Rounding:\t%f %.0f %.32f\n&quot;, 1.5, 1.5, 1.3);
    printf(&quot;Padding:\t%05.2f %.2f %5.2f\n&quot;, 1.5, 1.5, 1.5);
    printf(&quot;Scientific:\t%E %e\n&quot;, 1.5, 1.5);
    printf(&quot;Hexadecimal:\t%a %A\n&quot;, 1.5, 1.5);
}
 | output=
Strings:
    .     Hello.
    .Hello     .
    .     Hello.
Characters:     A %
Integers
Decimal:        1 2 000003 0  +4 4294967295
Hexadecimal:    5 a A 0x6
Octal:          12 012 04
Floating point
Rounding:       1.500000 2 1.30000000000000004440892098500626
Padding:        01.50 1.50  1.50
Scientific:     1.500000E+00 1.500000e+00
Hexadecimal:    0x1.8p+0 0X1.8P+0
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.6.1  | title=The fprintf function    | p=309-316}}
{{ref std | section=7.21.6.3  | title=The printf function     | p=324}}
{{ref std | section=7.21.6.5  | title=The snprintf function   | p=325}}
{{ref std | section=7.21.6.6  | title=The sprintf function    | p=325-326}}
{{ref std | section=K.3.5.3.1 | title=The fprintf_s function  | p=591}}
{{ref std | section=K.3.5.3.3 | title=The printf_s function   | p=593-594}}
{{ref std | section=K.3.5.3.5 | title=The snprintf_s function | p=594-595}}
{{ref std | section=K.3.5.3.6 | title=The sprintf_s function  | p=595-596}}
{{ref std c99}}
{{ref std | section=7.19.6.1  | title=The fprintf function    | p=274-282}}
{{ref std | section=7.19.6.3  | title=The printf function     | p=290}}
{{ref std | section=7.19.6.5  | title=The snprintf function   | p=290-291}}
{{ref std | section=7.19.6.6  | title=The sprintf function    | p=291}}
{{ref std c89}}
{{ref std | section=4.9.6.1   | title=The fprintf function}}
{{ref std | section=4.9.6.3   | title=The printf function}}
{{ref std | section=4.9.6.5   | title=The sprintf function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fwprintf}}
{{dsc inc | c/io/dsc vfprintf}}
{{dsc inc | c/io/dsc fputs}}
{{dsc inc | c/io/dsc fscanf}}
{{dsc see cpp | cpp/io/c/fprintf | printf | fprintf | sprintf | snprintf}}
{{dsc end}}

[[ar:c/io/fprintf]]
[[cs:c/io/fprintf]]
[[de:c/io/fprintf]]
[[es:c/io/fprintf]]
[[fr:c/io/fprintf]]
[[it:c/io/fprintf]]
[[ja:c/io/fprintf]]
[[ko:c/io/fprintf]]
[[pl:c/io/fprintf]]
[[pt:c/io/fprintf]]
[[ru:c/io/fprintf]]
[[tr:c/io/fprintf]]
[[zh:c/io/fprintf]]</text>
      <sha1>k8favb3ime7sfcnj1wggarh4i2ei1z6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fputc</title>
    <ns>0</ns>
    <id>6208</id>
    <revision>
      <id>85076</id>
      <parentid>78933</parentid>
      <timestamp>2016-03-28T20:31:41Z</timestamp>
      <contributor>
        <ip>31.223.129.91</ip>
      </contributor>
      <comment>typo, evaluation -&gt; evaluate</comment>
      <text xml:space="preserve" bytes="2235">{{c/title | fputc | putc}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl |
int fputc( int ch, FILE *stream );
}}
{{dcl |
int putc( int ch, FILE *stream );
}}
{{dcl rev end}}
{{dcl end}}

Writes a character {{tt|ch}} to the given output stream {{tt|stream}}. {{c|putc()}} may be implemented as a macro and evaluate {{tt|stream}} more than once, so the corresponding argument should never be an expression with side effects. 

Internally, the character is converted to {{c|unsigned char}} just before being written.

===Parameters===
{{par begin}}
{{par | ch | character to be written}}
{{par | stream | output stream}}
{{par end}}

===Return value===
On success, returns the written character.

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|ferror()}}) on {{tt|stream}}.

===Example===
{{example | putc with error checking
|code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
 
int main(void)
{
    int ret_code = 0;
    for (char c = 'a'; (ret_code != EOF) &amp;&amp; (c != 'z'); c++)
        ret_code = putc(c, stdout);
 
    /* Test whether EOF was reached. */
    if (ret_code == EOF)
       if (ferror(stdout)) 
       {
          perror(&quot;putc()&quot;);
          fprintf(stderr,&quot;putc() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-7);
          exit(EXIT_FAILURE);
       }
    putc('\n', stdout);
 
    return EXIT_SUCCESS;
}
|output=
abcdefghijklmnopqrstuvwxy
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.3 | title=The fputc function | p=331}}
{{ref std | section=7.21.7.7 | title=The putc function  | p=333}}
{{ref std c99}}
{{ref std | section=7.19.7.3 | title=The fputc function | p=297}}
{{ref std | section=7.19.7.8 | title=The putc function  | p=299}}
{{ref std c89}}
{{ref std | section=4.9.7.3  | title=The fputc function}}
{{ref std | section=4.9.7.8  | title=The putc function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc putchar}}
{{dsc see cpp | cpp/io/c/fputc | fputc | putc}}
{{dsc end}}

[[ar:c/io/fputc]]
[[cs:c/io/fputc]]
[[de:c/io/fputc]]
[[es:c/io/fputc]]
[[fr:c/io/fputc]]
[[it:c/io/fputc]]
[[ja:c/io/fputc]]
[[ko:c/io/fputc]]
[[pl:c/io/fputc]]
[[pt:c/io/fputc]]
[[ru:c/io/fputc]]
[[tr:c/io/fputc]]
[[zh:c/io/fputc]]</text>
      <sha1>7tn7vilqnq4yxtcvk7rca1gkwxjnhsj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fputs</title>
    <ns>0</ns>
    <id>6209</id>
    <revision>
      <id>85757</id>
      <parentid>82744</parentid>
      <timestamp>2016-05-13T15:49:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail, simpler example</comment>
      <text xml:space="preserve" bytes="2100">{{c/title | fputs}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
int fputs( const char          *str, FILE          *stream );
}}
{{dcl | since=c99 |
int fputs( const char *restrict str, FILE *restrict stream );
}}
{{dcl rev end}}
{{dcl end}}

Writes every character from the null-terminated string {{tt|str}} to the output stream {{tt|stream}}, as if by repeatedly executing {{lc|fputc}}.

The terminating null character from {{tt|str}} is not written.

===Parameters===
{{par begin}}
{{par | str | null-terminated character string to be written}}
{{par | stream | output stream}}
{{par end}}

===Return value===
On success, returns a non-negative value

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|ferror()}}) on {{tt|stream}}.

===Notes===
The related function {{lc|puts}} appends a newline character to the output, while {{tt|fputs}} writes the string unmodified.

Different implementations return different non-negative numbers: some return the last character written, some return the number of characters written (or INT_MAX if the string was longer than that), some simply return a non-negative constant such as zero.

===Example===
{{example | code=
#include &lt;stdio.h&gt;
 
int main(void)
{
    int rc = fputs(&quot;Hello World&quot;, stdout);

    if (rc == EOF)
       perror(&quot;fputs()&quot;); // POSIX requires that errno is set
}
 | output=
Hello World
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.4 | title=The fputs function | p=331-332}}
{{ref std c99}}
{{ref std | section=7.19.7.4 | title=The fputs function | p=297}}
{{ref std c89}}
{{ref std | section=4.9.7.4  | title=The fputs function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fprintf}}
{{dsc inc | c/io/dsc puts}}
{{dsc inc | c/io/dsc fgets}}
{{dsc see cpp | cpp/io/c/fputs}}
{{dsc end}}

[[ar:c/io/fputs]]
[[cs:c/io/fputs]]
[[de:c/io/fputs]]
[[es:c/io/fputs]]
[[fr:c/io/fputs]]
[[it:c/io/fputs]]
[[ja:c/io/fputs]]
[[ko:c/io/fputs]]
[[pl:c/io/fputs]]
[[pt:c/io/fputs]]
[[ru:c/io/fputs]]
[[tr:c/io/fputs]]
[[zh:c/io/fputs]]</text>
      <sha1>39awru4qsl1hd55smu8yxavm4197494</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fputwc</title>
    <ns>0</ns>
    <id>6217</id>
    <revision>
      <id>89607</id>
      <parentid>77741</parentid>
      <timestamp>2017-01-22T10:09:30Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1507">{{c/title | fputwc | putwc }}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin}}
{{dcl |notes={{mark since c95}}|
wint_t fputwc( wchar_t ch, FILE *stream );
}}
{{dcl |notes={{mark since c95}}|
wint_t putwc( wchar_t ch, FILE *stream );
}}
{{dcl rev end}}
{{dcl end}}

Writes a wide character {{tt|ch}} to the given output stream {{tt|stream}}. {{c|putwc()}} may be implemented as a macro and may evaluate {{tt|stream}} more than once.

===Parameters===
{{par begin}}
{{par | ch | wide character to be written}}
{{par | stream | the output stream}}
{{par end}}

===Return value===
{{tt|ch}} on success, {{c|WEOF}} on failure. If an encoding error occurs, {{lc|errno}} is set to {{tt|EILSEQ}}.

===Example===
{{example
|code=
|output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.3.3 | title=The fputwc function | p=422-423}}
{{ref std | section=7.29.3.8 | title=The putwc function  | p=424}}
{{ref std c99}}
{{ref std | section=7.24.3.3 | title=The fputwc function | p=368}}
{{ref std | section=7.24.3.8 | title=The putwc function  | p=370}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fputc}}
{{dsc inc | c/io/dsc fputws}}
{{dsc inc | c/io/dsc fgetwc}}
{{dsc see cpp | cpp/io/c/fputwc}}
{{dsc end}}

[[ar:c/io/fputwc]]
[[cs:c/io/fputwc]]
[[de:c/io/fputwc]]
[[es:c/io/fputwc]]
[[fr:c/io/fputwc]]
[[it:c/io/fputwc]]
[[ja:c/io/fputwc]]
[[ko:c/io/fputwc]]
[[pl:c/io/fputwc]]
[[pt:c/io/fputwc]]
[[ru:c/io/fputwc]]
[[tr:c/io/fputwc]]
[[zh:c/io/fputwc]]</text>
      <sha1>m7qpv9bfgo5hhmsx5jyjbwk5l3ht3zl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fputws</title>
    <ns>0</ns>
    <id>6218</id>
    <revision>
      <id>85760</id>
      <parentid>85759</parentid>
      <timestamp>2016-05-13T16:03:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/WEOF/EOF</comment>
      <text xml:space="preserve" bytes="1791">{{c/title | fputws}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin}}
{{dcl | notes={{mark since c95}}| until=c99 |
int fputws( const wchar_t *str, FILE *stream );
}}
{{dcl | since=c99 |
int fputws( const wchar_t * restrict str, FILE * restrict stream );
}}
{{dcl rev end}}
{{dcl end}}

Writes every character from the null-terminated wide string {{tt|str}} to the output stream {{tt|stream}}, as if by repeatedly executing {{lc|fputwc}}.

The terminating null wide character from {{tt|str}} is not written.

===Parameters===
{{par begin}}
{{par | str | null-terminated wide string to be written}}
{{par | stream | output stream}}
{{par end}}

===Return value===
On success, returns a non-negative value

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|ferror}}) on {{tt|stream}}.

===Example===
{{example | code=
#include &lt;locale.h&gt;
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
 
int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    int rc = fputws(L&quot;御休みなさい&quot;, stdout);

    if (rc == EOF)
       perror(&quot;fputws()&quot;); // POSIX requires that errno is set
}
 | output=
御休みなさい
}}
===References===
{{ref std c11}}
{{ref std | section=7.29.3.4 | title=The fputws function | p=423}}
{{ref std c99}}
{{ref std | section=7.24.3.4 | title=The fputws function | p=368}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fputs}}
{{dsc inc | c/io/dsc fwprintf}}
{{dsc inc | c/io/dsc fputws}}
{{dsc inc | c/io/dsc fgetws}}
{{dsc see cpp | cpp/io/c/fputws}}
{{dsc end}}

[[ar:c/io/fputws]]
[[cs:c/io/fputws]]
[[de:c/io/fputws]]
[[es:c/io/fputws]]
[[fr:c/io/fputws]]
[[it:c/io/fputws]]
[[ja:c/io/fputws]]
[[ko:c/io/fputws]]
[[pl:c/io/fputws]]
[[pt:c/io/fputws]]
[[ru:c/io/fputws]]
[[tr:c/io/fputws]]
[[zh:c/io/fputws]]</text>
      <sha1>fhp828z2qm3746ol0te2wwy8gnmrfuy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fread</title>
    <ns>0</ns>
    <id>6204</id>
    <revision>
      <id>91113</id>
      <parentid>85082</parentid>
      <timestamp>2017-03-20T04:54:14Z</timestamp>
      <contributor>
        <ip>113.161.38.169</ip>
      </contributor>
      <text xml:space="preserve" bytes="3159">{{c/title | fread}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
size_t fread( void          *buffer, size_t size, size_t count,
              FILE          *stream );
}}
{{dcl | since=c99 |
size_t fread( void *restrict buffer, size_t size, size_t count, 
              FILE *restrict stream );
}}
{{dcl rev end}}
{{dcl end}}

Reads up to {{tt|count}} objects into the array {{tt|buffer}} from the given input stream {{tt|stream}} as if by calling {{lc|fgetc}} {{tt|size}} times for each object, and storing the results, in the order obtained, into the successive positions of {{tt|buffer}}, which is reinterpreted as an array of {{c|unsigned char}}. The file position indicator for the stream is advanced by the number of characters read.

If an error occurs, the resulting value of the file position indicator for the stream is
indeterminate. If a partial element is read, its value is indeterminate.

===Parameters===
{{par begin}}
{{par | buffer | pointer to the array where the read objects are stored}}
{{par | size | size of each object in bytes}}
{{par | count | the number of the objects to be read}}
{{par | stream | the stream to read}}
{{par end}}

===Return value===
Number of objects read successfully, which may be less than {{tt|count}} if an error or end-of-file condition occurs. 

If {{tt|size}} or {{tt|count}} is zero, {{tt|fread}} returns zero and performs no other action.

{{tt|fread}} does not distinguish between end-of-file and error, and callers must use {{lc|feof}} and {{lc|ferror}} to determine which occurred.

===Example===
{{example|
| code=
#include &lt;stdio.h&gt;

enum { SIZE = 5 };
int main(void)
{
    double a[SIZE] = {1.,2.,3.,4.,5.};
    FILE *fp = fopen(&quot;test.bin&quot;, &quot;wb&quot;); // must use binary mode
    fwrite(a, sizeof *a, SIZE, fp); // writes an array of doubles
    fclose(fp);

    double b[SIZE];
    fp = fopen(&quot;test.bin&quot;,&quot;rb&quot;);
    size_t ret_code = fread(b, sizeof *b, SIZE, fp); // reads an array of doubles
    if(ret_code == SIZE) {
        puts(&quot;Array read successfully, contents: &quot;);
        for(int n = 0; n &lt; SIZE; ++n) printf(&quot;%f &quot;, b[n]);
        putchar('\n');
    } else { // error handling
       if (feof(fp))
          printf(&quot;Error reading test.bin: unexpected end of file\n&quot;);
       else if (ferror(fp)) {
           perror(&quot;Error reading test.bin&quot;);
       }
    }

    fclose(fp);
}
| output=
Array read successfully, contents: 
1.000000 2.000000 3.000000 4.000000 5.000000 
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.8.1 | title=The fread function | p=335}}
{{ref std c99}}
{{ref std | section=7.19.8.1 | title=The fread function | p=301}}
{{ref std c89}}
{{ref std | section=4.9.8.1  | title=The fread function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fscanf}}
{{dsc inc | c/io/dsc fgets}}
{{dsc inc | c/io/dsc fwrite}}
{{dsc see cpp | cpp/io/c/fread}}
{{dsc end}}

[[ar:c/io/fread]]
[[cs:c/io/fread]]
[[de:c/io/fread]]
[[es:c/io/fread]]
[[fr:c/io/fread]]
[[it:c/io/fread]]
[[ja:c/io/fread]]
[[ko:c/io/fread]]
[[pl:c/io/fread]]
[[pt:c/io/fread]]
[[ru:c/io/fread]]
[[tr:c/io/fread]]
[[zh:c/io/fread]]</text>
      <sha1>nz8n4khb9xfcj3lavw9dd8i4ygubqrz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/freopen</title>
    <ns>0</ns>
    <id>6198</id>
    <revision>
      <id>78926</id>
      <parentid>77693</parentid>
      <timestamp>2015-06-12T15:31:51Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3834">{{c/title | freopen|freopen_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin | num=1}}
{{dcl | until=c99 |
FILE *freopen( const char *filename, const char *mode,
               FILE *stream );
}}
{{dcl | since=c99 |
FILE *freopen( const char *restrict filename, const char *restrict mode, 
               FILE *restrict stream );
}}
{{dcl rev end}}
{{dcl |num=2| since=c11 |
errno_t freopen_s(FILE *restrict *restrict newstreamptr,
                  const char *restrict filename, const char *restrict mode,
                  FILE *restrict stream);
}}
{{dcl end}}

@1@ First, attempts to close the file associated with {{tt|stream}}, ignoring any errors. Then, if {{tt|filename}} is not null, attempts to open the file specified by {{tt|filename}} using {{tt|mode}} as if by {{lc|fopen}}, and associates that file with the file stream pointed to by {{tt|stream}}. If {{tt|filename}} is a null pointer, then the function attempts to reopen the file that is already associated with {{tt|stream}} (it is implementation defined which mode changes are allowed in this case).

@2@ Same as {{v|1}}, except that {{tt|mode}} is treated as in {{lc|fopen_s}} and that the pointer to the file stream is written to {{tt|newstreamptr}} and the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|newstreamptr}} is a null pointer
:* {{tt|stream}} is a null pointer
:* {{tt|mode}} is a null pointer
:As all bounds-checked functions, {{tt|freopen_s}} is only guaranteed to be available of {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.


===Parameters===
{{par begin}}
{{par | filename | file name to associate the file stream to}}
{{par | mode | null-terminated character string determining new file access mode

{{c/io/file access flags}}}}
{{par | stream | the file stream to modify}}
{{par | newstreamptr | pointer to a pointer where the function stores the result (an out-parameter)}}
{{par end}}

===Return value===
@1@ A copy of the value of {{tt|stream}} on success, null pointer on failure.
@2@ zero on success (and a copy of the value of {{tt|stream}} is written to {{tt|*newstreamptr}}, non-zero on error (and null pointer is written to {{tt|*newstreamptr}} unless {{tt|newstreamptr}} is itself a null pointer).

===Notes===
{{tt|freopen}} is the only way to change the narrow/wide orientation of a stream once it has been established by an I/O operation or by {{lc|fwide}}.

===Example===
{{example | The following code redirects {{tt|stdout}} to a file.
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    puts(&quot;stdout is printed to console&quot;);
    if (freopen(&quot;redir.txt&quot;, &quot;w&quot;, stdout) == NULL)
    {
       perror(&quot;freopen() failed&quot;);
       return EXIT_FAILURE;
    }
    puts(&quot;stdout is redirected to a file&quot;); // this is written to redir.txt
    fclose(stdout);
}
 | output=
stdout is printed to console
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.5.4  | title=The freopen function   | p=307}}
{{ref std | section=K.3.5.2.2 | title=The freopen_s function | p=590}}
{{ref std c99}}
{{ref std | section=7.19.5.4  | title=The freopen function   | p=272-273}}
{{ref std c89}}
{{ref std | section=4.9.5.4   | title=The freopen function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fopen}}
{{dsc inc | c/io/dsc fclose}}
{{dsc see cpp | cpp/io/c/freopen}}
{{dsc end}}

[[ar:c/io/freopen]]
[[cs:c/io/freopen]]
[[de:c/io/freopen]]
[[es:c/io/freopen]]
[[fr:c/io/freopen]]
[[it:c/io/freopen]]
[[ja:c/io/freopen]]
[[ko:c/io/freopen]]
[[pl:c/io/freopen]]
[[pt:c/io/freopen]]
[[ru:c/io/freopen]]
[[tr:c/io/freopen]]
[[zh:c/io/freopen]]</text>
      <sha1>ok40fxsjwnetcidf135v998l2rg0uvs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fscanf</title>
    <ns>0</ns>
    <id>6222</id>
    <revision>
      <id>88751</id>
      <parentid>78930</parentid>
      <timestamp>2016-12-08T19:07:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>pd return value to use matching failure vs input failure (from the update made to the template)</comment>
      <text xml:space="preserve" bytes="6744">{{c/title | scanf | fscanf | sscanf | scanf_s | fscanf_s | sscanf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin | num=1}}
{{dcl | until=c99 |
​int scanf( const char          *format, ... );​
}}
{{dcl | since=c99 |
​int scanf( const char *restrict format, ... );​
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c99 |
int fscanf( FILE          *stream, const char          *format, ... );
}}
{{dcl | since=c99 |
int fscanf( FILE *restrict stream, const char *restrict format, ... );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | until=c99 |
int sscanf( const char          *buffer, const char          *format, ... );
}}
{{dcl | since=c99 |
int sscanf( const char *restrict buffer, const char *restrict format, ... );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c11 |
int scanf_s(const char *restrict format, ...);
}}
{{dcl | num=5 | since=c11 | 
int fscanf_s(FILE *restrict stream, const char *restrict format, ...);
}}
{{dcl | num=6 | since=c11|
int sscanf_s(const char *restrict buffer, const char *restrict format, ...);
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into given locations.

@1@ reads the data from {{lc|stdin}}
@2@ reads the data from file stream {{tt|stream}}
@3@ reads the data from null-terminated character string {{tt|buffer}}. Reaching the end of the string is equivalent to reaching the end-of-file condition for {{tt|fscanf}}
@4-6@ Same as {{v|1-3}}, except that {{c|%c}}, {{c|%s}}, and {{c|%[}} conversion specifiers each expect two arguments (the usual pointer and a value of type {{lc|rsize_t}} indicating the size of the receiving array, which may be 1 when reading with a %c into a single char) and except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* any of the arguments of pointer type is a null pointer
:* {{tt|format}}, {{tt|stream}}, or {{tt|buffer}} is a null pointer
:* the number of characters that would be written by %c, %s, or %[, plus the terminating null character, would exceed the second (rsize_t) argument provided for each of those conversion specifiers
:* optionally, any other detectable error, such as unknown conversion specifier
:As all bounds-checked functions, {{tt|scanf_s}}, {{tt|fscanf_s}}, and {{tt|sscanf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated character string to read from}}
{{par | format | pointer to a null-terminated character string specifying how to read the input.
{{cpp/io/c/scanf format}}
}}
{{par | ... | receiving arguments}}
{{par end}}

===Return value===
@1-3@ Number of receiving arguments successfully assigned (which may be zero in case a matching failure occurred before the first receiving argument was assigned), or {{lc|EOF}} if input failure occurs before the first receiving argument was assigned.
@4-6@ Same as {{v|1-3}}, except that {{lc|EOF}} is also returned if there is a runtime constraint violation.

===Notes===
Because most conversion specifiers first consume all consecutive whitespace, code such as 
{{source|1=
scanf(&quot;%d&quot;, &amp;a);
scanf(&quot;%d&quot;, &amp;b);
}}
will read two integers that are entered on different lines (second %d will consume the newline left over by the first) or on the same line, separated by spaces or tabs (second %d will consume the spaces or tabs).

The conversion specifiers that do not consume leading whitespace, such as %c, can be made to do so by using a whitespace character in the format string: {{source|1=
scanf(&quot;%d&quot;, &amp;a);
scanf(&quot; %c&quot;, &amp;c); // ignore the endline after %d, then read a char
}}

===Example===
{{example
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;stdio.h&gt;
#include &lt;stddef.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    int i, j;
    float x, y;
    char str1[10], str2[4];
    wchar_t warr[2];
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);

    char input[] = &quot;25 54.32E-1 Thompson 56789 0123 56ß水&quot;;
    /* parse as follows:
       %d: an integer
       %f: a floating-point value
       %9s: a string of at most 9 non-whitespace characters
       %2d: two-digit integer (digits 5 and 6)
       %f:  a floating-point value (digits 7, 8, 9)
       %*d: an integer which isn't stored anywhere
       ' ': all consecutive whitespace
       %3[0-9]: a string of at most 3 decimal digits (digits 5 and 6)
       %2lc: two wide characters, using multibyte to wide conversion  */
    int ret = sscanf(input, &quot;%d%f%9s%2d%f%*d %3[0-9]%2lc&quot;,
                     &amp;i, &amp;x, str1, &amp;j, &amp;y, str2, warr);

    printf(&quot;Converted %d fields:\ni = %d\nx = %f\nstr1 = %s\n&quot;
           &quot;j = %d\ny = %f\nstr2 = %s\n&quot;
           &quot;warr[0] = U+%x warr[1] = U+%x\n&quot;,
           ret, i, x, str1, j, y, str2, warr[0], warr[1]);

#ifdef __STDC_LIB_EXT1__
    int n = sscanf_s(input, &quot;%d%f%s&quot;, &amp;i, &amp;x, str1, (rsize_t)sizeof str1);
    // writes 25 to i, 5.432 to x, the 9 bytes &quot;thompson\0&quot; to str1, and 3 to n.
#endif
}
 | output=
Converted 7 fields:
i = 25
x = 5.432000
str1 = Thompson
j = 56
y = 789.000000
str2 = 56
warr[0] = U+df warr[1] = U+6c34
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.6.2  | title=The fscanf function   | p=317-324}}
{{ref std | section=7.21.6.4  | title=The scanf function    | p=325}}
{{ref std | section=7.21.6.7  | title=The sscanf function   | p=326}}
{{ref std | section=K.3.5.3.2 | title=The fscanf_s function | p=592-593}}
{{ref std | section=K.3.5.3.4 | title=The scanf_s function  | p=594}}
{{ref std | section=K.3.5.3.7 | title=The sscanf_s function | p=596}}
{{ref std c99}}
{{ref std | section=7.19.6.2  | title=The fscanf function   | p=282-289}}
{{ref std | section=7.19.6.4  | title=The scanf function    | p=290}}
{{ref std | section=7.19.6.7  | title=The sscanf function   | p=291}}
{{ref std c89}}
{{ref std | section=4.9.6.2   | title=The fscanf function}}
{{ref std | section=4.9.6.4   | title=The scanf function}}
{{ref std | section=4.9.6.6   | title=The sscanf function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc vfscanf}}
{{dsc inc | c/io/dsc fgets}}
{{dsc inc | c/io/dsc fprintf}}
{{dsc see cpp | cpp/io/c/fscanf | scanf | fscanf | sscanf}}
{{dsc end}}

[[ar:c/io/fscanf]]
[[cs:c/io/fscanf]]
[[de:c/io/fscanf]]
[[es:c/io/fscanf]]
[[fr:c/io/fscanf]]
[[it:c/io/fscanf]]
[[ja:c/io/fscanf]]
[[ko:c/io/fscanf]]
[[pl:c/io/fscanf]]
[[pt:c/io/fscanf]]
[[ru:c/io/fscanf]]
[[tr:c/io/fscanf]]
[[zh:c/io/fscanf]]</text>
      <sha1>tqb3rjtipjtk0006a28l571ozhxec8m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fseek</title>
    <ns>0</ns>
    <id>6232</id>
    <revision>
      <id>86127</id>
      <parentid>78943</parentid>
      <timestamp>2016-06-22T21:52:46Z</timestamp>
      <contributor>
        <ip>64.211.224.253</ip>
      </contributor>
      <comment>Added missing close paren in text mode behavior description.</comment>
      <text xml:space="preserve" bytes="4314">{{c/title | fseek }}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int fseek( FILE *stream, long offset, int origin );
}}

Sets the file position indicator for the file stream {{tt|stream}} to the value pointed to by {{tt|offset}}.

If the {{tt|stream}} is open in binary mode, the new position is exactly {{tt|offset}} bytes measured from the beginning of the file if {{tt|origin}} is {{lc|SEEK_SET}}, from the current file position if {{tt|origin}} is {{lc|SEEK_CUR}}, and from the end of the file if {{tt|origin}} is {{lc|SEEK_END}}. Binary streams are not required to support {{lc|SEEK_END}}, in particular if additional null bytes are output.

If the {{tt|stream}} is open in text mode, the only supported values for {{tt|offset}} are zero (which works with any {{tt|origin}}) and a value returned by an earlier call to {{lc|ftell}} on a stream associated with the same file (which only works with {{tt|origin}} of {{lc|SEEK_SET}}).

If the {{tt|stream}} is wide-oriented, the restrictions of both text and binary streams apply (result of {{lc|ftell}} is allowed with SEEK_SET and zero offset is allowed from SEEK_SET and SEEK_CUR, but not SEEK_END).

In addition to changing the file position indicator, {{tt|fseek}} undoes the effects of {{lc|ungetc}} and clears the end-of-file status, if applicable.

If a read or write error occurs, the error indicator for the stream ({{lc|ferror}}) is set and the file position is unaffected.

===Parameters===
{{par begin}}
{{par | stream | file stream to modify}}
{{par | offset | number of characters to shift the position relative to origin}} 
{{par | origin | position to which {{tt|offset}} is added. It can have one of the following values: {{lc|SEEK_SET}}, {{lc|SEEK_CUR}}, {{lc|SEEK_END}}}} 
{{par end}}

===Return value===

{{c|0}} upon success, nonzero value otherwise.

===Notes===
After seeking to a non-end position in a wide stream, the next call to any output function may render the remainder of the file undefined, e.g. by outputting a multibyte sequence of a different length.

For text streams, the only valid values of {{tt|offset}} are {{c|0}} (applicable to any {{tt|origin}}) and a value returned by an earlier call to {{lc|ftell}} (only applicable to {{tt|SEEK_SET}}).

POSIX allows seeking beyond the existing end of file. If an output is performed after this seek, any read from the gap will return zero bytes. Where supported by the filesystem, this creates a ''sparse file''.

POSIX also requires that fseek first performs {{lc|fflush}} if there are any unwritten data (but whether the shift state is restored is implementation-defined).

===Example===
{{example | fseek with error checking
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
 
int main(void)
{
    /* Prepare an array of f-p values. */
    #define SIZE 5
    double A[SIZE] = {1.,2.,3.,4.,5.};
    /* Write array to a file. */
    FILE * fp = fopen(&quot;test.bin&quot;, &quot;wb&quot;);
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
 
    /* Read the f-p values into array B. */
    double B[SIZE];
    fp = fopen(&quot;test.bin&quot;,&quot;rb&quot;);
    
    /* Set the file position indicator in front of third f-p value. */
    if (fseek(fp,sizeof(double)*2L,SEEK_SET) != 0)
    {
       if (ferror(fp))
       {
          perror(&quot;fseek()&quot;);
          fprintf(stderr,&quot;fseek() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-5);
          exit(EXIT_FAILURE);
       }
    }

    int ret_code = fread(B,sizeof(double),1,fp);   /* read one f-p value  */
    printf(&quot;%.1f\n&quot;, B[0]);                        /* print one f-p value */
 
    fclose(fp);
    return EXIT_SUCCESS;
}
 | output=
3.0
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.9.2 | title=The fseek function | p=336-337}}
{{ref std c99}}
{{ref std | section=7.19.9.2 | title=The fseek function | p=302-303}}
{{ref std c89}}
{{ref std | section=4.9.9.2  | title=The fseek function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fsetpos}}
{{dsc inc | c/io/dsc fgetpos}}
{{dsc inc | c/io/dsc ftell}}
{{dsc inc | c/io/dsc rewind}}
{{dsc see cpp | cpp/io/c/fseek}}
{{dsc end}}

[[ar:c/io/fseek]]
[[cs:c/io/fseek]]
[[de:c/io/fseek]]
[[es:c/io/fseek]]
[[fr:c/io/fseek]]
[[it:c/io/fseek]]
[[ja:c/io/fseek]]
[[ko:c/io/fseek]]
[[pl:c/io/fseek]]
[[pt:c/io/fseek]]
[[ru:c/io/fseek]]
[[tr:c/io/fseek]]
[[zh:c/io/fseek]]</text>
      <sha1>lbs8yr1osul882ummyp158nbt0xmjzc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fsetpos</title>
    <ns>0</ns>
    <id>6233</id>
    <revision>
      <id>78944</id>
      <parentid>77722</parentid>
      <timestamp>2015-06-12T16:25:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3094">{{c/title | fsetpos}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int fsetpos( FILE *stream, const fpos_t *pos );
}}

Sets the file position indicator and the multibyte parsing state (if any) for the file stream {{tt|stream}} according to the value pointed to by {{tt|pos}}. 

Besides establishing new parse state and position, a call to this function undoes the effects of {{lc|ungetc}} and clears the end-of-file state, if it is set.

If a read or write error occurs, the error indicator ({{lc|ferror}}) for the stream is set.

===Parameters===
{{par begin}}
{{par | stream | file stream to modify}}
{{par | pos | pointer to a {{lc|fpos_t}} object to use as new value of file position indicator}}
{{par end}}

===Return value===

{{c|0}} upon success, nonzero value otherwise.

===Notes===
After seeking to a non-end position in a wide stream, the next call to any output function may render the remainder of the file undefined, e.g. by outputting a multibyte sequence of a different length.

===Example===
{{example | fsetpos with error checking
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
 
int main(void)
{
    /* Prepare an array of f-p values. */
    #define SIZE 5
    double A[SIZE] = {1.,2.,3.,4.,5.};
    /* Write array to a file. */
    FILE * fp = fopen(&quot;test.bin&quot;, &quot;wb&quot;);
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
 
    /* Read the f-p values into array B. */
    double B[SIZE];
    fp = fopen(&quot;test.bin&quot;,&quot;rb&quot;);
    fpos_t pos;
    if (fgetpos(fp,&amp;pos) != 0)      /* current position: start of file */
    {
       perror(&quot;fgetpos()&quot;);
       fprintf(stderr,&quot;fgetpos() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-3);
       exit(EXIT_FAILURE);
    }

    int ret_code = fread(B,sizeof(double),1,fp);   /* read one f-p value */
    /* current position: after reading one f-p value */
    printf(&quot;%.1f\n&quot;, B[0]);   /* print one f-p value */
    
    if (fsetpos(fp,&amp;pos) != 0)   /* reset current position to start of file */
    {
       if (ferror(fp))
       {
          perror(&quot;fsetpos()&quot;);
          fprintf(stderr,&quot;fsetpos() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-5);
          exit(EXIT_FAILURE);
       }
    }

    ret_code = fread(B,sizeof(double),1,fp);   /* reread first f-p value */
    printf(&quot;%.1f\n&quot;, B[0]);                    /* print one f-p value    */
    fclose(fp);
 
    return EXIT_SUCCESS; 
}
 | output=
1.0
1.0
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.9.3 | title=The fsetpos function | p=337}}
{{ref std c99}}
{{ref std | section=7.19.9.3 | title=The fsetpos function | p=303}}
{{ref std c89}}
{{ref std | section=4.9.9.3  | title=The fsetpos function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fgetpos}}
{{dsc inc | c/io/dsc ftell}}
{{dsc inc | c/io/dsc fseek}}
{{dsc see cpp | cpp/io/c/fsetpos}}
{{dsc end}}

[[ar:c/io/fsetpos]]
[[cs:c/io/fsetpos]]
[[de:c/io/fsetpos]]
[[es:c/io/fsetpos]]
[[fr:c/io/fsetpos]]
[[it:c/io/fsetpos]]
[[ja:c/io/fsetpos]]
[[ko:c/io/fsetpos]]
[[pl:c/io/fsetpos]]
[[pt:c/io/fsetpos]]
[[ru:c/io/fsetpos]]
[[tr:c/io/fsetpos]]
[[zh:c/io/fsetpos]]</text>
      <sha1>cggtk5ldcfw9ijecyhjj2tjzsz7hzmh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/ftell</title>
    <ns>0</ns>
    <id>6230</id>
    <revision>
      <id>78945</id>
      <parentid>77723</parentid>
      <timestamp>2015-06-12T16:27:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2559">{{c/title | ftell}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
long ftell( FILE *stream );
}}

Returns the file position indicator for the file stream {{tt|stream}}. 

If the stream is open in binary mode, the value obtained by this function is the number of bytes from the beginning of the file.

If the stream is open in text mode, the value returned by this function is unspecified and is only meaningful as the input to {{lc|fseek()}}.

===Parameters===
{{par begin}}
{{par | stream | file stream to examine}}
{{par end}}

===Return value===
File position indicator on success or {{lc|EOF}} if failure occurs.

On error, the {{c|errno}} variable is set to implementation-defined positive value.

===Example===
{{example | ftell with error checking
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
 
int main(void)
{
    /* Prepare an array of f-p values. */
    #define SIZE 5
    double A[SIZE] = {1.,2.,3.,4.,5.};
    /* Write array to a file. */
    FILE * fp = fopen(&quot;test.bin&quot;, &quot;wb&quot;);
    fwrite(A,sizeof(double),SIZE,fp);
    fclose (fp);
 
    /* Read the f-p values into array B. */
    double B[SIZE];
    fp = fopen(&quot;test.bin&quot;,&quot;rb&quot;);
    long int pos = ftell(fp);   /* position indicator at start of file */
    if (pos == -1L)
    {
       perror(&quot;ftell()&quot;);
       fprintf(stderr,&quot;ftell() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-4);
       exit(EXIT_FAILURE);
    }
    printf(&quot;%ld\n&quot;, pos);

    int ret_code = fread(B,sizeof(double),1,fp);   /* read one f-p value */
    pos = ftell(fp);   /* position indicator after reading one f-p value */
    if (pos == -1L)
    {
       perror(&quot;ftell()&quot;);
       fprintf(stderr,&quot;ftell() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-4);
       exit(EXIT_FAILURE);
    }
    printf(&quot;%ld\n&quot;, pos);
    printf(&quot;%.1f\n&quot;, B[0]);   /* print one f-p value */
 
    return EXIT_SUCCESS; 
}
 | output=
0
8
1.0
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.9.4 | title=The ftell function | p=337-338}}
{{ref std c99}}
{{ref std | section=7.19.9.4 | title=The ftell function | p=303-304}}
{{ref std c89}}
{{ref std | section=4.9.9.4  | title=The ftell function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fgetpos}}
{{dsc inc | c/io/dsc fseek}}
{{dsc inc | c/io/dsc fsetpos}}
{{dsc see cpp | cpp/io/c/ftell}}
{{dsc end}}

[[ar:c/io/ftell]]
[[cs:c/io/ftell]]
[[de:c/io/ftell]]
[[es:c/io/ftell]]
[[fr:c/io/ftell]]
[[it:c/io/ftell]]
[[ja:c/io/ftell]]
[[ko:c/io/ftell]]
[[pl:c/io/ftell]]
[[pt:c/io/ftell]]
[[ru:c/io/ftell]]
[[tr:c/io/ftell]]
[[zh:c/io/ftell]]</text>
      <sha1>sdofv3w2wsbwdjhqebt0v6kkoy57naj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fwide</title>
    <ns>0</ns>
    <id>6201</id>
    <revision>
      <id>89058</id>
      <parentid>89057</parentid>
      <timestamp>2016-12-26T13:43:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>let's actually demonstrate the effects of fwide - added I/O to the example. Also avoid printing unspecified numbers</comment>
      <text xml:space="preserve" bytes="2881">{{c/title | fwide}}
{{c/io/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
int fwide( FILE *stream, int mode );
}}

If {{tt|mode &gt; 0}}, attempts to make {{tt|stream}} wide-oriented. If {{tt|mode &lt; 0}}, attempts to make {{tt|stream}} byte-oriented. If {{c|1=mode==0}}, only queries the current orientation of the stream.

If the orientation of the stream has already been decided (by executing output or by an earlier call to fwide), this function does nothing.

===Parameters===
{{par begin}}
{{par | stream | pointer to the C I/O stream to modify or query}}
{{par | mode | integer value greater than zero to set the stream wide, less than zero to set the stream narrow, or zero to query only }}
{{par end}}

===Return value===

An integer greater than zero if the stream is wide-oriented after this call, less than zero if the stream is byte-oriented after this call, and zero if the stream has no orientation.

===Example===
{{example | The following code sets and resets the stream orientation.
 | code=
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
void try_read(FILE* fp)
{
    int c = fgetc(fp);
    if(c == EOF) puts(&quot;narrow character read failed&quot;);
    else printf(&quot;narrow character read '%c'\n&quot;, c);

    wint_t wc = fgetwc(fp);
    if(wc == WEOF) puts(&quot;wide character read failed&quot;);
    else printf(&quot;wide character read '%lc'\n&quot;, wc);
}
void show(int n)
{
    if(n == 0) puts(&quot;no orientation&quot;);
    else if (n &lt; 0) puts(&quot;narrow orientation&quot;);
    else puts(&quot;wide orientation&quot;);
}
int main(void)
{
    FILE* fp = fopen(&quot;main.cpp&quot;,&quot;r&quot;);
    if (!fp) {
        perror(&quot;fopen() failed&quot;);
        return EXIT_FAILURE;
    }
 
    // A newly opened stream has no orientation.
    show(fwide(fp, 0));
 
    // Establish byte orientation.
    show(fwide(fp, -1));
    try_read(fp);
 
    // Only freopen() can reset stream orientation.
    if (freopen(&quot;main.cpp&quot;,&quot;r&quot;,fp) == NULL)
    {
       perror(&quot;freopen() failed&quot;);
       return EXIT_FAILURE;
    }
 
    // A reopened stream has no orientation.
    show(fwide(fp, 0));
 
    // Establish wide orientation.
    show(fwide(fp, 1));
    try_read(fp);
 
    fclose(fp);
}
|p=true
 | output=
no orientation
narrow orientation
narrow character read '#'
wide character read failed
no orientation
wide orientation
narrow character read failed
wide character read '#'
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.3.5 | title=The fwide function | p=423}}
{{ref std c99}}
{{ref std | section=7.24.3.5 | title=The fwide function | p=369}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fopen}}
{{dsc see cpp | cpp/io/c/fwide}}
{{dsc end}}

[[ar:c/io/fwide]]
[[cs:c/io/fwide]]
[[de:c/io/fwide]]
[[es:c/io/fwide]]
[[fr:c/io/fwide]]
[[it:c/io/fwide]]
[[ja:c/io/fwide]]
[[ko:c/io/fwide]]
[[pl:c/io/fwide]]
[[pt:c/io/fwide]]
[[ru:c/io/fwide]]
[[tr:c/io/fwide]]
[[zh:c/io/fwide]]</text>
      <sha1>16q356im4ddibhf4im3gtvb7x6ma4k5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fwprintf</title>
    <ns>0</ns>
    <id>6228</id>
    <revision>
      <id>89622</id>
      <parentid>89621</parentid>
      <timestamp>2017-01-22T19:55:38Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6805">{{c/title | wprintf | fwprintf | swprintf | wprintf_s | fwprintf_s | swprintf_s | snwprintf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin | num=1}}
{{dcl | since=c95 | until=c99 |
int wprintf( const wchar_t *format, ... );
}}
{{dcl | since=c99 |
int wprintf( const wchar_t *restrict format, ... );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | since=c95 | until=c99 |
int fwprintf( FILE *stream, const wchar_t* format, ... );
}}
{{dcl | since=c99 |
int fwprintf( FILE *restrict stream,
              const wchar_t *restrict format, ... );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | since=c95 | until=c99 |
int swprintf( wchar_t *buffer, size_t bufsz,
              const wchar_t* format, ... );
}}
{{dcl | since=c99 |
int swprintf( wchar_t *restrict buffer, size_t bufsz,
              const wchar_t *restrict format, ... );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c11| 
int wprintf_s( const wchar_t *restrict format, ...);
}}
{{dcl | num=5 | since=c11| 
int fwprintf_s( FILE *restrict stream,
                const wchar_t *restrict format, ...);
}}
{{dcl | num=6 | since=c11|
int swprintf_s( wchar_t *restrict buffer, rsize_t bufsz,
                const wchar_t* restrict format, ...);
}}
{{dcl | num=7 | since=c11|
int snwprintf_s( wchar_t * restrict s, rsize_t n,
                 const wchar_t * restrict format, ...);
}}
{{dcl end}}

Loads the data from the given locations, converts them to wide string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to {{lc|stdout}}.
@2@ Writes the results to a file stream {{tt|stream}}.
@3@ If {{tt|bufsz}} is greater than zero, writes the results to a wide string {{tt|buffer}}. At most {{c|bufsz-1}} wide characters are written followed by null wide character. If {{tt|bufsz}} is zero, nothing is written (and {{tt|buffer}} may be a null pointer), however the return value (number of wide characters that would be written) is still calculated and returned.
@4-6@ Same as {{v|1-3}}, except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* the conversion specifier {{tt|%n}} is present in {{tt|format}}
:* any of the arguments corresponding to {{tt|%s}} is a null pointer
:* {{tt|format}} or {{tt|buffer}} is a null pointer
:* {{tt|bufsz}} is zero or greater than {{tt|RSIZE_MAX/sizeof(wchar_t)}}
:* encoding errors occur in any of string and character conversion specifiers
:* (only for {{tt|swprintf_s}}) the number of wide characters to be written, including the null, would exceed {{tt|bufsz}}.
@7@ Same as {{v|6}}, except it will truncate the result to fit within the array pointed to by s.
:As all bounds-checked functions, {{tt|wprintf_s}}, {{tt|wfprintf_s}}, and {{tt|wsprintf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | output file stream to write to}}
{{par | buffer | pointer to a wide character string to write to}}
{{par | bufsz | up to {{tt|bufsz-1}} wide characters may be written, plus the null terminator}}
{{par | format | pointer to a null-terminated wide string specifying how to interpret the data.
{{cpp/io/c/printf format|wcs=true}}
}}
{{par | ... | arguments specifying data to print }}
{{par end}}

===Return value===
@1,2@ Number of wide characters written if successful or negative value if an error occurred.
@3@ Number of wide characters written (not counting the terminating null wide character) if successful or negative value if an encoding error occurred or if the number of characters to be generated was equal or greater than {{tt|size}} (including when {{tt|size}} is zero).
@4,5@ Number of wide characters written if successful or negative value if an error occurred.
@6@ Number of wide characters (not counting the terminating null) that were written to {{tt|buffer}}. Returns a negative value on encoding errors and on overflow. Returns zero on all other errors.
@7@ Number of wide characters (not counting the terminating null) that would have been written to {{tt|buffer}} had {{tt|bufsz}} been sufficiently large, or a negative value if an error occurs. (meaning, write was successful and complete only if the return is nonnegative and less than {{tt|bufsz}})

===Notes===
While narrow strings provide {{lc|snprintf}}, which makes it possible to determine the required output buffer size, there is no equivalent for wide strings (until C11's snwprintf_s), and in order to determine the buffer size, the program may need to call {{lc|swprintf}}, check the result value, and reallocate a larger buffer, trying again until successful.

{{tt|snwprintf_s}}, unlike {{tt|swprintf_s}}, will truncate the result to fit within the array pointed to by {{tt|buffer}}, even though truncation is treated as an error by most bounds-checked functions.

===Example===
{{example
 | code=
#include &lt;locale.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    char narrow_str[] = &quot;z\u00df\u6c34\U0001f34c&quot;;
                    // or &quot;zß水🍌&quot;
                    // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c&quot;;
    wchar_t warr[29]; // the expected string is 28 characters plus 1 null terminator
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    swprintf(warr, sizeof warr/sizeof *warr,
              L&quot;Converted from UTF-8: '%s'&quot;, narrow_str);
    wprintf(L&quot;%ls\n&quot;, warr);
}
 | output=
Converted from UTF-8: 'zß水🍌'
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.2.1   | title=The fwprintf function   | p=403-410}}
{{ref std | section=7.29.2.3   | title=The swprintf function   | p=416}}
{{ref std | section=7.29.2.11  | title=The wprintf function    | p=421}}
{{ref std | section=K.3.9.1.1  | title=The fwprintf_s function | p=628}}
{{ref std | section=K.3.9.1.4  | title=The swprintf_s function | p=630-631}}
{{ref std | section=K.3.9.1.13 | title=The wprintf_s function  | p=637-638}}
{{ref std c99}}
{{ref std | section=7.24.2.1   | title=The fwprintf function   | p=349-356}}
{{ref std | section=7.24.2.3   | title=The swprintf function   | p=362}}
{{ref std | section=7.24.2.11  | title=The wprintf function    | p=366}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fprintf}}
{{dsc inc | c/io/dsc vfwprintf}}
{{dsc inc | c/io/dsc fputws}}
{{dsc see cpp | cpp/io/c/fwprintf | wprintf | fwprintf | swprintf}}
{{dsc end}}

[[ar:c/io/fwprintf]]
[[cs:c/io/fwprintf]]
[[de:c/io/fwprintf]]
[[es:c/io/fwprintf]]
[[fr:c/io/fwprintf]]
[[it:c/io/fwprintf]]
[[ja:c/io/fwprintf]]
[[ko:c/io/fwprintf]]
[[pl:c/io/fwprintf]]
[[pt:c/io/fwprintf]]
[[ru:c/io/fwprintf]]
[[tr:c/io/fwprintf]]
[[zh:c/io/fwprintf]]</text>
      <sha1>5i39auvkdk4xf1ms7yhllhv2scxjauo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fwrite</title>
    <ns>0</ns>
    <id>6205</id>
    <revision>
      <id>85141</id>
      <parentid>85140</parentid>
      <timestamp>2016-04-04T19:41:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>this could use an actual description -- fread has one... Also use array of double for less trivial sizeofs</comment>
      <text xml:space="preserve" bytes="2632">{{c/title | fwrite}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
size_t fwrite( const void *buffer, size_t size, size_t count,
               FILE *stream );
}}
{{dcl | since=c99 |
size_t fwrite( const void *restrict buffer, size_t size, size_t count, 
               FILE *restrict stream );
}}
{{dcl rev end}}
{{dcl end}}

Writes {{tt|count}} of objects from the given array {{tt|buffer}} to the output stream {{tt|stream}}. The objects are written as if by reinterepreting each object as an array of {{c|unsigned char}} and calling {{lc|fputc}} {{tt|size}} times for each object to write those {{c|unsigned char}}s into {{tt|stream}}, in order. The file position indicator for the stream is advanced by the number of characters written.

===Parameters===
{{par begin}}
{{par | buffer | pointer to the first object in the array to be written}}
{{par | size | size of each object}}
{{par | count | the number of the objects to be written}}
{{par | stream | pointer to the output stream}}
{{par end}}

===Return value===
The number of objects written successfully, which may be less than {{tt|count}} if an error occurs.

If {{tt|size}} or {{tt|count}} is zero, {{tt|fwrite}} returns zero and performs no other action.

===Example===
{{example| code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;assert.h&gt;
enum { SIZE = 5 };
int main(void)
{
    double a[SIZE] = {1, 2, 3, 4, 5};
    FILE *f1 = fopen(&quot;file.bin&quot;, &quot;wb&quot;);
    assert(f1);
    int r1 = fwrite(a, sizeof a[0], SIZE, f1);
    printf(&quot;wrote %d elements out of %d requested\n&quot;, r1,  SIZE);
    fclose(f1);

    double b[SIZE];
    FILE *f2 = fopen(&quot;file.bin&quot;, &quot;rb&quot;);
    int r2 = fread(b, sizeof b[0], SIZE, f2);
    fclose(f2);
    printf(&quot;read back: &quot;);
    for(int i = 0; i &lt; r2; i++)
        printf(&quot;%f &quot;, b[i]);
}
| output=
wrote 5 elements out of 5 requested
read back: 1.000000 2.000000 3.000000 4.000000 5.000000 
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.8.2 | title=The fwrite function | p=335-336}}
{{ref std c99}}
{{ref std | section=7.19.8.2 | title=The fwrite function | p=301-302}}
{{ref std c89}}
{{ref std | section=4.9.8.2  | title=The fwrite function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fprintf}}
{{dsc inc | c/io/dsc fputs}}
{{dsc inc | c/io/dsc fread}}
{{dsc see cpp | cpp/io/c/fwrite}}
{{dsc end}}

[[ar:c/io/fwrite]]
[[cs:c/io/fwrite]]
[[de:c/io/fwrite]]
[[es:c/io/fwrite]]
[[fr:c/io/fwrite]]
[[it:c/io/fwrite]]
[[ja:c/io/fwrite]]
[[ko:c/io/fwrite]]
[[pl:c/io/fwrite]]
[[pt:c/io/fwrite]]
[[ru:c/io/fwrite]]
[[tr:c/io/fwrite]]
[[zh:c/io/fwrite]]</text>
      <sha1>kdcyk4d835hbuko90tm39i5j762r3x8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/fwscanf</title>
    <ns>0</ns>
    <id>6226</id>
    <revision>
      <id>89611</id>
      <parentid>89609</parentid>
      <timestamp>2017-01-22T16:52:29Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>since C95 until C99, wchar.h</comment>
      <text xml:space="preserve" bytes="4501">{{c/title | wscanf | fwscanf | swscanf | wscanf_s | fwscanf_s | swscanf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin | num=1}}
{{dcl | since=c95 | until=c99 |
int wscanf( const wchar_t *format, ... );
}}
{{dcl | since=c99 |
int wscanf( const wchar_t *restrict format, ... );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | since=c95 | until=c99 |
int fwscanf( FILE *stream, const wchar_t *format, ... );
}}
{{dcl | since=c99 |
int fwscanf( FILE *restrict stream,
             const wchar_t *restrict format, ... );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | since=c95 | until=c99 |
int swscanf( const wchar_t *buffer, const wchar_t *format, ... );
}}
{{dcl | since=c99 |
int swscanf( const wchar_t *restrict buffer,
             const wchar_t *restrict format, ... );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c11 |
int wscanf_s( const wchar_t *restrict format, ...);
}}
{{dcl | num=5 | since=c11 |
int fwscanf_s( FILE *restrict stream,
               const wchar_t *restrict format, ...);
}}
{{dcl | num=6 | since=c11 |
int swscanf_s( const wchar_t *restrict s,
               const wchar_t *restrict format, ...);
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into given locations.

@1@ Reads the data from {{lc|stdin}}.
@2@ Reads the data from file stream {{tt|stream}}.
@3@ Reads the data from null-terminated wide string {{tt|buffer}}. Reaching the end of the string is equivalent to reaching the end-of-file condition for {{tt|fwscanf}}
@4-6@ Same as {{v|1-3}}, except that {{c|%c}}, {{c|%s}}, and {{c|%[}} conversion specifiers each expect two arguments (the usual pointer and a value of type {{lc|rsize_t}} indicating the size of the receiving array, which may be 1 when reading with a %lc into a single wide character) and except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* any of the arguments of pointer type is a null pointer
:* {{tt|format}}, {{tt|stream}}, or {{tt|buffer}} is a null pointer
:* the number of characters that would be written by %c, %s, or %[, plus the terminating null character, would exceed the second (rsize_t) argument provided for each of those conversion specifiers
:* optionally, any other detectable error, such as unknown conversion specifier
:As all bounds-checked functions, {{tt|wscanf_s}}, {{tt|fwscanf_s}}, and {{tt|swscanf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;wchar.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated wide string to read from}}
{{par | format | pointer to a null-terminated wide string specifying how to read the input. {{cpp/io/c/scanf format|wcs=true}}
}}
{{par | ... | receiving arguments}}
{{par end}}

===Return value===
@1-3@ Number of receiving arguments successfully assigned, or {{lc|EOF}} if read failure occurs before the first receiving argument was assigned.
@4-6@ Same as {{v|1-3}}, except that {{lc|EOF}} is also returned if there is a runtime constraint violation.

===Example===
{{example
 | code=
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.2.2   | title=The fwscanf function   | p=410-416}}
{{ref std | section=7.29.2.4   | title=The swscanf function   | p=417}}
{{ref std | section=7.29.2.12  | title=The wscanf function    | p=421}}
{{ref std | section=K.3.9.1.2  | title=The fwscanf_s function | p=628-629}}
{{ref std | section=K.3.9.1.5  | title=The swscanf_s function | p=631}}
{{ref std | section=K.3.9.1.14 | title=The wscanf_s function  | p=638}}
{{ref std c99}}
{{ref std | section=7.24.2.2   | title=The fwscanf function   | p=356-362}}
{{ref std | section=7.24.2.4   | title=The swscanf function   | p=362}}
{{ref std | section=7.24.2.12  | title=The wscanf function    | p=366-367}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc vfwscanf}}
{{dsc see cpp | cpp/io/c/fwscanf | wscanf | fwscanf | swscanf}}
{{dsc end}}

[[ar:c/io/fwscanf]]
[[cs:c/io/fwscanf]]
[[de:c/io/fwscanf]]
[[es:c/io/fwscanf]]
[[fr:c/io/fwscanf]]
[[it:c/io/fwscanf]]
[[ja:c/io/fwscanf]]
[[ko:c/io/fwscanf]]
[[pl:c/io/fwscanf]]
[[pt:c/io/fwscanf]]
[[ru:c/io/fwscanf]]
[[tr:c/io/fwscanf]]
[[zh:c/io/fwscanf]]</text>
      <sha1>feeh36f7ifu3l7saz9oai8xwbcrt5uz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/getc</title>
    <ns>0</ns>
    <id>6481</id>
    <redirect title="c/io/fgetc" />
    <revision>
      <id>25651</id>
      <timestamp>2012-04-23T20:53:37Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fgetc]]</comment>
      <text xml:space="preserve" bytes="24">#redirect [[c/io/fgetc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/getchar</title>
    <ns>0</ns>
    <id>6210</id>
    <revision>
      <id>89376</id>
      <parentid>78935</parentid>
      <timestamp>2017-01-20T21:28:17Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1890">{{c/title| getchar}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int getchar(void);
}}
Reads the next character from {{lc|stdin}}.

Equivalent to {{c|getc(stdin)}}.

===Parameters===
(none)

===Return value===
The obtained character on success or {{lc|EOF}} on failure. 

If the failure has been caused by end-of-file condition, additionally sets the ''eof'' indicator (see {{lc|feof()}}) on {{lc|stdin}}. If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|ferror()}}) on {{lc|stdin}}.

===Example===
{{example | getchar with error checking
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
 
int main(void)
{ 
    int ch;
    while ((ch=getchar()) != EOF)   /* read/print &quot;abcde&quot; from stdin */
          printf(&quot;%c&quot;, ch);
 
    /* Test reason for reaching EOF. */
    if (feof(stdin))          /* if failure caused by end-of-file condition */
       puts(&quot;End of file reached&quot;);
    else if (ferror(stdin))   /* if failure caused by some other error      */
         {
            perror(&quot;getchar()&quot;);
            fprintf(stderr,&quot;getchar() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-9);
            exit(EXIT_FAILURE);
         }
 
    return EXIT_SUCCESS;
}
 | output=
abcde
End of file reached
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.6 | title=The getchar function | p=332}}
{{ref std c99}}
{{ref std | section=7.19.7.6 | title=The getchar function | p=298}}
{{ref std c89}}
{{ref std | section=4.9.7.6  | title=The getchar function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fgetc}}
{{dsc see cpp | cpp/io/c/getchar}}
{{dsc end}}

[[ar:c/io/getchar]]
[[cs:c/io/getchar]]
[[de:c/io/getchar]]
[[es:c/io/getchar]]
[[fr:c/io/getchar]]
[[it:c/io/getchar]]
[[ja:c/io/getchar]]
[[ko:c/io/getchar]]
[[pl:c/io/getchar]]
[[pt:c/io/getchar]]
[[ru:c/io/getchar]]
[[tr:c/io/getchar]]
[[zh:c/io/getchar]]</text>
      <sha1>18escwkkwk2sbse48bn8necp06psztd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/gets</title>
    <ns>0</ns>
    <id>6211</id>
    <revision>
      <id>85664</id>
      <parentid>83425</parentid>
      <timestamp>2016-05-01T14:25:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>seealso getline</comment>
      <text xml:space="preserve" bytes="3341">{{c/title | gets | gets_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h }}
{{dcl rev begin}}
{{dcl | until=c11 |
char *gets( char *str );
}}
{{dcl | since=c11 | notes={{mark optional}} |
char *gets_s( char *str, rsize_t n );
}}
{{dcl rev end}}
{{dcl end}}

@1@ Reads {{lc|stdin}} into the character array pointed to by {{tt|str}} until a newline character is found or end-of-file occurs. A null character is written immediately after the last character read into the array. The newline character is discarded but not stored in the buffer.

@2@ Reads characters from {{lc|stdin}} until a newline is found or end-of-file occurs. Writes only at most {{c|n-1}} characters into the array pointed to by {{tt|str}}, and always writes the terminating null character (unless str is a null pointer). The newline character, if found, is discarded and does not count toward the number of characters written to the buffer.
:The following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|n}} is zero
:* {{tt|n}} is greater than {{c|RSIZE_MAX}}
:* {{tt|str}} is a null pointer
:* endline or eof not encountered after storing {{c|n-1}} characters to the buffer.
:In any case, {{tt|gets_s}} first finishes reading and discarding the characters from {{lc|stdin}} until new-line character, end-of-file condition, or read error before calling the constraint handler.
:As all bounds-checked functions, {{tt|gets_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

===Parameters===
{{par begin}}
{{par | str | character string to be written}}
{{par end}}

===Return value===
{{tt|str}} on success, {{lc|NULL}} on failure.

If the failure has been caused by end of file condition, additionally sets the ''eof'' indicator (see {{lc|feof()}}) on {{lc|stdin}}. If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|ferror()}}) on {{lc|stdin}}.

===Notes===
The {{tt|gets()}} function does not perform bounds checking, therefore this function is extremely vulnerable to buffer-overflow attacks. It cannot be used safely (unless the program runs in an environment which restricts what can appear on {{tt|stdin}}). For this reason, the function has been deprecated in the third corrigendum to the C99 standard and removed altogether in the C11 standard. {{lc|fgets()}} and {{tt|gets_s()}} are the recommended replacements.

'''Never use {{tt|gets()}}.'''

===References===
{{ref std c11}}
{{ref std | section=K.3.5.4.1 | title=The gets_s function | p=602-603}}
{{ref std c99}}
{{ref std | section=7.19.7.7  | title=The gets function   | p=298}}
{{ref std c89}}
{{ref std | section=4.9.7.7   | title=The gets function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fscanf}}
{{dsc inc | c/io/dsc fgets}}
{{dsc inc | c/io/dsc fputs}}
{{dsc inc | c/experimental/dynamic/dsc getline}}
{{dsc see cpp | cpp/io/c/gets}}
{{dsc end}}

[[ar:c/io/gets]]
[[cs:c/io/gets]]
[[de:c/io/gets]]
[[es:c/io/gets]]
[[fr:c/io/gets]]
[[it:c/io/gets]]
[[ja:c/io/gets]]
[[ko:c/io/gets]]
[[pl:c/io/gets]]
[[pt:c/io/gets]]
[[ru:c/io/gets]]
[[tr:c/io/gets]]
[[zh:c/io/gets]]</text>
      <sha1>52amujdk2c0j9i7ct0znkw4hw13d75e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/getwc</title>
    <ns>0</ns>
    <id>6482</id>
    <redirect title="c/io/fgetwc" />
    <revision>
      <id>25652</id>
      <timestamp>2012-04-23T20:53:49Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fgetwc]]</comment>
      <text xml:space="preserve" bytes="25">#redirect [[c/io/fgetwc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/getwchar</title>
    <ns>0</ns>
    <id>6219</id>
    <revision>
      <id>89375</id>
      <parentid>77740</parentid>
      <timestamp>2017-01-20T21:28:10Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="924">{{c/title| getwchar}}
{{c/io/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
wint_t getwchar(void);
}}
Reads the next wide character from {{lc|stdin}}.

===Parameters===
(none)

===Return value===

the obtained wide character or {{c|WEOF}} if an error has occurred or the end of file reached

===References===
{{ref std c11}}
{{ref std | section=7.29.3.7 | title=The getwchar function | p=424}}
{{ref std c99}}
{{ref std | section=7.24.3.7 | title=The getwchar function | p=369-370}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc getchar}}
{{dsc inc | c/io/dsc fgetwc}}
{{dsc see cpp | cpp/io/c/getwchar}}
{{dsc end}}

[[ar:c/io/getwchar]]
[[cs:c/io/getwchar]]
[[de:c/io/getwchar]]
[[es:c/io/getwchar]]
[[fr:c/io/getwchar]]
[[it:c/io/getwchar]]
[[ja:c/io/getwchar]]
[[ko:c/io/getwchar]]
[[pl:c/io/getwchar]]
[[pt:c/io/getwchar]]
[[ru:c/io/getwchar]]
[[tr:c/io/getwchar]]
[[zh:c/io/getwchar]]</text>
      <sha1>lzujhob1ijzkneygtovljmoexpkqxr9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/perror</title>
    <ns>0</ns>
    <id>6238</id>
    <revision>
      <id>78950</id>
      <parentid>77728</parentid>
      <timestamp>2015-06-12T16:35:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1521">{{c/title | perror}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
void perror( const char *s );
}}

Prints to {{lc|stderr}} the contents of the null-terminated character string pointed to by {{tt|s}} (unless {{tt|s}} is a null pointer), followed by the two characters {{c|&quot;: &quot;}}, followed by the implementation-defined error message describing the error code currently stored in the system variable {{lc|errno}} (identical to the output of {{c|strerror(errno)}}), followed by {{c|'\n'}}.

===Parameters===
{{par begin}}
{{par | s | pointer to a null-terminated string with explanatory message}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;

int main(void)
{
    FILE* f = fopen(&quot;non_existent&quot;, &quot;r&quot;);
    if (f == NULL) {
        perror(&quot;open()&quot;);
    } else {
        fclose(f);
    }
}
 | output=
open(): No such file or directory
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.10.4 | title=The perror function | p=339}}
{{ref std c99}}
{{ref std | section=7.19.10.4 | title=The perror function | p=305}}
{{ref std c89}}
{{ref std | section=4.9.10.4  | title=The perror function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strerror}}
{{dsc see cpp | cpp/io/c/perror}}
{{dsc end}}

[[ar:c/io/perror]]
[[cs:c/io/perror]]
[[de:c/io/perror]]
[[es:c/io/perror]]
[[fr:c/io/perror]]
[[it:c/io/perror]]
[[ja:c/io/perror]]
[[ko:c/io/perror]]
[[pl:c/io/perror]]
[[pt:c/io/perror]]
[[ru:c/io/perror]]
[[tr:c/io/perror]]
[[zh:c/io/perror]]</text>
      <sha1>8u7zihronqsd483dytf1mpdt5ifu0m1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/printf</title>
    <ns>0</ns>
    <id>6493</id>
    <redirect title="c/io/fprintf" />
    <revision>
      <id>25664</id>
      <timestamp>2012-04-23T20:55:34Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fprintf]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[c/io/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/putc</title>
    <ns>0</ns>
    <id>6483</id>
    <redirect title="c/io/fputc" />
    <revision>
      <id>25653</id>
      <timestamp>2012-04-23T20:54:00Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fputc]]</comment>
      <text xml:space="preserve" bytes="24">#redirect [[c/io/fputc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/putchar</title>
    <ns>0</ns>
    <id>6212</id>
    <revision>
      <id>78937</id>
      <parentid>77715</parentid>
      <timestamp>2015-06-12T16:14:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1886">{{c/title| putchar}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int putchar( int ch );
}}

Writes a character {{tt|ch}} to {{tt|stdout}}. Internally, the character is converted to {{c|unsigned char}} just before being written.

Equivalent to {{c|putc(ch, stdout)}}.

===Parameters===
{{par begin}}
{{par | ch | character to be written}}
{{par end}}

===Return value===
On success, returns the written character.

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|ferror()}}) on {{lc|stdout}}.

===Example===
{{example | putchar with error checking
|code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    int ret_code = 0;
    for (char c = 'a'; (ret_code != EOF) &amp;&amp; (c != 'z'); c++)
        ret_code = putchar(c);
 
    /* Test whether EOF was reached. */
    if (ret_code == EOF)
       if (ferror(stdout)) 
       {
          fprintf(stderr,&quot;putchar() failed in file %s at line # %d\n&quot;, __FILE__,__LINE__-6);
          perror(&quot;putchar()&quot;);
          exit(EXIT_FAILURE);
       }
    putchar('\n');

    // putchar return value is not equal to the argument
    int r = 0x1070;
    printf(&quot;\n0x%x\n&quot;, r);
    r = putchar(r);
    printf(&quot;\n0x%x\n&quot;, r);
}
|output=
abcdefghijklmnopqrstuvwxy

0x1070
p
0x70
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.8 | title=The putchar function | p=333}}
{{ref std c99}}
{{ref std | section=7.19.7.9 | title=The putchar function | p=299}}
{{ref std c89}}
{{ref std | section=4.9.7.9  | title=The putchar function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fputc}}
{{dsc see cpp | cpp/io/c/putchar}}
{{dsc end}}

[[ar:c/io/putchar]]
[[cs:c/io/putchar]]
[[de:c/io/putchar]]
[[es:c/io/putchar]]
[[fr:c/io/putchar]]
[[it:c/io/putchar]]
[[ja:c/io/putchar]]
[[ko:c/io/putchar]]
[[pl:c/io/putchar]]
[[pt:c/io/putchar]]
[[ru:c/io/putchar]]
[[tr:c/io/putchar]]
[[zh:c/io/putchar]]</text>
      <sha1>5pjnh7tn0oe9p53c6yptl5l3t60b8xv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/puts</title>
    <ns>0</ns>
    <id>6213</id>
    <revision>
      <id>85755</id>
      <parentid>85754</parentid>
      <timestamp>2016-05-13T15:43:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1936">{{c/title| puts}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int puts( const char *str );
}}
Writes every character from the null-terminated string {{tt|str}} and one additional newline character {{c|'\n'}} to the output stream {{tt|stdout}}, as if by repeatedly executing {{lc|fputc}}.

The terminating null character from {{tt|str}} is not written.

===Parameters===
{{par begin}}
{{par | str | character string to be written}}
{{par end}}

===Return value===
On success, returns a non-negative value

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|ferror()}}) on {{tt|stream}}.

===Notes===
The {{tt|puts}} function appends the newline character to the output, while {{lc|fputs}} function does not.

Different implementations return different non-negative numbers: some return the last character written, some return the number of characters written (or INT_MAX if the string was longer than that), some simply return a non-negative constant.

A typical cause of failure for {{tt|puts}} is running out of space on the file system, when stdout is redirected to a file.

===Example===
{{example| code=
#include &lt;stdio.h&gt;
 
int main(void)
{
    int rc = puts(&quot;Hello World&quot;);

    if (rc == EOF)
       perror(&quot;puts()&quot;); // POSIX requires that errno is set
}
| output=
Hello World
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.9  | title=The puts function | p=333}}
{{ref std c99}}
{{ref std | section=7.19.7.10 | title=The puts function | p=299}}
{{ref std c89}}
{{ref std | section=4.9.7.10  | title=The puts function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fputs}}
{{dsc inc | c/io/dsc fprintf}}
{{dsc see cpp | cpp/io/c/puts}}
{{dsc end}}

[[ar:c/io/puts]]
[[cs:c/io/puts]]
[[de:c/io/puts]]
[[es:c/io/puts]]
[[fr:c/io/puts]]
[[it:c/io/puts]]
[[ja:c/io/puts]]
[[ko:c/io/puts]]
[[pl:c/io/puts]]
[[pt:c/io/puts]]
[[ru:c/io/puts]]
[[tr:c/io/puts]]
[[zh:c/io/puts]]</text>
      <sha1>ngt61sqowrb343f4v4figtyzokedmr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/putwc</title>
    <ns>0</ns>
    <id>6484</id>
    <redirect title="c/io/fputwc" />
    <revision>
      <id>25654</id>
      <timestamp>2012-04-23T20:54:19Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fputwc]]</comment>
      <text xml:space="preserve" bytes="25">#redirect [[c/io/fputwc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/putwchar</title>
    <ns>0</ns>
    <id>6220</id>
    <revision>
      <id>77742</id>
      <parentid>74609</parentid>
      <timestamp>2015-04-04T21:21:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="944">{{c/title| putwchar}}
{{c/io/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
wint_t putwchar( wchar_t ch );
}}
Writes a wide character {{tt|ch}} to {{tt|stdout}}

===Parameters===
{{par begin}}
{{par | ch | wide character to be written}}
{{par end}}

===Return value===

{{tt|ch}} on success, {{c|WEOF}} on failure.

===References===
{{ref std c11}}
{{ref std | section=7.29.3.9 | title=The putwchar function | p=425}}
{{ref std c99}}
{{ref std | section=7.24.3.9 | title=The putwchar function | p=370}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc putchar}}
{{dsc inc | c/io/dsc fputwc}}
{{dsc see cpp | cpp/io/c/putwchar}}
{{dsc end}}

[[ar:c/io/putwchar]]
[[cs:c/io/putwchar]]
[[de:c/io/putwchar]]
[[es:c/io/putwchar]]
[[fr:c/io/putwchar]]
[[it:c/io/putwchar]]
[[ja:c/io/putwchar]]
[[ko:c/io/putwchar]]
[[pl:c/io/putwchar]]
[[pt:c/io/putwchar]]
[[ru:c/io/putwchar]]
[[tr:c/io/putwchar]]
[[zh:c/io/putwchar]]</text>
      <sha1>4noq096fumtd5v026q0jfvhofko05x2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/remove</title>
    <ns>0</ns>
    <id>6239</id>
    <revision>
      <id>78919</id>
      <parentid>77683</parentid>
      <timestamp>2015-06-12T15:19:57Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2199">{{c/title | remove}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int remove( const char *fname );
}}

Deletes the file identified by character string pointed to by {{tt|fname}}.

If the file is currently open by this or another process, the behavior of this function is implementation-defined (in particular, POSIX systems unlink the file name although the file system space is not reclaimed until the last running process closes the file; Windows does not allow the file to be deleted).

===Parameters===
{{par begin}}
{{par | fname | pointer to a null-terminated string containing the path identifying the file to delete}}
{{par end}}

===Return value===
{{c|0}} upon success or non-zero value on error.

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/remove.html POSIX specifies] many additional details for the behavior of this function.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
int main(void)
{
    FILE* fp = fopen(&quot;file1.txt&quot;, &quot;w&quot;); // create file
    if(!fp) { perror(&quot;file1.txt&quot;); return 1; }
    puts(&quot;Created file1.txt&quot;);
    fclose(fp);

    int rc = remove(&quot;file1.txt&quot;);
    if(rc) { perror(&quot;remove&quot;); return 1; }
    puts(&quot;Removed file1.txt&quot;);

    fp = fopen(&quot;file1.txt&quot;, &quot;r&quot;); // Failure: file does not exist
    if(!fp) perror(&quot;Opening removed file failed&quot;);

    rc = remove(&quot;file1.txt&quot;); // Failure: file does not exist
    if(rc) perror(&quot;Double-remove failed&quot;);
}
 | output=
Created file1.txt
Removed file1.txt
Opening removed file failed: No such file or directory
Double-remove failed: No such file or directory
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.4.1 | title=The remove function | p=302}}
{{ref std c99}}
{{ref std | section=7.19.4.1 | title=The remove function | p=268}}
{{ref std c89}}
{{ref std | section=4.9.4.1  | title=The remove function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc rename}}
{{dsc see cpp | cpp/io/c/remove}}
{{dsc end}}

[[ar:c/io/remove]]
[[cs:c/io/remove]]
[[de:c/io/remove]]
[[es:c/io/remove]]
[[fr:c/io/remove]]
[[it:c/io/remove]]
[[ja:c/io/remove]]
[[ko:c/io/remove]]
[[pl:c/io/remove]]
[[pt:c/io/remove]]
[[ru:c/io/remove]]
[[tr:c/io/remove]]
[[zh:c/io/remove]]</text>
      <sha1>9klaw4mxpxpqz55q5cdatjkhha35u4j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/rename</title>
    <ns>0</ns>
    <id>6240</id>
    <revision>
      <id>78920</id>
      <parentid>77684</parentid>
      <timestamp>2015-06-12T15:21:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2011">{{c/title | rename}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int rename( const char *old_filename, const char *new_filename );
}}

Changes the filename of a file. The file is identified by character string pointed to by {{tt|old_filename}}. The new filename is identified by character string pointed to by {{tt|new_filename}}.

If {{tt|new_filename}} exists, the behavior is implementation-defined.

===Parameters===
{{par begin}}
{{par | old_filename | pointer to a null-terminated string containing the path identifying the file to rename}}
{{par | new_filename | pointer to a null-terminated string containing the new path of the file}}
{{par end}}

===Return value===
{{c|0}} upon success or non-zero value on error.

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html POSIX] specifies many additional details on the semantics of this function.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
int main(void)
{
    FILE* fp = fopen(&quot;from.txt&quot;, &quot;w&quot;); // create file &quot;from.txt&quot;
    if(!fp) { perror(&quot;from.txt&quot;); return 1; }
    fputc('a', fp); // write to &quot;from.txt&quot;
    fclose(fp);

    int rc = rename(&quot;from.txt&quot;, &quot;to.txt&quot;);
    if(rc) { perror(&quot;rename&quot;); return 1; }

    fp = fopen(&quot;to.txt&quot;, &quot;r&quot;);
    if(!fp) { perror(&quot;to.txt&quot;); return 1; }
    printf(&quot;%c\n&quot;, fgetc(fp)); // read from &quot;to.txt&quot;
    fclose(fp);
}
 | output=
a
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.4.2 | title=The rename function | p=302-303}}
{{ref std c99}}
{{ref std | section=7.19.4.2 | title=The rename function | p=268-269}}
{{ref std c89}}
{{ref std | section=4.9.4.2  | title=The rename function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc remove}}
{{dsc see cpp | cpp/io/c/rename}}
{{dsc end}}

[[ar:c/io/rename]]
[[cs:c/io/rename]]
[[de:c/io/rename]]
[[es:c/io/rename]]
[[fr:c/io/rename]]
[[it:c/io/rename]]
[[ja:c/io/rename]]
[[ko:c/io/rename]]
[[pl:c/io/rename]]
[[pt:c/io/rename]]
[[ru:c/io/rename]]
[[tr:c/io/rename]]
[[zh:c/io/rename]]</text>
      <sha1>h30p9856i2jh2rf9wynxlgg8i1xk00i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/rewind</title>
    <ns>0</ns>
    <id>6234</id>
    <revision>
      <id>78946</id>
      <parentid>77724</parentid>
      <timestamp>2015-06-12T16:28:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1581">{{c/title | rewind }}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
void rewind( FILE *stream );
}}

Moves the file position indicator to the beginning of the given file stream. 

The function is equivalent to {{c|fseek(stream, 0, SEEK_SET);}}, except that end-of-file and error indicators are cleared. 

The function drops any effects from previous calls to {{lc|ungetc}}.

===Parameters===
{{par begin}}
{{par | stream | file stream to modify}}
{{par end}}

===Return value===
(none)

===Example===
{{example | This example shows how to read a file twice
|code=
#include &lt;stdio.h&gt;

char str[20];

int main(void)
{
    FILE *f;
    char ch;

    f = fopen(&quot;file.txt&quot;, &quot;w&quot;);
    for (ch = '0'; ch &lt;= '9'; ch++) {
        fputc(ch, f);
    }
    fclose(f);

    f = fopen(&quot;file.txt&quot;, &quot;r&quot;);
    fread(str, 1, 10, f);
    puts(str);
    
    rewind(f);
    fread(str, 1, 10, f);
    puts(str);
    fclose(f);

    return 0;
}
| output=
0123456789
0123456789
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.9.5 | title=The rewind function | p=338}}
{{ref std c99}}
{{ref std | section=7.19.9.5 | title=The rewind function | p=304}}
{{ref std c89}}
{{ref std | section=4.9.9.5  | title=The rewind function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fseek}}
{{dsc see cpp | cpp/io/c/rewind}}
{{dsc end}}

[[ar:c/io/rewind]]
[[cs:c/io/rewind]]
[[de:c/io/rewind]]
[[es:c/io/rewind]]
[[fr:c/io/rewind]]
[[it:c/io/rewind]]
[[ja:c/io/rewind]]
[[ko:c/io/rewind]]
[[pl:c/io/rewind]]
[[pt:c/io/rewind]]
[[ru:c/io/rewind]]
[[tr:c/io/rewind]]
[[zh:c/io/rewind]]</text>
      <sha1>3xann0gr348j8mufoz6psdzu24vgftd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/scanf</title>
    <ns>0</ns>
    <id>6485</id>
    <redirect title="c/io/fscanf" />
    <revision>
      <id>25655</id>
      <timestamp>2012-04-23T20:54:24Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fscanf]]</comment>
      <text xml:space="preserve" bytes="25">#redirect [[c/io/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/setbuf</title>
    <ns>0</ns>
    <id>6202</id>
    <revision>
      <id>78927</id>
      <parentid>77694</parentid>
      <timestamp>2015-06-12T15:34:00Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2521">{{c/title | setbuf}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
void setbuf( FILE          *stream, char          *buffer );
}}
{{dcl | since=c99 |
void setbuf( FILE *restrict stream, char *restrict buffer );
}}
{{dcl rev end}}
{{dcl end}}

Sets the internal buffer to use for stream operations. It should be at least {{tt|BUFSIZ}} characters long. 

If {{tt|buffer}} is not null, equivalent to {{c|setvbuf(stream, buffer, _IOFBF, BUFSIZ)}}.

If {{tt|buffer}} is null, equivalent to {{c|setvbuf(stream, NULL, _IONBF, 0)}}, which turns off buffering.

===Parameters===
{{par begin}}
{{par | stream | the file stream to set the buffer to}}
{{par | buffer | pointer to a buffer for the stream to use. If {{lc|NULL}} is supplied, the buffering is turned off}}
{{par end}}

===Return value===
None.

===Notes===
If {{lc|BUFSIZ}} is not the appropriate buffer size, {{lc|setvbuf}} can be used to change it.

{{lc|setvbuf}} should also be used to detect errors, since {{tt|setbuf}} does not indicate success or failure.

This function may only be used after {{tt|stream}} has been associated with an open file, but before any other operation (other than a failed call to {{lc|setbuf}}/{{tt|setvbuf}}).

A common error is setting the buffer of stdin or stdout to an array whose lifetime ends before the program terminates:
{{source|1=
int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
}}

===Example===
{{example
 | setbuf may be used to disable buffering on streams that require immediate output.
 | code=
#include &lt;stdio.h&gt;
#include &lt;threads.h&gt;

int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&amp;(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    putchar('b'); 
}
 | output=
ab
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.5.5 | title=The setbuf function | p=307-308}}
{{ref std c99}}
{{ref std | section=7.19.5.5 | title=The setbuf function | p=273}}
{{ref std c89}}
{{ref std | section=4.9.5.5  | title=The setbuf function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc setvbuf}}
{{dsc see cpp | cpp/io/c/setbuf}}
{{dsc end}}

[[ar:c/io/setbuf]]
[[cs:c/io/setbuf]]
[[de:c/io/setbuf]]
[[es:c/io/setbuf]]
[[fr:c/io/setbuf]]
[[it:c/io/setbuf]]
[[ja:c/io/setbuf]]
[[ko:c/io/setbuf]]
[[pl:c/io/setbuf]]
[[pt:c/io/setbuf]]
[[ru:c/io/setbuf]]
[[tr:c/io/setbuf]]
[[zh:c/io/setbuf]]</text>
      <sha1>fhssu7bojt1lum29qzo978pi5rzu83b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/setvbuf</title>
    <ns>0</ns>
    <id>6203</id>
    <revision>
      <id>87561</id>
      <parentid>83623</parentid>
      <timestamp>2016-09-09T18:25:34Z</timestamp>
      <contributor>
        <username>B3h3m0th</username>
        <id>1271</id>
      </contributor>
      <comment>Flush and close the stream</comment>
      <text xml:space="preserve" bytes="3874">{{c/title | setvbuf}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
int setvbuf( FILE *         stream, char *         buffer, 
             int mode, size_t size );
}}
{{dcl | since=c99 |
int setvbuf( FILE *restrict stream, char *restrict buffer, 
             int mode, size_t size );
}}
{{dcl rev end}}
{{dcl end}}

Changes the the buffering mode of the given file stream {{tt|stream}} as indicated by the argument {{tt|mode}}. In addition,

* If {{tt|buffer}} is a null pointer, resizes of the internal buffer to {{tt|size}}.
* If {{tt|buffer}} is not a null pointer, instructs the stream to use the user-provided buffer of size {{tt|size}} beginning at {{tt|buffer}}. The stream must be closed (with {{lc|fclose}}) before the [[c/language/lifetime|lifetime]] of the array pointed to by {{tt|buffer}} ends. The contents of the array after a successful call to {{tt|setvbuf}} are indeterminate and any attempt to use it is undefined behavior.

===Parameters===
{{par begin}}
{{par | stream | the file stream to set the buffer to or null pointer to change size and mode only}}
{{par | buffer | pointer to a buffer for the stream to use}}
{{par | mode |2= buffering mode to use. It can be one of the following values:

{{cpp/io/c/buffering modes}}
}}
{{par | size | size of the buffer}}
{{par end}}

===Return value===
{{c|0}} on success or nonzero on failure.

===Notes===
This function may only be used after {{tt|stream}} has been associated with an open file, but before any other operation (other than a failed call to {{lc|setbuf}}/{{tt|setvbuf}}).

Not all {{tt|size}} bytes will necessarily be used for buffering: the actual buffer size is usually rounded down to a multiple of 2, a multiple of page size, etc.

On many implementations, line buffering is only available for terminal input streams.

A common error is setting the buffer of stdin or stdout to an array whose lifetime ends before the program terminates:
{{source|1=
int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
}}

The default buffer size {{lc|BUFSIZ}} is expected to be the most efficient buffer size for file I/O on the implementation, but POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fstat.html fstat] often provides a better estimate.

===Example===
{{example | One use case for changing buffer size is when a better size is known.
| code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/stat.h&gt;

int main(void)
{
    FILE* fp = fopen(&quot;test.txt&quot;, &quot;r&quot;);
    if(fp == NULL) {
       perror(&quot;fopen&quot;); return 1;
    }

    struct stat stats;
    if(fstat(fileno(fp), &amp;stats) == -1) { // POSIX only
        perror(&quot;fstat&quot;); return 1;
    }

    printf(&quot;BUFSIZ is %d, but optimal block size is %ld\n&quot;, BUFSIZ, stats.st_blksize);
    if(setvbuf(fp, NULL, _IOFBF, stats.st_blksize) != 0) {
       perror(&quot;setvbuf failed&quot;); // POSIX version sets errno
       return 1;
    }

    int ch;
    while((ch=fgetc(fp)) != EOF); // read entire file: use truss/strace to
                                  // observe the read(2) syscalls used

    fclose(fp);
}
|p=true
|output=
BUFSIZ is 8192, but optimal block size is 65536
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.5.6 | title=The setvbuf function | p=308}}
{{ref std c99}}
{{ref std | section=7.19.5.6 | title=The setvbuf function | p=273-274}}
{{ref std c89}}
{{ref std | section=4.9.5.6  | title=The setvbuf function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc setbuf}}
{{dsc see cpp | cpp/io/c/setvbuf}}
{{dsc end}}

[[ar:c/io/setvbuf]]
[[cs:c/io/setvbuf]]
[[de:c/io/setvbuf]]
[[es:c/io/setvbuf]]
[[fr:c/io/setvbuf]]
[[it:c/io/setvbuf]]
[[ja:c/io/setvbuf]]
[[ko:c/io/setvbuf]]
[[pl:c/io/setvbuf]]
[[pt:c/io/setvbuf]]
[[ru:c/io/setvbuf]]
[[tr:c/io/setvbuf]]
[[zh:c/io/setvbuf]]</text>
      <sha1>kwrm095us02c7npn3s1hs47ekcox55x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/snprintf</title>
    <ns>0</ns>
    <id>6496</id>
    <redirect title="c/io/fprintf" />
    <revision>
      <id>25667</id>
      <timestamp>2012-04-23T20:55:45Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fprintf]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[c/io/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/sprintf</title>
    <ns>0</ns>
    <id>6495</id>
    <redirect title="c/io/fprintf" />
    <revision>
      <id>25666</id>
      <timestamp>2012-04-23T20:55:42Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fprintf]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[c/io/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/sscanf</title>
    <ns>0</ns>
    <id>6487</id>
    <redirect title="c/io/fscanf" />
    <revision>
      <id>25657</id>
      <timestamp>2012-04-23T20:54:39Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fscanf]]</comment>
      <text xml:space="preserve" bytes="25">#redirect [[c/io/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/swprintf</title>
    <ns>0</ns>
    <id>6497</id>
    <redirect title="c/io/fwprintf" />
    <revision>
      <id>25668</id>
      <timestamp>2012-04-23T20:55:48Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fwprintf]]</comment>
      <text xml:space="preserve" bytes="27">#redirect [[c/io/fwprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/swscanf</title>
    <ns>0</ns>
    <id>6488</id>
    <redirect title="c/io/fwscanf" />
    <revision>
      <id>25658</id>
      <timestamp>2012-04-23T20:54:44Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fwscanf]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[c/io/fwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/tmpfile</title>
    <ns>0</ns>
    <id>6241</id>
    <revision>
      <id>89605</id>
      <parentid>87717</parentid>
      <timestamp>2017-01-22T09:29:09Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>correction</comment>
      <text xml:space="preserve" bytes="3878">{{c/title | tmpfile, tmpfile_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header|stdio.h}}
{{dcl |num=1|
FILE *tmpfile(void);
}}
{{dcl | num=2 | since=c11|
errno_t tmpfile_s(FILE * restrict * restrict streamptr);
}}
{{dcl end}}

@1@ Creates and opens a temporary file. The file is opened as binary file for update (as if by {{lc|fopen}} with {{tt|&quot;wb+&quot;}} mode). The filename of the file is guaranteed to be unique within the filesystem. At least {{lc|TMP_MAX}} files may be opened during the lifetime of a program (this limit may be shared with {{lc|tmpnam}} and may be further limited by {{lc|FOPEN_MAX}}).

@2@ Same as {{v|1}}, except that at least {{lc|TMP_MAX_S}} files may be opened (the limit may be shared with {{lc|tmpnam_s}}), and if {{tt|streamptr}} is a null pointer, the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function is called. 
:As all bounds-checked functions, {{tt|tmpfile_s}} is only guaranteed to be available of {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

The temporary file created by this function is closed and deleted when the program exits normally. Whether it's deleted on abnormal termination is implementation-defined.

===Parameters===
@1@ (none)
@2@ pointer to a pointer that will be updated by this function call

===Return value===
@1@ Pointer to the file stream associated with the file or null pointer if an error has occurred.
@2@ Zero if the file was created and open successfully, non-zero if the file was not created or open or if {{tt|streamptr}} was a null pointer. In addition, pointer to the associated file stream is stored in {{tt|*streamptr}} on success, and a null pointer value is stored in {{tt|*streamptr}} on error.

===Notes===
On some implementations (e.g. Linux), this function actually creates, opens, and immediately deletes the file from the file system: as long as an open file descriptor to a deleted file is held by a program, the file exists, but since it was deleted, its name does not appear in any directory, so that no other process can open it. Once the file descriptor is closed, or once the program terminates (normally or abnormally), the space occupied by the file is reclaimed by the filesystem.

On some implementations (e.g. Windows), elevated privileges are required as the function may create the temporary file in a system directory.

===Example===
{{example | code=
#define _POSIX_C_SOURCE 200112L
#include &lt;stdio.h&gt;
#include &lt;stdio.h&gt;
#include &lt;unistd.h&gt;
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs(&quot;Hello, world&quot;, tmpf);
    rewind(tmpf);
    char buf[6];
    fgets(buf, sizeof buf, tmpf);
    printf(&quot;got back from the file: '%s'\n&quot;, buf);

    // Linux-specific method to display the tmpfile name
    char fname[FILENAME_MAX], link[FILENAME_MAX] = {0};
    sprintf(fname, &quot;/proc/self/fd/%d&quot;, fileno(tmpf));
    if(readlink(fname, link, sizeof link - 1) &gt; 0)
        printf(&quot;File name: %s\n&quot;, link);
}
 | p=true
 | output=
got back from the file: 'Hello'
File name: /tmp/tmpfjptPe5 (deleted)
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.4.3  | title=The tmpfile function   | p=303}}
{{ref std | section=K.3.5.1.1 | title=The tmpfile_s function | p=586-587}}
{{ref std c99}}
{{ref std | section=7.19.4.3  | title=The tmpfile function   | p=269}}
{{ref std c89}}
{{ref std | section=4.9.4.3   | title=The tmpfile function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc tmpnam}}
{{dsc see cpp | cpp/io/c/tmpfile}}
{{dsc end}}

[[ar:c/io/tmpfile]]
[[cs:c/io/tmpfile]]
[[de:c/io/tmpfile]]
[[es:c/io/tmpfile]]
[[fr:c/io/tmpfile]]
[[it:c/io/tmpfile]]
[[ja:c/io/tmpfile]]
[[ko:c/io/tmpfile]]
[[pl:c/io/tmpfile]]
[[pt:c/io/tmpfile]]
[[ru:c/io/tmpfile]]
[[tr:c/io/tmpfile]]
[[zh:c/io/tmpfile]]</text>
      <sha1>1079yo3sdat525ko5wn99ackonjd5vh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/tmpnam</title>
    <ns>0</ns>
    <id>6242</id>
    <revision>
      <id>89606</id>
      <parentid>78922</parentid>
      <timestamp>2017-01-22T10:08:21Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>correction</comment>
      <text xml:space="preserve" bytes="4362">{{c/title | tmpnam| tmpnam_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header|stdio.h}}
{{dcl | num=1 | 
char *tmpnam( char *filename );
}}
{{dcl | num=2 | since=c11 |
errno_t tmpnam_s(char *filename_s, rsize_t maxsize);
}}
{{dcl end}}

@1@ Creates a unique valid file name (no longer than {{lc|L_tmpnam}} in length) and stores it in character string pointed to by {{tt|filename}}. The function is capable of generating up to {{lc|TMP_MAX}} of unique filenames, but some or all of them may be in use in the filesystem and thus not suitable return values. 

@2@ Same as {{v|1}}, except that up to {{lc|TMP_MAX_S}} names may be generated, no longer than {{lc|L_tmpnam_s}} in length, and he following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|filename_s}} is a null pointer
:* {{tt|maxsize}} is greater than {{c|RSIZE_MAX}}
:* {{tt|maxsize}} is less than the generated file name string
:As all bounds-checked functions, {{tt|tmpnam_s}} is only guaranteed to be available of {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

{{tt|tmpnam}} and {{tt|tmpnam_s}} modify static state (which may be shared between these functions) and are not required to be thread-safe.

===Parameters===
{{par begin}}
{{par | filename | pointer to the character array capable of holding at least {{lc|L_tmpnam}} bytes, to be used as a result buffer. If null pointer is passed, a pointer to an internal static buffer is returned.}}
{{par | filename_s | pointer to the character array capable of holding at least {{lc|L_tmpnam_s}} bytes, to be used as a result buffer.}}
{{par | maxsize | maximum number of characters the function is allowed to write (typically the size of the {{tt|filename_s}} array).}}
{{par end}}

===Return value===
@1@ {{tt|filename}} if {{tt|filename}} was not a null pointer. Otherwise a pointer to an internal static buffer is returned. If no suitable filename can be generated, null pointer is returned.
@2@ Returns zero and writes the file name to {{tt|filename_s}} on success. On error, returns non-zero and writes the null character to {{tt|filename_s[0]}} (only if {{tt|filename_s}} is not null and {{tt|maxsize}} is not zero and is not greater than {{lc|RSIZE_MAX}}).

===Notes===
Although the names generated by {{tt|tmpnam}} are difficult to guess, it is possible that a file with that name is created by another process between the moment {{tt|tmpnam}} returns and the moment this program attempts to use the returned name to create a file. The standard function {{lc|tmpfile}} and the POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdtemp.html mkstemp] do not have this problem (creating a unique directory using only the standard C library still requires the use of {{tt|tmpnam}}).

POSIX systems additionally define the similarly named function {{tt|[http://pubs.opengroup.org/onlinepubs/9699919799/functions/tempnam.html tempnam()]}}, which offers the choice of a directory (which defaults to the optionally defined macro {{tt|[http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdio.h.html P_tmpdir])}}.

===Example===
{{example | code=
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(void)
{
    char* name1 = tmpnam(NULL);
    printf(&quot;temporary file name: %s\n&quot;, name1);

    char name2[L_tmpnam];
    if (tmpnam(name2))
        printf(&quot;temporary file name: %s\n&quot;, name2);
}
 | p=true
 | output=
temporary file name: /tmp/fileRZHMwL
temporary file name: /tmp/file420gSN
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.4.4  | title=The tmpnam function   | p=303-304}}
{{ref std | section=K.3.5.1.2 | title=The tmpnam_s function | p=587-588}}
{{ref std c99}}
{{ref std | section=7.19.4.4  | title=The tmpnam function   | p=269-270}}
{{ref std c89}}
{{ref std | section=4.9.4.4   | title=The tmpnam function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc tmpfile}}
{{dsc see cpp | cpp/io/c/tmpnam}}
{{dsc end}}

[[ar:c/io/tmpnam]]
[[cs:c/io/tmpnam]]
[[de:c/io/tmpnam]]
[[es:c/io/tmpnam]]
[[fr:c/io/tmpnam]]
[[it:c/io/tmpnam]]
[[ja:c/io/tmpnam]]
[[ko:c/io/tmpnam]]
[[pl:c/io/tmpnam]]
[[pt:c/io/tmpnam]]
[[ru:c/io/tmpnam]]
[[tr:c/io/tmpnam]]
[[zh:c/io/tmpnam]]</text>
      <sha1>mo0tpmk6hl8jkxr5npmqhkgg2c3iatz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/ungetc</title>
    <ns>0</ns>
    <id>6214</id>
    <revision>
      <id>86959</id>
      <parentid>83469</parentid>
      <timestamp>2016-07-19T10:00:46Z</timestamp>
      <contributor>
        <ip>123.231.86.185</ip>
      </contributor>
      <comment>changed 'than' to 'that'</comment>
      <text xml:space="preserve" bytes="3840">{{c/title| ungetc}}
{{c/io/navbar}}
{{ddcl | header=stdio.h |
int ungetc( int ch, FILE *stream );
}}

If {{tt|ch}} does not equal {{lc|EOF}}, pushes the character {{tt|ch}} (reinterpreted as {{c|unsigned char}}) into the input buffer associated with the stream {{tt|stream}} in such a manner that subsequent read operation from {{tt|stream}} will retrieve that character. The external device associated with the stream is not modified.

Stream repositioning operations {{lc|fseek}}, {{lc|fsetpos}}, and {{lc|rewind}} discard the effects of {{tt|ungetc}}.

If {{tt|ungetc}} is called more than once without an intervening read or repositioning, it may fail (in other words, a pushback buffer of size 1 is guaranteed, but any larger buffer is implementation-defined). If multiple successful {{tt|ungetc}} were performed, read operations retrieve the pushed-back characters in reverse order of {{tt|ungetc}}

If {{tt|ch}} equals {{lc|EOF}}, the operation fails and the stream is not affected.

A successful call to {{tt|ungetc}} clears the end of file status flag {{lc|feof}}.

A successful call to {{tt|ungetc}} on a binary stream decrements the stream position indicator by one (the behavior is indeterminate if the stream position indicator was zero).

A successful call to {{tt|ungetc}} on a text stream modifies the stream position indicator in unspecified manner but guarantees that after all pushed-back characters are retrieved with a read operation, the stream position indicator is equal to its value before {{tt|ungetc}}.

===Parameters===
{{par begin}}
{{par | ch | character to be pushed into the input stream buffer }}
{{par | stream | file stream to put the character back to}}
{{par end}}

===Return value===

On success {{tt|ch}} is returned.

On failure {{lc|EOF}} is returned and the given stream remains unchanged.

===Notes===
The size of the pushback buffer varies in practice from 4k (Linux, MacOS) to as little as 4 (Solaris) or the guaranteed minimum 1 (HPUX, AIX)

The apparent size of the pushback buffer may be larger if the character that is pushed back equals the character existing at that location in the external character sequence (the implementation may simply decrement the read file position indicator and avoid maintaining a pushback buffer)

===Example===
{{example|demonstrates the original purpose of ungetc: implementation of scanf
|code=
#include &lt;ctype.h&gt;
#include &lt;stdio.h&gt;

void demo_scanf(const char* fmt, FILE* s) {
    if(*fmt == '%') {
        int c;
        switch(*++fmt) {
            case 'u': while(isspace(c=getc(s))) {} // skip leading white space
                      unsigned int num = 0;
                      while(isdigit(c)) {
                          num = num*10 + c-'0';
                          c = getc(s);
                      }
                      printf(&quot;%%u scanned %u\n&quot;, num);
                      ungetc(c, s); // reprocess the non-digit
            case 'c': c = getc(s);
                      printf(&quot;%%c scanned '%c'\n&quot;, c);
        }
    } 
}

int main(void)
{
    FILE* f = fopen(&quot;input.txt&quot;, &quot;w+&quot;);
    fputs(&quot;123x&quot;, f);
    rewind(f); 
    demo_scanf(&quot;%u%c&quot;, f);
    fclose(f);
}
 | output=
%u scanned 123
%c scanned 'x'
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.7.10 | title=The ungetc function | p=334}}
{{ref std c99}}
{{ref std | section=7.19.7.11 | title=The ungetc function | p=300}}
{{ref std c89}}
{{ref std | section=4.9.7.11  | title=The ungetc function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fgetc}}
{{dsc see cpp | cpp/io/c/ungetc}}
{{dsc end}}

[[ar:c/io/ungetc]]
[[cs:c/io/ungetc]]
[[de:c/io/ungetc]]
[[es:c/io/ungetc]]
[[fr:c/io/ungetc]]
[[it:c/io/ungetc]]
[[ja:c/io/ungetc]]
[[ko:c/io/ungetc]]
[[pl:c/io/ungetc]]
[[pt:c/io/ungetc]]
[[ru:c/io/ungetc]]
[[tr:c/io/ungetc]]
[[zh:c/io/ungetc]]</text>
      <sha1>7vbjsqtjbn8i7ty8x1xe3rijiisdcu3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/ungetwc</title>
    <ns>0</ns>
    <id>6221</id>
    <revision>
      <id>86961</id>
      <parentid>83471</parentid>
      <timestamp>2016-07-19T12:17:05Z</timestamp>
      <contributor>
        <ip>123.231.86.185</ip>
      </contributor>
      <comment>changed 'than' to 'that'</comment>
      <text xml:space="preserve" bytes="2288">{{c/title| ungetwc}}
{{c/io/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
wint_t ungetwc( wint_t ch, FILE *stream );
}}

If {{tt|ch}} does not equal {{lc|WEOF}}, pushes the wide character {{tt|ch}} into the input buffer associated with the stream {{tt|stream}} in such a manner that subsequent read operation from {{tt|stream}} will retrieve that wide character. The external device associated with the stream is not modified.

Stream repositioning operations {{lc|fseek}}, {{lc|fsetpos}}, and {{lc|rewind}} discard the effects of {{tt|ungetwc}}.

If {{tt|ungetwc}} is called more than once without an intervening read or repositioning, it may fail (in other words, a pushback buffer of size 1 is guaranteed, but any larger buffer is implementation-defined). If multiple successful {{tt|ungetwc}} were performed, read operations retrieve the pushed-back wide characters in reverse order of {{tt|ungetwc}}

If {{tt|ch}} equals {{lc|WEOF}}, the operation fails and the stream is not affected.

A successful call to {{tt|ungetwc}} clears the end of file status flag {{lc|feof}}.

A successful call to {{tt|ungetwc}} on a stream (whether text or binary) modifies the stream position indicator in unspecified manner but guarantees that after all pushed-back wide characters are retrieved with a read operation, the stream position indicator is equal to its value before {{tt|ungetwc}}.

===Parameters===
{{par begin}}
{{par | ch | wide character to be put back}}
{{par | stream | file stream to put the wide character back to}}
{{par end}}

===Return value===

On success {{tt|ch}} is returned.

On failure {{c|WEOF}} is returned and the given stream remains unchanged.

===References===
{{ref std c11}}
{{ref std | section=7.29.3.10 | title=The ungetwc function | p=425-426}}
{{ref std c99}}
{{ref std | section=7.24.3.10 | title=The ungetwc function | p=370-371}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc ungetc}}
{{dsc inc | c/io/dsc fgetwc}}
{{dsc see cpp | cpp/io/c/ungetwc}}
{{dsc end}}

[[ar:c/io/ungetwc]]
[[cs:c/io/ungetwc]]
[[de:c/io/ungetwc]]
[[es:c/io/ungetwc]]
[[fr:c/io/ungetwc]]
[[it:c/io/ungetwc]]
[[ja:c/io/ungetwc]]
[[ko:c/io/ungetwc]]
[[pl:c/io/ungetwc]]
[[pt:c/io/ungetwc]]
[[ru:c/io/ungetwc]]
[[tr:c/io/ungetwc]]
[[zh:c/io/ungetwc]]</text>
      <sha1>dkxd0nekefydlwew9tl6rcozje88tri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vfprintf</title>
    <ns>0</ns>
    <id>6225</id>
    <revision>
      <id>77840</id>
      <parentid>77839</parentid>
      <timestamp>2015-04-13T15:17:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+missing ref</comment>
      <text xml:space="preserve" bytes="7683">{{c/title | vprintf | vfprintf | vsprintf | vsnprintf | vprintf_s | vfprintf_s| vsprinf_s | vsnprinf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl rev begin | num=1}}
{{dcl | until=c99 |
​int vprintf( const char *format, va_list vlist );​
}}
{{dcl | since=c99 |
​int vprintf( const char *restrict format, va_list vlist );​
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c99 |
int vfprintf( FILE *stream, const char *format, va_list vlist );
}}
{{dcl | since=c99 |
int vfprintf( FILE *restrict stream, const char *restrict format, 
              va_list vlist );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | until=c99 |
int vsprintf( char *buffer, const char *format, va_list vlist );
}}
{{dcl | since=c99 |
int vsprintf( char *restrict buffer, const char *restrict format, 
              va_list vlist );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c99 |
int vsnprintf( char *restrict buffer, int bufsz, 
               const char *restrict format, va_list vlist );
}}
{{dcl | num=5 | since=c11 |
int vprintf_s( const char *restrict format, va_list arg);
}}
{{dcl | num=6 | since=c11|
int vfprintf_s( FILE *restrict stream, const char *restrict format,
                va_list arg);
}}
{{dcl | num=7 |since=c11|
int vsprintf_s( char *restrict buffer, rsize_t bufsz,
                const char *restrict format, va_list arg);
}}
{{dcl | num=8 |since=c11|
int vsnprintf_s(char *restrict buffer, rsize_t bufsz,
                const char * restrict format, va_list arg);
}}
{{dcl end}}

Loads the data from the locations, defined by {{tt|vlist}}, converts them to character string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to {{lc|stdout}}.
@2@ Writes the results to a file stream {{tt|stream}}.
@3@ Writes the results to a character string {{tt|buffer}}.
@4@ Writes the results to a character string {{tt|buffer}}. At most {{tt|buf_size}} characters are written. The resulting character string will be terminated with a null character, unless {{tt|buf_size}} is zero. If {{tt|buf_size}} is zero, nothing is written and {{tt|buffer}} may be a null pointer, however the return value (number of bytes that would be written) is still calculated and returned.
@5-8@ Same as {{v|1-4}}, except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* the conversion specifier {{tt|%n}} is present in {{tt|format}}
:* any of the arguments corresponding to {{tt|%s}} is a null pointer
:* {{tt|format}} or {{tt|buffer}} is a null pointer
:* {{tt|bufsz}} is zero or greater than {{lc|RSIZE_MAX}}
:* encoding errors occur in any of string and character conversion specifiers
:* (for {{tt|vsprintf_s}} only), the string to be stored in {{tt|buffer}} (including the trailing null)) would be exceed {{tt|bufsz}}
:As all bounds-checked functions, {{tt|vprintf_s}}, {{tt|vfprintf_s}}, {{tt|vsprintf_s}}, and {{tt|vsnrintf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | output file stream to write to}}
{{par | buffer | pointer to a character string to write to}}
{{par | bufsz | up to bufsz - 1 characters may be written, plus the null terminator}}
{{par | format | pointer to a null-terminated character string specifying how to interpret the data.
{{cpp/io/c/printf format}}
}}
{{par | vlist | variable argument list containing the data to print }}
{{par end}}

===Return value===
@1-3@ The number of characters written if successful or negative value if an error occurred.
@4@ The number of characters written if successful or negative value if an error occurred. If the resulting string gets truncated due to {{tt|buf_size}} limit, function returns the total number of characters (not including the terminating null-byte) which would have been written, if the limit was not imposed. 
@5,6@ number of characters transmitted to the output stream or negative value if an output error, a runtime constrants violation error, or an encoding error occurred.
@7@ number of characters written to {{tt|buffer}}, not counting the null character (which is always written as long as {{tt|buffer}} is not a null pointer and {{tt|bufsz}} is not zero and not greater than {{tt|RSIZE_MAX}}), or zero on runtime constraint violations, and negative value on encoding errors
@8@ number of characters not including the terminating null character (which is always written as long as {{tt|buffer}} is not a null pointer and {{tt|bufsz}} is not zero and not greater than {{tt|RSIZE_MAX}}), which would have been written to {{tt|buffer}} if {{tt|bufsz}} was ignored, or a negative value if a runtime constraints violation or an encoding error occurred

===Notes===
All these functions invoke {{lc|va_arg}} at least once, the value of {{tt|arg}} is indeterminate after the return. These functions to not invoke {{lc|va_end}}, and it must be done by the caller.

{{tt|vsnprintf_s}}, unlike {{tt|vsprintf_s}}, will truncate the result to fit within the array pointed to by {{tt|buffer}}.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdarg.h&gt;
#include &lt;time.h&gt;

void debug_log(const char *fmt, ...)
{
    struct timespec ts;
    timespec_get(&amp;ts, TIME_UTC);
    char time_buf[100];
    size_t rc = strftime(time_buf, sizeof time_buf, &quot;%D %T&quot;, gmtime(&amp;ts.tv_sec));
    snprintf(time_buf + rc, sizeof time_buf - rc, &quot;.%06ld UTC&quot;, ts.tv_nsec / 1000);

    va_list args1;
    va_start(args1, fmt);
    va_list args2;
    va_copy(args2, args1);
    char buf[1+vsnprintf(NULL, 0, fmt, args1)];
    va_end(args1);
    vsnprintf(buf, sizeof buf, fmt, args2);
    va_end(args2);

    printf(&quot;%s [debug]: %s\n&quot;, time_buf, buf);
}

int main(void)
{
    debug_log(&quot;Logging, %d, %d, %d&quot;, 1, 2, 3);
}
 | p=true
 | output=
02/20/15 21:58:09.072683 UTC [debug]: Logging, 1, 2, 3
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.6.8   | title=The vfprintf function    | p=326-327}}
{{ref std | section=7.21.6.10  | title=The vprintf function     | p=328}}
{{ref std | section=7.21.6.12  | title=The vsnprintf function   | p=329}}
{{ref std | section=7.21.6.13  | title=The vsprintf function    | p=329}}
{{ref std | section=K.3.5.3.8  | title=The vfprintf_s function  | p=597}}
{{ref std | section=K.3.5.3.10 | title=The vprintf_s function   | p=598-599}}
{{ref std | section=K.3.5.3.12 | title=The vsnprintf_s function | p=600}}
{{ref std | section=K.3.5.3.13 | title=The vsprintf_s function  | p=601}}
{{ref std c99}}
{{ref std | section=7.19.6.8   | title=The vfprintf function    | p=292}}
{{ref std | section=7.19.6.10  | title=The vprintf function     | p=293}}
{{ref std | section=7.19.6.12  | title=The vsnprintf function   | p=294}}
{{ref std | section=7.19.6.13  | title=The vsprintf function    | p=295}}
{{ref std c89}}
{{ref std | section=4.9.6.7|title=The vfprintf function}}
{{ref std | section=4.9.6.8|title=The vprintf function}}
{{ref std | section=4.9.6.9|title=The vsprintf function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc vfwprintf}}
{{dsc inc | c/io/dsc fprintf}}
{{dsc inc | c/io/dsc vfscanf}}
{{dsc see cpp | cpp/io/c/vfprintf | vprintf | vfprintf | vsprintf | vsnprintf}}
{{dsc end}}

[[ar:c/io/vfprintf]]
[[cs:c/io/vfprintf]]
[[de:c/io/vfprintf]]
[[es:c/io/vfprintf]]
[[fr:c/io/vfprintf]]
[[it:c/io/vfprintf]]
[[ja:c/io/vfprintf]]
[[ko:c/io/vfprintf]]
[[pl:c/io/vfprintf]]
[[pt:c/io/vfprintf]]
[[ru:c/io/vfprintf]]
[[tr:c/io/vfprintf]]
[[zh:c/io/vfprintf]]</text>
      <sha1>nfc1v6ujihpm0epiviq71bjmnn2ug8l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vfscanf</title>
    <ns>0</ns>
    <id>6223</id>
    <revision>
      <id>77843</id>
      <parentid>77708</parentid>
      <timestamp>2015-04-13T15:35:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>_s, note on va_end, port example (at least some post-processing is better than a forwarder that does nothing else)</comment>
      <text xml:space="preserve" bytes="5092">{{c/title | vscanf | vfscanf | vsscanf | vscanf_s| vfscanf_s| vsscanf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | stdio.h}}
{{dcl | num=1 | since=c99 |
​int vscanf( const char *restrict format, va_list vlist );​
}}
{{dcl | num=2 | since=c99 |
int vfscanf( FILE *restrict stream, const char *restrict format, 
             va_list vlist );
}}
{{dcl | num=3 | since=c99 |
int vsscanf( const char *restrict buffer, const char *restrict format, 
             va_list vlist );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c11 |
int vscanf_s(const char *restrict format, va_list vlist);
}}
{{dcl | num=5 | since=c11 | 
int vfscanf_s( FILE *restrict stream, const char *restrict format,
               va_list vlist);
}}
{{dcl | num=6 | since=c11|
int vsscanf_s( const char *restrict buffer, const char *restrict format,
               va_list vlist);
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into locations defined by {{tt|vlist}}.

@1@ Reads the data from {{lc|stdin}}
@2@ Reads the data from file stream {{tt|stream}}
@3@ Reads the data from null-terminated character string {{tt|buffer}}. Reaching the end of the string is equivalent to reaching the end-of-file condition for {{tt|fscanf}}
@4-6@ Same as {{v|1-3}}, except that {{c|%c}}, {{c|%s}}, and {{c|%[}} conversion specifiers each expect two arguments (the usual pointer and a value of type {{lc|rsize_t}} indicating the size of the receiving array, which may be 1 when reading with a %c into a single char) and except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* any of the arguments of pointer type is a null pointer
:* {{tt|format}}, {{tt|stream}}, or {{tt|buffer}} is a null pointer
:* the number of characters that would be written by %c, %s, or %[, plus the terminating null character, would exceed the second (rsize_t) argument provided for each of those conversion specifiers
:* optionally, any other detectable error, such as unknown conversion specifier
:As all bounds-checked functions, {{tt|vscanf_s}}, {{tt|vfscanf_s}}, and {{tt|vsscanf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;stdio.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated character string to read from}}
{{par | format | pointer to a null-terminated character string specifying how to read the input.
{{cpp/io/c/scanf format}}
}}
{{par | vlist | variable argument list containing the receiving arguments}}
{{par end}}

===Return value===
@1-3@ Number of receiving arguments successfully assigned, or {{lc|EOF}} if read failure occurs before the first receiving argument was assigned.
@4-6@ Same as {{v|1-3}}, except that {{lc|EOF}} is also returned if there is a runtime constraint violation.

===Notes===
All these functions invoke {{lc|va_arg}} at least once, the value of {{tt|arg}} is indeterminate after the return. These functions to not invoke {{lc|va_end}}, and it must be done by the caller.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdbool.h&gt;
#include &lt;stdarg.h&gt;

bool checked_sscanf(int count, const char* buf, const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    int rc = vsscanf(buf, fmt, ap);
    va_end(ap);
    return rc == count;
}

int main(void)
{
    int n, m;

    printf(&quot;Parsing '1 2'...&quot;);
    if(checked_sscanf(2, &quot;1 2&quot;, &quot;%d %d&quot;, &amp;n, &amp;m))
        puts(&quot;success&quot;);
    else
        puts(&quot;failure&quot;);

    printf(&quot;Parsing '1 a'...&quot;);
    if(checked_sscanf(2, &quot;1 a&quot;, &quot;%d %d&quot;, &amp;n, &amp;m))
        puts(&quot;success&quot;);
    else
        puts(&quot;failure&quot;);
}
 | output=
Parsing '1 2'...success
Parsing '1 a'...failure
}}

===References===
{{ref std c11}}
{{ref std | section=7.21.6.9   | title=The vfscanf function    | p=327}}
{{ref std | section=7.21.6.11  | title=The vscanf function     | p=328}}
{{ref std | section=7.21.6.14  | title=The vsscanf function    | p=330}}
{{ref std | section=K.3.5.3.9  | title=The vfscanf_s function  | p=597-598}}
{{ref std | section=K.3.5.3.11 | title=The vscanf_s function   | p=599}}
{{ref std | section=K.3.5.3.14 | title=The vsscanf_s function  | p=602}}
{{ref std c99}}
{{ref std | section=7.19.6.9   | title=The vfscanf function    | p=293}}
{{ref std | section=7.19.6.11  | title=The vscanf function     | p=294}}
{{ref std | section=7.19.6.14  | title=The vsscanf function    | p=295}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fscanf}}
{{dsc inc | c/io/dsc vfprintf}}
{{dsc see cpp | cpp/io/c/vfscanf | vscanf | vfscanf | vsscanf}}
{{dsc end}}

[[ar:c/io/vfscanf]]
[[cs:c/io/vfscanf]]
[[de:c/io/vfscanf]]
[[es:c/io/vfscanf]]
[[fr:c/io/vfscanf]]
[[it:c/io/vfscanf]]
[[ja:c/io/vfscanf]]
[[ko:c/io/vfscanf]]
[[pl:c/io/vfscanf]]
[[pt:c/io/vfscanf]]
[[ru:c/io/vfscanf]]
[[tr:c/io/vfscanf]]
[[zh:c/io/vfscanf]]</text>
      <sha1>o72cl2cca7yhe1bm8x8fsrpt6b8phup</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vfwprintf</title>
    <ns>0</ns>
    <id>6229</id>
    <revision>
      <id>89623</id>
      <parentid>85101</parentid>
      <timestamp>2017-01-22T20:01:43Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="7765">{{c/title | vwprintf | vfwprintf | vswprintf| vwprintf_s | vfwprintf_s | vswprintf_s | vsnwprintf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin | num=1}}
{{dcl | since=c95 | until=c99 |
int vwprintf( const wchar_t *format, va_list vlist );
}}
{{dcl | since=c99 |
int vwprintf( const wchar_t *restrict format, va_list vlist );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | since=c95 | until=c99 |
int vfwprintf( FILE* stream, const wchar_t *format, va_list vlist );
}}
{{dcl | since=c99 |
int vfwprintf( FILE *restrict stream,
               const wchar_t *restrict format, va_list vlist );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | since=c95 | until=c99 |
int vswprintf( wchar_t *buffer, size_t bufsz,
               const wchar_t *format, va_list vlist );
}}
{{dcl | since=c99 |
int vswprintf( wchar_t *restrict buffer, size_t bufsz,
               const wchar_t *restrict format, va_list vlist );
}}
{{dcl rev end}}
{{dcl | num=4 |notes={{mark since c11}}|
int vwprintf_s( const wchar_t *restrict format, va_list vlist);
}}
{{dcl | num=5 |notes={{mark since c11}}|
int vfwprintf_s( FILE * restrict stream,
                 const wchar_t *restrict format, va_list vlist);
}}
{{dcl | num=6 |notes={{mark since c11}}|
int vswprintf_s( wchar_t *restrict buffer, rsize_t bufsz, 
                 const wchar_t * restrict format, va_list vlist);
}}
{{dcl | num=7 |notes={{mark since c11}}|
int vsnwprintf_s( wchar_t *restrict buffer, rsize_t bufsz,
                  const wchar_t *restrict format, va_list vlist);
}}
{{dcl end}}

Loads the data from locations, defined by {{tt|vlist}}, converts them to wide string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to {{lc|stdout}}.
@2@ Writes the results to a file stream {{tt|stream}}.
@3@ Writes the results to a wide string {{tt|buffer}}. At most {{c|bufsz-1}} wide characters are written followed by null wide character. The resulting wide character string will be terminated with a null wide character, unless {{tt|bufsz}} is zero.
@4-7@ Same as {{v|1-3}}, except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* the conversion specifier {{tt|%n}} is present in {{tt|format}}
:* any of the arguments corresponding to {{tt|%s}} is a null pointer
:* {{tt|format}} or {{tt|buffer}} is a null pointer
:* {{tt|bufsz}} is zero or greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}
:* encoding errors occur in any of string and character conversion specifiers
:* (for {{tt|vswprintf_s}} only), the string to be stored in {{tt|buffer}} (including the trailing wide null)) would be exceed {{tt|bufsz}}
@8@ Same as {{v|7}}, except it will truncate the result to fit within the array pointed to by s.
:As all bounds-checked functions, {{tt|vwprintf_s}}, {{tt|vfwprintf_s}}, {{tt|vswprintf_s}}, and {{tt|vsnwprintf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;wchar.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | output wide stream to write to}}
{{par | buffer | pointer to a wide string to write to}}
{{par | bufsz | maximum number of wide characters to write}}
{{par | format | pointer to a null-terminated wide string specifying how to interpret the data.
{{cpp/io/c/printf format|wcs=true}}
}}
{{par | vlist | [[c/language/variadic|variable argument list]] containing the data to print }}
{{par end}}

===Return value===
@1-3@ The number of wide characters written if successful or negative value if an error occurred.
@4@ The number of wide characters written if successful or negative value if an error occurred. If the resulting string gets truncated due to {{tt|bufsz}} limit, function returns the total number of characters (not including the terminating null wide character) which would have been written, if the limit were not imposed. 
@5,6@ number of wide characters transmitted to the output stream or negative value if an output error, a runtime constraints violation error, or an encoding error occurred.
@7@ number of wide characters written to {{tt|buffer}}, not counting the null wide character (which is always written as long as {{tt|buffer}} is not a null pointer and {{tt|bufsz}} is not zero and not greater than {{tt|RSIZE_MAX/sizeof(wchar_t)}}), or zero on runtime constraint violations, and negative value on encoding errors
@8@ number of wide characters not including the terminating null character (which is always written as long as {{tt|buffer}} is not a null pointer and {{tt|bufsz}} is not zero and not greater than {{tt|RSIZE_MAX/sizeof(wchar_t)}}), which would have been written to {{tt|buffer}} if {{tt|bufsz}} was ignored, or a negative value if a runtime constraints violation or an encoding error occurred

===Notes===
All these functions invoke {{lc|va_arg}} at least once, the value of {{tt|arg}} is indeterminate after the return. These functions to not invoke {{lc|va_end}}, and it must be done by the caller.

While narrow strings provide {{lc|vsnprintf}}, which makes it possible to determine the required output buffer size, there is no equivalent for wide strings (until C11's vsnwprintf_s), and in order to determine the buffer size, the program may need to call {{tt|vswprintf}}, check the result value, and reallocate a larger buffer, trying again until successful.

{{tt|vsnwprintf_s}}, unlike {{tt|vswprintf_s}}, will truncate the result to fit within the array pointed to by {{tt|buffer}}, even though truncation is treated as an error by most bounds-checked functions.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;locale.h&gt;

void debug_wlog(const wchar_t *fmt, ...)
{
    struct timespec ts;
    timespec_get(&amp;ts, TIME_UTC);
    char time_buf[100];
    size_t rc = strftime(time_buf, sizeof time_buf, &quot;%D %T&quot;, gmtime(&amp;ts.tv_sec));
    snprintf(time_buf + rc, sizeof time_buf - rc, &quot;.%06ld UTC&quot;, ts.tv_nsec / 1000);

    va_list args;
    va_start(args, fmt);
    wchar_t buf[1000];
    int rc2 = vswprintf(buf, sizeof buf / sizeof *buf, fmt, args);
    va_end(args);

    if(rc2 &gt; 0)
       wprintf(L&quot;%s [debug]: %ls\n&quot;, time_buf, buf);
    else
       wprintf(L&quot;%s [debug]: (string too long)\n&quot;, time_buf);
}

int main(void)
{
    setlocale(LC_ALL, &quot;&quot;);
    debug_wlog(L&quot;Logging, %d, %d, %d&quot;, 1, 2, 3);
}
 |p=true
 | output=
02/20/15 22:12:38.476575 UTC [debug]: Logging, 1, 2, 3
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.2.5   | title=The vfwprintf function   | p=417-418}}
{{ref std | section=7.29.2.7   | title=The vswprintf function   | p=419}}
{{ref std | section=7.29.2.9   | title=The vwprintf function    | p=420}}
{{ref std | section=K.3.9.1.6  | title=The vfwprintf_s function | p=632}}
{{ref std | section=K.3.9.1.9  | title=The vswprintf_s function | p=634-635}}
{{ref std | section=K.3.9.1.11 | title=The vwprintf_s function  | p=636}}
{{ref std c99}}
{{ref std | section=7.24.2.5   | title=The vfwprintf function   | p=363}}
{{ref std | section=7.24.2.7   | title=The vswprintf function   | p=364}}
{{ref std | section=7.24.2.9   | title=The vwprintf function    | p=365}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc vfprintf}}
{{dsc inc | c/io/dsc fwprintf}}
{{dsc see cpp | cpp/io/c/vfwprintf | vwprintf | vfwprintf | vswprintf}}
{{dsc end}}

[[ar:c/io/vfwprintf]]
[[cs:c/io/vfwprintf]]
[[de:c/io/vfwprintf]]
[[es:c/io/vfwprintf]]
[[fr:c/io/vfwprintf]]
[[it:c/io/vfwprintf]]
[[ja:c/io/vfwprintf]]
[[ko:c/io/vfwprintf]]
[[pl:c/io/vfwprintf]]
[[pt:c/io/vfwprintf]]
[[ru:c/io/vfwprintf]]
[[tr:c/io/vfwprintf]]
[[zh:c/io/vfwprintf]]</text>
      <sha1>r8xwragjic3tvr7xi1ssnaqxqhw3wl8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vfwscanf</title>
    <ns>0</ns>
    <id>6227</id>
    <revision>
      <id>89610</id>
      <parentid>77854</parentid>
      <timestamp>2017-01-22T16:30:45Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <comment>restrict</comment>
      <text xml:space="preserve" bytes="4489">{{c/title | vwscanf | vfwscanf | vswscanf | vwscanf_s | vfwscanf_s | vswscanf_s}}
{{c/io/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl | num=1 | since=c99 |
int vwscanf( const wchar_t *restrict format, va_list vlist );
}}
{{dcl | num=2 | since=c99 |
int vfwscanf( FILE *restrict stream,
              const wchar_t *restrict format, va_list vlist );
}}
{{dcl | num=3 | since=c99 |
int vswscanf( const wchar_t *restrict buffer,
              const wchar_t *restrict format, va_list vlist );
}}
{{dcl | num=4 | since=c11 |
int vwscanf_s( const wchar_t *restrict format, va_list vlist );
}}
{{dcl | num=5 | since=c11 |
int vfwscanf_s( FILE *restrict stream,
                const wchar_t *restrict format, va_list vlist );
}}
{{dcl | num=6 | since=c11 |
int vswscanf_s( const wchar_t *restrict buffer,
                const wchar_t *restrict format, va_list vlist );
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into locations defined by {{tt|vlist}}.

@1@ Reads the data from {{lc|stdin}}.
@2@ Reads the data from file stream {{tt|stream}}.
@3@ Reads the data from null-terminated wide string {{tt|buffer}}. Reaching the end of the string is equivalent to reaching the end-of-file condition for {{tt|fwscanf}}
@4-6@ Same as {{v|1-3}}, except that {{c|%c}}, {{c|%s}}, and {{c|%[}} conversion specifiers each expect two arguments (the usual pointer and a value of type {{lc|rsize_t}} indicating the size of the receiving array, which may be 1 when reading with a %lc into a single wide character) and except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* any of the arguments of pointer type is a null pointer
:* {{tt|format}}, {{tt|stream}}, or {{tt|buffer}} is a null pointer
:* the number of characters that would be written by %c, %s, or %[, plus the terminating null character, would exceed the second (rsize_t) argument provided for each of those conversion specifiers
:* optionally, any other detectable error, such as unknown conversion specifier
:As all bounds-checked functions, {{tt|vwscanf_s}}, {{tt|vfwscanf_s}}, and {{tt|vswscanf_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|&lt;wchar.h&gt;}}.

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated wide string to read from}}
{{par | format | pointer to a null-terminated wide string specifying how to read the input. {{cpp/io/c/scanf format|wcs=true}}
}}
{{par | vlist | variable argument list containing the receiving arguments}}
{{par end}}

===Return value===
@1-3@ Number of receiving arguments successfully assigned, or {{lc|EOF}} if read failure occurs before the first receiving argument was assigned.
@4-6@ Same as {{v|1-3}}, except that {{lc|EOF}} is also returned if there is a runtime constraint violation.

===Notes===
All these functions may invoke {{lc|va_arg}}, the value of {{tt|arg}} is indeterminate after the return. These functions to not invoke {{lc|va_end}}, and it must be done by the caller.

===Example===
{{example
 | code=
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.2.6   | title=The vfwscanf function   | p=418}}
{{ref std | section=7.29.2.8   | title=The vswscanf function   | p=419}}
{{ref std | section=7.29.2.10  | title=The vwscanf function    | p=420}}
{{ref std | section=K.3.9.1.7  | title=The vfwscanf_s function | p=632-633}}
{{ref std | section=K.3.9.1.10 | title=The vswscanf_s function | p=635-636}}
{{ref std | section=K.3.9.1.12 | title=The vwscanf_s function  | p=637}}
{{ref std c99}}
{{ref std | section=7.24.2.6   | title=The vfwscanf function   | p=364}}
{{ref std | section=7.24.2.8   | title=The vswscanf function   | p=365}}
{{ref std | section=7.24.2.10  | title=The vwscanf function    | p=366}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc fwscanf}}
{{dsc see cpp | cpp/io/c/vfwscanf | vwscanf | vfwscanf | vswscanf}}
{{dsc end}}

[[ar:c/io/vfwscanf]]
[[cs:c/io/vfwscanf]]
[[de:c/io/vfwscanf]]
[[es:c/io/vfwscanf]]
[[fr:c/io/vfwscanf]]
[[it:c/io/vfwscanf]]
[[ja:c/io/vfwscanf]]
[[ko:c/io/vfwscanf]]
[[pl:c/io/vfwscanf]]
[[pt:c/io/vfwscanf]]
[[ru:c/io/vfwscanf]]
[[tr:c/io/vfwscanf]]
[[zh:c/io/vfwscanf]]</text>
      <sha1>qmba63ikhtl46gumci9005o2ntwdnk5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vprintf</title>
    <ns>0</ns>
    <id>6498</id>
    <redirect title="c/io/vfprintf" />
    <revision>
      <id>25670</id>
      <parentid>25669</parentid>
      <timestamp>2012-04-23T20:56:03Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfprintf]]</comment>
      <text xml:space="preserve" bytes="27">#redirect [[c/io/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vscanf</title>
    <ns>0</ns>
    <id>6489</id>
    <redirect title="c/io/vfscanf" />
    <revision>
      <id>25660</id>
      <parentid>25659</parentid>
      <timestamp>2012-04-23T20:55:04Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfscanf]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[c/io/vfscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vsnprintf</title>
    <ns>0</ns>
    <id>6500</id>
    <redirect title="c/io/vfprintf" />
    <revision>
      <id>25672</id>
      <timestamp>2012-04-23T20:56:13Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfprintf]]</comment>
      <text xml:space="preserve" bytes="27">#redirect [[c/io/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vsprintf</title>
    <ns>0</ns>
    <id>6499</id>
    <redirect title="c/io/vfprintf" />
    <revision>
      <id>25671</id>
      <timestamp>2012-04-23T20:56:08Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfprintf]]</comment>
      <text xml:space="preserve" bytes="27">#redirect [[c/io/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vsscanf</title>
    <ns>0</ns>
    <id>6491</id>
    <redirect title="c/io/vfscanf" />
    <revision>
      <id>25662</id>
      <timestamp>2012-04-23T20:55:21Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfscanf]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[c/io/vfscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vswscanf</title>
    <ns>0</ns>
    <id>6492</id>
    <redirect title="c/io/vfwscanf" />
    <revision>
      <id>25663</id>
      <timestamp>2012-04-23T20:55:26Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfwscanf]]</comment>
      <text xml:space="preserve" bytes="27">#redirect [[c/io/vfwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vwprintf</title>
    <ns>0</ns>
    <id>6501</id>
    <redirect title="c/io/vfwprintf" />
    <revision>
      <id>25673</id>
      <timestamp>2012-04-23T20:56:18Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfwprintf]]</comment>
      <text xml:space="preserve" bytes="28">#redirect [[c/io/vfwprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/vwscanf</title>
    <ns>0</ns>
    <id>6490</id>
    <redirect title="c/io/vfwscanf" />
    <revision>
      <id>25661</id>
      <timestamp>2012-04-23T20:55:14Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/vfwscanf]]</comment>
      <text xml:space="preserve" bytes="27">#redirect [[c/io/vfwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/wprintf</title>
    <ns>0</ns>
    <id>6494</id>
    <redirect title="c/io/fwprintf" />
    <revision>
      <id>25665</id>
      <timestamp>2012-04-23T20:55:38Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fwprintf]]</comment>
      <text xml:space="preserve" bytes="27">#redirect [[c/io/fwprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/io/wscanf</title>
    <ns>0</ns>
    <id>6486</id>
    <redirect title="c/io/fwscanf" />
    <revision>
      <id>25656</id>
      <timestamp>2012-04-23T20:54:32Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/io/fwscanf]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[c/io/fwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword</title>
    <ns>0</ns>
    <id>6172</id>
    <revision>
      <id>78259</id>
      <parentid>76118</parentid>
      <timestamp>2015-05-12T21:26:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/common extensions/conditionally supported, also missing ref</comment>
      <text xml:space="preserve" bytes="4358">{{title|C keywords}}
{{c/keyword/navbar}}

This is a list of reserved keywords in C. Since they are used by the language, these keywords are not available for re-definition. 

{| class=&quot;wikitable&quot;
|-
|
{{rlt|auto}}&lt;br&gt;
{{rlt|break}}&lt;br&gt;
{{rlt|case}}&lt;br&gt;
{{rlt|char}}&lt;br&gt;
{{rlt|const}}&lt;br&gt;
{{rlt|continue}}&lt;br&gt;
{{rlt|default}}&lt;br&gt;
{{rlt|do}}&lt;br&gt;
{{rlt|double}}&lt;br&gt;
{{rlt|else}}&lt;br&gt;
{{rlt|enum}}&lt;br&gt;
{{rlt|extern}}
|
{{rlt|float}}&lt;br&gt;
{{rlt|for}}&lt;br&gt;
{{rlt|goto}}&lt;br&gt;
{{rlt|if}}&lt;br&gt;
{{rlt|inline}} {{mark since c99}}&lt;br&gt;
{{rlt|int}}&lt;br&gt;
{{rlt|long}}&lt;br&gt;
{{rlt|register}}&lt;br&gt;
{{rlt|restrict}} {{mark since c99}}&lt;br&gt;
{{rlt|return}}&lt;br&gt;
{{rlt|short}}
|
{{rlt|signed}}&lt;br&gt;
{{rlt|sizeof}}&lt;br&gt;
{{rlt|static}}&lt;br&gt;
{{rlt|struct}}&lt;br&gt;
{{rlt|switch}}&lt;br&gt;
{{rlt|typedef}}&lt;br&gt;
{{rlt|union}}&lt;br&gt;
{{rlt|unsigned}}&lt;br&gt;
{{rlt|void}}&lt;br&gt;
{{rlt|volatile}}&lt;br&gt;
{{rlt|while}}
|
{{rlt|_Alignas}} {{mark since c11}}&lt;br&gt;
{{rlt|_Alignof}} {{mark since c11}}&lt;br&gt;
{{rlt|_Atomic}} {{mark since c11}}&lt;br&gt;
{{rlt|_Bool}} {{mark since c99}}&lt;br&gt;
{{rlt|_Complex}} {{mark since c99}}&lt;br&gt;
{{rlt|_Generic}} {{mark since c11}}&lt;br&gt;
{{rlt|_Imaginary}} {{mark since c99}}&lt;br&gt;
{{rlt|_Noreturn}} {{mark since c11}}&lt;br&gt;
{{rlt|_Static_assert}} {{mark since c11}}&lt;br&gt;
{{rlt|_Thread_local}} {{mark since c11}}
|}

The most common keywords that begin with an underscore are generally used through their convenience macros:
{| class=&quot;wikitable&quot;
|-
|keyword
|used as
|defined in
|-
|{{rlt|_Alignas}} {{mark since c11}}
|{{ltt|c/types|alignas}}
|{{tt|stdalign.h}}
|-
|{{rlt|_Alignof}} {{mark since c11}}
|{{ltt|c/types|alignof}}
|{{tt|stdalign.h}}
|-
|{{rlt|_Atomic}} {{mark since c11}}
|{{ltt|c/atomic|atomic_bool. atomic_int, ...}}
|{{tt|stdatomic.h}}
|-
|{{rlt|_Bool}} {{mark since c99}}
|{{ltt|c/types/boolean|bool}}
|{{tt|stdbool.h}}
|-
|{{rlt|_Complex}} {{mark since c99}}
|{{ltt|c/numeric/complex/complex|complex}}
|{{tt|complex.h}}
|-
|{{rlt|_Generic}} {{mark since c11}}
|(no macro)
|
|-
|{{rlt|_Imaginary}} {{mark since c99}}
|{{ltt|c/numeric/complex/imaginary|imaginary}}
|{{tt|complex.h}}
|-
|{{rlt|_Noreturn}} {{mark since c11}}
|{{ltt|c/types|noreturn}}
|{{tt|stdnoreturn.h}}
|-
|{{rlt|_Static_assert}} {{mark since c11}}
|{{ltt|c/error/static_assert|static_assert}}
|{{tt|assert.h}}
|-
|{{rlt|_Thread_local}} {{mark since c11}}
|{{ltt|c/thread/thread_local|thread_local}}
|{{tt|threads.h}}
|}

Also, each name that begins with a double underscore __ or an underscore followed by an uppercase letter is reserved: see [[c/language/identifier#Reserved_identifiers|identifier]] for details.

Note that digraphs {{tt|&lt;%}}, {{tt|%&gt;}}, {{tt|&lt;:}}, {{tt|:&gt;}}, {{tt|%:}}, and {{tt|%:%:}} provide an [[c/language/operator_alternative|alternative way to represent standard tokens]].

The following tokens are recognized by the [[c/preprocessor|preprocessor]] when they are used ''within'' the context of a preprocessor directive:
{| class=&quot;wikitable&quot;
|-
|
{{ltt|c/preprocessor/conditional|if}}&lt;br&gt;
{{ltt|c/preprocessor/conditional|elif}}&lt;br&gt;
{{ltt|c/preprocessor/conditional|else}}&lt;br&gt;
{{ltt|c/preprocessor/conditional|endif}}&lt;br&gt;
{{ltt|c/preprocessor/conditional|defined}}
|
{{ltt|c/preprocessor/conditional|ifdef}}&lt;br&gt;
{{ltt|c/preprocessor/conditional|ifndef}}&lt;br&gt;
{{ltt|c/preprocessor/replace|define}}&lt;br&gt;
{{ltt|c/preprocessor/replace|undef}}&lt;br&gt;
|
{{ltt|c/preprocessor/include|include}}&lt;br&gt;
{{ltt|c/preprocessor/line|line}}&lt;br&gt;
{{ltt|c/preprocessor/error|error}}&lt;br&gt;
{{ltt|c/preprocessor/impl|pragma}}&lt;br&gt;
|}

The following tokens are recognized by the preprocessor when they are used ''outside'' the context of a preprocessor directive:
{| class=&quot;wikitable&quot;
|-
|
{{ltt|c/preprocessor/impl|_Pragma}}{{mark since c99}}
|}

The following additional keywords are conditionally-supported:
{| class=&quot;wikitable&quot;
|-
|
{{ltt|c/language/asm|asm}}&lt;br&gt;
{{rlt|fortran}}
|}

===References===
{{ref std c11}}
{{ref std | section=6.4.1 | title=Keywords | p=58-59}}
{{ref std c99}}
{{ref std | section=6.4.1 | title=Keywords | p=50}}
{{ref std c89}}
{{ref std | section=3.1.1 | title=Keywords }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/keyword |C++ keywords}}
{{dsc end}}

[[ar:c/keyword]]
[[cs:c/keyword]]
[[de:c/keyword]]
[[es:c/keyword]]
[[fr:c/keyword]]
[[it:c/keyword]]
[[ja:c/keyword]]
[[ko:c/keyword]]
[[pl:c/keyword]]
[[pt:c/keyword]]
[[ru:c/keyword]]
[[tr:c/keyword]]
[[zh:c/keyword]]</text>
      <sha1>55ev9dwu2k3f7vnbuv1wezr6jwmjeuo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Alignas</title>
    <ns>0</ns>
    <id>13797</id>
    <revision>
      <id>75631</id>
      <parentid>73611</parentid>
      <timestamp>2015-01-24T15:43:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>relink</comment>
      <text xml:space="preserve" bytes="352">{{c/keyword/title|_Alignas {{mark since c11}}}}
{{c/keyword/navbar}}

===Usage===
* {{ltt|c/language/_Alignas | _Alignas}} alignment specifier.

[[de:c/keyword/_Alignas]]
[[es:c/keyword/_Alignas]]
[[fr:c/keyword/_Alignas]]
[[it:c/keyword/_Alignas]]
[[ja:c/keyword/_Alignas]]
[[pt:c/keyword/_Alignas]]
[[ru:c/keyword/_Alignas]]
[[zh:c/keyword/_Alignas]]</text>
      <sha1>2qr24klwzzwhkhqlx9e61hnk1d76skq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Alignof</title>
    <ns>0</ns>
    <id>13800</id>
    <revision>
      <id>73622</id>
      <parentid>73620</parentid>
      <timestamp>2014-11-07T12:12:35Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>since c11</comment>
      <text xml:space="preserve" bytes="343">{{c/keyword/title|_Alignof {{mark since c11}}}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/_Alignof | {{tt|_Alignof}} operator]]

[[de:c/keyword/_Alignof]]
[[es:c/keyword/_Alignof]]
[[fr:c/keyword/_Alignof]]
[[it:c/keyword/_Alignof]]
[[ja:c/keyword/_Alignof]]
[[pt:c/keyword/_Alignof]]
[[ru:c/keyword/_Alignof]]
[[zh:c/keyword/_Alignof]]</text>
      <sha1>an19z1g26tgd04dwabj2mo8psz8s0jd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Atomic</title>
    <ns>0</ns>
    <id>13817</id>
    <revision>
      <id>75209</id>
      <parentid>73790</parentid>
      <timestamp>2015-01-11T18:55:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>relink</comment>
      <text xml:space="preserve" bytes="323">{{c/keyword/title|_Atomic}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/atomic | atomic type specifier and qualifier]]

[[de:c/keyword/_Atomic]]
[[es:c/keyword/_Atomic]]
[[fr:c/keyword/_Atomic]]
[[it:c/keyword/_Atomic]]
[[ja:c/keyword/_Atomic]]
[[pt:c/keyword/_Atomic]]
[[ru:c/keyword/_Atomic]]
[[zh:c/keyword/_Atomic]]</text>
      <sha1>rysntak8zmsddnxk21oehrd78yjajoa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Bool</title>
    <ns>0</ns>
    <id>13177</id>
    <revision>
      <id>75125</id>
      <parentid>73795</parentid>
      <timestamp>2015-01-07T11:36:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>retarget link</comment>
      <text xml:space="preserve" bytes="338">{{c/keyword/title|_Bool}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/arithmetic_types#Boolean type | boolean type]]: as the declaration of the type

[[de:c/keyword/_Bool]]
[[es:c/keyword/_Bool]]
[[fr:c/keyword/_Bool]]
[[it:c/keyword/_Bool]]
[[ja:c/keyword/_Bool]]
[[pt:c/keyword/_Bool]]
[[ru:c/keyword/_Bool]]
[[zh:c/keyword/_Bool]]</text>
      <sha1>bzhaknlif3yjcu9r7jwn43koijgrclo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Complex</title>
    <ns>0</ns>
    <id>13176</id>
    <revision>
      <id>75133</id>
      <parentid>73797</parentid>
      <timestamp>2015-01-07T15:32:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>relink</comment>
      <text xml:space="preserve" bytes="383">{{c/keyword/title|_Complex}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/arithmetic_types#Complex_floating_types | {{tt|_Complex}} type]]: as the declaration of the type

[[de:c/keyword/_Complex]]
[[es:c/keyword/_Complex]]
[[fr:c/keyword/_Complex]]
[[it:c/keyword/_Complex]]
[[ja:c/keyword/_Complex]]
[[pt:c/keyword/_Complex]]
[[ru:c/keyword/_Complex]]
[[zh:c/keyword/_Complex]]</text>
      <sha1>12ydnir24qb62yjfyfurhu4tzo8js3l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Generic</title>
    <ns>0</ns>
    <id>13804</id>
    <revision>
      <id>75183</id>
      <parentid>73672</parentid>
      <timestamp>2015-01-09T16:14:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link</comment>
      <text xml:space="preserve" bytes="321">{{c/keyword/title|_Generic}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/generic | Type-generic expression]]

[[de:c/keyword/_Generic]]
[[es:c/keyword/_Generic]]
[[fr:c/keyword/_Generic]]
[[it:c/keyword/_Generic]]
[[ja:c/keyword/_Generic]]
[[pt:c/keyword/_Generic]]
[[ru:c/keyword/_Generic]]
[[zh:c/keyword/_Generic]]</text>
      <sha1>okn3yvr1sznv2l1e3umrturbpgieuko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Imaginary</title>
    <ns>0</ns>
    <id>13778</id>
    <revision>
      <id>75134</id>
      <parentid>73126</parentid>
      <timestamp>2015-01-07T15:33:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link</comment>
      <text xml:space="preserve" bytes="385">{{c/keyword/title|_Imaginary}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/arithmetic_types#Imaginary_floating_types  | imaginary floating type]] specifier

[[de:c/keyword/_Imaginary]]
[[es:c/keyword/_Imaginary]]
[[fr:c/keyword/_Imaginary]]
[[it:c/keyword/_Imaginary]]
[[ja:c/keyword/_Imaginary]]
[[pt:c/keyword/_Imaginary]]
[[ru:c/keyword/_Imaginary]]
[[zh:c/keyword/_Imaginary]]</text>
      <sha1>ri3h95nbkkobhjzdsw8o5ydw1l0czgx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Noreturn</title>
    <ns>0</ns>
    <id>9599</id>
    <revision>
      <id>73974</id>
      <parentid>47505</parentid>
      <timestamp>2014-11-25T12:24:02Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>new link to split language/function_specifiers page, inserted language links</comment>
      <text xml:space="preserve" bytes="357">{{c/keyword/title|_Noreturn {{mark since c11}}}}
{{c/keyword/navbar}}

===Usage===
* [[c/language/_Noreturn | _Noreturn function specifier]]

[[de:c/keyword/_Noreturn]]
[[es:c/keyword/_Noreturn]]
[[fr:c/keyword/_Noreturn]]
[[it:c/keyword/_Noreturn]]
[[ja:c/keyword/_Noreturn]]
[[pt:c/keyword/_Noreturn]]
[[ru:c/keyword/_Noreturn]]
[[zh:c/keyword/_Noreturn]]</text>
      <sha1>430awsdxx7pkt47lbmmvfm3jpl5i6kt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Static assert</title>
    <ns>0</ns>
    <id>13539</id>
    <revision>
      <id>87786</id>
      <parentid>75145</parentid>
      <timestamp>2016-10-02T21:36:09Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="384">{{c/keyword/title|_Static_assert}}
{{c/keyword/navbar}}

===Usage===

* [[c/language/_Static_assert|static assert declaration]]

[[de:c/keyword/_Static_assert]]
[[es:c/keyword/_Static_assert]]
[[fr:c/keyword/_Static_assert]]
[[it:c/keyword/_Static_assert]]
[[ja:c/keyword/_Static_assert]]
[[pt:c/keyword/_Static_assert]]
[[ru:c/keyword/_Static_assert]]
[[zh:c/keyword/_Static_assert]]</text>
      <sha1>9588q7969zo58tuj8plxalr1o4b4nq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/ Thread local</title>
    <ns>0</ns>
    <id>9549</id>
    <revision>
      <id>75113</id>
      <parentid>44165</parentid>
      <timestamp>2015-01-06T16:48:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="402">{{c/keyword/title|_Thread_local {{mark since c11}}}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/storage duration | thread storage-class specifier]].

[[de:c/keyword/ Thread local]]
[[es:c/keyword/ Thread local]]
[[fr:c/keyword/ Thread local]]
[[it:c/keyword/ Thread local]]
[[ja:c/keyword/ Thread local]]
[[pt:c/keyword/ Thread local]]
[[ru:c/keyword/ Thread local]]
[[zh:c/keyword/ Thread local]]</text>
      <sha1>7vib2wnz4dcwqrihuwjonnryqg7z7lx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/auto</title>
    <ns>0</ns>
    <id>9415</id>
    <revision>
      <id>75110</id>
      <parentid>44160</parentid>
      <timestamp>2015-01-06T16:46:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="330">{{c/keyword/title|auto}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/storage duration | automatic duration storage-class specifier]] with no linkage.

[[de:c/keyword/auto]]
[[es:c/keyword/auto]]
[[fr:c/keyword/auto]]
[[it:c/keyword/auto]]
[[ja:c/keyword/auto]]
[[pt:c/keyword/auto]]
[[ru:c/keyword/auto]]
[[zh:c/keyword/auto]]</text>
      <sha1>153zpk0a2knp0h0a2e0n66t78jzuw62</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/break</title>
    <ns>0</ns>
    <id>9416</id>
    <revision>
      <id>44156</id>
      <parentid>40105</parentid>
      <timestamp>2012-11-03T05:12:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="331">{{c/keyword/title | break}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/break | {{tt|break}} statement]]: as the declaration of the statement

[[de:c/keyword/break]]
[[es:c/keyword/break]]
[[fr:c/keyword/break]]
[[it:c/keyword/break]]
[[ja:c/keyword/break]]
[[pt:c/keyword/break]]
[[ru:c/keyword/break]]
[[zh:c/keyword/break]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/case</title>
    <ns>0</ns>
    <id>9417</id>
    <revision>
      <id>44151</id>
      <parentid>40106</parentid>
      <timestamp>2012-11-03T05:09:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="323">{{c/keyword/title|case}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/switch | {{tt|switch}} statement]]: as the declaration of the case labels

[[de:c/keyword/case]]
[[es:c/keyword/case]]
[[fr:c/keyword/case]]
[[it:c/keyword/case]]
[[ja:c/keyword/case]]
[[pt:c/keyword/case]]
[[ru:c/keyword/case]]
[[zh:c/keyword/case]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/char</title>
    <ns>0</ns>
    <id>9418</id>
    <revision>
      <id>75149</id>
      <parentid>75147</parentid>
      <timestamp>2015-01-07T16:53:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fishing for better wording for keywords like this</comment>
      <text xml:space="preserve" bytes="391">{{c/keyword/title|char}}
{{c/keyword/navbar}}
===Usage===

* ''type specifier'' for the [[c/language/arithmetic_types#Character_types | character types]] ({{tt|char}}, {{tt|signed char}}, and {{tt|unsigned char}}).

[[de:c/keyword/char]]
[[es:c/keyword/char]]
[[fr:c/keyword/char]]
[[it:c/keyword/char]]
[[ja:c/keyword/char]]
[[pt:c/keyword/char]]
[[ru:c/keyword/char]]
[[zh:c/keyword/char]]</text>
      <sha1>snh2w3vb3na6rc5ehyjz4scim0eyt0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/const</title>
    <ns>0</ns>
    <id>9419</id>
    <revision>
      <id>73967</id>
      <parentid>73873</parentid>
      <timestamp>2014-11-25T11:27:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>new link to split language/cv page</comment>
      <text xml:space="preserve" bytes="297">{{c/keyword/title|const}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/const | {{tt|const}} type qualifier]]

[[de:c/keyword/const]]
[[es:c/keyword/const]]
[[fr:c/keyword/const]]
[[it:c/keyword/const]]
[[ja:c/keyword/const]]
[[pt:c/keyword/const]]
[[ru:c/keyword/const]]
[[zh:c/keyword/const]]</text>
      <sha1>hjpqfn4mxry0rjowgqxd277ix3li2v3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/continue</title>
    <ns>0</ns>
    <id>9420</id>
    <revision>
      <id>44134</id>
      <parentid>40109</parentid>
      <timestamp>2012-11-03T05:06:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="362">{{c/keyword/title|continue}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/continue | {{tt|continue}} statement]]: as the declaration of the statement

[[de:c/keyword/continue]]
[[es:c/keyword/continue]]
[[fr:c/keyword/continue]]
[[it:c/keyword/continue]]
[[ja:c/keyword/continue]]
[[pt:c/keyword/continue]]
[[ru:c/keyword/continue]]
[[zh:c/keyword/continue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/default</title>
    <ns>0</ns>
    <id>9421</id>
    <revision>
      <id>75254</id>
      <parentid>75184</parentid>
      <timestamp>2015-01-13T19:58:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>revbox</comment>
      <text xml:space="preserve" bytes="509">{{c/keyword/title|default}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/switch | {{tt|switch}} statement]]: as the declaration of the default case label
{{rev begin}}
{{rev|since=c11|
* [[c/language/generic | type-generic expression]]: as the declaration of the default generic association
}}{{rev end}}

[[de:c/keyword/default]]
[[es:c/keyword/default]]
[[fr:c/keyword/default]]
[[it:c/keyword/default]]
[[ja:c/keyword/default]]
[[pt:c/keyword/default]]
[[ru:c/keyword/default]]
[[zh:c/keyword/default]]</text>
      <sha1>qft56mwr48dcnn0vepdej8wmtxwx35k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/do</title>
    <ns>0</ns>
    <id>9422</id>
    <revision>
      <id>44127</id>
      <parentid>40111</parentid>
      <timestamp>2012-11-03T05:04:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="292">{{c/keyword/title|do}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/do | {{tt|do-while}} loop]]: as the declaration of the loop

[[de:c/keyword/do]]
[[es:c/keyword/do]]
[[fr:c/keyword/do]]
[[it:c/keyword/do]]
[[ja:c/keyword/do]]
[[pt:c/keyword/do]]
[[ru:c/keyword/do]]
[[zh:c/keyword/do]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/double</title>
    <ns>0</ns>
    <id>9423</id>
    <revision>
      <id>44122</id>
      <parentid>40112</parentid>
      <timestamp>2012-11-03T05:03:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="329">{{c/keyword/title|double}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/types | {{tt|double}} type]]: as the declaration of the type

[[de:c/keyword/double]]
[[es:c/keyword/double]]
[[fr:c/keyword/double]]
[[it:c/keyword/double]]
[[ja:c/keyword/double]]
[[pt:c/keyword/double]]
[[ru:c/keyword/double]]
[[zh:c/keyword/double]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/else</title>
    <ns>0</ns>
    <id>9424</id>
    <revision>
      <id>44120</id>
      <parentid>40113</parentid>
      <timestamp>2012-11-03T05:02:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="323">{{c/keyword/title|else}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/if | {{tt|if}} statement]]: as the declaration of the alternative branch

[[de:c/keyword/else]]
[[es:c/keyword/else]]
[[fr:c/keyword/else]]
[[it:c/keyword/else]]
[[ja:c/keyword/else]]
[[pt:c/keyword/else]]
[[ru:c/keyword/else]]
[[zh:c/keyword/else]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/enum</title>
    <ns>0</ns>
    <id>9425</id>
    <revision>
      <id>47506</id>
      <parentid>44115</parentid>
      <timestamp>2013-05-14T13:21:10Z</timestamp>
      <contributor>
        <username>OrangeBuzzard</username>
        <id>1124</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="295">{{c/keyword/title|enum}}
{{c/keyword/navbar}}

===Usage===

* [[c/language/enum | declaration of an enumeration type]]

[[de:c/keyword/enum]]
[[es:c/keyword/enum]]
[[fr:c/keyword/enum]]
[[it:c/keyword/enum]]
[[ja:c/keyword/enum]]
[[pt:c/keyword/enum]]
[[ru:c/keyword/enum]]
[[zh:c/keyword/enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/extern</title>
    <ns>0</ns>
    <id>9544</id>
    <revision>
      <id>75111</id>
      <parentid>44111</parentid>
      <timestamp>2015-01-06T16:46:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="383">{{c/keyword/title|extern}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/storage_duration | static duration storage-class specifier]] with either internal or more usually external linkage.

[[de:c/keyword/extern]]
[[es:c/keyword/extern]]
[[fr:c/keyword/extern]]
[[it:c/keyword/extern]]
[[ja:c/keyword/extern]]
[[pt:c/keyword/extern]]
[[ru:c/keyword/extern]]
[[zh:c/keyword/extern]]</text>
      <sha1>4f6rfgrqyozy0tgzyftidlispl4fcde</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/float</title>
    <ns>0</ns>
    <id>9426</id>
    <revision>
      <id>44106</id>
      <parentid>40115</parentid>
      <timestamp>2012-11-03T05:00:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="319">{{c/keyword/title|float}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/types | {{tt|float}} type]]: as the declaration of the type

[[de:c/keyword/float]]
[[es:c/keyword/float]]
[[fr:c/keyword/float]]
[[it:c/keyword/float]]
[[ja:c/keyword/float]]
[[pt:c/keyword/float]]
[[ru:c/keyword/float]]
[[zh:c/keyword/float]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/for</title>
    <ns>0</ns>
    <id>9427</id>
    <revision>
      <id>47507</id>
      <parentid>44102</parentid>
      <timestamp>2013-05-14T13:21:58Z</timestamp>
      <contributor>
        <username>OrangeBuzzard</username>
        <id>1124</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="297">{{c/keyword/title|for}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/for | {{tt|for}} loop]]: as the declaration of the loop

[[de:c/keyword/for]]
[[es:c/keyword/for]]
[[fr:c/keyword/for]]
[[it:c/keyword/for]]
[[ja:c/keyword/for]]
[[pt:c/keyword/for]]
[[ru:c/keyword/for]]
[[zh:c/keyword/for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/fortran</title>
    <ns>0</ns>
    <id>13989</id>
    <revision>
      <id>76119</id>
      <timestamp>2015-02-10T14:19:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="611">{{c/keyword/title|fortran}}
{{c/keyword/navbar}}
===Usage===
* conditionally-supported type specifier for Fortran language linkage. May be used with [[c/language/function declaration|function declarations]] and other [[c/language/extern|external declarations]] to indicate that the calling convention and name mangling is suitable for linking with translation units written in the Fortran programming language.

[[de:c/keyword/fortran]]
[[es:c/keyword/fortran]]
[[fr:c/keyword/fortran]]
[[it:c/keyword/fortran]]
[[ja:c/keyword/fortran]]
[[pt:c/keyword/fortran]]
[[ru:c/keyword/fortran]]
[[zh:c/keyword/fortran]]</text>
      <sha1>d2rx42nuqyge1mdmcyq6hncaur5s0ty</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/goto</title>
    <ns>0</ns>
    <id>9428</id>
    <revision>
      <id>44098</id>
      <parentid>40117</parentid>
      <timestamp>2012-11-03T04:58:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="318">{{c/keyword/title|goto}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/goto | {{tt|goto}} statement]]: as the declaration of the statement

[[de:c/keyword/goto]]
[[es:c/keyword/goto]]
[[fr:c/keyword/goto]]
[[it:c/keyword/goto]]
[[ja:c/keyword/goto]]
[[pt:c/keyword/goto]]
[[ru:c/keyword/goto]]
[[zh:c/keyword/goto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/if</title>
    <ns>0</ns>
    <id>8589</id>
    <revision>
      <id>44093</id>
      <parentid>33182</parentid>
      <timestamp>2012-11-03T04:57:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="306">{{c/keyword/title|if}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/if | {{tt|if}} statement]]: as the declaration of the {{tt|if}} statement

[[de:c/keyword/if]]
[[es:c/keyword/if]]
[[fr:c/keyword/if]]
[[it:c/keyword/if]]
[[ja:c/keyword/if]]
[[pt:c/keyword/if]]
[[ru:c/keyword/if]]
[[zh:c/keyword/if]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/inline</title>
    <ns>0</ns>
    <id>9598</id>
    <revision>
      <id>73976</id>
      <parentid>73972</parentid>
      <timestamp>2014-11-25T12:38:44Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>period deleted</comment>
      <text xml:space="preserve" bytes="324">{{c/keyword/title|inline {{mark since c99}}}}
{{c/keyword/navbar}}

===Usage===
* [[c/language/inline | inline function specifier]]

[[de:c/keyword/inline]]
[[es:c/keyword/inline]]
[[fr:c/keyword/inline]]
[[it:c/keyword/inline]]
[[ja:c/keyword/inline]]
[[pt:c/keyword/inline]]
[[ru:c/keyword/inline]]
[[zh:c/keyword/inline]]</text>
      <sha1>l2zxv6z7lgzv7w9pl6bcckrnw8cnkk6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/int</title>
    <ns>0</ns>
    <id>9429</id>
    <revision>
      <id>44088</id>
      <parentid>40118</parentid>
      <timestamp>2012-11-03T04:56:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="299">{{c/keyword/title|int}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/types | {{tt|int}} type]]: as the declaration of the type

[[de:c/keyword/int]]
[[es:c/keyword/int]]
[[fr:c/keyword/int]]
[[it:c/keyword/int]]
[[ja:c/keyword/int]]
[[pt:c/keyword/int]]
[[ru:c/keyword/int]]
[[zh:c/keyword/int]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/long</title>
    <ns>0</ns>
    <id>9430</id>
    <revision>
      <id>44084</id>
      <parentid>40119</parentid>
      <timestamp>2012-11-03T04:56:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="286">{{c/keyword/title|long}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/types | {{tt|long}} type modifier]]

[[de:c/keyword/long]]
[[es:c/keyword/long]]
[[fr:c/keyword/long]]
[[it:c/keyword/long]]
[[ja:c/keyword/long]]
[[pt:c/keyword/long]]
[[ru:c/keyword/long]]
[[zh:c/keyword/long]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/register</title>
    <ns>0</ns>
    <id>9431</id>
    <revision>
      <id>75104</id>
      <parentid>44079</parentid>
      <timestamp>2015-01-06T15:46:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="412">{{c/keyword/title|register}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/storage_duration | automatic duration storage-class specifier]] with no linkage. Hints that the variable will be used heavily.

[[de:c/keyword/register]]
[[es:c/keyword/register]]
[[fr:c/keyword/register]]
[[it:c/keyword/register]]
[[ja:c/keyword/register]]
[[pt:c/keyword/register]]
[[ru:c/keyword/register]]
[[zh:c/keyword/register]]</text>
      <sha1>gdzg11w2phdlx4l0ii01ljwu6h1jfnv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/restrict</title>
    <ns>0</ns>
    <id>13181</id>
    <revision>
      <id>73788</id>
      <parentid>70240</parentid>
      <timestamp>2014-11-16T20:31:29Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>usage page (similar to const and volatile usage pages)</comment>
      <text xml:space="preserve" bytes="329">{{c/keyword/title|restrict}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/restrict | {{tt|restrict}} type qualifier]]

[[de:c/keyword/restrict]]
[[es:c/keyword/restrict]]
[[fr:c/keyword/restrict]]
[[it:c/keyword/restrict]]
[[ja:c/keyword/restrict]]
[[pt:c/keyword/restrict]]
[[ru:c/keyword/restrict]]
[[zh:c/keyword/restrict]]</text>
      <sha1>6oy0fsscei17mpufq0f2b2i35vg1p50</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/return</title>
    <ns>0</ns>
    <id>9432</id>
    <revision>
      <id>44075</id>
      <parentid>40121</parentid>
      <timestamp>2012-11-03T04:52:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="340">{{c/keyword/title|return}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/return | {{tt|return}} statement]]: as the declaration of the statement

[[de:c/keyword/return]]
[[es:c/keyword/return]]
[[fr:c/keyword/return]]
[[it:c/keyword/return]]
[[ja:c/keyword/return]]
[[pt:c/keyword/return]]
[[ru:c/keyword/return]]
[[zh:c/keyword/return]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/short</title>
    <ns>0</ns>
    <id>9433</id>
    <revision>
      <id>44069</id>
      <parentid>40122</parentid>
      <timestamp>2012-11-03T04:50:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="296">{{c/keyword/title|short}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/types | {{tt|short}} type modifier]]

[[de:c/keyword/short]]
[[es:c/keyword/short]]
[[fr:c/keyword/short]]
[[it:c/keyword/short]]
[[ja:c/keyword/short]]
[[pt:c/keyword/short]]
[[ru:c/keyword/short]]
[[zh:c/keyword/short]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/signed</title>
    <ns>0</ns>
    <id>9434</id>
    <revision>
      <id>44063</id>
      <parentid>40123</parentid>
      <timestamp>2012-11-03T04:48:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="306">{{c/keyword/title|signed}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/types | {{tt|signed}} type modifier]]

[[de:c/keyword/signed]]
[[es:c/keyword/signed]]
[[fr:c/keyword/signed]]
[[it:c/keyword/signed]]
[[ja:c/keyword/signed]]
[[pt:c/keyword/signed]]
[[ru:c/keyword/signed]]
[[zh:c/keyword/signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/sizeof</title>
    <ns>0</ns>
    <id>9435</id>
    <revision>
      <id>44060</id>
      <parentid>40124</parentid>
      <timestamp>2012-11-03T04:46:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="302">{{c/keyword/title|sizeof}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/sizeof | {{tt|sizeof}} operator]]

[[de:c/keyword/sizeof]]
[[es:c/keyword/sizeof]]
[[fr:c/keyword/sizeof]]
[[it:c/keyword/sizeof]]
[[ja:c/keyword/sizeof]]
[[pt:c/keyword/sizeof]]
[[ru:c/keyword/sizeof]]
[[zh:c/keyword/sizeof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/static</title>
    <ns>0</ns>
    <id>9436</id>
    <revision>
      <id>75253</id>
      <parentid>75112</parentid>
      <timestamp>2015-01-13T19:57:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>relink to array, revbox</comment>
      <text xml:space="preserve" bytes="521">{{c/keyword/title|static}}
{{c/keyword/navbar}}

===Usage===
* [[c/language/storage duration | static duration storage-class specifier]] with internal linkage at file scope and no linkage at block scope.
{{rev begin}}
{{rev|since=c99|
* static [[c/language/array|array indices]] in function parameter declarations.
}}{{rev end}}

[[de:c/keyword/static]]
[[es:c/keyword/static]]
[[fr:c/keyword/static]]
[[it:c/keyword/static]]
[[ja:c/keyword/static]]
[[pt:c/keyword/static]]
[[ru:c/keyword/static]]
[[zh:c/keyword/static]]</text>
      <sha1>l2y63hvewndn6fccfoobn1khuus48bv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/struct</title>
    <ns>0</ns>
    <id>9437</id>
    <revision>
      <id>45809</id>
      <parentid>44047</parentid>
      <timestamp>2013-01-20T17:13:53Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>let's use struct for c</comment>
      <text xml:space="preserve" bytes="311">{{c/keyword/title|struct}}
{{c/keyword/navbar}}

===Usage===

* [[c/language/struct | declaration of a compound type]]

[[de:c/keyword/struct]]
[[es:c/keyword/struct]]
[[fr:c/keyword/struct]]
[[it:c/keyword/struct]]
[[ja:c/keyword/struct]]
[[pt:c/keyword/struct]]
[[ru:c/keyword/struct]]
[[zh:c/keyword/struct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/switch</title>
    <ns>0</ns>
    <id>9438</id>
    <revision>
      <id>44043</id>
      <parentid>40127</parentid>
      <timestamp>2012-11-03T04:41:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="340">{{c/keyword/title|switch}}
{{c/keyword/navbar}}
===Usage===

* [[c/language/switch | {{tt|switch}} statement]]: as the declaration of the statement

[[de:c/keyword/switch]]
[[es:c/keyword/switch]]
[[fr:c/keyword/switch]]
[[it:c/keyword/switch]]
[[ja:c/keyword/switch]]
[[pt:c/keyword/switch]]
[[ru:c/keyword/switch]]
[[zh:c/keyword/switch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/typedef</title>
    <ns>0</ns>
    <id>9439</id>
    <revision>
      <id>44041</id>
      <parentid>40128</parentid>
      <timestamp>2012-11-03T04:39:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="315">{{c/keyword/title|typedef}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/typedef | {{tt|typedef}} declaration]]

[[de:c/keyword/typedef]]
[[es:c/keyword/typedef]]
[[fr:c/keyword/typedef]]
[[it:c/keyword/typedef]]
[[ja:c/keyword/typedef]]
[[pt:c/keyword/typedef]]
[[ru:c/keyword/typedef]]
[[zh:c/keyword/typedef]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/union</title>
    <ns>0</ns>
    <id>9441</id>
    <revision>
      <id>44034</id>
      <parentid>40130</parentid>
      <timestamp>2012-11-03T04:38:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="296">{{c/keyword/title|union}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/union | declaration of a union type]]

[[de:c/keyword/union]]
[[es:c/keyword/union]]
[[fr:c/keyword/union]]
[[it:c/keyword/union]]
[[ja:c/keyword/union]]
[[pt:c/keyword/union]]
[[ru:c/keyword/union]]
[[zh:c/keyword/union]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/unsigned</title>
    <ns>0</ns>
    <id>9442</id>
    <revision>
      <id>44030</id>
      <parentid>40131</parentid>
      <timestamp>2012-11-03T04:37:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="325">{{c/keyword/title|unsigned}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/types | {{tt|unsigned}} type modifier]]

[[de:c/keyword/unsigned]]
[[es:c/keyword/unsigned]]
[[fr:c/keyword/unsigned]]
[[it:c/keyword/unsigned]]
[[ja:c/keyword/unsigned]]
[[pt:c/keyword/unsigned]]
[[ru:c/keyword/unsigned]]
[[zh:c/keyword/unsigned]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/void</title>
    <ns>0</ns>
    <id>9443</id>
    <revision>
      <id>73861</id>
      <parentid>73856</parentid>
      <timestamp>2014-11-19T14:26:23Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted &quot;incomplete&quot;, clarified the second use</comment>
      <text xml:space="preserve" bytes="412">{{c/keyword/title|void}}
{{c/keyword/navbar}}

===Usage===
* [[c/language/types | {{tt|void}} type]]: as the declaration of the incomplete type
* [[c/language/function | {{tt|void}}]]: in a function with no parameter or no return value

[[de:c/keyword/void]]
[[es:c/keyword/void]]
[[fr:c/keyword/void]]
[[it:c/keyword/void]]
[[ja:c/keyword/void]]
[[pt:c/keyword/void]]
[[ru:c/keyword/void]]
[[zh:c/keyword/void]]</text>
      <sha1>3x9xx8if4rgvk4tg8gc1nme162ow1d4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/volatile</title>
    <ns>0</ns>
    <id>9444</id>
    <revision>
      <id>73969</id>
      <parentid>73874</parentid>
      <timestamp>2014-11-25T11:35:27Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>new link to split language/cv page</comment>
      <text xml:space="preserve" bytes="329">{{c/keyword/title|volatile}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/volatile | {{tt|volatile}} type qualifier]]

[[de:c/keyword/volatile]]
[[es:c/keyword/volatile]]
[[fr:c/keyword/volatile]]
[[it:c/keyword/volatile]]
[[ja:c/keyword/volatile]]
[[pt:c/keyword/volatile]]
[[ru:c/keyword/volatile]]
[[zh:c/keyword/volatile]]</text>
      <sha1>o6gydlf6n28pwkhx1hoeql3zs1fm2si</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/keyword/while</title>
    <ns>0</ns>
    <id>9440</id>
    <revision>
      <id>44017</id>
      <parentid>40129</parentid>
      <timestamp>2012-11-03T04:34:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="422">{{c/keyword/title|while}}
{{c/keyword/navbar}}
===Usage===
* [[c/language/while | {{tt|while}} loop]]: as the declaration of the loop
* [[c/language/do | {{tt|do-while}} loop]]: as the declaration of the terminating condition of the loop

[[de:c/keyword/while]]
[[es:c/keyword/while]]
[[fr:c/keyword/while]]
[[it:c/keyword/while]]
[[ja:c/keyword/while]]
[[pt:c/keyword/while]]
[[ru:c/keyword/while]]
[[zh:c/keyword/while]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language</title>
    <ns>0</ns>
    <id>6037</id>
    <revision>
      <id>88847</id>
      <parentid>87409</parentid>
      <timestamp>2016-12-15T18:33:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/behavior/undefined behavior</comment>
      <text xml:space="preserve" bytes="5100">{{title|C language}}
{{c/language/navbar}}
This is a reference of the core C language constructs.

{| cellpadding=&quot;5&quot;
|- valign=&quot;top&quot;
| 

'''[[c/language/basic_concepts | Basic concepts]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/comment | Comments]]&lt;br&gt;
[[c/language/ascii | ASCII chart]]&lt;br&gt;
[[c/language/translation_phases | Translation phases]]&lt;br&gt;
[[c/language/identifier | identifier ]] -
[[c/language/scope | scope]] -
[[c/language/lifetime | lifetime]]&lt;br&gt;
[[c/language/name_space | lookup and name spaces]]&lt;br&gt;
[[c/language/type | type]] - 
[[c/language/arithmetic_types | arithmetic types]]&lt;br&gt;
[[c/language/object | objects and alignment]] &lt;br&gt;
[[c/language/main_function | The {{tt|main}} function]]&lt;br&gt;
[[c/language/memory_model | Memory model and data races]]&lt;br&gt;
&lt;/div&gt;

'''[[c/keyword | Keywords]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
&lt;!--  --&gt;
&lt;/div&gt;

'''[[c/preprocessor | Preprocessor]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/preprocessor/conditional | #if - #ifdef - #ifndef]]&lt;br&gt;
[[c/preprocessor/replace | #define - # - ##]]&lt;!-- include variadics--&gt;&lt;br&gt; 
[[c/preprocessor/include | #include]] -
[[c/preprocessor/impl | #pragma]]&lt;br&gt;
[[c/preprocessor/line | #line]] -
[[c/preprocessor/error | #error]]&lt;br&gt;
&lt;/div&gt;

'''[[c/language/statements | Statements]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/language/if | {{tt|if}}]] -
[[c/language/switch | {{tt|switch}}]]&lt;br&gt;
[[c/language/for | {{tt|for}}]]&lt;br&gt;
[[c/language/while | {{tt|while}}]] - [[c/language/do | {{tt|do}}-{{tt|while}}]]&lt;br&gt;
[[c/language/continue | {{tt|continue}}]] -
[[c/language/break | {{tt|break}}]]&lt;br&gt;
[[c/language/goto | {{tt|goto}}]] -
[[c/language/return | {{tt|return}}]]&lt;br&gt;
&lt;/div&gt;

|

'''[[c/language/expressions | Expressions]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/language/value_category | Value categories]]&lt;br&gt; 
[[c/language/eval_order | Evaluation order and sequencing]]&lt;br&gt; 
[[c/language/expressions#Constants_and_literals | Constants and literals]]&lt;br&gt;
&amp;nbsp;[[c/language/integer_constant| integer constants]]&lt;br&gt;
&amp;nbsp;[[c/language/floating_constant| floating constants]]&lt;br&gt;
&amp;nbsp;[[c/language/character_constant| character constants]]&lt;br&gt;
&amp;nbsp;[[c/language/string_literal | string literals]]&lt;br&gt;
&amp;nbsp;[[c/language/compound_literal | compound literals]]{{mark c99}}&lt;br&gt;
[[c/language/constant_expression | Constant expressions]]&lt;br&gt;
[[c/language/conversion | Implicit conversions]] &lt;br&gt;
[[c/language/expressions#Operators|Operators]]&lt;br&gt;
&amp;nbsp;[[c/language/operator_member_access| member access and indirection]]&lt;br&gt;
&amp;nbsp;[[c/language/operator_logical | logical]] -
[[c/language/operator_comparison | comparison]]&lt;br&gt;
&amp;nbsp;[[c/language/operator_arithmetic | arithmetic]] -
[[c/language/operator_assignment| assignment]]&lt;br&gt;
&amp;nbsp;[[c/language/operator_incdec | increment and decrement]]&lt;br&gt;
&amp;nbsp;[[c/language/operator_other | call, comma, ternary]]&lt;br&gt;
&amp;nbsp;[[c/language/sizeof | {{tt|sizeof}}]] -
[[c/language/_Alignof | {{tt|alignof}}]]{{mark c11}}&lt;br&gt;
&amp;nbsp;[[c/language/cast | cast operators]]&lt;br&gt;
[[c/language/operator_precedence | Operator precedence]]&lt;br&gt;
[[c/language/generic | Generic selection]]{{mark c11}}&lt;br&gt;
&lt;/div&gt;

'''[[c/language/initialization | Initialization]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/language/scalar_initialization | scalar]]&lt;br&gt;
[[c/language/array_initialization | array]]&lt;br&gt;
[[c/language/struct_initialization | structure/union ]]&lt;br&gt;
&lt;/div&gt;

|

'''[[c/language/declarations | Declarations]]''' 
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/language/pointer | Pointers]] -
[[c/language/array | Arrays]]&lt;br&gt;
[[c/language/enum | Enumerations]]&lt;br&gt;
[[c/language/storage_duration | Storage duration and linkage ]]&lt;br&gt;
[[c/language/const|const]] - [[c/language/volatile|volatile]] - [[c/language/restrict|restrict]]{{mark c99}}&lt;br&gt;
[[c/language/struct | struct ]] - [[c/language/union | union]] -
[[c/language/bit_field | bit fields]]&lt;br&gt;
[[c/language/_Alignas | {{tt|alignas}}]]{{mark c11}} -
[[c/language/typedef | {{tt|typedef}}]]&lt;br&gt;
[[c/language/_Static_assert | static_assert]]{{mark c11}}&lt;br&gt;
[[c/language/atomic | Atomic types]]{{mark c11}}&lt;br&gt;
[[c/language/extern | External and tentative definitions]]&lt;br&gt;
&lt;/div&gt;

'''[[c/language/functions | Functions]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/language/function_declaration | Function declaration]]&lt;br&gt;
[[c/language/function_definition | Function definition]]&lt;br&gt;
[[c/language/inline|inline]]{{mark c99}} - [[c/language/_Noreturn|noreturn]]{{mark c11}}&lt;br&gt;
[[c/language/variadic | Variadic arguments]]&lt;br&gt;
&lt;/div&gt;

'''Miscellaneous'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[c/language/history | History of C]]&lt;br&gt;
[[c/language/conformance | Conformance]]&lt;br&gt;
[[c/language/behavior | Undefined behavior]]&lt;br&gt;
[[c/language/asm | Inline assembly]]&lt;br&gt;
[[c/language/as_if | As-if rule]]&lt;br&gt;
[[c/language/signal| signal handling]] &lt;br&gt;
[[c/language/analyzability | Analyzability]]{{mark c11}}&lt;br&gt;
&lt;br&gt;&lt;/div&gt;
&lt;br&gt;
|}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language |C++ language constructs}}
{{dsc end}}

[[de:c/language]]
[[es:c/language]]
[[fr:c/language]]
[[it:c/language]]
[[ja:c/language]]
[[ko:c/language]]
[[pt:c/language]]
[[ru:c/language]]
[[zh:c/language]]</text>
      <sha1>3pf5kfezp2tc9160ang428fxmfborao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/ Alignas</title>
    <ns>0</ns>
    <id>13956</id>
    <revision>
      <id>76213</id>
      <parentid>76212</parentid>
      <timestamp>2015-02-11T21:43:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>the bulk of this is from 6.7.5. also fix link in the optning</comment>
      <text xml:space="preserve" bytes="3921">{{title|alignas}}
{{c/language/declarations/navbar}}

Appears in the {{rlp|declarations|declaration}} syntax as one of the type specifiers to modify the {{rlp|object#Alignment|alignment requirement}} of the object being declared.
===Syntax===
{{sdsc begin}}
{{sdsc|num=1|notes={{mark since c11}}|{{ttb|_Alignas}} {{ttb|(}} {{spar|expression}} {{ttb|)}}}}
{{sdsc|num=2|notes={{mark since c11}}|{{ttb|_Alignas}} {{ttb|(}} {{spar|type}} {{ttb|)}}}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|expression}} | any {{rlp|constant expression|integer constant expression}} whose value is a valid {{rlp|object#Alignment|alignment}} or zero }}
{{par | {{spar|type}} | any {{rlp|type#Type_names|type name}} }}
{{par end}}

This keyword is also available as convenience macro {{ltt|c/types|alignas}}, available in the header {{tt|&lt;stdalign.h&gt;}}.

===Explanation===
The alignas specifier can only be used when declaring objects that aren't {{rlp|bit field}}s, and don't have the {{rlp|storage duration|register}} storage class. It cannot be used in function parameter declarations, and cannot be used in a typedef.

When used in a declaration, the declared object will have its {{rlp|object#Alignment|alignment requirement}} set to 
@1@ the result of the {{spar|expression}}, unless it is zero
@2@ to the alignment requirement of {{spar|type}}, that is, to {{c|alignof(type)}}

except when this would weaken the alignment the type would have had naturally.

If {{spar|expression}} evaluates to zero, this specifier has no effect.

When multiple alignas specifiers appear in the same declaration, the strictest one is used.

Alignas specifier only needs to appear on the {{rlp|declarations#Definitions|definition}} of an object, but if any declaration uses alignas, it must specify the same alignment as the alignas on the definition. The behavior is undefined if different translation units specify different alignments for the same object.

===Notes===
As initially published, C11 does not allow alignas specifiers in structure and union members; this was corrected by DR 444.

In C++, the {{tt|alignas}} specifier may also be applied to the declarations of class/struct/union types and enumerations. This is not supported in C, but the alignment of a struct type can be controlled by using alignas in a member declaration (as of DR 444).

===Keywords===
{{ltt|c/keyword/_Alignas}}

===Example===
{{example
|code=
#include &lt;stdalign.h&gt;
#include &lt;stdio.h&gt;
// every object of type struct sse_t will be aligned to 16-byte boundary
// (note: needs support for DR 444)
struct sse_t
{
  alignas(16) float sse_data[4];
};

// every object of type struct data will be aligned to 128-byte boundary
struct data {
  char x;
  alignas(128) char cacheline[128]; // over-aligned array of char, 
                                    // not array of over-aligned chars
};

int main(void)
{
    printf(&quot;sizeof(data) = %zu (1 byte + 127 bytes padding + 128-byte array)\n&quot;,
           sizeof(struct data));

    printf(&quot;alignment of sse_t is %zu\n&quot;, alignof(struct sse_t));

    alignas(2048) struct data d; // this instance of data is aligned even stricter
}
|output=
sizeof(data) = 256 (1 byte + 127 bytes padding + 128-byte array)
alignment of sse_t is 16
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.5 | title=Alignment specifier}}
{{ref std | section=6.2.8 | title=Alignment of objects | p=48-49}}
{{ref std | section=7.15  | title=Alignment &lt;stdalign.h&gt; | p=268}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/alignas | alignas specifier}}
{{dsc end}}

[[ar:c/language/_Alignas]]
[[cs:c/language/_Alignas]]
[[de:c/language/_Alignas]]
[[es:c/language/_Alignas]]
[[fr:c/language/_Alignas]]
[[it:c/language/_Alignas]]
[[ja:c/language/_Alignas]]
[[ko:c/language/_Alignas]]
[[pl:c/language/_Alignas]]
[[pt:c/language/_Alignas]]
[[ru:c/language/_Alignas]]
[[tr:c/language/_Alignas]]
[[zh:c/language/_Alignas]]</text>
      <sha1>gjari39c087vno3pha1vd1mervbe9ob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/ Alignof</title>
    <ns>0</ns>
    <id>13801</id>
    <revision>
      <id>85288</id>
      <parentid>76175</parentid>
      <timestamp>2016-04-13T14:53:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>not in c++ either</comment>
      <text xml:space="preserve" bytes="2296">{{title|_Alignof operator}}
{{c/language/expressions/navbar}}
Queries the alignment requirement of its operand type.

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|_Alignof(}} {{spar|type-name}} {{ttb|)}} | notes={{mark since c11}}}}
{{sdsc end}}

This operator is typically used through the convenience macro {{ltt|c/types|alignof}}, which is provided in the header {{tt|stdalign.h}}

===Explanation===
Returns the {{rlp|object#Alignment|alignment requirement}} of the type {{rlp|type#Type_names|named}} by {{spar|type-name}}. If {{spar|type-name}} is an array type, the result is the alignment requirement of the array element type. The {{spar|type-name}} cannot be function type or an incomplete type.

The result is an integer constant of type {{lc|size_t}}.

The operand is not evaluated (so external identifiers used in the operand do not have to be defined)

===Notes===
The use of alignof with expressions is allowed by some C compilers as a non-standard extension.

===Keywords===
{{ltt|c/keyword/_Alignof}}

===Example===
{{example | code=
#include &lt;stdio.h&gt;
#include &lt;stddef.h&gt;
#include &lt;stdalign.h&gt;

int main(void)
{
    printf(&quot;Alignment of char = %zu\n&quot;, alignof(char));
    printf(&quot;Alignment of max_align_t = %zu\n&quot;, alignof(max_align_t));
    printf(&quot;alignof(float[10]) = %zu\n&quot;, alignof(float[10]));
    printf(&quot;alignof(struct{char c; int n;}) = %zu\n&quot;,
            alignof(struct {char c; int n;}));    
}
 | p=true
 | output=
Alignment of char = 1
Alignment of max_align_t = 16
alignof(float[10]) = 4
alignof(struct{char c; int n;}) = 4
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.3.4 | title=The sizeof and _Alignof operators | p=90-91}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/types/dsc max_align_t}}
{{dsc | [[c/language/_Alignas | _Alignas specifier ]] | sets alignment requirements of an object {{mark since c11}} }}
{{dsc see cpp | cpp/language/alignof | alignof operator}}
{{dsc end}}

[[ar:c/language/_Alignof]]
[[cs:c/language/_Alignof]]
[[de:c/language/_Alignof]]
[[es:c/language/_Alignof]]
[[fr:c/language/_Alignof]]
[[it:c/language/_Alignof]]
[[ja:c/language/_Alignof]]
[[ko:c/language/_Alignof]]
[[pl:c/language/_Alignof]]
[[pt:c/language/_Alignof]]
[[ru:c/language/_Alignof]]
[[tr:c/language/_Alignof]]
[[zh:c/language/_Alignof]]</text>
      <sha1>9bidszat4p9euf7kwwpudgzg79g9i49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/ Noreturn</title>
    <ns>0</ns>
    <id>13834</id>
    <revision>
      <id>76223</id>
      <parentid>76080</parentid>
      <timestamp>2015-02-12T12:12:49Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References</comment>
      <text xml:space="preserve" bytes="2258">{{title|_Noreturn function specifier}}
{{c/language/functions/navbar}}

Specifies that the function does not return to its point of invocation.

===Syntax===
{{sdsc begin}}
{{sdsc  | {{c|_Noreturn}} {{spar|function_declaration}} | notes={{mark since c11}} }}
{{sdsc end}}

===Explanation===
The {{ttb|_Noreturn}} keyword appears in a function declaration and specifies that the function does not return by executing the return statement or by reaching the end of the function body (it may return by executing {{lc|longjmp}}). If the function declared {{tt|_Noreturn}} returns, the behavior is undefined. A compiler diagnostic is recommended if this can be detected.

The {{tt|_Noreturn}} specifier may appear more than once in the same function declaration, the behavior is the same as if it appeared once.

This specifier is typically used through the convenience macro {{ltt|c/types|noreturn}}, which is provided in the header {{tt|stdnoreturn.h}}

===Keywords===
{{ltt|c/keyword/_Noreturn}}

===Standard library===
The following functions are {{tt|noreturn}} in the standard library:
* {{lc|abort()}}
* {{lc|exit()}}
* {{lc|_Exit()}}
* {{lc|quick_exit()}}
* {{lc|thrd_exit()}}
* {{lc|longjmp()}}

===Example===
{{example
|code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdnoreturn.h&gt;

// causes undefined behavior if i &lt;= 0
// exits if i &gt; 0
noreturn void stop_now(int i) // or _Noreturn void stop_now(int i)
{
    if (i &gt; 0) exit(i);
}

int main(void)
{
  puts(&quot;Preparing to stop...&quot;);
  stop_now(2);
  puts(&quot;This code is never executed.&quot;);
}
 | output=
Preparing to stop...
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.4 | title=Function specifiers | p=125-127}}
{{ref std | section=7.23  | title=_Noreturn &lt;stdnoreturn.h&gt; | p=361}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/attributes | [&lt;nowiki&gt;[&lt;/nowiki&gt;noreturn]]}}
{{dsc end}}

[[ar:c/language/_Noreturn]]
[[cs:c/language/_Noreturn]]
[[de:c/language/_Noreturn]]
[[es:c/language/_Noreturn]]
[[fr:c/language/_Noreturn]]
[[it:c/language/_Noreturn]]
[[ja:c/language/_Noreturn]]
[[ko:c/language/_Noreturn]]
[[pl:c/language/_Noreturn]]
[[pt:c/language/_Noreturn]]
[[ru:c/language/_Noreturn]]
[[tr:c/language/_Noreturn]]
[[zh:c/language/_Noreturn]]</text>
      <sha1>1eubn48tujn37xtgby2vubu3kw38wh8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/ Static assert</title>
    <ns>0</ns>
    <id>13922</id>
    <revision>
      <id>76215</id>
      <parentid>75725</parentid>
      <timestamp>2015-02-11T22:03:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References</comment>
      <text xml:space="preserve" bytes="2107">{{title|static assert declaration}}
{{c/language/declarations/navbar}}

===Syntax===
{{sdsc begin}}
{{sdsc |notes={{mark since c11}}| {{ttb|_Static_assert}} {{ttb|(}} {{spar|expression}} {{ttb|,}}  {{spar|message}} {{ttb|)}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|expression}} | any {{rlp|constant expression|integer constant expression}}}}
{{par | {{spar|message}} | any {{rlp|string literal}} }}
{{par end}}

This keyword is also available as convenience macro {{ltt|c/error/static_assert|static_assert}}, available in the header {{tt|&lt;assert.h&gt;}}.

===Explanation===
The constant expression is evaluated at compile time and compared to zero. If it compares equal to zero, a compile-time error occurs and the compiler must display {{spar|message}} as part of the error message (except that characters not in {{rlp|translation phases|basic source character set}} aren't required to be displayed).

Otherwise, if {{spar|expression}} does not equal zero, nothing happens; no code is emitted.

===Keywords===

{{ltt|c/keyword/_Static_assert}}

===Example===
{{example
|code=
#include &lt;assert.h&gt;
int main(void)
{
    // Test if math works.
    static_assert(2 + 2 == 4, &quot;Whoa dude!&quot;); // or _Static_assert(...

    // This will produce an error at compile time.
    static_assert(sizeof(int) &lt; sizeof(char),
                 &quot;this program requires that int is less than char&quot;);
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.10 | title=Static assertions | p=145}}
{{ref std | section=7.2    | title=Diagnostics &lt;assert.h&gt; | p=186-187}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/static_assert | Static Assertion}}
{{dsc end}}

[[ar:c/language/_Static_assert]]
[[cs:c/language/_Static_assert]]
[[de:c/language/_Static_assert]]
[[es:c/language/_Static_assert]]
[[fr:c/language/_Static_assert]]
[[it:c/language/_Static_assert]]
[[ja:c/language/_Static_assert]]
[[ko:c/language/_Static_assert]]
[[pl:c/language/_Static_assert]]
[[pt:c/language/_Static_assert]]
[[ru:c/language/_Static_assert]]
[[tr:c/language/_Static_assert]]
[[zh:c/language/_Static_assert]]</text>
      <sha1>oimz815wuxae4j60cy31w1de9lv7mct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/alignas</title>
    <ns>0</ns>
    <id>13957</id>
    <redirect title="c/language/ Alignas" />
    <revision>
      <id>75628</id>
      <timestamp>2015-01-24T15:40:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[c/language/_Alignas]]</text>
      <sha1>96sa42rghrnpt2ejo39ayqd2j30zhn0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/alignof</title>
    <ns>0</ns>
    <id>13959</id>
    <redirect title="c/language/ Alignof" />
    <revision>
      <id>75630</id>
      <timestamp>2015-01-24T15:42:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+ (redirects from the names as used to the underscored keywords for ease of linking with rlp)</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[c/language/_Alignof]]</text>
      <sha1>qpngx5spo8qj52zajyx8hjo16mfh44g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/analyzability</title>
    <ns>0</ns>
    <id>13978</id>
    <revision>
      <id>76226</id>
      <parentid>76081</parentid>
      <timestamp>2015-02-12T13:09:31Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References</comment>
      <text xml:space="preserve" bytes="4264">{{title|Analyzability}}
{{c/language/navbar}}

This optional extension to the C language limits the potential results of executing some forms of undefined behavior, which improves the effectiveness of static analysis of such programs. Analyzability is only guaranteed to be enabled if the [[c/preprocessor/replace|predefined macro constant]] {{c|__STDC_ANALYZABLE__}}{{mark c11}} is defined by the compiler.

If the compiler supports analyzability, any language or library construct whose behavior is undefined is further classified between ''critical'' and ''bounded'' undefined behavior, and the behavior of all bounded UB cases is limited as specified below. 

===Critical undefined behavior===
Critical UB is undefined behavior that might perform a memory write or a volatile memory read out of bounds of any object. A program that has critical undefined behavior may be susceptible to security exploits.

Only the following undefined behaviors are critical:
* access to an object outside of its {{rlp|lifetime}} (e.g. through a dangling pointer)
* write to an object whose declarations are not {{rlp|type#Compatible_types|compatible}}
* function call through a function pointer whose type is not {{rlp|type#Compatible_types|compatible}} with the type of the function it points to
* {{rlp|value category|lvalue expression}} is evaluated, but does not designate an object
* attempted modification of a {{rlp|string literal}}
* {{rlp|operator member access|dereferencing}} an invalid (null, indeterminate, etc) or  {{rlp|operator arithmetic|past-the-end}} pointer
* modification of a {{rlp|const|const object}} through a non-const pointer
* call to a standard library function or macro with an invalid argument
* call to a variadic standard library function with unexpected argument type (e.g. call to {{lc|printf}} with an argument of the type that doesn't match its conversion specifier)
* {{lc|longjmp}} where there is no {{lc|setjmp}} up the calling scope, across threads, or from within the scope of a VM type.
* any use of the pointer that was deallocated by {{lc|free}} or {{lc|realloc}}
* any [[c/string/byte|string]] or [[c/string/wide|wide string]] library function accesses an array out of bounds

===Bounded undefined behavior===
Bounded UB is undefined behavior that cannot perform an illegal memory write, although it may trap and may produce or store indeterminate values.

* All undefined behavior not listed as critical is bounded, including
:* multithreaded data races
:* use of a {{rlp|initialization|indeterminate values}} with automatic storage duration
:* {{rlp|object#Strict aliasing|strict aliasing}} violations
:* {{rlp|object#alignment|misaligned}} object access
:* signed integer overflow
:* {{rlp|eval order|unsequenced side-effects}} modify the same scalar or modify and read the same scalar
:* floating-to-integer or pointer-to-integer {{rlp|conversion}} overflow
:* {{rlp|operator arithmetic|bitwise shift}} by a negative or too large bit count
:* {{rlp|operator arithmetic|integer division}} by zero
:* use of a void expression
:* direct {{rlp|operator assignment|assignment}} or {{lc|memcpy}} of inexactly-overlapped objects
:* {{rlp|restrict}} violations
:* etc.. ALL undefined behavior that's not in the critical list.

===Notes===
Bounded undefined behavior disables certain optimizations: compilation with analyzability enabled preserves source-code causality, which {{rlp|as if|may be violated}} by undefined behavior otherwise.

Analyzability extension permits, as a form of implementation-defined behavior, for the [[c/error/set_constraint_handler_s|runtime constraint handler]] to be invoked when a trap occurs.

===References===
{{ref std c11}}
{{ref std | section=6.10.8.3/1 | title=Conditional feature macros | p=177}}
{{ref std | section=Annex L    | title=Analyzability | p=652-653}}
{{ref std end}}

[[ar:c/language/analyzability]]
[[cs:c/language/analyzability]]
[[de:c/language/analyzability]]
[[es:c/language/analyzability]]
[[fr:c/language/analyzability]]
[[it:c/language/analyzability]]
[[ja:c/language/analyzability]]
[[ko:c/language/analyzability]]
[[pl:c/language/analyzability]]
[[pt:c/language/analyzability]]
[[ru:c/language/analyzability]]
[[tr:c/language/analyzability]]
[[zh:c/language/analyzability]]</text>
      <sha1>ew9tiuz7v2780k0kumefymy661513rr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/arithmetic types</title>
    <ns>0</ns>
    <id>13882</id>
    <revision>
      <id>86905</id>
      <parentid>85931</parentid>
      <timestamp>2016-07-14T18:43:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/complex/imaginary in the section about imaginary types (old c&amp;p)</comment>
      <text xml:space="preserve" bytes="19989">{{title|Arithmetic types}}
{{c/language/basics/navbar}}
&lt;small&gt;(See also {{rlp|type}} for type system overview and [[c/types | the list of type-related utilities]] that are provided by the C library)&lt;/small&gt;

{{rev begin}}
{{rev|since=c99|
===Boolean type===

:* {{c|_Bool}} (also accessible as the macro [[c/types/boolean|bool]]) - type, capable of holding one of the two values: 1 and 0 (also accessible as the macros [[c/types/boolean|true]] and [[c/types/boolean|false]]).

Note that {{rlp|conversion}} to _Bool does not work the same as conversion to other integer types: {{c|(bool)0.5}} evaluates to {{c|1}}, whereas {{c|(int)0.5}} evaluates to {{c|0}}.
}}
{{rev end}}

===Character types===

:*{{c|signed char}} - type for signed character representation.
:*{{c|unsigned char}} - type for unsigned character representation. Also used to inspect {{rlp|object|object representations}} (raw memory).
:*{{c|char}} - type for character representation. Equivalent to either {{c|signed char}} or {{c|unsigned char}} (which one is implementation-defined and may be controlled by a compiler commandline switch), but {{c|char}} is a distinct type, different from both {{c|signed char}} both {{c|unsigned char}}

Note that the standard library also defines {{rlp|typedef}} names [[c/string/wide|wchar_t]] {{rev inl|since=c11|, [[c/string/multibyte|char16_t]], and [[c/string/multibyte|char32_t]]}} to represent wide characters.

===Integer types===
:*{{c|short int}} (also accessible as {{c|short}}, may use the keyword {{c|signed}})
:*{{c|unsigned short int}} (also accessible as {{c|unsigned short}})
:*{{c|int}} (also accessible as {{c|signed int}})
:: This is the most optimal integer type for the platform, and is guaranteed to be at least 16 bits. Most current systems use 32 bits (see Data models below).
:*{{c|unsigned int}} (also accessible as {{c|unsigned}}), the unsigned counterpart of {{c|int}},  implementing modulo arithmetic. Suitable for bit manipulations.
:*{{c|long int}} (also accessible as {{c|long}})
:*{{c|unsigned long int}} (also accessible as {{c|unsigned long}})
{{rev begin}}
{{rev|since=c99|
:*{{c|long long int}} (also accessible as {{c|long long}})
:*{{c|unsigned long long int}} (also accessible as {{c|unsigned long long}})
}}
{{rev end}}

Note: as with all type specifiers, any order is permitted: {{c|unsigned long long int}} and {{c|long int unsigned long}} name the same type.

The following table summarizes all available integer types and their properties:

{| class=&quot;wikitable&quot; style=&quot;text-align:center;&quot;
|-
! rowspan=&quot;2&quot; | Type specifier 
! rowspan=&quot;2&quot; | Equivalent type 
! colspan=&quot;5&quot; | Width in bits by data model
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
! C standard 
! LP32
! ILP32
! LLP64
! LP64
|-
| {{left|{{c|short}}}}
| rowspan=&quot;4&quot; | {{c|short int}}
| rowspan=&quot;6&quot; | at least&lt;br&gt; '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
|-
| {{left|{{c|short int}}}}
|-
| {{left|{{c|signed short}}}}
|-
| {{left|{{c|signed short int}}}}
|-
| {{left|{{c|unsigned short}}}}
| rowspan=&quot;2&quot; | {{c|unsigned short int}}
|-
| {{left|{{c|unsigned short int}}}}
|-
| {{left|{{c|int}}}}
| rowspan=&quot;3&quot; | {{c|int}}  
| rowspan=&quot;5&quot; | at least&lt;br&gt; '''16'''  
| rowspan=&quot;5&quot; | '''16'''  
| rowspan=&quot;5&quot; | '''32'''  
| rowspan=&quot;5&quot; | '''32'''  
| rowspan=&quot;5&quot; | '''32''' 
|-
| {{left|{{c|signed}}}}
|-
| {{left|{{c|signed int}}}}
|-
| {{left|{{c|unsigned}}}}
| rowspan=&quot;2&quot; | {{c|unsigned int}}
|-
| {{left|{{c|unsigned int}}}}
|-
| {{left|{{c|long}}}}
| rowspan=&quot;4&quot; | {{c|long int}}  
| rowspan=&quot;6&quot; | at least&lt;br&gt; '''32'''  
| rowspan=&quot;6&quot; | '''32'''  
| rowspan=&quot;6&quot; | '''32'''  
| rowspan=&quot;6&quot; | '''32'''  
| rowspan=&quot;6&quot; | '''64'''  
|-
| {{left|{{c|long int}}}}
|-
| {{left|{{c|signed long}}}}
|-
| {{left|{{c|signed long int}}}}
|-
| {{left|{{c|unsigned long}}}}
| rowspan=&quot;2&quot; | {{c|unsigned long int}}
|-
| {{left|{{c|unsigned long int}}}}
|-
| {{left|{{c|long long}}}}
| rowspan=&quot;4&quot; | {{c|long long int}} &lt;br&gt; {{mark c99}}
| rowspan=&quot;6&quot; | at least&lt;br&gt; '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
|-
| {{left|{{c|long long int}}}}
|-
| {{left|{{c|signed long long}}}}
|-
| {{left|{{c|signed long long int}}}}
|-
| {{left|{{c|unsigned long long}}}}
| rowspan=&quot;2&quot; | {{c|unsigned long long int}} &lt;br&gt; {{mark c99}}
|-
| {{left|{{c|unsigned long long int}}}}
|}

Besides the minimal bit counts, the C Standard guarantees that

:{{c|1=1 == sizeof(char) &lt;= sizeof(short) &lt;= sizeof(int) &lt;= sizeof(long) &lt;= sizeof(long long)}}.

Note: this allows the extreme case in which [[enwiki:Byte|bytes]] are sized 64 bits, all types (including {{c|char}}) are 64 bits wide, and {{c|sizeof}} returns 1 for every type.

Note: integer arithmetic is defined differently for the signed and unsigned integer types. See {{rlp|operator_arithmetic|arithmetic operators}}, in particular  {{rlp|operator_arithmetic#Overflows|integer overflows}}.

====Data models====

The choices made by each implementation about the sizes of the fundamental types are collectively known as ''data model''. Four data models found wide acceptance:

32 bit systems:

:*'''LP32''' or '''2/4/4''' (int is 16-bit, long and pointer are 32-bit)
::* Win16 API
:*'''ILP32''' or '''4/4/4''' (int, long, and pointer are 32-bit);
::* Win32 API
::* Unix and Unix-like systems (Linux, Mac OS X)

64 bit systems:

:* '''LLP64''' or '''4/4/8''' (int and long are 32-bit, pointer is 64-bit)
::* Win64 API
:* '''LP64''' or '''4/8/8''' (int is 32-bit, long and pointer are 64-bit)
::* Unix and Unix-like systems (Linux, Mac OS X)

Other models are very rare. For example, '''ILP64''' ('''8/8/8''': int, long, and pointer are 64-bit) only appeared in some early 64-bit Unix systems (e.g. Unicos on Cray).

Note that exact-width integer types are available in [[c/types/integer|&lt;stdint.h&gt;]] since C99

===Real floating types===
C has three types for representing real floating-point values:

:*{{c|float}} - single precision floating point type. Matches IEEE-754 32 bit floating point type if supported.
:*{{c|double}} - double precision floating point type. Matches IEEE-754 64 bit floating point type if supported
:*{{c|long double}} - extended precision floating point type. Matches IEEE-754 extended floating-point type if supported, otherwise matches some non-standard extended floating-point type as long as its precision is better than {{c|double}} and range is at least as good as {{c|double}}, otherwise matches the type {{c|double}}. Some x86 and x86_64 implementations use the 80-bit x87 floating point type.

Floating-point types may support special values:
* ''infinity'' (positive and negative), see {{ltt|c/numeric/math/INFINITY}}
* the ''negative zero'', {{c|-0.0}}. It compares equal to the positive zero, but is meaningful in some arithmetic operations, e.g. {{c|1.0/0.0 {{==}} INFINITY}}, but {{c|1.0/-0.0 {{==}} -INFINITY}})
* ''not-a-number'' (NaN), which does not compare equal with anything (including itself). Multiple bit patterns represent NaNs, see {{lc|nan}}, {{ltt|c/numeric/math/NAN}}. Note that C takes no special notice of signalling NaNs (specified by IEEE-754), and treates all NaNs as quiet.

Real floating-point numbers may be used with {{rlp|operator arithmetic|arithmetic operators}} + - / * and various mathematical functions from [[c/numeric/math|math.h]]. Both built-in operators and library functions may raise floating-point exceptions and set {{lc|errno}} as described in {{ltt|c/numeric/math/math_errhandling}}

Floating-point expressions may have greater range and precision than indicated by their types, see {{lc|FLT_EVAL_METHOD}}. {{rlp|operator assignment|Assignment}}, {{rlp|return}}, and {{rlp|cast}} force the range and precision to the one associated with the declared type. 

Floating-point expressions may also be ''contracted'', that is, calculated as if all intermediate values have infinite range and precision, see [[c/preprocessor/impl#Standard_pragmas|#pragma STDC FP_CONTRACT]].

Some operations on floating-point numbers are affected by and modify the state of [[c/numeric/fenv|the floating-point environment]] (most notably, the rounding direction)

{{rlp|conversion|Implicit conversions}} are defined between real floating types and integer, complex, and imaginary types.

See [[c/types/limits#Limits_of_floating_point_types|Limits of floating point types]] and [[c/numeric/math|the math.h library]] for additional details, limits, and properties of the floating-point types.

{{rev begin}}
{{rev|since=c99|
===Complex floating types===
Complex floating types model the mathematical [[enwiki:Complex number|complex numbers]], that is the numbers that can be written as a sum of a real number and a real number multiplied by the imaginary unit: {{math|a + bi}}

The three complex types are
:* {{c|float _Complex}} (also available as {{c|float complex}} if [[c/numeric/complex|&lt;complex.h&gt;]] is included)
:* {{c|double _Complex}} (also available as {{c|double complex}} if [[c/numeric/complex|&lt;complex.h&gt;]] is included)
:* {{c|long double _Complex}} (also available as {{c|long double complex}} if [[c/numeric/complex|&lt;complex.h&gt;]] is included)

Note: as with all type specifiers, any order is permitted: {{c|long double complex}}, {{c|complex long double}}, and even {{c|double complex long}} name the same type.

{{example|code=
#include &lt;complex.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{
    double complex z = 1 + 2*I;
    z = 1/z;
    printf(&quot;1/(1.0+2.0i) = %.1f%+.1fi\n&quot;, creal(z), cimag(z));
}
|output=
1/(1.0+2.0i) = 0.2-0.4i
}}

{{rev begin}}
{{rev|since=c11|
If the macro constant {{tt|__STDC_NO_COMPLEX__}}{{mark c11}} is defined by the implementation, the complex types (as well as the library header {{tt|&lt;complex.h&gt;}}) are not provided.}}
{{rev end}}

Each complex type has the same {{rlp|object|object representation}} and {{rlp|object|alignment requirements}} as an {{rlp|array}} of two elements of the corresponding real type ({{c|float}} for {{c|float complex}}, {{c|double}} for {{c|double complex}}, {{c|long double}} for {{c|long double complex}}). The first element of the array holds the real part, and the second element of the array holds the imaginary component.
{{source|1=
float a[4] = {1, 2, 3, 4};
float complex z1, z2;
memcpy(&amp;z1, a, sizeof z1); // z1 becomes 1.0 + 2.0i
memcpy(&amp;z2, a+2, sizeof z2); // z2 becomes 3.0 + 4.0i
}}

Complex numbers may be used with {{rlp|operator arithmetic|arithmetic operators}} + - * and /, possibly mixed with imaginary and real numbers. There are many mathematical functions defined for complex numbers in [[c/numeric/complex|complex.h]]. Both built-in operators and library functions may raise floating-point exceptions and set {{lc|errno}} as described in {{ltt|c/numeric/math/math_errhandling}}

Increment and decrement are not defined for complex types

Relational operators are not defined for complex types (there is no notion of &quot;less than&quot;)

{{todo|review other ops, link library}}

{{rlp|conversion|Implicit conversions}} are defined between complex types and other arithmetic types.

In order to support the one-infinity model of complex number arithmetic, C regards any complex value with at least one infinite part as an infinity even if its other part is a NaN, guarantees that all operators and functions honor basic properties of inifinities and provides {{lc|cproj}} to map all infinities to the canonical one (see {{rlp|operator arithmetic|arithmetic operators}} for the exact rules)
{{example|
|code=
#include&lt;stdio.h&gt;
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;
#include &lt;math.h&gt;
int main(void)
{
   double complex z = (1 + 0*I) * (INFINITY + I*INFINITY);
// textbook formula would give
// (1+i0)(∞+i∞) ⇒ (1×∞ – 0×∞) + i(0×∞+1×∞) ⇒ NaN + I*NaN
// but C gives a complex infinity
   printf(&quot;%f + i*%f\n&quot;, creal(z), cimag(z));

// textbook formula would give
// cexp(∞+iNaN) ⇒ exp(∞)×(cis(NaN)) ⇒ NaN + I*NaN
// but C gives  ±∞+i*nan
   double complex y = cexp(INFINITY + I*NAN);
   printf(&quot;%f + i*%f\n&quot;, creal(y), cimag(y));

}
|p=true 
|output=
inf + i*inf &lt;!-- actual result on Solaris, but GNU -nan + i*inf is also valid --&gt;
inf + i*nan &lt;!-- the sign of the real inf in cexp case is unspecified --&gt;
}}

C also treats multiple infinities so as to preserve directional information where possible, despite the inherent limitations of the Cartesian representation:

multiplying the imaginary unit by real infinity gives the correctly-signed imaginary infinity: i × ∞ {{=}} i∞. Also, i × (∞ – i∞) {{=}} ∞ + i∞ indicates the reasonable quadrant
{{todo|wording}}

===Imaginary floating types===
Imaginary floating types model the mathematical [[enwiki:Imaginary number|imaginary numbers]], that is numbers that can be written as a real number multiplied by the imaginary unit: {{math|bi}}
The three imaginary types are
:* {{c|float _Imaginary}} (also available as {{c|float imaginary}} if [[c/numeric/complex|&lt;complex.h&gt;]] is included)
:* {{c|double _Imaginary}} (also available as {{c|double imaginary}} if [[c/numeric/complex|&lt;complex.h&gt;]] is included)
:* {{c|long double _Imaginary}} (also available as {{c|long double imaginary}} if [[c/numeric/complex|&lt;complex.h&gt;]] is included)

Note: as with all type specifiers, any order is permitted: {{c|long double imaginary}}, {{c|imaginary long double}}, and even {{c|double imaginary long}} name the same type.

{{example|code=
#include &lt;complex.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{
    double imaginary z = 3*I;
    z = 1/z;
    printf(&quot;1/(3.0i) = %+.1fi\n&quot;, cimag(z));
}
|output=
1/(3.0i) = -0.3i
}}

{{rev begin}}
{{rev|since=c99|until=c11|
A compiler that defines {{c|__STDC_IEC_559_COMPLEX__}} is recommended, but not required to support imaginary numbers. POSIX recommends checking if the macro {{lc|_Imaginary_I}} is defined to identify imaginary number support.
}}
{{rev|since=c11|
Imaginary numbers are supported if {{c|__STDC_IEC_559_COMPLEX__}} is defined.
}}
{{rev end}}

Each of the three imaginary types has the same {{rlp|object|object representation}} and {{rlp|object|alignment requirement}} as its ''corresponding real type'' ({{c|float}} for {{c|float imaginary}}, {{c|double}} for {{c|double imaginary}}, {{c|long double}} for {{c|long double imaginary}}). 

Note: despite that, imaginary types are distinct and {{rlp|type#Compatible_types|not compatible}} with their corresponding real types, which prohibits aliasing.

Imaginary numbers may be used with {{rlp|operator arithmetic|arithmetic operators}} + - * and /, possibly mixed with complex and real numbers. There are many mathematical functions defined for imaginary numbers in [[c/numeric/complex|complex.h]]. Both built-in operators and library functions may raise floating-point exceptions and set {{lc|errno}} as described in {{ltt|c/numeric/math/math_errhandling}}

Increment and decrement are not defined for imaginary types

{{todo|review other ops, link library}}

{{rlp|conversion|Implicit conversions}} are defined between imaginary types and other arithmetic types.

The imaginary numbers make it possible to express all complex numbers using the natural notation {{c|x + I*y}} (where {{lc|I}} is defined as {{lc|_Imaginary_I}}). Without imaginary types, certain special complex values cannot be created naturally. For example, if {{lc|I}} is defined as {{lc|_Complex_I}}, then writing {{c|0.0 + I*INFINITY}} gives NaN as the real part, and {{c|CMPLX(0.0, INFINITY)}} must be used instead. Same goes for the numbers with the negative zero imaginary component, which are meaningful when working with the library functions with branch cuts, such as {{lc|csqrt}}: {{c|1.0 - 0.0*I}} results in the positive zero imaginary component if {{lc|I}} is defined as {{lc|_Complex_I}} and the negative zero imaginary part requires the use of {{lc|CMPLX}} or {{lc|conj}}.

Imaginary types also simplify implementations; multiplication of an imaginary by a complex can be implemented straightforwardly with two multiplications if the imaginary types are supported, instead of four multiplications and two additions.
}}
{{rev end}}

===Keywords===
{{ltt|c/keyword/char}}, 
{{ltt|c/keyword/int}},
{{ltt|c/keyword/short}},
{{ltt|c/keyword/long}},
{{ltt|c/keyword/signed}},
{{ltt|c/keyword/unsigned}},
{{ltt|c/keyword/float}},
{{ltt|c/keyword/double}}.
{{ltt|c/keyword/_Bool}},
{{ltt|c/keyword/_Complex}},
{{ltt|c/keyword/_Imaginary}}

===Range of values===

The following table provides a reference for the limits of common numeric representations. As the C Standard allows any signed integer representation, the table gives both the minimum guaranteed requirements (which correspond to the limits of [[enwiki:One's complement|one's complement]] or [[enwiki:Signed_number_representations#Sign-and-magnitude_method|sign-and-magnitude]]) and the limits of the most commonly used implementation, [[enwiki:Two's complement|two's complement]]. All popular data models (including all of ILP32, LP32, LP64, LLP64) use two's complement representation, though.

{| class=&quot;wikitable&quot; style=&quot;text-align:center;&quot;
|-
! rowspan=2 | Type
! rowspan=2 | Size in bits
! rowspan=2 | Format
! colspan=2 | Value range
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
! Approximate
! Exact
|-
! rowspan=3 | character
| rowspan=3 | 8 
| signed {{small|(one's complement)}}
| colspan=2 | '''-127''' to '''127'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
| colspan=2 | '''-128''' to '''127'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| colspan=2 | '''0''' to '''255'''
|-
|-
! rowspan=9 | integral
| rowspan=3 | 16
| signed {{small|(one's complement)}}
| rowspan=2 | '''± 3.27 · 10&lt;sup&gt;4&lt;/sup&gt;'''
| '''-32767''' to '''32767'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
&lt;!-- --&gt;
| '''-32768''' to '''32767'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| '''0''' to '''6.55 · 10&lt;sup&gt;4&lt;/sup&gt;'''  
| '''0''' to '''65535'''
|-
&lt;!-- --&gt;
| rowspan=3 | 32 
| signed {{small|(one's complement)}}
| rowspan=2 | '''± 2.14 · 10&lt;sup&gt;9&lt;/sup&gt;'''
| '''-2,147,483,647''' to '''2,147,483,647'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
&lt;!-- --&gt;
| '''-2,147,483,648''' to '''2,147,483,647'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| '''0''' to '''4.29 · 10&lt;sup&gt;9&lt;/sup&gt;'''   
| '''0''' to '''4,294,967,295'''
|-
&lt;!-- --&gt;
| rowspan=3 | 64 
| signed {{small|(one's complement)}}
| rowspan=2 | '''± 9.22 · 10&lt;sup&gt;18&lt;/sup&gt;'''
| '''-9,223,372,036,854,775,807''' to '''9,223,372,036,854,775,807'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
&lt;!-- --&gt;
| '''-9,223,372,036,854,775,808''' to '''9,223,372,036,854,775,807'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| '''0''' to '''1.84 · 10&lt;sup&gt;19&lt;/sup&gt;'''
| '''0''' to '''18,446,744,073,709,551,615'''
|-
! rowspan=&quot;2&quot; | floating&lt;br&gt; point
| 32 
| [[enwiki:IEEE-754|IEEE-754]]
| '''± 3.4 · 10&lt;sup&gt;± 38&lt;/sup&gt;'''&lt;br&gt; {{small|(~7 digits)}}
|&lt;div&gt;
*min subnormal: '''± 1.401,298,4 · 10&lt;sup&gt;-47&lt;/sup&gt;'''
*min normal: '''± 1.175,494,3 · 10&lt;sup&gt;-38&lt;/sup&gt;'''
*max: '''± 3.402,823,4 · 10&lt;sup&gt;38&lt;/sup&gt;
&lt;/div&gt;
|-
&lt;!-- --&gt;
| 64 
| IEEE-754
| '''± 1.7 · 10&lt;sup&gt;± 308&lt;/sup&gt;'''&lt;br&gt; {{small|(~15 digits)}}
| &lt;div&gt;
*min subnormal: '''± 4.940,656,458,412 · 10&lt;sup&gt;-324&lt;/sup&gt;'''
*min normal: '''± 2.225,073,858,507,201,4 · 10&lt;sup&gt;-308&lt;/sup&gt;'''
*max: '''± 1.797,693,134,862,315,7 · 10&lt;sup&gt;308&lt;/sup&gt;
&lt;/div&gt;
|}

Note: actual (as opposed to guaranteed minimal) ranges are available in the library headers [[c/types/limits|&lt;limits.h&gt; and &lt;float.h&gt;]]

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/types | Fundamental types}}
{{dsc end}}

[[ar:c/language/arithmetic_types]]
[[cs:c/language/arithmetic_types]]
[[de:c/language/arithmetic_types]]
[[es:c/language/arithmetic_types]]
[[fr:c/language/arithmetic_types]]
[[it:c/language/arithmetic_types]]
[[ja:c/language/arithmetic_types]]
[[ko:c/language/arithmetic_types]]
[[pl:c/language/arithmetic_types]]
[[pt:c/language/arithmetic_types]]
[[ru:c/language/arithmetic_types]]
[[tr:c/language/arithmetic_types]]
[[zh:c/language/arithmetic_types]]</text>
      <sha1>979b72b37zgf3bzmimwjuth7s2i6x3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/array</title>
    <ns>0</ns>
    <id>13930</id>
    <revision>
      <id>88180</id>
      <parentid>87009</parentid>
      <timestamp>2016-11-13T19:41:40Z</timestamp>
      <contributor>
        <ip>37.186.168.220</ip>
      </contributor>
      <comment>Typos</comment>
      <text xml:space="preserve" bytes="12567">{{title|Array declaration}}
{{c/language/declarations/navbar}}

Array is a type consisting of a contiguously allocated nonempty sequence of objects with a
particular ''element type''. The number of those objects (the array size) never changes during the array lifetime.

===Syntax===
In the {{rlp|declarations|declaration grammar}} of an array declaration, the ''type-specifier'' sequence designates the ''element type'' (which must be a complete object type), and the ''declarator'' has the form:

{{sdsc begin}}
{{sdsc |num=1| {{ttb|[}} {{ttb|static}}{{mark optional}} {{spar|qualifiers}}{{mark optional}} {{spar|expression}}{{mark optional}} {{ttb|]}} }}
{{sdsc |num=2| {{ttb|[}} {{spar|qualifiers}}{{mark optional}} {{ttb|static}}{{mark optional}}  {{spar|expression}}{{mark optional}} {{ttb|]}} }}
{{sdsc |num=3| {{ttb|[}} {{spar|qualifiers}}{{mark optional}} {{ttb|*}} {{ttb|]}} }}
{{sdsc end}}
@1,2@ General array declarator syntax
@3@ Declarator for VLA of unspecified size (can appear in function prototype scope only)
where

{{par begin}}
{{par | {{spar|expression}} | any expression other than {{rlp|operator_other#Comma_operator|comma operator}}, designates the number of elements in the array}}
{{par | {{spar|qualifiers}} | any combination of {{rlp|const}}, {{rlp|restrict}}, or {{rlp|volatile}} qualifiers, only allowed in function parameter lists; this qualifies the pointer type to which this array parameter is transformed}}
{{par end}}

{{source|1=
float fa[11], *afp[17]; // fa is an array of 11 floats
                        // afp is an array of 17 pointers to floats
}}

===Explanation===
There are several variations of array types: arrays of known constant size, variable-length arrays, and arrays of unknown size.

====Arrays of constant known size====
If {{spar|expression}} in an array declarator is an {{rlp|constant_expression#Integer_constant_expression|integer constant expression}} with a value greater than zero{{rev inl|since=c99| and the element type is a type with a known constant size (that is, elements are not VLA)}}, then the declarator declares an array of constant known size:
{{source|1=
int n[10]; // integer constants are constant expressions
char o[sizeof(double)]; // sizeof is a constant expression
enum { MAX_SZ=100 };
int n[MAX_SZ]; // enum constants are constant expressions
}}

Arrays of constant known size can use {{rlp|array initialization|array initializers}} to provide their initial values:
{{source|1=
int a[5] = {1,2,3}; // declares int[5] initalized to 1,2,3,0,0
char str[] = &quot;abc&quot;; // declares char[4] initialized to 'a','b','c','\0'
}}

{{rev begin}}
{{rev|since=c99|
In function parameter lists, additional syntax elements are allowed within the array declarators: the keyword {{ttb|static}} and {{spar|qualifiers}}, which may appear in any order before the size expression (they may also appear even when the size expression is omitted).

In each {{rlp|operator_other#Function_call|function call}} to a function where a parameter of array type uses the keyword {{ttb|static}} between {{ttb|[}} and {{ttb|]}}, the value of the actual parameter must be a valid pointer to the first element of an array with at least as many elements as specified by {{spar|expression}}:
{{source|1=
void fadd(double a[static 10], const double b[static 10])
{ 
    for (int i = 0; i &lt; 10; i++) {
        if (a[i] &lt; 0.0) return;
        a[i] += b[i];
    }
}
// a call to fadd performs compile-time bounds checking
// and also permits optimizations such as prefetching 10 doubles 
int main(void)
{
    double a[10] = {0}, b[20] = {0};
    fadd(a, b); // OK
    double x[5] = {0};
    fadd(x, b); // error: array argument is too small
}
}}

If {{spar|qualifiers}} are present, they qualify the pointer type to which the array parameter type is transformed:
{{source|1=
int f(const int a[20])
{
 // in this function, a has type const int* (pointer to const int)
}
int g(const int a[const 20])
{
 // in this function, a has type const int* const (const pointer to const int)
}
}}
This is commonly used with the {{rlp|restrict}} type qualifier:
{{source|1=
void fadd(double a[static restrict 10],
          const double b[static restrict 10])
{
    for (int i = 0; i &lt; 10; i++) { // loop can be unrolled and reordered
        if (a[i] &lt; 0.0) break;
        a[i] += b[i];
    }
}
}}

====Variable-length arrays====
If {{spar|expression}} is not an {{rlp|constant_expression#Integer_constant_expression|integer constant expression}}, the declarator is for an array of variable size.

Each time the flow of control passes over the declaration, {{spar|expression}} is evaluated (and it must always evaluate to a value greater than zero), and the array is allocated (correspondingly, {{rlp|lifetime}} of a VLA ends when the declaration goes out of scope). The size of each VLA instance does not change during its lifetime, but on another pass over the same code, it may be allocated with a different size.
{{source|1=
{
   int n = 1;
label:
   int a[n]; // re-allocated 10 times, each with a different size
   printf(&quot;The array has %zu elements\n&quot;, sizeof a / sizeof *a);
   if (n++ &lt; 10) goto label; // leaving the scope of a VLA ends its lifetime
}
}}

If the size is {{ttb|*}}, the declaration is for a VLA of unspecified size. Such declaration may only appear in a function prototype scope, and declares an array of a complete type. In fact, all VLA declarators in function prototype scope are treated as if {{spar|expression}} were replaced by {{ttb|*}}.

{{source|1=
void foo(size_t x, int a[*]);
void foo(size_t x, int a[x]) 
{
    printf(&quot;%zu\n&quot;, sizeof a); // same as sizeof(int*)
}
}}

Variable-length arrays and the types derived from them (pointers to them, etc) are commonly known as &quot;variably-modified types&quot; (VM). Objects of any variably-modified type may only be declared at block scope or function prototype scope.
{{source|1=
extern int n;
int A[n];            // Error: file scope VLA
extern int (*p2)[n]; // Error: file scope VM
int B[100];          // OK: file-scope array of constant known size
void fvla(int m, int C[m][m]); // OK: prototype-scope VLA

}}

VLA must have automatic storage duration. Pointers to VLA, but not VLA themselves may also have static storage duration. No VM type may have linkage.
{{source|1=
void fvla(int m, int C[m][m]) // OK: block scope/auto duration pointer to VLA
{
    typedef int VLA[m][m]; // OK: block scope VLA
    int D[m];              // OK: block scope/auto duration VLA
//  static int E[m]; // Error: static duration VLA
//  extern int F[m]; // Error: VLA with linkage
    int (*s)[m];     // OK: block scope/auto duration VM
//  extern int (*r)[m]; // Error: VM with linkage
    static int (*q)[m] = &amp;B; // OK: block scope/static duration VM}
}
}}

Variably-modified types cannot be members of structs or unions.
{{source|1=
struct tag {
    int z[n]; // Error: VLA struct member
    int (*y)[n]; // Error: VM struct member
};
}}

}}
{{rev|since=c11|
If the compiler defines the macro constant {{c|__STDC_NO_VLA__}} to integer constant {{c|1}}, then VLA and VM types are not supported.
}}
{{rev end}}

====Arrays of unknown size====
If {{spar|expression}} in an array declarator is omitted, it declares an array of unknown size. Except in function parameter lists (where such arrays are transformed to pointers) and when an  {{rlp|array initialization|initializer}} is available, such type is an {{rlp|type#Incomplete_types|incomplete type}}{{rev inl|since=c99| (note that VLA of unspecified size, declared with {{ttb|*}} as the size, is a complete type)}}:
{{source|1=
extern int x[]; // the type of x is &quot;array of unknown bound of int&quot;
int a[] = {1,2,3}; // the type of a is &quot;array of 3 int&quot;
}}

{{rev begin}}
{{rev|since=c99|
Within a {{rlp|struct}} definition, an array of unknown size may appear as the last member (as long as there is at least one other named member), in which case it is a special case known as ''flexible array member''. See {{rlp|struct}} for details:
{{source|1=
struct s { int n; double d[]; }; // s.d is a flexible array member 
struct s *s1 = malloc(sizeof (struct s) + (sizeof (double) * 8)); // as if d was double d[8]
}}

}}
{{rev end}}
===Qualifiers===
If an array type is declared with a {{rlp|const}}, {{rlp|volatile}}{{rev inl|since=c99|, {{rlp|restrict}}}}{{rev inl|since=c11|, or {{rlp|atomic|_Atomic}}}} qualifier (which is possible through the use of {{rlp|typedef}}), the array type is not qualified, but its element type is:
{{source|1=
typedef int A[2][3];
const A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of const int
int* pi = a[0]; // Error: a[0] has type const int*
}}

====Assignment====
Objects of array type are not {{rlp|value category|modifiable lvalues}}, and although their address may be taken, they cannot appear on the left hand side of an assignment operator. However, structs with array members are modifiable lvalues and can be assigned:

{{source|1=
int a[3] = {1,2,3}, b[3] = {4,5,6};
int (*p)[3] = &amp;a; // okay, address of a can be taken
// a = b;            // error, a is an array
struct { int c[3]; } s1, s2 = {3,4,5};
s1 = s2; // okay: can assign structs holding array members
}}

====Array to pointer conversion====
Any {{rlp|value category|lvalue expression}} of array type, when used in any context other than 
* as the operand of the {{rlp|operator_member_access|address-of operator}}
* as the operand of {{rlp|sizeof}}
* as the string literal used for {{rlp|array initialization}} 

{{rev begin}}
{{rev|since=c11|
* as the operand of {{rlp|_Alignof}}
}}
{{rev end}}

undergoes an {{rlp|conversion|implicit conversion}} to the pointer to its first element. The result is not an lvalue.

If the array was declared {{rlp|storage duration|register}}, the behavior of the program that attempts such conversion is undefined.

{{source|1=
int a[3] = {1,2,3};
int* p = a;
printf(&quot;%zu\n&quot;, sizeof a); // prints size of array
printf(&quot;%zu\n&quot;, sizeof p); // prints size of a pointer
}}

When an array type is used in a function parameter list, it is transformed to the corresponding pointer type: {{c|int f(int a[2])}} and {{c|int f(int* a)}} declare the same function. Since the function's actual parameter type is pointer type, a function call with an array argument performs array-to-pointer conversion; the size of the argument array is not available to the called function and must be passed explicitly:
{{source|1=
void f(int a[], int sz) // actually declares int f(int* a, int sz)
{
    for(int i = 0; i &lt; sz; ++i)
       printf(&quot;%d\n&quot;, a[i]);
}
int main(void)
{
    int a[10];
    f(a, 10); // converts a to int*, passes the pointer
}
}}

====Multidimensional arrays====
When the element type of an array is another array, it is said that the array is multidimensional:
{{source|1=// array of 2 arrays of 3 ints each
int a[2][3] = {{1,2,3},  // can be viewed as a 2x3 matrix
               {4,5,6}}; // with row-major layout
}}

Note that when array-to-pointer conversion is applied, a multidimensional array is converted to a pointer to its first element, e.g., pointer to the first row:

{{source|1=
int a[2][3]; // 2x3 matrix
int (*p1)[3] = a; // pointer to the first 3-element row
int b[3][3][3]; // 3x3x3 cube
int (*p2)[3][3] = a; // pointer to the first 3x3 plane
}}

{{rev begin}}
{{rev|since=c99|
Multidimensional arrays may be variably modified in every dimension:
{{source|1=
int n = 10;
int a[n][2*n];
}}
}}
{{rev end}}

===Notes===
Zero-length array declarations are not allowed, even though some compilers offer them as extensions (typically as a pre-C99 implementation of {{rlp|struct|flexible array members}}).

If the size {{spar|expression}} of a VLA has side effects, they are guaranteed to be produced except when it is a part of a sizeof expression whose result doesn't depend on it:
{{source|1=
int n = 5;
int m = 7;
size_t sz = sizeof(int (*)[n++]); // may or may not increment n
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.6.2 | title=Array declarators | p=130-132}}
{{ref std c99}}
{{ref std | section=6.7.5.2 | title=Array declarators | p=116-118}}
{{ref std c89}}
{{ref std | section=3.5.4.2 | title=Array declarators}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/array | Array declaration}}
{{dsc end}}

[[ar:c/language/array]]
[[cs:c/language/array]]
[[de:c/language/array]]
[[es:c/language/array]]
[[fr:c/language/array]]
[[it:c/language/array]]
[[ja:c/language/array]]
[[ko:c/language/array]]
[[pl:c/language/array]]
[[pt:c/language/array]]
[[ru:c/language/array]]
[[tr:c/language/array]]
[[zh:c/language/array]]</text>
      <sha1>nkrhjcnwuf8egrd2fn7snucpsv1zlb7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/array initialization</title>
    <ns>0</ns>
    <id>13895</id>
    <revision>
      <id>87384</id>
      <parentid>79095</parentid>
      <timestamp>2016-08-17T16:12:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>tagged syntax summary until/since c99</comment>
      <text xml:space="preserve" bytes="8921">{{title|Array initialization}}
{{c/language/initialization/navbar}}

When {{rlp|initialization|initializing}} an object of {{rlp|array}} type, the initializer must be either a {{rlp|string literal}} (optionally enclosed in braces) or be a brace-enclosed list of initialized for array members:

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|{{=}}}} {{spar|string_literal}}
}}
{{sdsc|num=2|notes={{mark until c99}}&lt;br&gt;{{mark since c99}}|1=
{{ttb|{{=}}}} {{ttb|{ }} {{spar|expression}} {{ttb|,}} {{ttb|...}} {{ttb|} }}
{{ttb|{{=}}}} {{ttb|{ }} {{spar|designator}}{{mark optional}} {{spar|expression}} {{ttb|,}} {{ttb|...}} {{ttb|} }}
}}
{{sdsc end}}
@1@ string literal initializer for character and wide character arrays
@2@ comma-separated list of expressions that are initializers for array elements{{rev inl|since=c99|, optionally using array designators of the form {{ttb|[}} {{spar|constant-expression}} {{ttb|]}} {{ttb|{{=}}}} }}

Arrays of known size and arrays of unknown size may be initialized{{rev inl|since=c99|, but not VLAs.}}

All array elements that are not initialized explicitly are {{rlp|initialization|initialized implicitly}} the same way as objects that have static storage duration.

===Initialization from strings===
{{rlp|string literal}} (optionally enclosed in braces) may be used as the initializer for an array of matching type:
* ordinary string literals{{rev inl|since=c11| and UTF-8 string literals}} can initialize arrays of any character type ({{c|char}}, {{c|signed char}}, {{c|unsigned char}})
* L-prefixed wide string literals can be used to initialize arrays of any type compatible with (ignoring cv-qualifications) {{lc|wchar_t}}

{{rev begin}}
{{rev|since=c11|
* u-prefixed wide string literals can be used to initialize arrays of any type compatible with (ignoring cv-qualifications) {{lc|char16_t}}
* U-prefixed wide string literals can be used to initialize arrays of any type compatible with (ignoring cv-qualifications {{lc|char32_t}}
}}
{{rev end}}

Successive bytes of the string literal or wide characters of the wide string literal, including the terminating null byte/character, initialize the elements of the array:
{{source|1=
char str[] = &quot;abc&quot;; // str has type char[4] and holds 'a', 'b'. 'c', '\0'
wchar_t wstr[4] = L&quot;猫&quot;; // str has type wchar_t[4] and holds L'猫', '\0', '\0', '\0'
}}

If the size of the array is known, it may be one less than the size of the string literal, in which case the terminating null character is ignored:
{{source|1=
char str[3] = &quot;abc&quot;; // str has type char[3] and holds 'a', 'b', 'c'
}}

Note that the contents of such array are modifiable, unlike when accessing a string literal directly with {{c|1=char* str = &quot;abc&quot;;}}.

===Initialization from brace-enclosed lists===
When an array is initialized with a brace-enclosed list of initializers, the first initializer in the list initializes the array element at index zero{{rev inl|since=c99| (unless a designator is specified)}}, and each subsequent initializers {{rev inl|since=c99|without a designator }}initializes the array element at index one greater than the one initialized by the previous initializer.
{{source|1=
int x[] = {1,2,3}; // x has type int[3] and holds 1,2,3
int y[5] = {1,2,3}; // y has type int[5] and holds 1,2,3,0,0
int z[3] = {0}; // z has type int[3] and holds all zeroes
}}

It's an error to provide more initializers than elements when initializing an array of known size (except when initializing character arrays from string literals).

{{rev begin}}
{{rev|since=c99|
A designator causes the following initializer to initialize of the array element described by the designator. Initialization then continues forward in order, beginning with the next element after the one described by the designator.
{{source|1=
int n[5] = {[4]=5,[0]=1,2,3,4} // holds 1,2,3,4,5

int a[MAX] = { // starts initializing a[0] = 1, a[1] = 3, ...
    1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0
}
// for MAX=6,  array holds 1,8,6,4,2,0
// for MAX=13, array holds 1,3,5,7,9,0,0,0,8,6,4,2,0 (&quot;sparse array&quot;)
}}
}}
{{rev end}}

When initializing an array of unknown size, the largest subscript for which an initializer is specified determines the size of the array being declared.

===Nested arrays===
If the elements of an array are arrays, structs, or unions, the corresponding initializers in the brace-enclosed list of initializers are any initializers that are valid for those members, except that their braces may be omitted as follows:

If the nested initializer begins with an opening brace, the entire nested initializer up to its closing brace initializes the corresponding array element:
{{source|1=
int y[4][3] = { // array of 4 arrays of 3 ints each (4x3 matrix)
    { 1 },      // row 0 initialized to {1, 0, 0}
    { 0, 1 },   // row 1 initialized to {0, 1, 0}
    { [2]=1 },  // row 2 initialized to {0, 0, 1}
};              // row 3 initialized to {0, 0, 0}
}}
If the nested initializer does not begin with an opening brace, only enough initializers from the list are taken to account for the elements or members of the sub-array, struct or union; any remaining initializers are left to initialize the next array element:
{{source|1=
int y[4][3] = {    // array of 4 arrays of 3 ints each (4x2 matrix)
1, 3, 5, 2, 4, 6, 3, 5, 7 // row 0 initialized to {1, 3, 5}
};                        // row 1 initialized to {2, 4, 6}
                          // row 2 initialized to {3, 5, 7}
                          // row 3 initialized to {0, 0, 0}

struct { int a[3], b; } w[] = { { 1 }, 2 }; // array of structs
   // { 1 } is taken to be a fully-braced initializer for element #0 of the array
   // that element is initialized to { {1, 0, 0}, 0}
   // 2 is taken to be the first initialized for element #1 of the array
   // that element is initialized { {2, 0, 0}, 0}
}}

{{rev begin}}
{{rev|since=c99|
Array designators may be nested; the bracketed constant expression for nested arrays follows the bracketed constant expression for the outer array:
{{source|1=
int y[4][3] = {[0][0]=1, [1][1]=1, [2][0]=1};  // row 0 initialized to {1, 0, 0}
                                               // row 1 initialized to {0, 1, 0}
                                               // row 2 initialized to {1, 0, 0}
                                               // row 3 initialized to {0, 0, 0}
}}
}}
{{rev end}}

===Notes===
The {{rlp|eval order|order of evaluation}} of subexpressions in an array initializer is indeterminately sequenced in C (but not in C++ since c++11):
{{source|1=
int n = 1;
int a[2] = {n++, n++}; // unspecified, but well-defined behavior,
                       // n is incremented twice (in arbitrary order)
                       // a initialized to {1, 2} and to {2, 1} are both valid
puts((char[4]){'0'+n} + n++); // undefined behavior:
                              // increment and read from n are unsequenced
}}

In C, the braced list of an initializer cannot be empty. C++ allows empty list:
{{source|1=
int a[3] = {0}; // valid C and C++ way to zero-out a block-scope array
int a[3] = {}; // invalid C but valid C++ way to zero-out a block-scope array
}}

As with all other {{rlp|initialization}}, every expression in the initializer list must be a {{rlp|constant expression}} when initializing arrays of static or thread-local {{rlp|storage duration}}:
{{source|1=
static char* p[2] = {malloc(1), malloc(2)}; // error
}}

===Example===
{{example|code=
int main(void)
{
    // The following four array declarations are the same
    short q1[4][3][2] = {
        { 1 },
        { 2, 3 },
        { 4, 5, 6 }
    };

    short q2[4][3][2] = {1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 4, 5, 6};

    short q3[4][3][2] = {
        {
            { 1 },
        },
        {
            { 2, 3 },
        },
        {
            { 4, 5 },
            { 6 },
        }
    };

    short q4[4][3][2] = {1, [1]=2, 3, [2]=4, 5, 6};


    // Character names can be associated with enumeration constants
    // using arrays with designators:
    enum { RED, GREEN, BLUE };
    const char *nm[] = {
        [RED] = &quot;red&quot;,
        [GREEN] = &quot;green&quot;,
        [BLUE] = &quot;blue&quot;,
    };
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.9/12-38 | title=Initialization | p=140-144}}
{{ref std c99}}
{{ref std | section=6.7.8/12-38 | title=Initialization | p=126-130}}
{{ref std c89}}
{{ref std | section=3.5.7/12-   | title=Initialization}}
{{ref std end}}

[[ar:c/language/array_initialization]]
[[cs:c/language/array_initialization]]
[[de:c/language/array_initialization]]
[[es:c/language/array_initialization]]
[[fr:c/language/array_initialization]]
[[it:c/language/array_initialization]]
[[ja:c/language/array_initialization]]
[[ko:c/language/array_initialization]]
[[pl:c/language/array_initialization]]
[[pt:c/language/array_initialization]]
[[ru:c/language/array_initialization]]
[[tr:c/language/array_initialization]]
[[zh:c/language/array_initialization]]</text>
      <sha1>qgn3aitzfqjf9azhxiqa2qdm5wmcz3w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/ascii</title>
    <ns>0</ns>
    <id>8404</id>
    <revision>
      <id>76098</id>
      <parentid>76097</parentid>
      <timestamp>2015-02-09T21:41:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>no, this is not from the C standard</comment>
      <text xml:space="preserve" bytes="619">{{title|ASCII Chart}}
{{c/language/basics/navbar}}
The following chart contains all 128 ASCII decimal '''(dec)''', octal '''(oct)''', hexadecimal '''(hex)''' and character '''(ch)''' codes.

{{cpp/language/ascii}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/ascii | ASCII Chart}}
{{dsc end}}

[[ar:c/language/ascii]]
[[cs:c/language/ascii]]
[[de:c/language/ascii]]
[[es:c/language/ascii]]
[[fr:c/language/ascii]]
[[it:c/language/ascii]]
[[ja:c/language/ascii]]
[[ko:c/language/ascii]]
[[pl:c/language/ascii]]
[[pt:c/language/ascii]]
[[ru:c/language/ascii]]
[[tr:c/language/ascii]]
[[zh:c/language/ascii]]</text>
      <sha1>ab5euw4xr4dnt4n5n6u64bpkwc7qv7p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/atomic</title>
    <ns>0</ns>
    <id>13927</id>
    <revision>
      <id>87520</id>
      <parentid>81686</parentid>
      <timestamp>2016-09-02T13:31:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>hidden note that the coherences are from DR 402</comment>
      <text xml:space="preserve" bytes="5671">{{title|atomic types}}
{{c/language/declarations/navbar}}

===Syntax===
{{sdsc begin}}
{{sdsc|num=1|notes={{mark since c11}}| {{ttb|_Atomic}} {{ttb|(}} {{spar|type-name}} {{ttb|)}} }}
{{sdsc|num=2|notes={{mark since c11}}| {{ttb|_Atomic}} {{spar|type-name}} }}
{{sdsc end}}
@1@ Use as a type specifier; this designates a new atomic type
@2@ Use as a type qualifier; this designates the atomic version of {{spar|type-name}}. In this role, it may be mixed with {{rlp|const}}, {{rlp|volatile}}, and {{rlp|restrict}}), although unlike other qualifiers, the atomic version of {{spar|type-name}} may have a different size, alignment, and object representation.

{{par begin}}
{{par | {{spar|type-name}} | any type other than array or function. For {{v|1}}, {{spar|type-name}} also cannot be atomic or cvr-qualified}}
{{par end}}

The header {{tt|&lt;stdatomic.h&gt;}} defines [[c/atomic|37 convenience macros]], from {{c|atomic_bool}} to {{c|atomic_uintmax_t}}, which simplify the use of this keyword with built-in and library types.
{{source|1=
_Atomic const int * p1;  // p is a pointer to an atomic const int
const atomic_int * p2;   // same
const _Atomic(int) * p3; // same
}}

===Explanation===
Objects of atomic types are the only objects that are free from {{rlp|memory model|data races}}, that is, they may be modified by two threads concurrently or modified by one and read by another.

Each atomic object has its own associated ''modification order'', which is a total order of modifications made to that object. If, from some thread's point of view, modification {{tt|A}} of some atomic M [[c/atomic/memory_order|happens-before]] modification {{tt|B}} of the same atomic M, then in the modification order of M, A occurs before B.

Note that although each atomic object has its own modification order, it is not a total order; different threads may observe modifications to different atomic objects in different orders.

There are four coherences that are guaranteed for all atomic operations:&lt;!-- note: these were added to C11 via DR 401 --&gt;

* '''write-write coherence''': If an operation A that modifies an atomic object M ''happens-before'' an operation B that modifies M, then A appears earlier than B in the modification order of M.
* '''read-read coherence''': If a value computation A of an atomic object M happens before a value computation B of M, and A takes its value from a side effect X on M, then the value computed by B is either the value stored by X or is the value stored by a side effect Y on M, where Y appears later than X in the modification order of M.
* '''read-write coherence''': If a value computation A of an atomic object M ''happens-before'' an operation B on M, then A takes its value from a side effect X on M, where X appears before B in the modification order of M.
* '''write-read coherence''': If a side effect X on an atomic object M ''happens-before'' a value computation B of M, then the evaluation B takes its value from X or from a side effect Y that appears after X in the modification order of M.

Some atomic operations are also synchronization operations; they may have additional release semantics, acquire semantics, or sequentially-consistent semantics. See {{lc|memory_order}}. 

Built-in {{rlp|operator incdec|increment and decrement operators}} and {{rlp|operator assignment|compound assignment}} are read-modify-write atomic operations with total sequentially consistent ordering (as if using {{lc|memory_order_seq_cst}}). If less strict synchronization semantics are desired, the [[c/atomic|standard library functions]] may be used instead.

Atomic properties are only meaningful for {{rlp|value category|lvalue expressions}}. Lvalue-to-rvalue conversion (which models a memory read from an atomic location to a CPU register) strips atomicity along with other qualifiers.

{{todo|more, review interaction with memory_order and atomic library pages}}

===Notes===
If the macro constant {{tt|__STDC_NO_ATOMICS__}}{{mark c11}} is defined by the compiler, the keyword {{c|_Atomic}} as well as the header {{tt|&lt;stdatomic.h&gt;}}, is not provided.

Accessing a member of an atomic struct/union is undefined behavior.

The library type {{c|sig_atomic_t}} does not provide inter-thread synchronization or memory ordering, only atomicity.

The {{rlp|volatile}} types do not provide inter-thread synchronization, memory ordering, or atomicity.

===Keywords===
{{ltt|c/keyword/_Atomic}}

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;threads.h&gt;
#include &lt;stdatomic.h&gt;

atomic_int acnt;
int cnt;

int f(void* thr_data)
{
    for(int n = 0; n &lt; 1000; ++n) {
        ++cnt;
        ++acnt;
        // for this example, relaxed memory order is sufficient, e.g.
        // atomic_fetch_add_explicit(&amp;acnt, 1, memory_order_relaxed);
    }
    return 0;
}

int main(void)
{
    thrd_t thr[10];
    for(int n = 0; n &lt; 10; ++n)
        thrd_create(&amp;thr[n], f, NULL);
    for(int n = 0; n &lt; 10; ++n)
        thrd_join(thr[n], NULL);

    printf(&quot;The atomic counter is %u\n&quot;, acnt);
    printf(&quot;The non-atomic counter is %u\n&quot;, cnt);
}
|p=true
|output=
The atomic counter is 10000
The non-atomic counter is 8644
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.2.4 | title=Atomic type specifiers | p=121}}
{{ref std | section=7.17    | title=Atomics &lt;stdatomic.h&gt; | p=273-286}}
{{ref std end}}

[[ar:c/language/atomic]]
[[cs:c/language/atomic]]
[[de:c/language/atomic]]
[[es:c/language/atomic]]
[[fr:c/language/atomic]]
[[it:c/language/atomic]]
[[ja:c/language/atomic]]
[[ko:c/language/atomic]]
[[pl:c/language/atomic]]
[[pt:c/language/atomic]]
[[ru:c/language/atomic]]
[[tr:c/language/atomic]]
[[zh:c/language/atomic]]</text>
      <sha1>e4xvmmmynfv4iq8mr63jdv15b9bu3ti</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/basic concepts</title>
    <ns>0</ns>
    <id>13885</id>
    <revision>
      <id>83386</id>
      <parentid>76227</parentid>
      <timestamp>2016-02-05T11:59:58Z</timestamp>
      <contributor>
        <ip>136.163.203.9</ip>
      </contributor>
      <text xml:space="preserve" bytes="2228">{{title|Basic concepts}}
{{c/language/basics/navbar}}
This section provides definitions for the specific terminology and the concepts used when describing the C programming language.

A C program is a sequence of text files (typically header and source files) that contain {{rlp|declarations}}. They undergo {{rlp|translation phases|translation}} to become an executable program, which is executed when the OS calls its {{rlp|main function}} (unless it is itself the OS or another ''freestanding'' program, in which case the entry point is implementation-defined).

Certain words in a C program have special meaning, they are [[cpp/keyword|keywords]]. Others can be used as {{rlp|identifier}}s, which may be used to identify {{rlp|object}}s, {{rlp|functions}}, {{rlp|struct}}, {{rlp|union}}, or {{rlp|enum|enumeration}} tags, their members, {{rlp|typedef}} names, {{rlp|statements#Labels|labels}}, or  [[c/preprocessor/replace|macros]].

Each identifier (other than macro) is only valid within a part of the program called its {{rlp|scope}} and belongs to one of four kinds of {{rlp|name space}}s. Some identifiers have {{rlp|storage duration|linkage}} which makes them refer to the same entities when they appear in different scopes or translation units.

Definitions of functions include sequences of {{rlp|statements}} and {{rlp|declarations}}, some of which include {{rlp|expressions}}, which specify the computations to be performed by the program.

{{rlp|declarations|Declarations}} and {{rlp|expressions}} create, destroy, access, and manipulate {{rlp|object}}s. Each {{rlp|object}}, {{rlp|functions|function}}, and {{rlp|expressions|expression}} in C is associated with a {{rlp|type}}.

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/basic_concepts | Basic concepts}}
{{dsc end}}

[[ar:c/language/basic_concepts]]
[[cs:c/language/basic_concepts]]
[[de:c/language/basic_concepts]]
[[es:c/language/basic_concepts]]
[[fr:c/language/basic_concepts]]
[[it:c/language/basic_concepts]]
[[ja:c/language/basic_concepts]]
[[ko:c/language/basic_concepts]]
[[pl:c/language/basic_concepts]]
[[pt:c/language/basic_concepts]]
[[ru:c/language/basic_concepts]]
[[tr:c/language/basic_concepts]]
[[zh:c/language/basic_concepts]]</text>
      <sha1>s57fszu7ot4b95oo74559r6u9iogpgb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/behavior</title>
    <ns>0</ns>
    <id>15689</id>
    <revision>
      <id>90099</id>
      <parentid>88848</parentid>
      <timestamp>2017-02-06T12:39:42Z</timestamp>
      <contributor>
        <ip>103.46.192.6</ip>
      </contributor>
      <text xml:space="preserve" bytes="6430">{{title|Undefined behavior}}
{{c/language/navbar}}

The C language standard precisely specifies the {{rlp|as if|observable behavior}} of C language programs, except for the ones in the following categories:

* ''undefined behavior'' - there are no restrictions on the behavior of the program. Examples of undefined behavior are memory accesses outside of array bounds, signed integer overflow, null pointer dereference, modification of the same scalar {{rlp|eval order|more than once}} in an expression without sequence points, access to an object through a pointer of a different type, etc. Compilers are not required to diagnose undefined behavior (although many simple situations are diagnosed), and the compiled program is not required to do anything meaningful.

* ''unspecified behavior'' - two or more behaviors are permitted and the implementation is not required to document the effects of each behavior. For example, {{rlp|eval order|order of evaluation}}, whether identical {{rlp|string literal}}s are distinct, etc. Each unspecified behavior results in one of a set of valid results and may produce a different result when repeated in the same program.

* ''implementation-defined behavior'' - unspecified behavior where each implementation documents how the choice is made. For example, number of bits in a byte, or whether signed integer right shift is arithmetic or logical.

* ''locale-specific behavior'' - implementation-defined behavior that depends on the [[c/locale/setlocale|currently chosen locale]]. For example, whether {{lc|islower}} returns true for any character other than the 26 lowercase Latin letters.

(Note: [[c/language/conformance|Strictly conforming]] programs do not depend on any unspecified, undefined, or implementation-defined behavior)

The compilers are required to issue diagnostic messages (either errors or warnings) for any programs that violates any C syntax rule or semantic constraint, even if its behavior is specified as undefined or implementation-defined or if the compiler provides a language extension that allows it to accept such program. Diagnostics for undefined behavior are not otherwise required.

===UB and optimization===
Because correct C programs are free of undefined behavior, compilers may produce unexpected results when a program that actually has UB is compiled with optimization enabled:

For example, 
====Signed overflow====
{{source|1=
int foo(int x) {
    return x+1 &gt; x; // either true or UB due to signed overflow
}
}}
may be compiled as ([https://godbolt.org/g/u1MDjW demo])
{{source|
foo(int):
        movl    $1, %eax
        ret
}}

====Access out of bounds====
{{source|1=
int table[4] = {};
int exists_in_table(int v)
{
    // return true in one of the first 4 iterations or UB due to out-of-bounds access
    for (int i = 0; i &lt;= 4; i++) {
        if (table[i] == v) return 1;
    }
    return 0;
}
}}
May be compiled as ([https://godbolt.org/g/Mc6Qu1 demo])
{{source|
exists_in_table(int):
        movl    $1, %eax
        ret
}}

====Uninitialized scalar====
{{source|
bool p; // uninitialized local variable
if(p) // UB access to uninitialized scalar
    puts(&quot;p is true&quot;);
if(!p) // UB access to uninitialized scalar
    puts(&quot;p is false&quot;);
}}
May produce the following output (observed with an older version of gcc):
{{source|
p is true
p is false
}}

{{example|code=
size_t f(int x)
{
    size_t a;
    if(x) // either x nonzero or UB
        a = 42;
    return a; 
}
}}
May be compiled as ([https://godbolt.org/g/CZKrdp demo])
{{source|
f(int):
        mov     eax, 42
        ret
}}

====Access to pointer passed to realloc====
{{example|Choose clang to observe the output shown
|code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
int main(void) {
    int *p = (int*)malloc(sizeof(int));
    int *q = (int*)realloc(p, sizeof(int));
    *p = 1; // UB access to a pointer that was passed to realloc
    *q = 2;
    if (p == q) // UB access to a pointer that was passed to realloc
        printf(&quot;%d%d\n&quot;, *p, *q);
}
|p=true
|output=
12
}}
====Infinite loop without side-effects====
{{example|Choose clang to observe the output shown
|code=
#include &lt;stdio.h&gt;

int fermat() {
  const int MAX = 1000;
  int a=1,b=1,c=1;
  // Endless loop with no side effects is UB
  while (1) {
    if (((a*a*a) == ((b*b*b)+(c*c*c)))) return 1;
    a++;
    if (a&gt;MAX) { a=1; b++; }
    if (b&gt;MAX) { b=1; c++; }
    if (c&gt;MAX) { c=1;}
  }
  return 0;
}

int main(void) {
  if (fermat())
    puts(&quot;Fermat's Last Theorem has been disproved.&quot;);
  else
    puts(&quot;Fermat's Last Theorem has not been disproved.&quot;);
}
|p=true
|output=
Fermat's Last Theorem has been disproved.
}}

===References===
{{ref std c11}}
{{ref std | section=3.4 | title=Behavior | p=3-4}}
{{ref std | section=4/2 | title=Undefined behavior | p=8}}
{{ref std c99}}
{{ref std | section=3.4 | title=Behavior | p=3-4}}
{{ref std | section=4/2 | title=Undefined behavior | p=7}}
{{ref std c89}}
{{ref std | section=1.6 | title=DEFINITIONS OF TERMS}}
{{ref std end}}

===External links===
* [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html What Every C Programmer Should Know About Undefined Behavior #1/3]
* [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html What Every C Programmer Should Know About Undefined Behavior #2/3]
* [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html What Every C Programmer Should Know About Undefined Behavior #3/3]
* [http://blogs.msdn.com/b/oldnewthing/archive/2014/06/27/10537746.aspx Undefined behavior can result in time travel (among other things, but time travel is the funkiest)]
* [http://www.cs.utah.edu/~regehr/papers/overflow12.pdf Understanding Integer Overflow in C/C++]
* [http://kukuruku.co/hub/cpp/undefined-behavior-and-fermats-last-theorem Undefined Behavior and Fermat’s Last Theorem]
* [http://lwn.net/Articles/342330/ Fun with NULL pointers, part 1] (local exploit in Linux 2.6.30 caused by UB due to null pointer dereference)

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/ub | undefined behavior}}
{{dsc end}}

[[ar:c/language/behavior]]
[[cs:c/language/behavior]]
[[de:c/language/behavior]]
[[es:c/language/behavior]]
[[fr:c/language/behavior]]
[[it:c/language/behavior]]
[[ja:c/language/behavior]]
[[ko:c/language/behavior]]
[[pl:c/language/behavior]]
[[pt:c/language/behavior]]
[[ru:c/language/behavior]]
[[tr:c/language/behavior]]
[[zh:c/language/behavior]]</text>
      <sha1>m0u9852uzopvb1zsmvrmwzuo7ecggcx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/bit field</title>
    <ns>0</ns>
    <id>13963</id>
    <revision>
      <id>75721</id>
      <parentid>75670</parentid>
      <timestamp>2015-01-28T15:24:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>deleted two blank line</comment>
      <text xml:space="preserve" bytes="5309">{{title|Bit fields}}
{{c/language/declarations/navbar}}

Declares a member with explicit width, in bits. Adjacent bit field members may be packed to share and straddle the individual bytes.

A bit field declaration is a {{rlp|struct}} or {{rlp|union}} member declaration which uses the following {{rlp|declarations|declarator}}:

{{sdsc begin}}
{{sdsc|1=
{{spar|identifier}}{{mark optional}} {{ttb|:}} {{spar|width}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|identifier}} | the name of the bit field that is being declared. The name is optional: nameless bitfields introduce the specified number of bits of padding}}
{{par | {{spar|width}} | an integer {{rlp|constant expression}} with a value greater or equal to zero and less or equal the number of bits in the underlying type. When greater than zero, this is the number of bits that this bit field will occupy. The value zero is only allowed for nameless bitfields and has special meaning: it specifies that the next bit field in the class definition will begin at an allocation unit's boundary.}}
{{par end}}

===Explanation===
Bit fields can have only one of four types (possibly {{rlp|const}} or {{rlp|volatile}} qualified):
* {{c|unsigned int}}, for unsigned bit fields ({{c|unsigned int b:3;}} has the range {{c|0..7}})
* {{c|signed int}}, for signed bit fields ({{c|signed int b:3;}} has the range {{c|-4..3}})
* {{c|int}}, for bit fields with implementation-defined signedness (Note that this differs from the meaning of the keyword {{tt|int}} everywhere else, where it means &quot;signed int&quot;). For example, {{c|int b:3;}} may have the range of values {{c|0..7}} or {{c|-4..3}}.
* {{c|_Bool}}, for single-bit bit fields ({{c|bool x:1;}} has the range {{c|0..1}} and {{rlp|conversion|implicit conversions}} to and from it follow the boolean conversion rules.

Additional implementation-defined types may be acceptable.{{rev inl|since=c11| It is also implementation-defined whether a bit field may have {{rlp|atomic}} type.}}
The number of bits in a bit field ({{spar|width}}) sets the limit to the range of values it can hold:

{{example|code=
#include &lt;stdio.h&gt;
struct S {
 // three-bit unsigned field,
 // allowed values are 0...7
 unsigned int b : 3;
};
int main(void)
{
    struct S s = {7};
    ++s.b; // unsigned overflow
    printf(&quot;%d\n&quot;, s.b); // output: 0
}
}}

Multiple adjacent bit fields are permitted to be (and usually are) packed together:

{{example|code=
#include &lt;stdio.h&gt;
struct S {
    // will usually occupy 4 bytes:
    // 5 bits: value of b1
    // 11 bits: unused
    // 6 bits: value of b2
    // 2 bits: value of b3
    // 8 bits: unused
    unsigned b1 : 5, : 11, b2 : 6, b3 : 2;
};
int main(void)
{
    printf(&quot;%zu\n&quot;,sizeof(struct S)); // usually prints 4
}
}}

The special ''unnamed bit field'' of {{spar|width}} zero breaks up padding: it specifies that the next bit field begins at the beginning of the next allocation unit:

{{example|code=#include &lt;stdio.h&gt;
struct S {
    // will usually occupy 8 bytes:
    // 5 bits: value of b1
    // 27 bits: unused
    // 6 bits: value of b2
    // 15 bits: value of b3
    // 11 bits: unused
    unsigned b1 : 5;
    unsigned :0; // start a new unsigned int
    unsigned b2 : 6;
    unsigned b3 : 15;
};
int main(void)
{
    printf(&quot;%zu\n&quot;, sizeof(struct S)); // usually prints 8
}
}}

Because bit fields do not necessarily begin at the beginning of a byte, address of a bit field cannot be taken. Pointers to bit fields are not possible. Bit fields cannot be used with {{rlp|sizeof}} {{rev inl|since=c11|and {{rlp|alignas}} }}

===Notes===
The following properties of bit fields are ''undefined'':
* The effect of calling {{lc|offsetof}} on a bit field
The following properties of bit fields are ''unspecified'':
* Alignment of the allocation unit that holds a bit field
The following properties of bit fields are ''implementation-defined'':
* Whether bit fields of type {{c|int}} are treated as signed or unsigned
* Whether types other than int, signed int, unsigned int, and _Bool are permitted
* Whether atomic types are permitted
* Whether a bit field can straddle an allocation unit boundary
* The order of bit fields within an allocation unit (on some platforms, bit fields are packed left-to-right, on others right-to-left)

Even though the number of bits in the object representation of {{tt|_Bool}} is at least {{lc|CHAR_BIT}}, the {{spar|width}} of the bit field of type {{tt|_Bool}} cannot be greater than 1. 

In the C++ programming language, the width of a bit field can exceed the width of the underlying type.

===References===
{{ref std c11}}
{{ref std | section=6.7.2.1 | title=Structure and union specifiers}}
{{ref std c99}}
{{ref std | section=6.7.2.1 | title=Structure and union specifiers}}
{{ref std c89}}
{{ref std | section=3.5.2.1 | title=Structure and union specifiers}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/bit field | Bit field}}
{{dsc end}}

[[ar:c/language/bit_field]]
[[cs:c/language/bit_field]]
[[de:c/language/bit_field]]
[[es:c/language/bit_field]]
[[fr:c/language/bit_field]]
[[it:c/language/bit_field]]
[[ja:c/language/bit_field]]
[[ko:c/language/bit_field]]
[[pl:c/language/bit_field]]
[[pt:c/language/bit_field]]
[[ru:c/language/bit_field]]
[[tr:c/language/bit_field]]
[[zh:c/language/bit_field]]</text>
      <sha1>2tuwj1ko39u6rdbutdj2olmd2pupbxf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/boolean type</title>
    <ns>0</ns>
    <id>13775</id>
    <revision>
      <id>73119</id>
      <timestamp>2014-10-15T11:16:28Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new page about Boolean type</comment>
      <text xml:space="preserve" bytes="736">{{title|Boolean type}}
{{c/language/navbar}}

When any scalar value is converted to _Bool, the result is 0 if the value compares equal
to 0; otherwise, the result is 1.

===Notes===
NaNs do not compare equal to 0 and thus convert to 1.

===Example===
{{example
 | 
 | code= 
#include &lt;stdio.h&gt;

int main(void)
{
    _Bool a = 0.0;
    _Bool b = 8;
    _Bool c = 0.0/0.0;

    printf(&quot;%d\n&quot;, a);
    printf(&quot;%d\n&quot;, b);
    printf(&quot;%d\n&quot;, c);

    return 0;
}
 | p=true
 | output=
0
1
1
}}

[[de:c/language/boolean_type]]
[[es:c/language/boolean_type]]
[[fr:c/language/boolean_type]]
[[it:c/language/boolean_type]]
[[ja:c/language/boolean_type]]
[[pt:c/language/boolean_type]]
[[ru:c/language/boolean_type]]
[[zh:c/language/boolean_type]]</text>
      <sha1>115z94quz15ki1pwibh3rk0jzqq9mrh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/break</title>
    <ns>0</ns>
    <id>6044</id>
    <revision>
      <id>79091</id>
      <parentid>76144</parentid>
      <timestamp>2015-06-23T11:12:13Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2430">{{title|break statement}}
{{c/language/statements/navbar}}
Causes the enclosing {{rlp|for}}, {{rlp|while}} or {{rlp|do|do-while}} loop or {{rlp|switch| switch statement}} to terminate.

Used when it is otherwise awkward to terminate the loop using the condition expression and conditional statements.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|break}} {{ttb|;}} }}
{{sdsc end}}

Appears only within the {{spar|statement}} of a loop body ({{rlp|while}}, {{rlp|do}}, {{rlp|for}}) or within the {{spar|statement}} of a {{rlp|switch}}.

===Explanation===
After this statement the control is transferred to the statement or declaration immediately following the enclosing loop or switch, as if by {{rlp|goto}}.

===Keywords===

{{ltt|c/keyword/break}}

===Notes===
A break statement cannot be used to break out of multiple nested loops. The {{rlp|goto|goto statement}} may be used for this purpose.

===Example===
{{example 
 | code=
#include &lt;stdio.h&gt;

int main(void)
{
    int i = 2;
    switch (i) {
        case 1: printf(&quot;1&quot;);
        case 2: printf(&quot;2&quot;);   // i==2, so execution starts at this case label
        case 3: printf(&quot;3&quot;);
        case 4:
        case 5: printf(&quot;45&quot;);
                break;         // execution of subsequent cases is terminated
        case 6: printf(&quot;6&quot;);
    }
    printf(&quot;\n&quot;);
 
    // Compare outputs from these two nested for loops.
    for (int j = 0; j &lt; 2; j++) 
        for (int k = 0; k &lt; 5; k++) 
            printf(&quot;%d%d &quot;, j,k);
    printf(&quot;\n&quot;);
    for (int j = 0; j &lt; 2; j++) {
        for (int k = 0; k &lt; 5; k++) { // only this loop is exited by break
            if (k == 2) break;
            printf(&quot;%d%d &quot;, j,k);
        }
    }
}
 | output=
2345
00 01 02 03 04 10 11 12 13 14 
00 01 10 11 
}}

===References===
{{ref std c11}}
{{ref std | section=6.8.6.3 | title=The break statement | p=153}}
{{ref std c99}}
{{ref std | section=6.8.6.3 | title=The break statement | p=138}}
{{ref std c89}}
{{ref std | section=3.6.6.3 | title=The break statement}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/break | break statement}}
{{dsc end}}

[[ar:c/language/break]]
[[cs:c/language/break]]
[[de:c/language/break]]
[[es:c/language/break]]
[[fr:c/language/break]]
[[it:c/language/break]]
[[ja:c/language/break]]
[[ko:c/language/break]]
[[pl:c/language/break]]
[[pt:c/language/break]]
[[ru:c/language/break]]
[[tr:c/language/break]]
[[zh:c/language/break]]</text>
      <sha1>e8l18iv44ltgkh8e82wrarv2ee6md49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/cast</title>
    <ns>0</ns>
    <id>13923</id>
    <revision>
      <id>83564</id>
      <parentid>80877</parentid>
      <timestamp>2016-02-28T11:24:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted title</comment>
      <text xml:space="preserve" bytes="5383">{{title|cast operator}}
{{c/language/expressions/navbar}}
Performs explicit type conversion

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|(}} {{spar|type-name}} {{ttb|)}} {{spar|expression}} }}
{{sdsc end}}
where
{{par begin}}
{{par|{{spar|type-name}}| either the type {{c|void}} or any {{rlp|type#Type_groups|scalar type}} }}
{{par|{{spar|expression}}| any {{rlp|expressions|expression}} of {{rlp|type#Type_groups|scalar type}} (unless {{spar|type-name}} is void, in which case it can be anything)}}
{{par end}}

===Explanation===
If {{spar|type-name}} is {{c|void}}, then {{spar|expression}} is evaluated for its side-effects and its returned value is discarded, same as when {{spar|expression}} is used on its own, as an {{rlp|statements#Expression_statements|expression statement}}.

Otherwise, if {{spar|type-name}} is exactly the type of {{spar|expression}}, nothing is done (except that if {{spar|expression}} has floating type and is represented with greater range and precision than its type indicates -- see below)

Otherwise, the value of {{spar|expression}} is converted to the type named by {{spar|type-name}}, as follows:

Every {{rlp|conversion|implicit conversion as if by assignment}} is allowed. 

In addition to the implicit conversions, the following conversions are allowed:

* Any integer can be cast to any pointer type. Except for the null pointer constants such as {{lc|NULL}} (which {{rlp|conversion|doesn't need a cast}}), the result is implementation-defined, may not be correctly aligned, may not point to an object of the referenced type, and may be a {{rlp|object|trap representation}}.
* Any pointer type can be cast to any integer type. The result is implementation-defined, even for null pointer values (they do not necessarily result in the value zero). If the result cannot be represented in the target type, the behavior is undefined (unsigned integers do not implement modulo arithmetic on a cast from pointer)
* Any pointer to object can be cast to any other pointer to object. If the value is not correctly aligned for the target type, the behavior is undefined. Otherwise, if the value is converted back to the original type, it compares equal to the original value. If a pointer to object is cast to pointer to any character type, the result points at the lowest byte of the object and may be incremented up to sizeof the target type (in other words, can be used to examine {{rlp|object|object representation}} or to make a copy via {{lc|memcpy}} or {{lc|memmove}}).
* Any pointer to function can be cast to a pointer to any other function type. If the resulting pointer is converted back to the original type, it compares equal to the original value. If the converted pointer is used to make a function call, the behavior is undefined (unless the function types are {{rlp|type#Compatible_types|compatible}})
* When casting between pointers (either object or function), if the original value is a null pointer value of its type, the result is the correct null pointer value for the target type.

In any case (both when executing an implicit conversion and in the same-type cast), if {{spar|expression}} and {{spar|type-name}} are floating types and {{spar|expression}} is represented with greater range and precision than its type indicates (see {{lc|FLT_EVAL_METHOD}}, the range and precision are stripped off to match the target type.

The {{rlp|value category}} of the cast expression is always non-lvalue.

===Notes===
Because {{rlp|const}}, {{rlp|volatile}}, {{rlp|restrict}}, and {{rlp|atomic}} qualifiers have effect on {{rlp|value category|lvalues only}}, a cast to a cvr-qualified or atomic type is exactly equivalent to the cast to the corresponding unqualified type.

The cast to void is sometimes useful to silence compiler warnings about unused results. 

The conversions not listed here are not allowed. In particular,
* there are no conversions between pointers and floating types
* there are no conversions between pointers to functions and pointers to objects (including {{c|void*}})
* there are no conversions between pointers to functions and integers


===Example===
{{example|code=
#include &lt;stdio.h&gt;

int main(void)
{
    // examining object representation is a legitimate use of cast
    double d = 3.14;
    printf(&quot;The double %.2f(%a) is: &quot;, d, d);
    for(size_t n = 0; n &lt; sizeof d; ++n)
        printf(&quot;0x%02x &quot;, ((unsigned char*)&amp;d)[n]);

    // edge cases
    struct S {int x;} s;
//    (struct S)s; // error; not a scalar type
                   // even though casting to the same type does nothing
    (void)s; // okay to cast any type to void
}
|p=true
|output=
The double 3.14(0x1.91eb851eb851fp+1) is: 0x1f 0x85 0xeb 0x51 0xb8 0x1e 0x09 0x40
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.4 | title=Cast operators | p=91}}
{{ref std c99}}
{{ref std | section=6.5.4 | title=Cast operators | p=81}}
{{ref std c89}}
{{ref std | section=3.3.4 | title=Cast operators}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/explicit_cast | explicit type conversion}}
{{dsc end}}

[[ar:c/language/cast]]
[[cs:c/language/cast]]
[[de:c/language/cast]]
[[es:c/language/cast]]
[[fr:c/language/cast]]
[[it:c/language/cast]]
[[ja:c/language/cast]]
[[ko:c/language/cast]]
[[pl:c/language/cast]]
[[pt:c/language/cast]]
[[ru:c/language/cast]]
[[tr:c/language/cast]]
[[zh:c/language/cast]]</text>
      <sha1>bt3m2w8polvit2sap06gas33agi5yae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/character constant</title>
    <ns>0</ns>
    <id>13888</id>
    <revision>
      <id>88186</id>
      <parentid>88179</parentid>
      <timestamp>2016-11-14T14:39:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>example fixes: '猫' etc are not &quot;multibyte characters&quot;. don't ignore Unicode, byte representation of an int does not illustrate any part of this page</comment>
      <text xml:space="preserve" bytes="6346">{{title|character constant}}
{{c/language/expressions/navbar}}
===Syntax===
{{sdsc begin}}
{{sdsc | num = 1| {{ttb|'}} {{spar|c-char}} {{ttb|'}} }}
{{sdsc | num = 2| {{ttb|u}} {{ttb|'}} {{spar|c-char}} {{ttb|'}} {{mark since c11}} }}
{{sdsc | num = 3| {{ttb|U}} {{ttb|'}} {{spar|c-char}} {{ttb|'}} {{mark since c11}} }}
{{sdsc | num = 4| {{ttb|L}} {{ttb|'}} {{spar|c-char}} {{ttb|'}} }}
{{sdsc | num = 5| {{ttb|'}} {{spar|c-char-sequence}} {{ttb|'}} }}
{{sdsc end}}
where
* {{spar|c-char}} is either
:* a character from the basic source character set minus single-quote ({{ttb|'}}), backslash ({{ttb|\}}), or the newline character.
:* escape sequence: one of special character escapes {{c|\'}} {{c|\&quot;}} {{c|\?}} {{c|\\}} {{c|\a}} {{c|\b}} {{c|\f}} {{c|\n}} {{c|\r}} {{c|\t}} {{c|\v}}, hex escapes {{c|\x...}} or octal escapes {{c|\...}} as defined in [[c/language/escape|escape sequences]].
:*{{rev begin}}
{{rev|since=c99|
universal character name, {{c|\u...}} or {{c|\U...}} as defined in [[c/language/escape|escape sequences]].
}}
{{rev end}}
* {{spar|c-char-sequence}} is a sequence of two or more {{spar|c-char}}s.

@1@ single-byte integer character constant, e.g. {{c|'a'}} or {{c|'\n'}} or {{c|'\13'}}. Such constant has type {{c|int}} and a value equal to the representation of {{spar|c-char}} in the execution character set as a value of type {{c|char}} mapped to {{c|int}}. If {{spar|c-char}} is not representable as a single byte in the execution character set, the value is implementation-defined.
@2@ 16-bit wide character constant, e.g. {{c|u'貓'}}, but not {{c|u'🍌'}} ({{c|u'\U0001f34c'}}). Such constant has type {{c|char16_t}} and a value equal to the value of {{spar|c-char}} in the 16-bit encoding produced by {{lc|mbrtoc16}} (normally UTF-16). If {{spar|c-char}} is not representable or maps to more than one 16-bit character, the behavior is implementation-defined.
@3@ 32-bit wide character constant, e.g. {{c|U'貓'}} or {{c|U'🍌'}}. Such constant has type {{c|char32_t}} and a value equal to the value of {{spar|c-char}} in in the 32-bit encoding produced by {{c|mbrtoc32}} (normally UTF-32). If {{spar|c-char}} is not representable or maps to more than one 32-bit character, the behavior is implementation-defined.
@4@ wide character constant, e.g. {{c|L'β'}} or {{c|L'貓}}. Such constant has type {{c|wchar_t}} and a value equal to the value of {{spar|c-char}} in the execution wide character set (that is, the value that would be produced by {{lc|mbtowc}}). If {{spar|c-char}} is not representable or maps to more than one wide character (e.g. a non-BMP value on Windows where wchar_t is 16-bit), the behavior is implementation-defined .
@5@ multicharacter constant, e.g. {{c|'AB'}}, has type {{c|int}} and implementation-defined value.

===Notes===
Many implementations of multicharacter constants use the values of each char in the constant to initialize successive bytes of the resulting integer, in big-endian order, e.g. the value of {{c|'\1\2\3\4'}} is {{c|0x01020304}}.

In C++, ordinary character constants have type {{c|char}}, rather than {{c|int}}.

Unlike {{rlp|integer constant}}s, a character constant may have a negative value if {{c|char}} is signed: on such implementations {{c|'\xFF'}} is an {{c|int}} with the value {{c|-1}}.

When used in a controlling expression of [[c/preprocessor/conditional|#if]] or [[c/preprocessor/conditional|#elif]], character constants may be interpreted in terms of the source character set, the execution character set, or some other implementation-defined character set.

===Example===
{{example|code=
#include &lt;stddef.h&gt;
#include &lt;stdio.h&gt;
#include &lt;uchar.h&gt;

int main (void)
{
    printf(&quot;constant    value     \n&quot;);
    printf(&quot;--------    ----------\n&quot;);

    // integer character constants,
    int c1='a'; printf(&quot;'a':        %#010x\n&quot;, c1);
    int c2='🍌'; printf(&quot;'🍌':       %#010x\n\n&quot;, c2); // implementation-defined

    // multicharacter constant
    int c3='ab'; printf(&quot;'ab':       %#010x\n\n&quot;, c3); // implementation-defined

    // 16-bit wide character constants
    char16_t uc1 = u'a'; printf(&quot;'a':        %#010x\n&quot;, (int)uc1);
    char16_t uc2 = u'¢'; printf(&quot;'¢':        %#010x\n&quot;, (int)uc2);
    char16_t uc3 = u'猫'; printf(&quot;'猫':       %#010x\n&quot;, (int)uc3);
    // implementation-defined (🍌 maps to two 16-bit characters)
    char16_t uc4 = u'🍌'; printf(&quot;'🍌':       %#010x\n\n&quot;, (int)uc4);

    // 32-bit wide character constants
    char32_t Uc1 = U'a'; printf(&quot;'a':        %#010x\n&quot;, (int)Uc1);
    char32_t Uc2 = U'¢'; printf(&quot;'¢':        %#010x\n&quot;, (int)Uc2);
    char32_t Uc3 = U'猫'; printf(&quot;'猫':       %#010x\n&quot;, (int)Uc3);
    char32_t Uc4 = U'🍌'; printf(&quot;'🍌':       %#010x\n\n&quot;, (int)Uc4);

    // wide character constants
    wchar_t wc1 = L'a'; printf(&quot;'a':        %#010x\n&quot;, (int)wc1);
    wchar_t wc2 = L'¢'; printf(&quot;'¢':        %#010x\n&quot;, (int)wc2);
    wchar_t wc3 = L'猫'; printf(&quot;'猫':       %#010x\n&quot;, (int)wc3);
    wchar_t wc4 = L'🍌'; printf(&quot;'🍌':       %#010x\n\n&quot;, (int)wc4);
}
|p=true
|output=
constant    value     
--------    ----------
'a':        0x00000061
'🍌':       0xf09f8d8c

'ab':       0x00006162

'a':        0x00000061
'¢':        0x000000a2
'猫':       0x0000732b
'🍌':       0x0000df4c

'a':        0x00000061
'¢':        0x000000a2
'猫':       0x0000732b
'🍌':       0x0001f34c

'a':        0x00000061
'¢':        0x000000a2
'猫':       0x0000732b
'🍌':       0x0001f34c
}}

===References===
{{ref std c11}}
{{ref std | section=6.4.4.4 | title=Character constants | p=67-70}}
{{ref std c99}}
{{ref std | section=6.4.4.4 | title=Character constants | p=59-61}}
{{ref std c89}}
{{ref std | section=3.1.3.4 | title=Character constants}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/character_literal | character literal}}
{{dsc end}}

[[ar:c/language/character_constant]]
[[cs:c/language/character_constant]]
[[de:c/language/character_constant]]
[[es:c/language/character_constant]]
[[fr:c/language/character_constant]]
[[it:c/language/character_constant]]
[[ja:c/language/character_constant]]
[[ko:c/language/character_constant]]
[[pl:c/language/character_constant]]
[[pt:c/language/character_constant]]
[[ru:c/language/character_constant]]
[[tr:c/language/character_constant]]
[[zh:c/language/character_constant]]</text>
      <sha1>edzzfazthj6lo378j01pi582ee1ry95</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/compatible type</title>
    <ns>0</ns>
    <id>13835</id>
    <redirect title="c/language/type" />
    <revision>
      <id>74025</id>
      <timestamp>2014-11-26T22:13:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[c/language/type#Compatible_types]]</text>
      <sha1>lh5vz9escf6hlk34rxzfv4khu2zx46l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/compound literal</title>
    <ns>0</ns>
    <id>13899</id>
    <revision>
      <id>85084</id>
      <parentid>77945</parentid>
      <timestamp>2016-03-30T10:06:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corrected a comment</comment>
      <text xml:space="preserve" bytes="4316">{{title|compound literals}}
{{c/language/expressions/navbar}}

Constructs an unnamed object of specified type in-place, used when a variable of array, struct, or union type would be needed only once.

===Syntax===
{{sdsc begin}}
{{sdsc | notes={{mark since c99}} | {{ttb|(}} {{spar|type}} {{ttb|)}} {{ttb|{ }} {{spar|initializer-list}} {{ttb|} }} }}
{{sdsc end}}
where
{{par begin}}
{{par | {{spar|type}} | a {{rlp|type#Type_names|type name}} specifying any complete object type or an array of unknown size, but not a VLA}}
{{par | {{spar|initializer-list}} | list of initializers suitable for {{rlp|initialization}} of an object of {{spar|type}} }}
{{par end}}

===Explanation===
The compound literal expression constructs an unnamed object of the type specified by {{spar|type}} and initializes it as specified by {{spar|initializer-list}}.

The type of the compound literal is {{spar|type}} (except when {{spar|type}} is an array of unknown size; its size is deduced from the {{spar|initializer-list}} as in {{rlp|array initialization}}).

The value category of a compound literal is {{rlp|value category|lvalue}} (its address can be taken).

The unnamed object to which the compound literal evaluates has static {{rlp|storage duration}} if the compound literal occurs at file scope and automatic {{rlp|storage duration}} if the compound literal occurs at block scope (in which case the object's {{rlp|lifetime}} ends at the end of the enclosing block).

===Notes===
Compound literals of const-qualified character or wide character array types may share storage with {{rlp|string literal}}s.
{{source|1=
(const char []){&quot;abc&quot;} == &quot;abc&quot; // might be 1 or 0, implementation-defined
}}

Each compound literal creates only a single object in its scope:
{{source|1=
int f (void)
{
    struct s {int i;} *p = 0, *q;
    int j = 0;
again:
    q = p, p = &amp;((struct s){ j++ });
    if (j &lt; 2) goto again; // note; if a loop were used, it would end scope here, 
                           // which would terminate the lifetime of the compound literal
                           // leaving p as a dangling pointer
    return p == q &amp;&amp; q-&gt;i == 1; // always returns 1
}
}}

Because compound literals are unnamed, a compound literal cannot reference itself (a named struct can include a pointer to itself)

Although the syntax of a compound literal is similar to a {{rlp|cast}}, the important distinction is that a cast is a non-lvalue expression while a compound literal is an lvalue.

===Example===
{{example|code=
int *p = (int[]){2, 4}; // creates an unnamed static array of type int[2]
                        // initializes the array to the values {2, 4}
                        // creates pointer p to point at the first element of the array
const float *pc = (const float []){1e0, 1e1, 1e2}; // read-only compound literal

int main(void)
{
    int n = 2, *p = &amp;n;
    p = (int [2]){*p}; // creates an unnamed automatic array of type int[2]
                       // initializes the first element to the value formerly held in *p
                       // initializes the second element to zero
                       // stores the address of the first element in p

    struct point {double x,y;};
    void drawline1(struct point from, struct point to);
    void drawline2(struct point *from, struct point *to);
    drawline1((struct point){.x=1, .y=1},  // creates two structs with block scope 
              (struct point){.x=3, .y=4}); // and calls drawline1, passing them by value
    drawline2(&amp;(struct point){.x=1, .y=1},  // creates two structs with block scope 
              &amp;(struct point){.x=3, .y=4}); // and calls drawline2, passing their addresses
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.2.5 | title=Compound literals | p=85-87}}
{{ref std c99}}
{{ref std | section=6.5.2.5 | title=Compound literals | p=75-77}}
{{ref std end}}

[[ar:c/language/compound_literal]]
[[cs:c/language/compound_literal]]
[[de:c/language/compound_literal]]
[[es:c/language/compound_literal]]
[[fr:c/language/compound_literal]]
[[it:c/language/compound_literal]]
[[ja:c/language/compound_literal]]
[[ko:c/language/compound_literal]]
[[pl:c/language/compound_literal]]
[[pt:c/language/compound_literal]]
[[ru:c/language/compound_literal]]
[[tr:c/language/compound_literal]]
[[zh:c/language/compound_literal]]</text>
      <sha1>rjxlreuz6jx5mfr4ht3lvuhyg94wega</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/conformance</title>
    <ns>0</ns>
    <id>15688</id>
    <revision>
      <id>87401</id>
      <timestamp>2016-08-20T11:31:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>definition of conformance</comment>
      <text xml:space="preserve" bytes="2153">{{title|Conformance}}
{{c/language/navbar}}
''Conformance'' has a three-fold definition:

* ''strictly conforming program'' - uses only well-defined language constructs, that is constructs with a single behavior. It excludes unspecified, undefined, or implementation-defined behavior, and does not exceed any minimum implementation limit.
* ''conforming program'' - acceptable to a conforming implementation.
* ''conforming implementation'' - A conforming hosted implementation shall accept any strictly conforming program. A conforming freestanding implementation shall accept any strictly conforming program in which the use of the features specified in the library clause (clause 7) is confined to the contents of the standard headers &lt;float.h&gt;, &lt;iso646.h&gt;, &lt;limits.h&gt;, &lt;stdalign.h&gt;, &lt;stdarg.h&gt;, &lt;stdbool.h&gt;, &lt;stddef.h&gt;, &lt;stdint.h&gt;, and &lt;stdnoreturn.h&gt;. A conforming implementation may have extensions (including additional library functions), provided they do not alter the behavior of any strictly conforming program.

===Explanation===
The standard does not define any minimum implementation limit on translation units. A hosted environment has an operating system; a freestanding environment does not. A program running in a hosted environment may use all features described in the library clause (clause 7); a program running in a freestanding environment may use a subset of library 
features required by clause 4.

===References===
{{ref std c11}}
{{ref std | section=4 | title=Conformance | p=8-9}}
{{ref std c99}}
{{ref std | section=4 | title=Conformance | p=7-8}}
{{ref std c89}}
{{ref std | section=1.7 | title=Compliance}}
{{ref std end}}

&lt;!--
===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/conformance | conformance}}
{{dsc end}}
--&gt;

[[ar:c/language/conformance]]
[[cs:c/language/conformance]]
[[de:c/language/conformance]]
[[es:c/language/conformance]]
[[fr:c/language/conformance]]
[[it:c/language/conformance]]
[[ja:c/language/conformance]]
[[ko:c/language/conformance]]
[[pl:c/language/conformance]]
[[pt:c/language/conformance]]
[[ru:c/language/conformance]]
[[tr:c/language/conformance]]
[[zh:c/language/conformance]]</text>
      <sha1>rdhnfrjbuz94z26y4egwtqicv1xd8d9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/const</title>
    <ns>0</ns>
    <id>13831</id>
    <revision>
      <id>79114</id>
      <parentid>76203</parentid>
      <timestamp>2015-06-24T11:25:44Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="5374">{{title|const type qualifier}}
{{c/language/declarations/navbar}}

Each individual type in the C {{rlp|type|type system}} has several ''qualified'' versions of that type, corresponding to one, two, or all three of the ''const'', {{rlp|volatile}}, and, for pointers to object types, {{rlp|restrict}} qualifiers. This page describes the effects of the ''const'' qualifier.

Objects {{rlp|declarations|declared}} with const-qualified types may be placed in read-only memory by the compiler, and if the address of a const object is never taken in a program, it may not be stored at all. 

{{tt|const}} semantics apply to {{rlp|value category|lvalue}} expressions only; whenever a const lvalue expression is used in context that does not require an lvalue, its {{tt|const}} qualifier is lost (note that volatile qualifier, if present, isn't lost).

The lvalue expressions that designate objects of const-qualified type and the lvalue expressions that designate objects of struct or union type with at least one member of const-qualified type (including members of recursively contained aggregates or unions), are not ''modifiable lvalues''. In particular, they are not assignable:
{{source|1=
const int n = 1; // object of const type
n = 2; // error: the type of n is const-qualified

int x = 2; // object of unqualified type
const int* p = &amp;x;
*p = 3; // error: the type of the lvalue *p is const-qualified
 
struct {int a; const int b; } s1 = {.b=1}, s2 = {.b=2};
s1 = s2; // error: the type of s1 is unqualified, but it has a const member
}}

A member of a const-qualified structure or union type acquires the qualification of the type it belongs to (both when accessed using the {{ttb|.}} operator or the {{ttb|-&gt;}} operator).
{{source|1=
struct s { int i; const int ci; } s;
// the type of s.i is int, the type of s.ci is const int
const struct s cs;
// the types of cs.i and cs.ci are both const int
}}

If an array type is declared with the const type qualifier (through the use of {{rlp|typedef}}), the array type is not const-qualified, but its element type is. If a function type is declared with the const type qualifier (through the use of {{rlp|typedef}}), the behavior is undefined.
{{source|1=
typedef int A[2][3];
const A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of const int
int* pi = a[0]; // Error: a[0] has type const int*
}}

{{rev begin}}
{{rev|since=c99|
const-qualified compound literals do not necessarily designate distinct objects; they may share storage with other compound literals and with string literals that happen to have the same or overlapping representation.
{{source|1=
const int* p1 = (const int[]){1,2,3};
const int* p2 = (const int[]){2,3,4}; // the value of p2 may equal p1+1
bool b = &quot;abd&quot; == (const char[]){&quot;abc&quot;}; // the value of b may be 1
}}
}}
{{rev end}}

A pointer to an non-const type can be implicitly converted to a pointer to const-qualified version of the same or {{rlp|compatible type}}. The reverse conversion can be performed with a cast expression.
{{source|1=
int* p = 0;
const int* cp = p; // OK: adds qualifiers (int to const int)
p = cp; // Error: discards qualifiers (const int to int)
p = (int*)cp; // OK: cast
}}
Note that pointer to pointer to {{tt|T}} is not convertible to pointer to pointer to {{tt|const T}}; for two types to be compatible, their qualifications must be identical.
{{source|1=
char *p = 0;
const char **cpp = &amp;p; // Error: char* and const char* are not compatible types
char * const *pcp = &amp;p; // OK, adds qualifiers (char* to char*const)
}}

Any attempt to modify an object whose type is const-qualified results in undefined behavior.
{{source|1=
const int n = 1; // object of const-qualified type
int* p = (int*)&amp;n;
*p = 2; // undefined behavior
}}

{{rev begin}}
{{rev|since=c99|
In a function declaration, the keyword {{tt|const}} may appear inside the square brackets that are used to declare an array type of a function parameter. It qualifies the pointer type to which the array type is transformed.

The following two declarations declare the same function:
{{source|1=
void f(double x[const], const double y[const]);
void f(double * const x, const double * const y);
}}
}}
{{rev end}}
===Keywords===

{{ltt|cpp/keyword/const}}

===Notes===
C adopted the ''const'' qualifier from C++, but unlike in C++, expressions of const-qualified type in C are not {{rlp|constant expression}}s; they may not be used as {{rlp|switch|case}} labels or to initialize {{rlp|static storage duration|static}} and {{rlp|thread storage duration|thread}} storage duration objects, {{rlp|enum|enumerators}}, or {{rlp|bit field}} sizes. When they are used as {{rlp|array}} sizes, the resulting arrays are VLAs.

===References===
{{ref std c11}}
{{ref std | section=6.7.3 | title=Type qualifiers | p=121-123}}
{{ref std c99}}
{{ref std | section=6.7.3 | title=Type qualifiers | p=108-110}}
{{ref std c89}}
{{ref std | section=3.5.3 | title=Type qualifiers}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/cv | cv (const and volatile) type qualifiers}}
{{dsc end}}

[[ar:c/language/const]]
[[cs:c/language/const]]
[[de:c/language/const]]
[[es:c/language/const]]
[[fr:c/language/const]]
[[it:c/language/const]]
[[ja:c/language/const]]
[[ko:c/language/const]]
[[pl:c/language/const]]
[[pt:c/language/const]]
[[ru:c/language/const]]
[[tr:c/language/const]]
[[zh:c/language/const]]</text>
      <sha1>m2wb49i2wm2prwm1awdka9ol3gl8aah</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/constant expression</title>
    <ns>0</ns>
    <id>13898</id>
    <revision>
      <id>79147</id>
      <parentid>76157</parentid>
      <timestamp>2015-06-25T11:21:46Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="6131">{{title|Constant expressions}}
{{c/language/expressions/navbar}}
Several varieties of expressions are known as ''constant expressions''

===Preprocessor constant expression===
The expression following [[c/preprocessor/conditional|#if or #elif]] must expand to
* {{rlp|expressions#Operators|operators}} other than {{rlp|operator assignment|assignment}}, {{rlp|operator_incdec|increment, decrement}}, {{rlp|operator_other#Function_call|function-call}}, or {{rlp|operator_other#Comma_operator|comma}} whose arguments are preprocessor constant expressions
* {{rlp|integer constant}}s
* {{rlp|character constant}}s
* the special preprocessor operator {{tt|defined}}

Character constants, when evaluated in {{tt|#if}}-expressions, may be interpreted in the source
character set, the execution character set, or some other implementation-defined character set.
{{rev begin}}
{{rev|since=c99|
Integer arithmetic in {{tt|#if}}-expressions is performed using the semantics of {{lc|intmax_t}} for signed types and {{lc|uintmax_t}} for unsigned types.
}}
{{rev end}}

===Integer constant expression===
An integer constant expression is an expression that consists only of
* {{rlp|expressions#Operators|operators}} other than {{rlp|operator assignment|assignment}}, {{rlp|operator_incdec|increment, decrement}}, {{rlp|operator_other#Function_call|function-call}}, or {{rlp|operator_other#Comma_operator|comma}}, except that {{rlp|cast}} operators can only cast arithmetic types to integer types
* {{rlp|integer constant}}s
* {{rlp|enum|enumeration constants}}
* {{rlp|character constant}}s
* {{rlp|floating constant}}s, but only if they are immediately used as operands of casts to integer type
* {{rlp|sizeof}} operators {{rev inl|since=c99|whose operands are not VLA}}

{{rev begin}}
{{rev|since=c11|
* {{rlp|_Alignof}} operators
}}
{{rev end}}

Integer constant expressions are evaluated at compile time. The following contexts require expressions that are known as ''integer constant expressions':
* The size of a {{rlp|bit field}}.
* The value of an {{rlp|enum|enumeration constant}}
* The {{tt|case}} label of a {{rlp|switch|switch statement}}
* The size of a {{rev inl|since=c99| non-VLA}} array
* Integer to pointer implicit {{rlp|conversion}}.

{{rev begin}}
{{rev|since=c99|
* The index in an {{rlp|array initialization|array designator}}
}}
{{rev begin}}
{{rev|since=c11|
* The first argument of {{lc|_Static_assert}}
* The integer argument of {{lc|_Alignas}}
}}
{{rev end}}

===Static initializer===
Expressions that are used in the {{rlp|initialization|initializers}} of objects with static and thread_local {{rlp|storage duration}} must be expressions that may be one of the following

@1@ ''arithmetic constant expression'', which is an expression of any arithmetic type that consists of
:* {{rlp|expressions#Operators|operators}} other than {{rlp|operator assignment|assignment}}, {{rlp|operator_incdec|increment, decrement}}, {{rlp|operator_other#Function_call|function-call}}, or {{rlp|operator_other#Comma_operator|comma}}, except that {{rlp|cast}} operators must be converting arithmetic types to other arithmetic types
:* {{rlp|integer constant}}s
:* {{rlp|floating constant}}s
:* {{rlp|enum|enumeration constants}}
:* {{rlp|character constant}}s
:* {{rlp|sizeof}} operators {{rev inl|since=c99|whose operands are not VLA}}

{{rev begin}}
{{rev|since=c11|
:* {{rlp|_Alignof}} operators
}}
{{rev end}}

@2@ the null pointer constant {{lc|NULL}}
@3@ ''address constant expression'', which is 
:* a null pointer
:* {{rlp|value category|lvalue}} designating an object of static {{rlp|storage duration}} or a function designator, converted to a pointer either
::* by using the unary address-of operator
::* by casting an integer constant to a pointer
::* by array-to-pointer or function-to-pointer implicit {{rlp|conversion}}
@4@ ''address constant expression'' of some complete object type, plus or minus an ''integer constant expression''

Unlike with integer constant expressions, static initializer expressions are not required to be evaluated at compile time; the compiler is at liberty to turn such initializers into executable code which is invoked prior to program startup.

{{source|1=
static int i = 2 {{!!}} 1 / 0; // initializes i to value 1
}}
{{todo|other mini-examples}}

The value of a floating-point static initializer is never less accurate than the value of the same expression executed at run time, but it may be better.

===Floating-point constant expressions===

Arithmetic constant expressions of floating-point types that are not used in static initializers are always evaluated as-if during run-time and are affected by the [[c/numeric/fenv/FE_round|current rounding]] (if [[c/preprocessor/impl|FENV_ACCESS]] is on) and report errors as specified in [[c/numeric/math/math_errhandling|math_errhandling]].
{{source|1=
void f(void)
{
#pragma STDC FENV_ACCESS ON
    static float x = 0.0/0.0; // static initializer: does not raise an exception
    float w[] = { 0.0/0.0 }; // raises an exception
    float y = 0.0/0.0; // raises an exception
    double z = 0.0/0.0; // raises an exception
}
}}

===Notes===
If an expression evaluates to a value that is not representable by its type, it cannot be used as a constant expression.

===References===
{{ref std c11}}
{{ref std | section=6.6 | title=Constant expressions | p=106-107}}
{{ref std c99}}
{{ref std | section=6.6 | title=Constant expressions | p=95-96}}
{{ref std c89}}
{{ref std | section=3.4 | title=CONSTANT EXPRESSIONS}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/constant expression | Constant expressions}}
{{dsc end}}

[[ar:c/language/constant_expression]]
[[cs:c/language/constant_expression]]
[[de:c/language/constant_expression]]
[[es:c/language/constant_expression]]
[[fr:c/language/constant_expression]]
[[it:c/language/constant_expression]]
[[ja:c/language/constant_expression]]
[[ko:c/language/constant_expression]]
[[pl:c/language/constant_expression]]
[[pt:c/language/constant_expression]]
[[ru:c/language/constant_expression]]
[[tr:c/language/constant_expression]]
[[zh:c/language/constant_expression]]</text>
      <sha1>b0jxecjfre8aem3iet9ei5vfhmx3gjh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/continue</title>
    <ns>0</ns>
    <id>6043</id>
    <revision>
      <id>79090</id>
      <parentid>76143</parentid>
      <timestamp>2015-06-23T11:10:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2350">{{title|continue statement}}
{{c/language/statements/navbar}}
Causes the remaining portion of the enclosing {{rlp|for}}, {{rlp|while}} or {{rlp|do | do-while}} loop body to be skipped.

Used when it is otherwise awkward to ignore the remaining portion of the loop using conditional statements.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|continue}} {{ttb|;}} }}
{{sdsc end}}

===Explanation===
The {{tt|continue}} statement causes a jump, as if by {{rlp|goto}}, to the end of the loop body (it may only appear within the loop body of {{rlp|for}}, {{rlp|while}}, and {{rlp|do|do-while}} loops).

For {{rlp|while}} loop, it acts as
{{source|1=
while (/* ... */) {
   // ... 
   continue; // acts as goto contin;
   // ... 
   contin:;
}
}}

For {{rlp|do|do-while}} loop, it acts as:
{{source|1=
do {
    // ... 
    continue; // acts as goto contin;
    // ... 
    contin:;
} while (/* ... */);
}}

For {{rlp|for}} loop, it acts as:
{{source|1=
for (/* ... */) {
    // ... 
    continue; // acts as goto contin;
    // ... 
    contin:;
}
}}

===Keywords===

{{ltt|c/keyword/continue}}

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
 
int main(void) 
{
    for (int i = 0; i &lt; 10; i++) {
        if (i != 5) continue;
        printf(&quot;%d &quot;, i);       //this statement is skipped each time i!=5
    }
 
    printf(&quot;\n&quot;);
 
    for (int j = 0; j &lt; 2; j++) {
        for (int k = 0; k &lt; 5; k++) { //only this loop is affected by continue
            if (k == 3) continue;
            printf(&quot;%d%d &quot;, j, k);    //this statement is skipped each time k==3
        }
    }
}

 | output=
5
00 01 02 04 10 11 12 14
}}

===References===
{{ref std c11}}
{{ref std | section=6.8.6.2 | title=The continue statement | p=153}}
{{ref std c99}}
{{ref std | section=6.8.6.2 | title=The continue statement | p=138}}
{{ref std c89}}
{{ref std | section=3.6.6.2 | title=The continue statement}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/continue | continue statement}}
{{dsc end}}

[[ar:c/language/continue]]
[[cs:c/language/continue]]
[[de:c/language/continue]]
[[es:c/language/continue]]
[[fr:c/language/continue]]
[[it:c/language/continue]]
[[ja:c/language/continue]]
[[ko:c/language/continue]]
[[pl:c/language/continue]]
[[pt:c/language/continue]]
[[ru:c/language/continue]]
[[tr:c/language/continue]]
[[zh:c/language/continue]]</text>
      <sha1>9axaj5lj1clja4zgymip7dce43pjbun</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/conversion</title>
    <ns>0</ns>
    <id>13920</id>
    <revision>
      <id>85297</id>
      <parentid>85289</parentid>
      <timestamp>2016-04-14T20:07:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>let's try &quot;value transformation&quot;</comment>
      <text xml:space="preserve" bytes="21958">{{title|Implicit conversions}}
{{c/language/expressions/navbar}}
When an expression is used in the context where a value of a different type is expected, ''conversion'' may occur:
{{source|1=
int n = 1L; // expression 1L has type long, int is expected
n = 2.1; // expression 2.1 has type double, int is expected
char *p = malloc(10); // expression malloc(10) has type void*, char* is expected
}}

Conversions take place in the following situations:

===Conversion as if by assignment===
* In the {{rlp|operator_assignment|assignment}} operator, the value of the right-hand operand is converted to the unqualified type of the left-hand operand.
* In {{rlp|scalar initialization}}, the value of the initializer expression is converted to the unqualified type of the object being initialized
* In a {{rlp|operator_other|function-call expression}}, to a function that has a prototype, the value of each argument expression is converted to the type of the unqualified declared types of the corresponding parameter
* In a {{rlp|return|return statement}}, the value of the operand of {{tt|return}} is converted to an object having the return type of the function

Note that actual assignment, in addition to the conversion, also removes extra range and precision from floating-point types and prohibits overlaps; those characteristics do not apply to conversion as if by assignment.

===Default argument promotions===
In a {{rlp|operator_other#Function_call|function call expression}} when the call is made to
@1@ a {{rlp|function declaration|function without a prototype}}
@2@ a {{rlp|variadic|variadic function}}, where the argument expression is one of the trailing arguments that are matched against the ellipsis parameter

Each argument of integer type undergoes ''integer promotion'' (see below), and each argument of type {{c|float}} is implicitly converted to the type {{c|double}}
{{source|1=
int add_nums(int count, ...);
int sum = add_nums(2, 'c', true); // add_nums is called with three ints: (2, 99, 1)
}}

Note that {{c|float complex}} and {{c|float imaginary}} are not promoted to {{c|double complex}} and {{c|double imaginary}} in this context.

===Usual arithmetic conversions===
The arguments of the following arithmetic operators undergo implicit conversions for the purpose of obtaining the ''common real type'', which is the type in which the calculation is performed:
* {{rlp|operator arithmetic|binary arithmetic}} *, /, %, +, -
* {{rlp|operator comparison|relational operators}} &lt;, &gt;, &lt;=, &gt;=, ==, !=
* {{rlp|operator arithmetic|binary bitwise arithmetic}} &amp;, ^, |, 
* the {{rlp|operator other|conditional operator}} ?:

@1@ If one operand is {{c|long double}}, {{c|long double complex}}, or {{c|long double imaginary}}, the other operand is implicitly converted as follows:
:*integer or real floating type to {{c|long double}}
:*complex type to {{c|long double complex}}
:*imaginary type to {{c|long double imaginary}}
@2@ Otherwise, if one operand is {{c|double}}, {{c|double complex}}, or {{c|double imaginary}}, the other operand is implicitly converted as follows:
:*integer or real floating type to {{c|double}}
:*complex type to {{c|double complex}}
:*imaginary type to {{c|double imaginary}}
@3@ Otherwise, if one operand is {{c|float}}, {{c|float complex}}, or {{c|float imaginary}}, the other operand is implicitly converted as follows:
:*integer type to {{c|float}} (the only real type possible is float, which remains as-is)
:*complex type remains {{c|float complex}}
:*imaginary type remains {{c|float imaginary}}
@4@ Otherwise, both operands are integers. In that case, 
:First of all, both operands undergo ''integer promotions'' (see below). Then
:* If the types after promotion are the same, that type is the common type
:* Otherwise, if both operands after promotion have the same signedness (both signed or both unsigned), the operand with the lesser ''conversion rank'' (see below) is implicitly converted to the type of the operand with the greater ''conversion rank''
:* Otherwise, the signedness is different: If the operand with the unsigned type has ''conversion rank'' greater or equal than the rank of the type of the signed operand, then the operand with the signed type is implicitly converted to the unsigned type
:* Otherwise, the signedness is different and the signed operand's rank is greater than unsigned operand's rank. In this case, if the signed type can represent all values of the unsigned type, then the operand with the unsigned type is implicitly converted to the type of the signed operand.
:* Otherwise, both operands undergo implicit conversion to the unsigned type counterpart of the signed operand's type.
{{source|1=
1.f + 20000001; // int is converted to float, giving 20000000.00
                // addition and then rounding to float gives 20000000.00
(char)'a' + 1L; // First, char is promoted back to int.
                // this is signed + signed case, different rank
                // int is converted to long, the result is 98 signed long
2u - 10; // signed / unsigned, same rank
         // 10 is converted to unsigned, unsigned math is modulo UINT_MAX+1
         // assuming 32 bit ints, result is 4294967288 of type unsigned int (aka UINT_MAX-7)
0UL - 1LL; // signed/unsigned diff rank, rank of signed is greater.
           // If sizeof(long) == sizeof(long long), signed cannot represent all unsigned
           // this is the last case: both operands are converted to unsigned long long
           // the result is 18446744073709551615 (ULLONG_MAX) of type unsigned long long
}}

The result type is determined as follows:
* if both operands are complex, the result type is complex
* if both operands are imaginary, the result type is imaginary 
* if both operands are real, the result type is real
* if the two floating-point operands have different type domains (complex vs. real, complex vs imaginary, or imaginary vs. real), the result type is complex
{{source|1=
double complex z = 1 + 2*I;
double f = 3.0;
z + f; // z remains as-is, f is converted to double, the result is double complex
}}

As always, the result of a floating-point operator may have greater range and precision than is indicated by its type (see {{lc|FLT_EVAL_METHOD}}).

Note: real and imaginary operands are not implicitly converted to complex because doing so would require extra computation, while producing undesirable results in certain cases involving infinities, NaNs and signed zeros. For example, if reals were converted to complex, 2.0×(3.0+i∞)  would evaluate as (2.0+i0.0)×(3.0+i∞) ⇒ (2.0×3.0–0.0×∞) + i(2.0×∞+0.0×3.0) ⇒ NaN+i∞ rather than the correct 6.0+i∞. If imaginaries were converted to complex, i2.0×(∞+i3.0) would evaluate as (0.0+i2.0) × (∞+i3.0) ⇒ (0.0×∞ – 2.0×3.0) + i(0.0×3.0 + 2.0×∞) ⇒ NaN + i∞ instead of –6.0 + i∞.

Note: regardless of usual arithmetic conversions, the calculation may always be performed in a narrower type than specifier by these rules under the {{rlp|as if|as-if rule}} 

===Value transformations===
====Lvalue conversion====
Any {{rlp|value category|lvalue expression}} of any non-array type, when used in any context other than 
* as the operand of the {{rlp|operator_member_access|address-of operator}} (if allowed)
* as the operand of the pre/post {{rlp|operator_incdec|increment and decrement operators}}.
* as the left-hand operand of the {{rlp|operator_member_access|member access}} (dot) operator.
* as the left-hand operand of the {{rlp|operator_assignment|assignment and compound assignment}} operators.
* as the operand of {{rlp|sizeof}}
&lt;!-- note: appears in n1570, but not in C11 as published * as the operand of {{rlp|_Alignof}} --&gt;

undergoes ''lvalue conversion'': the type remains the same, but loses {{rlp|const}}/{{rlp|volatile}}/{{rlp|restrict}}-qualifiers and {{rlp|atomic}} properties, if any. The value remains the same, but loses its lvalue properties (the address may no longer be taken). 

If the lvalue has incomplete type, the behavior is undefined.

If the lvalue designates an object of automatic storage duration whose address was never taken and if that object was uninitialized (not declared with an initializer and no assignment to it has been performed prior to use), the behavior is undefined.

This conversion models the memory load of the value of the object from its location.
{{source|1=
volatile int n = 1;
int x = n;            // lvalue conversion on n reads the value of n
volatile int* p = &amp;n; // no lvalue conversion: does not read the value of n
}}

====Array to pointer conversion====
Any {{rlp|value category|lvalue expression}} of {{rlp|array|array type}}, when used in any context other than 
* as the operand of the {{rlp|operator_member_access|address-of operator}}
* as the operand of {{rlp|sizeof}}
* as the string literal used for {{rlp|array initialization}} 
&lt;!-- note: appears in n1570, but not in C11 as published * as the operand of {{rlp|_Alignof}} --&gt;

undergoes a conversion to the non-lvalue pointer to its first element.

If the array was declared {{rlp|storage duration|register}}, the behavior is undefined.

{{source|1=
int a[3], b[3][4];
int* p = a;      // conversion to &amp;a[0]
int (*q)[4] = b; // conversion to &amp;b[0]
}}
====Function  to pointer conversion====
Any function designator expression, when used in any context other than 
* as the operand of the {{rlp|operator_member_access|address-of operator}}
* as the operand of {{rlp|sizeof}}
&lt;!-- note: appears in n1570, but not in C11 as published * as the operand of {{rlp|_Alignof}} --&gt;

undergoes a conversion to the non-lvalue pointer to the function designated by the expression.

{{source|1=
int f(int);
int (*p)(int) = f; // conversion to &amp;f
(***p)(1); // repeated dereference to f and conversion back to &amp;f
}}

===Implicit conversion semantics===
Implicit conversion, whether ''as if by assignment'' or a ''usual arithmetic conversion'', consists of two stages:
@1@ value transformation (if applicable)
@2@ one of the conversions listed below (if it can produce the target type)

====Compatible types====
Conversion of a value of any type to any {{rlp|types#Compatible_type|compatible type}} is always a no-op and does not change the representation.
{{source|1=
uint8_t (*a)[10];         // if uint8_t is a typedef to unsigned char
unsigned char (*b)[] = a; // then these pointer types are compatible
}}

====Integer promotions====
Integer promotion is the implicit conversion of a value of any integer type with ''rank'' less or equal to ''rank'' of int or of a {{rlp|bit field}} of type _Bool, int, signed int, unsigned int, to the value of type {{c|int}} or {{c|unsigned int}}

If {{c|int}} can represent the entire range of values of the original type (or the range of values of the original bit field), the value is converted to type {{c|int}}. Otherwise the value is converted to {{c|unsigned int}}.

Integer promotions preserve the value, including the sign:
{{source|1=
int main(void) {
   void f(); // old-style function declaration
   char x = 'a'; // integer conversion from int to char
   f(x); // integer promotion from char back to int
}
void f(x) int x; {} // the function expects int
}}

''rank'' above is a property of every {{rlp|type|integer type}} and is defined as follows:
@1@ the ranks of all signed integer types are different and increase with their precision: rank of signed char &lt; rank of short &lt; rank of int &lt; rank of long int &lt; rank of long long int
@2@ the ranks of all signed integer types equal the ranks of the corresponding unsigned integer types
@3@ the rank of any standard integer type is greater than the rank of any extended integer type of the same size (that is, rank of __int64 &lt; rank of long long int, but rank of long long &lt; rank of __int128 due to the rule {{v|1}})
@4@ rank of char equals rank of signed char and rank of unsigned char
@5@ the rank of _Bool is less than the rank of any other standard integer type
@6@ the rank of any enumerated type equals the rank of its compatible integer type
@7@ ranking is transitive: if rank of T1 &lt; rank of T2 and rank of T2 &lt; rank of T3 then rank of T1 &lt; rank of T3
@8@ any aspects of relative ranking of extended integer types not covered above are implementation defined

Note: integer promotions are applied only
* as part of ''usual arithmetic conversions'' (see above)
* as part of ''default argument promotions'' (see above)
* to the operand of the unary arithmetic operators + and -
* to the operand of the unary bitwise operator ~
* to both operands of the shift operators &lt;&lt; and &gt;&gt;

====Boolean conversion====
A value of any scalar type can be implicitly converted to _Bool. The values that compare equal to zero are converted to {{c|0}}, all other values are converted to {{c|1}}
{{source|1=
bool b1 = 0.5;              // b1 == 1 (0.5 converted to int would be zero)
bool b2 = 2.0*_Imaginary_I; // b2 == 1 (but converted to int would be zero)
bool b3 = 0.0 + 3.0*I;      // b3 == 1 (but converted to int would be zero)
bool b4 = 0.0/0.0;          // b4 == 1 (NaN does not compare equal to zero)
}}

====Integer conversions====
A value of any integer type can be implicitly converted to any other integer type. Except where covered by promotions and boolean conversions above, the rules are:

* if the target type can represent the entire range of values of the source type, the value is unchanged
* otherwise, if the target type is unsigned, the value {{math|2{{su|p=b}}}}, where {{math|b}} is the number of bits in the target type, is repeatedly subtracted or added to the source value until the result fits in the target type. In other words, unsigned integers implement modulo arithmetic.
* otherwise, if the target type is signed, the behavior is implementation-defined (which may include raising a signal)
{{source|1=
char x = 'a'; // int -&gt; char, result unchanged
unsigned char n = -123456; // target is unsigned, result is 192 (that is, -123456+483*256)
signed char m = 123456;    // target is signed, result is implementation-defined
}}

====Real floating-integer conversions====
A finite value of any real floating type can be implicitly converted to any integer type. Except where covered by boolean conversion above, the rules are:
* The fractional part is discarded (truncated towards zero).
:* If the resulting value can be represented by the target type, that value is used
:* otherwise, the behavior is undefined 

{{source|1=
int n = 3.14; // n == 3
int x = 1e10; // undefined behavior for 32-bit int
}}

A value of any integer type can be implicitly converted to any real floating type. 
* if the value can be represented exactly by the target type, it is unchanged
* if the value can be represented, but cannot be represented exactly, the result is the nearest higher or the nearest lower value (in other words, rounding direction is implementation-defined), although if IEEE arithmetic is supported, rounding is to nearest. It is unspecified whether {{lc|FE_INEXACT}} is raised in this case.
* if the value cannot be represented, the behavior is undefined, although if IEEE arithmetic is supported, {{lc|FE_INVALID}} is raised and the result value is unspecified.

The result of this conversion may have greater range and precision than its target type indicates (see {{lc|FLT_EVAL_METHOD}}.

If control over {{lc|FE_INEXACT}} is needed in floating-to-integer conversions, {{lc|rint}} and {{lc|nearbyint}} may be used.

{{source|1=
double d = 10; // d = 10.00
float f = 20000001; // f = 20000000.00 (FE_INEXACT)
float x = 1+(long long)FLT_MAX; // undefined behavior
}}

====Real floating point conversions====
A value of any real floating type can be implicitly converted to any other real floating type.
* If the value can be represented by the target type exactly, it is unchanged
* if the value can be represented, but cannot be represented exactly, the result is the nearest higher or the nearest lower value (in other words, rounding direction is implementation-defined), although if IEEE arithmetic is supported, rounding is to nearest
* if the value cannot be represented, the behavior is undefined {{todo|check IEEE if appropriately-signed infinity is required}}

The result of this conversion may have greater range and precision than its target type indicates (see {{lc|FLT_EVAL_METHOD}}.
{{source|1=
double d = 0.1; // d = 0.1000000000000000055511151231257827021181583404541015625
float f = d;    // f = 0.100000001490116119384765625
float x = 2*(double)FLT_MAX; // undefined
}}

====Complex type conversions====
A value of any complex type can be implicitly converted to any other complex type. The real part and the imaginary part individually follow the conversion rules for the real floating types.
{{source|1=
double complex d = 0.1 + 0.1*I;
float complex f = d; // f is (0.100000001490116119384765625, 0.100000001490116119384765625)
}}

====Imaginary type conversions====
A value of any imaginary type can be implicitly converted to any other imaginary  type. The imaginary part follows the conversion rules for the real floating types.
{{source|1=
double imaginary d = 0.1*_Imaginary_I;
float imaginary f = d; // f is 0.100000001490116119384765625*I
}}

====Real-complex conversions====
A value of any real floating type can be implicitly converted to any complex type. 
* The real part of the result is determined by the conversion rules for the real floating types
* The imaginary part of the result is positive zero (or unsigned zero on non-IEEE systems)

A value of any complex type can be implicitly converted to any real floating type
* The real part is converted following the rules for the real floating types
* The imaginary part is discarded

Note: in complex-to-real conversion, a NaN in the imaginary part will not propagate to the real result.
{{source|1=
}}

====Real-imaginary conversions====
A value of any imaginary type can be implicitly converted to any real type (integer or floating-point). The result is always a positive (or unsigned) zero, except when the target type is _Bool, in which case boolean conversion rules apply.

A value of any real type can be implicitly converted to any imaginary type. The result is always a positive imaginary zero.
{{source|1=
}}

====Complex-imaginary conversions====
A value of any imaginary type can be implicitly converted to any complex type.
* The real part of the result is the positive zero
* The imaginary part of the result follows the conversion rules for the corresponding real types

A value of any complex type can be implicitly converted to any imaginary type
* The real part is discarded
* The imaginary part of the result follows the conversion rules for the corresponding real types
{{source|1=
double imaginary z = I * (3*I); // the complex result -3.0+0i loses real part, gives zero
}}

====Pointer conversions====
A pointer to {{c|void}} can be implicitly converted to and from any pointer to object type with the following semantics:
* If a pointer to object is converted to a pointer to void and back, its value compares equal to the original pointer.
* No other guarantees are offered
{{source|1=
int* p = malloc(10 * sizeof(int)); // malloc returns void*
}}

A pointer to an unqualified type may be implicitly converted to the pointer to qualified version of that type (in other words, {{rlp|const}}, {{rlp|volatile}}, and {{rlp|restrict}} qualifiers can be added. The original pointer and the result compare equal.
{{source|1=
int n;
const int* p = &amp;n; // &amp;n has type int*
}}

Any integer {{rlp|constant expression}} with value {{c|0}} as well as integer pointer expression with value zero cast to the type {{c|void*}} can be implicitly converted to any pointer type (both pointer to object and pointer to function). The result is the null pointer value of its type, guaranteed to compare unequal to any non-null pointer value of that type. This integer or void* expression is known as ''null pointer constant'' and the standard library provides one definition of this constant as the macro {{lc|NULL}} .
{{source|1=
int* p = 0;
double* q = NULL;
}}

===Notes===
Although signed integer overflow in any arithmetic operator is undefined behavior, overflowing a signed integer type in an integer conversion is merely unspecified behavior.

On the other hand, although unsigned integer overflow in any arithmetic operator (and in integer conversion) is a well-defined operation and follows the rules of modulo arithmetic, overflowing an unsigned integer in a floating-to-integer conversion is undefined behavior: the values of real floating type that can be converted to unsigned integer are the values from the open interval {{math|(-1; Unnn_MAX+1)}}.
{{source|1=
unsigned int n = -1.0; // undefined behavior
}}

Conversions between pointers and integers (except from pointer to _Bool and from integer constant expression with the value zero to pointer), between pointers to objects (except where either to or from is a pointer to void) and conversions between pointers to functions (except when the functions have compatible types) are never implicit and require a {{rlp|cast|cast operator}}.

There are no conversions (implicit or explicit) between pointers to functions and pointers to objects (including void*) or integers.

===References===
{{ref std c11}}
{{ref std | section=6.3 | title=Conversions | p=50-56}}
{{ref std c99}}
{{ref std | section=6.3 | title=Conversions | p=42-48}}
{{ref std c89}}
{{ref std | section=3.2 | title=Conversions}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/implicit_cast | Implicit conversions}}
{{dsc end}}

[[ar:c/language/conversion]]
[[cs:c/language/conversion]]
[[de:c/language/conversion]]
[[es:c/language/conversion]]
[[fr:c/language/conversion]]
[[it:c/language/conversion]]
[[ja:c/language/conversion]]
[[ko:c/language/conversion]]
[[pl:c/language/conversion]]
[[pt:c/language/conversion]]
[[ru:c/language/conversion]]
[[tr:c/language/conversion]]
[[zh:c/language/conversion]]</text>
      <sha1>jcds2j8syapa92ypdm4ecdkdoremwor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/conversions</title>
    <ns>0</ns>
    <id>13773</id>
    <revision>
      <id>73110</id>
      <timestamp>2014-10-14T16:47:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new page introducing conversions</comment>
      <text xml:space="preserve" bytes="817">{{title|Conversions}}
{{c/language/navbar}}

Several operators convert operand values from one type to another automatically. This subclause specifies the result required from such an implicit conversion, as well as those
that result from a cast operation (an explicit conversion).

Conversion of an operand value to a compatible type causes no change to the value or the representation.

===Notes===
Conversions performed by most ordinary operators appear here. Additional details, if any, about conversions performed by an operator appear in the discussion of that operator.

[[de:c/language/conversions]]
[[es:c/language/conversions]]
[[fr:c/language/conversions]]
[[it:c/language/conversions]]
[[ja:c/language/conversions]]
[[pt:c/language/conversions]]
[[ru:c/language/conversions]]
[[zh:c/language/conversions]]</text>
      <sha1>jb2njnyjt4t2bzngkohxk8uq1kbawuh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/declarations</title>
    <ns>0</ns>
    <id>13948</id>
    <revision>
      <id>85933</id>
      <parentid>82816</parentid>
      <timestamp>2016-06-05T14:36:43Z</timestamp>
      <contributor>
        <ip>114.222.140.23</ip>
      </contributor>
      <text xml:space="preserve" bytes="10280">{{title|Declarations}}
{{c/language/declarations/navbar}}

A ''declaration'' is a C language construct that introduces one or more  {{rlp|identifier}}s into the program and specifies their meaning and properties.

Declarations may appear in any scope. Each declaration ends with a semicolon (just like {{rlp|statements|a statement}}) and consists of two distinct parts:
{{sdsc begin}}
{{sdsc| {{spar|specifiers-and-qualifiers}} {{spar|declarators-and-initializers}} {{ttb|;}} }}
{{sdsc end}}
where
{{par begin}}
{{par|{{spar|specifiers-and-qualifiers}} | whitespace-separated list of, in any order,
* type specifiers:
:* {{c|void}}
:* the name of an {{rlp|arithmetic_types|arithmetic type}}
:* the name of an {{rlp|atomic|atomic type}}
:* a name earlier introduced by a {{rlp|typedef}} declaration
:* {{rlp|struct}}, {{rlp|union}}, or {{rlp|enum}} specifier
* zero or one storage-class specifiers: {{rlp|typedef}}, {{rlp|storage duration|auto, register, static, extern, thread_local}}
* zero or more type qualifiers: {{rlp|const}}, {{rlp|volatile}}, {{rlp|restrict}}, {{rlp|atomic|_Atomic}}
* (only when declaring functions), zero or more function qualifiers: {{rlp|inline}}, {{rlp|_Noreturn|noreturn}}
* zero or more alignment specifiers: {{rlp|alignas}}
}}{{par|{{spar|declarators-and-initializers}} | comma-separated list of {{spar|declarators}} (each declarator provides additional type information and/or the identifier to declare). Declarators may be accompanied by {{rlp|initialization|initializers}}. The {{rlp|enum}}, {{rlp|struct}}, and {{rlp|union}} declarations may omit {{spar|declarators}}, in which case they only introduce the enumeration constants and/or tags.
}}
{{par end}}

For example,
{{source|1=
int a, *b=NULL; // &quot;int&quot; is the type specifier,
                // &quot;a&quot; is a declarator
                // &quot;*b&quot; is a declarator and NULL is its initializer
const int *f(void); // &quot;int&quot; is the type specifier
                    // &quot;const&quot; is the type qualifier
                    // &quot;*f(void)&quot; is the declarator
enum COLOR {RED, GREEN, BLUE} c; // &quot;enum COLOR {RED, GREEN, BLUE}&quot; is the type specifier
                                 // &quot;c&quot; is the declarator
}}

The type of each identifier introduced in a declaration is determined by a combination of the type specified by the {{spar|type specifier}} and the type modifications applied by its {{spar|declarator}}.

===Declarators===
Each declarator is one of the following:
{{sdsc begin}}
{{sdsc|num=1| {{spar|identifier}} }}
{{sdsc|num=2| {{ttb|(}} {{spar|declarator}} {{ttb|)}} }}
{{sdsc|num=3| {{ttb|*}} {{spar|qualifiers}}{{mark optional}} {{spar|declarator}} }}
{{sdsc|num=4| {{spar|noptr-declarator}} {{ttb|[}} {{spar|static}}{{mark optional}} {{spar|qualifiers}}{{mark optional}} {{spar|expression}} {{ttb|]}} 
{{spar|noptr-declarator}} {{ttb|[}} {{spar|qualifiers}}{{mark optional}} {{ttb|*}} {{ttb|]}} 
}}
{{sdsc|num=5| {{spar|noptr-declarator}} {{ttb|(}} {{spar|parameters-or-identifiers}} {{ttb|)}} }}
{{sdsc end}}
@1@ the identifier that this declarator introduces.
@2@ any declarator may be enclosed in parentheses; this is required to introduce pointers to arrays and pointers to functions.
@3@ {{rlp|pointer|pointer declarator}}: the declaration {{c|S * cvr D}}; declares {{tt|D}} as a {{spar|cvr}}-qualified pointer to the type determined by {{tt|S}}.
@4@ {{rlp|array|array declarator}}: the declaration {{c|S D[N]}} declares {{tt|D}} as an array of {{tt|N}} objects of the type determined by {{tt|S}}. {{spar|noptr-declarator}} is any other declarator except unparenthesized pointer declarator.
@5@ {{rlp|function declaration|function declarator}}: the declaration {{c|S D(params)}} declared {{tt|D}} as a function taking the parameters {{tt|params}} and returning {{tt|S}}. {{spar|noptr-declarator}} is any other declarator except unparenthesized pointer declarator.

The reasoning behind this syntax is that when the identifier declared by the declarator appears in an expression of the same form as the declarator, it would have the type specified by the type specifier sequence.

{{source|1=
struct C {
    int member; // &quot;int&quot; is the type specifier 
                // &quot;member&quot; is the declarator
} obj, *pObj = &amp;obj;
// &quot;struct C { int member; }&quot; is the type specifier
// declarator &quot;obj&quot; defines an object of type struct C
// declarator &quot;*pObj&quot; declares a pointer to C,
// initializer &quot;= &amp;obj&quot; provides the initial value for that pointer
 
int a = 1, *p = NULL, f(void), (*pf)(double);
// the type specifier is &quot;int&quot;
// declarator &quot;a&quot; defines an object of type int
//   initializer &quot;=1&quot; provides its initial value
// declarator &quot;*p&quot; defines an object of type pointer to int
//   initializer &quot;=NULL&quot; provides its initial value
// declarator &quot;f(void)&quot; declares a function taking void and returning int
// declarator &quot;(*pf)(double)&quot; defines an object of type pointer
//   to function taking double and returning int
 
int (*(*foo)(double))[3] = NULL;
// the type specifier is int
// 1. declarator &quot;(*(*foo)(double))[3]&quot; is an array declarator:
//    the type declared is &quot;/nested declarator/ array of 3 int&quot;
// 2. the nested declarator is &quot;*(*foo)(double))&quot;, which is a pointer declarator
//    the type declared is &quot;/nested declarator/ pointer to array of 3 int&quot;
// 3. the nested declarator is &quot;(*foo)(double)&quot;, which is a function declarator
//    the type declared is &quot;/nested declarator/ function taking double and returning
//        pointer to array of 3 int&quot;
// 4. the nested declarator is &quot;(*foo)&quot; which is a (parenthesized, as required by
//        function declarator syntax) pointer declarator.
//    the type declared is &quot;/nested declarator/ pointer to function taking double
//        and returning pointer to array of 3 int&quot;
// 5. the nested declarator is &quot;foo&quot;, which is an identifier.
// The declaration introduces the identifier &quot;foo&quot; to refer to an object of type
// &quot;pointer to function taking double and returning pointer to array of 3 int&quot;
// The initializer &quot;= NULL&quot; provides the initial value of this pointer.

// If &quot;foo&quot; is used in an expression of the form of the declarator, its type would be
// int.
int x = (*(*foo)(1.2))[0];
}}

The end of every declarator that is not part of another declarator is a {{rlp|eval order|sequence point}}.

===Definitions===
A ''definition'' is a declaration that provides all information about the identifiers it declares.

Every declaration of an {{rlp|enum}} or a {{rlp|typedef}} is a definition.

For functions, a declaration that includes the function body is a {{rlp|function definition}}:
{{source|1=
int foo(double); // declaration
int foo(double x){ return x; } // definition
}}

For objects, a declaration that allocates storage ({{rlp|storage duration|automatic or static}}, but not extern) is a definition, while a declaration that does not allocate storage ({{rlp|extern|external declaration}}) is not.
{{source|1=
extern int n; // declaration
int n = 10; // definition
}}

For {{rlp|struct}}s and {{rlp|union}}s, declarations that specify the list of members are definitions:
{{source|1=
struct X; // declaration
struct X { int n; }; // definition
}}

===Redeclaration===
A declaration cannot introduce an identifier if another declaration for the same identifier in the same {{rlp|scope}} appears earlier, except that
* Declarations of objects {{rlp|storage duration|with linkage}} (external or internal) can be repeated:
{{source|1=
extern int x;
int x = 10; // OK
extern int x; // OK

static int n;
static int n = 10; // OK
static int n; // OK
}}
* Non-VLA {{rlp|typedef}} can be repeated as long as it names the same type:
{{source|1=
typedef int int_t; 
typedef int int_t; // OK
}}
* {{rlp|struct}} and {{rlp|union}} declarations can be repeated:
{{source|1=
struct X;
struct X { int n; };
struct X;
}}

These rules simplify the use of header files.

===Notes===
{{rev begin}}
{{rev|until=c99|
In C89, declarations within any {{rlp|statements#Compound_statements|compound statement}} (block scope) must appear in the beginning of the block, before any {{rlp|statements}}.

Also, in C89, functions returning {{c|int}} may be implicitly declared by the {{rlp|operator other#Function_call|function call operator}} and function parameters of type {{c|int}} do not have to be declared when using old-style {{rlp|function definition}}s.
}}
{{rev end}}

Empty declarators are prohibited; a declaration must {{rev inl|since=c11|be a {{rlp|_Static_assert|static_assert}} declaration or }} have at least one declarator or declare at least one struct/union/enum tag, or introduce at least one enumeration constant.

{{rev begin}}
{{rev|since=c99|
If any part of a declarator is a {{rlp|array|VLA array}} declarator, the entire declarator's type is known as &quot;variably-modified type&quot;. Types defined from variably-modified types are also variably modified (VM).

Declarations of any variably-modified types may appear only at {{rlp|scope|block scope}} or function prototype scope and cannot be members of structs or unions. Although {{rlp|array|VLA}} can only have automatic {{rlp|storage duration}}, a VM type such as a pointer to a VLA may be static. There are other restrictions on the use of VM types, see {{rlp|goto}}, {{rlp|switch}}. {{lc|longjmp}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c11|
{{rlp|_Static_assert|static_assert}}s are considered to be declarations from the point of view of the C grammar (so that they may appear anywhere a declaration may appear), but they do not introduce any identifiers and do not follow the declaration syntax.
}}
{{rev end}}

===References===
{{ref std c11}}
{{ref std | section=6.7 | title=Declarations | p=108-145}}
{{ref std c99}}
{{ref std | section=6.7 | title=Declarations | p=97-130}}
{{ref std c89}}
{{ref std | section=3.5 | title=Declarations}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/declarations | Declarations}}
{{dsc end}}

[[ar:c/language/declarations]]
[[cs:c/language/declarations]]
[[de:c/language/declarations]]
[[es:c/language/declarations]]
[[fr:c/language/declarations]]
[[it:c/language/declarations]]
[[ja:c/language/declarations]]
[[ko:c/language/declarations]]
[[pl:c/language/declarations]]
[[pt:c/language/declarations]]
[[ru:c/language/declarations]]
[[tr:c/language/declarations]]
[[zh:c/language/declarations]]</text>
      <sha1>97ulttdxi0afk655ge606ad1p8vfabu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/do</title>
    <ns>0</ns>
    <id>6042</id>
    <revision>
      <id>87456</id>
      <parentid>87453</parentid>
      <timestamp>2016-08-24T20:21:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>one param for the new note</comment>
      <text xml:space="preserve" bytes="3602">{{title|do-while loop}}
{{c/language/statements/navbar}}
Executes a {{spar|statement}} repeatedly until the value of {{spar|condition}} becomes false. The test takes place after each iteration.

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|do}} {{spar|statement}} {{ttb|while (}} {{spar|expression}} {{ttb|)}}  {{ttb|;}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|expression}} | any {{rlp|expressions|expression}} of {{rlp|type#Type_groups|scalar type}}. This expression is evaluated after each iteration, and if it compares equal to zero, the loop is exited.}}
{{par | {{spar|statement}} | any {{rlp|statements|statement}}, typically a compound statement, which is the body of the loop }}
{{par end}}

===Explanation===
A {{tt|do-while}} statement causes the {{spar|statement}} (also called ''the loop body'') to be executed repeatedly until the {{spar|expression}} (also called ''controlling expression'') compares equal to 0. The repetition occurs regardless of whether the loop body is entered normally or by a {{rlp|goto}} into the middle of {{spar|statement}}.

The evaluation of {{spar|expression}} takes place after each execution of {{spar|statement}} (whether entered normally or by a goto). If the controlling expression needs to be evaluated before the loop body, the {{rlp|while|while loop}} or the {{rlp|for|for loop}} may be used.

If the execution of the loop needs to be terminated at some point, {{rlp |break| break statement}} can be used as terminating statement. 

If the execution of the loop needs to be continued at the end of the loop body, {{rlp|continue | continue statement}} can be used as a shortcut.

{{c/language/forward_progress_note|do}}

{{rev begin}}
{{rev|since=c99|
As with all other selection and iteration statements, the do-while statement establishes {{rlp|scope|block scope}}: any identifier introduced in the {{spar|expression}} goes out of scope after the statement.
}}
{{rev end}}

===Notes===
Boolean and pointer expressions are often used as loop controlling expressions. The boolean value {{tt|false}} and the null pointer value of any pointer type compare equal to zero.

===Keywords===

{{ltt|c/keyword/do}},
{{ltt|c/keyword/while}}

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
enum { SIZE = 8 };
int main(void)
{
    // trivial example
    int array[SIZE], n = 0;
    do array[n++] = rand() % 2; // the loop body is a single expression statement
    while(n &lt; SIZE);
    puts(&quot;Array filled!&quot;);
    n = 0;
    do { // the loop body is a compound statement
        printf(&quot;%d &quot;, array[n]);
        ++n;
    } while (n &lt; SIZE);
    printf(&quot;\n&quot;);

    // the loop from K&amp;R itoa(). The do-while loop is used
    // because there is always at least one digit to generate
    int num = 1234, i=0;
    char s[10];
    do s[i++] = num % 10 + '0'; // get next digit in reverse order
    while ((num /= 10) &gt; 0);
    s[i] = '\0';
    puts(s);
}
 | p=true
 | output=
Array filled!
1 0 1 1 1 1 0 0
4321
}}

===References===
{{ref std c11}}
{{ref std | section=6.8.5.2 | title=The do statement | p=151}}
{{ref std c99}}
{{ref std | section=6.8.5.2 | title=The do statement | p=136}}
{{ref std c89}}
{{ref std | section=3.6.5.2 | title=The do statement}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/do | do-while loop}}
{{dsc end}}

[[ar:c/language/do]]
[[cs:c/language/do]]
[[de:c/language/do]]
[[es:c/language/do]]
[[fr:c/language/do]]
[[it:c/language/do]]
[[ja:c/language/do]]
[[ko:c/language/do]]
[[pl:c/language/do]]
[[pt:c/language/do]]
[[ru:c/language/do]]
[[tr:c/language/do]]
[[zh:c/language/do]]</text>
      <sha1>tr6rqev1bfiyt9gp7uckdd018uyee6e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/enum</title>
    <ns>0</ns>
    <id>13954</id>
    <revision>
      <id>83240</id>
      <parentid>79112</parentid>
      <timestamp>2016-01-27T14:21:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>as pointed out in http://stackoverflow.com/questions/35032667, the intro sentence is wrong (values is not restricted to enumerators)</comment>
      <text xml:space="preserve" bytes="5117">{{title|Enumerations}}
{{c/language/declarations/navbar}}

An ''enumerated type'' is a distinct {{rlp|type}} whose value is a value of its ''underlying type'' (see below), which includes the values of explicitly named constants (''enumeration constants'').

===Syntax===
Enumerated type is declared using the following ''enumeration specifier'' as the {{spar|type specifier}} in the {{rlp|declarations|declaration grammar}}:

{{sdsc begin}}
{{sdsc | {{ttb|enum}} {{spar|identifier}}{{mark optional}} {{ttb|{}} {{spar|enumerator-list}} {{ttb|}}} }}
{{sdsc end}}
where {{spar|enumerator-list}} is a comma-separated list{{rev inl|since=c99| (with trailing comma permitted)}} of {{spar|enumerators}}, each of which has the form:
{{sdsc begin}}
{{sdsc |num=1| {{spar|enumerator}}  }}
{{sdsc |num=2| {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constant-expression}} }}
{{sdsc end}}
where
{{par begin}}
{{par|{{spar|identifier}}, {{spar|enumerator}}| identifiers that are introduced by this declaration}}
{{par|{{spar|constant-expression}}| {{rlp|constant expression|integer constant expression}} whose value is representable as a value of type {{c|int}} }}
{{par end}}

As with {{rlp|struct}} or {{rlp|union}}, a declaration that introduced an enumerated type and one or more enumeration constants may also declare one or more objects of that type or type derived from it.
{{source|1=
enum color_t {RED, GREEN, BLUE}, c = RED, *cp = &amp;c;
 // introduces the type enum color_t
 // the integer constants RED, GREEN, BLUE 
 // the object c of type enum color_t
 // the object cp of type pointer to enum color_t
}}

===Explanation===
Each {{spar|enumerator}} that appears in the body of an enumeration specifier becomes an {{rlp|constant expression|integer constant}} with type {{c|int}} in the enclosing scope and can be used whenever integer constants are required (e.g. as a case label or as a non-VLA array size).
{{source|1=
enum color_t { RED, GREEN, BLUE} r = RED;
switch(r) {
     case RED   : puts(&quot;red&quot;); break;
     case GREEN : puts(&quot;green&quot;); break;
     case BLUE  : puts(&quot;blue&quot;); break;
}
}}

If {{spar|enumerator}} is followed by {{spar|{{=}} constant-expression}}, its value is the value of that constant expression. If {{spar|enumerator}} is not followed by {{spar|{{=}} constant-expression}}, its value is the value one greater than the value of the previous enumerator in the same enumeration. The value of the first enumerator (if it does not use {{spar|{{=}} constant-expression}}) is zero.
{{source|1=enum Foo { A, B, C=10, D, E=1, F, G=F+C};
//A=0, B=1, C=10, D=11, E=1, F=2, G=12 }}

The {{spar|identifier}} itself, if used, becomes the name of the enumerated type in the tags {{rlp|name space}} and requires the use of the keyword enum (unless typedef'd into the ordinary name space).
{{source|1=
enum color_t { RED, GREEN, BLUE};
enum color_t r = RED; // OK
// color_t x = GREEN: // Error: color_t is not in ordinary name space
typedef enum color_t color;
color x = GREEN; // OK
}}

Each enumerated type is {{rlp|type#Compatible_type|compatible}} with one of: {{c|char}}, a signed integer type, or an unsigned integer type. It is implementation-defined which type is compatible with any given enumerated type, but whatever it is, it must be capable of representing all enumerator values of that enumeration.

Enumerated types are integer types, and as such can be used anywhere other integer types can, including in {{rlp|conversion|implicit conversions}} and {{rlp|operator arithmetic|arithmetic operators}}.
{{source|1=
enum { ONE = 1, TWO } e;
long n = ONE; // promotion
double d = ONE; // conversion
e = 1.2; // conversion, e is now ONE
e = e + 1; // e is now TWO
}}

===Notes===
Unlike {{rlp|struct}} or {{rlp|union}}, there are no forward-declared enums in C:
{{source|1=
enum Color; // Error: no forward-declarations for enums in C
enum Color { RED, GREEN, BLUE}; 
}}

Enumerations permit the declaration of named constants in a more convenient and structured
fashion than does {{c|#define}}; they are visible in the debugger, obey scope rules, and participate in the type system.
{{source|1=
#define TEN 10
struct S { int x : TEN; }; // OK
}}
or
{{source|1=
enum { TEN = 10 };
struct S { int x : TEN; }; // also OK
}}

===References===
{{ref std c11}}
{{ref std | section=6.2.5/16 | title=Types | p=41}}
{{ref std | section=6.7.2.2 | title=Enumeration specifiers | p=117-118}}
{{ref std c99}}
{{ref std | section=6.2.5/16 | title=Types | p=35}}
{{ref std | section=6.7.2.2 | title=Enumeration specifiers | p=105-106}}
{{ref std c89}}
{{ref std | section=3.1.2.5 | title=Types}}
{{ref std | section=3.5.2.2 | title=Enumeration specifiers}}
{{ref std end}}

===Keywords===
{{ltt|c/keyword/enum}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/enum | enumeration declaration}}
{{dsc end}}

[[ar:c/language/enum]]
[[cs:c/language/enum]]
[[de:c/language/enum]]
[[es:c/language/enum]]
[[fr:c/language/enum]]
[[it:c/language/enum]]
[[ja:c/language/enum]]
[[ko:c/language/enum]]
[[pl:c/language/enum]] 
[[pt:c/language/enum]]
[[ru:c/language/enum]]
[[tr:c/language/enum]]
[[zh:c/language/enum]]</text>
      <sha1>t0udrryf13ne30kfy6lo9u2c7alyfsb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/escape</title>
    <ns>0</ns>
    <id>14073</id>
    <revision>
      <id>88526</id>
      <parentid>88523</parentid>
      <timestamp>2016-11-23T15:12:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>string literal -&gt; string literal or character constant</comment>
      <text xml:space="preserve" bytes="4407">{{title|Escape sequences}}
{{c/language/expressions/navbar}}
Escape sequences are used to represent certain special characters within {{rlp|string literal}}s and {{rlp|character constant}}s. 

The following escape sequences are available. ISO C requires a diagnostic if the backslash is followed by any character not listed here:

{| class=&quot;wikitable&quot;
|-
! Escape&lt;br&gt; sequence
! Description
! Representation
|-
| {{tt|'''&lt;nowiki&gt;\'&lt;/nowiki&gt;'''}} 
| single quote 
| byte {{tt|0x27}} (in ASCII encoding)
|-
| {{tt|'''\&quot;'''}} 
| double quote
| byte {{tt|0x22}} (in ASCII encoding)
|-
| {{tt|'''\?'''}} 
| question mark
| byte {{tt|0x3f}} (in ASCII encoding)
|-
| {{tt|'''\\'''}} 
| backslash
| byte {{tt|0x5c}} (in ASCII encoding)
|-
| {{tt|'''\a'''}} 
| audible bell
| byte {{tt|0x07}} (in ASCII encoding)
|-
| {{tt|'''\b'''}} 
| backspace
| byte {{tt|0x08}} (in ASCII encoding)
|-
| {{tt|'''\f'''}} 
| form feed - new page
| byte {{tt|0x0c}} (in ASCII encoding)
|-
| {{tt|'''\n'''}} 
| line feed - new line
| byte {{tt|0x0a}} (in ASCII encoding)
|-
| {{tt|'''\r'''}} 
| carriage return 
| byte {{tt|0x0d}} (in ASCII encoding)
|-
| {{tt|'''\t'''}} 
| horizontal tab 
| byte {{tt|0x09}} (in ASCII encoding)
|-
| {{tt|'''\v'''}} 
| vertical tab 
| byte {{tt|0x0b}} (in ASCII encoding)
|-
| {{tt|'''\{{small|nnn}}'''}} 
| arbitrary octal value 
| byte {{tt|nnn}}
|-
| {{tt|'''\x{{small|nn}}'''}} 
| arbitrary hexadecimal value
| byte {{tt|nn}}
|-
| {{tt|'''\u{{small|nnnn}}'''}} 
| [[enwiki:Unicode | Unicode]] character that is not in the basic character set.&lt;br&gt;May result in several characters.
| code point {{tt|U+nnnn}}
|-
| {{tt|'''\U{{small|nnnnnnnn}}'''}} 
| [[enwiki:Unicode | Unicode]] character that is not in the basic character set.&lt;br&gt;May result in several characters.
| code point {{tt|U+nnnnnnnn}}
|}

===Notes===
Of the octal escape sequences, {{ttb|\0}} is the most useful because it represents the terminating null character in null-terminated strings.

The new-line character {{ttb|\n}} has special meaning when used in [[c/io|text mode I/O]]: it is converted to the OS-specific newline byte or byte sequence.

Octal escape sequences have a length limit of three octal digits but terminate at the first character that is not a valid octal digit if encountered sooner.

Hexadecimal escape sequences have no length limit and terminate at the first character that is not a valid hexadecimal digit. If the value represented by a single hexadecimal escape sequence does not fit the range of values represented by the character type used in this string literal or character constant ({{c|char}}, {{c|char16_t}}, {{c|char32_t}}, or {{c|wchar_t}}), the result is unspecified.

A universal character name in a narrow string literal or a 16-bit string literal may map to more than one character, e.g. {{c|\U0001f34c}} is 4 {{c|char}} code units in UTF-8 ({{c|\xF0\x9F\x8D\x8C}}) and 2 {{c|char16_t}} code units in UTF-16 ({{c|\uD83C\uDF4C}})).

The question mark escape sequence {{c|\?}} is used to prevent [[c/language/operator_alternative|trigraphs]] from being interpreted inside string literals: a string such as {{c|&quot;??/&quot;}} is compiled as {{c|&quot;\&quot;}}, but if the second question mark is escaped, as in {{c|&quot;?\?/&quot;}}, it becomes {{c|&quot;??/&quot;}}

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;

int main(void)
{
    printf(&quot;This\nis\na\ntest\n\nShe said, \&quot;How are you?\&quot;\n&quot;);
}
 | output=
This
is
a
test

She said, &quot;How are you?&quot;
}}

===References===
{{ref std c11}}
{{ref std | section=5.2.2   | title=Character display semantics | p=24-25}}
{{ref std | section=6.4.4.4 | title=Character constants         | p=67-70}}
{{ref std c99}}
{{ref std | section=5.2.2   | title=Character display semantics | p=19-20}}
{{ref std | section=6.4.4.4 | title=Character constants         | p=59-61}}
{{ref std c89}}
{{ref std | section=2.2.2   | title=Character display semantics}}
{{ref std | section=3.1.3.4 | title=Character constants}}
{{ref std end}}

===See also===
* [[cpp/language/ascii | ASCII chart]]
{{dsc begin}}
{{dsc see cpp|cpp/language/escape|Escape sequence}}
{{dsc end}}
[[ar:c/language/escape]]
[[cs:c/language/escape]]
[[de:c/language/escape]]
[[es:c/language/escape]]
[[fr:c/language/escape]]
[[it:c/language/escape]]
[[ja:c/language/escape]]
[[ko:c/language/escape]]
[[pl:c/language/escape]]
[[pt:c/language/escape]]
[[ru:c/language/escape]]
[[tr:c/language/escape]]
[[zh:c/language/escape]]</text>
      <sha1>031hwqot84dmsd269exdxqkl8bp3zds</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/eval order</title>
    <ns>0</ns>
    <id>8452</id>
    <revision>
      <id>89245</id>
      <parentid>82822</parentid>
      <timestamp>2017-01-13T00:37:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>wikilink ub</comment>
      <text xml:space="preserve" bytes="7084">{{title|Order of evaluation}}
{{c/language/expressions/navbar}}

Order of evaluation of the operands of any C operator, including the order of evaluation of function arguments in a function-call expression, and the order of evaluation of the subexpressions within any expression is unspecified (except where noted below). The compiler will evaluate them in any order, and may choose another order when the same expression is evaluated again.

There is no concept of left-to-right or right-to-left evaluation in C, which is not to be confused with left-to-right and right-to-left associativity of operators: the expression {{tt|f1() + f2() + f3()}} is parsed as {{tt|(f1() + f2()) + f3()}} due to left-to-right associativity of operator+, but the function call to {{tt|f3}} may be evaluated first, last, or between {{tt|f1()}} or {{tt|f2()}} at run time.

===Definitions===
====Evaluations====
There are two kinds of evaluations performed by the compiler for each expression or subexpression (both of which are optional):
* ''value computation'': calculation of the value that is returned by the expression. This may involve determination of the identity of the object ({{rlp|value category|lvalue evaluation}}) or reading the value previously assigned to an object (rvalue evaluation) 
* ''side effect'': access (read or write) to an object designated by a {{rlp|volatile}} lvalue, modification (writing) to an object{{rev inl|since=c11|, atomic synchronization}}, modifying a file, modifying the floating-point environment (if supported), or calling a function that does any of those operations.

If no side effects are produced by an expression and the compiler can determine that the value is not used, the expression {{rlp|as-if|may not be evaluated}}.

====Ordering====
&quot;sequenced-before&quot; is an asymmetric, transitive, pair-wise relationship between evaluations within the same thread (it may extend across threads if atomic types and memory barriers are involved).

* If a ''sequence point'' is present between the subexpressions E1 and E2, then both value computation and side effects of E1 are ''sequenced-before'' every value computation and side effect of E2

{{rev begin}}
{{rev|since=c11|
* If evaluation A is sequenced before evaluation B, then evaluation of A will be complete before evaluation of B begins.
* If A is not sequenced before B and B is sequenced before A, then evaluation of B will be complete before evaluation of A begins.
* If A is not sequenced before B and B is not sequenced before A, then two possibilities exist:
** evaluations of A and B are unsequenced: they may be performed in any order and may overlap (within a single thread of execution, the compiler may interleave the CPU instructions that comprise A and B)
** evaluations of A and B are indeterminably-sequenced: they may be performed in any order but may not overlap: either A will be complete before B, or B will be complete before A. The order may be the opposite the next time the same expression is evaluated.
}}
{{rev end}}

===Rules===
@1@ There is a sequence point after the evaluation of all function arguments and of the function designator, and before the actual function call.
@2@ There is a sequence point after evaluation of the first (left) operand and before evaluation of the second (right) operand of the following binary operators: {{tt|&amp;&amp;}} (logical AND), {{tt|{{!!}}}} (logical OR), and {{tt|,}} (comma).
@3@ There is a sequence point after evaluation of the first (left) operand and before evaluation of the second or third operand (whichever is evaluated) of the conditional operator {{tt|?:}}
@4@ There is a sequence point after the evaluation of a full expression (an expression that is not a subexpression: typically something that ends with a semicolon or a controlling statement of if/switch/while/do) and before the next full expression.

{{rev begin}}
{{rev|since=c99|
@5@ There is a sequence point at the end of a full declarator.
@6@ There is a sequence point immediately before the return of a library function.
@7@ There is a sequence point after the action associated with each conversion specifier in formatted I/O (in particular, it is well-formed for {{lc|scanf}} to write different fields into the same variable and for {{lc|printf}} to read and modify or modify the same variable more than once using {{c|%n}})
@8@ There are sequence points before and immediately after each call to a comparison function made by the library functions {{lc|qsort}} and {{lc|bsearch}}, as well as between any call to the comparison function and the movement of the associated objects made by {{lc|qsort}}
}}
{{rev|since=c11|
@9@ The value computations (but not the side-effects) of the operands to any operator are sequenced before the value computation of the result of the operator (but not its side-effects).
@10@ The side effect (modification of the left argument) of the direct assignment operator and of all compound assignment operators is sequenced after the value computation (but not the side effects) of both left and right arguments.
@11@ The value computation of the postincrement and postdecrement operators is sequenced before its side-effect.
@12@ A function call that is not sequenced before or sequenced after another function call is indeterminately sequenced (CPU instructions that constitute different function calls cannot be interleaved, even if the functions are inlined)
@13@ In {{rlp|initialization}} list expressions, all evaluations are indeterminately sequenced
@14@ With respect to an indeterminately-sequenced function call, the operation of compound assignment operators, and both prefix and postfix forms of increment and decrement operators are single evaluations.
}}
{{rev end}}

===Undefined behavior===
@1@ If a side effect on a scalar object is unsequenced relative to another side effect on the same scalar object, the {{rlp|behavior#UB_and_optimization|behavior is undefined}}.
{{source|1=
i = ++i + i++; // undefined behavior
i = i++ + 1; // undefined behavior
f(++i, ++i); // undefined behavior
f(i = -1, i = -1); // undefined behavior
}}
@2@ If a side effect on a scalar object is unsequenced relative to a value computation using the value of the same scalar object, the behavior is undefined.
{{source|1=
f(i, i++); // undefined behavior
a[i] = i++; // undefined bevahior
}}
@3@ The above rules apply as long as at least one allowable ordering of subexpressions permits such an unsequenced side-effect.

===See also===
[[c/language/operator_precedence|Operator precedence]] which defines how expressions are built from their source code representation.

{{dsc begin}}
{{dsc see cpp | cpp/language/eval_order | Order of evaluation}}
{{dsc end}}

[[ar:c/language/eval_order]]
[[cs:c/language/eval_order]]
[[de:c/language/eval_order]]
[[es:c/language/eval_order]]
[[fr:c/language/eval_order]]
[[it:c/language/eval_order]]
[[ja:c/language/eval_order]]
[[ko:c/language/eval_order]]
[[pl:c/language/eval_order]]
[[pt:c/language/eval_order]]
[[ru:c/language/eval_order]]
[[tr:c/language/eval_order]]
[[zh:c/language/eval_order]]</text>
      <sha1>npwj42p96dc2cr7xotae07x51d0dafv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/expressions</title>
    <ns>0</ns>
    <id>13897</id>
    <revision>
      <id>85211</id>
      <parentid>79142</parentid>
      <timestamp>2016-04-08T10:06:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted &quot;object&quot; so that the list reflects the same term used in the linked page &quot;Value categories&quot;</comment>
      <text xml:space="preserve" bytes="4730">{{title|Expressions}}
{{c/language/expressions/navbar}}
An expression is a sequence of ''operators'' and their ''operands'', that specifies a computation.

Expression evaluation may produce a result (e.g., evaluation of {{c|2+2}} produces the result {{c|4}}), may generate side-effects (e.g. evaluation of {{c|printf(&quot;%d&quot;,4)}} sends the character {{c|'4'}} to the standard output stream), and may designate objects or functions.

====General====
* {{rlp|value_category|value categories}} (lvalue, non-lvalue object, function designator) classify expressions by their values
* {{rlp|eval_order|order of evaluation}} of arguments and subexpressions specifies the order in which intermediate results are obtained

===Operators===

{{c/language/operators}}

* {{rlp|operator_precedence | operator precedence}} defines the order in which operators are bound to their arguments
* {{rlp|operator_alternative | alternative representations}} are alternative spellings for some operators 

====Conversions====
* {{rlp|conversion|Implicit conversions}} take place when types of operands do not match the expectations of operators
* {{rlp|cast|Casts}} may be used to explicitly convert values from one type to another.

====Other====
* {{rlp|constant expression}}s can be evaluated at compile time and used in compile-time context (non-VLA array sizes, static initializers, etc)
* {{rlp|generic|generic selections}} can execute different expressions depending on the types of the arguments
* Floating-point expressions may raise exceptions and report errors as specified in [[c/numeric/math/math_errhandling|math_errhandling]]
* The standard [[c/preprocessor/impl|#pragma]]s {{tt|FENV_ACCESS}}, {{tt|FP_CONTRACT}}, and {{tt|CX_LIMITED_RANGE}} as well as the [[c/types/limits/FLT_EVAL_METHOD|floating-point evaluation precision]] and [[c/numeric/fenv/FE_round|rounding direction]] control the way floating-point expressions are executed.

===Primary expressions===
The operands of any operator may be other expressions or they may be ''primary expressions'' (e.g. in {{c|1+2*3}}, the operands of operator+ are the subexpression {{c|2*3}} and the primary expression {{c|1}}).

Primary expressions are any of the following:
@1@ Constants and literals (e.g. {{c|2}} or {{c|&quot;Hello, world&quot;}})
@2@ Suitably declared {{rlp|identifier}}s (e.g. {{c|n}} or {{c|printf}})
@3@ {{rlp|generic|Generic selections}}

Any expression in parentheses is also classified as a primary expression: this guarantees that the parentheses have higher precedence than any operator.

====Constants and literals====
Constant values of certain types may be embedded in the source code of a C program using specialized expressions known as literals (for lvalue expressions) and constants (for non-lvalue expressions)

* {{rlp|integer constant}}s are decimal, octal, or hexadecimal numbers of integer type.
* {{rlp|character constant}}s are individual characters of type int suitable for conversion to a character type or of type {{rev inl|since=c11|{{c|char16_t}}, {{c|char32_t}}, }}or {{c|wchar_t}}
* {{rlp|floating constant}}s are values of type {{c|float}}, {{c|double}}, or {{c|long double}}
* {{rlp|string literal}}s are sequences of characters of type {{c|char[]}}, {{c|char16_t[]}}, {{c|char32_t[]}}, or {{c|wchar_t[]}} that represent null-terminated strings
* {{rlp|compound literal}}s are values of struct, union, or array type directly embedded in program code

===Unevaluated expressions===
The operands of the {{rlp|sizeof|sizeof operator}} {{rev inl|since=c11|, the {{rlp|_Alignof|_Alignof operator}}, and the controlling expression of a {{rlp|generic|generic selection}},}} are expressions that are not evaluated{{rev inl|since=c99| (unless they are VLAs)}}. Thus, {{c|size_t n {{=}} sizeof(printf(&quot;%d&quot;, 4));}} does not perform console output.

===References===
{{ref std c11}}
{{ref std | section=6.5 | title=Expressions | p=76-105}}
{{ref std | section=6.6 | title=Constant expressions | p=106-107}}
{{ref std c99}}
{{ref std | section=6.5 | title=Expressions | p=67-94}}
{{ref std | section=6.6 | title=Constant expressions | p=95-96}}
{{ref std c89}}
{{ref std | section=3.3 | title=EXPRESSIONS}}
{{ref std | section=3.4 | title=CONSTANT EXPRESSIONS}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/expressions | Expressions}}
{{dsc end}}

[[ar:c/language/expressions]]
[[cs:c/language/expressions]]
[[de:c/language/expressions]]
[[es:c/language/expressions]]
[[fr:c/language/expressions]]
[[it:c/language/expressions]]
[[ja:c/language/expressions]]
[[ko:c/language/expressions]]
[[pl:c/language/expressions]]
[[pt:c/language/expressions]]
[[ru:c/language/expressions]]
[[tr:c/language/expressions]]
[[zh:c/language/expressions]]</text>
      <sha1>845breb1avkhghbzsziarx6mcnv9155</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/extern</title>
    <ns>0</ns>
    <id>13965</id>
    <revision>
      <id>83113</id>
      <parentid>83112</parentid>
      <timestamp>2016-01-21T14:31:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>also link to the definition of &quot;definition&quot;</comment>
      <text xml:space="preserve" bytes="5387">{{title|External and tentative definitions}}
{{c/language/declarations/navbar}}

At the top level of a {{rlp|translation phases|translation unit}} (that is, a source file with all the #includes after the preprocessor), every C program is a sequence of {{rlp|declarations}}, which declare functions and objects with {{rlp|storage duration|external linkage}}. These declarations are known as ''external declarations'' because they appear outside of any function.

{{source|1=
extern int n; // external declaration with external linkage
int b = 1;    // external definition with external linkage
static const char *c = &quot;abc&quot;; // external definition with internal linkage
int f(void) {  // external definition with external linkage
    int a = 1; // non-external
    return b; 
}
static void x(void) { // external definition with internal linkage
}
}}

Objects declared with an external declaration have static {{rlp|storage duration}}, and as such cannot use {{tt|auto}} or {{tt|register}} specifiers. The identifiers introduced by external declarations have {{rlp|scope|file scope}}.

===Tentative definitions===
A ''tentative definition'' is an external declaration without an initializer, and
either without a {{rlp|storage duration|storage-class specifier}} or with the specifier {{tt|static}}.

A ''tentative definition'' is a declaration that may or may not act as a definition. If an actual external definition is found earlier or later in the same translation unit, then the tentative definition just acts as a declaration.
{{source|1=
int i1 = 1;     // definition, external linkage
int i1;         // tentative definition, acts as declaration because i1 is defined
extern int i1;  // declaration, refers to the earlier definition

extern int i2 = 3; // definition, external linkage
int i2;            // tentative definition, acts as declaration because i2 is defined
extern int i2;     // declaration, refers to the external linkage definition
}}

If there are no definitions in the same translation unit, then the tentative definition acts as an actual definition with the initializer {{c|{{=}} 0}} (or, for array types, {{c|{{=}} {0} }}).
{{source|1=
int i3;        // tentative definition, external linkage
int i3;        // tentative definition, external linkage
extern int i3; // declaration, external linkage
// in this translation unit, i3 is defined as if by &quot;int i3 = 0;&quot;
}}

Unlike the {{rlp|storage duration|extern}} declarations, which don't change the linkage of an identifier if a previous declaration established it, tentative definitions may disagree in linkage with another declaration of the same identifier. If two declarations for the same identifier are in scope and have different linkage, the behavior is undefined:
{{source|1=
static int i4 = 2; // definition, internal linkage
int i4;            // Undefined behavior: linkage disagreement with previous line
extern int i4;     // declaration, refers to the internal linkage definition

static int i5; // tentative definition, internal linkage
int i5;        // Undefined behavior: linkage disagreement with previous line
extern int i5; // refers to previous, whose linkage is internal
}}

A tentative definition with internal linkage must have complete type.
{{source|1=
static int i[]; // Error, incomplete type in a static tentative definition
int i[]; // OK, equivalent to int i[1] = {0}; unless redeclared later in this file
}}

===One definition rule===
Each translation unit may have zero or one external definition of every identifier with {{rlp|storage duration|internal linkage}} (a {{tt|static}} global).

If an identifier with internal linkage is used in any expression other than a {{rev inl|since=c99|non-VLA}}, {{rlp|sizeof}}, or {{rev inl|since=c11|{{rlp|alignof}} }}, there must be one and only one external definition for that identifier in the translation unit.

The entire program may have zero or one external definition of every identifier{{rev inl|since=c99| (other than an {{rlp|inline}} function)}} with {{rlp|storage duration|external linkage}}.

If an identifier with external linkage is used in any expression other than a {{rev inl|since=c99|non-VLA}}, {{rlp|sizeof}}, or {{rev inl|since=c11|{{rlp|alignof}} }}, there must be one and only one external definition for that identifier somewhere in the entire program.

===Notes===
See {{rlp|inline}} for the details on the inline function definitions.

See {{rlp|storage duration|storage duration and linkage}} for the meaning of the keyword {{tt|extern}} with declarations at file scope

See {{rlp|declarations#Definitions|definitions}} for the distinction between declarations and definitions.

Tentative definitions were invented to standardize various pre-C89 approaches to forward declaring identifiers with internal linkage.

===References===
{{ref std c11}}
{{ref std | section=6.9 | title=External definitions | p=155-159}}
{{ref std c99}}
{{ref std | section=6.9 | title=External definitions | p=140-144}}
{{ref std c89}}
{{ref std | section=3.7 | title=EXTERNAL DEFINITIONS}}
{{ref std end}}

[[ar:c/language/extern]]
[[cs:c/language/extern]]
[[de:c/language/extern]]
[[es:c/language/extern]]
[[fr:c/language/extern]]
[[it:c/language/extern]]
[[ja:c/language/extern]]
[[ko:c/language/extern]]
[[pl:c/language/extern]]
[[pt:c/language/extern]]
[[ru:c/language/extern]]
[[tr:c/language/extern]]
[[zh:c/language/extern]]</text>
      <sha1>5i2ush8dvm5odimtbxpz2fb5u354l4b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/file scope</title>
    <ns>0</ns>
    <id>13747</id>
    <revision>
      <id>72742</id>
      <parentid>72692</parentid>
      <timestamp>2014-09-22T16:26:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>added comment about extent of file scope.</comment>
      <text xml:space="preserve" bytes="1168">{{title|File scope}}
{{c/language/navbar}}

If the declarator or type specifier that declares the identifier appears outside of any block or list of parameters, the identifier has file scope, which terminates at the end of the translation unit.

So, placement of an identifier's declaration (in a declarator or type specifier) outside any block or list of parameters means that the identifier has file scope. File scope of an identifier extends from the declaration to the end of the translation unit in which the declaration appears.

===Example===
{{example
 |  Identifiers a, b, f, and g have file scope.
 | code= 
#include &lt;stdio.h&gt;

int a = 1;
static int b = 2;

void f (void) {printf(&quot;from function f()\n&quot;);}
static void g (void) {printf(&quot;from function g()\n&quot;);}

int main(void)
{
    f();
    g();

    return 0;
}
/* end of this translation unit, end of file scope */
 | p=true
 | output=
from function f()
from function g()
}}

[[de:c/language/file_scope]]
[[es:c/language/file_scope]]
[[fr:c/language/file_scope]]
[[it:c/language/file_scope]]
[[ja:c/language/file_scope]]
[[pt:c/language/file_scope]]
[[ru:c/language/file_scope]]
[[zh:c/language/file_scope]]</text>
      <sha1>ow4xwpuzq9196mblh4reoueasoytq2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/floating constant</title>
    <ns>0</ns>
    <id>13896</id>
    <revision>
      <id>79144</id>
      <parentid>76152</parentid>
      <timestamp>2015-06-25T11:16:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="6598">{{title|floating constant}}
{{c/language/expressions/navbar}}
Allows values of floating type to be used directly in expressions.
===Syntax===
A floating constant is a {{rlp|value category|non-lvalue}} expression having the form:
{{sdsc begin}}
{{sdsc | {{spar|significand}} {{spar|exponent}}{{mark optional}} {{spar|suffix}}{{mark optional}} }}
{{sdsc end}}

Where the {{spar|significand}} has the form
{{sdsc begin}}
{{sdsc | {{spar|whole-number}}{{mark optional}} {{ttb|.}}{{mark optional}} {{spar|fraction}}{{mark optional}} }}
{{sdsc end}}

The {{spar|exponent}} has the form
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|e}} {{!}} {{ttb|E}} {{spar|exponent-sign}}{{mark optional}} {{spar|digit-sequence}}}}
{{sdsc | num=2 | notes={{mark since c99}} | {{ttb|p}} {{!}} {{ttb|P}} {{spar|exponent-sign}}{{mark optional}} {{spar|digit-sequence}}}}
{{sdsc end}}
@1@ The exponent syntax for a decimal floating-point constant
@2@ The exponent syntax for hexadecimal floating-point constant

===Explanation===
{{rev begin}}
{{rev|since=c99|
If the {{spar|significand}} begins with the character sequence {{tt|0x}} or {{tt|0X}}, the floating constant is a ''hexadecimal floating constant''. Otherwise, it is a ''decimal floating constant''.

For a ''hexadecimal floating constant'', the {{spar|significand}} is interpreted as a hexadecimal rational number, and the {{spar|digit-sequence}} of the exponent is interpreted as the integer power of 2 to which the significand has to be scaled.
{{source|1=
double d = 0x1.2p3; // hex fraction 1.2 (decimal 1.125) scaled by 2^3, that is 9.0
}}
}}
{{rev end}}

For a ''decimal floating constant'', the {{spar|significand}} is interpreted as a decimal rational number, and the {{spar|digit-sequence}} of the exponent is interpreted as the integer power of 10 to which the significand has to be scaled.
{{source|1=
double d = 1.2e3; // decimal fraction 1.2 scaled by 10^3, that is 1200.0
}}

An unsuffixed floating constant has type {{c|double}}. If {{spar|suffix}} is the letter {{ttb|f}} or {{ttb|F}}, the floating constant has type {{c|float}}. If {{spar|suffix}} is the letter {{ttb|l}} or {{ttb|L}}, the floating constant has type {{c|long double}}.

The result of evaluating a floating constant is either the nearest representable value or the larger or smaller representable value immediately adjacent to the nearest representable value, chosen in an implementation-defined manner (in other words, [[c/numeric/fenv/FE_round|default rounding direction]] during translation is implementation-defined).
{{rev begin}}
{{rev|since=c99|
Floating-point constants may convert to more range and precision than is indicated by their type, if indicated by {{lc|FLT_EVAL_METHOD}}. For example, the constant {{c|0.1f}} may act as if it were {{c|0.1L}} in an expression.
}}
{{rev end}}

{{rev begin}}
{{rev|since=c99|
The result of evaluating a hexadecimal floating constant, if FLT_RADIX is 2, is the exact value represented by the floating constant, correctly rounded to the target type.
}}
{{rev end}}

If the exponent is present and fractional part is not used, the decimal separator may be omitted:
{{source|1=
double x = 1e0; // floating-point 1.0 (period not used)
}}

For decimal floating constants, the {{spar|exponent}} part is optional. If it is omitted, the period is not optional, and either the {{spar|whole-number}} or the {{spar|fraction}} must be present.
{{source|1=
double x = 1.; // floating-point 1.0 (fractional part optional)
double y = .1; // floating-point 0.1 (whole-number part optional)
}}

{{rev begin}}
{{rev|since=c99|
For hexadecimal floating constants, the exponent is not optional to avoid ambiguity resulting from an f suffix being mistaken as a hexadecimal digit.
}}
{{rev end}}

===Notes===
Default [[c/numeric/fenv/FE_round|rounding direction]] and [[c/types/limits/FLT_EVAL_METHOD|precision]] are in effect when the floating constants are converted into internal representations, and [[c/numeric/fenv/FE_exceptions|floating-point exceptions]] are not raised even if {{ltt|c/preprocessor/impl|#pragma STDC FENV_ACCESS}} is in effect (for execution-time conversion of character strings, {{lc|strtod}} can be used). Note that this differs from {{rlp|constant expressions|arithmetic constant expressions}} of floating type.

Letters in the floating constants are case-insensitive: {{tt|0x1.ep+3}} and {{tt|0X1.EP+3}} represent the same floating-point value 15.0.

The decimal point specified by {{lc|setlocale}} has no effect on the syntax of floating constants: the decimal point character is always the period.

Unlike integers, not every floating value can be represented directly by decimal or even hexadecimal constant syntax: macros [[c/numeric/math/NAN|NAN]] and [[c/numeric/math/INFINITY|INFINITY]] as well as functions such as {{lc|nan}} offer ways to generate those special values. Note that {{c|0x1.FFFFFEp128f}}, which might appear to be an IEEE float NaN, in fact overflows to an infinity in that format.

There are no negative floating constants; an expression such as {{c|-1.2}} is the {{rlp|operator_arithmetic|arithmetic operator}} unary minus applied to the floating constant {{c|1.2}}. Note that the special value negative zero may be constructed with {{lc|-0.0}}.

===Example===
{{example|code=
#include &lt;stdio.h&gt;

int main(void)
{
    printf(&quot;15.0     = %a\n&quot;, 15.0);
    printf(&quot;0x1.ep+3 = %f\n&quot;, 0x1.ep+3);

    // Constants outside the range of type double.
    printf(&quot;+2.0e+308 --&gt; %g\n&quot;,  2.0e+308);
    printf(&quot;+1.0e-324 --&gt; %g\n&quot;,  1.0e-324);
    printf(&quot;-1.0e-324 --&gt; %g\n&quot;, -1.0e-324);
    printf(&quot;-2.0e+308 --&gt; %g\n&quot;, -2.0e+308);
}
|output=
15.0     = 0x1.ep+3
0x1.ep+3 = 15.000000
+2.0e+308 --&gt; inf
+1.0e-324 --&gt; 0
-1.0e-324 --&gt; -0
-2.0e+308 --&gt; -inf
}}

===References===
{{ref std c11}}
{{ref std | section=6.4.4.2 | title=Floating constants | p=65-66}}
{{ref std c99}}
{{ref std | section=6.4.4.2 | title=Floating constants | p=57-58}}
{{ref std c89}}
{{ref std | section=3.1.3.1 | title=Floating constants}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/floating_literal | floating point literal}}
{{dsc end}}

[[ar:c/language/floating_constant]]
[[cs:c/language/floating_constant]]
[[de:c/language/floating_constant]]
[[es:c/language/floating_constant]]
[[fr:c/language/floating_constant]]
[[it:c/language/floating_constant]]
[[ja:c/language/floating_constant]]
[[ko:c/language/floating_constant]]
[[pl:c/language/floating_constant]]
[[pt:c/language/floating_constant]]
[[ru:c/language/floating_constant]]
[[tr:c/language/floating_constant]]
[[zh:c/language/floating_constant]]</text>
      <sha1>r9c0gx2sm00vjo6narn21vew9jxd7h2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/for</title>
    <ns>0</ns>
    <id>6040</id>
    <revision>
      <id>87457</id>
      <parentid>87452</parentid>
      <timestamp>2016-08-24T20:21:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>one param for the new note</comment>
      <text xml:space="preserve" bytes="3735">{{title|for loop}}
{{c/language/statements/navbar}}
Executes a loop.

Used as a shorter equivalent of {{rlp|while|while loop}}.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|for (}} {{spar|init_clause}} {{ttb|;}} {{spar|cond_expression}} {{ttb|;}} {{spar|iteration_expression}} {{ttb|)}} {{spar|loop_statement}} }}
{{sdsc end}}

===Explanation===

Behaves as follows:

* {{spar|init_clause}} may be an expression or a declaration
:* If it is an expression, it is evaluated once, before the first evaluation of {{spar|cond_expression}} and its result is discarded.
:* {{mark c99}} If it is a declaration, it is in scope in the entire loop body, including the remainder of {{spar|init_clause}}, the entire {{spar|cond_expression}}, the entire {{spar|iteration_expression}} and the entire {{spar|loop_statement}}. Only {{tt|auto}} and {{tt|register}} {{rlp|storage duration|storage classes}} are allowed for the variables declared in this declaration.
* {{spar|cond_expression}} is evaluated before the loop body. If the result of the expression is zero, the loop statement is exited immediately.
* {{spar|iteration_expression}} is evaluated after the loop body and its result is discarded. After evaluating {{spar|iteration_expression}}, control is transferred to {{spar|cond_expression}}.

{{spar|init_clause}}, {{spar|cond_expression}}, and {{spar|iteration_expression}} are all optional:
{{source|1=
for(;;) {
   printf(&quot;endless loop!&quot;);
}
}}

{{spar|loop_statement}} is not optional, but it may be a null statement:
{{source|1=
for(int n = 0; n &lt; 10; ++n, printf(&quot;%d\n&quot;, n))
    ; // null statement
}}

If the execution of the loop needs to be terminated at some point, a {{rlp|break | break statement}} can be used anywhere within the {{spar|loop_statement}}.

The {{rlp|continue | continue statement}} used anywhere within the {{spar|loop_statement}} transfers control to {{spar|iteration_expression}}.

{{c/language/forward_progress_note|for}}

{{rev begin}}
{{rev|since=c99|
As with all other selection and iteration statements, the for statement establishes {{rlp|scope|block scope}}: any identifier introduced in the {{spar|init_clause}}, {{spar|cond_expression}}, or {{spar|iteration_expression}} goes out of scope after the {{spar|loop_statement}}.
}}
{{rev end}}

===Keywords===

{{ltt|c/keyword/for}}

===Notes===
The expression statement used as {{spar|loop_statement}} establishes its own block scope, distinct from the scope of {{spar|init_clause}}, unlike in C++:
{{source|1=
for (int i = 0; ; ) {
    long i = 1;   // valid C, invalid C++
    // ...
}
}}

It is possible to enter the body of a loop using {{rlp|goto}}. In this case, {{spar|init_clause}} and {{spar|cond_expression}} are not executed.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
enum { SIZE = 8 };
int main(void)
{
    int array[SIZE];
    for(size_t i = 0 ; i &lt; SIZE; ++i)
        array [i] = rand() % 2;
    printf(&quot;Array filled!\n&quot;);
    for (size_t i = 0; i &lt; SIZE; ++i)
        printf(&quot;%d &quot;, array[i]);
    printf(&quot;\n&quot;);
}
 | p = true
 | output=
Array filled!
1 0 1 1 1 1 0 0
}}

===References===
{{ref std c11}}
{{ref std | section=6.8.5.3 | title=The for statement | p=151}}
{{ref std c99}}
{{ref std | section=6.8.5.3 | title=The for statement | p=136}}
{{ref std c89}}
{{ref std | section=3.6.5.3 | title=The for statement}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/for | for loop}}
{{dsc end}}

[[ar:c/language/for]]
[[cs:c/language/for]]
[[de:c/language/for]]
[[es:c/language/for]]
[[fr:c/language/for]]
[[it:c/language/for]]
[[ja:c/language/for]]
[[ko:c/language/for]]
[[pl:c/language/for]]
[[pt:c/language/for]]
[[ru:c/language/for]]
[[tr:c/language/for]]
[[zh:c/language/for]]</text>
      <sha1>4ase1vzpt7fe7b7trafgguiemtusjw7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/function declaration</title>
    <ns>0</ns>
    <id>13985</id>
    <revision>
      <id>85251</id>
      <parentid>83433</parentid>
      <timestamp>2016-04-12T17:40:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>missing source template in the last example</comment>
      <text xml:space="preserve" bytes="8937">{{title|Function declarations}}
{{c/language/functions/navbar}}

A function declaration introduces an {{rlp|identifier}} that designates a function and, optionally, specifies the types of the function parameters (the ''prototype''). Function declarations (unlike {{rlp|function definition|definitions}}) may appear at block scope as well as file scope.

===Syntax===
In the {{rlp|declarations|declaration grammar}} of a function declaration, the ''type-specifier'' sequence, possibly modified by the declarator, designates the ''return type'' (which may be any type other than array or function type), and the ''declarator'' has one of two forms:

{{sdsc begin}}
{{sdsc |num=1| {{spar|noptr-declarator}}  {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} }}
{{sdsc |num=2| {{spar|noptr-declarator}}  {{ttb|(}} {{spar|identifier-list}}{{mark optional}} {{ttb|)}} }}
{{sdsc end}}
where
{{par begin}}
{{par|{{spar|noptr-declarator}} | any {{rlp|declarations#Declarators|declarator}} except unparenthesized pointer declarator. The identifier that is contained in this declarator is the identifier that becomes the function designator. }}
{{par|{{spar|parameter-list}}| either the single keyword {{c|void}} or a comma-separated list of ''parameters'', which may end with an {{rlp|variadic|ellipsis parameter}} }}
{{par|{{spar|identifier-list}} | comma-separated list of identifiers (only if this declarator is used as part of old-style {{rlp|function definition}}), must be omitted for old-style declarations that are not definitions. }}
{{par end}}
@1@ New-style (C89) function declaration. This declaration both introduces the function designator itself and also serves as a function prototype for any future {{rlp|operator_other#Function_call|function call expressions}}, forcing conversions from argument expressions to the declared parameter types and compile-time checks for the number of arguments.
{{source|1=
int max(int a, int b); // declaration
int n = max(12.01, 3.14); // OK, conversion from double to int
}}
@2@ Old-style (K&amp;R) function declaration. This declaration does not behave as a prototype and any future {{rlp|operator_other#Function_call|function call expressions}} will perform default argument promotions and will invoke undefined behavior if the number of arguments doesn't match the number of parameters.
{{source|1=
int max();
int n = max(true, (char)'a'); // calls max with two int args (after promotions)
int n = max(12.01f, 3.14); // calls max with two double args (after promotions)
int max(a, b) 
int a, b; { return a&gt;b?a:b; } // definition expects ints; the second call is undefined
}}

===Explanation===
The return type of the function, determined by the type specifier in {{spar|specifiers-and-qualifiers}} and possibly modified by the {{spar|declarator}} as usual in {{rlp|declarations}}, must be a complete non-array object type or the type {{c|void}}.
{{source|1=
void f(char *s); // return type is void
int sum(int a, int b); // return type of sum is int.
int (*foo(const void *p))[3]; // return type is pointer to array of 3 int
}}

Function declarators can be combined with other declarators as long as they can share their type specifiers and qualifiers
{{source|1=
int f(void), *fip(), (*pfi)(), *ap[3]; // declares two functions and two objects
inline int g(int), n; // error: inline qualifier is for functions only
typedef int array_t[3];
array_t a, h(); // error: array type cannot be a return type for a function
}}

If a function declaration appears outside of any function, the identifier it introduces has {{rlp|scope|file scope}} and {{rlp|storage duration|external linkage}}, unless {{tt|static}} is used or an earlier static declaration is visible. If the declaration occurs inside another function, the identifier has block scope (and also either internal or external linkage).
{{source|1=
int main(void)
{
    int f(int); // external linkage, file scope
    f(1); // definition needs to be available somewhere in the program
}
}}

The parameters in a declaration that is not part of a {{rlp|function definition}} do not need to be named:
{{source|1=
int f(int, int); // declaration
// int f(int, int) { return 7; } // Error, parameters must be named in definitions
}}

Each parameter in a {{spar|parameter-list}} is a {{rlp|declarations|declaration}} that introduced a single variable, with the following additional properties:
* the identifier in the declarator is optional (except if this function declaration is part of a function definition)
{{source|1=
int f(int, double); // OK
int g(int a, double b); // also OK
int f(int, double) { return 1; } // Error: definition must name parameters
}}
* the only {{rlp|storage duration|storage class specifier}} allowed for parameters is {{tt|register}}, and it is ignored in function declarations that are not definitions
{{source|1=
int f(static int x); // Error
int f(int [static 10]); // OK (array index static is not a storage class specifier)
}}
* any parameter of array type is adjusted to the corresponding pointer type{{rev inl|since=c99|, which may be qualified if there are qualifiers between the square brackets of the array declarator}}
{{source|1=
int f(int[]); // declares int f(int*)
int g(const int[10]); // declares int g(const int*)
int h(int[const volatile]); // declares int h(int * const volatile)
int x(int[*]); // declares int x(int*)
}}
* any parameter of function type is adjusted to the corresponding pointer type
{{source|1=
int f(char g(double)); // declares int f(char (*g)(double))
int h(int(void)); // declares int h(int (*)(void))
}}
* the parameter list may terminate with {{ttb|, ...}}, see {{rlp|variadic|variadic functions}} for details.
{{source|1=
int f(int, ...);
}}
* parameters cannot have type {{c|void}} (but can have type pointer to void). The special parameter list that consists entirely of the keyword {{c|void}} is used to declare functions that take no parameters.
{{source|1=
int f(void); // OK
int g(void x); // Error
}}
* any identifier that appears in a parameter list that could be treated as a typedef name or as a parameter name is treated as a typedef name: {{c|int f(size_t, uintptr_t)}} is parsed as a new-style declarator for a function taking two unnamed parameters of type size_t and uintptr_t, not an old-style declarator that begins the definition of a function taking two parameters named &quot;size_t&quot; and &quot;uintptr_t&quot;
* parameters may have incomplete type{{rev inl|since=c99| and may use the VLA notation [*]}} (except that in a {{rlp|function definition}}, the parameter types after array-to-pointer and functino-to-pointer adjustment must be complete)

See {{rlp|operator_other#Function_call|function call operator}} for other details on the mechanics of a function call and {{rlp|return}} for returning from functions.

===Notes===
Unlike in C++, the declarators {{c|f()}} and {{c|f(void)}} have different meaning: the declarator {{c|f(void))}} is a new-style (prototype) declarator that declares a function that takes no parameters. The declarator {{c|f()}} is an old-style (K&amp;R) declarator that declares a function that takes ''unspecified'' number of parameters (unless used in an old-style function definition)
{{source|1=
int f(void); // declaration: takes no parameters
int g(); // declaration: takes unknown parameters

int main(void) {
    f(1); // compile-time error
    g(2); // undefined behavior
}

int f(void) { return 1; ) // actual definition
int g(a,b,c,d) int a,b,c,d; { return 2; } // actual definition
}}

Unlike in a {{rlp|function definition}}, the parameter list may be inherited from a typedef
{{source|1=
typedef int p(int q, int r); // p is a function type int(int, int)
p f; // declares inf f(int, int)
}}

{{rev begin}}
{{rev|until=c99|
In C89, {{spar|specifiers-and-qualifiers}} was optional, and if omitted, the return type of the function defaulted to {{c|int}} (possibly amended by the {{spar|declarator}}).
{{source|
*f() { // function returning int*
   return NULL;
}
}}
}}
{{rev end}}
===References===
{{ref std c11}}
{{ref std | section=6.7.6.3 | title=Function declarators (including prototypes) | p=133-136}}
{{ref std c99}}
{{ref std | section=6.7.5.3 | title=Function declarators (including prototypes) | p=118-121}}
{{ref std c89}}
{{ref std | section=3.5.4.3 | title=Function declarators (including prototypes)}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/function | Declaring functions}}
{{dsc end}}

[[ar:c/language/function_declaration]]
[[cs:c/language/function_declaration]]
[[de:c/language/function_declaration]]
[[es:c/language/function_declaration]]
[[fr:c/language/function_declaration]]
[[it:c/language/function_declaration]]
[[ja:c/language/function_declaration]]
[[ko:c/language/function_declaration]]
[[pl:c/language/function_declaration]]
[[pt:c/language/function_declaration]]
[[ru:c/language/function_declaration]]
[[tr:c/language/function_declaration]]
[[zh:c/language/function_declaration]]</text>
      <sha1>qovv32yhhc5u1e5mjumi70uhmc9ta0h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/function definition</title>
    <ns>0</ns>
    <id>13967</id>
    <revision>
      <id>82511</id>
      <parentid>81283</parentid>
      <timestamp>2015-12-19T01:36:08Z</timestamp>
      <contributor>
        <ip>15.65.244.14</ip>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="6522">{{title|Function definitions}}
{{c/language/functions/navbar}}

A function definition associates the function body (a sequence of declarations and statements) with the function name and parameter list. Unlike {{rlp|function declaration}}, function definitions are allowed at file scope only (there are no nested functions).

C supports two different forms of function definitions:
{{sdsc begin}}
{{sdsc |num=1| {{spar|specifiers-and-qualifiers}} {{spar|parameter-list-declarator}}  {{spar|function-body}} }}
{{sdsc |num=2| {{spar|specifiers-and-qualifiers}} {{spar|identifier-list-declarator}} {{spar|declaration-list}} {{spar|function-body}}   }}
{{sdsc end}}
where
{{par begin}}
{{par|{{spar|specifiers-and-qualifiers}}| a combination of
* {{rlp|declarations|type specifiers}} that, possibly modified by the declarator, form the ''return type''
* {{rlp|storage duration|storage class specifiers}}, which determine the linkage of the identifier ({{tt|static}}, {{tt|extern}}, or none)
* function specifiers {{rlp|inline}}, {{rlp|noreturn}}, or none }}
{{par|{{spar|parameter-list-declarator}}| a declarator for a function type which uses a {{rlp|function declaration|parameter list}} to designate function parameters }}
{{par|{{spar|identifier-list-declarator}}| a declarator for a function type which uses a {{rlp|function declaration|identifier list}} to designate function parameters }}
{{par|{{spar|declaration-list}} | sequence of declarations that declare every identifier in {{spar|identifier-list-declarator}}. These declarations cannot use initializers and the only {{rlp|storage duration|storage-class specifier}} allowed is {{c|register}}.}} 
{{par|{{spar|function-body}} | a {{rlp|statements#Compound_statements|compound statement}}, that is a brace-enclosed sequence of declarations and statements, that is executed whenever this function is called }}
{{par end}}
@1@ New-style (C89) function definition. This definition both introduces the function itself and serves as a function prototype for any future {{rlp|operator_other#Function_call|function call expressions}}, forcing conversions from argument expressions to the declared parameter types.
{{source|1=
int max(int a, int b)
{
    return a&gt;b?a:b;
}

double g(void)
{
    return 0.1;
}
}}
@2@ Old-style (K&amp;R) function definition. This definition does not behave as a prototype and any future {{rlp|operator_other#Function_call|function call expressions}} will perform default argument promotions.
{{source|1=
int max(a, b)
int a, b;
{
    return a&gt;b?a:b;
}
double g()
{
    return 0.1;
}
}}

===Explanation===
As with {{rlp|function declaration}}s, the return type of the function, determined by the type specifier in {{spar|specifiers-and-qualiifiers}} and possibly modified by the {{spar|declarator}} as usual in {{rlp|declarations}}, must be a complete non-array object type or the type {{c|void}}.
{{source|1=
void f(char *s) { puts(s); } // return type is void
int sum(int a, int b) { return a+b: } // return type is int
int (*foo(const void *p))[3] { // return type is pointer to array of 3 int
    return malloc(sizeof(int[3]));
}
}}

As with {{rlp|function declaration}}s, the types of the parameters are adjusted from functions to pointers and from arrays to pointers and their top-level qualifiers are stripped for the purpose of constructing the function type.

Unlike {{rlp|function declaration}}s, unnamed formal parameters are not allowed, they must be named even if they are not used within the function. The only exception is the special parameter list {{c|(void)}}
{{source|1=
int f(int, int); // declaration
// int f(int, int) { return 7; } // Error
int f(int a, int b) { return 7; } // definition
int g(void) { return 8; } // OK, void doesn't declare a parameter
}}

Within the function body, every parameter is an {{rlp|value category|lvalue}} expression, they have automatic {{rlp|storage duration}} and {{rlp|scope|block scope}}. The layout of the parameters in memory (or if they are stored in memory at all) is unspecified: it is a part of the [[enwiki:Calling convention|calling convention]].
{{source|1=
int main(int ac, char **av)
{
    ac = 2; // parameters are lvalues
    av = (char *[]){&quot;abc&quot;, &quot;def&quot;, NULL};
    f(ac, av);
}
}}

See {{rlp|operator_other#Function_call|function call operator}} for other details on the mechanics of a function call and {{rlp|return}} for returning from functions.

{{rev begin}}
{{rev|since=c99|
===__func__===
WIthin every {{spar|function-body}}, the special predefined variable {{c|__func__}} with block scope and static storage duration is available,  as if defined immediately after the opening brace by
{{source|1=
static const char __func__[] = &quot;function name&quot;;
}}
This special identifier is sometimes used in combination with the [[c/preprocessor/replace|predefined macro constants]] {{c|__FILE__}} and {{c|__LINE__}}, for example, by {{lc|assert}}.
}}
{{rev end}}
===Notes===
The argument list must be explicitly present in the declarator, it cannot be inherited from a typedef
{{source|1=
typedef int p(int q, int r); // p is a function type int(int, int)
p f { return q + r; } // Error
}}

{{rev begin}}
{{rev|until=c99|
In C89, {{spar|specifiers-and-qualifiers}} was optional, and if omitted, the return type of the function defaulted to {{c|int}} (possibly amended by the {{spar|declarator}}).

In addition, old-style definition didn't require a declaration for every parameter in {{spar|declaration-list}}. Any parameter whose declaration was missing had type {{c|int}}
{{source|1=
max(a, b) // a and b have type int, return type is int
{
    return a&gt;b?a:b;
}
}}
}}
{{rev end}}

===References===
{{ref std c11}}
{{ref std | section=6.9.1 | title=Function definitions | p=156-158}}
{{ref std c99}}
{{ref std | section=6.9.1 | title=Function definitions | p=141-143}}
{{ref std c89}}
{{ref std | section=3.7.1 | title=Function definitions}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/function#Function_definition | Function definition}}
{{dsc end}}

[[ar:c/language/function_definition]]
[[cs:c/language/function_definition]]
[[de:c/language/function_definition]]
[[es:c/language/function_definition]]
[[fr:c/language/function_definition]]
[[it:c/language/function_definition]]
[[ja:c/language/function_definition]]
[[ko:c/language/function_definition]]
[[pl:c/language/function_definition]]
[[pt:c/language/function_definition]]
[[ru:c/language/function_definition]]
[[tr:c/language/function_definition]]
[[zh:c/language/function_definition]]</text>
      <sha1>j4dwh3ljzn4cte9ms2txj0yh7mti2gh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/function specifier</title>
    <ns>0</ns>
    <id>9602</id>
    <redirect title="c/language/function specifiers" />
    <revision>
      <id>44687</id>
      <timestamp>2012-11-12T17:01:39Z</timestamp>
      <contributor>
        <username>OrangeBuzzard</username>
        <id>1124</id>
      </contributor>
      <comment>moved [[c/language/function specifier]] to [[c/language/function specifiers]]: More accurate name.</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[c/language/function specifiers]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/function specifiers</title>
    <ns>0</ns>
    <id>9601</id>
    <revision>
      <id>70238</id>
      <parentid>69514</parentid>
      <timestamp>2014-05-12T17:35:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>C main</comment>
      <text xml:space="preserve" bytes="3601">{{title|Function specifiers}}
{{c/language/navbar}}

Used in the declaration of functions.
{{todo|split into two pages}}

:*{{ttb|inline}} {{mark since c99}} - suggestion to the compiler to &quot;inline&quot; the function, making calls to it as fast as possible.
:*{{ttb|_Noreturn}} {{mark since c11}} - specifies that the function does not return to where it was called from.

===Syntax===
{{sdsc begin}}
{{sdsc  | {{c|inline}} {{spar|function_declaration}} }}
{{sdsc  | {{c|_Noreturn}} {{spar|function_declaration}} }}
{{sdsc end}}

===Explanation===

====inline {{mark since c99}}====
The {{ttb|inline}} keyword is a hint given to the compiler to perform an optimization. The compiler has the freedom to ignore this request.

If the compiler inlines the function, it replaces every call of that function with the actual body (without generating a call).
This avoids extra overhead created by the function call (placing data on stack and retrieving the result) but it may result in a larger executable as the code for the function has to be repeated multiple times.
The result is similar to [[c/preprocessor/replace|function-like macros]].

The function body must be visible in the current translation unit, which makes the {{ttb|inline}} keyword necessary to implement functions inside a header file, i.e. without having a source file that has to be compiled and linked.

===inline Example===
With inlining turned off, run time is about 1.70 seconds. With inlining turned on, run time is less than a second.
{{example
|code=
/*
inline int sum(int a, int b) {
  return (a + b);
}

int c = sum(1, 4);
// If the compiler inlines the function the compiled code will be the same as writing:
int c = 1 + 4;
*/

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;

/* int sum (int a, int b) __attribute__ ((noinline)); */

static inline
int sum (int a, int b)
{
  return a+b;
}

int main(void)
{
    const int SIZE = 100000;
    int X[SIZE],Y[SIZE],A[SIZE];
    int i,j;
    for (i=0;i&lt;SIZE;++i) {
        X[i] = rand();
        Y[i] = rand();
    }
    
    clock_t t = clock();   /* start clock */
    for (i=0;i&lt;5000;++i) {
        for (j=0;j&lt;SIZE;++j)
            A[j] = sum(X[j],Y[j]);
    }
    t = clock()-t;         /* stop clock  */

    printf(&quot;Time used: %f seconds\n&quot;, ((float)t)/CLOCKS_PER_SEC);
    printf(&quot;%d\n&quot;, A[0]);
    return EXIT_SUCCESS;
}
 | p=true
 | output=
Time used: 0.750000 seconds
-1643747027
}}

====_Noreturn {{mark since c11}}====
The {{ttb|_Noreturn}} keyword states that the function that follows it does not return to the function that it was called from. The compiler will typically generate a warning if a function declared with {{ttb|_Noreturn}} attempts to return a value.

In the example below the {{c|stop_now()}} function is called, which causes the program to immediately terminate (unless the [[c/program/SIG_types | {{tt|SIGABRT}}]] signal is caught).  The code with the {{c|printf()}} and the {{c|return EXIT_SUCCESS;}} after the call to {{c|stop_now()}} is never executed and the execution never returns to the {{c|main()}} function, where {{c|stop_now()}} was called from.

===_Noreturn Example===
{{example
|code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

_Noreturn void stop_now() {
  abort();
}

int main(void)
{
  printf(&quot;Preparing to stop...\n&quot;);

  stop_now();

  printf(&quot;This code is never executed.\n&quot;);

  return EXIT_SUCCESS;

}
 | output=
Preparing to stop...
Abort
}}

===Keywords===
{{ltt|c/keyword/inline}},
{{ltt|c/keyword/_Noreturn}}

===See Also===
[[c/language/storage_class_specifiers | Storage class specifiers]],
[[c/program/abort | abort()]]</text>
      <sha1>7qn36atjoxrcbdr2rkkgiqgzdd6thpc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/functions</title>
    <ns>0</ns>
    <id>14009</id>
    <revision>
      <id>76750</id>
      <parentid>76749</parentid>
      <timestamp>2015-02-28T14:06:09Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>fixed paren</comment>
      <text xml:space="preserve" bytes="2743">{{title|Functions}}
{{c/language/functions/navbar}}

A function is a C language construct that associates a {{rlp|statements#Compound_statements|compound statement}} (the function body) with an {{rlp|identifier}} (the function name). Every C program begins execution from the {{rlp|main function}}, which either terminates, or invokes other, user-defined or library functions.

{{source|1=
// function definition.
// defines a function with the name &quot;sum&quot; and with the body &quot;{ return x+y; }&quot;
int sum(int x, int y) 
{
    return x + y;
}
}}

Functions may accept zero or more ''parameters'', which are initialized from the ''arguments'' of a {{rlp|operator_other#Function_call|function call operator}}, and may return a value to its caller by means of the {{rlp|return|return statement}}.

{{source|1=
int n = sum(1, 2); // parameters x and y are initialized with the arguments 1 and 2
}}

The body of a function is provided in a {{rlp|function definition}}. Each function must be defined only once in a program, unless the function is {{rlp|inline}}.

There are no nested functions (except where allowed through non-standard compiler extensions): each function definition must appear at file scope, and functions have no access to the local variables from the caller:
{{source|1=
int main(void) // the main function definition
{
    int sum(int, int); // function declaration (may appear at any scope)
    int x = 1;  // local variable in main
    sum(1, 2); // function call

//    int sum(int a, int b) // error: no nested functions
//    {
//        return  a + b; 
//    }
}
int sum(int a, int b) // function definition
{
//    return x + a + b; //  error: main's x is not accessible within sum
    return a + b;
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.6.3 | title=Function declarators (including prototypes) | p=133-136}}
{{ref std | section=6.9.1   | title=Function definitions | p=156-158}}
{{ref std c99}}
{{ref std | section=6.7.5.3 | title=Function declarators (including prototypes) | p=118-121}}
{{ref std | section=6.9.1   | title=Function definitions | p=141-143}}
{{ref std c89}}
{{ref std | section=3.5.4.3 | title=Function declarators (including prototypes)}}
{{ref std | section=3.7.1   | title=Function definitions}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/function | Declaring functions}}
{{dsc end}}

[[ar:c/language/functions]]
[[cs:c/language/functions]]
[[de:c/language/functions]]
[[es:c/language/functions]]
[[fr:c/language/functions]]
[[it:c/language/functions]]
[[ja:c/language/functions]]
[[ko:c/language/functions]]
[[pl:c/language/functions]]
[[pt:c/language/functions]]
[[ru:c/language/functions]]
[[tr:c/language/functions]]
[[zh:c/language/functions]]</text>
      <sha1>r0qyg9e7zc3trgkyy3kfqcqwe29tjqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/generic</title>
    <ns>0</ns>
    <id>13925</id>
    <revision>
      <id>81817</id>
      <parentid>79784</parentid>
      <timestamp>2015-11-12T18:47:40Z</timestamp>
      <contributor>
        <ip>98.159.213.242</ip>
      </contributor>
      <comment>fix typo</comment>
      <text xml:space="preserve" bytes="5389">{{title|Generic selection}}
{{c/language/expressions/navbar}}
Provides a way to choose one of several expressions at compile time, based on a type of a controlling expression

===Syntax===
{{sdsc begin}}
{{sdsc | notes={{mark since c11}} | {{ttb|_Generic}} {{ttb|(}} {{spar|controlling-expression}} {{ttb|,}} {{spar|association-list}} {{ttb|)}} }}
{{sdsc end}}
where {{spar|association-list}} is a comma-separated list of associations, each of which has the syntax
{{sdsc begin}}
{{sdsc | {{spar|type-name}} {{ttb|:}} {{spar|expression}} }}
{{sdsc | {{ttb|default}} {{ttb|:}} {{spar|expression}} }}
{{sdsc end}}
where
{{par begin}}
{{par|{{spar|type-name}} | any complete {{rlp|type|object type}} that isn't variably-modified (that is, not VLA or pointer to VLA).  }}
{{par|{{spar|controlling-expression}} | any expression (except for the {{rlp|operator_other#Comma_operator|comma operator}}) whose type must be compatible with one of the {{spar|type-name}}s if the {{tt|default}} association is not used}}
{{par|{{spar|expression}} | any expression (except for the {{rlp|operator_other#Comma_operator|comma operator}}) of any type and value category}}
{{par end}}

No two {{spar|type-name}}s in the {{spar|association-list}} may specify {{rlp|type#Compatible_types|compatible types}}. There may be only one association that uses the keyword {{tt|default}}. If {{tt|default}} is not used and none of the {{spar|type-name}}s are compatible with the type of the controlling expression, the program will not compile.

===Explanation===
The type of {{spar|controlling-expression}} (after applying {{rlp|conversion#Lvalue_conversions|lvalue conversions}} if applicable and if supported -- see notes below), is compared with {{spar|type-name}}s from the list of associations.

If the type is {{rlp|type#Compatible_types|compatible}} with the {{spar|type-name}} of one of the associations, then the type, value, and {{rlp|value category}} of the generic selection are the type, value, and value category of the  {{spar|expression}} that appears after the colon for that {{spar|type-name}}.

If none of the {{spar|type-name}}s are compatible with the type of the {{spar|controlling-expression}}, and the {{tt|default}} association is provided, then the type, value, and value category of the generic selection are the type, value, and value category of the expression after the {{tt|default :}} label.

===Notes===
The {{spar|controlling-expression}} and the {{spar|expression}}s of the selections that are not chosen are are never evaluated.

The lvalue conversions of the controlling expression are still an open issue (DR 431/[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1930.htm n1930]): clang does not perform them and takes the types of lvalues as-is: {{c|&quot;abc&quot;}} matches {{c|char[4]}} and not {{c|char*}}, {{c|(int const){0} }} matches {{c|const int}} and not {{c|int}}). Meanwhile, gcc performs the lvalue conversion of the controlling expression (in type domain only: it discards the top-level cvr-qualifiers and atomicity or applies array to pointer/function-to-pointer transformations to the type of the controlling expression, without initiating any side-effects or calculating any values). For gcc, {{c|&quot;abc&quot;}} matches {{c|char*}} and not {{c|char[4]}} and {{c|(int const){0} }} matches {{c|int}}, and not {{c|const int}}.

All {{rlp|value category|value categories}}, including function designators and void expressions, are allowed as {{spar|expression}}s in a generic selection, and if selected, the generic selection itself has the same value category.

The [[c/numeric/tgmath|type-generic math macros]] from {{tt|&lt;tgmath.h&gt;}}, introduced in C99, were implemented in compiler-specific manner. Generic selections, introduced in C11, gave the programmers the ability to write similar type-dependent code.

Generic selection is similar to overloading in C++ (where one of several functions is chosen at compile time based on the types of the arguments), except that it makes the selection between arbitrary expressions, which, unlike function overloads, may have different return types and even different value categories.

===Keywords===

{{ltt|c/keyword/_Generic}},
{{ltt|c/keyword/default}}

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

// Possible implementation of the tgmath.h macro cbrt
#define cbrt(X) _Generic((X), \
              long double: cbrtl, \
                  default: cbrt,  \
/*for clang*/ const float: cbrtf, \
                    float: cbrtf  \
)(X)

int main(void)
{
    double x = 8.0;
    const float y = 3.375;
    printf(&quot;cbrt(8.0) = %f\n&quot;, cbrt(x)); // selects the default cbrt
    printf(&quot;cbrtf(3.375) = %f\n&quot;, cbrt(y)); // gcc: converts const float to float,
                                            // then selects cbrtf
                                            // clang: selects cbrtf for const float
}
|output=
cbrt(8.0) = 2.000000
cbrtf(3.375) = 1.500000
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.1.1 | title=Generic selection | p=78-79}}
{{ref std end}}

[[ar:c/language/generic]]
[[cs:c/language/generic]]
[[de:c/language/generic]]
[[es:c/language/generic]]
[[fr:c/language/generic]]
[[it:c/language/generic]]
[[ja:c/language/generic]]
[[ko:c/language/generic]]
[[pl:c/language/generic]]
[[pt:c/language/generic]]
[[ru:c/language/generic]]
[[tr:c/language/generic]]
[[zh:c/language/generic]]</text>
      <sha1>g9wlbpe4vp2pt9fs0efz5ewgawnn55t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/goto</title>
    <ns>0</ns>
    <id>6045</id>
    <revision>
      <id>78897</id>
      <parentid>76145</parentid>
      <timestamp>2015-06-11T13:35:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>revbox</comment>
      <text xml:space="preserve" bytes="3207">{{title|goto statement}}
{{c/language/statements/navbar}}
Transfers control unconditionally to the desired location.

Used when it is otherwise impossible to transfer control to the desired location using conventional constructs.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|goto}} {{spar|label}} {{ttb|;}} }}
{{sdsc | {{spar|label}} {{ttb|:}} {{spar|statement}} }}
{{sdsc end}}

===Explanation===

The {{tt|goto}} statement causes an unconditional jump (transfer of control) to the statement prefixed by the named {{spar|label}} (which must appear in the same function as the goto statement){{rev inl|since=c99|, except when this jump would enter the scope of a [[c/language/array|variable-length array]] or another [[c/language/declarations|variably-modified type]].}}

A {{spar|label}} is an identifier followed by a colon (:) and a statement. Labels are the only identifiers that have ''function scope'': they can be used (in a goto statement) anywhere in the same function in which they appear. There may be multiple labels before any statement.

{{rev begin}}
{{rev|since=c99|
Entering the scope of a non-variably modified variable is permitted:
{{source|1=
    goto lab1; // OK: going into the scope of a regular variable
    int n = 5;
lab1:; // Note, n is uninitialized, as if declared by int n;

//   goto lab2;   // Error: going into the scope of two VM types
     double a[n]; // a VLA
     int (*p)[n]; // a VM pointer
lab2:
}}

If {{tt|goto}} leaves the scope of a VLA, it is deallocated (and may be reallocated if its initialization is executed again): &lt;!-- perhaps this belongs to the array type page --&gt;
{{source|1=
{
   int n = 1;
label:;
   int a[n]; // re-allocated 10 times, each with a different size
   if (n++ &lt; 10) goto label; // leaving the scope of a VM
}
}}
}}
{{rev end}}

===Keywords===

{{ltt|c/keyword/goto}}

===Notes===
Because declarations are not statements, a label before a declaration must use a null statement (a semicolon immediately after the colon). Same applies to a label before the end of a block.

C++ imposes additional limitations on the {{tt|goto}} statement, but allows labels before declarations (which are statements in C++)

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;

int main(void)
{
    // goto can be used to leave a multi-level loop easily
    for (int x = 0; x &lt; 3; x++) {
        for (int y = 0; y &lt; 3; y++) {
            printf(&quot;(%d;%d)\n&quot;,x,y);
            if (x + y &gt;= 3) goto endloop;
        }
    }
endloop:;
}
 | output=
(0;0)
(0;1)
(0;2)
(1;0)
(1;1)
(1;2)
}}
===References===
{{ref std c11}}
{{ref std | section=6.8.6.1 | title=The goto statement | p=152-153}}
{{ref std c99}}
{{ref std | section=6.8.6.1 | title=The goto statement | p=137-138}}
{{ref std c89}}
{{ref std | section=3.6.6.1 | title=The goto statement}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/goto | goto statement}}
{{dsc end}}

[[ar:c/language/goto]]
[[cs:c/language/goto]]
[[de:c/language/goto]]
[[es:c/language/goto]]
[[fr:c/language/goto]]
[[it:c/language/goto]]
[[ja:c/language/goto]]
[[ko:c/language/goto]]
[[pl:c/language/goto]]
[[pt:c/language/goto]]
[[ru:c/language/goto]]
[[tr:c/language/goto]]
[[zh:c/language/goto]]</text>
      <sha1>sjbitxxirjwwecsirqjicjzr3rhmsiq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/history</title>
    <ns>0</ns>
    <id>8449</id>
    <revision>
      <id>91015</id>
      <parentid>90246</parentid>
      <timestamp>2017-03-14T15:22:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>new list of proposals for C2x</comment>
      <text xml:space="preserve" bytes="8540">{{title|History of C}}
{{c/language/navbar}}

==Early C==
* 1969: B created, based on BCPL, to replace PDP-7 assembler as the system programming language for Unix
:* added operators ++, --, compound assignment, remained a typeless language like BCPL
* 1971: NB (&quot;new B&quot;) created when porting B to PDP-11
:* types (int, char, arrays and pointers), array-to-pointer conversion, compilation to machine code
* 1972: Language renamed to C
:* structs, operators &amp;&amp; and ||, preprocessor, portable I/O
* 1973: Unix re-written in C
:* unsigned, long, unions, enumerations, increased type safety
* 1978: The C Programming Language, 1st edition

==Standard C==
* 1983: ANSI established X3J11 committee
* 1988: The C Programming Language, 2nd edition
* 1989: {{ttb|C89}}, the ANSI C standard published
# codified existing practices
# new features: volatile, enum, signed, void, locales
# From C++: const, function prototypes
* 1990: {{ttb|C90}}, the ANSI C standard accepted as ISO/IEC 9899-1990
* 1995: {{ttb|C95}} (ISO/IEC 9899 AM1) ([http://infostore.saiglobal.com/store/Details.aspx?DocN=isoc000767513 online store])
# multibyte character support (wchar_t and all wide and multibyte character functions, wchar.h, wctype.h, and those added to existing headers and corresponding changes to stream I/O, etc)
# digraphs, iso646.h, 
* 1995: Technical corrigendum 1 (ISO/IEC 9899 TCOR1)
:* [http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc1.htm 44 small changes]
* 1996: Technical corrigendum 2 (ISO/IEC 9899 TCOR2)
:* [http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc2.htm 24 small changes]
* 1999: {{ttb|C99}} (ISO/IEC 9899:1999)
# new features: bool, long long, stdint.h, inttypes.h, restrict, compound literals, variable length arrays, flexible array members, designated initializers, fenv.h, variadic macros, complex numbers, __func__, hexadecimal floating point format (%a), monetary formatting in lconv, isblank, concatenation of narrow and wide string literals, trailing comma in enumerations, empty arguments in function-like macros, STDC_* pragmas, va_copy, null return of tmpnam, null pointer in setvbuf, hh and ll lengthspecifiers in printf, snprintf, _Exit, tgmath.h, POSIX-like strftime specifiers
# from C++: inline, mix declarations and code, declarations in the init clause of the for loop, {{ttb|//}} comments, universal character names in source code
# removed implicit functions and implicit int
* 2001: Technical corrigendum 1 (ISO/IEC 9899:1999/Cor.1:2001(E))
:* [http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899tc1/ 11 defects fixed]
* 2004: Technical corrigendum 2 (ISO/IEC 9899:1999/Cor.2:2004(E))
* 2004: Unicode TR (ISO/IEC TR 19769:2004) ([http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=33907 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf November 7, 2003 draft])
* 2007: Technical corrigendum 3 (ISO/IEC 9899:1999/Cor.3:2007(E)) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf September 7, 2007 draft])
:* deprecated {{lc|gets}}
* 2007: Bounds-checking interfaces TR (ISO/IEC TR 24731-1:2007) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=38841 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf March 28, 2007 draft])
* 2008: Embedded TR (ISO/IEC TR 18037:2008) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=51126 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1021.pdf September 24, 2003 draft])
* 2009: Decimal floating-point TR (ISO/IEC TR 24732:2009) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=38842 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1241.pdf July 5, 2007 draft])
* 2009: Mathematical special functions TR (ISO/IEC TR 24747:2009) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=38857 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1182.pdf August 2, 2006 draft])
* 2010: Dynamic allocations functions TR (ISO/IEC TR 24731-2:2010) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=51678 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1248.pdf August 15, 2007 draft])
* 2011: {{ttb|C11}} (ISO/IEC 9899:2011) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=57853 ISO store]) ([http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+9899-2012#.UGCvLIHyaHM ANSI store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf April 12, 2011 draft])
# thread-aware memory model, stdatomic.h, threads.h, type-generic functions, alignas/alignof, noreturn, static assert, analyzability extensions, extensions to complex and imaginary types, anonymous structures and unions, exclusive file open mode. quick_exit
# removed {{lc|gets}}
# from Bounds-checking interfaces TR: bounds-checking interfaces, 
# from Unicode TR: char16_t, char32_t, and uchar.h
* 2012: Technical corrigendum 1 (ISO/IEC 9899:2011/Cor 1:2012) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=61717 ISO store])
:* [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1606.pdf 2 minor bug fixes]
* 2013: Secure Coding Rules TS (ISO/IEC TS 17961:2013) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=61134 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1624.pdf June 26, 2012])
* 2014: FP TS part 1: Binary floating-point arithmetic (ISO/IEC TS 18661-1:2014) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=63146 ISO store]) ([http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1778.pdf 2013 draft] )
# provides changes to C11 (mostly to Annex F) that cover all basic requirements and some recommendations of IEC 60559:2011 (C11 was built on IEC 60559:1989)
* 2015: FP TS part 2: Decimal floating-point arithmetic (ISO/IEC TS 18661-2:2015) ([http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=68882 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1912.pdf 2015 draft])
# provides changes to C11 to support all the requirements, plus some basic recommendations, of IEC 60559:2011 for decimal floating-point arithmetic. This supersedes ISO/IEC TR 24732:2009.
* 2015: FP TS part 3: Interchange and extended types (ISO/IEC TS 18661-3:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65615 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1945.pdf 2015 draft])
# provides changes to C11 to support the recommendations of IEC 60559:2011 for extended floating‐point formats and the interchange formats, both arithmetic and non-arithmetic.
* 2015: FP TS part 4: Supplementary functions (ISO/IEC TS 18661-4:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65616 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1950.pdf 2015 draft])
# provides changes to C11 to support all mathematical operations recommended by IEC 60559:2011, including trigonometry in π units, inverse square root, compounded interest, etc.
* 2016: FP TS part 5: Supplementary attributes (ISO/IEC TS 18661-5:2016) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65617 ISO store])([http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2004.pdf 2016 draft])
# provides changes to C11 to support all supplementary attributes (evaluation model, exception handling, reproducibility, etc) recommended by IEC 60559:2011

===Future development===
* Parallelism TS (Draft [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2017.pdf n2017] 2016-03-10)
* Transactional Memory TS (Draft [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1961.pdf n1961] 2015-09-23)
* {{ttb|C2x}} Next C language standard revision 
:* List of C11 defect reports: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2109.htm n2109 (October 2016)]
:* List of issues that were not granted DR status: [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2132.htm n2132 (march 2017)]

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/history |History of C++}}
{{dsc end}}

===References===
* [https://www.bell-labs.com/usr/dmr/www/chist.html The Development of the C Language] by Dennis M. Ritchie
* [http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf Rationale for the C99 standard]

[[ar:c/language/history]]
[[cs:c/language/history]]
[[de:c/language/history]]
[[es:c/language/history]]
[[fr:c/language/history]]
[[it:c/language/history]]
[[ja:c/language/history]]
[[ko:c/language/history]]
[[pl:c/language/history]]
[[pt:c/language/history]]
[[ru:c/language/history]]
[[tr:c/language/history]]
[[zh:c/language/history]]</text>
      <sha1>94xambpjmna4o11zt4apqyybldprf7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/identifier</title>
    <ns>0</ns>
    <id>13883</id>
    <revision>
      <id>90426</id>
      <parentid>89392</parentid>
      <timestamp>2017-02-22T23:14:25Z</timestamp>
      <contributor>
        <ip>41.105.201.35</ip>
      </contributor>
      <comment>just a small redirection to /functions page.</comment>
      <text xml:space="preserve" bytes="7862">{{title|Identifier}}
{{c/language/basics/navbar}}

An ''identifier'' is an arbitrarily long sequence of digits, underscores, lowercase and uppercase Latin letters{{rev inl|since=c99|, and Unicode characters specified using {{tt|\u}} and {{tt|\U}} {{rlp|escape}} notation}}. A valid identifier must begin with a non-digit character (Latin letter, underscore{{rev inl|since=c99|, or Unicode non-digit character}}). Identifiers are case-sensitive (lowercase and uppercase letters are distinct).

{{rev begin}}
{{rev|since=c99| It is implementation-defined if raw (not escaped) Unicode characters are allowed in identifiers:
{{source|1=
char *\U0001f431 = &quot;cat&quot;; // supported
char *🐱 = &quot;cat&quot;; // implementation-defined (e.g. works with Clang, but not GCC)
}}
}}
{{rev end}}

Identifiers can denote the following types of entities:
* {{rlp|object}}s
* {{rlp|functions}}
* tags ({{rlp|struct}}, {{rlp|union}}, or {{rlp|enum|enumeration}}s)
* structure or union members
* enumeration constants
* {{rlp|typedef}} names
* {{rlp|statements#Labels|label}} names
* [[c/preprocessor/replace|macro]] names
* [[c/preprocessor/replace|macro parameter]] names

Every identifier other than macro name or macro parameter name has {{rlp|scope}}, belongs to a {{rlp|name space}}, and may have {{rlp|storage duration|linkage}}. The same identifier can denote different entities at different points in the program, or may denote different entities at the same point if the entities are in different name spaces.

===Reserved identifiers===
The following identifiers are ''reserved'' and may not be declared in a program (doing so invokes undefined behavior):
@1@ The identifiers that are [[c/keyword|keywords]] cannot be used for other purposes. In particular #define or #undef of an identifier that is identical to a keyword is not allowed.
@2@ All external identifiers that begin with an underscore.
@3@ All identifiers that begin with an underscore followed by a capital letter or by another underscore (these reserved identifiers allow the library to use numerous behind-the-scenes non-external macros and functions)
@4@ All external identifiers defined by the standard library (in hosted environment). This means that no user-supplied external names are allowed to match any library names, not even if declaring a function that is identical to a library function.
@5@ Identifiers declared as reserved for future use by the standard library, namely
:* ''function names''
::* {{tt|cerf}}, {{tt|cerfc}}, {{tt|cexp2}}, {{tt|cexpm1}}, {{tt|clog10}}, {{tt|clog1p}}, {{tt|clog2}}, {{tt|clgamma}}, {{tt|ctgamma}} and their -f and -l suffixed variants, in {{ltt|c/numeric/complex|&lt;complex.h&gt;}}
::* beginning with {{tt|is}} or {{tt|to}} followed by a lowercase letter, in {{ltt|c/string/byte|&lt;ctype.h&gt;}} and {{ltt|c/string/wide|wctype.h}}
::* beginning with {{tt|str}} followed by a lowercase letter, in {{ltt|c/string/byte|&lt;stdlib.h&gt;}}
::* beginning with {{tt|str}}, {{tt|mem}} or {{tt|wcs}} followed by a lowercase letter, in {{ltt|c/string/byte|&lt;string.h&gt;}}
::* beginning with {{tt|wcs}} followed by a lowercase letter, in {{ltt|c/string/wide|&lt;wchar.h&gt;}}
::* beginning with {{tt|atomic_}} followed by a lowercase letter, in {{ltt|c/atomic|&lt;stdatomic.h&gt;}}
::* beginning with {{tt|cnd_}}, {{tt|mtx_}}, {{tt|thrd_}} or {{tt|tss_}} followed by a lowercase letter, in {{ltt|c/thread|&lt;threads.h&gt;}}
:* ''typedef names''
::* beginning with {{tt|int}} or {{tt|uint}} and ending with {{tt|_t}}, in {{ltt|c/types/integer|&lt;stdint.h&gt;}}
::* beginning with {{tt|atomic_}} or {{tt|memory_}} followed by a lowercase letter, in {{ltt|c/atomic|&lt;stdatomic.h&gt;}}
::* beginning with {{tt|cnd_}}, {{tt|mtx_}}, {{tt|thrd_}} or {{tt|tss_}} followed by a lowercase letter, in {{ltt|c/thread|&lt;threads.h&gt;}}
:* ''macro names''
::* beginning with {{tt|E}} followed by a digit or an uppercase letter, in {{ltt|c/error/errno_macros|&lt;errno.h&gt;}}
::* beginning with {{tt|FE_}} followed by an uppercase letter, in {{ltt|c/numeric/fenv|&lt;fenv.h&gt;}}
::* beginning with {{tt|INT}} or {{tt|UINT}} and ending with {{tt|_MAX}}, {{tt|_MIN}}, or {{tt|_C}}, in {{ltt|c/types/integer|&lt;stdint.h&gt;}}
::* beginning with {{tt|PRI}} or {{tt|SCN}} followed by lowercase letter or the letter {{tt|X}}, in {{ltt|c/types/integer|&lt;stdint.h&gt;}}
::* beginning with {{tt|LC_}} followed by an uppercase letter, in {{ltt|c/locale/LC_categories|&lt;locale.h&gt;}}
::* beginning with {{tt|SIG}} or {{tt|SIG_}} followed by an uppercase letter, in {{ltt|c/program|&lt;signal.h&gt;}}
::* beginning with {{tt|TIME_}} followed by an uppercase letter, in [[c/chrono/timespec_get|&lt;time.h&lt;nowiki&gt;&gt;&lt;/nowiki&gt;]]
::* beginning with {{tt|ATOMIC_}} followed by an uppercase letter, in {{ltt|c/atomic|&lt;stdatomic.h&gt;}}
:* ''enumeration constants''
::* beginning with {{tt|memory_order_}} followed by a lowercase letter, in {{ltt|c/atomic|&lt;stdatomic.h&gt;}}
::* beginning with {{tt|cnd_}}, {{tt|mtx_}}, {{tt|thrd_}} or {{tt|tss_}} followed by a lowercase letter, in {{ltt|c/thread|&lt;threads.h&gt;}}

All other identifiers are available, with no fear of unexpected collisions when moving programs from one compiler and library to another.

Note: in C++, identifiers with a double underscore anywhere are reserved everywhere; in C, only the ones that begin with a double underscore are reserved.

===Translation limits===
Even though there is no specific limit on the length of identifiers, early compilers had limits on the number of significant initial characters in identifiers and the linkers imposed stricter limits on the names with {{rlp|storage duration|external linkage}}. C requires that at least the following limits are supported by any standard-compliant implementation:
{{rev begin}}
{{rev|until=c99|
*31 significant initial characters in an internal identifier or a macro name
*6 significant initial characters in an external identifier
*511 external identifiers in one translation unit
*127 identifiers with block scope declared in one block
*1024 macro identifiers simultaneously defined in one preprocessing translation unit
}}
{{rev|since=c99|
*63 significant initial characters in an internal identifier or a macro name
*31 significant initial characters in an external identifier
*4095 external identifiers in one translation unit
*511 identifiers with block scope declared in one block
*4095 macro identifiers simultaneously defined in one preprocessing translation unit
}}
{{rev end}}

===References===
{{ref std c11}}
{{ref std | section=5.2.4.1 | title=Translation limits | p=25-26}}
{{ref std | section=6.4.2   | title=Identifiers | p=59-60}}
{{ref std | section=6.10.8  | title=Predefined macro names | p=175-176}}
{{ref std | section=6.11.9  | title=Predefined macro names | p=179}}
{{ref std | section=7.31    | title=Future library directions | p=455-457}}
{{ref std | section=K.3.1.2 | title=Reserved identifiers | p=584}}
{{ref std c99}}
{{ref std | section=5.2.4.1 | title=Translation limits | p=20-21}}
{{ref std | section=6.4.2   | title=Identifiers | p=51-52}}
{{ref std | section=6.10.8  | title=Predefined macro names | p=160-161}}
{{ref std | section=6.11.9  | title=Predefined macro names | p=163}}
{{ref std | section=7.26    | title=Future library directions | p=401-402}}
{{ref std c89}}
{{ref std | section=2.2.4.1 | title=Translation limits}}
{{ref std | section=3.1.2   | title=Identifiers}}
{{ref std | section=3.8.8   | title=Predefined macro names}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/identifiers | Identifiers}}
{{dsc end}}

[[ar:c/language/identifier]]
[[cs:c/language/identifier]]
[[de:c/language/identifier]]
[[es:c/language/identifier]]
[[fr:c/language/identifier]]
[[it:c/language/identifier]]
[[ja:c/language/identifier]]
[[ko:c/language/identifier]]
[[pl:c/language/identifier]]
[[pt:c/language/identifier]]
[[ru:c/language/identifier]]
[[tr:c/language/identifier]]
[[zh:c/language/identifier]]</text>
      <sha1>eox52anpf1hmcmjuob3wv0vv8czjera</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/if</title>
    <ns>0</ns>
    <id>6038</id>
    <revision>
      <id>76147</id>
      <parentid>76138</parentid>
      <timestamp>2015-02-10T21:06:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>ref</comment>
      <text xml:space="preserve" bytes="2676">{{title|if statement}}
{{c/language/statements/navbar}}
Conditionally executes code.

Used where code needs to be executed only if some condition is true.

===Syntax===

{{sdsc begin}}
{{sdsc|num=1| {{ttb|if (}} {{spar|expression}} {{ttb|)}} {{spar|statement_true}} }}
{{sdsc|num=2| {{ttb|if (}} {{spar|expression}} {{ttb|)}} {{spar|statement_true}} {{ttb|else}} {{spar|statement_false}} }}
{{sdsc end}}

===Explanation===

{{spar|expression}} must be an expression of any {{rlp|type#Type_groups|scalar type}}.

If {{spar|expression}} compares not equal to the integer zero, {{spar|statement_true}} is executed.

In the form {{v|2}}, if {{spar|expression}} compares equal to the integer zero, {{spar|statement_false}} is executed.

{{rev begin}}
{{rev|since=c99|
As with all other selection and iteration statements, the entire if-statement has its own block scope:
{{source|1=
enum {a, b};
int different(void)
{
    if (sizeof(enum {b, a}) != sizeof(int))
        return a; // a == 1
    return b; // b == 0 in C89, b == 1 in C99
}
}}
}}
{{rev end}}

===Notes===
The {{tt|else}} is always associated with the closest preceding {{tt|if}} (in other words, if {{spar|statement_true}} is also an if statement, then that inner if statement must contain an {{tt|else}} part as well):
{{source|1=
int j = 1;
if (i &gt; 1)
   if(j &gt; 2)
       printf(&quot;%d &gt; 1 and %d &gt; 2\n&quot;, i, j);
    else // this else is part of if(j&gt;2), not part of if(i&gt;1) 
       printf(&quot;%d &gt; 1 and %d &lt;= 2\n&quot;, i, j);
}}

If {{spar|statement_true}} is entered through a {{rlp|goto}}, {{spar|statement_false}} is not executed.

===Keywords===

{{ltt|c/keyword/if}},
{{ltt|c/keyword/else}}

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
 
int main(void)
{
    int i = 2;
    if (i &gt; 2) {
        printf(&quot;first is true\n&quot;);
    } else {
        printf(&quot;first is false\n&quot;);
    }
 
    i = 3;
    if (i == 3) printf(&quot;i == 3\n&quot;);
 
    if (i != 3) printf(&quot;i != 3 is true\n&quot;);
    else        printf(&quot;i != 3 is false\n&quot;);
}

 | output=
first is false
i == 3
i != 3 is false
}}

===References===
{{ref std c11}}
{{ref std | section=6.8.4.1 | title=The if statement | p=148-149}}
{{ref std c99}}
{{ref std | section=6.8.4.1 | title=The if statement | p=133-134}}
{{ref std c89}}
{{ref std | section=3.6.4.1 | title=The if statement}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/if | if statement}}
{{dsc end}}

[[ar:c/language/if]]
[[cs:c/language/if]]
[[de:c/language/if]]
[[es:c/language/if]]
[[fr:c/language/if]]
[[it:c/language/if]]
[[ja:c/language/if]]
[[ko:c/language/if]]
[[pl:c/language/if]]
[[pt:c/language/if]]
[[ru:c/language/if]]
[[tr:c/language/if]]
[[zh:c/language/if]]</text>
      <sha1>tswtheyhc8ix9sn2g1ofzmtl3801hmg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/initialization</title>
    <ns>0</ns>
    <id>13737</id>
    <revision>
      <id>85531</id>
      <parentid>83077</parentid>
      <timestamp>2016-04-24T22:30:17Z</timestamp>
      <contributor>
        <username>JoseMariaSola</username>
        <id>5272</id>
      </contributor>
      <minor/>
      <comment>Typo in declaration.</comment>
      <text xml:space="preserve" bytes="4852">{{title|Initialization}}
{{c/language/initialization/navbar}}

A {{rlp|declarations|declaration}} of an object may provide its initial value through the process known as ''initialization''.

For each {{rlp|declarations|declarator}}, the initializer, if not omitted, may be one of the following:

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|{{=}}}} {{spar|expression}}
}}
{{sdsc|num=2|1=
{{ttb|{{=}}}} {{ttb|{ }} {{spar|initializer-list}} {{ttb|} }}
}}
{{sdsc end}}

where {{spar|initializer-list}} is a non-empty comma-separated list of {{spar|initializer}}s (with an optional trailing comma), where each initializer has one of three possible forms:

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|expression}}
}}
{{sdsc|num=2|1=
{{ttb|{ }} {{spar|initializer-list}} {{ttb|} }}
}}
{{sdsc|num=3|1=
{{spar|designator-list}} {{ttb|{{=}}}} {{spar|initializer}} }}
{{sdsc end}}

where {{spar|designator-list}} is a list of either array designators of the form {{ttb|[}} {{spar|constant-expression}} {{ttb|]}} or struct/union member designators of the form {{ttb|.}} {{spar|identifier}}; see 
{{rlp|array initialization}} and {{rlp|struct initialization}}.

===Explanation===
The initializer specifies the initial value stored in an object.

====Explicit initialization====
If an initializer is provided, see
* {{rlp|scalar initialization}} for the initialization of scalar types
* {{rlp|array initialization}} for the initialization of array types
* {{rlp|struct initialization}} for the initialization of struct and union types.

====Implicit initialization====
If an initializer is not provided:
* objects with automatic {{rlp|storage duration}} are initialized to indeterminate values (which may be {{rlp|object|trap representations}})
* objects with static and thread-local {{rlp|storage duration}} are initialized as follows
:* pointers are initialized to null pointer values of their types
:* objects of integral types are initialized to unsigned zero
:* objects of floating types are initialized to positive zero
:* members of arrays, structs, and unions are initialized as described above, recursively, plus all padding bits are initialized to zero
:(on platforms where null pointers and floating zeroes have all-bit-zero representations, this form of initialization for statics is normally implemented by allocating them in the .bss section of the program image)

===Notes===
When initializing an object of static or thread-local {{rlp|storage duration}}, every {{spar|expression}} in the initializer must be a {{rlp|constant expression}} or {{rlp|string literal}}.

Initializers cannot be used in declarations of objects of incomplete type, VLAs, and block-scope objects with linkage.

The initial values of function parameters are established as if by assignment from the arguments of a {{rlp|operator_other#Function_call|function call}}, rather than by initialization (until the post-C11 defect report DR 427, which changes the wording to use initialization).

If an indeterminate value is used as an argument to any standard library call, the behavior is undefined. Otherwise, the result of any expression involving indeterminate values is an indeterminate value (e.g. int n; may not compare equal to itself and it may appear to change its value on subsequent reads)

===Example===
{{example|code= 
#include &lt;stdlib.h&gt;
int a[2]; // initializes a to {0, 0}
int main(void)
{
    int i;          // initializes i to an indeterminate value
    static int j;   // initializes j to 0
    int k = 1;      // initializes k to 1

    // initializes int x[3] to 1,3,5
    // initializes int* p to &amp;x[0]
    int x[] = { 1, 3, 5 }, *p = x;

    // initializes w (an array of two structs) to
    // { { {1,0,0}, 0}, { {2,0,0}, 0} }
    struct {int a[3], b;} w[] = {[0].a = {1}, [1].a[0] = 2};

    // function call expression can be used for a local variable
    char* ptr = malloc(10);
    free(ptr);

//  Error: objects with static storage duration require constant initializers
//  static char* ptr = malloc(10);

//  Error: VLA cannot be initialized
//  int vla[n] = {0};
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.9 | title=Initialization | p=139-144}}
{{ref std c99}}
{{ref std | section=6.7.8 | title=Initialization | p=125-130}}
{{ref std c89}}
{{ref std | section=3.5.7 | title=Initialization}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/initialization |Initialization}}
{{dsc end}}

[[ar:c/language/initialization]]
[[cs:c/language/initialization]]
[[de:c/language/initialization]]
[[es:c/language/initialization]]
[[fr:c/language/initialization]]
[[it:c/language/initialization]]
[[ja:c/language/initialization]]
[[ko:c/language/initialization]]
[[pl:c/language/initialization]]
[[pt:c/language/initialization]]
[[ru:c/language/initialization]]
[[tr:c/language/initialization]]
[[zh:c/language/initialization]]</text>
      <sha1>58i0ba4w5m7astfvgnzuovlcyaeyv03</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/inline</title>
    <ns>0</ns>
    <id>13833</id>
    <revision>
      <id>83940</id>
      <parentid>83939</parentid>
      <timestamp>2016-03-13T23:23:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>ugh, the examples violated C's odr actually</comment>
      <text xml:space="preserve" bytes="5194">{{title|inline function specifier}}
{{c/language/functions/navbar}}

Declares an [[enwiki:inline function|inline function]].

===Syntax===
{{sdsc begin}}
{{sdsc  | {{c|inline}} {{spar|function_declaration}} | notes={{mark since c99}} }}
{{sdsc end}}

===Explanation===

The intent of the {{ttb|inline}} specifier is to serve as a hint for the compiler to perform optimizations, such as function inlining, which require the definition of a function to be visible at the call site. The compilers can (and usually do) ignore presence or absence of the {{tt|inline}} specifier for the purpose of optimization.

If the compiler performs function inlining, it replaces a call of that function with its body, avoiding the overhead of a function call (placing data on stack and retrieving the result), which may result in a larger executable as the code for the function has to be repeated multiple times. The result is similar to [[c/preprocessor/replace|function-like macros]], except that identifiers and macros used in the function refer to the definitions visible at the point of definition, not at the point of call.

Regardless of whether inlining takes place, the following semantics of inline functions are guaranteed:

Any function with internal linkage may be declared {{tt|static inline}} with no other restrictions.

A non-static inline function cannot define a non-const function-local static and cannot refer to a file-scope static.
{{source|1=
static int x;
inline void f(void)
{
    static int n = 1; // error: non-const static in a non-static inline function
    int k = x; // error: non-static inline function accesses a static variable
}
}}

If a non-static function is declared {{tt|inline}}, then it must be defined in the same translation unit. The inline definition that does not use {{tt|extern}} is not externally visible and does not prevent other translation units from defining the same function. This makes the {{ttb|inline}} keyword an alternative to {{tt|static}} for defining functions inside header files, which may be included in multiple translation units of the same program.

If a function is declared {{tt|inline}} in some translation units, it does not need to be declared inline everywhere: at most one translation unit may also provide a regular, non-inline non-static function, or a function declared {{tt|extern inline}}. This one translation unit is said to provide the ''external definition''. One external definition must exist in the program if the name of the function with external linkage is used in an expression, see {{rlp|extern#One_definition_rule|one definition rule}}. 

If the external definition exists in the program, the address of the function is always the address of the external function, but when this address is used to make a function call, it's unspecified whether the ''inline definition'' (if present in the translation unit) or the ''external definition'' is called. The static objects defined within an inline definition are distinct from the static objects defined within the external definition:
{{source|1=
inline const char *saddr(void) // the inline definition for use in this file
{
    static const char name[] = &quot;saddr&quot;;
    return name;
}
int compare_name(void)
{
    return saddr() == saddr(); // unspecified behavior, one call could be external
}
extern const char *saddr(void); // an external definition is generated, too
}}

A valid C program must not depend on whether the inline version or the external version of a function is called.

===Keywords===
{{ltt|c/keyword/inline}}

===Notes===
The {{tt|inline}} keyword was adopted from C++, but in C++, if a function is declared inline, it must be declared inline in every translation unit, and also every definition of an inline function must be exactly the same (in C, the definitions may be different, as long as the behavior of the program does not depend on the differences). On the other hand, C++ allows non-const function-local statics and all function-local statics from different definitions of an inline function are the same in C++ but distinct in C.

===Example===
{{example |
|code=
// file test.h
#ifndef TEST_H_INCLUDED
#define TEST_H_INCLUDED
inline int sum (int a, int b)
{
    return a+b;
}
#endif

// file sum.c
#include &quot;test.h&quot;
extern inline int sum (int a, int b); // provides external definition

// file test1.c
#include &lt;stdio.h&gt;
#include &quot;test.h&quot;
extern int f(void);

int main(void)
{
    printf(&quot;%d\n&quot;, sum(1, 2) + f());
}

// file test2.c
#include &quot;test.h&quot;

int f(void)
{
    return sum(2, 3);
}
 | output=
8
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.4 | title=Function specifiers | p=125-127}}
{{ref std c99}}
{{ref std | section=6.7.4 | title=Function specifiers | p=112-113}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/inline | inline specifier}}
{{dsc end}}

[[ar:c/language/inline]]
[[cs:c/language/inline]]
[[de:c/language/inline]]
[[es:c/language/inline]]
[[fr:c/language/inline]]
[[it:c/language/inline]]
[[ja:c/language/inline]]
[[ko:c/language/inline]]
[[pl:c/language/inline]]
[[pt:c/language/inline]]
[[ru:c/language/inline]]
[[tr:c/language/inline]]
[[zh:c/language/inline]]</text>
      <sha1>m5esya3lv96vul4romxteuptorpsh3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/integer constant</title>
    <ns>0</ns>
    <id>13887</id>
    <revision>
      <id>79143</id>
      <parentid>76151</parentid>
      <timestamp>2015-06-25T11:13:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="6917">{{title|integer constant}}
{{c/language/expressions/navbar}}
Allows values of integer type to be used in expressions directly.
===Syntax===
An integer constant is a {{rlp|value category|non-lvalue}} expression of the form
{{sdsc begin}}
{{sdsc | num = 1 | {{spar|decimal-constant}} {{spar|integer-suffix}}{{mark optional}} }}
{{sdsc | num = 2 | {{spar|octal-constant}} {{spar|integer-suffix}}{{mark optional}} }}
{{sdsc | num = 3 | {{spar|hex-constant}} {{spar|integer-suffix}}{{mark optional}} }}
{{sdsc end}}
where
* {{spar|decimal-constant}} is a non-zero decimal digit ({{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}}, {{tt|8}}, {{tt|9}}), followed by zero or more decimal digits ({{tt|0}}, {{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}}, {{tt|8}}, {{tt|9}})
* {{spar|octal-constant}} is the digit zero ({{tt|0}}) followed by zero or more octal digits ({{tt|0}}, {{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}})
* {{spar|hex-constant}} is the character sequence {{tt|0x}} or the character sequence {{tt|0X}} followed by one or more hexadecimal digits ({{tt|0}}, {{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}}, {{tt|8}}, {{tt|9}}, {{tt|a}}, {{tt|A}}, {{tt|b}}, {{tt|B}}, {{tt|c}}, {{tt|C}}, {{tt|d}}, {{tt|D}}, {{tt|e}}, {{tt|E}}, {{tt|f}}, {{tt|F}})
* {{spar|integer-suffix}}, if provided, may contain one or both of the following (if both are provided, they may appear in any order:
:* {{spar|unsigned-suffix}} (the character {{tt|u}} or the character {{tt|U}})
:* {{spar|long-suffix}} (the character {{tt|l}} or the character {{tt|L}}) {{rev inl|since=c99|or the {{spar|long-long-suffix}} (the character sequence {{tt|ll}} or the character sequence {{tt|LL}})}}

===Explanation===
@1@ Decimal integer constant (base 10, the first digit is the most significant).
@2@ Octal integer constant (base 8, the first digit is the most significant).
@3@ Hexadecimal integer constant (base 16, the first digit is the most significant, the letters 'a' through 'f' represent the decimal values 10 through 15).

The following variables are initialized to the same value:
{{source|1=
int d = 42;
int o = 052;
int x = 0x2a;
int X = 0X2A;
}}

===The type of the integer constant===
The type of the integer constant is the first type in which the value can fit, from the list of types which depends on which numeric base and which {{spar|integer-suffix}} was used.

{| class=&quot;wikitable&quot;
|- style=&quot;text-align:center&quot;
! colspan=&quot;3&quot; | Types allowed for integer constants
|- style=&quot;text-align:center&quot;
| suffix
| decimal bases
| hexadecimal or octal bases
|- style=&quot;text-align:left&quot;
| no suffix
| {{c|int}}
{{c|long int}}&lt;br&gt;
{{c|unsigned long int}} {{mark until c99}}&lt;br&gt;
{{c|long long int}} {{mark since c99}}
| {{c|int}}
{{c|unsigned int}}&lt;br&gt;
{{c|long int}}&lt;br&gt;
{{c|unsigned long int}}&lt;br&gt;
{{c|long long int}}{{mark since c99}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c99}}
|-
| {{tt|u}} or {{tt|U}}
| {{c|unsigned int}}
{{c|unsigned long int}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c99}}
| {{c|unsigned int}}
{{c|unsigned long int}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c99}}
|-
| {{tt|l}} or {{tt|L}}
| {{c|long int}}
{{c|unsigned long int}}{{mark until c99}}&lt;br&gt;
{{c|long long int}}{{mark since c99}}
| {{c|long int}}
{{c|unsigned long int}}&lt;br&gt;
{{c|long long int}}{{mark since c99}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c99}}
|-
| both {{tt|l}}/{{tt|L}} and {{tt|u}}/{{tt|U}}
| {{c|unsigned long int}}
{{c|unsigned long long int}}{{mark since c99}}
| {{c|unsigned long int}}
{{c|unsigned long long int}}{{mark since c99}}
|-
| {{tt|ll}} or {{tt|LL}}
| {{c|long long int}}{{mark since c99}}
| {{c|long long int}}{{mark since c99}}
{{c|unsigned long long int}}{{mark since c99}}
|-
| both {{tt|ll}}/{{tt|LL}} and {{tt|u}}/{{tt|U}}
| {{c|unsigned long long int}}{{mark since c99}}
| {{c|unsigned long long int}}{{mark since c99}}
|}

If the value of the integer constant is too big to fit in any of the types allowed by suffix/base combination and the compiler supports extended integer types (such as {{c|__int128}}), the constant may be given the extended integer type; otherwise, the program is ill-formed.

===Notes===
Letters in the integer constants are case-insensitive: {{tt|0xDeAdBaBeU}} and {{tt|0XdeadBABEu}} represent the same number (one exception is the {{spar|long-long-suffix}}, which is either {{tt|ll}} or {{tt|LL}}, never {{tt|lL}} or {{tt|Ll}})

There are no negative integer constants. Expressions such as {{c|-1}} apply the {{rlp|operator_arithmetic|unary minus operator}} to the value represented by the constant, which may involve implicit {{rlp|conversion|type conversions}}.

When used in a controlling expression of [[c/preprocessor/conditional|#if]] or [[c/preprocessor/conditional|#elif]], all signed integer constants act as if they have type {{lc|intmax_t}} and all unsigned integer constants act as if they have type {{lc|uintmax_t}}.

Integer constants may be used in {{rlp|constant expression|integer constant expressions}}.

===Example===
{{example|code=
#include &lt;stdio.h&gt;

int main(void)
{
    printf(&quot;123 = %d\n&quot;, 123);
    printf(&quot;0123 = %d\n&quot;, 0123);
    printf(&quot;0x123 = %d\n&quot;, 0x123);
    printf(&quot;12345678901234567890ull = %llu\n&quot;, 12345678901234567890ull);
    // the type is unsigned long long even without a long long suffix
    printf(&quot;12345678901234567890u = %llu\n&quot;, 12345678901234567890u );

//  printf(&quot;%lld\n&quot;, -9223372036854775808); // ERROR
// the value 9223372036854775808 cannot fit in signed long long, which is the
// biggest type allowed for unsuffixed decimal integer constant

    printf(&quot;%llu\n&quot;, -9223372036854775808u );
    // unary minus applied to unsigned value subtracts it from 2^64,
    // this gives 9223372036854775808

    printf(&quot;%lld\n&quot;, -9223372036854775807 - 1);
    // // correct way to represent the value -9223372036854775808
}
|output=
123 = 123
0123 = 83
0x123 = 291
12345678901234567890ull = 12345678901234567890
12345678901234567890u = 12345678901234567890
9223372036854775808
-9223372036854775808
}}

===References===
{{ref std c11}}
{{ref std | section=6.4.4.1 | title=Integer constants | p=62-64}}
{{ref std c99}}
{{ref std | section=6.4.4.1 | title=Integer constants | p=54-56}}
{{ref std c89}}
{{ref std | section=3.1.3.2 | title=Integer constants}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/integer_literal | integer literal}}
{{dsc end}}

[[ar:c/language/integer_constant]]
[[cs:c/language/integer_constant]]
[[de:c/language/integer_constant]]
[[es:c/language/integer_constant]]
[[fr:c/language/integer_constant]]
[[it:c/language/integer_constant]]
[[ja:c/language/integer_constant]]
[[ko:c/language/integer_constant]]
[[pl:c/language/integer_constant]]
[[pt:c/language/integer_constant]]
[[ru:c/language/integer_constant]]
[[tr:c/language/integer_constant]]
[[zh:c/language/integer_constant]]</text>
      <sha1>bwh9c59d2vc7qf8tlc6vrfqu8qarphn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/lifetime</title>
    <ns>0</ns>
    <id>13880</id>
    <revision>
      <id>83430</id>
      <parentid>83428</parentid>
      <timestamp>2016-02-09T14:25:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention c99 in the modification part of the example too</comment>
      <text xml:space="preserve" bytes="3177">{{title|Lifetime}}
{{c/language/basics/navbar}}

Every {{rlp|object}} in C exists, has a constant address, retains its last-stored value (except when the value is indeterminate){{rev inl|since=c99|, and, for VLA, retains its size}} over a portion of program execution known as this object's ''lifetime''.

For the objects that are declared with automatic, static, and thread storage duration, lifetime equals their {{rlp|storage duration}} (note the difference between non-VLA and VLA automatic storage duration).

For the objects with allocated storage duration, the lifetime begins when the allocation function returns (including the return from {{lc|realloc}}) and ends when the {{lc|realloc}} or deallocation function is called. Note that since allocated objects have no {{rlp|object|declared type}}, the type of the lvalue expression first used to access this object becomes its {{rlp|object|effective type}}.

Accessing an object outside of its lifetime is undefined behavior.
{{source|1=
int* foo(void) {
    int a = 17; // a has automatic storage duration
    return &amp;a;
}  // lifetime of a ends
int main(void) {
    int* p = foo(); // p points to an object past lifetime (&quot;dangling pointer&quot;)
    int n = *p; // undefined behavior
}
}}

A pointer to an object (or one past the object) whose lifetime ended has indeterminate value.

===Temporary lifetime===
Struct and union objects with array members (either direct or members of nested struct/union members) that are designated by {{rlp|value category|non-lvalue expressions}}, have ''temporary lifetime''. Temporary lifetime begins when the expression that refers to such object is evaluated and ends {{rev inl|until=c11|at the next {{rlp|eval order|sequence point}}}}{{rev inl|since=c11|when the containing full expression or full declarator ends}}.

Any attempt to modify an object with temporary lifetime results in undefined behavior.
{{source|1=
struct T { double a[4]; };
struct T f(void) { return (struct T){3.15}; }
double g1(double* x) { return *x; }
void g2(double* x) { *x = 1.0; }
int main(void)
{
    double d = g1(f().a); // C99: UB access to a[0] in g1 whose lifetime ended
                          //      at the sequence point at the start of g1
                          // C11: OK, d is 3.15
    g2(f().a); // C99: UB modification of a[0] whose lifetime ended at the sequence point
               // C11: UB attempt to modify a temporary object
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.2.4 | title=Storage durations of objects | p=38-39}}
{{ref std c99}}
{{ref std | section=6.2.4 | title=Storage durations of objects | p=32}}
{{ref std c89}}
{{ref std | section=3.1.2.4 | title=Storage durations of objects}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/lifetime | Object lifetime}}
{{dsc end}}

[[ar:c/language/lifetime]]
[[cs:c/language/lifetime]]
[[de:c/language/lifetime]]
[[es:c/language/lifetime]]
[[fr:c/language/lifetime]]
[[it:c/language/lifetime]]
[[ja:c/language/lifetime]]
[[ko:c/language/lifetime]]
[[pl:c/language/lifetime]]
[[pt:c/language/lifetime]]
[[ru:c/language/lifetime]]
[[tr:c/language/lifetime]]
[[zh:c/language/lifetime]]</text>
      <sha1>dmre3sguz3c84g0kwhhp2dfb0ci3ad4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/main function</title>
    <ns>0</ns>
    <id>13522</id>
    <revision>
      <id>86902</id>
      <parentid>79042</parentid>
      <timestamp>2016-07-14T15:26:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>qualified the first sentence with the execution environment</comment>
      <text xml:space="preserve" bytes="6022">{{title|Main function}}
{{c/language/basics/navbar}}

Every C program coded to run in a hosted execution environment contains the definition (not the prototype) of a function called {{ttb|main}}, which is the designated start of the program.

{{sdsc begin}}
{{sdsc|num=1|1=
{{c|int}} {{ttb|main}} {{ttb|(void)}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc|num=2|1=
{{c|int}} {{ttb|main}} {{ttb|(}}{{c|int}} {{spar|argc}}{{ttb|,}} {{c|char}} {{c|*}}{{spar|argv}}{{c|[]}}{{ttb|)}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc|num=3|1=
{{c|int}} {{ttb|main}} {{ttb|(}}{{c|int}} {{spar|argc}}{{ttb|,}} {{c|char}} {{c|*}}{{spar|argv}}{{c|[]}}  {{ttb|,}} {{spar|other_parameters}} {{ttb|)}}  {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc|num=4|1={{c|/* another implementation-defined signature */}}
}}
{{sdsc end}}


===Parameters===
{{par begin}}
{{par | argc | Non-negative value representing the number of arguments passed to the program from the environment in which the program is run.}}
{{par | argv | Pointer to an array of pointers to null-terminated multibyte strings that represent the arguments passed to the program from the execution environment ({{c|argv[0]}} through {{c|argv[argc-1]}}). The value of {{c|argv[argc]}} is guaranteed to be {{c|0}}.}}
{{par | body | The body of the main function}}
{{par | {{spar|other_parameters}} | Implementations may allow additional forms of the main function. A very common extension is passing a third argument of type {{tt|char*[]}} pointing at [http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html an array of pointers to the execution environment variables].}}
{{par end}}

The names {{tt|argc}} and {{tt|argv}} are arbitrary, as well as the representation of the types of the parameters: {{c|int main(int ac, char** av)}} is equally valid.

===Return value===
If the return statement is used, the return value is used as the argument to the implicit call to {{lc|exit()}} (see below for details). The values zero and {{lc|EXIT_SUCCESS}} indicate successful termination, the value {{lc|EXIT_FAILURE}} indicates unsuccessful termination.

===Explanation===
The {{tt|main}} function is called at program startup, after all objects with static storage duration are initialized. It is the designated entry point to a program that is executed in ''hosted'' environment (that is, with an operating system). The name and type of the entry point to any ''freestanding'' program (boot loaders, OS kernels, etc) are implementation-defined.

The parameters of the two-parameter form of the main function allow arbitrary multibyte character strings to be passed from the execution environment (these are typically known as ''command line arguments''). The pointers {{tt|argv[1] .. argv[argc-1]}} point at the first characters in each of these strings. {{tt|argv[0]}} is the pointer to the initial character of a null-terminated multibyte strings that represents the name used to invoke the program itself (or, if this is not supported by the execution environment, argv[0][0] is guaranteed to be zero). 

If the execution environment cannot distinguish between uppercase and lowercase letters, the command line arguments are converted to lower case.

The strings are modifiable, and any modifications made persist until program termination, although these modifications do not propagate back to the execution environment: they can be used, for example, with {{lc|strtok}}.

The size of the array pointed to by {{tt|argv}} is at least {{tt|argc+1}}, and the last element, {{tt|argv[argc]}}, is guaranteed to be a null pointer.

The {{tt|main}} function has several special properties:
@1@ A prototype for this function cannot be supplied by the program
@2@ If the return type of the main function is {{rlp|type#Compatible_types|compatible}} with {{c|int}}, then the return from the initial call to main (but not the return from any subsequent, recursive, call) is equivalent to executing the {{lc|exit}} function, with the value that the main function is returning passed as the argument (which then calls the functions registered with {{lc|atexit}}, flushes and closes all streams, and deletes the files created with {{lc|tmpfile}}, and returns control to the execution environment).
@3@ If the return type of the main function is not {{rlp|type#Compatible_types|compatible}} with {{c|int}} (e.g. {{c|void main(void)}}), the value returned to the execution environment is unspecified
@4@ The body of the main function does not need to contain the {{rlp|return|return statement}}: if control reaches the end of {{tt|main}} without encountering a return statement, the effect is that of executing {{c|return 0;}}.

===Example===
{{example
 | Demonstrates how to inform a program about where to find its input and where to write its results.
Invocation: ./a.out indatafile outdatafile
 | code=
#include &lt;stdio.h&gt;

int main(int argc, char *argv[])
{
    printf(&quot;argc = %d\n&quot;, argc);
    int ndx = 0;
    while (ndx &lt; argc)
    {
          printf(&quot;argv[%d] --&gt; %s\n&quot;, ndx,argv[ndx]);
          ++ndx;
    }
    printf(&quot;argv[argc] = %s\n&quot;, argv[argc]);
    return 0;
}
 | p=true
 | output=
argc = 3
argv[0] --&gt; ./a.out
argv[1] --&gt; indatafile
argv[2] --&gt; outdatafile
argv[argc] = (null)
}}

===References===
{{ref std c11}}
{{ref std | section=5.1.2.2.1 | title=Program startup | p=13}}
{{ref std c99}}
{{ref std | section=5.1.2.2.1 | title=Program startup | p=12}}
{{ref std c89}}
{{ref std | section=2.1.2.2   | title=Hosted environment}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/main function | Main function}}
{{dsc end}}

[[ar:c/language/main_function]]
[[cs:c/language/main_function]]
[[de:c/language/main_function]]
[[es:c/language/main_function]]
[[fr:c/language/main_function]]
[[it:c/language/main_function]]
[[ja:c/language/main_function]]
[[ko:c/language/main_function]]
[[pl:c/language/main_function]]
[[pt:c/language/main_function]]
[[ru:c/language/main_function]]
[[tr:c/language/main_function]]
[[zh:c/language/main_function]]</text>
      <sha1>sqtuighxo1eh0f42pk4ax4q6bmhii7p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/memory model</title>
    <ns>0</ns>
    <id>13886</id>
    <revision>
      <id>79044</id>
      <parentid>79043</parentid>
      <timestamp>2015-06-22T13:10:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-c++-ism</comment>
      <text xml:space="preserve" bytes="4161">{{title|Memory model}}
{{c/language/basics/navbar}}
Defines the semantics of computer memory storage for the purpose of the C abstract machine.

The data storage (memory) available to a C program is one or more contiguous sequences of ''bytes''. Each byte in memory has a unique ''address''.

===Byte===
A ''byte'' is the smallest addressable unit of memory. It is defined as a contiguous sequence of bits, large enough to hold any member of the ''basic execution character set'' ({{rlp|translation_phases|the 96 characters}} that are required to be single-byte). C supports bytes of sizes 8 bits and greater.

The {{rlp|types}} {{c|char}}, {{c|unsigned char}}, and {{c|signed char}} use one byte for both storage and {{rlp|object|value representation}}. The number of bits in a byte is accessible as {{lc|CHAR_BIT}}.

===Memory location===
A ''memory location'' is 
* an object of {{rlp|type#Type_groups|scalar type}} (arithmetic type, pointer type, enumeration type)
* or the largest contiguous sequence of {{rlp|bit field}}s of non-zero length

{{source|
struct S {
    char a;     // memory location #1
    int b : 5;  // memory location #2
    int c : 11, // memory location #2 (continued)
          : 0,
        d : 8;  // memory location #3
    struct {
        int ee : 8; // memory location #4
    } e;
} obj; // The object 'obj' consists of 4 separate memory locations
}}

{{rev begin}}
{{rev|since=c11|
===Threads and data races===
A thread of execution is a flow of control within a program that begins with the invocation of a top-level function by {{lc|thrd_create}} or other means.

Any thread can potentially access any object in the program (objects with automatic and thread-local {{rlp|storage duration}} may still be accessed by another thread through a pointer).

Different threads of execution are always allowed to access (read and modify) different ''memory locations'' concurrently, with no interference and no synchronization requirements. (note that it is not safe to concurrently update two non-atomic bit-fields in the same structure if all members declared between them are also (non-zero-length) bit-fields, no matter what the sizes of those intervening bit-fields happen to be)

When an {{rlp|eval_order|evaluation}} of an expression writes to a memory location and another evaluation reads or modifies the same memory location, the expressions are said to ''conflict''. A program that has two conflicting evaluations has a ''data race'' unless either
* both conflicting evaluations are {{rlp|atomic|atomic operations}}
* one of the conflicting evaluations ''happens-before'' another (see {{lc|memory_order}})

If a data race occurs, the behavior of the program is undefined.

(in particular, {{lc|mtx_unlock}} is ''synchronized-with'', and therefore, ''happens-before'' {{lc|mtx_lock}} of the same mutex by another thread, which makes it possible to use mutex locks to guard against data races) {{todo|small example or two}}

===Memory order===
When a thread reads a value from a memory location, it may see the initial value, the value written in the same thread, or the value written in another thread. See {{lc|memory_order}} for details on the order in which writes made from threads become visible to other threads.
}}
{{rev end}}

===References===
{{ref std c11}}
{{ref std | section=3.6     | title=byte | p=4}}
{{ref std | section=3.14    | title=memory location | p=5}}
{{ref std | section=5.1.2.4 | title=Multi-threaded executions and data races | p=17-21}}
{{ref std c99}}
{{ref std | section=3.6     | title=byte | p=4}}
{{ref std c89}}
{{ref std | section=1.6     | title=DEFINITIONS OF TERMS}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/memory_model | Memory model}}
{{dsc end}}

[[ar:c/language/memory_model]]
[[cs:c/language/memory_model]]
[[de:c/language/memory_model]]
[[es:c/language/memory_model]]
[[fr:c/language/memory_model]]
[[it:c/language/memory_model]]
[[ja:c/language/memory_model]]
[[ko:c/language/memory_model]]
[[pl:c/language/memory_model]]
[[pt:c/language/memory_model]]
[[ru:c/language/memory_model]]
[[tr:c/language/memory_model]]
[[zh:c/language/memory_model]]</text>
      <sha1>mv0yhumpn5yt4deer1brhrv8stio3em</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/name space</title>
    <ns>0</ns>
    <id>13877</id>
    <revision>
      <id>79039</id>
      <parentid>76108</parentid>
      <timestamp>2015-06-22T10:42:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+ref</comment>
      <text xml:space="preserve" bytes="5040">{{title|Lookup and name spaces}}
{{c/language/basics/navbar}}

When an {{rlp|identifier}} is encountered in a C program, a lookup is performed to locate the {{rlp|declarations|declaration}} that introduced that identifier and that is currently {{rlp|scope|in scope}}. C allows more than one declaration for the same identifier to be in scope simultaneously if these identifiers belong to different categories, called ''name spaces'':
@1@ Label name space: all identifiers declared as {{rlp|statements#Labels|labels}}.
@2@ Tag names: all identifiers declared as names of {{rlp|struct}}s, {{rlp|union}}s and {{rlp|enum|enumerated types}}. Note that all three kinds of tags share one name space.
@3@ Member names: all identifiers declared as members of any one {{rlp|struct}} or {{rlp|union}}. Every struct and union introduces its own name space of this kind.
@4@ All other identifiers, called ''ordinary identifiers'' to distinguish from {{v|1-3}} (function names, object names, typedef names, enumeration constants).

At the point of lookup, the name space of an identifier is determined by the manner in which it is used:
@1@ identifier appearing as the operand of a {{rlp|goto|goto statement}} is looked up in the label name space.
@2@ identifier that follows the keyword {{c|struct}}, {{c|union}}, or {{c|enum}} is looked up in the tag name space.
@3@ identifier that follows the {{rlp|operator_member_access|member access}} or member access through pointer operator is looked up in the name space of members of the type determined by the left-hand operand of the member access operator.
@4@ all other identifiers are looked up in the name space of ordinary identifiers.

===Notes===
The names of [[c/preprocessor/replace|macros]] are not part of any name space because they are replaced by the preprocessor prior to semantic analysis.

It is common practice to inject struct/union/enum names into the name space of the ordinary identifiers using a {{rlp|typedef}} declaration:
{{source|
struct A { };       // introduces the name A in tag name space
typedef struct A A; // first, lookup for A after &quot;struct&quot; finds one in tag name space
                    // then introduces the name A in the ordinary name space
struct A* p;        // OK, this A is looked up in the tag name space
A* q;               // OK, this A is looked up in the ordinary name space
}}

A well-known example of the same identifier being used across two name spaces is the identifier {{c|stat}} from the POSIX header {{tt|sys/stat.h}}. It [http://pubs.opengroup.org/onlinepubs/9699919799/ names a function] when used as an ordinary identifier and [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html indicates a struct] when used as a tag.

Unlike in C++, enumeration constants are not struct members, and their name space is the name space of ordinary identifiers, and since there is no struct scope in C, their scope is the scope in which the struct declaration appears:
{{source|1=
struct tagged_union 
{
   enum {INT, FLOAT, STRING} type;
   int integer;
   float floating_point;
   char *string;
} tu;

tu.type = INT; // OK in C, error in C++
}}

===Example===
{{example
|code=
void foo (void) { return; } // ordinary name space, file scope
struct foo {      // tag name space, file scope
    int foo;      // member name space for this struct foo, file scope
    enum bar {    // tag name space, file scope
        RED       // ordinary name space, file scope
    } bar;        // member name space for this struct foo, file scope
    struct foo* p; // OK: uses tag/file scope name &quot;foo&quot;
};
enum bar x; // OK: uses tag/file-scope bar
// int foo; // Error: ordinary name space foo already in scope 
//union foo { int a, b; }; // Error: tag name space foo in scope

int main(void)
{
    goto foo; // OK uses &quot;foo&quot; from label name space/function scope

    struct foo { // tag name space, block scope (hides file scope)
       enum bar x; // OK, uses &quot;bar&quot; from tag name space/file scope
    };
    typedef struct foo foo; // OK: uses foo from tag name space/block scope
                            // defines block-scope ordinary foo (hides file scope)
    (foo){.x=RED}; // uses ordinary/block-scope foo and ordinary/file-scope RED

foo:; // label name space, function scope
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.2.3 | title=Name spaces of identifiers | p=37}}
{{ref std c99}}
{{ref std | section=6.2.3 | title=Name spaces of identifiers | p=31}}
{{ref std c89}}
{{ref std | section=3.1.2.3 | title=Name spaces of identifiers}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/lookup | Name lookup}}
{{dsc end}}

[[ar:c/language/name_space]]
[[cs:c/language/name_space]]
[[de:c/language/name_space]]
[[es:c/language/name_space]]
[[fr:c/language/name_space]]
[[it:c/language/name_space]]
[[ja:c/language/name_space]]
[[ko:c/language/name_space]]
[[pl:c/language/name_space]]
[[pt:c/language/name_space]]
[[ru:c/language/name_space]]
[[tr:c/language/name_space]]
[[zh:c/language/name_space]]</text>
      <sha1>tuez5q8jopgtbap7vl3q6wt80s1cwti</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/noreturn</title>
    <ns>0</ns>
    <id>13966</id>
    <redirect title="c/language/ Noreturn" />
    <revision>
      <id>75679</id>
      <timestamp>2015-01-27T18:05:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[c/language/_Noreturn]]</text>
      <sha1>iu6389auj3r8bk000aosukwacw73mox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/object</title>
    <ns>0</ns>
    <id>13881</id>
    <revision>
      <id>89114</id>
      <parentid>85532</parentid>
      <timestamp>2016-12-30T18:37:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-stray curly</comment>
      <text xml:space="preserve" bytes="7964">{{title|Objects and alignment}}
{{c/language/basics/navbar}}

C programs create, destroy, access, and manipulate objects.

An object, in C, is region of {{rlp|memory model|data storage}} in the execution environment, the contents of which can represent ''values'' (a value is the meaning of the contents of an object, when interpreted as having a specific {{rlp|type}}).

Every object has
* size (can be determined with {{rlp|sizeof}})
* alignment requirement{{rev inl|since=c11| (can be determined by {{rlp|_Alignof|alignof}})}}
* {{rlp|storage duration}} (automatic, static, allocated, thread-local)
* {{rlp|lifetime}} (equal to storage duration or temporary)
* effective type (see below)
* value (which may be indeterminate)
* optionally, an {{rlp|identifier}} that denotes this object

Objects are created by {{rlp|declarations}}, [[c/memory|allocation functions]], {{rlp|string literal}}s, {{rlp|compound literal}}s, and by non-lvalue expressions that return {{rlp|lifetime|structures or unions with array members}}.

===Object representation===
Except for {{rlp|bit field}}s, objects are composed of contiguous sequences of one or more bytes, each consisting of {{lc|CHAR_BIT}} bits, and can be copied with {{lc|memcpy}} into an object of type {{c|unsigned char[n]}}, where {{tt|n}} is the size of the object. The contents of the resulting array are known as ''object representation''.

If two objects have the same object representation, they compare equal (except if they are floating-point NaNs). The opposite is not true: two objects that compare equal may have different object representations because not every bit of the object representation needs to participate in the value. Such bits may be used for padding to satisfy alignment requirement, for parity checks, to indicate trap representations, etc.

If an object representation does not represent any value of the object type, it is known as ''trap representation''. Accessing a trap representation in any way other than reading it through an lvalue expression of character type is undefined behavior. The value of a structure or union is never a trap representation even if any particular member is one.

For the objects of type char, signed char, and unsigned char, every bit of the object representation is required to participate in the value representation and each possible bit pattern represents a distinct value (no padding, trap bits, or multiple representations allowed).

===Effective type===
Every object has an ''effective type'', which determines which {{rlp|value category|lvalue}} accesses are valid and which violate the strict aliasing rules.

If the object was created by a {{rlp|declarations|declaration}}, the declared type of that object is the object's ''effective type''.

If the object was created by an [[c/memory|allocation function]] (including {{lc|realloc}}), it has no declared type. Such object acquires an effective type as follows:
* The first write to that object through an lvalue that has a type other than character type, at which time the type of that lvalue becomes this object's ''effective type'' for that write and all subsequent reads.
* {{lc|memcpy}} or {{lc|memmove}} copy another object into that object, at which time the effective type of the source object (if it had one) becomes the effective type of this object for that write and all subsequent reads.
* Any other access to the object with no declared type, the effective type is the type of the lvalue used for the access.

===Strict aliasing===
Given an object with ''effective type'' T1, using an lvalue expression (typically, dereferencing a pointer) of a different type T2 is undefined behavior, unless:
* T2 and T1 are {{rlp|type#Compatible_types|compatible types}}.
* T2 is cvr-qualified version of a type that is {{rlp|type#Compatible_types|compatible}} with T1.
* T2 is a signed or unsigned version of a type that is {{rlp|type#Compatible_types|compatible}} with T1.
* T2 is an aggregate type or union type type that includes one of the aforementioned types among its members (including, recursively, a member of a subaggregate or contained union).
* T2 is a character type (char, signed char, or unsigned char).

{{source|1=
int i = 7;
char* pc = (char*)(&amp;i);
if(pc[0] == '\x7') // aliasing through char is ok
    puts(&quot;This system is little-endian&quot;);
else
    puts(&quot;This system is big-endian&quot;);

float* pf = (float*)(&amp;i);
float d = *pf; // UB: float lvalue *p cannot be used to access int
}}

Note that type-punning may also be performed through the inactive member of a {{rlp|union}}.

===Alignment===
Every complete {{rlp|types#Type_groups|object type}} has a property called ''alignment requirement'', which is an integer value of type {{lc|size_t}} representing the number of bytes between successive addresses at which objects of this type can be allocated. The valid alignment values are non-negative integral powers of two.
{{rev begin}}
{{rev|since=c11|
The alignment requirement of a type can be queried with {{rlp|_Alignof|alignof}}.
}}{{rev end}}

In order to satisfy alignment requirements of all  members of a struct, padding may be inserted after some of its members.
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;stdalign.h&gt;

// objects of struct S can be allocated at any address
// because both S.a and S.b can be allocated at any address
struct S {
  char a; // size: 1, alignment: 1
  char b; // size: 1, alignment: 1
}; // size: 2, alignment: 1

// objects of struct X must be allocated at 4-byte boundaries
// because X.n must be allocated at 4-byte boundaries
// because int's alignment requirement is (usually) 4
struct X {
  int n;  // size: 4, alignment: 4
  char c; // size: 1, alignment: 1
  // three bytes padding
}; // size: 8, alignment: 4

int main(void)
{
    printf(&quot;sizeof(struct S) = %zu\n&quot;, sizeof(struct S));
    printf(&quot;alignof(struct S) = %zu\n&quot;, alignof(struct S));
    printf(&quot;sizeof(struct X) = %zu\n&quot;, sizeof(struct X));
    printf(&quot;alignof(struct X) = %zu\n&quot;, alignof(struct X));
}
|p=true
|output=
sizeof(struct S) = 2
alignof(struct S) = 1
sizeof(struct X) = 8
alignof(struct X) = 4
}}

Each object type imposes its alignment requirement on every object of that type. The strictest (largest) fundamental alignment of any type is the alignment of {{lc|max_align_t}}. The weakest (smallest) alignment is the alignment of the types {{c|char}}, {{c|signed char}}, and {{c|unsigned char}}, and equals 1&lt;!-- because there is no padding between chars in arrays of char  --&gt;.
{{rev begin}}
{{rev|since=c11|If an object's alignment is made stricter (larger) than {{lc|max_align_t}} using {{rlp|_Alignas|alignas}}, it has ''extended alignment requirement''. A struct or union type whose member has extended alignment is an ''over-aligned type''. It is implementation-defined if over-aligned types are supported, and their support may be different in each kind of {{rlp|storage duration}}.
}}
{{rev end}}

===References===
{{ref std c11}}
{{ref std | section=3.15    | title=object | p=6}}
{{ref std | section=6.2.6   | title=Representations of types | p=44-46}}
{{ref std | section=6.5/6-7 | title=Expressions | p=77}}
{{ref std | section=6.2.8   | title=Alignment of objects | p=48-49}}
{{ref std c99}}
{{ref std | section=3.2     | title=alignment | p=3}}
{{ref std | section=3.14    | title=object | p=5}}
{{ref std | section=6.2.6   | title=Representations of types | p=37-39}}
{{ref std | section=6.5/6-7 | title=Expressions | p=67-68}}
{{ref std c89}}
{{ref std | section=1.6     | title=Definitions of terms}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/object | Object}}
{{dsc end}}

[[ar:c/language/object]]
[[cs:c/language/object]]
[[de:c/language/object]]
[[es:c/language/object]]
[[fr:c/language/object]]
[[it:c/language/object]]
[[ja:c/language/object]]
[[ko:c/language/object]]
[[pl:c/language/object]]
[[pt:c/language/object]]
[[ru:c/language/object]]
[[tr:c/language/object]]
[[zh:c/language/object]]</text>
      <sha1>nlkk1gduz45zpci3qrooutdi1660pji</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator alternative</title>
    <ns>0</ns>
    <id>9975</id>
    <revision>
      <id>90335</id>
      <parentid>88744</parentid>
      <timestamp>2017-02-21T20:01:38Z</timestamp>
      <contributor>
        <ip>41.109.201.162</ip>
      </contributor>
      <text xml:space="preserve" bytes="4456">{{title|Alternative operators and tokens}}
{{c/language/navbar}}

C source code may be written in any non-ASCII 8-bit character set that includes the [[enwiki:ISO 646|ISO 646:1983]] invariant character set. However, several C operators and punctuators require characters that are outside of the ISO 646 codeset: {{tt|{, }, [, ], #, \, ^, {{!}}, ~}}. To be able to use character encodings where some or all of these symbols do not exist (such as the German [http://de.wikipedia.org/wiki/DIN_66003 DIN 66003]), there are two possibilities: alternative spellings of operators that use these characters or special combinations of two or three ISO 646 compatible characters that are interpreted as if they were a single non-ISO 646 character.

==Operator macros{{mark c95}}==
There are alternative spellings for the operators that use non-ISO646 characters, defined in {{ttb|&lt;iso646.h&gt;}} as macros:

{{dsc begin}}
{{dsc header | iso646.h}}
{{dsc hitem | Primary | Alternative }}
{{dsc macro const | {{tt|&amp;&amp;}} | {{tt|and}} | nolink=true}}
{{dsc macro const | {{tt|&amp;{{=}}}} | {{tt|and_eq}} | nolink=true}}
{{dsc macro const | {{tt|&amp;}} | {{tt|bitand}} | nolink=true}}
{{dsc macro const | {{tt|&amp;#124;}} | {{tt|bitor}} | nolink=true}}
{{dsc macro const | {{tt|~}} | {{tt|compl}} | nolink=true}}
{{dsc macro const | {{tt|!}} | {{tt|not}} | nolink=true}}
{{dsc macro const | {{tt|!{{=}}}} | {{tt|not_eq}} | nolink=true}}
{{dsc macro const | {{tt|&amp;#124;&amp;#124;}} | {{tt|or}} | nolink=true}}
{{dsc macro const | {{tt|&amp;#124;{{=}}}} | {{tt|or_eq}} | nolink=true}}
{{dsc macro const | {{tt|^}} | {{tt|xor}} | nolink=true}}
{{dsc macro const | {{tt|^{{=}}}} | {{tt|xor_eq}} | nolink=true}}
{{dsc end}}

The characters {{c|&amp;}} and {{c|!}} are invariant under ISO-646, but alternatives are provided for the operators that use these characters anyway to accommodate even more restrictive historical charsets&lt;!-- best reference found so far &quot;The Danish delegation did not, in fact, have a way of representing those characters on their terminals&quot; from https://groups.google.com/d/msg/comp.std.c/eYbj0lCIvn4/89oK8U6JpqEJ , but it doesn't specifically call out &amp; and ! --&gt;.

There is no alternative spelling (such as {{c|eq}}) for the equality operator {{c|{{==}}}} because the character {{c|{{=}}}} was present in all supported charsets.

==Alternative tokens{{mark c95}}==
The following alternative tokens are part of the core language, and, in all respects of the language, each alternative token behaves exactly the same as its primary token, except for its spelling (the [[c/preprocessor/replace|stringification operator]] can make the spelling visible). The two-letter alternative tokens are sometimes called &quot;digraphs&quot;


{| class=&quot;wikitable&quot;
|- style=&quot;text-align: left;&quot;
! Primary
! Alternative
|-
| {{tt|{}} || {{tt|&lt;%}}
|-
| {{tt|}}} || {{tt|%&gt;}}
|-
| {{tt|[}} || {{tt|&lt;:}}
|-
| {{tt|]}} || {{tt|:&gt;}}
|-
| {{tt|#}} || {{tt|%:}}
|-
| {{tt|##}} || {{tt|%:%:}}
|}

==Trigraphs==

The following three-character groups (trigraphs) are {{rlp|translation_phases|parsed before comments and string literals are recognized}}, and each appearance of a trigraph is replaced by the corresponding primary character:

{| class=&quot;wikitable&quot;
|- style=&quot;text-align: left;&quot;
! Primary
! Trigraph
|-
| {{tt|{}} || {{tt|??&lt;}}
|-
| {{tt|}}} || {{tt|??&gt;}}
|-
| {{tt|[}} || {{tt|??(}}
|-
| {{tt|]}} || {{tt|??)}}
|-
| {{tt|#}} || {{tt|??{{=}}}}
|-
| {{tt|\}} || {{tt|??/}}
|-
| {{tt|^}} || {{tt|??'}}
|-
| {{tt|&lt;nowiki&gt;|&lt;/nowiki&gt;}} || {{tt|??!}}
|-
| {{tt|~}} || {{tt|??-}}
|}

Because trigraphs are processed early, a comment such as {{c|// Will the next line be executed?????/}} will effectively comment out the following line, and the string literal such as {{c|&quot;What's going on??!&quot;}} is parsed as {{c|&quot;What's going on{{!}}&quot;}}.

===Example===

{{example
 | The following example demonstrates alternative operator spellings from the {{ttb|&lt;iso646.h&gt;}} header as well as use of digraphs and trigraphs.
The space character in the first command-line argument, argv[1], requires the quotation marks: &quot;, World!&quot;.
 | code=
%:include &lt;stdlib.h&gt;
%:include &lt;stdio.h&gt;
%:include &lt;iso646.h&gt;

int main(int argc, char** argv)
??&lt;
    if (argc &gt; 1 and argv&lt;:1:&gt; not_eq NULL)
    &lt;%
       printf(&quot;Hello%s\n&quot;, argv&lt;:1:&gt;);
    %&gt;

    return EXIT_SUCCESS;
??&gt;
 | p=true
 | output=
Hello, World!
}}

{{dsc begin}}
{{dsc see cpp | cpp/language/operator_alternative | Alternative operator representations}}
{{dsc end}}</text>
      <sha1>64o3bt0tcwdn9ftsfmgbbgce82gu5gv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator arithmetic</title>
    <ns>0</ns>
    <id>9564</id>
    <revision>
      <id>90251</id>
      <parentid>82029</parentid>
      <timestamp>2017-02-14T22:23:37Z</timestamp>
      <contributor>
        <username>Mgkrupa</username>
        <id>6350</id>
      </contributor>
      <comment>Added info</comment>
      <text xml:space="preserve" bytes="21821">{{title|Arithmetic operators}}
{{c/language/expressions/navbar}}
Arithmetic operators apply standard mathematical operations to their operands.

{{todo|consider a more general-purpose ToC for this and other tables that cover multiple topics}}
{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|- style=&quot;text-align:center&quot;
! Operator
! Operator name
! Example
! Result
|- style=&quot;text-align:center&quot;
| {{c|1=+}}
| unary plus
| {{c|1=+a}}
| the value of '''a''' after promotions
|- style=&quot;text-align:center&quot;
| {{c|1=-}}
| unary minus
| {{c|1=-a}}
| the negative of '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=+}}
| addition
| {{c|1=a + b}}
| the addition of '''a''' and '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=-}}
| subtraction
| {{c|1=a - b}}
| the subtraction of '''b''' from '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=*}}
| product
| {{c|1=a * b}}
| the product of '''a''' and '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=/}}
| division
| {{c|1=a / b}}
| the division of '''a''' by '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=%}}
| modulo
| {{c|1=a % b}}
| the remainder of '''a''' divided by '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=~}}
| bitwise NOT
| {{c|1=~a}}
| the bitwise NOT of '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=&amp;}}
| bitwise AND
| {{c|1=a &amp; b}}
| the bitwise AND of '''a''' and '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1={{!}}}}
| bitwise OR
| {{c|1=a {{!}} b}}
| the bitwise OR of '''a''' and '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=^}}
| bitwise XOR
| {{c|1=a ^ b}}
| the bitwise XOR of '''a''' and '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=&lt;&lt;}}
| bitwise left shift
| {{c|1=a &lt;&lt; b}}
| '''a''' left shifted by '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=&gt;&gt;}}
| bitwise right shift
| {{c|1=a &gt;&gt; b}}
| '''a''' right shifted by '''b'''
|}

===Overflows===
Unsigned integer arithmetic is always performed {{math|modulo 2{{su|p=n}}}} where n is the number of bits in that particular integer. E.g. for {{c|unsigned int}}, adding one to {{lc|UINT_MAX}} gives {{c|0}}, and subtracting one from {{c|0}} gives {{lc|UINT_MAX}}.

When signed integer arithmetic operation overflows (the result does not fit in the result type), the behavior is undefined: it may wrap around according to the rules of the representation (typically 2's complement), it may trap on some platforms or due to compiler options (e.g. {{tt|-ftrapv}} in GCC and Clang), or may be completely [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html optimized out by the compiler].

====Floating-point environment====
If {{ltt|c/preprocessor/impl|#pragma STDC FENV_ACCESS}} is set to {{tt|ON}}, all floating-point arithmetic operators obey the current floating-point [[c/numeric/fenv/FE_round|rounding direction]] and report floating-point arithmetic errors as specified in [[c/numeric/math/math_errhandling|math_errhandling]] unless part of a [[c/language/initialization|static initializer]] (in which case floating-point exceptions are not raised and the rounding mode is to nearest)

====Floating-point contraction====
Unless {{ltt|c/preprocessor/impl|#pragma STDC FP_CONTRACT}} is set to {{tt|OFF}}, all floating-point arithmetic may be performed as if the intermediate results have infinite range and precision, that is optimizations that omit rounding errors and floating-point exceptions that would be observed if the expression was evaluated exactly as written. For example, allows the implementation of {{c|(x*y) + z}} with a single fused multiply-add CPU instruction or optimization of {{c|1=a = x*x*x*x;}} as {{c|1=tmp = x*x; a = tmp*tmp}}.

Unrelated to contracting, intermediate results of floating-point arithmetic may have range and precision that is different from the one indicated by its type, see {{lc|FLT_EVAL_METHOD}}

===Unary arithmetic===
The unary arithmetic operator expressions have the form 

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|+}} {{spar|expression}} }}
{{sdsc | num=2 | {{ttb|-}} {{spar|expression}} }}
{{sdsc end}}
@1@ unary plus (promotion)
@2@ unary minus (negation)
where 
{{par begin}}
{{par|{{spar|expression}} | expression of any {{rlp|arithmetic types|arithmetic type}}}}
{{par end}}

Both unary plus and unary minus first apply {{rlp|conversion|integral promotions}} to their operand, and then
* unary plus returns the value after promotion
* unary minus returns the negative of the value after promotion (except that the negative of a NaN is another NaN)

The type of the expression is the type after promotion, and the {{rlp|value category}} is non-lvalue.

====Notes====
The unary minus invokes undefined behavior due to signed integer overflow when applied to {{lc|INT_MIN}}, {{lc|LONG_MIN}}, or {{lc|LLONG_MIN}}, on typical (2's complement) platforms.

In C++, unary operator + can also be used with other built-in types such as arrays and functions, not so in C.

{{example|code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;
int main(void)
{
    char c = 'a';
    printf(&quot;sizeof char: %zu sizeof int: %zu\n&quot;, sizeof c, sizeof +c);

    printf(&quot;-1, where 1 is signed: %d\n&quot;, -1);
    printf(&quot;-1, where 1 is unsigned: %u\n&quot;, -1u);

    double complex z = 1 + 2*I;
    printf(&quot;-(1+2i) = %.1f%+.1f\n&quot;, creal(-z), cimag(-z));
}
|p=true
|output=
sizeof char: 1 sizeof int: 4
-1, where 1 is signed: -1
-1, where 1 is unsigned: 4294967295
-(1+2i) = -1.0-2.0
}}

===Additive operators===
The binary additive arithmetic operator expressions have the form 

{{sdsc begin}}
{{sdsc | num=1 | {{spar|lhs}} {{ttb|+}} {{spar|rhs}} }}
{{sdsc | num=2 | {{spar|lhs}} {{ttb|-}} {{spar|rhs}} }}
{{sdsc end}}
@1@ addition: {{spar|lhs}} and {{spar|rhs}} must be one of the following
:* both have {{rlp|arithmetic types}}, including complex and imaginary
:* one is a pointer to complete object type, the other has integer type
@2@ subtraction: {{spar|lhs}} and {{spar|rhs}} must be one of the following
:* both have {{rlp|arithmetic types}}, including complex and imaginary
:* {{spar|lhs}} has pointer to complete object type, {{spar|rhs}} has integer type
:* both are pointers to complete objects of {{rlp|type#Comparible_types|compatible}} types, ignoring qualifiers

====Arithmetic addition and subtraction====
If both operands have {{rlp|arithmetic types}}, then
* first, {{rlp|conversion#Usual_arithmetic_conversions|usual arithmetic conversions}} are performed
* then, the values of the operands after conversions are added or subtracted following the usual rules of mathematics (for subtraction, {{spar|rhs}} is subtracted from {{spar|lhs}}), except that
:* if one operand is NaN, the result is NaN
:* infinity minus infinity is NaN and {{lc|FE_INVALID}} is raised
:* infinity plus the negative infinity is NaN and {{lc|FE_INVALID}} is raised

Complex and imaginary addition and subtraction are defined as follows (note the result type is imaginary if both operands are imaginary and complex if one operand is real and the other imaginary, as specified by the usual arithmetic conversions):
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! + or -
! u
! iv
! u + iv
|-
! x
| x ± u
| x ± iv
| (x ± u) ± iv
|-
! iy
| ±u + iy
| i(y ± v)
| ±u + i(y ± v)
|-
! x + iy
| (x ± u) + iy
| x + i(y ± v)
| (x ± u) + i(y ± v)
|}


{{example|code=
// work in progress
// note: take part of the c/language/conversion example
}}
&lt;!-- take something from the c/language/conversion example:

1.f + 20000001; // int is converted to float, giving 20000000.00
                // addition and then rounding to float gives 20000000.00
(char)'a' + 1L; // First, char is promoted back to int.
                // this is signed + signed case, different rank
                // int is converted to long, the result is 98 signed long
2u - 10; // signed / unsigned, same rank
         // 10 is converted to unsigned, unsigned math is modulo INT_MAX
         // result is 4294967288 of type unsigned int (aka INT_MAX-7)
0UL - 1LL; // signed/unsigned diff rank, rank of signed is greater.
           // If sizeof(long) == sizeof(long long), signed cannot represent all unsigned
           // this is the last case: both operands are converted to unsigned long long
           // the result is 18446744073709551615 (LLONG_MAX) of type unsigned long long
--&gt;

====Pointer arithmetic====
* If the pointer {{tt|P}} points at an element of an array with index {{tt|I}}, then
:* {{c|P+N}} and {{c|N+P}} are pointers that point at an element of the same array with index {{tt|I+N}}
:* {{c|P-N}} is a pointer that points at an element of the same array with index {tt|I-N}}

The behavior is defined only if both the original pointer and the result pointer are pointing at elements of the same array or one past the end of that array. Note that executing p-1 when p points at the first element of an array is undefined behavior and may fail on some platforms.

* If the pointer {{tt|P1}} points at an element of an array with index {{tt|I}} (or one past the end) and {{tt|P2}} points at an element of the same array with index {{tt|J}} (or one past the end), then
:* {{c|P1-P2}} has the value equal to {{c|J-I}} and the type {{lc|ptrdiff_t}} (which is a signed integer type, typically half as large as the size of the largest object that can be declared)

The behavior is defined only if the result fits in {{lc|ptrdiff_t}}.

For the purpose of pointer arithmetic, a pointer to an object that is not an element of any array is treated as a pointer to the first element of an array of size 1.

{{example|code=
// work in progress
int n = 4, m = 3;
int a[n][m];     // VLA of 4 VLAs of 3 ints each
int (*p)[m] = a; // p == &amp;a[0] 
p = p + 1;       // p == &amp;a[1] (pointer arithmetic works with VLAs just the same)
(*p)[2] = 99;    // changes a[1][2]
}}

===Multiplicative operators===
The binary multiplicative arithmetic operator expressions have the form 

{{sdsc begin}}
{{sdsc | num=1 | {{spar|lhs}} {{ttb|*}} {{spar|rhs}} }}
{{sdsc | num=2 | {{spar|lhs}} {{ttb|/}} {{spar|rhs}} }}
{{sdsc | num=3 | {{spar|lhs}} {{ttb|%}} {{spar|rhs}} }}
{{sdsc end}}
@1@ multiplication. {{spar|lhs}} and {{spar|rhs}} must have {{rlp|arithmetic types}}
@2@ division. {{spar|lhs}} and {{spar|rhs}} must have {{rlp|arithmetic types}}
@3@ remainder. {{spar|lhs}} and {{spar|rhs}} must have {{rlp|arithmetic types|integer types}}

* first, {{rlp|conversion#Usual_arithmetic_conversions|usual arithmetic conversions}} are performed. Then...

====Multiplication====
The binary operator * performs multiplication of its operands (after usual arithmetic conversions) following the usual arithmetic definitions, except that
* if one operand is a NaN, the result is a NaN
* multiplication if infinity by zero gives NaN and {{lc|FE_INVALID}} is raised
* multiplication of infinity by a nonzero gives infinity (even for complex arguments)

Because in C, any {{rlp|arithmetic_types|complex value}} with at least one infinite part as an infinity even if its other part is a NaN, the usual arithmetic rules do not apply to complex-complex multiplication. Other combinations of floating operands follow the following table:
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! *
! u
! iv
! u + iv
|-
! x
| xu
| i(xv)
| (xu) + i(xv)
|-
! iy
| i(yu)
| −yv
| (−yv) + i(yu)
|-
! x + iy
| (xu) + i(yu)
| (−yv) + i(xv)
| ''special rules''
|}

Besides infinity handling, complex multiplication is not allowed to overflow intermediate results, except when {{ltt|c/preprocessor/impl|#pragma STDC CX_LIMITED_RANGE}} is set to {{tt|ON}}, in which case the value may be calculated as if by {{math|(x+iy)×(u+iv) {{=}} (xu-yv)+i(yu+xv)}}, as the programmer assumes the responsibility of limiting the range of the operands and dealing with the infinities.

Despite disallowing undue overflow, complex multiplication may raise spurious floating-point exceptions (otherwise it is prohibitively difficult to implement non-overflowing versions)

====Division====
The binary operator / divides the first operand by the second (after usual arithmetic conversions) following the usual arithmetics definitions, except that
* when the type after usual arithmetic conversions is an integer type, the result is the algebraic quotient (not a fraction), {{rev inl|until=c99|rounded in implementation-defined direction}}{{rev inl|since=c99|truncated towards zero}}
* if one operand is a NaN, the result is a NaN
* if the first operand is a complex infinity and the second operand is finite, then the
result of the / operator is a complex infinity
* if the first operand is finite and the second operand is a complex infinity, then the
result of the / operator is a zero

Because in C, any {{rlp|arithmetic_types|complex value}} with at least one infinite part as an infinity even if its other part is a NaN, the usual arithmetic rules do not apply to complex-complex division. Other combinations of floating operands follow the following table:
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! /
! u
! iv
|-
! x
| x/u
| i(−x/v)
|-
! iy
| i(y/u)
| y/v
|-
! x + iy
| (x/u) + i(y/u)
| (y/v) + i(−x/v)
|}

Besides infinity handling, complex division is not allowed to overflow intermediate results, except when {{ltt|c/preprocessor/impl|#pragma STDC CX_LIMITED_RANGE}} is set to {{tt|ON}}, in which case the value may be calculated as if by {{math|(x+iy)/(u+iv) {{=}} [(xu+yv)+i(yu-xv)]/(u{{su|p=2}}+v{{su|p=2}})}}, as the programmer assumes the responsibility of limiting the range of the operands and dealing with the infinities.

Despite disallowing undue overflow, complex division may raise spurious floating-point exceptions (otherwise it is prohibitively difficult to implement non-overflowing versions)

If the second operand is zero, the behavior is undefined, except that if the IEEE floating-point arithmetic is supported, and the floating-point division is taking place, then
* Dividing a non-zero number by ±0.0 gives the correctly-signed infinity and {{lc|FE_DIVBYZERO}} is raised
* Dividing 0.0 by 0.0 gives NaN and {{lc|FE_INVALID}} is raised

====Remainder====
The binary operator % yields the remainder of the division of the first operand by the second (after usual arithmetic conversions).

The sign of the remainder is defined in such a way that if the quotient {{tt|a/b}} is representable in the result type, then {{c|1=(a/b)*b + a%b == a}}.

If the second operand is zero, the behavior is undefined.

If the quotient {{tt|a/b}} is not representable in the result type, the behavior of both {{tt|a/b}} and {{tt|a%b}} is undefined (that means {{c|INT_MIN%-1}} is undefined on 2's complement systems)

Note: the remainder operator does not work on floating-point types, the library function {{lc|fmod}} provides that functionality.

{{example|
|code=
#include&lt;stdio.h&gt;
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;
#include &lt;math.h&gt;
int main(void)
{


// TODO simpler cases, take some from C++


   double complex z = (1 + 0*I) * (INFINITY + I*INFINITY);
// textbook formula would give
// (1+i0)(∞+i∞) ⇒ (1×∞ – 0×∞) + i(0×∞+1×∞) ⇒ NaN + I*NaN
// but C gives a complex infinity
   printf(&quot;%f + i*%f\n&quot;, creal(z), cimag(z));

// textbook formula would give
// cexp(∞+iNaN) ⇒ exp(∞)×(cis(NaN)) ⇒ NaN + I*NaN
// but C gives  ±∞+i*nan
   double complex y = cexp(INFINITY + I*NAN);
   printf(&quot;%f + i*%f\n&quot;, creal(y), cimag(y));

}
|p=true 
|output=
inf + i*inf &lt;!-- actual result on Solaris, but GNU -nan + i*inf is also valid --&gt;
inf + i*nan &lt;!-- the sign of the real inf in cexp case is unspecified --&gt;
}}

===Bitwise logic===
The bitwise arithmetic operator expressions have the form 

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|~}} {{spar|rhs}} }}
{{sdsc | num=2 | {{spar|lhs}} {{ttb|&amp;}} {{spar|rhs}} }}
{{sdsc | num=3 | {{spar|lhs}} {{ttb|{{!}}}} {{spar|rhs}} }}
{{sdsc | num=4 | {{spar|lhs}} {{ttb|^}} {{spar|rhs}} }}
{{sdsc end}}
@1@ bitwise NOT
@2@ bitwise AND
@3@ bitwise OR
@4@ bitwise XOR
where
{{par begin}}
{{par | {{spar|lhs}}, {{spar|rhs}} | expressions of integer type}}
{{par end}}

First, operators &amp;, ^, and {{!}} perform {{rlp|conversion#Usual_arithmetic_conversions|usual arithmetic conversions}} on both operands and the operator ~ performs {{rlp|conversion#Integer_promotions|integer promotions}} on its only operand.

Then, the corresponding binary logic operators are applied bitwise; that is, each bit of the result is set or cleared according to the logic operation (NOT, AND, OR, or XOR), applied to the corresponding bits of the operands.

Note: bitwise operators are commonly used to manipulate bit sets and bit masks.

Note: for unsigned types (after promotion), the expression ~E is equivalent to the maximum value representable by the result type minus the original value of E.

{{example
|code=
#include &lt;stdio.h&gt;
#include &lt;stdint.h&gt;
int main(void)
{
    uint16_t mask = 0x00f0;
    uint32_t a = 0x12345678;
    printf(&quot;Value: %#x mask: %#x\n&quot;
           &quot;Setting bits:   %#x\n&quot;
           &quot;Clearing bits:  %#x\n&quot;
           &quot;Selecting bits: %#x\n&quot;,
           a,mask,(a{{!}}mask),(a&amp;~mask),(a&amp;mask));
}
|p=true
|output=
Value: 0x12345678 mask: 0xf0
Setting bits:   0x123456f8
Clearing bits:  0x12345608
Selecting bits: 0x70
}}

===Shift operators===
The bitwise shift operator expressions have the form 

{{sdsc begin}}
{{sdsc | num=1 | {{spar|lhs}} {{ttb|&lt;&lt;}} {{spar|rhs}} }}
{{sdsc | num=2 | {{spar|lhs}} {{ttb|&gt;&gt;}} {{spar|rhs}} }}
{{sdsc end}}
@1@ left shift of {{spar|lhs}} by {{spar|rhs}} bits
@2@ right shift of {{spar|lhs}} by {{spar|rhs}} bits
where
{{par begin}}
{{par | {{spar|lhs}}, {{spar|rhs}} | expressions of integer type}}
{{par end}}

First, {{rlp|conversion|integer promotions}} are performed, individually, on each operand (Note: this is unlike other binary arithmetic operators, which all perform usual arithmetic conversions). The type of the result is the type of {{spar|lhs}} after promotion. 

For unsigned {{spar|lhs}}, the value of {{tt|LHS &lt;&lt; RHS}} is the value of {{math|LHS * 2{{su|p=RHS}}}}, reduced modulo maximum value of the return type plus 1 (that is, bitwise left shift is performed and the bits that get shifted out of the destination type are discarded). For signed {{spar|lhs}}, the value of {{tt|LHS &lt;&lt; RHS}} is {{math|LHS * 2{{su|p=RHS}}}} if it is representable in the promoted type of {{spar|lhs}}, otherwise the behavior is undefined.

For unsigned {{spar|lhs}} and for signed {{spar|lhs}} with nonnegative values, the value of {{tt|LHS &gt;&gt; RHS}} is the integer part of {{math|LHS / 2{{su|p=RHS}}}}. For negative {{tt|LHS}}, the value of {{tt|LHS &gt;&gt; RHS}} is implementation-defined where in most implementations, this performs arithmetic right shift (so that the result remains negative). Thus in most implementations, right shifting a signed {{tt|LHS}} fills the new higher-order bits with the original sign bit (i.e. with 0 if it was non-negative and 1 if it was negative).

In any case, the behavior is undefined if {{spar|rhs}} is negative or is greater or equal the number of bits in the promoted {{spar|lhs}}.

{{example
|code=
#include &lt;stdio.h&gt;
enum {ONE=1, TWO=2};
int main(void)
{
    char c = 0x10;
    unsigned long long ulong_num = 0x123;
    printf(&quot;0x123 &lt;&lt; 1  = %#llx\n&quot;
           &quot;0x123 &lt;&lt; 63 = %#llx\n&quot;   // overflow truncates high bits for unsigned numbers
           &quot;0x10  &lt;&lt; 10 = %#x\n&quot;,    // char is promoted to int
           ulong_num &lt;&lt; 1, ulong_num &lt;&lt; 63, c &lt;&lt; 10);
    long long long_num = -1000;
    printf(&quot;-1000 &gt;&gt; 1 = %lld\n&quot;, long_num &gt;&gt; ONE);  // implementation defined
}
|p=true
|output=
0x123 &lt;&lt; 1  = 0x246
0x123 &lt;&lt; 63 = 0x8000000000000000
0x10  &lt;&lt; 10 = 0x4000
-1000 &gt;&gt; 1 = -500
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.3.3 | title=Unary arithmetic operators | p=89}}
{{ref std | section=6.5.5   | title=Multiplicative operators | p=92}}
{{ref std | section=6.5.6   | title=Additive operators | p=92-94}}
{{ref std | section=6.5.7   | title=Bitwise shift operators | p=94-95}}
{{ref std | section=6.5.10  | title=Bitwise AND operator | p=97}}
{{ref std | section=6.5.11  | title=Bitwise exclusive OR operator | p=98}}
{{ref std | section=6.5.12  | title=Bitwise inclusive OR operator | p=98}}
{{ref std c99}}
{{ref std | section=6.5.3.3 | title=Unary arithmetic operators | p=79}}
{{ref std | section=6.5.5   | title=Multiplicative operators | p=82}}
{{ref std | section=6.5.6   | title=Additive operators | p=82-84}}
{{ref std | section=6.5.7   | title=Bitwise shift operators | p=84-85}}
{{ref std | section=6.5.10  | title=Bitwise AND operator | p=87}}
{{ref std | section=6.5.11  | title=Bitwise exclusive OR operator | p=88}}
{{ref std | section=6.5.12  | title=Bitwise inclusive OR operator | p=88}}
{{ref std c89}}
{{ref std | section=3.3.3.3 | title=Unary arithmetic operators}}
{{ref std | section=3.3.5   | title=Multiplicative operators}}
{{ref std | section=3.3.6   | title=Additive operators}}
{{ref std | section=3.3.7   | title=Bitwise shift operators}}
{{ref std | section=3.3.10  | title=Bitwise AND operator}}
{{ref std | section=3.3.11  | title=Bitwise exclusive OR operator}}
{{ref std | section=3.3.12  | title=Bitwise inclusive OR operator}}
{{ref std end}}

===See Also===

[[c/language/operator_precedence | Operator precedence]]
{{c/language/operators}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_arithmetic | Arithmetic operators}}
{{dsc end}}

[[ar:c/language/operator_arithmetic]]
[[cs:c/language/operator_arithmetic]]
[[de:c/language/operator_arithmetic]]
[[es:c/language/operator_arithmetic]]
[[fr:c/language/operator_arithmetic]]
[[it:c/language/operator_arithmetic]]
[[ja:c/language/operator_arithmetic]]
[[ko:c/language/operator_arithmetic]]
[[pl:c/language/operator_arithmetic]]
[[pt:c/language/operator_arithmetic]]
[[ru:c/language/operator_arithmetic]]
[[tr:c/language/operator_arithmetic]]
[[zh:c/language/operator_arithmetic]]</text>
      <sha1>entndsq2gpyh6e393f979ewtpq700s5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator assignment</title>
    <ns>0</ns>
    <id>9562</id>
    <revision>
      <id>81313</id>
      <parentid>79163</parentid>
      <timestamp>2015-10-15T18:57:43Z</timestamp>
      <contributor>
        <ip>174.24.135.18</ip>
      </contributor>
      <comment>add closing parenthese.</comment>
      <text xml:space="preserve" bytes="7549">{{title|Assignment operators}}
{{c/language/expressions/navbar}}
Assignment and compound assignment operators are binary operators that modify the variable to their left using the value to their right.

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|- style=&quot;text-align:center&quot;
! Operator
! Operator name
! Example
! Description
! Equivalent of
|- style=&quot;text-align:center&quot;
| {{c|1==}}
| basic assignment
| {{c|1=a = b}}
| '''a''' becomes equal to '''b'''
| {{n/a}}
|- style=&quot;text-align:center&quot;
| {{c|1=+=}}
| addition assignment
| {{c|1=a += b}}
| '''a''' becomes equal to the addition of '''a''' and '''b'''
| {{c|1=a = a + b}}
|- style=&quot;text-align:center&quot;
| {{c|1=-=}}
| subtraction assignment
| {{c|1=a -= b}}
| '''a''' becomes equal to the subtraction of '''b''' from '''a'''
| {{c|1=a = a - b}}
|- style=&quot;text-align:center&quot;
| {{c|1=*=}}
| multiplication assignment
| {{c|1=a *= b}}
| '''a''' becomes equal to the product of '''a''' and '''b'''
| {{c|1=a = a * b}}
|- style=&quot;text-align:center&quot;
| {{c|1=/=}}
| division assignment
| {{c|1=a /= b}}
| '''a''' becomes equal to the division of '''a''' by '''b'''
| {{c|1=a = a / b}}
|- style=&quot;text-align:center&quot;
| {{c|1=%=}}
| modulo assignment
| {{c|1=a %= b}}
| '''a''' becomes equal to the remainder of '''a''' divided by '''b'''
| {{c|1=a = a % b}}
|- style=&quot;text-align:center&quot;
| {{c|1=&amp;=}}
| bitwise AND assignment
| {{c|1=a &amp;= b}}
| '''a''' becomes equal to the bitwise AND of '''a''' and '''b'''
| {{c|1=a = a &amp; b}}
|- style=&quot;text-align:center&quot;
| {{c|1={{!}}=}}
| bitwise OR assignment
| {{c|1=a {{!}}= b}}
| '''a''' becomes equal to the bitwise OR of '''a''' and '''b'''
| {{c|1=a = a {{!}} b}}
|- style=&quot;text-align:center&quot;
| {{c|1=^=}}
| bitwise XOR assignment
| {{c|1=a ^= b}}
| '''a''' becomes equal to the bitwise XOR of '''a''' and '''b'''
| {{c|1=a = a ^ b}}
|- style=&quot;text-align:center&quot;
| {{c|1=&lt;&lt;=}}
| bitwise left shift assignment
| {{c|1=a &lt;&lt;= b}}
| '''a''' becomes equal to '''a''' left shifted by '''b'''
| {{c|1=a = a &lt;&lt; b}}
|- style=&quot;text-align:center&quot;
| {{c|1=&gt;&gt;=}}
| bitwise right shift assignment
| {{c|1=a &gt;&gt;= b}}
| '''a''' becomes equal to '''a''' right shifted by '''b'''
| {{c|1=a = a &gt;&gt; b}}
|}

===Simple assignment===
The simple assignment operator expressions have the form 

{{sdsc begin}}
{{sdsc | {{spar|lhs}} {{ttb|{{=}}}} {{spar|rhs}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|lhs}} | {{rlp|value category|modifiable lvalue}} expression of any complete object type }}
{{par|{{spar|rhs}} | expression of any type {{rlp|conversion|implicitly convertible}} to {{spar|lhs}} or {{rlp|type#Compatible_types|compatible}} with {{spar|lhs}}}}
{{par end}}

Assignment performs {{rlp|conversion|implicit conversion}} from the value of {{spar|rhs}} to the type of {{spar|rhs}} and then replaces the value in the object designated by {{spar|lhs}} with the converted value of {{spar|rhs}}.

Assignment also returns the same value as what was stored in {{tt|lhs}} (so that expressions such as {{c|1=a = b = c}} are possible). The {{rlp|value category}} of the assignment operator is non-lvalue (so that expressions such as {{c|1=(a=b)=c}} are invalid).

{{spar|rhs}} and {{spar|lhs}} must satisfy one of the following:
* both {{spar|lhs}} and {{spar|rhs}} have {{rlp|type#Compatible_types|compatible}} {{rlp|struct}} or {{rlp|union}} type, or..
* {{spar|rhs}} must be {{rlp|conversion|implicitly convertible}} to {{spar|lhs}}, which implies
:* both {{spar|lhs}} and {{spar|rhs}} have {{rlp|arithmetic types}}, in which case {{spar|lhs}} may be {{rlp|volatile}}-qualified or {{rlp|atomic}}
:* both {{spar|lhs}} and {{spar|rhs}} have {{rlp|pointer}} to {{rlp|type#Compatible_types|compatible}} (ignoring qualifiers) types, or one of the pointers is a pointer to void, and the {{rlp|conversion}} would not add qualifiers to the pointed-to type. {{spar|lhs}} may be {{rlp|volatile}} or {{rlp|restrict}}-qualified or {{rlp|atomic}}.
:* {{spar|lhs}} is a pointer (possibly qualified or atomic) and {{spar|rhs}} is a null pointer constant such as {{lc|NULL}}
:* {{spar|lhs}} has type {{lc|_Bool}} (possibly qualified or atomic) and {{spar|rhs}} is a pointer

====Notes====
If {{spar|rhs}} and {{spar|lhs}} overlap in memory (e.g. they are members of the same union), the behavior is undefined unless the overlap is exact and the types are {{rlp|type#Compatible_types|compatible}}.

Although arrays are not assignable, an array wrapped in a struct is assignable to another object of the same (or compatible) struct type.

The side effect of updating {{spar|lhs}} is {{rlp|eval order|sequenced after}} the value computations, but not the side effects of {{spar|lhs}} and {{spar|rhs}} themselves and the evaluations of the operands are, as usual, unsequenced relative to each other (so the expressions such as {{c|1=i=++i}}; are undefined)

Assignment strips extra range and precision from floating-point expressions (see {{lc|FLT_EVAL_METHOD}}).

In C++, assignment operators are lvalue expressions, not so in C

{{example|code=
// todo more, demo struct{array} too
const char **cpp;
char *p;
const char c = 'A';

cpp = &amp;p; // Error: char ** is not convertible to const char **
*cpp = &amp;c; // OK, char* is convertible to const char*
*p = 0; // OK, null pointer constant is convertible to any pointer
}}

===Compound assignment===
The compound assignment operator expressions have the form 

{{sdsc begin}}
{{sdsc | {{spar|lhs}} {{spar|op}} {{spar|rhs}} }}
{{sdsc end}}
where
{{par begin}}
{{par | {{spar|op}} | one of {{c|*{{=}}}}, {{c|/{{=}}}} {{c|%{{=}}}}, {{c|+{{=}}}} {{c|-{{=}}}},  {{c|&lt;&lt;{{=}}}}, {{c|&gt;&gt;{{=}}}}, {{c|&amp;{{=}}}}, {{c|^{{=}}}}, {{c|1={{!}}=}} }}
{{par | {{spar|lhs}}, {{spar|rhs}} | expressions with {{rlp|arithmetic types}} (where {{spar|lhs}} may be qualified or atomic), except when {{spar|op}} is {{c|+{{=}}}} or {{c|-{{=}}}}, which also accept pointer types with the same restrictions as + and - }}
{{par end}}

The expression {{spar|lhs}} {{spar|@{{=}}}} {{spar|rhs}} is exactly the same as {{spar|lhs}} {{ttb|{{=}}}} {{spar|lhs}} {{spar|@}} {{ttb|(}} {{spar|rhs}} {{ttb|)}}, except that {{spar|lhs}} is evaluated only once.

{{rev begin}}
{{rev|since=c11|
If {{spar|lhs}} has {{rlp|atomic}} type, the operation behaves as a single atomic read-modify-write operation with memory order {{lc|memory_order_seq_cst}}

For integer atomic types, the compound assignment {{c|1=@=}} is equivalent to:
{{source|1=
T1* addr = &amp;lhs;
T2 val = rhs;
T1 old = *addr;
T1 new;
do { new = old @ val } while (!atomic_compare_exchange_strong(addr, &amp;old, new);
}}
}}
{{rev end}}

{{example}}

===References===
{{ref std c11}}
{{ref std | section=6.5.16 | title=Assignment operators | p=101-104}}
{{ref std c99}}
{{ref std | section=6.5.16 | title=Assignment operators | p=91-93}}
{{ref std c89}}
{{ref std | section=3.3.16 | title=Assignment operators}}
{{ref std end}}

===See Also===

[[c/language/operator_precedence | Operator precedence]]
{{c/language/operators}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_assignment | Assignment operators}}
{{dsc end}}

[[ar:c/language/operator_assignment]]
[[cs:c/language/operator_assignment]]
[[de:c/language/operator_assignment]]
[[es:c/language/operator_assignment]]
[[fr:c/language/operator_assignment]]
[[it:c/language/operator_assignment]]
[[ja:c/language/operator_assignment]]
[[ko:c/language/operator_assignment]]
[[pl:c/language/operator_assignment]]
[[pt:c/language/operator_assignment]]
[[ru:c/language/operator_assignment]]
[[tr:c/language/operator_assignment]]
[[zh:c/language/operator_assignment]]</text>
      <sha1>2ygkhl6p59blram7akrytirwypudy2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator comparison</title>
    <ns>0</ns>
    <id>9566</id>
    <revision>
      <id>79161</id>
      <parentid>76162</parentid>
      <timestamp>2015-06-26T10:38:56Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="9012">{{title|Comparison operators}}
{{c/language/expressions/navbar}}
Comparison operators are binary operators that test a condition and return '''1''' if that condition is logically '''true''' and '''0''' if that condition is '''false'''..

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|- style=&quot;text-align:center&quot;
! Operator
! Operator name
! Example
! Description
|- style=&quot;text-align:center&quot;
| {{c|1===}}
| equal to
| {{c|1=a == b}}
| '''a''' is equal to '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=!=}}
| not equal to
| {{c|1=a != b}}
| '''a''' is not equal to '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=&lt;}}
| less than
| {{c|1=a &lt; b}}
| '''a''' is less than '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=&gt;}}
| greater than
| {{c|1=a &gt; b}}
| '''a''' is greater than '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=&lt;=}}
| less than or equal to
| {{c|1=a &lt;= b}}
| '''a''' is less than or equal to '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1=&gt;=}}
| greater than or equal to
| {{c|1=a &gt;= b}}
| '''a''' is greater than or equal to '''b'''
|}

===Relational operators===
The relational operator expressions have the form 

{{sdsc begin}}
{{sdsc | num=1 | {{spar|lhs}} {{ttb|&lt;}} {{spar|rhs}} }}
{{sdsc | num=2 | {{spar|lhs}} {{ttb|&gt;}} {{spar|rhs}} }}
{{sdsc | num=3 | {{spar|lhs}} {{ttb|&lt;{{=}}}} {{spar|rhs}} }}
{{sdsc | num=4 | {{spar|lhs}} {{ttb|&gt;{{=}}}} {{spar|rhs}} }}
{{sdsc end}}
@1@ less-than expression
@2@ greater-than expression
@3@ less or equal expression
@4@ greater or equal expression
where 
{{par begin}}
{{par|{{spar|lhs}}, {{spar|rhs}} | expressions that both have real type or both have pointer to object type}}
{{par end}}

The type of any relational operator expression is {{c|int}}, and its value (which is not an lvalue) is {{c|1}} when the specified relationship holds true and {{c|0}} when the specified relationship does not hold.

If {{spar|lhs}} and {{spar|rhs}} are expressions of any {{rlp|types|real type}}, then
* if {{spar|lhs}} and {{spar|rhs}} have arithmetic type, {{rlp|conversion#Usual_arithmetic_conversions|usual arithmetic conversions}} are performed
* the values of the operands after conversion are compared in the usual mathematical sense (except that positive and negative zeroes compare equal and any comparison involving a NaN value returns zero)

Note that complex and imaginary numbers cannot be compared with these operators.

If {{spar|lhs}} and {{spar|rhs}} are expressions of pointer type, they must be both pointers to objects of {{rlp|types#Compatible_types|compatible types}}, except that qualifications of the pointed-to objects are ignored.
* a pointer to an object that is not an element of an array is treated as if it were pointing to an element of an array with one element
* if two pointers point to the same object, or both point one past the end of the same array, they compare equal
* if two pointers point to different elements of the same array, the one pointing at the element with the larger index compares greater.
* if one pointer points to the element of an array and the other pointer points one past the end of the same array, the one-past-the-end pointer compares greater
* if the two pointers point to members of the same {{rlp|struct}}, the pointer to the member declared later in the struct definition compares greater than then pointer to the member declared earlier.
* pointers to members of the same union compare equal
* all other pointer comparisons invoke undefined behavior

{{example|code=
#include &lt;assert.h&gt;
int main(void)
{
    assert(1 &lt; 2);
    assert(2+2 &lt;= 4.0); // int converts to double, two 4.0's compare equal

    struct { int x,y; } s;
    assert(&amp;s.x &lt; &amp;s.y); // struct members compare in order of declaration

    double d = 0.0/0.0; // NaN
    assert( !(d &lt; d) );
    assert( !(d &gt; d) );
    assert( !(d &gt;= d) );
    assert( !(d &gt;= d) );

    float f = 0.1; // f = 0.100000001490116119384765625
    double g = 0.1; // g = 0.1000000000000000055511151231257827021181583404541015625
    assert(f &gt; g); // different values
}
}}

===Equality operators===
The equality operator expressions have the form 

{{sdsc begin}}
{{sdsc | num=1 | {{spar|lhs}} {{ttb|{{==}}}} {{spar|rhs}} }}
{{sdsc | num=2 | {{spar|lhs}} {{ttb|!{{=}}}} {{spar|rhs}} }}
{{sdsc end}}
@1@ equal-to expression
@2@ not equal to expression
where 
{{par begin}}
{{par|{{spar|lhs}}, {{spar|rhs}} | expressions that 
* both have any {{rlp|arithmetic types}} (including complex and imaginary)
* both are pointers to objects or functions of {{rlp|types#Compatible_types|compatible}} types, ignoring qualifiers of the pointed-to types
* one is a pointer to object and the other is a pointer to (possibly qualified) {{c|void}}
* one is a pointer to object or function and the other is a null pointer constant such as {{lc|NULL}}
 }}
{{par end}}

The type of any equality operator expression is {{c|int}}, and its value (which is not an lvalue) is {{c|1}} when the specified relationship holds true and {{c|0}} when the specified relationship does not hold.

* if both operands have arithmetic types, {{rlp|conversion#Usual_arithmetic_conversions|usual arithmetic conversions}} are performed and the resulting values are compared in the usual mathematical sense (except that positive and negative zeroes compare equal and any comparison involving a NaN value, including equality with itself, returns zero). In particular, values of complex type are equal if their real parts compare equal and their imaginary parts compare equal.
* if one operand is a pointer and the other is a null pointer constant, the null pointer constant is first {{rlp|conversion|converted}} to the type of the pointer (which gives a null pointer value), and the two pointers are compared as described below
* if one operand is a pointer and the other is a pointer to void, the non-void pointer is {{rlp|conversion|converted}} to the pointer to void and the two pointers are compared as described below
* two pointers compare equal if any of the following is true:
:* they are both null pointer values of their type
:* they are both pointers to the same object
:* one pointer is to a struct/union/array object and the other is to its first member/any member/first element
:* they are both pointing one past the last element of the same array
:* one is one past the end of an array, and the other is at the start of a different array (of the same type) that follows the first in a larger array or in a struct with no padding

(as with relational operators, pointers to objects that aren't elements of any array behave as pointers to elements of arrays of size 1)

====Notes====
Objects of struct type do not compare equal automatically, and comparing them with {{lc|memcmp}} is not reliable because the padding bytes may have any values.

Because pointer comparison works with pointers to void, the macro {{lc|NULL}} may be defined as {{c|(void*)0}} in C, although that would be invalid in C++ where void pointers do not implicitly convert to typed pointers

Care must be taken when comparing floating-point values for equality, because the results of many operations cannot be represented exactly and must be rounded. In practice, floating-point numbers are usually compared allowing for the difference of one or more units of the last place.

{{example|code=
#include &lt;assert.h&gt;
int main(void)
{
    assert(2+2 == 4.0); // int converts to double, two 4.0's compare equal

    int n[2][3] = {1,2,3,4,5,6};
    int* p1 = &amp;n[0][2]; // last element in the first row
    int* p2 = &amp;n[1][0]; // start of second row
    assert(p1+1 == p2); // compare equal

    double d = 0.0/0.0; // NaN
    assert( d != d ); // NaN does not equal itself

    float f = 0.1; // f = 0.100000001490116119384765625
    double g = 0.1; // g = 0.1000000000000000055511151231257827021181583404541015625
    assert(f != g); // different values
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.8 | title=Relational operators | p=95-96}}
{{ref std | section=6.5.9 | title=Equality operators | p=96-97}}
{{ref std c99}}
{{ref std | section=6.5.8 | title=Relational operators | p=85-86}}
{{ref std | section=6.5.9 | title=Equality operators | p=86-87}}
{{ref std c89}}
{{ref std | section=3.3.8 | title=Relational operators}}
{{ref std | section=3.3.9 | title=Equality operators}}
{{ref std end}}

===See Also===

[[c/language/operator_precedence | Operator precedence]]
{{c/language/operators}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_comparison | Comparison operators}}
{{dsc end}}

[[ar:c/language/operator_comparison]]
[[cs:c/language/operator_comparison]]
[[de:c/language/operator_comparison]]
[[es:c/language/operator_comparison]]
[[fr:c/language/operator_comparison]]
[[it:c/language/operator_comparison]]
[[ja:c/language/operator_comparison]]
[[ko:c/language/operator_comparison]]
[[pl:c/language/operator_comparison]]
[[pt:c/language/operator_comparison]]
[[ru:c/language/operator_comparison]]
[[tr:c/language/operator_comparison]]
[[zh:c/language/operator_comparison]]</text>
      <sha1>36gi2r8535jkrpuv8zbwd2dk1ejx4kf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator incdec</title>
    <ns>0</ns>
    <id>9563</id>
    <revision>
      <id>79164</id>
      <parentid>76167</parentid>
      <timestamp>2015-06-26T10:54:17Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="4969">{{title|Increment/decrement operators}}
{{c/language/expressions/navbar}}
Increment/decrement operators are unary operators that increment/decrement the value of a variable by 1. 

They can have postfix form:

{{sdsc begin}}
{{sdsc | {{spar|expr}} {{ttb|++}}}}
{{sdsc | {{spar|expr}} {{ttb|--}}}}
{{sdsc end}}

As well as the prefix form:

{{sdsc begin}}
{{sdsc | {{ttb|++}} {{spar|expr}}}}
{{sdsc | {{ttb|--}} {{spar|expr}}}}
{{sdsc  end}}

The operand {{spar|expr}} of both prefix and postfix increment or decrement must be a {{rlp|value category|modifiable lvalue}} of {{rlp|type|integer type}} (including {{tt|_Bool}} and enums), real floating type, or a pointer type. It may be cvr-qualified, unqualified, or {{rlp|atomic}}.

The result of the postfix increment and decrement operators is the value of {{spar|expr}}. 

The result of the prefix increment operator is the result of adding the value {{tt|1}} to the value of {{spar|expr}}: the expression {{c|++e}} is equivalent to {{c|e+{{=}}1}}. The result of the prefix decrement operator is the result of subtracting the value {{tt|1}} from the value of {{spar|expr}}: the expression {{c|--e}} is equivalent to {{c|e-{{=}}1}}.

Increment operators initiate the side-effect of adding the value {{tt|1}} of appropriate type to the operand. Decrement operators initiate the side-effect of subtracting the value {{tt|1}} of appropriate type from the operand. As with any other side-effects, these operations complete at or before the next {{rlp|eval order|sequence point}}.
{{c|1=
int a = 1;
int b = a++; // stores 1+a (which is 2) to a
             // returns the value of a (which is 1)
             // After this line, b == 1 and a == 2
a = 1;
int c = ++a; // stores 1+a (which is 2) to a
             // returns 1+a (which is 2)
             // after this line, c == 2 and a == 2
}}

{{rev begin}}
{{rev|since=c11|
Post-increment or post-decrement on any {{rlp|atomic|atomic variable}} is an atomic read-modify-write operation with memory order {{lc|memory_order_seq_cst}}.
}}
{{rev end}}

See {{rlp|operator_arithmetic|arithmetic operators}} for limitations on pointer arithmetic, as well as for implicit conversions applied to the operands.

===Notes===
Because of the side-effects involved, increment and decrement operators must be used with care to avoid undefined behavior due to violations of {{rlp|eval order|sequencing rules}}.

Increment/decrement operators are not defined for complex or imaginary types: the usual definition of adding/subtracting the real number 1 would have no effect on imaginary types, and making it add/subtract {{tt|i}} for imaginaries but {{tt|1}} for complex numbers would have made it handle {{tt|0+yi}} different from {{tt|yi}}.

Unlike C++ (and some implementations of C), the increment/decrement expressions are never themselves lvalues: {{c|&amp;++a}} is invalid.

===Example===
{{example
 |
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

int main(void) {

  int a = 1;
  int b = 1;

  printf(&quot;\n&quot;);
  printf(&quot;original values: a == %d, b == %d\n&quot;, a, b);
  printf(&quot;result of postfix operators: a++ == %d, b-- == %d\n&quot;, a++, b--);
  printf(&quot;after postfix operators applied: a == %d, b == %d\n&quot;, a, b);

  // Reset a and b.
  a = 1;
  b = 1;

  printf(&quot;\n&quot;);
  printf(&quot;original values: a == %d, b == %d\n&quot;, a, b);
  printf(&quot;result of prefix operators: ++a == %d, --b == %d\n&quot;, ++a, --b);
  printf(&quot;after prefix operators applied: a == %d, b == %d\n&quot;, a, b);
}
 | output=
original values: a == 1, b == 1
result of postfix operators: a++ == 1, b-- == 1
after postfix operators applied: a == 2, b == 0

original values: a == 1, b == 1
result of prefix operators: ++a == 2, --b == 0
after prefix operators applied: a == 2, b == 0
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.2.4 | title=Postfix increment and decrement operators | p=85}}
{{ref std | section=6.5.3.1 | title=Prefix increment and decrement operators| p=88}}
{{ref std c99}}
{{ref std | section=6.5.2.4 | title=Postfix increment and decrement operators | p=75}}
{{ref std | section=6.5.3.1 | title=Prefix increment and decrement operators| p=78}}
{{ref std c89}}
{{ref std | section=3.3.2.4 | title=Postfix increment and decrement operators}}
{{ref std | section=3.3.3.1 | title=Prefix increment and decrement operators}}
{{ref std end}}

===See Also===

[[c/language/operator precedence | Operator precedence]]
{{c/language/operators}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_incdec | Increment/decrement operators}}
{{dsc end}}

[[ar:c/language/operator_incdec]]
[[cs:c/language/operator_incdec]]
[[de:c/language/operator_incdec]]
[[es:c/language/operator_incdec]]
[[fr:c/language/operator_incdec]]
[[it:c/language/operator_incdec]]
[[ja:c/language/operator_incdec]]
[[ko:c/language/operator_incdec]]
[[pl:c/language/operator_incdec]]
[[pt:c/language/operator_incdec]]
[[ru:c/language/operator_incdec]]
[[tr:c/language/operator_incdec]]
[[zh:c/language/operator_incdec]]</text>
      <sha1>1btmwmb0e1h38xgricvmmdhxgpwvtcb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator logical</title>
    <ns>0</ns>
    <id>9565</id>
    <revision>
      <id>85834</id>
      <parentid>82075</parentid>
      <timestamp>2016-05-23T07:51:56Z</timestamp>
      <contributor>
        <username>Rufflewind</username>
        <id>3029</id>
      </contributor>
      <comment>fix typo: s/cirquit/circuit/</comment>
      <text xml:space="preserve" bytes="5651">{{title|Logical operators}}
{{c/language/expressions/navbar}}
Logical operators apply standard boolean algebra operations to their operands.

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|- style=&quot;text-align:center&quot;
! Operator
! Operator name
! Example
! Result
|- style=&quot;text-align:center&quot;
| {{c|1=!}}
| logical NOT
| {{c|1=!a}}
| the logical negation of '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=&amp;&amp;}}
| logical AND
| {{c|1=a &amp;&amp; b}}
| the logical AND of '''a''' and '''b'''
|- style=&quot;text-align:center&quot;
| {{c|1={{!!}}}}
| logical OR
| {{c|1=a {{!!}} b}}
| the logical OR of '''a''' and '''b'''
|}

===Logical NOT===
The logical NOT expression has the form 

{{sdsc begin}}
{{sdsc | {{ttb|!}} {{spar|expression}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|expression}} | an expression of any {{rlp|type#Type_groups|scalar type}}}}
{{par end}}

The logical NOT operator has type {{c|int}}. Its value is {{c|0}} if {{spar|expression}} evaluates to a value that compares unequal to zero. Its value is {{c|1}} if {{spar|expression}} evaluates to a value that compares equal to zero. (so {{c|!E}} is the same as {{c|(0{{==}}E)}})

{{example|code=
#include &lt;stdbool.h&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
int main(void)
{
    bool b = !(2+2 == 4); // not true
    printf(&quot;!(2+2==4) = %s\n&quot;, b ? &quot;true&quot; : &quot;false&quot;);

    int n = isspace('a'); // zero if 'a' is a space, nonzero otherwise
    int x = !!n; // &quot;bang-bang&quot;, common C idiom for mapping integers to [0,1]
                 // (all non-zero values become 1)
    char *a[2] = {&quot;nonspace&quot;, &quot;space&quot;};
    printf(&quot;%s\n&quot;, a[x]); // now x can be safely used as an index to array of 2 ints
}
|output=
!(2+2==4) = false
nonspace
}}

===Logical AND===
The logical AND expression has the form 

{{sdsc begin}}
{{sdsc | {{spar|lhs}} {{ttb|&amp;&amp;}} {{spar|rhs}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|lhs}} | an expression of any scalar type }}
{{par|{{spar|rhs}} | an expression of any scalar type, which is only evaluated if {{spar|lhs}} does not compare equal to {{c|0}} }}
{{par end}}

The logical-AND operator has type {{c|int}} and the value {{c|1}} if both {{spar|lhs}} and {{spar|rhs}} compare unequal to zero. It has the value {{c|0}} otherwise (if either {{spar|lhs}} or {{spar|rhs}} or both compare equal to zero).

There is a {{rlp|eval order|sequence point}} after the evaluation of {{spar|lhs}}. If the result of {{spar|lhs}} compares equal to zero, then {{spar|rhs}} is not evaluated at all (so-called ''short-circuit evaluation'')

{{example|code=
#include &lt;stdbool.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{
    bool b = 2+2==4 &amp;&amp; 2*2==4; // b == true

    1 &gt; 2 &amp;&amp; puts(&quot;this won't print&quot;);

    char *p = &quot;abc&quot;;
    if(p &amp;&amp; *p) // common C idiom: if p is not null
                // AND if p does not point at the end of the string
    {           // (note that thanks to short-circuit evaluation, this
                //  will not attempt to dereference a null pointer)
    // ...      // ... then do some string processing
    }
}
}}

===Logical OR===
The logical OR expression has the form 

{{sdsc begin}}
{{sdsc | {{spar|lhs}} {{ttb|&lt;nowiki&gt;||&lt;/nowiki&gt;}} {{spar|rhs}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|lhs}} | an expression of any scalar type }}
{{par|{{spar|rhs}} | an expression of any scalar type, which is only evaluated if {{spar|lhs}} compares equal to {{c|0}} }}
{{par end}}

The logical-OR operator has type {{c|int}} and the value {{c|1}} if either {{spar|lhs}} or {{spar|rhs}} compare unequal to zero. It has value {{c|0}} otherwise (if both {{spar|lhs}} and {{spar|rhs}} compare equal to zero).

There is a {{rlp|eval order|sequence point}} after the evaluation of {{spar|lhs}}. If the result of {{spar|lhs}} compares unequal to zero, then {{spar|rhs}} is not evaluated at all (so-called ''short-circuit evaluation'')

{{example|code=
#include &lt;stdbool.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;errno.h&gt;
int main(void)
{
    bool b = 2+2 == 4 {{!!}} 2+2 == 5; // true
    printf(&quot;true or false = %s\n&quot;, b ? &quot;true&quot; : &quot;false&quot;);

    // logical OR can be used simialar to perl's &quot;or die&quot;, as long as rhs has scalar type
    fopen(&quot;test.txt&quot;, &quot;r&quot;) {{!!}} printf(&quot;could not open test.txt: %s\n&quot;, strerror(errno));
}
|p=true
|output=
true or false = true
could not open test.txt: No such file or directory
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.3.3 | title=Unary arithmetic operators | p=89}}
{{ref std | section=6.5.13  | title=Logical AND operator | p=99}}
{{ref std | section=6.5.14  | title=Logical OR operator | p=99}}
{{ref std c99}}
{{ref std | section=6.5.3.3 | title=Unary arithmetic operators | p=79}}
{{ref std | section=6.5.13  | title=Logical AND operator | p=89}}
{{ref std | section=6.5.14  | title=Logical OR operator | p=89}}
{{ref std c89}}
{{ref std | section=3.3.3.3 | title=Unary arithmetic operators}}
{{ref std | section=3.3.13  | title=Logical AND operator}}
{{ref std | section=3.3.14  | title=Logical OR operator}}
{{ref std end}}

===See Also===

[[c/language/operator_precedence | Operator precedence]]
{{c/language/operators}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_logical | Logical operators}}
{{dsc end}}

[[ar:c/language/operator_logical]]
[[cs:c/language/operator_logical]]
[[de:c/language/operator_logical]]
[[es:c/language/operator_logical]]
[[fr:c/language/operator_logical]]
[[it:c/language/operator_logical]]
[[ja:c/language/operator_logical]]
[[ko:c/language/operator_logical]]
[[pl:c/language/operator_logical]]
[[pt:c/language/operator_logical]]
[[ru:c/language/operator_logical]]
[[tr:c/language/operator_logical]]
[[zh:c/language/operator_logical]]</text>
      <sha1>0gst7i257ku0m0s6i54daez6yqdqekk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator member access</title>
    <ns>0</ns>
    <id>9567</id>
    <revision>
      <id>83605</id>
      <parentid>79159</parentid>
      <timestamp>2016-03-02T21:51:38Z</timestamp>
      <contributor>
        <ip>78.181.204.70</ip>
      </contributor>
      <text xml:space="preserve" bytes="9844">{{title|Member access operators}}
{{c/language/expressions/navbar}}
Member access operators allow access to the members of their operands.

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|- style=&quot;text-align:center&quot;
! Operator
! Operator name
! Example
! Description
|- style=&quot;text-align:center&quot;
| {{c|1=[]}}
| array subscript
| {{c|1=a[b]}}
| access the '''b'''th element of array '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=*}}
| pointer dereference
| {{c|1=*a}}
| dereference the pointer '''a''' to access the object or function it refers to
|- style=&quot;text-align:center&quot;
| {{c|1=&amp;}}
| address of
| {{c|1=&amp;a}}
| create a pointer that refers to the object or function '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=.}}
| member access
| {{c|1=a.b}}
| access member '''b''' of {{rlp|struct}} or {{rlp|union}} '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=-&gt;}}
| member access through pointer
| {{c|1=a-&gt;b}}
| access member '''b''' of {{rlp|struct}} or {{rlp|union}} pointed to by '''a'''
|}

===Subscript===
The array subscrpt expression has the form 

{{sdsc begin}}
{{sdsc | num=1 | {{spar|pointer-expression}} {{ttb|[}} {{spar|integer-expression}} {{ttb|]}} }}
{{sdsc | num=2 | {{spar|integer-expression}} {{ttb|[}} {{spar|pointer-expression}} {{ttb|]}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|pointer-expression}} | an {{rlp|expressions|expression}} of type pointer to complete object }}
{{par|{{spar|integer-expression}} | an {{rlp|expressions|expression}} of integer type }}
{{par end}}

The subscript operator expression is is {{rlp|value category|lvalue expression}} whose type is the type of the object pointed to by {{spar|pointer-expression}}.

By definition, the subscript operator {{c|E1[E2]}} is exactly identical to {{c|*((E1)+(E2))}}.  If {{spar|pointer-expression}} is an array expression, it undergoes {{rlp|conversion|lvalue-to-rvalue conversion}} and becomes a pointer to the first element of the array.

Due to the definition of the {{rlp|operator arithmetic|addition between a pointer and an integer}}, the result is the element of the array with the index equal to the result of {{spar|integer-expression}} (or, if {{spar|pointer-expression}} was pointing at ith element of some array, the result is i plus the result of {{spar|integer-expression}})

Note: see {{rlp|array}} for the details on multidimensional arrays.

{{example|code=
#include &lt;stdio.h&gt;
int main(void)
{
    int a[3] = {1,2,3};
    printf(&quot;%d %d\n&quot;, a[2],  // n == 3
                      2[a]); // same, n == 3
    a[2] = 7; // subscripts are lvalues

    int n[2][3] = {1,2,3,4,5,6};
    int (*p)[3] = &amp;n[1]; // elements of n are arrays
    int x = n[1][2]; // applying [] again to the array n[1]

    printf(&quot;%c %c\n&quot;, &quot;abc&quot;[2], 2[&quot;abc&quot;]); // string literals are arrays too
}
|output=
3 3
c c
}}

===Dereference===
The ''dereference'' or ''indirection'' expression has the form 

{{sdsc begin}}
{{sdsc | {{ttb|*}} {{spar|pointer-expression}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|pointer-expression}} | an {{rlp|expressions|expression}} of any pointer type}}
{{par end}}

If {{spar|pointer-expression}} is a pointer to function, the result of the dereference operator is a function designator for that function.

If {{spar|pointer-expression}} is a pointer to object, the result is an {{rlp|value category|lvalue expression}} that designates the pointed-to object.

Dereferencing a null pointer, a pointer to an object outside of its lifetime (a dangling pointer), a misaligned pointer, or a pointer with indeterminate value is undefined behavior, except when the dereference operator is nullified by applying the address-of operator to its result, as in {{c|&amp;*E}}

{{example|code=
#include &lt;stdio.h&gt;
int main(void)
{
    int n = 1;
    int* p = &amp;n;
    printf(&quot;*p = %d\n&quot;, *p); // the value of *p is what's stored in n
    *p = 7; // *p is lvalue
    printf(&quot;*p = %d\n&quot;, *p);
}
|output=
*p = 1
*p = 7
}}

===Address of===
The address-of expression has the form 

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|&amp;}} {{spar|function}} }}
{{sdsc | num=2 | {{ttb|&amp;}} {{spar|lvalue-expression}} }}
{{sdsc | num=3 | {{ttb|&amp;}} {{ttb|*}} {{spar|expression}} }}
{{sdsc | num=4 | {{ttb|&amp;}} {{spar|expression}} {{ttb|[}} {{spar|expression}} {{ttb|]}} }}
{{sdsc end}}
@1@ address of a function
@2@ address of an object
@3@ special case: &amp; and * cancel each other, neither one is evaluated
@4@ special case: &amp; and the * that is implied in [] cancel each other, only the addition implied in [] is evaluated
where 
{{par begin}}
{{par|{{spar|lvalue-expression}} | an {{rlp|value category|lvalue}} expression of any type that is not a {{rlp|bit field}} and does not have {{rlp|storage duration|register}} storage class}}
{{par end}}

The address-of operator produces the {{rlp|value category|non-lvalue}} address of its operand, suitable for initializing a pointer to the type of the operand. If the operand is a function designator ({{v|1}}), the result is a pointer to function. If the operand is an object ({{v|2}}), the result is a pointer to object.

If the operand is the dereference operator, no action is taken (so it's okay to apply &amp;* to a null pointer), except that the result is not an lvalue.

If the operand is an array index expression, no action is taken other than the array-to-pointer conversion and the addition, so &amp;a[N] is valid for an array of size N (obtaining a pointer one past the end is okay, dereferencing it is not, but dereference cancels out in this expression).

{{example|code=
int f(char c) { return c;}
int main(void)
{
   int n = 1;
   int *p = &amp;n; // address of object n
   int (*fp)(char) = &amp;f; // address of function f
   int a[3] = {1,2,3};
   int *beg=a, *end=&amp;a[3]; // same as end = n+3
}
}}

===Member access===
The member access expression has the form 

{{sdsc begin}}
{{sdsc | {{spar|expression}} {{ttb|.}} {{spar|member-name}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|expression}} | an expression of {{rlp|struct}} or {{rlp|union}} type}}
{{par|{{spar|member-name}} | an {{rlp|identifier}} that names a member of the struct or union designated by {{spar|expression}} }}
{{par end}}

The member access expression designates the named member of the {{rlp|struct}} or {{rlp|union}} designated by its left operand. It has the same {{rlp|value category}} as its left operand. 

If the left operand is {{rlp|const}} or {{rlp|volatile}} qualified, the result is also qualified. If the left operand is {{rlp|atomic}}, the behavior is undefined.

Note: besides identifiers that name objects of struct or union type, the following expressions may have struct or union types: {{rlp|operator assignment|assignment}}, {{rlp|operator other#Function_call|function call}}, {{rlp|operator other|comma operator}}, {{rlp|operator other|conditional operator}}, and {{rlp|compound literal}}.

{{example|code=
#include &lt;stdio.h&gt;
struct s {int x;};
struct s f(void) { return (struct s){1}; }
int main(void)
{
    struct s s;
    s.x = 1; // ok, changes the member of s
    int n = f().x; // f() is an expression of type struct s
//  f().x = 1; // Error: this member access expression is not an lvalue

    const struct s sc;
//  sc.x = 3;  // Error: sc.x is const, can't be assigned

    union { int x; double d; } u = {1};
    u.d = 0.1; // changes the active member of the union
}
}}

===Member access through pointer===
The member access expression has the form 

{{sdsc begin}}
{{sdsc | {{spar|expression}} {{ttb|-&gt;}} {{spar|member-name}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|expression}} | an expression of type {{rlp|pointer}} to {{rlp|struct}} or {{rlp|union}}}}
{{par|{{spar|member-name}} | an {{rlp|identifier}} that names a member of the struct or union pointed by {{spar|expression}} }}
{{par end}}

The member access through pointer expression designates the named member of the {{rlp|struct}} or {{rlp|union}} type pointed to by its left operand. Its value category is always {{rlp|value category|lvalue}}

If the type pointed to by the left operand is {{rlp|const}} or {{rlp|volatile}} qualified, the result is also qualified. If the type pointed to by the left operand is {{rlp|atomic}}, the behavior is undefined.

{{example|code=
#include &lt;stdio.h&gt;
struct s {int x;};
int main(void)
{
    struct s s={1}, *p = &amp;s;
    p-&gt;x = 7; // changes the value of s.x through the pointer
    printf(&quot;%d\n&quot;, p-&gt;x); // prints 7
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.2.1 | title=Array subscripting | p=80}}
{{ref std | section=6.5.2.3 | title=Structure and union members | p=82-84}}
{{ref std | section=6.5.3.2 | title=Address and indirection operators | p=88-89}}
{{ref std c99}}
{{ref std | section=6.5.2.1 | title=Array subscripting | p=70}}
{{ref std | section=6.5.2.3 | title=Structure and union members | p=72-74}}
{{ref std | section=6.5.3.2 | title=Address and indirection operators | p=78-79}}
{{ref std c89}}
{{ref std | section=3.3.2.1 | title=Array subscripting}}
{{ref std | section=3.3.2.3 | title=Structure and union members}}
{{ref std | section=3.3.3.2 | title=Address and indirection operators}}
{{ref std end}}

===See Also===
* [[c/language/operator_precedence | Operator precedence]]
{{c/language/operators}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_member_access | Member access operators}}
{{dsc end}}

[[ar:c/language/operator_member_access]]
[[cs:c/language/operator_member_access]]
[[de:c/language/operator_member_access]]
[[es:c/language/operator_member_access]]
[[fr:c/language/operator_member_access]]
[[it:c/language/operator_member_access]]
[[ja:c/language/operator_member_access]]
[[ko:c/language/operator_member_access]]
[[pl:c/language/operator_member_access]]
[[pt:c/language/operator_member_access]]
[[ru:c/language/operator_member_access]]
[[tr:c/language/operator_member_access]]
[[zh:c/language/operator_member_access]]</text>
      <sha1>8fiajxvttc7v1npx6tmoeu7m96m7v93</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator other</title>
    <ns>0</ns>
    <id>9568</id>
    <revision>
      <id>79165</id>
      <parentid>78082</parentid>
      <timestamp>2015-06-26T11:00:10Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="14580">{{title|Other operators}}
{{c/language/expressions/navbar}}
A collection of operators that do not fit into any of the other major categories.

{{todo|consider a more general-purpose ToC for this and other tables that cover multiple topics}}
{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|- style=&quot;text-align:center&quot;
! Operator
! Operator name
! Example
! Description
|- style=&quot;text-align:center&quot;
| {{c|1=(...)}}
| [[#Function_call|function call]]
| {{c|1=f(...)}}
| call the function '''f'''(), with zero or more arguments
|- style=&quot;text-align:center&quot;
| {{c|1=,}}
| [[#Comma_operator|comma operator]]
| {{c|1=a, b}}
| evaluate expression '''a''', disregard its return value and complete any side-effects, then evaluate expression '''b''', returning the type and the result of this evaluation
|- style=&quot;text-align:center&quot;
| {{c|1=(type)}}
| {{rlp|cast|type cast}}
| {{c|1=(type)a}}
| cast the type of '''a''' to '''type'''
|- style=&quot;text-align:center&quot;
| {{c|1=? :}}
| [[#Conditional_operator|conditional operator]]
| {{c|1=a ? b : c}}
| if '''a''' is logically true (does not evaluate to zero) then evaluate expression '''b''', otherwise evaluate expression '''c'''
|- style=&quot;text-align:center&quot;
| {{c|1=sizeof}}
| {{rlp|sizeof|sizeof operator}}
| {{c|1=sizeof a}}
| the size in bytes of '''a'''
|- style=&quot;text-align:center&quot;
| {{c|1=_Alignof}} {{mark since c11}}
| {{rlp|_Alignof|_Alignof operator}}
| {{c|1=_Alignof(type)}}
| the alignment required of '''type'''
|}

===Function call===
The function call expression has the form 

{{sdsc begin}}
{{sdsc | {{spar|expression}} {{ttb|(}} {{spar|argument-list}}{{mark optional}} {{ttb|)}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|expression}}|any expression of pointer-to-function type (after {{rlp|conversion#Lvalue_conversions|lvalue conversions}}) }}
{{par|{{spar|argument-list}}| comma-separated list of expressions (which cannot be comma operators) of any complete object type. May be omitted when calling functions that take no arguments. }}
{{par end}}

The behavior of the function call expression depends on whether the prototype of the function being called is {{rlp|scope|in scope}} at the point of call. 

====Call to a function with a prototype====
@1@ The number of parameters must equal the number of arguments (unless the ellipsis parameter is used).
@2@ The type of each parameter must he a type such that {{rlp|conversion|implicit conversion as if by assignment}} exists that converts the unqualified type of the corresponding argument to the type of the parameter.

{{rev begin}}
{{rev|since=c99|
@@ Additionally, for every parameter of {{rlp|array|array type}} that uses the keyword {{tt|static}} between {{ttb|[}} and {{ttb|]}}, the argument expression must designate a pointer to the element of an array with at least that many elements as specified in the size expression of the parameter.
}}
{{rev end}}
@3@ The arguments are evaluated {{rlp|eval order|in unspecified order and without sequencing}}.
@4@ {{rev inl|until=c11|{{rlp|operator assignment|Assignment}}}}{{rev inl|since=c11|{{rlp|initialization|Initialization}}}} is performed to copy the value of each argument to the corresponding function parameter (note; the function can modify its parameters, and those changes do not affect the arguments; C function calls are only call-by-value).
:* if there is a {{rlp|variadic|trailing ellipsis}} parameter,  {{rlp|conversion#Default_argument_promotions|Default argument promotions}} are performed on the remaining arguments, which are made available to {{lc|va_list}}.
@5@ Function is executed, and the value it returns becomes the value of the function call expression (if the function returns void, the function call expression is a void expression)
{{source|1=
void f(char* p, int x) {}
int main(void)
{
    f(&quot;abc&quot;, 3.14); // array to pointer and float to int conversions
}
}}

====Call to a function without a prototype====
@1@ The arguments are evaluated {{rlp|eval order|in unspecified order and without sequencing}}.
@2@ {{rlp|conversion#Default_argument_promotions|Default argument promotions}} are performed on every argument expression.
@3@ {{rev inl|until=c11|{{rlp|operator assignment|Assignment}}}}{{rev inl|since=c11|{{rlp|initialization|Initialization}}}} is performed to copy the value of each argument to the corresponding function parameter.
@4@ Function is executed, and the value it returns becomes the value of the function call expression (if the function returns void, the function call expression is a void expression)
{{source|1=
void f(); // no prototype
int main(void)
{
    f(1, 1.0f); // UB unless f is defined to take an int and a double
}
void f(int a, double c) {}
}}

The behavior of a function call to a function without a prototype is undefined if
* the number of arguments does not match the number of parameters.
* the promoted types of the arguments are not {{rlp|type#Compatible_types|compatible}} with the promoted types of the parameters except that
:* signed and unsigned versions of the same integer type are considered compatible if the value of the argument is representable by both types.
:* pointers to void and pointers to (possibly cvr-qualified) character types are considered compatible

====Notes====
The evaluations of {{spar|expression}} that designates the function to be called and all arguments are {{rlp|eval order|unsequenced}} with respect to each other (but there is a sequence point before the body of the function begins executing)
{{source|1=
(*pf[f1()]) (f2(), f3() + f4()); // f1, f2, f3, f4 may be called in any order
}}

Although function call is only defined for pointers to functions, it works with function designators due to the {{rlp|conversion#Function_to_pointer_conversion|function-to-pointer implicit conversion}}.
{{source|1=
int f(void) { return 1; }
int (*pf)(void) = f;
int main(void)
{
    f();    // convert f to pointer, then call
    (&amp;f)(); // create a pointer to function, then call

    pf();    // call the function
    (*pf)(); // obtain the function designator, convert to pointer, then calls

    (****f)(); // convert to pointer, obtain the function, repeat 4x, then call
    (****pf)(); // also OK
}
}}

Functions that ignore unused arguments, such as {{lc|printf}}, must be called with a prototype in scope (the prototype of such functions necessarily uses the {{rlp|variadic|trailing ellipsis}} parameter) to avoid invoking undefined behavior.

A post-C11 defect report DR 427 changes the semantics of preparing function parameters when calling a function with a prototype from assignment to initialization from their corresponding arguments, in order to allow parameters of const-qualified type (which are ''de-facto'' allowed). The permitted implicit conversions remain implicit conversions as if by assignment since that's what {{rlp|initialization}} also uses.

{{rev begin}}
{{rev|until=c99|
A function call expression where {{spar|expression}} consists entirely of an identifier and that identifier is undeclared acts as though the identifier is declared as
{{source|1=
extern int identifier(); // returns int and has no prototype
}}
So the following complete program is valid C89:
{{source|1=
main() {
    int n = atoi(&quot;123&quot;); // implicitly declares atoi as int atoi()
}
}}
}}
{{rev end}}

===Comma operator===
The comma operator expression has the form

{{sdsc begin}}
{{sdsc | {{spar|lhs}} {{ttb|,}} {{spar|rhs}}}}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|lhs}}|any expression}}
{{par|{{spar|rhs}}|any expression other than another comma operator (in other words, comma operator's {{rlp|operator precedence|associativity}} is left-to-right)}}
{{par end}}

First, the left operand, {{spar|lhs}}, is evaluated and its result value is discarded.

Then, a {{rlp|eval order|sequence point}} takes place, so that all side effects of {{spar|lhs}} are complete.

Then, the right operand, {{spar|rhs}}, is evaluated and its result is returned by the comma operator as a {{rlp|value category|non-lvalue}}.

===Notes===
The type of the {{spar|lhs}} may be {{c|void}} (that is, it may be a call to a function that returns {{c|void}}, or it can be an expression {{rlp|cast}} to {{c|void}})

The comma operator may be lvalue in C++, but never in C

The comma operator may return a struct (the only other expressions that return structs are compound literals, function calls, assignments, and the conditional operator)

In the following contexts, the comma operator cannot appear at the top level of an expression because the comma has a different meaning:
* argument list in a function call
* initializer expression or {{rlp|initialization|initializer list}}
* {{rlp|generic|generic selection}}

If the comma operator has to be used in such context, it must be parenthesized:
{{source|1=
// int n = 2,3; // error, comma assumed to begin the next declarator
// int a[2] = {1,2,3}; // error: more declarators than elements
int n = (2,3), a[2] = {(1,2),3}; // OK

f(a, (t=3, t+2), c); // OK, first, stores 3 in t, then calls f with three arguments
}}

Top-level comma operator is also disallowed in array bounds
{{source|1=
// int a[2,3]; // error
int a[(2,3)]; // OK, VLA array of size 3 (VLA because (2,3) is not a constant expression)
}}

Comma operator is not allowed in {{rlp|constant expression}}s, regardless of whether it's on the top level or not
{{source|1=
// static int n = (1,2); // Error: constant expression cannot call the comma operator
}}

===Cast operator===
See {{rlp|cast|cast operator}}

===Conditional operator===
The conditional operator expression has the form

{{sdsc begin}}
{{sdsc | {{spar|condition}} {{ttb|?}} {{spar|expression-true}} {{ttb|:}} {{spar|expression-false}} }}
{{sdsc end}}
where 
{{par begin}}
{{par|{{spar|condition}}|an expression of scalar type}}
{{par|{{spar|expression-true}}| the expression that will be evaluated if condition compares unequal to zero }}
{{par|{{spar|expression-false}}| the expression that will be evaluated if condition compares equal to zero }}
{{par end}}

Only the following expressions are allowed as {{spar|expression-true}} and {{spar|expression-false}}
* two expressions of any {{rlp|arithmetic types|arithmetic type}}
* two expressions of the same {{rlp|struct}} or {{rlp|union}} type
* two expressions of void type
* two expressions of pointer type, pointing to types that are {{rlp|type#Compatible_types|compatible}}, ignoring cvr-qualifiers
* one expression is a pointer and the other is the null pointer constant (such as {{lc|NULL}})
* one expression is a pointer to object and the other is a pointer to void (possibly qualified)

@1@ First, evaluates {{spar|condition}}. There is a {{rlp|eval order|sequence point}} after this evaluation.
@2@ If the result of {{spar|condition}} compares unequal to zero, executes {{spar|expression-true}}, otherwise executes {{spar|exception-false}}
@3@ Performs a {{rlp|conversion}} from the result of the evaluation to the ''common type'', defined as follows:
:@1@ if the expressions have arithmetic type, the common type is the type after {{rlp|conversion#Usual_arithmetic_conversions|usual arithmetic conversions}}
:@2@ if the expressions have struct/union type, the common type is that struct/union type
:@3@ if the expressions are both void, the entire conditional operator expression is a void expression
:@4@ if one is a pointer and the other is a null pointer constant, the type is the type of that pointer
:@5@ if both are pointers, the result is the pointer to the type that combines cvr-qualifiers of both pointed-to types (that is, if one is {{c|const int*}} and the other is {{c|volatile int*}}, the result is {{c|const volatile int*}}), and if the types were different, the pointed-to type is the {{rlp|types#Composite_type|composite type}}.
:@6@ if one is a pointer to void, the result is a pointer to void with combined cvr-qualifiers

====Notes====
The conditional operator is never an {{rlp|value category|lvalue expression}}, although it may return objects of struct/union type. The only other expressions that may return stucts are {{rlp|operator assignment|assignment}}, [[#Comma_operator|comma]], [[#Function_call|function call]], and {{rlp|compound literal}}.

Note that in C++, it may be an lvalue expression.

See {{rlp|operator precedence}} for the details on the relative precedence of this operator and assignment.

Conditional operator has right-to-left associativity, which allows chaining
{{source|1=&lt;!-- borrowing from http://stackoverflow.com/questions/1917718/are-multiple-conditional-operators-in-this-situation-a-good-idea --&gt;
struct vehicle v = arg == 'B' ? bus      :
                   arg == 'A' ? airplane :
                   arg == 'T' ? train    :
                   arg == 'C' ? car      :
                   arg == 'H' ? horse    :
                                feet;
}}

===sizeof operator===
See {{rlp|sizeof|sizeof operator}}

===_Alignof operator===
See {{rlp|_Alignof|alignof operator}}

===References===
{{ref std c11}}
{{ref std | section=6.5.2.2 | title=Function calls | p=81-82}}
{{ref std | section=6.5.3.4 | title=The sizeof and _Alignof operators | p=90-91}}
{{ref std | section=6.5.4   | title=Cast operators | p=91}}
{{ref std | section=6.5.15  | title=Conditional operator | p=100}}
{{ref std | section=6.5.17  | title=Comma operator | p=105}}
{{ref std c99}}
{{ref std | section=6.5.2.2 | title=Function calls | p=71-72}}
{{ref std | section=6.5.3.4 | title=The sizeof operator | p=80-81}}
{{ref std | section=6.5.4   | title=Cast operators | p=81}}
{{ref std | section=6.5.15  | title=Conditional operator | p=90-91}}
{{ref std | section=6.5.17  | title=Comma operator | p=94}}
{{ref std c89}}
{{ref std | section=3.3.2.2 | title=Function calls}}
{{ref std | section=3.3.3.4 | title=The sizeof operator}}
{{ref std | section=3.3.4   | title=Cast operators}}
{{ref std | section=3.3.15  | title=Conditional operator}}
{{ref std | section=3.3.17  | title=Comma operator}}
{{ref std end}}

===See Also===

* [[c/language/operator_precedence | Operator precedence]]
{{c/language/operators}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_other | Other operators}}
{{dsc end}}

[[ar:c/language/operator_other]]
[[cs:c/language/operator_other]]
[[de:c/language/operator_other]]
[[es:c/language/operator_other]]
[[fr:c/language/operator_other]]
[[it:c/language/operator_other]]
[[ja:c/language/operator_other]]
[[ko:c/language/operator_other]]
[[pl:c/language/operator_other]]
[[pt:c/language/operator_other]]
[[ru:c/language/operator_other]]
[[tr:c/language/operator_other]]
[[zh:c/language/operator_other]]</text>
      <sha1>gti03zk6bebjux8w2tkoaomuoocaly0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/operator precedence</title>
    <ns>0</ns>
    <id>6317</id>
    <revision>
      <id>88597</id>
      <parentid>85823</parentid>
      <timestamp>2016-11-30T14:28:41Z</timestamp>
      <contributor>
        <ip>213.168.71.162</ip>
      </contributor>
      <comment>improved wording, as assignment may well appear (in parentheses, ... ? ... : (C=D); )</comment>
      <text xml:space="preserve" bytes="8446">{{title|C Operator Precedence}}
{{c/language/expressions/navbar}}

The following table lists the precedence and associativity of C operators. Operators are listed top to bottom, in descending precedence.

{| class=&quot;wikitable&quot;
|-
! style=&quot;text-align: left&quot; | Precedence
! style=&quot;text-align: left&quot; | Operator
! style=&quot;text-align: left&quot; | Description
! style=&quot;text-align: left&quot; | Associativity
|-
! rowspan=6| 1
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;++&lt;/code&gt; &lt;code&gt;--&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | Suffix/postfix increment and decrement
| style=&quot;vertical-align: top&quot; rowspan=&quot;6&quot; | Left-to-right
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;()&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Function call
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;[]&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Array subscripting
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;.&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Structure and union member access
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;-&amp;gt;&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Structure and union member access through pointer
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;(''type''){''list''}&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Compound literal{{mark c99}}
|-
! rowspan=8| 2
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;++&lt;/code&gt; &lt;code&gt;--&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | Prefix increment and decrement
| style=&quot;vertical-align: top&quot; rowspan=&quot;8&quot; | Right-to-left
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;+&lt;/code&gt; &lt;code&gt;-&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Unary plus and minus
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;!&lt;/code&gt; &lt;code&gt;~&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Logical NOT and bitwise NOT
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;(''type'')&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Type cast
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;*&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Indirection (dereference)
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;&amp;&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Address-of 
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;sizeof&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Size-of
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;_Alignof&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Alignment requirement{{mark c11}}
|-
! 3
| &lt;code&gt;*&lt;/code&gt; &lt;code&gt;/&lt;/code&gt; &lt;code&gt;%&lt;/code&gt;
| Multiplication, division, and remainder
| style=&quot;vertical-align: top&quot; rowspan=&quot;11&quot; | Left-to-right
|-
! 4
| &lt;code&gt;+&lt;/code&gt; &lt;code&gt;-&lt;/code&gt;
| Addition and subtraction
|-
! 5
| &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;
| Bitwise left shift and right shift
|-
! rowspan=2| 6
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;&amp;lt;&lt;/code&gt; &lt;code&gt;&amp;lt;=&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | For relational operators &lt; and ≤ respectively
|-
| style=&quot;border-top-style: none&quot; | &lt;code&gt;&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;gt;=&lt;/code&gt;
| style=&quot;border-top-style: none&quot; | For relational operators &gt; and ≥ respectively
|-
! 7
| &lt;code&gt;==&lt;/code&gt; &lt;code&gt;!=&lt;/code&gt;
| For relational = and ≠ respectively
|-
! 8
| &lt;code&gt;&amp;amp;&lt;/code&gt;
| Bitwise AND
|-
! 9
| &lt;code&gt;^&lt;/code&gt;
| Bitwise XOR (exclusive or)
|-
! 10
| &lt;code&gt;&lt;nowiki&gt;|&lt;/nowiki&gt;&lt;/code&gt;
| Bitwise OR (inclusive or)
|-
! 11
| &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;
| Logical AND
|-
! 12
| &lt;code&gt;&lt;nowiki&gt;||&lt;/nowiki&gt;&lt;/code&gt;
| Logical OR
|-
! 13&lt;ref group=&quot;note&quot;&gt;Fictional precedence level, see Notes below&lt;/ref&gt;
| &lt;code&gt;?:&lt;/code&gt;
| Ternary conditional&lt;ref group=&quot;note&quot;&gt;The expression in the middle of the conditional operator (between {{ttb|?}} and {{ttb|:}}) is parsed as if parenthesized: its precedence relative to {{tt|?:}} is ignored.&lt;/ref&gt;
| style=&quot;vertical-align: top&quot; rowspan=&quot;6&quot; | Right-to-Left
|-
! rowspan=5| 14
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;=&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | Simple assignment
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;+=&lt;/code&gt; &lt;code&gt;-=&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Assignment by sum and difference
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;*=&lt;/code&gt; &lt;code&gt;/=&lt;/code&gt; &lt;code&gt;%=&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Assignment by product, quotient, and remainder
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;&amp;lt;&amp;lt;=&lt;/code&gt; &lt;code&gt;&amp;gt;&amp;gt;=&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Assignment by bitwise left shift and right shift
|-
| style=&quot;border-top-style: none&quot; | &lt;code&gt;&amp;amp;=&lt;/code&gt; &lt;code&gt;^=&lt;/code&gt; &lt;code&gt;&lt;nowiki&gt;|&lt;/nowiki&gt;=&lt;/code&gt;
| style=&quot;border-top-style: none&quot; | Assignment by bitwise AND, XOR, and OR
|-
! 15
| &lt;code&gt;,&lt;/code&gt;
| Comma
| Left-to-right
|}
&lt;references group=&quot;note&quot; /&gt;

When parsing an expression, an operator which is listed on some row will be bound tighter (as if by parentheses) to its arguments than any operator that is listed on a row further below it. For example, the expression {{c|*p++}} is parsed as {{c|*(p++)}}, and not as {{c|(*p)++}}.

Operators that are in the same cell (there may be several rows of operators listed in a cell) are evaluated with the same precedence, in the given direction. For example, the expression {{c|1=a=b=c}} is parsed as {{c|1=a=(b=c)}}, and not as {{c|1=(a=b)=c}} because of right-to-left associativity.

===Notes===
Precedence and associativity are independent from [[c/language/eval_order|order of evaluation]].

The C language standard doesn't specify operator precedence. It specifies the language grammar, and the precedence table is derived from it to simplify understanding. There is a part of the grammar that cannot be represented by a precedence table: an assignment-expression is not allowed as the right hand operand of a conditional operator, so {{c|1=e = a &lt; d ? a++ : a = d}} is an expression that cannot be parsed, and therefore relative precedence of conditional and assignment operators cannot be described easily.

However, many C compilers use non-standard expression grammar where {{tt|?:}} is designated higher precedence than {{tt|{{=}}}}, which parses that expression as {{c|1=e = ( ((a &lt; d) ? (a++) : a) = d )}}, which then fails to compile due to semantic constraints:  {{tt|?:}} is never {{rlp|value category|lvalue}} and {{tt|{{=}}}} requires a modifiable lvalue on the left. This is the table presented on this page.

Note that this is different in C++, where the conditional operator has the same precedence as assignment.

Associativity specification is redundant for unary operators and is only shown for completeness: unary prefix operators always associate right-to-left ({{c|sizeof ++*p}} is {{c|sizeof(++(*p))}}) and unary postfix operators always associate left-to-right ({{c|a[1][2]++}} is {{c|((a[1])[2])++}}). Note that the associativity is meaningful for member access operators, even though they are grouped with unary postfix operators: {{c|a.b++}} is parsed {{c|(a.b)++}} and not {{c|a.(b++)}}.

===References===
{{ref std c11}}
{{ref std | section=A.2.1 | title=Expressions}}
{{ref std c99}}
{{ref std | section=A.2.1 | title=Expressions}}
{{ref std c89}}
{{ref std | section=A.1.2.1 | title=Expressions}}
{{ref std end}}

===See Also===
[[c/language/eval_order|Order of evaluation]] of operator arguments at run time.
{{c/language/operators}}
{{dsc begin}}
{{dsc see cpp | cpp/language/operator_precedence | C++ operator precedence}}
{{dsc end}}

[[ar:c/language/operator_precedence]]
[[cs:c/language/operator_precedence]]
[[de:c/language/operator_precedence]]
[[es:c/language/operator_precedence]]
[[fr:c/language/operator_precedence]]
[[it:c/language/operator_precedence]]
[[ja:c/language/operator_precedence]]
[[ko:c/language/operator_precedence]]
[[pl:c/language/operator_precedence]]
[[pt:c/language/operator_precedence]]
[[ru:c/language/operator_precedence]]
[[tr:c/language/operator_precedence]]
[[zh:c/language/operator_precedence]]</text>
      <sha1>c8q2rs679h073dqwd0a54yvztecfrny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/pointer</title>
    <ns>0</ns>
    <id>13950</id>
    <revision>
      <id>79111</id>
      <parentid>78043</parentid>
      <timestamp>2015-06-24T11:12:16Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="8938">{{title|Pointer declaration}}
{{c/language/declarations/navbar}}

Pointer is a type of an object that refers to a function or an object of another type, possibly adding qualifiers. Pointer may also refer to nothing, which is indicated by the special null pointer value.

===Syntax===
In the {{rlp|declarations|declaration grammar}} of a pointer declaration, the ''type-specifier'' sequence designates the pointed-to type (which may be function or object type and may be incomplete), and the ''declarator'' has the form:

{{sdsc begin}}
{{sdsc |num=1| {{ttb|*}} {{spar|qualifiers}}{{mark optional}} {{spar|declarator}} }}
{{sdsc end}}
where {{spar|declarator}} may be the identifier that names the pointer being declared, including another pointer declarator (which would indicate a pointer to a pointer):

{{source|1=
float *p, **pp; // p is a pointer to float
                // pp is a pointer to a pointer to float
int (*fp)(int); // fp is a pointer to function with type int(int)
}}

The {{spar|qualifiers}} that appear between {{ttb|*}} and the identifier (or other nested declarator) qualify the type of the pointer that is being declared:
{{source|1=
int n;
const int * pc = &amp;n; // pc is a non-const pointer to a const int
// *pc = 2; // Error: n cannot be changed through p without a cast
pc = NULL; // OK: pc itself can be changed

int * const cp = &amp;n; // cp is a const pointer to a non-const int
*cp = 2; // OK to change n through cp
// cp = NULL; // Error: cp itself cannot be changed

int * const * pcp = &amp;cp; // non-const pointer to const pointer to non-const int
}}

===Explanation===
Pointers are used for indirection, which is a ubiquitous programming technique; they can be used to implement pass-by-reference semantics, to access objects with dynamic {{rlp|storage duration}}, to implement &quot;optional&quot; types (using the null pointer value), aggregation relationship between structs, callbacks (using pointers to functions), generic interfaces (using pointers to void), and much more.
 
====Pointers to objects====
A pointer to object can be initialized with the result of the {{rlp|operator member access|address-of operator}} applied to an expression of object type (which may be incomplete):

{{source|1=
int n;
int *np = &amp;n; // pointer to int
int *const *npp = &amp;np; // non-const pointer to const pointer to non-const int

int a[2];
int (*ap)[2] = &amp;a; // pointer to array of int

struct S { int n; } s = {1}
int* sp = &amp;s.n; // pointer to the int that is a member of s
}}

Pointers may appear as operands to the {{rlp|operator member access#Dereference|indirection operator}} (unary {{ttb|*}}), which returns {{rlp|value category|the lvalue}} identifying the pointed-to object:

{{source|1=
int n;
int* p = &amp;n;     // pointer p is pointing to n
*p = 7;         // stores 7 in n
printf(&quot;%d\n&quot;, *p); // lvalue-to-rvalue conversion reads the value from n
}}

Pointers to objects of {{rlp|struct}} and {{rlp|union}} type may also appear as the left-hand operands of the {{rlp|operator member access|member access through pointer}} operator {{ttb|-&gt;}}.

Because of the {{rlp|array|array-to-pointer}} implicit conversion, pointer to the first element of an array can be initialized with an expression of array type:

{{source|1=
int a[2];
int *p = a; // pointer to a[0]

int b[3][3];
int (*row)[3] = b; // pointer to b[0]
}}

Certain {{rlp|operator_arithmetic|addition, subtraction}}, {{rlp|operator assignment|compound assignment}}, {{rlp|operator_incdec|increment, and decrement}} operators are defined for pointers to elements of arrays.

{{rlp|operator_comparison|Comparison operators}} are defined for pointers to objects in some situations: two pointers that represent the same address compare equal, two null pointer values compare equal, pointers to elements of the same array compare the same as the array indexes of those elements, and pointers to struct members compare in order of declaration of those members.

Many implementations also provide [[enwiki:Total order#Strict total order|strict total ordering]] of pointers of random origin, e.g. if they are implemented as addresses within continuous (&quot;flat&quot;) virtual address space. 

====Pointers to functions====
A pointer to function can be initialized with an address of a function. Because of the {{rlp|conversion|function-to-pointer}} conversion, the address-of operator is optional:

{{source|1=
void f(int);
void (*pf1)(int) = &amp;f;
void (*pf2)(int) = f; // same as &amp;f
}}

Unlike functions, pointers to functions are objects and thus can be stored in arrays, copied, assigned, passed to other functions as arguments, etc.

A pointer to function can be used on the left-hand side of the {{rlp|operator_other#Function_call|function call operator}}; this invokes the pointed-to function:

{{source|1=
#include &lt;stdio.h&gt;
int f(int n)
{
    printf(&quot;%d\n&quot;, n);
    return n*n;
}
int main(void)
{
    int (*p)(int) = f;
    int x = p(7);
}
}}

Dereferencing a function pointer yields the function designator for the pointed-to function:

{{source|1=
int f();
int (*p)() = f;    // pointer p is pointing to f
(*p)(); // function f invoked through the function designator
p();    // function f invoked directly through the pointer
}}

{{rlp|operator_comparison|Equality comparison operators}} are defined for pointers to functions (they compare equal if pointing to the same function).

====Pointers to void====
Pointer to object of any type can be {{rlp|conversion|implicitly converted}} to pointer to {{c|void}} (optionally {{rlp|const}} or {{rlp|volatile}}-qualified), and vice versa:

{{source|1=
int n=1, *p=&amp;n;
void* pv = p; // int* to void*
int* p2 = pv; // void* to int*
printf(&quot;%d\n&quot;, *p2); // prints 1
}}

Pointers to void are used to pass objects of unknown type, which is common in generic interfaces: {{lc|malloc}} returns {{c|void*}}, {{lc|qsort}} expects a user-provided callback that accepts two {{c|const void*}} arguments. [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_create.html pthread_create] expects a user-provided callback that accepts and returns {{c|void*}}. In all cases, it is the caller's responsibility to convert the pointer to the correct type before use.

===Null pointers===
Pointers of every type have a special value known as ''null pointer value'' of that type. A pointer whose value is null does not point to an object or a function (dereferencing a null pointer is undefined behavior), and compares equal to all pointers of the same type whose value is also ''null''.

To initialize a pointer to null or to assign the null value to an existing pointer, a null pointer constant ({{lc|NULL}}, or any other integer constant with the value zero) may be used. {{rlp|initialization|static initialization}} also initializes pointers to their null values.

Null pointers can indicate the absence of an object or can be used to indicate other types of error conditions. In general, a function that receives a pointer argument almost always needs to check if the value is null and handle that case differently (for example, {{lc|free}} does nothing when a null pointer is passed).

===Notes===
Although any pointer to object {{rlp|cast|can be cast}} to pointer to object of a different type, dereferencing a pointer to the type different from the declared type of the object is almost always undefined behavior. See {{rlp|object#Strict_aliasing|strict aliasing}} for details.

{{rev begin}}
{{rev|since=c99|
It is possible to indicate to a function that accesses objects through pointers that those pointers do not alias. See {{rlp|restrict}} for details.
}}
{{rev end}}

lvalue expressions of array type, when used in most contexts, undergo an {{rlp|conversion|implicit conversion}} to the pointer to the first element of the array. See {{rlp|array#Array_to_pointer_conversion|array}} for details.
{{source|1=
char *str = &quot;abc&quot;; // &quot;abc&quot; is a char[4] array, str is a pointer to 'a'
}}

Pointers to char are often [[c/string/byte|used to represent strings]]. To represent a valid byte string, a pointer must be pointing at a char that is an element of an array of char, and there must be a char with the value zero at some index greater or equal to the index of the element referenced by the pointer.

===References===
{{ref std c11}}
{{ref std | section=6.7.6.1 | title=Pointer declarators | p=130}}
{{ref std c99}}
{{ref std | section=6.7.5.1 | title=Pointer declarators | p=115-116}}
{{ref std c89}}
{{ref std | section=3.5.4.1 | title=Pointer declarators}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/pointer | Pointer declaration}}
{{dsc end}}

[[ar:c/language/pointer]]
[[cs:c/language/pointer]]
[[de:c/language/pointer]]
[[es:c/language/pointer]]
[[fr:c/language/pointer]]
[[it:c/language/pointer]]
[[ja:c/language/pointer]]
[[ko:c/language/pointer]]
[[pl:c/language/pointer]]
[[pt:c/language/pointer]]
[[ru:c/language/pointer]]
[[tr:c/language/pointer]]
[[zh:c/language/pointer]]</text>
      <sha1>575h1eczotprpkrmh4df8daw8wspfsy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/real and complex</title>
    <ns>0</ns>
    <id>13782</id>
    <revision>
      <id>73175</id>
      <parentid>73165</parentid>
      <timestamp>2014-10-16T15:57:27Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>replaced the unportable GCC-extension __real__ and __imag__; neither -pedantic nor -pedantic-errors exposed this extension</comment>
      <text xml:space="preserve" bytes="1325">{{title|Real and complex}}
{{c/language/navbar}}

When a value of real type is converted to a complex type, the real part of the complex
result value is determined by the rules of conversion to the corresponding real type (see {{rlp|real_floating_types | Real floating types}}) and the imaginary part of the complex result value is a positive zero or an unsigned zero.

When a value of complex type is converted to a real type, the imaginary part of the
complex value is discarded and the value of the real part is converted according to the
conversion rules for the corresponding real type (see {{rlp|real_floating_types | Real floating types}}).

===Example===
{{example
 | 
 | code= 
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    /* a real type to a complex type */
    double d = 1.0;
    double _Complex zd;
    zd = d;
    printf(&quot;%.1f%+.1fi\n&quot;, creal(zd), cimag(zd));

    /* a complex type to a real type */
    zd = 3.0 + 4.0*I;
    d = zd;
    printf(&quot;%.1f\n&quot;, d);

    return 0;
}
 | p=true
 | output=
1.0+0.0i
3.0
}}

[[de:c/language/real_and_complex]]
[[es:c/language/real_and_complex]]
[[fr:c/language/real_and_complex]]
[[it:c/language/real_and_complex]]
[[ja:c/language/real_and_complex]]
[[pt:c/language/real_and_complex]]
[[ru:c/language/real_and_complex]]
[[zh:c/language/real_and_complex]]</text>
      <sha1>qu0ud99agfu4cc4m082unmloh0a2gji</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/real floating types</title>
    <ns>0</ns>
    <id>13780</id>
    <revision>
      <id>73164</id>
      <parentid>73160</parentid>
      <timestamp>2014-10-16T13:49:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corrected example (this example and the complex example are analogs)</comment>
      <text xml:space="preserve" bytes="2151">{{title|Real floating types}}
{{c/language/navbar}}

When a value of real floating type is converted to a real floating type, if the value being converted can be represented exactly in the new type, it is unchanged. If the value being converted is in the range of values that can be represented but cannot be represented exactly, the result is either the nearest higher or nearest lower representable value, chosen
in an implementation-defined manner. If the value being converted is outside the range of
values that can be represented, the behavior is undefined. Results of some implicit conversions may be represented in greater range and precision than that required by the
new type (see {{rl|usual_arithmetic_conversions | Usual arithmetic conversions}} and {{rl|return_statement | Return statement}}).

===Example===
{{example
 | 
 | code= 
#include &lt;stdio.h&gt;
#include &lt;float.h&gt;

int main(void)
{
    /* The value being converted can be represented exactly in the new type. */
    /* The value is unchanged in the new type.                               */
    double d = 1.0;
    float f = d;
    printf(&quot;%f\n&quot;, f);

    /* The value being converted is in the range of values that can be represented */
    /* in the new type but cannot be represented exactly.                          */
    /* implementation defined                                                      */
    d = 1.23456789012345;
    printf(&quot;%.14f\n&quot;, d);
    f = d;
    printf(&quot;%.14f\n&quot;, f);

    /* The value being converted is outside the range of values that can be */
    /* represented in the type.                                             */
    /* undefined behavior                                                   */
    d = DBL_MAX;
    f = d;
    printf(&quot;%f\n&quot;, f);

    return 0;
}
 | p=true
 | output=
1.000000
1.23456789012345
1.23456788063049
inf
}}

[[de:c/language/real_floating_types]]
[[es:c/language/real_floating_types]]
[[fr:c/language/real_floating_types]]
[[it:c/language/real_floating_types]]
[[ja:c/language/real_floating_types]]
[[pt:c/language/real_floating_types]]
[[ru:c/language/real_floating_types]]
[[zh:c/language/real_floating_types]]</text>
      <sha1>0abk06by66yalyx3ks7w5qkw5o8sdm2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/restrict</title>
    <ns>0</ns>
    <id>13816</id>
    <revision>
      <id>88902</id>
      <parentid>79669</parentid>
      <timestamp>2016-12-18T17:44:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note that may_alias exists</comment>
      <text xml:space="preserve" bytes="9668">{{title|restrict type qualifier}}
{{c/language/declarations/navbar}}

Each individual type in the C {{rlp|type|type system}} has several ''qualified'' versions of that type, corresponding to one, two, or all three of the {{rlp|const}}, {{rlp|volatile}}, and, for pointers to object types, ''restrict'' qualifiers. This page describes the effects of the ''restrict'' qualifier.

Only pointers to {{rlp|type|object types}} may be restrict-qualified (in particular, {{c|int restrict *p}} and {{c|float (* restrict f9)(void)}} are errors).

restrict semantics apply to lvalue expressions only; for example, a cast to restrict-qualified pointer or a function call returning a restrict-qualified pointer are not lvalues and the qualifier has no effect.

During each execution of a block in which a restricted pointer {{tt|P}} is declared (typically each execution of a function body in which {{tt|P}} is a function parameter), if some object that is accessible through {{tt|P}} (directly or indirectly) is modified, by any means, then all accesses to that object (both reads and writes) in that block must occur through {{tt|P}} (directly or indirectly), otherwise the behavior is undefined:
{{source|1=
void f(int n, int * restrict p, int * restrict q)
{
    while(n-- &gt; 0)
        *p++ = *q++; // none of the objects modified through *p is the same
                     // as any of the objects read through *q
                     // compiler free to optimize, vectorize, page map, etc.
}
void g(void)
{
    extern int d[100];
    f(50, d + 50, d); // OK
    f(50, d + 1, d); // Undefined behavior: d[1] is accessed through both p and q in f
}
}}

If the object is never modified, it may be aliased and accessed through different restrict-qualified pointers (note that if the objects pointed to by aliased restrict-qualified pointers are, in turn, pointers, this aliasing can inhibit optimization).

Assignment from one restricted pointer to another is undefined behavior, except when assigning from a pointer to an object in some outer block to a pointer in some inner block (including using a restricted pointer argument when calling a function with a restricted pointer parameter) or when returning from a function (and otherwise when the block of the from-pointer ended):
{{source|1=
int* restrict p1 = &amp;a;
int* restrict p2 = &amp;b;
p1 = p2; // undefined behavior
}}

Restricted pointers can be assigned to unrestricted pointers freely, the optimization opportunities remain in place as long as the compiler is able to analyze the code:
{{source|1=
void f(int n, float * restrict r, float * restrict s) {
   float * p = r, * q = s; // OK
   while(n-- &gt; 0) *p++ = *q++; // almost certainly optimized just like *r++ = *s++
}
}}

If an array type is declared with the restrict type qualifier (through the use of {{rlp|typedef}}), the array type is not restrict-qualified, but its element type is:
{{source|1=
typedef int *array_t[10];
restrict array_t a; // the type of a is int *restrict[10] &lt;!--note: may be controversial: Accepted by Oracle Studio and GNU, rejected by Clang and Intel on the grounds that array_t is not a pointer type--&gt;
}}

In a function declaration, the keyword {{tt|restrict}} may appear inside the square brackets that are used to declare an array type of a function parameter. It qualifies the pointer type to which the array type is transformed:
{{source|1=
void f(int m, int n, float a[restrict m][n], float b[restrict m][n]);
void g12(int n, float (*p)[n]) {
   f(10, n, p, p+10); // OK
   f(20, n, p, p+10); // possibly undefined behavior (depending on what f does)
}
}}

===Notes===
The intended use of the restrict qualifier (like the register storage class) is to promote optimization, and deleting all instances of the qualifier from all preprocessing translation units composing a conforming program does not change its meaning (i.e., observable behavior).

The compiler is free to ignore any or all aliasing implications of uses of {{tt|restrict}}.

To avoid undefined behavior, the programmer must ensure that the aliasing assertions made by the restrict-qualified pointers are not violated.

Many compilers provide, as a language extension, the opposite of {{tt|restrict}}: an attribute indicating that pointers may alias even if their types differ: [https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html#index-g_t_0040code_007bmay_005falias_007d-type-attribute-3667 may_alias (gcc)], 

There are several common usage patterns for restrict-qualified pointers:

====File scope====
A file-scope restrict-qualified pointer has to point into a single array object for the duration of the program. That array object may not be referenced both through the restricted pointer and through either its declared name (if it has one) or another restricted pointer.

File scope restricted pointers are useful in providing access to dynamically allocated global arrays; the restrict semantics make it possible to optimize references through this pointer as effectively as references to a static array through its declared name:
{{source|1=
float * restrict a, * restrict b;
float c[100];

int init(int n) {
   float * t = malloc(2*n*sizeof(float));
   a = t;      // a refers to 1st half
   b = t + n;  // b refers to 2nd half
}
// compiler can deduce from the restrict qualifiers that
// there is no potential aliasing among the names a, b, and c
}}

====Function parameter====
The most popular use case for restrict-qualified pointers is the use as function parameters.

In the following example, the compiler may infer that there is no aliasing of modified objects, and so optimize the loop aggressively.
Upon entry to f, the restricted pointer a must provide exclusive access to its associated array.  In particular, within f neither b nor c may point into the array associated with a, because neither is assigned a pointer value based on a. For b, this is evident from the const-qualifier in its declaration, but for c, an inspection of the body of f is required:
{{source|1=
float x[100];
float *c;
void f(int n, float * restrict a, float * const b) {
    int i;
    for ( i=0; i&lt;n; i++ )
       a[i] = b[i] + c[i];
}
void g3(void) {
    float d[100], e[100];
    c = x; f(100,   d,    e); // OK
           f( 50,   d, d+50); // OK
           f( 99, d+1,    d); // undefined behavior
    c = d; f( 99, d+1,    e); // undefined behavior
           f( 99,   e,  d+1); // OK
}
}}
Note that it is permitted for c to point into the array associated with b. Note also that, for these purposes, the &quot;array&quot; associated with a particular pointer means only that portion of an array object which is actually referenced through that pointer.

====Block scope====
A block scope restrict-qualified pointer makes an aliasing assertion that is limited to its block. It allows local assertions that apply only to important blocks, such as tight loops. It also makes it possible to convert a function that takes restrict-qualified pointers into a macro:
{{source|1=
float x[100];
float *c;
#define f3(N, A, B)                                    \
{   int n = (N);                                       \
    float * restrict a = (A);                          \
    float * const    b = (B);                          \
    int i;                                             \
    for ( i=0; i&lt;n; i++ )                              \
        a[i] = b[i] + c[i];                            \
}
}}

====Struct members====
The scope of the aliasing assertion made by a restrict-qualified pointer that is a member of a struct is the scope of the identifier used to access the struct.

Even if the struct is declared at file scope, when the identifier used to access the struct has block scope, the aliasing assertions in the struct also have block scope; the aliasing assertions are only in effect within a block execution or a function call, depending on how the object of this struct type was created:
{{source|1=
struct t {    // Restricted pointers assert that   
   int n;     // members point to disjoint storage.
   float * restrict p;
   float * restrict q;
};

void ff(struct t r, struct t s) {
   struct t u;
   // r,s,u have block scope
   // r.p, r.q, s.p, s.q, u.p, u.q should all point to
   // disjoint storage during each execution of f.
   // ...
}
}}

===Keywords===

{{ltt|c/keyword/restrict}}

===Example===
{{example
 | code generation example; compile with -S (gcc, clang, etc) or /FA (visual studio)
 | code=
int foo(int *a, int *b)
{
    *a = 5;
    *b = 6;
    return *a + *b;
}

int rfoo(int *restrict a, int *restrict b)
{
    *a = 5;
    *b = 6;
    return *a + *b;
}
|p=true
|output=
# generated code on 64bit Intel platform:
foo:
    movl    $5, (%rdi)    # store 5 in *a
    movl    $6, (%rsi)    # store 6 in *b
    movl    (%rdi), %eax  # read back from *a in case previous store modified it
    addl    $6, %eax      # add 6 to the value read from *a
    ret

rfoo:
    movl      $11, %eax   # the result is 11, a compile-time constant
    movl      $5, (%rdi)  # store 5 in *a
    movl      $6, (%rsi)  # store 6 in *b
    ret                
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.3.1 | title=Formal definition of restrict | p=123-125}}
{{ref std c99}}
{{ref std | section=6.7.3.1 | title=Formal definition of restrict | p=110-112}}
{{ref std end}}

[[ar:c/language/restrict]]
[[cs:c/language/restrict]]
[[de:c/language/restrict]]
[[es:c/language/restrict]]
[[fr:c/language/restrict]]
[[it:c/language/restrict]]
[[ja:c/language/restrict]]
[[ko:c/language/restrict]]
[[pl:c/language/restrict]]
[[pt:c/language/restrict]]
[[ru:c/language/restrict]]
[[tr:c/language/restrict]]
[[zh:c/language/restrict]]</text>
      <sha1>c92widdhvb1v8glcskky1p1crjdocft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/return</title>
    <ns>0</ns>
    <id>6046</id>
    <revision>
      <id>79092</id>
      <parentid>76146</parentid>
      <timestamp>2015-06-23T11:13:34Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3122">{{title|return statement}}
{{c/language/statements/navbar}}
Terminates current function and returns specified value to the caller function.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|return}} {{spar|expression}} {{ttb|;}} }}
{{sdsc | num=2 | {{ttb|return}} {{ttb|;}} }}
{{sdsc end}}

===Explanation===

@1@ Evaluates the {{spar|expression}}, terminates the current function and returns the result of the {{spar|expression}} to the caller (the value returned becomes the value of the function call expression). Only valid if the function return type is not {{c|void}}.
@2@ Terminates the current function. Only valid if the function return type is {{c|void}}.

If the type of the {{spar|expression}} is different from the return type of the function, its value is {{rlp|conversion|converted}} as if by assignment to an object whose type is the return type of the function, except that overlap between object representations is permitted:
{{source|1=
struct s { double i; } f(void); // function returning struct s
union { struct { int f1; struct s f2; } u1;
        struct { struct s f3; int f4; } u2; } g;
struct s f(void)
{
    return g.u1.f2;
}
int main(void)
{
// g.u2.f3 = g.u1.f2; // undefined behavior (overlap in assignment)
   g.u2.f3 = f();     // well-defined
}
}}

If the return type is a real floating type, the result may be represented in [[c/types/limits/FLT_EVAL_METHOD|greater range and precision]] than implied by the new type.

Reaching the end of a function other than {{c|main}} is equivalent to {{c|return;}}. Reaching the end of the main function is equivalent to {{c|return 0;}}. Reaching the end of any other value-returning function is undefined behavior, but only if the result of the function is used in an expression.

Executing the {{tt|return}} statement in a {{rlp|_Noreturn|no-return function}} is undefined behavior.

===Keywords===

{{ltt|c/keyword/return}}

===Example===
{{todo|improve}}
{{example
 | code=
#include &lt;stdio.h&gt;
 
void fa(int i)
{
    if (i == 2)
       return;
    printf(&quot;fa():   %d\n&quot;, i);
} // implied return;
 
int fb(int i)
{
    if (i &gt; 4)
       return 4;
    printf(&quot;fb():   %d\n&quot;, i);
    return 2;
}
 
int main(void)
{
    fa(2);
    fa(1);
    int i = fb(5);   // the return value 4 used to initializes i
    i = fb(i);       // the return value 2 used as rhs of assignment
    printf(&quot;main(): %d\n&quot;, i);
}
 | output=
fa():   1
fb():   4
main(): 2
}}

===References===
{{ref std c11}}
{{ref std | section=6.8.6.4 | title=The return statement | p=154}}
{{ref std c99}}
{{ref std | section=6.8.6.4 | title=The return statement | p=139}}
{{ref std c89}}
{{ref std | section=3.6.6.4 | title=The return statement}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/return | return statement}}
{{dsc end}}

[[ar:c/language/return]]
[[cs:c/language/return]]
[[de:c/language/return]]
[[es:c/language/return]]
[[fr:c/language/return]]
[[it:c/language/return]]
[[ja:c/language/return]]
[[ko:c/language/return]]
[[pl:c/language/return]]
[[pt:c/language/return]]
[[ru:c/language/return]]
[[tr:c/language/return]]
[[zh:c/language/return]]</text>
      <sha1>lvvjc4cpr8qdkwb08dlnftgl9i2a8ze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/scalar initialization</title>
    <ns>0</ns>
    <id>13893</id>
    <revision>
      <id>79094</id>
      <parentid>76191</parentid>
      <timestamp>2015-06-23T11:25:51Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3580">{{title|Scalar initialization}}
{{c/language/initialization/navbar}}

When {{rlp|initialization|initializing}} an object of {{rlp|type#Type_groups|scalar type}}, the initializer must be a single expression

The initializer for a scalar (an object of integer type including booleans and enumerated types, floating type including complex and imaginary, and pointer type including pointer to function) must be a single expression, optionally enclosed in braces:

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|{{=}}}} {{spar|expression}}
}}
{{sdsc|num=2|1=
{{ttb|{{=}}}} {{ttb|{ }} {{spar|expression}} {{ttb|} }}
}}
{{sdsc end}}

The expression is evaluated, and its value, after {{rlp|conversion|conversion as if by assignment}} to the type of the object, becomes the initial value of the object being initialized.

===Notes===
Because of the rules that apply to conversions as if by assignment, {{rlp|const}} and {{rlp|volatile}} qualifiers on the declared type are ignored when determining which type to convert the {{spar|expression}} to.

See {{rlp|initialization}} for the rules that apply when no initializer is used.

As with all other initializations, {{spar|expression}} must be a {{rlp|constant expression}} when initializing objects of static or thread-local {{rlp|storage duration}}.

The {{spar|expression}} cannot be a {{rlp|operator_other#Comma_operator|comma operator}}  (unless parenthesized) because the comma at the top level would be interpreted as the beginning of the next declarator.

When initializing objects of floating-point type, all computations for the objects with automatic {{rlp|storage duration}} are done as-if at execution time and are affected by the [[c/numeric/fenv/FE_round|current rounding]]; floating-point errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]]. For objects of static and thread-local storage duration, computations are done as-if at compile time, and no exceptions are raised:
{{source|1=
void f(void)
{
#pragma STDC FENV_ACCESS ON
    static float v = 1.1e75; // does not raise exceptions: static init

    float u[] = { 1.1e75 }; // raises FE_INEXACT
    float w = 1.1e75;       // raises FE_INEXACT

    double x = 1.1e75; // may raise FE_INEXACT (depends on FLT_EVAL_METHOD)
    float y = 1.1e75f; // may raise FE_INEXACT (depends on FLT_EVAL_METHOD)

    long double z = 1.1e75; // does not raise exceptions (conversion is exact)
}
}}

===Example===
{{example|code= 
#include &lt;stdbool.h&gt;
int main(void)
{
    bool b = true;
    const double d = 3.14;
    int k = 3.15; // conversion from double to int
    int n = {12}, // optional braces
       *p = &amp;n,   // non-constant expression OK for automatic variable
       (*fp)(void) = main;
    enum {RED, BLUE} e = RED; // enumerations are scalar types as well
}
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.9/11 | title=Initialization | p=140}}
{{ref std c99}}
{{ref std | section=6.7.8/11 | title=Initialization | p=126}}
{{ref std c89}}
{{ref std | section=3.5.7/8  | title=Initialization}}
{{ref std end}}

[[ar:c/language/scalar_initialization]]
[[cs:c/language/scalar_initialization]]
[[de:c/language/scalar_initialization]]
[[es:c/language/scalar_initialization]]
[[fr:c/language/scalar_initialization]]
[[it:c/language/scalar_initialization]]
[[ja:c/language/scalar_initialization]]
[[ko:c/language/scalar_initialization]]
[[pl:c/language/scalar_initialization]]
[[pt:c/language/scalar_initialization]]
[[ru:c/language/scalar_initialization]]
[[tr:c/language/scalar_initialization]]
[[zh:c/language/scalar_initialization]]</text>
      <sha1>70aypnl5me7uez0zzwtnvl5tgchkdr7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/scope</title>
    <ns>0</ns>
    <id>13746</id>
    <revision>
      <id>83310</id>
      <parentid>83235</parentid>
      <timestamp>2016-01-31T13:19:21Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>moved the misplaced modifier &quot;only;&quot; nested scopes is about more than just block scope</comment>
      <text xml:space="preserve" bytes="8459">{{title|Scope}}
{{c/language/basics/navbar}}

Each {{rlp|identifier}} that appears in a C program is ''visible'' (that is, may be used) only in some possibly discontiguous portion of the source code called its ''scope''.

Within a scope, an identifier may designate more than one entity only if the entities are in different {{rlp|name space}}s.

C has four kinds of scopes: 
:* block scope
:* file scope
:* function scope
:* function prototype scope

===Nested scopes===
If two different entities named by the same identifier are in scope at the same time, and they belong to the same {{rlp|name space}}, the scopes are nested (no other form of scope overlap is allowed), and the declaration that appears in the inner scope hides the declaration that appears in the outer scope:
{{source|1=
// The name space here is ordinary identifiers.

int a;   // file scope of name a begins here

void f(void)
{
    int a = 1; // the block scope of the name a begins here; hides file-scope a
    {
      int a = 2;         // the scope of the inner a begins here, outer a is hidden
      printf(&quot;%d\n&quot;, a); // inner a is in scope, prints 2
    }                    // the block scope of the inner a ends here
    printf(&quot;%d\n&quot;, a);   // the outer a is in scope, prints 1
}                        // the scope of the outer a ends here

void g(int a);   // name a has function prototype scope; hides file-scope a
}}

===Block scope===
The scope of any identifier declared inside a {{rlp|statements#Compound_statements|compound statement}}, including function bodies, {{rev inl|since=c99|or in any expression, declaration, or statement appearing in {{rlp|if}}, {{rlp|switch}}, {{rlp|for}}, {{rlp|while}}, or {{rlp|do|do-while}} statement}}, or within the parameter list of a {{rlp|function definition}} begins at the point of declaration and ends at the end of the block or statement in which it was declared.

{{source|1=
void f(int n)  // scope of the function parameter 'n' begins
{         // the body of the function begins
   ++n;   // 'n' is in scope and refers to the function parameter
// int n = 2; // error: cannot redeclare identifier in the same scope
   for(int n = 0; n&lt;10; ++n) { // scope of loop-local 'n' begins
       printf(&quot;%d\n&quot;, n); // prints 0 1 2 3 4 5 6 7 8 9
   } // scope of the loop-local 'n' ends
     // the function parameter 'n' is back in scope
   printf(&quot;%d\n&quot;, n); // prints the value of the parameter
} // scope of function parameter 'n' ends
int a = n; // Error: name 'n' is not in scope
}}

{{rev begin}}
{{rev|since=c99|
Until C99, selection and iteration statements did not establish their own block scopes (although if a compound statement was used in the statement, it had its usual block scope):
{{source|1=
enum {a, b};
int different(void)
{
    if (sizeof(enum {b, a}) != sizeof(int))
        return a; // a == 1
    return b; // b == 0 in C89, b == 1 in C99
}
}}
}}
{{rev end}}

Block-scope variables have {{rlp|storage_duration|no linkage}} and {{rlp|storage_duration|automatic storage duration}} by default. Note that storage duration for non-VLA local variables begins when the block is entered, but until the declaration is seen, the 
variable is not in scope and cannot be accessed.

===File scope===
The scope of any identifier declared outside of any block or parameter list begins at the point of declaration and ends at the end of the translation unit.

{{source|1=
int i; // scope of i begins
static int g(int a) { return a; } // scope of g begins (note, &quot;a&quot; has block scope)
int main(void)
{
    i = g(2); // i and g are in scope
}
}}

File-scope identifiers have {{rlp|storage duration|external linkage}} and {{rlp|storage duration|static storage duration}} by default.

===Function scope===
A {{rlp|statements#Labels|label (and only a label)}} declared inside a function is in scope everywhere in that function, in all nested blocks, before and after its own declaration. Note: a label is declared implicitly, by using an otherwise unused identifier before the colon character before any statement.
{{source|1=
void f()
{
   {   
       goto label; // label in scope even though declared later
label:;
   }
   goto label; // label ignores block scope
}

void g()
{
    goto label; // error: label not in scope in g()
}
}}

===Function prototype scope===
The scope of a name introduced in the parameter list of a {{rlp|function declaration}} that is not a definition ends at the end of the function {{rlp|declarations|declarator}}.
{{source|1=
int f(int n,
      int a[n]); // n is in scope and refers to the first parameter
}}

Note that if there are multiple or nested declarators in the declaration, the scope ends at the end of the nearest enclosing function declarator:
{{source|1=
void f ( // function name 'f' is at file scope
 long double f,            // the identifier 'f' is now in scope, file-scope 'f' is hidden
 char (**a)[10 * sizeof f] // 'f' refers to the first parameter, which is in scope
);

enum{ n = 3 };
int (*(*g)(int n))[n]; // the scope of the function parameter 'n'
                       // ends at the end of its function declarator
                       // in the array declarator, global n is in scope
// (this declares a pointer to function returning a pointer to an array of 3 int)
}}

===Point of declaration===
The scope of structure, union, and enumeration tags begins immediately after the appearance of the tag in a type specifier that declares the tag.
{{source|1=
struct Node {
   struct Node* next; // Node is in scope and refers to this struct
};
}}

The scope of enumeration constant begins immediately after the appearance of its defining enumerator in an enumerator list.
{{source|1=
enum { x = 12 };
{
    enum { x = x + 1, // new x is not in scope until the comma, x is initialized to 13
           y = x + 1  // the new enumerator x is now in scope, y is initialized to 14
         };
}
}}

The scope of any other identifier begins just after the end of its declarator and before the initializer, if any:
{{source|1=
int x = 2; // scope of the first 'x' begins
{
    int x[x]; // scope of the newly declared x begins after the declarator (x[x]).
              // Within the declarator, the outer 'x' is still in scope.
              // This declares a VLA array of 2 int.
}

unsigned char x = 32; // scope of the outer 'x' begins
{
    unsigned char x = x;
            // scope of the inner 'x' begins before the initializer (= x)
            // this does not initialize the inner 'x' with the value 32, 
            // this initializes the inner 'x' with its own, indeterminate, value
}

unsigned long factorial(unsigned long n)
// declarator ends, 'factorial' is in scope from this point
{
   return n&lt;2 ? 1 : n*factorial(n-1); // recursive call
}
}}

As a special case, the scope of a {{rlp|type|type name}} that is not a declaration of an identifier is considered to begin just after the place within the type name where the identifier would appear were it not omitted.

===Notes===
Prior to C89, identifiers with external linkage had file scope even when introduced within a block, and because of that, a C89 compiler is not required to diagnose the use of an extern identifier that has gone out of scope (such use is undefined behavior).

Local variables within a loop body can hide variables declared in the init clause of a {{rlp|for}} loop in C (their scope is nested), but cannot do that in C++.

Unlike C++, C has no struct scope: names declared within a struct/union/enum declaration are in the same scope as the struct declaration (except that data members are in their own {{rlp|name space|member name space}}):
{{source|1=
struct foo {
    struct baz {};
    enum color {RED, BLUE};
};
struct baz b; // baz is in scope
enum color x = RED; // color and RED are in scope
}}

===References===
{{ref std c11}}
{{ref std | section=6.2.1 | title=Scopes of identifiers | p=35-36}}
{{ref std c99}}
{{ref std | section=6.2.1 | title=Scopes of identifiers | p=29-30}}
{{ref std c89}}
{{ref std | section=3.1.2.1 | title=Scopes of identifiers}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/scope | Scope}}
{{dsc end}}

[[ar:c/language/scope]]
[[cs:c/language/scope]]
[[de:c/language/scope]]
[[es:c/language/scope]]
[[fr:c/language/scope]]
[[it:c/language/scope]]
[[ja:c/language/scope]]
[[ko:c/language/scope]]
[[pl:c/language/scope]]
[[pt:c/language/scope]]
[[ru:c/language/scope]]
[[tr:c/language/scope]]
[[zh:c/language/scope]]</text>
      <sha1>b0cxr92rujlu84d1u5uit1vusk84pkv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/sizeof</title>
    <ns>0</ns>
    <id>13156</id>
    <revision>
      <id>85287</id>
      <parentid>85283</parentid>
      <timestamp>2016-04-13T14:49:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 85283 by [[Special:Contributions/Newatthis|Newatthis]] ([[User talk:Newatthis|talk]]) this isn't BNF</comment>
      <text xml:space="preserve" bytes="3950">{{title|sizeof operator}}
{{c/language/expressions/navbar}}
Queries size of the object or type

Used when actual size of the object must be known

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|sizeof(}} {{spar|type}} {{ttb|)}}}}
{{sdsc | num=2 | {{ttb|sizeof}} {{spar|expression}} {{ttb|}}}}
{{sdsc end}}

Both versions return a value of type {{lc|size_t}}. 

===Explanation===
@1@ Returns the size, in bytes, of the {{rlp|object#Object_representation|object representation}} of {{spar|type}}
@2@ Returns the size, in bytes, of the object representation of the type of {{spar|expression}}

===Notes===
Depending on the computer architecture, a [[enwiki:Byte|byte]] may consist of 8 or more bits, the exact number provided as {{lc|CHAR_BIT}}.

{{c|sizeof(char)}}, {{c|sizeof(signed char)}}, and {{c|sizeof(unsigned char)}} always return {{c|1}}.

sizeof cannot be used with function types, incomplete types (including {{c|void}}), or {{rlp|bit field}} lvalues.

When applied to an operand that has {{rlp|struct|structure}} or {{rlp|union}} type, the result is the total number of bytes in such an object, including internal and trailing padding. The trailing padding is such that if the object were an element of an array, the alignment requirement of the next element of this array would be satisfied, in other words, sizeof(T) returns the size of an element of a T[] array.

{{rev inl|since=c99|Except if the type of {{spar|expression}} is a {{rlp|array|VLA}}, }}{{spar|expression}} is not evaluated and the {{tt|sizeof}} operator may be used in an integer {{rlp|constant expression}}.

{{rev begin}}
{{rev|since=c99|
If the type of {{spar|expression}} is a {{rlp|array|variable-length array}} type, {{spar|expression}} is evaluated and the size of the array it evaluates to is calculated at run time.}}
{{rev end}}

Number of elements in any {{rlp|array}} {{c|a}} {{rev inl|since=c99|including VLA}} may be determined with the expression {{c|sizeof a / sizeof a[0]}}. Note that if {{c|a}} has pointer type (such as after array-to-pointer conversion of function parameter type adjustment), this expression would simply divide the number of bytes in a pointer type by the number of bytes in the pointed type.

===Keywords===
{{ltt|c/keyword/sizeof}}

===Example===
{{example
| sample output corresponds to a platform with 64-bit pointers and 32-bit int
| code=
#include &lt;stdio.h&gt;

int main(void)
{
    // type argument:
    printf(&quot;sizeof(float)         = %zu\n&quot;, sizeof(float));
    printf(&quot;sizeof(void(*)(void)) = %zu\n&quot;, sizeof(void(*)(void)));
    printf(&quot;sizeof(char[10])      = %zu\n&quot;, sizeof(char[10]));
//  printf(&quot;sizeof(void(void)) = %zu\n&quot;, sizeof(void(void))); // Error: function type
//  printf(&quot;sizeof(char[]) = %zu\n&quot;, sizeof(char[])); // Error: incomplete type

    // expression argument:
    printf(&quot;sizeof 'a'   = %zu\n&quot;, sizeof 'a'); // type of 'a' is int
//  printf(&quot;sizeof main = %zu\n&quot;, sizeof main); // Error: Function type
    printf(&quot;sizeof &amp;main = %zu\n&quot;, sizeof &amp;main);
    printf(&quot;sizeof \&quot;hello\&quot; = %zu\n&quot;, sizeof &quot;hello&quot;); // type is char[6]
}
 | p=true
 | output=
sizeof(float)         = 4
sizeof(void(*)(void)) = 8
sizeof(char[10])      = 10
sizeof 'a'   = 4
sizeof &amp;main = 8
sizeof &quot;hello&quot; = 6
}}

===References===
{{ref std c11}}
{{ref std | section=6.5.3.4 | title=The sizeof and _Alignof operators | p=90-91}}
{{ref std c99}}
{{ref std | section=6.5.3.4 | title=The sizeof operator | p=80-81}}
{{ref std c89}}
{{ref std | section=3.3.3.4 | title=The sizeof operator}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/sizeof | sizeof operator}}
{{dsc end}}

[[ar:c/language/sizeof]]
[[cs:c/language/sizeof]]
[[de:c/language/sizeof]]
[[es:c/language/sizeof]]
[[fr:c/language/sizeof]]
[[it:c/language/sizeof]]
[[ja:c/language/sizeof]]
[[ko:c/language/sizeof]]
[[pl:c/language/sizeof]]
[[pt:c/language/sizeof]]
[[ru:c/language/sizeof]]
[[tr:c/language/sizeof]]
[[zh:c/language/sizeof]]</text>
      <sha1>gqn80yp3hda01slgt8fkoozhx972tvq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/statements</title>
    <ns>0</ns>
    <id>13862</id>
    <revision>
      <id>79085</id>
      <parentid>76128</parentid>
      <timestamp>2015-06-23T10:59:29Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="5993">{{title|Statements}}
{{c/language/statements/navbar}}
Statements are fragments of the C program that are executed in sequence. The body of any function is a compound statement, which, in turn is a sequence of statements and declarations:

{{source|1=
int main(void)
{ // start of a compound statement
    int n = 1; // declaration (not a statement)
    n = n+1; // expression statement
    printf(&quot;n = %d\n&quot;, n); // expression statement
    return 0; // return statement
} // end of compound statement, end of function body
}}


There are five types of statements:

@1@ compound statements
@2@ expression statements
@3@ selection statements
@4@ iteration statements
@5@ jump statements

===Labels===
Any statement can be ''labeled'', by providing a name followed by a colon before the statement itself.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|identifier}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{ttb|case}} {{spar|constant_expression}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc|num=3|1=
{{ttb|default}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc end}}
@1@ Target for {{rlp|goto}}.
@2@ Case label in a {{rlp|switch}} statement.
@3@ Default label in a {{rlp|switch}} statement.

Any statement (but not a declaration) may be preceded by any number of ''labels'', each of which declares {{spar|identifier}} to be a label name, which must be unique within the enclosing function (in other words, label names have {{rlp|scope|function scope}}).

Label declaration has no effect on its own, does not alter the flow of control, or modify the behavior of the statement that follows in any way.

===Compound statements===
A compound statement, or ''block'', is a brace-enclosed sequence of statements and declarations.

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|{}} {{spar|statement}} {{tt|{{!}}}} {{spar|declaration}}...{{mark optional}} {{ttb|} }}
}}
{{sdsc end}}

The compound statement allows a set of declarations and statements to be grouped into one unit that can be used anywhere a single statement is expected (for example, in an {{rlp|if}} statement or an iteration statement):

{{source|1=
if (expr) // start of if-statement
{ // start of block
  int n = 1; // declaration
  printf(&quot;%d\n&quot;, n); // expression statement
} // end of block, end of if-statement
}}

Each compound statement introduces its own {{rlp|scope|block scope}}.

The initializers of the variables with automatic {{rlp|storage duration}} declared inside a block and the VLA declarators are executed when flow of control passes over these declarations in order, as if they were statements:
{{source|1=
int main(void)
{ // start of block
  { // start of block
       puts(&quot;hello&quot;); // expression statement
       int n = printf(&quot;abc\n&quot;); // declaration, prints &quot;abc&quot;, stores 4 in n
       int a[n*printf(&quot;1\n&quot;)]; // declaration, prints &quot;1&quot;, allocates 8*sizeof(int)
       printf(&quot;%zu\n&quot;, sizeof(a)); // expression statement
  } // end of block, scope of n and a ends
  int n = 7; // n can be reused
}
}}

===Expression statements===
An expression followed by a semicolon is a statement.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|expression}}{{mark optional}} {{ttb|;}}
}}
{{sdsc end}}

Most statements in a typical C program are expression statements, such as assignments or function calls.

An expression statement without an expression is called a ''null statement''. It is often used to provide an empty body to a {{rlp|for}} or {{rlp|while}} loop. It can also be used to carry a label in the end of a compound statement or before a declaration:
{{source|1=
puts(&quot;hello&quot;); // expression statement
char *s;
while (*s++ != '\0')
    ; // null statement
}}

===Selection statements===
The selection statements choose between one of several statements depending on the value of an expression.

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|if}} {{ttb|(}} {{spar|expression}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{ttb|if}} {{ttb|(}} {{spar|expression}} {{ttb|)}} {{spar|statement}} {{ttb|else}} {{spar|statement}}
}}
{{sdsc|num=3|1=
{{ttb|switch}} {{ttb|(}} {{spar|expression}} {{ttb|)}} {{spar|statement}} 
}}
{{sdsc end}}

@1@ {{rlp|if}} statement
@2@ {{rlp|if}} statement with an else clause
@3@ {{rlp|switch}} statement

===Iteration statements===
The iteration statements repeatedly execute a statement.

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|while}} {{ttb|(}} {{spar|expression}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{ttb|do}} {{spar|statement}} {{ttb|while}} {{ttb|(}} {{spar|expression}} {{ttb|)}} {{ttb|;}} 
}}
{{sdsc|num=3|1=
{{ttb|for}} {{ttb|(}} {{spar|init_clause}} {{ttb|;}} {{spar|expression}}{{mark optional}} {{ttb|;}} {{spar|expression}}{{mark optional}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc end}}

@1@ {{rlp|while}} loop
@2@ {{rlp|do|do-while}} loop
@3@ {{rlp|for|for}} loop

===Jump statements===
The jump statements unconditionally transfer flow control.

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|break}} {{ttb|;}}
}}
{{sdsc|num=2|1=
{{ttb|continue}} {{ttb|;}}
}}
{{sdsc|num=3|1=
{{ttb|return}} {{spar|expression}}{{mark optional}} {{ttb|;}}
}}
{{sdsc|num=4|1=
{{ttb|goto}} {{spar|identifier}} {{ttb|;}}
}}
{{sdsc end}}

@1@ {{rlp|break}} statement
@2@ {{rlp|continue}} statement
@3@ {{rlp|return}} statement with an optional expression
@4@ {{rlp|goto}} statement

===References===
{{ref std c11}}
{{ref std | section=6.8 | title=Statements and blocks | p=146-154}}
{{ref std c99}}
{{ref std | section=6.8 | title=Statements and blocks | p=131-139}}
{{ref std c89}}
{{ref std | section=3.6 | title=STATEMENTS}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/statements | Statements}}
{{dsc end}}

[[ar:c/language/statements]]
[[cs:c/language/statements]]
[[de:c/language/statements]]
[[es:c/language/statements]]
[[fr:c/language/statements]]
[[it:c/language/statements]]
[[ja:c/language/statements]]
[[ko:c/language/statements]]
[[pl:c/language/statements]]
[[pt:c/language/statements]]
[[ru:c/language/statements]]
[[tr:c/language/statements]]
[[zh:c/language/statements]]</text>
      <sha1>il3ahz5vbnq6bm8agv4d4ewoyykea68</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/static assert</title>
    <ns>0</ns>
    <id>13958</id>
    <redirect title="c/language/ Static assert" />
    <revision>
      <id>75629</id>
      <timestamp>2015-01-24T15:41:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[c/language/_Static_assert]]</text>
      <sha1>gqn7m9399oyzy2jfd3puou8sm9gtvhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/static storage duration</title>
    <ns>0</ns>
    <id>13763</id>
    <revision>
      <id>72908</id>
      <parentid>72897</parentid>
      <timestamp>2014-10-04T20:43:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corrected language links</comment>
      <text xml:space="preserve" bytes="1380">{{title|Static storage duration}}
{{c/language/navbar}}

An object whose identifier is declared without the storage-class specifier {{c|_Thread_local}}, and either with external or internal linkage or with the storage-class specifier {{c|static}}, has static storage duration. Its lifetime is the entire execution of the program and its stored value is initialized only once, prior to program startup.

===Notes===
Since its stored value is initialized only once, an object with static storage duration can profile the invocations of a function.

The other use of the keyword {{c|static}} is {{rlp|file_scope|file scope}}.

===Example===
{{example
 |  Profiling the invocations of function f().
 | code= 
#include &lt;stdio.h&gt;

void f (void)
{
    static int count = 0;   /* static variable    */
    int i = 0;              /* automatic variable */
    printf(&quot;%d %d\n&quot;, i++,count++);
    return;
}

int main(void)
{
    for (int ndx=0; ndx&lt;10; ++ndx)
        f();

    return 0;
}
 | p=true
 | output=
0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
}}

[[de:c/language/static_storage_duration]]
[[es:c/language/static_storage_duration]]
[[fr:c/language/static_storage_duration]]
[[it:c/language/static_storage_duration]]
[[ja:c/language/static_storage_duration]]
[[pt:c/language/static_storage_duration]]
[[ru:c/language/static_storage_duration]]
[[zh:c/language/static_storage_duration]]</text>
      <sha1>hb1n8v3a43aui5kyqe0ns0un05i9dld</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/storage class specifiers</title>
    <ns>0</ns>
    <id>9550</id>
    <revision>
      <id>70239</id>
      <parentid>68188</parentid>
      <timestamp>2014-05-12T17:38:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>C main</comment>
      <text xml:space="preserve" bytes="4710">{{title|Storage-class specifiers}}
{{c/language/navbar}}

:*{{ttb|auto}} - automatic duration with no linkage.
:*{{ttb|register}} - automatic duration with no linkage. Also hints to the compiler to place the variable in the processor's register.
:*{{ttb|static}} - static duration with internal linkage at file scope and no linkage at block scope.
:*{{ttb|extern}} - static duration with either internal or more usually external linkage.
:*{{ttb|_Thread_local}} - {{mark since c11}} - thread storage duration.

===Explanation===

====Storage duration====

All variables in a program have one of the following storage durations that determines its lifetime:

:*'''''automatic''''' storage duration. The variable is allocated at the beginning of the enclosing code block and deallocated at the end. This is the default for all variables, except those declared {{tt|static}}, {{tt|extern}} or {{tt|_Thread_local}}.

:*'''''static''''' storage duration. The variable is allocated when the program begins and deallocated when the program ends. Only one instance of the variable can exist. Variables declared with {{tt|static}} or {{tt|extern}} have this storage duration.

:*'''''thread''''' storage duration {{mark since c11}}. The variable is allocated when the thread begins and deallocated when the thread ends. Each thread has its own instance of the variable. Only variables declared {{tt|_Thread_local}} have this storage duration. {{tt|_Thread_local}} can only be declared for variables declared with {{tt|static}} or {{tt|extern}} and cannot be used in a function declaration.

:*'''''allocated''''' storage duration. The variable is allocated and deallocated per request by using [[c/memory|dynamic memory allocation]] functions.

====Linkage====

Linkage refers to the ability of a variable or function to be referred to in other scopes. If a variable or function with the same identifier is declared in several scopes, but cannot be referred to from all of them, then several instances of the variable are generated. The following linkages are recognized:

:*'''''no linkage'''''. The variable can be referred to only from the scope it is in (block scope). All variables with automatic, thread and dynamic storage durations have this linkage, as well as variables declared {{tt|static}} at block scope.

:*'''''internal linkage'''''. The variable can be referred to from all scopes in the current translation unit. All variables which are declared at file scope have this linkage, including variables declared {{tt|static}} at file scope.

:*'''''external linkage'''''. The variable can be referred to from any other translation units in the entire program. All variables which are declared either {{tt|extern}} or {{tt|const}} with no explicit storage-class specifier, but not {{tt|static}}, have this linkage.

===Keywords===

{{ltt|c/keyword/auto}},
{{ltt|c/keyword/register}},
{{ltt|c/keyword/static}},
{{ltt|c/keyword/extern}},
{{ltt|c/keyword/_Thread_local}}

===Example===
Scope, Visibility, Lifetime:
A variable with automatic storage duration is allocated with a high memory address. A variable with static storage duration is allocated with a low memory address; uninitialized variables are separated from initialized variables in memory for a fast internal initialization to zero. A variable with allocated storage duration is allocated memory above variables with static storage duration.
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
 
/* static storage duration */
int A;       // uninitialized global variable; this system initializes with zero
int B = 9;   // initialized global variable
 
int main(void)
{
    printf(&quot;&amp;A = %p\n&quot;, (void*)&amp;A);
    printf(&quot;&amp;B = %p\n&quot;, (void*)&amp;B);
 
    /* automatic storage duration */
    int A = 1;   // hides global A
    printf(&quot;&amp;A = %p\n&quot;, (void*)&amp;A);

    /* static storage duration */
    static int B=1; // hides global B
    printf(&quot;&amp;B = %p\n&quot;, (void*)&amp;B);
    
    /* allocated storage duration */
    int *ptr_1 = (int*)malloc(sizeof(int));   /* start allocated storage duration */
    printf(&quot;address of int in allocated memory = %p\n&quot;, (void*)ptr_1);
    free(ptr_1);                              /* stop allocated storage duration  */
 
    return 0;
}
 | p=true
 | output=
&amp;A = 0x60103c
&amp;B = 0x601034
&amp;A = 0x7fff3c3153fc
&amp;B = 0x601030
address of int in allocated memory = 0xc4f010
}}

[[de:c/language/storage class specifiers]]
[[es:c/language/storage class specifiers]]
[[fr:c/language/storage class specifiers]]
[[it:c/language/storage class specifiers]]
[[ja:c/language/storage class specifiers]]
[[pt:c/language/storage class specifiers]]
[[ru:c/language/storage class specifiers]]
[[zh:c/language/storage class specifiers]]</text>
      <sha1>kkilp6zhf53whi6mi0150u1skgfov3z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/storage duration</title>
    <ns>0</ns>
    <id>9547</id>
    <revision>
      <id>83130</id>
      <parentid>83124</parentid>
      <timestamp>2016-01-21T18:24:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+inline fn. Typo s/units includes/units include/, +todo</comment>
      <text xml:space="preserve" bytes="10490">{{title|Storage-class specifiers}}
{{c/language/declarations/navbar}}
Specify ''storage duration'' and ''linkage'' of objects and functions:

:*{{ttb|auto}} - automatic duration and no linkage
:*{{ttb|register}} - automatic duration and no linkage; address of this variable cannot be taken
:*{{ttb|static}} - static duration and internal linkage (unless at block scope)
:*{{ttb|extern}} - static duration and external linkage (unless already declared internal)
{{rev begin}}
{{rev|since=c11|
:*{{ttb|_Thread_local}} - thread storage duration
}}
{{rev end}}

===Explanation===
Storage-class specifiers appear in {{rlp|declarations}}. At most one specifier may be used{{rev inl|since=c11|, except that {{tt|_Thread_local}} may be combined with {{tt|static}} or {{tt|extern}} to adjust linkage}}. The storage-class specifiers determine two independent properties of the names they declare: ''storage duration'' and ''linkage''.

@1@ The {{tt|auto}} specifier is only allowed for objects declared at block scope (except function parameter lists). It indicates automatic storage duration and no linkage, which are the defaults for these kinds of declarations.
@2@ The {{tt|register}} specifier is only allowed for objects declared at block scope, including function parameter lists. It indicates automatic storage duration and no linkage (which is the default for these kinds of declarations), but additionally hints the optimizer to store the value of this variable in a CPU register if possible. Regardless of whether this optimization takes place or not, variables declared {{tt|register}} cannot be used as arguments to the {{rlp|operator_member_access|address-of operator}}{{rev inl|since=c11|, cannot use {{rlp|_Alignas|alignas}}}}, and {{tt|register}} arrays are not convertible to pointers.
@3@ The {{tt|static}} specifier specifies both static storage duration{{rev inl|since=c11| (unless combined with {{tt|_Thread_local}})}} and internal linkage (unless used at block scope). It can be used with functions at file scope and with variables at both file and block scope, but not in function parameter lists.
@4@ The {{tt|extern}} specifier specifies static storage duration{{rev inl|since=c11| (unless combined with {{tt|_Thread_local}})}} and external linkage. It can be used with function and object declarations in both file and block scope (excluding function parameter lists). If {{tt|extern}} appears on a redeclaration of an identifier that was already declared with internal linkage, the linkage remains internal. Otherwise (if the prior declaration was external, no-linkage, or is not in scope), the linkage is external.

{{rev begin}}
{{rev|since=c11|
@5@ {{tt|_Thread_local}} indicates ''thread storage duration''. It cannot be used with function declarations. If it is used on a declaration of an object, it must be present on every declaration of the same object. If it is used on a block-scope declaration, it must be combined with either {{tt|static}} or {{tt|extern}} to decide linkage.
}}
{{rev end}}

If no storage-class specifier is provided, the defaults are:
: {{tt|extern}} for all functions
: {{tt|extern}} for objects at file scope
: {{tt|auto}} for objects at block scope

For any struct or union declared with a storage-class specifier, the storage duration (but not linkage) applies to their members, recursively.

Function declarations at block scope can use {{tt|extern}} or none at all. Function declarations at file scope can use {{tt|extern}} or {{tt|static}}.

Function parameters cannot use any storage-class specifiers other than {{tt|register}}. Note that {{tt|static}} has special meaning in function parameters of array type.

===Storage duration===
Every {{rlp|object}} has a property called ''storage duration'', which limits the object {{rlp|lifetime}}. There are four kinds of storage duration in C:

:*'''''automatic''''' storage duration. The storage is allocated when the {{rlp|statements#Compound_statements|block}} in which the object was declared is entered and deallocated when it is exited by any means ({{rlp|goto}}, {{rlp|return}}, reaching the end). {{rev inl|since=c99|One exception is the [[c/language/array#Variable-length_arrays|VLAs]]; their storage is allocated when the declaration is executed, not on block entry, and deallocated when the declaration goes out of scope, not than when the block is exited}}. If the block is entered recursively, a new allocation is performed for every recursion level. All function parameters and non-{{tt|static}} block-scope objects have this storage duration, as well as {{rlp|compound literal}}s used at block scope.

:*'''''static''''' storage duration. The storage duration is the entire execution of the program, and the value stored in the object is initialized only once, prior to {{rlp|main function}}. All objects declared {{tt|static}} and all objects with either internal or external linkage{{rev inl|since=c11| that aren't declared {{tt|_Thread_local}}}} have this storage duration.

{{rev begin}}
{{rev|since=c11|
:*'''''thread''''' storage duration. The storage duration is the entire execution of the thread in which it was created, and the value stored in the object is initialized when the thread is started. Each thread has its own, distinct, object. If the thread that executes the expression that accesses this object is not the thread that executed its initialization, the behavior is implementation-defined. All objects declared {{tt|_Thread_local}} have this storage duration.
}}
{{rev end}}

:*'''''allocated''''' storage duration. The storage is allocated and deallocated on request, using [[c/memory|dynamic memory allocation]] functions.

====Linkage====
Linkage refers to the ability of an identifier (variable or function) to be referred to in other scopes. If a variable or function with the same identifier is declared in several scopes, but cannot be referred to from all of them, then several instances of the variable are generated. The following linkages are recognized:

:*'''''no linkage'''''. The identifier can be referred to only from the scope it is in. All function parameters and all non-{{tt|extern}} block-scope variables (including the ones declared {{tt|static}}) have this linkage.

:*'''''internal linkage'''''. The identifier can be referred to from all scopes in the current translation unit. All {{tt|static}} identifiers (both functions and variables) have this linkage.

:*'''''external linkage'''''. The identifier can be referred to from any other translation units in the entire program. All non-{{tt|static}} functions, all {{tt|extern}} variables (unless earlier declared {{tt|static}}), and all file-scope non-{{tt|static}} variables have this linkage.

If the same identifier appears with both internal and external linkage in the same translation unit, the behavior is undefined. This is possible when {{rlp|extern|tentative definitions}} are used.

====Linkage and libraries====
{{todo|should this be a separate top-level entry in c/language under Miscellaneous?}}
Declarations with external linkage are commonly made available in header files so that all  translation units that [[c/preprocessor/include|#include]] the file may refer to the same identifier that are defined elsewhere.

Any declaration with internal linkage that appears in a header file results in a separate and distinct object in each translation unit that includes that file.

Library interface:
{{source|1=// flib.h
#ifndef FLIB_H
#define FLIB_H
void f(void);              // function declaration with external linkage
extern int state;          // variable declaration with external linkage
static const int size = 5; // definition of a read-only variable with internal linkage
enum { MAX = 10 };         // constant definition
inline int sum (int a, int b) { return a+b; } // inline function definition
#endif // FLIB_H
}}

Library implementation:
{{source|1=
// flib.c
#include &quot;flib.h&quot;
static void local_f(int s) {}  // definition with internal linkage (only used in this file)
static int local_state;        // definition with internal linkage (only used in this file)

int state;                     // definition with external linkage (used by main.c)
void f(void) {local_f(state);} // definition with external linkage (used by main.c)
}}

Application code:
{{source|1=
// main.c 
#include &quot;flib.h&quot;
int main(void)
{
    int x[MAX] = {size}; // uses the constant and the read-only variable
    state = 7;           // modifies state in flib.c
    f();                 // calls f() in flib.c
}
}}

===Keywords===

{{ltt|c/keyword/auto}},
{{ltt|c/keyword/register}},
{{ltt|c/keyword/static}},
{{ltt|c/keyword/extern}},
{{ltt|c/keyword/_Thread_local}}

===Notes===
The keyword {{tt|_Thread_local}} is usually used through the convenience macro {{lc|thread_local}}, defined in the header {{tt|threads.h}}.

The {{rlp|typedef}} specifier is formally listed as a storage-class specifier in the C language grammar, but it is used to declare type names and does not specify storage.

Names at file scope that are {{tt|const}} and not {{tt|extern}} have external linkage in C (as the default for all file-scope declarations), but internal linkage in C++.

===Example===
{{example}}

===References===
{{ref std c11}}
{{ref std | section=6.2.2 | title=Linkages of identifiers | p=36-37}}
{{ref std | section=6.2.4 | title=Storage durations of objects | p=38-39}}
{{ref std | section=6.7.1 | title=Storage-class specifiers | p=109-110}}
{{ref std c99}}
{{ref std | section=6.2.2 | title=Linkages of identifiers | p=30-31}}
{{ref std | section=6.2.4 | title=Storage durations of objects | p=32}}
{{ref std | section=6.7.1 | title=Storage-class specifiers | p=98-99}}
{{ref std c89}}
{{ref std | section=3.1.2.2 | title=Linkages of identifiers}}
{{ref std | section=3.1.2.4 | title=Storage durations of objects}}
{{ref std | section=3.5.1   | title=Storage-class specifiers}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/storage_duration | Storage class specifiers}}
{{dsc end}}

[[ar:c/language/storage_duration]]
[[cs:c/language/storage_duration]]
[[de:c/language/storage duration]]
[[es:c/language/storage duration]]
[[fr:c/language/storage duration]]
[[it:c/language/storage duration]]
[[ja:c/language/storage duration]]
[[ko:c/language/storage_duration]]
[[pl:c/language/storage_duration]]
[[pt:c/language/storage duration]]
[[ru:c/language/storage duration]]
[[tr:c/language/storage_duration]]
[[zh:c/language/storage duration]]</text>
      <sha1>5bx3sfpa0s5rqafg618k3i876bo62sj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/string literal</title>
    <ns>0</ns>
    <id>13907</id>
    <revision>
      <id>87931</id>
      <parentid>87915</parentid>
      <timestamp>2016-10-14T11:22:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>The C standard never uses &quot;stage&quot; to refer to translation phases.</comment>
      <text xml:space="preserve" bytes="7517">{{title|string literals}}
{{c/language/expressions/navbar}}

Constructs an unnamed object of specified character array type in-place, used when a character string needs to be embedded in source code.

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|&quot;}} {{spar|s-char-sequence}} {{ttb|&quot;}} }}
{{sdsc | num=2 | notes={{mark since c11}} | {{ttb|u8}} {{ttb|&quot;}} {{spar|s-char-sequence}} {{ttb|&quot;}} }}
{{sdsc | num=3 | notes={{mark since c11}} | {{ttb|u}} {{ttb|&quot;}} {{spar|s-char-sequence}} {{ttb|&quot;}} }}
{{sdsc | num=4 | notes={{mark since c11}} | {{ttb|U}} {{ttb|&quot;}} {{spar|s-char-sequence}} {{ttb|&quot;}} }}
{{sdsc | num=5 | {{ttb|L}} {{ttb|&quot;}} {{spar|s-char-sequence}} {{ttb|&quot;}} }}
{{sdsc end}}
where
{{par begin}}
{{par | {{spar|s-char-sequence}} | zero or more characters, each of which is either a multibyte character from the source character set (excluding ({{ttb|&quot;}}), {{ttb|\}}, and newline), or character escape, hex escape, octal escape{{rev inl|since=c99|, or unified character name}} as defined in [[c/language/escape|escape sequences]].
}}
{{par end}}
@1@ ''character string literal'': The type of the literal is {{c|char[]}}, each character in the array is initialized from the next character in {{spar|s-char-sequence}} using the execution character set.
@2@ ''UTF-8 string literal'': The type of the literal is {{c|char[]}}, each character in the array is initialized from the next multibyte character in {{spar|s-char-sequence}} using UTF-8 encoding.
@3@ 16-bit wide string literal: The type of the literal is {{c|char16_t[]}}, each char16_t element in the array is initialized as if by executing {{lc|mbrtoc16}} in implementation-defined locale.
@4@ 32-bit wide string literal: The type of the literal is {{c|char32_t[]}}, each char32_t element in the array is initialized as if by executing {{lc|mbrtoc32}} in implementation-defined locale.
@5@ wide string literal: The type of the literal is {{c|wchar_t[]}}, each wchar_t element in the array is initialized as if by executing {{lc|mbstowcs}} in implementation-defined locale.

===Explanation===
First, at {{rlp|translation phases|translation phase 6}} (after macro expansion), the adjacent string literals (that is, string literals separated by whitespace only) are concatenated.
{{rev begin}}
{{rev|until=c99|
Only two narrow or two wide string literals may be concatenated.
}}
{{rev|since=c99|
If one literal is unprefixed, the resulting string literal has the width/encoding specified by the prefixed literal. If the two string literals have different encoding prefixes, concatenation is implementation-defined. 
{{source|1=
L&quot;Δx = %&quot; PRId16 // at phase 4, PRId16 expands to &quot;d&quot;
                 // at phase 6, L&quot;Δx = %&quot; and &quot;d&quot; form L&quot;Δx = %d&quot;
}}
}}
{{rev end}}

Secondly, at {{rlp|translation phases|translation phase 7}}, a terminating null character is added to each string literal, and then each literal initializes an unnamed array with static {{rlp|storage duration}} and length just enough to contain the contents of the string literal plus one the null terminator.
{{source|1=
char* p = &quot;\x12&quot; &quot;3&quot;; // creates a static char[3] array holding {'\x12', '3', '\0'} 
                      // sets p to point to the first element of the array
}}

String literals are '''not modifiable''' (and in fact may be placed in read-only memory such as {{tt|.rodata}}). If a program attempts to modify the static array formed by a string literal, the behavior is undefined.
{{source|1=
char* p = &quot;Hello&quot;;
p[1] = 'M'; // Undefined behavior
}}

It is neither required nor forbidden for identical string literals to refer to the same location in memory. Moreover, overlapping string literals or string literals that are substrings of other string literals may be combined.
{{source|1=
&quot;def&quot; == 3+&quot;abcdef&quot;; // may be 1 or 0, implementation-defined
}}

===Notes===
A string literal is not necessarily a string; if a string literal has embedded null characters, it represents an array which contains more than one string:
{{source|1=
char* p = &quot;abc\0def&quot;; // strlen(p) == 3, but the array has size 8
}}

If a valid hex digit follows a hex escape in a string literal, it would fail to compile as an invalid escape sequence, but string concatenation can be used as a workaround:
{{source|1=
//char* p = &quot;\xfff&quot;; // error: hex escape sequence out of range
char* p = &quot;\xff&quot;&quot;f&quot;; // okay, the literal is char[3] holding {'\xff', 'f', '\0'}
}}

String literals can be used to {{rlp|array initialization|initialize arrays}}, and if the size of the array is one less the size of the string literal, the null terminator is ignored:
{{source|1=
char a1[] = &quot;abc&quot;; // a1 is char[4] holding {'a', 'b', 'c', '\0'}
char a2[4] = &quot;abc&quot;; // a2 is char[4] holding {'a', 'b', 'c', '\0'}
char a3[3] = &quot;abc&quot;; // a3 is char[3] holding {'a', 'b', 'c'}
}}

The encoding of character string literals {{v|1}} and wide string literals {{v|5}} is implementation-defined. For example, gcc selects them with the [https://gcc.gnu.org/onlinedocs/cpp/Invocation.html commandline options] {{c|-fexec-charset}} and {{c|-fwide-exec-charset}}.

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;stddef.h&gt;
#include &lt;uchar.h&gt;
#include &lt;locale.h&gt;
int main(void)
{
    char s1[] = &quot;a猫🍌&quot;; // or &quot;a\u732B\U0001F34C&quot;
    char s2[] = u8&quot;a猫🍌&quot;;
    char16_t s3[] = u&quot;a猫🍌&quot;;
    char32_t s4[] = U&quot;a猫🍌&quot;;
    wchar_t s5[] = L&quot;a猫🍌&quot;;

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;  \&quot;%s\&quot; is a char[%zu] holding { &quot;, s1, sizeof s1 / sizeof *s1);
    for(size_t n = 0; n &lt; sizeof s1 / sizeof *s1; ++n) 
        printf(&quot;%#x &quot;, +(unsigned char)s1[n]); puts(&quot; }&quot;);
    printf(&quot;u8\&quot;%s\&quot; is a char[%zu] holding { &quot;, s2, sizeof s2 / sizeof *s2);
    for(size_t n = 0; n &lt; sizeof s2 / sizeof *s2; ++n) 
       printf(&quot;%#x &quot;, +(unsigned char)s2[n]); puts(&quot; }&quot;);
    printf(&quot; u\&quot;a猫🍌\&quot; is a char16_t[%zu] holding { &quot;, sizeof s3 / sizeof *s3);
    for(size_t n = 0; n &lt; sizeof s3 / sizeof *s3; ++n) 
       printf(&quot;%#x &quot;, s3[n]); puts(&quot; }&quot;);
    printf(&quot; U\&quot;a猫🍌\&quot; is a char32_t[%zu] holding { &quot;, sizeof s4 / sizeof *s4);
    for(size_t n = 0; n &lt; sizeof s4 / sizeof *s4; ++n) 
       printf(&quot;%#x &quot;, s4[n]); puts(&quot; }&quot;);
    printf(&quot; L\&quot;%ls\&quot; is a wchar_t[%zu] holding { &quot;, s5, sizeof s5 / sizeof *s5);
    for(size_t n = 0; n &lt; sizeof s5 / sizeof *s5; ++n) 
       printf(&quot;%#x &quot;, s5[n]); puts(&quot; }&quot;);
}
|p=true
|output=
  &quot;a猫🍌&quot; is a char[9] holding { 0x61 0xe7 0x8c 0xab 0xf0 0x9f 0x8d 0x8c 0  }
u8&quot;a猫🍌&quot; is a char[9] holding { 0x61 0xe7 0x8c 0xab 0xf0 0x9f 0x8d 0x8c 0  }
 u&quot;a猫🍌&quot; is a char16_t[5] holding { 0x61 0x732b 0xd83c 0xdf4c 0  }
 U&quot;a猫🍌&quot; is a char32_t[4] holding { 0x61 0x732b 0x1f34c 0  }
 L&quot;a猫🍌&quot; is a wchar_t[4] holding { 0x61 0x732b 0x1f34c 0  }
}}

===References===
{{ref std c11}}
{{ref std | section=6.4.5 | title=String literals | p=70-72}}
{{ref std c99}}
{{ref std | section=6.4.5 | title=String literals | p=62-63}}
{{ref std c89}}
{{ref std | section=3.1.4 | title=String literals}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/string literal}}
{{dsc end}}

[[ar:c/language/string_literal]]
[[cs:c/language/string_literal]]
[[de:c/language/string_literal]]
[[es:c/language/string_literal]]
[[fr:c/language/string_literal]]
[[it:c/language/string_literal]]
[[ja:c/language/string_literal]]
[[ko:c/language/string_literal]]
[[pl:c/language/string_literal]]
[[pt:c/language/string_literal]]
[[ru:c/language/string_literal]]
[[tr:c/language/string_literal]]
[[zh:c/language/string_literal]]</text>
      <sha1>e5vt8gweavq4t2ao358b0r7jzgdsaki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/struct</title>
    <ns>0</ns>
    <id>9822</id>
    <revision>
      <id>81660</id>
      <parentid>81306</parentid>
      <timestamp>2015-10-31T18:19:49Z</timestamp>
      <contributor>
        <ip>92.74.84.27</ip>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="9144">{{title|Struct declaration}}
{{c/language/declarations/navbar}}

A struct is a type consisting of a sequence of members whose storage is allocated in an ordered sequence (as opposed to union, which is a type consisting of a sequence of members whose storage overlaps).

The {{rlp|declarations|type specifier}} for a struct is identical to the [[c/language/union | {{tt|union}}]] type specifier except for the keyword used:

===Syntax===
{{sdsc begin}}
{{sdsc |num=1| {{ttb|struct}} {{spar|name}}{{mark optional}} {{ttb|{ }} {{spar|struct-declaration-list}} {{ttb|} }}
}}
{{sdsc |num=2| {{ttb|struct}} {{spar|name}}
}}
{{sdsc end}}
@1@ Struct definition: introduces the new type struct {{spar|name}} and defines its meaning
@2@ If used on a line of its own, as in {{tt|struct}} {{spar|name}} {{ttb|;}}, ''declares'' but doesn't define the struct {{tt|name}} (see forward declaration below). In other contexts, names the previously-declared struct.

{{par begin}}
{{par | {{spar|name}} | the name of the struct that's being defined}}
{{par | {{spar|struct-declaration-list}} | any number of variable declarations, {{rlp|bit field}} declarations, and {{rlp|static assert}} declarations. Members of incomplete type and members of function type are not allowed (except for the flexible array member described below)}}
{{par end}}

===Explanation===
Within a struct object, addresses of its elements (and the addresses of the bit field allocation units) increase in order in which the members were defined. A pointer to a struct can be cast to a pointer to its first member (or, if the member is a bit field, to its allocation unit). Likewise, a pointer to the first member of a struct can be cast to a pointer to the enclosing struct. There may be unnamed padding between any two members of a struct or after the last member, but not before the first member. The size of a struct is at least as large as the sum of the sizes of its members.

{{rev begin}}
{{rev|since=c99|
If a struct defines at least one named member, it is allowed to additionally declare its last member with incomplete array type. When an element of the flexible array member is accessed (in an expression that uses operator {{ttb|.}} or {{ttb|-&gt;}} with the flexible array member's name as the right-hand-side operand), then the struct behaves as if the array member had the longest size fitting in the memory allocated for this object. If no additional storage was allocated, it behaves as if an array with 1 element, except that the behavior is undefined if that element is accessed or a pointer one past that element is produced. Initialization, {{c|sizeof}}, and the assignment operator ignore the flexible array member. Structures with flexible array members (or unions whose last member is a structure with flexible array member) cannot appear as array elements or as members of other structures.
{{source|1=
    struct s { int n; double d[]; }; // s.d is a flexible array member 

    struct s t1 = { 0 };         // OK, d is as if double d[1], but UB to access
    struct s t2 = { 1, { 4.2 } }; // error: initialization ignores flexible array

    // if sizeof (double) == 8
    struct s *s1 = malloc(sizeof (struct s) + 64); // as if d was double d[8]
    struct s *s2 = malloc(sizeof (struct s) + 46); // as if d was double d[5]

    s1 = malloc(sizeof (struct s) + 10); // now as if d was double d[1]
    s2 = malloc(sizeof (struct s) + 6);  // same, but UB to access
    double *dp = &amp;(s1-&gt;d[0]);    //  OK
    *dp = 42;                    //  OK
    dp = &amp;(s2-&gt;d[0]);            //  OK
    *dp = 42;                    //  undefined behavior

    *s1 = *s2; // only copies s.n, not any element of s.d
               // except those caught in sizeof (struct s)
}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c11|
Similar to union, an unnamed member of a struct whose type is a struct without {{spar|name}} is known as ''anonymous struct''. Every member of an anonymous struct is considered to be a member of the enclosing struct or union. This applies recursively if the enclosing struct or union is also anonymous.
{{source|1=
struct v {
   union { // anonymous union
      struct { int i, j; }; // anonymous structure
      struct { long k, l; } w;
   };
   int m;
} v1;

v1.i = 2;   // valid
v1.k = 3;   // invalid: inner structure is not anonymous
v1.w.k = 5; // valid
}}

Similar to union, the behavior of the program is undefined if struct is defined without any named members (including those obtained via anonymous nested structs or unions).
}}
{{rev end}}

===Forward declaration===
A declaration of the following form
{{sdsc begin}}
{{sdsc|1=
{{ttb|struct}} {{spar|name}} {{ttb|;}}
}}
{{sdsc end}}
hides any previously declared meaning for the name {{spar|name}} in the tag name space and declares {{spar|name}} as a new struct name in current scope, which will be defined later. Until the definition appears, this struct name has {{rlp|type#Incomplete_types|incomplete type}}.

This allows structs that refer to each other:
{{source|1=
struct y;
struct x { struct y *p; /* ... */ };
struct y { struct x *q; /* ... */ };
}}

Note that a new struct name may also be introduced just by using a struct tag within another declaration, but if a previously declared struct with the same name exists in the tag {{rlp|name space}}, the tag would refer to that name

{{source|1=
struct s* p = NULL; // tag naming an unknown struct declares it
struct s { int a; }; // definition for the struct pointed to by p
void g(void)
{
    struct s; // forward declaration of a new, local struct s
              // this hides global struct s until the end of this block
    struct s *p;  // pointer to local struct s
                  // without the forward declaration above,
                  // this would point at the file-scope s
    struct s { char* p; }; // definitions of the local struct s
}
}}


===Keywords===
{{ltt|c/keyword/struct}}

===Notes===
See {{rlp|struct initialization}} for the rules regarding the initializers for structs.

Because members of incomplete type are not allowed, and a struct type is not complete until the end of the definition, a struct cannot have a member of its own type. A pointer to its own type is allowed, and is commonly used to implement nodes in linked lists or trees.

Because a struct declaration does not establish {{rlp|scope}}, nested types, enumerations and enumerators introduced by declarations within {{spar|struct-declaration-list}} are visible in the surrounding scope where the struct is defined.

===Example===
{{example
 | code=
#include &lt;stddef.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    struct car { char *make; char *model; int year; }; // declares the struct type
    // declares and initializes an object of a previously-declared struct type
    struct car c = {.year=1923, .make=&quot;Nash&quot;, .model=&quot;48 Sports Touring Car&quot;};
    printf(&quot;car: %d %s %s\n&quot;, c.year, c.make, c.model);

    // declares a struct type, an object of that type, and a pointer to it
    struct spaceship { char *make; char *model; char *year; }
        ship = {&quot;Incom Corporation&quot;, &quot;T-65 X-wing starfighter&quot;, &quot;128 ABY&quot;},
        *pship = &amp;ship;
    printf(&quot;spaceship: %s %s %s\n&quot;, ship.year, ship.make, ship.model);

    // addresses increase in order of definition
    // padding may be inserted
    struct A { char a; double b; char c;};
    printf(&quot;offset of char a = %zu\noffset of double b = %zu\noffset of char c = %zu\n&quot;
           &quot;sizeof(struct A)=%zu\n&quot;, offsetof(struct A, a), offsetof(struct A, b),
           offsetof(struct A, c), sizeof(struct A));
    struct B { char a; char b; double c;};
    printf(&quot;offset of char a = %zu\noffset of char b = %zu\noffset of double c = %zu\n&quot;
           &quot;sizeof(struct B)=%zu\n&quot;, offsetof(struct B, a), offsetof(struct B, b),
           offsetof(struct B, c), sizeof(struct B));

    // A pointer to a struct can be cast to a pointer to its first member and vice versa
    char* pmake = (char*)&amp;ship;
    pship = (struct spaceship *)pmake;
}
 | p=true
 | output=
car: 1923 Nash 48 Sports Touring Car
spaceship: 128 ABY Incom Corporation T-65 X-wing starfighter
offset of char a = 0
offset of double b = 8
offset of char c = 16
sizeof(struct A)=24
offset of char a = 0
offset of char b = 1
offset of double c = 8
sizeof(struct B)=16
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.2.1 | title=Structure and union specifiers | p=112-117}}
{{ref std c99}}
{{ref std | section=6.7.2.1 | title=Structure and union specifiers | p=101-104}}
{{ref std c89}}
{{ref std | section=3.5.2.1 | title=Structure and union specifiers}}
{{ref std end}}

===See also===
* {{rlp|operator member access|struct and union member access}}
* {{rlp|bit field}}
* {{rlp|struct initialization}}
{{dsc begin}}
{{dsc see cpp | cpp/language/class | Class declaration}}
{{dsc end}}

[[ar:c/language/struct]]
[[cs:c/language/struct]]
[[de:c/language/struct]]
[[es:c/language/struct]]
[[fr:c/language/struct]]
[[it:c/language/struct]]
[[ja:c/language/struct]]
[[ko:c/language/struct]]
[[pl:c/language/struct]]
[[pt:c/language/struct]]
[[ru:c/language/struct]]
[[tr:c/language/struct]]
[[zh:c/language/struct]]</text>
      <sha1>gjmk615xl1jk2r4nu7qwc77tw079cyn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/struct initialization</title>
    <ns>0</ns>
    <id>13916</id>
    <revision>
      <id>87383</id>
      <parentid>86094</parentid>
      <timestamp>2016-08-17T16:10:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>taged syntax summary until/since c99</comment>
      <text xml:space="preserve" bytes="9926">{{title|Struct and union initialization}}
{{c/language/initialization/navbar}}

When {{rlp|initialization|initializing}} an object of {{rlp|struct}} or {{rlp|union}} type, the initializer must be a non-empty, brace-enclosed, comma-separated list of initializers for the members:

{{sdsc begin}}
{{sdsc|notes={{mark until c99}}|1=
{{ttb|{{=}}}} {{ttb|{ }} {{spar|expression}} {{ttb|,}} {{ttb|...}} {{ttb|} }}
}}
{{sdsc|notes={{mark since c99}}|1=
{{ttb|{{=}}}} {{ttb|{ }} {{spar|designator}}{{mark optional}} {{spar|expression}} {{ttb|,}} {{ttb|...}} {{ttb|} }}
}}
{{sdsc end}}
where the {{spar|designator}} is a sequence (whitespace-separated or adjacent) of individual member designators of the form {{ttb|.}} {{spar|member}} and {{rlp|array initialization|array designators}} of the form {{ttb|[}} {{spar|index}} {{ttb|]}}.

All members that are not initialized explicitly are {{rlp|initialization#Implicit_initialization|initialized implicitly}} the same way as objects that have static storage duration.

===Explanation===
When initializing a {{rlp|union}}, the initializer list must have only one member, which initializes the first member of the union{{rev inl|since=c99| unless a designated initializer is used}}.
{{source|1=
union { int x; char c[4]; }
  u = {1},           // makes u.x active with value 1
 u2 = { .c={'\1'} }; // makes u2.c active with value {'\1','\0','\0','\0'}
}}

When initializing a {{rlp|struct}}, the first initializer in the list initializes the first declared member{{rev inl|since=c99| (unless a designator is specified)}}, and all subsequent initializers {{rev inl|since=c99|without designators }}initialize the struct members declared after the one initialized by the previous expression.
{{source|1=
struct point {double x,y,z;} p = {1.2, 1.3}; // p.x=1.2, p.y=1.3, p.z=0.0
div_t answer = {.quot = 2, .rem = -1 };      // order of elements in div_t may vary
}}

{{rev begin}}
{{rev|since=c99|
A designator causes the following initializer to initialize the struct member described by the designator. Initialization then continues forward in order of declaration, beginning with the next element declared after the one described by the designator.
{{source|1=
struct {int sec,min,hour,day,mon,year;} z
   = {.day=31,12,2014,.sec=30,15,17}; // initializes z to {30,15,17,31,12,2014}
}}
}}
{{rev end}}

It's an error to provide more initializers than members.

===Nested initialization===
If the members of the struct or union are arrays, structs, or unions, the corresponding initializers in the brace-enclosed list of initializers are any initializers that are valid for those members, except that their braces may be omitted as follows:

If the nested initializer begins with an opening brace, the entire nested initializer up to its closing brace initializes the corresponding member object. Each left opening brace establishes a new ''current object''. The members of the current object are initialized in their natural order{{rev inl|since=c99|, unless designators are used}}: array elements in subscript order, struct members in declaration order, only the first declared member of any union. The subobjects within the current object that aren't explicitly initialized by the closing brace are {{rlp|initialization#Implicit_initialization|implicitly initialized}}.
{{source|1=
struct example {
    struct addr_t {
       uint32_t port;
    } addr;
    union {
       uint8_t a8[4];
       uint16_t a16[2];
    } in_u;
};
struct example ex = { // start of initializer list for struct example
                     { // start of initializer list for ex.addr
                        80 // initialized struct's only member
                     }, // end of initializer list for ex.addr
                     { // start of initializer-list for ex.in_u
                        {127,0,0,1} // initializes first element of the union
                     } }; 
}}

If the nested initializer does not begin with an opening brace, only enough initializers from the list are taken to account for the elements or members of the member array, struct or union; any remaining initializers are left to initialize the next struct member:
{{source|1=
struct example ex = {80, 127, 0, 0, 1}; // 80 initializes ex.addr.port
                                        // 127 initializes ex.in_u.a8[0]
                                        // 0 initializes ex.in_u.a8[1]
                                        // 0 initializes ex.in_u.a8[2]
                                        // 1 initializes ex.in_u.a8[3]
}}

{{rev begin}}
{{rev|since=c99|
When designators are nested, the designators for the members follow the designators for the enclosing structs/unions/arrays. Within any nested bracketed initializer list, the outermost designator refers to the ''current object'' and selects the subobject to be initialized within the ''current object'' only.
{{source|1=
struct example ex2 = { // current object is ex2, designators are for members of example
                       .in_u.a8[0]=127, 0, 0, 1, .addr=80}; 
struct example ex3 = {80, .in_u={ // changes current object to the union ex.in_u
                           127,
                           .a8[2]=1 // this designator refers to the member of in_u
                      } };
}}

If any subobject is explicitly initialized twice (which may happen when designators are used), the initializer that appears later in the list is the one used (the earlier initializer may not be evaluated):
{{source|1=
struct {int n;} s = {printf(&quot;a\n&quot;), // this may be printed or skipped
                     .n=printf(&quot;b\n&quot;)}; // always printed
}}

Although any non-initialized subobjects are initialized implicitly, implicit initialization of a subobject never overrides explicit initialization of the same subobject if it appeared earlier in the initializer list:
{{example|
|code=
#include &lt;stdio.h&gt;
typedef struct { int k; int l; int a[2]; } T;
typedef struct { int i;  T t; } S;
T x = {.l = 43, .k = 42, .a[1] = 19, .a[0] = 18 };
 // x initialized to {42, 43, {18, 19} }
int main(void)
{
    S l = { 1,          // initializes l.i to 1
           .t = x,      // initializes l.t to {42, 43, {18, 19} }
           .t.l = 41,   // changes l.t to {42, 41, {18, 19} }
           .t.a[1] = 17 // changes l.t to {42, 41, {18, 17} }
          };
    printf(&quot;l.t.k is %d\n&quot;, l.t.k); // .t = x sets l.t.k to 42 explicitly
                                    // .t.l = 42 would zero out l.t.k implicitly
}
|output=
l.t.k is 42 &lt;!-- many compilers get this wrong, the example is from DR 413, standard-compliant output can be observed with Oracle C among others --&gt;
}}

However, when an initializer begins with a left open brace, its ''current object'' is fully re-initialized and any prior explicit initializers for any of its subobjects are ignored:
{{source|1=
struct fred { char s[4]; int n; };
struct fred x[ ] = { { { &quot;abc&quot; }, 1 }, // inits x[0] to { {'a','b','c','\0'}, 1 }
                      [0].s[0] = 'q'   // changes x[0] to { {'q','b','c','\0'}, 1 }
                   };
struct fred y[ ] = { { { &quot;abc&quot; }, 1 }, // inits y[0] to { {'a','b','c','\0'}, 1 }
                     [0] = { // current object is now the entire y[0] object
                             .s[0] = 'q' 
                            } // replaces y[0] with { {'q','\0','\0','\0'}, 0 }
                    };
}} &lt;!-- this was the example from DR 253 --&gt;
}}
{{rev end}}

===Notes===
The {{rlp|eval order|order of evaluation}} of the subexpressions in any initializer is indeterminately sequenced:
{{source|1=
int n = 1;
struct {int x,y;} p = {n++, n++}; // unspecified, but well-defined behavior:
                                  // n is incremented twice in arbitrary order
                                  // p equal {1,2} and {2,1} are both valid
}}

In C, the braced list of initializers cannot be empty (note that C++ allows empty lists, and also note that a {{rlp|struct}} in C cannot be empty):
{{source|1=
struct {int n;} s = {0}; // OK
struct {int n;} s = {}; // Error: initializer-list cannot be empty
struct {} s = {}; // Error: struct cannot be empty, initializer-list cannot be empty
}}

As with all other {{rlp|initialization}}, every expression in the initializer list must be a {{rlp|constant expression}} when initializing arrays of static or thread-local {{rlp|storage duration}}:
{{source|1=
static struct {char* p} s = {malloc(1)}; // error
}}

The initializer list may have a trailing comma, which is ignored.
{{source|1=
struct {double x,y;} p = {1.0,
                          2.0, // trailing comma OK
                          };
}}


===Example===
{{todo|more practical examples, perhaps initialize some socket structs}}
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    char buff[70];
    // designated initalizers simplify the use of structs whose
    // order of members is unspecified
    struct tm my_time = { .tm_year=112, .tm_mon=9, .tm_mday=9,
                          .tm_hour=8, .tm_min=10, .tm_sec=20 };
    strftime(buff, sizeof buff, &quot;%A %c&quot;, &amp;my_time);
    puts(buff);
}
|p=true
|output=
Sunday Sun Oct  9 08:10:20 2012
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.9/12-38 | title=Initialization | p=140-144}}
{{ref std c99}}
{{ref std | section=6.7.8/12-38 | title=Initialization | p=126-130}}
{{ref std c89}}
{{ref std | section=3.5.7/9-    | title=Initialization}}
{{ref std end}}

[[ar:c/language/struct_initialization]]
[[cs:c/language/struct_initialization]]
[[de:c/language/struct_initialization]]
[[es:c/language/struct_initialization]]
[[fr:c/language/struct_initialization]]
[[it:c/language/struct_initialization]]
[[ja:c/language/struct_initialization]]
[[ko:c/language/struct_initialization]]
[[pl:c/language/struct_initialization]]
[[pt:c/language/struct_initialization]]
[[ru:c/language/struct_initialization]]
[[tr:c/language/struct_initialization]]
[[zh:c/language/struct_initialization]]</text>
      <sha1>dagksrkbudcuv1ecn8f61se3bcmmn3t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/switch</title>
    <ns>0</ns>
    <id>6039</id>
    <revision>
      <id>83519</id>
      <parentid>79086</parentid>
      <timestamp>2016-02-19T19:15:36Z</timestamp>
      <contributor>
        <ip>69.17.173.206</ip>
      </contributor>
      <comment>Handling of switch statement when no label matches and no default.</comment>
      <text xml:space="preserve" bytes="4867">{{title|switch statement}}
{{c/language/statements/navbar}}
Executes code according to the value of an integral argument.

Used where one or several out of many branches of code need to be executed according to an integral value.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|switch (}} {{spar|expression}} {{ttb|)}} {{spar|statement}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|expression}} | any {{rlp|expressions|expression}} of {{rlp|type#Type_groups|integer type}} (char, signed or unsigned integer, or enumeration)}}
{{par | {{spar|statement}} | any {{rlp|statements|statement}} (typically a compound statement). {{ttb|case:}} and {{ttb|default:}} labels are permitted in {{spar|statement}}, and {{c|break;}} statement has special meaning.}}
{{par end}}

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|case}} {{spar|constant_expression}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{ttb|default}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|constant_expression}} | any integer {{rlp|constant expression}} }}
{{par end}}
===Explanation===
The body of a switch statement may have an arbitrary number of {{tt|case:}} labels, as long as the values of all {{spar|constant_expressions}} are unique (after {{rlp|conversion}} to the promoted type of {{spar|expression}}). At most one {{tt|default:}} label may be present (although nested switch statements may use their own {{tt|default:}} labels or have {{tt|case:}} labels whose constants are identical to the ones used in the enclosing switch).

If {{spar|expression}} evaluates to the value that is equal to the value of one of {{spar|constant_expression}}s after conversion to the promoted type of {{spar|expression}}, then control is transferred to the statement that is labeled with that {{spar|constant_expression}}.

If {{spar|expression}} evaluates to a value that doesn't match any of the {{tt|case:}} labels, and the {{tt|default:}} label is present, control is transferred to the statement labeled with the {{tt|default:}} label.

If {{spar|expression}} evaluates to a value that doesn't match any of the {{tt|case:}} labels, and the {{tt|default:}} label is not present, none of the switch body is executed.

The {{rlp|break}} statement, when encountered anywhere in {{spar|statement}}, exits the switch statement:

{{source|switch(1) {
    case 1 : puts(&quot;1&quot;); // prints &quot;1&quot;,
    case 2 : puts(&quot;2&quot;); // then prints &quot;2&quot; (&quot;fall-through&quot;)
}
}}
{{source|switch(1) {
    case 1 : puts(&quot;1&quot;); // prints &quot;1&quot;
             break;     // and exits the switch
    case 2 : puts(&quot;2&quot;);
             break;
}
}}

{{rev begin}}
{{rev|since=c99|
As with all other selection and iteration statements, the switch statement establishes {{rlp|scope|block scope}}: any identifier introduced in the {{spar|expression}} goes out of scope after the {{spar|statement}}.

If a VLA or another identifier with variably-modified type has a {{tt|case:}} or a {{tt|default:}} label within its scope, the entire switch statement must be in its scope (in other words, a VLA must be declared either before the entire switch or after the last label):
{{source|1=
switch (expr)
{
    int i = 4; // not a VLA; OK to declare here
    f(i); // never called
//  int a[i]; // error: VLA cannot be declared here
  case 0:
    i = 17;
default:;
    int a[i]; // OK to declare VLA here
    printf(&quot;%d\n&quot;, i); // prints 17 if expr == 0, prints indeterminate value otherwise
}
}}
}}
{{rev end}}


===Keywords===

{{ltt|c/keyword/switch}},
{{ltt|c/keyword/case}},
{{ltt|c/keyword/default}}

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;

void func(int x)
{
   printf(&quot;func(%d): &quot;, x);
   switch(x)
   {
      case 1: printf(&quot;case 1, &quot;);
      case 2: printf(&quot;case 2, &quot;);
      case 3: printf(&quot;case 3.\n&quot;); break;
      case 4: printf(&quot;case 4, &quot;);
      case 5: printf(&quot;case 5, &quot;);
      default: printf(&quot;default.\n&quot;);
   }
}

int main(void)
{
   for(int i = 1; i &lt; 10; ++i) func(i);
}

 | output=
func(1): case 1, case 2, case 3.
func(2): case 2, case 3.
func(3): case 3.
func(4): case 4, case 5, default.
func(5): case 5, default.
func(6): default.
func(7): default.
func(8): default.
func(9): default.

}}

===References===
{{ref std c11}}
{{ref std | section=6.8.4.2 | title=The switch statement | p=149-150}}
{{ref std c99}}
{{ref std | section=6.8.4.2 | title=The switch statement | p=134-135}}
{{ref std c89}}
{{ref std | section=3.6.4.2 | title=The switch statement}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/switch | switch statement}}
{{dsc end}}

[[ar:c/language/switch]]
[[cs:c/language/switch]]
[[de:c/language/switch]]
[[es:c/language/switch]]
[[fr:c/language/switch]]
[[it:c/language/switch]]
[[ja:c/language/switch]]
[[ko:c/language/switch]]
[[pl:c/language/switch]]
[[pt:c/language/switch]]
[[ru:c/language/switch]]
[[tr:c/language/switch]]
[[zh:c/language/switch]]</text>
      <sha1>5y9ii3x6vq8dyc8pp9hwqqg1oknct5b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/thread storage duration</title>
    <ns>0</ns>
    <id>13764</id>
    <revision>
      <id>72909</id>
      <parentid>72906</parentid>
      <timestamp>2014-10-04T20:46:16Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corrected title and language links</comment>
      <text xml:space="preserve" bytes="1283">{{title|Thread storage duration}}
{{c/language/navbar}}

An object whose identifier is declared with the storage-class specifier {{c|_Thread_local}} {{mark since c11}} has thread storage duration. Its lifetime is the entire execution of the thread for which it is created, and its stored value is initialized when the thread is started. There is a distinct object per thread, and use of the declared name in an expression refers to the object associated with the thread evaluating the expression. The result of attempting to indirectly access an object with thread storage duration from a thread other than the one with which the object is associated is implementation-defined.

===Example===
{{example
 | 
 | code= 
const double PI = 3.14159;         /* const variable is global to all threads  */
_Thread_local unsigned int seed;   /* seed is a thread-specific variable       */
 
int main(void)
{
    return 0;
}
 | p=true
 | output=
(none)
}}

[[de:c/language/thread_storage_duration]]
[[es:c/language/thread_storage_duration]]
[[fr:c/language/thread_storage_duration]]
[[it:c/language/thread_storage_duration]]
[[ja:c/language/thread_storage_duration]]
[[pt:c/language/thread_storage_duration]]
[[ru:c/language/thread_storage_duration]]
[[zh:c/language/thread_storage_duration]]</text>
      <sha1>j3g5v8th8qey13rhmc7t9b4b8jhw2rp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/translation phases</title>
    <ns>0</ns>
    <id>13879</id>
    <revision>
      <id>87935</id>
      <parentid>86510</parentid>
      <timestamp>2016-10-14T13:29:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>copied the -finput-charset note</comment>
      <text xml:space="preserve" bytes="5547">{{title|Phases of translation}}
{{c/language/basics/navbar}}
The C source file is processed by the compiler ''as if'' the following phases take place, in this exact order. Actual implementation may combine these actions or process them differently as long as the behavior is the same.

===Phase 1===
@1@ The individual bytes of the source code file (which is generally a text file in some multibyte encoding such as UTF-8) are mapped, in implementation defined manner, to the characters of the ''source character set''. In particular, OS-dependent end-of-line indicators are replaced by newline characters.
:The ''source character set'' is a multibyte character set which includes the ''basic source character set'' as a single-byte subset, consisting of the following 96 characters:
:@a@ 5 whitespace characters (space, horizontal tab, vertical tab, form feed, new-line)
:@b@ 10 digit characters from {{c|'0'}} to {{c|'9'}}
:@c@ 52 letters from {{c|'a'}} to {{c|'z'}} and from {{c|'A'}} to {{c|'Z'}}
:@d@ 29 punctuation characters: {{c|_ { } [ ] # ( ) &lt; &gt; % : ; . ? * + - / ^ &amp; {{!}} ~ ! {{=}} , \ &quot; ’}}
@2@ {{rlp|operator_alternative|Trigraph sequences}} are replaced by corresponding single-character representations.

===Phase 2===
@1@ Whenever backslash appears at the end of a line (immediately followed by the newline character), both backslash and newline are deleted, combining two physical source lines into one logical source line. This is a single-pass operation: a line ending in two backslashes followed by an empty line does not combine three lines into one. 
@2@ If a non-empty source file does not end with a newline character after this step (whether it had no newline originally, or it ended with a backslash), the behavior is undefined.

===Phase 3===
@1@ The source file is decomposed into [[c/comment|comments]], sequences of whitespace characters (space, horizontal tab, new-line, vertical tab, and form-feed), and ''preprocessing tokens'', which are the following
:@a@ header names: {{c|&lt;stdio.h&gt;}} or {{c|&quot;myfile.h&quot;}}
:@b@ {{rlp|identifier}}s
:@c@ numbers
:@d@ {{rlp|character constant|character constants}} and {{rlp|string literal}}s
:@e@ operators and punctuators (including {{rlp|operator_alternative|alternative tokens}}), such as {{c|+}}, {{c|&lt;&lt;{{=}}}}, {{c|&lt;%}}, {{c|##}}, or {{c|and}}.
:@f@ individual non-whitespace characters that do not fit in any other category
@2@ Each comment is replaced by one space character
@3@ Newlines are kept, and it's implementation-defined whether non-newline whitespace sequences may be collapsed into single space characters.

===Phase 4===
@1@ [[c/preprocessor|Preprocessor]] is executed.
@2@ Each file introduced with the [[cpp/preprocessor/include|#include]] directive goes through phases 1 through 4, recursively.
@3@ At the end of this phase, all preprocessor directives are removed from the source.

===Phase 5===
@1@ All characters and {{rlp|escape|escape sequences}} in {{rlp|character constant}}s and {{rlp|string literal}}s are converted from ''source character set'' to ''execution character set'' (which may be a multibyte character set such as UTF-8, as long as all 96 characters from the ''basic source character set'' listed in phase 1 have single-byte representations). If the character specified by an escape sequence isn't a member of the execution character set, the result is implementation-defined, but is guaranteed to not be a null (wide) character.

Note: the conversion performed at this stage can be controlled by command line options in some implementations: gcc and clang use {{c|-finput-charset}} to specify the encoding of the source character set, {{c|-fexec-charset}} and {{c|-fwide-exec-charset}} to specify the encodings of the execution character set in the string and character literals {{rev inl|since=c11|that don't have an encoding prefix}}.

===Phase 6===
Adjacent {{rlp|string literal|string literal}}s are concatenated.

===Phase 7===
Compilation takes place: the tokens are syntactically and semantically analyzed and translated as a translation unit.

===Phase 8===
Linking takes place: Translation units and library components needed to satisfy external references are collected into a program image which contains information needed for execution in its execution environment (the OS).

===References===
{{ref std c11}}
{{ref std | section=5.1.1.2 | title=Translation phases | p=10-11}}
{{ref std | section=5.2.1   | title=Character sets     | p=22-24}}
{{ref std | section=6.4     | title=Lexical elements   | p=57-75}}
{{ref std c99}}
{{ref std | section=5.1.1.2 | title=Translation phases | p=9-10}}
{{ref std | section=5.2.1   | title=Character sets     | p=17-19}}
{{ref std | section=6.4     | title=Lexical elements   | p=49-66}}
{{ref std c89}}
{{ref std | section=2.1.1.2 | title=Translation phases}}
{{ref std | section=2.2.1   | title=Character sets}}
{{ref std | section=3.1     | title=Lexical elements}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/translation_phases | Phases of translation}}
{{dsc end}}

[[ar:c/language/translation_phases]]
[[cs:c/language/translation_phases]]
[[de:c/language/translation_phases]]
[[es:c/language/translation_phases]]
[[fr:c/language/translation_phases]]
[[it:c/language/translation_phases]]
[[ja:c/language/translation_phases]]
[[ko:c/language/translation_phases]]
[[pl:c/language/translation_phases]]
[[pt:c/language/translation_phases]]
[[ru:c/language/translation_phases]]
[[tr:c/language/translation_phases]]
[[zh:c/language/translation_phases]]</text>
      <sha1>shq0bze9szyhl8ntg7bk7bmsc270cbn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/type</title>
    <ns>0</ns>
    <id>13744</id>
    <revision>
      <id>87588</id>
      <parentid>87587</parentid>
      <timestamp>2016-09-12T14:02:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 87587 by [[Special:Contributions/88.243.44.12|88.243.44.12]] ([[User talk:88.243.44.12|talk]]) no, incomplete types are object types (by definition</comment>
      <text xml:space="preserve" bytes="9948">{{title|Type}}
{{c/language/basics/navbar}}
&lt;small&gt;(See also {{rlp|arithmetic types}} for the details on most built-in types and [[c/types | the list of type-related utilities]] that are provided by the C library)&lt;/small&gt;

{{rlp|object|Objects}}, {{rlp|functions}}, and {{rlp|expressions}} have a property called ''type'', which determines the interpretation of the binary value stored in an object or evaluated by the expression.

===Type classification===
The C type system consists of the following types:

*the type {{c|void}}
*basic types
:*the type {{c|char}}
:*signed integer types
::*standard: {{c|signed char}}, {{c|short}}, {{c|int}}, {{c|long}}, {{c|long long}} {{rev inl|since=c99}}
::*extended: implementation defined, e.g. {{c|__int128}}
:*unsigned integer types
::*standard: {{c|_Bool}} {{rev inl|since=c99}}, {{c|unsigned char}}, {{c|unsigned short}}, {{c|unsigned int}}, {{c|unsigned long}}, {{c|unsigned long long}} {{rev inl|since=c99}}
::*extended: implementation-defined, e.g. {{c|__uint128}}
:*floating types
::*real floating types: {{c|float}}, {{c|double}}, {{c|long double}}
::*complex types: {{c|float _Complex}}, {{c|double _Complex}}, {{c|long double _Complex}}
::*imaginary types: {{c|float _Imaginary}}, {{c|double _Imaginary}}, {{c|long double _Imaginary}}
* {{rlp|enum|enumerated types}}

* derived types
:* {{rlp|array|array types}}
:* {{rlp|struct|structure types}}
:* {{rlp|union|union types}}
:* {{rlp|functions|function types}}
:* {{rlp|pointer|pointer types}}
:* {{rlp|atomic|atomic types}}

For every type listed above several qualified versions of its type may exist, corresponding to the combinations of one, two, or all three of the {{rlp|const}}, {{rlp|volatile}}, and {{rlp|restrict}} qualifiers (where allowed by the qualifier's semantics).

====Type groups====
* ''object types'': all types that aren't function types
* ''character types'': {{c|char}}, {{c|signed char}}, {{c|unsigned char}}
* ''integer types'': {{c|char}}, signed integer types, unsigned integer types, enumerated types
* ''real types'': integer types and real floating types 
* {{rlp|arithmetic types}}: integer types and floating types
* ''scalar types'': arithmetic types and pointer types
* ''aggregate types'': array types and structure types
* ''derived declarator types'': array types, function types, and pointer types 

===Compatible types===
In a C program, the declarations referring to the same object or function in ''different translation units'' do not have to use the same type. They only have to use sufficiently similar types, formally known as ''compatible types''. Same applies to function calls and lvalue accesses; argument types must be ''compatible'' with parameter types and lvalue expression type must be ''compatible'' with the object type that is accessed.

The types {{tt|T}} and {{tt|U}} are compatible, if
* they are the same type (same name or aliases introduced by a {{rlp|typedef}})
* they are identically cvr-qualified versions of compatible unqualified types
* they are pointer types and are pointing to compatible types
* they are array types, and
:* their element types are compatible, and
:* if both have constant size, that size is the same. Note: arrays of unknown bound are compatible with any array of compatible element type. {{rev inl|since=c99|VLA is compatible with any array of compatible element type.}}
* they are both structure/union/enumeration types, and
:*{{mark c99}}if one is declared with a tag, the other must also be declared with the same tag.
:* if both are completed types, their members must correspond exactly in number, be declared with compatible types, and have matching names.
:* additionally, if they are enumerations, corresponding members must also have the same values.
:* additionally, if they are structures or unions,
::* Corresponding members must be declared in the same order (structures only)
::* Corresponding bit fields must have the same widths.
* one is an enumerated type and the other is that enumeration's underlying type
* they are function types, and
:* their return types are compatible
:* they both use parameter lists, the number of parameters (including the use of the ellipsis) is the same, the corresponding parameters have compatible types
:* one is an old-style (parameter-less) definition, the other has a parameter list, the parameter list does not use an ellipsis and each parameter is compatible (after function parameter type adjustment) with the corresponding old-style parameter after default argument promotions
:* one is an old-style (parameter-less) declaration, the other has a parameter list, the parameter list does not use an ellipsis, and all parameters (after function parameter type adjustment) are unaffected by default argument promotions

The type {{c|char}} is not compatible with {{c|signed char}} and not compatible with {{c|unsigned char}}.

If two declarations refer to the same object or function and do not use compatible types, the behavior of the program is undefined.

{{source|1=
// Translation Unit 1
struct S {int a;};
extern struct S *x;  // compatible with TU2's x, but not with TU3's x
// Translation Unit 2
struct S;
extern struct S *x; // compatible with both x's
// Translation Unit 3
struct S {float a;};
extern struct S *x; // compatible with TU2's x, but not with TU1's x

// the behavior is undefined
}}

{{source|1=
// Translation Unit 1
#include &lt;stdio.h&gt;
struct s {int i;}; // compatible with TU3's s, but not TU2's
extern struct s x = {0}; // compatible with TU3's x
extern void f(void); // compatible with TU2's f
int main()
{
   f();
   return x.i;
}
// Translation Unit 2
struct s {float f;}; // compatible with TU4's s, but not TU1's s
extern struct s y = {3.14}; // compatible with TU4's y
void f() // compatible with TU1's f
{
   return;
}
// Translation Unit 3
struct s {int i;}; // compatible with TU1's s, but not TU2's s
extern struct s x; // compatible with TU1's x
// Translation Unit 4
struct s {float f;}; // compatible with TU2's s, but not TU1's s
extern struct s y; // compatible iwth TU2's y

// the behavior is well-defined: only multiple declarations
// of objects and functions must have compatible types, not the types themselves
}}

Note: C++ has no concept of compatible types. A C program that declares two types that are compatible but not identical in different translation units is not a valid C++ program.

===Composite types===
{{todo}}

===Incomplete types===
An incomplete type is an object type that lacks sufficient information to determine the size of the objects of that type. An incomplete type may be completed at some point in the translation unit.

The following types are incomplete:
* the type {{c|void}}. This type cannot be completed.
* array type of unknown size. It can be completed by a later declaration that specifies the size.
* structure or union type of unknown content. It can be completed by a declaration of the same structure or union that defines its content later in the same scope.

===Type names===
A type may have to be named in context other than the {{rlp|declarations|declaration}}. In these situations, ''type name'' is used, which is, grammatically, exactly the same as a list of ''type-specifiers'' and ''type-qualifiers'', followed by the ''declarator'' (see {{rlp|declarations}}) as would be used to declare a single object or function of this type, except that the identifier is omitted:
{{source|1=
int n; // declaration of an int
sizeof(int); // use of type name

int *a[3]; // declaration of an array of 3 pointers to int
sizeof(int *[3]); // use of type name

int (*p)[3]; // declaration of a pointer to array of 3 int
sizeof(int (*)[3]); // use of type name

int (*a)[*] // declaration of pointer to VLA (in a function parameter)
sizeof(int (*)[*]) // use of type name (in a function parameter)

int *f(void); // declaration of function
sizeof(int *(void)); // use of type name

int (*p)(void); // declaration of pointer to function
sizeof(int (*)(void)); // use of type name

int (*const a[])(unsigned int, ...) = {0}; // array of pointers to functions
sizeof(int (*const [])(unsigned int, ...)); // use of type name
}}

Except the redundant parentheses around the identifier are meaningful in a type-name and represent &quot;function with no parameter specification&quot;:
{{source|1=
int (n); // declares n of type int
sizeof(int ()); // uses type &quot;function returning int&quot;
}}

Type names are used in the following situations:
* {{rlp|cast}}
* {{rlp|sizeof}}
{{rev begin}}
{{rev|since=c99|
* {{rlp|compound literal}}
}}
{{rev|since=c11|
* {{rlp|generic|generic selection}}
* {{rlp|_Alignof|alignof}}
* {{rlp|alignas}}
* {{rlp|atomic|_Atomic}} (when used as a type specifier)
}}
{{rev end}}


A type name may introduce a new type: 
{{source|1=
void* p = (void*)(struct X {int i;} *)0;
// type name &quot;struct X {int i;}*&quot; used in the cast expression
// introduces the new type &quot;struct X&quot;
struct X x = {1}; // struct X is now in scope
}}

===References===
{{ref std c11}}
{{ref std | section=6.2.5 | title=Types | p=39-43}}
{{ref std | section=6.2.6 | title=Representations of types | p=44-46}}
{{ref std | section=6.2.7 | title=Compatible type and composite type | p=47-48}}
{{ref std c99}}
{{ref std | section=6.2.5 | title=Types | p=33-37}}
{{ref std | section=6.2.6 | title=Representations of types | p=37-40}}
{{ref std | section=6.2.7 | title=Compatible type and composite type | p=40-41}}
{{ref std c89}}
{{ref std | section=3.1.2.5 | title=Types}}
{{ref std | section=3.1.2.6 | title=Compatible type and composite type}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/type | Type}}
{{dsc end}}

[[ar:c/language/type]]
[[cs:c/language/type]]
[[de:c/language/type]]
[[es:c/language/type]]
[[fr:c/language/type]]
[[it:c/language/type]]
[[ja:c/language/type]]
[[ko:c/language/type]]
[[pl:c/language/type]]
[[pt:c/language/type]]
[[ru:c/language/type]]
[[tr:c/language/type]]
[[zh:c/language/type]]</text>
      <sha1>hc1w2d81yvwub9tirxdyn6ah6aatz7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/typedef</title>
    <ns>0</ns>
    <id>13183</id>
    <revision>
      <id>79116</id>
      <parentid>77112</parentid>
      <timestamp>2015-06-24T11:30:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 refs</comment>
      <text xml:space="preserve" bytes="4096">{{title|Typedef declaration}}
{{c/language/declarations/navbar}}

The ''typedef declaration'' provides a way to declare an identifier as a type alias, to be used to replace a possibly complex {{rlp|type#Type_names|type name}}

The keyword {{c|typedef}} is used in a {{rlp|declarations|declaration}}, in the grammatical position of a {{rlp|storage duration|storage-class specifier}}, except that it does not affect storage or linkage:

{{source|1=
typedef int int_t; // declares int_t to be an alias for the type int
typedef char char_t, *char_p, (*fp)(void); // declares char_t to be an alias for char
                                           // char_p to be an alias for char*
                                           // fp to be an alias for char(*)(void)
}}

===Explanation===
If a {{rlp|declarations|declaration}} uses {{c|typedef}} as storage-class specifier, every declarator in it defines an identifier as an alias to the type specified. Since only one storage-class specifier is permitted in a declaration, typedef declaration cannot be {{rlp|storage duration|static or extern}}.

typedef declaration does not introduce a distinct type, it only establishes a synonym for an existing type, thus typedef names are {{rlp|type#Compatible_types|compatible}} with the types they alias. Typedef names share the {{rlp|name space}} with ordinary identifiers such as enumerators, variables and function.

{{rev begin}}
{{rev|since=c99|
A typedef for a VLA can only appear at block scope. The length of the array is evaluated each time the flow of control passes over the typedef declaration, as opposed to the declaration of the array itself:
{{source|1=
void copyt(int n)
{
    typedef int B[n]; // B is a VLA, its size is n, evaluated now
    n += 1;
    B a; // size of a is n from before +=1
    int b[n]; // a and b are different sizes
    for (int i = 1; i &lt; n; i++)
        a[i-1] = b[i];
}
}}
}}
{{rev end}}

===Notes===
typedef name may be an {{rlp|type#Incomplete_types|incomplete type}}, which may be completed as usual:
{{source|1=
typedef int A[]; // A is int[]
A a = {1, 2}, b = {3,4,5}; // type of a is int[2], type of b is int[3]
}}

typedef declarations are often used to inject names from the tag {{rlp|name space}} into the ordinary name space:
{{source|1=
typedef struct tnode tnode; // tnode in ordinary name space
                            // is an alias to tnode in tag name space
struct tnode {
    int count;
    tnode *left, *right; // same as struct tnode *left, *right;
}; // now tnode is also a complete type
tnode s, *sp; // same as struct tnode s, *sp;
}}

They can even avoid using the tag name space at all:
{{source|1=
typedef struct { double hi, lo; } range;
range z, *zp;
}}

Typedef names are also commonly used to simplify the syntax of complex declarations:
{{source|1=
// array of 5 pointers to functions returning pointers to arrays of 3 ints
int (*(*callbacks[5])(void))[3]

// same with typedefs
typedef int arr_t[3]; // arr_t is array of 3 int
typedef arr_t* (*fp)(void); // pointer to function returning arr_t*
fp callbacks[5];
}}

Libraries often expose system-dependent or configuration-dependent types as typedef names, to present a consistent interface to the users or to other library components:
{{source|1=
#if defined(_LP64)
typedef int     wchar_t;
#else
typedef long    wchar_t;
#endif
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.8 | title=Type definitions | p=137-138}}
{{ref std c99}}
{{ref std | section=6.7.7 | title=Type definitions | p=123-124}}
{{ref std c89}}
{{ref std | section=3.5.6 | title=Type definitions}}
{{ref std end}}

===Keywords===
{{ltt|c/keyword/typedef}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/typedef | Typedef declaration}}
{{dsc end}}

[[ar:c/language/typedef]]
[[cs:c/language/typedef]]
[[de:c/language/typedef]]
[[es:c/language/typedef]]
[[fr:c/language/typedef]]
[[it:c/language/typedef]]
[[ja:c/language/typedef]]
[[ko:c/language/typedef]]
[[pl:c/language/typedef]]
[[pt:c/language/typedef]]
[[ru:c/language/typedef]]
[[tr:c/language/typedef]]
[[zh:c/language/typedef]]</text>
      <sha1>l6mgmiyx5dnaqtw11fnnx1q6oe5rjqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/types</title>
    <ns>0</ns>
    <id>9384</id>
    <redirect title="c/language/type" />
    <revision>
      <id>74328</id>
      <parentid>43920</parentid>
      <timestamp>2014-12-12T17:44:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>redirect to c/language/type</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[c/language/type]]</text>
      <sha1>ij8hqeempl7euu1syhe9binladcn7qn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/union</title>
    <ns>0</ns>
    <id>13165</id>
    <revision>
      <id>77579</id>
      <parentid>76210</parentid>
      <timestamp>2015-03-30T02:28:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>oh, looks like C unions actually guarantee reinterpreting</comment>
      <text xml:space="preserve" bytes="4948">{{title|Union declaration}}
{{c/language/declarations/navbar}}

A union is a type consisting of a sequence of members whose storage overlaps (as opposed to struct, which is a type consisting of a sequence of members whose storage is allocated in an ordered sequence). The value of at most one of the members can be stored in a union at any one time.

The {{rlp|declarations|type specifier}} for a union is identical to the [[c/language/struct | {{tt|struct}}]] type specifier except for the keyword used:

===Syntax===
{{sdsc begin}}
{{sdsc |num=1| {{ttb|union}} {{spar|name}}{{mark optional}} {{ttb|{ }} {{spar|struct-declaration-list}} {{ttb|} }}
}}
{{sdsc |num=2| {{ttb|union}} {{spar|name}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|name}} | the name of the union that's being defined}}
{{par | {{spar|struct-declaration-list}} | any number of variable declarations, bit field declarations, and static assert declarations. Members of incomplete type and members of function type are not allowed.}}
{{par end}}

===Explanation===
The union is only as big as necessary to hold its largest member (additional unnamed trailing padding may also be added). The other members are allocated in the same bytes as part of that largest member. 

A pointer to a union can be cast to a pointer to each of its members (if a union has bit field members, the pointer to a union can be cast to the pointer to the bit field's underlying type). Likewise, a pointer to any member of a union can be cast to a pointer to the enclosing union. 

If the member used to access the contents of a union is not the same as the member last used to store a value, the object representation of the value that was stored is reinterpreted as an object representation of the new type (this is known as ''type punning''). If the size of the new type is larger than the size of the last-written type, the contents of the excess bytes are unspecified (and may be a trap representation) &lt;!-- DR 283 made this explicit, as of C99 TC2--&gt;

{{rev begin}}
{{rev|since=c11|
Similar to struct, an unnamed member of a union whose type is a union without {{spar|name}} is known as ''anonymous union''. Every member of an anonymous union is considered to be a member of the enclosing struct or union. This applies recursively if the enclosing struct or union is also anonymous.
{{source|1=
struct v {
   union { // anonymous union
      struct { int i, j; }; // anonymous structure
      struct { long k, l; } w;
   };
   int m;
} v1;

v1.i = 2;   // valid
v1.k = 3;   // invalid: inner structure is not anonymous
v1.w.k = 5; // valid
}}

Similar to struct, the behavior of the program is undefined if union is defined without any named members (including those obtained via anonymous nested structs or unions).
}}
{{rev end}}

===Keywords===
{{ltt|c/keyword/union}}

===Notes===
See {{rlp|struct initialization}} for the rules about initialization of structs and unions.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdint.h&gt;
#include &lt;assert.h&gt;

int main(void)
{
    union S {
        uint32_t u32;
        uint16_t u16[2];
        uint8_t  u8;
    } s = {0x12345678}; // s.u32 is now the active member
    printf(&quot;Union S has size %zu and holds %x\n&quot;, sizeof s, s.u32);
    s.u16[0] = 0x0011;  // s.u16 is now the active member
    // reading from s.u32 or from s.u8 reinterprets the object representation
//  printf(&quot;s.u8 is now %x\n&quot;, s.u8); // unspecified, typically 11 or 00
//  printf(&quot;s.u32 is now %x\n&quot;, s.u32); // unspecified, typically 12340011 or 00115678

    // pointers to all members of a union compare equal to themselves and the union
    assert((uint8_t*)&amp;s == &amp;s.u8);

    // this union has 3 bytes of trailing padding
    union pad {
       char  c[5];   // occupies 5 bytes
       float f;      // occupies 4 bytes, imposes alignment 4
    } p = {.f = 1.23}; // the size is 8 to satisfy float's alignment
    printf(&quot;size of union of char[5] and float is %zu\n&quot;, sizeof p);
}
 | output=
Union S has size 4 and holds 12345678
size of union of char[5] and float is 8
}}

Each member is allocated as if it were the only member of the union, which is why {{tt|s.c}} in the example above aliases the first byte of {{tt|s.s[0]}}.

===References===
{{ref std c11}}
{{ref std | section=6.7.2.1 | title=Structure and union specifiers | p=112-117}}
{{ref std c99}}
{{ref std | section=6.7.2.1 | title=Structure and union specifiers | p=101-104}}
{{ref std c89}}
{{ref std | section=3.5.2.1 | title=Structure and union specifiers}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/union | Union declaration}}
{{dsc end}}

[[ar:c/language/union]]
[[cs:c/language/union]]
[[de:c/language/union]]
[[es:c/language/union]]
[[fr:c/language/union]]
[[it:c/language/union]]
[[ja:c/language/union]]
[[ko:c/language/union]]
[[pl:c/language/union]]
[[pt:c/language/union]]
[[ru:c/language/union]]
[[tr:c/language/union]]
[[zh:c/language/union]]</text>
      <sha1>3rchhla3fm2mxbowqhz5anzm7nmxlp9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/value category</title>
    <ns>0</ns>
    <id>13874</id>
    <revision>
      <id>85245</id>
      <parentid>85230</parentid>
      <timestamp>2016-04-12T11:32:24Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted &quot;parenthesized expression&quot;; see 6.5.1/5</comment>
      <text xml:space="preserve" bytes="6266">{{title|Value categories}}
{{c/language/expressions/navbar}}

Each {{rlp|expressions|expression}} in C (an operator with its arguments, a function call, a constant, a variable name, etc) is characterized by two independent properties: a {{rlp|type#Type|type}} and a {{rlp|expressions#General|value category}}.

Every expression belongs to one of three value categories: lvalue, non-lvalue object (rvalue), and function designator.

===Lvalue expressions===
Lvalue expression is any expression with {{rlp|type#Type_groups|object type}} other than the type {{tt|void}}, which potentially designates an {{rlp|object}} (the behavior is undefined if an lvalue does not actually designate an object when it is evaluated). In other words, lvalue expression evaluates to the ''object identity''. The name of this value category (&quot;left value&quot;) is historic and reflects the use of lvalue expressions as the left-hand operand of the assignment operator in the CPL programming language.

Lvalue expressions can be used in the following ''lvalue contexts'':
* as the operand of the {{rlp|operator_member_access|address-of operator}} (except if the lvalue designates a {{rlp|bit field}} or was declared {{rlp|storage duration|register}}).
* as the operand of the pre/post {{rlp|operator_incdec|increment and decrement operators}}.
* as the left-hand operand of the {{rlp|operator_member_access|member access}} (dot) operator.
* as the left-hand operand of the {{rlp|operator_assignment|assignment and compound assignment}} operators.

If an lvalue expression is used in any context other than {{rlp|sizeof}}, {{rlp|_Alignof}}, or the operators listed above, non-array lvalues of any complete type undergo {{rlp|conversion|lvalue conversion}}, which models the memory load of the value of the object from its location. Similarly, array lvalues undergo {{rlp|conversion|array-to-pointer conversion}} when used in any context other than {{tt|sizeof}}, {{tt|_Alignof}}, address-of operator, or array initialization from a string literal.

The semantics of {{rlp|const}}/{{rlp|volatile}}/{{rlp|restrict}}-qualifiers and {{rlp|atomic}} types apply to lvalues only (lvalue conversion strips the qualifiers and removes atomicity).

The following expressions are lvalues:
* identifiers, including function parameters, provided they were declared as designating objects (and not functions)
* {{rlp|string literal}}s
* {{mark c99}} {{rlp|compound literal}}s
* parenthesized expression if the unparenthesized expression is an lvalue
* the result of a member access (dot) operator if its left-hand argument is lvalue
* the result of a member access through pointer {{ttb|-&gt;}} operator
* the result of the indirection (unary {{ttb|*}}) operator applied to a pointer to object
* the result of the subscription operator ({{ttb|[]}})

====Modifiable lvalue expressions====
A ''modifiable lvalue'' is any lvalue expression of complete, non-array type which is not {{rlp|const}}-qualified, and, if it's a struct/union, has no members that are {{rlp|const}}-qualified, recursively.

Only modifiable lvalue expressions may be used as arguments to increment/decrement, and as left-hand arguments of assignment and compound assignment operators.

===Non-lvalue object expressions===
Colloquially known as ''rvalues'', non-lvalue object expressions are the expressions of object types that do not designate objects, but rather values that have no object identity or storage location. The address of a non-lvalue object expression cannot be taken.

The following expressions are non-lvalue object expressions:
* integer, character, and floating constants
* all operators not specified to return lvalues, including
:* any function call expression
:* any cast expression (note that compound literals, which look similar, are lvalues)
:* member access operator (dot) applied to a non-lvalue structure/union, {{c|f().x}}, {{c|(x,s1).a}}, {{c|s1{{=}}s2).m}}
:* all arithmetic, relational, logical, and bitwise operators
:* increment and decrement operators (note: pre- forms are lvalues in C++)
:* assignment and compound assignment operators (note: they are lvalues in C++)
:* the conditional operator (note: may be lvalue in C++)
:* the comma operator (note: may be lvalue in C++)
:* the address-of operator, even it if is neutralized by being applied to the result of the unary {{ttb|*}} operator

As a special case, expressions of type {{tt|void}} are assumed to be non-lvalue object expressions that yield a value which has no representation and requires no storage.

Note that a struct/union rvalue that has a member (possibly nested) of array type does in fact designate an object with {{rlp|lifetime|temporary lifetime}}. This object can be accessed through lvalue expressions that form by indexing the array member or by indirection through the pointer obtained by array-to-pointer conversion of the array member.

===Function designator expression===
A function designator (the identifier introduced by a {{rlp|function declaration}}) is an expression of function type. When used in any context other than the address-of operator, {{rlp|sizeof}}, and {{rlp|_Alignof}} (the last two generate compile errors when applied to functions), the function designator is always converted to a non-lvalue pointer to function. Note that the function-call operator is defined for pointers to functions and not for function designators themselves.

===References===
{{ref std c11}}
{{ref std | section=6.3.2.1 | title=Lvalues, arrays, and function designators | p=54-55}}
{{ref std c99}}
{{ref std | section=6.3.2.1 | title=Lvalues, arrays, and function designators | p=46}}
{{ref std c89}}
{{ref std | section=3.2.2.1 | title=Lvalues and function designators}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/value_category | Value categories}}
{{dsc end}}

[[ar:c/language/value_category]]
[[cs:c/language/value_category]]
[[de:c/language/value_category]]
[[es:c/language/value_category]]
[[fr:c/language/value_category]]
[[it:c/language/value_category]]
[[ja:c/language/value_category]]
[[ko:c/language/value_category]]
[[pl:c/language/value_category]]
[[pt:c/language/value_category]]
[[ru:c/language/value_category]]
[[tr:c/language/value_category]]
[[zh:c/language/value_category]]</text>
      <sha1>8fq4my276w9x5k691zap4ipko9m3uik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/variadic</title>
    <ns>0</ns>
    <id>13990</id>
    <revision>
      <id>87774</id>
      <parentid>79110</parentid>
      <timestamp>2016-10-01T09:52:06Z</timestamp>
      <contributor>
        <ip>95.24.129.228</ip>
      </contributor>
      <text xml:space="preserve" bytes="3459">{{title|Variadic arguments}}
{{c/language/functions/navbar}}

Variadic functions are functions that may be called with different number of arguments. 

Only new-style (prototyped)  {{rlp|function declaration}}s may be variadic. This is indicated by the parameter of the form {{c|...}} which must appear last in the parameter list and must follow at least one named parameter.

{{source|1=
//New-style declaration
int printx(const char* fmt, ...); // function declared this way
printx(&quot;hello world&quot;); // may be called with one
printx(&quot;a=%d b=%d&quot;, a, b); // or more arguments

// int printy(..., const char* fmt); // Error: ... must be the last
// int printz(...); // Error: ... must follow at least one named parameter
}}

At the {{rlp|operator other#Function_call|function call}}, each argument that is a part of the variable argument list undergoes special implicit conversions known as {{rlp|conversion#Default_argument_promotions|default argument promotions}}.

Within the body of a function that uses variadic arguments, the values of these arguments may be accessed using the [[c/variadic|&lt;stdarg.h&gt; library facilities]]:
{{dsc begin}}
{{dsc header | stdarg.h}}
{{dsc inc | c/variadic/dsc va_start}}
{{dsc inc | c/variadic/dsc va_arg}}
{{dsc inc | c/variadic/dsc va_copy}}
{{dsc inc | c/variadic/dsc va_end}}
{{dsc inc | c/variadic/dsc va_list}}
{{dsc end}}

===Notes===
Although old-style (prototype-less) {{rlp|function declaration}}s allow the subsequent function calls to use any number of arguments, they are not allowed to be variadic (as of C89). The definition of such function must specify a fixed number of parameters and cannot use the {{tt|stdarg.h}} macros.
{{source|1=
//old-style declaration
int printx(); // function declared this way
printx(&quot;hello world&quot;); // may be called with one
printx(&quot;a=%d b=%d&quot;, a, b); // or more arguments
// the behavior of one of these calls is undefined, depending on
// whether the function is defined to take 1 or 3 parameters
}}

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;stdarg.h&gt;

void tlog(const char* fmt,...)
{
    char msg[50];
    strftime(msg, sizeof msg, &quot;%T&quot;, localtime(&amp;(time_t){time(NULL)}));
    printf(&quot;[%s] &quot;, msg);
    va_list args;
    va_start(args, fmt);
    vprintf(fmt, args);
    va_end(args);
}

int main(void)
{
   tlog(&quot;logging %d %d %d...\n&quot;, 1, 2, 3);
}

|output=
[10:21:38] logging 1 2 3...
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.6.3/9 | title=Function declarators (including prototypes) | p=133}}
{{ref std | section=7.16      | title=Variable arguments &lt;stdarg.h&gt; | p=269-272}}
{{ref std c99}}
{{ref std | section=6.7.5.3/9 | title=Function declarators (including prototypes) | p=119}}
{{ref std | section=7.15      | title=Variable arguments &lt;stdarg.h&gt; | p=249-252}} 
{{ref std c89}}
{{ref std | section=3.5.4.3/5 | title=Function declarators (including prototypes)}}
{{ref std | section=4.8       | title=VARIABLE ARGUMENTS &lt;stdarg.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/variadic_arguments | Variadic arguments}}
{{dsc end}}

[[ar:c/language/variadic]]
[[cs:c/language/variadic]]
[[de:c/language/variadic]]
[[es:c/language/variadic]]
[[fr:c/language/variadic]]
[[it:c/language/variadic]]
[[ja:c/language/variadic]]
[[ko:c/language/variadic]]
[[pl:c/language/variadic]]
[[pt:c/language/variadic]]
[[ru:c/language/variadic]]
[[tr:c/language/variadic]]
[[zh:c/language/variadic]]</text>
      <sha1>shgls763qgj7xbc6qpbim1puxu5pni3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/volatile</title>
    <ns>0</ns>
    <id>13832</id>
    <revision>
      <id>85105</id>
      <parentid>79115</parentid>
      <timestamp>2016-04-01T10:32:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>clear up &quot;cannot be reordered&quot; to mention sequence points</comment>
      <text xml:space="preserve" bytes="6453">{{title|volatile type qualifier}}
{{c/language/declarations/navbar}}

Each individual type in the C {{rlp|type|type system}} has several ''qualified'' versions of that type, corresponding to one, two, or all three of the {{rlp|const}}, ''volatile'', and, for pointers to object types, {{rlp|restrict}} qualifiers. This page describes the effects of the ''volatile'' qualifier.

Every access (both read and write) made through an lvalue expression of volatile-qualified type is considered an observable side effect for the purpose of optimization and is evaluated strictly according to the rules of the abstract machine (that is, all writes are completed at some time before the next sequence point). This means that within a single thread of execution, a volatile access cannot be optimized out or reordered relative to another visible side effect that is separated by a {{rlp|eval order|sequence point}} from the volatile access.

A cast of a non-volatile value to a volatile type has no effect. To access a non-volatile object using volatile semantics, its address must be cast to a pointer-to-volatile and then the access must be made through that pointer.

Any attempt to read or write to an object whose type is volatile-qualified through a non-volatile lvalue results in undefined behavior:
{{source|1=
volatile int n = 1; // object of volatile-qualified type
int* p = (int*)&amp;n;
int val = *p; // undefined behavior
}}

A member of a volatile-qualified structure or union type acquires the qualification of the type it belongs to (both when accessed using the {{ttb|.}} operator or the {{ttb|-&gt;}} operator):
{{source|1=
struct s { int i; const int ci; } s;
// the type of s.i is int, the type of s.ci is const int
volatile struct s vs;
// the types of vs.i and vs.ci are volatile int and const volatile int
}}

If an array type is declared with the volatile type qualifier (through the use of {{rlp|typedef}}), the array type is not volatile-qualified, but its element type is. If a function type is declared with the volatile type qualified (through the use of {{rlp|typedef}}), the behavior is undefined.
{{source|1=
typedef int A[2][3];
volatile A a = {{4, 5, 6}, {7, 8, 9}}; // array of array of volatile int
int* pi = a[0]; // Error: a[0] has type volatile int*
}}

{{rev begin}}
{{rev|since=c99|
In a function declaration, the keyword {{tt|volatile}} may appear inside the square brackets that are used to declare an array type of a function parameter. It qualifies the pointer type to which the array type is transformed.

The following two declarations declare the same function:
{{source|1=
void f(double x[volatile], const double y[volatile]);
void f(double * volatile x, const double * volatile y);
}}
}}
{{rev end}}

A pointer to a non-volatile type can be implicitly converted to a pointer to the volatile-qualified version of the same or {{rlp|compatible type}}. The reverse conversion can be performed with a cast expression.
{{source|1=
int* p = 0;
volatile int* vp = p; // OK: adds qualifiers (int to volatile int)
p = vp; // Error: discards qualifiers (volatile int to int)
p = (int*)vp; // OK: cast
}}
Note that pointer to pointer to {{tt|T}} is not convertible to pointer to pointer to {{tt|volatile T}}; for two types to be compatible, their qualifications must be identical:
{{source|1=
char *p = 0;
volatile char **vpp = &amp;p; // Error: char* and volatile char* are not compatible types
char * volatile *pvp = &amp;p; // OK, adds qualifiers (char* to char*volatile)
}}

===Uses of volatile===
@1@ {{rlp|static storage duration|static}} {{tt|volatile}} objects model memory-mapped I/O ports, and {{tt|static}} {{tt|const}} {{tt|volatile}} objects model memory-mapped input ports, such as a real-time clock:
{{source|1=
volatile short *ttyport = (volatile short*)TTYPORT_ADDR;
for(int i = 0; i &lt; N; ++i)
    *ttyport = a[i]; // *ttyport is an lvalue of type volatile short
}}
@2@ {{tt|static}} {{tt|volatile}} objects of type {{lc|sig_atomic_t}} are used for communication with {{lc|signal}} handlers.
@3@ {{tt|volatile}} variables that are local to a function that contains an invocation of the {{lc|setjmp}} macro are the only local variables guaranteed to retain their values after {{lc|longjmp}} returns.
@4@ In addition, volatile variables can be used to disable certain forms of optimization, e.g. to disable dead store elimination or constant folding for microbenchmarks.

Note that volatile variables are not suitable for communication between threads; they do not offer atomicity, synchronization, or memory ordering. A read from a volatile variable that is modified by another thread without synchronization or concurrent modification from two unsynchronized threads is undefined behavior due to a data race.

===Keywords===

{{ltt|cpp/keyword/volatile}}

===Example===
{{example | demonstrates the use of volatile to disable optimizations
 |code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    clock_t t = clock();
    double d;
    for (int n=0; n&lt;10000; ++n)
       for (int m=0; m&lt;10000; ++m)
           d += d*n*m; // reads and writes to a non-volatile 
    printf(&quot;Modified a non-volatile variable 100m times. &quot;
           &quot;Time used: %.2f seconds\n&quot;,
           (double)(clock() - t)/CLOCKS_PER_SEC);

    t = clock();
    volatile double vd;
    for (int n=0; n&lt;10000; ++n)
       for (int m=0; m&lt;10000; ++m)
           vd += vd*n*m; // reads and writes to a volatile 
    printf(&quot;Modified a volatile variable 100m times. &quot;
           &quot;Time used: %.2f seconds\n&quot;,
           (double)(clock() - t)/CLOCKS_PER_SEC);
}
 |p=true
 |output=
Modified a non-volatile variable 100m times. Time used: 0.00 seconds
Modified a volatile variable 100m times. Time used: 0.79 seconds
}}

===References===
{{ref std c11}}
{{ref std | section=6.7.3 | title=Type qualifiers | p=121-123}}
{{ref std c99}}
{{ref std | section=6.7.3 | title=Type qualifiers | p=108-110}}
{{ref std c89}}
{{ref std | section=3.5.3 | title=Type qualifiers}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc see cpp | cpp/language/cv | cv (const and volatile) type qualifiers}}
{{dsc end}}

[[ar:c/language/volatile]]
[[cs:c/language/volatile]]
[[de:c/language/volatile]]
[[es:c/language/volatile]]
[[fr:c/language/volatile]]
[[it:c/language/volatile]]
[[ja:c/language/volatile]]
[[ko:c/language/volatile]]
[[pl:c/language/volatile]]
[[pt:c/language/volatile]]
[[ru:c/language/volatile]]
[[tr:c/language/volatile]]
[[zh:c/language/volatile]]</text>
      <sha1>18vjyx15ipbp0o4hlyy38ig4dy1xj1c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/language/while</title>
    <ns>0</ns>
    <id>6041</id>
    <revision>
      <id>87455</id>
      <parentid>87454</parentid>
      <timestamp>2016-08-24T20:21:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>one param for the new note</comment>
      <text xml:space="preserve" bytes="3419">{{title|while loop}}
{{c/language/statements/navbar}}
Executes a {{spar|statement}} repeatedly, until the value of {{spar|expression}} becomes equal to zero. The test takes place before each iteration.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|while (}} {{spar|expression}} {{ttb|)}} {{spar|statement}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|expression}} | any {{rlp|expressions|expression}} of {{rlp|type#Type_groups|scalar type}}. This expression is evaluated before each iteration, and if it compares equal to zero, the loop is exited.}}
{{par | {{spar|statement}} | any {{rlp|statements|statement}}, typically a compound statement, which serves as the body of the loop }}
{{par end}}

===Explanation===
A {{tt|while}} statement causes the {{spar|statement}} (also called ''the loop body'') to be executed repeatedly until the {{spar|expression}} (also called ''controlling expression'') compares equal to zero. The repetition occurs regardless of whether the loop body is entered normally or by a {{rlp|goto}} into the middle of {{spar|statement}}.

The evaluation of {{spar|expression}} takes place before each execution of {{spar|statement}} (unless entered by a goto). If the controlling expression needs to be evaluated after the loop body, the {{rlp|do|do-while loop}} may be used.

If the execution of the loop needs to be terminated at some point, {{rlp |break| break statement}} can be used as a terminating statement. 

If the execution of the loop needs to be continued at the end of the loop body, {{rlp|continue | continue statement}} can be used as a shortcut.

{{c/language/forward_progress_note|while}}

{{rev begin}}
{{rev|since=c99|
As with all other selection and iteration statements, the while statement establishes {{rlp|scope|block scope}}: any identifier introduced in the {{spar|expression}} goes out of scope after the {{spar|statement}}.
}}
{{rev end}}

===Notes===
Boolean and pointer expressions are often used as loop controlling expressions. The boolean value {{tt|false}} and the null pointer value of any pointer type compare equal to zero.

===Keywords===

{{ltt|c/keyword/while}}

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
enum { SIZE = 8 };
int main(void)
{
    // trivial example
    int array[SIZE], n = 0;
    while(n &lt; SIZE) array[n++] = rand() % 2;
    puts(&quot;Array filled!&quot;);
    n = 0;
    while(n &lt; SIZE) printf(&quot;%d &quot;, array[n++]);
    printf(&quot;\n&quot;);

    // classic strcpy() implementation
    // (copies a null-terminated string from src to dst)
    char src[]=&quot;Hello, world&quot;, dst[sizeof src], *p=dst, *q=src;
    while(*p++ = *q++)
        ; // null statement
    puts(dst);
}
 | output=
Array filled!
1 0 1 1 1 1 0 0 
Hello, world
}}

===References===
{{ref std c11}}
{{ref std | section=6.8.5.1 | title=The while statement | p=151}}
{{ref std c99}}
{{ref std | section=6.8.5.1 | title=The while statement | p=136}}
{{ref std c89}}
{{ref std | section=3.6.5.1 | title=The while statement}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/language/while | while loop}}
{{dsc end}}

[[ar:c/language/while]]
[[cs:c/language/while]]
[[de:c/language/while]]
[[es:c/language/while]]
[[fr:c/language/while]]
[[it:c/language/while]]
[[ja:c/language/while]]
[[ko:c/language/while]]
[[pl:c/language/while]]
[[pt:c/language/while]]
[[ru:c/language/while]]
[[tr:c/language/while]]
[[zh:c/language/while]]</text>
      <sha1>9yzubs2nbxgiavvled59a7bt4us67y3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/links</title>
    <ns>0</ns>
    <id>9324</id>
    <revision>
      <id>90042</id>
      <parentid>87873</parentid>
      <timestamp>2017-02-02T21:30:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix link rot for the System V ABI</comment>
      <text xml:space="preserve" bytes="1252">{{title|Useful resources}}
===C FAQs===
*[http://c-faq.com/ C FAQ] - Answers to the frequently asked questions from the Usenet newsgroup comp.lang.c

===C Language and library references===
*[http://www.open-std.org/jtc1/sc22/wg14/ JTC1/SC22/WG14] - the C Standards Committee, includes draft C language standards, proposals, and defect reports

===C ABIs===
*[https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI System V ABI] for x86-64, Intel386, and IA MCU architectures
*[http://www.nxp.com/files/32bit/doc/app_note/PPCEABI.pdf PowerPC EABI] for 32-bit embedded processors
*[ftp://www.sourceware.org/pub/binutils/ppc-docs/ppc-poweropen/ PowerOpen ABI] for older PowerPC platforms
*[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html ARM ABI] for ARM architecture

===Related standards===
*[http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html POSIX.1-2008] - The operating system API of the Unix-compatible systems

===Might be also useful===
* [[c/links/libs | List of C libraries]]

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/links | External Links}}
{{dsc end}}

[[de:c/links]]
[[es:c/links]]
[[fr:c/links]]
[[it:c/links]]
[[ja:c/links]]
[[pt:c/links]]
[[ru:c/links]]
[[zh:c/links]]</text>
      <sha1>lj6let225kuraw4e0vh8eb35z3kw7ix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/links/libs</title>
    <ns>0</ns>
    <id>9325</id>
    <revision>
      <id>87703</id>
      <parentid>87695</parentid>
      <timestamp>2016-09-26T20:04:34Z</timestamp>
      <contributor>
        <ip>95.235.202.49</ip>
      </contributor>
      <comment>Changing libcaos homepahe</comment>
      <text xml:space="preserve" bytes="4550">{{title|A list of open source C libraries}}
&lt;div style=&quot;border: 1px solid silver; border-radius: 5px; padding: 0.5em;&quot;&gt;
The objective of this page is to build a comprehensible list of open source C libraries, so that when one needs an implementation of particular functionality, one need not waste time searching on Google.
 
If you know a library that might be useful to others, please add a link to it here. There are no restrictions on what can be included except that it must be possible to download the source of the library.

The page is provided 'as is' - with the hope of being useful, but without any warranties. Outdated, misleading or wrong links might appear here. If you've noticed one of these, it would be great if you fixed the error.
&lt;/div&gt;

==Operating system==
; Access control
*{{lib| acl | http://savannah.nongnu.org/projects/acl/ }}
*{{lib| apparmor | http://apparmor.net/ }}

; Extended attributes
*{{lib| attr | http://savannah.nongnu.org/projects/attr/ }}

==Graphic user interface==

*{{lib|IUP|http://www.tecgraf.puc-rio.br/iup/}}
*{{lib| tiny file dialogs | http://tinyfiledialogs.sourceforge.net | a single C cross-platform file (no init, no main loop, 6 modal function calls)}}

==Gtk+ widgets==
*{{lib| gtk+ | http://www.gtk.org/ }}
*{{lib| gtkhtml | http://www.gnome.org/projects/evolution/ }}
*{{lib| appmenu-gtk | https://launchpad.net/appmenu-gtk }}
*{{lib| ghex | http://live.gnome.org/Ghex }}
*{{lib| gtkspell | http://gtkspell.sourceforge.net/ }}
*{{lib| gtksourceview | http://projects.gnome.org/gtksourceview/ }}
*{{lib| gtkhotkey | https://launchpad.net/gtkhotkey }}
*{{lib| gucharmap | http://live.gnome.org/Gucharmap }}
*{{lib| goocanvas | http://live.gnome.org/GooCanvas }}

==Audio==
; Codecs
*{{lib| aften | http://aften.sourceforge.net/ }}
*{{lib| faad2 | http://www.audiocoding.com/ }}
*{{lib| wavpack | http://www.wavpack.com }}

; Infrastructure
*{{lib| alsa-lib | http://www.alsa-project.org/ }}
; CD
*{{lib| cdparanoia | http://www.xiph.org/paranoia/ }}

;Speech synthesis
*{{lib| espeak | http://espeak.sourceforge.net/ }}--
*{{lib| flite | http://www.speech.cs.cmu.edu/flite }} --

==Video==
; Codecs
*{{lib| schroedinger | https://slackbuilds.org/repository/14.1/multimedia/schroedinger/ }}--
*{{lib| video4linux | http://linuxtv.org/downloads/v4l-utils/ }}--

==Files==
*{{lib| gmime | http://spruce.sourceforge.net/gmime/ }}
*{{lib| caos | http://matteodelseppia.github.io/libcaos/ }}

==Maths==
*{{lib| gsl | http://www.gnu.org/software/gsl }}

; Integer Multi-Dimensional Interpolation
*{{lib| argyll | http://www.argyllcms.com/ }}

; Linear algebra
*{{lib| atlas | http://math-atlas.sourceforge.net/ }}
*{{lib| blas | http://www.netlib.org/blas/ }}
*{{lib| eigen | http://eigen.tuxfamily.org/index.php }}

; Finance
*{{lib| ta-lib | http://sourceforge.net/projects/ta-lib/ }}

; FFT
*{{lib| fftw3 | http://fftw.org }}

; Multiprecision
*{{lib| gmp | http://gmplib.org/ }}

; Signal Processing
*{{lib| liquid-dsp | http://liquidsdr.org/ }}
*{{lib| vsipl | http://www.omg.org/hot-topics/vsipl.htm/ }}
*{{lib| vsipl++ | http://www.omg.org/hot-topics/vsipl.htm/ }}

==Graphics==
*{{lib| cairo | http://cairographics.org/ }}
*{{lib| babl | http://gegl.org/babl/ }}
*{{lib| SIGIL (Sound, Input, and Graphics Integration Library) | http://www.libsigil.com/ | extremely easy-to-use, cross-platform library for 2D graphics, input, and audio}}

==Interprocess==
*{{lib| dbus-glib | http://www.freedesktop.org/wiki/Software/DBusBindings }}
*{{lib| dbus | http://dbus.freedesktop.org/ }}
*{{lib| dee | https://launchpad.net/dee }}

==Databases==
*{{lib| berkeley db | http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/overview/index.html }}
*{{lib| lmdb | http://symas.com/mdb/ }}

==Communications==
*{{lib| libcurl | http://curl.haxx.se/libcurl/ }}
*{{lib| zeromq | http://zeromq.org/ }}
*{{lib| cpp-netlib | http://cpp-netlib.org/}}

==Compression==
*{{lib| bzip2 | http://www.bzip.org/ }} 
*{{lib| zlib | http://zlib.net/ }}

==libc==
*{{lib| bstrlib | http://bstring.sourceforge.net/ }}
*{{lib| eglibc | http://www.eglibc.org }}

==XML==
*{{lib| expat | http://expat.sourceforge.net }}

==Javascript==
*{{lib| gjs | http://live.gnome.org/Gjs }}

==Metrics==
*{{lib| edlib | http://github.com/martinsos/edlib }}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/links/libs | Non-ANSI/ISO Libraries}}
{{dsc end}}

[[de:c/links/libs]]
[[es:c/links/libs]]
[[fr:c/links/libs]]
[[it:c/links/libs]]
[[ja:c/links/libs]]
[[pt:c/links/libs]]
[[ru:c/links/libs]]
[[zh:c/links/libs]]</text>
      <sha1>sg20zm21d8ufj52pl2x9wkoyakdqdqx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/locale</title>
    <ns>0</ns>
    <id>5924</id>
    <revision>
      <id>78967</id>
      <parentid>78910</parentid>
      <timestamp>2015-06-13T12:11:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs to future library directions</comment>
      <text xml:space="preserve" bytes="1068">{{title|Localization support}}
{{c/locale/navbar}}

{{dsc begin}}
{{dsc header | locale.h }}
{{dsc inc | c/locale/dsc setlocale}}
{{dsc inc | c/locale/dsc localeconv}}
{{dsc inc | c/locale/dsc lconv}}
{{dsc h2 | Locale categories}}
{{dsc inc | c/locale/dsc LC_categories}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.11 | title=Localization &lt;locale.h&gt; | p=223-230}}
{{ref std | section=7.31.6 | title=Localization &lt;locale.h&gt; | p=455}}
{{ref std c99}}
{{ref std | section=7.11 | title=Localization &lt;locale.h&gt; | p=204-211}}
{{ref std | section=7.26.5 | title=Localization &lt;locale.h&gt; | p=401}}
{{ref std c89}}
{{ref std | section=4.4  | title=LOCALIZATION &lt;locale.h&gt;}}
{{ref std | section=4.13.3 | title=Localization &lt;locale.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/locale |Localization library}}
{{dsc end}}

[[ar:c/locale]]
[[cs:c/locale]]
[[de:c/locale]]
[[es:c/locale]]
[[fr:c/locale]]
[[it:c/locale]]
[[ja:c/locale]]
[[ko:c/locale]]
[[pl:c/locale]]
[[pt:c/locale]]
[[ru:c/locale]]
[[tr:c/locale]]
[[zh:c/locale]]</text>
      <sha1>5gh6juoqz2byfu25su5gta6j4w8iifg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/locale/LC categories</title>
    <ns>0</ns>
    <id>6151</id>
    <revision>
      <id>78914</id>
      <parentid>77505</parentid>
      <timestamp>2015-06-11T19:59:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+c89 ref</comment>
      <text xml:space="preserve" bytes="3053">{{title|&lt;small&gt;LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME&lt;/small&gt;}}
{{c/locale/navbar}}
{{dcl begin}}
{{dcl header|locale.h}}
{{dcl |
#define LC_ALL      /*implementation defined*/
}}
{{dcl |
#define LC_COLLATE  /*implementation defined*/
}}
{{dcl |
#define LC_CTYPE    /*implementation defined*/
}}
{{dcl |
#define LC_MONETARY /*implementation defined*/
}}
{{dcl |
#define LC_NUMERIC  /*implementation defined*/
}}
{{dcl |
#define LC_TIME     /*implementation defined*/
}}
{{dcl end}}

Each of the above macro constants expand to integer constant expressions with distinct values that are suitable for use as the first argument of {{lc|setlocale}}.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|LC_ALL}}      | selects the entire C locale}}
{{dsc | {{tt|LC_COLLATE}}  | selects the collation category of the C locale}}
{{dsc | {{tt|LC_CTYPE}}    | selects the character classification category of the C locale}}
{{dsc | {{tt|LC_MONETARY}} | selects the monetary formatting category of the C locale}}
{{dsc | {{tt|LC_NUMERIC}}  | selects the numeric formatting category of the C locale}}
{{dsc | {{tt|LC_TIME}}     | selects the time formatting category of the C locale}}
{{dsc end}}

Additional macro constants, with names that begin with {{tt|LC_}} followed by at least one uppercase letter, may be defined in {{tt|locale.h}}. For example, the POSIX specification requires LC_MESSAGES (which controls, among other things, {{lc|perror}} and {{lc|strerror}}), and the GNU C library additionally defines LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, and LC_IDENTIFICATION.

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;time.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.UTF-8&quot;); // the C locale will be the UTF-8 enabled English
    setlocale(LC_NUMERIC, &quot;de_DE&quot;);   // decimal dot will be German
    setlocale(LC_TIME, &quot;ja_JP&quot;);      // date/time formatting will be Japanese
    wchar_t str[100];
    time_t t = time(NULL);
    wcsftime(str, 100, L&quot;%A %c&quot;, localtime(&amp;t));
    wprintf(L&quot;Number: %.2f\nDate: %Ls\n&quot;, 3.14, str);
}
 | output=
Number: 3,14
Date: 月曜日 2011年12月19日 18時04分40秒
}}

===References===
{{ref std c11}}
{{ref std | section=7.11/3 | title=Localization &lt;locale.h&gt; | p=224}}
{{ref std c99}}
{{ref std | section=7.11/3 | title=Localization &lt;locale.h&gt; | p=205}}
{{ref std c89}}
{{ref std | section=4.4    | title=LOCALIZATION &lt;locale.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/locale/dsc setlocale}}
{{dsc see cpp | cpp/locale/LC_categories | locale categories | nomono=true}}
{{dsc end}}

[[ar:c/locale/LC_categories]]
[[cs:c/locale/LC_categories]]
[[de:c/locale/LC_categories]]
[[es:c/locale/LC_categories]]
[[fr:c/locale/LC_categories]]
[[it:c/locale/LC_categories]]
[[ja:c/locale/LC_categories]]
[[ko:c/locale/LC_categories]]
[[pl:c/locale/LC_categories]]
[[pt:c/locale/LC_categories]]
[[ru:c/locale/LC_categories]]
[[tr:c/locale/LC_categories]]
[[zh:c/locale/LC_categories]]</text>
      <sha1>4aptjwbkfknm4158jqta8i5exv3iyps</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/locale/lconv</title>
    <ns>0</ns>
    <id>6149</id>
    <revision>
      <id>89618</id>
      <parentid>89615</parentid>
      <timestamp>2017-01-22T18:57:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 89615 by [[Special:Contributions/160.176.59.6|160.176.59.6]] ([[User talk:160.176.59.6|talk]]) std says nonnegative</comment>
      <text xml:space="preserve" bytes="6883">{{c/title | lconv}}
{{c/locale/navbar}}
{{dcl begin}}
{{dcl header | locale.h}}
{{dcl | 1=
struct lconv;
}}
{{dcl end}}

The struct {{tt|lconv}} contains numeric and monetary formatting rules as defined by a C locale. Objects of this struct may be obtained with {{lc|localeconv}}. The members of {{tt|lconv}} are values of type {{c|char}} and of type {{c|char*}}. Each {{c|char*}} member except {{tt|decimal_point}} may be pointing at a null character (that is, at an empty C-string). The members of type {{c|char}} are all non-negative numbers, any of which may be {{lc|CHAR_MAX}} if the corresponding value is not available in the current C locale.

===Member objects===
====Non-monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} decimal_point | the character used as the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} thousands_sep | the character used to separate groups of digits before the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} grouping | a string whose elements indicate the sizes of digit groups}}
{{dsc end}}
====Monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} mon_decimal_point | the character used as the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} mon_thousands_sep | the character used to separate groups of digits before the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} mon_grouping | a string whose elements indicate the sizes of digit groups}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} positive_sign | a string used to indicate non-negative monetary quantity}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} negative_sign | a string used to indicate negative monetary quantity}}
{{dsc end}}
====Local monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} currency_symbol | the symbol used for currency in the current C locale}}
{{dsc mem obj | nolink=true | {{dsc small|char}} frac_digits | the number of digits after the decimal point to display in a monetary quantity}}
{{dsc mem obj | nolink=true | {{dsc small|char}} p_cs_precedes | {{c|1}} if currency_symbol is placed before non-negative value, {{c|0}} if after}}
{{dsc mem obj | nolink=true | {{dsc small|char}} n_cs_precedes | {{c|1}} if currency_symbol is placed before negative value, {{c|0}} if after}}
{{dsc mem obj | nolink=true | {{dsc small|char}} p_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|positive_sign}}, and the non-negative monetary value}}
{{dsc mem obj | nolink=true | {{dsc small|char}} n_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|negative_sign}}, and the negative monetary value}}
{{dsc mem obj | nolink=true | {{dsc small|char}} p_sign_posn | indicates the position of {{tt|positive_sign}} in a non-negative monetary value}}
{{dsc mem obj | nolink=true | {{dsc small|char}} n_sign_posn | indicates the position of {{tt|negative_sign}} in a negative monetary value}}
{{dsc end}}
====International monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} int_curr_symbol | the string used as international currency name in the current C locale }}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_frac_digits | the number of digits after the decimal point to display in an international monetary quantity}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_p_cs_precedes | {{c|1}} if currency_symbol is placed before non-negative international monetary value, {{c|0}} if after| notes={{mark c99}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_n_cs_precedes | {{c|1}} if currency_symbol is placed before negative international monetary value, {{c|0}} if after| notes={{mark c99}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_p_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|positive_sign}}, and the non-negative international monetary value| notes={{mark c99}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_n_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|negative_sign}}, and the negative international monetary value| notes={{mark c99}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_p_sign_posn | indicates the position of {{tt|positive_sign}} in a non-negative international monetary value| notes={{mark c99}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_n_sign_posn | indicates the position of {{tt|negative_sign}} in a negative international monetary value| notes={{mark c99}}}}
{{dsc end}}


The characters of the C-strings pointed to by {{tt|grouping}} and {{tt|mon_grouping}} are interpreted according to their numeric values. When the terminating {{c|'\0'}} is encountered, the last value seen is assumed to repeat for the remainder of digits. If {{lc|CHAR_MAX}} is encountered, no further digits are grouped. the typical grouping of three digits at a time is {{c|&quot;\003&quot;}}.

The values of {{tt|p_sep_by_space}}, {{tt|n_sep_by_space}}, {{tt|int_p_sep_by_space}}, {{tt|int_n_sep_by_space}} are interpreted as follows:
{{dsc begin}}
{{dsc|0|no space separates the currency symbol and the value}}
{{dsc|1|sign sticks to the currency symbol, value is separated by a space}}
{{dsc|2|sign sticks to the value. Currency symbol is separated by a space}}
{{dsc end}}

The values of {{tt|p_sign_posn}}, {{tt|n_sign_posn}}, {{tt|int_p_sign_posn}}, {{tt|int_n_sign_posn}} are interpreted as follows:
{{dsc begin}}
{{dsc|0|parentheses around the value and the currency symbol are used to represent the sign}}
{{dsc|1|sign before the value and the currency symbol}}
{{dsc|2|sign after the value and the currency symbol}}
{{dsc|3|sign before the currency symbol}}
{{dsc|4|sign after the currency symbol}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;locale.h&gt;
#include &lt;stdio.h&gt;
 
int main(void)
{
    setlocale(LC_ALL, &quot;ja_JP.UTF-8&quot;);
    struct lconv *lc = localeconv();
    printf(&quot;Japanese currency symbol: %s(%s)\n&quot;, lc-&gt;currency_symbol, lc-&gt;int_curr_symbol);
}
|p=true
| output=
Japanese currency symbol: ￥(JPY )
}}

===References===
{{ref std c11}}
{{ref std | section=7.11/2 | title=Localization &lt;locale.h&gt; | p=223}}
{{ref std c99}}
{{ref std | section=7.11/2 | title=Localization &lt;locale.h&gt; | p=204}}
{{ref std c89}}
{{ref std | section=4.4    | title=LOCALIZATION &lt;locale.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/locale/dsc localeconv}}
{{dsc see cpp | cpp/locale/lconv}}
{{dsc end}}

[[ar:c/locale/lconv]]
[[cs:c/locale/lconv]]
[[de:c/locale/lconv]]
[[es:c/locale/lconv]]
[[fr:c/locale/lconv]]
[[it:c/locale/lconv]]
[[ja:c/locale/lconv]]
[[ko:c/locale/lconv]]
[[pl:c/locale/lconv]]
[[pt:c/locale/lconv]]
[[ru:c/locale/lconv]]
[[tr:c/locale/lconv]]
[[zh:c/locale/lconv]]</text>
      <sha1>hq441caen534pto2f4hqtkfabb9uzxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/locale/localeconv</title>
    <ns>0</ns>
    <id>6150</id>
    <revision>
      <id>78912</id>
      <parentid>77206</parentid>
      <timestamp>2015-06-11T19:52:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+c89 ref</comment>
      <text xml:space="preserve" bytes="1431">{{c/title|localeconv}}
{{c/locale/navbar}}
{{dcl begin}}
{{dcl header|locale.h}}
{{dcl |
lconv* localeconv();
}}
{{dcl end}}

The {{tt|localeconv}} function obtains a pointer to a static object of type {{lc|lconv}}, which represents numeric and monetary formatting rules of the current C locale.

===Parameters===
(none)

===Return value===
pointer to the current {{lc|lconv}} object. 

===Notes===
Modifying the object references through the returned pointer is undefined behavior.

{{tt|localeconv}} modifies a static object, calling it from different threads without synchronization is undefined behavior.

===Example===
{{todo}}

===References===
{{ref std c11}}
{{ref std | section=7.11.2.1 | title=The localeconv function | p=225-230}}
{{ref std c99}}
{{ref std | section=7.11.2.1 | title=The localeconv function | p=206-211}}
{{ref std c89}}
{{ref std | section=4.4.2.1  | title=The localeconv function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/locale/dsc setlocale}}
{{dsc inc | c/locale/dsc lconv}}
{{dsc see cpp | cpp/locale/localeconv}}
{{dsc end}}

[[ar:c/locale/localeconv]]
[[cs:c/locale/localeconv]]
[[de:c/locale/localeconv]]
[[es:c/locale/localeconv]]
[[fr:c/locale/localeconv]]
[[it:c/locale/localeconv]]
[[ja:c/locale/localeconv]]
[[ko:c/locale/localeconv]]
[[pl:c/locale/localeconv]]
[[pt:c/locale/localeconv]]
[[ru:c/locale/localeconv]]
[[tr:c/locale/localeconv]]
[[zh:c/locale/localeconv]]</text>
      <sha1>et0t4gygzii7jfrlx3ilg3dy0rzh0to</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/locale/setlocale</title>
    <ns>0</ns>
    <id>6152</id>
    <revision>
      <id>78911</id>
      <parentid>77205</parentid>
      <timestamp>2015-06-11T19:44:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3961">{{c/title|setlocale}}
{{c/locale/navbar}}
{{dcl begin}}
{{dcl header|locale.h}}
{{dcl |
char* setlocale( int category, const char* locale);
}}
{{dcl end}}

The {{tt|setlocale}} function installs the specified system locale or its portion as the new C locale. The modifications remain in effect and influences the execution of all locale-sensitive C library functions until the next call to {{tt|setlocale}}. If {{tt|locale}} is a null pointer, {{tt|setlocale}} queries the current C locale without modifying it.

===Parameters===
{{par begin}}
{{par | category | locale category identifier, one of the {{rlp|LC_categories|LC_xxx}} macros. May be null.}}
{{par | locale | system-specific locale identifier. Can be {{c|&quot;&quot;}} for the user-preferred locale or {{c|&quot;C&quot;}} for the minimal locale }}
{{par end}}

===Return value===
pointer to a narrow null-terminated string identifying the C locale after applying the changes, if any, or null pointer on failure.

A copy of the returned string along with the category used in this call to {{tt|setlocale}} may be used later in the program to restore the locale back to the state at the end of this call.

===Notes===
During program startup, the equivalent of {{c|setlocale(LC_ALL, &quot;C&quot;);}} is executed before any user code is run.

Although the return type is {{c|char*}}, modifying the pointed-to characters is undefined behavior.

Because {{tt|setlocale}} modifies global state which affects execution of locale-dependent functions, it is undefined behavior to call it from one thread, while another thread is executing any of the following functions: {{lc|fprintf}}, {{lc|isprint}}, {{lc|iswdigit}}, {{lc|localeconv}}, {{lc|tolower}}, {{lc|fscanf}}, {{lc|ispunct}}, {{lc|iswgraph}}, {{lc|mblen}}, {{lc|toupper}}, {{lc|isalnum}}, {{lc|isspace}}, {{lc|iswlower}}, {{lc|mbstowcs}}, {{lc|towlower}}, {{lc|isalpha}}, {{lc|isupper}}, {{lc|iswprint}}, {{lc|mbtowc}}, {{lc|towupper}}, {{lc|isblank}}, {{lc|iswalnum}}, {{lc|iswpunct}}, {{lc|setlocale}}, {{lc|wcscoll}}, {{lc|iscntrl}}, {{lc|iswalpha}}, {{lc|iswspace}}, {{lc|strcoll}}, {{lc|wcstod}}, {{lc|isdigit}}, {{lc|iswblank}}, {{lc|iswupper}}, {{lc|strerror}}, {{lc|wcstombs}}, {{lc|isgraph}}, {{lc|iswcntrl}}, {{lc|iswxdigit}}, {{lc|strtod}}, {{lc|wcsxfrm}}, {{lc|islower}}, {{lc|iswctype}}, {{lc|isxdigit}}.

POSIX also defines a locale named &quot;POSIX&quot;, which is always accessible and is exactly equivalent to the default minimal &quot;C&quot; locale. 

POSIX also specifies that the returned pointer, not just the contents of the pointed-to string, may be invalidated by subsequent calls to setlocale.

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;time.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    // the C locale will be UTF-8 enabled English;
    // decimal dot will be German
    // date and time formatting will be Japanese
    setlocale(LC_ALL, &quot;en_US.UTF-8&quot;);
    setlocale(LC_NUMERIC, &quot;de_DE&quot;);
    setlocale(LC_TIME, &quot;ja_JP&quot;);
    
    wchar_t str[100];
    time_t t = time(NULL);
    wcsftime(str, 100, L&quot;%A %c&quot;, localtime(&amp;t));
    wprintf(L&quot;Number: %.2f\nDate: %Ls\n&quot;, 3.14, str);
}   
 | p = true
 | output=
Number: 3,14
Date: 木曜日 2014年11月06日 09時58分56秒
}}

===References===
{{ref std c11}}
{{ref std | section=7.11.1.1 | title=The setlocale function | p=224-225}}
{{ref std c99}}
{{ref std | section=7.11.1.1 | title=The setlocale function | p=205-206}}
{{ref std c89}}
{{ref std | section=4.4.1.1  | title=The setlocale function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/locale/dsc LC_categories}}
{{dsc see cpp | cpp/locale/setlocale}}
{{dsc end}}

[[ar:c/locale/setlocale]]
[[cs:c/locale/setlocale]]
[[de:c/locale/setlocale]]
[[es:c/locale/setlocale]]
[[fr:c/locale/setlocale]]
[[it:c/locale/setlocale]]
[[ja:c/locale/setlocale]]
[[ko:c/locale/setlocale]]
[[pl:c/locale/setlocale]]
[[pt:c/locale/setlocale]]
[[ru:c/locale/setlocale]]
[[tr:c/locale/setlocale]]
[[zh:c/locale/setlocale]]</text>
      <sha1>dp9bu3e4usnozwpzc6wnkpx4gi5f8mj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/memory</title>
    <ns>0</ns>
    <id>5743</id>
    <revision>
      <id>85680</id>
      <parentid>76294</parentid>
      <timestamp>2016-05-02T13:49:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+templates -misplaced refs</comment>
      <text xml:space="preserve" bytes="614">{{title|C memory management library}}
{{c/memory/navbar}}

===Functions===
{{dsc begin}}
{{dsc header | stdlib.h}}
{{dsc inc | c/memory/dsc malloc}}
{{dsc inc | c/memory/dsc calloc}}
{{dsc inc | c/memory/dsc realloc}}
{{dsc inc | c/memory/dsc free}}
{{dsc inc | c/memory/dsc aligned_alloc}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/memory/c | C memory management library}}
{{dsc end}}

[[ar:c/memory]]
[[cs:c/memory]]
[[de:c/memory]]
[[es:c/memory]]
[[fr:c/memory]]
[[it:c/memory]]
[[ja:c/memory]]
[[ko:c/memory]]
[[pl:c/memory]]
[[pt:c/memory]]
[[ru:c/memory]]
[[tr:c/memory]]
[[zh:c/memory]]</text>
      <sha1>il5hn2ctub8qkzk7n5yf7uytagi2zw2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/memory/aligned alloc</title>
    <ns>0</ns>
    <id>13032</id>
    <revision>
      <id>88742</id>
      <parentid>88741</parentid>
      <timestamp>2016-12-08T15:15:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="3584">{{c/title|aligned_alloc}}
{{c/memory/navbar}}
{{ddcl | header=stdlib.h | since=c11 | 
void *aligned_alloc( size_t alignment, size_t size );
}}

Allocate {{tt|size}} bytes of uninitialized storage whose alignment is specified by {{tt|alignment}}. The {{tt|size}} parameter must be an integral multiple of {{tt|alignment}}.

{{tt|aligned_alloc}} is thread-safe: it behaves as though only accessing the memory locations visible through its argument, and not any static storage.

A previous call to {{lc|free}} or {{lc|realloc}} that deallocates a region of memory ''synchronizes-with'' a call to {{lc|aligned_alloc}} that allocates the same or a part of the same region of memory. This synchronization occurs after any access to the memory by the deallocating function and before any access to the memory by {{tt|aligned_alloc}}. There is a single total order of all allocation and deallocation functions operating on each particular region of memory.

=== Parameters ===
{{par begin}}
{{par | alignment | specifies the alignment.  Must be a valid alignment supported by the implementation.}}
{{par | size | number of bytes to allocate.  An integral multiple of {{tt|alignment}}}}
{{par end}}

===Return value===
On success, returns the pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|free()}} or {{tt|realloc()}}.

On failure, returns a null pointer.

=== Notes ===
Passing a {{tt|size}} which is not an integral multiple of {{tt|alignment}} or a {{tt|alignment}} which is not valid or not supported by the implementation causes the function to fail and return a null pointer (C11, as published, specified undefined behavior in this case, this was corrected by DR 460). Removal of size restrictions to make it possible to allocate small objects at restrictive alignment boundaries (similar to {{ltt|c/language/_Alignas|alignas}}) has been proposed by [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2072.htm n2072].

As an example of the &quot;supported by the implementation&quot; requriement, POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html posix_memalign] accepts any {{tt|alignment}} that is a power of two and a multiple of {{tt|sizeof(void *)}}, and POSIX-based implementations of {{tt|aligned_alloc}} inherit this requirements.

Regular {{lc|malloc}} aligns memory suitable for any object type (which, in practice, means that it is aligned to {{c|alignof(max_align_t)}}). This function is useful for over-aligned allocations, such as to SSE, cache line, or VM page boundary.

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    int *p1 = malloc(10*sizeof *p1);
    printf(&quot;default-aligned addr:   %p\n&quot;, (void*)p1);
    free(p1);

    int *p2 = aligned_alloc(1024, 1024*sizeof *p2);
    printf(&quot;1024-byte aligned addr: %p\n&quot;, (void*)p2);
    free(p2);
}
|p=true
|output=
default-aligned addr:   0x1e40c20
1024-byte aligned addr: 0x1e41000
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.3.1 | title=The aligned_alloc function | p=347-348}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/memory/c/aligned_alloc}}
{{dsc end}}

[[ar:c/memory/aligned_alloc]]
[[cs:c/memory/aligned_alloc]]
[[de:c/memory/aligned_alloc]]
[[es:c/memory/aligned_alloc]]
[[fr:c/memory/aligned_alloc]]
[[it:c/memory/aligned_alloc]]
[[ja:c/memory/aligned_alloc]]
[[ko:c/memory/aligned_alloc]]
[[pl:c/memory/aligned_alloc]]
[[pt:c/memory/aligned_alloc]]
[[ru:c/memory/aligned_alloc]]
[[tr:c/memory/aligned_alloc]]
[[zh:c/memory/aligned_alloc]]</text>
      <sha1>o2s87f42t0uzsmoxkj81r969qa8ty1l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/memory/calloc</title>
    <ns>0</ns>
    <id>5748</id>
    <revision>
      <id>87261</id>
      <parentid>76300</parentid>
      <timestamp>2016-08-05T10:39:28Z</timestamp>
      <contributor>
        <ip>84.216.21.11</ip>
      </contributor>
      <comment>&quot;bits&quot; is correct, but since you are not specifying the number of bits to allocate, &quot;bytes&quot; makes more sense.</comment>
      <text xml:space="preserve" bytes="3391">{{c/title|calloc}}
{{c/memory/navbar}}
{{ddcl | header=stdlib.h |
void* calloc( size_t num, size_t size );
}}

Allocates memory for an array of {{tt|num}} objects of size {{tt|size}} and initializes all bytes in the allocated storage to zero. 

If allocation succeeds, returns a pointer to the lowest (first) byte in the allocated memory block that is suitably aligned for any object type.

If {{tt|size}} is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage)

{{rev begin}}
{{rev|since=c11|
{{tt|calloc}} is thread-safe: it behaves as though only accessing the memory locations visible through its argument, and not any static storage.

A previous call to {{lc|free}} or {{lc|realloc}} that deallocates a region of memory ''synchronizes-with'' a call to {{lc|calloc}} that allocates the same or a part of the same region of memory. This synchronization occurs after any access to the memory by the deallocating function and before any access to the memory by {{tt|calloc}}. There is a single total order of all allocation and deallocation functions operating on each particular region of memory.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | num | number of objects}}
{{par | size | size of each object}}
{{par end}}

===Return value===
On success, returns the pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|free()}} or {{tt|realloc()}}.

On failure, returns a null pointer.

===Notes===
Due to the alignment requirements, the number of allocated bytes is not necessarily equal to {{tt|num*size}}.

Initialization to all bits zero does not guarantee that a floating-point or a pointer would be initialized to 0.0 and the null pointer value, respectively (although that is true on all common platforms)

Originally (in C89), support for zero size was added to accommodate code such as 
{{source|1=
OBJ *p = calloc(0, sizeof(OBJ)); // &quot;zero-length&quot; placeholder
...
while(1) { 
    p = realloc(p, c * sizeof(OBJ)); // reallocations until size settles
    ... // code that may change c or break out of loop
}
}}

===Example===
{{example| code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    int *p1 = calloc(4, sizeof(int));    // allocate and zero out an array of 4 int
    int *p2 = calloc(1, sizeof(int[4])); // same, naming the array type directly
    int *p3 = calloc(4, sizeof *p3);     // same, without repeating the type name

    if(p2) {
        for(int n=0; n&lt;4; ++n) // print the array
            printf(&quot;p2[%d] == %d\n&quot;, n, p2[n]);
    }

    free(p1);
    free(p2);
    free(p3);
}
 | output=
p2[0] == 0
p2[1] == 0
p2[2] == 0
p2[3] == 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.3.2 | title=The calloc function | p=348}}
{{ref std c99}}
{{ref std | section=7.20.3.1 | title=The calloc function | p=313}}
{{ref std c89}}
{{ref std | section=4.10.3.1 | title=The calloc function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/memory/c/calloc}}
{{dsc end}}

[[ar:c/memory/calloc]]
[[cs:c/memory/calloc]]
[[de:c/memory/calloc]]
[[es:c/memory/calloc]]
[[fr:c/memory/calloc]]
[[it:c/memory/calloc]]
[[ja:c/memory/calloc]]
[[ko:c/memory/calloc]]
[[pl:c/memory/calloc]]
[[pt:c/memory/calloc]]
[[ru:c/memory/calloc]]
[[tr:c/memory/calloc]]
[[zh:c/memory/calloc]]</text>
      <sha1>9yl49cwriyzxhsy6wjrnke56piv1ube</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/memory/free</title>
    <ns>0</ns>
    <id>5749</id>
    <revision>
      <id>76298</id>
      <parentid>76259</parentid>
      <timestamp>2015-02-15T11:42:02Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>language links</comment>
      <text xml:space="preserve" bytes="3031">{{c/title|free}}
{{c/memory/navbar}}
{{ddcl | header=stdlib.h |
void free( void* ptr );
}}

Deallocates the space previously allocated by {{lc|malloc()}}, {{lc|calloc()}}{{rev inl|since=c11|, {{lc|aligned_alloc}},}} or {{lc|realloc()}}.

If {{tt|ptr}} is a null pointer, the function does nothing.

The behavior is undefined if the value of {{tt|ptr}} does not equal a value returned earlier by {{lc|malloc()}}, {{lc|calloc()}}, {{lc|realloc()}}{{rev inl|since=c11|, or {{lc|aligned_alloc()}}}}.

The behavior is undefined if the memory area referred to by {{tt|ptr}} has already been deallocated, that is, {{tt|free()}} or {{lc|realloc()}} has already been called with {{tt|ptr}} as the argument and no calls to {{lc|malloc()}}, {{lc|calloc()}} or {{lc|realloc()}} resulted in a pointer equal to {{tt|ptr}} afterwards.

The behavior is undefined if after {{tt|free()}} returns, an access is made through the pointer {{tt|ptr}} (unless another allocation function happened to result in a pointer value equal to {{tt|ptr}})

{{rev begin}}
{{rev|since=c11|
{{tt|free}} is thread-safe: it behaves as though only accessing the memory locations visible through its argument, and not any static storage.

A call to {{lc|free}} that deallocates a region of memory ''synchronizes-with'' a call to any subsequent allocation function that allocates the same or a part of the same region of memory. This synchronization occurs after any access to the memory by the deallocating function and before any access to the memory by the allocation function. There is a single total order of all allocation and deallocation functions operating on each particular region of memory.
}}
{{rev end}}
===Parameters===
{{par begin}}
{{par | ptr | pointer to the memory to deallocate}}
{{par end}}

===Return value===
(none)

===Notes===
The function accepts (and does nothing with) the null pointer to reduce the amount of special-casing. Whether allocation succeeds or not, the pointer returned by an allocation function can be passed to {{tt|free()}}

===Example===
{{example| code=
#include &lt;stdlib.h&gt;

int main(void)
{
    int *p1 = malloc(10*sizeof *p1);
    free(p1); // every allocated pointer must be freed

    int *p2 = calloc(10, sizeof *p2);
    int *p3 = realloc(p2, 1000*sizeof *p3);
    if(p3) // p3 not null means p2 was freed by realloc
       free(p3);
    else // p3 null means p2 was not freed
       free(p2);
}
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.3.3 | title=The free function | p=348}}
{{ref std c99}}
{{ref std | section=7.20.3.2 | title=The free function | p=313}}
{{ref std c89}}
{{ref std | section=4.10.3.2 | title=The free function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/memory/c/free}}
{{dsc end}}

[[ar:c/memory/free]]
[[cs:c/memory/free]]
[[de:c/memory/free]]
[[es:c/memory/free]]
[[fr:c/memory/free]]
[[it:c/memory/free]]
[[ja:c/memory/free]]
[[ko:c/memory/free]]
[[pl:c/memory/free]]
[[pt:c/memory/free]]
[[ru:c/memory/free]]
[[tr:c/memory/free]]
[[zh:c/memory/free]]</text>
      <sha1>k4bp5w2rhrpc0wfv0m18wsjmhxzs2vr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/memory/malloc</title>
    <ns>0</ns>
    <id>5750</id>
    <revision>
      <id>90060</id>
      <parentid>86012</parentid>
      <timestamp>2017-02-04T13:34:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note that the non-null pointer result of malloc(0) needs to go to free (as valgrind reminds me)</comment>
      <text xml:space="preserve" bytes="2748">{{c/title|malloc}}
{{c/memory/navbar}}
{{ddcl | header=stdlib.h |
void* malloc( size_t size );
}}

Allocates {{tt|size}} bytes of uninitialized storage.

If allocation succeeds, returns a pointer to the lowest (first) byte in the allocated memory block that is suitably aligned for any object type.

If {{tt|size}} is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage, but has to be passed to {{lc|free}}).

{{rev begin}}
{{rev|since=c11|
{{tt|malloc}} is thread-safe: it behaves as though only accessing the memory locations visible through its argument, and not any static storage.

A previous call to {{lc|free}} or {{lc|realloc}} that deallocates a region of memory ''synchronizes-with'' a call to {{lc|malloc}} that allocates the same or a part of the same region of memory. This synchronization occurs after any access to the memory by the deallocating function and before any access to the memory by {{tt|malloc}}. There is a single total order of all allocation and deallocation functions operating on each particular region of memory.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | size | number of bytes to allocate }}
{{par end}}

===Return value===
On success, returns the pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|free()}} or {{tt|realloc()}}.

On failure, returns a null pointer.

===Example===
{{example|code=
#include &lt;stdio.h&gt;   
#include &lt;stdlib.h&gt; 

int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // allocates enough for an array of 4 int
    int *p2 = malloc(sizeof(int[4])); // same, naming the type directly
    int *p3 = malloc(4*sizeof *p3);   // same, without repeating the type name

    if(p1) {
        for(int n=0; n&lt;4; ++n) // populate the array
            p1[n] = n*n;
        for(int n=0; n&lt;4; ++n) // print it back out
            printf(&quot;p1[%d] == %d\n&quot;, n, p1[n]);
    }

    free(p1);
    free(p2);
    free(p3);
}
 | output=
p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.3.4 | title=The malloc function | p=349}}
{{ref std c99}}
{{ref std | section=7.20.3.3 | title=The malloc function | p=314}}
{{ref std c89}}
{{ref std | section=4.10.3.3 | title=The malloc function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/memory/c/malloc}}
{{dsc end}}

[[ar:c/memory/malloc]]
[[cs:c/memory/malloc]]
[[de:c/memory/malloc]]
[[es:c/memory/malloc]]
[[fr:c/memory/malloc]]
[[it:c/memory/malloc]]
[[ja:c/memory/malloc]]
[[ko:c/memory/malloc]]
[[pl:c/memory/malloc]]
[[pt:c/memory/malloc]]
[[ru:c/memory/malloc]]
[[tr:c/memory/malloc]]
[[zh:c/memory/malloc]]</text>
      <sha1>mw7ppzri8jav9pwu9x4ynx0o5g4oaz9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/memory/realloc</title>
    <ns>0</ns>
    <id>5751</id>
    <revision>
      <id>89927</id>
      <parentid>89926</parentid>
      <timestamp>2017-01-30T19:53:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 89926 by [[Special:Contributions/183.206.173.95|183.206.173.95]] ([[User talk:183.206.173.95|talk]]) 7.22.3/1 says &quot;If the size of the space requested is zero, the behavior is implementation-defined:&quot;</comment>
      <text xml:space="preserve" bytes="4427">{{c/title|realloc}}
{{c/memory/navbar}}
{{ddcl | header=stdlib.h |
void *realloc( void *ptr, size_t new_size );
}}

Reallocates the given area of memory. It must be previously allocated by {{lc|malloc()}}, {{lc|calloc()}} or {{tt|realloc()}} and not yet freed with a call to {{lc|free}} or {{tt|realloc}}. Otherwise, the results are undefined.

The reallocation is done by either:
@a@ expanding or contracting the existing area pointed to by {{tt|ptr}}, if possible. The contents of the area remain unchanged up to the lesser of the new and old sizes. If the area is expanded, the contents of the new part of the array are undefined. 
@b@ allocating a new memory block of size {{tt|new_size}} bytes, copying memory area with size equal the lesser of the new and the old sizes, and freeing the old block.

If there is not enough memory, the old memory block is not freed and null pointer is returned.

If {{tt|ptr}} is {{lc|NULL}}, the behavior is the same as calling {{lc|malloc}}({{tt|new_size}}).

If {{tt|new_size}} is zero, the behavior is implementation defined (null pointer may be returned (in which case the old memory block may or may not be freed), or some non-null pointer may be returned that may not be used to access storage).

{{rev begin}}
{{rev|since=c11|
{{tt|realloc}} is thread-safe: it behaves as though only accessing the memory locations visible through its argument, and not any static storage.

A previous call to {{lc|free}} or {{tt|realloc}} that deallocates a region of memory ''synchronizes-with'' a call to any allocation function, including {{tt|realloc}} that allocates the same or a part of the same region of memory. This synchronization occurs after any access to the memory by the deallocating function and before any access to the memory by {{tt|realloc}}. There is a single total order of all allocation and deallocation functions operating on each particular region of memory.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | ptr | pointer to the memory area to be reallocated}}
{{par | new_size | new size of the array}}
{{par end}}

===Return value===
On success, returns the pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|free()}} or {{tt|realloc()}}. The original pointer {{tt|ptr}} is invalidated and any access to it is undefined behavior (even if reallocation was in-place).

On failure, returns a null pointer. The original pointer {{tt|ptr}} remains valid and may need to be deallocated with {{lc|free()}} or {{tt|realloc()}}.

===Notes===
Support for zero size is deprecated as of C11 DR 400.

Originally (in C89), support for zero size was added to accommodate code such as 
{{source|1=
OBJ *p = calloc(0, sizeof(OBJ)); // &quot;zero-length&quot; placeholder
...
while(1) { 
    p = realloc(p, c * sizeof(OBJ)); // reallocations until size settles
    ... // code that may change c or break out of loop
}
}}

===Example===
{{example | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    int *pa = malloc(10 * sizeof *pa); // allocate an array of 10 int
    if(pa) {
        printf(&quot;%zu bytes allocated. Storing ints: &quot;, 10*sizeof(int));
        for(int n = 0; n &lt; 10; ++n)
            printf(&quot;%d &quot;, pa[n] = n);
    }

    int *pb = realloc(pa, 1000000 * sizeof *pb); // reallocate array to a larger size
    if(pb) {
        printf(&quot;\n%zu bytes allocated, first 10 ints are: &quot;, 1000000*sizeof(int));
        for(int n = 0; n &lt; 10; ++n)
            printf(&quot;%d &quot;, pb[n]); // show the array
        free(pb);
    } else { // if realloc failed, the original pointer needs to be freed
        free(pa);
    }
}
 | output=
40 bytes allocated. Storing ints: 0 1 2 3 4 5 6 7 8 9
4000000 bytes allocated, first 10 ints are: 0 1 2 3 4 5 6 7 8 9 
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.3.5 | title=The realloc function | p=349}}
{{ref std c99}}
{{ref std | section=7.20.3.4 | title=The realloc function | p=314}}
{{ref std c89}}
{{ref std | section=4.10.3.4 | title=The realloc function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/memory/c/realloc}}
{{dsc end}}

[[ar:c/memory/realloc]]
[[cs:c/memory/realloc]]
[[de:c/memory/realloc]]
[[es:c/memory/realloc]]
[[fr:c/memory/realloc]]
[[it:c/memory/realloc]]
[[ja:c/memory/realloc]]
[[ko:c/memory/realloc]]
[[pl:c/memory/realloc]]
[[pt:c/memory/realloc]]
[[ru:c/memory/realloc]]
[[tr:c/memory/realloc]]
[[zh:c/memory/realloc]]</text>
      <sha1>rdg0xv73li0kqzjkwy57tse1x7jtua3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric</title>
    <ns>0</ns>
    <id>6357</id>
    <revision>
      <id>90017</id>
      <parentid>90013</parentid>
      <timestamp>2017-02-01T19:46:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>&quot;optimized numeric arrays&quot; must have been a paste from C++. No valarrays here.</comment>
      <text xml:space="preserve" bytes="1611">{{title|Numerics}}
{{c/numeric/navbar}}

The C numerics library includes common mathematical functions and types, as well as support for random number generation.

===[[c/numeric/math | Common mathematical functions]]===

The header {{tt|math.h}} provides [[c/numeric/math|standard C library mathematical functions]] such as {{lc|fabs}}, {{lc|sqrt}}, and {{lc|sin}}.

===[[c/numeric/fenv | Floating-point environment]]===

The header {{tt|fenv.h}} defines [[c/numeric/fenv|flags and functions related to exceptional floating-point state]], such as overflow and division by zero.

===[[c/numeric/random | Pseudo-random number generation]]===

The header {{tt|stdlib.h}} also includes C-style random number generation via {{lc|srand}} and {{lc|rand}}.

===[[c/numeric/complex | Complex number arithmetic]]===

The header {{tt|complex.h}} povides types and functions about [[c/numeric/complex|complex numbers]].

===[[c/numeric/tgmath | Type-generic math]]===

The header {{tt|tgmath.h}} provides some macros for a function which names XXX:
* real function:
:* {{c|float}} variant {{tt|XXXf}}
:* {{c|double}} variant {{tt|XXX}}
:* {{c|long double}} variant {{tt|XXXl}}
* complex function:
:* {{c|float}} variant {{tt|cXXXf}}
:* {{c|double}} variant {{tt|cXXX}}
:* {{c|long double}} variant {{tt|cXXXl}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric |Numerics library}}
{{dsc end}}

[[ar:c/numeric]]
[[cs:c/numeric]]
[[de:c/numeric]]
[[es:c/numeric]]
[[fr:c/numeric]]
[[it:c/numeric]]
[[ja:c/numeric]]
[[ko:c/numeric]]
[[pl:c/numeric]]
[[pt:c/numeric]]
[[ru:c/numeric]]
[[tr:c/numeric]]
[[zh:c/numeric]]</text>
      <sha1>o8tsyorsjwsg8fqx3swef0gy96pf1ya</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex</title>
    <ns>0</ns>
    <id>6518</id>
    <revision>
      <id>77419</id>
      <parentid>77417</parentid>
      <timestamp>2015-03-25T12:32:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>-duplicate &quot;(C11)&quot;</comment>
      <text xml:space="preserve" bytes="6682">{{title|Complex number arithmetic}}
{{c/numeric/complex/navbar}}

{{rev begin}}
{{rev|since=c11|
If the macro constant {{tt|__STDC_NO_COMPLEX__}} is defined by the implementation, the complex types, the header {{tt|&lt;complex.h&gt;}} and all of the names listed here are not provided.}}
{{rev end}}

The C programming language, as of C99, supports complex number math with the three built-in types {{tt|double _Complex}}, {{tt|float _Complex}}, and {{tt|long double _Complex}} (see [[c/keyword/_Complex|_Complex]]). When the header {{tt|&lt;complex.h&gt;}} is included, the three complex number types are also accessible as {{tt|double complex}}, {{tt|float complex}}, {{tt|long double complex}}.

In addition to the complex types, the three imaginary types may be supported: {{tt|double _Imaginary}}, {{tt|float _Imaginary}}, and {{tt|long double _Imaginary}} (see [[c/keyword/_Imaginary|_Imaginary]]). When the header {{tt|&lt;complex.h&gt;}} is included, the three imaginary types are also accessible as {{tt|double imaginary}}, {{tt|float imaginary}}, and {{tt|long double imaginary}}.

Standard arithmetic operators {{c|+, -, *, /}} can be used with real, complex, and imaginary types in any combination. &lt;!--TODO: link to the arithmetic operators, don't forget cx limited range and the details from G.5.1 and G.5.2. in their description --&gt;

{{rev begin}}
{{rev|since=c99|until=c11|
A compiler that defines {{c|__STDC_IEC_559_COMPLEX__}} is recommended, but not required to support imaginary numbers. POSIX recommends checking if the macro {{c|_Imaginary_I}} is defined to identify imaginary number support.
}}
{{rev|since=c11|
Imaginary numbers are supported if {{c|__STDC_IEC_559_COMPLEX__}} is defined.
}}
{{rev end}}

{{dsc begin}}
{{dsc header | complex.h}}
{{dsc h2 | Types}}
{{dsc inc | c/numeric/complex/dsc imaginary}}
{{dsc inc | c/numeric/complex/dsc complex}}

{{dsc h2 | The imaginary constant}}
{{dsc inc | c/numeric/complex/dsc Imaginary_I}}
{{dsc inc | c/numeric/complex/dsc Complex_I}}
{{dsc inc | c/numeric/complex/dsc I}}

{{dsc h2 | Manipulation}}
{{dsc inc | c/numeric/complex/dsc CMPLX}}
{{dsc inc | c/numeric/complex/dsc creal}}
{{dsc inc | c/numeric/complex/dsc cimag}}
{{dsc inc | c/numeric/complex/dsc cabs}}
{{dsc inc | c/numeric/complex/dsc carg}}
{{dsc inc | c/numeric/complex/dsc conj}}
{{dsc inc | c/numeric/complex/dsc cproj}}

{{dsc h2 | Exponential functions}}
{{dsc inc | c/numeric/complex/dsc cexp}}
{{dsc inc | c/numeric/complex/dsc clog}}

{{dsc h2 | Power functions}}
{{dsc inc | c/numeric/complex/dsc cpow}}
{{dsc inc | c/numeric/complex/dsc csqrt}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | c/numeric/complex/dsc csin}}
{{dsc inc | c/numeric/complex/dsc ccos}}
{{dsc inc | c/numeric/complex/dsc ctan}}
{{dsc inc | c/numeric/complex/dsc casin}}
{{dsc inc | c/numeric/complex/dsc cacos}}
{{dsc inc | c/numeric/complex/dsc catan}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | c/numeric/complex/dsc csinh}}
{{dsc inc | c/numeric/complex/dsc ccosh}}
{{dsc inc | c/numeric/complex/dsc ctanh}}
{{dsc inc | c/numeric/complex/dsc casinh}}
{{dsc inc | c/numeric/complex/dsc cacosh}}
{{dsc inc | c/numeric/complex/dsc catanh}}
{{dsc end}}

===Notes===
The following function names are reserved for future addition to {{tt|complex.h}} and are not available for use in the programs that include that header: {{tt|cerf}}, {{tt|cerfc}}, {{tt|cexp2}}, {{tt|cexpm1}}, {{tt|clog10}}, {{tt|clog1p}}, {{tt|clog2}}, {{tt|clgamma}}, and {{tt|ctgamma}}, along with their -f and -l suffixed variants.

Although the C standard names the inverse hyperbolics with &quot;complex arc hyperbolic sine&quot; etc., the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct names are &quot;complex inverse hyperbolic sine&quot; etc. Some authors use &quot;complex area hyperbolic sine&quot; etc.

A complex or imaginary number is infinite if one of its components is infinite, even if the other component is NaN. 

A complex or imaginary number is finite if both components are neither infinities nor NaNs.

A complex or imaginary number is a zero if both components are positive or negative zeroes.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;
#include &lt;tgmath.h&gt;

int main(void)
{
    double complex z1 = I * I;     // imaginary unit squared
    printf(&quot;I * I = %.1f%+.1fi\n&quot;, creal(z1), cimag(z1));

    double complex z2 = pow(I, 2); // imaginary unit squared
    printf(&quot;pow(I, 2) = %.1f%+.1fi\n&quot;, creal(z2), cimag(z2));

    double PI = acos(-1);
    double complex z3 = exp(I * PI); // Euler's formula
    printf(&quot;exp(I*PI) = %.1f%+.1fi\n&quot;, creal(z3), cimag(z3));

    double complex z4 = 1+2*I, z5 = 1-2*I; // conjugates
    printf(&quot;(1+2i)*(1-2i) = %.1f%+.1fi\n&quot;, creal(z4*z5), cimag(z4*z5));
}
 | output=
I * I = -1.0+0.0i
pow(I, 2) = -1.0+0.0i
exp(I*PI) = -1.0+0.0i
(1+2i)*(1-2i) = 5.0+0.0i
}}

===References===
{{ref std c11}}
{{ref std | section=6.10.8.3/1/2 | title=__STDC_NO_COMPLEX__ | p=177}}
{{ref std | section=6.10.8.3/1/2 | title=__STDC_IEC_559_COMPLEX__ | p=177}}
{{ref std | section=7.3          | title=Complex arithmetic &lt;complex.h&gt; | p=188-199}}
{{ref std | section=7.3.1/2      | title=__STDC_NO_COMPLEX__ | p=188}}
{{ref std | section=7.25         | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=7.31.1       | title=Complex arithmetic &lt;complex.h&gt; | p=455}}
{{ref std | section=B.2          | title=Complex &lt;complex.h&gt; | p=475-477}}
{{ref std | section=Annex G (normative) | title=IEC 60559-compatible complex arithmetic | p=532-545}}
{{ref std | section=G.1/1        | title=__STDC_IEC_559_COMPLEX__ | p=532}}
{{ref std c99}}
{{ref std | section=6.10.8/2 | title=__STDC_IEC_559_COMPLEX__ | p=161}}
{{ref std | section=7.3      | title=Complex arithmetic &lt;complex.h&gt; | p=170-180}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=7.26.1   | title=Complex arithmetic &lt;complex.h&gt; | p=401}}
{{ref std | section=B.2      | title=Complex &lt;complex.h&gt; | p=419-420}}
{{ref std | section=Annex G (informative) | title=IEC 60559-compatible complex arithmetic | p=467-480}}
{{ref std | section=G.1/1    | title=__STDC_IEC_559_COMPLEX__ | p=467}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/complex | Complex number arithmetic}}
{{dsc end}}

[[ar:c/numeric/complex]]
[[cs:c/numeric/complex]]
[[de:c/numeric/complex]]
[[es:c/numeric/complex]]
[[fr:c/numeric/complex]]
[[it:c/numeric/complex]]
[[ja:c/numeric/complex]]
[[ko:c/numeric/complex]]
[[pl:c/numeric/complex]]
[[pt:c/numeric/complex]]
[[ru:c/numeric/complex]]
[[tr:c/numeric/complex]]
[[zh:c/numeric/complex]]</text>
      <sha1>oom89ahid4vcadw45j3fyg1bejaqmad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/CMPLX</title>
    <ns>0</ns>
    <id>9381</id>
    <revision>
      <id>77485</id>
      <parentid>77454</parentid>
      <timestamp>2015-03-26T17:33:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+semicolon</comment>
      <text xml:space="preserve" bytes="2573">{{c/title|CMPLXF|CMPLX|CMPLXL}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c11 |
float complex       CMPLXF( float real, float imag );
}}
{{dcl | since=c11 |
double complex      CMPLX( double real, double imag );
}}
{{dcl | since=c11 |
long double complex CMPLXL( long double real, long double imag );
}}
{{dcl end}}

Each of these macros expands to an expression that evaluates to the value of the specified complex type, with the real part having the value of {{tt|real}} (converted to the specified argument type) and the imaginary part having the value of {{tt|imag}} (converted to the specified argument type)

The expressions are suitable for use as initializers for objects with static or thread storage duration, as long as the expressions {{tt|real}} and {{tt|imag}} are also suitable.

===Parameters===
{{par begin}}
{{par | real | the real part of the complex number to return}}
{{par | imag | the imaginary part of the complex number to return}}
{{par end}}

===Return value===
A complex number composed of {{tt|real}} and {{tt|imag}} as the real and imaginary parts.

===Notes===
These macros are implemented as if the imaginary types are supported (even if they are otherwise not supported and {{lc|_Imaginary_I}} is actually undefined) and as if defined as follows:

{{source|
#define CMPLX(x, y) ((double complex)((double)(x) + _Imaginary_I * (double)(y)))
#define CMPLXF(x, y) ((float complex)((float)(x) + _Imaginary_I * (float)(y)))
#define CMPLXL(x, y) ((long double complex)((long double)(x) + \
                      _Imaginary_I * (long double)(y)))
}}

===Example===
{{example|std=c11|code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = CMPLX(0.0, -0.0);
    printf(&quot;z = %.1f%+.1fi\n&quot;, creal(z), cimag(z));
}
|output=
z = 0.0-0.0i &lt;!-- obtained with the Oracle C compiler after #defining CMPLX as in the standard --&gt;
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.9.3 | title=The CMPLX macros | p=197}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc _Imaginary_I}}
{{dsc see cpp | cpp/numeric/complex/complex}}
{{dsc end}}

[[ar:c/numeric/complex/CMPLX]]
[[cs:c/numeric/complex/CMPLX]]
[[de:c/numeric/complex/CMPLX]]
[[es:c/numeric/complex/CMPLX]]
[[fr:c/numeric/complex/CMPLX]]
[[it:c/numeric/complex/CMPLX]]
[[ja:c/numeric/complex/CMPLX]]
[[ko:c/numeric/complex/CMPLX]]
[[pl:c/numeric/complex/CMPLX]]
[[pt:c/numeric/complex/CMPLX]]
[[ru:c/numeric/complex/CMPLX]]
[[tr:c/numeric/complex/CMPLX]]
[[zh:c/numeric/complex/CMPLX]]</text>
      <sha1>q232sr9i04zttfr7m2b494hldstuqgo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/Complex I</title>
    <ns>0</ns>
    <id>9356</id>
    <revision>
      <id>77456</id>
      <parentid>73162</parentid>
      <timestamp>2015-03-26T12:55:23Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1946">{{c/title|_Complex_I}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |
#define _Complex_I /* unspecified */
}}
{{dcl end}}

The {{tt|_Complex_I}} macro expands to a value of type {{c|const float _Complex}} with the value of the imaginary unit.

===Notes===
This macro may be used when {{lc|I}} is not available, such as when it has been undefined by the application.

Unlike {{lc|_Imaginary_I}} and {{lc|CMPLX}}, use of this macro to construct a complex number may lose the sign of zero on the imaginary component.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

#undef I
#define J _Complex_I // can be used to redefine I

int main(void)
{
    // can be used to construct a complex number
    double complex z = 1.0 + 2.0 * _Complex_I;
    printf(&quot;1.0 + 2.0 * _Complex_I = %.1f%+.1fi\n&quot;, creal(z), cimag(z));
    
    // sign of zero may not be preserved
    double complex z2 = 0.0 + -0.0 * _Complex_I;
    printf(&quot;0.0 + -0.0 * _Complex_I = %.1f%+.1fi\n&quot;, creal(z2), cimag(z2));
}
 |p=true
 | output=
1.0 + 2.0 * _Complex_I = 1.0+2.0i
0.0 + -0.0 * _Complex_I = 0.0+0.0i &lt;!-- clang does this --&gt;
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.1/4 | title=_Complex_I | p=188}}
{{ref std c99}}
{{ref std | section=7.3.1/2 | title=_Complex_I | p=170}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc Imaginary_I}}
{{dsc inc | c/numeric/complex/dsc I}}
{{dsc end}}

[[ar:c/numeric/complex/_Complex_I]]
[[cs:c/numeric/complex/_Complex_I]]
[[de:c/numeric/complex/_Complex_I]]
[[es:c/numeric/complex/_Complex_I]]
[[fr:c/numeric/complex/_Complex_I]]
[[it:c/numeric/complex/_Complex_I]]
[[ja:c/numeric/complex/_Complex_I]]
[[ko:c/numeric/complex/_Complex_I]]
[[pl:c/numeric/complex/_Complex_I]]
[[pt:c/numeric/complex/_Complex_I]]
[[ru:c/numeric/complex/_Complex_I]]
[[tr:c/numeric/complex/_Complex_I]]
[[zh:c/numeric/complex/_Complex_I]]</text>
      <sha1>822q41ib4t64y8e2p0vxux8tt9y3hgq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/I</title>
    <ns>0</ns>
    <id>9358</id>
    <revision>
      <id>77426</id>
      <parentid>77424</parentid>
      <timestamp>2015-03-25T13:35:30Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="2647">{{c/title|I&amp;nbsp;}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |
#define I /* unspecified */
}}
{{dcl end}}

The {{tt|I}} macro expands to either {{lc|_Complex_I}} or {{lc|_Imaginary_I}}. If the implementation does not support imaginary types, then the macro always expands to {{lc|_Complex_I}}.

A program may undefine and perhaps then redefine the macro {{c|I}}.

===Notes===
The macro is not named {{c|i}}, which is the name of the imaginary unit in mathematics, because the name {{tt|i}} was already used in many C programs, e.g. as a loop counter variable.

The macro {{c|I}} is often used to form complex numbers, with expressions such as {{c|x + y*I}}. 
If {{tt|I}} is defined as {{lc|_Complex_I}}, then such expression may create a value with imaginary component {{tt|+0.0}} even when {{tt|y}} is {{tt|-0.0}}, which is significant for complex number functions with branch cuts. The macro {{lc|CMPLX}} provides a way to construct a complex number precisely.

GCC provides a non-portable extension that allows imaginary constants to be specified with the suffix {{tt|i}} on integer literals: {{tt|1.0fi}}, {{tt|1.0i}}, and {{tt|1.0li}} are imaginary units in GNU C. A similar approach is part of standard C++ as of C++14 ({{tt|1.0if}}, {{tt|1.0i}}, and {{tt|1.0il}} are the imaginary units in C++)

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    printf(&quot;I = %.1f%+.1fi\n&quot;, creal(I), cimag(I));

    double complex z1 = I * I;     // imaginary unit squared
    printf(&quot;I * I = %.1f%+.1fi\n&quot;, creal(z1), cimag(z1));

    double complex z = 1.0 + 2.0*I; // usual way to form a complex number pre-C11
    printf(&quot;z = %.1f%+.1fi\n&quot;, creal(z), cimag(z));
}
 | output=
I = 0.0+1.0i
I * I = -1.0+0.0i
z = 1.0+2.0i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.1/6 | title=I | p=188}}
{{ref std | section=G.6/1   | title=I | p=537}}
{{ref std c99}}
{{ref std | section=7.3.1/4 | title=I | p=170}}
{{ref std | section=G.6/1   | title=I | p=472}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc Imaginary_I}}
{{dsc inc | c/numeric/complex/dsc Complex_I}}
{{dsc inc | c/numeric/complex/dsc CMPLX}}
{{dsc see cpp | cpp/numeric/complex/operator&quot;&quot;i}}
{{dsc end}}

[[ar:c/numeric/complex/I]]
[[cs:c/numeric/complex/I]]
[[de:c/numeric/complex/I]]
[[es:c/numeric/complex/I]]
[[fr:c/numeric/complex/I]]
[[it:c/numeric/complex/I]]
[[ja:c/numeric/complex/I]]
[[ko:c/numeric/complex/I]]
[[pl:c/numeric/complex/I]]
[[pt:c/numeric/complex/I]]
[[ru:c/numeric/complex/I]]
[[tr:c/numeric/complex/I]]
[[zh:c/numeric/complex/I]]</text>
      <sha1>pxqglhe6ju18oxe3dbi3hglrr6j0uxq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/Imaginary I</title>
    <ns>0</ns>
    <id>9357</id>
    <revision>
      <id>77455</id>
      <parentid>73273</parentid>
      <timestamp>2015-03-26T12:41:34Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2357">{{c/title|_Imaginary_I}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |
#define _Imaginary_I /* unspecified */
}}
{{dcl end}}

The {{tt|_Imaginary_I}} macro expands to a value of type {{c|const float _Imaginary}} with the value of the imaginary unit.

As with any pure imaginary number support in C, this macro is only defined if the imaginary numbers are supported.

{{rev begin}}
{{rev|since=c99|until=c11|
A compiler that defines {{c|__STDC_IEC_559_COMPLEX__}} is not required to support imaginary numbers. POSIX recommends checking if the macro {{tt|_Imaginary_I}} is defined to identify imaginary number support.
}}
{{rev|since=c11|
Imaginary numbers are supported if {{c|__STDC_IEC_559_COMPLEX__}} is defined.
}}
{{rev end}}

===Notes===
This macro allows for the precise way to assemble a complex number from its real and imaginary components, e.g. with {{c|(double complex)((double)x + _Imaginary_I * (double)y)}}. This pattern was standardized in C11 as the macro {{c|CMPLX}}. Note that if {{c|_Complex_I}} is used instead, this expression is allowed to convert negative zero to positive zero in the imaginary position.

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = 0.0 + -0.0 * _Imaginary_I;
    printf(&quot;z = %.1f%+.1fi\n&quot;, creal(z), cimag(z));
}
|output=
z = 0.0-0.0i &lt;!-- obtained with the Oracle C compiler --&gt;
}}
===References===
{{ref std c11}}
{{ref std | section=7.3.1/5 | title=_Imaginary_I | p=188}}
{{ref std | section=G.6/1   | title=_Imaginary_I | p=537}}
{{ref std c99}}
{{ref std | section=7.3.1/3 | title=_Imaginary_I | p=170}}
{{ref std | section=G.6/1   | title=_Imaginary_I | p=472}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc _Complex_I}}
{{dsc inc | c/numeric/complex/dsc I}}
{{dsc end}}

[[ar:c/numeric/complex/_Imaginary_I]]
[[cs:c/numeric/complex/_Imaginary_I]]
[[de:c/numeric/complex/_Imaginary_I]]
[[es:c/numeric/complex/_Imaginary_I]]
[[fr:c/numeric/complex/_Imaginary_I]]
[[it:c/numeric/complex/_Imaginary_I]]
[[ja:c/numeric/complex/_Imaginary_I]]
[[ko:c/numeric/complex/_Imaginary_I]]
[[pl:c/numeric/complex/_Imaginary_I]]
[[pt:c/numeric/complex/_Imaginary_I]]
[[ru:c/numeric/complex/_Imaginary_I]]
[[tr:c/numeric/complex/_Imaginary_I]]
[[zh:c/numeric/complex/_Imaginary_I]]</text>
      <sha1>frhkt4aizx8n0zsrqe809lj3opozr0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/cabs</title>
    <ns>0</ns>
    <id>9371</id>
    <revision>
      <id>77459</id>
      <parentid>77445</parentid>
      <timestamp>2015-03-26T13:45:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="2610">{{c/title|cabsf|cabs|cabsl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num = 1|
float       cabsf( float complex z );
}}
{{dcl | since=c99 | num = 2|
double      cabs( double complex z );
}}
{{dcl | since=c99 | num = 3|
long double cabsl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define fabs( z )
}}
{{dcl end}}

@1-3@ Computes the complex absolute value (also known as norm, modulus, or magnitude) of {{tt|z}}.
@4@ Type-generic macro: if {{tt|z}} has type {{c|long double complex}} or {{c|long double imaginary}}, {{tt|cabsl}} is called. If {{tt|z}}  has type {{c|float complex}} or {{c|float imaginary}}, {{tt|cabsf}} is called. If {{tt|z}} has type {{c|double complex}} or {{c|double imaginary}}, {{tt|cabs}} is called. For real and integer types, the corresponding version of {{lc|fabs}} is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, returns the absolute value (norm, magnitude) of {{tt|z}}.

Errors and special cases are handled as if the function is implemented as {{c|hypot(creal(z), cimag(z))}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = 1.0 + 1.0*I;
    printf(&quot;%.1f%+.1fi cartesian is rho=%f theta=%f polar\n&quot;,
           creal(z), cimag(z), cabs(z), carg(z));
}
 | output=
1.0+1.0i cartesian is rho=1.414214 theta=0.785398 polar
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.8.1 | title=The cabs functions | p=195}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.8.1 | title=The cabs functions | p=177}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc carg}}
{{dsc inc | c/numeric/math/dsc abs}}
{{dsc inc | c/numeric/math/dsc fabs}}
{{dsc inc | c/numeric/math/dsc hypot}}
{{dsc see cpp | cpp/numeric/complex/abs}}
{{dsc end}}

[[ar:c/numeric/complex/cabs]]
[[cs:c/numeric/complex/cabs]]
[[de:c/numeric/complex/cabs]]
[[es:c/numeric/complex/cabs]]
[[fr:c/numeric/complex/cabs]]
[[it:c/numeric/complex/cabs]]
[[ja:c/numeric/complex/cabs]]
[[ko:c/numeric/complex/cabs]]
[[pl:c/numeric/complex/cabs]]
[[pt:c/numeric/complex/cabs]]
[[ru:c/numeric/complex/cabs]]
[[tr:c/numeric/complex/cabs]]
[[zh:c/numeric/complex/cabs]]</text>
      <sha1>5h7od622f7tvgfpfrtif1ajwo9oiw2t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/cacos</title>
    <ns>0</ns>
    <id>9359</id>
    <revision>
      <id>77470</id>
      <parentid>77432</parentid>
      <timestamp>2015-03-26T14:15:02Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="4964">{{c/title|cacosf|cacos|cacosl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num = 1 |
float complex       cacosf( float complex z );
}}
{{dcl | since=c99 | num = 2 |
double complex      cacos( double complex z );
}}
{{dcl | since=c99 | num = 3 |
long double complex cacosl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define acos( z )
}}
{{dcl end}}

@1-3@ Computes the complex arc cosine of {{tt|z}} with branch cuts outside the interval {{math|[−1,+1]}} along the real axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|cacosl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|cacos}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|cacosf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|acosf}}, {{c|acos}}, {{c|acosl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding complex number version.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, complex arc cosine of {{tt|z}} is returned, in the range {{math|[0 ; &amp;infin;)}} along the real axis and in the range {{math|[−''i''&amp;pi; ; ''i''&amp;pi;]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|cacos(conj(z)) {{==}} conj(cacos(z))}}
* If {{tt|z}} is {{tt|±0+0i}}, the result is {{tt|π/2-0i}}
* If {{tt|z}} is {{tt|±0+NaNi}}, the result is {{tt|π/2+NaNi}}
* If {{tt|z}} is {{tt|x+∞i}} (for any finite x), the result is {{tt|π/2-∞i}}
* If {{tt|z}} is {{tt|x+NaNi}} (for any nonzero finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|-∞+yi}} (for any positive finite y), the result is {{tt|π-∞i}}
* If {{tt|z}} is {{tt|-∞+yi}} (for any positive finite y), the result is {{tt|+0-∞i}}
* If {{tt|z}} is {{tt|-∞+∞i}}, the result is {{tt|3π/4-∞i}}
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|π/4-∞i}}
* If {{tt|z}} is {{tt|±∞+NaNi}}, the result is {{tt|NaN±∞i}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|NaN+yi}} (for any finite y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+∞i}}, the result is {{tt|NaN-∞i}}
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

===Notes===
Inverse cosine (or arc cosine) is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventially placed at the line segments {{math|(-∞,-1)}} and {{math|(1,∞)}} of the real axis.

The mathematical definition of the principal value of arc cosine is {{math|acos z {{=}} {{mfrac|1|2}}π + ''i''ln(''i''z + {{mrad|1-z{{su|p=2}}}})}}

For any z, {{math|acos(z) {{=}} π - acos(-z)}}
===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = cacos(-2);
    printf(&quot;cacos(-2+0i) = %f%+fi\n&quot;, creal(z), cimag(z));

    double complex z2 = cacos(conj(-2)); // or CMPLX(-2, -0.0)
    printf(&quot;cacos(-2-0i) (the other side of the cut) = %f%+fi\n&quot;, creal(z2), cimag(z2));

    // for any z, acos(z) = pi - acos(-z)
    double pi = acos(-1);
    double complex z3 = ccos(pi-z2);
    printf(&quot;ccos(pi - cacos(-2-0i) = %f%+fi\n&quot;, creal(z3), cimag(z3));
}
 | output=
cacos(-2+0i) = 3.141593-1.316958i
cacos(-2-0i) (the other side of the cut) = 3.141593+1.316958i
ccos(pi - cacos(-2-0i) = 2.000000+0.000000i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.5.1 | title=The cacos functions | p=190}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.1.1 | title=The cacos functions | p=539}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.5.1 | title=The cacos functions | p=172}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.1.1 | title=The cacos functions | p=474}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc casin}}
{{dsc inc | c/numeric/complex/dsc catan}}
{{dsc inc | c/numeric/complex/dsc ccos}}
{{dsc inc | c/numeric/math/dsc acos}}
{{dsc see cpp | cpp/numeric/complex/acos}}
{{dsc end}}

[[ar:c/numeric/complex/cacos]]
[[cs:c/numeric/complex/cacos]]
[[de:c/numeric/complex/cacos]]
[[es:c/numeric/complex/cacos]]
[[fr:c/numeric/complex/cacos]]
[[it:c/numeric/complex/cacos]]
[[ja:c/numeric/complex/cacos]]
[[ko:c/numeric/complex/cacos]]
[[pl:c/numeric/complex/cacos]]
[[pt:c/numeric/complex/cacos]]
[[ru:c/numeric/complex/cacos]]
[[tr:c/numeric/complex/cacos]]
[[zh:c/numeric/complex/cacos]]</text>
      <sha1>9pgf4iz5rxymxs87bulhdfxf8u65vrb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/cacosh</title>
    <ns>0</ns>
    <id>9369</id>
    <revision>
      <id>90167</id>
      <parentid>77476</parentid>
      <timestamp>2017-02-07T19:26:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/sine/cosine here too</comment>
      <text xml:space="preserve" bytes="5558">{{c/title|cacoshf|cacosh|cacoshl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |num=1|
float complex       cacoshf( float complex z );
}}
{{dcl | since=c99 |num=2|
double complex      cacosh( double complex z );
}}
{{dcl | since=c99 |num=3|
long double complex cacoshl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define acosh( z )
}}
{{dcl end}}

@1-3@ Computes complex arc hyperbolic cosine of a complex value {{tt|z}} with branch cut at values less than 1 along the real axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|cacoshl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|cacosh}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|cacoshf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|acoshf}}, {{c|acosh}}, {{c|acoshl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding complex number version and the return type is complex.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
The complex arc hyperbolic cosine of {{tt|z}} in the interval {{math|[0; ∞)}} along the real axis and in the interval {{math|[−iπ; +iπ]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|cacosh(conj(z)) {{==}} conj(cacosh(z))}}
* If {{tt|z}} is {{tt|±0+0i}}, the result is {{tt|+0+iπ/2}}
* If {{tt|z}} is {{tt|+x+∞i}} (for any finite x), the result is {{tt|+∞+iπ/2}}
* If {{tt|z}} is {{tt|+x+NaNi}} (for any&lt;ref&gt;per [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1892.htm#dr_471 DR471], this holds for non-zero x only. If {{tt|z}} is {{tt|0+NaNi}}, the result should be {{tt|NaN+iπ/2}}&lt;/ref&gt; finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|-∞+yi}} (for any positive finite y), the result is {{tt|+∞+iπ}}
* If {{tt|z}} is {{tt|+∞+yi}} (for any positive finite y), the result is {{tt|+∞+0i}}
* If {{tt|z}} is {{tt|-∞+∞i}}, the result is {{tt|+∞+3iπ/4}}
* If {{tt|z}} is {{tt|±∞+NaNi}}, the result is {{tt|+∞+NaNi}}
* If {{tt|z}} is {{tt|NaN+yi}} (for any finite y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|NaN+∞i}}, the result is {{tt|+∞+NaNi}}
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}
&lt;references/&gt;
===Notes===
Although the C standard names this function &quot;complex arc hyperbolic cosine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;complex inverse hyperbolic cosine&quot;, and, less common, &quot;complex area hyperbolic cosine&quot;.

Inverse hyperbolic cosine is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segment {{math|(-∞,+1)}} of the real axis.

The mathematical definition of the principal value of the inverse hyperbolic sine is {{math|acosh z {{=}} ln(z + {{mrad|z+1}} + {{mrad|z-1}})}}

For any z, {{math|acosh(z) {{=}} {{mfrac|{{mrad|z-1}}|{{mrad|1-z}}}} acos(z) }}, or simply {{math|i acos(z)}} in the upper half of the complex plane.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = cacosh(0.5);
    printf(&quot;cacosh(+0.5+0i) = %f%+fi\n&quot;, creal(z), cimag(z));

    double complex z2 = conj(0.5); // or cacosh(CMPLX(0.5, -0.0)) in C11
    printf(&quot;cacosh(+0.5-0i) (the other side of the cut) = %f%+fi\n&quot;, creal(z2), cimag(z2));

    // in upper half-plane, acosh(z) = i*acos(z) 
    double complex z3 = casinh(1+I);
    printf(&quot;casinh(1+1i) = %f%+fi\n&quot;, creal(z3), cimag(z3));
    double complex z4 = I*casin(1+I);
    printf(&quot;I*asin(1+1i) = %f%+fi\n&quot;, creal(z4), cimag(z4));
}
 | output=
cacosh(+0.5+0i) = 0.000000-1.047198i
cacosh(+0.5-0i) (the other side of the cut) = 0.500000-0.000000i
casinh(1+1i) = 1.061275+0.666239i
I*asin(1+1i) = -1.061275+0.666239i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.6.1 | title=The cacosh functions | p=192}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.2.1 | title=The cacosh functions | p=539-540}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.6.1 | title=The cacosh functions | p=174}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.2.1 | title=The cacosh functions | p=474-475}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc cacos}}
{{dsc inc | c/numeric/complex/dsc casinh}}
{{dsc inc | c/numeric/complex/dsc catanh}}
{{dsc inc | c/numeric/complex/dsc ccosh}}
{{dsc inc | c/numeric/math/dsc acosh}}
{{dsc see cpp | cpp/numeric/complex/acosh}}
{{dsc end}}

[[ar:c/numeric/complex/cacosh]]
[[cs:c/numeric/complex/cacosh]]
[[de:c/numeric/complex/cacosh]]
[[es:c/numeric/complex/cacosh]]
[[fr:c/numeric/complex/cacosh]]
[[it:c/numeric/complex/cacosh]]
[[ja:c/numeric/complex/cacosh]]
[[ko:c/numeric/complex/cacosh]]
[[pl:c/numeric/complex/cacosh]]
[[pt:c/numeric/complex/cacosh]]
[[ru:c/numeric/complex/cacosh]]
[[tr:c/numeric/complex/cacosh]]
[[zh:c/numeric/complex/cacosh]]</text>
      <sha1>lxwtarcqoch3840xl0j3bgvyxkh04w7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/carg</title>
    <ns>0</ns>
    <id>9375</id>
    <revision>
      <id>77460</id>
      <parentid>77449</parentid>
      <timestamp>2015-03-26T13:47:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="3061">{{c/title|cargf|carg|cargl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float       cargf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double      carg( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double cargl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define carg( z )
}}
{{dcl end}}

@1-3@ Computes the argument (also called phase angle) of {{tt|z}}, with a branch cut along the negative real axis.
@4@ Type-generic macro: if {{tt|z}} has type {{c|long double complex}}, {{c|long double imaginary}}, or {{c|long double}}, {{tt|cargl}} is called. If {{tt|z}}  has type {{c|float complex}}, {{c|float imaginary}}, or {{c|float}}, {{tt|cargf}} is called. If {{tt|z}} has type {{c|double complex}}, {{c|double imaginary}}, {{c|double}}, or any integer type, {{tt|carg}} is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, returns the phase angle of {{tt|z}} in the interval {{math|(−π; π)}}.

Errors and special cases are handled as if the function is implemented as {{c|atan2(cimag(z), creal(z))}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void) 
{
    double complex z1 = 1.0+0.0*I;
    printf(&quot;phase angle of %.1f%+.1fi is %f\n&quot;, creal(z1), cimag(z1), carg(z1));

    double complex z2 = 0.0+1.0*I;
    printf(&quot;phase angle of %.1f%+.1fi is %f\n&quot;, creal(z2), cimag(z2), carg(z2));

    double complex z3 = -1.0+0.0*I;
    printf(&quot;phase angle of %.1f%+.1fi is %f\n&quot;, creal(z3), cimag(z3), carg(z3));

    double complex z4 = conj(z3); // or CMPLX(-1, -0.0)
    printf(&quot;phase angle of %.1f%+.1fi (the other side of the cut) is %f\n&quot;,
             creal(z4), cimag(z4), carg(z4));
}
 | output=
phase angle of 1.0+0.0i is 0.000000
phase angle of 0.0+1.0i is 1.570796
phase angle of -1.0+0.0i is 3.141593
phase angle of -1.0-0.0i (the other side of the cut) is -3.141593
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.9.1 | title=The carg functions | p=196}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.9.1 | title=The carg functions | p=178}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc cabs}}
{{dsc inc | c/numeric/math/dsc atan2}}
{{dsc see cpp | cpp/numeric/complex/arg}}
{{dsc end}}

[[ar:c/numeric/complex/carg]]
[[cs:c/numeric/complex/carg]]
[[de:c/numeric/complex/carg]]
[[es:c/numeric/complex/carg]]
[[fr:c/numeric/complex/carg]]
[[it:c/numeric/complex/carg]]
[[ja:c/numeric/complex/carg]]
[[ko:c/numeric/complex/carg]]
[[pl:c/numeric/complex/carg]]
[[pt:c/numeric/complex/carg]]
[[ru:c/numeric/complex/carg]]
[[tr:c/numeric/complex/carg]]
[[zh:c/numeric/complex/carg]]</text>
      <sha1>iqkswrukb3dju3vxdmdl9u58iudqym2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/casin</title>
    <ns>0</ns>
    <id>9360</id>
    <revision>
      <id>82047</id>
      <parentid>77469</parentid>
      <timestamp>2015-11-29T16:29:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>bad line wrap in example</comment>
      <text xml:space="preserve" bytes="3810">{{c/title|casinf|casin|casinl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num = 1|
float complex       casinf( float complex z );
}}
{{dcl | since=c99 | num = 2|
double complex      casin( double complex z );
}}
{{dcl | since=c99 | num = 3|
long double complex casinl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define asin( z )
}}
{{dcl end}}

@1-3@ Computes the complex arc sine of {{tt|z}} with branch cuts outside the interval {{math|[−1,+1]}} along the real axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|casinl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|casin}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|casinf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|asinf}}, {{c|asin}}, {{c|asinl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|asinh}}, implementing the formula {{math|asin(iy) {{=}} i asinh(y)}}, and the return type of the macro is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, complex arc sine of {{tt|z}} is returned, in the range of a strip unbounded along the imaginary axis and in the interval {{math|[−π/2; +π/2]}} along the real axis.

Errors and special cases are handled as if the operation is implemented by {{c|-I * casinh(I*z)}}

===Notes===
Inverse sine (or arc sine) is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments {{math|(-∞,-1)}} and {{math|(1,∞)}} of the real axis.

The mathematical definition of the principal value of arc sine is {{math|asin z {{=}} -''i''ln(''i''z + {{mrad|1-z{{su|p=2}}}})}}

For any z, {{math|asin(z) {{=}} acos(-z) - {{mfrac|π|2}} }}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = casin(-2);
    printf(&quot;casin(-2+0i) = %f%+fi\n&quot;, creal(z), cimag(z));

    double complex z2 = casin(conj(-2)); // or CMPLX(-2, -0.0)
    printf(&quot;casin(-2-0i) (the other side of the cut) = %f%+fi\n&quot;, creal(z2), cimag(z2));

    // for any z, asin(z) = acos(-z) - pi/2
    double pi = acos(-1);
    double complex z3 = csin(cacos(conj(-2))-pi/2);
    printf(&quot;csin(cacos(-2-0i)-pi/2) = %f%+fi\n&quot;, creal(z3), cimag(z3));
}
 | output=
casin(-2+0i) = -1.570796+1.316958i
casin(-2-0i) (the other side of the cut) = -1.570796-1.316958i
csin(cacos(-2-0i)-pi/2) = 2.000000+0.000000i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.5.2 | title=The casin functions | p=190}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.5.2 | title=The casin functions | p=172}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc cacos}}
{{dsc inc | c/numeric/complex/dsc catan}}
{{dsc inc | c/numeric/complex/dsc csin}}
{{dsc inc | c/numeric/math/dsc asin}}
{{dsc see cpp | cpp/numeric/complex/asin}}
{{dsc end}}

[[ar:c/numeric/complex/casin]]
[[cs:c/numeric/complex/casin]]
[[de:c/numeric/complex/casin]]
[[es:c/numeric/complex/casin]]
[[fr:c/numeric/complex/casin]]
[[it:c/numeric/complex/casin]]
[[ja:c/numeric/complex/casin]]
[[ko:c/numeric/complex/casin]]
[[pl:c/numeric/complex/casin]]
[[pt:c/numeric/complex/casin]]
[[ru:c/numeric/complex/casin]]
[[tr:c/numeric/complex/casin]]
[[zh:c/numeric/complex/casin]]</text>
      <sha1>dwpq3myo89lrouwgrd3mqk9shvwczw0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/casinh</title>
    <ns>0</ns>
    <id>9370</id>
    <revision>
      <id>77475</id>
      <parentid>77438</parentid>
      <timestamp>2015-03-26T14:22:13Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="5481">{{c/title|casinhf|casinh|casinhl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float complex       casinhf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double complex      casinh( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double complex casinhl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define asinh( z )
}}
{{dcl end}}

@1-3@ Computes the complex arc hyperbolic sine of {{tt|z}} with branch cuts outside the interval {{math|[−i; +i]}} along the imaginary axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|casinhl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|casinh}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|casinhf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|asinhf}}, {{c|asinh}}, {{c|asinhl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|asin}}, implementing the formula {{math|asinh(iy) {{=}} i asin(y)}}, and the return type is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, the complex arc hyperbolic sine of {{tt|z}} is returned, in the range of a strip mathematically unbounded along the real axis and in the interval {{math|[−iπ/2; +iπ/2]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|casinh(conj(z)) {{==}} conj(casinh(z))}}
* {{c|casinh(-z) {{==}} -casinh(z)}}
* If {{tt|z}} is {{tt|+0+0i}}, the result is {{tt|+0+0i}}
* If {{tt|z}} is {{tt|x+∞i}} (for any positive finite x), the result is {{tt|+∞+π/2}}
* If {{tt|z}} is {{tt|x+NaNi}} (for any finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|+∞+yi}} (for any positive finite y), the result is {{tt|+∞+0i}}
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|+∞+iπ/4}}
* If {{tt|z}} is {{tt|+∞+NaNi}}, the result is {{tt|+∞+NaNi}}
* If {{tt|z}} is {{tt|NaN+0i}}, the result is {{tt|NaN+0i}}
* If {{tt|z}} is {{tt|NaN+yi}} (for any finite nonzero y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+∞i}}, the result is {{tt|±∞+NaNi}} (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

===Notes===
Although the C standard names this function &quot;complex arc hyperbolic sine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;complex inverse hyperbolic sine&quot;, and, less common, &quot;complex area hyperbolic sine&quot;.

Inverse hyperbolic sine is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments {{math|(-''i''∞,-''i'')}} and {{math|(''i'',''i''∞)}} of the imaginary axis.

The mathematical definition of the principal value of the inverse hyperbolic sine is {{math|asinh z {{=}} ln(z + {{mrad|1+z{{su|p=2}}}})}}

For any z, {{math|asinh(z) {{=}} {{mfrac|asin(iz)|i}} }}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = casinh(0+2*I);
    printf(&quot;casinh(+0+2i) = %f%+fi\n&quot;, creal(z), cimag(z));

    double complex z2 = casinh(-conj(2*I)); // or casinh(CMPLX(-0.0, 2)) in C11
    printf(&quot;casinh(-0+2i) (the other side of the cut) = %f%+fi\n&quot;, creal(z2), cimag(z2));

    // for any z, asinh(z) = asin(iz)/i
    double complex z3 = casinh(1+2*I);
    printf(&quot;casinh(1+2i) = %f%+fi\n&quot;, creal(z3), cimag(z3));
    double complex z4 = casin((1+2*I)*I)/I;
    printf(&quot;casin(i * (1+2i))/i = %f%+fi\n&quot;, creal(z4), cimag(z4));
}
 | output=
casinh(+0+2i) = 1.316958+1.570796i
casinh(-0+2i) (the other side of the cut) = -1.316958+1.570796i
casinh(1+2i) = 1.469352+1.063440i
casin(i * (1+2i))/i =  1.469352+1.063440i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.6.2 | title=The casinh functions | p=192-193}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.2.2 | title=The casinh functions | p=540}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.6.2 | title=The casinh functions | p=174-175}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.2.2 | title=The casinh functions | p=475}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc cacosh}}
{{dsc inc | c/numeric/complex/dsc catanh}}
{{dsc inc | c/numeric/complex/dsc csinh}}
{{dsc inc | c/numeric/math/dsc asinh}}
{{dsc see cpp | cpp/numeric/complex/asinh}}
{{dsc end}}

[[ar:c/numeric/complex/casinh]]
[[cs:c/numeric/complex/casinh]]
[[de:c/numeric/complex/casinh]]
[[es:c/numeric/complex/casinh]]
[[fr:c/numeric/complex/casinh]]
[[it:c/numeric/complex/casinh]]
[[ja:c/numeric/complex/casinh]]
[[ko:c/numeric/complex/casinh]]
[[pl:c/numeric/complex/casinh]]
[[pt:c/numeric/complex/casinh]]
[[ru:c/numeric/complex/casinh]]
[[tr:c/numeric/complex/casinh]]
[[zh:c/numeric/complex/casinh]]</text>
      <sha1>d9878mf7s3cji3yf0ee2vjp2a2kl26q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/catan</title>
    <ns>0</ns>
    <id>9361</id>
    <revision>
      <id>77471</id>
      <parentid>77434</parentid>
      <timestamp>2015-03-26T14:16:27Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="3713">{{c/title|catanf|catan|catanl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |num=1|
float complex       catanf( float complex z );
}}
{{dcl | since=c99 |num=2|
double complex      catan( double complex z );
}}
{{dcl | since=c99 |num=3|
long double complex catanl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define atan( z )
}}
{{dcl end}}

@1-3@ Computes the complex arc tangent of {{tt|z}} with branch cuts outside the interval {{math|[−i,+i]}} along the imaginary axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|catanl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|catan}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|catanf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|atanf}}, {{c|atan}}, {{c|atanl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|atanh}}, implementing the formula {{math|atan(iy) {{=}} i atanh(y)}}, and the return type of the macro is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, complex arc tangent of {{tt|z}} is returned, in the range of a strip unbounded along the imaginary axis and in the interval {{math|[−π/2; +π/2]}} along the real axis.

Errors and special cases are handled as if the operation is implemented by {{c|-I * catanh(I*z)}}.

===Notes===
Inverse tangent (or arc tangent) is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments {{math|(-∞i,-i)}} and {{math|(+i,+∞i)}} of the imaginary axis.

The mathematical definition of the principal value of inverse tangent is {{math|atan z {{=}} -{{mfrac|1|2}} i [ln(1 - iz) - ln (1 + iz]}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;float.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = catan(2*I);
    printf(&quot;catan(+0+2i) = %f%+fi\n&quot;, creal(z), cimag(z));

    double complex z2 = catan(-conj(2*I)); // or CMPLX(-0.0, 2)
    printf(&quot;catan(-0+2i) (the other side of the cut) = %f%+fi\n&quot;, creal(z2), cimag(z2));

    double complex z3 = 2*catan(2*I*DBL_MAX); // or CMPLX(0, INFINITY)
    printf(&quot;2*catan(+0+i*Inf) = %f%+fi\n&quot;, creal(z3), cimag(z3));
}
 | output=
catan(+0+2i) = 1.570796+0.549306i
catan(-0+2i) (the other side of the cut) = -1.570796+0.549306i
2*catan(+0+i*Inf) = 3.141593+0.000000i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.5.3 | title=The catan functions | p=191}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.5.3 | title=The catan functions | p=173}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc casin}}
{{dsc inc | c/numeric/complex/dsc cacos}}
{{dsc inc | c/numeric/complex/dsc ctan}}
{{dsc inc | c/numeric/math/dsc atan}}
{{dsc see cpp | cpp/numeric/complex/atan}}
{{dsc end}}

[[ar:c/numeric/complex/catan]]
[[cs:c/numeric/complex/catan]]
[[de:c/numeric/complex/catan]]
[[es:c/numeric/complex/catan]]
[[fr:c/numeric/complex/catan]]
[[it:c/numeric/complex/catan]]
[[ja:c/numeric/complex/catan]]
[[ko:c/numeric/complex/catan]]
[[pl:c/numeric/complex/catan]]
[[pt:c/numeric/complex/catan]]
[[ru:c/numeric/complex/catan]]
[[tr:c/numeric/complex/catan]]
[[zh:c/numeric/complex/catan]]</text>
      <sha1>n9n5ej27xxxgibs1zmg3m1s3xvz816f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/catanh</title>
    <ns>0</ns>
    <id>9368</id>
    <revision>
      <id>77478</id>
      <parentid>77439</parentid>
      <timestamp>2015-03-26T14:25:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="5540">{{c/title|catanhf|catanh|catanhl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |num=1|
float complex       catanhf( float complex z );
}}
{{dcl | since=c99 |num=2|
double complex      catanh( double complex z );
}}
{{dcl | since=c99 |num=3|
long double complex catanhl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define atanh( z )
}}
{{dcl end}}

@1-3@ Computes the complex arc hyperbolic tangent of {{tt|z}} with branch cuts outside the interval {{math|[−1; +1]}} along the real axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|catanhl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|catanh}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|catanhf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|atanhf}}, {{c|atanh}}, {{c|atanhl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of {{c|atan}}, implementing the formula {{math|atanh(iy) {{=}} i atan(y)}}, and the return type is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, the complex arc hyperbolic tangent of {{tt|z}} is returned, in the range of a half-strip mathematically unbounded along the real axis and in the interval {{math|[−iπ/2; +iπ/2]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|catanh(conj(z)) {{==}} conj(catanh(z))}}
* {{c|catanh(-z) {{==}} -catanh(z)}}
* If {{tt|z}} is {{tt|+0+0i}}, the result is {{tt|+0+0i}}
* If {{tt|z}} is {{tt|+0+NaNi}}, the result is {{tt|+0+NaNi}}
* If {{tt|z}} is {{tt|+1+0i}}, the result is {{tt|+∞+0i}} and {{lc|FE_DIVBYZERO}} is raised
* If {{tt|z}} is {{tt|x+∞i}} (for any finite positive x), the result is {{tt|+0+iπ/2}}
* If {{tt|z}} is {{tt|x+NaNi}} (for any finite nonzero x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|+∞+yi}} (for any finite positive y), the result is {{tt|+0+iπ/2}}
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|+0+iπ/2}}
* If {{tt|z}} is {{tt|+∞+NaNi}}, the result is {{tt|+0+NaNi}}
* If {{tt|z}} is {{tt|NaN+yi}} (for any finite y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+∞i}}, the result is {{tt|±0+iπ/2}} (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

===Notes===
Although the C standard names this function &quot;complex arc hyperbolic tangent&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;complex inverse hyperbolic tangent&quot;, and, less common, &quot;complex area hyperbolic tangent&quot;.

Inverse hyperbolic tangent is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segmentd {{math|(-∞,-1]}} and {{math|[+1,+∞)}} of the real axis.

The mathematical definition of the principal value of the inverse hyperbolic sine is {{math|atanh z {{=}} {{mfrac|ln(1+z)-ln(z-1)|2}} }}.


For any z, {{math|atanh(z) {{=}} {{mfrac|atan(iz)|i}} }}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = catanh(2);
    printf(&quot;catanh(+2+0i) = %f%+fi\n&quot;, creal(z), cimag(z));

    double complex z2 = catanh(conj(2)); // or catanh(CMPLX(2, -0.0)) in C11
    printf(&quot;catanh(+2-0i) (the other side of the cut) = %f%+fi\n&quot;, creal(z2), cimag(z2));

    // for any z, atanh(z) = atan(iz)/i
    double complex z3 = catanh(1+2*I);
    printf(&quot;catanh(1+2i) = %f%+fi\n&quot;, creal(z3), cimag(z3));
    double complex z4 = catan((1+2*I)*I)/I;
    printf(&quot;catan(i * (1+2i))/i = %f%+fi\n&quot;, creal(z4), cimag(z4));
}
 | output=
catanh(+2+0i) = 0.549306+1.570796i
catanh(+2-0i) (the other side of the cut) = 0.549306-1.570796i
catanh(1+2i) = 0.173287+1.178097i
catan(i * (1+2i))/i = 0.173287+1.178097i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.6.3 | title=The catanh functions | p=193}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.2.3 | title=The catanh functions | p=540-541}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.6.3 | title=The catanh functions | p=175}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.2.3 | title=The catanh functions | p=475-476}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc casinh}}
{{dsc inc | c/numeric/complex/dsc cacosh}}
{{dsc inc | c/numeric/complex/dsc ctanh}}
{{dsc inc | c/numeric/math/dsc atanh}}
{{dsc see cpp | cpp/numeric/complex/atanh}}
{{dsc end}}

[[ar:c/numeric/complex/catanh]]
[[cs:c/numeric/complex/catanh]]
[[de:c/numeric/complex/catanh]]
[[es:c/numeric/complex/catanh]]
[[fr:c/numeric/complex/catanh]]
[[it:c/numeric/complex/catanh]]
[[ja:c/numeric/complex/catanh]]
[[ko:c/numeric/complex/catanh]]
[[pl:c/numeric/complex/catanh]]
[[pt:c/numeric/complex/catanh]]
[[ru:c/numeric/complex/catanh]]
[[tr:c/numeric/complex/catanh]]
[[zh:c/numeric/complex/catanh]]</text>
      <sha1>d5kb008h3ydkf116syx8t4ur6lkzzeu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/ccos</title>
    <ns>0</ns>
    <id>9362</id>
    <revision>
      <id>77483</id>
      <parentid>73283</parentid>
      <timestamp>2015-03-26T14:35:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3154">{{c/title|ccosf|ccos|ccosl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num =1 |
float complex       ccosf( float complex z );
}}
{{dcl | since=c99 |num =2 |
double complex      ccos( double complex z );
}}
{{dcl | since=c99 |num =3 |
long double complex ccosl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define cos( z )
}}
{{dcl end}}

@1-3@ Computes the complex cosine of {{tt|z}}.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|ccosl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|ccos}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|ccosf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|cosf}}, {{c|cos}}, {{c|cosl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|cosh}}, implementing the formula {{math|cos(iy) {{=}} cosh(y)}}, and the return type is real.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===

If no errors occur, the complex cosine of {{tt|z}} is returned.

Errors and special cases are handled as if the operation is implemented by {{c|ccosh(I*z)}}.

===Notes===
The cosine is an entire function on the complex plane, and has no branch cuts.

Mathematical definition of the cosine is {{math|cos z {{=}} {{mfrac|e{{su|p=iz}}+e{{su|p=-iz}}|2}}}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = ccos(1);  // behaves like real cosine along the real line
    printf(&quot;cos(1+0i) = %f%+fi ( cos(1)=%f)\n&quot;, creal(z), cimag(z), cos(1));

    double complex z2 = ccos(I); // behaves like real cosh along the imaginary line
    printf(&quot;cos(0+1i) = %f%+fi (cosh(1)=%f)\n&quot;, creal(z2), cimag(z2), cosh(1));
}
 | output=
cos(1+0i) = 0.540302-0.000000i ( cos(1)=0.540302)
cos(0+1i) = 1.543081-0.000000i (cosh(1)=1.543081)
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.5.4 | title=The ccos functions | p=191}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.5.4 | title=The ccos functions | p=173}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc csin}}
{{dsc inc | c/numeric/complex/dsc ctan}}
{{dsc inc | c/numeric/complex/dsc cacos}}
{{dsc inc | c/numeric/math/dsc cos}}
{{dsc see cpp | cpp/numeric/complex/cos}}
{{dsc end}}

[[ar:c/numeric/complex/ccos]]
[[cs:c/numeric/complex/ccos]]
[[de:c/numeric/complex/ccos]]
[[es:c/numeric/complex/ccos]]
[[fr:c/numeric/complex/ccos]]
[[it:c/numeric/complex/ccos]]
[[ja:c/numeric/complex/ccos]]
[[ko:c/numeric/complex/ccos]]
[[pl:c/numeric/complex/ccos]]
[[pt:c/numeric/complex/ccos]]
[[ru:c/numeric/complex/ccos]]
[[tr:c/numeric/complex/ccos]]
[[zh:c/numeric/complex/ccos]]</text>
      <sha1>ivrafx8lq0yic79bovm3o9qy4prk0n3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/ccosh</title>
    <ns>0</ns>
    <id>9367</id>
    <revision>
      <id>77473</id>
      <parentid>77440</parentid>
      <timestamp>2015-03-26T14:19:30Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="4870">{{c/title|ccoshf|ccosh|ccoshl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float complex       ccoshf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double complex      ccosh( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double complex ccoshl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define cosh( z )
}}
{{dcl end}}

@1-3@ Computes the complex hyperbolic cosine of {{tt|z}}.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|ccoshl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|ccosh}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|ccoshf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|coshf}}, {{c|cosh}}, {{c|coshl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|cos}}, implementing the formula {{math|cosh(iy) {{=}} cos(y)}}, and the return type is real.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===

If no errors occur, complex hyperbolic cosine of {{tt|z}} is returned

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|ccosh(conj(z)) {{==}} conj(ccosh(z))}}
* {{c|ccosh(z) {{==}} ccosh(-z)}}
* If {{tt|z}} is {{tt|+0+0i}}, the result is {{tt|1+0i}}
* If {{tt|z}} is {{tt|+0+∞i}}, the result is {{tt|NaN±0i}} (the sign of the imaginary part is unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|+0+NaNi}}, the result is {{tt|NaN±0i}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|x+∞i}} (for any finite non-zero x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|x+NaNi}} (for any finite non-zero x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|+∞+0i}}, the result is {{tt|+∞+0i}}
* If {{tt|z}} is {{tt|+∞+yi}} (for any finite non-zero y), the result is {{tt|+∞+cis(y)}}
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|±∞+NaNi}} (the sign of the real part is unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|+∞+NaN}}, the result is {{tt|+∞+NaN}}
* If {{tt|z}} is {{tt|NaN+0i}}, the result is {{tt|NaN±0i}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|NaN+yi}} (for any finite non-zero y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

where {{math|cis(y)}} is {{math|cos(y) + i sin(y)}}

===Notes===
Mathematical definition of hyperbolic cosine is {{math|cosh z {{=}} {{mfrac|e{{su|p=z}}+e{{su|p=-z}}|2}}}}

Hyperbolic cosine is an entire function in the complex plane and has no branch cuts. It is periodic with respect to the imaginary component, with period 2&amp;pi;i 

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = ccosh(1);  // behaves like real cosh along the real line
    printf(&quot;cosh(1+0i) = %f%+fi (cosh(1)=%f)\n&quot;, creal(z), cimag(z), cosh(1));

    double complex z2 = ccosh(I); // behaves like real cosine along the imaginary line
    printf(&quot;cosh(0+1i) = %f%+fi ( cos(1)=%f)\n&quot;, creal(z2), cimag(z2), cos(1));
}
 | output=
cosh(1+0i) = 1.543081+0.000000i (cosh(1)=1.543081)
cosh(0+1i) = 0.540302+0.000000i ( cos(1)=0.540302)
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.6.4 | title=The ccosh functions | p=193}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.2.4 | title=The ccosh functions | p=541}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.6.4 | title=The ccosh functions | p=175}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.2.4 | title=The ccosh functions | p=476}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc csinh}}
{{dsc inc | c/numeric/complex/dsc ctanh}}
{{dsc inc | c/numeric/complex/dsc cacosh}}
{{dsc inc | c/numeric/math/dsc cosh}}
{{dsc see cpp | cpp/numeric/complex/cosh}}
{{dsc end}}

[[ar:c/numeric/complex/ccosh]]
[[cs:c/numeric/complex/ccosh]]
[[de:c/numeric/complex/ccosh]]
[[es:c/numeric/complex/ccosh]]
[[fr:c/numeric/complex/ccosh]]
[[it:c/numeric/complex/ccosh]]
[[ja:c/numeric/complex/ccosh]]
[[ko:c/numeric/complex/ccosh]]
[[pl:c/numeric/complex/ccosh]]
[[pt:c/numeric/complex/ccosh]]
[[ru:c/numeric/complex/ccosh]]
[[tr:c/numeric/complex/ccosh]]
[[zh:c/numeric/complex/ccosh]]</text>
      <sha1>n6rybzgc49b4uuzotmx40i4o6lkhiyp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/cexp</title>
    <ns>0</ns>
    <id>9372</id>
    <revision>
      <id>77463</id>
      <parentid>77443</parentid>
      <timestamp>2015-03-26T13:57:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="4346">{{c/title|cexpf|cexp|cexpl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num =1 |
float complex       cexpf( float complex z );
}}
{{dcl | since=c99 |num =2 |
double complex      cexp( double complex z );
}}
{{dcl | since=c99 |num =3 |
long double complex cexpl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define exp( z )
}}
{{dcl end}}

@1-3@ Computes the complex base-''e'' exponential of {{tt|z}}.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|cexpl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|cexp}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|cexpf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|expf}}, {{c|exp}}, {{c|expl}}). If {{tt|z}} is imaginary, the corresponding complex argument version is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, ''e'' raised to the power of {{tt|z}}, {{math|e{{su|p=z}}}} is returned.

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|cexp(conj(z)) {{==}} conj(cexp(z))}}
* If {{tt|z}} is {{tt|±0+0i}}, the result is {{tt|1+0i}}
* If {{tt|z}} is {{tt|x+∞i}} (for any finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} is raised.
* If {{tt|z}} is {{tt|x+NaNi}} (for any finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|+∞+0i}}, the result is {{tt|+∞+0i}}
* If {{tt|z}} is {{tt|-∞+yi}} (for any finite y), the result is {{tt|+0+cis(y)}}
* If {{tt|z}} is {{tt|+∞+yi}} (for any finite nonzero y), the result is {{tt|+∞+cis(y)}}
* If {{tt|z}} is {{tt|-∞+∞i}}, the result is {{tt|±0±0i}} (signs are unspecified)
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|±∞+NaNi}} and {{lc|FE_INVALID}} is raised (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|-∞+NaNi}}, the result is {{tt|±0±0i}} (signs are unspecified)
* If {{tt|z}} is {{tt|+∞+NaNi}}, the result is {{tt|±∞+NaNi}} (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|NaN+0i}}, the result is {{tt|NaN+0i}}
* If {{tt|z}} is {{tt|NaN+yi}} (for any nonzero y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

where {{math|cis(y)}} is {{math|cos(y) + i sin(y)}}

===Notes===
The complex exponential function {{math|e{{su|p=z}}}} for {{math|z {{=}} x+iy}} equals to {{math|e{{su|p=x}} cis(y)}}, or, {{math|e{{su|p=x}} (cos(y) + i sin(y))}}

The exponential function is an ''entire function'' in the complex plane and has no branch cuts.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double PI = acos(-1);
    double complex z = cexp(I * PI); // Euler's formula
    printf(&quot;exp(i*pi) = %.1f%+.1fi\n&quot;, creal(z), cimag(z));

}
 | output=
exp(i*pi) = -1.0+0.0i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.7.1 | title=The cexp functions | p=194}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.3.1 | title=The cexp functions | p=543}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.7.1 | title=The cexp functions | p=176}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.3.1 | title=The cexp functions | p=478}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc clog}}
{{dsc inc | c/numeric/math/dsc exp}}
{{dsc see cpp | cpp/numeric/complex/exp}}
{{dsc end}}

[[ar:c/numeric/complex/cexp]]
[[cs:c/numeric/complex/cexp]]
[[de:c/numeric/complex/cexp]]
[[es:c/numeric/complex/cexp]]
[[fr:c/numeric/complex/cexp]]
[[it:c/numeric/complex/cexp]]
[[ja:c/numeric/complex/cexp]]
[[ko:c/numeric/complex/cexp]]
[[pl:c/numeric/complex/cexp]]
[[pt:c/numeric/complex/cexp]]
[[ru:c/numeric/complex/cexp]]
[[tr:c/numeric/complex/cexp]]
[[zh:c/numeric/complex/cexp]]</text>
      <sha1>fuhh66skpf5b2026aw59v1lhh7wd23b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/cimag</title>
    <ns>0</ns>
    <id>9377</id>
    <revision>
      <id>77458</id>
      <parentid>77450</parentid>
      <timestamp>2015-03-26T13:44:00Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="2458">{{c/title|cimagf|cimag|cimagl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num = 1|
float       cimagf( float complex z );
}}
{{dcl | since=c99 | num = 2|
double      cimag( double complex z );
}}
{{dcl | since=c99 | num = 3|
long double cimagl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define cimag( z )
}}
{{dcl end}}

@1-3@ Returns the imaginary part of {{tt|z}}.
@4@ Type-generic macro: if {{tt|z}} has type {{c|long double complex}}, {{c|long double imaginary}}, or {{c|long double}}, {{tt|cimagl}} is called. If {{tt|z}}  has type {{c|float complex}}, {{c|float imaginary}}, or {{c|float}}, {{tt|cimagf}} is called. If {{tt|z}} has type {{c|double complex}}, {{c|double imaginary}}, {{c|double}}, or any integer type, {{tt|cimag}} is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
The imaginary part of {{tt|z}}.

This function is fully specified for all possible inputs and is not subject to any errors described in [[c/numeric/math/math_errhandling|math_errhandling]]

===Notes===
For any complex variable {{tt|z}}, {{c|z {{==}} creal(z) + I*cimag(z)}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{    
    double complex z = 1.0 + 2.0*I;
    printf(&quot;%f%+fi\n&quot;, creal(z), cimag(z));
}
 | output=
1.000000+2.000000i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.9.2 | title=The cimag functions | p=197}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.9.2 | title=The cimag functions | p=178-179}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc creal}}
{{dsc see cpp | cpp/numeric/complex/imag2 | imag}}
{{dsc end}}

[[ar:c/numeric/complex/cimag]]
[[cs:c/numeric/complex/cimag]]
[[de:c/numeric/complex/cimag]]
[[es:c/numeric/complex/cimag]]
[[fr:c/numeric/complex/cimag]]
[[it:c/numeric/complex/cimag]]
[[ja:c/numeric/complex/cimag]]
[[ko:c/numeric/complex/cimag]]
[[pl:c/numeric/complex/cimag]]
[[pt:c/numeric/complex/cimag]]
[[ru:c/numeric/complex/cimag]]
[[tr:c/numeric/complex/cimag]]
[[zh:c/numeric/complex/cimag]]</text>
      <sha1>9hdtc0txpkeahhvljbajilpaivzoepf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/clog</title>
    <ns>0</ns>
    <id>9373</id>
    <revision>
      <id>77464</id>
      <parentid>77444</parentid>
      <timestamp>2015-03-26T13:59:30Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="4846">{{c/title|clogf|clog|clogl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1|
float complex       clogf( float complex z );
}}
{{dcl | since=c99 | num=2|
double complex      clog( double complex z );
}}
{{dcl | since=c99 | num=3|
long double complex clogl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define log( z )
}}
{{dcl end}}

@1-3@ Computes the complex natural (base-''e'') logarithm of {{tt|z}} with branch cut along the negative real axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|clogl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|clog}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|clogf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|logf}}, {{c|log}}, {{c|logl}}). If {{tt|z}} is imaginary, the corresponding complex number version is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, the complex natural logarithm of {{tt|z}} is returned, in the range of a strip in the interval {{math|[−iπ, +iπ]}} along the imaginary axis and mathematically unbounded along the real axis.

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* The function is continuous onto the branch cut taking into account the sign of imaginary part
* {{c|clog(conj(z)) {{==}} conj(clog(z))}}
* If {{tt|z}} is {{tt|-0+0i}}, the result is {{tt|-∞+πi}} and {{lc|FE_DIVBYZERO}} is raised
* If {{tt|z}} is {{tt|+0+0i}}, the result is {{tt|-∞+0i}} and {{lc|FE_DIVBYZERO}} is raised
* If {{tt|z}} is {{tt|x+∞i}} (for any finite x), the result is {{tt|+∞+πi/2}}
* If {{tt|z}} is {{tt|x+NaNi}} (for any finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|-∞+yi}} (for any finite positive y), the result is {{tt|-∞+πi}}
* If {{tt|z}} is {{tt|+∞+yi}} (for any finite positive y), the result is {{tt|-∞+0i}}
* If {{tt|z}} is {{tt|-∞+∞i}}, the result is {{tt|+∞+3πi/4}}
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|+∞+πi/4}}
* If {{tt|z}} is {{tt|±∞+NaNi}}, the result is {{tt|+∞+NaNi}}
* If {{tt|z}} is {{tt|NaN+yi}} (for any finite y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+∞i}}, the result is {{tt|+∞+NaNi}}
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

===Notes===
The natural logarithm of a complex number {{math|z}} with polar coordinate components {{math|(r,θ)}} equals {{math|ln r + i(θ+2nπ)}}, with the principal value {{math|ln r + iθ}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = clog(I); // r = 1, θ = pi/2
    printf(&quot;2*log(i) = %.1f%+fi\n&quot;, creal(2*z), cimag(2*z));

    double complex z2 = clog(sqrt(2)/2 + sqrt(2)/2*I); // r = 1, θ = pi/4
    printf(&quot;4*log(sqrt(2)/2+sqrt(2)i/2) = %.1f%+fi\n&quot;, creal(4*z2), cimag(4*z2));

    double complex z3 = clog(-1); // r = 1, θ = pi
    printf(&quot;log(-1+0i) = %.1f%+fi\n&quot;, creal(z3), cimag(z3));

    double complex z4 = clog(conj(-1)); // or clog(CMPLX(-1, -0.0)) in C11
    printf(&quot;log(-1-0i) (the other side of the cut) = %.1f%+fi\n&quot;, creal(z4), cimag(z4));
}
 | output=
2*log(i) = 0.0+3.141593i
4*log(sqrt(2)/2+sqrt(2)i/2) = 0.0+3.141593i
log(-1+0i) = 0.0+3.141593i
log(-1-0i) (the other side of the cut) = 0.0-3.141593i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.7.2 | title=The clog functions | p=195}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.3.2 | title=The clog functions | p=543-544}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.7.2 | title=The clog functions | p=176-177}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.3.2 | title=The clog functions | p=478-479}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc cexp}}
{{dsc inc | c/numeric/math/dsc log}}
{{dsc see cpp | cpp/numeric/complex/log}}
{{dsc end}}

[[ar:c/numeric/complex/clog]]
[[cs:c/numeric/complex/clog]]
[[de:c/numeric/complex/clog]]
[[es:c/numeric/complex/clog]]
[[fr:c/numeric/complex/clog]]
[[it:c/numeric/complex/clog]]
[[ja:c/numeric/complex/clog]]
[[ko:c/numeric/complex/clog]]
[[pl:c/numeric/complex/clog]]
[[pt:c/numeric/complex/clog]]
[[ru:c/numeric/complex/clog]]
[[tr:c/numeric/complex/clog]]
[[zh:c/numeric/complex/clog]]</text>
      <sha1>gni7zh10hojxzxyet62sjnrcsfna1u2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/complex</title>
    <ns>0</ns>
    <id>9354</id>
    <revision>
      <id>88883</id>
      <parentid>77422</parentid>
      <timestamp>2016-12-16T23:10:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link complex types</comment>
      <text xml:space="preserve" bytes="1044">{{c/title|complex}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |
#define complex _Complex
}}
{{dcl end}}

This macro expands to a type specifier used to identify [[c/language/arithmetic_types#Complex_floating_types|complex types]].

A program may undefine and perhaps then redefine the {{lc|complex}} macro.

===References===
{{ref std c11}}
{{ref std | section=7.3.1/4 | title=complex | p=188}}
{{ref std c99}}
{{ref std | section=7.3.1/2 | title=complex | p=170}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc imaginary}}
{{dsc end}}

[[ar:c/numeric/complex/complex]]
[[cs:c/numeric/complex/complex]]
[[de:c/numeric/complex/complex]]
[[es:c/numeric/complex/complex]]
[[fr:c/numeric/complex/complex]]
[[it:c/numeric/complex/complex]]
[[ja:c/numeric/complex/complex]]
[[ko:c/numeric/complex/complex]]
[[pl:c/numeric/complex/complex]]
[[pt:c/numeric/complex/complex]]
[[ru:c/numeric/complex/complex]]
[[tr:c/numeric/complex/complex]]
[[zh:c/numeric/complex/complex]]</text>
      <sha1>gf6t6griqv0895e7k289a8335lpmczy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/conj</title>
    <ns>0</ns>
    <id>9378</id>
    <revision>
      <id>77461</id>
      <parentid>77451</parentid>
      <timestamp>2015-03-26T13:52:11Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="2691">{{c/title|conjf|conj|conjl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num = 1 |
float complex       conjf( float complex z );
}}
{{dcl | since=c99 | num = 2 |
double complex      conj( double complex z );
}}
{{dcl | since=c99 | num = 3 |
long double complex conjl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define conj( z )
}}
{{dcl end}}

@1-3@ Computes the [[enwiki:Complex_conjugate|complex conjugate]] of {{tt|z}} by reversing the sign of the imaginary part.
@4@ Type-generic macro: if {{tt|z}} has type {{c|long double complex}}, {{c|long double imaginary}}, or {{c|long double}}, {{tt|conjl}} is called. If {{tt|z}}  has type {{c|float complex}}, {{c|float imaginary}}, or {{c|float}}, {{tt|conjf}} is called. If {{tt|z}} has type {{c|double complex}}, {{c|double imaginary}}, {{c|double}}, or any integer type, {{tt|conj}} is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
The complex conjugate of {{tt|z}}.

===Notes===
On C99 implementations that do not implement {{lc|I}} as {{lc|_Imaginary_I}}, {{tt|conj}} may be used to obtain complex numbers with negative zero imaginary part. In C11, the macro {{lc|CMPLX}} is used for that purpose.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = 1.0 + 2.0*I;
    double complex z2 = conj(z);
    printf(&quot;The conjugate of %.1f%+.1fi is %.1f%+.1fi\n&quot;,
            creal(z), cimag(z), creal(z2), cimag(z2));

    printf(&quot;Their product is %.1f%+.1fi\n&quot;, creal(z*z2), cimag(z*z2));
}
 | output=
The conjugate of 1.0+2.0i is 1.0-2.0i
Their product is 5.0+0.0i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.9.4 | title=The conj functions | p=198}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.9.3 | title=The conj functions | p=179}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/complex/conj}}
{{dsc end}}

[[ar:c/numeric/complex/conj]]
[[cs:c/numeric/complex/conj]]
[[de:c/numeric/complex/conj]]
[[es:c/numeric/complex/conj]]
[[fr:c/numeric/complex/conj]]
[[it:c/numeric/complex/conj]]
[[ja:c/numeric/complex/conj]]
[[ko:c/numeric/complex/conj]]
[[pl:c/numeric/complex/conj]]
[[pt:c/numeric/complex/conj]]
[[ru:c/numeric/complex/conj]]
[[tr:c/numeric/complex/conj]]
[[zh:c/numeric/complex/conj]]</text>
      <sha1>d3d6dnkv9th2749y91sgiwifl96rsaq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/cpow</title>
    <ns>0</ns>
    <id>9380</id>
    <revision>
      <id>77465</id>
      <parentid>77447</parentid>
      <timestamp>2015-03-26T14:01:46Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="3264">{{c/title|cpowf|cpow|cpowl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num =1 |
float complex       cpowf( float complex x, float complex y );
}}
{{dcl | since=c99 | num =2 |
double complex      cpow( double complex x, double complex y );
}}
{{dcl | since=c99 | num =3 |
long double complex cpowl( long double complex x, long double complex y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define pow( x, y )
}}
{{dcl end}}

@1-3@ Computes the complex power function x{{su|p=y}}, with branch cut for the first parameter along the negative real axis.
@4@ Type-generic macro: If any argument has type {{c|long double complex}}, {{tt|cpowl}} is called. if any argument has type {{c|double complex}}, {{tt|cpow}} is called, if any argument has type {{c|float complex}}, {{tt|cpowf}} is called. If the arguments are real or integer, then the macro invokes the corresponding real function ({{c|powf}}, {{c|pow}}, {{c|powl}}). If any argument is imaginary, the corresponding complex number version is called.

===Parameters===
{{par begin}}
{{par | x, y | complex argument}}
{{par end}}

===Return value===
If no errors occur, the complex power {{math|x{{su|p=y}}}}, is returned.

Errors and special cases are handled as if the operation is implemented by {{c|cexp(y*clog(x))}}, except that the implementation is allowed to treat special cases more carefully.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{    
    double complex z = cpow(1.0+2.0*I, 2);
    printf(&quot;(1+2i)^2 = %.1f%+.1fi\n&quot;, creal(z), cimag(z));
    
    double complex z2 = cpow(-1, 0.5);
    printf(&quot;(-1+0i)^0.5 = %.1f%+.1fi\n&quot;, creal(z2), cimag(z2));

    double complex z3 = cpow(conj(-1), 0.5); // other side of the cut
    printf(&quot;(-1-0i)^0.5 = %.1f%+.1fi\n&quot;, creal(z3), cimag(z3));

    double complex z4 = cpow(I, I); // i^i = exp(-pi/2)
    printf(&quot;i^i = %f%+fi\n&quot;, creal(z4), cimag(z4));
}
 | output=
(1+2i)^2 = -3.0+4.0i
(-1+0i)^0.5 = 0.0+1.0i
(-1-0i)^0.5 = 0.0-1.0i
i^i = 0.207880+0.000000i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.8.2 | title=The cpow functions | p=195-196}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.4.1 | title=The cpow functions | p=544}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.8.2 | title=The cpow functions | p=177}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.4.1 | title=The cpow functions | p=479}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc csqrt}}
{{dsc inc | c/numeric/math/dsc pow}}
{{dsc see cpp | cpp/numeric/complex/pow}}
{{dsc end}}

[[ar:c/numeric/complex/cpow]]
[[cs:c/numeric/complex/cpow]]
[[de:c/numeric/complex/cpow]]
[[es:c/numeric/complex/cpow]]
[[fr:c/numeric/complex/cpow]]
[[it:c/numeric/complex/cpow]]
[[ja:c/numeric/complex/cpow]]
[[ko:c/numeric/complex/cpow]]
[[pl:c/numeric/complex/cpow]]
[[pt:c/numeric/complex/cpow]]
[[ru:c/numeric/complex/cpow]]
[[tr:c/numeric/complex/cpow]]
[[zh:c/numeric/complex/cpow]]</text>
      <sha1>m30ptdm6gyg5x7jzorfka5wobex84nu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/cproj</title>
    <ns>0</ns>
    <id>9379</id>
    <revision>
      <id>89884</id>
      <parentid>77462</parentid>
      <timestamp>2017-01-28T15:59:56Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>for C version</comment>
      <text xml:space="preserve" bytes="3255">{{c/title|cprojf|cproj|cprojl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float       cprojf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double      cproj( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double cprojl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define cproj( z )
}}
{{dcl end}}

@1-3@ Computes the projection of {{tt|z}} on the Riemann sphere.
@4@ Type-generic macro: if {{tt|z}} has type {{c|long double complex}}, {{c|long double imaginary}}, or {{c|long double}}, {{tt|cprojl}} is called. If {{tt|z}}  has type {{c|float complex}}, {{c|float imaginary}}, or {{c|float}}, {{tt|cprojf}} is called. If {{tt|z}} has type {{c|double complex}}, {{c|double imaginary}}, {{c|double}}, or any integer type, {{tt|cproj}} is called.

For most {{tt|z}}, {{c|1=cproj(z)==z}}, but all complex infinities, even the numbers where one component is infinite and the other is NaN, become positive real infinity, {{c|INFINITY+0.0*I}} or {{c|INFINITY-0.0*I}}. The sign of the imaginary (zero) component is the sign of {{c|cimag(z)}}. 

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
The projection of {{tt|z}} on the Riemann sphere.

This function is fully specified for all possible inputs and is not subject to any errors described in [[c/numeric/math/math_errhandling|math_errhandling]]

===Notes===
The {{tt|cproj}} function helps model the Riemann sphere by mapping all infinities to one (give or take the sign of the imaginary zero), and should be used just before any operation, especially comparisons, that might give spurious results for any of the other infinities.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    double complex z1 = cproj(1 + 2*I);
    printf(&quot;cproj(1+2i) = %.1f%+.1fi\n&quot;, creal(z1),cimag(z1));

    double complex z2 = cproj(INFINITY+2.0*I);
    printf(&quot;cproj(Inf+2i) = %.1f%+.1fi\n&quot;, creal(z2),cimag(z2));

    double complex z3 = cproj(INFINITY-2.0*I);
    printf(&quot;cproj(Inf-2i) = %.1f%+.1fi\n&quot;, creal(z3),cimag(z3));
}
 | output=
cproj(1+2i) = 1.0+2.0i
cproj(Inf+2i) = inf+0.0i
cproj(Inf-2i) = inf-0.0i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.9.5 | title=The cproj functions | p=198}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.9.4 | title=The cproj functions | p=179}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/complex/proj}}
{{dsc end}}

[[ar:c/numeric/complex/cproj]]
[[cs:c/numeric/complex/cproj]]
[[de:c/numeric/complex/cproj]]
[[es:c/numeric/complex/cproj]]
[[fr:c/numeric/complex/cproj]]
[[it:c/numeric/complex/cproj]]
[[ja:c/numeric/complex/cproj]]
[[ko:c/numeric/complex/cproj]]
[[pl:c/numeric/complex/cproj]]
[[pt:c/numeric/complex/cproj]]
[[ru:c/numeric/complex/cproj]]
[[tr:c/numeric/complex/cproj]]
[[zh:c/numeric/complex/cproj]]</text>
      <sha1>22yrjpm8hjm8oqop5bzbvb1tthdck4p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/creal</title>
    <ns>0</ns>
    <id>9376</id>
    <revision>
      <id>77457</id>
      <parentid>77453</parentid>
      <timestamp>2015-03-26T13:40:30Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="2444">{{c/title|crealf|creal|creall}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float       crealf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double      creal( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double creall( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define creal( z )
}}
{{dcl end}}

@1-3@ Returns the real part of {{tt|z}}.
@4@ Type-generic macro: if {{tt|z}} has type {{c|long double complex}}, {{c|long double imaginary}}, or {{c|long double}}, {{tt|creall}} is called. If {{tt|z}}  has type {{c|float complex}}, {{c|float imaginary}}, or {{c|float}}, {{tt|crealf}} is called. If {{tt|z}} has type {{c|double complex}}, {{c|double imaginary}}, {{c|double}}, or any integer type, {{tt|creal}} is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
The real part of {{tt|z}}.

This function is fully specified for all possible inputs and is not subject to any errors described in [[c/numeric/math/math_errhandling|math_errhandling]]

===Notes===
For any complex variable {{tt|z}}, {{c|z {{==}} creal(z) + I*cimag(z)}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{    
    double complex z = 1.0 + 2.0*I;
    printf(&quot;%f%+fi\n&quot;, creal(z), cimag(z));
}
 | output=
1.000000+2.000000i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.9.6 | title=The creal functions | p=198-199}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.9.5 | title=The creal functions | p=180}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7 | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc cimag}}
{{dsc see cpp| cpp/numeric/complex/real2 | real}}
{{dsc end}}

[[ar:c/numeric/complex/creal]]
[[cs:c/numeric/complex/creal]]
[[de:c/numeric/complex/creal]]
[[es:c/numeric/complex/creal]]
[[fr:c/numeric/complex/creal]]
[[it:c/numeric/complex/creal]]
[[ja:c/numeric/complex/creal]]
[[ko:c/numeric/complex/creal]]
[[pl:c/numeric/complex/creal]]
[[pt:c/numeric/complex/creal]]
[[ru:c/numeric/complex/creal]]
[[tr:c/numeric/complex/creal]]
[[zh:c/numeric/complex/creal]]</text>
      <sha1>qsjpeitj6onjlcgo2wxpucddc2uwbnr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/csin</title>
    <ns>0</ns>
    <id>9363</id>
    <revision>
      <id>77467</id>
      <parentid>77435</parentid>
      <timestamp>2015-03-26T14:04:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="3161">{{c/title|csinf|csin|csinl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num = 1 |
float complex       csinf( float complex z );
}}
{{dcl | since=c99 | num = 2 |
double complex      csin( double complex z );
}}
{{dcl | since=c99 | num = 3 |
long double complex csinl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define sin( z )
}}
{{dcl end}}

@1-3@ Computes the complex sine of {{tt|z}}.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|csinl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|csin}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|csinf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|sinf}}, {{c|sin}}, {{c|sinl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|sinh}}, implementing the formula {{math|sin(iy) {{=}} i sinh(y)}}, and the return type of the macro is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, the complex sine of {{tt|z}}.

Errors and special cases are handled as if the operation is implemented by {{c|-I * csinh(I*z)}}

===Notes===
The sine is an entire function on the complex plane, and has no branch cuts.

Mathematical definition of the sine is {{math|sin z {{=}} {{mfrac|e{{su|p=iz}}-e{{su|p=-iz}}|2i}}}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = csin(1);  // behaves like real sine along the real line
    printf(&quot;sin(1+0i) = %f%+fi ( sin(1)=%f)\n&quot;, creal(z), cimag(z), sin(1));

    double complex z2 = csin(I); // behaves like sinh along the imaginary line 
    printf(&quot;sin(0+1i) = %f%+fi (sinh(1)=%f)\n&quot;, creal(z2), cimag(z2), sinh(1));
}
 | output=
sin(1+0i) = 0.841471+0.000000i ( sin(1)=0.841471)
sin(0+1i) = 0.000000+1.175201i (sinh(1)=1.175201)
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.5.5 | title=The csin functions | p=191-192}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.5.5 | title=The csin functions | p=173}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc ccos}}
{{dsc inc | c/numeric/complex/dsc ctan}}
{{dsc inc | c/numeric/complex/dsc casin}}
{{dsc inc | c/numeric/math/dsc sin}}
{{dsc see cpp | cpp/numeric/complex/sin}}
{{dsc end}}

[[ar:c/numeric/complex/csin]]
[[cs:c/numeric/complex/csin]]
[[de:c/numeric/complex/csin]]
[[es:c/numeric/complex/csin]]
[[fr:c/numeric/complex/csin]]
[[it:c/numeric/complex/csin]]
[[ja:c/numeric/complex/csin]]
[[ko:c/numeric/complex/csin]]
[[pl:c/numeric/complex/csin]]
[[pt:c/numeric/complex/csin]]
[[ru:c/numeric/complex/csin]]
[[tr:c/numeric/complex/csin]]
[[zh:c/numeric/complex/csin]]</text>
      <sha1>npnvr09agrn1s935n47ijw543342bcl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/csinh</title>
    <ns>0</ns>
    <id>9366</id>
    <revision>
      <id>77472</id>
      <parentid>77441</parentid>
      <timestamp>2015-03-26T14:18:10Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="4831">{{c/title|csinhf|csinh|csinhl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float complex       csinhf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double complex      csinh( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double complex csinhl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define sinh( z )
}}
{{dcl end}}

@1-3@ Computes the complex hyperbolic sine of {{tt|z}}.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|csinhl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|csinh}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|csinhf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|sinhf}}, {{c|sinh}}, {{c|sinhl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|sin}}, implementing the formula {{math|sinh(iy) {{=}} i sin(y)}}, and the return type is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===

If no errors occur, complex hyperbolic sine of {{tt|z}} is returned

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|csinh(conj(z)) {{==}} conj(csinh(z))}}
* {{c|csinh(z) {{==}} -csinh(-z)}}
* If {{tt|z}} is {{tt|+0+0i}}, the result is {{tt|+0+0i}}
* If {{tt|z}} is {{tt|+0+∞i}}, the result is {{tt|±0+NaNi}} (the sign of the real part is unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|+0+NaNi}}, the result is {{tt|±0+NaNi}}
* If {{tt|z}} is {{tt|x+∞i}} (for any positive finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|x+NaNi}} (for any positive finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|+∞+0i}}, the result is {{tt|+∞+0i}}
* If {{tt|z}} is {{tt|+∞+yi}} (for any positive finite y), the result is {{tt|+∞+cis(y)}}
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|±∞+NaNi}} (the sign of the real part is  unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|+∞+NaNi}}, the result is {{tt|±∞+NaNi}} (the sign of the real part is  unspecified)
* If {{tt|z}} is {{tt|NaN+0i}}, the result is {{tt|NaN+0i}}
* If {{tt|z}} is {{tt|NaN+yi}} (for any finite nonzero y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

where {{math|cis(y)}} is {{math|cos(y) + i sin(y)}}

===Notes===
Mathematical definition of hyperbolic sine is {{math|sinh z {{=}} {{mfrac|e{{su|p=z}}-e{{su|p=-z}}|2}}}}

Hyperbolic sine is an entire function in the complex plane and has no branch cuts. It is periodic with respect to the imaginary component, with period 2&amp;pi;i 

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = csinh(1);  // behaves like real sinh along the real line
    printf(&quot;sinh(1+0i) = %f%+fi (sinh(1)=%f)\n&quot;, creal(z), cimag(z), sinh(1));

    double complex z2 = csinh(I); // behaves like sine along the imaginary line
    printf(&quot;sinh(0+1i) = %f%+fi ( sin(1)=%f)\n&quot;, creal(z2), cimag(z2), sin(1));
}
 | output=
sinh(1+0i) = 1.175201+0.000000i (sinh(1)=1.175201)
sinh(0+1i) = 0.000000+0.841471i ( sin(1)=0.841471)
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.6.5 | title=The csinh functions | p=194}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.2.5 | title=The csinh functions | p=541-542}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.6.5 | title=The csinh functions | p=175-176}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.2.5 | title=The csinh functions | p=476-477}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc ccosh}}
{{dsc inc | c/numeric/complex/dsc ctanh}}
{{dsc inc | c/numeric/complex/dsc casinh}}
{{dsc inc | c/numeric/math/dsc sinh}}
{{dsc see cpp | cpp/numeric/complex/sinh}}
{{dsc end}}

[[ar:c/numeric/complex/csinh]]
[[cs:c/numeric/complex/csinh]]
[[de:c/numeric/complex/csinh]]
[[es:c/numeric/complex/csinh]]
[[fr:c/numeric/complex/csinh]]
[[it:c/numeric/complex/csinh]]
[[ja:c/numeric/complex/csinh]]
[[ko:c/numeric/complex/csinh]]
[[pl:c/numeric/complex/csinh]]
[[pt:c/numeric/complex/csinh]]
[[ru:c/numeric/complex/csinh]]
[[tr:c/numeric/complex/csinh]]
[[zh:c/numeric/complex/csinh]]</text>
      <sha1>r2ezf0daef11ii4f4g9iy57s630gron</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/csqrt</title>
    <ns>0</ns>
    <id>9374</id>
    <revision>
      <id>77466</id>
      <parentid>77448</parentid>
      <timestamp>2015-03-26T14:03:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="4066">{{c/title|csqrtf|csqrt|csqrtl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |num=1 |
float complex       csqrtf( float complex z );
}}
{{dcl | since=c99 |num=2 |
double complex      csqrt( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double complex csqrtl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define sqrt( z )
}}
{{dcl end}}

@1-3@ Computes the complex square root of {{tt|z}} with branch cut along the negative real axis.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|csqrtl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|csqrt}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|csqrtf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|sqrtf}}, {{c|sqrt}}, {{c|sqrtl}}). If {{tt|z}} is imaginary, the corresponding complex number version is called.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===
If no errors occur, returns the square root of {{tt|z}}, in the range of the right half-plane, including the imaginary axis ({{math|[0; +∞)}} along the real axis and {{math|(−∞; +∞)}} along the imaginary axis.)

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* The function is continuous onto the branch cut taking into account the sign of imaginary part
* {{c|csqrt(conj(z)) {{==}} conj(csqrt(z))}}
* If {{tt|z}} is {{tt|±0+0i}}, the result is {{tt|+0+0i}}
* If {{tt|z}} is {{tt|x+∞i}}, the result is {{tt|+∞+∞i}} even if x is NaN
* If {{tt|z}} is {{tt|x+NaNi}}, the result is {{tt|NaN+NaNi}} (unless x is ±∞) and  {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|-∞+yi}}, the result is {{tt|+0+∞i}} for finite positive y
* If {{tt|z}} is {{tt|+∞+yi}}, the result is {{tt|+∞+0i)}} for finite positive y
* If {{tt|z}} is {{tt|-∞+NaNi}}, the result is {{tt|NaN±∞}} (sign of imaginary part unspecified)
* If {{tt|z}} is {{tt|+∞+NaNi}}, the result is {{tt|+∞+NaNi}}
* If {{tt|z}} is {{tt|NaN+yi}}, the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z1 = csqrt(-4);
    printf(&quot;Square root of -4 is %.1f%+.1fi\n&quot;, creal(z1), cimag(z1));

    double complex z2 = csqrt(conj(-4)); // or, in C11, CMPLX(-4, -0.0)
    printf(&quot;Square root of -4-0i, the other side of the cut, is &quot;
           &quot;%.1f%+.1fi\n&quot;, creal(z2), cimag(z2));
}
 | output=
Square root of -4 is 0.0+2.0i
Square root of -4-0i, the other side of the cut, is 0.0-2.0i
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.8.3 | title=The csqrt functions | p=196}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.4.2 | title=The csqrt functions | p=544}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.8.3 | title=The csqrt functions | p=178}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.4.2 | title=The csqrt functions | p=479}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc cpow}}
{{dsc inc | c/numeric/math/dsc sqrt}}
{{dsc see cpp | cpp/numeric/complex/sqrt}}
{{dsc end}}

[[ar:c/numeric/complex/csqrt]]
[[cs:c/numeric/complex/csqrt]]
[[de:c/numeric/complex/csqrt]]
[[es:c/numeric/complex/csqrt]]
[[fr:c/numeric/complex/csqrt]]
[[it:c/numeric/complex/csqrt]]
[[ja:c/numeric/complex/csqrt]]
[[ko:c/numeric/complex/csqrt]]
[[pl:c/numeric/complex/csqrt]]
[[pt:c/numeric/complex/csqrt]]
[[ru:c/numeric/complex/csqrt]]
[[tr:c/numeric/complex/csqrt]]
[[zh:c/numeric/complex/csqrt]]</text>
      <sha1>siqsapyvo4v362ofgdd21p0jm7q1fye</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/ctan</title>
    <ns>0</ns>
    <id>9364</id>
    <revision>
      <id>77468</id>
      <parentid>77431</parentid>
      <timestamp>2015-03-26T14:09:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="3602">{{c/title|ctanf|ctan|ctanl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float complex       ctanf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double complex      ctan( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double complex ctanl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define tan( z )
}}
{{dcl end}}

@1-3@ Computes the complex tangent of {{tt|z}}.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|ctanl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|ctan}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|ctanf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|tanf}}, {{c|tan}}, {{c|tanl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|tanh}}, implementing the formula {{math|tan(iy) {{=}} i tanh(y)}}, and the return type is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===

If no errors occur, the complex tangent of {{tt|z}} is returned.

Errors and special cases are handled as if the operation is implemented by {{c|-i * ctanh(i*z)}}, where {{tt|i}} is the imaginary unit.

===Notes===
Tangent is an analytical function on the complex plain and has no branch cuts. It is periodic with respect to the real component, with period &amp;pi;i, and has poles of the first order along the real line, at coordinates {{math|(π(1/2 + n), 0)}}. However no common floating-point representation is able to represent π/2 exactly, thus there is no value of the argument for which a pole error occurs.

Mathematical definition of the tangent is {{math|tan z {{=}} {{mfrac|i(e{{su|p=-iz}}-e{{su|p=iz}})|e{{su|p=-iz}}+e{{su|p=iz}}}}}}

===Example===

{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = ctan(1);  // behaves like real tangent along the real line
    printf(&quot;tan(1+0i) = %f%+fi ( tan(1)=%f)\n&quot;, creal(z), cimag(z), tan(1));

    double complex z2 = ctan(I); // behaves like tanh along the imaginary line 
    printf(&quot;tan(0+1i) = %f%+fi (tanh(1)=%f)\n&quot;, creal(z2), cimag(z2), tanh(1));
}
 | output=
tan(1+0i) = 1.557408+0.000000i ( tan(1)=1.557408)
tan(0+1i) = 0.000000+0.761594i (tanh(1)=0.761594)
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.5.6 | title=The ctan functions | p=192}}
{{ref std | section=7.25    | title=Type-generic complex &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.5.6 | title=The ctan functions | p=174}}
{{ref std | section=7.22    | title=Type-generic complex &lt;tgcomplex.h&gt; | p=335-337}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc ctanh}}
{{dsc inc | c/numeric/complex/dsc csin}}
{{dsc inc | c/numeric/complex/dsc ccos}}
{{dsc inc | c/numeric/complex/dsc catan}}
{{dsc inc | c/numeric/math/dsc tan}}
{{dsc see cpp | cpp/numeric/complex/tan}}
{{dsc end}}

[[ar:c/numeric/complex/ctan]]
[[cs:c/numeric/complex/ctan]]
[[de:c/numeric/complex/ctan]]
[[es:c/numeric/complex/ctan]]
[[fr:c/numeric/complex/ctan]]
[[it:c/numeric/complex/ctan]]
[[ja:c/numeric/complex/ctan]]
[[ko:c/numeric/complex/ctan]]
[[pl:c/numeric/complex/ctan]]
[[pt:c/numeric/complex/ctan]]
[[ru:c/numeric/complex/ctan]]
[[tr:c/numeric/complex/ctan]]
[[zh:c/numeric/complex/ctan]]</text>
      <sha1>26ko1zzs2lz957nkpv4wya6ue5t8t73</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/ctanh</title>
    <ns>0</ns>
    <id>9365</id>
    <revision>
      <id>77474</id>
      <parentid>77442</parentid>
      <timestamp>2015-03-26T14:21:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="5115">{{c/title|ctanhf|ctanh|ctanhl}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 | num=1 |
float complex       ctanhf( float complex z );
}}
{{dcl | since=c99 | num=2 |
double complex      ctanh( double complex z );
}}
{{dcl | since=c99 | num=3 |
long double complex ctanhl( long double complex z );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define tanh( z )
}}
{{dcl end}}

@1-3@ Computes the complex hyperbolic tangent of {{tt|z}}.
@4@ Type-generic macro: If {{tt|z}} has type {{c|long double complex}}, {{tt|ctanhl}} is called. if {{tt|z}} has type {{c|double complex}}, {{tt|ctanh}} is called, if {{tt|z}} has type {{c|float complex}}, {{tt|ctanhf}} is called. If {{tt|z}} is real or integer, then the macro invokes the corresponding real function ({{c|tanhf}}, {{c|tanh}}, {{c|tanhl}}). If {{tt|z}} is imaginary, then the macro invokes the corresponding real version of the function {{lc|tan}}, implementing the formula {{math|tanh(iy) {{=}} i tan(y)}}, and the return type is imaginary.

===Parameters===
{{par begin}}
{{par | z | complex argument}}
{{par end}}

===Return value===

If no errors occur, complex hyperbolic tangent of {{tt|z}} is returned

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* {{c|ctanh(conj(z)) {{==}} conj(ctanh(z))}}
* {{c|ctanh(-z) {{==}} -ctanh(z)}}
* If {{tt|z}} is {{tt|+0+0i}}, the result is {{tt|+0+0i}}
* If {{tt|z}} is {{tt|x+∞i}} (for any&lt;ref&gt;per [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1892.htm#dr_471 DR471], this only holds for non-zero x. If {{tt|z}} is {{tt|0+∞i}}, the result should be {{tt|0+NaNi}}&lt;/ref&gt; finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|x+NaN}} (for any&lt;ref&gt;per [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1892.htm#dr_471 DR471], this only holds for non-zero x. If {{tt|z}} is {{tt|0+NaNi}}, the result should be {{tt|0+NaNi}}&lt;/ref&gt; finite x), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|+∞+yi}} (for any finite positive y), the result is {{tt|1+0i}}
* If {{tt|z}} is {{tt|+∞+∞i}}, the result is {{tt|1±0i}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|+∞+NaNi}}, the result is {{tt|1±0i}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|NaN+0i}}, the result is {{tt|NaN+0i}}
* If {{tt|z}} is {{tt|NaN+yi}} (for any non-zero y), the result is {{tt|NaN+NaNi}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|NaN+NaNi}}, the result is {{tt|NaN+NaNi}}
&lt;references/&gt;
===Notes===
Mathematical definition of hyperbolic tangent is {{math|cosh z {{=}} {{mfrac|e{{su|p=z}}-e{{su|p=-z}}|e{{su|p=z}}+e{{su|p=-z}}}}}}

Hyperbolic tangent is an analytical function on the complex plain and has no branch cuts. It is periodic with respect to the imaginary component, with period &amp;pi;i, and has poles of the first order along the imaginary line, at coordinates {{math|(0, π(1/2 + n))}}. However no common floating-point representation is able to represent π/2 exactly, thus there is no value of the argument for which a pole error occurs.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double complex z = ctanh(1);  // behaves like real tanh along the real line
    printf(&quot;tanh(1+0i) = %f%+fi (tanh(1)=%f)\n&quot;, creal(z), cimag(z), tanh(1));

    double complex z2 = ctanh(I); // behaves like tangent along the imaginary line
    printf(&quot;tanh(0+1i) = %f%+fi ( tan(1)=%f)\n&quot;, creal(z2), cimag(z2), tan(1));
}
 | output=
tanh(1+0i) = 0.761594+0.000000i (tanh(1)=0.761594)
tanh(0+1i) = 0.000000+1.557408i ( tan(1)=1.557408)
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.6.6 | title=The ctanh functions | p=194}}
{{ref std | section=7.25    | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=G.6.2.6 | title=The ctanh functions | p=542}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=545}}
{{ref std c99}}
{{ref std | section=7.3.6.6 | title=The ctanh functions | p=176}}
{{ref std | section=7.22    | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=G.6.2.6 | title=The ctanh functions | p=477}}
{{ref std | section=G.7     | title=Type-generic math &lt;tgmath.h&gt; | p=480}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc csinh}}
{{dsc inc | c/numeric/complex/dsc ccosh}}
{{dsc inc | c/numeric/complex/dsc catanh}}
{{dsc inc | c/numeric/math/dsc tanh}}
{{dsc see cpp | cpp/numeric/complex/tanh}}
{{dsc end}}

[[ar:c/numeric/complex/ctanh]]
[[cs:c/numeric/complex/ctanh]]
[[de:c/numeric/complex/ctanh]]
[[es:c/numeric/complex/ctanh]]
[[fr:c/numeric/complex/ctanh]]
[[it:c/numeric/complex/ctanh]]
[[ja:c/numeric/complex/ctanh]]
[[ko:c/numeric/complex/ctanh]]
[[pl:c/numeric/complex/ctanh]]
[[pt:c/numeric/complex/ctanh]]
[[ru:c/numeric/complex/ctanh]]
[[tr:c/numeric/complex/ctanh]]
[[zh:c/numeric/complex/ctanh]]</text>
      <sha1>r0zhxzl9if47j2gv8kqcmy44thc7eii</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/complex/imaginary</title>
    <ns>0</ns>
    <id>9355</id>
    <revision>
      <id>77425</id>
      <parentid>77423</parentid>
      <timestamp>2015-03-25T13:30:25Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs</comment>
      <text xml:space="preserve" bytes="2267">{{c/title|imaginary}}
{{c/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex.h}}
{{dcl | since=c99 |
#define imaginary _Imaginary
}}
{{dcl end}}

This macro expands to the keyword [[c/keyword/_Imaginary|_Imaginary]].

This is a convenience macro that makes it possible to use {{c|float imaginary}}, {{c|double imaginary}}, and {{c|long double imaginary}} as an alternative way to write the three pure imaginary C types {{c|float _Imaginary}}, {{c|double _Imaginary}}, and {{c|long double _Imaginary}}

As with any pure imaginary number support in C, this macro is only defined if the imaginary numbers are supported.
{{rev begin}}
{{rev|since=c99|until=c11|
A compiler that defines {{c|__STDC_IEC_559_COMPLEX__}} is not required to support imaginary numbers. POSIX recommends checking if the macro {{c|_Imaginary_I}} is defined to identify imaginary number support.
}}
{{rev|since=c11|
Imaginary numbers are supported if {{c|__STDC_IEC_559_COMPLEX__}} is defined.
}}
{{rev end}}

===Notes===
Programs are allowed to undefine and perhaps redefine the {{c|imaginary}} macro.

===Example===
{{example| 
|code=
#include &lt;stdio.h&gt;
#include &lt;complex.h&gt;

int main(void)
{
    double imaginary i = 2.0*I; // pure imaginary
    double f = 1.0; // pure real
    double complex z = f + i; // complex number
    printf(&quot;z = %.1f%+.1fi\n&quot;, creal(z), cimag(z));
}
|p=1
|output=
z = 1.0+2.0i &lt;!-- obtained with the Oracle C compiler --&gt;
}}

===References===
{{ref std c11}}
{{ref std | section=7.3.1/5 | title=imaginary | p=188}}
{{ref std | section=G.6/1   | title=imaginary | p=537}}
{{ref std c99}}
{{ref std | section=7.3.1/3 | title=imaginary | p=170}}
{{ref std | section=G.6/1   | title=imaginary | p=472}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/complex/dsc complex}}
{{dsc end}}

[[ar:c/numeric/complex/imaginary]]
[[cs:c/numeric/complex/imaginary]]
[[de:c/numeric/complex/imaginary]]
[[es:c/numeric/complex/imaginary]]
[[fr:c/numeric/complex/imaginary]]
[[it:c/numeric/complex/imaginary]]
[[ja:c/numeric/complex/imaginary]]
[[ko:c/numeric/complex/imaginary]]
[[pl:c/numeric/complex/imaginary]]
[[pt:c/numeric/complex/imaginary]]
[[ru:c/numeric/complex/imaginary]]
[[tr:c/numeric/complex/imaginary]]
[[zh:c/numeric/complex/imaginary]]</text>
      <sha1>6raz4rqgevwkylu60c1aq7i60q8molu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv</title>
    <ns>0</ns>
    <id>6421</id>
    <revision>
      <id>78965</id>
      <parentid>77100</parentid>
      <timestamp>2015-06-13T11:55:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs to future library directions</comment>
      <text xml:space="preserve" bytes="2622">{{title|Floating-point environment}}
{{c/numeric/fenv/navbar}}

The floating-point environment is the set of floating-point status flags and control modes supported by the implementation. It is thread-local, each thread inherits the initial state of its floating-point environment from the parent thread. Floating-point operations modify the floating-point status flags to indicate abnormal results or auxiliary information. The state of floating-point control modes affects the outcomes of some floating-point operations.

The floating-point environment access and modification is only meaningful when {{ltt|cpp/preprocessor/impl|#pragma STDC FENV_ACCESS}} is set to {{tt|ON}}. Otherwise the implementation is free to assume that floating-point control modes are always the default ones and that floating-point status flags are never tested or modified. In practice, few current compilers, such as HP aCC, Oracle Studio, and IBM XL, support the {{tt|#pragma}} explicitly, but most compilers allow meaningful access to the floating-point environment anyway.

===Types===
{{dsc begin}}
{{dsc header | fenv.h}}
{{dsc | {{c|fenv_t}}  | The type representing the entire floating-point environment | notes={{mark c99}}}}
{{dsc | {{c|fexcept_t}} | The type representing all floating-point status flags collectively | notes={{mark c99}}}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feclearexcept}}
{{dsc inc | c/numeric/fenv/dsc fetestexcept}}
{{dsc inc | c/numeric/fenv/dsc feraiseexcept}}
{{dsc inc | c/numeric/fenv/dsc feexceptflag}}
{{dsc inc | c/numeric/fenv/dsc feround}}
{{dsc inc | c/numeric/fenv/dsc feenv}}
{{dsc inc | c/numeric/fenv/dsc feholdexcept}}
{{dsc inc | c/numeric/fenv/dsc feupdateenv}}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc FE_exceptions}}
{{dsc inc | c/numeric/fenv/dsc FE_round}}
{{dsc inc | c/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.6  | title=Floating-point environment &lt;fenv.h&gt; | p=206-215}}
{{ref std | section=7.31.4 | title=Floating-point environment &lt;fenv.h&gt; | p=455}}
{{ref std c99}}
{{ref std | section=7.6  | title=Floating-point environment &lt;fenv.h&gt; | p=187-196}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/fenv | Floating-point environment}}
{{dsc end}}

[[ar:c/numeric/fenv]]
[[cs:c/numeric/fenv]]
[[de:c/numeric/fenv]]
[[es:c/numeric/fenv]]
[[fr:c/numeric/fenv]]
[[it:c/numeric/fenv]]
[[ja:c/numeric/fenv]]
[[ko:c/numeric/fenv]]
[[pl:c/numeric/fenv]]
[[pt:c/numeric/fenv]]
[[ru:c/numeric/fenv]]
[[tr:c/numeric/fenv]]
[[zh:c/numeric/fenv]]</text>
      <sha1>k161e0od2xcq6d6i46e6ypcwxqc0eqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/FE DFL ENV</title>
    <ns>0</ns>
    <id>8619</id>
    <revision>
      <id>87498</id>
      <parentid>77217</parentid>
      <timestamp>2016-08-29T18:44:22Z</timestamp>
      <contributor>
        <username>Casey</username>
        <id>2826</id>
      </contributor>
      <minor/>
      <comment>Remove excess brackets from the header name.</comment>
      <text xml:space="preserve" bytes="3199">{{c/title|FE_DFL_ENV}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
#define FE_DFL_ENV  /*implementation defined*/
}}
{{dcl end}}

The macro constant {{lc|FE_DFL_ENV}} expands to an expression of type {{c|const fenv_t*}}, which points to a full copy of the default floating-point environment, that is, the environment as loaded at program startup.

Additional macros that begin with {{tt|FE_}} followed by uppercase letters, and have the type {{c|const fenv_t*}}, may be supported by an implementation.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;fenv.h&gt;
 
#pragma STDC FENV_ACCESS ON
 
void show_fe_exceptions(void)
{
    printf(&quot;current exceptions raised: &quot;);
    if(fetestexcept(FE_DIVBYZERO))     printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))       printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))       printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))      printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW))     printf(&quot; FE_UNDERFLOW&quot;);
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(&quot; none&quot;);
    printf(&quot;\n&quot;);
}

void show_fe_rounding_method(void)
{
    printf(&quot;current rounding method:    &quot;);
    switch (fegetround()) {
           case FE_TONEAREST:  printf (&quot;FE_TONEAREST&quot;);  break;
           case FE_DOWNWARD:   printf (&quot;FE_DOWNWARD&quot;);   break;
           case FE_UPWARD:     printf (&quot;FE_UPWARD&quot;);     break;
           case FE_TOWARDZERO: printf (&quot;FE_TOWARDZERO&quot;); break;
           default:            printf (&quot;unknown&quot;);
    };
    printf(&quot;\n&quot;);
}
 
void show_fe_environment(void)
{
    show_fe_exceptions();
    show_fe_rounding_method();
} 

int main()
{
    printf(&quot;On startup:\n&quot;);
    show_fe_environment();
    
    // Change environment
    fesetround(FE_DOWNWARD);     // change rounding mode
    feraiseexcept(FE_INVALID);   // raise exception
    printf(&quot;\nBefore restoration:\n&quot;);
    show_fe_environment();
    
    fesetenv(FE_DFL_ENV);    // restore
    printf(&quot;\nAfter restoring default environment:\n&quot;);
    show_fe_environment();
}
 | output=
On startup:
current exceptions raised:  none
current rounding method:    FE_TONEAREST

Before restoration:
current exceptions raised:  FE_INVALID
current rounding method:    FE_DOWNWARD

After restoring default environment:
current exceptions raised:  none
current rounding method:    FE_TONEAREST
}}

===References===
{{ref std c11}}
{{ref std | section=7.6/9 | title=Floating-point environment &lt;fenv.h&gt; | p=208}}
{{ref std c99}}
{{ref std | section=7.6/8 | title=Floating-point environment &lt;fenv.h&gt; | p=188-189}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feenv}}
{{dsc inc | c/numeric/fenv/dsc feupdateenv}}
{{dsc see cpp | cpp/numeric/fenv/FE_DFL_ENV}}
{{dsc end}}

[[ar:c/numeric/fenv/FE_DFL_ENV]]
[[cs:c/numeric/fenv/FE_DFL_ENV]]
[[de:c/numeric/fenv/FE_DFL_ENV]]
[[es:c/numeric/fenv/FE_DFL_ENV]]
[[fr:c/numeric/fenv/FE_DFL_ENV]]
[[it:c/numeric/fenv/FE_DFL_ENV]]
[[ja:c/numeric/fenv/FE_DFL_ENV]]
[[ko:c/numeric/fenv/FE_DFL_ENV]]
[[pl:c/numeric/fenv/FE_DFL_ENV]]
[[pt:c/numeric/fenv/FE_DFL_ENV]]
[[ru:c/numeric/fenv/FE_DFL_ENV]]
[[tr:c/numeric/fenv/FE_DFL_ENV]]
[[zh:c/numeric/fenv/FE_DFL_ENV]]</text>
      <sha1>1l7m2fcg13cl9sgnrjml27cd1kdix6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/FE exceptions</title>
    <ns>0</ns>
    <id>8617</id>
    <revision>
      <id>87816</id>
      <parentid>77214</parentid>
      <timestamp>2016-10-04T18:19:51Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4641">{{title|&lt;small&gt;FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW, FE_ALL_EXCEPT&lt;/small&gt;}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
#define FE_DIVBYZERO    /*implementation defined power of 2*/
}}
{{dcl | since=c99 |
#define FE_INEXACT      /*implementation defined power of 2*/
}}
{{dcl | since=c99 |
#define FE_INVALID      /*implementation defined power of 2*/
}}
{{dcl | since=c99 |
#define FE_OVERFLOW     /*implementation defined power of 2*/
}}
{{dcl | since=c99 |
#define FE_UNDERFLOW    /*implementation defined power of 2*/
}}
{{dcl | since=c99 |
#define FE_ALL_EXCEPT  FE_DIVBYZERO {{!}} FE_INEXACT {{!}} \
                       FE_INVALID {{!}} FE_OVERFLOW {{!}}  \
                       FE_UNDERFLOW
}}
{{dcl end}}

All these macro constants (except {{lc|FE_ALL_EXCEPT}}) expand to integer constant expressions that are distinct powers of 2, which uniquely identify all supported floating-point exceptions. Each macro is only defined if it is supported. 

The macro constant {{lc|FE_ALL_EXCEPT}}, which expands to the bitwise OR of all other {{tt|FE_*}}, is always defined and is zero if floating-point exceptions are not supported by the implementation.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|FE_DIVBYZERO}} | pole error occurred in an earlier floating-point operation}}
{{dsc | {{tt|FE_INEXACT}}   | inexact result: rounding was necessary to store the result of an earlier floating-point operation}}
{{dsc | {{tt|FE_INVALID}}   | domain error occurred in an earlier floating-point operation}}
{{dsc | {{tt|FE_OVERFLOW}}  | the result of an earlier floating-point operation was too large to be representable}}
{{dsc | {{tt|FE_UNDERFLOW}} | the result of an earlier floating-point operation was subnormal with a loss of precision}}
{{dsc | {{tt|FE_ALL_EXCEPT}} | bitwise OR of all supported floating-point exceptions}}
{{dsc end}}

The implementation may define additional macro constants in {{tt|&lt;fenv.h&gt;}} to identify additional floating-point exceptions. All such constants begin with {{tt|FE_}} followed by at least one uppercase letter.

See [[c/numeric/math/math_errhandling|math_errhandling]] for further details.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
void show_fe_exceptions(void)
{
    printf(&quot;exceptions raised:&quot;);
    if(fetestexcept(FE_DIVBYZERO)) printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))   printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))   printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))  printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW)) printf(&quot; FE_UNDERFLOW&quot;);
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;\n&quot;);
}

int main(void)
{
    printf(&quot;MATH_ERREXCEPT is %s\n&quot;,
           math_errhandling &amp; MATH_ERREXCEPT ? &quot;set&quot; : &quot;not set&quot;);

    printf(&quot;0.0/0.0 = %f\n&quot;, 0.0/0.0);
    show_fe_exceptions();

    printf(&quot;1.0/0.0 = %f\n&quot;, 1.0/0.0);
    show_fe_exceptions();

    printf(&quot;1.0/10.0 = %f\n&quot;, 1.0/10.0);
    show_fe_exceptions();

    printf(&quot;sqrt(-1) = %f\n&quot;, sqrt(-1));
    show_fe_exceptions();

    printf(&quot;DBL_MAX*2.0 = %f\n&quot;, DBL_MAX*2.0);
    show_fe_exceptions();

    printf(&quot;nextafter(DBL_MIN/pow(2.0,52),0.0) = %.1f\n&quot;,
                      nextafter(DBL_MIN/pow(2.0,52),0.0));
    show_fe_exceptions();
}
 | p=true
 | output=
MATH_ERREXCEPT is set
0.0/0.0 = nan
exceptions raised: FE_INVALID
1.0/0.0 = inf
exceptions raised: FE_DIVBYZERO
1.0/10.0 = 0.100000
exceptions raised: FE_INEXACT
sqrt(-1) = -nan
exceptions raised: FE_INVALID
DBL_MAX*2.0 = inf
exceptions raised: FE_INEXACT FE_OVERFLOW
nextafter(DBL_MIN/pow(2.0,52),0.0) = 0.0
exceptions raised: FE_INEXACT FE_UNDERFLOW
}}

===References===
{{ref std c11}}
{{ref std | section=7.6/6 | title=Floating-point environment &lt;fenv.h&gt; | p=207}}
{{ref std c99}}
{{ref std | section=7.6/5 | title=Floating-point environment &lt;fenv.h&gt; | p=188}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc math_errhandling}}
{{dsc see cpp | cpp/numeric/fenv/FE_exceptions | floating point exception macros | nomono=true}}
{{dsc end}}

[[ar:c/numeric/fenv/FE_exceptions]]
[[cs:c/numeric/fenv/FE_exceptions]]
[[de:c/numeric/fenv/FE_exceptions]]
[[es:c/numeric/fenv/FE_exceptions]]
[[fr:c/numeric/fenv/FE_exceptions]]
[[it:c/numeric/fenv/FE_exceptions]]
[[ja:c/numeric/fenv/FE_exceptions]]
[[ko:c/numeric/fenv/FE_exceptions]]
[[pl:c/numeric/fenv/FE_exceptions]]
[[pt:c/numeric/fenv/FE_exceptions]]
[[ru:c/numeric/fenv/FE_exceptions]]
[[tr:c/numeric/fenv/FE_exceptions]]
[[zh:c/numeric/fenv/FE_exceptions]]</text>
      <sha1>7d765c0y68uu9ibom0dbyed233qothq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/FE round</title>
    <ns>0</ns>
    <id>8618</id>
    <revision>
      <id>87817</id>
      <parentid>77215</parentid>
      <timestamp>2016-10-04T18:23:27Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4554">{{title|&lt;small&gt;FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD&lt;/small&gt;}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
#define FE_DOWNWARD     /*implementation defined*/
}} 
{{dcl | since=c99 |
#define FE_TONEAREST    /*implementation defined*/
}}
{{dcl | since=c99 |
#define FE_TOWARDZERO   /*implementation defined*/
}}
{{dcl | since=c99 |
#define FE_UPWARD       /*implementation defined*/
}}
{{dcl end}}

Each of these macro constants expands to a nonnegative integer constant expression, which can be used with {{lc|fesetround}} and {{lc|fegetround}} to indicate one of the supported floating-point rounding modes. The implementation may define additional rounding mode constants in {{tt|&lt;fenv.h&gt;}}, which should all begin with {{tt|FE_}} followed by at least one uppercase letter. Each macro is only defined if it is supported.

On most implementations, these macro constants expand to the values equal to the values of {{lc|FLT_ROUNDS}} and {{c|float_round_style}}

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|FE_DOWNWARD}}  | rounding towards negative infinity}}
{{dsc | {{tt|FE_TONEAREST}} | rounding towards nearest integer}}
{{dsc | {{tt|FE_TOWARDZERO}} | rounding towards zero}}
{{dsc | {{tt|FE_UPWARD}}  | rounding towards positive infinity}}
{{dsc end}}

Additional rounding modes may be supported by an implementation.

The current rounding mode affects the following:
* results of floating-point arithmetic operators outside of constant expressions
{{source|1=
double x = 1;
x/10; // 0.09999999999999999167332731531132594682276248931884765625
   // or 0.1000000000000000055511151231257827021181583404541015625
}}
* results of standard library [[c/numeric/math|mathematical functions]]
{{source|1=
sqrt(2); // 1.41421356237309492343001693370752036571502685546875
      // or 1.4142135623730951454746218587388284504413604736328125
}}
* floating-point to floating-point implicit conversion and casts
{{source|1=
double d = 1 + DBL_EPSILON;
float f = d; //  1.00000000000000000000000
           // or 1.00000011920928955078125
}}
* string conversions such as {{lc|strtod}} or {{lc|printf}}
{{source|1=
strtof(&quot;0.1&quot;, NULL); // 0.0999999940395355224609375
                  // or 0.100000001490116119384765625
}}
* the library rounding functions {{lc|nearbyint}}, {{lc|rint}}, {{lc|lrint}}
{{source|1=
lrint(2.1); // 2 or 3
}}
The current rounding mode does NOT affect the following:
* floating-point to integer implicit conversion and casts (always towards zero)
* results of floating-point arithmetic operators in constant expressions (always to nearest)
* the library functions {{lc|round}}, {{lc|lround}}, {{lc|ceil}}, {{lc|floor}}, {{lc|trunc}}

As with any [[c/numeric/fenv|floating-point environment]] functionality, rounding is only guaranteed if {{tt|#pragma STDC FENV_ACCESS ON}} is set.

===Example===
{{example
|code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;fenv.h&gt;
#include &lt;math.h&gt;
int main()
{
#pragma STDC FENV_ACCESS ON
    fesetround(FE_DOWNWARD);
    puts(&quot;rounding down: &quot;);
    printf(&quot;           pi = %.22f\n&quot;, acosf(-1));
    printf(&quot;strtof(\&quot;1.1\&quot;) = %.22f\n&quot;, strtof(&quot;1.1&quot;, NULL));
    printf(&quot;    rint(2.1) = %.22f\n\n&quot;, rintf(2.1));
    fesetround(FE_UPWARD);
    puts(&quot;rounding up: &quot;);
    printf(&quot;           pi = %.22f\n&quot;, acosf(-1));
    printf(&quot;strtof(\&quot;1.1\&quot;) = %.22f\n&quot;, strtof(&quot;1.1&quot;, NULL));
    printf(&quot;    rint(2.1) = %.22f\n&quot;, rintf(2.1));
}
|output=
rounding down: 
           pi = 3.1415925025939941406250
strtof(&quot;1.1&quot;) = 1.0999999046325683593750
    rint(2.1) = 2.0000000000000000000000

rounding up: 
           pi = 3.1415927410125732421875
strtof(&quot;1.1&quot;) = 1.1000000238418579101563
    rint(2.1) = 3.0000000000000000000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.6/8 | title=Floating-point environment &lt;fenv.h&gt; | p=207}}
{{ref std c99}}
{{ref std | section=7.6/7 | title=Floating-point environment &lt;fenv.h&gt; | p=188}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feround}}
{{dsc see cpp | cpp/numeric/fenv/FE_round | floating point rounding macros | nomono=true}}
{{dsc end}}

[[ar:c/numeric/fenv/FE_round]]
[[cs:c/numeric/fenv/FE_round]]
[[de:c/numeric/fenv/FE_round]]
[[es:c/numeric/fenv/FE_round]]
[[fr:c/numeric/fenv/FE_round]]
[[it:c/numeric/fenv/FE_round]]
[[ja:c/numeric/fenv/FE_round]]
[[ko:c/numeric/fenv/FE_round]]
[[pl:c/numeric/fenv/FE_round]]
[[pt:c/numeric/fenv/FE_round]]
[[ru:c/numeric/fenv/FE_round]]
[[tr:c/numeric/fenv/FE_round]]
[[zh:c/numeric/fenv/FE_round]]</text>
      <sha1>q5gpvhpig8qfy22mmxh4cnroqbpxl42</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/feclearexcept</title>
    <ns>0</ns>
    <id>8610</id>
    <revision>
      <id>87813</id>
      <parentid>77218</parentid>
      <timestamp>2016-10-04T17:50:34Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3000">{{c/title|feclearexcept}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
int feclearexcept( int excepts );
}}
{{dcl end}}

Attempts to clear the floating-point exceptions that are listed in the bitmask argument {{tt|excepts}}, which is a bitwise OR of the [[c/numeric/fenv/FE_exceptions|floating point exception macros]].

===Parameters===
{{par begin}}
{{par | excepts | bitmask listing the exception flags to clear}}
{{par end}}

===Return value===
{{c|0}} if all indicated exceptions were successfully cleared or if {{tt|excepts}} is zero. Returns a non-zero value on error.

===Example===
{{example
 |
 | code=
#include &lt;fenv.h&gt;
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;

/*
 * A possible implementation of hypot which makes use of many advanced
 * floating point features.
 */
double hypot_demo(double a, double b) {
  const int range_problem = FE_OVERFLOW {{!}} FE_UNDERFLOW;
  feclearexcept(range_problem);
  // try a fast algorithm
  double result = sqrt(a * a + b * b);
  if (!fetestexcept(range_problem))  // no overflow or underflow
    return result;                   // return the fast result
  // do a more complicated calculation to avoid overflow or underflow
  int a_exponent,b_exponent;
  frexp(a, &amp;a_exponent);
  frexp(b, &amp;b_exponent);

  if (a_exponent - b_exponent &gt; DBL_MAX_EXP)
    return fabs(a) + fabs(b);        // we can ignore the smaller value
  // scale so that fabs(a) is near 1
  double a_scaled = scalbn(a, -a_exponent);
  double b_scaled = scalbn(b, -a_exponent);
  // overflow and underflow is now impossible 
  result = sqrt(a_scaled * a_scaled + b_scaled * b_scaled);
  // undo scaling
  return scalbn(result, a_exponent);
}

int main(void)
{
  // Normal case takes the fast route
  printf(&quot;hypot(%f, %f) = %f\n&quot;, 3.0, 4.0, hypot_demo(3.0, 4.0));
  // Extreme case takes the slow but more accurate route
  printf(&quot;hypot(%e, %e) = %e\n&quot;, DBL_MAX / 2.0, 
                                DBL_MAX / 2.0, 
                                hypot_demo(DBL_MAX / 2.0, DBL_MAX / 2.0));

  return 0;
}
 | output=
hypot(3.000000, 4.000000) = 5.000000
hypot(8.988466e+307, 8.988466e+307) = 1.271161e+308
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.2.1 | title=The feclearexcept function | p=209}}
{{ref std c99}}
{{ref std | section=7.6.2.1 | title=The feclearexcept function | p=190}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc fetestexcept}}
{{dsc see cpp | cpp/numeric/fenv/feclearexcept}}
{{dsc end}}

[[ar:c/numeric/fenv/feclearexcept]]
[[cs:c/numeric/fenv/feclearexcept]]
[[de:c/numeric/fenv/feclearexcept]]
[[es:c/numeric/fenv/feclearexcept]]
[[fr:c/numeric/fenv/feclearexcept]]
[[it:c/numeric/fenv/feclearexcept]]
[[ja:c/numeric/fenv/feclearexcept]]
[[ko:c/numeric/fenv/feclearexcept]]
[[pl:c/numeric/fenv/feclearexcept]]
[[pt:c/numeric/fenv/feclearexcept]]
[[ru:c/numeric/fenv/feclearexcept]]
[[tr:c/numeric/fenv/feclearexcept]]
[[zh:c/numeric/fenv/feclearexcept]]</text>
      <sha1>8y5sw3fzvr0xrsahwqd1aqq9kr50ya6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/feenv</title>
    <ns>0</ns>
    <id>8614</id>
    <revision>
      <id>87811</id>
      <parentid>77243</parentid>
      <timestamp>2016-10-04T17:08:27Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4431">{{c/title|fegetenv|fesetenv}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 | num=1|
int fegetenv( fenv_t* envp );
}}
{{dcl | since=c99 | num=2|
int fesetenv( const fenv_t* envp );
}}
{{dcl end}}

1) Attempts to store the status of the floating-point environment in the object pointed to by {{tt|envp}}.

2) Attempts to establish the floating-point environment from the object pointed to by {{tt|envp}}. The value of that object must be previously obtained by a call to {{lc|feholdexcept}} or {{tt|fegetenv}} or be a floating-point macro constant. If any of the floating-point status flags are set in {{tt|envp}}, they become set in the environment (and are then testable with {{lc|fetestexcept}}), but the corresponding floating-point exceptions are not raised (execution continues uninterrupted)

===Parameters===
{{par begin}}
{{par | envp | pointer to the object of type {{c|fenv_t}} which holds the status of the floating-point environment}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;
 
#pragma STDC FENV_ACCESS ON
 
void show_fe_exceptions(void)
{
    printf(&quot;current exceptions raised: &quot;);
    if(fetestexcept(FE_DIVBYZERO))     printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))       printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))       printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))      printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW))     printf(&quot; FE_UNDERFLOW&quot;);
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(&quot; none&quot;);
    printf(&quot;\n&quot;);
}

void show_fe_rounding_method(void)
{
    printf(&quot;current rounding method:    &quot;);
    switch (fegetround()) {
           case FE_TONEAREST:  printf (&quot;FE_TONEAREST&quot;);  break;
           case FE_DOWNWARD:   printf (&quot;FE_DOWNWARD&quot;);   break;
           case FE_UPWARD:     printf (&quot;FE_UPWARD&quot;);     break;
           case FE_TOWARDZERO: printf (&quot;FE_TOWARDZERO&quot;); break;
           default:            printf (&quot;unknown&quot;);
    };
    printf(&quot;\n&quot;);
}

void show_fe_environment(void)
{
    show_fe_exceptions();
    show_fe_rounding_method();
}    
 
int main(void)
{
    fenv_t curr_env;
    int rtn;
    
    /* Show default environment. */
    show_fe_environment();
    printf(&quot;\n&quot;);
 
    /* Perform some computation under default environment. */
    printf(&quot;+11.5 -&gt; %+4.1f\n&quot;, rint(+11.5)); /* midway between two integers */
    printf(&quot;+12.5 -&gt; %+4.1f\n&quot;, rint(+12.5)); /* midway between two integers */
    show_fe_environment();
    printf(&quot;\n&quot;);
 
    /* Save current environment. */
    rtn = fegetenv(&amp;curr_env);
 
    /* Perform some computation with new rounding method. */
    feclearexcept(FE_ALL_EXCEPT);
    fesetround(FE_DOWNWARD);
    printf(&quot;1.0/0.0 = %f\n&quot;, 1.0/0.0);
    printf(&quot;+11.5 -&gt; %+4.1f\n&quot;, rint(+11.5));
    printf(&quot;+12.5 -&gt; %+4.1f\n&quot;, rint(+12.5));
    show_fe_environment();
    printf(&quot;\n&quot;);
 
    /* Restore previous environment. */
    rtn = fesetenv(&amp;curr_env);
    show_fe_environment();
 
    return 0;
}
 | output=
current exceptions raised: none
current rounding method:   FE_TONEAREST

+11.5 -&gt; +12.0
+12.5 -&gt; +12.0
current exceptions raised: FE_INEXACT
current rounding method:   FE_TONEAREST

1.0/0.0 = inf
+11.5 -&gt; +11.0
+12.5 -&gt; +12.0
current exceptions raised: FE_DIVBYZERO FE_INEXACT
current rounding method:   FE_DOWNWARD

current exceptions raised: FE_INEXACT
current rounding method:   FE_TONEAREST
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.4.1 | title=The fegetenv function | p=213}}
{{ref std | section=7.6.4.3 | title=The fesetenv function | p=214}}
{{ref std c99}}
{{ref std | section=7.6.4.1 | title=The fegetenv function | p=194}}
{{ref std | section=7.6.4.3 | title=The fesetenv function | p=195}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feholdexcept}}
{{dsc inc | c/numeric/fenv/dsc feupdateenv}}
{{dsc inc | c/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc see cpp | cpp/numeric/fenv/feenv | fegetenv | fesetenv}}
{{dsc end}}

[[ar:c/numeric/fenv/feenv]]
[[cs:c/numeric/fenv/feenv]]
[[de:c/numeric/fenv/feenv]]
[[es:c/numeric/fenv/feenv]]
[[fr:c/numeric/fenv/feenv]]
[[it:c/numeric/fenv/feenv]]
[[ja:c/numeric/fenv/feenv]]
[[ko:c/numeric/fenv/feenv]]
[[pl:c/numeric/fenv/feenv]]
[[pt:c/numeric/fenv/feenv]]
[[ru:c/numeric/fenv/feenv]]
[[tr:c/numeric/fenv/feenv]]
[[zh:c/numeric/fenv/feenv]]</text>
      <sha1>c7snrfe24t1e79ijwcs7qvkfqgjr44q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/feexceptflag</title>
    <ns>0</ns>
    <id>8598</id>
    <revision>
      <id>87812</id>
      <parentid>77232</parentid>
      <timestamp>2016-10-04T17:33:04Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3597">{{c/title|fegetexceptflag|fesetexceptflag}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 | num=1|
int fegetexceptflag( fexcept_t* flagp, int excepts );
}}
{{dcl | since=c99 | num=2|
int fesetexceptflag( const fexcept_t* flagp, int excepts );
}}
{{dcl end}}

1) Attempts to obtain the full contents of the floating-point exception flags that are listed in the bitmask argument {{tt|excepts}}, which is a bitwise OR of the [[c/numeric/fenv/FE_exceptions|floating point exception macros]]. 

2) Attempts to copy the full contents of the floating-point exception flags that are listed in {{tt|excepts}} from {{tt|flagp}} into the floating-point environment. Does not raise any exceptions, only modifies the flags.

The full contents of a floating-point exception flag is not necessarily a boolean value indicating whether the exception is raised or cleared. For example, it may be a struct which includes the boolean status and the address of the code that triggered the exception. These functions obtain all such content and obtain/store it in {{tt|flagp}} in implementation-defined format.

===Parameters===
{{par begin}}
{{par | flagp | pointer to an {{c|fexcept_t}} object where the flags will be stored or read from}}
{{par | excepts | bitmask listing the exception flags to get/set}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;fenv.h&gt;
 
#pragma STDC FENV_ACCESS ON
 
void show_fe_exceptions(void)
{
    printf(&quot;current exceptions raised: &quot;);
    if(fetestexcept(FE_DIVBYZERO))     printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))       printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))       printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))      printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW))     printf(&quot; FE_UNDERFLOW&quot;);
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(&quot; none&quot;);
    printf(&quot;\n&quot;);
}

int main(void)
{
    fexcept_t excepts;
    
    /* Setup a &quot;current&quot; set of exception flags. */
    feraiseexcept(FE_INVALID);
    show_fe_exceptions();
    
    /* Save current exception flags. */
    fegetexceptflag(&amp;excepts,FE_ALL_EXCEPT);
    
    /* Temporarily raise two other exceptions. */
    feclearexcept(FE_ALL_EXCEPT);
    feraiseexcept(FE_OVERFLOW {{!}} FE_INEXACT);
    show_fe_exceptions();
    
    /* Restore previous exception flags. */
    fesetexceptflag(&amp;excepts,FE_ALL_EXCEPT);
    show_fe_exceptions();

    return 0;
}
 | output=
current exceptions raised: FE_INVALID
current exceptions raised: FE_INEXACT FE_OVERFLOW
current exceptions raised: FE_INVALID
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.2.2 | title=The fegetexceptflag function | p=210}}
{{ref std | section=7.6.2.4 | title=The fesetexceptflag function | p=211}}
{{ref std c99}}
{{ref std | section=7.6.2.2 | title=The fegetexceptflag function | p=191}}
{{ref std | section=7.6.2.4 | title=The fesetexceptflag function | p=192}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/fenv/feexceptflag | fegetexceptflag | fesetexceptflag}}
{{dsc end}}

[[ar:c/numeric/fenv/feexceptflag]]
[[cs:c/numeric/fenv/feexceptflag]]
[[de:c/numeric/fenv/feexceptflag]]
[[es:c/numeric/fenv/feexceptflag]]
[[fr:c/numeric/fenv/feexceptflag]]
[[it:c/numeric/fenv/feexceptflag]]
[[ja:c/numeric/fenv/feexceptflag]]
[[ko:c/numeric/fenv/feexceptflag]]
[[pl:c/numeric/fenv/feexceptflag]]
[[pt:c/numeric/fenv/feexceptflag]]
[[ru:c/numeric/fenv/feexceptflag]]
[[tr:c/numeric/fenv/feexceptflag]]
[[zh:c/numeric/fenv/feexceptflag]]</text>
      <sha1>bgydrsssosltcjepzzjtz31qi32i4f5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/fegetenv</title>
    <ns>0</ns>
    <id>8684</id>
    <redirect title="c/numeric/fenv/feenv" />
    <revision>
      <id>36562</id>
      <timestamp>2012-06-25T15:05:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/fenv/feenv]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/numeric/fenv/feenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/fegetexceptflag</title>
    <ns>0</ns>
    <id>8687</id>
    <redirect title="c/numeric/fenv/feexceptflag" />
    <revision>
      <id>36565</id>
      <timestamp>2012-06-25T15:05:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/fenv/feexceptflag]]</comment>
      <text xml:space="preserve" bytes="41">#redirect [[c/numeric/fenv/feexceptflag]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/fegetround</title>
    <ns>0</ns>
    <id>8686</id>
    <redirect title="c/numeric/fenv/feround" />
    <revision>
      <id>36564</id>
      <timestamp>2012-06-25T15:05:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/fenv/feround]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[c/numeric/fenv/feround]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/feholdexcept</title>
    <ns>0</ns>
    <id>8615</id>
    <revision>
      <id>87810</id>
      <parentid>77244</parentid>
      <timestamp>2016-10-04T16:29:44Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3505">{{c/title|feholdexcept}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
int feholdexcept( fenv_t* envp );
}}
{{dcl end}}

First, saves the current floating-point environment to the object pointed to by {{tt|envp}} (similar to {{lc|fegetenv}}), then clears all floating-point status flags, and then installs the non-stop mode: future floating-point exceptions will not interrupt execution (will not trap), until the floating-point environment is restored by {{lc|feupdateenv}} or {{lc|fesetenv}}.

This function may be used in the beginning of a subroutine that must hide the floating-point exceptions it may raise from the caller. If only some exceptions must be suppressed, while others must be reported, the non-stop mode is usually ended with a call to {{lc|feupdateenv}} after clearing the unwanted exceptions.

===Parameters===
{{par begin}}
{{par | envp | pointer to the object of type {{c|fenv_t}} where the floating-point environment will be stored}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;fenv.h&gt;
#include &lt;float.h&gt;
 
#pragma STDC FENV_ACCESS ON
 
void show_fe_exceptions(void)
{
    printf(&quot;current exceptions raised: &quot;);
    if(fetestexcept(FE_DIVBYZERO))     printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))       printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))       printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))      printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW))     printf(&quot; FE_UNDERFLOW&quot;);
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(&quot; none&quot;);
    printf(&quot;\n&quot;);
}

double x2 (double x)   /* times two */
{
    fenv_t curr_excepts;
    
    /* Save and clear current f-p environment. */
    feholdexcept(&amp;curr_excepts);
    
    /* Raise inexact and overflow exceptions. */
    printf(&quot;In x2():  x = %f\n&quot;, x=x*2.0);
    show_fe_exceptions();
    feclearexcept(FE_INEXACT);   /* hide inexact exception from caller */

    /* Merge caller's exceptions (FE_INVALID)        */
    /* with remaining x2's exceptions (FE_OVERFLOW). */
    feupdateenv(&amp;curr_excepts);
    return x;
}

int main(void)
{    
    feclearexcept(FE_ALL_EXCEPT);
    feraiseexcept(FE_INVALID);   /* some computation with invalid argument */
    show_fe_exceptions();
    printf(&quot;x2(DBL_MAX) = %f\n&quot;, x2(DBL_MAX));
    show_fe_exceptions();
    
    return 0;
}
 | output=
current exceptions raised:  FE_INVALID
In x2():  x = inf
current exceptions raised:  FE_INEXACT FE_OVERFLOW
x2(DBL_MAX) = inf
current exceptions raised:  FE_INVALID FE_OVERFLOW
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.4.2 | title=The feholdexcept function | p=213-214}}
{{ref std c99}}
{{ref std | section=7.6.4.2 | title=The feholdexcept function | p=194-195}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feupdateenv}}
{{dsc inc | c/numeric/fenv/dsc feenv}}
{{dsc inc | c/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc see cpp | cpp/numeric/fenv/feholdexcept}}
{{dsc end}}

[[ar:c/numeric/fenv/feholdexcept]]
[[cs:c/numeric/fenv/feholdexcept]]
[[de:c/numeric/fenv/feholdexcept]]
[[es:c/numeric/fenv/feholdexcept]]
[[fr:c/numeric/fenv/feholdexcept]]
[[it:c/numeric/fenv/feholdexcept]]
[[ja:c/numeric/fenv/feholdexcept]]
[[ko:c/numeric/fenv/feholdexcept]]
[[pl:c/numeric/fenv/feholdexcept]]
[[pt:c/numeric/fenv/feholdexcept]]
[[ru:c/numeric/fenv/feholdexcept]]
[[tr:c/numeric/fenv/feholdexcept]]
[[zh:c/numeric/fenv/feholdexcept]]</text>
      <sha1>9dljbg0brv1ky10sjmajaxy5v5y2hme</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/feraiseexcept</title>
    <ns>0</ns>
    <id>8612</id>
    <revision>
      <id>87815</id>
      <parentid>77234</parentid>
      <timestamp>2016-10-04T18:14:50Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2681">{{c/title|feraiseexcept}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
int feraiseexcept( int excepts );
}}
{{dcl end}}

Attempts to raise all floating point exceptions listed in {{tt|excepts}} (a bitwise OR of the [[c/numeric/fenv/FE_exceptions|floating point exception macros]]). If one of the exceptions is {{lc|FE_OVERFLOW}} or {{c|FE_UNDERFLOW}}, this function may additionally raise {{lc|FE_INEXACT}}. The order in which the exceptions are raised is unspecified, except that {{lc|FE_OVERFLOW}} and {{c|FE_UNDERFLOW}} are always raised before {{lc|FE_INEXACT}}.

===Parameters===
{{par begin}}
{{par | excepts | bitmask listing the exception flags to raise}}
{{par end}}

===Return value===
{{c|0}} if all listed exceptions were raised, non-zero value otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;fenv.h&gt;
 
#pragma STDC FENV_ACCESS ON

void show_fe_exceptions(void)
{
    printf(&quot;current exceptions raised: &quot;);
    if(fetestexcept(FE_DIVBYZERO))     printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))       printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))       printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))      printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW))     printf(&quot; FE_UNDERFLOW&quot;);
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(&quot; none&quot;);
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;\n&quot;);
}

double some_computation(void)
{
    /* Computation reaches a state that causes overflow. */
    int r = feraiseexcept(FE_OVERFLOW {{!}} FE_INEXACT);
    printf(&quot;feraiseexcept() %s\n&quot;, (r?&quot;fails&quot;:&quot;succeeds&quot;));
    return 0.0;
}
 
int main(void)
{
    some_computation();
    show_fe_exceptions();
    
    return 0;
}
 | output=
feraiseexcept() succeeds
current exceptions raised:  FE_INEXACT FE_OVERFLOW
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.2.3 | title=The feraiseexcept function | p=210}}
{{ref std c99}}
{{ref std | section=7.6.2.3 | title=The feraiseexcept function | p=191}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feclearexcept}}
{{dsc inc | c/numeric/fenv/dsc fetestexcept}}
{{dsc see cpp | cpp/numeric/fenv/feraiseexcept}}
{{dsc end}}

[[ar:c/numeric/fenv/feraiseexcept]]
[[cs:c/numeric/fenv/feraiseexcept]]
[[de:c/numeric/fenv/feraiseexcept]]
[[es:c/numeric/fenv/feraiseexcept]]
[[fr:c/numeric/fenv/feraiseexcept]]
[[it:c/numeric/fenv/feraiseexcept]]
[[ja:c/numeric/fenv/feraiseexcept]]
[[ko:c/numeric/fenv/feraiseexcept]]
[[pl:c/numeric/fenv/feraiseexcept]]
[[pt:c/numeric/fenv/feraiseexcept]]
[[ru:c/numeric/fenv/feraiseexcept]]
[[tr:c/numeric/fenv/feraiseexcept]]
[[zh:c/numeric/fenv/feraiseexcept]]</text>
      <sha1>6c5kfbq1y979jawulr1hxccqmlyv0k3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/feround</title>
    <ns>0</ns>
    <id>8613</id>
    <revision>
      <id>77242</id>
      <parentid>75036</parentid>
      <timestamp>2015-03-19T14:31:13Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3464">{{c/title|fegetround|fesetround}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 | num=1|
int fesetround( int round );
}}
{{dcl | since=c99 | num=2|
int fegetround();
}}
{{dcl end}}

1) Attempts to establish the floating-point rounding direction equal to the argument argument {{tt|round}}, which is expected to be one of the [[c/numeric/fenv/FE_round|floating point rounding macros]]. 

2) Returns the value of the [[c/numeric/fenv/FE_round|floating point rounding macro]] that corresponds to the current rounding direction. 

===Parameters===
{{par begin}}
{{par | round | rounding direction, one of [[c/numeric/fenv/FE_round|floating point rounding macros]]}}
{{par end}}

===Return value===
1) {{c|0}} on success, non-zero otherwise.

2) the [[c/numeric/fenv/FE_round|floating point rounding macro]] describing the current rounding direction or a negative value if the direction cannot be determined.

===Notes===
The current rounding mode, reflecting the effects of the most recent {{tt|fesetround}}, can also be queried with {{lc|FLT_ROUNDS}}.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;
 
#pragma STDC FENV_ACCESS ON
void show_fe_current_rounding_method(void)
{
    printf(&quot;current rounding method:  &quot;);
    switch (fegetround()) {
           case FE_TONEAREST:  printf (&quot;FE_TONEAREST&quot;);  break;
           case FE_DOWNWARD:   printf (&quot;FE_DOWNWARD&quot;);   break;
           case FE_UPWARD:     printf (&quot;FE_UPWARD&quot;);     break;
           case FE_TOWARDZERO: printf (&quot;FE_TOWARDZERO&quot;); break;
           default:            printf (&quot;unknown&quot;);
    };
    printf(&quot;\n&quot;);
}
 
int main(void)
{
    /* Default rounding method */
    show_fe_current_rounding_method();
    printf(&quot;+11.5 -&gt; %+4.1f\n&quot;, rint(+11.5)); /* midway between two integers */
    printf(&quot;+12.5 -&gt; %+4.1f\n&quot;, rint(+12.5)); /* midway between two integers */

    /* Save current rounding method. */
    int curr_method = fegetround();

    /* Temporarily change current rounding method. */
    fesetround(FE_DOWNWARD);
    show_fe_current_rounding_method();
    printf(&quot;+11.5 -&gt; %+4.1f\n&quot;, rint(+11.5));
    printf(&quot;+12.5 -&gt; %+4.1f\n&quot;, rint(+12.5));

    /* Restore default rounding method. */
    fesetround(curr_method);
    show_fe_current_rounding_method(); 
 
    return 0;
}
 | p=true
 | output=
current rounding method:  FE_TONEAREST
+11.5 -&gt; +12.0
+12.5 -&gt; +12.0
current rounding method:  FE_DOWNWARD
+11.5 -&gt; +11.0
+12.5 -&gt; +12.0
current rounding method:  FE_TONEAREST
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.3.1 | title=The fegetround function | p=212}}
{{ref std | section=7.6.3.2 | title=The fesetround function | p=212-213}}
{{ref std c99}}
{{ref std | section=7.6.3.1 | title=The fegetround function | p=193}}
{{ref std | section=7.6.3.2 | title=The fesetround function | p=193-194}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc nearbyint}}
{{dsc inc | c/numeric/math/dsc rint}}
{{dsc see cpp | cpp/numeric/fenv/feround | fegetround | fesetround}}
{{dsc end}}

[[ar:c/numeric/fenv/feround]]
[[cs:c/numeric/fenv/feround]]
[[de:c/numeric/fenv/feround]]
[[es:c/numeric/fenv/feround]]
[[fr:c/numeric/fenv/feround]]
[[it:c/numeric/fenv/feround]]
[[ja:c/numeric/fenv/feround]]
[[ko:c/numeric/fenv/feround]]
[[pl:c/numeric/fenv/feround]]
[[pt:c/numeric/fenv/feround]]
[[ru:c/numeric/fenv/feround]]
[[tr:c/numeric/fenv/feround]]
[[zh:c/numeric/fenv/feround]]</text>
      <sha1>1yxyrji9vr1jq2wnawik49l4k62cxzy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/fesetenv</title>
    <ns>0</ns>
    <id>8683</id>
    <redirect title="c/numeric/fenv/feenv" />
    <revision>
      <id>36561</id>
      <timestamp>2012-06-25T15:05:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/fenv/feenv]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/numeric/fenv/feenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/fesetround</title>
    <ns>0</ns>
    <id>8685</id>
    <redirect title="c/numeric/fenv/feround" />
    <revision>
      <id>36563</id>
      <timestamp>2012-06-25T15:05:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/fenv/feround]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[c/numeric/fenv/feround]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/fetestexcept</title>
    <ns>0</ns>
    <id>8611</id>
    <revision>
      <id>87814</id>
      <parentid>77237</parentid>
      <timestamp>2016-10-04T18:08:12Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2973">{{c/title|fetestexcept}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
int fetestexcept( int excepts );
}}
{{dcl end}}

Determines which of the specified subset of the floating point exceptions are currently set. The argument {{tt|excepts}} is a bitwise OR of the [[c/numeric/fenv/FE_exceptions|floating point exception macros]].

===Parameters===
{{par begin}}
{{par | excepts | bitmask listing the exception flags to test}}
{{par end}}

===Return value===
Bitwise OR of the floating-point exception macros that are both included in {{tt|excepts}} and correspond to floating-point exceptions currently set.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;
#include &lt;float.h&gt;
 
#pragma STDC FENV_ACCESS ON
 
void show_fe_exceptions(void)
{
    printf(&quot;current exceptions raised: &quot;);
    if(fetestexcept(FE_DIVBYZERO))     printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))       printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))       printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))      printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW))     printf(&quot; FE_UNDERFLOW&quot;);
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(&quot; none&quot;);
    printf(&quot;\n&quot;);
}

int main(void)
{
    /* Show default set of exception flags. */
    show_fe_exceptions();
    
    /* Perform some computations which raise exceptions. */
    printf(&quot;1.0/0.0     = %f\n&quot;, 1.0/0.0);        /* FE_DIVBYZERO            */
    printf(&quot;1.0/10.0    = %f\n&quot;, 1.0/10.0);       /* FE_INEXACT              */
    printf(&quot;sqrt(-1)    = %f\n&quot;, sqrt(-1));       /* FE_INVALID              */
    printf(&quot;DBL_MAX*2.0 = %f\n&quot;, DBL_MAX*2.0);    /* FE_INEXACT FE_OVERFLOW  */
    printf(&quot;nextafter(DBL_MIN/pow(2.0,52),0.0) = %.1f\n&quot;,
           nextafter(DBL_MIN/pow(2.0,52),0.0));   /* FE_INEXACT FE_UNDERFLOW */
    show_fe_exceptions();

    return 0;
}
 | output=
current exceptions raised:  none
1.0/0.0     = inf
1.0/10.0    = 0.100000
sqrt(-1)    = -nan
DBL_MAX*2.0 = inf
nextafter(DBL_MIN/pow(2.0,52),0.0) = 0.0
current exceptions raised:  FE_DIVBYZERO FE_INEXACT FE_INVALID FE_OVERFLOW FE_UNDERFLOW
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.2.5 | title=The fetestexcept function | p=211-212}}
{{ref std c99}}
{{ref std | section=7.6.2.5 | title=The fetestexcept function | p=192-193}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feclearexcept}}
{{dsc see cpp | cpp/numeric/fenv/fetestexcept}}
{{dsc end}}

[[ar:c/numeric/fenv/fetestexcept]]
[[cs:c/numeric/fenv/fetestexcept]]
[[de:c/numeric/fenv/fetestexcept]]
[[es:c/numeric/fenv/fetestexcept]]
[[fr:c/numeric/fenv/fetestexcept]]
[[it:c/numeric/fenv/fetestexcept]]
[[ja:c/numeric/fenv/fetestexcept]]
[[ko:c/numeric/fenv/fetestexcept]]
[[pl:c/numeric/fenv/fetestexcept]]
[[pt:c/numeric/fenv/fetestexcept]]
[[ru:c/numeric/fenv/fetestexcept]]
[[tr:c/numeric/fenv/fetestexcept]]
[[zh:c/numeric/fenv/fetestexcept]]</text>
      <sha1>e612cakxwcbgfr6fgtp7qaifqdk9xc5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/fenv/feupdateenv</title>
    <ns>0</ns>
    <id>8616</id>
    <revision>
      <id>87809</id>
      <parentid>77246</parentid>
      <timestamp>2016-10-04T16:12:02Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3192">{{c/title|feupdateenv}}
{{c/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | fenv.h}}
{{dcl | since=c99 |
int feupdateenv( const fenv_t* envp );
}}
{{dcl end}}

First, remembers the currently raised floating-point exceptions, then restores the floating-point environment from the object pointed to by {{tt|envp}} (similar to {{lc|fesetenv}}), then raises the floating-point exceptions that were saved.

This function may be used to end the non-stop mode established by an earlier call to {{lc|feholdexcept}}.

===Parameters===
{{par begin}}
{{par | envp | pointer to the object of type {{c|fenv_t}} set by an earlier call to {{lc|feholdexcept}} or {{tt|fegetenv}} or equal to {{lc|FE_DFL_ENV}}}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;fenv.h&gt;
#include &lt;float.h&gt;
 
#pragma STDC FENV_ACCESS ON
 
void show_fe_exceptions(void)
{
    printf(&quot;current exceptions raised: &quot;);
    if(fetestexcept(FE_DIVBYZERO))     printf(&quot; FE_DIVBYZERO&quot;);
    if(fetestexcept(FE_INEXACT))       printf(&quot; FE_INEXACT&quot;);
    if(fetestexcept(FE_INVALID))       printf(&quot; FE_INVALID&quot;);
    if(fetestexcept(FE_OVERFLOW))      printf(&quot; FE_OVERFLOW&quot;);
    if(fetestexcept(FE_UNDERFLOW))     printf(&quot; FE_UNDERFLOW&quot;);
    if(fetestexcept(FE_ALL_EXCEPT)==0) printf(&quot; none&quot;);
    printf(&quot;\n&quot;);
}

double x2 (double x)   /* times two */
{
    fenv_t curr_excepts;
    
    /* Save and clear current f-p environment. */
    feholdexcept(&amp;curr_excepts);
    
    /* Raise inexact and overflow exceptions. */
    printf(&quot;In x2():  x = %f\n&quot;, x=x*2.0);
    show_fe_exceptions();
    feclearexcept(FE_INEXACT);   /* hide inexact exception from caller */

    /* Merge caller's exceptions (FE_INVALID)        */
    /* with remaining x2's exceptions (FE_OVERFLOW). */
    feupdateenv(&amp;curr_excepts);
    return x;
}

int main(void)
{    
    feclearexcept(FE_ALL_EXCEPT);
    feraiseexcept(FE_INVALID);   /* some computation with invalid argument */
    show_fe_exceptions();
    printf(&quot;x2(DBL_MAX) = %f\n&quot;, x2(DBL_MAX));
    show_fe_exceptions();
    
    return 0;
}
 | output=
current exceptions raised:  FE_INVALID
In x2():  x = inf
current exceptions raised:  FE_INEXACT FE_OVERFLOW
x2(DBL_MAX) = inf
current exceptions raised:  FE_INVALID FE_OVERFLOW
}}

===References===
{{ref std c11}}
{{ref std | section=7.6.4.4 | title=The feupdateenv function | p=214-215}}
{{ref std c99}}
{{ref std | section=7.6.4.4 | title=The feupdateenv function | p=195-196}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feholdexcept}}
{{dsc inc | c/numeric/fenv/dsc feenv}}
{{dsc inc | c/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc see cpp | cpp/numeric/fenv/feupdateenv}}
{{dsc end}}

[[ar:c/numeric/fenv/feupdateenv]]
[[cs:c/numeric/fenv/feupdateenv]]
[[de:c/numeric/fenv/feupdateenv]]
[[es:c/numeric/fenv/feupdateenv]]
[[fr:c/numeric/fenv/feupdateenv]]
[[it:c/numeric/fenv/feupdateenv]]
[[ja:c/numeric/fenv/feupdateenv]]
[[ko:c/numeric/fenv/feupdateenv]]
[[pl:c/numeric/fenv/feupdateenv]]
[[pt:c/numeric/fenv/feupdateenv]]
[[ru:c/numeric/fenv/feupdateenv]]
[[tr:c/numeric/fenv/feupdateenv]]
[[zh:c/numeric/fenv/feupdateenv]]</text>
      <sha1>blwn6rvga1cfn9w8u4hjcalobai97uq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math</title>
    <ns>0</ns>
    <id>5969</id>
    <revision>
      <id>87839</id>
      <parentid>87823</parentid>
      <timestamp>2016-10-06T10:08:10Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted a link for FP_FAST_FMA</comment>
      <text xml:space="preserve" bytes="5502">{{title|Common mathematical functions}}
{{c/numeric/math/navbar}}

===Functions===
{{dsc begin}}
{{dsc header | stdlib.h}}
{{dsc inc | c/numeric/math/dsc abs}}
{{dsc inc | c/numeric/math/dsc div}}

{{dsc header | inttypes.h}}
{{dsc inc | c/numeric/math/dsc imaxabs}}
{{dsc inc | c/numeric/math/dsc imaxdiv}}

{{dsc header | math.h}}
{{dsc h2 | Basic operations}}
{{dsc inc | c/numeric/math/dsc fabs}}
{{dsc inc | c/numeric/math/dsc fmod}}
{{dsc inc | c/numeric/math/dsc remainder}}
{{dsc inc | c/numeric/math/dsc remquo}}
{{dsc inc | c/numeric/math/dsc fma}}
{{dsc inc | c/numeric/math/dsc fmax}}
{{dsc inc | c/numeric/math/dsc fmin}}
{{dsc inc | c/numeric/math/dsc fdim}}
{{dsc inc | c/numeric/math/dsc fnan}}

{{dsc h2 | Exponential functions}}
{{dsc inc | c/numeric/math/dsc exp}}
{{dsc inc | c/numeric/math/dsc exp2}}
{{dsc inc | c/numeric/math/dsc expm1}}
{{dsc inc | c/numeric/math/dsc log}}
{{dsc inc | c/numeric/math/dsc log10}}
{{dsc inc | c/numeric/math/dsc log2}}
{{dsc inc | c/numeric/math/dsc log1p}}

{{dsc h2 | Power functions}}
{{dsc inc | c/numeric/math/dsc pow}}
{{dsc inc | c/numeric/math/dsc sqrt}}
{{dsc inc | c/numeric/math/dsc cbrt}}
{{dsc inc | c/numeric/math/dsc hypot}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | c/numeric/math/dsc sin}}
{{dsc inc | c/numeric/math/dsc cos}}
{{dsc inc | c/numeric/math/dsc tan}}
{{dsc inc | c/numeric/math/dsc asin}}
{{dsc inc | c/numeric/math/dsc acos}}
{{dsc inc | c/numeric/math/dsc atan}}
{{dsc inc | c/numeric/math/dsc atan2}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | c/numeric/math/dsc sinh}}
{{dsc inc | c/numeric/math/dsc cosh}}
{{dsc inc | c/numeric/math/dsc tanh}}
{{dsc inc | c/numeric/math/dsc asinh}}
{{dsc inc | c/numeric/math/dsc acosh}}
{{dsc inc | c/numeric/math/dsc atanh}}

{{dsc h2 | Error and gamma functions}}
{{dsc inc | c/numeric/math/dsc erf}}
{{dsc inc | c/numeric/math/dsc erfc}}
{{dsc inc | c/numeric/math/dsc tgamma}}
{{dsc inc | c/numeric/math/dsc lgamma}}

{{dsc h2 | Nearest integer floating-point operations}}
{{dsc inc | c/numeric/math/dsc ceil}}
{{dsc inc | c/numeric/math/dsc floor}}
{{dsc inc | c/numeric/math/dsc trunc}}
{{dsc inc | c/numeric/math/dsc round}}
{{dsc inc | c/numeric/math/dsc nearbyint}}
{{dsc inc | c/numeric/math/dsc rint}}

{{dsc h2 | Floating-point manipulation functions}}
{{dsc inc | c/numeric/math/dsc frexp}}
{{dsc inc | c/numeric/math/dsc ldexp}}
{{dsc inc | c/numeric/math/dsc modf}}
{{dsc inc | c/numeric/math/dsc scalbn}}
{{dsc inc | c/numeric/math/dsc ilogb}}
{{dsc inc | c/numeric/math/dsc logb}}
{{dsc inc | c/numeric/math/dsc nextafter}}
{{dsc inc | c/numeric/math/dsc copysign}}

{{dsc h2 | Classification and comparison}}
{{dsc inc | c/numeric/math/dsc fpclassify}}
{{dsc inc | c/numeric/math/dsc isfinite}}
{{dsc inc | c/numeric/math/dsc isinf}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc inc | c/numeric/math/dsc isnormal}}
{{dsc inc | c/numeric/math/dsc signbit}}
{{dsc inc | c/numeric/math/dsc isgreater}}
{{dsc inc | c/numeric/math/dsc isgreaterequal}}
{{dsc inc | c/numeric/math/dsc isless}}
{{dsc inc | c/numeric/math/dsc islessequal}}
{{dsc inc | c/numeric/math/dsc islessgreater}}
{{dsc inc | c/numeric/math/dsc isunordered}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | stdlib.h }}
{{dsc inc | c/numeric/math/dsc div_t}}
{{dsc inc | c/numeric/math/dsc ldiv_t}}
{{dsc inc | c/numeric/math/dsc lldiv_t}}
{{dsc header | inttypes.h }}
{{dsc inc | c/numeric/math/dsc imaxdiv_t}}
{{dsc header | math.h }}
{{dsc inc | c/numeric/math/dsc float_t}}
{{dsc inc | c/numeric/math/dsc double_t}}
{{dsc end}}

===Macro constants===
{{dsc begin}}
{{dsc header | math.h}}
{{dsc inc | c/numeric/math/dsc HUGE_VAL}}
{{dsc inc | c/numeric/math/dsc INFINITY}}
{{dsc inc | c/numeric/math/dsc NAN}}
{{dsc inc | c/numeric/math/dsc FP_FAST_FMA}}
{{dsc inc | c/numeric/math/dsc FP_ILOGB0}}
{{dsc inc | c/numeric/math/dsc math_errhandling}}
{{dsc h2 | Classification}}
{{dsc inc | c/numeric/math/dsc FP_categories}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.8  | title=Format conversion of integer types &lt;inttypes.h&gt; | p=217-220}}
{{ref std | section=7.12 | title=Mathematics &lt;math.h&gt; | p=231-261}}
{{ref std | section=7.22 | title=General utilities &lt;stdlib.h&gt; | p=340-360}}
{{ref std | section=7.31.5  | title=Format conversion of integer types &lt;inttypes.h&gt; | p=455}}
{{ref std | section=7.31.12 | title=General utilities &lt;stdlib.h&gt; | p=456}}
{{ref std c99}}
{{ref std | section=7.8  | title=Format conversion of integer types &lt;inttypes.h&gt; | p=198-201}}
{{ref std | section=7.12 | title=Mathematics &lt;math.h&gt; | p=212-242}}
{{ref std | section=7.20 | title=General utilities &lt;stdlib.h&gt; | p=306-324}}
{{ref std | section=7.26.4  | title=Format conversion of integer types &lt;inttypes.h&gt; | p=401}}
{{ref std | section=7.26.10 | title=General utilities &lt;stdlib.h&gt; | p=402}}
{{ref std c89}}
{{ref std | section=4.5  | title=MATHEMATICS &lt;math.h&gt;}}
{{ref std | section=4.10 | title=GENERAL UTILITIES &lt;stdlib.h&gt;}}
{{ref std | section=4.13.4 | title=Mathematics &lt;math.h&gt;}}
{{ref std | section=7.13.7 | title=General utilities &lt;stdlib.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/math | Common mathematical functions}}
{{dsc end}}

[[ar:c/numeric/math]]
[[cs:c/numeric/math]]
[[de:c/numeric/math]]
[[es:c/numeric/math]]
[[fr:c/numeric/math]]
[[it:c/numeric/math]]
[[ja:c/numeric/math]]
[[ko:c/numeric/math]]
[[pl:c/numeric/math]]
[[pt:c/numeric/math]]
[[ru:c/numeric/math]]
[[tr:c/numeric/math]]
[[zh:c/numeric/math]]</text>
      <sha1>1851cba16frmitpro0lenvc5x5go6os</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/FLT EVAL METHOD</title>
    <ns>0</ns>
    <id>9516</id>
    <redirect title="c/types/limits/FLT EVAL METHOD" />
    <revision>
      <id>40415</id>
      <parentid>40401</parentid>
      <timestamp>2012-10-13T08:31:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/types/limits/FLT EVAL METHOD]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[c/types/limits/FLT EVAL METHOD]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/FLT ROUNDS</title>
    <ns>0</ns>
    <id>9518</id>
    <redirect title="c/types/limits/FLT ROUNDS" />
    <revision>
      <id>40414</id>
      <parentid>40405</parentid>
      <timestamp>2012-10-13T08:31:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/types/limits/FLT ROUNDS]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[c/types/limits/FLT ROUNDS]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/FP categories</title>
    <ns>0</ns>
    <id>6251</id>
    <revision>
      <id>77387</id>
      <parentid>77258</parentid>
      <timestamp>2015-03-24T11:07:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>mod titles</comment>
      <text xml:space="preserve" bytes="2930">{{title|FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define FP_NORMAL    /*implementation defined*/
}}
{{dcl | since=c99 |
#define FP_SUBNORMAL /*implementation defined*/
}}
{{dcl | since=c99 |
#define FP_ZERO      /*implementation defined*/
}}
{{dcl | since=c99 |
#define FP_INFINITE  /*implementation defined*/
}}
{{dcl | since=c99 |
#define FP_NAN       /*implementation defined*/
}}
{{dcl end}}

The {{tt|FP_NORMAL}}, {{tt|FP_SUBNORMAL}}, {{tt|FP_ZERO}}, {{tt|FP_INFINITE}}, {{tt|FP_NAN}} macros each represent a distinct category of floating-point numbers. They all expand to an integer constant expression.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|FP_NORMAL}} | indicates that the value is ''normal'', i.e. not an infinity, subnormal, not-a-number or zero}}
{{dsc | {{tt|FP_SUBNORMAL}} | indicates that the value is ''subnormal''}}
{{dsc | {{tt|FP_ZERO}} | indicates that the value is positive or negative zero}}
{{dsc | {{tt|FP_INFINITE}} | indicates that the value is not representable by the underlying type (positive or negative infinity)}}
{{dsc | {{tt|FP_NAN}} | indicates that the value is not-a-number (NaN)}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;

const char *show_classification(double x) {
    switch(fpclassify(x)) {
        case FP_INFINITE:  return &quot;Inf&quot;;
        case FP_NAN:       return &quot;NaN&quot;;
        case FP_NORMAL:    return &quot;normal&quot;;
        case FP_SUBNORMAL: return &quot;subnormal&quot;;
        case FP_ZERO:      return &quot;zero&quot;;
        default:           return &quot;unknown&quot;;
    }
}
int main(void)
{
    printf(&quot;1.0/0.0 is %s\n&quot;, show_classification(1/0.0));
    printf(&quot;0.0/0.0 is %s\n&quot;, show_classification(0.0/0.0));
    printf(&quot;DBL_MIN/2 is %s\n&quot;, show_classification(DBL_MIN/2));
    printf(&quot;-0.0 is %s\n&quot;, show_classification(-0.0));
    printf(&quot; 1.0 is %s\n&quot;, show_classification(1.0));
}
 | output=
1.0/0.0 is Inf
0.0/0.0 is NaN
DBL_MIN/2 is subnormal
-0.0 is zero
 1.0 is normal
}}

===References===
{{ref std c11}}
{{ref std | section=7.12/6 | title=FP_NORMAL, ... | p=232}}
{{ref std c99}}
{{ref std | section=7.12/6 | title=FP_NORMAL, ... | p=213}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fpclassify}}
{{dsc see cpp | cpp/numeric/math/FP_categories | ntitle=floating point number categories}}
{{dsc end}}

[[ar:c/numeric/math/FP_categories]]
[[cs:c/numeric/math/FP_categories]]
[[de:c/numeric/math/FP_categories]]
[[es:c/numeric/math/FP_categories]]
[[fr:c/numeric/math/FP_categories]]
[[it:c/numeric/math/FP_categories]]
[[ja:c/numeric/math/FP_categories]]
[[ko:c/numeric/math/FP_categories]]
[[pl:c/numeric/math/FP_categories]]
[[pt:c/numeric/math/FP_categories]]
[[ru:c/numeric/math/FP_categories]]
[[tr:c/numeric/math/FP_categories]]
[[zh:c/numeric/math/FP_categories]]</text>
      <sha1>gopzzxqslj7qkxnceq33apa5kj1crc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/HUGE VAL</title>
    <ns>0</ns>
    <id>6252</id>
    <revision>
      <id>81103</id>
      <parentid>78980</parentid>
      <timestamp>2015-09-29T04:42:46Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>{{title =&gt; {{ctitle</comment>
      <text xml:space="preserve" bytes="2479">{{ctitle|HUGE_VALF|HUGE_VAL|HUGE_VALL}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define HUGE_VALF /*implementation defined*/
}}
{{dcl |
#define HUGE_VAL  /*implementation defined*/
}}
{{dcl | since=c99 |
#define HUGE_VALL /*implementation defined*/
}}
{{dcl end}}

The {{tt|HUGE_VALF}}, {{tt|HUGE_VAL}} and {{tt|HUGE_VALL}} macros expand to positive floating point constant expressions which compare equal to the values returned by floating-point functions and operators in case of overflow (see [[c/numeric/math/math_errhandling|math_errhandling]]).

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|HUGE_VALF}} | Expands to positive {{c|float}} expression that indicates overflow}}
{{dsc | {{tt|HUGE_VAL}} | Expands to positive {{c|double}} expression that indicates overflow, not necessarily representable as a {{c|float}}}}
{{dsc | {{tt|HUGE_VALL}} | Expands to positive {{c|long double}} expression that indicates overflow, not necessarily representable as a {{c|float}} or {{c|double}}}}
{{dsc end}}

On implementations that support floating-point infinities, these macros always expand to the positive infinities of {{c|float}}, {{c|double}}, and {{c|long double}}, respectively.

===Example===
{{example |
 | code=
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{
    double result = 1.0/0.0;
    printf(&quot;1.0/0.0 = %f\n&quot;, result);
    if (result == HUGE_VAL)
        puts(&quot;1.0/0.0 == HUGE_VAL\n&quot;);
}
 | p=true
 | output=
1.0/0.0 = inf
1.0/0.0 == HUGE_VAL
}}

{{ref std c11}}
{{ref std | section=7.12/3 | title=HUGE_VAL, HUGE_VALF, HUGE_VALL | p=231}}
{{ref std | section=F.10/2 | title=HUGE_VAL, HUGE_VALF, HUGE_VALL | p=517}}
{{ref std c99}}
{{ref std | section=7.12/3 | title=HUGE_VAL, HUGE_VALF, HUGE_VALL | p=212}}
{{ref std | section=F.9/2  | title=HUGE_VAL, HUGE_VALF, HUGE_VALL | p=454}}
{{ref std c89}}
{{ref std | section=4.5    | title=HUGE_VAL}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc INFINITY}}}
{{dsc see cpp | cpp/numeric/math/HUGE_VAL}}
{{dsc end}}

[[ar:c/numeric/math/HUGE_VAL]]
[[cs:c/numeric/math/HUGE_VAL]]
[[de:c/numeric/math/HUGE_VAL]]
[[es:c/numeric/math/HUGE_VAL]]
[[fr:c/numeric/math/HUGE_VAL]]
[[it:c/numeric/math/HUGE_VAL]]
[[ja:c/numeric/math/HUGE_VAL]]
[[ko:c/numeric/math/HUGE_VAL]]
[[pl:c/numeric/math/HUGE_VAL]]
[[pt:c/numeric/math/HUGE_VAL]]
[[ru:c/numeric/math/HUGE_VAL]]
[[tr:c/numeric/math/HUGE_VAL]]
[[zh:c/numeric/math/HUGE_VAL]]</text>
      <sha1>s8kb5uq82wgnmi9xvaecx1q933fj3ld</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/INFINITY</title>
    <ns>0</ns>
    <id>13529</id>
    <revision>
      <id>87807</id>
      <parentid>77383</parentid>
      <timestamp>2016-10-04T11:47:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>see J.3.12; new example</comment>
      <text xml:space="preserve" bytes="1789">{{title|INFINITY}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define INFINITY /*implementation defined*/
}}
{{dcl end}}

If the implementation supports floating-point infinities, the macro {{tt|INFINITY}} expands to constant expression of type {{c|float}} which evaluates to positive or unsigned infinity.

If the implementation does not support floating-point infinities, the macro {{tt|INFINITY}} expands to a positive value that is guaranteed to overflow a {{c|float}} at compile time, and the use of this macro generates a compiler warning.

The style used to print an infinity is implementation defined.

===Example===
Show style used to print an infinity and IEEE format.
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;stdint.h&gt;
#include &lt;inttypes.h&gt;
#include &lt;string.h&gt;

int main(void)
{
    double f = INFINITY;
    uint64_t fn; memcpy(&amp;fn, &amp;f, sizeof f);
    printf(&quot;INFINITY:   %f %&quot; PRIx64 &quot;\n&quot;, f, fn);
}
 | p=true
 | output=
INFINITY:   inf 7ff0000000000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12/4 | title=INFINITY | p=231-232}}
{{ref std c99}}
{{ref std | section=7.12/4 | title=INFINITY | p=212-213}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isinf}}
{{dsc inc | c/numeric/math/dsc HUGE_VAL}}
{{dsc see cpp | cpp/numeric/math/INFINITY}}
{{dsc end}}

[[ar:c/numeric/math/INFINITY]]
[[cs:c/numeric/math/INFINITY]]
[[de:c/numeric/math/INFINITY]]
[[es:c/numeric/math/INFINITY]]
[[fr:c/numeric/math/INFINITY]]
[[it:c/numeric/math/INFINITY]]
[[ja:c/numeric/math/INFINITY]]
[[ko:c/numeric/math/INFINITY]]
[[pl:c/numeric/math/INFINITY]]
[[pt:c/numeric/math/INFINITY]]
[[ru:c/numeric/math/INFINITY]]
[[tr:c/numeric/math/INFINITY]]
[[zh:c/numeric/math/INFINITY]]</text>
      <sha1>3qbhi83r6u00cyc9kzjgrxdp2ciesur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/NAN</title>
    <ns>0</ns>
    <id>13530</id>
    <revision>
      <id>87806</id>
      <parentid>77385</parentid>
      <timestamp>2016-10-04T11:42:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>see J.3.12; new example</comment>
      <text xml:space="preserve" bytes="1780">{{title|NAN}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define NAN /*implementation defined*/
}}
{{dcl end}}

The macro {{tt|NAN}} expands to constant expression of type {{c|float}} which evaluates to a quiet not-a-number (QNaN) value. If the implementation does not support QNaNs, this macro constant is not defined.

The style used to print a NaN is implementation defined.

===Notes===
There are many different NaN values, differentiated by their payloads and their sign bits. The contents of the payload and the sign bit of the NaN generated by the macro {{tt|NAN}} are implementation-defined.

===Example===
Show style used to print a NaN and IEEE format.
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;stdint.h&gt;
#include &lt;inttypes.h&gt;
#include &lt;string.h&gt;

int main(void)
{
    double f = NAN;
    uint64_t fn; memcpy(&amp;fn, &amp;f, sizeof f);
    printf(&quot;NAN:   %f %&quot; PRIx64 &quot;\n&quot;, f, fn);
}
 | p=true
 | output=
NAN:   nan 7ff8000000000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12/5     | title=NAN | p=232}}
{{ref std | section=F.10/11/13 | title=NAN | p=518}}
{{ref std c99}}
{{ref std | section=7.12/5     | title=NAN | p=213}}
{{ref std | section=F.9/11/13  | title=NAN | p=455}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fnan}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc see cpp | cpp/numeric/math/NAN}}
{{dsc end}}

[[ar:c/numeric/math/NAN]]
[[cs:c/numeric/math/NAN]]
[[de:c/numeric/math/NAN]]
[[es:c/numeric/math/NAN]]
[[fr:c/numeric/math/NAN]]
[[it:c/numeric/math/NAN]]
[[ja:c/numeric/math/NAN]]
[[ko:c/numeric/math/NAN]]
[[pl:c/numeric/math/NAN]]
[[pt:c/numeric/math/NAN]]
[[ru:c/numeric/math/NAN]]
[[tr:c/numeric/math/NAN]]
[[zh:c/numeric/math/NAN]]</text>
      <sha1>00vuj5t0fcxv4cqznsl8svmhwwyib85</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/abs</title>
    <ns>0</ns>
    <id>6266</id>
    <revision>
      <id>78872</id>
      <parentid>77248</parentid>
      <timestamp>2015-06-11T10:23:06Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2192">{{c/title|abs|labs|llabs|imaxabs}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl |
int        abs( int n );
}}
{{dcl |
long       labs( long n );
}}
{{dcl | since=c99 |
long long llabs( long long n );
}}
{{dcl header | inttypes.h}}
{{dcl | since=c99 |
intmax_t imaxabs( intmax_t n );
}}
{{dcl end}}

Computes the absolute value of an integer number.  The behavior is undefined if the result cannot be represented by the return type.

===Parameters===
{{par begin}}
{{par | n | integer value}}
{{par end}}

===Return value===
The absolute value of {{tt|n}} (i.e. {{tt|{{!}}n{{!}}}}), if it is representable.

===Notes===
In 2's complement systems, the absolute value of the most-negative value is out of range, e.g. for 32-bit 2's complement type int, INT_MIN is -2147483648, but the would-be result 2147483648 is greater than INT_MAX, which is 2147483647.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;limits.h&gt;

int main(void)
{
    printf(&quot;abs(+3) = %d\n&quot;, abs(+3));
    printf(&quot;abs(-3) = %d\n&quot;, abs(-3));

//  printf(&quot;%+d\n&quot;, abs(INT_MIN)); // undefined behavior on 2's complement systems
}
 | output=
abs(+3) = 3
abs(-3) = 3
}}

===References===
{{ref std c11}}
{{ref std | section=7.8.2.1  | title=The imaxabs function | p=218}}
{{ref std | section=7.22.6.1 | title=The abs, labs and llabs functions | p=356}}
{{ref std c99}}
{{ref std | section=7.8.2.1  | title=The imaxabs function | p=199-200}}
{{ref std | section=7.20.6.1 | title=The abs, labs and llabs functions | p=320}}
{{ref std c89}}
{{ref std | section=4.10.6.1 | title=The abs function}}
{{ref std | section=4.10.6.3 | title=The labs function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fabs}}
{{dsc inc | c/numeric/complex/dsc cabs}}
{{dsc see cpp | cpp/numeric/math/abs}}
{{dsc end}}

[[ar:c/numeric/math/abs]]
[[cs:c/numeric/math/abs]]
[[de:c/numeric/math/abs]]
[[es:c/numeric/math/abs]]
[[fr:c/numeric/math/abs]]
[[it:c/numeric/math/abs]]
[[ja:c/numeric/math/abs]]
[[ko:c/numeric/math/abs]]
[[pl:c/numeric/math/abs]]
[[pt:c/numeric/math/abs]]
[[ru:c/numeric/math/abs]]
[[tr:c/numeric/math/abs]]
[[zh:c/numeric/math/abs]]</text>
      <sha1>lu6qkvqg38s94zgj1rsxzzuw3dfy8b7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/acos</title>
    <ns>0</ns>
    <id>6292</id>
    <revision>
      <id>78875</id>
      <parentid>77285</parentid>
      <timestamp>2015-06-11T11:05:11Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3695">{{c/title|acos, acosf, acosl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       acosf( float arg );
}}
{{dcl | num=2 |
double      acos( double arg );
}}
{{dcl | num=3 | since=c99 |
long double acosl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define acos( arg )
}}
{{dcl end}}

@1-3@ Computes the principal value of the arc cosine of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|acosl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|acos}} is called. Otherwise, {{tt|acosf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|cacosf}}, {{c|cacos}}, {{c|cacosl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the arc cosine of {{tt|arg}} ({{math|arccos(arg)}}) in the range {{math|[0 ; &amp;pi;]}}, is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error occurs if {{tt|arg}} is outside the range {{tt|[-1.0; 1.0]}}.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is {{math|+1}}, the value {{tt|+0}} is returned.
* If {{math|{{!}}arg{{!}} &gt; 1}}, a domain error occurs and NaN is returned.
* if the argument is NaN, NaN is returned

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#include &lt;string.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;acos(-1) = %f\n&quot;, acos(-1));
    printf(&quot;acos(0.0) = %f 2*acos(0.0) = %f\n&quot;, acos(0), 2*acos(0));
    printf(&quot;acos(0.5) = %f 3*acos(0.5) = %f\n&quot;, acos(0.5), 3*acos(0.5));
    printf(&quot;acos(1) = %f\n&quot;, acos(1));
    // error handling 
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;acos(1.1) = %f\n&quot;, acos(1.1));
    if(errno == EDOM) perror(&quot;    errno == EDOM&quot;);
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
acos(-1) = 3.141593
acos(0.0) = 1.570796 2*acos(0.0) = 3.141593
acos(0.5) = 1.047198 3*acos(0.5) = 3.141593
acos(1) = 0.000000
acos(1.1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.4.1 | title=The acos functions | p=238}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.1.1 | title=The acos functions | p=518}}
{{ref std c99}}
{{ref std | section=7.12.4.1 | title=The acos functions | p=218}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.1.1  | title=The acos functions | p=455}}
{{ref std c89}}
{{ref std | section=4.5.2.1  | title=The acos function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc asin}}
{{dsc inc | c/numeric/math/dsc atan}}
{{dsc inc | c/numeric/math/dsc atan2}}
{{dsc inc | c/numeric/math/dsc cos}}
{{dsc inc | c/numeric/complex/dsc cacos}}
{{dsc see cpp | cpp/numeric/math/acos}}
{{dsc end}}

[[ar:c/numeric/math/acos]]
[[cs:c/numeric/math/acos]]
[[de:c/numeric/math/acos]]
[[es:c/numeric/math/acos]]
[[fr:c/numeric/math/acos]]
[[it:c/numeric/math/acos]]
[[ja:c/numeric/math/acos]]
[[ko:c/numeric/math/acos]]
[[pl:c/numeric/math/acos]]
[[pt:c/numeric/math/acos]]
[[ru:c/numeric/math/acos]]
[[tr:c/numeric/math/acos]]
[[zh:c/numeric/math/acos]]</text>
      <sha1>kvk1iycq18hrai2kb0qlriyf248a9nw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/acosh</title>
    <ns>0</ns>
    <id>6297</id>
    <revision>
      <id>77295</id>
      <parentid>73353</parentid>
      <timestamp>2015-03-21T13:43:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4008">{{c/title|acosh, acoshf, acoshl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       acoshf( float arg );
}}
{{dcl | num=2 | since=c99 |
double      acosh( double arg );
}}
{{dcl | num=3 | since=c99 |
long double acoshl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define acosh( arg )
}}
{{dcl end}}

@1-3@ Computes the inverse hyperbolic cosine of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|acoshl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|acosh}} is called. Otherwise, {{tt|acoshf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|cacoshf}}, {{c|cacosh}}, {{c|cacoshl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing the area of a hyperbolic sector}}
{{par end}}

===Return value===
If no errors occur, the inverse hyperbolic cosine of {{tt|arg}} ({{math|cosh{{su|p=-1}}(arg)}}, or {{math|arcosh(arg)}}) on the interval {{math|[0, +∞]}}, is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the argument is less than 1, a domain error occurs.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is less than 1, {{lc|FE_INVALID}} is raised an NaN is returned
* if the argument is 1, +0 is returned
* if the argument is +∞, +∞ is returned
* if the argument is NaN, NaN is returned

===Notes===
Although the C standard names this function &quot;arc hyperbolic cosine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;inverse hyperbolic cosine&quot; (used by POSIX) or &quot;area hyperbolic cosine&quot;.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;acosh(1) = %f\nacosh(10) = %f\n&quot;, acosh(1), acosh(10));
    printf(&quot;acosh(DBL_MAX) = %f\nacosh(Inf) = %f\n&quot;, acosh(DBL_MAX), acosh(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;acosh(0.5) = %f\n&quot;, acosh(0.5));
    if(errno == EDOM)         perror(&quot;    errno == EDOM&quot;);
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
acosh(1) = 0.000000
acosh(10) = 2.993223
acosh(DBL_MAX) = 710.475860
acosh(Inf) = inf
acosh(0.5) = -nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.5.1 | title=The acosh functions | p=240}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.2.1 | title=The acosh functions | p=520}}
{{ref std c99}}
{{ref std | section=7.12.5.1 | title=The acosh functions | p=221}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.2.1  | title=The acosh functions| p=457}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc asinh}}
{{dsc inc | c/numeric/math/dsc atanh}}
{{dsc inc | c/numeric/math/dsc cosh}}
{{dsc inc | c/numeric/complex/dsc cacosh}}
{{dsc see cpp | cpp/numeric/math/acosh}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/InverseHyperbolicCosine.html Weisstein, Eric W. &quot;Inverse Hyperbolic Cosine.&quot;] From MathWorld--A Wolfram Web Resource.

[[ar:c/numeric/math/acosh]]
[[cs:c/numeric/math/acosh]]
[[de:c/numeric/math/acosh]]
[[es:c/numeric/math/acosh]]
[[fr:c/numeric/math/acosh]]
[[it:c/numeric/math/acosh]]
[[ja:c/numeric/math/acosh]]
[[ko:c/numeric/math/acosh]]
[[pl:c/numeric/math/acosh]]
[[pt:c/numeric/math/acosh]]
[[ru:c/numeric/math/acosh]]
[[tr:c/numeric/math/acosh]]
[[zh:c/numeric/math/acosh]]</text>
      <sha1>czhjibhjtlzegvl93pomoqngph1r6oz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/asin</title>
    <ns>0</ns>
    <id>6291</id>
    <revision>
      <id>78876</id>
      <parentid>77286</parentid>
      <timestamp>2015-06-11T11:07:11Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3738">{{c/title|asin, asinf, asinl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       asinf( float arg );
}}
{{dcl | num=2 |
double      asin( double arg );
}}
{{dcl | num=3 | since=c99 |
long double asinl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define asin( arg )
}}
{{dcl end}}

@1-3@ Computes the principal values of the arc sine of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|asinl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|asin}} is called. Otherwise, {{tt|asinf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|casinf}}, {{c|casin}}, {{c|casinl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the arc sine of {{tt|arg}} ({{math|arcsin(arg)}}) in the range {{math|[-{{mfrac|&amp;pi;|2}} ; +{{mfrac|&amp;pi;|2}}]}}, is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error occurs if {{tt|arg}} is outside the range {{tt|[-1.0; 1.0]}}.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned unmodified
* If {{math|{{!}}arg{{!}} &gt; 1}}, a domain error occurs and NaN is returned.
* if the argument is NaN, NaN is returned

===Example===
{{example |
 | code=
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#include &lt;string.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;asin( 1.0) = %+f, 2*asin( 1.0)=%+f\n&quot;, asin(1), 2*asin(1));
    printf(&quot;asin(-0.5) = %+f, 6*asin(-0.5)=%+f\n&quot;, asin(-0.5), 6*asin(-0.5));
    // special values
    printf(&quot;asin(0.0) = %1f, asin(-0.0)=%f\n&quot;, asin(+0.0), asin(-0.0));
    // error handling 
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;asin(1.1) = %f\n&quot;, asin(1.1));
    if(errno == EDOM) perror(&quot;    errno == EDOM&quot;);
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
asin( 1.0) = +1.570796, 2*asin( 1.0)=+3.141593
asin(-0.5) = -0.523599, 6*asin(-0.5)=-3.141593
asin(0.0) = 0.000000, asin(-0.0)=-0.000000
asin(1.1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.4.2 | title=The asin functions | p=238}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.1.2 | title=The asin functions | p=518}}
{{ref std c99}}
{{ref std | section=7.12.4.2 | title=The asin functions | p=219}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.1.2  | title=The asin functions | p=456}}
{{ref std c89}}
{{ref std | section=4.5.2.2  | title=The asin function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc acos}}
{{dsc inc | c/numeric/math/dsc atan}}
{{dsc inc | c/numeric/math/dsc atan2}}
{{dsc inc | c/numeric/math/dsc sin}}
{{dsc inc | c/numeric/complex/dsc casin}}
{{dsc see cpp | cpp/numeric/math/asin}}
{{dsc end}}

[[ar:c/numeric/math/asin]]
[[cs:c/numeric/math/asin]]
[[de:c/numeric/math/asin]]
[[es:c/numeric/math/asin]]
[[fr:c/numeric/math/asin]]
[[it:c/numeric/math/asin]]
[[ja:c/numeric/math/asin]]
[[ko:c/numeric/math/asin]]
[[pl:c/numeric/math/asin]]
[[pt:c/numeric/math/asin]]
[[ru:c/numeric/math/asin]]
[[tr:c/numeric/math/asin]]
[[zh:c/numeric/math/asin]]</text>
      <sha1>9i531chwjsj2niq3yuxghxnlbtorxtl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/asinh</title>
    <ns>0</ns>
    <id>6296</id>
    <revision>
      <id>77296</id>
      <parentid>73352</parentid>
      <timestamp>2015-03-21T13:50:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3390">{{c/title|asinh, asinhf, asinhl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       asinhf( float arg );
}}
{{dcl | num=2 | since=c99 |
double      asinh( double arg );
}}
{{dcl | num=3 | since=c99 |
long double asinhl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define asinh( arg )
}}
{{dcl end}}

@1-3@ Computes the inverse hyperbolic sine of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|asinhl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|asinh}} is called. Otherwise, {{tt|asinhf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|casinhf}}, {{c|casinh}}, {{c|casinhl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing the area of a hyperbolic sector}}
{{par end}}

===Return value===
If no errors occur, the inverse hyperbolic sine of {{tt|arg}} ({{math|sinh{{su|p=-1}}(arg)}}, or {{math|arsinh(arg)}}), is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0 or ±∞, it is returned unmodified
* if the argument is NaN, NaN is returned

===Notes===
Although the C standard names this function &quot;arc hyperbolic sine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;inverse hyperbolic sine&quot; (used by POSIX) or &quot;area hyperbolic sine&quot;.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    printf(&quot;asinh(1) = %f\nasinh(-1) = %f\n&quot;, asinh(1), asinh(-1));
    // special values
    printf(&quot;asinh(+0) = %f\nasinh(-0) = %f\n&quot;, asinh(0.0), asinh(-0.0));
}
 | output=
asinh(1) = 0.881374
asinh(-1) = -0.881374
asinh(+0) = 0.000000
asinh(-0) = -0.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.5.2 | title=The asinh functions | p=240-241}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.2.2 | title=The asinh functions | p=520}}
{{ref std c99}}
{{ref std | section=7.12.5.2 | title=The asinh functions | p=221}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.2.2  | title=The asinh functions| p=457}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc acosh}}
{{dsc inc | c/numeric/math/dsc atanh}}
{{dsc inc | c/numeric/math/dsc sinh}}
{{dsc inc | c/numeric/complex/dsc casinh}}
{{dsc see cpp | cpp/numeric/math/asinh}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/InverseHyperbolicSine.html Weisstein, Eric W. &quot;Inverse Hyperbolic Sine.&quot;] From MathWorld--A Wolfram Web Resource.

[[ar:c/numeric/math/asinh]]
[[cs:c/numeric/math/asinh]]
[[de:c/numeric/math/asinh]]
[[es:c/numeric/math/asinh]]
[[fr:c/numeric/math/asinh]]
[[it:c/numeric/math/asinh]]
[[ja:c/numeric/math/asinh]]
[[ko:c/numeric/math/asinh]]
[[pl:c/numeric/math/asinh]]
[[pt:c/numeric/math/asinh]]
[[ru:c/numeric/math/asinh]]
[[tr:c/numeric/math/asinh]]
[[zh:c/numeric/math/asinh]]</text>
      <sha1>42syhf2daqjldtz2op3thzu5kusgp4i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/atan</title>
    <ns>0</ns>
    <id>6301</id>
    <revision>
      <id>88047</id>
      <parentid>88046</parentid>
      <timestamp>2016-10-24T23:47:54Z</timestamp>
      <contributor>
        <ip>179.219.181.86</ip>
      </contributor>
      <comment>+once more missing ')'</comment>
      <text xml:space="preserve" bytes="3471">{{c/title|atan, atanf, atanl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       atanf( float arg );
}}
{{dcl | num=2 |
double      atan( double arg );
}}
{{dcl | num=3 | since=c99 |
long double atanl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl | num=4 | since=c99 |
#define atan( arg )
}}
{{dcl end}}

@1-3@ Computes the principal value of the arc tangent of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|atanl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|atan}} is called. Otherwise, {{tt|atanf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|catanf}}, {{c|catan}}, {{c|catanl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the arc tangent of {{tt|arg}} ({{math|arctan(arg)}}) in the range {{math|[- {{mfrac|&amp;pi;|2}} ; +{{mfrac|&amp;pi;|2}}]}} radians, is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned unmodified
* If the argument is +∞, +&amp;pi;/2 is returned
* If the argument is -∞, -&amp;pi;/2 is returned
* if the argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/atan.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    printf(&quot;atan(1) = %f, 4*atan(1)=%f\n&quot;, atan(1), 4*atan(1));
    // special values
    printf(&quot;atan(Inf) = %f, 2*atan(Inf) = %f\n&quot;, atan(INFINITY), 2*atan(INFINITY));
    printf(&quot;atan(-0.0) = %+f, atan(+0.0) = %+f\n&quot;, atan(-0.0), atan(0));
}
 | output=
atan(1) = 0.785398, 4*atan(1)=3.141593
atan(Inf) = 1.570796, 2*atan(Inf) = 3.141593
atan(-0.0) = -0.000000, atan(+0.0) = +0.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.4.3 | title=The atan functions | p=238-239}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.1.3 | title=The atan functions | p=519}}
{{ref std c99}}
{{ref std | section=7.12.4.3 | title=The atan functions | p=219}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.1.3  | title=The atan functions | p=456}}
{{ref std c89}}
{{ref std | section=4.5.2.3 | title=The atan function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc atan2}}
{{dsc inc | c/numeric/math/dsc asin}}
{{dsc inc | c/numeric/math/dsc acos}}
{{dsc inc | c/numeric/math/dsc tan}}
{{dsc inc | c/numeric/complex/dsc catan}}
{{dsc see cpp | cpp/numeric/math/atan}}
{{dsc end}}

[[ar:c/numeric/math/atan]]
[[cs:c/numeric/math/atan]]
[[de:c/numeric/math/atan]]
[[es:c/numeric/math/atan]]
[[fr:c/numeric/math/atan]]
[[it:c/numeric/math/atan]]
[[ja:c/numeric/math/atan]]
[[ko:c/numeric/math/atan]]
[[pl:c/numeric/math/atan]]
[[pt:c/numeric/math/atan]]
[[ru:c/numeric/math/atan]]
[[tr:c/numeric/math/atan]]
[[zh:c/numeric/math/atan]]</text>
      <sha1>fvj80n7x5hghz9fgq8by16h5ise7oel</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/atan2</title>
    <ns>0</ns>
    <id>6293</id>
    <revision>
      <id>87648</id>
      <parentid>78877</parentid>
      <timestamp>2016-09-16T11:23:48Z</timestamp>
      <contributor>
        <ip>199.201.66.0</ip>
      </contributor>
      <comment>fix &quot;negative&quot; to &quot;positive&quot;</comment>
      <text xml:space="preserve" bytes="5335">{{c/title|atan2, atan2f, atan2l}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       atan2f( float y, float x );
}}
{{dcl | num=2 |
double      atan2( double y, double x );
}}
{{dcl | num=3 | since=c99 |
long double atan2l( long double y, long double x );
}}
{{dcl header | tgmath.h}}
{{dcl | num=4 | since=c99 |
#define atan2( arg )
}}
{{dcl end}}

@1-3@ Computes the arc tangent of {{tt|y/x}} using the signs of arguments to determine the correct quadrant.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|atan2l}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|atan2}} is called. Otherwise, {{tt|atan2f}} is called.

===Parameters===
{{par begin}}
{{par | x, y | floating point value}}
{{par end}}

===Return value===
If no errors occur, the arc tangent of {{tt|y/x}} ({{math|arctan({{mfrac|y|x}})}}) in the range {{math|[-&amp;pi; ; +&amp;pi;]}} radians, is returned.

{{plot | math-atan2.png | left=Y argument | bottom=X argument | right=Return value | size=x240px}}

If a domain error occurs, an implementation-defined value is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error may occur if {{tt|x}} and {{tt|y}} are both zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|x}} and {{tt|y}} are both zero, domain error ''does not'' occur
* If {{tt|x}} and {{tt|y}} are both zero, range error does not occur either
* If {{tt|y}} is zero, pole error does not occur
* If {{tt|y}} is {{tt|±0}} and {{tt|x}} is negative or {{tt|-0}}, {{tt|±&amp;pi;}} is returned
* If {{tt|y}} is {{tt|±0}} and {{tt|x}} is positive or {{tt|+0}}, {{tt|±0}} is returned
* If {{tt|y}} is {{tt|±∞}} and {{tt|x}} is finite, {{tt|±&amp;pi;/2}} is returned
* If {{tt|y}} is {{tt|±∞}} and {{tt|x}} is {{tt|-∞}}, {{tt|±3&amp;pi;/4}} is returned
* If {{tt|y}} is {{tt|±∞}} and {{tt|x}} is {{tt|+∞}}, {{tt|±&amp;pi;/4}} is returned
* If {{tt|x}} is {{tt|±0}} and {{tt|y}} is negative, {{tt|-&amp;pi;/2}} is returned
* If {{tt|x}} is {{tt|±0}} and {{tt|y}} is positive, {{tt|+&amp;pi;/2}} is returned
* If {{tt|x}} is {{tt|-∞}} and {{tt|y}} is finite and positive, {{tt|+&amp;pi;}} is returned
* If {{tt|x}} is {{tt|-∞}} and {{tt|y}} is finite and negative, {{tt|-&amp;pi;}} is returned
* If {{tt|x}} is {{tt|+∞}} and {{tt|y}} is finite and positive, {{tt|+0}} is returned
* If {{tt|x}} is {{tt|+∞}} and {{tt|y}} is finite and negative, {{tt|-0}} is returned
* If either {{tt|x}} is NaN or {{tt|y}} is NaN, NaN is returned

===Notes===
{{c|atan2(y, x)}} is equivalent to {{c|carg(x + I*y)}}.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/atan2.html POSIX specifies] that in case of underflow, {{tt|y/x}} is the value returned, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    // normal usage: the signs of the two arguments determine the quadrant
    // atan2(1,1) = +pi/4, Quad I
    printf(&quot;(+1,+1) cartesian is (%f,%f) polar\n&quot;, hypot( 1, 1), atan2( 1, 1));
    // atan2(1, -1) = +3pi/4, Quad II
    printf(&quot;(+1,-1) cartesian is (%f,%f) polar\n&quot;, hypot( 1,-1), atan2( 1,-1));
    // atan2(-1,-1) = -3pi/4, Quad III
    printf(&quot;(-1,-1) cartesian is (%f,%f) polar\n&quot;, hypot(-1,-1), atan2(-1,-1));
    // atan2(-1,-1) = -pi/4, Quad IV
    printf(&quot;(-1,+1) cartesian is (%f,%f) polar\n&quot;, hypot(-1, 1), atan2(-1, 1));

    // special values
    printf(&quot;atan2(0, 0) = %f atan2(0, -0)=%f\n&quot;, atan2(0,0), atan2(0,-0.0));
    printf(&quot;atan2(7, 0) = %f atan2(7, -0)=%f\n&quot;, atan2(7,0), atan2(7,-0.0));
}
 | output=
(+1,+1) cartesian is (1.414214,0.785398) polar
(+1,-1) cartesian is (1.414214,2.356194) polar
(-1,-1) cartesian is (1.414214,-2.356194) polar
(-1,+1) cartesian is (1.414214,-0.785398) polar
atan2(0, 0) = 0.000000 atan2(0, -0)=3.141593
atan2(7, 0) = 1.570796 atan2(7, -0)=1.570796
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.4.4 | title=The atan2 functions | p=239}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.1.4 | title=The atan2 functions | p=519}}
{{ref std c99}}
{{ref std | section=7.12.4.4 | title=The atan2 functions | p=219}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.1.4  | title=The atan2 functions| p=456}}
{{ref std c89}}
{{ref std | section=4.5.2.4  | title=The atan2 function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc asin}}
{{dsc inc | c/numeric/math/dsc acos}}
{{dsc inc | c/numeric/math/dsc atan}}
{{dsc inc | c/numeric/complex/dsc carg}}
{{dsc see cpp | cpp/numeric/math/atan2}}
{{dsc end}}

[[ar:c/numeric/math/atan2]]
[[cs:c/numeric/math/atan2]]
[[de:c/numeric/math/atan2]]
[[es:c/numeric/math/atan2]]
[[fr:c/numeric/math/atan2]]
[[it:c/numeric/math/atan2]]
[[ja:c/numeric/math/atan2]]
[[ko:c/numeric/math/atan2]]
[[pl:c/numeric/math/atan2]]
[[pt:c/numeric/math/atan2]]
[[ru:c/numeric/math/atan2]]
[[tr:c/numeric/math/atan2]]
[[zh:c/numeric/math/atan2]]</text>
      <sha1>5seb9hrjqdj07ekxpcqqnbs6qj32cpi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/atanh</title>
    <ns>0</ns>
    <id>6298</id>
    <revision>
      <id>77297</id>
      <parentid>73354</parentid>
      <timestamp>2015-03-21T14:00:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4523">{{c/title|atanh, atanhf, atanhl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       atanhf( float arg );
}}
{{dcl | num=2 | since=c99 |
double      atanh( double arg );
}}
{{dcl | num=3 | since=c99 |
long double atanhl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define atanh( arg )
}}
{{dcl end}}

@1-3@ Computes the inverse hyperbolic tangent of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|atanhl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|atanh}} is called. Otherwise, {{tt|atanhf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|catanhf}}, {{c|catanh}}, {{c|catanhl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing the area of a hyperbolic sector}}
{{par end}}

===Return value===
If no errors occur, the inverse hyperbolic tangent of {{tt|arg}} ({{math|tanh{{su|p=-1}}(arg)}}, or {{math|artanh(arg)}}), is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a pole error occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned (with the correct sign).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the argument is not on the interval {{math|[-1, +1]}}, a range error occurs.

If the argument is ±1, a pole error occurs.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, it is returned unmodified
* if the argument is ±1, ±∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* if {{math|{{!}}arg{{!}}&gt;1}}, NaN is returned and {{lc|FE_INVALID}} is raised.
* if the argument is NaN, NaN is returned

===Notes===
Although the C standard names this function &quot;arc hyperbolic tangent&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;inverse hyperbolic tangent&quot; (used by POSIX) or &quot;area hyperbolic tangent&quot;.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/atanh.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;atanh(0) = %f\natanh(-0) = %f\n&quot;, atanh(0), atanh(-0.0));
    printf(&quot;atanh(0.9) = %f\n&quot;, atanh(0.9));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;atanh(-1) = %f\n&quot;, atanh(-1));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
 | p=true
 | output=
atanh(0) = 0.000000
atanh(-0) = -0.000000
atanh(0.9) = 1.472219
atanh(-1) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.5.3 | title=The atanh functions | p=241}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.2.3 | title=The atanh functions | p=520}}
{{ref std c99}}
{{ref std | section=7.12.5.3 | title=The atanh functions | p=221-222}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.2.3  | title=The atanh functions| p=457}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc asinh}}
{{dsc inc | c/numeric/math/dsc acosh}}
{{dsc inc | c/numeric/math/dsc tanh}}
{{dsc inc | c/numeric/complex/dsc catanh}}
{{dsc see cpp | cpp/numeric/math/atanh}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/InverseHyperbolicTangent.html Weisstein, Eric W. &quot;Inverse Hyperbolic Tangent.&quot;] From MathWorld--A Wolfram Web Resource.

[[ar:c/numeric/math/atanh]]
[[cs:c/numeric/math/atanh]]
[[de:c/numeric/math/atanh]]
[[es:c/numeric/math/atanh]]
[[fr:c/numeric/math/atanh]]
[[it:c/numeric/math/atanh]]
[[ja:c/numeric/math/atanh]]
[[ko:c/numeric/math/atanh]]
[[pl:c/numeric/math/atanh]]
[[pt:c/numeric/math/atanh]]
[[ru:c/numeric/math/atanh]]
[[tr:c/numeric/math/atanh]]
[[zh:c/numeric/math/atanh]]</text>
      <sha1>kk3dxheh2peo9ulp90hjy9ubck89thq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/cbrt</title>
    <ns>0</ns>
    <id>6285</id>
    <revision>
      <id>77330</id>
      <parentid>73297</parentid>
      <timestamp>2015-03-22T12:40:02Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2814">{{c/title|cbrt, cbrtf, cbrtl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       cbrtf( float arg );
}}
{{dcl | num=2 | since=c99 |
double      cbrt( double arg );
}}
{{dcl | num=3 | since=c99 |
long double cbrtl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl | num=4 | since=c99 |
#define cbrt( arg )
}}
{{dcl end}}

@1-3@ Computes the cubic root of {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|cbrtl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|cbrt}} is called. Otherwise, {{tt|cbrtf}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the cubic root of {{tt|arg}} ({{math|{{mrad|arg|3}}}}), is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0 or ±∞, it is returned, unchanged
* if the argument is NaN, NaN is returned.

===Notes===
{{c|cbrt(arg)}} is not equivalent to {{c|pow(arg, 1.0/3)}} because {{lc|pow}} cannot raise a negative base to a fractional exponent.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    // normal use
    printf(&quot;cbrt(729) = %f\n&quot;, cbrt(729));
    printf(&quot;cbrt(-0.125) = %f\n&quot;, cbrt(-0.125));
    // special values
    printf(&quot;cbrt(-0) = %f\n&quot;, cbrt(-0.0));
    printf(&quot;cbrt(+inf) = %f\n&quot;, cbrt(INFINITY));
}  
 | output=
cbrt(729) = 9.000000
cbrt(-0.125) = -0.500000
cbrt(-0) = -0.000000
cbrt(+inf) = inf
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.7.1 | title=The cbrt functions | p=247}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.4.1 | title=The cbrt functions | p=524}}
{{ref std c99}}
{{ref std | section=7.12.7.1 | title=The cbrt functions | p=228}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.4.1  | title=The cbrt functions| p=460}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc pow}}
{{dsc inc | c/numeric/math/dsc sqrt}}
{{dsc inc | c/numeric/math/dsc hypot}}
{{dsc see cpp | cpp/numeric/math/cbrt}}
{{dsc end}}

[[ar:c/numeric/math/cbrt]]
[[cs:c/numeric/math/cbrt]]
[[de:c/numeric/math/cbrt]]
[[es:c/numeric/math/cbrt]]
[[fr:c/numeric/math/cbrt]]
[[it:c/numeric/math/cbrt]]
[[ja:c/numeric/math/cbrt]]
[[ko:c/numeric/math/cbrt]]
[[pl:c/numeric/math/cbrt]]
[[pt:c/numeric/math/cbrt]]
[[ru:c/numeric/math/cbrt]]
[[tr:c/numeric/math/cbrt]]
[[zh:c/numeric/math/cbrt]]</text>
      <sha1>g1c4ng23tp8usn4mg2rxkhttppmhfc6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/ceil</title>
    <ns>0</ns>
    <id>6303</id>
    <revision>
      <id>80556</id>
      <parentid>78892</parentid>
      <timestamp>2015-08-20T20:16:30Z</timestamp>
      <contributor>
        <ip>199.46.200.232</ip>
      </contributor>
      <comment>Add comma for consistency with the +/- zero case, and with the floor page.</comment>
      <text xml:space="preserve" bytes="3680">{{c/title|ceil|ceilf|ceill}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       ceilf( float arg );
}}
{{dcl | num=2|
double      ceil( double arg );
}}
{{dcl | since=c99 | num=3|
long double ceill( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define ceil( arg )
}}
{{dcl end}}

@1-3@ Computes the smallest integer value not less than {{tt|arg}}. 
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|ceill}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|ceil}} is called. Otherwise, {{tt|ceilf}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the smallest integer value not less than {{tt|arg}}, that is {{math|⌈arg⌉}}, is returned.

{{plot | left=Return value | bottom=Argument | math-ceil.svg}}

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[c/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If arg is NaN, NaN is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised when rounding a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so this function never overflows on its own; however the result may overflow any integer type (including {{lc|intmax_t}}), when stored in an integer variable.

This function (for double argument) behaves as if (except for the freedom to not raise {{lc|FE_INEXACT}}) implemented by

{{source|1=#include &lt;math.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
double ceil(double x)
{
    double result;
    int save_round = fegetround();
    fesetround(FE_UPWARD);
    result = rint(x); // or nearbyint 
    fesetround(save_round);
    return result;
}
}}

===Example===
{{example |
 | code=
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{
    printf(&quot;ceil(+2.4) = %+.1f\n&quot;, ceil(2.4));
    printf(&quot;ceil(-2.4) = %+.1f\n&quot;, ceil(-2.4));
    printf(&quot;ceil(-0.0) = %+.1f\n&quot;, ceil(-0.0));
    printf(&quot;ceil(-Inf) = %+f\n&quot;,   ceil(-INFINITY));
}
 | p=true
 | output=
ceil(+2.4) = +3.0
ceil(-2.4) = -2.0
ceil(-0.0) = -0.0
ceil(-Inf) = -inf
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.9.1 | title=The ceil functions | p=251}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.6.1 | title=The ceil functions | p=526}}
{{ref std c99}}
{{ref std | section=7.12.9.1 | title=The ceil functions | p=231-232}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.6.1  | title=The ceil functions| p=462-463}}
{{ref std c89}}
{{ref std | section=4.5.6.1  | title=The ceil function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc floor}}
{{dsc inc | c/numeric/math/dsc trunc}}
{{dsc inc | c/numeric/math/dsc round}}
{{dsc inc | c/numeric/math/dsc nearbyint}}
{{dsc inc | c/numeric/math/dsc rint}}
{{dsc see cpp | cpp/numeric/math/ceil}}
{{dsc end}}

[[ar:c/numeric/math/ceil]]
[[cs:c/numeric/math/ceil]]
[[de:c/numeric/math/ceil]]
[[es:c/numeric/math/ceil]]
[[fr:c/numeric/math/ceil]]
[[it:c/numeric/math/ceil]]
[[ja:c/numeric/math/ceil]]
[[ko:c/numeric/math/ceil]]
[[pl:c/numeric/math/ceil]]
[[pt:c/numeric/math/ceil]]
[[ru:c/numeric/math/ceil]]
[[tr:c/numeric/math/ceil]]
[[zh:c/numeric/math/ceil]]</text>
      <sha1>2nvbc8df818ozwh4g9f9foo6mhdnb6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/copysign</title>
    <ns>0</ns>
    <id>6259</id>
    <revision>
      <id>77356</id>
      <parentid>73389</parentid>
      <timestamp>2015-03-23T16:50:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3295">{{c/title|copysign|copysignf|copysignl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num = 1 |
float       copysignf( float x, float y );
}}
{{dcl | since=c99 |num = 2 |
double      copysign( double x, double y );
}}
{{dcl | since=c99 |num = 3 |
long double copysignl( long double x, long double y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=7| since=c99 |
#define copysign(from, to)
}}
{{dcl end}}

@1-3@ Composes a floating point value with the magnitude of {{tt|x}} and the sign of {{tt|y}}. 
@4@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|copysignl}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|copysign}} is called. Otherwise, {{tt|copysignf}} is called.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par end}}

===Return value===
If no errors occur, the floating point value with the magnitude of {{tt|x}} and the sign of {{tt|y}} is returned.

If {{tt|x}} is NaN, then NaN with the sign of {{tt|y}} is returned.

If {{tt|y}} is -0, the result is only negative if the implementation supports the signed zero consistently in arithmetic operations.

===Error handling===
This function is not subject to any errors specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The returned value is exact ({{lc|FE_INEXACT}} is never raised) and independent of the current [[c/numeric/fenv/FE_round|rounding mode]].

===Notes===
{{tt|copysign}} is the only portable way to manipulate the sign of a NaN value (to examine the sign of a NaN, {{lc|signbit}} may also be used).

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;copysign(1.0,+2.0)      = %+.1f\n&quot;, copysign(1.0,+2.0));
    printf(&quot;copysign(1.0,-2.0)      = %+.1f\n&quot;, copysign(1.0,-2.0));
    printf(&quot;copysign(INFINITY,-2.0) = %f\n&quot;,    copysign(INFINITY,-2.0));
    printf(&quot;copysign(NAN,-2.0)      = %f\n&quot;,    copysign(NAN,-2.0));
}
 | p=true
 | output=
copysign(1.0,+2.0)      = +1.0
copysign(1.0,-2.0)      = -1.0
copysign(INFINITY,-2.0) = -inf
copysign(NAN,-2.0)      = -nan
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.11.1 | title=The copysign functions | p=255}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.8.1  | title=The copysign functions | p=529}}
{{ref std c99}}
{{ref std | section=7.12.11.1 | title=The copysign functions | p=236}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.8.1   | title=The copysign functions | p=465}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fabs}}
{{dsc inc | c/numeric/math/dsc signbit}}
{{dsc see cpp | cpp/numeric/math/copysign}}
{{dsc end}}

[[ar:c/numeric/math/copysign]]
[[cs:c/numeric/math/copysign]]
[[de:c/numeric/math/copysign]]
[[es:c/numeric/math/copysign]]
[[fr:c/numeric/math/copysign]]
[[it:c/numeric/math/copysign]]
[[ja:c/numeric/math/copysign]]
[[ko:c/numeric/math/copysign]]
[[pl:c/numeric/math/copysign]]
[[pt:c/numeric/math/copysign]]
[[ru:c/numeric/math/copysign]]
[[tr:c/numeric/math/copysign]]
[[zh:c/numeric/math/copysign]]</text>
      <sha1>1fuw5kpkptdhaqrwgj50ak75icmgxwy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/cos</title>
    <ns>0</ns>
    <id>6289</id>
    <revision>
      <id>78878</id>
      <parentid>77291</parentid>
      <timestamp>2015-06-11T11:13:18Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3822">{{c/title|cos, cosf, cosl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl |num=1| since=c99 |
float       cosf( float arg );
}}
{{dcl |num=2| 
double      cos( double arg );
}}
{{dcl | num=3| since=c99 |
long double cosl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define cos( arg )
}}
{{dcl end}}

@1-3@ Computes the cosine of {{tt|arg}} (measured in radians).
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|cosl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|cos}} is called. Otherwise, {{tt|cosf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|ccosf}}, {{c|ccos}}, {{c|ccosl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing angle in radians}}
{{par end}}

===Return value===
===Return value===
If no errors occur, the cosine of {{tt|arg}} ({{math|cos(arg)}}) in the range {{math|[-1 ; +1]}}, is returned.

{{rev begin}}
{{rev|until=c++11|
The result may have little or no significance if the magnitude of {{tt|arg}} is large.
}}
{{rev end}}

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, the result is 1.0
* if the argument is ±∞, NaN is returned and {{lc|FE_INVALID}} is raised
* if the argument is NaN, NaN is returned

===Notes===
The case where the argument is infinite is not specified to be a domain error in C, but it is defined as a [http://pubs.opengroup.org/onlinepubs/9699919799/functions/cos.html domain error in POSIX].

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    double pi = acos(-1);
    // typical usage
    printf(&quot;cos(pi/3) = %f\n&quot;, cos(pi/3));
    printf(&quot;cos(pi/2) = %f\n&quot;, cos(pi/2));
    printf(&quot;cos(-3*pi/4) = %f\n&quot;, cos(-3*pi/4));
    // special values
    printf(&quot;cos(+0) = %f\n&quot;, cos(0.0));
    printf(&quot;cos(-0) = %f\n&quot;, cos(-0.0));
    // error handling 
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;cos(INFINITY) = %f\n&quot;, cos(INFINITY));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
cos(pi/3) = 0.500000
cos(pi/2) = 0.000000
cos(-3*pi/4) = -0.707107
cos(+0) = 1.000000
cos(-0) = 1.000000
cos(INFINITY) = -nan
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.4.5 | title=The cos functions | p=239}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.1.5 | title=The cos functions | p=519}}
{{ref std c99}}
{{ref std | section=7.12.4.5 | title=The cos functions | p=220}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.1.5  | title=The cos functions| p=456}}
{{ref std c89}}
{{ref std | section=4.5.2.5  | title=The cos function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc sin}}
{{dsc inc | c/numeric/math/dsc tan}}
{{dsc inc | c/numeric/math/dsc acos}}
{{dsc inc | c/numeric/complex/dsc ccos}}
{{dsc see cpp | cpp/numeric/math/cos}}
{{dsc end}}

[[ar:c/numeric/math/cos]]
[[cs:c/numeric/math/cos]]
[[de:c/numeric/math/cos]]
[[es:c/numeric/math/cos]]
[[fr:c/numeric/math/cos]]
[[it:c/numeric/math/cos]]
[[ja:c/numeric/math/cos]]
[[ko:c/numeric/math/cos]]
[[pl:c/numeric/math/cos]]
[[pt:c/numeric/math/cos]]
[[ru:c/numeric/math/cos]]
[[tr:c/numeric/math/cos]]
[[zh:c/numeric/math/cos]]</text>
      <sha1>e1bnrh53i8xbt4nv9vwqxxr39il2ht3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/cosh</title>
    <ns>0</ns>
    <id>6302</id>
    <revision>
      <id>78881</id>
      <parentid>77298</parentid>
      <timestamp>2015-06-11T11:18:57Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3585">{{c/title|cosh, coshf, coshl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       coshf( float arg );
}}
{{dcl | num=2 |
double      cosh( double arg );
}}
{{dcl | num=3 | since=c99 |
long double coshl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define cosh( arg )
}}
{{dcl end}}

@1-3@ Computes the hyperbolic cosine of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|coshl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|cosh}} is called. Otherwise, {{tt|coshf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|ccoshf}}, {{c|ccosh}}, {{c|ccoshl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing a hyperbolic angle}}
{{par end}}

===Return value===
If no errors occur, the hyperbolic cosine of {{tt|arg}} ({{math|cosh(arg)}}, or {{math|{{mfrac|e{{su|p=arg}}+e{{su|p=-arg}}|2}}}}) is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, 1 is returned
* If the argument is ±∞, +∞ is returned
* if the argument is NaN, NaN is returned

===Notes===
For the IEEE-compatible type {{c|double}}, if {{math|{{!}}arg{{!}} &gt; 710.5}}, then {{tt|cosh(arg)}} overflows.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;cosh(1) = %f\ncosh(-1)= %f\n&quot;, cosh(1), cosh(-1));
    printf(&quot;log(sinh(1) + cosh(1))=%f\n&quot;, log(sinh(1)+cosh(1)));
    // special values
    printf(&quot;cosh(+0) = %f\ncosh(-0) = %f\n&quot;, cosh(0.0), cosh(-0.0));
    // error handling 
    errno=0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;cosh(710.5) = %f\n&quot;, cosh(710.5));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
cosh(1) = 1.543081
cosh(-1)= 1.543081
log(sinh(1) + cosh(1))=1.000000
cosh(+0) = 1.000000
cosh(-0) = 1.000000
cosh(710.5) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.5.4 | title=The cosh functions | p=241}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.2.4 | title=The cosh functions | p=520}}
{{ref std c99}}
{{ref std | section=7.12.5.4 | title=The cosh functions | p=222}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.2.4  | title=The cosh functions| p=457}}
{{ref std c89}}
{{ref std | section=4.5.3.1  | title=The cosh function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc sinh}}
{{dsc inc | c/numeric/math/dsc tanh}}
{{dsc inc | c/numeric/math/dsc acosh}}
{{dsc inc | c/numeric/complex/dsc ccosh}}
{{dsc see cpp | cpp/numeric/math/cosh}}
{{dsc end}}

[[ar:c/numeric/math/cosh]]
[[cs:c/numeric/math/cosh]]
[[de:c/numeric/math/cosh]]
[[es:c/numeric/math/cosh]]
[[fr:c/numeric/math/cosh]]
[[it:c/numeric/math/cosh]]
[[ja:c/numeric/math/cosh]]
[[ko:c/numeric/math/cosh]]
[[pl:c/numeric/math/cosh]]
[[pt:c/numeric/math/cosh]]
[[ru:c/numeric/math/cosh]]
[[tr:c/numeric/math/cosh]]
[[zh:c/numeric/math/cosh]]</text>
      <sha1>50uiin06losgetl47rcc86bjkssqy1i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/div</title>
    <ns>0</ns>
    <id>6268</id>
    <revision>
      <id>78874</id>
      <parentid>78873</parentid>
      <timestamp>2015-06-11T10:32:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="4198">{{c/title|div|ldiv|lldiv|imaxdiv}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl |num=1|
div_t     div( int x, int y );
}}
{{dcl |num=2|
ldiv_t    ldiv( long x, long y );
}}
{{dcl | since=c99 |num=3|
lldiv_t   lldiv( long long x, long long y );
}}
{{dcl header | inttypes.h}}
{{dcl | since=c99 |num=4|
imaxdiv_t imaxdiv( intmax_t x, intmax_t y );
}}
{{dcl end}}

Computes both the quotient and the remainder of the division of the numerator {{tt|x}} by the denominator {{tt|y}}.

{{rev begin}}
{{rev|until=c99|
Computes quotient and remainder simultaneously. The quotient is the algebraic quotient with any fractional part discarded (truncated towards zero). The remainder is such that {{c|1=quot * y + rem == x}}.
}}
{{rev|since=c99|
Computes the quotient (the result of the expression {{c|x/y}}) and remainder (the result of the expression {{c|x%y}}) simultaneously.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | x, y | integer values}}
{{par end}}

===Return value===
If both the remainder and the quotient can be represented as objects of the corresponding type (int, long, long long, imaxdiv_t, respectively), returns both as an object of type {{tt|div_t}}, {{tt|ldiv_t}}, {{tt|lldiv_t}}, {{tt|imaxdiv_t}} defined as follows:

{{member | div_t | 2=
{{source|1=
struct div_t { int quot; int rem; };
}}
or
{{source|1=
struct div_t { int rem; int quot; };
}}
}}

{{member | ldiv_t | 2=
{{source|1=
struct ldiv_t { long quot; long rem; };
}}
or
{{source|1=
struct ldiv_t { long rem; long quot; };
}}
}}

{{member | lldiv_t | 2=
{{source|1=
struct lldiv_t { long long quot; long long rem; };
}}
or
{{source|1=
struct lldiv_t { long long rem; long long quot; };
}}
}}

{{member | imaxdiv_t | 2=
{{source|1=
struct imaxdiv_t { intmax_t quot; intmax_t rem; };
}}
or
{{source|1=
struct imaxdiv_t { intmax_t rem; intmax_t quot; };
}}
}}


If either the remainder or the quotient cannot be represented, the behavior is undefined.


===Notes===
Until C99, the rounding direction of the quotient and the sign of the remainder in the built-in division and remainder operators was implementation-defined if either of the operands was negative, but it was well-defined in {{tt|div}} and {{tt|ldiv}}.

On many platforms, a single CPU instruction obtains both the quotient and the remainder, and this function may leverage that, although compilers are generally able to merge nearby / and % where suitable.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;stdlib.h&gt;

// demo only: does not check for buffer overflow
void itoa(int n, int base, char* buf)
{
    div_t dv = {.quot = n};
    char* p = buf;
    do {
        dv = div(dv.quot, base);
        *p++ = &quot;0123456789abcdef&quot;[abs(dv.rem)];
    } while(dv.quot);
    if(n&lt;0) *p++ = '-';
    *p-- = '\0';
    while(buf &lt; p) { char c = *p; *p-- = *buf; *buf++ = c; } // reverse
}

int main(void)
{
    char buf[100];
    itoa(12346, 10, buf);
    printf(&quot;%s\n&quot;, buf);
    itoa(-12346, 10, buf);
    printf(&quot;%s\n&quot;, buf);
    itoa(65535, 16, buf);
    printf(&quot;%s\n&quot;, buf);
}
 | output=
12346
-12346
ffff
}}

===References===
{{ref std c11}}
{{ref std | section=7.8.2.2  | title=The imaxdiv function | p=219}}
{{ref std | section=7.22.6.2 | title=The div, ldiv and lldiv functions | p=356}}
{{ref std c99}}
{{ref std | section=7.8.2.2  | title=The imaxdiv function | p=200}}
{{ref std | section=7.20.6.2 | title=The div, ldiv and lldiv functions | p=320}}
{{ref std c89}}
{{ref std | section=4.10     | title=div_t, ldiv_t}}
{{ref std | section=4.10.6.2 | title=The div function}}
{{ref std | section=4.10.6.4 | title=The ldiv function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fmod}}
{{dsc inc | c/numeric/math/dsc remainder}}
{{dsc inc | c/numeric/math/dsc remquo}}
{{dsc see cpp | cpp/numeric/math/div}}
{{dsc end}}

[[ar:c/numeric/math/div]]
[[cs:c/numeric/math/div]]
[[de:c/numeric/math/div]]
[[es:c/numeric/math/div]]
[[fr:c/numeric/math/div]]
[[it:c/numeric/math/div]]
[[ja:c/numeric/math/div]]
[[ko:c/numeric/math/div]]
[[pl:c/numeric/math/div]]
[[pt:c/numeric/math/div]]
[[ru:c/numeric/math/div]]
[[tr:c/numeric/math/div]]
[[zh:c/numeric/math/div]]</text>
      <sha1>r1vekxon766798jmkqze9423jy0cfhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/erf</title>
    <ns>0</ns>
    <id>6299</id>
    <revision>
      <id>77334</id>
      <parentid>73369</parentid>
      <timestamp>2015-03-22T13:24:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3413">{{c/title|erf, erff, erfl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       erff( float arg );
}}
{{dcl | since=c99 |num=2|
double      erf( double arg );
}}
{{dcl | since=c99 |num=3|
long double erfl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define erf( arg )
}}
{{dcl end}}

@1-3@ Computes the [[enwiki:Error function|error function]] of {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|erfl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|erf}} is called. Otherwise, {{tt|erff}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, value of the error function of {{tt|arg}}, that is {{math|{{mfrac|2|{{mrad|&amp;pi;}}}}{{minteg|0|arg|{{mexp|-t{{su|p=2}}}}d''t''}}}}, is returned.

If a range error occurs due to underflow, the correct result (after rounding), that is {{math|{{mfrac|2*arg|{{mrad|&amp;pi;}}}}}}, is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, ±0 is returned
* If the argument is ±∞, ±1 is returned
* If the argument is NaN, NaN is returned

===Notes===
Underflow is guaranteed if {{c|{{!}}arg{{!}} &lt; DBL_MIN*(sqrt(π)/2)}}.

{{math|erf({{mfrac|x|&amp;sigma;{{mrad|2}}}})}} is the probability that a measurement whose errors are subject to a normal distribution with standard deviation {{math|&amp;sigma;}} is less than {{math|x}} away from the mean value.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
double phi(double x1, double x2)
{
    return (erf(x2/sqrt(2)) - erf(x1/sqrt(2)))/2;
}
int main(void)
{
    puts(&quot;normal variate probabilities:&quot;);
    for(int n=-4; n&lt;4; ++n)
        printf(&quot;[%2d:%2d]: %5.2f%%\n&quot;, n, n+1, 100*phi(n, n+1));

    puts(&quot;special values:&quot;);
    printf(&quot;erf(-0) = %f\n&quot;, erf(-0.0));
    printf(&quot;erf(Inf) = %f\n&quot;, erf(INFINITY));
}
 | output=
normal variate probabilities:
[-4:-3]:  0.13%
[-3:-2]:  2.14%
[-2:-1]: 13.59%
[-1: 0]: 34.13%
[ 0: 1]: 34.13%
[ 1: 2]: 13.59%
[ 2: 3]:  2.14%
[ 3: 4]:  0.13%
special values:
erf(-0) = -0.000000
erf(Inf) = 1.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.8.1 | title=The erf functions | p=249}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.5.1 | title=The erf functions | p=525}}
{{ref std c99}}
{{ref std | section=7.12.8.1 | title=The erf functions | p=230}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.5.1  | title=The erf functions| p=462}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc erfc}}
{{dsc see cpp | cpp/numeric/math/erf}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/Erf.html Weisstein, Eric W. &quot;Erf.&quot;] From MathWorld--A Wolfram Web Resource.

[[ar:c/numeric/math/erf]]
[[cs:c/numeric/math/erf]]
[[de:c/numeric/math/erf]]
[[es:c/numeric/math/erf]]
[[fr:c/numeric/math/erf]]
[[it:c/numeric/math/erf]]
[[ja:c/numeric/math/erf]]
[[ko:c/numeric/math/erf]]
[[pl:c/numeric/math/erf]]
[[pt:c/numeric/math/erf]]
[[ru:c/numeric/math/erf]]
[[tr:c/numeric/math/erf]]
[[zh:c/numeric/math/erf]]</text>
      <sha1>hbzz3pheir01r16kkqkvhkysgyux9mb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/erfc</title>
    <ns>0</ns>
    <id>6300</id>
    <revision>
      <id>77335</id>
      <parentid>73572</parentid>
      <timestamp>2015-03-22T13:31:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3504">{{c/title|erfc, erfcf, erfcl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       erfcf( float arg );
}}
{{dcl | since=c99 |num=2|
double      erfc( double arg );
}}
{{dcl | since=c99 |num=3|
long double erfcl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define erfc( arg )
}}
{{dcl end}}

@1-3@ Computes the [[enwiki:Complementary error function|complementary error function]] of {{tt|arg}}, that is {{tt|1.0-erf(arg)}}, but without loss of precision for large {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|erfcl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|erfc}} is called. Otherwise, {{tt|erfcf}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, value of the complementary error function of {{tt|arg}}, that is {{math|{{mfrac|2|{{mrad|&amp;pi;}}}}{{minteg|arg|∞|{{mexp|-t{{su|p=2}}}}d''t''}}}} or {{math|1-erf(arg)}}, is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is +∞, +0 is returned
* If the argument is -∞, 2 is returned
* If the argument is NaN, NaN is returned

===Notes===
For the IEEE-compatible type {{tt|double}}, underflow is guaranteed if {{tt|arg}} &gt; 26.55.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

double normalCDF(double x) // Phi(-∞, x) aka N(x)
{
    return erfc(-x/sqrt(2))/2;
}
int main(void)
{
    puts(&quot;normal cumulative distribution function:&quot;);
    for(double n=0; n&lt;1; n+=0.1)
        printf(&quot;normalCDF(%.2f) %5.2f%%\n&quot;, n, 100*normalCDF(n));

    puts(&quot;special values:&quot;);
    printf(&quot;erfc(-Inf) = %f\n&quot;, erfc(-INFINITY));
    printf(&quot;erfc(Inf) = %f\n&quot;, erfc(INFINITY));
}
|output=
normal cumulative distribution function:
normalCDF(0.00) 50.00%
normalCDF(0.10) 53.98%
normalCDF(0.20) 57.93%
normalCDF(0.30) 61.79%
normalCDF(0.40) 65.54%
normalCDF(0.50) 69.15%
normalCDF(0.60) 72.57%
normalCDF(0.70) 75.80%
normalCDF(0.80) 78.81%
normalCDF(0.90) 81.59%
normalCDF(1.00) 84.13%
special values:
erfc(-Inf) = 2.000000
erfc(Inf) = 0.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.8.2 | title=The erfc functions | p=249-250}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.5.2 | title=The erfc functions | p=525}}
{{ref std c99}}
{{ref std | section=7.12.8.2 | title=The erfc functions | p=230}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.5.2  | title=The erfc functions| p=462}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc erf}}
{{dsc see cpp | cpp/numeric/math/erfc}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/Erfc.html Weisstein, Eric W. &quot;Erfc.&quot;] From MathWorld--A Wolfram Web Resource.

[[ar:c/numeric/math/erfc]]
[[cs:c/numeric/math/erfc]]
[[de:c/numeric/math/erfc]]
[[es:c/numeric/math/erfc]]
[[fr:c/numeric/math/erfc]]
[[it:c/numeric/math/erfc]]
[[ja:c/numeric/math/erfc]]
[[ko:c/numeric/math/erfc]]
[[pl:c/numeric/math/erfc]]
[[pt:c/numeric/math/erfc]]
[[ru:c/numeric/math/erfc]]
[[tr:c/numeric/math/erfc]]
[[zh:c/numeric/math/erfc]]</text>
      <sha1>e1wtk2wwrjde232jaa8cwtfm85q0l81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/exp</title>
    <ns>0</ns>
    <id>6282</id>
    <revision>
      <id>78884</id>
      <parentid>77304</parentid>
      <timestamp>2015-06-11T11:23:55Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3736">{{c/title|exp, expf, expl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       expf( float arg );
}}
{{dcl |num=2|
double      exp( double arg );
}}
{{dcl | since=c99 |num=3|
long double expl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define exp( arg )
}}
{{dcl end}}

@1-3@ Computes the ''e'' (Euler's number, {{tt|2.7182818}}) raised to the given power {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|expl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|exp}} is called. Otherwise, {{tt|expf}} is called. If {{tt|arg}} is complex or imaginary, then the macro invokes the corresponding complex function ({{c|cexpf}}, {{c|cexp}}, {{c|cexpl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the base-''e'' exponential of {{tt|arg}} ({{math|e{{su|p=arg}}}}) is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, 1 is returned
* If the argument is -∞, +0 is returned
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
For IEEE-compatible type {{c|double}}, overflow is guaranteed if {{math|709.8 &lt; arg}}, and underflow is guaranteed if {{math|arg &lt; -708.4}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;exp(1) = %f\n&quot;, exp(1));
    printf(&quot;FV of $100, continuously compounded at 3%% for 1 year = %f\n&quot;,
            100*exp(0.03));
    // special values
    printf(&quot;exp(-0) = %f\n&quot;, exp(-0.0));
    printf(&quot;exp(-Inf) = %f\n&quot;, exp(-INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;exp(710) = %f\n&quot;, exp(710));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
|p=true
|output=
exp(1) = 2.718282
FV of $100, continuously compounded at 3% for 1 year = 103.045453
exp(-0) = 1.000000
exp(-Inf) = 0.000000
exp(710) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised

}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.1 | title=The exp functions | p=242}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.1 | title=The exp functions | p=520}}
{{ref std c99}}
{{ref std | section=7.12.6.1 | title=The exp functions | p=223}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.1  | title=The exp functions| p=458}}
{{ref std c89}}
{{ref std | section=4.5.4.1  | title=The exp function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc exp2}}
{{dsc inc | c/numeric/math/dsc expm1}}
{{dsc inc | c/numeric/math/dsc log}}
{{dsc inc | c/numeric/complex/dsc cexp}}
{{dsc see cpp | cpp/numeric/math/exp}}
{{dsc end}}

[[ar:c/numeric/math/exp]]
[[cs:c/numeric/math/exp]]
[[de:c/numeric/math/exp]]
[[es:c/numeric/math/exp]]
[[fr:c/numeric/math/exp]]
[[it:c/numeric/math/exp]]
[[ja:c/numeric/math/exp]]
[[ko:c/numeric/math/exp]]
[[pl:c/numeric/math/exp]]
[[pt:c/numeric/math/exp]]
[[ru:c/numeric/math/exp]]
[[tr:c/numeric/math/exp]]
[[zh:c/numeric/math/exp]]</text>
      <sha1>nusqbgkhoiv99n53k4nt5f78sl7x1fz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/exp2</title>
    <ns>0</ns>
    <id>6277</id>
    <revision>
      <id>77305</id>
      <parentid>73331</parentid>
      <timestamp>2015-03-21T14:40:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3273">{{c/title|exp2, exp2f, exp2l}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       exp2f( float n );
}}
{{dcl | since=c99 |num=2|
double      exp2( double n );
}}
{{dcl | since=c99 |num=3|
long double exp2l( long double n );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define exp2( n )
}}
{{dcl end}}

@1-3@ Computes 2 raised to the given power {{tt|n}}.
@4@ Type-generic macro: If {{tt|n}} has type {{c|long double}}, {{tt|exp2l}} is called. Otherwise, if {{tt|n}} has integer type or the type {{c|double}}, {{tt|exp2}} is called. Otherwise, {{tt|exp2f}} is called.

===Parameters===
{{par begin}}
{{par | n | floating point value}}
{{par end}}

===Return value===
If no errors occur, the base-''2'' exponential of {{tt|n}} ({{math|2{{su|p=n}}}}) is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, 1 is returned
* If the argument is -∞, +0 is returned
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;exp2(5) = %f\n&quot;, exp2(5));
    printf(&quot;exp2(0.5) = %f\n&quot;, exp2(0.5));
    printf(&quot;exp2(-4) = %f\n&quot;, exp2(-4));
    // special values
    printf(&quot;exp2(-9) = %f\n&quot;, exp2(-0.9));
    printf(&quot;exp2(-Inf) = %f\n&quot;, exp2(-INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;exp2(1024) = %f\n&quot;, exp2(1024));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
exp2(5) = 32.000000
exp2(0.5) = 1.414214
exp2(-4) = 0.062500
exp2(-9) = 0.535887
exp2(-Inf) = 0.000000
exp2(1024) = Inf
    errno == ERANGE: Result too large
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.2 | title=The exp2 functions | p=242-243}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.2 | title=The exp2 functions | p=521}}
{{ref std c99}}
{{ref std | section=7.12.6.2 | title=The exp2 functions | p=223}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.2  | title=The exp2 functions| p=458}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc exp}}
{{dsc inc | c/numeric/math/dsc expm1}}
{{dsc inc | c/numeric/math/dsc log2}}
{{dsc see cpp | cpp/numeric/math/exp2}}
{{dsc end}}

[[ar:c/numeric/math/exp2]]
[[cs:c/numeric/math/exp2]]
[[de:c/numeric/math/exp2]]
[[es:c/numeric/math/exp2]]
[[fr:c/numeric/math/exp2]]
[[it:c/numeric/math/exp2]]
[[ja:c/numeric/math/exp2]]
[[ko:c/numeric/math/exp2]]
[[pl:c/numeric/math/exp2]]
[[pt:c/numeric/math/exp2]]
[[ru:c/numeric/math/exp2]]
[[tr:c/numeric/math/exp2]]
[[zh:c/numeric/math/exp2]]</text>
      <sha1>1wq5ohwp5qcf8h1y7q1jb0oswi7bt8c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/expm1</title>
    <ns>0</ns>
    <id>6278</id>
    <revision>
      <id>77307</id>
      <parentid>73333</parentid>
      <timestamp>2015-03-21T14:46:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4133">{{c/title|expm1, expm1f, expm1l}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=1 |
float       expm1f( float arg );
}}
{{dcl | since=c99 |num=2 |
double      expm1( double arg );
}}
{{dcl | since=c99 |num=3 |
long double expm1l( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define expm1( arg )
}}
{{dcl end}}

@1-3@ Computes the ''e'' (Euler's number, {{tt|2.7182818}}) raised to the given power {{tt|arg}}, minus {{c|1.0}}. This function is more accurate than the expression {{c|std::exp(arg)-1.0}} if {{tt|arg}} is close to zero.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|expm1l}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|expm1}} is called. Otherwise, {{tt|expm1f}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur {{math|e{{su|p=arg}}-1}} is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned, unmodified
* If the argument is -∞, -1 is returned
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
The functions {{tt|expm1}} and {{lc|log1p}} are useful for financial calculations, for example, when calculating small daily interest rates: {{math|(1+x){{su|p=n}}-1}} can be expressed as {{c|expm1(n * log1p(x))}}. These functions also simplify writing accurate inverse hyperbolic functions.

For IEEE-compatible type {{c|double}}, overflow is guaranteed if {{math|709.8 &lt; arg}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;expm1(1) = %f\n&quot;, expm1(1));
    printf(&quot;Interest earned in 2 days on $100, compounded daily at 1%%\n&quot;
           &quot; on a 30/360 calendar = %f\n&quot;,
           100*expm1(2*log1p(0.01/360)));
    printf(&quot;exp(1e-16)-1 = %g, but expm1(1e-16) = %g\n&quot;,
           exp(1e-16)-1, expm1(1e-16));
    // special values
    printf(&quot;expm1(-0) = %f\n&quot;, expm1(-0.0));
    printf(&quot;expm1(-Inf) = %f\n&quot;, expm1(-INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;expm1(710) = %f\n&quot;, expm1(710));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
expm1(1) = 1.718282
Interest earned in 2 days on $100, compounded daily at 1%
 on a 30/360 calendar = 0.005556
exp(1e-16)-1 = 0, but expm1(1e-16) = 1e-16
expm1(-0) = -0.000000
expm1(-Inf) = -1.000000
expm1(710) = inf
    errno == ERANGE: Result too large
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.3 | title=The expm1 functions | p=243}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.3 | title=The expm1 functions | p=521}}
{{ref std c99}}
{{ref std | section=7.12.6.3 | title=The expm1 functions | p=223-224}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.3  | title=The expm1 functions| p=458}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc exp}}
{{dsc inc | c/numeric/math/dsc exp2}}
{{dsc inc | c/numeric/math/dsc log1p}}
{{dsc see cpp | cpp/numeric/math/expm1}}
{{dsc end}}

[[ar:c/numeric/math/expm1]]
[[cs:c/numeric/math/expm1]]
[[de:c/numeric/math/expm1]]
[[es:c/numeric/math/expm1]]
[[fr:c/numeric/math/expm1]]
[[it:c/numeric/math/expm1]]
[[ja:c/numeric/math/expm1]]
[[ko:c/numeric/math/expm1]]
[[pl:c/numeric/math/expm1]]
[[pt:c/numeric/math/expm1]]
[[ru:c/numeric/math/expm1]]
[[tr:c/numeric/math/expm1]]
[[zh:c/numeric/math/expm1]]</text>
      <sha1>nlswt7zjml3q0wntiifuweqzxduq2uo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/fabs</title>
    <ns>0</ns>
    <id>6267</id>
    <revision>
      <id>78893</id>
      <parentid>77250</parentid>
      <timestamp>2015-06-11T11:55:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3260">{{c/title|fabs, fabsf, fabsl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       fabsf( float arg ); 
}}
{{dcl | num=2 |
double      fabs( double arg );
}}
{{dcl | num=3 | since=c99 |
long double fabsl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define fabs( arg )
}}
{{dcl end}}

@1-3@ Computes the absolute value of a floating point value {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|fabsl}} is called. Otherwise, if the argument has integer type or has type {{c|double}}, {{tt|fabs}} is called. Otherwise, {{tt|fabsf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|cabsf}}, {{c|cabs}}, {{c|cabsl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If successful, returns the absolute value of {{tt|arg}} ({{tt|{{!}}arg{{!}}}}). The value returned is exact and does not depend on any rounding modes.

===Error handling===
This function is not subject to any of the error conditions specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, +0 is returned
* If the argument is ±∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

/* This numerical integration assumes all area is positive. */
#define PI 3.14159
double num_int (double a, double b,
                double f(double),
                unsigned n) {
    if (a == b) return 0.0;
    if (n == 0) n=1;   /* avoid division by zero */
    double h = (b-a)/n;
    double sum = 0.0;
    for (unsigned k=0; k &lt; n; ++k)
        sum += h*fabs(f(a+k*h));
    return sum;
}

int main(void)
{
    printf(&quot;fabs(+3) = %f\n&quot;, fabs(+3.0));
    printf(&quot;fabs(-3) = %f\n&quot;, fabs(-3.0));
    // special values
    printf(&quot;fabs(-0) = %f\n&quot;, fabs(-0.0));
    printf(&quot;fabs(-Inf) = %f\n&quot;, fabs(-INFINITY));

    printf(&quot;%f\n&quot;, num_int(0.0,2*PI,sin,100000));

}
 | output=
fabs(+3) = 3.000000
fabs(-3) = 3.000000
fabs(-0) = 0.000000
fabs(-Inf) = inf
4.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.7.2 | title=The fabs functions | p=248}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std c99}}
{{ref std | section=7.12.7.2 | title=The fabs functions | p=228-229}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std c89}}
{{ref std | section=4.5.6.2  | title=The fabs function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc abs}}
{{dsc inc | c/numeric/math/dsc copysign}}
{{dsc inc | c/numeric/math/dsc signbit}}
{{dsc inc | c/numeric/complex/dsc cabs}}
{{dsc see cpp | cpp/numeric/math/fabs}}
{{dsc end}}

[[ar:c/numeric/math/fabs]]
[[cs:c/numeric/math/fabs]]
[[de:c/numeric/math/fabs]]
[[es:c/numeric/math/fabs]]
[[fr:c/numeric/math/fabs]]
[[it:c/numeric/math/fabs]]
[[ja:c/numeric/math/fabs]]
[[ko:c/numeric/math/fabs]]
[[pl:c/numeric/math/fabs]]
[[pt:c/numeric/math/fabs]]
[[ru:c/numeric/math/fabs]]
[[tr:c/numeric/math/fabs]]
[[zh:c/numeric/math/fabs]]</text>
      <sha1>jv57wxih9td5hfly3r74xxo6kmwsya8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/fdim</title>
    <ns>0</ns>
    <id>6275</id>
    <revision>
      <id>77360</id>
      <parentid>73326</parentid>
      <timestamp>2015-03-23T20:15:58Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3210">{{c/title|fdim}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       fdimf( float x, float y );
}}
{{dcl | since=c99 |num=2|
double      fdim( double x, double y );
}}
{{dcl | since=c99 |num=3|
long double fdiml( long double x, long double y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define fdim( x, y )
}}
{{dcl end}}

@1-3@ Returns the positive difference between {{c|x}} and {{c|y}}, that is, if {{c|x&gt;y}}, returns {{c|x-y}}, otherwise (if {{c|x≤y}}), returns +0.
@4@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|fdiml}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|fdim}} is called. Otherwise, {{tt|fdimf}} is called.

===Parameters===
{{par begin}}
{{par | x, y | floating point value}}
{{par end}}

===Return value===
If successful, returns the positive difference between x and y.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct value (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If either argument is NaN, NaN is returned

===Notes===
Equivalent to {{c|fmax(x-y, 0)}} except for the NaN handling requirements.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;fdim(4, 1) = %f, fdim(1, 4)=%f\n&quot;, fdim(4,1), fdim(1,4));
    printf(&quot;fdim(4,-1) = %f, fdim(1,-4)=%f\n&quot;, fdim(4,-1), fdim(1,-4));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;fdim(1e308, -1e308) = %f\n&quot;, fdim(1e308, -1e308));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
fdim(4, 1) = 3.000000, fdim(1, 4)=0.000000
fdim(4,-1) = 5.000000, fdim(1,-4)=5.000000
fdim(1e308, -1e308) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.12.1 | title=The fdim functions | p=257}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.9.1  | title=The fdim functions | p=530}}
{{ref std c99}}
{{ref std | section=7.12.12.1 | title=The fdim functions | p=238}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.9.1   | title=The fdim functions | p=466}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc abs}}
{{dsc inc | c/numeric/math/dsc fmax}}
{{dsc see cpp | cpp/numeric/math/fdim}}
{{dsc end}}

[[ar:c/numeric/math/fdim]]
[[cs:c/numeric/math/fdim]]
[[de:c/numeric/math/fdim]]
[[es:c/numeric/math/fdim]]
[[fr:c/numeric/math/fdim]]
[[it:c/numeric/math/fdim]]
[[ja:c/numeric/math/fdim]]
[[ko:c/numeric/math/fdim]]
[[pl:c/numeric/math/fdim]]
[[pt:c/numeric/math/fdim]]
[[ru:c/numeric/math/fdim]]
[[tr:c/numeric/math/fdim]]
[[zh:c/numeric/math/fdim]]</text>
      <sha1>rfeig1x12i0jjbgw6hdhyv8k9pnw6ko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/float t</title>
    <ns>0</ns>
    <id>15712</id>
    <revision>
      <id>87844</id>
      <timestamp>2016-10-06T14:16:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new page about float_t and double_t</comment>
      <text xml:space="preserve" bytes="2031">{{title|float_t, double_t}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
typedef /*implementation defined*/ float_t
}}
{{dcl | since=c99 |
typedef /*implementation defined*/ double_t
}}
{{dcl end}}

The types {{c|float_t}} and {{c|double_t}} are floating types at least as wide as {{c|float}} and {{c|double}}, respectively, and such that {{c|double_t}} is at least as wide as {{c|float_t}}. The value of {{lc|FLT_EVAL_METHOD}} determines the types of {{c|float_t}} and {{c|double_t}}.

{{dsc begin}}
{{dsc hitem | FLT_EVAL_METHOD | Explanation}}
{{dsc | {{tt|0}} | {{c|float_t}} and {{c|double_t}} are equivalent to {{c|float}} and {{c|double}}, respectively}}
{{dsc | {{tt|1}} | both {{c|float_t}} and {{c|double_t}} are equivalent to {{c|double}}}}
{{dsc | {{tt|2}} | both {{c|float_t}} and {{c|double_t}} are equivalent to {{c|long double}}}}
{{dsc | {{tt|other}} | both {{c|float_t}} and {{c|double_t}} are implementation defined}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;float.h&gt;
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    printf(&quot;%d\n&quot;, FLT_EVAL_METHOD);
    printf(&quot;%zu  %zu\n&quot;, sizeof(float),sizeof(float_t));
    printf(&quot;%zu  %zu\n&quot;, sizeof(double),sizeof(double_t));
    return 0;
}
 | p = true
 | output=
0
4  4
8  8
}}

===References===
{{ref std c11}}
{{ref std | section=7.12 | title=Mathematics &lt;math.h&gt; | p=231}}
{{ref std c99}}
{{ref std | section=7.12 | title=Mathematics &lt;math.h&gt; | p=212}}
{{ref std end}}

&lt;!--
===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/math/FP_categories | ntitle=floating point number categories}}
{{dsc end}}
--&gt;

[[ar:c/numeric/math/float_t]]
[[cs:c/numeric/math/float_t]]
[[de:c/numeric/math/float_t]]
[[es:c/numeric/math/float_t]]
[[fr:c/numeric/math/float_t]]
[[it:c/numeric/math/float_t]]
[[ja:c/numeric/math/float_t]]
[[ko:c/numeric/math/float_t]]
[[pl:c/numeric/math/float_t]]
[[pt:c/numeric/math/float_t]]
[[ru:c/numeric/math/float_t]]
[[tr:c/numeric/math/float_t]]
[[zh:c/numeric/math/float_t]]</text>
      <sha1>pwwbhcckug9gwswcixjb5qocmmqn6jt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/floor</title>
    <ns>0</ns>
    <id>6304</id>
    <revision>
      <id>78894</id>
      <parentid>77347</parentid>
      <timestamp>2015-06-11T11:56:35Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3240">{{c/title|floor|floorf|floorl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       floorf( float arg );
}}
{{dcl |num=2|
double      floor( double arg );
}}
{{dcl | since=c99 |num=3|
long double floorl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define floor( arg )
}}
{{dcl end}}

@1-3@ Computes the largest integer value not greater than {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|floorl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|floor}} is called. Otherwise, {{tt|floorf}} is called.
 
===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the largest integer value not greater than {{tt|arg}}, that is {{math|⌊arg⌋}}, is returned.

{{plot | left=Return value | bottom=Argument | math-floor.svg}}

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[c/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If arg is NaN, NaN is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised when rounding a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so this function never overflows on its own; however the result may overflow any integer type (including {{lc|intmax_t}}), when stored in an integer variable.

===Example===
{{example |
 | code=
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{
    printf(&quot;floor(+2.7) = %+.1f\n&quot;, floor(2.7));
    printf(&quot;floor(-2.7) = %+.1f\n&quot;, floor(-2.7));
    printf(&quot;floor(-0.0) = %+.1f\n&quot;, floor(-0.0));
    printf(&quot;floor(-Inf) = %+f\n&quot;,   floor(-INFINITY));
}
 | p=true
 | output=
floor(+2.7) = +2.0
floor(-2.7) = -3.0
floor(-0.0) = -0.0
floor(-Inf) = -inf
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.9.2 | title=The floor functions | p=251}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.6.2 | title=The floor functions | p=526}}
{{ref std c99}}
{{ref std | section=7.12.9.2 | title=The floor functions | p=232}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.6.2  | title=The floor functions| p=463}}
{{ref std c89}}
{{ref std | section=4.5.6.3  | title=The floor function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc ceil}}
{{dsc inc | c/numeric/math/dsc trunc}}
{{dsc inc | c/numeric/math/dsc round}}
{{dsc see cpp | cpp/numeric/math/floor}}
{{dsc end}}

[[ar:c/numeric/math/floor]]
[[cs:c/numeric/math/floor]]
[[de:c/numeric/math/floor]]
[[es:c/numeric/math/floor]]
[[fr:c/numeric/math/floor]]
[[it:c/numeric/math/floor]]
[[ja:c/numeric/math/floor]]
[[ko:c/numeric/math/floor]]
[[pl:c/numeric/math/floor]]
[[pt:c/numeric/math/floor]]
[[ru:c/numeric/math/floor]]
[[tr:c/numeric/math/floor]]
[[zh:c/numeric/math/floor]]</text>
      <sha1>hw2exxtebwicq5tmig8za9k6xsiabbn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/fma</title>
    <ns>0</ns>
    <id>6272</id>
    <revision>
      <id>87388</id>
      <parentid>77406</parentid>
      <timestamp>2016-08-17T20:52:46Z</timestamp>
      <contributor>
        <username>Jlebar</username>
        <id>3201</id>
      </contributor>
      <comment>Presumably the fma macro takes three args, not two.</comment>
      <text xml:space="preserve" bytes="6029">{{c/title|fma, fmaf, fmal}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       fmaf( float x, float y, float z );
}}
{{dcl | since=c99 |num=2|
double      fma( double x, double y, double z );
}}
{{dcl | since=c99 |num=3|
long double fmal( long double x, long double y, long double z );
}}
{{dcl | since=c99 | num=4 |
#define FP_FAST_FMA  /* implementation-defined */
}}
{{dcl | since=c99 | num=5 |
#define FP_FAST_FMAF /* implementation-defined */
}}
{{dcl | since=c99 | num=6 |
#define FP_FAST_FMAL /* implementation-defined */
}}
{{dcl header | tgmath.h}}
{{dcl |num=7| since=c99 |
#define fma( x, y, z )
}}
{{dcl end}}

@1-3@ Computes {{c|(x*y) + z}} as if to infinite precision and rounded only once to fit the result type.
@4-6@ If the macro constants {{tt|FP_FAST_FMAF}}, {{tt|FP_FAST_FMA}}, or {{tt|FP_FAST_FMAL}} are defined, the corresponding function {{tt|fmaf}}, {{tt|fma}}, or {{tt|fmal}} evaluates faster (in addition to being more precise) than the expression {{c|x*y+z}} for {{c|float}}, {{c|double}}, and {{c|long double}} arguments, respectively. If defined, these macros evaluate to integer {{c|1}}.
@7@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|fmal}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|fma}} is called. Otherwise, {{tt|fmaf}} is called.

===Parameters===
{{par begin}}
{{par | x, y, z | floating point values}}
{{par end}}

===Return value===
If successful, returns the value of {{c|(x*y) + z}} as if calculated to infinite precision and rounded once to fit the result type (or, alternatively, calculated as a single ternary floating-point operation).

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct value (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If x is zero and y is infinite or if x is infinite and y is zero, and z is not a NaN, then NaN is returned and {{lc|FE_INVALID}} is raised
* If x is zero and y is infinite or if x is infinite and y is zero, and z is a NaN, then NaN is returned and {{lc|FE_INVALID}} may be raised
* If x*y is an exact infinity and z is an infinity with the opposite sign, NaN is returned and {{lc|FE_INVALID}} is raised
* If x or y are NaN, NaN is returned
* If z is NaN, and x*y aren't 0*Inf or Inf*0, then NaN is returned (without FE_INVALID)

===Notes===
This operation is commonly implemented in hardware as [[enwiki:Multiply%E2%80%93accumulate_operation|fused multiply-add]] CPU instruction. If supported by hardware, the appropriate FP_FAST_FMA* macros are expected to be defined, but many implementations make use of the CPU instruction even when the macros are not defined.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/fma.html POSIX specifies] that the situation where the value x*y is invalid and z is a NaN is a domain error.

Due to its infinite intermediate precision, {{tt|fma}} is a common building block of other correctly-rounded mathematical operations, such as {{lc|sqrt}} or even the division (where not provided by the CPU, e.g. Itanium).

As with all floating-point expressions, the expression {{c|(x*y) + z}} may be compiled as a fused mutiply-add unless the [[c/preprocessor/impl|#pragma]] {{c|STDC FP_CONTRACT}} is off.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    // demo the difference between fma and built-in operators
    double in = 0.1;
    printf(&quot;0.1 double is %.23f (%a)\n&quot;, in, in);
    printf(&quot;0.1*10 is 1.0000000000000000555112 (0x8.0000000000002p-3),&quot;
           &quot; or 1.0 if rounded to double\n&quot;);
    double expr_result = 0.1 * 10 - 1;
    printf(&quot;0.1 * 10 - 1 = %g : 1 subtracted after &quot;
           &quot;intermediate rounding to 1.0\n&quot;, expr_result);
    double fma_result = fma(0.1, 10, -1);
    printf(&quot;fma(0.1, 10, -1) = %g (%a)\n&quot;, fma_result, fma_result);

    // fma use in double-double arithmetic
    printf(&quot;\nin double-double arithmetic, 0.1 * 10 is representable as &quot;);
    double high = 0.1 * 10;
    double low = fma(0.1, 10, -high);
    printf(&quot;%g + %g\n\n&quot;, high, low);

    //error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;fma(+Inf, 10, -Inf) = %f\n&quot;, fma(INFINITY, 10, -INFINITY));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
0.1 double is 0.10000000000000000555112 (0x1.999999999999ap-4)
0.1*10 is 1.0000000000000000555112 (0x8.0000000000002p-3), or 1.0 if rounded to double
0.1 * 10 - 1 = 0 : 1 subtracted after intermediate rounding to 1.0
fma(0.1, 10, -1) = 5.55112e-17 (0x1p-54)

in double-double arithmetic, 0.1 * 10 is representable as 1 + 5.55112e-17

fma(+Inf, 10, -Inf) = -nan
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.13.1 | title=The fma functions | p=258}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.10.1 | title=The fma functions | p=530}}
{{ref std c99}}
{{ref std | section=7.12.13.1 | title=The fma functions | p=239}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.10.1  | title=The fma functions | p=466}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc remainder}}
{{dsc inc | c/numeric/math/dsc remquo}}
{{dsc see cpp | cpp/numeric/math/fma}}
{{dsc end}}

[[ar:c/numeric/math/fma]]
[[cs:c/numeric/math/fma]]
[[de:c/numeric/math/fma]]
[[es:c/numeric/math/fma]]
[[fr:c/numeric/math/fma]]
[[it:c/numeric/math/fma]]
[[ja:c/numeric/math/fma]]
[[ko:c/numeric/math/fma]]
[[pl:c/numeric/math/fma]]
[[pt:c/numeric/math/fma]]
[[ru:c/numeric/math/fma]]
[[tr:c/numeric/math/fma]]
[[zh:c/numeric/math/fma]]</text>
      <sha1>caipufuavftoi7ea4gyyxwel3o7z2lq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/fmax</title>
    <ns>0</ns>
    <id>6273</id>
    <revision>
      <id>77361</id>
      <parentid>73324</parentid>
      <timestamp>2015-03-23T20:25:30Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2917">{{c/title|fmax, fmaxf, fmaxl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       fmaxf( float x, float y );
}}
{{dcl | since=c99 |num=2|
double      fmax( double x, double y );
}}
{{dcl | since=c99 |num=3|
long double fmaxl( long double x, long double y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define fmax( x, y )
}}
{{dcl end}}

@1-3@ Returns the larger of two floating point arguments, treating NaNs as missing data (between a NaN and a numeric value, the numeric value is chosen).
@4@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|fmaxl}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|fmax}} is called. Otherwise, {{tt|fmaxf}} is called.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par end}}

===Return value===
If successful, returns the larger of two floating point values. The value returned is exact and does not depend on any rounding modes.

===Error handling===
This function is not subject to any of the error conditions specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If one of the two arguments is NaN, the value of the other argument is returned
* Only if both arguments are NaN, NaN is returned

===Notes===
This function is not required to be sensitive to the sign of zero, although some implementations additionally enforce that if one argument is +0 and the other is -0, then +0 is returned.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    printf(&quot;fmax(2,1)    = %f\n&quot;, fmax(2,1));
    printf(&quot;fmax(-Inf,0) = %f\n&quot;, fmax(-INFINITY,0));
    printf(&quot;fmax(NaN,-1) = %f\n&quot;, fmax(NAN,-1));
}
 | output=
fmax(2,1)    = 2.000000
fmax(-Inf,0) = 0.000000
fmax(NaN,-1) = -1.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.12.2 | title=The fmax functions | p=257-258}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.9.2  | title=The fmax functions | p=530}}
{{ref std c99}}
{{ref std | section=7.12.12.2 | title=The fmax functions | p=238-239}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.9.2   | title=The fmax functions | p=466}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isgreater}}
{{dsc inc | c/numeric/math/dsc fmin}}
{{dsc see cpp | cpp/numeric/math/fmax}}
{{dsc end}}

[[ar:c/numeric/math/fmax]]
[[cs:c/numeric/math/fmax]]
[[de:c/numeric/math/fmax]]
[[es:c/numeric/math/fmax]]
[[fr:c/numeric/math/fmax]]
[[it:c/numeric/math/fmax]]
[[ja:c/numeric/math/fmax]]
[[ko:c/numeric/math/fmax]]
[[pl:c/numeric/math/fmax]]
[[pt:c/numeric/math/fmax]]
[[ru:c/numeric/math/fmax]]
[[tr:c/numeric/math/fmax]]
[[zh:c/numeric/math/fmax]]</text>
      <sha1>1bctjhgvgv953zkcmpzhc2vpighv5e1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/fmin</title>
    <ns>0</ns>
    <id>6274</id>
    <revision>
      <id>77362</id>
      <parentid>73325</parentid>
      <timestamp>2015-03-23T20:31:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2914">{{c/title|fmin, fminf, fminl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       fminf( float x, float y );
}}
{{dcl | since=c99 |num=2|
double      fmin( double x, double y );
}}
{{dcl | since=c99 |num=3|
long double fminl( long double x, long double y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define fmin( x, y )
}}
{{dcl end}}

@1-3@ Returns the smaller of two floating point arguments, treating NaNs as missing data (between a NaN and a numeric value, the numeric value is chosen).
@4@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|fminl}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|fmin}} is called. Otherwise, {{tt|fminf}} is called.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par end}}

===Return value===
If successful, returns the smaller of two floating point values. The value returned is exact and does not depend on any rounding modes.

===Error handling===
This function is not subject to any of the error conditions specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If one of the two arguments is NaN, the value of the other argument is returned
* Only if both arguments are NaN, NaN is returned

===Notes===
This function is not required to be sensitive to the sign of zero, although some implementations additionally enforce that if one argument is +0 and the other is -0, then -0 is returned.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    printf(&quot;fmin(2,1)    = %f\n&quot;, fmin(2,1));
    printf(&quot;fmin(-Inf,0) = %f\n&quot;, fmin(-INFINITY,0));
    printf(&quot;fmin(NaN,-1) = %f\n&quot;, fmin(NAN,-1));
}
 | p=true
 | output=
fmin(2,1)    = 1.000000
fmin(-Inf,0) = -inf
fmin(NaN,-1) = -1.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.12.3 | title=The fmin functions | p=258}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.9.3  | title=The fmin functions | p=530}}
{{ref std c99}}
{{ref std | section=7.12.12.3 | title=The fmin functions | p=239}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.9.3   | title=The fmin functions | p=466}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isless}}
{{dsc inc | c/numeric/math/dsc fmax}}
{{dsc see cpp | cpp/numeric/math/fmin}}
{{dsc end}}

[[ar:c/numeric/math/fmin]]
[[cs:c/numeric/math/fmin]]
[[de:c/numeric/math/fmin]]
[[es:c/numeric/math/fmin]]
[[fr:c/numeric/math/fmin]]
[[it:c/numeric/math/fmin]]
[[ja:c/numeric/math/fmin]]
[[ko:c/numeric/math/fmin]]
[[pl:c/numeric/math/fmin]]
[[pt:c/numeric/math/fmin]]
[[ru:c/numeric/math/fmin]]
[[tr:c/numeric/math/fmin]]
[[zh:c/numeric/math/fmin]]</text>
      <sha1>glqqwpu7fvwr6pt0j5icxp0qopycot3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/fmod</title>
    <ns>0</ns>
    <id>6269</id>
    <revision>
      <id>78895</id>
      <parentid>77353</parentid>
      <timestamp>2015-06-11T11:58:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="4893">{{c/title|fmod|fmodf|fmodl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       fmodf( float x, float y );
}}
{{dcl | num=2 |
double      fmod( double x, double y );
}}
{{dcl | num=3 | since=c99 |
long double fmodl( long double x, long double y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define fmod( x, y )
}}
{{dcl end}}

@1-3@ Computes the floating-point remainder of the division operation {{c|x/y}}.
@4@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|fmodl}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|fmod}} is called. Otherwise, {{tt|fmodf}} is called.

The floating-point remainder of the division operation {{c|x/y}} calculated by this function is exactly the value {{c|x - n*y}}, where {{tt|n}} is {{c|x/y}} with its fractional part truncated.

The returned value has the same sign as {{tt|x}} and is less or equal to {{tt|y}} in magnitude.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par end}}

===Return value===
If successful, returns the floating-point remainder of the division {{c|x/y}} as defined above.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error may occur if {{tt|y}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|x}} is ±0 and {{tt|y}} is not zero, ±0 is returned
* If {{tt|x}} is ±∞ and {{tt|y}} is not NaN, NaN is returned and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±0 and {{tt|x}} is not NaN, NaN is returned  and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±∞ and {{tt|x}} is finite, {{tt|x}} is returned. 
* If either argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmod.html  POSIX requires] that a domain error occurs if {{tt|x}} is infinite or {{tt|y}} is zero.

{{tt|fmod}}, but not {{lc|remainder}} is useful for doing silent wrapping of floating-point types to unsigned integer types: {{c|1=(0.0 &lt;= (y = fmod(rint(x), 65536.0 )) ? y : 65536.0 + y)}} is in the range {{tt|[-0.0 .. 65535.0]}}, which corresponds to {{c|unsigned short}}, but {{c|remainder(rint(x), 65536.0}} is in the range {{tt|[-32767.0, +32768.0]}}, which is outside of the range of {{c|signed short}}.

The double version of fmod behaves as if implemented as follows:
{{source|1=
double fmod(double x, double y)
{
#pragma STDC FENV_ACCESS ON
    double result = remainder(fabs(x), (y = fabs(y)));
    if (signbit(result)) result += y;
    return copysign(result, x);
}
}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;fmod(+5.1, +3.0) = %.1f\n&quot;, fmod(5.1,3));
    printf(&quot;fmod(-5.1, +3.0) = %.1f\n&quot;, fmod(-5.1,3));
    printf(&quot;fmod(+5.1, -3.0) = %.1f\n&quot;, fmod(5.1,-3));
    printf(&quot;fmod(-5.1, -3.0) = %.1f\n&quot;, fmod(-5.1,-3));

    // special values
    printf(&quot;fmod(+0.0, 1.0) = %.1f\n&quot;, fmod(0, 1));
    printf(&quot;fmod(-0.0, 1.0) = %.1f\n&quot;, fmod(-0.0, 1));
    printf(&quot;fmod(+5.1, Inf) = %.1f\n&quot;, fmod(5.1, INFINITY));

    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;fmod(+5.1, 0) = %.1f\n&quot;, fmod(5.1, 0));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p = true
 | output=
fmod(+5.1, +3.0) = 2.1
fmod(-5.1, +3.0) = -2.1
fmod(+5.1, -3.0) = 2.1
fmod(-5.1, -3.0) = -2.1
fmod(+0.0, 1.0) = 0.0
fmod(-0.0, 1.0) = -0.0
fmod(+5.1, Inf) = 5.1
fmod(+5.1, 0) = nan
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.10.1 | title=The fmod functions | p=254}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.7.1 | title=The fmod functions | p=528}}
{{ref std c99}}
{{ref std | section=7.12.10.1 | title=The fmod functions | p=235}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.7.1  | title=The fmod functions| p=465}}
{{ref std c89}}
{{ref std | section=4.5.6.4  | title=The fmod function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc div}}
{{dsc inc | c/numeric/math/dsc remainder}}
{{dsc inc | c/numeric/math/dsc remquo}}
{{dsc see cpp | cpp/numeric/math/fmod}}
{{dsc end}}

[[ar:c/numeric/math/fmod]]
[[cs:c/numeric/math/fmod]]
[[de:c/numeric/math/fmod]]
[[es:c/numeric/math/fmod]]
[[fr:c/numeric/math/fmod]]
[[it:c/numeric/math/fmod]]
[[ja:c/numeric/math/fmod]]
[[ko:c/numeric/math/fmod]]
[[pl:c/numeric/math/fmod]]
[[pt:c/numeric/math/fmod]]
[[ru:c/numeric/math/fmod]]
[[tr:c/numeric/math/fmod]]
[[zh:c/numeric/math/fmod]]</text>
      <sha1>qsdrorp6q5oay7hn9witphd9xej2pry</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/fpclassify</title>
    <ns>0</ns>
    <id>6258</id>
    <revision>
      <id>77270</id>
      <parentid>73026</parentid>
      <timestamp>2015-03-20T16:01:22Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2661">{{c/title|fpclassify}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define fpclassify(arg) /* implementation defined */
}}
{{dcl end}}

Categorizes floating point value {{tt|arg}} into the following categories: zero, subnormal, normal, infinite, NAN, or implementation-defined category. The macro returns an integral value.

{{lc|FLT_EVAL_METHOD}} is ignored: even if the argument is evaluated with more range and precision than its type, it is first converted to its semantic type, and the classification is based on that: a normal long double value might become subnormal when converted to double and zero when converted to float.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
One of {{lc|FP_INFINITE}}, {{lc|FP_NAN}}, {{lc|FP_NORMAL}}, {{lc|FP_SUBNORMAL}}, {{lc|FP_ZERO}} or implementation-defined type, specifying the category of {{tt|arg}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;

const char *show_classification(double x) {
    switch(fpclassify(x)) {
        case FP_INFINITE:  return &quot;Inf&quot;;
        case FP_NAN:       return &quot;NaN&quot;;
        case FP_NORMAL:    return &quot;normal&quot;;
        case FP_SUBNORMAL: return &quot;subnormal&quot;;
        case FP_ZERO:      return &quot;zero&quot;;
        default:           return &quot;unknown&quot;;
    }
}
int main(void)
{
    printf(&quot;1.0/0.0 is %s\n&quot;, show_classification(1/0.0));
    printf(&quot;0.0/0.0 is %s\n&quot;, show_classification(0.0/0.0));
    printf(&quot;DBL_MIN/2 is %s\n&quot;, show_classification(DBL_MIN/2));
    printf(&quot;-0.0 is %s\n&quot;, show_classification(-0.0));
    printf(&quot;1.0 is %s\n&quot;, show_classification(1.0));
}
 | output=
1.0/0.0 is Inf
0.0/0.0 is NaN
DBL_MIN/2 is subnormal
-0.0 is zero
1.0 is normal
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.3.1 | title=The fpclassify macro | p=235}}
{{ref std c99}}
{{ref std | section=7.12.3.1 | title=The fpclassify macro | p=216}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isfinite}}
{{dsc inc | c/numeric/math/dsc isinf}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc inc | c/numeric/math/dsc isnormal}}
{{dsc see cpp | cpp/numeric/math/fpclassify}}
{{dsc end}}

[[ar:c/numeric/math/fpclassify]]
[[cs:c/numeric/math/fpclassify]]
[[de:c/numeric/math/fpclassify]]
[[es:c/numeric/math/fpclassify]]
[[fr:c/numeric/math/fpclassify]]
[[it:c/numeric/math/fpclassify]]
[[ja:c/numeric/math/fpclassify]]
[[ko:c/numeric/math/fpclassify]]
[[pl:c/numeric/math/fpclassify]]
[[pt:c/numeric/math/fpclassify]]
[[ru:c/numeric/math/fpclassify]]
[[tr:c/numeric/math/fpclassify]]
[[zh:c/numeric/math/fpclassify]]</text>
      <sha1>7r8vzhdj9xxktn3oemgi18vghyisjw2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/frexp</title>
    <ns>0</ns>
    <id>6309</id>
    <revision>
      <id>78885</id>
      <parentid>77309</parentid>
      <timestamp>2015-06-11T11:35:10Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="4252">{{c/title|frexp|frexpf|frexpl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=1 |
float       frexpf( float arg, int* exp );
}}
{{dcl | num=2 |
double      frexp( double arg, int* exp );
}}
{{dcl | since=c99 | num=3 |
long double frexpl( long double arg, int* exp );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |num=4|
#define frexp( arg, exp )
}}
{{dcl end}}

@1-3@ Decomposes given floating point value {{tt|x}} into a normalized fraction and an integral power of two.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|frexpl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|frexp}} is called. Otherwise, {{tt|frexpf}} is called, respectively.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par | exp | pointer to integer value to store the exponent to}}
{{par end}}

===Return value===
If {{tt|arg}} is zero, returns zero and stores zero in {{tt|*exp}}.

Otherwise (if {{tt|arg}} is not zero), if no errors occur, returns the value {{tt|x}} in the range  {{tt|(-1;-0.5], [0.5; 1)}} and stores an integer value in {{c|*exp}} such that {{math|x&amp;times;2{{su|p=(*exp)}}{{=}}arg}}.

If the value to be stored in {{tt|*exp}} is outside the range of {{c|int}}, the behavior is unspecified.

If {{tt|arg}} is not a floating-point number, the behavior is unspecified.

===Error handling===
This function is not subject to any errors specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|arg}} is ±0, it is returned, unmodified, and {{tt|0}} is stored in {{c|*exp}}.
* If {{tt|arg}} is ±∞, it is returned, and an unspecified value is stored in {{c|*exp}}.
* If {{tt|arg}} is NaN, NaN is returned, and an unspecified value is stored in {{c|*exp}}.
* No floating-point exceptions are raised.
* If {{lc|FLT_RADIX}} is 2 (or a power of 2), the returned value is exact, [[c/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
On a binary system (where {{lc|FLT_RADIX}} is {{tt|2}}), {{tt|frexp}} may be implemented as 
{{source|1={
    *exp = (value == 0) ? 0 : (int)(1 + logb(value));
    return scalbn(value, -(*exp));
}
}}

The function {{tt|frexp}}, together with its dual, {{lc|ldexp}}, can be used to manipulate the representation of a floating-point number without direct bit manipulations.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;

int main(void)
{
    double f = 123.45;
    printf(&quot;Given the number %.2f or %a in hex,\n&quot;, f, f);

    double f3;
    double f2 = modf(f, &amp;f3);
    printf(&quot;modf() makes %.0f + %.2f\n&quot;, f3, f2);

    int i;
    f2 = frexp(f, &amp;i);
    printf(&quot;frexp() makes %f * 2^%d\n&quot;, f2, i);

    i = ilogb(f);
    printf(&quot;logb()/ilogb() make %f * %d^%d\n&quot;, f/scalbn(1.0, i), FLT_RADIX, i);
}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.4 | title=The frexp functions | p=243}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.4 | title=The frexp functions | p=521}}
{{ref std c99}}
{{ref std | section=7.12.6.4 | title=The frexp functions | p=224}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.4  | title=The frexp functions| p=458}}
{{ref std c89}}
{{ref std | section=4.5.4.2  | title=The frexp function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc ldexp}}
{{dsc inc | c/numeric/math/dsc logb}}
{{dsc inc | c/numeric/math/dsc ilogb}}
{{dsc inc | c/numeric/math/dsc modf}}
{{dsc see cpp | cpp/numeric/math/frexp}}
{{dsc end}}

[[ar:c/numeric/math/frexp]]
[[cs:c/numeric/math/frexp]]
[[de:c/numeric/math/frexp]]
[[es:c/numeric/math/frexp]]
[[fr:c/numeric/math/frexp]]
[[it:c/numeric/math/frexp]]
[[ja:c/numeric/math/frexp]]
[[ko:c/numeric/math/frexp]]
[[pl:c/numeric/math/frexp]]
[[pt:c/numeric/math/frexp]]
[[ru:c/numeric/math/frexp]]
[[tr:c/numeric/math/frexp]]
[[zh:c/numeric/math/frexp]]</text>
      <sha1>te7qm6tb64n0hbat98q2p2nvbgrrrs2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/hypot</title>
    <ns>0</ns>
    <id>6286</id>
    <revision>
      <id>77331</id>
      <parentid>73298</parentid>
      <timestamp>2015-03-22T13:05:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4795">{{c/title|hypot, hypotf, hypotl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl |num=1| since=c99 |
float       hypotf( float x, float y );
}}
{{dcl |num=2| since=c99 |
double      hypot( double x, double y );
}}
{{dcl |num=3| since=c99 |
long double hypotl( long double x, long double y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define hypot( x, y )
}}
{{dcl end}}

@1-3@ Computes the square root of the sum of the squares of {{tt|x}} and {{tt|y}}, without undue overflow or underflow at intermediate stages of the computation.
@4@ Type-generic macro: If any argument has type {{c|long double}}, the long double version of the function is called. Otherwise, if any argument has integer type or has type {{c|double}}, the double version of the function is called. Otherwise, the {{c|float}} version of the function is called.

The value computed by this function is the length of the hypotenuse of a right-angled triangle with sides of length {{tt|x}} and {{tt|y}}, or the distance of the point {{tt|(x,y)}} from the origin {{tt|(0,0)}}, or the magnitude of a complex number {{tt|x+''i''y}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===
If no errors occur, the hypotenuse of a right-angled triangle, {{math|{{mrad|x{{su|p=2}}+y{{su|p=2}}}}}}, is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* {{c|hypot(x, y)}}, {{c|hypot(y, x)}}, and {{c|hypot(x, -y)}} are equivalent
* if one of the arguments is ±0, {{tt|hypot}} is equivalent to {{c|fabs}} called with the non-zero argument
* if one of the arguments is ±∞, {{tt|hypot}} returns +∞ even if the other argument is NaN
* otherwise, if any of the arguments is NaN, NaN is returned

===Notes===
Implementations usually guarantee precision of less than 1 ulp (units in the last place): [http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=sysdeps/ieee754/dbl-64/e_hypot.c GNU], [http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/msun/src/e_hypot.c?rev=1.13.4.2;content-type=text%2Fplain BSD], [http://www.open64.net/doc/d5/d3f/hypot_8c-source.html Open64].

{{c|hypot(x, y)}} is equivalent to {{c|cabs(x + I*y)}}.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/hypot.html POSIX specifies] that underflow may only occur when both arguments are subnormal and the correct result is also subnormal (this forbids naive implementations).

{{c|hypot(INFINITY, NAN)}} returns +∞, but {{c|sqrt(INFINITY*INFINITY+NAN*NAN)}} returns NaN.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#include &lt;float.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    // typical usage
    printf(&quot;(1,1) cartesian is (%f,%f) polar\n&quot;, hypot(1,1), atan2(1,1));
    // special values
    printf(&quot;hypot(NAN,INFINITY) = %f\n&quot;, hypot(NAN,INFINITY));
    // error handling 
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;hypot(DBL_MAX,DBL_MAX) = %f\n&quot;, hypot(DBL_MAX,DBL_MAX));
    if(errno == ERANGE)         perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
(1,1) cartesian is (1.414214,0.785398) polar
hypot(NAN,INFINITY) = inf
hypot(DBL_MAX,DBL_MAX) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.7.3 | title=The hypot functions | p=248}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.4.3 | title=The hypot functions | p=524}}
{{ref std c99}}
{{ref std | section=7.12.7.3 | title=The hypot functions | p=229}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.4.3  | title=The hypot functions| p=461}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc pow}}
{{dsc inc | c/numeric/math/dsc sqrt}}
{{dsc inc | c/numeric/math/dsc cbrt}}
{{dsc inc | c/numeric/complex/dsc cabs}}
{{dsc see cpp | cpp/numeric/math/hypot}}
{{dsc end}}

[[ar:c/numeric/math/hypot]]
[[cs:c/numeric/math/hypot]]
[[de:c/numeric/math/hypot]]
[[es:c/numeric/math/hypot]]
[[fr:c/numeric/math/hypot]]
[[it:c/numeric/math/hypot]]
[[ja:c/numeric/math/hypot]]
[[ko:c/numeric/math/hypot]]
[[pl:c/numeric/math/hypot]]
[[pt:c/numeric/math/hypot]]
[[ru:c/numeric/math/hypot]]
[[tr:c/numeric/math/hypot]]
[[zh:c/numeric/math/hypot]]</text>
      <sha1>469z24q91emeh7sjnqpdq9slqipaxso</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/ilogb</title>
    <ns>0</ns>
    <id>6262</id>
    <revision>
      <id>77311</id>
      <parentid>75769</parentid>
      <timestamp>2015-03-21T15:17:27Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="6000">{{c/title|ilogb|ilogbf|ilogbl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=1 |
int ilogbf( float arg );
}}
{{dcl | since=c99 | num=2 |
int ilogb( double arg );
}}
{{dcl | since=c99 | num=3 |
int ilogbl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define ilogb( arg )
}}
{{dcl header | math.h}}
{{dcl | since=c99 |  num=5 |
#define FP_ILOGB0 /*implementation-defined*/
}}
{{dcl | since=c99 | num=6 |
#define FP_ILOGBNAN /*implementation-defined*/
}}
{{dcl end}}

@1-3@ Extracts the value of the unbiased exponent from the floating-point argument {{tt|arg}}, and returns it as a signed integer value. 
@4@ Type-generic macros: If {{tt|arg}} has type {{c|long double}}, {{tt|ilogbl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|ilogb}} is called. Otherwise, {{tt|ilogbf}} is called.
@5@ Expands to integer constant expression whose value is either {{lc|INT_MIN}} or {{c|-INT_MAX}}.
@6@ Expands to integer constant expression whose value is either {{lc|INT_MIN}} or {{c|+INT_MAX}}.

Formally, the unbiased exponent is the integral part of {{math|log{{su|b=r}}{{!}}arg{{!}}}} as a signed integral value, for non-zero arg, where {{tt|r}} is {{lc|FLT_RADIX}}.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the unbiased exponent of {{tt|arg}} is returned as a signed int value.

If {{tt|arg}} is zero, {{lc|FP_ILOGB0}} is returned.

If {{tt|arg}} is infinite, {{lc|INT_MAX}} is returned.

If {{tt|arg}} is a NaN, {{lc|FP_ILOGBNAN}} is returned.

If the correct result is greater than {{lc|INT_MAX}} or smaller than {{lc|INT_MIN}}, the return value is unspecified and a domain error or range error may occur &lt;!-- dr 410 --&gt;

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

A domain error or range error may occur if {{tt|arg}} is zero, infinite, or NaN.

If the correct result is greater than {{lc|INT_MAX}} or smaller than {{lc|INT_MIN}}, a domain error or a range error may occur &lt;!-- this is DR 410 against C11, which makes the wording match lrint and lround --&gt;

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the correct result is greater than {{lc|INT_MAX}} or smaller than {{lc|INT_MIN}}, {{lc|FE_INVALID}} is raised.
* If {{tt|arg}} is ±0, ±∞, or NaN, {{lc|FE_INVALID}} is raised.
* In all other cases, the result is exact ({{lc|FE_INEXACT}} is never raised) and [[c/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
If {{tt|arg}} is not zero, infinite, or NaN, the value returned is exactly equivalent to {{c|(int)logb(arg)}}.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/ilogb.html POSIX requires] that a domain error occurs if {{tt|arg}} is zero, infinite, NaN, or if the correct result is outside of the range of {{c|int}}.

POSIX also requires that, on XSI-conformant systems, the value returned when the correct result is greater than {{lc|INT_MAX}} is {{lc|INT_MAX}} and the value returned when the correct result is less than {{lc|INT_MIN}} is {{lc|INT_MIN}}.

The correct result can be represented as {{c|int}} on all known implementations. For overflow to occur, {{lc|INT_MAX}} must be less than {{c|LDBL_MAX_EXP*log2(FLT_RADIX)}} or {{lc|INT_MIN}} must be greater than {{c|LDBL_MIN_EXP-LDBL_MANT_DIG)*log2(FLT_RADIX)}}.

The value of the exponent returned by {{tt|std::ilogb}} is always 1 less than the exponent retuned by {{lc|frexp}} because of the different normalization requirements: for the exponent {{tt|e}} returned by {{tt|ilogb}}, {{math|{{!}}arg*r{{su|p=-e}}{{!}}}} is between 1 and {{tt|r}} (typically between {{c|1}} and {{c|2}}), but for the exponent {{tt|e}} returned by {{lc|frexp}}, {{math|{{!}}arg*2{{su|p=-e}}{{!}}}} is between {{c|0.5}} and {{c|1}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    double f = 123.45;
    printf(&quot;Given the number %.2f or %a in hex,\n&quot;, f, f);

    double f3;
    double f2 = modf(f, &amp;f3);
    printf(&quot;modf() makes %.0f + %.2f\n&quot;, f3, f2);

    int i;
    f2 = frexp(f, &amp;i);
    printf(&quot;frexp() makes %f * 2^%d\n&quot;, f2, i);

    i = ilogb(f);
    printf(&quot;logb()/ilogb() make %f * %d^%d\n&quot;, f/scalbn(1.0, i), FLT_RADIX, i);

    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;ilogb(0) = %d\n&quot;, ilogb(0));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
ilogb(0) = -2147483648
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12/8   | title=Mathematics &lt;math.h&gt; | p=232}}
{{ref std | section=7.12.6.5 | title=The ilogb functions | p=244}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.5 | title=The ilogb functions | p=521}}
{{ref std c99}}
{{ref std | section=7.12/8   | title=Mathematics &lt;math.h&gt; | p=213}}
{{ref std | section=7.12.6.5 | title=The ilogb functions | p=224-225}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.5  | title=The ilogb functions| p=458}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc frexp}}
{{dsc inc | c/numeric/math/dsc logb}}
{{dsc inc | c/numeric/math/dsc scalbn}}
{{dsc see cpp | cpp/numeric/math/ilogb}}
{{dsc end}}

[[ar:c/numeric/math/ilogb]]
[[cs:c/numeric/math/ilogb]]
[[de:c/numeric/math/ilogb]]
[[es:c/numeric/math/ilogb]]
[[fr:c/numeric/math/ilogb]]
[[it:c/numeric/math/ilogb]]
[[ja:c/numeric/math/ilogb]]
[[ko:c/numeric/math/ilogb]]
[[pl:c/numeric/math/ilogb]]
[[pt:c/numeric/math/ilogb]]
[[ru:c/numeric/math/ilogb]]
[[tr:c/numeric/math/ilogb]]
[[zh:c/numeric/math/ilogb]]</text>
      <sha1>8w8atfudkkicxruq0xfji2l6841k3we</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isfinite</title>
    <ns>0</ns>
    <id>6257</id>
    <revision>
      <id>77271</id>
      <parentid>73390</parentid>
      <timestamp>2015-03-20T16:09:31Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2241">{{c/title|isfinite}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isfinite(arg) /* implementation defined */
}}
{{dcl end}}

Determines if the given floating point number {{tt|arg}} has finite value i.e. it is normal, subnormal or zero, but not infinite or NaN. The macro returns an integral value.

{{lc|FLT_EVAL_METHOD}} is ignored: even if the argument is evaluated with more range and precision than its type, it is first converted to its semantic type, and the classification is based on that.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
Nonzero integral value if {{tt|arg}} has finite value, {{c|0}} otherwise.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
 
int main(void)
{
    printf(&quot;isfinite(NAN)         = %d\n&quot;, isfinite(NAN));
    printf(&quot;isfinite(INFINITY)    = %d\n&quot;, isfinite(INFINITY));
    printf(&quot;isfinite(0.0)         = %d\n&quot;, isfinite(0.0));
    printf(&quot;isfinite(DBL_MIN/2.0) = %d\n&quot;, isfinite(DBL_MIN/2.0));
    printf(&quot;isfinite(1.0)         = %d\n&quot;, isfinite(1.0));
    printf(&quot;isfinite(exp(800))    = %d\n&quot;, isfinite(exp(800)));
}
 | p=true
 | output=
isfinite(NAN)         = 0
isfinite(INFINITY)    = 0
isfinite(0.0)         = 1
isfinite(DBL_MIN/2.0) = 1
isfinite(1.0)         = 1
isfinite(exp(800))    = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.3.2 | title=The isfinite macro | p=236}}
{{ref std c99}}
{{ref std | section=7.12.3.2 | title=The isfinite macro | p=216-217}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fpclassify}}
{{dsc inc | c/numeric/math/dsc isinf}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc inc | c/numeric/math/dsc isnormal}}
{{dsc see cpp | cpp/numeric/math/isfinite}}
{{dsc end}}

[[ar:c/numeric/math/isfinite]]
[[cs:c/numeric/math/isfinite]]
[[de:c/numeric/math/isfinite]]
[[es:c/numeric/math/isfinite]]
[[fr:c/numeric/math/isfinite]]
[[it:c/numeric/math/isfinite]]
[[ja:c/numeric/math/isfinite]]
[[ko:c/numeric/math/isfinite]]
[[pl:c/numeric/math/isfinite]]
[[pt:c/numeric/math/isfinite]]
[[ru:c/numeric/math/isfinite]]
[[tr:c/numeric/math/isfinite]]
[[zh:c/numeric/math/isfinite]]</text>
      <sha1>dvq8bmkzwgxo58gh1y95z737fitohvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isgreater</title>
    <ns>0</ns>
    <id>13542</id>
    <revision>
      <id>77364</id>
      <parentid>73394</parentid>
      <timestamp>2015-03-23T20:53:29Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2032">{{c/title|isgreater}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isgreater(x, y) /* implementation defined */
}}
{{dcl end}}

Determines if the floating point number {{tt|x}} is greater than the floating-point number ({{tt|y}}), without setting floating-point exceptions. 

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

Nonzero integral value if {{c|x &gt; y}}, {{c|0}} otherwise.

===Notes===
The built-in {{c|operator&gt;}} for floating-point numbers may set {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|operator&gt;}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;isgreater(2.0,1.0)      = %d\n&quot;, isgreater(2.0,1.0));
    printf(&quot;isgreater(1.0,2.0)      = %d\n&quot;, isgreater(1.0,2.0));
    printf(&quot;isgreater(INFINITY,1.0) = %d\n&quot;, isgreater(INFINITY,1.0));
    printf(&quot;isgreater(1.0,NAN)      = %d\n&quot;, isgreater(1.0,NAN));
 
    return 0;
}
 | p=true
 | output=
isgreater(2.0,1.0)      = 1
isgreater(1.0,2.0)      = 0
isgreater(INFINITY,1.0) = 1
isgreater(1.0,NAN)      = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.14.1 | title=The isgreater macro | p=259}}
{{ref std | section=F.10.11   | title=Comparison macros | p=531}}
{{ref std c99}}
{{ref std | section=7.12.14.1 | title=The isgreater macro | p=240}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isless}}
{{dsc see cpp | cpp/numeric/math/isgreater}}
{{dsc end}}

[[ar:c/numeric/math/isgreater]]
[[cs:c/numeric/math/isgreater]]
[[de:c/numeric/math/isgreater]]
[[es:c/numeric/math/isgreater]]
[[fr:c/numeric/math/isgreater]]
[[it:c/numeric/math/isgreater]]
[[ja:c/numeric/math/isgreater]]
[[ko:c/numeric/math/isgreater]]
[[pl:c/numeric/math/isgreater]]
[[pt:c/numeric/math/isgreater]]
[[ru:c/numeric/math/isgreater]]
[[tr:c/numeric/math/isgreater]]
[[zh:c/numeric/math/isgreater]]</text>
      <sha1>5pkcbggfpr5ryobzxic8viznm1st2tw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isgreaterequal</title>
    <ns>0</ns>
    <id>13543</id>
    <revision>
      <id>77365</id>
      <parentid>73395</parentid>
      <timestamp>2015-03-23T20:59:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2325">{{c/title|isgreaterequal}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isgreaterequal(x, y) /* implementation defined */
}}
{{dcl end}}

Determines if the floating point number {{tt|x}} is greater than or equal to the floating-point number {{tt|y}}, without setting floating-point exceptions.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

Nonzero integral value if {{c|1=x &gt;= y}}, {{c|0}} otherwise.

===Notes===
The built-in {{c|1=operator&gt;=}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|1=operator&gt;=}}.


===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;isgreaterequal(2.0,1.0)      = %d\n&quot;, isgreaterequal(2.0,1.0));
    printf(&quot;isgreaterequal(1.0,2.0)      = %d\n&quot;, isgreaterequal(1.0,2.0));
    printf(&quot;isgreaterequal(1.0,1.0)      = %d\n&quot;, isgreaterequal(1.0,1.0));
    printf(&quot;isgreaterequal(INFINITY,1.0) = %d\n&quot;, isgreaterequal(INFINITY,1.0));
    printf(&quot;isgreaterequal(1.0,NAN)      = %d\n&quot;, isgreaterequal(1.0,NAN));
 
    return 0;
}
 | p=true
 | output=
isgreaterequal(2.0,1.0)      = 1
isgreaterequal(1.0,2.0)      = 0
isgreaterequal(1.0,1.0)      = 1
isgreaterequal(INFINITY,1.0) = 1
isgreaterequal(1.0,NAN)      = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.14.2 | title=The isgreaterequal macro | p=259-260}}
{{ref std | section=F.10.11   | title=Comparison macros | p=531}}
{{ref std c99}}
{{ref std | section=7.12.14.2 | title=The isgreaterequal macro | p=240-241}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/numeric/math/dsc islessequal}}
{{dsc see cpp | cpp/numeric/math/isgreaterequal}}
{{dsc end}}

[[ar:c/numeric/math/isgreaterequal]]
[[cs:c/numeric/math/isgreaterequal]]
[[de:c/numeric/math/isgreaterequal]]
[[es:c/numeric/math/isgreaterequal]]
[[fr:c/numeric/math/isgreaterequal]]
[[it:c/numeric/math/isgreaterequal]]
[[ja:c/numeric/math/isgreaterequal]]
[[ko:c/numeric/math/isgreaterequal]]
[[pl:c/numeric/math/isgreaterequal]]
[[pt:c/numeric/math/isgreaterequal]]
[[ru:c/numeric/math/isgreaterequal]]
[[tr:c/numeric/math/isgreaterequal]]
[[zh:c/numeric/math/isgreaterequal]]</text>
      <sha1>ff9dx8zdb8d813dzbwpkh5aw5gayzk1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isinf</title>
    <ns>0</ns>
    <id>6256</id>
    <revision>
      <id>77272</id>
      <parentid>73391</parentid>
      <timestamp>2015-03-20T18:11:59Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2091">{{c/title|isinf}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isinf(arg) /* implementation defined */
}}
{{dcl end}}

Determines if the given floating point number {{tt|arg}} is positive or negative infinity. The macro returns an integral value.

{{lc|FLT_EVAL_METHOD}} is ignored: even if the argument is evaluated with more range and precision than its type, it is first converted to its semantic type, and the classification is based on that.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
Nonzero integral value if {{tt|arg}} has an infinite value, {{c|0}} otherwise.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
 
int main(void)
{
    printf(&quot;isinf(NAN)         = %d\n&quot;, isinf(NAN));
    printf(&quot;isinf(INFINITY)    = %d\n&quot;, isinf(INFINITY));
    printf(&quot;isinf(0.0)         = %d\n&quot;, isinf(0.0));
    printf(&quot;isinf(DBL_MIN/2.0) = %d\n&quot;, isinf(DBL_MIN/2.0));
    printf(&quot;isinf(1.0)         = %d\n&quot;, isinf(1.0));
    printf(&quot;isinf(exp(800))    = %d\n&quot;, isinf(exp(800)));
}
 | p=true
 | output=
isinf(NAN)         = 0
isinf(INFINITY)    = 1
isinf(0.0)         = 0
isinf(DBL_MIN/2.0) = 0
isinf(1.0)         = 0
isinf(exp(800))    = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.3.3 | title=The isinf macro | p=236}}
{{ref std c99}}
{{ref std | section=7.12.3.3 | title=The isinf macro | p=217}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fpclassify}}
{{dsc inc | c/numeric/math/dsc isfinite}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc inc | c/numeric/math/dsc isnormal}}
{{dsc see cpp | cpp/numeric/math/isinf}}
{{dsc end}}

[[ar:c/numeric/math/isinf]]
[[cs:c/numeric/math/isinf]]
[[de:c/numeric/math/isinf]]
[[es:c/numeric/math/isinf]]
[[fr:c/numeric/math/isinf]]
[[it:c/numeric/math/isinf]]
[[ja:c/numeric/math/isinf]]
[[ko:c/numeric/math/isinf]]
[[pl:c/numeric/math/isinf]]
[[pt:c/numeric/math/isinf]]
[[ru:c/numeric/math/isinf]]
[[tr:c/numeric/math/isinf]]
[[zh:c/numeric/math/isinf]]</text>
      <sha1>n1k2i4am6vaiczt773ke865mxxhec98</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isless</title>
    <ns>0</ns>
    <id>13544</id>
    <revision>
      <id>77366</id>
      <parentid>73396</parentid>
      <timestamp>2015-03-23T21:03:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1942">{{c/title|isless}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isless(x, y) /* implementation defined */
}}
{{dcl end}}

Determines if the floating point number {{tt|x}} is less than the floating-point number {{tt|y}}, without setting floating-point exceptions.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

Nonzero integral value if {{c|x &lt; y}}, {{c|0}} otherwise.

===Notes===
The built-in {{c|operator&lt;}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|operator&lt;}}.


===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;isless(2.0,1.0)      = %d\n&quot;, isless(2.0,1.0));
    printf(&quot;isless(1.0,2.0)      = %d\n&quot;, isless(1.0,2.0));
    printf(&quot;isless(INFINITY,1.0) = %d\n&quot;, isless(INFINITY,1.0));
    printf(&quot;isless(1.0,NAN)      = %d\n&quot;, isless(1.0,NAN));
 
    return 0;
}
 | p=true
 | output=
isless(2.0,1.0)      = 0
isless(1.0,2.0)      = 1
isless(INFINITY,1.0) = 0
isless(1.0,NAN)      = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.14.3 | title=The isless macro | p=260}}
{{ref std | section=F.10.11   | title=Comparison macros | p=531}}
{{ref std c99}}
{{ref std | section=7.12.14.3 | title=The isless macro | p=241}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isgreater}}
{{dsc see cpp | cpp/numeric/math/isless}}
{{dsc end}}

[[ar:c/numeric/math/isless]]
[[cs:c/numeric/math/isless]]
[[de:c/numeric/math/isless]]
[[es:c/numeric/math/isless]]
[[fr:c/numeric/math/isless]]
[[it:c/numeric/math/isless]]
[[ja:c/numeric/math/isless]]
[[ko:c/numeric/math/isless]]
[[pl:c/numeric/math/isless]]
[[pt:c/numeric/math/isless]]
[[ru:c/numeric/math/isless]]
[[tr:c/numeric/math/isless]]
[[zh:c/numeric/math/isless]]</text>
      <sha1>iwifhmdt7ossipwwmg3uf1luo0pzmry</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/islessequal</title>
    <ns>0</ns>
    <id>13545</id>
    <revision>
      <id>77367</id>
      <parentid>73397</parentid>
      <timestamp>2015-03-23T21:31:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2218">{{c/title|islessequal}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define islessequal(x, y) /* implementation defined */
}}
{{dcl end}}

Determines if the floating point number {{tt|x}} is less than or equal to the floating-point number {{tt|y}}, without setting floating-point exceptions. 

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

Nonzero integral value if {{c|1=x &lt;= y}}, {{c|0}} otherwise.

===Notes===
The built-in {{c|1=operator&lt;=}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|1=operator&lt;=}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;islessequal(2.0,1.0)      = %d\n&quot;, islessequal(2.0,1.0));
    printf(&quot;islessequal(1.0,2.0)      = %d\n&quot;, islessequal(1.0,2.0));
    printf(&quot;islessequal(1.0,1.0)      = %d\n&quot;, islessequal(1.0,1.0));
    printf(&quot;islessequal(INFINITY,1.0) = %d\n&quot;, islessequal(INFINITY,1.0));
    printf(&quot;islessequal(1.0,NAN)      = %d\n&quot;, islessequal(1.0,NAN));
 
    return 0;
}
 | p=true
 | output=
islessequal(2.0,1.0)      = 0
islessequal(1.0,2.0)      = 1
islessequal(1.0,1.0)      = 1
islessequal(INFINITY,1.0) = 0
islessequal(1.0,NAN)      = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.14.4 | title=The islessequal macro | p=260}}
{{ref std | section=F.10.11   | title=Comparison macros | p=531}}
{{ref std c99}}
{{ref std | section=7.12.14.4 | title=The islessequal macro | p=241}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isgreaterequal}}
{{dsc see cpp | cpp/numeric/math/islessequal}}
{{dsc end}}

[[ar:c/numeric/math/islessequal]]
[[cs:c/numeric/math/islessequal]]
[[de:c/numeric/math/islessequal]]
[[es:c/numeric/math/islessequal]]
[[fr:c/numeric/math/islessequal]]
[[it:c/numeric/math/islessequal]]
[[ja:c/numeric/math/islessequal]]
[[ko:c/numeric/math/islessequal]]
[[pl:c/numeric/math/islessequal]]
[[pt:c/numeric/math/islessequal]]
[[ru:c/numeric/math/islessequal]]
[[tr:c/numeric/math/islessequal]]
[[zh:c/numeric/math/islessequal]]</text>
      <sha1>p1f1byam3g4xgmm47gu1jd54u1fr29y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/islessgreater</title>
    <ns>0</ns>
    <id>13546</id>
    <revision>
      <id>77379</id>
      <parentid>77378</parentid>
      <timestamp>2015-03-24T10:24:17Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corr pages</comment>
      <text xml:space="preserve" bytes="2418">{{c/title|islessgreater}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define islessgreater(x, y) /* implementation defined */
}}
{{dcl end}}

Determines if the floating point number {{tt|x}} is less than or greater than the floating-point number {{tt|y}}, without setting floating-point exceptions. 

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

Nonzero integral value if {{c|x &lt; y {{!!}} x &gt; y}}, {{c|0}} otherwise.

===Notes===
The built-in {{c|operator&lt;}} and {{c|operator&gt;}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of the expression {{c|x &lt; y {{!!}} x &gt; y}}. The macro does not evaluate x and y twice.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;islessgreater(2.0,1.0)      = %d\n&quot;, islessgreater(2.0,1.0));
    printf(&quot;islessgreater(1.0,2.0)      = %d\n&quot;, islessgreater(1.0,2.0));
    printf(&quot;islessgreater(1.0,1.0)      = %d\n&quot;, islessgreater(1.0,1.0));
    printf(&quot;islessgreater(INFINITY,1.0) = %d\n&quot;, islessgreater(INFINITY,1.0));
    printf(&quot;islessgreater(1.0,NAN)      = %d\n&quot;, islessgreater(1.0,NAN));
 
    return 0;
}
 | p=true
 | output=
islessgreater(2.0,1.0)      = 1
islessgreater(1.0,2.0)      = 1
islessgreater(1.0,1.0)      = 0
islessgreater(INFINITY,1.0) = 1
islessgreater(1.0,NAN)      = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.14.5 | title=The islessgreater macro | p=261}}
{{ref std | section=F.10.11   | title=Comparison macros | p=531}}
{{ref std c99}}
{{ref std | section=7.12.14.5 | title=The islessgreater macro | p=241-242}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isless}}
{{dsc inc | c/numeric/math/dsc isgreater}}
{{dsc see cpp | cpp/numeric/math/islessgreater}}
{{dsc end}}

[[ar:c/numeric/math/islessgreater]]
[[cs:c/numeric/math/islessgreater]]
[[de:c/numeric/math/islessgreater]]
[[es:c/numeric/math/islessgreater]]
[[fr:c/numeric/math/islessgreater]]
[[it:c/numeric/math/islessgreater]]
[[ja:c/numeric/math/islessgreater]]
[[ko:c/numeric/math/islessgreater]]
[[pl:c/numeric/math/islessgreater]]
[[pt:c/numeric/math/islessgreater]]
[[ru:c/numeric/math/islessgreater]]
[[tr:c/numeric/math/islessgreater]]
[[zh:c/numeric/math/islessgreater]]</text>
      <sha1>tdog5dj0pfkw6cgiki39rodrotjiswm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isnan</title>
    <ns>0</ns>
    <id>6255</id>
    <revision>
      <id>89919</id>
      <parentid>89918</parentid>
      <timestamp>2017-01-30T10:49:54Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <comment>Undo revision 89918 by [[Special:Contributions/Fruderica|Fruderica]] ([[User talk:Fruderica|talk]])</comment>
      <text xml:space="preserve" bytes="2615">{{c/title|isnan}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isnan(arg) /* implementation defined */
}}
{{dcl end}}

Determines if the given floating point number {{tt|arg}} is a not-a-number (NaN) value. The macro returns an integral value.

{{lc|FLT_EVAL_METHOD}} is ignored: even if the argument is evaluated with more range and precision than its type, it is first converted to its semantic type, and the classification is based on that (this matters if the evaluation type supports NaNs, while the semantic type does not).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
Nonzero integral value if {{tt|arg}} is a NaN, {{c|0}} otherwise.

===Notes===
There are many different NaN values with different sign bits and payloads, see {{lc|nan}}.

NaN values never compare equal to themselves or to other NaN values. Copying a NaN may change its bit pattern.

Another way to test if a floating-point value is NaN is to compare it with itself: {{c|bool is_nan(double x) { return x !{{=}} x; } }}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
 
int main(void)
{
    printf(&quot;isnan(NAN)         = %d\n&quot;, isnan(NAN));
    printf(&quot;isnan(INFINITY)    = %d\n&quot;, isnan(INFINITY));
    printf(&quot;isnan(0.0)         = %d\n&quot;, isnan(0.0));
    printf(&quot;isnan(DBL_MIN/2.0) = %d\n&quot;, isnan(DBL_MIN/2.0));
    printf(&quot;isnan(0.0 / 0.0)   = %d\n&quot;, isnan(0.0/0.0));
    printf(&quot;isnan(Inf - Inf)   = %d\n&quot;, isnan(INFINITY - INFINITY));
}
 | p=true
 | output=
isnan(NAN)         = 1
isnan(INFINITY)    = 0
isnan(0.0)         = 0
isnan(DBL_MIN/2.0) = 0
isnan(0.0 / 0.0)   = 1
isnan(Inf - Inf)   = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.3.4 | title=The isnan macro | p=236-237}}
{{ref std c99}}
{{ref std | section=7.12.3.4 | title=The isnan macro | p=217}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fnan}}
{{dsc inc | c/numeric/math/dsc fpclassify}}
{{dsc inc | c/numeric/math/dsc isfinite}}
{{dsc inc | c/numeric/math/dsc isinf}}
{{dsc inc | c/numeric/math/dsc isnormal}}
{{dsc inc | c/numeric/math/dsc isunordered}}
{{dsc see cpp | cpp/numeric/math/isnan}}
{{dsc end}}

[[ar:c/numeric/math/isnan]]
[[cs:c/numeric/math/isnan]]
[[de:c/numeric/math/isnan]]
[[es:c/numeric/math/isnan]]
[[fr:c/numeric/math/isnan]]
[[it:c/numeric/math/isnan]]
[[ja:c/numeric/math/isnan]]
[[ko:c/numeric/math/isnan]]
[[pl:c/numeric/math/isnan]]
[[pt:c/numeric/math/isnan]]
[[ru:c/numeric/math/isnan]]
[[tr:c/numeric/math/isnan]]
[[zh:c/numeric/math/isnan]]</text>
      <sha1>snn4wmci3fzwimd0i50lyxwdd2hcgdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isnormal</title>
    <ns>0</ns>
    <id>6254</id>
    <revision>
      <id>77274</id>
      <parentid>73067</parentid>
      <timestamp>2015-03-20T18:16:39Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2124">{{c/title|isnormal}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isnormal(arg) /* implementation defined */
}}
{{dcl end}}

Determines if the given floating point number {{tt|arg}} is normal, i.e. is neither zero, subnormal, infinite, nor {{tt|NaN}}. The macro returns an integral value.

{{lc|FLT_EVAL_METHOD}} is ignored: even if the argument is evaluated with more range and precision than its type, it is first converted to its semantic type, and the classification is based on that.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
Nonzero integral value if {{tt|arg}} is normal, {{c|0}} otherwise.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
 
int main(void)
{
    printf(&quot;isnormal(NAN)         = %d\n&quot;, isnormal(NAN));
    printf(&quot;isnormal(INFINITY)    = %d\n&quot;, isnormal(INFINITY));
    printf(&quot;isnormal(0.0)         = %d\n&quot;, isnormal(0.0));
    printf(&quot;isnormal(DBL_MIN/2.0) = %d\n&quot;, isnormal(DBL_MIN/2.0));
    printf(&quot;isnormal(1.0)         = %d\n&quot;, isnormal(1.0));
}
 | output=
isnormal(NAN)         = 0
isnormal(INFINITY)    = 0
isnormal(0.0)         = 0
isnormal(DBL_MIN/2.0) = 0
isnormal(1.0)         = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.3.5 | title=The isnormal macro | p=237}}
{{ref std c99}}
{{ref std | section=7.12.3.5 | title=The isnormal macro | p=217-218}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fpclassify}}
{{dsc inc | c/numeric/math/dsc isfinite}}
{{dsc inc | c/numeric/math/dsc isinf}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc see cpp | cpp/numeric/math/isnormal}}
{{dsc end}}

[[ar:c/numeric/math/isnormal]]
[[cs:c/numeric/math/isnormal]]
[[de:c/numeric/math/isnormal]]
[[es:c/numeric/math/isnormal]]
[[fr:c/numeric/math/isnormal]]
[[it:c/numeric/math/isnormal]]
[[ja:c/numeric/math/isnormal]]
[[ko:c/numeric/math/isnormal]]
[[pl:c/numeric/math/isnormal]]
[[pt:c/numeric/math/isnormal]]
[[ru:c/numeric/math/isnormal]]
[[tr:c/numeric/math/isnormal]]
[[zh:c/numeric/math/isnormal]]</text>
      <sha1>td0hs173azhq74c00t1cqtqe1zleagz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/isunordered</title>
    <ns>0</ns>
    <id>13547</id>
    <revision>
      <id>77380</id>
      <parentid>73399</parentid>
      <timestamp>2015-03-24T10:27:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1942">{{c/title|isunordered}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define isunordered(x, y) /* implementation defined */
}}
{{dcl end}}

Determines if the floating point numbers {{tt|x}} and {{tt|y}} are unordered, that is, one or both are NaN and thus cannot be meaningfully compared with each other.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

Nonzero integral value if either {{tt|x}} or {{tt|y}} is NaN, {{c|0}} otherwise.


===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;isunordered(NAN,1.0) = %d\n&quot;, isunordered(NAN,1.0));
    printf(&quot;isunordered(1.0,NAN) = %d\n&quot;, isunordered(1.0,NAN));
    printf(&quot;isunordered(NAN,NAN) = %d\n&quot;, isunordered(NAN,NAN));
    printf(&quot;isunordered(1.0,0.0) = %d\n&quot;, isunordered(1.0,0.0));
 
    return 0;
}
 | p=true
 | output=
isunordered(NAN,1.0) = 1
isunordered(1.0,NAN) = 1
isunordered(NAN,NAN) = 1
isunordered(1.0,0.0) = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.14.6 | title=The isunordered macro | p=261}}
{{ref std | section=F.10.11   | title=Comparison macros | p=531}}
{{ref std c99}}
{{ref std | section=7.12.14.6 | title=The isunordered macro | p=242}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fpclassify}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc see cpp | cpp/numeric/math/isunordered}}
{{dsc end}}

[[ar:c/numeric/math/isunordered]]
[[cs:c/numeric/math/isunordered]]
[[de:c/numeric/math/isunordered]]
[[es:c/numeric/math/isunordered]]
[[fr:c/numeric/math/isunordered]]
[[it:c/numeric/math/isunordered]]
[[ja:c/numeric/math/isunordered]]
[[ko:c/numeric/math/isunordered]]
[[pl:c/numeric/math/isunordered]]
[[pt:c/numeric/math/isunordered]]
[[ru:c/numeric/math/isunordered]]
[[tr:c/numeric/math/isunordered]]
[[zh:c/numeric/math/isunordered]]</text>
      <sha1>psql81y1x4f78x98ne7odhzzyn250rb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/labs</title>
    <ns>0</ns>
    <id>6502</id>
    <redirect title="c/numeric/math/abs" />
    <revision>
      <id>25674</id>
      <timestamp>2012-04-23T21:01:28Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/abs]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[c/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/ldexp</title>
    <ns>0</ns>
    <id>6265</id>
    <revision>
      <id>78886</id>
      <parentid>77313</parentid>
      <timestamp>2015-06-11T11:36:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="4453">{{c/title|ldexp | ldexpf | ldexpl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       ldexpf( float arg, int exp );
}}
{{dcl |num=2|
double      ldexp( double arg, int exp );
}}
{{dcl | since=c99 |num=3|
long double ldexpl( long double arg, int exp );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |num=4|
#define ldexp( arg, exp )
}}
{{dcl end}}

@1-3@ Multiplies a floating point value {{tt|arg}} by the number 2 raised to the {{tt|exp}} power.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|ldexpl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|ldexp}} is called. Otherwise, {{tt|ldexpf}} is called, respectively.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par | exp | integer value}}
{{par end}}

===Return value===
If no errors occur, {{tt|arg}} multiplied by 2 to the power of {{tt|exp}} ({{math|arg&amp;times;2{{su|p=exp}}}}) is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* Unless a range error occurs, {{lc|FE_INEXACT}} is never raised (the result is exact)
* Unless a range error occurs, the [[c/numeric/fenv/FE_round|current rounding mode]] is ignored
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|exp}} is 0, then {{tt|arg}} is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned

===Notes===
On binary systems (where {{lc|FLT_RADIX}} is {{tt|2}}), {{tt|ldexp}} is equivalent to {{lc|scalbn}}.

The function {{tt|ldexp}} (&quot;load exponent&quot;), together with its dual, {{lc|frexp}}, can be used to manipulate the representation of a floating-point number without direct bit manipulations.

On many implementations, {{tt|ldexp}} is less efficient than multiplication or division by a power of two using arithmetic operators.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;ldexp(7, -4) = %f\n&quot;, ldexp(7, -4));
    printf(&quot;ldexp(1, -1074) = %g (minimum positive subnormal double)\n&quot;,
            ldexp(1, -1074));
    printf(&quot;ldexp(nextafter(1,0), 1024) = %g (largest finite double)\n&quot;,
            ldexp(nextafter(1,0), 1024));
    // special values
    printf(&quot;ldexp(-0, 10) = %f\n&quot;, ldexp(-0.0, 10));
    printf(&quot;ldexp(-Inf, -1) = %f\n&quot;, ldexp(-INFINITY, -1));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;ldexp(1, 1024) = %f\n&quot;, ldexp(1, 1024));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
ldexp(7, -4) = 0.437500
ldexp(1, -1074) = 4.94066e-324 (minimum positive subnormal double)
ldexp(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)
ldexp(-0, 10) = -0.000000
ldexp(-Inf, -1) = -inf
ldexp(1, 1024) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.6 | title=The ldexp functions | p=244}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.6 | title=The ldexp functions | p=522}}
{{ref std c99}}
{{ref std | section=7.12.6.6 | title=The ldexp functions | p=225}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.6  | title=The ldexp functions| p=459}}
{{ref std c89}}
{{ref std | section=4.5.4.3  | title=The ldexp function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc frexp}}
{{dsc inc | c/numeric/math/dsc scalbn}}
{{dsc see cpp | cpp/numeric/math/ldexp}}
{{dsc end}}

[[ar:c/numeric/math/ldexp]]
[[cs:c/numeric/math/ldexp]]
[[de:c/numeric/math/ldexp]]
[[es:c/numeric/math/ldexp]]
[[fr:c/numeric/math/ldexp]]
[[it:c/numeric/math/ldexp]]
[[ja:c/numeric/math/ldexp]]
[[ko:c/numeric/math/ldexp]]
[[pl:c/numeric/math/ldexp]]
[[pt:c/numeric/math/ldexp]]
[[ru:c/numeric/math/ldexp]]
[[tr:c/numeric/math/ldexp]]
[[zh:c/numeric/math/ldexp]]</text>
      <sha1>7zbwe2yy51quz4aih7t2lwf3s60oatn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/ldiv</title>
    <ns>0</ns>
    <id>6504</id>
    <redirect title="c/numeric/math/div" />
    <revision>
      <id>25676</id>
      <timestamp>2012-04-23T21:01:35Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/div]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[c/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/lgamma</title>
    <ns>0</ns>
    <id>6311</id>
    <revision>
      <id>77336</id>
      <parentid>73372</parentid>
      <timestamp>2015-03-22T13:40:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4726">{{c/title|lgamma, lgammaf, lgammal}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       lgammaf( float arg );
}}
{{dcl | since=c99 |num=2|
double      lgamma( double arg );
}}
{{dcl | since=c99 |num=3|
long double lgammal( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define lgamma( arg )
}}
{{dcl end}}

@1-3@ Computes the natural logarithm of the absolute value of the [[enwiki:Gamma function|gamma function]] of {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|lgammal}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|lgamma}} is called. Otherwise, {{tt|lgammaf}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the value of the logarithm of the gamma function of {{tt|arg}}, that is {{math|log{{su|b=e}}{{!}}{{minteg|0|∞|''t''{{su|p=arg-1}} {{mexp|-t}} d''t''}}{{!}}}}, is returned.

If a pole error occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If {{tt|arg}} is zero or is an integer less than zero, a pole error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is 1, +0 is returned
* If the argument is 2, +0 is returned
* If the argument is ±0, +∞ is returned and {{lc|FE_DIVBYZERO}} is raised
* If the argument is a negative integer, +∞ is returned and {{lc|FE_DIVBYZERO}} is raised
* If the argument is ±∞, +∞ is returned.
* If the argument is NaN, NaN is returned

===Notes===
If {{tt|arg}} is a natural number, {{c|lgamma(arg)}} is the logarithm of the factorial of {{tt|arg-1}}.

The [http://pubs.opengroup.org/onlinepubs/9699919799/functions/lgamma.html POSIX version of lgamma] is not thread-safe: each execution of the function stores the sign of the gamma function of {{tt|arg}} in the static external variable {{tt|signgam}}. Some implementations provide {{tt|lgamma_r}}, which takes a pointer to user-provided storage for singgam as the second parameter, and is thread-safe.

There is a non-standard function named {{tt|gamma}} in various implementations, but its definition is inconsistent. For example, glibc and 4.2BSD version of {{tt|gamma}} executes {{tt|lgamma}}, but 4.4BSD version of {{tt|gamma}} executes {{tt|tgamma}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;lgamma(10) = %f, log(9!)=%f\n&quot;, lgamma(10), log(2*3*4*5*6*7*8*9));
    double pi = acos(-1);
    printf(&quot;lgamma(0.5) = %f, log(sqrt(pi)) = %f\n&quot;, log(sqrt(pi)), lgamma(0.5));
    // special values
    printf(&quot;lgamma(1) = %f\n&quot;, lgamma(1));
    printf(&quot;lgamma(+Inf) = %f\n&quot;, lgamma(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;lgamma(0) = %f\n&quot;, lgamma(0));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
 | p=true
 | output=
lgamma(10) = 12.801827, log(9!)=12.801827
lgamma(0.5) = 0.572365, log(sqrt(pi)) = 0.572365
lgamma(1) = 0.000000
lgamma(+Inf) = inf
lgamma(0) = inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.8.3 | title=The lgamma functions | p=250}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.5.3 | title=The lgamma functions | p=525}}
{{ref std c99}}
{{ref std | section=7.12.8.3 | title=The lgamma functions | p=231}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.5.3  | title=The lgamma functions| p=462}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc tgamma}}
{{dsc see cpp | cpp/numeric/math/lgamma}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/LogGammaFunction.html Weisstein, Eric W. &quot;Log Gamma Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[ar:c/numeric/math/lgamma]]
[[cs:c/numeric/math/lgamma]]
[[de:c/numeric/math/lgamma]]
[[es:c/numeric/math/lgamma]]
[[fr:c/numeric/math/lgamma]]
[[it:c/numeric/math/lgamma]]
[[ja:c/numeric/math/lgamma]]
[[ko:c/numeric/math/lgamma]]
[[pl:c/numeric/math/lgamma]]
[[pt:c/numeric/math/lgamma]]
[[ru:c/numeric/math/lgamma]]
[[tr:c/numeric/math/lgamma]]
[[zh:c/numeric/math/lgamma]]</text>
      <sha1>hftrhqm1r1j1pi1uv79c5r0zv8f0qqr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/llabs</title>
    <ns>0</ns>
    <id>6503</id>
    <redirect title="c/numeric/math/abs" />
    <revision>
      <id>25675</id>
      <timestamp>2012-04-23T21:01:30Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/abs]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[c/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/lldiv</title>
    <ns>0</ns>
    <id>6505</id>
    <redirect title="c/numeric/math/div" />
    <revision>
      <id>25677</id>
      <timestamp>2012-04-23T21:01:36Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/div]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[c/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/llrint</title>
    <ns>0</ns>
    <id>6511</id>
    <redirect title="c/numeric/math/rint" />
    <revision>
      <id>25683</id>
      <timestamp>2012-04-23T21:01:55Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/rint]]</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/numeric/math/rint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/llround</title>
    <ns>0</ns>
    <id>6509</id>
    <redirect title="c/numeric/math/round" />
    <revision>
      <id>25681</id>
      <timestamp>2012-04-23T21:01:48Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/round]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/numeric/math/round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/log</title>
    <ns>0</ns>
    <id>6279</id>
    <revision>
      <id>78887</id>
      <parentid>77323</parentid>
      <timestamp>2015-06-11T11:39:06Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3729">{{c/title|log, logf, logl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       logf( float arg );
}}
{{dcl |num=2|
double      log( double arg );
}}
{{dcl | since=c99 |num=3|
long double logl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define log( arg )
}}
{{dcl end}}

@1-3@ Computes the natural (base ''e'') logarithm of {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|logl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|log}} is called. Otherwise, {{tt|logf}} is called. If {{tt|arg}} is complex or imaginary, then the macro invokes the corresponding complex function ({{c|clogf}}, {{c|clog}}, {{c|clogl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the natural (base-''e'') logarithm of {{tt|arg}} ({{math|ln(arg)}} or {{math|log{{su|b=e}}(arg)}}) is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error occurs if {{tt|arg}} is less than zero.

Pole error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is 1, +0 is returned
* If the argument is negative, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Example===
{{example | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;log(1) = %f\n&quot;, log(1));
    printf(&quot;base-5 logarithm of 125 = %f\n&quot;, log(125)/log(5));
    // special values
    printf(&quot;log(1) = %f\n&quot;, log(1));
    printf(&quot;log(+Inf) = %f\n&quot;, log(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;log(0) = %f\n&quot;, log(0));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
| output=
log(1) = 0.000000
base-5 logarithm of 125 = 3.000000
log(1) = 0.000000
log(+Inf) = inf
log(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.7 | title=The log functions | p=244-245}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.7 | title=The log functions | p=522}}
{{ref std c99}}
{{ref std | section=7.12.6.7 | title=The log functions | p=225}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.7  | title=The log functions| p=459}}
{{ref std c89}}
{{ref std | section=4.5.4.4  | title=The log function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc log10}}
{{dsc inc | c/numeric/math/dsc log2}}
{{dsc inc | c/numeric/math/dsc log1p}}
{{dsc inc | c/numeric/math/dsc exp}}
{{dsc inc | c/numeric/complex/dsc clog}}
{{dsc see cpp | cpp/numeric/math/log}}
{{dsc end}}

[[ar:c/numeric/math/log]]
[[cs:c/numeric/math/log]]
[[de:c/numeric/math/log]]
[[es:c/numeric/math/log]]
[[fr:c/numeric/math/log]]
[[it:c/numeric/math/log]]
[[ja:c/numeric/math/log]]
[[ko:c/numeric/math/log]]
[[pl:c/numeric/math/log]]
[[pt:c/numeric/math/log]]
[[ru:c/numeric/math/log]]
[[tr:c/numeric/math/log]]
[[zh:c/numeric/math/log]]</text>
      <sha1>6jil0i47vnqby31nyao9h9xtmall2up</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/log10</title>
    <ns>0</ns>
    <id>6280</id>
    <revision>
      <id>78888</id>
      <parentid>77324</parentid>
      <timestamp>2015-06-11T11:40:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3696">{{c/title|log10, log10f, log10l}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       log10f( float arg );
}}
{{dcl |num=2|
double      log10( double arg );
}}
{{dcl | since=c99 |num=3|
long double log10l( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define log10( arg )
}}
{{dcl end}}

@1-3@ Computes the common (base-''10'') logarithm of {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|log10l}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|log10}} is called. Otherwise, {{tt|log10f}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the common (base-''10'') logarithm of {{tt|arg}} ({{math|log{{su|b=10}}(arg)}} or {{math|lg(arg)}}) is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error occurs if {{tt|arg}} is less than zero.

Pole error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is 1, +0 is returned
* If the argument is negative, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;log10(1000) = %f\n&quot;, log10(1000));
    printf(&quot;log10(0.001) = %f\n&quot;, log10(0.001));
    printf(&quot;base-5 logarithm of 125 = %f\n&quot;, log10(125)/log10(5));
    // special values
    printf(&quot;log10(1) = %f\n&quot;, log10(1));
    printf(&quot;log10(+Inf) = %f\n&quot;, log10(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;log10(0) = %f\n&quot;, log10(0));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
 | p=true
 | output=
log10(1000) = 3.000000
log10(0.001) = -3.000000
base-5 logarithm of 125 = 3.000000
log10(1) = 0.000000
log10(+Inf) = inf
log10(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.8 | title=The log10 functions | p=245}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.8 | title=The log10 functions | p=522}}
{{ref std c99}}
{{ref std | section=7.12.6.8 | title=The log10 functions | p=225-226}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.8  | title=The log10 functions| p=459}}
{{ref std c89}}
{{ref std | section=4.5.4.5  | title=The log10 function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc log}}
{{dsc inc | c/numeric/math/dsc log2}}
{{dsc inc | c/numeric/math/dsc log1p}}
{{dsc see cpp | cpp/numeric/math/log10}}
{{dsc end}}

[[ar:c/numeric/math/log10]]
[[cs:c/numeric/math/log10]]
[[de:c/numeric/math/log10]]
[[es:c/numeric/math/log10]]
[[fr:c/numeric/math/log10]]
[[it:c/numeric/math/log10]]
[[ja:c/numeric/math/log10]]
[[ko:c/numeric/math/log10]]
[[pl:c/numeric/math/log10]]
[[pt:c/numeric/math/log10]]
[[ru:c/numeric/math/log10]]
[[tr:c/numeric/math/log10]]
[[zh:c/numeric/math/log10]]</text>
      <sha1>1qlmgnbkxr4x9mzn41xf7bsoqshhysm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/log1p</title>
    <ns>0</ns>
    <id>6281</id>
    <revision>
      <id>77325</id>
      <parentid>73338</parentid>
      <timestamp>2015-03-22T12:00:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4317">{{c/title|log1p, log1pf, log1pl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       log1pf( float arg );
}}
{{dcl | since=c99 |num=2|
double      log1p( double arg );
}}
{{dcl | since=c99 |num=3|
long double log1pl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define log1p( arg )
}}
{{dcl end}}

@1-3@ Computes the natural (base {{c|e}}) logarithm of {{c|1+arg}}. This function is more precise than the expression {{c|log(1+arg)}} if {{tt|arg}} is close to zero.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|log1pl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|log1p}} is called. Otherwise, {{tt|log1pf}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur {{math|ln(1+arg)}} is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error occurs if {{tt|arg}} is less than {{math|-1}}.

Pole error may occur if {{tt|arg}} is {{math|-1}}.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned unmodified
* If the argument is -1, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is less than -1, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
The functions {{lc|expm1}} and {{tt|log1p}} are useful for financial calculations, for example, when calculating small daily interest rates: {{math|(1+x){{su|p=n}}-1}} can be expressed as {{c|expm1(n * log1p(x))}}. These functions also simplify writing accurate inverse hyperbolic functions.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;log1p(0) = %f\n&quot;, log1p(0));
    printf(&quot;Interest earned in 2 days on $100, compounded daily at 1%%\n&quot;
           &quot; on a 30/360 calendar = %f\n&quot;,
           100*expm1(2*log1p(0.01/360)));
    printf(&quot;log(1+1e-16) = %g, but log1p(1e-16) = %g\n&quot;,
           log(1+1e-16), log1p(1e-16));
    // special values
    printf(&quot;log1p(-0) = %f\n&quot;, log1p(-0.0));
    printf(&quot;log1p(+Inf) = %f\n&quot;, log1p(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;log1p(-1) = %f\n&quot;, log1p(-1));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
 | p=true
 | output=
log1p(0) = 0.000000
Interest earned in 2 days on $100, compounded daily at 1%
 on a 30/360 calendar = 0.005556
log(1+1e-16) = 0, but log1p(1e-16) = 1e-16
log1p(-0) = -0.000000
log1p(+Inf) = Inf
log1p(-1) = -Inf
    errno == ERANGE: Result too large
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.9 | title=The log1p functions | p=245}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.9 | title=The log1p functions | p=522}}
{{ref std c99}}
{{ref std | section=7.12.6.9 | title=The log1p functions | p=226}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.9  | title=The log1p functions| p=459}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc log}}
{{dsc inc | c/numeric/math/dsc log10}}
{{dsc inc | c/numeric/math/dsc log2}}
{{dsc inc | c/numeric/math/dsc expm1}}
{{dsc see cpp | cpp/numeric/math/log1p}}
{{dsc end}}

[[ar:c/numeric/math/log1p]]
[[cs:c/numeric/math/log1p]]
[[de:c/numeric/math/log1p]]
[[es:c/numeric/math/log1p]]
[[fr:c/numeric/math/log1p]]
[[it:c/numeric/math/log1p]]
[[ja:c/numeric/math/log1p]]
[[ko:c/numeric/math/log1p]]
[[pl:c/numeric/math/log1p]]
[[pt:c/numeric/math/log1p]]
[[ru:c/numeric/math/log1p]]
[[tr:c/numeric/math/log1p]]
[[zh:c/numeric/math/log1p]]</text>
      <sha1>lh6tcxb50mdi1optqrtnfe0e3u8q33v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/log2</title>
    <ns>0</ns>
    <id>6283</id>
    <revision>
      <id>77326</id>
      <parentid>73336</parentid>
      <timestamp>2015-03-22T12:06:31Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3902">{{c/title|log2, log2f, log2l}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       log2f( float arg );
}}
{{dcl | since=c99 |num=2|
double      log2( double arg );
}}
{{dcl | since=c99 |num=3|
long double log2l( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define log2( arg )
}}
{{dcl end}}

@1-3@ Computes the base {{c|2}} logarithm of {{c|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|log2l}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|log2}} is called. Otherwise, {{tt|log2f}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the base-''2'' logarithm of {{tt|arg}} ({{math|log{{su|b=2}}(arg)}} or {{math|lb(arg)}}) is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error occurs if {{tt|arg}} is less than zero.

Pole error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is 1, +0 is returned
* If the argument is negative, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
For integer {{tt|arg}}, the binary logarithm can be interpreted as the zero-based index of the most significant 1 bit in the input.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;log2(65536) = %f\n&quot;, log2(65536));
    printf(&quot;log2(0.125) = %f\n&quot;, log2(0.125));
    printf(&quot;log2(0x020f) = %f (highest set bit is in position 9)\n&quot;, log2(0x020f));
    printf(&quot;base-5 logarithm of 125 = %f\n&quot;, log2(125)/log2(5));
    // special values
    printf(&quot;log2(1) = %f\n&quot;, log2(1));
    printf(&quot;log2(+Inf) = %f\n&quot;, log2(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;log2(0) = %f\n&quot;, log2(0));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
 | p=true
 | output=
log2(65536) = 16.000000
log2(0.125) = -3.000000
log2(0x020f) = 9.041659 (highest set bit is in position 9)
base-5 logarithm of 125 = 3.000000
log2(1) = 0.000000
log2(+Inf) = inf
log2(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.10 | title=The log2 functions | p=246}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.10 | title=The log2 functions | p=522}}
{{ref std c99}}
{{ref std | section=7.12.6.10 | title=The log2 functions | p=226}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.10  | title=The log2 functions| p=459}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc log}}
{{dsc inc | c/numeric/math/dsc log10}}
{{dsc inc | c/numeric/math/dsc log1p}}
{{dsc inc | c/numeric/math/dsc exp2}}
{{dsc see cpp | cpp/numeric/math/log2}}
{{dsc end}}

[[ar:c/numeric/math/log2]]
[[cs:c/numeric/math/log2]]
[[de:c/numeric/math/log2]]
[[es:c/numeric/math/log2]]
[[fr:c/numeric/math/log2]]
[[it:c/numeric/math/log2]]
[[ja:c/numeric/math/log2]]
[[ko:c/numeric/math/log2]]
[[pl:c/numeric/math/log2]]
[[pt:c/numeric/math/log2]]
[[ru:c/numeric/math/log2]]
[[tr:c/numeric/math/log2]]
[[zh:c/numeric/math/log2]]</text>
      <sha1>7emj1id2ckdbiy5egg0kffo84a9ycsv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/logb</title>
    <ns>0</ns>
    <id>6261</id>
    <revision>
      <id>77327</id>
      <parentid>73384</parentid>
      <timestamp>2015-03-22T12:13:25Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4527">{{c/title|logb|logbf|logbl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=1|
float       logbf( float arg );
}}
{{dcl | since=c99 | num=2|
double      logb( double arg );
}}
{{dcl | since=c99 | num=3|
long double logbl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define logb( arg )
}}
{{dcl end}}

@1-3@ Extracts the value of the unbiased radix-independent exponent from the floating-point argument {{tt|arg}}, and returns it as a floating-point value. 
@4@ Type-generic macros: If {{tt|arg}} has type {{c|long double}}, {{tt|logbl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|logb}} is called. Otherwise, {{tt|logbf}} is called.

Formally, the unbiased exponent is the signed integral part of {{math|log{{su|b=r}}{{!}}arg{{!}}}} (returned by this function as a floating-point value), for non-zero arg, where {{tt|r}} is {{lc|FLT_RADIX}}. If {{tt|arg}} is subnormal, it is treated as though it was normalized.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the unbiased exponent of {{tt|arg}} is returned as a signed floating-point value.

If a domain error occurs, an implementation-defined value is returned

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain or range error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|arg}} is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If {{tt|arg}} is ±∞, +∞ is returned
* If {{tt|arg}} is NaN, NaN is returned.
* In all other cases, the result is exact ({{lc|FE_INEXACT}} is never raised) and [[c/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/logb.html POSIX requires] that a pole error occurs if {{tt|arg}} is ±0.

The value of the exponent returned by {{tt|logb}} is always 1 less than the exponent retuned by {{lc|frexp}} because of the different normalization requirements: for the exponent {{tt|e}} returned by {{tt|logb}}, {{math|{{!}}arg*r{{su|p=-e}}{{!}}}} is between 1 and {{tt|r}} (typically between {{c|1}} and {{c|2}}), but for the exponent {{tt|e}} returned by {{lc|frexp}}, {{math|{{!}}arg*2{{su|p=-e}}{{!}}}} is between {{c|0.5}} and {{c|1}}.

===Example===
{{example | Compares different floating-point decomposition functions.
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    double f = 123.45;
    printf(&quot;Given the number %.2f or %a in hex,\n&quot;, f, f);

    double f3;
    double f2 = modf(f, &amp;f3);
    printf(&quot;modf() makes %.0f + %.2f\n&quot;, f3, f2);

    int i;
    f2 = frexp(f, &amp;i);
    printf(&quot;frexp() makes %f * 2^%d\n&quot;, f2, i);

    i = logb(f);
    printf(&quot;logb()/logb() make %f * %d^%d\n&quot;, f/scalbn(1.0, i), FLT_RADIX, i);

    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;logb(0) = %f\n&quot;, logb(0));
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/logb() make 1.928906 * 2^6
logb(0) = -Inf
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.11 | title=The logb functions | p=246}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.11 | title=The logb functions | p=522}}
{{ref std c99}}
{{ref std | section=7.12.6.11 | title=The logb functions | p=227}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.11  | title=The logb functions| p=459}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/numeric/math/dsc frexp}}
{{dsc inc | c/numeric/math/dsc ilogb}}
{{dsc inc | c/numeric/math/dsc scalbn}}
{{dsc see cpp | cpp/numeric/math/logb}}
{{dsc end}}

[[ar:c/numeric/math/logb]]
[[cs:c/numeric/math/logb]]
[[de:c/numeric/math/logb]]
[[es:c/numeric/math/logb]]
[[fr:c/numeric/math/logb]]
[[it:c/numeric/math/logb]]
[[ja:c/numeric/math/logb]]
[[ko:c/numeric/math/logb]]
[[pl:c/numeric/math/logb]]
[[pt:c/numeric/math/logb]]
[[ru:c/numeric/math/logb]]
[[tr:c/numeric/math/logb]]
[[zh:c/numeric/math/logb]]</text>
      <sha1>8nc5hpcce9glb1bs1obl1bd45f1h9s0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/lrint</title>
    <ns>0</ns>
    <id>6510</id>
    <redirect title="c/numeric/math/rint" />
    <revision>
      <id>25682</id>
      <timestamp>2012-04-23T21:01:51Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/rint]]</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/numeric/math/rint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/lround</title>
    <ns>0</ns>
    <id>6508</id>
    <redirect title="c/numeric/math/round" />
    <revision>
      <id>25680</id>
      <timestamp>2012-04-23T21:01:45Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/round]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/numeric/math/round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/math errhandling</title>
    <ns>0</ns>
    <id>13524</id>
    <revision>
      <id>77386</id>
      <parentid>77283</parentid>
      <timestamp>2015-03-24T11:04:27Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>mod titles</comment>
      <text xml:space="preserve" bytes="4664">{{title|MATH_ERRNO, MATH_ERREXCEPT, math_errhandling}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define MATH_ERRNO        1
}}
{{dcl | since=c99 |
#define MATH_ERREXCEPT    2
}}
{{dcl | since=c99 |
#define math_errhandling  /*implementation defined*/
}}
{{dcl end}}

The macro constant {{tt|math_errhandling}} expands to an expression of type {{c|int}} that is either equal to {{tt|MATH_ERRNO}}, or equal to {{tt|MATH_ERREXCEPT}}, or equal to their bitwise OR ({{c|MATH_ERRNO {{!}} MATH_ERREXCEPT}}).

The value of {{tt|math_errhandling}} indicates the type of error handling that is performed by the floating-point operators and [[c/numeric/math|functions]]:

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|MATH_ERREXCEPT}} | indicates that floating-point exceptions are used: at least {{lc|FE_DIVBYZERO}}, {{lc|FE_INVALID}}, and {{lc|FE_OVERFLOW}} are defined in {{c|&lt;fenv.h&gt;}}.}}
{{dsc | {{tt|MATH_ERRNO}} | indicates that floating-point operations use the variable {{lc|errno}} to report errors.}}
{{dsc end}}

If the implementation supports IEEE floating-point arithmetic (IEC 60559), {{c|math_errhandling &amp; MATH_ERREXCEPT}} is required to be non-zero.

The following floating-point error conditions are recognized:

{|table class=wikitable
|-
!Condition||Explanation||errno||floating-point exception||Example
|-
|Domain error
|the argument is outside the range in which the operation is mathematically defined (the description of [[c/numeric/math|each function]] lists the required domain errors)
|{{lc|EDOM}}
|{{lc|FE_INVALID}}
|{{c|acos(2)}}
|-
|Pole error
|the mathematical result of the function is exactly infinite or undefined
|{{lc|ERANGE}}
|{{lc|FE_DIVBYZERO}}
|{{c|log(0.0)}}, {{c|1.0/0.0}}
|-
|Range error due to overflow
|the mathematical result is finite, but becomes infinite after rounding, or becomes the largest representable finite value after rounding down
|{{lc|ERANGE}}
|{{lc|FE_OVERFLOW}}
|{{c|pow(DBL_MAX,2)}}
|-
|Range error due to underflow
|the result is non-zero, but becomes zero after rounding, or becomes subnormal with a loss of precision
|{{lc|ERANGE}} or unchanged (implementation-defined)
|{{lc|FE_UNDERFLOW}} or nothing (implementation-defined)
|{{c|DBL_MIN/2}}
|-
|Inexact result
|the result has to be rounded to fit in the destination type
|unchanged
|{{lc|FE_INEXACT}} or nothing (unspecified)
|{{c|sqrt(2)}}, {{c|1.0/10.0}}
|}

===Notes===
Whether {{lc|FE_INEXACT}} is raised by the mathematical library functions is unspecified in general, but may be explicitly specified in the description of the function (e.g. {{lc|rint}} vs {{lc|nearbyint}}).

Before C99, floating-point exceptions were not specified, {{c|EDOM}} was required for any domain error, {{c|ERANGE}} was required for overflows and implementation-defined for underflows.

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;fenv.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;MATH_ERRNO is %s\n&quot;, math_errhandling &amp; MATH_ERRNO ? &quot;set&quot; : &quot;not set&quot;);
    printf(&quot;MATH_ERREXCEPT is %s\n&quot;,
           math_errhandling &amp; MATH_ERREXCEPT ? &quot;set&quot; : &quot;not set&quot;);
    feclearexcept(FE_ALL_EXCEPT);
    errno = 0;
    printf(&quot;log(0) = %f\n&quot;, log(0));
    if(errno == ERANGE)
        perror(&quot;errno == ERANGE&quot;);
    if(fetestexcept(FE_DIVBYZERO))
        puts(&quot;FE_DIVBYZERO (pole error) reported&quot;);
}
 | p=true
 | output=
MATH_ERRNO is set
MATH_ERREXCEPT is set
log(0) = -inf
errno = ERANGE: Numerical result out of range
FE_DIVBYZERO (pole error) reported
}}

===References===
{{ref std c11}}
{{ref std | section=7.12/9 | title=MATH_ERRNO, MATH_ERREXCEPT, math_errhandling | p=233}}
{{ref std | section=F.10/4 | title=MATH_ERREXCEPT, math_errhandling | p=517}}
{{ref std c99}}
{{ref std | section=7.12/9 | title=MATH_ERRNO, MATH_ERREXCEPT, math_errhandling | p=214}}
{{ref std | section=F.9/4  | title=MATH_ERREXCEPT, math_errhandling&gt; | p=454}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc FE_exceptions}}
{{dsc inc | c/error/dsc errno}}
{{dsc see cpp | cpp/numeric/math/math_errhandling}}
{{dsc end}}

[[ar:c/numeric/math/math_errhandling]]
[[cs:c/numeric/math/math_errhandling]]
[[de:c/numeric/math/math_errhandling]]
[[es:c/numeric/math/math_errhandling]]
[[fr:c/numeric/math/math_errhandling]]
[[it:c/numeric/math/math_errhandling]]
[[ja:c/numeric/math/math_errhandling]]
[[ko:c/numeric/math/math_errhandling]]
[[pl:c/numeric/math/math_errhandling]]
[[pt:c/numeric/math/math_errhandling]]
[[ru:c/numeric/math/math_errhandling]]
[[tr:c/numeric/math/math_errhandling]]
[[zh:c/numeric/math/math_errhandling]]</text>
      <sha1>fnp7ai1tonbeuo7ncuxed5jttdtzm9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/modf</title>
    <ns>0</ns>
    <id>6264</id>
    <revision>
      <id>78889</id>
      <parentid>77328</parentid>
      <timestamp>2015-06-11T11:42:35Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3666">{{c/title|modf|modff|modfl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       modff( float arg, float* iptr );
}}
{{dcl |num=2|
double      modf( double arg, double* iptr );
}}
{{dcl | since=c99 |num=3|
long double modfl( long double arg, long double* iptr );
}}
{{dcl end}}

@1-3@ Decomposes given floating point value {{tt|arg}} into integral and fractional parts, each having the same type and sign as {{tt|arg}}. The integral part (in floating-point format) is stored in the object pointed to by {{tt|iptr}}.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par | iptr | pointer to floating point value to store the integral part to}}
{{par end}}

===Return value===

If no errors occur, returns the fractional part of {{tt|x}} with the same sign as {{tt|x}}. The integral part is put into the value pointed to by {{tt|iptr}}.

The sum of the returned value and the value stored in {{tt|*iptr}} gives {{tt|arg}} (allowing for rounding).

===Error handling===
This function is not subject to any errors specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|arg}} is ±0, ±0 is returned, and ±0 is stored in {{c|*iptr}}.
* If {{tt|arg}} is ±∞, ±0 is returned, and ±∞ is stored in {{c|*iptr}}.
* If {{tt|arg}} is NaN, NaN is returned, and NaN is stored in {{c|*iptr}}.
* The returned value is exact, [[c/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
This function behaves as if implemented as follows:
{{source|1=
double modf(double value, double *iptr)
{
#pragma STDC FENV_ACCESS ON
    int save_round = fegetround();
    fesetround(FE_TOWARDZERO);
    *iptr = std::nearbyint(value);
    fesetround(save_round);
    return copysign(isinf(value) ? 0.0 : value - (*iptr), value);
}
}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;

int main(void)
{
    double f = 123.45;
    printf(&quot;Given the number %.2f or %a in hex,\n&quot;, f, f);

    double f3;
    double f2 = modf(f, &amp;f3);
    printf(&quot;modf() makes %.2f + %.2f\n&quot;, f3, f2);

    int i;
    f2 = frexp(f, &amp;i);
    printf(&quot;frexp() makes %f * 2^%d\n&quot;, f2, i);

    i = ilogb(f);
    printf(&quot;logb()/ilogb() make %f * %d^%d\n&quot;, f/scalbn(1.0, i), FLT_RADIX, i);

    // special values
    f2 = modf(-0.0, &amp;f3);
    printf(&quot;modf(-0) makes %.2f + %.2f\n&quot;, f3, f2);
    f2 = modf(-INFINITY, &amp;f3);
    printf(&quot;modf(-Inf) makes %.2f + %.2f\n&quot;, f3, f2);
}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123.00 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
modf(-0) makes -0.00 + -0.00
modf(-Inf) makes -INF + -0.00
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.12 | title=The modf functions | p=246-247}}
{{ref std | section=F.10.3.12 | title=The modf functions | p=523}}
{{ref std c99}}
{{ref std | section=7.12.6.12 | title=The modf functions | p=227}}
{{ref std | section=F.9.3.12  | title=The modf functions| p=460}}
{{ref std c89}}
{{ref std | section=4.5.4.6   | title=The modf function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc trunc}}
{{dsc see cpp | cpp/numeric/math/modf}}
{{dsc end}}

[[ar:c/numeric/math/modf]]
[[cs:c/numeric/math/modf]]
[[de:c/numeric/math/modf]]
[[es:c/numeric/math/modf]]
[[fr:c/numeric/math/modf]]
[[it:c/numeric/math/modf]]
[[ja:c/numeric/math/modf]]
[[ko:c/numeric/math/modf]]
[[pl:c/numeric/math/modf]]
[[pt:c/numeric/math/modf]]
[[ru:c/numeric/math/modf]]
[[tr:c/numeric/math/modf]]
[[zh:c/numeric/math/modf]]</text>
      <sha1>qth133pe7p0wzwxwbxq4vd3z1g74yh9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/nan</title>
    <ns>0</ns>
    <id>6276</id>
    <revision>
      <id>87805</id>
      <parentid>87775</parentid>
      <timestamp>2016-10-04T09:21:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>another example</comment>
      <text xml:space="preserve" bytes="2100">{{c/title|nan|nanf|nanl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
float       nanf( const char* arg );
}}
{{dcl | since=c99 |
double      nan( const char* arg );
}}
{{dcl | since=c99 |
long double nanl( const char* arg );
}}
{{dcl end}}

Converts the implementation-defined character string {{tt|arg}} into the corresponding quiet NaN value, as if by calling {{lc|strtof}}, {{lc|strtod}}, or {{lc|strtold}}, respectively, as follows:

The call {{c|nan(&quot;string&quot;)}} is equivalent to the call {{c|strtod(&quot;NAN(string)&quot;, (char**)NULL);}}.

The call {{c|nan(&quot;&quot;)}} is equivalent to the call {{c|strtod(&quot;NAN()&quot;, (char**)NULL);}}.

The call {{c|nan(NULL)}} is equivalent to the call {{c|strtod(&quot;NAN&quot;, (char**)NULL);}}.

===Parameters===
{{par begin}}
{{par | arg | narrow character string identifying the contents of a NaN}}
{{par end}}

===Return value===
The quiet NaN value that corresponds to the identifying string {{tt|arg}} or zero if the implementation does not support quiet NaNs. 

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;stdint.h&gt;
#include &lt;inttypes.h&gt;
#include &lt;string.h&gt;

int main(void)
{
    double f1 = nan(&quot;1&quot;);
    uint64_t f1n; memcpy(&amp;f1n, &amp;f1, sizeof f1);
    printf(&quot;nan(\&quot;1\&quot;)   = %f (%&quot; PRIx64 &quot;)\n&quot;, f1, f1n);

    double f2 = nan(&quot;2&quot;);
    uint64_t f2n; memcpy(&amp;f2n, &amp;f2, sizeof f2);
    printf(&quot;nan(\&quot;2\&quot;)   = %f (%&quot; PRIx64 &quot;)\n&quot;, f2, f2n);

    double f3 = nan(&quot;0xF&quot;);
    uint64_t f3n; memcpy(&amp;f3n, &amp;f3, sizeof f3);
    printf(&quot;nan(\&quot;0xF\&quot;) = %f (%&quot; PRIx64 &quot;)\n&quot;, f3, f3n);
}
 | p=true
 | output=
nan(&quot;1&quot;)   = nan (7ff8000000000001)
nan(&quot;2&quot;)   = nan (7ff8000000000002)
nan(&quot;0xF&quot;) = nan (7ff800000000000f)
}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc isnan}}
{{dsc inc | c/numeric/math/dsc NAN}}}
{{dsc see cpp | cpp/numeric/math/nan | nanf | nan | nanl }}
{{dsc end}}

[[de:c/numeric/math/nan]]
[[es:c/numeric/math/nan]]
[[fr:c/numeric/math/nan]]
[[it:c/numeric/math/nan]]
[[ja:c/numeric/math/nan]]
[[pt:c/numeric/math/nan]]
[[ru:c/numeric/math/nan]]
[[zh:c/numeric/math/nan]]</text>
      <sha1>gp8la6qts6rggiclsr5j764io4od087</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/nanf</title>
    <ns>0</ns>
    <id>6506</id>
    <redirect title="c/numeric/math/nan" />
    <revision>
      <id>25678</id>
      <timestamp>2012-04-23T21:01:40Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/nan]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[c/numeric/math/nan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/nanl</title>
    <ns>0</ns>
    <id>6507</id>
    <redirect title="c/numeric/math/nan" />
    <revision>
      <id>25679</id>
      <timestamp>2012-04-23T21:01:43Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/nan]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[c/numeric/math/nan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/nearbyint</title>
    <ns>0</ns>
    <id>6307</id>
    <revision>
      <id>77348</id>
      <parentid>73378</parentid>
      <timestamp>2015-03-23T15:03:22Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4539">{{c/title|nearbyint|nearbyintf|nearbyintl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=1|
float       nearbyintf( float arg );
}}
{{dcl | since=c99 |num=2|
double      nearbyint( double arg );
}}
{{dcl | since=c99 |num=3|
long double nearbyintl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define nearbyint( arg )
}}
{{dcl end}}

@1-3@ Rounds the floating-point argument {{tt|arg}} to an integer value in floating-point format, using the [[c/numeric/fenv/FE_round|current rounding mode]].
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|nearbyintl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|nearbyint}} is called. Otherwise, {{tt|nearbyintf}} is called, respectively.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
The nearest integer value to {{tt|arg}}, according to the [[c/numeric/fenv/FE_round|current rounding mode]], is returned.

===Error handling===
This function is not subject to any of the errors specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* {{lc|FE_INEXACT}} is never raised
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned

===Notes===
The only difference between {{tt|nearbyint}} and {{lc|rint}} is that {{tt|nearbyint}} never raises {{lc|FE_INEXACT}}.

The largest representable floating-point values are exact integers in all standard floating-point formats, so {{tt|nearbyint}} never overflows on its own; however the result may overflow any integer type (including {{lc|intmax_t}}), when stored in an integer variable.

If the current rounding mode is {{lc|FE_TONEAREST}}, this function rounds to even in halfway cases (like {{lc|rint}}, but unlike {{lc|round}}).

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;

int main(void)
{
#pragma STDC FENV_ACCESS ON
    fesetround(FE_TONEAREST);
    printf(&quot;rounding to nearest:\nnearbyint(+2.3) = %+.1f  &quot;, nearbyint(2.3));
    printf(&quot;nearbyint(+2.5) = %+.1f  &quot;, nearbyint(2.5));
    printf(&quot;nearbyint(+3.5) = %+.1f\n&quot;, nearbyint(3.5));
    printf(&quot;nearbyint(-2.3) = %+.1f  &quot;, nearbyint(-2.3));
    printf(&quot;nearbyint(-2.5) = %+.1f  &quot;, nearbyint(-2.5));
    printf(&quot;nearbyint(-3.5) = %+.1f\n&quot;, nearbyint(-3.5));

    fesetround(FE_DOWNWARD);
    printf(&quot;rounding down: \nnearbyint(+2.3) = %+.1f  &quot;, nearbyint(2.3));
    printf(&quot;nearbyint(+2.5) = %+.1f  &quot;, nearbyint(2.5));
    printf(&quot;nearbyint(+3.5) = %+.1f\n&quot;, nearbyint(3.5));
    printf(&quot;nearbyint(-2.3) = %+.1f  &quot;, nearbyint(-2.3));
    printf(&quot;nearbyint(-2.5) = %+.1f  &quot;, nearbyint(-2.5));
    printf(&quot;nearbyint(-3.5) = %+.1f\n&quot;, nearbyint(-3.5));

    printf(&quot;nearbyint(-0.0) = %+.1f\n&quot;, nearbyint(-0.0));
    printf(&quot;nearbyint(-Inf) = %+.1f\n&quot;, nearbyint(-INFINITY));
}
 | output=
rounding to nearest:
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +4.0
nearbyint(-2.3) = -2.0  nearbyint(-2.5) = -2.0  nearbyint(-3.5) = -4.0
rounding down: 
nearbyint(+2.3) = +2.0  nearbyint(+2.5) = +2.0  nearbyint(+3.5) = +3.0
nearbyint(-2.3) = -3.0  nearbyint(-2.5) = -3.0  nearbyint(-3.5) = -4.0
nearbyint(-0.0) = -0.0
nearbyint(-Inf) = -inf
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.9.3 | title=The nearbyint functions | p=251-252}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.6.3 | title=The nearbyint functions | p=526}}
{{ref std c99}}
{{ref std | section=7.12.9.3 | title=The nearbyint functions | p=232}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.6.3  | title=The nearbyint functions| p=463}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc rint}}
{{dsc inc | c/numeric/math/dsc round}}
{{dsc inc | c/numeric/fenv/dsc feround}}
{{dsc see cpp | cpp/numeric/math/nearbyint}}
{{dsc end}}

[[ar:c/numeric/math/nearbyint]]
[[cs:c/numeric/math/nearbyint]]
[[de:c/numeric/math/nearbyint]]
[[es:c/numeric/math/nearbyint]]
[[fr:c/numeric/math/nearbyint]]
[[it:c/numeric/math/nearbyint]]
[[ja:c/numeric/math/nearbyint]]
[[ko:c/numeric/math/nearbyint]]
[[pl:c/numeric/math/nearbyint]]
[[pt:c/numeric/math/nearbyint]]
[[ru:c/numeric/math/nearbyint]]
[[tr:c/numeric/math/nearbyint]]
[[zh:c/numeric/math/nearbyint]]</text>
      <sha1>36xbvufj530jauvfbl0dt92r85mumvb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/nextafter</title>
    <ns>0</ns>
    <id>6260</id>
    <revision>
      <id>77359</id>
      <parentid>74386</parentid>
      <timestamp>2015-03-23T17:06:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="7042">{{c/title|nextafter, nextafterf, nextafterl|nexttoward, nexttowardf, nexttowardl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl |num=1| since=c99 |
float       nextafterf( float from, float to );
}}
{{dcl |num=2| since=c99 |
double      nextafter( double from, double to );
}}
{{dcl |num=3| since=c99 |
long double nextafterl( long double from, long double to );
}}
{{dcl |num=4| since=c99 |
float       nexttowardf( float from, long double to );
}}
{{dcl |num=5| since=c99 |
double      nexttoward( double from, long double to );
}}
{{dcl |num=6| since=c99 |
long double nexttowardl( long double from, long double to );
}}
{{dcl header | tgmath.h}}
{{dcl |num=7| since=c99 |
#define nextafter(from, to)
}}
{{dcl |num=8| since=c99 |
#define nexttoward(from, to)
}}
{{dcl end}}

@1-3@ First, converts both arguments to the type of the function, then returns the next representable value of {{tt|from}} in the direction of {{tt|to}}. If {{tt|from}} equals to {{tt|to}}, {{tt|to}} is returned.
@4-6@ First, converts the first argument to the type of the function, then returns the next representable value of {{tt|from}} in the direction of {{tt|to}}. If {{tt|from}} equals to {{tt|to}}, {{tt|to}} is returned, converted from {{c|long double}} to the return type of the function without loss of range or precision.
@7@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|nextafterl}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|nextafter}} is called. Otherwise, {{tt|nextafterf}} is called.
@8@ Type-generic macro: If the argument {{tt|from}} has type {{c|long double}}, {{tt|nexttowardl}} is called. Otherwise, if {{tt|from}} has integer type or the type {{c|double}}, {{tt|nexttoward}} is called. Otherwise, {{tt|nexttowardf}} is called.

===Parameters===
{{par begin}}
{{par | from, to | floating point values}}
{{par end}}

===Return value===
If no errors occur, the next representable value of {{tt|from}} in the direction of {{tt|to}}. is returned. If {{tt|from}} equals {{tt|to}}, then {{tt|to}} is returned, converted to the type of the function.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned (with the same sign as {{tt|from}}).

If a range error occurs due to underflow, the correct result is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if {{tt|from}} is finite, but the expected result is an infinity, raises {{lc|FE_INEXACT}} and {{lc|FE_OVERFLOW}}
* if {{tt|from}} does not equal {{tt|to}} and the result is subnormal or zero, raises {{lc|FE_INEXACT}} and {{lc|FE_UNDERFLOW}}
* in any case, the returned value is independent of the current rounding mode
* if either {{tt|from}} or {{tt|to}} is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/nextafter.html POSIX specifies] that the overflow and the underflow conditions are range errors (errno may be set).

IEC 60559 recommends that {{tt|from}} is returned whenever {{tt|from{{==}}to}}. These functions return {{tt|to}} instead, which makes the behavior around zero consistent: {{tt|nextafter(-0.0, +0.0)}} returns {{tt|+0.0}} and {{tt|nextafter(+0.0, -0.0)}} returns {{tt|–0.0}}.

===Example===
{{example |
 | code=
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
#include &lt;float.h&gt;
#include &lt;fenv.h&gt;

int main(void)
{
    float from1 = 0, to1 = nextafterf(from1, 1);
    printf(&quot;The next representable float after %.2f is %.20g (%a)\n&quot;, from1, to1, to1);

    float from2 = 1, to2 = nextafterf(from2, 2);
    printf(&quot;The next representable float after %.2f is %.20f (%a)\n&quot;, from2, to2, to2);

    double from3 = nextafter(0.1, 0), to3 = 0.1;
    printf(&quot;The number 0.1 lies between two valid doubles:\n&quot;
           &quot;    %.56f (%a)\nand %.55f  (%a)\n&quot;, from3, from3, to3, to3);

    // difference between nextafter and nexttoward:
    long double dir = nextafterl(from1, 1); // first subnormal long double
    float x = nextafterf(from1, dir); // first converts dir to float, giving 0
    printf(&quot;Using nextafter, next float after %.2f (%a) is %.20g (%a)\n&quot;,
           from1, from1, x, x);
    x = nexttowardf(from1, dir);
    printf(&quot;Using nexttoward, next float after %.2f (%a) is %.20g (%a)\n&quot;,
           from1, from1, x, x);

    // special values
    {
        #pragma STDC FENV_ACCESS ON
        feclearexcept(FE_ALL_EXCEPT);
        double from4 = DBL_MAX, to4 = nextafter(from4, INFINITY);
        printf(&quot;The next representable double after %.2g (%a) is %.23f (%a)\n&quot;,
               from4, from4, to4, to4);
        if(fetestexcept(FE_OVERFLOW)) puts(&quot;   raised FE_OVERFLOW&quot;);
        if(fetestexcept(FE_INEXACT)) puts(&quot;   raised FE_INEXACT&quot;);
    } // end FENV_ACCESS block

    float from5 = 0.0, to5 = nextafter(from5, -0.0);
    printf(&quot;nextafter(+0.0, -0.0) gives %.2g (%a)\n&quot;, to5, to5);
}
 | output=
The next representable float after 0.00 is 1.4012984643248170709e-45 (0x1p-149)
The next representable float after 1.00 is 1.00000011920928955078 (0x1.000002p+0)
The number 0.1 lies between two valid doubles:
    0.09999999999999999167332731531132594682276248931884765625 (0x1.9999999999999p-4)
and 0.1000000000000000055511151231257827021181583404541015625  (0x1.999999999999ap-4)
Using nextafter, next float after 0.00 (0x0p+0) is 0 (0x0p+0)
Using nexttoward, next float after 0.00 (0x0p+0) is 1.4012984643248170709e-45 (0x1p-149)
The next representable double after 1.8e+308 (0x1.fffffffffffffp+1023) is inf (inf)
   raised FE_OVERFLOW
   raised FE_INEXACT
nextafter(+0.0, -0.0) gives -0 (-0x0p+0)
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.11.3 | title=The nextafter functions | p=256}}
{{ref std | section=7.12.11.4 | title=The nexttoward functions | p=257}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.8.3  | title=The nextafter functions | p=529}}
{{ref std | section=F.10.8.4  | title=The nexttoward functions | p=529}}
{{ref std c99}}
{{ref std | section=7.12.11.3 | title=The nextafter functions | p=237}}
{{ref std | section=7.12.11.4 | title=The nexttoward functions | p=238}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.8.3   | title=The nextafter functions | p=466}}
{{ref std | section=F.9.8.4   | title=The nexttoward functions | p=466}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/math/nextafter}}
{{dsc end}}

[[ar:c/numeric/math/nextafter]]
[[cs:c/numeric/math/nextafter]]
[[de:c/numeric/math/nextafter]]
[[es:c/numeric/math/nextafter]]
[[fr:c/numeric/math/nextafter]]
[[it:c/numeric/math/nextafter]]
[[ja:c/numeric/math/nextafter]]
[[ko:c/numeric/math/nextafter]]
[[pl:c/numeric/math/nextafter]]
[[pt:c/numeric/math/nextafter]]
[[ru:c/numeric/math/nextafter]]
[[tr:c/numeric/math/nextafter]]
[[zh:c/numeric/math/nextafter]]</text>
      <sha1>6pmn1ciwwpz5ftxkdg6pidzq7uimu4b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/nexttoward</title>
    <ns>0</ns>
    <id>6513</id>
    <redirect title="c/numeric/math/nextafter" />
    <revision>
      <id>25685</id>
      <timestamp>2012-04-23T21:02:03Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/nextafter]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[c/numeric/math/nextafter]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/pow</title>
    <ns>0</ns>
    <id>6287</id>
    <revision>
      <id>78890</id>
      <parentid>77332</parentid>
      <timestamp>2015-06-11T11:49:06Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="6563">{{c/title|pow, powf, powl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl |num=1| since=c99 |
float powf( float base, float exponent );
}}
{{dcl |num=2|
double pow( double base, double exponent );
}}
{{dcl |num=3| since=c99 |
long double powl( long double base, long double exponent );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define pow( base, exponent )
}}
{{dcl end}}

@1-3@ Computes the value of {{tt|base}} raised to the power {{tt|exponent}}.
@4@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|powl}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|pow}} is called. Otherwise, {{tt|powf}} is called. If at least one argument is complex or imaginary, then the macro invokes the corresponding complex function ({{c|cpowf}}, {{c|cpow}}, {{c|cpowl}}).

===Parameters===
{{par begin}}
{{par | base | base as floating point value}}
{{par | exponent | exponent as floating point value}}
{{par end}}

===Return value===
If no errors occur, {{tt|base}} raised to the power of {{tt|exponent}} ({{math|base{{su|p=exponent}}}}) is returned. 

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a pole error or a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If {{tt|base}} is finite and negative and {{tt|exponent}} is finite and non-integer, a domain error occurs and a range error may occur.

If {{tt|base}} is zero and {{tt|exponent}} is zero, a domain error may occur.

If {{tt|base}} is zero and {{tt|exponent}} is negative, a domain error or a pole error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* {{c|pow(+0, exponent)}}, where {{tt|exponent}} is a negative odd integer, returns {{tt|+∞}} and raises {{lc|FE_DIVBYZERO}}
* {{c|pow(-0, exponent)}}, where {{tt|exponent}} is a negative odd integer, returns {{tt|-∞}} and raises {{lc|FE_DIVBYZERO}}
* {{c|pow(±0, exponent)}}, where {{tt|exponent}} is negative, finite, and is an even integer or a non-integer, returns +∞ and raises {{lc|FE_DIVBYZERO}}
* {{c|pow(±0, -∞)}} returns +∞ and may raise {{lc|FE_DIVBYZERO}}
* {{c|pow(+0, exponent)}}, where {{tt|exponent}} is a positive odd integer, returns +0
* {{c|pow(-0, exponent)}}, where {{tt|exponent}} is a positive odd integer, returns -0
* {{c|pow(±0, exponent)}}, where {{tt|exponent}} is positive non-integer or a positive even integer, returns +0
* {{c|pow(-1, ±∞)}} returns {{tt|1}}
* {{c|pow(+1, exponent)}} returns {{tt|1}} for any {{tt|exponent}}, even when {{tt|exponent}} is {{tt|NaN}}
* {{c|pow(base, ±0)}} returns {{tt|1}} for any {{tt|base}}, even when {{tt|base}} is {{tt|NaN}}
* {{c|pow(base, exponent)}} returns {{tt|NaN}} and raises {{lc|FE_INVALID}} if {{tt|base}} is finite and negative and {{tt|exponent}} is finite and non-integer.
* {{c|pow(base, -∞)}} returns +∞ for any {{tt|{{!}}base{{!}}&lt;1}}
* {{c|pow(base, -∞)}} returns +0 for any {{tt|{{!}}base{{!}}&gt;1}}
* {{c|pow(base, +∞)}} returns +0 for any {{tt|{{!}}base{{!}}&lt;1}}
* {{c|pow(base, +∞)}} returns +∞ for any {{tt|{{!}}base{{!}}&gt;1}}
* {{c|pow(-∞, exponent)}} returns -0 if {{tt|exponent}} is a negative odd integer
* {{c|pow(-∞, exponent)}} returns +0 if {{tt|exponent}} is a negative non-integer or even integer
* {{c|pow(-∞, exponent)}} returns -∞ if {{tt|exponent}} is a positive odd integer
* {{c|pow(-∞, exponent)}} returns +∞ if {{tt|exponent}} is a positive non-integer or even integer
* {{c|pow(+∞, exponent)}} returns +0 for any negative {{tt|exponent}}
* {{c|pow(+∞, exponent)}} returns +∞ for any positive {{tt|exponent}}
* except where specified above, if any argument is NaN, NaN is returned

===Notes===
Although {{tt|pow}} cannot be used to obtain a root of a negative number, {{lc|cbrt}} is provided for the common case where {{tt|exponent}} is 1/3.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    // typical usage
    printf(&quot;pow(2, 10) = %f\n&quot;, pow(2,10));
    printf(&quot;pow(2, 0.5) = %f\n&quot;, pow(2,0.5));
    printf(&quot;pow(-2, -3) = %f\n&quot;, pow(-2,-3));
    // special values
    printf(&quot;pow(-1, NAN) = %f\n&quot;, pow(-1,NAN));
    printf(&quot;pow(+1, NAN) = %f\n&quot;, pow(+1,NAN));
    printf(&quot;pow(INFINITY, 2) = %f\n&quot;, pow(INFINITY, 2));
    printf(&quot;pow(INFINITY, -1) = %f\n&quot;, pow(INFINITY, -1));
    // error handling 
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;pow(-1, 1/3) = %f\n&quot;, pow(-1, 1.0/3));
    if(errno == EDOM)         perror(&quot;    errno == EDOM&quot;);
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);

    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;pow(-0, -3) = %f\n&quot;, pow(-0.0, -3));
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
}
 | p=true
 | output=
pow(2, 10) = 1024.000000
pow(2, 0.5) = 1.414214
pow(-2, -3) = -0.125000
pow(-1, NAN) = nan
pow(+1, NAN) = 1.000000
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0.000000
pow(-1, 1/3) = -nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
pow(-0, -3) = -inf
    FE_DIVBYZERO raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.7.4 | title=The pow functions | p=248-249}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.4.4 | title=The pow functions | p=524-525}}
{{ref std c99}}
{{ref std | section=7.12.7.4 | title=The pow functions | p=229}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.4.4  | title=The pow functions| p=461}}
{{ref std c89}}
{{ref std | section=4.5.5.1  | title=The pow function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc sqrt}}
{{dsc inc | c/numeric/math/dsc cbrt}}
{{dsc inc | c/numeric/math/dsc hypot}}
{{dsc inc | c/numeric/complex/dsc cpow}}
{{dsc see cpp | cpp/numeric/math/pow}}
{{dsc end}}

[[ar:c/numeric/math/pow]]
[[cs:c/numeric/math/pow]]
[[de:c/numeric/math/pow]]
[[es:c/numeric/math/pow]]
[[fr:c/numeric/math/pow]]
[[it:c/numeric/math/pow]]
[[ja:c/numeric/math/pow]]
[[ko:c/numeric/math/pow]]
[[pl:c/numeric/math/pow]]
[[pt:c/numeric/math/pow]]
[[ru:c/numeric/math/pow]]
[[tr:c/numeric/math/pow]]
[[zh:c/numeric/math/pow]]</text>
      <sha1>fgwxy9rqs8r2nnwlsdvaxx5a9210p8d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/remainder</title>
    <ns>0</ns>
    <id>6270</id>
    <revision>
      <id>77354</id>
      <parentid>73321</parentid>
      <timestamp>2015-03-23T16:40:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="5011">{{c/title|remainder|remainderf|remainderl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       remainderf( float x, float y );
}}
{{dcl | since=c99 |num=2|
double      remainder( double x, double y );
}}
{{dcl | since=c99 |num=3|
long double remainderl( long double x, long double y );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define remainder( x, y )
}}
{{dcl end}}

@1-3@ Computes the IEEE remainder of the floating point division operation {{c|x/y}}.
@4@ Type-generic macro: If any argument has type {{c|long double}}, {{tt|remainderl}} is called. Otherwise, if any argument has integer type or has type {{c|double}}, {{tt|remainder}} is called. Otherwise, {{tt|remainderf}} is called.

The IEEE floating-point remainder of the division operation {{c|x/y}} calculated by this function is exactly the value {{c|x - n*y}}, where the value {{tt|n}} is the integral value nearest the exact value {{c|x/y}}. When {{math|{{!}}n-x/y{{!}} {{=}} ½}}, the value {{tt|n}} is chosen to be even.

In contrast to {{lc|fmod()}}, the returned value is not guaranteed to have the same sign as {{tt|x}}.

If the returned value is {{tt|0}}, it will have the same sign as {{tt|x}}.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par end}}

===Return value===
If successful, returns the IEEE floating-point remainder of the division {{c|x/y}} as defined above.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result is returned.

If {{tt|y}} is zero, but the domain error does not occur, zero is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error may occur if {{tt|y}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* {{lc|FE_INEXACT}} is never raised, the result is always exact.
* If {{tt|x}} is ±∞ and {{tt|y}} is not NaN, NaN is returned and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±0 and {{tt|x}} is not NaN, NaN is returned  and {{lc|FE_INVALID}} is raised
* If either argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/remainder.html POSIX requires] that a domain error occurs if {{tt|x}} is infinite or {{tt|y}} is zero.

{{lc|fmod}}, but not {{tt|remainder}} is useful for doing silent wrapping of floating-point types to unsigned integer types: {{c|1=(0.0 &lt;= (y = fmod(rint(x), 65536.0)) ? y : 65536.0 + y)}} is in the range {{tt|[-0.0 .. 65535.0]}}, which corresponds to {{c|unsigned short}}, but {{c|remainder(rint(x), 65536.0}} is in the range {{tt|[-32767.0, +32768.0]}}, which is outside of the range of {{c|signed short}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;remainder(+5.1, +3.0) = %.1f\n&quot;, remainder(5.1,3));
    printf(&quot;remainder(-5.1, +3.0) = %.1f\n&quot;, remainder(-5.1,3));
    printf(&quot;remainder(+5.1, -3.0) = %.1f\n&quot;, remainder(5.1,-3));
    printf(&quot;remainder(-5.1, -3.0) = %.1f\n&quot;, remainder(-5.1,-3));

    // special values
    printf(&quot;remainder(-0.0, 1.0) = %.1f\n&quot;, remainder(-0.0, 1));
    printf(&quot;remainder(+5.1, Inf) = %.1f\n&quot;, remainder(5.1, INFINITY));

    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;remainder(+5.1, 0) = %.1f\n&quot;, remainder(5.1, 0));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | output=
remainder(+5.1, +3.0) = -0.9
remainder(-5.1, +3.0) = 0.9
remainder(+5.1, -3.0) = -0.9
remainder(-5.1, -3.0) = 0.9
remainder(+0.0, 1.0) = 0.0
remainder(-0.0, 1.0) = -0.0
remainder(+5.1, Inf) = 5.1
remainder(+5.1, 0) = -nan
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.10.2 | title=The remainder functions | p=254-255}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.7.2  | title=The remainder functions | p=529}}
{{ref std c99}}
{{ref std | section=7.12.10.2 | title=The remainder functions | p=235}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.7.2   | title=The remainder functions | p=465}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc div}}
{{dsc inc | c/numeric/math/dsc fmod}}
{{dsc inc | c/numeric/math/dsc remquo}}
{{dsc see cpp | cpp/numeric/math/remainder}}
{{dsc end}}

[[ar:c/numeric/math/remainder]]
[[cs:c/numeric/math/remainder]]
[[de:c/numeric/math/remainder]]
[[es:c/numeric/math/remainder]]
[[fr:c/numeric/math/remainder]]
[[it:c/numeric/math/remainder]]
[[ja:c/numeric/math/remainder]]
[[ko:c/numeric/math/remainder]]
[[pl:c/numeric/math/remainder]]
[[pt:c/numeric/math/remainder]]
[[ru:c/numeric/math/remainder]]
[[tr:c/numeric/math/remainder]]
[[zh:c/numeric/math/remainder]]</text>
      <sha1>68n2fhu2ombnmdqjszpythd21ksmqgd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/remquo</title>
    <ns>0</ns>
    <id>6271</id>
    <revision>
      <id>90000</id>
      <parentid>82900</parentid>
      <timestamp>2017-02-01T12:50:51Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>C version</comment>
      <text xml:space="preserve" bytes="6328">{{c/title|remquo|remquof|remquol}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       remquof( float x, float y, int *quo );
}}
{{dcl | since=c99 |num=2|
double      remquo( double x, double y, int *quo );
}}
{{dcl | since=c99 |num=3|
long double remquol( long double x, long double y, int *quo );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define remquo( x, y, quo )
}}
{{dcl end}}

@1-3@ Computes the floating-point remainder of the division operation {{c|x/y}} as the {{lc|remainder()}} function does.  Additionally, the sign and at least the three of the last bits of {{c|x/y}} will be stored in {{c|quo}}, sufficient to determine the octant of the result within a period.
@4@ Type-generic macro: If any non-pointer argument has type {{c|long double}}, {{tt|remquol}} is called. Otherwise, if any non-pointer argument has integer type or has type {{c|double}}, {{tt|remquo}} is called. Otherwise, {{tt|remquof}} is called.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par | quo | pointer to an integer value to store the sign and some bits of {{c|x/y}} }}
{{par end}}

===Return value===
If successful, returns the floating-point remainder of the division {{c|x/y}} as defined in {{lc|remainder}}, and stores, in {{c|*quo}}, the sign and at least three of the least significant bits of {{c|x/y}} (formally, stores a value whose sign is the sign of {{c|x/y}} and whose magnitude is congruent {{math|modulo 2{{su|p=n}}}} to the magnitude of the integral quotient of {{c|x/y}}, where {{math|n}} is an implementation-defined integer greater than or equal to {{math|3}}).

If {{tt|y}} is zero, the value stored in {{c|*quo}} is unspecified.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result is returned if subnormals are supported.

If {{tt|y}} is zero, but the domain error does not occur, zero is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error may occur if {{tt|y}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[c/numeric/fenv/FE_round|rounding mode]] has no effect.
* {{lc|FE_INEXACT}} is never raised
* If {{tt|x}} is ±∞ and {{tt|y}} is not NaN, NaN is returned and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±0 and {{tt|x}} is not NaN, NaN is returned  and {{lc|FE_INVALID}} is raised
* If either {{tt|x}} or {{tt|y}} is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/remquo.html POSIX requires] that a domain error occurs if {{tt|x}} is infinite or {{tt|y}} is zero.

This function is useful when implementing periodic functions with the period exactly representable as a floating-point value: when calculating {{math|sin(πx)}} for a very large {{tt|x}}, calling {{lc|sin}} directly may result in a large error, but if the function argument is first reduced with {{tt|remquo}}, he low-order bits of the quotient may be used to determine the sign and the octant of the result within the period, while the remainder may be used to calculate the value with high precision. 

On some platforms this operation is supported by hardware (and, for example, on Intel CPU, {{tt|FPREM1}} leaves exactly 3 bits of precision in the quotient)

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
double cos_pi_x_naive(double x)
{
    double pi = acos(-1);
    return cos(pi * x);
}
// the period is 2, values are (0;0.5) positive, (0.5;1.5) negative, (1.5,2) positive
double cos_pi_x_smart(double x)
{
    int quadrant;
    double rem = remquo(x, 1, &amp;quadrant);
    quadrant = (unsigned)quadrant % 4; // keep 2 bits to determine quadrant

    double pi = acos(-1);
    switch(quadrant) {
        case 0: return cos(pi * rem);
        case 1: return -cos(pi * rem);
        case 2: return -cos(pi * rem);
        case 3: return cos(pi * rem);
    };
}
int main(void)
{
    printf(&quot;cos(pi * 0.25) = %f\n&quot;, cos_pi_x_naive(0.25));
    printf(&quot;cos(pi * 1.25) = %f\n&quot;, cos_pi_x_naive(1.25));
    printf(&quot;cos(pi * 1000000000000.25) = %f\n&quot;, cos_pi_x_naive(1000000000000.25));
    printf(&quot;cos(pi * 1000000000001.25) = %f\n&quot;, cos_pi_x_naive(1000000000001.25));
    printf(&quot;cos(pi * 1000000000000.25) = %f\n&quot;, cos_pi_x_smart(1000000000000.25));
    printf(&quot;cos(pi * 1000000000001.25) = %f\n&quot;, cos_pi_x_smart(1000000000001.25));
    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    int quo;
    printf(&quot;remquo(+Inf, 1) = %.1f\n&quot;, remquo(INFINITY, 1, &amp;quo));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
|p=true
|output=
cos(pi * 0.25) = 0.707107
cos(pi * 1.25) = -0.707107
cos(pi * 1000000000000.25) = 0.707123
cos(pi * 1000000000001.25) = -0.707117
cos(pi * 1000000000000.25) = 0.707107
cos(pi * 1000000000001.25) = -0.707107 &lt;!-- note: this is exact output from Intel C on Linux, Oracle and GNU C on sparc, and IBM and GNU C compilers on a power platform. Do not replace with the incorrect output obtained from GNU C on Linux --&gt;
remquo(+Inf, 1) = -nan
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.10.3 | title=The remquo functions | p=255}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.7.3  | title=The remquo functions | p=529}}
{{ref std c99}}
{{ref std | section=7.12.10.3 | title=The remquo functions | p=236}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.7.3   | title=The remquo functions | p=465}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc div}}
{{dsc inc | c/numeric/math/dsc fmod}}
{{dsc inc | c/numeric/math/dsc remainder}}
{{dsc see cpp | cpp/numeric/math/remquo}}
{{dsc end}}

[[ar:c/numeric/math/remquo]]
[[cs:c/numeric/math/remquo]]
[[de:c/numeric/math/remquo]]
[[es:c/numeric/math/remquo]]
[[fr:c/numeric/math/remquo]]
[[it:c/numeric/math/remquo]]
[[ja:c/numeric/math/remquo]]
[[ko:c/numeric/math/remquo]]
[[pl:c/numeric/math/remquo]]
[[pt:c/numeric/math/remquo]]
[[ru:c/numeric/math/remquo]]
[[tr:c/numeric/math/remquo]]
[[zh:c/numeric/math/remquo]]</text>
      <sha1>q99tj6qk678i2rln7b94tpep2vf3on5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/rint</title>
    <ns>0</ns>
    <id>6310</id>
    <revision>
      <id>79047</id>
      <parentid>77350</parentid>
      <timestamp>2015-06-22T15:55:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>comment about the halway direction in the example (some readers thought it was undefined)</comment>
      <text xml:space="preserve" bytes="7511">{{c/title|rint, rintf, rintl | lrint, lrintf, lrintl | llrint, llrintf, llrintl }}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float rintf( float arg );
}}
{{dcl | since=c99 |num=2|
double rint( double arg );
}}
{{dcl | since=c99 |num=3|
long double rintl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define rint( arg )
}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=5|
long lrintf( float arg );
}}
{{dcl | since=c99 |num=6|
long lrint( double arg );
}}
{{dcl | since=c99 |num=7|
long lrintl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=8| since=c99 |
#define lrint( arg )
}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=9|
long long llrintf( float arg );
}}
{{dcl | since=c99 |num=10|
long long llrint( double arg );
}}
{{dcl | since=c99 |num=11|
long long llrintl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |since=c99 | num=12|
#define llrint( arg )
}}
{{dcl end}}

@1-3@ Rounds the floating-point argument {{tt|arg}} to an integer value in floating-point format, using the current rounding mode.
@5-7, 9-11@ Rounds the floating-point argument {{tt|arg}} to an integer value in integer format, using the current rounding mode.
@4,8,12@ Type-generic macros: If {{tt|arg}} has type {{c|long double}}, {{tt|rintl}}, {{tt|lrintl}}, {{tt|llrintl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|rint}}, {{tt|lrint}}, {{tt|llrint}} is called. Otherwise, {{tt|rintf}}, {{tt|lrintf}}, {{tt|llrintf}} is called, respectively.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the nearest integer value to {{tt|arg}}, according to the [[cpp/numeric/fenv/FE_round|current rounding mode]], is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the result of {{tt|lrint}} or {{tt|llrint}} is outside the range representable by the return type, a domain error or a range error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
: For the {{tt|rint}} function:
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned
: For {{tt|lrint}} and {{tt|llrint}} functions:
* If {{tt|arg}} is ±∞, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If the result of the rounding is outside the range of the return type, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If {{tt|arg}} is NaN, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/lrint.html POSIX specifies] that all cases where {{tt|lrint}} or {{tt|llrint}} raise {{lc|FE_INEXACT}} are domain errors.

As specified in [[c/numeric/math/math_errhandling|math_errhandling]], {{lc|FE_INEXACT}} may be (but isn't required to be on non-IEEE floating-point platforms) raised by {{tt|rint}} when rounding a non-integer finite value.

The only difference between {{tt|rint}} and {{lc|nearbyint}} is that {{lc|nearbyint}} never raises {{lc|FE_INEXACT}}.

The largest representable floating-point values are exact integers in all standard floating-point formats, so {{tt|rint}} never overflows on its own; however the result may overflow any integer type (including {{lc|intmax_t}}), when stored in an integer variable.

If the current rounding mode is...
* {{lc|FE_DOWNWARD}}, then {{tt|rint}} is equivalent to {{lc|floor}}.
* {{lc|FE_UPWARD}}, then {{tt|rint}} is equivalent to {{lc|ceil}}.
* {{lc|FE_TOWARDZERO}}, then {{tt|rint}} is equivalent to {{lc|trunc}}
* {{lc|FE_TONEAREST}}, then {{tt|rint}} differs from {{lc|round}} in that halfway cases are rounded to even rather than away from zero.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;
#include &lt;limits.h&gt;

int main(void)
{
#pragma STDC FENV_ACCESS ON
    fesetround(FE_TONEAREST);
    printf(&quot;rounding to nearest (halfway cases to even):\n&quot;
           &quot;rint(+2.3) = %+.1f  &quot;, rint(2.3));
    printf(&quot;rint(+2.5) = %+.1f  &quot;, rint(2.5));
    printf(&quot;rint(+3.5) = %+.1f\n&quot;, rint(3.5));
    printf(&quot;rint(-2.3) = %+.1f  &quot;, rint(-2.3));
    printf(&quot;rint(-2.5) = %+.1f  &quot;, rint(-2.5));
    printf(&quot;rint(-3.5) = %+.1f\n&quot;, rint(-3.5));

    fesetround(FE_DOWNWARD);
    printf(&quot;rounding down: \nrint(+2.3) = %+.1f  &quot;, rint(2.3));
    printf(&quot;rint(+2.5) = %+.1f  &quot;, rint(2.5));
    printf(&quot;rint(+3.5) = %+.1f\n&quot;, rint(3.5));
    printf(&quot;rint(-2.3) = %+.1f  &quot;, rint(-2.3));
    printf(&quot;rint(-2.5) = %+.1f  &quot;, rint(-2.5));
    printf(&quot;rint(-3.5) = %+.1f\n&quot;, rint(-3.5));
    printf(&quot;rounding down with lrint: \nlrint(+2.3) = %ld  &quot;, lrint(2.3));
    printf(&quot;lrint(+2.5) = %ld  &quot;, lrint(2.5));
    printf(&quot;lrint(+3.5) = %ld\n&quot;, lrint(3.5));
    printf(&quot;lrint(-2.3) = %ld  &quot;, lrint(-2.3));
    printf(&quot;lrint(-2.5) = %ld  &quot;, lrint(-2.5));
    printf(&quot;lrint(-3.5) = %ld\n&quot;, lrint(-3.5));

    printf(&quot;lrint(-0.0) = %ld\n&quot;, lrint(-0.0));
    printf(&quot;lrint(-Inf) = %ld\n&quot;, lrint(-INFINITY)); // FE_INVALID raised

    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;rint(1.1) = %.1f\n&quot;, rint(1.1));
    if(fetestexcept(FE_INEXACT)) puts(&quot;    FE_INEXACT was raised&quot;);

    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;lrint(LONG_MIN-2048.0) = %ld\n&quot;, lrint(LONG_MIN-2048.0));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID was raised&quot;);
}
 | p=true
 | output=
rounding to nearest (halfway cases to even):
rint(+2.3) = +2.0  rint(+2.5) = +2.0  rint(+3.5) = +4.0
rint(-2.3) = -2.0  rint(-2.5) = -2.0  rint(-3.5) = -4.0
rounding down: 
rint(+2.3) = +2.0  rint(+2.5) = +2.0  rint(+3.5) = +3.0
rint(-2.3) = -3.0  rint(-2.5) = -3.0  rint(-3.5) = -4.0
rounding down with lrint: 
lrint(+2.3) = 2  lrint(+2.5) = 2  lrint(+3.5) = 3
lrint(-2.3) = -3  lrint(-2.5) = -3  lrint(-3.5) = -4
lrint(-0.0) = 0
lrint(-Inf) = -9223372036854775808
rint(1.1) = 1.0
    FE_INEXACT was raised
lrint(LONG_MIN-2048.0) = -9223372036854775808
    FE_INVALID was raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.9.4 | title=The rint functions | p=252}}
{{ref std | section=7.12.9.5 | title=The lrint and llrint functions | p=252}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.6.4 | title=The rint functions | p=527}}
{{ref std | section=F.10.6.5 | title=The lrint and llrint functions | p=527}}
{{ref std c99}}
{{ref std | section=7.12.9.4 | title=The rint functions | p=232-233}}
{{ref std | section=7.12.9.5 | title=The lrint and llrint functions | p=233}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.6.4  | title=The rint functions| p=463}}
{{ref std | section=F.9.6.5  | title=The lrint and llrint functions | p=463}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc trunc}}
{{dsc inc | c/numeric/math/dsc nearbyint}}
{{dsc inc | c/numeric/fenv/dsc feround}}
{{dsc see cpp | cpp/numeric/math/rint}}
{{dsc end}}

[[ar:c/numeric/math/rint]]
[[cs:c/numeric/math/rint]]
[[de:c/numeric/math/rint]]
[[es:c/numeric/math/rint]]
[[fr:c/numeric/math/rint]]
[[it:c/numeric/math/rint]]
[[ja:c/numeric/math/rint]]
[[ko:c/numeric/math/rint]]
[[pl:c/numeric/math/rint]]
[[pt:c/numeric/math/rint]]
[[ru:c/numeric/math/rint]]
[[tr:c/numeric/math/rint]]
[[zh:c/numeric/math/rint]]</text>
      <sha1>d68gx7yshtqlbgm6zoruwpm6eicqpm3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/round</title>
    <ns>0</ns>
    <id>6306</id>
    <revision>
      <id>77351</id>
      <parentid>73376</parentid>
      <timestamp>2015-03-23T15:39:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="7203">{{c/title|round, roundf, roundl| lround, lroundf, lroundl | llround, llroundf, llroundl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       roundf( float arg );
}}
{{dcl | since=c99 |num=2|
double      round( double arg );
}}
{{dcl | since=c99 |num=3|
long double roundl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define round( arg )
}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=5|
long      lroundf( float arg );
}}
{{dcl | since=c99 | num=6|
long      lround( double arg );
}}
{{dcl | since=c99 | num=7|
long      lroundl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=8| since=c99 |
#define lround( arg )
}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=9|
long long llroundf( float arg );
}}
{{dcl | since=c99 | num=10|
long long llround( double arg );
}}
{{dcl | since=c99 | num=11|
long long llroundl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |since=c99 | num=12|
#define llround( arg )
}}
{{dcl end}}

@1-3@ Computes the nearest integer value to {{tt|arg}} (in floating-point format), rounding halfway cases away from zero, regardless of the current rounding mode.
@5-7, 9-11@ Computes the nearest integer value to {{tt|arg}} (in integer format), rounding halfway cases away from zero, regardless of the current rounding mode.
@4,8,12@ Type-generic macros: If {{tt|arg}} has type {{c|long double}}, {{tt|roundl}}, {{tt|lroundl}}, {{tt|llroundl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|round}}, {{tt|lround}}, {{tt|llround}} is called. Otherwise, {{tt|roundf}}, {{tt|lroundf}}, {{tt|llroundf}} is called, respectively.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the nearest integer value to {{tt|arg}}, rounding halfway cases away from zero, is returned.

{{plot | left=Return value | bottom=Argument | math-round_away_zero.svg}}

If a domain error occurs, an implementation-defined value is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the result of {{tt|lround}} or {{tt|llround}} is outside the range representable by the return type, a domain error or a range error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
: For the {{tt|round}}, {{tt|roundf}}, and {{tt|roundl}} function:
* The current [[c/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned
: For {{tt|lround}} and {{tt|llround}} families of functions:
* {{lc|FE_INEXACT}} is never raised
* The current [[c/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If the result of the rounding is outside the range of the return type, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If {{tt|arg}} is NaN, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised by {{tt|round}} when rounding a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so {{tt|round}} never overflows on its own; however the result may overflow any integer type (including {{lc|intmax_t}}), when stored in an integer variable.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/lround.html POSIX specifies] that all cases where {{tt|lround}} or {{tt|llround}} raise {{lc|FE_INEXACT}} are domain errors.

The {{c|double}} version of {{tt|round}} behaves as if implemented as follows:
{{source|1=
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
double round(double x)
{
    fenv_t save_env;
    feholdexcept(&amp;save_env);
    double result = rint(x);
    if (fetestexcept(FE_INEXACT)) {
        fesetround(FE_TOWARDZERO);
        result = rint(copysign(0.5 + fabs(x), x));
    }
    feupdateenv(&amp;save_env);
    return result;
}
}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;fenv.h&gt;
#include &lt;limits.h&gt;

#pragma STDC FENV_ACCESS ON

int main(void)
{
    // round
    printf(&quot;round(+2.3) = %+.1f  &quot;, round(2.3));
    printf(&quot;round(+2.5) = %+.1f  &quot;, round(2.5));
    printf(&quot;round(+2.7) = %+.1f\n&quot;, round(2.7));
    printf(&quot;round(-2.3) = %+.1f  &quot;, round(-2.3));
    printf(&quot;round(-2.5) = %+.1f  &quot;, round(-2.5));
    printf(&quot;round(-2.7) = %+.1f\n&quot;, round(-2.7));

    printf(&quot;round(-0.0) = %+.1f\n&quot;, round(-0.0));
    printf(&quot;round(-Inf) = %+f\n&quot;,   round(-INFINITY));

    // lround
    printf(&quot;lround(+2.3) = %ld  &quot;, lround(2.3));
    printf(&quot;lround(+2.5) = %ld  &quot;, lround(2.5));
    printf(&quot;lround(+2.7) = %ld\n&quot;, lround(2.7));
    printf(&quot;lround(-2.3) = %ld  &quot;, lround(-2.3));
    printf(&quot;lround(-2.5) = %ld  &quot;, lround(-2.5));
    printf(&quot;lround(-2.7) = %ld\n&quot;, lround(-2.7));

    printf(&quot;lround(-0.0) = %ld\n&quot;, lround(-0.0));
    printf(&quot;lround(-Inf) = %ld\n&quot;, lround(-INFINITY)); // FE_INVALID raised

    // error handling
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;lround(LONG_MAX+1.5) = %ld\n&quot;, lround(LONG_MAX+1.5));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID was raised&quot;);
}
 | p=true
 | output=
round(+2.3) = +2.0  round(+2.5) = +3.0  round(+2.7) = +3.0
round(-2.3) = -2.0  round(-2.5) = -3.0  round(-2.7) = -3.0
round(-0.0) = -0.0
round(-Inf) = -inf
lround(+2.3) = 2  lround(+2.5) = 3  lround(+2.7) = 3
lround(-2.3) = -2  lround(-2.5) = -3  lround(-2.7) = -3
lround(-0.0) = 0
lround(-Inf) = -9223372036854775808
lround(LONG_MAX+1.5) = -9223372036854775808
    FE_INVALID was raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.9.6 | title=The round functions | p=253}}
{{ref std | section=7.12.9.7 | title=The lround and llround functions | p=253}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.6.6 | title=The round functions | p=527}}
{{ref std | section=F.10.6.7 | title=The lround and llround functions | p=528}}
{{ref std c99}}
{{ref std | section=7.12.9.6 | title=The round functions | p=233}}
{{ref std | section=7.12.9.7 | title=The lround and llround functions | p=234}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.6.6  | title=The round functions| p=464}}
{{ref std | section=F.9.6.7  | title=The lround and llround functions | p=464}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc floor}}
{{dsc inc | c/numeric/math/dsc ceil}}
{{dsc inc | c/numeric/math/dsc trunc}}
{{dsc see cpp | cpp/numeric/math/round}}
{{dsc end}}

[[ar:c/numeric/math/round]]
[[cs:c/numeric/math/round]]
[[de:c/numeric/math/round]]
[[es:c/numeric/math/round]]
[[fr:c/numeric/math/round]]
[[it:c/numeric/math/round]]
[[ja:c/numeric/math/round]]
[[ko:c/numeric/math/round]]
[[pl:c/numeric/math/round]]
[[pt:c/numeric/math/round]]
[[ru:c/numeric/math/round]]
[[tr:c/numeric/math/round]]
[[zh:c/numeric/math/round]]</text>
      <sha1>qiromw4cekk59xqzely9mn2a6rku3hd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/scalbln</title>
    <ns>0</ns>
    <id>6512</id>
    <redirect title="c/numeric/math/scalbn" />
    <revision>
      <id>25684</id>
      <timestamp>2012-04-23T21:02:00Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/numeric/math/scalbn]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[c/numeric/math/scalbn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/scalbn</title>
    <ns>0</ns>
    <id>6263</id>
    <revision>
      <id>85955</id>
      <parentid>77329</parentid>
      <timestamp>2016-06-07T00:41:23Z</timestamp>
      <contributor>
        <ip>90.55.127.57</ip>
      </contributor>
      <comment>Wrong title</comment>
      <text xml:space="preserve" bytes="5182">{{c/title| scalbn, scalbnf, scalbnl| scalbln, scalblnf, scalblnl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=1 |
float       scalbnf( float arg, int exp );
}}
{{dcl | since=c99 | num=2 |
double      scalbn( double arg, int exp );
}}
{{dcl | since=c99 | num=3 |
long double scalbnl( long double arg, int exp );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define scalbn( arg, exp )
}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=5 |
float       scalblnf( float arg, long exp );
}}
{{dcl | since=c99 | num=6 |
double      scalbln( double arg, long exp );
}}
{{dcl | since=c99 | num=7 |
long double scalblnl( long double arg, long exp );
}}
{{dcl header | tgmath.h}}
{{dcl |num=8| since=c99 |
#define scalbln( arg, exp )
}}
{{dcl end}}

@1-3,5-7@ Multiplies a floating point value {{tt|arg}} by {{lc|FLT_RADIX}} raised to power {{tt|exp}}.
@4,8@ Type-generic macros: If {{tt|arg}} has type {{c|long double}}, {{tt|scalbnl}} or {{tt|scalblnl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|scalbn}} or {{tt|scalbln}} is called. Otherwise, {{tt|scalbnf}} or {{tt|scalblnf}} is called, respectively.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par | exp | integer value}}
{{par end}}

===Return value===
If no errors occur, {{tt|arg}} multiplied by {{lc|FLT_RADIX}} to the power of {{tt|exp}} ({{math|arg&amp;times;FLT_RADIX{{su|p=exp}}}}) is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* Unless a range error occurs, {{lc|FE_INEXACT}} is never raised (the result is exact)
* Unless a range error occurs, the [[c/numeric/fenv/FE_round|current rounding mode]] is ignored
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|exp}} is 0, then {{tt|arg}} is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned

===Notes===
On binary systems (where {{lc|FLT_RADIX}} is {{tt|2}}), {{tt|scalbn}} is equivalent to {{lc|ldexp}}.

Although {{tt|std::scalbn}} and {{tt|std::scalbln}} are specified to perform the operation efficiently, on many implementations they are less efficient than multiplication or division by a power of two using arithmetic operators.

The {{tt|scalbln}} function is provided because the factor required to scale from the smallest positive floating-point value to the largest finite one may be greater than 32767, the standard-guaranteed {{lc|INT_MAX}}. In particular, for the 80-bit {{tt|long double}}, the factor is 32828.

The GNU implementation does not set {{tt|errno}} regardless of {{tt|math_errhandling}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;scalbn(7, -4) = %f\n&quot;, scalbn(7, -4));
    printf(&quot;scalbn(1, -1074) = %g (minimum positive subnormal double)\n&quot;,
            scalbn(1, -1074));
    printf(&quot;scalbn(nextafter(1,0), 1024) = %g (largest finite double)\n&quot;,
            scalbn(nextafter(1,0), 1024));
    // special values
    printf(&quot;scalbn(-0, 10) = %f\n&quot;, scalbn(-0.0, 10));
    printf(&quot;scalbn(-Inf, -1) = %f\n&quot;, scalbn(-INFINITY, -1));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;scalbn(1, 1024) = %f\n&quot;, scalbn(1, 1024));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
scalbn(7, -4) = 0.437500
scalbn(1, -1074) = 4.94066e-324 (minimum positive subnormal double)
scalbn(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)
scalbn(-0, 10) = -0.000000
scalbn(-Inf, -1) = -inf
scalbn(1, 1024) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.6.13 | title=The scalbn functions | p=247}}
{{ref std | section=7.25      | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.3.13 | title=The scalbn functions | p=523}}
{{ref std c99}}
{{ref std | section=7.12.6.13 | title=The scalbn functions | p=228}}
{{ref std | section=7.22      | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.3.13  | title=The scalbn functions| p=460}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc frexp}}
{{dsc inc | c/numeric/math/dsc ldexp}}
{{dsc see cpp | cpp/numeric/math/scalbn}}
{{dsc end}}

[[ar:c/numeric/math/scalbn]]
[[cs:c/numeric/math/scalbn]]
[[de:c/numeric/math/scalbn]]
[[es:c/numeric/math/scalbn]]
[[fr:c/numeric/math/scalbn]]
[[it:c/numeric/math/scalbn]]
[[ja:c/numeric/math/scalbn]]
[[ko:c/numeric/math/scalbn]]
[[pl:c/numeric/math/scalbn]]
[[pt:c/numeric/math/scalbn]]
[[ru:c/numeric/math/scalbn]]
[[tr:c/numeric/math/scalbn]]
[[zh:c/numeric/math/scalbn]]</text>
      <sha1>oeqo1u06zmawrr1a2uo1sj2mi2nxwjc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/signbit</title>
    <ns>0</ns>
    <id>6253</id>
    <revision>
      <id>77275</id>
      <parentid>73393</parentid>
      <timestamp>2015-03-20T18:20:27Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1640">{{c/title|signbit}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |
#define signbit(arg) /* implementation defined */
}}
{{dcl end}}

Determines if the given floating point number {{tt|arg}} is negative. The macro returns an integral value.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
Nonzero integral value if {{tt|arg}} is negative, {{c|0}} otherwise.

===Notes===
This macro detects the sign bit of zeroes, infinities, and NaNs. Along with {{lc|copysign}}, this macro is one of the only two portable ways to examine the sign of a NaN.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
 
int main(void)
{
    printf(&quot;signbit(+0.0) = %d\n&quot;, signbit(+0.0));
    printf(&quot;signbit(-0.0) = %d\n&quot;, signbit(-0.0));
}
 | p=true
 | output=
signbit(+0.0) = 0
signbit(-0.0) = 128
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.3.6 | title=The signbit macro | p=237}}
{{ref std c99}}
{{ref std | section=7.12.3.6 | title=The signbit macro | p=218}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc fabs}}
{{dsc inc | c/numeric/math/dsc copysign}}
{{dsc see cpp | cpp/numeric/math/signbit}}
{{dsc end}}

[[ar:c/numeric/math/signbit]]
[[cs:c/numeric/math/signbit]]
[[de:c/numeric/math/signbit]]
[[es:c/numeric/math/signbit]]
[[fr:c/numeric/math/signbit]]
[[it:c/numeric/math/signbit]]
[[ja:c/numeric/math/signbit]]
[[ko:c/numeric/math/signbit]]
[[pl:c/numeric/math/signbit]]
[[pt:c/numeric/math/signbit]]
[[ru:c/numeric/math/signbit]]
[[tr:c/numeric/math/signbit]]
[[zh:c/numeric/math/signbit]]</text>
      <sha1>fzhk7wdmfmwi0su1xt3xujwj9mh80st</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/sin</title>
    <ns>0</ns>
    <id>6288</id>
    <revision>
      <id>78879</id>
      <parentid>77292</parentid>
      <timestamp>2015-06-11T11:15:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="4021">{{c/title|sin, sinf, sinl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       sinf( float arg );
}}
{{dcl |num=2 |
double      sin( double arg );
}}
{{dcl |num=3 | since=c99 |
long double sinl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define sin( arg )
}}
{{dcl end}}

@1-3@ Computes the sine of {{tt|arg}} (measured in radians).
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|sinl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|sin}} is called. Otherwise, {{tt|sinf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|csinf}}, {{c|csin}}, {{c|csinl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing an angle in radians}}
{{par end}}

===Return value===
If no errors occur, the sine of {{tt|arg}} ({{math|sin(arg)}}) in the range {{math|[-1 ; +1]}}, is returned.

{{rev begin}}
{{rev|until=c99|
The result may have little or no significance if the magnitude of {{tt|arg}} is large.
}}
{{rev end}}

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, it is returned unmodified
* if the argument is ±∞, NaN is returned and {{lc|FE_INVALID}} is raised
* if the argument is NaN, NaN is returned

===Notes===
The case where the argument is infinite is not specified to be a domain error in C, but it is defined as a [http://pubs.opengroup.org/onlinepubs/9699919799/functions/sin.html domain error in POSIX].

POSIX also specifies that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    double pi = acos(-1);
    // typical usage
    printf(&quot;sin(pi/6) = %f\n&quot;, sin(pi/6));
    printf(&quot;sin(pi/2) = %f\n&quot;, sin(pi/2));
    printf(&quot;sin(-3*pi/4) = %f\n&quot;, sin(-3*pi/4));
    // special values
    printf(&quot;sin(+0) = %f\n&quot;, sin(0.0));
    printf(&quot;sin(-0) = %f\n&quot;, sin(-0.0));
    // error handling 
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;sin(INFINITY) = %f\n&quot;, sin(INFINITY));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
sin(pi/6) = 0.500000
sin(pi/2) = 1.000000
sin(-3*pi/4) = -0.707107
sin(+0) = 0.000000
sin(-0) = -0.000000
sin(INFINITY) = -nan
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.4.6 | title=The sin functions | p=239-240}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.1.6 | title=The sin functions | p=519}}
{{ref std c99}}
{{ref std | section=7.12.4.6 | title=The sin functions | p=220}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.1.6  | title=The sin functions| p=456}}
{{ref std c89}}
{{ref std | section=4.5.2.6  | title=The sin function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc cos}}
{{dsc inc | c/numeric/math/dsc tan}}
{{dsc inc | c/numeric/math/dsc asin}}
{{dsc inc | c/numeric/complex/dsc csin}}
{{dsc see cpp | cpp/numeric/math/sin}}
{{dsc end}}

[[ar:c/numeric/math/sin]]
[[cs:c/numeric/math/sin]]
[[de:c/numeric/math/sin]]
[[es:c/numeric/math/sin]]
[[fr:c/numeric/math/sin]]
[[it:c/numeric/math/sin]]
[[ja:c/numeric/math/sin]]
[[ko:c/numeric/math/sin]]
[[pl:c/numeric/math/sin]]
[[pt:c/numeric/math/sin]]
[[ru:c/numeric/math/sin]]
[[tr:c/numeric/math/sin]]
[[zh:c/numeric/math/sin]]</text>
      <sha1>20u62ayjdnd791gfyqvt0zf103f3zhy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/sinh</title>
    <ns>0</ns>
    <id>6294</id>
    <revision>
      <id>78882</id>
      <parentid>77300</parentid>
      <timestamp>2015-06-11T11:20:31Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3808">{{c/title|sinh, sinhf, sinhl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       sinhf( float arg );
}}
{{dcl | num=2 |
double      sinh( double arg );
}}
{{dcl | num=3 | since=c99 |
long double sinhl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define sinh( arg )
}}
{{dcl end}}

@1-3@ Computes hyperbolic sine of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|sinhl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|sinh}} is called. Otherwise, {{tt|sinhf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|csinhf}}, {{c|csinh}}, {{c|csinhl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing a hyperbolic angle}}
{{par end}}

===Return value===
If no errors occur, the hyperbolic sine of {{tt|arg}} ({{math|sinh(arg)}}, or {{math|{{mfrac|e{{su|p=arg}}-e{{su|p=-arg}}|2}}}}) is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0 or ±∞, it is returned unmodified
* if the argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/sinh.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;sinh(1) = %f\nsinh(-1)=%f\n&quot;, sinh(1), sinh(-1));
    printf(&quot;log(sinh(1) + cosh(1))=%f\n&quot;, log(sinh(1)+cosh(1)));
    // special values
    printf(&quot;sinh(+0) = %f\nsinh(-0)=%f\n&quot;, sinh(0.0), sinh(-0.0));
    // error handling 
    errno=0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;sinh(710.5) = %f\n&quot;, sinh(710.5));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    if(fetestexcept(FE_OVERFLOW)) puts(&quot;    FE_OVERFLOW raised&quot;);
}
 | p=true
 | output=
sinh(1) = 1.175201
sinh(-1)=-1.175201
log(sinh(1) + cosh(1))=1.000000
sinh(+0) = 0.000000
sinh(-0)=-0.000000
sinh(710.5) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.5.5 | title=The sinh functions | p=241-242}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.2.5 | title=The sinh functions | p=520}}
{{ref std c99}}
{{ref std | section=7.12.5.5 | title=The sinh functions | p=222}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.2.5  | title=The sinh functions| p=457}}
{{ref std c89}}
{{ref std | section=4.5.3.2  | title=The sinh function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc cosh}}
{{dsc inc | c/numeric/math/dsc tanh}}
{{dsc inc | c/numeric/math/dsc asinh}}
{{dsc inc | c/numeric/complex/dsc csinh}}
{{dsc see cpp | cpp/numeric/math/sinh}}
{{dsc end}}

[[ar:c/numeric/math/sinh]]
[[cs:c/numeric/math/sinh]]
[[de:c/numeric/math/sinh]]
[[es:c/numeric/math/sinh]]
[[fr:c/numeric/math/sinh]]
[[it:c/numeric/math/sinh]]
[[ja:c/numeric/math/sinh]]
[[ko:c/numeric/math/sinh]]
[[pl:c/numeric/math/sinh]]
[[pt:c/numeric/math/sinh]]
[[ru:c/numeric/math/sinh]]
[[tr:c/numeric/math/sinh]]
[[zh:c/numeric/math/sinh]]</text>
      <sha1>dcawkcad5ikfp9w6uj5b6psm5fq2ciq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/sqrt</title>
    <ns>0</ns>
    <id>6284</id>
    <revision>
      <id>90517</id>
      <parentid>82012</parentid>
      <timestamp>2017-02-28T16:51:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo pointed out by http://stackoverflow.com/a/42066517</comment>
      <text xml:space="preserve" bytes="3992">{{c/title|sqrt, sqrtf, sqrtl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl |num=1| since=c99 |
float       sqrtf( float arg );
}}
{{dcl |num=2|
double      sqrt( double arg );
}}
{{dcl |num=3| since=c99 |
long double sqrtl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define sqrt( arg )
}}
{{dcl end}}

@1-3@ Computes square root of {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|sqrtl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|sqrt}} is called. Otherwise, {{tt|sqrtf}} is called. If {{tt|arg}} is complex or imaginary, then the macro invokes the corresponding complex function ({{c|csqrtf}}, {{c|csqrt}}, {{c|csqrtl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, square root of {{tt|arg}} ({{math|{{mrad|arg}}}}), is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

Domain error occurs if {{tt|arg}} is less than zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is less than -0, {{lc|FE_INVALID}} is raised and NaN is returned.
* If the argument is +∞ or ±0, it is returned, unmodified.
* If the argument is NaN, NaN is returned

===Notes===
{{tt|sqrt}} is required by the IEEE standard to be exact. The only other operations required to be exact are the [[c/language/operator_arithmetic|arithmetic operators]] and the function {{lc|fma}}. After rounding to the return type (using default rounding mode), the result of {{tt|sqrt}} is indistinguishable from the infinitely precise result. In other words, the error is less than 0.5 ulp. Other functions, including {{lc|pow}}, are not so constrained.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON

int main(void)
{
    // normal use
    printf(&quot;sqrt(100) = %f\n&quot;, sqrt(100));
    printf(&quot;sqrt(2) = %f\n&quot;, sqrt(2));
    printf(&quot;golden ratio = %f\n&quot;, (1+sqrt(5))/2);
    // special values
    printf(&quot;sqrt(-0) = %f\n&quot;, sqrt(-0.0));
    // error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;sqrt(-1.0) = %f\n&quot;, sqrt(-1));
    if(errno == EDOM) perror(&quot;    errno == EDOM&quot;);
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID was raised&quot;);
}
 | p=true
 | output=
sqrt(100) = 10.000000
sqrt(2) = 1.414214
golden ratio = 1.618034
sqrt(-0) = -0.000000
sqrt(-1.0) = -nan
    errno = EDOM: Numerical argument out of domain
    FE_INVALID was raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.7.5 | title=The sqrt functions | p=249}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.4.5 | title=The sqrt functions | p=525}}
{{ref std c99}}
{{ref std | section=7.12.7.5 | title=The sqrt functions | p=229-230}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.4.5  | title=The sqrt functions| p=462}}
{{ref std c89}}
{{ref std | section=4.5.5.2  | title=The sqrt function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc pow}}
{{dsc inc | c/numeric/math/dsc cbrt}}
{{dsc inc | c/numeric/math/dsc hypot}}
{{dsc inc | c/numeric/complex/dsc csqrt}}
{{dsc see cpp | cpp/numeric/math/sqrt}}
{{dsc end}}

[[ar:c/numeric/math/sqrt]]
[[cs:c/numeric/math/sqrt]]
[[de:c/numeric/math/sqrt]]
[[es:c/numeric/math/sqrt]]
[[fr:c/numeric/math/sqrt]]
[[it:c/numeric/math/sqrt]]
[[ja:c/numeric/math/sqrt]]
[[ko:c/numeric/math/sqrt]]
[[pl:c/numeric/math/sqrt]]
[[pt:c/numeric/math/sqrt]]
[[ru:c/numeric/math/sqrt]]
[[tr:c/numeric/math/sqrt]]
[[zh:c/numeric/math/sqrt]]</text>
      <sha1>lfa5gimlkxlc55uclrga07r96df68ic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/tan</title>
    <ns>0</ns>
    <id>6290</id>
    <revision>
      <id>78880</id>
      <parentid>77318</parentid>
      <timestamp>2015-06-11T11:17:28Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="4133">{{c/title|tan, tanf, tanl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl |num=1 |  since=c99 |
float       tanf( float arg );
}}
{{dcl |num=2 | 
double      tan( double arg );
}}
{{dcl | num=3 | since=c99 |
long double tanl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define tan( arg )
}}
{{dcl end}}

@1-3@ Computes the tangent of {{tt|arg}}  (measured in radians).
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|tanl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|tan}} is called. Otherwise, {{tt|tanf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|ctanf}}, {{c|ctan}}, {{c|ctanl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing angle in radians}}
{{par end}}

===Return value===
If no errors occur, the tangent of {{tt|arg}} ({{math|tan(arg)}}) is returned.

{{rev begin}}
{{rev|until=c99|
The result may have little or no significance if the magnitude of {{tt|arg}} is large.
}}
{{rev end}}

If a domain error occurs, an implementation-defined value is returned (NaN where supported).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, it is returned unmodified
* if the argument is ±∞, NaN is returned and {{lc|FE_INVALID}} is raised
* if the argument is NaN, NaN is returned

===Notes===
The case where the argument is infinite is not specified to be a domain error in C, but it is defined as a [http://pubs.opengroup.org/onlinepubs/9699919799/functions/tan.html domain error in POSIX].

The function has mathematical poles at {{math|π(1/2 + n)}}; however no common floating-point representation is able to represent π/2 exactly, thus there is no value of the argument for which a pole error occurs.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;

#pragma STDC FENV_ACCESS ON
int main(void)
{
    double pi = acos(-1);
    // typical usage
    printf(&quot;tan  (pi/4) = %+f\n&quot;, tan(  pi/4)); //   45 deg
    printf(&quot;tan(3*pi/4) = %+f\n&quot;, tan(3*pi/4)); //  135 deg
    printf(&quot;tan(5*pi/4) = %+f\n&quot;, tan(5*pi/4)); // -135 deg
    printf(&quot;tan(7*pi/4) = %+f\n&quot;, tan(7*pi/4)); //  -45 deg
    // special values
    printf(&quot;tan(+0) = %f\n&quot;, tan(0.0));
    printf(&quot;tan(-0) = %f\n&quot;, tan(-0.0));
    // error handling 
    feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;tan(INFINITY) = %f\n&quot;, tan(INFINITY));
    if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
tan  (pi/4) = +1.000000
tan(3*pi/4) = -1.000000
tan(5*pi/4) = +1.000000
tan(7*pi/4) = -1.000000
tan(+0) = 0.000000
tan(-0) = -0.000000
tan(INFINITY) = -nan
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.4.7 | title=The tan functions | p=240}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.1.7 | title=The tan functions | p=519}}
{{ref std c99}}
{{ref std | section=7.12.4.7 | title=The tan functions | p=220}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.1.7  | title=The tan functions| p=457}}
{{ref std c89}}
{{ref std | section=4.5.2.7  | title=The tan function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc sin}}
{{dsc inc | c/numeric/math/dsc cos}}
{{dsc inc | c/numeric/math/dsc atan}}
{{dsc inc | c/numeric/complex/dsc ctan}}
{{dsc see cpp | cpp/numeric/math/tan}}
{{dsc end}}

[[ar:c/numeric/math/tan]]
[[cs:c/numeric/math/tan]]
[[de:c/numeric/math/tan]]
[[es:c/numeric/math/tan]]
[[fr:c/numeric/math/tan]]
[[it:c/numeric/math/tan]]
[[ja:c/numeric/math/tan]]
[[ko:c/numeric/math/tan]]
[[pl:c/numeric/math/tan]]
[[pt:c/numeric/math/tan]]
[[ru:c/numeric/math/tan]]
[[tr:c/numeric/math/tan]]
[[zh:c/numeric/math/tan]]</text>
      <sha1>0xouvq48mce68ppqxlnpq3tbs65xvcs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/tanh</title>
    <ns>0</ns>
    <id>6295</id>
    <revision>
      <id>78883</id>
      <parentid>77303</parentid>
      <timestamp>2015-06-11T11:21:57Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3392">{{c/title|tanh, tanhf, tanhl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | num=1 | since=c99 |
float       tanhf( float arg );
}}
{{dcl | num=2 |
double      tanh( double arg );
}}
{{dcl | num=3 | since=c99 |
long double tanhl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define tanh( arg )
}}
{{dcl end}}

@1-3@ Computes the hyperbolic tangent of {{tt|arg}}.
@4@ Type-generic macro: If the argument has type {{c|long double}}, {{tt|tanhl}} is called. Otherwise, if the argument has integer type or the type {{c|double}}, {{tt|tanh}} is called. Otherwise, {{tt|tanhf}} is called. If the argument is complex, then the macro invokes the corresponding complex function ({{c|ctanhf}}, {{c|ctanh}}, {{c|ctanhl}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value representing a hyperbolic angle}}
{{par end}}

===Return value===
If no errors occur, the hyperbolic tangent of {{tt|arg}} ({{math|tanh(arg)}}, or {{math|{{mfrac|e{{su|p=arg}}-e{{su|p=-arg}}|e{{su|p=arg}}+e{{su|p=-arg}}}}}}) is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, ±0 is returned
* If the argument is ±∞, ±1 is returned
* if the argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/tanh.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main(void)
{
    printf(&quot;tanh(1) = %f\ntanh(-1) = %f\n&quot;, tanh(1), tanh(-1));
    printf(&quot;tanh(0.1)*sinh(0.2)-cosh(0.2) = %f\n&quot;, tanh(0.1) * sinh(0.2) - cosh(0.2));
    // special values
    printf(&quot;tanh(+0) = %f\ntanh(-0) = %f\n&quot;, tanh(0.0), tanh(-0.0));
}
 | output=
tanh(1) = 0.761594
tanh(-1) = -0.761594
tanh(0.1)*sinh(0.2)-cosh(0.2) = -1.000000
tanh(+0) = 0.000000
tanh(-0) = -0.000000
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.5.6 | title=The tanh functions | p=242}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.2.6 | title=The tanh functions | p=520}}
{{ref std c99}}
{{ref std | section=7.12.5.6 | title=The tanh functions | p=222-223}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.2.6  | title=The tanh functions| p=457}}
{{ref std c89}}
{{ref std | section=4.5.3.3  | title=The tanh function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc sinh}}
{{dsc inc | c/numeric/math/dsc cosh}}
{{dsc inc | c/numeric/math/dsc atanh}}
{{dsc inc | c/numeric/complex/dsc ctanh}}
{{dsc see cpp | cpp/numeric/math/tanh}}
{{dsc end}}

[[ar:c/numeric/math/tanh]]
[[cs:c/numeric/math/tanh]]
[[de:c/numeric/math/tanh]]
[[es:c/numeric/math/tanh]]
[[fr:c/numeric/math/tanh]]
[[it:c/numeric/math/tanh]]
[[ja:c/numeric/math/tanh]]
[[ko:c/numeric/math/tanh]]
[[pl:c/numeric/math/tanh]]
[[pt:c/numeric/math/tanh]]
[[ru:c/numeric/math/tanh]]
[[tr:c/numeric/math/tanh]]
[[zh:c/numeric/math/tanh]]</text>
      <sha1>enw4rqw8zedw00bo0cq8906grxc5q8q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/tgamma</title>
    <ns>0</ns>
    <id>6308</id>
    <revision>
      <id>77337</id>
      <parentid>73371</parentid>
      <timestamp>2015-03-22T13:44:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="5057">{{c/title|tgamma, tgammaf, tgammal}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 |num=1|
float       tgammaf( float arg );
}}
{{dcl | since=c99 |num=2|
double      tgamma( double arg );
}}
{{dcl | since=c99 |num=3|
long double tgammal( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define tgamma( arg )
}}
{{dcl end}}

@1-3@ Computes the [[enwiki:Gamma function|gamma function]] of {{tt|arg}}.
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|tgammal}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|tgamma}} is called. Otherwise, {{tt|tgammaf}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the value of the gamma function of {{tt|arg}}, that is {{math|{{minteg|0|∞|''t''{{su|p=arg-1}} {{mexp|-t}} d''t''}}}}, is returned.

If a domain error occurs, an implementation-defined value (NaN where supported) is returned.

If a pole error occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct value (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If {{tt|arg}} is zero or is an integer less than zero, a pole error or a domain error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, ±∞ is returned and {{lc|FE_DIVBYZERO}} is raised
* If the argument is a negative integer, NaN is returned and {{lc|FE_INVALID}} is raised
* If the argument is -∞, NaN is returned and {{lc|FE_INVALID}} is raised
* If the argument is +∞, +∞ is returned.
* If the argument is NaN, NaN is returned

===Notes===
If {{tt|arg}} is a natural number, {{c|tgamma(arg)}} is the factorial of {{tt|arg-1}}. Many implementations calculate the exact integer-domain factorial if the argument is a sufficiently small integer.

For IEEE-compatible type {{c|double}}, overflow happens if {{tt|0 &lt; x &lt; 1/DBL_MAX}} or if {{tt|x &gt; 171.7}}.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/tgamma.html POSIX requires] that a pole error occurs if the argument is zero, but a domain error occurs when the argument is a negative integer. It also specifies that in future, domain errors may be replaced by pole errors for negative integer arguments (in which case the return value in those cases would change from NaN to ±∞).

There is a non-standard function named {{tt|gamma}} in various implementations, but its definition is inconsistent. For example, glibc and 4.2BSD version of {{tt|gamma}} executes {{tt|lgamma}}, but 4.4BSD version of {{tt|gamma}} executes {{tt|tgamma}}.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
#include &lt;float.h&gt;
#include &lt;errno.h&gt;
#include &lt;fenv.h&gt;
#pragma STDC FENV_ACCESS ON
int main(void)
{
    printf(&quot;tgamma(10) = %f, 9!=%f\n&quot;, tgamma(10), 2*3*4*5*6*7*8*9.0);
    printf(&quot;tgamma(0.5) = %f, sqrt(pi) = %f\n&quot;, sqrt(acos(-1)), tgamma(0.5));
    // special values
    printf(&quot;tgamma(+Inf) = %f\n&quot;, tgamma(INFINITY));
    //error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf(&quot;tgamma(-1) = %f\n&quot;, tgamma(-1));
    if(errno == ERANGE) perror(&quot;    errno == ERANGE&quot;);
    else if(errno == EDOM)   perror(&quot;    errno == EDOM&quot;);
    if(fetestexcept(FE_DIVBYZERO)) puts(&quot;    FE_DIVBYZERO raised&quot;);
    else if(fetestexcept(FE_INVALID)) puts(&quot;    FE_INVALID raised&quot;);
}
 | p=true
 | output=
tgamma(10) = 362880.000000, 9!=362880.000000
tgamma(0.5) = 1.772454, sqrt(pi) = 1.772454
tgamma(+Inf) = inf
tgamma(-1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.8.4 | title=The tgamma functions | p=250}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.5.4 | title=The tgamma functions | p=525}}
{{ref std c99}}
{{ref std | section=7.12.8.4 | title=The tgamma functions | p=231}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.5.4  | title=The tgamma functions| p=462}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc lgamma}}
{{dsc see cpp | cpp/numeric/math/tgamma}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/GammaFunction.html Weisstein, Eric W. &quot;Gamma Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[ar:c/numeric/math/tgamma]]
[[cs:c/numeric/math/tgamma]]
[[de:c/numeric/math/tgamma]]
[[es:c/numeric/math/tgamma]]
[[fr:c/numeric/math/tgamma]]
[[it:c/numeric/math/tgamma]]
[[ja:c/numeric/math/tgamma]]
[[ko:c/numeric/math/tgamma]]
[[pl:c/numeric/math/tgamma]]
[[pt:c/numeric/math/tgamma]]
[[ru:c/numeric/math/tgamma]]
[[tr:c/numeric/math/tgamma]]
[[zh:c/numeric/math/tgamma]]</text>
      <sha1>qghyhypzipwdr8a91j47261c2glyo9t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/math/trunc</title>
    <ns>0</ns>
    <id>6305</id>
    <revision>
      <id>77352</id>
      <parentid>73375</parentid>
      <timestamp>2015-03-23T15:47:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3391">{{c/title|trunc|truncf|truncl}}
{{c/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | math.h}}
{{dcl | since=c99 | num=1|
float       truncf( float arg );
}}
{{dcl | since=c99 | num=2|
double      trunc( double arg );
}}
{{dcl | since=c99 | num=3|
long double truncl( long double arg );
}}
{{dcl header | tgmath.h}}
{{dcl |num=4| since=c99 |
#define trunc( arg )
}}
{{dcl end}}

@1-3@ Computes the nearest integer not greater in magnitude than {{tt|arg}}. 
@4@ Type-generic macro: If {{tt|arg}} has type {{c|long double}}, {{tt|truncl}} is called. Otherwise, if {{tt|arg}} has integer type or the type {{c|double}}, {{tt|trunc}} is called. Otherwise, {{tt|truncf}} is called.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the nearest integer value not greater in magnitude than {{tt|arg}} (in other words, {{tt|arg}} rounded towards zero), is returned.

{{plot | left=Return value | bottom=Argument | math-trunc.svg}}

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]].

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[c/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If arg is NaN, NaN is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised when truncating a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so this function never overflows on its own; however the result may overflow any integer type (including {{lc|intmax_t}}), when stored in an integer variable.

The implicit conversion from floating-point to integral types also rounds towards zero, but is limited to the values that can be represented by the target type.

===Example===
{{example |
 | code=
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{
    printf(&quot;trunc(+2.7) = %+.1f\n&quot;, trunc(2.7));
    printf(&quot;trunc(-2.7) = %+.1f\n&quot;, trunc(-2.7));
    printf(&quot;trunc(-0.0) = %+.1f\n&quot;, trunc(-0.0));
    printf(&quot;trunc(-Inf) = %+f\n&quot;,   trunc(-INFINITY));
}
 | p=true
 | output=
trunc(+2.7) = +2.0
trunc(-2.7) = -2.0
trunc(-0.0) = -0.0
trunc(-Inf) = -inf
}}

===References===
{{ref std c11}}
{{ref std | section=7.12.9.8 | title=The trunc functions | p=253-254}}
{{ref std | section=7.25     | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std | section=F.10.6.8 | title=The trunc functions | p=528}}
{{ref std c99}}
{{ref std | section=7.12.9.8 | title=The trunc functions | p=234}}
{{ref std | section=7.22     | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std | section=F.9.6.8  | title=The trunc functions| p=464}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/math/dsc floor}}
{{dsc inc | c/numeric/math/dsc ceil}}
{{dsc inc | c/numeric/math/dsc round}}
{{dsc see cpp | cpp/numeric/math/trunc}}
{{dsc end}}

[[ar:c/numeric/math/trunc]]
[[cs:c/numeric/math/trunc]]
[[de:c/numeric/math/trunc]]
[[es:c/numeric/math/trunc]]
[[fr:c/numeric/math/trunc]]
[[it:c/numeric/math/trunc]]
[[ja:c/numeric/math/trunc]]
[[ko:c/numeric/math/trunc]]
[[pl:c/numeric/math/trunc]]
[[pt:c/numeric/math/trunc]]
[[ru:c/numeric/math/trunc]]
[[tr:c/numeric/math/trunc]]
[[zh:c/numeric/math/trunc]]</text>
      <sha1>bw17fvwbx6gs1flk6fdql9dqphhgbdz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/random</title>
    <ns>0</ns>
    <id>6411</id>
    <revision>
      <id>78906</id>
      <parentid>77210</parentid>
      <timestamp>2015-06-11T19:28:44Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1022">{{title|Pseudo-random number generation}}
{{c/numeric/random/navbar}}

{{dsc begin}}
{{dsc header | stdlib.h}}
{{dsc inc | c/numeric/random/dsc rand}}
{{dsc inc | c/numeric/random/dsc srand}}
{{dsc inc | c/numeric/random/dsc RAND_MAX}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.22.2 | title=Pseudo-random sequence generation functions | p=346-347}}
{{ref std c99}}
{{ref std | section=7.20.2 | title=Pseudo-random sequence generation functions | p=312-313}}
{{ref std c89}}
{{ref std | section=4.10.2 | title=Pseudo-random sequence generation functions}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/numeric/random | Pseudo-random number generation}}
{{dsc end}}

[[ar:c/numeric/random]]
[[cs:c/numeric/random]]
[[de:c/numeric/random]]
[[es:c/numeric/random]]
[[fr:c/numeric/random]]
[[it:c/numeric/random]]
[[ja:c/numeric/random]]
[[ko:c/numeric/random]]
[[pl:c/numeric/random]]
[[pt:c/numeric/random]]
[[ru:c/numeric/random]]
[[tr:c/numeric/random]]
[[zh:c/numeric/random]]</text>
      <sha1>mqrx33wra3jyr1qqj4n2ltm35t5dk10</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/random/RAND MAX</title>
    <ns>0</ns>
    <id>6417</id>
    <revision>
      <id>78909</id>
      <parentid>77213</parentid>
      <timestamp>2015-06-11T19:35:45Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1222">{{title|RAND_MAX}}
{{c/numeric/random/navbar}}
{{ddcl | header=stdlib.h |
#define RAND_MAX /*implementation defined*/
}}

Expands to an integer constant expression equal to the maximum value returned by the function {{lc|rand()}}. This value is implementation dependent. It's guaranteed that this value is at least {{c|32767}}.

===References===
{{ref std c11}}
{{ref std | section=7.22/3 | title=General utilities &lt;stdlib.h&gt; | p=340}}
{{ref std c99}}
{{ref std | section=7.20/3 | title=General utilities &lt;stdlib.h&gt; | p=306}}
{{ref std c89}}
{{ref std | section=4.10   | title=GENERAL UTILITIES &lt;stdlib.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/random/dsc rand}}
{{dsc inc | c/numeric/random/dsc srand}}
{{dsc see cpp | cpp/numeric/random/RAND_MAX}}
{{dsc end}}

[[ar:c/numeric/random/RAND_MAX]]
[[cs:c/numeric/random/RAND_MAX]]
[[de:c/numeric/random/RAND_MAX]]
[[es:c/numeric/random/RAND_MAX]]
[[fr:c/numeric/random/RAND_MAX]]
[[it:c/numeric/random/RAND_MAX]]
[[ja:c/numeric/random/RAND_MAX]]
[[ko:c/numeric/random/RAND_MAX]]
[[pl:c/numeric/random/RAND_MAX]]
[[pt:c/numeric/random/RAND_MAX]]
[[ru:c/numeric/random/RAND_MAX]]
[[tr:c/numeric/random/RAND_MAX]]
[[zh:c/numeric/random/RAND_MAX]]</text>
      <sha1>3sheg4xkjpf22jxbw5xlveh0j72v3g3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/random/rand</title>
    <ns>0</ns>
    <id>6416</id>
    <revision>
      <id>82078</id>
      <parentid>78907</parentid>
      <timestamp>2015-12-02T08:57:04Z</timestamp>
      <contributor>
        <ip>24.7.102.11</ip>
      </contributor>
      <text xml:space="preserve" bytes="2604">{{c/title|rand}}
{{c/numeric/random/navbar}}
{{ddcl | header=stdlib.h | 
int rand();
}}

Returns a pseudo-random integer value between {{c|0}} and {{lc|RAND_MAX}} (0 and {{tt|RAND_MAX}} included).

{{lc|srand()}} seeds the pseudo-random number generator used by {{tt|rand()}}.
If {{tt|rand()}} is used before any calls to {{tt|srand()}}, {{tt|rand()}} behaves as if it was seeded with {{tt|srand(1)}}.
Each time {{tt|rand()}} is seeded with {{tt|srand()}}, it must produce the same sequence of values.

{{tt|rand()}} is not guaranteed to be thread-safe.

===Parameters===
(none)

===Return value===
Pseudo-random integer value between {{c|0}} and {{lc|RAND_MAX}}, inclusive.

===Notes===
There are no guarantees as to the quality of the random sequence produced.
In the past, some implementations of {{tt|rand()}} have had serious shortcomings in the randomness, distribution and period of the sequence produced (in one well-known example, the low-order bit simply alternated between {{tt|1}} and {{tt|0}} between calls).
{{tt|rand()}} is not recommended for serious random-number generation needs, like cryptography.

POSIX requires that the period of the pseudo-random number generator used by {{tt|rand}} is at least {{math|2{{su|p=32}}}}

POSIX offered a thread-safe version of rand called rand_r, which is obsolete in favor of the [http://pubs.opengroup.org/onlinepubs/9699919799/functions/drand48.html drand48] family of functions.

===Example===
{{example
 | p=true
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    srand(time(0)); //use current time as seed for random generator
    int random_variable = rand();
    printf(&quot;Random value on [0,%d]: %d\n&quot;, RAND_MAX, random_variable);
}
 | output=
Random value on [0 2147483647]: 1373858591
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.2.1 | title=The rand function | p=346}}
{{ref std c99}}
{{ref std | section=7.20.2.1 | title=The rand function | p=312}}
{{ref std c89}}
{{ref std | section=4.10.2.1 | title=The rand function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/random/dsc srand}}
{{dsc inc | c/numeric/random/dsc RAND_MAX}}
{{dsc see cpp | cpp/numeric/random/rand}}
{{dsc end}}

[[ar:c/numeric/random/rand]]
[[cs:c/numeric/random/rand]]
[[de:c/numeric/random/rand]]
[[es:c/numeric/random/rand]]
[[fr:c/numeric/random/rand]]
[[it:c/numeric/random/rand]]
[[ja:c/numeric/random/rand]]
[[ko:c/numeric/random/rand]]
[[pl:c/numeric/random/rand]]
[[pt:c/numeric/random/rand]]
[[ru:c/numeric/random/rand]]
[[tr:c/numeric/random/rand]]
[[zh:c/numeric/random/rand]]</text>
      <sha1>koneb8ia7dsr6hrx8gh90ejpgk6l23p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/random/srand</title>
    <ns>0</ns>
    <id>6415</id>
    <revision>
      <id>82382</id>
      <parentid>78908</parentid>
      <timestamp>2015-12-15T22:07:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention that re-running rand requires the same seed (and not just a call to srand)</comment>
      <text xml:space="preserve" bytes="2382">{{c/title|srand}}
{{c/numeric/random/navbar}}
{{ddcl | header=stdlib.h | 
void srand( unsigned seed );
}}

Seeds the pseudo-random number generator used by {{lc|rand()}} with the value {{tt|seed}}.

If {{tt|rand()}} is used before any calls to {{tt|srand()}}, {{tt|rand()}} behaves as if it was seeded with {{tt|srand(1)}}.

Each time {{tt|rand()}} is seeded with the same {{tt|seed}}, it must produce the same sequence of values.

{{tt|srand()}} is not guaranteed to be thread-safe.

===Parameters===
{{par begin}}
{{par | seed | the seed value}}
{{par end}}

===Return value===
(none)

===Notes===
Generally speaking, the pseudo-random number generator should only be seeded once, before any calls to {{tt|rand()}}, and the start of the program.
It should not be repeatedly seeded, or reseeded every time you wish to generate a new batch of pseudo-random numbers.

Standard practice is to use the result of a call to {{c|time(0)}} as the seed.
However, {{tt|time()}} returns a {{lc|time_t}} value, and {{tt|time_t}} is not guaranteed to be an integral type.
In practice, though, every major implementation defines {{tt|time_t}} to be an integral type, and this is also what POSIX requires.

===Example===
{{example
 | p=true
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;

int main(void)
{
    srand(time(0)); //use current time as seed for random generator
    int random_variable = rand();
    printf(&quot;Random value on [0,%d]: %d\n&quot;, RAND_MAX, random_variable);
}
 | output=
Random value on [0 2147483647]: 1373858591
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.2.2 | title=The srand function | p=346-347}}
{{ref std c99}}
{{ref std | section=7.20.2.2 | title=The srand function | p=312-313}}
{{ref std c89}}
{{ref std | section=4.10.2.2 | title=The srand function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/random/dsc rand}}
{{dsc inc | c/numeric/random/dsc RAND_MAX}}
{{dsc see cpp | cpp/numeric/random/srand}}
{{dsc end}}

[[ar:c/numeric/random/srand]]
[[cs:c/numeric/random/srand]]
[[de:c/numeric/random/srand]]
[[es:c/numeric/random/srand]]
[[fr:c/numeric/random/srand]]
[[it:c/numeric/random/srand]]
[[ja:c/numeric/random/srand]]
[[ko:c/numeric/random/srand]]
[[pl:c/numeric/random/srand]]
[[pt:c/numeric/random/srand]]
[[ru:c/numeric/random/srand]]
[[tr:c/numeric/random/srand]]
[[zh:c/numeric/random/srand]]</text>
      <sha1>h5k2xy00sjr71yg3qlpm1ianpjk30ug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/numeric/tgmath</title>
    <ns>0</ns>
    <id>6422</id>
    <revision>
      <id>77102</id>
      <parentid>77092</parentid>
      <timestamp>2015-03-14T13:39:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>-C89</comment>
      <text xml:space="preserve" bytes="15299">{{title|Type-generic math}}
{{c/numeric/navbar}}

The header {{tt|&lt;tgmath.h&gt;}} includes the headers {{tt|&lt;math.h&gt;}} and {{tt|&lt;complex.h&gt;}} and defines several type-generic macros that determine which real or, when applicable, complex function to call based on the types of the arguments.

For each macro, the parameters whose corresponding real type in the unsuffixed math.h function is {{c|double}} are known as ''generic parameters'' (for example, both parameters of {{lc|pow}} are generic parameters, but only the first parameter of {{lc|scalbn}} is a generic parameter)

When a {{tt|&lt;tgmath.h&gt;}} macro is used the types of the arguments passed to the generic parameters determine which function is selected by the macro as described below. If the types of the arguments are not [[c/language/type#Compatible_types|compatible]] with the parameter types of the selected function, the behavior is undefined (e.g. if a complex argument is passed into a real-only tgmath macro: {{c|float complex fc; ceil(fc)}} or {{c|double complex dc; double d; fmax(dc, d)}} are examples of undefined behavior)

Note: type-generic macros were implemented in implementation-defined manner in C99, but C11 keyword [[c/keyword/_Generic|_Generic]] makes it possible to implement these macros in portable manner.

===Complex/real type-generic macros===

For all functions that have both real and complex counterparts, a type-generic macro {{tt|XXX}} exists, which calls either of:
* real function:
:* {{c|float}} variant {{tt|XXXf}}
:* {{c|double}} variant {{tt|XXX}}
:* {{c|long double}} variant {{tt|XXXl}}
* complex function:
:* {{c|float}} variant {{tt|cXXXf}}
:* {{c|double}} variant {{tt|cXXX}}
:* {{c|long double}} variant {{tt|cXXXl}}

An exception to the above rule is the {{tt|fabs}} macro (see the table below).

The function to call is determined as follows:

* If any of the arguments for the generic parameters is imaginary, the behavior is specified on each function reference page individually (in particular, sin, cos, tag, cosh, sinh, tanh, asin, atan, asinh, and atanh call ''real'' functions, the return types of sin, tan, sinh, tanh, asin, atan, asinh, and atanh are imaginary, and the return types of cos and cosh are real)
* If any of the arguments for the generic parameters is complex, then the complex function is called, otherwise the real function is called.
* If any of the arguments for the generic parameters is {{c|long double}}, then the {{c|long double}} variant is called. Otherwise, if any of the parameters is {{c|double}} or integer, then the {{c|double}} variant is called. Otherwise, {{c|float}} variant is called.

The type-generic macros are as follows:

{| class=&quot;wikitable&quot;
|-
! Type-generic macro
! colspan=3 | Real function &lt;br&gt; variants 
! colspan=3 | Complex function &lt;br&gt; variants
|-
! style=&quot;height: 8em;&quot; | &amp;nbsp;
! {{vertical|{{c|float}}}}
! {{vertical|{{c|double}}}} 
! {{vertical|{{c|long double}}}} 
! {{vertical|{{c|float}}}}
! {{vertical|{{c|double}}}} 
! {{vertical|{{c|long double}}}} 
|-
! fabs
| {{ltt|c/numeric/math/fabs|fabsf}}
| {{ltt|c/numeric/math/fabs|fabs}}
| {{ltt|c/numeric/math/fabs|fabsl}}
| {{ltt|c/numeric/complex/cabs|cabsf}}
| {{ltt|c/numeric/complex/cabs|cabs}}
| {{ltt|c/numeric/complex/cabs|cabsl}}
|-
! exp
| {{ltt|c/numeric/math/exp|expf}}
| {{ltt|c/numeric/math/exp|exp}}
| {{ltt|c/numeric/math/exp|expl}}
| {{ltt|c/numeric/complex/cexp|cexpf}}
| {{ltt|c/numeric/complex/cexp|cexp}}
| {{ltt|c/numeric/complex/cexp|cexpl}}
|-
! log
| {{ltt|c/numeric/math/log|logf}}
| {{ltt|c/numeric/math/log|log}}
| {{ltt|c/numeric/math/log|logl}}
| {{ltt|c/numeric/complex/clog|clogf}}
| {{ltt|c/numeric/complex/clog|clog}}
| {{ltt|c/numeric/complex/clog|clogl}}
|-
! pow
| {{ltt|c/numeric/math/pow|powf}}
| {{ltt|c/numeric/math/pow|pow}}
| {{ltt|c/numeric/math/pow|powl}}
| {{ltt|c/numeric/complex/cpow|cpowf}}
| {{ltt|c/numeric/complex/cpow|cpow}}
| {{ltt|c/numeric/complex/cpow|cpowl}}
|-
! sqrt
| {{ltt|c/numeric/math/sqrt|sqrtf}}
| {{ltt|c/numeric/math/sqrt|sqrt}}
| {{ltt|c/numeric/math/sqrt|sqrtl}}
| {{ltt|c/numeric/complex/csqrt|csqrtf}}
| {{ltt|c/numeric/complex/csqrt|csqrt}}
| {{ltt|c/numeric/complex/csqrt|csqrtl}}
|-
! sin
| {{ltt|c/numeric/math/sin|sinf}}
| {{ltt|c/numeric/math/sin|sin}}
| {{ltt|c/numeric/math/sin|sinl}}
| {{ltt|c/numeric/complex/csin|csinf}}
| {{ltt|c/numeric/complex/csin|csin}}
| {{ltt|c/numeric/complex/csin|csinl}}
|-
! cos
| {{ltt|c/numeric/math/cos|cosf}}
| {{ltt|c/numeric/math/cos|cos}}
| {{ltt|c/numeric/math/cos|cosl}}
| {{ltt|c/numeric/complex/ccos|ccosf}}
| {{ltt|c/numeric/complex/ccos|ccos}}
| {{ltt|c/numeric/complex/ccos|ccosl}}
|-
! tan
| {{ltt|c/numeric/math/tan|tanf}}
| {{ltt|c/numeric/math/tan|tan}}
| {{ltt|c/numeric/math/tan|tanl}}
| {{ltt|c/numeric/complex/ctan|ctanf}}
| {{ltt|c/numeric/complex/ctan|ctan}}
| {{ltt|c/numeric/complex/ctan|ctanl}}
|-
! asin
| {{ltt|c/numeric/math/asin|asinf}}
| {{ltt|c/numeric/math/asin|asin}}
| {{ltt|c/numeric/math/asin|asinl}}
| {{ltt|c/numeric/complex/casin|casinf}}
| {{ltt|c/numeric/complex/casin|casin}}
| {{ltt|c/numeric/complex/casin|casinl}}
|-
! acos
| {{ltt|c/numeric/math/acos|acosf}}
| {{ltt|c/numeric/math/acos|acos}}
| {{ltt|c/numeric/math/acos|acosl}}
| {{ltt|c/numeric/complex/cacos|cacosf}}
| {{ltt|c/numeric/complex/cacos|cacos}}
| {{ltt|c/numeric/complex/cacos|cacosl}}
|-
! atan
| {{ltt|c/numeric/math/atan|atanf}}
| {{ltt|c/numeric/math/atan|atan}}
| {{ltt|c/numeric/math/atan|atanl}}
| {{ltt|c/numeric/complex/catan|catanf}}
| {{ltt|c/numeric/complex/catan|catan}}
| {{ltt|c/numeric/complex/catan|catanl}}
|-
! sinh
| {{ltt|c/numeric/math/sinh|sinhf}}
| {{ltt|c/numeric/math/sinh|sinh}}
| {{ltt|c/numeric/math/sinh|sinhl}}
| {{ltt|c/numeric/complex/csinh|csinhf}}
| {{ltt|c/numeric/complex/csinh|csinh}}
| {{ltt|c/numeric/complex/csinh|csinhl}}
|-
! cosh
| {{ltt|c/numeric/math/cosh|coshf}}
| {{ltt|c/numeric/math/cosh|cosh}}
| {{ltt|c/numeric/math/cosh|coshl}}
| {{ltt|c/numeric/complex/ccosh|ccoshf}}
| {{ltt|c/numeric/complex/ccosh|ccosh}}
| {{ltt|c/numeric/complex/ccosh|ccoshl}}
|-
! tanh
| {{ltt|c/numeric/math/tanh|tanhf}}
| {{ltt|c/numeric/math/tanh|tanh}}
| {{ltt|c/numeric/math/tanh|tanhl}}
| {{ltt|c/numeric/complex/ctanh|ctanhf}}
| {{ltt|c/numeric/complex/ctanh|ctanh}}
| {{ltt|c/numeric/complex/ctanh|ctanhl}}
|-
! asinh
| {{ltt|c/numeric/math/asinh|asinhf}}
| {{ltt|c/numeric/math/asinh|asinh}}
| {{ltt|c/numeric/math/asinh|asinhl}}
| {{ltt|c/numeric/complex/casinh|casinhf}}
| {{ltt|c/numeric/complex/casinh|casinh}}
| {{ltt|c/numeric/complex/casinh|casinhl}}
|-
! acosh
| {{ltt|c/numeric/math/acosh|acoshf}}
| {{ltt|c/numeric/math/acosh|acosh}}
| {{ltt|c/numeric/math/acosh|acoshl}}
| {{ltt|c/numeric/complex/cacosh|cacoshf}}
| {{ltt|c/numeric/complex/cacosh|cacosh}}
| {{ltt|c/numeric/complex/cacosh|cacoshl}}
|-
! atanh
| {{ltt|c/numeric/math/atanh|atanhf}}
| {{ltt|c/numeric/math/atanh|atanh}}
| {{ltt|c/numeric/math/atanh|atanhl}}
| {{ltt|c/numeric/complex/catanh|catanhf}}
| {{ltt|c/numeric/complex/catanh|catanh}}
| {{ltt|c/numeric/complex/catanh|catanhl}}
|}

===Real-only functions===

For all functions that do not have complex counterparts, with the exception of {{tt|modf}}, a type-generic macro {{tt|XXX}} exists, which calls either of the variants of a real function:
* {{c|float}} variant {{tt|XXXf}}
* {{c|double}} variant {{tt|XXX}}
* {{c|long double}} variant {{tt|XXXl}}

The function to call is determined as follows:

* If any of the arguments for the generic parameters is {{c|long double}}, then the {{c|long double}} variant is called. Otherwise, if any of the arguments for the generic parameters is {{c|double}}, then the {{c|double}} variant is called. Otherwise, {{c|float}} variant is called.

{| class=&quot;wikitable&quot;
|-
! Type-generic macro
! colspan=3 | Real function &lt;br&gt; variants 
|-
! style=&quot;height: 8em;&quot; | &amp;nbsp;
! {{vertical|{{c|float}}}}
! {{vertical|{{c|double}}}} 
! {{vertical|{{c|long double}}}} 
|-
! atan2
| {{ltt|c/numeric/math/atan2|atan2f}}
| {{ltt|c/numeric/math/atan2|atan2}}
| {{ltt|c/numeric/math/atan2|atan2l}}
|-
! cbrt
| {{ltt|c/numeric/math/cbrt|cbrtf}}
| {{ltt|c/numeric/math/cbrt|cbrt}}
| {{ltt|c/numeric/math/cbrt|cbrtl}}
|-
! ceil
| {{ltt|c/numeric/math/ceil|ceilf}}
| {{ltt|c/numeric/math/ceil|ceil}}
| {{ltt|c/numeric/math/ceil|ceill}}
|-
! copysign
| {{ltt|c/numeric/math/copysign|copysignf}}
| {{ltt|c/numeric/math/copysign|copysign}}
| {{ltt|c/numeric/math/copysign|copysignl}}
|-
! erf
| {{ltt|c/numeric/math/erf|erff}}
| {{ltt|c/numeric/math/erf|erf}}
| {{ltt|c/numeric/math/erf|erfl}}
|-
! erfc
| {{ltt|c/numeric/math/erfc|erfcf}}
| {{ltt|c/numeric/math/erfc|erfc}}
| {{ltt|c/numeric/math/erfc|erfcl}}
|-
! exp2
| {{ltt|c/numeric/math/exp2|exp2f}}
| {{ltt|c/numeric/math/exp2|exp2}}
| {{ltt|c/numeric/math/exp2|exp2l}}
|-
! expm1
| {{ltt|c/numeric/math/expm1|expm1f}}
| {{ltt|c/numeric/math/expm1|expm1}}
| {{ltt|c/numeric/math/expm1|expm1l}}
|-
! fdim
| {{ltt|c/numeric/math/fdim|fdimf}}
| {{ltt|c/numeric/math/fdim|fdim}}
| {{ltt|c/numeric/math/fdim|fdiml}}
|-
! floor
| {{ltt|c/numeric/math/floor|floorf}}
| {{ltt|c/numeric/math/floor|floor}}
| {{ltt|c/numeric/math/floor|floorl}}
|-
! fma
| {{ltt|c/numeric/math/fma|fmaf}}
| {{ltt|c/numeric/math/fma|fma}}
| {{ltt|c/numeric/math/fma|fmal}}
|-
! fmax
| {{ltt|c/numeric/math/fmax|fmaxf}}
| {{ltt|c/numeric/math/fmax|fmax}}
| {{ltt|c/numeric/math/fmax|fmaxl}}
|-
! fmin
| {{ltt|c/numeric/math/fmin|fminf}}
| {{ltt|c/numeric/math/fmin|fmin}}
| {{ltt|c/numeric/math/fmin|fminl}}
|-
! fmod
| {{ltt|c/numeric/math/fmod|fmodf}}
| {{ltt|c/numeric/math/fmod|fmod}}
| {{ltt|c/numeric/math/fmod|fmodl}}
|-
! frexp
| {{ltt|c/numeric/math/frexp|frexpf}}
| {{ltt|c/numeric/math/frexp|frexp}}
| {{ltt|c/numeric/math/frexp|frexpl}}
|-
! hypot
| {{ltt|c/numeric/math/hypot|hypotf}}
| {{ltt|c/numeric/math/hypot|hypot}}
| {{ltt|c/numeric/math/hypot|hypotl}}
|-
! ilogb
| {{ltt|c/numeric/math/ilogb|ilogbf}}
| {{ltt|c/numeric/math/ilogb|ilogb}}
| {{ltt|c/numeric/math/ilogb|ilogbl}}
|-
! ldexp
| {{ltt|c/numeric/math/ldexp|ldexpf}}
| {{ltt|c/numeric/math/ldexp|ldexp}}
| {{ltt|c/numeric/math/ldexp|ldexpl}}
|-
! lgamma
| {{ltt|c/numeric/math/lgamma|lgammaf}}
| {{ltt|c/numeric/math/lgamma|lgamma}}
| {{ltt|c/numeric/math/lgamma|lgammal}}
|-
! llrint
| {{ltt|c/numeric/math/rint|llrintf}}
| {{ltt|c/numeric/math/rint|llrint}}
| {{ltt|c/numeric/math/rint|llrintl}}
|-
! llround
| {{ltt|c/numeric/math/round|llroundf}}
| {{ltt|c/numeric/math/round|llround}}
| {{ltt|c/numeric/math/round|llroundl}}
|-
! log10
| {{ltt|c/numeric/math/log10|log10f}}
| {{ltt|c/numeric/math/log10|log10}}
| {{ltt|c/numeric/math/log10|log10l}}
|-
! log1p
| {{ltt|c/numeric/math/log1p|log1pf}}
| {{ltt|c/numeric/math/log1p|log1p}}
| {{ltt|c/numeric/math/log1p|log1pl}}
|-
! log2
| {{ltt|c/numeric/math/log2|log2f}}
| {{ltt|c/numeric/math/log2|log2}}
| {{ltt|c/numeric/math/log2|log2l}}
|-
! logb
| {{ltt|c/numeric/math/logb|logbf}}
| {{ltt|c/numeric/math/logb|logb}}
| {{ltt|c/numeric/math/logb|logbl}}
|-
! lrint
| {{ltt|c/numeric/math/rint|lrintf}}
| {{ltt|c/numeric/math/rint|lrint}}
| {{ltt|c/numeric/math/rint|lrintl}}
|-
! lround
| {{ltt|c/numeric/math/round|lroundf}}
| {{ltt|c/numeric/math/round|lround}}
| {{ltt|c/numeric/math/round|lroundl}}
|-
! nearbyint
| {{ltt|c/numeric/math/nearbyint|nearbyintf}}
| {{ltt|c/numeric/math/nearbyint|nearbyint}}
| {{ltt|c/numeric/math/nearbyint|nearbyintl}}
|-
! nextafter
| {{ltt|c/numeric/math/nextafter|nextafterf}}
| {{ltt|c/numeric/math/nextafter|nextafter}}
| {{ltt|c/numeric/math/nextafter|nextafterl}}
|-
! nexttoward
| {{ltt|c/numeric/math/nextafter|nexttowardf}}
| {{ltt|c/numeric/math/nextafter|nexttoward}}
| {{ltt|c/numeric/math/nextafter|nexttowardl}}
|-
! remainder
| {{ltt|c/numeric/math/remainder|remainderf}}
| {{ltt|c/numeric/math/remainder|remainder}}
| {{ltt|c/numeric/math/remainder|remainderl}}
|-
! remquo
| {{ltt|c/numeric/math/remquo|remquof}}
| {{ltt|c/numeric/math/remquo|remquo}}
| {{ltt|c/numeric/math/remquo|remquol}}
|-
! rint
| {{ltt|c/numeric/math/rint|rintf}}
| {{ltt|c/numeric/math/rint|rint}}
| {{ltt|c/numeric/math/rint|rintl}}
|-
! round
| {{ltt|c/numeric/math/round|roundf}}
| {{ltt|c/numeric/math/round|round}}
| {{ltt|c/numeric/math/round|roundl}}
|-
! scalbln
| {{ltt|c/numeric/math/scalbn|scalblnf}}
| {{ltt|c/numeric/math/scalbn|scalbln}}
| {{ltt|c/numeric/math/scalbn|scalblnl}}
|-
! scalbn
| {{ltt|c/numeric/math/scalbn|scalbnf}}
| {{ltt|c/numeric/math/scalbn|scalbn}}
| {{ltt|c/numeric/math/scalbn|scalbnl}}
|-
! tgamma
| {{ltt|c/numeric/math/tgamma|tgammaf}}
| {{ltt|c/numeric/math/tgamma|tgamma}}
| {{ltt|c/numeric/math/tgamma|tgammal}}
|-
! trunc
| {{ltt|c/numeric/math/trunc|truncf}}
| {{ltt|c/numeric/math/trunc|trunc}}
| {{ltt|c/numeric/math/trunc|truncl}}
|}

===Complex-only functions===

For all complex number functions that do not have real counterparts, a type-generic macro {{tt|cXXX}} exists, which calls either of the variants of a complex function:
* {{c|float complex}} variant {{tt|cXXXf}}
* {{c|double complex}} variant {{tt|cXXX}}
* {{c|long double complex}} variant {{tt|cXXXl}}

The function to call is determined as follows:

* If any of the arguments for the generic parameters is real, complex, or imaginary, then the appropriate complex function is called.

{| class=&quot;wikitable&quot;
|-
! Type-generic macro
! colspan=3 | Complex function &lt;br&gt; variants 
|-
! style=&quot;height: 8em;&quot; | &amp;nbsp;
! {{vertical|{{c|float}}}}
! {{vertical|{{c|double}}}} 
! {{vertical|{{c|long double}}}} 
|-
! carg
| {{ltt|c/numeric/complex/carg|cargf}}
| {{ltt|c/numeric/complex/carg|carg}}
| {{ltt|c/numeric/complex/carg|cargl}}
|-
! conj
| {{ltt|c/numeric/complex/conj|conjf}}
| {{ltt|c/numeric/complex/conj|conj}}
| {{ltt|c/numeric/complex/conj|conjl}}
|-
! creal
| {{ltt|c/numeric/complex/creal|crealf}}
| {{ltt|c/numeric/complex/creal|creal}}
| {{ltt|c/numeric/complex/creal|creall}}
|-
! cimag
| {{ltt|c/numeric/complex/cimag|cimagf}}
| {{ltt|c/numeric/complex/cimag|cimag}}
| {{ltt|c/numeric/complex/cimag|cimagl}}
|-
! cproj
| {{ltt|c/numeric/complex/cproj|cprojf}}
| {{ltt|c/numeric/complex/cproj|cproj}}
| {{ltt|c/numeric/complex/cproj|cprojl}}
|}

=== Example ===
{{example
|code=
#include &lt;stdio.h&gt;
#include &lt;tgmath.h&gt;

int main(void)
{
    int i = 2;
    printf(&quot;sqrt(2) = %f\n&quot;, sqrt(i)); // argument type is int, calls sqrt

    float f = 0.5;
    printf(&quot;sin(0.5f) = %f\n&quot;, sin(f));   // argument type is float, calls sinf

    float complex dc = 1 + 0.5*I;
    float complex z = sqrt(dc);      // argument type is float complex, calls csqrtf
    printf(&quot;sqrt(1 + 0.5i) = %f+%fi\n&quot;,
           creal(z),  // argument type is float complex, calls crealf
           cimag(z)); // argument type is float complex, calls cimagf
}
|output=
sqrt(2) = 1.414214
sin(0.5f) = 0.479426
sqrt(1 + 0.5i) = 1.029086+0.242934i
}}

===References===
{{ref std c11}}
{{ref std | section=7.25 | title=Type-generic math &lt;tgmath.h&gt; | p=373-375}}
{{ref std c99}}
{{ref std | section=7.22 | title=Type-generic math &lt;tgmath.h&gt; | p=335-337}}
{{ref std end}}

[[ar:c/numeric/tgmath]]
[[cs:c/numeric/tgmath]]
[[de:c/numeric/tgmath]]
[[es:c/numeric/tgmath]]
[[fr:c/numeric/tgmath]]
[[it:c/numeric/tgmath]]
[[ja:c/numeric/tgmath]]
[[ko:c/numeric/tgmath]]
[[pl:c/numeric/tgmath]]
[[pt:c/numeric/tgmath]]
[[ru:c/numeric/tgmath]]
[[tr:c/numeric/tgmath]]
[[zh:c/numeric/tgmath]]</text>
      <sha1>re777jt9k3nogzk0k605w4nrkhhixg1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/preprocessor</title>
    <ns>0</ns>
    <id>12665</id>
    <revision>
      <id>89214</id>
      <parentid>79077</parentid>
      <timestamp>2017-01-10T16:58:20Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>correction</comment>
      <text xml:space="preserve" bytes="2820">{{title|Preprocessor}}
{{c/preprocessor/navbar}}
The preprocessor is executed at [[c/language/translation_phases|translation phase 4]], before the compilation. The result of preprocessing is single file which is then passed to the actual compiler.

===Directives===

The preprocessing directives control the behavior of the preprocessor. Each directive occupies one line and has the following format:

* {{tt|#}} character
* preprocessing instruction (one of {{tt|define}}, {{tt|undef}}, {{tt|include}}, {{tt|if}}, {{tt|ifdef}}, {{tt|ifndef}}, {{tt|else}}, {{tt|elif}}, {{tt|endif}}, {{tt|line}}, {{tt|error}}, {{tt|pragma}}) &lt;ref&gt;These are the directives defined by the standard. The standard does not define behavior for other directives: they might be ignored, have some useful meaning, or make the program ill-formed. Even if otherwise ignored, they are removed from the source code when the preprocessor is done. A common non-standard extension is the directive {{tt|#warning}} which emits a user-defined message during compilation.&lt;/ref&gt;
* arguments (depends on the instruction)
* line break

The null directive ({{tt|#}} followed by a line break) is allowed and has no effect.

===Capabilities===

The preprocessor has the source file translation capabilities:

* '''{{rl | conditional | conditionally}}''' compile of parts of source file (controlled by directive {{tt|#if}}, {{tt|#ifdef}}, {{tt|#ifndef}}, {{tt|#else}}, {{tt|#elif}} and {{tt|#endif}}).
* '''{{rl | replace}}''' text macros while possibly concatenating or quoting identifiers (controlled by directives {{tt|#define}} and {{tt|#undef}}, and operators {{tt|#}} and {{tt|##}})
* '''{{rl|include}}''' other files (controlled by directive {{tt|#include}})
* cause an '''{{rl|error}}''' (controlled by directive {{tt|#error}})

The following aspects of the preprocessor can be controlled:
* '''{{rl|impl | implementation defined}}''' behavior (controlled by directive {{tt|#pragma}} {{rev inl|since=c99|and operator {{tt|_Pragma}}}})
* '''{{rl|line | file name and line information}}''' available to the preprocessor (controlled by directives {{tt|#line}})

===Footnotes===
&lt;references/&gt;

===References===
{{ref std c11}}
{{ref std | section=6.10 | title=Preprocessing directives | p=160-178}}
{{ref std c99}}
{{ref std | section=6.10 | title=Preprocessing directives | p=145-162}}
{{ref std c89}}
{{ref std | section=3.8  | title=PREPROCESSING DIRECTIVES}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/preprocessor | Preprocessor}}
{{dsc end}}

[[ar:c/preprocessor]]
[[cs:c/preprocessor]]
[[de:c/preprocessor]]
[[es:c/preprocessor]]
[[fr:c/preprocessor]]
[[it:c/preprocessor]]
[[ja:c/preprocessor]]
[[ko:c/preprocessor]]
[[pl:c/preprocessor]]
[[pt:c/preprocessor]]
[[ru:c/preprocessor]]
[[tr:c/preprocessor]]
[[zh:c/preprocessor]]</text>
      <sha1>mfkw551k7rr5w3vd8ea3ui4noermzx6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/preprocessor/conditional</title>
    <ns>0</ns>
    <id>12666</id>
    <revision>
      <id>85169</id>
      <parentid>85168</parentid>
      <timestamp>2016-04-05T18:51:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4813">{{title|Conditional inclusion}}
{{c/preprocessor/navbar}}
The preprocessor supports conditional compilation of parts of a source file. This behavior is controlled by {{tt|#if}}, {{tt|#else}}, {{tt|#elif}}, {{tt|#ifdef}}, {{tt|#ifndef}} and {{tt|#endif}} directives.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|#if}} {{spar|expression}} }}
{{sdsc | {{ttb|#ifdef}} {{spar|expression}} }}
{{sdsc | {{ttb|#ifndef}} {{spar|expression}} }}
{{sdsc | {{ttb|#elif}} {{spar|expression}} }}
{{sdsc | {{ttb|#else}} }}
{{sdsc | {{ttb|#endif}} }}
{{sdsc end}}

===Explanation===

The conditional preprocessing block starts with {{tt|#if}}, {{tt|#ifdef}} or {{tt|#ifndef}} directive, then optionally includes any number of {{tt|#elif}} directives, then optionally includes at most one {{tt|#else}} directive and is terminated with the {{tt|#endif}} directive. Any inner conditional preprocessing blocks are processed separately.

Each of {{tt|#if}}, {{tt|#elif}}, {{tt|#else}}, {{tt|#ifdef}} and {{tt|#ifndef}} directives control a code block until the first {{tt|#elif}}, {{tt|#else}}, {{tt|#endif}} directive not belonging to any inner conditional preprocessing blocks. 

{{tt|#if}}, {{tt|#ifdef}} and {{tt|#ifndef}}  directives test the specified condition (see below), and if it evaluates to true, compiles the controlled code block. In that case subsequent {{tt|#else}} and {{tt|#elif}} directives are ignored. Otherwise, if the specified condition evaluates false, the controlled code block is skipped and the subsequent {{tt|#else}} or {{tt|#elif}} directive (if any) is processed. In the former case, the code block controlled by the {{tt|#else}} directive is unconditionally compiled. In the latter case, the {{tt|#elif}} directive acts as if it were a {{tt|#if}} directive: checks for condition, compiles or skips the controlled code block based on the result, and in the latter case processes subsequent {{tt|#elif}} and {{tt|#else}} directives. The conditional preprocessing block is terminated by the {{tt|#endif}} directive.

===Conditional evaluation===

===={{tt|#if, #elif}}====

The {{spar|expression}} is a constant expression, using only [[cpp/language#Literals|literals]] and identifiers, defined using {{ltt|c/preprocessor/replace | #define}} directive. Any identifier, which is not literal, non defined using {{ltt|c/preprocessor/replace | #define}} directive, evaluates to ''0''. 

The expression may contain unary operators in form {{tt|defined}}&amp;nbsp;{{spar|identifier}} or  {{tt|defined (}}{{spar|identifier}}{{tt|)}} which return {{c|1}} if the {{spar|identifier}} was defined using {{ltt|c/preprocessor/replace | #define}} directive and ''0'' otherwise. If the {{spar|expression}} evaluates to nonzero value, the controlled code block is included and skipped otherwise. If any used identifier is not a constant, it is replaced with {{c|0}}.

{{rev begin}}
{{rev|until=c11&lt;!--post-C11 DR 412--&gt;|
Note: {{tt|#if cond1}} ... {{tt|#elif cond2}} is different from {{tt|#if cond1}} ... {{tt|#else}} followed by {{tt|#if cond3}} because if {{tt|cond1}} is true, the second {{tt|#if}} is skipped and {{tt|cond3}} does not need to be well-formed, while #elif's {{tt|cond2}} must be a valid expression.}}{{rev end}}

===={{tt|#ifdef, #ifndef}}====

Checks if the identifier was defined using {{ltt|c/preprocessor/replace | #define}} directive. 

{{tt|#ifdef}}&amp;nbsp;{{spar|identifier}} is essentially equivalent to {{tt|#if defined(}}&amp;nbsp;{{spar|identifier}}{{tt|)}}.

{{tt|#ifndef}}&amp;nbsp;{{spar|identifier}} is essentially equivalent to {{tt|#if !defined(}}&amp;nbsp;{{spar|identifier}}{{tt|)}}.

===Example===
{{example|
|code=
#define ABCD 2
#include &lt;stdio.h&gt;

int main(void)
{

#ifdef ABCD
    printf(&quot;1: yes\n&quot;);
#else
    printf(&quot;1: no\n&quot;);
#endif

#ifndef ABCD
    printf(&quot;2: no1\n&quot;);
#elif ABCD == 2
    printf(&quot;2: yes\n&quot;);
#else
    printf(&quot;2: no2\n&quot;);
#endif

#if !defined(DCBA) &amp;&amp; (ABCD &lt; 2*4-3)
    printf(&quot;3: yes\n&quot;);
#endif
}
|output=
1: yes
2: yes
3: yes
}}

===References===
{{ref std c11}}
{{ref std | section=6.10.1 | title=Conditional inclusion | p=162-164}}
{{ref std c99}}
{{ref std | section=6.10.1 | title=Conditional inclusion | p=147-149}}
{{ref std c89}}
{{ref std | section=3.8.1  | title=Conditional inclusion}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/preprocessor/conditional | Conditional inclusion}}
{{dsc end}}

[[ar:c/preprocessor/conditional]]
[[cs:c/preprocessor/conditional]]
[[de:c/preprocessor/conditional]]
[[es:c/preprocessor/conditional]]
[[fr:c/preprocessor/conditional]]
[[it:c/preprocessor/conditional]]
[[ja:c/preprocessor/conditional]]
[[ko:c/preprocessor/conditional]]
[[pl:c/preprocessor/conditional]]
[[pt:c/preprocessor/conditional]]
[[ru:c/preprocessor/conditional]]
[[tr:c/preprocessor/conditional]]
[[zh:c/preprocessor/conditional]]</text>
      <sha1>pk2afpjmpot1ed9lzep4hk3sarylbu0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/preprocessor/error</title>
    <ns>0</ns>
    <id>12673</id>
    <revision>
      <id>79083</id>
      <parentid>76127</parentid>
      <timestamp>2015-06-23T10:31:24Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1210">{{title|Error directive}}
{{c/preprocessor/navbar}}
Shows the given error message and renders the program ill-formed.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|#error}} {{spar|error_message}} }}
{{sdsc end}}

===Explanation===

After encountering the {{tt|#error}} directive, an implementation displays the diagnostic message {{spar|error_message}} and renders the program ill-formed (the compilation stops). 

''error_message'' can consist of several words not necessarily in quotes.

===References===
{{ref std c11}}
{{ref std | section=6.10.5 | title=Error directive | p=174}}
{{ref std c99}}
{{ref std | section=6.10.5 | title=Error directive | p=159}}
{{ref std c89}}
{{ref std | section=3.8.5  | title=Error directive}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/preprocessor/error | Error directive}}
{{dsc end}}

[[ar:c/preprocessor/error]]
[[cs:c/preprocessor/error]]
[[de:c/preprocessor/error]]
[[es:c/preprocessor/error]]
[[fr:c/preprocessor/error]]
[[it:c/preprocessor/error]]
[[ja:c/preprocessor/error]]
[[ko:c/preprocessor/error]]
[[pl:c/preprocessor/error]]
[[pt:c/preprocessor/error]]
[[ru:c/preprocessor/error]]
[[tr:c/preprocessor/error]]
[[zh:c/preprocessor/error]]</text>
      <sha1>9jpejyqdqlzy2v3ntb9gnvxohgqin2w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/preprocessor/impl</title>
    <ns>0</ns>
    <id>12674</id>
    <revision>
      <id>87609</id>
      <parentid>81100</parentid>
      <timestamp>2016-09-14T13:53:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+non-standard pragmas</comment>
      <text xml:space="preserve" bytes="4564">{{title|Implementation defined behavior control}}
{{c/preprocessor/navbar}}
Implementation defined behavior is controlled by {{tt|#pragma}} directive.

===Syntax===

{{sdsc begin}}
{{sdsc |num=1| {{ttb|#pragma}} {{spar|pragma_params}} }}
{{sdsc |num=2|notes={{mark since c99}}| {{ttb|_Pragma}} {{ttb|(}} {{spar|string-literal}} {{ttb|)}} }}
{{sdsc end}}
@1@ Behaves in an implementation-defined manner (unless {{spar|pragma_params}} is one of the standard pragmas shown below.
@2@ Removes the encoding prefix (if any), the outer quotes, and leading/trailing whitespace from {{spar|string-literal}}, replaces each {{tt|\&quot;}} with {{tt|&quot;}} and each {{tt|\\}} with {{tt|\}}, then tokenizes the result (as in [[c/language/translation_phases|translation stage 3]]), and then uses the result as if the input to {{tt|#pragma}} in {{v|1}}.

===Explanation===

The pragma directive controls implementation-specific behavior of the compiler, such as disabling compiler warnings or changing alignment requirements. Any pragma that is not recognized is ignored.

===Standard pragmas===

The following three pragmas are defined by the language standard:

{{sdsc begin}}
{{sdsc | num = 1 | {{ttb|#pragma STDC FENV_ACCESS }}{{spar|arg}}}}
{{sdsc | num = 2 | {{ttb|#pragma STDC FP_CONTRACT }}{{spar|arg}}}}
{{sdsc | num = 3 | {{ttb|#pragma STDC CX_LIMITED_RANGE }}{{spar|arg}}}}
{{sdsc end}}

where {{spar|arg}} is either {{ttb|ON}} or {{ttb|OFF}} or {{ttb|DEFAULT}}. 

@1@ If set to {{ttb|ON}}, informs the compiler that the program will access or modify [[c/numeric/fenv|floating-point environment]], which means that optimizations that could subvert flag tests and mode changes (e.g., global common subexpression elimination, code motion, and constant folding) are prohibited. The default value is implementation-defined, usually {{ttb|OFF}}.

@2@ Allows ''contracting'' of floating-point expressions, that is optimizations that omit rounding errors and floating-point exceptions that would be observed if the expression was evaluated exactly as written. For example, allows the implementation of {{c|(x*y) + z}} with a single fused multiply-add CPU instruction. The default value is implementation-defined, usually {{ttb|ON}}.

@3@ Informs the compiler that multiplication, division, and absolute value of complex numbers may use simplified mathematical formulas {{math|(x+iy)×(u+iv) {{=}} (xu-yv)+i(yu+xv)}}, {{math|(x+iy)/(u+iv) {{=}} [(xu+yv)+i(yu-xv)]/(u{{su|p=2}}+v{{su|p=2}})}}, and {{math|{{!}}x+iy{{!}} {{=}} {{mrad|x{{su|p=2}}+y{{su|p=2}}}}}}, despite the possibility of intermediate overflow. In other words, the programmer guarantees that the range of the values that will be passed to those function is limited. The default value is {{ttb|OFF}}

===Non-standard pragmas===
====#pragma once====
{{cpp/preprocessor/pragma_once}}
====#pragma pack====
{{todo}}

===References===
{{ref std c11}}
{{ref std | section=6.10.9 | title=Pragma operator | p=178}}
{{ref std c99}}
{{ref std | section=6.10.6 | title=Pragma directive | p=159}}
{{ref std c89}}
{{ref std | section=3.8.6  | title=Pragma directive}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/preprocessor/impl | Implementation defined behavior control}}
{{dsc end}}

===External links===

* [http://msdn.microsoft.com/en-us/library/d9x1s805(v=VS.100).aspx C++ pragmas in Visual Studio 2010]
* [http://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Pragmas.html#Pragmas Pragmas] accepted by GCC 4.9.2
* [http://www-01.ibm.com/support/knowledgecenter/SSGH2K_13.1.0/com.ibm.xlc131.aix.doc/compiler_ref/pragma_descriptions.html?lang=en-us Individual pragma descriptions] and [http://www-01.ibm.com/support/knowledgecenter/SSGH2K_13.1.0/com.ibm.xlc131.aix.doc/language_ref/std_pragmas.html?lang=en-us Standard pragmas] in IBM AIX XL C 13.1
* [http://download.oracle.com/docs/cd/E19422-01/819-3690/Pragmas_App.html#73499 Appendix B. Pragmas] in Sun Studio 11 C++ User's Guide
* [http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/cref_cls/common/cppref_pragma_ovrvw.htm Intel C++ compiler pragmas]
* [http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/Online_Help/pragmas.htm HP aCC compiler pragmas]

[[ar:c/preprocessor/impl]]
[[cs:c/preprocessor/impl]]
[[de:c/preprocessor/impl]]
[[es:c/preprocessor/impl]]
[[fr:c/preprocessor/impl]]
[[it:c/preprocessor/impl]]
[[ja:c/preprocessor/impl]]
[[ko:c/preprocessor/impl]]
[[pl:c/preprocessor/impl]]
[[pt:c/preprocessor/impl]]
[[ru:c/preprocessor/impl]]
[[tr:c/preprocessor/impl]]
[[zh:c/preprocessor/impl]]</text>
      <sha1>rh6724h011kg26pvk2eg8ig1fc048dj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/preprocessor/include</title>
    <ns>0</ns>
    <id>12667</id>
    <revision>
      <id>79080</id>
      <parentid>76124</parentid>
      <timestamp>2015-06-23T10:21:49Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1834">{{title|Source file inclusion}}
{{c/preprocessor/navbar}}
Includes another source file into the current source file at the line immediately after the directive.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|#include &amp;lt;}}{{spar|filename}}{{ttb|&amp;gt;}} }}
{{sdsc | num=2 | {{ttb|#include &quot;}}{{spar|filename}}{{ttb|&quot;}} }}
{{sdsc end}}

===Explanation===

Includes source file, identified by {{spar|filename}}, into the current source file at the line immediately after the directive.

The first version of the directive searches only standard include directories. The standard C++ library, as well as standard C library, is implicitly included in standard include directories. The standard include directories can be controlled by the user through compiler options. 

Version (2) first searches the directory where the current file resides and, only if the file is not found, searches the standard include directories.

In the case the file is not found, the program is ill-formed.

===References===
{{ref std c11}}
{{ref std | section=6.10.2 | title=Source file inclusion | p=164-166}}
{{ref std c99}}
{{ref std | section=6.10.2 | title=Source file inclusion | p=149-151}}
{{ref std c89}}
{{ref std | section=3.8.2  | title=Source file inclusion}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc|[[c/header]] | a list of C Standard Library header files}}
{{dsc see cpp | cpp/preprocessor/include | Source file inclusion}}
{{dsc end}}

[[ar:c/preprocessor/include]]
[[cs:c/preprocessor/include]]
[[de:c/preprocessor/include]]
[[es:c/preprocessor/include]]
[[fr:c/preprocessor/include]]
[[it:c/preprocessor/include]]
[[ja:c/preprocessor/include]]
[[ko:c/preprocessor/include]]
[[pl:c/preprocessor/include]]
[[pt:c/preprocessor/include]]
[[ru:c/preprocessor/include]]
[[tr:c/preprocessor/include]]
[[zh:c/preprocessor/include]]</text>
      <sha1>b3es897rup6sts6jo8bs06s7421ql5t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/preprocessor/line</title>
    <ns>0</ns>
    <id>12675</id>
    <revision>
      <id>79082</id>
      <parentid>76126</parentid>
      <timestamp>2015-06-23T10:29:25Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2440">{{title|Filename and line information}}
{{c/preprocessor/navbar}}

Changes the current line number and file name in the preprocessor.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|#line}} {{spar|lineno}}}}
{{sdsc | num=2 | {{ttb|#line}} {{spar|lineno}} {{ttb|&quot;}}{{spar|filename}}{{ttb|&quot;}} }}
{{sdsc end}}

===Explanation===
@1@ Changes the current preprocessor line number to {{spar|lineno}}. Occurrences of the macro {{c|__LINE__}} beyond this point will expand to {{spar|lineno}} plus the number of actual source code lines encountered since.
@2@ Also changes the current preprocessor file name to {{spar|filename}}. Occurrences of the macro {{c|__FILE__}} beyond this point will produce {{spar|filename}}.

Any preprocessing tokens (macro constants or expressions) are permitted as arguments to {{tt|#line}} as long as they expand to a valid decimal integer optionally following a valid character string.

===Notes===
This directive is used by some automatic code generation tools which produce C++ source files from a file written in another language. In that case, {{tt|#line}} directives may be inserted in the generated C++ file referencing line numbers and the file name of the original (human-editable) source file.

The line number following the directive {{c|#line __LINE__}} is implementation-defined (there are two possible values that __LINE__ can expand to in this case: number of endlines seen so far, or number of endlines seen so far plus the endline that ends the #line directive)

===Example===
{{example | code=
#include &lt;assert.h&gt;
#define FNAME &quot;test.c&quot;
int main(void)
{
#line 777 FNAME
        assert(2+2 == 5);
}
 | p=true
 | output=
test: test.c:777: int main(): Assertion `2+2 == 5' failed.
}}

===References===
{{ref std c11}}
{{ref std | section=6.10.4 | title=Line control | p=173}}
{{ref std c99}}
{{ref std | section=6.10.4 | title=Line control | p=158}}
{{ref std c89}}
{{ref std | section=3.8.4  | title=Line control}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/preprocessor/line | Filename and line information}}
{{dsc end}}

[[ar:c/preprocessor/line]]
[[cs:c/preprocessor/line]]
[[de:c/preprocessor/line]]
[[es:c/preprocessor/line]]
[[fr:c/preprocessor/line]]
[[it:c/preprocessor/line]]
[[ja:c/preprocessor/line]]
[[ko:c/preprocessor/line]]
[[pl:c/preprocessor/line]]
[[pt:c/preprocessor/line]]
[[ru:c/preprocessor/line]]
[[tr:c/preprocessor/line]]
[[zh:c/preprocessor/line]]</text>
      <sha1>42sdovd0h59ii8csisjqwvc2ht4pbn2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/preprocessor/replace</title>
    <ns>0</ns>
    <id>12671</id>
    <revision>
      <id>92041</id>
      <parentid>88412</parentid>
      <timestamp>2017-04-03T20:53:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note the rule about formatting of dates less than 10 in __DATE__ here too</comment>
      <text xml:space="preserve" bytes="11325">{{title|Replacing text macros}}
{{c/preprocessor/navbar}}
The preprocessor supports text macro replacement and function-like text macro replacement.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|#define}} {{spar|identifier}} {{spar|replacement-list}}{{mark optional}} }}
{{sdsc | num=2 | {{ttb|#define}} {{spar|identifier}}{{ttb|(}} {{spar|parameters}} {{ttb|)}} {{spar|replacement-list}} }}
{{sdsc | num=3 | {{ttb|#define}} {{spar|identifier}}{{ttb|(}} {{spar|parameters}}{{ttb|, ... )}} {{spar|replacement-list}} |notes={{mark since c99}}}}
{{sdsc | num=4 | {{ttb|#define}} {{spar|identifier}}{{ttb|( ... )}} {{spar|replacement-list}} |notes={{mark since c99}}}}
{{sdsc | num=5 | {{ttb|#undef }} {{spar|identifier}} }}
{{sdsc end}}

===Explanation===

===={{tt|#define}} directives====

The {{tt|#define}} directives define the {{spar|identifier}} as a macro, that is they instruct the compiler to replace all successive occurrences of {{spar|identifier}} with {{spar|replacement-list}}, which can be optionally additionally processed. If the identifier is already defined as any type of macro, the program is ill-formed unless the definitions are identical. 

=====Object-like macros=====

Object-like macros replace every occurrence of a defined {{spar|identifier}} with {{spar|replacement-list}}. Version (1) of the {{tt|#define}} directive behaves exactly like that.

=====Function-like macros=====

Function-like macros replace each occurrence of a defined {{spar|identifier}} with {{spar|replacement-list}}, additionally taking a number of arguments, which then replace corresponding occurrences of any of the {{spar|parameters}} in the {{spar|replacement-list}}. 

The syntax of a function-like macro invocation is similar to the syntax of a function call: each instance of the macro name followed by a ( as the next preprocessing token introduces the sequence of tokens that is replaced by the replacement-list. The sequence is terminated by the matching ) token, skipping intervening matched pairs of left and right parentheses.

The number of arguments must be the same as the number of arguments in the macro definition ({{spar|parameters}}) or the program is ill-formed. If the identifier is not in functional-notation, i.e. does not have parentheses after itself, it is not replaced at all.

Version (2) of the {{tt|#define}} directive defines a simple function-like macro.

Version (3) of the {{tt|#define}} directive defines a function-like macro with variable number of arguments. The additional arguments can be accessed using {{tt|__VA_ARGS__}} identifier, which is then replaced with arguments, supplied with the identifier to be replaced.

Version (4) of the {{tt|#define}} directive defines a function-like macro with variable number of arguments, but no regular arguments. The arguments can be accessed only with {{tt|__VA_ARGS__}} identifier, which is then replaced with arguments, supplied with identifier to be replaced.

Note: if an argument of a function-like macro includes commas that are not protected by matched pairs of left and right parentheses (such as {{c|macro(array[x {{=}} y, x + 1])}}), the comma is interpreted as macro argument separator, causing a compilation failure due to argument count mismatch.

===={{tt|#}} and {{tt|##}} operators====

In function-like macros, a {{tt|#}} operator before an identifier in the {{spar|replacement-list}} runs the identifier through parameter replacement and encloses the result in quotes, effectively creating a string literal. In addition, the preprocessor adds backslashes to escape the quotes surrounding embedded string literals, if any, and doubles the backslashes within the string as necessary. All leading and trailing whitespace is removed, and any sequence of whitespace in the middle of the text (but not inside embedded string literals) is collapsed to a single space. This operation is called &quot;stringification&quot;. If the result of stringification is not a valid string literal, the behavior is undefined.

{{rev begin}}
{{rev|since=c99|
When {{tt|#}} appears before {{tt|__VA_ARGS__}}, the entire expanded __VA_ARGS__ is enclosed in quotes:
{{source|1=
#define showlist(...) puts(#__VA_ARGS__)
showlist();            // expands to puts(&quot;&quot;)
showlist(1, &quot;x&quot;, int); // expands to puts(&quot;1, \&quot;x\&quot;, int&quot;)
}}
}}
{{rev end}}

A {{tt|##}} operator between any two successive identifiers in the {{spar|replacement-list}} runs parameter replacement on the two identifiers and then concatenates the result. This operation is called &quot;concatenation&quot; or &quot;token pasting&quot;. Only tokens that form a valid token together may be pasted: identifiers that form a longer identifier, digits that form a number, or operators {{tt|+}} and {{tt|{{=}}}} that form a {{tt|+{{=}}}}. A comment cannot be created by pasting {{tt|/}} and {{tt|*}} because comments are removed from text before macro substitution is considered. If the result of concatenation is not a valid token, the behavior is undefined.

Note: some compilers offer an extension that allows ## to appear after a comma and before __VA_ARGS__, in which case the ## does nothing when __VA_ARGS__ is non-empty, but removes the comma when __VA_ARGS__ is empty: this makes it possible to define macros such as {{tt|fprintf (stderr, format, ##__VA_ARGS__)}}

===={{tt|#undef}} directive====

The {{tt|#undef}} directive undefines the {{spar|identifier}}, that is it cancels the previous definition of the {{spar|identifier}} by {{tt|#define}} directive. If the identifier does not have an associated macro, the directive is ignored.

===Predefined macros===
The following macro names are predefined in any translation unit:
{{dsc begin}}
{{dsc macro const | __STDC__ | nolink=true | expands to the integer constant {{c|1}}. This macro is intended to indicate a conforming implementation}}
{{dsc macro const | __STDC_VERSION__ | nolink=true | expands to an integer constant of type {{c|long}} whose value increases with each version of the C standard:
* {{c|199409L}} {{mark c95}}
* {{c|199901L}} {{mark c99}}
* {{c|201112L}} {{mark c11}} | notes={{mark c95}}}}
{{dsc macro const | __STDC_HOSTED__ | nolink=true | expands to the integer constant {{c|1}} if the implementation is hosted (runs under an OS), {{c|0}} if freestanding (runs without an OS) | notes={{mark c99}}}}
{{dsc macro const | __FILE__ | nolink=true | expands to the name of the current file, as a character string literal, can be changed by the {{rlp|line|#line}} directive}}
{{dsc macro const | __LINE__ | nolink=true | expands to the source file line number, an integer constant, can be changed by the {{rlp|line|#line}} directive}}
{{dsc macro const | __DATE__ | nolink=true | expands to the date of translation, a character string literal of the form &quot;Mmm dd yyyy&quot;. The name of the month is as if generated by {{lc|asctime}} and the first character of &quot;dd&quot; is a space if the day of the month is less than 10}}
{{dsc macro const | __TIME__ | nolink=true | expands to the time of translation, a character string literal of the form &quot;hh:mm:ss&quot;, as in the time generated by {{c|asctime()}}}}
{{dsc end}}

The following additional macro names may be predefined by an implementation:
{{dsc begin}}
{{dsc macro const | __STDC_ISO_10646__ | nolink=true | expands to an integer constant of the form {{tt|yyyymmL}}, if {{c|wchar_t}} uses Unicode, the date indicates the latest revision of Unicode supported| notes={{mark c99}}}}
{{dsc macro const | __STDC_IEC_559__ | nolink=true | expands to {{c|1}} if IEC 60559 is supported | notes={{mark c99}}}}
{{dsc macro const | __STDC_IEC_559_COMPLEX__ | nolink=true | expands to {{c|1}} if IEC 60559 complex arithmetic is supported | notes={{mark c99}}}}
{{dsc macro const | __STDC_UTF_16__ | nolink=true | expands to {{c|1}} if {{c|char16_t}} use UTF-16 encoding | notes={{mark c11}}}}
{{dsc macro const | __STDC_UTF_32__ | nolink=true | expands to {{c|1}} if {{c|char32_t}} use UTF-32 encoding | notes={{mark c11}}}}
{{dsc macro const | __STDC_MB_MIGHT_NEQ_WC__ | nolink=true | expands to {{c|1}} if wide character encoding of the basic character set may not equal their narrow encoding, such as on EBCDIC-based systems that use Unicode for wchar_t | notes={{mark c99}}}}
{{dsc macro const | __STDC_ANALYZABLE__ | nolink=true | expands to {{c|1}} if [[c/language/analyzability|analyzability]] is supported | notes={{mark c11}}}}
{{dsc macro const | __STDC_LIB_EXT1__ | nolink=true | expands to an integer constant {{c|201112L}} if [[c/error|bounds-checking interfaces]] are supported | notes={{mark c11}}}}
{{dsc macro const | __STDC_NO_ATOMICS__ | nolink=true | expands to {{c|1}} if [[c/language/atomic|atomic]] types and [[c/atomic|atomic operations library]] are not supported | notes={{mark c11}}}}
{{dsc macro const | __STDC_NO_COMPLEX__ | nolink=true | expands to {{c|1}} if [[c/language/arithmetic_types#Complex_floating_types|complex types]] and [[c/numeric/complex|complex math library]] are not supported | notes={{mark c11}}}}
{{dsc macro const | __STDC_NO_THREADS__ | nolink=true | expands to {{c|1}} if  [[c/thread|multithreading]] is not supported | notes={{mark c11}}}}
{{dsc macro const | __STDC_NO_VLA__ | nolink=true | expands to {{c|1}} if [[c/language/array#Variable-length_arrays|variable-length arrays]] are not supported | notes={{mark c11}}}}
{{dsc end}}

The values of these macros (except for {{tt|__FILE__}} and {{tt|__LINE__}}) remain constant throughout the translation unit. Attempts to redefine or undefine these macros result in undefined behavior.

{{rev begin}}
{{rev|since=c99|
The predefined variable {{c|__func__}} (see [[c/language/function definition#func|function definition]] for details) is not a preprocessor macro, even though it is sometimes used together with {{tt|__FILE__}} and {{tt|__LINE__}}, e.g. by {{lc|assert}}.
}}
{{rev end}}

===Example===
{{example | code=
#include &lt;stdio.h&gt;

//make function factory and use it
#define FUNCTION(name, a) int fun_##name(int x) { return (a)*x;}

FUNCTION(quadruple, 4)
FUNCTION(double, 2)

#undef FUNCTION
#define FUNCTION 34
#define OUTPUT(a) puts( #a )

int main(void)
{
    printf(&quot;quadruple(13): %d\n&quot;, fun_quadruple(13) );
    printf(&quot;double(21): %d\n&quot;, fun_double(21) );
    printf(&quot;%d\n&quot;, FUNCTION);
    OUTPUT(million);               //note the lack of quotes
}
| output=
quadruple(13): 52
double(21): 42
34
million
}}

===References===
{{ref std c11}}
{{ref std | section=6.10.3 | title=Macro replacement | p=166-173}}
{{ref std | section=6.10.8 | title=Predefined macro names | p=175-176}}
{{ref std c99}}
{{ref std | section=6.10.3 | title=Macro replacement | p=151-158}}
{{ref std | section=6.10.8 | title=Predefined macro names | p=160-161}}
{{ref std c89}}
{{ref std | section=3.8.3  | title=Macro replacement}}
{{ref std | section=3.8.8  | title=Predefined macro names}}
{{ref std end}}
===See also===
{{dsc begin}}
{{dsc see cpp | cpp/preprocessor/replace | Replacing text macros}}
{{dsc end}}

[[ar:c/preprocessor/replace]]
[[cs:c/preprocessor/replace]]
[[de:c/preprocessor/replace]]
[[es:c/preprocessor/replace]]
[[fr:c/preprocessor/replace]]
[[it:c/preprocessor/replace]]
[[ja:c/preprocessor/replace]]
[[ko:c/preprocessor/replace]]
[[pl:c/preprocessor/replace]]
[[pt:c/preprocessor/replace]]
[[ru:c/preprocessor/replace]]
[[tr:c/preprocessor/replace]]
[[zh:c/preprocessor/replace]]</text>
      <sha1>2n1g5mxzmx9hup11eoowpy1am0foqt9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program</title>
    <ns>0</ns>
    <id>5931</id>
    <revision>
      <id>78960</id>
      <parentid>78723</parentid>
      <timestamp>2015-06-13T10:57:09Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs to future library directions</comment>
      <text xml:space="preserve" bytes="2773">{{title|Program support utilities}}
{{c/program/navbar}}

===Program termination===

The following functions manage program termination and resource cleanup.

{{dsc begin}}
{{dsc header | stdlib.h}}
{{dsc inc | c/program/dsc abort}}
{{dsc inc | c/program/dsc exit}}
{{dsc inc | c/program/dsc quick_exit}}
{{dsc inc | c/program/dsc _Exit}}
{{dsc inc | c/program/dsc atexit}}
{{dsc inc | c/program/dsc at_quick_exit}}
{{dsc inc | c/program/dsc EXIT_status}}
{{dsc end}}

===Communicating with the environment===

{{dsc begin}}
{{dsc inc | c/program/dsc system}}
{{dsc inc | c/program/dsc getenv}}
{{dsc end}}

===Signals===

Several functions and macro constants for signal management are provided.

{{dsc begin}}
{{dsc header | signal.h}}
{{dsc inc | c/program/dsc signal}}
{{dsc inc | c/program/dsc raise}}
{{dsc typedef | c/program/sig_atomic_t | the integer type that can be accessed as an atomic entity from an asynchronous signal handler}}
{{dsc inc | c/program/dsc SIG_strategies}}
{{dsc inc | c/program/dsc SIG_ERR}}

{{dsc h2 | Signal types}}
{{dsc inc | c/program/dsc SIG_types}}
{{dsc end}}

===Non-local jumps===

{{dsc begin}}
{{dsc header | setjmp.h}}
{{dsc inc | c/program/dsc setjmp}}
{{dsc inc | c/program/dsc longjmp}}

{{dsc h2 | Types}}
{{dsc inc | c/program/dsc jmp_buf}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.13 | title=Nonlocal jumps &lt;setjmp.h&gt; | p=262-264}}
{{ref std | section=7.14 | title=Signal handling &lt;signal.h&gt; | p=265-267}}
{{ref std | section=7.22 | title=General utilities &lt;stdlib.h&gt; | p=340-360}}
{{ref std | section=7.31.7  | title=Signal handling &lt;signal.h&gt; | p=455}}
{{ref std | section=7.31.12 | title=General utilities &lt;stdlib.h&gt; | p=456}}
{{ref std c99}}
{{ref std | section=7.13 | title=Nonlocal jumps &lt;setjmp.h&gt; | p=243-245}}
{{ref std | section=7.14 | title=Signal handling &lt;signal.h&gt; | p=246-248}}
{{ref std | section=7.20 | title=General utilities &lt;stdlib.h&gt; | p=306-324}}
{{ref std | section=7.26.6  | title=Signal handling &lt;signal.h&gt; | p=401}}
{{ref std | section=7.26.10 | title=General utilities &lt;stdlib.h&gt; | p=402}}
{{ref std c89}}
{{ref std | section=4.6  | title=NON-LOCAL JUMPS &lt;setjmp.h&gt;}}
{{ref std | section=4.7  | title=SIGNAL HANDLING &lt;signal.h&gt;}}
{{ref std | section=4.10 | title=GENERAL UTILITIES &lt;stdlib.h&gt;}}
{{ref std | section=4.13.5 | title=Signal handling &lt;signal.h&gt;}}
{{ref std | section=7.13.7 | title=General utilities &lt;stdlib.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/utility/program |Program support utilities}}
{{dsc end}}

[[ar:c/program]]
[[cs:c/program]]
[[de:c/program]]
[[es:c/program]]
[[fr:c/program]]
[[it:c/program]]
[[ja:c/program]]
[[ko:c/program]]
[[pl:c/program]]
[[pt:c/program]]
[[ru:c/program]]
[[tr:c/program]]
[[zh:c/program]]</text>
      <sha1>8hwpdx6fk5hyk112uepzb86y6kj8ih5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/ Exit</title>
    <ns>0</ns>
    <id>6189</id>
    <revision>
      <id>87829</id>
      <parentid>87828</parentid>
      <timestamp>2016-10-05T11:15:15Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>destructors in C?</comment>
      <text xml:space="preserve" bytes="1921">{{c/title| _Exit}}
{{c/program/navbar}}
{{dcl begin}}
{{dcl | since=c99| until=c11|
void _Exit( int exit_code );
}}
{{dcl | since=c11|
_Noreturn void _Exit( int exit_code );
}}
{{dcl end}}

Causes normal program termination to occur without completely cleaning the resources.

Destructors of variables with automatic, thread local and static storage durations are not called. Functions passed to {{lc|at_quick_exit()}} or {{lc|atexit()}} are not called. Whether open resources such as files are closed is implementation defined. If {{tt|exit_code}} is {{lc|EXIT_FAILURE}}, an implementation-defined status, indicating ''unsuccessful'' termination, is returned. In other cases implementation-defined status value is returned. 

===Parameters===
{{par begin}}
{{par | exit_code | exit status of the program}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

/* _Exit does not call functions registered with atexit. */
void f1(void)
{
    puts(&quot;pushed first&quot;);
}
 
void f2(void)
{
    puts(&quot;pushed second&quot;);
}
 
int main(void)
{
    printf(&quot;Enter main()\n&quot;);
    atexit(f1);
    atexit(f2);
    fflush(stdout);   /* _Exit does not flush unwritten buffered data */
    _Exit(0);
}
 | output=
Enter main()
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.5 | title=The _Exit function | p=352}}
{{ref std c99}}
{{ref std | section=7.20.4.4 | title=The _Exit function | p=316}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc abort}}
{{dsc inc | c/program/dsc exit}}
{{dsc see cpp | cpp/utility/program/_Exit}}
{{dsc end}}

[[ar:c/program/_Exit]]
[[cs:c/program/_Exit]]
[[de:c/program/_Exit]]
[[es:c/program/_Exit]]
[[fr:c/program/_Exit]]
[[it:c/program/_Exit]]
[[ja:c/program/_Exit]]
[[ko:c/program/_Exit]]
[[pl:c/program/_Exit]]
[[pt:c/program/_Exit]]
[[ru:c/program/_Exit]]
[[tr:c/program/_Exit]]
[[zh:c/program/_Exit]]</text>
      <sha1>sxg7czek2bix8vp5153vfsm6wo8pzsn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/EXIT FAILURE</title>
    <ns>0</ns>
    <id>6340</id>
    <redirect title="c/program/EXIT status" />
    <revision>
      <id>22443</id>
      <timestamp>2012-04-19T20:18:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/program/EXIT status]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[c/program/EXIT_status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/EXIT SUCCESS</title>
    <ns>0</ns>
    <id>6339</id>
    <redirect title="c/program/EXIT status" />
    <revision>
      <id>22441</id>
      <timestamp>2012-04-19T20:17:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/program/EXIT status]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[c/program/EXIT_status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/EXIT status</title>
    <ns>0</ns>
    <id>6186</id>
    <revision>
      <id>76319</id>
      <parentid>76316</parentid>
      <timestamp>2015-02-15T16:03:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+missing c89 ref, +note on zero</comment>
      <text xml:space="preserve" bytes="2146">{{title|EXIT_SUCCESS, EXIT_FAILURE}}
{{c/program/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl |
#define EXIT_SUCCESS /*implementation defined*/
}}
{{dcl |
#define EXIT_FAILURE /*implementation defined*/
}}
{{dcl end}}

The {{tt|EXIT_SUCCESS}} and {{tt|EXIT_FAILURE}} macros expand into integral expressions that can be used as arguments to the {{lc|exit}} function (and, therefore, as the values to return from the [[c/language/main_function|main function]]), and indicate program execution status.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|EXIT_SUCCESS}} | successful execution of a program}}
{{dsc | {{tt|EXIT_FAILURE}} | unsuccessful execution of a program}}
{{dsc end}}

===Notes===
Both {{tt|EXIT_SUCCESS}} and the value zero indicate successful program execution status (see {{lc|exit}}), although it is not required that {{tt|EXIT_SUCCESS}} equals zero.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    FILE *fp = fopen(&quot;data.txt&quot;,&quot;r&quot;);
    if (fp == NULL)
    {
       fprintf(stderr,&quot;fopen() failed in file %s at line # %d&quot;, __FILE__,__LINE__);
       exit(EXIT_FAILURE);
    }

    /* Normal processing continues here. */
    fclose(fp);
    printf(&quot;Normal Return\n&quot;);
    
    return EXIT_SUCCESS;
}
 | output=
fopen() failed in file main.cpp at line # 9
}}

===References===
{{ref std c11}}
{{ref std | section=7.22/3 | title=General utilities &lt;stdlib.h&gt; | p=340}}
{{ref std c99}}
{{ref std | section=7.20/3 | title=General utilities &lt;stdlib.h&gt; | p=306}}
{{ref std c89}}
{{ref std | section=4.10 | title=General utilities &lt;stdlib.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/utility/program/EXIT_status | EXIT_SUCCESS | EXIT_FAILURE}}
{{dsc end}}

[[ar:c/program/EXIT_status]]
[[cs:c/program/EXIT_status]]
[[de:c/program/EXIT_status]]
[[es:c/program/EXIT_status]]
[[fr:c/program/EXIT_status]]
[[it:c/program/EXIT_status]]
[[ja:c/program/EXIT_status]]
[[ko:c/program/EXIT_status]]
[[pl:c/program/EXIT_status]]
[[pt:c/program/EXIT_status]]
[[ru:c/program/EXIT_status]]
[[tr:c/program/EXIT_status]]
[[zh:c/program/EXIT_status]]</text>
      <sha1>jmkmoey3jxtudz47qrik20v8kjz145a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIG DFL</title>
    <ns>0</ns>
    <id>6337</id>
    <redirect title="c/program/SIG strategies" />
    <revision>
      <id>22439</id>
      <timestamp>2012-04-19T20:17:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/program/SIG strategies]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[c/program/SIG_strategies]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIG ERR</title>
    <ns>0</ns>
    <id>8691</id>
    <revision>
      <id>78732</id>
      <parentid>76370</parentid>
      <timestamp>2015-06-08T11:39:56Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1645">{{title|SIG_ERR}}
{{c/program/navbar}}
{{ddcl | header=signal.h |
#define SIG_ERR /* implementation defined */
}}

A value of type {{tt|void (*)(int)}}. When returned by {{lc|signal}}, indicates that an error has occurred.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;signal.h&gt;
 
void signal_handler(int signal)
{
    printf(&quot;Received signal %d\n&quot;, signal);
}
 
int main(void)
{
    /* Install a signal handler. */
    if (signal(SIGTERM, signal_handler) == SIG_ERR)
    {
        printf(&quot;Error while installing a signal handler.\n&quot;);
        exit(EXIT_FAILURE);
    }
 
    printf(&quot;Sending signal %d\n&quot;, SIGTERM);
    if (raise(SIGTERM) != 0)
    {
        printf(&quot;Error while raising the SIGTERM signal.\n&quot;);
        exit(EXIT_FAILURE);
    }
 
    printf(&quot;Exit main()\n&quot;);
    return EXIT_SUCCESS;
}
 | output=
Sending signal 15
Received signal 15
Exit main()
}}

===References===
{{ref std c11}}
{{ref std | section=7.14/3 | title=Signal handling &lt;signal.h&gt; | p=265}}
{{ref std c99}}
{{ref std | section=7.14/3 | title=Signal handling &lt;signal.h&gt; | p=246}}
{{ref std c89}}
{{ref std | section=4.7    | title=SIGNAL HANDLING &lt;signal.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc signal}}
{{dsc see cpp | cpp/utility/program/SIG_ERR}}
{{dsc end}}

[[ar:c/program/SIG_ERR]]
[[cs:c/program/SIG_ERR]]
[[de:c/program/SIG_ERR]]
[[es:c/program/SIG_ERR]]
[[fr:c/program/SIG_ERR]]
[[it:c/program/SIG_ERR]]
[[ja:c/program/SIG_ERR]]
[[ko:c/program/SIG_ERR]]
[[pl:c/program/SIG_ERR]]
[[pt:c/program/SIG_ERR]]
[[ru:c/program/SIG_ERR]]
[[tr:c/program/SIG_ERR]]
[[zh:c/program/SIG_ERR]]</text>
      <sha1>0e8mnkdmubzi8xr3c76uxj0rio4mmeg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIG IGN</title>
    <ns>0</ns>
    <id>6338</id>
    <redirect title="c/program/SIG strategies" />
    <revision>
      <id>22440</id>
      <timestamp>2012-04-19T20:17:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[c/program/SIG strategies]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[c/program/SIG_strategies]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIG strategies</title>
    <ns>0</ns>
    <id>6181</id>
    <revision>
      <id>78731</id>
      <parentid>76365</parentid>
      <timestamp>2015-06-08T11:38:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1857">{{title|SIG_DFL, SIG_IGN}}
{{c/program/navbar}}
{{dcl begin}}
{{dcl header | signal.h}}
{{dcl |
#define SIG_DFL /*implementation defined*/
}}
{{dcl |
#define SIG_IGN /*implementation defined*/
}}
{{dcl end}}

The {{lc|SIG_DFL}} and {{lc|SIG_IGN}} macros expand into integral expressions that are not equal to an address of any function. The macros define signal handling strategies for {{c|signal()}} function.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|SIG_DFL}} | default signal handling}}
{{dsc | {{tt|SIG_IGN}} | signal is ignored}}
{{dsc end}}

===Example===
{{example
 |
 | code=
#include &lt;signal.h&gt;
#include &lt;stdio.h&gt;
 
int main(void)
{
    /* using the default signal handler */
    raise(SIGTERM);
    printf(&quot;Exit main()\n&quot;);   /* never reached */
}
 | output=
(none)
}}

===Example===
{{example
 |
 | code=
#include &lt;signal.h&gt;
#include &lt;stdio.h&gt;
 
int main(void)
{
    /* ignoring the signal */
    signal(SIGTERM, SIG_IGN);
    raise(SIGTERM);
    printf(&quot;Exit main()\n&quot;);
}
 | output=
Exit main()
}}
===References===
{{ref std c11}}
{{ref std | section=7.14/3 | title=Signal handling &lt;signal.h&gt; | p=265}}
{{ref std c99}}
{{ref std | section=7.14/3 | title=Signal handling &lt;signal.h&gt; | p=246}}
{{ref std c89}}
{{ref std | section=4.7    | title=SIGNAL HANDLING &lt;signal.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/utility/program/SIG_strategies | SIG_DFL | SIG_IGN}}
{{dsc end}}

[[ar:c/program/SIG_strategies]]
[[cs:c/program/SIG_strategies]]
[[de:c/program/SIG_strategies]]
[[es:c/program/SIG_strategies]]
[[fr:c/program/SIG_strategies]]
[[it:c/program/SIG_strategies]]
[[ja:c/program/SIG_strategies]]
[[ko:c/program/SIG_strategies]]
[[pl:c/program/SIG_strategies]]
[[pt:c/program/SIG_strategies]]
[[ru:c/program/SIG_strategies]]
[[tr:c/program/SIG_strategies]]
[[zh:c/program/SIG_strategies]]</text>
      <sha1>mvtoxmiatx6pleg0iwc8c0tngb46krl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIG types</title>
    <ns>0</ns>
    <id>6335</id>
    <revision>
      <id>78733</id>
      <parentid>76371</parentid>
      <timestamp>2015-06-08T11:43:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1978">{{title|SIGTERM, SIGSEGV, SIGINT, SIGILL, SIGABRT, SIGFPE}}
{{c/program/navbar}}
{{dcl begin}}
{{dcl header | signal.h}}
{{dcl |
#define SIGTERM /*implementation defined*/
}}
{{dcl |
#define SIGSEGV /*implementation defined*/
}}
{{dcl |
#define SIGINT /*implementation defined*/
}}
{{dcl |
#define SIGILL /*implementation defined*/
}}
{{dcl |
#define SIGABRT /*implementation defined*/
}}
{{dcl |
#define SIGFPE /*implementation defined*/
}}
{{dcl end}}

Each of the above macro constants expands to an integer constant expression with distinct values, which represent different signals sent to the program.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|SIGTERM}}  | termination request, sent to the program}}
{{dsc | {{tt|SIGSEGV}}  | invalid memory access (segmentation fault)}}
{{dsc | {{tt|SIGINT}}  | external interrupt, usually initiated by the user}}
{{dsc | {{tt|SIGILL}}  | invalid program image, such as invalid instruction}}
{{dsc | {{tt|SIGABRT}}  | abnormal termination condition, as is e.g. initiated by {{lc|abort()}}}}
{{dsc | {{tt|SIGFPE}}  | erroneous arithmetic operation such as divide by zero}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.14/3 | title=Signal handling &lt;signal.h&gt; | p=265}}
{{ref std c99}}
{{ref std | section=7.14/3 | title=Signal handling &lt;signal.h&gt; | p=246}}
{{ref std c89}}
{{ref std | section=4.7    | title=SIGNAL HANDLING &lt;signal.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc signal}}
{{dsc inc | c/program/dsc raise}}
{{dsc see cpp | cpp/utility/program/SIG_types | signal types | nomono=true}}
{{dsc end}}

[[ar:c/program/SIG_types]]
[[cs:c/program/SIG_types]]
[[de:c/program/SIG_types]]
[[es:c/program/SIG_types]]
[[fr:c/program/SIG_types]]
[[it:c/program/SIG_types]]
[[ja:c/program/SIG_types]]
[[ko:c/program/SIG_types]]
[[pl:c/program/SIG_types]]
[[pt:c/program/SIG_types]]
[[ru:c/program/SIG_types]]
[[tr:c/program/SIG_types]]
[[zh:c/program/SIG_types]]</text>
      <sha1>40xizey30olpsj26ntsix8gikxq150p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIGABRT</title>
    <ns>0</ns>
    <id>6180</id>
    <redirect title="c/program/SIG types" />
    <revision>
      <id>22431</id>
      <parentid>21515</parentid>
      <timestamp>2012-04-19T20:14:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIGFPE</title>
    <ns>0</ns>
    <id>6179</id>
    <redirect title="c/program/SIG types" />
    <revision>
      <id>22432</id>
      <parentid>21514</parentid>
      <timestamp>2012-04-19T20:14:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIGILL</title>
    <ns>0</ns>
    <id>6178</id>
    <redirect title="c/program/SIG types" />
    <revision>
      <id>22433</id>
      <parentid>21513</parentid>
      <timestamp>2012-04-19T20:15:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIGINT</title>
    <ns>0</ns>
    <id>6177</id>
    <redirect title="c/program/SIG types" />
    <revision>
      <id>22434</id>
      <parentid>22409</parentid>
      <timestamp>2012-04-19T20:15:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIGSEGV</title>
    <ns>0</ns>
    <id>6176</id>
    <redirect title="c/program/SIG types" />
    <revision>
      <id>22436</id>
      <parentid>22407</parentid>
      <timestamp>2012-04-19T20:15:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/SIGTERM</title>
    <ns>0</ns>
    <id>6175</id>
    <redirect title="c/program/SIG types" />
    <revision>
      <id>22438</id>
      <parentid>22406</parentid>
      <timestamp>2012-04-19T20:16:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merged</comment>
      <text xml:space="preserve" bytes="33">#redirect [[c/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/abort</title>
    <ns>0</ns>
    <id>6192</id>
    <revision>
      <id>87825</id>
      <parentid>87824</parentid>
      <timestamp>2016-10-05T10:27:37Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1797">{{c/title| abort}}
{{c/program/navbar}}
{{dcl begin}}
{{dcl header|stdlib.h}}
{{dcl | until=c11|
void abort(void);
}}
{{dcl | since=c11|
_Noreturn void abort(void);
}}
{{dcl end}}

Causes abnormal program termination unless {{lc|SIGABRT}} is being caught by a signal handler passed to signal and the handler does not return.

Functions passed to {{lc|atexit()}} are not called. Whether open resources such as files are closed is implementation defined. Implementation defined status is returned to the host environment that indicates unsuccessful execution. 

===Parameters===
(none)

===Return value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void) 
{
    FILE *fp = fopen(&quot;data.txt&quot;,&quot;r&quot;);
    if (fp == NULL) {
       fprintf(stderr, &quot;error opening file data.txt in function main()\n&quot;);
       abort();
    }

    /* Normal processing continues here. */
    fclose(fp);
    printf(&quot;Normal Return\n&quot;);
    return 0;
}
 | output=
error opening file data.txt in function main()
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.1 | title=The abort function | p=350}}
{{ref std c99}}
{{ref std | section=7.20.4.1 | title=The abort function | p=315}}
{{ref std c89}}
{{ref std | section=4.10.4.1 | title=The abort function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc exit}}
{{dsc inc | c/program/dsc atexit}}
{{dsc inc | c/program/dsc quick_exit}}
{{dsc see cpp | cpp/utility/program/abort}}
{{dsc end}}

[[ar:c/program/abort]]
[[cs:c/program/abort]]
[[de:c/program/abort]]
[[es:c/program/abort]]
[[fr:c/program/abort]]
[[it:c/program/abort]]
[[ja:c/program/abort]]
[[ko:c/program/abort]]
[[pl:c/program/abort]]
[[pt:c/program/abort]]
[[ru:c/program/abort]]
[[tr:c/program/abort]]
[[zh:c/program/abort]]</text>
      <sha1>crqqrt5rub67628leka1b3tb3wjhzfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/at quick exit</title>
    <ns>0</ns>
    <id>6187</id>
    <revision>
      <id>87830</id>
      <parentid>76314</parentid>
      <timestamp>2016-10-05T11:37:29Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1579">{{c/title| at_quick_exit}}
{{c/program/navbar}}
{{ddcl | header=stdlib.h | since=c11|
int at_quick_exit( void (*func)(void) );
}}

Registers the function pointed to by {{tt|func}} to be called on quick program termination (via {{lc|quick_exit}}).

Calling the function from several threads does not induce a data race. The implementation shall support the registration of at least {{c|32}} functions.

===Parameters===
{{par begin}}
{{par | func | pointer to a function to be called on normal program termination}}
{{par end}}

===Return value===
{{c|0}} if the registration succeeds, nonzero value otherwise.

===Example===
{{example
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
 
void f1(void)
{
    puts(&quot;pushed first&quot;);
    fflush(stdout);
}
 
void f2(void)
{
    puts(&quot;pushed second&quot;);
}
 
int main(void)
{
    at_quick_exit(f1);
    at_quick_exit(f2);
    quick_exit(0);
}
 | output=
pushed second
pushed first
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.3 | title=The at_quick_exit function | p=351}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc atexit}}
{{dsc see cpp | cpp/utility/program/at_quick_exit}}
{{dsc end}}

[[ar:c/program/at_quick_exit]]
[[cs:c/program/at_quick_exit]]
[[de:c/program/at_quick_exit]]
[[es:c/program/at_quick_exit]]
[[fr:c/program/at_quick_exit]]
[[it:c/program/at_quick_exit]]
[[ja:c/program/at_quick_exit]]
[[ko:c/program/at_quick_exit]]
[[pl:c/program/at_quick_exit]]
[[pt:c/program/at_quick_exit]]
[[ru:c/program/at_quick_exit]]
[[tr:c/program/at_quick_exit]]
[[zh:c/program/at_quick_exit]]</text>
      <sha1>5f3x7pxfkmbciwlps8975ot7wxfbc9o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/atexit</title>
    <ns>0</ns>
    <id>6188</id>
    <revision>
      <id>87827</id>
      <parentid>87826</parentid>
      <timestamp>2016-10-05T11:01:35Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1852">{{c/title| atexit}}
{{c/program/navbar}}
{{ddcl | header=stdlib.h |
int atexit( void (*func)(void) );
}}

Registers the function pointed to by {{tt|func}} to be called on normal program termination (via {{lc|exit()}} or returning from {{tt|main()}}). The functions will be called in reverse order they were registered, i.e. the function registered last will be executed first.

The same function may be registered more than once.

{{tt|atexit}} is thread-safe: calling the function from several threads does not induce a data race. 

The implementation is guaranteed to support the registration of at least {{c|32}} functions. The exact limit is implementation-defined.

===Parameters===
{{par begin}}
{{par | func | pointer to a function to be called on normal program termination}}
{{par end}}

===Return value===
{{c|0}} if the registration succeeds, nonzero value otherwise.

===Example===
{{example
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

void f1(void)
{
    puts(&quot;pushed first&quot;);
}

void f2(void)
{
    puts(&quot;pushed second&quot;);
}

int main(void)
{
    atexit(f1);
    atexit(f2);
}
 | output=
pushed second
pushed first
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.2 | title=The atexit function | p=350}}
{{ref std c99}}
{{ref std | section=7.20.4.2 | title=The atexit function | p=315}}
{{ref std c89}}
{{ref std | section=4.10.4.2 | title=The atexit function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc at_quick_exit}}
{{dsc see cpp | cpp/utility/program/atexit}}
{{dsc end}}

[[ar:c/program/atexit]]
[[cs:c/program/atexit]]
[[de:c/program/atexit]]
[[es:c/program/atexit]]
[[fr:c/program/atexit]]
[[it:c/program/atexit]]
[[ja:c/program/atexit]]
[[ko:c/program/atexit]]
[[pl:c/program/atexit]]
[[pt:c/program/atexit]]
[[ru:c/program/atexit]]
[[tr:c/program/atexit]]
[[zh:c/program/atexit]]</text>
      <sha1>rstbga4bxwsddl163vy2roffgnyecq0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/exit</title>
    <ns>0</ns>
    <id>6191</id>
    <revision>
      <id>78725</id>
      <parentid>76309</parentid>
      <timestamp>2015-06-08T11:16:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2666">{{c/title| exit}}
{{c/program/navbar}}

{{dcl begin}}
{{dcl header|stdlib.h}}
{{dcl | until=c11|
void exit( int exit_code );
}}
{{dcl | since=c11|
_Noreturn void exit( int exit_code );
}}
{{dcl end}}

Causes normal program termination to occur.

Several cleanup steps are performed:

* functions passed to {{lc|atexit}} are called, in reverse order of registration
* all C streams are flushed and closed
* files created by {{lc|tmpfile}} are removed
* control is returned to the host environment. If {{tt|exit_code}} is zero or {{lc|EXIT_SUCCESS}}, an implementation-defined status, indicating successful termination is returned. If {{tt|exit_code}} is {{lc|EXIT_FAILURE}}, an implementation-defined status, indicating unsuccessful termination is returned. In other cases implementation-defined status value is returned.

===Notes===
The functions registered with {{lc|at_quick_exit}} are not called.

The behavior is undefined if a program calls {{tt|exit}} more than once, or if it calls {{tt|exit}} and {{lc|quick_exit}}

The behavior is undefined if during a call to a function registered with {{lc|atexit}}, the function exits with {{lc|longjmp}}.

Returning from the [[c/language/main function|the main function]], either by a {{tt|return}} statement or by reaching the end of the function, executes {{tt|exit()}}, passing the argument of the return statement (or {{c|0}} if implicit return was used) as {{tt|exit_code}}.

===Parameters===
{{par begin}}
{{par | exit_code | exit status of the program}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    FILE *fp = fopen(&quot;data.txt&quot;,&quot;r&quot;);
    if (fp == NULL) {
       fprintf(stderr, &quot;error opening file data.txt in function main()\n&quot;);
       exit(1);
    }
    fclose(fp);
    printf(&quot;Normal Return\n&quot;);
}
 | output=
error opening file data.txt in function main()
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.4 | title=The exit function | p=351-352}}
{{ref std c99}}
{{ref std | section=7.20.4.3 | title=The exit function | p=315-316}}
{{ref std c89}}
{{ref std | section=4.10.4.3 | title=The exit function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc abort}}
{{dsc inc | c/program/dsc atexit}}
{{dsc inc | c/program/dsc quick_exit}}
{{dsc see cpp | cpp/utility/program/exit}}
{{dsc end}}

[[ar:c/program/exit]]
[[cs:c/program/exit]]
[[de:c/program/exit]]
[[es:c/program/exit]]
[[fr:c/program/exit]]
[[it:c/program/exit]]
[[ja:c/program/exit]]
[[ko:c/program/exit]]
[[pl:c/program/exit]]
[[pt:c/program/exit]]
[[ru:c/program/exit]]
[[tr:c/program/exit]]
[[zh:c/program/exit]]</text>
      <sha1>rsnpdagfvxwwgay9m506klfhhbsw9ce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/getenv</title>
    <ns>0</ns>
    <id>6184</id>
    <revision>
      <id>77529</id>
      <parentid>76734</parentid>
      <timestamp>2015-03-29T12:07:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+refs; sp</comment>
      <text xml:space="preserve" bytes="4550">{{c/title| getenv|getenv_s}}
{{c/program/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl|num=1|
char *getenv( const char *name );
}}
{{dcl| since=c11 | num=2 |
errno_t getenv_s( size_t *restrict len, char *restrict value,
                  rsize_t valuesz, const char *restrict name );
}}
{{dcl end}}

@1@ Searches for an environmental variable with name {{tt|name}} in the host-specified environment list and returns a pointer to the string that is associated with the matched environment variable. The set of environmental variables and methods of altering it are implementation-defined. 
@@ This function is not required to be thread-safe. Another call to getenv, as well as a call to the POSIX functions [http://pubs.opengroup.org/onlinepubs/9699919799/functions/setenv.html setenv()], [http://pubs.opengroup.org/onlinepubs/9699919799/functions/unsetenv.html unsetenv()], and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/putenv.html putenv()] may invalidate the pointer returned by a previous call or modify the string obtained from a previous call.
@@ Modifying the string returned by {{tt|getenv}} invokes undefined behavior.
@2@ Same as {{v|1}}, except that the values of the environment variable is written to the user-provided buffer {{tt|value}} (unless null) and the number of bytes written is stored in the user-provided location {{c|*len}} (unless null). If the environment variable is not set in the environment, zero is written to {{c|*len}} (unless null) and {{c|'\0'}} is written to {{c|value[0]}} (unless null). In addition, the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|name}} is a null pointer
:* {{tt|valuesz}} is greater than {{lc|RSIZE_MAX}}
:* {{tt|value}} is a null pointer and {{tt|valuesz}} is not zero
:As all bounds-checked functions, {{tt|getenv_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|stdlib.h}}.

===Parameters===
{{par begin}}
{{par | name | null-terminated character string identifying the name of the environmental variable to look for }}
{{par | len | pointer to a user-provided location where getenv_s will store the length of the environment variable }}
{{par | value | pointer to a user-provided character array where getenv_s will store the contents of the environment variable }}
{{par | valuesz | maximum number of characters that getenv_s is allowed to write to dest (size of the buffer) }}
{{par end}}

===Return value===
@1@ character string identifying the value of the environmental variable or null pointer if such variable is not found.
@2@ zero if the environment variable was found, non-zero if it was not found of if a runtime constrant violation occurred. On any error, writes zero to {{c|*len}} (unless {{tt|len}} is a null pointer).

===Notes===
On POSIX systems, the [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08 environment variables] are also accessible through the global variable {{tt|environ}}, declared as {{c|extern char **environ;}} in {{tt|&lt;unistd.h&gt;}}, and through the optional third argument, {{tt|envp}}, of [[c/language/main function|the main function]].

The call to {{tt|getenv_s}} with a null pointer for {{tt|value}} and zero for {{tt|valuesz}} is used to determine the size of the buffer required to hold the entire result.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    char *env_p = getenv(&quot;PATH&quot;);
    if (env_p)
        printf(&quot;PATH = %s\n&quot;, env_p);
}
|p=true
 | output=
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.6 | title=The getenv function | p=352-353}}
{{ref std | section=K.3.6.2.1 | title=The getenv_s function | p=606-607}}
{{ref std c99}}
{{ref std | section=7.20.4.5 | title=The getenv function | p=317}}
{{ref std c89}}
{{ref std | section=4.10.4.4 | title=The getenv function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/utility/program/getenv}}
{{dsc end}}

[[ar:c/program/getenv]]
[[cs:c/program/getenv]]
[[de:c/program/getenv]]
[[es:c/program/getenv]]
[[fr:c/program/getenv]]
[[it:c/program/getenv]]
[[ja:c/program/getenv]]
[[ko:c/program/getenv]]
[[pl:c/program/getenv]]
[[pt:c/program/getenv]]
[[ru:c/program/getenv]]
[[tr:c/program/getenv]]
[[zh:c/program/getenv]]</text>
      <sha1>0k4lkwpst5ynwmllc8qa6xsrny4agkn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/jmp buf</title>
    <ns>0</ns>
    <id>8689</id>
    <revision>
      <id>78736</id>
      <parentid>76374</parentid>
      <timestamp>2015-06-08T11:50:10Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1238">{{c/title|jmp_buf}}
{{c/program/navbar}}
{{ddcl | header=setjmp.h | 
typedef /* unspecified */ jmp_buf;
}}

The {{tt|jmp_buf}} type is an array type suitable for storing information to restore a calling environment. The stored information is sufficient to restore execution at the correct block of the program and invocation of that block. The state of floating-point status flags, or open files, or any other data is not stored in an object of type {{tt|jmp_buf}}.

===References===
{{ref std c11}}
{{ref std | section=7.13/2 | title=Nonlocal jumps &lt;setjmp.h&gt; | p=262}}
{{ref std c99}}
{{ref std | section=7.13/2 | title=Nonlocal jumps &lt;setjmp.h&gt; | p=243}}
{{ref std c89}}
{{ref std | section=4.6    | title=NON-LOCAL JUMPS &lt;setjmp.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc setjmp}}
{{dsc inc | c/program/dsc longjmp}}
{{dsc see cpp | cpp/utility/program/jmp_buf}}
{{dsc end}}

[[ar:c/program/jmp_buf]]
[[cs:c/program/jmp_buf]]
[[de:c/program/jmp_buf]]
[[es:c/program/jmp_buf]]
[[fr:c/program/jmp_buf]]
[[it:c/program/jmp_buf]]
[[ja:c/program/jmp_buf]]
[[ko:c/program/jmp_buf]]
[[pl:c/program/jmp_buf]]
[[pt:c/program/jmp_buf]]
[[ru:c/program/jmp_buf]]
[[tr:c/program/jmp_buf]]
[[zh:c/program/jmp_buf]]</text>
      <sha1>quu2unrk05eftnh89go9cwf9oipkqfx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/longjmp</title>
    <ns>0</ns>
    <id>6173</id>
    <revision>
      <id>78735</id>
      <parentid>76373</parentid>
      <timestamp>2015-06-08T11:46:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3374">{{c/title| longjmp}}
{{c/program/navbar}}
{{dcl begin}}
{{dcl header|setjmp.h}}
{{dcl rev begin}}
{{dcl | until=c11 | 
void longjmp( jmp_buf env, int status );
}}
{{dcl | since=c11 | 
_Noreturn void longjmp( jmp_buf env, int status );
}}
{{dcl rev end}}
{{dcl end}}

Loads the execution context {{tt|env}} saved by a previous call to {{lc|setjmp}}. This function does not return. Control is transferred to the call site of the macro {{lc|setjmp}} that set up {{tt|env}}. That {{lc|setjmp}} then returns the value, passed as the {{tt|status}}.

If the function that called {{lc|setjmp}} has exited (whether by return or by a different {{tt|longjmp}} higher up the stack), the behavior is undefined. In other words, only long jumps up the call stack are allowed.

{{rev begin}}
{{rev|since=c11|
Jumping across threads (if the function that called {{tt|setjmp}}  was executed by another thread) is also undefined behavior.
}}
{{rev end}}

{{rev begin}}
{{rev|since=c99|
If when {{lc|setjmp}} was called, a [[c/language/array|VLA]] or another [[c/language/declarations|variably-modified type]] variable was in scope and control left that scope, {{tt|longjmp}} to that {{tt|setjmp}} invokes undefined behavior even if control remained within the function.

On the way up the stack, {{tt|longjmp}} does not deallocate any VLAs, memory leaks may occur if their lifetimes are terminated in this way:
{{source|1=
void g(int n)
{
    int a[n]; // a may remain allocated
    h(n); // does not return
}
void h(int n)
{
    int b[n]; // b may remain allocated
    longjmp(buf, 2); // might cause a memory leak for h's b and g's a
}
}}
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | env | variable referring to the execution state of the program saved by {{lc|setjmp}}}}
{{par | status | the value to return from {{lc|setjmp}}. If it is equal to {{c|0}}, {{c|1}} is used instead}}
{{par end}}

===Return value===
(none)

===Notes===
{{tt|longjmp}} is intended for handling unexpected error conditions where the function cannot return meaningfully. This is similar to exception handling in other programming languages.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;setjmp.h&gt;
#include &lt;stdnoreturn.h&gt;
 
jmp_buf jump_buffer;
 
noreturn void a(int count) 
{
    printf(&quot;a(%d) called\n&quot;, count);
    longjmp(jump_buffer, count+1); // will return count+1 out of setjmp
}
 
int main(void)
{
    volatile int count = 0; // local vars must be volatile for setjmp
    if (setjmp(jump_buffer) != 9)
        a(count++);
}
 | output=
a(0) called
a(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called
}}

===References===
{{ref std c11}}
{{ref std | section=7.13.2.1 | title=The longjmp macro | p=263-264}}
{{ref std c99}}
{{ref std | section=7.13.2.1 | title=The longjmp macro | p=244-245}}
{{ref std c89}}
{{ref std | section=4.6.2.1  | title=The longjmp function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc setjmp}}
{{dsc see cpp | cpp/utility/program/longjmp}}
{{dsc end}}

[[ar:c/program/longjmp]]
[[cs:c/program/longjmp]]
[[de:c/program/longjmp]]
[[es:c/program/longjmp]]
[[fr:c/program/longjmp]]
[[it:c/program/longjmp]]
[[ja:c/program/longjmp]]
[[ko:c/program/longjmp]]
[[pl:c/program/longjmp]]
[[pt:c/program/longjmp]]
[[ru:c/program/longjmp]]
[[tr:c/program/longjmp]]
[[zh:c/program/longjmp]]</text>
      <sha1>9eltsmvn3sdnaifvi2nsvwg2561y32k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/quick exit</title>
    <ns>0</ns>
    <id>6190</id>
    <revision>
      <id>87831</id>
      <parentid>76310</parentid>
      <timestamp>2016-10-05T11:50:02Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1500">{{c/title| quick_exit}}
{{c/program/navbar}}
{{ddcl | header=stdlib.h | since=c11 |
_Noreturn void quick_exit( int exit_code );
}}

Causes normal program termination to occur without completely cleaning the resources.

Functions passed to {{lc|at_quick_exit}} are called in reverse order of their registration. After calling the registered functions, calls {{c|_Exit(exit_code)}}

===Parameters===
{{par begin}}
{{par | exit_code | exit status of the program}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
 
void f1(void)
{
    puts(&quot;pushed first&quot;);
    fflush(stdout);
}
 
void f2(void)
{
    puts(&quot;pushed second&quot;);
}
 
int main(void)
{
    at_quick_exit(f1);
    at_quick_exit(f2);
    quick_exit(0);
}
 | output=
pushed second
pushed first
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.7 | title=The quick_exit function | p=353}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc abort}}
{{dsc inc | c/program/dsc atexit}}
{{dsc inc | c/program/dsc at_quick_exit}}
{{dsc see cpp | cpp/utility/program/quick_exit}}
{{dsc end}}

[[ar:c/program/quick_exit]]
[[cs:c/program/quick_exit]]
[[de:c/program/quick_exit]]
[[es:c/program/quick_exit]]
[[fr:c/program/quick_exit]]
[[it:c/program/quick_exit]]
[[ja:c/program/quick_exit]]
[[ko:c/program/quick_exit]]
[[pl:c/program/quick_exit]]
[[pt:c/program/quick_exit]]
[[ru:c/program/quick_exit]]
[[tr:c/program/quick_exit]]
[[zh:c/program/quick_exit]]</text>
      <sha1>839qz7bck6b4r1uv20ryfkreeu8pk2w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/raise</title>
    <ns>0</ns>
    <id>6182</id>
    <revision>
      <id>79216</id>
      <parentid>79209</parentid>
      <timestamp>2015-06-28T11:37:21Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>reinstalled the earlier example</comment>
      <text xml:space="preserve" bytes="1766">{{c/title| raise}}
{{c/program/navbar}}
{{ddcl | header=signal.h |
int raise( int sig );
}}

Sends signal sig to the program. The signal handler, specified using {{lc|signal()}}, is invoked.

If the user-defined signal handling strategy is not set using {{lc|signal()}} yet, it is implementation-defined whether the signal will be ignored or default handler will be invoked. 

===Parameters===
{{par begin}}
{{par | sig | the signal to be sent. It can be an implementation-defined value or one of the following values:
{{dsc begin}}
{{dsc inc | c/program/dsc SIG_types}}
{{dsc end}}
}}
{{par end}}

===Return value===
{{c|0}} upon success, non-zero value on failure.

===Example===
{{example
 |
 | code=
#include &lt;signal.h&gt;
#include &lt;stdio.h&gt;
 
void signal_handler(int signal)
{
    printf(&quot;Received signal %d\n&quot;, signal);
}
 
int main(void)
{
    // Install a signal handler.
    signal(SIGTERM, signal_handler);
 
    printf(&quot;Sending signal %d\n&quot;, SIGTERM);
    raise(SIGTERM);
    printf(&quot;Exit main()\n&quot;);
}
 | output=
Sending signal 15
Received signal 15
Exit main()
}}

===References===
{{ref std c11}}
{{ref std | section=7.14.2.1 | title=The raise function | p=267}}
{{ref std c99}}
{{ref std | section=7.14.2.1 | title=The raise function | p=248}}
{{ref std c89}}
{{ref std | section=4.7.2.1  | title=The raise function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc signal}}
{{dsc see cpp | cpp/utility/program/raise}}
{{dsc end}}

[[ar:c/program/raise]]
[[cs:c/program/raise]]
[[de:c/program/raise]]
[[es:c/program/raise]]
[[fr:c/program/raise]]
[[it:c/program/raise]]
[[ja:c/program/raise]]
[[ko:c/program/raise]]
[[pl:c/program/raise]]
[[pt:c/program/raise]]
[[ru:c/program/raise]]
[[tr:c/program/raise]]
[[zh:c/program/raise]]</text>
      <sha1>n9h43y6wtnltioed5rgvl49hu6fy0yt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/setjmp</title>
    <ns>0</ns>
    <id>6174</id>
    <revision>
      <id>88838</id>
      <parentid>80932</parentid>
      <timestamp>2016-12-15T04:58:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>count has to be modified &quot;between the setjmp invocation and longjmp&quot; to require volatile</comment>
      <text xml:space="preserve" bytes="3424">{{c/title| setjmp}}
{{c/program/navbar}}
{{ddcl | header=setjmp.h | 
#define setjmp(env) /* implementation-defined */
}}

Saves the current execution context into a variable {{tt|env}} of type {{lc|jmp_buf}}. This variable can later be used to restore the current execution context by {{lc|longjmp}} function. That is, when a call to {{lc|longjmp}} function is made, the execution continues at the particular call site that constructed the {{lc|jmp_buf}} variable passed to {{lc|longjmp}}. In that case {{lc|setjmp}} returns the value passed to {{lc|longjmp}}.

The invocation of {{tt|setjmp}} must appear only in one of the following contexts:
* the entire controlling expression of a selection or iteration statement (if, switch, for, while, do-while)
{{source|1=
switch(setjmp(env)) { ..
}}
* one operand of a relational or equality operator with the other operand an integer constant expression, with the resulting expression being the entire controlling expression of a selection or iteration statement
{{source|1=
if(setjmp(env) &gt; 10) { ...
}}
* the operand of a unary ! operator with the resulting expression being the entire controlling expression of a selection or iteration statement
{{source|1=
while(!setjmp(env)) { ...
}}
* the entire expression of an expression statement (possibly cast to {{tt|void}}).
{{source|1=
setjmp(env);
}}
If {{tt|setjmp}} appears in any other context, the behavior is undefined.

Upon return to the scope of setjmp, all accessible objects, floating-point status flags, and other components of the abstract machine have the same values as they had when longjmp was executed, except for the non-[[c/language/volatile|volatile]] local variables in setjmp's scope, whose values are indeterminate if they have been changed since the setjmp invocation.

===Parameters===
{{par begin}}
{{par | env | variable to save the execution state of the program to.}}
{{par end}}

===Return value===
{{c|0}} if the macro was called by the original code and the execution context was saved to {{tt|env}}.

Non-zero value if a non-local jump was just performed. The return value in the same as passed to {{lc|longjmp}}.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;setjmp.h&gt;
#include &lt;stdnoreturn.h&gt;
 
jmp_buf jump_buffer;
 
noreturn void a(int count) 
{
    printf(&quot;a(%d) called\n&quot;, count);
    longjmp(jump_buffer, count+1); // will return count+1 out of setjmp
}
 
int main(void)
{
    volatile int count = 0; // modified local vars in setjmp scope must be volatile
    if (setjmp(jump_buffer) != 9) // compare against constant in an if
        a(++count);
}
 | output=
a(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called
}}

===References===
{{ref std c11}}
{{ref std | section=7.13.1.1 | title=The setjmp macro | p=262-263}}
{{ref std c99}}
{{ref std | section=7.13.1.1 | title=The setjmp macro | p=243-244}}
{{ref std c89}}
{{ref std | section=4.6.1    | title=The setjmp macro}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc longjmp}}
{{dsc see cpp | cpp/utility/program/setjmp}}
{{dsc end}}

[[ar:c/program/setjmp]]
[[cs:c/program/setjmp]]
[[de:c/program/setjmp]]
[[es:c/program/setjmp]]
[[fr:c/program/setjmp]]
[[it:c/program/setjmp]]
[[ja:c/program/setjmp]]
[[ko:c/program/setjmp]]
[[pl:c/program/setjmp]]
[[pt:c/program/setjmp]]
[[ru:c/program/setjmp]]
[[tr:c/program/setjmp]]
[[zh:c/program/setjmp]]</text>
      <sha1>dg4909dmrau5npac6y1byp4f3vcfihw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/sig atomic t</title>
    <ns>0</ns>
    <id>8693</id>
    <revision>
      <id>78730</id>
      <parentid>76364</parentid>
      <timestamp>2015-06-08T11:36:16Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1559">{{title|sig_atomic_t}}
{{c/program/navbar}}
{{ddcl | header=signal.h |
typedef /* unspecified */ sig_atomic_t;
}}

An integer type which can be accessed as an atomic entity even in the presence of asynchronous interrupts made by signals.

===Example===
{{example
 |
 | p=true
 | code=
#include &lt;signal.h&gt;
#include &lt;stdio.h&gt;

volatile sig_atomic_t gSignalStatus = 0;

void signal_handler(int signal)
{
    gSignalStatus = signal;
}

int main(void)
{
    /* Install a signal handler. */
    signal(SIGINT, signal_handler);

    printf(&quot;SignalValue:   %d\n&quot;, gSignalStatus);
    printf(&quot;Sending signal %d\n&quot;, SIGINT);
    raise(SIGINT);
    printf(&quot;SignalValue:   %d\n&quot;, gSignalStatus);
}
 | output=
SignalValue:   0
Sending signal 2
SignalValue:   2
}}

===References===
{{ref std c11}}
{{ref std | section=7.14/2 | title=Signal handling &lt;signal.h&gt; | p=265}}
{{ref std c99}}
{{ref std | section=7.14/2 | title=Signal handling &lt;signal.h&gt; | p=246}}
{{ref std c89}}
{{ref std | section=4.7    | title=SIGNAL HANDLING &lt;signal.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc signal}}
{{dsc see cpp | cpp/utility/program/sig_atomic_t}}
{{dsc end}}

[[ar:c/program/sig_atomic_t]]
[[cs:c/program/sig_atomic_t]]
[[de:c/program/sig_atomic_t]]
[[es:c/program/sig_atomic_t]]
[[fr:c/program/sig_atomic_t]]
[[it:c/program/sig_atomic_t]]
[[ja:c/program/sig_atomic_t]]
[[ko:c/program/sig_atomic_t]]
[[pl:c/program/sig_atomic_t]]
[[pt:c/program/sig_atomic_t]]
[[ru:c/program/sig_atomic_t]]
[[tr:c/program/sig_atomic_t]]
[[zh:c/program/sig_atomic_t]]</text>
      <sha1>hyv5ugi9vsah1cd27v933bll51o5qy6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/signal</title>
    <ns>0</ns>
    <id>6183</id>
    <revision>
      <id>85332</id>
      <parentid>82006</parentid>
      <timestamp>2016-04-18T07:37:29Z</timestamp>
      <contributor>
        <ip>212.121.145.5</ip>
      </contributor>
      <text xml:space="preserve" bytes="5061">{{c/title| signal}}
{{c/program/navbar}}
{{ddcl | header=signal.h |
void (*signal( int sig, void (*handler) (int))) (int);
}}

Sets the error handler for signal {{tt|sig}}. The signal handler can be set so that default handling will occur, signal is ignored, or a user-defined function is called.

When signal handler is set to a function and a signal occurs, it is implementation defined whether {{c|signal(sig, SIG_DFL)}} will be executed immediately before the start of signal handler. Also, the implementation can prevent some implementation-defined set of signals from occurring while the signal handler runs.

===Parameters===
{{par begin}}
{{par | sig | the signal to set the signal handler to. It can be an implementation-defined value or one of the following values: 
{{dsc begin}}
{{dsc inc | c/program/dsc SIG_types}}
{{dsc end}}
}}
{{par | handler | the signal handler. This must be one of the following: 
*{{lc|SIG_DFL}} macro. The signal handler is set to default signal handler.
*{{lc|SIG_IGN}} macro. The signal is ignored.
*pointer to a function. The signature of the function must be equivalent to the following:
{{ddcl | 
void fun(int sig);}}}}
{{par end}}

===Return value===
Previous signal handler on success or {{lc|SIG_ERR}} on failure (setting a signal handler can be disabled on some implementations).

===Signal handler===
The following limitations are imposed on the user-defined function that is installed as a signal handler.

If the user defined function returns when handling {{lc|SIGFPE}}, {{lc|SIGILL}} or {{lc|SIGSEGV}}, the behavior is undefined.

If the signal handler is called as a result of {{lc|abort}} or {{lc|raise}}, the behavior is undefined if the signal handler calls {{lc|raise}}.

If the signal handler is called NOT as a result of {{lc|abort}} or {{lc|raise}} (in other words, the signal handler is ''asynchronous''), the behavior is undefined if
* the signal handler calls any function within the standard library, except
:* {{lc|abort}}
:* {{lc|_Exit}}
:* {{lc|quick_exit}}
:* {{tt|signal}} with the first argument being the number of the signal currently handled (async handler can re-register itself, but not other signals). 
:* atomic functions from [[c/atomic|stdatomic.h]] if the atomic arguments are lock-free
:* {{lc|atomic_is_lock_free}} (with any kind of atomic arguments)
* the signal handler refers to any object with static {{rev inl|since=c11|or thread-local}} [[c/language/storage_duration|storage duration]] {{rev inl|since=c11|that is not a lock-free [[c/language/atomic|atomic]]}} other than by assigning to a static {{c|volatile std::sig_atomic_t}}.

On entry to the signal handler, the state of the floating-point environment and the values of all objects is unspecified, except for
* objects of type {{c|volatile sig_atomic_t}}
* objects of lock-free atomic types {{mark since c11}}
* side effects made visible through {{lc|atomic_signal_fence}} {{mark since c11}}

On return from a signal handler, the value of any object modified by the signal handler that is not {{c|volatile sig_atomic_t}} or lock-free atomic{{mark since c11}} is undefined.

The behavior is undefined if {{c|signal}} is used in a multithreaded program. It is not required to be thread-safe.

===Notes===
POSIX requires that {{tt|signal}} is thread-safe, and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04 specifies a list of async-signal-safe library functions] that may be called from any signal handler.

Besides {{tt|abort}} and {{tt|raise}}, POSIX specifies that {{tt|kill}}, {{tt|pthread_kill}}, and {{tt|sigqueue}} generate synchronous signals.

POSIX recommends [http://pubs.opengroup.org/onlinepubs/9699919799/functions/sigaction.html sigaction] instead of {{tt|signal}}, due to its underspecified behavior and significant implementation variations, regarding signal delivery while a signal handler is executed.

===Example===
{{example |
 | code=
#include &lt;signal.h&gt;
#include &lt;stdio.h&gt;

volatile sig_atomic_t gSignalStatus;

void signal_handler(int signal)
{
  gSignalStatus = signal;
}

int main(void)
{
  signal(SIGINT, signal_handler);

  printf(&quot;SignalValue: %d\n&quot;, gSignalStatus);
  printf(&quot;Sending signal: %d\n&quot;, SIGINT);
  raise(SIGINT);
  printf(&quot;SignalValue: %d\n&quot;, gSignalStatus);
}
 | output=
SignalValue: 0
Sending signal: 2
SignalValue: 2
}}

===References===
{{ref std c11}}
{{ref std | section=7.14.1.1 | title=The signal function | p=266-267}}
{{ref std c99}}
{{ref std | section=7.14.1.1 | title=The signal function | p=247-248}}
{{ref std c89}}
{{ref std | section=4.7.1.1  | title=The signal function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/program/dsc raise}}
{{dsc see cpp | cpp/utility/program/signal}}
{{dsc end}}

[[ar:c/program/signal]]
[[cs:c/program/signal]]
[[de:c/program/signal]]
[[es:c/program/signal]]
[[fr:c/program/signal]]
[[it:c/program/signal]]
[[ja:c/program/signal]]
[[ko:c/program/signal]]
[[pl:c/program/signal]]
[[pt:c/program/signal]]
[[ru:c/program/signal]]
[[tr:c/program/signal]]
[[zh:c/program/signal]]</text>
      <sha1>askhqj602a7p8fc2vw2lhza7vo7xmis</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/program/system</title>
    <ns>0</ns>
    <id>6185</id>
    <revision>
      <id>85888</id>
      <parentid>81692</parentid>
      <timestamp>2016-05-29T20:24:48Z</timestamp>
      <contributor>
        <ip>78.106.153.190</ip>
      </contributor>
      <text xml:space="preserve" bytes="2010">{{c/title| system}}
{{c/program/navbar}}
{{ddcl | header=stdlib.h |
int system( const char *command );
}}

Calls the host environment's command processor with command parameter. Returns implementation-defined value (usually the value that the invoked program returns).

If command is {{lc|NULL}} pointer, checks if host environment has a command processor and returns nonzero value only if the command processor exists.

===Parameters===
{{par begin}}
{{par | command | character string identifying the command to be run in the command processor. If NULL pointer is given, command processor is checked for existence}}
{{par end}}

===Return value===
Implementation-defined value. If {{tt|command}} is {{lc|NULL}}, returns nonzero value only if command processor exists.

===Notes===
On POSIX systems, the return value can be decomposed using [http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html WEXITSTATUS and WSTOPSIG]

Related POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/popen.html popen] makes the output generated by {{tt|command}} available to the caller.

===Example===
In this example there is a system call of the unix command '''ls -l &gt;test.txt''':
{{example
 |
 | code=
#include &lt;stdlib.h&gt;

int main(void) {
    
    system(&quot;ls -l &gt;test.txt&quot;);

    return 0;
}
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.4.8 | title=The system function | p=353-354}}
{{ref std c99}}
{{ref std | section=7.20.4.6 | title=The system function | p=317}}
{{ref std c89}}
{{ref std | section=4.10.4.5 | title=The system function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/utility/program/system}}
{{dsc end}}

[[ar:c/program/system]]
[[cs:c/program/system]]
[[de:c/program/system]]
[[es:c/program/system]]
[[fr:c/program/system]]
[[it:c/program/system]]
[[ja:c/program/system]]
[[ko:c/program/system]]
[[pl:c/program/system]]
[[pt:c/program/system]]
[[ru:c/program/system]]
[[tr:c/program/system]]
[[zh:c/program/system]]</text>
      <sha1>b7gpf8iutmhj5d1bnrd7rixnb3tz1b7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string</title>
    <ns>0</ns>
    <id>5756</id>
    <revision>
      <id>76583</id>
      <parentid>76559</parentid>
      <timestamp>2015-02-21T14:51:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>standard references are meaningless on this page</comment>
      <text xml:space="preserve" bytes="553">{{title|Strings library}}
{{c/string/navbar}}

===[[ c/string/byte | Null-terminated byte string management]]===

===[[ c/string/multibyte | Null-terminated multibyte string management]]===

===[[ c/string/wide | Null-terminated wide string management]]===

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/string |Strings library}}
{{dsc end}}

[[ar:c/string]]
[[cs:c/string]]
[[de:c/string]]
[[es:c/string]]
[[fr:c/string]]
[[it:c/string]]
[[ja:c/string]]
[[ko:c/string]]
[[pl:c/string]]
[[pt:c/string]]
[[ru:c/string]]
[[tr:c/string]]
[[zh:c/string]]</text>
      <sha1>p42e7fs2nvzmuat3sqea8pck6n2umbu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte</title>
    <ns>0</ns>
    <id>5757</id>
    <revision>
      <id>78754</id>
      <parentid>76798</parentid>
      <timestamp>2015-06-08T13:22:02Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="5157">{{title|Null-terminated byte strings}}
{{c/string/byte/navbar}}

A null-terminated byte string (NTBS) is a sequence of nonzero bytes followed by a byte with value zero (the terminating null character). Each byte in a byte string encodes one character of some character set. For example, the character array {{c|{'\x63','\x61','\x74','\0'}}} is an NTBS holding the string {{c|&quot;cat&quot;}} in ASCII encoding.

===Functions===
{{dsc begin}}
{{dsc h2 | Character classification}}
{{dsc header | ctype.h}}
{{dsc inc | c/string/byte/dsc isalnum}}
{{dsc inc | c/string/byte/dsc isalpha}}
{{dsc inc | c/string/byte/dsc islower}}
{{dsc inc | c/string/byte/dsc isupper}}
{{dsc inc | c/string/byte/dsc isdigit}}
{{dsc inc | c/string/byte/dsc isxdigit}}
{{dsc inc | c/string/byte/dsc iscntrl}}
{{dsc inc | c/string/byte/dsc isgraph}}
{{dsc inc | c/string/byte/dsc isspace}}
{{dsc inc | c/string/byte/dsc isblank}}
{{dsc inc | c/string/byte/dsc isprint}}
{{dsc inc | c/string/byte/dsc ispunct}}

{{dsc h2 | Character manipulation}}
{{dsc inc | c/string/byte/dsc tolower}}
{{dsc inc | c/string/byte/dsc toupper}}
{{dsc end}}

Note: additional functions whose names begin with either {{ttb|to}} or {{ttb|is}}, followed by a lowercase letter, may be added to the header {{tt|ctype.h}} in future and should not be defined by programs that include that header.

{{c/string/character classes}}
{{dsc begin}}

{{dsc h2 | Conversions to numeric formats}}
{{dsc header | stdlib.h}}
{{dsc inc | c/string/byte/dsc atof}}
{{dsc inc | c/string/byte/dsc atoi}}
{{dsc inc | c/string/byte/dsc strtol}}
{{dsc inc | c/string/byte/dsc strtoul}}
{{dsc inc | c/string/byte/dsc strtof}}
{{dsc header  | inttypes.h}}
{{dsc inc | c/string/byte/dsc strtoimax}}

{{dsc h2 | String manipulation}}
{{dsc header | string.h}}
{{dsc inc | c/string/byte/dsc strcpy}}
{{dsc inc | c/string/byte/dsc strncpy}}
{{dsc inc | c/string/byte/dsc strcat}}
{{dsc inc | c/string/byte/dsc strncat}}
{{dsc inc | c/string/byte/dsc strxfrm}}

{{dsc h2 | String examination}}
{{dsc header | string.h}}
{{dsc inc | c/string/byte/dsc strlen}}
{{dsc inc | c/string/byte/dsc strcmp}}
{{dsc inc | c/string/byte/dsc strncmp}}
{{dsc inc | c/string/byte/dsc strcoll}}
{{dsc inc | c/string/byte/dsc strchr}}
{{dsc inc | c/string/byte/dsc strrchr}}
{{dsc inc | c/string/byte/dsc strspn}}
{{dsc inc | c/string/byte/dsc strcspn}}
{{dsc inc | c/string/byte/dsc strpbrk}}
{{dsc inc | c/string/byte/dsc strstr}}
{{dsc inc | c/string/byte/dsc strtok}}

{{dsc h2 | Character array manipulation}}
{{dsc header | string.h}}
{{dsc inc | c/string/byte/dsc memchr}}
{{dsc inc | c/string/byte/dsc memcmp}}
{{dsc inc | c/string/byte/dsc memset}}
{{dsc inc | c/string/byte/dsc memcpy}}
{{dsc inc | c/string/byte/dsc memmove}}

{{dsc h2 | Miscellaneous}}
{{dsc header | string.h}}
{{dsc inc | c/string/byte/dsc strerror}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.4     | title=Character handling &lt;ctype.h&gt; | p=200-204}}
{{ref std | section=7.8     | title=Format conversion of integer types &lt;inttypes.h&gt; | p=217-220}}
{{ref std | section=7.22    | title=General utilities &lt;stdlib.h&gt; | p=340-360}}
{{ref std | section=7.24    | title=String handling &lt;string.h&gt;   | p=362-372}}
{{ref std | section=7.31.2  | title=Character handling &lt;ctype.h&gt; | p=455}}
{{ref std | section=7.31.5  | title=Format conversion of integer types &lt;inttypes.h&gt; | p=455}}
{{ref std | section=7.31.12 | title=General utilities &lt;stdlib.h&gt; | p=456}}
{{ref std | section=7.31.13 | title=String handling &lt;string.h&gt;   | p=456}}
{{ref std | section=K.3.6   | title=General utilities &lt;stdlib.h&gt; | p=604=613}}
{{ref std | section=K.3.7   | title=String handling &lt;string.h&gt;   | p=614-623}}
{{ref std c99}}
{{ref std | section=7.4    | title=Character handling &lt;ctype.h&gt; | p=181-185}}
{{ref std | section=7.8    | title=Format conversion of integer types &lt;inttypes.h&gt; | p=198-201}}
{{ref std | section=7.20   | title=General utilities &lt;stdlib.h&gt; | p=306-324}}
{{ref std | section=7.21   | title=String handling &lt;string.h&gt;   | p=325-334}}
{{ref std | section=7.26.2  | title=Character handling &lt;ctype.h&gt; | p=401}}
{{ref std | section=7.26.4  | title=Format conversion of integer types &lt;inttypes.h&gt; | p=401}}
{{ref std | section=7.26.10 | title=General utilities &lt;stdlib.h&gt; | p=402}}
{{ref std | section=7.26.11 | title=String handling &lt;string.h&gt;   | p=402}}
{{ref std c89}}
{{ref std | section=4.3    | title=CHARACTER HANDLING &lt;ctype.h&gt;}}
{{ref std | section=4.10   | title=GENERAL UTILITIES &lt;stdlib.h&gt;}}
{{ref std | section=4.11   | title=STRING HANDLING &lt;string.h&gt;}}
{{ref std | section=4.13.2 | title=Character handling &lt;ctype.h&gt;}}
{{ref std | section=4.13.7 | title=General utilities &lt;stdlib.h&gt;}}
{{ref std | section=4.13.8 | title=String handling &lt;string.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/string/byte | Null-terminated byte strings}}
{{dsc end}}

[[ar:c/string/byte]]
[[cs:c/string/byte]]
[[de:c/string/byte]]
[[es:c/string/byte]]
[[fr:c/string/byte]]
[[it:c/string/byte]]
[[ja:c/string/byte]]
[[ko:c/string/byte]]
[[pl:c/string/byte]]
[[pt:c/string/byte]]
[[ru:c/string/byte]]
[[tr:c/string/byte]]
[[zh:c/string/byte]]</text>
      <sha1>0uqi9rcz984ihwfokf6jf0hrq36cmfi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/atof</title>
    <ns>0</ns>
    <id>6122</id>
    <revision>
      <id>87728</id>
      <parentid>87727</parentid>
      <timestamp>2016-09-28T13:37:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>er, wrong type</comment>
      <text xml:space="preserve" bytes="1875">{{c/title| atof}}
{{c/string/byte/navbar}}
{{ddcl | header=stdlib.h |
double atof( const char* str );
}}

Interprets a floating-point value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2float}}

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par end}}

===Return value===
{{c|double}} value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of the return type, the return value is undefined. If no conversion can be performed, {{c|0.0}} is returned.

===Example===
{{example
 | 
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    printf(&quot;%g\n&quot;, atof(&quot;  -0.0000000123junk&quot;));
    printf(&quot;%g\n&quot;, atof(&quot;0.012&quot;));
    printf(&quot;%g\n&quot;, atof(&quot;15e16&quot;));
    printf(&quot;%g\n&quot;, atof(&quot;-0x1afp-2&quot;));
    printf(&quot;%g\n&quot;, atof(&quot;inF&quot;));
    printf(&quot;%g\n&quot;, atof(&quot;Nan&quot;));
    printf(&quot;%g\n&quot;, atof(&quot;1.0e+309&quot;));   // UB: out of range of double
    printf(&quot;%g\n&quot;, atof(&quot;0.0&quot;));
    printf(&quot;%g\n&quot;, atof(&quot;junk&quot;));       // no conversion can be performed
}
|p=true
 | output=
-1.23e-08
0.012
1.5e+17
-107.75
inf
nan
inf
0
0
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.1.1 | title=The atof function | p=341}}
{{ref std c99}}
{{ref std | section=7.20.1.1 | title=The atof function | p=307}}
{{ref std c89}}
{{ref std | section=4.10.1.1 | title=The atof function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strtof}}
{{dsc see cpp | cpp/string/byte/atof}}
{{dsc end}}

[[ar:c/string/byte/atof]]
[[cs:c/string/byte/atof]]
[[de:c/string/byte/atof]]
[[es:c/string/byte/atof]]
[[fr:c/string/byte/atof]]
[[it:c/string/byte/atof]]
[[ja:c/string/byte/atof]]
[[ko:c/string/byte/atof]]
[[pl:c/string/byte/atof]]
[[pt:c/string/byte/atof]]
[[ru:c/string/byte/atof]]
[[tr:c/string/byte/atof]]
[[zh:c/string/byte/atof]]</text>
      <sha1>m8xhnj6xwsm4c6dbg39bijbopi8at5d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/atoi</title>
    <ns>0</ns>
    <id>6123</id>
    <revision>
      <id>87726</id>
      <parentid>87688</parentid>
      <timestamp>2016-09-28T13:34:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/corresponing/int</comment>
      <text xml:space="preserve" bytes="1959">{{c/title| atoi | atol | atoll}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl | 
int       atoi( const char *str );
}}
{{dcl |
long      atol( const char *str );
}}
{{dcl | since=c99 |
long long atoll( const char *str );
}}
{{dcl end}}

Interprets an integer value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int}}

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, the return value is undefined. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    printf(&quot;%i\n&quot;, atoi(&quot; -123junk&quot;));
    printf(&quot;%i\n&quot;, atoi(&quot;0&quot;));
    printf(&quot;%i\n&quot;, atoi(&quot;junk&quot;));         // no conversion can be performed
    printf(&quot;%i\n&quot;, atoi(&quot;2147483648&quot;));   // UB: out of range of int
}
| output=
-123
0
0
-2147483648
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.1.2 | title=The atoi, atol, and atoll functions | p=341}}
{{ref std c99}}
{{ref std | section=7.20.1.2 | title=The atoi, atol, and atoll functions | p=307}}
{{ref std c89}}
{{ref std | section=4.10.1.2 | title=The atoi function}}
{{ref std | section=4.10.1.3 | title=The atol function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strtol}}
{{dsc inc | c/string/byte/dsc strtoul}}
{{dsc see cpp | cpp/string/byte/atoi | atoi | atol | atoll}}
{{dsc end}}

[[ar:c/string/byte/atoi]]
[[cs:c/string/byte/atoi]]
[[de:c/string/byte/atoi]]
[[es:c/string/byte/atoi]]
[[fr:c/string/byte/atoi]]
[[it:c/string/byte/atoi]]
[[ja:c/string/byte/atoi]]
[[ko:c/string/byte/atoi]]
[[pl:c/string/byte/atoi]]
[[pt:c/string/byte/atoi]]
[[ru:c/string/byte/atoi]]
[[tr:c/string/byte/atoi]]
[[zh:c/string/byte/atoi]]</text>
      <sha1>4pbdd1n7ifpr8vu7qrlxm742yhddhir</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isalnum</title>
    <ns>0</ns>
    <id>6060</id>
    <revision>
      <id>83501</id>
      <parentid>83497</parentid>
      <timestamp>2016-02-17T17:03:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>actually since coliru is missing that locale, it will be less confusing for the users if the example handles it</comment>
      <text xml:space="preserve" bytes="2111">{{c/title|isalnum}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isalnum( int ch );
}}

Checks if the given character is an alphanumeric character as classified by the current C locale. In the default locale, the following characters are alphanumeric:

* digits ({{tt|0123456789}})
* uppercase letters ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}})
* lowercase letters ({{tt|abcdefghijklmnopqrstuvwxyz}})

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an alphanumeric character, {{tt|0}} otherwise.

===Example===
{{example
 | Demonstrates the use of isalnum() with different locales (OS-specific).
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    unsigned char c = '\xdf'; // German letter ß in ISO-8859-1

    printf(&quot;isalnum('\\xdf') in default C locale returned %d\n&quot;, !!isalnum(c));

    if(setlocale(LC_CTYPE, &quot;de_DE.iso88591&quot;))
        printf(&quot;isalnum('\\xdf') in ISO-8859-1 locale returned %d\n&quot;, !!isalnum(c));
}
 |p=true
 | output=
isalnum('\xdf') in default C locale returned 0
isalnum('\xdf') in ISO-8859-1 locale returned 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.1  | title=The isalnum function | p=200}}
{{ref std c99}}
{{ref std | section=7.4.1.1  | title=The isalnum function | p=181}}
{{ref std c89}}
{{ref std | section=4.3.1.1  | title= The isalnum function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswalnum}}
{{dsc see cpp | cpp/string/byte/isalnum}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/isalnum]]
[[cs:c/string/byte/isalnum]]
[[de:c/string/byte/isalnum]]
[[es:c/string/byte/isalnum]]
[[fr:c/string/byte/isalnum]]
[[it:c/string/byte/isalnum]]
[[ja:c/string/byte/isalnum]]
[[ko:c/string/byte/isalnum]]
[[pl:c/string/byte/isalnum]]
[[pt:c/string/byte/isalnum]]
[[ru:c/string/byte/isalnum]]
[[tr:c/string/byte/isalnum]]
[[zh:c/string/byte/isalnum]]</text>
      <sha1>f8u4gw8ns0ch7tnhfmcwh52ijlrd4my</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isalpha</title>
    <ns>0</ns>
    <id>6059</id>
    <revision>
      <id>90036</id>
      <parentid>78755</parentid>
      <timestamp>2017-02-02T13:49:28Z</timestamp>
      <contributor>
        <username>Chris.sharpe.99</username>
        <id>6373</id>
      </contributor>
      <text xml:space="preserve" bytes="2307">{{c/title|isalpha}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isalpha( int ch );
}}

Checks if the given character is an alphabetic character, i.e. either an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), or a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}).

In locales other than {{c|&quot;C&quot;}}, an alphabetic character is a character for which {{lc|isupper()}} or {{lc|islower()}} returns {{c|true}} or any other character considered alphabetic by the locale. In any case, {{lc|iscntrl()}}, {{lc|isdigit()}}, {{lc|ispunct()}} and {{lc|isspace()}} will return {{c|false}} for this character.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} or is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an alphabetic character, zero otherwise.

===Example===
{{example
 | Demonstrates the use of isalpha() with different locales (OS-specific). 
 | code=
#include &lt;ctype.h&gt;
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    unsigned char c = '\xdf'; // German letter ß in ISO-8859-1
 
    printf(&quot;isalpha('\\xdf') in default C locale returned %d\n&quot;, !!isalpha(c));
 
    setlocale(LC_CTYPE, &quot;de_DE.iso88591&quot;);
    printf(&quot;isalpha('\\xdf') in ISO-8859-1 locale returned %d\n&quot;, !!isalpha(c));
}
 | output=
isalpha('\xdf') in default C locale returned 0
isalpha('\xdf') in ISO-8859-1 locale returned 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.2  | title=The isalpha function | p=200-201}}
{{ref std c99}}
{{ref std | section=7.4.1.2  | title=The isalpha function | p=181-182}}
{{ref std c89}}
{{ref std | section=4.3.1.2  | title=The isalpha function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswalpha}}
{{dsc see cpp | cpp/string/byte/isalpha}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/isalpha]]
[[cs:c/string/byte/isalpha]]
[[de:c/string/byte/isalpha]]
[[es:c/string/byte/isalpha]]
[[fr:c/string/byte/isalpha]]
[[it:c/string/byte/isalpha]]
[[ja:c/string/byte/isalpha]]
[[ko:c/string/byte/isalpha]]
[[pl:c/string/byte/isalpha]]
[[pt:c/string/byte/isalpha]]
[[ru:c/string/byte/isalpha]]
[[tr:c/string/byte/isalpha]]
[[zh:c/string/byte/isalpha]]</text>
      <sha1>njbkad3yoq3qglf0h2yxni5j6n74m9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isblank</title>
    <ns>0</ns>
    <id>6051</id>
    <revision>
      <id>76562</id>
      <parentid>76025</parentid>
      <timestamp>2015-02-21T11:44:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1608">{{c/title|isblank}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h | since=c99 |
int isblank( int ch );
}}

Checks if the given character is a blank character in the current C locale. In the default C locale, only space ({{tt|0x20}}) and horizontal tab ({{tt|0x09}}) are classified as blank.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a blank character, zero otherwise.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;limits.h&gt;

int main(void)
{
    for (int ndx=0; ndx&lt;=UCHAR_MAX; ndx++)
        if (isblank(ndx)) printf(&quot;0x%02x\n&quot;, ndx);
}
 | output=
0x09
0x20
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.3 | title=The isblank function | p=201}}
{{ref std c99}}
{{ref std | section=7.4.1.3 | title=The isblank function | p=182}}
{{ref std c89}}
{{ref std | section= | title= }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswblank}}
{{dsc see cpp | cpp/string/byte/isblank}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/isblank]]
[[cs:c/string/byte/isblank]]
[[de:c/string/byte/isblank]]
[[es:c/string/byte/isblank]]
[[fr:c/string/byte/isblank]]
[[it:c/string/byte/isblank]]
[[ja:c/string/byte/isblank]]
[[ko:c/string/byte/isblank]]
[[pl:c/string/byte/isblank]]
[[pt:c/string/byte/isblank]]
[[ru:c/string/byte/isblank]]
[[tr:c/string/byte/isblank]]
[[zh:c/string/byte/isblank]]</text>
      <sha1>oiyrcm1cmq3nu9shyyz2y6pmyv7v81d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/iscntrl</title>
    <ns>0</ns>
    <id>6054</id>
    <revision>
      <id>78756</id>
      <parentid>76563</parentid>
      <timestamp>2015-06-08T13:29:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1872">{{c/title|iscntrl}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int iscntrl( int ch );
}}

Checks if the given character is a control character, i.e. codes {{tt|0x00-0x1F}} and {{tt|0x7F}}.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a control character, zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;
 
int main(void)
{
    unsigned char c = '\x94'; // the control code CCH in ISO-8859-1
    printf(&quot;In the default C locale, \\x94 is %sa control character\n&quot;,
           iscntrl(c) ? &quot;&quot; : &quot;not &quot; );
    setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    printf(&quot;In ISO-8859-1 locale, \\x94 is %sa control character\n&quot;,
           iscntrl(c) ? &quot;&quot; : &quot;not &quot; );
}
 | output=
In the default C locale, \x94 is not a control character
In ISO-8859-1 locale, \x94 is a control character
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.4  | title=The iscntrl function | p=201}}
{{ref std c99}}
{{ref std | section=7.4.1.4  | title=The iscntrl function | p=182}}
{{ref std c89}}
{{ref std | section=4.3.1.3  | title=The iscntrl function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswcntrl}}
{{dsc see cpp | cpp/string/byte/iscntrl}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/iscntrl]]
[[cs:c/string/byte/iscntrl]]
[[de:c/string/byte/iscntrl]]
[[es:c/string/byte/iscntrl]]
[[fr:c/string/byte/iscntrl]]
[[it:c/string/byte/iscntrl]]
[[ja:c/string/byte/iscntrl]]
[[ko:c/string/byte/iscntrl]]
[[pl:c/string/byte/iscntrl]]
[[pt:c/string/byte/iscntrl]]
[[ru:c/string/byte/iscntrl]]
[[tr:c/string/byte/iscntrl]]
[[zh:c/string/byte/iscntrl]]</text>
      <sha1>k09z63q8sxkf4yrfg8r4c5tmtkre57q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isdigit</title>
    <ns>0</ns>
    <id>6056</id>
    <revision>
      <id>78759</id>
      <parentid>76564</parentid>
      <timestamp>2015-06-08T13:32:57Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1869">{{c/title|isdigit}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isdigit( int ch );
}}

Checks if the given character is a numeric character ({{tt|0123456789}}).

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a numeric character, zero otherwise.

===Notes===
{{tt|isdigit}} and {{tt|isxdigit}} are the only standard narrow character classification functions that are not affected by the currently installed C locale, although some implementations (e.g. Microsoft in 1252 codepage) may classify additional single-byte characters as digits. 
&lt;!-- ref: C standard, note 224 in $7.11.1.1 --&gt;

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;limits.h&gt;
 
int main(void)
{
    for (int ndx=0; ndx&lt;=UCHAR_MAX; ndx++)
        if (isdigit(ndx)) printf(&quot;%c&quot;, ndx);
    printf(&quot;\n&quot;);
}
 | output=
0123456789
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.5 | title=The isdigit function | p=201}}
{{ref std c99}}
{{ref std | section=7.4.1.5 | title=The isdigit function | p=182}}
{{ref std c89}}
{{ref std | section=4.3.1.4 | title=The isdigit function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswdigit}}
{{dsc see cpp | cpp/string/byte/isdigit}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/isdigit]]
[[cs:c/string/byte/isdigit]]
[[de:c/string/byte/isdigit]]
[[es:c/string/byte/isdigit]]
[[fr:c/string/byte/isdigit]]
[[it:c/string/byte/isdigit]]
[[ja:c/string/byte/isdigit]]
[[ko:c/string/byte/isdigit]]
[[pl:c/string/byte/isdigit]]
[[pt:c/string/byte/isdigit]]
[[ru:c/string/byte/isdigit]]
[[tr:c/string/byte/isdigit]]
[[zh:c/string/byte/isdigit]]</text>
      <sha1>54hsh33q3s72slfjjty1headc0ecaoh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isgraph</title>
    <ns>0</ns>
    <id>6053</id>
    <revision>
      <id>78760</id>
      <parentid>76565</parentid>
      <timestamp>2015-06-08T13:35:17Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2146">{{c/title|isgraph}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isgraph( int ch );
}}

Checks if the given character has a graphical representation, i.e. it is either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}), or a punctuation character({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}}), or any graphical character specific to the current C locale.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character has a graphical representation character, zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;
 
int main(void)
{
    unsigned char c = '\xb6'; // the character ¶ in ISO-8859-1
    printf(&quot;In the default C locale, \\xb6 is %sgraphical\n&quot;,
           isgraph(c) ? &quot;&quot; : &quot;not &quot; );
    setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    printf(&quot;In ISO-8859-1 locale, \\xb6 is %sgraphical\n&quot;,
           isgraph(c) ? &quot;&quot; : &quot;not &quot; );
}
 | output=
In the default C locale, \xb6 is not graphical
In ISO-8859-1 locale, \xb6 is graphical
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.6 | title=The isgraph function | p=201-202}}
{{ref std c99}}
{{ref std | section=7.4.1.6 | title=The isgraph function | p=182-183}}
{{ref std c89}}
{{ref std | section=4.3.1.5 | title=The isgraph function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswgraph}}
{{dsc see cpp | cpp/string/byte/isgraph}}
{{dsc end}}
{{c/string/character classes}}

[[ar:c/string/byte/isgraph]]
[[cs:c/string/byte/isgraph]]
[[de:c/string/byte/isgraph]]
[[es:c/string/byte/isgraph]]
[[fr:c/string/byte/isgraph]]
[[it:c/string/byte/isgraph]]
[[ja:c/string/byte/isgraph]]
[[ko:c/string/byte/isgraph]]
[[pl:c/string/byte/isgraph]]
[[pt:c/string/byte/isgraph]]
[[ru:c/string/byte/isgraph]]
[[tr:c/string/byte/isgraph]]
[[zh:c/string/byte/isgraph]]</text>
      <sha1>t3hxp0jnthzptkpbruk8gt265fft0x2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/islower</title>
    <ns>0</ns>
    <id>6058</id>
    <revision>
      <id>78761</id>
      <parentid>76566</parentid>
      <timestamp>2015-06-08T13:36:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2138">{{c/title|islower}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int islower( int ch );
}}

Checks if the given character is classified as a lowercase character according to the current C locale. In the default &quot;C&quot; locale, {{tt|islower}} returns true only for the lowercase letters ({{tt|abcdefghijklmnopqrstuvwxyz}}).

If {{tt|islower}} returns {{c|true}}, it is guaranteed that {{lc|iscntrl}}, {{lc|isdigit}}, {{lc|ispunct}}, and {{lc|isspace}} return {{c|false}} for the same character in the same C locale.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a lowercase letter, zero otherwise.


===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    unsigned char c = '\xe5'; // letter å in ISO-8859-1
    printf(&quot;In the default C locale, \\xe5 is %slowercase\n&quot;,
           islower(c) ? &quot;&quot; : &quot;not &quot; );
    setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    printf(&quot;In ISO-8859-1 locale, \\xe5 is %slowercase\n&quot;,
           islower(c) ? &quot;&quot; : &quot;not &quot; );
}
 | output=
In the default C locale, \xe5 is not lowercase
In ISO-8859-1 locale, \xe5 is lowercase
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.7 | title=The islower function | p=202}}
{{ref std c99}}
{{ref std | section=7.4.1.7 | title=The islower function | p=183}}
{{ref std c89}}
{{ref std | section=4.3.1.6 | title=The islower function}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswlower}}
{{dsc see cpp | cpp/string/byte/islower}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/islower]]
[[cs:c/string/byte/islower]]
[[de:c/string/byte/islower]]
[[es:c/string/byte/islower]]
[[fr:c/string/byte/islower]]
[[it:c/string/byte/islower]]
[[ja:c/string/byte/islower]]
[[ko:c/string/byte/islower]]
[[pl:c/string/byte/islower]]
[[pt:c/string/byte/islower]]
[[ru:c/string/byte/islower]]
[[tr:c/string/byte/islower]]
[[zh:c/string/byte/islower]]</text>
      <sha1>esj8dxefgq94h8tgxgvr43hm62qdpx9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isprint</title>
    <ns>0</ns>
    <id>6050</id>
    <revision>
      <id>92092</id>
      <parentid>78763</parentid>
      <timestamp>2017-04-04T22:03:32Z</timestamp>
      <contributor>
        <ip>217.10.109.18</ip>
      </contributor>
      <text xml:space="preserve" bytes="2081">{{c/title|isprint}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isprint( int ch );
}}

Checks if the given character can be printed, i.e. it is either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}), a punctuation character({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}}), or space, or any character classified as printable by the current C locale.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character can be printed, zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    unsigned char c = '\xa0'; // the non-breaking space in ISO-8859-1
    printf(&quot;In the default C locale, \\xa0 is %sprintable\n&quot;, isprint(c)?&quot;&quot;:&quot;not &quot;);
    setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    printf(&quot;In ISO-8859-1 locale, \\xa0 is %sprintable\n&quot;, isprint(c)?&quot;&quot;:&quot;not &quot;);
}
| output=
In the default C locale, \xa0 is not printable
In ISO-8859-1 locale, \xa0 is printable
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.8 | title=The isprint function | p=202}}
{{ref std c99}}
{{ref std | section=7.4.1.8 | title=The isprint function | p=183}}
{{ref std c89}}
{{ref std | section=4.3.1.7 | title=The isprint function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswprint}}
{{dsc see cpp | cpp/string/byte/isprint}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/isprint]]
[[cs:c/string/byte/isprint]]
[[de:c/string/byte/isprint]]
[[es:c/string/byte/isprint]]
[[fr:c/string/byte/isprint]]
[[it:c/string/byte/isprint]]
[[ja:c/string/byte/isprint]]
[[ko:c/string/byte/isprint]]
[[pl:c/string/byte/isprint]]
[[pt:c/string/byte/isprint]]
[[ru:c/string/byte/isprint]]
[[tr:c/string/byte/isprint]]
[[zh:c/string/byte/isprint]]</text>
      <sha1>qkko3gfxw6c8xxp2jsqfytrkh1u85xg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/ispunct</title>
    <ns>0</ns>
    <id>6049</id>
    <revision>
      <id>78764</id>
      <parentid>76568</parentid>
      <timestamp>2015-06-08T13:40:09Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1986">{{c/title|ispunct}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int ispunct( int ch );
}}

Checks if the given character is a punctuation character in the current C locale. The default C locale classifies the characters {{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}} as punctuation.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a punctuation character, zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;
 
int main(void)
{
    unsigned char c = '\xd7'; // the character × (multiplication sign) in ISO-8859-1
    printf(&quot;In the default C locale, \\xd7 is %spunctuation\n&quot;,
           ispunct(c) ? &quot;&quot; : &quot;not &quot; );
    setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    printf(&quot;In ISO-8859-1 locale, \\xd7 is %spunctuation\n&quot;,
           ispunct(c) ? &quot;&quot; : &quot;not &quot; );
}
 | output=
In the default C locale, \xd7 is not punctuation
In ISO-8859-1 locale, \xd7 is punctuation
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.9 | title=The ispunct function | p=202}}
{{ref std c99}}
{{ref std | section=7.4.1.9 | title=The ispunct function | p=183}}
{{ref std c89}}
{{ref std | section=4.3.1.8 | title=The ispunct function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswpunct}}
{{dsc see cpp | cpp/string/byte/ispunct}}
{{dsc end}}
{{c/string/character classes}}

[[ar:c/string/byte/ispunct]]
[[cs:c/string/byte/ispunct]]
[[de:c/string/byte/ispunct]]
[[es:c/string/byte/ispunct]]
[[fr:c/string/byte/ispunct]]
[[it:c/string/byte/ispunct]]
[[ja:c/string/byte/ispunct]]
[[ko:c/string/byte/ispunct]]
[[pl:c/string/byte/ispunct]]
[[pt:c/string/byte/ispunct]]
[[ru:c/string/byte/ispunct]]
[[tr:c/string/byte/ispunct]]
[[zh:c/string/byte/ispunct]]</text>
      <sha1>oecegt4i39e94ldloy473lccbe3kmrn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isspace</title>
    <ns>0</ns>
    <id>6052</id>
    <revision>
      <id>78765</id>
      <parentid>76569</parentid>
      <timestamp>2015-06-08T13:41:49Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1702">{{c/title|isspace}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isspace( int ch );
}}

Checks if the given character is a whitespace character, i.e. either space ({{tt|0x20}}), form feed ({{tt|0x0c}}), line feed ({{tt|0x0a}}), carriage return ({{tt|0x0d}}), horizontal tab ({{tt|0x09}}) or vertical tab ({{tt|0x0b}}).

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a whitespace character, zero otherwise.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;limits.h&gt;
 
int main(void)
{
    for (int ndx=0; ndx&lt;=UCHAR_MAX; ndx++)
        if (isspace(ndx)) printf(&quot;0x%02x\n&quot;, ndx);
}
 | output=
0x09
0x0a
0x0b
0x0c
0x0d
0x20
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.10 | title=The isspace function | p=202-203}}
{{ref std c99}}
{{ref std | section=7.4.1.10 | title=The isspace function | p=183-184}}
{{ref std c89}}
{{ref std | section=4.3.1.9 | title=The isspace function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswspace}}
{{dsc see cpp | cpp/string/byte/isspace}}
{{dsc end}}
{{c/string/character classes}}

[[ar:c/string/byte/isspace]]
[[cs:c/string/byte/isspace]]
[[de:c/string/byte/isspace]]
[[es:c/string/byte/isspace]]
[[fr:c/string/byte/isspace]]
[[it:c/string/byte/isspace]]
[[ja:c/string/byte/isspace]]
[[ko:c/string/byte/isspace]]
[[pl:c/string/byte/isspace]]
[[pt:c/string/byte/isspace]]
[[ru:c/string/byte/isspace]]
[[tr:c/string/byte/isspace]]
[[zh:c/string/byte/isspace]]</text>
      <sha1>5aibnv8shohud6cgbmsay0qkk6ko3ae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isupper</title>
    <ns>0</ns>
    <id>6057</id>
    <revision>
      <id>78766</id>
      <parentid>76570</parentid>
      <timestamp>2015-06-08T13:43:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2129">{{c/title|isupper}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isupper( int ch );
}}

Checks if the given character is an uppercase character according to the current C locale. In the default &quot;C&quot; locale, {{tt|isupper}} returns true only for the uppercase letters ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}).

If {{tt|isupper}} returns {{c|true}}, it is guaranteed that {{lc|iscntrl}}, {{lc|isdigit}}, {{lc|ispunct}}, and {{lc|isspace}} return {{c|false}} for the same character in the same C locale.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an uppercase letter, zero otherwise.


===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;
 
int main(void)
{
    unsigned char c = '\xc6'; // letter Æ in ISO-8859-1
    printf(&quot;In the default C locale, \\xc6 is %suppercase\n&quot;,
           isupper(c) ? &quot;&quot; : &quot;not &quot; );
    setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    printf(&quot;In ISO-8859-1 locale, \\xc6 is %suppercase\n&quot;,
           isupper(c) ? &quot;&quot; : &quot;not &quot; );
}
 | output=
In the default C locale, \xc6 is not uppercase
In ISO-8859-1 locale, \xc6 is uppercase
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.11 | title=The isupper function | p=203}}
{{ref std c99}}
{{ref std | section=7.4.1.11 | title=The isupper function | p=184}}
{{ref std c89}}
{{ref std | section=4.3.1.10 | title=The isupper function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswupper}}
{{dsc see cpp | cpp/string/byte/isupper}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/isupper]]
[[cs:c/string/byte/isupper]]
[[de:c/string/byte/isupper]]
[[es:c/string/byte/isupper]]
[[fr:c/string/byte/isupper]]
[[it:c/string/byte/isupper]]
[[ja:c/string/byte/isupper]]
[[ko:c/string/byte/isupper]]
[[pl:c/string/byte/isupper]]
[[pt:c/string/byte/isupper]]
[[ru:c/string/byte/isupper]]
[[tr:c/string/byte/isupper]]
[[zh:c/string/byte/isupper]]</text>
      <sha1>nmzcqbfv2jdwgn2yx4oky7o5c9wivx7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/isxdigit</title>
    <ns>0</ns>
    <id>6055</id>
    <revision>
      <id>78767</id>
      <parentid>76571</parentid>
      <timestamp>2015-06-08T13:45:04Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1985">{{c/title|isxdigit}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int isxdigit( int ch );
}}

Checks if the given character is a hexadecimal numeric character ({{tt|0123456789abcdefABCDEF}}) or is classified as a hexadecimal character.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an hexadecimal numeric character, zero otherwise.

===Notes===
{{tt|isdigit}} and {{tt|isxdigit}} are the only standard narrow character classification functions that are not affected by the currently installed C locale. although some implementations (e.g. Microsoft in 1252 codepage) may classify additional single-byte characters as digits. 
&lt;!-- ref: C standard, note 224 in $7.11.1.1 --&gt;

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;limits.h&gt;
 
int main(void)
{
    for (int ndx=0; ndx&lt;=UCHAR_MAX; ndx++)
        if (isxdigit(ndx)) printf(&quot;%c&quot;, ndx);
    printf(&quot;\n&quot;);
}
 | output=
0123456789ABCDEFabcdef
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.1.12 | title=The isxdigit function | p=203}}
{{ref std c99}}
{{ref std | section=7.4.1.12 | title=The isxdigit function | p=184}}
{{ref std c89}}
{{ref std | section=4.3.1.11 | title=The isxdigit function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswxdigit}}
{{dsc see cpp | cpp/string/byte/isxdigit}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/byte/isxdigit]]
[[cs:c/string/byte/isxdigit]]
[[de:c/string/byte/isxdigit]]
[[es:c/string/byte/isxdigit]]
[[fr:c/string/byte/isxdigit]]
[[it:c/string/byte/isxdigit]]
[[ja:c/string/byte/isxdigit]]
[[ko:c/string/byte/isxdigit]]
[[pl:c/string/byte/isxdigit]]
[[pt:c/string/byte/isxdigit]]
[[ru:c/string/byte/isxdigit]]
[[tr:c/string/byte/isxdigit]]
[[zh:c/string/byte/isxdigit]]</text>
      <sha1>rg2pu0mtqjh2j1z5sbgq674m8aujy0u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/memchr</title>
    <ns>0</ns>
    <id>6143</id>
    <revision>
      <id>81968</id>
      <parentid>80823</parentid>
      <timestamp>2015-11-21T11:30:53Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>wording similar to strchr</comment>
      <text xml:space="preserve" bytes="1960">{{c/title| memchr}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl |
void* memchr( const void* ptr, int ch, size_t count );
}}
{{dcl end}}

Finds the first occurrence of {{tt|ch}} (after conversion to {{c|unsigned char}} as if by {{c|(unsigned char)ch}}) in the initial {{tt|count}} characters (each interpreted as {{c|unsigned char}}) of the object pointed to by {{tt|ptr}}.

The behavior is undefined if access occurs beyond the end of the array searched. The behavior is undefined if {{tt|ptr}} is a null pointer.

===Parameters===
{{par begin}}
{{par | ptr | pointer to the object to be examined}}
{{par | ch | character to search for}}
{{par | count | number of characters to examine}}
{{par end}}

===Return value===
Pointer to the location of the character, or {{lc|NULL}} if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(void)
{
    char str[] = &quot;ABCDEFG&quot;;
    char *ps = memchr(str,'D',strlen(str));
    if (ps != NULL)
       printf (&quot;search character found:  %s\n&quot;, ps);
    else
       printf (&quot;search character not found\n&quot;);
    
    return 0;
}
 | output=
search character found:  DEFG
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.1  | title=The memchr function | p=367}}
{{ref std c99}}
{{ref std | section=7.21.5.1  | title=The memchr function | p=330}}
{{ref std c89}}
{{ref std | section=4.11.5.1  | title=The memchr function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strchr}}
{{dsc see cpp | cpp/string/byte/memchr}}
{{dsc end}}

[[ar:c/string/byte/memchr]]
[[cs:c/string/byte/memchr]]
[[de:c/string/byte/memchr]]
[[es:c/string/byte/memchr]]
[[fr:c/string/byte/memchr]]
[[it:c/string/byte/memchr]]
[[ja:c/string/byte/memchr]]
[[ko:c/string/byte/memchr]]
[[pl:c/string/byte/memchr]]
[[pt:c/string/byte/memchr]]
[[ru:c/string/byte/memchr]]
[[tr:c/string/byte/memchr]]
[[zh:c/string/byte/memchr]]</text>
      <sha1>8fhn5zy8gjgkiwl4blbdi5cq44rhupl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/memcmp</title>
    <ns>0</ns>
    <id>6144</id>
    <revision>
      <id>88088</id>
      <parentid>81615</parentid>
      <timestamp>2016-10-29T05:05:26Z</timestamp>
      <contributor>
        <username>Doug65536</username>
        <id>5976</id>
      </contributor>
      <comment>Added behavior when count is zero, from 7.24.1 String function conventions</comment>
      <text xml:space="preserve" bytes="3130">{{c/title| memcmp}}
{{c/string/byte/navbar}}
{{ddcl | header=string.h |
int memcmp( const void* lhs, const void* rhs, size_t count );
}}

Compares the first {{tt|count}} characters of the objects pointed to by {{tt|lhs}} and {{tt|rhs}}. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of bytes (both interpreted as {{c|unsigned char}}) that differ in the objects being compared.

The behavior is undefined if access occurs beyond the end of either object pointed to by {{tt|lhs}} and {{tt|rhs}}. The behavior is undefined if either {{tt|lhs}} or {{tt|rhs}} is a null pointer.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the objects to compare}}
{{par | count | number of bytes to examine}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}}  appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal, or if count is zero.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Notes===
This function reads [[c/language/object|object representations]], not the object values, and is typically meaningful for byte arrays only: structs may have padding bytes whose values are indeterminate, the values of any bytes beyond the last stored member in a union are indeterminate, and a type may have two or more representations for the same value (different encodings for +0 and -0 or for +0.0 and –0.0, indeterminate padding bits within the type).

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

void demo(const char* lhs, const char* rhs, size_t sz)
{
    for(size_t n = 0; n &lt; sz; ++n) putchar(lhs[n]);
    int rc = memcmp(lhs, rhs, sz);
    if(rc == 0)
        printf(&quot; compares equal to &quot;);
    else if(rc &lt; 0)
        printf(&quot; precedes &quot;);
    else if(rc &gt; 0)
        printf(&quot; follows &quot;);
    for(size_t n = 0; n &lt; sz; ++n) putchar(rhs[n]);
    puts(&quot; in lexicographical order&quot;);
}

int main(void)
{
    char a1[] = {'a','b','c'};
    char a2[sizeof a1] = {'a','b','d'};

    demo(a1, a2, sizeof a1);
    demo(a2, a1, sizeof a1);
    demo(a1, a1, sizeof a1);
}
 | output=
abc precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.4.1  | title=The memcmp function | p=365}}
{{ref std c99}}
{{ref std | section=7.21.4.1  | title=The memcmp function | p=328}}
{{ref std c89}}
{{ref std | section=4.11.4.1  | title=The memcmp function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcmp}}
{{dsc inc | c/string/byte/dsc strncmp}}
{{dsc see cpp | cpp/string/byte/memcmp}}
{{dsc end}}

[[ar:c/string/byte/memcmp]]
[[cs:c/string/byte/memcmp]]
[[de:c/string/byte/memcmp]]
[[es:c/string/byte/memcmp]]
[[fr:c/string/byte/memcmp]]
[[it:c/string/byte/memcmp]]
[[ja:c/string/byte/memcmp]]
[[ko:c/string/byte/memcmp]]
[[pl:c/string/byte/memcmp]]
[[pt:c/string/byte/memcmp]]
[[ru:c/string/byte/memcmp]]
[[tr:c/string/byte/memcmp]]
[[zh:c/string/byte/memcmp]]</text>
      <sha1>81vh9rttbbitgqge7qc5988e1rhha22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/memcpy</title>
    <ns>0</ns>
    <id>6146</id>
    <revision>
      <id>87395</id>
      <parentid>87393</parentid>
      <timestamp>2016-08-19T13:48:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rv spurious comment about the lack of memcpy_s somewhere</comment>
      <text xml:space="preserve" bytes="5563">{{c/title|memcpy|memcpy_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl rev begin | num=1}}
{{dcl | until=c99 |
void* memcpy( void *dest, const void *src, size_t count );
}}
{{dcl | since=c99 |
void* memcpy( void *restrict dest, const void *restrict src, size_t count );
}}
{{dcl rev end}}
{{dcl | since=c11 | num=2 |
errno_t memcpy_s( void *restrict dest, rsize_t destsz,
                  const void *restrict src, rsize_t count );
}}
{{dcl end}}

@1@ Copies {{tt|count}} characters from the object pointed to by {{tt|src}} to the object pointed to by {{tt|dest}}. Both objects are interpreted as arrays of {{c|unsigned char}}.
@@The behavior is undefined if access occurs beyond the end of the dest array. If the objects overlap{{rev inl|since=c99| (which is a violation of the {{ltt|c/language/restrict|restrict}} contract)}}, the behavior is undefined. The behavior is undefined if either {{tt|dest}} or {{tt|src}} is a null pointer.

@2@ Same as {{v|1}}, except that the following errors are detected at runtime and cause the entire destination range {{c|[dest, dest+destsz)}} to be zeroed out (if both {{tt|dest}} and {{tt|destsz}} are valid), as well as call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|dest}} or {{tt|src}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is greater than {{lc|RSIZE_MAX}}
:* {{tt|count}} is greater than {{tt|destsz}} (buffer overflow would occur)
:* the source and the destination objects overlap
@@The behavior is undefined if the size of the character array pointed to by {{tt|dest}} &lt; {{tt|count}} &lt;= {{tt|destsz}}; in other words, an erroneous value of {{tt|destsz}} does not expose the impending buffer overflow.
:As all bounds-checked functions, {{tt|memcpy_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the object to copy to}}
{{par | destsz | max number of bytes to modify in the destination (typically the size of the destination object)}}
{{par | src | pointer to the object to copy from}}
{{par | count | number of bytes to copy}}
{{par end}}

===Return value===
@1@ Returns a copy of {{tt|dest}}
@2@ Returns zero on success and non-zero value on error. Also on error, if {{tt|dest}} is not a null pointer and {{tt|destsz}} is valid, writes {{tt|destsz}} zero bytes in to the destination array.

===Notes===
{{tt|memcpy}} may be used to set the [[c/language/object#Effective_type|effective type]] of an object obtained by an allocation function.

{{tt|memcpy}} is the fastest library routine for memory-to-memory copy. It is usually more efficient than {{lc|strcpy}}, which must scan the data it copies or {{lc|memmove}}, which must take precautions to handle overlapping inputs.

Several C compilers transform suitable memory-copying loops to {{tt|memcpy}} calls.

Where [[c/language/object#Strict_aliasing|strict aliasing]] prohibits examining the same memory as values of two different types, {{tt|memcpy}} may be used to convert the values.

===Example===
{{example| code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;stdio.h&gt;
#include &lt;stdint.h&gt;
#include &lt;inttypes.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    // simple usage
    char source[] = &quot;once upon a midnight dreary...&quot;, dest[4];
    memcpy(dest, source, sizeof dest);
    for(size_t n = 0; n &lt; sizeof dest; ++n)
        putchar(dest[n]);

    // setting effective type of allocated memory to be int
    int *p = malloc(3*sizeof(int));   // allocated memory has no effective type
    int arr[3] = {1,2,3};
    memcpy(p,arr,3*sizeof(int));      // allocated memory now has an effective type

    // reinterpreting data
    double d = 0.1;
//    int64_t n = *(int64_t*)(&amp;d); // strict aliasing violation
    int64_t n;
    memcpy(&amp;n, &amp;d, sizeof d); // OK
    printf(&quot;\n%a is %&quot; PRIx64 &quot; as an int64_t\n&quot;, d, n);

#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    char src[] = &quot;aaaaaaaaaa&quot;;
    char dst[] = &quot;xyxyxyxyxy&quot;;
    int r = memcpy_s(dst,sizeof dst,src,5);
    printf(&quot;dst = \&quot;%s\&quot;, r = %d\n&quot;, dst,r);
    r = memcpy_s(dst,5,src,10);            //  count is greater than destsz  
    printf(&quot;dst = \&quot;&quot;);
    for(size_t ndx=0; ndx&lt;sizeof dst; ++ndx) {
        char c = dst[ndx];
        c ? printf(&quot;%c&quot;, c) : printf(&quot;\\0&quot;);
    }
    printf(&quot;\&quot;, r = %d\n&quot;, r);
#endif
}
|p=true
|output=
once
0x1.999999999999ap-4 is 3fb999999999999a as an int64_t
dst = &quot;aaaaayxyxy&quot;, r = 0
dst = &quot;\0\0\0\0\0yxyxy&quot;, r = 22
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.2.1  | title=The memcpy function | p=362}}
{{ref std | section=K.3.7.1.1 | title=The memcpy_s function | p=614}}
{{ref std c99}}
{{ref std | section=7.21.2.1 | title=The memcpy function | p=325}}
{{ref std c89}}
{{ref std | section=4.11.2.1 | title=The memcpy function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc memmove}}
{{dsc inc | c/string/wide/dsc wmemcpy}}
{{dsc see cpp | cpp/string/byte/memcpy}}
{{dsc end}}

[[ar:c/string/byte/memcpy]]
[[cs:c/string/byte/memcpy]]
[[de:c/string/byte/memcpy]]
[[es:c/string/byte/memcpy]]
[[fr:c/string/byte/memcpy]]
[[it:c/string/byte/memcpy]]
[[ja:c/string/byte/memcpy]]
[[ko:c/string/byte/memcpy]]
[[pl:c/string/byte/memcpy]]
[[pt:c/string/byte/memcpy]]
[[ru:c/string/byte/memcpy]]
[[tr:c/string/byte/memcpy]]
[[zh:c/string/byte/memcpy]]</text>
      <sha1>ktbo54c085n364aevc0f1nz8l9qj2wv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/memmove</title>
    <ns>0</ns>
    <id>6147</id>
    <revision>
      <id>82534</id>
      <parentid>82425</parentid>
      <timestamp>2015-12-21T13:32:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>using memmove to set effective type</comment>
      <text xml:space="preserve" bytes="5426">{{c/title| memmove | memmove_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl | num=1 |
void* memmove( void* dest, const void* src, size_t count );
}}
{{dcl | since=c11 | num=2 |
errno_t memmove_s(void *dest, rsize_t destsz, const void *src, rsize_t count);
}}
{{dcl end}}

@1@ Copies {{tt|count}} characters from the object pointed to by {{tt|src}} to the object pointed to by {{tt|dest}}. Both objects are interpreted as arrays of {{c|unsigned char}}. The objects may overlap: copying takes place as if the characters were copied to a temporary character array and then the characters were copied from the array to {{tt|dest}}.
@@The behavior is undefined if access occurs beyond the end of the dest array. The behavior is undefined if either {{tt|dest}} or {{tt|src}} is a null pointer.
@2@ Same as {{v|1}}, except when detecting the following errors at runtime, it zeroes out the entire destination range {{c|[dest, dest+destsz)}} (if both {{tt|dest}} and {{tt|destsz}} are valid) and calls the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|dest}} or {{tt|src}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is greater than {{lc|RSIZE_MAX}}
:* {{tt|count}} is greater than {{tt|destsz}} (buffer overflow would occur)
@@The behavior is undefined if the size of the character array pointed to by {{tt|dest}} &lt; {{tt|count}} &lt;= {{tt|destsz}}; in other words, an erroneous value of {{tt|destsz}} does not expose the impending buffer overflow.
:As all bounds-checked functions, {{tt|memmove_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the object to copy to}}
{{par | destsz | max number of bytes to modify in the destination (typically the size of the destination object)}}
{{par | src | pointer to the object to copy from}}
{{par | count | number of bytes to copy}}
{{par end}}

===Return value===
@1@ Returns a copy of {{tt|dest}}
@2@ Returns zero on success and non-zero value on error. Also on error, if {{tt|dest}} is not a null pointer and {{tt|destsz}} is valid, writes {{tt|destsz}} zero bytes in to the destination array.

===Notes===
{{tt|memmove}} may be used to set the [[c/language/object#Effective_type|effective type]] of an object obtained by an allocation function.

Despite being specified &quot;as if&quot; a temporary buffer is used, actual implementations of this function do not incur the overhead or double copying or extra memory. A common approach (glibc and bsd libc) is to copy bytes forwards from the beginning of the buffer if the destination starts before the source, and backwards from the end otherwise, with a fall back to the more efficient {{lc|memcpy}} when there is no overlap at all.

Where [[c/language/object#Strict_aliasing|strict aliasing]] prohibits examining the same memory as values of two different types, {{tt|memmove}} may be used to convert the values.

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;stdio.h&gt;
#include &lt;stdint.h&gt;
#include &lt;inttypes.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    char str[] = &quot;1234567890&quot;;
    puts(str);
    memmove(str+4, str+3, 3); // copy from [4,5,6] to [5,6,7]
    puts(str);

    // setting effective type of allocated memory to be int
    int *p = malloc(3*sizeof(int));   // allocated memory has no effective type
    int arr[3] = {1,2,3};
    memmove(p,arr,3*sizeof(int));     // allocated memory now has an effective type

    // reinterpreting data
    double d = 0.1;
//    int64_t n = *(int64_t*)(&amp;d); // strict aliasing violation
    int64_t n;
    memmove(&amp;n, &amp;d, sizeof d); // OK
    printf(&quot;%a is %&quot; PRIx64 &quot; as an int64_t\n&quot;, d, n);

#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    char src[] = &quot;aaaaaaaaaa&quot;;
    char dst[] = &quot;xyxyxyxyxy&quot;;
    int r = memmove_s(dst,sizeof dst,src,5);
    printf(&quot;dst = \&quot;%s\&quot;, r = %d\n&quot;, dst,r);
    r = memmove_s(dst,5,src,10);            //  count is greater than destsz  
    printf(&quot;dst = \&quot;&quot;);
    for(size_t ndx=0; ndx&lt;sizeof dst; ++ndx) {
        char c = dst[ndx];
        c ? printf(&quot;%c&quot;, c) : printf(&quot;\\0&quot;);
    }
    printf(&quot;\&quot;, r = %d\n&quot;, r);
#endif
}
|p=true
| output=
1234567890
1234456890
0x1.999999999999ap-4 is 3fb999999999999a as an int64_t
dst = &quot;aaaaayxyxy&quot;, r = 0
dst = &quot;\0\0\0\0\0yxyxy&quot;, r = 22
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.2.2  | title=The memmove function | p=363}}
{{ref std | section=K.3.7.1.2 | title=The memmove_s function | p=615}}
{{ref std c99}}
{{ref std | section=7.21.2.2  | title=The memmove function | p=326}}
{{ref std c89}}
{{ref std | section=4.11.2.2 | title=The memmove function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc memcpy}}
{{dsc inc | c/string/wide/dsc wmemmove}}
{{dsc see cpp | cpp/string/byte/memmove}}
{{dsc end}}

[[ar:c/string/byte/memmove]]
[[cs:c/string/byte/memmove]]
[[de:c/string/byte/memmove]]
[[es:c/string/byte/memmove]]
[[fr:c/string/byte/memmove]]
[[it:c/string/byte/memmove]]
[[ja:c/string/byte/memmove]]
[[ko:c/string/byte/memmove]]
[[pl:c/string/byte/memmove]]
[[pt:c/string/byte/memmove]]
[[ru:c/string/byte/memmove]]
[[tr:c/string/byte/memmove]]
[[zh:c/string/byte/memmove]]</text>
      <sha1>onibb07lucb8mn17etnzd8i500p9sra</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/memset</title>
    <ns>0</ns>
    <id>6145</id>
    <revision>
      <id>89226</id>
      <parentid>89216</parentid>
      <timestamp>2017-01-11T14:27:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+bugzilla reference for gcc dropping memset</comment>
      <text xml:space="preserve" bytes="4292">{{c/title| memset|memset_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header| string.h}}
{{dcl | num=1 |
void *memset( void *dest, int ch, size_t count );
}}
{{dcl |num=2| since=c11 |
errno_t memset_s( void *dest, rsize_t destsz, int ch, rsize_t count )
}}
{{dcl end}}

@1@Copies the value {{tt|ch}} (after conversion to {{c|unsigned char}} as if by {{c|(unsigned char)ch}}) into each of the first {{tt|count}} characters of the object pointed to by {{tt|dest}}.
@@The behavior is undefined if access occurs beyond the end of the dest array. The behavior is undefined if {{tt|dest}} is a null pointer.
@2@ Same as {{v|1}}, except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function after storing {{tt|ch}} in every location of the destination range {{c|[dest, dest+destsz)}} if {{tt|dest}} and {{tt|destsz}} are themselves valid:
:* {{tt|dest}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is greater than {{lc|RSIZE_MAX}}
:* {{tt|count}} is greater than {{tt|destsz}} (buffer overflow would occur)
@@The behavior is undefined if the size of the character array pointed to by {{tt|dest}} &lt; {{tt|count}} &lt;= {{tt|destsz}}; in other words, an erroneous value of {{tt|destsz}} does not expose the impending buffer overflow.
:As all bounds-checked functions, {{tt|memset_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the object to fill}}
{{par | ch | fill byte}}
{{par | count | number of bytes to fill}}
{{par | destsz | size of the destination array}}
{{par end}}

===Return value===
@1@ A copy of {{tt|dest}}
@2@ zero on success, non-zero on error. Also on error, if {{tt|dest}} is not a null pointer and {{tt|destsz}} is valid, writes {{tt|destsz}} fill bytes {{tt|ch}} to the destination array.

===Notes===
{{tt|memset}} may be optimized away (under the [[c/language/as if|as-if]] rules) if the object modified by this function is not accessed again for the rest of its lifetime (e.g. [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=8537 gcc bug 8537]). For that reason, this function cannot be used to scrub memory (e.g. to fill an array that stored a password with zeroes). This optimization is prohibited for {{tt|memset_s}}: it is guaranteed to perform the memory write. Third-party solutions for that include FreeBSD [https://www.freebsd.org/cgi/man.cgi?query=explicit_bzero explicit_bzero] or Microsoft [https://msdn.microsoft.com/en-us/library/windows/desktop/aa366877.aspx SecureZeroMemory].

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    char str[] = &quot;ghghghghghghghghghghgh&quot;;
    puts(str);
    memset(str,'a',5);
    puts(str);

#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    int r = memset_s(str, sizeof str, 'b', 5);
    printf(&quot;str = \&quot;%s\&quot;, r = %d\n&quot;, str, r);
    r = memset_s(str, 5, 'c', 10);   // count is greater than destsz  
    printf(&quot;str = \&quot;%s\&quot;, r = %d\n&quot;, str, r);
#endif
}
|p=true
|output=
ghghghghghghghghghghgh
aaaaahghghghghghghghgh
str = &quot;bbbbbhghghghghghghghgh&quot;, r = 0
str = &quot;ccccchghghghghghghghgh&quot;, r = 22
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.6.1  | title=The memset function | p=371}}
{{ref std | section=K.3.7.4.1 | title=The memset_s function | p=621-622}}
{{ref std c99}}
{{ref std | section=7.21.6.1  | title=The memset function | p=333}}
{{ref std c89}}
{{ref std | section=4.11.6.1  | title=The memset function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc memcpy}}
{{dsc inc | c/string/wide/dsc wmemset}}
{{dsc see cpp | cpp/string/byte/memset}}
{{dsc end}}

[[ar:c/string/byte/memset]]
[[cs:c/string/byte/memset]]
[[de:c/string/byte/memset]]
[[es:c/string/byte/memset]]
[[fr:c/string/byte/memset]]
[[it:c/string/byte/memset]]
[[ja:c/string/byte/memset]]
[[ko:c/string/byte/memset]]
[[pl:c/string/byte/memset]]
[[pt:c/string/byte/memset]]
[[ru:c/string/byte/memset]]
[[tr:c/string/byte/memset]]
[[zh:c/string/byte/memset]]</text>
      <sha1>d5pf683y7i56m4b49tgtfkuxedy3brn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strcat</title>
    <ns>0</ns>
    <id>6129</id>
    <revision>
      <id>80911</id>
      <parentid>80867</parentid>
      <timestamp>2015-09-16T11:56:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>{{tt| }}, {{c| }}</comment>
      <text xml:space="preserve" bytes="5140">{{c/title| strcat|strcat_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl rev begin|num=1}}
{{dcl | until=c99 |
char *strcat( char *dest, const char *src );
}}
{{dcl | since=c99 |
char *strcat( char *restrict dest, const char *restrict src );
}}
{{dcl rev end}}
{{dcl | since=c11 | num=2 | 
errno_t strcat_s(char *restrict dest, rsize_t destsz, const char *restrict src);
}}
{{dcl end}}

@1@ Appends a copy of the null-terminated byte string pointed to by {{tt|src}} to the end of the null-terminated byte string pointed to by {{tt|dest}}. The character {{tt|src[0]}} replaces the null terminator at the end of {{tt|dest}}. The resulting byte string is null-terminated.
@@The behavior is undefined if the destination array is not large enough for the contents of both {{tt|src}} and {{tt|dest}} and the terminating null character. The behavior is undefined if the strings overlap. The behavior is undefined if either {{tt|dest}} or {{tt|src}} is not a pointer to a null-terminated byte string.
@2@ Same as {{v|1}}, except that it may clobber the rest of the destination array (from the last character written to {{tt|destsz}}) with unspecified values and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} is zero or greater than {{lc|RSIZE_MAX}}
:* there is no null terminator in the first {{tt|destsz}} bytes of {{tt|dest}}
:* truncation would occur (the available space at the end of {{tt|dest}} would not fit every character, including the null terminator, of {{tt|src}})
:* overlap would occur between the source and the destination strings
@@The behavior is undefined if the size of the character array pointed to by {{tt|dest}} &lt; {{c|strlen(dest)+strlen(src)+1}} &lt;= {{tt|destsz}}; in other words, an erroneous value of {{tt|destsz}} does not expose the impending buffer overflow.
:As all bounds-checked functions, {{tt|strcat_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to append to}}
{{par | src | pointer to the null-terminated byte string to copy from}}
{{par | destsz | maximum number of characters to write, typically the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes zero to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{lc|RMAX_SIZE}}).

===Notes===
{{tt|strcat_s}} is allowed to clobber the destination array from the last character written up to {{tt|destsz}} in order to improve efficiency: it may copy in multibyte blocks and then check for null bytes.

The function {{tt|strcat_s}} is similar to the BSD function {{tt|strlcat}}, except that 
* {{tt|strlcat}} truncates the source string to fit in the destination
* {{tt|strlcat}} does not perform all the runtime checks that {{tt|strcat_s}} does
* {{tt|strlcat}} does not make failures obvious by setting the destination to a null string or calling a handler if the call fails.

Although {{tt|strcat_s}} prohibits truncation due to potential security risks, it's possible to truncate a string using bounds-checked {{lc|strncat|strncat_s}} instead.

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;string.h&gt; 
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void) 
{
    char str[50] = &quot;Hello &quot;;
    char str2[50] = &quot;World!&quot;;
    strcat(str, str2);
    strcat(str, &quot; ...&quot;);
    strcat(str, &quot; Goodbye World!&quot;);
    puts(str);

#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    int r = strcat_s(str, sizeof str, &quot; ... &quot;);
    printf(&quot;str = \&quot;%s\&quot;, r = %d\n&quot;, str, r);
    r = strcat_s(str, sizeof str, &quot; and this is too much&quot;);
    printf(&quot;str = \&quot;%s\&quot;, r = %d\n&quot;, str, r);
#endif
}
|p=true
| output=
Hello World! ... Goodbye World!
str = &quot;Hello World! ... Goodbye World! ... &quot;, r = 0
str = &quot;&quot;, r = 22
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.3.1  | title=The strcat function | p=364}}
{{ref std | section=K.3.7.2.1 | title=The strcat_s function | p=617-618}}
{{ref std c99}}
{{ref std | section=7.21.3.1  | title=The strcat function | p=327}}
{{ref std c89}}
{{ref std | section=4.11.3.1 | title=The strcat function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strncat}}
{{dsc inc | c/string/byte/dsc strcpy}}
{{dsc see cpp | cpp/string/byte/strcat}}
{{dsc end}}

[[ar:c/string/byte/strcat]]
[[cs:c/string/byte/strcat]]
[[de:c/string/byte/strcat]]
[[es:c/string/byte/strcat]]
[[fr:c/string/byte/strcat]]
[[it:c/string/byte/strcat]]
[[ja:c/string/byte/strcat]]
[[ko:c/string/byte/strcat]]
[[pl:c/string/byte/strcat]]
[[pt:c/string/byte/strcat]]
[[ru:c/string/byte/strcat]]
[[tr:c/string/byte/strcat]]
[[zh:c/string/byte/strcat]]</text>
      <sha1>agfxa3lij737sx5yisx909l613s4a8a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strchr</title>
    <ns>0</ns>
    <id>6136</id>
    <revision>
      <id>81930</id>
      <parentid>80522</parentid>
      <timestamp>2015-11-20T15:07:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>wording consistent with strrchr</comment>
      <text xml:space="preserve" bytes="2183">{{c/title| strchr}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl |
char *strchr( const char *str, int ch );
}}
{{dcl end}}

Finds the first occurrence of {{tt|ch}} (after conversion to {{c|char}} as if by {{c|(char)ch}}) in the null-terminated byte string pointed to by {{tt|str}} (each character interpreted as {{c|unsigned char}}). The terminating null character is considered to be a part of the string and can be found when searching for {{c|'\0'}}.

The behavior is undefined if {{tt|str}} is not a pointer to a null-terminated byte string.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be analyzed}}
{{par | ch | character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or null pointer if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(void)
{
  const char *str = &quot;Try not. Do, or do not. There is no try.&quot;;
  char target = 'T';
  const char *result = str;

  while((result = strchr(result, target)) != NULL) {
    printf(&quot;Found '%c' starting at '%s'\n&quot;, target, result);
    ++result; // Increment result, otherwise we'll find target at the same location
  }
}
 | output=
Found 'T' starting at 'Try not. Do, or do not. There is no try.'
Found 'T' starting at 'There is no try.'
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.2  | title=The strchr function | p=367-368}}
{{ref std c99}}
{{ref std | section=7.21.5.2  | title=The strchr function | p=330}}
{{ref std c89}}
{{ref std | section=4.11.5.2  | title=The strchr function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strrchr}}
{{dsc inc | c/string/byte/dsc strpbrk}}
{{dsc see cpp | cpp/string/byte/strchr}}
{{dsc end}}

[[ar:c/string/byte/strchr]]
[[cs:c/string/byte/strchr]]
[[de:c/string/byte/strchr]]
[[es:c/string/byte/strchr]]
[[fr:c/string/byte/strchr]]
[[it:c/string/byte/strchr]]
[[ja:c/string/byte/strchr]]
[[ko:c/string/byte/strchr]]
[[pl:c/string/byte/strchr]]
[[pt:c/string/byte/strchr]]
[[ru:c/string/byte/strchr]]
[[tr:c/string/byte/strchr]]
[[zh:c/string/byte/strchr]]</text>
      <sha1>ojm1s6wqu9xgj51qb7kg9omyq7h0rmv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strcmp</title>
    <ns>0</ns>
    <id>6133</id>
    <revision>
      <id>80520</id>
      <parentid>80516</parentid>
      <timestamp>2015-08-19T11:05:57Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+byte (for consistency)</comment>
      <text xml:space="preserve" bytes="2525">{{c/title| strcmp}}
{{c/string/byte/navbar}}
{{ddcl | header=string.h |
int strcmp( const char *lhs, const char *rhs );
}}

Compares two null-terminated byte strings lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of characters (both interpreted as {{c|unsigned char}}) that differ in the strings being compared.

The behavior is undefined if {{tt|lhs}} or {{tt|rhs}} are not pointers to null-terminated byte strings.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated byte strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Notes===
This function is not locale-sensitive, unlike {{lc|strcoll}} and {{lc|strxfrm}}.

===Example===
{{example
 |
 | code=
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

void demo(const char* lhs, const char* rhs)
{
    int rc = strcmp(lhs, rhs);
    if(rc == 0)
        printf(&quot;[%s] equals [%s]\n&quot;, lhs, rhs);
    else if(rc &lt; 0)
        printf(&quot;[%s] precedes [%s]\n&quot;, lhs, rhs);
    else if(rc &gt; 0)
        printf(&quot;[%s] follows [%s]\n&quot;, lhs, rhs);

}
int main(void)
{
    const char* string = &quot;Hello World!&quot;;
    demo(string, &quot;Hello!&quot;);
    demo(string, &quot;Hello&quot;);
    demo(string, &quot;Hello there&quot;);
    demo(&quot;Hello, everybody!&quot; + 12, &quot;Hello, somebody!&quot; + 11);
}
 | output=
[Hello World!] precedes [Hello!]
[Hello World!] follows [Hello]
[Hello World!] precedes [Hello there]
[body!] equals [body!]
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.4.2  | title=The strcmp function | p=365-366}}
{{ref std c99}}
{{ref std | section=7.21.4.2  | title=The strcmp function | p=328-329}}
{{ref std c89}}
{{ref std | section=4.11.4.2 | title=The strcmp function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strncmp}}
{{dsc inc | c/string/wide/dsc wcscmp}}
{{dsc inc | c/string/byte/dsc memcmp}}
{{dsc inc | c/string/byte/dsc strcoll}}
{{dsc see cpp | cpp/string/byte/strcmp}}
{{dsc end}}

[[ar:c/string/byte/strcmp]]
[[cs:c/string/byte/strcmp]]
[[de:c/string/byte/strcmp]]
[[es:c/string/byte/strcmp]]
[[fr:c/string/byte/strcmp]]
[[it:c/string/byte/strcmp]]
[[ja:c/string/byte/strcmp]]
[[ko:c/string/byte/strcmp]]
[[pl:c/string/byte/strcmp]]
[[pt:c/string/byte/strcmp]]
[[ru:c/string/byte/strcmp]]
[[tr:c/string/byte/strcmp]]
[[zh:c/string/byte/strcmp]]</text>
      <sha1>j2wik02otq3u52ojh6x9vuantvjrf48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strcoll</title>
    <ns>0</ns>
    <id>6135</id>
    <revision>
      <id>78796</id>
      <parentid>76595</parentid>
      <timestamp>2015-06-09T10:49:33Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2185">{{c/title| strcoll}}
{{c/string/byte/navbar}}
{{ddcl | header=string.h |
int strcoll( const char *lhs, const char *rhs );
}}

Compares two null-terminated byte strings according to the current locale as defined by the {{lc|LC_COLLATE}} category.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated byte strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} is ''less than'' (precedes) {{tt|rhs}}.

{{c|0}} if {{tt|lhs}} is ''equal to'' {{tt|rhs}}.

Positive value if {{tt|lhs}} is ''greater than'' (follows) {{tt|rhs}}.

===Notes===
{{cpp/locale/collate/collation_note}}

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    setlocale(LC_COLLATE, &quot;cs_CZ.iso88592&quot;);

    const char* s1 = &quot;hrnec&quot;;
    const char* s2 = &quot;chrt&quot;;

    printf(&quot;In the Czech locale: &quot;);
    if(strcoll(s1, s2) &lt; 0)
         printf(&quot;%s before %s\n&quot;, s1, s2);
    else
         printf(&quot;%s before %s\n&quot;, s2, s1);

    printf(&quot;In lexicographical comparison: &quot;);
    if(strcmp(s1, s2) &lt; 0)
         printf(&quot;%s before %s\n&quot;, s1, s2);
    else
         printf(&quot;%s before %s\n&quot;, s2, s1);
}
 | output=
In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.4.3  | title=The strcoll function | p=366}}
{{ref std c99}}
{{ref std | section=7.21.4.3  | title=The strcoll function | p=329}}
{{ref std c89}}
{{ref std | section=4.11.4.3  | title=The strcoll function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcscoll}}
{{dsc inc | c/string/byte/dsc strxfrm}}
{{dsc inc | c/string/wide/dsc wcsxfrm}}
{{dsc inc | c/string/byte/dsc strcmp}}
{{dsc see cpp | cpp/string/byte/strcoll}}
{{dsc end}}

[[ar:c/string/byte/strcoll]]
[[cs:c/string/byte/strcoll]]
[[de:c/string/byte/strcoll]]
[[es:c/string/byte/strcoll]]
[[fr:c/string/byte/strcoll]]
[[it:c/string/byte/strcoll]]
[[ja:c/string/byte/strcoll]]
[[ko:c/string/byte/strcoll]]
[[pl:c/string/byte/strcoll]]
[[pt:c/string/byte/strcoll]]
[[ru:c/string/byte/strcoll]]
[[tr:c/string/byte/strcoll]]
[[zh:c/string/byte/strcoll]]</text>
      <sha1>6pqzy0bj81r595aohwluhano1nxbcur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strcpy</title>
    <ns>0</ns>
    <id>6127</id>
    <revision>
      <id>85666</id>
      <parentid>85665</parentid>
      <timestamp>2016-05-01T14:26:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="4975">{{c/title| strcpy|strcpy_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl rev begin|num=1}}
{{dcl | until=c99 |
char *strcpy( char *dest, const char *src );
}}
{{dcl | since=c99 |
char *strcpy( char *restrict dest, const char *restrict src );
}}
{{dcl rev end}}
{{dcl |num=2| since=c11 |
errno_t strcpy_s(char *restrict dest, rsize_t destsz, const char *restrict src);
}}
{{dcl end}}

@1@ Copies the null-terminated byte string pointed to by {{tt|src}}, including the null terminator, to the character array whose first element is pointed to by {{tt|dest}}.
@@The behavior is undefined if the {{tt|dest}} array is not large enough. The behavior is undefined if the strings overlap. The behavior is undefined if either {{tt|dest}} is not a pointer to a character array or {{tt|src}} is not a pointer to a null-terminated byte string.
@2@ Same as {{v|1}}, except that it may clobber the rest of the destination array with unspecified values and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} is zero or greater than {{lc|RSIZE_MAX}}
:* {{tt|destsz}} is less or equal {{c|strnlen_s(src, destsz)}}; in other words, truncation would occur
:* overlap would occur between the source and the destination strings
@@The behavior is undefined if the size of the character array pointed to by {{tt|dest}} &lt;= {{c|strnlen_s(src, destsz)}} &lt; {{tt|destsz}}; in other words, an erroneous value of {{tt|destsz}} does not expose the impending buffer overflow.
:As all bounds-checked functions, {{tt|strcpy_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the character array to write to}}
{{par | src | pointer to the null-terminated byte string to copy from}}
{{par | destsz | maximum number of characters to write, typically the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes zero to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{lc|RSIZE_MAX}}).

===Notes===
{{tt|strcpy_s}} is allowed to clobber the destination array from the last character written up to {{tt|destsz}} in order to improve efficiency: it may copy in multibyte blocks and then check for null bytes.

The function {{tt|strcpy_s}} is similar to the BSD function {{tt|strlcpy}}, except that 
* {{tt|strlcpy}} truncates the source string to fit in the destination (which is a security risk)
* {{tt|strlcpy}} does not perform all the runtime checks that {{tt|strcpy_s}} does
* {{tt|strlcpy}} does not make failures obvious by setting the destination to a null string or calling a handler if the call fails.

Although {{tt|strcpy_s}} prohibits truncation due to potential security risks, it's possible to truncate a string using bounds-checked {{lc|strncpy|strncpy_s}} instead.

===Example===
{{example | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    char *src = &quot;Take the test.&quot;;
//  src[0] = 'M' ; // this would be undefined behavior
    char dst[strlen(src) + 1]; // +1 to accomodate for the null terminator
    strcpy(dst, src);
    dst[0] = 'M'; // OK
    printf(&quot;src = %s\ndst = %s\n&quot;, src, dst);

#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    int r = strcpy_s(dst, sizeof dst, src);
    printf(&quot;dst = \&quot;%s\&quot;, r = %d\n&quot;, dst, r);
    r = strcpy_s(dst, sizeof dst, &quot;Take even more tests.&quot;);
    printf(&quot;dst = \&quot;%s\&quot;, r = %d\n&quot;, dst, r);
#endif
}
|p=true
| output=
src = Take the test.
dst = Make the test.
dst = &quot;Take the test.&quot;, r = 0
dst = &quot;&quot;, r = 22
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.2.3  | title=The strcpy function | p=363}}
{{ref std | section=K.3.7.1.3 | title=The strcpy_s function | p=615-616}}
{{ref std c99}}
{{ref std | section=7.21.2.3  | title=The strcpy function | p=326}}
{{ref std c89}}
{{ref std | section=4.11.2.3 | title=The strcpy function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strncpy}}
{{dsc inc | c/string/byte/dsc memcpy}}
{{dsc inc | c/string/wide/dsc wcscpy}}
{{dsc inc | c/experimental/dynamic/dsc strdup}}
{{dsc see cpp | cpp/string/byte/strcpy}}
{{dsc end}}

[[ar:c/string/byte/strcpy]]
[[cs:c/string/byte/strcpy]]
[[de:c/string/byte/strcpy]]
[[es:c/string/byte/strcpy]]
[[fr:c/string/byte/strcpy]]
[[it:c/string/byte/strcpy]]
[[ja:c/string/byte/strcpy]]
[[ko:c/string/byte/strcpy]]
[[pl:c/string/byte/strcpy]]
[[pt:c/string/byte/strcpy]]
[[ru:c/string/byte/strcpy]]
[[tr:c/string/byte/strcpy]]
[[zh:c/string/byte/strcpy]]</text>
      <sha1>fqrsr9m4vu4m3ayj1pm5ifkpjo0hajt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strcspn</title>
    <ns>0</ns>
    <id>6139</id>
    <revision>
      <id>89169</id>
      <parentid>80527</parentid>
      <timestamp>2017-01-05T23:11:03Z</timestamp>
      <contributor>
        <ip>46.251.92.42</ip>
      </contributor>
      <comment>fixed typo: aa -&gt; at</comment>
      <text xml:space="preserve" bytes="2320">{{c/title| strcspn}}
{{c/string/byte/navbar}}
{{ddcl | header=string.h |
size_t strcspn( const char *dest, const char *src );
}}

Returns the length of the maximum initial segment of the null-terminated byte string pointed to by {{tt|dest}}, that consists of only the characters ''not'' found in the null-terminated byte string pointed to by {{tt|src}}.

The behavior is undefined if either {{tt|dest}} or {{tt|src}} is not a pointer to a null-terminated byte string.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to be analyzed}}
{{par | src | pointer to the null-terminated byte string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters not found in the null-terminated byte string pointed to by {{tt|src}}

===Notes===
The function name stands for &quot;complementary span&quot; because the function searches for characters not found in {{tt|src}}, that is the complement of {{tt|src}}.

===Example===
{{example
 |
 | code=
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    const char *string = &quot;abcde312$#@&quot;;
    const char *invalid = &quot;*$#&quot;;

    size_t valid_len = strcspn(string, invalid);
    if(valid_len != strlen(string))
       printf(&quot;'%s' contains invalid chars starting at position %zu\n&quot;,
               string, valid_len);
}
 | output=
'abcde312$#@' contains invalid chars starting at position 8
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.3  | title=The strcspn function | p=368}}
{{ref std c99}}
{{ref std | section=7.21.5.3  | title=The strcspn function | p=331}}
{{ref std c89}}
{{ref std | section=4.11.5.3  | title=The strcspn function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strspn}}
{{dsc inc | c/string/wide/dsc wcscspn}}
{{dsc inc | c/string/byte/dsc strpbrk}}
{{dsc see cpp | cpp/string/byte/strcspn}}
{{dsc end}}

[[ar:c/string/byte/strcspn]]
[[cs:c/string/byte/strcspn]]
[[de:c/string/byte/strcspn]]
[[es:c/string/byte/strcspn]]
[[fr:c/string/byte/strcspn]]
[[it:c/string/byte/strcspn]]
[[ja:c/string/byte/strcspn]]
[[ko:c/string/byte/strcspn]]
[[pl:c/string/byte/strcspn]]
[[pt:c/string/byte/strcspn]]
[[ru:c/string/byte/strcspn]]
[[tr:c/string/byte/strcspn]]
[[zh:c/string/byte/strcspn]]</text>
      <sha1>4mx2mf52fa09xrpgpksi6gz5twjx4ux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strerror</title>
    <ns>0</ns>
    <id>6148</id>
    <revision>
      <id>80708</id>
      <parentid>80707</parentid>
      <timestamp>2015-08-26T15:56:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>less repetition in the example</comment>
      <text xml:space="preserve" bytes="5449">{{c/title| strerror | strerror_s | strerrorlen_s }}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl | num=1 |
char* strerror( int errnum );
}}
{{dcl | since=c11 | num=2 |
errno_t strerror_s( char *buf, rsize_t bufsz, errno_t errnum );
}}
{{dcl | since=c11 | num=3 |
size_t strerrorlen_s( errno_t errnum );
}}
{{dcl end}}

@1@ Returns a pointer to the textual description of the system error code {{tt|errnum}}, identical to the description that would be printed by {{lc|perror()}}.
@@ {{tt|errnum}} is usually acquired from the {{tt|errno}} variable, however the function accepts any value of type {{c|int}}. The contents of the string are locale-specific.
@@ The returned string must not be modified by the program, but may be overwritten by a subsequent call to the {{tt|strerror}} function. {{tt|strerror}} is not required to be thread-safe. Implementations may be returning different pointers to static read-only string literals or may be returning the same pointer over and over, pointing at a static buffer in which strerror places the string.
@2@ Same as {{v|1}}, except that the message is copied into user-provided storage {{tt|buf}}. No more than {{tt|bufsz-1}} bytes are written, the buffer is always null-terminated. If the message had to be truncated to fit the buffer and {{tt|bufsz}} is greater than 3, then only {{tt|bufsz-4}} bytes are written, and the characters {{c|&quot;...&quot;}} are appended before the null terminator. In addition, the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|buf}} is a null pointer
:* {{tt|bufsz}} is zero or greater than {{lc|RSIZE_MAX}}
@@The behavior is undefined if writing to {{tt|buf}} occurs past the end of the array, which can happen when the size of the buffer pointed to by {{tt|buf}} is less than the number of characters in the error message which in turn is less than {{tt|bufsz}}.
@3@ Computes the length of the untruncated locale-specific error message that {{tt|strerror_s}} would write if it were called with {{tt|errnum}}. The length does not include the null terminator.
:As with all bounds-checked functions, {{tt|strerror_s}} and {{tt|strerrorlen_s}} are only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | errnum | integral value referring to an error code}}
{{par | buf | pointer to a user-provided buffer }}
{{par | bufsz | size of the user-provided buffer }}
{{par end}}

===Return value===
@1@ Pointer to a null-terminated byte string corresponding to the {{lc|errno}} error code {{tt|errnum}}.
@2@ Zero if the entire message was successfully stored in {{tt|buf}}, non-zero otherwise.
@3@ Length (not including the null terminator) of the message that {{tt|strerror_s}} would return

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror.html POSIX] allows subsequent calls to {{tt|strerror}} to invalidate the pointer value returned by an earlier call. It also specifies that it is the {{ltt|c/locale/LC_categories|LC_MESSAGES}} locale facet that controls the contents of these messages.

{{tt|strerror_s}} is the only bounds-checked function that allows truncation, because providing as much information as possible about a failure was deemed to be more desirable. POSIX also defines [http://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror.html strerror_r] for similar purposes.

===Example===
{{example |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;string.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    FILE *fp = fopen(tmpnam((char[L_tmpnam]){0}), &quot;r&quot;);
    if(fp==NULL) {
        printf(&quot;File opening error: %s\n&quot;, strerror(errno));
        setlocale(LC_MESSAGES, &quot;de_DE.utf8&quot;);
        printf(&quot;Now in German: %s\n&quot;, strerror(errno));
#ifdef __STDC_LIB_EXT1__
        setlocale(LC_ALL, &quot;zh_CN.utf8&quot;); // printf needs CTYPE for multibyte output
        size_t errmsglen = strerrorlen_s(errno) + 1;
        char errmsg[errmsglen]; 
        strerror_s(errmsg, errmsglen, errno);
        printf(&quot;Now in Chinese: %s\n&quot;, errmsg);
#endif
    }
}
|p=true
 | output=
File opening error: No such file or directory
Now in German: Datei oder Verzeichnis nicht gefunden
Now in Chinese: 没有那个文件或目录
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.6.2  | title=The strerror function | p=371}}
{{ref std | section=K.3.7.4.2 | title=The strerror_s function | p=622}}
{{ref std | section=K.3.7.4.3 | title=The strerrorlen_s function | p=623}}
{{ref std c99}}
{{ref std | section=7.21.6.2  | title=The strerror function | p=334}}
{{ref std c89}}
{{ref std | section=4.11.6.2  | title=The strerror function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/io/dsc perror}}
{{dsc inc | c/error/dsc errno}}
{{dsc see cpp | cpp/string/byte/strerror}}
{{dsc end}}

[[ar:c/string/byte/strerror]]
[[cs:c/string/byte/strerror]]
[[de:c/string/byte/strerror]]
[[es:c/string/byte/strerror]]
[[fr:c/string/byte/strerror]]
[[it:c/string/byte/strerror]]
[[ja:c/string/byte/strerror]]
[[ko:c/string/byte/strerror]]
[[pl:c/string/byte/strerror]]
[[pt:c/string/byte/strerror]]
[[ru:c/string/byte/strerror]]
[[tr:c/string/byte/strerror]]
[[zh:c/string/byte/strerror]]</text>
      <sha1>bun5vxpqjkg13gltvflva2q1x5j8cs2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strlen</title>
    <ns>0</ns>
    <id>6132</id>
    <revision>
      <id>80939</id>
      <parentid>80869</parentid>
      <timestamp>2015-09-17T12:25:28Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+note about buffer overflow</comment>
      <text xml:space="preserve" bytes="3343">{{c/title| strlen|strnlen_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl | num=1 |
size_t strlen( const char *str );
}}
{{dcl | num=2 | since=c11 |
size_t strnlen_s( const char *str, size_t strsz );
}}
{{dcl end}}

@1@ Returns the length of the given null-terminated byte string, that is, the number of characters in a character array whose first element is pointed to by {{tt|str}} up to and not including the first null character.
@@The behavior is undefined if {{tt|str}} is not a pointer to a null-terminated byte string.
@2@ Same as {{v|1}}, except that the function returns zero if {{tt|str}} is a null pointer and returns {{tt|strsz}} if the null character was not found in the first {{tt|strsz}} bytes of {{tt|str}}.
@@The behavior is undefined if both {{tt|str}} points to a character array which lacks the null character and the size of that character array &lt; {{tt|strsz}}; in other words, an erroneous value of {{tt|strsz}} does not expose the impending buffer overflow.
:As with all bounds-checked functions, {{tt|strnlen_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par |str | pointer to the null-terminated byte string to be examined}}
{{par |strsz | maximum number of characters to examine}}
{{par end}}

===Return value===
@1@ The length of the null-terminated byte string {{tt|str}}.
@2@ The length of the null-terminated byte string {{tt|str}} on success, zero if {{tt|str}} is a null pointer, {{tt|strsz}} if the null character was not found.

===Notes===
{{tt|strnlen_s}} and {{tt|wcsnlen_s}} are the only [[c/error|bounds-checked functions]] that do not invoke the runtime constraints handler. They are pure utility functions used to provide limited support for non-null terminated strings.

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    const char str[] = &quot;How many characters does this string contain?&quot;;

    printf(&quot;without null character: %zu\n&quot;, strlen(str));
    printf(&quot;with null character:    %zu\n&quot;, sizeof str);

#ifdef __STDC_LIB_EXT1__
    printf(&quot;without null character: %zu\n&quot;, strnlen_s(str, sizeof str));
#endif
}
 | output=
without null character: 45
with null character:    46
without null character: 45
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.6.3  | title=The strlen function | p=372}}
{{ref std | section=K.3.7.4.4 | title=The strnlen_s function | p=623}}
{{ref std c99}}
{{ref std | section=7.21.6.3  | title=The strlen function | p=334}}
{{ref std c89}}
{{ref std | section=4.11.6.3  | title=The strlen function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcslen}}
{{dsc inc | c/string/multibyte/dsc mblen}}
{{dsc see cpp | cpp/string/byte/strlen}}
{{dsc end}}

[[ar:c/string/byte/strlen]]
[[cs:c/string/byte/strlen]]
[[de:c/string/byte/strlen]]
[[es:c/string/byte/strlen]]
[[fr:c/string/byte/strlen]]
[[it:c/string/byte/strlen]]
[[ja:c/string/byte/strlen]]
[[ko:c/string/byte/strlen]]
[[pl:c/string/byte/strlen]]
[[pt:c/string/byte/strlen]]
[[ru:c/string/byte/strlen]]
[[tr:c/string/byte/strlen]]
[[zh:c/string/byte/strlen]]</text>
      <sha1>s5ojly4rpznp90lisdalo0kplnhe693</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strncat</title>
    <ns>0</ns>
    <id>6130</id>
    <revision>
      <id>80964</id>
      <parentid>80912</parentid>
      <timestamp>2015-09-18T11:32:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+UB of strncat_s</comment>
      <text xml:space="preserve" bytes="5829">{{c/title| strncat|strncat_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl rev begin|num=1}}
{{dcl | until=c99 |
char *strncat( char *dest, const char *src, size_t count );
}}
{{dcl | since=c99 |
char *strncat( char *restrict dest, const char *restrict src, size_t count );
}}
{{dcl rev end}}
{{dcl | since=c11 | num=2 |
errno_t strncat_s(char *restrict dest, rsize_t destsz,
                  const char *restrict src, rsize_t count);
}}
{{dcl end}}

@1@ Appends at most {{tt|count}} characters from the character array pointed to by {{tt|src}}, stopping if the null character is found, to the end of the null-terminated byte string pointed to by {{tt|dest}}. The character {{c|src[0]}} replaces the null terminator at the end of {{tt|dest}}. The terminating null character is always appended in the end (so the maximum number of bytes the function may write is {{c|count+1}}).
@@The behavior is undefined if the destination array does not have enough space for the contents of both {{tt|dest}} and the first {{tt|count}} characters of {{tt|src}}, plus the terminating null character. The behavior is undefined if the source and destination objects overlap. The behavior is undefined if either {{tt|dest}} is not a pointer to a null-terminated byte string or {{tt|src}} is not a pointer to a character array,
@2@ Same as {{v|1}}, except that this function may clobber the remainder of the destination array (from the last byte written to {{tt|destsz}}) and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is zero or greater than {{lc|RSIZE_MAX}}
:* there is no null character in the first {{tt|destsz}} bytes of {{tt|dest}}
:* truncation would occur: {{tt|count}} or the length of {{tt|src}}, whichever is less, exceeds the space available between the null terminator of {{tt|dest}} and {{tt|destsz}}.
:* overlap would occur between the source and the destination strings
@@The behavior is undefined if the size of the character array pointed to by {{tt|dest}} &lt; {{c|strnlen(dest,destsz)+strnlen(src,count)+1}} &lt; {{tt|destsz}}; in other words, an erroneous value of {{tt|destsz}} does not expose the impending buffer overflow. The behavior is undefined if the size of the character array pointed to by {{tt|src}} &lt; {{c|strnlen(src,count)}} &lt; {{tt|destsz}}; in other words, an erroneous value of {{tt|count}} does not expose the impending buffer overflow.
:As all bounds-checked functions, {{tt|strncat_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to append to}}
{{par | src | pointer to the character array to copy from}}
{{par | count | maximum number of characters to copy}}
{{par | destsz | the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes zero to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{lc|RMAX_SIZE}}).

===Notes===
Although truncation to fit the destination buffer is a security risk and therefore a runtime constraints violation for {{tt|strncat_s}}, it is possible to get the truncating behavior by specifying {{tt|count}} equal to the size of the destination array minus one: it will copy the first {{tt|count}} bytes and append the null terminator as always: {{c|strncat_s(dst, sizeof dst, src, (sizeof dst)-strnlen_s(dst, sizeof dst)-1);}}

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;string.h&gt; 
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void) 
{
    char str[50] = &quot;Hello &quot;;
    char str2[50] = &quot;World!&quot;;
    strcat(str, str2);
    strncat(str, &quot; Goodbye World!&quot;, 3);
    puts(str);

#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    char s1[100] = &quot;good&quot;;
    char s5[1000] = &quot;bye&quot;;
    int r1 = strncat_s(s1, 100, s5, 1000); // r1 is 0, s1 holds &quot;goodbye\0&quot;
    printf(&quot;s1 = %s, r1 = %d\n&quot;, s1, r1);
    char s2[6] = &quot;hello&quot;;
    int r2 = strncat_s(s2, 6, &quot;&quot;, 1); // r2 is 0, s2 holds &quot;hello\0&quot;
    printf(&quot;s2 = %s, r2 = %d\n&quot;, s2, r2);
    char s3[6] = &quot;hello&quot;;
    int r3 = strncat_s(s3, 6, &quot;X&quot;, 2); // r3 is non-zero, s3 holds &quot;\0&quot;
    printf(&quot;s3 = %s, r3 = %d\n&quot;, s3, r3);
    // the strncat_s truncation idiom:
    char s4[7] = &quot;abc&quot;;
    int r4 = strncat_s(s4, 7, &quot;defghijklmn&quot;, 3); // r is 0, s4 holds &quot;abcdef\0&quot;
    printf(&quot;s4 = %s, r4 = %d\n&quot;, s4, r4);
#endif
}
|p=true
 | output=
Hello World! Go
s1 = goodbye, r1 = 0
s2 = hello, r2 = 0
s3 = , r3 = 22
s4 = abcdef, r4 = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.3.2  | title=The strncat function | p=364-365}}
{{ref std | section=K.3.7.2.2 | title=The strncat_s function | p=618-620}}
{{ref std c99}}
{{ref std | section=7.21.3.2  | title=The strncat function | p=327-328}}
{{ref std c89}}
{{ref std | section=4.11.3.2 | title=The strncat function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcat}}
{{dsc inc | c/string/byte/dsc strcpy}}
{{dsc see cpp | cpp/string/byte/strncat}}
{{dsc end}}

[[ar:c/string/byte/strncat]]
[[cs:c/string/byte/strncat]]
[[de:c/string/byte/strncat]]
[[es:c/string/byte/strncat]]
[[fr:c/string/byte/strncat]]
[[it:c/string/byte/strncat]]
[[ja:c/string/byte/strncat]]
[[ko:c/string/byte/strncat]]
[[pl:c/string/byte/strncat]]
[[pt:c/string/byte/strncat]]
[[ru:c/string/byte/strncat]]
[[tr:c/string/byte/strncat]]
[[zh:c/string/byte/strncat]]</text>
      <sha1>0cvpzmrrxygj5j19g0025o3pkpsoebb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strncmp</title>
    <ns>0</ns>
    <id>6134</id>
    <revision>
      <id>88077</id>
      <parentid>80517</parentid>
      <timestamp>2016-10-28T05:50:06Z</timestamp>
      <contributor>
        <username>Doug65536</username>
        <id>5976</id>
      </contributor>
      <comment>Added behavior when count is zero, from 7.24.1 String function conventions</comment>
      <text xml:space="preserve" bytes="2927">{{c/title| strncmp}}
{{c/string/byte/navbar}}
{{ddcl | header=string.h |
int strncmp( const char *lhs, const char *rhs, size_t count );
}}

Compares at most {{tt|count}} characters of two possibly null-terminated arrays. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of characters (both interpreted as {{c|unsigned char}}) that differ in the arrays being compared.

The behavior is undefined when access occurs past the end of either array {{tt|lhs}} or {{tt|rhs}}. The behavior is undefined when either {{tt|lhs}} or {{tt|rhs}} is the null pointer.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the possibly null-terminated arrays to compare}}
{{par | count | maximum number of characters to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal, or if count is zero.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Notes===
This function is not locale-sensitive, unlike {{lc|strcoll}} and {{lc|strxfrm}}.

===Example===
{{example |
 | code=
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

void demo(const char* lhs, const char* rhs, int sz)
{
    int rc = strncmp(lhs, rhs, sz);
    if(rc == 0)
        printf(&quot;First %d chars of [%s] equal [%s]\n&quot;, sz, lhs, rhs);
    else if(rc &lt; 0)
        printf(&quot;First %d chars of [%s] precede [%s]\n&quot;, sz, lhs, rhs);
    else if(rc &gt; 0)
        printf(&quot;First %d chars of [%s] follow [%s]\n&quot;, sz, lhs, rhs);

}
int main(void)
{
    const char* string = &quot;Hello World!&quot;;
    demo(string, &quot;Hello!&quot;, 5);
    demo(string, &quot;Hello&quot;, 10);
    demo(string, &quot;Hello there&quot;, 10);
    demo(&quot;Hello, everybody!&quot; + 12, &quot;Hello, somebody!&quot; + 11, 5);
}
 | output=
First 5 chars of [Hello World!] equal [Hello!]
First 10 chars of [Hello World!] follow [Hello]
First 10 chars of [Hello World!] precede [Hello there]
First 5 chars of [body!] equal [body!]
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.4.4  | title=The strncmp function | p=366}}
{{ref std c99}}
{{ref std | section=7.21.4.4  | title=The strncmp function | p=329}}
{{ref std c89}}
{{ref std | section=4.11.4.4  | title=The strncmp function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcmp}}
{{dsc inc | c/string/wide/dsc wcsncmp}}
{{dsc inc | c/string/byte/dsc memcmp}}
{{dsc inc | c/string/byte/dsc strcoll}}
{{dsc see cpp | cpp/string/byte/strncmp}}
{{dsc end}}

[[ar:c/string/byte/strncmp]]
[[cs:c/string/byte/strncmp]]
[[de:c/string/byte/strncmp]]
[[es:c/string/byte/strncmp]]
[[fr:c/string/byte/strncmp]]
[[it:c/string/byte/strncmp]]
[[ja:c/string/byte/strncmp]]
[[ko:c/string/byte/strncmp]]
[[pl:c/string/byte/strncmp]]
[[pt:c/string/byte/strncmp]]
[[ru:c/string/byte/strncmp]]
[[tr:c/string/byte/strncmp]]
[[zh:c/string/byte/strncmp]]</text>
      <sha1>mzn5silsq84cn9sj5itjzmia5omn3t0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strncpy</title>
    <ns>0</ns>
    <id>6128</id>
    <revision>
      <id>85667</id>
      <parentid>83431</parentid>
      <timestamp>2016-05-01T14:27:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>seealso strndup</comment>
      <text xml:space="preserve" bytes="7050">{{c/title| strncpy | strncpy_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl rev begin|num=1}}
{{dcl | until=c99 |
char *strncpy( char *dest, const char *src, size_t count );
}}
{{dcl | since=c99 |
char *strncpy( char *restrict dest, const char *restrict src, size_t count );
}}
{{dcl rev end}}
{{dcl | since=c11 |num=2|
errno_t strncpy_s(char *restrict dest, rsize_t destsz,
                  const char *restrict src, rsize_t count);
}}
{{dcl end}}

@1@ Copies at most {{tt|count}} characters of the character array pointed to by {{tt|src}} (including the terminating null character, but not any of the characters that follow the null character) to character array pointed to by {{tt|dest}}. 
@@ If {{tt|count}} is reached before the entire array {{tt|src}} was copied, the resulting character array is not null-terminated.
@@ If, after copying the terminating null character from {{tt|src}}, {{tt|count}} is not reached, additional null characters are written to {{tt|dest}} until the total of {{tt|count}} characters have been written.
@@The behavior is undefined if the character arrays overlap, if either {{tt|dest}} or {{tt|src}} is not a pointer to a character array (including if {{tt|dest}} or {{tt|src}} is a null pointer), if the size of the array pointed to by {{tt|dest}} is less than {{tt|count}}, or if the size of the array pointed to by {{tt|src}} is less than {{tt|count}} and it does not contain a null character.
@2@ Same as {{v|1}}, except that the function does not continue writing zeroes into the destination array to pad up to {{tt|count}}, it stops after writing the terminating null character (if there was no null in the source, it writes one at {{c|dest[count]}} and then stops). Also, the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is zero or greater than {{lc|RSIZE_MAX}}
:* {{tt|count}} is greater or equal {{tt|destsz}}, but {{tt|destsz}} is less or equal {{c|strnlen_s(src, count)}}, in other words, truncation would occur
:* overlap would occur between the source and the destination strings
@@The behavior is undefined if the size of the character array pointed to by {{tt|dest}} &lt; {{c|strnlen_s(src, destsz)}} &lt;= {{tt|destsz}}; in other words, an erroneous value of {{tt|destsz}} does not expose the impending buffer overflow. The behavior is undefined if the size of the character array pointed to by {{tt|src}} &lt; {{c|strnlen_s(src, count)}} &lt; {{tt|destsz}}; in other words, an erroneous value of {{tt|count}} does not expose the impending buffer overflow.

:As all bounds-checked functions, {{tt|strncpy_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the character array to copy to}}
{{par | src | pointer to the character array to copy from}}
{{par | count | maximum number of characters to copy}}
{{par | destsz | the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes zero to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{lc|RSIZE_MAX}}) and may clobber the rest of the destination array with unspecified values.

===Notes===
As corrected by the post-C11 DR 468, {{tt|strncpy_s}}, unlike {{lc|strcpy|strcpy_s}}, is only allowed to clobber the remainder of the destination array if an error occurs.

Unlike {{tt|strncpy}}, {{tt|strncpy_s}} does not pad the destination array with zeroes, This is a common source of errors when converting existing code to the bounds-checked version.

Although truncation to fit the destination buffer is a security risk and therefore a runtime constraints violation for {{tt|strncpy_s}}, it is possible to get the truncating behavior by specifying {{tt|count}} equal to the size of the destination array minus one: it will copy the first {{tt|count}} bytes and append the null terminator as always: {{c|strncpy_s(dst, sizeof dst, src, (sizeof dst)-1);}}

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    char src[] = &quot;hi&quot;;
    char dest[6] = &quot;abcdef&quot;; // no null terminator
    strncpy(dest, src, 5); // writes five characters 'h', 'i', '\0', '\0', '\0' to dest
    printf(&quot;strncpy(dest, src, 5) to a 6-byte dest gives : &quot;);
    for(size_t n = 0; n &lt; sizeof dest; ++n) {
        char c = dest[n];
        c ? printf(&quot;'%c' &quot;, c) : printf(&quot;'\\0' &quot;);
    }

    printf(&quot;\nstrncpy(dest2, src, 2) to a 2-byte dst gives : &quot;);
    char dest2[2];
    strncpy(dest2, src, 2); // truncation: writes two characters 'h', 'i', to dest2
    for(size_t n = 0; n &lt; sizeof dest2; ++n) {
        char c = dest2[n];
        c ? printf(&quot;'%c' &quot;, c) : printf(&quot;'\\0' &quot;);
    }
    printf(&quot;\n&quot;);

#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    char dst1[6], src1[100] = &quot;hello&quot;;
    int r1 = strncpy_s(dst1, 6, src1, 100);      // writes 0 to r1, 6 characters to dst1
    printf(&quot;dst1 = \&quot;%s\&quot;, r1 = %d\n&quot;, dst1,r1); // 'h','e','l','l','o','\0' to dst1

    char dst2[5], src2[7] = {'g','o','o','d','b','y','e'};
    int r2 = strncpy_s(dst2, 5, src2, 7);        // copy overflows the destination array
    printf(&quot;dst2 = \&quot;%s\&quot;, r2 = %d\n&quot;, dst2,r2); // writes nonzero to r2,'\0' to dst2[0]

    char dst3[5];
    int r3 = strncpy_s(dst3, 5, src2, 4);        // writes 0 to r3, 5 characters to dst3
    printf(&quot;dst3 = \&quot;%s\&quot;, r3 = %d\n&quot;, dst3,r3); // 'g', 'o', 'o', 'd', '\0' to dst3 
#endif
}
|p=true
| output=
strncpy(dest, src, 5) to a 6-byte dst gives : 'h' 'i' '\0' '\0' '\0' 'f'
strncpy(dest2, src, 2) to a 2-byte dst gives : 'h' 'i'
dst1 = &quot;hello&quot;, r1 = 0
dst2 = &quot;&quot;, r2 = 22
dst3 = &quot;good&quot;, r3 = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.2.4  | title=The strncpy function | p=363-364}}
{{ref std | section=K.3.7.1.4 | title=The strncpy_s function | p=616-617}}
{{ref std c99}}
{{ref std | section=7.21.2.4  | title=The strncpy function | p=326-327}}
{{ref std c89}}
{{ref std | section=4.11.2.4  | title=The strncpy function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcpy}}
{{dsc inc | c/string/byte/dsc memcpy}}
{{dsc inc | c/experimental/dynamic/dsc strndup}}
{{dsc see cpp | cpp/string/byte/strncpy}}
{{dsc end}}

[[ar:c/string/byte/strncpy]]
[[cs:c/string/byte/strncpy]]
[[de:c/string/byte/strncpy]]
[[es:c/string/byte/strncpy]]
[[fr:c/string/byte/strncpy]]
[[it:c/string/byte/strncpy]]
[[ja:c/string/byte/strncpy]]
[[ko:c/string/byte/strncpy]]
[[pl:c/string/byte/strncpy]]
[[pt:c/string/byte/strncpy]]
[[ru:c/string/byte/strncpy]]
[[tr:c/string/byte/strncpy]]
[[zh:c/string/byte/strncpy]]</text>
      <sha1>5c0h7rxok4py3xqo9w3zg8q1crs5vdb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strpbrk</title>
    <ns>0</ns>
    <id>6140</id>
    <revision>
      <id>80529</id>
      <parentid>80526</parentid>
      <timestamp>2015-08-19T12:17:34Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+undefined behavior</comment>
      <text xml:space="preserve" bytes="2307">{{c/title| strpbrk}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl |
char* strpbrk( const char* dest, const char* breakset );
}}
{{dcl end}}

Scans the null-terminated byte string pointed to by {{tt|dest}} for any character from the null-terminated byte string pointed to by {{tt|breakset}}, and returns a pointer to that character.

The behavior is undefined if either {{tt|dest}} or {{tt|breakset}} is not a pointer to a null-terminated byte string.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to be analyzed}}
{{par | breakset | pointer to the null-terminated byte string that contains the characters to search for}}
{{par end}}

===Return value===
Pointer to the first character in {{tt|dest}}, that is also in {{tt|breakset}}, or null pointer if no such character exists.

===Notes===
The name stands for &quot;string pointer break&quot;, because it returns a pointer to the first of the separator (&quot;break&quot;) characters.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(void)
{
    const char* str = &quot;hello world, friend of mine!&quot;;
    const char* sep = &quot; ,!&quot;;

    unsigned int cnt = 0;
    do {
       str = strpbrk(str, sep); // find separator
       if(str) str += strspn(str, sep); // skip separator
       ++cnt; // increment word count
    } while(str &amp;&amp; *str);

    printf(&quot;There are %d words\n&quot;, cnt);
}
 | output=
There are 5 words
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.4  | title=The strpbrk function | p=368}}
{{ref std c99}}
{{ref std | section=7.21.5.4  | title=The strpbrk function | p=331}}
{{ref std c89}}
{{ref std | section=4.11.5.4  | title=The strpbrk function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcspn}}
{{dsc inc | c/string/byte/dsc strchr}}
{{dsc inc | c/string/byte/dsc strtok}}
{{dsc see cpp | cpp/string/byte/strpbrk}}
{{dsc end}}

[[ar:c/string/byte/strpbrk]]
[[cs:c/string/byte/strpbrk]]
[[de:c/string/byte/strpbrk]]
[[es:c/string/byte/strpbrk]]
[[fr:c/string/byte/strpbrk]]
[[it:c/string/byte/strpbrk]]
[[ja:c/string/byte/strpbrk]]
[[ko:c/string/byte/strpbrk]]
[[pl:c/string/byte/strpbrk]]
[[pt:c/string/byte/strpbrk]]
[[ru:c/string/byte/strpbrk]]
[[tr:c/string/byte/strpbrk]]
[[zh:c/string/byte/strpbrk]]</text>
      <sha1>1ihyesc65bmgkq83ekyb6szjny8xsgz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strrchr</title>
    <ns>0</ns>
    <id>6137</id>
    <revision>
      <id>81931</id>
      <parentid>80523</parentid>
      <timestamp>2015-11-20T15:09:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>wording consistent with strchr</comment>
      <text xml:space="preserve" bytes="2014">{{c/title| strrchr}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl |
char *strrchr( const char *str, int ch );
}}
{{dcl end}}

Finds the last occurrence of {{tt|ch}} (after conversion to {{c|char}} as if by {{c|(char)ch}}) in the null-terminated byte string pointed to by {{tt|str}} (each character interpreted as {{c|unsigned char}}). The terminating null character is considered to be a part of the string and can be found if searching for {{c|'\0'}}.

The behavior is undefined if {{tt|str}} is not a pointer to a null-terminated byte string.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be analyzed}}
{{par | ch | character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or null pointer if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    char szSomeFileName[] = &quot;foo/bar/foobar.txt&quot;;
    char *pLastSlash = strrchr(szSomeFileName, '/');
    char *pszBaseName = pLastSlash ? pLastSlash + 1 : szSomeFileName;
    printf(&quot;Base Name: %s&quot;, pszBaseName);
}
 | output=
Base Name: foobar.txt
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.5  | title=The strrchr function | p=368-369}}
{{ref std c99}}
{{ref std | section=7.21.5.5  | title=The strrchr function | p=331}}
{{ref std c89}}
{{ref std | section=4.11.5.5  | title=The strrchr function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strchr}}
{{dsc inc | c/string/byte/dsc strpbrk}}
{{dsc see cpp | cpp/string/byte/strrchr}}
{{dsc end}}

[[ar:c/string/byte/strrchr]]
[[cs:c/string/byte/strrchr]]
[[de:c/string/byte/strrchr]]
[[es:c/string/byte/strrchr]]
[[fr:c/string/byte/strrchr]]
[[it:c/string/byte/strrchr]]
[[ja:c/string/byte/strrchr]]
[[ko:c/string/byte/strrchr]]
[[pl:c/string/byte/strrchr]]
[[pt:c/string/byte/strrchr]]
[[ru:c/string/byte/strrchr]]
[[tr:c/string/byte/strrchr]]
[[zh:c/string/byte/strrchr]]</text>
      <sha1>4nt6y7cjtbi320g5r6k0j3agsfc3qc9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strspn</title>
    <ns>0</ns>
    <id>6138</id>
    <revision>
      <id>80524</id>
      <parentid>78804</parentid>
      <timestamp>2015-08-19T11:45:38Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+undefined behavior; consistent wording</comment>
      <text xml:space="preserve" bytes="2185">{{c/title| strspn}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl |
size_t strspn( const char *dest, const char *src );
}}
{{dcl end}}

Returns the length of the maximum initial segment (span) of the null-terminated byte string pointed to by {{tt|dest}}, that consists of only the characters found in the null-terminated byte string pointed to by {{tt|src}}.

The behavior is undefined if either {{tt|dest}} or {{tt|src}} is not a pointer to a null-terminated byte string.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to be analyzed}}
{{par | src | pointer to the null-terminated byte string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters from the null-terminated byte string pointed to by {{tt|src}}

===Example===
{{example
 |
 | code=
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    const char *string = &quot;abcde312$#@&quot;;
    const char *low_alpha = &quot;qwertyuiopasdfghjklzxcvbnm&quot;;

    size_t spnsz = strspn(string, low_alpha);
    printf(&quot;After skipping initial lowercase letters from '%s'\n&quot;
           &quot;The remainder is '%s'\n&quot;, string, string+spnsz);
}
 | output=
After skipping initial lowercase letters from 'abcde312$#@'
The remainder is '312$#@'
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.6  | title=The strspn function | p=369}}
{{ref std c99}}
{{ref std | section=7.21.5.6  | title=The strspn function | p=332}}
{{ref std c89}}
{{ref std | section=4.11.5.6  | title=The strspn function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcspn}}
{{dsc inc | c/string/wide/dsc wcsspn}}
{{dsc inc | c/string/byte/dsc strpbrk}}
{{dsc see cpp | cpp/string/byte/strspn}}
{{dsc end}}

[[ar:c/string/byte/strspn]]
[[cs:c/string/byte/strspn]]
[[de:c/string/byte/strspn]]
[[es:c/string/byte/strspn]]
[[fr:c/string/byte/strspn]]
[[it:c/string/byte/strspn]]
[[ja:c/string/byte/strspn]]
[[ko:c/string/byte/strspn]]
[[pl:c/string/byte/strspn]]
[[pt:c/string/byte/strspn]]
[[ru:c/string/byte/strspn]]
[[tr:c/string/byte/strspn]]
[[zh:c/string/byte/strspn]]</text>
      <sha1>3lhvv91nformcbvfjyg56c2sr3awz0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strstr</title>
    <ns>0</ns>
    <id>6141</id>
    <revision>
      <id>80530</id>
      <parentid>80528</parentid>
      <timestamp>2015-08-19T12:19:27Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+undefined behavior</comment>
      <text xml:space="preserve" bytes="2445">{{c/title| strstr}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl |
char *strstr( const char* str, const char* substr );
}}
{{dcl end}}

Finds the first occurrence of the null-terminated byte string pointed to by {{tt|substr}} in the null-terminated byte string pointed to by {{tt|str}}. The terminating null characters  are not compared.

The behavior is undefined if either {{tt|str}} or {{tt|substr}} is not a pointer to a null-terminated byte string.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to examine}}
{{par | substr | pointer to the null-terminated byte string to search for}}
{{par end}}

===Return value===
Pointer to the first character of the found substring in {{tt|str}}, or {{lc|NULL}} if no such substring is found. If {{tt|substr}} points to an empty string, {{tt|str}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

void find_str(char const* str, char const* substr) 
{
    char* pos = strstr(str, substr);
    if(pos) {
        printf(&quot;found the string '%s' in '%s' at position: %ld\n&quot;, substr, str, pos - str);
    } else {
        printf(&quot;the string '%s' was not found in '%s'\n&quot;, substr, str);
    }
}

int main(void) 
{
    char* str = &quot;one two three&quot;;
    find_str(str, &quot;two&quot;);
    find_str(str, &quot;&quot;);
    find_str(str, &quot;nine&quot;);
    find_str(str, &quot;n&quot;);

    return 0;
}

 | output=
found the string 'two' in 'one two three' at position: 4
found the string '' in 'one two three' at position: 0
the string 'nine' was not found in 'one two three'
found the string 'n' in 'one two three' at position: 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.7  | title=The strstr function | p=369}}
{{ref std c99}}
{{ref std | section=7.21.5.7  | title=The strstr function | p=332}}
{{ref std c89}}
{{ref std | section=4.11.5.7  | title=The strstr function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strchr}}
{{dsc inc | c/string/byte/dsc strrchr}}
{{dsc see cpp | cpp/string/byte/strstr}}
{{dsc end}}

[[ar:c/string/byte/strstr]]
[[cs:c/string/byte/strstr]]
[[de:c/string/byte/strstr]]
[[es:c/string/byte/strstr]]
[[fr:c/string/byte/strstr]]
[[it:c/string/byte/strstr]]
[[ja:c/string/byte/strstr]]
[[ko:c/string/byte/strstr]]
[[pl:c/string/byte/strstr]]
[[pt:c/string/byte/strstr]]
[[ru:c/string/byte/strstr]]
[[tr:c/string/byte/strstr]]
[[zh:c/string/byte/strstr]]</text>
      <sha1>nhjv7wxxm4jg653vctyfql2sslaco2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strtod</title>
    <ns>0</ns>
    <id>6514</id>
    <redirect title="c/string/byte/strtof" />
    <revision>
      <id>25686</id>
      <timestamp>2012-04-23T21:07:58Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/string/byte/strtof]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strtof</title>
    <ns>0</ns>
    <id>6126</id>
    <revision>
      <id>87762</id>
      <parentid>87755</parentid>
      <timestamp>2016-09-30T09:54:42Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>another example</comment>
      <text xml:space="preserve" bytes="3292">{{c/title| strtof | strtod | strtold}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl | since=c99 |
float       strtof( const char *restrict str, char **restrict str_end );           
}}
{{dcl rev begin}}
{{dcl | until=c99 |
double      strtod( const char          *str, char          **str_end );
}}
{{dcl | since=c99 |
double      strtod( const char *restrict str, char **restrict str_end );
}}
{{dcl rev end}}
{{dcl | since=c99 |
long double strtold( const char *restrict str, char **restrict str_end );
}}
{{dcl end}}

Interprets a floating-point value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2float}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par | str_end | pointer to a pointer to character.}}
{{par end}}

===Return value===
Floating-point value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|HUGE_VAL}}, {{lc|HUGE_VALF}} or {{lc|HUGE_VALL}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    // parsing with error handling
    const char *p = &quot;111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz&quot;;
    printf(&quot;Parsing '%s':\n&quot;, p);
    char *end;
    for (double f = strtod(p, &amp;end); p != end; f = strtod(p, &amp;end))
    {
        printf(&quot;'%.*s' -&gt; &quot;, (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf(&quot;range error, got &quot;);
            errno = 0;
        }
        printf(&quot;%f\n&quot;, f);
    }

    // parsing without error handling
    printf(&quot;\&quot;  -0.0000000123junk\&quot;  --&gt;  %g\n&quot;, strtod(&quot;  -0.0000000123junk&quot;, NULL));
    printf(&quot;\&quot;junk\&quot;                 --&gt;  %g\n&quot;, strtod(&quot;junk&quot;, NULL));
}
| p =true
 | output=
Parsing '111.11 -2.22 Nan inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz':
'111.11' -&gt; 111.110000
' -2.22' -&gt; -2.220000
' Nan' -&gt; nan
' nan(2)' -&gt; nan
' inF' -&gt; inf
' 0X1.BC70A3D70A3D7P+6' -&gt; 111.110000
'  1.18973e+4932' -&gt; range error, got inf
&quot;  -0.0000000123junk&quot;  --&gt;  -1.23e-08
&quot;junk&quot;                 --&gt;  0
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.1.3 | title=The strtod, strtof, and strtold functions | p=342-344}}
{{ref std c99}}
{{ref std | section=7.20.1.3 | title=The strtod, strtof, and strtold functions | p=308-310}}
{{ref std c89}}
{{ref std | section=4.10.1.4 | title=The strtod function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc atof}}
{{dsc inc | c/string/wide/dsc wcstof}}
{{dsc see cpp | cpp/string/byte/strtof | strtof | strtod | strtold}}
{{dsc end}}

[[ar:c/string/byte/strtof]]
[[cs:c/string/byte/strtof]]
[[de:c/string/byte/strtof]]
[[es:c/string/byte/strtof]]
[[fr:c/string/byte/strtof]]
[[it:c/string/byte/strtof]]
[[ja:c/string/byte/strtof]]
[[ko:c/string/byte/strtof]]
[[pl:c/string/byte/strtof]]
[[pt:c/string/byte/strtof]]
[[ru:c/string/byte/strtof]]
[[tr:c/string/byte/strtof]]
[[zh:c/string/byte/strtof]]</text>
      <sha1>b05ux5r0j430bzx12pfv7puxlg3wvd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strtoimax</title>
    <ns>0</ns>
    <id>9913</id>
    <revision>
      <id>76582</id>
      <parentid>69639</parentid>
      <timestamp>2015-02-21T14:18:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3393">{{c/title| strtoimax| strtoumax}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | inttypes.h}}
{{dcl | since=c99 | 
intmax_t strtoimax( const char *restrict nptr, 
                    char **restrict endptr, int base );
}}
{{dcl | since=c99 |
uintmax_t strtoumax( const char *restrict nptr, 
                     char **restrict endptr, int base );
}}
{{dcl end}}

Interprets an integer value in a byte string pointed to by {{tt|nptr}}.

{{cpp/string/cvt str2int base | base=base}}

The functions sets the pointer pointed to by {{tt|endptr}} to point to the character past the last character interpreted. If {{tt|endptr}} is {{lc|NULL}}, it is ignored.

If the {{tt|nptr}} is empty or does not have the expected form, no conversion is performed, and (if {{tt|enptr}} is not {{lc|NULL}}) the value of {{tt|nptr}} is stored in the object pointed to by {{tt|endptr}}.

===Parameters===
{{par begin}}
{{par | nptr | pointer to the null-terminated byte string to be interpreted}}
{{par | endptr | pointer to a pointer to character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===

* If successful, an integer value corresponding to the contents of {{tt|str}} is returned.
* If the converted value falls out of range of corresponding return type, a range error occurs (setting [[cpp/error/errno|{{lc|errno}}]] to {{lc|ERANGE}}) and {{lc|INTMAX_MAX}}, {{lc|INTMAX_MIN}}, {{lc|UINTMAX_MAX}} or {{c|0}} is returned, as appropriate.
* If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;inttypes.h&gt;
#include &lt;errno.h&gt;
#include &lt;string.h&gt;
 
int main(void)
{
    
    char* endptr;
    
    printf(&quot;%ld\n&quot;, strtoimax(&quot; -123junk&quot;,&amp;endptr,10)); /* base 10                    */
    printf(&quot;%ld\n&quot;, strtoimax(&quot;11111111&quot;,&amp;endptr,2));   /* base 2                     */
    printf(&quot;%ld\n&quot;, strtoimax(&quot;XyZ&quot;,&amp;endptr,36));       /* base 36                    */
    printf(&quot;%ld\n&quot;, strtoimax(&quot;010&quot;,&amp;endptr,0));        /* octal auto-detection       */
    printf(&quot;%ld\n&quot;, strtoimax(&quot;10&quot;,&amp;endptr,0));         /* decimal auto-detection     */
    printf(&quot;%ld\n&quot;, strtoimax(&quot;0x10&quot;,&amp;endptr,0));       /* hexadecimal auto-detection */
 
    /* range error             */
    /* LONG_MAX+1 --&gt; LONG_MAX */
    errno = 0;
    printf(&quot;%ld\n&quot;, strtoimax(&quot;9223372036854775808&quot;,&amp;endptr,10));
    printf(&quot;%s\n&quot;, strerror(errno));
    
    return 0;
}
| output=
-123
255
44027
8
10
16
9223372036854775807
Numerical result out of range
}}

===References===
{{ref std c11}}
{{ref std | section=7.8.2.3 | title=The strtoimax and strtoumax functions | p=219}}
{{ref std c99}}
{{ref std | section=7.8.2.3 | title=The strtoimax and strtoumax functions | p=200}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcstoimax}}
{{dsc inc | c/string/byte/dsc strtol}}
{{dsc inc | c/string/byte/dsc strtoul}}
{{dsc see cpp | cpp/string/byte/strtoimax | strtoimax | strtoumax}}
{{dsc end}}

[[ar:c/string/byte/strtoimax]]
[[cs:c/string/byte/strtoimax]]
[[de:c/string/byte/strtoimax]]
[[es:c/string/byte/strtoimax]]
[[fr:c/string/byte/strtoimax]]
[[it:c/string/byte/strtoimax]]
[[ja:c/string/byte/strtoimax]]
[[ko:c/string/byte/strtoimax]]
[[pl:c/string/byte/strtoimax]]
[[pt:c/string/byte/strtoimax]]
[[ru:c/string/byte/strtoimax]]
[[tr:c/string/byte/strtoimax]]
[[zh:c/string/byte/strtoimax]]</text>
      <sha1>5kxq1gulxovztiy3wg9mlxfjbs2mh59</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strtok</title>
    <ns>0</ns>
    <id>6142</id>
    <revision>
      <id>80870</id>
      <parentid>80853</parentid>
      <timestamp>2015-09-12T13:07:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>&quot;sizeof str&quot; is incorrect</comment>
      <text xml:space="preserve" bytes="6984">{{c/title| strtok | strtok_s}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl rev begin|num=1}}
{{dcl | until=c99 | 1=
char *strtok( char *str, const char *delim );
}}
{{dcl | since=c99 |1=
char *strtok( char *restrict str, const char *restrict delim );
}}
{{dcl rev end}}
{{dcl | since=c11| num=2|
char *strtok_s(char *restrict str, rsize_t *restrict strmax,
     const char *restrict delim, char **restrict ptr);
}}
{{dcl end}}

@1@ Finds the next token in a null-terminated byte string pointed to by {{tt|str}}. The separator characters are identified by null-terminated byte string pointed to by {{tt|delim}}.

@@This function is designed to be called multiples times to obtain successive tokens from the same string.

:* If {{c|str !{{=}} NULL}}, the call is treated as the first call to {{tt|strtok}} for this particular string. The function searches for the first character which is ''not'' contained in {{tt|delim}}.
::* If no such character was found, there are no tokens in {{tt|str}} at all, and the function returns a null pointer. 
::* If such character was found, it is the ''beginning of the token''. The function then searches from that point on for the first character that ''is'' contained in {{tt|delim}}. 
:::* If no such character was found, {{tt|str}} has only one token, and future calls to {{tt|strtok}} will return a null pointer
:::* If such character was found, it is ''replaced'' by the null character {{c|'\0'}} and the pointer to the following character is stored in a static location for subsequent invocations.
::* The function then returns the pointer to the beginning of the token
:* If {{c|str {{==}} NULL}}, the call is treated as a subsequent calls to {{tt|strtok}}: the function continues from where it left in previous invocation. The behavior is the same as if the previously stored pointer is passed as {{c|str}}.

@@The behavior is undefined if either {{tt|str}} or {{tt|delim}} is not a pointer to a null-terminated byte string.

@2@ Same as {{v|1}}, except that on every step, writes the number of characters left to see in {{tt|str}} into {{c|*strmax}} and writes the tokenizer's internal state to {{c|*ptr}}. Repeat calls (with null {{tt|str}}) must pass {{tt|strmax}} and {{tt|ptr}} with the values stored by the previous call. Also, the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function, without storing anything in the object pointed to by {{tt|ptr}}
:* {{tt|strmax}}, {{tt|delim}}, or {{tt|ptr}} is a null pointer
:* on a non-initial call (with null {{tt|str}}), {{tt|*ptr}} is a null pointer
:* on the first call, {{c|*strmax}} is zero or greater than {{lc|RSIZE_MAX}}
:* search for the end of a token reaches the end of the source string (as measured by the initial value of {{c|*strmax}})) without encountering the null terminator
@@The behavior is undefined if both {{tt|str}} points to a character array which lacks the null character and {{tt|strmax}} points to a value which is greater than the size of that character array.
:As all bounds-checked functions, {{tt|strtok_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|string.h}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to tokenize}}
{{par | delim | pointer to the null-terminated byte string identifying delimiters}}
{{par | strmax | pointer to an object which initially holds the size of {{tt|str}}: strtok_s stores the number of characters that remain to be examined}}
{{par | ptr | pointer to an object of type {{c|char*}}, which is used by strtok_s to store its internal state}}
{{par end}}

===Return value===
Returns pointer to the beginning of the next token or {{lc|NULL}} if there are no more tokens.

===Note===
This function is destructive: it writes the {{c|'\0'}} characters in the elements of the string {{tt|str}}. In particular, a string literal cannot be used as the first argument of {{tt|strtok}}.

Each call to {{tt|strtok}} modifies a static variable: is not thread safe.

Unlike most other tokenizers, the delimiters in {{tt|strtok}} can be different for each subsequent token, and can even depend on the contents of the previous tokens.

The {{tt|strtok_s}} function differs from the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html strtok_r] function by guarding against storing outside of the string being tokenized, and by checking runtime constraints.

===Example===
{{example
 |
 | code=
#define __STDC_WANT_LIB_EXT1__ 1
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    char input[] = &quot;A bird came down the walk&quot;;
    printf(&quot;Parsing the input string '%s'\n&quot;, input);
    char *token = strtok(input, &quot; &quot;);
    while(token) {
        puts(token);
        token = strtok(NULL, &quot; &quot;);
    }

    printf(&quot;Contents of the input string now: '&quot;);
    for(size_t n = 0; n &lt; sizeof input; ++n)
        input[n] ? printf(&quot;%c&quot;, input[n]) : printf(&quot;\\0&quot;);
    puts(&quot;'&quot;);

#ifdef __STDC_LIB_EXT1__
    char str[] = &quot;A bird came down the walk&quot;;
    rsize_t strmax = sizeof str;
    const char *delim = &quot; &quot;;
    char *next_token;
    printf(&quot;Parsing the input string '%s'\n&quot;, str);
    token = strtok_s(str, &amp;strmax, delim, &amp;next_token);
    while(token) {
        puts(token);
        token = strtok_s(NULL, &amp;strmax, delim, &amp;next_token);
    }
 
    printf(&quot;Contents of the input string now: '&quot;);
    for(size_t n = 0; n &lt; sizeof str; ++n)
        str[n] ? printf(&quot;%c&quot;, str[n]) : printf(&quot;\\0&quot;);
    puts(&quot;'&quot;);
#endif
}
|p=true
 | output=
Parsing the input string 'A bird came down the walk'
A
bird
came
down
the
walk
Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'
Parsing the input string 'A bird came down the walk'
A
bird
came
down
the
walk
Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.5.8  | title=The strtok function | p=369-370}}
{{ref std | section=K.3.7.3.1 | title=The strtok_s function | p=620-621}}
{{ref std c99}}
{{ref std | section=7.21.5.8  | title=The strtok function | p=332-333}}
{{ref std c89}}
{{ref std | section=4.11.5.8 | title=The strtok function }}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strpbrk}}
{{dsc inc | c/string/byte/dsc strcspn}}
{{dsc inc | c/string/byte/dsc strspn}}
{{dsc inc | c/string/wide/dsc wcstok}}
{{dsc see cpp | cpp/string/byte/strtok}}
{{dsc end}}

[[ar:c/string/byte/strtok]]
[[cs:c/string/byte/strtok]]
[[de:c/string/byte/strtok]]
[[es:c/string/byte/strtok]]
[[fr:c/string/byte/strtok]]
[[it:c/string/byte/strtok]]
[[ja:c/string/byte/strtok]]
[[ko:c/string/byte/strtok]]
[[pl:c/string/byte/strtok]]
[[pt:c/string/byte/strtok]]
[[ru:c/string/byte/strtok]]
[[tr:c/string/byte/strtok]]
[[zh:c/string/byte/strtok]]</text>
      <sha1>enw2rq5vbfb4r6g7pc57nt4ba4srh5h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strtol</title>
    <ns>0</ns>
    <id>6124</id>
    <revision>
      <id>89228</id>
      <parentid>87725</parentid>
      <timestamp>2017-01-11T21:19:27Z</timestamp>
      <contributor>
        <ip>95.144.152.155</ip>
      </contributor>
      <text xml:space="preserve" bytes="4062">{{c/title| strtol | strtoll}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
long      strtol( const char          *str, char          **str_end, int base );
}}
{{dcl | since=c99 |
long      strtol( const char *restrict str, char **restrict str_end, int base );
}}
{{dcl rev end}}
{{dcl | since=c99 |
long long strtoll( const char *restrict str, char **restrict str_end, int base );
}}
{{dcl end}}

Interprets an integer value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

If the {{tt|str}} is empty or does not have the expected form, no conversion is performed, and (if {{tt|str_end}} is not {{lc|NULL}}) the value of {{tt|str}} is stored in the object pointed to by {{tt|str_end}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par | str_end | pointer to a pointer to character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
* If successful, an integer value corresponding to the contents of {{tt|str}} is returned.
* If the converted value falls out of range of corresponding return type, a range error occurs (setting {{lc|errno}} to {{lc|ERANGE}}) and {{lc|LONG_MAX}}, {{lc|LONG_MIN}}, {{lc|LLONG_MAX}} or {{lc|LLONG_MIN}} is returned. 
* If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    // parsing with error handling
    const char *p = &quot;10 200000000000000000000000000000 30 -40 junk&quot;;
    printf(&quot;Parsing '%s':\n&quot;, p);
    char *end;
    for (long i = strtol(p, &amp;end, 10);
         p != end;
         i = strtol(p, &amp;end, 10))
    {
        printf(&quot;'%.*s' -&gt; &quot;, (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf(&quot;range error, got &quot;);
            errno = 0;
        }
        printf(&quot;%ld\n&quot;, i);
    }

    // parsing without error handling
    printf(&quot;\&quot;1010\&quot; in binary  --&gt; %ld\n&quot;, strtol(&quot;1010&quot;,NULL,2));
    printf(&quot;\&quot;12\&quot; in octal     --&gt; %ld\n&quot;, strtol(&quot;12&quot;,NULL,8));
    printf(&quot;\&quot;A\&quot;  in hex       --&gt; %ld\n&quot;, strtol(&quot;A&quot;,NULL,16));
    printf(&quot;\&quot;junk\&quot; in base-36 --&gt; %ld\n&quot;, strtol(&quot;junk&quot;,NULL,36));
    printf(&quot;\&quot;012\&quot; in auto-detected base  --&gt; %ld\n&quot;, strtol(&quot;012&quot;,NULL,0));
    printf(&quot;\&quot;0xA\&quot; in auto-detected base  --&gt; %ld\n&quot;, strtol(&quot;0xA&quot;,NULL,0));
    printf(&quot;\&quot;junk\&quot; in auto-detected base --&gt;  %ld\n&quot;, strtol(&quot;junk&quot;,NULL,0));
}
 | output=
Parsing '10 200000000000000000000000000000 30 -40 junk':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 9223372036854775807
' 30' -&gt; 30
' -40' -&gt; -40
&quot;1010&quot; in binary  --&gt; 10
&quot;12&quot; in octal     --&gt; 10
&quot;A&quot;  in hex       --&gt; 10
&quot;junk&quot; in base-36 --&gt; 926192
&quot;012&quot; in auto-detected base  --&gt; 10
&quot;0xA&quot; in auto-detected base  --&gt; 10
&quot;junk&quot; in auto-detected base --&gt;  0
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.1.4 | title=The strtol, strtoll, strtoul, and strtoull functions | p=344-345}}
{{ref std c99}}
{{ref std | section=7.20.1.4 | title=The strtol, strtoll, strtoul, and strtoull functions | p=310-311}}
{{ref std c89}}
{{ref std | section=4.10.1.5 | title=The strtol function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc atoi}}
{{dsc inc | c/string/byte/dsc strtoul}}
{{dsc inc | c/string/wide/dsc wcstol}}
{{dsc inc | c/string/wide/dsc wcstoul}}
{{dsc see cpp | cpp/string/byte/strtol | strtol | strtoll}}
{{dsc end}}

[[ar:c/string/byte/strtol]]
[[cs:c/string/byte/strtol]]
[[de:c/string/byte/strtol]]
[[es:c/string/byte/strtol]]
[[fr:c/string/byte/strtol]]
[[it:c/string/byte/strtol]]
[[ja:c/string/byte/strtol]]
[[ko:c/string/byte/strtol]]
[[pl:c/string/byte/strtol]]
[[pt:c/string/byte/strtol]]
[[ru:c/string/byte/strtol]]
[[tr:c/string/byte/strtol]]
[[zh:c/string/byte/strtol]]</text>
      <sha1>cdxadx06hfsml4lwua6n8kk209xkl7e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strtold</title>
    <ns>0</ns>
    <id>6515</id>
    <redirect title="c/string/byte/strtof" />
    <revision>
      <id>25687</id>
      <timestamp>2012-04-23T21:08:00Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/string/byte/strtof]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strtoul</title>
    <ns>0</ns>
    <id>6125</id>
    <revision>
      <id>86110</id>
      <parentid>82739</parentid>
      <timestamp>2016-06-21T12:21:40Z</timestamp>
      <contributor>
        <username>Jwesley78</username>
        <id>5479</id>
      </contributor>
      <text xml:space="preserve" bytes="3108">{{c/title| strtoul | strtoull}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl rev begin}}
{{dcl | until=c99 |
unsigned long      strtoul( const char          *str, char          **str_end, 
                            int base );
}}
{{dcl | since=c99 |
unsigned long      strtoul( const char *restrict str, char **restrict str_end, 
                            int base );
}}
{{dcl rev end}}
{{dcl | since=c99 |
unsigned long long strtoull( const char *restrict str, char **restrict str_end,
                             int base );
}}
{{dcl end}}

Interprets an unsigned integer value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base | u=true}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par | str_end | pointer to a pointer to character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs ({{lc|errno}} is set to {{tt|ERANGE}}) and {{lc|ULONG_MAX}} or {{lc|ULLONG_MAX}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdlib.h&gt;

int main(void)
{
    const char *p = &quot;10 200000000000000000000000000000 30 -40&quot;;
    printf(&quot;Parsing '%s':\n&quot;, p);
    char *end;
    for (unsigned long i = strtoul(p, &amp;end, 10);
         p != end;
         i = strtoul(p, &amp;end, 10))
    {
        printf(&quot;'%.*s' -&gt; &quot;, (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf(&quot;range error, got &quot;);
            errno = 0;
        }
        printf(&quot;%lu\n&quot;, i);
    }
}
 | output=
Parsing '10 200000000000000000000000000000 30 -40':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 18446744073709551615
' 30' -&gt; 30
' -40' -&gt; 18446744073709551576
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.1.4 | title=The strtol, strtoll, strtoul, and strtoull functions | p=344-345}}
{{ref std c99}}
{{ref std | section=7.20.1.4 | title=The strtol, strtoll, strtoul, and strtoull functions | p=310-311}}
{{ref std c89}}
{{ref std | section=4.10.1.6 | title=The strtoul function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcstoul}}
{{dsc inc | c/string/byte/dsc atoi}}
{{dsc inc | c/string/byte/dsc strtol}}
{{dsc see cpp | cpp/string/byte/strtoul}}
{{dsc end}}

[[ar:c/string/byte/strtoul]]
[[cs:c/string/byte/strtoul]]
[[de:c/string/byte/strtoul]]
[[es:c/string/byte/strtoul]]
[[fr:c/string/byte/strtoul]]
[[it:c/string/byte/strtoul]]
[[ja:c/string/byte/strtoul]]
[[ko:c/string/byte/strtoul]]
[[pl:c/string/byte/strtoul]]
[[pt:c/string/byte/strtoul]]
[[ru:c/string/byte/strtoul]]
[[tr:c/string/byte/strtoul]]
[[zh:c/string/byte/strtoul]]</text>
      <sha1>ai10crbes6dymfqec1uyi8mq98co9d8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/strxfrm</title>
    <ns>0</ns>
    <id>6131</id>
    <revision>
      <id>87760</id>
      <parentid>85322</parentid>
      <timestamp>2016-09-30T04:00:48Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>correction : *dest is not const</comment>
      <text xml:space="preserve" bytes="3582">{{c/title|strxfrm}}
{{c/string/byte/navbar}}
{{dcl begin}}
{{dcl header | string.h}}
{{dcl | until=c99 |
size_t strxfrm( char          *dest, const char          *src, 
                size_t count );
}}
{{dcl | since=c99 |
size_t strxfrm( char *restrict dest, const char *restrict src, 
                size_t count );
}}
{{dcl end}}

Transforms the null-terminated byte string pointed to by {{tt|src}} into the implementation-defined form such that comparing two transformed strings with {{lc|strcmp}} gives the same result as comparing the original strings with {{lc|strcoll}}, in the current C locale.

The first {{tt|count}} characters of the transformed string are written to destination, including the terminating null character, and the length of the full transformed string is returned, excluding the terminating null character.

The behavior is undefined if the {{tt|dest}} array is not large enough. The behavior is undefined if {{tt|dest}} and {{tt|src}} overlap.

If {{tt|count}} is {{c|0}}, then {{tt|dest}} is allowed to be a null pointer.

===Notes===
The correct length of the buffer that can receive the entire transformed string is {{c|1+strxfrm(NULL, src, 0)}}

===Parameters===
{{par begin}}
{{par| dest | pointer to the first element of the array where the transformed string will be written}}
{{par| src| pointer to the first character of a null-terminated byte string to transform}}
{{par| count | maximum number of characters to be written}}
{{par end}}

===Return value===
The length of the transformed string, not including the terminating null-character.

This function is used when making multiple locale-dependent comparisons using the same string or set of strings, because it is more efficient to use {{tt|strxfrm}} to transform all the strings just once, and subsequently compare the transformed strings with {{lc|strcmp}}.

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    setlocale(LC_COLLATE, &quot;cs_CZ.iso88592&quot;);

    const char *in1 = &quot;hrnec&quot;;
    char out1[1+strxfrm(NULL, in1, 0)];
    strxfrm(out1, in1, sizeof out1);

    const char *in2 = &quot;chrt&quot;;
    char out2[1+strxfrm(NULL, in2, 0)];
    strxfrm(out2, in2, sizeof out2);

    printf(&quot;In the Czech locale: &quot;);
    if(strcmp(out1, out2) &lt; 0)
         printf(&quot;%s before %s\n&quot;,in1, in2);
    else
         printf(&quot;%s before %s\n&quot;,in2, in1);

    printf(&quot;In lexicographical comparison: &quot;);
    if(strcmp(in1, in2)&lt;0)
         printf(&quot;%s before %s\n&quot;,in1, in2);
    else
         printf(&quot;%s before %s\n&quot;,in2, in1);

}
 | output=
In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec
}}

===References===
{{ref std c11}}
{{ref std | section=7.24.4.5  | title=The strxfrm function | p=366-367}}
{{ref std c99}}
{{ref std | section=7.21.4.5  | title=The strxfrm function | p=329-330}}
{{ref std c89}}
{{ref std | section=4.11.4.5  | title=The strxfrm function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcoll}}
{{dsc inc | c/string/wide/dsc wcscoll}}
{{dsc inc | c/string/byte/dsc strcmp}}
{{dsc inc | c/string/wide/dsc wcsxfrm}}
{{dsc see cpp | cpp/string/byte/strxfrm}}
{{dsc end}}

[[ar:c/string/byte/strxfrm]]
[[cs:c/string/byte/strxfrm]]
[[de:c/string/byte/strxfrm]]
[[es:c/string/byte/strxfrm]]
[[fr:c/string/byte/strxfrm]]
[[it:c/string/byte/strxfrm]]
[[ja:c/string/byte/strxfrm]]
[[ko:c/string/byte/strxfrm]]
[[pl:c/string/byte/strxfrm]]
[[pt:c/string/byte/strxfrm]]
[[ru:c/string/byte/strxfrm]]
[[tr:c/string/byte/strxfrm]]
[[zh:c/string/byte/strxfrm]]</text>
      <sha1>ov114j7c11li8qh4e4pmyaxzedsfsfx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/tolower</title>
    <ns>0</ns>
    <id>6048</id>
    <revision>
      <id>78768</id>
      <parentid>76572</parentid>
      <timestamp>2015-06-08T13:47:21Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2480">{{c/title|tolower}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int tolower( int ch );
}}
Converts the given character to lowercase according to the character conversion rules defined by the currently installed C locale.

In the default &quot;C&quot; locale, the following uppercase letters {{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}} are replaced with respective lowercase letters {{tt|abcdefghijklmnopqrstuvwxyz}}.

===Parameters===
{{par begin}}
{{par | ch | character to be converted. If the value of {{tt|ch}} is not representable as {{c|unsigned char}} and does not equal {{c|EOF}}, the behavior is undefined.}}
{{par end}}

===Return value===
Lowercase version of {{tt|ch}} or unmodified {{tt|ch}} if no lowercase version is listed in the current C locale.

===Example===
{{example |
| code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;
#include &lt;limits.h&gt;

int main(void)
{
    /* In the default locale: */
    unsigned char l;
    for (unsigned char u=0; u&lt;UCHAR_MAX; u++) {
        l = tolower(u);
        if (l!=u) printf(&quot;%c%c &quot;, u,l);
    }
    printf(&quot;\n\n&quot;);

    unsigned char c = '\xb4'; // the character Ž in ISO-8859-15
                              // but ´ (acute accent) in ISO-8859-1 
    unsigned char c2 = c;   // for printing
    setlocale(LC_ALL, &quot;en_US.iso88591&quot;);
    printf(&quot;in iso8859-1, tolower('0x%x') gives 0x%x\n&quot;, c2, tolower(c));
    setlocale(LC_ALL, &quot;en_US.iso885915&quot;);
    printf(&quot;in iso8859-15, tolower('0x%x') gives 0x%x\n&quot;, c2, tolower(c));
}
| output=
Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz

in iso8859-1, tolower('0xb4') gives 0xb4
in iso8859-15, tolower('0xb4') gives 0xb8
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.2.1 | title=The tolower function | p=203}}
{{ref std c99}}
{{ref std | section=7.4.2.1 | title=The tolower function | p=184}}
{{ref std c89}}
{{ref std | section=4.3.2.1 | title=The tolower function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc toupper}}
{{dsc inc | c/string/wide/dsc towlower}}
{{dsc see cpp | cpp/string/byte/tolower}}
{{dsc end}}

[[ar:c/string/byte/tolower]]
[[cs:c/string/byte/tolower]]
[[de:c/string/byte/tolower]]
[[es:c/string/byte/tolower]]
[[fr:c/string/byte/tolower]]
[[it:c/string/byte/tolower]]
[[ja:c/string/byte/tolower]]
[[ko:c/string/byte/tolower]]
[[pl:c/string/byte/tolower]]
[[pt:c/string/byte/tolower]]
[[ru:c/string/byte/tolower]]
[[tr:c/string/byte/tolower]]
[[zh:c/string/byte/tolower]]</text>
      <sha1>6ue7cc6c22ddna18gzq9zeavvaldqnh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/byte/toupper</title>
    <ns>0</ns>
    <id>6047</id>
    <revision>
      <id>78769</id>
      <parentid>76573</parentid>
      <timestamp>2015-06-08T13:48:43Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2482">{{c/title|toupper}}
{{c/string/byte/navbar}}
{{ddcl | header=ctype.h |
int toupper( int ch );
}}

Converts the given character to uppercase according to the character conversion rules defined by the currently installed C locale.

In the default &quot;C&quot; locale, the following lowercase letters {{tt|abcdefghijklmnopqrstuvwxyz}} are replaced with respective uppercase letters {{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}.

===Parameters===
{{par begin}}
{{par | ch | character to be converted. If the value of {{tt|ch}} is not representable as {{c|unsigned char}} and does not equal {{c|EOF}}, the behavior is undefined.}}
{{par end}}

===Return value===
Uppercase version of {{tt|ch}} or unmodified {{tt|ch}} if no uppercase version is listed in the current C locale.

===Example===
{{example |
| code=
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;locale.h&gt;
#include &lt;limits.h&gt;

int main(void)
{
    /* In the default locale: */
    unsigned char u;
    for (unsigned char l=0; l&lt;UCHAR_MAX; l++) {
        u = toupper(l);
        if (l!=u) printf(&quot;%c%c &quot;, l,u);
    }
    printf(&quot;\n\n&quot;);

    unsigned char c = '\xb8'; // the character Ž in ISO-8859-15
                              // but ´ (acute accent) in ISO-8859-1 
    unsigned char c2 = c;   // for printing
    setlocale(LC_ALL, &quot;en_US.iso88591&quot;);
    printf(&quot;in iso8859-1, toupper('0x%x') gives 0x%x\n&quot;, c2, toupper(c));
    setlocale(LC_ALL, &quot;en_US.iso885915&quot;);
    printf(&quot;in iso8859-15, toupper('0x%x') gives 0x%x\n&quot;, c2, toupper(c));
}
| output=
aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ 

in iso8859-1, toupper('0xb8') gives 0xb8
in iso8859-15, toupper('0xb8') gives 0xb4
}}

===References===
{{ref std c11}}
{{ref std | section=7.4.2.2 | title=The toupper function | p=204}}
{{ref std c99}}
{{ref std | section=7.4.2.2 | title=The toupper function | p=185}}
{{ref std c89}}
{{ref std | section=4.3.2.2 | title=The toupper function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc tolower}}
{{dsc inc | c/string/wide/dsc towupper}}
{{dsc see cpp | cpp/string/byte/toupper}}
{{dsc end}}

[[ar:c/string/byte/toupper]]
[[cs:c/string/byte/toupper]]
[[de:c/string/byte/toupper]]
[[es:c/string/byte/toupper]]
[[fr:c/string/byte/toupper]]
[[it:c/string/byte/toupper]]
[[ja:c/string/byte/toupper]]
[[ko:c/string/byte/toupper]]
[[pl:c/string/byte/toupper]]
[[pt:c/string/byte/toupper]]
[[ru:c/string/byte/toupper]]
[[tr:c/string/byte/toupper]]
[[zh:c/string/byte/toupper]]</text>
      <sha1>o0n9azxa9yn7lkyrq9qlp2vzlenckft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte</title>
    <ns>0</ns>
    <id>5758</id>
    <revision>
      <id>90439</id>
      <parentid>90373</parentid>
      <timestamp>2017-02-23T11:39:18Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new link to new page about char32_t</comment>
      <text xml:space="preserve" bytes="5436">{{title|Null-terminated multibyte strings}}
{{c/string/multibyte/navbar}}

A null-terminated multibyte string (NTMBS), or &quot;multibyte string&quot;, is a sequence of nonzero bytes followed by a byte with value zero (the terminating null character).

Each character stored in the string may occupy more than one byte. The encoding used to represent characters in a multibyte character string is locale-specific: it may be UTF-8, GB18030, EUC-JP, Shift-JIS, etc. For example, the char array {{c|{'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'}}} is an NTMBS holding the string {{c|&quot;你好&quot;}} in UTF-8 multibyte encoding: the first three bytes encode the character 你, the next three bytes encode the character 好. The same string encoded in GB18030 is the char array {{c|{'\xc4', '\xe3', '\xba', '\xc3', '\0'}}}, where each of the two characters is encoded as a two-byte sequence.

In some multibyte encodings, any given multibyte character sequence may represent different characters depending on the previous byte sequences, known as &quot;shift sequences&quot;. Such encodings are known as state-dependent: knowledge of the current shift state is required to interpret each character. An NTMBS is only valid if it begins and ends in the initial shift state: if a shift sequence was used, the corresponding unshift sequence has to be present before the terminating null character. Examples of such encodings are BOCU-1 and [http://www.unicode.org/reports/tr6 SCSU].

A multibyte character string is layout-compatible with [[c/string/byte|null-terminated byte string]] (NTBS), that is, can be stored, copied, and examined using the same facilities, except for calculating the number of characters. If the correct locale is in effect, I/O functions also handle multibyte strings. Multibyte strings can be converted to and from wide strings using the following locale-dependent conversion functions:

===Multibyte/wide character conversions===
{{dsc begin}}
{{dsc header | stdlib.h}}
{{dsc inc | c/string/multibyte/dsc mblen}}
{{dsc inc | c/string/multibyte/dsc mbtowc}}
{{dsc inc | c/string/multibyte/dsc wctomb}}
{{dsc inc | c/string/multibyte/dsc mbstowcs}}
{{dsc inc | c/string/multibyte/dsc wcstombs}}
{{dsc header | wchar.h}}
{{dsc inc | c/string/multibyte/dsc mbsinit}}
{{dsc inc | c/string/multibyte/dsc btowc}}
{{dsc inc | c/string/multibyte/dsc wctob}}
{{dsc inc | c/string/multibyte/dsc mbrlen}}
{{dsc inc | c/string/multibyte/dsc mbrtowc}}
{{dsc inc | c/string/multibyte/dsc wcrtomb}}
{{dsc inc | c/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | c/string/multibyte/dsc wcsrtombs}}
{{dsc header | uchar.h}}
{{dsc inc | c/string/multibyte/dsc mbrtoc16}}
{{dsc inc | c/string/multibyte/dsc c16rtomb}}
{{dsc inc | c/string/multibyte/dsc mbrtoc32}}
{{dsc inc | c/string/multibyte/dsc c32rtomb}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | wchar.h}}
{{dsc inc | c/string/multibyte/dsc mbstate_t}}
{{dsc header | uchar.h}}
{{dsc inc | c/string/multibyte/dsc char16_t}}
{{dsc inc | c/string/multibyte/dsc char32_t}}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc header | limits.h}}
{{dsc inc | c/string/multibyte/dsc MB_LEN_MAX}}
{{dsc header | stdlib.h}}
{{dsc inc | c/string/multibyte/dsc MB_CUR_MAX}}
{{dsc header | uchar.h}}
{{dsc macro const | __STDC_UTF_16__ |  nolink=true | indicates that UTF-16 encoding is used by {{lc|mbrtoc16}} and {{lc|c16rtomb}} | notes={{mark c11}}}}
{{dsc macro const | __STDC_UTF_32__ |  nolink=true | indicates that UTF-32 encoding is used by {{lc|mbrtoc32}} and {{lc|c32rtomb}} | notes={{mark c11}}}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.10    | title=Sizes of integer types &lt;limits.h&gt;| p=222}}
{{ref std | section=7.22    | title=General utilities &lt;stdlib.h&gt; | p=340-360}}
{{ref std | section=7.28    | title=Unicode utilities &lt;uchar.h&gt; | p=398-401}}
{{ref std | section=7.29    | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=402-446}}
{{ref std | section=7.31.12 | title=General utilities &lt;stdlib.h&gt; | p=456}}
{{ref std | section=7.31.16 | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=456}}
{{ref std | section=K.3.6   | title=General utilities &lt;stdlib.h&gt; | p=604-614}}
{{ref std | section=K.3.9   | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=627-651}}
{{ref std c99}}
{{ref std | section=7.10    | title=Sizes of integer types &lt;limits.h&gt;| p=203}}
{{ref std | section=7.20    | title=General utilities &lt;stdlib.h&gt; | p=306-324}}
{{ref std | section=7.24    | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=348-392}}
{{ref std | section=7.26.10 | title=General utilities &lt;stdlib.h&gt; | p=402}}
{{ref std | section=7.26.12 | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=402}}
{{ref std c89}}
{{ref std | section=4.1.4  | title=Limits &lt;float.h&gt; and &lt;limits.h&gt;}}
{{ref std | section=4.10   | title=GENERAL UTILITIES &lt;stdlib.h&gt;}}
{{ref std | section=4.13.7 | title=General utilities &lt;stdlib.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/string/multibyte | Null-terminated multibyte strings}}
{{dsc end}}

[[ar:c/string/multibyte]]
[[cs:c/string/multibyte]]
[[de:c/string/multibyte]]
[[es:c/string/multibyte]]
[[fr:c/string/multibyte]]
[[it:c/string/multibyte]]
[[ja:c/string/multibyte]]
[[ko:c/string/multibyte]]
[[pl:c/string/multibyte]]
[[pt:c/string/multibyte]]
[[ru:c/string/multibyte]]
[[tr:c/string/multibyte]]
[[zh:c/string/multibyte]]</text>
      <sha1>8lu47u7w6rdz9g1cvg9b190g91m324r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/btowc</title>
    <ns>0</ns>
    <id>6111</id>
    <revision>
      <id>76790</id>
      <parentid>76418</parentid>
      <timestamp>2015-03-01T15:58:18Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2630">{{c/title|btowc}}
{{c/string/multibyte/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
wint_t btowc( int c );
}}

Widens a single-byte character {{tt|c}} (reinterpreted as {{c|unsigned char}}) to its wide character equivalent. 

Most multibyte character encodings use single-byte codes to represent the characters from the ASCII character set. This function may be used to convert such characters to {{c|wchar_t}}.

===Parameters===
{{par begin}}
{{par | c | single-byte character to widen}}
{{par end}}

===Return value===

{{c|WEOF}} if {{tt|c}} is {{lc|EOF}}

wide character representation of {{tt|c}} if {{c|(unsigned char)c}} is a valid single-byte character in the initial shift state, {{c|WEOF}} otherwise.

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;
#include &lt;assert.h&gt;

void try_widen(unsigned char c)
{
    wint_t w = btowc(c);
    if(w != WEOF)
        printf(&quot;The single-byte character %#x widens to %#x\n&quot;, c, w);
    else
        printf(&quot;The single-byte character %#x failed to widen\n&quot;, c);
}

int main(void)
{
    char *loc = setlocale(LC_ALL, &quot;lt_LT.iso88594&quot;);
    assert(loc);
    printf(&quot;In Lithuanian ISO-8859-4 locale:\n&quot;);
    try_widen('A');
    try_widen('\xdf'); // German letter ß (U+00df) in ISO-8859-4
    try_widen('\xf9'); // Lithuanian letter ų (U+0173) in ISO-8859-4

    setlocale(LC_ALL, &quot;lt_LT.utf8&quot;);
    printf(&quot;In Lithuanian UTF-8 locale:\n&quot;);
    try_widen('A');
    try_widen('\xdf');
    try_widen('\xf9');
}
 |p=true
 | output=
In Lithuanian ISO-8859-4 locale:
The single-byte character 0x41 widens to 0x41
The single-byte character 0xdf widens to 0xdf
The single-byte character 0xf9 widens to 0x173
In Lithuanian UTF-8 locale:
The single-byte character 0x41 widens to 0x41
The single-byte character 0xdf failed to widen
The single-byte character 0xf9 failed to widen
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.6.1.1  | title=The btowc function | p=441}}
{{ref std c99}}
{{ref std | section=7.24.6.1.1  | title=The btowc function | p=387}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc wctob}}
{{dsc see cpp | cpp/string/multibyte/btowc}}
{{dsc end}}

[[ar:c/string/multibyte/btowc]]
[[cs:c/string/multibyte/btowc]]
[[de:c/string/multibyte/btowc]]
[[es:c/string/multibyte/btowc]]
[[fr:c/string/multibyte/btowc]]
[[it:c/string/multibyte/btowc]]
[[ja:c/string/multibyte/btowc]]
[[ko:c/string/multibyte/btowc]]
[[pl:c/string/multibyte/btowc]]
[[pt:c/string/multibyte/btowc]]
[[ru:c/string/multibyte/btowc]]
[[tr:c/string/multibyte/btowc]]
[[zh:c/string/multibyte/btowc]]</text>
      <sha1>s30s1r1rioxns5u32h9mxwq2spz2cpd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/c16rtomb</title>
    <ns>0</ns>
    <id>9392</id>
    <revision>
      <id>92134</id>
      <parentid>92132</parentid>
      <timestamp>2017-04-06T11:57:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>wrong place for that rc</comment>
      <text xml:space="preserve" bytes="4605">{{c/title|c16rtomb}}
{{c/string/multibyte/navbar}}
{{ddcl | header=uchar.h | since=c11 |
size_t c16rtomb( char* s, char16_t c16, mbstate_t* ps );
}}

Converts a single code point from its variable-length 16-bit wide character representation (typically, UTF-16) to its narrow multibyte character representation.

If {{tt|s}} is not a null pointer and {{tt|c16}} is the last 16-bit code unit in a valid variable-length encoding of a code point, the function determines the number of bytes necessary to store the multibyte character representation of that code point (including any shift sequences), and stores the multibyte character representation in the character array whose first element is pointed to by {{tt|s}}. At most {{c|MB_CUR_MAX}} bytes can be written by this function.

If {{tt|s}} is a null pointer, the call is equivalent to {{c|c16rtomb(buf, u'\0', ps)}} for some internal buffer {{tt|buf}}.

If {{tt|c16}} is the null wide character {{c|u'\0'}}, a null byte is stored, preceded by any shift sequence necessary to restore the initial shift state and the conversion state parameter {{c|*ps}} is updated to represent the initial shift state.

If {{tt|c16}} is not the final code unit in a 16-bit representation of a wide character, it does not write to the array pointed to by {{tt|s}}, only {{c|*ps}} is updated.

If the macro {{c|__STDC_UTF_16__}} is defined, the 16-bit encoding used by this function is UTF-16; otherwise, it is implementation-defined. In any case, the multibyte character encoding used by this function is specified by the currently active C locale.

===Parameters===
{{par begin}}
{{par | s | pointer to narrow character array where the multibyte character will be stored}}
{{par | c16 | the 16-bit wide character to convert}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===
On success, returns the number of bytes (including any shift sequences) written to the character array whose first element is pointed to by {{tt|s}}. This value may be {{c|0}}, e.g. when processing the leading {{c|char16_t}} units in a multi-{{c|char16_t}}-unit sequence (occurs when processing the leading surrogate in a surrogate pair of UTF-16).

On failure (if {{c|c16}} is not a valid 16-bit code unit), returns {{c|-1}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.

===Notes===
In C11 as published, unlike {{lc|mbrtoc16}}, which converts variable-width multibyte (such as UTF-8) to variable-width 16-bit (such as UTF-16) encoding, this function can only convert single-unit 16-bit encoding, meaning it cannot convert UTF-16 to UTF-8 despite that being the original intent of this function. This was corrected by the post-C11 defect report [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2059.htm#dr_488 DR488].

===Example===
{{example|Note: this example assumes the fix for the defect report 488 is applied|code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;uchar.h&gt;
#include &lt;stdlib.h&gt;
 
mbstate_t state;
int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    char16_t in[] = u&quot;zß水🍌&quot;; // or &quot;z\u00df\u6c34\U0001F34C&quot;
    size_t in_sz = sizeof in / sizeof *in;
 
    printf(&quot;Processing %zu UTF-16 code units: [ &quot;, in_sz);
    for(size_t n = 0; n &lt; in_sz; ++n) printf(&quot;%#x &quot;, in[n]);
    puts(&quot;]&quot;);
 
    char out[MB_CUR_MAX * in_sz];
    char *p = out;
    for(size_t n = 0; n &lt; in_sz; ++n) {
        int rc = c16rtomb(p, in[n], &amp;state); 
        if(rc == -1) break;
        p += rc;
    }
    
    size_t out_sz = p - out;
    printf(&quot;into %zu UTF-8 code units: [ &quot;, out_sz);
    for(size_t x = 0; x &lt; out_sz; ++x) printf(&quot;%#x &quot;, +(unsigned char)out[x]);
    puts(&quot;]&quot;);
}
|output=
Processing 6 UTF-16 code units: [ 0x7a 0xdf 0x6c34 0xd83c 0xdf4c 0 ]
into 11 UTF-8 code units: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c 0 ] 
}}

===References===
{{ref std c11}}
{{ref std | section=7.28.1.2  | title=The c16rtomb function | p=399-400}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbrtoc16}}
{{dsc see cpp | cpp/string/multibyte/c16rtomb}}
{{dsc end}}


[[ar:c/string/multibyte/c16rtomb]]
[[cs:c/string/multibyte/c16rtomb]]
[[de:c/string/multibyte/c16rtomb]]
[[es:c/string/multibyte/c16rtomb]]
[[fr:c/string/multibyte/c16rtomb]]
[[it:c/string/multibyte/c16rtomb]]
[[ja:c/string/multibyte/c16rtomb]]
[[ko:c/string/multibyte/c16rtomb]]
[[pl:c/string/multibyte/c16rtomb]]
[[pt:c/string/multibyte/c16rtomb]]
[[ru:c/string/multibyte/c16rtomb]]
[[tr:c/string/multibyte/c16rtomb]]
[[zh:c/string/multibyte/c16rtomb]]</text>
      <sha1>eqeuk3n21zhy2aeb41pgbnkdsp1mews</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/c32rtomb</title>
    <ns>0</ns>
    <id>9393</id>
    <revision>
      <id>92135</id>
      <parentid>92133</parentid>
      <timestamp>2017-04-06T11:58:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>moving rc back into its scope</comment>
      <text xml:space="preserve" bytes="3757">{{c/title|c32rtomb}}
{{c/string/multibyte/navbar}}
{{ddcl | header=uchar.h | since=c11 |
size_t c32rtomb( char* s, char32_t c32, mbstate_t* ps );
}}

Converts a single code point from its variable-length 32-bit wide character representation (but typically, UTF-32) to its narrow multibyte character representation.

If {{tt|s}} is not a null pointer, the function determines the number of bytes necessary to store the multibyte character representation of {{tt|c32}} (including any shift sequences), and stores the multibyte character representation in the character array whose first element is pointed to by {{tt|s}}. At most {{c|MB_CUR_MAX}} bytes can be written by this function.

If {{tt|s}} is a null pointer, the call is equivalent to {{c|c32rtomb(buf, U'\0', ps)}} for some internal buffer {{tt|buf}}.

If {{tt|c32}} is the null wide character {{c|U'\0'}}, a null byte is stored, preceded by any shift sequence necessary to restore the initial shift state and the conversion state parameter {{c|*ps}} is updated to represent the initial shift state.

If the macro {{c|__STDC_UTF_32__}} is defined, the 32-bit encoding used by this function is UTF-32; otherwise, it is implementation-defined. In any case, the multibyte character encoding used by this function is specified by the currently active C locale.

===Parameters===
{{par begin}}
{{par | s | pointer to narrow character array where the multibyte character will be stored}}
{{par | c32 | the 32-bit wide character to convert}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===
On success, returns the number of bytes (including any shift sequences) written to the character array whose first element is pointed to by {{tt|s}}. This value may be {{c|0}}, e.g. when processing the leading {{c|char32_t}} units in a multi-{{c|char32_t}}-unit sequence (does not occur in UTF-32).

On failure (if {{c|c32}} is not a valid 32-bit wide character), returns {{c|-1}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;uchar.h&gt;
#include &lt;stdlib.h&gt;
 
mbstate_t state;
int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    char32_t in[] = U&quot;zß水🍌&quot;; // or &quot;z\u00df\u6c34\U0001F34C&quot;
    size_t in_sz = sizeof in / sizeof *in;
 
    printf(&quot;Processing %zu UTF-32 code units: [ &quot;, in_sz);
    for(size_t n = 0; n &lt; in_sz; ++n) printf(&quot;%#x &quot;, in[n]);
    puts(&quot;]&quot;);
 
    char out[MB_CUR_MAX * in_sz];
    char *p = out;
    for(size_t n = 0; n &lt; in_sz; ++n) {
        int rc = c32rtomb(p, in[n], &amp;state); 
        if(rc == -1) break;
        p += rc;
    }
 
    size_t out_sz = p - out;
    printf(&quot;into %zu UTF-8 code units: [ &quot;, out_sz);
    for(size_t x = 0; x &lt; out_sz; ++x) printf(&quot;%#x &quot;, +(unsigned char)out[x]);
    puts(&quot;]&quot;);
}
|output=
Processing 5 UTF-32 code units: [ 0x7a 0xdf 0x6c34 0x1f34c 0 ]
into 11 UTF-8 code units: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c 0 ]
}}

===References===
{{ref std c11}}
{{ref std | section=7.28.1.4 | title=The c32rtomb function | p=401}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbrtoc32}}
{{dsc see cpp | cpp/string/multibyte/c32rtomb}}
{{dsc end}}

[[ar:c/string/multibyte/c32rtomb]]
[[cs:c/string/multibyte/c32rtomb]]
[[de:c/string/multibyte/c32rtomb]]
[[es:c/string/multibyte/c32rtomb]]
[[fr:c/string/multibyte/c32rtomb]]
[[it:c/string/multibyte/c32rtomb]]
[[ja:c/string/multibyte/c32rtomb]]
[[ko:c/string/multibyte/c32rtomb]]
[[pl:c/string/multibyte/c32rtomb]]
[[pt:c/string/multibyte/c32rtomb]]
[[ru:c/string/multibyte/c32rtomb]]
[[tr:c/string/multibyte/c32rtomb]]
[[zh:c/string/multibyte/c32rtomb]]</text>
      <sha1>21urx1uouw6ud6iu5dqo0qhe4ax4xe3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/char16 t</title>
    <ns>0</ns>
    <id>16187</id>
    <revision>
      <id>90374</id>
      <parentid>90372</parentid>
      <timestamp>2017-02-22T13:43:28Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>inserted header stdint.h</comment>
      <text xml:space="preserve" bytes="1954">{{c/title|char16_t}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | uchar.h | notes={{mark since c11}}}}
{{dcl | since=c11 |
typedef uint_least16_t char16_t;
}}
{{dcl header | stdint.h}}
{{dcl | since=c99 |
typedef /*implementation-defined*/ uint_least16_t;
}}
{{dcl end}}

{{c|char16_t}} is an unsigned integer type used for 16-bit wide characters and is the same type as {{c|uint_least16_t}}.

{{c|uint_least16_t}} is the smallest unsigned integer type with width of at least 16 bits.

===Notes===
On any given platform, the width of type {{c|char16_t}} can be greater than 16 bits, but the actual values stored in an object of type {{c|char16_t}} will always have a width of 16 bits.

===Example===
{{example |
 | code=
#include &lt;uchar.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    char16_t wcs[] = u&quot;zß水🍌&quot;; // or &quot;z\u00df\u6c34\U0001f34c&quot;
    size_t wcs_sz = sizeof wcs / sizeof *wcs;
    printf(&quot;%zu UTF-16 code units: [ &quot;, wcs_sz);
    for (size_t n = 0; n &lt; wcs_sz; ++n) printf(&quot;%#x &quot;, wcs[n]);
    printf(&quot;]\n&quot;);
}
 | p=true
 | output=
6 UTF-16 code units: [ 0x7a 0xdf 0x6c34 0xd83c 0xdf4c 0 ]
}}

===References===
{{ref std c11}}
{{ref std | section=7.28 | title=Unicode utilities &lt;uchar.h&gt; | p=398}}
{{ref std | section=7.20.1.2 | title=Minimum-width integer types | p=290}}
{{ref std c99}}
{{ref std | section=7.18.1.2 | title=Minimum-width integer types | p=256}}
{{ref std end}} 

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/string/multibyte/char16_t}}
{{dsc end}}

[[ar:c/string/multibyte/char16_t]]
[[cs:c/string/multibyte/char16_t]]
[[de:c/string/multibyte/char16_t]]
[[es:c/string/multibyte/char16_t]]
[[fr:c/string/multibyte/char16_t]]
[[it:c/string/multibyte/char16_t]]
[[ja:c/string/multibyte/char16_t]]
[[ko:c/string/multibyte/char16_t]]
[[pl:c/string/multibyte/char16_t]]
[[pt:c/string/multibyte/char16_t]]
[[ru:c/string/multibyte/char16_t]]
[[tr:c/string/multibyte/char16_t]]
[[zh:c/string/multibyte/char16_t]]</text>
      <sha1>1i4aqvxz0vchi6jblqr8dg9f7zb1gvi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/char32 t</title>
    <ns>0</ns>
    <id>16189</id>
    <revision>
      <id>90438</id>
      <parentid>90437</parentid>
      <timestamp>2017-02-23T11:36:58Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <comment>new page about char32_t</comment>
      <text xml:space="preserve" bytes="1915">{{c/title|char32_t}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | uchar.h | notes={{mark since c11}}}}
{{dcl | since=c11 |
typedef uint_least32_t char32_t;
}}
{{dcl | since=c99 |
typedef /*implementation-defined*/ uint_least32_t;
}}
{{dcl end}}

{{c|char32_t}} is an unsigned integer type used for 32-bit wide characters and is the same type as {{c|uint_least32_t}}.

{{c|uint_least32_t}} is the smallest unsigned integer type with width of at least 32 bits.

===Notes===
On any given platform, the width of type {{c|char32_t}} can be greater than 32 bits, but the actual values stored in an object of type {{c|char32_t}} will always have a width of 32 bits.

===Example===
{{example |
 | code=
#include &lt;uchar.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    char32_t wc[] = U&quot;zß水🍌&quot;; // or &quot;z\u00df\u6c34\U0001f34c&quot;
    size_t wc_sz = sizeof wc / sizeof *wc;
    printf(&quot;%zu UTF-32 code units: [ &quot;, wc_sz);
    for (size_t n = 0; n &lt; wc_sz; ++n) printf(&quot;%#x &quot;, wc[n]);
    printf(&quot;]\n&quot;);
}
 | p=true
 | output=
5 UTF-32 code units: [ 0x7a 0xdf 0x6c34 0x1f34c 0 ]
}}

===References===
{{ref std c11}}
{{ref std | section=7.28 | title=Unicode utilities &lt;uchar.h&gt; | p=398}}
{{ref std | section=7.20.1.2 | title=Minimum-width integer types | p=290}}
{{ref std c99}}
{{ref std | section=7.18.1.2 | title=Minimum-width integer types | p=256}}
{{ref std end}} 

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/string/multibyte/char32_t}}
{{dsc end}}

[[ar:c/string/multibyte/char32_t]]
[[cs:c/string/multibyte/char32_t]]
[[de:c/string/multibyte/char32_t]]
[[es:c/string/multibyte/char32_t]]
[[fr:c/string/multibyte/char32_t]]
[[it:c/string/multibyte/char32_t]]
[[ja:c/string/multibyte/char32_t]]
[[ko:c/string/multibyte/char32_t]]
[[pl:c/string/multibyte/char32_t]]
[[pt:c/string/multibyte/char32_t]]
[[ru:c/string/multibyte/char32_t]]
[[tr:c/string/multibyte/char32_t]]
[[zh:c/string/multibyte/char32_t]]</text>
      <sha1>trox4tfz57nuhjkb55g24h04i5c9m0q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mblen</title>
    <ns>0</ns>
    <id>6116</id>
    <revision>
      <id>78810</id>
      <parentid>76767</parentid>
      <timestamp>2015-06-09T11:44:55Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3415">{{c/title|mblen}}
{{c/string/multibyte/navbar}}
{{ddcl | header=stdlib.h |
int mblen( const char* s, size_t n );
}}

Determines the size, in bytes, of the multibyte character whose first byte is pointed to by {{tt|s}}. 

If {{tt|s}} is a null pointer, resets the global conversion state and determined whether shift sequences are used.

This function is equivalent to the call {{c|mbtowc((wchar_t*)0, s, n)}}, except that conversion state of {{lc|mbtowc}} is unaffected.

===Notes===
Each call to {{tt|mblen}} updates the internal global conversion state (a static object of type {{lc|mbstate_t}}, only known to this function). If the multibyte encoding uses shift states, care must be taken to avoid backtracking or multiple scans. In any case, multiple threads should not call {{tt|mblen}} without synchronization: {{lc|mbrlen}} may be used instead.

===Parameters===
{{par begin}}
{{par | s | pointer to the multibyte character}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par end}}

===Return value===
If {{tt|s}} is not a null pointer, returns the number of bytes that are contained in the multibyte character or {{c|-1}} if the first bytes pointed to by {{tt|s}} do not form a valid multibyte character or {{c|0}} if {{tt|s}} is pointing at the null charcter {{c|'\0'}}.

If {{tt|s}} is a null pointer, resets its internal conversion state to represent the initial shift state and returns {{c|0}} if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).

===Example===
{{example
 | 
 | code=
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;locale.h&gt;
#include &lt;stdio.h&gt;

// the number of characters in a multibyte string is the sum of mblen()'s
// note: the simpler approach is mbstowcs(NULL, str, sz)
size_t strlen_mb(const char* ptr)
{
    size_t result = 0;
    const char* end = ptr + strlen(ptr);
    mblen(NULL, 0); // reset the conversion state
    while(ptr &lt; end) {
        int next = mblen(ptr, end - ptr);
        if(next == -1) {
           perror(&quot;strlen_mb&quot;);
           break;
        }
        ptr += next;
        ++result;
    }
    return result;
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    const char* str = &quot;z\u00df\u6c34\U0001f34c&quot;;
    printf(&quot;The string %s consists of %zu bytes, but only %zu characters\n&quot;,
            str, strlen(str), strlen_mb(str));
}
 | p =true
 | output=
The string zß水🍌 consists of 10 bytes, but only 4 characters
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.7.1 | title=The mblen function | p=357}}
{{ref std c99}}
{{ref std | section=7.20.7.1 | title=The mblen function | p=321}}
{{ref std c89}}
{{ref std | section=4.10.7.1 | title=The mblen function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbtowc}}
{{dsc inc | c/string/multibyte/dsc mbrlen}}
{{dsc see cpp | cpp/string/multibyte/mblen}}
{{dsc end}}

[[ar:c/string/multibyte/mblen]]
[[cs:c/string/multibyte/mblen]]
[[de:c/string/multibyte/mblen]]
[[es:c/string/multibyte/mblen]]
[[fr:c/string/multibyte/mblen]]
[[it:c/string/multibyte/mblen]]
[[ja:c/string/multibyte/mblen]]
[[ko:c/string/multibyte/mblen]]
[[pl:c/string/multibyte/mblen]]
[[pt:c/string/multibyte/mblen]]
[[ru:c/string/multibyte/mblen]]
[[tr:c/string/multibyte/mblen]]
[[zh:c/string/multibyte/mblen]]</text>
      <sha1>gqyf82j4650650tlwhra7deysk7sdip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbrlen</title>
    <ns>0</ns>
    <id>6109</id>
    <revision>
      <id>90780</id>
      <parentid>90755</parentid>
      <timestamp>2017-03-10T12:02:16Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>essays of related functions have a simple first statement; list of return values modeled after mbrtowc</comment>
      <text xml:space="preserve" bytes="3365">{{c/title|mbrlen}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl | header=wchar.h |notes={{mark since c95}}|
size_t mbrlen( const char *s, size_t n, mbstate_t *ps );
}}
{{dcl | notes={{mark since c99}}|
size_t mbrlen( const char *restrict s, size_t n, mbstate_t *restrict ps );
}}
{{dcl end}}

Determines the size, in bytes, of the representation of a multibyte character.

This function is equivalent to the call {{c|mbrtowc(nullptr, s, n, ps?ps:&amp;internal)}} for some hidden object {{tt|internal}} of type {{lc|mbstate_t}}, except that the expression {{tt|ps}} is evaluated only once.

===Parameters===
{{par begin}}
{{par | s | pointer to an element of a multibyte character string}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the variable holding the conversion state}}
{{par end}}

===Return value===
The first of the following that applies:
* {{c|0}} if the next {{tt|n}} or fewer bytes complete the null character or if {{tt|s}} is a null pointer. Both cases reset the conversion state.
* the number of bytes {{c|[1...n]}} that complete a valid multibyte character
* {{c|(size_t)-2}} if the next {{tt|n}} bytes are part of a possibly valid multibyte character, which is still incomplete after examining all {{tt|n}} bytes
* {{c|(size_t)-1}} if encoding error occurs. The value of {{lc|errno}} is {{tt|EILSEQ}}; the conversion state is unspecified.

===Example===
{{example
 | 
 | code=
#include &lt;locale.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{   
    // allow mbrlen() to work with UTF-8 multibyte encoding
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    const char* str = u8&quot;水&quot;;
    size_t sz = strlen(str);

    mbstate_t mb;
    memset(&amp;mb, 0, sizeof mb);
    int len1 = mbrlen(str, 1, &amp;mb);
    if(len1 == -2) 
        printf(&quot;The first 1 byte of %s is an incomplete multibyte char&quot;
               &quot; (mbrlen returns -2)\n&quot;, str);

    int len2 = mbrlen(str+1, sz-1, &amp;mb);
    printf(&quot;The remaining %zu  bytes of %s hold %d bytes of the multibyte&quot;
           &quot; character\n&quot;, sz-1, str, len2);

    printf(&quot;Attempting to call mbrlen() in the middle of %s while in initial&quot;
           &quot; shift state returns %zd\n&quot;, str, mbrlen(str+1, sz-1, &amp;mb));
}
 | output=
The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2)
The remaining 2  bytes of 水 hold 2 bytes of the multibyte character
Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.6.3.1 | title=The mbrlen function | p=442}}
{{ref std c99}}
{{ref std | section=7.24.6.3.1 | title=The mbrlen function | p=388}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbrtowc}}
{{dsc inc | c/string/multibyte/dsc mblen}}
{{dsc see cpp | cpp/string/multibyte/mbrlen}}
{{dsc end}}

[[ar:c/string/multibyte/mbrlen]]
[[cs:c/string/multibyte/mbrlen]]
[[de:c/string/multibyte/mbrlen]]
[[es:c/string/multibyte/mbrlen]]
[[fr:c/string/multibyte/mbrlen]]
[[it:c/string/multibyte/mbrlen]]
[[ja:c/string/multibyte/mbrlen]]
[[ko:c/string/multibyte/mbrlen]]
[[pl:c/string/multibyte/mbrlen]]
[[pt:c/string/multibyte/mbrlen]]
[[ru:c/string/multibyte/mbrlen]]
[[tr:c/string/multibyte/mbrlen]]
[[zh:c/string/multibyte/mbrlen]]</text>
      <sha1>5ete0nhhacg3bcq8tge2gnvlyrpvymc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbrtoc16</title>
    <ns>0</ns>
    <id>9391</id>
    <revision>
      <id>92136</id>
      <parentid>92101</parentid>
      <timestamp>2017-04-06T12:38:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+comment; similar to the reminder in example of mbrtoc32</comment>
      <text xml:space="preserve" bytes="4628">{{c/title|mbrtoc16}}
{{c/string/multibyte/navbar}}
{{ddcl | header=uchar.h | since=c11 |
size_t mbrtoc16( char16_t* pc16, const char* s, size_t n, mbstate_t* ps );
}}

Converts a single code point from its narrow multibyte character representation to its variable-length 16-bit wide character representation (typically, UTF-16). 

If {{tt|s}} is not a null pointer, inspects at most {{tt|n}} bytes of the multibyte character string, beginning with the byte pointed to by {{tt|s}} to determine the number of bytes necessary to complete the next multibyte character (including any shift sequences). If the function determines that the next multibyte character in {{tt|s}} is complete and valid, converts it to the corresponding 16-bit wide character and stores it in {{c|*pc16}} (if {{tt|pc16}} is not null).

If the multibyte character in {{tt|*s}} corresponds to a multi-char16_t sequence (e.g. a surrogate pair in UTF-16), then after the first call to this function, {{tt|*ps}} is updated in such a way that the next call to {{tt|mbrtoc16}} will write out the additional char16_t, without considering {{tt|*s}}.

If {{tt|s}} is a null pointer, the values of {{tt|n}} and {{tt|pc16}} are ignored and the call is equivalent to {{c|mbrtoc16(NULL, &quot;&quot;, 1, ps)}}.

If the wide character produced is the null character, the conversion state {{c|*ps}} represents the initial shift state.

If the macro {{c|__STDC_UTF_16__}} is defined, the 16-bit encoding used by this function is UTF-16; otherwise, it is implementation-defined. In any case, the multibyte character encoding used by this function is specified by the currently active C locale.

===Parameters===
{{par begin}}
{{par | pc16 | pointer to the location where the resulting 16-bit wide character will be written}}
{{par | s | pointer to the multibyte character string used as input}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===

The first of the following that applies:
* {{c|0}} if the character converted from {{tt|s}} (and stored in {{c|*pc16}} if non-null) was the null character
* the number of bytes {{c|[1...n]}} of the multibyte character successfully converted from {{tt|s}}
* {{c|(size_t)-3}} if the next {{c|char16_t}} from a multi-{{c|char16_t}} character (e.g. a surrogate pair) has now been written to {{c|*pc16}}. No bytes are processed from the input in this case.
* {{c|(size_t)-2}} if the next {{tt|n}} bytes constitute an incomplete, but so far valid, multibyte character. Nothing is written to {{c|*pc16}}.
* {{c|(size_t)-1}} if encoding error occurs. Nothing is written to {{tt|*pc16}}, the value {{lc|EILSEQ}} is stored in {{lc|errno}} and the value if {{c|*ps}} is unspecified.

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;uchar.h&gt;

mbstate_t state;
int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    char in[] = u8&quot;zß水🍌&quot;; // or &quot;z\u00df\u6c34\U0001F34C&quot;
    size_t in_sz = sizeof in / sizeof *in;
 
    printf(&quot;Processing %zu UTF-8 code units: [ &quot;, in_sz);
    for(size_t n = 0; n &lt; in_sz; ++n) printf(&quot;%#x &quot;, (unsigned char)in[n]);
    puts(&quot;]&quot;);

    char16_t out[in_sz];
    char *p_in = in, *end = in + in_sz;
    char16_t *p_out = out;
    int rc;
    while((rc = mbrtoc16(p_out, p_in, end - p_in, &amp;state)))
    {
        if(rc == -3) // surrogate pairs in UTF-16
            p_out += 1;
        else if(rc &gt; 0) {
            p_in += rc;
            p_out += 1;
        } else break;
    }

    size_t out_sz = p_out - out + 1;
    printf(&quot;into %zu UTF-16 code units: [ &quot;, out_sz);
    for(size_t x = 0; x &lt; out_sz; ++x) printf(&quot;%#x &quot;, out[x]);
    puts(&quot;]&quot;);
}
|output=
Processing 11 UTF-8 code units: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c 0 ]
into 6 UTF-16 code units: [ 0x7a 0xdf 0x6c34 0xd83c 0xdf4c 0 ]
}}

===References===
{{ref std c11}}
{{ref std | section=7.28.1.1  | title=The mbrtoc16 function | p=398-399}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc c16rtomb}}
{{dsc see cpp | cpp/string/multibyte/mbrtoc16}}
{{dsc end}}

[[ar:c/string/multibyte/mbrtoc16]]
[[cs:c/string/multibyte/mbrtoc16]]
[[de:c/string/multibyte/mbrtoc16]]
[[es:c/string/multibyte/mbrtoc16]]
[[fr:c/string/multibyte/mbrtoc16]]
[[it:c/string/multibyte/mbrtoc16]]
[[ja:c/string/multibyte/mbrtoc16]]
[[ko:c/string/multibyte/mbrtoc16]]
[[pl:c/string/multibyte/mbrtoc16]]
[[pt:c/string/multibyte/mbrtoc16]]
[[ru:c/string/multibyte/mbrtoc16]]
[[tr:c/string/multibyte/mbrtoc16]]
[[zh:c/string/multibyte/mbrtoc16]]</text>
      <sha1>iihovavsppmp64p70fmj4sz2b4dzyxv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbrtoc32</title>
    <ns>0</ns>
    <id>9394</id>
    <revision>
      <id>92105</id>
      <parentid>92100</parentid>
      <timestamp>2017-04-05T12:12:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>self-revert, that assert makes a point</comment>
      <text xml:space="preserve" bytes="4593">{{c/title|mbrtoc32}}
{{c/string/multibyte/navbar}}
{{ddcl | header=uchar.h | since=c11 |
size_t mbrtoc32( char32_t* pc32, const char* s, size_t n, mbstate_t* ps );
}}

Converts a single code point from its narrow multibyte character representation to its variable-length 32-bit wide character representation (but typically, UTF-32).

If {{tt|s}} is not a null pointer, inspects at most {{tt|n}} bytes of the multibyte character string, beginning with the byte pointed to by {{tt|s}} to determine the number of bytes necessary to complete the next multibyte character (including any shift sequences). If the function determines that the next multibyte character in {{tt|s}} is complete and valid, converts it to the corresponding 32-bit wide character and stores it in {{c|*pc32}} (if {{tt|pc32}} is not null).

If the multibyte character in {{tt|*s}} corresponds to a multi-char32_t sequence (not possible with UTF-32), then after the first call to this function, {{tt|*ps}} is updated in such a way that the next calls to {{tt|mbrtoc32}} will write out the additional char32_t, without considering {{tt|*s}}.

If {{tt|s}} is a null pointer, the values of {{tt|n}} and {{tt|pc32}} are ignored and the call is equivalent to {{c|mbrtoc32(NULL, &quot;&quot;, 1, ps)}}.

If the wide character produced is the null character, the conversion state {{c|*ps}} represents the initial shift state.

If the macro {{c|__STDC_UTF_32__}} is defined, the 32-bit encoding used by this function is UTF-32; otherwise, it is implementation-defined. In any case, the multibyte character encoding used by this function is specified by the currently active C locale. 

===Parameters===
{{par begin}}
{{par | pc32 | pointer to the location where the resulting 32-bit wide character will be written}}
{{par | s | pointer to the multibyte character string used as input}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===

The first of the following that applies:
* {{c|0}} if the character converted from {{tt|s}} (and stored in {{c|*pc32}} if non-null) was the null character
* the number of bytes {{c|[1...n]}} of the multibyte character successfully converted from {{tt|s}}
* {{c|(size_t)-3}} if the next {{c|char32_t}} from a multi-{{c|char32_t}} character has now been written to {{c|*pc32}}. No bytes are processed from the input in this case.
* {{c|(size_t)-2}} if the next {{tt|n}} bytes constitute an incomplete, but so far valid, multibyte character. Nothing is written to {{c|*pc32}}.
* {{c|(size_t)-1}} if encoding error occurs. Nothing is written to {{tt|*pc32}}, the value {{lc|EILSEQ}} is stored in {{lc|errno}} and the value if {{c|*ps}} is unspecified.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;string.h&gt;
#include &lt;uchar.h&gt;
#include &lt;assert.h&gt;
 
mbstate_t state;
int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    char in[] = u8&quot;zß水🍌&quot;; // or &quot;z\u00df\u6c34\U0001F34C&quot;
    size_t in_sz = sizeof in / sizeof *in;
 
    printf(&quot;Processing %zu UTF-8 code units: [ &quot;, in_sz);
    for(size_t n = 0; n &lt; in_sz; ++n) printf(&quot;%#x &quot;, (unsigned char)in[n]);
    puts(&quot;]&quot;);

    char32_t out[in_sz];
    char *p_in = in, *end = in + in_sz;
    char32_t *p_out = out;
    int rc;
    while((rc = mbrtoc32(p_out, p_in, end - p_in, &amp;state)))
    {
        assert(rc != -3); // no surrogate pairs in UTF-32
        if(rc &lt; 0) break;
        p_in += rc;
        p_out += 1;
    }

    size_t out_sz = p_out - out + 1;
    printf(&quot;into %zu UTF-32 code units: [ &quot;, out_sz);
    for(size_t x = 0; x &lt; out_sz; ++x) printf(&quot;%#x &quot;, out[x]);
    puts(&quot;]&quot;);
}
|output=
Processing 11 UTF-8 code units: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c 0 ]
into 5 UTF-32 code units: [ 0x7a 0xdf 0x6c34 0x1f34c 0 ]
}}

===References===
{{ref std c11}}
{{ref std | section=7.28.1.3  | title=The mbrtoc32 function | p=400-401}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc c32rtomb}}
{{dsc see cpp | cpp/string/multibyte/mbrtoc32}}
{{dsc end}}

[[ar:c/string/multibyte/mbrtoc32]]
[[cs:c/string/multibyte/mbrtoc32]]
[[de:c/string/multibyte/mbrtoc32]]
[[es:c/string/multibyte/mbrtoc32]]
[[fr:c/string/multibyte/mbrtoc32]]
[[it:c/string/multibyte/mbrtoc32]]
[[ja:c/string/multibyte/mbrtoc32]]
[[ko:c/string/multibyte/mbrtoc32]]
[[pl:c/string/multibyte/mbrtoc32]]
[[pt:c/string/multibyte/mbrtoc32]]
[[ru:c/string/multibyte/mbrtoc32]]
[[tr:c/string/multibyte/mbrtoc32]]
[[zh:c/string/multibyte/mbrtoc32]]</text>
      <sha1>rfd8amajiitgjjgo8d0qam0s5lbcv7l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbrtowc</title>
    <ns>0</ns>
    <id>6108</id>
    <revision>
      <id>92104</id>
      <parentid>92097</parentid>
      <timestamp>2017-04-05T12:08:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>int rc makes this a lot more readable too</comment>
      <text xml:space="preserve" bytes="3999">{{c/title|mbrtowc}}
{{c/string/multibyte/navbar}}

{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl |notes={{mark since c95}}|
size_t mbrtowc( wchar_t* pwc, const char* s, size_t n, mbstate_t* ps );
}}
{{dcl | notes={{mark since c99}}|
size_t mbrtowc( wchar_t *restrict pwc, const char *restrict s, size_t n,
                mbstate_t *restrict ps );
}}
{{dcl end}}

Converts a narrow multibyte character to its wide character representation.

If {{tt|s}} is not a null pointer, inspects at most {{tt|n}} bytes of the multibyte character string, beginning with the byte pointed to by {{tt|s}} to determine the number of bytes necessary to complete the next multibyte character (including any shift sequences). If the function determines that the next multibyte character in {{tt|s}} is complete and valid, converts it to the corresponding wide character and stores it in {{c|*pwc}} (if {{tt|pwc}} is not null).

If {{tt|s}} is a null pointer, the values of {{tt|n}} and {{tt|pwc}} are ignored and call is equivalent to {{c|mbrtowc(NULL, &quot;&quot;, 1, ps)}}.

If the wide character produced is the null character, the conversion state stored in {{c|*ps}} is the initial shift state.

===Parameters===
{{par begin}}
{{par | pwc | pointer to the location where the resulting wide character will be written}}
{{par | s | pointer to the multibyte character string used as input}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the conversion state used when interpreting the multibyte character string }}
{{par end}}

===Return value===
The first of the following that applies:
* {{c|0}} if the character converted from {{tt|s}} (and stored in {{c|pwc}} if non-null) was the null character
* the number of bytes {{c|[1...n]}} of the multibyte character successfully converted from {{tt|s}}
* {{c|(size_t)-2}} if the next {{tt|n}} bytes constitute an incomplete, but so far valid, multibyte character. Nothing is written to {{c|*pwc}}.
* {{c|(size_t)-1}} if encoding error occurs. Nothing is written to {{tt|*pwc}}, the value {{lc|EILSEQ}} is stored in {{lc|errno}} and the value of {{c|*ps}} is left unspecified.

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;string.h&gt;
#include &lt;wchar.h&gt;
 
int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    mbstate_t state;
    memset(&amp;state, 0, sizeof state);
    char in[] = u8&quot;z\u00df\u6c34\U0001F34C&quot;; // or u8&quot;zß水🍌&quot;
    size_t in_sz = sizeof in / sizeof *in;

    printf(&quot;Processing %zu UTF-8 code units: [ &quot;, in_sz);
    for(size_t n = 0; n &lt; in_sz; ++n) printf(&quot;%#x &quot;, (unsigned char)in[n]);
    puts(&quot;]&quot;);

    wchar_t out[in_sz];
    char *p_in = in, *end = in + in_sz;
    wchar_t *p_out = out;
    int rc;
    while((rc = mbrtowc(p_out, p_in, end - p_in, &amp;state)) &gt; 0)
    {
        p_in += rc;
        p_out += 1;
    }

    size_t out_sz = p_out - out + 1;
    printf(&quot;into %zu wchar_t units: [ &quot;, out_sz);
    for(size_t x = 0; x &lt; out_sz; ++x) printf(&quot;%#x &quot;, out[x]);
    puts(&quot;]&quot;);
}
 | output=
Processing 11 UTF-8 code units: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c 0 ]
into 5 wchar_t units: [ 0x7a 0xdf 0x6c34 0x1f34c 0 ]
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.6.3.2 | title=The mbrtowc function | p=443}}
{{ref std c99}}
{{ref std | section=7.24.6.3.2 | title=The mbrtowc function | p=389}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbtowc}}
{{dsc inc | c/string/multibyte/dsc wcrtomb}}
{{dsc see cpp | cpp/string/multibyte/mbrtowc}}
{{dsc end}}

[[ar:c/string/multibyte/mbrtowc]]
[[cs:c/string/multibyte/mbrtowc]]
[[de:c/string/multibyte/mbrtowc]]
[[es:c/string/multibyte/mbrtowc]]
[[fr:c/string/multibyte/mbrtowc]]
[[it:c/string/multibyte/mbrtowc]]
[[ja:c/string/multibyte/mbrtowc]]
[[ko:c/string/multibyte/mbrtowc]]
[[pl:c/string/multibyte/mbrtowc]]
[[pt:c/string/multibyte/mbrtowc]]
[[ru:c/string/multibyte/mbrtowc]]
[[tr:c/string/multibyte/mbrtowc]]
[[zh:c/string/multibyte/mbrtowc]]</text>
      <sha1>j7u646ju5wj53ey8oyxmjiujucndte3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbsinit</title>
    <ns>0</ns>
    <id>6112</id>
    <revision>
      <id>76777</id>
      <parentid>76413</parentid>
      <timestamp>2015-03-01T14:12:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2517">{{c/title|mbsinit}}
{{c/string/multibyte/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
int mbsinit( const mbstate_t* ps);
}}

If {{tt|ps}} is not a null pointer, the {{tt|mbsinit}} function determines whether the pointed-to {{lc|mbstate_t}} object describes the initial conversion state. 

===Notes===
Although a zero-initialized {{lc|mbstate_t}} always represents the initial conversion state, there may be other values of {{lc|mbstate_t}} that also represent the initial conversion state.

===Parameters===
{{par begin}}
{{par | ps | pointer to the mbstate_t object to examine}}
{{par end}}

===Return value===
{{c|0}} if {{tt|ps}} is not a null pointer and does not represent the initial conversion state, nonzero value otherwise.

===Example===
{{example
 | 
 | code=
#include &lt;locale.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    // allow mbrlen() to work with UTF-8 multibyte encoding
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    const char* str = u8&quot;水&quot;; // or u8&quot;\u6c34&quot; or &quot;\xe6\xb0\xb4&quot;
    static mbstate_t mb; // zero-initialize
    (void)mbrlen(&amp;str[0], 1, &amp;mb);
    if (!mbsinit(&amp;mb)) {
        printf(&quot;After processing the first 1 byte of %s,\n&quot;
               &quot;the conversion state is not initial\n\n&quot;, str);
    }

    (void)mbrlen(&amp;str[1], strlen(str), &amp;mb);
    if (mbsinit(&amp;mb)) {
        printf(&quot;After processing the remaining 2 bytes of %s,\n&quot;
               &quot;the conversion state is initial conversion state\n&quot;, str);
    }
}
 | output=
After processing the first 1 byte of 水,
the conversion state is not initial

After processing the remaining 2 bytes of 水,
the conversion state is initial conversion state
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.6.2.1 | title=The mbsinit function | p=441-442}}
{{ref std c99}}
{{ref std | section=7.24.6.2.1 | title=The mbsinit function | p=387-388}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbstate_t}}
{{dsc see cpp | cpp/string/multibyte/mbsinit}}
{{dsc end}}

[[ar:c/string/multibyte/mbsinit]]
[[cs:c/string/multibyte/mbsinit]]
[[de:c/string/multibyte/mbsinit]]
[[es:c/string/multibyte/mbsinit]]
[[fr:c/string/multibyte/mbsinit]]
[[it:c/string/multibyte/mbsinit]]
[[ja:c/string/multibyte/mbsinit]]
[[ko:c/string/multibyte/mbsinit]]
[[pl:c/string/multibyte/mbsinit]]
[[pt:c/string/multibyte/mbsinit]]
[[ru:c/string/multibyte/mbsinit]]
[[tr:c/string/multibyte/mbsinit]]
[[zh:c/string/multibyte/mbsinit]]</text>
      <sha1>mbqedv3tcvavt1aji3tjhhtjlza3yx6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbsrtowcs</title>
    <ns>0</ns>
    <id>6106</id>
    <revision>
      <id>90676</id>
      <parentid>90675</parentid>
      <timestamp>2017-03-07T12:28:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>completed C95 prototype with a semicolon</comment>
      <text xml:space="preserve" bytes="6016">{{c/title|mbsrtowcs|mbsrtowcs_s}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin | num=1}}
{{dcl |since=c95 |
size_t mbsrtowcs( wchar_t* dst, const char** src, size_t len, mbstate_t* ps );
}}
{{dcl | since=c99 |
size_t mbsrtowcs( wchar_t *restrict dst, const char **restrict src, size_t len,
                  mbstate_t *restrict ps);
}}
{{dcl rev end}}
{{dcl | since=c11 | num=2 |
errno_t mbsrtowcs_s( size_t *restrict retval,
                     wchar_t *restrict dst, rsize_t dstsz,
                     const char **restrict src, rsize_t len,
                     mbstate_t *restrict ps);
}}
{{dcl end}}

@1@ Converts a null-terminated multibyte character sequence, which begins in the conversion state described by {{tt|*ps}}, from the array whose first element is pointed to by {{c|*src}} to its wide character representation. If {{tt|dst}} is not null, converted characters are stored in the successive elements of the wchar_t array pointed to by {{tt|dst}}. No more than {{tt|len}} wide characters are written to the destination array. Each multibyte character is converted as if by a call to {{lc|mbrtowc}}. The conversion stops if:
@@* The multibyte null character was converted and stored. {{c|*src}} is set to {{lc|NULL}} and {{tt|*ps}} represents the initial shift state.
@@* An invalid multibyte character (according to the current C locale) was encountered. {{c|*src}} is set to point at the beginning  of the first unconverted multibyte character.
@@* the next wide character to be stored would exceed {{tt|len}}. {{c|*src}} is set to point at the beginning of the first unconverted multibyte character. This condition is not checked if {{c|1=dst==NULL}}.
@2@ Same as {{v|1}}, except that
@@* the function returns its result as an out-parameter {{tt|retval}}
@@* if no null character was written to {{tt|dst}} after {{tt|len}} wide characters were written, then {{c|L'\0'}} is stored in {{tt|dst[len]}}, which means len+1 total wide characters are written
@@* the function clobbers the destination array from the terminating null and until {{tt|dstsz}}
@@* If {{tt|src}} and {{tt|dst}} overlap, the behavior is unspecified.
@@* the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|retval}}, {{tt|ps}}, {{tt|src}}, or {{c|*src}} is a null pointer
:* {{tt|dstsz}} or {{tt|len}} is greater than {{lc|RSIZE_MAX/sizeof(wchar_t)}} (unless {{tt|dst}} is null)
:* {{tt|dstsz}} is not zero (unless {{tt|dst}} is null)
:* There is no null character in the first {{tt|dstsz}} multibyte characters in the {{c|*src}} array and {{tt|len}} is greater than {{tt|dstsz}} (unless {{tt|dst}} is null)
:As all bounds-checked functions, {{tt|mbsrtowcs_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to wide character array where the results will be stored}}
{{par | src | pointer to pointer to the first element of a null-terminated multibyte string}}
{{par | len | number of wide characters available in the array pointed to by dst}}
{{par | ps | pointer to the conversion state object}}
{{par | dstsz | max number of wide characters that will be written (size of the {{tt|dst}} array)}}
{{par | retval | pointer to a size_t object where the result will be stored}}
{{par end}}

===Return value===
@1@ On success, returns the number of wide characters, excluding the terminating {{c|L'\0'}}, written to the character array. If {{c|1=dst==NULL}}, returns the number of wide characters that would have been written given unlimited length. On conversion error (if invalid multibyte character was encountered), returns {{c|(size_t)-1}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.
@2@ zero on success (in which case the number of wide characters excluding terminating zero that were, or would be written to {{tt|dst}}, is stored in {{c|*retval}}), non-sero on error. In case of a runtime constraint violation, stores {{c|(size_t)-1}} in {{c|*retval}} (unless {{tt|retval}} is null) and sets {{c|dst[0]}} to {{c|L'\0'}} (unless {{tt|dst}} is null or {{tt|dstmax}} is zero or greater than {{lc|RSIZE_MAX}})

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;wchar.h&gt;
#include &lt;string.h&gt;

void print_as_wide(const char* mbstr)
{
    mbstate_t state;
    memset(&amp;state, 0, sizeof state);
    int len = 1 + mbsrtowcs(NULL, &amp;mbstr, 0, &amp;state);
    wchar_t wstr[len];
    mbsrtowcs(&amp;wstr[0], &amp;mbstr, len, &amp;state);
    wprintf(L&quot;Wide string: %ls \n&quot;, wstr);
    wprintf(L&quot;The length, including L'\\0': %d\n&quot;, len);
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    print_as_wide(u8&quot;z\u00df\u6c34\U0001f34c&quot;); // u8&quot;zß水🍌&quot;
}
 | output=
Wide string: zß水🍌
The length, including L'\0': 5
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.6.4.1  | title=The mbsrtowcs function | p=445}}
{{ref std | section=K.3.9.3.2.1 | title=The mbsrtowcs_s function | p=648-649}}
{{ref std c99}}
{{ref std | section=7.24.6.4.1  | title=The mbsrtowcs function | p=391}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbstowcs}}
{{dsc inc | c/string/multibyte/dsc mbrtowc}}
{{dsc inc | c/string/multibyte/dsc wcsrtombs}}
{{dsc see cpp | cpp/string/multibyte/mbsrtowcs}}
{{dsc end}}

[[ar:c/string/multibyte/mbsrtowcs]]
[[cs:c/string/multibyte/mbsrtowcs]]
[[de:c/string/multibyte/mbsrtowcs]]
[[es:c/string/multibyte/mbsrtowcs]]
[[fr:c/string/multibyte/mbsrtowcs]]
[[it:c/string/multibyte/mbsrtowcs]]
[[ja:c/string/multibyte/mbsrtowcs]]
[[ko:c/string/multibyte/mbsrtowcs]]
[[pl:c/string/multibyte/mbsrtowcs]]
[[pt:c/string/multibyte/mbsrtowcs]]
[[ru:c/string/multibyte/mbsrtowcs]]
[[tr:c/string/multibyte/mbsrtowcs]]
[[zh:c/string/multibyte/mbsrtowcs]]</text>
      <sha1>q384enymvyb8jm8fbac79p5gcs40yii</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbstate t</title>
    <ns>0</ns>
    <id>6103</id>
    <revision>
      <id>88098</id>
      <parentid>76796</parentid>
      <timestamp>2016-10-30T20:24:42Z</timestamp>
      <contributor>
        <username>Chortos-2</username>
        <id>5355</id>
      </contributor>
      <comment>also provided in uchar.h</comment>
      <text xml:space="preserve" bytes="1922">{{c/title|mbstate_t}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | uchar.h | notes={{mark since c11}}}}
{{dcl header | wchar.h}}
{{dcl | since=c95 |
struct mbstate_t;
}}
{{dcl end}}

The type {{tt|mbstate_t}} is a trivial non-array type that can represent any of the conversion states that can occur in an implementation-defined set of supported multibyte character encoding rules. Zero-initialized value of {{tt|mbstate_t}} represents the initial conversion state, although other values of {{tt|mbstate_t}} may exist that also represent the initial conversion state.

Possible implementation of {{tt|mbstate_t}} is a struct type holding an array representing the incomplete multibyte character, an integer counter indicating the number of bytes in the array that have been processed, and a representation of the current shift state.

The following functions should not be called from multiple threads without synchronization with the {{c|mbstate_t*}} argument of {{tt|NULL}} due to possible data races: {{lc|mbrlen}}, {{lc|mbrtowc}}, {{lc|mbsrtowcs}}, {{lc|mbtowc}}, {{lc|wcrtomb}}, {{lc|wcsrtombs}}, {{lc|wctomb}}.

===References===
{{ref std c11}}
{{ref std | section=7.29.1/2 | title=Introduction | p=402}}
{{ref std c99}}
{{ref std | section=7.24.1/2 | title=Introduction | p=348}}
{{ref std end}} 

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbsinit}}
{{dsc see cpp | cpp/string/multibyte/mbstate_t}}
{{dsc end}}

[[ar:c/string/multibyte/mbstate_t]]
[[cs:c/string/multibyte/mbstate_t]]
[[de:c/string/multibyte/mbstate_t]]
[[es:c/string/multibyte/mbstate_t]]
[[fr:c/string/multibyte/mbstate_t]]
[[it:c/string/multibyte/mbstate_t]]
[[ja:c/string/multibyte/mbstate_t]]
[[ko:c/string/multibyte/mbstate_t]]
[[pl:c/string/multibyte/mbstate_t]]
[[pt:c/string/multibyte/mbstate_t]]
[[ru:c/string/multibyte/mbstate_t]]
[[tr:c/string/multibyte/mbstate_t]]
[[zh:c/string/multibyte/mbstate_t]]</text>
      <sha1>r6k86ti9staq6wnet9q4qhvd32udhwo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbstowcs</title>
    <ns>0</ns>
    <id>6113</id>
    <revision>
      <id>78813</id>
      <parentid>76770</parentid>
      <timestamp>2015-06-09T11:53:52Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="5791">{{c/title|mbstowcs|mbstowcs_s}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl rev begin|num=1}}
{{dcl | until=c99 |
size_t mbstowcs( wchar_t          *dst, const char          *src, size_t len)
}}
{{dcl | since=c99 |
size_t mbstowcs( wchar_t *restrict dst, const char *restrict src, size_t len)
}}
{{dcl rev end}}
{{dcl | since=c11 | num=2 |
errno_t mbstowcs_s(size_t *restrict retval, wchar_t *restrict dst,
                  rsize_t dstsz, const char *restrict src, rsize_t len);
}}
{{dcl end}}

@1@ Converts a multibyte character string from the array whose first element is pointed to by {{tt|src}} to its wide character representation. Converted characters are stored in the successive elements of the array pointed to by {{tt|dst}}. No more than {{tt|len}} wide characters are written to the destination array.
@@ Each character is converted as if by a call to {{lc|mbtowc}}, except that the mbtowc conversion state is unaffected. The conversion stops if:
@@* The multibyte null character was converted and stored.
@@* An invalid (in the current C locale) multibyte character was encountered.
@@* The next wide character to be stored would exceed {{tt|len}}.
@@If {{tt|src}} and {{tt|dst}} overlap, the behavior is undefined
@2@ Same as {{v|1}}, except that
@@* conversion is as-if by {{lc|mbrtowc}}, not {{lc|mbtowc}}
@@* the function returns its result as an out-parameter {{tt|retval}}
@@* if no null character was written to {{tt|dst}} after {{tt|len}} wide characters were written, then {{c|L'\0'}} is stored in {{tt|dst[len]}}, which means len+1 total wide characters are written
@@* if {{tt|dst}} is a null pointer, the number of wide characters that would be produced is stored in {{c|*retval}}
@@* the function clobbers the destination array from the terminating null and until {{tt|dstsz}}
@@* If {{tt|src}} and {{tt|dst}} overlap, the behavior is unspecified.
@@* the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|retval}} or {{tt|src}} is a null pointer
:* {{tt|dstsz}} or {{tt|len}} is greater than {{lc|RSIZE_MAX/sizeof(wchar_t)}} (unless {{tt|dst}} is null)
:* {{tt|dstsz}} is not zero (unless {{tt|dst}} is null)
:* There is no null character in the first {{tt|dstsz}} multibyte characters in the {{tt|src}} array and {{tt|len}} is greater than {{tt|dstsz}} (unless {{tt|dst}} is null)
:As all bounds-checked functions, {{tt|mbstowcs_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|stdlib.h}}.

===Notes===
In most implementations, {{tt|mbstowcs}} updates a global static object of type {{lc|mbstate_t}} as it processes through the string, and cannot be called simultaneously by two threads, {{lc|mbsrtowcs}} should be used in such cases.

POSIX specifies a common extension: if {{tt|dst}} is a null pointer, this function returns the number of wide characters that would be written to {{tt|dst}}, if converted. Similar behavior is standard for {{tt|mbstowcs_s}} and for {{lc|mbsrtowcs}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to wide character array where the wide string will be stored}}
{{par | src | pointer to the first element of a null-terminated multibyte string to convert}}
{{par | len | number of wide characters available in the array pointed to by dst}}
{{par | dstsz | max number of wide characters that will be written (size of the {{tt|dst}} array)}}
{{par | retval | pointer to a size_t object where the result will be stored}}
{{par end}}

===Return value===
@1@ On success, returns the number of wide characters, excluding the terminating {{c|L'\0'}}, written to the destination array. On conversion error (if invalid multibyte character was encountered), returns {{c|(size_t)-1}}.
@2@ zero on success (in which case the number of wide characters excluding terminating zero that were, or would be written to {{tt|dst}}, is stored in {{c|*retval}}), non-sero on error. In case of a runtime constraint violation, stores {{c|(size_t)-1}} in {{c|*retval}} (unless {{tt|retval}} is null) and sets {{c|dst[0]}} to {{c|L'\0'}} (unless {{tt|dst}} is null or {{tt|dstmax}} is zero or greater than {{lc|RSIZE_MAX}})

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    const char* mbstr = u8&quot;z\u00df\u6c34\U0001F34C&quot;; // or u8&quot;zß水🍌&quot;
    wchar_t wstr[5];
    mbstowcs(wstr, mbstr, 5);
    wprintf(L&quot;MB string: %s\n&quot;, mbstr);
    wprintf(L&quot;Wide string: %ls\n&quot;, wstr);
}
 | output=
MB string: zß水🍌
Wide string: zß水🍌
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.8.1  | title=The mbstowcs function | p=359}}
{{ref std | section=K.3.6.5.1 | title=The mbstowcs_s function | p=611-612}}
{{ref std c99}}
{{ref std | section=7.20.8.1  | title=The mbstowcs function | p=323}}
{{ref std c89}}
{{ref std | section=4.10.8.1  | title=The mbstowcs function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | c/string/multibyte/dsc wcstombs}}
{{dsc see cpp | cpp/string/multibyte/mbstowcs}}
{{dsc end}}

[[ar:c/string/multibyte/mbstowcs]]
[[cs:c/string/multibyte/mbstowcs]]
[[de:c/string/multibyte/mbstowcs]]
[[es:c/string/multibyte/mbstowcs]]
[[fr:c/string/multibyte/mbstowcs]]
[[it:c/string/multibyte/mbstowcs]]
[[ja:c/string/multibyte/mbstowcs]]
[[ko:c/string/multibyte/mbstowcs]]
[[pl:c/string/multibyte/mbstowcs]]
[[pt:c/string/multibyte/mbstowcs]]
[[ru:c/string/multibyte/mbstowcs]]
[[tr:c/string/multibyte/mbstowcs]]
[[zh:c/string/multibyte/mbstowcs]]</text>
      <sha1>qhx9kpnplyk0asyvndavwwnpid4xjdz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/mbtowc</title>
    <ns>0</ns>
    <id>6115</id>
    <revision>
      <id>78811</id>
      <parentid>76768</parentid>
      <timestamp>2015-06-09T11:47:56Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="3317">{{c/title|mbtowc}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl | until=c99 |
int mbtowc( wchar_t          *pwc, const char          *s, size_t n )
}}
{{dcl | since=c99 |
int mbtowc( wchar_t *restrict pwc, const char *restrict s, size_t n )
}}
{{dcl end}}

Converts a multibyte character whose first byte is pointed to by {{tt|s}} to a wide character, written to {{tt|*pwc}} if {{tt|pwc}} is not null.

If {{tt|s}} is a null pointer, resets the global conversion state and determines whether shift sequences are used.

===Notes===
Each call to {{tt|mbtowc}} updates the internal global conversion state (a static object of type {{lc|mbstate_t}}, only known to this function). If the multibyte encoding uses shift states, care must be taken to avoid backtracking or multiple scans. In any case, multiple threads should not call {{tt|mbtowc}} without synchronization: {{lc|mbrtowc}} may be used instead.

===Parameters===
{{par begin}}
{{par | pwc | pointer to the wide character for output }}
{{par | s | pointer to the multibyte character}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par end}}

===Return value===
If {{tt|s}} is not a null pointer, returns the number of bytes that are contained in the multibyte character or {{c|-1}} if the first bytes pointed to by {{tt|s}} do not form a valid multibyte character or {{c|0}} if {{tt|s}} is pointing at the null charcter {{c|'\0'}}.

If {{tt|s}} is a null pointer, resets its internal conversion state to represent the initial shift state and returns {{c|0}} if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;wchar.h&gt;

// print multibyte string to wide-oriented stdout
// equivalent to wprintf(L&quot;%s\n&quot;, ptr);
void print_mb(const char* ptr)
{
    mbtowc(NULL, 0, 0); // reset the conversion state
    const char* end = ptr + strlen(ptr);
    int ret;
    for (wchar_t wc; (ret = mbtowc(&amp;wc, ptr, end-ptr)) &gt; 0; ptr+=ret) {
        wprintf(L&quot;%lc&quot;, wc);
    }
    wprintf(L&quot;\n&quot;);
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    print_mb(u8&quot;z\u00df\u6c34\U0001F34C&quot;); // or u8&quot;zß水🍌&quot;
}
 | output=
zß水🍌
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.7.2 | title=The mbtowc function | p=358}}
{{ref std c99}}
{{ref std | section=7.20.7.2 | title=The mbtowc function | p=322}}
{{ref std c89}}
{{ref std | section=4.10.7.2 | title=The mbtowc function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbrtowc}}
{{dsc inc | c/string/multibyte/dsc mblen}}
{{dsc see cpp | cpp/string/multibyte/mbtowc}}
{{dsc end}}

[[ar:c/string/multibyte/mbtowc]]
[[cs:c/string/multibyte/mbtowc]]
[[de:c/string/multibyte/mbtowc]]
[[es:c/string/multibyte/mbtowc]]
[[fr:c/string/multibyte/mbtowc]]
[[it:c/string/multibyte/mbtowc]]
[[ja:c/string/multibyte/mbtowc]]
[[ko:c/string/multibyte/mbtowc]]
[[pl:c/string/multibyte/mbtowc]]
[[pt:c/string/multibyte/mbtowc]]
[[ru:c/string/multibyte/mbtowc]]
[[tr:c/string/multibyte/mbtowc]]
[[zh:c/string/multibyte/mbtowc]]</text>
      <sha1>npw2tsoabwvs2le5x444d9o5vdcirbw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/wcrtomb</title>
    <ns>0</ns>
    <id>6107</id>
    <revision>
      <id>90672</id>
      <parentid>90671</parentid>
      <timestamp>2017-03-07T11:45:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>*&lt;--&gt;restrict</comment>
      <text xml:space="preserve" bytes="4984">{{c/title|wcrtomb|wcrtomb_s}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin | num=1}}
{{dcl | since=c95 |
size_t wcrtomb( char *s, wchar_t wc, mbstate_t *ps);
}}
{{dcl | since=c99 |
size_t wcrtomb( char *restrict s, wchar_t wc, mbstate_t *restrict ps);
}}
{{dcl rev end}}
{{dcl | num=2 | since=c11 |
errno_t wcrtomb_s(size_t *restrict retval, char *restrict s, rsize_t ssz,
                  wchar_t wc, mbstate_t *restrict ps);
}}
{{dcl end}}
Converts a wide character to its narrow multibyte representation.

@1@ If {{tt|s}} is not a null pointer, the function determines the number of bytes necessary to store the multibyte character representation of {{tt|wc}} (including any shift sequences), and stores the multibyte character representation in the character array whose first element is pointed to by {{tt|s}}. At most {{c|MB_CUR_MAX}} bytes can be written by this function.
@@ If {{tt|s}} is a null pointer, the call is equivalent to {{c|wcrtomb(buf, L'\0', ps)}} for some internal buffer {{tt|buf}}.
@@ If wc is the null wide character {{c|L'\0'}}, a null byte is stored, preceded by any shift sequence necessary to restore the initial shift state and the conversion state parameter {{c|*ps}} is updated to represent the initial shift state.
@2@ Same as {{v|1}}, except that
@@ if {{tt|s}} is a null pointer, the call is equivalent to {{c|wcrtomb_s(&amp;retval, buf, sizeof buf, L'\0', ps)}} with internal variables {{tt|retval}} and {{tt|buf}} (whose size is greater than {{lc|MB_CUR_MAX}})
@@ the result is returned in the out-parameter {{tt|retval}}
@@ the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|retval}} or {{tt|ps}} is a null pointer.
:* {{tt|ssz}} is zero or greater than {{lc|RSIZE_MAX}} (unless {{tt|s}} is null)
:* {{tt|ssz}} is less than the number of bytes that would be written (unless {{tt|s}} is null)
:* {{tt|s}} is a null pointer but {{tt|ssz}} is not zero 
:As all bounds-checked functions, {{tt|wcrtomb_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | s | pointer to narrow character array where the multibyte character will be stored}}
{{par | wc | the wide character to convert}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par | ssz | max number of bytes to write (the size of the buffer {{tt|s}}) }}
{{par | retval | pointer to an out-parameter where the result (number of bytes in the multibyte string including any shift sequences) will be stored}}
{{par end}}

===Return value===
@1@ On success, returns the number of bytes (including any shift sequences) written to the character array whose first element is pointed to by {{tt|s}}. 
@@ On failure (if {{c|wc}} is not a valid wide character), returns {{c|(size_t)-1}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.
@2@ Returns zero on success and non-zero on failure, in which case, {{c|s[0]}} is set to {{c|'\0'}} (unless {{tt|s}} is null or {{tt|ssz}} is zero or greater than {{lc|RSIZE_MAX}}) and {{c|*retval}} is set to {{c|(size_t)-1}} (unless {{tt|retval}} is null)

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;string.h&gt;
#include &lt;wchar.h&gt;
#include &lt;stdlib.h&gt;

void print_wide(const wchar_t* wstr)
{
    mbstate_t state;
    memset(&amp;state, 0, sizeof state);
    char mb[MB_CUR_MAX+1];
    for(;*wstr; ++wstr) {
        int ret = wcrtomb(mb, *wstr, &amp;state);
        mb[ret] = '\0';
        printf(&quot;multibyte char %s is %d bytes\n&quot;, mb, ret);
    }
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    print_wide(L&quot;z\u00df\u6c34\U0001F34C&quot;); // or L&quot;zß水🍌&quot;
}
 | output=
multibyte char z is 1 bytes
multibyte char ß is 2 bytes
multibyte char 水 is 3 bytes
multibyte char 🍌 is 4 bytes
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.6.3.3  | title=The wcrtomb function | p=444}}
{{ref std | section=K.3.9.3.1.1 | title=The wcrtomb_s function | p=647-648}}
{{ref std c99}}
{{ref std | section=7.24.6.3.3  | title=The wcrtomb function | p=390}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc wctomb}}
{{dsc inc | c/string/multibyte/dsc mbrtowc}}
{{dsc see cpp | cpp/string/multibyte/wcrtomb}}
{{dsc end}}

[[ar:c/string/multibyte/wcrtomb]]
[[cs:c/string/multibyte/wcrtomb]]
[[de:c/string/multibyte/wcrtomb]]
[[es:c/string/multibyte/wcrtomb]]
[[fr:c/string/multibyte/wcrtomb]]
[[it:c/string/multibyte/wcrtomb]]
[[ja:c/string/multibyte/wcrtomb]]
[[ko:c/string/multibyte/wcrtomb]]
[[pl:c/string/multibyte/wcrtomb]]
[[pt:c/string/multibyte/wcrtomb]]
[[ru:c/string/multibyte/wcrtomb]]
[[tr:c/string/multibyte/wcrtomb]]
[[zh:c/string/multibyte/wcrtomb]]</text>
      <sha1>92tnlmq041g7il4gx6mtlv874q431ug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/wcsrtombs</title>
    <ns>0</ns>
    <id>6105</id>
    <revision>
      <id>90677</id>
      <parentid>90674</parentid>
      <timestamp>2017-03-07T12:30:04Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>completed C95 prototype with a semicolon</comment>
      <text xml:space="preserve" bytes="6476">{{c/title|wcsrtombs|wcsrtombs_s}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin | num=1}}
{{dcl |since=c95 |
size_t wcsrtombs( char *dst, const wchar_t **src, size_t len, mbstate_t* ps );
}}
{{dcl |since=c99 |
size_t wcsrtombs( char *restrict dst, const wchar_t **restrict src, size_t len,
                  mbstate_t *restrict ps);
}}
{{dcl rev end}}
{{dcl | since=c11 | num=2 |
errno_t wcsrtombs_s( size_t *restrict retval, char *restrict dst, rsize_t dstsz,
                     const wchar_t **restrict src, rsize_t len,
                     mbstate_t *restrict ps);
}}
{{dcl end}}

@1@ Converts a sequence of wide characters from the array whose first element is pointed to by {{c|*src}} to its narrow multibyte representation that begins in the conversion state described by {{c|*ps}}. If {{tt|dst}} is not null, converted characters are stored in the successive elements of the char array pointed to by {{tt|dst}}. No more than {{tt|len}} bytes are written to the destination array.
@@ Each character is converted as if by a call to {{lc|wcrtomb}}. The conversion stops if:
@@* The null character {{c|L'\0'}} was converted and stored. The bytes stored in this case are the unshift sequence (if necessary) followed by {{c|'\0'}}, {{c|*src}} is set to {{lc|NULL}} and {{c|*ps}} represents the initial shift state.
@@* A {{c|wchar_t}} was found that does not correspond to a valid character in the current C locale. {{c|*src}} is set to point at the first unconverted wide character.
@@* the next multibyte character to be stored would exceed {{tt|len}}. {{c|*src}} is set to point at the first unconverted wide character. This condition is not checked if {{c|1=dst==NULL}}.
@2@ Same as {{v|1}}, except that
@@* the function returns its result as an out-parameter {{tt|retval}}
@@* if the conversion stops without writing a null character, the function will store {{c|'\0'}} in the next byte in {{tt|dst}}, which may be {{tt|dst[len]}} or {{tt|dst[dstsz]]}}, whichever comes first (meaning up to len+1/dstsz+1 total bytes may be written). In this case, there may be no unshift sequence written before the terminating null.
@@* the function clobbers the destination array from the terminating null and until {{tt|dstsz}}
@@* If {{tt|src}} and {{tt|dst}} overlap, the behavior is unspecified.
@@* the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|retval}}, {{tt|ps}}, {{tt|src}}, or {{c|*src}} is a null pointer
:* {{tt|dstsz}} or {{tt|len}} is greater than {{lc|RSIZE_MAX}} (unless {{tt|dst}} is null)
:* {{tt|dstsz}} is not zero (unless {{tt|dst}} is null)
:* {{tt|len}} is greater than {{tt|dstsz}} and the conversion does not encounter null or encoding error in the {{tt|src}} array by the time {{tt|dstsz}} is reached (unless {{tt|dst}} is null)
:As with all bounds-checked functions, {{tt|wcsrtombs_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to narrow character array where the multibyte characters will be stored}}
{{par | src | pointer to pointer to the first element of a null-terminated wide string}}
{{par | len | number of bytes available in the array pointed to by dst}}
{{par | ps | pointer to the conversion state object}}
{{par | dstsz | max number of bytes that will be written (size of the {{tt|dst}} array)}}
{{par | retval | pointer to a size_t object where the result will be stored}}
{{par end}}

===Return value===
@1@ On success, returns the number of bytes (including any shift sequences, but excluding the terminating {{c|'\0'}}) written to the character array whose first element is pointed to by {{tt|dst}}. If {{c|1=dst==NULL}}, returns the number of bytes that would have been written. On conversion error (if invalid wide character was encountered), returns {{c|(size_t)-1}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.
@2@ Returns zero on success (in which case the number of bytes excluding terminating zero that were, or would be written to {{tt|dst}}, is stored in {{c|*retval}}), non-zero on error. In case of a runtime constraint violation, stores {{c|(size_t)-1}} in {{c|*retval}} (unless {{tt|retval}} is null) and sets {{c|dst[0]}} to {{c|'\0'}} (unless {{tt|dst}} is null or {{tt|dstmax}} is zero or greater than {{lc|RSIZE_MAX}})


===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
#include &lt;string.h&gt;
#include &lt;wchar.h&gt;

void print_wide(const wchar_t* wstr)
{
    mbstate_t state;
    memset(&amp;state, 0, sizeof state);
    int len = 1 + wcsrtombs(NULL, &amp;wstr, 0, &amp;state);
    char mbstr[len];
    wcsrtombs(mbstr, &amp;wstr, len, &amp;state);
    printf(&quot;Multibyte string: %s\n&quot;, mbstr);
    printf(&quot;Length, including '\\0': %d\n&quot;, len);
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    print_wide(L&quot;z\u00df\u6c34\U0001f34c&quot;); // or L&quot;zß水🍌&quot;
}
 | output=
Multibyte string: zß水🍌
Length, including '\0': 11
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.6.4.2  | title=The wcsrtombs function | p=446}}
{{ref std | section=K.3.9.3.2.2 | title=The wcsrtombs_s function | p=649-651}}
{{ref std c99}}
{{ref std | section=7.24.6.4.2  | title=The wcsrtombs function | p=392}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc wcstombs}}
{{dsc inc | c/string/multibyte/dsc wcrtomb}}
{{dsc inc | c/string/multibyte/dsc mbsrtowcs}}
{{dsc see cpp | cpp/string/multibyte/wcsrtombs}}
{{dsc end}}

[[de:c/string/multibyte/wcsrtombs]]
[[es:c/string/multibyte/wcsrtombs]]
[[fr:c/string/multibyte/wcsrtombs]]
[[it:c/string/multibyte/wcsrtombs]]
[[ja:c/string/multibyte/wcsrtombs]]
[[pt:c/string/multibyte/wcsrtombs]]
[[ru:c/string/multibyte/wcsrtombs]]
[[zh:c/string/multibyte/wcsrtombs]]

[[ar:c/string/multibyte/wcsrtombs]]
[[cs:c/string/multibyte/wcsrtombs]]
[[de:c/string/multibyte/wcsrtombs]]
[[es:c/string/multibyte/wcsrtombs]]
[[fr:c/string/multibyte/wcsrtombs]]
[[it:c/string/multibyte/wcsrtombs]]
[[ja:c/string/multibyte/wcsrtombs]]
[[ko:c/string/multibyte/wcsrtombs]]
[[pl:c/string/multibyte/wcsrtombs]]
[[pt:c/string/multibyte/wcsrtombs]]
[[ru:c/string/multibyte/wcsrtombs]]
[[tr:c/string/multibyte/wcsrtombs]]
[[zh:c/string/multibyte/wcsrtombs]]</text>
      <sha1>pj332j2f687xroj5cz2op5tztv4x5ip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/wcstombs</title>
    <ns>0</ns>
    <id>6104</id>
    <revision>
      <id>78814</id>
      <parentid>76774</parentid>
      <timestamp>2015-06-09T11:56:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="6873">{{c/title|wcstombs|wcstombs_s}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl rev begin | num=1}}
{{dcl | until=c99 |
size_t wcstombs( char          *dst, const wchar_t          *src, size_t len );
}}
{{dcl | since=c99 |
size_t wcstombs( char *restrict dst, const wchar_t *restrict src, size_t len );
}}
{{dcl rev end}}
{{dcl | since=c11 | num=2 | 
errno_t wcstombs_s( size_t *restrict retval, char *restrict dst, rsize_t dstsz,
                    const wchar_t *restrict src, rsize_t len );
}}
{{dcl end}}

@1@ Converts a sequence of wide characters from the array whose first element is pointed to by {{tt|src}} to its narrow multibyte representation that begins in the initial shift state. Converted characters are stored in the successive elements of the char array pointed to by {{tt|dst}}. No more than {{tt|len}} bytes are written to the destination array.
@@ Each character is converted as if by a call to {{lc|wctomb}}, except that the wctomb's conversion state is unaffected. The conversion stops if:
@@* The null character {{c|L'\0'}} was converted and stored. The bytes stored in this case are the unshift sequence (if necessary) followed by {{c|'\0'}},
@@* A {{c|wchar_t}} was found that does not correspond to a valid character in the current C locale.
@@* The next multibyte character to be stored would exceed {{tt|len}}.
@@If {{tt|src}} and {{tt|dst}} overlap, the behavior is unspecified.
@2@ Same as {{v|1}}, except that
@@* conversion is as-if by {{lc|wcrtomb}}, not {{lc|wctomb}}
@@* the function returns its result as an out-parameter {{tt|retval}}
@@* if the conversion stops without writing a null character, the function will store {{c|'\0'}} in the next byte in {{tt|dst}}, which may be {{tt|dst[len]}} or {{tt|dst[dstsz]]}}, whichever comes first (meaning up to len+1/dstsz+1 total bytes may be written). In this case, there may be no unshift sequence written before the terminating null.
@@* if {{tt|dst}} is a null pointer, the number of wide characters that would be produced is stored in {{c|*retval}}
@@* the function clobbers the destination array from the terminating null and until {{tt|dstsz}}
@@* If {{tt|src}} and {{tt|dst}} overlap, the behavior is unspecified.
@@* the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|retval}} or {{tt|src}} is a null pointer
:* {{tt|dstsz}} or {{tt|len}} is greater than {{lc|RSIZE_MAX}} (unless {{tt|dst}} is null)
:* {{tt|dstsz}} is not zero (unless {{tt|dst}} is null)
:* {{tt|len}} is greater than {{tt|dstsz}} and the conversion does not encounter null or encoding error in the {{tt|src}} array by the time {{tt|dstsz}} is reached (unless {{tt|dst}} is null)
:As all bounds-checked functions, {{tt|wcstombs_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|stdlib.h}}.

===Notes===
In most implementations, {{tt|wcstombs}} updates a global static object of type {{lc|mbstate_t}} as it processes through the string, and cannot be called simultaneously by two threads, {{lc|wcsrtombs}} or {{tt|wcstombs_s}} should be used in such cases.

POSIX specifies a common extension: if {{tt|dst}} is a null pointer, this function returns the number of bytes that would be written to {{tt|dst}}, if converted. Similar behavior is standard for {{lc|wcsrtombs}} and {{tt|wcstombs_s}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to narrow character array where the multibyte character will be stored}}
{{par | src | pointer to the first element of a null-terminated wide string to convert}}
{{par | len | number of bytes available in the array pointed to by dst}}
{{par | dstsz | max number of bytes that will be written (size of the {{tt|dst}} array)}}
{{par | retval | pointer to a size_t object where the result will be stored}}
{{par end}}

===Return value===
@1@ On success, returns the number of bytes (including any shift sequences, but excluding the terminating {{c|'\0'}}) written to the character array whose first element is pointed to by {{tt|dst}}. On conversion error (if invalid wide character was encountered), returns {{c|(size_t)-1}}.
@2@ Returns zero on success (in which case the number of bytes excluding terminating zero that were, or would be written to {{tt|dst}}, is stored in {{c|*retval}}), non-zero on error. In case of a runtime constraint violation, stores {{c|(size_t)-1}} in {{c|*retval}} (unless {{tt|retval}} is null) and sets {{c|dst[0]}} to {{c|'\0'}} (unless {{tt|dst}} is null or {{tt|dstmax}} is zero or greater than {{lc|RSIZE_MAX}})

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    // 4 wide characters
    const wchar_t src[] = L&quot;z\u00df\u6c34\U0001f34c&quot;;
    // they occupy 10 bytes in UTF-8
    char dst[11];

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;wide-character string: '%ls'\n&quot;,src);
    for (size_t ndx=0; ndx &lt; sizeof src/sizeof src[0]; ++ndx)
        printf(&quot;   src[%2zu] = %#8x\n&quot;, ndx, src[ndx]);
    
    int rtn_val = wcstombs(dst, src, sizeof dst);
    printf(&quot;rtn_val = %d\n&quot;, rtn_val);
    if (rtn_val &gt; 0)
        printf(&quot;multibyte string:  '%s'\n&quot;,dst);
    for (size_t ndx=0; ndx&lt;sizeof dst; ++ndx)
        printf(&quot;   dst[%2zu] = %#2x\n&quot;, ndx, (unsigned char)dst[ndx]);
}
 | output=
wide-character string: 'zß水🍌'
   src[ 0] =     0x7a
   src[ 1] =     0xdf
   src[ 2] =   0x6c34
   src[ 3] =  0x1f34c
   src[ 4] =        0
rtn_val = 10
multibyte string:  'zß水🍌'
   dst[ 0] = 0x7a
   dst[ 1] = 0xc3
   dst[ 2] = 0x9f
   dst[ 3] = 0xe6
   dst[ 4] = 0xb0
   dst[ 5] = 0xb4
   dst[ 6] = 0xf0
   dst[ 7] = 0x9f
   dst[ 8] = 0x8d
   dst[ 9] = 0x8c
   dst[10] =  0

}}

===References===
{{ref std c11}}
{{ref std | section=7.22.8.2  | title=The wcstombs function | p=360}}
{{ref std | section=K.3.6.5.2 | title=The wcstombs_s function | p=612-614}}
{{ref std c99}}
{{ref std | section=7.20.8.2  | title=The wcstombs function | p=324}}
{{ref std c89}}
{{ref std | section=4.10.8.2  | title=The wcstombs function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc wcsrtombs}}
{{dsc inc | c/string/multibyte/dsc mbstowcs}}
{{dsc see cpp | cpp/string/multibyte/wcstombs}}
{{dsc end}}

[[ar:c/string/multibyte/wcstombs]]
[[cs:c/string/multibyte/wcstombs]]
[[de:c/string/multibyte/wcstombs]]
[[es:c/string/multibyte/wcstombs]]
[[fr:c/string/multibyte/wcstombs]]
[[it:c/string/multibyte/wcstombs]]
[[ja:c/string/multibyte/wcstombs]]
[[ko:c/string/multibyte/wcstombs]]
[[pl:c/string/multibyte/wcstombs]]
[[pt:c/string/multibyte/wcstombs]]
[[ru:c/string/multibyte/wcstombs]]
[[tr:c/string/multibyte/wcstombs]]
[[zh:c/string/multibyte/wcstombs]]</text>
      <sha1>mmqwtrbss8im8kisbkbl54yytzs8la5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/wctob</title>
    <ns>0</ns>
    <id>6110</id>
    <revision>
      <id>76791</id>
      <parentid>76440</parentid>
      <timestamp>2015-03-01T16:05:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2328">{{c/title|wctob}}
{{c/string/multibyte/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
int wctob( wint_t c );
}}

Narrows a wide character {{tt|c}} if its multibyte character equivalent in the initial shift state is a single byte.

This is typically possible for the characters from the ASCII character set, since most multibyte encodings (such as UTF-8) use single bytes to encode those characters.

===Parameters===
{{par begin}}
{{par | c | wide character to narrow}}
{{par end}}

===Return value===

{{lc|EOF}} if {{tt|c}} does not represent a multibyte character with length {{c|1}} in initial shift state.

otherwise, the single-byte representation of {{tt|c}} as {{c|unsigned char}} converted to {{c|int}}

===Example===
{{example
 | 
 | code=
#include &lt;locale.h&gt;
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;
#include &lt;assert.h&gt;

void try_narrowing(wchar_t c)
{
    int cn = wctob(c);
    if(cn != EOF)
        printf(&quot;%#x narrowed to %#x\n&quot;, c, cn);
    else
        printf(&quot;%#x could not be narrowed\n&quot;, c);
}

int main(void)
{
    char* utf_locale_present = setlocale(LC_ALL, &quot;th_TH.utf8&quot;);
    assert(utf_locale_present);
    puts(&quot;In Thai UTF-8 locale:&quot;);
    try_narrowing(L'a');
    try_narrowing(L'๛');

    char* tis_locale_present = setlocale(LC_ALL, &quot;th_TH.tis620&quot;);
    assert(tis_locale_present);
    puts(&quot;In Thai TIS-620 locale:&quot;);
    try_narrowing(L'a');
    try_narrowing(L'๛');
}
 |p=true
 | output=
In Thai UTF-8 locale:
0x61 narrowed to 0x61
0xe5b could not be narrowed
In Thai TIS-620 locale:
0x61 narrowed to 0x61
0xe5b narrowed to 0xfb
}}
===References===
{{ref std c11}}
{{ref std | section=7.29.6.1.2  | title=The wctob function | p=441}}
{{ref std c99}}
{{ref std | section=7.24.6.1.2  | title=The wctob function | p=387}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc btowc}}
{{dsc see cpp | cpp/string/multibyte/wctob}}
{{dsc end}}

[[ar:c/string/multibyte/wctob]]
[[cs:c/string/multibyte/wctob]]
[[de:c/string/multibyte/wctob]]
[[es:c/string/multibyte/wctob]]
[[fr:c/string/multibyte/wctob]]
[[it:c/string/multibyte/wctob]]
[[ja:c/string/multibyte/wctob]]
[[ko:c/string/multibyte/wctob]]
[[pl:c/string/multibyte/wctob]]
[[pt:c/string/multibyte/wctob]]
[[ru:c/string/multibyte/wctob]]
[[tr:c/string/multibyte/wctob]]
[[zh:c/string/multibyte/wctob]]</text>
      <sha1>t7kxs7gbmjpyy7tb6rkgl7t6b1a7lpb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/multibyte/wctomb</title>
    <ns>0</ns>
    <id>6114</id>
    <revision>
      <id>78812</id>
      <parentid>76775</parentid>
      <timestamp>2015-06-09T11:50:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="5183">{{c/title|wctomb|wctomb_s}}
{{c/string/multibyte/navbar}}
{{dcl begin}}
{{dcl header | stdlib.h}}
{{dcl | num=1 |
int wctomb( char *s, wchar_t wc );
}}
{{dcl | num=2 | since=c11 |
errno_t wctomb_s(int *restrict status, char *restrict s, rsize_t ssz, wchar_t wc);
}}
{{dcl end}}

@1@ Converts a wide character {{tt|wc}} to multibyte encoding and stores it (including any shift sequences) in the char array whose first element is pointed to by {{tt|s}}. No more than {{c|MB_CUR_MAX}} characters are stored.
@@ If {{tt|wc}} is the null character, the null byte is written to {{tt|s}}, preceded by any shift sequences necessary to restore the initial shift state.
@@ If {{tt|s}} is a null pointer, this function resets the global conversion state and determines whether shift sequences are used.
@2@ Same as {{v|1}}, except that the result is returned in the out-parameter {{tt|status}} and the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|ssz}} is less than the number of bytes that would be written (unless {{tt|s}} is null)
:* {{tt|ssz}} is greater than {{lc|RSIZE_MAX}} (unless {{tt|s}} is null)
:* {{tt|s}} is a null pointer but {{tt|ssz}} is not zero 
:As all bounds-checked functions, {{tt|wctomb_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|stdlib.h}}.

===Notes===
Each call to {{tt|wctomb}} updates the internal global conversion state (a static object of type {{lc|mbstate_t}}, only known to this function). If the multibyte encoding uses shift states, this function is not reentrant. In any case, multiple threads should not call {{tt|wctomb}} without synchronization: {{lc|wcrtomb}} or {{tt|wctomb_s}} may be used instead.

Unlike most bounds-checked functions, {{tt|wctomb_s}} does not null-terminate its output, because it is designed to be used in loops that process strings character-by-character.

===Parameters===
{{par begin}}
{{par | s | pointer to the character array for output}}
{{par | wc | wide character to convert}}
{{par | ssz | maximum number of bytes to write to {{tt|s}} (size of the array {{tt|s}}) }}
{{par | status | pointer to an out-parameter where the result (length of the multibyte sequence or the shift sequence status) will be stored}}
{{par end}}

===Return value===
@1@ If {{tt|s}} is not a null pointer, returns the number of bytes that are contained in the multibyte representation of {{tt|wc}} or {{c|-1}} if {{tt|wc}} is not a valid character.
@@ If {{tt|s}} is a null pointer, resets its internal conversion state to represent the initial shift state and returns {{c|0}} if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).
@2@ zero on success, in which case the multibyte representation of {{tt|wc}} is stored in {{tt|s}} and its length is stored in {{c|*status}}, or, if {{tt|s}} is null, the shift sequence status is stored in {{tt|status}}). Non-zero on encoding error or runtime constraint violation, in which case {{c|(size_t)-1}} is stored in {{c|*status}}. The value stored in {{c|*status}} never exceeds {{lc|MB_CUR_MAX}}

===Example===
{{example
 | 
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;locale.h&gt;

void demo(wchar_t wc)
{
    printf(&quot;State-dependent encoding?   %d\n&quot;, wctomb(NULL, wc));

    char mb[MB_CUR_MAX];
    int len = wctomb(mb,wc);
    printf(&quot;wide char '%lc' -&gt; multibyte char '&quot;, wc);
    for (int idx = 0; idx &lt; len; ++idx)
        printf(&quot;%#2x &quot;, (unsigned char)mb[idx]);
    printf(&quot;'\n&quot;);
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;MB_CUR_MAX = %zu\n&quot;, MB_CUR_MAX);
    demo(L'A');
    demo(L'\u00df');
    demo(L'\U0001d10b');
}
 |p=true
 | output=
MB_CUR_MAX = 6
State-dependent encoding?   0
wide char 'A' -&gt; multibyte char '0x41 '
State-dependent encoding?   0
wide char 'ß' -&gt; multibyte char '0xc3 0x9f '
State-dependent encoding?   0
wide char '𝄋' -&gt; multibyte char '0xf0 0x9d 0x84 0x8b '
}}

===References===
{{ref std c11}}
{{ref std | section=7.22.7.3  | title=The wctomb function | p=358-359}}
{{ref std | section=K.3.6.4.1 | title=The wctomb_s function | p=610-611}}
{{ref std c99}}
{{ref std | section=7.20.7.3  | title=The wctomb function | p=322-323}}
{{ref std c89}}
{{ref std | section=4.10.7.3  | title=The wctomb function}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/multibyte/dsc mbtowc}}
{{dsc inc | c/string/multibyte/dsc wcrtomb}}
{{dsc see cpp | cpp/string/multibyte/wctomb}}
{{dsc end}}

[[ar:c/string/multibyte/wctomb]]
[[cs:c/string/multibyte/wctomb]]
[[de:c/string/multibyte/wctomb]]
[[es:c/string/multibyte/wctomb]]
[[fr:c/string/multibyte/wctomb]]
[[it:c/string/multibyte/wctomb]]
[[ja:c/string/multibyte/wctomb]]
[[ko:c/string/multibyte/wctomb]]
[[pl:c/string/multibyte/wctomb]]
[[pt:c/string/multibyte/wctomb]]
[[ru:c/string/multibyte/wctomb]]
[[tr:c/string/multibyte/wctomb]]
[[zh:c/string/multibyte/wctomb]]</text>
      <sha1>52to2l2ksd6juk10j0bbaipv7r8j8sx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide</title>
    <ns>0</ns>
    <id>5759</id>
    <revision>
      <id>88592</id>
      <parentid>86087</parentid>
      <timestamp>2016-11-29T11:44:51Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>wctype.h declares three types, but wchar_t is not one of them. See 7.29.1/2.</comment>
      <text xml:space="preserve" bytes="5101">{{title|Null-terminated wide strings}}
{{c/string/wide/navbar}}

A null-terminated wide string is a sequence of valid wide characters, ending with a null-character.

===Functions===
{{dsc begin}}
{{dsc h2 | Character classification}}
{{dsc header | wctype.h}}
{{dsc inc | c/string/wide/dsc iswalnum}}
{{dsc inc | c/string/wide/dsc iswalpha}}
{{dsc inc | c/string/wide/dsc iswlower}}
{{dsc inc | c/string/wide/dsc iswupper}}
{{dsc inc | c/string/wide/dsc iswdigit}}
{{dsc inc | c/string/wide/dsc iswxdigit}}
{{dsc inc | c/string/wide/dsc iswcntrl}}
{{dsc inc | c/string/wide/dsc iswgraph}}
{{dsc inc | c/string/wide/dsc iswspace}}
{{dsc inc | c/string/wide/dsc iswblank}}
{{dsc inc | c/string/wide/dsc iswprint}}
{{dsc inc | c/string/wide/dsc iswpunct}}
{{dsc inc | c/string/wide/dsc iswctype}}
{{dsc inc | c/string/wide/dsc wctype}}
{{dsc h2 | Character manipulation}}
{{dsc header | wctype.h}}
{{dsc inc | c/string/wide/dsc towlower}}
{{dsc inc | c/string/wide/dsc towupper}}
{{dsc inc | c/string/wide/dsc towctrans}}
{{dsc inc | c/string/wide/dsc wctrans}}
{{dsc end}}
{{c/string/character classes}}
{{dsc begin}}
{{dsc h2 | Conversions to numeric formats}}
{{dsc header | wchar.h}}
{{dsc inc | c/string/wide/dsc wcstol}}
{{dsc inc | c/string/wide/dsc wcstoul}}
{{dsc inc | c/string/wide/dsc wcstof}}
{{dsc header | inttypes.h}}
{{dsc inc | c/string/wide/dsc wcstoimax}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | String manipulation}}
{{dsc header | wchar.h}}
{{dsc inc | c/string/wide/dsc wcscpy}}
{{dsc inc | c/string/wide/dsc wcsncpy}}
{{dsc inc | c/string/wide/dsc wcscat}}
{{dsc inc | c/string/wide/dsc wcsncat}}
{{dsc inc | c/string/wide/dsc wcsxfrm}}

{{dsc h2 | String examination}}
{{dsc header | wchar.h}}
{{dsc inc | c/string/wide/dsc wcslen}}
{{dsc inc | c/string/wide/dsc wcscmp}}
{{dsc inc | c/string/wide/dsc wcsncmp}}
{{dsc inc | c/string/wide/dsc wcscoll}}
{{dsc inc | c/string/wide/dsc wcschr}}
{{dsc inc | c/string/wide/dsc wcsrchr}}
{{dsc inc | c/string/wide/dsc wcsspn}}
{{dsc inc | c/string/wide/dsc wcscspn}}
{{dsc inc | c/string/wide/dsc wcspbrk}}
{{dsc inc | c/string/wide/dsc wcsstr}}
{{dsc inc | c/string/wide/dsc wcstok}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Wide character array manipulation}}
{{dsc header | wchar.h}}
{{dsc inc | c/string/wide/dsc wmemcpy}}
{{dsc inc | c/string/wide/dsc wmemmove}}
{{dsc inc | c/string/wide/dsc wmemcmp}}
{{dsc inc | c/string/wide/dsc wmemchr}}
{{dsc inc | c/string/wide/dsc wmemset}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | wchar.h}}
{{dsc | {{tt|wchar_t}} | integer type that can hold any valid wide character (C++ keyword)}}
{{dsc header | wctype.h}}
{{dsc | {{tt|wint_t}}{{mark c95}} | integer type that can hold any valid wide character and at least one more value }}
{{dsc | {{tt|wctrans_t}}{{mark c95}} | scalar type that holds locale-specific character mapping }}
{{dsc | {{tt|wctype_t}}{{mark c95}} | scalar type that holds locale-specific character classification }}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc header | wchar.h}}
{{dsc macro const | WEOF | notes={{mark c95}} | nolink=true | a non-character value of type wint_t used to indicate errors}}
{{dsc macro const | WCHAR_MIN | notes={{mark c95}}|  nolink=true | the smallest valid value of wchar_t }}
{{dsc macro const | WCHAR_MAX | notes={{mark c95}}|  nolink=true | the largest valid value of wchar_t }}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.19    | title=Common definitions &lt;stddef.h&gt; | p=288}}
{{ref std | section=7.29    | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=402-446}}
{{ref std | section=7.30    | title=Wide character classification and mapping utilities &lt;wctype.h&gt; | p=447-454}}
{{ref std | section=7.31.16 | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=456}}
{{ref std | section=7.31.17 | title=Wide character classification and mapping utilities &lt;wctype.h&gt; | p=457}}
{{ref std | section=K.3.3   | title=Common definitions &lt;stddef.h&gt; | p=585}}
{{ref std | section=K.3.9   | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=627-651}}
{{ref std c99}}
{{ref std | section=7.17    | title=Common definitions &lt;stddef.h&gt; | p=254}}
{{ref std | section=7.24    | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=348-392}}
{{ref std | section=7.25    | title=Wide character classification and mapping utilities &lt;wctype.h&gt; | p=393-400}}
{{ref std | section=7.26.12 | title=Extended multibyte and wide character utilities &lt;wchar.h&gt; | p=402}}
{{ref std | section=7.26.13 | title=Wide character classification and mapping utilities &lt;wctype.h&gt; | p=402}}
{{ref std c89}}
{{ref std | section=4.1.5   | title=Common definitions &lt;stddef.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/string/wide | Null-terminated wide strings}}
{{dsc end}}

[[ar:c/string/wide]]
[[cs:c/string/wide]]
[[de:c/string/wide]]
[[es:c/string/wide]]
[[fr:c/string/wide]]
[[it:c/string/wide]]
[[ja:c/string/wide]]
[[ko:c/string/wide]]
[[pl:c/string/wide]]
[[pt:c/string/wide]]
[[ru:c/string/wide]]
[[tr:c/string/wide]]
[[zh:c/string/wide]]</text>
      <sha1>lwluyt486iv6xw1kk2x8hgrd3w5sz9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswalnum</title>
    <ns>0</ns>
    <id>6073</id>
    <revision>
      <id>76818</id>
      <parentid>76476</parentid>
      <timestamp>2015-03-03T12:20:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1818">{{c/title|iswalnum}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h | notes={{mark since c95}} |
int iswalnum( wint_t ch );
}}

Checks if the given wide character is an alphanumeric character, i.e. either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}) or any alphanumeric character specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a alphanumeric character, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u13ad'; // the Cherokee letter HA ('Ꭽ')
    printf(&quot;in the default locale, iswalnum(%#x) = %d\n&quot;, c, !!iswalnum(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswalnum(%#x) = %d\n&quot;, c, !!iswalnum(c));
}
|output=
in the default locale, iswalnum(0x13ad) = 0
in Unicode locale, iswalnum(0x13ad) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.1 | title=The iswalnum function | p=448}}
{{ref std c99}}
{{ref std | section=7.25.2.1.1 | title=The iswalnum function | p=394}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isalnum}}
{{dsc see cpp | cpp/string/wide/iswalnum}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswalnum]]
[[cs:c/string/wide/iswalnum]]
[[de:c/string/wide/iswalnum]]
[[es:c/string/wide/iswalnum]]
[[fr:c/string/wide/iswalnum]]
[[it:c/string/wide/iswalnum]]
[[ja:c/string/wide/iswalnum]]
[[ko:c/string/wide/iswalnum]]
[[pl:c/string/wide/iswalnum]]
[[pt:c/string/wide/iswalnum]]
[[ru:c/string/wide/iswalnum]]
[[tr:c/string/wide/iswalnum]]
[[zh:c/string/wide/iswalnum]]</text>
      <sha1>pyynn7sapjpwbf4i8qkfgcl99s25zs0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswalpha</title>
    <ns>0</ns>
    <id>6072</id>
    <revision>
      <id>76819</id>
      <parentid>76477</parentid>
      <timestamp>2015-03-03T12:24:46Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1782">{{c/title|iswalpha}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswalpha( wint_t ch );
}}

Checks if the given wide character is an alphabetic character, i.e. either an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}) or any alphabetic character specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a alphabetic character, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u0b83'; // Tamil sign Visarga ('ஃ')
    printf(&quot;in the default locale, iswalpha(%#x) = %d\n&quot;, c, !!iswalpha(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswalpha(%#x) = %d\n&quot;, c, !!iswalpha(c));
}
|output=
in the default locale, iswalpha(0xb83) = 0
in Unicode locale, iswalpha(0xb83) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.2 | title=The iswalpha function | p=448-449}}
{{ref std c99}}
{{ref std | section=7.25.2.1.2 | title=The iswalpha function | p=394-395}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isalpha}}
{{dsc see cpp | cpp/string/wide/iswalpha}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswalpha]]
[[cs:c/string/wide/iswalpha]]
[[de:c/string/wide/iswalpha]]
[[es:c/string/wide/iswalpha]]
[[fr:c/string/wide/iswalpha]]
[[it:c/string/wide/iswalpha]]
[[ja:c/string/wide/iswalpha]]
[[ko:c/string/wide/iswalpha]]
[[pl:c/string/wide/iswalpha]]
[[pt:c/string/wide/iswalpha]]
[[ru:c/string/wide/iswalpha]]
[[tr:c/string/wide/iswalpha]]
[[zh:c/string/wide/iswalpha]]</text>
      <sha1>rgle102tu7k03ga4lt9dm8bjoskr13y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswblank</title>
    <ns>0</ns>
    <id>6065</id>
    <revision>
      <id>76820</id>
      <parentid>76485</parentid>
      <timestamp>2015-03-03T12:31:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1779">{{c/title|iswblank}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h | since=c99 |
int iswblank( wint_t ch );
}}

Checks if the given wide character is classified as blank character (that is, a whitespace character used to separate words in a sentence) by the current C locale. In the default C locale, only space ({{tt|0x20}}) and horizontal tab ({{tt|0x09}}) are blank characters.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a blank character, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u3000'; // Ideographic space ('　')
    printf(&quot;in the default locale, iswblank(%#x) = %d\n&quot;, c, !!iswblank(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswblank(%#x) = %d\n&quot;, c, !!iswblank(c));
}
|output=
in the default locale, iswblank(0x3000) = 0
in Unicode locale, iswblank(0x3000) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.3 | title=The iswblank function | p=449}}
{{ref std c99}}
{{ref std | section=7.25.2.1.3 | title=The iswblank function | p=395}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isblank}}
{{dsc see cpp | cpp/string/wide/iswblank}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswblank]]
[[cs:c/string/wide/iswblank]]
[[de:c/string/wide/iswblank]]
[[es:c/string/wide/iswblank]]
[[fr:c/string/wide/iswblank]]
[[it:c/string/wide/iswblank]]
[[ja:c/string/wide/iswblank]]
[[ko:c/string/wide/iswblank]]
[[pl:c/string/wide/iswblank]]
[[pt:c/string/wide/iswblank]]
[[ru:c/string/wide/iswblank]]
[[tr:c/string/wide/iswblank]]
[[zh:c/string/wide/iswblank]]</text>
      <sha1>7tnighv0yhh332ncf2hjpfjbmq4hjm5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswcntrl</title>
    <ns>0</ns>
    <id>6068</id>
    <revision>
      <id>76822</id>
      <parentid>76821</parentid>
      <timestamp>2015-03-03T12:35:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corrected a ref</comment>
      <text xml:space="preserve" bytes="1700">{{c/title|iswcntrl}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswcntrl( wint_t ch );
}}

Checks if the given wide character is a control character, i.e. codes {{tt|0x00-0x1F}} and {{tt|0x7F}} and any control characters specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a control character, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u2028'; // the Unicode character &quot;line separator&quot;
    printf(&quot;in the default locale, iswcntrl(%#x) = %d\n&quot;, c, !!iswcntrl(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswcntrl(%#x) = %d\n&quot;, c, !!iswcntrl(c));
}
|output=
in the default locale, iswcntrl(0x2028) = 0
in Unicode locale, iswcntrl(0x2028) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.4 | title=The iswcntrl function | p=449}}
{{ref std c99}}
{{ref std | section=7.25.2.1.4 | title=The iswcntrl function | p=395}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc iscntrl}}
{{dsc see cpp | cpp/string/wide/iswcntrl}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswcntrl]]
[[cs:c/string/wide/iswcntrl]]
[[de:c/string/wide/iswcntrl]]
[[es:c/string/wide/iswcntrl]]
[[fr:c/string/wide/iswcntrl]]
[[it:c/string/wide/iswcntrl]]
[[ja:c/string/wide/iswcntrl]]
[[ko:c/string/wide/iswcntrl]]
[[pl:c/string/wide/iswcntrl]]
[[pt:c/string/wide/iswcntrl]]
[[ru:c/string/wide/iswcntrl]]
[[tr:c/string/wide/iswcntrl]]
[[zh:c/string/wide/iswcntrl]]</text>
      <sha1>qsddho6jcsbhq1s7h5jrtjapetcekw4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswctype</title>
    <ns>0</ns>
    <id>6062</id>
    <revision>
      <id>76837</id>
      <parentid>76831</parentid>
      <timestamp>2015-03-03T14:39:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>finish renaming of ch to wc</comment>
      <text xml:space="preserve" bytes="1861">{{c/title|iswctype}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswctype( wint_t wc, wctype_t desc );
}}

Classifies the wide character {{tt|wc}} using the current C locale's LC_CTYPE category identified by {{tt|desc}}.

===Parameters===
{{par begin}}
{{par | wc | the wide character to classify}}
{{par | desc | the LC_CTYPE category, obtained from a call to {{lc|wctype}}}}
{{par end}}

===Return value===
Non-zero if the character {{tt|wc}} has the property identified by {{tt|desc}} in LC_CTYPE facet of the current C locale, zero otherwise.

===Example===
{{example|
|code=
#include &lt;locale.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;stdio.h&gt;
const char* classify(wchar_t wc, const char* cat)
{
    return iswctype(wc, wctype(cat)) ? &quot;true&quot; : &quot;false&quot;;
}
int main(void)
{
    setlocale(LC_ALL, &quot;ja_JP.UTF-8&quot;);
    puts(&quot;The character \u6c34 is...&quot;);
    const char* cats[] = {&quot;digit&quot;, &quot;alpha&quot;, &quot;space&quot;, &quot;cntrl&quot;, &quot;jkanji&quot;};
    for(int n = 0; n &lt; 5; ++n)
        printf(&quot;%s? %s\n&quot;, cats[n], classify(L'\u6c34', cats[n]));
}
|output=
The character 水 is...
digit? false
alpha? true
space? false
cntrl? false
jkanji? true
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.2.1 | title=The iswctype function | p=451-452}}
{{ref std c99}}
{{ref std | section=7.25.2.2.1 | title=The iswctype function | p=397-398}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wctype}}
{{dsc end}}

[[ar:c/string/wide/iswctype]]
[[cs:c/string/wide/iswctype]]
[[de:c/string/wide/iswctype]]
[[es:c/string/wide/iswctype]]
[[fr:c/string/wide/iswctype]]
[[it:c/string/wide/iswctype]]
[[ja:c/string/wide/iswctype]]
[[ko:c/string/wide/iswctype]]
[[pl:c/string/wide/iswctype]]
[[pt:c/string/wide/iswctype]]
[[ru:c/string/wide/iswctype]]
[[tr:c/string/wide/iswctype]]
[[zh:c/string/wide/iswctype]]</text>
      <sha1>9wuuxexdt8fphsbje32dzkjqkyllj9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswdigit</title>
    <ns>0</ns>
    <id>6070</id>
    <revision>
      <id>76823</id>
      <parentid>76482</parentid>
      <timestamp>2015-03-03T12:39:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2427">{{c/title|iswdigit}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswdigit( wint_t ch );
}}

Checks if the given wide character corresponds (if narrowed) to one of the ten decimal digit characters 0123456789.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is an numeric character, zero otherwise.

===Notes===
{{tt|iswdigit}} and {{lc|iswxdigit}} are the only standard wide character classification functions that are not affected by the currently installed C locale.

===Example===
{{example| Some locales offer additional character classes that detect non-ASCII digits
|code=
#include &lt;stdio.h&gt;
#include &lt;wctype.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

void test(wchar_t a3, wchar_t u3, wchar_t j3)
{
    printf(&quot;        '%lc' '%lc' '%lc'\n&quot;, a3, u3, j3);
    printf(&quot;iswdigit %d    %d   %d\n&quot;,
           !!iswdigit(a3), !!iswdigit(u3), !!iswdigit(j3));
    printf(&quot;jdigit:  %d    %d   %d\n&quot;, !!iswctype(a3, wctype(&quot;jdigit&quot;)),
          !!iswctype(u3, wctype(&quot;jdigit&quot;)),
          !!iswctype(j3, wctype(&quot;jdigit&quot;)));
}

int main(void)
{
    wchar_t a3 = L'3';  // the ASCII digit 3
    wchar_t u3 = L'三'; // the CJK numeral 3
    wchar_t j3 = L'３'; // the fullwidth digit 3

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    puts(&quot;In American locale:&quot;);
    test(a3, u3, j3);

    setlocale(LC_ALL, &quot;ja_JP.utf8&quot;);
    puts(&quot;\nIn Japanese locale:&quot;);
    test(a3, u3, j3);
}
|output=
In American locale:
        '3' '三' '３'
iswdigit 1    0   0
jdigit:  0    0   0

In Japanese locale:
        '3' '三' '３'
iswdigit 1    0   0
jdigit:  0    0   1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.5 | title=The iswdigit function | p=449}}
{{ref std c99}}
{{ref std | section=7.25.2.1.5 | title=The iswdigit function | p=395}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isdigit}}
{{dsc see cpp | cpp/string/wide/iswdigit}}
{{dsc end}}
{{c/string/character classes}}

[[ar:c/string/wide/iswdigit]]
[[cs:c/string/wide/iswdigit]]
[[de:c/string/wide/iswdigit]]
[[es:c/string/wide/iswdigit]]
[[fr:c/string/wide/iswdigit]]
[[it:c/string/wide/iswdigit]]
[[ja:c/string/wide/iswdigit]]
[[ko:c/string/wide/iswdigit]]
[[pl:c/string/wide/iswdigit]]
[[pt:c/string/wide/iswdigit]]
[[ru:c/string/wide/iswdigit]]
[[tr:c/string/wide/iswdigit]]
[[zh:c/string/wide/iswdigit]]</text>
      <sha1>o57vvs1kjpye0q0xzbcb1vw006lbgld</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswgraph</title>
    <ns>0</ns>
    <id>6067</id>
    <revision>
      <id>76824</id>
      <parentid>76487</parentid>
      <timestamp>2015-03-03T12:43:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1959">{{c/title|iswgraph}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswgraph( wint_t ch );
}}

Checks if the given wide character has a graphical representation, i.e. it is either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}), a punctuation character({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}}) or any graphical character specific to the current C locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character has a graphical representation character, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u2602'; // the Unicode character Umbrella ('☂')
    printf(&quot;in the default locale, iswgraph(%#x) = %d\n&quot;, c, !!iswgraph(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswgraph(%#x) = %d\n&quot;, c, !!iswgraph(c));
}
|output=
in the default locale, iswgraph(0x2602) = 0
in Unicode locale, iswgraph(0x2602) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.6 | title=The iswgraph function | p=449-450}}
{{ref std c99}}
{{ref std | section=7.25.2.1.6 | title=The iswgraph function | p=395-396}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isgraph}}
{{dsc see cpp | cpp/string/wide/iswgraph}}
{{dsc end}}
{{c/string/character classes}}

[[ar:c/string/wide/iswgraph]]
[[cs:c/string/wide/iswgraph]]
[[de:c/string/wide/iswgraph]]
[[es:c/string/wide/iswgraph]]
[[fr:c/string/wide/iswgraph]]
[[it:c/string/wide/iswgraph]]
[[ja:c/string/wide/iswgraph]]
[[ko:c/string/wide/iswgraph]]
[[pl:c/string/wide/iswgraph]]
[[pt:c/string/wide/iswgraph]]
[[ru:c/string/wide/iswgraph]]
[[tr:c/string/wide/iswgraph]]
[[zh:c/string/wide/iswgraph]]</text>
      <sha1>fcjxs27ckcr6fezoqsyaggup9dz9y60</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswlower</title>
    <ns>0</ns>
    <id>6171</id>
    <revision>
      <id>76825</id>
      <parentid>76479</parentid>
      <timestamp>2015-03-03T12:47:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1689">{{c/title|iswlower}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswlower( wint_t ch );
}}

Checks if the given wide character is a lowercase letter, i.e. one of {{tt|abcdefghijklmnopqrstuvwxyz}} or any lowercase letter specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is an lowercase letter, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u0444'; // Cyrillic small letter ef ('ф')
    printf(&quot;in the default locale, iswlower(%#x) = %d\n&quot;, c, !!iswlower(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswlower(%#x) = %d\n&quot;, c, !!iswlower(c));
}
|output=
in the default locale, iswlower(0x444) = 0
in Unicode locale, iswlower(0x444) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.7 | title=The iswlower function | p=450}}
{{ref std c99}}
{{ref std | section=7.25.2.1.7 | title=The iswlower function | p=396}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc islower}}
{{dsc see cpp | cpp/string/wide/iswlower}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswlower]]
[[cs:c/string/wide/iswlower]]
[[de:c/string/wide/iswlower]]
[[es:c/string/wide/iswlower]]
[[fr:c/string/wide/iswlower]]
[[it:c/string/wide/iswlower]]
[[ja:c/string/wide/iswlower]]
[[ko:c/string/wide/iswlower]]
[[pl:c/string/wide/iswlower]]
[[pt:c/string/wide/iswlower]]
[[ru:c/string/wide/iswlower]]
[[tr:c/string/wide/iswlower]]
[[zh:c/string/wide/iswlower]]</text>
      <sha1>kixmee7p1jj16qit3i6hfxrj5fpvmto</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswprint</title>
    <ns>0</ns>
    <id>6064</id>
    <revision>
      <id>76826</id>
      <parentid>76489</parentid>
      <timestamp>2015-03-03T12:51:08Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2064">{{c/title|iswprint}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswprint( wint_t ch );
}}

Checks if the given wide character can be printed, i.e. it is either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}), a punctuation character({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}}), space or any printable character specific to the current C locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character can be printed, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u2002'; // Unicode character 'EN SPACE'
    printf(&quot;in the default locale, iswprint(%#x) = %d\n&quot;, c, !!iswprint(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswprint(%#x) = %d\n&quot;, c, !!iswprint(c));
    wchar_t c2 = L'\x82'; // break permitted
    printf(&quot;in Unicode locale, iswprint(%#x) = %d\n&quot;, c2, !!iswprint(c2));
}
|output=
in the default locale, iswprint(0x2002) = 0
in Unicode locale, iswprint(0x2002) = 1
in Unicode locale, iswprint(0x82) = 0
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.8 | title=The iswprint function | p=450}}
{{ref std c99}}
{{ref std | section=7.25.2.1.8 | title=The iswprint function | p=396}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isprint}}
{{dsc see cpp | cpp/string/wide/iswprint}}
{{dsc end}}
{{c/string/character classes}}

[[ar:c/string/wide/iswprint]]
[[cs:c/string/wide/iswprint]]
[[de:c/string/wide/iswprint]]
[[es:c/string/wide/iswprint]]
[[fr:c/string/wide/iswprint]]
[[it:c/string/wide/iswprint]]
[[ja:c/string/wide/iswprint]]
[[ko:c/string/wide/iswprint]]
[[pl:c/string/wide/iswprint]]
[[pt:c/string/wide/iswprint]]
[[ru:c/string/wide/iswprint]]
[[tr:c/string/wide/iswprint]]
[[zh:c/string/wide/iswprint]]</text>
      <sha1>duhkievs3hc5xsf6av84nj8p4ul9iz4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswpunct</title>
    <ns>0</ns>
    <id>6063</id>
    <revision>
      <id>76827</id>
      <parentid>76490</parentid>
      <timestamp>2015-03-03T12:55:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1748">{{c/title|iswpunct}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswpunct( wint_t ch );
}}

Checks if the given wide character is a punctuation character, i.e. it is one of {{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}} or any punctuation character specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a punctuation character, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u2051'; // Two asterisks ('⁑')
    printf(&quot;in the default locale, iswpunct(%#x) = %d\n&quot;, c, !!iswpunct(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswpunct(%#x) = %d\n&quot;, c, !!iswpunct(c));
}
|output=
in the default locale, iswpunct(0x2051) = 0
in Unicode locale, iswpunct(0x2051) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.9 | title=The iswpunct function | p=450}}
{{ref std c99}}
{{ref std | section=7.25.2.1.9 | title=The iswpunct function | p=396}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc ispunct}}
{{dsc see cpp | cpp/string/wide/iswpunct}}
{{dsc end}}
{{c/string/character classes}}

[[ar:c/string/wide/iswpunct]]
[[cs:c/string/wide/iswpunct]]
[[de:c/string/wide/iswpunct]]
[[es:c/string/wide/iswpunct]]
[[fr:c/string/wide/iswpunct]]
[[it:c/string/wide/iswpunct]]
[[ja:c/string/wide/iswpunct]]
[[ko:c/string/wide/iswpunct]]
[[pl:c/string/wide/iswpunct]]
[[pt:c/string/wide/iswpunct]]
[[ru:c/string/wide/iswpunct]]
[[tr:c/string/wide/iswpunct]]
[[zh:c/string/wide/iswpunct]]</text>
      <sha1>epqvfl5by10ubwhhgnm9mvzqidm8igj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswspace</title>
    <ns>0</ns>
    <id>6066</id>
    <revision>
      <id>76828</id>
      <parentid>76488</parentid>
      <timestamp>2015-03-03T12:59:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1834">{{c/title|iswspace}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswspace( wint_t ch );
}}

Checks if the given wide character is a whitespace character, i.e. either space ({{tt|0x20}}), form feed ({{tt|0x0c}}), line feed ({{tt|0x0a}}), carriage return ({{tt|0x0d}}), horizontal tab ({{tt|0x09}}), vertical tab ({{tt|0x0b}}) or any whitespace character specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a whitespace character, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u2003'; // Unicode character 'EM SPACE'
    printf(&quot;in the default locale, iswspace(%#x) = %d\n&quot;, c, !!iswspace(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswspace(%#x) = %d\n&quot;, c, !!iswspace(c));
}
|output=
in the default locale, iswspace(0x2003) = 0
in Unicode locale, iswspace(0x2003) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.10 | title=The iswspace function | p=450-451}}
{{ref std c99}}
{{ref std | section=7.25.2.1.10 | title=The iswspace function | p=396-397}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isspace}}
{{dsc see cpp | cpp/string/wide/iswspace}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswspace]]
[[cs:c/string/wide/iswspace]]
[[de:c/string/wide/iswspace]]
[[es:c/string/wide/iswspace]]
[[fr:c/string/wide/iswspace]]
[[it:c/string/wide/iswspace]]
[[ja:c/string/wide/iswspace]]
[[ko:c/string/wide/iswspace]]
[[pl:c/string/wide/iswspace]]
[[pt:c/string/wide/iswspace]]
[[ru:c/string/wide/iswspace]]
[[tr:c/string/wide/iswspace]]
[[zh:c/string/wide/iswspace]]</text>
      <sha1>9wd56facvrpmxr2ss4mfdjicg720rxm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswupper</title>
    <ns>0</ns>
    <id>6071</id>
    <revision>
      <id>76829</id>
      <parentid>76480</parentid>
      <timestamp>2015-03-03T13:05:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1695">{{c/title|iswupper}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswupper( wint_t ch );
}}

Checks if the given wide character is an uppercase letter, i.e. one of {{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}} or any uppercase letter specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is an uppercase letter, zero otherwise.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t c = L'\u053d'; // Armenian capital letter xeh ('Խ')
    printf(&quot;in the default locale, iswupper(%#x) = %d\n&quot;, c, !!iswupper(c));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, iswupper(%#x) = %d\n&quot;, c, !!iswupper(c));
}
|output=
in the default locale, iswupper(0x53d) = 0
in Unicode locale, iswupper(0x53d) = 1
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.11 | title=The iswupper function | p=451}}
{{ref std c99}}
{{ref std | section=7.25.2.1.11 | title=The iswupper function | p=397}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isupper}}
{{dsc see cpp | cpp/string/wide/iswupper}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswupper]]
[[cs:c/string/wide/iswupper]]
[[de:c/string/wide/iswupper]]
[[es:c/string/wide/iswupper]]
[[fr:c/string/wide/iswupper]]
[[it:c/string/wide/iswupper]]
[[ja:c/string/wide/iswupper]]
[[ko:c/string/wide/iswupper]]
[[pl:c/string/wide/iswupper]]
[[pt:c/string/wide/iswupper]]
[[ru:c/string/wide/iswupper]]
[[tr:c/string/wide/iswupper]]
[[zh:c/string/wide/iswupper]]</text>
      <sha1>j7z2gm3wth5u6vr1a2ha39y4af8f1ip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/iswxdigit</title>
    <ns>0</ns>
    <id>6069</id>
    <revision>
      <id>76830</id>
      <parentid>76483</parentid>
      <timestamp>2015-03-03T13:10:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1399">{{c/title|iswxdigit}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
int iswxdigit( wint_t ch );
}}

Checks if the given wide character corresponds (if narrowed) to a hexadecimal numeric character, i.e. one of {{tt|0123456789abcdefABCDEF}}.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a hexadecimal numeric character, zero otherwise.

===Notes===
{{lc|iswdigit}} and {{tt|iswxdigit}} are the only standard wide character classification functions that are not affected by the currently installed C locale.

===References===
{{ref std c11}}
{{ref std | section=7.30.2.1.12 | title=The iswxdigit function | p=451}}
{{ref std c99}}
{{ref std | section=7.25.2.1.12 | title=The iswxdigit function | p=397}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc isxdigit}}
{{dsc see cpp | cpp/string/wide/iswxdigit}}
{{dsc end}}

{{c/string/character classes}}

[[ar:c/string/wide/iswxdigit]]
[[cs:c/string/wide/iswxdigit]]
[[de:c/string/wide/iswxdigit]]
[[es:c/string/wide/iswxdigit]]
[[fr:c/string/wide/iswxdigit]]
[[it:c/string/wide/iswxdigit]]
[[ja:c/string/wide/iswxdigit]]
[[ko:c/string/wide/iswxdigit]]
[[pl:c/string/wide/iswxdigit]]
[[pt:c/string/wide/iswxdigit]]
[[ru:c/string/wide/iswxdigit]]
[[tr:c/string/wide/iswxdigit]]
[[zh:c/string/wide/iswxdigit]]</text>
      <sha1>0ujo5lu7p5eo0bxp7sir202t9bh90m9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/towctrans</title>
    <ns>0</ns>
    <id>6075</id>
    <revision>
      <id>76835</id>
      <parentid>76494</parentid>
      <timestamp>2015-03-03T14:00:44Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1819">{{c/title|towctrans}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h | notes={{mark since c95}}|
wint_t towctrans( wint_t wc, wctrans_t desc );
}}

Maps the wide character {{tt|wc}} using the current C locale's LC_CTYPE mapping category identified by {{tt|desc}}.

===Parameters===
{{par begin}}
{{par | wc | the wide character to map}}
{{par | desc | the LC_CTYPE mapping, obtained from a call to {{lc|wctrans}}}}
{{par end}}

===Return value===
The mapped value of {{tt|wc}} using the mapping identified by {{tt|desc}} in LC_CTYPE facet of the current C locale.

===Example===
{{example|
|code=
#include &lt;locale.h&gt;
#include &lt;wctype.h&gt;
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    setlocale(LC_ALL, &quot;ja_JP.UTF-8&quot;);
    wchar_t kana[] = L&quot;ヒラガナ&quot;;
    size_t sz = sizeof kana / sizeof *kana;
    wchar_t hira[sz];
    for(size_t n = 0; n &lt; sz; ++n)
        hira[n] = towctrans(kana[n], wctrans(&quot;tojhira&quot;));
    printf(&quot;katakana characters %ls are %ls in hiragana\n&quot;, kana, hira);
}
|output=
katakana characters ヒラガナ are ひらがな in hiragana
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.3.2.1 | title=The towctrans function | p=454}}
{{ref std c99}}
{{ref std | section=7.25.3.2,1 | title=The towctrans function | p=400}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wctrans}}
{{dsc see cpp | cpp/string/wide/towctrans}}
{{dsc end}}

[[ar:c/string/wide/towctrans]]
[[cs:c/string/wide/towctrans]]
[[de:c/string/wide/towctrans]]
[[es:c/string/wide/towctrans]]
[[fr:c/string/wide/towctrans]]
[[it:c/string/wide/towctrans]]
[[ja:c/string/wide/towctrans]]
[[ko:c/string/wide/towctrans]]
[[pl:c/string/wide/towctrans]]
[[pt:c/string/wide/towctrans]]
[[ru:c/string/wide/towctrans]]
[[tr:c/string/wide/towctrans]]
[[zh:c/string/wide/towctrans]]</text>
      <sha1>fet4ol5imwxpi89otdjdocpqihvpne0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/towlower</title>
    <ns>0</ns>
    <id>6077</id>
    <revision>
      <id>76833</id>
      <parentid>76491</parentid>
      <timestamp>2015-03-03T13:37:47Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links; ch --&gt; wc, c--&gt;wc</comment>
      <text xml:space="preserve" bytes="1943">{{c/title|towlower}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
wint_t towlower( wint_t wc );
}}
Converts the given wide character to lowercase, if possible.

===Parameters===
{{par begin}}
{{par | wc | wide character to be converted}}
{{par end}}

===Return value===
Lowercase version of {{tt|wc}} or unmodified {{tt|wc}} if no lowercase version is listed in the current C locale.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the Greek uppercase letter 'Σ' has two lowercase forms, depending on the position in a word: 'σ' and 'ς'. A call to {{tt|towlower}} cannot be used to obtain the correct lowercase form in this case. 

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t wc = L'\u0190'; // Latin capital open E ('Ɛ')
    printf(&quot;in the default locale, towlower(%#x) = %#x\n&quot;, wc, towlower(wc));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, towlower(%#x) = %#x\n&quot;, wc, towlower(wc));
}
|output=
in the default locale, towlower(0x190) = 0x190
in Unicode locale, towlower(0x190) = 0x25b
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.3.1.1 | title=The towlower function | p=453}}
{{ref std c99}}
{{ref std | section=7.25.3.1.1 | title=The towlower function | p=399}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc towupper}}
{{dsc inc | c/string/byte/dsc tolower}}
{{dsc see cpp | cpp/string/wide/towlower}}
{{dsc end}}

[[ar:c/string/wide/towlower]]
[[cs:c/string/wide/towlower]]
[[de:c/string/wide/towlower]]
[[es:c/string/wide/towlower]]
[[fr:c/string/wide/towlower]]
[[it:c/string/wide/towlower]]
[[ja:c/string/wide/towlower]]
[[ko:c/string/wide/towlower]]
[[pl:c/string/wide/towlower]]
[[pt:c/string/wide/towlower]]
[[ru:c/string/wide/towlower]]
[[tr:c/string/wide/towlower]]
[[zh:c/string/wide/towlower]]</text>
      <sha1>ag9tm4gbaraca12meh8wd0s6jnml20e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/towupper</title>
    <ns>0</ns>
    <id>6076</id>
    <revision>
      <id>76834</id>
      <parentid>76492</parentid>
      <timestamp>2015-03-03T13:54:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links; ch --&gt; wc, c--&gt;wc</comment>
      <text xml:space="preserve" bytes="1875">{{c/title|towupper}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
wint_t towupper( wint_t wc );
}}
Converts the given wide character to uppercase, if possible.

===Parameters===
{{par begin}}
{{par | wc | wide character to be converted}}
{{par end}}

===Return value===
Uppercase version of {{tt|wc}} or unmodified {{tt|wc}} if no uppercase version is listed in the current C locale.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the uppercase form of 'ß' is (with some exceptions) the two-character string &quot;SS&quot;, which cannot be obtained by {{tt|towupper}}.

===Example===
{{example|
|code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;wctype.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t wc =  L'\u017f'; // Latin small letter Long S ('ſ')
    printf(&quot;in the default locale, towupper(%#x) = %#x\n&quot;, wc, towupper(wc));
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;in Unicode locale, towupper(%#x) = %#x\n&quot;, wc, towupper(wc));
}
|output=
in the default locale, towupper(0x17f) = 0x17f
in Unicode locale, towupper(0x17f) = 0x53
}}

===References===
{{ref std c11}}
{{ref std | section=7.30.3.1.2 | title=The towupper function | p=453}}
{{ref std c99}}
{{ref std | section=7.25.3.1.2 | title=The towupper function | p=399}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc towlower}}
{{dsc inc | c/string/byte/dsc toupper}}
{{dsc see cpp | cpp/string/wide/towupper}}
{{dsc end}}

[[ar:c/string/wide/towupper]]
[[cs:c/string/wide/towupper]]
[[de:c/string/wide/towupper]]
[[es:c/string/wide/towupper]]
[[fr:c/string/wide/towupper]]
[[it:c/string/wide/towupper]]
[[ja:c/string/wide/towupper]]
[[ko:c/string/wide/towupper]]
[[pl:c/string/wide/towupper]]
[[pt:c/string/wide/towupper]]
[[ru:c/string/wide/towupper]]
[[tr:c/string/wide/towupper]]
[[zh:c/string/wide/towupper]]</text>
      <sha1>7q8nuwoz2oo9em9jock8v0vlkodikg3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcscat</title>
    <ns>0</ns>
    <id>6080</id>
    <revision>
      <id>76859</id>
      <parentid>76632</parentid>
      <timestamp>2015-03-04T12:41:24Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3709">{{c/title| wcscat | wcscat_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin|num=1}}
{{dcl | since=c95 | until=c99 |
wchar_t *wcscat( wchar_t *dest, const wchar_t *src );
}}
{{dcl | since=c99 |
wchar_t *wcscat(wchar_t *restrict dest, const wchar_t *restrict src);
}}
{{dcl rev end}}
{{dcl |num=2| since=c11 |
errno_t wcscat_s(wchar_t *restrict dest, rsize_t destsz,
                 const wchar_t *restrict src);
}}
{{dcl end}}
@1@ Appends a copy of the wide string pointed to by {{tt|src}} to the end of the wide string pointed to by {{tt|dest}}. The wide character {{tt|src[0]}} replaces the null terminator at the end of {{tt|dest}}. The resulting wide string is null-terminated. The behavior is undefined if the destination array is not large enough for the contents of both {{tt|str}} and {{tt|dest}} and the terminating null wide character. The behavior is undefined if the strings overlap. 
@2@ Same as {{v|1}}, except that it may clobber the rest of the destination array (from the last character written to {{tt|destsz}}) with unspecified values and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} is zero or greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}
:* there is no null terminator in the first {{tt|destsz}} bytes of {{tt|dest}}
:* truncation would occur (the available space at the end of {{tt|dest}} would not fit every wide character, including the null terminator, of {{tt|src}})
:* overlap would occur between the source and the destination strings
:As all bounds-checked functions, {{tt|wcscat_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to append to}}
{{par | src | pointer to the null-terminated wide string to copy from}}
{{par | destsz | maximum number of characters to write, typically the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes {{c|L'\0'}} to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{c|RMAX_SIZE/sizeof(wchar_t)}}).

===Example===
{{example
 |
 | code=
#include &lt;wchar.h&gt; 
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;

int main(void) 
{
    wchar_t str[50] = L&quot;Земля, прощай.&quot;;
    wcscat(str, L&quot; &quot;);
    wcscat(str, L&quot;В добрый путь.&quot;);
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;%ls&quot;, str);
}
 | output=
Земля, прощай. В добрый путь.
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.3.1  | title=The wcscat function | p=432}}
{{ref std | section=K.3.9.2.2.1 | title=The wcscat_s function | p=642-643}}
{{ref std c99}}
{{ref std | section=7.24.4.3.1  | title=The wcscat function | p=378}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcsncat}}
{{dsc inc | c/string/byte/dsc strcat}}
{{dsc inc | c/string/wide/dsc wcscpy}}
{{dsc see cpp | cpp/string/wide/wcscat}}
{{dsc end}}

[[ar:c/string/wide/wcscat]]
[[cs:c/string/wide/wcscat]]
[[de:c/string/wide/wcscat]]
[[es:c/string/wide/wcscat]]
[[fr:c/string/wide/wcscat]]
[[it:c/string/wide/wcscat]]
[[ja:c/string/wide/wcscat]]
[[ko:c/string/wide/wcscat]]
[[pl:c/string/wide/wcscat]]
[[pt:c/string/wide/wcscat]]
[[ru:c/string/wide/wcscat]]
[[tr:c/string/wide/wcscat]]
[[zh:c/string/wide/wcscat]]</text>
      <sha1>if2q8o7citnz0ydotz1bp4t0tb9uges</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcschr</title>
    <ns>0</ns>
    <id>6098</id>
    <revision>
      <id>83840</id>
      <parentid>83839</parentid>
      <timestamp>2016-03-09T19:11:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>clone example from c++</comment>
      <text xml:space="preserve" bytes="1926">{{c/title| wcschr}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl |notes={{mark since c95}}|
wchar_t* wcschr( const wchar_t* str, wchar_t ch );
}}
{{dcl end}}

Finds the first occurrence of the wide character {{tt|ch}} in the wide string pointed to by {{tt|str}}. 

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be analyzed}}
{{par | ch | wide character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or {{lc|NULL}} if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t arr[] = L&quot;招き猫 кошка&quot;;
    wchar_t *cat = wcschr(arr, L'猫');
    wchar_t *dog = wcschr(arr, L'犬');
 
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    if(cat)
        printf(&quot;The character 猫 found at position %td\n&quot;, cat-arr);
    else
        puts(&quot;The character 猫 not found&quot;);
 
    if(dog)
        printf(&quot;The character 犬 found at position %td\n&quot;, dog-arr);
    else
        puts(&quot;The character 犬 not found&quot;);
}
| output=
The character 猫 found at position 2
The character 犬 not found
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.1 | title=The wcschr function | p=435}}
{{ref std c99}}
{{ref std | section=7.24.4.5.1 | title=The wcschr function | p=381}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcsrchr}}
{{dsc inc | c/string/wide/dsc wcspbrk}}
{{dsc see cpp | cpp/string/wide/wcschr}}
{{dsc end}}

[[ar:c/string/wide/wcschr]]
[[cs:c/string/wide/wcschr]]
[[de:c/string/wide/wcschr]]
[[es:c/string/wide/wcschr]]
[[fr:c/string/wide/wcschr]]
[[it:c/string/wide/wcschr]]
[[ja:c/string/wide/wcschr]]
[[ko:c/string/wide/wcschr]]
[[pl:c/string/wide/wcschr]]
[[pt:c/string/wide/wcschr]]
[[ru:c/string/wide/wcschr]]
[[tr:c/string/wide/wcschr]]
[[zh:c/string/wide/wcschr]]</text>
      <sha1>rz5s25jclkghc7yqx01lv1wbagi813p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcscmp</title>
    <ns>0</ns>
    <id>6101</id>
    <revision>
      <id>76861</id>
      <parentid>76644</parentid>
      <timestamp>2015-03-04T12:50:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2716">{{c/title| wcscmp}}
{{c/string/wide/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
int wcscmp( const wchar_t *lhs, const wchar_t *rhs );
}}

Compares two null-terminated wide strings lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of wide characters that differ in the strings being compared.

The behavior is undefined if {{tt|lhs}} or {{tt|rhs}} are not pointers to null-terminated wide strings.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated wide strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Notes===
This function is not locale-sensitive, unlike {{lc|wcscoll}}, and the order may not be meaningful when characters from different Unicode blocks are used together or when the order of code units does not match any collation order.

===Example===
{{example
 |
 | code=
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;

void demo(const wchar_t* lhs, const wchar_t* rhs)
{
    int rc = wcscmp(lhs, rhs);

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    if(rc == 0)
        printf(&quot;[%ls] equals [%ls]\n&quot;, lhs, rhs);
    else if(rc &lt; 0)
        printf(&quot;[%ls] precedes [%ls]\n&quot;, lhs, rhs);
    else if(rc &gt; 0)
        printf(&quot;[%ls] follows [%ls]\n&quot;, lhs, rhs);

}
int main(void)
{
    const wchar_t* string = L&quot;どうもありがとうございます&quot;;
    demo(string, L&quot;どうも&quot;);
    demo(string, L&quot;助かった&quot;);
    demo(string + 9, L&quot;ありがとうございます&quot; + 6);
}
|p=true
 | output=
[どうもありがとうございます] follows [どうも]
[どうもありがとうございます] precedes [助かった]
[ざいます] equals [ざいます]
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.4.1  | title=The wcscmp function | p=433}}
{{ref std c99}}
{{ref std | section=7.24.4.4.1  | title=The wcscmp function | p=379}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcsncmp}}
{{dsc inc | c/string/wide/dsc wmemcmp}}
{{dsc inc | c/string/byte/dsc strcmp}}
{{dsc inc | c/string/wide/dsc wcscoll}}
{{dsc see cpp | cpp/string/wide/wcscmp}}
{{dsc end}}

[[ar:c/string/wide/wcscmp]]
[[cs:c/string/wide/wcscmp]]
[[de:c/string/wide/wcscmp]]
[[es:c/string/wide/wcscmp]]
[[fr:c/string/wide/wcscmp]]
[[it:c/string/wide/wcscmp]]
[[ja:c/string/wide/wcscmp]]
[[ko:c/string/wide/wcscmp]]
[[pl:c/string/wide/wcscmp]]
[[pt:c/string/wide/wcscmp]]
[[ru:c/string/wide/wcscmp]]
[[tr:c/string/wide/wcscmp]]
[[zh:c/string/wide/wcscmp]]</text>
      <sha1>nkv2pqlcmi6kw7b1zw7dgakfdng3g1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcscoll</title>
    <ns>0</ns>
    <id>6099</id>
    <revision>
      <id>76863</id>
      <parentid>76862</parentid>
      <timestamp>2015-03-04T13:00:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corrected a page number</comment>
      <text xml:space="preserve" bytes="2435">{{c/title| wcscoll}}
{{c/string/wide/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
int wcscoll( const wchar_t *lhs, const wchar_t *rhs );
}}

Compares two null-terminated wide strings according to the collation order defined by the {{lc|LC_COLLATE}} category of the currently installed locale.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated wide strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} is ''less than'' (precedes) {{tt|rhs}}.

{{c|0}} if {{tt|lhs}} is ''equal to'' {{tt|rhs}}.

Positive value if {{tt|lhs}} is ''greater than'' (follows) {{tt|rhs}}.

===Notes===
{{cpp/locale/collate/collation_note}}

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

void try_compare(const wchar_t* p1, const wchar_t* p2)
{
    if(wcscoll(p1, p2) &lt; 0)
        printf(&quot;%ls before %ls\n&quot;, p1, p2);
    else
        printf(&quot;%ls before %ls\n&quot;, p2, p1);
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;In the American locale: &quot;);
    try_compare(L&quot;hrnec&quot;, L&quot;chrt&quot;);

    setlocale(LC_COLLATE, &quot;cs_CZ.utf8&quot;);
    printf(&quot;In the Czech locale: &quot;);
    try_compare(L&quot;hrnec&quot;, L&quot;chrt&quot;);

    setlocale(LC_COLLATE, &quot;en_US.utf8&quot;);
    printf(&quot;In the American locale: &quot;);
    try_compare(L&quot;år&quot;, L&quot;ängel&quot;);

    setlocale(LC_COLLATE, &quot;sv_SE.utf8&quot;);
    printf(&quot;In the Swedish locale: &quot;);
    try_compare(L&quot;år&quot;, L&quot;ängel&quot;);
}
|p=true
 | output=
In the American locale: chrt before hrnec
In the Czech locale: hrnec before chrt
In the American locale: ängel before år
In the Swedish locale: år before ängel
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.4.2 | title=The wcscoll function | p=433-434}}
{{ref std c99}}
{{ref std | section=7.24.4.4.2 | title=The wcscoll function | p=379-380}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcoll}}
{{dsc inc | c/string/wide/dsc wcsxfrm}}
{{dsc inc | c/string/wide/dsc wcscmp}}
{{dsc see cpp | cpp/string/wide/wcscoll}}
{{dsc end}}

[[ar:c/string/wide/wcscoll]]
[[cs:c/string/wide/wcscoll]]
[[de:c/string/wide/wcscoll]]
[[es:c/string/wide/wcscoll]]
[[fr:c/string/wide/wcscoll]]
[[it:c/string/wide/wcscoll]]
[[ja:c/string/wide/wcscoll]]
[[ko:c/string/wide/wcscoll]]
[[pl:c/string/wide/wcscoll]]
[[pt:c/string/wide/wcscoll]]
[[ru:c/string/wide/wcscoll]]
[[tr:c/string/wide/wcscoll]]
[[zh:c/string/wide/wcscoll]]</text>
      <sha1>jbifqdccmf3bb045baz004me5x06jqj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcscpy</title>
    <ns>0</ns>
    <id>6082</id>
    <revision>
      <id>87652</id>
      <parentid>76853</parentid>
      <timestamp>2016-09-16T15:18:23Z</timestamp>
      <contributor>
        <ip>24.91.44.133</ip>
      </contributor>
      <comment>fix missing words in text</comment>
      <text xml:space="preserve" bytes="3438">{{c/title| wcscpy|wcscpy_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin|num=1}}
{{dcl | since=c95 | until=c99 |
wchar_t *wcscpy( wchar_t *dest, const wchar_t *src );
}}
{{dcl | since=c99 |
wchar_t *wcscpy( wchar_t *restrict dest, const wchar_t *restrict src );
}}
{{dcl rev end}}
{{dcl |num=2| since=c11 |
errno_t wcscpy_s( wchar_t *restrict dest, rsize_t destsz,
                  const wchar_t *restrict src );
}}
{{dcl end}}

@1@ Copies the wide string pointed to by {{tt|src}} (including the terminating null wide character) to wide character array pointed to by {{tt|dest}}. The behavior is undefined if the {{tt|dest}} array is not large enough. The behavior is undefined if the strings overlap.
@2@ Same as {{v|1}}, except that it may clobber the rest of the destination array with unspecified values and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} is zero or greater than {{c|RSIZE_MAX / sizeof(wchar_t)}}
:* {{tt|destsz}} is less or equal {{c|wcsnlen_s(src, destsz)}}, in other words, truncation would occur
:* overlap would occur between the source and the destination strings
:As with all bounds-checked functions, {{tt|wcscpy_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the null-terminated wide string to copy from}}
{{par | destsz | maximum number of characters to write, typically the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes {{c|L'\0'}} to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{c|RMAX_SIZE / sizeof(wchar_t)}}).

===Example===
{{example | code=
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t *src = L&quot;犬 means dog&quot;;
//  src[0] = L'狗' ; // this would be undefined behavior
    wchar_t dst[wcslen(src) + 1]; // +1 to accommodate for the null terminator
    wcscpy(dst, src);
    dst[0] = L'狗'; // OK

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;src = %ls\ndst = %ls\n&quot;, src, dst);
}
 | output=
src = 犬 means dog
dst = 狗 means dog
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.1.2  | title=The wcscpy function | p=430}}
{{ref std | section=K.3.9.2.1.1 | title=The wcscpy_s function | p=639}}
{{ref std c99}}
{{ref std | section=7.24.4.1.2 | title=The wcscpy function | p=376}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcsncpy}}
{{dsc inc | c/string/wide/dsc wmemcpy}}
{{dsc inc | c/string/byte/dsc strcpy}}
{{dsc see cpp | cpp/string/wide/wcscpy}}
{{dsc end}}

[[ar:c/string/wide/wcscpy]]
[[cs:c/string/wide/wcscpy]]
[[de:c/string/wide/wcscpy]]
[[es:c/string/wide/wcscpy]]
[[fr:c/string/wide/wcscpy]]
[[it:c/string/wide/wcscpy]]
[[ja:c/string/wide/wcscpy]]
[[ko:c/string/wide/wcscpy]]
[[pl:c/string/wide/wcscpy]]
[[pt:c/string/wide/wcscpy]]
[[ru:c/string/wide/wcscpy]]
[[tr:c/string/wide/wcscpy]]
[[zh:c/string/wide/wcscpy]]</text>
      <sha1>gf7kgdccynl57vtbdoyqwnixm31mh1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcscspn</title>
    <ns>0</ns>
    <id>6095</id>
    <revision>
      <id>76876</id>
      <parentid>74626</parentid>
      <timestamp>2015-03-04T14:19:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1525">{{c/title| wcscspn}}
{{c/string/wide/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
size_t wcscspn( const wchar_t* dest, const wchar_t* src );
}}

Returns the length of the maximum initial segment of the wide string pointed to by {{tt|dest}}, that consists of only the characters ''not'' found in wide string pointed to by {{tt|src}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to be analyzed}}
{{par | src | pointer to the null-terminated wide string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters not found in the character string pointed to by {{tt|src}}

===Example===
{{example
 |
 | code=
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.2 | title=The wcscspn function | p=435-436}}
{{ref std c99}}
{{ref std | section=7.24.4.5.2 | title=The wcscspn function | p=381-382}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcsspn}}
{{dsc inc | c/string/wide/dsc wcspbrk}}
{{dsc see cpp | cpp/string/wide/wcscspn}}
{{dsc end}}

[[ar:c/string/wide/wcscspn]]
[[cs:c/string/wide/wcscspn]]
[[de:c/string/wide/wcscspn]]
[[es:c/string/wide/wcscspn]]
[[fr:c/string/wide/wcscspn]]
[[it:c/string/wide/wcscspn]]
[[ja:c/string/wide/wcscspn]]
[[ko:c/string/wide/wcscspn]]
[[pl:c/string/wide/wcscspn]]
[[pt:c/string/wide/wcscspn]]
[[ru:c/string/wide/wcscspn]]
[[tr:c/string/wide/wcscspn]]
[[zh:c/string/wide/wcscspn]]</text>
      <sha1>35sij17zryfo17ahvbzkz3bal7bb64o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcslen</title>
    <ns>0</ns>
    <id>6102</id>
    <revision>
      <id>76883</id>
      <parentid>76623</parentid>
      <timestamp>2015-03-04T15:01:01Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2683">{{c/title| wcslen | wcsnlen_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl | num=1 | since=c95|
size_t wcslen( const wchar_t *str );
}}
{{dcl | num=2 | since=c11 |
size_t wcsnlen_s(const wchar_t *str, size_t strsz);
}}
{{dcl end}}

@1@ Returns the length of a wide string, that is the number of non-null wide characters that precede the terminating null wide character.
@2@ Same as {{v|1}}, except that the function returns zero if {{tt|str}} is a null pointer and returns {{tt|strsz}} if the null wide character was not found in the first {{tt|strsz}} wide characters of {{tt|src}}
:As all bounds-checked functions, {{tt|wcsnlen_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par |str | pointer to the null-terminated wide string to be examined}}
{{par |strsz | maximum number of wide characters to examine}}
{{par end}}

===Return value===
@1@ The length of the null-terminated wide string {{tt|str}}.
@2@ The length of the null-terminated wide string {{tt|str}} on success, zero if {{tt|str}} is a null  pointer, {{tt|strsz}} if the null wide character was not found.

===Notes===
{{tt|strnlen_s}} and {{tt|wcsnlen_s}} are the only [[c/error|bounds-checked functions]] that do not invoke the runtime constraints handler. They are pure utility functions used to provide limited support for non-null terminated strings.

===Example===
{{example
 |
 | code=
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    wchar_t str[] = L&quot;How many wide characters does this string contain?&quot;;

    printf(&quot;without null character: %zu\n&quot;, wcslen(str));
    printf(&quot;with null character: %zu\n&quot;, sizeof str / sizeof *str);
}
 | output=
without null character: 50
with null character: 51
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.6.1  | title=The wcslen function | p=439}}
{{ref std | section=K.3.9.2.4.1 | title=The wcsnlen_s function | p=646-647}}
{{ref std c99}}
{{ref std | section=7.24.4.6.1  | title=The wcslen function | p=385}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strlen}}
{{dsc see cpp | cpp/string/wide/wcslen}}
{{dsc end}}

[[ar:c/string/wide/wcslen]]
[[cs:c/string/wide/wcslen]]
[[de:c/string/wide/wcslen]]
[[es:c/string/wide/wcslen]]
[[fr:c/string/wide/wcslen]]
[[it:c/string/wide/wcslen]]
[[ja:c/string/wide/wcslen]]
[[ko:c/string/wide/wcslen]]
[[pl:c/string/wide/wcslen]]
[[pt:c/string/wide/wcslen]]
[[ru:c/string/wide/wcslen]]
[[tr:c/string/wide/wcslen]]
[[zh:c/string/wide/wcslen]]</text>
      <sha1>04m9ktafz4eapyw8y2w76hz818p4vj5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcsncat</title>
    <ns>0</ns>
    <id>6079</id>
    <revision>
      <id>76860</id>
      <parentid>76634</parentid>
      <timestamp>2015-03-04T12:45:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4557">{{c/title| wcsncat | wcsncat_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin|num=1}}
{{dcl | since=c95 | until=c99 |
wchar_t *wcsncat( wchar_t *dest, const wchar_t *src, size_t count );
}}
{{dcl | since=c99 |
wchar_t *wcsncat( wchar_t *restrict dest,
                  const wchar_t *restrict src, size_t count );
}}
{{dcl rev end}}
{{dcl |num=2| since=c11 |
errno_t wcsncat_s( wchar_t *restrict dest, rsize_t destsz,
                   const wchar_t *restrict src, rsize_t count );

}}
{{dcl end}}
@1@ Appends at most {{tt|count}} wide characters from the wide string pointed to by {{tt|src}}, stopping if the null terminator is copied, to the end of the character string pointed to by {{tt|dest}}. The wide character {{c|src[0]}} replaces the null terminator at the end of {{tt|dest}}. The null terminator is always appended in the end (so the maximum number of wide characters the function may write is {{c|count+1}}).
@@ The behavior is undefined if the destination array is not large enough for the contents of both {{tt|str}} and {{tt|dest}} and the terminating null wide character.
@@ The behavior is undefined if the strings overlap. 
@2@ Same as {{v|1}}, except that this function may clobber the remainder of the destination array (from the last byte written to {{tt|destsz}}) and that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is zero or greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}
:* there is no null wide character in the first {{tt|destsz}} bytes of {{tt|dest}}
:* truncation would occur: {{tt|count}} or the length of {{tt|src}}, whichever is less, exceeds the space available between the null terminator of {{tt|dest}} and {{tt|destsz}}.
:* overlap would occur between the source and the destination strings
:As all bounds-checked functions, {{tt|wcsncat_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to append to}}
{{par | src | pointer to the null-terminated wide string to copy from}}
{{par | count | maximum number of wide characters to copy}}
{{par | destsz | the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes {{c|L'\0'}} to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{c|RMAX_SIZE/sizeof(wchar_t)}}).

===Notes===
Although truncation to fit the destination buffer is a security risk and therefore a runtime constraints violation for {{tt|wcsncat_s}}, it is possible to get the truncating behavior by specifying {{tt|count}} equal to the size of the destination array minus one: it will copy the first {{tt|count}} wide characters and append the null terminator as always: {{c|wcsncat_s(dst, sizeof dst/sizeof *dst, src, (sizeof dst/sizeof *dst)-wcsnlen_s(dst, sizeof dst/sizeof *dst)-1);}}

===Example===
{{example
 |
 | code=
#include &lt;wchar.h&gt; 
#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;
 
int main(void) 
{
    wchar_t str[50] = L&quot;Земля, прощай.&quot;;
    wcsncat(str, L&quot; &quot;, 1);
    wcsncat(str, L&quot;В добрый путь.&quot;, 8); // only append the first 8 wide chars
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;%ls&quot;, str);
}
|p=true
 | output=
Земля, прощай. В добрый
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.3.2  | title=The wcsncat function | p=432-433}}
{{ref std | section=K.3.9.2.2.2 | title=The wcsncat_s function | p=643-644}}
{{ref std c99}}
{{ref std | section=7.24.4.3.2  | title=The wcsncat function | p=378-379}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcscat}}
{{dsc inc | c/string/byte/dsc strncat}}
{{dsc inc | c/string/wide/dsc wcscpy}}
{{dsc see cpp | cpp/string/wide/wcsncat}}
{{dsc end}}

[[ar:c/string/wide/wcsncat]]
[[cs:c/string/wide/wcsncat]]
[[de:c/string/wide/wcsncat]]
[[es:c/string/wide/wcsncat]]
[[fr:c/string/wide/wcsncat]]
[[it:c/string/wide/wcsncat]]
[[ja:c/string/wide/wcsncat]]
[[ko:c/string/wide/wcsncat]]
[[pl:c/string/wide/wcsncat]]
[[pt:c/string/wide/wcsncat]]
[[ru:c/string/wide/wcsncat]]
[[tr:c/string/wide/wcsncat]]
[[zh:c/string/wide/wcsncat]]</text>
      <sha1>qtcwmtxxekndj45ej9eoe7cejfcf8ei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcsncmp</title>
    <ns>0</ns>
    <id>6100</id>
    <revision>
      <id>87511</id>
      <parentid>76864</parentid>
      <timestamp>2016-08-30T18:26:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>updated to match c++ side (&quot;appears before/apears after&quot; and the ub condition), adapted the c++ example, borrowed the locale-independence note from strncmp</comment>
      <text xml:space="preserve" bytes="2782">{{c/title| wcsncmp}}
{{c/string/wide/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
int wcsncmp( const wchar_t* lhs, const wchar_t* rhs, size_t count );
}}

Compares at most {{tt|count}} wide characters of two null-terminated wide strings. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of wide characters that differ in the strings being compared.

The behavior is undefined if {{tt|lhs}} or {{tt|rhs}} are not pointers to null-terminated strings.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated wide strings to compare}}
{{par | count | maximum number of characters to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Notes===
This function is not locale-sensitive, unlike {{lc|wcscoll}} and {{lc|wcsxfrm}}.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

void demo(const wchar_t *lhs, const wchar_t *rhs, int sz)
{
    int rc = wcsncmp(lhs, rhs, sz);
    if(rc == 0)
        printf(&quot;First %d characters of [%ls] equal [%ls]\n&quot;, sz, lhs, rhs);
    else if(rc &lt; 0)
        printf(&quot;First %d characters of [%ls] precede [%ls]\n&quot;, sz, lhs, rhs);
    else if(rc &gt; 0)
        printf(&quot;First %d characters of [%ls] follow [%ls]\n&quot;, sz, lhs, rhs);
}

int main(void)
{
    const wchar_t *str1 = L&quot;안녕하세요&quot;;
    const wchar_t *str2 = L&quot;안녕히 가십시오&quot;;

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    demo(str1, str2, 5);
    demo(str2, str1, 8);
    demo(str1, str2, 2);
}
 | output=
First 5 characters of [안녕하세요] precede [안녕히 가십시오]
First 8 characters of [안녕히 가십시오] follow [안녕하세요]
First 2 characters of [안녕하세요] equal [안녕히 가십시오]
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.4.3 | title=The wcsncmp function | p=434}}
{{ref std c99}}
{{ref std | section=7.24.4.4.3 | title=The wcsncmp function | p=380}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcscmp}}
{{dsc inc | c/string/wide/dsc wmemcmp}}
{{dsc inc | c/string/wide/dsc wcscoll}}
{{dsc see cpp | cpp/string/wide/wcsncmp}}
{{dsc end}}

[[ar:c/string/wide/wcsncmp]]
[[cs:c/string/wide/wcsncmp]]
[[de:c/string/wide/wcsncmp]]
[[es:c/string/wide/wcsncmp]]
[[fr:c/string/wide/wcsncmp]]
[[it:c/string/wide/wcsncmp]]
[[ja:c/string/wide/wcsncmp]]
[[ko:c/string/wide/wcsncmp]]
[[pl:c/string/wide/wcsncmp]]
[[pt:c/string/wide/wcsncmp]]
[[ru:c/string/wide/wcsncmp]]
[[tr:c/string/wide/wcsncmp]]
[[zh:c/string/wide/wcsncmp]]</text>
      <sha1>jdu0xfz65t7z0zuyrdye1i4f2qxtgir</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcsncpy</title>
    <ns>0</ns>
    <id>6081</id>
    <revision>
      <id>76857</id>
      <parentid>76855</parentid>
      <timestamp>2015-03-04T12:33:25Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Return value */ RMAX_SIZE =&gt; RSIZE_MAX</comment>
      <text xml:space="preserve" bytes="4798">{{c/title| wcsncpy | wcsncpy_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin|num=1}}
{{dcl | since=c95 | until=c99 |
wchar_t* wcsncpy( wchar_t* dest, const wchar_t* src, size_t count );
}}
{{dcl | since=c99 |
wchar_t *wcsncpy(wchar_t *restrict dest, const wchar_t *restrict src, size_t n);
}}
{{dcl rev end}}
{{dcl |num=2| since=c11 |
errno_t wcsncpy_s( wchar_t *restrict dest, rsize_t destsz,
                   const wchar_t *restrict src, rsize_t n);
}}
{{dcl end}}

@1@ Copies at most {{tt|count}} characters of the wide string pointed to by {{tt|src}} (including the terminating null wide character) to wide character array pointed to by {{tt|dest}}. 
@@ If {{tt|count}} is reached before the entire string {{tt|src}} was copied, the resulting wide character array is not null-terminated.
@@ If, after copying the terminating null wide character from {{tt|src}}, {{tt|count}} is not reached, additional null wide characters are written to {{tt|dest}} until the total of {{tt|count}} characters have been written.
@@ If the strings overlap, the behavior is undefined.
@2@ Same as {{v|1}}, except that the function does not continue writing zeroes into the destination array to pad up to {{tt|count}}, it stops after writing the terminating null character (if there was no null in the source, it writes one at {{c|dest[count]}} and then stops). Also, the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is zero or greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}
:* {{tt|count}} is greater or equal {{tt|destsz}}, but {{tt|destsz}} is less or equal {{c|wcsnlen_s(src, count)}}, in other words, truncation would occur
:* overlap would occur between the source and the destination strings
:As all bounds-checked functions, {{tt|wcsncpy_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the wide string to copy from}}
{{par | count | maximum number of wide characters to copy}}
{{par | destsz | the size of the destination buffer}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, writes {{c|L'\0'}} to {{c|dest[0]}} (unless {{tt|dest}} is a null pointer or {{tt|destsz}} is zero or greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}) and may clobber the rest of the destination array with unspecified values.

===Notes===
In typical usage, {{tt|count}} is the number of elements in the destination array.

Although truncation to fit the destination buffer is a security risk and therefore a runtime constraints violation for {{tt|wcsncpy_s}}, it is possible to get the truncating behavior by specifying {{tt|count}} equal to the size of the destination array minus one: it will copy the first {{tt|count}} wide characters and append the null wide terminator as always: {{c|wcsncpy_s(dst, sizeof dst / sizeof *dst, src, (sizeof dst / sizeof *dst)-1);}}

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;
 
int main(void)
{
    wchar_t src[] = L&quot;わゐ&quot;;
    wchar_t dest[6] = {L'あ', L'い', L'う', L'え', L'お'};
 
    wcsncpy(dest, src, 4); // this will copy わゐ and repeat L'\0' two times
 
    puts(&quot;The contents of dest are: &quot;);
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    for(wchar_t* p = dest; p-dest &lt; sizeof dest / sizeof *dest; ++p) {
        if(*p)
            printf(&quot;%lc &quot;, *p);
        else
            printf(&quot;\\0 &quot;);
    }
}
|p=true
|output=
The contents of dest are: 
わ ゐ \0 \0 お \0 
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.2.2  | title=The wcsncpy function | p=431}}
{{ref std | section=K.3.9.2.1.2 | title=The wcsncpy_s function | p=640-641}}
{{ref std c99}}
{{ref std | section=7.24.4.2.2  | title=The wcsncpy function | p=377}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcscpy}}
{{dsc inc | c/string/wide/dsc wmemcpy}}
{{dsc inc | c/string/byte/dsc strncpy}}
{{dsc see cpp | cpp/string/wide/wcsncpy}}
{{dsc end}}

[[ar:c/string/wide/wcsncpy]]
[[cs:c/string/wide/wcsncpy]]
[[de:c/string/wide/wcsncpy]]
[[es:c/string/wide/wcsncpy]]
[[fr:c/string/wide/wcsncpy]]
[[it:c/string/wide/wcsncpy]]
[[ja:c/string/wide/wcsncpy]]
[[ko:c/string/wide/wcsncpy]]
[[pl:c/string/wide/wcsncpy]]
[[pt:c/string/wide/wcsncpy]]
[[ru:c/string/wide/wcsncpy]]
[[tr:c/string/wide/wcsncpy]]
[[zh:c/string/wide/wcsncpy]]</text>
      <sha1>rnrevbjav1vpt3gmqir75gjixwrimws</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcspbrk</title>
    <ns>0</ns>
    <id>6094</id>
    <revision>
      <id>76877</id>
      <parentid>74627</parentid>
      <timestamp>2015-03-04T14:24:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1474">{{c/title| wcspbrk}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl |notes={{mark since c95}}|
wchar_t* wcspbrk( const wchar_t* dest, const wchar_t* str );
}}
{{dcl end}}

Finds the first character in wide string pointed to by {{tt|dest}}, that is also in wide string pointed to by {{tt|str}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to be analyzed}}
{{par | src | pointer to the null-terminated wide string that contains the characters to search for}}
{{par end}}

===Return value===
Pointer to the first character in {{tt|dest}}, that is also in {{tt|str}}, or {{lc|NULL}} if no such character exists.

===Example===
{{example
 |
 | code=
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.3 | title=The wcspbrk function | p=436}}
{{ref std c99}}
{{ref std | section=7.24.4.5.3 | title=The wcspbrk function | p=382}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcscspn}}
{{dsc inc | c/string/wide/dsc wcschr}}
{{dsc see cpp | cpp/string/wide/wcspbrk}}
{{dsc end}}

[[ar:c/string/wide/wcspbrk]]
[[cs:c/string/wide/wcspbrk]]
[[de:c/string/wide/wcspbrk]]
[[es:c/string/wide/wcspbrk]]
[[fr:c/string/wide/wcspbrk]]
[[it:c/string/wide/wcspbrk]]
[[ja:c/string/wide/wcspbrk]]
[[ko:c/string/wide/wcspbrk]]
[[pl:c/string/wide/wcspbrk]]
[[pt:c/string/wide/wcspbrk]]
[[ru:c/string/wide/wcspbrk]]
[[tr:c/string/wide/wcspbrk]]
[[zh:c/string/wide/wcspbrk]]</text>
      <sha1>ijaroccge77ulfl3a1dksb33m3m4qy1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcsrchr</title>
    <ns>0</ns>
    <id>6097</id>
    <revision>
      <id>76878</id>
      <parentid>74628</parentid>
      <timestamp>2015-03-04T14:28:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1361">{{c/title| wcsrchr}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl |notes={{mark since c95}}|
wchar_t* wcsrchr( const wchar_t* str, wchar_t ch );
}}
{{dcl end}}

Finds the last occurrence of the wide character {{tt|ch}} in the wide string pointed to by {{tt|str}}. 

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be analyzed}}
{{par | ch | wide character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or {{lc|NULL}} if no such character is found.

===Example===
{{example
 |
 | code=
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.4 | title=The wcsrchr function | p=436}}
{{ref std c99}}
{{ref std | section=7.24.4.5.4 | title=The wcsrchr function | p=382}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcschr}}
{{dsc inc | c/string/wide/dsc wcspbrk}}
{{dsc see cpp | cpp/string/wide/wcsrchr}}
{{dsc end}}

[[ar:c/string/wide/wcsrchr]]
[[cs:c/string/wide/wcsrchr]]
[[de:c/string/wide/wcsrchr]]
[[es:c/string/wide/wcsrchr]]
[[fr:c/string/wide/wcsrchr]]
[[it:c/string/wide/wcsrchr]]
[[ja:c/string/wide/wcsrchr]]
[[ko:c/string/wide/wcsrchr]]
[[pl:c/string/wide/wcsrchr]]
[[pt:c/string/wide/wcsrchr]]
[[ru:c/string/wide/wcsrchr]]
[[tr:c/string/wide/wcsrchr]]
[[zh:c/string/wide/wcsrchr]]</text>
      <sha1>nqd96m338kiyehfd8sgtk8nm0f8u2qc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcsspn</title>
    <ns>0</ns>
    <id>6096</id>
    <revision>
      <id>76879</id>
      <parentid>74629</parentid>
      <timestamp>2015-03-04T14:31:41Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1475">{{c/title| wcsspn}}
{{c/string/wide/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
size_t wcsspn( const wchar_t* dest, const wchar_t* src );
}}

Returns the length of the maximum initial segment of the wide string pointed to by {{tt|dest}}, that consists of only the characters found in wide string pointed to by {{tt|src}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to be analyzed}}
{{par | src | pointer to the null-terminated wide string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters from wide string pointed to by {{tt|src}}

===Example===
{{example
 |
 | code=
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.5 | title=The wcsspn function | p=436}}
{{ref std c99}}
{{ref std | section=7.24.4.5.5 | title=The wcsspn function | p=382}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcscspn}}
{{dsc inc | c/string/wide/dsc wcspbrk}}
{{dsc see cpp | cpp/string/wide/wcsspn}}
{{dsc end}}

[[ar:c/string/wide/wcsspn]]
[[cs:c/string/wide/wcsspn]]
[[de:c/string/wide/wcsspn]]
[[es:c/string/wide/wcsspn]]
[[fr:c/string/wide/wcsspn]]
[[it:c/string/wide/wcsspn]]
[[ja:c/string/wide/wcsspn]]
[[ko:c/string/wide/wcsspn]]
[[pl:c/string/wide/wcsspn]]
[[pt:c/string/wide/wcsspn]]
[[ru:c/string/wide/wcsspn]]
[[tr:c/string/wide/wcsspn]]
[[zh:c/string/wide/wcsspn]]</text>
      <sha1>9fgczrug3yljcon9aot1ey4w427e0wa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcsstr</title>
    <ns>0</ns>
    <id>6093</id>
    <revision>
      <id>76880</id>
      <parentid>74630</parentid>
      <timestamp>2015-03-04T14:35:05Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1517">{{c/title| wcsstr}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl |notes={{mark since c95}}|
wchar_t* wcsstr( const wchar_t* dest, const wchar_t* src );
}}
{{dcl end}}

Finds the first occurrence of the wide string {{tt|src}} in the wide string pointed to by {{tt|dest}}. The terminating null characters are not compared.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to examine}}
{{par | src | pointer to the null-terminated wide string to search for}}
{{par end}}

===Return value===
Pointer to the first character of the found substring in {{tt|dest}}, or {{lc|NULL}} if no such substring is found. If {{tt|src}} points to an empty string, {{tt|dest}} is returned.

===Example===
{{example
 |
 | code=
 | output=
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.6 | title=The wcsstr function | p=437}}
{{ref std c99}}
{{ref std | section=7.24.4.5.6 | title=The wcsstr function | p=383}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcschr}}
{{dsc inc | c/string/wide/dsc wcsrchr}}
{{dsc see cpp | cpp/string/wide/wcsstr}}
{{dsc end}}

[[ar:c/string/wide/wcsstr]]
[[cs:c/string/wide/wcsstr]]
[[de:c/string/wide/wcsstr]]
[[es:c/string/wide/wcsstr]]
[[fr:c/string/wide/wcsstr]]
[[it:c/string/wide/wcsstr]]
[[ja:c/string/wide/wcsstr]]
[[ko:c/string/wide/wcsstr]]
[[pl:c/string/wide/wcsstr]]
[[pt:c/string/wide/wcsstr]]
[[ru:c/string/wide/wcsstr]]
[[tr:c/string/wide/wcsstr]]
[[zh:c/string/wide/wcsstr]]</text>
      <sha1>j245lbij6j9y3qoi8mkuvkd6dnkxfjm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcstod</title>
    <ns>0</ns>
    <id>6517</id>
    <redirect title="c/string/wide/wcstof" />
    <revision>
      <id>25689</id>
      <timestamp>2012-04-23T21:08:21Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/string/wide/wcstof]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/string/wide/wcstof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcstof</title>
    <ns>0</ns>
    <id>6083</id>
    <revision>
      <id>76848</id>
      <parentid>76511</parentid>
      <timestamp>2015-03-04T11:38:44Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2680">{{c/title| wcstof | wcstod | wcstold}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl | since=c99 |
float       wcstof( const wchar_t* str, wchar_t** str_end );           
}}
{{dcl | notes={{mark since c95}}|
double      wcstod( const wchar_t* str, wchar_t** str_end );
}}
{{dcl | since=c99 |
long double wcstold( const wchar_t* str, wchar_t** str_end );
}}
{{dcl end}}

Interprets a floating point value in a wide string pointed to by {{tt|str}}.

{{cpp/string/cvt str2float|wide}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the wide character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be interpreted}}
{{par | str_end | pointer to a pointer to a wide character.}}
{{par end}}

===Return value===
Floating point value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|HUGE_VAL}}, {{lc|HUGE_VALF}} or {{lc|HUGE_VALL}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    const wchar_t *p = L&quot;111.11 -2.22 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz&quot;;
    printf(&quot;Parsing L\&quot;%ls\&quot;:\n&quot;, p);
    wchar_t *end;
    for (double f = wcstod(p, &amp;end); p != end; f = wcstod(p, &amp;end))
    {
        printf(&quot;'%.*ls' -&gt; &quot;, (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf(&quot;range error, got &quot;);
            errno = 0;
        }
        printf(&quot;%f\n&quot;, f);
    }
}
 | output=
Parsing L&quot;111.11 -2.22 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz&quot;:
'111.11' -&gt; 111.110000
' -2.22' -&gt; -2.220000
' 0X1.BC70A3D70A3D7P+6' -&gt; 111.110000
'  1.18973e+4932' -&gt; range error, got inf
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.1.1 | title=The wcstod, wcstof, and wcstold functions | p=426-428}}
{{ref std c99}}
{{ref std | section=7.24.4.1.1 | title=The wcstod, wcstof, and wcstold functions | p=372-374}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strtof}}
{{dsc see cpp | cpp/string/wide/wcstof | wcstof | wcstod | wcstold}}
{{dsc end}}

[[ar:c/string/wide/wcstof]]
[[cs:c/string/wide/wcstof]]
[[de:c/string/wide/wcstof]]
[[es:c/string/wide/wcstof]]
[[fr:c/string/wide/wcstof]]
[[it:c/string/wide/wcstof]]
[[ja:c/string/wide/wcstof]]
[[ko:c/string/wide/wcstof]]
[[pl:c/string/wide/wcstof]]
[[pt:c/string/wide/wcstof]]
[[ru:c/string/wide/wcstof]]
[[tr:c/string/wide/wcstof]]
[[zh:c/string/wide/wcstof]]</text>
      <sha1>0h4qouzapvq4mb1dopxmrjsn2qvw0gt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcstoimax</title>
    <ns>0</ns>
    <id>9912</id>
    <revision>
      <id>76885</id>
      <parentid>62631</parentid>
      <timestamp>2015-03-04T15:24:12Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2173">{{c/title| wcstoimax | wcstoumax}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | inttypes.h}}
{{dcl | since=c99 | 
intmax_t wcstoimax( const wchar_t *restrict nptr, 
                    wchar_t **restrict endptr, int base );
}}
{{dcl | since=c99 |
uintmax_t wcstoumax( const wchar_t *restrict nptr,
                     wchar_t **restrict endptr, int base );
}}
{{dcl end}}

Interprets an unsigned integer value in a wide string pointed to by {{tt|nptr}}.

{{cpp/string/cvt str2int base | base=base | u=true}}

The functions sets the pointer pointed to by {{tt|endptr}} to point to the wide character past the last character interpreted. If {{tt|endptr}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | nptr | pointer to the null-terminated wide string to be interpreted}}
{{par | endptr | pointer to a pointer to a wide character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|INTMAX_MAX}}, {{lc|INTMAX_MIN}}, {{lc|UINTMAX_MAX}}, or {{c|0}} is returned, as appropriate. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{todo|example}}

===References===
{{ref std c11}}
{{ref std | section=7.8.2.4 | title=The wcstoimax and wcstoumax functions | p=220}}
{{ref std c99}}
{{ref std | section=7.8.2.4 | title=The wcstoimax and wcstoumax functions | p=201}}
{{ref std end

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strtoimax}}
{{dsc inc | c/string/wide/dsc wcstol}}
{{dsc inc | c/string/wide/dsc wcstoul}}
{{dsc see cpp | cpp/string/wide/wcstoimax | wcstoimax | wcstoumax}}
{{dsc end}}

[[ar:c/string/wide/wcstoimax]]
[[cs:c/string/wide/wcstoimax]]
[[de:c/string/wide/wcstoimax]]
[[es:c/string/wide/wcstoimax]]
[[fr:c/string/wide/wcstoimax]]
[[it:c/string/wide/wcstoimax]]
[[ja:c/string/wide/wcstoimax]]
[[ko:c/string/wide/wcstoimax]]
[[pl:c/string/wide/wcstoimax]]
[[pt:c/string/wide/wcstoimax]]
[[ru:c/string/wide/wcstoimax]]
[[tr:c/string/wide/wcstoimax]]
[[zh:c/string/wide/wcstoimax]]</text>
      <sha1>cjkoxp1suv2vdun9gyaprrlpp6z6xzj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcstok</title>
    <ns>0</ns>
    <id>6092</id>
    <revision>
      <id>76881</id>
      <parentid>76647</parentid>
      <timestamp>2015-03-04T14:43:10Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="5888">{{c/title| wcstok|wcstok_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin|num=1}}
{{dcl | since=c95 | until=c99 | 1=
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t **ptr );
}}
{{dcl | since=c99 |1=
wchar_t *wcstok(wchar_t * restrict str, const wchar_t * restrict delim,
                wchar_t **restrict ptr);
}}
{{dcl rev end}}
{{dcl | since=c11| num=2|
wchar_t *wcstok_s( wchar_t *restrict str, rsize_t *restrict strmax,
                   const wchar_t *restrict delim, wchar_t **restrict ptr);
}}
{{dcl end}}

@1@ Finds the next token in a null-terminated wide string pointed to by {{tt|str}}. The separator characters are identified by null-terminated wide string pointed to by {{tt|delim}}.

@@This function is designed to be called multiples times to obtain successive tokens from the same string.

:* If {{c|str !{{=}} NULL}}, the call is treated as the first call to {{tt|wcstok}} for this particular wide string. The function searches for the first wide character which is ''not'' contained in {{tt|delim}}.
::* If no such wide character was found, there are no tokens in {{tt|str}} at all, and the function returns a null pointer. 
::* If such wide character was found, it is the ''beginning of the token''. The function then searches from that point on for the first wide character that ''is'' contained in {{tt|delim}}. 
:::* If no such wide character was found, {{tt|str}} has only one token, and future calls to {{tt|wcstok}} will return a null pointer
:::* If such wide character was found, it is ''replaced'' by the null wide character {{c|L'\0'}} and the parser state (typically a pointer to the following wide character) is stored in the user-provided location {{c|*ptr}}.
::* The function then returns the pointer to the beginning of the token
:* If {{c|str {{==}} NULL}}, the call is treated as a subsequent call to {{tt|wcstok}}: the function continues from where it left in the previous invocation with the same {{c|*ptr}}. The behavior is the same as if the pointer to the wide character that follows the last detected token is passed as {{c|str}}.

@2@ Same as {{v|1}}, except that on every step, writes the number of characters left to see in {{tt|str}} into {{c|*strmax}}. Repeat calls (with null {{tt|str}}) must pass both {{tt|strmax}} and {{tt|ptr}} with the values stored by the previous call. Also, the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function, without storing anything in the object pointed to by {{tt|ptr}}
:* {{tt|strmax}}, {{tt|delim}}, or {{tt|ptr}} is a null pointer
:* on a non-initial call (with null {{tt|str}}), {{tt|*ptr}} is a null pointer
:* on the first call, {{c|*strmax}} is zero or greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}
:* search for the end of a token reaches the end of the source string (as measured by the initial value of {{c|*strmax}})) without encountering the null terminator
:As all bounds-checked functions, {{tt|wcstok_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to tokenize}}
{{par | delim | pointer to the null-terminated wide string identifying delimiters}}
{{par | ptr | pointer to an object of type {{c|wchar_t*}}, which is used by both {{tt|wcstok}} and {{tt|wcstok_s}} to store the internal state of the parser}}
{{par | strmax | pointer to an object which initially holds the size of {{tt|str}}: wcstok_s stores the number of characters that remain to be examined}}
{{par end}}

===Return value===
Returns pointer to the beginning of the next token or null pointer if there are no more tokens.

===Note===
This function is destructive: it writes the {{c|L'\0'}} characters in the elements of the string {{tt|str}}. In particular, a wide string literal cannot be used as the first argument of {{tt|wcstok}}.

Unlike {{lc|strtok}}, {{tt|wcstok}} does not update static storage: it stores the parser state in the user-provided location.

Unlike most other tokenizers, the delimiters in {{tt|wcstok}} can be different for each subsequent token, and can even depend on the contents of the previous tokens.

===Example===
{{example
 |
 | code=
#include &lt;wchar.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    wchar_t input[] = L&quot;A bird came down the walk&quot;;
    printf(&quot;Parsing the input string '%ls'\n&quot;, input);
    wchar_t *buffer;
    wchar_t *token = wcstok(input, L&quot; &quot;, &amp;buffer);
    while(token) {
        printf(&quot;%ls\n&quot;, token);
        token = wcstok(NULL, L&quot; &quot;, &amp;buffer);
    }

    printf(&quot;Contents of the input string now: '&quot;);
    for(size_t n = 0; n &lt; sizeof input / sizeof *input; ++n)
        input[n] ? printf(&quot;%lc&quot;, input[n]) : printf(&quot;\\0&quot;);
    puts(&quot;'&quot;);
}
 | output=
Parsing the input string 'A bird came down the walk'
A
bird
came
down
the
walk
Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.7  | title=The wcstok function | p=437-438}}
{{ref std | section=K.3.9.2.3.1 | title=The wcstok_s function | p=645-646}}
{{ref std c99}}
{{ref std | section=7.24.4.5.7  | title=The wcstok function | p=383-384}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strtok}}
{{dsc see cpp | cpp/string/wide/wcstok}}
{{dsc end}}

[[ar:c/string/wide/wcstok]]
[[cs:c/string/wide/wcstok]]
[[de:c/string/wide/wcstok]]
[[es:c/string/wide/wcstok]]
[[fr:c/string/wide/wcstok]]
[[it:c/string/wide/wcstok]]
[[ja:c/string/wide/wcstok]]
[[ko:c/string/wide/wcstok]]
[[pl:c/string/wide/wcstok]]
[[pt:c/string/wide/wcstok]]
[[ru:c/string/wide/wcstok]]
[[tr:c/string/wide/wcstok]]
[[zh:c/string/wide/wcstok]]</text>
      <sha1>gn4zgo5h1p0bvkr9rsmcjhudmdh3uvk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcstol</title>
    <ns>0</ns>
    <id>6086</id>
    <revision>
      <id>76849</id>
      <parentid>76507</parentid>
      <timestamp>2015-03-04T11:55:19Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2701">{{c/title| wcstol | wcstoll}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | notes={{mark since c95}}|
long      wcstol( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl | since=c99 |
long long wcstoll( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl end}}

Interprets an integer value in a wide string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the wide character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be interpreted}}
{{par | str_end | pointer to a pointer to wide character}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|LONG_MAX}}, {{lc|LONG_MIN}}, {{lc|LLONG_MAX}} or {{lc|LLONG_MIN}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    const wchar_t *p = L&quot;10 200000000000000000000000000000 30 -40&quot;;
    printf(&quot;Parsing L'%ls':\n&quot;, p);
    wchar_t *end;
    for (long i = wcstol(p, &amp;end, 10);
         p != end;
         i = wcstol(p, &amp;end, 10))
    {
        printf(&quot;'%.*ls' -&gt; &quot;, (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf(&quot;range error, got &quot;);
            errno = 0;
        }
        printf(&quot;%ld\n&quot;, i);
    }
}
 | output=
Parsing L'10 200000000000000000000000000000 30 -40':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 9223372036854775807
' 30' -&gt; 30
' -40' -&gt; -40
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.1.2 | title=The wcstol, wcstoll, wcstoul, and wcstoull functions | p=429-430}}
{{ref std c99}}
{{ref std | section=7.24.4.1.2 | title=The wcstol, wcstoll, wcstoul, and wcstoull functions | p=375-376}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strtol}}
{{dsc inc | c/string/wide/dsc wcstoul}}
{{dsc see cpp | cpp/string/wide/wcstol | wcstol | wcstoll}}
{{dsc end}}

[[ar:c/string/wide/wcstol]]
[[cs:c/string/wide/wcstol]]
[[de:c/string/wide/wcstol]]
[[es:c/string/wide/wcstol]]
[[fr:c/string/wide/wcstol]]
[[it:c/string/wide/wcstol]]
[[ja:c/string/wide/wcstol]]
[[ko:c/string/wide/wcstol]]
[[pl:c/string/wide/wcstol]]
[[pt:c/string/wide/wcstol]]
[[ru:c/string/wide/wcstol]]
[[tr:c/string/wide/wcstol]]
[[zh:c/string/wide/wcstol]]</text>
      <sha1>cgjg29956pgdm52jp5vx1cwu3aw4q2c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcstold</title>
    <ns>0</ns>
    <id>6516</id>
    <redirect title="c/string/wide/wcstof" />
    <revision>
      <id>25688</id>
      <timestamp>2012-04-23T21:08:17Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[c/string/wide/wcstof]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[c/string/wide/wcstof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcstoul</title>
    <ns>0</ns>
    <id>6085</id>
    <revision>
      <id>76850</id>
      <parentid>76504</parentid>
      <timestamp>2015-03-04T12:02:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2735">{{c/title| wcstoul | wcstoull}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl | notes={{mark since c95}}|
unsigned long      wcstoul( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl | since=c99 |
unsigned long long wcstoull( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl end}}

Interprets an unsigned integer value in a wide string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base | u=true}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the wide character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be interpreted}}
{{par | str_end | pointer to a pointer to a wide character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|ULONG_MAX}} or {{lc|ULLONG_MAX}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    const wchar_t *p = L&quot;10 200000000000000000000000000000 30 40&quot;;
    printf(&quot;Parsing L'%ls':\n&quot;, p);
    wchar_t *end;
    for (unsigned long i = wcstoul(p, &amp;end, 10);
         p != end;
         i = wcstoul(p, &amp;end, 10))
    {
        printf(&quot;'%.*ls' -&gt; &quot;, (int)(end-p), p);
        p = end;
        if (errno == ERANGE){
            printf(&quot;range error, got &quot;);
            errno = 0;
        }
        printf(&quot;%lu\n&quot;, i);
    }
}
 | output=
Parsing '10 200000000000000000000000000000 30 40':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 18446744073709551615
' 30' -&gt; 30
' 40' -&gt; 40
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.1.2 | title=The wcstol, wcstoll, wcstoul, and wcstoull functions | p=429-430}}
{{ref std c99}}
{{ref std | section=7.24.4.1.2 | title=The wcstol, wcstoll, wcstoul, and wcstoull functions | p=375-376}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strtoul}}
{{dsc inc | c/string/wide/dsc wcstol}}
{{dsc see cpp | cpp/string/wide/wcstoul | wcstoul | wcstoull}}
{{dsc end}}

[[ar:c/string/wide/wcstoul]]
[[cs:c/string/wide/wcstoul]]
[[de:c/string/wide/wcstoul]]
[[es:c/string/wide/wcstoul]]
[[fr:c/string/wide/wcstoul]]
[[it:c/string/wide/wcstoul]]
[[ja:c/string/wide/wcstoul]]
[[ko:c/string/wide/wcstoul]]
[[pl:c/string/wide/wcstoul]]
[[pt:c/string/wide/wcstoul]]
[[ru:c/string/wide/wcstoul]]
[[tr:c/string/wide/wcstoul]]
[[zh:c/string/wide/wcstoul]]</text>
      <sha1>i9lj5h9eizow61v1rl1ypey2zpat20x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wcsxfrm</title>
    <ns>0</ns>
    <id>6078</id>
    <revision>
      <id>87761</id>
      <parentid>85320</parentid>
      <timestamp>2016-09-30T05:55:34Z</timestamp>
      <contributor>
        <ip>117.136.45.156</ip>
      </contributor>
      <text xml:space="preserve" bytes="3454">{{c/title|wcsxfrm}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin}}
{{dcl | until=c99|notes={{mark since c95}}|
size_t wcsxfrm( wchar_t* dest, const wchar_t* src, size_t count );
}}
{{dcl | since=c99|
size_t wcsxfrm( wchar_t* restrict dest, const wchar_t* restrict src, size_t count );
}}
{{dcl rev end}}
{{dcl end}}

Transforms the null-terminated wide string pointed to by {{tt|src}} into the implementation-defined form such that comparing two transformed strings with {{lc|wcscmp}} gives the same result as comparing the original strings with {{lc|wcscoll}}, in the current C locale.

The first {{tt|count}} characters of the transformed string are written to destination, including the terminating null character, and the length of the full transformed string is returned, excluding the terminating null character.

If {{tt|count}} is {{c|0}}, then {{tt|dest}} is allowed to be a null pointer.

===Notes===
The correct length of the buffer that can receive the entire transformed string is {{c|1+wcsxfrm(NULL, src, 0)}}

This function is used when making multiple locale-dependent comparisons using the same wide string or set of wide strings, because it is more efficient to use {{tt|wcsxfrm}} to transform all the strings just once, and subsequently compare the transformed wide strings with {{lc|wcscmp}}.

===Parameters===
{{par begin}}
{{par| dest | pointer to the first element of a wide null-terminated string to write the transformed string to}}
{{par| src| pointer to the null-terminated wide character string to transform}}
{{par| count | maximum number of characters to output}}
{{par end}}

===Return value===
The length of the transformed wide string, not including the terminating null-character.

===Example===
{{example
 |code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    setlocale(LC_ALL, &quot;sv_SE.utf8&quot;);

    const wchar_t *in1 = L&quot;\u00e5r&quot;;
    wchar_t out1[1+wcsxfrm(NULL, in1, 0)];
    wcsxfrm(out1, in1, sizeof out1/sizeof *out1);

    const wchar_t *in2 = L&quot;\u00e4ngel&quot;;
    wchar_t out2[1+wcsxfrm(NULL, in2, 0)];
    wcsxfrm(out2, in2, sizeof out2/sizeof *out2);

    printf(&quot;In the Swedish locale: &quot;);
    if(wcscmp(out1, out2) &lt; 0)
         printf(&quot;%ls before %ls\n&quot;, in1, in2);
    else
         printf(&quot;%ls before %ls\n&quot;, in2, in1);

    printf(&quot;In lexicographical comparison: &quot;);
    if(wcscmp(in1, in2) &lt; 0)
         printf(&quot;%ls before %ls\n&quot;, in1, in2);
    else
         printf(&quot;%ls before %ls\n&quot;, in2, in1);
}
 |output=
In the Swedish locale: år before ängel
In lexicographical comparison: ängel before år
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.4.4 | title=The wcsxfrm function | p=434-435}}
{{ref std c99}}
{{ref std | section=7.24.4.4.4 | title=The wcsxfrm function | p=380-381}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc strcoll}}
{{dsc inc | c/string/wide/dsc wcscoll}}
{{dsc inc | c/string/wide/dsc wcscmp}}
{{dsc inc | c/string/byte/dsc strxfrm}}
{{dsc see cpp | cpp/string/wide/wcsxfrm}}
{{dsc end}}

[[ar:c/string/wide/wcsxfrm]]
[[cs:c/string/wide/wcsxfrm]]
[[de:c/string/wide/wcsxfrm]]
[[es:c/string/wide/wcsxfrm]]
[[fr:c/string/wide/wcsxfrm]]
[[it:c/string/wide/wcsxfrm]]
[[ja:c/string/wide/wcsxfrm]]
[[ko:c/string/wide/wcsxfrm]]
[[pl:c/string/wide/wcsxfrm]]
[[pt:c/string/wide/wcsxfrm]]
[[ru:c/string/wide/wcsxfrm]]
[[tr:c/string/wide/wcsxfrm]]
[[zh:c/string/wide/wcsxfrm]]</text>
      <sha1>hrxk2scbxb7y80jo3y2zeauyx5yodp0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wctrans</title>
    <ns>0</ns>
    <id>6074</id>
    <revision>
      <id>76836</id>
      <parentid>74598</parentid>
      <timestamp>2015-03-03T14:04:32Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <text xml:space="preserve" bytes="1716">{{c/title|wctrans}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
wctrans_t wctrans( const char* str );
}}

Constructs a value of type {{c|wctrans_t}} that describes a LC_CTYPE category of wide character mapping. It may be one of the standard mappings, or a locale-specific mapping, such as {{tt|&quot;tojhira&quot;}} or {{tt|&quot;tojkana&quot;}}.

===Parameters===
{{par begin}}
{{par | str | C string holding the name of the desired mapping.
The following values of {{tt|str}} are supported in all C locales:
{{dsc begin}}
{{dsc hitem | Value of {{tt|str}}  | Effect  }}
{{dsc | {{tt|&quot;toupper&quot;}} | identifies the mapping used by {{lc|towupper}} }}
{{dsc | {{tt|&quot;tolower&quot;}} | identifies the mapping used by {{lc|towlower}} }}
{{dsc end}}
}}
{{dsc end}}

===Return value===
{{c|wctrans_t}} object suitable for use with {{lc|towctrans}} to map wide characters according to the named mapping of the current C locale or zero if {{tt|str}} does not name a mapping supported by the current C locale.

===References===
{{ref std c11}}
{{ref std | section=7.30.3.2.2 | title=The wctrans function | p=454}}
{{ref std c99}}
{{ref std | section=7.25.3.2,2 | title=The wctrans function | p=400}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc towctrans}}
{{dsc see cpp | cpp/string/wide/wctrans}}
{{dsc end}}

[[ar:c/string/wide/wctrans]]
[[cs:c/string/wide/wctrans]]
[[de:c/string/wide/wctrans]]
[[es:c/string/wide/wctrans]]
[[fr:c/string/wide/wctrans]]
[[it:c/string/wide/wctrans]]
[[ja:c/string/wide/wctrans]]
[[ko:c/string/wide/wctrans]]
[[pl:c/string/wide/wctrans]]
[[pt:c/string/wide/wctrans]]
[[ru:c/string/wide/wctrans]]
[[tr:c/string/wide/wctrans]]
[[zh:c/string/wide/wctrans]]</text>
      <sha1>jen9j3fd3b1sxyp2g8wy8fqugd5f17j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wctype</title>
    <ns>0</ns>
    <id>6061</id>
    <revision>
      <id>76832</id>
      <parentid>74594</parentid>
      <timestamp>2015-03-03T13:27:14Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2400">{{c/title|wctype}}
{{c/string/wide/navbar}}
{{ddcl | header=wctype.h |notes={{mark since c95}}|
wctype_t wctype( const char* str );
}}

Constructs a value of type {{c|wctype_t}} that describes a LC_CTYPE category of wide character classification. It may be one of the standard classification categories, or a locale-specific category, such as {{tt|&quot;jkanji&quot;}}.

===Parameters===
{{par begin}}
{{par | str | C string holding the name of the desired category}}
{{par end}}

The following values of {{tt|str}} are supported in all C locales:
{{dsc begin}}
{{dsc hitem | value of {{tt|str}}  | effect  }}
{{dsc | {{tt|&quot;alnum&quot;}} | identifies the category used by {{lc|iswalnum}} }}
{{dsc | {{tt|&quot;alpha&quot;}} | identifies the category used by {{lc|iswalpha}} }}
{{dsc | {{tt|&quot;blank&quot;}} | identifies the category used by {{lc|iswblank}} {{mark c99}}}}
{{dsc | {{tt|&quot;cntrl&quot;}} | identifies the category used by {{lc|iswcntrl}} }}
{{dsc | {{tt|&quot;digit&quot;}} | identifies the category used by {{lc|iswdigit}} }}
{{dsc | {{tt|&quot;graph&quot;}} | identifies the category used by {{lc|iswgraph}} }}
{{dsc | {{tt|&quot;lower&quot;}} | identifies the category used by {{lc|iswlower}} }}
{{dsc | {{tt|&quot;print&quot;}} | identifies the category used by {{lc|iswprint}} }}
{{dsc | {{tt|&quot;space&quot;}} | identifies the category used by {{lc|iswspace}} }}
{{dsc | {{tt|&quot;upper&quot;}} | identifies the category used by {{lc|iswupper}} }}
{{dsc | {{tt|&quot;xdigit&quot;}} | identifies the category used by {{lc|iswxdigit}} }}
{{dsc end}}

===Return value===
{{c|wctype_t}} object suitable for use with {{lc|iswctype}} to classify wide characters according to the named category of the current C locale or zero if {{tt|str}} does not name a category supported by the current C locale.

===References===
{{ref std c11}}
{{ref std | section=7.30.2.2.2 | title=The wctype function | p=452}}
{{ref std c99}}
{{ref std | section=7.25.2.2.2 | title=The wctype function | p=398}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc iswctype}}
{{dsc see cpp | cpp/string/wide/wctype}}
{{dsc end}}

[[ar:c/string/wide/wctype]]
[[cs:c/string/wide/wctype]]
[[de:c/string/wide/wctype]]
[[es:c/string/wide/wctype]]
[[fr:c/string/wide/wctype]]
[[it:c/string/wide/wctype]]
[[ja:c/string/wide/wctype]]
[[ko:c/string/wide/wctype]]
[[pl:c/string/wide/wctype]]
[[pt:c/string/wide/wctype]]
[[ru:c/string/wide/wctype]]
[[tr:c/string/wide/wctype]]
[[zh:c/string/wide/wctype]]</text>
      <sha1>k9ei9nmm273c38rc3r4xot82qv3j84q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wmemchr</title>
    <ns>0</ns>
    <id>6088</id>
    <revision>
      <id>76882</id>
      <parentid>76726</parentid>
      <timestamp>2015-03-04T14:50:15Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2038">{{c/title|wmemchr}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl |notes={{mark since c95}}|
wchar_t *wmemchr( const wchar_t *ptr, wchar_t ch, size_t count );
}}
{{dcl end}}

Locates the first occurrence of wide character {{tt|ch}} in the initial {{tt|count}} wide characters of the wide character array or integer array of compatible type, pointed to by {{tt|ptr}}. 

If {{tt|count}} is zero, the function returns a null pointer.

===Parameters===
{{par begin}}
{{par | ptr | pointer to the wide character array to be examined}}
{{par | ch | wide character to search for}}
{{par | count | number of wide characters to examine}}
{{par end}}

===Return value===
Pointer to the location of the wide character, or a null pointer if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t str[] = L&quot;诺不轻信，故人不负我\0诺不轻许，故我不负人。&quot;;
    size_t sz = sizeof str / sizeof *str;

    wchar_t target = L'许';
    wchar_t* result = wmemchr(str, target, sz);

    if (result) {
        setlocale(LC_ALL, &quot;en_US.utf8&quot;);
        printf(&quot;Found '%lc' at position %td\n&quot;,target, result - str);
    }
}
|p=true
 | output=
Found '许' at position 14
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.5.8  | title=The wmemchr function | p=438}}
{{ref std c99}}
{{ref std | section=7.24.4.5.8  | title=The wmemchr function | p=384}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc memchr}}
{{dsc inc | c/string/wide/dsc wcschr}}
{{dsc see cpp | cpp/string/wide/wmemchr}}
{{dsc end}}

[[ar:c/string/wide/wmemchr]]
[[cs:c/string/wide/wmemchr]]
[[de:c/string/wide/wmemchr]]
[[es:c/string/wide/wmemchr]]
[[fr:c/string/wide/wmemchr]]
[[it:c/string/wide/wmemchr]]
[[ja:c/string/wide/wmemchr]]
[[ko:c/string/wide/wmemchr]]
[[pl:c/string/wide/wmemchr]]
[[pt:c/string/wide/wmemchr]]
[[ru:c/string/wide/wmemchr]]
[[tr:c/string/wide/wmemchr]]
[[zh:c/string/wide/wmemchr]]</text>
      <sha1>d0kph3aoepkqwe8je3z52hyzy9k28n1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wmemcmp</title>
    <ns>0</ns>
    <id>6089</id>
    <revision>
      <id>76866</id>
      <parentid>76719</parentid>
      <timestamp>2015-03-04T13:12:06Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3155">{{c/title|wmemcmp}}
{{c/string/wide/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
int wmemcmp( const wchar_t *lhs, const wchar_t *rhs, size_t count );
}}

Compares the first {{tt|count}} wide characters of the wide character (or compatible integer type) arrays pointed to by {{tt|lhs}} and {{tt|rhs}}. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of wide characters that differ in the arrays being compared.

If {{tt|count}} is zero, the function does nothing.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the wide character arrays to compare}}
{{par | count | number of wide characters to examine}}
{{par end}}

===Return value===
Negative value if the value of the first differing wide character in {{tt|lhs}} is less than the value of the corresponding wide character in {{tt|rhs}}: {{tt|lhs}} precedes {{tt|rhs}} in lexicographical order.

{{c|0}} if all {{tt|count}} wide characters of {{tt|lhs}} and {{tt|rhs}} are equal.

Positive value if the value of the first differing wide character in {{tt|lhs}} is greater than the value of the corresponding wide character in {{tt|rhs}}: {{tt|rhs}} precedes {{tt|lhs}} in lexicographical order.

===Notes===
This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it examines: nulls as well as invalid wide characters are compared too.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

void demo(const wchar_t* lhs, const wchar_t* rhs, size_t sz)
{
    for(size_t n = 0; n &lt; sz; ++n) putwchar(lhs[n]);
    int rc = wmemcmp(lhs, rhs, sz);
    if(rc == 0)
        wprintf(L&quot; compares equal to &quot;);
    else if(rc &lt; 0)
        wprintf(L&quot; precedes &quot;);
    else if(rc &gt; 0)
        wprintf(L&quot; follows &quot;);
    for(size_t n = 0; n &lt; sz; ++n) putwchar(rhs[n]);
    wprintf(L&quot; in lexicographical order\n&quot;);
}

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);

    wchar_t a1[] = {L'α',L'β',L'γ'};
    wchar_t a2[] = {L'α',L'β',L'δ'};

    size_t sz = sizeof a1 / sizeof *a1;
    demo(a1, a2, sz);
    demo(a2, a1, sz);
    demo(a1, a1, sz);
}
 | output=
αβγ precedes αβδ in lexicographical order
αβδ follows αβγ in lexicographical order
αβγ compares equal to αβγ in lexicographical order
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.4.5 | title=The wmemcmp function | p=435}}
{{ref std c99}}
{{ref std | section=7.24.4.4.5 | title=The wmemcmp function | p=381}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wcscmp}}
{{dsc inc | c/string/byte/dsc memcmp}}
{{dsc inc | c/string/wide/dsc wcsncmp}}
{{dsc see cpp | cpp/string/wide/wmemcmp}}
{{dsc end}}

[[ar:c/string/wide/wmemcmp]]
[[cs:c/string/wide/wmemcmp]]
[[de:c/string/wide/wmemcmp]]
[[es:c/string/wide/wmemcmp]]
[[fr:c/string/wide/wmemcmp]]
[[it:c/string/wide/wmemcmp]]
[[ja:c/string/wide/wmemcmp]]
[[ko:c/string/wide/wmemcmp]]
[[pl:c/string/wide/wmemcmp]]
[[pt:c/string/wide/wmemcmp]]
[[ru:c/string/wide/wmemcmp]]
[[tr:c/string/wide/wmemcmp]]
[[zh:c/string/wide/wmemcmp]]</text>
      <sha1>kms11ei0gv11m8tw359cih5lzzh04uh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wmemcpy</title>
    <ns>0</ns>
    <id>6091</id>
    <revision>
      <id>76856</id>
      <parentid>76682</parentid>
      <timestamp>2015-03-04T12:32:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="4024">{{c/title|wmemcpy|wmemcpy_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl rev begin|num=1}}
{{dcl | until=c99 | since=c95 |
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count );
}}
{{dcl | since=c99 |
wchar_t *wmemcpy(wchar_t *restrict dest, const wchar_t *restrict src,
                 size_t count );
}}
{{dcl rev end}}
{{dcl | since=c11 |num=2|
errno_t wmemcpy_s( wchar_t *restrict dest, rsize_t destsz,
                   const wchar_t *restrict src, rsize_t count );
}}
{{dcl end}}
@1@ Copies exactly {{tt|count}} successive wide characters from the wide character array pointed to by {{tt|src}} to the wide character array pointed to by {{tt|dest}}. If the objects overlap, the behavior is undefined. If {{tt|count}} is zero, the function does nothing.
@2@ Same as {{v|1}}, except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}
:* {{tt|count}} is greater than {{tt|destsz}} (overflow would occur)
:* overlap would occur between the source and the destination arrays
:As all bounds-checked functions, {{tt|wmemcpy_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the wide character array to copy from}}
{{par | count | number of wide characters to copy}}
{{par | destsz | max number of wide characters to write (the size of the destination buffer)}}
{{par end}}

===Return value===
@1@ returns a copy of {{tt|dest}}
@2@ returns zero on success, returns non-zero on error. Also, on error, fills the entire {{tt|dst}} up to and not including {{c|dst+dstsz}} with null wide characters, {{c|L'\0'}} (unless {{tt|dest}} is null or {{tt|destsz}} is greater than {{c|RSIZE_MAX/sizeof(wchar_t)}})

===Notes===
This function's analog for byte strings is {{lc|strncpy}}, not {{lc|strcpy}}.

This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it copies: nulls as well as invalid characters are copied too.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t from1[] = L&quot;नमस्ते&quot;;
    size_t sz1 = sizeof from1 / sizeof *from1;
    wchar_t from2[] = L&quot;Բարև&quot;;
    size_t sz2 = sizeof from2 / sizeof *from2;
    wchar_t to[sz1 + sz2];
    wmemcpy(to, from1, sz1); // copy from1, along with its null terminator
    wmemcpy(to + sz1, from2, sz2); // append from2, along with its null terminator

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    printf(&quot;Wide array contains: &quot;);
    for(size_t n = 0; n &lt; sizeof to / sizeof *to; ++n)
        if(to[n])
            printf(&quot;%lc&quot;, to[n]);
        else
            printf(&quot;\\0&quot;);
    printf(&quot;\n&quot;);
}
|p=true
 | output=
Wide array contains: नमस्ते\0Բարև\0
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.2.3  | title=The wmemcpy function | p=431}}
{{ref std | section=K.3.9.2.1.3 | title=The wmemcpy_s function | p=641}}
{{ref std c99}}
{{ref std | section=7.24.4.2.3  | title=The wmemcpy function | p=377}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/wide/dsc wmemmove}}
{{dsc inc | c/string/byte/dsc strncpy}}
{{dsc see cpp | cpp/string/wide/wmemcpy}}
{{dsc end}}

[[ar:c/string/wide/wmemcpy]]
[[cs:c/string/wide/wmemcpy]]
[[de:c/string/wide/wmemcpy]]
[[es:c/string/wide/wmemcpy]]
[[fr:c/string/wide/wmemcpy]]
[[it:c/string/wide/wmemcpy]]
[[ja:c/string/wide/wmemcpy]]
[[ko:c/string/wide/wmemcpy]]
[[pl:c/string/wide/wmemcpy]]
[[pt:c/string/wide/wmemcpy]]
[[ru:c/string/wide/wmemcpy]]
[[tr:c/string/wide/wmemcpy]]
[[zh:c/string/wide/wmemcpy]]</text>
      <sha1>3v03vxvdc1o7kh9rqqnhwiw2g38i46t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wmemmove</title>
    <ns>0</ns>
    <id>6090</id>
    <revision>
      <id>76858</id>
      <parentid>76683</parentid>
      <timestamp>2015-03-04T12:36:40Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="3500">{{c/title|wmemmove|wmemmove_s}}
{{c/string/wide/navbar}}
{{dcl begin}}
{{dcl header | wchar.h}}
{{dcl | since=c95 | num=1 |
wchar_t* wmemmove( wchar_t* dest, const wchar_t* src, size_t count );
}}
{{dcl | since=c11 |num=2|
errno_t wmemmove_s( wchar_t *dest, rsize_t destsz,
                    const wchar_t *src, rsize_t count);
}}
{{dcl end}}
@1@ Copies exactly {{tt|count}} successive wide characters from the wide character array pointed to by {{tt|src}} to the wide character array pointed to by {{tt|dest}}. If {{tt|count}} is zero, the function does nothing. The arrays may overlap: copying takes place as if the wide characters were copied to a temporary wide character array and then copied from the temporary array to {{tt|dest}}.
@2@ Same as {{v|1}}, except that the following errors are detected at runtime and call the currently installed [[c/error/set_constraint_handler_s|constraint handler]] function:
:* {{tt|src}} or {{tt|dest}} is a null pointer
:* {{tt|destsz}} or {{tt|count}} is greater than {{c|RSIZE_MAX/sizeof(wchar_t)}}
:* {{tt|count}} is greater than {{tt|destsz}} (overflow would occur)
:As all bounds-checked functions, {{tt|wmemmove_s}} is only guaranteed to be available if {{c|__STDC_LIB_EXT1__}} is defined by the implementation and if the user defines {{c|__STDC_WANT_LIB_EXT1__}} to the integer constant {{c|1}} before including {{tt|wchar.h}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the wide character array to copy from}}
{{par | destsz | max number of wide characters to write (the size of the destination buffer)}}
{{par | count | number of wide characters to copy}}
{{par end}}

===Return value===
@1@ Returns a copy of {{tt|dest}}
@2@ Returns zero on success, returns non-zero on error. Also, on error, fills the entire {{tt|dst}} up to and not including {{c|dst+dstsz}} with null wide characters, {{c|L'\0'}} (unless {{tt|dest}} is null or {{tt|destsz}} is greater than {{c|RSIZE_MAX/sizeof(wchar_t)}})

===Notes===
This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it copies: nulls as well as invalid characters are copied too.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    setlocale(LC_ALL, &quot;en_US.utf8&quot;);

    wchar_t str[] = L&quot;αβγδεζηθικλμνξοπρστυφχψω&quot;;
    printf(&quot;%ls\n&quot;, str);
    wmemmove(str+4, str+3, 3); // copy from [δεζ] to [εζη]
    printf(&quot;%ls\n&quot;, str);
}
 | output=
αβγδεζηθικλμνξοπρστυφχψω
αβγδδεζθικλμνξοπρστυφχψω
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.2.4  | title=The wmemmove function | p=432}}
{{ref std | section=K.3.9.2.1.4 | title=The wmemmove_s function | p=642}}
{{ref std c99}}
{{ref std | section=7.24.4.2.4  | title=The wmemmove function | p=378}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc memmove}}
{{dsc inc | c/string/wide/dsc wmemcpy}}
{{dsc see cpp | cpp/string/wide/wmemmove}}
{{dsc end}}

[[ar:c/string/wide/wmemmove]]
[[cs:c/string/wide/wmemmove]]
[[de:c/string/wide/wmemmove]]
[[es:c/string/wide/wmemmove]]
[[fr:c/string/wide/wmemmove]]
[[it:c/string/wide/wmemmove]]
[[ja:c/string/wide/wmemmove]]
[[ko:c/string/wide/wmemmove]]
[[pl:c/string/wide/wmemmove]]
[[pt:c/string/wide/wmemmove]]
[[ru:c/string/wide/wmemmove]]
[[tr:c/string/wide/wmemmove]]
[[zh:c/string/wide/wmemmove]]</text>
      <sha1>87dy4hyyq5jb9cvvh7ltm04q7i900ei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/string/wide/wmemset</title>
    <ns>0</ns>
    <id>6087</id>
    <revision>
      <id>76884</id>
      <parentid>76730</parentid>
      <timestamp>2015-03-04T15:04:54Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2138">{{c/title|wmemset}}
{{c/string/wide/navbar}}
{{ddcl | header=wchar.h |notes={{mark since c95}}|
wchar_t *wmemset( wchar_t *dest, wchar_t ch, size_t count );
}}

Copies the wide character {{tt|ch}} into each of the first {{tt|count}} wide characters of the wide character array (or integer array of compatible type) pointed to by {{tt|dest}}.

If overflow occurs, the behavior is undefined.

If {{tt|count}} is zero, the function does nothing.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to fill}}
{{par | ch | fill wide character }}
{{par | count | number of wide characters to fill}}
{{par end}}

===Return value===
Returns a copy of {{tt|dest}}

===Notes===
This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it writes: nulls as well as invalid wide characters are written too.

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;wchar.h&gt;
#include &lt;locale.h&gt;

int main(void)
{
    wchar_t ar[10] = L&quot;1234567890&quot;; // no trailing null in the array
    wmemset(ar, L'\U0001f34c', 5); // replaces [12345] with the 🍌 bananas
    wmemset(ar+5, L'蕉', 5); // replaces [67890] with the 蕉 bananas

    setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    for(size_t n = 0; n &lt; sizeof ar/sizeof *ar; ++n)
        putwchar(ar[n]);
    putwchar(L'\n');
}
 | output=
🍌🍌🍌🍌🍌蕉蕉蕉蕉蕉
}}

===References===
{{ref std c11}}
{{ref std | section=7.29.4.6.2  | title=The wmemset function | p=439}}
{{ref std c99}}
{{ref std | section=7.24.4.6.2  | title=The wmemset function | p=385}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/string/byte/dsc memset}}
{{dsc inc | c/string/wide/dsc wmemcpy}}
{{dsc see cpp | cpp/string/wide/wmemset}}
{{dsc end}}

[[ar:c/string/wide/wmemset]]
[[cs:c/string/wide/wmemset]]
[[de:c/string/wide/wmemset]]
[[es:c/string/wide/wmemset]]
[[fr:c/string/wide/wmemset]]
[[it:c/string/wide/wmemset]]
[[ja:c/string/wide/wmemset]]
[[ko:c/string/wide/wmemset]]
[[pl:c/string/wide/wmemset]]
[[pt:c/string/wide/wmemset]]
[[ru:c/string/wide/wmemset]]
[[tr:c/string/wide/wmemset]]
[[zh:c/string/wide/wmemset]]</text>
      <sha1>m3d0jteujq24vaap2pmosz7ezcgk4xi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread</title>
    <ns>0</ns>
    <id>6526</id>
    <revision>
      <id>79129</id>
      <parentid>78969</parentid>
      <timestamp>2015-06-24T15:07:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention the reserved identifiers, merge once_flag and ONCE_FLAG_INIT into call_once</comment>
      <text xml:space="preserve" bytes="2751">{{title|Thread support library}}
{{c/thread/navbar}}

If the macro constant {{tt|__STDC_NO_THREADS__}}{{mark c11}} is defined by the compiler, the header {{tt|&lt;threads.h&gt;}} and all of the names listed here are not provided.

===Threads===
{{dsc begin}}
{{dsc header | threads.h}}
{{dsc inc | c/thread/dsc thrd_t}}
{{dsc inc | c/thread/dsc thrd_create}}
{{dsc inc | c/thread/dsc thrd_equal}}
{{dsc inc | c/thread/dsc thrd_current}}
{{dsc inc | c/thread/dsc thrd_sleep}}
{{dsc inc | c/thread/dsc thrd_yield}}
{{dsc inc | c/thread/dsc thrd_exit}}
{{dsc inc | c/thread/dsc thrd_detach}}
{{dsc inc | c/thread/dsc thrd_join}}
{{dsc inc | c/thread/dsc thrd_errors}}
{{dsc inc | c/thread/dsc thrd_start_t}}
{{dsc end}}

===Mutual exclusion===
{{dsc begin}}
{{dsc header | threads.h}}
{{dsc inc | c/thread/dsc mtx_t}}
{{dsc inc | c/thread/dsc mtx_init}}
{{dsc inc | c/thread/dsc mtx_lock}}
{{dsc inc | c/thread/dsc mtx_timedlock}}
{{dsc inc | c/thread/dsc mtx_trylock}}
{{dsc inc | c/thread/dsc mtx_unlock}}
{{dsc inc | c/thread/dsc mtx_destroy}}
{{dsc inc | c/thread/dsc mtx_types}}
{{dsc h2 | Call once}}
{{dsc inc | c/thread/dsc call_once}}
{{dsc end}}

===Condition variables===
{{dsc begin}}
{{dsc header | threads.h}}
{{dsc | {{ttb|cnd_t}} | condition variable identifier | notes={{mark c11}}}}
{{dsc inc | c/thread/dsc cnd_init}}
{{dsc inc | c/thread/dsc cnd_signal}}
{{dsc inc | c/thread/dsc cnd_broadcast}}
{{dsc inc | c/thread/dsc cnd_wait}}
{{dsc inc | c/thread/dsc cnd_timedwait}}
{{dsc inc | c/thread/dsc cnd_destroy}}
{{dsc end}}

===Thread-local storage===
{{dsc begin}}
{{dsc header | threads.h}}
{{dsc inc | c/thread/dsc thread_local}}
{{dsc inc | c/thread/dsc tss_t}}
{{dsc inc | c/thread/dsc TSS_DTOR_ITERATIONS}}
{{dsc inc | c/thread/dsc tss_dtor_t}}
{{dsc inc | c/thread/dsc tss_create}}
{{dsc inc | c/thread/dsc tss_get}}
{{dsc inc | c/thread/dsc tss_set}}
{{dsc inc | c/thread/dsc tss_delete}}
{{dsc end}}

===Reserved identifiers===
Function names, type names, and enumeration constants that begin with either {{tt|cnd_}},
{{tt|mtx_}}, {{tt|thrd_}}, or {{tt|tss_}}, and a lowercase letter may be added to the declarations in the {{tt|&lt;threads.h&gt;}} header in future revisions of the C standard, and portable programs should not use those identifiers.

===References===
{{ref std c11}}
{{ref std | section=7.26 | title=Threads &lt;threads.h&gt; | p=376-387}}
{{ref std | section=7.31.15 | title=Threads &lt;threads.h&gt; | p=456}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread |Thread support library}}
{{dsc end}}

[[ar:c/thread]]
[[cs:c/thread]]
[[de:c/thread]]
[[es:c/thread]]
[[fr:c/thread]]
[[it:c/thread]]
[[ja:c/thread]]
[[ko:c/thread]]
[[pl:c/thread]]
[[pt:c/thread]]
[[ru:c/thread]]
[[tr:c/thread]]
[[zh:c/thread]]</text>
      <sha1>8e8vc2ireamnixkueax9b6cjpuo6hub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/ONCE FLAG INIT</title>
    <ns>0</ns>
    <id>9142</id>
    <redirect title="c/thread/call once" />
    <revision>
      <id>79131</id>
      <parentid>77645</parentid>
      <timestamp>2015-06-24T15:13:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>redirect to call_once</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[c/thread/call_once]]</text>
      <sha1>15ambdd88j2b5kdrvoiurmnw2ar6b9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/TSS DTOR ITERATIONS</title>
    <ns>0</ns>
    <id>9143</id>
    <revision>
      <id>77646</id>
      <parentid>75772</parentid>
      <timestamp>2015-04-02T12:03:07Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1012">{{c/title|TSS_DTOR_ITERATIONS}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
#define TSS_DTOR_ITERATIONS /* unspecified */
}}

Expands to a positive integral [[c/language/constant expression|constant expression]] defining the maximum number of times a destructor for thread-local storage pointer will be called by  {{lc|thrd_exit}}.

This constant is equivalent to the POSIX {{tt|PTHREAD_DESTRUCTOR_ITERATIONS}}

===References===
{{ref std c11}}
{{ref std | section=7.26.1/3 | title=TSS_DTOR_ITERATIONS | p=376}}
{{ref std end}}

[[ar:c/thread/TSS_DTOR_ITERATIONS]]
[[cs:c/thread/TSS_DTOR_ITERATIONS]]
[[de:c/thread/TSS_DTOR_ITERATIONS]]
[[es:c/thread/TSS_DTOR_ITERATIONS]]
[[fr:c/thread/TSS_DTOR_ITERATIONS]]
[[it:c/thread/TSS_DTOR_ITERATIONS]]
[[ja:c/thread/TSS_DTOR_ITERATIONS]]
[[ko:c/thread/TSS_DTOR_ITERATIONS]]
[[pl:c/thread/TSS_DTOR_ITERATIONS]]
[[pt:c/thread/TSS_DTOR_ITERATIONS]]
[[ru:c/thread/TSS_DTOR_ITERATIONS]]
[[tr:c/thread/TSS_DTOR_ITERATIONS]]
[[zh:c/thread/TSS_DTOR_ITERATIONS]]</text>
      <sha1>nu92f0y6t0fnwndkg8jqr2dmy5panpy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/call once</title>
    <ns>0</ns>
    <id>9196</id>
    <revision>
      <id>90364</id>
      <parentid>82741</parentid>
      <timestamp>2017-02-21T22:01:05Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>sort</comment>
      <text xml:space="preserve" bytes="2254">{{c/title|call_once|once_flag|ONCE_FLAG_INIT}}
{{c/thread/navbar}}
{{dcl begin}}
{{dcl header|threads.h}}
{{dcl | since=c11 | num =1 |
void call_once( once_flag* flag, void (*func)(void) );
}}
{{dcl | since=c11 | num=2|
typedef /* unspecified */ once_flag
}}
{{dcl | since=c11 | num=3|
#define ONCE_FLAG_INIT /* unspecified */
}}
{{dcl end}}

@1@ Calls function {{tt|func}} exactly once, even if invoked from several threads. The completion of the function {{tt|func}} synchronizes with all previous or subsequent calls to {{tt|call_once}} with the same {{tt|flag}} variable.
@2@ Complete object type capable of holding a flag used by {{tt|call_once}}
@3@ Expands to a value that can be used to initialize an object of type {{tt|once_flag}}.

===Parameters===
{{par begin}}
{{par | flag | pointer to an object of type {{tt|call_once}} that is used to ensure {{tt|func}} is called only once}}
{{par | func | the function to execute only once}}
{{par end}}

===Return value===
(none)

===Notes===
The POSIX equivalent of this function is [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_once.html pthread_once].

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;threads.h&gt;

void do_once(void) {
    puts(&quot;called once&quot;);
}

static once_flag flag = ONCE_FLAG_INIT;
int func(void* data)
{
    call_once(&amp;flag, do_once);
}

int main(void)
{
    thrd_t t1, t2, t3, t4;
    thrd_create(&amp;t1, func, NULL);
    thrd_create(&amp;t2, func, NULL);
    thrd_create(&amp;t3, func, NULL);
    thrd_create(&amp;t4, func, NULL);

    thrd_join(t1, NULL);
    thrd_join(t2, NULL);
    thrd_join(t3, NULL);
    thrd_join(t4, NULL);
}
|output=
called once
}}

===References===
{{ref std c11}}
{{ref std | section=7.26.2.1 | title=The call_once function | p=378}}
{{ref std | section=7.26.1/3 | title=ONCE_FLAG_INIT | p=376}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread/call_once}}
{{dsc end}}

[[ar:c/thread/call_once]]
[[cs:c/thread/call_once]]
[[de:c/thread/call_once]]
[[es:c/thread/call_once]]
[[fr:c/thread/call_once]]
[[it:c/thread/call_once]]
[[ja:c/thread/call_once]]
[[ko:c/thread/call_once]]
[[pl:c/thread/call_once]]
[[pt:c/thread/call_once]]
[[ru:c/thread/call_once]]
[[tr:c/thread/call_once]]
[[zh:c/thread/call_once]]</text>
      <sha1>8w56ew01d6ulgo6ypeb8b8xnisghgay</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/cnd broadcast</title>
    <ns>0</ns>
    <id>9198</id>
    <revision>
      <id>90315</id>
      <parentid>77650</parentid>
      <timestamp>2017-02-20T22:28:28Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1120">{{c/title|cnd_broadcast}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int cnd_broadcast( cnd_t *cond );
}}

Unblocks all thread that currently wait on condition variable pointed to by {{tt|cond}}. If no threads are blocked, does nothing and returns {{tt|thrd_success}}.

===Parameters===
{{par begin}}
{{par | cond | pointer to a condition variable}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.3.1 | title=The cnd_broadcast function | p=378}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc cnd_signal}}
{{dsc see cpp | cpp/thread/condition_variable_any/notify_all}}
{{dsc end}}

[[ar:c/thread/cnd_broadcast]]
[[cs:c/thread/cnd_broadcast]]
[[de:c/thread/cnd_broadcast]]
[[es:c/thread/cnd_broadcast]]
[[fr:c/thread/cnd_broadcast]]
[[it:c/thread/cnd_broadcast]]
[[ja:c/thread/cnd_broadcast]]
[[ko:c/thread/cnd_broadcast]]
[[pl:c/thread/cnd_broadcast]]
[[pt:c/thread/cnd_broadcast]]
[[ru:c/thread/cnd_broadcast]]
[[tr:c/thread/cnd_broadcast]]
[[zh:c/thread/cnd_broadcast]]</text>
      <sha1>6a0q30bagnilrsl3j2rdn06lv8kszv9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/cnd destroy</title>
    <ns>0</ns>
    <id>9194</id>
    <revision>
      <id>90321</id>
      <parentid>77651</parentid>
      <timestamp>2017-02-20T22:38:33Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="994">{{c/title|cnd_destroy}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
void cnd_destroy( cnd_t* cond );
}}

Destroys the condition variable pointed to by {{tt|cond}}.

If there are threads waiting on {{tt|cond}}, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | cond | pointer to the condition variable to destroy}}
{{par end}}

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.26.3.2 | title=The cnd_destroy function | p=378-379}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread/condition_variable_any/~condition_variable_any}}
{{dsc end}}

[[ar:c/thread/cnd_destroy]]
[[cs:c/thread/cnd_destroy]]
[[de:c/thread/cnd_destroy]]
[[es:c/thread/cnd_destroy]]
[[fr:c/thread/cnd_destroy]]
[[it:c/thread/cnd_destroy]]
[[ja:c/thread/cnd_destroy]]
[[ko:c/thread/cnd_destroy]]
[[pl:c/thread/cnd_destroy]]
[[pt:c/thread/cnd_destroy]]
[[ru:c/thread/cnd_destroy]]
[[tr:c/thread/cnd_destroy]]
[[zh:c/thread/cnd_destroy]]</text>
      <sha1>lnx7gm96rx80b5vsiu3tjg9q9mxt8cm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/cnd init</title>
    <ns>0</ns>
    <id>9197</id>
    <revision>
      <id>90311</id>
      <parentid>77652</parentid>
      <timestamp>2017-02-20T22:19:54Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1159">{{c/title|cnd_init}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int cnd_init( cnd_t* cond );
}}
Initializes new condition variable. The object pointed to by {{tt|cond}} will be set to value that identifies the condition variable.

===Parameters===
{{par begin}}
{{par | cond | pointer to a variable to store identifier of the condition variable to}}
{{par end}}

===Return value===
{{lc|thrd_success}} if the condition variable was successfully created. Otherwise returns {{lc|thrd_nomem}} if there was insufficient amount of memory or {{tt|thrd_error}} if another error occurred.

===References===
{{ref std c11}}
{{ref std | section=7.26.3.3 | title=The cnd_init function | p=379}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread/condition_variable_any/condition_variable_any}}
{{dsc end}}

[[ar:c/thread/cnd_init]]
[[cs:c/thread/cnd_init]]
[[de:c/thread/cnd_init]]
[[es:c/thread/cnd_init]]
[[fr:c/thread/cnd_init]]
[[it:c/thread/cnd_init]]
[[ja:c/thread/cnd_init]]
[[ko:c/thread/cnd_init]]
[[pl:c/thread/cnd_init]]
[[pt:c/thread/cnd_init]]
[[ru:c/thread/cnd_init]]
[[tr:c/thread/cnd_init]]
[[zh:c/thread/cnd_init]]</text>
      <sha1>ad54hxn7qhwmqfz4r6kluvb126ndxh9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/cnd signal</title>
    <ns>0</ns>
    <id>9199</id>
    <revision>
      <id>90313</id>
      <parentid>77653</parentid>
      <timestamp>2017-02-20T22:26:05Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1076">{{c/title|cnd_signal}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int cnd_signal( cnd_t *cond );
}}

Unblocks one thread that currently waits on condition variable pointed to by {{tt|cond}}. If no threads are blocked, does nothing and returns {{tt|thrd_success}}.

===Parameters===
{{par begin}}
{{par | cond | pointer to a condition variable}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.3.4 | title=The cnd_signal function | p=379}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc cnd_broadcast}}
{{dsc see cpp | cpp/thread/condition_variable_any/notify_one}}
{{dsc end}}

[[ar:c/thread/cnd_signal]]
[[cs:c/thread/cnd_signal]]
[[de:c/thread/cnd_signal]]
[[es:c/thread/cnd_signal]]
[[fr:c/thread/cnd_signal]]
[[it:c/thread/cnd_signal]]
[[ja:c/thread/cnd_signal]]
[[ko:c/thread/cnd_signal]]
[[pl:c/thread/cnd_signal]]
[[pt:c/thread/cnd_signal]]
[[ru:c/thread/cnd_signal]]
[[tr:c/thread/cnd_signal]]
[[zh:c/thread/cnd_signal]]</text>
      <sha1>s080lfudj0oxhrptw6wkdixeim8e2a7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/cnd timedwait</title>
    <ns>0</ns>
    <id>9206</id>
    <revision>
      <id>90319</id>
      <parentid>77997</parentid>
      <timestamp>2017-02-20T22:35:58Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1757">{{c/title|cnd_timedwait}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int cnd_timedwait( cnd_t* restrict cond, mtx_t* restrict mutex,
                   const struct timespec* restrict time_point );
}}

Atomically unlocks the mutex pointed to by {{tt|mutex}} and blocks on the condition variable pointed to by {{tt|cond}} until the thread is signalled by {{lc|cnd_signal}} or {{lc|cnd_broadcast}}, or until the {{c|TIME_UTC}} based time point pointed to by {{tt|time_point}} has been reached. The mutex is locked again before the function returns.

The behavior is undefined if the mutex is not already locked by the calling thread.

===Parameters===
{{par begin}}
{{par | cond | pointer to the condition variable to block on}}
{{par | mutex | pointer to the mutex to unlock for the duration of the block}}
{{par | duration | pointer to a object specifying timeout time to wait until}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{c|thrd_timedout}} if the timeout time has been reached before the mutex is locked, or  {{lc|thrd_error}} if an error occurred.

===References===
{{ref std c11}}
{{ref std | section=7.26.3.5 | title=The cnd_timedwait function | p=379-380}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc cnd_wait}}
{{dsc see cpp | cpp/thread/condition_variable_any/wait_until}}
{{dsc end}}

[[ar:c/thread/cnd_timedwait]]
[[cs:c/thread/cnd_timedwait]]
[[de:c/thread/cnd_timedwait]]
[[es:c/thread/cnd_timedwait]]
[[fr:c/thread/cnd_timedwait]]
[[it:c/thread/cnd_timedwait]]
[[ja:c/thread/cnd_timedwait]]
[[ko:c/thread/cnd_timedwait]]
[[pl:c/thread/cnd_timedwait]]
[[pt:c/thread/cnd_timedwait]]
[[ru:c/thread/cnd_timedwait]]
[[tr:c/thread/cnd_timedwait]]
[[zh:c/thread/cnd_timedwait]]</text>
      <sha1>qutsru9savqh93pvgmmuzm2lcdnwvla</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/cnd wait</title>
    <ns>0</ns>
    <id>9205</id>
    <revision>
      <id>90317</id>
      <parentid>77655</parentid>
      <timestamp>2017-02-20T22:32:58Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1316">{{c/title|cnd_wait}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int cnd_wait( cnd_t* cond, mtx_t* mutex );
}}
Atomically unlocks the mutex pointed to by {{tt|mutex}} and blocks on the condition variable pointed to by {{tt|cond}} until the thread is signalled by {{lc|cnd_signal}} or {{lc|cnd_broadcast}}. The mutex is locked again before the function returns.

The behavior is undefined if the mutex is not already locked by the calling thread.

===Parameters===
{{par begin}}
{{par | cond | pointer to the condition variable to block on}}
{{par | mutex | pointer to the mutex to unlock for the duration of the block}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.3.6 | title=The cnd_wait function | p=380}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc cnd_timedwait}}
{{dsc see cpp | cpp/thread/condition_variable_any/wait}}
{{dsc end}}

[[ar:c/thread/cnd_wait]]
[[cs:c/thread/cnd_wait]]
[[de:c/thread/cnd_wait]]
[[es:c/thread/cnd_wait]]
[[fr:c/thread/cnd_wait]]
[[it:c/thread/cnd_wait]]
[[ja:c/thread/cnd_wait]]
[[ko:c/thread/cnd_wait]]
[[pl:c/thread/cnd_wait]]
[[pt:c/thread/cnd_wait]]
[[ru:c/thread/cnd_wait]]
[[tr:c/thread/cnd_wait]]
[[zh:c/thread/cnd_wait]]</text>
      <sha1>7cftjlwwq80q56e47pz7zjfbljddmdl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/mtx destroy</title>
    <ns>0</ns>
    <id>9195</id>
    <revision>
      <id>90394</id>
      <parentid>77656</parentid>
      <timestamp>2017-02-22T19:21:44Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="966">{{c/title|mtx_destroy}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
void mtx_destroy( mtx_t *mutex );
}}

Destroys the mutex pointed to by {{tt|mutex}}.

If there are threads waiting on {{tt|mutex}}, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | mutex | pointer to the mutex to destroy}}
{{par end}}

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.26.4.1 | title=The mtx_destroy function | p=380}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread/recursive_timed_mutex/~recursive_timed_mutex}}
{{dsc end}}

[[ar:c/thread/mtx_destroy]]
[[cs:c/thread/mtx_destroy]]
[[de:c/thread/mtx_destroy]]
[[es:c/thread/mtx_destroy]]
[[fr:c/thread/mtx_destroy]]
[[it:c/thread/mtx_destroy]]
[[ja:c/thread/mtx_destroy]]
[[ko:c/thread/mtx_destroy]]
[[pl:c/thread/mtx_destroy]]
[[pt:c/thread/mtx_destroy]]
[[ru:c/thread/mtx_destroy]]
[[tr:c/thread/mtx_destroy]]
[[zh:c/thread/mtx_destroy]]</text>
      <sha1>l1p5c9z4gphnku04bixl2k3b3hywsdl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/mtx init</title>
    <ns>0</ns>
    <id>9200</id>
    <revision>
      <id>90389</id>
      <parentid>77657</parentid>
      <timestamp>2017-02-22T19:15:40Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1394">{{c/title|mtx_init}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int mtx_init( mtx_t* mutex, int type );
}}

Creates a new mutex object with {{tt|type}}. The object pointed to by {{tt|mutex}} is set to an identifier of the newly created mutex.

{{tt|type}} must have one of the following values:

*{{lc|mtx_plain}} - a simple, non-recursive mutex is created.
*{{lc|mtx_timed}} - a non-recursive mutex, that supports timeout, is created.
*{{c|mtx_plain {{!}} mtx_recursive}} - a recursive mutex is created.
*{{c|mtx_timed {{!}} mtx_recursive}} - a recursive mutex, that supports timeout, is created.

===Parameters===
{{par begin}}
{{par | mutex | pointer to the mutex to initialize}}
{{par | type | the type of the mutex}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.4.2 | title=The mtx_init function | p=381}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread/recursive_timed_mutex/recursive_timed_mutex}}
{{dsc end}}

[[ar:c/thread/mtx_init]]
[[cs:c/thread/mtx_init]]
[[de:c/thread/mtx_init]]
[[es:c/thread/mtx_init]]
[[fr:c/thread/mtx_init]]
[[it:c/thread/mtx_init]]
[[ja:c/thread/mtx_init]]
[[ko:c/thread/mtx_init]]
[[pl:c/thread/mtx_init]]
[[pt:c/thread/mtx_init]]
[[ru:c/thread/mtx_init]]
[[tr:c/thread/mtx_init]]
[[zh:c/thread/mtx_init]]</text>
      <sha1>tmeoa3h1q11xz77qq4palerr6mnpvhy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/mtx lock</title>
    <ns>0</ns>
    <id>9201</id>
    <revision>
      <id>90390</id>
      <parentid>77658</parentid>
      <timestamp>2017-02-22T19:16:50Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1354">{{c/title|mtx_lock}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int mtx_lock( mtx_t* mutex );
}}

Blocks the current thread until the mutex pointed to by {{tt|mutex}} is locked.

The behavior is undefined if the current thread has already locked the mutex and the mutex is not recursive.

Prior calls to {{lc|mtx_unlock}} on the same mutex ''synchronize-with'' this operation, and all lock/unlock operations on any given mutex form a single total order (similar to the modification order of an atomic)

===Parameters===
{{par begin}}
{{par | mutex | pointer to the mutex to lock}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.4.3 | title=The mtx_lock function | p=381}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc mtx_timedlock}}
{{dsc inc | c/thread/dsc mtx_trylock}}
{{dsc inc | c/thread/dsc mtx_unlock}}
{{dsc see cpp | cpp/thread/recursive_timed_mutex/lock}}
{{dsc end}}

[[ar:c/thread/mtx_lock]]
[[cs:c/thread/mtx_lock]]
[[de:c/thread/mtx_lock]]
[[es:c/thread/mtx_lock]]
[[fr:c/thread/mtx_lock]]
[[it:c/thread/mtx_lock]]
[[ja:c/thread/mtx_lock]]
[[ko:c/thread/mtx_lock]]
[[pl:c/thread/mtx_lock]]
[[pt:c/thread/mtx_lock]]
[[ru:c/thread/mtx_lock]]
[[tr:c/thread/mtx_lock]]
[[zh:c/thread/mtx_lock]]</text>
      <sha1>3icxv8i8isexgutspvv8sh1ngl7okjf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/mtx timedlock</title>
    <ns>0</ns>
    <id>9202</id>
    <revision>
      <id>90391</id>
      <parentid>77659</parentid>
      <timestamp>2017-02-22T19:19:15Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1863">{{c/title|mtx_timedlock}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int mtx_timedlock( mtx_t *restrict mutex,
                   const struct timespec *restrict time_point );
}}

Blocks the current thread until the mutex pointed to by {{tt|mutex}} is locked or until the {{c|TIME_UTC}} based time point pointed to by {{tt|time_point}} has been reached.

The behavior is undefined if the current thread has already locked the mutex and the mutex is not recursive.

The behavior is undefined if the mutex does not support timeout.

Prior calls to {{lc|mtx_unlock}} on the same mutex ''synchronize-with'' this operation (if this operation succeeds), and all lock/unlock operations on any given mutex form a single total order (similar to the modification order of an atomic)

===Parameters===
{{par begin}}
{{par | mutex | pointer to the mutex to lock}}
{{par | time_point | pointer to the timeout time to wait until}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{c|thrd_timedout}} if the timeout time has been reached before the mutex is locked, {{lc|thrd_error}} if an error occurs.

===References===
{{ref std c11}}
{{ref std | section=7.26.4.4 | title=The mtx_timedlock function | p=381-382}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc mtx_lock}}
{{dsc inc | c/thread/dsc mtx_trylock}}
{{dsc inc | c/thread/dsc mtx_unlock}}
{{dsc see cpp | cpp/thread/recursive_timed_mutex/try_lock_until}}
{{dsc end}}

[[ar:c/thread/mtx_timedlock]]
[[cs:c/thread/mtx_timedlock]]
[[de:c/thread/mtx_timedlock]]
[[es:c/thread/mtx_timedlock]]
[[fr:c/thread/mtx_timedlock]]
[[it:c/thread/mtx_timedlock]]
[[ja:c/thread/mtx_timedlock]]
[[ko:c/thread/mtx_timedlock]]
[[pl:c/thread/mtx_timedlock]]
[[pt:c/thread/mtx_timedlock]]
[[ru:c/thread/mtx_timedlock]]
[[tr:c/thread/mtx_timedlock]]
[[zh:c/thread/mtx_timedlock]]</text>
      <sha1>r2si7cdqn2208lg9b953ectiuacshkv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/mtx trylock</title>
    <ns>0</ns>
    <id>9203</id>
    <revision>
      <id>90392</id>
      <parentid>77660</parentid>
      <timestamp>2017-02-22T19:20:24Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1427">{{c/title|mtx_trylock}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int mtx_trylock( mtx_t *mutex );
}}

Tries to lock the mutex pointed to by {{tt|mutex}} without blocking. Returns immediately if the mutex is already locked.

Prior calls to {{lc|mtx_unlock}} on the same mutex ''synchronize-with'' this operation (if this operation succeeds), and all lock/unlock operations on any given mutex form a single total order (similar to the modification order of an atomic)

===Parameters===
{{par begin}}
{{par | mutex | pointer to the mutex to lock}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_busy}} if the mutex has already been locked, {{lc|thrd_error}} if an error occurs.

===References===
{{ref std c11}}
{{ref std | section=7.26.4.5 | title=The mtx_trylock function | p=382}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc mtx_lock}}
{{dsc inc | c/thread/dsc mtx_timedlock}}
{{dsc inc | c/thread/dsc mtx_unlock}}
{{dsc see cpp | cpp/thread/recursive_timed_mutex/try_lock}}
{{dsc end}}

[[ar:c/thread/mtx_trylock]]
[[cs:c/thread/mtx_trylock]]
[[de:c/thread/mtx_trylock]]
[[es:c/thread/mtx_trylock]]
[[fr:c/thread/mtx_trylock]]
[[it:c/thread/mtx_trylock]]
[[ja:c/thread/mtx_trylock]]
[[ko:c/thread/mtx_trylock]]
[[pl:c/thread/mtx_trylock]]
[[pt:c/thread/mtx_trylock]]
[[ru:c/thread/mtx_trylock]]
[[tr:c/thread/mtx_trylock]]
[[zh:c/thread/mtx_trylock]]</text>
      <sha1>1wvi6wtz5gq1i0d876bgik1c6j7ilaw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/mtx types</title>
    <ns>0</ns>
    <id>9162</id>
    <revision>
      <id>77647</id>
      <parentid>74990</parentid>
      <timestamp>2015-04-02T12:15:25Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1051">{{c/title|mtx_plain|mtx_recursive|mtx_timed}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 | 1=
enum {
    mtx_plain = /* unspecified */,
    mtx_recursive = /* unspecified */,
    mtx_timed = /* unspecified */
};
}}

When passed to {{lc|mtx_init}}, identifies the type of a mutex to create.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|mtx_plain}} | plain mutex}}
{{dsc | {{tt|mtx_recursive}} | recursive mutex}}
{{dsc | {{tt|mtx_timed}} | timed mutex}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.26.1/5 | title=mtx_plain, mtx_recursive, mtx_timed | p=377}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc mtx_init}}
{{dsc end}}

[[ar:c/thread/mtx_types]]
[[cs:c/thread/mtx_types]]
[[de:c/thread/mtx_types]]
[[es:c/thread/mtx_types]]
[[fr:c/thread/mtx_types]]
[[it:c/thread/mtx_types]]
[[ja:c/thread/mtx_types]]
[[ko:c/thread/mtx_types]]
[[pl:c/thread/mtx_types]]
[[pt:c/thread/mtx_types]]
[[ru:c/thread/mtx_types]]
[[tr:c/thread/mtx_types]]
[[zh:c/thread/mtx_types]]</text>
      <sha1>j9pegbkho3zxrbt1rf9sc51swezzy0e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/mtx unlock</title>
    <ns>0</ns>
    <id>9204</id>
    <revision>
      <id>90393</id>
      <parentid>77661</parentid>
      <timestamp>2017-02-22T19:21:05Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1358">{{c/title|mtx_unlock}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int mtx_unlock( mtx_t *mutex );
}}

Unlocks the mutex pointed to by {{tt|mutex}}. 

The behavior is undefined if the mutex is not locked by the calling thread.

This function ''synchronizes-with'' subsequent {{lc|mtx_lock}}, {{lc|mtx_trylock}}, or {{lc|mtx_timedlock}} on the same mutex. All lock/unlock operations on any given mutex form a single total order (similar to the modification order of an atomic).

===Parameters===
{{par begin}}
{{par | mutex | pointer to the mutex to unlock}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.4.6 | title=The mtx_unlock function | p=382}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc mtx_lock}}
{{dsc inc | c/thread/dsc mtx_timedlock}}
{{dsc inc | c/thread/dsc mtx_trylock}}
{{dsc see cpp | cpp/thread/recursive_timed_mutex/unlock}}
{{dsc end}}

[[ar:c/thread/mtx_unlock]]
[[cs:c/thread/mtx_unlock]]
[[de:c/thread/mtx_unlock]]
[[es:c/thread/mtx_unlock]]
[[fr:c/thread/mtx_unlock]]
[[it:c/thread/mtx_unlock]]
[[ja:c/thread/mtx_unlock]]
[[ko:c/thread/mtx_unlock]]
[[pl:c/thread/mtx_unlock]]
[[pt:c/thread/mtx_unlock]]
[[ru:c/thread/mtx_unlock]]
[[tr:c/thread/mtx_unlock]]
[[zh:c/thread/mtx_unlock]]</text>
      <sha1>0h9d5sk3ju8k9jiins0xefy7t7fbidi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd create</title>
    <ns>0</ns>
    <id>9144</id>
    <revision>
      <id>90286</id>
      <parentid>77662</parentid>
      <timestamp>2017-02-19T21:32:18Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1988">{{c/title|thrd_create}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int thrd_create( thrd_t *thr, thrd_start_t func, void *arg );
}}

Creates a new thread executing the function {{tt|func}}. The function is invoked as {{c|func(arg)}}.

If successful, the object pointed to by {{tt|thr}} is set to the identifier of the new thread.

The completion of this function ''synchronizes-with'' the beginning of the thread.

===Parameters===
{{par begin}}
{{par | thr | pointer to memory location to put the identifier of the new thread}}
{{par | func | function to execute}}
{{par | arg | argument to pass to the function}}
{{par end}}

===Return value===
{{lc|thrd_success}} if the creation of the new thread was successful. Otherwise returns {{lc|thrd_nomem}} if there was insufficient amount of memory or {{tt|thrd_error}} if another error occurred.

===Notes===
The thread identifiers may be reused for new threads once the thread has finished and joined or detached.

The type {{tt|thrd_start_t}} is a typedef of {{c|int(*)(void*)}}, which differs from the POSIX equivalent {{c|void*(*)(void*)}}

All thread-specific storage values (see {{lc|tss_create}}) are initialized to {{lc|NULL}}.

Return from the function {{tt|func}} is equivalent to calling {{lc|thrd_exit}} with the argument equal to the return value of {{tt|func}}.

===References===
{{ref std c11}}
{{ref std | section=7.26.5.1 | title=The thrd_create function | p=383}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc thrd_detach}}
{{dsc inc | c/thread/dsc thrd_join}}
{{dsc see cpp | cpp/thread/thread/thread}}
{{dsc end}}

[[ar:c/thread/thrd_create]]
[[cs:c/thread/thrd_create]]
[[de:c/thread/thrd_create]]
[[es:c/thread/thrd_create]]
[[fr:c/thread/thrd_create]]
[[it:c/thread/thrd_create]]
[[ja:c/thread/thrd_create]]
[[ko:c/thread/thrd_create]]
[[pl:c/thread/thrd_create]]
[[pt:c/thread/thrd_create]]
[[ru:c/thread/thrd_create]]
[[tr:c/thread/thrd_create]]
[[zh:c/thread/thrd_create]]</text>
      <sha1>qljyty4xf716a6aptofdgixwexmjixy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd current</title>
    <ns>0</ns>
    <id>9146</id>
    <revision>
      <id>90298</id>
      <parentid>89925</parentid>
      <timestamp>2017-02-19T22:06:57Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="823">{{c/title|thrd_current}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
thrd_t thrd_current(void);
}}

Returns the identifier of the calling thread.

===Parameters===
(none)

===Return value===
The identifier of the calling thread.

===References===
{{ref std c11}}
{{ref std | section=7.26.5.2 | title=The thrd_current function | p=383}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread/get_id}}
{{dsc end}}

[[ar:c/thread/thrd_current]]
[[cs:c/thread/thrd_current]]
[[de:c/thread/thrd_current]]
[[es:c/thread/thrd_current]]
[[fr:c/thread/thrd_current]]
[[it:c/thread/thrd_current]]
[[ja:c/thread/thrd_current]]
[[ko:c/thread/thrd_current]]
[[pl:c/thread/thrd_current]]
[[pt:c/thread/thrd_current]]
[[ru:c/thread/thrd_current]]
[[tr:c/thread/thrd_current]]
[[zh:c/thread/thrd_current]]</text>
      <sha1>ig562rfgh7wco9q6hfnhnttx7x1pi0u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd detach</title>
    <ns>0</ns>
    <id>9145</id>
    <revision>
      <id>90290</id>
      <parentid>77664</parentid>
      <timestamp>2017-02-19T21:41:59Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1069">{{c/title|thrd_detach}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int thrd_detach( thrd_t thr );
}}

Detaches the thread identified by {{tt|thr}} from the current environment. The resources held by the thread will be freed automatically once the thread exits.

===Parameters===
{{par begin}}
{{par | thr | identifier of the thread to detach}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.5.3 | title=The thrd_detach function | p=383-384}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc thrd_join}}
{{dsc see cpp | cpp/thread/thread/detach}}
{{dsc end}}

[[ar:c/thread/thrd_detach]]
[[cs:c/thread/thrd_detach]]
[[de:c/thread/thrd_detach]]
[[es:c/thread/thrd_detach]]
[[fr:c/thread/thrd_detach]]
[[it:c/thread/thrd_detach]]
[[ja:c/thread/thrd_detach]]
[[ko:c/thread/thrd_detach]]
[[pl:c/thread/thrd_detach]]
[[pt:c/thread/thrd_detach]]
[[ru:c/thread/thrd_detach]]
[[tr:c/thread/thrd_detach]]
[[zh:c/thread/thrd_detach]]</text>
      <sha1>7lpaliyqm80aulkmnq82yxtduw5andy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd equal</title>
    <ns>0</ns>
    <id>9147</id>
    <revision>
      <id>90296</id>
      <parentid>77665</parentid>
      <timestamp>2017-02-19T22:00:20Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="954">{{c/title|thrd_equal}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int thrd_equal( thrd_t lhs, thrd_t rhs );
}}

Checks whether {{tt|lhs}} and {{tt|rhs}} refer to the same thread.

===Parameters===
{{par begin}}
{{par | lhs, rhs | threads to compare}}
{{par end}}

===Return value===
Non-zero value if {{tt|lhs}} and {{tt|rhs}} refer to the same value, {{c|0}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.5.4 | title=The thrd_equal function | p=384}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/thread/thread/id/operator_cmp}}
{{dsc end}}

[[ar:c/thread/thrd_equal]]
[[cs:c/thread/thrd_equal]]
[[de:c/thread/thrd_equal]]
[[es:c/thread/thrd_equal]]
[[fr:c/thread/thrd_equal]]
[[it:c/thread/thrd_equal]]
[[ja:c/thread/thrd_equal]]
[[ko:c/thread/thrd_equal]]
[[pl:c/thread/thrd_equal]]
[[pt:c/thread/thrd_equal]]
[[ru:c/thread/thrd_equal]]
[[tr:c/thread/thrd_equal]]
[[zh:c/thread/thrd_equal]]</text>
      <sha1>n6l12e9xj7nimq6stoudvb98kw2x4ar</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd errors</title>
    <ns>0</ns>
    <id>9152</id>
    <revision>
      <id>77648</id>
      <parentid>66926</parentid>
      <timestamp>2015-04-02T12:22:56Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1323">{{c/title|thrd_success|thrd_timedout|thrd_busy|thrd_nomem|thrd_error}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 | 1=
enum {
    thrd_success = /* unspecified */,
    thrd_nomem = /* unspecified */,
    thrd_timedout = /* unspecified */,
    thrd_busy = /* unspecified */,
    thrd_error = /* unspecified */
};
}}

Identifiers a thread error state.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|thrd_success}} | indicates successful return value}}
{{dsc | {{tt|thrd_timedout}} | indicates timed out return value}}
{{dsc | {{tt|thrd_busy}} | indicates unsuccessful return value due to resource temporary unavailable}}
{{dsc | {{tt|thrd_nomem}} | indicates unsuccessful return value due to out of memory condition}}
{{dsc | {{tt|thrd_error}} | indicates unsuccessful return value}}
{{dsc end}}

===References===
{{ref std c11}}
{{ref std | section=7.26.1/5 | title=thrd_success, thrd_timedout, ... | p=377}}
{{ref std end}}

[[ar:c/thread/thrd_errors]]
[[cs:c/thread/thrd_errors]]
[[de:c/thread/thrd_errors]]
[[es:c/thread/thrd_errors]]
[[fr:c/thread/thrd_errors]]
[[it:c/thread/thrd_errors]]
[[ja:c/thread/thrd_errors]]
[[ko:c/thread/thrd_errors]]
[[pl:c/thread/thrd_errors]]
[[pt:c/thread/thrd_errors]]
[[ru:c/thread/thrd_errors]]
[[tr:c/thread/thrd_errors]]
[[zh:c/thread/thrd_errors]]</text>
      <sha1>0wm103l0jyhgzyyvwxu4qyq6d5nhb7a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd exit</title>
    <ns>0</ns>
    <id>9148</id>
    <revision>
      <id>77666</id>
      <parentid>75777</parentid>
      <timestamp>2015-04-02T13:58:26Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1755">{{c/title|thrd_exit}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
_Noreturn void thrd_exit( int res );
}}

First, for every thread-specific storage key which was created with a non-null destructor and for which the associated value is non-null (see {{lc|tss_create}}), {{tt|thrd_exit}} sets the value associated with the key to {{c|NULL}} and then invokes the destructor with the previous value of the key. The order in which the destructors are invoked is unspecified.

If, after this, there remain keys with both non-null destructors and values (e.g. if a destructor executed {{lc|tss_set}}), the process is repeated up to {{lc|TSS_DTOR_ITERATIONS}} times.

FInally, the {{tt|thrd_exit}} function terminates execution of the calling thread and sets its result code to {{tt|res}}.

If the last thread in the program is terminated with {{tt|thrd_exit}}, the entire program terminates as if by calling {{lc|exit}} with {{lc|EXIT_SUCCESS}} as the argument (so the functions registered by {{lc|atexit}} are executed in the context of that last thread)

===Parameters===
{{par begin}}
{{par | res | the result value to return}}
{{par end}}

===Return value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.26.5.5 | title=The thrd_exit function | p=384}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc thrd_join}}
{{dsc inc | c/thread/dsc thrd_detach}}
{{dsc end}}

[[ar:c/thread/thrd_exit]]
[[cs:c/thread/thrd_exit]]
[[de:c/thread/thrd_exit]]
[[es:c/thread/thrd_exit]]
[[fr:c/thread/thrd_exit]]
[[it:c/thread/thrd_exit]]
[[ja:c/thread/thrd_exit]]
[[ko:c/thread/thrd_exit]]
[[pl:c/thread/thrd_exit]]
[[pt:c/thread/thrd_exit]]
[[ru:c/thread/thrd_exit]]
[[tr:c/thread/thrd_exit]]
[[zh:c/thread/thrd_exit]]</text>
      <sha1>mt27fv0rpy5zelxqmpxcalubjvdfvia</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd join</title>
    <ns>0</ns>
    <id>9149</id>
    <revision>
      <id>90288</id>
      <parentid>77667</parentid>
      <timestamp>2017-02-19T21:38:53Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="1359">{{c/title|thrd_join}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int thrd_join( thrd_t thr, int *res );
}}

Blocks the current thread until the thread identified by {{tt|thr}} finishes execution.

If {{tt|res}} is not a null pointer, the result code of the thread is put to the location pointed to by {{tt|res}}.

The termination of the thread ''synchronizes-with'' the completion of this function.

The behavior is undefined if the thread was previously detached or joined by another thread.

===Parameters===
{{par begin}}
{{par | thr | identifier of the thread to join}}
{{par | res | location to put the result code to}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===References===
{{ref std c11}}
{{ref std | section=7.26.5.6 | title=The thrd_join function | p=384-385}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc thrd_detach}}
{{dsc inc | c/thread/dsc thrd_exit}}
{{dsc see cpp | cpp/thread/thread/join}}
{{dsc end}}

[[ar:c/thread/thrd_join]]
[[cs:c/thread/thrd_join]]
[[de:c/thread/thrd_join]]
[[es:c/thread/thrd_join]]
[[fr:c/thread/thrd_join]]
[[it:c/thread/thrd_join]]
[[ja:c/thread/thrd_join]]
[[ko:c/thread/thrd_join]]
[[pl:c/thread/thrd_join]]
[[pt:c/thread/thrd_join]]
[[ru:c/thread/thrd_join]]
[[tr:c/thread/thrd_join]]
[[zh:c/thread/thrd_join]]</text>
      <sha1>kr5nx27jvjjf4sni4hjc4knr523188z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd sleep</title>
    <ns>0</ns>
    <id>9150</id>
    <revision>
      <id>90294</id>
      <parentid>77668</parentid>
      <timestamp>2017-02-19T21:54:24Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="2303">{{c/title|thrd_sleep}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int thrd_sleep( const struct timespec* time_point,
                struct timespec* remaining );
}}

Blocks the execution of the current thread for ''at least'' until the {{lc|TIME_UTC}} based time point pointed to by {{tt|time_point}} has been reached.

The sleep may resume earlier if a {{lc|signal}} that is not ignored is received. In such case, if {{tt|remaining}} is not {{lc|NULL}}, the remaining time duration is stored into the object pointed to by {{tt|remaining}}.

===Parameters===
{{par begin}}
{{par | time_point | pointer to the time point to sleep until}}
{{par | remaining | pointer to the object to put the remaining time on interruption. May be {{lc|NULL}}, in which case it is ignored}}
{{par end}}

===Return value===
{{c|0}} on successful sleep, {{c|-1}} if a signal occurred, other negative value if an error occurred.

===Notes===
{{tt|time_point}} and {{tt|remaining}} may point at the same object, which simplifies re-running the function after a signal.

The actual sleep time may be longer than requested because it is rounded up to the timer granularity and because of scheduling and context switching overhead.

The POSIX equivalent of this function is [http://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html nanosleep]

===Example===
{{example|code=
#include &lt;threads.h&gt;
#include &lt;time.h&gt;
#include &lt;stdio.h&gt;

int main(void)
{
    printf(&quot;Time: %s&quot;, ctime(&amp;(time_t){time(NULL)}));
    thrd_sleep(&amp;(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    printf(&quot;Time: %s&quot;, ctime(&amp;(time_t){time(NULL)}));
}
|output=
Time: Mon Feb  2 16:18:41 2015
Time: Mon Feb  2 16:18:42 2015
}}

===References===
{{ref std c11}}
{{ref std | section=7.26.5.7 | title=The thrd_sleep function | p=385}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc thrd_yield}}
{{dsc see cpp | cpp/thread/sleep_until}}
{{dsc end}}

[[ar:c/thread/thrd_sleep]]
[[cs:c/thread/thrd_sleep]]
[[de:c/thread/thrd_sleep]]
[[es:c/thread/thrd_sleep]]
[[fr:c/thread/thrd_sleep]]
[[it:c/thread/thrd_sleep]]
[[ja:c/thread/thrd_sleep]]
[[ko:c/thread/thrd_sleep]]
[[pl:c/thread/thrd_sleep]]
[[pt:c/thread/thrd_sleep]]
[[ru:c/thread/thrd_sleep]]
[[tr:c/thread/thrd_sleep]]
[[zh:c/thread/thrd_sleep]]</text>
      <sha1>igfi56rrz27jtr1nmit1n9eij33lfll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thrd yield</title>
    <ns>0</ns>
    <id>9151</id>
    <revision>
      <id>90292</id>
      <parentid>85242</parentid>
      <timestamp>2017-02-19T21:46:54Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="2333">{{c/title|thrd_yield}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
void thrd_yield();
}}

Provides a hint to the implementation to reschedule the execution of threads, allowing other threads to run. 

===Parameters===
(none)

===Return value===
(none)

===Notes===
The exact behavior of this function depends on the implementation, in particular on the mechanics of the OS scheduler in use and the state of the system. For example, a first-in-first-out realtime scheduler ({{tt|SCHED_FIFO}} in Linux) would suspend the current thread and put it on the back of the queue of the same-priority threads that are ready to run (and if there are no other threads at the same priority, {{tt|yield}} has no effect).

The POSIX equivalent of this function is [http://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_yield.html sched_yield].

===Example===
{{example|code=
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;threads.h&gt;

// utility function: difference between timespecs in microseconds
double usdiff(struct timespec s, struct timespec e)
{
    double sdiff = difftime(e.tv_sec, s.tv_sec);
    long nsdiff = e.tv_nsec - s.tv_nsec;
    if(nsdiff &lt; 0) return 1000000*(sdiff-1) + (1000000000L+nsdiff)/1000.0;
    else return 1000000*(sdiff) + nsdiff/1000.0;
}

// busy wait while yielding
void sleep_100us()
{
    struct timespec start, end;
    timespec_get(&amp;start, TIME_UTC);
    do {
        thrd_yield();
        timespec_get(&amp;end, TIME_UTC);
    } while(usdiff(start, end) &lt; 100.0);
}

int main()
{
    struct timespec start, end;
    timespec_get(&amp;start, TIME_UTC);
    sleep_100us();
    timespec_get(&amp;end, TIME_UTC);
    printf(&quot;Waited for %.3f us\n&quot;, usdiff(start, end));
}
|p=true
|output=
Waited for 100.344 us
}}

===References===
{{ref std c11}}
{{ref std | section=7.26.5.8 | title=The thrd_yield function | p=385}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc thrd_sleep}}
{{dsc see cpp | cpp/thread/yield}}
{{dsc end}}

[[ar:c/thread/thrd_yield]]
[[cs:c/thread/thrd_yield]]
[[de:c/thread/thrd_yield]]
[[es:c/thread/thrd_yield]]
[[fr:c/thread/thrd_yield]]
[[it:c/thread/thrd_yield]]
[[ja:c/thread/thrd_yield]]
[[ko:c/thread/thrd_yield]]
[[pl:c/thread/thrd_yield]]
[[pt:c/thread/thrd_yield]]
[[ru:c/thread/thrd_yield]]
[[tr:c/thread/thrd_yield]]
[[zh:c/thread/thrd_yield]]</text>
      <sha1>8tav779tzou9p8j50ejml8e8ftgu52c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/thread local</title>
    <ns>0</ns>
    <id>9141</id>
    <revision>
      <id>90300</id>
      <parentid>77643</parentid>
      <timestamp>2017-02-19T22:26:21Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C++ documentation</comment>
      <text xml:space="preserve" bytes="825">{{c/title|thread_local}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
#define thread_local _Thread_local
}}

Convenience macro which can be used to specify that an object has [[c/language/storage duration|thread-local storage duration]].

===References===
{{ref std c11}}
{{ref std | section=7.26.1/3 | title=thread_local | p=376}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/keyword/thread_local}}
{{dsc end}}

[[ar:c/thread/thread_local]]
[[cs:c/thread/thread_local]]
[[de:c/thread/thread_local]]
[[es:c/thread/thread_local]]
[[fr:c/thread/thread_local]]
[[it:c/thread/thread_local]]
[[ja:c/thread/thread_local]]
[[ko:c/thread/thread_local]]
[[pl:c/thread/thread_local]]
[[pt:c/thread/thread_local]]
[[ru:c/thread/thread_local]]
[[tr:c/thread/thread_local]]
[[zh:c/thread/thread_local]]</text>
      <sha1>jl0d5wimo8syh9dvfb7lno9tnsjfpeh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/tss create</title>
    <ns>0</ns>
    <id>9193</id>
    <revision>
      <id>77670</id>
      <parentid>75787</parentid>
      <timestamp>2015-04-02T14:14:24Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1910">{{c/title|tss_create}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int tss_create( tss_t* tss_key, tss_dtor_t destructor );
}}

Creates new thread-specific storage key and stores it in the object pointed to by {{tt|tss_key}}. Although the same key value may be used by different threads, the values bound to the key by {{lc|tss_set}} are maintained on a per-thread basis and persist for the life of the calling thread.

The value {{lc|NULL}} is associated with the newly created key in all existing threads, and upon thread creation, the values associated with all TSS keys is initialized to {{lc|NULL}}.

If {{tt|destructor}} is not a null pointer, then also associates the destructor which is called when the storage is released by {{lc|thrd_exit}} (but not by {{lc|tss_delete}} and not at program termination by {{lc|exit}}).

A call to {{tt|tss_create}} from within a thread-specific storage destructor results in undefined behavior.
===Parameters===
{{par begin}}
{{par | tss_key | pointer to memory location to store the new thread-specific storage key}}
{{par | destructor | pointer to a function to call at thread exit}}
{{par end}}

===Notes===
The POSIX equivalent of this function is [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_key_create.html pthread_key_create]

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===Example===
{{c/thread/tss_example}}

===References===
{{ref std c11}}
{{ref std | section=7.26.6.1 | title=The tss_create function | p=386}}
{{ref std end}}

[[ar:c/thread/tss_create]]
[[cs:c/thread/tss_create]]
[[de:c/thread/tss_create]]
[[es:c/thread/tss_create]]
[[fr:c/thread/tss_create]]
[[it:c/thread/tss_create]]
[[ja:c/thread/tss_create]]
[[ko:c/thread/tss_create]]
[[pl:c/thread/tss_create]]
[[pt:c/thread/tss_create]]
[[ru:c/thread/tss_create]]
[[tr:c/thread/tss_create]]
[[zh:c/thread/tss_create]]</text>
      <sha1>2ybio770m0jm96pd81osu7rc25mr12k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/tss delete</title>
    <ns>0</ns>
    <id>9190</id>
    <revision>
      <id>77671</id>
      <parentid>75802</parentid>
      <timestamp>2015-04-02T14:17:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2491">{{c/title|tss_delete}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
void tss_delete( tss_t tss_id );
}}

Destroys the thread-specific storage identified by {{tt|tss_id}}. 

The destructor, if one was registered by {{lc|tss_create}}, is not called (they are only called at thread exit, either by {{lc|thrd_exit}} or by returning from the thread function), it is the responsibility of the programmer to ensure that every thread that is aware of {{tt|tss_id}} performed all necessary cleanup, before the call to {{tt|tss_delete}} is made.

If {{tt|tss_delete}} is called while another thread is executing destructors for {{tt|tss_id}}, it's unspecified whether this changes the number of invocations to the associated destructor.

If {{tt|tss_delete}} is called while the calling thread is executing destructors, then the destructor associated with {{tt|tss_id}} will not be executed again on this thread.

===Parameters===
{{par begin}}
{{par | tss_id | thread-specific storage key previously returned by {{lc|tss_create}} and not yet deleted by {{lc|tss_delete}}}}
{{par end}}

===Return value===
(none)

===Notes===
The POSIX equivalent of this function is [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_key_delete.html pthread_key_delete]

The reason {{tt|tss_delete}} never calls destructors is that the destructors (called at thread exit) are normally intended to be executed by the same thread that originally set the value (via {{lc|tss_set}}) that the destructor will be dealing with, and may even rely on the values of that or other thread-specific data as seen by that thread. The thread executing {{tt|tss_delete}} has no access to other threads' TSS. Even if it were possible to call the destructor for each thread's own value associated with {{tt|tss_id}}, {{tt|tss_delete}} would have to synchronize with every thread if only to examine whether the value of this TSS in that thread is null (destructors are only called against non-null values).

===Example===
{{example}}

===References===
{{ref std c11}}
{{ref std | section=7.26.6.2 | title=The tss_delete function | p=386}}
{{ref std end}}

[[ar:c/thread/tss_delete]]
[[cs:c/thread/tss_delete]]
[[de:c/thread/tss_delete]]
[[es:c/thread/tss_delete]]
[[fr:c/thread/tss_delete]]
[[it:c/thread/tss_delete]]
[[ja:c/thread/tss_delete]]
[[ko:c/thread/tss_delete]]
[[pl:c/thread/tss_delete]]
[[pt:c/thread/tss_delete]]
[[ru:c/thread/tss_delete]]
[[tr:c/thread/tss_delete]]
[[zh:c/thread/tss_delete]]</text>
      <sha1>r3hho0gszadzpns47by4e3q9l03z8gw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/tss get</title>
    <ns>0</ns>
    <id>9192</id>
    <revision>
      <id>77672</id>
      <parentid>75790</parentid>
      <timestamp>2015-04-02T14:24:03Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1390">{{c/title|tss_get}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
void *tss_get( tss_t tss_key );
}}

Returns the value held in thread-specific storage for the current thread identified by {{tt|tss_key}}. Different threads may get different values identified by the same key.

On thread startup (see {{lc|thrd_create}}), the values associated with all TSS keys are NULL. Different value may be placed in the thread-specific storage with {{lc|tss_set}}.

===Parameters===
{{par begin}}
{{par | tss_key | thread-specific storage key, obtained from {{lc|tss_create}} and not deleted by {{lc|tss_delete}} }}
{{par end}}

===Return value===
The value on success, {{lc|NULL}} on failure.

===Notes===
The POSIX equivalent for this function is [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_getspecific.html pthread_getspecific]

===Example===
{{example}}

===References===
{{ref std c11}}
{{ref std | section=7.26.6.3 | title=The tss_get function | p=386}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc tss_set}}
{{dsc end}}

[[ar:c/thread/tss_get]]
[[cs:c/thread/tss_get]]
[[de:c/thread/tss_get]]
[[es:c/thread/tss_get]]
[[fr:c/thread/tss_get]]
[[it:c/thread/tss_get]]
[[ja:c/thread/tss_get]]
[[ko:c/thread/tss_get]]
[[pl:c/thread/tss_get]]
[[pt:c/thread/tss_get]]
[[ru:c/thread/tss_get]]
[[tr:c/thread/tss_get]]
[[zh:c/thread/tss_get]]</text>
      <sha1>animkccjbp2y5m5obyo19h7mf4zmjno</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/thread/tss set</title>
    <ns>0</ns>
    <id>9191</id>
    <revision>
      <id>77673</id>
      <parentid>75789</parentid>
      <timestamp>2015-04-02T14:37:48Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="1721">{{c/title|tss_set}}
{{c/thread/navbar}}
{{ddcl | header=threads.h | since=c11 |
int tss_set( tss_t tss_id, void *val );
}}
Sets the value of the thread-specific storage identified by {{tt|tss_id}} for the current thread to {{tt|val}}. Different threads may set different values to the same key.

The destructor, if available, is not invoked.

===Parameters===
{{par begin}}
{{par | tss_id | thread-specific storage key, obtained from {{lc|tss_create}} and not deleted by {{lc|tss_delete}}}}
{{par | val | value to set thread-specific storage to}}
{{par end}}

===Return value===
{{lc|thrd_success}} if successful, {{lc|thrd_error}} otherwise.

===Notes===
The POSIX equivalent of this function is [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_setspecific.html pthread_setspecific]

Typically TSS is used to store pointers to blocks of dynamically allocated memory that have been reserved for use by the calling thread.

{{tt|tss_set}} may be called in the TSS destructor. If the destructor exits with non-NULL value in the TSS storage, it will be retried by {{lc|thrd_exit}} up to {{lc|TSS_DTOR_ITERATIONS}} times, after which the storage will be lost.

===Example===
{{c/thread/tss_example}}

===References===
{{ref std c11}}
{{ref std | section=7.26.6.4 | title=The tss_set function | p=387}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/thread/dsc tss_get}}
{{dsc end}}

[[ar:c/thread/tss_set]]
[[cs:c/thread/tss_set]]
[[de:c/thread/tss_set]]
[[es:c/thread/tss_set]]
[[fr:c/thread/tss_set]]
[[it:c/thread/tss_set]]
[[ja:c/thread/tss_set]]
[[ko:c/thread/tss_set]]
[[pl:c/thread/tss_set]]
[[pt:c/thread/tss_set]]
[[ru:c/thread/tss_set]]
[[tr:c/thread/tss_set]]
[[zh:c/thread/tss_set]]</text>
      <sha1>q143vxyz6zv3g8uv6div9020mncykwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types</title>
    <ns>0</ns>
    <id>6320</id>
    <revision>
      <id>76292</id>
      <parentid>76230</parentid>
      <timestamp>2015-02-15T11:20:44Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>language links</comment>
      <text xml:space="preserve" bytes="2008">{{title|Type support}}
{{c/types/navbar}}
===Basic types===

====[[c/language/types | Fundamental types defined by the language]]====

====Additional basic types and convenience macros====
{{dsc begin}}
{{dsc header | stddef.h}}
{{dsc inc | c/types/dsc size_t}}
{{dsc inc | c/types/dsc ptrdiff_t}}
{{dsc inc | c/types/dsc NULL}}
{{dsc inc | c/types/dsc max_align_t}}
{{dsc inc | c/types/dsc offsetof}}
{{dsc header | stdalign.h}}
{{dsc macro const | alignas | nolink=true |convenience macro, expands to keyword [[c/keyword/_Alignas|_Alignas]]|notes={{mark c11}}}}
{{dsc macro const | alignof | nolink=true |convenience macro, expands to keyword [[c/keyword/_Alignof|_Alignof]]|notes={{mark c11}}}}
{{dsc macro const | __alignas_is_defined | nolink=true | expands to integer constant {{tt|1}}|notes={{mark c11}}}}
{{dsc macro const | __alignof_is_defined | nolink=true | expands to integer constant {{tt|1}}|notes={{mark c11}}}}
{{dsc header | stdnoreturn.h}}
{{dsc macro const | noreturn | nolink=true | convenience macro, expands to [[c/keyword/_Noreturn|_Noreturn]]|notes={{mark c11}}}}
{{dsc end}}

====[[c/types/boolean | Boolean type support]] {{mark since c99}}====

====[[c/types/integer | Fixed width integer types]] {{mark since c99}}====

====[[c/types/limits| Numeric limits]]====

===References===
{{ref std c11}}
{{ref std | section=7.15 | title=Alignment &lt;stdalign.h&gt; | p=268}}
{{ref std | section=7.19 | title=Common definitions &lt;stddef.h&gt; | p=288}}
{{ref std | section=7.23 | title=_Noreturn &lt;stdnoreturn.h&gt; | p=361}}
{{ref std c99}}
{{ref std | section=7.19 | title=Common definitions &lt;stddef.h&gt; | p=254}}
{{ref std c89}}
{{ref std | section=4.1.5 | title=Common definitions &lt;stddef.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/types |Type support library}}
{{dsc end}}

[[ar:c/types]]
[[cs:c/types]]
[[de:c/types]]
[[es:c/types]]
[[fr:c/types]]
[[it:c/types]]
[[ja:c/types]]
[[ko:c/types]]
[[pl:c/types]]
[[pt:c/types]]
[[ru:c/types]]
[[tr:c/types]]
[[zh:c/types]]</text>
      <sha1>8hoacmpodz7temne88fsd48ucphoe15</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/NULL</title>
    <ns>0</ns>
    <id>9389</id>
    <revision>
      <id>88127</id>
      <parentid>88126</parentid>
      <timestamp>2016-11-04T15:50:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="1602">{{c/title|NULL}}
{{c/types/navbar}}
{{dcl begin}}
{{dcl header | stddef.h}}
{{dcl header | string.h}}
{{dcl header | wchar.h}}
{{dcl header | time.h}}
{{dcl header | locale.h}}
{{dcl header | stdio.h}}
{{dcl header | stdlib.h}}
{{dcl |
#define NULL /*implementation-defined*/
}}
{{dcl end}}

The macro {{tt|NULL}} is an implementation-defined null pointer constant, which may be
* an integer [[c/language/constant_expression#Integer_constant_expression|constant expression]] with the value {{c|0}}
* an integer constant expression with the value 0 [[c/language/conversion#Pointer_conversions|cast to the type]] {{c|void*}}

A null pointer constant may be [[c/language/conversion#Pointer_conversions|converted]] to any pointer type; such conversion results in the null pointer value of that type.

===Possible implementation===
{{eq fun
 | 1=
// C++ compatible:
#define NULL 0
// C++ incompatible:
#define NULL (10*2 - 20)
#define NULL ((void*)0)
}}

===Example===
{{example |
 | code=
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
int main(void)
{    
    // any kind of pointer can be set to NULL
    int* p = NULL;
    struct S *s = NULL;
    void(*f)(int, double) = NULL;

    // many pointer-returning functions use null pointers to indicate error
    char *ptr = malloc(10);
    if (ptr == NULL) printf(&quot;Out of memory&quot;);
    free(ptr);
}
 | p=true
 | output=
(none)
}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/types/NULL}}
{{dsc end}}

[[de:c/types/NULL]]
[[es:c/types/NULL]]
[[fr:c/types/NULL]]
[[it:c/types/NULL]]
[[ja:c/types/NULL]]
[[pt:c/types/NULL]]
[[ru:c/types/NULL]]
[[zh:c/types/NULL]]</text>
      <sha1>3lp37dysxcl1no0r3dzqjigxw8efwlm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/boolean</title>
    <ns>0</ns>
    <id>13791</id>
    <revision>
      <id>89327</id>
      <parentid>89323</parentid>
      <timestamp>2017-01-18T13:42:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 89323 by [[Special:Contributions/41.251.153.224|41.251.153.224]] ([[User talk:41.251.153.224|talk]]) back to how it is in 7.18/3 (even though it's a bit illogical)</comment>
      <text xml:space="preserve" bytes="1341">{{title|Boolean type support library}}
{{c/types/navbar}}

The C programming language, as of C99, supports Boolean arithmetic with the built-in type {{tt|_Bool}} (see [[c/keyword/_Bool|_Bool]]). When the header {{tt|&lt;stdbool.h&gt;}} is included, the Boolean type is also accessible as {{tt|bool}}.

[[c/language/operator_logical|Standard logical operators]] {{c|&amp;&amp;}}, {{c|{{!!}}}}, {{c|!}} can be used with the Boolean type in any combination. 

A program may undefine and perhaps then redefine the macros {{tt|bool}}, {{tt|true}} and {{tt|false}}.

===Macros===
{{dsc begin}}
{{dsc hitem | Macro name | Expands to }}
{{dsc | {{tt|bool}} | {{c|_Bool}} }}
{{dsc | {{tt|true}} | integer constant {{tt|1}} }}
{{dsc | {{tt|false}} | integer constant {{tt|0}} }}
{{dsc | {{tt|__bool_true_false_are_defined}} | integer constant {{tt|1}} }}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdbool.h&gt;

int main(void)
{
    bool a=true, b=false;
    printf(&quot;%d\n&quot;, a&amp;&amp;b);
    printf(&quot;%d\n&quot;, a{{!!}}b);
    printf(&quot;%d\n&quot;, !b);
}
 | p=true
 | output=
0
1
1
}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/keyword/bool | bool}}
{{dsc end}}

[[de:c/types/boolean]]
[[es:c/types/boolean]]
[[fr:c/types/boolean]]
[[it:c/types/boolean]]
[[ja:c/types/boolean]]
[[pt:c/types/boolean]]
[[ru:c/types/boolean]]
[[zh:c/types/boolean]]</text>
      <sha1>tp3zac51kw3kf8nqj0ujq2vbxforx1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/integer</title>
    <ns>0</ns>
    <id>6396</id>
    <revision>
      <id>87651</id>
      <parentid>83522</parentid>
      <timestamp>2016-09-16T13:57:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>as spotted on cpp/header/cinttypes, macros do not include the percent character</comment>
      <text xml:space="preserve" bytes="9263">{{title | Fixed width integer types {{mark since c99}}}}
{{c/types/navbar}}

===Types===

{{dsc begin}}
{{dsc header | stdint.h}}
{{dsc | {{tt|int8_t}}&lt;br&gt;{{tt|int16_t}}&lt;br&gt;{{tt|int32_t}}&lt;br&gt;{{tt|int64_t}} | signed integer type with width of&lt;br&gt; exactly 8, 16, 32 and 64 bits respectively&lt;br&gt;with no padding bits and using 2's complement for negative values&lt;br&gt;(provided only if the implementation directly supports the type) }}
{{dsc | {{tt|int_fast8_t}}&lt;br&gt;{{tt|int_fast16_t}}&lt;br&gt;{{tt|int_fast32_t}}&lt;br&gt;{{tt|int_fast64_t}} | fastest signed integer type with width of&lt;br&gt; at least 8, 16, 32 and 64 bits respectively }}
{{dsc | {{tt|int_least8_t}}&lt;br&gt;{{tt|int_least16_t}}&lt;br&gt;{{tt|int_least32_t}}&lt;br&gt;{{tt|int_least64_t}} | smallest signed integer type with width of&lt;br&gt; at least 8, 16, 32 and 64 bits respectively }}
{{dsc | {{tt|intmax_t}} | maximum width integer type }}
{{dsc | {{tt|intptr_t}} | integer type capable of holding a pointer}}{{dsc | {{tt|uint8_t}}&lt;br&gt;{{tt|uint16_t}}&lt;br&gt;{{tt|uint32_t}}&lt;br&gt;{{tt|uint64_t}} | unsigned integer type with width of&lt;br&gt; exactly 8, 16, 32 and 64 bits respectively &lt;br&gt;(provided only if the implementation directly supports the type) }}
{{dsc | {{tt|uint_fast8_t}}&lt;br&gt;{{tt|uint_fast16_t}}&lt;br&gt;{{tt|uint_fast32_t}}&lt;br&gt;{{tt|uint_fast64_t}} | fastest unsigned integer type with width of&lt;br&gt; at least 8, 16, 32 and 64 bits respectively }}
{{dsc | {{tt|uint_least8_t}}&lt;br&gt;{{tt|uint_least16_t}}&lt;br&gt;{{tt|uint_least32_t}}&lt;br&gt;{{tt|uint_least64_t}} | smallest unsigned integer type with width of&lt;br&gt; at least 8, 16, 32 and 64 bits respectively }}
{{dsc | {{tt|uintmax_t}} | maximum width unsigned integer type }}
{{dsc | {{tt|uintptr_t}} | unsigned integer type capable of holding a pointer}}
{{dsc end}}

===Macro constants===
{{dsc begin}}
{{dsc header | stdint.h}}
{{dsc h2 | Signed integers : minimum value}}
{{dsc macro const | INT8_MIN&lt;br&gt;INT16_MIN&lt;br&gt;INT32_MIN&lt;br&gt;INT64_MIN |  minimum value of an object of type {{lc|int8_t}}, {{lc|int16_t}}, {{lc|int32_t}}, {{lc|int64_t}} | nolink=true }}
{{dsc macro const | INT_FAST8_MIN&lt;br&gt;INT_FAST16_MIN&lt;br&gt;INT_FAST32_MIN&lt;br&gt;INT_FAST64_MIN |  minimum value of an object of type {{lc|int_fast8_t}}, {{lc|int_fast16_t}}, {{lc|int_fast32_t}}, {{lc|int_fast64_t}} | nolink=true }}
{{dsc macro const | INT_LEAST8_MIN&lt;br&gt;INT_LEAST16_MIN&lt;br&gt;INT_LEAST32_MIN&lt;br&gt;INT_LEAST64_MIN |  minimum value of an object of type {{lc|int_least8_t}}, {{lc|int_least16_t}}, {{lc|int_least32_t}}, {{lc|int_least64_t}} | nolink=true }}
{{dsc macro const | INTPTR_MIN | minimum value of an object of type {{lc|intptr_t}} | nolink=true }}
{{dsc macro const | INTMAX_MIN | minimum value of an object of type {{lc|intmax_t}} | nolink=true }}
{{dsc h2 | Signed integers : maximum value| nolink=true }}

{{dsc macro const | INT8_MAX&lt;br&gt;INT16_MAX&lt;br&gt;INT32_MAX&lt;br&gt;INT64_MAX |  maximum value of an object of type {{lc|int8_t}}, {{lc|int16_t}}, {{lc|int32_t}}, {{lc|int64_t}} | nolink=true }}
{{dsc macro const | INT_FAST8_MAX&lt;br&gt;INT_FAST16_MAX&lt;br&gt;INT_FAST32_MAX&lt;br&gt;INT_FAST64_MAX |  maximum value of an object of type {{lc|int_fast8_t}}, {{lc|int_fast16_t}}, {{lc|int_fast32_t}}, {{lc|int_fast64_t}} | nolink=true }}
{{dsc macro const | INT_LEAST8_MAX&lt;br&gt;INT_LEAST16_MAX&lt;br&gt;INT_LEAST32_MAX&lt;br&gt;INT_LEAST64_MAX |  maximum value of an object of type {{lc|int_least8_t}}, {{lc|int_least16_t}}, {{lc|int_least32_t}}, {{lc|int_least64_t}} | nolink=true }}
{{dsc macro const | INTPTR_MAX | maximum value of an object of type {{lc|intptr_t}} | nolink=true }}
{{dsc macro const | INTMAX_MAX | maximum value of an object of type {{lc|intmax_t}} | nolink=true }}
{{dsc h2 | Unsigned integers : maximum value| nolink=true }}{{dsc macro const | UINT8_MAX&lt;br&gt;UINT16_MAX&lt;br&gt;UINT32_MAX&lt;br&gt;UINT64_MAX |  maximum value of an object of type {{lc|uint8_t}}, {{lc|uint16_t}}, {{lc|uint32_t}}, {{lc|uint64_t}} | nolink=true }}
{{dsc macro const | UINT_FAST8_MAX&lt;br&gt;UINT_FAST16_MAX&lt;br&gt;UINT_FAST32_MAX&lt;br&gt;UINT_FAST64_MAX |  maximum value of an object of type {{lc|uint_fast8_t}}, {{lc|uint_fast16_t}}, {{lc|uint_fast32_t}}, {{lc|uint_fast64_t}} | nolink=true }}
{{dsc macro const | UINT_LEAST8_MAX&lt;br&gt;UINT_LEAST16_MAX&lt;br&gt;UINT_LEAST32_MAX&lt;br&gt;UINT_LEAST64_MAX |  maximum value of an object of type {{lc|uint_least8_t}}, {{lc|uint_least16_t}}, {{lc|uint_least32_t}}, {{lc|uint_least64_t}} | nolink=true }}
{{dsc macro const | UINTPTR_MAX | maximum value of an object of type {{lc|uintptr_t}} | nolink=true }}
{{dsc macro const | UINTMAX_MAX | maximum value of an object of type {{lc|uintmax_t}} | nolink=true }}
{{dsc end}}

===Function macros for minimum-width integer constants===

{{dsc begin}}
{{dsc macro fun | INT8_C&lt;br&gt;INT16_C&lt;br&gt;INT32_C&lt;br&gt;INT64_C | expands to an integer constant expression having the value specified by its argument and the type {{c|int_least8_t}}, {{c|int_least16_t}}, {{c|int_least32_t}}, {{c|int_least64_t}} respectively | nolink=true}}
{{dsc macro fun | INTMAX_C | expands to an integer constant expression having the value specified by its argument and the type {{c|intmax_t}} | nolink=true}}
{{dsc macro fun | UINT8_C&lt;br&gt;UINT16_C&lt;br&gt;UINT32_C&lt;br&gt;UINT64_C | expands to an integer constant expression having the value specified by its argument and the type {{c|uint_least8_t}}, {{c|uint_least16_t}}, {{c|uint_least32_t}}, {{c|uint_least64_t}} respectively | nolink=true}}
{{dsc macro fun | UINTMAX_C | expands to an integer constant expression having the value specified by its argument and the type {{c|uintmax_t}} | nolink=true}}
{{dsc end}}

{{source|
#include &lt;stdint.h&gt;
UINT64_C(0x123) // might expand to 0x123ULL or 0x123UL
}}


===Format macro constants===
{{dsc begin}}
{{dsc header | inttypes.h}}
{{dsc end}}

====Format constants for the {{lc|fprintf}} family of functions====
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! rowspan=3 | Equivalent&lt;br&gt;for {{c|int}} or&lt;br&gt;{{c|unsigned int}}
! rowspan=3 | Description
! colspan=5 | Macros for data types
|-
| &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{vertical|{{tt|[u]int'''x'''_t}}}}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
| {{vertical|{{tt|[u]int_least'''x'''_t}}}}
| {{vertical|{{tt|[u]int_fast'''x'''_t}}}}
| rowspan=2 | {{vertical|{{tt|[u]intmax_t}}}}
| rowspan=2 | {{vertical|{{tt|[u]intptr_t}}}}
|-
| colspan=3 | '''x''' = 8, 16, 32 or 64
|-
! {{tt|d}}
| rowspan=2 style=&quot;text-align:left;&quot; | output of a signed decimal integer value
| PRId'''x'''
| PRIdLEAST'''x'''
| PRIdFAST'''x'''
| PRIdMAX
| PRIdPTR
|-
! {{tt|i}}
| PRIi'''x'''
| PRIiLEAST'''x'''
| PRIiFAST'''x'''
| PRIiMAX
| PRIiPTR
|-
! {{tt|u}}
| style=&quot;text-align:left;&quot; | output of an unsigned decimal integer value
| PRIu'''x'''
| PRIuLEAST'''x'''
| PRIuFAST'''x'''
| PRIuMAX
| PRIuPTR
|-
! {{tt|o}}
| style=&quot;text-align:left;&quot; | output of an unsigned octal integer value
| PRIo'''x'''
| PRIoLEAST'''x'''
| PRIoFAST'''x'''
| PRIoMAX
| PRIoPTR
|-
! {{tt|x}}
| style=&quot;text-align:left;&quot; | output of an unsigned lowercase hexadecimal integer value
| PRIx'''x'''
| PRIxLEAST'''x'''
| PRIxFAST'''x'''
| PRIxMAX
| PRIxPTR
|-
! {{tt|X}}
| style=&quot;text-align:left;&quot; | output of an unsigned uppercase hexadecimal integer value
| PRIX'''x'''
| PRIXLEAST'''x'''
| PRIXFAST'''x'''
| PRIXMAX
| PRIXPTR
|}
====Format constants for the {{lc|fscanf}} family of functions====
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! rowspan=3 | Equivalent&lt;br&gt;for {{c|int}} or&lt;br&gt;{{c|unsigned int}}
! rowspan=3 | Description
! colspan=5 | Macros for data types
|-
| &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{vertical|{{tt|[u]int'''x'''_t}}}}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
| {{vertical|{{tt|[u]int_least'''x'''_t}}}}
| {{vertical|{{tt|[u]int_fast'''x'''_t}}}}
| rowspan=2 | {{vertical|{{tt|[u]intmax_t}}}}
| rowspan=2 | {{vertical|{{tt|[u]intptr_t}}}}
|-
| colspan=3 | '''x''' = 8, 16, 32 or 64
|-
! {{tt|d}}
| style=&quot;text-align:left;&quot; | input of a signed decimal integer value
| SCNd'''x'''
| SCNdLEAST'''x'''
| SCNdFAST'''x'''
| SCNdMAX
| SCNdPTR
|-
! {{tt|i}}
| style=&quot;text-align:left;&quot; | input of a signed integer value (base is determined by the first characters parsed)
| SCNi'''x'''
| SCNiLEAST'''x'''
| SCNiFAST'''x'''
| SCNiMAX
| SCNiPTR
|-
! {{tt|u}}
| style=&quot;text-align:left;&quot; | input of an unsigned decimal integer value
| SCNu'''x'''
| SCNuLEAST'''x'''
| SCNuFAST'''x'''
| SCNuMAX
| SCNuPTR
|-
! {{tt|o}}
| style=&quot;text-align:left;&quot; | input of an unsigned octal integer value
| SCNo'''x'''
| SCNoLEAST'''x'''
| SCNoFAST'''x'''
| SCNoMAX
| SCNoPTR
|-
! {{tt|x}}
| style=&quot;text-align:left;&quot; | input of an unsigned hexadecimal integer value
| SCNx'''x'''
| SCNxLEAST'''x'''
| SCNxFAST'''x'''
| SCNxMAX
| SCNxPTR
|}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;inttypes.h&gt;

int main(void)
{
    printf(&quot;%zu\n&quot;, sizeof(int64_t));
    printf(&quot;%s\n&quot;, PRId64);
    printf(&quot;%+&quot;PRId64&quot;\n&quot;, INT64_MIN);
    printf(&quot;%+&quot;PRId64&quot;\n&quot;, INT64_MAX);
    
    int64_t n = 7;
    printf(&quot;%+&quot;PRId64&quot;\n&quot;, n);
}
 | p=true
 | output=
8
lld
-9223372036854775808
+9223372036854775807
+7
}}

===See also===
* [[c/language/arithmetic_types | Arithmetic types]]
{{dsc begin}}
{{dsc see cpp | cpp/types/integer | Fixed width integer types}}
{{dsc end}}

[[de:c/types/integer]]
[[es:c/types/integer]]
[[fr:c/types/integer]]
[[it:c/types/integer]]
[[ja:c/types/integer]]
[[pt:c/types/integer]]
[[ru:c/types/integer]]
[[zh:c/types/integer]]</text>
      <sha1>t2h43g7j65s585ws192zaqhvmdrm9uy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/limits</title>
    <ns>0</ns>
    <id>6397</id>
    <revision>
      <id>87743</id>
      <parentid>87741</parentid>
      <timestamp>2016-09-28T16:01:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-stray {</comment>
      <text xml:space="preserve" bytes="10213">{{title|Numeric limits}}
{{c/types/limits/navbar}}

===Limits of library types===
{{dsc begin}}
{{dsc header | stdint.h}}
{{dsc macro const | PTRDIFF_MIN | minimum value of object of {{lc|ptrdiff_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc macro const | PTRDIFF_MAX | maximum value of object of {{lc|ptrdiff_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc macro const | SIZE_MAX | maximum value of object of {{lc|size_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc macro const | SIG_ATOMIC_MIN | minimum value of object of {{lc|sig_atomic_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc macro const | SIG_ATOMIC_MAX | maximum value of object of {{lc|sig_atomic_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc header | wchar.h}}
{{dsc macro const | WCHAR_MIN | minimum value of object of {{c|wchar_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc macro const | WCHAR_MAX | maximum value of object of {{c|wchar_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc macro const | WINT_MIN | minimum value of object of {{c|wint_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc macro const | WINT_MAX | maximum value of object of {{c|wint_t}} type | notes={{mark c99}} | nolink=true}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdint.h&gt;
#include &lt;wchar.h&gt;

int main(void)
{
    printf(&quot;PTRDIFF_MIN    = %td\n&quot;, PTRDIFF_MIN);
    printf(&quot;PTRDIFF_MAX    = %+td\n&quot;, PTRDIFF_MAX);
    printf(&quot;SIZE_MAX       = %zu\n&quot;, SIZE_MAX);
    printf(&quot;SIG_ATOMIC_MIN = %+jd\n&quot;,(intmax_t)SIG_ATOMIC_MIN);
    printf(&quot;SIG_ATOMIC_MAX = %+jd\n&quot;,(intmax_t)SIG_ATOMIC_MAX);
    printf(&quot;WCHAR_MIN      = %+jd\n&quot;,(intmax_t)WCHAR_MIN);
    printf(&quot;WCHAR_MAX      = %+jd\n&quot;,(intmax_t)WCHAR_MAX);
    printf(&quot;WINT_MIN       = %jd\n&quot;, (intmax_t)WINT_MIN);
    printf(&quot;WINT_MAX       = %jd\n&quot;, (intmax_t)WINT_MAX);
}
 | p=true
 | output=
PTRDIFF_MIN    = -9223372036854775808
PTRDIFF_MAX    = +9223372036854775807
SIZE_MAX       = 18446744073709551615
SIG_ATOMIC_MIN = -2147483648
SIG_ATOMIC_MAX = +2147483647
WCHAR_MIN      = -2147483648
WCHAR_MAX      = +2147483647
WINT_MIN       = 0
WINT_MAX       = 4294967295
}}

===Limits of integer types===
{{dsc begin}}
{{dsc header | limits.h}}
{{dsc macro const | CHAR_BIT | number of bits in byte | nolink=true }}
{{dsc macro const | MB_LEN_MAX | maximum number of bytes in a multibyte character | nolink=true }}
{{dsc macro const | CHAR_MIN | minimum value of {{c|char}} | nolink=true }}
{{dsc macro const | CHAR_MAX | maximum value of {{c|char}} | nolink=true }}
{{dsc macro const | SCHAR_MIN&lt;br&gt;SHRT_MIN&lt;br&gt;INT_MIN&lt;br&gt;LONG_MIN&lt;br&gt;LLONG_MIN | nolink=true | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}} | minimum value of {{c|signed char}}, {{c|short}}, {{c|int}}, {{c|long}} and {{c|long long}} respectively}}
{{dsc macro const | SCHAR_MAX&lt;br&gt;SHRT_MAX&lt;br&gt;INT_MAX&lt;br&gt;LONG_MAX&lt;br&gt;LLONG_MAX | nolink=true | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}} | maximum value of {{c|signed char}}, {{c|short}}, {{c|int}}, {{c|long}} and {{c|long long}} respectively}}
{{dsc macro const | UCHAR_MAX&lt;br&gt;USHRT_MAX&lt;br&gt;UINT_MAX&lt;br&gt;ULONG_MAX&lt;br&gt;ULLONG_MAX | nolink=true | notes=&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{mark c99}} | maximum value of {{c|unsigned char}}, {{c|unsigned short}}, {{c|unsigned int}},&lt;br&gt;{{c|unsigned long}} and {{c|unsigned long long}} respectively}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;limits.h&gt;

int main(void)
{   
    printf(&quot;CHAR_BIT   = %d\n&quot;, CHAR_BIT);
    printf(&quot;MB_LEN_MAX = %d\n&quot;, MB_LEN_MAX);
    printf(&quot;\n&quot;);

    printf(&quot;CHAR_MIN   = %+d\n&quot;, CHAR_MIN);
    printf(&quot;CHAR_MAX   = %+d\n&quot;, CHAR_MAX);
    printf(&quot;SCHAR_MIN  = %+d\n&quot;, SCHAR_MIN);
    printf(&quot;SCHAR_MAX  = %+d\n&quot;, SCHAR_MAX);
    printf(&quot;UCHAR_MAX  = %u\n&quot;,  UCHAR_MAX);
    printf(&quot;\n&quot;);

    printf(&quot;SHRT_MIN   = %+d\n&quot;, SHRT_MIN);
    printf(&quot;SHRT_MAX   = %+d\n&quot;, SHRT_MAX);
    printf(&quot;USHRT_MAX  = %u\n&quot;,  USHRT_MAX);
    printf(&quot;\n&quot;);
    
    printf(&quot;INT_MIN    = %+d\n&quot;, INT_MIN);
    printf(&quot;INT_MAX    = %+d\n&quot;, INT_MAX);
    printf(&quot;UINT_MAX   = %u\n&quot;,  UINT_MAX);
    printf(&quot;\n&quot;);
    
    printf(&quot;LONG_MIN   = %+ld\n&quot;, LONG_MIN);
    printf(&quot;LONG_MAX   = %+ld\n&quot;, LONG_MAX);
    printf(&quot;ULONG_MAX  = %lu\n&quot;,  ULONG_MAX);
    printf(&quot;\n&quot;);
        
    printf(&quot;LLONG_MIN  = %+lld\n&quot;, LLONG_MIN);
    printf(&quot;LLONG_MAX  = %+lld\n&quot;, LLONG_MAX);
    printf(&quot;ULLONG_MAX = %llu\n&quot;,  ULLONG_MAX);
    printf(&quot;\n&quot;);
}
 | p=true
 | output=
CHAR_BIT   = 8
MB_LEN_MAX = 16

CHAR_MIN   = -128
CHAR_MAX   = +127
SCHAR_MIN  = -128
SCHAR_MAX  = +127
UCHAR_MAX  = 255

SHRT_MIN   = -32768
SHRT_MAX   = +32767
USHRT_MAX  = 65535

INT_MIN    = -2147483648
INT_MAX    = +2147483647
UINT_MAX   = 4294967295

LONG_MIN   = -9223372036854775808
LONG_MAX   = +9223372036854775807
ULONG_MAX  = 18446744073709551615

LLONG_MIN  = -9223372036854775808
LLONG_MAX  = +9223372036854775807
ULLONG_MAX = 18446744073709551615
}}

===Limits of floating point types===
{{dsc begin}}
{{dsc header | float.h}}
{{dsc macro const | FLT_RADIX | the radix (integer base) used by the representation of all three floating-point types | nolink=true }}
{{dsc macro const | DECIMAL_DIG | conversion from {{c|long double}} to decimal with at least {{tt|DECIMAL_DIG}} digits and back to {{c|long double}} is the identity conversion: this is the decimal precision required to serialize/deserialize a {{c|long double}} | nolink=true | notes={{mark c99}}}}
{{dsc macro const | FLT_DECIMAL_DIG&lt;br /&gt;DBL_DECIMAL_DIG&lt;br /&gt;LDBL_DECIMAL_DIG | conversion from {{c|float}}/{{c|double}}/{{c|long double}} to decimal with at least {{tt|FLT_DECIMAL_DIG}}/{{tt|DBL_DECIMAL_DIG}}/{{tt|LDBL_DECIMAL_DIG}} digits and back is the identity conversion: this is the decimal precision required to serialize/deserialize a floating point value. Defined to at least 6, 10, and 10 respectively, or 9 for IEEE float and 17 for IEEE double. (see also the C++ analog  [[cpp/types/numeric_limits/max_digits10|max_digits10]]) | nolink=true | notes={{mark c11}}}}
{{dsc macro const | FLT_MIN&lt;br&gt;DBL_MIN&lt;br&gt;LDBL_MIN | minimum, normalized, positive value of {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | FLT_TRUE_MIN&lt;br&gt;DBL_TRUE_MIN&lt;br&gt;LDBL_TRUE_MIN | minimum positive value of {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true |notes={{mark c11}}}}
{{dsc macro const | FLT_MAX&lt;br&gt;DBL_MAX&lt;br&gt;LDBL_MAX | maximum value of {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | FLT_EPSILON&lt;br&gt;DBL_EPSILON&lt;br&gt;LDBL_EPSILON | difference between {{c|1.0}} and the next representable value for {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | FLT_DIG&lt;br&gt;DBL_DIG&lt;br&gt;LDBL_DIG | number of decimal digits that are guaranteed to be preserved in text -&gt; {{c|float}}/{{c|double}}/{{c|long double}} -&gt; text roundtrip without change due to rounding or overflow (see the C++ analog  [[cpp/types/numeric_limits/digits10|digits10]] for detail) | nolink=true }}
{{dsc macro const | FLT_MANT_DIG&lt;br&gt;DBL_MANT_DIG&lt;br&gt;LDBL_MANT_DIG | number of base-{{tt|FLT_RADIX}} digits that are in the floating-point mantissa and that can be represented without losing precision for {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | FLT_MIN_EXP&lt;br&gt;DBL_MIN_EXP&lt;br&gt;LDBL_MIN_EXP | minimum negative integer such that {{tt|FLT_RADIX}} raised by power one less than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | FLT_MIN_10_EXP&lt;br&gt;DBL_MIN_10_EXP&lt;br&gt;LDBL_MIN_10_EXP | minimum negative integer such that {{c|10}} raised by power one less than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | FLT_MAX_EXP&lt;br&gt;DBL_MAX_EXP&lt;br&gt;LDBL_MAX_EXP | maximum positive integer such that {{tt|FLT_RADIX}} raised by power one less than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | FLT_MAX_10_EXP&lt;br&gt;DBL_MAX_10_EXP&lt;br&gt;LDBL_MAX_10_EXP | maximum positive integer such that {{c|10}} raised by power one less than that integer is a normalized {{c|float}}, {{c|double}} and {{c|long double}} respectively | nolink=true }}
{{dsc macro const | c/types/limits/FLT_ROUNDS | rounding mode of floating-point arithmetics, equal to {{c|float_round_style}} }}
{{dsc macro const | c/types/limits/FLT_EVAL_METHOD | use of extended precision for intermediate results: 0 not used, 1 {{c|double}} is used instead of {{c|float}}, 2: {{c|long double}} is used | notes={{mark c99}}}}
{{dsc macro const | FLT_HAS_SUBNORM&lt;br /&gt;DBL_HAS_SUBNORM&lt;br /&gt;LDBL_HAS_SUBNORM | whether the type supports subnormal ([[enwiki:Denormal number|denormal]]) numbers: -1 indeterminable, 0 absent, 1 present | nolink=true | notes={{mark c11}}}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;float.h&gt; 
#include &lt;math.h&gt;

int main(void)
{
    printf(&quot;FLT_RADIX    = %d\n&quot;, FLT_RADIX);
    printf(&quot;DECIMAL_DIG  = %d\n&quot;, DECIMAL_DIG);
    printf(&quot;FLT_MIN      = %e\n&quot;, FLT_MIN);
    printf(&quot;FLT_MAX      = %e\n&quot;, FLT_MAX);
    printf(&quot;FLT_EPSILON  = %e\n&quot;, FLT_EPSILON);
    printf(&quot;FLT_DIG      = %d\n&quot;, FLT_DIG);
    printf(&quot;FLT_MANT_DIG = %d\n&quot;, FLT_MANT_DIG);
    printf(&quot;FLT_MIN_EXP  = %d\n&quot;,  FLT_MIN_EXP);
    printf(&quot;FLT_MIN_10_EXP  = %d\n&quot;,  FLT_MIN_10_EXP);
    printf(&quot;FLT_MAX_EXP     = %d\n&quot;,  FLT_MAX_EXP);
    printf(&quot;FLT_MAX_10_EXP  = %d\n&quot;,  FLT_MAX_10_EXP);
    printf(&quot;FLT_ROUNDS      = %d\n&quot;,  FLT_ROUNDS);
    printf(&quot;FLT_EVAL_METHOD = %d\n&quot;,  FLT_EVAL_METHOD);
    printf(&quot;FLT_HAS_SUBNORM = %d\n&quot;,  FLT_HAS_SUBNORM);
}
 | p=true
 | output=
FLT_RADIX    = 2
DECIMAL_DIG  = 37
FLT_MIN      = 1.175494e-38
FLT_MAX      = 3.402823e+38
FLT_EPSILON  = 1.192093e-07
FLT_DIG      = 6
FLT_MANT_DIG = 24
FLT_MIN_EXP  = -125
FLT_MIN_10_EXP  = -37
FLT_MAX_EXP     = 128
FLT_MAX_10_EXP  = 38
FLT_ROUNDS      = 1
FLT_EVAL_METHOD = 1
FLT_HAS_SUBNORM = 1
}}

[[de:c/types/limits]]
[[es:c/types/limits]]
[[fr:c/types/limits]]
[[it:c/types/limits]]
[[ja:c/types/limits]]
[[pt:c/types/limits]]
[[ru:c/types/limits]]
[[zh:c/types/limits]]</text>
      <sha1>6omro49fy1b15hkmfki7dhggdctrtjr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/limits/FLT EVAL METHOD</title>
    <ns>0</ns>
    <id>8695</id>
    <revision>
      <id>76870</id>
      <parentid>73808</parentid>
      <timestamp>2015-03-04T14:07:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention contracting</comment>
      <text xml:space="preserve" bytes="1913">{{title|FLT_EVAL_METHOD}}
{{c/types/limits/navbar}}
{{ddcl | header=float.h | since=c99 |
#define FLT_EVAL_METHOD /* implementation defined */
}}

Specifies the precision in which all floating-point arithmetic operations other than assignment and cast are done. 

{{dsc begin}}
{{dsc hitem | Value | Explanation}}
{{dsc | negative values except {{tt|-1}} | implementation-defined behavior}}
{{dsc | {{tt|-1}} | the default precision is not known}}
{{dsc | {{tt|0}} | all operations and constants evaluate in the range and precision of the type used. Additionally, {{c|float_t}} and {{c|double_t}} are equivalent to {{c|float}} and {{c|double}} respectively}}
{{dsc | {{tt|1}} | all operations and constants evaluate in the range and precision of {{c|double}}. Additionally, both {{c|float_t}} and {{c|double_t}} are equivalent to {{c|double}}}}
{{dsc | {{tt|2}} | all operations and constants evaluate in the range and precision of {{c|long double}}. Additionally, both {{c|float_t}} and {{c|double_t}} are equivalent to {{c|long double}}}}
{{dsc end}}

===Notes===
Regardless of the value of {{lc|FLT_EVAL_METHOD}}, any floating-point expression may be ''contracted'', that is, calculated as if all intermediate results have infinite range and precision (unless [[c/preprocessor/impl|#pragma]] {{c|STDC FP_CONTRACT}} is off)

Cast and assignment strip away any extraneous range and precision: this models the action of storing a value from an extended-precision FPU register into a standard-sized memory location.

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/types/climits/FLT_EVAL_METHOD}}
{{dsc end}}

[[de:c/types/limits/FLT EVAL METHOD]]
[[es:c/types/limits/FLT EVAL METHOD]]
[[fr:c/types/limits/FLT EVAL METHOD]]
[[it:c/types/limits/FLT EVAL METHOD]]
[[ja:c/types/limits/FLT EVAL METHOD]]
[[pt:c/types/limits/FLT EVAL METHOD]]
[[ru:c/types/limits/FLT EVAL METHOD]]
[[zh:c/types/limits/FLT EVAL METHOD]]</text>
      <sha1>g96aufvr0l295ky0yv9345w0h1z2iwt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/limits/FLT ROUNDS</title>
    <ns>0</ns>
    <id>8697</id>
    <revision>
      <id>71780</id>
      <parentid>71777</parentid>
      <timestamp>2014-06-24T01:41:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-std:</comment>
      <text xml:space="preserve" bytes="1150">{{title|FLT_ROUNDS}}
{{c/types/limits/navbar}}
{{ddcl | header=float.h | since=c99 |
#define FLT_ROUNDS /* implementation defined */
}}

Returns the current rounding direction of floating-point arithmetic operations.

{{dsc begin}}
{{dsc hitem | Value | Explanation}}
{{dsc | {{tt|-1}} | the default rounding direction is not known}}
{{dsc | {{tt|0}} | toward zero, {{lc|FE_TOWARDZERO}}}}
{{dsc | {{tt|1}} | to nearest, {{lc|FE_TONEAREST}}}}
{{dsc | {{tt|2}} | towards positive infinity, {{lc|FE_UPWARD}}}}
{{dsc | {{tt|3}} | towards negative infinity, {{lc|FE_DOWNWARD}}}}
{{dsc | other values | implementation-defined behavior}}
{{dsc end}}

===Notes===
The rounding mode can be changed with {{lc|fesetround}} and {{lc|FLT_ROUNDS}} reflects that change.

===See also===
{{dsc begin}}
{{dsc inc | c/numeric/fenv/dsc feround}}
{{dsc see cpp | cpp/types/climits/FLT_ROUNDS}}
{{dsc end}}

[[de:c/types/limits/FLT ROUNDS]]
[[es:c/types/limits/FLT ROUNDS]]
[[fr:c/types/limits/FLT ROUNDS]]
[[it:c/types/limits/FLT ROUNDS]]
[[ja:c/types/limits/FLT ROUNDS]]
[[pt:c/types/limits/FLT ROUNDS]]
[[ru:c/types/limits/FLT ROUNDS]]
[[zh:c/types/limits/FLT ROUNDS]]</text>
      <sha1>if53jgoe0hxm40qx1p0m8016m9nomtb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/max align t</title>
    <ns>0</ns>
    <id>9388</id>
    <revision>
      <id>71467</id>
      <parentid>71462</parentid>
      <timestamp>2014-06-11T11:09:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 71462 by [[Special:Contributions/Newatthis|Newatthis]] ([[User talk:Newatthis|talk]]) this isn't the malloc page, this is supposed to show how max_align_t is used (granted, it didn't before, but two different allocations are not related</comment>
      <text xml:space="preserve" bytes="1467">{{c/title|max_align_t}}
{{c/types/navbar}}
{{dcl begin}}
{{dcl header | stddef.h}}
{{dcl | since=c11 |
typedef /*implementation-defined*/ max_align_t;
}}
{{dcl end}}

{{lc|max_align_t}} is a type whose alignment requirement is at least as strict (as large) as that of every scalar type.

===Notes===
Pointers returned by allocation functions such as {{lc|malloc}} are suitably aligned for any object, which means they are aligned at least as strict as {{lc|max_align_t}}.

{{lc|max_align_t}} is usually synonymous with the largest scalar type, which is {{c|long double}} on most platforms, and its alignment requirement is either 8 or 16.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stddef.h&gt;
#include &lt;stdalign.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdint.h&gt;
#include &lt;inttypes.h&gt;
 
int main(void)
{
    size_t a = alignof(max_align_t);
    printf(&quot;Alignment of max_align_t is %zu (%#zx)\n&quot;, a, a);

    int *p = malloc(123);
    printf(&quot;The address obtained from malloc(123) is %#&quot; PRIxPTR&quot;\n&quot;,
            (uintptr_t)p);
    free(p);
}
 | p=true
 | output=
Alignment of max_align_t is 16 (0x10)
The address obtained from malloc(123) is 0x1fa67010
}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/types/max_align_t}}
{{dsc end}}

[[de:c/types/max align t]]
[[es:c/types/max align t]]
[[fr:c/types/max align t]]
[[it:c/types/max align t]]
[[ja:c/types/max align t]]
[[pt:c/types/max align t]]
[[ru:c/types/max align t]]
[[zh:c/types/max align t]]</text>
      <sha1>0u7kt826a8omp879nl0n7b76rzicovq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/offsetof</title>
    <ns>0</ns>
    <id>9390</id>
    <revision>
      <id>70954</id>
      <parentid>70922</parentid>
      <timestamp>2014-06-04T12:43:25Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>corrected output</comment>
      <text xml:space="preserve" bytes="1044">{{c/title|offsetof}}
{{c/types/navbar}}
{{dcl begin}}
{{dcl header | stddef.h}}
{{dcl |
#define offsetof(type, member) /*implementation-defined*/
}}
{{dcl end}}

The macro {{lc|offsetof}} expands to a constant of type {{lc|size_t}}, the value of which is the offset, in bytes, from the beginning of an object of specified type to its specified member, including padding if any.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stddef.h&gt;

struct S {
    char c;
    double d;
};

int main(void)
{
    printf(&quot;the first element is at offset %zu\n&quot;, offsetof(struct S, c));
    printf(&quot;the double is at offset %zu\n&quot;, offsetof(struct S, d));
}
 | p=true
 | output=
the first element is at offset 0
the double is at offset 8
}}

===See also===
{{dsc begin}}
{{dsc inc | c/types/dsc size_t}}
{{dsc see cpp | cpp/types/offsetof}}
{{dsc end}}

[[de:c/types/offsetof]]
[[es:c/types/offsetof]]
[[fr:c/types/offsetof]]
[[it:c/types/offsetof]]
[[ja:c/types/offsetof]]
[[pt:c/types/offsetof]]
[[ru:c/types/offsetof]]
[[zh:c/types/offsetof]]</text>
      <sha1>1k5c0h3qvif8taq2ngy6wdnt79z7dth</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/ptrdiff t</title>
    <ns>0</ns>
    <id>9387</id>
    <revision>
      <id>75394</id>
      <parentid>70920</parentid>
      <timestamp>2015-01-16T15:50:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link back to pointer arithmetics</comment>
      <text xml:space="preserve" bytes="1939">{{c/title|ptrdiff_t}}
{{c/types/navbar}}
{{dcl begin}}
{{dcl header | stddef.h}}
{{dcl |
typedef /*implementation-defined*/ ptrdiff_t;
}}
{{dcl end}}

{{lc|ptrdiff_t}} is the signed integer type of the result of [[c/language/operator_arithmetic#Pointer_arithmetic|subtracting two pointers]].

===Notes===
{{lc|ptrdiff_t}} is used for pointer arithmetic and array indexing, if negative values are possible. Programs that use other types, such as {{c|int}}, may fail on, e.g. 64-bit systems when the index exceeds {{lc|INT_MAX}} or if it relies on 32-bit modular arithmetic.

Only pointers to elements of the same array (including the pointer one past the end of the array) may be subtracted from each other. 

If an array is so large (greater than {{lc|PTRDIFF_MAX}} elements, but less than {{lc|SIZE_MAX}} bytes), that the difference between two pointers may not be representable as {{lc|ptrdiff_t}}, the result of subtracting two such pointers is undefined.

For char arrays shorter than {{lc|PTRDIFF_MAX}}, {{lc|ptrdiff_t}} acts as the signed counterpart of {{lc|size_t}}: it can store the size of the array of any type and is, on most platforms, synonymous with {{lc|intptr_t}}).

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stddef.h&gt;
#include &lt;stdint.h&gt;

int main(void)
{
    const size_t N = 100;
    int numbers[N];
    
    printf(&quot;PTRDIFF_MAX = %ld\n&quot;, PTRDIFF_MAX);
    int *p1=&amp;numbers[18], *p2=&amp;numbers[23];
    ptrdiff_t diff = p2-p1;
    printf(&quot;p2-p1 = %td\n&quot;, diff);
    
    return 0;
}
 | p=true
 | output=
PTRDIFF_MAX = 9223372036854775807
p2-p1 = 5
}}

===See also===
{{dsc begin}}
{{dsc inc | c/types/dsc size_t}}
{{dsc inc | c/types/dsc offsetof}}
{{dsc see cpp | cpp/types/ptrdiff_t}}
{{dsc end}}

[[de:c/types/ptrdiff t]]
[[es:c/types/ptrdiff t]]
[[fr:c/types/ptrdiff t]]
[[it:c/types/ptrdiff t]]
[[ja:c/types/ptrdiff t]]
[[pt:c/types/ptrdiff t]]
[[ru:c/types/ptrdiff t]]
[[zh:c/types/ptrdiff t]]</text>
      <sha1>ajkn3lculcedtkzee0f17964etltjx1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/types/size t</title>
    <ns>0</ns>
    <id>9386</id>
    <revision>
      <id>88097</id>
      <parentid>85069</parentid>
      <timestamp>2016-10-30T20:01:18Z</timestamp>
      <contributor>
        <username>Chortos-2</username>
        <id>5355</id>
      </contributor>
      <comment>also provided in stdlib.h, uchar.h and wchar.h</comment>
      <text xml:space="preserve" bytes="1632">{{c/title|size_t}}
{{c/types/navbar}}
{{dcl begin}}
{{dcl header | stddef.h}}
{{dcl header | stdio.h}}
{{dcl header | stdlib.h}}
{{dcl header | string.h}}
{{dcl header | time.h}}
{{dcl header | uchar.h | notes={{mark since c11}}}}
{{dcl header | wchar.h | notes={{mark since c95}}}}
{{dcl |
typedef /*implementation-defined*/ size_t;
}}
{{dcl end}}

{{lc|size_t}} is the unsigned integer type of the result of {{ltt|c/language/sizeof}} {{rev inl|since=c11|, [[c/language/_Alignof|alignof]]}} and {{lc|offsetof}}. 

===Notes===
{{lc|size_t}} can store the maximum size of a theoretically possible object of any type (including array). 

{{lc|size_t}} is commonly used for array indexing and loop counting. Programs that use other types, such as {{c|unsigned int}}, for array indexing may fail on, e.g. 64-bit systems when the index exceeds {{lc|UINT_MAX}} or if it relies on 32-bit modular arithmetic.

===Example===
{{example |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stddef.h&gt;
#include &lt;stdint.h&gt;

int main(void)
{
    const size_t N = 100;
    int numbers[N];
    for (size_t ndx = 0; ndx &lt; N; ++ndx)
        numbers[ndx] = ndx;
    printf(&quot;SIZE_MAX = %lu\n&quot;, SIZE_MAX);
    size_t size = sizeof numbers;
    printf(&quot;size = %zu\n&quot;, size);
}
 | p=true
 | output=
SIZE_MAX = 18446744073709551615
size = 400
}}

===See also===
{{dsc begin}}
{{dsc inc | c/types/dsc ptrdiff_t}}
{{dsc inc | c/types/dsc offsetof}}
{{dsc see cpp | cpp/types/size_t}}
{{dsc end}}

[[de:c/types/size t]]
[[es:c/types/size t]]
[[fr:c/types/size t]]
[[it:c/types/size t]]
[[ja:c/types/size t]]
[[pt:c/types/size t]]
[[ru:c/types/size t]]
[[zh:c/types/size t]]</text>
      <sha1>qapve63h35r0v50bntceabep14dfxv8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/utility</title>
    <ns>0</ns>
    <id>14111</id>
    <revision>
      <id>78603</id>
      <timestamp>2015-05-29T04:35:11Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <comment>+ C Utility library</comment>
      <text xml:space="preserve" bytes="1302">{{title | Utility library}}
{{c/utility/navbar}}

C includes a variety of utility libraries. These libraries can be broadly divided into two groups: 

* language support libraries, and
* general-purpose libraries.

==Language support==

Language support libraries provide functions that interact closely with language features and support common language idioms.

===[[c/types|Type support]]===

Basic types (e.g. {{lc|size_t}}, {{lc|NULL}})

===[[c/memory|Dynamic memory management]]===

(e.g. {{lc|malloc}})

===[[c/error|Error handling]]===

Assertions (e.g. {{lc|assert}})

===[[c/variadic|Variadic functions]]===

Support for functions that take an arbitrary number of parameters (via e.g. {{lc|va_start}}, {{lc|va_arg}}, {{lc|va_end}})


==General-purpose utilities==

===[[c/program | Program utilities]]===

Termination (e.g. {{lc|abort}}, {{lc|atexit}}), environment (e.g. {{lc|system}}), signals (e.g. {{lc|raise}})

===[[c/chrono|Date and time]]===

Time tracking (e.g. {{lc|time}}, {{lc|clock}})

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/utility | Utility library}}
{{dsc end}}

[[ar:c/utility]]
[[cs:c/utility]]
[[de:c/utility]]
[[es:c/utility]]
[[fr:c/utility]]
[[it:c/utility]]
[[ja:c/utility]]
[[ko:c/utility]]
[[pl:c/utility]]
[[pt:c/utility]]
[[ru:c/utility]]
[[zh:c/utility]]</text>
      <sha1>evbt9ejkg4qzm6skhj4slc54hdah8k1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/variadic</title>
    <ns>0</ns>
    <id>13690</id>
    <revision>
      <id>83457</id>
      <parentid>78737</parentid>
      <timestamp>2016-02-13T09:29:49Z</timestamp>
      <contributor>
        <ip>203.86.197.179</ip>
      </contributor>
      <comment>Add missing space to example code</comment>
      <text xml:space="preserve" bytes="2160">{{title|Variadic functions}}
{{c/variadic/navbar}}

Variadic functions are functions (e.g. {{lc|printf}}) which take a variable number of arguments.

The declaration of a variadic function uses an ellipsis as the last parameter, e.g. {{c|int printf(const char* format, ...);}}. See [[c/language/variadic|variadic arguments]] for additional detail on the syntax and automatic argument conversions.

Accessing the variadic arguments from the function body uses the following library facilities:

{{dsc begin}}
{{dsc h2 | Macros}}
{{dsc header | stdarg.h}}
{{dsc inc | c/variadic/dsc va_start}}
{{dsc inc | c/variadic/dsc va_arg}}
{{dsc inc | c/variadic/dsc va_copy}}
{{dsc inc | c/variadic/dsc va_end}}

{{dsc h2 | Type}}
{{dsc inc | c/variadic/dsc va_list}}
{{dsc end}}

===Example===
{{example
 | Print values of different types.
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdarg.h&gt;
 
void simple_printf(const char* fmt, ...)
{
    va_list args;
    va_start(args, fmt);
 
    while (*fmt != '\0') {
        if (*fmt == 'd') {
            int i = va_arg(args, int);
            printf(&quot;%d\n&quot;, i);
        } else if (*fmt == 'c') {
            // note automatic conversion to integral type
            int c = va_arg(args, int);
            printf(&quot;%c\n&quot;, c);
        } else if (*fmt == 'f') {
            double d = va_arg(args, double);
            printf(&quot;%f\n&quot;, d);
        }
        ++fmt;
    }
 
    va_end(args);
}
 
int main(void)
{
    simple_printf(&quot;dcff&quot;, 3, 'a', 1.999, 42.5); 
}
 | output=
3
a
1.999000
42.50000
}}

===References===
{{ref std c11}}
{{ref std | section=7.16 | title=Variable arguments &lt;stdarg.h&gt; | p=269-272}}
{{ref std c99}}
{{ref std | section=7.15 | title=Variable arguments &lt;stdarg.h&gt; | p=249-252}}
{{ref std c89}}
{{ref std | section=4.8  | title=VARIABLE ARGUMENTS &lt;stdarg.h&gt;}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/utility/variadic | Variadic functions}}
{{dsc end}}

[[ar:c/variadic]]
[[cs:c/variadic]]
[[de:c/variadic]]
[[es:c/variadic]]
[[fr:c/variadic]]
[[it:c/variadic]]
[[ja:c/variadic]]
[[ko:c/variadic]]
[[pl:c/variadic]]
[[pt:c/variadic]]
[[ru:c/variadic]]
[[tr:c/variadic]]
[[zh:c/variadic]]</text>
      <sha1>a8gqplgbnzxzyuhm7lk8kf8f53qpdon</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/variadic/va arg</title>
    <ns>0</ns>
    <id>13693</id>
    <revision>
      <id>78739</id>
      <parentid>76385</parentid>
      <timestamp>2015-06-08T12:02:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2591">{{ctitle | n={{trim|va_arg}} }}
{{c/variadic/navbar}}
{{dcl begin}}
{{dcl header | stdarg.h}}
{{dcl | 
T va_arg( va_list ap, T );
}}
{{dcl end}}

The {{tt|va_arg}} macro expands to an expression of type {{tt|T}} that corresponds to the next parameter from the {{lc|va_list}} {{tt|ap}}.

Prior to calling {{tt|va_arg}}, {{tt|ap}} must be initialized by a call to either {{lc|va_start}} or {{lc|va_copy}}, with no intervening call to {{lc|va_end}}.  Each invocation of the {{tt|va_arg}} macro modifies {{tt|ap}} to point to the next variable argument.

If {{tt|va_arg}} is called when there are no more arguments in {{tt|ap}}, or if the type of the next argument in {{tt|ap}} (after promotions) is not compatible with {{tt|T}}, the behavior is undefined, unless:

* one type is a signed integer type, the other type is the corresponding unsigned integer type, and the value is representable in both types; or
* one type is pointer to {{c|void}} and the other is a pointer to a character type.

===Parameters===
{{par begin}}
{{par | ap | an instance of the {{lc|va_list}} type}}
{{par | T | the type of the next parameter in {{tt|ap}} }}
{{par end}}

===Expanded value===
the next variable parameter in {{tt|ap}}

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdarg.h&gt;
#include &lt;math.h&gt;

double stddev(int count, ...) 
{
    double sum = 0;
    double sum_sq = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i &lt; count; ++i) {
        double num = va_arg(args, double);
        sum += num;
        sum_sq += num*num;
    }
    va_end(args);
    return sqrt(sum_sq/count - (sum/count)*(sum/count));
}

int main(void) 
{
    printf(&quot;%f\n&quot;, stddev(4, 25.0, 27.3, 26.9, 25.7));
}
 | output=
0.920258
}}

===References===
{{ref std c11}}
{{ref std | section=7.16.1.1 | title=The va_arg macro | p=269-270}}
{{ref std c99}}
{{ref std | section=7.15.1.1 | title=The va_arg macro | p=249-250}}
{{ref std c89}}
{{ref std | section=4.8.1.2  | title=The va_arg macro}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/variadic/dsc va_copy}}
{{dsc inc | c/variadic/dsc va_end}}
{{dsc inc | c/variadic/dsc va_list}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc see cpp | cpp/utility/variadic/va_arg | va_arg}}
{{dsc end}}

[[ar:c/variadic/va_arg]]
[[cs:c/variadic/va_arg]]
[[de:c/variadic/va_arg]]
[[es:c/variadic/va_arg]]
[[fr:c/variadic/va_arg]]
[[it:c/variadic/va_arg]]
[[ja:c/variadic/va_arg]]
[[ko:c/variadic/va_arg]]
[[pl:c/variadic/va_arg]]
[[pt:c/variadic/va_arg]]
[[ru:c/variadic/va_arg]]
[[tr:c/variadic/va_arg]]
[[zh:c/variadic/va_arg]]</text>
      <sha1>dz74inwwkw142hfu5i2z96300vyfb05</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/variadic/va copy</title>
    <ns>0</ns>
    <id>13696</id>
    <revision>
      <id>76387</id>
      <parentid>76282</parentid>
      <timestamp>2015-02-17T12:12:37Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>References; language links</comment>
      <text xml:space="preserve" bytes="2291">{{ctitle | n={{trim|va_copy}} }}
{{c/variadic/navbar}}
{{dcl begin}}
{{dcl header | stdarg.h}}
{{dcl | since=c99 | 
void va_copy( va_list dest, va_list src );
}}
{{dcl end}}

The {{tt|va_copy}} macro copies {{tt|src}} to {{tt|dest}}.

{{lc|va_end}} should be called on {{tt|dest}} before the function returns or any subsequent re-initialization of {{tt|dest}} (via calls to {{lc|va_start}} or {{lc|va_copy}}).

===Parameters===
{{par begin}}
{{par | dest | an instance of the {{lc|va_list}} type to initialize}}
{{par | src | the source {{lc|va_list}} that will be used to initialize {{tt|dest}} }}
{{par end}}

===Expanded value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdarg.h&gt;
#include &lt;math.h&gt;

double sample_stddev(int count, ...) 
{
    /* Compute the mean with args1. */
    double sum = 0;
    va_list args1;
    va_start(args1, count);
    va_list args2;
    va_copy(args2, args1);   /* copy va_list object */
    for (int i = 0; i &lt; count; ++i) {
        double num = va_arg(args1, double);
        sum += num;
    }
    va_end(args1);
    double mean = sum / count;

    /* Compute standard deviation with args2 and mean. */
    double sum_sq_diff = 0;
    for (int i = 0; i &lt; count; ++i) {
        double num = va_arg(args2, double);
        sum_sq_diff += (num-mean) * (num-mean);
    }
    va_end(args2);
    return sqrt(sum_sq_diff / count);
}

int main(void) 
{
    printf(&quot;%f\n&quot;, sample_stddev(4, 25.0, 27.3, 26.9, 25.7));
}
 | p=true
 | output=
0.920258
}}

===References===
{{ref std c11}}
{{ref std | section=7.16.1.2 | title=The va_copy macro | p=270}}
{{ref std c99}}
{{ref std | section=7.15.1.2 | title=The va_copy macro | p=250}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | c/variadic/dsc va_arg}}
{{dsc inc | c/variadic/dsc va_end}}
{{dsc inc | c/variadic/dsc va_list}}
{{dsc inc | c/variadic/dsc va_start}}
{{dsc see cpp | cpp/utility/variadic/va_copy | va_copy}}
{{dsc end}}

[[ar:c/variadic/va_copy]]
[[cs:c/variadic/va_copy]]
[[de:c/variadic/va_copy]]
[[es:c/variadic/va_copy]]
[[fr:c/variadic/va_copy]]
[[it:c/variadic/va_copy]]
[[ja:c/variadic/va_copy]]
[[ko:c/variadic/va_copy]]
[[pl:c/variadic/va_copy]]
[[pt:c/variadic/va_copy]]
[[ru:c/variadic/va_copy]]
[[tr:c/variadic/va_copy]]
[[zh:c/variadic/va_copy]]</text>
      <sha1>btlfvjgnh5f6b23n0qpqy92aewpsqad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/variadic/va end</title>
    <ns>0</ns>
    <id>13695</id>
    <revision>
      <id>78740</id>
      <parentid>76388</parentid>
      <timestamp>2015-06-08T12:03:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1529">{{ctitle | n={{trim|va_end}} }}
{{c/variadic/navbar}}
{{dcl begin}}
{{dcl header | stdarg.h}}
{{dcl | 
void va_end( va_list ap );
}}
{{dcl end}}

The {{tt|va_end}} macro performs cleanup for an {{tt|ap}} object initialized by a call to {{lc|va_start}} or {{lc|va_copy}}.  {{tt|va_end}} may modify {{tt|ap}} so that it is no longer usable.

If there is no corresponding call to {{lc|va_start}} or {{lc|va_copy}}, or if {{tt|va_end}} is not called before a function that calls {{lc|va_start}} or {{lc|va_copy}} returns, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | ap | an instance of the {{lc|va_list}} type to clean up}}
{{par end}}

===Expanded value===
(none)

===References===
{{ref std c11}}
{{ref std | section=7.16.1.3 | title=The va_end macro | p=270-271}}
{{ref std c99}}
{{ref std | section=7.15.1.3 | title=The va_end macro | p=250-251}}
{{ref std c89}}
{{ref std | section=4.8.1.3  | title=The va_end macro}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/variadic/dsc va_arg}}
{{dsc inc | c/variadic/dsc va_copy}}
{{dsc inc | c/variadic/dsc va_list}}
{{dsc inc | c/variadic/dsc va_start}}
{{dsc see cpp | cpp/utility/variadic/va_end | va_end}}
{{dsc end}}

[[ar:c/variadic/va_end]]
[[cs:c/variadic/va_end]]
[[de:c/variadic/va_end]]
[[es:c/variadic/va_end]]
[[fr:c/variadic/va_end]]
[[it:c/variadic/va_end]]
[[ja:c/variadic/va_end]]
[[ko:c/variadic/va_end]]
[[pl:c/variadic/va_end]]
[[pt:c/variadic/va_end]]
[[ru:c/variadic/va_end]]
[[tr:c/variadic/va_end]]
[[zh:c/variadic/va_end]]</text>
      <sha1>9yd5ryyf4cjnith81u2v163yp990yur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/variadic/va list</title>
    <ns>0</ns>
    <id>13691</id>
    <revision>
      <id>78741</id>
      <parentid>76389</parentid>
      <timestamp>2015-06-08T12:06:43Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="1485">{{ctitle | n={{trim|va_list}} }}
{{c/variadic/navbar}}
{{ddcl | /* unspecified */ va_list;}}

{{tt|va_list}} is a complete object type suitable for holding the information needed by the macros {{lc|va_start}}, {{lc|va_copy}}, {{lc|va_arg}}, and {{lc|va_end}}.

If a {{tt|va_list}} instance is created, passed to another function, and used via {{lc|va_arg}} in that function, then any subsequent use in the calling function should be preceded by a call to {{lc|va_end}}.

It is legal to pass a pointer to a {{tt|va_list}} object to another function and then use that object after the function returns.

===References===
{{ref std c11}}
{{ref std | section=7.16/3 | title=Variable arguments &lt;stdarg.h&gt; | p=269}}
{{ref std c99}}
{{ref std | section=7.15/3 | title=Variable arguments &lt;stdarg.h&gt; | p=249}}
{{ref std c89}}
{{ref std | section=4.8    | title=VARIABLE ARGUMENTS &lt;stdarg.h&gt;}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/variadic/dsc va_arg}}
{{dsc inc | c/variadic/dsc va_copy}}
{{dsc inc | c/variadic/dsc va_end}}
{{dsc inc | c/variadic/dsc va_start}}
{{dsc see cpp | cpp/utility/variadic/va_list | va_list}}
{{dsc end}}

[[ar:c/variadic/va_list]]
[[cs:c/variadic/va_list]]
[[de:c/variadic/va_list]]
[[es:c/variadic/va_list]]
[[fr:c/variadic/va_list]]
[[it:c/variadic/va_list]]
[[ja:c/variadic/va_list]]
[[ko:c/variadic/va_list]]
[[pl:c/variadic/va_list]]
[[pt:c/variadic/va_list]]
[[ru:c/variadic/va_list]]
[[tr:c/variadic/va_list]]
[[zh:c/variadic/va_list]]</text>
      <sha1>fda3p4q54ilxzm1x9q0ub6uere4nkf2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>c/variadic/va start</title>
    <ns>0</ns>
    <id>13692</id>
    <revision>
      <id>78738</id>
      <parentid>76384</parentid>
      <timestamp>2015-06-08T12:00:50Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+C89 ref</comment>
      <text xml:space="preserve" bytes="2109">{{ctitle | n={{trim|va_start}} }}
{{c/variadic/navbar}}
{{dcl begin}}
{{dcl header | stdarg.h}}
{{dcl | 
void va_start( va_list ap, parmN );
}}
{{dcl end}}

The {{tt|va_start}} macro enables access to the variable arguments following the named argument {{tt|parmN}}.  

{{tt|va_start}} should be invoked with an instance to a valid {{lc|va_list}} object {{tt|ap}} before any calls to {{lc|va_arg}}.

If {{tt|parmN}} is declared with {{tt|register}} storage class specifier, with an array type, with a function type, or with a type not compatible with the type that results from default argument promotions, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | ap | an instance of the {{lc|va_list}} type}}
{{par | parmN | the named parameter preceding the first variable parameter}}
{{par end}}

===Expanded value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;stdio.h&gt;
#include &lt;stdarg.h&gt;

int add_nums(int count, ...) 
{
    int result = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i &lt; count; ++i) {
        result += va_arg(args, int);
    }
    va_end(args);
    return result;
}

int main(void) 
{
    printf(&quot;%d\n&quot;, add_nums(4, 25, 25, 50, 50));
}
 | p=true
 | output=
150
}}

===References===
{{ref std c11}}
{{ref std | section=7.16.1.4 | title=The va_start macro | p=271-272}}
{{ref std c99}}
{{ref std | section=7.15.1.4 | title=The va_start macro | p=251-252}}
{{ref std c89}}
{{ref std | section=4.8.1.1  | title=The va_start macro}}
{{ref std end}}

===See also===

{{dsc begin}}
{{dsc inc | c/variadic/dsc va_arg}}
{{dsc inc | c/variadic/dsc va_copy}}
{{dsc inc | c/variadic/dsc va_end}}
{{dsc inc | c/variadic/dsc va_list}}
{{dsc see cpp | cpp/utility/variadic/va_start | va_start}}
{{dsc end}}

[[ar:c/variadic/va_start]]
[[cs:c/variadic/va_start]]
[[de:c/variadic/va_start]]
[[es:c/variadic/va_start]]
[[fr:c/variadic/va_start]]
[[it:c/variadic/va_start]]
[[ja:c/variadic/va_start]]
[[ko:c/variadic/va_start]]
[[pl:c/variadic/va_start]]
[[pt:c/variadic/va_start]]
[[ru:c/variadic/va_start]]
[[tr:c/variadic/va_start]]
[[zh:c/variadic/va_start]]</text>
      <sha1>nco5s4jxyyg3d97b7v7tcsowga5au5y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp</title>
    <ns>0</ns>
    <id>720</id>
    <revision>
      <id>86592</id>
      <parentid>85051</parentid>
      <timestamp>2016-07-06T21:35:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to variant</comment>
      <text xml:space="preserve" bytes="3976">{{title|1=C++ reference}}
{{cpp/navbar}}
{| cellpadding=&quot;5&quot;
|- valign=&quot;top&quot;
| 

'''[[Cppreference:FAQ|FAQ]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/ascii | ASCII chart]]&lt;br/&gt;
[[cpp/compiler_support | Compiler support]]
&lt;/div&gt;

'''[[cpp/language | Language]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/basic_concepts | Basic concepts]]&lt;br&gt;
[[cpp/preprocessor | Preprocessor]]&lt;br&gt;
[[cpp/keyword | Keywords]]&lt;br&gt;
[[cpp/language/operator_precedence | Operator precedence]]&lt;br&gt;
[[cpp/language/escape | Escape sequences]]&lt;br&gt;
[[cpp/language/types | Fundamental types]]&lt;br&gt;
&lt;/div&gt;

'''[[cpp/header | Headers]]'''

'''[[cpp/concept | Library concepts]]'''

'''[[cpp/utility | Utilities library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/types | Type support]]&lt;br/&gt;&amp;nbsp;&amp;nbsp; (basic types, RTTI, type traits)&lt;br/&gt;
[[cpp/memory | Dynamic memory management]]&lt;br/&gt;
[[cpp/error | Error handling]]&lt;br/&gt;
[[cpp/utility/program | Program utilities]]&lt;br/&gt;
[[cpp/chrono | Date and time]]&lt;br/&gt;
{{ltt|cpp/utility/bitset}}&lt;br/&gt;
[[cpp/utility/functional | Function objects]]&lt;br/&gt;
{{ltt|cpp/utility/pair}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;
{{ltt|cpp/utility/tuple}} {{mark c++11}}&lt;br/&gt;
{{ltt|cpp/utility/integer_sequence}} {{mark c++14}}&lt;br&gt;
{{ltt|cpp/utility/optional}} {{mark c++17}}&amp;nbsp;&amp;nbsp;−&amp;nbsp;&amp;nbsp;
{{ltt|cpp/utility/any}} {{mark c++17}}&lt;br/&gt;
{{ltt|cpp/utility/variant}} {{mark c++17}}
&lt;/div&gt;

|

'''[[cpp/string | Strings library]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
{{ltt|cpp/string/basic_string}}&lt;br&gt;
{{ltt|cpp/string/basic_string_view}} {{mark c++17}}&lt;br&gt;
[[cpp/string/byte | Null-terminated byte strings]]&lt;br&gt;
[[cpp/string/multibyte | Null-terminated multibyte strings]]&lt;br&gt;
[[cpp/string/wide | Null-terminated wide strings]]
&lt;/div&gt;

'''[[cpp/container | Containers library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
{{ltt|cpp/container/array}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/vector}}&lt;br&gt;
{{ltt|cpp/container/deque}}&lt;br&gt;
{{ltt|cpp/container/list}}&lt;br&gt;
{{ltt|cpp/container/forward_list}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/set}}&lt;br&gt;
{{ltt|cpp/container/multiset}}&lt;br&gt;
{{ltt|cpp/container/map}}&lt;br&gt;
{{ltt|cpp/container/multimap}}&lt;br&gt;
{{ltt|cpp/container/unordered_set}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/unordered_multiset}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/unordered_map}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/unordered_multimap}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/container/stack}}&lt;br&gt;
{{ltt|cpp/container/queue}}&lt;br&gt;
{{ltt|cpp/container/priority_queue}}
&lt;/div&gt;

'''[[cpp/algorithm | Algorithms library]]'''

'''[[cpp/iterator | Iterators library]]'''

'''[[cpp/numeric | Numerics library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/numeric/math | Common mathematical functions]]&lt;br&gt;
[[cpp/numeric/special_math | Special mathematical functions]] {{mark c++17}}&lt;br&gt;
[[cpp/numeric/complex | Complex numbers]]&lt;br&gt;
[[cpp/numeric/random | Pseudo-random number generation]]
&lt;/div&gt;

|

'''[[cpp/io | Input/output library]]'''

&lt;div class=&quot;mainpagediv&quot;&gt;
{{ltt|cpp/io/basic_streambuf}}&lt;br&gt;
{{ltt|cpp/io/basic_filebuf}}&lt;br&gt;
{{ltt|cpp/io/basic_stringbuf}}&lt;br&gt;
{{ltt|cpp/io/ios_base}}&lt;br&gt;
{{ltt|cpp/io/basic_ios}}&lt;br&gt;
{{ltt|cpp/io/basic_istream}}&lt;br&gt;
{{ltt|cpp/io/basic_ostream}}&lt;br&gt;
{{ltt|cpp/io/basic_iostream}}&lt;br&gt;
{{ltt|cpp/io/basic_ifstream}}&lt;br&gt;
{{ltt|cpp/io/basic_ofstream}}&lt;br&gt;
{{ltt|cpp/io/basic_fstream}}&lt;br&gt;
{{ltt|cpp/io/basic_istringstream}}&lt;br&gt;
{{ltt|cpp/io/basic_ostringstream}}&lt;br&gt;
{{ltt|cpp/io/basic_stringstream}}&lt;br&gt;
[[cpp/io/manip | I/O manipulators]]&lt;br&gt;
[[cpp/io/c | C-style I/O ]]
&lt;/div&gt;

'''[[cpp/locale | Localizations library]]'''

'''[[cpp/regex | Regular expression library]]''' {{mark c++11}}

'''[[cpp/atomic | Atomic operations library]]''' {{mark c++11}}

'''[[cpp/thread | Thread support library]]''' {{mark c++11}}

'''[[cpp/filesystem | Filesystem library]]''' {{mark c++17}}

'''[[cpp/experimental | Technical Specifications]]'''
|}

[[ar:cpp]]
[[cs:cpp]]
[[de:cpp]]
[[es:cpp]]
[[fr:cpp]]
[[it:cpp]]
[[ja:cpp]]
[[pl:cpp]]
[[pt:cpp]]
[[ru:cpp]]
[[tr:cpp]]
[[zh:cpp]]</text>
      <sha1>ljucodepyzfp8pgp9njmsrl4am3gpj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm</title>
    <ns>0</ns>
    <id>721</id>
    <revision>
      <id>89874</id>
      <parentid>87597</parentid>
      <timestamp>2017-01-27T14:43:05Z</timestamp>
      <contributor>
        <ip>105.148.245.11</ip>
      </contributor>
      <text xml:space="preserve" bytes="7205">{{title | Algorithms library}}
{{cpp/algorithm/navbar}}

The algorithms library defines functions for a variety of purposes (e.g. searching, sorting, counting, manipulating) that operate on ranges of elements. Note that a range is defined as {{tt|[first, last)}} where {{tt|last}} refers to the element ''past'' the last element to inspect or modify.

{{rev begin}}
{{rev|since=c++17|
=====Execution policies=====
Most algorithms have overloads that accept execution policies. The standard library algorithms support three execution policies: [[cpp/algorithm/execution_policy_tag_t #sequential|sequential]], [[cpp/algorithm/execution_policy_tag_t #parallel|parallel]], and [[cpp/algorithm/execution_policy_tag_t #parallel vector|parallel+vector]], and the library provides corresponding execution policy types and objects. Users may select an execution policy statically by invoking a parallel algorithm with an execution policy object of the corresponding type: {{lc|std::execution::seq}}, {{lc|std::execution::par}}, or {{lc|std::execution::par_unseq}}.

Standard library implementations (but not the users) may define additional execution policies as an extension. The semantics of parallel algorithms invoked with an execution policy object of implementation-defined type is implementation-defined.

{{dsc begin}}
{{dsc header | execution }}
{{dsc namespace | execution }}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag_t }}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag }}
{{dsc inc | cpp/algorithm/dsc is_execution_policy }}
{{dsc end}}
}}
{{rev end}}

{{dsc begin}}
{{dsc h2 | Non-modifying sequence operations}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc all_any_none_of}}
{{dsc inc | cpp/algorithm/dsc for_each}}
{{dsc inc | cpp/algorithm/dsc for_each_n}}
{{dsc inc | cpp/algorithm/dsc count}}
{{dsc inc | cpp/algorithm/dsc mismatch}}
{{dsc inc | cpp/algorithm/dsc equal}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc inc | cpp/algorithm/dsc find_end}}
{{dsc inc | cpp/algorithm/dsc find_first_of}}
{{dsc inc | cpp/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc inc | cpp/algorithm/dsc search_n}}

{{dsc h2 | Modifying sequence operations}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc inc | cpp/algorithm/dsc copy_n}}
{{dsc inc | cpp/algorithm/dsc copy_backward}}
{{dsc inc | cpp/algorithm/dsc move}}
{{dsc inc | cpp/algorithm/dsc move_backward}}
{{dsc inc | cpp/algorithm/dsc fill}}
{{dsc inc | cpp/algorithm/dsc fill_n}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/algorithm/dsc generate}}
{{dsc inc | cpp/algorithm/dsc generate_n}}
{{dsc inc | cpp/algorithm/dsc remove}}
{{dsc inc | cpp/algorithm/dsc remove_copy}}
{{dsc inc | cpp/algorithm/dsc replace}}
{{dsc inc | cpp/algorithm/dsc replace_copy}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/algorithm/dsc swap_ranges}}
{{dsc inc | cpp/algorithm/dsc iter_swap}}
{{dsc inc | cpp/algorithm/dsc reverse}}
{{dsc inc | cpp/algorithm/dsc reverse_copy}}
{{dsc inc | cpp/algorithm/dsc rotate}}
{{dsc inc | cpp/algorithm/dsc rotate_copy}}
{{dsc inc | cpp/algorithm/dsc random_shuffle}}
{{dsc inc | cpp/algorithm/dsc sample}}
{{dsc inc | cpp/algorithm/dsc unique}}
{{dsc inc | cpp/algorithm/dsc unique_copy}}

{{dsc h2 | Partitioning operations}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc is_partitioned}}
{{dsc inc | cpp/algorithm/dsc partition}}
{{dsc inc | cpp/algorithm/dsc partition_copy}}
{{dsc inc | cpp/algorithm/dsc stable_partition}}
{{dsc inc | cpp/algorithm/dsc partition_point}}

{{dsc h2 | Sorting operations}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc is_sorted}}
{{dsc inc | cpp/algorithm/dsc is_sorted_until}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc inc | cpp/algorithm/dsc partial_sort}}
{{dsc inc | cpp/algorithm/dsc partial_sort_copy}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}
{{dsc inc | cpp/algorithm/dsc nth_element}}

{{dsc h2 | Binary search operations (on sorted ranges)}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc lower_bound}}
{{dsc inc | cpp/algorithm/dsc upper_bound}}
{{dsc inc | cpp/algorithm/dsc binary_search}}
{{dsc inc | cpp/algorithm/dsc equal_range}}

{{dsc h2 | Set operations (on sorted ranges)}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc merge}}
{{dsc inc | cpp/algorithm/dsc inplace_merge}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc set_difference}}
{{dsc inc | cpp/algorithm/dsc set_intersection}}
{{dsc inc | cpp/algorithm/dsc set_symmetric_difference}}
{{dsc inc | cpp/algorithm/dsc set_union}}

{{dsc h2 | Heap operations}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc is_heap}}
{{dsc inc | cpp/algorithm/dsc is_heap_until}}
{{dsc inc | cpp/algorithm/dsc make_heap}}
{{dsc inc | cpp/algorithm/dsc push_heap}}
{{dsc inc | cpp/algorithm/dsc pop_heap}}
{{dsc inc | cpp/algorithm/dsc sort_heap}}

{{dsc h2 | Minimum/maximum operations}}
{{dsc header | algorithm}}
{{dsc inc | cpp/algorithm/dsc max}}
{{dsc inc | cpp/algorithm/dsc max_element}}
{{dsc inc | cpp/algorithm/dsc min}}
{{dsc inc | cpp/algorithm/dsc min_element}}
{{dsc inc | cpp/algorithm/dsc minmax}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc inc | cpp/algorithm/dsc clamp}}
{{dsc inc | cpp/algorithm/dsc lexicographical_compare}}
{{dsc inc | cpp/algorithm/dsc is_permutation}}
{{dsc inc | cpp/algorithm/dsc next_permutation}}
{{dsc inc | cpp/algorithm/dsc prev_permutation}}

{{dsc h2 | Numeric operations}}
{{dsc header | numeric}}
{{dsc inc | cpp/algorithm/dsc iota}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc inner_product}}
{{dsc inc | cpp/algorithm/dsc adjacent_difference}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc reduce}}
{{dsc inc | cpp/algorithm/dsc exclusive_scan }}
{{dsc inc | cpp/algorithm/dsc inclusive_scan }}
{{dsc inc | cpp/algorithm/dsc transform_reduce}}
{{dsc inc | cpp/algorithm/dsc transform_exclusive_scan }}
{{dsc inc | cpp/algorithm/dsc transform_inclusive_scan }}

{{dsc h2 | Operations on uninitialized memory}}

{{dsc begin}}
{{dsc header | memory}}
{{dsc inc | cpp/memory/dsc uninitialized_copy}}
{{dsc inc | cpp/memory/dsc uninitialized_copy_n}}
{{dsc inc | cpp/memory/dsc uninitialized_fill}}
{{dsc inc | cpp/memory/dsc uninitialized_fill_n}}
{{dsc inc | cpp/memory/dsc uninitialized_move}}
{{dsc inc | cpp/memory/dsc uninitialized_move_n}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct_n}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct_n}}
{{dsc inc | cpp/memory/dsc destroy_at}}
{{dsc inc | cpp/memory/dsc destroy}}
{{dsc inc | cpp/memory/dsc destroy_n}}

{{dsc h2 | C library}}
{{dsc header | cstdlib}}
{{dsc inc | cpp/algorithm/dsc qsort}}
{{dsc inc | cpp/algorithm/dsc bsearch}}
{{dsc end}}


===See also===
{{dsc begin}}
{{dsc see c | c/algorithm | Algorithms}}
{{dsc end}}

[[ar:cpp/algorithm]]
[[de:cpp/algorithm]]
[[es:cpp/algorithm]]
[[fr:cpp/algorithm]]
[[it:cpp/algorithm]]
[[ja:cpp/algorithm]]
[[pt:cpp/algorithm]]
[[ru:cpp/algorithm]]
[[tr:cpp/algorithm]]
[[zh:cpp/algorithm]]</text>
      <sha1>bxkes4sbytdt82i7yfi1j0wrxz82hhe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/accumulate</title>
    <ns>0</ns>
    <id>722</id>
    <revision>
      <id>87599</id>
      <parentid>85725</parentid>
      <timestamp>2016-09-13T10:39:48Z</timestamp>
      <contributor>
        <username>Xtofl</username>
        <id>5790</id>
      </contributor>
      <comment>Remove unneeded branching inside loop</comment>
      <text xml:space="preserve" bytes="3516">{{cpp/title|accumulate}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | num=1 |
template&lt; class InputIt, class T &gt;
T accumulate( InputIt first, InputIt last, T init );
}}
{{dcl | num=2 |
template&lt; class InputIt, class T, class BinaryOperation &gt;
T accumulate( InputIt first, InputIt last, T init,
              BinaryOperation op );
}}
{{dcl end}}

Computes the sum of the given value {{tt|init}} and the elements in the range {{tt|[first, last)}}. The first version uses {{tt|operator+}} to sum up the elements, the second version uses the given binary function {{tt|op}}. 

{{rev begin}}
{{rev | until=c++11 |
{{tt|op}} must not have side effects.
}}
{{rev | since=c++11 |
{{tt|op}} must not invalidate any iterators, including the end iterators, or modify any elements of the range involved.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sum}}
{{par | init | initial value of the sum}}
{{par op2 | op | t1=T | p2=InputIt | rt=T | The binary operator takes the current accumulation value {{tt|a}} (initialized to {{tt|init}}) and the value of the current element {{tt|b}}. }}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | T | CopyConstructible | CopyAssignable}}
{{par end}}

===Return value===
@1@ The sum of the given value and elements in the given range.
@2@ The result of [[enwiki:Fold (higher-order function)|left fold]] of the given range over {{tt|op}}

===Notes===
Although {{tt|std::accumulate}} performs left fold by default, right fold may be achieved by using reverse iterators, e.g. {{c|std::accumulate(v.rbegin(), v.rend(), init, binop)}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class T&gt;
T accumulate(InputIt first, InputIt last, T init)
{
    for (; first != last; ++first) {
        init = init + *first;
    }
    return init;
}
 | 2=
template&lt;class InputIt, class T, class BinaryOperation&gt;
T accumulate(InputIt first, InputIt last, T init, 
             BinaryOperation op)
{
    for (; first != last; ++first) {
        init = op(init, *first);
    }
    return init;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;numeric&gt;
#include &lt;string&gt;
#include &lt;functional&gt;

int main()
{
    std::vector&lt;int&gt; v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    int sum = std::accumulate(v.begin(), v.end(), 0);

    int product = std::accumulate(v.begin(), v.end(), 1, std::multiplies&lt;int&gt;());

    std::string s = std::accumulate(std::next(v.begin()), v.end(),
                                    std::to_string(v[0]), // start with first element
                                    [](std::string a, int b) {
                                        return a + '-' + std::to_string(b);
                                    });

    std::cout &lt;&lt; &quot;sum: &quot; &lt;&lt; sum &lt;&lt; '\n'
              &lt;&lt; &quot;product: &quot; &lt;&lt; product &lt;&lt; '\n'
              &lt;&lt; &quot;dash-separated string: &quot; &lt;&lt; s &lt;&lt; '\n';
}
 | output=
sum: 55
product: 3628800
dash-separated string: 1-2-3-4-5-6-7-8-9-10
}}



===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc adjacent_difference}}
{{dsc inc | cpp/algorithm/dsc inner_product}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc reduce}}
{{dsc end}}

[[de:cpp/algorithm/accumulate]]
[[es:cpp/algorithm/accumulate]]
[[fr:cpp/algorithm/accumulate]]
[[it:cpp/algorithm/accumulate]]
[[ja:cpp/algorithm/accumulate]]
[[pt:cpp/algorithm/accumulate]]
[[ru:cpp/algorithm/accumulate]]
[[zh:cpp/algorithm/accumulate]]</text>
      <sha1>mmel2bdavcdkciqbs1r2823vrzf2rn4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/adjacent difference</title>
    <ns>0</ns>
    <id>723</id>
    <revision>
      <id>90686</id>
      <parentid>90667</parentid>
      <timestamp>2017-03-07T20:32:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0623r0 clarification on overlap rules</comment>
      <text xml:space="preserve" bytes="6492">{{cpp/title|adjacent_difference}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class OutputIt &gt;
OutputIt adjacent_difference( InputIt first, InputIt last, 
                              OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 adjacent_difference( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last, 
                                ForwardIt2 d_first );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt, class OutputIt, class BinaryOperation &gt;
OutputIt adjacent_difference( InputIt first, InputIt last, 
                              OutputIt d_first, BinaryOperation op );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryOperation &gt;
ForwardIt2 adjacent_difference( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last, 
                                ForwardIt2 d_first, BinaryOperation op );}}
{{dcl end}}

Computes the differences between the second and the first of each adjacent pair of elements of the range {{tt|[first, last)}} and writes them to the range beginning at {{tt|d_first + 1}}. Unmodified copy of {{tt|first}} is written to {{tt|d_first}}. 

@1,3@ First, creates an accumulator {{tt|acc}} whose type is {{tt|InputIt}}'s value type, initializes it with {{c|*first}}, and assigns the result to {{c|*d_first}}.
Then, for every iterator {{tt|i}} in {{tt|[first + 1, last)}} in order, creates an object {{tt|val}} whose type is {{tt|InputIt}}'s value type, initializes it with {{c|*i}}, computes {{c|val - acc}} (overload {{v|1}}) or {{c|op(val, acc)}} (overload {{v|3}}), assigns the result to {{c|*(d_first + (i - first))}}, and move assigns from {{tt|val}} to {{tt|acc}}.
@@ The input ranges may overlap, but cannot be identical: the behavior is undefined if {{c|1=first==d_first}}

@2,4@ First, creates an object whose type is ForwardIt1's value type, initializes it with {{c|*first}}, and assigns the result to {{c|*d_first}}. Then for every {{tt|d}} in {{tt|[1, last - first - 1]}}, creates an object {{tt|val}} whose type is ForwardIt1's value type, initializes it with {{c|*(first + d) - *(first + d - 1)}} (overload {{v|2}}) or {{c|op(*(first + d), *(first + d - 1))}} (overload {{v|4}}), and assigns the result to {{c|*(d_first + d)}}. This is executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}.
@@ The behavior is undefined if the input ranges overlap in any way.


Equivalent operation:

{{source|1=
*(d_first)   = *first;
*(d_first+1) = *(first+1) - *(first);
*(d_first+2) = *(first+2) - *(first+1);
*(d_first+3) = *(first+3) - *(first+2);
...
}}

{{rev begin}}
{{rev | until=c++11 |
{{tt|op}} must not have side effects.
}}
{{rev | since=c++11 |
{{tt|op}} must not invalidate any iterators, including the end iterators, or modify any elements of the ranges involved.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements}}
{{par | d_first | the beginning of the destination range}}
{{par exec pol}}
{{par op2 | op | t1=iterator_traits&lt;InputIt&gt;::value_type | rp=OutputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator|notes=InputIt's value type must be {{concept|MoveAssignable}} and constructible from the type of {{c|*first}} }}
{{par req concept | OutputIt | OutputIterator|notes=both {{c|acc}} (the accumulated value) and the result of {{c|val-acc}} or {{c|op(val, acc)}} must be writable to OutputIt}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator| notes=
ForwardIt1's value_type must be {{concept|CopyConstructible}}, constructible from the expression {{c|*first - *first}} or {{c|op(*first, *first)}}, and assignable to ForwardIt2's value_type}}
{{par end}}

===Return value===
It to the element past the last element written.

===Notes===
If {{tt|first {{==}} last}}, this function has no effect and will merely return {{tt|d_first}}.

===Complexity===
Exactly {{tt|(last - first) - 1}} applications of the binary operation

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class OutputIt&gt;
OutputIt adjacent_difference(InputIt first, InputIt last, 
                             OutputIt d_first)
{
    if (first == last) return d_first;

    typedef typename std::iterator_traits&lt;InputIt&gt;::value_type value_t;
    value_t acc = *first;
    *d_first = acc;
    while (++first != last) {
        value_t val = *first;
        *++d_first = val - acc;
        acc = std::move(val);
    }
    return ++d_first;
}
 | 2 =
template&lt;class InputIt, class OutputIt, class BinaryOperation&gt;
OutputIt adjacent_difference(InputIt first, InputIt last, 
                             OutputIt d_first, BinaryOperation op)
{
    if (first == last) return d_first;

    typedef typename std::iterator_traits&lt;InputIt&gt;::value_type value_t;
    value_t acc = *first;
    *d_first = acc;
    while (++first != last) {
        value_t val = *first;
        *++d_first = op(val, acc);
        acc = std::move(val);
    }
    return ++d_first;
}
}}

===Example===
{{example
 | The following code converts a sequence of even numbers to repetitions of the number 2 and converts a sequence of ones to a sequence of Fibonacci numbers.
 | code=
​#include &lt;numeric&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;functional&gt;

int main()
{
    std::vector&lt;int&gt; v{2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
    std::adjacent_difference(v.begin(), v.end(), v.begin());
 
    for (auto n : v) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';

    v = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
    std::adjacent_difference(v.begin(), v.end() - 1, v.begin() + 1, std::plus&lt;int&gt;());

    for (auto n : v) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';
}​
 | output=
2 2 2 2 2 2 2 2 2 2
1 1 2 3 5 8 13 21 34 55
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc accumulate}}

{{dsc end}}

[[de:cpp/algorithm/adjacent difference]]
[[es:cpp/algorithm/adjacent difference]]
[[fr:cpp/algorithm/adjacent difference]]
[[it:cpp/algorithm/adjacent difference]]
[[ja:cpp/algorithm/adjacent difference]]
[[pt:cpp/algorithm/adjacent difference]]
[[ru:cpp/algorithm/adjacent difference]]
[[zh:cpp/algorithm/adjacent difference]]</text>
      <sha1>g0z6xyqfutz87baoc7n5r5rgegx7i1p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/adjacent find</title>
    <ns>0</ns>
    <id>724</id>
    <revision>
      <id>90688</id>
      <parentid>89843</parentid>
      <timestamp>2017-03-07T20:49:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>parallel complexity from P0574r1, match old one to the std for simplicity</comment>
      <text xml:space="preserve" bytes="4058">{{cpp/title|adjacent_find}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class ForwardIt &gt;
ForwardIt adjacent_find( ForwardIt first, ForwardIt last );
}}
{{dcl | since=c++17 | num=2 |
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt adjacent_find( ExecutionPolicy&amp;&amp; policy,
                         ForwardIt first, ForwardIt last );
}}
{{dcl | num=3 |
template&lt; class ForwardIt, class BinaryPredicate&gt;
ForwardIt adjacent_find( ForwardIt first, ForwardIt last, BinaryPredicate p );
}}
{{dcl | since=c++17 | num=4 |
template&lt; class ExecutionPolicy, class ForwardIt, class BinaryPredicate&gt;
ForwardIt adjacent_find( ExecutionPolicy&amp;&amp; policy,
                         ForwardIt first, ForwardIt last, BinaryPredicate p );
}}
{{dcl end}}

Searches the range {{tt|[first, last)}} for two consecutive identical elements. 

@1@ Elements are compared using {{tt|operator{{==}}}}.
@3@ Elements are compared using the given binary predicate {{tt|p}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par exec pol}}
{{par pred2 eq | p | p1=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
an iterator to the first of the first pair of identical elements, that is, the first iterator {{tt|it}} such that {{c|*it {{==}} *(it+1)}} for the first version or {{c|p(*it, *(it + 1)) !{{=}} false}} for the second version.

If no such elements are found, {{tt|last}} is returned

===Complexity===
@1,3@ Exactly {{tt|min((result-first)+1, (last-first)-1)}} applications of the predicate where {{tt|result}} is the return value.
@2,4@ {{tt|O(last-first)}} applications of the corresponding predicate.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt&gt;
ForwardIt adjacent_find(ForwardIt first, ForwardIt last)
{
    if (first == last) {
        return last;
    }
    ForwardIt next = first;
    ++next;
    for (; next != last; ++next, ++first) {
        if (*first == *next) {
            return first;
        }
    }
    return last;
}
 | 2=
template&lt;class ForwardIt, class BinaryPredicate&gt;
ForwardIt adjacent_find(ForwardIt first, ForwardIt last, 
                        BinaryPredicate p)
{
    if (first == last) {
        return last;
    }
    ForwardIt next = first;
    ++next;
    for (; next != last; ++next, ++first) {
        if (p(*first, *next)) {
            return first;
        }
    }
    return last;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
 
int main()
{
    std::vector&lt;int&gt; v1{0, 1, 2, 3, 40, 40, 41, 41, 5};
 
    auto i1 = std::adjacent_find(v1.begin(), v1.end());
 
    if (i1 == v1.end()) {
        std::cout &lt;&lt; &quot;no matching adjacent elements\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;the first adjacent pair of equal elements at: &quot;
                  &lt;&lt; std::distance(v1.begin(), i1) &lt;&lt; '\n';
    }

    auto i2 = std::adjacent_find(v1.begin(), v1.end(), std::greater&lt;int&gt;());
    if (i2 == v1.end()) {
        std::cout &lt;&lt; &quot;The entire vector is sorted in ascending order\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;The last element in the non-decreasing subsequence is at: &quot;
                  &lt;&lt; std::distance(v1.begin(), i2) &lt;&lt; '\n';
    }
}
 | output=
The first adjacent pair of equal elements at: 4
The last element in the non-decreasing subsequence is at: 7
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc unique}}

{{dsc end}}

[[de:cpp/algorithm/adjacent find]]
[[es:cpp/algorithm/adjacent find]]
[[fr:cpp/algorithm/adjacent find]]
[[it:cpp/algorithm/adjacent find]]
[[ja:cpp/algorithm/adjacent find]]
[[pt:cpp/algorithm/adjacent find]]
[[ru:cpp/algorithm/adjacent find]]
[[zh:cpp/algorithm/adjacent find]]</text>
      <sha1>ca4ldyzdsuaa0c2daoc3ekzooo3p2f4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/all any none of</title>
    <ns>0</ns>
    <id>725</id>
    <revision>
      <id>90783</id>
      <parentid>90620</parentid>
      <timestamp>2017-03-10T13:52:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>parallel complexity due to blanket wording from P0523r1</comment>
      <text xml:space="preserve" bytes="4791">{{cpp/title| all_of | any_of | none_of}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class InputIt, class UnaryPredicate &gt;
bool all_of( InputIt first, InputIt last, UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
bool all_of( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryPredicate p );}}
{{dcl | since=c++11 | num= 3 |1= 
template&lt; class InputIt, class UnaryPredicate &gt;
bool any_of( InputIt first, InputIt last, UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
bool any_of( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryPredicate p );}}
{{dcl | since=c++11 | num= 5 |1= 
template&lt; class InputIt, class UnaryPredicate &gt;
bool none_of( InputIt first, InputIt last, UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 6 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
bool none_of( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryPredicate p );}}
{{dcl end}}
@1@ Checks if unary predicate {{tt|p}} returns {{c|true}} for all elements in the range {{tt|[first, last)}}.

@3@ Checks if unary predicate {{tt|p}} returns {{c|true}} for at least one element in the range {{tt|[first, last)}}.

@5@ Checks if unary predicate {{tt|p}} returns {{c|true}} for no elements in the range {{tt|[first, last)}}.
@2,4,6@ Same as {{v|1,3,5}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par exec pol}}
{{par pred1 | p | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===

@1-2@ {{c|true}} if unary predicate returns {{c|true}} for all elements in the range, {{c|false}} otherwise. Returns {{c|true}} if the range is empty.

@3-4@ {{c|true}} if unary predicate returns {{c|true}} for at least one element in the range, {{c|false}} otherwise. Returns {{c|false}} if the range is empty.

@5-6@ {{c|true}} if unary predicate returns {{c|true}} for no elements in the range, {{c|false}} otherwise. Returns {{c|true}} if the range is empty.

===Complexity===

@1,3,5@ At most {{tt|last}} - {{tt|first}} applications of the predicate
@2,4,6@ {{tt|O(last-first)}} applications of the predicate

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}
===Possible implementation===
{{eq fun | 1=
template&lt; class InputIt, class UnaryPredicate &gt;
bool all_of(InputIt first, InputIt last, UnaryPredicate p)
{
    return std::find_if_not(first, last, p) == last;
}
 | 2=
template&lt; class InputIt, class UnaryPredicate &gt;
bool any_of(InputIt first, InputIt last, UnaryPredicate p)
{
    return std::find_if(first, last, p) != last;
}
 | 3=
template&lt; class InputIt, class UnaryPredicate &gt;
bool none_of(InputIt first, InputIt last, UnaryPredicate p)
{
    return std::find_if(first, last, p) == last;
}
}}

===Example===
{{example
 | code=#include &lt;vector&gt;
#include &lt;numeric&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;functional&gt;
 
int main()
{
    std::vector&lt;int&gt; v(10, 2);
    std::partial_sum(v.cbegin(), v.cend(), v.begin());
    std::cout &lt;&lt; &quot;Among the numbers: &quot;;
    std::copy(v.cbegin(), v.cend(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';
 
    if (std::all_of(v.cbegin(), v.cend(), [](int i){ return i % 2 == 0; })) {
        std::cout &lt;&lt; &quot;All numbers are even\n&quot;;
    }
    if (std::none_of(v.cbegin(), v.cend(), std::bind(std::modulus&lt;int&gt;(), 
                                                     std::placeholders::_1, 2))) {
        std::cout &lt;&lt; &quot;None of them are odd\n&quot;;
    }
    struct DivisibleBy
    {
        const int d;
        DivisibleBy(int n) : d(n) {}
        bool operator()(int n) const { return n % d == 0; }
    };
 
    if (std::any_of(v.cbegin(), v.cend(), DivisibleBy(7))) {
        std::cout &lt;&lt; &quot;At least one number is divisible by 7\n&quot;;
    }
}
 | output=Among the numbers: 2 4 6 8 10 12 14 16 18 20 
All numbers are even
None of them are odd
At least one number is divisible by 7
}}

===See also===
{{dsc begin}}



{{dsc end}}

[[de:cpp/algorithm/all any none of]]
[[es:cpp/algorithm/all any none of]]
[[fr:cpp/algorithm/all any none of]]
[[it:cpp/algorithm/all any none of]]
[[ja:cpp/algorithm/all any none of]]
[[pt:cpp/algorithm/all any none of]]
[[ru:cpp/algorithm/all any none of]]
[[zh:cpp/algorithm/all any none of]]</text>
      <sha1>fk2segm65cg4wgpeaxa980qeq9foi9b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/all of</title>
    <ns>0</ns>
    <id>2544</id>
    <redirect title="cpp/algorithm/all any none of" />
    <revision>
      <id>9314</id>
      <timestamp>2011-08-21T16:07:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/algorithm/all_any_none_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/any of</title>
    <ns>0</ns>
    <id>2543</id>
    <redirect title="cpp/algorithm/all any none of" />
    <revision>
      <id>9313</id>
      <timestamp>2011-08-21T16:07:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/algorithm/all_any_none_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/binary search</title>
    <ns>0</ns>
    <id>726</id>
    <revision>
      <id>78428</id>
      <parentid>77230</parentid>
      <timestamp>2015-05-23T08:12:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Parameters */ - todo</comment>
      <text xml:space="preserve" bytes="3327">{{cpp/title|binary_search}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class ForwardIt, class T &gt;
bool binary_search( ForwardIt first, ForwardIt last, const T&amp; value );
}}
{{dcl | num=2 |
template&lt; class ForwardIt, class T, class Compare &gt;
bool binary_search( ForwardIt first, ForwardIt last, const T&amp; value, Compare comp );
}}
{{dcl end}}

Checks if an element equivalent to {{tt|value}} appears within the range {{tt|[first, last)}}.

For {{tt|std::binary_search}} to succeed, the range {{tt|[first, last)}} must be at least partially ordered, i.e. it must satisfy all of the following requirements:
* partitioned with respect to {{c|element &lt; value}} or {{c|comp(element, value)}}
* partitioned with respect to {{c|!(value &lt; element)}} or {{c|!comp(value, element)}}
* for all elements, if {{c|element &lt; value}} or {{c|comp(element, value)}} is {{c|true}} then {{c|!(value &lt; element)}} or {{c|!comp(value, element)}} is also {{c|true}}
A fully-sorted range meets these criteria, as does a range resulting from a call to {{c|std::partition}}.

The first version uses {{c|operator&lt;}} to compare the elements, the second version uses the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | value | value to compare the elements to}}
{{par cmp ord | comp | t1=T | p2=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
{{c|true}} if an element equal to {{tt|value}} is found, {{c|false}} otherwise.

===Complexity===
The number of comparisons performed is logarithmic in the distance between {{tt|first}} and {{tt|last}} (At most {{math|log{{su|b=2}}(last - first) + O(1)}} comparisons). However, for non-{{concept|RandomAccessIterator}}s, number of iterator increments is linear.

===Possible implementation===
{{eq fun 
 | 1=
template&lt;class ForwardIt, class T&gt;
bool binary_search(ForwardIt first, ForwardIt last, const T&amp; value)
{
    first = std::lower_bound(first, last, value);
    return (!(first == last) &amp;&amp; !(value &lt; *first));
}
 | 2=
template&lt;class ForwardIt, class T, class Compare&gt;
bool binary_search(ForwardIt first, ForwardIt last, const T&amp; value, Compare comp)
{
    first = std::lower_bound(first, last, value, comp);
    return (!(first == last) &amp;&amp; !(comp(value, *first)));
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; haystack {1, 3, 4, 5, 9};
    std::vector&lt;int&gt; needles {1, 2, 3};

    for (auto needle : needles) {
        std::cout &lt;&lt; &quot;Searching for &quot; &lt;&lt; needle &lt;&lt; '\n';
        if (std::binary_search(haystack.begin(), haystack.end(), needle)) {
            std::cout &lt;&lt; &quot;Found &quot; &lt;&lt; needle &lt;&lt; '\n';
        } else {
            std::cout &lt;&lt; &quot;no dice!\n&quot;;
        }
    }
}
 | output=
Searching for 1
Found 1
Searching for 2
no dice!
Searching for 3
Found 3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc equal_range}}
{{dsc end}}

[[de:cpp/algorithm/binary search]]
[[es:cpp/algorithm/binary search]]
[[fr:cpp/algorithm/binary search]]
[[it:cpp/algorithm/binary search]]
[[ja:cpp/algorithm/binary search]]
[[pt:cpp/algorithm/binary search]]
[[ru:cpp/algorithm/binary search]]
[[zh:cpp/algorithm/binary search]]</text>
      <sha1>dedf9d3ujicp1zwvnkjoo9ueiopztic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/bsearch</title>
    <ns>0</ns>
    <id>727</id>
    <revision>
      <id>88312</id>
      <parentid>83394</parentid>
      <timestamp>2016-11-16T14:40:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>editorial commit 9df9501  (language linkage for callback only)</comment>
      <text xml:space="preserve" bytes="3683">{{cpp/title|bsearch}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl |num=1|
void* bsearch( const void* key, const void* ptr, std::size_t count,
               std::size_t size, /*compare-pred*/* comp );
void* bsearch( const void* key, const void* ptr, std::size_t count,
               std::size_t size, /*c-compare-pred*/* comp );
}}
{{dcl |num=2|1=
extern &quot;C++&quot; using /*compare-pred*/ = int(const void*, const void*); // exposition-only
extern &quot;C&quot; using /*c-compare-pred*/ = int(const void *, const void *); // exposition-only
}}
{{dcl end}}

Finds an element equal to element pointed to by {{tt|key}} in an array pointed to by {{tt|ptr}}. The array contains {{tt|count}} elements of {{tt|size}} bytes each and must be partitioned with respect to the object pointed to by {{tt|key}}, that is, all the elements that compare less than must appear before all the elements that compare equal to, and those must appear before all the elements that compare greater than the key object. A fully sorted array satisfies these requirements. The elements are compared using function pointed to by {{tt|comp}}. 

The behavior is undefined if the array is not already partitioned in ascending order with respect to key, according to the same criterion that {{tt|comp}} uses.

If the array contains several elements that {{tt|comp}} would indicate as equal to the element searched for, then it is unspecified which element the function will return as the result.

===Parameters===
{{par begin}}
{{par | key | pointer to the element to search for}}
{{par | ptr | pointer to the array to examine}}
{{par | count | number of element in the array}}
{{par | size | size of each element in the array in bytes}}
{{par ccmp | comp | {{tt|key}} is passed as the first argument, an element from the array as the second.}}
{{par end}}

===Return value===
Pointer to the found element or null pointer if the element has not been found.

===Notes===
Despite the name, neither C nor POSIX standards require this function to be implemented using binary search or make any complexity guarantees.

The two overloads provided by the C++ standard library are distinct because the types of the parameter {{tt|comp}} are distinct ([[cpp/language/language linkage|language linkage]] is part of its type)

===Example===
{{example
 |
 | code=
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

int compare(const void *ap, const void *bp)
{
    const int *a = (int *) ap;
    const int *b = (int *) bp;
    if(*a &lt; *b)
        return -1;
    else if(*a &gt; *b)
        return 1;
    else
        return 0;
}

int main(int argc, char **argv)
{
    const int ARR_SIZE = 8;
    int arr[ARR_SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8 };

    int key1 = 4;
    int *p1 = (int *) std::bsearch(&amp;key1, arr, ARR_SIZE, sizeof(arr[0]), compare);
    if(p1)
        std::cout &lt;&lt; &quot;value &quot; &lt;&lt; key1 &lt;&lt; &quot; found at position &quot; &lt;&lt; (p1 - arr) &lt;&lt; '\n';
     else
        std::cout &lt;&lt; &quot;value &quot; &lt;&lt; key1 &lt;&lt; &quot; not found\n&quot;;

    int key2 = 9;
    int *p2 = (int *) std::bsearch(&amp;key2, arr, ARR_SIZE, sizeof(arr[0]), compare);
    if(p2)
        std::cout &lt;&lt; &quot;value &quot; &lt;&lt; key2 &lt;&lt; &quot; found at position &quot; &lt;&lt; (p2 - arr) &lt;&lt; '\n';
     else
        std::cout &lt;&lt; &quot;value &quot; &lt;&lt; key2 &lt;&lt; &quot; not found\n&quot;;
}
 | output=
value 4 found at position 3
value 9 not found
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc qsort}}
{{dsc inc | cpp/algorithm/dsc equal_range}}
{{dsc see c | c/algorithm/bsearch}}
{{dsc end}}

[[de:cpp/algorithm/bsearch]]
[[es:cpp/algorithm/bsearch]]
[[fr:cpp/algorithm/bsearch]]
[[it:cpp/algorithm/bsearch]]
[[ja:cpp/algorithm/bsearch]]
[[pt:cpp/algorithm/bsearch]]
[[ru:cpp/algorithm/bsearch]]
[[zh:cpp/algorithm/bsearch]]</text>
      <sha1>0c86xytivibwyvmiamaseh7pd58cjyb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/clamp</title>
    <ns>0</ns>
    <id>14760</id>
    <revision>
      <id>90302</id>
      <parentid>90301</parentid>
      <timestamp>2017-02-20T12:45:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Undo revision 90301 by [[Special:Contributions/153.96.161.217|153.96.161.217]] ([[User talk:153.96.161.217|talk]])</comment>
      <text xml:space="preserve" bytes="3026">{{cpp/title|clamp}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++17 |num=1|
template&lt;class T&gt;
constexpr const T&amp; clamp( const T&amp; v, const T&amp; lo, const T&amp; hi );
}}
{{dcl | since=c++17 |num=2|
template&lt;class T, class Compare&gt;
constexpr const T&amp; clamp( const T&amp; v, const T&amp; lo, const T&amp; hi, Compare comp );
}}
{{dcl end}}

@1@ If {{tt|v}} compares less than {{tt|hi}}, returns the larger of {{tt|v}} and {{tt|lo}}, otherwise returns the smaller of {{tt|v}} and {{tt|hi}}. Uses {{c|operator&lt;}} to compare the values.
@2@ Same as {{v|1}}, but uses {{tt|comp}} to compare the values.

The behavior is undefined if the value of {{tt|lo}} is greater than {{tt|hi}}

===Parameters===
{{par begin}}
{{par | v | the value to clamp}}
{{par | lo,hi | the boundaries to clamp {{tt|v}} to}}
{{par cmp | comp | t1=T | {{tt|lo}} is ''less'' than {{tt|v}} and {{tt|v}} is ''less'' than {{tt|hi}}}} 
{{par hreq}}
{{par req concept | T | LessThanComparable | overloads=1}}
{{par end}}

===Return value===
Reference to {{tt|lo}} if {{tt|v}} is less than {{tt|lo}}, reference to {{tt|hi}} if {{tt|hi}} is less than {{tt|v}}, otherwise reference to {{tt|v}}.

===Complexity===
@1@ At most two comparisons

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
constexpr const T&amp; clamp( const T&amp; v, const T&amp; lo, const T&amp; hi )
{
    return clamp( v, lo, hi, std::less&lt;&gt;() );
}
 | 2=
template&lt;class T, class Compare&gt;
constexpr const T&amp; clamp( const T&amp; v, const T&amp; lo, const T&amp; hi, Compare comp )
{
    return assert( !comp(hi, lo) ),
        comp(v, lo) ? lo : comp(hi, v) ? hi : v;
}
}}

===Notes===
{{include|cpp/algorithm/minmax_danger_note|clamp}}

If {{tt|v}} compares equivalent to either bound, returns a reference to {{tt|v}}, not the bound.

Only works for floating-point {{tt|T}} if {{tt|NaN}}s are avoided.

===Example===
{{example
 |
 | code=
#include &lt;cstdint&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;random&gt;

int main()
{
    std::mt19937 g(std::random_device{}());
    std::uniform_int_distribution&lt;&gt; d(-300, 300);
    std::cout &lt;&lt; &quot; raw   clamped to int8_t   clamped to uint8_t\n&quot;;
    for(int n = 0; n &lt; 5; ++n) {
        int v = d(g);
        std::cout &lt;&lt; std::setw(4) &lt;&lt; v
                  &lt;&lt; std::setw(20) &lt;&lt; std::clamp(v, INT8_MIN, INT8_MAX)
                  &lt;&lt; std::setw(21) &lt;&lt; std::clamp(v, 0, UINT8_MAX) &lt;&lt; '\n';
    }
}
|p=true
| output=
.raw   clamped to int8_t   clamped to uint8_t
 168                 127                  168
 128                 127                  128
-137                -128                    0
  40                  40                   40
 -66                 -66                    0
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc min}}
{{dsc inc | cpp/algorithm/dsc max}}
{{dsc end}}

[[de:cpp/algorithm/clamp]]
[[es:cpp/algorithm/clamp]]
[[fr:cpp/algorithm/clamp]]
[[it:cpp/algorithm/clamp]]
[[ja:cpp/algorithm/clamp]]
[[pt:cpp/algorithm/clamp]]
[[ru:cpp/algorithm/clamp]]
[[zh:cpp/algorithm/clamp]]</text>
      <sha1>dycnuev3efyc009b6ybdk547pr2tzjy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/copy</title>
    <ns>0</ns>
    <id>728</id>
    <revision>
      <id>90689</id>
      <parentid>90634</parentid>
      <timestamp>2017-03-07T20:53:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0574r1 complexity note</comment>
      <text xml:space="preserve" bytes="5062">{{cpp/title|copy|copy_if}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class OutputIt &gt;
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 copy( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first );}}
{{dcl | since=c++11 | num= 3 |1=  
template&lt; class InputIt, class OutputIt, class UnaryPredicate &gt;
OutputIt copy_if( InputIt first, InputIt last,
                  OutputIt d_first,
                  UnaryPredicate pred );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class UnaryPredicate &gt;
ForwardIt2 copy_if( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                  ForwardIt2 d_first,
                  UnaryPredicate pred );}}
{{dcl end}}

Copies the elements in the range, defined by {{tt|[first, last)}}, to another range beginning at {{tt|d_first}}. 
@1@ Copies all elements in the range {{tt|[first, last)}}. The behavior is undefined if {{tt|d_first}} is within the range {{tt|[first, last)}}. In this case, {{lc|std::copy_backward}} may be used instead.
@3@ Only copies the elements for which the predicate {{tt|pred}} returns {{c|true}}. The order of the elements that are not removed is preserved. The behavior is undefined if the source and the destination ranges overlap.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to copy}}
{{par | d_first | the beginning of the destination range.}}
{{par exec pol}}
{{par pred1 | pred | value=true | for the required elements | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===

Output iterator to the element in the destination range, one past the last element copied.

===Complexity===

1-2) Exactly {{tt|last - first}} assignments

3-4) Exactly {{tt|last - first}} applications of the predicate

For the overloads with an ExecutionPolicy, there may be a performance cost if {{tt|ForwardIt1}}'s value_type is not {{concept|MoveConstructible}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
In practice, implementations of {{tt|std::copy}} avoid multiple assignments and use bulk copy functions such as {{lc|std::memmove}} if the value type is {{concept|TriviallyCopyable}}

When copying overlapping ranges, {{tt|std::copy}} is appropriate when copying to the left (beginning of the destination range is outside the source range) while {{tt|std::copy_backward}} is appropriate when copying to the right (end of the destination range is outside the source range).

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class OutputIt&gt;
OutputIt copy(InputIt first, InputIt last, 
              OutputIt d_first)
{
    while (first != last) {
        *d_first++ = *first++;
    }
    return d_first;
}
 | 2=
template&lt;class InputIt, class OutputIt, class UnaryPredicate&gt;
OutputIt copy_if(InputIt first, InputIt last, 
                 OutputIt d_first, UnaryPredicate pred)
{
    while (first != last) {
        if (pred(*first))
            *d_first++ = *first;
        first++;
    }
    return d_first;
}
}}

===Example===
{{example
 | The following code uses copy to both copy the contents of one vector to another and to display the resulting vector: 
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;numeric&gt;

int main()
{
    std::vector&lt;int&gt; from_vector(10);
    std::iota(from_vector.begin(), from_vector.end(), 0);

    std::vector&lt;int&gt; to_vector;
    std::copy(from_vector.begin(), from_vector.end(),
              std::back_inserter(to_vector));
// or, alternatively,
//  std::vector&lt;int&gt; to_vector(from_vector.size());
//  std::copy(from_vector.begin(), from_vector.end(), to_vector.begin());
// either way is equivalent to
//  std::vector&lt;int&gt; to_vector = from_vector;

    std::cout &lt;&lt; &quot;to_vector contains: &quot;;

    std::copy(to_vector.begin(), to_vector.end(),
              std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';
}
 | output=
to_vector contains: 0 1 2 3 4 5 6 7 8 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc copy_backward}}
{{dsc inc | cpp/algorithm/dsc reverse_copy}}
{{dsc inc | cpp/algorithm/dsc copy_n}}
{{dsc inc | cpp/algorithm/dsc fill}}
{{dsc inc | cpp/algorithm/dsc remove_copy}}


{{dsc end}}

[[de:cpp/algorithm/copy]]
[[es:cpp/algorithm/copy]]
[[fr:cpp/algorithm/copy]]
[[it:cpp/algorithm/copy]]
[[ja:cpp/algorithm/copy]]
[[pt:cpp/algorithm/copy]]
[[ru:cpp/algorithm/copy]]
[[zh:cpp/algorithm/copy]]</text>
      <sha1>8nq49g0rlpwan9zlufiou5hko73a63y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/copy backward</title>
    <ns>0</ns>
    <id>729</id>
    <revision>
      <id>83555</id>
      <parentid>83554</parentid>
      <timestamp>2016-02-26T09:07:53Z</timestamp>
      <contributor>
        <ip>92.125.152.58</ip>
      </contributor>
      <comment>Fix typo. Sorry for that.</comment>
      <text xml:space="preserve" bytes="2385">{{cpp/title|copy_backward}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl |
template&lt; class BidirIt1, class BidirIt2 &gt;
BidirIt2 copy_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
}}
{{dcl end}}

Copies the elements from the range, defined by {{tt|[first, last)}}, to another range ending at {{tt|d_last}}. The elements are copied in reverse order (the last element is copied first), but their relative order is preserved.

The behavior is undefined if {{tt|d_last}} is within {{tt|(first, last]}}. {{lc|std::copy}} must be used instead of {{tt|std::copy_backward}} in that case.

===Parameters===
{{par begin}}
{{par | first, last | the range of the elements to copy}}
{{par | d_last | end of the destination range.. }}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par end}}

===Return value===

iterator to the last element copied.

===Complexity===

Exactly {{tt|last - first}} assignments.

===Notes===

When copying overlapping ranges, {{tt|std::copy}} is appropriate when copying to the left (beginning of the destination range is outside the source range) while {{tt|std::copy_backward}} is appropriate when copying to the right (end of the destination range is outside the source range).

===Possible implementation===
{{eq fun | 1=
template&lt; class BidirIt1, class BidirIt2 &gt;
BidirIt2 copy_backward(BidirIt1 first, BidirIt1 last, BidirIt2 d_last)
{
    while (first != last) {
        *(--d_last) = *(--last);
    }
    return d_last;
}
}}

===Example===
{{example
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
 
int main()
{
    std::vector&lt;int&gt; from_vector;
    for (int i = 0; i &lt; 10; i++) {
        from_vector.push_back(i);
    }
 
    std::vector&lt;int&gt; to_vector(15);
 
    std::copy_backward(from_vector.begin(), from_vector.end(), to_vector.end());
 
    std::cout &lt;&lt; &quot;to_vector contains: &quot;;
    for (auto i: to_vector) {
        std::cout &lt;&lt; i &lt;&lt; &quot; &quot;;
    }
 }
 | output=
to_vector contains: 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc end}}

[[de:cpp/algorithm/copy backward]]
[[es:cpp/algorithm/copy backward]]
[[fr:cpp/algorithm/copy backward]]
[[it:cpp/algorithm/copy backward]]
[[ja:cpp/algorithm/copy backward]]
[[pt:cpp/algorithm/copy backward]]
[[ru:cpp/algorithm/copy backward]]
[[zh:cpp/algorithm/copy backward]]</text>
      <sha1>7af9at7rk8zk9w3o9uk0b6y2bw97xsn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/copy if</title>
    <ns>0</ns>
    <id>2513</id>
    <redirect title="cpp/algorithm/copy" />
    <revision>
      <id>9001</id>
      <timestamp>2011-08-18T12:08:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/algorithm/copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/copy n</title>
    <ns>0</ns>
    <id>2509</id>
    <revision>
      <id>90635</id>
      <parentid>90629</parentid>
      <timestamp>2017-03-06T18:36:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missed return type</comment>
      <text xml:space="preserve" bytes="2417">{{cpp/title|copy_n}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class InputIt, class Size, class OutputIt &gt;
OutputIt copy_n( InputIt first, Size count, OutputIt result );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class Size, class ForwardIt2 &gt;
ForwardIt2 copy_n( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, Size count, ForwardIt2 result );}}
{{dcl end}}

@1@ Copies exactly {{tt|count}} values from the range beginning at {{tt|first}} to the range beginning at {{tt|result}}, if {{tt|count&gt;0}}. Does nothing otherwise.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first | the beginning of the range of elements to copy from}}
{{par | count | number of the elements to copy}}
{{par | result | the beginning of the destination range}}
{{par exec pol}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2| ForwardIterator}}
{{par end}}

===Return value===
Iterator in the destination range, pointing past the last element copied if {{tt|count&gt;0}} or {{tt|result}} otherwise.

===Complexity===

Exactly {{tt|count}} assignments, if {{tt|count&gt;0}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt; class InputIt, class Size, class OutputIt&gt;
OutputIt copy_n(InputIt first, Size count, OutputIt result)
{
    if (count &gt; 0) {
        *result++ = *first;
        for (Size i = 1; i &lt; count; ++i) {
            *result++ = *++first;
        }
    }
    return result;
}
}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

int main()
{
    std::string in = &quot;1234567890&quot;;
    std::string out;

    std::copy_n(in.begin(), 4, std::back_inserter(out));
    std::cout &lt;&lt; out &lt;&lt; '\n';
}
 | output=
1234
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc copy}}

{{dsc end}}

[[de:cpp/algorithm/copy n]]
[[es:cpp/algorithm/copy n]]
[[fr:cpp/algorithm/copy n]]
[[it:cpp/algorithm/copy n]]
[[ja:cpp/algorithm/copy n]]
[[pt:cpp/algorithm/copy n]]
[[ru:cpp/algorithm/copy n]]
[[zh:cpp/algorithm/copy n]]</text>
      <sha1>6t16vt2acn8jg70vuk3flx219l49po4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/count</title>
    <ns>0</ns>
    <id>730</id>
    <revision>
      <id>90625</id>
      <parentid>89851</parentid>
      <timestamp>2017-03-06T18:14:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="3912">{{cpp/title|count|count_if}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class T &gt;
typename iterator_traits&lt;InputIt&gt;::difference_type
    count( InputIt first, InputIt last, const T &amp;value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
typename iterator_traits&lt;ForwardIt&gt;::difference_type
    count( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, const T &amp;value );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt, class UnaryPredicate &gt;
typename iterator_traits&lt;InputIt&gt;::difference_type
    count_if( InputIt first, InputIt last, UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
typename iterator_traits&lt;ForwardIt&gt;::difference_type
    count_if( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryPredicate p );}}
{{dcl end}}

Returns the number of elements in the range {{tt|[first, last)}} satisfying specific criteria. 
@1@ counts the elements that are equal to {{tt|value}}.
@3@ counts elements for which predicate {{tt|p}} returns {{c|true}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | value | the value to search for}}
{{par exec pol}}
{{par pred1 | p | value=true | for the required elements | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
number of elements satisfying the condition.

===Complexity===

exactly {{tt|last}} - {{tt|first}} comparisons / applications of the predicate

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
For the number of elements in the range {{tt|[first, last)}} without any additional criteria, see {{lc|std::distance}}.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class T&gt;
typename iterator_traits&lt;InputIt&gt;::difference_type
    count(InputIt first, InputIt last, const T&amp; value)
{
    typename iterator_traits&lt;InputIt&gt;::difference_type ret = 0;
    for (; first != last; ++first) {
        if (*first == value) {
            ret++;
        }
    }
    return ret;
}
 | 2=
template&lt;class InputIt, class UnaryPredicate&gt;
typename iterator_traits&lt;InputIt&gt;::difference_type
    count_if(InputIt first, InputIt last, UnaryPredicate p)
{
    typename iterator_traits&lt;InputIt&gt;::difference_type ret = 0;
    for (; first != last; ++first) {
        if (p(*first)) {
            ret++;
        }
    }
    return ret;
}
}}

===Example===
{{example
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
 
int main()
{
    std::vector&lt;int&gt; v{ 1, 2, 3, 4, 4, 3, 7, 8, 9, 10 };

    // determine how many integers in a std::vector match a target value.
    int target1 = 3;
    int target2 = 5;
    int num_items1 = std::count(v.begin(), v.end(), target1);
    int num_items2 = std::count(v.begin(), v.end(), target2);
    std::cout &lt;&lt; &quot;number: &quot; &lt;&lt; target1 &lt;&lt; &quot; count: &quot; &lt;&lt; num_items1 &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;number: &quot; &lt;&lt; target2 &lt;&lt; &quot; count: &quot; &lt;&lt; num_items2 &lt;&lt; '\n';

    // use a lambda expression to count elements divisible by 3.
    int num_items3 = std::count_if(v.begin(), v.end(), [](int i){return i % 3 == 0;});
    std::cout &lt;&lt; &quot;number divisible by three: &quot; &lt;&lt; num_items3 &lt;&lt; '\n';
}
 | output=
number: 3 count: 2
number: 5 count: 0
number divisible by three: 3
}}

===See also===
{{dsc begin}}


{{dsc end}}

[[de:cpp/algorithm/count]]
[[es:cpp/algorithm/count]]
[[fr:cpp/algorithm/count]]
[[it:cpp/algorithm/count]]
[[ja:cpp/algorithm/count]]
[[pt:cpp/algorithm/count]]
[[ru:cpp/algorithm/count]]
[[zh:cpp/algorithm/count]]</text>
      <sha1>ol7ygqv11iot4ib9ef99yaco4c0b87a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/count if</title>
    <ns>0</ns>
    <id>2542</id>
    <redirect title="cpp/algorithm/count" />
    <revision>
      <id>9312</id>
      <timestamp>2011-08-21T16:06:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/algorithm/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/equal</title>
    <ns>0</ns>
    <id>731</id>
    <revision>
      <id>90655</id>
      <parentid>90627</parentid>
      <timestamp>2017-03-06T19:26:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0467r2 extra on complexity</comment>
      <text xml:space="preserve" bytes="5962">{{cpp/title|equal}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2 &gt;
bool equal( InputIt1 first1, InputIt1 last1, 
            InputIt2 first2 );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
bool equal( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1, 
            ForwardIt2 first2 );}}
{{dcl | since= | num= 3 |1=  
template&lt; class InputIt1, class InputIt2, class BinaryPredicate &gt;
bool equal( InputIt1 first1, InputIt1 last1, 
            InputIt2 first2, BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
bool equal( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1, 
            ForwardIt2 first2, BinaryPredicate p );}}
{{dcl | since=c++14 | num= 5 |1= 
template&lt; class InputIt1, class InputIt2 &gt;
bool equal( InputIt1 first1, InputIt1 last1, 
            InputIt2 first2, InputIt2 last2 );
}}
{{dcl | since=c++17 | num= 6 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
bool equal( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1, 
            ForwardIt2 first2, ForwardIt2 last2 );}}
{{dcl | since=c++14 | num= 7 |1= 
template&lt; class InputIt1, class InputIt2, class BinaryPredicate &gt;
bool equal( InputIt1 first1, InputIt1 last1, 
            InputIt2 first2, InputIt2 last2,
            BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 8 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
bool equal( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1, 
            ForwardIt2 first2, ForwardIt2 last2,
            BinaryPredicate p );}}
{{dcl end}}

@1,3@ Returns {{c|true}} if the range {{tt|[first1, last1)}} is equal to the range {{tt|[first2, first2 + (last1 - first1))}}, and {{c|false}} otherwise
@5,7@ Returns {{c|true}} if the range {{tt|[first1, last1)}} is equal to the range {{tt|[first2, last2)}}, and {{c|false}} otherwise.

@2,4,6,8@ Same as {{v|1,3,5,7}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

The two ranges are considered equal if, for every iterator {{tt|i}} in the range {{tt|[first1,last1)}}, {{c|*i}} equals {{c|*(first2 + (i - first1))}}. The overloads {{v|1,2,5,6}} use {{c|operator{{==}}}} to determine if two elements are equal, whereas overloads {{v|3,4,7,8}} use the given binary predicate {{tt|p}}.

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of the elements to compare}}
{{par | first2, last2 | the second range of the elements to compare}}
{{par exec pol}}
{{par pred2 eq | p | p1=InputIt1 | p2=InputIt2}}
{{par hreq}}
{{par req concept | InputIt1, InputIt2 | InputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par end}}

===Return value===

@5-8@If the length of the range {{tt|[first1, last1)}} does not equal the length of the range {{tt|[first2, last2)}}, returns {{c|false}}

If the elements in the two ranges are equal, returns {{c|true}}.

Otherwise returns {{c|false}}.

===Notes===

{{tt|std::equal}} should not be used to compare the ranges formed by the iterators from {{lc|std::unordered_set}}, {{lc|std::unordered_multiset}}, {{lc|std::unordered_map}}, or {{lc|std::unordered_multimap}} because the order in which the elements are stored in those containers may be different even if the two containers store the same elements. 

When comparing entire containers for equality, {{tt|operator{{==}}}} for the corresponding container are usually preferred.

===Complexity===
@1,3@At most {{tt|last1}} - {{tt|first1}} applications of the predicate
@5,7@At most min({{tt|last1}} - {{tt|first1}}, {{tt|last2}} - {{tt|first2}}) applications of the predicate.&lt;br&gt;
However, if {{tt|InputIt1}} and {{tt|InputIt2}} meet the requirements of {{concept|RandomAccessIterator}} and {{c|last1 - first1 !{{=}} last2 - first2}} then no applications of the predicate are made (size mismatch is detected without looking at any elements).
@2,4,6,8@ same, but the complexity is specified as O(x), rather than &quot;at most x&quot;

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2&gt;
bool equal(InputIt1 first1, InputIt1 last1, 
           InputIt2 first2)
{
    for (; first1 != last1; ++first1, ++first2) {
        if (!(*first1 == *first2)) {
            return false;
        }
    }
    return true;
}
 | 2=
template&lt;class InputIt1, class InputIt2, class BinaryPredicate&gt;
bool equal(InputIt1 first1, InputIt1 last1, 
           InputIt2 first2, BinaryPredicate p)
{
    for (; first1 != last1; ++first1, ++first2) {
        if (!p(*first1, *first2)) {
            return false;
        }
    }
    return true;
}
}}

===Example===
{{example
 | The following code uses {{c|equal()}} to test if a string is a palindrome
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

bool is_palindrome(const std::string&amp; s)
{
    return std::equal(s.begin(), s.begin() + s.size()/2, s.rbegin());
}

void test(const std::string&amp; s)
{
    std::cout &lt;&lt; &quot;\&quot;&quot; &lt;&lt; s &lt;&lt; &quot;\&quot; &quot;
        &lt;&lt; (is_palindrome(s) ? &quot;is&quot; : &quot;is not&quot;)
        &lt;&lt; &quot; a palindrome\n&quot;;
}

int main()
{
    test(&quot;radar&quot;);
    test(&quot;hello&quot;);
}
 | output=
&quot;radar&quot; is a palindrome
&quot;hello&quot; is not a palindrome
}}

{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc inc | cpp/algorithm/dsc lexicographical_compare}}
{{dsc inc | cpp/algorithm/dsc mismatch}}
{{dsc inc | cpp/algorithm/dsc search}}

{{dsc end}}

[[de:cpp/algorithm/equal]]
[[es:cpp/algorithm/equal]]
[[fr:cpp/algorithm/equal]]
[[it:cpp/algorithm/equal]]
[[ja:cpp/algorithm/equal]]
[[pt:cpp/algorithm/equal]]
[[ru:cpp/algorithm/equal]]
[[zh:cpp/algorithm/equal]]</text>
      <sha1>64nkfvo2aa0f4vvzam8t6jonyms0fzs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/equal range</title>
    <ns>0</ns>
    <id>732</id>
    <revision>
      <id>77489</id>
      <parentid>77488</parentid>
      <timestamp>2015-03-26T18:34:24Z</timestamp>
      <contributor>
        <username>MihaiTodor</username>
        <id>3802</id>
      </contributor>
      <minor/>
      <comment>Preserve uniformity in wording between lower_bound, upper_bound and equal_range.</comment>
      <text xml:space="preserve" bytes="5864">{{cpp/title|equal_range}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class ForwardIt, class T &gt;
std::pair&lt;ForwardIt,ForwardIt&gt; 
    equal_range( ForwardIt first, ForwardIt last,
                 const T&amp; value );
}}
{{dcl | num=2 |
template&lt; class ForwardIt, class T, class Compare &gt;
std::pair&lt;ForwardIt,ForwardIt&gt; 
    equal_range( ForwardIt first, ForwardIt last,
                 const T&amp; value, Compare comp );
}}
{{dcl end}}

Returns a range containing all elements equivalent to {{tt|value}} in the range {{tt|[first, last)}}.

The range {{tt|[first, last)}} must be partitioned with respect to comparison with {{tt|value}}, i.e. it must satisfy all of the following requirements:
* partitioned with respect to {{c|element &lt; value}} or {{c|comp(element, value)}}
* partitioned with respect to {{c|!(value &lt; element)}} or {{c|!comp(value, element)}}
* for all elements, if {{c|element &lt; value}} or {{c|comp(element, value)}} is {{c|true}} then {{c|!(value &lt; element)}} or {{c|!comp(value, element)}} is also {{c|true}}
A fully-sorted range meets these criteria, as does a range resulting from a call to {{c|std::partition}}.

The returned range is defined by two iterators, one pointing to the first element that is ''not less'' than {{tt|value}} and another pointing to the first element ''greater'' than {{tt|value}}. The first iterator may be alternatively obtained with {{lc|std::lower_bound()}}, the second - with {{lc|std::upper_bound()}}.

The first version uses {{c|operator&lt;}} to compare the elements, the second version uses the given comparison function {{tt|comp}}.


===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | value | value to compare the elements to}}
{{par | comp | comparison function which returns ​{{c|true}} if the first argument is ''less'' than the second. &lt;br&gt;
The signature of the comparison function should be equivalent to the following:
{{ddcl | 
bool cmp(const Type1 &amp;a, const Type2 &amp;b);
}}
The signature does not need to have {{c|const &amp;}}, but the function must not modify the objects passed to it.&lt;br&gt;
{{tt|cmp}} will be called as both {{tt|cmp(value, *iterator)}} and {{tt|cmp(*iterator, value)}}.
}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
{{lc|std::pair}} containing a pair of iterators defining the wanted range, the first pointing to the first element that is ''not less'' than {{tt|value}} and the second pointing to the first element ''greater'' than {{tt|value}}. 

If there are no elements ''not less'' than {{tt|value}}, {{tt|last}} is returned as the first element. Similarly if there are no elements ''greater'' than {{tt|value}}, {{tt|last}} is returned as the second element

===Complexity===
The number of comparisons performed is logarithmic in the distance between {{tt|first}} and {{tt|last}} (At most {{math|2 * log{{su|b=2}}(last - first) + O(1)}} comparisons). However, for non-{{concept|RandomAccessIterator}}s, the number of iterator increments is linear.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt, class T&gt;
std::pair&lt;ForwardIt,ForwardIt&gt; 
    equal_range(ForwardIt first, ForwardIt last,
                const T&amp; value)
{
    return std::make_pair(std::lower_bound(first, last, value),
                          std::upper_bound(first, last, value));
}
 | 2=
template&lt;class ForwardIt, class T, class Compare&gt;
std::pair&lt;ForwardIt,ForwardIt&gt; 
    equal_range(ForwardIt first, ForwardIt last,
                const T&amp; value, Compare comp);
{
    return std::make_pair(std::lower_bound(first, last, value, comp),
                          std::upper_bound(first, last, value, comp));
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

struct S
{
    int number;
    char name;

    S ( int number, char name  )
        : number ( number ), name ( name )
    {}

    // only the number is relevant with this comparison
    bool operator&lt; ( const S&amp; s ) const
    {
        return number &lt; s.number;
    }
};


int main()
{
    // note: not ordered, only partitioned w.r.t. S defined below
    std::vector&lt;S&gt; vec {{=}} { {1,'A'}, {2,'B'}, {2,'C'}, {2,'D'}, {4,'G'}, {3,'F'} };

    S value ( 2, '?' );

    auto p {{=}} std::equal_range(vec.begin(),vec.end(),value);

    for ( auto i = p.first; i !{{=}} p.second; ++i )
        std::cout &lt;&lt; i-&gt;name &lt;&lt; ' ';
}


 | output=
B C D
}}

===Example With Comparator===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

struct S
{
    int number;
    char name;

    S ( int number, char name  )
        : number ( number ), name ( name )
    {}

    // only the number is relevant with this comparison
    bool operator&lt; ( const S&amp; s ) const
    {
        return number &lt; s.number;
    }
};

struct Comp
{
    bool operator() ( const S&amp; s, int i )
    {
        return s.number &lt; i;
    }

    bool operator() ( int i, const S&amp; s )
    {
        return i &lt; s.number;
    }
};

int main()
{
    // note: not ordered, only partitioned w.r.t. S defined below
    std::vector&lt;S&gt; vec = { {1,'A'}, {2,'B'}, {2,'C'}, {2,'D'}, {4,'G'}, {3,'F'} };

    auto p = std::equal_range(vec.begin(),vec.end(),2,Comp());

    for ( auto i = p.first; i != p.second; ++i )
        std::cout &lt;&lt; i-&gt;name &lt;&lt; ' ';
}


 | output=
B C D
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc lower_bound}}
{{dsc inc | cpp/algorithm/dsc upper_bound}}
{{dsc inc | cpp/algorithm/dsc binary_search}}
{{dsc inc | cpp/algorithm/dsc partition}}
{{dsc end}}

[[de:cpp/algorithm/equal range]]
[[es:cpp/algorithm/equal range]]
[[fr:cpp/algorithm/equal range]]
[[it:cpp/algorithm/equal range]]
[[ja:cpp/algorithm/equal range]]
[[pt:cpp/algorithm/equal range]]
[[ru:cpp/algorithm/equal range]]
[[zh:cpp/algorithm/equal range]]</text>
      <sha1>sln1h7qw555nrssl6dwp3wrf43ve76c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/exclusive scan</title>
    <ns>0</ns>
    <id>15161</id>
    <revision>
      <id>90786</id>
      <parentid>90662</parentid>
      <timestamp>2017-03-10T14:51:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>requirements on T from P0574r1</comment>
      <text xml:space="preserve" bytes="3928">{{cpp/title|exclusive_scan}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | since=c++17 | num= 1 |1= 
template&lt; class InputIt, class OutputIt, class T &gt;
OutputIt exclusive_scan( InputIt first, InputIt last,
                         OutputIt d_first, T init );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class T &gt;
ForwardIt2 exclusive_scan( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                           ForwardIt2 d_first, T init);}}
{{dcl | since=c++17 | num= 3 |1= 
template&lt; class InputIt, class OutputIt, 
          class T, class BinaryOperation &gt;
OutputIt exclusive_scan( InputIt first, InputIt last,
                         OutputIt d_first, T init, BinaryOperation binary_op );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class T, class BinaryOperation &gt;
ForwardIt2 exclusive_scan( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                           ForwardIt2 d_first, T init, BinaryOperation binary_op );}}
{{dcl end}}

Computes an exclusive prefix sum operation using {{tt|binary_op}} (or {{c|std::plus&lt;&gt;()}} for overloads {{v|1-2}}) for the range {{tt|[first, last)}}, using {{tt|init}} as the initial value, and writes the results to the range beginning at {{tt|d_first}}. &quot;exclusive&quot; means that the i-th input element is not included in the i-th sum. 

Formally, assigns through each iterator {{tt|i}} in {{math|[d_first, d_first + (last - first))}} the value of the generalized noncommutative sum of {{tt|init, *j...}} for every {{tt|j}} in {{math|[first, first + (i - d_first))}} over {{tt|binary_op}},

where generalized noncommutative sum {{math|GNSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GNSUM(op, a{{su|b=1}}, ..., a{{su|b=K}}), GNSUM(op, a{{su|b=M}}, ..., a{{su|b=N}}))}} for any K where {{math|1 &lt; K+1 {{=}} M ≤ N}}

In other words, the summation operations may be performed in arbitrary order, and the behavior is nondeterministic if {{tt|binary_op}} is not associative.

Overloads {{v|2,4}} are executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.}}

{{tt|binary_op}} shall not invalidate iterators (including the end iterators) or subranges, nor modify elements in the ranges {{math|[first, last)}} or {{math|[d_first, d_first + (last - first))}}. Otherwise, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sum}}
{{par | d_first | the beginning of the destination range; may be equal to {{tt|first}} }}
{{par exec pol}}
{{par | init | the initial value}}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in to the result of dereferencing the input iterators, the results of other {{tt|binary_op}}, and {{tt|init}}.}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | T | MoveConstructible | notes=and {{tt|binary_op(init, *first)}}, {{tt|binary_op(init, init)}}, and {{tt|binary_op(*first, *first)}} must be convertible to {{tt|T}}}}
{{par end}}

===Return value===
Iterator to the element past the last element written.

===Complexity===
{{math|O(last - first)}} applications of the binary operation

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc adjacent_difference}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc transform_exclusive_scan}}
{{dsc inc | cpp/algorithm/dsc inclusive_scan}}
{{dsc end}}</text>
      <sha1>12dzdvxh0tl39gc5z6hxk3gvnoips5b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/execution policy tag</title>
    <ns>0</ns>
    <id>15078</id>
    <revision>
      <id>90984</id>
      <parentid>86183</parentid>
      <timestamp>2017-03-14T12:58:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="1030">{{cpp/algorithm/execution/title|seq|par|par_unseq}}
{{cpp/algorithm/navbar}}

{{dcl begin}}
{{dcl header | execution }}
{{dcl | since=c++17|
inline constexpr std::execution::sequenced_policy seq { /* unspecified */ };
}}
{{dcl | since=c++17|
inline constexpr std::execution::parallel_policy par { /* unspecified */ };
}}
{{dcl | since=c++17|
inline constexpr std::execution::parallel_unsequenced_policy par_unseq { /* unspecified */ };
}}
{{dcl end}}

{{tt|std::execution::seq}}, {{tt|std::execution::par}} and {{tt|std::execution::par_unseq}} are instances of the execution policy types {{lc|std::execution::sequenced_policy}}, {{lc|std::execution::parallel_policy}} and {{lc|std::execution::parallel_unsequenced_policy}} respectively. They are used to specify the execution policy of parallel algorithms - i.e., the kinds of parallelism allowed.

Additional execution policies may be provided by a standard library implementation.

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag_t }}
{{dsc end}}</text>
      <sha1>pb3x22w0z5iuekdtxim4nz0eiwsa5w7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/execution policy tag t</title>
    <ns>0</ns>
    <id>15079</id>
    <revision>
      <id>89964</id>
      <parentid>89956</parentid>
      <timestamp>2017-01-31T18:01:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>...parent stealing to be exact (child stealing does fine in par)</comment>
      <text xml:space="preserve" bytes="3805">{{cpp/algorithm/execution/title|sequenced_policy|parallel_policy|parallel_unsequenced_policy}}
{{cpp/algorithm/navbar}}

{{dcl begin}}
{{dcl header | execution }}
{{dcl | num=1| since=c++17 |
class sequenced_policy { /* unspecified */ };
}}
{{dcl | num=2|since=c++17 |
class parallel_policy { /* unspecified */ };
}}
{{dcl | num=3|since=c++17 |
class parallel_unsequenced_policy { /* unspecified */ };
}}
{{dcl end}}

@1@ The execution policy type used as a unique type to disambiguate parallel algorithm overloading and require that a parallel algorithm's execution may not be parallelized. The invocations of element access functions in parallel algorithms invoked with this policy (usually specified as {{lc|std::execution::seq}}) are indeterminately sequenced in the calling thread.
@2@ The execution policy type used as a unique type to disambiguate parallel algorithm overloading and indicate that a parallel algorithm's execution may be parallelized. The invocations of element access functions in parallel algorithms invoked with this policy (usually specified as {{lc|std::execution::par}}) are permitted to execute in either the invoking thread or in a thread implicitly created by the library to support parallel algorithm execution. Any such invocations executing in the same thread are indeterminately sequenced with respect to each other.
@3@ The execution policy type used as a unique type to disambiguate parallel algorithm overloading and indicate that a parallel algorithm's execution may be parallelized, vectorized, or migrated across threads (such as by a parent-stealing scheduler). The invocations of element access functions in parallel algorithms invoked with this policy are permitted to execute in an unordered fashion in unspecified threads, and unsequenced with respect to one another within each thread. 

During the execution of a parallel algorithm with any of these three execution policies, if the invocation of an element access function exits via an uncaught exception, {{lc|std::terminate}} is called, but the implementations may define additional execution policies that handle exceptions differently.

===Notes===
When using parallel execution policy, it is the programmer's responsility to avoid deadlocks:
{{source|1=
int a[] = {0,1};
std::vector&lt;int&gt; v;
std::for_each(std::execution::par, std::begin(a), std::end(a), [&amp;](int i) {
  v.push_back(i*2+1); // Error: data race
});
}}

{{source|1=
std::atomic&lt;int&gt; x{0};
int a[] = {1,2};
std::for_each(std::execution::par, std::begin(a), std::end(a), [&amp;](int) {
  x.fetch_add(1, std::memory_order_relaxed);
  while (x.load(std::memory_order_relaxed) == 1) { } // Error: assumes execution order
});
}}

{{source|1=
int x = 0;
std::mutex m;
int a[] = {1,2};
std::for_each(std::execution::par, std::begin(a), std::end(a), [&amp;](int) {
  std::lock_guard&lt;std::mutex&gt; guard(m);
  ++x; // correct
});
}}

Unsequenced execution policy is the only case where function calls are ''unsequenced'' with respect to each other, meaning they can be interleaved. In all other situations in C++, they are [[cpp/language/eval_order|indeterminately-sequenced]] (cannot interleave). Because of that, users are not allowed to allocate or deallocate memory, acquire mutexes or perform any other vectorization-unsafe operations when using this policy (vectorization-unsafe functions are the ones that synchronize-with another function, e.g. {{lc|std::mutex::unlock}} synchronizes-with the next {{lc|std::mutex::lock}})
{{source|1=
int x = 0;
std::mutex m;
int a[] = {1,2};
std::for_each(std::execution::par_unseq, std::begin(a), std::end(a), [&amp;](int) {
  std::lock_guard&lt;mutex&gt; guard(m); // Error: lock_guard constructor calls m.lock()
  ++x;
});
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag }}
{{dsc end}}</text>
      <sha1>0gfe521gf4xfvmrwmedcrole5qw0pgr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/fill</title>
    <ns>0</ns>
    <id>733</id>
    <revision>
      <id>89866</id>
      <parentid>85144</parentid>
      <timestamp>2017-01-27T05:20:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2160">{{cpp/title|fill}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt, class T &gt;
void fill( ForwardIt first, ForwardIt last, const T&amp; value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
void fill( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, const T&amp; value );}}
{{dcl end}}

@1@ Assigns the given {{tt|value}} to the elements in the range {{tt|[first, last)}}.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to modify}}
{{par | value | the value to be assigned}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
(none)

===Complexity===

Exactly {{tt|last - first}} assignments.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt; class ForwardIt, class T &gt;
void fill(ForwardIt first, ForwardIt last, const T&amp; value)
{
    for (; first != last; ++first) {
        *first = value;
    }
}
}}

===Example===
{{example
 | The following code uses {{tt|fill()}} to set all of the elements of a vector of integers to -1: 
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::vector&lt;int&gt; v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 
    std::fill(v.begin(), v.end(), -1);
 
    for (auto elem : v) {
        std::cout &lt;&lt; elem &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; &quot;\n&quot;;
}
 | output=
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc fill_n}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc inc | cpp/algorithm/dsc generate}}
{{dsc inc | cpp/algorithm/dsc transform}}

{{dsc end}}

[[de:cpp/algorithm/fill]]
[[es:cpp/algorithm/fill]]
[[fr:cpp/algorithm/fill]]
[[it:cpp/algorithm/fill]]
[[ja:cpp/algorithm/fill]]
[[pt:cpp/algorithm/fill]]
[[ru:cpp/algorithm/fill]]
[[zh:cpp/algorithm/fill]]</text>
      <sha1>9z4iwmw1qlmgexvdzlx5n6bysorbisk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/fill n</title>
    <ns>0</ns>
    <id>734</id>
    <revision>
      <id>90639</id>
      <parentid>89856</parentid>
      <timestamp>2017-03-06T18:43:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="2622">{{cpp/title|fill_n}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin | num = 1}}
{{dcl | until=c++11 |
template&lt; class OutputIt, class Size, class T &gt;
void fill_n( OutputIt first, Size count, const T&amp; value );
}}
{{dcl | since=c++11 | 1= 
template&lt; class OutputIt, class Size, class T &gt;
OutputIt fill_n( OutputIt first, Size count, const T&amp; value );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Size, class T &gt;
ForwardIt fill_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, Size count, const T&amp; value );}}
{{dcl end}}

@1@ Assigns the given {{tt|value}} to the first {{tt|count}} elements in the range beginning at {{tt|first}} if {{tt|count &gt; 0}}. Does nothing otherwise.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first | the beginning of the range of elements to modify}}
{{par | count | number of elements to modify}}
{{par | value | the value to be assigned}}
{{par exec pol}}
{{par hreq}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | Iterator one past the last element assigned if {{tt|count &gt; 0}}, {{tt|first}} otherwise.
}}
{{rev end}}

===Complexity===
Exactly {{tt|count}} assignments, for {{tt|count &gt; 0}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class OutputIt, class Size, class T&gt;
OutputIt fill_n(OutputIt first, Size count, const T&amp; value)
{
    for (Size i = 0; i &lt; count; i++) {
        *first++ = value;
    }
    return first;
}
}}

===Example===
{{example
 | The following code uses {{tt|fill_n()}} to assign -1 to the first half of a vector of integers: 
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
 
int main()
{
    std::vector&lt;int&gt; v1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 
    std::fill_n(v1.begin(), 5, -1);
 
    std::copy(begin(v1), end(v1), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; &quot;\n&quot;;
}
 | output=
-1 -1 -1 -1 -1 5 6 7 8 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc fill}}

{{dsc end}}

[[de:cpp/algorithm/fill n]]
[[es:cpp/algorithm/fill n]]
[[fr:cpp/algorithm/fill n]]
[[it:cpp/algorithm/fill n]]
[[ja:cpp/algorithm/fill n]]
[[pt:cpp/algorithm/fill n]]
[[ru:cpp/algorithm/fill n]]
[[zh:cpp/algorithm/fill n]]</text>
      <sha1>sslai0aunaf0e5cijwvzlhi41psalq9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/find</title>
    <ns>0</ns>
    <id>735</id>
    <revision>
      <id>90637</id>
      <parentid>90623</parentid>
      <timestamp>2017-03-06T18:38:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missed return type</comment>
      <text xml:space="preserve" bytes="4794">{{cpp/title| find | find_if | find_if_not}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1=

template&lt; class InputIt, class T &gt;
InputIt find( InputIt first, InputIt last, const T&amp; value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
ForwardIt find( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, const T&amp; value );}}
{{dcl | since= | num= 3 |1=

template&lt; class InputIt, class UnaryPredicate &gt;
InputIt find_if( InputIt first, InputIt last, 
                 UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
ForwardIt find_if( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, 
                 UnaryPredicate p );}}
{{dcl | since=c++11 | num= 5 |1=

template&lt; class InputIt, class UnaryPredicate &gt;
InputIt find_if_not( InputIt first, InputIt last, 
                     UnaryPredicate q );
}}
{{dcl | since=c++17 | num= 6 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
ForwardIt find_if_not( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, 
                     UnaryPredicate q );}}
{{dcl end}}

Returns the first element in the range {{tt|[first, last)}} that satisfies specific criteria:
@1@ {{tt|find}} searches for an element equal to {{tt|value}}

@3@ {{tt|find_if}} searches for an element for which predicate {{tt|p}} returns {{c|true}}

@5@ {{tt|find_if_not}} searches for an element for which predicate {{tt|q}} returns {{c|false}}
@2,4,6@ Same as {{v|1,3,5}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | value | value to compare the elements to}}
{{par exec pol}}
{{par pred1 | p | value=true | for the required element | p1=InputIt}}
{{par pred1 | q | value=false | for the required element | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
Iterator to the first element satisfying the condition or {{tt|last}} if no such element is found.

===Complexity===
At most {{tt|last}} - {{tt|first}} applications of the predicate
===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class T&gt;
InputIt find(InputIt first, InputIt last, const T&amp; value)
{
    for (; first != last; ++first) {
        if (*first == value) {
            return first;
        }
    }
    return last;
}
 | 2=
template&lt;class InputIt, class UnaryPredicate&gt;
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p)
{
    for (; first != last; ++first) {
        if (p(*first)) {
            return first;
        }
    }
    return last;
}
 | 3=
template&lt;class InputIt, class UnaryPredicate&gt;
InputIt find_if_not(InputIt first, InputIt last, UnaryPredicate q)
{
    for (; first != last; ++first) {
        if (!q(*first)) {
            return first;
        }
    }
    return last;
}
}}

If you do not have C++11, an equivalent to {{lc|std::find_if_not}} is to use {{lc|std::find_if}} with the negated predicate.
{{eq fun | 1=
template&lt;class InputIt, class UnaryPredicate&gt;
InputIt find_if_not(InputIt first, InputIt last, UnaryPredicate q)
{
    return std::find_if(first, last, std::not1(q));
}
}}

===Example===
{{example
 | The following example finds an integer in a vector of integers.
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;

int main()
{
    int n1 = 3;
    int n2 = 5;
 
    std::vector&lt;int&gt; v{0, 1, 2, 3, 4};
 
    auto result1 = std::find(std::begin(v), std::end(v), n1);
    auto result2 = std::find(std::begin(v), std::end(v), n2);
 
    if (result1 != std::end(v)) {
        std::cout &lt;&lt; &quot;v contains: &quot; &lt;&lt; n1 &lt;&lt; '\n';
    } else {
        std::cout &lt;&lt; &quot;v does not contain: &quot; &lt;&lt; n1 &lt;&lt; '\n';
    }

    if (result2 != std::end(v)) {
        std::cout &lt;&lt; &quot;v contains: &quot; &lt;&lt; n2 &lt;&lt; '\n';
    } else {
        std::cout &lt;&lt; &quot;v does not contain: &quot; &lt;&lt; n2 &lt;&lt; '\n';
    }
}
 | output=
v contains: 3
v does not contain: 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/algorithm/dsc find_end}}
{{dsc inc | cpp/algorithm/dsc find_first_of}}
{{dsc inc | cpp/algorithm/dsc mismatch}}
{{dsc inc | cpp/algorithm/dsc search}}



{{dsc end}}

[[de:cpp/algorithm/find]]
[[es:cpp/algorithm/find]]
[[fr:cpp/algorithm/find]]
[[it:cpp/algorithm/find]]
[[ja:cpp/algorithm/find]]
[[pt:cpp/algorithm/find]]
[[ru:cpp/algorithm/find]]
[[zh:cpp/algorithm/find]]</text>
      <sha1>2okfeaej3ceroytsiad2ua0arsavxtv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/find end</title>
    <ns>0</ns>
    <id>736</id>
    <revision>
      <id>89833</id>
      <parentid>84638</parentid>
      <timestamp>2017-01-27T05:18:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="5152">{{cpp/title|find_end}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 find_end( ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 find_end( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
ForwardIt1 find_end( ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last, BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
ForwardIt1 find_end( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last, BinaryPredicate p );}}
{{dcl end}}

Searches for the last subsequence of elements {{tt|[s_first, s_last)}} in the range {{tt|[first, last)}}. 

@1@ Elements are compared using {{tt|operator{{==}}}}.
@3@ Elements are compared using the given binary predicate {{tt|p}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | s_first, s_last | the range of elements to search for}}
{{par exec pol}}
{{par pred2 eq | p | p1=ForwardIt1 | p2=ForwardIt2}}
{{par hreq}}
{{par req concept | ForwardIt1 | ForwardIterator}}
{{par req concept | ForwardIt2 | ForwardIterator}}
{{par end}}

===Return value===
Iterator to the beginning of last subsequence {{tt|[s_first, s_last)}} in range {{tt|[first, last)}}.

{{rev begin}}
{{rev | until=c++11 |
If no such subsequence is found, {{tt|last}} is returned.
}}
{{rev | since=c++11 |
If {{tt|[s_first, s_last)}} is empty or if no such subsequence is found, {{tt|last}} is returned.
}}
{{rev end}}

===Complexity===
Does at most {{tt|S*(N-S+1)}} comparisons where {{c|S {{=}} distance(s_first, s_last)}} and {{c|N {{=}} distance(first, last)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt1, class ForwardIt2&gt;
ForwardIt1 find_end(ForwardIt1 first, ForwardIt1 last,
                    ForwardIt2 s_first, ForwardIt2 s_last)
{
    if (s_first == s_last)
        return last;
    ForwardIt1 result = last;
    while (1) {
        ForwardIt1 new_result = std::search(first, last, s_first, s_last);
        if (new_result == last) {
            return result;
        } else {
            result = new_result;
            first = result;
            ++first;
        }
    }
    return result;
}
 | 2=
template&lt;class ForwardIt1, class ForwardIt2, class BinaryPredicate&gt;
ForwardIt1 find_end(ForwardIt1 first, ForwardIt1 last,
                    ForwardIt2 s_first, ForwardIt2 s_last,
                    BinaryPredicate p)
{
    if (s_first == s_last)
        return last;
    ForwardIt1 result = last;
    while (1) {
        ForwardIt1 new_result = std::search(first, last, s_first, s_last, p);
        if (new_result == last) {
            return result;
        } else {
            result = new_result;
            first = result;
            ++first;
        }
    }
    return result;
}
}}

===Example===
{{example
 | The following code uses {{tt|find_end()}} to search for two different sequences of numbers. 
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4};
    std::vector&lt;int&gt;::iterator result;
 
    std::vector&lt;int&gt; t1{1, 2, 3};

    result = std::find_end(v.begin(), v.end(), t1.begin(), t1.end());
    if (result == v.end()) {
        std::cout &lt;&lt; &quot;subsequence not found\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;last subsequence is at: &quot;
                  &lt;&lt; std::distance(v.begin(), result) &lt;&lt; &quot;\n&quot;;
    }

    std::vector&lt;int&gt; t2{4, 5, 6};
    result = std::find_end(v.begin(), v.end(), t2.begin(), t2.end());
    if (result == v.end()) {
        std::cout &lt;&lt; &quot;subsequence not found\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;last subsequence is at: &quot; 
                  &lt;&lt; std::distance(v.begin(), result) &lt;&lt; &quot;\n&quot;;
    }
}
 | output=
last subsequence is at: 8
subsequence not found
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc inc | cpp/algorithm/dsc find_first_of}}
{{dsc inc | cpp/algorithm/dsc search_n}}

{{dsc end}}

[[de:cpp/algorithm/find end]]
[[es:cpp/algorithm/find end]]
[[fr:cpp/algorithm/find end]]
[[it:cpp/algorithm/find end]]
[[ja:cpp/algorithm/find end]]
[[pt:cpp/algorithm/find end]]
[[ru:cpp/algorithm/find end]]
[[zh:cpp/algorithm/find end]]</text>
      <sha1>1v5by7ts2zcnesjj4j6e9ham2whok0z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/find first of</title>
    <ns>0</ns>
    <id>737</id>
    <revision>
      <id>90636</id>
      <parentid>90624</parentid>
      <timestamp>2017-03-06T18:37:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missed return type</comment>
      <text xml:space="preserve" bytes="4634">{{cpp/title|find_first_of}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
template&lt; class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 find_first_of( ForwardIt1 first, ForwardIt1 last,
                          ForwardIt2 s_first, ForwardIt2 s_last );
}}
{{dcl | since=c++11 | 1=

template&lt; class InputIt, class ForwardIt &gt;
InputIt find_first_of( InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 find_first_of( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                       ForwardIt2 s_first, ForwardIt2 s_last );}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
template&lt; class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
ForwardIt1 find_first_of( ForwardIt1 first, ForwardIt1 last,
                          ForwardIt2 s_first, ForwardIt2 s_last, BinaryPredicate p );
}}
{{dcl | since=c++11 | 1=

template&lt; class InputIt, class ForwardIt, class BinaryPredicate &gt;
InputIt find_first_of( InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last, BinaryPredicate p );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
ForwardIt1 find_first_of( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt last,
                       ForwardIt2 s_first, ForwardIt2 s_last, BinaryPredicate p );}}
{{dcl end}}

Searches the range {{tt|[first, last)}} for any of the elements in the range {{tt|[s_first, s_last)}}. 

@1@ Elements are compared using {{tt|operator{{==}}}}.
@3@ Elements are compared using the given binary predicate {{tt|p}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | s_first, s_last | the range of elements to search for}}
{{par exec pol}}
{{par pred2 eq | p | p1=ForwardIt1 | p2=ForwardIt2}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt1 | ForwardIterator}}
{{par req concept | ForwardIt2 | ForwardIterator}}
{{par end}}

===Return value===
Iterator to the first element in the range {{tt|[first, last)}} that is equal to an element from the range {{tt|[s_first; s_last)}}. If no such element is found, {{tt|last}} is returned.

===Complexity===
Does at most {{tt|(S*N)}} comparisons where {{c|S {{=}} distance(s_first, s_last)}} and {{c|N {{=}} distance(first, last)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}
===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class ForwardIt&gt;
InputIt find_first_of(InputIt first, InputIt last,
                      ForwardIt s_first, ForwardIt s_last)
{
    for (; first != last; ++first) {
        for (ForwardIt it = s_first; it != s_last; ++it) {
            if (*first == *it) {
                return first;
            }
        }
    }
    return last;
}
 | 2=
template&lt;class InputIt, class ForwardIt, class BinaryPredicate&gt;
InputIt find_first_of(InputIt first, InputIt last,
                      ForwardIt s_first, ForwardIt s_last,
                      BinaryPredicate p)
{
    for (; first != last; ++first) {
        for (ForwardIt it = s_first; it != s_last; ++it) {
            if (p(*first, *it)) {
                return first;
            }
        }
    }
    return last;
}
}}

===Example===
{{example
 | The following code searches for any of specified integers in a vector of integers: 
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
 
int main()
{
    std::vector&lt;int&gt; v{0, 2, 3, 25, 5};
    std::vector&lt;int&gt; t{3, 19, 10, 2};
 
    auto result = std::find_first_of(v.begin(), v.end(), t.begin(), t.end());
 
    if (result == v.end()) {
        std::cout &lt;&lt; &quot;no elements of v were equal to 3, 19, 10 or 2\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;found a match at &quot;
                  &lt;&lt; std::distance(v.begin(), result) &lt;&lt; &quot;\n&quot;;
    }
 }
 | output=
found a match at 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc find}}

{{dsc end}}

[[de:cpp/algorithm/find first of]]
[[es:cpp/algorithm/find first of]]
[[fr:cpp/algorithm/find first of]]
[[it:cpp/algorithm/find first of]]
[[ja:cpp/algorithm/find first of]]
[[pt:cpp/algorithm/find first of]]
[[ru:cpp/algorithm/find first of]]
[[zh:cpp/algorithm/find first of]]</text>
      <sha1>4u2fuzvlddynbmdqyqwj0xcvuziiqjv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/find if</title>
    <ns>0</ns>
    <id>2540</id>
    <redirect title="cpp/algorithm/find" />
    <revision>
      <id>9310</id>
      <timestamp>2011-08-21T16:05:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/algorithm/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/find if not</title>
    <ns>0</ns>
    <id>2541</id>
    <redirect title="cpp/algorithm/find" />
    <revision>
      <id>9311</id>
      <timestamp>2011-08-21T16:06:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/algorithm/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/for each</title>
    <ns>0</ns>
    <id>738</id>
    <revision>
      <id>90784</id>
      <parentid>90621</parentid>
      <timestamp>2017-03-10T14:11:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>exception to P0518r1 blanket wording on element copy.. does P0523r1's blanket wording on complexity apply here though?</comment>
      <text xml:space="preserve" bytes="3743">{{cpp/title|for_each}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num = 1 |
template&lt; class InputIt, class UnaryFunction &gt;
UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f );
}}
{{dcl | num = 2 | since = c++17 |
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryFunction2 &gt;
void for_each( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryFunction2 f );
}}
{{dcl end}}

@1@ Applies the given function object {{tt|f}} to the result of dereferencing every iterator in the range {{tt|[first, last)}}, in order. 
@2@  Applies the given function object {{tt|f}} to the result of dereferencing every iterator in the range {{tt|[first, last)}} (not necessarily in order). The algorithm is executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.

For both overloads, if the iterator type is mutable, {{tt|f}} may modify the elements of the range through the dereferenced iterator. If {{tt|f}} returns a result, the result is ignored.

Unlike the rest of the algorithms, for_each is not allowed to make copies of the elements in the sequence even if they are trivially copyable.

===Parameters===
{{par begin}}
{{par | first, last | the range to apply the function to}}
{{par exec pol}}
{{par opf | f | to be applied to the result of dereferencing every iterator in the range {{tt|[first, last)}} | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | UnaryFunction | MoveConstructible | notes=Does not have to be {{concept|CopyConstructible}}}}
{{par req concept | UnaryFunction2 | CopyConstructible }}
{{par end}}

===Return value===
@1@ {{rev inl | until=c++11 | {{tt|f}} }} {{rev inl | since=c++11 |{{c|std::move(f)}} }}
@2@ (nothing)

===Complexity===
Exactly {{tt|last}} - {{tt|first}} applications of {{tt|f}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class UnaryFunction&gt;
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
    for (; first != last; ++first) {
        f(*first);
    }
    return f;
}
}}

===Example===
{{example
 | The following example uses a [[cpp/language/lambda|lambda function]] to increment all of the elements of a vector and then uses an overloaded {{tt|operator()}} in a functor to compute their sum:
 | code=
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
 
struct Sum
{
    Sum(): sum{0} { }
    void operator()(int n) { sum += n; }
    int sum;
};
 
int main()
{
    std::vector&lt;int&gt; nums{3, 4, 2, 8, 15, 267};
    
    auto print = [](const int&amp; n) { std::cout &lt;&lt; &quot; &quot; &lt;&lt; n; };
 
    std::cout &lt;&lt; &quot;before:&quot;;
    std::for_each(nums.begin(), nums.end(), print);
    std::cout &lt;&lt; '\n';
 
    std::for_each(nums.begin(), nums.end(), [](int &amp;n){ n++; });
 
    // calls Sum::operator() for each number
    Sum s = std::for_each(nums.begin(), nums.end(), Sum());
 
    std::cout &lt;&lt; &quot;after: &quot;;
    std::for_each(nums.begin(), nums.end(), print);
    std::cout &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;sum: &quot; &lt;&lt; s.sum &lt;&lt; '\n';
}
 | output=
before: 3 4 2 8 15 267
after:  4 5 3 9 16 268
sum: 305
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/language/dsc range-for}}
{{dsc inc | cpp/algorithm/dsc for_each_n}}
{{dsc end}}

[[de:cpp/algorithm/for each]]
[[es:cpp/algorithm/for each]]
[[fr:cpp/algorithm/for each]]
[[it:cpp/algorithm/for each]]
[[ja:cpp/algorithm/for each]]
[[pt:cpp/algorithm/for each]]
[[ru:cpp/algorithm/for each]]
[[zh:cpp/algorithm/for each]]</text>
      <sha1>qp8bd9pfgrsguh1u9pn81gw1qsul0hp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/for each n</title>
    <ns>0</ns>
    <id>15159</id>
    <revision>
      <id>90622</id>
      <parentid>87052</parentid>
      <timestamp>2017-03-06T18:05:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="2718">{{cpp/title|for_each_n}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num = 1 | since = c++17 |
template&lt; class InputIt, class Size, class UnaryFunction &gt;
InputIt for_each_n( InputIt first, Size n, UnaryFunction f );
}}
{{dcl | num = 2 | since = c++17 |
template&lt; class ExecutionPolicy, class ForwardIt, class Size, class UnaryFunction2 &gt;
InputIt for_each_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, Size n, UnaryFunction2 f );
}}
{{dcl end}}

@1@ Applies the given function object {{tt|f}} to the result of dereferencing every iterator in the range {{tt|[first, first + n)}}, in order. 
@2@  Applies the given function object {{tt|f}} to the result of dereferencing every iterator in the range {{tt|[first, first + n)}} (not necessarily in order). The algorithm is executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.

For both overloads, if the iterator type is mutable, {{tt|f}} may modify the elements of the range through the dereferenced iterator. If {{tt|f}} returns a result, the result is ignored. If {{tt|n}} is less than zero, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | first | the beginning of the range to apply the function to}}
{{par | n | the number of elements to apply the function to}}
{{par exec pol}}
{{par opf | f | to be applied to the result of dereferencing every iterator in the range {{tt|[first, first + n)}} | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | UnaryFunction | MoveConstructible | notes=Does not have to be {{concept|CopyConstructible}}}}
{{par req concept | UnaryFunction2 | CopyConstructible }}
{{par end}}

===Return value===
{{c|first + n}}

===Complexity===
Exactly {{tt|n}} applications of {{tt|f}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class Size, class UnaryFunction&gt;
InputIt for_each_n(InputIt first, Size n, UnaryFunction f)
{
    for (Size i = 0; i &lt; n; ++first, (void) ++i) {
        f(*first);
    }
    return first;
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/language/dsc range-for}}
{{dsc inc | cpp/algorithm/dsc for_each}}
{{dsc end}}

[[de:cpp/algorithm/for each n]]
[[es:cpp/algorithm/for each n]]
[[fr:cpp/algorithm/for each n]]
[[it:cpp/algorithm/for each n]]
[[ja:cpp/algorithm/for each n]]
[[pt:cpp/algorithm/for each n]]
[[ru:cpp/algorithm/for each n]]
[[zh:cpp/algorithm/for each n]]</text>
      <sha1>durjghxq2g3xbnsxr2jomvtj4mqch3q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/generate</title>
    <ns>0</ns>
    <id>739</id>
    <revision>
      <id>89828</id>
      <parentid>85633</parentid>
      <timestamp>2017-01-27T05:18:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2551">{{cpp/title|generate}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1=

template&lt; class ForwardIt, class Generator &gt;
void generate( ForwardIt first, ForwardIt last, Generator g );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Generator &gt;
void generate( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, Generator g );}}
{{dcl end}}
@1@ Assigns each element in range {{tt|[first, last)}} a value generated by the given function object {{tt|g}}.
@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to generate}}
{{par exec pol}}
{{par gen | g | rp=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
(none)

===Complexity===

Exactly {{c|std::distance(first, last)}} invocations of {{tt|g()}} and assignments.
===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}
===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt, class Generator&gt;
void generate(ForwardIt first, ForwardIt last, Generator g)
{
    while (first != last) {
        *first++ = g();
    }
}
}}

===Example===
{{example
 | The following code fills a vector with random numbers:
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cstdlib&gt;

int main()
{
    std::vector&lt;int&gt; v(5);
    std::generate(v.begin(), v.end(), std::rand); // Using the C function rand()
 
    std::cout &lt;&lt; &quot;v: &quot;;
    for (auto iv: v) {
        std::cout &lt;&lt; iv &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; &quot;\n&quot;;

    // Initialize with default values 0,1,2,3,4 from a lambda function
    // Equivalent to std::iota(v.begin(), v.end(), 0);
    int n = {0};
    std::generate(v.begin(), v.end(), [&amp;n]{ return n++; });
    
    std::cout &lt;&lt; &quot;v: &quot;;
    for (auto iv: v) {
        std::cout &lt;&lt; iv &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; &quot;\n&quot;;
}
 | p=true
 | output=
v: 52894 15984720 41513563 41346135 51451456
v: 0 1 2 3 4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc fill}}
{{dsc inc | cpp/algorithm/dsc generate_n}}

{{dsc end}}

[[de:cpp/algorithm/generate]]
[[es:cpp/algorithm/generate]]
[[fr:cpp/algorithm/generate]]
[[it:cpp/algorithm/generate]]
[[ja:cpp/algorithm/generate]]
[[pt:cpp/algorithm/generate]]
[[ru:cpp/algorithm/generate]]
[[zh:cpp/algorithm/generate]]</text>
      <sha1>8vx4qmaphgyi35bn2isfuwh7vxorzdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/generate n</title>
    <ns>0</ns>
    <id>740</id>
    <revision>
      <id>90640</id>
      <parentid>89840</parentid>
      <timestamp>2017-03-06T18:44:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="2849">{{cpp/title|generate_n}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin|num=1}}
{{dcl | until=c++11 | 1=
template&lt; class OutputIt, class Size, class Generator &gt;
void generate_n( OutputIt first, Size count, Generator g );
 | num=}}
{{dcl | since=c++11 | 1=

template&lt; class ForwardIt, class Size, class Generator &gt;
ForwardIt generate_n( ForwardIt first, Size count, Generator g );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class OutputIt, class Size, class Generator &gt;
OutputIt generate_n( ExecutionPolicy&amp;&amp; policy, OutputIt first, Size count, Generator g );}}
{{dcl end}}
@1@ Assigns values, generated by given function object {{tt|g}}, to the first {{tt|count}} elements in the range beginning at {{tt|first}}, if {{tt|count&gt;0}}. Does nothing otherwise.
@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}
===Parameters===
{{par begin}}
{{par | first | the beginning of the range of elements to generate}}
{{par | count | number of the elements to generate}}
{{par exec pol}}
{{par gen | g | rp=OutputIt}}
{{par hreq}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | Iterator one past the last element assigned if {{tt|count&gt;0}}, {{tt|first}} otherwise.
}}
{{rev end}}

===Complexity===
Exactly {{tt|count}} invocations of {{tt|g()}} and assignments, for {{tt|count&gt;0}}.
===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}
===Possible implementation===
{{eq fun | 1=
template&lt; class OutputIt, class Size, class Generator &gt;
OutputIt generate_n( OutputIt first, Size count, Generator g )
{
    for( Size i = 0; i &lt; count; i++ ) {
        *first++ = g();
    }
    return first;
}
}}

===Example===
{{example
 | The following code fills an array of integers with random numbers. 
 | code=
#include &lt;cstddef&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
 
int main()
{
    const std::size_t N = 5;
    int ar[N];
    std::generate_n(ar, N, std::rand); // Using the C function rand()
 
    std::cout &lt;&lt; &quot;ar: &quot;;
    std::copy(ar, ar+N, std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; &quot;\n&quot;;
}
 | p=true
 | output=
ar: 52894 15984720 41513563 41346135 51451456
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc fill_n}}
{{dsc inc | cpp/algorithm/dsc generate}}

{{dsc end}}

[[de:cpp/algorithm/generate n]]
[[es:cpp/algorithm/generate n]]
[[fr:cpp/algorithm/generate n]]
[[it:cpp/algorithm/generate n]]
[[ja:cpp/algorithm/generate n]]
[[pt:cpp/algorithm/generate n]]
[[ru:cpp/algorithm/generate n]]
[[zh:cpp/algorithm/generate n]]</text>
      <sha1>02pse029pvvu22xvrh2s5x7mqf8sy6q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/includes</title>
    <ns>0</ns>
    <id>741</id>
    <revision>
      <id>90649</id>
      <parentid>89852</parentid>
      <timestamp>2017-03-06T19:03:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="4788">{{cpp/title|includes}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1=

template&lt; class InputIt1, class InputIt2 &gt;
bool includes( InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2 );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
bool includes( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
               ForwardIt2 first2, ForwardIt2 last2 );}}
{{dcl | since= | num= 3 |1=

template&lt; class InputIt1, class InputIt2, class Compare &gt;
bool includes( InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class Compare &gt;
bool includes( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
               ForwardIt2 first2, ForwardIt2 last2, Compare comp );}}
{{dcl end}}

Returns {{c|true}} if every element from the sorted range {{tt|[first2, last2)}} is found within the sorted range {{tt|[first1, last1)}}. Also returns {{c|true}} if {{tt|[first2, last2)}} is empty. 
@1@ Both ranges must be sorted with {{c|operator&lt;}}.
@3@ Both ranges must be sorted with the given comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the sorted range of elements to examine}}
{{par | first2, last2 | the sorted range of elements to search for}}
{{par exec pol}}
{{par cmp ord | comp | p1=InputIt}} 
{{par hreq}}
{{par req concept | InputIt1, InputIt2 | InputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par end}}

===Return value===
{{c|true}} if every element from {{tt|[first2, last2)}} is a member of {{tt|[first, last)}}.

===Complexity===
At most {{math|2&amp;middot;(N&lt;sub&gt;1&lt;/sub&gt;+N&lt;sub&gt;2&lt;/sub&gt;-1)}} comparisons, where {{math|N&lt;sub&gt;1&lt;/sub&gt;}} {{c|{{=}} std::distance(first1, last1)}} and {{math|N&lt;sub&gt;2&lt;/sub&gt;}} {{c|{{=}} std::distance(first2, last2)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2&gt;
bool includes(InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2)
{
    for (; first2 != last2; ++first1)
    {
        if (first1 == last1 {{!!}} *first2 &lt; *first1)
            return false;
        if ( !(*first1 &lt; *first2) )
            ++first2;
    }
    return true;
}
 | 2=
template&lt;class InputIt1, class InputIt2&gt;
bool includes(InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2, Compare comp)
{
    for (; first2 != last2; ++first1)
    {
        if (first1 == last1 {{!!}} comp(*first2, *first1))
            return false;
        if (!comp(*first1, *first2))
            ++first2;
    }
    return true;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;cctype&gt;
#include &lt;vector&gt;

int main()
{
  std::vector&lt;char&gt; v1 {'a', 'b', 'c', 'f', 'h', 'x'};
  std::vector&lt;char&gt; v2 {'a', 'b', 'c'};
  std::vector&lt;char&gt; v3 {'a', 'c'};
  std::vector&lt;char&gt; v4 {'g'};
  std::vector&lt;char&gt; v5 {'a', 'c', 'g'};

  for (auto i : v1) std::cout &lt;&lt; i &lt;&lt; ' ';
  std::cout &lt;&lt; &quot;\nincludes:\n&quot; &lt;&lt; std::boolalpha;

  for (auto i : v2) std::cout &lt;&lt; i &lt;&lt; ' ';
  std::cout &lt;&lt; &quot;: &quot; &lt;&lt; std::includes(v1.begin(), v1.end(), v2.begin(), v2.end()) &lt;&lt; '\n';
  for (auto i : v3) std::cout &lt;&lt; i &lt;&lt; ' ';
  std::cout &lt;&lt; &quot;: &quot; &lt;&lt; std::includes(v1.begin(), v1.end(), v3.begin(), v3.end()) &lt;&lt; '\n';
  for (auto i : v4) std::cout &lt;&lt; i &lt;&lt; ' ';
  std::cout &lt;&lt; &quot;: &quot; &lt;&lt; std::includes(v1.begin(), v1.end(), v4.begin(), v4.end()) &lt;&lt; '\n';
  for (auto i : v5) std::cout &lt;&lt; i &lt;&lt; ' ';
  std::cout &lt;&lt; &quot;: &quot; &lt;&lt; std::includes(v1.begin(), v1.end(), v5.begin(), v5.end()) &lt;&lt; '\n';

  auto cmp_nocase = [](char a, char b) {
    return std::tolower(a) &lt; std::tolower(b);
  };

  std::vector&lt;char&gt; v6 {'A', 'B', 'C'};
  for (auto i : v6) std::cout &lt;&lt; i &lt;&lt; ' ';
  std::cout &lt;&lt; &quot;: (case-insensitive) &quot;
            &lt;&lt; std::includes(v1.begin(), v1.end(), v6.begin(), v6.end(), cmp_nocase)
            &lt;&lt; '\n';
}
 | output=
a b c f h x
includes:
a b c : true
a c : true
g : false
a c g : false
A B C : (case-insensitive) true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc set_difference}}
{{dsc inc | cpp/algorithm/dsc search}}

{{dsc end}}

[[de:cpp/algorithm/includes]]
[[es:cpp/algorithm/includes]]
[[fr:cpp/algorithm/includes]]
[[it:cpp/algorithm/includes]]
[[ja:cpp/algorithm/includes]]
[[pt:cpp/algorithm/includes]]
[[ru:cpp/algorithm/includes]]
[[zh:cpp/algorithm/includes]]</text>
      <sha1>f38pthwhfxp06xlpsvitcfxh7fm0gxi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/inclusive scan</title>
    <ns>0</ns>
    <id>15160</id>
    <revision>
      <id>90787</id>
      <parentid>90663</parentid>
      <timestamp>2017-03-10T14:58:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>requirements on T from P0574r1</comment>
      <text xml:space="preserve" bytes="5246">{{cpp/title|inclusive_scan}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | since=c++17 | num= 1 |1= 
template&lt; class InputIt, class OutputIt &gt;
OutputIt inclusive_scan( InputIt first, 
                         InputIt last, OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardtIt2 inclusive_scan( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, 
                            ForwardIt1 last, ForwardIt2 d_first );
}}
{{dcl | since=c++17 | num= 3 |1= 
template&lt; class InputIt, class OutputIt, class BinaryOperation &gt;
OutputIt inclusive_scan( InputIt first, InputIt last,
                         OutputIt d_first, BinaryOperation binary_op );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class BinaryOperation &gt;
ForwardIt2 inclusive_scan( ExecutionPolicy&amp;&amp; policy, 
                           ForwardIt1 first, ForwardIt1 last,
                           ForwardIt2 d_first, BinaryOperation binary_op );
}}
{{dcl | since=c++17 | num= 5 |1= 
template&lt; class InputIt, class OutputIt, class BinaryOperation, class T &gt;
OutputIt inclusive_scan( InputIt first, InputIt last, OutputIt d_first,
                         BinaryOperation binary_op, T init );
}}
{{dcl | since=c++17 | num= 6 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class BinaryOperation, class T &gt;
ForwardIt2 inclusive_scan( ExecutionPolicy&amp;&amp; policy, 
                           ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first, 
                           BinaryOperation binary_op, T init );
}}
{{dcl end}}

Computes an inclusive prefix sum operation using {{tt|binary_op}} (or {{c|std::plus&lt;&gt;()}} for overloads {{v|1-2}}) for the range {{tt|[first, last)}}, using {{tt|init}} as the initial value (if provided), and writes the results to the range beginning at {{tt|d_first}}. &quot;inclusive&quot; means that the i-th input element is included in the i-th sum. 

Formally, assigns through each iterator {{tt|i}} in {{math|[d_first, d_first + (last - first))}} the value of:
* for overloads {{v|1-4}}, the generalized noncommutative sum of {{tt|*j...}} for every {{tt|j}} in {{math|[first, first + (i - d_first + 1))}} over {{tt|binary_op}}
* for overloads {{v|5-6}}, the generalized noncommutative sum of {{tt|init, *j...}} for every {{tt|j}} in {{math|[first, first + (i - d_first + 1))}} over {{tt|binary_op}}

where generalized noncommutative sum {{math|GNSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GNSUM(op, a{{su|b=1}}, ..., a{{su|b=K}}), GNSUM(op, a{{su|b=M}}, ..., a{{su|b=N}}))}} for any K where {{math|1 &lt; K+1 {{=}} M ≤ N}}

In other words, the summation operations may be performed in arbitrary order, and the behavior is nondeterministic if {{tt|binary_op}} is not associative.

Overloads {{v|2,4,6}} are executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.}}

{{tt|binary_op}} shall not invalidate iterators (including the end iterators) or subranges, nor modify elements in the ranges
{{math|[first, last)}} or {{math|[d_first, d_first + (last - first))}}. Otherwise, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sum}}
{{par | d_first | the beginning of the destination range; may be equal to {{tt|first}}}}
{{par exec pol}}
{{par | init | the initial value (optional) }}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in to the result of dereferencing the input iterators, the results of other {{tt|binary_op}}, and {{tt|init}} (if provided).}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1 | ForwardIterator|notes=and, if {{tt|init}} is not provided, ForwardIt1's value_type must be {{concept|MoveConstructible}} and {{tt|binary_op(*first, *first)}} must be convertible to ForwardIt1's value type}}
{{par req concept | ForwardIt2 | ForwardIterator}}
{{par req concept | T (if init is provided) | MoveConstructible | notes=All of {{tt|binary_op(init, *first)}}, {{tt|binary_op(init, init)}}, and {{tt|binary_op(*first, *first)}} must be convertible to T}}
{{par end}}

===Return value===
Iterator to the element past the last element written.

===Complexity===
{{math|O(last - first)}} applications of the binary operation

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc adjacent_difference}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc transform_inclusive_scan}}
{{dsc inc | cpp/algorithm/dsc exclusive_scan}}
{{dsc end}}

[[de:cpp/algorithm/inclusive scan]]
[[es:cpp/algorithm/inclusive scan]]
[[fr:cpp/algorithm/inclusive scan]]
[[it:cpp/algorithm/inclusive scan]]
[[ja:cpp/algorithm/inclusive scan]]
[[pt:cpp/algorithm/inclusive scan]]
[[ru:cpp/algorithm/inclusive scan]]
[[zh:cpp/algorithm/inclusive scan]]</text>
      <sha1>so434fbn01ykme0ikl842bsbm5cibob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/inner product</title>
    <ns>0</ns>
    <id>742</id>
    <revision>
      <id>90693</id>
      <parentid>90684</parentid>
      <timestamp>2017-03-07T22:20:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>3-&gt;2</comment>
      <text xml:space="preserve" bytes="4639">{{cpp/title|inner_product}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2, class T &gt;
T inner_product( InputIt1 first1, InputIt1 last1,
                 InputIt2 first2, T value );
}}
{{dcl | since= | num= 2 |1= 
template&lt;class InputIt1, class InputIt2, class T,
         class BinaryOperation1, class BinaryOperation2&gt; 
T inner_product( InputIt1 first1, InputIt1 last1,
                 InputIt2 first2, T value,
                 BinaryOperation1 op1,
                 BinaryOperation2 op2 );
}}
{{dcl end}}

Computes inner product (i.e. sum of products) or performs ordered map/reduce operation on the range {{tt|[first1, last1)}} and the range beginning at {{tt|first2}}. 

@1@ Initializes the accumulator {{tt|acc}} with the initial value {{tt|init}} and then modifies it with the expression {{c|1=acc = acc + *first1 * *first2}}, then modifies again with the expression {{c|1=acc = acc + *(first1+1) * *(first2+1)}}, etc until reaching {{tt|end1}}. For built-in meaning of + and *, this computes inner product of the two ranges.
@2@ Initializes the accumulator {{tt|acc}} with the initial value {{tt|init}} and then modifies it with the expression {{c|1=acc = op1(acc, op2(*first1, *first2))}}, then modifies again with the expression {{c|1=acc = op1(acc, op2(*(first1+1), *(first2+1)))}}, etc until reaching {{tt|end1}}.

{{rev begin}}
{{rev | until=c++11 |
{{tt|op1}} and {{tt|op2}} must not have side effects.
}}
{{rev | since=c++11 |
{{tt|op1}} and {{tt|op2}} must not invalidate any iterators, including the end iterators, or modify any elements of the ranges involved.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of elements}}
{{par | first2 | the beginning of the second range of elements}}
{{par | value | initial value of the sum of the products}}
{{par op2 | op1 | This &quot;sum&quot; function takes a value returned by op2 and the current value of the accumulator and produces a new value to be stored in the accumulator. | t1=T | t2=Type3 | rt=T}}
{{par op2 | op2 | This &quot;product&quot; function takes one value from each range and produces a new value. | p1=InputIt1 | p2=InputIt2 | rt=Type3}}
{{par hreq}}
{{par req concept | InputIt1, InputIt2 | InputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | T | CopyConstructible | CopyAssignable}}
{{par end}}

===Return value===
The final value of {{tt|acc}} as described above.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2, class T&gt;
T inner_product(InputIt1 first1, InputIt1 last1,
                InputIt2 first2, T value)
{
    while (first1 != last1) {
         value = value + *first1 * *first2;
         ++first1;
         ++first2;
    }
    return value;
}
 | 2=
template&lt;class InputIt1, class InputIt2,
         class T,
         class BinaryOperation1, class BinaryOperation2&gt;
T inner_product(InputIt1 first1, InputIt1 last1,
                InputIt2 first2, T value,
                BinaryOperation1 op1
                BinaryOperation2 op2)
{
    while (first1 != last1) {
         value = op1(value, op2(*first1, *first2));
         ++first1;
         ++first2;
    }
    return value;
}
}}

===Notes===
The parallelizable version of this algorithm, {{lc|std::transform_reduce}}, requires {{tt|op1}} and {{tt|op2}} to be commutative and associative, but {{tt|std::inner_product}} makes no such requirement, and always performs the operations in the order given.

===Example===
{{example
 |
 | code=
#include &lt;numeric&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;functional&gt;
int main()
{
    std::vector&lt;int&gt; a{0, 1, 2, 3, 4};
    std::vector&lt;int&gt; b{5, 4, 2, 3, 1};

    int r1 = std::inner_product(a.begin(), a.end(), b.begin(), 0);
    std::cout &lt;&lt; &quot;Inner product of a and b: &quot; &lt;&lt; r1 &lt;&lt; '\n';

    int r2 = std::inner_product(a.begin(), a.end(), b.begin(), 0,
                                std::plus&lt;&gt;(), std::equal_to&lt;&gt;());
    std::cout &lt;&lt; &quot;Number of pairwise matches between a and b: &quot; &lt;&lt;  r2 &lt;&lt; '\n';
}
 | output=
Inner product of a and b: 21
Number of pairwise matches between a and b: 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc transform_reduce}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc end}}

[[de:cpp/algorithm/inner product]]
[[es:cpp/algorithm/inner product]]
[[fr:cpp/algorithm/inner product]]
[[it:cpp/algorithm/inner product]]
[[ja:cpp/algorithm/inner product]]
[[pt:cpp/algorithm/inner product]]
[[ru:cpp/algorithm/inner product]]
[[zh:cpp/algorithm/inner product]]</text>
      <sha1>6bp0ezkkl3uo1nduu8qw2sd78khzf0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/inplace merge</title>
    <ns>0</ns>
    <id>743</id>
    <revision>
      <id>90717</id>
      <parentid>89835</parentid>
      <timestamp>2017-03-08T15:34:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0574r1 parallel complexity. Also dropping mention of get_termporary_buffer since it's deprecated</comment>
      <text xml:space="preserve" bytes="3567">{{cpp/title|inplace_merge}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class BidirIt &gt;
void inplace_merge( BidirIt first, BidirIt middle, BidirIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class BidirIt &gt;
void inplace_merge( ExecutionPolicy&amp;&amp; policy, BidirIt first, BidirIt middle, BidirIt last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class BidirIt, class Compare&gt;
void inplace_merge( BidirIt first, BidirIt middle, BidirIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class BidirIt, class Compare&gt;
void inplace_merge( ExecutionPolicy&amp;&amp; policy, BidirIt first, BidirIt middle, BidirIt last, Compare comp );}}
{{dcl end}}

Merges two consecutive sorted ranges {{tt|[first, middle)}} and {{tt|[middle, last)}} into one sorted range {{tt|[first, last)}}. For equivalent elements in the original two ranges, the elements from the first range (preserving their original order) precede the elements from the second range (preserving their original order).

@1@ Elements are compared using {{tt|operator&lt;}} and the ranges must be sorted with respect to the same.
@3@ Elements are compared using the given binary comparison function {{tt|comp}} and the ranges must be sorted with respect to the same.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first | the beginning of the first sorted range }}
{{par | middle | the end of the first sorted range and the beginning of the second }}
{{par | last | the end of the second sorted range }}
{{par exec pol}}
{{par cmp ord | comp | p1=BidirIt}} 
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator | ValueSwappable}}
{{par req concept deref | BidirIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
(none)

===Complexity===
Given {{c|1=N = std::distance(first, last)}}},
@1,3@ Exactly {{tt|N-1}} comparisons if enough additional memory is available. If the memory is insufficient, {{tt|O(N log N)}} comparisons.
@2,4@ {{tt|O(N log N)}} comparisons.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
This function attempts to allocate a temporary buffer. If the allocation fails, the less efficient algorithm is chosen.

===Example===
{{example
 | The following code is an implementation of merge sort.
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

template&lt;class Iter&gt;
void merge_sort(Iter first, Iter last)
{
    if (last - first &gt; 1) {
        Iter middle = first + (last - first) / 2;
        merge_sort(first, middle);
        merge_sort(middle, last);
        std::inplace_merge(first, middle, last);
    }
}

int main()
{
    std::vector&lt;int&gt; v{8, 2, -2, 0, 11, 11, 1, 7, 3};
    merge_sort(v.begin(), v.end());
    for(auto n : v) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';
}
 | output=
-2 0 1 2 3 7 8 11 11
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc merge}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}

{{dsc end}}

[[de:cpp/algorithm/inplace merge]]
[[es:cpp/algorithm/inplace merge]]
[[fr:cpp/algorithm/inplace merge]]
[[it:cpp/algorithm/inplace merge]]
[[ja:cpp/algorithm/inplace merge]]
[[pt:cpp/algorithm/inplace merge]]
[[ru:cpp/algorithm/inplace merge]]
[[zh:cpp/algorithm/inplace merge]]</text>
      <sha1>lxole7hpn12ouv7j95ig2ysxbhpmq8s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/iota</title>
    <ns>0</ns>
    <id>2526</id>
    <revision>
      <id>79790</id>
      <parentid>79789</parentid>
      <timestamp>2015-07-27T16:34:52Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>minor wording tweak</comment>
      <text xml:space="preserve" bytes="2709">{{cpp/title|iota}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | since=c++11 |
template&lt; class ForwardIterator, class T &gt;
void iota( ForwardIterator first, ForwardIterator last, T value );
}}
{{dcl end}}

Fills the range {{tt|[first, last)}} with sequentially increasing values, starting with {{tt|value}} and repetitively evaluating {{c|++value}}.

Equivalent operation:

{{source|1=
*(d_first)   = value;
*(d_first+1) = ++value;
*(d_first+2) = ++value;
*(d_first+3) = ++value;
...
}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to fill with sequentially increasing values starting with value }}
{{par | value | initial value to store, the expression ++value must be well-formed }}
{{par end}}

===Return value===
(none)

===Complexity===
Exactly {{tt|last - first}} increments and assignments.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIterator, class T&gt;
void iota(ForwardIterator first, ForwardIterator last, T value)
{
    while(first != last) {
        *first++ = value;
        ++value;
    }
}
}}

===Notes===
The function is named after the integer function ⍳ &lt;!-- U+2373 APL FUNCTIONAL SYMBOL IOTA --&gt; from the programming language APL. It was one of the [http://www.sgi.com/tech/stl/iota.html STL components] that were not included in C++98, but eventually made it into the standard library in C++11.

===Example===
{{example
 | The following example applies {{lc|std::shuffle}} to a vector of {{lc|std::list}} iterators since {{lc|std::shuffle}} cannot be applied to a {{lc|std::list}} directly. {{tt|std::iota}} is used to populate both containers.
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;numeric&gt;
#include &lt;random&gt;
#include &lt;vector&gt;

int main()
{
    std::list&lt;int&gt; l(10);
    std::iota(l.begin(), l.end(), -4);

    std::vector&lt;std::list&lt;int&gt;::iterator&gt; v(l.size());
    std::iota(v.begin(), v.end(), l.begin());

    std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});

    std::cout &lt;&lt; &quot;Contents of the list: &quot;;
    for(auto n: l) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;Contents of the list, shuffled: &quot;;
    for(auto i: v) std::cout &lt;&lt; *i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
|p=true
 | output=
Contents of the list: -4 -3 -2 -1 0 1 2 3 4 5
Contents of the list, shuffled: 0 -1 3 4 -4 1 -2 -3 2 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc fill}}
{{dsc inc | cpp/algorithm/dsc generate}}
{{dsc end}}

[[de:cpp/algorithm/iota]]
[[es:cpp/algorithm/iota]]
[[fr:cpp/algorithm/iota]]
[[it:cpp/algorithm/iota]]
[[ja:cpp/algorithm/iota]]
[[pt:cpp/algorithm/iota]]
[[ru:cpp/algorithm/iota]]
[[zh:cpp/algorithm/iota]]</text>
      <sha1>pb3667srtfewwdn1jzvjogx3hws4tfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/is execution policy</title>
    <ns>0</ns>
    <id>15080</id>
    <revision>
      <id>90969</id>
      <parentid>86185</parentid>
      <timestamp>2017-03-14T12:58:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Helper template */ inline</comment>
      <text xml:space="preserve" bytes="1198">{{cpp/title|is_execution_policy}}
{{cpp/algorithm/navbar}}

{{ddcl | header = execution | since=c++17 | 1=
template&lt; class T &gt;
struct is_execution_policy;
}}

Checks whether {{tt|T}} is a standard or implementation-defined execution policy type.

Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is  {{lc|std::execution::sequenced_policy}}, {{lc|std::execution::parallel_policy}}, {{lc|std::execution::parallel_unsequenced_policy}}, or an implementation-defined execution policy type. Otherwise, {{tt|value}} is equal to {{c|false}}.

The behavior of a program that adds specializations for {{tt|std::is_execution_policy}} is undefined.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}

=== Helper template ===
{{ddcl | header = execution | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_execution_policy_v = std::is_execution_policy&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a standard or implementation-defined execution policy type }}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag_t }}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag }}
{{dsc end}}</text>
      <sha1>hxeoaem6d92n48zlwkdivpazfva220n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/is heap</title>
    <ns>0</ns>
    <id>744</id>
    <revision>
      <id>89849</id>
      <parentid>84671</parentid>
      <timestamp>2017-01-27T05:19:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2533">{{cpp/title|is_heap}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class RandomIt &gt;
bool is_heap( RandomIt first, RandomIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class RandomIt &gt;
bool is_heap( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last );}}
{{dcl | since=c++11 | num= 3 |1= 
template&lt; class RandomIt, class Compare &gt;
bool is_heap( RandomIt first, RandomIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
bool is_heap( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last, Compare comp );}}
{{dcl end}}

Checks if the elements in range {{tt|[first, last)}} are a ''max heap''. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par exec pol}}
{{par cmp | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator}}
{{par end}}

===Return value===
{{c|true}} if the range is ''max heap'', {{c|false}} otherwise.

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
{{cpp/algorithm/notes heap}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v { 3, 1, 4, 1, 5, 9 };

    std::cout &lt;&lt; &quot;initially, v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    if (!std::is_heap(v.begin(), v.end())) {
        std::cout &lt;&lt; &quot;making heap...\n&quot;;
        std::make_heap(v.begin(), v.end());
    }

    std::cout &lt;&lt; &quot;after make_heap, v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
initially, v: 3 1 4 1 5 9 
making heap...
after make_heap, v: 9 5 4 1 1 3 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_heap_until}}

{{dsc end}}

[[de:cpp/algorithm/is heap]]
[[es:cpp/algorithm/is heap]]
[[fr:cpp/algorithm/is heap]]
[[it:cpp/algorithm/is heap]]
[[ja:cpp/algorithm/is heap]]
[[pt:cpp/algorithm/is heap]]
[[ru:cpp/algorithm/is heap]]
[[zh:cpp/algorithm/is heap]]</text>
      <sha1>ouwzlmdb7j51hdqfoxu96l1jk4j0157</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/is heap until</title>
    <ns>0</ns>
    <id>745</id>
    <revision>
      <id>89817</id>
      <parentid>84672</parentid>
      <timestamp>2017-01-27T05:18:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2816">{{cpp/title|is_heap_until}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class RandomIt &gt;
RandomIt is_heap_until( RandomIt first, RandomIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class RandomIt &gt;
RandomIt is_heap_until( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last );}}
{{dcl | since=c++11 | num= 3 |1= 
template&lt; class RandomIt, class Compare &gt;
RandomIt is_heap_until( RandomIt first, RandomIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
RandomIt is_heap_until( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last, Compare comp );}}
{{dcl end}}

Examines the range {{tt|[first, last)}} and finds the largest range beginning at {{tt|first}} which is a ''max heap''. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par exec pol}}
{{par cmp | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator}}
{{par end}}

===Return value===
The upper bound of the largest range beginning at {{tt|first}} which is a ''max heap''. That is, the last iterator {{tt|it}} for which range {{tt|[first, it)}} is a ''max heap''.

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
{{cpp/algorithm/notes heap}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v { 3, 1, 4, 1, 5, 9 };

    std::make_heap(v.begin(), v.end());

    // probably mess up the heap
    v.push_back(2);
    v.push_back(6);

    auto heap_end = std::is_heap_until(v.begin(), v.end());

    std::cout &lt;&lt; &quot;all of v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;only heap: &quot;;
    for (auto i = v.begin(); i != heap_end; ++i) std::cout &lt;&lt; *i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
all of v:  9 5 4 1 1 3 2 6 
only heap: 9 5 4 1 1 3 2 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_heap}}

{{dsc end}}

[[de:cpp/algorithm/is heap until]]
[[es:cpp/algorithm/is heap until]]
[[fr:cpp/algorithm/is heap until]]
[[it:cpp/algorithm/is heap until]]
[[ja:cpp/algorithm/is heap until]]
[[pt:cpp/algorithm/is heap until]]
[[ru:cpp/algorithm/is heap until]]
[[zh:cpp/algorithm/is heap until]]</text>
      <sha1>9heg9xqqzelmzx7le4fr0qki0uwcz97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/is partitioned</title>
    <ns>0</ns>
    <id>2580</id>
    <revision>
      <id>90657</id>
      <parentid>90645</parentid>
      <timestamp>2017-03-06T19:34:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 extra</comment>
      <text xml:space="preserve" bytes="2972">{{cpp/title|is_partitioned}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class InputIt, class UnaryPredicate &gt;
bool is_partitioned( InputIt first, InputIt last, UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
bool is_partitioned( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryPredicate p );}}
{{dcl end}}

@1@ Returns {{c|true}} if all elements in the range {{tt|[first, last)}} that satisfy the predicate {{tt|p}} appear before all elements that don't. Also returns {{c|true}} if {{tt|[first, last)}} is empty.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to check}}
{{par exec pol}}
{{par pred1 | p | for the elements expected to be found in the beginning of the range | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator| notes=and its value type must be convertible to UnaryPredicate's argument type}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===

{{c|true}} if the range {{tt|[first, last)}} is empty or is partitioned by {{tt|p}}. {{c|false}} otherwise.

===Complexity===

At most {{tt|std::distance(first, last)}} applications of {{tt|p}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt; class InputIt, class UnaryPredicate &gt;
bool is_partitioned(InputIt first, InputIt last, UnaryPredicate p)
{
    for (; first != last; ++first)
        if (!p(*first))
            break;
    for (; first != last; ++first)
        if (p(*first))
            return false;
    return true;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;

int main()
{
    std::array&lt;int, 9&gt; v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    
    auto is_even = [](int i){ return i % 2 == 0; };
    std::cout.setf(std::ios_base::boolalpha);
    std::cout &lt;&lt; std::is_partitioned(v.begin(), v.end(), is_even) &lt;&lt; ' ';
    
    std::partition(v.begin(), v.end(), is_even);
    std::cout &lt;&lt; std::is_partitioned(v.begin(), v.end(), is_even) &lt;&lt; ' ';
    
    std::reverse(v.begin(), v.end());
    std::cout &lt;&lt; std::is_partitioned(v.begin(), v.end(), is_even);
}
 | output=
false true false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partition}}
{{dsc inc | cpp/algorithm/dsc partition_point}}

{{dsc end}}

[[de:cpp/algorithm/is partitioned]]
[[es:cpp/algorithm/is partitioned]]
[[fr:cpp/algorithm/is partitioned]]
[[it:cpp/algorithm/is partitioned]]
[[ja:cpp/algorithm/is partitioned]]
[[pt:cpp/algorithm/is partitioned]]
[[ru:cpp/algorithm/is partitioned]]
[[zh:cpp/algorithm/is partitioned]]</text>
      <sha1>c9kpklpiyri8y7ntms5g2vezswb6sf5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/is permutation</title>
    <ns>0</ns>
    <id>2583</id>
    <revision>
      <id>92138</id>
      <parentid>72389</parentid>
      <timestamp>2017-04-07T05:36:55Z</timestamp>
      <contributor>
        <ip>80.147.162.235</ip>
      </contributor>
      <comment>Add requirement for predicate to be an equivalence relation</comment>
      <text xml:space="preserve" bytes="4754">{{cpp/title|is_permutation}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num=1 |
template&lt; class ForwardIt1, class ForwardIt2 &gt;
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
                     ForwardIt2 first2 );
}}
{{dcl | since=c++11 | num=2 |
template&lt; class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
                     ForwardIt2 first2, BinaryPredicate p );
}}
{{dcl | since=c++14 | num=3 |
template&lt; class ForwardIt1, class ForwardIt2 &gt;
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
                     ForwardIt2 first2, ForwardIt2 last2 );
}}
{{dcl | since=c++14 | num=4 |
template&lt; class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
bool is_permutation( ForwardIt1 first1, ForwardIt1 last1,
                     ForwardIt2 first2, ForwardIt2 last2,
                     BinaryPredicate p );
}}
{{dcl end}}

Returns {{c|true}} if there exists a permutation of the elements in the range {{tt|[first1, last1)}} that makes that range equal to the range {{tt|[first2,last2)}}, where {{tt|last2}} denotes {{c|first2 + (last1 - first1)}} if it was not given. 

@1,3@ Elements are compared using {{tt|operator{{==}}}}. The behavior is undefined if it is not an [[enwiki:equivalence relation|equivalence relation]].
@2,4@ Elements are compared using the given binary predicate {{tt|p}}. The behavior is undefined if it is not an equivalence relation.

===Parameters===
{{par begin}}
{{par | first1, last1 | the range of elements to compare }}
{{par | first2, last2 | the second range to compare}}
{{par | p | binary predicate which returns ​{{c|{{{value|true}}}}} if the elements should be treated as equal. &lt;br/&gt;
The signature of the predicate function should be equivalent to the following:

{{cc | bool pred(const Type &amp;a, const Type &amp;b); }}

{{tt|Type}} should be the value type of both {{tt|ForwardIt1}} and {{tt|ForwardIt2}}. The signature does not need to have {{c|const &amp;}}, but the function must not modify the objects passed to it.}}​
{{par hreq}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req | {{tt|ForwardIt1, ForwardIt2}} must have the same value type.}}
{{par end}}

===Return value===

{{c|true}} if the range {{tt|[first1, last1)}} is a permutation of the range {{tt|[first2, last2)}}.

===Complexity===

At most {{math|O(N&lt;sup&gt;2&lt;/sup&gt;)}} applications of the predicate, or exactly {{math|N}} if the sequences are already equal, where {{c|1=N=std::distance(first1, last1)}}. 

However if {{tt|ForwardIt1}} and {{tt|ForwardIt2}} meet the requirements of {{concept|RandomAccessIterator}} and {{c|std::distance(first1, last1) !{{=}} std::distance(first2, last2)}} no applications of the predicate are made.

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt1, class ForwardIt2&gt;
bool is_permutation(ForwardIt1 first, ForwardIt1 last,
                    ForwardIt2 d_first)
{
   // skip common prefix
   std::tie(first, d_first) = std::mismatch(first, last, d_first);
   // iterate over the rest, counting how many times each element
   // from [first, last) appears in [d_first, d_last)
   if (first != last) {
       ForwardIt2 d_last = d_first;
       std::advance(d_last, std::distance(first, last));
       for (ForwardIt1 i = first; i != last; ++i) {
            if (i != std::find(first, i, *i)) continue; // already counted this *i

            auto m = std::count(d_first, d_last, *i);
            if (m==0 {{!!}} std::count(i, last, *i) != m) {
                return false;
            }
        }
    }
    return true;
}
}}

===Example===
{{example
 | 
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
int main()
{
    std::vector&lt;int&gt; v1{1,2,3,4,5};
    std::vector&lt;int&gt; v2{3,5,4,1,2};
    std::cout &lt;&lt; &quot;3,5,4,1,2 is a permutation of 1,2,3,4,5? &quot;
              &lt;&lt; std::boolalpha
              &lt;&lt; std::is_permutation(v1.begin(), v1.end(), v2.begin()) &lt;&lt; '\n';

    std::vector&lt;int&gt; v3{3,5,4,1,1};
    std::cout &lt;&lt; &quot;3,5,4,1,1 is a permutation of 1,2,3,4,5? &quot;
              &lt;&lt; std::boolalpha
              &lt;&lt; std::is_permutation(v1.begin(), v1.end(), v3.begin()) &lt;&lt; '\n';
}
 | output=
3,5,4,1,2 is a permutation of 1,2,3,4,5? true
3,5,4,1,1 is a permutation of 1,2,3,4,5? false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc next_permutation}}
{{dsc inc | cpp/algorithm/dsc prev_permutation}}
{{dsc end}}

[[de:cpp/algorithm/is permutation]]
[[es:cpp/algorithm/is permutation]]
[[fr:cpp/algorithm/is permutation]]
[[it:cpp/algorithm/is permutation]]
[[ja:cpp/algorithm/is permutation]]
[[pt:cpp/algorithm/is permutation]]
[[ru:cpp/algorithm/is permutation]]
[[zh:cpp/algorithm/is permutation]]</text>
      <sha1>8l6znqcowcm4m39hiq6lp6vhcfjwg27</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/is sorted</title>
    <ns>0</ns>
    <id>746</id>
    <revision>
      <id>89834</id>
      <parentid>88679</parentid>
      <timestamp>2017-01-27T05:18:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2928">{{cpp/title|is_sorted}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class ForwardIt &gt;
bool is_sorted( ForwardIt first, ForwardIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt;
bool is_sorted( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl | since=c++11 | num= 3 |1= 
template&lt; class ForwardIt, class Compare &gt;
bool is_sorted( ForwardIt first, ForwardIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
bool is_sorted( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, Compare comp );}}
{{dcl end}}

Checks if the elements in range {{tt|[first, last)}} are sorted in non-descending order. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par exec pol}}
{{par cmp ord | comp | p1=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===

{{c|true}} if the elements in the range are sorted in ascending order

===Complexity===

linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt&gt;
bool is_sorted(ForwardIt first, ForwardIt last)
{
    return std::is_sorted_until(first, last) == last;
}
 | 2=
template&lt;class ForwardIt, class Compare&gt;
bool is_sorted(ForwardIt first, ForwardIt last, Compare comp)
{
    return std::is_sorted_until(first, last, comp) == last;
}
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
int main() 
{
    int digits[] = {3, 1, 4, 1, 5};

    for (auto i : digits) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;: is_sorted: &quot; &lt;&lt; std::boolalpha
              &lt;&lt; std::is_sorted(std::begin(digits), std::end(digits)) &lt;&lt; '\n';

    std::sort(std::begin(digits), std::end(digits));

    for (auto i : digits) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;: is_sorted: &quot;
              &lt;&lt; std::is_sorted(std::begin(digits), std::end(digits)) &lt;&lt; '\n';
}
 | output=
3 1 4 1 5 : is_sorted: false
1 1 3 4 5 : is_sorted: true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_sorted_until}}

{{dsc end}}

[[de:cpp/algorithm/is sorted]]
[[es:cpp/algorithm/is sorted]]
[[fr:cpp/algorithm/is sorted]]
[[it:cpp/algorithm/is sorted]]
[[ja:cpp/algorithm/is sorted]]
[[pt:cpp/algorithm/is sorted]]
[[ru:cpp/algorithm/is sorted]]
[[zh:cpp/algorithm/is sorted]]</text>
      <sha1>fptv0n1a42xkd66j4jraw133mr2uajh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/is sorted until</title>
    <ns>0</ns>
    <id>747</id>
    <revision>
      <id>89858</id>
      <parentid>84647</parentid>
      <timestamp>2017-01-27T05:20:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="3884">{{cpp/title|is_sorted_until}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class ForwardIt &gt;
ForwardIt is_sorted_until( ForwardIt first, ForwardIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt is_sorted_until( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl | since=c++11 | num= 3 |1= 
template&lt; class ForwardIt, class Compare &gt;
ForwardIt is_sorted_until( ForwardIt first, ForwardIt last, 
                           Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
ForwardIt is_sorted_until( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, 
                           Compare comp );}}
{{dcl end}}

Examines the range {{tt|[first, last)}} and finds the largest range beginning at {{tt|first}} in which the elements are sorted in ascending order.

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par exec pol}}
{{par cmp ord | comp | p1=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===

The upper bound of the largest range beginning at {{tt|first}} in which the elements are sorted in ascending order. That is, the last iterator {{tt|it}} for which range {{tt|[first, it)}} is sorted.

===Complexity===

linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt&gt;
ForwardIt is_sorted_until(ForwardIt first, ForwardIt last)
{
    if (first != last) {
        ForwardIt next = first;
        while (++next != last) {
            if (*next &lt; *first)
                return next;
            first = next;
        }
    }
    return last;
}
 | 2=
template &lt;class ForwardIt, class Compare&gt;
ForwardIt is_sorted_until(ForwardIt first, ForwardIt last, Compare comp) 
{
    using namespace std::placeholders;
    ForwardIt it = std::adjacent_find(first, last, std::bind(comp, _2, _1));
    return it == last ? last : std::next(it);
}
}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 g(rd());
    const int N = 6;
    int nums[N] = {3, 1, 4, 1, 5, 9};

    const int min_sorted_size = 4;
    int sorted_size = 0;
    do {
        std::shuffle(nums, nums + N, g);
        int *sorted_end = std::is_sorted_until(nums, nums + N);
        sorted_size = std::distance(nums, sorted_end);

        for (auto i : nums) std::cout &lt;&lt; i &lt;&lt; ' ';
        std::cout &lt;&lt; &quot; : &quot; &lt;&lt; sorted_size &lt;&lt; &quot; initial sorted elements\n&quot;;
    } while (sorted_size &lt; min_sorted_size);
}
 | output=
4 1 9 5 1 3  : 1 initial sorted elements
4 5 9 3 1 1  : 3 initial sorted elements
9 3 1 4 5 1  : 1 initial sorted elements
1 3 5 4 1 9  : 3 initial sorted elements
5 9 1 1 3 4  : 2 initial sorted elements
4 9 1 5 1 3  : 2 initial sorted elements
1 1 4 9 5 3  : 4 initial sorted elements
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_sorted}}

{{dsc end}}

[[de:cpp/algorithm/is sorted until]]
[[es:cpp/algorithm/is sorted until]]
[[fr:cpp/algorithm/is sorted until]]
[[it:cpp/algorithm/is sorted until]]
[[ja:cpp/algorithm/is sorted until]]
[[pt:cpp/algorithm/is sorted until]]
[[ru:cpp/algorithm/is sorted until]]
[[zh:cpp/algorithm/is sorted until]]</text>
      <sha1>jj0z8nboj6w1eanipf5uy72wjhkg4kl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/iter swap</title>
    <ns>0</ns>
    <id>748</id>
    <revision>
      <id>56985</id>
      <parentid>49255</parentid>
      <timestamp>2013-06-01T05:44:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2130">{{cpp/title|iter_swap}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl |
template&lt; class ForwardIt1, class ForwardIt2 &gt;
void iter_swap( ForwardIt1 a, ForwardIt2 b );
}}
{{dcl end}}

Swaps the values of the elements the given iterators are pointing to. 

===Parameters===
{{par begin}}
{{par | a, b | iterators to the elements to swap}}
{{par hreq}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | &lt;nowiki&gt;*a, *b&lt;/nowiki&gt; | Swappable}}
{{par end}}

===Return value===
(none)

===Complexity===

constant

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt1, class ForwardIt2&gt;
void iter_swap(ForwardIt1 a, ForwardIt2 b)
{
   using std::swap;
   swap(*a, *b);
}
}}

===Example===
{{example
 | The following is an implementation of selection sort in C++
 | code=#include &lt;random&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iterator&gt;

template&lt;class ForwardIt&gt;
void selection_sort(ForwardIt begin, ForwardIt end)
{
    for (ForwardIt i = begin; i != end; ++i)
        std::iter_swap(i, std::min_element(i, end));
}

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution&lt;&gt; dist(-10, 10);
    std::vector&lt;int&gt; v;
    generate_n(back_inserter(v), 20, bind(dist, gen));

    std::cout &lt;&lt; &quot;Before sort: &quot;;
    copy(v.begin(), v.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));

    selection_sort(v.begin(), v.end());

    std::cout &lt;&lt; &quot;\nAfter sort: &quot;;
    copy(v.begin(), v.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';
}
 | output=Before sort: -7 6 2 4 -1 6 -9 -1 2 -5 10 -9 -5 -3 -5 -3 6 6 1 8
After sort: -9 -9 -7 -5 -5 -5 -3 -3 -1 -1 1 2 2 4 6 6 6 6 8 10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/algorithm/dsc swap_ranges}}
{{dsc end}}

[[de:cpp/algorithm/iter swap]]
[[es:cpp/algorithm/iter swap]]
[[fr:cpp/algorithm/iter swap]]
[[it:cpp/algorithm/iter swap]]
[[ja:cpp/algorithm/iter swap]]
[[pt:cpp/algorithm/iter swap]]
[[ru:cpp/algorithm/iter swap]]
[[zh:cpp/algorithm/iter swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/lexicographical compare</title>
    <ns>0</ns>
    <id>749</id>
    <revision>
      <id>90654</id>
      <parentid>89857</parentid>
      <timestamp>2017-03-06T19:17:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="5175">{{cpp/title|lexicographical_compare}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2 &gt;
bool lexicographical_compare( InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2 );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
bool lexicographical_compare( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                              ForwardIt2 first2, ForwardIt2 last2 );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2, class Compare &gt;
bool lexicographical_compare( InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2,
                              Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class Compare &gt;
bool lexicographical_compare( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                              ForwardIt2 first2, ForwardIt2 last2,
                              Compare comp );}}
{{dcl end}}

Checks if the first range {{c|[first1, last1)}} is lexicographically ''less'' than the second range {{c|[first2, last2)}}. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

Lexicographical comparison is a operation with the following properties:
* Two ranges are compared element by element.
* The first mismatching element defines which range is lexicographically ''less'' or ''greater'' than the other.
* If one range is a prefix of another, the shorter range is lexicographically ''less'' than the other.
* If two ranges have equivalent elements and are of the same length, then the ranges are lexicographically ''equal''.
* An empty range is lexicographically ''less'' than any non-empty range.
* Two empty ranges are lexicographically ''equal''.

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of elements to examine}}
{{par | first2, last2 | the second range of elements to examine}}
{{par exec pol}}
{{par cmp | comp | p1=InputIt1 | p2=InputIt2}}
{{par hreq}}
{{par req concept | InputIt1, InputIt2 | InputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par end}}

===Return value===
{{c|true}} if the first range is lexicographically ''less'' than the second.

===Complexity===

At most {{math|2&amp;middot;min(N1, N2)}} applications of the comparison operation, where {{c|1=N1 = std::distance(first1, last1)}} and {{c|1=N2 = std::distance(first2, last2)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt1, class InputIt2&gt;
bool lexicographical_compare(InputIt1 first1, InputIt1 last1,
                             InputIt2 first2, InputIt2 last2)
{
    for ( ; (first1 != last1) &amp;&amp; (first2 != last2); first1++, (void) first2++ ) {
        if (*first1 &lt; *first2) return true;
        if (*first2 &lt; *first1) return false;
    }
    return (first1 == last1) &amp;&amp; (first2 != last2);
}
 | 2=
template&lt;class InputIt1, class InputIt2, class Compare&gt;
bool lexicographical_compare(InputIt1 first1, InputIt1 last1,
                             InputIt2 first2, InputIt2 last2,
                             Compare comp)
{
    for ( ; (first1 != last1) &amp;&amp; (first2 != last2); first1++, (void) first2++ ) {
        if (comp(*first1, *first2)) return true;
        if (comp(*first2, *first1)) return false;
    }
    return (first1 == last1) &amp;&amp; (first2 != last2);
}
}}

===Example===
{{example
 | p=true
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

int main()
{
    std::vector&lt;char&gt; v1 {'a', 'b', 'c', 'd'};
    std::vector&lt;char&gt; v2 {'a', 'b', 'c', 'd'};

    std::srand(std::time(0));
    while (!std::lexicographical_compare(v1.begin(), v1.end(),
                                         v2.begin(), v2.end())) {
        for (auto c : v1) std::cout &lt;&lt; c &lt;&lt; ' ';
        std::cout &lt;&lt; &quot;&gt;= &quot;;
        for (auto c : v2) std::cout &lt;&lt; c &lt;&lt; ' ';
        std::cout &lt;&lt; '\n';

        std::random_shuffle(v1.begin(), v1.end());
        std::random_shuffle(v2.begin(), v2.end());
    }

    for (auto c : v1) std::cout &lt;&lt; c &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;&lt; &quot;;
    for (auto c : v2) std::cout &lt;&lt; c &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
a b c d &gt;= a b c d 
d a b c &gt;= c b d a 
b d a c &gt;= a d c b 
a c d b &lt; c d a b 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc equal}}

{{dsc end}}

[[de:cpp/algorithm/lexicographical compare]]
[[es:cpp/algorithm/lexicographical compare]]
[[fr:cpp/algorithm/lexicographical compare]]
[[it:cpp/algorithm/lexicographical compare]]
[[ja:cpp/algorithm/lexicographical compare]]
[[pt:cpp/algorithm/lexicographical compare]]
[[ru:cpp/algorithm/lexicographical compare]]
[[zh:cpp/algorithm/lexicographical compare]]</text>
      <sha1>m2q90py96thlscnx9eod4zsdlgspg7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/lower bound</title>
    <ns>0</ns>
    <id>750</id>
    <revision>
      <id>89144</id>
      <parentid>88795</parentid>
      <timestamp>2017-01-04T00:23:17Z</timestamp>
      <contributor>
        <ip>24.175.246.236</ip>
      </contributor>
      <comment>fix typo</comment>
      <text xml:space="preserve" bytes="4533">{{cpp/title|lower_bound}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class ForwardIt, class T &gt;
ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T&amp; value );
}}
{{dcl | num=2 |
template&lt; class ForwardIt, class T, class Compare &gt;
ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T&amp; value, Compare comp );
}}
{{dcl end}}

Returns an iterator pointing to the first element in the range {{tt|[first, last)}} that is ''not less'' than (i.e. greater or equal to) {{tt|value}}.

The range {{tt|[first, last)}} must be at least partially ordered, i.e. partitioned with respect to the expression {{c|element &lt; value}} or {{c|comp(element, value)}}.  A fully-sorted range meets this criterion, as does a range resulting from a call to {{c|std::partition}}.

The first version uses {{c|operator&lt;}} to compare the elements, the second version uses the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | first, last | iterators defining the partially-ordered range to examine}}
{{par | value | value to compare the elements to}}
{{par cmp | comp | p1=ForwardIt | t2=T }} 
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
Iterator pointing to the first element that is ''not less'' than {{tt|value}}, or {{tt|last}} if no such element is found.

===Complexity===
The number of comparisons performed is logarithmic in the distance between {{tt|first}} and {{tt|last}} (At most {{math|log{{su|b=2}}(last - first) + O(1)}} comparisons). However, for non-{{concept|RandomAccessIterator}}s, the number of iterator increments is linear.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt, class T&gt;
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T&amp; value)
{
    ForwardIt it;
    typename std::iterator_traits&lt;ForwardIt&gt;::difference_type count, step;
    count = std::distance(first, last);

    while (count &gt; 0) {
        it = first; 
        step = count / 2; 
        std::advance(it, step);
        if (*it &lt; value) {
            first = ++it; 
            count -= step + 1; 
        }
        else
            count = step;
    }
    return first;
}
 | 2=
template&lt;class ForwardIt, class T, class Compare&gt;
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T&amp; value, Compare comp)
{
    ForwardIt it;
    typename std::iterator_traits&lt;ForwardIt&gt;::difference_type count, step;
    count = std::distance(first,last);

    while (count &gt; 0) {
        it = first;
        step = count / 2;
        std::advance(it, step);
        if (comp(*it, value)) {
            first = ++it;
            count -= step + 1;
        }
        else
            count = step;
    }
    return first;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

template&lt;class ForwardIt, class T, class Compare=std::less&lt;&gt;&gt;
ForwardIt binary_find(ForwardIt first, ForwardIt last, const T&amp; value, Compare comp={})
{
    // Note: BOTH type T and the type after ForwardIt is dereferenced 
    // must be implicitly convertible to BOTH Type1 and Type2, used in Compare. 
    // This is stricter than lower_bound requirement (see above)

    first = std::lower_bound(first, last, value, comp);
    return first != last &amp;&amp; !comp(value, *first) ? first : last;
}

int main()
{
    std::vector&lt;int&gt; data = { 1, 1, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6 };
    
    auto lower = std::lower_bound(data.begin(), data.end(), 4);
    auto upper = std::upper_bound(data.begin(), data.end(), 4);
    
    std::copy(lower, upper, std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));

    std::cout &lt;&lt; '\n';

    // classic binary search, returning a value only if it is present

    data = { 1, 2, 4, 6, 9, 10 }; 
    
    auto it = binary_find(data.cbegin(), data.cend(), 4); //&lt; choosing '5' will return end()
 
    if(it != data.cend())
      std::cout &lt;&lt; *it &lt;&lt; &quot; found at index &quot;&lt;&lt; std::distance(data.cbegin(), it);

    return 0;
}
 | output=
4 4 4 
4 found at index 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc equal_range}}
{{dsc inc | cpp/algorithm/dsc partition}}
{{dsc inc | cpp/algorithm/dsc upper_bound}}
{{dsc end}}

[[de:cpp/algorithm/lower bound]]
[[es:cpp/algorithm/lower bound]]
[[fr:cpp/algorithm/lower bound]]
[[it:cpp/algorithm/lower bound]]
[[ja:cpp/algorithm/lower bound]]
[[ko:cpp/algorithm/lower bound]]
[[pt:cpp/algorithm/lower bound]]
[[ru:cpp/algorithm/lower bound]]
[[zh:cpp/algorithm/lower bound]]</text>
      <sha1>6dhn4l82n3nvhz20llwjjq4h83p6s6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/make heap</title>
    <ns>0</ns>
    <id>751</id>
    <revision>
      <id>85892</id>
      <parentid>69143</parentid>
      <timestamp>2016-05-31T11:55:23Z</timestamp>
      <contributor>
        <ip>43.240.144.24</ip>
      </contributor>
      <text xml:space="preserve" bytes="2221">{{cpp/title|make_heap}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class RandomIt &gt;
void make_heap( RandomIt first, RandomIt last );
}}
{{dcl | num=2 |
template&lt; class RandomIt, class Compare &gt;
void make_heap( RandomIt first, RandomIt last,
                Compare comp );
}}
{{dcl end}}

Constructs a ''max heap'' in the range {{tt|[first, last)}}. The first version of the function uses {{c|operator&lt;}} to compare the elements, the second uses the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to make the heap from}}
{{par cmp | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
(none)

===Complexity===
At most {{c|3*std::distance(first, last)}} comparisons.

===Notes===
{{cpp/algorithm/notes heap}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v { 3, 1, 4, 1, 5, 9 };

    std::cout &lt;&lt; &quot;initially, v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::make_heap(v.begin(), v.end());

    std::cout &lt;&lt; &quot;after make_heap, v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::pop_heap(v.begin(), v.end());
    auto largest = v.back();
    v.pop_back();
    std::cout &lt;&lt; &quot;largest element: &quot; &lt;&lt; largest &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;after removing the largest element, v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
initially, v: 3 1 4 1 5 9 
after make_heap, v: 9 5 4 1 1 3 
largest element: 9
after removing the largest element, v: 5 3 4 1 1 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc sort_heap}}
{{dsc inc | cpp/container/dsc priority_queue}}
{{dsc inc | cpp/utility/functional/dsc greater}}
{{dsc end}}

[[de:cpp/algorithm/make heap]]
[[es:cpp/algorithm/make heap]]
[[fr:cpp/algorithm/make heap]]
[[it:cpp/algorithm/make heap]]
[[ja:cpp/algorithm/make heap]]
[[pt:cpp/algorithm/make heap]]
[[ru:cpp/algorithm/make heap]]
[[zh:cpp/algorithm/make heap]]</text>
      <sha1>7ojxfznw2z528mp8z4x9payl3swjkve</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/max</title>
    <ns>0</ns>
    <id>752</id>
    <revision>
      <id>83535</id>
      <parentid>81061</parentid>
      <timestamp>2016-02-23T10:53:39Z</timestamp>
      <contributor>
        <ip>80.147.162.235</ip>
      </contributor>
      <comment>Fix typo</comment>
      <text xml:space="preserve" bytes="3736">{{cpp/title|max}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin|num=1}}
{{dcl | until=c++14 |
template&lt; class T &gt; 
const T&amp; max( const T&amp; a, const T&amp; b );
}}
{{dcl | since=c++14 |
template&lt; class T &gt; 
constexpr const T&amp; max( const T&amp; a, const T&amp; b );
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++14 |
template&lt; class T, class Compare &gt;
const T&amp; max( const T&amp; a, const T&amp; b, Compare comp );
}}
{{dcl | since=c++14 |
template&lt; class T, class Compare &gt;
constexpr const T&amp; max( const T&amp; a, const T&amp; b, Compare comp );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T &gt;
T max( std::initializer_list&lt;T&gt; ilist );
}}
{{dcl | since=c++14 |
template&lt; class T &gt;
constexpr T max( std::initializer_list&lt;T&gt; ilist );
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T, class Compare &gt;
T max( std::initializer_list&lt;T&gt; ilist, Compare comp );
}}
{{dcl | since=c++14 |
template&lt; class T, class Compare &gt;
constexpr T max( std::initializer_list&lt;T&gt; ilist, Compare comp );
}}
{{dcl rev end}}
{{dcl end}}

Returns the greater of the given values.

@1-2@ Returns the greater of {{tt|a}} and {{tt|b}}. 

@3-4@ Returns the greatest of the values in initializer list {{tt|ilist}}.

The (1,3) versions use {{c|operator&lt;}} to compare the values, the (2,4) versions use the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | a, b | the values to compare}}
{{par | ilist | initializer list with the values to compare}}
{{par cmp | comp | t1=T | {{tt|a}} is ''less'' than {{tt|b}}}} 
{{par hreq}}
{{par req concept | T | LessThanComparable | overloads=1,3}}
{{par req concept | T | CopyConstructible | overloads=3,4}}
{{par end}}

===Return value===
@1-2@ The greater of {{tt|a}} and {{tt|b}}. If they are equivalent, returns {{tt|a}}.

@3-4@ The greatest value in {{tt|ilist}}. If several values are equivalent to the greatest, returns the leftmost one.

===Complexity===
@1-2@ Exactly one comparison

@3-4@ Exactly {{tt|ilist.size() - 1}} comparisons

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt; 
const T&amp; max(const T&amp; a, const T&amp; b)
{
    return (a &lt; b) ? b : a;
}
 | 2=
template&lt;class T, class Compare&gt; 
const T&amp; max(const T&amp; a, const T&amp; b, Compare comp)
{
    return (comp(a, b)) ? b : a;
}
 | 3=
template&lt; class T &gt;
T max( std::initializer_list&lt;T&gt; ilist)
{
    return *std::max_element(ilist.begin(), ilist.end());
}
 | 4=
template&lt; class T, class Compare &gt;
T max( std::initializer_list&lt;T&gt; ilist, Compare comp )
{
    return *std::max_element(ilist.begin(), ilist.end(), comp);
}
}}

===Notes===
{{cpp/algorithm/minmax_danger_note|max}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::cout &lt;&lt; &quot;larger of 1 and 9999: &quot; &lt;&lt; std::max(1, 9999) &lt;&lt; '\n'
              &lt;&lt; &quot;larger of 'a', and 'b': &quot; &lt;&lt; std::max('a', 'b') &lt;&lt; '\n'
              &lt;&lt; &quot;longest of \&quot;foo\&quot;, \&quot;bar\&quot;, and \&quot;hello\&quot;: &quot; &lt;&lt;
                  std::max( { &quot;foo&quot;, &quot;bar&quot;, &quot;hello&quot; },
                            [](const std::string&amp; s1, const std::string&amp; s2) {
                                 return s1.size() &lt; s2.size();
                             }) &lt;&lt; '\n';
}
 | output=
larger of 1 and 9999: 9999
larger of 'a', and 'b': b
longest of &quot;foo&quot;, &quot;bar&quot;, and &quot;hello&quot;: hello
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc min}}
{{dsc inc | cpp/algorithm/dsc minmax}}
{{dsc inc | cpp/algorithm/dsc max_element}}
{{dsc end}}

[[de:cpp/algorithm/max]]
[[es:cpp/algorithm/max]]
[[fr:cpp/algorithm/max]]
[[it:cpp/algorithm/max]]
[[ja:cpp/algorithm/max]]
[[pt:cpp/algorithm/max]]
[[ru:cpp/algorithm/max]]
[[zh:cpp/algorithm/max]]</text>
      <sha1>5askb3jnjeb583sccjrffz69szfzo11</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/max element</title>
    <ns>0</ns>
    <id>753</id>
    <revision>
      <id>89842</id>
      <parentid>86352</parentid>
      <timestamp>2017-01-27T05:19:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="3970">{{cpp/title|max_element}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin | num=1}}
{{dcl | until=c++17 |
template&lt; class ForwardIt &gt; 
ForwardIt max_element(ForwardIt first, ForwardIt last);
}}
{{dcl | since=c++17 | 1= 
template&lt; class ForwardIt &gt; 
constexpr ForwardIt max_element(ForwardIt first, ForwardIt last);
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt; 
ForwardIt max_element( ExecutionPolicy&amp;&amp; policy,ForwardIt first, ForwardIt last);}}
{{dcl rev begin | num=3}}
{{dcl | until=c++17 |
template&lt; class ForwardIt, class Compare &gt;
ForwardIt max_element(ForwardIt first, ForwardIt last, Compare cmp);
}}
{{dcl | since=c++17 | 1= 
template&lt; class ForwardIt, class Compare &gt;
constexpr ForwardIt max_element(ForwardIt first, ForwardIt last, Compare cmp);
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
ForwardIt max_element( ExecutionPolicy&amp;&amp; policy,ForwardIt first, ForwardIt last, Compare cmp);}}
{{dcl end}}

Finds the greatest element in the range {{tt|[first, last)}}. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | forward iterators defining the range to examine}}
{{par exec pol}}
{{par cmp | cmp | p1=ForwardIt }} 
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
Iterator to the greatest element in the range {{tt|[first, last)}}. If several elements in the range are equivalent to the greatest element, returns the iterator to the first such element. Returns {{tt|last}} if the range is empty. 

===Complexity===
Exactly {{math|max(N-1,0)}} comparisons, where {{c|N {{=}} std::distance(first, last)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt&gt;
ForwardIt max_element(ForwardIt first, ForwardIt last)
{
    if (first == last) {
        return last;
    }
    ForwardIt largest = first;
    ++first;
    for (; first != last; ++first) {
        if (*largest &lt; *first) {
            largest = first;
        }
    }
    return largest;
}
 | 2=
template&lt;class ForwardIt, class Compare&gt;
ForwardIt max_element(ForwardIt first, ForwardIt last, 
                      Compare cmp)
{
    if (first == last) {
        return last;
    }
    ForwardIt largest = first;
    ++first;
    for (; first != last; ++first) {
        if (cmp(*largest, *first)) {
            largest = first;
        }
    }
    return largest;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cmath&gt;

static bool abs_compare(int a, int b)
{
    return (std::abs(a) &lt; std::abs(b));
}

int main()
{
    std::vector&lt;int&gt; v{ 3, 1, -14, 1, 5, 9 }; 
    std::vector&lt;int&gt;::iterator result;

    result = std::max_element(v.begin(), v.end());
    std::cout &lt;&lt; &quot;max element at: &quot; &lt;&lt; std::distance(v.begin(), result) &lt;&lt; '\n';

    result = std::max_element(v.begin(), v.end(), abs_compare);
    std::cout &lt;&lt; &quot;max element (absolute) at: &quot; &lt;&lt; std::distance(v.begin(), result);
}
 | output=
max element at: 5
max element (absolute) at: 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc min_element}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc inc | cpp/algorithm/dsc max}}

{{dsc end}}

[[de:cpp/algorithm/max element]]
[[es:cpp/algorithm/max element]]
[[fr:cpp/algorithm/max element]]
[[it:cpp/algorithm/max element]]
[[ja:cpp/algorithm/max element]]
[[pt:cpp/algorithm/max element]]
[[ru:cpp/algorithm/max element]]
[[zh:cpp/algorithm/max element]]</text>
      <sha1>kdf6db1g45ff8l45wtnb0jtkrnocubf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/merge</title>
    <ns>0</ns>
    <id>754</id>
    <revision>
      <id>90718</id>
      <parentid>90648</parentid>
      <timestamp>2017-03-08T15:37:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0574r1 parallel complexity</comment>
      <text xml:space="preserve" bytes="6383">{{cpp/title|merge}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2, class OutputIt &gt;
OutputIt merge( InputIt1 first1, InputIt1 last1,
                InputIt2 first2, InputIt2 last2,
                OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class ForwardIt3 &gt;
ForwardIt3 merge( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                ForwardIt2 first2, ForwardIt2 last2, ForwardIt3 d_first );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2, class OutputIt, class Compare&gt;
OutputIt merge( InputIt1 first1, InputIt1 last1,
                InputIt2 first2, InputIt2 last2,
                OutputIt d_first, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class ForwardIt3, class Compare&gt;
ForwardIt3 merge( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                ForwardIt2 first2, ForwardIt2 last2, ForwardIt3 d_first, Compare comp );}}
{{dcl end}}

Merges two sorted ranges {{tt|[first1, last1)}} and {{tt|[first2, last2)}} into one sorted range beginning at {{tt|d_first}}. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

For equivalent elements in the original two ranges, the elements from the first range (preserving their original order) precede the elements from the second range (preserving their original order).

The behavior is undefined if the destination range overlaps either of the input ranges (the input ranges may overlap each other).

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of elements to merge}}
{{par | first2, last2 | the second range of elements to merge}}
{{par | d_first | the beginning of the destination range}}
{{par exec pol}}
{{par cmp ord | comp | p1=InputIt1 | p2=InputIt2}} 
{{par hreq}}
{{par req concept | InputIt1, InputIt2  | InputIterator}}
{{par req concept | ForwardIt1, ForwardIt2, ForwardIt3 | ForwardIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Return value===
An output iterator to element past the last element copied.

===Complexity===
@1,3@ At most {{c|1=std::distance(first1, last1) + std::distance(first2, last2) - 1}} comparisons.
@2,4@ {{c|O(std::distance(last1, first1) + std::distance(last2, first2))}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
This algorithm performs a similar task as {{c|std::set_union}} does. Both consume two sorted input ranges and produce a sorted output with elements from both inputs. The difference between these two algorithms is with handling values from both input ranges which compare equivalent (see notes on {{concept|LessThanComparable}}). If any equivalent values appeared {{tt|n}} times in the first range and {{tt|m}} times in the second, {{tt|std::merge}} would output all {{c|n+m}} occurrences whereas {{tt|std::set_union}} would output {{c|std::max(n, m)}} ones only. So {{tt|std::merge}} outputs exactly {{c|std::distance(first1, last1) + std::distance(first2, last2)}} values and {{tt|std::set_union}} may produce less.

===Possible implementation===
{{eq fun 
 | 1=
template&lt;class InputIt1, class InputIt2, class OutputIt&gt;
OutputIt merge(InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2,
               OutputIt d_first)
{
    for (; first1 != last1; ++d_first) {
        if (first2 == last2) {
            return std::copy(first1, last1, d_first);
        }
        if (*first2 &lt; *first1) {
            *d_first = *first2;
            ++first2;
        } else {
            *d_first = *first1;
            ++first1;
        }
    }
    return std::copy(first2, last2, d_first);
}
 | 2=
template&lt;class InputIt1, class InputIt2,
         class OutputIt, class Compare&gt;
OutputIt merge(InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2,
               OutputIt d_first, Compare comp)
{
    for (; first1 != last1; ++d_first) {
        if (first2 == last2) {
            return std::copy(first1, last1, d_first);
        }
        if (comp(*first2, *first1)) {
            *d_first = *first2;
            ++first2;
        } else {
            *d_first = *first1;
            ++first1;
        }
    }
    return std::copy(first2, last2, d_first);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;random&gt;
#include &lt;functional&gt;

int main()
{
    // fill the vectors with random numbers
    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_int_distribution&lt;&gt; dis(0, 9);

    std::vector&lt;int&gt; v1(10), v2(10);
    std::generate(v1.begin(), v1.end(), std::bind(dis, std::ref(mt)));
    std::generate(v2.begin(), v2.end(), std::bind(dis, std::ref(mt)));

    // sort
    std::sort(v1.begin(), v1.end());
    std::sort(v2.begin(), v2.end());

    // output v1
    std::cout &lt;&lt; &quot;v1 : &quot;;
    std::copy(v1.begin(), v1.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';

    // output v2
    std::cout &lt;&lt; &quot;v2 : &quot;;
    std::copy(v2.begin(), v2.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';

    // merge
    std::vector&lt;int&gt; dst;
    std::merge(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(dst));

    // output
    std::cout &lt;&lt; &quot;dst: &quot;;
    std::copy(dst.begin(), dst.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';
} 
| p=true
| output=
v1 : 0 1 3 4 4 5 5 8 8 9 
v2 : 0 2 2 3 6 6 8 8 8 9 
dst: 0 0 1 2 2 3 3 4 4 5 5 6 6 8 8 8 8 8 9 9 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc inplace_merge}}
{{dsc inc | cpp/algorithm/dsc set_union}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}

{{dsc end}}

[[de:cpp/algorithm/merge]]
[[es:cpp/algorithm/merge]]
[[fr:cpp/algorithm/merge]]
[[it:cpp/algorithm/merge]]
[[ja:cpp/algorithm/merge]]
[[pt:cpp/algorithm/merge]]
[[ru:cpp/algorithm/merge]]
[[zh:cpp/algorithm/merge]]</text>
      <sha1>1cu8hbqo8pizlxr8qlwsf03zpjps1h9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/min</title>
    <ns>0</ns>
    <id>755</id>
    <revision>
      <id>87521</id>
      <parentid>81064</parentid>
      <timestamp>2016-09-02T13:48:33Z</timestamp>
      <contributor>
        <username>Mnaydenov</username>
        <id>5751</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3755">{{cpp/title|min}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin|num=1}}
{{dcl | until=c++14 |
template&lt; class T &gt; 
const T&amp; min( const T&amp; a, const T&amp; b );
}}
{{dcl | since=c++14 |
template&lt; class T &gt; 
constexpr const T&amp; min( const T&amp; a, const T&amp; b );
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++14 |
template&lt; class T, class Compare &gt;
const T&amp; min( const T&amp; a, const T&amp; b, Compare comp );
}}
{{dcl | since=c++14 |
template&lt; class T, class Compare &gt;
constexpr const T&amp; min( const T&amp; a, const T&amp; b, Compare comp );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | since=c++11| until=c++14 |
template&lt; class T &gt;
T min( std::initializer_list&lt;T&gt; ilist );
}}
{{dcl | since=c++14 |
template&lt; class T &gt;
constexpr T min( std::initializer_list&lt;T&gt; ilist );
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T, class Compare &gt;
T min( std::initializer_list&lt;T&gt; ilist, Compare comp );
}}
{{dcl | since=c++14 |
template&lt; class T, class Compare &gt;
constexpr T min( std::initializer_list&lt;T&gt; ilist, Compare comp );
}}
{{dcl rev end}}
{{dcl end}}

Returns the smaller of the given values.

@1-2@ Returns the smaller of {{tt|a}} and {{tt|b}}. 

@3-4@ Returns the smallest of the values in initializer list {{tt|ilist}}.

The {{v|1,3}} versions use {{c|operator&lt;}} to compare the values, the {{v|2,4}} versions use the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | a, b | the values to compare}}
{{par | ilist | initializer list with the values to compare}}
{{par cmp | cmp | t1=T | if {{tt|a}} is ''less'' than {{tt|b}}}} 
{{par hreq}}
{{par req concept | T | LessThanComparable | overloads=1,3}}
{{par req concept | T | CopyConstructible | overloads=3,4}}
{{par end}}

===Return value===
@1-2@ The smaller of {{tt|a}} and {{tt|b}}. If the values are equivalent, returns {{tt|a}}.

@3-4@ The smallest value in {{tt|ilist}}. If several values are equivalent to the smallest, returns the leftmost such value.

===Complexity===
@1-2@ Exactly one comparison

@3-4@ Exactly {{tt|ilist.size() - 1}} comparisons

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt; 
const T&amp; min(const T&amp; a, const T&amp; b)
{
    return (b &lt; a) ? b : a;
}
 | 2=
template&lt;class T, class Compare&gt; 
const T&amp; min(const T&amp; a, const T&amp; b, Compare comp)
{
    return (comp(b, a)) ? b : a;
}
 | 3=
template&lt;class T&gt;
T min( std::initializer_list&lt;T&gt; ilist)
{
    return *std::min_element(ilist.begin(), ilist.end());
}
 | 4=
template&lt;class T, class Compare&gt;
T min(std::initializer_list&lt;T&gt; ilist, Compare comp)
{
    return *std::min_element(ilist.begin(), ilist.end(), comp);
}
}}

===Warning===
{{cpp/algorithm/minmax_danger_note|min}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::cout &lt;&lt; &quot;smaller of 1 and 9999: &quot; &lt;&lt; std::min(1, 9999) &lt;&lt; '\n'
              &lt;&lt; &quot;smaller of 'a', and 'b': &quot; &lt;&lt; std::min('a', 'b') &lt;&lt; '\n'
              &lt;&lt; &quot;shortest of \&quot;foo\&quot;, \&quot;bar\&quot;, and \&quot;hello\&quot;: &quot; &lt;&lt;
                  std::min( { &quot;foo&quot;, &quot;bar&quot;, &quot;hello&quot; },
                            [](const std::string&amp; s1, const std::string&amp; s2) {
                                 return s1.size() &lt; s2.size();
                             }) &lt;&lt; '\n';
}
 | output=
smaller of 1 and 9999: 1
smaller of 'a', and 'b': a
shortest of &quot;foo&quot;, &quot;bar&quot;, and &quot;hello&quot;: foo
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc max}}
{{dsc inc | cpp/algorithm/dsc minmax}}
{{dsc inc | cpp/algorithm/dsc min_element}}
{{dsc end}}

[[de:cpp/algorithm/min]]
[[es:cpp/algorithm/min]]
[[fr:cpp/algorithm/min]]
[[it:cpp/algorithm/min]]
[[ja:cpp/algorithm/min]]
[[pt:cpp/algorithm/min]]
[[ru:cpp/algorithm/min]]
[[zh:cpp/algorithm/min]]</text>
      <sha1>1bfx0jhpqeyvrssb37rk350qyoiavka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/min element</title>
    <ns>0</ns>
    <id>756</id>
    <revision>
      <id>89830</id>
      <parentid>86353</parentid>
      <timestamp>2017-01-27T05:18:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="3720">{{cpp/title|min_element}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin | num=1}}
{{dcl | until=c++17 |
template&lt; class ForwardIt &gt; 
ForwardIt min_element( ForwardIt first, ForwardIt last );
}}
{{dcl | since=c++17 | 1= 
template&lt; class ForwardIt &gt; 
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt; 
ForwardIt min_element( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl rev begin | num=3}}
{{dcl | until=c++17 |
template&lt; class ForwardIt, class Compare &gt;
ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
}}
{{dcl | since=c++17 | 1= 
template&lt; class ForwardIt, class Compare &gt;
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
ForwardIt min_element( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, Compare comp );}}
{{dcl end}}

Finds the smallest element in the range {{tt|[first, last)}}.

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | forward iterators defining the range to examine}}
{{par exec pol}}
{{par cmp | cmp | p1=ForwardIt | {{tt|a}} is ''less'' than {{tt|b}}}} 
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
Iterator to the smallest element in the range {{tt|[first, last)}}. If several elements in the range are equivalent to the smallest element, returns the iterator to the first such element. Returns {{tt|last}} if the range is empty.

===Complexity===
Exactly {{math|max(N-1,0)}} comparisons, where {{c|N {{=}} std::distance(first, last)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt&gt;
ForwardIt min_element(ForwardIt first, ForwardIt last)
{
    if (first == last) return last;

    ForwardIt smallest = first;
    ++first;
    for (; first != last; ++first) {
        if (*first &lt; *smallest) {
            smallest = first;
        }
    }
    return smallest;
}
 | 2=
template&lt;class ForwardIt, class Compare&gt;
ForwardIt min_element(ForwardIt first, ForwardIt last, 
                            Compare comp)
{
    if (first == last) return last;
    
    ForwardIt smallest = first;
    ++first;
    for (; first != last; ++first) {
        if (comp(*first, *smallest)) {
            smallest = first;
        }
    }
    return smallest;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
 
int main()
{
    std::vector&lt;int&gt; v{3, 1, 4, 1, 5, 9};
 
    std::vector&lt;int&gt;::iterator result = std::min_element(std::begin(v), std::end(v));
    std::cout &lt;&lt; &quot;min element at: &quot; &lt;&lt; std::distance(std::begin(v), result);
}
 | output=
min element at: 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc max_element}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc inc | cpp/algorithm/dsc min}}

{{dsc end}}

[[de:cpp/algorithm/min element]]
[[es:cpp/algorithm/min element]]
[[fr:cpp/algorithm/min element]]
[[it:cpp/algorithm/min element]]
[[ja:cpp/algorithm/min element]]
[[pt:cpp/algorithm/min element]]
[[ru:cpp/algorithm/min element]]
[[zh:cpp/algorithm/min element]]</text>
      <sha1>axb8iuibu1kb0vcflxr24lvjycrz42x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/minmax</title>
    <ns>0</ns>
    <id>2482</id>
    <revision>
      <id>81065</id>
      <parentid>78450</parentid>
      <timestamp>2015-09-24T01:27:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Lifetime danger note (mentioned at the con) - will roll into the template when get to a computer</comment>
      <text xml:space="preserve" bytes="4927">{{cpp/title|minmax}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T &gt; 
std::pair&lt;const T&amp;,const T&amp;&gt; minmax( const T&amp; a, const T&amp; b );
}}
{{dcl | since=c++14 |
template&lt; class T &gt; 
constexpr std::pair&lt;const T&amp;,const T&amp;&gt; minmax( const T&amp; a, const T&amp; b );
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T, class Compare &gt;
std::pair&lt;const T&amp;,const T&amp;&gt; minmax( const T&amp; a, const T&amp; b,
                                     Compare comp );
}}
{{dcl | since=c++14 |
template&lt; class T, class Compare &gt;
constexpr std::pair&lt;const T&amp;,const T&amp;&gt; minmax( const T&amp; a, const T&amp; b,
                                               Compare comp );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T &gt;
std::pair&lt;T,T&gt; minmax( std::initializer_list&lt;T&gt; ilist);
}}
{{dcl | since=c++14 |
template&lt; class T &gt;
constexpr std::pair&lt;T,T&gt; minmax( std::initializer_list&lt;T&gt; ilist);
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T, class Compare &gt;
std::pair&lt;T,T&gt; minmax( std::initializer_list&lt;T&gt; ilist, Compare comp );
}}
{{dcl | since=c++14 |
template&lt; class T, class Compare &gt;
constexpr std::pair&lt;T,T&gt; minmax( std::initializer_list&lt;T&gt; ilist, Compare comp );
}}
{{dcl rev end}}
{{dcl end}}

Returns the lowest and the greatest of the given values.

@1-2@ Returns references to the smaller and the greater of {{tt|a}} and {{tt|b}}. 

@3-4@ Returns the smallest and the greatest of the values in initializer list {{tt|ilist}}.

The {{v|1,3}} versions use {{c|operator&lt;}} to compare the values, whereas the {{v|2,4}} versions use the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | a, b | the values to compare}}
{{par | ilist | initializer list with the values to compare}}
{{par cmp | comp | t1=T }} 
{{par hreq}}
{{par req concept | T | LessThanComparable | overloads=1,3}}
{{par req concept | T | CopyConstructible | overloads=3,4}}
{{par end}}

===Return value===
@1-2@ Returns the result of {{c|std::pair&lt;const T&amp;, const T&amp;&gt;(a, b)}} if {{tt|a&lt;b}} or if {{tt|a}} is equivalent to {{tt|b}}. Returns the result of {{c|std::pair&lt;const T&amp;, const T&amp;&gt;(b, a)}} if {{tt|b&lt;a}}.

@3-4@ A pair with the smallest value in {{tt|ilist}} as the first element and the greatest as the second. If several elements are equivalent to the smallest, the leftmost such element is returned. If several elements are equivalent to the largest, the rightmost such element is returned.

===Complexity===
@1-2@ Exactly one comparison

@3-4@ At most  {{tt|ilist.size() * 3 / 2}} comparisons

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt; 
std::pair&lt;const T&amp;, const T&amp;&gt; minmax( const T&amp; a, const T&amp; b )
{
    return (b &lt; a) ? std::pair&lt;const T&amp;, const T&amp;&gt;(b, a)
                   : std::pair&lt;const T&amp;, const T&amp;&gt;(a, b);
}
 | 2=
template&lt;class T, class Compare&gt; 
std::pair&lt;const T&amp;, const T&amp;&gt; minmax( const T&amp; a, const T&amp; b, Compare comp )
{
    return comp(b, a) ? std::pair&lt;const T&amp;, const T&amp;&gt;(b, a)
                      : std::pair&lt;const T&amp;, const T&amp;&gt;(a, b);
}
 | 3=
template&lt; class T &gt;
std::pair&lt;T, T&gt; minmax( std::initializer_list&lt;T&gt; ilist )
{
    auto p = std::minmax_element(ilist.begin(), ilist.end());
    return std::make_pair(*p.first, *p.second);
}
 | 4=
template&lt; class T, class Compare &gt;
std::pair&lt;T, T&gt; minmax( std::initializer_list&lt;T&gt; ilist, Compare comp )
{
    auto p = std::minmax_element(ilist.begin(), ilist.end(), comp);
    return std::make_pair(*p.first, *p.second);
}
}}

===Notes===
For overloads {{v|1,2}}, if one of the parameters is an rvalue, the reference returned becomes a dangling reference at the end of the full expression that contains the call to {{tt|minmax}}:
{{source|1=
int n = 1;
auto p = std::minmax(n, n+1);
int m = p.first; // ok
int x = p.second; // undefined behavior
}}

===Example===
{{example
 | p=true
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

int main()
{
    std::vector&lt;int&gt; v {3, 1, 4, 1, 5, 9, 2, 6}; 
    std::srand(std::time(0));
    std::pair&lt;int, int&gt; bounds = std::minmax(std::rand() % v.size(),
                                             std::rand() % v.size());

    std::cout &lt;&lt; &quot;v[&quot; &lt;&lt; bounds.first &lt;&lt; &quot;,&quot; &lt;&lt; bounds.second &lt;&lt; &quot;]: &quot;;
    for (int i = bounds.first; i &lt; bounds.second; ++i) {
        std::cout &lt;&lt; v[i] &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';
}
 | output=
v[2,7]: 4 1 5 9 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc min}}
{{dsc inc | cpp/algorithm/dsc max}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc end}}

[[de:cpp/algorithm/minmax]]
[[es:cpp/algorithm/minmax]]
[[fr:cpp/algorithm/minmax]]
[[it:cpp/algorithm/minmax]]
[[ja:cpp/algorithm/minmax]]
[[pt:cpp/algorithm/minmax]]
[[ru:cpp/algorithm/minmax]]
[[zh:cpp/algorithm/minmax]]</text>
      <sha1>q8meycnxv2vqiye8y47mw380jij4s3z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/minmax element</title>
    <ns>0</ns>
    <id>2481</id>
    <revision>
      <id>89823</id>
      <parentid>86354</parentid>
      <timestamp>2017-01-27T05:18:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="5029">{{cpp/title|minmax_element}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin | num=1}}
{{dcl | since=c++11 | until=c++17|
template&lt; class ForwardIt &gt; 
std::pair&lt;ForwardIt,ForwardIt&gt; 
    minmax_element( ForwardIt first, ForwardIt last );
}}
{{dcl | since=c++17 | 1= 
template&lt; class ForwardIt &gt; 
constexpr std::pair&lt;ForwardIt,ForwardIt&gt; 
    minmax_element( ForwardIt first, ForwardIt last );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt; 
std::pair&lt;ForwardIt,ForwardIt&gt; 
    minmax_element( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl rev begin | num=3}}
{{dcl | since=c++11 | until=c++17 |
template&lt; class ForwardIt, class Compare &gt;
std::pair&lt;ForwardIt,ForwardIt&gt; 
    minmax_element( ForwardIt first, ForwardIt last, Compare comp );
}}
{{dcl | since=c++17 | 1= 
template&lt; class ForwardIt, class Compare &gt;
constexpr std::pair&lt;ForwardIt,ForwardIt&gt; 
    minmax_element( ForwardIt first, ForwardIt last, Compare comp );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
std::pair&lt;ForwardIt,ForwardIt&gt; 
    minmax_element( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, Compare comp );}}
{{dcl end}}

Finds the smallest and greatest element in the range {{tt|[first, last)}}.

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | forward iterators defining the range to examine}}
{{par exec pol}}
{{par cmp | cmp | p1=ForwardIt | if {{tt|*a}} is ''less'' than {{tt|*b}}}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}} 
{{par end}}

===Return value===
a pair consisting of an iterator to the smallest element as the first element and an iterator to the greatest element as the second. Returns {{c|std::make_pair(first, first)}} if the range is empty. If several elements are equivalent to the smallest element, the iterator to the first such element is returned. If several elements are equivalent to the largest element, the iterator to the last such element is returned.

===Complexity===
At most {{math|max(floor(3/2(N−1)), 0)}} applications of the predicate, where {{c|N {{=}} std::distance(first, last)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
This algorithm is different from {{c|std::make_pair(std::min_element(), std::max_element())}}, not only in efficiency, but also in that this algorithm finds the ''last'' biggest element while {{lc|std::max_element}} finds the ''first'' biggest element.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt&gt;
std::pair&lt;ForwardIt, ForwardIt&gt; 
    minmax_element(ForwardIt first, ForwardIt last)
{
    return std::minmax_element(first, last, std::less&lt;&gt;());
}
 | 2=
template&lt;class ForwardIt, class Compare&gt;
std::pair&lt;ForwardIt, ForwardIt&gt; 
    minmax_element(ForwardIt first, ForwardIt last, Compare comp)
{
    std::pair&lt;ForwardIt, ForwardIt&gt; result(first, first);
    
    if (first == last) return result;
    if (++first == last) return result;

    if (comp(*first, *result.first)) {
        result.first = first;
    } else {
        result.second = first;
    }
    while (++first != last) {
        ForwardIt i = first;
        if (++first == last) {
            if (comp(*i, *result.first)) result.first = i;
            else if (!(comp(*i, *result.second))) result.second = i;
            break;
        } else {
            if (comp(*first, *i)) {
                if (comp(*first, *result.first)) result.first = first;
                if (!(comp(*i, *result.second))) result.second = i;
            } else {
                if (comp(*i, *result.first)) result.first = i;
                if (!(comp(*first, *result.second))) result.second = first;
            }
        }
    }
    return result;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
 
int main()
{
    std::vector&lt;int&gt; v = { 3, 9, 1, 4, 2, 5, 9 };
 
    auto result = std::minmax_element(v.begin(), v.end());
    std::cout &lt;&lt; &quot;min element at: &quot; &lt;&lt; (result.first - v.begin()) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;max element at: &quot; &lt;&lt; (result.second - v.begin()) &lt;&lt; '\n';
}
 | output=
min element at: 2
max element at: 6
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc min_element}}
{{dsc inc | cpp/algorithm/dsc max_element}}

{{dsc end}}

[[de:cpp/algorithm/minmax element]]
[[es:cpp/algorithm/minmax element]]
[[fr:cpp/algorithm/minmax element]]
[[it:cpp/algorithm/minmax element]]
[[ja:cpp/algorithm/minmax element]]
[[pt:cpp/algorithm/minmax element]]
[[ru:cpp/algorithm/minmax element]]
[[zh:cpp/algorithm/minmax element]]</text>
      <sha1>7ryvglbv3atrq4au635kynwljdklejc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/mismatch</title>
    <ns>0</ns>
    <id>757</id>
    <revision>
      <id>90626</id>
      <parentid>89845</parentid>
      <timestamp>2017-03-06T18:18:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="6491">{{cpp/title|mismatch}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2 &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( InputIt1 first1, InputIt1 last1,
              InputIt2 first2 );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
std::pair&lt;ForwardIt1,ForwardIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
              ForwardIt2 first2 );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2, class BinaryPredicate &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( InputIt1 first1, InputIt1 last1,
              InputIt2 first2,
              BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
std::pair&lt;ForwardIt1,ForwardIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
              ForwardIt2 first2,
              BinaryPredicate p );}}
{{dcl | since=c++14 | num= 5 |1= 
template&lt; class InputIt1, class InputIt2 &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2 );
}}
{{dcl | since=c++17 | num= 6 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
std::pair&lt;ForwardIt1,ForwardIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
              ForwardIt2 first2, ForwardIt2 last2 );}}
{{dcl | since=c++14 | num= 7 |1= 
template&lt; class InputIt1, class InputIt2, class BinaryPredicate &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2,
              BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 8 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
std::pair&lt;ForwardIt1,ForwardIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
              ForwardIt2 first2, ForwardIt2 last2,
              BinaryPredicate p );}}

{{dcl end}}

Returns the first mismatching pair of elements from two ranges: one defined by {{tt|[first1, last1)}} and another defined by {{tt|[first2,last2)}}. If {{tt|last2}} is not provided (overloads {{v|1-4}}), it denotes {{tt|first2 + (last1 - first1)}}.

@1,5@ Elements are compared using {{tt|operator{{==}}}}.
@3,7@ Elements are compared using the given binary predicate {{tt|p}}.

@2,4,6,8@ Same as {{v|1,3,5,7}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of the elements}}
{{par | first2, last2 | the second range of the elements}}
{{par exec pol}}
{{par pred2 eq | p | p1=InputIt1 | p2=InputIt2}}
{{par hreq}}
{{par req concept | InputIt1 | InputIterator}}
{{par req concept | InputIt2 | InputIterator}}
{{par req concept | ForwardIt1 | ForwardIterator}}
{{par req concept | ForwardIt2 | ForwardIterator}}
{{par req concept | BinaryPredicate | BinaryPredicate}}
{{par end}}

===Return value===
{{lc|std::pair}} with iterators to the first two non-equivalent elements.

{{rev begin}}
{{rev | until=c++14 | If no mismatches are found when the comparison reaches {{tt|last1}}, the pair holds {{tt|last1}} and the corresponding iterator from the second range. The behavior is undefined if the second range is shorter than the first range.
}}
{{rev | since=c++14 | If no mismatches are found when the comparison reaches {{tt|last1}} or {{tt|last2}}, whichever happens first, the pair holds the end iterator and the corresponding iterator from the other range.
}}
{{rev end}}

===Complexity===
@1-4@At most {{tt|last1}} - {{tt|first1}} applications of {{tt|operator{{==}}}} or the predicate {{tt|p}}
@5-8@At most min({{tt|last1}} - {{tt|first1}}, {{tt|last2}} - {{tt|first2}}) applications of {{tt|operator{{==}}}} or the predicate {{tt|p}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2&gt;
std::pair&lt;InputIt1, InputIt2&gt;
    mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2)
{
    while (first1 != last1 &amp;&amp; *first1 == *first2) {
        ++first1, ++first2;
    }
    return std::make_pair(first1, first2);
}
| 2=
template&lt;class InputIt1, class InputIt2, class BinaryPredicate&gt;
std::pair&lt;InputIt1, InputIt2&gt;
    mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p)
{
    while (first1 != last1 &amp;&amp; p(*first1, *first2)) {
        ++first1, ++first2;
    }
    return std::make_pair(first1, first2);
}
| 3=
template&lt;class InputIt1, class InputIt2&gt;
std::pair&lt;InputIt1, InputIt2&gt;
    mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2)
{
    while (first1 != last1 &amp;&amp; first2 != last2 &amp;&amp; *first1 == *first2) {
        ++first1, ++first2;
    }
    return std::make_pair(first1, first2);
}
| 4=
template&lt;class InputIt1, class InputIt2, class BinaryPredicate&gt;
std::pair&lt;InputIt1, InputIt2&gt;
    mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate p)
{
    while (first1 != last1 &amp;&amp; first2 != last2 &amp;&amp; p(*first1, *first2)) {
        ++first1, ++first2;
    }
    return std::make_pair(first1, first2);
}
}}

===Example===

{{example
 | This program determines the longest substring that is simultaneously found at the very beginning of the given string and at the very end of it, in reverse order (possibly overlapping)
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;

std::string mirror_ends(const std::string&amp; in)
{
    return std::string(in.begin(),
                       std::mismatch(in.begin(), in.end(), in.rbegin()).first);
}

int main()
{
    std::cout &lt;&lt; mirror_ends(&quot;abXYZba&quot;) &lt;&lt; '\n'
              &lt;&lt; mirror_ends(&quot;abca&quot;) &lt;&lt; '\n'
              &lt;&lt; mirror_ends(&quot;aba&quot;) &lt;&lt; '\n';
}
 | output=
ab
a
aba
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc equal}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc inc | cpp/algorithm/dsc lexicographical_compare}}
{{dsc inc | cpp/algorithm/dsc search}}

{{dsc end}}

[[de:cpp/algorithm/mismatch]]
[[es:cpp/algorithm/mismatch]]
[[fr:cpp/algorithm/mismatch]]
[[it:cpp/algorithm/mismatch]]
[[ja:cpp/algorithm/mismatch]]
[[pt:cpp/algorithm/mismatch]]
[[ru:cpp/algorithm/mismatch]]
[[zh:cpp/algorithm/mismatch]]</text>
      <sha1>luc63nxi3plnysaug8c53twn7qw314c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/move</title>
    <ns>0</ns>
    <id>2480</id>
    <revision>
      <id>90633</id>
      <parentid>90630</parentid>
      <timestamp>2017-03-06T18:34:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missed return type</comment>
      <text xml:space="preserve" bytes="3484">{{cpp/title|move}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class InputIt, class OutputIt &gt;
OutputIt move( InputIt first, InputIt last, OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 move( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first );}}
{{dcl end}}

@1@ Moves the elements in the range {{tt|[first, last)}}, to another range beginning at {{tt|d_first}}. After this operation the elements in the moved-from range will still contain valid values of the appropriate type, but not necessarily the same values as before the move.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to move}}
{{par | d_first | the beginning of the destination range. The behavior is undefined if {{tt|d_first}} is within the range {{tt|[first, last)}}. In this case, {{lc|std::move_backward}} may be used instead of [[cpp/algorithm/move#top | &lt;!--Manually apply syntax highlighting while avoiding automatic hyperlinking to the utility function rather than the algorithm--&gt;&lt;span class=&quot;mw-geshi cpp source-cpp&quot;&gt;std::move&lt;/span&gt;]]. }}
{{par exec pol}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2| ForwardIterator}}
{{par end}}

===Return value===
Output iterator to the element past the last element moved ({{c|d_first + (last - first)}})

===Complexity===
Exactly {{tt|last - first}} move assignments.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class OutputIt&gt;
OutputIt move(InputIt first, InputIt last, OutputIt d_first)
{
    while (first != last) {
        *d_first++ = std::move(*first++);
    }
    return d_first;
}
}}

===Notes===

When moving overlapping ranges, {{tt|std::move}} is appropriate when moving to the left (beginning of the destination range is outside the source range) while {{tt|std::move_backward}} is appropriate when moving to the right (end of the destination range is outside the source range).

===Example===
The following code moves thread objects (which themselves are not copyable) from one container to another.

{{example
 |code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;list&gt;
#include &lt;iterator&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

void f(int n)
{
    std::this_thread::sleep_for(std::chrono::seconds(n));
    std::cout &lt;&lt; &quot;thread &quot; &lt;&lt; n &lt;&lt; &quot; ended&quot; &lt;&lt; '\n';
}

int main() 
{
    std::vector&lt;std::thread&gt; v;
    v.emplace_back(f, 1);
    v.emplace_back(f, 2);
    v.emplace_back(f, 3);
    std::list&lt;std::thread&gt; l;
    // copy() would not compile, because std::thread is noncopyable

    std::move(v.begin(), v.end(), std::back_inserter(l)); 
    for (auto&amp; t : l) t.join();
}

 | output=
thread 1 ended
thread 2 ended
thread 3 ended
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc move_backward}}
{{dsc inc | cpp/utility/dsc move}}
{{dsc end}}

[[de:cpp/algorithm/move]]
[[es:cpp/algorithm/move]]
[[fr:cpp/algorithm/move]]
[[it:cpp/algorithm/move]]
[[ja:cpp/algorithm/move]]
[[pt:cpp/algorithm/move]]
[[ru:cpp/algorithm/move]]
[[zh:cpp/algorithm/move]]</text>
      <sha1>dq4ua92ml8adr8fg7f3akzbwphld3d5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/move backward</title>
    <ns>0</ns>
    <id>2479</id>
    <revision>
      <id>65287</id>
      <parentid>63648</parentid>
      <timestamp>2013-09-06T22:33:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix the off-by-one in the UB note</comment>
      <text xml:space="preserve" bytes="3070">{{cpp/title|move_backward}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 |
template&lt; class BidirIt1, class BidirIt2 &gt;
BidirIt2 move_backward( BidirIt1 first, BidirIt1 last, BidirIt2 d_last );
}}
{{dcl end}}

Moves the elements from the range {{tt|[first, last)}}, to another range ending at {{tt|d_last}}. The elements are moved in reverse order (the last element is moved first), but their relative order is preserved. 

The behavior is undefined if {{tt|d_last}} is within {{tt|(first, last]}}.  [[cpp/algorithm/move | &lt;!--Manually apply syntax highlighting while avoiding automatic hyperlinking to the utility function rather than the algorithm--&gt;&lt;span class=&quot;mw-geshi cpp source-cpp&quot;&gt;std::move&lt;/span&gt;]] must be used instead of {{tt|std::move_backward}} in that case.

===Parameters===
{{par begin}}
{{par | first, last | the range of the elements to move}}
{{par | d_last | end of the destination range }}
{{par hreq}}
{{par req concept | BidirIt1, BidirIt2 | BidirectionalIterator}}
{{par end}}

===Return value===
Iterator in the destination range, pointing at the last element moved.

===Complexity===
Exactly {{tt|last - first}} move assignments.

===Possible implementation===
{{eq fun | 1=
template&lt; class BidirIt1, class BidirIt2 &gt;
BidirIt2 move_backward(BidirIt1 first,
                                     BidirIt1 last,
                                     BidirIt2 d_last)
{
    while (first != last) {
        *(--d_last) = std::move(*(--last));
    }
    return d_last;
}
}}

===Notes===

When moving overlapping ranges, {{tt|std::move}} is appropriate when moving to the left (beginning of the destination range is outside the source range) while {{tt|std::move_backward}} is appropriate when moving to the right (end of the destination range is outside the source range).

===Example===
{{example
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;std::string&gt; src{&quot;foo&quot;, &quot;bar&quot;, &quot;baz&quot;};
    std::vector&lt;std::string&gt; dest(src.size());

    std::cout &lt;&lt; &quot;src: &quot;;
    for (const auto &amp;s : src)
    {
        std::cout &lt;&lt; s &lt;&lt; ' ';
    }   
    std::cout &lt;&lt; &quot;\ndest: &quot;;
    for (const auto &amp;s : dest)
    {
        std::cout &lt;&lt; s &lt;&lt; ' ';
    }   
    std::cout &lt;&lt; '\n';

    std::move_backward(src.begin(), src.end(), dest.end());

    std::cout &lt;&lt; &quot;src: &quot;;                                                       
    for (const auto &amp;s : src)
    {
        std::cout &lt;&lt; s &lt;&lt; ' ';
    }   
    std::cout &lt;&lt; &quot;\ndest: &quot;;
    for (const auto &amp;s : dest)
    {
        std::cout &lt;&lt; s &lt;&lt; ' ';
    }   
    std::cout &lt;&lt; '\n';
}
 | output=
src: foo bar baz 
dest:    
src:    
dest: foo bar baz 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc move}}
{{dsc end}}

[[de:cpp/algorithm/move backward]]
[[es:cpp/algorithm/move backward]]
[[fr:cpp/algorithm/move backward]]
[[it:cpp/algorithm/move backward]]
[[ja:cpp/algorithm/move backward]]
[[pt:cpp/algorithm/move backward]]
[[ru:cpp/algorithm/move backward]]
[[zh:cpp/algorithm/move backward]]</text>
      <sha1>h9ua1obbu9g3rqi3tnxz58z2ascw683</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/next permutation</title>
    <ns>0</ns>
    <id>758</id>
    <revision>
      <id>81328</id>
      <parentid>57014</parentid>
      <timestamp>2015-10-19T21:53:50Z</timestamp>
      <contributor>
        <ip>202.20.18.10</ip>
      </contributor>
      <comment>Made the while loop condition clearer - The 1 was difficult to differentiate from an l</comment>
      <text xml:space="preserve" bytes="2692">{{cpp/title|next_permutation}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class BidirIt &gt;
bool next_permutation( BidirIt first, BidirIt last );
}}
{{dcl |  num=2 |
template&lt; class BidirIt, class Compare &gt;
bool next_permutation( BidirIt first, BidirIt last, Compare comp );
}}
{{dcl end}}

Transforms the range {{tt|[first, last)}} into the next permutation from the set of all permutations that are lexicographically ordered with respect to {{tt|operator&lt;}} or {{tt|comp}}. Returns {{c|true}} if such permutation exists, otherwise transforms the range into the first permutation (as if by {{tt|std::sort(first, last)}}) and returns {{c|false}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to permute }}
{{par cmp | comp | p1=BidirIt}} 
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator | ValueSwappable}}
{{par end}}

===Return value===
{{c|true}} if the new permutation is lexicographically greater than the old. {{c|false}} if the last permutation was reached and the range was reset to the first permutation.

===Exceptions===
Any exceptions thrown from iterator operations or the element swap.

===Complexity===
At most {{math|N/2}} swaps, where {{c|1=N = std::distance(first, last)}}.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class BidirIt&gt;
bool next_permutation(BidirIt first, BidirIt last)
{
    if (first == last) return false;
    BidirIt i = last;
    if (first == --i) return false;

    while (true) {
        BidirIt i1, i2;

        i1 = i;
        if (*--i &lt; *i1) {
            i2 = last;
            while (!(*i &lt; *--i2))
                ;
            std::iter_swap(i, i2);
            std::reverse(i1, last);
            return true;
        }
        if (i == first) {
            std::reverse(first, last);
            return false;
        }
    }
}
}}

===Example===
{{example
 | The following code prints all three permutations of the string &quot;aba&quot;
 | code=
#include &lt;algorithm&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    std::string s = &quot;aba&quot;;
    std::sort(s.begin(), s.end());
    do {
        std::cout &lt;&lt; s &lt;&lt; '\n';
    } while(std::next_permutation(s.begin(), s.end()));
}
 | output=
aab
aba
baa
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_permutation}}
{{dsc inc | cpp/algorithm/dsc prev_permutation}}
{{dsc end}}

[[de:cpp/algorithm/next permutation]]
[[es:cpp/algorithm/next permutation]]
[[fr:cpp/algorithm/next permutation]]
[[it:cpp/algorithm/next permutation]]
[[ja:cpp/algorithm/next permutation]]
[[pt:cpp/algorithm/next permutation]]
[[ru:cpp/algorithm/next permutation]]
[[zh:cpp/algorithm/next permutation]]</text>
      <sha1>nbi69go95bd9ftlyuozdrrg8d0ds2qh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/none of</title>
    <ns>0</ns>
    <id>2545</id>
    <redirect title="cpp/algorithm/all any none of" />
    <revision>
      <id>9315</id>
      <timestamp>2011-08-21T16:07:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/algorithm/all_any_none_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/nth element</title>
    <ns>0</ns>
    <id>759</id>
    <revision>
      <id>90692</id>
      <parentid>89831</parentid>
      <timestamp>2017-03-07T22:14:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0574r1 parallel complexity</comment>
      <text xml:space="preserve" bytes="3844">{{cpp/title|nth_element}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class RandomIt &gt;
void nth_element( RandomIt first, RandomIt nth, RandomIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class RandomIt &gt;
void nth_element( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt nth, RandomIt last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class RandomIt, class Compare &gt;
void nth_element( RandomIt first, RandomIt nth, RandomIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void nth_element( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt nth, RandomIt last, Compare comp );}}
{{dcl end}}

{{tt|nth_element}} is a partial sorting algorithm that rearranges elements in {{tt|[first, last)}} such that:

* The element pointed at by {{tt|nth}} is changed to whatever element would occur in that position if {{tt|[first, last)}} was sorted.
* All of the elements before this new {{tt|nth}} element are less than or equal to the elements after the new {{tt|nth}} element.

More formally, {{tt|nth_element}} partially sorts the range {{tt|[first, last)}} in ascending order so that the condition {{c|!(*j &lt; *i)}} (for {{v|1-2}}, or {{c|comp(*j, *i) {{==}} false}} for {{v|3-4}}) is met for any {{tt|i}} in the range {{tt|[first, nth)}} and for any {{tt|j}} in the range {{tt|[nth, last)}}. The element placed in the {{tt|nth}} position is exactly the element that would occur in this position if the range was fully sorted.

{{tt|nth}} may be the end iterator, in this case the function has no effect.

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | random access iterators defining the range sort}}
{{par | nth | random access iterator defining the sort partition point}} 
{{par exec pol}}
{{par cmp ord | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
(none)

===Complexity===
@1,3@ Linear in {{c|std::distance(first, last)}} on average.
@2.4@ O(N) applications of the predicate, and O(N log N) swaps, where N = last - first.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
The algorithm used is typically [[enwiki::Introselect|introselect]] although other [[enwiki::Selection algorithm|selection algorithms]] with suitable average-case complexity are allowed.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

int main()
{
    std::vector&lt;int&gt; v{5, 6, 4, 3, 2, 6, 7, 9, 3};

    std::nth_element(v.begin(), v.begin() + v.size()/2, v.end());
    std::cout &lt;&lt; &quot;The median is &quot; &lt;&lt; v[v.size()/2] &lt;&lt; '\n';

    std::nth_element(v.begin(), v.begin()+1, v.end(), std::greater&lt;int&gt;());
    std::cout &lt;&lt; &quot;The second largest element is &quot; &lt;&lt; v[1] &lt;&lt; '\n';
}
 | output=
The median is 5
The second largest element is 7
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partial_sort_copy}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}
{{dsc inc | cpp/algorithm/dsc sort}}

{{dsc end}}

[[de:cpp/algorithm/nth element]]
[[es:cpp/algorithm/nth element]]
[[fr:cpp/algorithm/nth element]]
[[it:cpp/algorithm/nth element]]
[[ja:cpp/algorithm/nth element]]
[[pt:cpp/algorithm/nth element]]
[[ru:cpp/algorithm/nth element]]
[[zh:cpp/algorithm/nth element]]</text>
      <sha1>hkn2qlcxagoy7vqp5keg23soqqop0r2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/partial sort</title>
    <ns>0</ns>
    <id>760</id>
    <revision>
      <id>89824</id>
      <parentid>84663</parentid>
      <timestamp>2017-01-27T05:18:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2795">{{cpp/title|partial_sort}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class RandomIt &gt;
void partial_sort( RandomIt first, RandomIt middle, RandomIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class RandomIt &gt;
void partial_sort( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt middle, RandomIt last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class RandomIt, class Compare &gt;
void partial_sort( RandomIt first, RandomIt middle, RandomIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void partial_sort( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt middle, RandomIt last, Compare comp );}}
{{dcl end}}

Rearranges elements such that the range {{tt|[first, middle)}} contains the sorted {{tt|middle - first}} smallest elements in the range {{tt|[first, last)}}.

The order of equal elements is not guaranteed to be preserved. The order of the remaining elements in the range {{tt|[middle, last)}} is unspecified.

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sort}}
{{par exec pol}}
{{par cmp ord | comp | p1=RandomIt}}
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}} 
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}} 
{{par end}}

===Return value===
(none)

===Complexity===
Approximately {{math|(last-first)log(middle-first))}} applications of {{tt|cmp}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;

int main()
{
    std::array&lt;int, 10&gt; s{5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
  
    std::partial_sort(s.begin(), s.begin() + 3, s.end());
    for (int a : s) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    } 
}
 | output=
0 1 2 7 8 6 5 9 4 3
 | p=true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc nth_element}}
{{dsc inc | cpp/algorithm/dsc partial_sort_copy}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}
{{dsc inc | cpp/algorithm/dsc sort}}

{{dsc end}}

[[de:cpp/algorithm/partial sort]]
[[es:cpp/algorithm/partial sort]]
[[fr:cpp/algorithm/partial sort]]
[[it:cpp/algorithm/partial sort]]
[[ja:cpp/algorithm/partial sort]]
[[pt:cpp/algorithm/partial sort]]
[[ru:cpp/algorithm/partial sort]]
[[zh:cpp/algorithm/partial sort]]</text>
      <sha1>gxkuck87f1ma5on7atwzv900bvk5k4v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/partial sort copy</title>
    <ns>0</ns>
    <id>761</id>
    <revision>
      <id>90647</id>
      <parentid>89819</parentid>
      <timestamp>2017-03-06T18:57:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="4507">{{cpp/title|partial_sort_copy}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class RandomIt &gt;
RandomIt partial_sort_copy( InputIt first, InputIt last,
                            RandomIt d_first, RandomIt d_last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class RandomIt &gt;
RandomIt partial_sort_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last,
                            RandomIt d_first, RandomIt d_last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt, class RandomIt, class Compare &gt;
RandomIt partial_sort_copy( InputIt first, InputIt last,
                            RandomIt d_first, RandomIt d_last,
                            Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class RandomIt, class Compare &gt;
RandomIt partial_sort_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last,
                            RandomIt d_first, RandomIt d_last,
                            Compare comp );}}
{{dcl end}}

Sorts some of the elements in the range {{tt|[first, last)}} in ascending order, storing the result in the range {{tt|[d_first, d_last)}}.

At most {{c|d_last - d_first}} of the elements are moved to the range {{tt|[d_first, d_first + n)}} and then sorted. {{tt|n}} is the number of elements to sort ({{c|1=n = min(last - first, d_last - d_first)}}). The order of equal elements is not guaranteed to be preserved. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sort}}
{{par | d_first, d_last | random access iterators defining the destination range}}
{{par exec pol}}
{{par cmp ord | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
an iterator to the element defining the upper boundary of the sorted range, i.e. {{c|d_first + min(last - first, d_last - d_first)}}.

===Complexity===
{{math|O(N&amp;middot;log(min(D,N))}}, where {{c|1=N = std::distance(first, last)}}, {{c|1=D = std::distance(d_first, d_last)}} applications of {{tt|cmp}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Example===
{{example
 | The following code sorts a vector of integers and copies them into a smaller and a larger vector.
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;int&gt; v0{4, 2, 5, 1, 3};
    std::vector&lt;int&gt; v1{10, 11, 12};
    std::vector&lt;int&gt; v2{10, 11, 12, 13, 14, 15, 16};
    std::vector&lt;int&gt;::iterator it;

    it = std::partial_sort_copy(v0.begin(), v0.end(), v1.begin(), v1.end());

    std::cout &lt;&lt; &quot;Writing to the smaller vector in ascending order gives: &quot;;
    for (int a : v1) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';
    if(it == v1.end())
        std::cout &lt;&lt; &quot;The return value is the end iterator\n&quot;;

    it = std::partial_sort_copy(v0.begin(), v0.end(), v2.begin(), v2.end(), 
                                std::greater&lt;int&gt;());

    std::cout &lt;&lt; &quot;Writing to the larger vector in descending order gives: &quot;;
    for (int a : v2) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n' &lt;&lt; &quot;The return value is the iterator to &quot; &lt;&lt; *it &lt;&lt; '\n';
}
 | output=
Writing to the smaller vector in ascending order gives: 1 2 3
The return value is the end iterator
Writing to the larger vector in descending order gives: 5 4 3 2 1 15 16
The return value is the iterator to 15
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partial_sort}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}

{{dsc end}}

[[de:cpp/algorithm/partial sort copy]]
[[es:cpp/algorithm/partial sort copy]]
[[fr:cpp/algorithm/partial sort copy]]
[[it:cpp/algorithm/partial sort copy]]
[[ja:cpp/algorithm/partial sort copy]]
[[pt:cpp/algorithm/partial sort copy]]
[[ru:cpp/algorithm/partial sort copy]]
[[zh:cpp/algorithm/partial sort copy]]</text>
      <sha1>ax55coetjvypphfrbsgkt9fj230jv3r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/partial sum</title>
    <ns>0</ns>
    <id>762</id>
    <revision>
      <id>86062</id>
      <parentid>86053</parentid>
      <timestamp>2016-06-15T01:28:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>move</comment>
      <text xml:space="preserve" bytes="3941">{{cpp/title|partial_sum}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | num=1 |
template&lt; class InputIt, class OutputIt &gt;
OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first );
}}
{{dcl | num=2 |
template&lt; class InputIt, class OutputIt, class BinaryOperation &gt;
OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first,
                      BinaryOperation op );
}}
{{dcl end}}

Computes the partial sums of the elements in the subranges of the range {{tt|[first, last)}} and writes them to the range beginning at {{tt|d_first}}. The first version uses {{tt|operator+}} to sum up the elements, the second version uses the given binary function {{tt|op}}.

Equivalent operation:

{{source|1=
*(d_first)   = *first;
*(d_first+1) = *first + *(first+1);
*(d_first+2) = *first + *(first+1) + *(first+2);
*(d_first+3) = *first + *(first+1) + *(first+2) + *(first+3);
...
}}

{{rev begin}}
{{rev | until=c++11 |
{{tt|op}} must not have side effects.
}}
{{rev | since=c++11 |
{{tt|op}} must not invalidate any iterators, including the end iterators, or modify any elements of the ranges involved.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sum}}
{{par | d_first | the beginning of the destination range; may be equal to {{tt|first}}}}
{{par op2 | op | t1=iterator_traits&lt;InputIt&gt;::value_type | p2=InputIt | rt=iterator_traits&lt;InputIt&gt;::value_type}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Return value===
Iterator to the element past the last element written.

===Complexity===
Exactly {{tt|(last - first) - 1}} applications of the binary operation
 
===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class OutputIt&gt;
OutputIt partial_sum(InputIt first, InputIt last, 
                     OutputIt d_first)
{
    if (first == last) return d_first;

    typename std::iterator_traits&lt;InputIt&gt;::value_type sum = *first;
    *d_first = sum;

    while (++first != last) {
       sum = sum + *first;
       *++d_first = sum;
    }
    return ++d_first;

    // or, since C++14:
    // return std::partial_sum(first, last, d_first, std::plus&lt;&gt;());
}
 | 2 = 
template&lt;class InputIt, class OutputIt, class BinaryOperation&gt;
OutputIt partial_sum(InputIt first, InputIt last, 
                     OutputIt d_first, BinaryOperation op)
{
    if (first == last) return d_first;

    typename std::iterator_traits&lt;InputIt&gt;::value_type sum = *first;
    *d_first = sum;

    while (++first != last) {
       sum = op(sum, *first);
       *++d_first = sum;
    }
    return ++d_first;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;numeric&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;functional&gt;

int main()
{
    std::vector&lt;int&gt; v = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2}; // or std::vector&lt;int&gt;v(10, 2);

    std::cout &lt;&lt; &quot;The first 10 even numbers are: &quot;;
    std::partial_sum(v.begin(), v.end(), 
                     std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';

    std::partial_sum(v.begin(), v.end(), v.begin(), std::multiplies&lt;int&gt;());
    std::cout &lt;&lt; &quot;The first 10 powers of 2 are: &quot;;
    for (auto n : v) {
        std::cout &lt;&lt; n &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';
}
 | output=
The first 10 even numbers are: 2 4 6 8 10 12 14 16 18 20 
The first 10 powers of 2 are: 2 4 8 16 32 64 128 256 512 1024 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc adjacent_difference}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc inclusive_scan}}
{{dsc inc | cpp/algorithm/dsc exclusive_scan}}
{{dsc end}}

[[de:cpp/algorithm/partial sum]]
[[es:cpp/algorithm/partial sum]]
[[fr:cpp/algorithm/partial sum]]
[[it:cpp/algorithm/partial sum]]
[[ja:cpp/algorithm/partial sum]]
[[pt:cpp/algorithm/partial sum]]
[[ru:cpp/algorithm/partial sum]]
[[zh:cpp/algorithm/partial sum]]</text>
      <sha1>96dvpifja7pe5k1t5jh5ezwudvqjma8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/partition</title>
    <ns>0</ns>
    <id>763</id>
    <revision>
      <id>90715</id>
      <parentid>89813</parentid>
      <timestamp>2017-03-08T15:21:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0574r1 parallel complexity</comment>
      <text xml:space="preserve" bytes="4614">{{cpp/title|partition}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin| num=1}}
{{dcl | until=c++11 |
template&lt; class BidirIt, class UnaryPredicate &gt;
BidirIt partition( BidirIt first, BidirIt last, UnaryPredicate p );
}}
{{dcl | since=c++11 | 1= 
template&lt; class ForwardIt, class UnaryPredicate &gt;
ForwardIt partition( ForwardIt first, ForwardIt last, UnaryPredicate p );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
ForwardIt partition( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryPredicate p );}}
{{dcl end}}

@1@ Reorders the elements in the range {{tt|[first, last)}} in such a way that all elements for which the predicate {{tt|p}} returns {{c|true}} precede the elements for which predicate {{tt|p}} returns {{c|false}}. Relative order of the elements is not preserved. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to reorder}}
{{par exec pol}}
{{par pred1 | p | if the element should be ordered before other elements | p1=ForwardIt}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par req concept | ForwardIt | ForwardIterator | ValueSwappable | notes=However, the operation is more efficient if {{tt|ForwardIt}} also satisfies the requirements of {{concept|BidirectionalIterator}}}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
Iterator to the first element of the second group.

===Complexity===
Given N = {{c|std::distance(first,last)}},
@1@ Exactly N applications of the predicate. At most N/2 swaps if {{tt|ForwardIt}} meets the requirements of {{concept|BidirectionalIterator}}, and at most N swaps otherwise.
@2@ {{tt|O(N log N)}} swaps {{tt|and O(N)}} applications of the predicate.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt, class UnaryPredicate&gt;
ForwardIt partition(ForwardIt first, ForwardIt last, UnaryPredicate p)
{
    first = std::find_if_not(first, last, p);
    if (first == last) return first;

    for(ForwardIt i = std::next(first); i != last; ++i){
        if(p(*i)){
            std::iter_swap(i, first);
            ++first;
        }
    }
    return first;
}

}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;forward_list&gt;

template &lt;class ForwardIt&gt;
 void quicksort(ForwardIt first, ForwardIt last)
 {
    if(first == last) return;
    auto pivot = *std::next(first, std::distance(first,last)/2);
    ForwardIt middle1 = std::partition(first, last, 
                         [pivot](const auto&amp; em){ return em &lt; pivot; });
    ForwardIt middle2 = std::partition(middle1, last, 
                         [pivot](const auto&amp; em){ return !(pivot &lt; em); });
    quicksort(first, middle1);
    quicksort(middle2, last);
 }

int main()
{
    std::vector&lt;int&gt; v = {0,1,2,3,4,5,6,7,8,9};
    std::cout &lt;&lt; &quot;Original vector:\n    &quot;;
    for (int elem : v) std::cout &lt;&lt; elem &lt;&lt; ' ';
    
    auto it = std::partition(v.begin(), v.end(), [](int i){return i % 2 == 0;});
    
    std::cout &lt;&lt; &quot;\nPartitioned vector:\n    &quot;;
    std::copy(std::begin(v), it, std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; &quot; * &quot;;
    std::copy(it, std::end(v), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));

    std::forward_list&lt;int&gt; fl = {1, 30, -4, 3, 5, -4, 1, 6, -8, 2, -5, 64, 1, 92};
    std::cout &lt;&lt; &quot;\nUnsorted list:\n    &quot;;
    for(int n : fl) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';  

    quicksort(std::begin(fl), std::end(fl));
    std::cout &lt;&lt; &quot;Sorted using quicksort:\n    &quot;;
    for(int fi : fl) std::cout &lt;&lt; fi &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
| output =
Original vector:
    0 1 2 3 4 5 6 7 8 9 
Partitioned vector:
    0 8 2 6 4  *  5 3 7 1 9 
Unsorted list:
    1 30 -4 3 5 -4 1 6 -8 2 -5 64 1 92 
Sorted using quicksort:
    -8 -5 -4 -4 1 1 1 2 3 5 6 30 64 92 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_partitioned}}
{{dsc inc | cpp/algorithm/dsc stable_partition}}

{{dsc end}}

[[de:cpp/algorithm/partition]]
[[es:cpp/algorithm/partition]]
[[fr:cpp/algorithm/partition]]
[[it:cpp/algorithm/partition]]
[[ja:cpp/algorithm/partition]]
[[pt:cpp/algorithm/partition]]
[[ru:cpp/algorithm/partition]]
[[zh:cpp/algorithm/partition]]</text>
      <sha1>mk0g355h8z39f378jis0zlh5bgprf19</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/partition copy</title>
    <ns>0</ns>
    <id>2581</id>
    <revision>
      <id>90658</id>
      <parentid>90646</parentid>
      <timestamp>2017-03-06T19:38:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 extra</comment>
      <text xml:space="preserve" bytes="4536">{{cpp/title|partition_copy}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class InputIt, class OutputIt1,
          class OutputIt2, class UnaryPredicate &gt;
std::pair&lt;OutputIt1, OutputIt2&gt;
     partition_copy( InputIt first, InputIt last,
                     OutputIt1 d_first_true, OutputIt2 d_first_false,
                     UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class ForwardIt3, class UnaryPredicate &gt;
std::pair&lt;ForwardIt2, ForwardIt3&gt;
     partition_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 d_first_true, ForwardIt3 d_first_false,
                     UnaryPredicate p );}}
{{dcl end}}

@1@ Copies the elements from the range {{tt|[first, last)}} to two different ranges depending on the value returned by the predicate {{tt|p}}. The elements, that satisfy the predicate {{tt|p}}, are copied to the range beginning at {{tt|d_first_true}}. The rest of the elements are copied to the range beginning at {{tt|d_first_false}}.
@@The behavior is undefined if the input range overlaps either of the output ranges.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sort}}
{{par | d_first_true | the beginning of the output range for the elements that satisfy p}}
{{par | d_first_false | the beginning of the output range for the elements that do not satisfy p}}
{{par exec pol}}
{{par pred1 | p | if the element should be placed in d_first_true | p1=InputIt}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept deref | InputIt | CopyAssignable}}
{{par req concept | OutputIt1, OutputIt2  | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2, ForwardIt3 | ForwardIterator|notes=
ForwardIt1's value type must be CopyAssignable, writable to ForwardIt2 and ForwardIt3, and convertible to UnaryPredicate's argument type}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
A {{c|pair}} constructed from the iterator to the end of the {{tt|d_first_true}} range and the iterator to the end of the {{tt|d_first_false}} range.

===Complexity===

Exactly {{tt|distance(first, last)}} applications of {{tt|p}}.

For the overload with an ExecutionPolicy, there may be a performance cost if ForwardIt's value type is not {{concept|CopyConstructible}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class OutputIt1,
         class OutputIt2, class UnaryPredicate&gt;
std::pair&lt;OutputIt1, OutputIt2&gt;
    partition_copy(InputIt first, InputIt last,
                   OutputIt1 d_first_true, OutputIt2 d_first_false,
                   UnaryPredicate p)
{
    while (first != last) {
        if (p(*first)) {
            *d_first_true = *first;
            ++d_first_true;
        } else {
            *d_first_false = *first;
            ++d_first_false;
        }
        ++first;
    }
    return std::pair&lt;OutputIt1, OutputIt2&gt;(d_first_true, d_first_false);
}
}}

===Example===
{{example
 |
 | code= 

#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;utility&gt;

int main()
{
    int arr [10] = {1,2,3,4,5,6,7,8,9,10};
    int true_arr [5] = {0};
    int false_arr [5] = {0};

    std::partition_copy(std::begin(arr), std::end(arr), std::begin(true_arr),std::begin(false_arr),
                        [] (int i) {return i &gt; 5;});

    std::cout &lt;&lt; &quot;true_arr: &quot;;
    for (auto it = std::begin(true_arr); it != std::end(true_arr); ++it) {
        std::cout &lt;&lt; *it &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n'; 

    std::cout &lt;&lt; &quot;false_arr: &quot;;
    for (auto it = std::begin(false_arr); it != std::end(false_arr); ++it) {
        std::cout &lt;&lt; *it &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n'; 

    return 0;

}

 | output= 
true_arr: 6 7 8 9 10
false_arr: 1 2 3 4 5

}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partition}}
{{dsc inc | cpp/algorithm/dsc stable_partition}}

{{dsc end}}

[[de:cpp/algorithm/partition copy]]
[[es:cpp/algorithm/partition copy]]
[[fr:cpp/algorithm/partition copy]]
[[it:cpp/algorithm/partition copy]]
[[ja:cpp/algorithm/partition copy]]
[[pt:cpp/algorithm/partition copy]]
[[ru:cpp/algorithm/partition copy]]
[[zh:cpp/algorithm/partition copy]]</text>
      <sha1>4cs62r132wvlfe9so2t2yzg4ftyyrly</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/partition point</title>
    <ns>0</ns>
    <id>2582</id>
    <revision>
      <id>83380</id>
      <parentid>67253</parentid>
      <timestamp>2016-02-04T15:45:15Z</timestamp>
      <contributor>
        <ip>76.8.89.6</ip>
      </contributor>
      <comment>Changed complexity to use math</comment>
      <text xml:space="preserve" bytes="2144">{{cpp/title|partition_point}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 | since=c++11 |
template&lt; class ForwardIt, class UnaryPredicate &gt;
ForwardIt partition_point( ForwardIt first, ForwardIt last, UnaryPredicate p );
}}
{{dcl end}}

Examines the partitioned (as if by {{lc|std::partition}}) range {{tt|[first, last)}} and locates the end of the first partition, that is, the first element that does not satisfy {{tt|p}} or {{tt|last}} if all elements satisfy {{tt|p}}.

===Parameters===
{{par begin}}
{{par | first, last | the partitioned range of elements to examine}}
{{par pred1 | p | for the elements found in the beginning of the range | p1=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
The iterator past the end of the first partition within {{tt|[first, last)}} or {{tt|last}} if all elements satisfy {{tt|p}}.

===Complexity===
{{math|O(log(N))}}, where {{c|1=N = std::distance(first, last)}}, applications of the predicate p.


===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    std::array&lt;int, 9&gt; v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    
    auto is_even = [](int i){ return i % 2 == 0; };
    std::partition(v.begin(), v.end(), is_even);
    
    auto p = std::partition_point(v.begin(), v.end(), is_even);
    
    std::cout &lt;&lt; &quot;Before partition:\n    &quot;;
    std::copy(v.begin(), p, std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; &quot;\nAfter partition:\n    &quot;;
    std::copy(p, v.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
}
 | output=
Before partition:
    8 2 6 4 
After partition:
    5 3 7 1 9 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_sorted}}
{{dsc end}}

[[de:cpp/algorithm/partition point]]
[[es:cpp/algorithm/partition point]]
[[fr:cpp/algorithm/partition point]]
[[it:cpp/algorithm/partition point]]
[[ja:cpp/algorithm/partition point]]
[[pt:cpp/algorithm/partition point]]
[[ru:cpp/algorithm/partition point]]
[[zh:cpp/algorithm/partition point]]</text>
      <sha1>1f4nutniuijw4nrplav9j9rpnhfiff5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/pop heap</title>
    <ns>0</ns>
    <id>764</id>
    <revision>
      <id>77342</id>
      <parentid>69144</parentid>
      <timestamp>2015-03-23T10:08:32Z</timestamp>
      <contributor>
        <username>Mmutz</username>
        <id>3888</id>
      </contributor>
      <comment>Add &quot;see also make_heap&quot;</comment>
      <text xml:space="preserve" bytes="2427">{{cpp/title|pop_heap}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class RandomIt &gt;
void pop_heap( RandomIt first, RandomIt last );
}}
{{dcl | num=2 |
template&lt; class RandomIt, class Compare &gt;
void pop_heap( RandomIt first, RandomIt last, Compare comp );
}}
{{dcl end}}

Swaps the value in the position {{tt|first}} and the value in the position {{tt|last-1}} and makes the subrange {{tt|[first, last-1)}} into a ''max heap''. This has the effect of removing the first (largest) element from the heap defined by the range {{tt|[first, last)}}.

The first version of the function uses {{c|operator&lt;}} to compare the elements, the second uses the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements defining the valid nonempty heap to modify}}
{{par cmp | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
(none)

===Complexity===
At most ''2&amp;times;log(N)'' comparisons where {{c|1=N=std::distance(first, last)}}.

===Notes===
{{cpp/algorithm/notes heap}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v { 3, 1, 4, 1, 5, 9 };

    std::make_heap(v.begin(), v.end());

    std::cout &lt;&lt; &quot;v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::pop_heap(v.begin(), v.end()); // moves the largest to the end

    std::cout &lt;&lt; &quot;after pop_heap: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    int largest = v.back();
    v.pop_back();  // actually removes the largest element
    std::cout &lt;&lt; &quot;largest element: &quot; &lt;&lt; largest &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;heap without largest: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
v: 9 5 4 1 1 3 
after pop_heap: 5 3 4 1 1 9 
largest element: 9
heap without largest: 5 3 4 1 1 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc push_heap}}
{{dsc inc | cpp/algorithm/dsc make_heap}}
{{dsc end}}

[[de:cpp/algorithm/pop heap]]
[[es:cpp/algorithm/pop heap]]
[[fr:cpp/algorithm/pop heap]]
[[it:cpp/algorithm/pop heap]]
[[ja:cpp/algorithm/pop heap]]
[[pt:cpp/algorithm/pop heap]]
[[ru:cpp/algorithm/pop heap]]
[[zh:cpp/algorithm/pop heap]]</text>
      <sha1>762banh3mvnuz2ih4n3kdkycbpd3aq2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/prev permutation</title>
    <ns>0</ns>
    <id>765</id>
    <revision>
      <id>81847</id>
      <parentid>57033</parentid>
      <timestamp>2015-11-13T20:35:41Z</timestamp>
      <contributor>
        <ip>161.53.179.233</ip>
      </contributor>
      <text xml:space="preserve" bytes="2773">{{cpp/title|prev_permutation}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class BidirIt &gt;
bool prev_permutation( BidirIt first, BidirIt last);
}}
{{dcl |  num=2 |
template&lt; class BidirIt, class Compare &gt;
bool prev_permutation( BidirIt first, BidirIt last, Compare comp);
}}
{{dcl end}}

Transforms the range {{tt|[first, last)}} into the previous permutation from the set of all permutations that are lexicographically ordered with respect to {{tt|operator&lt;}} or {{tt|comp}}. Returns {{c|true}} if such permutation exists, otherwise transforms the range into the last permutation (as if by {{tt|std::sort(first, last); std::reverse(first, last);}}) and returns {{c|false}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to permute }}
{{par cmp | comp | p1=BidirIt}} 
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator | ValueSwappable}}
{{par end}}

===Return value===

{{c|true}} if the new permutation precedes the old in lexicographical order. {{c|false}} if the first permutation was reached and the range was reset to the last permutation.

===Exceptions===
Any exceptions thrown from iterator operations or the element swap.

===Complexity===

At most {{tt|(last-first)/2}} swaps.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class BidirIt&gt;
bool prev_permutation(BidirIt first, BidirIt last)
{
    if (first == last) return false;
    BidirIt i = last;
    if (first == --i) return false;

    while (1) {
        BidirIt i1, i2;

        i1 = i;
        if (*i1 &lt; *--i) {
            i2 = last;
            while (!(*--i2 &lt; *i))
                ;
            std::iter_swap(i, i2);
            std::reverse(i1, last);
            return true;
        }
        if (i == first) {
            std::reverse(first, last);
            return false;
        }
    }
}
}}

===Example===
{{example
 | The following code prints all six permutations of the string &quot;abc&quot; in reverse order
 | code=
#include &lt;algorithm&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;functional&gt;
int main()
{
    std::string s=&quot;abc&quot;;
    std::sort(s.begin(), s.end(), std::greater&lt;char&gt;());
    do {
        std::cout &lt;&lt; s &lt;&lt; ' ';
    } while(std::prev_permutation(s.begin(), s.end()));
    std::cout &lt;&lt; '\n';
}
 | output=
cba cab bca bac acb abc
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc is_permutation}}
{{dsc inc | cpp/algorithm/dsc next_permutation}}
{{dsc end}}

[[de:cpp/algorithm/prev permutation]]
[[es:cpp/algorithm/prev permutation]]
[[fr:cpp/algorithm/prev permutation]]
[[it:cpp/algorithm/prev permutation]]
[[ja:cpp/algorithm/prev permutation]]
[[pt:cpp/algorithm/prev permutation]]
[[ru:cpp/algorithm/prev permutation]]
[[zh:cpp/algorithm/prev permutation]]</text>
      <sha1>0osh849v3urbl4b6vho8ptbbv9q96lu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/push heap</title>
    <ns>0</ns>
    <id>766</id>
    <revision>
      <id>88140</id>
      <parentid>77343</parentid>
      <timestamp>2016-11-09T08:08:44Z</timestamp>
      <contributor>
        <username>Tcorbat</username>
        <id>6025</id>
      </contributor>
      <comment>According to the [heap.push] section of the standard (C++14) &quot;at most log(N)&quot; comparisons are required instead of &quot;at most 2*log(N)&quot;</comment>
      <text xml:space="preserve" bytes="2083">{{cpp/title|push_heap}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class RandomIt &gt;
void push_heap( RandomIt first, RandomIt last );
}}
{{dcl | num=2 |
template&lt; class RandomIt, class Compare &gt;
void push_heap( RandomIt first, RandomIt last,
                Compare comp );
}}
{{dcl end}}

Inserts the element at the position {{tt|last-1}} into the ''max heap'' defined by the range {{tt|[first, last-1)}}. The first version of the function uses {{c|operator&lt;}} to compare the elements, the second uses the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements defining the heap to modify}}
{{par cmp | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
(none)

===Complexity===
At most ''log(N)'' comparisons where {{c|1=N=std::distance(first, last)}}.

===Notes===
{{cpp/algorithm/notes heap}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v { 3, 1, 4, 1, 5, 9 };

    std::make_heap(v.begin(), v.end());

    std::cout &lt;&lt; &quot;v: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    v.push_back(6);

    std::cout &lt;&lt; &quot;before push_heap: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::push_heap(v.begin(), v.end());

    std::cout &lt;&lt; &quot;after push_heap: &quot;;
    for (auto i : v) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
v: 9 5 4 1 1 3 
before push_heap: 9 5 4 1 1 3 6 
after push_heap:  9 5 6 1 1 3 4 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc pop_heap}}
{{dsc inc | cpp/algorithm/dsc make_heap}}
{{dsc end}}

[[de:cpp/algorithm/push heap]]
[[es:cpp/algorithm/push heap]]
[[fr:cpp/algorithm/push heap]]
[[it:cpp/algorithm/push heap]]
[[ja:cpp/algorithm/push heap]]
[[pt:cpp/algorithm/push heap]]
[[ru:cpp/algorithm/push heap]]
[[zh:cpp/algorithm/push heap]]</text>
      <sha1>8eos11d0y574scznfiguxjhzsjj34ta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/qsort</title>
    <ns>0</ns>
    <id>767</id>
    <revision>
      <id>91237</id>
      <parentid>88311</parentid>
      <timestamp>2017-03-28T20:32:57Z</timestamp>
      <contributor>
        <ip>94.175.120.248</ip>
      </contributor>
      <text xml:space="preserve" bytes="2738">{{cpp/title|qsort}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl |num=1|
void qsort( void *ptr, std::size_t count, std::size_t size, /*compare-pred*/* comp );
void qsort( void *ptr, std::size_t count, std::size_t size, /*c-compare-pred*/* comp );
}}
{{dcl |num=2|1=
extern &quot;C++&quot; using /*compare-pred*/ = int(const void*, const void*); // exposition-only
extern &quot;C&quot; using /*c-compare-pred*/ = int(const void*, const void*); // exposition-only
}}
{{dcl end}}

Sorts the given array pointed to by {{tt|ptr}} in ascending order. The array contains {{tt|count}} elements of {{tt|size}} bytes. Function pointed to by {{tt|comp}} is used for object comparison.

If {{tt|comp}} indicates two elements as equivalent, their order is undefined.

===Parameters===
{{par begin}}
{{par | ptr | pointer to the array to sort}}
{{par | count | number of elements in the array}}
{{par | size | size of each element in the array in bytes}}
{{par ccmp | comp }}
{{par end}}

===Return value===
(none)

===Notes===
Despite the name, C++, C, and POSIX standards do not require this function to be implemented using [[enwiki:Quicksort|quicksort]] or make any complexity or stability guarantees.

The type of the elements of the array must be a {{concept|TrivialType}}, otherwise the behavior is undefined.

The two overloads provided by the C++ standard library are distinct because the types of the parameter {{tt|comp}} are distinct ([[cpp/language/language linkage|language linkage]] is part of its type)

===Example===
{{example
 | The following code sorts an array of integers using {{tt|qsort()}}.
 | code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;climits&gt;

int main()
{
    int a[] = {-2, 99, 0, -743, 2, INT_MIN, 4};
    constexpr std::size_t size = sizeof a / sizeof *a;

    std::qsort(a, size, sizeof *a, [](const void* a, const void* b)
    {
        int arg1 = *static_cast&lt;const int*&gt;(a);
        int arg2 = *static_cast&lt;const int*&gt;(b);

        if(arg1 &lt; arg2) return -1;
        if(arg1 &gt; arg2) return 1;
        return 0;

    //  return (arg1 &gt; arg2) - (arg1 &lt; arg2); // possible shortcut
    //  return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present)
    });

    for(int ai : a)
        std::cout &lt;&lt; ai &lt;&lt; ' ';
}
 | output=
-2147483648 -743 -2 0 2 4 99
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc bsearch}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc inc | cpp/types/dsc is_trivial}}
{{dsc see c | c/algorithm/qsort}}
{{dsc end}}

[[de:cpp/algorithm/qsort]]
[[es:cpp/algorithm/qsort]]
[[fr:cpp/algorithm/qsort]]
[[it:cpp/algorithm/qsort]]
[[ja:cpp/algorithm/qsort]]
[[pl:cpp/algorithm/qsort]]
[[pt:cpp/algorithm/qsort]]
[[ru:cpp/algorithm/qsort]]
[[zh:cpp/algorithm/qsort]]</text>
      <sha1>6gs7ke7ess2ckityauvvqagaecw2r7k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/random shuffle</title>
    <ns>0</ns>
    <id>768</id>
    <revision>
      <id>91097</id>
      <parentid>91096</parentid>
      <timestamp>2017-03-19T03:16:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Possible implementation */ no need for separate check; the loop condition will just be false on entry. Disclaimer on the rand()%N antipattern. And why are we make_unsigned'ing diff_t for shuffle()?</comment>
      <text xml:space="preserve" bytes="4266">{{cpp/title|random_shuffle|shuffle}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 | until=c++17 | notes={{mark|deprecated in C++14}} |
template&lt; class RandomIt &gt;
void random_shuffle( RandomIt first, RandomIt last );
}}
{{dcl rev begin | num=2}}
{{dcl | until=c++11 |
template&lt; class RandomIt, class RandomFunc &gt;
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&amp; r );
}}
{{dcl | since=c++11 | until=c++17 | notes={{mark|deprecated in C++14}} |
template&lt; class RandomIt, class RandomFunc &gt;
void random_shuffle( RandomIt first, RandomIt last, RandomFunc&amp;&amp; r );
}}
{{dcl rev end}}
{{dcl | num=3 | since=c++11 |
template&lt; class RandomIt, class URBG &gt;
void shuffle( RandomIt first, RandomIt last, URBG&amp;&amp; g );
}}
{{dcl end}}

Reorders the elements in the given range {{tt|[first, last)}} such that each possible permutation of those elements has equal probability of appearance.

@1@ The random number generator is implementation-defined, but the function {{lc|std::rand}} is often used.

@2@ The random number generator is the function object {{tt|r}}. 

@3@ The random number generator is the function object {{tt|g}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to shuffle randomly}}
{{par | r | function object returning a randomly chosen value of type convertible to  {{c|std::iterator_traits&lt;RandomIt&gt;::difference_type}} in the interval [0,n) if invoked as {{tt|r(n)}} }}
{{par | g | a {{concept|UniformRandomBitGenerator}} whose result type is convertible to {{c|std::iterator_traits&lt;RandomIt&gt;::difference_type}} }}
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par req concept | {{c|std::remove_reference_t&lt;URBG&gt;}} | UniformRandomBitGenerator}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class RandomIt &gt;
void random_shuffle( RandomIt first, RandomIt last )
{
    typename std::iterator_traits&lt;RandomIt&gt;::difference_type i, n;
    n = last - first;
    for (i = n-1; i &gt; 0; --i) {
        using std::swap;
        swap(first[i], first[std::rand() % (i+1)]);
        // rand() % (i+1) isn't actually correct, because the generated number
        // is not uniformly distributed for most values of i. A correct implementation
        // will need to essentially reimplement C++11 std::uniform_int_distribution,
        // which is beyond the scope of this example.
    }
}
 | 2=
template&lt;class RandomIt, class RandomFunc&gt;
void random_shuffle(RandomIt first, RandomIt last, RandomFunc&amp;&amp; r)
{
    typename std::iterator_traits&lt;RandomIt&gt;::difference_type i, n;
    n = last - first;
    for (i = n-1; i &gt; 0; --i) {
        using std::swap;
        swap(first[i], first[r(i+1)]);
    }
}
 | 3=
template&lt;class RandomIt, class UniformRandomBitGenerator&gt;
void shuffle(RandomIt first, RandomIt last, 
             UniformRandomBitGenerator&amp;&amp; g)
{
    typedef typename std::iterator_traits&lt;RandomIt&gt;::difference_type diff_t;
    typedef std::uniform_int_distribution&lt;diff_t&gt; distr_t;
    typedef typename distr_t::param_type param_t;

    distr_t D;
    diff_t n = last - first;
    for (diff_t i = n-1; i &gt; 0; --i) {
        using std::swap;
        swap(first[i], first[D(g, param_t(0, i))]);
    }
}
}}

===Example===
{{example
 | The following code randomly shuffles the integers 1..10:
 | code=
#include &lt;random&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;int&gt; v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    std::random_device rd;
    std::mt19937 g(rd());

    std::shuffle(v.begin(), v.end(), g);

    std::copy(v.begin(), v.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; &quot;\n&quot;;
}
 | p=true
 | output=
8 6 10 4 2 3 7 1 9 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc next_permutation}}
{{dsc inc | cpp/algorithm/dsc prev_permutation}}
{{dsc end}}

[[de:cpp/algorithm/random shuffle]]
[[es:cpp/algorithm/random shuffle]]
[[fr:cpp/algorithm/random shuffle]]
[[it:cpp/algorithm/random shuffle]]
[[ja:cpp/algorithm/random shuffle]]
[[pt:cpp/algorithm/random shuffle]]
[[ru:cpp/algorithm/random shuffle]]
[[zh:cpp/algorithm/random shuffle]]</text>
      <sha1>egan8187vwanlwac0kd59y3f971lgme</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/reduce</title>
    <ns>0</ns>
    <id>15082</id>
    <revision>
      <id>90785</id>
      <parentid>90659</parentid>
      <timestamp>2017-03-10T14:25:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>requirements on T from P0574r</comment>
      <text xml:space="preserve" bytes="5112">{{cpp/title|reduce}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | num=1 | since=c++17 |
template&lt;class InputIt&gt;
typename std::iterator_traits&lt;InputIt&gt;::value_type reduce(
    InputIt first, InputIt last);
}}
{{dcl | num=2 | since=c++17 |
template&lt;class ExecutionPolicy, class ForwardIt&gt;
typename std::iterator_traits&lt;ForwardIt&gt;::value_type reduce(
    ExecutionPolicy&amp;&amp; policy,
    ForwardIt first, ForwardIt last);
}}
{{dcl | num=3 | since=c++17 |
template&lt;class InputIt, class T&gt;
T reduce(InputIt first, InputIt last, T init);
}}
{{dcl | num=4 | since=c++17 |
template&lt;class ExecutionPolicy, class ForwardIt, class T&gt;
T reduce(ExecutionPolicy&amp;&amp; policy,
         ForwardIt first, ForwardIt last, T init);
}}
{{dcl | num=5 | since=c++17 |
template&lt;class InputIt, class T, class BinaryOp&gt;
T reduce(InputIt first, InputIt last, T init, BinaryOp binary_op);
}}
{{dcl | num=6 | since=c++17 |
template&lt;class ExecutionPolicy, class ForwardIt, class T, class BinaryOp&gt;
T reduce(ExecutionPolicy&amp;&amp; policy,
         ForwardIt first, ForwardIt last, T init, BinaryOp binary_op);
}}
{{dcl end}}

@1@ same as {{c|reduce(first, last, typename std::iterator_traits&lt;InputIt&gt;::value_type{})}}
@3@ same as {{c|reduce(first, last, init, std::plus&lt;&gt;())}}
@5@ Reduces the range {{math|[first; last)}}, possibly permuted and aggregated in unspecified manner, along with the initial value {{tt|init}} over {{tt|binary_op}}. 
@2,4,6@ Same as {{v|1,3,5}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

The behavior is non-deterministic if {{tt|binary_op}} is not associative or not commutative.

The behavior is undefined if {{tt|binary_op}} modifies any element or invalidates any iterator in {{math|[first; last]}}, including the end iterator.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to apply the algorithm to}}
{{par | init | the initial value of the generalized sum}}
{{par | policy | the execution policy to use. See [[cpp/algorithm/execution_policy_tag_t|execution policy]] for details.}}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in unspecified order to the result of dereferencing the input iterators, the results of other {{tt|binary_op}} and {{tt|init}}.}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | T | MoveConstructible|notes=and {{tt|binary_op(init, *first)}}, {{tt|binary_op(*first, init)}}, {{tt|binary_op(init, init)}}, and {{tt|binary_op(*first, *first)}} must be convertible to {{tt|T}}.}}
{{par end}}

===Return value===
Generalized sum of {{tt|init}} and {{tt|*first}}, {{tt|*(first+1)}}, ... {{tt|*(last-1)}} over {{tt|binary_op}},

where generalized sum {{math|GSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GSUM(op, b{{su|b=1}}, ..., b{{su|b=K}}), GSUM(op, b{{su|b=M}}, ..., b{{su|b=N}}))}} where
:* {{math|b{{su|b=1}}, ..., b{{su|b=N}}}} may be any permutation of {{math|a1, ..., aN}} and
:* {{math|1 &lt; K+1 {{=}} M ≤ N}}

in other words, {{tt|reduce}} behaves like {{lc|std::accumulate}} except the elements of the range may be grouped and rearranged in arbitrary order

===Complexity===
{{math|O(last - first)}} applications of {{tt|binary_op}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior}}

===Notes===
If the range is empty, {{tt|init}} is returned, unmodified

===Example===
{{example|side-by-side comparison between reduce and {{lc|std::accumulate}}:
|code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;vector&gt;
#include &lt;numeric&gt;
#include &lt;execution&gt;

int main()
{
    std::vector&lt;double&gt; v(10'000'007, 0.5);

    {
        auto t1 = std::chrono::high_resolution_clock::now();
        double result = std::accumulate(v.begin(), v.end(), 0.0);
        auto t2 = std::chrono::high_resolution_clock::now();
        std::chrono::duration&lt;double, std::milli&gt; ms = t2 - t1;
        std::cout &lt;&lt; std::fixed &lt;&lt; &quot;std::accumulate result &quot; &lt;&lt; result
                  &lt;&lt; &quot; took &quot; &lt;&lt; ms.count() &lt;&lt; &quot; ms\n&quot;;
    }

    {
        auto t1 = std::chrono::high_resolution_clock::now();
        double result = std::reduce(std::execution::par, v.begin(), v.end());
        auto t2 = std::chrono::high_resolution_clock::now();
        std::chrono::duration&lt;double, std::milli&gt; ms = t2 - t1;
        std::cout &lt;&lt; &quot;std::reduce result &quot;
                  &lt;&lt; result &lt;&lt; &quot; took &quot; &lt;&lt; ms.count() &lt;&lt; &quot; ms\n&quot;;
    }
}
|p=true
|output=
std::accumulate result 5000003.50000 took 12.7365 ms
std::reduce result 5000003.50000 took 5.06423 ms
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/algorithm/dsc transform_reduce}}
{{dsc end}}

[[de:cpp/algorithm/reduce]]
[[es:cpp/algorithm/reduce]]
[[fr:cpp/algorithm/reduce]]
[[it:cpp/algorithm/reduce]]
[[ja:cpp/algorithm/reduce]]
[[pt:cpp/algorithm/reduce]]
[[ru:cpp/algorithm/reduce]]
[[zh:cpp/algorithm/reduce]]</text>
      <sha1>38s3deoqoibf5vakag166wdlkq3ufjc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/remove</title>
    <ns>0</ns>
    <id>769</id>
    <revision>
      <id>89865</id>
      <parentid>85910</parentid>
      <timestamp>2017-01-27T05:20:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="5349">{{cpp/title|remove | remove_if}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt, class T &gt;
ForwardIt remove( ForwardIt first, ForwardIt last, const T&amp; value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
ForwardIt remove( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, const T&amp; value );}}
{{dcl | since= | num= 3 |1= 
template&lt; class ForwardIt, class UnaryPredicate &gt;
ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate &gt;
ForwardIt remove_if( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, UnaryPredicate p );}}
{{dcl end}}

Removes all elements satisfying specific criteria from the range {{tt|[first, last)}} and returns a past-the-end iterator for the new end of the range. 

@1@ Removes all elements that are equal to {{tt|value}}.
@3@ Removes all elements for which predicate {{tt|p}} returns {{c|true}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

Removing is done by shifting (by means of move assignment) the elements in the range in such a way that the elements that are not to be removed appear in the beginning of the range. Relative order of the elements that remain is preserved and the ''physical'' size of the container is unchanged. Iterators pointing to an element between the new ''logical'' end and the ''physical'' end of the range are still dereferenceable, but the elements themselves have unspecified values (as per {{concept|MoveAssignable}} post-condition). A call to {{tt|remove}} is typically followed by a call to a container's {{tt|erase}} method, which erases the unspecified values and reduces the ''physical'' size of the container to match its new ''logical'' size.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to process}}
{{par | value | the value of elements to remove}}
{{par exec pol}}
{{par pred1 | p | if the element should be removed | p1=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept deref | ForwardIt | MoveAssignable}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
Past-the-end iterator for the new range of values (if this is not {{tt|end}}, then it points to an unspecified value, and so do iterators to any values between this iterator and {{tt|end}}) 

===Complexity===
Exactly {{c|std::distance(first, last)}} applications of the predicate.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
The similarly-named container member functions {{l2tt|cpp/container/list/remove}}, {{l2tt|cpp/container/list/remove|remove_if}}, {{l2tt|cpp/container/forward_list/remove}}, and {{l2tt|cpp/container/forward_list/remove|remove_if}} erase the removed elements.

These algorithms cannot be used with associative containers such as {{lc|std::set}} and {{lc|std::map}} because ForwardIt does not dereference to a MoveAssignable type (the keys in these containers are not modifiable)

The standard library also defines an overload of {{tt|std::remove}} taking {{tt|const char*}}, used to delete files: {{ltt|cpp/io/c/remove|std::remove}}.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class ForwardIt, class T &gt;
ForwardIt remove(ForwardIt first, ForwardIt last, const T&amp; value)
{
    first = std::find(first, last, value);
    if (first != last)
        for(ForwardIt i = first; ++i != last; )
            if (!(*i == value))
                *first++ = std::move(*i);
    return first;
}
 | 2=
template&lt;class ForwardIt, class UnaryPredicate&gt;
ForwardIt remove_if(ForwardIt first, ForwardIt last, UnaryPredicate p)
{
    first = std::find_if(first, last, p);
    if (first != last)
        for(ForwardIt i = first; ++i != last; )
            if (!p(*i))
                *first++ = std::move(*i);
    return first;
}
}}

===Examples===
{{example
 | The following code removes all spaces from a string by shifting all non-space characters to the left and then erasing the extra. This is an example of [[enwiki:Erase-remove_idiom|erase-remove idiom]].
 | code=
#include &lt;algorithm&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;cctype&gt;

int main()
{
    std::string str1 = &quot;Text with some   spaces&quot;;
    str1.erase(std::remove(str1.begin(), str1.end(), ' '),
               str1.end());
    std::cout &lt;&lt; str1 &lt;&lt; '\n';

    std::string str2 = &quot;Text\n with\tsome \t  whitespaces\n\n&quot;;
    str2.erase(std::remove_if(str2.begin(), 
                              str2.end(),
                              [](char x){return std::isspace(x);}),
               str2.end());
    std::cout &lt;&lt; str2 &lt;&lt; '\n';
}
 | output=
Textwithsomespaces
Textwithsomewhitespaces
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc remove_copy}}
{{dsc inc | cpp/algorithm/dsc unique}}


{{dsc end}}

[[de:cpp/algorithm/remove]]
[[es:cpp/algorithm/remove]]
[[fr:cpp/algorithm/remove]]
[[it:cpp/algorithm/remove]]
[[ja:cpp/algorithm/remove]]
[[pt:cpp/algorithm/remove]]
[[ru:cpp/algorithm/remove]]
[[zh:cpp/algorithm/remove]]</text>
      <sha1>42frtbqrm1x0x0zr47hvge8b613rylf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/remove copy</title>
    <ns>0</ns>
    <id>770</id>
    <revision>
      <id>90690</id>
      <parentid>90641</parentid>
      <timestamp>2017-03-07T20:55:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0574r1 complexity note</comment>
      <text xml:space="preserve" bytes="3977">{{cpp/title|remove_copy | remove_copy_if}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class OutputIt, class T &gt;
OutputIt remove_copy( InputIt first, InputIt last, OutputIt d_first,
                      const T&amp; value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class T &gt;
ForwardIt2 remove_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                        ForwardIt2 d_first, const T&amp; value );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt, class OutputIt, class UnaryPredicate &gt;
OutputIt remove_copy_if( InputIt first, InputIt last, OutputIt d_first,
                         UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class UnaryPredicate &gt;
ForwardIt2 remove_copy_if( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                           ForwardIt2 d_first, UnaryPredicate p );}}
{{dcl end}}

Copies elements from the range {{tt|[first, last)}}, to another range beginning at {{tt|d_first}}, omitting the elements which satisfy specific criteria. Source and destination ranges cannot overlap.

@1@ Ignores all elements that are equal to {{tt|value}}.
@3@ Ignores all elements for which predicate {{tt|p}} returns {{c|true}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to copy}}
{{par | d_first | the beginning of the destination range. }}
{{par | value | the value of the elements not to copy}}
{{par exec pol}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
Iterator to the element past the last element copied.

===Complexity===
Exactly {{tt|last - first}} applications of the predicate.

For the overloads with an ExecutionPolicy, there may be a performance cost if {{tt|ForwardIt1}}'s value_type is not {{concept|MoveConstructible}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class OutputIt, class T&gt;
OutputIt remove_copy(InputIt first, InputIt last,
                     OutputIt d_first, const T&amp; value)
{
    for (; first != last; ++first) {
        if (!(*first == value)) {
            *d_first++ = *first;
        }
    }
    return d_first;
}
 | 2=
template&lt;class InputIt, class OutputIt, class UnaryPredicate&gt;
OutputIt remove_copy_if(InputIt first, InputIt last,
                        OutputIt d_first, UnaryPredicate p)
{
    for (; first != last; ++first) {
        if (!p(*first)) {
            *d_first++ = *first;
        }
    }
    return d_first;
}
}}

===Example===
{{example
 | The following code outputs a string while erasing the spaces on the fly.
 | code=
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
int main()
{
    std::string str = &quot;Text with some   spaces&quot;;
    std::cout &lt;&lt; &quot;before: &quot; &lt;&lt; str &lt;&lt; &quot;\n&quot;;

    std::cout &lt;&lt; &quot;after:  &quot;;
    std::remove_copy(str.begin(), str.end(),
                     std::ostream_iterator&lt;char&gt;(std::cout), ' ');
    std::cout &lt;&lt; '\n';
}
 | output=
before: Text with some   spaces
after:  Textwithsomespaces
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc remove}}
{{dsc inc | cpp/algorithm/dsc copy}}


{{dsc end}}

[[de:cpp/algorithm/remove copy]]
[[es:cpp/algorithm/remove copy]]
[[fr:cpp/algorithm/remove copy]]
[[it:cpp/algorithm/remove copy]]
[[ja:cpp/algorithm/remove copy]]
[[pt:cpp/algorithm/remove copy]]
[[ru:cpp/algorithm/remove copy]]
[[zh:cpp/algorithm/remove copy]]</text>
      <sha1>lxyd7hxlmav8zp4yxpxsw5ch6klbqlv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/remove copy if</title>
    <ns>0</ns>
    <id>2537</id>
    <redirect title="cpp/algorithm/remove copy" />
    <revision>
      <id>9306</id>
      <timestamp>2011-08-21T16:03:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/algorithm/remove_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/remove if</title>
    <ns>0</ns>
    <id>2536</id>
    <redirect title="cpp/algorithm/remove" />
    <revision>
      <id>9305</id>
      <parentid>9304</parentid>
      <timestamp>2011-08-21T16:02:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/algorithm/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/replace</title>
    <ns>0</ns>
    <id>771</id>
    <revision>
      <id>89860</id>
      <parentid>84686</parentid>
      <timestamp>2017-01-27T05:20:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="3663">{{cpp/title|replace | replace_if}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt, class T &gt;
void replace( ForwardIt first, ForwardIt last,
              const T&amp; old_value, const T&amp; new_value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
void replace( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last,
              const T&amp; old_value, const T&amp; new_value );}}
{{dcl | since= | num= 3 |1= 
template&lt; class ForwardIt, class UnaryPredicate, class T &gt;
void replace_if( ForwardIt first, ForwardIt last,
                 UnaryPredicate p, const T&amp; new_value );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPredicate, class T &gt;
void replace_if( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last,
                 UnaryPredicate p, const T&amp; new_value );}}
{{dcl end}}

Replaces all elements satisfying specific criteria with {{tt|new_value}} in the range {{tt|[first, last)}}. 

@1@ Replaces all elements that are equal to {{tt|old_value}}.
@3@ Replaces  all elements for which predicate {{tt|p}} returns {{c|true}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to process}}
{{par | old_value | the value of elements to replace}}
{{par exec pol}}
{{par pred1 | p | if the element value should be replaced | p1=ForwardIt}}
{{par | new_value | the value to use as replacement}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
(none)

===Complexity===
Exactly {{tt|last - first}} applications of the predicate.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt, class T&gt;
void replace(ForwardIt first, ForwardIt last,
             const T&amp; old_value, const T&amp; new_value)
{
    for (; first != last; ++first) {
        if (*first == old_value) {
            *first = new_value;
        }
    }
}
 | 2=
template&lt;class ForwardIt, class UnaryPredicate, class T&gt;
void replace_if(ForwardIt first, ForwardIt last,
                UnaryPredicate p, const T&amp; new_value)
{
    for (; first != last; ++first) {
        if(p(*first)) {
            *first = new_value;
        }
    }
}
}}

===Example===
{{example
 | The following code at first replaces all occurrences of {{c|8}} with {{c|88}} in a vector of integers. Then it replaces all values less than {{c|5}} with 55.
 | code=
#include &lt;algorithm&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;
#include &lt;functional&gt;

int main()
{
    std::array&lt;int, 10&gt; s{5, 7, 4, 2, 8, 6, 1, 9, 0, 3};

    std::replace(s.begin(), s.end(), 8, 88);

    for (int a : s) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';

    std::replace_if(s.begin(), s.end(), 
                    std::bind(std::less&lt;int&gt;(), std::placeholders::_1, 5), 55);
    for (int a : s) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';
}
 | output=
5 7 4 2 88 6 1 9 0 3
5 7 55 55 88 6 55 9 55 55
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc replace_copy}}


{{dsc end}}

[[de:cpp/algorithm/replace]]
[[es:cpp/algorithm/replace]]
[[fr:cpp/algorithm/replace]]
[[it:cpp/algorithm/replace]]
[[ja:cpp/algorithm/replace]]
[[pt:cpp/algorithm/replace]]
[[ru:cpp/algorithm/replace]]
[[zh:cpp/algorithm/replace]]</text>
      <sha1>bq01mpu5xm7tr3mgijfjfyhrjtjlex0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/replace copy</title>
    <ns>0</ns>
    <id>772</id>
    <revision>
      <id>90638</id>
      <parentid>89844</parentid>
      <timestamp>2017-03-06T18:41:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="4056">{{cpp/title|replace_copy|replace_copy_if}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class OutputIt, class T &gt;
OutputIt replace_copy( InputIt first, InputIt last, OutputIt d_first,
                       const T&amp; old_value, const T&amp; new_value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class T &gt;
ForwardIt2 replace_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                         ForwardIt2 d_first, const T&amp; old_value, const T&amp; new_value );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt, class OutputIt, class UnaryPredicate, class T &gt;
OutputIt replace_copy_if( InputIt first, InputIt last, OutputIt d_first,
                          UnaryPredicate p, const T&amp; new_value );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class UnaryPredicate, class T &gt;
ForwardIt2 replace_copy_if( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                            ForwardIt2 d_first, UnaryPredicate p, const T&amp; new_value );}}
{{dcl end}}

Copies the all elements from the range {{tt|[first, last)}} to another range beginning at {{tt|d_first}} replacing all elements satisfying specific criteria with {{tt|new_value}}. The source and destination ranges cannot overlap.

@1@ Replaces all elements that are equal to {{tt|old_value}}.
@3@ Replaces  all elements for which predicate {{tt|p}} returns {{c|true}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to copy}}
{{par | d_first | the beginning of the destination range}}
{{par | old_value | the value of elements to replace}}
{{par exec pol}}
{{par pred1 | p | if the element value should be replaced | p1=InputIt}}
{{par | new_value | the value to use as replacement}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par end}}

===Return value===
Iterator to the element past the last element copied.

===Complexity===
Exactly {{tt|last - first}} applications of the predicate.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class OutputIt, class T&gt;
OutputIt replace_copy(InputIt first, InputIt last, OutputIt d_first,
                      const T&amp; old_value, const T&amp; new_value)
{
    for (; first != last; ++first) {
        *d_first++ = (*first == old_value) ? new_value : *first;
    }
    return d_first;
}
 | 2=
template&lt;class InputIt, class OutputIt, 
         class UnaryPredicate, class T&gt;
OutputIt replace_copy_if(InputIt first, InputIt last, OutputIt d_first,
                         UnaryPredicate p, const T&amp; new_value)
{
    for (; first != last; ++first) {
        *d_first++ = p( *first ) ? new_value : *first;
    }
    return d_first;
}
}}

===Example===
{{example
 | The following copy prints a vector, replacing all values over 5 with 99 on the fly.
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;functional&gt;

int main()
{
    std::vector&lt;int&gt; v{5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
    std::replace_copy_if(v.begin(), v.end(),
                         std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;),
                         [](int n){return n &gt; 5;}, 99);
    std::cout &lt;&lt; '\n';
}
 | output=
5 99 4 2 99 99 1 99 0 3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc remove}}


{{dsc end}}

[[de:cpp/algorithm/replace copy]]
[[es:cpp/algorithm/replace copy]]
[[fr:cpp/algorithm/replace copy]]
[[it:cpp/algorithm/replace copy]]
[[ja:cpp/algorithm/replace copy]]
[[pt:cpp/algorithm/replace copy]]
[[ru:cpp/algorithm/replace copy]]
[[zh:cpp/algorithm/replace copy]]</text>
      <sha1>km81ixbcj5co6s7mw7ebnluf6646iyh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/replace copy if</title>
    <ns>0</ns>
    <id>2538</id>
    <redirect title="cpp/algorithm/replace copy" />
    <revision>
      <id>9307</id>
      <timestamp>2011-08-21T16:04:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/algorithm/replace_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/replace if</title>
    <ns>0</ns>
    <id>2539</id>
    <redirect title="cpp/algorithm/replace" />
    <revision>
      <id>9309</id>
      <parentid>9308</parentid>
      <timestamp>2011-08-21T16:04:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/algorithm/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/reverse</title>
    <ns>0</ns>
    <id>773</id>
    <revision>
      <id>89846</id>
      <parentid>88188</parentid>
      <timestamp>2017-01-27T05:19:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2123">{{cpp/title|reverse}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class BidirIt &gt;
void reverse( BidirIt first, BidirIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class BidirIt &gt;
void reverse( ExecutionPolicy&amp;&amp; policy, BidirIt first, BidirIt last );}}
{{dcl end}}

@1@Reverses the order of the elements in the range {{tt|[first, last)}}
@@Behaves as if applying {{lc|std::iter_swap}} to every pair of iterators {{tt|first+i, (last-i) - 1}} for each non-negative {{tt|i &lt; (last-first)/2}}

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to reverse}}
{{par exec pol}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator | ValueSwappable}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class BidirIt&gt;
void reverse(BidirIt first, BidirIt last)
{
    while ((first != last) &amp;&amp; (first != --last)) {
        std::iter_swap(first++, last);
    }
}
}}

===Example===
{{example
 |
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
 
int main()
{
    std::vector&lt;int&gt; v({1,2,3});
    std::reverse(std::begin(v), std::end(v));
    std::cout &lt;&lt; v[0] &lt;&lt; v[1] &lt;&lt; v[2] &lt;&lt; '\n';

    int a[] = {4, 5, 6, 7};
    std::reverse(std::begin(a), std::end(a));
    std::cout &lt;&lt; a[0] &lt;&lt; a[1] &lt;&lt; a[2] &lt;&lt; a[3] &lt;&lt; '\n';
}
 | output=
321
7654
}}

===Complexity===

linear in the distance between {{tt|first}} and {{tt|last}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc reverse_copy}}

{{dsc end}}

[[de:cpp/algorithm/reverse]]
[[es:cpp/algorithm/reverse]]
[[fr:cpp/algorithm/reverse]]
[[it:cpp/algorithm/reverse]]
[[ja:cpp/algorithm/reverse]]
[[pt:cpp/algorithm/reverse]]
[[ru:cpp/algorithm/reverse]]
[[zh:cpp/algorithm/reverse]]</text>
      <sha1>fhlj8byg9qpflaz8rnmni4pf5jl1s8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/reverse copy</title>
    <ns>0</ns>
    <id>774</id>
    <revision>
      <id>90643</id>
      <parentid>89837</parentid>
      <timestamp>2017-03-06T18:50:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="2819">{{cpp/title|reverse_copy}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class BidirIt, class OutputIt &gt;
OutputIt reverse_copy( BidirIt first, BidirIt last, OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class BidirIt, class ForwardIt &gt;
ForwardIt reverse_copy( ExecutionPolicy&amp;&amp; policy, BidirIt first, BidirIt last, ForwardIt d_first );}}
{{dcl end}}

@1@ Copies the elements from the range {{tt|[first, last)}} to another range beginning at {{tt|d_first}} in such a way that the elements in the new range are in reverse order. 

@@Behaves as if by executing the assignment {{c|*(d_first + (last - first) - 1 - i) {{=}} *(first + i)}} once for each non-negative {{tt|i &lt; (last - first)}}

@@If the source and destination ranges (that is, {{tt|[first, last)}} and {{tt|[d_first, d_first+(last-first))}} respectively) overlap, the behavior is undefined.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of elements to copy}}
{{par | d_first | the beginning of the destination range}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
Output iterator to the element past the last element copied.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class BidirIt, class OutputIt&gt;
OutputIt reverse_copy(BidirIt first, BidirIt last, OutputIt d_first)
{
    while (first != last) {
        *(d_first++) = *(--last);
    }
    return d_first;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

int main()
{
    std::vector&lt;int&gt; v({1,2,3});
    for (const auto&amp; value : v) {
        std::cout &lt;&lt; value &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';

    std::vector&lt;int&gt; destination(3);
    std::reverse_copy(std::begin(v), std::end(v), std::begin(destination));
    for (const auto&amp; value : destination) {
        std::cout &lt;&lt; value &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; '\n';
}

 | output=
1 2 3 
3 2 1 
}}

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc reverse}}

{{dsc end}}

[[de:cpp/algorithm/reverse copy]]
[[es:cpp/algorithm/reverse copy]]
[[fr:cpp/algorithm/reverse copy]]
[[it:cpp/algorithm/reverse copy]]
[[ja:cpp/algorithm/reverse copy]]
[[pt:cpp/algorithm/reverse copy]]
[[ru:cpp/algorithm/reverse copy]]
[[zh:cpp/algorithm/reverse copy]]</text>
      <sha1>5snqh096qab0noc2pge83f05v5m7vt1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/rotate</title>
    <ns>0</ns>
    <id>775</id>
    <revision>
      <id>89853</id>
      <parentid>89242</parentid>
      <timestamp>2017-01-27T05:20:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="4060">{{cpp/title|rotate}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl rev begin|num=1}}
{{dcl | until=c++11 |
template&lt; class ForwardIt &gt;
void rotate( ForwardIt first, ForwardIt n_first, ForwardIt last );
}}
{{dcl | since=c++11 | 1= 
template&lt; class ForwardIt &gt;
ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt rotate( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt n_first, ForwardIt last );}}
{{dcl end}}

@1@Performs a left rotation on a range of elements.

@@Specifically, {{tt|std::rotate}} swaps the elements in the range {{tt|[first, last)}} in such a way that the element {{tt|n_first}} becomes the first element of the new range and {{tt|n_first - 1}} becomes the last element. 

@@A precondition of this function is that {{tt|[first, n_first)}} and {{tt|[n_first, last)}} are valid ranges.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first | the beginning of the original range}}
{{par | n_first | the element that should appear at the beginning of the rotated range}}
{{par | last | the end of the original range}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator | ValueSwappable}}
{{par req concept deref | ForwardIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
{{rev begin}}
{{rev | until=c++11 |
(none)
}}
{{rev | since=c++11 |
The iterator equal to {{tt|first + (last - n_first)}}
}}
{{rev end}}

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template &lt;class ForwardIt&gt;
ForwardIt rotate(ForwardIt first, ForwardIt n_first, ForwardIt last)
{
    if(first == n_first) return last;
    if(n_first == last) return first;

    ForwardIt next = n_first;

    do {
        std::iter_swap(first++, next++);
        if (first == n_first) n_first = next;
    }
    while (next != last);

    ForwardIt ret = first;

    for(next = n_first; next != last; ) {
        std::iter_swap(first++, next++);
        if(first == n_first) n_first = next;
        else if(next == last) next = n_first;
    }

    return ret;
}
}}

===Example===
{{example
 | {{tt|std::rotate}} is a common building block in many algorithms. This example demonstrates insertion sort: 
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
 
int main()
{
    std::vector&lt;int&gt; v{2, 4, 2, 0, 5, 10, 7, 3, 7, 1}; 
 
    std::cout &lt;&lt; &quot;before sort:      &quot;;
    for (int n: v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    // insertion sort
    for (auto i = v.begin(); i != v.end(); ++i) {
        std::rotate(std::upper_bound(v.begin(), i, *i), i, i+1);
    }
 
    std::cout &lt;&lt; &quot;after sort:       &quot;;
    for (int n: v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    // simple rotation to the left
    std::rotate(v.begin(), v.begin() + 1, v.end());

    std::cout &lt;&lt; &quot;simple rotate left  : &quot;;
    for (int n: v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    // simple rotation to the right
    std::rotate(v.rbegin(), v.rbegin() + 1, v.rend());

    std::cout &lt;&lt; &quot;simple rotate right : &quot;;
    for (int n: v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
 
}
 | output=
before sort:      2 4 2 0 5 10 7 3 7 1 
after sort:       0 1 2 2 3 4 5 7 7 10 
simple rotate left : 1 2 2 3 4 5 7 7 10 0
simple rotate right: 0 1 2 2 3 4 5 7 7 10 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc rotate_copy}}

{{dsc end}}

[[de:cpp/algorithm/rotate]]
[[es:cpp/algorithm/rotate]]
[[fr:cpp/algorithm/rotate]]
[[it:cpp/algorithm/rotate]]
[[ja:cpp/algorithm/rotate]]
[[pt:cpp/algorithm/rotate]]
[[ru:cpp/algorithm/rotate]]
[[zh:cpp/algorithm/rotate]]</text>
      <sha1>bukfyone4jvp3hg1asodd6s7i0pw1gv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/rotate copy</title>
    <ns>0</ns>
    <id>776</id>
    <revision>
      <id>90644</id>
      <parentid>89814</parentid>
      <timestamp>2017-03-06T18:52:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="2765">{{cpp/title|rotate_copy}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt, class OutputIt &gt;
OutputIt rotate_copy( ForwardIt first, ForwardIt n_first,
                      ForwardIt last, OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 rotate_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 n_first,
                      ForwardIt1 last, ForwardIt2 d_first );}}
{{dcl end}}

@1@ Copies the elements from the range {{tt|[first, last)}}, to another range beginning at {{tt|d_first}} in such a way, that the element {{tt|n_first}} becomes the first element of the new range and {{tt|n_first - 1}} becomes the last element. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to copy}}
{{par | n_first | an iterator to an element in {{tt|[first, last)}} that should appear at the beginning of the new range}}
{{par | d_first | beginning of the destination range}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt, ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Return value===
Output iterator to the element past the last element copied.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt, class OutputIt&gt;
OutputIt rotate_copy(ForwardIt first, ForwardIt n_first,
                           ForwardIt last, OutputIt d_first)
{
    d_first = std::copy(n_first, last, d_first);
    return std::copy(first, n_first, d_first);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;int&gt; src = {1, 2, 3, 4, 5}; 
    auto pivot = std::find(src.begin(), src.end(), 3); 
    std::vector&lt;int&gt; dest(src.size());                                          

    std::rotate_copy(src.begin(), pivot, src.end(), dest.begin());

    for (const auto &amp;i : dest) {
        std::cout &lt;&lt; i &lt;&lt; ' ';
    }   
    std::cout &lt;&lt; '\n';
}
 | output=
3 4 5 1 2 
}}

===Complexity===

linear in the distance between {{tt|first}} and {{tt|last}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc rotate}}

{{dsc end}}

[[de:cpp/algorithm/rotate copy]]
[[es:cpp/algorithm/rotate copy]]
[[fr:cpp/algorithm/rotate copy]]
[[it:cpp/algorithm/rotate copy]]
[[ja:cpp/algorithm/rotate copy]]
[[pt:cpp/algorithm/rotate copy]]
[[ru:cpp/algorithm/rotate copy]]
[[zh:cpp/algorithm/rotate copy]]</text>
      <sha1>fu8x2kqvmfr6edil1f90lau07x3h6u4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/sample</title>
    <ns>0</ns>
    <id>14804</id>
    <revision>
      <id>87099</id>
      <parentid>86197</parentid>
      <timestamp>2016-07-26T20:49:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2716</comment>
      <text xml:space="preserve" bytes="2739">{{cpp/title|sample}}
{{cpp/algorithm/navbar}}

{{dcl begin}}
{{dcl header | algorithm }}
{{dcl |since=c++17 |
template&lt; class PopulationIterator, class SampleIterator,
          class Distance, class UniformRandomBitGenerator &gt;
SampleIterator sample( PopulationIterator first, PopulationIterator last,
                       SampleIterator out, Distance n, 
                       UniformRandomBitGenerator&amp;&amp; g);
}}
{{dcl end}}

Selects {{tt|n}} elements from the sequence {{math|[first; last)}} such that each possible sample has equal probability of appearance, and writes those selected elements into the output iterator {{tt|out}}. Random numbers are generated using the random number generator {{tt|g}}.

If {{tt|n}} is greater than the number of elements in the sequence, selects {{c|last-first}} elements.

The algorithm is stable only if {{tt|PopulationIterator}} meets the requirements of {{concept|ForwardIterator}}

===Parameters===
{{par begin}}
{{par | first, last | pair of iterators forming the range from which to make the sampling (the population) }}
{{par | out | the output iterator where the samples are written. Must not be in the {{math|[first;last)}} range }}
{{par | n | number of samples to make}}
{{par | g | the random number generator used as the source of randomness }}
{{par req concept | PopulationIterator | InputIterator}}
{{par req concept | SampleIterator | OutputIterator}}
{{par req | {{tt|SampleIterator}} must also meet the requirements of {{concept|RandomAccessIterator}} if {{tt|PopulationIterator}} doesn't meet {{concept|ForwardIterator}} }}
{{par req | {{tt|PopulationIterator}}'s value type must be writeable to {{tt|out}}}}
{{par req | {{tt|Distance}} must be an integer type}}
{{par req | {{c|std::remove_reference_t&lt;UniformRandomBitGenerator&gt;}} must meet the requirements of {{concept|UniformRandomBitGenerator}} and its return type must be convertible to {{tt|Distance}}}}
{{par end}}

===Return value===
Returns a copy of {{tt|out}} after the last sample that was output, that is, end of the sample range.

===Complexity===
Linear in {{c|std::distance(first,last)}}

===Notes===
This function may implement selection sampling or reservoir sampling.

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;random&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
 
int main()
{
    std::string in = &quot;abcdefgh&quot;, out;
    std::sample(in.begin(), in.end(), std::back_inserter(out),
                5, std::mt19937{std::random_device{}()});
    std::cout &lt;&lt; &quot;five random letters out of &quot; &lt;&lt; in &lt;&lt; &quot; : &quot; &lt;&lt; out &lt;&lt; '\n';
}
|p=true
 |output=
five random letters out of abcdefgh : cdefg
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc random_shuffle}}
{{dsc end}}</text>
      <sha1>3e9ea4vmd40d40njmq2m2f0sv6myybr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/search</title>
    <ns>0</ns>
    <id>777</id>
    <revision>
      <id>89838</id>
      <parentid>84657</parentid>
      <timestamp>2017-01-27T05:19:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="6837">{{cpp/title|search}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 search( ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 search( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
ForwardIt1 search( ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last, BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
ForwardIt1 search( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last, BinaryPredicate p );}}
{{dcl | num=5 | since=c++17 |
template&lt;class ForwardIterator, class Searcher&gt;
ForwardIterator search( ForwardIterator first, ForwardIterator last,
                        const Searcher&amp; searcher );
}}
{{dcl end}}

@1-4@ Searches for the first occurrence of the subsequence of elements {{tt|[s_first, s_last)}} in the range {{tt|[first, last - (s_last - s_first))}}.
:@1@ Elements are compared using {{tt|operator{{==}}}}.
:@3@ Elements are compared using the given binary predicate {{tt|p}}.
:@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
@5@ Searches the sequence {{math|[first, last)}} for the pattern specified in the constructor of {{tt|searcher}}. Effectively executes {{c|return searcher(first, last).first;}}.  {{concept|Searcher}} need not be {{concept|CopyConstructible}}. 

{{rev begin}}
{{rev|since=c++17|
The standard library provides the following searchers:
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc default_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_horspool_searcher }}
{{dsc end}}
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | s_first, s_last | the range of elements to search for}}
{{par exec pol}}
{{par | searcher | the searcher encapsulating the search algorithm and the pattern to look for}}
{{par pred2 eq | p | p1=ForwardIt1 | p2=ForwardIt2}}
{{par hreq}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | Searcher | Searcher}}
{{par end}}

===Return value===
@1-4@ Iterator to the beginning of first subsequence {{tt|[s_first, s_last)}} in the range {{tt|[first, last - (s_last - s_first))}}. If no such subsequence is found, {{tt|last}} is returned.&lt;br&gt;
If {{tt|[s_first, s_last)}} is empty, {{tt|first}} is returned. {{mark since c++11}}

@5@ Returns the result of {{tt|searcher.operator()}}, that is, an iterator to the location at which the substring is found or a copy of {{tt|last}} if it was not found.

===Complexity===
@1-4@ At most {{tt|S*N}} comparisons where {{c|S {{=}} std::distance(s_first, s_last)}} and {{c|N {{=}} std::distance(first, last)}}.
@5@ Depends on the searcher

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===

{{eq fun | 1=
template&lt;class ForwardIt1, class ForwardIt2&gt;
ForwardIt1 search(ForwardIt1 first, ForwardIt1 last,
                        ForwardIt2 s_first, ForwardIt2 s_last)
{
    for (; ; ++first) {
        ForwardIt1 it = first;
        for (ForwardIt2 s_it = s_first; ; ++it, ++s_it) {
            if (s_it == s_last) {
                return first;
            }
            if (it == last) {
                return last;
            }
            if (!(*it == *s_it)) {
                break;
            }
        }
    }
}
 | 2=
template&lt;class ForwardIt1, class ForwardIt2, class BinaryPredicate&gt;
ForwardIt1 search(ForwardIt1 first, ForwardIt1 last,
                        ForwardIt2 s_first, ForwardIt2 s_last, 
                        BinaryPredicate p)
{
    for (; ; ++first) {
        ForwardIt1 it = first;
        for (ForwardIt2 s_it = s_first; ; ++it, ++s_it) {
            if (s_it == s_last) {
                return first;
            }
            if (it == last) {
                return last;
            }
            if (!p(*it, *s_it)) {
                break;
            }
        }
    }
}
}}

===Example===
{{example|
|code=
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

template&lt;typename Container&gt;
bool in_quote(const Container&amp; cont, const std::string&amp; s)
{
    return std::search(cont.begin(), cont.end(), s.begin(), s.end()) != cont.end();
}

int main()
{
    std::string str = &quot;why waste time learning, when ignorance is instantaneous?&quot;;
    // str.find() can be used as well
    std::cout &lt;&lt; std::boolalpha &lt;&lt; in_quote(str, &quot;learning&quot;) &lt;&lt; '\n'
                                &lt;&lt; in_quote(str, &quot;lemming&quot;)  &lt;&lt; '\n';

    std::vector&lt;char&gt; vec(str.begin(), str.end());
    std::cout &lt;&lt; std::boolalpha &lt;&lt; in_quote(vec, &quot;learning&quot;) &lt;&lt; '\n'
                                &lt;&lt; in_quote(vec, &quot;lemming&quot;)  &lt;&lt; '\n';

    // The C++17 overload demo:
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::search(in.begin(), in.end(),
                   std::make_boyer_moore_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
true
false
true
false
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc find_end}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc equal}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc inc | cpp/algorithm/dsc lexicographical_compare}}
{{dsc inc | cpp/algorithm/dsc mismatch}}
{{dsc inc | cpp/algorithm/dsc search_n}}
{{dsc inc | cpp/utility/functional/dsc default_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_horspool_searcher }}

{{dsc end}}

[[de:cpp/algorithm/search]]
[[es:cpp/algorithm/search]]
[[fr:cpp/algorithm/search]]
[[it:cpp/algorithm/search]]
[[ja:cpp/algorithm/search]]
[[pt:cpp/algorithm/search]]
[[ru:cpp/algorithm/search]]
[[zh:cpp/algorithm/search]]</text>
      <sha1>3gf3vigpsdkqhqhj36u5hdt2kkvaiyk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/search n</title>
    <ns>0</ns>
    <id>778</id>
    <revision>
      <id>89832</id>
      <parentid>84675</parentid>
      <timestamp>2017-01-27T05:18:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="4803">{{cpp/title|search_n}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt, class Size, class T &gt;
ForwardIt search_n( ForwardIt first, ForwardIt last, Size count, const T&amp; value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Size, class T &gt;
ForwardIt search_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, Size count, const T&amp; value );}}
{{dcl | since= | num= 3 |1= 
template&lt; class ForwardIt, class Size, class T, class BinaryPredicate &gt;
ForwardIt search_n( ForwardIt first, ForwardIt last, Size count, const T&amp; value, 
                     BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Size, class T, class BinaryPredicate &gt;
ForwardIt search_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, Size count, const T&amp; value, 
                     BinaryPredicate p );}}
{{dcl end}}

Searches the range {{tt|[first, last)}} for the first sequence of count identical elements, each equal to the given value value. 

@1@ Elements are compared using {{tt|operator{{==}}}}.
@3@ Elements are compared using the given binary predicate {{tt|p}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | count | the length of the sequence to search for}}
{{par | value | the value of the elements to search for}}
{{par exec pol}}
{{par pred2 eq | p | p1=ForwardIt | t2=T}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
Iterator to the beginning of the found sequence in the range {{tt|[first, last)}}. If no such sequence is found, {{tt|last}} is returned.

===Complexity===
At most {{tt|last - first}} applications of the predicate.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt, class Size, class T&gt;
ForwardIt search_n(ForwardIt first, ForwardIt last,
                    Size count, const T&amp; value)
{
    for(; first != last; ++first) {
        if (!(*first == value)) {
            continue;
        }

        ForwardIt candidate = first;
        Size cur_count = 0;

        while (true) {
            ++cur_count;
            if (cur_count == count) {
                // success
                return candidate;
            }
            ++first;
            if (first == last) {
                // exhausted the list
                return last;
            }
            if (!(*first == value)) {
                // too few in a row
                break;
            }
        }
    }
    return last;
}
 | 2=
template&lt;class ForwardIt, class Size, class T, class BinaryPredicate&gt;
ForwardIt search_n(ForwardIt first, ForwardIt last,
                    Size count, const T&amp; value, BinaryPredicate p)
{
    for(; first != last; ++first) {
        if (!p(*first, value)) {
            continue;
        }

        ForwardIt candidate = first;
        Size cur_count = 0;

        while (true) {
            ++cur_count;
            if (cur_count == count) {
                // success
                return candidate;
            }
            ++first;
            if (first == last) {
                // exhausted the list
                return last;
            }
            if (!p(*first, value)) {
                // too few in a row
                break;
            }
        }
    }
    return last;
}
}}

===Example===

{{example|
|code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

template &lt;class Container, class Size, class T&gt;
bool consecutive_values(const Container&amp; c, Size count, const T&amp; v)
{
  return std::search_n(std::begin(c),std::end(c),count,v) != std::end(c);
}

int main()
{
   const char sequence[] = &quot;1001010100010101001010101&quot;;

   std::cout &lt;&lt; std::boolalpha;
   std::cout &lt;&lt; &quot;Has 4 consecutive zeros: &quot;
             &lt;&lt; consecutive_values(sequence,4,'0') &lt;&lt; '\n';
   std::cout &lt;&lt; &quot;Has 3 consecutive zeros: &quot;
             &lt;&lt; consecutive_values(sequence,3,'0') &lt;&lt; '\n';
}

|output=
Has 4 consecutive zeros: false
Has 3 consecutive zeros: true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc find_end}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc inc | cpp/algorithm/dsc search}}

{{dsc end}}

[[de:cpp/algorithm/search n]]
[[es:cpp/algorithm/search n]]
[[fr:cpp/algorithm/search n]]
[[it:cpp/algorithm/search n]]
[[ja:cpp/algorithm/search n]]
[[pt:cpp/algorithm/search n]]
[[ru:cpp/algorithm/search n]]
[[zh:cpp/algorithm/search n]]</text>
      <sha1>29gl30zungaoicv2osi0f2njp6y729j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/set difference</title>
    <ns>0</ns>
    <id>779</id>
    <revision>
      <id>90652</id>
      <parentid>89847</parentid>
      <timestamp>2017-03-06T19:11:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="5327">{{cpp/title|set_difference}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2, class OutputIt &gt;
OutputIt set_difference( InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class ForwardIt3 &gt;
ForwardIt3 set_difference( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                           ForwardIt2 first2, ForwardIt2 last2,
                           ForwardIt3 d_first );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_difference( InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class ForwardIt3, class Compare &gt;
ForwardIt3 set_difference( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                           ForwardIt2 first2, ForwardIt2 last2,
                           ForwardIt3 d_first, Compare comp );}}
{{dcl end}}

Copies the elements from the sorted range {{tt|[first1, last1)}} which are not found in the sorted range {{tt|[first2, last2)}} to the range beginning at {{tt|d_first}}. 

The resulting range is also sorted. Equivalent elements are treated individually, that is, if some element is found {{tt|m}} times in {{tt|[first1, last1)}} and {{tt|n}} times in {{tt|[first2, last2)}}, it will be copied to {{tt|d_first}} exactly {{c|std::max(m-n, 0)}} times. The resulting range cannot overlap with either of the input ranges.

@1@ Elements are compared using {{tt|operator&lt;}} and the ranges must be sorted with respect to the same.
@3@ Elements are compared using the given binary comparison function {{tt|comp}} and the ranges must be sorted with respect to the same.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the range of elements to examine}}
{{par | first2, last2 | the range of elements to search for}}
{{par exec pol}}
{{par cmp ord | comp | p1=InputIt1 | p2=InputIt2}} 
{{par hreq}}
{{par req concept | InputIt1, InputIt2  | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2, ForwardIt3 | ForwardIterator}}
{{par end}}

===Return value===
Iterator past the end of the constructed range.

===Complexity===
At most {{math|2&amp;middot;(N&lt;sub&gt;1&lt;/sub&gt;+N&lt;sub&gt;2&lt;/sub&gt;-1)}} comparisons, where {{math|N&lt;sub&gt;1&lt;/sub&gt;}} {{c|{{=}} std::distance(first1, last1)}} and {{math|N&lt;sub&gt;2&lt;/sub&gt;}} {{c|{{=}} std::distance(first2, last2)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2, class OutputIt&gt;
OutputIt set_difference(InputIt1 first1, InputIt1 last1,
                        InputIt2 first2, InputIt2 last2,
                        OutputIt d_first)
{
    while (first1 != last1) {
        if (first2 == last2) return std::copy(first1, last1, d_first);

        if (*first1 &lt; *first2) {
            *d_first++ = *first1++;
        } else {
            if (! (*first2 &lt; *first1)) {
                ++first1;
            }
            ++first2;
        }
    }
    return d_first;
}
 | 2=
template&lt;class InputIt1, class InputIt2,
         class OutputIt, class Compare&gt;
OutputIt set_difference( InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first, Compare comp)
{
    while (first1 != last1) {
        if (first2 == last2) return std::copy(first1, last1, d_first);

        if (comp(*first1, *first2)) {
            *d_first++ = *first1++;
        } else {
            if (!comp(*first2, *first1)) {
                ++first1;
            }
            ++first2;
        }
    }
    return d_first;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;

int main() {
    std::vector&lt;int&gt; v1 {1, 2, 5, 5, 5, 9};
    std::vector&lt;int&gt; v2 {2, 5, 7};
    std::vector&lt;int&gt; diff;
 
    std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), 
                        std::inserter(diff, diff.begin()));
  
    for (auto i : v1) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;minus &quot;;
    for (auto i : v2) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;is: &quot;;
  
    for (auto i : diff) std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}

 | output=
1 2 5 5 5 9 minus 2 5 7 is: 1 5 5 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc set_symmetric_difference}}

{{dsc end}}

[[de:cpp/algorithm/set difference]]
[[es:cpp/algorithm/set difference]]
[[fr:cpp/algorithm/set difference]]
[[it:cpp/algorithm/set difference]]
[[ja:cpp/algorithm/set difference]]
[[pt:cpp/algorithm/set difference]]
[[ru:cpp/algorithm/set difference]]
[[zh:cpp/algorithm/set difference]]</text>
      <sha1>ecd9vnofeh92k0mq88qqmar6camsexp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/set intersection</title>
    <ns>0</ns>
    <id>780</id>
    <revision>
      <id>90651</id>
      <parentid>89825</parentid>
      <timestamp>2017-03-06T19:09:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="5139">{{cpp/title|set_intersection}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2, class OutputIt &gt;
OutputIt set_intersection( InputIt1 first1, InputIt1 last1,
                           InputIt2 first2, InputIt2 last2,
                           OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class ForwardIt3 &gt;
ForwardIt3 set_intersection( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                             ForwardIt2 first2, ForwardIt2 last2,
                             ForwardIt3 d_first );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_intersection( InputIt1 first1, InputIt1 last1,
                           InputIt2 first2, InputIt2 last2,
                           OutputIt d_first, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class ForwardIt3, class Compare &gt;
ForwardIt3 set_intersection( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                             ForwardIt2 first2, ForwardIt2 last2,
                             ForwardIt3 d_first, Compare comp );}}
{{dcl end}}

Constructs a sorted range beginning at {{tt|d_first}} consisting of elements that are found in both sorted ranges {{tt|[first1, last1)}} and {{tt|[first2, last2)}}. If some element is found {{tt|m}} times in {{tt|[first1, last1)}} and {{tt|n}} times in {{tt|[first2, last2)}}, the first {{c|std::min(m, n)}} elements will be copied from the first range to the destination range. The order of equivalent elements is preserved. The resulting range cannot overlap with either of the input ranges.

@1@ Elements are compared using {{tt|operator&lt;}} and the ranges must be sorted with respect to the same.
@3@ Elements are compared using the given binary comparison function {{tt|comp}} and the ranges must be sorted with respect to the same.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of elements to examine}}
{{par | first2, last2 | the second range of elements to examine}}
{{par exec pol}}
{{par cmp ord | comp | p1=InputIt1 | p2=InputIt2}} 
{{par hreq}}
{{par req concept | InputIt1, InputIt2 | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2, ForwardIt3 | ForwardIterator}}
{{par end}}

===Return value===

Iterator past the end of the constructed range.

===Complexity===
At most {{math|2&amp;middot;(N&lt;sub&gt;1&lt;/sub&gt;+N&lt;sub&gt;2&lt;/sub&gt;-1)}} comparisons, where {{math|N&lt;sub&gt;1&lt;/sub&gt;}} {{c|{{=}} std::distance(first1, last1)}} and {{math|N&lt;sub&gt;2&lt;/sub&gt;}} {{c|{{=}} std::distance(first2, last2)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2, class OutputIt&gt;
OutputIt set_intersection(InputIt1 first1, InputIt1 last1,
                          InputIt2 first2, InputIt2 last2,
                          OutputIt d_first)
{
    while (first1 != last1 &amp;&amp; first2 != last2) {
        if (*first1 &lt; *first2) {
            ++first1;
        } else  {
            if (!(*first2 &lt; *first1)) {
                *d_first++ = *first1++;
            }
            ++first2;
        }
    }
    return d_first;
}
 | 2=
template&lt;class InputIt1, class InputIt2,
         class OutputIt, class Compare&gt;
OutputIt set_intersection(InputIt1 first1, InputIt1 last1,
                          InputIt2 first2, InputIt2 last2,
                          OutputIt d_first, Compare comp)
{
    while (first1 != last1 &amp;&amp; first2 != last2) {
        if (comp(*first1, *first2)) {
            ++first1;
        } else {
            if (!comp(*first2, *first1)) {
                *d_first++ = *first1++;
            }
            ++first2;
        }
    }
    return d_first;
}
}}


===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
int main()
{
    std::vector&lt;int&gt; v1{1,2,3,4,5,6,7,8};
    std::vector&lt;int&gt; v2{        5,  7,  9,10};
    std::sort(v1.begin(), v1.end());
    std::sort(v2.begin(), v2.end());

    std::vector&lt;int&gt; v_intersection;

    std::set_intersection(v1.begin(), v1.end(),
                          v2.begin(), v2.end(),
                          std::back_inserter(v_intersection));
    for(int n : v_intersection)
        std::cout &lt;&lt; n &lt;&lt; ' ';
}
 | output=
5 7
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc set_union}}

{{dsc end}}

[[de:cpp/algorithm/set intersection]]
[[es:cpp/algorithm/set intersection]]
[[fr:cpp/algorithm/set intersection]]
[[it:cpp/algorithm/set intersection]]
[[ja:cpp/algorithm/set intersection]]
[[pt:cpp/algorithm/set intersection]]
[[ru:cpp/algorithm/set intersection]]
[[zh:cpp/algorithm/set intersection]]</text>
      <sha1>et365fi94nzf8kwxcm72djw1687qoae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/set symmetric difference</title>
    <ns>0</ns>
    <id>781</id>
    <revision>
      <id>90653</id>
      <parentid>89850</parentid>
      <timestamp>2017-03-06T19:14:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="5902">{{cpp/title|set_symmetric_difference}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2, class OutputIt &gt;
OutputIt set_symmetric_difference( InputIt1 first1, InputIt1 last1,
                                   InputIt2 first2, InputIt2 last2,
                                   OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class ForwardIt3 &gt;
ForwardIt3 set_symmetric_difference( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                                   ForwardIt2 first2, ForwardIt2 last2,
                                   ForwardIt3 d_first );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_symmetric_difference( InputIt1 first1, InputIt1 last1,
                                   InputIt2 first2, InputIt2 last2,
                                   OutputIt d_first, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class ForwardIt3, class Compare &gt;
ForwardIt3 set_symmetric_difference( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                                   ForwardIt2 first2, ForwardIt2 last2,
                                   ForwardIt3 d_first, Compare comp );}}
{{dcl end}}

Computes symmetric difference of two sorted ranges: the elements that are found in either of the ranges, but not in both of them are copied to the range beginning at {{tt|d_first}}. The resulting range is also sorted.

If some element is found {{tt|m}} times in {{tt|[first1, last1)}} and {{tt|n}} times in {{tt|[first2, last2)}}, it will be copied to {{tt|d_first}} exactly {{c|std::abs(m-n)}} times. If {{tt|m&gt;n}}, then the last {{tt|m-n}} of those elements are copied from {{tt|[first1,last1)}}, otherwise the last {{tt|n-m}} elements are copied from {{tt|[first2,last2)}}. The resulting range cannot overlap with either of the input ranges.

@1@ Elements are compared using {{tt|operator&lt;}} and the ranges must be sorted with respect to the same.
@3@ Elements are compared using the given binary comparison function {{tt|comp}} and the ranges must be sorted with respect to the same.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the first sorted range of elements }}
{{par | first2, last2 | the second sorted range of elements}}
{{par exec pol}}
{{par cmp ord | comp | p1=InputIt1 | p2=InputIt2}} 
{{par hreq}}
{{par req concept | InputIt1, InputIt2 | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2, ForwardIt3| ForwardIterator}}
{{par end}}

===Return value===
Iterator past the end of the constructed range.

===Complexity===

At most {{math|2&amp;middot;(N&lt;sub&gt;1&lt;/sub&gt;+N&lt;sub&gt;2&lt;/sub&gt;-1)}} comparisons, where {{math|N&lt;sub&gt;1&lt;/sub&gt;}} {{c|{{=}} std::distance(first1, last1)}} and {{math|N&lt;sub&gt;2&lt;/sub&gt;}} {{c|{{=}} std::distance(first2, last2)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2, class OutputIt&gt;
OutputIt set_symmetric_difference(InputIt1 first1, InputIt1 last1,
                                  InputIt2 first2, InputIt2 last2,
                                  OutputIt d_first)
{
    while (first1 != last1) {
        if (first2 == last2) return std::copy(first1, last1, d_first);

        if (*first1 &lt; *first2) {
            *d_first++ = *first1++;
        } else {
            if (*first2 &lt; *first1) {
                *d_first++ = *first2;
            } else {
                ++first1;
            }
            ++first2;
        }
    }
    return std::copy(first2, last2, d_first);
}
 | 2=
template&lt;class InputIt1, class InputIt2,
         class OutputIt, class Compare&gt;
OutputIt set_symmetric_difference(InputIt1 first1, InputIt1 last1,
                                  InputIt2 first2, InputIt2 last2,
                                  OutputIt d_first, Compare comp)
{
    while (first1 != last1) {
        if (first2 == last2) return std::copy(first1, last1, d_first);

        if (comp(*first1, *first2)) {
            *d_first++ = *first1++;
        } else {
            if (comp(*first2, *first1)) {
                *d_first++ = *first2;
            } else {
                ++first1;
            }
            ++first2;
        }
    }
    return std::copy(first2, last2, d_first);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
int main()
{
    std::vector&lt;int&gt; v1{1,2,3,4,5,6,7,8     };
    std::vector&lt;int&gt; v2{        5,  7,  9,10};
    std::sort(v1.begin(), v1.end());
    std::sort(v2.begin(), v2.end());
 
    std::vector&lt;int&gt; v_symDifference;
 
    std::set_symmetric_difference(
        v1.begin(), v1.end(),
        v2.begin(), v2.end(),
        std::back_inserter(v_symDifference));

    for(int n : v_symDifference)
        std::cout &lt;&lt; n &lt;&lt; ' ';
}
 | output=
1 2 3 4 6 8 9 10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc set_difference}}
{{dsc inc | cpp/algorithm/dsc set_union}}
{{dsc inc | cpp/algorithm/dsc set_intersection}}

{{dsc end}}

[[de:cpp/algorithm/set symmetric difference]]
[[es:cpp/algorithm/set symmetric difference]]
[[fr:cpp/algorithm/set symmetric difference]]
[[it:cpp/algorithm/set symmetric difference]]
[[ja:cpp/algorithm/set symmetric difference]]
[[pt:cpp/algorithm/set symmetric difference]]
[[ru:cpp/algorithm/set symmetric difference]]
[[zh:cpp/algorithm/set symmetric difference]]</text>
      <sha1>84awu53w1xbe3phzsc8svv02bj8tuwn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/set union</title>
    <ns>0</ns>
    <id>782</id>
    <revision>
      <id>90650</id>
      <parentid>89861</parentid>
      <timestamp>2017-03-06T19:06:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 (iterator categories for parallel algos)</comment>
      <text xml:space="preserve" bytes="6145">{{cpp/title|set_union}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt1, class InputIt2, class OutputIt &gt;
OutputIt set_union( InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, InputIt2 last2,
                    OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class ForwardIt3 &gt;
ForwardIt3 set_union( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                    ForwardIt2 first2, ForwardIt2 last2,
                    ForwardIt3 d_first );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_union( InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, InputIt2 last2,
                    OutputIt d_first, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class ForwardIt3, class Compare &gt;
ForwardIt3 set_union( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                    ForwardIt2 first2, ForwardIt2 last2,
                    ForwardIt3 d_first, Compare comp );}}
{{dcl end}}

Constructs a sorted range beginning at {{tt|d_first}} consisting of all elements present in one or both sorted ranges {{tt|[first1, last1)}} and {{tt|[first2, last2)}}. 

If some element is found {{tt|m}} times in {{tt|[first1, last1)}} and {{tt|n}} times in {{tt|[first2, last2)}}, then all {{tt|m}} elements will be copied from {{tt|[first1, last1)}} to {{tt|d_first}}, preserving order, and then exactly {{c|std::max(n-m, 0)}} elements will be copied from {{tt|[first2, last2)}} to {{tt|d_first}}, also preserving order. 

The resulting range cannot overlap with either of the input ranges.

@1@ Elements are compared using {{tt|operator&lt;}} and the ranges must be sorted with respect to the same.
@3@ Elements are compared using the given binary comparison function {{tt|comp}} and the ranges must be sorted with respect to the same.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the first input sorted range}}
{{par | first2, last2 | the second input sorted range}}
{{par exec pol}}
{{par cmp ord | comp | p1=InputIt1 | p2=InputIt2}} 
{{par hreq}}
{{par req concept | InputIt1, InputIt2 | InputIterator}}
{{par req concept | ForwardIt1, ForwardIt2, ForwardIt3 | ForwardIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Return value===

Iterator past the end of the constructed range.

===Complexity===

At most {{math|2&amp;middot;(N&lt;sub&gt;1&lt;/sub&gt;+N&lt;sub&gt;2&lt;/sub&gt;-1)}} comparisons, where {{math|N&lt;sub&gt;1&lt;/sub&gt;}} {{c|{{=}} std::distance(first1, last1)}} and {{math|N&lt;sub&gt;2&lt;/sub&gt;}} {{c|{{=}} std::distance(first2, last2)}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
This algorithm performs a similar task as {{c|std::merge}} does. Both consume two sorted input ranges and produce a sorted output with elements from both inputs. The difference bewteen these two algorithms is with handling values from both input ranges which compare equivalent (see notes on {{concept|LessThanComparable}}). If any equivalent values appeared {{tt|n}} times in the first range and {{tt|m}} times in the second, {{tt|std::merge}} would output all {{c|n+m}} occurrences whereas {{tt|std::set_union}} would output {{c|std::max(n, m)}} ones only. So {{tt|std::merge}} outputs exactly {{c|std::distance(first1, last1) + std::distance(first2, last2)}} values and {{tt|std::set_union}} may produce less.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt1, class InputIt2, class OutputIt&gt;
OutputIt set_union(InputIt1 first1, InputIt1 last1,
                   InputIt2 first2, InputIt2 last2,
                   OutputIt d_first)
{
    for (; first1 != last1; ++d_first) {
        if (first2 == last2)
            return std::copy(first1, last1, d_first);
        if (*first2 &lt; *first1) {
            *d_first = *first2++;
        } else {
            *d_first = *first1;
            if (!(*first1 &lt; *first2))
                ++first2;
            ++first1;
        }
    }
    return std::copy(first2, last2, d_first);
}
 | 2=
template&lt;class InputIt1, class InputIt2,
         class OutputIt, class Compare&gt;
OutputIt set_union(InputIt1 first1, InputIt1 last1,
                   InputIt2 first2, InputIt2 last2,
                   OutputIt d_first, Compare comp)
{
    for (; first1 != last1; ++d_first) {
        if (first2 == last2)
            return std::copy(first1, last1, d_first);
        if (comp(*first2, *first1)) {
            *d_first = *first2++;
        } else {
            *d_first = *first1;
            if (!comp(*first1, *first2))
                ++first2;
            ++first1;
        }
    }
    return std::copy(first2, last2, d_first);
}
}}

===Example===
{{example
 | Example with vectors :
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

int main()
{
    std::vector&lt;int&gt; v1 = {1, 2, 3, 4, 5}; 
    std::vector&lt;int&gt; v2 = {      3, 4, 5, 6, 7}; 
    std::vector&lt;int&gt; dest1;

    std::set_union(v1.begin(), v1.end(),
                   v2.begin(), v2.end(),                  
                   std::back_inserter(dest1));

    for (const auto &amp;i : dest1) {
        std::cout &lt;&lt; i &lt;&lt; ' ';
    }   
    std::cout &lt;&lt; '\n';
}
 | output=
1 2 3 4 5 6 7
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc merge}}
{{dsc inc | cpp/algorithm/dsc set_difference}}
{{dsc inc | cpp/algorithm/dsc set_intersection}}
{{dsc inc | cpp/algorithm/dsc set_symmetric_difference}}

{{dsc end}}

[[de:cpp/algorithm/set union]]
[[es:cpp/algorithm/set union]]
[[fr:cpp/algorithm/set union]]
[[it:cpp/algorithm/set union]]
[[ja:cpp/algorithm/set union]]
[[pt:cpp/algorithm/set union]]
[[ru:cpp/algorithm/set union]]
[[zh:cpp/algorithm/set union]]</text>
      <sha1>3q7o1w3hsbj9626e3vd9y304i7npiwm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/shuffle</title>
    <ns>0</ns>
    <id>2463</id>
    <redirect title="cpp/algorithm/random shuffle" />
    <revision>
      <id>8732</id>
      <timestamp>2011-08-16T07:49:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/algorithm/random_shuffle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/sort</title>
    <ns>0</ns>
    <id>783</id>
    <revision>
      <id>89859</id>
      <parentid>87197</parentid>
      <timestamp>2017-01-27T05:20:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="3393">{{cpp/title|sort}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class RandomIt &gt;
void sort( RandomIt first, RandomIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class RandomIt &gt;
void sort( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class RandomIt, class Compare &gt;
void sort( RandomIt first, RandomIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void sort( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last, Compare comp );}}
{{dcl end}}

Sorts the elements in the range {{tt|[first, last)}} in ascending order. The order of equal elements is not guaranteed to be preserved. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given binary comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sort}}
{{par exec pol}}
{{par cmp ord | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par req concept | Compare | Compare}} 
{{par end}}

===Return value===
(none)

===Complexity===

{{rev begin}}
{{rev|until=c++11|
{{math|O(N&amp;middot;log(N))}}, where {{c|1=N = std::distance(first, last)}} comparisons on average.
}}
{{rev|since=c++11|
{{math|O(N&amp;middot;log(N))}}, where {{c|1=N = std::distance(first, last)}} comparisons.
}}

{{rev end}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;array&gt;
#include &lt;iostream&gt;

int main()
{
    std::array&lt;int, 10&gt; s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; 

    // sort using the default operator&lt;
    std::sort(s.begin(), s.end());
    for (auto a : s) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }   
    std::cout &lt;&lt; '\n';

    // sort using a standard library compare function object
    std::sort(s.begin(), s.end(), std::greater&lt;int&gt;());
    for (auto a : s) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }   
    std::cout &lt;&lt; '\n';

    // sort using a custom function object
    struct {
        bool operator()(int a, int b)
        {   
            return a &lt; b;
        }   
    } customLess;
    std::sort(s.begin(), s.end(), customLess);
    for (auto a : s) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }   
    std::cout &lt;&lt; '\n';

    // sort using a lambda expression 
    std::sort(s.begin(), s.end(), [](int a, int b) {
        return b &lt; a;   
    });
    for (auto a : s) {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    } 
    std::cout &lt;&lt; '\n';
} 
 | output=
0 1 2 3 4 5 6 7 8 9 
9 8 7 6 5 4 3 2 1 0 
0 1 2 3 4 5 6 7 8 9 
9 8 7 6 5 4 3 2 1 0 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partial_sort}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}

{{dsc end}}

[[de:cpp/algorithm/sort]]
[[es:cpp/algorithm/sort]]
[[fr:cpp/algorithm/sort]]
[[it:cpp/algorithm/sort]]
[[ja:cpp/algorithm/sort]]
[[pt:cpp/algorithm/sort]]
[[ru:cpp/algorithm/sort]]
[[zh:cpp/algorithm/sort]]</text>
      <sha1>c15b624vvjjfgi52dfcjt1lxtjo7rsa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/sort heap</title>
    <ns>0</ns>
    <id>784</id>
    <revision>
      <id>65850</id>
      <parentid>65842</parentid>
      <timestamp>2013-10-10T14:27:09Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>use site-consistent indentation</comment>
      <text xml:space="preserve" bytes="2347">{{cpp/title|sort_heap}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class RandomIt &gt;
void sort_heap( RandomIt first, RandomIt last );
}}
{{dcl | num=2 |
template&lt; class RandomIt, class Compare &gt;
void sort_heap( RandomIt first, RandomIt last, Compare comp );
}}
{{dcl end}}

Converts the ''max heap'' {{tt|[first, last)}} into a sorted range in ascending order. The resulting range no longer has the heap property.

The first version of the function uses {{c|operator&lt;}} to compare the elements, the second uses the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sort}}
{{par cmp | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
(none)

===Complexity===
At most ''N&amp;times;log(N)'' comparisons where {{c|1=N=std::distance(first, last)}}.

===Notes===
{{cpp/algorithm/notes heap}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class RandomIt &gt;
void sort_heap( RandomIt first, RandomIt last );
{
    while (first != last)
        std::pop_heap(first, last--);
}
 | 2=
template&lt; class RandomIt, class Compare &gt;
void sort_heap( RandomIt first, RandomIt last, Compare comp );
{
    while (first != last)
        std::pop_heap(first, last--, comp);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;int&gt; v = {3, 1, 4, 1, 5, 9}; 

    std::make_heap(v.begin(), v.end());

    std::cout &lt;&lt; &quot;heap:\t&quot;;
    for (const auto &amp;i : v) {
        std::cout &lt;&lt; i &lt;&lt; ' ';
    }   

    std::sort_heap(v.begin(), v.end());
    
    std::cout &lt;&lt; &quot;\nsorted:\t&quot;;
    for (const auto &amp;i : v) {                                                   
        std::cout &lt;&lt; i &lt;&lt; ' ';
    }   
    std::cout &lt;&lt; '\n';
}
 | output=
heap:   9 4 5 1 1 3 
sorted: 1 1 3 4 5 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc make_heap}}
{{dsc end}}

[[de:cpp/algorithm/sort heap]]
[[es:cpp/algorithm/sort heap]]
[[fr:cpp/algorithm/sort heap]]
[[it:cpp/algorithm/sort heap]]
[[ja:cpp/algorithm/sort heap]]
[[pt:cpp/algorithm/sort heap]]
[[ru:cpp/algorithm/sort heap]]
[[zh:cpp/algorithm/sort heap]]</text>
      <sha1>i2bcak3hbkfzl9f3d24u74qovaj34zn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/stable partition</title>
    <ns>0</ns>
    <id>785</id>
    <revision>
      <id>90716</id>
      <parentid>89855</parentid>
      <timestamp>2017-03-08T15:31:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0574r1 parallel complexity. Also, dropping mention of get_temporary_buffer since it's deprecated</comment>
      <text xml:space="preserve" bytes="2665">{{cpp/title|stable_partition}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class BidirIt, class UnaryPredicate &gt;
BidirIt stable_partition( BidirIt first, BidirIt last, UnaryPredicate p );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class BidirIt, class UnaryPredicate &gt;
BidirIt stable_partition( ExecutionPolicy&amp;&amp; policy, BidirIt first, BidirIt last, UnaryPredicate p );}}
{{dcl end}}

@1@ Reorders the elements in the range {{tt|[first, last)}} in such a way that all elements for which the predicate {{tt|p}} returns {{c|true}} precede the elements for which predicate {{tt|p}} returns {{c|false}}. Relative order of the elements is preserved. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to reorder}}
{{par exec pol}}
{{par pred1 | p | if the element should be ordered before other elements | p1=BidirIt}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator | ValueSwappable }}
{{par req concept deref | BidirIt | MoveConstructible | MoveAssignable }}
{{par req concept | UnaryPredicate | Predicate}}
{{par end}}

===Return value===
Iterator to the first element of the second group

===Complexity===
Given {{tt|N {{=}} last - first}}
@1@ Exactly {{tt|N}} applications of the predicate and {{tt|O(N)}} swaps if there is enough extra memory. If memory is insufficient, at most {{tt|N log N}} swaps.
@2@ {{tt|O(N log N)}} swaps and {{tt|O(N)}} applications of the predicate

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Notes===
This function attempts to allocate a temporary buffer. If the allocation fails, the less efficient algorithm is chosen.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v{0, 0, 3, 0, 2, 4, 5, 0, 7};
    std::stable_partition(v.begin(), v.end(), [](int n){return n&gt;0;});
    for (int n : v) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';
}
 | output=
3 2 4 5 7 0 0 0 0 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partition}}

{{dsc end}}

[[de:cpp/algorithm/stable partition]]
[[es:cpp/algorithm/stable partition]]
[[fr:cpp/algorithm/stable partition]]
[[it:cpp/algorithm/stable partition]]
[[ja:cpp/algorithm/stable partition]]
[[pt:cpp/algorithm/stable partition]]
[[ru:cpp/algorithm/stable partition]]
[[zh:cpp/algorithm/stable partition]]</text>
      <sha1>pqzd9536mnnh434e516mqex4ltqf9lh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/stable sort</title>
    <ns>0</ns>
    <id>786</id>
    <revision>
      <id>90719</id>
      <parentid>89826</parentid>
      <timestamp>2017-03-08T15:38:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>dropping mention of get_temporary_buffer as deprecated</comment>
      <text xml:space="preserve" bytes="3093">{{cpp/title|stable_sort}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class RandomIt &gt;
void stable_sort( RandomIt first, RandomIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class RandomIt &gt;
void stable_sort( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class RandomIt, class Compare &gt;
void stable_sort( RandomIt first, RandomIt last, Compare comp );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void stable_sort( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last, Compare comp );}}
{{dcl end}}

Sorts the elements in the range {{tt|[first, last)}} in ascending order. The order of equal elements is guaranteed to be preserved. 

@1@ Elements are compared using {{tt|operator&lt;}}.
@3@ Elements are compared using the given comparison function {{tt|comp}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sort}}
{{par exec pol}}
{{par cmp ord | comp | p1=RandomIt}} 
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par req concept deref | RandomIt | MoveConstructible | MoveAssignable}}
{{par end}}

===Return value===
(none)

===Complexity===
{{math|O(N&amp;middot;log&lt;sup&gt;2&lt;/sup&gt;(N))}}, where {{c|1=N = std::distance(first, last)}} applications of {{tt|cmp}}. If additional memory is available, then the complexity is {{math|O(N&amp;middot;log(N))}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
This function attempts to allocate a temporary buffer equal in size to the sequence to be sorted. If the allocation fails, the less efficient algorithm is chosen.

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

struct Employee {
    Employee(int age, std::string name) : age(age), name(name) { } 
    int age;
    std::string name;  // Does not particpate in comparisons
};

bool operator&lt;(const Employee &amp;lhs, const Employee &amp;rhs) {
    return lhs.age &lt; rhs.age;
}

int main()
{
    std::vector&lt;Employee&gt; v = { 
        Employee(108, &quot;Zaphod&quot;),
        Employee(32, &quot;Arthur&quot;),
        Employee(108, &quot;Ford&quot;),
    };  

    std::stable_sort(v.begin(), v.end());

    for (const Employee &amp;e : v) {
        std::cout &lt;&lt; e.age &lt;&lt; &quot;, &quot; &lt;&lt; e.name &lt;&lt; '\n';
    }   
}   
 | output=
32, Arthur
108, Zaphod
108, Ford
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partial_sort}}
{{dsc inc | cpp/algorithm/dsc sort}}

{{dsc end}}

[[de:cpp/algorithm/stable sort]]
[[es:cpp/algorithm/stable sort]]
[[fr:cpp/algorithm/stable sort]]
[[it:cpp/algorithm/stable sort]]
[[ja:cpp/algorithm/stable sort]]
[[pt:cpp/algorithm/stable sort]]
[[ru:cpp/algorithm/stable sort]]
[[zh:cpp/algorithm/stable sort]]</text>
      <sha1>2keagndx4m50q1d4owyxuqa2crdqzx9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/swap</title>
    <ns>0</ns>
    <id>787</id>
    <revision>
      <id>91784</id>
      <parentid>90029</parentid>
      <timestamp>2017-03-31T19:57:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4880">{{cpp/title|swap}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm | utility | notes={{mark until c++11}}&lt;br&gt;{{mark since c++11}}}}
{{dcl | num=1 |
template&lt; class T &gt;
void swap( T&amp; a, T&amp; b );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class T2, std::size_t N &gt;
void swap( T2 (&amp;a)[N], T2 (&amp;b)[N]);
}}
{{dcl end}}

Exchanges the given values.

@1@ Swaps the values {{tt|a}} and {{tt|b}}. {{rev inl|since=c++17|This overload does not participate in overload resolution unless {{c|std::is_move_constructible_v&lt;T&gt; &amp;&amp; std::is_move_assignable_v&lt;T&gt;}} is {{c|true}}.}}

@2@ Swaps the arrays {{tt|a}} and {{tt|b}}. In effect calls {{c|std::swap_ranges(a, a+N, b)}}. {{rev inl|since=c++17|This overload does not participate in overload resolution unless  {{c|std::is_swappable_v&lt;T2&gt;}} is {{c|true}}.}}

===Parameters===
{{par begin}}
{{par | a, b | the values to be swapped}}
{{par hreq}}
{{par req concept | T | MoveConstructible | MoveAssignable}}
{{par req concept | T2 | Swappable }}
{{par end}}

===Return value===
(none)

===Exceptions===
@1@ {{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|
{{unreviewed noexcept|
    std::is_nothrow_move_constructible&lt;T&gt;::value &amp;&amp;
    std::is_nothrow_move_assignable&lt;T&gt;::value
}}
}}{{rev end}}
@2@ {{rev begin}}
{{rev|until=c++17|{{unreviewed noexcept|noexcept(swap(*a, *b))}}}}
{{rev|since=c++17|{{unreviewed noexcept|std::is_nothrow_swappable_v&lt;T2&gt;}}}}
{{rev end}}

===Complexity===
@1@ Constant

@2@ Linear in N

===Specializations===

{{lc|std::swap}} may be [[cpp/language/extending_std|specialized in namespace std]] for user-defined types, but such specializations are not found by [[cpp/language/adl|ADL]] (the namespace std is not the associated namespace for the user-defined type). The expected way to make a user-defined type swappable is to provide a non-member function swap in the same namespace as the type: see {{concept|Swappable}} for details. 

The following overloads are already provided by the standard library:

{{dsc begin}}
{{dsc inc | cpp/utility/pair/dsc swap2}}
{{dsc inc | cpp/utility/tuple/dsc swap2}}
{{dsc inc | cpp/memory/shared_ptr/dsc swap2}}
{{dsc inc | cpp/memory/weak_ptr/dsc swap2}}
{{dsc inc | cpp/memory/unique_ptr/dsc swap2}}
{{dsc inc | cpp/utility/functional/function/dsc swap2}}
{{dsc inc | cpp/string/basic_string/dsc swap2}}
{{dsc inc | cpp/container/dsc swap2 | array}}
{{dsc inc | cpp/container/dsc swap2 | deque}}
{{dsc inc | cpp/container/dsc swap2 | forward_list}}
{{dsc inc | cpp/container/dsc swap2 | list}}
{{dsc inc | cpp/container/dsc swap2 | vector}}
{{dsc inc | cpp/container/dsc swap2 | map}}
{{dsc inc | cpp/container/dsc swap2 | multimap}}
{{dsc inc | cpp/container/dsc swap2 | set}}
{{dsc inc | cpp/container/dsc swap2 | multiset}}
{{dsc inc | cpp/container/dsc swap2 | unordered_map}}
{{dsc inc | cpp/container/dsc swap2 | unordered_multimap}}
{{dsc inc | cpp/container/dsc swap2 | unordered_set}}
{{dsc inc | cpp/container/dsc swap2 | unordered_multiset}}
{{dsc inc | cpp/container/dsc swap2 | queue}}
{{dsc inc | cpp/container/dsc swap2 | priority_queue}}
{{dsc inc | cpp/container/dsc swap2 | stack}}
{{dsc inc | cpp/numeric/valarray/dsc swap2}}
{{dsc inc | cpp/io/basic_stringbuf/dsc swap2}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_istringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_ostringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_stringstream}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap2}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_fstream}}
{{dsc inc | cpp/regex/basic_regex/dsc swap2}}
{{dsc inc | cpp/regex/match_results/dsc swap2}}
{{dsc inc | cpp/thread/thread/dsc swap2}}
{{dsc inc | cpp/thread/unique_lock/dsc swap2}}
{{dsc inc | cpp/thread/promise/dsc swap2}}
{{dsc inc | cpp/thread/packaged_task/dsc swap2}}
{{dsc inc | cpp/utility/optional/dsc swap2}}
{{dsc inc | cpp/utility/any/dsc swap2}}
{{dsc inc | cpp/utility/variant/dsc swap2}}
{{dsc inc | cpp/filesystem/path/dsc swap2}}
{{dsc end}}

===Example===
{{example
 | &lt;!-- should demo proper use of swap with generic types, as in void swap(T&amp; other) {using std::swap; swap(member, other.member);} , not just trivialities --&gt;
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;

int main()
{
   int a = 5, b = 3;

   // before
   std::cout &lt;&lt; a &lt;&lt; ' ' &lt;&lt; b &lt;&lt; '\n';

   std::swap(a,b);

   // after
   std::cout &lt;&lt; a &lt;&lt; ' ' &lt;&lt; b &lt;&lt; '\n';
}
 | output=
5 3
3 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc iter_swap}}
{{dsc inc | cpp/algorithm/dsc swap_ranges}}
{{dsc end}}

[[de:cpp/algorithm/swap]]
[[es:cpp/algorithm/swap]]
[[fr:cpp/algorithm/swap]]
[[it:cpp/algorithm/swap]]
[[ja:cpp/algorithm/swap]]
[[pt:cpp/algorithm/swap]]
[[ru:cpp/algorithm/swap]]
[[zh:cpp/algorithm/swap]]</text>
      <sha1>8cjj0s0s4oq36fhnhalmsdv2gzy751a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/swap ranges</title>
    <ns>0</ns>
    <id>788</id>
    <revision>
      <id>89864</id>
      <parentid>84641</parentid>
      <timestamp>2017-01-27T05:20:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/parallelism/dsc algorithm&quot; to &quot;subst:User:T. Canens/null&quot;</comment>
      <text xml:space="preserve" bytes="2709">{{cpp/title|swap_ranges}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 swap_ranges( ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2 );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 swap_ranges( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2 );}}
{{dcl end}}

@1@ Exchanges elements between range {{tt|[first1, last1)}} and another range starting at {{tt|first2}}. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of elements to swap}}
{{par | first2 | beginning of the second range of elements to swap}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req | The types of dereferenced {{tt|ForwardIt1}} and {{tt|ForwardIt2}} must meet the requirements of {{concept|Swappable}}}}
{{par end}}

===Return value===
Iterator to the element past the last element exchanged in the range beginning with {{tt|first2}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt1, class ForwardIt2&gt;
ForwardIt2 swap_ranges(ForwardIt1 first1, 
                             ForwardIt1 last1, 
                             ForwardIt2 first2)
{
    while (first1 != last1) {
        std::iter_swap(first1++, first2++);
    }
    return first2;
}
}}

===Example===
{{example
 | Demonstrates swapping of subranges from different containers
 | code=
#include &lt;algorithm&gt;
#include &lt;list&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
int main()
{
    std::vector&lt;int&gt; v = {1, 2, 3, 4, 5};
    std::list&lt;int&gt; l = {-1, -2, -3, -4, -5};

    std::swap_ranges(v.begin(), v.begin()+3, l.begin());

    for(int n : v)
       std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
    for(int n : l)
       std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
-1 -2 -3 4 5
1 2 3 -4 -5
}}

===Complexity===

linear in the distance between {{tt|first}} and {{tt|last}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc iter_swap}}
{{dsc inc | cpp/algorithm/dsc swap}}

{{dsc end}}

[[de:cpp/algorithm/swap ranges]]
[[es:cpp/algorithm/swap ranges]]
[[fr:cpp/algorithm/swap ranges]]
[[it:cpp/algorithm/swap ranges]]
[[ja:cpp/algorithm/swap ranges]]
[[pt:cpp/algorithm/swap ranges]]
[[ru:cpp/algorithm/swap ranges]]
[[zh:cpp/algorithm/swap ranges]]</text>
      <sha1>9gv6b5tzah6zw5u5dzuax6ykrtln0oq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/transform</title>
    <ns>0</ns>
    <id>789</id>
    <revision>
      <id>90632</id>
      <parentid>90631</parentid>
      <timestamp>2017-03-06T18:33:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missed return type</comment>
      <text xml:space="preserve" bytes="4661">{{cpp/title|transform}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class OutputIt, class UnaryOperation &gt;
OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first,
                    UnaryOperation unary_op );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class UnaryOperation &gt;
ForwardIt2 transform( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                    ForwardIt2 d_first, UnaryOperation unary_op );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt1, class InputIt2, class OutputIt, class BinaryOperation &gt;
OutputIt transform( InputIt1 first1, InputIt1 last1, InputIt2 first2, 
                    OutputIt d_first, BinaryOperation binary_op );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class ForwardIt3, class BinaryOperation &gt;
ForwardIt3 transform( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first1, ForwardIt1 last1,
                    ForwardIt2 first2, ForwardIt3 d_first, BinaryOperation binary_op );}}
{{dcl end}}

{{tt|std::transform}} applies the given function to a range and stores the result in another range, beginning at {{tt|d_first}}. 
@1@ The unary operation {{tt|unary_op}} is applied to the range defined by {{tt|[first1, last1)}}.
@3@ The binary operation {{tt|binary_op}} is applied to pairs of elements from two ranges: one defined by {{tt|[first1, last1)}} and the other beginning at {{tt|first2}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}
{{rev begin}}
{{rev | until=c++11 |
{{tt|unary_op}} and {{tt|binary_op}} must not have side effects.
}}
{{rev | since=c++11 |
{{tt|unary_op}} and {{tt|binary_op}} must not invalidate any iterators, including the end iterators, or modify any elements of the ranges involved.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | first1, last1 | the first range of elements to transform}}
{{par | first2 | the beginning of the second range of elements to transform}}
{{par | d_first | the beginning of the destination range, may be equal to {{tt|first1}} or {{tt|first2}} }}
{{par exec pol}}
{{par op1 | unary_op | rp=OutputIt | p1=InputIt}}
{{par op2 | binary_op | rp=OutputIt | p1=InputIt1 | p2=InputIt2}}
{{par hreq}}
{{par req concept | InputIt, InputIt1, InputIt2 | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2, ForwardIt3| ForwardIterator}}
{{par end}}

===Return value===
Output iterator to the element past the last element transformed.

===Complexity===
@1-2@ Exactly {{c|std::distance(first1, last1)}} applications of {{tt|unary_op}}

@3-4@ Exactly {{c|std::distance(first1, last1)}} applications of {{tt|binary_op}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class InputIt, class OutputIt, class UnaryOperation&gt;
OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first, 
                   UnaryOperation unary_op)
{
    while (first1 != last1) {
        *d_first++ = unary_op(*first1++);
    }
    return d_first;
}
 | 2=
template&lt;class InputIt1, class InputIt2, 
         class OutputIt, class BinaryOperation&gt;
OutputIt transform(InputIt1 first1, InputIt1 last1, InputIt2 first2, 
                   OutputIt d_first, BinaryOperation binary_op)
{
    while (first1 != last1) {
        *d_first++ = binary_op(*first1++, *first2++);
    }
    return d_first;
}
}}

===Notes===
{{tt|std::transform}} does not guarantee in-order application of {{tt|unary_op}} or {{tt|binary_op}}. To apply a function to a sequence in-order or to apply a function that modifies the elements of a sequence, use {{lc|std::for_each}}

===Example===
{{example
 | The following code uses transform to convert a string to uppercase using the toupper function: 
 | code=
#include &lt;string&gt;
#include &lt;cctype&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::string s(&quot;hello&quot;);
    std::transform(s.begin(), s.end(), s.begin(),
                   [](unsigned char c) { return std::toupper(c); });
    std::cout &lt;&lt; s;
}
 | output=
HELLO
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc for_each}}

{{dsc end}}

[[de:cpp/algorithm/transform]]
[[es:cpp/algorithm/transform]]
[[fr:cpp/algorithm/transform]]
[[it:cpp/algorithm/transform]]
[[ja:cpp/algorithm/transform]]
[[pt:cpp/algorithm/transform]]
[[ru:cpp/algorithm/transform]]
[[zh:cpp/algorithm/transform]]</text>
      <sha1>j6c9ppmttbmdbk6j03ead3yews50ck9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/transform exclusive scan</title>
    <ns>0</ns>
    <id>15162</id>
    <revision>
      <id>90788</id>
      <parentid>90682</parentid>
      <timestamp>2017-03-10T15:28:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>requirements on T from P0574r1</comment>
      <text xml:space="preserve" bytes="4342">{{cpp/title|transform_exclusive_scan}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | since=c++17 | num= 1 |1= 
template&lt; class InputIt, class OutputIt, class T, 
          class BinaryOperation, class UnaryOperation&gt;
OutputIt transform_exclusive_scan( InputIt first, InputIt last, OutputIt d_first, T init,
                                   BinaryOperation binary_op, UnaryOperation unary_op);
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy,
          class ForwardIt1, class ForwardIt2,
          class T, class BinaryOperation, class UnaryOperation &gt;
ForwardIt2 transform_exclusive_scan( ExecutionPolicy&amp;&amp; policy,
                                     ForwardIt1 first, ForwardIt1 last,
                                     ForwardIt2 d_first, T init,
                                     BinaryOperation binary_op, UnaryOperation unary_op );}}
{{dcl end}}

Transforms each element in the range {{tt|[first, last)}} with {{tt|unary_op}}, then computes an exclusive prefix sum operation using {{tt|binary_op}} over the resulting range, with {{tt|init}} as the initial value, and writes the results to the range beginning at {{tt|d_first}}. &quot;exclusive&quot; means that the i-th input element is not included in the i-th sum. 

Formally, assigns through each iterator {{tt|i}} in {{math|[d_first, d_first + (last - first))}} the value of the generalized noncommutative sum of {{tt|init, unary_op(*j)...}} for every {{tt|j}} in {{math|[first, first + (i - d_first))}} over {{tt|binary_op}},

where generalized noncommutative sum {{math|GNSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GNSUM(op, a{{su|b=1}}, ..., a{{su|b=K}}), GNSUM(op, a{{su|b=M}}, ..., a{{su|b=N}}))}} for any K where {{math|1 &lt; K+1 {{=}} M ≤ N}}

In other words, the summation operations may be performed in arbitrary order, and the behavior is nondeterministic if {{tt|binary_op}} is not associative.

Overload {{v|2}} is executed according to {{tt|policy}}, and does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.

{{tt|unary_op}} and {{tt|binary_op}} shall not invalidate iterators (including the end iterators) or subranges, nor modify elements in the ranges {{math|[first, last)}} or {{math|[d_first, d_first + (last - first))}}. Otherwise, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sum}}
{{par | d_first | the beginning of the destination range, may be equal to {{tt|first}}}}
{{par exec pol}}
{{par | init | the initial value}}
{{par | unary_op | unary {{concept|FunctionObject}} that will be applied to each element of the input range. The return type must be acceptable as input to {{tt|binary_op}}. }}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in to the result of {{tt|unary_op}}, the results of other {{tt|binary_op}}, and {{tt|init}}.}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept | T | MoveConstructible | notes=All of {{tt|binary_op(init, unary_op(*first))}}, {{tt|binary_op(init, init)}}, and {{tt|binary_op(unary_op(*first), unary_op(*first))}} must be convertible to {{tt|T}}.}}
{{par end}}

===Return value===
Iterator to the element past the last element written.

===Complexity===
{{math|O(last - first)}} applications of each of {{tt|binary_op}} and {{tt|unary_op}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

=== Notes ===
{{tt|unary_op}} is not applied to {{tt|init}}.

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc exclusive_scan}}
{{dsc inc | cpp/algorithm/dsc transform_inclusive_scan}}
{{dsc end}}

[[de:cpp/algorithm/transform exclusive scan]]
[[es:cpp/algorithm/transform exclusive scan]]
[[fr:cpp/algorithm/transform exclusive scan]]
[[it:cpp/algorithm/transform exclusive scan]]
[[ja:cpp/algorithm/transform exclusive scan]]
[[pt:cpp/algorithm/transform exclusive scan]]
[[ru:cpp/algorithm/transform exclusive scan]]
[[zh:cpp/algorithm/transform exclusive scan]]</text>
      <sha1>k1rlfbfvs9z0dljg17dfdv1jsc01v84</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/transform inclusive scan</title>
    <ns>0</ns>
    <id>15163</id>
    <revision>
      <id>90789</id>
      <parentid>90683</parentid>
      <timestamp>2017-03-10T15:32:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>requirements on T from P0574r1</comment>
      <text xml:space="preserve" bytes="5395">{{cpp/title|transform_inclusive_scan}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | since=c++17 | num= 1 |1= 
template&lt; class InputIt, class OutputIt,
          class BinaryOperation, class UnaryOperation &gt;
OutputIt transform_inclusive_scan( InputIt first, InputIt last, OutputIt d_first,
                                   BinaryOperation binary_op, UnaryOperation unary_op );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class BinaryOperation, class UnaryOperation &gt;
ForwardIt2 transform_inclusive_scan( ExecutionPolicy&amp;&amp; policy,
                                     ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first,
                                     BinaryOperation binary_op, UnaryOperation unary_op );}}
{{dcl | since=c++17 | num= 3 |1= 
template&lt; class InputIt, class OutputIt,
          class BinaryOperation, class UnaryOperation, class T &gt;
OutputIt transform_inclusive_scan( InputIt first, InputIt last, OutputIt d_first,
                                   BinaryOperation binary_op, UnaryOperation unary_op,
                                   T init );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
          class BinaryOperation, class UnaryOperation, class T &gt;
ForwardIt2 transform_inclusive_scan( ExecutionPolicy&amp;&amp; policy,
                                     ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first,
                                     BinaryOperation binary_op, UnaryOperation unary_op,
                                     T init );}}
{{dcl end}}

Transforms each element in the range {{tt|[first, last)}} with {{tt|unary_op}}, then computes an inclusive prefix sum operation using {{tt|binary_op}} over the resulting range, optionally with {{tt|init}} as the initial value, and writes the results to the range beginning at {{tt|d_first}}. &quot;inclusive&quot; means that the i-th input element is included in the i-th sum. 

Formally, assigns through each iterator {{tt|i}} in {{math|[d_first, d_first + (last - first))}} the value of
* for overloads {{v|1-2}}, the generalized noncommutative sum of {{tt|unary_op(*j)...}} for every {{tt|j}} in {{math|[first, first + (i - d_first + 1))}} over {{tt|binary_op}},
* for overloads {{v|3-4}}, the generalized noncommutative sum of {{tt|init, unary_op(*j)...}} for every {{tt|j}} in {{math|[first, first + (i - d_first + 1))}} over {{tt|binary_op}},

where generalized noncommutative sum {{math|GNSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GNSUM(op, a{{su|b=1}}, ..., a{{su|b=K}}), GNSUM(op, a{{su|b=M}}, ..., a{{su|b=N}}))}} for any K where {{math|1 &lt; K+1 {{=}} M ≤ N}}

In other words, the summation operations may be performed in arbitrary order, and the behavior is nondeterministic if {{tt|binary_op}} is not associative.

Overloads {{v|2, 4}} are executed according to {{tt|policy}}, and do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.

{{tt|unary_op}} and {{tt|binary_op}} shall not invalidate iterators (including the end iterators) or subranges, nor modify elements in the ranges {{math|[first, last)}} or {{math|[d_first, d_first + (last - first))}}. Otherwise, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sum}}
{{par | d_first | the beginning of the destination range; may be equal to {{tt|first}}}}
{{par exec pol}}
{{par | init | the initial value }}
{{par | unary_op | unary {{concept|FunctionObject}} that will be applied to each element of the input range. The return type must be acceptable as input to {{tt|binary_op}}. }}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in to the result of {{tt|unary_op}}, the results of other {{tt|binary_op}}, and {{tt|init}} if provided.}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1 | ForwardIterator|notes=and, if {{tt|init}} is not provided, ForwardIt1's value_type must be {{concept|MoveConstructible}} and {{tt|binary_op(unary_op(*first), unary_op(*first))}} must be convertible to ForwardIt1's value type}}
{{par req concept | ForwardIt2 | ForwardIterator}}
{{par req concept | T (if init is provided) | MoveConstructible | notes=All of {{tt|binary_op(init, unary_op(*first))}}, {{tt|binary_op(init, init)}}, and {{tt|binary_op(unary_op(*first), unary_op(*first))}} must be convertible to T}}
{{par end}}

===Return value===
Iterator to the element past the last element written.

===Complexity===
{{math|O(last - first)}} applications of each of {{tt|binary_op}} and {{tt|unary_op}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

=== Notes ===
{{tt|unary_op}} is not applied to {{tt|init}}.

The parameter {{tt|init}} appears last, differing from {{lc|std::transform_exclusive_scan}}, because it is optional for this function.

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/algorithm/dsc inclusive_scan}}
{{dsc inc | cpp/algorithm/dsc transform_exclusive_scan}}
{{dsc end}}

{{langlinks}}</text>
      <sha1>f8624ijtj5tzb4z1943yp5m7tctg97y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/transform reduce</title>
    <ns>0</ns>
    <id>15083</id>
    <revision>
      <id>92140</id>
      <parentid>90687</parentid>
      <timestamp>2017-04-07T09:08:48Z</timestamp>
      <contributor>
        <username>AnthonyVH</username>
        <id>6686</id>
      </contributor>
      <minor/>
      <comment>Fixed order of binary_op1 and binary_op2 in description of signature 2. Also fixed a typo in &quot;Return values&quot; section.</comment>
      <text xml:space="preserve" bytes="6421">{{cpp/title|transform_reduce}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | numeric}}
{{dcl | num=1 | since=c++17|
template&lt;class InputIt1, class InputIt2, class T&gt;
T transform_reduce(InputIt1 first1, InputIt1 last1, InputIt2 first2, T init);
}}
{{dcl | num=2 | since=c++17|
template &lt;class InputIt1, class InputIt2, class T, class BinaryOp1, class BinaryOp2&gt;
T transform_reduce(InputIt1 first1, InputIt1 last1, InputIt2 first2,
                   T init, BinaryOp1 binary_op1, BinaryOp2 binary_op2);
}}
{{dcl | num=3 | since=c++17 |
template&lt;class InputIt, class T, class BinaryOp, class UnaryOp&gt;
T transform_reduce(InputIt first, InputIt last,
                   T init, BinaryOp binop, UnaryOp unary_op);
}}
{{dcl | num=4 | since=c++17|
template&lt;class ExecutionPolicy,
         class ForwardIt1, class ForwardIt2, class T&gt;
T transform_reduce(ExecutionPolicy&amp;&amp; policy,
                   ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, T init);
}}
{{dcl | num=5 | since=c++17 |
template&lt;class ExecutionPolicy,
         class ForwardIt1, class ForwardIt2, class T, class BinaryOp1, class BinaryOp2&gt;
T transform_reduce(ExecutionPolicy&amp;&amp; policy,
                   ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2,
                   T init, BinaryOp1 binary_op1, BinaryOp2 binary_op2);
}}
{{dcl | num=6 | since=c++17 |
template&lt;class ExecutionPolicy,
         class ForwardIt, class T, class BinaryOp, class UnaryOp&gt;
T transform_reduce(ExecutionPolicy&amp;&amp; policy,
                   ForwardIt first, ForwardIt last,
                   T init, BinaryOp binary_op, UnaryOp unary_op);
}}
{{dcl end}}

@1@ Equivalent to {{tt|transform_reduce(first1, last1, first2, init, std::plus&lt;&gt;(), std::multiplies&lt;&gt;());}}, effectively parallelized version of the default {{lc|std::inner_product}}
@2@ Applies {{tt|binary_op2}} to each pair of elements from the ranges {{c|[first; last)}} and the range starting at {{c|first2}} and reduces the results (possibly permuted and aggregated in unspecified manner) along with the initial value {{tt|init}} over {{tt|binary_op1}}
@3@ Applies {{tt|unary_op}} to each element in the range {{math|[first; last)}} and reduces the results (possibly permuted and aggregated in unspecified manner) along with the initial value {{tt|init}} over {{tt|binary_op}}.
@4-6@ Same as {{v|1-3}}, but executed according to {{tt|policy}}. {{cpp/enable_if| {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

The behavior is non-deterministic if {{tt|binary_op}}/{{tt|binary_op2}} is not associative or not commutative.

The behavior is undefined if {{tt|unary_op}}, {{tt|binary_op}}, {{tt|binary_op1}}, or {{tt|binary_op2}} modifies any element or invalidates any iterator in the input ranges, including their end iterators.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to apply the algorithm to}}
{{par | init | the initial value of the generalized sum}}
{{par | policy | the execution policy to use. See [[cpp/algorithm/execution_policy_tag_t|execution policy]] for details.}}
{{par | unary_op | unary {{concept|FunctionObject}} that will be applied to each element of the input range. The return type must be acceptable as input to {{tt|binary_op}} }}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in unspecified order to the results of {{tt|unary_op}}, the results of other {{tt|binary_op}} and {{tt|init}}.}}
{{par hreq}}
{{par req concept|overloads=3,6| T | MoveConstructible | notes=and the result of the expressions {{c|binary_op(init, unary_op(*first))}}, {{c|binary_op(unary_op(*first), init)}}, {{c|binary_op(init, init)}}, and {{c|binary_op(unary_op(*first), unary_op(*first))}} must be convertible to T}}
{{par req concept |overloads=2,5| T | MoveConstructible | notes=and the result of the expressions {{c|binary_op1(init, binary_op2(*first1, *first2))}},  {{c|binary_op1(binary_op2(*first1, *first2), init)}}, {{c|binary_op1(init, init)}}, and {{c|binary_op1(binary_op2(*first1, *first2), binary_op2(*first1, *first2))}} must be convertible to T}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
@2@ Generalized sum of {{tt|init}} and {{tt|binary_op2(*first,*first2)}}, {{tt|binary_op2(*(first+1),*(first2+1))}}, ..., over {{tt|binary_op1}}
@3@ Generalized sum of {{tt|init}} and {{tt|unary_op(*first)}}, {{tt|unary_op(*(first+1))}}, ... {{tt|unary_op(*(last-1))}} over {{tt|binary_op}},

where generalized sum {{math|GSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GSUM(op, b{{su|b=1}}, ..., b{{su|b=K}}), GSUM(op, b{{su|b=M}}, ..., b{{su|b=N}}))}} where
:* {{math|b{{su|b=1}}, ..., b{{su|b=N}}}} may be any permutation of {{math|a1, ..., aN}} and
:* {{math|1 &lt; K+1 {{=}} M ≤ N}}

in other words, the results of unary_op or of binary_op1 may be grouped and arranged in arbitrary order.

===Complexity===
@1,2,4,5@ {{math|O(last1 - first1)}} applications each of {{tt|binary_op1}} and {{tt|binary_op2}}.
@3,6@ {{math|O(last - first)}} applications each of {{tt|unary_op}} and {{tt|binary_op}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior}}

===Notes===
In the unary-binary overload {{v|3,6}}, {{tt|unary_op}} is not applied to {{tt|init}}

If {{tt|first {{==}} last}} or {{tt|first1 {{==}} last1}}, {{tt|init}} is returned, unmodified

===Example===
{{example|transform_reduce can be used to parallelize {{lc|std::inner_product}}:
|code=
#include &lt;vector&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;numeric&gt;
#include &lt;execution&gt;

int main()
{
    std::vector&lt;double&gt; xvalues(10007, 1.0), yvalues(10007, 1.0);

    double result = std::transform_reduce(
        std::execution::par,
        xvalues.begin(), xvalues.end()
        yvalues.begin(), 0.0,
    );
    std::cout &lt;&lt; result &lt;&lt; '\n';
}
|output=
10007
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/algorithm/dsc reduce}}
{{dsc end}}

[[de:cpp/algorithm/transform_reduce]]
[[es:cpp/algorithm/transform_reduce]]
[[fr:cpp/algorithm/transform_reduce]]
[[it:cpp/algorithm/transform_reduce]]
[[ja:cpp/algorithm/transform_reduce]]
[[pt:cpp/algorithm/transform_reduce]]
[[ru:cpp/algorithm/transform_reduce]]
[[zh:cpp/algorithm/transform_reduce]]</text>
      <sha1>i2vxklfuy8sl5vw2onsc57a41j84wpa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/unique</title>
    <ns>0</ns>
    <id>790</id>
    <revision>
      <id>90209</id>
      <parentid>89820</parentid>
      <timestamp>2017-02-11T11:56:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>note equivalence req</comment>
      <text xml:space="preserve" bytes="4782">{{cpp/title|unique}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class ForwardIt &gt;
ForwardIt unique( ForwardIt first, ForwardIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt unique( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl | since= | num= 3 |1= 
template&lt; class ForwardIt, class BinaryPredicate &gt;
ForwardIt unique( ForwardIt first, ForwardIt last, BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class BinaryPredicate &gt;
ForwardIt unique( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, BinaryPredicate p );}}
{{dcl end}}

Eliminates all but the first element from every consecutive group of equivalent elements from the range {{tt|[first, last)}} and returns a past-the-end iterator for the new ''logical'' end of the range.

&lt;!-- Note: This paragraph is copied verbatim from remove. --&gt;
Removing is done by shifting the elements in the range in such a way that elements to be erased are overwritten. Relative order of the elements that remain is preserved and the ''physical'' size of the container is unchanged. Iterators pointing to an element between the new ''logical'' end and the ''physical'' end of the range are still dereferenceable, but the elements themselves have unspecified values. A call to {{tt|unique}} is typically followed by a call to a container's {{tt|erase}} method, which erases the unspecified values and reduces the ''physical'' size of the container to match its new ''logical'' size.

@1@ Elements are compared using {{tt|operator{{==}}}}. The behavior is undefined if it is not an [[enwiki:equivalence relation|equivalence relation]].
@3@ Elements are compared using the given binary predicate {{tt|p}}. The behavior is undefined if it is not an equivalence relation.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. These overloads do not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to process}}
{{par exec pol}}
{{par pred2 eq | p | p1=ForwardIt}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept deref | ForwardIt | MoveAssignable}}
{{par end}}

===Return value===
Forward iterator to the new end of the range

===Complexity===
For nonempty ranges, exactly {{c|std::distance(first,last) -1}} applications of the corresponding predicate. 

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt&gt;
ForwardIt unique(ForwardIt first, ForwardIt last)
{
    if (first == last)
        return last;

    ForwardIt result = first;
    while (++first != last) {
        if (!(*result == *first) &amp;&amp; ++result != first) {
            *result = std::move(*first);
        }
    }
    return ++result;
}
 | 2=
template&lt;class ForwardIt, class BinaryPredicate&gt;
ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p)
{
    if (first == last)
        return last;

    ForwardIt result = first;
    while (++first != last) {
        if (!p(*result, *first) &amp;&amp; ++result != first) {
            *result = std::move(*first);
        }
    }
    return ++result;
}
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;cctype&gt;

int main() 
{
    // remove duplicate elements (normal use)
    std::vector&lt;int&gt; v{1,2,3,1,2,3,3,4,5,4,5,6,7};
    std::sort(v.begin(), v.end()); // 1 1 2 2 3 3 3 4 4 5 5 6 7 
    auto last = std::unique(v.begin(), v.end());
    // v now holds {1 2 3 4 5 6 7 x x x x x x}, where 'x' is indeterminate
    v.erase(last, v.end()); 
    for (int i : v)
      std::cout &lt;&lt; i &lt;&lt; &quot; &quot;;
    std::cout &lt;&lt; &quot;\n&quot;;
 
    // remove consecutive spaces
    std::string s = &quot;wanna go    to      space?&quot;;
    auto end = std::unique(s.begin(), s.end(), [](char l, char r){
        return std::isspace(l) &amp;&amp; std::isspace(r) &amp;&amp; l == r;
    });
    // s now holds &quot;wanna go to space?xxxxxxxx&quot;, where 'x' is indeterminate
    std::cout &lt;&lt; std::string(s.begin(), end) &lt;&lt; '\n';
}
 | output =
1 2 3 4 5 6 7
wanna go to space?
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/algorithm/dsc unique_copy}}
{{dsc inc | cpp/algorithm/dsc remove}}
{{dsc inc | cpp/container/dsc unique | list}}

{{dsc end}}

[[de:cpp/algorithm/unique]]
[[es:cpp/algorithm/unique]]
[[fr:cpp/algorithm/unique]]
[[it:cpp/algorithm/unique]]
[[ja:cpp/algorithm/unique]]
[[pt:cpp/algorithm/unique]]
[[ru:cpp/algorithm/unique]]
[[zh:cpp/algorithm/unique]]</text>
      <sha1>qywhyqeahmmn5xbqklcf1fa57xnn6ho</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/unique copy</title>
    <ns>0</ns>
    <id>791</id>
    <revision>
      <id>90656</id>
      <parentid>90642</parentid>
      <timestamp>2017-03-06T19:28:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0467r2 extra on complexity</comment>
      <text xml:space="preserve" bytes="4140">{{cpp/title|unique_copy}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | since= | num= 1 |1= 
template&lt; class InputIt, class OutputIt &gt;
OutputIt unique_copy( InputIt first, InputIt last,
                      OutputIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 unique_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                        ForwardIt2 d_first );}}
{{dcl | since= | num= 3 |1= 
template&lt; class InputIt, class OutputIt, class BinaryPredicate &gt;
OutputIt unique_copy( InputIt first, InputIt last,
                      OutputIt d_first, BinaryPredicate p );
}}
{{dcl | since=c++17 | num= 4 |1=
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class BinaryPredicate &gt;
ForwardIt2 unique_copy( ExecutionPolicy&amp;&amp; policy, ForwardIt1 first, ForwardIt1 last,
                        ForwardIt2 d_first, BinaryPredicate p );}}
{{dcl end}}

Copies the elements from the range {{tt|[first, last)}}, to another range beginning at {{tt|d_first}} in such a way that there are no consecutive equal elements. Only the first element of each group of equal elements is copied.

@1@ Elements are compared using {{tt|operator{{==}}}}.
@3@ Elements are compared using the given binary predicate {{tt|p}}.
@2,4@ Same as {{v|1,3}}, but executed according to {{tt|policy}}. {{cpp/enable_if|{{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to process}}
{{par | d_first | the beginning of the destination range}}
{{par exec pol}}
{{par pred2 eq | p | p1=InputIt }}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | ForwardIt1, ForwardIt2 | ForwardIterator}}
{{par req concept deref | InputIt | CopyAssignable | notes=if {{c|InputIt}} does not satisfy {{concept|ForwardIterator}} }}
{{par req concept deref | InputIt | CopyConstructible | notes=if neither {{c|InputIt}} nor {{c|OutputIt}} satisfies {{concept|ForwardIterator}}, or if {{c|InputIt}} does not satisfy {{concept|ForwardIterator}} and the value type of {{c|InputIt}} differs from that of {{c|OutputIt}} }}
{{par end}}

===Return value===
Output iterator to the element past the last written element

===Complexity===
For nonempty ranges, exactly {{c|std::distance(first, last) - 1}} applications of the corresponding comparator.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=no}}

===Notes===
If {{c|InputIt}} satisfies {{concept|ForwardIterator}}, this function rereads the input in order to detect duplicates.

Otherwise, if {{c|OutputIt}} satisfies {{concept|ForwardIterator}}, and the value type of {{c|InputIt}} is the same as that of {{c|OutputIt}}, this function compare {{tt|*d_first}} to {{tt|*first}}.

Otherwise, this function compares {{tt|*first}} to a local element copy.

For the overloads with an ExecutionPolicy, there may be a performance cost if the value type of {{tt|ForwardIterator1}} is not both {{concept|CopyConstructible}} and {{concept|CopyAssignable}}

===Example===
{{example
 | 
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

int main()
{
    std::string s1 = &quot;The      string    with many       spaces!&quot;;
    std::cout &lt;&lt; &quot;before: &quot; &lt;&lt; s1 &lt;&lt; '\n';

    std::string s2;
    std::unique_copy(s1.begin(), s1.end(), std::back_inserter(s2),
                     [](char c1, char c2){ return c1 == ' ' &amp;&amp; c2 == ' '; });

    std::cout &lt;&lt; &quot;after:  &quot; &lt;&lt; s2 &lt;&lt; '\n';
}
 | output=
before: The      string    with many       spaces!
after:  The string with many spaces!
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/algorithm/dsc unique}}

{{dsc end}}

[[de:cpp/algorithm/unique copy]]
[[es:cpp/algorithm/unique copy]]
[[fr:cpp/algorithm/unique copy]]
[[it:cpp/algorithm/unique copy]]
[[ja:cpp/algorithm/unique copy]]
[[pt:cpp/algorithm/unique copy]]
[[ru:cpp/algorithm/unique copy]]
[[zh:cpp/algorithm/unique copy]]</text>
      <sha1>78e4frwq4mol3jvcf6ebsikqwpfd171</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/algorithm/upper bound</title>
    <ns>0</ns>
    <id>792</id>
    <revision>
      <id>85654</id>
      <parentid>85653</parentid>
      <timestamp>2016-05-01T07:18:45Z</timestamp>
      <contributor>
        <username>Czipperz</username>
        <id>5295</id>
      </contributor>
      <comment>Undo revision 85653 by [[Special:Contributions/Czipperz|Czipperz]] ([[User talk:Czipperz|talk]])</comment>
      <text xml:space="preserve" bytes="3562">{{cpp/title|upper_bound}}
{{cpp/algorithm/navbar}}
{{dcl begin}}
{{dcl header | algorithm}}
{{dcl | num=1 |
template&lt; class ForwardIt, class T &gt;
ForwardIt upper_bound( ForwardIt first, ForwardIt last, const T&amp; value );
}}
{{dcl | num=2 |
template&lt; class ForwardIt, class T, class Compare &gt;
ForwardIt upper_bound( ForwardIt first, ForwardIt last, const T&amp; value, Compare comp );
}}
{{dcl end}}

Returns an iterator pointing to the first element in the range {{tt|[first, last)}} that is ''greater'' than {{tt|value}}.

The range {{tt|[first, last)}} must be at least partially ordered, i.e. partitioned with respect to the expression {{c|!(value &lt; element)}} or {{c|!comp(value, element)}}.  A fully-sorted range meets this criterion, as does a range resulting from a call to {{c|std::partition}}.

The first version uses {{c|operator&lt;}} to compare the elements, the second version uses the given comparison function {{tt|comp}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to examine}}
{{par | value | value to compare the elements to}}
{{par cmp | comp | t1=T | p2=ForwardIt | bidirectional=}} 
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
iterator pointing to the first element that is ''greater'' than {{tt|value}}, or {{tt|last}} if no such element is found.

===Complexity===
The number of comparisons performed is logarithmic in the distance between {{tt|first}} and {{tt|last}} (At most {{math|log{{su|b=2}}(last - first) + O(1)}} comparisons). However, for non-{{concept|RandomAccessIterator}}s, the number of iterator increments is linear.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class ForwardIt, class T&gt;
ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T&amp; value)
{
    ForwardIt it;
    typename std::iterator_traits&lt;ForwardIt&gt;::difference_type count, step;
    count = std::distance(first,last);

    while (count &gt; 0) {
        it = first; 
        step = count / 2; 
        std::advance(it, step);
        if (!(value &lt; *it)) {
            first = ++it;
            count -= step + 1;
        } else count = step;
    }
    return first;
}
 | 2=
template&lt;class ForwardIt, class T, class Compare&gt;
ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T&amp; value, Compare comp)
{
    ForwardIt it;
    typename std::iterator_traits&lt;ForwardIt&gt;::difference_type count, step;
    count = std::distance(first,last);

    while (count &gt; 0) {
        it = first; 
        step = count / 2;
        std::advance(it, step);
        if (!comp(value, *it)) {
            first = ++it;
            count -= step + 1;
        } else count = step;
    }
    return first;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; data = { 1, 1, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6 };
    
    auto lower = std::lower_bound(data.begin(), data.end(), 4);
    auto upper = std::upper_bound(data.begin(), data.end(), 4);
    
    std::copy(lower, upper, std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
}
 | output=
4 4 4 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc equal_range}}
{{dsc inc | cpp/algorithm/dsc lower_bound}}
{{dsc inc | cpp/algorithm/dsc partition}}
{{dsc end}}

[[de:cpp/algorithm/upper bound]]
[[es:cpp/algorithm/upper bound]]
[[fr:cpp/algorithm/upper bound]]
[[it:cpp/algorithm/upper bound]]
[[ja:cpp/algorithm/upper bound]]
[[pt:cpp/algorithm/upper bound]]
[[ru:cpp/algorithm/upper bound]]
[[zh:cpp/algorithm/upper bound]]</text>
      <sha1>93o04azcpotozb241ubec0zy7tttqbz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic</title>
    <ns>0</ns>
    <id>793</id>
    <revision>
      <id>83389</id>
      <parentid>71017</parentid>
      <timestamp>2016-02-05T15:27:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>here too..</comment>
      <text xml:space="preserve" bytes="1827">{{title|Atomic operations library}}
{{cpp/atomic/navbar}}

The atomic library provides components for fine-grained atomic operations allowing for lockless concurrent programming. Each atomic operation is indivisible with regards to any other atomic operation that involves the same object. Atomic objects are [[cpp/language/memory_model#Threads_and_data_races|free of data races]].

{{dsc begin}}
{{dsc header | atomic }}
{{dsc h2 | Atomic types }}
{{dsc inc | cpp/atomic/dsc atomic}}
{{dsc h2 | Operations on atomic types }}
{{dsc inc | cpp/atomic/dsc atomic_is_lock_free}}
{{dsc inc | cpp/atomic/dsc atomic_store}}
{{dsc inc | cpp/atomic/dsc atomic_load}}
{{dsc inc | cpp/atomic/dsc atomic_exchange}}
{{dsc inc | cpp/atomic/dsc atomic_compare_exchange}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_add}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_sub}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_and}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_or}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_xor}}
{{dsc h2 | Flag type and operations }}
{{dsc inc | cpp/atomic/dsc atomic_flag}}
{{dsc inc | cpp/atomic/dsc atomic_flag_test_and_set}}
{{dsc inc | cpp/atomic/dsc atomic_flag_clear}}
{{dsc h2 | Initialization }}
{{dsc inc | cpp/atomic/dsc atomic_init}}
{{dsc inc | cpp/atomic/dsc ATOMIC_VAR_INIT}}
{{dsc inc | cpp/atomic/dsc ATOMIC_FLAG_INIT}}
{{dsc h2 | Memory synchronization ordering }}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc inc | cpp/atomic/dsc kill_dependency}}
{{dsc inc | cpp/atomic/dsc atomic_thread_fence}}
{{dsc inc | cpp/atomic/dsc atomic_signal_fence}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/atomic | Atomic operations library}}
{{dsc end}}

[[ar:cpp/atomic]]
[[de:cpp/atomic]]
[[es:cpp/atomic]]
[[fr:cpp/atomic]]
[[it:cpp/atomic]]
[[ja:cpp/atomic]]
[[pt:cpp/atomic]]
[[ru:cpp/atomic]]
[[zh:cpp/atomic]]</text>
      <sha1>8ybxfrrnzgfpwczhkqcdgjihz4j4lw0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/ATOMIC FLAG INIT</title>
    <ns>0</ns>
    <id>2818</id>
    <revision>
      <id>83533</id>
      <parentid>68872</parentid>
      <timestamp>2016-02-22T14:31:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>wikilink static initialization and storage duration)</comment>
      <text xml:space="preserve" bytes="1481">{{title|ATOMIC_FLAG_INIT}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic}}
{{dcl |
#define ATOMIC_FLAG_INIT /* implementation-defined */
}}
{{dcl end}}

Defines the expression which can be used to initialize {{lc|std::atomic_flag}} to clear (false) state with the statement {{c|std::atomic_flag v {{=}} ATOMIC_FLAG_INIT;}}. It is unspecified if it can be used with other initialization contexts.

If the flag has static [[cpp/language/storage_duration#Storage_duration|storage duration]], this [[cpp/language/initialization#Static_initialization|initialization is static]].

This is the only way to initialize {{lc|std::atomic_flag}} to a definite value: the value held after any other initialization is unspecified.

===Example===
{{example
 | 
 | code=
#include &lt;atomic&gt;

std::atomic_flag static_flag = ATOMIC_FLAG_INIT; // static initialization,
// guaranteed to be available during dynamic initialization of static objects.

int main()
{
    std::atomic_flag automatic_flag = ATOMIC_FLAG_INIT; // guaranteed to work
//    std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // unspecified
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_flag}}
{{dsc end}}

[[de:cpp/atomic/ATOMIC FLAG INIT]]
[[es:cpp/atomic/ATOMIC FLAG INIT]]
[[fr:cpp/atomic/ATOMIC FLAG INIT]]
[[it:cpp/atomic/ATOMIC FLAG INIT]]
[[ja:cpp/atomic/ATOMIC FLAG INIT]]
[[pt:cpp/atomic/ATOMIC FLAG INIT]]
[[ru:cpp/atomic/ATOMIC FLAG INIT]]
[[zh:cpp/atomic/ATOMIC FLAG INIT]]</text>
      <sha1>mbpvupig6b2zy58q7x9z2gr60gc2nps</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/ATOMIC VAR INIT</title>
    <ns>0</ns>
    <id>9222</id>
    <revision>
      <id>91122</id>
      <parentid>91121</parentid>
      <timestamp>2017-03-20T18:54:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>correct comment in the example, -endl, -redundancies</comment>
      <text xml:space="preserve" bytes="1521">{{title|ATOMIC_VAR_INIT}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic}}
{{dcl |
#define ATOMIC_VAR_INIT(value) /* implementation-defined */
}}
{{dcl end}}

Expands to an expression which can be used to initialize an {{lc|std::atomic}} object that can be initialized from {{tt|value}}. If the atomic object has static storage duration, this initialization is [[cpp/language/constant_initialization|constant initialization]].

===Notes===
Accessing the variable during initialization from another thread, even through an atomic operation, is a data race (it may happen if the address is immediately passed to another thread with a {{lc|std::memory_order_relaxed}} operation)

This macro is primarily provided for compatibility with C; it behaves the same as the constructor of {{lc|std::atomic}}.

===Example===
{{example
 | 
 | code=
#include &lt;atomic&gt;
#include &lt;iostream&gt;

int main()
{
    std::atomic&lt;int&gt; a = ATOMIC_VAR_INIT(1);
    // std::atomic&lt;int&gt; a(1);   // C++-only alternative
    std::cout &lt;&lt; &quot;Initialized std::atomic&lt;int&gt; as: &quot; &lt;&lt; a &lt;&lt; '\n';
}
 | output=
Initialized std::atomic&lt;int&gt; as: 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_init}}
{{dsc inc | cpp/atomic/atomic/dsc constructor}}
{{dsc end}}

[[de:cpp/atomic/ATOMIC VAR INIT]]
[[es:cpp/atomic/ATOMIC VAR INIT]]
[[fr:cpp/atomic/ATOMIC VAR INIT]]
[[it:cpp/atomic/ATOMIC VAR INIT]]
[[ja:cpp/atomic/ATOMIC VAR INIT]]
[[pt:cpp/atomic/ATOMIC VAR INIT]]
[[ru:cpp/atomic/ATOMIC VAR INIT]]
[[zh:cpp/atomic/ATOMIC VAR INIT]]</text>
      <sha1>0pc7k9jgkhefnf5e4nd53qb7hnr83oj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic</title>
    <ns>0</ns>
    <id>4734</id>
    <revision>
      <id>91983</id>
      <parentid>91900</parentid>
      <timestamp>2017-04-01T05:37:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="8074">{{cpp/title|atomic}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic}}
{{dcl | num = 1 | since=c++11 | 1=
template&lt; class T &gt;
struct atomic;
}}
{{dcl | num = 2 | since=c++11 | 1=
template&lt;&gt;
struct atomic&lt;Integral&gt;;
}}
{{dcl | num = 3 | since=c++11 | 1=
template&lt;&gt;
struct atomic&lt;bool&gt;;
}}
{{dcl | num = 4 | since=c++11 | 1=
template&lt; class T &gt;
struct atomic&lt;T*&gt;;
}}
{{dcl end}}

Each instantiation and full specialization of the {{tt|std::atomic}} template defines an atomic type. If one thread writes to an atomic object while another thread reads from it, the behavior is well-defined (see [[cpp/language/memory_model|memory model]] for details on data races)

In addition, accesses to atomic objects may establish inter-thread synchronization and order non-atomic memory accesses as specified by {{lc|std::memory_order}}.

{{tt|std::atomic}} may be instantiated with any {{concept|TriviallyCopyable}} type {{tt|T}}.
std::atomic is neither copyable nor movable.

The standard library provides specializations of the {{tt|std::atomic}} template for the following types:

1) One full specialization for the type {{c|bool}} and its typedef name is defined that is treated as a non-specialized {{tt|std::atomic&lt;T&gt;}} except that it has standard layout, trivial default constructor, trivial destructors, and supports aggregate initialization syntax:
{{dsc begin}}
{{dsc hitem | Typedef name | Full specialization }}
{{dsc | {{c|std::atomic_bool}} | {{c|std::atomic&lt;bool&gt;}} }}
{{dsc end}}

2) Full specializations and typedefs for integral types, as follows:
{{dsc begin}}
{{dsc hitem | Typedef name | Full specialization }}
{{dsc | {{c|std::atomic_char}} | {{c|std::atomic&lt;char&gt;}} }}
{{dsc | {{c|std::atomic_schar}} | {{c|std::atomic&lt;signed char&gt;}} }}
{{dsc | {{c|std::atomic_uchar}} | {{c|std::atomic&lt;unsigned char&gt;}} }}
{{dsc | {{c|std::atomic_short}} | {{c|std::atomic&lt;short&gt;}} }}
{{dsc | {{c|std::atomic_ushort}} | {{c|std::atomic&lt;unsigned short&gt;}} }}
{{dsc | {{c|std::atomic_int}} | {{c|std::atomic&lt;int&gt;}} }}
{{dsc | {{c|std::atomic_uint}} | {{c|std::atomic&lt;unsigned int&gt;}} }}
{{dsc | {{c|std::atomic_long}} | {{c|std::atomic&lt;long&gt;}} }}
{{dsc | {{c|std::atomic_ulong}} | {{c|std::atomic&lt;unsigned long&gt;}} }}
{{dsc | {{c|std::atomic_llong}} | {{c|std::atomic&lt;long long&gt;}} }}
{{dsc | {{c|std::atomic_ullong}} | {{c|std::atomic&lt;unsigned long long&gt;}} }}
{{dsc | {{c|std::atomic_char16_t}} | {{c|std::atomic&lt;char16_t&gt;}} }}
{{dsc | {{c|std::atomic_char32_t}} | {{c|std::atomic&lt;char32_t&gt;}} }}
{{dsc | {{c|std::atomic_wchar_t}} | {{c|std::atomic&lt;wchar_t&gt;}} }}
{{mark unreviewed dr|LWG}}&lt;!-- The following typedefs (from here to the next comment) are added by LWG 2441 --&gt;
{{dsc | {{c|std::atomic_int8_t}} | {{c|std::atomic&lt;std::int8_t&gt;}} }}
{{dsc | {{c|std::atomic_uint8_t}} | {{c|std::atomic&lt;std::uint8_t&gt;}} }}
{{dsc | {{c|std::atomic_int16_t}} | {{c|std::atomic&lt;std::int16_t&gt;}} }}
{{dsc | {{c|std::atomic_uint16_t}} | {{c|std::atomic&lt;std::uint16_t&gt;}} }}
{{dsc | {{c|std::atomic_int32_t}} | {{c|std::atomic&lt;std::int32_t&gt;}} }}
{{dsc | {{c|std::atomic_uint32_t}} | {{c|std::atomic&lt;std::uint32_t&gt;}} }}
{{dsc | {{c|std::atomic_int64_t}} | {{c|std::atomic&lt;std::int64_t&gt;}} }}
{{dsc | {{c|std::atomic_uint64_t}} | {{c|std::atomic&lt;std::uint64_t&gt;}} }}
{{mark unreviewed dr|LWG}}&lt;!-- The above typedefs are added by LWG 2441 --&gt;
{{dsc | {{c|std::atomic_int_least8_t}} | {{c|std::atomic&lt;std::int_least8_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least8_t}} | {{c|std::atomic&lt;std::uint_least8_t&gt;}} }}
{{dsc | {{c|std::atomic_int_least16_t}} | {{c|std::atomic&lt;std::int_least16_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least16_t}} | {{c|std::atomic&lt;std::uint_least16_t&gt;}} }}
{{dsc | {{c|std::atomic_int_least32_t}} | {{c|std::atomic&lt;std::int_least32_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least32_t}} | {{c|std::atomic&lt;std::uint_least32_t&gt;}} }}
{{dsc | {{c|std::atomic_int_least64_t}} | {{c|std::atomic&lt;std::int_least64_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least64_t}} | {{c|std::atomic&lt;std::uint_least64_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast8_t}} | {{c|std::atomic&lt;std::int_fast8_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast8_t}} | {{c|std::atomic&lt;std::uint_fast8_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast16_t}} | {{c|std::atomic&lt;std::int_fast16_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast16_t}} | {{c|std::atomic&lt;std::uint_fast16_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast32_t}} | {{c|std::atomic&lt;std::int_fast32_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast32_t}} | {{c|std::atomic&lt;std::uint_fast32_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast64_t}} | {{c|std::atomic&lt;std::int_fast64_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast64_t}} | {{c|std::atomic&lt;std::uint_fast64_t&gt;}} }}
{{dsc | {{c|std::atomic_intptr_t}} | {{c|std::atomic&lt;std::intptr_t&gt;}} }}
{{dsc | {{c|std::atomic_uintptr_t}} | {{c|std::atomic&lt;std::uintptr_t&gt;}} }}
{{dsc | {{c|std::atomic_size_t}} | {{c|std::atomic&lt;std::size_t&gt;}} }}
{{dsc | {{c|std::atomic_ptrdiff_t}} | {{c|std::atomic&lt;std::ptrdiff_t&gt;}} }}
{{dsc | {{c|std::atomic_intmax_t}} | {{c|std::atomic&lt;std::intmax_t&gt;}} }}
{{dsc | {{c|std::atomic_uintmax_t}} | {{c|std::atomic&lt;std::uintmax_t&gt;}} }}
{{dsc end}}
Note:{{mark unreviewed dr|LWG|2441}} {{tt|std::atomic_int''N''_t}}, {{tt|std::atomic_uint''N''_t}}, {{tt|std::atomic_intptr_t}}, and {{tt|atomic_uintptr_t}} are defined if and only if {{tt|std::int''N''_t}}, {{tt|std::uint''N''_t}}, {{tt|std::intptr_t}}, and {{tt|std::uintptr_t}} are defined, respectively.

These specializations have standard layout, trivial default constructors, and trivial destructors. They support aggregate initialization syntax. Besides the operations provided for all atomic types, these specializations have additional atomic operations appropriate to integer types such as {{rlt|fetch_add}}, {{rlt|fetch_sub}}, {{rlt|fetch_and}}, {{rlt|fetch_or}}, {{rlt|fetch_xor}}.

3) Partial specializations {{tt|std::atomic&lt;T*&gt;}} for all pointer types. These specializations have standard layout, trivial default constructors, and trivial destructors. They support aggregate initialization syntax. Besides the operations provided for all atomic types, these specializations additionally support atomic arithmetic operations appropriate to pointer types, such as {{rlt|fetch_add}}, {{rlt|fetch_sub}}.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc constructor}}
{{dsc inc | cpp/atomic/atomic/dsc operator{{=}}}}
{{dsc inc | cpp/atomic/atomic/dsc is_lock_free}}
{{dsc inc | cpp/atomic/atomic/dsc store}}
{{dsc inc | cpp/atomic/atomic/dsc load}}
{{dsc inc | cpp/atomic/atomic/dsc operator_T}}
{{dsc inc | cpp/atomic/atomic/dsc exchange}}
{{dsc inc | cpp/atomic/atomic/dsc compare_exchange}}
{{dsc h1 | Constants}}
{{dsc inc | cpp/atomic/atomic/dsc is_always_lock_free}}
{{dsc end}}

===Specialized member functions===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_add}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_sub}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_and}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_or}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_xor}}
{{dsc inc | cpp/atomic/atomic/dsc operator_arith}}
{{dsc inc | cpp/atomic/atomic/dsc operator_arith2}}
{{dsc end}}

===Notes===
There are non-member function template equivalents for all member functions of {{tt|std::atomic}}. Those non-member functions may be additionally overloaded for types that are not specializations of {{lc|std::atomic}}, but are able to guarantee atomicity. The only such type in the standard library is {{c|std::shared_ptr&lt;T&gt;}}.

===Defect reports===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2441 |std=c++11|before=|after=added specializations for the {{mark optional}} [[cpp/types/integer|fixed width integer types]]}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_flag}}
{{dsc end}}

===References===
{{ref std c++11}}
{{ref std | section=29.5 | title=Atomic types | id=atomics.types.generic}}
{{ref std end}}

[[de:cpp/atomic/atomic]]
[[es:cpp/atomic/atomic]]
[[fr:cpp/atomic/atomic]]
[[it:cpp/atomic/atomic]]
[[ja:cpp/atomic/atomic]]
[[pt:cpp/atomic/atomic]]
[[ru:cpp/atomic/atomic]]
[[zh:cpp/atomic/atomic]]</text>
      <sha1>o40moeze5agx4x3w0actsrt7r9lh01s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic compare exchange</title>
    <ns>0</ns>
    <id>6322</id>
    <revision>
      <id>91369</id>
      <parentid>88199</parentid>
      <timestamp>2017-03-31T19:41:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="7136">{{cpp/title|atomic_compare_exchange_weak|atomic_compare_exchange_strong|atomic_compare_exchange_weak_explicit|atomic_compare_exchange_strong_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
bool atomic_compare_exchange_weak( std::atomic&lt;T&gt;* obj, 
                                   T* expected, T desired );
}}
{{dcl | 
template&lt; class T &gt;
bool atomic_compare_exchange_weak( volatile std::atomic&lt;T&gt;* obj, 
                                   T* expected, T desired );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl |
template&lt; class T &gt;
bool atomic_compare_exchange_strong( std::atomic&lt;T&gt;* obj,
                                     T* expected, T desired );
}}
{{dcl |
template&lt; class T &gt;
bool atomic_compare_exchange_strong( volatile std::atomic&lt;T&gt;* obj,
                                     T* expected, T desired );
}}
{{dcl rev end}}
{{dcl rev begin | num=3 | since=c++11}}
{{dcl |
template&lt; class T &gt;
bool atomic_compare_exchange_weak_explicit( std::atomic&lt;T&gt;* obj,
                                            T* expected, T desired,
                                            std::memory_order succ, 
                                            std::memory_order fail );
}}
{{dcl |
template&lt; class T &gt;
bool atomic_compare_exchange_weak_explicit( volatile std::atomic&lt;T&gt;* obj,
                                            T* expected, T desired,
                                            std::memory_order succ, 
                                            std::memory_order fail );
}}
{{dcl rev end}}
{{dcl rev begin | num=4 | since=c++11}}
{{dcl |
template&lt; class T &gt;
bool atomic_compare_exchange_strong_explicit( std::atomic&lt;T&gt;* obj,
                                              T* expected, T desired,
                                              std::memory_order succ, 
                                              std::memory_order fail );
}}
{{dcl |
template&lt; class T &gt;
bool atomic_compare_exchange_strong_explicit( volatile std::atomic&lt;T&gt;* obj, 
                                              T* expected, T desired,
                                              std::memory_order succ, 
                                              std::memory_order fail );
}}
{{dcl rev end}}
{{dcl end}}

Atomically compares the [[cpp/language/object|object representation]] of the object pointed to by {{tt|obj}} with the object representation of the object pointed to by {{tt|expected}}, as if by {{lc|std::memcmp}}, and if those are bitwise-equal, replaces the former with {{tt|desired}} (performs read-modify-write operation). Otherwise, loads the actual value pointed to by {{tt|obj}} into {{tt|*expected}} (performs load operation). Copying is performed as if by {{lc|std::memcpy}}.

The memory models for the read-modify-write and load operations are {{tt|succ}} and {{tt|fail}} respectively. The (1-2) versions use {{lc|std::memory_order_seq_cst}} by default.

These functions are defined in terms of member functions of {{lc|std::atomic}}:

@1@ {{c|obj-&gt;compare_exchange_weak(*expected, desired)}}
@2@ {{c|obj-&gt;compare_exchange_strong(*expected, desired)}}
@3@ {{c|obj-&gt;compare_exchange_weak(*expected, desired, succ, fail)}}
@4@ {{c|obj-&gt;compare_exchange_strong(*expected, desired, succ, fail)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to test and modify}}
{{par | expected | pointer to the value expected to be found in the atomic object}}
{{par | desired | the value to store in the atomic object if it is as expected}}
{{par | succ | the memory synchronization ordering for the read-modify-write operation if the comparison succeeds. All values are permitted. }}
{{par | fail | the memory synchronization ordering for the load operation if the comparison fails. Cannot be {{lc|std::memory_order_release}} or {{lc|std::memory_order_acq_rel}}{{rev inl|until=c++17| and cannot specify stronger ordering than {{tt|succ}}}}}}
{{par end}} 

===Return value===
The result of the comparison: {{c|true}} if {{tt|*obj}} was equal to {{tt|*expected}}, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The weak forms ((1) and (3)) of the functions are allowed to fail spuriously, that is, act as if {{c|1=*obj != *expected}} even if they are equal. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms. 

When a weak compare-and-exchange would require a loop and a strong one would not, the strong one is preferable unless the object representation of {{tt|T}} may include padding bits, trap bits, or offers multiple object representations for the same value (e.g. floating-point NaN). In those cases, weak compare-and-exchange typically works because it quickly converges on some stable object representation.

===Example===
{{example | compare and exchange operations are often used as basic building blocks of lockfree data structures
|code=
#include &lt;atomic&gt;

template&lt;class T&gt;
struct node
{
    T data;
    node* next;
    node(const T&amp; data) : data(data), next(nullptr) {}
};

template&lt;class T&gt;
class stack
{
    std::atomic&lt;node&lt;T&gt;*&gt; head;
 public:
    void push(const T&amp; data)
    {
        node&lt;T&gt;* new_node = new node&lt;T&gt;(data);

        // put the current value of head into new_node-&gt;next
        new_node-&gt;next = head.load(std::memory_order_relaxed);

        // now make new_node the new head, but if the head
        // is no longer what's stored in new_node-&gt;next
        // (some other thread must have inserted a node just now)
        // then put that new head into new_node-&gt;next and try again
        while(!std::atomic_compare_exchange_weak_explicit(
                                &amp;head,
                                &amp;new_node-&gt;next,
                                new_node,
                                std::memory_order_release,
                                std::memory_order_relaxed))
                ; // the body of the loop is empty
// note: the above loop is not thread-safe in at least
// GCC prior to 4.8.3 (bug 60272), clang prior to 2014-05-05 (bug 18899)
// MSVC prior to 2014-03-17 (bug 819819). See member function version for workaround
    }
};

int main()
{
    stack&lt;int&gt; s;
    s.push(1);
    s.push(2);
    s.push(3);
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc compare_exchange}}
{{dsc inc | cpp/atomic/dsc atomic_exchange}}
{{dsc tfun | cpp/memory/shared_ptr/atomic | title=std::atomic_compare_exchange_weak{{dsc small|(std::shared_ptr)}}
&lt;br&gt;std::atomic_compare_exchange_strong{{dsc small|(std::shared_ptr)}} | specializes atomic operations for std::shared_ptr }}
{{dsc see c | c/atomic/atomic_compare_exchange | atomic_compare_exchange | atomic_compare_exchange_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic compare exchange]]
[[es:cpp/atomic/atomic compare exchange]]
[[fr:cpp/atomic/atomic compare exchange]]
[[it:cpp/atomic/atomic compare exchange]]
[[ja:cpp/atomic/atomic compare exchange]]
[[pt:cpp/atomic/atomic compare exchange]]
[[ru:cpp/atomic/atomic compare exchange]]
[[zh:cpp/atomic/atomic compare exchange]]</text>
      <sha1>mjml5ticzv23d8admhe8u3n0wn5btlh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic exchange</title>
    <ns>0</ns>
    <id>4723</id>
    <revision>
      <id>91752</id>
      <parentid>66484</parentid>
      <timestamp>2017-03-31T19:56:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3164">{{cpp/title|atomic_exchange|atomic_exchange_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
T atomic_exchange( std::atomic&lt;T&gt;* obj, T desr );
}}
{{dcl | 
template&lt; class T &gt;
T atomic_exchange( volatile std::atomic&lt;T&gt;* obj, T desr );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
T atomic_exchange_explicit( std::atomic&lt;T&gt;* obj, T desr, 
                            std::memory_order order );
}}
{{dcl | 
template&lt; class T &gt;
T atomic_exchange_explicit( volatile std::atomic&lt;T&gt;* obj, T desr, 
                            std::memory_order order );
}}
{{dcl rev end}}
{{dcl end}}

@1@ Atomically replaces the value pointed to by {{tt|obj}} with the value of {{tt|desr}} and returns the value {{tt|obj}} held previously, as if by {{c|obj-&gt;exchange(desr)}}

@2@ Atomically replaces the value pointed to by {{tt|obj}} with the value of {{tt|desr}} and returns the value {{tt|obj}} held previously, as if by {{c|obj-&gt;exchange(desr, order)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | desr | the value to store in the atomic object}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted.}}
{{par end}} 

===Return value===
The value held previously by the atomic object pointed to by {{tt|obj}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | A spinlock mutex can be implemented in userspace using an atomic exchange operation, similar to {{c|std::atomic_flag_test_and_set}}:
 | code=
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;atomic&gt;

std::atomic&lt;bool&gt; lock(false); // holds true when locked
                               // holds false when unlocked

void f(int n)
{
    for (int cnt = 0; cnt &lt; 100; ++cnt) {
        while(std::atomic_exchange_explicit(&amp;lock, true, std::memory_order_acquire))
             ; // spin until acquired
        std::cout &lt;&lt; &quot;Output from thread &quot; &lt;&lt; n &lt;&lt; '\n';
        std::atomic_store_explicit(&amp;lock, false, std::memory_order_release);
    }
}
int main()
{
    std::vector&lt;std::thread&gt; v;
    for (int n = 0; n &lt; 10; ++n) {
        v.emplace_back(f, n);
    }
    for (auto&amp; t : v) {
        t.join();
    }
}
 | output=
Output from thread 2
Output from thread 6
Output from thread 7
...&lt;exactly 1000 lines&gt;...
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc exchange | mem=std::atomic&lt;T&gt;}}
{{dsc inc | cpp/atomic/dsc atomic_compare_exchange}}
{{dsc tfun | cpp/memory/shared_ptr/atomic | title=std::atomic_exchange{{dsc small|(std::shared_ptr)}}
&lt;br&gt;std::atomic_exchange_explicit{{dsc small|(std::shared_ptr)}} | specializes atomic operations for {{lc|std::shared_ptr}} }}
{{dsc see c | c/atomic/atomic_exchange | atomic_exchange | atomic_exchange_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic exchange]]
[[es:cpp/atomic/atomic exchange]]
[[fr:cpp/atomic/atomic exchange]]
[[it:cpp/atomic/atomic exchange]]
[[ja:cpp/atomic/atomic exchange]]
[[pt:cpp/atomic/atomic exchange]]
[[ru:cpp/atomic/atomic exchange]]
[[zh:cpp/atomic/atomic exchange]]</text>
      <sha1>h3b47v0fcbunnfprrf7bbhkhmbihnb3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic fetch add</title>
    <ns>0</ns>
    <id>4725</id>
    <revision>
      <id>91634</id>
      <parentid>77564</parentid>
      <timestamp>2017-03-31T19:52:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="5348">{{cpp/title|atomic_fetch_add|atomic_fetch_add_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_add( std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl |
template&lt; class Integral &gt;
Integral atomic_fetch_add( volatile std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_add_explicit( std::atomic&lt;Integral&gt;* obj, Integral arg, 
                                    std::memory_order order );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_add_explicit( volatile std::atomic&lt;Integral&gt;* obj, Integral arg, 
                                    std::memory_order order );
}}
{{dcl rev end}}
{{dcl rev begin | num=3 | since=c++11}}
{{dcl |
template&lt; class T &gt;
T* atomic_fetch_add( std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg );
}}
{{dcl |
template&lt; class T &gt;
T* atomic_fetch_add( volatile std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg );
}}
{{dcl rev end}}
{{dcl rev begin | num=4 | since=c++11}}
{{dcl |
template&lt; class T &gt;
T* atomic_fetch_add_explicit( std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg, 
                              std::memory_order order );
}}
{{dcl |
template&lt; class T &gt;
T* atomic_fetch_add_explicit( volatile std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg, 
                              std::memory_order order );
}}
{{dcl rev end}}
{{dcl end}}

Performs atomic addition.

@1-2@ Atomically adds {{tt|arg}} to the value pointed to by {{tt|obj}} and returns the value {{tt|obj}} held previously. The operation is performed as if the following was executed:

:@1@ {{c|obj-&gt;fetch_add(arg)}}

:@2@ {{c|obj-&gt;fetch_add(arg, order)}}

@3-4@ Atomically increments the pointer value, pointed to by {{tt|obj}}, by {{tt|arg}}, and returns the value {{tt|obj}} held previously. The operation is performed as if the following was executed:

:@3@ {{c|obj-&gt;fetch_add(arg)}}

:@4@ {{c|obj-&gt;fetch_add(arg, order)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to add to the value stored in the atomic object}}
{{par | order | the memory sycnhronization ordering for this operation: all values are permitted.}}
{{par end}} 

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*obj}}.

===Exceptions===
{{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
typename std::enable_if&lt;std::is_integral&lt;T&gt;::value &amp;&amp; !std::is_same&lt;T, bool&gt;::value, T&gt;::type
atomic_fetch_add( std::atomic&lt;T&gt;* obj, T arg );
{
    return obj-&gt;fetch_add(arg);
}
 | 2=
template&lt; class T &gt;
T* atomic_fetch_add( std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg)
{
    return obj-&gt;fetch_add(arg);
}
}}

===Example===
{{example
 | Single-writer/multiple-reader lock can be made with fetch_add. Note that this simplistic implementation is not lockout-free
 | code=
#include &lt;string&gt;
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;atomic&gt;
#include &lt;chrono&gt;
 
// meaning of cnt:
// 10: there are no active readers or writers.
// 1...9: there are 9...1 readers active, The writer is blocked
// 0: temporary value between fetch_sub and fetch_add in reader lock
// -1: there is a writer active. The readers are blocked.
const int N = 10; // nine concurrent readers are allowed
std::atomic&lt;int&gt; cnt = ATOMIC_VAR_INIT(N);

std::vector&lt;int&gt; data;

void reader(int id)
{
    for(;;)
    {
        // lock
        while(std::atomic_fetch_sub(&amp;cnt, 1) &lt;= 0)
            std::atomic_fetch_add(&amp;cnt, 1);
        // read
        if(!data.empty())
            std::cout &lt;&lt; (  &quot;reader &quot; + std::to_string(id)
                          + &quot; sees &quot; + std::to_string(*data.rbegin()) + '\n');
        if(data.size() == 100)
            break;
        // unlock
        std::atomic_fetch_add(&amp;cnt, 1);
        // pause
        std::this_thread::sleep_for(std::chrono::milliseconds(1));
    }
}

void writer()
{
    for(int n = 0; n &lt; 100; ++n)
    {
        // lock
        while(std::atomic_fetch_sub(&amp;cnt, N+1) != N)
            std::atomic_fetch_add(&amp;cnt, N+1);
        // write
        data.push_back(n);
        std::cout &lt;&lt; &quot;writer pushed back &quot; &lt;&lt; n &lt;&lt; '\n';
        // unlock
        std::atomic_fetch_add(&amp;cnt, N+1);
        // pause
        std::this_thread::sleep_for(std::chrono::milliseconds(1));
    }
}
 
int main()
{
    std::vector&lt;std::thread&gt; v;
    for (int n = 0; n &lt; N; ++n) {
        v.emplace_back(reader, n);
    }
    v.emplace_back(writer);
    for (auto&amp; t : v) {
        t.join();
    }
}
 | output=
writer pushed back 0
reader 8 sees 0
reader 3 sees 0
reader 1 sees 0
&lt;...&gt;
reader 2 sees 99
reader 6 sees 99
reader 1 sees 99
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_add}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_sub}}
{{dsc see c | c/atomic/atomic_fetch_add | atomic_fetch_add | atomic_fetch_add_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic fetch add]]
[[es:cpp/atomic/atomic fetch add]]
[[fr:cpp/atomic/atomic fetch add]]
[[it:cpp/atomic/atomic fetch add]]
[[ja:cpp/atomic/atomic fetch add]]
[[pt:cpp/atomic/atomic fetch add]]
[[ru:cpp/atomic/atomic fetch add]]
[[zh:cpp/atomic/atomic fetch add]]</text>
      <sha1>cisz9rk1x877tmfbjlraqf5h93x7q6a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic fetch and</title>
    <ns>0</ns>
    <id>4729</id>
    <revision>
      <id>91430</id>
      <parentid>90705</parentid>
      <timestamp>2017-03-31T19:43:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2654">{{cpp/title|atomic_fetch_and|atomic_fetch_and_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_and( std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_and( volatile std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_and_explicit( std::atomic&lt;Integral&gt;* obj, 
                                    Integral arg, 
                                    std::memory_order order);
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_and_explicit( volatile std::atomic&lt;Integral&gt;* obj, 
                                    Integral arg, 
                                    std::memory_order order);
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of bitwise AND between the old value of {{tt|obj}} and {{tt|arg}}. Returns the value {{tt|obj}} held previously. 

The operation is performed as if the following is executed:

@1@ {{c|obj-&gt;fetch_and(arg)}}

@2@ {{c|obj-&gt;fetch_and(arg, order)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify. bool is not an Integral type for the purposes of the atomic operations.}}
{{par | arg | the value to bitwise AND to the value stored in the atomic object}}
{{par | order | the memory synchronization ordering for this operation: all values are permitted.}}
{{par end}}

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*obj}}.

===Exceptions===
{{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
typename std::enable_if&lt;std::is_integral&lt;T&gt;::value &amp;&amp; !std::is_same&lt;T, bool&gt;::value, T&gt;::type
    atomic_fetch_and(std::atomic&lt;T&gt;* obj, T arg);
{
    return obj-&gt;fetch_and(arg);
}
}}

===Example===
{{include|cpp/atomic/atomic_fetch_cond_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_and}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_or}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_xor}}
{{dsc see c | c/atomic/atomic_fetch_and | atomic_fetch_and | atomic_fetch_and_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic fetch and]]
[[es:cpp/atomic/atomic fetch and]]
[[fr:cpp/atomic/atomic fetch and]]
[[it:cpp/atomic/atomic fetch and]]
[[ja:cpp/atomic/atomic fetch and]]
[[pt:cpp/atomic/atomic fetch and]]
[[ru:cpp/atomic/atomic fetch and]]
[[zh:cpp/atomic/atomic fetch and]]</text>
      <sha1>ox6pz89yo68twjmfle73ye0eyo2hwx8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic fetch or</title>
    <ns>0</ns>
    <id>4731</id>
    <revision>
      <id>91901</id>
      <parentid>90706</parentid>
      <timestamp>2017-03-31T20:01:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2554">{{cpp/title|atomic_fetch_or|atomic_fetch_or_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_or( std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_or( volatile std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_or_explicit( std::atomic&lt;Integral&gt;* obj,
                                   Integral arg, 
                                   std::memory_order order );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_or_explicit( volatile std::atomic&lt;Integral&gt;* obj, 
                                   Integral arg, 
                                   std::memory_order order );
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of bitwise OR between the old value of {{tt|obj}} and {{tt|arg}}. Returns the value {{tt|obj}} held previously. 

The operation is performed as if the following is executed:

@1@ {{c|obj-&gt;fetch_or(arg)}}

@2@ {{c|obj-&gt;fetch_or(arg, order)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to bitwise OR to the value stored in the atomic object}}
{{par | order | the memory sycnhronization ordering for this operation: all values are permitted.}}
{{par end}} 

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*obj}}.

===Exceptions===
{{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
typename std::enable_if&lt;std::is_integral&lt;T&gt;::value &amp;&amp; !std::is_same&lt;T, bool&gt;::value, T&gt;::type
atomic_fetch_or( std::atomic&lt;T&gt;* obj, T arg );
{
    return obj-&gt;fetch_or(arg);
}
}}

===Example===
{{include|cpp/atomic/atomic_fetch_cond_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_or}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_and}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_xor}}
{{dsc see c | c/atomic/atomic_fetch_or | atomic_fetch_or | atomic_fetch_or_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic fetch or]]
[[es:cpp/atomic/atomic fetch or]]
[[fr:cpp/atomic/atomic fetch or]]
[[it:cpp/atomic/atomic fetch or]]
[[ja:cpp/atomic/atomic fetch or]]
[[pt:cpp/atomic/atomic fetch or]]
[[ru:cpp/atomic/atomic fetch or]]
[[zh:cpp/atomic/atomic fetch or]]</text>
      <sha1>90mkya1sgib7wp5emkxvxiqbrarq98j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic fetch sub</title>
    <ns>0</ns>
    <id>4727</id>
    <revision>
      <id>91737</id>
      <parentid>77565</parentid>
      <timestamp>2017-03-31T19:56:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4589">{{cpp/title|atomic_fetch_sub|atomic_fetch_sub_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_sub( std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_sub( volatile std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_sub_explicit( std::atomic&lt;Integral&gt;* obj, Integral arg, 
                                    std::memory_order order );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_sub_explicit( volatile std::atomic&lt;Integral&gt;* obj, Integral arg, 
                                    std::memory_order order);
}}
{{dcl rev end}}
{{dcl rev begin | num=3 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
T* atomic_fetch_sub( std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg );
}}
{{dcl | 
template&lt; class T &gt;
T* atomic_fetch_sub( volatile std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg );
}}
{{dcl rev end}}
{{dcl rev begin | num=4 | since=c++11}}
{{dcl |
template&lt; class T &gt;
T* atomic_fetch_sub_explicit( std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg, 
                              std::memory_order order );
}}
{{dcl |
template&lt; class T &gt;
T* atomic_fetch_sub_explicit( volatile std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg, 
                              std::memory_order order );
}}
{{dcl rev end}}
{{dcl end}}

Performs atomic subtraction.

@1-2@ Atomically subtracts {{tt|arg}} from the value pointed to by {{tt|obj}} and returns the value {{tt|obj}} held previously. The operation is performed as if the following was executed:

:@1@ {{c|obj-&gt;fetch_sub(arg)}}

:@2@ {{c|obj-&gt;fetch_sub(arg, order)}}

@3-4@ Atomically decrements the pointer value, pointed to by {{tt|obj}}, by {{tt|arg}}, and returns the value {{tt|obj}} held previously. The operation is performed as if the following was executed:

:@3@ {{c|obj-&gt;fetch_sub(arg)}}

:@4@ {{c|obj-&gt;fetch_sub(arg, order)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to subtract from the value stored in the atomic object}}
{{par | order | the memory sycnhronization ordering for this operation: all values are permitted.}}
{{par end}} 

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*obj}}.

===Exceptions===
{{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
typename std::enable_if&lt;std::is_integral&lt;T&gt;::value &amp;&amp; !std::is_same&lt;T, bool&gt;::value, T&gt;::type
atomic_fetch_sub( std::atomic&lt;T&gt;* obj, T arg );
{
    return obj-&gt;fetch_sub(arg);
}
 | 2=
template&lt; class T &gt;
T* atomic_fetch_sub( std::atomic&lt;T*&gt;* obj, std::ptrdiff_t arg)
{
    return obj-&gt;fetch_sub(arg);
}
}}

===Example===
{{example
 | Multiple threads may use {{tt|fetch_sub}} to concurrently process an indexed container
 | code=
#include &lt;string&gt;
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;atomic&gt;
#include &lt;numeric&gt;

const int N = 10000;
std::atomic&lt;int&gt; cnt;
std::vector&lt;int&gt; data(N);

void reader(int id) 
{
    for (;;) {
        int idx = atomic_fetch_sub_explicit(&amp;cnt, 1, std::memory_order_relaxed);
        if (idx &gt;= 0) {
            std::cout &lt;&lt; &quot;reader &quot; &lt;&lt; std::to_string(id) &lt;&lt; &quot; processed item &quot;
                      &lt;&lt; std::to_string(data[idx]) &lt;&lt; '\n';
        } else {
            std::cout &lt;&lt; &quot;reader &quot; &lt;&lt; std::to_string(id) &lt;&lt; &quot; done\n&quot;;
            break;
        }
    }
}

int main()
{
    std::iota(data.begin(), data.end(), 1);
    cnt = data.size() - 1;

    std::vector&lt;std::thread&gt; v;
    for (int n = 0; n &lt; 10; ++n) {
        v.emplace_back(reader, n);
    }
    for (auto&amp; t : v) {
        t.join();
    }
}
 | output=
reader 2 processed item 10000
reader 6 processed item 9994
reader 4 processed item 9996
reader 6 processed item 9992
&lt;....&gt;
reader 0 done
reader 5 done
reader 3 done
reader 9 done
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_sub | mem=std::atomic&lt;T&gt;}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_add}}
{{dsc see c | c/atomic/atomic_fetch_sub | atomic_fetch_sub | atomic_fetch_sub_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic fetch sub]]
[[es:cpp/atomic/atomic fetch sub]]
[[fr:cpp/atomic/atomic fetch sub]]
[[it:cpp/atomic/atomic fetch sub]]
[[ja:cpp/atomic/atomic fetch sub]]
[[pt:cpp/atomic/atomic fetch sub]]
[[ru:cpp/atomic/atomic fetch sub]]
[[zh:cpp/atomic/atomic fetch sub]]</text>
      <sha1>h3yep84l6vioyykwixgxniz96enfj0h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic fetch xor</title>
    <ns>0</ns>
    <id>4733</id>
    <revision>
      <id>91499</id>
      <parentid>90707</parentid>
      <timestamp>2017-03-31T19:48:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2516">{{cpp/title|atomic_fetch_xor|atomic_fetch_xor_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_xor( std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_xor( volatile std::atomic&lt;Integral&gt;* obj, Integral arg );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_xor_explicit( std::atomic&lt;Integral&gt;* obj, Integral arg, 
                                    std::memory_order order );
}}
{{dcl | 
template&lt; class Integral &gt;
Integral atomic_fetch_xor_explicit( volatile std::atomic&lt;Integral&gt;* obj, Integral arg, 
                                    std::memory_order order );
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the value pointed by {{tt|obj}} with the result of bitwise XOR between the old value of {{tt|obj}} and {{tt|arg}}. Returns the value {{tt|obj}} held previously. 

The operation is performed as if the following is executed:

@1@ {{c|obj-&gt;fetch_xor(arg)}}

@2@ {{c|obj-&gt;fetch_xor(arg, order)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | arg | the value to bitwise XOR to the value stored in the atomic object}}
{{par | order | the memory sycnhronization ordering for this operation: all values are permitted.}}
{{par end}} 

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*obj}}.

===Exceptions===
{{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
typename std::enable_if&lt;std::is_integral&lt;T&gt;::value &amp;&amp; !std::is_same&lt;T, bool&gt;::value, T&gt;::type
atomic_fetch_xor( std::atomic&lt;T&gt;* obj, T arg );
{
    return obj-&gt;fetch_xor(arg);
}
}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_xor | mem=std::atomic&lt;T&gt;}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_or}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_and}}
{{dsc see c | c/atomic/atomic_fetch_xor | atomic_fetch_xor | atomic_fetch_xor_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic fetch xor]]
[[es:cpp/atomic/atomic fetch xor]]
[[fr:cpp/atomic/atomic fetch xor]]
[[it:cpp/atomic/atomic fetch xor]]
[[ja:cpp/atomic/atomic fetch xor]]
[[pt:cpp/atomic/atomic fetch xor]]
[[ru:cpp/atomic/atomic fetch xor]]
[[zh:cpp/atomic/atomic fetch xor]]</text>
      <sha1>dzhy4v8x3bba1aj5e29ja8tk97ckdsj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic flag</title>
    <ns>0</ns>
    <id>2790</id>
    <revision>
      <id>62670</id>
      <parentid>57140</parentid>
      <timestamp>2013-07-01T23:32:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1976">{{cpp/title | atomic_flag}}
{{cpp/atomic/atomic_flag/navbar}}
{{dcl begin}}
{{dcl header | atomic}}
{{dcl | since=c++11 | 1=
class atomic_flag;
}}
{{dcl end}}

{{lc|std::atomic_flag}} is an atomic boolean type. Unlike all specializations of {{lc|std::atomic}}, it is guaranteed to be lock-free. Unlike {{c|std::atomic&lt;bool&gt;}}, {{tt|std::atomic_flag}} does not provide load or store operations.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/atomic/atomic_flag/atomic_flag   | constructs an atomic_flag }}
{{dsc mem fun  | cpp/atomic/atomic_flag/operator{{=}} | the assignment operator }}
{{dsc inc | cpp/atomic/atomic_flag/dsc clear}}
{{dsc inc | cpp/atomic/atomic_flag/dsc test_and_set}}
{{dsc end}}

===Example===
{{example
 | A spinlock mutex can be implemented in userspace using an atomic_flag
 | code=
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;atomic&gt;

std::atomic_flag lock = ATOMIC_FLAG_INIT;

void f(int n)
{
    for (int cnt = 0; cnt &lt; 100; ++cnt) {
        while (lock.test_and_set(std::memory_order_acquire))  // acquire lock
             ; // spin
        std::cout &lt;&lt; &quot;Output from thread &quot; &lt;&lt; n &lt;&lt; '\n';
        lock.clear(std::memory_order_release);               // release lock
    }
}

int main()
{
    std::vector&lt;std::thread&gt; v;
    for (int n = 0; n &lt; 10; ++n) {
        v.emplace_back(f, n);
    }
    for (auto&amp; t : v) {
        t.join();
    }
}
 | output=
Output from thread 2
Output from thread 6
Output from thread 7
...&lt;exactly 1000 lines&gt;...
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_flag_test_and_set}}
{{dsc inc | cpp/atomic/dsc atomic_flag_clear}}
{{dsc inc | cpp/atomic/dsc ATOMIC_FLAG_INIT}}
{{dsc see c | c/atomic/atomic_flag}}
{{dsc end}}

[[de:cpp/atomic/atomic flag]]
[[es:cpp/atomic/atomic flag]]
[[fr:cpp/atomic/atomic flag]]
[[it:cpp/atomic/atomic flag]]
[[ja:cpp/atomic/atomic flag]]
[[pt:cpp/atomic/atomic flag]]
[[ru:cpp/atomic/atomic flag]]
[[zh:cpp/atomic/atomic flag]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic flag clear</title>
    <ns>0</ns>
    <id>2833</id>
    <revision>
      <id>91515</id>
      <parentid>86931</parentid>
      <timestamp>2017-03-31T19:48:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2162">{{cpp/title | atomic_flag_clear|atomic_flag_clear_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
void atomic_flag_clear( volatile std::atomic_flag* p );
}}
{{dcl | 
void atomic_flag_clear( std::atomic_flag* p );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
void atomic_flag_clear_explicit( volatile std::atomic_flag* p, 
                                 std::memory_order order );
}}
{{dcl | 
void atomic_flag_clear_explicit( std::atomic_flag* p, 
                                 std::memory_order order );
}}
{{dcl rev end}}
{{dcl end}}

Atomically changes the state of a {{lc|std::atomic_flag}} pointed to by {{tt|p}} to clear ({{c|false}}). 

===Parameters===
{{par begin}}
{{par | p | pointer to {{lc|std::atomic_flag}} to access}}
{{par | order | the memory sycnhronization ordering for this operation: only {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_release}}, or {{lc|std::memory_order_seq_cst}} are permitted. }}
{{par end}} 

===Return value===
none.

===Exceptions===
{{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
void atomic_flag_clear(volatile std::atomic_flag* p) 
{
    p-&gt;clear();
}
 | 2=
void atomic_flag_clear(std::atomic_flag* p) 
{
    p-&gt;clear();
}
 | 3=
void atomic_flag_clear_explicit(volatile std::atomic_flag* p, 
                                std::memory_order order) 
{
    p-&gt;clear(order);
}
 | 4=
void atomic_flag_clear_explicit(std::atomic_flag* p, 
                                std::memory_order order) 
{
    p-&gt;clear(order);
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_flag}}
{{dsc inc | cpp/atomic/dsc atomic_flag_test_and_set}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc see c | c/atomic/atomic_flag_clear | atomic_flag_clear | atomic_flag_clear_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic flag clear]]
[[es:cpp/atomic/atomic flag clear]]
[[fr:cpp/atomic/atomic flag clear]]
[[it:cpp/atomic/atomic flag clear]]
[[ja:cpp/atomic/atomic flag clear]]
[[pt:cpp/atomic/atomic flag clear]]
[[ru:cpp/atomic/atomic flag clear]]
[[zh:cpp/atomic/atomic flag clear]]</text>
      <sha1>4b1hyyvf2wrbtpzlitfsugraj5ox60e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic flag test and set</title>
    <ns>0</ns>
    <id>2832</id>
    <revision>
      <id>91410</id>
      <parentid>65604</parentid>
      <timestamp>2017-03-31T19:43:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3176">{{cpp/title | atomic_flag_test_and_set|atomic_flag_test_and_set_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
bool atomic_flag_test_and_set( volatile std::atomic_flag* p );
}}
{{dcl | 
bool atomic_flag_test_and_set( std::atomic_flag* p );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
bool atomic_flag_test_and_set_explicit( volatile std::atomic_flag* p, 
                                        std::memory_order order );
}}
{{dcl | 
bool atomic_flag_test_and_set_explicit( std::atomic_flag* p, 
                                        std::memory_order order );
}}
{{dcl rev end}}
{{dcl end}}

Atomically changes the state of a {{lc|std::atomic_flag}} pointed to by {{tt|p}} to set ({{c|true}}) and returns the value it held before. 

===Parameters===
{{par begin}}
{{par | p | pointer to {{lc|std::atomic_flag}} to access}}
{{par | order | the memory synchronization order for this operation }}
{{par end}} 

===Return value===
The value previously held by the flag pointed to by {{tt|p}}

===Exceptions===
{{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
bool atomic_flag_test_and_set(volatile std::atomic_flag* p)
{
    return p-&gt;test_and_set();
}
 | 2=
bool atomic_flag_test_and_set(std::atomic_flag* p)
{
    return p-&gt;test_and_set();
}
 | 3=
bool atomic_flag_test_and_set_explicit(volatile std::atomic_flag* p, 
                                       std::memory_order order)
{
    return p-&gt;test_and_set(order);
}
 | 4=
bool atomic_flag_test_and_set_explicit(std::atomic_flag* p, 
                                       std::memory_order order) 
{
    return p-&gt;test_and_set(order);
}
}}

===Example===
{{example
 | A spinlock mutex can be implemented in userspace using an atomic_flag
 | code=
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;atomic&gt;

std::atomic_flag lock = ATOMIC_FLAG_INIT;

void f(int n)
{
    for (int cnt = 0; cnt &lt; 100; ++cnt) {
        while(std::atomic_flag_test_and_set_explicit(&amp;lock, std::memory_order_acquire))
             ; // spin until the lock is acquired
        std::cout &lt;&lt; &quot;Output from thread &quot; &lt;&lt; n &lt;&lt; '\n';
        std::atomic_flag_clear_explicit(&amp;lock, std::memory_order_release);
    }
}

int main()
{
    std::vector&lt;std::thread&gt; v;
    for (int n = 0; n &lt; 10; ++n) {
        v.emplace_back(f, n);
    }
    for (auto&amp; t : v) {
        t.join();
    }
}
 | output=
Output from thread 2
Output from thread 6
Output from thread 7
...&lt;exactly 1000 lines&gt;...
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_flag}}
{{dsc inc | cpp/atomic/dsc atomic_flag_clear}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc see c | c/atomic/atomic_flag_test_and_set | atomic_flag_test_and_set | atomic_flag_test_and_set_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic flag test and set]]
[[es:cpp/atomic/atomic flag test and set]]
[[fr:cpp/atomic/atomic flag test and set]]
[[it:cpp/atomic/atomic flag test and set]]
[[ja:cpp/atomic/atomic flag test and set]]
[[pt:cpp/atomic/atomic flag test and set]]
[[ru:cpp/atomic/atomic flag test and set]]
[[zh:cpp/atomic/atomic flag test and set]]</text>
      <sha1>6bzlroyvw0zjnjv4enncimnz73xoqik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic flag/atomic flag</title>
    <ns>0</ns>
    <id>2816</id>
    <revision>
      <id>91395</id>
      <parentid>83534</parentid>
      <timestamp>2017-03-31T19:42:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1319">{{cpp/atomic/atomic_flag/title | atomic_flag}}
{{cpp/atomic/atomic_flag/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl | num=1 | since=c++11 | 1=
atomic_flag();
}}
{{dcl | num=2 | since=c++11 | 1=
atomic_flag( const atomic_flag&amp; ) = delete;
}}
{{dcl end}}

Constructs a new {{lc|std::atomic_flag}}. 

1) Trivial default constructor, initializes {{lc|std::atomic_flag}} to unspecified state.

2) The copy constructor is deleted; {{lc|std::atomic_flag}} is not copyable.

In addition, {{lc|std::atomic_flag}} can be value-initialized to clear state with the expression {{lc|ATOMIC_FLAG_INIT}}. For an atomic_flag with static [[cpp/language/storage_duration#Storage_duration|storage duration]], this guarantees [[cpp/language/initialization#Static_initialization|static initialization]]: the flag can be used in constructors of static objects.

===Exceptions===
@1@ {{unreviewed noexcept}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/atomic/dsc ATOMIC_FLAG_INIT}}
{{dsc end}}

[[de:cpp/atomic/atomic flag/atomic flag]]
[[es:cpp/atomic/atomic flag/atomic flag]]
[[fr:cpp/atomic/atomic flag/atomic flag]]
[[it:cpp/atomic/atomic flag/atomic flag]]
[[ja:cpp/atomic/atomic flag/atomic flag]]
[[pt:cpp/atomic/atomic flag/atomic flag]]
[[ru:cpp/atomic/atomic flag/atomic flag]]
[[zh:cpp/atomic/atomic flag/atomic flag]]</text>
      <sha1>fd6zc5vruebfydnyv689kns6glc0wnl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic flag/clear</title>
    <ns>0</ns>
    <id>2830</id>
    <revision>
      <id>91675</id>
      <parentid>76232</parentid>
      <timestamp>2017-03-31T19:54:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1177">{{cpp/atomic/atomic_flag/title | clear}}
{{cpp/atomic/atomic_flag/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl | num=1 | since=c++11 | 1=
void clear( std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl | num=2 | since=c++11 | 1=
void clear( std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl end}}

Atomically changes the state of a {{lc|std::atomic_flag}} to clear ({{c|false}}). 

===Parameters===

{{par begin}}
{{par | order | the memory synchronization ordering for this operation (cannot be {{lc|std::memory_order_consume}}, {{lc|std::memory_order_acquire}}, or {{lc|std::memory_order_acq_rel}}) }}
{{par end}} 

===Exceptions===
{{unreviewed noexcept}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/atomic/atomic_flag/dsc test_and_set}}
{{dsc inc | cpp/atomic/dsc atomic_flag_clear}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc end}}

[[de:cpp/atomic/atomic flag/clear]]
[[es:cpp/atomic/atomic flag/clear]]
[[fr:cpp/atomic/atomic flag/clear]]
[[it:cpp/atomic/atomic flag/clear]]
[[ja:cpp/atomic/atomic flag/clear]]
[[pt:cpp/atomic/atomic flag/clear]]
[[ru:cpp/atomic/atomic flag/clear]]
[[zh:cpp/atomic/atomic flag/clear]]</text>
      <sha1>rho2lyshaw43al3nxgr86agme71zr7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic flag/operator=</title>
    <ns>0</ns>
    <id>2819</id>
    <revision>
      <id>62673</id>
      <parentid>49335</parentid>
      <timestamp>2013-07-01T23:32:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="727">{{cpp/atomic/atomic_flag/title | operator{{=}}}}
{{cpp/atomic/atomic_flag/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl | num=1 | since=c++11 | 1=
atomic_flag&amp; operator=( const atomic_flag&amp; ) = delete;
}}
{{dcl | num=2 | since=c++11 | 1=
atomic_flag&amp; operator=( const atomic_flag&amp; ) volatile = delete;
}}
{{dcl end}}

{{lc|std::atomic_flag}} is not assignable, its assignment operators are deleted.

[[de:cpp/atomic/atomic flag/operator=]]
[[es:cpp/atomic/atomic flag/operator=]]
[[fr:cpp/atomic/atomic flag/operator=]]
[[it:cpp/atomic/atomic flag/operator=]]
[[ja:cpp/atomic/atomic flag/operator=]]
[[pt:cpp/atomic/atomic flag/operator=]]
[[ru:cpp/atomic/atomic flag/operator=]]
[[zh:cpp/atomic/atomic flag/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic flag/test and set</title>
    <ns>0</ns>
    <id>2831</id>
    <revision>
      <id>91425</id>
      <parentid>65669</parentid>
      <timestamp>2017-03-31T19:43:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1168">{{cpp/atomic/atomic_flag/title | test_and_set}}
{{cpp/atomic/atomic_flag/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl | num=1 | since=c++11 | 1=
bool test_and_set(std::memory_order order = std::memory_order_seq_cst) volatile;
}}
{{dcl | num=2 | since=c++11 | 1=
bool test_and_set(std::memory_order order = std::memory_order_seq_cst);
}}
{{dcl end}}

Atomically changes the state of a {{lc|std::atomic_flag}} to set ({{c|true}}) and returns the value it held before. 

===Parameters===

{{par begin}}
{{par | order | the memory synchronization ordering for this operation }}
{{par end}} 

===Exceptions===
{{unreviewed noexcept}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/atomic/atomic_flag/dsc clear}}
{{dsc inc | cpp/atomic/dsc atomic_flag_test_and_set}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc end}}

[[de:cpp/atomic/atomic flag/test and set]]
[[es:cpp/atomic/atomic flag/test and set]]
[[fr:cpp/atomic/atomic flag/test and set]]
[[it:cpp/atomic/atomic flag/test and set]]
[[ja:cpp/atomic/atomic flag/test and set]]
[[pt:cpp/atomic/atomic flag/test and set]]
[[ru:cpp/atomic/atomic flag/test and set]]
[[zh:cpp/atomic/atomic flag/test and set]]</text>
      <sha1>6d1ih5ubxvwoap20ulm0blk2l4g18fh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic init</title>
    <ns>0</ns>
    <id>9223</id>
    <revision>
      <id>91803</id>
      <parentid>85255</parentid>
      <timestamp>2017-03-31T19:58:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1547">{{cpp/title|atomic_init}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic}}
{{dcl | since=c++11 |
template&lt; class T &gt;
void atomic_init( std::atomic&lt;T&gt;* obj, T desired );
}}
{{dcl | since=c++11 |
template&lt; class T &gt;
void atomic_init( volatile std::atomic&lt;T&gt;* obj, T desired );
}}
{{dcl end}}

Initializes the default-constructed atomic object {{tt|obj}} with the value {{tt|desired}}. The function is not atomic: concurrent access from another thread, even through an atomic operation, is a data race. 

If {{tt|obj}} was not default-constructed, the behavior is undefined.

If this function is called twice on the same {{tt|obj}}, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | obj | pointer to an atomic object to initialize}}
{{par | desired | the value to initialize atomic object with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Notes===
This function is provided for compatibility with C. If the compatibility is not required, {{lc|std::atomic}} may be initialized through their non-default constructors.

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc ATOMIC_VAR_INIT}}
{{dsc inc | cpp/atomic/atomic/dsc constructor}}
{{dsc see c | c/atomic/atomic_init}}
{{dsc end}}

[[de:cpp/atomic/atomic init]]
[[es:cpp/atomic/atomic init]]
[[fr:cpp/atomic/atomic init]]
[[it:cpp/atomic/atomic init]]
[[ja:cpp/atomic/atomic init]]
[[pt:cpp/atomic/atomic init]]
[[ru:cpp/atomic/atomic init]]
[[zh:cpp/atomic/atomic init]]</text>
      <sha1>m94vv4nn0lldauysb0iqx0mglzxhywq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic is lock free</title>
    <ns>0</ns>
    <id>6729</id>
    <revision>
      <id>91993</id>
      <parentid>91477</parentid>
      <timestamp>2017-04-01T05:38:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="3624">{{title|{{dsc small|std::}}atomic_is_lock_free, ATOMIC_xxx_LOCK_FREE}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 1=
template&lt; class T &gt;
bool atomic_is_lock_free( const volatile std::atomic&lt;T&gt;* obj );
}}
{{dcl | 1=
template&lt; class T &gt;
bool atomic_is_lock_free( const std::atomic&lt;T&gt;* obj );
}}
{{dcl rev end}}
{{dcl | num=2 | since=c++11 | 1=
#define ATOMIC_BOOL_LOCK_FREE     /* unspecified */
#define ATOMIC_CHAR_LOCK_FREE     /* unspecified */
#define ATOMIC_CHAR16_T_LOCK_FREE /* unspecified */
#define ATOMIC_CHAR32_T_LOCK_FREE /* unspecified */
#define ATOMIC_WCHAR_T_LOCK_FREE  /* unspecified */
#define ATOMIC_SHORT_LOCK_FREE    /* unspecified */
#define ATOMIC_INT_LOCK_FREE      /* unspecified */
#define ATOMIC_LONG_LOCK_FREE     /* unspecified */
#define ATOMIC_LLONG_LOCK_FREE    /* unspecified */
#define ATOMIC_POINTER_LOCK_FREE  /* unspecified */
}}
{{dcl end}}

@1@ Determines if the atomic object pointed to by {{tt|obj}} is implemented lock-free, as if by calling {{c|obj-&gt;is_lock_free()}}. In any given program execution, the result of the lock-free query is the same for all pointers of the same type.{{mark unreviewed dr|LWG}}&lt;!-- LWG 1146 &amp; N2992 --&gt;

@2@ Expands to an integer constant expression with value
* {{c|0}} for the built-in atomic types that are never lock-free
* {{c|1}} for the built-in atomic types that are ''sometimes'' lock-free
* {{c|2}} for the built-in atomic types that are always lock-free.

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to examine}}
{{par end}} 

===Return value===
{{c|true}} if {{c|*obj}} is a lock-free atomic, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
All atomic types except for {{lc|std::atomic_flag}} may be implemented using mutexes or other locking operations, rather than using the lock-free atomic CPU instructions. Atomic types are also allowed to be ''sometimes'' lock-free, e.g. if only aligned memory accesses are naturally atomic on a given architecture, misaligned objects of the same type have to use locks.

The C++ standard recommends (but does not require) that lock-free atomic operations are also address-free, that is, suitable for communication between processes using shared memory.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;atomic&gt;

struct A { int a[100]; };
struct B { int x, y; };
int main()
{
    std::atomic&lt;A&gt; a;
    std::atomic&lt;B&gt; b;
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;std::atomic&lt;A&gt; is lock free? &quot;
              &lt;&lt; std::atomic_is_lock_free(&amp;a) &lt;&lt; '\n'
              &lt;&lt; &quot;std::atomic&lt;B&gt; is lock free? &quot;
              &lt;&lt; std::atomic_is_lock_free(&amp;b) &lt;&lt; '\n';
}
|p=true
|output=
std::atomic&lt;A&gt; is lock free? false
std::atomic&lt;B&gt; is lock free? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc is_lock_free | mem=std::atomic&lt;T&gt;}}
{{dsc tfun | cpp/memory/shared_ptr/atomic | title=std::atomic_is_lock_free{{dsc small|(std::shared_ptr)}} | specializes atomic operations for {{lc|std::shared_ptr}} }}
{{dsc inc | cpp/atomic/dsc atomic_flag}}
{{dsc inc | cpp/atomic/atomic/dsc is_always_lock_free}}
{{dsc see c | c/atomic/atomic_is_lock_free}}
{{dsc see c | c/atomic/ATOMIC_LOCK_FREE_consts | ATOMIC_*_LOCK_FREE}}
{{dsc end}}

[[de:cpp/atomic/atomic is lock free]]
[[es:cpp/atomic/atomic is lock free]]
[[fr:cpp/atomic/atomic is lock free]]
[[it:cpp/atomic/atomic is lock free]]
[[ja:cpp/atomic/atomic is lock free]]
[[pt:cpp/atomic/atomic is lock free]]
[[ru:cpp/atomic/atomic is lock free]]
[[zh:cpp/atomic/atomic is lock free]]</text>
      <sha1>31o5wn5cdif93ez4rr83ud3ndvkeqr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic load</title>
    <ns>0</ns>
    <id>4720</id>
    <revision>
      <id>91445</id>
      <parentid>76085</parentid>
      <timestamp>2017-03-31T19:44:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2029">{{cpp/title|atomic_load|atomic_load_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
T atomic_load( const std::atomic&lt;T&gt;* obj );
}}
{{dcl | 
template&lt; class T &gt;
T atomic_load( const volatile std::atomic&lt;T&gt;* obj );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
T atomic_load_explicit( const std::atomic&lt;T&gt;* obj, 
                        std::memory_order order );
}}
{{dcl | 
template&lt; class T &gt;
T atomic_load_explicit( const volatile std::atomic&lt;T&gt;* obj, 
                        std::memory_order order );
}}
{{dcl rev end}}

{{dcl end}}

@1@ Atomically obtains the value pointed to by {{tt|obj}} as if by {{c|obj-&gt;load()}}

@2@ Atomically obtains the value pointed to by {{tt|obj}} as if by {{c|obj-&gt;load(order)}}

===Parameters===
{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | order | the memory synchronization ordering for this operation: only {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_consume}}, {{lc|std::memory_order_acquire}} and {{lc|std::memory_order_seq_cst}} are permitted.}}
{{par end}} 

===Return value===
The value that is held by the atomic object pointed to by {{tt|obj}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc load | mem=std::atomic&lt;T&gt;}}
{{dsc inc | cpp/atomic/dsc atomic_store}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc tfun | cpp/memory/shared_ptr/atomic | title=std::atomic_load{{dsc small|(std::shared_ptr)}}
&lt;br&gt;std::atomic_load_explicit{{dsc small|(std::shared_ptr)}} | specializes atomic operations for std::shared_ptr }}
{{dsc see c | c/atomic/atomic_load | atomic_load | atomic_load_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic load]]
[[es:cpp/atomic/atomic load]]
[[fr:cpp/atomic/atomic load]]
[[it:cpp/atomic/atomic load]]
[[ja:cpp/atomic/atomic load]]
[[pt:cpp/atomic/atomic load]]
[[ru:cpp/atomic/atomic load]]
[[zh:cpp/atomic/atomic load]]</text>
      <sha1>7n6cbtjssq3t35flov09hkr3dg14pjv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic signal fence</title>
    <ns>0</ns>
    <id>2970</id>
    <revision>
      <id>91393</id>
      <parentid>88727</parentid>
      <timestamp>2017-03-31T19:42:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1554">{{cpp/title | atomic_signal_fence }}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl | since=c++11 | 1=
extern &quot;C&quot; void atomic_signal_fence( std::memory_order order );
}}
{{dcl end}}

Establishes memory synchronization ordering of non-atomic and relaxed atomic accesses, as instructed by {{tt|order}}, between a thread and a signal handler executed on the same thread. This is equivalent to {{lc|std::atomic_thread_fence}}, except no CPU instructions for memory ordering are issued. Only reordering of the instructions by the compiler is suppressed as {{tt|order}} instructs. For example, a fence with release semantics prevents reads or writes from being moved past subsequent writes and a fence with acquire semantics prevents reads or writes from being moved ahead of preceding reads.

===Parameters===
{{par begin}}
{{par | order | the memory ordering executed by this fence}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}} &lt;!-- adapt from http://stackoverflow.com/a/14594071/273767 --&gt;

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc inc | cpp/atomic/dsc atomic_thread_fence}}
{{dsc see c | c/atomic/atomic_signal_fence}}
{{dsc end}}

[[de:cpp/atomic/atomic signal fence]]
[[es:cpp/atomic/atomic signal fence]]
[[fr:cpp/atomic/atomic signal fence]]
[[it:cpp/atomic/atomic signal fence]]
[[ja:cpp/atomic/atomic signal fence]]
[[pt:cpp/atomic/atomic signal fence]]
[[ru:cpp/atomic/atomic signal fence]]
[[zh:cpp/atomic/atomic signal fence]]</text>
      <sha1>sf1534dxwk46jn3jn0x5kkxckp0jw0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic store</title>
    <ns>0</ns>
    <id>4707</id>
    <revision>
      <id>91380</id>
      <parentid>67616</parentid>
      <timestamp>2017-03-31T19:41:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2115">{{cpp/title|atomic_store|atomic_store_explicit}}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
void atomic_store( std::atomic&lt;T&gt;* obj, T desr );
}}
{{dcl | 
template&lt; class T &gt;
void atomic_store( volatile std::atomic&lt;T&gt;* obj, T desr );
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 
template&lt; class T &gt;
void atomic_store_explicit( std::atomic&lt;T&gt;* obj, T desr, 
                            std::memory_order order);
}}
{{dcl | 
template&lt; class T &gt;
void atomic_store_explicit( volatile std::atomic&lt;T&gt;* obj, T desr, 
                            std::memory_order order);
}}
{{dcl rev end}}
{{dcl end}}

@1@ Atomically replaces the value pointed to by {{tt|obj}} with the value of {{tt|desr}} as if by {{c|obj-&gt;store(desr)}}

@2@ Atomically replaces the value pointed to by {{tt|obj}} with the value of {{tt|desr}} as if by {{c|obj-&gt;store(desr, order)}}

===Parameters===

{{par begin}}
{{par | obj | pointer to the atomic object to modify}}
{{par | desr | the value to store in the atomic object}}
{{par | order | the memory synchronization ordering for this operation: only {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_release}} and {{lc|std::memory_order_seq_cst}} are permitted.}}
{{par end}} 

===Return value===
none.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc store | mem=std::atomic&lt;T&gt;}}
{{dsc inc | cpp/atomic/dsc atomic_load}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc tfun | cpp/memory/shared_ptr/atomic | title=std::atomic_store{{dsc small|(std::shared_ptr)}}
&lt;br&gt;std::atomic_store_explicit{{dsc small|(std::shared_ptr)}} | specializes atomic operations for {{lc|std::shared_ptr}} }}
{{dsc see c | c/atomic/atomic_store | atomic_store | atomic_store_explicit}}
{{dsc end}}

[[de:cpp/atomic/atomic store]]
[[es:cpp/atomic/atomic store]]
[[fr:cpp/atomic/atomic store]]
[[it:cpp/atomic/atomic store]]
[[ja:cpp/atomic/atomic store]]
[[pt:cpp/atomic/atomic store]]
[[ru:cpp/atomic/atomic store]]
[[zh:cpp/atomic/atomic store]]</text>
      <sha1>ez1c73sa69hjlccs0lmfdz6cwlrv2d5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic thread fence</title>
    <ns>0</ns>
    <id>2969</id>
    <revision>
      <id>91381</id>
      <parentid>87248</parentid>
      <timestamp>2017-03-31T19:41:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="5916">{{cpp/title | atomic_thread_fence }}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl | since=c++11 | 1=
extern &quot;C&quot; void atomic_thread_fence( std::memory_order order );
}}
{{dcl end}}

Establishes [[cpp/atomic/memory_order|memory synchronization ordering]] of non-atomic and relaxed atomic accesses, as instructed by {{tt|order}}, without an associated atomic operation.

====Fence-atomic synchronization====
A release fence F in thread A synchronizes-with atomic [[cpp/atomic/memory_order|acquire operation]] Y in thread B, if

* there exists an atomic store X (with any memory order)
* Y reads the value written by X (or the value would be written by [[cpp/atomic/memory_order|release sequence headed by X]] if X were a release operation)
* F is sequenced-before X in thread A

In this case, all non-atomic and relaxed atomic stores that [[cpp/atomic/memory_order|happen-before]] X in thread A will be [[cpp/atomic/memory_order|synchronized-with]] all non-atomic and relaxed atomic loads from the same locations made in thread B after F.

====Atomic-fence synchronization====
An atomic [[cpp/atomic/memory_order|release operation]] X in thread A synchronizes-with an acquire fence F in thread B, if

* there exists an atomic read Y (with any memory order)
* Y reads the value written by X (or by the [[cpp/atomic/memory_order|release sequence headed by X]])
* Y is sequenced-before F in thread B

In this case, all non-atomic and relaxed atomic stores that [[cpp/atomic/memory_order|happen-before]] X in thread A will be [[cpp/atomic/memory_order|synchronized-with]] all non-atomic and relaxed atomic loads from the same locations made in thread B after F.

====Fence-fence synchronization====
A release fence FA in thread A synchronizes-with an acquire fence FB in thread B, if

* There exists an atomic object M,
* There exists an atomic write X (with any memory order) that modifies M in thread A
* FA is sequenced-before X in thread A
* There exists an atomic read Y (with any memory order) in thread B
* Y reads the value written by X (or the value would be written by [[cpp/atomic/memory_order|release sequence headed by X]] if X were a release operation)
* Y is sequenced-before FB in thread B

In this case, all non-atomic and relaxed atomic stores that [[cpp/atomic/memory_order|happen-before]] FA in thread A will be [[cpp/atomic/memory_order|synchronized-with]] all non-atomic and relaxed atomic loads from the same locations made in thread B after FB

===Parameters===
{{par begin}}
{{par | order | the memory ordering executed by this fence}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Notes===
{{tt|atomic_thread_fence}} imposes stronger synchronization constraints than an atomic store operation with the same {{lc|std::memory_order}}. While an atomic store-release operation prevents all preceding writes from moving past the store-release, an {{tt|atomic_thread_fence}} with {{tt|memory_order_release}} ordering prevents all preceding writes from moving past all subsequent stores.

Fence-fence synchronization can be used to add synchronization to a sequence of several relaxed atomic operations, for example 
{{source|1=

//Global
std::string computation(int);
void print( std::string );

std::atomic&lt;int&gt; arr[3] = { -1, -1, -1 };
std::string data[1000] //non-atomic data

// Thread A, compute 3 values
void ThreadA( int v0, int v1, int v2 )
{
//assert( 0 &lt;= v0, v1, v2 &lt; 1000 );
data[v0] = computation(v0);
data[v1] = computation(v1);
data[v2] = computation(v2);
std::atomic_thread_fence(std::memory_order_release);
std::atomic_store_explicit(&amp;arr[0], v0, std::memory_order_relaxed);
std::atomic_store_explicit(&amp;arr[1], v1, std::memory_order_relaxed);
std::atomic_store_explicit(&amp;arr[2], v2, std::memory_order_relaxed);
}

// Thread B, prints between 0 and 3 values already computed.
void ThreadB()
{
int v0 = std::atomic_load_explicit(&amp;arr[0], std::memory_order_relaxed);
int v1 = std::atomic_load_explicit(&amp;arr[1], std::memory_order_relaxed);
int v2 = std::atomic_load_explicit(&amp;arr[2], std::memory_order_relaxed);
std::atomic_thread_fence(std::memory_order_acquire);
// v0, v1, v2 might turn out to be -1, some or all of them.
// otherwise it is safe to read the non-atomic data because of the fences:
if( v0 != -1 ) { print( data[v0] ); }
if( v1 != -1 ) { print( data[v1] ); }
if( v2 != -1 ) { print( data[v2] ); }
}
}}

===Examples===
{{example
 | Scan an array of mailboxes, and process only the ones intended for us, without unnecessary synchronization.
This example uses atomic-fence synchronization.
 | code=
const int num_mailboxes = 32;
std::atomic&lt;int&gt; mailbox_receiver[num_mailboxes];
std::string mailbox_data[num_mailboxes];

// The writer threads update non-atomic shared data 
// and then update mailbox_receiver[i] as follows
mailbox_data[i] = ...;
std::atomic_store_explicit(&amp;mailbox_receiver[i], receiver_id, std::memory_order_release);

// Reader thread needs to check all mailbox[i], but only needs to sync with one
for (int i = 0; i &lt; num_mailboxes; ++i) {
    if (std::atomic_load_explicit(&amp;mailbox_receiver[i], std::memory_order_relaxed) == my_id) {
        std::atomic_thread_fence(std::memory_order_acquire); // synchronize with just one writer
        do_work( mailbox_data[i] ); // guaranteed to observe everything done in the writer thread before
                    // the atomic_store_explicit()
    }
 }

 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc inc | cpp/atomic/dsc atomic_signal_fence}}
{{dsc see c | c/atomic/atomic_thread_fence}}
{{dsc end}}

[[de:cpp/atomic/atomic thread fence]]
[[es:cpp/atomic/atomic thread fence]]
[[fr:cpp/atomic/atomic thread fence]]
[[it:cpp/atomic/atomic thread fence]]
[[ja:cpp/atomic/atomic thread fence]]
[[pt:cpp/atomic/atomic thread fence]]
[[ru:cpp/atomic/atomic thread fence]]
[[zh:cpp/atomic/atomic thread fence]]</text>
      <sha1>fpjo8emow5k7ui2kcwhwm7w3y0if7ha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/atomic</title>
    <ns>0</ns>
    <id>9224</id>
    <revision>
      <id>91317</id>
      <parentid>89168</parentid>
      <timestamp>2017-03-31T19:40:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1311">{{cpp/atomic/atomic/title|atomic}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
atomic() = default;
}}
{{dcl | since=c++11 | num=2 |
constexpr atomic( T desired );
}}
{{dcl | since=c++11 | num=3 | 1=
atomic( const atomic&amp; ) = delete;
}}
{{dcl end}}

Constructs new atomic variable.
@1@ The default constructor is trivial: no initialization takes place other than [[cpp/language/zero_initialization|zero initialization]] of static and thread-local objects. {{lc|std::atomic_init}} may be used to complete initialization.
@2@ Initializes the underlying value with {{tt|desired}}. The initialization is not atomic.
@3@ Atomic variables are not {{concept|CopyConstructible}}.

===Parameters===
{{par begin}}
{{par | desired | value to initialize with}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The default-initialized {{c|std::atomic&lt;T&gt;}} does not contain a {{tt|T}} object, and its only valid uses are destruction and initialization by {{lc|std::atomic_init}}, see [http://wg21.link/lwg2334 LWG 2334]

[[de:cpp/atomic/atomic/atomic]]
[[es:cpp/atomic/atomic/atomic]]
[[fr:cpp/atomic/atomic/atomic]]
[[it:cpp/atomic/atomic/atomic]]
[[ja:cpp/atomic/atomic/atomic]]
[[pt:cpp/atomic/atomic/atomic]]
[[ru:cpp/atomic/atomic/atomic]]
[[zh:cpp/atomic/atomic/atomic]]</text>
      <sha1>6jtmhrvtz1gocewbkrf5jsypav2taj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/compare exchange</title>
    <ns>0</ns>
    <id>5628</id>
    <revision>
      <id>91532</id>
      <parentid>89939</parentid>
      <timestamp>2017-03-31T19:49:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="7068">{{cpp/atomic/title|compare_exchange_weak|compare_exchange_strong}}
{{cpp/atomic/atomic/navbar}}

{{dcl begin}}
{{dcl header | atomic}}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 1=
bool compare_exchange_weak( T&amp; expected, T desired,
                            std::memory_order success, 
                            std::memory_order failure );
}}
{{dcl | 1=
bool compare_exchange_weak( T&amp; expected, T desired,
                            std::memory_order success, 
                            std::memory_order failure ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 1=
bool compare_exchange_weak( T&amp; expected, T desired,
                            std::memory_order order =
                                std::memory_order_seq_cst );
}}
{{dcl | 1=
bool compare_exchange_weak( T&amp; expected, T desired,
                            std::memory_order order =
                                std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=3 | since=c++11}}
{{dcl | 1=
bool compare_exchange_strong( T&amp; expected, T desired,
                              std::memory_order success, 
                              std::memory_order failure );
}}
{{dcl | 1=
bool compare_exchange_strong( T&amp; expected, T desired,
                              std::memory_order success, 
                              std::memory_order failure ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=4 | since=c++11}}
{{dcl | 1=
bool compare_exchange_strong( T&amp; expected, T desired,
                              std::memory_order order = 
                                  std::memory_order_seq_cst );
}}
{{dcl | 1=
bool compare_exchange_strong( T&amp; expected, T desired,
                              std::memory_order order = 
                                  std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically compares the [[cpp/language/object|object representation]] of {{tt|*this}} with the object representation of {{tt|expected}}, as if by {{lc|std::memcmp}}, and if those are bitwise-equal, replaces the former with {{tt|desired}} (performs read-modify-write operation). Otherwise, loads the actual value stored in {{tt|*this}} into {{tt|expected}} (performs load operation). Copying is performed as if by {{lc|std::memcpy}}.

The memory models for the read-modify-write and load operations are {{tt|success}} and {{tt|failure}} respectively. In the (2) and (4) versions {{tt|order}} is used for both read-modify-write and load operations, except that {{lc|std::memory_order_acquire}} and {{lc|std::memory_order_relaxed}} are used for the load operation if {{c|1=order == std::memory_order_acq_rel}}, or {{c|1=order == std::memory_order_release}} respectively.

===Parameters===
{{par begin}}
{{par | expected | reference to the value expected to be found in the atomic object}}
{{par | desired | the value to store in the atomic object if it is as expected}}
{{par | success | the memory synchronization ordering for the read-modify-write operation if the comparison succeeds. All values are permitted. }}
{{par | failure | the memory synchronization ordering for the load operation if the comparison fails. Cannot be {{lc|std::memory_order_release}} or {{lc|std::memory_order_acq_rel}}{{rev inl|until=c++17| and cannot specify stronger ordering than {{tt|success}}}}}}
{{par | order | the memory synchronization ordering for both operations}}
{{par end}}

===Return value===
{{c|true}} if the underlying atomic value was successfully changed, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The weak forms (1-2) of the functions are allowed to fail spuriously, that is, act as if {{c|1=*this != expected}} even if they are equal. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms.

When a weak compare-and-exchange would require a loop and a strong one would not, the strong one is preferable unless the object representation of {{tt|T}} may include padding bits, trap bits, or offers multiple object representations for the same value (e.g. floating-point NaN). In those cases, weak compare-and-exchange typically works because it quickly converges on some stable object representation.

===Example===
{{example
 | Compare-and-exchange operations are often used as basic building blocks of lockfree data structures
 | code=
#include &lt;atomic&gt;
template&lt;typename T&gt;
struct node
{
    T data;
    node* next;
    node(const T&amp; data) : data(data), next(nullptr) {}
};

template&lt;typename T&gt;
class stack
{
    std::atomic&lt;node&lt;T&gt;*&gt; head;
 public:
    void push(const T&amp; data)
    {
      node&lt;T&gt;* new_node = new node&lt;T&gt;(data);

      // put the current value of head into new_node-&gt;next
      new_node-&gt;next = head.load(std::memory_order_relaxed);

      // now make new_node the new head, but if the head
      // is no longer what's stored in new_node-&gt;next
      // (some other thread must have inserted a node just now)
      // then put that new head into new_node-&gt;next and try again
      while(!head.compare_exchange_weak(new_node-&gt;next, new_node,
                                        std::memory_order_release,
                                        std::memory_order_relaxed))
          ; // the body of the loop is empty

// Note: the above use is not thread-safe in at least 
// GCC prior to 4.8.3 (bug 60272), clang prior to 2014-05-05 (bug 18899)
// MSVC prior to 2014-03-17 (bug 819819). The following is a workaround:
//      node&lt;T&gt;* old_head = head.load(std::memory_order_relaxed);
//      do {
//          new_node-&gt;next = old_head;
//       } while(!head.compare_exchange_weak(old_head, new_node,
//                                           std::memory_order_release,
//                                           std::memory_order_relaxed));
    }
};
int main()
{
    stack&lt;int&gt; s;
    s.push(1);
    s.push(2);
    s.push(3);
}
}}


{{example
 | Demonstrates how compare_exchange_strong either changes the value of the atomic variable or the variable used for comparison.{{todo|more practical use of the strong CAS would be nice, such as where Concurrency in Action uses it}}
 | code=
#include &lt;atomic&gt;
#include &lt;iostream&gt;

std::atomic&lt;int&gt;  ai;

int  tst_val= 4;
int  new_val= 5;
bool exchanged= false;

void valsout()
{
    std::cout &lt;&lt; &quot;ai= &quot; &lt;&lt; ai
	      &lt;&lt; &quot;  tst_val= &quot; &lt;&lt; tst_val
	      &lt;&lt; &quot;  new_val= &quot; &lt;&lt; new_val
	      &lt;&lt; &quot;  exchanged= &quot; &lt;&lt; std::boolalpha &lt;&lt; exchanged
	      &lt;&lt; &quot;\n&quot;;
}

int main()
{
    ai= 3;
    valsout();

    // tst_val != ai   ==&gt;  tst_val is modified
    exchanged= ai.compare_exchange_strong( tst_val, new_val );
    valsout();

    // tst_val == ai   ==&gt;  ai is modified
    exchanged= ai.compare_exchange_strong( tst_val, new_val );
    valsout();
}
 | output=
ai= 3  tst_val= 4  new_val= 5  exchanged= false
ai= 3  tst_val= 3  new_val= 5  exchanged= false
ai= 5  tst_val= 3  new_val= 5  exchanged= true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_compare_exchange}}
{{dsc end}}

{{langlinks|de|es|fr|it|ja|pt|ru|zh}}</text>
      <sha1>olczv6qk4qmvbgcg7t0sq87mkisrrnh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/exchange</title>
    <ns>0</ns>
    <id>9230</id>
    <revision>
      <id>91695</id>
      <parentid>75667</parentid>
      <timestamp>2017-03-31T19:55:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1106">{{cpp/atomic/atomic/title|exchange}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11}}
{{dcl | 1=
T exchange( T desired, std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T exchange( T desired, std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the underlying value with {{tt|desired}}. The operation is read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

===Parameters===
{{par begin}}
{{par | desired | value to assign}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value of the atomic variable before the call.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_exchange}}
{{dsc end}}

[[de:cpp/atomic/atomic/exchange]]
[[es:cpp/atomic/atomic/exchange]]
[[fr:cpp/atomic/atomic/exchange]]
[[it:cpp/atomic/atomic/exchange]]
[[ja:cpp/atomic/atomic/exchange]]
[[pt:cpp/atomic/atomic/exchange]]
[[ru:cpp/atomic/atomic/exchange]]
[[zh:cpp/atomic/atomic/exchange]]</text>
      <sha1>rcx91yjy7ablkt0irnkdktqcazu2v8o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/fetch add</title>
    <ns>0</ns>
    <id>9237</id>
    <revision>
      <id>91452</id>
      <parentid>81856</parentid>
      <timestamp>2017-03-31T19:45:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2529">{{cpp/atomic/atomic/title|fetch_add}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T fetch_add( T arg, 
             std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T fetch_add( T arg, 
             std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}}}
{{dcl | 1=
T* fetch_add( std::ptrdiff_t arg, 
              std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T* fetch_add( std::ptrdiff_t arg, 
              std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the current value with the result of arithmetic addition of the value and {{tt|arg}}. The operation is read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

For signed {{tt|Integral}} types, arithmetic is defined to use two’s complement representation. There
are no undefined results. For {{tt|T*}} types, the result may be an undefined address, but the operations otherwise have no undefined behavior.

===Parameters===
{{par begin}}
{{par | arg | the other argument of arithmetic addition}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}}.
 
===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;atomic&gt;

std::atomic&lt;long long&gt; data;
void do_work()
{
    data.fetch_add(1, std::memory_order_relaxed);
}

int main()
{
    std::thread th1(do_work);
    std::thread th2(do_work);
    std::thread th3(do_work);
    std::thread th4(do_work);
    std::thread th5(do_work);
    
    th1.join();
    th2.join();
    th3.join();
    th4.join();
    th5.join();

    std::cout &lt;&lt; &quot;Result:&quot; &lt;&lt; data &lt;&lt; '\n';
}
 | output=
Result:5
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_add}}
{{dsc end}}

[[de:cpp/atomic/atomic/fetch add]]
[[es:cpp/atomic/atomic/fetch add]]
[[fr:cpp/atomic/atomic/fetch add]]
[[it:cpp/atomic/atomic/fetch add]]
[[ja:cpp/atomic/atomic/fetch add]]
[[pt:cpp/atomic/atomic/fetch add]]
[[ru:cpp/atomic/atomic/fetch add]]
[[zh:cpp/atomic/atomic/fetch add]]</text>
      <sha1>cnt8mov6l3xftked646xvyxp6pir7h8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/fetch and</title>
    <ns>0</ns>
    <id>9236</id>
    <revision>
      <id>91714</id>
      <parentid>81858</parentid>
      <timestamp>2017-03-31T19:55:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1373">{{cpp/atomic/atomic/title|fetch_and}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T fetch_and( T arg, 
             std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T fetch_and( T arg, 
             std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the current value with the result of bitwise AND of the value and {{tt|arg}}. The operation is read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

===Parameters===
{{par begin}}
{{par | arg | the other argument of bitwise AND}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}}.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_and}}
{{dsc end}}

[[de:cpp/atomic/atomic/fetch and]]
[[es:cpp/atomic/atomic/fetch and]]
[[fr:cpp/atomic/atomic/fetch and]]
[[it:cpp/atomic/atomic/fetch and]]
[[ja:cpp/atomic/atomic/fetch and]]
[[pt:cpp/atomic/atomic/fetch and]]
[[ru:cpp/atomic/atomic/fetch and]]
[[zh:cpp/atomic/atomic/fetch and]]</text>
      <sha1>rqevhf25dywdcssxxqfcwe1zmi65epk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/fetch or</title>
    <ns>0</ns>
    <id>9235</id>
    <revision>
      <id>91379</id>
      <parentid>81859</parentid>
      <timestamp>2017-03-31T19:41:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1358">{{cpp/atomic/atomic/title|fetch_or}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T fetch_or( T arg, 
            std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T fetch_or( T arg, 
            std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the current value with the result of bitwise OR of the value and {{tt|arg}}. The operation is read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

===Parameters===
{{par begin}}
{{par | arg | the other argument of bitwise OR}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}}.
 
===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_or}}
{{dsc end}}

[[de:cpp/atomic/atomic/fetch or]]
[[es:cpp/atomic/atomic/fetch or]]
[[fr:cpp/atomic/atomic/fetch or]]
[[it:cpp/atomic/atomic/fetch or]]
[[ja:cpp/atomic/atomic/fetch or]]
[[pt:cpp/atomic/atomic/fetch or]]
[[ru:cpp/atomic/atomic/fetch or]]
[[zh:cpp/atomic/atomic/fetch or]]</text>
      <sha1>ns0gjgsn3mxfx1sv4jbvbqkqzhakryj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/fetch sub</title>
    <ns>0</ns>
    <id>9238</id>
    <revision>
      <id>91451</id>
      <parentid>81857</parentid>
      <timestamp>2017-03-31T19:45:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2012">{{cpp/atomic/atomic/title|fetch_sub}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T fetch_sub( T arg, 
             std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T fetch_sub( T arg, 
             std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}}}
{{dcl | 1=
T* fetch_sub( std::ptrdiff_t arg, 
              std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T* fetch_sub( std::ptrdiff_t arg, 
              std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the current value with the result of arithmetic subtraction of the value and {{tt|arg}}. The operation is read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

For signed {{tt|Integral}} types, arithmetic is defined to use two’s complement representation. There
are no undefined results. For {{tt|T*}} types, the result may be an undefined address, but the operations otherwise have no undefined behavior.

===Parameters===
{{par begin}}
{{par | arg | the other argument of arithmetic subtraction}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}}.
 
===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_sub}}
{{dsc end}}

[[de:cpp/atomic/atomic/fetch sub]]
[[es:cpp/atomic/atomic/fetch sub]]
[[fr:cpp/atomic/atomic/fetch sub]]
[[it:cpp/atomic/atomic/fetch sub]]
[[ja:cpp/atomic/atomic/fetch sub]]
[[pt:cpp/atomic/atomic/fetch sub]]
[[ru:cpp/atomic/atomic/fetch sub]]
[[zh:cpp/atomic/atomic/fetch sub]]</text>
      <sha1>a5vvu8oo7es5ybyuscrj16hdxfkmip1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/fetch xor</title>
    <ns>0</ns>
    <id>9234</id>
    <revision>
      <id>91595</id>
      <parentid>81860</parentid>
      <timestamp>2017-03-31T19:51:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1374">{{cpp/atomic/atomic/title|fetch_xor}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T fetch_xor( T arg, 
             std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
T fetch_xor( T arg, 
             std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the current value with the result of bitwise XOR of the value and {{tt|arg}}. The operation is read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

===Parameters===
{{par begin}}
{{par | arg | the other argument of bitwise XOR}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}}.
 
===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_xor}}
{{dsc end}}

[[de:cpp/atomic/atomic/fetch xor]]
[[es:cpp/atomic/atomic/fetch xor]]
[[fr:cpp/atomic/atomic/fetch xor]]
[[it:cpp/atomic/atomic/fetch xor]]
[[ja:cpp/atomic/atomic/fetch xor]]
[[pt:cpp/atomic/atomic/fetch xor]]
[[ru:cpp/atomic/atomic/fetch xor]]
[[zh:cpp/atomic/atomic/fetch xor]]</text>
      <sha1>9upaaw2vpkelr67mg1vlgnt97h95jrf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/is always lock free</title>
    <ns>0</ns>
    <id>14753</id>
    <revision>
      <id>83824</id>
      <timestamp>2016-03-08T20:14:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1345">{{cpp/atomic/atomic/title|is_always_lock_free}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
static constexpr bool is_always_lock_free {{=}} /*implementation-defined*/;
}}
{{dcl end}}

Equals {{tt|true}} if this atomic type is always lock-free and {{tt|false}} if it is never or sometimes lock-free.

The value of this constant is consistent with both the macro {{tt|ATOMIC_xxx_LOCK_FREE}}, where defined, with the member function {{lc|is_lock_free}} and non-member function {{lc|std::atomic_is_lock_free}}.

===Notes===
There is no non-member function equivalent of this static member constant because non-member functions take pointers to atomic types, and therefore aren't as useful in [[cpp/language/constant expression|constant expressions]].

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc is_lock_free | mem=std::atomic&lt;T&gt;}}
{{dsc inc | cpp/atomic/dsc atomic_is_lock_free}}
{{dsc inc | cpp/atomic/atomic/dsc is_always_lock_free}}
{{dsc end}}

[[de:cpp/atomic/atomic/is_always_lock_free]]
[[es:cpp/atomic/atomic/is_always_lock_free]]
[[fr:cpp/atomic/atomic/is_always_lock_free]]
[[it:cpp/atomic/atomic/is_always_lock_free]]
[[ja:cpp/atomic/atomic/is_always_lock_free]]
[[pt:cpp/atomic/atomic/is_always_lock_free]]
[[ru:cpp/atomic/atomic/is_always_lock_free]]
[[zh:cpp/atomic/atomic/is_always_lock_free]]</text>
      <sha1>1j5mkkzlud2m09m2xfe5qfbpavpupmm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/is lock free</title>
    <ns>0</ns>
    <id>9226</id>
    <revision>
      <id>91385</id>
      <parentid>86844</parentid>
      <timestamp>2017-03-31T19:42:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2006">{{cpp/atomic/atomic/title|is_lock_free}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11}}
{{dcl | 
bool is_lock_free() const;
}}
{{dcl | 
bool is_lock_free() const volatile;
}}
{{dcl rev end}}
{{dcl end}}

Checks whether the atomic operations on all objects of this type are lock-free.

===Parameters===
(none)

===Return value===
{{c|true}} if the atomic operations on the objects of this type are lock-free, {{c|false}} otherwise.

===Notes===
All atomic types except for {{lc|std::atomic_flag}} may be implemented using mutexes or other locking operations, rather than using the lock-free atomic CPU instructions. Atomic types are also allowed to be ''sometimes'' lock-free, e.g. if only aligned memory accesses are naturally atomic on a given architecture, misaligned objects of the same type have to use locks.

The C++ standard recommends (but does not require) that lock-free atomic operations are also address-free, that is, suitable for communication between processes using shared memory.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;atomic&gt;

struct A { int a[100]; };
struct B { int x, y; };
int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;std::atomic&lt;A&gt; is lock free? &quot;
              &lt;&lt; std::atomic&lt;A&gt;{}.is_lock_free() &lt;&lt; '\n'
              &lt;&lt; &quot;std::atomic&lt;B&gt; is lock free? &quot;
              &lt;&lt; std::atomic&lt;B&gt;{}.is_lock_free() &lt;&lt; '\n';
}
|p=true
|output=
std::atomic&lt;A&gt; is lock free? false
std::atomic&lt;B&gt; is lock free? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_is_lock_free}}
{{dsc inc | cpp/atomic/atomic/dsc is_always_lock_free}}
{{dsc end}}

[[de:cpp/atomic/atomic/is lock free]]
[[es:cpp/atomic/atomic/is lock free]]
[[fr:cpp/atomic/atomic/is lock free]]
[[it:cpp/atomic/atomic/is lock free]]
[[ja:cpp/atomic/atomic/is lock free]]
[[pt:cpp/atomic/atomic/is lock free]]
[[ru:cpp/atomic/atomic/is lock free]]
[[zh:cpp/atomic/atomic/is lock free]]</text>
      <sha1>spizvbkzc4lh4y5aj0vnu5fikgpcxfe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/load</title>
    <ns>0</ns>
    <id>9228</id>
    <revision>
      <id>91591</id>
      <parentid>75668</parentid>
      <timestamp>2017-03-31T19:51:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1218">{{cpp/atomic/atomic/title|load}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11}}
{{dcl | 1=
T load( std::memory_order order = std::memory_order_seq_cst ) const;
}}
{{dcl | 1=
T load( std::memory_order order = std::memory_order_seq_cst ) const volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically loads and returns the current value of the atomic variable. Memory is affected according to the value of {{tt|order}}.

{{tt|order}} must be one of {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_consume}}, {{lc|std::memory_order_acquire}} or {{lc|std::memory_order_seq_cst}}. Otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The current value of the atomic variable.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc operator_T}}
{{dsc inc | cpp/atomic/dsc atomic_load}}
{{dsc end}}

[[de:cpp/atomic/atomic/load]]
[[es:cpp/atomic/atomic/load]]
[[fr:cpp/atomic/atomic/load]]
[[it:cpp/atomic/atomic/load]]
[[ja:cpp/atomic/atomic/load]]
[[pt:cpp/atomic/atomic/load]]
[[ru:cpp/atomic/atomic/load]]
[[zh:cpp/atomic/atomic/load]]</text>
      <sha1>qd7x2w7s2ei8u69voam6fnf6joq0rej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/operator T</title>
    <ns>0</ns>
    <id>9229</id>
    <revision>
      <id>91330</id>
      <parentid>65620</parentid>
      <timestamp>2017-03-31T19:40:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="817">{{cpp/atomic/atomic/title|operator T()}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11}}
{{dcl | 
operator T() const;
}}
{{dcl | 
operator T() const volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically loads and returns the current value of the atomic variable. Equivalent to {{c|load()}}.

===Parameters===
(none)

===Return value===
The current value of the atomic variable.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc load}}
{{dsc end}}

[[de:cpp/atomic/atomic/operator T]]
[[es:cpp/atomic/atomic/operator T]]
[[fr:cpp/atomic/atomic/operator T]]
[[it:cpp/atomic/atomic/operator T]]
[[ja:cpp/atomic/atomic/operator T]]
[[pt:cpp/atomic/atomic/operator T]]
[[ru:cpp/atomic/atomic/operator T]]
[[zh:cpp/atomic/atomic/operator T]]</text>
      <sha1>njoiwy8y3ho5n16em0pa3kkns6l67q7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/operator arith</title>
    <ns>0</ns>
    <id>9233</id>
    <revision>
      <id>91388</id>
      <parentid>77563</parentid>
      <timestamp>2017-03-31T19:42:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3456">{{cpp/atomic/atomic/title|1=operator++,++{{small|(int)}},--,--{{small|(int)}}}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl | num=1 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T operator++();
T operator++() volatile;
}}
{{dcl | num=1 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T* operator++();
T* operator++() volatile;
}}
{{dcl | num=2 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T operator++( int );
T operator++( int ) volatile;
}}
{{dcl | num=2 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T* operator++( int );
T* operator++( int ) volatile;
}}
{{dcl | num=3 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T operator--();
T operator--() volatile;
}}
{{dcl | num=3 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T* operator--();
T* operator--() volatile;
}}
{{dcl | num=4 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T operator--( int );
T operator--( int ) volatile;
}}
{{dcl | num=4 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
T* operator--( int );
T* operator--( int ) volatile;
}}
{{dcl end}}

Atomically increments or decrements the current value. The operation is read-modify-write operation. 

@1@ Performs atomic pre-increment. Equivalent to {{c|fetch_add(1)+1}}.
@2@ Performs atomic post-increment. Equivalent to {{c|fetch_add(1)}}.
@3@ Performs atomic pre-decrement. Equivalent to {{c|fetch_sub(1)-1}}
@4@ Performs atomic post-decrement. Equivalent to {{c|fetch_sub(1)}}.

For signed {{tt|Integral}} types, arithmetic is defined to use two’s complement representation. There
are no undefined results. For {{tt|T*}} types, the result may be an undefined address, but the operations otherwise have no undefined behavior.

===Parameters===
(none)

===Return value===
@1,3@ The value of the atomic variable after the modification. Formally, the result of incrementing/decrementing the value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}}.
@2,4@ The value of the atomic variable before the modification. Formally, the value immediately preceding the effects of this function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}}.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Unlike most pre-increment and pre-decrement operators, the pre-increment and pre-decrement operators for atomic types do not return a reference to the modified object. They return a copy of the stored value instead.

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_add}}
{{dsc inc | cpp/atomic/atomic/dsc fetch_sub}}
{{dsc inc | cpp/atomic/atomic/dsc operator_arith2}}
{{dsc end}}

[[de:cpp/atomic/atomic/operator arith]]
[[es:cpp/atomic/atomic/operator arith]]
[[fr:cpp/atomic/atomic/operator arith]]
[[it:cpp/atomic/atomic/operator arith]]
[[ja:cpp/atomic/atomic/operator arith]]
[[pt:cpp/atomic/atomic/operator arith]]
[[ru:cpp/atomic/atomic/operator arith]]
[[zh:cpp/atomic/atomic/operator arith]]</text>
      <sha1>3cvoiph37ryyy2b7gwr7xe8ru4zvvr8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/operator arith2</title>
    <ns>0</ns>
    <id>9232</id>
    <revision>
      <id>91353</id>
      <parentid>77562</parentid>
      <timestamp>2017-03-31T19:41:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3564">{{cpp/atomic/atomic/title|1=operator+=,-=,&amp;=,{{!}}=,^=}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T operator+=( T arg );
}}
{{dcl | 1=
T operator+=( T arg ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=1 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}}}
{{dcl | 1=
T* operator+=( std::ptrdiff_t arg );
}}
{{dcl | 1=
T* operator+=( std::ptrdiff_t arg ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T operator-=( T arg );
}}
{{dcl | 1=
T operator-=( T arg ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;T*&gt;}} template specialization}}}}
{{dcl | 1=
T* operator-=( std::ptrdiff_t arg );
}}
{{dcl | 1=
T* operator-=( std::ptrdiff_t arg ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=3 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T operator&amp;=( T arg );
}}
{{dcl | 1=
T operator&amp;=( T arg ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=4 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T operator{{!}}=( T arg );
}}
{{dcl | 1=
T operator{{!}}=( T arg ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=5 | since=c++11 | notes={{mark|member only of {{tt|atomic&lt;''Integral''&gt;}} template specialization}}}}
{{dcl | 1=
T operator^=( T arg );
}}
{{dcl | 1=
T operator^=( T arg ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the current value with the result of computation involving the previous value and {{tt|arg}}. The operation is read-modify-write operation.

@1@ Performs atomic addition. Equivalent to {{c|fetch_add(arg)}} + arg.
@2@ Performs atomic subtraction. Equivalent to {{c|fetch_sub(arg)}} - arg.
@3@ Performs atomic bitwise and. Equivalent to {{c|fetch_and(arg)}} &amp; arg.
@4@ Performs atomic bitwise or. Equivalent to {{c|fetch_or(arg)}} | arg.
@5@ Performs atomic bitwise exclusive or. Equivalent to {{c|fetch_xor(arg)}} ^ arg.

For signed {{tt|Integral}} types, arithmetic is defined to use two’s complement representation. There
are no undefined results. For {{tt|T*}} types, the result may be an undefined address, but the operations otherwise have no undefined behavior.

===Parameters===
{{par begin}}
{{par | arg | the argument for the arithmetic operation}}
{{par end}}

===Return value===
The resulting value (that is, the result of applying the corresponding binary operator to the value immediately preceding the effects of the corresponding member function in the [[cpp/atomic/memory_order#Modification_order|modification order]] of {{tt|*this}})

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Unlike most compound assignment operators, the compound assignment operators for atomic types do not return a reference to their left-hand arguments. They return a copy of the stored value instead.

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc operator_arith}}
{{dsc end}}

[[de:cpp/atomic/atomic/operator arith2]]
[[es:cpp/atomic/atomic/operator arith2]]
[[fr:cpp/atomic/atomic/operator arith2]]
[[it:cpp/atomic/atomic/operator arith2]]
[[ja:cpp/atomic/atomic/operator arith2]]
[[pt:cpp/atomic/atomic/operator arith2]]
[[ru:cpp/atomic/atomic/operator arith2]]
[[zh:cpp/atomic/atomic/operator arith2]]</text>
      <sha1>1eqretpl8zvpmjhkczqx1xn22srune4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/operator=</title>
    <ns>0</ns>
    <id>9225</id>
    <revision>
      <id>91927</id>
      <parentid>85518</parentid>
      <timestamp>2017-03-31T20:02:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1332">{{cpp/atomic/atomic/title|operator{{=}}}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1 | since=c++11}}
{{dcl | 1=
T operator=( T desired );
}}
{{dcl | since=c++11 | num=1 | 1=
T operator=( T desired ) volatile;
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++11}}
{{dcl | 1=
atomic&amp; operator=( const atomic&amp; ) = delete;
}}
{{dcl | 1=
atomic&amp; operator=( const atomic&amp; ) volatile = delete;
}}
{{dcl rev end}}
{{dcl end}}

@1@ Atomically assigns a value {{tt|desired}} to the atomic variable. Equivalent to {{c|store(desired)}}.
@2@ Atomic variables are not {{concept|CopyAssignable}}.

===Parameters===
{{par begin}}
{{par | desired | value to assign}}
{{par end}}

===Return value===
{{tt|desired}}.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Unlike most assignment operators, the assignment operators for atomic types do not return a reference to their left-hand arguments. They return a copy of the stored value instead.

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc constructor}}
{{dsc end}}

[[de:cpp/atomic/atomic/operator=]]
[[es:cpp/atomic/atomic/operator=]]
[[fr:cpp/atomic/atomic/operator=]]
[[it:cpp/atomic/atomic/operator=]]
[[ja:cpp/atomic/atomic/operator=]]
[[pt:cpp/atomic/atomic/operator=]]
[[ru:cpp/atomic/atomic/operator=]]
[[zh:cpp/atomic/atomic/operator=]]</text>
      <sha1>sbcyimjmdwavfcs6998loojiewwzs66</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/atomic/store</title>
    <ns>0</ns>
    <id>9227</id>
    <revision>
      <id>91770</id>
      <parentid>75666</parentid>
      <timestamp>2017-03-31T19:57:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1232">{{cpp/atomic/atomic/title|store}}
{{cpp/atomic/atomic/navbar}}
{{dcl begin}}
{{dcl rev begin | since=c++11}}
{{dcl | 1=
void store( T desired, std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | 1=
void store( T desired, std::memory_order order = std::memory_order_seq_cst ) volatile;
}}
{{dcl rev end}}
{{dcl end}}

Atomically replaces the current value with {{tt|desired}}. Memory is affected according to the value of {{tt|order}}.

{{tt|order}} must be one of {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_release}} or {{lc|std::memory_order_seq_cst}}. Otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | desired | the value to store into the atomic variable}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/atomic/dsc operator{{=}}}}
{{dsc inc | cpp/atomic/dsc atomic_store}}
{{dsc end}}

[[de:cpp/atomic/atomic/store]]
[[es:cpp/atomic/atomic/store]]
[[fr:cpp/atomic/atomic/store]]
[[it:cpp/atomic/atomic/store]]
[[ja:cpp/atomic/atomic/store]]
[[pt:cpp/atomic/atomic/store]]
[[ru:cpp/atomic/atomic/store]]
[[zh:cpp/atomic/atomic/store]]</text>
      <sha1>t99ejbxd7hns47bsmrw3i8cz4fo74r0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/kill dependency</title>
    <ns>0</ns>
    <id>2840</id>
    <revision>
      <id>91822</id>
      <parentid>87130</parentid>
      <timestamp>2017-03-31T19:58:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2473">{{cpp/title | kill_dependency }}
{{cpp/atomic/navbar}}
{{dcl begin}}
{{dcl header | atomic }}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
T kill_dependency( T y );
}}
{{dcl end}}

Informs the compiler that the dependency tree started by an {{lc|std::memory_order_consume}} atomic load operation does not extend past the return value of {{lc|std::kill_dependency}}; that is, the argument does not carry a dependency into the return value.

This may be used to avoid unnecessary {{lc|std::memory_order_acquire}} fences when the dependency chain leaves function scope (and the function does not have the [[cpp/language/attributes|[&lt;nowiki&gt;[&lt;/nowiki&gt;carries_dependency]&lt;nowiki&gt;]&lt;/nowiki&gt;]] attribute)

===Parameters===
{{par begin}}
{{par | y | the expression whose return value is to be removed from a dependency tree}}
{{par end}} 

===Return value===
Returns {{tt|y}}, no longer a part of a dependency tree.

===Exceptions===
{{unreviewed noexcept}}

===Examples===
{{source|1=
//file1.cpp
struct foo { int* a; int* b; };
std::atomic&lt;struct foo*&gt; foo_head[10];
int foo_array[10][10];

// consume operation starts a dependency chain, which escapes this function
[[carries_dependency]] struct foo* f(int i) {
    return foo_head[i].load(memory_order_consume);
}

// the dependency chain enters this function through the right parameter
// and is killed before the function ends (so no extra acquire operation takes place)
int g(int* x, int* y [[carries_dependency]]) {
    return std::kill_dependency(foo_array[*x][*y]);
}
}}

{{source|1=
//file2.cpp
[[carries_dependency]] struct foo* f(int i);
int g(int* x, int* y [[carries_dependency]]);

int c = 3;
void h(int i) {
    struct foo* p;
    p = f(i); // dependency chain started inside f continues into p without undue acquire
    do_something_with(g(&amp;c, p-&gt;a)); // p-&gt;b is not brought in from the cache
    do_something_with(g(p-&gt;a, &amp;c)); // left argument does not have the carries_dependency
                                    // attribute: memory acquire fence may be issued
                                    // p-&gt;b becomes visible before g() is entered
}
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc end}}

[[de:cpp/atomic/kill dependency]]
[[es:cpp/atomic/kill dependency]]
[[fr:cpp/atomic/kill dependency]]
[[it:cpp/atomic/kill dependency]]
[[ja:cpp/atomic/kill dependency]]
[[pt:cpp/atomic/kill dependency]]
[[ru:cpp/atomic/kill dependency]]
[[zh:cpp/atomic/kill dependency]]</text>
      <sha1>ggz8k4rwt3y5wh9exn70pu5g9lh48ll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/atomic/memory order</title>
    <ns>0</ns>
    <id>2839</id>
    <revision>
      <id>89304</id>
      <parentid>87264</parentid>
      <timestamp>2017-01-17T15:03:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>edited the note that said all this is about side effects to include data races as well</comment>
      <text xml:space="preserve" bytes="11194">{{cpp/title | memory_order}}
{{cpp/atomic/navbar}}
{{ddcl | header=atomic | since=c++11 | 1=
enum memory_order {
    memory_order_relaxed,
    memory_order_consume,
    memory_order_acquire,
    memory_order_release,
    memory_order_acq_rel,
    memory_order_seq_cst
};
}}

{{cpp/atomic/memory-order-intro|cpp}}

===Constants===

{{dsc begin}}
{{dsc header | atomic}}
{{dsc hitem | Value | Explanation }}
{{cpp/atomic/memory-order-constants|cpp}}
{{dsc end}}

===Formal description===
Inter-thread synchronization and memory ordering determine how ''evaluations'' and ''side effects'' of expressions are ordered between different threads of execution. They are defined in the following terms:

====Sequenced-before====
Within the same thread, evaluation A may be ''sequenced-before'' evaluation B, as described in [[cpp/language/eval_order|evaluation order]].

====Carries dependency====
Within the same thread, evaluation A that is ''sequenced-before'' evaluation B may also carry a dependency into B (that is, B depends on A), if any of the following is true
@1@ The value of A is used as an operand of B, '''except'''
:@a@ if B is a call to {{lc|std::kill_dependency}}
:@b@ if A is the left operand of the built-in {{c|&amp;&amp;}}, {{c|{{!!}}}}, {{c|?:}}, or {{c|,}} operators.
@2@ A writes to a scalar object M, B reads from M
@3@ A carries dependency into another evaluation X, and X carries dependency into B

====Modification order====
All modifications to any particular atomic variable occur in a total order that is specific to this one atomic variable.

The following four requirements are guaranteed for all atomic operations:
@1@ '''Write-write coherence''': If evaluation A that modifies some atomic M (a write) ''happens-before'' evaluation B that modifies M, then A appears earlier than B in the ''modification order'' of M
@2@ '''Read-read coherence''': if a value computation A of some atomic M (a read) ''happens-before'' a value computation B on M, and if the value of A comes from a write X on M, then the value of B is either the value stored by X, or the value stored by a side effect Y on M that appears later than X in the ''modification order'' of M.
@3@ '''Read-write coherence''': if a value computation A of some atomic M (a read) ''happens-before'' an operation B on M (a write), then the value of A comes from a side-effect (a write) X that appears earlier than B in the ''modification order'' of M
@4@ '''Write-read coherence''': if a side effect (a write) X on an atomic object M ''happens-before'' a value computation (a read) B of M, then the evaluation B shall take its value from X or from a side effect Y that follows X in the modification order of M

====Release sequence====
After a ''release operation'' A is performed on an atomic object M, the longest continuous subsequence of the modification order of M that consists of
@1@ Writes performed by the same thread that performed A
@2@ Atomic read-modify-write operations made to M by any thread

is known as ''release sequence headed by A''

====Dependency-ordered before====
Between threads, evaluation A is ''dependency-ordered before'' evaluation B if any of the following is true
@1@ A performs a ''release operation'' on some atomic M, and, in a different thread, B performs a ''consume operation'' on the same atomic M, and B reads a value written by any part of the release sequence headed by A.
@2@ A is dependency-ordered before X and X carries a dependency into B.

====Inter-thread happens-before====
Between threads, evaluation A ''inter-thread happens before'' evaluation B if any of the following is true
@1@ A ''synchronizes-with'' B
@2@ A is ''dependency-ordered before'' B
@3@ A ''synchronizes-with'' some evaluation X, and X is ''sequenced-before'' B
@3@ A is ''sequenced-before'' some evaluation X, and X ''inter-thread happens-before'' B
@4@ A ''inter-thread happens-before'' some evaluation X, and X ''inter-thread happens-before'' B

====Happens-before====
Regardless of threads, evaluation A ''happens-before'' evaluation B if any of the following is true:
@1@ A is ''sequenced-before'' B
@2@ A ''inter-thread happens before'' B

The implementation is required to ensure that the ''happens-before'' relation is acyclic, by introducing additional synchronization if necessary (it can only be necessary if a consume operation is involved, see [http://www.cl.cam.ac.uk/~pes20/cpp/popl085ap-sewell.pdf Batty et al])

If one evaluation modifies a memory location, and the other reads or modifies the same memory location, and if at least one of the evaluations is not an atomic operation, the behavior of the program is undefined (the program has a [[cpp/language/memory_model|data race]]) unless there exists a ''happens-before'' relationship between these two evaluations.

====Visible side-effects====
The side-effect A on a scalar M (a write) is ''visible'' with respect to value computation B on M (a read) if both of the following are true:
@1@ A ''happens-before'' B
@2@ There is no other side effect X to M where A ''happens-before'' X and X ''happens-before'' B

If side-effect A is visible with respect to the value computation B, then the longest contiguous subset of the side-effects to M, in ''modification order'', where B does not ''happen-before'' it is known as the ''visible sequence of side-effects''. (the value of M, determined by B, will be the value stored by one of these side effects)

Note: inter-thread synchronization boils down to preventing data races (by establishing happens-before relationships) and defining which side effects become visible under what conditions

====Consume operation====
Atomic load with {{tt|memory_order_consume}} or stronger is a consume operation. Note that {{lc|std::atomic_thread_fence}} imposes stronger synchronization requirements than a consume operation.

====Acquire operation====
Atomic load with {{tt|memory_order_acquire}} or stronger is an acquire operation. The lock() operation on a {{concept|Mutex}} is also an acquire operation. Note that {{lc|std::atomic_thread_fence}} imposes stronger synchronization requirements than an acquire operation.

====Release operation====
Atomic store with {{tt|memory_order_release}} or stronger is a release operation. The unlock() operation on a {{concept|Mutex}} is also a release operation. Note that {{lc|std::atomic_thread_fence}} imposes stronger synchronization requirements than a release operation.

===Explanation===

====Relaxed ordering====
{{cpp/atomic/relaxed|cpp}}

{{example
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;atomic&gt;

std::atomic&lt;int&gt; cnt = {0};

void f()
{
    for (int n = 0; n &lt; 1000; ++n) {
        cnt.fetch_add(1, std::memory_order_relaxed);
    }
}

int main()
{
    std::vector&lt;std::thread&gt; v;
    for (int n = 0; n &lt; 10; ++n) {
        v.emplace_back(f);
    }
    for (auto&amp; t : v) {
        t.join();
    }
    std::cout &lt;&lt; &quot;Final counter value is &quot; &lt;&lt; cnt &lt;&lt; '\n';
}
 | output=
Final counter value is 10000
}}

====Release-Acquire ordering====
{{cpp/atomic/release-acquire|cpp}}

{{example
 | code=
#include &lt;thread&gt;
#include &lt;atomic&gt;
#include &lt;cassert&gt;
#include &lt;string&gt;
 
std::atomic&lt;std::string*&gt; ptr;
int data;
 
void producer()
{
    std::string* p  = new std::string(&quot;Hello&quot;);
    data = 42;
    ptr.store(p, std::memory_order_release);
}
 
void consumer()
{
    std::string* p2;
    while (!(p2 = ptr.load(std::memory_order_acquire)))
        ;
    assert(*p2 == &quot;Hello&quot;); // never fires
    assert(data == 42); // never fires
}
 
int main()
{
    std::thread t1(producer);
    std::thread t2(consumer);
    t1.join(); t2.join();
}
 | output=
}}

{{example
 | The following example demonstrates transitive release-acquire ordering across three threads
 | code=
#include &lt;thread&gt;
#include &lt;atomic&gt;
#include &lt;cassert&gt;
#include &lt;vector&gt;

std::vector&lt;int&gt; data;
std::atomic&lt;int&gt; flag = {0};

void thread_1()
{
    data.push_back(42);
    flag.store(1, std::memory_order_release);
}

void thread_2()
{
    int expected=1;
    while (!flag.compare_exchange_strong(expected, 2, std::memory_order_acq_rel)) {
        expected = 1;
    }
}

void thread_3()
{
    while (flag.load(std::memory_order_acquire) &lt; 2)
        ;
    assert(data.at(0) == 42); // will never fire
}

int main()
{
    std::thread a(thread_1);
    std::thread b(thread_2);
    std::thread c(thread_3);
    a.join(); b.join(); c.join();
}
 | output=
}}

====Release-Consume ordering====
{{cpp/atomic/release-consume|cpp}}

{{rev begin}}
{{rev|since=c++17|
The specification of release-consume ordering is being revised, and the use of  {{tt|memory_order_consume}} is temporarily discouraged.
}}
{{rev end}}

{{example
 | This example demonstrates dependency-ordered synchronization for pointer-mediated publication: the integer data is not related to the pointer to string by a data-dependency relationship, thus its value is undefined in the consumer.
 | code=
#include &lt;thread&gt;
#include &lt;atomic&gt;
#include &lt;cassert&gt;
#include &lt;string&gt;

std::atomic&lt;std::string*&gt; ptr;
int data;

void producer()
{
    std::string* p  = new std::string(&quot;Hello&quot;);
    data = 42;
    ptr.store(p, std::memory_order_release);
}

void consumer()
{
    std::string* p2;
    while (!(p2 = ptr.load(std::memory_order_consume)))
        ;
    assert(*p2 == &quot;Hello&quot;); // never fires: *p2 carries dependency from ptr
    assert(data == 42); // may or may not fire: data does not carry dependency from ptr
}

int main()
{
    std::thread t1(producer);
    std::thread t2(consumer);
    t1.join(); t2.join();
}
 | output=
}}


====Sequentially-consistent ordering====
{{cpp/atomic/sequentially-consistent|cpp}}

{{example
 | This example demonstrates a situation where sequential ordering is necessary. Any other ordering may trigger the assert because it would be possible for the threads {{tt|c}} and {{tt|d}} to observe changes to the atomics {{tt|x}} and {{tt|y}} in opposite order.
 | code=
#include &lt;thread&gt;
#include &lt;atomic&gt;
#include &lt;cassert&gt;

std::atomic&lt;bool&gt; x = {false};
std::atomic&lt;bool&gt; y = {false};
std::atomic&lt;int&gt; z = {0};

void write_x()
{
    x.store(true, std::memory_order_seq_cst);
}

void write_y()
{
    y.store(true, std::memory_order_seq_cst);
}

void read_x_then_y()
{
    while (!x.load(std::memory_order_seq_cst))
        ;
    if (y.load(std::memory_order_seq_cst)) {
        ++z;
    }
}

void read_y_then_x()
{
    while (!y.load(std::memory_order_seq_cst))
        ;
    if (x.load(std::memory_order_seq_cst)) {
        ++z;
    }
}

int main()
{
    std::thread a(write_x);
    std::thread b(write_y);
    std::thread c(read_x_then_y);
    std::thread d(read_y_then_x);
    a.join(); b.join(); c.join(); d.join();
    assert(z.load() != 0);  // will never happen
}
 | output=
}}

===Relationship with {{c|volatile}}===
{{cpp/atomic/atomic-vs-volatile|cpp}}

===See also===
{{dsc begin}}
{{dsc see c | c/atomic/memory order}}
{{dsc end}}

===External links===
{{cpp/atomic/external-links|cpp}}

[[de:cpp/atomic/memory order]]
[[es:cpp/atomic/memory order]]
[[fr:cpp/atomic/memory order]]
[[it:cpp/atomic/memory order]]
[[ja:cpp/atomic/memory order]]
[[pt:cpp/atomic/memory order]]
[[ru:cpp/atomic/memory order]]
[[zh:cpp/atomic/memory order]]</text>
      <sha1>gvo3hbd30blpnvms5owf42u0fo8o4wb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono</title>
    <ns>0</ns>
    <id>794</id>
    <revision>
      <id>72479</id>
      <parentid>72478</parentid>
      <timestamp>2014-08-26T11:19:40Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>by definition, fibonacci(0)=0, fibonacci(1)=1</comment>
      <text xml:space="preserve" bytes="2694">{{title | Date and time utilities}}
{{cpp/chrono/navbar}}

C++ includes support for two types of time manipulation:

* The {{tt|chrono}} library, a flexible collection of types that track time with varying degrees of precision (e.g. {{lc|std::chrono::time_point}}).
* C-style date and time library (e.g. {{lc|std::time}})

==={{tt|chrono}} library===
The {{tt|chrono}} library defines three main types (durations, clocks, and time points) as well as utility functions and common typedefs.

====Duration====
A duration consists of a span of time, defined as some number of ticks of some time unit.  For example, &quot;42 seconds&quot; could be represented by a duration consisting of 42 ticks of a 1-second time unit.

{{dsc begin}}
{{dsc header | chrono}}
{{dsc namespace | std::chrono}}
{{dsc inc | cpp/chrono/dsc duration}}
{{dsc end}}

====Clocks====
A clock consists of a starting point (or epoch) and a tick rate.  For example, a clock may have an epoch of January 1, 1970 and tick every second.  C++ defines three clock types:

{{dsc begin}}
{{dsc header | chrono}}
{{dsc namespace | std::chrono}}
{{dsc inc | cpp/chrono/dsc system_clock}}
{{dsc inc | cpp/chrono/dsc steady_clock}}
{{dsc inc | cpp/chrono/dsc high_resolution_clock}}
{{dsc end}}

====Time point====
A time point is a duration of time that has passed since the epoch of specific clock.

{{dsc begin}}
{{dsc header | chrono}}
{{dsc namespace | std::chrono}}
{{dsc inc | cpp/chrono/dsc time_point}}
{{dsc end}}

===[[cpp/chrono/c|C-style date and time library]]===

Also provided are the C-style date and time functions, such as {{lc|std::time_t}}, {{lc|std::difftime}}, and {{lc|CLOCKS_PER_SEC}}.

===Example===
{{example
 | This example displays information about the execution time of a function call:
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;ctime&gt;
 
long fibonacci(unsigned n)
{
    if (n &lt; 2) return n;
    return fibonacci(n-1) + fibonacci(n-2);
}
 
int main()
{
    std::chrono::time_point&lt;std::chrono::system_clock&gt; start, end;
    start = std::chrono::system_clock::now();
    std::cout &lt;&lt; &quot;f(42) = &quot; &lt;&lt; fibonacci(42) &lt;&lt; '\n';
    end = std::chrono::system_clock::now();
 
    std::chrono::duration&lt;double&gt; elapsed_seconds = end-start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);
 
    std::cout &lt;&lt; &quot;finished computation at &quot; &lt;&lt; std::ctime(&amp;end_time)
              &lt;&lt; &quot;elapsed time: &quot; &lt;&lt; elapsed_seconds.count() &lt;&lt; &quot;s\n&quot;;
}
 | output=
f(42) = 267914296
finished computation at Mon Jul 29 08:41:09 2013
elapsed time: 0.670427s
}}

[[de:cpp/chrono]]
[[es:cpp/chrono]]
[[fr:cpp/chrono]]
[[it:cpp/chrono]]
[[ja:cpp/chrono]]
[[pt:cpp/chrono]]
[[ru:cpp/chrono]]
[[zh:cpp/chrono]]</text>
      <sha1>attwa6ocmrzlat2vmt2cf94hphefddq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c</title>
    <ns>0</ns>
    <id>795</id>
    <revision>
      <id>86217</id>
      <parentid>71020</parentid>
      <timestamp>2016-06-24T20:00:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0063r3 (C11)</comment>
      <text xml:space="preserve" bytes="1191">{{title|C Date and time utilities}}
{{cpp/chrono/c/navbar}}

===Functions===
{{dsc begin}}
{{dsc header | ctime}}
{{dsc h2 | Time manipulation}}
{{dsc inc | cpp/chrono/c/dsc difftime}}
{{dsc inc | cpp/chrono/c/dsc time}}
{{dsc inc | cpp/chrono/c/dsc clock}}
{{dsc inc | cpp/chrono/c/dsc timespec_get}}
{{dsc h2 | Format conversions}}
{{dsc inc | cpp/chrono/c/dsc asctime}}
{{dsc inc | cpp/chrono/c/dsc ctime}}
{{dsc inc | cpp/chrono/c/dsc strftime}}
{{dsc inc | cpp/chrono/c/dsc wcsftime}}
{{dsc inc | cpp/chrono/c/dsc gmtime}}
{{dsc inc | cpp/chrono/c/dsc localtime}}
{{dsc inc | cpp/chrono/c/dsc mktime}}
{{dsc end}}

===Constants===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc CLOCKS_PER_SEC}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc tm}}
{{dsc inc | cpp/chrono/c/dsc time_t}}
{{dsc inc | cpp/chrono/c/dsc clock_t}}
{{dsc inc | cpp/chrono/c/dsc timespec}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/chrono |Date and time utilities }}
{{dsc end}}

[[cs:cpp/chrono/c]]
[[de:cpp/chrono/c]]
[[es:cpp/chrono/c]]
[[fr:cpp/chrono/c]]
[[it:cpp/chrono/c]]
[[ja:cpp/chrono/c]]
[[pt:cpp/chrono/c]]
[[ru:cpp/chrono/c]]
[[tr:cpp/chrono/c]]
[[zh:cpp/chrono/c]]</text>
      <sha1>3ygwaxtph3rjfou1dpe9wm52mjy0p8v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/CLOCKS PER SEC</title>
    <ns>0</ns>
    <id>2054</id>
    <revision>
      <id>87866</id>
      <parentid>87861</parentid>
      <timestamp>2016-10-09T17:14:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 87861 by [[Special:Contributions/112.66.24.115|112.66.24.115]] ([[User talk:112.66.24.115|talk]])</comment>
      <text xml:space="preserve" bytes="869">{{title| CLOCKS_PER_SEC}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
#define CLOCKS_PER_SEC /*implementation defined*/
}}

Expands to an expression (not necessarily a compile-time constant) of type {{lc|std::clock_t}} equal to the number of clock ticks per second, as returned by {{lc|std::clock()}}. 

===Notes===
POSIX defines {{tt|CLOCKS_PER_SEC}} as one million, regardless of the actual precision of {{lc|std::clock()}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc clock}}
{{dsc inc | cpp/chrono/c/dsc clock_t}}
{{dsc see c | c/chrono/CLOCKS_PER_SEC}}
{{dsc end}}

[[de:cpp/chrono/c/CLOCKS PER SEC]]
[[es:cpp/chrono/c/CLOCKS PER SEC]]
[[fr:cpp/chrono/c/CLOCKS PER SEC]]
[[it:cpp/chrono/c/CLOCKS PER SEC]]
[[ja:cpp/chrono/c/CLOCKS PER SEC]]
[[pt:cpp/chrono/c/CLOCKS PER SEC]]
[[ru:cpp/chrono/c/CLOCKS PER SEC]]
[[zh:cpp/chrono/c/CLOCKS PER SEC]]</text>
      <sha1>nyg6p64iqf23lqnyr7aenppfet6sbf6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/asctime</title>
    <ns>0</ns>
    <id>2051</id>
    <revision>
      <id>92040</id>
      <parentid>76278</parentid>
      <timestamp>2017-04-03T20:27:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>worth pointing out here in the output of the example how days less than 10 show up</comment>
      <text xml:space="preserve" bytes="3193">{{cpp/title| asctime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
char* asctime( const std::tm* time_ptr );
}}

Converts given calendar time {{lc|std::tm}} to a textual representation of the following fixed 25-character form: {{c|Www Mmm dd hh:mm:ss yyyy\n}}
*{{tt|Www}} - three-letter English abbreviated day of the week from {{c|time_ptr-&gt;tm_wday}}, one of {{tt|Mon}}, {{tt|Tue}}, {{tt|Wed}}, {{tt|Thu}}, {{tt|Fri}}, {{tt|Sat}}, {{tt|Sun}}.
*{{tt|Mmm}} - three-letter English abbreviated month name from {{c|time_ptr-&gt;tm_mon}}, one of {{tt|Jan}}, {{tt|Feb}}, {{tt|Mar}}, {{tt|Apr}}, {{tt|May}}, {{tt|Jun}}, {{tt|Jul}}, {{tt|Aug}}, {{tt|Sep}}, {{tt|Oct}}, {{tt|Nov}}, {{tt|Dec}}.
*{{tt|dd}} - 2-digit day of the month from {{c|timeptr-&gt;tm_mday}} as if printed by {{lc|sprintf}} using {{c|%2d}}
*{{tt|hh}} - 2-digit hour from {{c|timeptr-&gt;tm_hour}} as if printed by {{lc|sprintf}} using {{c|%.2d}}
*{{tt|mm}} - 2-digit minute from {{c|timeptr-&gt;tm_min}} as if printed by {{lc|sprintf}} using {{c|%.2d}}
*{{tt|ss}} - 2-digit second from {{c|timeptr-&gt;tm_sec}} as if printed by {{lc|sprintf}} using {{c|%.2d}}
*{{tt|yyyy}} - 4-digit year from {{c|timeptr-&gt;tm_year + 1900}} as if printed by {{lc|sprintf}} using {{c|%4d}}

The behavior is undefined if any member of {{c|*time_ptr}} is outside its normal range

The behavior is undefined if the calendar year indicated by {{c|time_ptr-&gt;tm_year}} has more than 4 digits or is less than the year 1000.

The function does not support localization, and the newline character cannot be removed.

The function modifies static storage and is not thread-safe.

===Parameters===
{{par begin}}
{{par | time_ptr | pointer to a {{lc|std::tm}} object specifying the time to print}}
{{par end}}

===Return value===
Pointer to a static null-terminated character string holding the textual representation of date and time. The string may be shared between {{tt|std::asctime}} and {{lc|std::ctime}}, and may be overwritten on each invocation of any of those functions.

===Notes===
This function returns a pointer to static data and is not thread-safe. POSIX marks this function obsolete and recommends {{lc|std::strftime}} instead.

POSIX limits undefined behaviors only to when the output string would be longer than 25 characters, when {{tt|timeptr-&gt;tm_wday}} or {{tt|timeptr-&gt;tm_mon}} are not within the expected ranges, or when {{tt|timeptr-&gt;tm_year}} exceeds {{c|INT_MAX-1990}}.

Some implementations handle {{c|1=timeptr-&gt;tm_mday==0}} as meaning the last day of the preceding month.

===Example===
{{example
 |
 | code=
#include &lt;ctime&gt;
#include &lt;iostream&gt;

int main()
{
    std::time_t result = std::time(NULL);
    std::cout &lt;&lt; std::asctime(std::localtime(&amp;result));
}
 | output=
Mon Apr  3 20:26:26 2017
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc ctime}}
{{dsc inc | cpp/chrono/c/dsc strftime}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc see c | c/chrono/asctime}}
{{dsc end}}

[[de:cpp/chrono/c/asctime]]
[[es:cpp/chrono/c/asctime]]
[[fr:cpp/chrono/c/asctime]]
[[it:cpp/chrono/c/asctime]]
[[ja:cpp/chrono/c/asctime]]
[[pt:cpp/chrono/c/asctime]]
[[ru:cpp/chrono/c/asctime]]
[[tr:cpp/chrono/c/asctime]]
[[zh:cpp/chrono/c/asctime]]</text>
      <sha1>akvwpns9pcxpffu2cyz0kp09kk3nyas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/clock</title>
    <ns>0</ns>
    <id>2053</id>
    <revision>
      <id>89218</id>
      <parentid>73024</parentid>
      <timestamp>2017-01-10T19:08:38Z</timestamp>
      <contributor>
        <username>SteveWishnousky</username>
        <id>6287</id>
      </contributor>
      <text xml:space="preserve" bytes="2996">{{cpp/title| clock}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
std::clock_t clock();
}}

Returns the approximate processor time used by the process since the beginning of an implementation-defined era related to the program's execution. To convert result value to seconds divide it by {{lc|CLOCKS_PER_SEC}}. 

Only the difference between two values returned by different calls to {{lc|std::clock}} is meaningful, as the beginning of the {{lc|std::clock}} era does not have to coincide with the start of the program. {{lc|std::clock}} time may advance faster or slower than the wall clock, depending on the execution resources given to the program by the operating system. For example, if the CPU is shared by other processes, {{lc|std::clock}} time may advance slower than wall clock. On the other hand, if the current process is multithreaded and more than one execution core is available, {{lc|std::clock}} time may advance faster than wall clock.

===Parameters===
(none)

===Return value===
Processor time used by the program so far or {{c|(clock_t)(-1)}} if that information is unavailable or its value cannot be represented.

===Exceptions===
(none)

===Notes===
On POSIX-compatible systems, &lt;code&gt;[http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html clock_gettime]&lt;/code&gt; with clock id {{c|CLOCK_PROCESS_CPUTIME_ID}} offers better resolution.

The value returned by {{tt|clock()}} may wrap around on some implementations. For example, on a machine with 32-bit  {{lc|std::clock_t}}, it wraps after 2147 seconds or 36 minutes.

===Example===
{{example
 | This example demonstrates the difference between clock() time and real time
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;chrono&gt;
#include &lt;ctime&gt;
#include &lt;thread&gt;

// the function f() does some time-consuming work
void f()
{
    volatile double d = 0;
    for(int n=0; n&lt;10000; ++n)
       for(int m=0; m&lt;10000; ++m)
           d += d*n*m;
}

int main()
{
    std::clock_t c_start = std::clock();
    auto t_start = std::chrono::high_resolution_clock::now();
    std::thread t1(f);
    std::thread t2(f); // f() is called on two threads
    t1.join();
    t2.join();
    std::clock_t c_end = std::clock();
    auto t_end = std::chrono::high_resolution_clock::now();

    std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(2) &lt;&lt; &quot;CPU time used: &quot;
              &lt;&lt; 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC &lt;&lt; &quot; ms\n&quot;
              &lt;&lt; &quot;Wall clock time passed: &quot;
              &lt;&lt; std::chrono::duration&lt;double, std::milli&gt;(t_end-t_start).count()
              &lt;&lt; &quot; ms\n&quot;;
}
 | output=
CPU time used: 1590.00 ms
Wall clock time passed: 808.23 ms
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc ctime}}
{{dsc inc | cpp/chrono/c/dsc time}}
{{dsc see c | c/chrono/clock}}
{{dsc end}}

[[de:cpp/chrono/c/clock]]
[[es:cpp/chrono/c/clock]]
[[fr:cpp/chrono/c/clock]]
[[it:cpp/chrono/c/clock]]
[[ja:cpp/chrono/c/clock]]
[[pt:cpp/chrono/c/clock]]
[[ru:cpp/chrono/c/clock]]
[[zh:cpp/chrono/c/clock]]</text>
      <sha1>plzjl4m1vf1fgzfnp8e8bssbtwf2tst</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/clock t</title>
    <ns>0</ns>
    <id>4644</id>
    <revision>
      <id>57174</id>
      <parentid>49352</parentid>
      <timestamp>2013-06-01T05:48:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="605">{{cpp/title|clock_t}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime | 1=
typedef /* unspecified */ clock_t;
}}
Arithmetic type capable of representing the process running time of implementation-defined range and precision.

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc clock}}
{{dsc inc | cpp/chrono/c/dsc CLOCKS_PER_SEC}}
{{dsc see c | c/chrono/clock_t}}
{{dsc end}}

[[de:cpp/chrono/c/clock t]]
[[es:cpp/chrono/c/clock t]]
[[fr:cpp/chrono/c/clock t]]
[[it:cpp/chrono/c/clock t]]
[[ja:cpp/chrono/c/clock t]]
[[pt:cpp/chrono/c/clock t]]
[[ru:cpp/chrono/c/clock t]]
[[zh:cpp/chrono/c/clock t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/ctime</title>
    <ns>0</ns>
    <id>2058</id>
    <revision>
      <id>86599</id>
      <parentid>57175</parentid>
      <timestamp>2016-07-07T04:35:21Z</timestamp>
      <contributor>
        <ip>45.43.221.3</ip>
      </contributor>
      <comment>style - use nullptr instead of NULL</comment>
      <text xml:space="preserve" bytes="2249">{{cpp/title| ctime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
char* ctime( const std::time_t* time );
}}

Converts given time since epoch to a calendar local time and then to a textual representation, as if by calling {{c|std::asctime(std::localtime(time))}}. The resulting string has the following format:

{{source|Www Mmm dd hh:mm:ss yyyy}}

*{{tt|Www}} - the day of the week (one of {{tt|Mon}}, {{tt|Tue}}, {{tt|Wed}}, {{tt|Thu}}, {{tt|Fri}}, {{tt|Sat}}, {{tt|Sun}}).
*{{tt|Mmm}} - the month (one of {{tt|Jan}}, {{tt|Feb}}, {{tt|Mar}}, {{tt|Apr}}, {{tt|May}}, {{tt|Jun}}, {{tt|Jul}}, {{tt|Aug}}, {{tt|Sep}}, {{tt|Oct}}, {{tt|Nov}}, {{tt|Dec}}).
*{{tt|dd}} - the day of the month
*{{tt|hh}} - hours
*{{tt|mm}} - minutes
*{{tt|ss}} - seconds 
*{{tt|yyyy}} - years

The function does not support localization.

===Parameters===
{{par begin}}
{{par | time | pointer to a {{lc|std::time_t}} object specifying the time to print}}
{{par end}}

===Return value===
Pointer to a static null-terminated character string holding the textual representation of date and time. The string may be shared between {{tt|std::asctime}} and {{lc|std::ctime}}, and may be overwritten on each invocation of any of those functions.

===Notes===
This function returns a pointer to static data and is not thread-safe. In addition, it modifies the static {{lc|std::tm}} object which may be shared with {{lc|std::gmtime}} and {{lc|std::localtime}}. POSIX marks this function obsolete and recommends {{lc|std::strftime}} instead.

The behavior may be undefined for the values of time_t that result in the string longer than 25 characters (e.g. year 10000)

===Example===
{{example
 |
 | code=
#include &lt;ctime&gt;
#include &lt;iostream&gt;

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout &lt;&lt; std::ctime(&amp;result);
}
 | output=
Tue Dec 27 17:21:29 2011
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc asctime}}
{{dsc inc | cpp/chrono/c/dsc strftime}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc see c | c/chrono/ctime}}
{{dsc end}}

[[de:cpp/chrono/c/ctime]]
[[es:cpp/chrono/c/ctime]]
[[fr:cpp/chrono/c/ctime]]
[[it:cpp/chrono/c/ctime]]
[[ja:cpp/chrono/c/ctime]]
[[pt:cpp/chrono/c/ctime]]
[[ru:cpp/chrono/c/ctime]]
[[zh:cpp/chrono/c/ctime]]</text>
      <sha1>gs9ojsln4wdkc7l8q7qhkk0yqhxr8gs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/difftime</title>
    <ns>0</ns>
    <id>2056</id>
    <revision>
      <id>64345</id>
      <parentid>57176</parentid>
      <timestamp>2013-08-15T18:26:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1485">{{cpp/title| difftime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
double difftime( std::time_t time_end, std::time_t time_beg );
}}

Computes difference between two calendar times as {{lc|std::time_t}} objects ({{c|time_end - time_beg}}) in seconds. If {{tt|time_end}} refers to time point before {{tt|time_beg}} then the result is negative.

===Parameters===
{{par begin}}
{{par | time_beg, time_end | times to compare}}
{{par end}}

===Return value===
Difference between two times in seconds.

===Notes===
On POSIX systems, {{lc|std::time_t}} is measured in seconds, and {{tt|difftime}} is equivalent to arithmetic subtraction, but C and C++ allow fractional units for {{tt|time_t}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ctime&gt;

int main()
{
    std::time_t start = std::time(NULL);
    volatile double d;

    // some time-consuming operation
    for (int n=0; n&lt;10000; ++n) {
        for (int m=0; m&lt;100000; ++m) {
           d += d*n*m;
        }
    }

    std::cout &lt;&lt; &quot;Wall time passed: &quot;
              &lt;&lt; std::difftime(std::time(NULL), start) &lt;&lt; &quot; s.\n&quot;;
}
 | output=
Wall time passed: 7 s.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/dsc duration}}
{{dsc see c | c/chrono/difftime}}
{{dsc end}}

[[de:cpp/chrono/c/difftime]]
[[es:cpp/chrono/c/difftime]]
[[fr:cpp/chrono/c/difftime]]
[[it:cpp/chrono/c/difftime]]
[[ja:cpp/chrono/c/difftime]]
[[pt:cpp/chrono/c/difftime]]
[[ru:cpp/chrono/c/difftime]]
[[zh:cpp/chrono/c/difftime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/gmtime</title>
    <ns>0</ns>
    <id>2057</id>
    <revision>
      <id>86648</id>
      <parentid>67309</parentid>
      <timestamp>2016-07-07T23:34:37Z</timestamp>
      <contributor>
        <ip>174.21.74.50</ip>
      </contributor>
      <comment>std::time() should take a nullptr instead of NULL.</comment>
      <text xml:space="preserve" bytes="1496">{{cpp/title| gmtime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
std::tm* gmtime( const std::time_t* time );
}}

Converts given time since epoch as {{lc|std::time_t}} value into calendar time, expressed in Coordinated Universal Time (UTC). 

===Parameters===
{{par begin}}
{{par | time | pointer to a time_t object to convert}}
{{par end}}

===Return value===
Pointer to a static internal {{lc|std::tm}} object on success, or {{lc|NULL}} otherwise. The structure may be shared between {{lc|std::gmtime}}, {{lc|std::localtime}}, and {{lc|std::ctime}} and may be overwritten on each invocation.

===Notes===
This function may not be thread-safe.

POSIX requires that this function sets {{lc|errno}} to {{lc|EOVERFLOW}} if it fails because the argument is too large.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;ctime&gt;

int main()
{
    std::time_t t = std::time(nullptr);
    std::cout &lt;&lt; &quot;UTC:   &quot; &lt;&lt; std::put_time(std::gmtime(&amp;t), &quot;%c %Z&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;local: &quot; &lt;&lt; std::put_time(std::localtime(&amp;t), &quot;%c %Z&quot;) &lt;&lt; '\n';
}
 | output=
UTC:   Wed Dec 28 11:44:28 2011 GMT
local: Wed Dec 28 06:44:28 2011 EST
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc localtime}}
{{dsc see c | c/chrono/gmtime}}
{{dsc end}}

[[de:cpp/chrono/c/gmtime]]
[[es:cpp/chrono/c/gmtime]]
[[fr:cpp/chrono/c/gmtime]]
[[it:cpp/chrono/c/gmtime]]
[[ja:cpp/chrono/c/gmtime]]
[[pt:cpp/chrono/c/gmtime]]
[[ru:cpp/chrono/c/gmtime]]
[[zh:cpp/chrono/c/gmtime]]</text>
      <sha1>0wvnmtjc4v55qw8qz5dpwx4a7jc2q51</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/localtime</title>
    <ns>0</ns>
    <id>2059</id>
    <revision>
      <id>67330</id>
      <parentid>57180</parentid>
      <timestamp>2014-02-05T01:05:28Z</timestamp>
      <contributor>
        <username>SeizeF</username>
        <id>2420</id>
      </contributor>
      <comment>fix bug due to unspecified evaluation order of argument expressions.</comment>
      <text xml:space="preserve" bytes="1506">{{cpp/title| localtime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
std::tm* localtime( const std::time_t *time );
}}

Converts given time since epoch as {{lc|std::time_t}} value into calendar time, expressed in local time. 

===Parameters===
{{par begin}}
{{par | time | pointer to a time_t object to convert}}
{{par end}}

===Return value===

pointer to a static internal {{lc|std::tm}} object on success, or {{lc|NULL}} otherwise. The structure may be shared between {{lc|std::gmtime}}, {{lc|std::localtime}}, and {{lc|std::ctime}}, and may be overwritten on each invocation.

===Notes===
This function may not be thread-safe.

POSIX requires that this function sets {{lc|errno}} to {{lc|EOVERFLOW}} if it fails because the argument is too large.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;ctime&gt;

int main()
{
    std::time_t t = std::time(nullptr);
    std::cout &lt;&lt; &quot;UTC:   &quot; &lt;&lt; std::put_time(std::gmtime(&amp;t), &quot;%c %Z&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;local: &quot; &lt;&lt; std::put_time(std::localtime(&amp;t), &quot;%c %Z&quot;) &lt;&lt; '\n';
}
 | output=
UTC:   Wed Dec 28 11:47:03 2011 GMT
local: Wed Dec 28 06:47:03 2011 EST
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc gmtime}}
{{dsc see c | c/chrono/localtime}}
{{dsc end}}

[[de:cpp/chrono/c/localtime]]
[[es:cpp/chrono/c/localtime]]
[[fr:cpp/chrono/c/localtime]]
[[it:cpp/chrono/c/localtime]]
[[ja:cpp/chrono/c/localtime]]
[[pt:cpp/chrono/c/localtime]]
[[ru:cpp/chrono/c/localtime]]
[[zh:cpp/chrono/c/localtime]]</text>
      <sha1>b4bo0m27vm0ahkgem903gzo9fjc1s4e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/mktime</title>
    <ns>0</ns>
    <id>2060</id>
    <revision>
      <id>85501</id>
      <parentid>85416</parentid>
      <timestamp>2016-04-22T15:45:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>upd example to show the effects on isdst (and also fix TZ so that it reproduces on coliru)</comment>
      <text xml:space="preserve" bytes="2573">{{cpp/title| mktime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
std::time_t mktime( std::tm* time );
}}

Converts local calendar time to a time since epoch as a {{c|time_t}} object. {{tt|time-&gt;tm_wday}} and {{tt|time-&gt;tm_yday}} are ignored. The values in {{tt|time}} are permitted to be outside their normal ranges.

A negative value of {{tt|time-&gt;tm_isdst}} causes {{tt|mktime}} to attempt to determine if Daylight Saving Time was in effect.

If the conversion is successful, the {{tt|time}} object is modified. All fields of {{tt|time}} are updated to fit their proper ranges. {{tt|time-&gt;tm_wday}} and {{tt|time-&gt;tm_yday}} are recalculated using information available in other fields.

===Parameters===
{{par begin}}
{{par | time | pointer to a {{lc|std::tm}} object specifying local calendar time to convert}}
{{par end}}

===Return value===
Time since epoch as a {{lc|std::time_t}} object on success or {{c|-1}} if {{tt|time}} cannot be represented as a {{lc|std::time_t}} object.

===Notes===
If the {{lc|std::tm}} object was obtained from {{lc|std::get_time}} or the POSIX [http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html strptime], the value of {{tt|tm_isdst}} is indeterminate, and needs to be set explicitly before calling {{tt|mktime}}.

===Example===
{{example
 | Display the time 100 months ago. 
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;ctime&gt;
#include &lt;stdlib.h&gt;

int main()
{
    setenv(&quot;TZ&quot;, &quot;/usr/share/zoneinfo/America/New_York&quot;, 1); // POSIX-specific

    std::time_t t = std::time(NULL);
    std::tm tm = *std::localtime(&amp;t);
    std::cout &lt;&lt; &quot;Today is           &quot; &lt;&lt; std::put_time(&amp;tm, &quot;%c %Z&quot;)
              &lt;&lt; &quot; and DST is &quot; &lt;&lt; (tm.tm_isdst ? &quot;in effect&quot; : &quot;not in effect&quot;) &lt;&lt; '\n';
    tm.tm_mon -= 100;  // tm_mon is now outside its normal range
    std::mktime(&amp;tm);  // tm_dst is not set to -1; today's DST status is used
    std::cout &lt;&lt; &quot;100 months ago was &quot; &lt;&lt; std::put_time(&amp;tm, &quot;%c %Z&quot;)
              &lt;&lt; &quot; and DST was &quot; &lt;&lt; (tm.tm_isdst ? &quot;in effect&quot; : &quot;not in effect&quot;) &lt;&lt; '\n';
}
 | output=
Today is           Fri Apr 22 11:40:36 2016 EDT and DST is in effect
100 months ago was Sat Dec 22 10:40:36 2007 EST and DST was not in effect
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc localtime}}
{{dsc see c | c/chrono/mktime}}
{{dsc end}}

[[de:cpp/chrono/c/mktime]]
[[es:cpp/chrono/c/mktime]]
[[fr:cpp/chrono/c/mktime]]
[[it:cpp/chrono/c/mktime]]
[[ja:cpp/chrono/c/mktime]]
[[pl:cpp/chrono/c/mktime]]
[[pt:cpp/chrono/c/mktime]]
[[ru:cpp/chrono/c/mktime]]
[[zh:cpp/chrono/c/mktime]]</text>
      <sha1>1ta0yov0ln89fmlpdfupi0raojzlmu0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/strftime</title>
    <ns>0</ns>
    <id>2061</id>
    <revision>
      <id>77798</id>
      <parentid>68789</parentid>
      <timestamp>2015-04-09T11:12:25Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>const</comment>
      <text xml:space="preserve" bytes="1909">{{cpp/title| strftime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
std::size_t strftime( char* str, std::size_t count, const char* format, const std::tm* time );
}}

Converts the date and time information from a given calendar time {{tt|time}} to a null-terminated multibyte character string {{tt|str}} according to format string {{tt|format}}. Up to {{tt|count}} bytes are written.

===Parameters===
{{par begin}}
{{par | str | pointer to the first element of the char array for output}}
{{par | count | maximum number of bytes to write}}
{{par | format | pointer to a null-terminated multibyte character string specifying the format of conversion. 
{{cpp/chrono/c/strftime format}}
}}
{{par | time | pointer to the date and time information to be converted}}
{{par end}}

===Return value===
The number of bytes written into the character array pointed to by {{tt|str}} not including the terminating {{c|'\0'}} on success. If {{tt|count}} was reached before the entire string could be stored, {{c|0}} is returned and the contents are undefined.

===Example===
{{example
 |
 | code=
#include &lt;ctime&gt;
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    std::time_t t = std::time(NULL);
    char mbstr[100];
    if (std::strftime(mbstr, sizeof(mbstr), &quot;%A %c&quot;, std::localtime(&amp;t))) {
        std::cout &lt;&lt; mbstr &lt;&lt; '\n';
    }
}
 | output=
火曜日 2011年12月27日 17時39分03秒
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc asctime}}
{{dsc inc | cpp/chrono/c/dsc ctime}}
{{dsc inc | cpp/chrono/c/dsc wcsftime}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc see c | c/chrono/strftime}}
{{dsc end}}

[[de:cpp/chrono/c/strftime]]
[[es:cpp/chrono/c/strftime]]
[[fr:cpp/chrono/c/strftime]]
[[it:cpp/chrono/c/strftime]]
[[ja:cpp/chrono/c/strftime]]
[[pt:cpp/chrono/c/strftime]]
[[ru:cpp/chrono/c/strftime]]
[[zh:cpp/chrono/c/strftime]]</text>
      <sha1>lsfpqbdxnzhypcpnht5y1ihhmlrdswe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/time</title>
    <ns>0</ns>
    <id>2055</id>
    <revision>
      <id>78023</id>
      <parentid>72679</parentid>
      <timestamp>2015-04-24T15:11:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>rename argument differently from function name</comment>
      <text xml:space="preserve" bytes="1873">{{cpp/title| time}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
std::time_t time( std::time_t* arg );
}}

Returns the current calendar time encoded as a {{lc|std::time_t}} object, and also stores it in the object pointed to by {{tt|arg}}, unless {{tt|arg}} is a null pointer.

===Parameters===
{{par begin}}
{{par | arg | pointer to a {{lc|std::time_t}} object to store the time, or a null pointer}}
{{par end}}

===Return value===
Current calendar time encoded as {{lc|std::time_t}} object on success, {{c|(std::time_t)(-1)}} on error. If {{tt|arg}} is not null, the return value is also stored in the object pointed to by {{tt|arg}}.

===Notes===
The encoding of calendar time in {{lc|std::time_t}} is unspecified, but most systems conform to [http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html POSIX specification] and return a value of integral type holding the number of seconds since [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15 the Epoch]. Implementations in which {{lc|std::time_t}} is a 32-bit signed integer (many historical implementations) fail in the year 2038.

===Example===
{{example
 |
 | code=
#include &lt;ctime&gt;
#include &lt;iostream&gt;

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout &lt;&lt; std::asctime(std::localtime(&amp;result))
              &lt;&lt; result &lt;&lt; &quot; seconds since the Epoch\n&quot;;
}
 | output=
Wed Sep 21 10:27:52 2011
1316615272 seconds since the Epoch
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc localtime}}
{{dsc inc | cpp/chrono/c/dsc gmtime}}
{{dsc inc | cpp/chrono/dsc system_clock}}
{{dsc see c | c/chrono/time}}
{{dsc end}}

[[de:cpp/chrono/c/time]]
[[es:cpp/chrono/c/time]]
[[fr:cpp/chrono/c/time]]
[[it:cpp/chrono/c/time]]
[[ja:cpp/chrono/c/time]]
[[pt:cpp/chrono/c/time]]
[[ru:cpp/chrono/c/time]]
[[tr:cpp/chrono/c/time]]
[[zh:cpp/chrono/c/time]]</text>
      <sha1>7ckdexw2sgx8r33ul4zx7l7que3wcao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/time t</title>
    <ns>0</ns>
    <id>2841</id>
    <revision>
      <id>71720</id>
      <parentid>64072</parentid>
      <timestamp>2014-06-22T01:04:51Z</timestamp>
      <contributor>
        <username>Ashish20</username>
        <id>519</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="763">{{cpp/title|time_t}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime | 1=
typedef /* unspecified */ time_t;
}}
Arithmetic type capable of representing times.

Although not defined, this is almost always an integral value holding the number of seconds (not counting leap seconds) since 00:00, Jan 1 1970 UTC, corresponding to [[enwiki:Unix_time | POSIX time]].

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc time}}
{{dsc inc | cpp/chrono/c/dsc localtime}}
{{dsc inc | cpp/chrono/c/dsc gmtime}}
{{dsc see c | c/chrono/time_t}}
{{dsc end}}

[[de:cpp/chrono/c/time t]]
[[es:cpp/chrono/c/time t]]
[[fr:cpp/chrono/c/time t]]
[[it:cpp/chrono/c/time t]]
[[ja:cpp/chrono/c/time t]]
[[pt:cpp/chrono/c/time t]]
[[ru:cpp/chrono/c/time t]]
[[zh:cpp/chrono/c/time t]]</text>
      <sha1>p1h1ods777tufr1jz4z1rtb4n9l6wg4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/timespec</title>
    <ns>0</ns>
    <id>15535</id>
    <revision>
      <id>86220</id>
      <parentid>86219</parentid>
      <timestamp>2016-06-24T20:04:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Cubbi moved page [[cpp/chrono/c/timespec get]] to [[cpp/chrono/c/timespec]] without leaving a redirect: wrote up timespec in the wrong url</comment>
      <text xml:space="preserve" bytes="524">{{cpp/title|timespec}}
{{cpp/chrono/c/navbar}}

{{ddcl | header=ctime | since=c++17 |
struct timespec;
}}
Structure holding an interval broken down into seconds and nanoseconds.

===Member objects===
{{dsc begin}}
{{dsc | nolink=true | {{dsc small|std::time_t}} tv_sec | 2=whole seconds &amp;ndash; &amp;gt;= 0}}
{{dsc | nolink=true | {{dsc small|long}} tv_nsec | nanoseconds &amp;ndash; [0, 999999999]}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc timespec_get}}
{{dsc inc | cpp/chrono/c/dsc tm}}
{{dsc end}}</text>
      <sha1>e1ejn6d83kcxbxcxvbay084uneft43y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/timespec get</title>
    <ns>0</ns>
    <id>15536</id>
    <revision>
      <id>86221</id>
      <timestamp>2016-06-24T20:08:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0063r3 (C11)</comment>
      <text xml:space="preserve" bytes="1858">{{cpp/title|timespec_get}}
{{cpp/chrono/c/navbar}}
{{dcl begin}}
{{dcl header| ctime}}
{{dcl | since=c++17| int timespec_get( std::timespec* ts, int base) }}
{{dcl | since=c++17|#define TIME_UTC /* implementation-defined */ }}
{{dcl end}}
@1@ Modifies the {{lc|std::timespec}} object pointed to by {{tt|ts}} to hold the current calendar time in the time base {{tt|base}}.
@2@ Expands to a value suitable for use as the {{tt|base}} argument of {{tt|std::timespec_get}}

Other macro constants beginning with {{tt|TIME_}} may be provided by the implementation to indicate additional time bases

If {{tt|base}} is {{tt|TIME_UTC}}, then
* {{tt|ts-&gt;tv_sec}} is set to the number of seconds since an implementation defined epoch, truncated to a whole value
* {{tt|ts-&gt;tv_nsec}} member is set to the integral number of nanoseconds, rounded to the resolution of the system clock

===Parameters===
{{par begin}}
{{par | ts | pointer to an object of type {{lc|std::timespec}} }}
{{par | base | {{tt|TIME_UTC}} or another nonzero integer value indicating the time base}}
{{par end}}

===Return value===
The value of {{tt|base}} if successful, zero otherwise.

===Notes===
The POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html clock_gettime(CLOCK_REALTIME, ts)] may also be used to populate a {{tt|std::timespec}} with the time since the Epoch.

===Example===
{{example|code=
#include &lt;cstdio&gt;
#include &lt;ctime&gt;

int main()
{
    std::timespec ts;
    std::timespec_get(&amp;ts, TIME_UTC);
    char buff[100];
    std::strftime(buff, sizeof buff, &quot;%D %T&quot;, std::gmtime(&amp;ts.tv_sec));
    std::printf(&quot;Current time: %s.%09ld UTC\n&quot;, buff, ts.tv_nsec);
}
|p=true
|output=
Current time: 06/24/16 20:07:42.949494132 UTC
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc timespec}}
{{dsc inc | cpp/chrono/c/dsc time}}
{{dsc end}}</text>
      <sha1>s1f1fpd8yewa6vtmgm7aongq3ut6upy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/tm</title>
    <ns>0</ns>
    <id>2842</id>
    <revision>
      <id>89325</id>
      <parentid>89324</parentid>
      <timestamp>2017-01-18T12:35:43Z</timestamp>
      <contributor>
        <username>Morwenn</username>
        <id>1293</id>
      </contributor>
      <comment>Undo revision 89324 by [[Special:Contributions/41.251.153.224|41.251.153.224]] ([[User talk:41.251.153.224|talk]])</comment>
      <text xml:space="preserve" bytes="1779">{{cpp/title| tm}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=ctime |
struct tm;
}}

Structure holding a calendar date and time broken down into its components.

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_sec | seconds after the minute &amp;ndash; [0, 61]{{mark until c++11}} / [0, 60] {{mark since c++11}}&lt;ref name=&quot;leapsecond&quot; group=&quot;note&quot;&gt;Range allows for a positive leap second. Two leap seconds in the same minute are not allowed (the range 0..61 was a defect introduced in C89 and corrected in C99)&lt;/ref&gt;}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_min | minutes after the hour &amp;ndash; [0, 59]}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_hour | hours since midnight &amp;ndash; [0, 23]}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_mday | day of the month &amp;ndash; [1, 31]}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_mon | months since January &amp;ndash; [0, 11]}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_year | years since 1900}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_wday | days since Sunday &amp;ndash; [0, 6]}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_yday | days since January 1 &amp;ndash; [0, 365]}}
{{dsc mem obj | nolink=true | {{dsc small|int}} tm_isdst | Daylight Saving Time flag. The value is positive if DST is in effect, zero if not and negative if no information is available}}
{{dsc end}}

======Notes======
&lt;references group=&quot;note&quot; /&gt;

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc localtime}}
{{dsc inc | cpp/chrono/c/dsc gmtime}}
{{dsc see c | c/chrono/tm}}
{{dsc end}}

[[de:cpp/chrono/c/tm]]
[[es:cpp/chrono/c/tm]]
[[fr:cpp/chrono/c/tm]]
[[it:cpp/chrono/c/tm]]
[[ja:cpp/chrono/c/tm]]
[[pt:cpp/chrono/c/tm]]
[[ru:cpp/chrono/c/tm]]
[[zh:cpp/chrono/c/tm]]</text>
      <sha1>ohr5sg3crn1adhqmtp4cncun3h80oos</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/c/wcsftime</title>
    <ns>0</ns>
    <id>4647</id>
    <revision>
      <id>77799</id>
      <parentid>57190</parentid>
      <timestamp>2015-04-09T11:14:16Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>const</comment>
      <text xml:space="preserve" bytes="1864">{{cpp/title| wcsftime}}
{{cpp/chrono/c/navbar}}
{{ddcl | header=cwchar |
std::size_t wcsftime( wchar_t* str, std::size_t count, const wchar_t* format, const std::tm* time );
}}

Converts the date and time information from a given calendar time {{tt|time}} to a null-terminated wide character string {{tt|str}} according to format string {{tt|format}}. Up to {{tt|count}} bytes are written.

===Parameters===
{{par begin}}
{{par | str | pointer to the first element of the wchar_t array for output}}
{{par | count | maximum number of wide characters to write}}
{{par | format | pointer to a null-terminated wide character string specifying the format of conversion. 
{{cpp/chrono/c/strftime format}}
}}
{{par | time | pointer to the date and time information to be converted}}
{{par end}}

===Return value===
Number of wide characters written into the wide character array pointed to by {{tt|str}} not including the terminating {{c|L'\0'}} on success. If {{tt|count}} was reached before the entire string could be stored, {{c|0}} is returned and the contents are undefined.

===Example===
{{example
 |
 | code=
#include &lt;ctime&gt;
#include &lt;cwchar&gt;
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    std::time_t t = std::time(NULL);
    wchar_t wstr[100];
    if(std::wcsftime(wstr, 100, L&quot;%A %c&quot;, std::localtime(&amp;t))) {
        std::wcout &lt;&lt; wstr &lt;&lt; '\n';
    }
}
 | output=
火曜日 2011年12月27日 17時43分13秒
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc strftime}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc see c | c/chrono/wcsftime}}
{{dsc end}}

[[de:cpp/chrono/c/wcsftime]]
[[es:cpp/chrono/c/wcsftime]]
[[fr:cpp/chrono/c/wcsftime]]
[[it:cpp/chrono/c/wcsftime]]
[[ja:cpp/chrono/c/wcsftime]]
[[pt:cpp/chrono/c/wcsftime]]
[[ru:cpp/chrono/c/wcsftime]]
[[zh:cpp/chrono/c/wcsftime]]</text>
      <sha1>nl8nkphagb2ky9skzc7s9ukm3vyt10r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration</title>
    <ns>0</ns>
    <id>2714</id>
    <revision>
      <id>91977</id>
      <parentid>85735</parentid>
      <timestamp>2017-03-31T22:01:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Member types */ P0548R1, revboxing for now</comment>
      <text xml:space="preserve" bytes="5162">{{cpp/chrono/title|duration}}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | since=c++11 | 1=
template&lt;
    class Rep, 
    class Period = std::ratio&lt;1&gt; 
&gt; class duration;
}}
{{dcl end}}

Class template {{tt|std::chrono::duration}} represents a time interval. 

It consists of a count of ticks of type {{tt|Rep}} and a tick period, where the tick period is a compile-time rational constant representing the number of seconds from one tick to the next.

The only data stored in a {{tt|duration}} is a tick count of type {{tt|Rep}}.&lt;!-- per N2661, not actually in the standard wording --&gt;  If {{tt|Rep}} is floating point, then the {{tt|duration}} can represent fractions of ticks.  {{tt|Period}} is included as part of the duration's type, and is only used when converting between different durations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|rep}} | {{tt|Rep}}, an arithmetic type representing the number of ticks}}
{{dsc | {{tt|period}} | {{rev inl|until=c++17|{{tt|Period}}}}{{rev inl|since=c++17|{{tt|typename Period::type}}}}, a {{lc|std::ratio}} representing the tick period (i.e. the number of seconds per tick)}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor}}
{{dsc inc | cpp/chrono/duration/dsc operator{{=}} }}
{{dsc inc | cpp/chrono/duration/dsc count }}
{{dsc inc | cpp/chrono/duration/dsc zero }}
{{dsc inc | cpp/chrono/duration/dsc min }}
{{dsc inc | cpp/chrono/duration/dsc max }}
{{dsc inc | cpp/chrono/duration/dsc operator_arith }}
{{dsc inc | cpp/chrono/duration/dsc operator_arith2 }}
{{dsc inc | cpp/chrono/duration/dsc operator_arith3 }}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc common_type}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith4}}
{{dsc inc | cpp/chrono/duration/dsc operator_cmp}}
{{dsc inc | cpp/chrono/duration/dsc duration_cast }}
{{dsc inc | cpp/chrono/duration/dsc floor}}
{{dsc inc | cpp/chrono/duration/dsc ceil}}
{{dsc inc | cpp/chrono/duration/dsc round}}
{{dsc inc | cpp/chrono/duration/dsc abs}}
{{dsc end}}

===Helper types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{lc|std::chrono::nanoseconds}} | {{c|duration&lt;/*signed integer type of at least 64 bits*/, std::nano&gt; }} }}
{{dsc | {{lc|std::chrono::microseconds}} | {{c|duration&lt;/*signed integer type of at least 55 bits*/, std::micro&gt; }} }}
{{dsc | {{lc|std::chrono::milliseconds}} | {{c|duration&lt;/*signed integer type of at least 45 bits*/, std::milli&gt;}} }}
{{dsc | {{lc|std::chrono::seconds}} | {{c|duration&lt;/*signed integer type of at least 35 bits*/&gt; }} }}
{{dsc | {{lc|std::chrono::minutes}} | {{c|duration&lt;/*signed integer type of at least 29 bits*/, std::ratio&lt;60&gt;&gt; }} }}
{{dsc | {{lc|std::chrono::hours}} | {{c|duration&lt;/*signed integer type of at least 23 bits*/, std::ratio&lt;3600&gt;&gt; }} }}
{{dsc end}}
Note: each of the predefined duration types covers a range of at least ±292 years.

===Helper classes===
{{dsc begin}}
{{dsc tclass | cpp/chrono/treat_as_floating_point | indicates that a duration is convertible to duration with different tick period }}
{{dsc tclass | cpp/chrono/duration_values | constructs zero, min, and max values of a tick count of given type}}
{{dsc end}}

===Literals===
{{dsc begin}}
{{dsc namespace | std::literals::chrono_literals | inline=true }}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;h}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;min}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;s}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;ms}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;us}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;ns}}
{{dsc end}}


===Example===
{{example
 | This example shows how to define several custom duration types and convert between types:
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

int main()
{
    using shakes = std::chrono::duration&lt;int, std::ratio&lt;1, 100000000&gt;&gt;;
    using jiffies = std::chrono::duration&lt;int, std::centi&gt;;
    using microfortnights = std::chrono::duration&lt;float, std::ratio&lt;12096,10000&gt;&gt;;
    using nanocenturies = std::chrono::duration&lt;float, std::ratio&lt;3155,1000&gt;&gt;;

    std::chrono::seconds sec(1);
   
    std::cout &lt;&lt; &quot;1 second is:\n&quot;;

    // integer scale conversion with no precision loss: no cast
    std::cout &lt;&lt; std::chrono::microseconds(sec).count() &lt;&lt; &quot; microseconds\n&quot;
              &lt;&lt; shakes(sec).count() &lt;&lt; &quot; shakes\n&quot;
              &lt;&lt; jiffies(sec).count() &lt;&lt; &quot; jiffies\n&quot;;

    // integer scale conversion with precision loss: requires a cast
    std::cout &lt;&lt; std::chrono::duration_cast&lt;std::chrono::minutes&gt;(sec).count()
              &lt;&lt; &quot; minutes\n&quot;;

    // floating-point scale conversion: no cast
    std::cout &lt;&lt; microfortnights(sec).count() &lt;&lt; &quot; microfortnights\n&quot;
              &lt;&lt; nanocenturies(sec).count() &lt;&lt; &quot; nanocenturies\n&quot;;
}
 | output=
1 second is:
1000000 microseconds
100000000 shakes
100 jiffies
0 minutes
0.82672 microfortnights
0.316957 nanocenturies
}}

[[de:cpp/chrono/duration]]
[[es:cpp/chrono/duration]]
[[fr:cpp/chrono/duration]]
[[it:cpp/chrono/duration]]
[[ja:cpp/chrono/duration]]
[[pt:cpp/chrono/duration]]
[[ru:cpp/chrono/duration]]
[[zh:cpp/chrono/duration]]</text>
      <sha1>8pa719d9bqfj1rfthpm368xzevtuphq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration values</title>
    <ns>0</ns>
    <id>8640</id>
    <revision>
      <id>62683</id>
      <parentid>57212</parentid>
      <timestamp>2013-07-01T23:32:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1195">{{cpp/chrono/title|duration_values}}
{{cpp/chrono/duration_values/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | since=c++11 | 1=
template &lt;class Rep&gt;
struct duration_values;
}}
{{dcl end}}

The {{tt|std::chrono::duration_values}} type defines three common durations:

* {{c|std::chrono::duration_values::zero}}
* {{c|std::chrono::duration_values::min}}
* {{c|std::chrono::duration_values::max}}

The [[cpp/chrono/duration/zero|zero]], [[cpp/chrono/duration/min|min]], and [[cpp/chrono/duration/max|max]] methods in {{lc|std::chrono::duration}} forward their work to these methods.

This type can be specialized if the representation {{tt|Rep}} requires a specific implementation to return these duration objects.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration_values/dsc zero }}
{{dsc inc | cpp/chrono/duration_values/dsc min }}
{{dsc inc | cpp/chrono/duration_values/dsc max }}
{{dsc end}}

[[de:cpp/chrono/duration values]]
[[es:cpp/chrono/duration values]]
[[fr:cpp/chrono/duration values]]
[[it:cpp/chrono/duration values]]
[[ja:cpp/chrono/duration values]]
[[pt:cpp/chrono/duration values]]
[[ru:cpp/chrono/duration values]]
[[zh:cpp/chrono/duration values]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration values/max</title>
    <ns>0</ns>
    <id>8643</id>
    <revision>
      <id>57215</id>
      <parentid>49378</parentid>
      <timestamp>2013-06-01T05:49:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="774">{{cpp/chrono/duration_values/title | max }}
{{cpp/chrono/duration_values/navbar}}
{{dcl begin}}
{{dcl |
static constexpr Rep max();
}}
{{dcl end}}

Returns the largest possible representation.

===Parameters===
(none)

===Return value===
returns {{c|std::numeric_limits&lt;Rep&gt;::max()}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc max }}
{{dsc inc | cpp/chrono/duration_values/dsc zero }}
{{dsc inc | cpp/chrono/duration_values/dsc min }}
{{dsc end}}

[[de:cpp/chrono/duration values/max]]
[[es:cpp/chrono/duration values/max]]
[[fr:cpp/chrono/duration values/max]]
[[it:cpp/chrono/duration values/max]]
[[ja:cpp/chrono/duration values/max]]
[[pt:cpp/chrono/duration values/max]]
[[ru:cpp/chrono/duration values/max]]
[[zh:cpp/chrono/duration values/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration values/min</title>
    <ns>0</ns>
    <id>8642</id>
    <revision>
      <id>57216</id>
      <parentid>49379</parentid>
      <timestamp>2013-06-01T05:49:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="776">{{cpp/chrono/duration_values/title | min }}
{{cpp/chrono/duration_values/navbar}}
{{dcl begin}}
{{dcl |
static constexpr Rep min();
}}
{{dcl end}}

Returns the lowest possible representation.

===Parameters===
(none)

===Return value===
returns {{c|std::numeric_limits&lt;Rep&gt;::lowest()}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc min }}
{{dsc inc | cpp/chrono/duration_values/dsc zero }}
{{dsc inc | cpp/chrono/duration_values/dsc max }}
{{dsc end}}

[[de:cpp/chrono/duration values/min]]
[[es:cpp/chrono/duration values/min]]
[[fr:cpp/chrono/duration values/min]]
[[it:cpp/chrono/duration values/min]]
[[ja:cpp/chrono/duration values/min]]
[[pt:cpp/chrono/duration values/min]]
[[ru:cpp/chrono/duration values/min]]
[[zh:cpp/chrono/duration values/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration values/zero</title>
    <ns>0</ns>
    <id>8641</id>
    <revision>
      <id>57217</id>
      <parentid>49380</parentid>
      <timestamp>2013-06-01T05:49:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="752">{{cpp/chrono/duration_values/title | zero }}
{{cpp/chrono/duration_values/navbar}}
{{dcl begin}}
{{dcl |
static constexpr Rep zero();
}}
{{dcl end}}

Returns a zero-length representation.

===Parameters===
(none)

===Return value===
returns {{c|Rep(0)}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc zero }}
{{dsc inc | cpp/chrono/duration_values/dsc min }}
{{dsc inc | cpp/chrono/duration_values/dsc max }}
{{dsc end}}

[[de:cpp/chrono/duration values/zero]]
[[es:cpp/chrono/duration values/zero]]
[[fr:cpp/chrono/duration values/zero]]
[[it:cpp/chrono/duration values/zero]]
[[ja:cpp/chrono/duration values/zero]]
[[pt:cpp/chrono/duration values/zero]]
[[ru:cpp/chrono/duration values/zero]]
[[zh:cpp/chrono/duration values/zero]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/abs</title>
    <ns>0</ns>
    <id>14499</id>
    <revision>
      <id>81533</id>
      <timestamp>2015-10-27T16:40:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1325">{{cpp/chrono/title|abs{{small|(std::chrono::duration)}}}}
{{cpp/chrono/duration/navbar}}
{{ddcl | since=c++17 | header=chrono|
template &lt;class Rep, class Period&gt;
constexpr duration&lt;Rep, Period&gt; abs(duration&lt;Rep, Period&gt; d)
}}

Returns the absolute value of the duration {{tt|d}}. Specifically, if {{c|1=d &gt;= d.zero()}}, return {{c|d}}, otherwise return {{c|-d}}.

The function does not participate in the overload resolution unless {{c|std::numeric_limits&lt;Rep&gt;::is_signed}} is {{c|true}}.

===Parameters===
{{par begin}}
{{par | d | duration}}
{{par end}}

===Return value===
Absolute value of {{tt|d}}

===Possible implementation===
{{eq fun|1=
template &lt;class Rep, class Period, class = std::enable_if_t&lt;
   std::chrono::duration&lt;Rep, Period&gt;::min() &lt; std::chrono::duration&lt;Rep, Period&gt;::zero()&gt;&gt;
constexpr std::chrono::duration&lt;Rep, Period&gt; abs(duration&lt;Rep, Period&gt; d)
{
    return d &gt;= d.zero() ? d : -d;
}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith }}
{{dsc inc | cpp/numeric/math/dsc abs}}
{{dsc end}}

[[de:cpp/chrono/duration/abs]]
[[es:cpp/chrono/duration/abs]]
[[fr:cpp/chrono/duration/abs]]
[[it:cpp/chrono/duration/abs]]
[[ja:cpp/chrono/duration/abs]]
[[pt:cpp/chrono/duration/abs]]
[[ru:cpp/chrono/duration/abs]]
[[zh:cpp/chrono/duration/abs]]</text>
      <sha1>9m4ug60vqit0tud4c9xyxzro2itq3ob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/ceil</title>
    <ns>0</ns>
    <id>14497</id>
    <revision>
      <id>85597</id>
      <parentid>81532</parentid>
      <timestamp>2016-04-26T07:55:30Z</timestamp>
      <contributor>
        <ip>223.3.97.155</ip>
      </contributor>
      <text xml:space="preserve" bytes="1686">{{cpp/chrono/title|ceil{{small|(std::chrono::duration)}}}}
{{cpp/chrono/duration/navbar}}
{{ddcl | since=c++17 | header=chrono|
template &lt;class ToDuration, class Rep, class Period&gt;
constexpr ToDuration ceil(const duration&lt;Rep, Period&gt;&amp; d);
}}

Returns the smallest duration {{tt|t}} representable in {{tt|ToDuration}} that is greater or equal to {{tt|d}}.

The function does not participate in the overload resolution unless {{tt|ToDuration}} is an instance of {{lc|std::chrono::duration}}.

===Parameters===
{{par begin}}
{{par | d | duration to convert}}
{{par end}}

===Return value===
{{tt|d}} rounded up to a duration of type {{tt|ToDuration}}.

===Possible implementation===
{{eq fun|1=
template &lt;class T&gt; struct is_duration : std::false_type {};
template &lt;class Rep, class Period&gt; struct is_duration&lt;
    std::chrono::duration&lt;Rep, Period&gt;&gt; : std::true_type {};

template &lt;class To, class Rep, class Period,
          class = enable_if_t&lt;is_duration&lt;To&gt;{}&gt;&gt;
constexpr To ceil(const std::chrono::duration&lt;Rep, Period&gt;&amp; d)
{
    To t = std::chrono::duration_cast&lt;To&gt;(d);
    if (t &lt; d)
        return t + To{1};
    return t;
}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc duration_cast}}
{{dsc inc | cpp/chrono/duration/dsc floor}}
{{dsc inc | cpp/chrono/duration/dsc round}}
{{dsc inc | cpp/chrono/time_point/dsc ceil}}
{{dsc inc | cpp/numeric/math/dsc ceil}}
{{dsc end}}

[[de:cpp/chrono/duration/ceil]]
[[es:cpp/chrono/duration/ceil]]
[[fr:cpp/chrono/duration/ceil]]
[[it:cpp/chrono/duration/ceil]]
[[ja:cpp/chrono/duration/ceil]]
[[pt:cpp/chrono/duration/ceil]]
[[ru:cpp/chrono/duration/ceil]]
[[zh:cpp/chrono/duration/ceil]]</text>
      <sha1>jud5htv2waq8biqsftmn5ftz5i324ta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/common type</title>
    <ns>0</ns>
    <id>8666</id>
    <revision>
      <id>89081</id>
      <parentid>64318</parentid>
      <timestamp>2016-12-27T21:22:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>that restates the obvious</comment>
      <text xml:space="preserve" bytes="1802">{{cpp/title|common_type&lt;small&gt;(std::chrono::duration)&lt;/small&gt;}}
{{cpp/chrono/duration/navbar}}
{{ddcl | since=c++11 |
template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
struct common_type&lt;std::chrono::duration&lt;Rep1, Period1&gt;,
                   std::chrono::duration&lt;Rep2, Period2&gt;&gt; {
    typedef std::chrono::duration&lt;
        typename std::common_type&lt;Rep1, Rep2&gt;::type, /*see note*/&gt; type;
};
}}

Exposes the type named {{tt|type}}, which is the common type of two {{lc|std::chrono::duration}}s.

===Note===

The period of the resulting duration is the greatest common divisor of {{tt|Period1}} and {{tt|Period2}}.

===Example===

{{example
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

// std::chrono already finds the greatest common divisor,
// likely using std::common_type&lt;&gt;. We make the type
// deduction externally. 

template &lt;typename T,typename S&gt;
auto durationDiff(const T&amp; t, const S&amp; s)  -&gt; typename std::common_type&lt;T,S&gt;::type
{
    typedef typename std::common_type&lt;T,S&gt;::type Common;
    return Common(t) - Common(s);
}


int main() 
{
    typedef std::chrono::milliseconds milliseconds;
    typedef std::chrono::microseconds microseconds;
    
    auto ms = milliseconds(30);
    auto us = microseconds(1100);
    
    std::cout &lt;&lt; ms.count() &lt;&lt; &quot;ms - &quot; &lt;&lt; us.count() &lt;&lt; &quot;us = &quot; 
              &lt;&lt; durationDiff(ms,us).count() &lt;&lt;  &quot;\n&quot;;
}
 | output=
30ms - 1100us = 28900
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc common_type}}
{{dsc end}}

[[de:cpp/chrono/duration/common type]]
[[es:cpp/chrono/duration/common type]]
[[fr:cpp/chrono/duration/common type]]
[[it:cpp/chrono/duration/common type]]
[[ja:cpp/chrono/duration/common type]]
[[pt:cpp/chrono/duration/common type]]
[[ru:cpp/chrono/duration/common type]]
[[zh:cpp/chrono/duration/common type]]</text>
      <sha1>huqii5o4xhruqu5jdho42a7qwyzszxk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/count</title>
    <ns>0</ns>
    <id>8632</id>
    <revision>
      <id>57197</id>
      <parentid>49365</parentid>
      <timestamp>2013-06-01T05:49:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1296">{{cpp/chrono/duration/title | count }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl |
constexpr rep count() const;
}}
{{dcl end}}

Returns the number of ticks for this duration.

===Parameters===
(none)

===Return value===
The number of ticks for this duration.

===Example===
{{example 
|
| code=
#include &lt;chrono&gt;
#include &lt;iostream&gt;
int main()
{
    std::chrono::milliseconds ms{3}; // 3 milliseconds
    // 6000 microseconds constructed from 3 milliseconds
    std::chrono::microseconds us = 2*ms;
    // 30Hz clock using fractional ticks
    std::chrono::duration&lt;double, std::ratio&lt;1, 30&gt;&gt; hz30(3.5);

    std::cout &lt;&lt;  &quot;3 ms duration has &quot; &lt;&lt; ms.count() &lt;&lt; &quot; ticks\n&quot;
              &lt;&lt;  &quot;6000 us duration has &quot; &lt;&lt; us.count() &lt;&lt; &quot; ticks\n&quot;
              &lt;&lt;  &quot;3.5 30Hz duration has &quot; &lt;&lt; hz30.count() &lt;&lt; &quot; ticks\n&quot;;       
}
| output=
3 ms duration has 3 ticks
6000 us duration has 6000 ticks
3.5 30Hz duration has 3.5 ticks
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc duration_cast }}
{{dsc end}}

[[de:cpp/chrono/duration/count]]
[[es:cpp/chrono/duration/count]]
[[fr:cpp/chrono/duration/count]]
[[it:cpp/chrono/duration/count]]
[[ja:cpp/chrono/duration/count]]
[[pt:cpp/chrono/duration/count]]
[[ru:cpp/chrono/duration/count]]
[[zh:cpp/chrono/duration/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/duration</title>
    <ns>0</ns>
    <id>8620</id>
    <revision>
      <id>73595</id>
      <parentid>64407</parentid>
      <timestamp>2014-11-06T16:53:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+int to double conversion in the example</comment>
      <text xml:space="preserve" bytes="3245">{{cpp/chrono/duration/title | duration}}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
constexpr duration() {{=}} default;
}}
{{dcl | num=2 | since=c++11 |
duration( const duration&amp; ) {{=}} default;
}}
{{dcl | num=3 | since=c++11 |
template&lt; class Rep2 &gt;
constexpr explicit duration( const Rep2&amp; r );
}}
{{dcl | num=4 | since=c++11 |
template&lt; class Rep2, class Period2 &gt;
constexpr duration( const duration&lt;Rep2,Period2&gt;&amp; d );
}}
{{dcl end}}

Constructs a new {{tt|duration}} from one of several optional data sources.

@1@ The default constructor is defaulted.

@2@ The copy constructor  is defaulted (makes a bitwise copy of the tick count).

@3@ Constructs a duration with {{tt|r}} ticks.  Note that this constructor only participates in overload resolution if {{tt|Rep2}} (the argument type) is implicitly convertible to {{tt|rep}} (the type of this duration's ticks) and

::* {{c|std::chrono::treat_as_floating_point&lt;rep&gt;::value}} is true, or
::* {{c|std::chrono::treat_as_floating_point&lt;Rep2&gt;::value}} is false.

@@(that is, a duration with an integer tick count cannot be constructed from a floating-point value, but a duration with a floating-point tick count can be constructed from an integer value)

@4@ Constructs a duration by converting {{tt|d}} to an appropriate period and tick count, as if by {{c|std::chrono::duration_cast&lt;duration&gt;(d).count()}}.  In order to prevent truncation during conversion, this constructor only participates in overload resolution if no overflow is induced by conversion and:

::* {{c|std::chrono::treat_as_floating_point&lt;rep&gt;::value {{==}} true}}

@@ or both: 

::* {{c|std::ratio_divide&lt;Period2, period&gt;::den {{==}} 1}}, and  
::* {{c|std::chrono::treat_as_floating_point&lt;Rep2&gt;::value {{==}} false}}.

@@ (that is, either the duration uses floating-point ticks, or {{tt|Period2}} is exactly divisible by period)

===Parameters===
{{par begin}}
{{par | r  | a tick count}}
{{par | d  | a duration to copy from}}
{{par end}}

===Example===
{{example
 | The following code shows several examples (both valid and invalid) of how to construct durations:
 | code=
#include &lt;chrono&gt;
int main()
{
    std::chrono::hours h(1); // one hour
    std::chrono::milliseconds ms{3}; // 3 milliseconds
    std::chrono::duration&lt;int, std::kilo&gt; ks(3); // 3000 seconds

    // error: treat_as_floating_point&lt;int&gt;::value == false,
    // This duration allows whole tick counts only
//  std::chrono::duration&lt;int, std::kilo&gt; d3(3.5);

    // 30Hz clock using fractional ticks
    std::chrono::duration&lt;double, std::ratio&lt;1, 30&gt;&gt; hz30(3.5);

    // 3000 microseconds constructed from 3 milliseconds
    std::chrono::microseconds us = ms;
    // error: 1/1000000 is not divisible by 1/1000
//  std::chrono::milliseconds ms2 = us
    std::chrono::duration&lt;double, std::milli&gt; ms2 = us; // 3.0 milliseconds
}
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc operator{{=}} }}
{{dsc end}}

[[de:cpp/chrono/duration/duration]]
[[es:cpp/chrono/duration/duration]]
[[fr:cpp/chrono/duration/duration]]
[[it:cpp/chrono/duration/duration]]
[[ja:cpp/chrono/duration/duration]]
[[pt:cpp/chrono/duration/duration]]
[[ru:cpp/chrono/duration/duration]]
[[zh:cpp/chrono/duration/duration]]</text>
      <sha1>ofxyd0k995vdqb2s6sz77fgo3u4icte</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/duration cast</title>
    <ns>0</ns>
    <id>5053</id>
    <revision>
      <id>82225</id>
      <parentid>81535</parentid>
      <timestamp>2015-12-08T20:06:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>people keep overusing duration_cast when fractional units make a lot more sense (recent example http://stackoverflow.com/a/34159379</comment>
      <text xml:space="preserve" bytes="2845">{{cpp/chrono/title|duration_cast}}
{{cpp/chrono/duration/navbar}}
{{ddcl | since=c++11 |
template &lt;class ToDuration, class Rep, class Period&gt;
constexpr ToDuration duration_cast(const duration&lt;Rep,Period&gt;&amp; d);
}}
Converts a {{lc|std::chrono::duration}} to a duration of different type {{tt|ToDuration}}.

No implicit conversions are used. Multiplications and divisions are avoided where possible, if it is known at compile time that one or more parameters are {{c|1}}. Computations are done in the widest type available and converted, as if by {{ltt|cpp/language/static_cast|static_cast}}, to the result type only when finished.

===Parameters===
{{par begin}}
{{par | d | duration to convert}}
{{par end}}

===Return value===
{{tt|d}} converted to a duration of type {{tt|ToDuration}}.

===Notes===
The function does not participate in the overload resolution unless {{tt|ToDuration}} is an instance of {{lc|std::chrono::duration}}.

Casting between floating-point durations or between integer durations where the source period is exactly divisible by the target period (e.g. hours to minutes) can be performed [[cpp/chrono/duration/duration|implicitly]], no {{c|duration_cast}} is needed.

Casting from a floating-point duration to an integer duration is [[cpp/language/implicit cast#Floating_-_integral_conversions|subject to undefined behavior]] when the floating-point value is NaN, infinity, or too large to be representable by the target's integer type.

===Example===
{{example
 | This example measures the execution time of a function
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;ratio&gt;
#include &lt;thread&gt;
 
void f()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}
 
int main()
{
    auto t1 = std::chrono::high_resolution_clock::now();
    f();
    auto t2 = std::chrono::high_resolution_clock::now();

    // integral duration: requires duration_cast
    auto int_ms = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(t2 - t1);

    // fractional duration: no duration_cast needed
    std::chrono::duration&lt;double, std::milli&gt; fp_ms = t2 - t1;
    
    std::cout &lt;&lt; &quot;f() took &quot; &lt;&lt; fp_ms.count() &lt;&lt; &quot; ms, &quot;
              &lt;&lt; &quot;or &quot; &lt;&lt; int_ms.count() &lt;&lt; &quot; whole milliseconds\n&quot;;
}
|p=true
 | output=
f() took 1000.23 ms, or 1000 whole milliseconds
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc time_point_cast}}
{{dsc inc | cpp/chrono/duration/dsc floor}}
{{dsc inc | cpp/chrono/duration/dsc ceil}}
{{dsc inc | cpp/chrono/duration/dsc round}}
{{dsc end}}


[[de:cpp/chrono/duration/duration cast]]
[[es:cpp/chrono/duration/duration cast]]
[[fr:cpp/chrono/duration/duration cast]]
[[it:cpp/chrono/duration/duration cast]]
[[ja:cpp/chrono/duration/duration cast]]
[[pt:cpp/chrono/duration/duration cast]]
[[ru:cpp/chrono/duration/duration cast]]
[[zh:cpp/chrono/duration/duration cast]]</text>
      <sha1>67y2bbqd7pu0mxa0kis1dfx6xwqv4nt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/floor</title>
    <ns>0</ns>
    <id>14496</id>
    <revision>
      <id>85596</id>
      <parentid>85595</parentid>
      <timestamp>2016-04-26T07:54:20Z</timestamp>
      <contributor>
        <ip>223.3.97.155</ip>
      </contributor>
      <text xml:space="preserve" bytes="1689">{{cpp/chrono/title|floor{{small|(std::chrono::duration)}}}}
{{cpp/chrono/duration/navbar}}
{{ddcl | since=c++17 | header=chrono|
template &lt;class ToDuration, class Rep, class Period&gt;
constexpr ToDuration floor(const duration&lt;Rep, Period&gt;&amp; d);
}}

Returns the greatest duration {{tt|t}} representable in {{tt|ToDuration}} that is less or equal to {{tt|d}}.

The function does not participate in the overload resolution unless {{tt|ToDuration}} is an instance of {{lc|std::chrono::duration}}.

===Parameters===
{{par begin}}
{{par | d | duration to convert}}
{{par end}}

===Return value===
{{tt|d}} rounded down to a duration of type {{tt|ToDuration}}.

===Possible implementation===
{{eq fun|1=
template &lt;class T&gt; struct is_duration : std::false_type {};
template &lt;class Rep, class Period&gt; struct is_duration&lt;
    std::chrono::duration&lt;Rep, Period&gt;&gt; : std::true_type {};

template &lt;class To, class Rep, class Period,
          class = std::enable_if_t&lt;is_duration&lt;To&gt;{}&gt;&gt;
constexpr To floor(const duration&lt;Rep, Period&gt;&amp; d)
{
    To t = std::chrono::duration_cast&lt;To&gt;(d);
    if (t &gt; d)
        return t - To{1};
    return t;
}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc duration_cast}}
{{dsc inc | cpp/chrono/duration/dsc ceil}}
{{dsc inc | cpp/chrono/duration/dsc round}}
{{dsc inc | cpp/chrono/time_point/dsc floor}}
{{dsc inc | cpp/numeric/math/dsc floor}}
{{dsc end}}

[[de:cpp/chrono/duration/floor]]
[[es:cpp/chrono/duration/floor]]
[[fr:cpp/chrono/duration/floor]]
[[it:cpp/chrono/duration/floor]]
[[ja:cpp/chrono/duration/floor]]
[[pt:cpp/chrono/duration/floor]]
[[ru:cpp/chrono/duration/floor]]
[[zh:cpp/chrono/duration/floor]]</text>
      <sha1>r18ojwfkaikyinutbfce58ap3h50mst</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/max</title>
    <ns>0</ns>
    <id>8636</id>
    <revision>
      <id>57201</id>
      <parentid>49368</parentid>
      <timestamp>2013-06-01T05:49:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="898">{{cpp/chrono/duration/title | max }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl |
static constexpr duration max();
}}
{{dcl end}}

Returns a duration with the largest possible value.

If the representation {{tt|rep}} of the duration requires some other implementation to return a maximum-length duration, {{lc|std::chrono::duration_values}} can be specialized to return the desired value.

===Parameters===
(none)

===Return value===
returns {{c|std::chrono::duration(std::chrono::duration_values&lt;rep&gt;::max()) }}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc zero }}
{{dsc inc | cpp/chrono/duration/dsc min }}
{{dsc end}}

[[de:cpp/chrono/duration/max]]
[[es:cpp/chrono/duration/max]]
[[fr:cpp/chrono/duration/max]]
[[it:cpp/chrono/duration/max]]
[[ja:cpp/chrono/duration/max]]
[[pt:cpp/chrono/duration/max]]
[[ru:cpp/chrono/duration/max]]
[[zh:cpp/chrono/duration/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/min</title>
    <ns>0</ns>
    <id>8635</id>
    <revision>
      <id>57202</id>
      <parentid>49369</parentid>
      <timestamp>2013-06-01T05:49:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="897">{{cpp/chrono/duration/title | min }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl |
static constexpr duration min();
}}
{{dcl end}}

Returns a duration with the lowest possible value.

If the representation {{tt|rep}} of the duration requires some other implementation to return a minimum-length duration, {{lc|std::chrono::duration_values}} can be specialized to return the desired value.

===Parameters===
(none)

===Return value===
returns {{c|std::chrono::duration(std::chrono::duration_values&lt;rep&gt;::min()) }}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc zero }}
{{dsc inc | cpp/chrono/duration/dsc max }}
{{dsc end}}

[[de:cpp/chrono/duration/min]]
[[es:cpp/chrono/duration/min]]
[[fr:cpp/chrono/duration/min]]
[[it:cpp/chrono/duration/min]]
[[ja:cpp/chrono/duration/min]]
[[pt:cpp/chrono/duration/min]]
[[ru:cpp/chrono/duration/min]]
[[zh:cpp/chrono/duration/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/operator arith</title>
    <ns>0</ns>
    <id>9407</id>
    <revision>
      <id>91978</id>
      <parentid>57206</parentid>
      <timestamp>2017-03-31T22:04:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0548R1</comment>
      <text xml:space="preserve" bytes="1630">{{cpp/chrono/duration/title | operator+{{dsc small|(unary)}} | operator-{{dsc small|(unary)}} }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl rev multi| num=1 |until1=c++17|dcl1=
constexpr duration operator+() const;
|dcl2=
constexpr std::common_type_t&lt;duration&gt; operator+() const;
}}
{{dcl rev multi| num=2 |until1=c++17|dcl1=
constexpr duration operator-() const;
|dcl2=
constexpr std::common_type_t&lt;duration&gt; operator-() const;
}}
{{dcl end}}

Implements unary plus and unary minus for the durations.

If {{tt|rep_}} is a member variable holding the number of ticks in a duration object, and {{tt|D}} is the return type,
@1@ Equivalent to {{c|return D(*this);}}
@2@ Equivalent to {{c|return D(-rep_);}}

===Parameters===
(none)

===Return value===
@1@ a copy of this duration object
@2@ a copy of this duration object, with the number of ticks negated

===Example===
{{example 
|
| code=
#include &lt;chrono&gt;
#include &lt;iostream&gt;

int main()
{
    std::chrono::seconds s1(10);
    std::chrono::seconds s2 = -s1;

    std::cout &lt;&lt; &quot;negated 10 seconds are &quot; &lt;&lt; s2.count() &lt;&lt; &quot; seconds\n&quot;;
}
| output=
negated 10 seconds are -10 seconds
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith2 }}
{{dsc inc | cpp/chrono/duration/dsc operator_arith4 }}
{{dsc end}}

[[de:cpp/chrono/duration/operator arith]]
[[es:cpp/chrono/duration/operator arith]]
[[fr:cpp/chrono/duration/operator arith]]
[[it:cpp/chrono/duration/operator arith]]
[[ja:cpp/chrono/duration/operator arith]]
[[pt:cpp/chrono/duration/operator arith]]
[[ru:cpp/chrono/duration/operator arith]]
[[zh:cpp/chrono/duration/operator arith]]</text>
      <sha1>1gh1qv8jq4y9z86ezvir72xde1r2c26</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/operator arith2</title>
    <ns>0</ns>
    <id>9404</id>
    <revision>
      <id>88286</id>
      <parentid>57207</parentid>
      <timestamp>2016-11-15T19:37:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0505R0 constexpr</comment>
      <text xml:space="preserve" bytes="1937">{{cpp/chrono/duration/title | operator++ | operator-- }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | until=c++17|
duration&amp; operator++();
}}
{{dcl | since = c++17|
constexpr duration&amp; operator++();
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++17|
duration operator++(int);
}}
{{dcl | since = c++17|
constexpr duration operator++(int);
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | until=c++17|
duration&amp; operator--();
}}
{{dcl | since = c++17|
constexpr duration&amp; operator--();
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | until=c++17|
duration operator--(int);
}}
{{dcl |  since = c++17|
constexpr duration operator--(int);
}}
{{dcl rev end}}
{{dcl end}}

Increments or decrements the number of ticks for this duration.

If {{tt|rep_}} is a member variable holding the number of ticks in a duration object, 
@1@ Equivalent to {{c|++rep_; return *this;}}
@2@ Equivalent to {{c|return duration(rep_++)}}
@3@ Equivalent to {{c|--rep_; return *this;}}
@4@ Equivalent to {{c|return duration(rep_--);}}

===Parameters===
(none)

===Return value===
@1,3@ a reference to this duration after modification
@2,4@ a copy of the duration made before modification

===Example===
{{example 
|
| code=
#include &lt;chrono&gt;
#include &lt;iostream&gt;

int main()
{
    std::chrono::hours h(1);
    std::chrono::minutes m = ++h;
    m--;
    std::cout &lt;&lt; m.count() &lt;&lt; &quot; minutes\n&quot;;
}
| output=
119 minutes
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith3 }}
{{dsc inc | cpp/chrono/duration/dsc operator_arith4 }}
{{dsc end}}

[[de:cpp/chrono/duration/operator arith2]]
[[es:cpp/chrono/duration/operator arith2]]
[[fr:cpp/chrono/duration/operator arith2]]
[[it:cpp/chrono/duration/operator arith2]]
[[ja:cpp/chrono/duration/operator arith2]]
[[pt:cpp/chrono/duration/operator arith2]]
[[ru:cpp/chrono/duration/operator arith2]]
[[zh:cpp/chrono/duration/operator arith2]]</text>
      <sha1>doimjrg5cfiyetpn7q0mnln2sirz7mu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/operator arith3</title>
    <ns>0</ns>
    <id>9405</id>
    <revision>
      <id>88287</id>
      <parentid>57210</parentid>
      <timestamp>2016-11-15T19:40:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0505r0 constexpr</comment>
      <text xml:space="preserve" bytes="3046">{{cpp/chrono/duration/title | operator+{{=}}, -{{=}}, *{{=}}, /{{=}}, %{{=}}}}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | until=c++17|
duration&amp; operator+{{=}}(const duration&amp; d);
}}
{{dcl | since=c++17|
constexpr duration&amp; operator+{{=}}(const duration&amp; d);
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++17|
duration&amp; operator-{{=}}(const duration&amp; d);
}}
{{dcl | since=c++17|
constexpr duration&amp; operator-{{=}}(const duration&amp; d);
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | until=c++17|
duration&amp; operator*{{=}}(const rep&amp; rhs);
}}
{{dcl | since=c++17|
constexpr duration&amp; operator*{{=}}(const rep&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | until=c++17|
duration&amp; operator/{{=}}(const rep&amp; rhs);
}}
{{dcl | since=c++17|
constexpr duration&amp; operator/{{=}}(const rep&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin|num=5}}
{{dcl | until=c++17|
duration&amp; operator%{{=}}(const rep&amp; rhs);
}}
{{dcl | since=c++17|
constexpr duration&amp; operator%{{=}}(const rep&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin|num=6}}
{{dcl | until=c++17|
duration&amp; operator%{{=}}(const duration&amp; rhs);
}}
{{dcl | since=c++17|
constexpr duration&amp; operator%{{=}}(const duration&amp; rhs);
}}
{{dcl rev end}}
{{dcl end}}

Performs compound assignments between two durations with the same period or between a duration and a tick count value.

If {{tt|rep_}} is the member variable holding the number of ticks in this duration object,
@1@ Equivalent to {{c|rep_ +{{=}} d.count(); return *this;}}
@2@ Equivalent to {{c|rep_ -{{=}} d.count(); return *this;}}
@3@ Equivalent to {{c|rep_ *{{=}} rhs; return *this;}}
@4@ Equivalent to {{c|rep_ /{{=}} rhs; return *this;}}
@5@ Equivalent to {{c|rep_ %{{=}} rhs; return *this;}}
@6@ Equivalent to {{c|rep_ %{{=}} d.count(); return *this;}}

===Parameters===
{{par begin}}
{{par | d | duration on the right-hand side of the operator}}
{{par | rhs | number of ticks on the right-hand side of the operator}}
{{par end}}

===Return value===
A reference to this duration after modification

===Example===
{{example 
|
| code=
#include &lt;chrono&gt;
#include &lt;iostream&gt;

int main()
{
    std::chrono::minutes m(11);
    m *= 2;
    m += std::chrono::hours(10); // hours implicitly convert to minutes
    std::cout &lt;&lt; m.count() &lt;&lt; &quot; minutes equals &quot;
              &lt;&lt; std::chrono::duration_cast&lt;std::chrono::hours&gt;(m).count() 
              &lt;&lt; &quot; hours and &quot;;
    m %= std::chrono::hours(1);
    std::cout &lt;&lt; m.count() &lt;&lt; &quot; minutes\n&quot;;
}
| output=
622 minutes equals 10 hours and 22 minutes
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith2 }}
{{dsc inc | cpp/chrono/duration/dsc operator_arith4 }}
{{dsc end}}

[[de:cpp/chrono/duration/operator arith3]]
[[es:cpp/chrono/duration/operator arith3]]
[[fr:cpp/chrono/duration/operator arith3]]
[[it:cpp/chrono/duration/operator arith3]]
[[ja:cpp/chrono/duration/operator arith3]]
[[pt:cpp/chrono/duration/operator arith3]]
[[ru:cpp/chrono/duration/operator arith3]]
[[zh:cpp/chrono/duration/operator arith3]]</text>
      <sha1>r338nz04ig4hynwh6czkq65vezgmhh0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/operator arith4</title>
    <ns>0</ns>
    <id>9399</id>
    <revision>
      <id>81529</id>
      <parentid>77490</parentid>
      <timestamp>2015-10-27T16:26:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+todo the enable_ifs</comment>
      <text xml:space="preserve" bytes="6280">{{title | 1=operator+,-,*,/,%&lt;small&gt;(std::chrono::duration)&lt;/small&gt;}}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class Rep1, class Period1, class Rep2, class Period2 &gt;
typename std::common_type&lt;duration&lt;Rep1,Period1&gt;, duration&lt;Rep2,Period2&gt;&gt;::type
    constexpr operator+( const duration&lt;Rep1,Period1&gt;&amp; lhs,
                         const duration&lt;Rep2,Period2&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; class Rep1, class Period1, class Rep2, class Period2 &gt;
typename std::common_type&lt;duration&lt;Rep1,Period1&gt;, duration&lt;Rep2,Period2&gt;&gt;::type
    constexpr operator-( const duration&lt;Rep1,Period1&gt;&amp; lhs,
                         const duration&lt;Rep2,Period2&gt;&amp; rhs );
}}
{{dcl | num=3 | 1=
template&lt; class Rep1, class Period, class Rep2 &gt;
duration&lt;typename std::common_type&lt;Rep1,Rep2&gt;::type, Period&gt;
    constexpr operator*( const duration&lt;Rep1,Period&gt;&amp; d,
                         const Rep2&amp; s );
}}
{{dcl | num=4 | 1=
template&lt; class Rep1, class Rep2, class Period &gt;
duration&lt;typename std::common_type&lt;Rep1,Rep2&gt;::type, Period&gt;
    constexpr operator*( const Rep1&amp; s,
                         const duration&lt;Rep2,Period&gt;&amp; d );
}}
{{dcl | num=5 | 1=
template&lt; class Rep1, class Period, class Rep2 &gt;
duration&lt;typename std::common_type&lt;Rep1,Rep2&gt;::type, Period&gt;
    constexpr operator/( const duration&lt;Rep1,Period&gt;&amp; d,
                         const Rep2&amp; s );
}}
{{dcl | num=6 | 1=
template&lt; class Rep1, class Period1, class Rep2, class Period2 &gt;
typename std::common_type&lt;Rep1,Rep2&gt;::type
    constexpr operator/( const duration&lt;Rep1,Period1&gt;&amp; lhs,
                         const duration&lt;Rep2,Period2&gt;&amp; rhs );
}}
{{dcl | num=7 | 1=
template&lt; class Rep1, class Period, class Rep2 &gt;
duration&lt;typename std::common_type&lt;Rep1,Rep2&gt;::type, Period&gt;
    constexpr operator%( const duration&lt;Rep1, Period&gt;&amp; d,
                         const Rep2&amp; s );
}}
{{dcl | num=8 | 1=
template&lt; class Rep1, class Period1, class Rep2, class Period2 &gt;
typename std::common_type&lt;duration&lt;Rep1,Period1&gt;, duration&lt;Rep2,Period2&gt;&gt;::type
constexpr operator%( const duration&lt;Rep1,Period1&gt;&amp; lhs,
                     const duration&lt;Rep2,Period2&gt;&amp; rhs );
}}
{{dcl end}}

Performs basic arithmetic operations between two durations or between a duration and a tick count.

@1@ Converts the two durations to their common type and creates a duration whose tick count is the sum of the tick counts after conversion.

@2@ Converts the two durations to their common type and creates a duration whose tick count is the {{tt|rhs}} number of ticks subtracted from the {{tt|lhs}} number of ticks after conversion.

@3-4@ Converts the duration {{tt|d}} to one whose {{tt|rep}} is the common type between {{tt|Rep1}} and {{tt|Rep2}}, and multiples the number of ticks after conversion by {{tt|s}}.

@5@ Converts the duration {{tt|d}} to one whose {{tt|rep}} is the common type between {{tt|Rep1}} and {{tt|Rep2}}, and divides the number of ticks after conversion by {{tt|s}}

@6@ Converts the two durations to their common type and divides the tick count of {{tt|lhs}} after conversion by the tick count of {{tt|rhs}} after conversion. Note that the return value of this operator is not a duration.

@7@ Converts the duration {{tt|d}} to one whose {{tt|rep}} is the common type between {{tt|Rep1}} and {{tt|Rep2}}, and creates a duration whose tick count is the remainder of the division of the tick count, after conversion, by {{tt|s}}.

@8@ Converts the two durations to their common type and creates a duration whose tick count is the remainder of the tick counts after conversion.

{{todo|list the &quot;does not participate in overload resolution unless&quot; constraints}}

===Parameters===
{{par begin}}
{{par | lhs | duration on the left-hand side of the operator}}
{{par | rhs | duration on the right-hand side of the operator}}
{{par | d | the duration argument for mixed-argument operators}}
{{par | s | tick count argument for mixed-argument operators}}
{{par end}}

===Return value===
Assuming that {{c|CD}} is the function return type and {{c|CR&lt;A, B&gt; {{=}} std::common_type&lt;A, B&gt;::type}}, then:

@1@ {{c|CD(CD(lhs).count() + CD(rhs).count())}}
@2@ {{c|CD(CD(lhs).count() - CD(rhs).count())}}
@3-4@ {{c|CD(CD(d).count() * s)}} 
@5@ {{c|CD(CD(d).count() / s).}}
@6@ {{c|CD(lhs).count() / CD(rhs).count()}}  (the return type of this operator is not a duration)
@7@ {{c|CD(CD(d).count() % s)}}
@8@ {{c|CD(CD(lhs).count() % CD(rhs).count())}}


===Example===
{{example
 | code=
#include &lt;chrono&gt;
#include &lt;iostream&gt;
int main()
{
    // simple arithmetic
    std::chrono::seconds s = std::chrono::hours(1) 
                             + 2*std::chrono::minutes(10)
                             + std::chrono::seconds(70)/10;

    std::cout &lt;&lt; &quot;1 hour + 2*10 min + 70/10 sec = &quot; &lt;&lt; s.count() &lt;&lt; &quot; seconds\n&quot;;

    // difference between dividing a duration by a number
    // and dividing a duration by another duration
    std::cout &lt;&lt; &quot;Dividing that by 2 minutes gives &quot;
              &lt;&lt; s / std::chrono::minutes(2) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;Dividing that by 2 gives &quot;
              &lt;&lt; (s / 2).count() &lt;&lt; &quot; seconds\n&quot;;

   // the remainder operator is useful in determining where in a time
   // frame is this particular duration, e.g. to break it down into hours,
   // minutes, and seconds:
   std::cout &lt;&lt; s.count() &lt;&lt; &quot; seconds is &quot;
             &lt;&lt; std::chrono::duration_cast&lt;std::chrono::hours&gt;(
                    s
                ).count() &lt;&lt; &quot; hours, &quot;
             &lt;&lt; std::chrono::duration_cast&lt;std::chrono::minutes&gt;(
                    s % std::chrono::hours(1)
                ).count() &lt;&lt; &quot; minutes, &quot;
             &lt;&lt; std::chrono::duration_cast&lt;std::chrono::seconds&gt;(
                    s % std::chrono::minutes(1)
                ).count() &lt;&lt; &quot; seconds\n&quot;;
}
 | output=
1 hour + 2*10 min + 70/10 sec = 4807 seconds
Dividing that by 2 minutes gives 40
Dividing that by 2 gives 2403 seconds
4807 seconds is 1 hours, 20 minutes, 7 seconds
}}

[[de:cpp/chrono/duration/operator arith4]]
[[es:cpp/chrono/duration/operator arith4]]
[[fr:cpp/chrono/duration/operator arith4]]
[[it:cpp/chrono/duration/operator arith4]]
[[ja:cpp/chrono/duration/operator arith4]]
[[pt:cpp/chrono/duration/operator arith4]]
[[ru:cpp/chrono/duration/operator arith4]]
[[zh:cpp/chrono/duration/operator arith4]]</text>
      <sha1>56r199geygw7g84042iavyjym7zl7pc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/operator cmp</title>
    <ns>0</ns>
    <id>8668</id>
    <revision>
      <id>49375</id>
      <parentid>42429</parentid>
      <timestamp>2013-06-01T02:34:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="2967">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::chrono::duration)&lt;/small&gt;}}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
constexpr bool operator{{==}}(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                          const duration&lt;Rep2, Period2&gt;&amp; rhs);
}}
{{dcl | num=2 | 1=
template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
constexpr bool operator!{{=}}(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                          const duration&lt;Rep2, Period2&gt;&amp; rhs);
}}
{{dcl | num=3 | 1=
template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
constexpr bool operator&lt;(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                         const duration&lt;Rep2, Period2&gt;&amp; rhs);
}}
{{dcl | num=4 | 1=
template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
constexpr bool operator&lt;{{=}}(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                          const duration&lt;Rep2, Period2&gt;&amp; rhs);
}}
{{dcl | num=5 | 1=
template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
constexpr bool operator&gt;(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                         const duration&lt;Rep2, Period2&gt;&amp; rhs);
}}
{{dcl | num=6 | 1=
template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
constexpr bool operator&gt;{{=}}(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                          const duration&lt;Rep2, Period2&gt;&amp; rhs);
}}
{{dcl end}}

Compares two durations.

1-2) Checks if {{tt|lhs}} and {{tt|rhs}} are equal, i.e. the number of ticks for the type common to both durations are equal.

3-6) Compares {{tt|lhs}} to {{tt|rhs}}, i.e. compares the number of ticks for the type common to both durations.

===Parameters===
{{par begin}}
{{par | lhs | duration on the left-hand side of the operator}}
{{par | rhs | duration on the right-hand side of the operator}}
{{par end}}

===Return value===
Assuming that {{c|CT {{=}}
std::common_type&lt;std::chrono::duration&lt;Rep1, Period1&gt;,
                 std::chrono::duration&lt;Rep2, Period2&gt;&gt;::type}}, then:

1) {{c|CT(lhs).count() {{==}} CT(rhs).count()}}

2) {{c|!(lhs {{==}} rhs)}}

3) {{c|CT(lhs).count() &lt; CT(rhs).count()}}

4) {{c|!(rhs &lt; lhs)}}

5) {{c|rhs &lt; lhs}}

6) {{c|!(lhs &lt; rhs)}}

===Example===
{{example
 | code=
#include &lt;chrono&gt;
#include &lt;iostream&gt;
int main()
{
    if(std::chrono::seconds(2) == std::chrono::milliseconds(2000))
        std::cout &lt;&lt;  &quot;2 s == 2000 ms\n&quot;;
    else
        std::cout &lt;&lt;  &quot;2 s != 2000 ms\n&quot;;

    if(std::chrono::seconds(61) &gt; std::chrono::minutes(1))
        std::cout &lt;&lt;  &quot;61 s &gt; 1 min\n&quot;;
    else
        std::cout &lt;&lt;  &quot;61 s &lt;= 1 min\n&quot;;

}
 | output=
2 s == 2000 ms
61 s &gt; 1 min
}}

[[de:cpp/chrono/duration/operator cmp]]
[[es:cpp/chrono/duration/operator cmp]]
[[fr:cpp/chrono/duration/operator cmp]]
[[it:cpp/chrono/duration/operator cmp]]
[[ja:cpp/chrono/duration/operator cmp]]
[[pt:cpp/chrono/duration/operator cmp]]
[[ru:cpp/chrono/duration/operator cmp]]
[[zh:cpp/chrono/duration/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/operator=</title>
    <ns>0</ns>
    <id>8631</id>
    <revision>
      <id>63264</id>
      <parentid>57203</parentid>
      <timestamp>2013-07-08T11:18:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="734">{{cpp/chrono/duration/title | operator{{=}} }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
duration&amp; operator{{=}}( const duration &amp;other ) {{=}} default;
}}
{{dcl end}}

Assigns the contents of one {{tt|duration}} to another.

===Parameters===
{{par begin}}
{{par | other  | {{tt|duration}} to copy from}}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor }}
{{dsc end}}

[[de:cpp/chrono/duration/operator=]]
[[es:cpp/chrono/duration/operator=]]
[[fr:cpp/chrono/duration/operator=]]
[[it:cpp/chrono/duration/operator=]]
[[ja:cpp/chrono/duration/operator=]]
[[pt:cpp/chrono/duration/operator=]]
[[ru:cpp/chrono/duration/operator=]]
[[zh:cpp/chrono/duration/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/round</title>
    <ns>0</ns>
    <id>14498</id>
    <revision>
      <id>81530</id>
      <timestamp>2015-10-27T16:33:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2203">{{cpp/chrono/title|round{{small|(std::chrono::duration)}}}}
{{cpp/chrono/duration/navbar}}
{{ddcl | since=c++17 | header=chrono|
template &lt;class ToDuration, class Rep, class Period&gt;
constexpr ToDuration round(const duration&lt;Rep, Period&gt;&amp; d);
}}

Returns the value {{tt|t}} representable in {{tt|ToDuration}} that is the closest to {{tt|d}}. If there are two such values, returns the even value (that is, the value {{tt|t}} such that {{c|1=t % 2 == 0}}).

The function does not participate in the overload resolution unless {{tt|ToDuration}} is an instance of {{lc|std::chrono::duration}} and {{c|std::chrono::treat_as_floating_point&lt;typename ToDuration::rep&gt;::value}} is {{c|false}}

===Parameters===
{{par begin}}
{{par | d | duration to convert}}
{{par end}}

===Return value===
{{tt|d}} rounded to the nearest duration of type {{tt|ToDuration}}, rounding to even in halfway cases.

===Possible implementation===
{{eq fun|1=
template &lt;class T&gt; struct is_duration : std::false_type {};
template &lt;class Rep, class Period&gt; struct is_duration&lt;
    std::chrono::duration&lt;Rep, Period&gt;&gt; : std::true_type {};

template &lt;class To, class Rep, class Period,
          class = std::enable_if_t&lt;is_duration&lt;To&gt;{} &amp;&amp;
                 !std::chrono::treat_as_floating_point&lt;typename To::rep&gt;{}&gt;&gt;
constexpr To round(const std::chrono::duration&lt;Rep, Period&gt;&amp; d)
{
    To t0 = std::chrono::duration::floor&lt;To&gt;(d);
    To t1 = t0 + To{1};
    auto diff0 = d - t0;
    auto diff1 = t1 - d;
    if (diff0 == diff1) {
        if (t0.count() &amp; 1)
            return t1;
        return t0;
    } else if (diff0 &lt; diff1) {
        return t0;
    }
    return t1;
}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc duration_cast}}
{{dsc inc | cpp/chrono/duration/dsc floor}}
{{dsc inc | cpp/chrono/duration/dsc ceil}}
{{dsc inc | cpp/chrono/time_point/dsc round}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc end}}

[[de:cpp/chrono/duration/round]]
[[es:cpp/chrono/duration/round]]
[[fr:cpp/chrono/duration/round]]
[[it:cpp/chrono/duration/round]]
[[ja:cpp/chrono/duration/round]]
[[pt:cpp/chrono/duration/round]]
[[ru:cpp/chrono/duration/round]]
[[zh:cpp/chrono/duration/round]]</text>
      <sha1>4fs2dvgvjjdy8w10zmz2f2nvm96c1yk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/duration/zero</title>
    <ns>0</ns>
    <id>8634</id>
    <revision>
      <id>57211</id>
      <parentid>49376</parentid>
      <timestamp>2013-06-01T05:49:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="885">{{cpp/chrono/duration/title | zero }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl |
static constexpr duration zero();
}}
{{dcl end}}

Returns a zero-length duration.

If the representation {{tt|rep}} of the duration requires some other implementation to return a zero-length duration, {{lc|std::chrono::duration_values}} can be specialized to return the desired value.

===Parameters===
(none)

===Return value===
returns {{c|std::chrono::duration(std::chrono::duration_values&lt;rep&gt;::zero()) }}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc min }}
{{dsc inc | cpp/chrono/duration/dsc max }}
{{dsc end}}

[[de:cpp/chrono/duration/zero]]
[[es:cpp/chrono/duration/zero]]
[[fr:cpp/chrono/duration/zero]]
[[it:cpp/chrono/duration/zero]]
[[ja:cpp/chrono/duration/zero]]
[[pt:cpp/chrono/duration/zero]]
[[ru:cpp/chrono/duration/zero]]
[[zh:cpp/chrono/duration/zero]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/high resolution clock</title>
    <ns>0</ns>
    <id>3291</id>
    <revision>
      <id>64488</id>
      <parentid>62684</parentid>
      <timestamp>2013-08-18T04:01:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++14 constexpr</comment>
      <text xml:space="preserve" bytes="2120">{{cpp/title|n=chrono::|high_resolution_clock}}
{{cpp/chrono/high_resolution_clock/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | since=c++11 | 1=
class high_resolution_clock;
}}
{{dcl end}}

Class {{tt|std::chrono::high_resolution_clock}} represents the clock with the smallest tick period provided by the implementation. It may be an alias of {{lc|std::chrono::system_clock}} or {{lc|std::chrono::steady_clock}}, or a third, independent clock.

{{tt|std::chrono::high_resolution_clock}} meets the requirements of {{concept|TrivialClock}}. 

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|rep}} | arithmetic type representing the number of ticks in the clock's duration}}
{{dsc | {{tt|period}} | a {{lc|std::ratio}} type representing the tick period of the clock, in seconds}}
{{dsc | {{tt|duration}} | {{c|std::chrono::duration&lt;rep, period&gt;}}}}
{{dsc | {{tt|time_point}} | {{c|std::chrono::time_point&lt;std::chrono::high_resolution_clock&gt;}}}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr bool}} is_steady | {{c|true}} if the time between ticks is always constant, i.e. calls to {{ltf|cpp/chrono/high_resolution_clock/now}} return values that increase monotonically even in case of some external clock adjustment}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem sfun | cpp/chrono/high_resolution_clock/now  | returns a {{lc|std::chrono::time_point}} representing the current value of the clock}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc class | cpp/chrono/system_clock | wall clock time from the system-wide realtime clock  | notes={{mark c++11}}  }}
{{dsc class | cpp/chrono/steady_clock | monotonic clock that will never be adjusted | notes={{mark c++11}}  }}
{{dsc end}}

[[de:cpp/chrono/high resolution clock]]
[[es:cpp/chrono/high resolution clock]]
[[fr:cpp/chrono/high resolution clock]]
[[it:cpp/chrono/high resolution clock]]
[[ja:cpp/chrono/high resolution clock]]
[[pt:cpp/chrono/high resolution clock]]
[[ru:cpp/chrono/high resolution clock]]
[[zh:cpp/chrono/high resolution clock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/high resolution clock/now</title>
    <ns>0</ns>
    <id>5279</id>
    <revision>
      <id>50429</id>
      <parentid>42378</parentid>
      <timestamp>2013-06-01T03:28:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="412">{{include page|cpp/chrono/clock/now|high_resolution_clock}}

[[de:cpp/chrono/high resolution clock/now]]
[[es:cpp/chrono/high resolution clock/now]]
[[fr:cpp/chrono/high resolution clock/now]]
[[it:cpp/chrono/high resolution clock/now]]
[[ja:cpp/chrono/high resolution clock/now]]
[[pt:cpp/chrono/high resolution clock/now]]
[[ru:cpp/chrono/high resolution clock/now]]
[[zh:cpp/chrono/high resolution clock/now]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/operator&quot;&quot;h</title>
    <ns>0</ns>
    <id>12955</id>
    <revision>
      <id>77545</id>
      <parentid>68725</parentid>
      <timestamp>2015-03-29T16:06:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>shorter using</comment>
      <text xml:space="preserve" bytes="1836">{{cpp/title|n=literals::chrono_literals::|operator&quot;&quot;h }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | num=1 | since=c++14 | 1=
constexpr chrono::hours operator &quot;&quot; h(unsigned long long hrs);
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr chrono::duration&lt;/*unspecified*/, std::ratio&lt;3600,1&gt;&gt;
                        operator &quot;&quot; h(long double hrs);
}}
{{dcl end}}

Forms a {{lc|std::chrono::duration}} literal representing hours.

@1@ integer literal, returns exactly {{c|std::chrono::hours(hrs)}} 
@2@ floating-point literal, returns a floating-point duration equivalent to {{lc|std::chrono::hours}}

===Parameters===
{{par begin}}
{{par | hrs | the number of hours}}
{{par end}}

===Return value===
The {{lc|std::chrono::duration}} literal.

===Possible implementation===
{{eq fun
 | 1=
constexpr std::chrono::hours operator &quot;&quot;h(unsigned long long h)
{
    return std::chrono::hours(h);
}
constexpr std::chrono::duration&lt;long double, ratio&lt;3600,1&gt;&gt; operator &quot;&quot;h(long double h)
{
    return std::chrono::duration&lt;long double, std::ratio&lt;3600,1&gt;&gt;(h);
}
}}

===Notes===
{{cpp/chrono/chrono_literals_namespace}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

int main()
{
    using namespace std::chrono_literals;
    auto day = 24h;
    auto halfhour = 0.5h;
    std::cout &lt;&lt; &quot;one day is &quot; &lt;&lt; day.count() &lt;&lt; &quot; hours\n&quot;
              &lt;&lt; &quot;half an hour is &quot; &lt;&lt; halfhour.count() &lt;&lt; &quot; hours\n&quot;;
}
| output=
one day is 24 hours
half an hour is 0.5 hours
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor}}
{{dsc end}}

[[de:cpp/chrono/operator&quot;&quot;h]]
[[es:cpp/chrono/operator&quot;&quot;h]]
[[fr:cpp/chrono/operator&quot;&quot;h]]
[[it:cpp/chrono/operator&quot;&quot;h]]
[[ja:cpp/chrono/operator&quot;&quot;h]]
[[pt:cpp/chrono/operator&quot;&quot;h]]
[[ru:cpp/chrono/operator&quot;&quot;h]]
[[zh:cpp/chrono/operator&quot;&quot;h]]</text>
      <sha1>d94t7s6owy6i98w4hln8jbredefh3e7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/operator&quot;&quot;min</title>
    <ns>0</ns>
    <id>13091</id>
    <revision>
      <id>77547</id>
      <parentid>68726</parentid>
      <timestamp>2015-03-29T16:09:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>shorter using</comment>
      <text xml:space="preserve" bytes="1927">{{cpp/title|n=literals::chrono_literals::|operator&quot;&quot;min }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | num=1 | since=c++14 | 1=
constexpr chrono::minutes operator &quot;&quot; min(unsigned long long mins);
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr chrono::duration&lt;/*unspecified*/, ratio&lt;60,1&gt;&gt;
                      operator &quot;&quot; min(long double mins);
}}
{{dcl end}}

Forms a {{lc|std::chrono::duration}} literal representing minutes.

@1@ integer literal, returns exactly {{c|std::chrono::minutes(mins)}} 
@2@ floating-point literal, returns a floating-point duration equivalent to {{lc|std::chrono::minutes}}

===Parameters===
{{par begin}}
{{par | minutes | the number of minutes}}
{{par end}}

===Return value===
The {{lc|std::chrono::duration}} literal.

===Possible implementation===
{{eq fun
 | 1=
constexpr std::chrono::minutes operator &quot;&quot;min(unsigned long long m)
{
    return std::chrono::minutes(m);
}
constexpr std::chrono::duration&lt;long double,
                                std::ratio&lt;60,1&gt;&gt; operator &quot;&quot;min(long double m)
{
    return std::chrono::duration&lt;long double, ratio&lt;60,1&gt;&gt; (m);
}
}}

===Notes===
{{cpp/chrono/chrono_literals_namespace}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

int main()
{
    using namespace std::chrono_literals;
    auto lesson = 45min;
    auto halfmin = 0.5min;
    std::cout &lt;&lt; &quot;one lesson is &quot; &lt;&lt; lesson.count() &lt;&lt; &quot; minutes\n&quot;
              &lt;&lt; &quot;half a minute is &quot; &lt;&lt; halfmin.count() &lt;&lt; &quot; minutes\n&quot;;
}
| output=
one lesson is 45 minutes
half a minute is 0.5 minutes
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor}}
{{dsc end}}

[[de:cpp/chrono/operator&quot;&quot;min]]
[[es:cpp/chrono/operator&quot;&quot;min]]
[[fr:cpp/chrono/operator&quot;&quot;min]]
[[it:cpp/chrono/operator&quot;&quot;min]]
[[ja:cpp/chrono/operator&quot;&quot;min]]
[[pt:cpp/chrono/operator&quot;&quot;min]]
[[ru:cpp/chrono/operator&quot;&quot;min]]
[[zh:cpp/chrono/operator&quot;&quot;min]]</text>
      <sha1>tsce4vvug2qergbdg96bum293z316j3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/operator&quot;&quot;ms</title>
    <ns>0</ns>
    <id>13093</id>
    <revision>
      <id>77549</id>
      <parentid>73474</parentid>
      <timestamp>2015-03-29T16:11:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>shorter using</comment>
      <text xml:space="preserve" bytes="1896">{{cpp/title|n=literals::chrono_literals::|operator&quot;&quot;ms }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | num=1 | since=c++14 | 1=
constexpr std::chrono::milliseconds operator &quot;&quot; ms(unsigned long long ms);
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr std::chrono::duration&lt;/*unspecified*/,
                           std::milli&gt; operator &quot;&quot; ms(long double ms);
}}
{{dcl end}}

Forms a {{lc|std::chrono::duration}} literal representing milliseconds.

@1@ integer literal, returns exactly {{c|std::chrono::milliseconds(ms)}} 
@2@ floating-point literal, returns a floating-point duration equivalent to {{lc|std::chrono::milliseconds}}

===Parameters===
{{par begin}}
{{par | ms | the number of milliseconds}}
{{par end}}

===Return value===
The {{lc|std::chrono::duration}} literal.

===Possible implementation===
{{eq fun
 | 1=
constexpr std::chrono::milliseconds operator &quot;&quot;ms(unsigned long long ms)
{
    return chrono::milliseconds(ms);
}
constexpr std::chrono::duration&lt;long double, std::milli&gt; operator &quot;&quot;ms(long double ms)
{
    return std::chrono::duration&lt;long double, std::milli&gt;(ms);
}
}}

===Notes===
{{cpp/chrono/chrono_literals_namespace}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

int main()
{
    using namespace std::chrono_literals;
    auto d1 = 250ms;
    std::chrono::milliseconds d2 = 1s;
    std::cout &lt;&lt; &quot;250ms = &quot; &lt;&lt; d1.count() &lt;&lt; &quot; milliseconds\n&quot;
              &lt;&lt; &quot;1s = &quot; &lt;&lt; d2.count() &lt;&lt; &quot; milliseconds\n&quot;;
}
| output=
250ms = 250 milliseconds
1s = 1000 milliseconds
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor}}
{{dsc end}}

[[de:cpp/chrono/operator&quot;&quot;ms]]
[[es:cpp/chrono/operator&quot;&quot;ms]]
[[fr:cpp/chrono/operator&quot;&quot;ms]]
[[it:cpp/chrono/operator&quot;&quot;ms]]
[[ja:cpp/chrono/operator&quot;&quot;ms]]
[[pt:cpp/chrono/operator&quot;&quot;ms]]
[[ru:cpp/chrono/operator&quot;&quot;ms]]
[[zh:cpp/chrono/operator&quot;&quot;ms]]</text>
      <sha1>k41dxvtd4abplqmv7q0hfvjqvdssg6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/operator&quot;&quot;ns</title>
    <ns>0</ns>
    <id>13095</id>
    <revision>
      <id>77551</id>
      <parentid>68730</parentid>
      <timestamp>2015-03-29T16:13:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>shorter using</comment>
      <text xml:space="preserve" bytes="1892">{{cpp/title|n=literals::chrono_literals::|operator&quot;&quot;ns }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | num=1 | since=c++14 | 1=
constexpr std::chrono::nanoseconds operator &quot;&quot; ns(unsigned long long nsec);
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr std::chrono::duration&lt;/*unspecified*/,
                           std::nano&gt; operator &quot;&quot; ns(long double nsec);
}}
{{dcl end}}

Forms a {{lc|std::chrono::duration}} literal representing nanoseconds.

@1@ integer literal, returns exactly {{c|std::chrono::nanoseconds(nsec)}} 
@2@ floating-point literal, returns a floating-point duration equivalent to {{lc|std::chrono::nanoseconds}}

===Parameters===
{{par begin}}
{{par | nsec | the number of nanoseconds}}
{{par end}}

===Return value===
The {{lc|std::chrono::duration}} literal.

===Possible implementation===
{{eq fun
 | 1=
constexpr std::chrono::nanoseconds operator &quot;&quot;ns(unsigned long long ns)
{
    return chrono::nanoseconds(ns);
}
constexpr std::chrono::duration&lt;long double, std::nano&gt; operator &quot;&quot;ns(long double ns)
{
    return std::chrono::duration&lt;long double, std::nano&gt;(ns);
}
}}

===Notes===
{{cpp/chrono/chrono_literals_namespace}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

int main()
{
    using namespace std::chrono_literals;
    auto d1 = 250ns;
    std::chrono::nanoseconds d2 = 1us;
    std::cout &lt;&lt; &quot;250ns = &quot; &lt;&lt; d1.count() &lt;&lt; &quot; nanoseconds\n&quot;
              &lt;&lt; &quot;1us = &quot; &lt;&lt; d2.count() &lt;&lt; &quot; nanoseconds\n&quot;;
}
| output=
250ns = 250 nanoseconds
1us = 1000 nanoseconds
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor}}
{{dsc end}}

[[de:cpp/chrono/operator&quot;&quot;ns]]
[[es:cpp/chrono/operator&quot;&quot;ns]]
[[fr:cpp/chrono/operator&quot;&quot;ns]]
[[it:cpp/chrono/operator&quot;&quot;ns]]
[[ja:cpp/chrono/operator&quot;&quot;ns]]
[[pt:cpp/chrono/operator&quot;&quot;ns]]
[[ru:cpp/chrono/operator&quot;&quot;ns]]
[[zh:cpp/chrono/operator&quot;&quot;ns]]</text>
      <sha1>ldju4g3e5a9as33qtjtlbqtwqk2sc6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/operator&quot;&quot;s</title>
    <ns>0</ns>
    <id>13092</id>
    <revision>
      <id>77548</id>
      <parentid>72489</parentid>
      <timestamp>2015-03-29T16:10:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>shorter using</comment>
      <text xml:space="preserve" bytes="2001">{{cpp/title|n=literals::chrono_literals::|operator&quot;&quot;s }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | num=1 | since=c++14 | 1=
constexpr chrono::seconds operator &quot;&quot; s(unsigned long long secs);
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr chrono::duration&lt;/*unspecified*/&gt; operator &quot;&quot; s(long double secs);
}}
{{dcl end}}

Forms a {{lc|std::chrono::duration}} literal representing seconds.

@1@ integer literal, returns exactly {{c|std::chrono::seconds(secs)}} 
@2@ floating-point literal, returns a floating-point duration equivalent to {{lc|std::chrono::seconds}}

===Parameters===
{{par begin}}
{{par | secs | the number of seconds}}
{{par end}}

===Return value===
The {{lc|std::chrono::duration}} literal.

===Possible implementation===
{{eq fun
 | 1=
constexpr std::chrono::seconds operator &quot;&quot;s(unsigned long long s)
{
    return std::chrono::seconds(s);
}
constexpr std::chrono::duration&lt;long double&gt; operator &quot;&quot;s(long double s)
{
    return std::chrono::duration&lt;long double&gt;(s);
}
}}

===Notes===
{{cpp/chrono/chrono_literals_namespace}}

{{lc|std::string}} also defines {{tt|operator&quot;&quot;s}}, to represent literal objects of type {{tt|std::string}}, but it is a string literal: {{c|10s}} is ten seconds, but {{c|&quot;10&quot;s}} is a two-character string.

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

int main()
{
    using namespace std::chrono_literals;
    auto halfmin = 30s;
    std::cout &lt;&lt; &quot;half a minute is &quot; &lt;&lt; halfmin.count() &lt;&lt; &quot; seconds\n&quot;
              &lt;&lt; &quot;a minute and a half is &quot; &lt;&lt; (1min + 30s).count() &lt;&lt; &quot; seconds\n&quot;;
}
| output=
half a minute is 30 seconds
a minute and a half is 90 seconds
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor}}
{{dsc end}}

[[de:cpp/chrono/operator&quot;&quot;s]]
[[es:cpp/chrono/operator&quot;&quot;s]]
[[fr:cpp/chrono/operator&quot;&quot;s]]
[[it:cpp/chrono/operator&quot;&quot;s]]
[[ja:cpp/chrono/operator&quot;&quot;s]]
[[pt:cpp/chrono/operator&quot;&quot;s]]
[[ru:cpp/chrono/operator&quot;&quot;s]]
[[zh:cpp/chrono/operator&quot;&quot;s]]</text>
      <sha1>4p9ynhjfhtmofiwn4dhofwu28m5in8w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/operator&quot;&quot;us</title>
    <ns>0</ns>
    <id>13094</id>
    <revision>
      <id>77550</id>
      <parentid>68729</parentid>
      <timestamp>2015-03-29T16:12:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>shorter using</comment>
      <text xml:space="preserve" bytes="1904">{{cpp/title|n=literals::chrono_literals::|operator&quot;&quot;us }}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | num=1 | since=c++14 | 1=
constexpr std::chrono::microseconds operator &quot;&quot; us(unsigned long long us);
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr std::chrono::duration&lt;/*unspecified*/,
                           std::micro&gt; operator &quot;&quot; us(long double us);
}}
{{dcl end}}

Forms a {{lc|std::chrono::duration}} literal representing microseconds.

@1@ integer literal, returns exactly {{c|std::chrono::microseconds(us)}} 
@2@ floating-point literal, returns a floating-point duration equivalent to {{lc|std::chrono::microseconds}}

===Parameters===
{{par begin}}
{{par | us | the number of microseconds}}
{{par end}}

===Return value===
The {{lc|std::chrono::duration}} literal.

===Possible implementation===
{{eq fun
 | 1=
constexpr std::chrono::microseconds operator &quot;&quot;us(unsigned long long us)
{
    return std::chrono::microseconds(us);
}
constexpr std::chrono::duration&lt;long double, std::micro&gt; operator &quot;&quot;us(long double us)
{
    return std::chrono::duration&lt;long double, std::micro&gt;(us);
}
}}

===Notes===
{{cpp/chrono/chrono_literals_namespace}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

int main()
{
    using namespace std::chrono_literals;
    auto d1 = 250us;
    std::chrono::microseconds d2 = 1ms;
    std::cout &lt;&lt; &quot;250us = &quot; &lt;&lt; d1.count() &lt;&lt; &quot; microseconds\n&quot;
              &lt;&lt; &quot;1ms = &quot; &lt;&lt; d2.count() &lt;&lt; &quot; microseconds\n&quot;;
}
| output=
250us = 250 microseconds
1ms = 1000 microseconds
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor}}
{{dsc end}}

[[de:cpp/chrono/operator&quot;&quot;us]]
[[es:cpp/chrono/operator&quot;&quot;us]]
[[fr:cpp/chrono/operator&quot;&quot;us]]
[[it:cpp/chrono/operator&quot;&quot;us]]
[[ja:cpp/chrono/operator&quot;&quot;us]]
[[pt:cpp/chrono/operator&quot;&quot;us]]
[[ru:cpp/chrono/operator&quot;&quot;us]]
[[zh:cpp/chrono/operator&quot;&quot;us]]</text>
      <sha1>6u9beogwyinmp45phubnvman8eb5aa5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/steady clock</title>
    <ns>0</ns>
    <id>3290</id>
    <revision>
      <id>85123</id>
      <parentid>83450</parentid>
      <timestamp>2016-04-02T15:01:54Z</timestamp>
      <contributor>
        <username>Tomalak geretkal</username>
        <id>2346</id>
      </contributor>
      <minor/>
      <comment>Grammar</comment>
      <text xml:space="preserve" bytes="1854">{{cpp/title|n=chrono::|steady_clock}}
{{cpp/chrono/steady_clock/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | since=c++11 | 1=
class steady_clock;
}}
{{dcl end}}

Class {{tt|std::chrono::steady_clock}} represents a monotonic clock. The time points of this clock cannot decrease as physical time moves forward. This clock is not related to wall clock time (for example, it can be time since last reboot), and is most suitable for measuring intervals.

{{tt|std::chrono::steady_clock}} meets the requirements of {{concept|TrivialClock}}. 

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|rep}} | arithmetic type representing the number of ticks in the clock's duration}}
{{dsc | {{tt|period}} | a {{lc|std::ratio}} type representing the tick period of the clock, in seconds}}
{{dsc | {{tt|duration}} | {{c|std::chrono::duration&lt;rep, period&gt;}}}}
{{dsc | {{tt|time_point}} | {{c|std::chrono::time_point&lt;std::chrono::steady_clock&gt;}}}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr bool}} is_steady | steady clock flag, always {{c|true}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem sfun | cpp/chrono/steady_clock/now  | returns a time_point representing the current value of the clock}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc class | cpp/chrono/system_clock | wall clock time from the system-wide realtime clock  | notes={{mark c++11}}  }}
{{dsc class | cpp/chrono/high_resolution_clock | the clock with the shortest tick period available | notes={{mark c++11}}  }}
{{dsc end}}

[[de:cpp/chrono/steady clock]]
[[es:cpp/chrono/steady clock]]
[[fr:cpp/chrono/steady clock]]
[[it:cpp/chrono/steady clock]]
[[ja:cpp/chrono/steady clock]]
[[pt:cpp/chrono/steady clock]]
[[ru:cpp/chrono/steady clock]]
[[zh:cpp/chrono/steady clock]]</text>
      <sha1>jdw034o5dr39hasjjclkqqfnqxllbbg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/steady clock/now</title>
    <ns>0</ns>
    <id>5280</id>
    <revision>
      <id>50430</id>
      <parentid>42360</parentid>
      <timestamp>2013-06-01T03:28:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="331">{{include page|cpp/chrono/clock/now|steady_clock}}

[[de:cpp/chrono/steady clock/now]]
[[es:cpp/chrono/steady clock/now]]
[[fr:cpp/chrono/steady clock/now]]
[[it:cpp/chrono/steady clock/now]]
[[ja:cpp/chrono/steady clock/now]]
[[pt:cpp/chrono/steady clock/now]]
[[ru:cpp/chrono/steady clock/now]]
[[zh:cpp/chrono/steady clock/now]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/system clock</title>
    <ns>0</ns>
    <id>3289</id>
    <revision>
      <id>77110</id>
      <parentid>64486</parentid>
      <timestamp>2015-03-15T14:00:50Z</timestamp>
      <contributor>
        <username>Pluc</username>
        <id>2133</id>
      </contributor>
      <minor/>
      <comment>Small typo in typedefs</comment>
      <text xml:space="preserve" bytes="2104">{{cpp/title|n=chrono::|system_clock}}
{{cpp/chrono/system_clock/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | since=c++11 | 1=
class system_clock;
}}
{{dcl end}}

Class {{tt|std::chrono::system_clock}} represents the system-wide real time wall clock. 

It may not be monotonic: on most systems, the system time can be adjusted at any moment. It is the only C++ clock that has the ability to map its time points to C-style time, and, therefore, to be displayed. 

{{tt|std::chrono::system_clock}} meets the requirements of {{concept|TrivialClock}}. 

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|rep}} | signed arithmetic type representing the number of ticks in the clock's duration}}
{{dsc | {{tt|period}} | a {{lc|std::ratio}} type representing the tick period of the clock, in seconds}}
{{dsc | {{tt|duration}} | {{c|std::chrono::duration&lt;rep, period&gt;}}, capable of representing negative durations}}
{{dsc | {{tt|time_point}} | {{c|std::chrono::time_point&lt;std::chrono::system_clock&gt;}}}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr bool}} is_steady | {{c|true}} if the time between ticks is always constant, i.e. calls to {{ltf|cpp/chrono/system_clock/now}} return values that increase monotonically even in case of some external clock adjustment}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/chrono/system_clock/dsc now}}
{{dsc inc | cpp/chrono/system_clock/dsc to_time_t}}
{{dsc inc | cpp/chrono/system_clock/dsc from_time_t}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc class | cpp/chrono/steady_clock | monotonic clock that will never be adjusted | notes={{mark c++11}}  }}
{{dsc class | cpp/chrono/high_resolution_clock | the clock with the shortest tick period available | notes={{mark c++11}}  }}
{{dsc end}}

[[de:cpp/chrono/system clock]]
[[es:cpp/chrono/system clock]]
[[fr:cpp/chrono/system clock]]
[[it:cpp/chrono/system clock]]
[[ja:cpp/chrono/system clock]]
[[pt:cpp/chrono/system clock]]
[[ru:cpp/chrono/system clock]]
[[zh:cpp/chrono/system clock]]</text>
      <sha1>57bhv5212ix5dwhqyht5w6rrc5ai30w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/system clock/from time t</title>
    <ns>0</ns>
    <id>5269</id>
    <revision>
      <id>91368</id>
      <parentid>76906</parentid>
      <timestamp>2017-03-31T19:41:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1065">{{cpp/chrono/system_clock/title | from_time_t }}
{{cpp/chrono/system_clock/navbar}}
{{ddcl | since=c++11 |
static std::chrono::system_clock::time_point from_time_t( std::time_t t );
}}

Converts {{tt|t}} to a time point type, using the coarser precision of the two types.

If {{tt|time_point}} has lower precision, it is implementation defined whether the value is rounded or truncated.

===Parameters===
{{par begin}}
{{par | t | {{lc|std::time_t}} value to convert}}
{{par end}}

===Return value===
A value of type {{lc|std::chrono::system_clock::time_point}} representing {{tt|t}}.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/system_clock/dsc to_time_t}}
{{dsc end}}

[[de:cpp/chrono/system clock/from time t]]
[[es:cpp/chrono/system clock/from time t]]
[[fr:cpp/chrono/system clock/from time t]]
[[it:cpp/chrono/system clock/from time t]]
[[ja:cpp/chrono/system clock/from time t]]
[[pt:cpp/chrono/system clock/from time t]]
[[ru:cpp/chrono/system clock/from time t]]
[[zh:cpp/chrono/system clock/from time t]]</text>
      <sha1>02ujg5osa8mwu1swkgjekgibbkz3zm0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/system clock/now</title>
    <ns>0</ns>
    <id>5277</id>
    <revision>
      <id>50431</id>
      <parentid>42335</parentid>
      <timestamp>2013-06-01T03:28:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="331">{{include page|cpp/chrono/clock/now|system_clock}}

[[de:cpp/chrono/system clock/now]]
[[es:cpp/chrono/system clock/now]]
[[fr:cpp/chrono/system clock/now]]
[[it:cpp/chrono/system clock/now]]
[[ja:cpp/chrono/system clock/now]]
[[pt:cpp/chrono/system clock/now]]
[[ru:cpp/chrono/system clock/now]]
[[zh:cpp/chrono/system clock/now]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/system clock/to time t</title>
    <ns>0</ns>
    <id>5261</id>
    <revision>
      <id>91352</id>
      <parentid>62175</parentid>
      <timestamp>2017-03-31T19:41:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="981">{{cpp/chrono/system_clock/title | to_time_t }}
{{cpp/chrono/system_clock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
static std::time_t to_time_t( const time_point&amp; t );
}}
{{dcl end}}

Converts {{tt|t}} to a {{lc|std::time_t}} type. 

If {{lc|std::time_t}} has lower precision, it is implementation-defined whether the value is rounded or truncated.

===Parameters===
{{par begin}}
{{par | t | system clock time point to convert}}
{{par end}}

===Return value===
A {{lc|std::time_t}} value representing {{tt|t}}.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/system_clock/dsc from_time_t}}
{{dsc end}}

[[de:cpp/chrono/system clock/to time t]]
[[es:cpp/chrono/system clock/to time t]]
[[fr:cpp/chrono/system clock/to time t]]
[[it:cpp/chrono/system clock/to time t]]
[[ja:cpp/chrono/system clock/to time t]]
[[pt:cpp/chrono/system clock/to time t]]
[[ru:cpp/chrono/system clock/to time t]]
[[zh:cpp/chrono/system clock/to time t]]</text>
      <sha1>bee08nt47qpny44r86tlter9bo2wnlt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point</title>
    <ns>0</ns>
    <id>3263</id>
    <revision>
      <id>87666</id>
      <parentid>87664</parentid>
      <timestamp>2016-09-20T19:49:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Undo revision 87664 by [[Special:Contributions/108.243.22.39|108.243.22.39]] ([[User talk:108.243.22.39|talk]]) it is, for time_t</comment>
      <text xml:space="preserve" bytes="2897">{{cpp/chrono/title|time_point}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | since=c++11 | 1=
template&lt; 
    class Clock, 
    class Duration = typename Clock::duration 
&gt; class time_point;
}}
{{dcl end}}

Class template {{tt|std::chrono::time_point}} represents a point in time. It is implemented as if it stores a value of type {{tt|Duration}} indicating the time interval from the start of the {{tt|Clock}}'s epoch. 

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|clock}} | {{tt|Clock}}, the clock on which this time point is measured}}
{{dsc | {{tt|duration}} | {{tt|Duration}}, a {{lc|std::chrono::duration}} type used to measure the time since epoch}}
{{dsc | {{tt|rep}} | {{tt|Rep}}, an arithmetic type representing the number of ticks of the duration}}
{{dsc | {{tt|period}} | {{tt|Period}}, a {{lc|std::ratio}} type representing the tick period of the duration}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc constructor}}
{{dsc inc | cpp/chrono/time_poind/dsc time_since_epoch}}
{{dsc inc | cpp/chrono/time_point/dsc operator_arith}}
{{dsc inc | cpp/chrono/time_point/dsc min}}
{{dsc inc | cpp/chrono/time_point/dsc max}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc common_type}}
{{dsc inc | cpp/chrono/time_point/dsc operator_arith2}}
{{dsc inc | cpp/chrono/time_point/dsc operator_cmp}}
{{dsc inc | cpp/chrono/time_point/dsc time_point_cast}}
{{dsc inc | cpp/chrono/time_point/dsc floor}}
{{dsc inc | cpp/chrono/time_point/dsc ceil}}
{{dsc inc | cpp/chrono/time_point/dsc round}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;ctime&gt;
#include &lt;chrono&gt;

int main()
{
    std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24));
    std::cout &lt;&lt; &quot;24 hours ago, the time was &quot;
              &lt;&lt; std::put_time(std::localtime(&amp;now_c), &quot;%F %T&quot;) &lt;&lt; '\n';

    std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
    std::cout &lt;&lt; &quot;Hello World\n&quot;;
    std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
    std::cout &lt;&lt; &quot;Printing took &quot;
              &lt;&lt; std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(end - start).count()
              &lt;&lt; &quot;us.\n&quot;;
}
 | p=true
 | output=
24 hours ago, the time was 2011-10-25 12:00:08
Hello World
Printing took 84us.
}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/chrono/duration | a time interval | notes={{mark c++11}}  }}
{{dsc end}}

[[de:cpp/chrono/time point]]
[[es:cpp/chrono/time point]]
[[fr:cpp/chrono/time point]]
[[it:cpp/chrono/time point]]
[[ja:cpp/chrono/time point]]
[[pt:cpp/chrono/time point]]
[[ru:cpp/chrono/time point]]
[[zh:cpp/chrono/time point]]</text>
      <sha1>p9l71dtgkclxwvd3kglq993m0znnblr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/ceil</title>
    <ns>0</ns>
    <id>14500</id>
    <revision>
      <id>81534</id>
      <timestamp>2015-10-27T16:45:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1842">{{cpp/chrono/title|ceil{{small|(std::chrono::time_point)}}}}
{{cpp/chrono/time_point/navbar}}
{{ddcl | since=c++17 | header=chrono|
template &lt;class ToDuration, class Clock, class Duration&gt;
constexpr time_point&lt;Clock, ToDuration&gt; ceil(const time_point&lt;Clock, Duration&gt;&amp; tp);
}}

Returns the smallest time point {{tt|t}} representable in {{tt|ToDuration}} that is greater or equal to {{tt|tp}}.

The function does not participate in the overload resolution unless {{tt|ToDuration}} is an instance of {{lc|std::chrono::duration}}.

===Parameters===
{{par begin}}
{{par | tp | time point to convert}}
{{par end}}

===Return value===
{{tt|d}} rounded up to a the next time point using duration of type {{tt|ToDuration}}.

===Possible implementation===
{{eq fun|1=
template &lt;class T&gt; struct is_duration : std::false_type {};
template &lt;class Rep, class Period&gt; struct is_duration&lt;
    std::chrono::duration&lt;Rep, Period&gt;&gt; : std::true_type {};

template &lt;class To, class Clock, class FromDuration,
          class = std::enable_if_t&lt;is_duration&lt;To&gt;{}&gt;&gt;
constexpr std::chrono::time_point&lt;Clock, To&gt;
    ceil(const std::chrono::time_point&lt;Clock, FromDuration&gt;&amp; tp)
{
    return std::chrono::time_point&lt;Clock, To&gt;{
               std::chrono::ceil&lt;To&gt;(tp.time_since_epoch())};
}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc time_point_cast}}
{{dsc inc | cpp/chrono/time_point/dsc floor}}
{{dsc inc | cpp/chrono/time_point/dsc round}}
{{dsc inc | cpp/chrono/duration/dsc ceil}}
{{dsc inc | cpp/numeric/math/dsc ceil}}
{{dsc end}}

[[de:cpp/chrono/time_point/ceil]]
[[es:cpp/chrono/time_point/ceil]]
[[fr:cpp/chrono/time_point/ceil]]
[[it:cpp/chrono/time_point/ceil]]
[[ja:cpp/chrono/time_point/ceil]]
[[pt:cpp/chrono/time_point/ceil]]
[[ru:cpp/chrono/time_point/ceil]]
[[zh:cpp/chrono/time_point/ceil]]</text>
      <sha1>4tmt5rrluvjxl1m8y0i7jwa0ujsyl6v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/common type</title>
    <ns>0</ns>
    <id>8665</id>
    <revision>
      <id>63282</id>
      <parentid>57228</parentid>
      <timestamp>2013-07-10T01:27:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1184">{{cpp/title|common_type&lt;small&gt;(std::chrono::time_point)&lt;/small&gt;}}
{{cpp/chrono/time_point/navbar}}
{{ddcl | since=c++11 |
template &lt;class Clock, class Duration1, class Duration2&gt;
struct common_type&lt;std::chrono::time_point&lt;Clock, Duration1&gt;, 
                   std::chrono::time_point&lt;Clock, Duration2&gt;&gt; {
    typedef std::chrono::time_point&lt;
        Clock, typename std::common_type&lt;Duration1, Duration2&gt;::type&gt; type;
};
}}

Exposes the type named {{tt|type}}, which is the common type of two {{lc|std::chrono::time_point}}s.

===Notes===

The common type of two {{lc|std::chrono::time_point}} types is a {{lc|std::chrono::time_point}} with the same clock as the two types and the {{lc|std::common_type}} of their durations.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc common_type}}
{{dsc end}}

[[de:cpp/chrono/time point/common type]]
[[es:cpp/chrono/time point/common type]]
[[fr:cpp/chrono/time point/common type]]
[[it:cpp/chrono/time point/common type]]
[[ja:cpp/chrono/time point/common type]]
[[pt:cpp/chrono/time point/common type]]
[[ru:cpp/chrono/time point/common type]]
[[zh:cpp/chrono/time point/common type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/floor</title>
    <ns>0</ns>
    <id>14501</id>
    <revision>
      <id>81537</id>
      <timestamp>2015-10-27T16:47:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1858">{{cpp/chrono/title|floor{{small|(std::chrono::time_point)}}}}
{{cpp/chrono/time_point/navbar}}
{{ddcl | since=c++17 | header=chrono|
template &lt;class ToDuration, class Clock, class Duration&gt;
constexpr time_point&lt;Clock, ToDuration&gt; floor(const time_point&lt;Clock, Duration&gt;&amp; tp);
}}

Returns the largest time point {{tt|t}} representable in {{tt|ToDuration}} that is smaller or equal to {{tt|tp}}.

The function does not participate in the overload resolution unless {{tt|ToDuration}} is an specialization of {{lc|std::chrono::duration}}.

===Parameters===
{{par begin}}
{{par | tp | time point to round down}}
{{par end}}

===Return value===
{{tt|d}} rounded down to a the next time point using duration of type {{tt|ToDuration}}.

===Possible implementation===
{{eq fun|1=
template &lt;class T&gt; struct is_duration : std::false_type {};
template &lt;class Rep, class Period&gt; struct is_duration&lt;
    std::chrono::duration&lt;Rep, Period&gt;&gt; : std::true_type {};

template &lt;class To, class Clock, class FromDuration,
          class = std::enable_if_t&lt;is_duration&lt;To&gt;{}&gt;&gt;
constexpr std::chrono::time_point&lt;Clock, To&gt;
    floor(const std::chrono::time_point&lt;Clock, FromDuration&gt;&amp; tp)
{
    return std::chrono::time_point&lt;Clock, To&gt;{
        std::chrono::floor&lt;To&gt;(tp.time_since_epoch())};
}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc time_point_cast}}
{{dsc inc | cpp/chrono/time_point/dsc ceil}}
{{dsc inc | cpp/chrono/time_point/dsc round}}
{{dsc inc | cpp/chrono/duration/dsc floor}}
{{dsc inc | cpp/numeric/math/dsc floor}}
{{dsc end}}

[[de:cpp/chrono/time_point/floor]]
[[es:cpp/chrono/time_point/floor]]
[[fr:cpp/chrono/time_point/floor]]
[[it:cpp/chrono/time_point/floor]]
[[ja:cpp/chrono/time_point/floor]]
[[pt:cpp/chrono/time_point/floor]]
[[ru:cpp/chrono/time_point/floor]]
[[zh:cpp/chrono/time_point/floor]]</text>
      <sha1>rpyjxv22au867apmqa1yxwia386klwo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/max</title>
    <ns>0</ns>
    <id>8657</id>
    <revision>
      <id>49388</id>
      <parentid>42300</parentid>
      <timestamp>2013-06-01T02:34:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1664">{{cpp/chrono/time_point/title | max}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl |
static constexpr time_point max();
}}
{{dcl end}}

Returns a {{tt|time_point}} with the largest possible duration, i.e. {{c|std::chrono::time_point(std::chrono::duration::max())}}.

===Parameters===
(none)

===Return value===
the largest possible {{tt|time_point}}

===Example===
{{example
 | p=true
 | code=
#include &lt;chrono&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

int main() 
{
    std::chrono::time_point&lt;std::chrono::system_clock&gt; now =
        std::chrono::system_clock::now();
    std::vector&lt;std::chrono::time_point&lt;std::chrono::system_clock&gt;&gt; times {
        now - std::chrono::hours(24),
        now - std::chrono::hours(48),
        now + std::chrono::hours(24),
    };  
  
    std::chrono::time_point&lt;std::chrono::system_clock&gt; earliest =
        std::chrono::time_point&lt;std::chrono::system_clock&gt;::max();

    std::cout &lt;&lt; &quot;all times:\n&quot;;
    for (const auto &amp;time : times) {
        std::time_t t = std::chrono::system_clock::to_time_t(time);
        std::cout &lt;&lt; std::ctime(&amp;t);
    
        if (time &lt; earliest) earliest = time;
    }

    std::time_t t = std::chrono::system_clock::to_time_t(earliest);
    std::cout &lt;&lt; &quot;earliest:\n&quot; &lt;&lt; std::ctime(&amp;t);
}
 | output=
all times:
Sun Oct  7 19:06:48 2012
Sat Oct  6 19:06:48 2012
Tue Oct  9 19:06:48 2012
earliest:
Sat Oct  6 19:06:48 2012
}}

[[de:cpp/chrono/time point/max]]
[[es:cpp/chrono/time point/max]]
[[fr:cpp/chrono/time point/max]]
[[it:cpp/chrono/time point/max]]
[[ja:cpp/chrono/time point/max]]
[[pt:cpp/chrono/time point/max]]
[[ru:cpp/chrono/time point/max]]
[[zh:cpp/chrono/time point/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/min</title>
    <ns>0</ns>
    <id>8656</id>
    <revision>
      <id>49389</id>
      <parentid>42293</parentid>
      <timestamp>2013-06-01T02:34:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="672">{{cpp/chrono/time_point/title | min}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl |
static constexpr time_point min();
}}
{{dcl end}}

Returns a {{tt|time_point}} with the smallest possible duration, i.e. {{c|std::chrono::time_point(std::chrono::duration::min())}}.

===Parameters===
(none)

===Return value===
the smallest possible {{tt|time_point}}

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/chrono/time point/min]]
[[es:cpp/chrono/time point/min]]
[[fr:cpp/chrono/time point/min]]
[[it:cpp/chrono/time point/min]]
[[ja:cpp/chrono/time point/min]]
[[pt:cpp/chrono/time point/min]]
[[ru:cpp/chrono/time point/min]]
[[zh:cpp/chrono/time point/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/operator arith</title>
    <ns>0</ns>
    <id>12609</id>
    <revision>
      <id>88288</id>
      <parentid>61308</parentid>
      <timestamp>2016-11-15T19:42:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0505r0 constexpr</comment>
      <text xml:space="preserve" bytes="1099">{{cpp/chrono/time_point/title | operator+, operator-}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | until=c++17 | 1=
time_point&amp; operator+=( const duration&amp; d );
}}
{{dcl | since=c++17 | 1=
constexpr time_point&amp; operator+=( const duration&amp; d );
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++17 | 1=
time_point&amp; operator-=( const duration&amp; d );
}}
{{dcl | since=c++17 | 1=
constexpr time_point&amp; operator-=( const duration&amp; d );
}}
{{dcl rev end}}
{{dcl end}}

Modifies the time point by the given duration.

@1@ Applies the offset {{tt|d}} to {{tt|pt}}. Effectively, {{tt|d}} is added to the internally stored duration {{tt|d_}} as {{c|1=d_ += d}}.

@2@ Applies the offset {{tt|d}} to {{tt|pt}} in negative direction. Effectively, {{tt|d}} is subtracted from internally stored duration {{tt|d_}} as {{c|1=d_ -= d}}.

===Parameters===
{{par begin}}
{{par | d | a time offset to apply}}
{{par end}}

===Return value===
{{c|*this}}.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc operator_arith2}}
{{dsc end}}</text>
      <sha1>8uvsiohxkxb71rhgvsgvjwb5k846tqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/operator arith2</title>
    <ns>0</ns>
    <id>12607</id>
    <revision>
      <id>88470</id>
      <parentid>86047</parentid>
      <timestamp>2016-11-20T09:05:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2739; not revboxing since the original behavior makes no sense. Also these aren't equivalent to +=/-=</comment>
      <text xml:space="preserve" bytes="3223">{{title | operator+, operator-{{dsc small|(std::time_point)}}}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class C, class D1, class R2, class P2 &gt;
time_point&lt;C, typename std::common_type&lt;D1, duration&lt;R2,P2&gt;&gt;::type&gt;
    operator+( const time_point&lt;C,D1&gt;&amp; pt, 
               const duration&lt;R2,P2&gt;&amp; d );
}}
{{dcl | since=c++14 |
template&lt; class C, class D1, class R2, class P2 &gt;
constexpr time_point&lt;C, typename std::common_type&lt;D1, duration&lt;R2,P2&gt;&gt;::type&gt;
    operator+( const time_point&lt;C,D1&gt;&amp; pt, 
               const duration&lt;R2,P2&gt;&amp; d );
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class R1, class P1, class C, class D2 &gt;
time_point&lt;C, typename std::common_type&lt;duration&lt;R1,P1&gt;,D2&gt;::type&gt;
    operator+( const duration&lt;R1,P1&gt;&amp; d, 
               const time_point&lt;C,D2&gt;&amp; pt );
}}
{{dcl | since=c++14 |
template&lt; class R1, class P1, class C, class D2 &gt;
constexpr time_point&lt;C, typename std::common_type&lt;duration&lt;R1,P1&gt;,D2&gt;::type&gt;
    operator+( const duration&lt;R1,P1&gt;&amp; d, 
               const time_point&lt;C,D2&gt;&amp; pt );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class C, class D1, class R2, class P2 &gt;
time_point&lt;C, typename std::common_type&lt;D1, duration&lt;R2,P2&gt;&gt;::type&gt;
    operator-( const time_point&lt;C,D1&gt;&amp; d, 
               const duration&lt;R2,P2&gt;&amp; pt );
}}
{{dcl | since=c++14|
template&lt; class C, class D1, class R2, class P2 &gt;
constexpr time_point&lt;C, typename std::common_type&lt;D1, duration&lt;R2,P2&gt;&gt;::type&gt;
    operator-( const time_point&lt;C,D1&gt;&amp; d, 
               const duration&lt;R2,P2&gt;&amp; pt );
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class C, class D1, class D2 &gt;
typename std::common_type&lt;D1,D2&gt;::type
    operator-( const time_point&lt;C,D1&gt;&amp; pt_lhs, 
               const time_point&lt;C,D2&gt;&amp; pt_rhs );
}}
{{dcl | since=c++14|
template&lt; class C, class D1, class D2 &gt;
constexpr typename std::common_type&lt;D1,D2&gt;::type
    operator-( const time_point&lt;C,D1&gt;&amp; pt_lhs, 
               const time_point&lt;C,D2&gt;&amp; pt_rhs );
}}
{{dcl end}}

Performs add and subtract operations involving a {{tt|time_point}}.

@1-2@ Applies the offset {{tt|d}} to {{tt|pt}}. Effectively returns {{c|CT(pt.time_since_epoch() + d)}}, where {{tt|CT}} is the return type.

@3@ Applies the offset {{tt|d}} to {{tt|pt}} in negative direction. Effectively returns {{c|CT(ot.time_since_epoch() - d)}}, where {{tt|CT}} is the return type.

@4@ Computes the difference between {{tt|pt_lhs}} and {{tt|pt_rhs}}.

===Parameters===
{{par begin}}
{{par | pt | a time point to apply the offset to}}
{{par | d | a time offset}}
{{par | pt_lhs, pt_rhs | time points to extract difference from}}
{{par end}}

===Return value===
@1-3@ The time point that resulted from applying the offset {{tt|d}}.

@4@ The duration between the time points.

===Exceptions===
(none)

===Defect reports===
{{dr list begin}}
{{dr list item|dr=2739|wg=lwg|std=C++11|before={{c|pt - d}} behaved erratically for unsigned {{tt|duration}}s |after= behavior corrected}}
{{dr list end }}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc operator_arith}}
{{dsc end}}</text>
      <sha1>3697xrtlxex40isfewy1d1ih3hzvfyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/operator cmp</title>
    <ns>0</ns>
    <id>12608</id>
    <revision>
      <id>67317</id>
      <parentid>67292</parentid>
      <timestamp>2014-02-04T20:01:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>separate versions for C++11 and C++14</comment>
      <text xml:space="preserve" bytes="3966">{{title | 1= operator==,!=,&lt;,&lt;=,&gt;,&gt;={{dsc small|(std::time_point)}}}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
bool operator==( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                 const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl | since=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
constexpr bool operator==( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                           const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
bool operator!=( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                 const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl | since=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
constexpr bool operator!=( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                           const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
bool operator&lt;( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl | since=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
constexpr bool operator&lt;( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                          const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin | num=4}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
bool operator&lt;=( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                 const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl | since=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
constexpr bool operator&lt;=( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                           const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin | num=5}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
bool operator&gt;( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl | since=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
constexpr bool operator&gt;( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                          const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin | num=6}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
bool operator&gt;=( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                 const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl | since=c++14 | 1=
template&lt; class Clock, class Dur1, class Dur2 &gt;
constexpr bool operator&gt;=( const time_point&lt;Clock,Dur1&gt;&amp; lhs,
                           const time_point&lt;Clock,Dur2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl end}}

Compares two time points. The comparison is done by comparing the results {{lc|time_since_epoch()}} for the time points.

@1-2@ Checks if the time points {{tt|lhs}} and {{tt|rhs}} refer to the same time point for the given clock.

@3-6@ Compares the time points {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | time points to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if the {{tt|lhs}} and {{tt|rhs}} refer to the same time point, {{c|false}} otherwise.

@2@ {{c|true}} if the {{tt|lhs}} and {{tt|rhs}} refer to different time points, {{c|false}} otherwise.

@3@ {{c|true}} if the {{tt|lhs}} refers to time point ''before'' {{tt|rhs}}, {{c|false}} otherwise.

@4@ {{c|true}} if the {{tt|lhs}} refers to time point ''before'' {{tt|rhs}}, or to the same time point as {{tt|rhs}}, {{c|false}} otherwise.

@5@ {{c|true}} if the {{tt|lhs}} refers to time point ''after'' {{tt|rhs}}, {{c|false}} otherwise.

@6@ {{c|true}} if the {{tt|lhs}} refers to time point ''after'' {{tt|rhs}},  or to the same time point as {{tt|rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)

===Notes===
These operators were not {{tt|constexpr}} in C++11, this was corrected in C++14</text>
      <sha1>2tzpfuudjnj04kca1ivw3vlbvm5a56w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/round</title>
    <ns>0</ns>
    <id>14502</id>
    <revision>
      <id>81538</id>
      <timestamp>2015-10-27T16:51:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>last one from p0092r1</comment>
      <text xml:space="preserve" bytes="2063">{{cpp/chrono/title|round{{small|(std::chrono::time_point)}}}}
{{cpp/chrono/time_point/navbar}}
{{ddcl | since=c++17 | header=chrono|
template &lt;class ToDuration, class Clock, class Duration&gt;
constexpr time_point&lt;Clock, ToDuration&gt; round(const time_point&lt;Clock, Duration&gt;&amp; tp);
}}

Returns the nearest time point to {{tt|tp}} representable in {{tt|ToDuration}}, rounding to even in halfway cases.

The function does not participate in the overload resolution unless {{tt|ToDuration}} is an specialization of {{lc|std::chrono::duration}} and  {{c|std::chrono::treat_as_floating_point&lt;typename ToDuration::rep&gt;::value}} is {{c|false}}.

===Parameters===
{{par begin}}
{{par | tp | time point to round to nearest}}
{{par end}}

===Return value===
{{tt|d}} rounded to nearest time point using duration of type {{tt|ToDuration}}, rounding to even in halfway cases.

===Possible implementation===
{{eq fun|1=
template &lt;class T&gt; struct is_duration : std::false_type {};
template &lt;class Rep, class Period&gt; struct is_duration&lt;
    std::chrono::duration&lt;Rep, Period&gt;&gt; : std::true_type {};

template &lt;class To, class Clock, class FromDuration,
          class = std::enable_if_t&lt;is_duration&lt;To&gt;{}
             &amp;&amp; !std::chrono::treat_as_floating_point&lt;typename To::rep&gt;{}&gt;&gt;
constexpr std::chrono::time_point&lt;Clock, To&gt; round(
    const std::chrono::time_point&lt;Clock, FromDuration&gt;&amp; tp)
{
    return std::chrono::time_point&lt;Clock, To&gt;{
        std::chrono::round&lt;To&gt;(tp.time_since_epoch())};
}
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc time_point_cast}}
{{dsc inc | cpp/chrono/time_point/dsc ceil}}
{{dsc inc | cpp/chrono/time_point/dsc floor}}
{{dsc inc | cpp/chrono/duration/dsc round}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc end}}

[[de:cpp/chrono/time_point/round]]
[[es:cpp/chrono/time_point/round]]
[[fr:cpp/chrono/time_point/round]]
[[it:cpp/chrono/time_point/round]]
[[ja:cpp/chrono/time_point/round]]
[[pt:cpp/chrono/time_point/round]]
[[ru:cpp/chrono/time_point/round]]
[[zh:cpp/chrono/time_point/round]]</text>
      <sha1>nuq75x04xiox54xhiyuucribwhihxiq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/time point</title>
    <ns>0</ns>
    <id>8651</id>
    <revision>
      <id>64910</id>
      <parentid>64909</parentid>
      <timestamp>2013-08-27T10:30:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="2685">{{cpp/chrono/time_point/title | time_point}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl rev begin | num = 1}}
{{dcl | since=c++11 | until=c++14 |
time_point();
}}
{{dcl | since=c++14 |
constexpr time_point();
}}
{{dcl rev end}}
{{dcl rev begin | num = 2}}
{{dcl | since=c++11 | until=c++14 |
explicit time_point( const duration&amp; d );
}}
{{dcl | since=c++14 |
constexpr explicit time_point( const duration&amp; d );
}}
{{dcl rev end}}
{{dcl rev begin | num = 3 }}
{{dcl | since=c++11 | until=c++14 |
template&lt; class Duration2 &gt;
time_point( const time_point&lt;Clock,Duration2&gt;&amp; t );
}}
{{dcl | since=c++14 |
template&lt; class Duration2 &gt;
constexpr time_point( const time_point&lt;Clock,Duration2&gt;&amp; t );
}}
{{dcl rev end}}
{{dcl end}}

Constructs a new {{tt|time_point}} from one of several optional data sources.

@1@ Default constructor, creates a {{tt|time_point}} with a value of {{tt|Clock}}'s epoch.

@2@ Constructs a {{tt|time_point}} at {{tt|Clock}}'s epoch plus {{tt|d}}.

@3@ Constructs a {{tt|time_point}} by converting {{tt|t}} to {{tt|duration}}.  This constructor only participates in overload resolution if {{tt|Duration2}} is implicitly convertible to {{tt|duration}}.

===Parameters===
{{par begin}}
{{par | d  | a {{tt|duration}} to copy from}}
{{par | t  | a {{tt|time_point}} to convert from}}
{{par end}}

===Example===
{{example
 | p=true
 | code=
#include &lt;chrono&gt;
#include &lt;iostream&gt;

using Clock = std::chrono::high_resolution_clock;
using TimePoint = std::chrono::time_point&lt;Clock&gt;;

void print_ms(const TimePoint&amp; point) 
{
    using Ms = std::chrono::milliseconds;
    const Clock::duration since_epoch = point.time_since_epoch();
    std::cout &lt;&lt; std::chrono::duration_cast&lt;Ms&gt;(since_epoch).count() &lt;&lt; &quot; ms\n&quot;;
}

int main() 
{
    const TimePoint default_value = TimePoint(); // (1)
    print_ms(default_value); // 0 ms

    const Clock::duration duration_4_seconds = std::chrono::seconds(4);
    const TimePoint time_point_4_seconds(duration_4_seconds); // (2)
      // 4 seconds from start of epoch
    print_ms(time_point_4_seconds); // 4000 ms

    const TimePoint time_point_now = Clock::now(); // (3)
    print_ms(time_point_now); // 43098276 ms
}
 | output=
0 ms
4000 ms
43098276 ms
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc constructor }}
{{dsc inc | cpp/chrono/duration/dsc duration_cast }}
{{dsc end}}

[[de:cpp/chrono/time point/time point]]
[[es:cpp/chrono/time point/time point]]
[[fr:cpp/chrono/time point/time point]]
[[it:cpp/chrono/time point/time point]]
[[ja:cpp/chrono/time point/time point]]
[[pt:cpp/chrono/time point/time point]]
[[ru:cpp/chrono/time point/time point]]
[[zh:cpp/chrono/time point/time point]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/time point cast</title>
    <ns>0</ns>
    <id>8658</id>
    <revision>
      <id>65059</id>
      <parentid>64732</parentid>
      <timestamp>2013-08-30T14:59:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt, clutter</comment>
      <text xml:space="preserve" bytes="2241">{{cpp/chrono/title|time_point_cast}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl item | since=c++11 | until=c++14 |
template &lt;class ToDuration, class Clock, class Duration&gt;
time_point&lt;Clock, ToDuration&gt; time_point_cast(
                                 const time_point&lt;Clock, Duration&gt; &amp;t);
}}
{{dcl item | since=c++14 |
template &lt;class ToDuration, class Clock, class Duration&gt;
constexpr time_point&lt;Clock, ToDuration&gt; time_point_cast(
                                 const time_point&lt;Clock, Duration&gt; &amp;t);
}}
{{dcl rev end}}
{{dcl end}}

Converts a {{lc|std::chrono::time_point}} from one duration to another.

===Parameters===
{{par begin}}
{{par | t | {{tt|time_point}} to convert from}}
{{par end}}

===Return value===
{{c|std::chrono::time_point&lt;Clock, ToDuration&gt;(std::chrono::duration_cast&lt;ToDuration&gt;(t.time_since_epoch())) }}

===Notes===
{{tt|time_point_cast}} will only participate in overload resolution if {{tt|ToDuration}} is an instantiation of {{tt|duration}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

using Clock = std::chrono::high_resolution_clock;
using Ms = std::chrono::milliseconds;
using Sec = std::chrono::seconds;

template&lt;class Duration&gt;
using TimePoint = std::chrono::time_point&lt;Clock, Duration&gt;;

inline void print_ms(const TimePoint&lt;Ms&gt;&amp; time_point) 
{
    std::cout &lt;&lt; time_point.time_since_epoch().count() &lt;&lt; &quot; ms\n&quot;;
}

int main() 
{
    TimePoint&lt;Sec&gt; time_point_sec(Sec(4));

    // implicit cast, no precision loss
    TimePoint&lt;Ms&gt; time_point_ms(time_point_sec);
    print_ms(time_point_ms); // 4000 ms

    time_point_ms = TimePoint&lt;Ms&gt;(Ms(5756));

    // explicit cast, need when precision loss may happens
    // 5756 truncated to 5000
    time_point_sec = std::chrono::time_point_cast&lt;Sec&gt;(time_point_ms);
    print_ms(time_point_sec); // 5000 ms
}
 | output=
4000 ms
5000 ms
}}

[[de:cpp/chrono/time point/time point cast]]
[[es:cpp/chrono/time point/time point cast]]
[[fr:cpp/chrono/time point/time point cast]]
[[it:cpp/chrono/time point/time point cast]]
[[ja:cpp/chrono/time point/time point cast]]
[[pt:cpp/chrono/time point/time point cast]]
[[ru:cpp/chrono/time point/time point cast]]
[[zh:cpp/chrono/time point/time point cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/time point/time since epoch</title>
    <ns>0</ns>
    <id>8653</id>
    <revision>
      <id>86072</id>
      <parentid>86071</parentid>
      <timestamp>2016-06-15T10:34:19Z</timestamp>
      <contributor>
        <ip>117.136.66.123</ip>
      </contributor>
      <comment>the return type is time_point::duration (the member typedef of std::chrono::time_point). std::chrono::duration is a class template, not a type, so it can't be the return type</comment>
      <text xml:space="preserve" bytes="1937">{{cpp/chrono/time_point/title | time_since_epoch}}
{{cpp/chrono/time_point/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
duration time_since_epoch() const;
}}
{{dcl | since=c++14 |
constexpr duration time_since_epoch() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns a {{lc|std::chrono::duration|duration}} representing the amount of time between {{c|*this}} and the {{tt|clock}}'s epoch.

===Parameters===
(none)

===Return value===
The amount of time between this {{tt|time_point}} and the {{tt|clock}}'s epoch

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;ctime&gt;

int main()
{
    std::chrono::time_point&lt;std::chrono::system_clock&gt; p1, p2, p3;

    p2 = std::chrono::system_clock::now();
    p3 = p2 - std::chrono::hours(24);

    std::time_t epoch_time = std::chrono::system_clock::to_time_t(p1);
    std::cout &lt;&lt; &quot;epoch: &quot; &lt;&lt; std::ctime(&amp;epoch_time);
    std::time_t today_time = std::chrono::system_clock::to_time_t(p2);
    std::cout &lt;&lt; &quot;today: &quot; &lt;&lt; std::ctime(&amp;today_time);

    std::cout &lt;&lt; &quot;hours since epoch: &quot;
              &lt;&lt; std::chrono::duration_cast&lt;std::chrono::hours&gt;(
                   p2.time_since_epoch()).count() 
              &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;yesterday, hours since epoch: &quot;
              &lt;&lt; std::chrono::duration_cast&lt;std::chrono::hours&gt;(
                   p3.time_since_epoch()).count() 
              &lt;&lt; '\n';
}
 | output=
epoch: Wed Dec 31 19:00:00 1969
today: Tue Jun 19 12:05:37 2012
hours since epoch: 372256
yesterday, hours since epoch: 372232
}}

[[de:cpp/chrono/time point/time since epoch]]
[[es:cpp/chrono/time point/time since epoch]]
[[fr:cpp/chrono/time point/time since epoch]]
[[it:cpp/chrono/time point/time since epoch]]
[[ja:cpp/chrono/time point/time since epoch]]
[[pt:cpp/chrono/time point/time since epoch]]
[[ru:cpp/chrono/time point/time since epoch]]
[[zh:cpp/chrono/time point/time since epoch]]</text>
      <sha1>mtn9ltmv451pqdnn9sn0jj68prnjpj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/chrono/treat as floating point</title>
    <ns>0</ns>
    <id>8648</id>
    <revision>
      <id>91001</id>
      <parentid>90949</parentid>
      <timestamp>2017-03-14T12:58:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2604">{{cpp/chrono/title|treat_as_floating_point}}
{{cpp/chrono/duration/navbar}}
{{dcl begin}}
{{dcl header | chrono}}
{{dcl | since=c++11 | 1=
template &lt;class Rep&gt; 
struct treat_as_floating_point : std::is_floating_point&lt;Rep&gt; {};
}}
{{dcl end}}

The {{tt|std::chrono::treat_as_floating_point}} trait helps determine if a duration can be converted to another duration with a different tick period.

Implicit conversions between two durations normally depends on the tick period of the durations.  However, implicit conversions can happen regardless of tick period if {{c|std::chrono::treat_as_floating_point&lt;Rep&gt;::value {{==}} true}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class Rep &gt;
inline constexpr bool treat_as_floating_point_v = treat_as_floating_point&lt;Rep&gt;::value;
}}

===Example===
{{example|
  | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;

void timed_piece_of_code() 
{
    std::chrono::milliseconds simulated_work(2);
    std::this_thread::sleep_for(simulated_work);
}

int main() 
{
    auto start = std::chrono::high_resolution_clock::now();
    
    std::cout &lt;&lt; &quot;Running some timed piece of code...&quot; &lt;&lt; '\n';
    timed_piece_of_code();
    
    auto stop = std::chrono::high_resolution_clock::now();
    
    // A floating point milliseconds type
    using FpMilliseconds = 
        std::chrono::duration&lt;float, std::chrono::milliseconds::period&gt;;
    
    static_assert(std::chrono::treat_as_floating_point&lt;FpMilliseconds::rep&gt;::value, 
                  &quot;Rep required to be floating point&quot;);

    // Note that implicit conversion is not allowed here    
    auto i_ms = std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(stop - start);

    // Note that implicit conversion is allowed here
    auto f_ms = FpMilliseconds(stop - start);

    std::cout &lt;&lt; &quot;Time in milliseconds, using default rep: &quot;
              &lt;&lt; i_ms.count() &lt;&lt; '\n';
              
    
    std::cout &lt;&lt; &quot;Time in milliseconds, using floating point rep: &quot;
              &lt;&lt; f_ms.count() &lt;&lt; '\n';
              
}
  | output=
Running some timed piece of code...
Timing stats:
  Time in milliseconds, using default rep: 2
  Time in milliseconds, using floating point rep: 2.57307
  | p=true
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/chrono/treat as floating point]]
[[es:cpp/chrono/treat as floating point]]
[[fr:cpp/chrono/treat as floating point]]
[[it:cpp/chrono/treat as floating point]]
[[ja:cpp/chrono/treat as floating point]]
[[pt:cpp/chrono/treat as floating point]]
[[ru:cpp/chrono/treat as floating point]]
[[zh:cpp/chrono/treat as floating point]]</text>
      <sha1>atdbfl0wapujj7zl9m7enx51rh1lci3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/comment</title>
    <ns>0</ns>
    <id>5016</id>
    <revision>
      <id>75002</id>
      <parentid>74995</parentid>
      <timestamp>2015-01-02T16:30:28Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Notes */</comment>
      <text xml:space="preserve" bytes="2636">{{title|Comments}}
{{cpp/language/basics/navbar}}
Comments serve as a sort of in-code documentation. When inserted into a program, they are effectively ignored by the compiler; they are solely intended to be used as notes by the humans that read source code. Although specific documentation is not part of the C++ standard, several utilities exist that parse comments with different documentation formats.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|/*}} {{spar|comment}} {{ttb|*/}} }}
{{sdsc | num=2 | {{ttb|//}} {{spar|comment}}\n }}
{{sdsc end}}
@1@ Often known as &quot;C-style&quot; or &quot;multi-line&quot; comments.
@2@ Often known as &quot;C++-style&quot; or &quot;single-line&quot; comments.

All comments are removed from the program at [[cpp/language/translation phases|translation phase 3]] by replacing each comment with a single whitespace character.

===C-style===
C-style comments are usually used to comment large blocks of text, however, they can be used to comment single lines. To insert a C-style comment, simply surround text with {{tt|/*}} and {{tt|*/}}; this will cause the contents of the comment to be ignored by the compiler. Although it is not part of the C++ standard, {{tt|/**}} and {{tt|*/}} are often used to indicate documentation blocks; this is legal because the second asterisk is simply treated as part of the comment. C-style comments cannot be nested.

===C++-style===
C++-style comments are usually used to comment single lines, however, multiple C++-style comments can be placed together to form multi-line comments. C++-style comments tell the compiler to ignore all content between {{tt|//}} and a new line.

===Notes===
Because comments [[cpp/language/translation phases|are removed]] before the preprocessor stage, a macro cannot be used to form a comment and an unterminated C-style comment doesn't spill over from an #include'd file.

Besides commenting out, other mechanisms used for source code exclusion are
{{source|1=
#if 0
    std::cout &lt;&lt; &quot;this will not be executed or even compiled\n&quot;;
#endif
}}
and
{{source|1=
if(false) {
    std::cout &lt;&lt; &quot;this will not be executed\n&quot;
}
}}

===Example===
{{example|
|code=
/* C-style comments can contain
multiple lines */
/* or just one */

// C++-style comments can comment one line

// or, they can
// be strung together

int main()
{
  // The below code won't be run
  // return 1;

  // The below code will be run
  return 0;
}
}}

===See Also===
{{dsc begin}}
{{dsc see c | c/comment}}
{{dsc end}}

[[de:cpp/comment]]
[[es:cpp/comment]]
[[fr:cpp/comment]]
[[it:cpp/comment]]
[[ja:cpp/comment]]
[[ko:cpp/comment]]
[[pt:cpp/comment]]
[[ru:cpp/comment]]
[[zh:cpp/comment]]</text>
      <sha1>d2x9g3mdak5up37xe6cdpnwjfhaboiu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/comments</title>
    <ns>0</ns>
    <id>5442</id>
    <redirect title="cpp/comment" />
    <revision>
      <id>19802</id>
      <timestamp>2012-03-13T02:20:21Z</timestamp>
      <contributor>
        <username>Undeterminant</username>
        <id>421</id>
      </contributor>
      <comment>moved [[cpp/comments]] to [[cpp/comment]]: singular</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[cpp/comment]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/compiler support</title>
    <ns>0</ns>
    <id>13465</id>
    <revision>
      <id>92137</id>
      <parentid>91046</parentid>
      <timestamp>2017-04-06T15:22:54Z</timestamp>
      <contributor>
        <ip>212.204.94.234</ip>
      </contributor>
      <comment>add P0067R5 to C++17</comment>
      <text xml:space="preserve" bytes="53369">{{title|C++ compiler support}}
{{cpp/language/navbar}}
{{fmbox|text=This page is maintained as best-effort and may lag behind most recent compiler releases. If you see something is out-of-date, please help us by updating it!}}

__TOC__

The following table presents compiler support for new C++ features. These include C++11, C++14, C++17, and later accepted revisions to the standard, as well as various technical specifications.

&lt;div style=&quot;display: inline-block;&quot;&gt;
&lt;div style=&quot;display: inline-block;&quot;&gt;


== C++ 2017 features ==

{| class=&quot;wikitable tbody-scroll mw-collapsible&quot; style=&quot;font-size:0.8em; width:100%&quot;
|- style=&quot;height:15em&quot;
! style=&quot;width: 150pt;&quot; style=&quot;vertical-align:bottom;&quot; | C++ 2017 feature&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; | {{vertical|GCC}}
! style=&quot;width: 40pt;&quot; | {{vertical|Clang}}
! style=&quot;width: 40pt;&quot; | {{vertical|MSVC}}
! style=&quot;width: 40pt;&quot; | {{vertical|EDG eccp}}
! style=&quot;width: 40pt;&quot; | {{vertical|Intel C++}}
! style=&quot;width: 40pt;&quot; | {{vertical|IBM XLC++}}
! style=&quot;width: 40pt;&quot; | {{vertical|Sun/Oracle C++}}
! scope=&quot;col&quot; style=&quot;width: 40pt;&quot; | {{vertical|Embarcadero C++ Builder}}
! style=&quot;width: 40pt;&quot; | {{vertical|Cray}}
! style=&quot;width: 40pt;&quot; | {{vertical|Portland Group (PGI)}}
! style=&quot;width: 40pt;&quot; | {{vertical|HP aCC}}
! style=&quot;width: 40pt;&quot; | {{vertical|Digital Mars C++}}
{{compiler_support_row
| feature=New auto rules for direct-list-initialization 
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html N3922]
| version=c++17-lang
| clang={{yes|3.8}}
| gcc={{yes|5.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| icc={{yes|17.0}}
| edg={{yes|4.10.1}}
}}
{{compiler_support_row
| feature=static_assert with no message
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3928.pdf N3928]
| version=c++17-lang
| clang={{yes|2.5}}
| gcc={{yes|6}}
| msvc={{yes|1=&lt;span title=&quot;VS 2017&quot;&gt;19.1*&lt;/span&gt;}}
| edg={{yes|4.12}}
}}
{{compiler_support_row
| feature=typename in a template template parameter
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4051.html N4051]
| version=c++17-lang
| clang={{yes|3.5}}
| gcc={{yes|5.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| icc={{yes|17.0}}
| edg={{yes|4.10.1}}
}}
{{compiler_support_row
| feature=Removing trigraphs
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4086.html N4086]
| version=c++17-lang
| gcc={{yes|5.1}}
| clang={{yes|3.5}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010&quot;&gt;10.0*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Nested namespace definition
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html N4230]
| version=c++17-lang
| clang={{yes|3.6}}
| gcc={{yes|6}}
| icc={{yes|17.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015.3&quot;&gt;19.0*&lt;/span&gt;}}
| edg={{yes|4.12}}
}}
{{compiler_support_row
| feature=Attributes for namespaces and enumerators
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4266.html N4266]
| version=c++17-lang
| clang={{yes|3.6}}
| gcc={{yes|4.9 (namespaces) / 6 (enumerators)}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| edg={{yes|4.11}}
}}
{{compiler_support_row
| feature=u8 character literals
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4267.html N4267]
| version=c++17-lang
| clang={{yes|3.6}}
| gcc={{yes|6}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| icc={{yes|17.0}}
| edg={{yes|4.11}}
}}
{{compiler_support_row
| feature=Allow constant evaluation for all non-type template arguments
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4268.html N4268]
| version=c++17-lang
| clang={{yes|3.6}}
| gcc={{yes|6}}
}}
{{compiler_support_row
| feature=[[cpp/language/fold|Fold Expressions]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4295.html N4295]
| version=c++17-lang
| clang={{yes|3.6}}
| gcc={{yes|6}}
}}
{{compiler_support_row
| feature=Remove Deprecated Use of the register Keyword
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0001r1.html P0001R1]
| version=c++17-lang
| clang={{yes|3.8}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Remove Deprecated operator++(bool)
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0002r1.html P0002R1]
| version=c++17-lang
| clang={{yes|3.8}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Removing Deprecated Exception Specifications from C++17
| reference=[http://wg21.link/p0003r5 P0003R5]
| version=c++17-lang
| clang={{yes|4}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Make exception specifications part of the type system
| reference=[http://wg21.link/p0012r1 P0012R1]
| version=c++17-lang
| clang={{yes|4}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Aggregate initialization of classes with base classes
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0017r1.html P0017R1]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Lambda capture of *this
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0018r3.html P0018R3]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Using attribute namespaces without repetition
| reference=[http://wg21.link/p0028r4 P0028R4]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Dynamic memory allocation for over-aligned data
| reference=[http://wg21.link/p0035r4 P0035R4]
| version=c++17-lang
| gcc={{yes|7}}
| clang={{yes|4}}
}}
{{compiler_support_row
| feature=Unary fold expressions and empty parameter packs
| reference=[http://wg21.link/p0036r0 P0036R0]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|6}}
}}
{{compiler_support_row
| feature=[[cpp/preprocessor/include|{{lc|__has_include}}]] in preprocessor conditionals
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0061r1.html P0061R1]
| version=c++17-lang
| gcc={{yes|5.0}}
| clang={{yes}}
}}
{{compiler_support_row
| feature=Template argument deduction for class templates
| reference=[http://wg21.link/p0091r3 P0091R3]
| version=c++17-lang
| gcc={{yes|7}}
| clang={{yes|5}}
}}
{{compiler_support_row
| feature=Non-type template parameters with auto type
| reference=[http://wg21.link/p0127r2 P0127R2]
| version=c++17-lang
| clang={{yes|4}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Guaranteed copy elision
| reference=[http://wg21.link/p0135r1 P0135R1]
| version=c++17-lang
| clang={{yes|4}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=New specification for inheriting constructors (DR1941 et al)
| reference=[http://wg21.link/p0136r1 P0136R1]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Direct-list-initialization of enumerations
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0138r2.pdf P0138R2]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Stricter expression evaluation order
| reference=[http://wg21.link/p0145r3 P0145R3]
| version=c++17-lang
| gcc={{yes|7}}
| clang={{yes|4}}
}}
{{compiler_support_row
| feature=constexpr lambda expressions
| reference=[http://wg21.link/p0170r1 P0170R1]
| version=c++17-lang
| gcc={{yes|7}}
| clang={{yes|5}}
}}
{{compiler_support_row
| feature=Differing begin and end types in range-based for
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0184r0.html P0184R0]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|6}}
| msvc={{yes|1=&lt;span title=&quot;VS 2017&quot;&gt;19.1*&lt;/span&gt;}}
| edg={{yes|4.12}}
}}
{{compiler_support_row
| feature=&lt;nowiki&gt;[[&lt;/nowiki&gt;fallthrough]] attribute
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0188r1.pdf P0188R1]
| version=c++17-lang
| clang={{yes|3.9}}
| msvc={{yes|1=&lt;span title=&quot;VS 2017&quot;&gt;19.1*&lt;/span&gt;}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=&lt;nowiki&gt;[[&lt;/nowiki&gt;nodiscard]] attribute
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0189r1.pdf P0189R1]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Pack expansions in using-declarations
| reference=[http://wg21.link/p0195r2 P0195R2]
| version=c++17-lang
| clang={{yes|4}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=&lt;nowiki&gt;[[&lt;/nowiki&gt;maybe_unused]] attribute
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0212r1.pdf P0212R1]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Structured Bindings
| reference=[http://wg21.link/p0217r3 P0217R3]
| version=c++17-lang
| clang={{yes|4}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Hexadecimal floating-point literals
| reference=[http://wg21.link/p0245r1 P0245R1]
| version=c++17-lang
| clang={{yes}}
| gcc={{yes|3.0}}
}}
{{compiler_support_row
| feature=Ignore unknown attributes
| reference=[http://wg21.link/p0283r2 P0283R2]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes}}
}}
{{compiler_support_row
| feature=[[cpp/language/if|constexpr if]] statements
| reference=[http://wg21.link/p0292r2 P0292R2]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=init-statements for if and switch
| reference=[http://wg21.link/p0305r1 P0305R1]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Inline variables
| reference=[http://wg21.link/p0386r2 P0386R2]
| version=c++17-lang
| clang={{yes|3.9}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=DR: Matching of template template-arguments excludes compatible templates
| reference=[http://wg21.link/p0522r0 P0522R0]
| version=c++17-lang
| clang={{yes|4}}
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=[[cpp/error/uncaught_exception|std::uncaught_exceptions()]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4259 N4259]
| version=c++17
| gcc={{yes|6}}
| clang={{yes|3.7}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Splicing Maps and Sets
| reference=[http://wg21.link/p0083r3 P0083R3]
| version=c++17
| gcc={{yes|7}}
}}
{{compiler_support_row
| feature=Improving {{lc|std::pair}} and {{lc|std::tuple}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4387.html N4387]
| version=c++17
| icc={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015.2&quot;&gt;19.0*&lt;/span&gt;}}
| edg={{n/a}}
| gcc={{yes}}
| clang={{yes|4}}
}}
{{compiler_support_row
| feature={{lc|std::shared_mutex}} (untimed)
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4508.html N4508]
| version=c++17
| icc={{n/a}}
| gcc={{yes|6}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015.2 &amp; Windows 7&quot;&gt;19.0*&lt;/span&gt;}}
| edg={{n/a}}
| clang={{yes|3.7}}
}}
{{compiler_support_row
| feature=Elementary string conversions
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0067r5.html P0067R5]
| version=c++17
}}
|- style=&quot;height:15em&quot;
! style=&quot;vertical-align:bottom;&quot; | C++ feature&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! {{vertical|GCC}}
! {{vertical|Clang}}
! {{vertical|MSVC}}
! {{vertical|EDG eccp}}
! {{vertical|Intel C++}}
! {{vertical|IBM XLC++}}
! {{vertical|Sun/Oracle C++}}
! {{vertical|Embarcadero C++ Builder}}
! {{vertical|Cray}}
! {{vertical|Portland Group (PGI)}}
! {{vertical|HP aCC}}
! {{vertical|Digital Mars C++}}
|}

== C++ 2014 features ==

{| class=&quot;wikitable tbody-scroll mw-collapsible&quot; style=&quot;font-size:0.8em; width:100%&quot;
|- style=&quot;height:15em&quot;
! style=&quot;width: 150pt;&quot; style=&quot;vertical-align:bottom;&quot; | C++ 2014 feature&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; | {{vertical|GCC}}
! style=&quot;width: 40pt;&quot; | {{vertical|Clang}}
! style=&quot;width: 40pt;&quot; | {{vertical|MSVC}}
! style=&quot;width: 40pt;&quot; | {{vertical|EDG eccp}}
! style=&quot;width: 40pt;&quot; | {{vertical|Intel C++}}
! style=&quot;width: 40pt;&quot; | {{vertical|IBM XLC++}}
! style=&quot;width: 40pt;&quot; | {{vertical|Sun/Oracle C++}}
! style=&quot;width: 40pt;&quot; | {{vertical|Embarcadero C++ Builder}}
! style=&quot;width: 40pt;&quot; | {{vertical|Cray}}
! style=&quot;width: 40pt;&quot; | {{vertical|Portland Group (PGI)}}
! style=&quot;width: 40pt;&quot; | {{vertical|HP aCC}}
! style=&quot;width: 40pt;&quot; | {{vertical|Digital Mars C++}}
{{compiler_support_row
| feature=Tweaked wording for contextual conversions
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf N3323]
| version=c++14-lang
| gcc={{yes|4.9}}
| clang={{yes|3.4}}
| icc={{yes|16.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| edg={{yes|4.9}}
}}
{{compiler_support_row
| feature=Binary literals
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf N3472]
| version=c++14-lang
| icc={{yes|11.0}}
| gcc={{yes|4.3/4.9}}
| clang={{yes|2.9}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| edg={{yes|4.10}}
| sun={{yes|5.14}}
}}
{{compiler_support_row
| feature=decltype(auto), Return type deduction for normal functions
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html N3638]
| version=c++14-lang
| icc={{yes|15.0}}
| clang={{yes|3.3/3.4}}
| gcc={{yes|4.8/4.9}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| edg={{yes|4.9}}
}}
{{compiler_support_row
| feature=Initialized/Generalized lambda captures (init-capture)
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html N3648]
| version=c++14-lang
| gcc={{yes|4.5/4.9}}
| clang={{yes|3.4}}
| icc={{yes|15.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| pgi=?
| edg={{yes|4.10}}
}}
{{compiler_support_row
| feature=Generic (polymorphic) lambda expressions
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html N3649]
| version=c++14-lang
| gcc={{yes|4.9}}
| clang={{yes|3.4}}
| icc={{yes|16.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| pgi=?
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| edg={{yes|4.10}}
}}
{{compiler_support_row 
| feature=Variable templates
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf N3651]
| version=c++14-lang
| gcc={{yes|5.0}}
| icc={{yes|17.0}}&lt;!-- 17.0 release notes show this, but C++14 checklist doesn't --&gt;
| msvc={{yes|1=&lt;span title=&quot;VS 2015.2&quot;&gt;19.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| edg={{yes|4.11}}
}}
{{compiler_support_row
| feature=Extended constexpr
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html N3652]
| version=c++14-lang
| gcc={{yes|5}}
| clang={{yes|3.4}}
| icc={{yes|17.0}}&lt;!-- 17.0 release notes show this, but C++14 checklist doesn't --&gt;
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| edg={{yes|4.11}}
| msvc={{yes|1=&lt;span title=&quot;VS 2017&quot;&gt;19.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Member initializers and aggregates (NSDMI)
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html N3653]
| version=c++14-lang
| gcc={{yes|5}}
| clang={{yes|3.3}}
| icc={{yes|16.0}}
| edg={{yes|4.9}}
| sun={{yes|5.14}}
| msvc={{yes|1=&lt;span title=&quot;VS 2017&quot;&gt;19.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Clarifying memory allocation (avoiding/fusing allocations)
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3664.html N3664]
| version=c++14-lang
| gcc={{n/a}}
| clang={{yes|3.4}}
| icc={{no|}}
| msvc={{n/a}}
| edg={{n/a}}
}}
{{compiler_support_row 
| feature=Deprecated attribute
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html N3760]
| version=c++14-lang
| edg={{yes|4.9}}
| gcc={{yes|4.9}}
| icc={{yes|1=&lt;span title=&quot;Linux and OS X&quot;&gt;15.0*&lt;/span&gt;&lt;br/&gt;16.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| sun={{yes|5.14}}
}}
{{compiler_support_row
| feature=Sized deallocation
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3778.html N3778]
| version=c++14-lang
| gcc={{yes|5}}
| clang={{yes|3.4}}
| icc={{yes|17.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| edg={{yes|4.10.1}}
| sun={{yes|5.14}}
}}
{{compiler_support_row
| feature=Single quote as digit separator
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf N3781]
| version=c++14-lang
| gcc={{yes|4.9}}
| clang={{yes|3.4}}
| icc={{yes|16.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| edg={{yes|4.10}}
| sun={{yes|5.14}}
}}
{{compiler_support_row
| feature={{lc|std::result_of}} and SFINAE
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3462.html N3462]
| version=c++14
| gcc={{yes|5.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015.2&quot;&gt;19.0*&lt;/span&gt;}}
| embar={{yes}}
| clang={{yes}}
| edg={{n/a}}
| icc={{n/a}}
}}
{{compiler_support_row
| feature={{tt|constexpr}} for [[cpp/header/complex|{{tt|&lt;complex&gt;}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3302.html N3302]
| version=c++14
| gcc={{yes|5.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
| edg={{n/a}}
| icc={{n/a}}
}}
{{compiler_support_row
| feature={{tt|constexpr}} for [[cpp/header/chrono|{{tt|&lt;chrono&gt;}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3469.html N3469]
| version=c++14
| gcc={{yes|5.0}}
| icc={{n/a}}
| edg={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
}}
{{compiler_support_row
| feature={{tt|constexpr}} for [[cpp/header/array|{{tt|&lt;array&gt;}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3470.html N3470]
| version=c++14
| edg={{n/a}}
| icc={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
| gcc={{yes|5.0}}
}}
{{compiler_support_row
| feature={{tt|constexpr}} for [[cpp/header/initializer_list|{{tt|&lt;initializer_list&gt;}}]], [[cpp/header/utility|{{tt|&lt;utility&gt;}}]] and [[cpp/header/tuple|{{tt|&lt;tuple&gt;}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3471.html N3471]
| version=c++14
| edg={{n/a}}
| icc={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
| gcc={{yes|5.0}}
}}
{{compiler_support_row
| feature=Improved {{lc|std::integral_constant}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3545.pdf N3545]
| version=c++14
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| icc={{n/a}}
| clang={{yes|3.4}}
| gcc={{yes|5.0}}
| edg={{n/a}}
}}
{{compiler_support_row
| feature=User-defined literals for [[cpp/header/chrono|{{tt|&lt;chrono&gt;}}]] and [[cpp/header/string|{{tt|&lt;string&gt;}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3642.pdf N3642]
| version=c++14
| edg={{n/a}}
| icc={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
| gcc={{yes|5.0}}
}}
{{compiler_support_row
| feature=[[cpp/concept/ForwardIterator#Singular_iterators|Null forward iterators]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3644.pdf N3644]
| version=c++14
| edg={{n/a}}
| icc={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|1=&lt;span title=&quot;partial&quot;&gt;5.0*&lt;/span&gt;}}
| clang={{yes|3.4}}
}}
{{compiler_support_row
| feature={{lc|std::quoted}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3654.html N3654]
| version=c++14
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
| edg={{n/a}}
| icc={{n/a}}
}}
{{compiler_support_row
| feature=Heterogeneous associative lookup
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm N3657]
| version=c++14
| icc={{n/a}}
| edg={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
}}
{{compiler_support_row
| feature={{lc|std::integer_sequence}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3658.html N3658]
| version=c++14
| icc={{n/a}}
| edg={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
}}
{{compiler_support_row
| feature={{lc|std::shared_timed_mutex}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3659.html N3659]
| version=c++14
| icc={{n/a}}
| edg={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
}}
{{compiler_support_row
| feature={{lc|std::exchange}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3668.html N3668]
| version=c++14
| icc={{n/a}}
| edg={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
}}
{{compiler_support_row
| feature=fixing {{tt|constexpr}} member functions without {{tt|const}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3669.pdf N3669]
| version=c++14
| icc={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
| edg={{n/a}}
}}
{{compiler_support_row
| feature=[[cpp/utility/pair/get|{{lc|std::get&lt;T&gt;()}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3670.html N3670]
| version=c++14
| edg={{n/a}}
| icc={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
}}
{{compiler_support_row
| feature=Dual-Range {{lc|std::equal}}, {{lc|std::is_permutation}}, {{lc|std::mismatch}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3671.html N3671]
| version=c++14
| icc={{n/a}}
| edg={{n/a}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| gcc={{yes|5.0}}
| clang={{yes|3.4}}
}}
|- style=&quot;height:15em&quot;
! style=&quot;vertical-align:bottom;&quot; | C++ feature&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! {{vertical|GCC}}
! {{vertical|Clang}}
! {{vertical|MSVC}}
! {{vertical|EDG eccp}}
! {{vertical|Intel C++}}
! {{vertical|IBM XLC++}}
! {{vertical|Sun/Oracle C++}}
! {{vertical|Embarcadero C++ Builder}}
! {{vertical|Cray}}
! {{vertical|Portland Group (PGI)}}
! {{vertical|HP aCC}}
! {{vertical|Digital Mars C++}}
|}

== C++ 2011 features ==

{| class=&quot;wikitable tbody-scroll mw-collapsible&quot; style=&quot;font-size:0.8em; width:100%&quot;
|- style=&quot;height:15em&quot;
! style=&quot;width: 150pt;&quot; style=&quot;vertical-align:bottom;&quot; | C++ 2011 feature&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! style=&quot;width: 40pt;&quot; | {{vertical|GCC}}
! style=&quot;width: 40pt;&quot; | {{vertical|Clang}}
! style=&quot;width: 40pt;&quot; | {{vertical|MSVC}}
! style=&quot;width: 40pt;&quot; | {{vertical|EDG eccp}}
! style=&quot;width: 40pt;&quot; | {{vertical|Intel C++}}
! style=&quot;width: 40pt;&quot; | {{vertical|IBM XLC++}}
! style=&quot;width: 40pt;&quot; | {{vertical|Sun/Oracle C++}}
! style=&quot;width: 40pt;&quot; | {{vertical|Embarcadero C++ Builder}}
! style=&quot;width: 40pt;&quot; | {{vertical|Cray}}
! style=&quot;width: 40pt;&quot; | {{vertical|Portland Group (PGI)}}
! style=&quot;width: 40pt;&quot; | {{vertical|HP aCC}}
! style=&quot;width: 40pt;&quot; | {{vertical|Digital Mars C++}}
{{compiler_support_row
| feature=[[cpp/language/alignas|{{tt|alignas}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf N2341]
| version=c++11
| edg={{yes|4.8}}
| gcc={{yes|4.8}}
| icc={{yes|15.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{no|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row|-
| feature=[[cpp/language/alignof|{{tt|alignof}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf N2341]
| version=c++11
| edg={{yes|4.8}}
| gcc={{yes|4.5}}
| icc={{yes|15.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=[[cpp/atomic|Atomic operations]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html N2427]
| version=c++11
| edg={{yes|Yes}}
| gcc={{yes|4.4}}
| icc={{yes|13.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2012&quot;&gt;17.0*&lt;/span&gt;}}
| embar={{yes}}
| clang={{yes|3.1}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;'Linux only'&quot;&gt;13.1.2*&lt;/span&gt;}}
| sun={{yes|5.14}}
}}
{{compiler_support_row
| feature=[[cpp/language/auto|{{tt|auto}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf N1984(v1.0)]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|4.1(v0.9)}}
| gcc={{yes|4.4(v1.0)}}
| icc={{yes|11.0(v0.9)&lt;br/&gt;12.0(v1.0)}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010&quot;&gt;16.0 (v0.9)*&lt;/span&gt;}}
| ibm={{yes|11.1(v1.0)}}
| sun={{yes|5.13}}
| embar={{yes}}
| cray={{yes|8.4}}
| clang={{yes}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=C99 preprocessor
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm N1653]
|
| hp={{yes|A.06.25}}
| edg={{yes|4.1}}
| gcc={{yes|4.3}}
| icc={{yes|11.1}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015 partial (buggy variadic macros)&quot;&gt;19.0*&lt;/span&gt;}}
| ibm={{yes|10.1}}
| sun={{yes|5.9}}
| embar={{yes}}
| mars={{yes}}
| cray={{yes|8.4}}
| clang={{yes}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=[[cpp/language/constexpr|{{tt|constexpr}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf N2235]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.6}}
| gcc={{yes|4.6}}
| icc={{yes|1=&lt;span title=&quot;partial&quot;&gt;13.0*&lt;/span&gt;&lt;br/&gt;14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015(partial)&quot;&gt;19.0*&lt;/span&gt;}}
| ibm={{yes|1=&lt;span title=&quot;partial&quot;&gt;12.1*&lt;/span&gt;&lt;br/&gt;13.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.1}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=[[cpp/language/decltype|{{tt|decltype}}]]
| reference=v1.0: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf N2343]&lt;br/&gt;
v1.1: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf N3276]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|4.1(v1.0)}}
| gcc={{yes|4.3(v1.0)&lt;br/&gt;4.8.1(v1.1)}}
| icc={{yes|11.0(v1.0)&lt;br/&gt;12.0(v1.1)}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010&quot;&gt;16.0 (v1.1)*&lt;/span&gt;}}
| ibm={{yes|11.1(v1.0)}}
| sun={{yes|5.13}}
| embar={{yes}}
| mars={{yes|8.52(v1.0)}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Defaulted and deleted functions
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm N2346]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|4.1}}
| gcc={{yes|4.4}}
| icc={{yes|12.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| ibm={{yes|13.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=[[cpp/language/initializer_list#Delegating_constructor|Delegating constructors]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf N1986]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.7}}
| gcc={{yes|4.7}}
| icc={{yes|14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| ibm={{yes|11.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Explicit conversion operators
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf N2437]
| version=c++11
| hp={{yes|A.06.27}}
| edg={{yes|4.4}}
| gcc={{yes|4.5}}
| icc={{yes|13.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| ibm={{yes|12.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Extended {{c|friend}} declarations
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf N1791]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|4.1}}
| gcc={{yes|4.7}}
| icc={{yes|1=&lt;span title=&quot;partial&quot;&gt;11.1*&lt;/span&gt;&lt;br/&gt;12.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010(partial)&quot;&gt;16.0*&lt;/span&gt;}}
| ibm={{yes|11.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature={{c|extern template}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm N1987]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|3.9}}
| gcc={{yes|3.3}}
| icc={{yes|9.0}}
| msvc={{yes|1=&lt;span title=&quot;MSVC++ 6.0&quot;&gt;12.0*&lt;/span&gt;}}
| ibm={{yes|11.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Forward {{c|enum}} declarations
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf N2764]
| version=c++11
| edg={{yes|4.5}}
| gcc={{yes|4.6}}
| icc={{yes|1=&lt;span title=&quot;partial&quot;&gt;11.1*&lt;/span&gt;&lt;br/&gt;14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2012&quot;&gt;17.0*&lt;/span&gt;}}
| ibm={{yes|12.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.1}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Inheriting constructors
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm N2540]
| version=c++11
| edg={{yes|4.8}}
| gcc={{yes|4.8}}
| icc={{yes|15.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.3}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Initializer lists
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm N2672]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.5}}
| gcc={{yes|4.4}}
| icc={{yes|1=&lt;span title=&quot;partial&quot;&gt;13.0*&lt;/span&gt;&lt;br/&gt;14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.1}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=[[cpp/language/lambda|Lambda expressions]]
| reference=v0.9: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2550.pdf N2550] &lt;br/&gt;
v1.0: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2658.pdf N2658] &lt;br/&gt;
v1.1: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2927.pdf N2927]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|4.1(v1.1)}}
| gcc={{yes|4.5(v1.1)}}
| icc={{yes|12.0(v1.1)}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010(v1.0) VS 2012(v1.1)&quot;&gt;16.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.1}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Local and unnamed types as template parameters
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm N2657]
|
| hp={{yes|A.06.27}}
| edg={{yes|4.2}}
| gcc={{yes|4.5}}
| icc={{yes|12.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010&quot;&gt;16.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature={{c|long long}}
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf N1811]
| version=c++11
| hp={{yes}}
| edg={{yes}}
| gcc={{yes}}
| icc={{yes}}
| msvc={{yes}}
| ibm={{yes}}
| sun={{yes}}
| embar={{yes}}
| mars={{yes}}
| clang={{yes}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Inline namespaces
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm N2535]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.5}}
| gcc={{yes|4.4}}
| icc={{yes|14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| ibm={{yes|11.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=New character types
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html N2249]
| version=c++11
| hp={{yes|A.06.27}}
| edg={{yes|4.4}}
| gcc={{yes|4.4}}
| icc={{yes|1=&lt;span title=&quot;partial on Windows; yes on Linux and OS X&quot;&gt;12.1*&lt;/span&gt;&lt;br/&gt;14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| mars={{yes|8.52}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Trailing function return types
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm N2541]
| version=c++11
| hp={{yes|A.06.27}}
| edg={{yes|4.1}}
| gcc={{yes|4.4}}
| icc={{yes|12.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010&quot;&gt;16.0*&lt;/span&gt;}}
| ibm={{yes|12.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=[[cpp/language/nullptr|{{c|nullptr}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf N2431]
| version=c++11
| hp={{yes|A.06.27}}
| edg={{yes|4.2}}
| gcc={{yes|4.6}}
| icc={{yes|12.1}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010&quot;&gt;16.0*&lt;/span&gt;}}
| ibm={{yes|13.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| mars={{yes|8.52}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Unicode string literals
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm N2442]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.7}}
| gcc={{yes|4.4}}
| icc={{yes|1=&lt;span title=&quot;undocumented&quot;&gt;11.0*&lt;/span&gt;}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|5.7}}
| embar={{yes}}
| mars={{yes|8.52}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;AIX/Linux/xOS BE; partial, only UTF16,32&quot;&gt;10.1*&lt;/span&gt;&lt;br/&gt;&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Raw string literals
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm N2442]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.7}}
| gcc={{yes|4.5}}
| icc={{yes|14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| mars={{yes|8.52}}
| clang={{yes}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=User-defined literals
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf N2765]
| version=c++11
| edg={{yes|4.8}}
| gcc={{yes|4.7}}
| icc={{yes|15.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| embar={{yes}}
| clang={{yes|3.1}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| sun={{yes|5.14}}
}}
{{compiler_support_row
| feature=Right angle brackets
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html N1757]
| version=c++11
| edg={{yes|4.1}}
| gcc={{yes|4.3}}
| icc={{yes|11.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2005&quot;&gt;14.0*&lt;/span&gt;}}
| ibm={{yes|12.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=R-value references
| reference=v1.0: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html N2118]&lt;br/&gt;
v2.0: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2844.html N2844]&lt;br/&gt;
v2.1: [http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1138 N2844+]&lt;br/&gt;
v3.0: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html N3053]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|4.5(v3.0)}}
| gcc={{yes|4.3(v1.0)&lt;br/&gt;4.5(v2.1)&lt;br/&gt;4.6(v3.0)}}
| icc={{yes|11.1(v1.0)&lt;br/&gt;12.0(v2.0)&lt;br/&gt;14.0(v3.0)}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010(v2.0) VS 2012(v2.1) VS 2015(v3.0)&quot;&gt;16.0*&lt;/span&gt;}}
| ibm={{yes|12.1(v2.1)}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=[[cpp/language/static_assert|{{c|static_assert}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html N1720]
| version=c++11 
| hp={{yes|A.06.25}}
| edg={{yes|4.1}}
| gcc={{yes|4.3}}
| icc={{yes|11.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010&quot;&gt;16.0*&lt;/span&gt;}}
| ibm={{yes|11.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| mars={{yes|8.52}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=[[cpp/language/enum#Scoped_enumerations|Strongly-typed {{c|enum}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf N2347]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|4.0}}
| gcc={{yes|4.4}}
| icc={{yes|13.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2012&quot;&gt;17.0*&lt;/span&gt;}}
| ibm={{yes|12.1}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Template aliases
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf N2258]
| version=c++11
| hp={{yes|A.06.27}}
| edg={{yes|4.2}}
| gcc={{yes|4.7}}
| icc={{yes|12.1}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE; non-debug&quot;&gt;13.1.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Thread-local storage
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm N2659]
| version=c++11
| edg={{yes|4.8}}
| gcc={{yes|1=&lt;span title=&quot;partial&quot;&gt;4.4*&lt;/span&gt;&lt;br/&gt;4.8}}
| icc={{yes|1=&lt;span title=&quot;partial&quot;&gt;11.1*&lt;/span&gt;&lt;br/&gt;&lt;span title=&quot;Linux and OS X&quot;&gt;15.0*&lt;/span&gt;}}
| msvc={{yes|1=&lt;span title=&quot;VS 2010(partial) VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|1=&lt;span title=&quot;partial&quot;&gt;5.9*&lt;/span&gt;}}
| embar={{yes}}
| mars={{yes|1=&lt;span title=&quot;partial&quot;&gt;8.52*&lt;/span&gt;}}
| clang={{yes|1=&lt;span title=&quot;partial&quot;&gt;3.3*&lt;/span&gt;&lt;br/&gt;3.3}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;AIX/Linux/zOS BE; (partial, all except Std name and dynamic init)&quot;&gt;10.1*&lt;/span&gt;&lt;br/&gt;&lt;span title=&quot;Linux LE / zLinux BE; (partial, all except Std name and dynamic init)&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Unrestricted unions
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf N2544]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.6}}
| gcc={{yes|4.6}}
| icc={{yes|1=&lt;span title=&quot;Linux and OS X&quot;&gt;14.0*&lt;/span&gt;}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Type traits
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf N1836]
| version=c++11
| hp={{yes|6.16}}
| edg={{yes|4.0}}
| gcc={{yes|4.3}}
| icc={{yes|10.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2005&quot;&gt;14.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|13.1.3}}
}}
{{compiler_support_row
| feature=Variadic templates
| reference=v0.9: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf N2242]&lt;br/&gt;
v1.0: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf N2555]
| version=c++11
| hp={{yes|A.06.27}}
| edg={{yes|4.1(v0.9)}}
| gcc={{yes|4.3(v0.9)&lt;br/&gt;4.4(v1.0)}}
| icc={{yes|12.1(v1.0)}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| ibm={{yes|11.1(v0.9)}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9(v1.0)}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
}}
{{compiler_support_row
| feature=Range-for loop
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html N2930]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.5}}
| gcc={{yes|4.6}}
| icc={{yes|13.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2012&quot;&gt;17.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE; non-debug&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=[[cpp/language/override|{{c|override}}]] and [[cpp/language/final|{{c|final}}]]
| reference=v0.8: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2928.htm N2928]&lt;br/&gt;
v0.9: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm N3206]&lt;br/&gt;
v1.0: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm N3272] 
| version=c++11
| edg={{yes|4.8(v1.0)}}
| gcc={{yes|4.7}}
| icc={{yes|12.0(v0.8)&lt;br/&gt;14.0(v1.0)}}
| msvc={{yes|1=&lt;span title=&quot;VS 2005(partial) VS 2012&quot;&gt;17.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Attributes
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf N2761]
| version=c++11
| hp={{yes|A.06.27}}
| edg={{yes|4.2}}
| gcc={{yes|4.8}}
| icc={{yes|12.1}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.3}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE; except carries_dependency&quot;&gt;13.1.1*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=ref-qualifiers
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm N2439]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.7}}
| gcc={{yes|4.8.1}}
| icc={{yes|14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| sun={{yes|5.13}}
}}
{{compiler_support_row
| feature=Non-static data member initializers
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2756.htm N2756]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.6}}
| gcc={{yes|4.7}}
| icc={{yes|14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2013&quot;&gt;18.0*&lt;/span&gt;}}
| sun={{yes|5.13}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
}}
{{compiler_support_row
| feature=Dynamic initialization and destruction with concurrency ([[cpp/language/storage_duration#Static_local_variables|magic statics]])
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm N2660]
| version=c++11
| hp={{yes|A.06.25}}
| edg={{yes|Yes}}
| gcc={{yes|4.3}}
| icc={{yes|1=&lt;span title=&quot;Linux and OS X&quot;&gt;11.1*&lt;/span&gt;}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| embar={{yes}}
| clang={{yes|2.9}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.2*&lt;/span&gt;}}
| sun={{yes|5.13}}
}}
{{compiler_support_row 
| feature=[[cpp/language/noexcept_spec|{{c|noexcept}}]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html N3050]
| version=c++11
| hp={{yes|A.06.28}}
| edg={{yes|4.5}}
| gcc={{yes|4.6}}
| icc={{yes|14.0}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| embar={{yes}}
| clang={{yes|3.0}}
| cray={{yes|8.4}}
| pgi={{yes|2015}}
| ibm={{yes|1=&lt;span title=&quot;Linux LE / zLinux BE&quot;&gt;13.1.1*&lt;/span&gt;}}
| sun={{yes|5.13}}
}}
{{compiler_support_row 
| feature=[[cpp/memory#Garbage_collector_support|dynamic pointer safety (GC interface)]]
| reference=[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm n2670]
| version=c++11
| hp={{no|}}
| edg={{no|}}
| gcc={{no|}}
| icc={{no|}}
| msvc={{no|}}
| embar={{no|}}
| clang={{no|}}
| cray={{no|}}
| pgi={{no|}}
| ibm={{no|}}
| sun={{no|}}
}}
{{compiler_support_row 
| feature=[[cpp/io/manip|Money, Time, and hexfloat I/O manipulators]]
| reference=[]
| version=c++11
| hp={{no|}}
| edg={{no|}}
| gcc={{yes|5.1}}
| icc={{no|}}
| msvc={{yes|1=&lt;span title=&quot;VS 2015&quot;&gt;19.0*&lt;/span&gt;}}
| embar={{no|}}
| clang={{yes|3.8}}
| cray={{no|}}
| pgi={{no|}}
| ibm={{no|}}
| sun={{no|}}
}}
|- style=&quot;height:15em&quot;
! style=&quot;vertical-align:bottom;&quot; | C++ feature&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! {{vertical|GCC}}
! {{vertical|Clang}}
! {{vertical|MSVC}}
! {{vertical|EDG eccp}}
! {{vertical|Intel C++}}
! {{vertical|IBM XLC++}}
! {{vertical|Sun/Oracle C++}}
! {{vertical|Embarcadero C++ Builder}}
! {{vertical|Cray}}
! {{vertical|Portland Group (PGI)}}
! {{vertical|HP aCC}}
! {{vertical|Digital Mars C++}}
|}


== C++ Post-2017 ==

{| class=&quot;wikitable tbody-scroll mw-collapsible&quot; style=&quot;font-size:0.8em; width:100%&quot;
|- style=&quot;height:15em&quot;
! style=&quot;vertical-align:bottom;&quot; | C++ Post-2017 feature&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! {{vertical|GCC}}
! {{vertical|Clang}}
! {{vertical|MSVC}}
! {{vertical|EDG eccp}}
! {{vertical|Intel C++}}
! {{vertical|IBM XLC++}}
! {{vertical|Sun/Oracle C++}}
! {{vertical|Embarcadero C++ Builder}}
! {{vertical|Cray}}
! {{vertical|Portland Group (PGI)}}
! {{vertical|HP aCC}}
! {{vertical|Digital Mars C++}}
|- style=&quot;height:15em&quot;
! style=&quot;vertical-align:bottom;&quot; | C++ feature&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Paper(s)&lt;br/&gt;&amp;nbsp;
! style=&quot;vertical-align:bottom;&quot; | Version&lt;br/&gt;&amp;nbsp;
! {{vertical|GCC}}
! {{vertical|Clang}}
! {{vertical|MSVC}}
! {{vertical|EDG eccp}}
! {{vertical|Intel C++}}
! {{vertical|IBM XLC++}}
! {{vertical|Sun/Oracle C++}}
! {{vertical|Embarcadero C++ Builder}}
! {{vertical|Cray}}
! {{vertical|Portland Group (PGI)}}
! {{vertical|HP aCC}}
! {{vertical|Digital Mars C++}}
|}
&lt;/div&gt;&lt;/div&gt;
''*'' - hover over the version number to see notes


===References===
Individual vendor compatibility checklists (these are more up-to-date than the table above)
* GCC (Updated 2016-06)
:* [https://gcc.gnu.org/gcc-6/changes.html GCC 6 release notes]
:* [https://gcc.gnu.org/gcc-4.8/cxx0x_status.html C++11 core language support status] (complete as of 4.8.1)
:* [https://gcc.gnu.org/projects/cxx1y.html C++14 core language support status] (complete as of 5.0)
:* [https://gcc.gnu.org/projects/cxx1z.html C++17 core language support status]
:* [https://gcc.gnu.org/projects/cxx-status.html C++ core language support status] (supersedes the above version-specific pages)
:* [https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x C++11 library support status] (complete as of 5.0)
:* [https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014 C++14 library support status] (complete as of 5.0)
:* [https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#table.ts_status Technical Specifications support status]
:* [https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.201z C++17 library support status]
* Clang++ (Updated 2016-06)
:* [http://clang.llvm.org/cxx_status.html#cxx11 C++11 core language support status] (complete as of 3.3)
:* C++11 library support status (complete as of [https://github.com/llvm-mirror/libcxx/commit/5fec82dc0db3623546038e4a86baa44f749e554f#diff-c330060c0d4b6fb493c2be0ff80a3f7e 2012-07-29])
:* [http://clang.llvm.org/cxx_status.html#cxx14 C++14 core language support status] (complete as of 3.4)
:* [http://libcxx.llvm.org/cxx1y_status.html C++14 library support status] (complete as of 3.5)
:* [http://clang.llvm.org/cxx_status.html#ts Technical Specifications support status]
:* [http://clang.llvm.org/cxx_status.html#cxx17 C++17 core language support status]
:* [http://clang.llvm.org/cxx_dr_status.html Core language defect report status]
:* [http://libcxx.llvm.org/cxx1z_status.html C++17 library support status]
* Microsoft Visual Studio (updated 2016-06)
:* C++11/C++14/C++17 core language support status
::* [http://msdn.microsoft.com/en-us/library/hh567368.aspx#featurelist C++11/14/17 core language support status in VS2010, VS2012, VS2013, and VS2015]
::* [http://blogs.msdn.com/b/vcblog/archive/2013/12/02/c-11-14-core-language-features-in-vs-2013-and-the-nov-2013-ctp.aspx VS2013 vs. VS2015 CTP0]
::* [http://blogs.msdn.com/b/vcblog/archive/2014/06/11/c-11-14-feature-tables-for-visual-studio-14-ctp1.aspx VS2013 vs. VS2015 CTP1]
::* [http://blogs.msdn.com/b/vcblog/archive/2014/08/21/c-11-14-features-in-visual-studio-14-ctp3.aspx VS2013 vs. VS2015 CTP3] (includes the roadmap table)
::* [http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx VS2015 (&quot;VS14&quot;) preview]
::* [http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx VS2015 (&quot;VS14&quot;) release candidate] (C++11 remains incomplete, but C++17 support appears)
::* [https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance VS2017]
:* [http://msdn.microsoft.com/en-us/library/hh567368.aspx#stl C++11 and C++14 library support status]
:* [http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx C++11/14/17 Features In VS 2015 RTM] including core language and standard library (including technical specifications)
:* [http://blogs.msdn.com/b/vcblog/archive/2016/01/22/vs-2015-update-2-s-stl-is-c-17-so-far-feature-complete.aspx C++14/17 features in VS 2015 Update 2 standard library] library is feature complete up to current C++17 with few minor issues (some defect reports, some constexprs, etc)
:* [https://blogs.msdn.microsoft.com/vcblog/2016/10/11/c1417-features-and-stl-fixes-in-vs-15-preview-5/ C++14/17 Features and STL Fixes in VS “15” Preview 5] including a detailed C++17 status table
* Intel C++ (Updated 2016-06)
:* [https://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler C++11 core language support status] (complete as of 15.0)
:* [https://software.intel.com/en-us/articles/c14-features-supported-by-intel-c-compiler C++14 core language support status] (functionally complete as of 17.0 - N3664 is an optimization)
:* [https://software.intel.com/en-us/articles/c17-features-supported-by-intel-c-compiler C++17 core language support status] (incomplete)
:* Intel does not ship an implementation of the C++ standard library
* EDG (Updated 2016-01)
:* [https://www.edg.com/features.html C++11 core language support status]
:* [https://www.edg.com/cpp14_features.html C++14 core language support status]
:* [https://www.edg.com/cpp17_features.html C++17 core language support status]
:* EDG does not ship an implementation of the C++ standard library
* Oracle C++ (updated 2016-01)
:* [http://docs.oracle.com/cd/E37069_01/html/E37071/gncix.html C++11 core language support status]
::* [https://docs.oracle.com/cd/E60778_01/html/E60742/gkeza.html#scrolltoc Missing C++11 support added in 5.14 (page has a typo, and still says 5.13)]
:* [https://docs.oracle.com/cd/E60778_01/html/E60742/gncix.html#scrolltoc C++14 features added in 5.14]
:* Oracle ships three implementations of the C++ standard library:
::* libCstd (RogueWave Standard Library version 2), predates C++98
::* stlport4 (STLport Standard Library version 4.5.3), predates C++03
::* stdcxx4 (Apache Standard Library version 4), predates C++11
* IBM XL C++ (updated 2015-12)
:* [http://www-01.ibm.com/support/knowledgecenter/SSGH3R_13.1.0/com.ibm.xlcpp131.aix.doc/language_ref/cpp0x_exts.html?lang=en C++11 core language support status]  (v 13.1 for AIX)
:* IBM ships [http://www-01.ibm.com/support/knowledgecenter/SSGH3R_13.1.0/com.ibm.xlcpp131.aix.doc/standlib/header_files.html?lang=en  a version of Dinkumware library] for AIX with full support for C++ TR1, including &lt;regex&gt;, but no C++11
:* [http://www-01.ibm.com/support/knowledgecenter/SSXVZZ_13.1.1/com.ibm.xlcpp1311.lelinux.doc/language_ref/standard_features.html?lang=en C++11 core language support status] (v 13.1.1 for Linux)
:* IBM does not ship an implementation of C++ standard library for Linux (uses GNU libstdc++)
:* [https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/What_new_C_11_language_features_you_will_get_by_using_the_latest_XL_C_C_V13_1_2_and_a_sneak_peak_at_C_14?lang=en C++11/C++14 core language support status] (v 13.1.2 for Little Endian Linux / zLinux Big Endian)
* HP aCC
:* [http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=887a551fac19b410VgnVCM200000a460ea10RCRD C++11 core language support status]
:* HP ships a version of RogueWave STL 2.0 implementation of the C++98 standard library
* Digital Mars C++
:* [http://www.digitalmars.com/ctg/CPP0x-Language-Implementation.html C++11 core language support status]
* Embarcadero C++
:* [http://docwiki.embarcadero.com/RADStudio/Berlin/en/C%2B%2B11_Language_Features_Compliance_Status C++11 core language support status] (C++ Builder 10.1 Berlin for Windows 32/64, iOS and Android clang-enhanced compilers) [http://docwiki.embarcadero.com/RADStudio/Berlin/en/Clang-enhanced_C%2B%2B_Compilers]
* Cray (updated 2015-12)
:* [http://docs.cray.com/books/S-2179-84/S-2179-84.pdf] For version 8.4, claims all of C++11 is supported except alignas
* Portland Group (PGI) (updated 2016-07)
:* [http://www.pgroup.com/doc/pgirn.pdf Release notes for 2016] claim C++14 support, except &quot;generalized constexpr and constexpr member functions and implicit const, variable templates, clarifying memory allocation (merged allocation)&quot;</text>
      <sha1>gxxetxy0olopn8aznrqsqqbmqt366vz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept</title>
    <ns>0</ns>
    <id>2427</id>
    <revision>
      <id>88584</id>
      <parentid>86194</parentid>
      <timestamp>2016-11-28T14:42:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>included ranges TS in the intro paragarph (as a redlink for now)</comment>
      <text xml:space="preserve" bytes="10720">{{title|Library Concepts}}
{{cpp/concept/navbar}}

''Concept'' is a term that describes a '''named set of requirements''' for a type. 

[[cpp/language/constraints|Formal specification of concepts]] (ISO/IEC TS 19217:2015) is an experimental technical specification, which makes it possible to verify that template arguments satisfy the expectations of a template or function during [[cpp/language/overload_resolution|overload resolution]] and [[cpp/language/template_specialization|template specialization]].

The ''library concepts'' listed on this page are the named requirements used in the normative text of the C++ standard to define the expectations of the standard library. These requirements are being formalized using the facilities of the above-mentioned technical specification as part of [[cpp/experimental/ranges|Ranges TS]]. It is expected that a future version of the C++ standard library will include those formal definitions. Until then, the burden is on the programmer to ensure that library templates are instantiated with template arguments that satisfy these requirements. Failure to do so may result in very complex compiler diagnostics.

{{dsc begin}}
{{dsc h1 | Basic}}
{{dsc concept | cpp/concept/DefaultConstructible | specifies that an object of the type can be default constructed}}
{{dsc concept | cpp/concept/MoveConstructible | specifies that an object of the type can be constructed from rvalue | notes={{mark c++11}}}}
{{dsc concept | cpp/concept/CopyConstructible | specifies that an object of the type can be constructed from lvalue}}
{{dsc concept | cpp/concept/MoveAssignable | specifies that an object of the type can be assigned from rvalue| notes={{mark c++11}}}}
{{dsc concept | cpp/concept/CopyAssignable | specifies that an object of the type can be assigned from lvalue}}
{{dsc concept | cpp/concept/Destructible | specifies that an object of the type can be destroyed}}

{{dsc h1 | Layout}}
{{dsc | Note, that the standard does not define named requirements or concepts with names specified in this subcategory. &lt;br&gt;These are type categories defined by the core language. They are included here as concepts only for consistency.}}
{{dsc concept | cpp/concept/TriviallyCopyable | class with trivial copy, assignment and destructor | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/TrivialType | class with trivial constructors, assignment and destructor | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/StandardLayoutType | non-virtual class containing only other StandardLayout members, all with the same access control | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/PODType | POD (Plain Old Data) structure, compatible with C {{c|struct}}  }}

{{dsc h1 | Library-wide}}
{{dsc concept | cpp/concept/EqualityComparable | {{tt|operator{{==}}}} is an equivalence relation}}
{{dsc concept | cpp/concept/LessThanComparable | {{tt|operator&lt;}} is a strict weak ordering relation}}
{{dsc concept | cpp/concept/Swappable| can be swapped with an unqualified non-member function call {{c|swap()}} | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/ValueSwappable| an {{concept|Iterator}} that dereferences to a {{concept|Swappable}} type | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/NullablePointer| a pointer-like type supporting a null value | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/Hash | a {{concept|FunctionObject}} that for inputs with different values has a low probability of giving the same output | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/Allocator| a class type that contains allocation information}}
{{dsc concept | cpp/concept/FunctionObject | an object that can be called with the function call syntax}}
{{dsc concept | cpp/concept/Callable | a type for which the invoke operation is defined}}
{{dsc concept | cpp/concept/Predicate | a {{concept|FunctionObject}} that returns a value convertible to {{c|bool}} for one argument without modifying it}}
{{dsc concept | cpp/concept/BinaryPredicate | a {{concept|FunctionObject}} that returns a value convertible to {{c|bool}} for two arguments without modifying them}}
{{dsc concept | cpp/concept/Compare | a {{concept|BinaryPredicate}} that establishes an ordering relation}}
{{dsc end}}
{{dsc begin}}
{{dsc h1 | Container}}
{{dsc concept | cpp/concept/Container | data structure that allows element access using iterators }}
{{dsc concept | cpp/concept/ReversibleContainer | container using bidirectional iterators }}
{{dsc concept | cpp/concept/AllocatorAwareContainer | container using an allocator | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/SequenceContainer | container with elements stored linearly }}
{{dsc concept | cpp/concept/ContiguousContainer | container with elements stored at adjacent memory addresses | notes={{mark c++17}} }}
{{dsc concept | cpp/concept/AssociativeContainer | container that stores elements by associating them to keys }}
{{dsc concept | cpp/concept/UnorderedAssociativeContainer | container that stores elements stored in buckets by associating them to keys | notes={{mark c++11}} }}
{{dsc h2 | Container element}}
{{dsc concept | cpp/concept/DefaultInsertable| element can be default-constructed in uninitialized storage | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/CopyInsertable| element can be copy-constructed in uninitialized storage | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/MoveInsertable| element can be move-constructed in uninitialized storage | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/EmplaceConstructible| element can be constructed in uninitialized storage | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/Erasable| element can be destroyed using an allocator | notes={{mark c++11}} }}

{{dsc h1 | Iterator}}
{{dsc concept | cpp/concept/Iterator | general concept to access data within some data structure }}
{{dsc concept | cpp/concept/InputIterator | iterator that can be used to read data }}
{{dsc concept | cpp/concept/OutputIterator | iterator that can be used to write data }}
{{dsc concept | cpp/concept/ForwardIterator | iterator that can be used to read data multiple times}}
{{dsc concept | cpp/concept/BidirectionalIterator | iterator that can be both incremented and decremented }}
{{dsc concept | cpp/concept/RandomAccessIterator | iterator that can be advanced in constant time }}
{{dsc concept | cpp/concept/ContiguousIterator | iterator to contiguously-allocated elements |notes={{mark c++17}} }}
{{dsc h1 | Stream I/O functions }}
&lt;!-- 27.7.2.3[istream.unformatted]/1 --&gt;
{{dsc concept | cpp/concept/UnformattedInputFunction | a stream input function that does not skip leading whitespace and counts the processed characters}}
&lt;!-- 27.7.2.2.1[istream.formatted.reqmts] --&gt;
{{dsc concept | cpp/concept/FormattedInputFunction  | a stream input function that skips leading whitespace}}
&lt;!-- 27.7.3.7[ostream.unformatted]/1 --&gt;
{{dsc concept | cpp/concept/UnformattedOutputFunction | a basic stream output function }}
&lt;!-- 27.7.3.6.1[ostream.formatted.reqmts] --&gt;
{{dsc concept | cpp/concept/FormattedOutputFunction | a stream output function that sets failbit on errors and returns a reference to the stream}}

{{dsc h1 | Random Number Generation}}
{{dsc concept | cpp/concept/SeedSequence | consumes a sequence of integers and produces a sequence of 32-bit unsigned values | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/UniformRandomBitGenerator | returns uniformly distributed random unsigned integers | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/RandomNumberEngine | a deterministic {{concept|UniformRandomBitGenerator}}, defined by the seed | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/RandomNumberEngineAdaptor | a {{concept|RandomNumberEngine}} that transforms the output of another {{concept|RandomNumberEngine}} | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/RandomNumberDistribution | returns random numbers distributed according to a given mathematical probability density function | notes={{mark c++11}} }}

{{dsc h1 | Concurrency}}
{{dsc concept | cpp/concept/BasicLockable | provides exclusive ownership semantics for execution agents (i.e. threads) | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/Lockable | a {{concept|BasicLockable}} that supports attempted lock acquisition | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/TimedLockable | a {{concept|Lockable}} that supports timed lock acquisition | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/Mutex | a {{concept|Lockable}} that protects against data races and sequentially consistent synchronization | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/TimedMutex | a {{concept|TimedLockable}} that protects against data races and sequentially consistent synchronization | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/SharedMutex | a {{concept|Mutex}} that supports shared ownership semantics | notes={{mark c++17}} }}
{{dsc concept | cpp/concept/SharedTimedMutex | a {{concept|TimedMutex}} that supports shared ownership semantics | notes={{mark c++14}} }}

{{dsc h1 | Other}}
{{dsc concept | cpp/concept/UnaryTypeTrait | describes a property of a type | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/BinaryTypeTrait | describes a relationship  between two types |  notes={{mark c++11}} }}
{{dsc concept | cpp/concept/TransformationTrait | modifies a property of a type | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/Clock | aggregates a duration, a time point, and a function to get the current time point | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/TrivialClock | a {{concept|Clock}} that does not throw exceptions | notes={{mark c++11}} }}
{{dsc concept | cpp/concept/CharTraits | defines types and functions for a character type}}
{{dsc concept | cpp/concept/pos_type | represents a position in a stream }}
{{dsc concept | cpp/concept/off_type | represents an offset in a stream }}
{{dsc concept | cpp/concept/BitmaskType | bitset, integer, or enumeration}} &lt;!-- $17.5.2.1.3[bitmask types] --&gt;
{{dsc concept | cpp/concept/NumericType | a type for which initialization is effectively equal to assignment }} &lt;!-- C++98/03 §26.1[lib.numeric.requirements], C++11/14 §26.2[numeric.requirements] --&gt;
{{dsc concept | cpp/concept/RegexTraits | defines types and functions used by the [[cpp/regex|regular expressions library]] | notes={{mark c++11}}}} &lt;!-- C++11/14 §28.3[re.req] --&gt;
{{dsc concept | cpp/concept/LiteralType | a type with constexpr constructor | notes={{mark c++11}} }}

{{dsc end}}


{{todo|Any other missing concept?}}

[[ar:cpp/concept]]
[[de:cpp/concept]]
[[es:cpp/concept]]
[[fr:cpp/concept]]
[[it:cpp/concept]]
[[ja:cpp/concept]]
[[pt:cpp/concept]]
[[ru:cpp/concept]]
[[zh:cpp/concept]]</text>
      <sha1>ayydcqc6ift38h0vumfuefj96yl6uie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Allocator</title>
    <ns>0</ns>
    <id>9133</id>
    <revision>
      <id>91893</id>
      <parentid>91265</parentid>
      <timestamp>2017-03-31T20:00:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="12801">{{cpp/concept/title|Allocator}}
{{cpp/concept/navbar}}

Encapsulates strategies for access/addressing, allocation/deallocation and construction/destruction of objects.

Every standard library component that may need to allocate or release storage, from {{tt|std::string}}, {{tt|std::vector}}, and every container except {{tt|std::array}}, to {{tt|std::shared_ptr}} and {{tt|std::function}}, does so through an {{concept|Allocator}}: an object of a class type that satisfies the following requirements.

Some requirements are optional: the template {{lc|std::allocator_traits}} supplies the default implementations for all optional requirements, and all standard library containers and other allocator-aware classes access the allocator through {{tt|std::allocator_traits}}, not directly.

===Requirements===

Given
* {{tt|T}}, a cv-unqualified object type
* {{tt|A}}, an Allocator type for type {{tt|T}}
* {{tt|a}}, an object of type {{tt|A}}
* {{tt|B}}, the corresponding Allocator type for some cv-unqualified object type {{tt|U}} (as obtained by rebinding {{tt|A}})
* {{tt|ptr}}, a value of type {{tt|allocator_traits&lt;A&gt;::pointer}}, obtained by calling {{c|allocator_traits&lt;A&gt;::allocate()}}
* {{tt|cptr}}, a value of type {{tt|allocator_traits&lt;A&gt;::const_pointer}}, obtained by conversion from {{tt|ptr}}
* {{tt|vptr}}, a value of type {{tt|allocator_traits&lt;A&gt;::void_pointer}}, obtained by conversion from {{tt|ptr}}
* {{tt|cvptr}}, a value of type {{tt|allocator_traits&lt;A&gt;::const_void_pointer}}, obtained by conversion from {{tt|cptr}} or from {{tt|vptr}}
* {{tt|xptr}}, a dereferencable pointer to some cv-unqualified object type {{tt|X}},
* {{tt|r}}, an lvalue of type {{tt|T}} obtained by the expression {{c|*ptr}}
* {{tt|n}}, a value of type {{tt|allocator_traits&lt;A&gt;::size_type}}

{|table class=wikitable
|-
!Expression||Requirements||Return type
|-
| {{c|A::pointer}} {{mark|optional}}
| Satisfies {{concept|NullablePointer}}, {{concept|RandomAccessIterator}}, and {{concept|ContiguousIterator}}{{mark unreviewed dr|LWG|2794}} (see [[#Fancy_pointers|fancy pointers]] below)
|
|-
| {{c|A::const_pointer}} {{mark|optional}}
| {{tt|A::pointer}} is convertible to {{tt|A::const_pointer}}. Satisfies {{concept|NullablePointer}}, {{concept|RandomAccessIterator}}, and {{concept|ContiguousIterator}}
|
|-
| {{c|A::void_pointer}} {{mark|optional}}
| {{tt|A::pointer}} is convertible to {{tt|A::void_pointer}}
{{tt|B::void_pointer}} and {{tt|A::void_pointer}} are the same type. Satisfies {{concept|NullablePointer}}
|
|-
| {{c|A::const_void_pointer}} {{mark|optional}}
| {{tt|A::pointer}}, {{tt|A::const_pointer}}, and {{tt|A::void_pointer}} are convertible to {{tt|A::const_void_pointer}}
{{tt|B::const_void_pointer}} and {{tt|A::const_void_pointer}} are the same type. Satisfies {{concept|NullablePointer}}
|
|-
| {{c|A::value_type}}
| 
| the type {{tt|T}}
|-
| {{c|A::size_type}} {{mark|optional}}
| {{tt|A::size_type}} can represent the size of the largest object {{tt|A}} can allocate
| unsigned integer type
|-
| {{c|A::difference_type}} {{mark|optional}}
| {{tt|A::difference_type}} can represent the difference of any two pointers to the objects allocated by {{tt|A}}
| signed integer type
|-
| {{c|A::template rebind&lt;U&gt;::other}} {{mark|optional[1]}}
| for any {{tt|U}}, {{tt|B::template rebind&lt;T&gt;::other}} is {{tt|A}}
| the type {{tt|B}}
|-
| {{c|*ptr}}
| 
| {{tt|T&amp;}}
|-
| {{c|*cptr}}
| {{c|*cptr}} and {{c|*ptr}} identify the same object
| {{tt|const T&amp;}}
|-
| {{c|ptr-&gt;m}}
| same as {{c|(*ptr).m}}, if {{c|(*ptr).m}} is well-defined
| the type of {{tt|T::m}}
|-
| {{c|cptr-&gt;m}}
| same as {{c|(*cptr).m}}, if {{c|(*cptr).m}} is well-defined
| the type of {{tt|T::m}}
|-
| {{c|static_cast&lt;A::pointer&gt;(vptr)}}
| {{c|1=static_cast&lt;A::pointer&gt;(vptr) == ptr}}
| {{tt|A::pointer}}
|-
| {{c|static_cast&lt;A::const_pointer&gt;(cvptr)}}
| {{c|1=static_cast&lt;A::const_pointer&gt;(vptr) == cptr}}
| {{tt|A::const_pointer}}
|-
| {{c|std::pointer_traits&lt;A::pointer&gt;::pointer_to(r)}}{{mark unreviewed dr|LWG|2260}}
|
| {{tt|A::pointer}}
|-
| {{c|a.allocate(n)}}
| allocates storage suitable for {{tt|n}} objects of type {{tt|T}}, but does not construct them. May throw exceptions.
| {{tt|A::pointer}}
|-
| {{c|a.allocate(n, cvptr)}} {{mark|optional}}
| same as {{tt|a.allocate(n)}}, but may use {{tt|cvptr}} (a pointer obtained from {{tt|a.allocate()}} or {{tt|nullptr_t}}) in unspecified manner to aid locality
| {{tt|A::pointer}}
|-
| {{c|a.deallocate(ptr, n)}}
| deallocates storage pointed to {{tt|ptr}}, which must be a value returned by a previous call to {{c|allocate}} that has not been invalidated by an intervening call to {{tt|deallocate}}. {{tt|n}} must match the value previously passed to {{tt|allocate}}. Does not throw exceptions.
| (not used)
|-
| {{c|a.max_size()}} {{mark|optional}}
| the largest value that can be passed to {{tt|A::allocate()}}
| {{tt|A::size_type}}
|-
| {{c|1=a1 == a2}}
| returns {{c|true}} only if the storage allocated by the allocator {{tt|a1}} can be deallocated through {{tt|a2}}. Establishes reflexive, symmetric, and transitive relationship. Does not throw exceptions.
| {{c|bool}}
|-
| {{c|1=a1 != a2}}
| same as {{c|1=!(a1==a2)}}
| {{c|bool}}
|-
| {{c|A a1(a)}}
{{c|A a1 {{=}} a}}
| Copy-constructs {{tt|a1}} such that {{c|1=a1 == a}}. Does not throw exceptions. (Note: every {{tt|Allocator}} also satisfies {{concept|CopyConstructible}})
| 
|-
| {{c|A a(b)}}
| Constructs {{tt|a}} such that {{c|1=B(a)==b}} and {{c|1=A(b)==a}}. Does not throw exceptions. (Note: this implies that all allocators related by rebind maintain each other's resources, such as memory pools)
| 
|-
| {{c|A a1(std::move(a))}}
{{c|A a1 {{=}} std::move(a)}}
| Constructs {{tt|a1}} such that it equals the prior value of {{tt|a}}. Does not throw exceptions.
| 
|-
| {{c|A a(std::move(b))}}
| Constructs {{tt|a}} such that it equals the prior value of {{tt|A(b)}}. Does not throw exceptions.
| 
|-
| {{c|a.construct(xptr, args)}} {{mark|optional}}
| Constructs an object of type {{tt|X}} in previously-allocated storage at the address pointed to by {{tt|xptr}}, using args as the constructor arguments
| 
|-
| {{c|a.destroy(xptr)}} {{mark|optional}}
| Destructs an object of type {{tt|X}} pointed to by {{tt|xptr}}, but does not deallocate any storage.
| 
|-
| {{c|a.select_on_container_copy_construction()}} {{mark|optional}}
| Provides an instance of {{tt|A}} to be used by the container that is copy-constructed from the one that uses {{tt|a}} currently. Usually returns either a copy of {{tt|a}} or a default-constructed {{tt|A()}}.
| {{tt|A}}
|-
| {{c|A::propagate_on_container_copy_assignment}} {{mark|optional}}
| {{c|true}} if the allocator of type {{tt|A}} needs to be copied when the container that uses it is copy-assigned. Note that if the allocators of the source and the target containers do not compare equal, copy assignment has to deallocate the target's memory using the old allocator and then allocate it using the new allocator before copying the elements (and the allocator).
| {{lc|std::true_type}} or {{lc|std::false_type}} or derived from such
|-
| {{c|A::propagate_on_container_move_assignment}} {{mark|optional}}
| {{c|true}} if the allocator of type {{tt|A}} needs to be moved when the container that uses it is move-assigned. If this member is {{c|false}} and the allocators of the source and the target containers do not compare equal, move assignment cannot take ownership of the source memory and must move-assign or move-construct the elements individually, resizing its own memory as needed.
| {{lc|std::true_type}} or {{lc|std::false_type}} or derived from such
|-
| {{c|A::propagate_on_container_swap}} {{mark|optional}}
| {{c|true}} if the allocators of type {{tt|A}} need to be swapped when two containers that use them are swapped. If this member is {{c|false}} and the allocators of the two containers do not compare equal, the behavior of container swap is undefined.
| {{lc|std::true_type}} or {{lc|std::false_type}} or derived from such
|-
| {{c|A::is_always_equal}} {{mark|since c++17}} {{mark|optional}}
| {{c|true}} if any two allocators of type {{tt|A}} always compare equal. If not provided, {{lc|std::allocator_traits}} defaults this to equal {{c|std::is_empty&lt;A&gt;::type}}
| {{lc|std::true_type}} or {{lc|std::false_type}} or derived from such
|}

Notes:
[1] rebind is only optional (provided by {{lc|std::allocator_traits}}) if this allocator is a template of the form {{c|SomeAllocator&lt;T, Args&gt;}}, where {{tt|Args}} is zero or more additional template parameters.

{{rev begin}}
{{rev|since=c++17|
Additionally, in order for the type {{tt|A}} to satisfy {{tt|Allocator}}
* If {{tt|A::propagate_on_container_copy_assignment::value}} is {{tt|true}}, then {{tt|A}} must satisfy {{concept|CopyAssignable}} and the copy operation must not throw exceptions
* If {{tt|A::propagate_on_container_move_assignment::value}} is {{tt|true}}, then {{tt|A}} must satisfy {{concept|MoveAssignable}} and the move operation must not throw exceptions.
* If {{tt|A::propagate_on_container_swap::value}} is {{tt|true}}, lvalues of {{tt|A}} must be {{concept|Swappable}} and the swap operation must not throw exceptions
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++14|
Given
* {{tt|x1}} and {{tt|x2}}, objects of (possibly different) types {{tt|X::void_pointer}}, {{tt|X::const_void_pointer}}, {{tt|X::pointer}}, or {{tt|X::const_pointer}}

Then, x1 and x2 are ''equivalently-valued'' pointer values, if and only if both {{tt|x1}} and {{tt|x2}} can be explicitly converted to the two corresponding objects {{tt|px1}} and {{tt|px2}} of type {{tt|X::const_pointer}}, using a sequence of {{tt|static_casts}} using only these four types, and the expression {{c|px1 {{==}} px2}} evaluates to true

Given
* {{tt|w1}} and {{tt|w2}}, objects of type {{tt|X::void_pointer}}.

Then for the expression {{c|w1 {{==}} w2}} and {{c|w1 !{{=}} w2}} either or both objects may be replaced by an ''equivalently-valued'' object of type {{tt|X::const_void_pointer}} with no change in semantics.

Given
* {{tt|p1}} and {{tt|p2}}, objects of type {{tt|X::pointer}}

Then, for the expressions {{c|p1 {{==}} p2}}, {{c|p1 !{{=}} p2}}, {{c|p1 &lt; p2}} {{c|p1 &lt;{{=}} p2}}, {{c|p1 &gt;{{=}} p2}}, {{c|p1 &gt; p2}}, {{c|p1 - p2}}} either or both objects may be replaced by an ''equivalently-valued'' object of type {{tt|X::const_pointer}} with no change in semantics.

The above requirements make it possible to compare {{concept|Container}}'s iterators and const_iterators.
}}
{{rev end}}


{{rev begin}}
{{rev | since=c++17 |
===Allocator completeness requirements===
An allocator type {{tt|X}} for type {{tt|T}} additionally satisfies the ''allocator completeness requirements'' if both of the following are true regardless of whether {{tt|T}} is a complete type:
* {{tt|X}} is a complete type
* Except for {{tt|value_type}}, all the member types of {{c|std::allocator_traits&lt;X&gt;}} are complete types.
}}{{rev end}}

===Fancy pointers===
When the member type {{tt|pointer}} is not a raw pointer type, it is commonly referred to as a  &quot;fancy pointer&quot;. Such pointers were introduced to support segmented memory architectures and are used today to access objects allocated in address spaces that differ from the homogeneous virtual address space that is accessed by raw pointers. An example of a fancy pointer is the mapping address-independent pointer [http://www.boost.org/doc/libs/release/doc/html/interprocess/offset_ptr.html boost::interprocess::offset_ptr], which makes it possible to allocate node-based data structures such as {{lc|std::set}} in shared memory and memory mapped files mapped in different addresses in every process. Fancy pointers can be used independently of the allocator that provided them, through the class template {{lc|std::pointer_traits}}.

===Standard library===
The following standard library components satisfy the {{tt|Allocator}} concept:
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator}}
{{dsc inc | cpp/memory/dsc scoped_allocator_adaptor}}
{{dsc inc | cpp/memory/dsc polymorphic_allocator}}
{{dsc end}}

===Examples===
{{example|A minimum C++11 allocator.
|code=
#include &lt;cstddef&gt;
template &lt;class T&gt;
struct SimpleAllocator {
  typedef T value_type;
  SimpleAllocator(/*ctor args*/);
  template &lt;class U&gt; SimpleAllocator(const SimpleAllocator&lt;U&gt;&amp; other);
  T* allocate(std::size_t n);
  void deallocate(T* p, std::size_t n);
};
template &lt;class T, class U&gt;
bool operator==(const SimpleAllocator&lt;T&gt;&amp;, const SimpleAllocator&lt;U&gt;&amp;);
template &lt;class T, class U&gt;
bool operator!=(const SimpleAllocator&lt;T&gt;&amp;, const SimpleAllocator&lt;U&gt;&amp;);
}}

[[de:cpp/concept/Allocator]]
[[es:cpp/concept/Allocator]]
[[fr:cpp/concept/Allocator]]
[[it:cpp/concept/Allocator]]
[[ja:cpp/concept/Allocator]]
[[pt:cpp/concept/Allocator]]
[[ru:cpp/concept/Allocator]]
[[zh:cpp/concept/Allocator]]</text>
      <sha1>87gijv1p29gqah732puqf9064cxultz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/AllocatorAwareContainer</title>
    <ns>0</ns>
    <id>9617</id>
    <revision>
      <id>89129</id>
      <parentid>89128</parentid>
      <timestamp>2017-01-03T14:54:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/element/object of type A (since it could be a node)</comment>
      <text xml:space="preserve" bytes="4986">{{cpp/concept/title|AllocatorAwareContainer}}
{{cpp/concept/navbar}}

An {{concept|AllocatorAwareContainer}} is a {{concept|Container}} that holds an instance of an {{concept|Allocator}} and uses that instance in all its member functions to allocate and deallocate memory and to construct and destroy objects in that memory (such objects may be container elements, nodes, or, for unordered containers, bucket arrays).

The following rules apply to container construction

* Copy constructors of {{concept|AllocatorAwareContainer}}s obtain their instances of the allocator by calling {{c|std::allocator_traits&lt;allocator_type&gt;::select_on_container_copy_construction}} on the allocator of the container being copied.
* Move constructors obtain their instances of allocators by move-constructing from the allocator belonging to the old container.
* All other constructors take an allocator parameter.

The only way to replace an allocator is copy-assignment, move-assignment, and swap:

* Copy-assignment will replace the allocator only if {{c|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_copy_assignment::value}} is {{c|true}}
* Move-assignment will replace the allocator only if {{c|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_move_assignment::value}} is {{c|true}}
* Swap will replace the allocator only if {{c|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_swap::value}} is {{c|true}}. Specifically, it will exchange the allocator instances through an unqualified call to the non-member function swap, see {{concept|Swappable}}.

Note: swapping two containers with unequal allocators if {{tt|propagate_on_container_swap}} is {{c|false}} is undefined behavior.

* The accessor {{tt|get_allocator()}} obtains a copy of the allocator that was used to construct the container or installed by the most recent allocator replacement operation.

===Requirements===
{{dsc begin}}
{{dsc h1|Legend}}
{{dsc|{{ttb|X}}|Container type}}
{{dsc|{{ttb|T}}|Element type}}
{{dsc|{{ttb|A}}|Allocator for {{ttb|T}} }}
{{dsc|{{ttb|a}}, {{ttb|b}}|Objects of type {{ttb|X}} (non-const lvalue)}}
{{dsc|{{ttb|t}}|Object of type {{ttb|X}} (lvalue or const rvalue) }}
{{dsc|{{ttb|rv}}|Object of type {{ttb|X}} (non-const rvalue) }}
{{dsc|{{ttb|m}}|Object of type {{ttb|A}} }}
{{dsc|{{ttb|Q}}| Allocator type }}
{{dsc end}}


{|class=wikitable
!expression||return type||pre/requirements||post/effects||complexity
|-
|{{c|allocator_type}}||{{ttb|A}}||{{c|allocator_type::value_type}} must be the same as {{c|X::value_type}} || || compile-time
|-
|{{c|get_allocator()}}||{{ttb|A}}|| || || constant
|-
|{{c|X u;}} || ||{{ttb|A}} is {{concept|DefaultConstructible}}|| {{c|u.empty() {{==}} true &amp;&amp; u.get_allocator() {{==}} A()}}  || constant
|-
|{{c|X u(m);}} || || || {{c|u.empty() {{==}} true &amp;&amp; u.get_allocator() {{==}} m}} || constant
|-
|{{c|X u(t,m);}} || 
| {{ttb|T}} is {{concept|CopyInsertable}} into {{ttb|X}}
|{{c|u {{==}} t &amp;&amp; u.get_allocator() {{==}} m}} || linear
|-
|{{c|X u(rv);}} ||
| Move constructor of {{ttb|A}} must not throw exceptions 
| {{ttb|u}} has the same elements and an equal allocator as {{ttb|rv}} had before the construction || constant
|-
|{{c|X u(rv,m);}}|| 
|{{ttb|T}} is {{concept|MoveInsertable}} into {{ttb|X}}
| The elements of {{ttb|u}} are the same or copies of those of {{ttb|rv}} and {{c|u.get_allocator() {{==}} m}}
| constant if {{c|m {{==}} rv.get_allocator()}}, otherwise linear
|-
|{{c|a {{=}} t}}||{{c|X&amp;}}
|{{c|{{ttb|T}} is {{concept|CopyInsertable}} into {{ttb|X}} and {{concept|CopyAssignable}} ||{{c|a {{==}} t}} || linear
|-
|{{c|a {{=}} rv}}||{{c|X&amp;}}
|If the allocator will &lt;i&gt;not&lt;/i&gt; be replaced by move-assignment (see above), then {{ttb|T}} is {{concept|MoveInsertable}} into {{ttb|X}} and {{concept|MoveAssignable}}
|All existing elements of {{ttb|a}} are either move assigned to or destroyed; {{ttb|a}} is equal to the value that {{ttb|rv}} had before the assignment|| linear
|-
|{{c|a.swap(b)}}||void|| || Exchanges the contents of {{ttb|a}} and {{ttb|b}} || constant
|-
|}

===Concept requirements===
;A
* {{concept|DefaultConstructible}}
;T
* {{concept|CopyInsertable}}
;X
* {{concept|CopyAssignable}}

===Notes===
Allocator-aware containers always call {{c|std::allocator_traits&lt;A&gt;::construct(m, p, args)}} to construct an object of type {{tt|A}} at {{tt|p}} using {{tt|args}}, with {{c|1=m == get_allocator()}}. The default {{tt|construct}} in {{lc|std::allocator}} calls {{c|::new((void*)p) T(args)}}, but specialized allocators may choose a different definition

===Standard library===
All standard library containers except {{lc|std::array}} are {{concept|AllocatorAwareContainer}}s:
* {{lc|std::basic_string}}
* {{lc|std::deque}}
* {{lc|std::forward_list}}
* {{lc|std::list}}
* {{lc|std::vector}}
* {{lc|std::map}}
* {{lc|std::multimap}}
* {{lc|std::set}}
* {{lc|std::multiset}}
* {{lc|std::unordered_map}}
* {{lc|std::unordered_multimap}}
* {{lc|std::unordered_set}}
* {{lc|std::unordered_multiset}}</text>
      <sha1>oder34l9py51jedjcbdmb6s4e7pc0e2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/AssociativeContainer</title>
    <ns>0</ns>
    <id>13038</id>
    <revision>
      <id>88052</id>
      <parentid>87000</parentid>
      <timestamp>2016-10-25T13:16:43Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>fix broken templates</comment>
      <text xml:space="preserve" bytes="5512">{{cpp/concept/title|AssociativeContainer}}
{{cpp/concept/navbar}}

An {{ttb|AssociativeContainer}} is an ordered {{concept|Container}} that provides fast lookup of objects based on keys.

===Requirements===
{{dsc begin}}
{{dsc h1|Legend}}
{{dsc|{{ttb|X}}|Container type}}
{{dsc|{{ttb|a}}|Value of type {{ttb|X}}}}
{{dsc|{{ttb|a2}}|Value of a type {{ttb|Y}} whose [[cpp/container/node handle|node handles]] are compatible with X}}
{{dsc|{{ttb|b}}|Possibly const value of type {{ttb|X}}}}
{{dsc|{{ttb|u}}|Arbitrary variable name}}
{{dsc|{{ttb|a_uniq}}|Value of type {{ttb|X}} when {{ttb|X}} supports unique keys}}
{{dsc|{{ttb|a_eq}}|Value of type {{ttb|X}} when {{ttb|X}} supports multiple keys}}
{{dsc|{{ttb|a_tran}}|Possibly const value of type {{ttb|X}} when type {{tt|X::key_compare::is_transparent}} exists}}
{{dsc|{{ttb|i}}, {{ttb|j}}|{{concept|InputIterator}}s denoting a valid range and referring to elements implicitly convertible to {{tt|X::value_type}}}}
{{dsc|{{ttb|p}}|A valid const iterator to {{ttb|a}} }}
{{dsc|{{ttb|q}}|A valid dereferenceable const iterator to {{ttb|a}} }}
{{dsc|{{ttb|r}}|A valid dereferenceable iterator to {{ttb|a}} }}
{{dsc|{{ttb|q1}}, {{ttb|q2}}|const iterators denoting a valid range in {{ttb|a}} }}
{{dsc|{{ttb|il}}|An object of type {{lc|std::initializer_list}}&lt;value_type&gt;}}
{{dsc|{{ttb|t}}|A value of type {{ttb|X::value_type}} }}
{{dsc|{{ttb|k}}|A value of type {{ttb|X::key_type}} }}
{{dsc|{{ttb|c}}|A possibly const value of type {{ttb|X::key_compare}} }}
{{dsc|{{ttb|kl}}|A value such that {{ttb|a}} is partitioned with respect to {{c|c(r,kl)}}, with {{tt|r}} the key value of {{tt|e}} and {{tt|e}} in {{tt|a}}}}
{{dsc|{{ttb|ku}}|A value such that {{ttb|a}} is partitioned with respect to {{c|!c(ku, r)}}}}
{{dsc|{{ttb|ke}}|A value such that {{ttb|a}} is partitioned with respect to {{c|c(r, ke)}} and {{c|!c(ke, r)}}, with {{c|c(r, ke)}} implying {{c|!c(ke, r)}}}}
{{dsc|{{ttb|A}}|Storage allocator used by {{ttb|X}}, or {{lc|std::allocator_type&lt;X::value_type&gt;}} }}
{{dsc|{{ttb|m}}|Allocator of a type convertible to {{ttb|A}} }}
{{dsc|{{ttb|nh}}|A non-const rvalue of type {{tt|X::node_type}} }}
{{dsc end}}

{|class=wikitable
!expression||return type||pre/requirements||post/effects||complexity
|-
|{{c|X::key_type}}||{{ttb|Key}}||{{ttb|Key}} is {{concept|Destructible}}|| ||compile time
|-
|{{c|X::key_compare}}||{{ttb|Compare}}|| || ||compile time
|-
|{{c|X::value_compare}}||a type satisfying {{concept|BinaryPredicate}}||{{c|key_compare}} for {{c|std::set}} and {{c|std::multiset}}; an ordering relation over {{ttb|Key}} for {{c|std::map}} and {{c|std::multimap}} || ||compile time
|-
|{{c|X(c)}}, {{c|X a(c);}}|| ||{{c|key_compare}} is {{concept|CopyConstructible}}||Construct an empty container using a copy of {{c|c}} as {{ttb|key_comp}}||constant
|-
|{{c|X()}}, {{c|X a;}}|| ||{{c|key_compare}} is {{concept|CopyConstructible}}||Construct an empty container using a {{c|Compare()}} as {{ttb|key_comp}}||constant
|-
|{{c|X(i, j, c)}}, {{c|X a(i, j, c);}}|| ||{{c|key_compare}} is {{concept|CopyConstructible}} and {{c|value_type}} is {{concept|EmplaceConstructible}} into {{c|X}} from {{c|*i}}||Constructs an empty container using a copy of {{c|c}} as {{ttb|key_comp}} and inserts all elements from the range {{tt|[i; j)}}||generally {{tt|N log N}}, or {{tt|N}} if {{tt|[i, j)}} is sorted (where {{tt|N}} is {{c|std::distance(i, j)}}) 
|-
|{{c|X(i, j)}}, {{c|X a(i, j);}}|| ||{{c|key_compare}} is {{concept|CopyConstructible}} and {{c|value_type}} is {{concept|EmplaceConstructible}} into {{c|X}} from {{c|*i}}||Constructs an empty container using a {{c|Compare()}} as {{ttb|key_comp}} and inserts all elements from the range {{tt|[i; j)}}||generally {{tt|N log N}}, or {{tt|N}} if {{tt|[i, j)}} is sorted according to {{c|value_comp()}} (where {{tt|N}} is {{c|std::distance(i, j)}}) 
|-
|{{c|X(il);}}|| ||Equivalent to {{c|X(il.begin(), il.end());}}||Equivalent to {{c|X(il.begin(), il.end());}}
|-
|{{c|a {{=}} il}}||{{c|X&amp;}}||{{ttb|T}} is {{concept|CopyInsertable}} into {{ttb|X}} and also {{concept|CopyAssignable}}||Assign the range {{c|[il.begin(), il.end())}} into {{ttb|a}}. Elements of {{ttb|a}} that were not assigned to are destroyed||generally {{tt|N log N}}, or {{tt|N}} if {{c|[il.begin(), il.end())}} is sorted according to {{c|value_comp()}} (where {{tt|N}} is {{c|il.size() + a.size()}})
|-
|{{c|a.key_comp()}}||{{c|X::key_compare}}|| ||The comparison object with which {{ttb|a}} was constructed is returned.||constant
|-
|{{c|a.value_comp()}}||{{c|X::value_compare}}|| ||An object of type {{c|X::value_compare}} constructed out of the comparison object is returned.||constant
|-
|}

An AssociativeContainer {{ttb|X}} that is either {{ttb|std::map}} and {{ttb|std::multimap}} additionally supports the expression X::mapped_type, which has a return type of T, with the requirement that {{ttb|T}} be {{concept|Destructible}}, and compile time complexity.

{{todo|Finish requirements.}}

===AssociativeContainers in the standard library===
{{dsc begin}}
{{dsc inc | cpp/container/dsc set}}
{{dsc inc | cpp/container/dsc multiset}}
{{dsc inc | cpp/container/dsc map}}
{{dsc inc | cpp/container/dsc multimap}}
{{dsc end}}


[[de:cpp/concept/AssociativeContainer]]
[[es:cpp/concept/AssociativeContainer]]
[[fr:cpp/concept/AssociativeContainer]]
[[it:cpp/concept/AssociativeContainer]]
[[ja:cpp/concept/AssociativeContainer]]
[[pt:cpp/concept/AssociativeContainer]]
[[ru:cpp/concept/AssociativeContainer]]
[[zh:cpp/concept/AssociativeContainer]]</text>
      <sha1>glaf25vhyzdf4ih6txldpowty1tgl6t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/BasicLockable</title>
    <ns>0</ns>
    <id>8926</id>
    <revision>
      <id>65580</id>
      <parentid>42230</parentid>
      <timestamp>2013-09-21T01:11:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso mutex</comment>
      <text xml:space="preserve" bytes="1120">{{cpp/concept/title|BasicLockable}}
{{cpp/concept/navbar}}

The {{tt|BasicLockable}} concept describes the minimal characteristics of types that provide exclusive blocking semantics for execution agents (i.e. threads).

===Requirements===

For type {{ttb|L}} to be {{tt|BasicLockable}}, the following conditions have to be satisfied for an object {{ttb|m}} of type {{ttb|L}}:
{|table class=wikitable
|-
!Expression||Requires||Effects
|-
|{{c|m.lock()}}
|
|Blocks until a lock can be obtained for the current execution agent.  If an exception is thrown, no lock is obtained.
|-
|{{c|m.unlock()}}
|The current execution agent should hold the lock {{tt|m}}.
|Releases the lock held by the execution agent.  Throws no exceptions.
|}

===See also===
* [[cpp/thread|Thread support library]]
* {{concept|Mutex}}
* {{concept|Lockable}}
* {{concept|TimedLockable}}

[[de:cpp/concept/BasicLockable]]
[[es:cpp/concept/BasicLockable]]
[[fr:cpp/concept/BasicLockable]]
[[it:cpp/concept/BasicLockable]]
[[ja:cpp/concept/BasicLockable]]
[[pt:cpp/concept/BasicLockable]]
[[ru:cpp/concept/BasicLockable]]
[[zh:cpp/concept/BasicLockable]]</text>
      <sha1>035de56uvwh1fn4izr5uch02xzo47b9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/BidirectionalIterator</title>
    <ns>0</ns>
    <id>5519</id>
    <revision>
      <id>79180</id>
      <parentid>79179</parentid>
      <timestamp>2015-06-26T18:19:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1845">{{cpp/concept/title|BidirectionalIterator}}
{{cpp/concept/navbar}}

A {{tt|BidirectionalIterator}} is a {{concept|ForwardIterator}} that can be moved in both directions (i.e. incremented and decremented).

===Requirements===
The type {{tt|It}} satisfies {{tt|BidirectionalIterator}} if

* The type {{tt|It}} satisfies {{concept|ForwardIterator}}

And, given
* {{tt|a}} and {{tt|b}}, iterators of type {{tt|It}}
* {{tt|reference,}} the type denoted by {{tt|std::iterator_traits&lt;It&gt;::reference}}

The following expressions must be valid and have their specified effects 

{|table class=&quot;wikitable&quot;
|-
!Expression||Return||Equivalent expression||Notes
|-
|{{c|--a}}||{{c|It&amp;}}|| ||Preconditions:
* {{tt|a}} is decrementable (there exists such {{tt|b}} that {{c|1=a == ++b}})
Postconditions:
*a is dereferenceable
*{{c|1=--(++a) == a}}
*If {{c|1=--a == --b}} then {{c|1=a == b}}
*{{c|1=&amp;a == &amp;--a}}
|-
|{{c|a--}}|| convertible to {{c|const It&amp;}}||{{c|
It temp {{=}} a;
--a;
return temp;
}} ||
|-
|{{c|*a--}}||{{tt|reference}}|| ||
|-
|}
A {{tt|mutable BidirectionalIterator}} is a {{tt|BidirectionalIterator}} that additionally satisfies the {{concept|OutputIterator}} requirements.

===Notes===
The begin iterator is not decrementable and the behavior is undefined if {{c|--container.begin()}} is evaluated.

A bidirectional iterator does not have to be dereferenceable to be decrementable (in particular, the end iterator is not dereferenceable but is decrementable)

===See also===
* [[cpp/iterator|Iterator library]]

[[de:cpp/concept/BidirectionalIterator]]
[[es:cpp/concept/BidirectionalIterator]]
[[fr:cpp/concept/BidirectionalIterator]]
[[it:cpp/concept/BidirectionalIterator]]
[[ja:cpp/concept/BidirectionalIterator]]
[[pt:cpp/concept/BidirectionalIterator]]
[[ru:cpp/concept/BidirectionalIterator]]
[[zh:cpp/concept/BidirectionalIterator]]</text>
      <sha1>sa6l74m013vew4o1e6uqpm6lizuh6cj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/BinaryPredicate</title>
    <ns>0</ns>
    <id>9766</id>
    <revision>
      <id>67874</id>
      <parentid>63146</parentid>
      <timestamp>2014-03-04T04:10:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/callable/predicate</comment>
      <text xml:space="preserve" bytes="1707">{{cpp/concept/title|BinaryPredicate}}
{{cpp/concept/navbar}}

The concept {{concept|BinaryPredicate}} is a set of requirements expected by some of the standard library facilities from the user-provided arguments.

Given a {{concept|BinaryPredicate}} {{tt|bin_pred}} and a pair of iterators {{tt|iter1}} and {{tt|iter2}} or an iterator {{tt|iter}} and a value {{tt|value}}, the expression  {{c|bin_pred(*iter1, *iter2)}} or, respectively, {{c|bin_pred(*iter, value)}}, must be [[cpp/language/implicit_cast|contextually convertible]] to {{c|bool}}.

In addition, evaluation of that expression is not allowed to call non-const member functions of the dereferenced iterators.

===Requirements===
* {{concept|Predicate}}
* {{concept|CopyConstructible}} (unless otherwise specified)

===Standard library===
The following standard library facilities expect a {{concept|BinaryPredicate}} which isn't a {{concept|Compare}} type.
{{dsc begin}}
{{dsc inc | cpp/container/dsc unique | forward_list}}
{{dsc inc | cpp/container/dsc unique | list}}
{{dsc inc | cpp/algorithm/dsc find_end}}
{{dsc inc | cpp/algorithm/dsc find_first_of}}
{{dsc inc | cpp/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/algorithm/dsc mismatch}}
{{dsc inc | cpp/algorithm/dsc equal}}
{{dsc inc | cpp/algorithm/dsc is_permutation}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc inc | cpp/algorithm/dsc search_n}}
{{dsc inc | cpp/algorithm/dsc unique}}
{{dsc inc | cpp/algorithm/dsc unique_copy}}
{{dsc inc | cpp/utility/functional/dsc not2}}
{{dsc inc | cpp/container/dsc unordered_set}}
{{dsc inc | cpp/container/dsc unordered_map}}
{{dsc inc | cpp/container/dsc unordered_multiset}}
{{dsc inc | cpp/container/dsc unordered_multimap}}
{{dsc end}}</text>
      <sha1>7dtf2nqaduu71eh57i7yidotj4ctyyr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/BitmaskType</title>
    <ns>0</ns>
    <id>9092</id>
    <revision>
      <id>91014</id>
      <parentid>86116</parentid>
      <timestamp>2017-03-14T13:00:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Requirements */ inline</comment>
      <text xml:space="preserve" bytes="2628">{{cpp/concept/title|BitmaskType}}
{{cpp/concept/navbar}}

Defines a type that can be used to represent a set of constant values or any combination of those values. This trait is typically implemented by integer types, {{lc|std::bitset}}, or enumerations (scoped and unscoped) with additional operator overloads.

===Requirements===

The bitmask type supports a finite number of bitmask elements, which are distinct non-zero values of the bitmask type, such that, for any pair Ci and Cj, {{c|Ci &amp; Ci !{{=}} 0}} and {{c|1=Ci &amp; Cj == 0}}. In addition, the value {{tt|0}} is used to represent an empty bitmask, with no values set.

The bitwise operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}} are defined for values of the bitmask type and have the same semantics as the corresponding built-in operators on unsigned integers would have if the bitmask elements were the distinct integer powers of two.

The following expressions are well-formed and have the following meaning for any BitmaskType X

{{dsc begin}}
{{dsc | {{c|X {{!}}{{=}} Y}} | sets the value Y in the object X }}
{{dsc | {{c|X &amp;{{=}} ~Y}} | clears the value Y in the object X }}
{{dsc | {{c|(X&amp;Y) !{{=}} 0}} | indicates that the value Y is set in the object X }}
{{dsc end}}

Each representable bitmask element is defined as a {{rev inl|since=c++17|{{c|inline}}}}{{c|constexpr}} value of the bitmask type.

===Usage===
The following standard library types satisfy {{concept|BitmaskType}}:
* {{lc|std::ctype_base::mask}}
* {{lc|std::ios_base::fmtflags}}
* {{lc|std::ios_base::iostate}}
* {{lc|std::ios_base::openmode}}
* {{lc|std::regex_traits::char_class_type}}
* {{lc|std::regex_constants::syntax_option_type}}
* {{lc|std::regex_constants::match_flag_type}}
* {{lc|std::launch}}
* {{ltt|cpp/experimental/fs/perms|std::experimental::filesystem::perms}} {{mark since fs ts}}
* {{ltt|cpp/experimental/fs/copy_options|std::experimental::filesystem::copy_options}} {{mark since fs ts}}
* {{ltt|cpp/experimental/fs/directory_options|std::experimental::filesystem::directory_options}} {{mark since fs ts}}

Code that relies on some particular implementation option (e.g. {{c|1=int n = std::ios_base::hex}}), is nonportable because {{lc|std::ios_base::fmtflags}} is not necessarily implicitly convertible to {{c|int}}.

[[de:cpp/concept/BitmaskType]]
[[es:cpp/concept/BitmaskType]]
[[fr:cpp/concept/BitmaskType]]
[[it:cpp/concept/BitmaskType]]
[[ja:cpp/concept/BitmaskType]]
[[pt:cpp/concept/BitmaskType]]
[[ru:cpp/concept/BitmaskType]]
[[zh:cpp/concept/BitmaskType]]</text>
      <sha1>6pe52j5hlcj7ixx3s9moznu9t98m9bf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Callable</title>
    <ns>0</ns>
    <id>13171</id>
    <revision>
      <id>91116</id>
      <parentid>90853</parentid>
      <timestamp>2017-03-20T08:29:51Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="3401">{{cpp/concept/title|Callable}}
{{cpp/concept/navbar}}

A {{concept|Callable}} type is a type for which the INVOKE operation (used by, e.g.,   {{lc|std::function}}, {{lc|std::bind}}, and {{lc|std::thread::thread}}) is applicable. {{rev inl|since=c++17|This operation may be performed explicitly using the library function {{lc|std::invoke}}.}}

===Requirements===

The type {{tt|T}} satisfies {{tt|Callable}} if

Given
* {{tt|f}}, an object of type {{tt|T}}
* {{tt|ArgTypes}}, suitable list of argument types
* {{tt|R}}, suitable return type

The following expressions must be valid:

{|table class=wikitable
|-
!Expression||Requirements
|-
| {{c|1=INVOKE&lt;R&gt;(f, std::declval&lt;ArgTypes&gt;()...)}}
| the expression is well-formed in unevaluated context
|}

where ''INVOKE&lt;R&gt;(f, t1, t2, ..., tN)'' is defined as {{rev inl|since=c++17|{{c|static_cast&lt;void&gt;(INVOKE(f, t1, t2, ..., tN))}} if {{tt|R}} is  possibly cv-qualified {{c|void}}, otherwise}} ''INVOKE(f, t1, t2, ..., tN)'', [[cpp/language/implicit_cast|implicitly converted]] to {{tt|R}}

where ''INVOKE(f, t1, t2, ..., tN)'' is defined as follows:
* if {{tt|f}} is a [[cpp/language/pointer#Pointers_to_member_functions|pointer to member function]] of class {{tt|T}}:
:* If {{c|1=std::is_base_of&lt;T, std::decay_t&lt;decltype(t1)&gt;&gt;::value}} is {{c|true}}, then {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|(t1.*f)(t2, ..., tN)}}
:* {{rev inl|since=c++17|otherwise, if {{c|std::decay_t&lt;decltype(t1)&gt;}} is a specialization of {{lc|std::reference_wrapper}}, then {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|(t1.get().*f)(t2, ..., tN)}}}}
:* otherwise, if {{tt|t1}} does not satisfy the previous items, then {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|((*t1).*f)(t2, ..., tN)}}.
* otherwise, if N == 1 and {{tt|f}} is a [[cpp/language/pointer#Pointers_to_data_members|pointer to data member]] of class {{tt|T}}:
:* If {{c|1=std::is_base_of&lt;T, std::decay_t&lt;decltype(t1)&gt;&gt;::value}} is {{c|true}}, then {{c|INVOKE(f, t1)}} is equivalent to {{c|t1.*f}}
:* {{rev inl|since=c++17|1=otherwise, if {{c|std::decay_t&lt;decltype(t1)&gt;}} is a specialization of {{lc|std::reference_wrapper}}, then {{c|INVOKE(f, t1)}} is equivalent to {{c|t1.get().*f}}}}
:* otherwise, if {{tt|t1}}  does not satisfy the previous items, then {{c|INVOKE(f, t1)}} is equivalent to {{c|(*t1).*f}}
* otherwise, {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|f(t1, t2, ..., tN)}} (that is, {{tt|f}} is a {{concept|FunctionObject}})

===Notes===
For pointers to member functions and pointers to data members, {{tt|t1}} may be a regular pointer or an object of class type that overloads {{tt|operator*}}, such as {{lc|std::unique_ptr}} or {{lc|std::shared_ptr}}.

[[cpp/language/pointer#Pointers_to_data_members|Pointers to data members]] are {{tt|Callable}}, even though no function calls take place.

===Standard library===
In addition, the following standard library facilities accept any {{concept|Callable}} type (not just {{concept|FunctionObject}})

{{dsc begin}}
{{dsc | {{lc|std::function}} }}
{{dsc | {{lc|std::bind}} }}
{{dsc | {{lc|std::result_of}} }}
{{dsc | {{lc|std::thread::thread}} }}
{{dsc | {{lc|std::call_once}} }}
{{dsc | {{lc|std::async}} }}
{{dsc | {{lc|std::packaged_task}} }}
{{dsc | {{lc|std::reference_wrapper}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_invocable}}
{{dsc end}}

[[zh:cpp/concept/Callable]]</text>
      <sha1>axfip8fr10n2z1i60tlmbf9jqudl0yv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Clock</title>
    <ns>0</ns>
    <id>9876</id>
    <revision>
      <id>87989</id>
      <parentid>87987</parentid>
      <timestamp>2016-10-19T17:02:41Z</timestamp>
      <contributor>
        <ip>81.50.11.110</ip>
      </contributor>
      <comment>True =&gt; true</comment>
      <text xml:space="preserve" bytes="1475">{{cpp/concept/title|Clock}}
{{cpp/concept/navbar}}

The {{tt|Clock}} concept describes a bundle consisting of a {{lc|std::chrono::duration}}, a {{lc|std::chrono::time_point}}, and a function {{c|now()}} to get the current time_point. The origin of the clock's time_point is referred to as the clock's epoch.

===Requirements===

{{c|C1}} and {{c|C2}} denote clock types. {{c|t1}} and {{c|t2}} are values returned by {{c|C1::now()}} where the call returning {{c|t1}} happens before the call returning {{c|t2}} and both of these calls occur before {{c|C1::time_point::max()}}.

{|table class=wikitable
|-
!Expression||Return type||Operational semantics
|-
|{{c|C1::rep}}
|An arithmetic type or a class emulating an arithmetic type
|The representation type of {{c|C1::duration}}.
|-
|{{c|C1::period}}
|A specialization of {{lc|std::ratio}}
|The tick period of the clock in seconds.
|-
|{{c|C1::duration}}
|{{c|std::chrono::duration&lt;C1::rep, C1::period&gt;}}
|The duration type of the clock.
|-
|{{c|C1::time_point}}
|{{c|std::chrono::time_point&lt;C1&gt;}} or {{c|std::chrono::time_point&lt;C2, C1::duration&gt;}}
|The {{lc|std::chrono::time_point}} type of the clock. C1 and C2 shall refer to the same epoch.
|-
|{{c|C1::is_steady}}
|{{c|const bool}}
|{{c|true}} if {{c|1=t1 &lt;= t2}} is always {{c|true}} and the time between clock ticks is constant, otherwise {{c|false}}
|-
|{{c|C1::now()}}
|{{c|C1::time_point}}
|Returns a {{c|time_point}} object representing the current point in time.
|-}</text>
      <sha1>b69elrncwlao2135yqqmxph6y3nzgtj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Compare</title>
    <ns>0</ns>
    <id>13131</id>
    <revision>
      <id>80450</id>
      <parentid>67156</parentid>
      <timestamp>2015-08-13T10:44:25Z</timestamp>
      <contributor>
        <username>Frog</username>
        <id>3671</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3930">{{cpp/concept/title|Compare}}
{{cpp/concept/navbar}}

The concept {{concept|Compare}} is a set of requirements expected by some of the standard library facilities from the user-provided function object types.

The return value of the function call operation applied to an object of type {{tt|Compare}}, when [[cpp/language/implicit_cast|contextually converted]] to {{c|bool}}, yields {{c|true}} if the first argument of the call appears before the second in the ''strict weak ordering relation'' induced by this {{tt|Compare}} type, and {{c|false}} otherwise.

As with any {{concept|BinaryPredicate}}, evaluation of that expression is not allowed to call non-const member functions of the dereferenced iterators.

===Requirements===
The type {{tt|T}} satisfies {{tt|Compare}} if

* The type {{tt|T}} satisfies {{concept|BinaryPredicate}}, and

Given
* {{tt|comp}}, an object of type {{tt|Compare}}
* {{tt|equiv(a, b)}}, an expression equivalent to {{tt|!comp(a, b) &amp;&amp; !comp(b, a)}}

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Return type||Requirements
|-
| {{c|comp(a, b)}}
| [[cpp/language/implicit_cast|implicitly convertible]] to {{c|bool}}
| Establishes [[enwiki:Strict_weak_ordering|strict weak ordering]] relation with the following properties
* For all {{tt|a}}, {{c|comp(a,a){{==}}false}}
* If {{c|comp(a,b){{==}}true}} then {{c|comp(b,a){{==}}false}}
* if {{c|comp(a,b){{==}}true}} and {{c|comp(b,c){{==}}true}} then {{c|comp(a,c){{==}}true}}
|-
| {{c|equiv(a, b)}}
| {{c|bool}}
| Establishes equivalence relationship with the following properties
* For all {{tt|a}}, {{c|equiv(a,a){{==}}true}}
* If {{c|equiv(a,b){{==}}true}}, then {{c|equiv(b,a){{==}}true}}
* If {{c|equiv(a,b){{==}}true}} and {{c|equiv(b,c){{==}}true}}, then {{c|equiv(a,c){{==}}true}}
|}

Note: {{tt|comp}} induces a ''strict total ordering'' on the equivalence classes determined by {{tt|equiv}}

===Standard library===
The following standard library facilities expect a {{concept|Compare}} type.
{{dsc begin}}
{{dsc inc | cpp/container/dsc set}}
{{dsc inc | cpp/container/dsc map}}
{{dsc inc | cpp/container/dsc multiset}}
{{dsc inc | cpp/container/dsc multimap}}
{{dsc inc | cpp/container/dsc priority_queue}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc inc | cpp/container/dsc sort | forward_list}}
{{dsc inc | cpp/container/dsc sort | list}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}
{{dsc inc | cpp/algorithm/dsc partial_sort}}
{{dsc inc | cpp/algorithm/dsc partial_sort_copy}}
{{dsc inc | cpp/algorithm/dsc is_sorted}}
{{dsc inc | cpp/algorithm/dsc is_sorted_until}}
{{dsc inc | cpp/algorithm/dsc nth_element}}
{{dsc inc | cpp/algorithm/dsc lower_bound}}
{{dsc inc | cpp/algorithm/dsc upper_bound}}
{{dsc inc | cpp/algorithm/dsc binary_search}}
{{dsc inc | cpp/algorithm/dsc equal_range}}
{{dsc inc | cpp/algorithm/dsc merge}}
{{dsc inc | cpp/container/dsc merge | forward_list}}
{{dsc inc | cpp/container/dsc merge | list}}
{{dsc inc | cpp/algorithm/dsc inplace_merge}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc set_difference}}
{{dsc inc | cpp/algorithm/dsc set_intersection}}
{{dsc inc | cpp/algorithm/dsc set_symmetric_difference}}
{{dsc inc | cpp/algorithm/dsc set_union}}
{{dsc inc | cpp/algorithm/dsc push_heap}}
{{dsc inc | cpp/algorithm/dsc pop_heap}}
{{dsc inc | cpp/algorithm/dsc make_heap}}
{{dsc inc | cpp/algorithm/dsc sort_heap}}
{{dsc inc | cpp/algorithm/dsc is_heap}}
{{dsc inc | cpp/algorithm/dsc is_heap_until}}
{{dsc inc | cpp/algorithm/dsc max}}
{{dsc inc | cpp/algorithm/dsc max_element}}
{{dsc inc | cpp/algorithm/dsc min}}
{{dsc inc | cpp/algorithm/dsc min_element}}
{{dsc inc | cpp/algorithm/dsc minmax}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc inc | cpp/algorithm/dsc lexicographical_compare}}
{{dsc inc | cpp/algorithm/dsc next_permutation}}
{{dsc inc | cpp/algorithm/dsc prev_permutation}}
{{dsc end}}</text>
      <sha1>ri0oykcbrby4onoylqj1o531ptcmuyt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Container</title>
    <ns>0</ns>
    <id>8490</id>
    <revision>
      <id>83369</id>
      <parentid>83368</parentid>
      <timestamp>2016-02-03T14:02:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/assigns a to b/assigns a from b/ in the description of a=b</comment>
      <text xml:space="preserve" bytes="3974">{{cpp/concept/title|Container}}
{{cpp/concept/navbar}}

A {{tt|Container}} is an object used to store other objects and taking care of the management of the memory used by the objects it contains.

===Requirements===
* {{ttb|C}} container type;
* {{ttb|T}} element type;
* {{ttb|a}}, {{ttb|b}} objects of type {{ttb|C}}.

====Types====
{|class=wikitable
!name||type||notes
|-
|{{tt|value_type}}||T||{{concept|Eraseable}}
|-
|{{tt|reference}}||T&amp;||
|-
|{{tt|const_reference}}||const T&amp;||
|-
|{{tt|iterator}}||iterator pointing to T||{{concept|ForwardIterator}}&lt;br/&gt;convertible to {{ttb|const_iterator}}
|-
|{{tt|const_iterator}}||const iterator pointing to T||{{concept|ForwardIterator}}
|-
|{{tt|difference_type}}||signed integer
|must be the same as {{ttb|[[cpp/iterator/iterator_traits|iterator_traits]]::difference_type}} for {{ttb|iterator}} and {{ttb|const_iterator}}
|-
|{{tt|size_type}}||unsigned integer||large enough to represent all positive values of {{ttb|difference_type}}
|}

====Methods and operators====
{|class=wikitable
!expression||return type||semantics||conditions||complexity
|-
|{{c|C()}}||C||creates an empty container|| Post: C().empty() == true||Constant
|-
|{{c|C(a)}}||C||creates a copy of {{ttb|a}}||Pre: T must be {{concept|CopyInsertable}}&lt;br/&gt;Post: a == C(a)||Linear
|-
|{{c|a {{=}} b}}||C&amp;||destroys or move-assigns all elements of {{ttb|a}} from elements of {{ttb|b}}||Post: a == b||Linear
|-
|{{c|(&amp;a)-&gt;~C()}}||void||destroys all elements of {{ttb|a}} and frees all memory||  ||Linear
|-
|{{c|a.begin()}}||(const_)iterator||Iterator to the first element of {{ttb|a}}|| ||Constant
|-
|{{c|a.end()}}||(const_)iterator||Iterator to one past the last element of {{ttb|a}}||  ||Constant
|-
|{{c|a.cbegin()}}{{mark since c++11}}||const_iterator||{{c|const_cast&lt;const C&amp;&gt;(a).begin()}}|| ||Constant
|-
|{{c|a.cend()}}{{mark since c++11}}||const_iterator||{{c|const_cast&lt;const C&amp;&gt;(a).end()}}|| ||Constant
|-
|{{c|a {{==}} b}} || convertible to bool || {{c|std::equal(a.begin(), a.end(), b.begin(), b.end())}}{{mark since c++14}} ||Pre: T must be {{concept|EqualityComparable}} || Constant&lt;ref&gt;always linear for {{lc|std::forward_list}}&lt;/ref&gt; if {{tt|a.size() !{{=}} b.size()}}, linear otherwise
|-
|{{c|a !{{=}} b}} || convertible to bool || {{c|!(a {{==}} b)}} || || Linear
|-
|{{c|a.swap(b)}} || void || exchanges the values of {{ttb|a}} and {{ttb|b}} || 
| Constant&lt;ref name=&quot;array&quot;&gt;{{mark since c++11}} Linear for {{lc|std::array}}&lt;/ref&gt;&lt;ref name=&quot;should&quot;&gt;{{mark until c++11}} Not strictly constant&lt;/ref&gt;
|-
|{{c|swap(a, b)}} || void || {{c|a.swap(b)}} || || Constant&lt;ref name=&quot;array&quot;/&gt;
|-
|{{c|a.size()}} || size_type || {{c|distance(a.begin(), a.end())}} || || Constant&lt;ref name=&quot;should&quot; /&gt;
|-
|{{c|a.max_size()}} || size_type || {{c|b.size()}} where {{ttb|b}} is the largest possible container || || Constant&lt;ref name=&quot;should&quot; /&gt;
|-
|{{c|a.empty()}} || convertible to bool || {{c|a.begin() {{==}} a.end()}} || || Constant
|-
!colspan=6|notes
|-
|colspan=6|&lt;references/&gt;
|}

{{rev begin}}
{{rev |since=c++14|
Given
* {{tt|i}} and {{tt|j}}, objects of a container's {{tt|iterator}} type,
in the expressions {{c|i {{==}} j}}, {{c|i !{{=}} j}}, {{c|i &lt; j}}, {{c|i &lt;{{=}} j}}, {{c|i &gt;{{=}} j}}, {{c|i &gt; j}}, {{c|i - j}}, either or both may be replaced by an object of the container's {{tt|const_iterator}} type referring to the same element with no change in semantics.
}}
{{rev end}}

===Container data races===
see [[cpp/container#Thread_safety|container thread safety]]

===Other concepts===
;C
* {{concept|DefaultConstructible}}
* {{concept|CopyConstructible}}
* {{concept|EqualityComparable}}
* {{concept|Swappable}}
;T
* {{concept|CopyInsertable}}
* {{concept|EqualityComparable}}
* {{concept|Destructible}}

[[de:cpp/concept/Container]]
[[es:cpp/concept/Container]]
[[fr:cpp/concept/Container]]
[[it:cpp/concept/Container]]
[[ja:cpp/concept/Container]]
[[pt:cpp/concept/Container]]
[[ru:cpp/concept/Container]]
[[zh:cpp/concept/Container]]</text>
      <sha1>t4r6q7kyorchhww7qaolipmko00ot1j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/CopyAssignable</title>
    <ns>0</ns>
    <id>5431</id>
    <revision>
      <id>76942</id>
      <parentid>66753</parentid>
      <timestamp>2015-03-08T16:19:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>missed t in the legend</comment>
      <text xml:space="preserve" bytes="1259">{{cpp/concept/title|CopyAssignable}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be copy-assigned from an [[cpp/language/value_category|lvalue expression]].

===Requirements===

The type {{tt|T}} satisfies {{tt|CopyAssignable}} if

* The type {{tt|T}} satisfies {{concept|MoveAssignable}}, and

Given
* {{tt|t}}, a modifiable [[cpp/language/value_category|lvalue expression]] of type {{tt|T}}
* {{tt|v}}, an [[cpp/language/value_category|lvalue]] expression of type {{tt|T}} or {{tt|const T}} or an [[cpp/language/value_category|rvalue]] expression of type {{tt|const T}}

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Return type||Return value||Post-conditions
|-
| {{c|1=t = v}}
| {{tt|T&amp;}}
| {{tt|t}}
| The value of {{tt|t}} is equivalent to the value of {{tt|v}}.
The value of {{tt|v}} is unchanged.
|}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_copy_assignable}}
{{dsc end}}

[[de:cpp/concept/CopyAssignable]]
[[es:cpp/concept/CopyAssignable]]
[[fr:cpp/concept/CopyAssignable]]
[[it:cpp/concept/CopyAssignable]]
[[ja:cpp/concept/CopyAssignable]]
[[pt:cpp/concept/CopyAssignable]]
[[ru:cpp/concept/CopyAssignable]]
[[zh:cpp/concept/CopyAssignable]]</text>
      <sha1>eflkmocfh7opv4awppvgeyzkdwqmqkn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/CopyConstructible</title>
    <ns>0</ns>
    <id>5430</id>
    <revision>
      <id>72604</id>
      <parentid>72603</parentid>
      <timestamp>2014-09-08T19:56:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to addressof</comment>
      <text xml:space="preserve" bytes="1818">{{cpp/concept/title|CopyConstructible}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be copy-constructed from an [[cpp/language/value_category|lvalue expression]].

===Requirements===
The type {{tt|T}} satisfies {{tt|CopyConstructible}} if

* The type {{tt|T}} satisfies {{concept|MoveConstructible}}, and

Given
* {{tt|v}}, an [[cpp/language/value_category|lvalue]] expression of type {{tt|T}} or {{tt|const T}} or an [[cpp/language/value_category|rvalue]] expression of type {{tt|const T}}
* {{tt|u}}, an arbitrary identifier

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Post-conditions
|-
| {{c|1=T u = v;}}
| The value of {{tt|u}} is equivalent to the value of {{tt|v}}.
The value of {{tt|v}} is unchanged
|-
| {{c|T(v)}}
| The value of {{tt|T(v)}} is equivalent to the value of {{tt|v}}.
The value of {{tt|v}} is unchanged.
|}

{{rev begin}}
{{rev|until=c++11|
The expression {{c|v.~T()}} also must be valid, and, for lvalue {{tt|v}}, the expression {{tt|&amp;v}} must have the type {{c|T*}} or {{c|const T*}} and must evaluate to the address of {{tt|v}}
}}
{{rev end}}

===Notes===
Until C++11, classes that overloaded {{tt|operator&amp;}} were not {{tt|CopyConstructible}} and thus weren't usable in the standard library containers. As of C++11, the standard library uses {{lc|std::addressof}} whenever the address of an object is needed.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_copy_constructible}}
{{dsc end}}

[[de:cpp/concept/CopyConstructible]]
[[es:cpp/concept/CopyConstructible]]
[[fr:cpp/concept/CopyConstructible]]
[[it:cpp/concept/CopyConstructible]]
[[ja:cpp/concept/CopyConstructible]]
[[pt:cpp/concept/CopyConstructible]]
[[ru:cpp/concept/CopyConstructible]]
[[zh:cpp/concept/CopyConstructible]]</text>
      <sha1>o646ux4putnyj2bz6xwow1d50nx0o4r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/CopyInsertable</title>
    <ns>0</ns>
    <id>5661</id>
    <revision>
      <id>81961</id>
      <parentid>81960</parentid>
      <timestamp>2015-11-21T00:22:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>non-allocator-aware case</comment>
      <text xml:space="preserve" bytes="1595">{{cpp/concept/title|CopyInsertable}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be copy-constructed in-place by a given allocator.

===Requirements===

The type {{ttb|T}} is {{concept|CopyInsertable}} into the container {{ttb|X}} whose {{tt|value_type}} is identical to {{tt|T}} if {{ttb|T}} is {{concept|MoveInsertable}} into {{ttb|X}}, and, given
{{dsc begin}}
{{dsc | {{ttb|A}} | an allocator type}}
{{dsc | {{ttb|m}} | an lvalue of type {{ttb|A}} }}
{{dsc | {{ttb|p}} | the pointer of type {{ttb|T*}} prepared by the container }}
{{dsc | {{ttb|v}} | expression of type (possibly {{c|const}}) {{ttb|T}}}}
{{dsc end}}

where {{ttb|X::allocator_type}} is identical to {{c|std::allocator_traits&lt;A&gt;::rebind_alloc&lt;T&gt;}},

the following expression is well-formed: 

{{source|
std::allocator_traits&lt;A&gt;::construct(m, p, v);
}}

And after evaluation, the value of {{c|*p}} is equivalent to the value of {{c|v}}. The value of {{c|v}} is unchanged.

If {{ttb|X}} is not allocator-aware, the term is defined as if {{ttb|A}} were {{lc|std::allocator&lt;T&gt;}}, except that no allocator object needs to be created, and user-defined specializations of {{lc|std::allocator}} are not instantiated.

===Notes===
If {{tt|A}} is {{c|std::allocator&lt;T&gt;}}, then this will call placement-new, as by {{c|::new((void*)p) T(v)}}

[[de:cpp/concept/CopyInsertable]]
[[es:cpp/concept/CopyInsertable]]
[[fr:cpp/concept/CopyInsertable]]
[[it:cpp/concept/CopyInsertable]]
[[ja:cpp/concept/CopyInsertable]]
[[pt:cpp/concept/CopyInsertable]]
[[ru:cpp/concept/CopyInsertable]]
[[zh:cpp/concept/CopyInsertable]]</text>
      <sha1>no0gw95783yotcg5yzp88ezxb2e05si</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/DefaultConstructible</title>
    <ns>0</ns>
    <id>5422</id>
    <revision>
      <id>81452</id>
      <parentid>74439</parentid>
      <timestamp>2015-10-27T03:27:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ struct C{ int &amp;x; }; is an aggregate, and isn't default constructible.</comment>
      <text xml:space="preserve" bytes="1942">{{cpp/concept/title|DefaultConstructible}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be default constructed.

===Requirements===

The type {{tt|T}} satisfies {{tt|DefaultConstructible}} if

Given
* {{tt|u}}, an arbitrary identifier

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Post-conditions
|-
| {{c|T u}}
| The object {{tt|u}} is [[cpp/language/default initialization|default-initialized]]
|-
| {{c|T u{} }}
| The object {{tt|u}} is [[cpp/language/value initialization|value-initialized]] or [[cpp/language/aggregate_initialization|aggregate-initialized]].
|-
| {{c|T()}}
{{c|T{} }}
| A temporary object of type {{tt|T}} is [[cpp/language/value initialization|value-initialized]] or [[cpp/language/aggregate_initialization|aggregate-initialized]].
|}

===Notes===
For objects of non-aggregate class type, a public [[cpp/language/default constructor|default constructor]] must be defined (either user-defined or implicitly defined) to satisfy {{tt|DefaultConstructible}}.

Non-const objects of [[cpp/language/type|non-class object type]] are always {{tt|DefaultConstructible}}.

Const non-class types are not {{tt|DefaultConstructible}}.

Const aggregate types are not {{tt|DefaultConstructible}} if any of their members is an object of non-class type.

Non-object types (function types, reference types, and the (possibly cv-qualified) type {{c|void}}) as well as the const non-object types are never {{tt|DefaultConstructible}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_default_constructible}}
{{dsc end}}

[[de:cpp/concept/DefaultConstructible]]
[[es:cpp/concept/DefaultConstructible]]
[[fr:cpp/concept/DefaultConstructible]]
[[it:cpp/concept/DefaultConstructible]]
[[ja:cpp/concept/DefaultConstructible]]
[[pt:cpp/concept/DefaultConstructible]]
[[ru:cpp/concept/DefaultConstructible]]
[[zh:cpp/concept/DefaultConstructible]]</text>
      <sha1>8jkc78p3mbjp48i65dok5b5kkjk0591</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/DefaultInsertable</title>
    <ns>0</ns>
    <id>13757</id>
    <revision>
      <id>81959</id>
      <parentid>78903</parentid>
      <timestamp>2015-11-21T00:17:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2218. No {{rev inl}} - &quot;previous standardese was nonsense&quot; (STL), &quot;We all know this is what we're doing anyways.&quot; (J. Wakely)</comment>
      <text xml:space="preserve" bytes="1620">{{cpp/concept/title|DefaultInsertable}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be default-constructed in-place by a given allocator.

===Requirements===

The type {{ttb|T}} is {{concept|DefaultInsertable}} into the {{concept|Container}} {{ttb|X}} whose {{tt|value_type}} is identical to {{tt|T}} if, given
{{dsc begin}}
{{dsc | {{ttb|A}} | an allocator type}}
{{dsc | {{ttb|m}} | an lvalue of type {{ttb|A}} }}
{{dsc | {{ttb|p}} | the pointer of type {{ttb|T*}} prepared by the container }}
{{dsc end}}

where {{ttb|X::allocator_type}} is identical to {{c|std::allocator_traits&lt;A&gt;::rebind_alloc&lt;T&gt;}},

the following expression is well-formed: 

{{source|
std::allocator_traits&lt;A&gt;::construct(m, p);
}}


If {{ttb|X}} is not allocator-aware, the term is defined as if {{ttb|A}} were {{lc|std::allocator&lt;T&gt;}}, except that no allocator object needs to be created, and user-defined specializations of {{lc|std::allocator}} are not instantiated.

===Notes===
By default, this will call placement-new, as by {{c|::new((void*)p) T() }} (that is, [[cpp/language/value_initialization|value-initialize]] the object pointed to by {{tt|p}}). If value-initialization is undesirable, for example, if the object is of non-class type and zeroing out is not needed, it can be avoided by providing a [http://stackoverflow.com/a/21028912/273767 custom Allocator::construct].

===See Also===
{{dsc begin}}
{{dsc | {{concept|DefaultConstructible}} }}
{{dsc | {{concept|CopyInsertable}} }}
{{dsc | {{concept|MoveInsertable}} }}
{{dsc | {{concept|EmplaceConstructible}} }}
{{dsc | {{concept|Erasable}} }}
{{dsc end}}</text>
      <sha1>5by5glh21h0621tleehpype6knnyifg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Destructible</title>
    <ns>0</ns>
    <id>5436</id>
    <revision>
      <id>82708</id>
      <parentid>82699</parentid>
      <timestamp>2015-12-30T10:06:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ references too</comment>
      <text xml:space="preserve" bytes="1376">{{cpp/concept/title|Destructible}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be destructed.

===Requirements===

The type {{tt|T}} satisfies {{tt|Destructible}} if

Given
* {{tt|u}}, a expression of type {{tt|T}}

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Post-conditions
|-
| {{c|u.~T()}}
| All resources owned by {{tt|u}} are reclaimed, no exceptions are thrown.
|}

===Notes===
Destructors are called implicitly at the end of [[cpp/language/lifetime|object lifetime]] such as when leaving [[cpp/language/scope|scope]] or by the [[cpp/language/delete|delete-expression]]. Explicit destructor call as shown in the type requirement table is rare.

Thanks to [[cpp/language/operator_member_access#Built-in_member_access_operators|pseudo destructor call]], all scalar types meet the requirement of {{ttb|Destructible}}, while array types and reference types do not. Note that {{lc|std::is_destructible}} allows arrays and reference types.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_destructible}}
{{dsc end}}

[[de:cpp/concept/Destructible]]
[[es:cpp/concept/Destructible]]
[[fr:cpp/concept/Destructible]]
[[it:cpp/concept/Destructible]]
[[ja:cpp/concept/Destructible]]
[[pt:cpp/concept/Destructible]]
[[ru:cpp/concept/Destructible]]
[[zh:cpp/concept/Destructible]]</text>
      <sha1>sbd7xbpzdq7gfuumbmauvx1ps38tv0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/EmplaceConstructible</title>
    <ns>0</ns>
    <id>9645</id>
    <revision>
      <id>81964</id>
      <parentid>78142</parentid>
      <timestamp>2015-11-21T00:27:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2218</comment>
      <text xml:space="preserve" bytes="1236">{{cpp/concept/title|EmplaceConstructible {{mark since c++11}} }}
{{cpp/concept/navbar}}

Specifies that an object of the type can be constructed from a given set of arguments in uninitialized storage by a given allocator.

===Requirements===

The type {{ttb|T}} is {{concept|EmplaceConstructible}} into the {{concept|Container}} {{ttb|X}} (whose {{tt|value_type}} is identical to {{tt|T}}) from the arguments {{ttb|args}} if, given
{{dsc begin}}
{{dsc | {{ttb|A}} | an allocator type}}
{{dsc | {{ttb|m}} | an lvalue of type {{ttb|A}} }}
{{dsc | {{ttb|p}} | the pointer of type {{ttb|T*}} prepared by the container }}
{{dsc | {{ttb|args}} | zero or more arguments }}
{{dsc end}}

where {{ttb|X::allocator_type}} is identical to {{c|std::allocator_traits&lt;A&gt;::rebind_alloc&lt;T&gt;}},

the following expression is well-formed:

{{source|
std::allocator_traits&lt;A&gt;::construct(m, p, args);
}}

If {{ttb|X}} is not allocator-aware, the term is defined as if {{ttb|A}} were {{lc|std::allocator&lt;T&gt;}}, except that no allocator object needs to be created, and user-defined specializations of {{lc|std::allocator}} are not instantiated.

===See Also===
{{dsc begin}}
{{dsc | {{concept|CopyInsertable}} }}
{{dsc | {{concept|MoveInsertable}} }}
{{dsc end}}</text>
      <sha1>6wyx994z3kr2noq5rmgd6ynwtjmn9o0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/EqualityComparable</title>
    <ns>0</ns>
    <id>5434</id>
    <revision>
      <id>74980</id>
      <parentid>66756</parentid>
      <timestamp>2015-01-01T09:37:33Z</timestamp>
      <contributor>
        <username>Frog</username>
        <id>3671</id>
      </contributor>
      <minor/>
      <comment>Added missing full stop.</comment>
      <text xml:space="preserve" bytes="1606">{{cpp/concept/title|EqualityComparable}}
{{cpp/concept/navbar}}

The type must work with == operator and the result should have standard semantics.

===Requirements===

The type {{tt|T}} satisfies {{tt|EqualityComparable}} if

Given
* {{tt|a}}, {{tt|b}}, and {{tt|c}}, expressions of type {{tt|T}} or {{tt|const T}}

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Return type||Requirements
|-
| {{ttb|a {{==}} b}}
| [[cpp/language/implicit_cast|implicitly convertible]] to {{c|bool}}
| Establishes equivalence relation with the following properties:
* For all values of {{tt|a}}, {{c|a {{==}} a}} yields {{c|true}}. 
* If {{c|a {{==}} b}}, then {{c|b {{==}} a}}
* If {{c|a {{==}} b}} and {{c|b {{==}} c}}, then {{c|a {{==}} c}}
|-
|}

===Notes===
To satisfy this requirement, types that do not have built-in [[cpp/language/operator_comparison|comparison operators]] have to provide a [[cpp/language/operators|user-defined operator==]].

For the types that are both {{tt|EqualityComparable}} and {{concept|LessThanComparable}}, the C++ standard library makes a distinction between ''equality'', which is the value of the expression {{c|a {{==}} b}} and ''equivalence'', which is the value of the expression {{c|!(a &lt; b) &amp;&amp; !(b &lt; a)}}.


[[de:cpp/concept/EqualityComparable]]
[[es:cpp/concept/EqualityComparable]]
[[fr:cpp/concept/EqualityComparable]]
[[it:cpp/concept/EqualityComparable]]
[[ja:cpp/concept/EqualityComparable]]
[[pt:cpp/concept/EqualityComparable]]
[[ru:cpp/concept/EqualityComparable]]
[[zh:cpp/concept/EqualityComparable]]</text>
      <sha1>r2gsxgmx36t97cx8ajzoninkktbsoht</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Erasable</title>
    <ns>0</ns>
    <id>13752</id>
    <revision>
      <id>82707</id>
      <parentid>82698</parentid>
      <timestamp>2015-12-30T10:05:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Notes */ sp</comment>
      <text xml:space="preserve" bytes="1486">{{cpp/concept/title|Erasable}}
{{cpp/concept/navbar}}

Specifies that an object of the type can be destroyed by a given {{concept|Allocator}}.

===Requirements===

The type {{ttb|T}} is {{concept|Erasable}} from the {{concept|Container}} {{ttb|X}} whose {{tt|value_type}} is identical to {{tt|T}} if, given
{{dsc begin}}
{{dsc | {{ttb|A}} | an allocator type}}
{{dsc | {{ttb|m}} | an lvalue of type {{ttb|A}} }}
{{dsc | {{ttb|p}} | the pointer of type {{ttb|T*}} prepared by the container }}
{{dsc end}}

where {{ttb|X::allocator_type}} is identical to {{c|std::allocator_traits&lt;A&gt;::rebind_alloc&lt;T&gt;}},

the following expression is well-formed:

{{source|
std::allocator_traits&lt;A&gt;::destroy(m, p);
}}

If {{ttb|X}} is not allocator-aware, the term is defined as if {{ttb|A}} were {{c|std::allocator&lt;T&gt;}}, except that no allocator object needs to be created, and user-defined specializations of {{lc|std::allocator}} are not instantiated.

===Notes===
All [[cpp/container|standard library containers]] require that their element type satisfies Erasable.

With the default allocator, this requirement is equivalent to the validity of {{c|p-&gt;~T()}}, which accepts class types with accessible destructors and all scalar types, but rejects array types, function types, reference types, and void.

===See Also===
{{dsc begin}}
{{dsc | {{concept|CopyInsertable}} }}
{{dsc | {{concept|MoveInsertable}} }}
{{dsc | {{concept|EmplaceConstructible}} }}
{{dsc | {{concept|Destructible}} }}
{{dsc end}}</text>
      <sha1>fszaefzp8cqoobobza9dvmg61z0p9jn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Eraseable</title>
    <ns>0</ns>
    <id>13753</id>
    <redirect title="cpp/concept/Erasable" />
    <revision>
      <id>72712</id>
      <timestamp>2014-09-20T07:55:17Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>D41D8CD98F moved page [[cpp/concept/Eraseable]] to [[cpp/concept/Erasable]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/concept/Erasable]]</text>
      <sha1>biccepoivehed6sppel8m82fon9nmrs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/FormattedInputFunction</title>
    <ns>0</ns>
    <id>9560</id>
    <revision>
      <id>85627</id>
      <parentid>62006</parentid>
      <timestamp>2016-04-27T22:17:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Standard library */ +</comment>
      <text xml:space="preserve" bytes="2952">{{cpp/concept/title|FormattedInputFunction}}
{{cpp/concept/navbar}}

===Requirements===

A {{tt|FormattedInputFunction}} is a stream input function that performs the following:

* Constructs an object of type {{l2tt|cpp/io/basic_istream/sentry}} with automatic storage duration and with the {{tt|noskipws}} argument set to {{c|false}}, which performs the following
:* if {{ltt|cpp/io/ios_base/iostate|eofbit}} or {{ltt|cpp/io/ios_base/iostate|badbit}} are set on the input stream, sets the {{tt|failbit}} as well, and if exceptions on failbit are enabled in this input stream's exception mask, throws {{l2tt|cpp/io/ios_base/failure}}.
:* flushes the tie()'d output stream, if applicable
:* if {{tt|ios_base::skipws}} flag is set on this input stream, extracts and discards characters from the input stream until one of the following becomes true:
::* the next available character on the input stream is not a whitespace character, as tested by the {{lc|std::ctype}} facet of the locale currently imbued in this input stream. The non-whitespace character is not extracted.
::* the end of the stream is reached, in which case {{tt|failbit}} and {{tt|eofbit}} are set and if the stream is on for exceptions on one of these bits, {{l2tt|cpp/io/ios_base/failure}} is thrown.
* Checks the status of the sentry by calling {{tt|sentry::operator bool()}}, which is equivalent to {{l2tt|cpp/io/basic_ios/good}}.
* If the sentry returned {{c|false}} or sentry's constructor threw an exception, no input takes place
* If the sentry returned {{c|true}}, performs the input as if by calling {{c|rdbuf()-&gt;sbumpc()}} or {{c|rdbuf()-&gt;sgetc()}}.
:* if the end of the stream is reached (the call to {{c|rdbuf()-&gt;sbumpc()}} or {{c|rdbuf()-&gt;sgetc()}} returns {{c|Traits::eof()}}, sets {{tt|eofbit}}. If exceptions on eofbit are enabled in this stream's exception mask, throws {{l2tt|cpp/io/ios_base/failure}}.
:* if an exception is thrown during input, sets {{tt|badbit}} in the input stream. If exceptions on badbit are enabled in this stream's exception mask, the exception is also rethrown.
:* If no exception was thrown, returns {{c|*this}}.
* In any event, whether terminating by exception or returning, the sentry's destructor is called before leaving this function.

===Standard library===

The following standard library functions are {{concept|FormattedInputFunction}}s.

* {{l2tt|cpp/io/basic_istream/operator_gtgt|operator&gt;&gt;{{dsc small|(int, long, double, void*, bool)}}}}
* {{ltt|cpp/io/basic_istream/operator_gtgt2|operator&gt;&gt;{{dsc small|(std::basic_istream, char&amp;)}}}}
* {{ltt|cpp/io/basic_istream/operator_gtgt2|operator&gt;&gt;{{dsc small|(std::basic_istream, char*)}}}}
* {{ltt|cpp/utility/bitset/operator_ltltgtgt2|operator&gt;&gt;{{dsc small|(std::basic_istream, std::bitset)}}}}
* {{ltt|cpp/string/basic_string/operator_ltltgtgt|operator&gt;&gt;{{dsc small|(std::basic_istream, std::string)}}}}
* {{tt|operator&gt;&gt;}}, when called on the return value of {{lc|std::get_money}}</text>
      <sha1>1uty8sb5l2cvd1vtpdcc7nq1b1qzv97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/FormattedOutputFunction</title>
    <ns>0</ns>
    <id>9608</id>
    <revision>
      <id>85626</id>
      <parentid>49409</parentid>
      <timestamp>2016-04-27T22:17:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Standard library */ adjust</comment>
      <text xml:space="preserve" bytes="2455">{{cpp/concept/title|FormattedOutputFunction}}
{{cpp/concept/navbar}}

===Requirements===

A {{tt|FormattedOutputFunction}} is a stream output function that performs the following:

* Constructs an object of type {{l2tt|cpp/io/basic_ostream/sentry}} with automatic storage duration, which performs the following
:* if {{ltt|cpp/io/ios_base/iostate|eofbit}} or {{ltt|cpp/io/ios_base/iostate|badbit}} are set on the output stream, sets the {{tt|failbit}} as well, and if exceptions on failbit are enabled in this output stream's exception mask, throws {{l2tt|cpp/io/ios_base/failure}}.
:* flushes the tie()'d output stream, if applicable.
* Checks the status of the sentry by calling {{tt|sentry::operator bool()}}, which is equivalent to {{l2tt|cpp/io/basic_ios/good}}.
* If the sentry returned {{c|false}} or sentry's constructor threw an exception, no output takes place
* If the sentry returned {{c|true}}, attempts to perform the desired output by inserting the characters into the output stream as if by calling {{c|rdbuf()-&gt;sputc()}} or {{c|rdbuf()-&gt;xsputn()}}. Additionally, {{c|rdbuf()-&gt;overflow()}} and {{c|rdbuf()-&gt;sync()}} may be called, but no other virtual member function of {{lc|std::basic_streambuf}}.
:* If the output could not be generated, sets {{tt|failbit}}, If exceptions on failbit are enabled in this stream's exception mask, throws {{l2tt|cpp/io/ios_base/failure}}.
:* if an exception is thrown during output, sets {{tt|badbit}} in the output stream. If exceptions on badbit are enabled in this stream's exception mask, the exception is also rethrown.
:* If no exception was thrown, returns {{c|*this}}.
* In any event, whether terminating by exception or returning, the sentry's destructor is called before leaving this function.

===Standard library===

The following standard library functions are {{concept|FormattedOutputFunction}}s.

* {{l2tt|cpp/io/basic_ostream/operator_ltlt|operator&lt;&lt;{{dsc small|(int, long, double, void*, bool)}}}}
* {{ltt|cpp/io/basic_ostream/operator_ltlt2|operator&lt;&lt;{{dsc small|(std::basic_ostream, char)}}}}
* {{ltt|cpp/io/basic_ostream/operator_ltlt2|operator&lt;&lt;{{dsc small|(std::basic_ostream, char*)}}}}
* {{ltt|cpp/utility/bitset/operator_ltltgtgt2|operator&lt;&lt;{{dsc small|(std::basic_ostream, std::bitset)}}}}
* {{ltt|cpp/string/basic_string/operator_ltltgtgt|operator&lt;&lt;{{dsc small|(std::basic_ostream, std::string)}}}}
* {{tt|operator&lt;&lt; }}, when called on the return value of {{lc|std::put_money}}</text>
      <sha1>l7anfnn38fjrood8wezs2dts2cmrz9b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/ForwardIterator</title>
    <ns>0</ns>
    <id>5441</id>
    <revision>
      <id>81867</id>
      <parentid>79446</parentid>
      <timestamp>2015-11-15T22:08:33Z</timestamp>
      <contributor>
        <ip>94.15.157.162</ip>
      </contributor>
      <comment>Fixed typo</comment>
      <text xml:space="preserve" bytes="2945">{{cpp/concept/title|ForwardIterator}}
{{cpp/concept/navbar}}

A {{tt|ForwardIterator}} is an {{concept|Iterator}} that can read data from the pointed-to element.

Unlike {{concept|InputIterator}} and {{concept|OutputIterator}}, it can be used in multipass algorithms.

===Requirements===
The type {{tt|It}} satisfies {{tt|ForwardIterator}} if

* The type {{tt|It}} satisfies {{concept|InputIterator}}
* The type {{tt|It}} satisfies {{concept|DefaultConstructible}}
* Objects of the type {{tt|It}} provide ''multipass guarantee'' described below
* The type {{tt|std::iterator_traits&lt;It&gt;::reference}} must be exactly
:* {{tt|T&amp;}} if {{tt|It}} satisfies {{concept|OutputIterator}} ({{tt|It}} is mutable)
:* {{tt|const T&amp;}} otherwise ({{tt|It}} is constant),
:(where {{tt|T}} is the type denoted by {{c|std::iterator_traits&lt;It&gt;::value_type}})
* Equality and inequality comparison is defined over all iterators for the same underlying sequence{{rev inl|since=c++14| and the value initialized-iterators}}.

And, given
* {{tt|i}}, dereferenceable iterator of type {{tt|It}}
* {{tt|reference,}} the type denoted by {{tt|std::iterator_traits&lt;It&gt;::reference}}

The following expressions must be valid and have their specified effects 

{|table class=&quot;wikitable&quot;
|-
!Expression||Return type||Equivalent expression||Notes
|-
|{{c|i++}}|| {{c|It}} || {{c|It ip{{=}}i; ++i; return ip;}} ||
|-
|{{c|*i++}}|| {{c|reference}} || || 
|-
|}

A {{tt|mutable ForwardIterator}} is a {{tt|ForwardIterator}} that additionally satisfies the {{concept|OutputIterator}} requirements.

===Multipass guarantee===
Given {{tt|a}} and {{tt|b}}, dereferenceable iterators of type {{tt|It}}

* If {{tt|a}} and {{tt|b}} compare equal ({{ttb|a {{==}} b}} is contextually convertible to {{tt|true}}) then either they are both non-dereferenceable or {{tt|*a}} and {{tt|*b}} are references bound to the same object
* Assignment through a mutable {{tt|ForwardIterator}} iterator cannot invalidate the iterator (implicit due to {{tt|reference}} defined as a true reference)
* incrementing a copy of {{tt|a}} does not change the value read from {{tt|a}} (formally, either {{tt|It}} is a raw pointer type or the expression {{c|(void)++It(a), *a}} is equivalent to the expression {{c|*a}})
* {{ttb|a {{==}} b}} implies {{ttb|++a {{==}} ++b}}

{{rev begin}}
{{rev|since=c++14|
===Singular iterators===
A [[cpp/language/value_initialization|value-initialized]] {{tt|ForwardIterator}} behaves like the past-the-end iterator of some unspecified empty container: it compares equal to all value-initialized {{tt|ForwardIterator}}s of the same type.}}
{{rev end}}

===See also===
* [[cpp/iterator|Iterator library]]

[[de:cpp/concept/ForwardIterator]]
[[es:cpp/concept/ForwardIterator]]
[[fr:cpp/concept/ForwardIterator]]
[[it:cpp/concept/ForwardIterator]]
[[ja:cpp/concept/ForwardIterator]]
[[pt:cpp/concept/ForwardIterator]]
[[ru:cpp/concept/ForwardIterator]]
[[zh:cpp/concept/ForwardIterator]]</text>
      <sha1>badt2vygxx74jnpcrglghhaaxxq4311</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/FunctionObject</title>
    <ns>0</ns>
    <id>13170</id>
    <revision>
      <id>91115</id>
      <parentid>81603</parentid>
      <timestamp>2017-03-20T08:10:36Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="956">{{cpp/concept/title|FunctionObject}}
{{cpp/concept/navbar}}

A {{concept|FunctionObject}} type is the type of an object that can be used on the left of the function call operator.

===Requirements===

The type {{tt|T}} satisfies {{tt|FunctionObject}} if

* The type {{tt|T}} satisfies {{lc|std::is_object}}, and

Given
* {{tt|f}}, a value of type {{tt|T}} or {{tt|const T}}
* {{tt|args}}, suitable argument list, which may be empty

The following expressions must be valid:

{|table class=wikitable
|-
!Expression||Requirements
|-
| {{c|1=f(args)}}
| performs a function call
|}

===Notes===
Functions and references to functions are not function object types, but can be used where function object types are expected due to function-to-pointer [[cpp/language/implicit_cast|implicit conversion]].

===Standard library===
* All [[cpp/language/pointer#Pointers_to_functions|pointers to functions]] satisfy this requirement.

[[zh:cpp/concept/FunctionObject]]</text>
      <sha1>nabnp5dju0fmv9ajb1ff47usk1hn1iu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Hash</title>
    <ns>0</ns>
    <id>9618</id>
    <revision>
      <id>67869</id>
      <parentid>67868</parentid>
      <timestamp>2014-03-04T03:45:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1390">{{cpp/concept/title|Hash}}
{{cpp/concept/navbar}}

A {{concept|Hash}} is a function object for which the output depends only on the input and has a very low probability of yielding the same output given different input values.

===Requirements===

The type {{tt|T}} satisfies {{tt|Hash}} if

* The type {{tt|T}} satisfies {{concept|FunctionObject}}, {{concept|CopyConstructible}}, {{concept|Destructible}}, and

Given
* {{tt|h}}, a value of type {{tt|T}} or {{tt|const T}}, whose argument type is {{tt|Key}}
* {{tt|k}}, a value of type convertible to {{tt|Key}} or {{tt|const Key}}
* {{tt|u}}, an [[cpp/language/value_category|lvalue]] expression of type {{tt|Key}}

The following expressions must be valid and have their specified effects


{|table class=wikitable
|-
!Expression||Return type||Requirements
|-
| {{c|1=h(k)}}
| {{tt|std::size_t}}
| the returned value depends only on the value of {{tt|k}} {{rev inl|since=c++14|for the duration of the program}}
All evaluations of {{c|h(k)}} {{rev inl|since=c++14|executed within a given execution of a program}} yield the same result for the same value of {{tt|k}}.

The probability of {{c|h(a){{==}}h(b)}} for {{c|a!{{=}}b}} should approach {{c|1.0/std::numeric_limits&lt;std::size_t&gt;::max()}}.
|-
| {{c|1=h(u)}}
| {{tt|std::size_t}}
| {{tt|u}} is not modified
|}

===Standard library===
{{dsc begin}}
{{dsc | {{lc|std::hash}} }}
{{dsc end}}</text>
      <sha1>b1p9k7w0y9uae1ypoymmpjmbxcjqpv4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/InputIterator</title>
    <ns>0</ns>
    <id>5439</id>
    <revision>
      <id>87583</id>
      <parentid>79447</parentid>
      <timestamp>2016-09-11T14:56:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+note that *it may return by value</comment>
      <text xml:space="preserve" bytes="2814">{{cpp/concept/title|InputIterator}}
{{cpp/concept/navbar}}

An {{tt|InputIterator}} is an {{concept|Iterator}} that can read from the pointed-to element.  {{tt|InputIterator}}s only guarantee validity for single pass algorithms: once an {{tt|InputIterator}} {{c|i}} has been incremented, all copies of its previous value may be invalidated.

===Requirements===
The type {{tt|It}} satisfies {{tt|InputIterator}} if
* The type {{tt|It}} satisfies {{concept|Iterator}}
* The type {{tt|It}} satisfies {{concept|EqualityComparable}}

And, given
* {{tt|i}} and {{tt|j}}, values of type {{c|It}} or {{c|const It}}
* {{tt|reference}}, the type denoted by {{c|std::iterator_traits&lt;It&gt;::reference}}
* {{tt|value_type}}, the type denoted by {{c|std::iterator_traits&lt;It&gt;::value_type}}

The following expressions must be valid and have their specified effects 
{|table class=&quot;wikitable&quot;
|-
!Expression||Return||Equivalent expression||Notes
|-
|{{c|i !{{=}} j}}||contextually convertible to {{c|bool}}||{{c|!(i {{==}} j)}}||'''Precondition''': {{c|(i, j)}} is in the domain of {{c|{{==}}}}.
|-
|{{c|*i}}||{{c|reference}}, convertible to {{c|value_type}}||If {{c|i {{==}} j}} and {{c|(i, j)}} is in the domain of {{c|{{==}}}} then this is equivalent to {{c|*j}}.||

'''Precondition''': {{c|i}} is dereferenceable.

The expression {{c|(void)*i, *i}} is equivalent to {{c|*i}}.

|-
|{{c|i-&gt;m}}|| ||{{c|(*i).m}}||'''Precondition''': {{c|i}} is dereferenceable.
|-
|{{c|++i}}||{{c|It&amp;}}|| ||

'''Precondition''': {{c|i}} is dereferenceable.

'''Postcondition''': {{c|i}} is dereferenceable or {{c|i}} is past-the-end.

'''Postcondition''': Any copies of the previous value of {{c|i}} are no longer required to be either dereferenceable or to be in the domain of {{c|{{==}}}}.

|-
|{{c|(void)i++}}|| ||{{c|(void)++i}}||
|-
|{{c|*i++}}||convertible to {{c|value_type}}
|{{c|
value_type x {{=}} *i;
++i;
return x;
}} ||
|-
|}

===Notes===
&quot;in the domain of {{tt|{{==}}}}&quot; means equality comparison is defined between the two iterator values. For input iterators, equality comparison does not need to be defined for all values, and the set of the values in the domain of {{tt|{{==}}}} may change over time.

The {{c|reference}} type for an input iterator that is not also a {{concept|ForwardIterator}} does not have to be a reference type: dereferencing an input iterator may return a proxy object or {{c|value_type}} itself by value (as in the case of {{ltt|cpp/iterator/istreambuf_iterator|std::istreambuf_iterator}}).

===See also===
* [[cpp/iterator|Iterator library]]

[[de:cpp/concept/InputIterator]]
[[es:cpp/concept/InputIterator]]
[[fr:cpp/concept/InputIterator]]
[[it:cpp/concept/InputIterator]]
[[ja:cpp/concept/InputIterator]]
[[pt:cpp/concept/InputIterator]]
[[ru:cpp/concept/InputIterator]]
[[zh:cpp/concept/InputIterator]]</text>
      <sha1>loh8ftjiiq7v343kh06i6zbxow4vi4m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Iterator</title>
    <ns>0</ns>
    <id>5438</id>
    <revision>
      <id>91817</id>
      <parentid>88383</parentid>
      <timestamp>2017-03-31T19:58:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="2478">{{cpp/concept/title|Iterator}}
{{cpp/concept/navbar}}

The {{tt|Iterator}} concept describes types that can be used to identify and traverse the elements of a container.

{{tt|Iterator}} is the base concept used by other iterator types: {{concept|InputIterator}}, {{concept|OutputIterator}}, {{concept|ForwardIterator}}, {{concept|BidirectionalIterator}}, and {{concept|RandomAccessIterator}}. Iterators can be thought of as an abstraction of pointers.

===Requirements===
The type {{tt|It}} satisfies {{tt|Iterator}} if
* The type {{tt|It}} satisfies {{concept|CopyConstructible}}, and
* The type {{tt|It}} satisfies {{concept|CopyAssignable}}, and
* The type {{tt|It}} satisfies {{concept|Destructible}}, and
* [[cpp/language/value_category|lvalues]] of type {{tt|It}} satisfy {{concept|Swappable}}, and
* {{c|std::iterator_traits&lt;It&gt;}} has member typedefs {{tt|value_type}}, {{tt|difference_type}}, {{tt|reference}}, {{tt|pointer}}, and {{tt|iterator_category}} {{mark unreviewed dr|LWG|2578}}, and

Given
* {{tt|r}}, an lvalue of type {{tt|It}}.

The following expressions must be valid and have their specified effects:

{|table class=wikitable
|-
!Expression||Return Type||Precondition
|-
|{{c|*r}}
|unspecified
|{{ttb|r}} is ''dereferenceable'' (see below)
|-
|{{c|++r}}
|{{c|It&amp;}}
|{{ttb|r}} is ''incrementable'' (the behavior of the expression {{c|++r}} is defined)
|}

===Dereferenceable iterators===

Iterators for which the behavior of the expression {{c|*i}} is defined are called ''dereferenceable''.

{{tt|Iterator}}s are not dereferenceable if
* they are [[cpp/container/vector/end|past-the-end iterators]] (including pointers past the end of an array) or [[cpp/container/forward_list/before_begin|before-begin iterators]]. Such iterators may be dereferenceable in a particular implementation, but the library never assumes that they are.
* they are ''singular'' iterators, that is, iterators that are not associated with any sequence. A null pointer, as well as a default-constructed pointer (holding an indeterminate value) is singular
* they were [[cpp/container#Iterator_invalidation|invalidated]] by one of the iterator-invalidating operations on the sequence to which they refer.

===See also===
* [[cpp/iterator|Iterator library]]

[[de:cpp/concept/Iterator]]
[[es:cpp/concept/Iterator]]
[[fr:cpp/concept/Iterator]]
[[it:cpp/concept/Iterator]]
[[ja:cpp/concept/Iterator]]
[[pt:cpp/concept/Iterator]]
[[ru:cpp/concept/Iterator]]
[[zh:cpp/concept/Iterator]]</text>
      <sha1>dj5brrvew887b2umt6q9a3qd49uzwzy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/LessThanComparable</title>
    <ns>0</ns>
    <id>5435</id>
    <revision>
      <id>87875</id>
      <parentid>87874</parentid>
      <timestamp>2016-10-10T18:55:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>seealso to Compare.. perhaps we should move the full strict weak ordering part of Compare here, and just say that Compare is a BinaryPredicate that is LessThanComparable?</comment>
      <text xml:space="preserve" bytes="1873">{{cpp/concept/title|LessThanComparable}}
{{cpp/concept/navbar}}
The type must work with &lt; operator and the result should have standard semantics.

===Requirements===

The type {{tt|T}} satisfies {{tt|LessThanComparable}} if

Given
* {{tt|a}}, {{tt|b}}, and {{tt|c}}, expressions of type {{tt|T}} or {{tt|const T}}

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Return type||Requirements
|-
| {{c|a &lt; b}}
| [[cpp/language/implicit_cast|implicitly convertible]] to {{c|bool}}
| Establishes [[enwiki:Strict_weak_ordering|strict weak ordering]] relation with the following properties
* For all {{tt|a}}, {{c|!(a &lt; a)}}
* If {{c|a &lt; b}} then {{c|!(b &lt; a)}}
* If {{c|a &lt; b}} and {{c|b &lt; c}} then {{c|a &lt; c}}
* Defining {{c|equiv(a, b)}} as {{c|!(a &lt; b) &amp;&amp; !(b &lt; a)}}, if {{c|equiv(a, b)}} and {{c|equiv(b, c)}}, then {{c|equiv(a, c)}}
|}

===Notes===
To satisfy this requirement, types that do not have built-in [[cpp/language/operator_comparison|comparison operators]] have to provide a [[cpp/language/operators#Relational_operators|user-defined operator&lt;]]

For the types that are both {{concept|EqualityComparable}} and {{tt|LessThanComparable}}, the C++ standard library makes a distinction between ''equality'', which is the value of the expression {{c|a {{==}} b}} and ''equivalence'', which is the value of the expression {{c|!(a &lt; b) &amp;&amp; !(b &lt; a)}}.

===See also===
{{dsc begin}}
{{dsc concept | cpp/concept/Compare | a {{concept|BinaryPredicate}} that establishes an ordering relation}}
{{dsc end}}

[[de:cpp/concept/LessThanComparable]]
[[es:cpp/concept/LessThanComparable]]
[[fr:cpp/concept/LessThanComparable]]
[[it:cpp/concept/LessThanComparable]]
[[ja:cpp/concept/LessThanComparable]]
[[pt:cpp/concept/LessThanComparable]]
[[ru:cpp/concept/LessThanComparable]]
[[zh:cpp/concept/LessThanComparable]]</text>
      <sha1>42jmi63peu70p37jmvl94rgoulflcf9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/LiteralType</title>
    <ns>0</ns>
    <id>12979</id>
    <revision>
      <id>91944</id>
      <parentid>91883</parentid>
      <timestamp>2017-03-31T20:13:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="2987">{{cpp/concept/title|LiteralType}}
{{cpp/concept/navbar}}

Specifies that a type is a ''literal type''. Literal types are the types of [[cpp/language/constexpr|constexpr variables]] and they can be constructed, manipulated, and returned from [[cpp/language/constexpr|constexpr functions]].

{{cpp/concept/concept note}}

===Requirements===
A literal type is any of the following:
{{rev begin}}
{{rev|since=c++14|
* possibly cv-qualified {{c|void}} (so that constexpr functions can return void);
}}
{{rev end}}
* scalar type;
* reference type;
* an array of literal type;
* possibly cv-qualified class type that has all of the following properties:
:* has a trivial destructor,
:* is either
::* an aggregate type,
::* a type with at least one constexpr (possibly template) constructor that is not a copy or move constructor,
{{rev begin}}
{{rev|since=c++17|
::* a [[cpp/language/lambda|closure]] type
}}
{{rev end}}
{{rev begin}}
{{rev|since=c++17|{{mark unreviewed dr|CWG|2096}}
:* for unions, at least one non-static data member is of non-volatile literal type,
:* for non-unions, all non-static data members and base classes are of non-volatile literal types.
}}
{{rev|until=c++17|
:* all non-static data members and base classes are of non-volatile literal types.
}}
{{rev end}}

===Example===
{{example |
literal type that extends string literals:
 | code=
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;

class conststr
{
    const char* p;
    std::size_t sz;
public:
    template&lt;std::size_t N&gt;
    constexpr conststr(const char(&amp;a)[N]) : p(a), sz(N - 1) {}

    constexpr char operator[](std::size_t n) const
    {
        return n &lt; sz ? p[n] : throw std::out_of_range(&quot;&quot;);
    }
    constexpr std::size_t size() const { return sz; }
};

constexpr std::size_t countlower(conststr s, std::size_t n = 0,
                                             std::size_t c = 0)
{
    return n == s.size() ? c :
           s[n] &gt;= 'a' &amp;&amp; s[n] &lt;= 'z' ? countlower(s, n + 1, c + 1) :
                                        countlower(s, n + 1, c);
}

// output function that requires a compile-time constant, for testing
template&lt;int n&gt;
struct constN
{
    constN() { std::cout &lt;&lt; n &lt;&lt; '\n'; }
};

int main()
{
    std::cout &lt;&lt; &quot;the number of lowercase letters in \&quot;Hello, world!\&quot; is &quot;;
    constN&lt;countlower(&quot;Hello, world!&quot;)&gt;(); // implicitly converted to conststr
}
 | output=
the number of lowercase letters in &quot;Hello, world!&quot; is 9
}}


=== Defect reports ===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1951|std=C++11 (class type)&lt;br/&gt; C++14 (void)|before=unclear if cv-qualified {{tt|void}} and class types are literal types | after=they are }}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_literal_type}}
{{dsc end}}

[[de:cpp/concept/LiteralType]]
[[es:cpp/concept/LiteralType]]
[[fr:cpp/concept/LiteralType]]
[[it:cpp/concept/LiteralType]]
[[ja:cpp/concept/LiteralType]]
[[pt:cpp/concept/LiteralType]]
[[ru:cpp/concept/LiteralType]]
[[zh:cpp/concept/LiteralType]]</text>
      <sha1>f3u5hyzos84aiodcxduuft6m717jnjj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Lockable</title>
    <ns>0</ns>
    <id>8927</id>
    <revision>
      <id>65579</id>
      <parentid>42105</parentid>
      <timestamp>2013-09-21T01:11:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso mutex</comment>
      <text xml:space="preserve" bytes="942">{{cpp/concept/title|Lockable}}
{{cpp/concept/navbar}}

The {{tt|Lockable}} concept extends the {{concept|BasicLockable}} concept to include attempted locking.

===Requirements===

* {{concept|BasicLockable}}
For type {{ttb|L}} to be {{tt|Lockable}}, it must meet the above condition as well as the following:
{|table class=wikitable
|-
!Expression||Effects||Return value
|-
|{{c|m.try_lock()}}
|Attempts to acquire the lock for the current execution agent without blocking.  If an exception is thrown, no lock is obtained.
|{{c|true}} if the lock was acquired, {{c|false}} otherwise
|}

===See also===
* [[cpp/thread|Thread support library]]
* {{concept|Mutex}}
* {{concept|BasicLockable}}
* {{concept|TimedLockable}}

[[de:cpp/concept/Lockable]]
[[es:cpp/concept/Lockable]]
[[fr:cpp/concept/Lockable]]
[[it:cpp/concept/Lockable]]
[[ja:cpp/concept/Lockable]]
[[pt:cpp/concept/Lockable]]
[[ru:cpp/concept/Lockable]]
[[zh:cpp/concept/Lockable]]</text>
      <sha1>3p1ea5lz8i6dlhrv3kh8s2292rjvs3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/MoveAssignable</title>
    <ns>0</ns>
    <id>5428</id>
    <revision>
      <id>91894</id>
      <parentid>88355</parentid>
      <timestamp>2017-03-31T20:01:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="1745">{{cpp/concept/title|MoveAssignable {{mark since c++11}}}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be assigned from an [[cpp/language/value_category|rvalue]] argument. 

===Requirements===
The type {{tt|T}} satisfies {{tt|MoveAssignable}} if

Given
* {{tt|t}}, a modifiable [[cpp/language/value_category|lvalue expression]] of type {{tt|T}}
* {{tt|rv}}, an [[cpp/language/value_category|rvalue]] expression of type {{tt|T}}

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Return type||Return value||Post-conditions
|-
| {{c|1=t = rv}}
| {{tt|T&amp;}}
| {{tt|t}}
| If {{tt|t}} and {{tt|rv}} do not refer to the same object{{mark unreviewed dr|LWG|2468}}, the value of {{tt|t}} is equivalent to the value of {{tt|rv}} before the assignment.
The new value of {{tt|rv}} is unspecified
|}

===Notes===
The type does not have to implement [[cpp/language/move_operator|move assignment operator]] in order to satisfy this type requirement: a [[cpp/language/as_operator|copy assignment operator]] that takes its parameter by value or as a {{tt|const Type&amp;}}, will bind to rvalue argument.

If a MoveAssignable class implements a move assignment operator, it may also implement [[cpp/utility/move|move semantics]] to take advantage of the fact that the value of {{tt|rv}} after assignment is unspecified.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_move_assignable}}
{{dsc end}}

[[de:cpp/concept/MoveAssignable]]
[[es:cpp/concept/MoveAssignable]]
[[fr:cpp/concept/MoveAssignable]]
[[it:cpp/concept/MoveAssignable]]
[[ja:cpp/concept/MoveAssignable]]
[[pt:cpp/concept/MoveAssignable]]
[[ru:cpp/concept/MoveAssignable]]
[[zh:cpp/concept/MoveAssignable]]</text>
      <sha1>q0koeb5cskz9i2kk6unxbkj8aooah4c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/MoveConstructible</title>
    <ns>0</ns>
    <id>5427</id>
    <revision>
      <id>70283</id>
      <parentid>66749</parentid>
      <timestamp>2014-05-16T09:09:37Z</timestamp>
      <contributor>
        <ip>115.249.242.50</ip>
      </contributor>
      <comment>Type is T</comment>
      <text xml:space="preserve" bytes="1703">{{cpp/concept/title|MoveConstructible {{mark since c++11}}}}
{{cpp/concept/navbar}}

Specifies that an instance of the type can be constructed from an [[cpp/language/value_category|rvalue]] argument.

===Requirements===

The type {{tt|T}} satisfies {{tt|MoveConstructible}} if

Given
* {{tt|rv}}, an [[cpp/language/value_category|rvalue]] expression of type {{tt|T}}
* {{tt|u}}, an arbitrary identifier

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Post-conditions
|-
| {{c|1=T u = rv;}}
| The value of {{tt|u}} is equivalent to the value of {{tt|rv}} before the initialization.
The new value of {{tt|rv}} is unspecified
|-
| {{c|T(rv)}}
| The value of {{tt|T(rv)}} is equivalent to the value of {{tt|rv}} before the initialization.
The new value of {{tt|rv}} is unspecified.
|}

===Notes===
A class does not have to implement a [[cpp/language/move constructor|move constructor]] to satisfy this type requirement: a [[cpp/language/copy constructor|copy constructor]] that takes a {{tt|const T&amp;}} argument can bind rvalue expressions.

If a MoveConstructible class implements a move constructor, it may also implement [[cpp/utility/move|move semantics]] to take advantage of the fact that the value of {{tt|rv}} after construction is unspecified.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_move_constructible}}
{{dsc end}}

[[de:cpp/concept/MoveConstructible]]
[[es:cpp/concept/MoveConstructible]]
[[fr:cpp/concept/MoveConstructible]]
[[it:cpp/concept/MoveConstructible]]
[[ja:cpp/concept/MoveConstructible]]
[[pt:cpp/concept/MoveConstructible]]
[[ru:cpp/concept/MoveConstructible]]
[[zh:cpp/concept/MoveConstructible]]</text>
      <sha1>srwz4uwikyemqhxarhsci4fb2qeqpy6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/MoveInsertable</title>
    <ns>0</ns>
    <id>9644</id>
    <revision>
      <id>81963</id>
      <parentid>81962</parentid>
      <timestamp>2015-11-21T00:25:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweak description</comment>
      <text xml:space="preserve" bytes="1941">{{cpp/concept/title|MoveInsertable {{mark since c++11}} }}
{{cpp/concept/navbar}}

Specifies that an object of the type can be constructed into uninitialized storage from an rvalue of that type by a given allocator.

===Requirements===

The type {{ttb|T}} is {{concept|MoveInsertable}} into the container {{ttb|X}} whose {{tt|value_type}} is identical to {{tt|T}} if, given
{{dsc begin}}
{{dsc | {{ttb|A}} | an allocator type}}
{{dsc | {{ttb|m}} | an lvalue of type {{ttb|A}} }}
{{dsc | {{ttb|p}} | the pointer of type {{ttb|T*}} prepared by the container }}
{{dsc | {{ttb|rv}} | rvalue expression of type {{ttb|T}}}}
{{dsc end}}

where {{ttb|X::allocator_type}} is identical to {{c|std::allocator_traits&lt;A&gt;::rebind_alloc&lt;T&gt;}},

the following expression is well-formed: 

{{source|
std::allocator_traits&lt;A&gt;::construct(m, p, rv);
}}

And after evaluation, the value of {{tt|*p}} is equivalent to the value formerly held by {{tt|rv}} ({{tt|rv}} remains valid, but is in an unspecified state.)

If {{ttb|X}} is not allocator-aware, the term is defined as if {{ttb|A}} were {{lc|std::allocator&lt;T&gt;}}, except that no allocator object needs to be created, and user-defined specializations of {{lc|std::allocator}} are not instantiated.

===Notes===
If {{tt|A}} is {{c|std::allocator&lt;T&gt;}}, then this will call placement-new, as by {{c|::new((void*)p) T(rv)}}.

If {{c|std::allocator&lt;T&gt;}} or a similar allocator is used, a class does not have to implement a [[cpp/language/move constructor|move constructor]] to satisfy this type requirement: a [[cpp/language/copy constructor|copy constructor]] that takes a {{tt|const T&amp;}} argument can bind rvalue expressions. If a MoveInsertable class implements a move constructor, it may also implement [[cpp/utility/move|move semantics]] to take advantage of the fact that the value of {{tt|rv}} after construction is unspecified.

===See Also===
{{dsc begin}}
{{dsc | {{concept|CopyInsertable}} }}
{{dsc end}}</text>
      <sha1>rm0ig6ocrooq2eq3qiauib087odzdm9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Mutex</title>
    <ns>0</ns>
    <id>12992</id>
    <revision>
      <id>91994</id>
      <parentid>86019</parentid>
      <timestamp>2017-04-01T05:38:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="3078">{{cpp/concept/title|Mutex}}
{{cpp/concept/navbar}}

The {{tt|Mutex}} concept extends the {{concept|Lockable}} concept to include inter-thread synchronization.

===Requirements===

* {{concept|Lockable}}
* {{concept|DefaultConstructible}}
* {{concept|Destructible}}
* not copyable
* not movable

For object {{ttb|m}} of {{tt|Mutex}} type.
* The expression {{c|m.lock()}} has the following properties
:* Behaves as an atomic operation.
:* Blocks the calling thread until exclusive ownership of the mutex can be obtained.
:* Prior {{c|m.unlock()}} operations on the same mutex ''synchronize-with'' this lock operation (equivalent to release-acquire {{lc|std::memory_order}})
:* The behavior is undefined if the calling thread already owns the mutex (except if m is {{lc|std::recursive_mutex}} or {{lc|std::recursive_timed_mutex}})
:* Exception of type {{lc|std::system_error}} may be thrown on errors, with the following error codes:
::* {{lc|std::errc::operation_not_permitted}} if the calling thread does not have required privileges
::* {{lc|std::errc::resource_deadlock_would_occur}} if the implementation detects that this operation would lead to deadlock
{{rev begin}}
{{rev|until=c++17|{{mark unreviewed dr|LWG}}&lt;!--LWG #2309--&gt;
::* {{lc|std::errc::device_or_resource_busy}} if the mutex is already locked
}}
{{rev end}}
* The expression {{c|m.try_lock()}} has the following properties
:* Behaves as an atomic operation.
:* Attempts to obtain exclusive ownership of the mutex for the calling thread without blocking. If ownership is not obtained, returns immediately. The function is allowed to spuriously fail and return even if the mutex is not currently owned by another thread.
:* If {{tt|try_lock()}} succeeds, prior {{tt|unlock()}} operations on the same object ''synchronize-with'' this operation (equivalent to release-acquire {{lc|std::memory_order}}). {{tt|lock()}} does not synchronize with a failed {{tt|try_lock()}}
:* Does not throw exceptions.
* The expression {{c|m.unlock()}} has the following properties
:* Behaves as an atomic operation.
:* Releases the calling thread's ownership of the mutex and ''synchronizes-with'' the subsequent successful lock operations on the same object.
:* The behavior is undefined if the calling thread does not own the mutex.
:* Does not throw exceptions.
* All lock and unlock operations on a single mutex occur in a single total order that can be viewed as [[cpp/atomic/memory_order#Modification_order|modification order]] of an atomic variable: the order is specific to this individual mutex.

===Library types===
The following standard library types satisfy {{concept|Mutex}}:
* {{lc|std::mutex}}
* {{lc|std::recursive_mutex}}
* {{lc|std::timed_mutex}}
* {{lc|std::recursive_timed_mutex}}
* {{lc|std::shared_mutex}}

===See also===
* [[cpp/thread|Thread support library]]
* {{concept|Lockable}}
* {{concept|TimedMutex}}

[[de:cpp/concept/Mutex]]
[[es:cpp/concept/Mutex]]
[[fr:cpp/concept/Mutex]]
[[it:cpp/concept/Mutex]]
[[ja:cpp/concept/Mutex]]
[[pt:cpp/concept/Mutex]]
[[ru:cpp/concept/Mutex]]
[[zh:cpp/concept/Mutex]]</text>
      <sha1>gcss009oydppustdxvgii4faknu94zf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/NullablePointer</title>
    <ns>0</ns>
    <id>9850</id>
    <revision>
      <id>82008</id>
      <parentid>80796</parentid>
      <timestamp>2015-11-24T13:13:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <text xml:space="preserve" bytes="2730">{{cpp/concept/title|NullablePointer {{mark since c++11}}}}
{{cpp/concept/navbar}}

Specifies that the type is a pointer-like object which can be compared to {{lc|std::nullptr_t}} objects.

===Requirements===

The type must meet all of the following concept requirements:

* {{concept|EqualityComparable}}
* {{concept|DefaultConstructible}}
* {{concept|CopyConstructible}}
* {{concept|CopyAssignable}}
* {{concept|Destructible}}

In addition, a value-initialized object of the type must produce a null value of that type. This null value shall only be equivalent to itself. Default initialization of the type may have an indeterminate value.

An object of the type must be contextually convertible to bool. The effect of this conversion returns false if the value is equivalent to its null value and true otherwise.

None of the operations that this type performs may throw exceptions.

The type must satisfy the following additional expressions, given two values {{tt|p}} and {{tt|q}} that are of the type, and that {{tt|np}} is a value of {{lc|std::nullptr_t}} type (possibly {{c|const}} qualified):

{{dsc begin}}
{{dsc hitem | Expression | Effects}}
{{dsc | {{c|Type p(np);}}
{{c|Type p {{=}} np;}} | Afterwards, {{tt|p}} is equivalent to {{c|nullptr}} }}
{{dsc | {{c|Type(np)}} |  a temporary object that is equivalent to {{c|nullptr}} }}
{{dsc | {{c|p {{=}} np }} |  Must return a {{tt|Type&amp;}}, and afterwards, {{tt|p}} is equivalent to {{c|nullptr}} }}
{{dsc | {{c|p !{{=}} q}} | Must return a value that is contextually convertible to bool.
The effect is {{tt|!(p {{=}}{{=}} q)}} }}
{{dsc | {{c|p {{=}}{{=}} np}}
{{c|np {{=}}{{=}} p}}| Must return a value that is contextually convertible to bool.
The effect is {{tt|(p {{=}}{{=}} Type())}} }}
{{dsc | {{c|p !{{=}} np}}
{{c|np !{{=}} p}}| Must return a value that is contextually convertible to bool.
The effect is {{tt|!(p {{=}}{{=}} np)}} }}
{{dsc end}}

===Notes===
Note that dereferencing ({{tt|operator*}} or {{tt|operator-&gt;}}) is not required of a NullablePointer type. A minimalistic type that satisfies these requirements is
{{source|1=
class handle {
    int id;
  public:
    handle(std::nullptr_t = nullptr) : id(0) { }
    explicit operator bool() { return id != 0; }
    friend bool operator ==(handle l, handle r) { return l.id == r.id; }
    friend bool operator !=(handle l, handle r) { return !(l == r); }
};
}}

===Standard library===
The following types must satisfy {{tt|NullablePointer}}:

* The member types {{tt|X::pointer}}, {{tt|X::const_pointer}}, {{tt|X::void_pointer}} and {{tt|X::const_void_pointer}} of every {{concept|Allocator}} type {{tt|X}}
* The member type {{tt|X::pointer}} of {{lc|std::unique_ptr}}
* The type {{lc|std::exception_ptr}}</text>
      <sha1>bjit9a10i1nuvanj1forps3vnzep2su</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/NumericType</title>
    <ns>0</ns>
    <id>13726</id>
    <revision>
      <id>91865</id>
      <parentid>88578</parentid>
      <timestamp>2017-03-31T20:00:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="1089">{{cpp/concept/title|NumericType}}
{{cpp/concept/navbar}}
Specifies that the type can be used as the template argument of {{lc|std::valarray}}

=== Requirements ===
for a type {{ttb|T}} to be an {{tt|NumericType}}:
* {{tt|T}} cannot be a reference
* {{tt|T}} cannot be cv-qualified
* If {{tt|T}} is a class, it
:* does not overload {{c|operator&amp;}}
:* has no pure virtual member functions (is not [[cpp/language/abstract class|abstract]])
:* has a public [[cpp/language/default_constructor|default constructor]]
:* has a public [[cpp/language/copy_constructor|copy constructor]] {{c|T::T(const T&amp;)}}
:* has a public [[cpp/language/destructor|destructor]]
:* has a public assignment operator {{c|T&amp; T::operator{{=}}(const T&amp;)}} or {{c|T&amp; T::operator{{=}}(T)}}
:* default constructor followed by assignment has the same effect as copy constructor
:* copy constructor with the value {{tt|T()}} has the same effect as value-initialization {{mark unreviewed dr|LWG|2699}}
:* destructor followed by copy constructor has the same effect as assignment
* No operation on {{tt|T}} may throw exceptions</text>
      <sha1>8mea4i7550qlddy6ladszjfwaz0v2dl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/OutputIterator</title>
    <ns>0</ns>
    <id>5440</id>
    <revision>
      <id>78488</id>
      <parentid>77160</parentid>
      <timestamp>2015-05-24T09:57:15Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>LWG2437 got in</comment>
      <text xml:space="preserve" bytes="3632">{{cpp/concept/title|OutputIterator}}
{{cpp/concept/navbar}}

An {{tt|OutputIterator}} is an {{concept|Iterator}} that can write to the pointed-to element. 

An example of a type that implements {{tt|OutputIterator}} is [[cpp/iterator/ostream_iterator|std::ostream_iterator]].

When {{concept|ForwardIterator}}, {{concept|BidirectionalIterator}}, or {{concept|RandomAccessIterator}} satisfies the {{concept|OutputIterator}} requirements in addition to its own requirements, it is described as '''mutable'''.

===Requirements===

The type {{tt|X}} satisfies {{tt|OutputIterator}} if

* The type {{tt|X}} satisfies {{concept|Iterator}}
* {{tt|X}} is a class type or a pointer type

And, given
* {{tt|o}}, a value of some type that is writable to the output iterator (there may be multiple types that are writable, e.g. if {{tt|operator{{=}}}} may be a template. There is no notion of {{tt|value_type}} as for the input iterators)
* {{tt|r}}, an lvalue of type {{tt|X}},

The following expressions must be valid and have their specified effects
{|table class=&quot;wikitable&quot;
|-
!Expression||Return||Equivalent expression||Pre-condition||Post-conditions||Notes
|-
|{{c|*r {{=}} o}}
|(not used)
|
|{{tt|r}} is dereferencable
|{{tt|r}} is incrementable
|After this operation {{tt|r}} is not required to be dereferenceable and any copies of the previous value of {{tt|r}} are no longer required to be dereferenceable or incrementable.
|-
|{{c|++r}}
|{{c|X&amp;}}
|
|{{tt|r}} is incrementable
|{{c|&amp;r {{==}} &amp;++r}}, {{tt|r}} is dereferencable or past-the-end
|After this operation {{tt|r}} is not required to be incrementable and any copies of the previous value of {{tt|r}} are no longer required to be dereferenceable or incrementable.
|-
|{{c|r++}}
|convertible to {{c|const X&amp;}}
|{{c|
X temp {{=}} r;
++r;
return temp;
}}
|
|
|
|-
|{{c|*r++ {{=}} o}}
|(not used)
|{{c|*r {{=}} o;
++r;}} 
|
|
|
|}

===Notes===
The only valid use of {{tt|operator*}} with an output iterator is on the left of an assignment: {{tt|operator*}} may return a proxy object, which defines a member {{tt|operator{{=}}}} (which may be a template)

Equality and inequality may not be defined for output iterators. Even if an {{tt|operator{{==}}}} is defined, {{tt|x {{==}} y}} need not imply {{tt|++x {{==}} ++y}}.

Assignment through the same value of an output iterator happens only once: algorithms on output iterators must be single-pass algorithms.

Assignment through an output iterator is expected to alternate with incrementing. Double-increment is undefined behavior (C++ standard currently claims that double increment is supported, contrary to the STL documentation; this is [http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2035 LWG #2035])

Pure output-only iterator is allowed to declare its {{tt|iterator_traits&lt;X&gt;::value_type}}, {{tt|iterator_traits&lt;X&gt;::difference_type}}, {{tt|iterator_traits&lt;X&gt;::pointer}}, and {{tt|iterator_traits&lt;X&gt;::reference}} to be {{c|void}} (and iterators such as {{lc|std::back_insert_iterator}} do just that).

===Standard library===
The following standard library iterators are output iterators that are not forward iterators:
* {{lc|std::ostream_iterator}}
* {{lc|std::ostreambuf_iterator}}
* {{lc|std::insert_iterator}}
* {{lc|std::back_insert_iterator}}
* {{lc|std::front_insert_iterator}}

===See also===
* [[cpp/iterator|Iterator library]]

[[de:cpp/concept/OutputIterator]]
[[es:cpp/concept/OutputIterator]]
[[fr:cpp/concept/OutputIterator]]
[[it:cpp/concept/OutputIterator]]
[[ja:cpp/concept/OutputIterator]]
[[pt:cpp/concept/OutputIterator]]
[[ru:cpp/concept/OutputIterator]]
[[zh:cpp/concept/OutputIterator]]</text>
      <sha1>1jgiq5qf962g21kvfh44gad2s2tox2v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/PODType</title>
    <ns>0</ns>
    <id>5543</id>
    <revision>
      <id>86499</id>
      <parentid>86498</parentid>
      <timestamp>2016-07-05T00:36:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Undo revision 86498 by [[Special:Contributions/178.18.77.1|178.18.77.1]] ([[User talk:178.18.77.1|talk]])</comment>
      <text xml:space="preserve" bytes="1316">{{cpp/concept/title|PODType}}
{{cpp/concept/navbar}}
Specifies that the type is POD (Plain Old Data) type. This means the type is compatible with the types used in the C programming language, can be manipulated using C library functions: it can be created with {{lc|std::malloc}}, it can be copied with {{lc|std::memmove}}, etc, and can be exchanged with C libraries directly, in its binary form. 

{{cpp/concept/concept note}}

===Requirements===
Either:
* a [[cpp/types/is_scalar|scalar type]];
* a class type ({{c|class}} or {{c|struct}} or {{c|union}}) that is:
{{rev begin}}
{{rev | until=c++11 |
* an [[cpp/language/aggregate_initialization|aggregate type]];
* has no non-static members that are non-POD;
* has no members of reference type;
* has no user-defined copy constructor;
* has no user-defined destructor;
}}
{{rev | since=c++11 |
* a {{rlp|TrivialType|trivial type}};
* a {{rlp|StandardLayoutType|standard layout type}};
* has no non-static members that are non-POD;
}}
{{rev end}}
* an array of such type.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_pod}}
{{dsc end}}

[[de:cpp/concept/PODType]]
[[es:cpp/concept/PODType]]
[[fr:cpp/concept/PODType]]
[[it:cpp/concept/PODType]]
[[ja:cpp/concept/PODType]]
[[pt:cpp/concept/PODType]]
[[ru:cpp/concept/PODType]]
[[zh:cpp/concept/PODType]]</text>
      <sha1>hepge2ti811hm86t2ajatbhxzp7pfoa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Predicate</title>
    <ns>0</ns>
    <id>9767</id>
    <revision>
      <id>67873</id>
      <parentid>67102</parentid>
      <timestamp>2014-03-04T04:10:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/callable/function object</comment>
      <text xml:space="preserve" bytes="752">{{cpp/concept/title|Predicate}}
{{cpp/concept/navbar}}

The {{tt|Predicate}} concept describes a function object that takes a single iterator argument that is dereferenced and used to return a value testable as a {{c|bool}}.

In other words, if an algorithm takes a {{tt|Predicate pred}} and an iterator {{tt|first}}, it should be able to test the iterator using the predicate via a construct like {{c|if (pred(*first)) {...} }}. 

The function object {{tt|pred}} shall not apply any non-constant function through the dereferenced iterator. This function object may be a pointer to function or an object of a type with an appropriate function call operator.

===Requirements===
* {{concept|FunctionObject}}

{{todo|better describe actual requirements}}</text>
      <sha1>lg4dk9au4qp50xje6dbcjgn76i7sx9d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/RandomAccessIterator</title>
    <ns>0</ns>
    <id>5520</id>
    <revision>
      <id>91838</id>
      <parentid>88372</parentid>
      <timestamp>2017-03-31T19:59:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="3249">{{cpp/concept/title|RandomAccessIterator}}
{{cpp/concept/navbar}}

A {{tt|RandomAccessIterator}} is a {{concept|BidirectionalIterator}} that can be moved to point to any element in constant time.

A pointer to an element of an array satisfies all requirements of {{tt|RandomAccessIterator}}

===Requirements===
The type {{tt|It}} satisfies {{tt|RandomAccessIterator}} if

* The type {{tt|It}} satisfies {{concept|BidirectionalIterator}}

And, given
* {{tt|value_type}}, the type denoted by {{c|std::iterator_traits&lt;It&gt;::value_type}}
* {{tt|difference_type}}, the type denoted by {{c|std::iterator_traits&lt;It&gt;::difference_type}}
* {{tt|reference}}, the type denoted by {{c|std::iterator_traits&lt;It&gt;::reference}}
* {{tt|i}}, {{tt|a}}, {{tt|b}}, objects of type {{tt|It}} or {{tt|const It}}
* {{tt|r}}, a value of type {{tt|It&amp;}}
* {{tt|n}}, an integer of type {{tt|difference_type}}

The following expressions must be valid and have their specified effects 

{|table class=&quot;wikitable&quot;
|-
!Expression||Return type||Operational semantics||Notes
|-
|{{c|r +{{=}} n}}
|{{c|It&amp;}}
|{{c|1=difference_type m = n;
if (m &gt;= 0) while (m--) ++r;
else while (m++) --r;
return r;}}
|
*{{ttb|n}} can be both positive or negative
*The complexity is constant (that is, the implementation cannot actually execute the while loop shown in operational semantics)
|-
|{{c|a + n}}
{{c|n + a}}
|{{c|It}}
|{{c|1=It temp = a;
return temp += n;}} 
|
*{{ttb|n}} can be both positive or negative
*{{c|1=a + n == n + a}}
|-
|{{c|r -{{=}} n}}||{{c|It&amp;}}||{{c|return r +{{=}} -n;}}
|The absolute value of {{tt|n}} must be within the range of representable values of {{tt|difference_type}}. {{mark unreviewed dr|LWG|2519}}
|
|-
|{{c|i - n}}||{{c|It}}||{{c|1=It temp = i;
return temp -= n;}}||
|-
|{{c|b - a}}||{{tt|difference_type}}||{{c|return n;}}||
Precondition:
* there exists a value {{tt|n}} of type {{tt|difference_type}} such that {{c|1=a+n==b}}
Postcondition:
* {{c|1=b == a + (b - a)}}.
|-
|{{c|i[n]}}||convertible to {{tt|reference}}||{{c|*(i + n)}}||
|-
|{{c|a &lt; b}}||contextually convertible to {{c|bool}}||{{c|b - a &gt; 0}}
|Strict total ordering relation:
* {{ttb|!(a &lt; a)}}
* if {{ttb|a &lt; b}} then {{ttb|!(b &lt; a)}}
* if {{ttb|a &lt; b}} and {{ttb|b &lt; c}} then {{ttb|a &lt; c}}
* {{ttb|a &lt; b}} or {{ttb|b &lt; a}} or {{ttb|a {{==}} b}} &lt;br&gt; (exactly one of the expressions is true)
|-
|{{c|a &gt; b}}||contextually convertible to {{c|bool}}||{{c|b &lt; a}}||Total ordering relation opposite to {{c|a &lt; b}}
|-
|{{c|a &gt;{{=}} b}}||contextually convertible to {{c|bool}}||{{c|!(a &lt; b)}}||
|-
|{{c|a &lt;{{=}} b}}||contextually convertible to {{c|bool}}||{{c|!(a &gt; b)}}||
|}

The above rules imply that {{tt|RandomAccessIterator}} also implements {{concept|LessThanComparable}}.

A {{tt|mutable RandomAccessIterator}} is a {{tt|RandomAccessIterator}} that additionally satisfies the {{concept|OutputIterator}} requirements.

===See also===
* [[cpp/iterator|Iterator library]]

[[de:cpp/concept/RandomAccessIterator]]
[[es:cpp/concept/RandomAccessIterator]]
[[fr:cpp/concept/RandomAccessIterator]]
[[it:cpp/concept/RandomAccessIterator]]
[[ja:cpp/concept/RandomAccessIterator]]
[[pt:cpp/concept/RandomAccessIterator]]
[[ru:cpp/concept/RandomAccessIterator]]
[[zh:cpp/concept/RandomAccessIterator]]</text>
      <sha1>rbea5i583bdhejavfvcvct2bvk6aefu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/RandomNumberDistribution</title>
    <ns>0</ns>
    <id>8897</id>
    <revision>
      <id>87878</id>
      <parentid>86196</parentid>
      <timestamp>2016-10-11T14:54:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>updated to match current std more closely</comment>
      <text xml:space="preserve" bytes="8664">{{cpp/concept/title|RandomNumberDistribution}}
{{cpp/concept/navbar}}

A {{tt|RandomNumberDistribution}} is a function object returning random numbers according to a [[enwiki:Probability density function|probability density function]] {{math|p(x)}} or a [[enwiki:Discrete probability distribution|discrete probability distribution]] {{math|P(x{{su|b=i}})}}.

=== Requirements ===
The type {{tt|D}} satisfies {{tt|RandomNumberDistribution}} if

* {{tt|D}} satisfies {{concept|CopyConstructible}}
* {{tt|D}} satisfies {{concept|CopyAssignable}}

Given
* {{tt|T}}, the type named by {{c|D::result_type}}
* {{tt|P}}, the type named by {{c|D::param_type}}, which 
:* satisfies {{concept|CopyConstructible}}
:* satisfies {{concept|CopyAssignable}}
:* satisfies {{concept|EqualityComparable}}
:* has a constructor taking identical arguments as each of the constructors of {{tt|D}} that take arguments corresponding to the distribution parameters.
:* has a member function with the identical name, type, and semantics, as every member function of {{tt|D}} that returns a parameter of the distribution
:* declares a member typedef {{c|using distribution_type {{=}} D;}}
* {{tt|d}}, a value of type {{tt|D}}
* {{tt|x}} and {{tt|y}}, (possibly const) values of type {{tt|D}}
* {{tt|p}}, a (possibly const) value of type {{tt|P}}
* {{tt|g}}, {{tt|g1}}, {{tt|g2}}, lvalues of a type satisfying {{concept|UniformRandomBitGenerator}}
* {{tt|os}}, lvalue of a specialization of {{lc|std::basic_ostream}}
* {{tt|is}}, lvalue of a specialization of {{lc|std::basic_istream}}

The following expressions must be valid and have their specified effects

{|class=wikitable
!Expression||Type||Notes||Complexity
|-
|{{tt|D::result_type}} || {{tt|T}} || An [[cpp/language/type|arithmetic type]] || compile-time
|-
|{{tt|D::param_type}} || {{tt|P}} || || compile-time
|-
|{{tt|D()}} || || creates a distribution indistinguishable from any other default-constructed {{tt|D}} || constant
|-
|{{tt|D(p)}} || || creates a distribution indistinguishable from {{tt|D}} constructed directly from the values used to construct {{tt|p}} || Same as {{tt|p}}'s construction
|-
|{{tt|d.reset()}} || {{tt|void}} || Resets the internal state of the distribution. The next call to {{tt|operator()}} on {{tt|d}} will not depend on values produced by any engine prior to {{tt|reset()}}. || constant
|-
|{{tt|x.param()}} || {{tt|P}} || Returns {{tt|p}} such that {{c|D(p).param() {{==}} p}} || No worse than {{tt|D(p)}}
|-
|{{tt|d.param(p)}} || {{tt|void}} || Postcondition: {{c|d.param() {{==}} p}} || No worse than {{tt|D(p)}}
|-
|{{tt|d(g)}} || {{tt|T}} || The sequence of numbers returned by successive invocations of this call with the same {{tt|g}} are randomly distributed according to the distribution parametrized by {{tt|d.param()}} || Amortized constant number of invocations of {{tt|g}}
|-
|{{tt|d(g,p)}} || {{tt|T}} || The sequence of numbers returned by successive invocations of this call with the same {{tt|g}} are randomly distributed according to the distribution parametrized by {{tt|p}} || Amortized constant number of invocations of {{tt|g}}
|-
|{{tt|x.min()}} || {{tt|T}} || the greatest lower bound on the values potentially returned by {{tt|x}}’s {{tt|operator()}}, as determined by the current values of {{tt|x}}’s parameters || constant
|-
|{{tt|x.max()}} || {{tt|T}} || the least upper bound on the values potentially returned by {{tt|x}}’s {{tt|operator()}}, as determined by the current values of {{tt|x}}’s parameters || constant
|-
|{{tt|x {{==}} y}} || {{tt|bool}} || Establishes an equivalence relation. Returns {{tt|true}} if {{c|x.param() {{==}} y.param()}} and future infinite sequences of values that would be generated by repeated invocations of {{c|x(g1)}} and {{c|y(g2)}} would be equal as long as {{c|g1 {{==}} g2}}. || constant
|-
|{{tt|x !{{=}} y}} || {{tt|bool}} || {{tt|!(x {{==}} y)}} || constant
|-
|{{tt|os &lt;&lt; x}} || Reference to the type of {{tt|os}} || Writes a textual representation of the distribution parameters and internal state to {{tt|os}}. The formatting flags and fill character of {{tt|os}} are unchanged. ||
|-
|{{tt|is &gt;&gt; d}} || Reference to the type of {{tt|is}} || Restores the distribution parameters and internal state with data read from {{tt|is}}. The formatting flags of {{tt|is}} are unchanged. The data must have been written using a stream with the same locale, {{tt|CharT}} and {{tt|Traits}} stream template parameters, otherwise the behavior is undefined. If bad input is encountered, {{c|is.setstate(std::ios::failbit)}} is called, which may throw {{lc|std::ios_base::failure}}. {{tt|d}} is unchanged in that case. ||
|-
|}

===Notes===
The parameters of a distribution object may be changed either permanently, by using {{c|d.param(p)}} or just for the duration of a single operator() call, by using {{c|d(g,p)}}.

Calls to const member functions of the distribution and {{c|os &lt;&lt; d}} do not affect the sequence of numbers produced by repeated {{c|d(g)}}.

===Standard library===
The following standard library components satisfy {{concept|RandomNumberDistribution}}

{{dsc begin}}
{{dsc inc | cpp/numeric/random/dsc uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/dsc uniform_real_distribution}}
{{dsc class | cpp/numeric/random/bernoulli_distribution | produces {{c|bool}} values on a [[enwiki:Bernoulli_distribution | Bernoulli distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/binomial_distribution | produces integer values on a  [[enwiki:Binomial_distribution | binomial distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/negative_binomial_distribution | produces integer values on a  [[enwiki:Negative_binomial_distribution | negative binomial distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/geometric_distribution | produces integer values on a  [[enwiki:Geometric_distribution | geometric distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/poisson_distribution | produces integer values on a  [[enwiki:Poisson_distribution | poisson distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/exponential_distribution | produces real values on an  [[enwiki:Exponential_distribution | exponential distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/gamma_distribution | produces real values on an  [[enwiki:Gamma_distribution | gamma distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/weibull_distribution |produces real values on a  [[enwiki:Weibull_distribution | Weibull distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/extreme_value_distribution | produces real values on an  [[enwiki:Generalized_extreme_value_distribution | extreme value distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/normal_distribution | produces real values on a  [[enwiki:Normal_distribution | standard normal (Gaussian) distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/lognormal_distribution | produces real values on a  [[enwiki:Lognormal_distribution | lognormal distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/chi_squared_distribution | produces real values on a  [[enwiki:Chi-squared_distribution | chi-squared distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/cauchy_distribution | produces real values on a  [[enwiki:Cauchy_distribution | Cauchy distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/fisher_f_distribution | produces real values on a  [[enwiki:F-distribution | Fisher's F-distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/student_t_distribution | produces real values on a  [[enwiki:Student's t-distribution | Student's t-distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/discrete_distribution | produces random integers on a discrete distribution. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/piecewise_constant_distribution | produces real values distributed on constant subintervals.| notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/piecewise_linear_distribution | produces real values distributed on defined subintervals. | notes={{mark c++11}}}}
{{dsc end}}

[[de:cpp/concept/RandomNumberDistribution]]
[[es:cpp/concept/RandomNumberDistribution]]
[[fr:cpp/concept/RandomNumberDistribution]]
[[it:cpp/concept/RandomNumberDistribution]]
[[ja:cpp/concept/RandomNumberDistribution]]
[[pt:cpp/concept/RandomNumberDistribution]]
[[ru:cpp/concept/RandomNumberDistribution]]
[[zh:cpp/concept/RandomNumberDistribution]]</text>
      <sha1>ie7fq5rqq6l1ej1aorephnb1vl1hh48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/ReversibleContainer</title>
    <ns>0</ns>
    <id>9774</id>
    <revision>
      <id>64396</id>
      <parentid>49417</parentid>
      <timestamp>2013-08-16T01:42:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>LWG issue 2105 (fixed in c++14)</comment>
      <text xml:space="preserve" bytes="2018">{{cpp/concept/title|ReversibleContainer}}
{{cpp/concept/navbar}}

A {{ttb|ReversibleContainer}} is a {{concept|Container}} that has iterators that meet the requirements of either {{concept|BidirectionalIterator}} or {{concept|RandomAccessIterator}}.  Such iterators allow a {{ttb|ReversibleContainer}} to be iterated over in reverse.

===Requirements===

{{dsc begin}}
{{dsc|{{ttb|X}}|Container type}}
{{dsc|{{ttb|T}}|Element type}}
{{dsc|{{ttb|a}}, {{ttb|b}}|Objects of type {{ttb|X}}}}
{{dsc end}}

====Types====

{|class=wikitable
!expression||return type||conditions||complexity
|-
|{{c|X::reverse_iterator}}|| iterator type whose value type is {{tt|T}} || {{c|reverse_iterator&lt;iterator&gt; }} || compile time
|-
|{{c|X::const_reverse_iterator}}|| constant iterator type whose value type is {{tt|T}} || {{c|reverse_iterator&lt;const_iterator&gt; }} || compile time
|-
|}

====Methods====

{|class=wikitable
!expression||return type||conditions||complexity
|-
|{{c|a.rbegin()}}|| {{c|reverse_iterator;}} {{c|const_reverse_iterator}} for constant {{tt|a}} || {{c|reverse_iterator(end())}} || constant
|-
|{{c|a.rend()}}|| {{c|reverse_iterator;}} {{c|const_reverse_iterator}} for constant {{tt|a}} || {{c|reverse_iterator(begin())}} || constant
|-
|{{c|a.crbegin()}}|| {{c|const_reverse_iterator}} || {{c|const_cast&lt;X const&amp;&gt;(a).rbegin();}} || constant
|-
|{{c|a.crend()}}|| {{c|const_reverse_iterator}} || {{c|const_cast&lt;X const&amp;&gt;(a).rend();}} || constant
|-
|}


===Example===
{{example
 | The following example iterates over a vector (which has random-access iterators) in reverse.
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;int&gt; v = {3, 1, 4, 1, 5, 9};

    for(std::vector&lt;int&gt;::reverse_iterator i = v.rbegin(); i != v.rend(); ++i) {
        std::cout &lt;&lt; *i &lt;&lt; '\n';
    }
}
 | output=
9
5
1
4
1
3
}}


===Standard library===
* {{lc|std::array}}
* {{lc|std::deque}}
* {{lc|std::list}}
* {{lc|std::vector}}
* {{lc|std::map}}
* {{lc|std::multimap}}
* {{lc|std::set}}
* {{lc|std::multiset}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/SeedSequence</title>
    <ns>0</ns>
    <id>8896</id>
    <revision>
      <id>82771</id>
      <parentid>76613</parentid>
      <timestamp>2016-01-03T03:55:29Z</timestamp>
      <contributor>
        <username>Korval</username>
        <id>95</id>
      </contributor>
      <text xml:space="preserve" bytes="2132">{{cpp/concept/title|SeedSequence}}
{{cpp/concept/navbar}}

A {{tt|seed sequence}} is an object that produces unsigned integer values {{math|i}} in the range {{math|0 ≤ i &lt; 2{{su|p=32}}}} based on a consumed range of integer data.

===Requirements===
*{{ttb|S}} is a SeedSequence.
*{{ttb|q}} is an object of {{tt|S}} and {{ttb|r}} is a potentially constant object of {{tt|S}}.
*{{ttb|T}} is the {{tt|result_type}}.
*{{ttb|ib}},{{ttb|ie}} are {{concept|InputIterator}}s with a {{tt|value_type}} of unsigned integer values of at least 32&amp;nbsp;bits.
*{{ttb|il}} is an {{c|std::initializer_list&lt;T&gt;}}.
*{{ttb|rb}},{{ttb|re}} are {{rlp|OutputIterator|mutable}} {{concept|RandomAccessIterator}}s with a {{tt|value_type}} of unsigned integer values of at least 32&amp;nbsp;bits.
*{{ttb|ob}} is an {{concept|OutputIterator}}.

{|class=wikitable
!Expression||Type||Notes||Complexity
|-
|{{tt|S::result_type}}||{{tt|T}}||Unsigned integer of at least 32 bits||compile-time
|-
|{{tt|S()}}|| ||Creates a seed sequence with the same default values as other objects of type {{tt|S}}||constant
|-
|{{tt|S(ib,ie)}}|| ||Creates a seed sequence based on the supplied input bits by {{math|[{{tt|ib}},{{tt|ie}})}} || {{math|O(ie-ib)}}
|-
|{{tt|S(il)}}|| ||The same as {{tt|S(il.begin(), il.end())}} ||
|-
|{{tt|q.generate(rb,re)}}|| {{tt|void}} || Fills {{math|[{{tt|rb}},{{tt|re}})}} with 32-bit quantities depending on the initial supplied values and potential previous calls to {{tt|generate}}. If {{tt|rb {{==}} re}}, it does nothing.  || {{math|O(re-rb)}}
|-
|{{tt|r.size()}}|| {{tt|size_t}} || The amount of 32-bit integers copied by {{tt|param}}. || constant
|-
|{{tt|r.param(ob)}}|| {{tt|void}} || Copies 32-bit values to {{tt|ob}} that would reproduce the current state of the object if passed to a constructor of {{tt|S}}. || {{math|O(r.size())}}
|-
|}

===See also===
*{{lc|std::seed_seq}}

[[de:cpp/concept/SeedSequence]]
[[es:cpp/concept/SeedSequence]]
[[fr:cpp/concept/SeedSequence]]
[[it:cpp/concept/SeedSequence]]
[[ja:cpp/concept/SeedSequence]]
[[pt:cpp/concept/SeedSequence]]
[[ru:cpp/concept/SeedSequence]]
[[zh:cpp/concept/SeedSequence]]</text>
      <sha1>2adsbm3w4twox4lqh80q5kpjgozl10l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/SequenceContainer</title>
    <ns>0</ns>
    <id>8994</id>
    <revision>
      <id>82216</id>
      <parentid>81094</parentid>
      <timestamp>2015-12-07T07:37:19Z</timestamp>
      <contributor>
        <username>MaksymB</username>
        <id>4746</id>
      </contributor>
      <minor/>
      <comment>according to c++ standard (table 101) a.back() is supported by std::list too.</comment>
      <text xml:space="preserve" bytes="10231">{{cpp/concept/title|SequenceContainer}}
{{cpp/concept/navbar}}

A {{ttb|SequenceContainer}} is a {{concept|Container}} that stores objects of the same type in a linear arrangement.

===Requirements===

The type {{tt|X}} satisfies {{tt|SequenceContainer}} if

* The type {{tt|X}} satisfies {{concept|Container}}, and
&lt;!-- already listed in Container (Table 96), even though 23.2.3[sequence.reqmts]/5 repeats that for sequence containers, we don't have to repeat here

* The type {{tt|X::iterator}} satisfies {{concept|ForwardIterator}}, and
* The type {{tt|X::const_iterator}} satisfies {{concept|ForwardIterator}}, and --&gt;

Given
* {{tt|T}}, the element type of {{tt|X}}
* {{tt|A}}, the allocator type of {{tt|X}}: {{c|X::allocator_type}} if it exists, otherwise {{c|std::allocator&lt;T&gt;}}
* {{tt|a}}, [[cpp/language/value_category|rvalue]] expression of type of type {{tt|X}} 
* {{tt|p}}, a valid const iterator into {{tt|a}}
* {{tt|q}}, a valid dereferenceable const iterator into {{tt|a}}
* {{tt|q1}} and {{tt|q2}}, two const iterators into {{tt|a}} such that {{c|[q1, q2)}} is a valid range
* {{tt|i}} and {{tt|j}}, {{concept|InputIterator}}s such that {{c|[i, j)}} is a valid range and that the iterators refer to elements implicitly convertible to {{tt|value_type}}
* {{tt|il}}, an object of type {{c|std::initializer_list&lt;value_type&gt;}}
* {{tt|n}}, a value of type {{c|X::size_type}}
* {{tt|t}}, an lvalue or const rvalue of type {{c|X::value_type}}
* {{tt|rv}}, a non-const rvalue of type {{c|X::value_type}}
* {{tt|Args}}: a template parameter pack
* {{tt|args}}: a function parameter pack with the pattern {{c|Arg&amp;&amp;}}

The following expressions must be valid and have their specified effects for all sequence containers except {{lc|std::array}}:

{|class=wikitable
!expression||return type||effects||precondition||postcondition
|-
|{{c|X(n, t)}}
{{c|X a(n, t)}}
|
|Constructs the sequence container holding {{ttb|n}} copies of {{ttb|t}}
|{{tt|T}} {{concept|CopyInsertable}} into {{tt|X}}
|{{c|std::distance(begin(),end()) {{==}} n}}
|-
|{{c|X(i, j)}}
{{c|X a(i, j)}}
|
|Constructs the sequence container equal, element-wise, to the range {{tt|[i,j)}}
| {{tt|T}} is {{concept|EmplaceConstructible}} from {{tt|*i}} into {{tt|X}}
{{mark|only for std::vector}} If the iterators are not {{concept|ForwardIterator}}s, T must be {{concept|CopyInsertable}}
|{{c|1=std::distance(begin(),end()) == std::distance(i,j)}}
|-
|{{c|X(il)}}|| || {{c|X(il.begin(), il.end())}}|| ||
|-
|{{c|1=a = il}}||{{c|X&amp;}}||Assigns the range represented by {{ttb|il}} into {{ttb|a}}&lt;ref&gt;{{lc|std::array}} supports assignment from a braced-init-list, but not from an {{lc|std::initializer_list}}&lt;/ref&gt;
| T {{concept|CopyInsertable}} and {{concept|CopyAssignable}}
| Existing elements of {{ttb|a}} are destroyed or assigned to
|- 
|{{c|a.emplace(p,args)}}||{{tt|iterator}}
|Insert an object of type {{tt|T}}, constructed with {{c|std::forward&lt;Args&gt;(args)}} before {{ttb|p}}
|{{tt|T}} {{concept|CopyInsertable}}
{{mark|for std::vector and std::deque}} {{tt|T}} {{concept|MoveAssignable}} and {{concept|MoveInsertable}}
|Returned iterator points at the element constructed from {{tt|args}} into {{tt|a}}
|- 
|{{c|a.insert(p,t)}}||{{tt|iterator}}
|Inserts a copy of {{ttb|t}} before {{ttb|p}}
|{{tt|T}} {{concept|CopyInsertable}}
{{mark|for std::vector and std::deque}} {{tt|T}} {{concept|CopyAssignable}} or {{concept|MoveAssignable}}
|Returned iterator points at the copy of {{tt|t}} inserted into {{tt|a}}
|- 
|{{c|a.insert(p,rv)}}||{{tt|iterator}}
|Inserts a copy of {{ttb|rv}} before {{ttb|p}}, possibly using move semantics
|{{tt|T}} {{concept|MoveInsertable}}
{{mark|for std::vector and std::deque}} {{tt|T}} {{concept|MoveAssignable}}
|Returned iterator points at the copy of {{tt|rv}} inserted into {{tt|a}}
|-
|{{c|a.insert(p,n,t)}}||{{tt|iterator}}||Inserts {{ttb|n}} copies of {{ttb|t}} before {{ttb|p}}
|{{tt|T}} {{concept|CopyInsertable}} and {{concept|CopyAssignable}}
|Returned iterator points at the copy of the first element inserted into {{tt|a}} or is {{tt|p}} for {{c|1=n==0}}
|-
|{{c|a.insert(p,i,j)}}||{{tt|iterator}}||Inserts copies of elements in {{tt|[i, j)}} before {{ttb|p}}
| T {{concept|EmplaceConstructible}} and {{ttb|i}} and {{ttb|j}} are not in {{ttb|a}}
{{mark|only for std::vector}} If the iterators are not {{concept|ForwardIterator}}s, T must be {{concept|MoveInsertable}} and {{concept|MoveAssignable}}
|Each iterator in {{tt|[i,j)}} is dereferenced once. Returned iterator points at the copy of the first element inserted into {{tt|a}} or is {{tt|p}} for {{c|1=i==j}}
|-
|{{c|a.insert(p, il)}}||{{tt|iterator}}||{{c|a.insert(p,il.begin(),il.end())}}|| ||Returned iterator points at the copy of the first element inserted into {{tt|a}} or is {{tt|p}} if {{tt|il}} is empty.
|-
|{{c|a.erase(q)}}||{{tt|iterator}}||Erases the element pointed to by {{tt|q}}
|{{mark|std::deque, std::vector}} T {{concept|MoveAssignable}}
|Returned iterator points at the element that was immediately following {{tt|q}} prior to erasure, or {{c|a.end()}} if no such element exists.
|-
|{{c|a.erase(q1,q2)}}||{{tt|iterator}}||Erases elements in {{tt|[p,q)}}||{{mark|std::deque, std::vector}} T {{concept|MoveAssignable}}||Returned iterator points at the element that was pointed by {{tt|q2}} prior to any erasure, or {{c|a.end()}} if no such element exists.
|-
|{{c|a.clear()}}||{{tt|void}}||Destroys all elements in {{ttb|a}}|| ||
All references, pointers, and iterators are invalidated, including the end iterator. {{c|1=a.empty() == true}}. 
|-
|{{c|a.assign(i,j)}}||{{tt|void}}||Replaces elements in a with a copy of {{tt|[i, j)}}
|{{tt|T}} {{concept|EmplaceConstructible}} and {{ttb|i}}, {{ttb|j}} not in {{ttb|a}}
{{mark|std::vector}} If not {{concept|ForwardIterator}}. {{tt|T}} {{concept|MoveInsertable}}
|Each iterator in {{tt|[i,j)}} is dereferenced once
|-
|{{c|a.assign(il)}}||{{tt|void}}||{{c|a.assign(il.begin(),il.end())}}|| ||
|-
|{{c|a.assign(n,t)}}||{{tt|void}}
|Replaces elements in {{ttb|a}} with {{ttb|n}} copies of {{ttb|t}}
|T {{concept|CopyInsertable}} and {{concept|CopyAssignable}}
|
|-
!colspan=5|notes
|-
|colspan=5|&lt;references/&gt;
|}

The following expressions must be valid and have their specified effects for the sequence containers named:

{|class=wikitable
!expression||return type||effects||preconditions||containers
|-
|{{c|a.front()}}
|{{tt|reference}}
{{tt|const_reference}} for const a
|Equivalent to {{c|*a.begin()}}
|
|(all)
|-
|{{c|a.back()}}
|{{tt|reference}}
{{tt|const_reference}} for const a
|Equivalent to {{c|1={ auto tmp = a.end(); --tmp; return *tmp; } }}
|
|{{lc|std::basic_string}} {{lc|std::array}} {{lc|std::deque}} {{lc|std::list}} {{lc|std::vector}}
|-
|{{c|a.emplace_front(args)}}
|{{tt|void}}
|Prepends a {{tt|T}} constructed with {{c|std::forward&lt;Args&gt;(args)...}}
|{{tt|T}} {{concept|EmplaceConstructible}} into {{tt|X}} from {{tt|args}}
|{{lc|std::deque}} {{lc|std::forward_list}} {{lc|std::list}}
|-
|{{c|a.emplace_back(args)}}
|{{tt|void}}
|Appends a {{tt|T}} constructed with {{c|std::forward&lt;Args&gt;(args)...}}
|{{tt|T}} {{concept|EmplaceConstructible}} into {{tt|X}} from {{tt|args}}
{{mark|std::vector only}} {{tt|T}} {{concept|MoveInsertable}} into {{tt|X}}
|{{lc|std::deque}} {{lc|std::list}} {{lc|std::vector}}
|-
|{{c|a.push_front(t)}}
|{{tt|void}}
|Prepends a copy of {{tt|t}}
|{{tt|T}} {{concept|CopyInsertable}} into {{tt|X}}
|{{lc|std::deque}} {{lc|std::forward_list}} {{lc|std::list}}
|-
|{{c|a.push_front(rv)}}
|{{tt|void}}
|Prepends a copy of {{tt|rv}}, possibly using move semantics
|{{tt|T}} {{concept|MoveInsertable}} into {{tt|X}}
|{{lc|std::deque}} {{lc|std::forward_list}} {{lc|std::list}}
|-
|{{c|a.push_back(t)}}
|{{tt|void}}
|Appends a copy of {{tt|t}}
|{{tt|T}} {{concept|CopyInsertable}} into {{tt|X}}
|{{lc|std::basic_string}} {{lc|std::deque}} {{lc|std::list}} {{lc|std::vector}}
|-
|{{c|a.push_back(rv)}}
|{{tt|void}}
|Appends a copy of {{tt|rv}}, possibly using move semantics
|{{tt|T}} {{concept|MoveInsertable}} into {{tt|X}}
|{{lc|std::basic_string}} {{lc|std::deque}} {{lc|std::list}} {{lc|std::vector}}
|-
|{{c|a.pop_front()}}
|{{tt|void}}
|Destroys the first element.
|{{c|1=a.empty() == false}}
|{{lc|std::deque}} {{lc|std::forward_list}} {{lc|std::list}}
|-
|{{c|a.pop_back()}}
|{{tt|void}}
|Destroys the last element
|{{c|1=a.empty() == false}}
|{{lc|std::basic_string}} {{lc|std::deque}} {{lc|std::list}} {{lc|std::vector}}
|-
|{{c|a[n]}}
|{{tt|reference}}
{{tt|const_reference}} for const a
|Equivalent to {{c|*(n + a.begin())}}
|
|{{lc|std::basic_string}} {{lc|std::array}} {{lc|std::deque}} {{lc|std::vector}}
|-
|{{c|a.at(n)}}
|{{tt|reference}}
{{tt|const_reference}} for const a
|Equivalent to {{c|*(n + a.begin())}}, except that {{lc|out_of_range}} is thrown if {{c|1=n&gt;=size()}}
|
|{{lc|std::basic_string}} {{lc|std::array}} {{lc|std::deque}} {{lc|std::vector}}
|}

Additionally, for every sequence container, the constructor template that takes two input iterators and the member function template overloads of {{tt|insert()}}, {{tt|append()}}, {{tt|assign()}}, {{tt|replace()}} that take two input iterators do not participate in overload resolution if the corresponding template argument does not satisfy {{concept|InputIterator}}.

===SequenceContainers in the standard library===
{{dsc begin}}
{{dsc inc | cpp/string/dsc basic_string}}
{{dsc inc | cpp/container/dsc array}}
{{dsc inc | cpp/container/dsc vector}}
{{dsc inc | cpp/container/dsc deque}}
{{dsc inc | cpp/container/dsc forward_list}}
{{dsc inc | cpp/container/dsc list}}
{{dsc end}}

====Trade-offs / usage notes====
{{dsc begin}}
{{dsc|std::array|Fast access but fixed number of elements}}
{{dsc|std::vector|Fast access but mostly inefficient insertions/deletions}}
{{dsc|std::list&lt;br/&gt;std::forward_list|Efficient insertion/deletion in the middle of the sequence}}
{{dsc|std::deque|Efficient insertion/deletion at the beginning and at the end of the sequence}}
{{dsc end}}

[[de:cpp/concept/SequenceContainer]]
[[es:cpp/concept/SequenceContainer]]
[[fr:cpp/concept/SequenceContainer]]
[[it:cpp/concept/SequenceContainer]]
[[ja:cpp/concept/SequenceContainer]]
[[pt:cpp/concept/SequenceContainer]]
[[ru:cpp/concept/SequenceContainer]]
[[zh:cpp/concept/SequenceContainer]]</text>
      <sha1>ljz2xmboyt3ea55bb7wydzgpq397q1y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/SharedMutex</title>
    <ns>0</ns>
    <id>13476</id>
    <revision>
      <id>81899</id>
      <parentid>78669</parentid>
      <timestamp>2015-11-18T02:30:47Z</timestamp>
      <contributor>
        <ip>223.3.30.121</ip>
      </contributor>
      <text xml:space="preserve" bytes="2946">{{cpp/concept/title|SharedMutex}}
{{cpp/concept/navbar}}

The {{tt|SharedMutex}} concept extends the {{concept|Mutex}} concept to include shared lock ownership mode.

===Requirements===

* {{concept|Mutex}}

Additionally, for object {{ttb|m}} of {{tt|SharedMutex}} type supports another mode of ownership: shared. Multiple threads (or, more generally, execution agents) can simulataneously own this mutex in shared mode, but no thread may obtain shared ownership if there is a thread that owns it in exclusive mode and no thread may obtain exclusive ownership if there is a thread that owns it in shared mode. If more than implementation-defined number of threads (no less than 10000) hold a shared lock, another attempt to acquire the mutex in shared mode blocks until the number of shared owners drops down below that threshold.

* The expression {{c|m.lock_shared()}} has the following properties
:* Behaves as an atomic operation.
:* Blocks the calling thread until shared ownership of the mutex can be obtained.
:* Prior {{c|m.unlock()}} operations on the same mutex ''synchronize-with'' this lock operation (equivalent to release-acquire {{lc|std::memory_order}})
:* The behavior is undefined if the calling thread already owns the mutex in any mode.
:* If an exception is thrown, the shared lock is not acquired.

* The expression {{c|m.try_lock_shared()}} has the following properties
:* Behaves as an atomic operation.
:* Attempts to obtain shared ownership of the mutex for the calling thread without blocking. If ownership is not obtained, returns immediately. The function is allowed to spuriously fail and return even if the mutex is not currently owned by any threads in any mode.
:* If {{tt|try_lock_shared()}} succeeds, prior {{tt|unlock()}} operations on the same object ''synchronize-with'' this operation (equivalent to release-acquire {{lc|std::memory_order}}).
:* The behavior is undefined if the calling thread already owns the mutex in any mode

* The expression {{c|m.unlock_shared()}} has the following properties
:* Behaves as an atomic operation.
:* Releases the calling thread's ownership of the mutex and ''synchronizes-with'' the subsequent successful lock operations on the same object.
:* The behavior is undefined if the calling thread does not own the mutex.

* All lock and unlock operations on a single mutex occur in a single total order

===Library types===
The following standard library types satisfy {{concept|SharedMutex}}:
* {{lc|std::shared_mutex}}{{mark since c++17}}
* {{lc|std::shared_timed_mutex}}{{mark since c++14}}

===See also===
* [[cpp/thread|Thread support library]]
* {{concept|Mutex}}
* {{concept|TimedMutex}}
* {{concept|SharedTimedMutex}}

[[de:cpp/concept/SharedMutex]]
[[es:cpp/concept/SharedMutex]]
[[fr:cpp/concept/SharedMutex]]
[[it:cpp/concept/SharedMutex]]
[[ja:cpp/concept/SharedMutex]]
[[pt:cpp/concept/SharedMutex]]
[[ru:cpp/concept/SharedMutex]]
[[zh:cpp/concept/SharedMutex]]</text>
      <sha1>kz7e5msgq9fpefqwe58leb2krdxe9ws</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/SharedTimedMutex</title>
    <ns>0</ns>
    <id>13005</id>
    <revision>
      <id>79528</id>
      <parentid>78670</parentid>
      <timestamp>2015-07-08T12:44:01Z</timestamp>
      <contributor>
        <ip>81.174.154.32</ip>
      </contributor>
      <comment>`without waiting` not `without locking`</comment>
      <text xml:space="preserve" bytes="3086">{{cpp/concept/title|SharedTimedMutex}}
{{cpp/concept/navbar}}

The {{tt|SharedTimedMutex}} concept extends the {{concept|TimedMutex}} concept to include shared lock ownership mode.

===Requirements===

* {{concept|TimedMutex}}
* {{concept|SharedMutex}}

Additionally, for object {{ttb|m}} of {{tt|SharedTimedMutex}} type supports timed shared operations:

* The expression {{c|m.try_lock_shared_for(duration)}} has the following properties
:* Behaves as an atomic operation.
:* Attempts to obtain shared ownership of the mutex within the duration specified by {{tt|duration}}. If {{tt|duration}} is less or equal {{tt|duration.zero()}}, attempts to obtain the ownership without waiting (as if by {{tt|try_lock()}}). Otherwise, this function blocks until the mutex is acquired or until the time specified by {{tt|duration}} passes. It returns within {{tt|duration}} only if it succeeds, but it allowed to fail to acquire the mutex even if at some point in time during {{tt|duration}} it was not owned by another thread. In any case, it returns {{c|true}} if the mutex was acquired and {{c|false}} otherwise.
:* If {{tt|try_lock_shared_for(duration)}} succeeds, prior {{tt|unlock()}} operations on the same object ''synchronize-with'' this operation (equivalent to release-acquire {{lc|std::memory_order}}).
:* The behavior is undefined if the calling thread already owns the mutex in any mode
:* If an exception is thrown, the shared lock is not acquired.

* The expression {{c|m.try_lock_shared_until(time_point)}} has the following properties
:* Behaves as an atomic operation.
:* Attempts to obtain shared ownership of the mutex within the time left until {{tt|time_point}}. If {{tt|time_point}} already passed, attempts to obtain the ownership without locking (as if by {{tt|try_lock()}}). Otherwise, this function blocks until the mutex is acquired or until the time specified by {{tt|time_point}} passes. It returns before {{tt|time_point}} only if it succeeds, but it allowed to fail to acquire the mutex even if at some point in time before {{tt|time_point}} it was not owned by another thread. In any case, it returns {{c|true}} if the mutex was acquired and {{c|false}} otherwise.
:* If {{tt|try_lock_shared_until(time_point)}} succeeds, prior {{tt|unlock()}} operations on the same object ''synchronize-with'' this operation (equivalent to release-acquire {{lc|std::memory_order}}).
:* The behavior is undefined if the calling thread already owns the mutex in any mode
:* If an exception is thrown, the shared lock is not acquired.

===Library types===
The following standard library types satisfy {{concept|SharedTimedMutex}}:
* {{lc|std::shared_timed_mutex}}

===See also===
* [[cpp/thread|Thread support library]]
* {{concept|Mutex}}
* {{concept|TimedMutex}}
* {{concept|SharedMutex}}

[[de:cpp/concept/SharedTimedMutex]]
[[es:cpp/concept/SharedTimedMutex]]
[[fr:cpp/concept/SharedTimedMutex]]
[[it:cpp/concept/SharedTimedMutex]]
[[ja:cpp/concept/SharedTimedMutex]]
[[pt:cpp/concept/SharedTimedMutex]]
[[ru:cpp/concept/SharedTimedMutex]]
[[zh:cpp/concept/SharedTimedMutex]]</text>
      <sha1>7ieediqqafxw66amt8g2yaec94p42hv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/StandardLayoutType</title>
    <ns>0</ns>
    <id>5542</id>
    <revision>
      <id>85106</id>
      <parentid>81907</parentid>
      <timestamp>2016-04-01T13:05:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>this totally missed that reference members aren't allowed (http://stackoverflow.com/questions/3635404)</comment>
      <text xml:space="preserve" bytes="3545">{{cpp/concept/title|StandardLayoutType}}
{{cpp/concept/navbar}}

Specifies that a type is [[cpp/language/data_members#Standard_layout|standard layout type]]. Standard layout types are useful for communicating with code written in other programming languages.

{{cpp/concept/concept note}}

===Requirements===
* All non-static data members have the same [[cpp/language/access|access control]]
* Has no virtual functions or virtual base classes
* Has no non-static data members of reference type
* All non-static data members and base classes are themselves standard layout types
{{rev begin}}
{{rev|until=c++14|
* Either
:* has no base classes with non-static data members, or
:* has no non-static data members in the most derived class and at most one base class with non-static data members
* Has no base classes of the same type as the first non-static data member (see  [[cpp/language/ebo|empty base optimization]])
}}
{{rev|since=c++14|
* Has no two base class subobjects of the same type
{{source|1=
struct Q {};
struct S : Q { };
struct T : Q { };
struct U : S, T { };         // not a standard-layout class
}}
* Has all non-static data members declared in the same class (either all in the derived or all in some base)
{{source|1=
struct B { int i; };         // standard-layout class
struct C : B { };            // standard-layout class
struct D : C { };            // standard-layout class
struct E : D { char : 4; };  // not a standard-layout class
}}
* None of the base class subobjects has the same type as
:* for non-union types, as the first non-static data member (see [[cpp/language/ebo|empty base optimization]]), and, recursively, the first non-static data member of that data member if it has non-union class type, or all non-static data members of that data member if it has union type, or an element of that data member if it has array type, etc.
:* for union types, as any non-static data members, and, recursively, the first non-static data member of every member of non-union class type, and all non-static data members of all members of union type, and element type of all non-static data members of array type, etc.
:* for array types, as the type of the array element, and, recursively, the first non-static data member of the array element if it has non-union class type, or as any non-static data member of the array element if it has union type, or as the element type of the array element if it has array type, etc.
}}
{{rev end}}

===Properties===
See [[cpp/language/data_members#Standard_layout|Standard layout]].

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1672|std=C++14|before=first non-static data member rule ignored existence of empty base classes|after=first non-static data member rule made recursive}}
{{dr list item|wg=cwg|dr=1813|std=C++14|before=class with a member defined in an indirect base wasn't technically standard-layout|after=all member declarations must be in the same class}}
{{dr list item|wg=cwg|dr=2120|std=C++14|before=array as first member wasn't considered when comparing the first element type with type of a base|after=array members are considered}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_standard_layout}}
{{dsc end}}

[[de:cpp/concept/StandardLayoutType]]
[[es:cpp/concept/StandardLayoutType]]
[[fr:cpp/concept/StandardLayoutType]]
[[it:cpp/concept/StandardLayoutType]]
[[ja:cpp/concept/StandardLayoutType]]
[[pt:cpp/concept/StandardLayoutType]]
[[ru:cpp/concept/StandardLayoutType]]
[[zh:cpp/concept/StandardLayoutType]]</text>
      <sha1>r30y7c1qi4pzuyjdithufa6kv3z5ys2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/Swappable</title>
    <ns>0</ns>
    <id>9121</id>
    <revision>
      <id>86699</id>
      <parentid>84797</parentid>
      <timestamp>2016-07-10T11:57:58Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>link to [[cpp/language/adl]]</comment>
      <text xml:space="preserve" bytes="2581">{{cpp/concept/title|Swappable}}
{{cpp/concept/navbar}}
Any lvalue or rvalue of this type can be swapped with any lvalue or rvalue of some other type, using unqualified function call {{c|swap()}} in the context where both {{lc|std::swap}} and the user-defined {{c|swap()}}s are visible.

===Requirements===

Type U is swappable with type T if, for any object u of type U and any object t of type T,

{|table class=wikitable
|-
!Expression||Requirements||Semantics
|-
| {{c|#include &lt;utility&gt;
using std::swap;
swap(u, t);}}
| After the call, the value of {{tt|t}} is the value held by {{tt|u}} before the call, and the value of {{tt|u}} is the value held by {{tt|t}} before the call.
| Calls the function named {{c|swap()}} found by overload resolution among all functions with that name that are found by [[cpp/language/adl|argument-dependent lookup]] and the two {{lc|std::swap}} templates defined in the header {{c|&lt;utility&gt;}}.
|-
| {{c|#include &lt;utility&gt;
using std::swap;
swap(t, u);}}
| same
| same
|}

Many standard library functions (for example, many algorithms) expect their arguments to satisfy {{concept|Swappable}}, which means that any time the standard library performs a swap, it uses the equivalent of {{c|using std::swap; swap(t, u);}}.

Typical implementations either
@1@ Define a non-member swap in the enclosing namespace, which may forward to a member swap if access to non-public data members is required
@2@ Define a [[cpp/language/friend|friend function]] in-class (this approach hides the class-specific swap from name lookup other than ADL)

===Notes===
It is unspecified whether {{c|&lt;utility&gt;}} is actually included when the standard library functions perform the swap, so the user-provided {{c|swap()}} should not expect it to be included.

===Example===
{{example
 | 
 | code=

#include &lt;iostream&gt;
#include &lt;vector&gt;

class IntVector {
    std::vector&lt;int&gt; v;
    IntVector&amp; operator=(IntVector); // not assignable
 public:
    void swap(IntVector&amp; other) {
        v.swap(other.v);
    }
};
void swap(IntVector&amp; v1, IntVector&amp; v2) {
    v1.swap(v2);
}

int main()
{
    IntVector v1, v2;
//  std::swap(v1, v2); // compiler error! std::swap requires MoveAssignable
    std::iter_swap(&amp;v1, &amp;v2); // OK: library calls unqualified swap()
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_swappable}}
{{dsc end}}

[[de:cpp/concept/Swappable]]
[[es:cpp/concept/Swappable]]
[[fr:cpp/concept/Swappable]]
[[it:cpp/concept/Swappable]]
[[ja:cpp/concept/Swappable]]
[[pt:cpp/concept/Swappable]]
[[ru:cpp/concept/Swappable]]
[[zh:cpp/concept/Swappable]]</text>
      <sha1>haxrux7ir611rynt005l7h2pm92zpui</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/TimedLockable</title>
    <ns>0</ns>
    <id>9573</id>
    <revision>
      <id>65578</id>
      <parentid>63911</parentid>
      <timestamp>2013-09-21T01:10:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso timedmutex</comment>
      <text xml:space="preserve" bytes="781">{{cpp/concept/title|TimedLockable}}
{{cpp/concept/navbar}}

The {{tt|TimedLockable}} concept describes the characteristics of types that provide timed exclusive blocking semantics for execution agents (i.e. threads).

===Requirements===

For type {{ttb|L}} to be {{tt|TimedLockable}}, the following conditions have to be satisfied for an object {{ttb|m}} of type {{ttb|L}}:
{|table class=wikitable
|-
!Expression||Requires||Effects
|-
|{{c|m.try_lock_for(duration)}}
|
|Blocks for the provided duration the resource {{ttb|m}}.
|-
|{{c|m.try_lock_until(time_limit)}}
|
|Blocks the resource {{ttb|m}} until the provided time limit point is reached.
|}

===See also===
* [[cpp/thread|Thread support library]]
* {{concept|TimedMutex}}
* {{concept|Lockable}}
* {{concept|BasicLockable}}</text>
      <sha1>jtfaau1vzcnb6vs82gts45x76waomwh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/TimedMutex</title>
    <ns>0</ns>
    <id>13004</id>
    <revision>
      <id>81900</id>
      <parentid>65577</parentid>
      <timestamp>2015-11-18T03:10:41Z</timestamp>
      <contributor>
        <ip>223.3.30.121</ip>
      </contributor>
      <text xml:space="preserve" bytes="2950">{{cpp/concept/title|TimedMutex}}
{{cpp/concept/navbar}}

The {{tt|TimedMutex}} concept extends the {{concept|TimedLockable}} concept to include inter-thread synchronization.

===Requirements===

* {{concept|TimedLockable}}
* {{concept|Mutex}}

Additionally, for object {{ttb|m}} of {{tt|TimedMutex}} type.
* The expression {{c|m.try_lock_for(duration)}} has the following properties
:* Behaves as an atomic operation.
:* Attempts to obtain exclusive ownership of the mutex within the duration specified by {{tt|duration}}. If {{tt|duration}} is less or equal {{tt|duration.zero()}}, attempts to obtain the ownership without locking (as if by {{tt|try_lock()}}). Otherwise, this function blocks until the mutex is acquired or until the time specified by {{tt|duration}} passes. It returns within {{tt|duration}} only if it succeeds, but it allowed to fail to acquire the mutex even if at some point in time during {{tt|duration}} it was not owned by another thread. In any case, it returns {{c|true}} if the mutex was acquired and {{c|false}} otherwise.
:* If {{tt|try_lock_for(duration)}} succeeds, prior {{tt|unlock()}} operations on the same object ''synchronize-with'' this operation (equivalent to release-acquire {{lc|std::memory_order}}).
:* The behavior is undefined if the calling thread already owns the mutex (except if m is {{lc|std::recursive_timed_mutex}})
* The expression {{c|m.try_lock_until(time_point)}} has the following properties
:* Behaves as an atomic operation.
:* Attempts to obtain exclusive ownership of the mutex within the time left until {{tt|time_point}}. If {{tt|time_point}} already passed, attempts to obtain the ownership without locking (as if by {{tt|try_lock()}}). Otherwise, this function blocks until the mutex is acquired or until the time specified by {{tt|time_point}} passes. It returns before {{tt|time_point}} only if it succeeds, but it allowed to fail to acquire the mutex even if at some point in time before {{tt|time_point}} it was not owned by another thread. In any case, it returns {{c|true}} if the mutex was acquired and {{c|false}} otherwise.
:* If {{tt|try_lock_until(time_point)}} succeeds, prior {{tt|unlock()}} operations on the same object ''synchronize-with'' this operation (equivalent to release-acquire {{lc|std::memory_order}}).
:* The behavior is undefined if the calling thread already owns the mutex (except if m is {{lc|std::recursive_timed_mutex}})

===Library types===
The following standard library types satisfy {{concept|TimedMutex}}:
* {{lc|std::timed_mutex}}
* {{lc|std::recursive_timed_mutex}}
* {{lc|std::shared_timed_mutex}}

===See also===
* [[cpp/thread|Thread support library]]
* {{concept|TimedLockable}}
* {{concept|Mutex}}

[[de:cpp/concept/TimedMutex]]
[[es:cpp/concept/TimedMutex]]
[[fr:cpp/concept/TimedMutex]]
[[it:cpp/concept/TimedMutex]]
[[ja:cpp/concept/TimedMutex]]
[[pt:cpp/concept/TimedMutex]]
[[ru:cpp/concept/TimedMutex]]
[[zh:cpp/concept/TimedMutex]]</text>
      <sha1>gj75v7fmvn5wmocre79lttu7pemhkoo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/TrivialClock</title>
    <ns>0</ns>
    <id>9877</id>
    <revision>
      <id>77618</id>
      <parentid>72321</parentid>
      <timestamp>2015-03-31T20:00:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>library usage</comment>
      <text xml:space="preserve" bytes="1184">{{cpp/concept/title|TrivialClock}}
{{cpp/concept/navbar}}

The {{concept|TrivialClock}} concept describes the requirements satisfied by all the clocks in the [[cpp/chrono|chrono library]].

===Requirements===
For a type {{c|TC}}:

* The type must meet {{concept|Clock}} requirements.
* The types {{c|TC::rep}}, {{c|TC::duration}}, and {{c|TC::time_point}} satisfy the requirements of {{concept|EqualityComparable}}, {{concept|LessThanComparable}}, {{concept|DefaultConstructible}}, {{concept|CopyConstructible}}, {{concept|CopyAssignable}}, {{concept|Destructible}}, and {{concept|NumericType}}.
* [[cpp/language/value category|lvalues]] of the types {{c|TC::rep}}, {{c|TC::duration}}, and {{c|TC::time_point}} are {{concept|Swappable}}.
* The function {{c|TC::now()}} does not throw exceptions.
* The type {{c|TC::time_point::clock}} meets the {{concept|TrivialClock}} requirements, recursively.

===Usage===
The following types satisfy this concept in the standard library:
*{{lc|std::chrono::system_clock}}
*{{lc|std::chrono::steady_clock}}
*{{lc|std::chrono::high_resolution_clock}}
* {{ltt|cpp/experimental/fs/file_time_type|std::experimental::filesystem::file_time_type::clock}}</text>
      <sha1>tm1ecjd4tdd86z2y5utsf1pkzm5vz56</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/TrivialType</title>
    <ns>0</ns>
    <id>5541</id>
    <revision>
      <id>86099</id>
      <parentid>72383</parentid>
      <timestamp>2016-06-20T15:30:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>cwg 1496. Triviality with deleted and missing default constructors</comment>
      <text xml:space="preserve" bytes="744">{{cpp/concept/title|TrivialType}}
{{cpp/concept/navbar}}
Specifies that a type is [[todo|trivial type]].

{{cpp/concept/concept note}}

===Requirements===
* {{concept|TriviallyCopyable}}
* Has one or more [[cpp/language/default constructor|default constructors]], all of which are either [[cpp/language/default_constructor#Trivial_default_constructor|trivial]] or deleted, and at least one of which is not deleted.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_trivial}}
{{dsc end}}

[[de:cpp/concept/TrivialType]]
[[es:cpp/concept/TrivialType]]
[[fr:cpp/concept/TrivialType]]
[[it:cpp/concept/TrivialType]]
[[ja:cpp/concept/TrivialType]]
[[pt:cpp/concept/TrivialType]]
[[ru:cpp/concept/TrivialType]]
[[zh:cpp/concept/TrivialType]]</text>
      <sha1>t8aocsorvka732x1ruzu7ft06flxifm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/TriviallyCopyable</title>
    <ns>0</ns>
    <id>5540</id>
    <revision>
      <id>91935</id>
      <parentid>91754</parentid>
      <timestamp>2017-03-31T20:04:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Mark DR 1734 as going back to C++11, remove rev inl's</comment>
      <text xml:space="preserve" bytes="1777">{{cpp/concept/title|TriviallyCopyable}}
{{cpp/concept/navbar}}

===Requirements===
*Every copy constructor is [[cpp/language/copy_constructor#Trivial_copy_constructor|trivial]] or deleted &lt;!--CWG 1734--&gt;
*Every move constructor is [[cpp/language/move_constructor#Trivial_move_constructor|trivial]] or deleted &lt;!--CWG 1734--&gt;
*Every copy assignment operator is [[cpp/language/as_operator#Trivial_copy_assignment_operator|trivial]] or deleted &lt;!--CWG 1734--&gt;
*Every move assignment operator is [[cpp/language/move_operator#Trivial_move_assignment_operator|trivial]] or deleted &lt;!--CWG 1734--&gt;
*at least one copy constructor, move constructor, copy assignment operator, or move assignment operator is non-deleted &lt;!--CWG 1734--&gt;
*[[cpp/language/destructor#Trivial_destructor|Trivial]] non-deleted destructor

This implies that the class has no [[cpp/language/virtual|virtual functions]] or [[cpp/language/derived_class#Virtual_base_classes|virtual base classes]].

Scalar types and arrays of {{tt|TriviallyCopyable}} objects are {{tt|TriviallyCopyable}} as well, as well as the [[cpp/language/cv|const]]-qualified (but not [[cpp/language/cv|volatile]]-qualified) versions of such types.

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1734|std=C++11|before=C++03 POD with deleted non-trivial assignment was not trivial|after=deleted ctors/operators allowed}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}
{{dsc end}}

[[de:cpp/concept/TriviallyCopyable]]
[[es:cpp/concept/TriviallyCopyable]]
[[fr:cpp/concept/TriviallyCopyable]]
[[it:cpp/concept/TriviallyCopyable]]
[[ja:cpp/concept/TriviallyCopyable]]
[[pt:cpp/concept/TriviallyCopyable]]
[[ru:cpp/concept/TriviallyCopyable]]
[[zh:cpp/concept/TriviallyCopyable]]</text>
      <sha1>fs0wyurph7eesrq5rb0xx81l1s1gy68</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/UnformattedInputFunction</title>
    <ns>0</ns>
    <id>9532</id>
    <revision>
      <id>49424</id>
      <parentid>41987</parentid>
      <timestamp>2013-06-01T02:39:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="3264">{{cpp/concept/title|UnformattedInputFunction}}
{{cpp/concept/navbar}}

===Requirements===

An {{tt|UnformattedInputFunction}} is a stream input function that performs the following:

* Constructs an object of type {{l2tt|cpp/io/basic_istream/sentry}} with automatic storage duration and with the {{tt|noskipws}} argument set to {{c|true}}, which performs the following
:* if {{ltt|cpp/io/ios_base/iostate|eofbit}} or {{ltt|cpp/io/ios_base/iostate|badbit}} are set on the input stream, sets the {{tt|failbit}} as well, and if exceptions on failbit are enabled in this input stream's exception mask, throws {{l2tt|cpp/io/ios_base/failure}}.
:* flushes the tie()'d output stream, if applicable
* Checks the status of the sentry by calling {{tt|sentry::operator bool()}}, which is equivalent to {{l2tt|cpp/io/basic_ios/good}}.
* If the sentry returned {{c|false}} or sentry's constructor threw an exception:
:* sets the number of extracted characters (gcount) in the input stream to zero
:* if the function was called to write to an array of {{tt|CharT}}, writes {{tt|CharT()}} (the null character) to the first location of the array
* If the sentry returned {{c|true}}, performs the input as if by calling {{c|rdbuf()-&gt;sbumpc()}} or {{c|rdbuf()-&gt;sgetc()}}.
:* if the end of the stream is reached (the call to {{c|rdbuf()-&gt;sbumpc()}} or {{c|rdbuf()-&gt;sgetc()}} returns {{c|Traits::eof()}}, sets {{tt|eofbit}}. If exceptions on eofbit are enabled in this stream's exception mask, throws {{l2tt|cpp/io/ios_base/failure}}.
:* if an exception is thrown during input, sets {{tt|badbit}} in the input stream. If exceptions on badbit are enabled in this stream's exception mask, the exception is also rethrown.
:* If no exception was thrown during input, sets the number of extracted characters (gcount) in the input stream.
* In any event, whether terminating by exception or returning, the sentry's destructor is called before leaving this function.

===Standard library===

The following standard library functions are {{concept|UnformattedInputFunction}}s.

* {{lc|std::getline}}, except that it does not modify gcount.
* {{l2tt|cpp/io/basic_istream/operator_gtgt|operator&gt;&gt;{{dsc small|(basic_streambuf*)}}}}
* {{l2tt|cpp/io/basic_istream/get}}
* {{l2tt|cpp/io/basic_istream/getline}}
* {{l2tt|cpp/io/basic_istream/ignore}}
* {{l2tt|cpp/io/basic_istream/peek}}
* {{l2tt|cpp/io/basic_istream/read}}
* {{l2tt|cpp/io/basic_istream/readsome}}
* {{l2tt|cpp/io/basic_istream/putback}}, except that it first clears {{tt|eofbit}}
* {{l2tt|cpp/io/basic_istream/unget}}, except that it first clears {{tt|eofbit}}
* {{l2tt|cpp/io/basic_istream/sync}}, except that it does not modify gcount
* {{l2tt|cpp/io/basic_istream/tellg}}, except that it does not modify gcount
* {{l2tt|cpp/io/basic_istream/seekg}}, except that it first clears {{tt|eofbit}} and does not modify gcount
* {{lc|std::ws}}, except that it does not modify gcount

[[de:cpp/concept/UnformattedInputFunction]]
[[es:cpp/concept/UnformattedInputFunction]]
[[fr:cpp/concept/UnformattedInputFunction]]
[[it:cpp/concept/UnformattedInputFunction]]
[[ja:cpp/concept/UnformattedInputFunction]]
[[pt:cpp/concept/UnformattedInputFunction]]
[[ru:cpp/concept/UnformattedInputFunction]]
[[zh:cpp/concept/UnformattedInputFunction]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/UnformattedOutputFunction</title>
    <ns>0</ns>
    <id>9609</id>
    <revision>
      <id>72589</id>
      <parentid>61961</parentid>
      <timestamp>2014-09-05T19:43:29Z</timestamp>
      <contributor>
        <ip>216.239.45.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="2147">{{cpp/concept/title|UnformattedOutputFunction}}
{{cpp/concept/navbar}}

===Requirements===

A {{tt|UnformattedOutputFunction}} is a stream output function that performs the following:

* Constructs an object of type {{l2tt|cpp/io/basic_ostream/sentry}} with automatic storage duration, which performs the following
:* if {{ltt|cpp/io/ios_base/iostate|eofbit}} or {{ltt|cpp/io/ios_base/iostate|badbit}} are set on the output stream, sets the {{tt|failbit}} as well, and if exceptions on failbit are enabled in this output stream's exception mask, throws {{l2tt|cpp/io/ios_base/failure}}.
:* flushes the tie()'d output stream, if applicable.
* Checks the status of the sentry by calling {{tt|sentry::operator bool()}}, which is equivalent to {{l2tt|cpp/io/basic_ios/good}}.
* If the sentry returned {{c|false}} or sentry's constructor threw an exception, no output takes place
* If the sentry returned {{c|true}}, attempts to perform the desired output by inserting the characters into the output stream as if by calling {{c|rdbuf()-&gt;sputc()}} or {{c|rdbuf()-&gt;xsputn()}}. Additionally, {{c|rdbuf()-&gt;overflow()}} and {{c|rdbuf()-&gt;sync()}} may be called, but no other virtual member function of {{lc|std::basic_streambuf}}.
:* if an exception is thrown during output, sets {{tt|badbit}} in the output stream. If exceptions on badbit are enabled in this stream's exception mask, the exception is also rethrown.
:* If no exception was thrown, returns the value specified by the function.
* In any event, whether terminating by exception or returning, the sentry's destructor is called before leaving this function.

===Standard library===

The following standard library functions are {{concept|UnformattedOutputFunction}}s.

* {{l2tt|cpp/io/basic_ostream/operator_ltlt|operator&lt;&lt;{{dsc small|(basic_streambuf*)}}}}
* {{l2tt|cpp/io/basic_ostream/put}}
* {{l2tt|cpp/io/basic_ostream/write}}
* {{l2tt|cpp/io/basic_ostream/flush}}
{{rev begin}}
{{rev |since=c++11|
* {{l2tt|cpp/io/basic_ostream/tellp}} (except calls pubseekoff instead of output)
* {{l2tt|cpp/io/basic_ostream/seekp}} (except calls pubseekoff or pubseekpos instead of output)
}}
{{rev end}}</text>
      <sha1>o115hj4687pzf3stitzjz97fxuo189w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/UniformRandomBitGenerator</title>
    <ns>0</ns>
    <id>13724</id>
    <revision>
      <id>86190</id>
      <parentid>86189</parentid>
      <timestamp>2016-06-24T18:10:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Cubbi moved page [[cpp/concept/UniformRandomNumberGenerator]] to [[cpp/concept/UniformRandomBitGenerator]]: P0346R1: URNG-&gt;URBG</comment>
      <text xml:space="preserve" bytes="2109">{{cpp/concept/title|UniformRandomBitGenerator}}
{{cpp/concept/navbar}}

A uniform random bit generator is a function object returning unsigned integer values such that each value in the range of possible results has (ideally) equal probability.

Uniform random bit generators are not intended to be used as random number generators: they are used as the source of random bits (generated in bulk, for efficiency). Any uniform random bit generator may be plugged into any [[cpp/numeric/random|random number distribution]] in order to obtain a random number (formally, a random variate). 

===Requirements===
The type {{tt|G}} satisfies {{tt|UniformRandomBitGenerator}} if

Given
* {{tt|T}}, the type named by {{tt|G::result_type}}
* {{tt|g}}, a value of type {{tt|G}}

The following expressions must be valid and have their specified effects

{|table class=wikitable
|-
!Expression||Return type||Requirements
|-
| {{c|G::result_type}}
| {{tt|T}}
| {{tt|T}} is an unsigned integer type
|-
| {{c|G::min()}}
| {{tt|T}}
| Returns the smallest value that G's operator() may return. The value is strictly less than {{tt|G::max()}}.
|-
| {{c|G::max()}}
| {{tt|T}}
| Returns the largest value that G's operator() may return. The value is strictly greater than {{tt|G::min()}}
|-
| {{c|g()}}
| {{tt|T}}
| Returns a value in the closed interval {{c|[G::min(), G::max()]}}. Has amortized constant complexity.
|}

===Notes===
All {{concept|RandomNumberEngine}}s satisfy this concept.

===Standard library===
The following standard library facilities expect a {{tt|UniformRandomBitGenerator}} type.
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc random_shuffle}}
{{dsc inc | cpp/numeric/random/dsc generate_canonical}}
{{dsc inc | cpp/numeric/random/dsc uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/dsc uniform_real_distribution}}
{{dsc | all other random number distributions}}
{{dsc end}}
The following standard library facilities satisfy {{tt|UniformRandomBitGenerator}} without additionally satisfying {{concept|RandomNumberEngine}}:
{{dsc begin}}
{{dsc inc | cpp/numeric/random/dsc random_device}}
{{dsc end}}</text>
      <sha1>ttg8fdhiap5kg7mq9yeljlpn441ju0u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/UniformRandomNumberGenerator</title>
    <ns>0</ns>
    <id>15531</id>
    <redirect title="cpp/concept/UniformRandomBitGenerator" />
    <revision>
      <id>86191</id>
      <timestamp>2016-06-24T18:10:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/concept/UniformRandomNumberGenerator]] to [[cpp/concept/UniformRandomBitGenerator]]: P0346R1: URNG-&gt;URBG</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[cpp/concept/UniformRandomBitGenerator]]</text>
      <sha1>0urpf4e7voj8da9zhoff9jblkiqz6ff</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/UnorderedAssociativeContainer</title>
    <ns>0</ns>
    <id>14046</id>
    <revision>
      <id>87654</id>
      <parentid>82442</parentid>
      <timestamp>2016-09-17T14:15:52Z</timestamp>
      <contributor>
        <ip>93.103.86.219</ip>
      </contributor>
      <text xml:space="preserve" bytes="7290">{{cpp/concept/title|UnorderedAssociativeContainer}}
{{cpp/concept/navbar}}

Unordered associative containers are {{concept|Container}}s that provide fast lookup of objects based on keys.
Worst case complexity is linear but on average much faster for most of the operations.

Unordered associative containers are parametrized by {{ttb|Key}}; {{ttb|Hash}}, a {{concept|Hash}} function object which acts as hash function on {{ttb|Key}}; and {{ttb|Pred}}, a {{concept|BinaryPredicate}} evaluating equivalence between {{ttb|Key}}s.
{{c|std::unordered_map}} and {{c|std::unordered_multimap}} also have a mapped type {{ttb|T}} associated with the {{ttb|Key}}.

If two {{ttb|Key}}s are equal according to {{ttb|Pred}}, {{ttb|Hash}} must return the same value for both keys.

{{c|std::unordered_map}} and {{c|std::unordered_set}} can contain at most one element with a given key, {{c|std::unordered_multiset}} and {{c|std::unordered_multimap}} instead can have multiple elements with the same key (which must always be adjacent on iterations).

For {{c|std::unordered_set}} and {{c|std::unordered_multiset}} the value type is the same as the key type and both {{c|iterator}} and {{c|const_iterator}} are constant iterators.
For {{c|std::unordered_map}} and {{c|std::unordered_multimap}} the value type is {{c|std::pair&lt;const Key, T&gt;}}.

Elements in an unordered associative container are organized into buckets, keys with the same hash will end up in the same bucket.
The number of buckets is increased when the size of the container increases to keep the average number of elements in each bucket under a certain value.

Rehashing invalidates iterator and might cause the elements to be re-arranged in different buckets but it doesn't invalidate references to the elements.

Unordered associative containers meet the requirements of {{concept|AllocatorAwareContainer}}.
For {{c|std::unordered_map}} and {{c|std::unordered_multimap}} the requirements of {{tt|value_type}} in {{concept|AllocatorAwareContainer}} apply to {{tt|key_type}} and
{{tt|mapped_type}} (not to {{tt|value_type}}).

===Requirements===
{{dsc begin}}
{{dsc h1|Legend}}
{{dsc|{{ttb|X}}|Container type}}
{{dsc|{{ttb|a}}|Object of type {{ttb|X}}}}
{{dsc|{{ttb|b}}|{{c|const}} Object of type {{ttb|X}}}}
{{dsc|{{ttb|a_uniq}}|Object in {{ttb|X}} when {{ttb|X}} supports unique keys}}
{{dsc|{{ttb|a_eq}}|Object in {{ttb|X}} when {{ttb|X}} supports multiple equivalent keys}}
{{dsc|{{ttb|i}}, {{ttb|j}}|{{concept|InputIterator}}s denoting a valid range}}
{{dsc|{{ttb|p}}, {{ttb|q2}}|valid const_iterator to {{ttb|a}}}}
{{dsc|{{ttb|q}}, {{ttb|q1}}|dereferenceable const_iterator to {{ttb|a}} denoting a valid range}}
{{dsc|{{ttb|il}}|Object of {{c|std::initializer_list&lt;X::value_type&gt;}}}}
{{dsc|{{ttb|t}}|Object of type {{ttb|X::value_type}} }}
{{dsc|{{ttb|k}}|Object of type {{ttb|X::key_type}} }}
{{dsc|{{ttb|hf}}|{{c|const}} Object of type {{ttb|X::hasher}}}}
{{dsc|{{ttb|eq}}|{{c|const}} Object of type {{ttb|X::key_equal}}}}
{{dsc|{{ttb|n}}|Value of type {{ttb|X::size_type}}}}
{{dsc|{{ttb|z}}|Value of type {{c|float}}}}
{{dsc end}}


{|class=wikitable
!expression||return type||pre/requirements||post/effects||complexity
|-
|{{c|X::key_type}}||{{ttb|Key}}|| || ||compile time
|-
|{{c|X::mapped_type}}||{{ttb|T}}||{{c|std::unordered_map}} and {{c|std::unordered_multimap}} only || ||compile time
|-
|{{c|X::value_type}}||{{ttb|Key}}||{{c|std::unordered_set}} and {{c|std::unordered_multiset}} only. {{concept|Erasable}} in {{ttb|X}} || ||compile time
|-
|{{c|X::value_type}}||{{c|std::pair&lt;const Key, T&gt;}}||{{c|std::unordered_map}} and {{c|std::unordered_multimap}} only. {{concept|Erasable}} in {{ttb|X}} || ||compile time
|-
|{{c|X::hasher}}||{{ttb|Hash}}||{{concept|Hash}}|| ||compile time
|-
|{{c|X::key_equal}}||{{ttb|Pred}}||{{concept|BinaryPredicate}} taking two arguments of type {{ttb|Key}} and expressing an equivalence relation.|| ||compile time
|-
|{{c|X::local_iterator}}||An {{concept|Iterator}} whose category and types are the same as {{ttb|X::iterator}} || || Can be used to iterate through a single bucket ||compile time
|-
|{{c|X::const_local_iterator}}||An {{concept|Iterator}} whose category and types are the same as {{ttb|X::const_iterator}} || || Can be used to iterate through a single bucket ||compile time
|-
|{{c|X(n,hf,eq)}}||{{ttb|X}}||{{ttb|hasher}} and {{ttb|key_equal}} {{concept|CopyConstructible}} ||Constructs an empty container with at least {{ttb|n}} buckets, using the given hash function and equality predicate||linear in {{ttb|n}}
|-
|{{c|X(n,hf)}}||{{ttb|X}}||{{ttb|hasher}} {{concept|CopyConstructible}}, {{ttb|key_equal}} {{concept|DefaultConstructible}} ||Constructs an empty container with at least {{ttb|n}} buckets, using the given hash function and {{ttb|key_equal()}} as equality predicate||linear in {{ttb|n}}
|-
|{{c|X(n,hf)}}||{{ttb|X}}||{{ttb|hasher}} and {{ttb|key_equal}} {{concept|DefaultConstructible}} ||Constructs an empty container with at least {{ttb|n}} buckets, using {{ttb|hasher()}} as hash function and {{ttb|key_equal()}} as equality predicate||linear in {{ttb|n}}
|-
|{{c|X()}}||{{ttb|X}}||{{ttb|hasher}} and {{ttb|key_equal}} {{concept|DefaultConstructible}} ||Constructs an empty container with an unspecified number of buckets, using {{ttb|hasher()}} as hash function and {{ttb|key_equal()}} as equality predicate||constant
|-
|{{c|X(i,j,n,hf,eq)}}||{{ttb|X}}||{{ttb|hasher}} and {{ttb|key_equal}} {{concept|CopyConstructible}}, {{ttb|value_type}} {{concept|EmplaceConstructible}} into {{ttb|X}} from {{ttb|*i}} ||Constructs an empty container with at least {{ttb|n}} buckets, using the given hash function and equality predicate, and inserts elements from [i,j) into it.||average linear, worst quadratin (on the distance between {{ttb|i}} and {{ttb|j}})
|-
|{{c|X(i,j,n,hf)}}||{{ttb|X}}||{{ttb|key_equal}} {{concept|DefaultConstructible}}||As above, with {{c|eq{{=}}key_equal()}}||see above
|-
|{{c|X(i,j,n)}}||{{ttb|X}}||{{ttb|hasher}} {{concept|DefaultConstructible}}||As above, with {{c|hf{{=}}hasher()}}||see above
|-
|{{c|X(i,j)}}||{{ttb|X}}|| ||As above, with an unspecified number of buckets||see above
|-
|{{c|X(il)}}||{{ttb|X}}|| ||{{c|X(il.begin(),il.end()}}||see above
|-
|{{c|X(il,n)}}||{{ttb|X}}|| ||{{c|X(il.begin(),il.end(),n}}||see above
|-
|{{c|X(il,n,hf)}}||{{ttb|X}}|| ||{{c|X(il.begin(),il.end(),n,hf}}||see above
|-
|{{c|X(il,n,hf,eq)}}||{{ttb|X}}|| ||{{c|X(il.begin(),il.end(),n,hf,eq}}||see above
|-
|{{c|X(b)}}||{{ttb|X}}|| ||Copy constructors, also copies the hash function, predicate and maximum load factor||average linear, worst quadratic (in {{ttb|b.size()}})
|-
|{{c|a {{=}} b}}||{{ttb|X&amp;}}|| ||Copy assignment, also copies the hash function, predicate and maximum load factor||average linear, worst quadratic (in {{ttb|b.size()}})
|-
|{{c|a {{=}} il}}||{{ttb|X&amp;}}||{{ttb|value_type}} {{concept|CopyAssignable}} and {{concept|CopyInsertable}} into {{ttb|X}}|| {{c|a {{=}} X(il)}}||see above
|-
|}

{{todo|requirements regarding member functions}}

===UnorderedAssociativeContainers in the standard library===
{{dsc begin}}
{{dsc inc | cpp/container/dsc unordered_set}}
{{dsc inc | cpp/container/dsc unordered_multiset}}
{{dsc inc | cpp/container/dsc unordered_map}}
{{dsc inc | cpp/container/dsc unordered_multimap}}
{{dsc end}}</text>
      <sha1>q0t240q0cnmdlimn3qqhocwfwtd2uk0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/concept/ValueSwappable</title>
    <ns>0</ns>
    <id>9307</id>
    <revision>
      <id>49426</id>
      <parentid>46583</parentid>
      <timestamp>2013-06-01T02:39:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1716">{{cpp/concept/title|ValueSwappable}}
{{cpp/concept/navbar}}
Two objects of this type can be dereferenced and the resulting values can be swapped using unqualified function call {{c|swap()}} in the context where both {{lc|std::swap}} and the user-defined {{c|swap()}}s are visible.

===Requirements===

Type T is {{concept|ValueSwappable}} if

@1@ Type {{tt|T}} satisfies the {{concept|Iterator}} requirements
@2@ For any dereferencable object {{tt|x}} of type {{tt|T}} (that is, any value other than the end iterator), {{tt|*x}} satisfies the {{concept|Swappable}} requirements.

Many standard library functions expect their arguments to satisfy {{concept|ValueSwappable}}, which means that any time the standard library performs a swap, it uses the equivalent of {{c|using std::swap; swap(*iter1, *iter2);}}.

===Example===
{{example
 | 
 | code=

#include &lt;iostream&gt;
#include &lt;vector&gt;

class IntVector {
    std::vector&lt;int&gt; v;
    IntVector&amp; operator=(IntVector); // not assignable
 public:
    void swap(IntVector&amp; other) {
        v.swap(other.v);
    }
};
void swap(IntVector&amp; v1, IntVector&amp; v2) {
    v1.swap(v2);
}

int main()
{
    IntVector v1, v2;    // IntVector is Swappable, but not MoveAssignable
    IntVector* p1 = &amp;v1;
    IntVector* p2 = &amp;v2; // IntVector* is ValueSwappable
    std::iter_swap(p1, p2); // OK: iter_swap requires ValueSwappable
//  std::swap(v1, v2); // compiler error! std::swap requires MoveAssignable
}
}}

[[de:cpp/concept/ValueSwappable]]
[[es:cpp/concept/ValueSwappable]]
[[fr:cpp/concept/ValueSwappable]]
[[it:cpp/concept/ValueSwappable]]
[[ja:cpp/concept/ValueSwappable]]
[[pt:cpp/concept/ValueSwappable]]
[[ru:cpp/concept/ValueSwappable]]
[[zh:cpp/concept/ValueSwappable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container</title>
    <ns>0</ns>
    <id>796</id>
    <revision>
      <id>92007</id>
      <parentid>89911</parentid>
      <timestamp>2017-04-01T20:41:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>-dynarray</comment>
      <text xml:space="preserve" bytes="36226">{{title|Containers library}}
{{cpp/container/navbar}}

The Containers library is a generic collection of class templates and algorithms that allow programmers to easily implement common data structures like queues, lists and stacks.   There are three classes of containers -- sequence containers, associative containers, and unordered associative containers -- each of which is designed to support a different set of operations.

The container manages the storage space that is allocated for its elements and provides member functions to access them, either directly or through iterators (objects with  properties similar to pointers).

Most containers have at least several member functions in common, and share functionalities. Which container is the best for the particular application depends not only on the offered functionality, but also on its efficiency for different workloads.

===Sequence containers===
Sequence containers implement data structures which can be accessed sequentially.

{{dsc begin}}
{{dsc inc | cpp/container/dsc array}}
{{dsc inc | cpp/container/dsc vector}}
{{dsc inc | cpp/container/dsc deque}}
{{dsc inc | cpp/container/dsc forward_list}}
{{dsc inc | cpp/container/dsc list}}
{{dsc end}}

===Associative containers===
Associative containers implement sorted data structures that can be quickly searched ({{math|O(log n)}} complexity).

{{dsc begin}}
{{dsc inc | cpp/container/dsc set}}
{{dsc inc | cpp/container/dsc map}}
{{dsc inc | cpp/container/dsc multiset}}
{{dsc inc | cpp/container/dsc multimap}}
{{dsc end}}

===Unordered associative containers===
Unordered associative containers implement unsorted (hashed) data structures that can be quickly searched ({{math|O(1)}} amortized, {{math|O(n)}} worst-case complexity).

{{dsc begin}}
{{dsc inc | cpp/container/dsc unordered_set}}
{{dsc inc | cpp/container/dsc unordered_map}}
{{dsc inc | cpp/container/dsc unordered_multiset}}
{{dsc inc | cpp/container/dsc unordered_multimap}}
{{dsc end}}

===Container adaptors===
Container adaptors provide a different interface for sequential containers.

{{dsc begin}}
{{dsc inc | cpp/container/dsc stack}}
{{dsc inc | cpp/container/dsc queue}}
{{dsc inc | cpp/container/dsc priority_queue}}
{{dsc end}}

===Iterator invalidation===

{{todo}}

{{rev begin}}
{{rev|since=c++11|
===Thread safety===
# All container functions can be called concurrently by different threads on different containers. More generally, the C++ standard library functions do not read objects accessible by other threads unless those objects are directly or indirectly accessible via the function arguments, including the this pointer.
# All {{lc|const}} member functions can be called concurrently by different threads on the same container. In addition, the member functions {{tt|begin()}}, {{tt|end()}}, {{tt|rbegin()}}, {{tt|rend()}}, {{tt|front()}}, {{tt|back()}}, {{tt|data()}}, {{tt|find()}}, {{tt|lower_bound()}}, {{tt|upper_bound()}}, {{tt|equal_range()}}, {{tt|at()}}, and, except in associative containers, {{tt|operator[]}}, behave as {{lc|const}} for the purposes of thread safety (that is, they can also be called concurrently by different threads on the same container). More generally, the C++ standard library functions do not modify objects unless those objects are accessible, directly or indirectly, via the function's non-const arguments, including the this pointer.
# Different elements in the same container can be modified concurrently by different threads, except for the elements of {{lc|std::vector&lt;bool&gt;}} (for example, a vector of {{lc|std::future}} objects can be receiving values from multiple threads).
# Iterator operations (e.g. incrementing an iterator) read, but do not modify the underlying container, and may be executed concurrently with operations on other iterators on the same container, with the const member functions, or reads from the elements. Container operations that invalidate any iterators modify the container and cannot be executed concurrently with any operations on existing iterators even if those iterators are not invalidated.
# Elements of the same container can be modified concurrently with those member functions that are not specified to access these elements. More generally, the C++ standard library functions do not read objects indirectly accessible through their arguments (including other elements of a container) except when required by its specification.
# In any case, container operations (as well as algorithms, or any other C++ standard library functions) may be parallelized internally as long as this does not change the user-visible results (e.g. {{lc|std::transform}} may be parallelized, but not {{lc|std::for_each}} which is specified to visit each element of a sequence in order)
}}
{{rev end}}

===Member function table===

{|
|-
| style=&quot;width:4em; background:#bcbcff;&quot; | 
| - functions present in C++03
|-
| style=&quot;width:4em; background:#bcffbc;&quot; | 
| - functions present since C++11
|-
| style=&quot;width:4em; background:#ffeebc;&quot; | 
| - functions present since C++17
|}

&lt;div style=&quot;display: inline-block;&quot;&gt;
&lt;div style=&quot;display: inline-block;&quot;&gt;
{| class=&quot;wikitable&quot; style=&quot;font-size:0.8em; line-height:1em; text-align: center;&quot;
|- 
| colspan=&quot;2&quot; |
! colspan=&quot;5&quot; | Sequence containers  
! colspan=&quot;4&quot; | Associative containers 
! colspan=&quot;4&quot; | Unordered associative containers 
! colspan=&quot;3&quot; | Container adaptors
|-
! colspan=&quot;2&quot; | Header 
! {{tt|{{header|array}}}} 
! {{tt|{{header|vector}}}} 
! {{tt|{{header|deque}}}} 
! {{tt|{{header|forward_list}}}} 
! {{tt|{{header|list}}}} 
! colspan=&quot;2&quot; | {{tt|{{header|set}}}} 
! colspan=&quot;2&quot; | {{tt|{{header|map}}}} 
! colspan=&quot;2&quot; | {{tt|{{header|unordered_set}}}} 
! colspan=&quot;2&quot; | {{tt|{{header|unordered_map}}}} 
! {{tt|{{header|stack}}}} 
! colspan=&quot;2&quot; | {{tt|{{header|queue}}}}
|-
! colspan=&quot;2&quot; | Container
! {{cpp/container/table cell hn | /array }}
! {{cpp/container/table cell ho | /vector }}
! {{cpp/container/table cell ho | /deque }}
! {{cpp/container/table cell hn | /forward_list }}
! {{cpp/container/table cell ho | /list }}
! {{cpp/container/table cell ho | /set }}
! {{cpp/container/table cell ho | /multiset }}
! {{cpp/container/table cell ho | /map }}
! {{cpp/container/table cell ho | /multimap }}
! {{cpp/container/table cell hn | /unordered_set }}
! {{cpp/container/table cell hn | /unordered_multiset }}
! {{cpp/container/table cell hn | /unordered_map }}
! {{cpp/container/table cell hn | /unordered_multimap }}
! {{cpp/container/table cell ho | /stack }}
! {{cpp/container/table cell ho | /queue }}
! {{cpp/container/table cell ho | /priority_queue }}
|-
! rowspan=&quot;4&quot; |
| {{cpp/container/table cell lo | (constructor)}}
| {{cpp/container/table cell |(implicit)}}
| {{cpp/container/table cell o | /vector/vector }}
| {{cpp/container/table cell o | /deque/deque }}
| {{cpp/container/table cell n | /forward_list/forward_list }}
| {{cpp/container/table cell o | /list/list }}
| {{cpp/container/table cell o | /set/set }}
| {{cpp/container/table cell o | /multiset/multiset }}
| {{cpp/container/table cell o | /map/map }}
| {{cpp/container/table cell o | /multimap/multimap }}
| {{cpp/container/table cell n | /unordered_set/unordered_set }}
| {{cpp/container/table cell n | /unordered_multiset/unordered_multiset }}
| {{cpp/container/table cell n | /unordered_map/unordered_map }}
| {{cpp/container/table cell n | /unordered_multimap/unordered_multimap }}
| {{cpp/container/table cell o | /stack/stack }}
| {{cpp/container/table cell o | /queue/queue }}
| {{cpp/container/table cell o | /priority_queue/priority_queue }}
|-
&lt;!-- ---&gt;
| {{cpp/container/table cell lo | (destructor)}}
| {{cpp/container/table cell |(implicit)}}
| {{cpp/container/table cell o | /vector/~vector }}
| {{cpp/container/table cell o | /deque/~deque }}
| {{cpp/container/table cell n | /forward_list/~forward_list }}
| {{cpp/container/table cell o | /list/~list }}
| {{cpp/container/table cell o | /set/~set }}
| {{cpp/container/table cell o | /multiset/~multiset }}
| {{cpp/container/table cell o | /map/~map }}
| {{cpp/container/table cell o | /multimap/~multimap }}
| {{cpp/container/table cell n | /unordered_set/~unordered_set }}
| {{cpp/container/table cell n | /unordered_multiset/~unordered_multiset }}
| {{cpp/container/table cell n | /unordered_map/~unordered_map }}
| {{cpp/container/table cell n | /unordered_multimap/~unordered_multimap }}
| {{cpp/container/table cell o | /stack/~stack }}
| {{cpp/container/table cell o | /queue/~queue }}
| {{cpp/container/table cell o | /priority_queue/~priority_queue }}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | operator{{=}}}}
| {{cpp/container/table cell |(implicit)}}
| {{cpp/container/table cell o | /vector/operator{{=}} }}
| {{cpp/container/table cell o | /deque/operator{{=}} }}
| {{cpp/container/table cell n | /forward_list/operator{{=}} }}
| {{cpp/container/table cell o | /list/operator{{=}} }}
| {{cpp/container/table cell o | /set/operator{{=}} }}
| {{cpp/container/table cell o | /multiset/operator{{=}} }}
| {{cpp/container/table cell o | /map/operator{{=}} }}
| {{cpp/container/table cell o | /multimap/operator{{=}} }}
| {{cpp/container/table cell n | /unordered_set/operator{{=}} }}
| {{cpp/container/table cell n | /unordered_multiset/operator{{=}} }}
| {{cpp/container/table cell n | /unordered_map/operator{{=}} }}
| {{cpp/container/table cell n | /unordered_multimap/operator{{=}} }}
| {{cpp/container/table cell o | /stack/operator{{=}} }}
| {{cpp/container/table cell o | /queue/operator{{=}} }}
| {{cpp/container/table cell o | /priority_queue/operator{{=}} }}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | assign}}
| {{n/a||}}
| {{cpp/container/table cell o | /vector/assign }}
| {{cpp/container/table cell o | /deque/assign }}
| {{cpp/container/table cell n | /forward_list/assign }}
| {{cpp/container/table cell o | /list/assign }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
! rowspan=&quot;4&quot; | Iterators
| {{cpp/container/table cell lon | begin|cbegin}}
| {{cpp/container/table cell nn | /array/begin |begin|cbegin}}
| {{cpp/container/table cell on | /vector/begin |begin|cbegin}}
| {{cpp/container/table cell on | /deque/begin |begin|cbegin}}
| {{cpp/container/table cell nn | /forward_list/begin |begin|cbegin}}
| {{cpp/container/table cell on | /list/begin |begin|cbegin}}
| {{cpp/container/table cell on | /set/begin |begin|cbegin}}
| {{cpp/container/table cell on | /multiset/begin |begin|cbegin}}
| {{cpp/container/table cell on | /map/begin |begin|cbegin}}
| {{cpp/container/table cell on | /multimap/begin |begin|cbegin}}
| {{cpp/container/table cell nn | /unordered_set/begin |begin|cbegin}}
| {{cpp/container/table cell nn | /unordered_multiset/begin |begin|cbegin}}
| {{cpp/container/table cell nn | /unordered_map/begin |begin|cbegin}}
| {{cpp/container/table cell nn | /unordered_multimap/begin |begin|cbegin}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lon | end|cend}}
| {{cpp/container/table cell nn | /array/end |end|cend}}
| {{cpp/container/table cell on | /vector/end |end|cend}}
| {{cpp/container/table cell on | /deque/end |end|cend}}
| {{cpp/container/table cell nn | /forward_list/end |end|cend}}
| {{cpp/container/table cell on | /list/end |end|cend}}
| {{cpp/container/table cell on | /set/end |end|cend}}
| {{cpp/container/table cell on | /multiset/end |end|cend}}
| {{cpp/container/table cell on | /map/end |end|cend}}
| {{cpp/container/table cell on | /multimap/end |end|cend}}
| {{cpp/container/table cell nn | /unordered_set/end |end|cend}}
| {{cpp/container/table cell nn | /unordered_multiset/end |end|cend}}
| {{cpp/container/table cell nn | /unordered_map/end |end|cend}}
| {{cpp/container/table cell nn | /unordered_multimap/end |end|cend}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lon | rbegin|crbegin}}
| {{cpp/container/table cell nn | /array/rbegin |rbegin|crbegin}}
| {{cpp/container/table cell on | /vector/rbegin |rbegin|crbegin}}
| {{cpp/container/table cell on | /deque/rbegin |rbegin|crbegin}}
| {{n/a|}}
| {{cpp/container/table cell on | /list/rbegin |rbegin|crbegin}}
| {{cpp/container/table cell on | /set/rbegin |rbegin|crbegin}}
| {{cpp/container/table cell on | /multiset/rbegin |rbegin|crbegin}}
| {{cpp/container/table cell on | /map/rbegin |rbegin|crbegin}}
| {{cpp/container/table cell on | /multimap/rbegin |rbegin|crbegin}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lon | rend|crend}}
| {{cpp/container/table cell nn | /array/rend |rend|crend}}
| {{cpp/container/table cell on | /vector/rend |rend|crend}}
| {{cpp/container/table cell on | /deque/rend |rend|crend}}
| {{n/a|}}
| {{cpp/container/table cell on | /list/rend |rend|crend}}
| {{cpp/container/table cell on | /set/rend |rend|crend}}
| {{cpp/container/table cell on | /multiset/rend |rend|crend}}
| {{cpp/container/table cell on | /map/rend |rend|crend}}
| {{cpp/container/table cell on | /multimap/rend |rend|crend}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
! rowspan=&quot;4&quot; | Element &lt;br&gt; access
| {{cpp/container/table cell lo | at}}
| {{cpp/container/table cell n | /array/at }}
| {{cpp/container/table cell o | /vector/at }}
| {{cpp/container/table cell o | /deque/at }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /map/at }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /unordered_map/at }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | operator[]}}
| {{cpp/container/table cell n | /array/operator_at |operator[]}}
| {{cpp/container/table cell o | /vector/operator_at |operator[]}}
| {{cpp/container/table cell o | /deque/operator_at |operator[]}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /map/operator_at |operator[]}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /unordered_map/operator_at |operator[]}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | front}}
| {{cpp/container/table cell n | /array/front }}
| {{cpp/container/table cell o | /vector/front }}
| {{cpp/container/table cell o | /deque/front }}
| {{cpp/container/table cell n | /forward_list/front }}
| {{cpp/container/table cell o | /list/front }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /queue/front }}
| {{cpp/container/table cell o | /priority_queue/top | top }}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | back}}
| {{cpp/container/table cell n | /array/back }}
| {{cpp/container/table cell o | /vector/back }}
| {{cpp/container/table cell o | /deque/back }}
| {{n/a|}}
| {{cpp/container/table cell o | /list/back }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /stack/top | top}}
| {{cpp/container/table cell o | /queue/back }}
| {{n/a|}}
|-
! rowspan=&quot;7&quot; | Capacity
| {{cpp/container/table cell lo | empty}}
| {{cpp/container/table cell n | /array/empty }}
| {{cpp/container/table cell o | /vector/empty }}
| {{cpp/container/table cell o | /deque/empty }}
| {{cpp/container/table cell n | /forward_list/empty }}
| {{cpp/container/table cell o | /list/empty }}
| {{cpp/container/table cell o | /set/empty }}
| {{cpp/container/table cell o | /multiset/empty }}
| {{cpp/container/table cell o | /map/empty }}
| {{cpp/container/table cell o | /multimap/empty }}
| {{cpp/container/table cell n | /unordered_set/empty }}
| {{cpp/container/table cell n | /unordered_multiset/empty }}
| {{cpp/container/table cell n | /unordered_map/empty }}
| {{cpp/container/table cell n | /unordered_multimap/empty }}
| {{cpp/container/table cell o | /stack/empty }}
| {{cpp/container/table cell o | /queue/empty }}
| {{cpp/container/table cell o | /priority_queue/empty }}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | size}}
| {{cpp/container/table cell n | /array/size }}
| {{cpp/container/table cell o | /vector/size }}
| {{cpp/container/table cell o | /deque/size }}
| {{n/a|}}
| {{cpp/container/table cell o | /list/size }}
| {{cpp/container/table cell o | /set/size }}
| {{cpp/container/table cell o | /multiset/size }}
| {{cpp/container/table cell o | /map/size }}
| {{cpp/container/table cell o | /multimap/size }}
| {{cpp/container/table cell n | /unordered_set/size }}
| {{cpp/container/table cell n | /unordered_multiset/size }}
| {{cpp/container/table cell n | /unordered_map/size }}
| {{cpp/container/table cell n | /unordered_multimap/size }}
| {{cpp/container/table cell o | /stack/size }}
| {{cpp/container/table cell o | /queue/size }}
| {{cpp/container/table cell o | /priority_queue/size }}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | max_size}}
| {{cpp/container/table cell n | /array/max_size }}
| {{cpp/container/table cell o | /vector/max_size }}
| {{cpp/container/table cell o | /deque/max_size }}
| {{cpp/container/table cell n | /forward_list/max_size }}
| {{cpp/container/table cell o | /list/max_size }}
| {{cpp/container/table cell o | /set/max_size }}
| {{cpp/container/table cell o | /multiset/max_size }}
| {{cpp/container/table cell o | /map/max_size }}
| {{cpp/container/table cell o | /multimap/max_size }}
| {{cpp/container/table cell n | /unordered_set/max_size }}
| {{cpp/container/table cell n | /unordered_multiset/max_size }}
| {{cpp/container/table cell n | /unordered_map/max_size }}
| {{cpp/container/table cell n | /unordered_multimap/max_size }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | resize}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/resize }}
| {{cpp/container/table cell o | /deque/resize }}
| {{cpp/container/table cell n | /forward_list/resize }}
| {{cpp/container/table cell o | /list/resize }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | capacity}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/capacity }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /unordered_set/bucket_count }}
| {{cpp/container/table cell n | /unordered_multiset/bucket_count }}
| {{cpp/container/table cell n | /unordered_map/bucket_count }}
| {{cpp/container/table cell n | /unordered_multimap/bucket_count }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | reserve}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/reserve}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /unordered_set/reserve }}
| {{cpp/container/table cell n | /unordered_multiset/reserve }}
| {{cpp/container/table cell n | /unordered_map/reserve }}
| {{cpp/container/table cell n | /unordered_multimap/reserve }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell ln | shrink_to_fit}}
| {{n/a|}}
| {{cpp/container/table cell n | /vector/shrink_to_fit}}
| {{cpp/container/table cell n | /deque/shrink_to_fit}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
! rowspan=&quot;14&quot; | Modifiers
| {{cpp/container/table cell lo | clear}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/clear }}
| {{cpp/container/table cell o | /deque/clear }}
| {{cpp/container/table cell n | /forward_list/clear }}
| {{cpp/container/table cell o | /list/clear }}
| {{cpp/container/table cell o | /set/clear }}
| {{cpp/container/table cell o | /multiset/clear }}
| {{cpp/container/table cell o | /map/clear }}
| {{cpp/container/table cell o | /multimap/clear }}
| {{cpp/container/table cell n | /unordered_set/clear }}
| {{cpp/container/table cell n | /unordered_multiset/clear }}
| {{cpp/container/table cell n | /unordered_map/clear }}
| {{cpp/container/table cell n | /unordered_multimap/clear }}
| {{n/a|}}  
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | insert}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/insert }}
| {{cpp/container/table cell o | /deque/insert }}
| {{cpp/container/table cell n | /forward_list/insert_after | insert_after}}
| {{cpp/container/table cell o | /list/insert }}
| {{cpp/container/table cell o | /set/insert }}
| {{cpp/container/table cell o | /multiset/insert }}
| {{cpp/container/table cell o | /map/insert }}
| {{cpp/container/table cell o | /multimap/insert }}
| {{cpp/container/table cell n | /unordered_set/insert }}
| {{cpp/container/table cell n | /unordered_multiset/insert }}
| {{cpp/container/table cell n | /unordered_map/insert }}
| {{cpp/container/table cell n | /unordered_multimap/insert }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell ln | emplace}}
| {{n/a|}}
| {{cpp/container/table cell n | /vector/emplace }}
| {{cpp/container/table cell n | /deque/emplace }}
| {{cpp/container/table cell n | /forward_list/emplace_after | emplace_after}}
| {{cpp/container/table cell n | /list/emplace }}
| {{cpp/container/table cell n | /set/emplace }}
| {{cpp/container/table cell n | /multiset/emplace }}
| {{cpp/container/table cell n | /map/emplace }}
| {{cpp/container/table cell n | /multimap/emplace }}
| {{cpp/container/table cell n | /unordered_set/emplace }}
| {{cpp/container/table cell n | /unordered_multiset/emplace }}
| {{cpp/container/table cell n | /unordered_map/emplace }}
| {{cpp/container/table cell n | /unordered_multimap/emplace }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell ln | emplace_hint}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /set/emplace_hint }}
| {{cpp/container/table cell n | /multiset/emplace_hint }}
| {{cpp/container/table cell n | /map/emplace_hint }}
| {{cpp/container/table cell n | /multimap/emplace_hint }}
| {{cpp/container/table cell n | /unordered_set/emplace_hint }}
| {{cpp/container/table cell n | /unordered_multiset/emplace_hint }}
| {{cpp/container/table cell n | /unordered_map/emplace_hint }}
| {{cpp/container/table cell n | /unordered_multimap/emplace_hint }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | erase}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/erase }}
| {{cpp/container/table cell o | /deque/erase }}
| {{cpp/container/table cell n | /forward_list/erase_after | erase_after}}
| {{cpp/container/table cell o | /list/erase }}
| {{cpp/container/table cell o | /set/erase }}
| {{cpp/container/table cell o | /multiset/erase }}
| {{cpp/container/table cell o | /map/erase }}
| {{cpp/container/table cell o | /multimap/erase }}
| {{cpp/container/table cell n | /unordered_set/erase }}
| {{cpp/container/table cell n | /unordered_multiset/erase }}
| {{cpp/container/table cell n | /unordered_map/erase }}
| {{cpp/container/table cell n | /unordered_multimap/erase }}
| {{n/a|}} 
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | push_front}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /deque/push_front }}
| {{cpp/container/table cell n | /forward_list/push_front }}
| {{cpp/container/table cell o | /list/push_front }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}} 
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell ln | emplace_front}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /deque/emplace_front }}
| {{cpp/container/table cell n | /forward_list/emplace_front }}
| {{cpp/container/table cell n | /list/emplace_front }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}} 
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | pop_front}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /deque/pop_front }}
| {{cpp/container/table cell n | /forward_list/pop_front }}
| {{cpp/container/table cell o | /list/pop_front }} 
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}} 
| {{cpp/container/table cell o | /queue/pop }}
| {{cpp/container/table cell o | /priority_queue/pop}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | push_back}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/push_back }}
| {{cpp/container/table cell o | /deque/push_back }}
| {{n/a|}}
| {{cpp/container/table cell o | /list/push_back }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /stack/push}}
| {{cpp/container/table cell o | /queue/push}}
| {{cpp/container/table cell o | /priority_queue/push}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell ln | emplace_back}}
| {{n/a|}}
| {{cpp/container/table cell n | /vector/emplace_back }}
| {{cpp/container/table cell n | /deque/emplace_back }}
| {{n/a|}}
| {{cpp/container/table cell n | /list/emplace_back }} 
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /stack/emplace}}
| {{cpp/container/table cell n | /queue/emplace}}
| {{cpp/container/table cell n | /priority_queue/emplace}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | pop_back}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/pop_back }}
| {{cpp/container/table cell o | /deque/pop_back }}
| {{n/a|}}
| {{cpp/container/table cell o | /list/pop_back }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /stack/pop}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | swap}}
| {{cpp/container/table cell n | /array/swap }}
| {{cpp/container/table cell o | /vector/swap }}
| {{cpp/container/table cell o | /deque/swap }}
| {{cpp/container/table cell n | /forward_list/swap }}
| {{cpp/container/table cell o | /list/swap }}
| {{cpp/container/table cell o | /set/swap }}
| {{cpp/container/table cell o | /multiset/swap }}
| {{cpp/container/table cell o | /map/swap }}
| {{cpp/container/table cell o | /multimap/swap }}
| {{cpp/container/table cell n | /unordered_set/swap }}
| {{cpp/container/table cell n | /unordered_multiset/swap }}
| {{cpp/container/table cell n | /unordered_map/swap }}
| {{cpp/container/table cell n | /unordered_multimap/swap }}
| {{cpp/container/table cell n | /stack/swap }}
| {{cpp/container/table cell n | /queue/swap }}
| {{cpp/container/table cell n | /priority_queue/swap }}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | merge }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /forward_list/merge }}
| {{cpp/container/table cell o | /list/merge }}
| {{cpp/container/table cell 17 | /set/merge }}
| {{cpp/container/table cell 17 | /multiset/merge }}
| {{cpp/container/table cell 17 | /map/merge }}
| {{cpp/container/table cell 17 | /multimap/merge }}
| {{cpp/container/table cell 17 | /unordered_set/merge }}
| {{cpp/container/table cell 17 | /unordered_multiset/merge }}
| {{cpp/container/table cell 17 | /unordered_map/merge }}
| {{cpp/container/table cell 17 | /unordered_multimap/merge }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | extract}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell 17 | /set/extract }}
| {{cpp/container/table cell 17 | /multiset/extract }}
| {{cpp/container/table cell 17 | /map/extract }}
| {{cpp/container/table cell 17 | /multimap/extract }}
| {{cpp/container/table cell 17 | /unordered_set/extract }}
| {{cpp/container/table cell 17 | /unordered_multiset/extract }}
| {{cpp/container/table cell 17 | /unordered_map/extract }}
| {{cpp/container/table cell 17 | /unordered_multimap/extract }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
! rowspan=&quot;6&quot; | List operations
| {{cpp/container/table cell lo | splice }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /forward_list/splice_after | splice_after }}
| {{cpp/container/table cell o | /list/splice }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | remove }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /forward_list/remove }}
| {{cpp/container/table cell o | /list/remove }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | remove_if }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /forward_list/remove | remove_if }}
| {{cpp/container/table cell o | /list/remove | remove_if }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | reverse }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /forward_list/reverse }}
| {{cpp/container/table cell o | /list/reverse }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | unique }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /forward_list/unique }}
| {{cpp/container/table cell o | /list/unique }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | sort }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /forward_list/sort }}
| {{cpp/container/table cell o | /list/sort }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
! rowspan=&quot;5&quot; | Lookup
| {{cpp/container/table cell lo | count}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /set/count }}
| {{cpp/container/table cell o | /multiset/count }}
| {{cpp/container/table cell o | /map/count }}
| {{cpp/container/table cell o | /multimap/count }}
| {{cpp/container/table cell n | /unordered_set/count }}
| {{cpp/container/table cell n | /unordered_multiset/count }}
| {{cpp/container/table cell n | /unordered_map/count }}
| {{cpp/container/table cell n | /unordered_multimap/count }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | find}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /set/find }}
| {{cpp/container/table cell o | /multiset/find }}
| {{cpp/container/table cell o | /map/find }}
| {{cpp/container/table cell o | /multimap/find }}
| {{cpp/container/table cell n | /unordered_set/find }}
| {{cpp/container/table cell n | /unordered_multiset/find }}
| {{cpp/container/table cell n | /unordered_map/find }}
| {{cpp/container/table cell n | /unordered_multimap/find }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | lower_bound}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /set/lower_bound }}
| {{cpp/container/table cell o | /multiset/lower_bound }}
| {{cpp/container/table cell o | /map/lower_bound }}
| {{cpp/container/table cell o | /multimap/lower_bound }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | upper_bound}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /set/upper_bound }}
| {{cpp/container/table cell o | /multiset/upper_bound }}
| {{cpp/container/table cell o | /map/upper_bound }}
| {{cpp/container/table cell o | /multimap/upper_bound }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | equal_range}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /set/equal_range }}
| {{cpp/container/table cell o | /multiset/equal_range }}
| {{cpp/container/table cell o | /map/equal_range }}
| {{cpp/container/table cell o | /multimap/equal_range }}
| {{cpp/container/table cell n | /unordered_set/equal_range }}
| {{cpp/container/table cell n | /unordered_multiset/equal_range }}
| {{cpp/container/table cell n | /unordered_map/equal_range }}
| {{cpp/container/table cell n | /unordered_multimap/equal_range }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
! rowspan=&quot;4&quot; | Observers
| {{cpp/container/table cell lo | key_comp}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /set/key_comp }}
| {{cpp/container/table cell o | /multiset/key_comp }}
| {{cpp/container/table cell o | /map/key_comp }}
| {{cpp/container/table cell o | /multimap/key_comp }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell lo | value_comp}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell o | /set/value_comp }}
| {{cpp/container/table cell o | /multiset/value_comp }}
| {{cpp/container/table cell o | /map/value_comp }}
| {{cpp/container/table cell o | /multimap/value_comp }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell ln | hash_function}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /unordered_set/hash_function }}
| {{cpp/container/table cell n | /unordered_multiset/hash_function }}
| {{cpp/container/table cell n | /unordered_map/hash_function }}
| {{cpp/container/table cell n | /unordered_multimap/hash_function }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
&lt;!-- --&gt;
| {{cpp/container/table cell ln | key_eq}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
| {{cpp/container/table cell n | /unordered_set/key_eq }}
| {{cpp/container/table cell n | /unordered_multiset/key_eq }}
| {{cpp/container/table cell n | /unordered_map/key_eq }}
| {{cpp/container/table cell n | /unordered_multimap/key_eq }}
| {{n/a|}}
| {{n/a|}}
| {{n/a|}}
|-
! Allocator
| {{cpp/container/table cell lo | get_allocator}}
| {{n/a|}}
| {{cpp/container/table cell o | /vector/get_allocator }}
| {{cpp/container/table cell o | /deque/get_allocator }}
| {{cpp/container/table cell n | /forward_list/get_allocator }}
| {{cpp/container/table cell o | /list/get_allocator }}
| {{cpp/container/table cell o | /set/get_allocator }}
| {{cpp/container/table cell o | /multiset/get_allocator }}
| {{cpp/container/table cell o | /map/get_allocator }}
| {{cpp/container/table cell o | /multimap/get_allocator }}
| {{cpp/container/table cell n | /unordered_set/get_allocator }}
| {{cpp/container/table cell n | /unordered_multiset/get_allocator }}
| {{cpp/container/table cell n | /unordered_map/get_allocator }}
| {{cpp/container/table cell n | /unordered_multimap/get_allocator }}
| {{n/a|}}  
| {{n/a|}}
| {{n/a|}}
|-
! colspan=&quot;2&quot; | Container
! {{cpp/container/table cell hn | /array }}
! {{cpp/container/table cell ho | /vector }}
! {{cpp/container/table cell ho | /deque }}
! {{cpp/container/table cell hn | /forward_list }}
! {{cpp/container/table cell ho | /list }}
! {{cpp/container/table cell ho | /set }}
! {{cpp/container/table cell ho | /multiset }}
! {{cpp/container/table cell ho | /map }}
! {{cpp/container/table cell ho | /multimap }}
! {{cpp/container/table cell hn | /unordered_set }}
! {{cpp/container/table cell hn | /unordered_multiset }}
! {{cpp/container/table cell hn | /unordered_map }}
! {{cpp/container/table cell hn | /unordered_multimap }}
! {{cpp/container/table cell ho | /stack }}
! {{cpp/container/table cell ho | /queue }}
! {{cpp/container/table cell ho | /priority_queue }}
|- 
| colspan=&quot;2&quot; |
! colspan=&quot;5&quot; | Sequence containers  
! colspan=&quot;4&quot; | Associative containers 
! colspan=&quot;4&quot; | Unordered associative containers 
! colspan=&quot;3&quot; | Container adaptors
|}
&lt;/div&gt;
&lt;/div&gt;

(A PDF version of this table is available at [[File:container-library-overview-2012-12-27.pdf]].)

[[ar:cpp/container]]
[[de:cpp/container]]
[[es:cpp/container]]
[[fr:cpp/container]]
[[it:cpp/container]]
[[ja:cpp/container]]
[[pl:cpp/container]]
[[pt:cpp/container]]
[[ru:cpp/container]]
[[tr:cpp/container]]
[[zh:cpp/container]]</text>
      <sha1>5dtj9cpgd5cjn737nye5rrijjr665pa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container//value compare</title>
    <ns>0</ns>
    <id>9937</id>
    <revision>
      <id>47101</id>
      <timestamp>2013-04-23T16:55:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>dummy</comment>
      <text xml:space="preserve" bytes="8">&lt;!-- --&gt;</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array</title>
    <ns>0</ns>
    <id>850</id>
    <revision>
      <id>86887</id>
      <parentid>86886</parentid>
      <timestamp>2016-07-14T02:11:29Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rv. ContiguousContainer is not in the concepts TS</comment>
      <text xml:space="preserve" bytes="5179">{{cpp/title|array}}
{{cpp/container/array/navbar}}
{{ddcl | header=array | since=c++11 |
template&lt; 
    class T, 
    std::size_t N 
&gt; struct array;
}}

{{tt|std::array}} is a container that encapsulates fixed size arrays.  

This container is an aggregate type with the same semantics as a struct holding a [[cpp/language/array|C-style array]] {{c|T[N]}} as its only non-static data member. Unlike a C-style array, it doesn't decay to {{c|T*}} automatically. As an aggregate type, it can be initialized with [[cpp/language/aggregate_initialization|aggregate-initialization]] given at most {{tt|N}} initializers that are convertible to {{tt|T}}: {{c|1=std::array&lt;int, 3&gt; a = {1,2,3};}}.

The struct combines the performance and accessibility of a C-style array with the benefits of a standard container, such as knowing its own size, supporting assignment, random access iterators, etc.

{{tt|std::array}} satisfies the requirements of {{concept|Container}} and {{concept|ReversibleContainer}} except that default-constructed array is not empty and that the complexity of swapping is linear, satisfies the requirements of {{rev inl|since=c++17|{{concept|ContiguousContainer}}}} and partially satisfies the requirements of {{concept|SequenceContainer}}.

There is a special case for a zero-length array (&lt;code&gt;N == 0&lt;/code&gt;). In that case, {{c|
1=array.begin() == array.end()}}, which is some unique value.  The effect of calling {{c|front()}} or {{c|back()}} on a zero-sized array is undefined.

An array can also be used as a tuple of {{tt|N}} elements of the same type.

===Iterator invalidation===
As a rule, iterators to an array are never invalidated throughout the lifetime of the array. One should take note, however, that during [[cpp/container/array/swap|swap]], the iterator will continue to point to the same array element, and will thus change its value.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc value_type | array}}
{{dsc inc | cpp/container/dsc size_type | array}}
{{dsc inc | cpp/container/dsc difference_type | array}}
{{dsc inc | cpp/container/dsc reference | array}}
{{dsc inc | cpp/container/dsc const_reference | array}}
{{dsc inc | cpp/container/dsc pointer | array}}
{{dsc inc | cpp/container/dsc const_pointer | array}}
{{dsc inc | cpp/container/dsc iterator | array}}
{{dsc inc | cpp/container/dsc const_iterator | array}}
{{dsc inc | cpp/container/dsc reverse_iterator | array}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | array}}
{{dsc end}}

===Member functions===
{{dsc begin}}

{{dsc h2 | Implicitly-defined member functions}}
{{dsc mem ctor | nolink=true | notes={{mark implicit}} | initialized the array following the rules of [[cpp/language/aggregate_initialization|aggregate initialization]] (note that default initialization may result in indeterminate values for non-class {{tt|T}})}}
{{dsc mem dtor | nolink=true | notes={{mark implicit}} | destroys every element of the array}}
{{dsc mem fun | operator{{=}} | nolink=true | notes={{mark implicit}} | overwrites every element of the array with the corresponding element of another array}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc at | array}}
{{dsc inc | cpp/container/dsc operator_at | array}}
{{dsc inc | cpp/container/dsc front | array}}
{{dsc inc | cpp/container/dsc back | array}}
{{dsc inc | cpp/container/dsc data | array}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | array}}
{{dsc inc | cpp/container/dsc end | array}}
{{dsc inc | cpp/container/dsc rbegin | array}}
{{dsc inc | cpp/container/dsc rend | array}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | array}}
{{dsc inc | cpp/container/dsc size | array}}
{{dsc inc | cpp/container/dsc max_size | array}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/container/dsc fill | array}}
{{dsc inc | cpp/container/dsc swap | array}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | array}}
{{dsc inc | cpp/container/array/dsc get}}
{{dsc inc | cpp/container/dsc swap2 | array}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/container/array/dsc tuple_size}}
{{dsc inc | cpp/container/array/dsc tuple_element}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;array&gt;

int main()
{
    // construction uses aggregate initialization
    std::array&lt;int, 3&gt; a1{ {1, 2, 3} }; // double-braces required in C++11 (not in C++14)
    std::array&lt;int, 3&gt; a2 = {1, 2, 3};  // never required after =
    std::array&lt;std::string, 2&gt; a3 = { std::string(&quot;a&quot;), &quot;b&quot; };

    // container operations are supported
    std::sort(a1.begin(), a1.end());
    std::reverse_copy(a2.begin(), a2.end(), 
                      std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));

    std::cout &lt;&lt; '\n';
    
    // ranged for loop is supported
    for(const auto&amp; s: a3)
        std::cout &lt;&lt; s &lt;&lt; ' ';
}
 | output=
3 2 1 
a b 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc make array}}
{{dsc inc | cpp/experimental/dsc to array}}
{{dsc end}}
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}</text>
      <sha1>9iqj9snftrkftjogbf7l4obm5cosoyd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/at</title>
    <ns>0</ns>
    <id>851</id>
    <revision>
      <id>50432</id>
      <parentid>44212</parentid>
      <timestamp>2013-06-01T03:28:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/at|array}}

[[de:cpp/container/array/at]]
[[es:cpp/container/array/at]]
[[fr:cpp/container/array/at]]
[[it:cpp/container/array/at]]
[[ja:cpp/container/array/at]]
[[pt:cpp/container/array/at]]
[[ru:cpp/container/array/at]]
[[zh:cpp/container/array/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/back</title>
    <ns>0</ns>
    <id>852</id>
    <revision>
      <id>50433</id>
      <parentid>44207</parentid>
      <timestamp>2013-06-01T03:28:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/back|array}}

[[de:cpp/container/array/back]]
[[es:cpp/container/array/back]]
[[fr:cpp/container/array/back]]
[[it:cpp/container/array/back]]
[[ja:cpp/container/array/back]]
[[pt:cpp/container/array/back]]
[[ru:cpp/container/array/back]]
[[zh:cpp/container/array/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/begin</title>
    <ns>0</ns>
    <id>853</id>
    <revision>
      <id>50434</id>
      <parentid>44202</parentid>
      <timestamp>2013-06-01T03:28:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/begin|array}}

[[de:cpp/container/array/begin]]
[[es:cpp/container/array/begin]]
[[fr:cpp/container/array/begin]]
[[it:cpp/container/array/begin]]
[[ja:cpp/container/array/begin]]
[[pt:cpp/container/array/begin]]
[[ru:cpp/container/array/begin]]
[[zh:cpp/container/array/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/data</title>
    <ns>0</ns>
    <id>854</id>
    <revision>
      <id>50435</id>
      <parentid>44197</parentid>
      <timestamp>2013-06-01T03:28:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/data|array}}

[[de:cpp/container/array/data]]
[[es:cpp/container/array/data]]
[[fr:cpp/container/array/data]]
[[it:cpp/container/array/data]]
[[ja:cpp/container/array/data]]
[[pt:cpp/container/array/data]]
[[ru:cpp/container/array/data]]
[[zh:cpp/container/array/data]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/empty</title>
    <ns>0</ns>
    <id>855</id>
    <revision>
      <id>50436</id>
      <parentid>44190</parentid>
      <timestamp>2013-06-01T03:28:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/empty|array}}

[[de:cpp/container/array/empty]]
[[es:cpp/container/array/empty]]
[[fr:cpp/container/array/empty]]
[[it:cpp/container/array/empty]]
[[ja:cpp/container/array/empty]]
[[pt:cpp/container/array/empty]]
[[ru:cpp/container/array/empty]]
[[zh:cpp/container/array/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/end</title>
    <ns>0</ns>
    <id>856</id>
    <revision>
      <id>50437</id>
      <parentid>44186</parentid>
      <timestamp>2013-06-01T03:28:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/end|array}}

[[de:cpp/container/array/end]]
[[es:cpp/container/array/end]]
[[fr:cpp/container/array/end]]
[[it:cpp/container/array/end]]
[[ja:cpp/container/array/end]]
[[pt:cpp/container/array/end]]
[[ru:cpp/container/array/end]]
[[zh:cpp/container/array/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/fill</title>
    <ns>0</ns>
    <id>857</id>
    <revision>
      <id>50438</id>
      <parentid>47745</parentid>
      <timestamp>2013-06-01T03:28:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="301">{{include page | cpp/container/fill | array}}
[[de:cpp/container/array/fill]]
[[es:cpp/container/array/fill]]
[[fr:cpp/container/array/fill]]
[[it:cpp/container/array/fill]]
[[ja:cpp/container/array/fill]]
[[pt:cpp/container/array/fill]]
[[ru:cpp/container/array/fill]]
[[zh:cpp/container/array/fill]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/front</title>
    <ns>0</ns>
    <id>858</id>
    <revision>
      <id>50439</id>
      <parentid>44175</parentid>
      <timestamp>2013-06-01T03:28:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/front|array}}

[[de:cpp/container/array/front]]
[[es:cpp/container/array/front]]
[[fr:cpp/container/array/front]]
[[it:cpp/container/array/front]]
[[ja:cpp/container/array/front]]
[[pt:cpp/container/array/front]]
[[ru:cpp/container/array/front]]
[[zh:cpp/container/array/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/get</title>
    <ns>0</ns>
    <id>5105</id>
    <revision>
      <id>91588</id>
      <parentid>86746</parentid>
      <timestamp>2017-03-31T19:50:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1929">{{cpp/title | get&lt;small&gt;(std::array)&lt;/small&gt;}}
{{cpp/container/array/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
template&lt; size_t I, class T, size_t N &gt;
constexpr T&amp; get( array&lt;T,N&gt;&amp; a );
}}
{{dcl | num=2 | since=c++11 |
template&lt; size_t I, class T, size_t N &gt;
constexpr T&amp;&amp; get( array&lt;T,N&gt;&amp;&amp; a );
}}
{{dcl | num=3 | since=c++11 |
template&lt; size_t I, class T, size_t N &gt;
constexpr const T&amp; get( const array&lt;T,N&gt;&amp; a );
}}
{{dcl | num=4 | since=c++17 |
template&lt; size_t I, class T, size_t N &gt;
constexpr const T&amp;&amp; get( const array&lt;T,N&gt;&amp;&amp; a );
}}
{{dcl end}}

Extracts the {{tt|Ith}} element element from the array. 

{{tt|I}} must be an integer value in range {{tt|[0, N)}}. This is enforced at compile time as opposed to {{lc|at()}} or {{lc|operator[]}}.

===Parameters===
{{par begin}}
{{par | a | array whose contents to extract}}
{{par end}}

===Return value===

A reference to the {{tt|Ith}} element of {{tt|a}}.

===Exceptions===

{{unreviewed noexcept}}

===Notes===
The overloads are marked as {{c|constexpr}} since C++14.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;array&gt;

int main()
{
    std::array&lt;int, 3&gt; arr;
    
    // set values:
    std::get&lt;0&gt;(arr) = 1;
    std::get&lt;1&gt;(arr) = 2;
    std::get&lt;2&gt;(arr) = 3;
    
    // get values:
    std::cout &lt;&lt; &quot;(&quot; &lt;&lt; std::get&lt;0&gt;(arr) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;1&gt;(arr)
              &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;2&gt;(arr) &lt;&lt; &quot;)\n&quot;;
}
 | output=
(1, 2, 3)
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_at|array}}
{{dsc inc | cpp/container/dsc at|array}}	
{{dsc inc | cpp/utility/tuple/dsc get}}
{{dsc inc | cpp/utility/pair/dsc get}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc end}}

[[de:cpp/container/array/get]]
[[es:cpp/container/array/get]]
[[fr:cpp/container/array/get]]
[[it:cpp/container/array/get]]
[[ja:cpp/container/array/get]]
[[pt:cpp/container/array/get]]
[[ru:cpp/container/array/get]]
[[zh:cpp/container/array/get]]</text>
      <sha1>o5kf6my6djc93gwtlbjsxix7qopmssr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/max size</title>
    <ns>0</ns>
    <id>859</id>
    <revision>
      <id>50440</id>
      <parentid>44164</parentid>
      <timestamp>2013-06-01T03:28:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/max_size|array}}

[[de:cpp/container/array/max size]]
[[es:cpp/container/array/max size]]
[[fr:cpp/container/array/max size]]
[[it:cpp/container/array/max size]]
[[ja:cpp/container/array/max size]]
[[pt:cpp/container/array/max size]]
[[ru:cpp/container/array/max size]]
[[zh:cpp/container/array/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/operator at</title>
    <ns>0</ns>
    <id>860</id>
    <revision>
      <id>50441</id>
      <parentid>44159</parentid>
      <timestamp>2013-06-01T03:28:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/operator_at|array}}

[[de:cpp/container/array/operator at]]
[[es:cpp/container/array/operator at]]
[[fr:cpp/container/array/operator at]]
[[it:cpp/container/array/operator at]]
[[ja:cpp/container/array/operator at]]
[[pt:cpp/container/array/operator at]]
[[ru:cpp/container/array/operator at]]
[[zh:cpp/container/array/operator at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/operator cmp</title>
    <ns>0</ns>
    <id>5588</id>
    <revision>
      <id>50442</id>
      <parentid>44153</parentid>
      <timestamp>2013-06-01T03:28:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="371">{{include page|cpp/container/operator_cmp |array}}

[[de:cpp/container/array/operator cmp]]
[[es:cpp/container/array/operator cmp]]
[[fr:cpp/container/array/operator cmp]]
[[it:cpp/container/array/operator cmp]]
[[ja:cpp/container/array/operator cmp]]
[[pt:cpp/container/array/operator cmp]]
[[ru:cpp/container/array/operator cmp]]
[[zh:cpp/container/array/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/rbegin</title>
    <ns>0</ns>
    <id>861</id>
    <revision>
      <id>50443</id>
      <parentid>44148</parentid>
      <timestamp>2013-06-01T03:28:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/rbegin|array}}

[[de:cpp/container/array/rbegin]]
[[es:cpp/container/array/rbegin]]
[[fr:cpp/container/array/rbegin]]
[[it:cpp/container/array/rbegin]]
[[ja:cpp/container/array/rbegin]]
[[pt:cpp/container/array/rbegin]]
[[ru:cpp/container/array/rbegin]]
[[zh:cpp/container/array/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/rend</title>
    <ns>0</ns>
    <id>862</id>
    <revision>
      <id>50444</id>
      <parentid>44143</parentid>
      <timestamp>2013-06-01T03:28:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/rend|array}}

[[de:cpp/container/array/rend]]
[[es:cpp/container/array/rend]]
[[fr:cpp/container/array/rend]]
[[it:cpp/container/array/rend]]
[[ja:cpp/container/array/rend]]
[[pt:cpp/container/array/rend]]
[[ru:cpp/container/array/rend]]
[[zh:cpp/container/array/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/size</title>
    <ns>0</ns>
    <id>863</id>
    <revision>
      <id>91458</id>
      <parentid>64976</parentid>
      <timestamp>2017-03-31T19:45:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1231">{{cpp/container/array/title | size}}
{{cpp/container/array/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
constexpr size_type size();
}}
{{dcl | since=c++14 |
constexpr size_type size() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the number of elements in the container, i.e. {{c|std::distance(begin(), end())}}.

===Parameters===
(none)

===Return value===
The number of elements in the container.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===Example===
{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::array}}:
 | code=
#include &lt;array&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::array&lt;int, 4&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc empty |array}}
{{dsc inc | cpp/container/dsc max_size |array}}
{{dsc end}}

[[de:cpp/container/array/size]]
[[es:cpp/container/array/size]]
[[fr:cpp/container/array/size]]
[[it:cpp/container/array/size]]
[[ja:cpp/container/array/size]]
[[pt:cpp/container/array/size]]
[[ru:cpp/container/array/size]]
[[zh:cpp/container/array/size]]</text>
      <sha1>n9qryacxb1v2ssjgndfyi4s1yi160mp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/std swap</title>
    <ns>0</ns>
    <id>3456</id>
    <redirect title="cpp/container/array/swap2" />
    <revision>
      <id>12998</id>
      <timestamp>2011-11-03T18:34:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/array/std swap]] to [[cpp/container/array/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/container/array/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/swap</title>
    <ns>0</ns>
    <id>864</id>
    <revision>
      <id>91323</id>
      <parentid>88456</parentid>
      <timestamp>2017-03-31T19:40:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1089">{{cpp/container/array/title | swap}}
{{cpp/container/array/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void swap( array&amp; other );
}}
{{dcl end}}

Exchanges the contents of the container with those of {{tt|other}}. Does not cause iterators and references to associate with the other container.

===Parameters===
{{par begin}}
{{par | other | container to exchange the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev|until=c++17|
{{unreviewed noexcept|noexcept(std::swap(declval&lt;T&amp;&gt;(), declval&lt;T&amp;&gt;()))}} 
}}
{{rev|since=c++17|
{{unreviewed noexcept|std::is_nothrow_swappable&lt;T&gt;::value}} 
}}
{{rev end}}

For zero-sized arrays, {{unreviewed noexcept}}

===Complexity===
Linear in size of the container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc swap2 |array}}
{{dsc end}}

[[de:cpp/container/array/swap]]
[[es:cpp/container/array/swap]]
[[fr:cpp/container/array/swap]]
[[it:cpp/container/array/swap]]
[[ja:cpp/container/array/swap]]
[[pt:cpp/container/array/swap]]
[[ru:cpp/container/array/swap]]
[[zh:cpp/container/array/swap]]</text>
      <sha1>8sfs8kh74vmedwzhtnfh1lglwfeih1w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/swap2</title>
    <ns>0</ns>
    <id>3013</id>
    <revision>
      <id>50447</id>
      <parentid>44125</parentid>
      <timestamp>2013-06-01T03:29:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/swap2|array}}

[[de:cpp/container/array/swap2]]
[[es:cpp/container/array/swap2]]
[[fr:cpp/container/array/swap2]]
[[it:cpp/container/array/swap2]]
[[ja:cpp/container/array/swap2]]
[[pt:cpp/container/array/swap2]]
[[ru:cpp/container/array/swap2]]
[[zh:cpp/container/array/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/tuple element</title>
    <ns>0</ns>
    <id>5589</id>
    <revision>
      <id>82801</id>
      <parentid>72074</parentid>
      <timestamp>2016-01-05T16:02:35Z</timestamp>
      <contributor>
        <ip>188.109.86.106</ip>
      </contributor>
      <text xml:space="preserve" bytes="1239">{{cpp/title|tuple_element{{small|&lt;std::array&gt;}}}}
{{cpp/container/array/navbar}}
{{dcl begin}}
{{dcl header | array}}
{{dcl | since=c++11 | 1=
template&lt; std::size_t I, class T, std::size_t N &gt;
struct tuple_element&lt;I, array&lt;T, N&gt; &gt;;
}}
{{dcl end}}

Provides compile-time indexed access to the type of the elements of the array using tuple-like interface

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | type | the type of elements of the array}}
{{dsc end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;std::size_t I, class T&gt;
  struct tuple_element;

template&lt;std::size_t I, class T, std::size_t N&gt;
  struct tuple_element&lt;I, std::array&lt;T,N&gt; &gt;
  {
     using type = T;
  };
}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc tuple_element}}
{{dsc inc | cpp/utility/pair/dsc tuple_element}}
{{dsc end}}

[[de:cpp/container/array/tuple element]]
[[es:cpp/container/array/tuple element]]
[[fr:cpp/container/array/tuple element]]
[[it:cpp/container/array/tuple element]]
[[ja:cpp/container/array/tuple element]]
[[pt:cpp/container/array/tuple element]]
[[ru:cpp/container/array/tuple element]]
[[zh:cpp/container/array/tuple element]]</text>
      <sha1>6dr2kqf11qujkxgq33hmg8aouekt890</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/array/tuple size</title>
    <ns>0</ns>
    <id>5127</id>
    <revision>
      <id>62691</id>
      <parentid>57262</parentid>
      <timestamp>2013-07-01T23:33:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1187">{{cpp/title | tuple_size&lt;small&gt;(std::array)&lt;/small&gt;}}
{{cpp/container/array/navbar}}
{{dcl begin}}
{{dcl header | array}}
{{dcl | num=1 | since=c++11 |1=
template&lt; class T, size_t N &gt;
class tuple_size&lt; array&lt;T, N&gt; &gt; :
    public integral_constant&lt;size_t, N&gt;
{ };
}}
{{dcl end}}

Provides access to the number of elements in an {{lc|std::array}} as a compile-time constant expression.

{{cpp/types/integral_constant/inherit2 |{{tt|N}}, the number of elements in the array|std::size_t}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;array&gt;

template&lt;class T&gt;
void test(T t)
{
    int a[std::tuple_size&lt;T&gt;::value]; // can be used at compile time
    std::cout &lt;&lt; std::tuple_size&lt;T&gt;::value &lt;&lt; '\n';
}

int main()
{
    std::array&lt;float, 3&gt; arr;
    test(arr);
}
 | output=
3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc tuple_size}}
{{dsc end}}

[[de:cpp/container/array/tuple size]]
[[es:cpp/container/array/tuple size]]
[[fr:cpp/container/array/tuple size]]
[[it:cpp/container/array/tuple size]]
[[ja:cpp/container/array/tuple size]]
[[pt:cpp/container/array/tuple size]]
[[ru:cpp/container/array/tuple size]]
[[zh:cpp/container/array/tuple size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque</title>
    <ns>0</ns>
    <id>865</id>
    <revision>
      <id>90744</id>
      <parentid>90472</parentid>
      <timestamp>2017-03-09T01:08:51Z</timestamp>
      <contributor>
        <ip>169.232.87.21</ip>
      </contributor>
      <comment>Update sizes of internal array used by std::deque</comment>
      <text xml:space="preserve" bytes="6899">{{cpp/title|deque}}
{{cpp/container/deque/navbar}}
{{dcl begin}}
{{dcl header|deque}}
{{dcl | num=1 |
template&lt;
    class T,
    class Allocator {{=}} std::allocator&lt;T&gt;
&gt; class deque;
}} 
{{dcl | num=2 |since=c++17|1=
namespace pmr {
    template &lt;class T&gt;
    using deque = std::deque&lt;T, std::pmr::polymorphic_allocator&lt;T&gt;&gt;;
}
}}
{{dcl end}}

{{tt|std::deque}} (double-ended queue) is an indexed sequence container that allows fast insertion and deletion at both its beginning and its end. In addition, insertion and deletion at either end of a deque never invalidates pointers or references to the rest of the elements.

As opposed to {{lc|std::vector}}, the elements of a deque are not stored contiguously: typical implementations use a sequence of individually allocated fixed-size arrays, with additional bookkeeping, which means indexed access to std:deque must perform two pointer dereferences, compared to vector's indexed access which performs only one.

The storage of a deque is automatically expanded and contracted as needed. Expansion of a deque is cheaper than the expansion of a {{lc|std::vector}} because it does not involve copying of the existing elements to a new memory location. On the other hand, deques typically have large minimal memory cost; a deque holding just one element has to allocate its full internal array (e.g. 8 times the object size on 64-bit libstdc++; 16 times the object size or 4096 bytes, whichever is larger, on 64-bit libc++).

The complexity (efficiency) of common operations on deques is as follows:

* Random access - constant {{math|O(1)}}
* Insertion or removal of elements at the end or beginning - constant {{math|O(1)}}
* Insertion or removal of elements - linear {{math|O(n)}}

{{tt|std::deque}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|SequenceContainer}} and {{concept|ReversibleContainer}}.

===Template parameters===
{{par begin}}
{{par inc | cpp/container/param list T | deque}}
{{par inc | cpp/container/param list Allocator | deque}}
{{par end}}

===Iterator invalidation===
{{todo}}
There are still a few inaccuracies in this section, refer to individual member function pages for more detail

{| class=&quot;dsctable&quot; style=&quot;font-size:0.8em&quot;
! Operations
! Invalidated
|-
| All read only operations
| Never
|-
| {{lc|swap}}, {{lc|std::swap}}
| The past-the-end iterator may be invalidated (implementation defined)
|-
| {{lc|shrink_to_fit}}, {{lc|clear}}, {{lc|insert}}, {{lc|emplace}}, {{lc|push_front}}, {{lc|push_back}}, {{lc|emplace_front}}, {{lc|emplace_back}}
| Always
|-
| {{lc|erase}}
| If erasing at begin - only erased elements&lt;br&gt;
If erasing at end - only erased elements and the past-the-end iterator&lt;br&gt;
Otherwise - all iterators are invalidated (including the past-the-end iterator).
|-
| {{lc|resize}}
| If the new size is smaller than the old one : only erased elements and the past-the-end iterator&lt;br&gt;
If the new size is bigger than the old one : all iterators are invalidated&lt;br&gt;
Otherwise - none iterators are invalidated.
|-
| {{lc|pop_front}}
| Only to the element erased
|-
| {{lc|pop_back}}
| Only to the element erased and the past-the-end iterator
|}

====Invalidation notes====
* When inserting at either end of the deque, references are not invalidated by {{lc|insert}} and {{lc|emplace}}.
* {{lc|push_front}}, {{lc|push_back}}, {{lc|emplace_front}} and {{lc|emplace_back}} do not invalidate any references to elements of the deque.
* When erasing at either end of the deque, references to non-erased elements are not invalidated by {{lc|erase}}, {{lc|pop_front}} and {{lc|pop_back}}.
* A call to {{lc|resize}} with a smaller size does not invalidate any references to non-erased elements.
* A call to {{lc|resize}} with a bigger size does not invalidate any references to elements of the deque.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc value_type | deque}}
{{dsc inc | cpp/container/dsc allocator_type | deque}}
{{dsc inc | cpp/container/dsc size_type | deque}}
{{dsc inc | cpp/container/dsc difference_type | deque}}
{{dsc inc | cpp/container/dsc reference | deque}}
{{dsc inc | cpp/container/dsc const_reference | deque}}
{{dsc inc | cpp/container/dsc pointer | deque}}
{{dsc inc | cpp/container/dsc const_pointer | deque}}
{{dsc inc | cpp/container/dsc iterator | deque}}
{{dsc inc | cpp/container/dsc const_iterator | deque}}
{{dsc inc | cpp/container/dsc reverse_iterator | deque}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | deque}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | deque}}
{{dsc inc | cpp/container/dsc destructor | deque}}
{{dsc inc | cpp/container/dsc operator{{=}} | deque}}
{{dsc inc | cpp/container/dsc assign | deque}}
{{dsc inc | cpp/container/dsc get_allocator | deque}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc at | deque}}
{{dsc inc | cpp/container/dsc operator_at | deque}}
{{dsc inc | cpp/container/dsc front | deque}}
{{dsc inc | cpp/container/dsc back | deque}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | deque}}
{{dsc inc | cpp/container/dsc end | deque}}
{{dsc inc | cpp/container/dsc rbegin | deque}}
{{dsc inc | cpp/container/dsc rend | deque}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | deque}}
{{dsc inc | cpp/container/dsc size | deque}}
{{dsc inc | cpp/container/dsc max_size | deque}}
{{dsc inc | cpp/container/dsc shrink_to_fit | deque}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | deque}}
{{dsc inc | cpp/container/dsc insert | deque}}
{{dsc inc | cpp/container/dsc emplace | deque}}
{{dsc inc | cpp/container/dsc erase | deque}}
{{dsc inc | cpp/container/dsc push_back | deque}}
{{dsc inc | cpp/container/dsc emplace_back | deque}}
{{dsc inc | cpp/container/dsc pop_back | deque}}
{{dsc inc | cpp/container/dsc push_front | deque}}
{{dsc inc | cpp/container/dsc emplace_front | deque}}
{{dsc inc | cpp/container/dsc pop_front | deque}}
{{dsc inc | cpp/container/dsc resize | deque}}
{{dsc inc | cpp/container/dsc swap | deque}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | deque}}
{{dsc inc | cpp/container/dsc swap2 | deque}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;deque&gt;

int main()
{
    // Create a deque containing integers
    std::deque&lt;int&gt; d = {7, 5, 16, 8};

    // Add an integer to the beginning and end of the deque
    d.push_front(13);
    d.push_back(25);

    // Iterate and print values of deque
    for(int n : d) {
        std::cout &lt;&lt; n &lt;&lt; '\n';
    }
}
 | output=
13
7
5
16
8
25
}}

[[de:cpp/container/deque]]
[[es:cpp/container/deque]]
[[fr:cpp/container/deque]]
[[it:cpp/container/deque]]
[[ja:cpp/container/deque]]
[[pt:cpp/container/deque]]
[[ru:cpp/container/deque]]
[[zh:cpp/container/deque]]</text>
      <sha1>7fqcepqfm9539wyae0pxr1xusj3pbnr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/assign</title>
    <ns>0</ns>
    <id>866</id>
    <revision>
      <id>50448</id>
      <parentid>44099</parentid>
      <timestamp>2013-06-01T03:29:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/assign|deque}}

[[de:cpp/container/deque/assign]]
[[es:cpp/container/deque/assign]]
[[fr:cpp/container/deque/assign]]
[[it:cpp/container/deque/assign]]
[[ja:cpp/container/deque/assign]]
[[pt:cpp/container/deque/assign]]
[[ru:cpp/container/deque/assign]]
[[zh:cpp/container/deque/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/at</title>
    <ns>0</ns>
    <id>867</id>
    <revision>
      <id>50449</id>
      <parentid>44094</parentid>
      <timestamp>2013-06-01T03:29:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/at|deque}}

[[de:cpp/container/deque/at]]
[[es:cpp/container/deque/at]]
[[fr:cpp/container/deque/at]]
[[it:cpp/container/deque/at]]
[[ja:cpp/container/deque/at]]
[[pt:cpp/container/deque/at]]
[[ru:cpp/container/deque/at]]
[[zh:cpp/container/deque/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/back</title>
    <ns>0</ns>
    <id>868</id>
    <revision>
      <id>50450</id>
      <parentid>44089</parentid>
      <timestamp>2013-06-01T03:29:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/back|deque}}

[[de:cpp/container/deque/back]]
[[es:cpp/container/deque/back]]
[[fr:cpp/container/deque/back]]
[[it:cpp/container/deque/back]]
[[ja:cpp/container/deque/back]]
[[pt:cpp/container/deque/back]]
[[ru:cpp/container/deque/back]]
[[zh:cpp/container/deque/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/begin</title>
    <ns>0</ns>
    <id>869</id>
    <revision>
      <id>50451</id>
      <parentid>44083</parentid>
      <timestamp>2013-06-01T03:29:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/begin|deque}}

[[de:cpp/container/deque/begin]]
[[es:cpp/container/deque/begin]]
[[fr:cpp/container/deque/begin]]
[[it:cpp/container/deque/begin]]
[[ja:cpp/container/deque/begin]]
[[pt:cpp/container/deque/begin]]
[[ru:cpp/container/deque/begin]]
[[zh:cpp/container/deque/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/clear</title>
    <ns>0</ns>
    <id>870</id>
    <revision>
      <id>50452</id>
      <parentid>44078</parentid>
      <timestamp>2013-06-01T03:29:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/clear|deque}}

[[de:cpp/container/deque/clear]]
[[es:cpp/container/deque/clear]]
[[fr:cpp/container/deque/clear]]
[[it:cpp/container/deque/clear]]
[[ja:cpp/container/deque/clear]]
[[pt:cpp/container/deque/clear]]
[[ru:cpp/container/deque/clear]]
[[zh:cpp/container/deque/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/deque</title>
    <ns>0</ns>
    <id>871</id>
    <revision>
      <id>50453</id>
      <parentid>44076</parentid>
      <timestamp>2013-06-01T03:29:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="313">{{include page|cpp/container/constructor|deque}}

[[de:cpp/container/deque/deque]]
[[es:cpp/container/deque/deque]]
[[fr:cpp/container/deque/deque]]
[[it:cpp/container/deque/deque]]
[[ja:cpp/container/deque/deque]]
[[pt:cpp/container/deque/deque]]
[[ru:cpp/container/deque/deque]]
[[zh:cpp/container/deque/deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/emplace</title>
    <ns>0</ns>
    <id>872</id>
    <revision>
      <id>50454</id>
      <parentid>44070</parentid>
      <timestamp>2013-06-01T03:29:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/emplace|deque}}

[[de:cpp/container/deque/emplace]]
[[es:cpp/container/deque/emplace]]
[[fr:cpp/container/deque/emplace]]
[[it:cpp/container/deque/emplace]]
[[ja:cpp/container/deque/emplace]]
[[pt:cpp/container/deque/emplace]]
[[ru:cpp/container/deque/emplace]]
[[zh:cpp/container/deque/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/emplace back</title>
    <ns>0</ns>
    <id>873</id>
    <revision>
      <id>50455</id>
      <parentid>44066</parentid>
      <timestamp>2013-06-01T03:29:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/emplace_back|deque}}

[[de:cpp/container/deque/emplace back]]
[[es:cpp/container/deque/emplace back]]
[[fr:cpp/container/deque/emplace back]]
[[it:cpp/container/deque/emplace back]]
[[ja:cpp/container/deque/emplace back]]
[[pt:cpp/container/deque/emplace back]]
[[ru:cpp/container/deque/emplace back]]
[[zh:cpp/container/deque/emplace back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/emplace front</title>
    <ns>0</ns>
    <id>874</id>
    <revision>
      <id>50456</id>
      <parentid>44061</parentid>
      <timestamp>2013-06-01T03:29:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/emplace_front|deque}}

[[de:cpp/container/deque/emplace front]]
[[es:cpp/container/deque/emplace front]]
[[fr:cpp/container/deque/emplace front]]
[[it:cpp/container/deque/emplace front]]
[[ja:cpp/container/deque/emplace front]]
[[pt:cpp/container/deque/emplace front]]
[[ru:cpp/container/deque/emplace front]]
[[zh:cpp/container/deque/emplace front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/empty</title>
    <ns>0</ns>
    <id>875</id>
    <revision>
      <id>50457</id>
      <parentid>44057</parentid>
      <timestamp>2013-06-01T03:29:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/empty|deque}}

[[de:cpp/container/deque/empty]]
[[es:cpp/container/deque/empty]]
[[fr:cpp/container/deque/empty]]
[[it:cpp/container/deque/empty]]
[[ja:cpp/container/deque/empty]]
[[pt:cpp/container/deque/empty]]
[[ru:cpp/container/deque/empty]]
[[zh:cpp/container/deque/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/end</title>
    <ns>0</ns>
    <id>876</id>
    <revision>
      <id>50458</id>
      <parentid>44056</parentid>
      <timestamp>2013-06-01T03:29:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/end|deque}}

[[de:cpp/container/deque/end]]
[[es:cpp/container/deque/end]]
[[fr:cpp/container/deque/end]]
[[it:cpp/container/deque/end]]
[[ja:cpp/container/deque/end]]
[[pt:cpp/container/deque/end]]
[[ru:cpp/container/deque/end]]
[[zh:cpp/container/deque/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/erase</title>
    <ns>0</ns>
    <id>877</id>
    <revision>
      <id>50459</id>
      <parentid>44051</parentid>
      <timestamp>2013-06-01T03:29:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/erase|deque}}

[[de:cpp/container/deque/erase]]
[[es:cpp/container/deque/erase]]
[[fr:cpp/container/deque/erase]]
[[it:cpp/container/deque/erase]]
[[ja:cpp/container/deque/erase]]
[[pt:cpp/container/deque/erase]]
[[ru:cpp/container/deque/erase]]
[[zh:cpp/container/deque/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/front</title>
    <ns>0</ns>
    <id>878</id>
    <revision>
      <id>50460</id>
      <parentid>44044</parentid>
      <timestamp>2013-06-01T03:29:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/front|deque}}

[[de:cpp/container/deque/front]]
[[es:cpp/container/deque/front]]
[[fr:cpp/container/deque/front]]
[[it:cpp/container/deque/front]]
[[ja:cpp/container/deque/front]]
[[pt:cpp/container/deque/front]]
[[ru:cpp/container/deque/front]]
[[zh:cpp/container/deque/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/get allocator</title>
    <ns>0</ns>
    <id>879</id>
    <revision>
      <id>50461</id>
      <parentid>44038</parentid>
      <timestamp>2013-06-01T03:29:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/get_allocator|deque}}

[[de:cpp/container/deque/get allocator]]
[[es:cpp/container/deque/get allocator]]
[[fr:cpp/container/deque/get allocator]]
[[it:cpp/container/deque/get allocator]]
[[ja:cpp/container/deque/get allocator]]
[[pt:cpp/container/deque/get allocator]]
[[ru:cpp/container/deque/get allocator]]
[[zh:cpp/container/deque/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/insert</title>
    <ns>0</ns>
    <id>880</id>
    <revision>
      <id>50462</id>
      <parentid>44033</parentid>
      <timestamp>2013-06-01T03:29:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/insert|deque}}

[[de:cpp/container/deque/insert]]
[[es:cpp/container/deque/insert]]
[[fr:cpp/container/deque/insert]]
[[it:cpp/container/deque/insert]]
[[ja:cpp/container/deque/insert]]
[[pt:cpp/container/deque/insert]]
[[ru:cpp/container/deque/insert]]
[[zh:cpp/container/deque/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/max size</title>
    <ns>0</ns>
    <id>881</id>
    <revision>
      <id>50463</id>
      <parentid>44029</parentid>
      <timestamp>2013-06-01T03:29:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/max_size|deque}}

[[de:cpp/container/deque/max size]]
[[es:cpp/container/deque/max size]]
[[fr:cpp/container/deque/max size]]
[[it:cpp/container/deque/max size]]
[[ja:cpp/container/deque/max size]]
[[pt:cpp/container/deque/max size]]
[[ru:cpp/container/deque/max size]]
[[zh:cpp/container/deque/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/operator at</title>
    <ns>0</ns>
    <id>883</id>
    <revision>
      <id>50464</id>
      <parentid>44021</parentid>
      <timestamp>2013-06-01T03:29:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/operator_at|deque}}

[[de:cpp/container/deque/operator at]]
[[es:cpp/container/deque/operator at]]
[[fr:cpp/container/deque/operator at]]
[[it:cpp/container/deque/operator at]]
[[ja:cpp/container/deque/operator at]]
[[pt:cpp/container/deque/operator at]]
[[ru:cpp/container/deque/operator at]]
[[zh:cpp/container/deque/operator at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/operator cmp</title>
    <ns>0</ns>
    <id>1996</id>
    <revision>
      <id>50465</id>
      <parentid>44016</parentid>
      <timestamp>2013-06-01T03:29:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/operator_cmp|deque}}

[[de:cpp/container/deque/operator cmp]]
[[es:cpp/container/deque/operator cmp]]
[[fr:cpp/container/deque/operator cmp]]
[[it:cpp/container/deque/operator cmp]]
[[ja:cpp/container/deque/operator cmp]]
[[pt:cpp/container/deque/operator cmp]]
[[ru:cpp/container/deque/operator cmp]]
[[zh:cpp/container/deque/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/operator comp</title>
    <ns>0</ns>
    <id>4211</id>
    <redirect title="cpp/container/deque/operator cmp" />
    <revision>
      <id>15239</id>
      <timestamp>2011-12-08T01:11:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/deque/operator comp]] to [[cpp/container/deque/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/container/deque/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/operator=</title>
    <ns>0</ns>
    <id>882</id>
    <revision>
      <id>92051</id>
      <parentid>44025</parentid>
      <timestamp>2017-04-03T20:54:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="347">{{include page|cpp/container/operator{{=}}|deque}}

[[de:cpp/container/deque/operator=]]
[[es:cpp/container/deque/operator=]]
[[fr:cpp/container/deque/operator=]]
[[it:cpp/container/deque/operator=]]
[[ja:cpp/container/deque/operator=]]
[[pt:cpp/container/deque/operator=]]
[[ru:cpp/container/deque/operator=]]
[[zh:cpp/container/deque/operator=]]</text>
      <sha1>k38xpwbpazh0gsbfb9r1wwvv0ou01y7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/pop back</title>
    <ns>0</ns>
    <id>884</id>
    <revision>
      <id>50466</id>
      <parentid>44010</parentid>
      <timestamp>2013-06-01T03:29:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/pop_back|deque}}

[[de:cpp/container/deque/pop back]]
[[es:cpp/container/deque/pop back]]
[[fr:cpp/container/deque/pop back]]
[[it:cpp/container/deque/pop back]]
[[ja:cpp/container/deque/pop back]]
[[pt:cpp/container/deque/pop back]]
[[ru:cpp/container/deque/pop back]]
[[zh:cpp/container/deque/pop back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/pop front</title>
    <ns>0</ns>
    <id>885</id>
    <revision>
      <id>50467</id>
      <parentid>44004</parentid>
      <timestamp>2013-06-01T03:29:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/pop_front|deque}}

[[de:cpp/container/deque/pop front]]
[[es:cpp/container/deque/pop front]]
[[fr:cpp/container/deque/pop front]]
[[it:cpp/container/deque/pop front]]
[[ja:cpp/container/deque/pop front]]
[[pt:cpp/container/deque/pop front]]
[[ru:cpp/container/deque/pop front]]
[[zh:cpp/container/deque/pop front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/push back</title>
    <ns>0</ns>
    <id>886</id>
    <revision>
      <id>50468</id>
      <parentid>43998</parentid>
      <timestamp>2013-06-01T03:29:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/push_back|deque}}

[[de:cpp/container/deque/push back]]
[[es:cpp/container/deque/push back]]
[[fr:cpp/container/deque/push back]]
[[it:cpp/container/deque/push back]]
[[ja:cpp/container/deque/push back]]
[[pt:cpp/container/deque/push back]]
[[ru:cpp/container/deque/push back]]
[[zh:cpp/container/deque/push back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/push front</title>
    <ns>0</ns>
    <id>887</id>
    <revision>
      <id>50469</id>
      <parentid>43991</parentid>
      <timestamp>2013-06-01T03:29:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="352">{{include page|cpp/container/push_front|deque}}

[[de:cpp/container/deque/push front]]
[[es:cpp/container/deque/push front]]
[[fr:cpp/container/deque/push front]]
[[it:cpp/container/deque/push front]]
[[ja:cpp/container/deque/push front]]
[[pt:cpp/container/deque/push front]]
[[ru:cpp/container/deque/push front]]
[[zh:cpp/container/deque/push front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/rbegin</title>
    <ns>0</ns>
    <id>888</id>
    <revision>
      <id>50470</id>
      <parentid>43984</parentid>
      <timestamp>2013-06-01T03:29:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/rbegin|deque}}

[[de:cpp/container/deque/rbegin]]
[[es:cpp/container/deque/rbegin]]
[[fr:cpp/container/deque/rbegin]]
[[it:cpp/container/deque/rbegin]]
[[ja:cpp/container/deque/rbegin]]
[[pt:cpp/container/deque/rbegin]]
[[ru:cpp/container/deque/rbegin]]
[[zh:cpp/container/deque/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/rend</title>
    <ns>0</ns>
    <id>889</id>
    <revision>
      <id>50471</id>
      <parentid>43978</parentid>
      <timestamp>2013-06-01T03:29:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/rend|deque}}

[[de:cpp/container/deque/rend]]
[[es:cpp/container/deque/rend]]
[[fr:cpp/container/deque/rend]]
[[it:cpp/container/deque/rend]]
[[ja:cpp/container/deque/rend]]
[[pt:cpp/container/deque/rend]]
[[ru:cpp/container/deque/rend]]
[[zh:cpp/container/deque/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/resize</title>
    <ns>0</ns>
    <id>890</id>
    <revision>
      <id>50472</id>
      <parentid>43970</parentid>
      <timestamp>2013-06-01T03:29:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/resize|deque}}

[[de:cpp/container/deque/resize]]
[[es:cpp/container/deque/resize]]
[[fr:cpp/container/deque/resize]]
[[it:cpp/container/deque/resize]]
[[ja:cpp/container/deque/resize]]
[[pt:cpp/container/deque/resize]]
[[ru:cpp/container/deque/resize]]
[[zh:cpp/container/deque/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/shrink to fit</title>
    <ns>0</ns>
    <id>891</id>
    <revision>
      <id>50473</id>
      <parentid>43966</parentid>
      <timestamp>2013-06-01T03:29:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/shrink_to_fit|deque}}

[[de:cpp/container/deque/shrink to fit]]
[[es:cpp/container/deque/shrink to fit]]
[[fr:cpp/container/deque/shrink to fit]]
[[it:cpp/container/deque/shrink to fit]]
[[ja:cpp/container/deque/shrink to fit]]
[[pt:cpp/container/deque/shrink to fit]]
[[ru:cpp/container/deque/shrink to fit]]
[[zh:cpp/container/deque/shrink to fit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/size</title>
    <ns>0</ns>
    <id>892</id>
    <revision>
      <id>50474</id>
      <parentid>43960</parentid>
      <timestamp>2013-06-01T03:29:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/size|deque}}

[[de:cpp/container/deque/size]]
[[es:cpp/container/deque/size]]
[[fr:cpp/container/deque/size]]
[[it:cpp/container/deque/size]]
[[ja:cpp/container/deque/size]]
[[pt:cpp/container/deque/size]]
[[ru:cpp/container/deque/size]]
[[zh:cpp/container/deque/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/std swap</title>
    <ns>0</ns>
    <id>3458</id>
    <redirect title="cpp/container/deque/swap2" />
    <revision>
      <id>13005</id>
      <timestamp>2011-11-03T18:38:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/deque/std swap]] to [[cpp/container/deque/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/container/deque/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/swap</title>
    <ns>0</ns>
    <id>893</id>
    <revision>
      <id>50475</id>
      <parentid>43954</parentid>
      <timestamp>2013-06-01T03:29:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/swap|deque}}

[[de:cpp/container/deque/swap]]
[[es:cpp/container/deque/swap]]
[[fr:cpp/container/deque/swap]]
[[it:cpp/container/deque/swap]]
[[ja:cpp/container/deque/swap]]
[[pt:cpp/container/deque/swap]]
[[ru:cpp/container/deque/swap]]
[[zh:cpp/container/deque/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/swap2</title>
    <ns>0</ns>
    <id>1992</id>
    <revision>
      <id>50476</id>
      <parentid>43948</parentid>
      <timestamp>2013-06-01T03:29:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/swap2|deque}}

[[de:cpp/container/deque/swap2]]
[[es:cpp/container/deque/swap2]]
[[fr:cpp/container/deque/swap2]]
[[it:cpp/container/deque/swap2]]
[[ja:cpp/container/deque/swap2]]
[[pt:cpp/container/deque/swap2]]
[[ru:cpp/container/deque/swap2]]
[[zh:cpp/container/deque/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/deque/~deque</title>
    <ns>0</ns>
    <id>894</id>
    <revision>
      <id>50477</id>
      <parentid>43942</parentid>
      <timestamp>2013-06-01T03:30:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="320">{{include page|cpp/container/destructor|deque}}

[[de:cpp/container/deque/~deque]]
[[es:cpp/container/deque/~deque]]
[[fr:cpp/container/deque/~deque]]
[[it:cpp/container/deque/~deque]]
[[ja:cpp/container/deque/~deque]]
[[pt:cpp/container/deque/~deque]]
[[ru:cpp/container/deque/~deque]]
[[zh:cpp/container/deque/~deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list</title>
    <ns>0</ns>
    <id>895</id>
    <revision>
      <id>89139</id>
      <parentid>84158</parentid>
      <timestamp>2017-01-03T18:31:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="4313">{{cpp/title|forward_list}}
{{cpp/container/forward_list/navbar}}
{{dcl begin}}
{{dcl header|forward_list}}
{{dcl | since=c++11 |num=1|
template&lt;
    class T,
    class Allocator {{=}} std::allocator&lt;T&gt;
&gt; class forward_list;
}} 
{{dcl |since=c++17|num=2|1=
namespace pmr {
    template &lt;class T&gt;
    using forward_list = std::forward_list&lt;T, std::pmr::polymorphic_allocator&lt;T&gt;&gt;;
}
}}
{{dcl end}}

{{tt|std::forward_list}} is a container that supports fast insertion and removal of elements from anywhere in the container. Fast random access is not supported. It is implemented as a singly-linked list and essentially does not have any overhead compared to its implementation in C. Compared to {{lc|std::list}} this container provides more space efficient storage when bidirectional iteration is not needed. 

Adding, removing and moving the elements within the list, or across several lists, does not invalidate the iterators currently referring to other elements in the list. However, an iterator or reference referring to an element is invalidated when the corresponding element is removed (via {{lc|erase_after}}) from the list.

{{tt|std::forward_list}} meets the requirements of {{concept|Container}} (except for the {{lc|size}} member function and that {{tt|operator{{==}}}}'s complexity is always linear), {{concept|AllocatorAwareContainer}} and {{concept|SequenceContainer}}.

===Template parameters===
{{par begin}}
{{par inc | cpp/container/param list T | forward_list}}
{{par inc | cpp/container/param list Allocator | forward_list}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc value_type | forward_list}}
{{dsc inc | cpp/container/dsc allocator_type | forward_list}}
{{dsc inc | cpp/container/dsc size_type | forward_list}}
{{dsc inc | cpp/container/dsc difference_type | forward_list}}
{{dsc inc | cpp/container/dsc reference | forward_list}}
{{dsc inc | cpp/container/dsc const_reference | forward_list}}
{{dsc inc | cpp/container/dsc pointer | forward_list}}
{{dsc inc | cpp/container/dsc const_pointer | forward_list}}
{{dsc inc | cpp/container/dsc iterator | forward_list}}
{{dsc inc | cpp/container/dsc const_iterator | forward_list}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | forward_list}}
{{dsc inc | cpp/container/dsc destructor | forward_list}}
{{dsc inc | cpp/container/dsc operator{{=}} | forward_list}}
{{dsc inc | cpp/container/dsc assign | forward_list}}
{{dsc inc | cpp/container/dsc get_allocator | forward_list}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc front | forward_list}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc before_begin | forward_list}}
{{dsc inc | cpp/container/dsc begin | forward_list}}
{{dsc inc | cpp/container/dsc end | forward_list}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | forward_list}}
{{dsc inc | cpp/container/dsc max_size | forward_list}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | forward_list}}
{{dsc inc | cpp/container/dsc insert_after | forward_list}}
{{dsc inc | cpp/container/dsc emplace_after | forward_list}}
{{dsc inc | cpp/container/dsc erase_after | forward_list}}
{{dsc inc | cpp/container/dsc push_front | forward_list}}
{{dsc inc | cpp/container/dsc emplace_front | forward_list}}
{{dsc inc | cpp/container/dsc pop_front | forward_list}}
{{dsc inc | cpp/container/dsc resize | forward_list}}
{{dsc inc | cpp/container/dsc swap | forward_list}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/container/dsc merge | forward_list}}
{{dsc inc | cpp/container/dsc splice_after | forward_list}}
{{dsc inc | cpp/container/dsc remove | forward_list}}
{{dsc inc | cpp/container/dsc reverse | forward_list}}
{{dsc inc | cpp/container/dsc unique | forward_list}}
{{dsc inc | cpp/container/dsc sort | forward_list}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | forward_list}}
{{dsc inc | cpp/container/dsc swap2 | forward_list}}
{{dsc end}}

[[de:cpp/container/forward list]]
[[es:cpp/container/forward list]]
[[fr:cpp/container/forward list]]
[[it:cpp/container/forward list]]
[[ja:cpp/container/forward list]]
[[pt:cpp/container/forward list]]
[[ru:cpp/container/forward list]]
[[zh:cpp/container/forward list]]</text>
      <sha1>6op4i3fnp3nub7tl24xjp5tbztgm39t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/assign</title>
    <ns>0</ns>
    <id>896</id>
    <revision>
      <id>50493</id>
      <parentid>43929</parentid>
      <timestamp>2013-06-01T03:30:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/assign|forward_list}}

[[de:cpp/container/forward list/assign]]
[[es:cpp/container/forward list/assign]]
[[fr:cpp/container/forward list/assign]]
[[it:cpp/container/forward list/assign]]
[[ja:cpp/container/forward list/assign]]
[[pt:cpp/container/forward list/assign]]
[[ru:cpp/container/forward list/assign]]
[[zh:cpp/container/forward list/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/before begin</title>
    <ns>0</ns>
    <id>897</id>
    <revision>
      <id>91371</id>
      <parentid>64174</parentid>
      <timestamp>2017-03-31T19:41:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1440">{{cpp/container/forward_list/title | before_begin, cbefore_begin}}
{{cpp/container/forward_list/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
iterator before_begin();
}}
{{dcl | since=c++11 |
const_iterator before_begin() const;
}}
{{dcl | since=c++11 |
const_iterator cbefore_begin() const;
}}
{{dcl end}}

Returns an iterator to the element before the first element of the container. This element acts as a placeholder, attempting to access it results in undefined behavior. The only usage cases are in functions {{lc|insert_after()}}, {{lc|emplace_after()}}, {{lc|erase_after()}}, {{lc|splice_after()}} and the increment operator: incrementing the before-begin iterator gives exactly the same iterator as obtained from {{lc|begin()}}/{{lc|cbegin()}}.

===Parameters===
(none)

===Return value===
Iterator to the element before the first element.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc begin | forward_list}}
{{dsc inc | cpp/container/dsc end | forward_list}}
{{dsc end}}

[[de:cpp/container/forward list/before begin]]
[[es:cpp/container/forward list/before begin]]
[[fr:cpp/container/forward list/before begin]]
[[it:cpp/container/forward list/before begin]]
[[ja:cpp/container/forward list/before begin]]
[[pt:cpp/container/forward list/before begin]]
[[ru:cpp/container/forward list/before begin]]
[[zh:cpp/container/forward list/before begin]]</text>
      <sha1>19r9x2r8b4hxq0x0xv3i41ll9g4voem</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/begin</title>
    <ns>0</ns>
    <id>898</id>
    <revision>
      <id>50494</id>
      <parentid>43918</parentid>
      <timestamp>2013-06-01T03:30:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/begin|forward_list}}

[[de:cpp/container/forward list/begin]]
[[es:cpp/container/forward list/begin]]
[[fr:cpp/container/forward list/begin]]
[[it:cpp/container/forward list/begin]]
[[ja:cpp/container/forward list/begin]]
[[pt:cpp/container/forward list/begin]]
[[ru:cpp/container/forward list/begin]]
[[zh:cpp/container/forward list/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/clear</title>
    <ns>0</ns>
    <id>899</id>
    <revision>
      <id>50495</id>
      <parentid>43912</parentid>
      <timestamp>2013-06-01T03:30:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/clear|forward_list}}

[[de:cpp/container/forward list/clear]]
[[es:cpp/container/forward list/clear]]
[[fr:cpp/container/forward list/clear]]
[[it:cpp/container/forward list/clear]]
[[ja:cpp/container/forward list/clear]]
[[pt:cpp/container/forward list/clear]]
[[ru:cpp/container/forward list/clear]]
[[zh:cpp/container/forward list/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/emplace after</title>
    <ns>0</ns>
    <id>901</id>
    <revision>
      <id>75426</id>
      <parentid>63287</parentid>
      <timestamp>2015-01-17T13:02:33Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+ Complexity &amp; Exceptions</comment>
      <text xml:space="preserve" bytes="1477">{{cpp/container/forward_list/title | emplace_after}}
{{cpp/container/forward_list/navbar}}
{{ddcl | since=c++11 |
template&lt; class... Args &gt; 
iterator emplace_after( const_iterator pos, Args&amp;&amp;... args );
}}

Inserts a new element into a position after the specified position in the container. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments, as supplied to the function.

{{cpp/container/note_iterator_invalidation|forward_list|emplace_after}}
===Parameters===
{{par begin}}
{{par | pos | iterator after which the new element will be constructed}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
iterator to the new element. 

===Complexity===
Constant.

===Exceptions===
If an exception is thrown (e.g. by the constructor), the container is left unmodified, as if this function was never called (strong exception guarantee).

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc insert_after | forward_list}}
{{dsc end}}

[[de:cpp/container/forward list/emplace after]]
[[es:cpp/container/forward list/emplace after]]
[[fr:cpp/container/forward list/emplace after]]
[[it:cpp/container/forward list/emplace after]]
[[ja:cpp/container/forward list/emplace after]]
[[pt:cpp/container/forward list/emplace after]]
[[ru:cpp/container/forward list/emplace after]]
[[zh:cpp/container/forward list/emplace after]]</text>
      <sha1>es2p2yvhf3k1jvlw38ftk3ij6jv8x99</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/emplace front</title>
    <ns>0</ns>
    <id>902</id>
    <revision>
      <id>50496</id>
      <parentid>43899</parentid>
      <timestamp>2013-06-01T03:30:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="442">{{include page|cpp/container/emplace_front|forward_list}}

[[de:cpp/container/forward list/emplace front]]
[[es:cpp/container/forward list/emplace front]]
[[fr:cpp/container/forward list/emplace front]]
[[it:cpp/container/forward list/emplace front]]
[[ja:cpp/container/forward list/emplace front]]
[[pt:cpp/container/forward list/emplace front]]
[[ru:cpp/container/forward list/emplace front]]
[[zh:cpp/container/forward list/emplace front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/empty</title>
    <ns>0</ns>
    <id>903</id>
    <revision>
      <id>50497</id>
      <parentid>43894</parentid>
      <timestamp>2013-06-01T03:30:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/empty|forward_list}}

[[de:cpp/container/forward list/empty]]
[[es:cpp/container/forward list/empty]]
[[fr:cpp/container/forward list/empty]]
[[it:cpp/container/forward list/empty]]
[[ja:cpp/container/forward list/empty]]
[[pt:cpp/container/forward list/empty]]
[[ru:cpp/container/forward list/empty]]
[[zh:cpp/container/forward list/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/end</title>
    <ns>0</ns>
    <id>904</id>
    <revision>
      <id>50498</id>
      <parentid>43888</parentid>
      <timestamp>2013-06-01T03:30:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="352">{{include page|cpp/container/end|forward_list}}

[[de:cpp/container/forward list/end]]
[[es:cpp/container/forward list/end]]
[[fr:cpp/container/forward list/end]]
[[it:cpp/container/forward list/end]]
[[ja:cpp/container/forward list/end]]
[[pt:cpp/container/forward list/end]]
[[ru:cpp/container/forward list/end]]
[[zh:cpp/container/forward list/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/erase after</title>
    <ns>0</ns>
    <id>905</id>
    <revision>
      <id>81941</id>
      <parentid>64173</parentid>
      <timestamp>2015-11-20T17:20:53Z</timestamp>
      <contributor>
        <username>Janoma</username>
        <id>4685</id>
      </contributor>
      <minor/>
      <comment>Makes the name of the iterator for the first overload consistent with the rest of the documentation.</comment>
      <text xml:space="preserve" bytes="1909">{{cpp/container/forward_list/title | erase_after}}
{{cpp/container/forward_list/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
iterator erase_after( const_iterator pos );
}}
{{dcl | num=2 | since=c++11 |
iterator erase_after( const_iterator first, const_iterator last );
}}
{{dcl end}}

Removes specified elements from the container. 

@1@ Removes the element following {{tt|pos}}.

@2@ Removes the elements in the range {{tt|(first; last)}}.

===Parameters===
{{par begin}}
{{par | pos | iterator to the element preceding the element to remove}}
{{par | first, last | range of elements to remove}}
{{par end}} 

===Return value===

@1@ Iterator to the element following the erased one, or {{lc|end()}} if no such element exists.

@2@ {{tt|last}}

===Complexity===

@1@ Constant.

@2@ Linear in distance between {{tt|first}} and {{tt|last}}.

===Example===
{{example
 | code=
#include &lt;forward_list&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
int main()
{
    std::forward_list&lt;int&gt; l = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    //    l.erase( l.begin() ); // ERROR: No function erase
    
    l.erase_after( l.before_begin() ); // Removes first element
    
    for( auto n : l ) std::cout &lt;&lt; n &lt;&lt; &quot; &quot;;
    std::cout &lt;&lt; '\n';

    auto fi= std::next( l.begin() );
    auto la= std::next( fi, 3 );
    
    l.erase_after( fi, la );
    
    for( auto n : l ) std::cout &lt;&lt; n &lt;&lt; &quot; &quot;;
    std::cout &lt;&lt; '\n';
}
 | output=
2 3 4 5 6 7 8 9
2 3 6 7 8 9
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc clear |forward_list}}
{{dsc end}}

[[de:cpp/container/forward list/erase after]]
[[es:cpp/container/forward list/erase after]]
[[fr:cpp/container/forward list/erase after]]
[[it:cpp/container/forward list/erase after]]
[[ja:cpp/container/forward list/erase after]]
[[pt:cpp/container/forward list/erase after]]
[[ru:cpp/container/forward list/erase after]]
[[zh:cpp/container/forward list/erase after]]</text>
      <sha1>rg5a0x3ei2h9reioj8ncub3tj9crfbb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/forward list</title>
    <ns>0</ns>
    <id>906</id>
    <revision>
      <id>50499</id>
      <parentid>43877</parentid>
      <timestamp>2013-06-01T03:30:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="432">{{include page|cpp/container/constructor|forward_list}}

[[de:cpp/container/forward list/forward list]]
[[es:cpp/container/forward list/forward list]]
[[fr:cpp/container/forward list/forward list]]
[[it:cpp/container/forward list/forward list]]
[[ja:cpp/container/forward list/forward list]]
[[pt:cpp/container/forward list/forward list]]
[[ru:cpp/container/forward list/forward list]]
[[zh:cpp/container/forward list/forward list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/front</title>
    <ns>0</ns>
    <id>907</id>
    <revision>
      <id>50500</id>
      <parentid>43871</parentid>
      <timestamp>2013-06-01T03:30:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/front|forward_list}}

[[de:cpp/container/forward list/front]]
[[es:cpp/container/forward list/front]]
[[fr:cpp/container/forward list/front]]
[[it:cpp/container/forward list/front]]
[[ja:cpp/container/forward list/front]]
[[pt:cpp/container/forward list/front]]
[[ru:cpp/container/forward list/front]]
[[zh:cpp/container/forward list/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/get allocator</title>
    <ns>0</ns>
    <id>908</id>
    <revision>
      <id>50501</id>
      <parentid>43866</parentid>
      <timestamp>2013-06-01T03:30:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="442">{{include page|cpp/container/get_allocator|forward_list}}

[[de:cpp/container/forward list/get allocator]]
[[es:cpp/container/forward list/get allocator]]
[[fr:cpp/container/forward list/get allocator]]
[[it:cpp/container/forward list/get allocator]]
[[ja:cpp/container/forward list/get allocator]]
[[pt:cpp/container/forward list/get allocator]]
[[ru:cpp/container/forward list/get allocator]]
[[zh:cpp/container/forward list/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/insert after</title>
    <ns>0</ns>
    <id>909</id>
    <revision>
      <id>90447</id>
      <parentid>90445</parentid>
      <timestamp>2017-02-23T14:37:52Z</timestamp>
      <contributor>
        <ip>223.3.183.158</ip>
      </contributor>
      <text xml:space="preserve" bytes="6182">{{cpp/container/forward_list/title | insert_after}}
{{cpp/container/forward_list/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
iterator insert_after( const_iterator pos, const T&amp; value );
}}
{{dcl | num=2 | since=c++11 |
iterator insert_after( const_iterator pos, T&amp;&amp; value );
}}
{{dcl | num=3 | since=c++11 |
iterator insert_after( const_iterator pos, size_type count, const T&amp; value );
}}
{{dcl | num=4 | since=c++11 |
template&lt; class InputIt &gt;
iterator insert_after( const_iterator pos, InputIt first, InputIt last );
}}
{{dcl | num=5 | since=c++11 |
iterator insert_after( const_iterator pos, std::initializer_list&lt;T&gt; ilist );
}}
{{dcl end}}

Inserts elements after the specified position in the container.

@1-2@ inserts {{tt|value}} after the element pointed to by {{tt|pos}}

@3@ inserts {{tt|count}} copies of the {{tt|value}} after the element pointed to by {{tt|pos}}

@4@ inserts elements from range {{tt|[first, last)}} after the element pointed to by {{tt|pos}}. 
The behavior is undefined if {{tt|first}} and {{tt|last}} are iterators into {{c|*this}}. 

@5@ inserts elements from initializer list {{tt|ilist}}.

{{cpp/container/note_iterator_invalidation|forward_list|insert_after}}

===Parameters===
{{par begin}}
{{par | pos | iterator after which the content will be inserted}}
{{par | value | element value to insert}}
{{par | count | number of copies to insert}}
{{par | first, last | the range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-2@ Iterator to the inserted element.
@3@ Iterator to the last element inserted, or {{tt|pos}} if {{c|1=count==0}}.
@4@ Iterator to the last element inserted, or {{tt|pos}} if {{c|1=first==last}}.
@5@ Iterator to the last element inserted, or {{tt|pos}} if {{tt|ilist}} is empty.

===Exceptions===
If an exception is thrown during {{tt|insert_after}} there are no effects (strong exception guarantee). 

===Complexity===
@1-2@ Constant.
@3@ Linear in {{c|count}}
@4@ Linear in {{c|std::distance(first, last)}}
@5@ Linear in {{c|ilist.size()}}

===Example===
{{example
 |code=
#include &lt;forward_list&gt;                                                         
#include &lt;string&gt;                                                               
#include &lt;iostream&gt;                                                             
#include &lt;vector&gt;                                                               
                                                                                
template&lt;typename T&gt;                                                            
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; s, const std::forward_list&lt;T&gt;&amp; v) {      
    s.put('[');                                                                 
    char comma[3] = {'\0', ' ', '\0'};                                          
    for (const auto&amp; e : v) {                                                   
        s &lt;&lt; comma &lt;&lt; e;                                                        
        comma[0] = ',';                                                         
    }                                                                           
    return s &lt;&lt; ']';                                                            
}                                                                               
                                                                                
int main()                                                                      
{                                                                               
    std::forward_list&lt;std::string&gt; words {&quot;the&quot;, &quot;frogurt&quot;, &quot;is&quot;, &quot;also&quot;, &quot;cursed&quot;};
    std::cout &lt;&lt; &quot;words: &quot; &lt;&lt; words &lt;&lt; '\n';                                    
                                                                                
    // insert_after (2)                                                         
    auto beginIt = words.begin();                                               
    words.insert_after(beginIt, &quot;strawberry&quot;);                                  
    std::cout &lt;&lt; &quot;words: &quot; &lt;&lt; words &lt;&lt; '\n';                                    
                                                                                
    // insert_after (3)                                                         
    auto anotherIt = beginIt;                                                   
    ++anotherIt;                                                                
    anotherIt = words.insert_after(anotherIt, 2, &quot;strawberry&quot;);                 
    std::cout &lt;&lt; &quot;words: &quot; &lt;&lt; words &lt;&lt; '\n';                                    

    // insert_after (4)
    std::vector&lt;std::string&gt; V = { &quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;};                
    anotherIt = words.insert_after(anotherIt, V.begin(), V.end());              
    std::cout &lt;&lt; &quot;words: &quot; &lt;&lt; words &lt;&lt; '\n';                                    
                       
    // insert_after (5)                                                         
    words.insert_after(anotherIt, {&quot;jackfruit&quot;, &quot;kiwifruit&quot;, &quot;lime&quot;, &quot;mango&quot;});
    std::cout &lt;&lt; &quot;words: &quot; &lt;&lt; words &lt;&lt; '\n';                                    
}    
 |output=
words: [the, frogurt, is, also, cursed]
words: [the, strawberry, frogurt, is, also, cursed]
words: [the, strawberry, strawberry, strawberry, frogurt, is, also, cursed]
words: [the, strawberry, strawberry, strawberry, apple, banana, cherry, frogurt, is, also, cursed]
words: [the, strawberry, strawberry, strawberry, apple, banana, cherry, jackfruit, kiwifruit, lime, mango, frogurt, is, also, cursed]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace after | forward_list}}
{{dsc inc | cpp/container/dsc push_front |forward_list}}
{{dsc end}}

[[de:cpp/container/forward list/insert after]]
[[es:cpp/container/forward list/insert after]]
[[fr:cpp/container/forward list/insert after]]
[[it:cpp/container/forward list/insert after]]
[[ja:cpp/container/forward list/insert after]]
[[pt:cpp/container/forward list/insert after]]
[[ru:cpp/container/forward list/insert after]]
[[zh:cpp/container/forward list/insert after]]</text>
      <sha1>tq04jah88ezinoyiimzgbwkbo9f14at</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/max size</title>
    <ns>0</ns>
    <id>910</id>
    <revision>
      <id>50502</id>
      <parentid>43854</parentid>
      <timestamp>2013-06-01T03:30:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="397">{{include page|cpp/container/max_size|forward_list}}

[[de:cpp/container/forward list/max size]]
[[es:cpp/container/forward list/max size]]
[[fr:cpp/container/forward list/max size]]
[[it:cpp/container/forward list/max size]]
[[ja:cpp/container/forward list/max size]]
[[pt:cpp/container/forward list/max size]]
[[ru:cpp/container/forward list/max size]]
[[zh:cpp/container/forward list/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/merge</title>
    <ns>0</ns>
    <id>911</id>
    <revision>
      <id>50503</id>
      <parentid>43848</parentid>
      <timestamp>2013-06-01T03:30:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/merge|forward_list}}

[[de:cpp/container/forward list/merge]]
[[es:cpp/container/forward list/merge]]
[[fr:cpp/container/forward list/merge]]
[[it:cpp/container/forward list/merge]]
[[ja:cpp/container/forward list/merge]]
[[pt:cpp/container/forward list/merge]]
[[ru:cpp/container/forward list/merge]]
[[zh:cpp/container/forward list/merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/operator cmp</title>
    <ns>0</ns>
    <id>1994</id>
    <revision>
      <id>50504</id>
      <parentid>43835</parentid>
      <timestamp>2013-06-01T03:30:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/operator_cmp|forward_list}}

[[de:cpp/container/forward list/operator cmp]]
[[es:cpp/container/forward list/operator cmp]]
[[fr:cpp/container/forward list/operator cmp]]
[[it:cpp/container/forward list/operator cmp]]
[[ja:cpp/container/forward list/operator cmp]]
[[pt:cpp/container/forward list/operator cmp]]
[[ru:cpp/container/forward list/operator cmp]]
[[zh:cpp/container/forward list/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/operator comp</title>
    <ns>0</ns>
    <id>4212</id>
    <redirect title="cpp/container/forward list/operator cmp" />
    <revision>
      <id>15241</id>
      <timestamp>2011-12-08T01:11:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/forward list/operator comp]] to [[cpp/container/forward list/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[cpp/container/forward list/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/operator=</title>
    <ns>0</ns>
    <id>912</id>
    <revision>
      <id>92049</id>
      <parentid>43841</parentid>
      <timestamp>2017-04-03T20:54:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="410">{{include page|cpp/container/operator{{=}}|forward_list}}

[[de:cpp/container/forward list/operator=]]
[[es:cpp/container/forward list/operator=]]
[[fr:cpp/container/forward list/operator=]]
[[it:cpp/container/forward list/operator=]]
[[ja:cpp/container/forward list/operator=]]
[[pt:cpp/container/forward list/operator=]]
[[ru:cpp/container/forward list/operator=]]
[[zh:cpp/container/forward list/operator=]]</text>
      <sha1>c0atqvojvm0vlk19usxx24sz9ohgau4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/pop front</title>
    <ns>0</ns>
    <id>913</id>
    <revision>
      <id>50505</id>
      <parentid>43828</parentid>
      <timestamp>2013-06-01T03:30:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/pop_front|forward_list}}

[[de:cpp/container/forward list/pop front]]
[[es:cpp/container/forward list/pop front]]
[[fr:cpp/container/forward list/pop front]]
[[it:cpp/container/forward list/pop front]]
[[ja:cpp/container/forward list/pop front]]
[[pt:cpp/container/forward list/pop front]]
[[ru:cpp/container/forward list/pop front]]
[[zh:cpp/container/forward list/pop front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/push front</title>
    <ns>0</ns>
    <id>914</id>
    <revision>
      <id>50506</id>
      <parentid>43823</parentid>
      <timestamp>2013-06-01T03:30:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/push_front|forward_list}}

[[de:cpp/container/forward list/push front]]
[[es:cpp/container/forward list/push front]]
[[fr:cpp/container/forward list/push front]]
[[it:cpp/container/forward list/push front]]
[[ja:cpp/container/forward list/push front]]
[[pt:cpp/container/forward list/push front]]
[[ru:cpp/container/forward list/push front]]
[[zh:cpp/container/forward list/push front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/remove</title>
    <ns>0</ns>
    <id>915</id>
    <revision>
      <id>50507</id>
      <parentid>43818</parentid>
      <timestamp>2013-06-01T03:30:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/remove|forward_list}}

[[de:cpp/container/forward list/remove]]
[[es:cpp/container/forward list/remove]]
[[fr:cpp/container/forward list/remove]]
[[it:cpp/container/forward list/remove]]
[[ja:cpp/container/forward list/remove]]
[[pt:cpp/container/forward list/remove]]
[[ru:cpp/container/forward list/remove]]
[[zh:cpp/container/forward list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/remove if</title>
    <ns>0</ns>
    <id>916</id>
    <redirect title="cpp/container/forward list/remove" />
    <revision>
      <id>9321</id>
      <parentid>9320</parentid>
      <timestamp>2011-08-21T16:14:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/container/forward_list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/resize</title>
    <ns>0</ns>
    <id>917</id>
    <revision>
      <id>50508</id>
      <parentid>43812</parentid>
      <timestamp>2013-06-01T03:30:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/resize|forward_list}}

[[de:cpp/container/forward list/resize]]
[[es:cpp/container/forward list/resize]]
[[fr:cpp/container/forward list/resize]]
[[it:cpp/container/forward list/resize]]
[[ja:cpp/container/forward list/resize]]
[[pt:cpp/container/forward list/resize]]
[[ru:cpp/container/forward list/resize]]
[[zh:cpp/container/forward list/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/reverse</title>
    <ns>0</ns>
    <id>918</id>
    <revision>
      <id>50509</id>
      <parentid>43807</parentid>
      <timestamp>2013-06-01T03:31:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/reverse|forward_list}}

[[de:cpp/container/forward list/reverse]]
[[es:cpp/container/forward list/reverse]]
[[fr:cpp/container/forward list/reverse]]
[[it:cpp/container/forward list/reverse]]
[[ja:cpp/container/forward list/reverse]]
[[pt:cpp/container/forward list/reverse]]
[[ru:cpp/container/forward list/reverse]]
[[zh:cpp/container/forward list/reverse]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/sort</title>
    <ns>0</ns>
    <id>919</id>
    <revision>
      <id>50510</id>
      <parentid>43801</parentid>
      <timestamp>2013-06-01T03:31:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/sort|forward_list}}

[[de:cpp/container/forward list/sort]]
[[es:cpp/container/forward list/sort]]
[[fr:cpp/container/forward list/sort]]
[[it:cpp/container/forward list/sort]]
[[ja:cpp/container/forward list/sort]]
[[pt:cpp/container/forward list/sort]]
[[ru:cpp/container/forward list/sort]]
[[zh:cpp/container/forward list/sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/splice after</title>
    <ns>0</ns>
    <id>2448</id>
    <revision>
      <id>68832</id>
      <parentid>65061</parentid>
      <timestamp>2014-03-22T16:26:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>no effect for same-position single-element splice</comment>
      <text xml:space="preserve" bytes="3728">{{cpp/container/forward_list/title | splice_after}}
{{cpp/container/forward_list/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
void splice_after( const_iterator pos, forward_list&amp; other );
}}
{{dcl | num=1 | since=c++11 |
void splice_after( const_iterator pos, forward_list&amp;&amp; other );
}}
{{dcl | num=2 | since=c++11 |
void splice_after( const_iterator pos, forward_list&amp; other, 
                   const_iterator it );
}}
{{dcl | num=2 | since=c++11 |
void splice_after( const_iterator pos, forward_list&amp;&amp; other,
                   const_iterator it );
}}
{{dcl | num=3 | since=c++11 |
void splice_after( const_iterator pos, forward_list&amp; other, 
                   const_iterator first, const_iterator last );
}}
{{dcl | num=3 | since=c++11 |
void splice_after( const_iterator pos, forward_list&amp;&amp; other, 
                   const_iterator first, const_iterator last );
}}
{{dcl end}}

Moves elements from another {{tt|forward_list}} to {{c|*this}}.

No elements are copied. {{tt|pos}} is a valid iterator in {{c|*this}} or is the {{c|before_begin()}} iterator. The behavior is undefined if {{c|get_allocator() !{{=}} other.get_allocator()}}. No iterators or references become invalidated, the iterators to the moved elements now refer into {{c|*this}}, not into {{tt|other}}.

@1@ Moves all elements from {{tt|other}} into {{c|*this}}. The elements are inserted after the element pointed to by {{tt|pos}}. The container {{tt|other}} becomes empty after the operation. The behavior is undefined if {{c|this {{==}} &amp;other}}

@2@ Moves the element pointed to by the iterator following {{tt|it}} from {{tt|other}} into {{c|*this}}. The element is inserted after the element pointed to by {{tt|pos}}. Has no effect if {{tt|pos{{==}}it}} or if {{tt|pos{{==}}++it}}.

@3@ Moves the elements in the range {{tt|(first, last)}} from {{tt|other}} into {{c|*this}}. The elements are inserted after the element pointed to by {{tt|pos}}. The element pointed-to by {{tt|first}} is not moved. The behavior is undefined if {{tt|pos}} is an iterator in the range {{tt|(first,last)}}.

===Parameters===
{{par begin}}
{{par | pos | element after which the content will be inserted }}
{{par | other | another container to move the content from}}
{{par | it | iterator preceding the iterator to the element to move from {{tt|other}} to {{c|*this}}}}
{{par | first, last | the range of elements to move from {{tt|other}} to {{c|*this}}}}
{{par end}} 

===Return value===
(none)

===Complexity===
@1@ Linear in the size of {{tt|other}}

@2@ Constant

@3@ Linear in {{c|std::distance(first, last)}}

===Example===
{{example
 | Demonstrates the meaning of open interval (first, last) in the third form of splice_after(): the first element of l1 is not moved.
 | code =
#include &lt;iostream&gt;
#include &lt;forward_list&gt;

int main()
{
    std::forward_list&lt;int&gt; l1 = {1,2,3,4,5};
    std::forward_list&lt;int&gt; l2 = {10,11,12};

    l2.splice_after(l2.cbegin(), l1, l1.cbegin(), l1.cend());
    // not equivalent to l2.splice_after(l2.cbegin(), l1);

    for(int n : l1)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    for(int n : l2)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
1
10 2 3 4 5 11 12
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc merge |forward_list}}
{{dsc inc | cpp/container/dsc remove |forward_list}}
{{dsc end}}

[[de:cpp/container/forward list/splice after]]
[[es:cpp/container/forward list/splice after]]
[[fr:cpp/container/forward list/splice after]]
[[it:cpp/container/forward list/splice after]]
[[ja:cpp/container/forward list/splice after]]
[[pt:cpp/container/forward list/splice after]]
[[ru:cpp/container/forward list/splice after]]
[[zh:cpp/container/forward list/splice after]]</text>
      <sha1>q6rdi8aeds2h8k35s01r0e705hpzyol</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/std swap</title>
    <ns>0</ns>
    <id>3459</id>
    <redirect title="cpp/container/forward list/swap2" />
    <revision>
      <id>13007</id>
      <timestamp>2011-11-03T18:38:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/forward list/std swap]] to [[cpp/container/forward list/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/container/forward list/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/swap</title>
    <ns>0</ns>
    <id>921</id>
    <revision>
      <id>50512</id>
      <parentid>43788</parentid>
      <timestamp>2013-06-01T03:31:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/swap|forward_list}}

[[de:cpp/container/forward list/swap]]
[[es:cpp/container/forward list/swap]]
[[fr:cpp/container/forward list/swap]]
[[it:cpp/container/forward list/swap]]
[[ja:cpp/container/forward list/swap]]
[[pt:cpp/container/forward list/swap]]
[[ru:cpp/container/forward list/swap]]
[[zh:cpp/container/forward list/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/swap2</title>
    <ns>0</ns>
    <id>1990</id>
    <revision>
      <id>50513</id>
      <parentid>43781</parentid>
      <timestamp>2013-06-01T03:31:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/swap2|forward_list}}

[[de:cpp/container/forward list/swap2]]
[[es:cpp/container/forward list/swap2]]
[[fr:cpp/container/forward list/swap2]]
[[it:cpp/container/forward list/swap2]]
[[ja:cpp/container/forward list/swap2]]
[[pt:cpp/container/forward list/swap2]]
[[ru:cpp/container/forward list/swap2]]
[[zh:cpp/container/forward list/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/unique</title>
    <ns>0</ns>
    <id>922</id>
    <revision>
      <id>50514</id>
      <parentid>43776</parentid>
      <timestamp>2013-06-01T03:31:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/unique|forward_list}}

[[de:cpp/container/forward list/unique]]
[[es:cpp/container/forward list/unique]]
[[fr:cpp/container/forward list/unique]]
[[it:cpp/container/forward list/unique]]
[[ja:cpp/container/forward list/unique]]
[[pt:cpp/container/forward list/unique]]
[[ru:cpp/container/forward list/unique]]
[[zh:cpp/container/forward list/unique]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/forward list/~forward list</title>
    <ns>0</ns>
    <id>923</id>
    <revision>
      <id>50515</id>
      <parentid>43770</parentid>
      <timestamp>2013-06-01T03:31:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="439">{{include page|cpp/container/destructor|forward_list}}

[[de:cpp/container/forward list/~forward list]]
[[es:cpp/container/forward list/~forward list]]
[[fr:cpp/container/forward list/~forward list]]
[[it:cpp/container/forward list/~forward list]]
[[ja:cpp/container/forward list/~forward list]]
[[pt:cpp/container/forward list/~forward list]]
[[ru:cpp/container/forward list/~forward list]]
[[zh:cpp/container/forward list/~forward list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list</title>
    <ns>0</ns>
    <id>924</id>
    <revision>
      <id>89138</id>
      <parentid>86007</parentid>
      <timestamp>2017-01-03T18:30:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="4616">{{cpp/title|list}}
{{cpp/container/list/navbar}}
{{dcl begin}}
{{dcl header|list}}
{{dcl|num=1|
template&lt;
    class T,
    class Allocator {{=}} std::allocator&lt;T&gt;
&gt; class list;
}}
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class T&gt;
    using list = std::list&lt;T, std::pmr::polymorphic_allocator&lt;T&gt;&gt;;
}
}}
{{dcl end}}

{{tt|std::list}} is a container that supports constant time insertion and removal of elements from anywhere in the container. Fast random access is not supported. It is usually implemented as a doubly-linked list. Compared to {{lc|std::forward_list}} this container provides bidirectional iteration capability while being less space efficient.

Addition, removal and moving the elements within the list or across several lists does not invalidate the iterators or references. An iterator is invalidated only when the corresponding element is deleted.

{{tt|std::list}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|SequenceContainer}} and {{concept|ReversibleContainer}}.

===Template parameters===
{{par begin}}
{{par inc | cpp/container/param list T | list}}
{{par inc | cpp/container/param list Allocator | list}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc value_type | list}}
{{dsc inc | cpp/container/dsc allocator_type | list}}
{{dsc inc | cpp/container/dsc size_type | list}}
{{dsc inc | cpp/container/dsc difference_type | list}}
{{dsc inc | cpp/container/dsc reference | list}}
{{dsc inc | cpp/container/dsc const_reference | list}}
{{dsc inc | cpp/container/dsc pointer | list}}
{{dsc inc | cpp/container/dsc const_pointer | list}}
{{dsc inc | cpp/container/dsc iterator | list}}
{{dsc inc | cpp/container/dsc const_iterator | list}}
{{dsc inc | cpp/container/dsc reverse_iterator | list}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | list}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | list}}
{{dsc inc | cpp/container/dsc destructor | list}}
{{dsc inc | cpp/container/dsc operator{{=}} | list}}
{{dsc inc | cpp/container/dsc assign | list}}
{{dsc inc | cpp/container/dsc get_allocator | list}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc front | list}}
{{dsc inc | cpp/container/dsc back | list}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | list}}
{{dsc inc | cpp/container/dsc end | list}}
{{dsc inc | cpp/container/dsc rbegin | list}}
{{dsc inc | cpp/container/dsc rend | list}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | list}}
{{dsc inc | cpp/container/dsc size | list}}
{{dsc inc | cpp/container/dsc max_size | list}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | list}}
{{dsc inc | cpp/container/dsc insert | list}}
{{dsc inc | cpp/container/dsc emplace | list}}
{{dsc inc | cpp/container/dsc erase | list}}
{{dsc inc | cpp/container/dsc push_back | list}}
{{dsc inc | cpp/container/dsc emplace_back | list}}
{{dsc inc | cpp/container/dsc pop_back | list}}
{{dsc inc | cpp/container/dsc push_front | list}}
{{dsc inc | cpp/container/dsc emplace_front | list}}
{{dsc inc | cpp/container/dsc pop_front | list}}
{{dsc inc | cpp/container/dsc resize | list}}
{{dsc inc | cpp/container/dsc swap | list}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/container/dsc merge | list}}
{{dsc inc | cpp/container/dsc splice | list}}
{{dsc inc | cpp/container/dsc remove | list}}
{{dsc inc | cpp/container/dsc reverse | list}}
{{dsc inc | cpp/container/dsc unique | list}}
{{dsc inc | cpp/container/dsc sort | list}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | list}}
{{dsc inc | cpp/container/dsc swap2 | list}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;list&gt;

int main()
{
    // Create a list containing integers
    std::list&lt;int&gt; l = { 7, 5, 16, 8 };

    // Add an integer to the front of the list
    l.push_front(25);
    // Add an integer to the back of the list
    l.push_back(13);

    // Insert an integer before 16 by searching
    auto it = std::find(l.begin(), l.end(), 16);
    if (it != l.end()) {
        l.insert(it, 42);
    }
	
    // Iterate and print values of the list
    for (int n : l) {
        std::cout &lt;&lt; n &lt;&lt; '\n';
    }
}
 | output=
25
7
5
42
16
8
13
}}

[[de:cpp/container/list]]
[[es:cpp/container/list]]
[[fr:cpp/container/list]]
[[it:cpp/container/list]]
[[ja:cpp/container/list]]
[[ko:cpp/container/list]]
[[pt:cpp/container/list]]
[[ru:cpp/container/list]]
[[zh:cpp/container/list]]</text>
      <sha1>ay2iim6pzbbzalfqta3f3g9bi3yqxdb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/assign</title>
    <ns>0</ns>
    <id>925</id>
    <revision>
      <id>50516</id>
      <parentid>43757</parentid>
      <timestamp>2013-06-01T03:31:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/assign|list}}

[[de:cpp/container/list/assign]]
[[es:cpp/container/list/assign]]
[[fr:cpp/container/list/assign]]
[[it:cpp/container/list/assign]]
[[ja:cpp/container/list/assign]]
[[pt:cpp/container/list/assign]]
[[ru:cpp/container/list/assign]]
[[zh:cpp/container/list/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/back</title>
    <ns>0</ns>
    <id>926</id>
    <revision>
      <id>50517</id>
      <parentid>43751</parentid>
      <timestamp>2013-06-01T03:31:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/back|list}}

[[de:cpp/container/list/back]]
[[es:cpp/container/list/back]]
[[fr:cpp/container/list/back]]
[[it:cpp/container/list/back]]
[[ja:cpp/container/list/back]]
[[pt:cpp/container/list/back]]
[[ru:cpp/container/list/back]]
[[zh:cpp/container/list/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/begin</title>
    <ns>0</ns>
    <id>927</id>
    <revision>
      <id>50518</id>
      <parentid>43745</parentid>
      <timestamp>2013-06-01T03:31:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/begin|list}}

[[de:cpp/container/list/begin]]
[[es:cpp/container/list/begin]]
[[fr:cpp/container/list/begin]]
[[it:cpp/container/list/begin]]
[[ja:cpp/container/list/begin]]
[[pt:cpp/container/list/begin]]
[[ru:cpp/container/list/begin]]
[[zh:cpp/container/list/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/clear</title>
    <ns>0</ns>
    <id>928</id>
    <revision>
      <id>50519</id>
      <parentid>43739</parentid>
      <timestamp>2013-06-01T03:31:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/clear|list}}

[[de:cpp/container/list/clear]]
[[es:cpp/container/list/clear]]
[[fr:cpp/container/list/clear]]
[[it:cpp/container/list/clear]]
[[ja:cpp/container/list/clear]]
[[pt:cpp/container/list/clear]]
[[ru:cpp/container/list/clear]]
[[zh:cpp/container/list/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/emplace</title>
    <ns>0</ns>
    <id>929</id>
    <revision>
      <id>50520</id>
      <parentid>43736</parentid>
      <timestamp>2013-06-01T03:31:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/emplace|list}}

[[de:cpp/container/list/emplace]]
[[es:cpp/container/list/emplace]]
[[fr:cpp/container/list/emplace]]
[[it:cpp/container/list/emplace]]
[[ja:cpp/container/list/emplace]]
[[pt:cpp/container/list/emplace]]
[[ru:cpp/container/list/emplace]]
[[zh:cpp/container/list/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/emplace back</title>
    <ns>0</ns>
    <id>930</id>
    <revision>
      <id>50521</id>
      <parentid>43728</parentid>
      <timestamp>2013-06-01T03:31:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/emplace_back|list}}

[[de:cpp/container/list/emplace back]]
[[es:cpp/container/list/emplace back]]
[[fr:cpp/container/list/emplace back]]
[[it:cpp/container/list/emplace back]]
[[ja:cpp/container/list/emplace back]]
[[pt:cpp/container/list/emplace back]]
[[ru:cpp/container/list/emplace back]]
[[zh:cpp/container/list/emplace back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/emplace front</title>
    <ns>0</ns>
    <id>931</id>
    <revision>
      <id>50522</id>
      <parentid>43721</parentid>
      <timestamp>2013-06-01T03:31:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/emplace_front|list}}

[[de:cpp/container/list/emplace front]]
[[es:cpp/container/list/emplace front]]
[[fr:cpp/container/list/emplace front]]
[[it:cpp/container/list/emplace front]]
[[ja:cpp/container/list/emplace front]]
[[pt:cpp/container/list/emplace front]]
[[ru:cpp/container/list/emplace front]]
[[zh:cpp/container/list/emplace front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/empty</title>
    <ns>0</ns>
    <id>932</id>
    <revision>
      <id>50523</id>
      <parentid>43715</parentid>
      <timestamp>2013-06-01T03:31:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/empty|list}}

[[de:cpp/container/list/empty]]
[[es:cpp/container/list/empty]]
[[fr:cpp/container/list/empty]]
[[it:cpp/container/list/empty]]
[[ja:cpp/container/list/empty]]
[[pt:cpp/container/list/empty]]
[[ru:cpp/container/list/empty]]
[[zh:cpp/container/list/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/end</title>
    <ns>0</ns>
    <id>933</id>
    <revision>
      <id>50524</id>
      <parentid>43709</parentid>
      <timestamp>2013-06-01T03:31:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/end|list}}

[[de:cpp/container/list/end]]
[[es:cpp/container/list/end]]
[[fr:cpp/container/list/end]]
[[it:cpp/container/list/end]]
[[ja:cpp/container/list/end]]
[[pt:cpp/container/list/end]]
[[ru:cpp/container/list/end]]
[[zh:cpp/container/list/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/erase</title>
    <ns>0</ns>
    <id>934</id>
    <revision>
      <id>50525</id>
      <parentid>43702</parentid>
      <timestamp>2013-06-01T03:31:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/erase|list}}

[[de:cpp/container/list/erase]]
[[es:cpp/container/list/erase]]
[[fr:cpp/container/list/erase]]
[[it:cpp/container/list/erase]]
[[ja:cpp/container/list/erase]]
[[pt:cpp/container/list/erase]]
[[ru:cpp/container/list/erase]]
[[zh:cpp/container/list/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/front</title>
    <ns>0</ns>
    <id>935</id>
    <revision>
      <id>50526</id>
      <parentid>43696</parentid>
      <timestamp>2013-06-01T03:31:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/front|list}}

[[de:cpp/container/list/front]]
[[es:cpp/container/list/front]]
[[fr:cpp/container/list/front]]
[[it:cpp/container/list/front]]
[[ja:cpp/container/list/front]]
[[pt:cpp/container/list/front]]
[[ru:cpp/container/list/front]]
[[zh:cpp/container/list/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/get allocator</title>
    <ns>0</ns>
    <id>936</id>
    <revision>
      <id>50527</id>
      <parentid>43691</parentid>
      <timestamp>2013-06-01T03:31:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/get_allocator|list}}

[[de:cpp/container/list/get allocator]]
[[es:cpp/container/list/get allocator]]
[[fr:cpp/container/list/get allocator]]
[[it:cpp/container/list/get allocator]]
[[ja:cpp/container/list/get allocator]]
[[pt:cpp/container/list/get allocator]]
[[ru:cpp/container/list/get allocator]]
[[zh:cpp/container/list/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/insert</title>
    <ns>0</ns>
    <id>937</id>
    <revision>
      <id>50528</id>
      <parentid>43685</parentid>
      <timestamp>2013-06-01T03:31:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/insert|list}}

[[de:cpp/container/list/insert]]
[[es:cpp/container/list/insert]]
[[fr:cpp/container/list/insert]]
[[it:cpp/container/list/insert]]
[[ja:cpp/container/list/insert]]
[[pt:cpp/container/list/insert]]
[[ru:cpp/container/list/insert]]
[[zh:cpp/container/list/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/list</title>
    <ns>0</ns>
    <id>938</id>
    <revision>
      <id>50529</id>
      <parentid>43678</parentid>
      <timestamp>2013-06-01T03:31:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="297">{{include page|cpp/container/constructor |list}}

[[de:cpp/container/list/list]]
[[es:cpp/container/list/list]]
[[fr:cpp/container/list/list]]
[[it:cpp/container/list/list]]
[[ja:cpp/container/list/list]]
[[pt:cpp/container/list/list]]
[[ru:cpp/container/list/list]]
[[zh:cpp/container/list/list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/max size</title>
    <ns>0</ns>
    <id>939</id>
    <revision>
      <id>50530</id>
      <parentid>43672</parentid>
      <timestamp>2013-06-01T03:31:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/max_size|list}}

[[de:cpp/container/list/max size]]
[[es:cpp/container/list/max size]]
[[fr:cpp/container/list/max size]]
[[it:cpp/container/list/max size]]
[[ja:cpp/container/list/max size]]
[[pt:cpp/container/list/max size]]
[[ru:cpp/container/list/max size]]
[[zh:cpp/container/list/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/merge</title>
    <ns>0</ns>
    <id>940</id>
    <revision>
      <id>50531</id>
      <parentid>43666</parentid>
      <timestamp>2013-06-01T03:31:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/merge|list}}

[[de:cpp/container/list/merge]]
[[es:cpp/container/list/merge]]
[[fr:cpp/container/list/merge]]
[[it:cpp/container/list/merge]]
[[ja:cpp/container/list/merge]]
[[pt:cpp/container/list/merge]]
[[ru:cpp/container/list/merge]]
[[zh:cpp/container/list/merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/operator cmp</title>
    <ns>0</ns>
    <id>1995</id>
    <revision>
      <id>50532</id>
      <parentid>43654</parentid>
      <timestamp>2013-06-01T03:31:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/operator_cmp|list}}

[[de:cpp/container/list/operator cmp]]
[[es:cpp/container/list/operator cmp]]
[[fr:cpp/container/list/operator cmp]]
[[it:cpp/container/list/operator cmp]]
[[ja:cpp/container/list/operator cmp]]
[[pt:cpp/container/list/operator cmp]]
[[ru:cpp/container/list/operator cmp]]
[[zh:cpp/container/list/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/operator comp</title>
    <ns>0</ns>
    <id>4213</id>
    <redirect title="cpp/container/list/operator cmp" />
    <revision>
      <id>15243</id>
      <timestamp>2011-12-08T01:11:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/list/operator comp]] to [[cpp/container/list/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/container/list/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/operator=</title>
    <ns>0</ns>
    <id>941</id>
    <revision>
      <id>92043</id>
      <parentid>43660</parentid>
      <timestamp>2017-04-03T20:54:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="338">{{include page|cpp/container/operator{{=}}|list}}

[[de:cpp/container/list/operator=]]
[[es:cpp/container/list/operator=]]
[[fr:cpp/container/list/operator=]]
[[it:cpp/container/list/operator=]]
[[ja:cpp/container/list/operator=]]
[[pt:cpp/container/list/operator=]]
[[ru:cpp/container/list/operator=]]
[[zh:cpp/container/list/operator=]]</text>
      <sha1>4uzclczz2dd4fz7756admci4pso1gb9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/pop back</title>
    <ns>0</ns>
    <id>942</id>
    <revision>
      <id>50533</id>
      <parentid>43649</parentid>
      <timestamp>2013-06-01T03:31:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/pop_back|list}}

[[de:cpp/container/list/pop back]]
[[es:cpp/container/list/pop back]]
[[fr:cpp/container/list/pop back]]
[[it:cpp/container/list/pop back]]
[[ja:cpp/container/list/pop back]]
[[pt:cpp/container/list/pop back]]
[[ru:cpp/container/list/pop back]]
[[zh:cpp/container/list/pop back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/pop front</title>
    <ns>0</ns>
    <id>943</id>
    <revision>
      <id>50534</id>
      <parentid>43643</parentid>
      <timestamp>2013-06-01T03:31:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/pop_front|list}}

[[de:cpp/container/list/pop front]]
[[es:cpp/container/list/pop front]]
[[fr:cpp/container/list/pop front]]
[[it:cpp/container/list/pop front]]
[[ja:cpp/container/list/pop front]]
[[pt:cpp/container/list/pop front]]
[[ru:cpp/container/list/pop front]]
[[zh:cpp/container/list/pop front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/push back</title>
    <ns>0</ns>
    <id>944</id>
    <revision>
      <id>50535</id>
      <parentid>43636</parentid>
      <timestamp>2013-06-01T03:31:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/push_back|list}}

[[de:cpp/container/list/push back]]
[[es:cpp/container/list/push back]]
[[fr:cpp/container/list/push back]]
[[it:cpp/container/list/push back]]
[[ja:cpp/container/list/push back]]
[[pt:cpp/container/list/push back]]
[[ru:cpp/container/list/push back]]
[[zh:cpp/container/list/push back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/push front</title>
    <ns>0</ns>
    <id>945</id>
    <revision>
      <id>50536</id>
      <parentid>43630</parentid>
      <timestamp>2013-06-01T03:31:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/push_front|list}}

[[de:cpp/container/list/push front]]
[[es:cpp/container/list/push front]]
[[fr:cpp/container/list/push front]]
[[it:cpp/container/list/push front]]
[[ja:cpp/container/list/push front]]
[[pt:cpp/container/list/push front]]
[[ru:cpp/container/list/push front]]
[[zh:cpp/container/list/push front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/rbegin</title>
    <ns>0</ns>
    <id>946</id>
    <revision>
      <id>50537</id>
      <parentid>43623</parentid>
      <timestamp>2013-06-01T03:31:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/rbegin|list}}

[[de:cpp/container/list/rbegin]]
[[es:cpp/container/list/rbegin]]
[[fr:cpp/container/list/rbegin]]
[[it:cpp/container/list/rbegin]]
[[ja:cpp/container/list/rbegin]]
[[pt:cpp/container/list/rbegin]]
[[ru:cpp/container/list/rbegin]]
[[zh:cpp/container/list/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/remove</title>
    <ns>0</ns>
    <id>947</id>
    <revision>
      <id>50538</id>
      <parentid>43617</parentid>
      <timestamp>2013-06-01T03:32:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/remove|list}}

[[de:cpp/container/list/remove]]
[[es:cpp/container/list/remove]]
[[fr:cpp/container/list/remove]]
[[it:cpp/container/list/remove]]
[[ja:cpp/container/list/remove]]
[[pt:cpp/container/list/remove]]
[[ru:cpp/container/list/remove]]
[[zh:cpp/container/list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/remove if</title>
    <ns>0</ns>
    <id>948</id>
    <redirect title="cpp/container/list/remove" />
    <revision>
      <id>9322</id>
      <parentid>1897</parentid>
      <timestamp>2011-08-21T16:14:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>redirect to remove</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/container/list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/rend</title>
    <ns>0</ns>
    <id>949</id>
    <revision>
      <id>50539</id>
      <parentid>43611</parentid>
      <timestamp>2013-06-01T03:32:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/rend|list}}

[[de:cpp/container/list/rend]]
[[es:cpp/container/list/rend]]
[[fr:cpp/container/list/rend]]
[[it:cpp/container/list/rend]]
[[ja:cpp/container/list/rend]]
[[pt:cpp/container/list/rend]]
[[ru:cpp/container/list/rend]]
[[zh:cpp/container/list/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/resize</title>
    <ns>0</ns>
    <id>950</id>
    <revision>
      <id>50540</id>
      <parentid>43606</parentid>
      <timestamp>2013-06-01T03:32:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/resize|list}}

[[de:cpp/container/list/resize]]
[[es:cpp/container/list/resize]]
[[fr:cpp/container/list/resize]]
[[it:cpp/container/list/resize]]
[[ja:cpp/container/list/resize]]
[[pt:cpp/container/list/resize]]
[[ru:cpp/container/list/resize]]
[[zh:cpp/container/list/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/reverse</title>
    <ns>0</ns>
    <id>951</id>
    <revision>
      <id>50541</id>
      <parentid>43600</parentid>
      <timestamp>2013-06-01T03:32:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/reverse|list}}

[[de:cpp/container/list/reverse]]
[[es:cpp/container/list/reverse]]
[[fr:cpp/container/list/reverse]]
[[it:cpp/container/list/reverse]]
[[ja:cpp/container/list/reverse]]
[[pt:cpp/container/list/reverse]]
[[ru:cpp/container/list/reverse]]
[[zh:cpp/container/list/reverse]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/size</title>
    <ns>0</ns>
    <id>952</id>
    <revision>
      <id>91526</id>
      <parentid>64980</parentid>
      <timestamp>2017-03-31T19:49:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1300">{{cpp/container/list/title | size}}
{{cpp/container/list/navbar}}
{{dcl begin}}
{{dcl |
size_type size() const;
}}
{{dcl end}}

Returns the number of elements in the container, i.e. {{c|std::distance(begin(), end())}}.

===Parameters===
(none)

===Return value===
The number of elements in the container.

===Exceptions===
{{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
{{rev begin}}
{{rev | until=c++11 | Constant or linear.}}
{{rev | since=c++11 | Constant.}}
{{rev end}}

===Example===
{{example
 | The following code uses {{tt|size}} to display the number of elements in a {{lc|std::list}}:
 | code=
#include &lt;list&gt;
#include &lt;iostream&gt;
 
int main()
{ 
    std::list&lt;int&gt; nums {1, 3, 5, 7};
 
    std::cout &lt;&lt; &quot;nums contains &quot; &lt;&lt; nums.size() &lt;&lt; &quot; elements.\n&quot;;
}
 | output=
nums contains 4 elements.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc empty |list}}
{{dsc inc | cpp/container/dsc max_size |list}}
{{dsc inc | cpp/container/dsc resize |list}}
{{dsc end}}

[[de:cpp/container/list/size]]
[[es:cpp/container/list/size]]
[[fr:cpp/container/list/size]]
[[it:cpp/container/list/size]]
[[ja:cpp/container/list/size]]
[[pt:cpp/container/list/size]]
[[ru:cpp/container/list/size]]
[[zh:cpp/container/list/size]]</text>
      <sha1>c4r4mt44hnwrwl3kgkek5wdfrxyr1wd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/sort</title>
    <ns>0</ns>
    <id>953</id>
    <revision>
      <id>50543</id>
      <parentid>43588</parentid>
      <timestamp>2013-06-01T03:32:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/sort|list}}

[[de:cpp/container/list/sort]]
[[es:cpp/container/list/sort]]
[[fr:cpp/container/list/sort]]
[[it:cpp/container/list/sort]]
[[ja:cpp/container/list/sort]]
[[pt:cpp/container/list/sort]]
[[ru:cpp/container/list/sort]]
[[zh:cpp/container/list/sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/splice</title>
    <ns>0</ns>
    <id>954</id>
    <revision>
      <id>50544</id>
      <parentid>43582</parentid>
      <timestamp>2013-06-01T03:32:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/splice|list}}

[[de:cpp/container/list/splice]]
[[es:cpp/container/list/splice]]
[[fr:cpp/container/list/splice]]
[[it:cpp/container/list/splice]]
[[ja:cpp/container/list/splice]]
[[pt:cpp/container/list/splice]]
[[ru:cpp/container/list/splice]]
[[zh:cpp/container/list/splice]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/std swap</title>
    <ns>0</ns>
    <id>3460</id>
    <redirect title="cpp/container/list/swap2" />
    <revision>
      <id>13009</id>
      <timestamp>2011-11-03T18:38:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/list/std swap]] to [[cpp/container/list/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/container/list/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/swap</title>
    <ns>0</ns>
    <id>955</id>
    <revision>
      <id>50545</id>
      <parentid>43576</parentid>
      <timestamp>2013-06-01T03:32:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/swap|list}}

[[de:cpp/container/list/swap]]
[[es:cpp/container/list/swap]]
[[fr:cpp/container/list/swap]]
[[it:cpp/container/list/swap]]
[[ja:cpp/container/list/swap]]
[[pt:cpp/container/list/swap]]
[[ru:cpp/container/list/swap]]
[[zh:cpp/container/list/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/swap2</title>
    <ns>0</ns>
    <id>1991</id>
    <revision>
      <id>50546</id>
      <parentid>43569</parentid>
      <timestamp>2013-06-01T03:32:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/swap2|list}}

[[de:cpp/container/list/swap2]]
[[es:cpp/container/list/swap2]]
[[fr:cpp/container/list/swap2]]
[[it:cpp/container/list/swap2]]
[[ja:cpp/container/list/swap2]]
[[pt:cpp/container/list/swap2]]
[[ru:cpp/container/list/swap2]]
[[zh:cpp/container/list/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/unique</title>
    <ns>0</ns>
    <id>956</id>
    <revision>
      <id>50547</id>
      <parentid>43563</parentid>
      <timestamp>2013-06-01T03:32:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/unique|list}}

[[de:cpp/container/list/unique]]
[[es:cpp/container/list/unique]]
[[fr:cpp/container/list/unique]]
[[it:cpp/container/list/unique]]
[[ja:cpp/container/list/unique]]
[[pt:cpp/container/list/unique]]
[[ru:cpp/container/list/unique]]
[[zh:cpp/container/list/unique]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/list/~list</title>
    <ns>0</ns>
    <id>957</id>
    <revision>
      <id>50548</id>
      <parentid>43556</parentid>
      <timestamp>2013-06-01T03:32:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="303">{{include page|cpp/container/destructor|list}}

[[de:cpp/container/list/~list]]
[[es:cpp/container/list/~list]]
[[fr:cpp/container/list/~list]]
[[it:cpp/container/list/~list]]
[[ja:cpp/container/list/~list]]
[[pt:cpp/container/list/~list]]
[[ru:cpp/container/list/~list]]
[[zh:cpp/container/list/~list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map</title>
    <ns>0</ns>
    <id>958</id>
    <revision>
      <id>89130</id>
      <parentid>87880</parentid>
      <timestamp>2017-01-03T16:23:18Z</timestamp>
      <contributor>
        <ip>63.85.214.4</ip>
      </contributor>
      <comment>replace &quot;std::polymorphic_allocator&quot; with the correct &quot;std::pmr::polymorphic_allocator&quot;</comment>
      <text xml:space="preserve" bytes="4325">{{cpp/title|map}}
{{cpp/container/map/navbar}}
{{dcl begin}}
{{dcl header|map}}
{{dcl | num=1|
template&lt;
    class Key,
    class T,
    class Compare {{=}} std::less&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;std::pair&lt;const Key, T&gt; &gt;
&gt; class map;
}} 
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key, class T, class Compare = std::less&lt;Key&gt;&gt;
    using map = std::map&lt;Key, T, Compare,
                         std::pmr::polymorphic_allocator&lt;std::pair&lt;const Key,T&gt;&gt;&gt;
}
}}
{{dcl end}}

{{tt|std::map}} is a sorted associative container that contains key-value pairs with unique keys. Keys are sorted by using the comparison function {{tt|Compare}}.  Search, removal, and insertion operations have logarithmic complexity. Maps are usually implemented as [[enwiki:Red–black_tree|red-black trees]].

Everywhere the standard library uses the {{concept|Compare}} concept, uniqueness is determined by using the equivalence relation.  In imprecise terms, two objects {{tt|a}} and {{tt|b}} are considered equivalent (not unique) if neither compares less than the other: {{tt|!comp(a, b) &amp;&amp; !comp(b, a)}}.

{{tt|std::map}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|AssociativeContainer}} and {{concept|ReversibleContainer}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | map}}
{{dsc inc | cpp/container/dsc mapped_type | map}}
{{dsc inc | cpp/container/dsc value_type | map}}
{{dsc inc | cpp/container/dsc size_type | map}}
{{dsc inc | cpp/container/dsc difference_type | map}}
{{dsc inc | cpp/container/dsc key_compare | map}}
{{dsc inc | cpp/container/dsc allocator_type | map}}
{{dsc inc | cpp/container/dsc reference | map}}
{{dsc inc | cpp/container/dsc const_reference | map}}
{{dsc inc | cpp/container/dsc pointer | map}}
{{dsc inc | cpp/container/dsc const_pointer | map}}
{{dsc inc | cpp/container/dsc iterator | map}}
{{dsc inc | cpp/container/dsc const_iterator | map}}
{{dsc inc | cpp/container/dsc reverse_iterator | map}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | map}}
{{dsc inc | cpp/container/dsc node_type | map}}
{{dsc inc | cpp/container/dsc insert_return_type | map}}
{{dsc end}}

===Member classes===
{{dsc begin}}
{{dsc inc | cpp/container/dsc value_compare | map}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | map}}
{{dsc inc | cpp/container/dsc destructor | map}}
{{dsc inc | cpp/container/dsc operator{{=}} | map}}
{{dsc inc | cpp/container/dsc get_allocator | map}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc at | map}}
{{dsc inc | cpp/container/dsc operator_at | map}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | map}}
{{dsc inc | cpp/container/dsc end | map}}
{{dsc inc | cpp/container/dsc rbegin | map}}
{{dsc inc | cpp/container/dsc rend | map}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | map}}
{{dsc inc | cpp/container/dsc size | map}}
{{dsc inc | cpp/container/dsc max_size | map}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | map}}
{{dsc inc | cpp/container/dsc insert | map}}
{{dsc inc | cpp/container/dsc insert_or_assign | map}}
{{dsc inc | cpp/container/dsc emplace | map}}
{{dsc inc | cpp/container/dsc emplace_hint | map}}
{{dsc inc | cpp/container/dsc try_emplace | map}}
{{dsc inc | cpp/container/dsc erase | map}}
{{dsc inc | cpp/container/dsc swap | map}}
{{dsc inc | cpp/container/dsc extract | map}}
{{dsc inc | cpp/container/dsc merge | map}}

{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc count | map}}
{{dsc inc | cpp/container/dsc find | map}}
{{dsc inc | cpp/container/dsc equal_range | map}}
{{dsc inc | cpp/container/dsc lower_bound | map}}
{{dsc inc | cpp/container/dsc upper_bound | map}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc key_comp | map}}
{{dsc inc | cpp/container/dsc value_comp | map}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | map}}
{{dsc inc | cpp/container/dsc swap2 | map}}
{{dsc end}}

[[de:cpp/container/map]]
[[es:cpp/container/map]]
[[fr:cpp/container/map]]
[[it:cpp/container/map]]
[[ja:cpp/container/map]]
[[pl:cpp/container/map]]
[[pt:cpp/container/map]]
[[ru:cpp/container/map]]
[[zh:cpp/container/map]]</text>
      <sha1>lnqj1qqkka5wjkm39tp6pr2dhr7gf9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/at</title>
    <ns>0</ns>
    <id>959</id>
    <revision>
      <id>50549</id>
      <parentid>43541</parentid>
      <timestamp>2013-06-01T03:32:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="268">{{include page|cpp/container/at assoc|map}}

[[de:cpp/container/map/at]]
[[es:cpp/container/map/at]]
[[fr:cpp/container/map/at]]
[[it:cpp/container/map/at]]
[[ja:cpp/container/map/at]]
[[pt:cpp/container/map/at]]
[[ru:cpp/container/map/at]]
[[zh:cpp/container/map/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/begin</title>
    <ns>0</ns>
    <id>960</id>
    <revision>
      <id>85073</id>
      <parentid>72255</parentid>
      <timestamp>2016-03-27T18:57:22Z</timestamp>
      <contributor>
        <ip>114.222.140.228</ip>
      </contributor>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/begin|map}}

[[de:cpp/container/map/begin]]
[[es:cpp/container/map/begin]]
[[fr:cpp/container/map/begin]]
[[it:cpp/container/map/begin]]
[[ja:cpp/container/map/begin]]
[[pt:cpp/container/map/begin]]
[[ru:cpp/container/map/begin]]
[[zh:cpp/container/map/begin]]</text>
      <sha1>f8fz959gow54l5aqhnuodhujuk442oc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/clear</title>
    <ns>0</ns>
    <id>961</id>
    <revision>
      <id>50551</id>
      <parentid>43528</parentid>
      <timestamp>2013-06-01T03:32:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="320">{{include page|cpp/container/clear|map}}

[[de:cpp/container/map/clear]]
[[es:cpp/container/map/clear]]
[[fr:cpp/container/map/clear]]
[[it:cpp/container/map/clear]]
[[ja:cpp/container/map/clear]]
[[pl:cpp/container/map/clear]]
[[pt:cpp/container/map/clear]]
[[ru:cpp/container/map/clear]]
[[zh:cpp/container/map/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/count</title>
    <ns>0</ns>
    <id>962</id>
    <revision>
      <id>65126</id>
      <parentid>50552</parentid>
      <timestamp>2013-08-30T16:36:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="293">{{include page|cpp/container/count_ord|map}}

[[de:cpp/container/map/count]]
[[es:cpp/container/map/count]]
[[fr:cpp/container/map/count]]
[[it:cpp/container/map/count]]
[[ja:cpp/container/map/count]]
[[pt:cpp/container/map/count]]
[[ru:cpp/container/map/count]]
[[zh:cpp/container/map/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/emplace</title>
    <ns>0</ns>
    <id>963</id>
    <revision>
      <id>50553</id>
      <parentid>43511</parentid>
      <timestamp>2013-06-01T03:32:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="313">{{include page|cpp/container/emplace assoc|map}}

[[de:cpp/container/map/emplace]]
[[es:cpp/container/map/emplace]]
[[fr:cpp/container/map/emplace]]
[[it:cpp/container/map/emplace]]
[[ja:cpp/container/map/emplace]]
[[pt:cpp/container/map/emplace]]
[[ru:cpp/container/map/emplace]]
[[zh:cpp/container/map/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/emplace hint</title>
    <ns>0</ns>
    <id>964</id>
    <revision>
      <id>85274</id>
      <parentid>73438</parentid>
      <timestamp>2016-04-13T12:35:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>23.2.4.1/2 says emplace has strong guarantee, and table 109 says emplace_hint is equivalent to emplace, therefore strong guarantee</comment>
      <text xml:space="preserve" bytes="1796">{{cpp/container/map/title | emplace_hint}}
{{cpp/container/map/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the container as close as possible to the position just before {{tt|hint}}. The element is constructed in-place, i.e. no copy or move operations are performed.

The constructor of the element type ({{tt|value_type}}, that is, {{c|std::pair&lt;const Key, T&gt;}}) is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|map|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator to the position before which the new element will be inserted}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

If the insertion failed because the element already exists, returns an iterator to the already existing element with the equivalent key.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before {{tt|hint}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |map}}
{{dsc inc | cpp/container/dsc insert |map}}
{{dsc end}}

[[de:cpp/container/map/emplace hint]]
[[es:cpp/container/map/emplace hint]]
[[fr:cpp/container/map/emplace hint]]
[[it:cpp/container/map/emplace hint]]
[[ja:cpp/container/map/emplace hint]]
[[pt:cpp/container/map/emplace hint]]
[[ru:cpp/container/map/emplace hint]]
[[zh:cpp/container/map/emplace hint]]</text>
      <sha1>n0zynbtwwl0ylyyim8ae4ico2kgdh6w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/empty</title>
    <ns>0</ns>
    <id>965</id>
    <revision>
      <id>50555</id>
      <parentid>43500</parentid>
      <timestamp>2013-06-01T03:32:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/empty|map}}

[[de:cpp/container/map/empty]]
[[es:cpp/container/map/empty]]
[[fr:cpp/container/map/empty]]
[[it:cpp/container/map/empty]]
[[ja:cpp/container/map/empty]]
[[pt:cpp/container/map/empty]]
[[ru:cpp/container/map/empty]]
[[zh:cpp/container/map/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/end</title>
    <ns>0</ns>
    <id>966</id>
    <revision>
      <id>50556</id>
      <parentid>43491</parentid>
      <timestamp>2013-06-01T03:32:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="271">{{include page|cpp/container/end|map}}

[[de:cpp/container/map/end]]
[[es:cpp/container/map/end]]
[[fr:cpp/container/map/end]]
[[it:cpp/container/map/end]]
[[ja:cpp/container/map/end]]
[[pt:cpp/container/map/end]]
[[ru:cpp/container/map/end]]
[[zh:cpp/container/map/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/equal range</title>
    <ns>0</ns>
    <id>967</id>
    <revision>
      <id>65093</id>
      <parentid>65079</parentid>
      <timestamp>2013-08-30T15:58:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="347">{{include page|cpp/container/equal_range_ord|map}}

[[de:cpp/container/map/equal range]]
[[es:cpp/container/map/equal range]]
[[fr:cpp/container/map/equal range]]
[[it:cpp/container/map/equal range]]
[[ja:cpp/container/map/equal range]]
[[pt:cpp/container/map/equal range]]
[[ru:cpp/container/map/equal range]]
[[zh:cpp/container/map/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/erase</title>
    <ns>0</ns>
    <id>968</id>
    <revision>
      <id>50558</id>
      <parentid>43476</parentid>
      <timestamp>2013-06-01T03:32:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="295">{{include page|cpp/container/erase assoc|map}}

[[de:cpp/container/map/erase]]
[[es:cpp/container/map/erase]]
[[fr:cpp/container/map/erase]]
[[it:cpp/container/map/erase]]
[[ja:cpp/container/map/erase]]
[[pt:cpp/container/map/erase]]
[[ru:cpp/container/map/erase]]
[[zh:cpp/container/map/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/extract</title>
    <ns>0</ns>
    <id>15666</id>
    <revision>
      <id>87123</id>
      <timestamp>2016-07-27T14:47:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>templates</comment>
      <text xml:space="preserve" bytes="48">{{include page|cpp/container/extract assoc|map}}</text>
      <sha1>orqi9jh9tdvo487ipza24iar282ufbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/find</title>
    <ns>0</ns>
    <id>969</id>
    <revision>
      <id>65563</id>
      <parentid>65562</parentid>
      <timestamp>2013-09-19T18:32:19Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>avoid lines beginning with &quot;C:&quot;, which tricks our coliru extension into thinking it's compiler output</comment>
      <text xml:space="preserve" bytes="982">{{include page|cpp/container/find|map}}


===Example===

{{example
 | Demonstrates the risk of accessing non-existing elements via operator [].
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;map&gt;

int main()
{
    std::map&lt;std::string,int&gt; my_map;
    my_map[&quot;x&quot;] =  11;
    my_map[&quot;y&quot;] = 23;
    
    auto it = my_map.find(&quot;x&quot;);
    if (it != my_map.end()) std::cout &lt;&lt; &quot;x: &quot; &lt;&lt; it-&gt;second &lt;&lt; &quot;\n&quot;;

    it = my_map.find(&quot;z&quot;);
    if (it != my_map.end()) std::cout &lt;&lt; &quot;z1: &quot; &lt;&lt; it-&gt;second &lt;&lt; &quot;\n&quot;;

    // Accessing a non-existing element creates it
    if (my_map[&quot;z&quot;] == 42) std::cout &lt;&lt; &quot;Oha!\n&quot;;
    
    it = my_map.find(&quot;z&quot;);
    if (it != my_map.end()) std::cout &lt;&lt; &quot;z2: &quot; &lt;&lt; it-&gt;second &lt;&lt; &quot;\n&quot;;
}
 | output=
x: 11
z2: 0
}}

[[de:cpp/container/map/find]]
[[es:cpp/container/map/find]]
[[fr:cpp/container/map/find]]
[[it:cpp/container/map/find]]
[[ja:cpp/container/map/find]]
[[pt:cpp/container/map/find]]
[[ru:cpp/container/map/find]]
[[zh:cpp/container/map/find]]</text>
      <sha1>3hnxajvgn9d8w11pwje7qon7sl309yh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/get allocator</title>
    <ns>0</ns>
    <id>970</id>
    <revision>
      <id>50560</id>
      <parentid>43466</parentid>
      <timestamp>2013-06-01T03:32:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/get_allocator|map}}

[[de:cpp/container/map/get allocator]]
[[es:cpp/container/map/get allocator]]
[[fr:cpp/container/map/get allocator]]
[[it:cpp/container/map/get allocator]]
[[ja:cpp/container/map/get allocator]]
[[pt:cpp/container/map/get allocator]]
[[ru:cpp/container/map/get allocator]]
[[zh:cpp/container/map/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/insert</title>
    <ns>0</ns>
    <id>971</id>
    <revision>
      <id>91171</id>
      <parentid>88752</parentid>
      <timestamp>2017-03-24T13:51:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg2844 note</comment>
      <text xml:space="preserve" bytes="4315">{{cpp/container/map/title | insert}}
{{cpp/container/map/navbar}}
{{dcl begin}}
{{dcl | num=1 | 
std::pair&lt;iterator,bool&gt; insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class P &gt;
std::pair&lt;iterator,bool&gt; insert( P&amp;&amp; value );
}}
{{dcl | num=2 | since=c++17 |
std::pair&lt;iterator,bool&gt; insert( value_type&amp;&amp; value );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
iterator insert( iterator hint, const value_type&amp; value );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++11 |
template&lt; class P &gt;
iterator insert( const_iterator hint, P&amp;&amp; value );
}}
{{dcl | num=4 | since=c++17 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 | 
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
insert_return_type insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container, if the container doesn't already contain an element with an equivalent key.

@1-2@ Inserts {{tt|value}}. The overload {{v|2}} is equivalent to {{c|emplace(std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@3-4@ Inserts {{tt|value}} in the position as close as possible, just prior{{mark since c++11}}, to {{tt|hint}}. The overload {{v|4}} is equivalent to {{c|emplace_hint(hint, std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@5@ Inserts elements from range {{tt|[first, last)}}. {{cpp/container/lwg2488-note}}

@6@ Inserts elements from initializer list {{tt|ilist}}. {{cpp/container/lwg2488-note}}

{{cpp/container/node_handle_insert_desc|map|7|8}}

{{cpp/container/note_iterator_invalidation|map|insert}}
===Parameters===
{{par begin}}
{{par | hint | {{rev begin}}{{rev|until=c++11|iterator, used as a suggestion as to where to start the search}}{{rev|since=c++11|iterator to the position before which the new element will be inserted}}{{rev end}}}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-2@ Returns a pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a {{c|bool}} denoting whether the insertion took place.

@3-4@ Returns an iterator to the inserted element, or to the element that prevented the insertion.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|map|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===
@1-2@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

{{rev begin}}
{{rev | until=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''after'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev | since=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev end}}

@5-6@ {{tt|O(N*log(size() + N))}}, where N is the number of elements to insert.

@7@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

@8@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.

===Notes===
{{cpp/container/hinted_insert_note}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |map}}
{{dsc inc | cpp/container/dsc emplace_hint |map}}
{{dsc inc | cpp/container/dsc insert_or_assign |map}}
{{dsc end}}

[[de:cpp/container/map/insert]]
[[es:cpp/container/map/insert]]
[[fr:cpp/container/map/insert]]
[[it:cpp/container/map/insert]]
[[ja:cpp/container/map/insert]]
[[pt:cpp/container/map/insert]]
[[ru:cpp/container/map/insert]]
[[zh:cpp/container/map/insert]]</text>
      <sha1>dtdoota9sxssyaphcsk8n8qekynnaq9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/insert or assign</title>
    <ns>0</ns>
    <id>13853</id>
    <revision>
      <id>74463</id>
      <timestamp>2014-12-17T18:25:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="394">{{include page|cpp/container/insert_or_assign assoc|map}}

[[de:cpp/container/map/insert_or_assign]]
[[es:cpp/container/map/insert_or_assign]]
[[fr:cpp/container/map/insert_or_assign]]
[[it:cpp/container/map/insert_or_assign]]
[[ja:cpp/container/map/insert_or_assign]]
[[pt:cpp/container/map/insert_or_assign]]
[[ru:cpp/container/map/insert_or_assign]]
[[zh:cpp/container/map/insert_or_assign]]</text>
      <sha1>3n0zxmpn5flkeinh73axvt3aawk9yfl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/key comp</title>
    <ns>0</ns>
    <id>972</id>
    <revision>
      <id>50561</id>
      <parentid>43453</parentid>
      <timestamp>2013-06-01T03:32:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/key_comp|map}}

[[de:cpp/container/map/key comp]]
[[es:cpp/container/map/key comp]]
[[fr:cpp/container/map/key comp]]
[[it:cpp/container/map/key comp]]
[[ja:cpp/container/map/key comp]]
[[pt:cpp/container/map/key comp]]
[[ru:cpp/container/map/key comp]]
[[zh:cpp/container/map/key comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/lower bound</title>
    <ns>0</ns>
    <id>973</id>
    <revision>
      <id>50562</id>
      <parentid>43432</parentid>
      <timestamp>2013-06-01T03:32:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/lower_bound|map}}

[[de:cpp/container/map/lower bound]]
[[es:cpp/container/map/lower bound]]
[[fr:cpp/container/map/lower bound]]
[[it:cpp/container/map/lower bound]]
[[ja:cpp/container/map/lower bound]]
[[pt:cpp/container/map/lower bound]]
[[ru:cpp/container/map/lower bound]]
[[zh:cpp/container/map/lower bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/map</title>
    <ns>0</ns>
    <id>974</id>
    <revision>
      <id>50563</id>
      <parentid>43425</parentid>
      <timestamp>2013-06-01T03:32:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="283">{{include page|cpp/container/constructor ord|map}}

[[de:cpp/container/map/map]]
[[es:cpp/container/map/map]]
[[fr:cpp/container/map/map]]
[[it:cpp/container/map/map]]
[[ja:cpp/container/map/map]]
[[pt:cpp/container/map/map]]
[[ru:cpp/container/map/map]]
[[zh:cpp/container/map/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/max size</title>
    <ns>0</ns>
    <id>975</id>
    <revision>
      <id>50564</id>
      <parentid>43416</parentid>
      <timestamp>2013-06-01T03:32:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/max_size|map}}

[[de:cpp/container/map/max size]]
[[es:cpp/container/map/max size]]
[[fr:cpp/container/map/max size]]
[[it:cpp/container/map/max size]]
[[ja:cpp/container/map/max size]]
[[pt:cpp/container/map/max size]]
[[ru:cpp/container/map/max size]]
[[zh:cpp/container/map/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/merge</title>
    <ns>0</ns>
    <id>15654</id>
    <revision>
      <id>87029</id>
      <timestamp>2016-07-21T15:37:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="46">{{include page|cpp/container/merge assoc|map}}</text>
      <sha1>17el1b027e9z34pyljpfo5eovk4kcdu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/operator at</title>
    <ns>0</ns>
    <id>977</id>
    <revision>
      <id>73773</id>
      <parentid>43405</parentid>
      <timestamp>2014-11-15T13:43:47Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>make use of [[template:include page]]</comment>
      <text xml:space="preserve" bytes="349">{{include page|cpp/container/operator_at assoc|map}}

[[de:cpp/container/map/operator at]]
[[es:cpp/container/map/operator at]]
[[fr:cpp/container/map/operator at]]
[[it:cpp/container/map/operator at]]
[[ja:cpp/container/map/operator at]]
[[pt:cpp/container/map/operator at]]
[[ru:cpp/container/map/operator at]]
[[zh:cpp/container/map/operator at]]</text>
      <sha1>bel1s2ni355zohlz0bksd94eiee0zim</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/operator cmp</title>
    <ns>0</ns>
    <id>2014</id>
    <revision>
      <id>50565</id>
      <parentid>43397</parentid>
      <timestamp>2013-06-01T03:32:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="352">{{include page|cpp/container/operator_cmp|map}}

[[de:cpp/container/map/operator cmp]]
[[es:cpp/container/map/operator cmp]]
[[fr:cpp/container/map/operator cmp]]
[[it:cpp/container/map/operator cmp]]
[[ja:cpp/container/map/operator cmp]]
[[pt:cpp/container/map/operator cmp]]
[[ru:cpp/container/map/operator cmp]]
[[zh:cpp/container/map/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/operator comp</title>
    <ns>0</ns>
    <id>4210</id>
    <redirect title="cpp/container/map/operator cmp" />
    <revision>
      <id>15237</id>
      <timestamp>2011-12-08T01:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/map/operator comp]] to [[cpp/container/map/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/container/map/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/operator=</title>
    <ns>0</ns>
    <id>976</id>
    <revision>
      <id>92054</id>
      <parentid>43411</parentid>
      <timestamp>2017-04-03T20:54:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="329">{{include page|cpp/container/operator{{=}}|map}}

[[de:cpp/container/map/operator=]]
[[es:cpp/container/map/operator=]]
[[fr:cpp/container/map/operator=]]
[[it:cpp/container/map/operator=]]
[[ja:cpp/container/map/operator=]]
[[pt:cpp/container/map/operator=]]
[[ru:cpp/container/map/operator=]]
[[zh:cpp/container/map/operator=]]</text>
      <sha1>raripaun65mz3uorccxuaj26yt92qk4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/rbegin</title>
    <ns>0</ns>
    <id>978</id>
    <revision>
      <id>50566</id>
      <parentid>43387</parentid>
      <timestamp>2013-06-01T03:32:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/rbegin|map}}

[[de:cpp/container/map/rbegin]]
[[es:cpp/container/map/rbegin]]
[[fr:cpp/container/map/rbegin]]
[[it:cpp/container/map/rbegin]]
[[ja:cpp/container/map/rbegin]]
[[pt:cpp/container/map/rbegin]]
[[ru:cpp/container/map/rbegin]]
[[zh:cpp/container/map/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/rend</title>
    <ns>0</ns>
    <id>979</id>
    <revision>
      <id>50567</id>
      <parentid>43379</parentid>
      <timestamp>2013-06-01T03:32:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/rend|map}}

[[de:cpp/container/map/rend]]
[[es:cpp/container/map/rend]]
[[fr:cpp/container/map/rend]]
[[it:cpp/container/map/rend]]
[[ja:cpp/container/map/rend]]
[[pt:cpp/container/map/rend]]
[[ru:cpp/container/map/rend]]
[[zh:cpp/container/map/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/size</title>
    <ns>0</ns>
    <id>980</id>
    <revision>
      <id>50568</id>
      <parentid>43375</parentid>
      <timestamp>2013-06-01T03:32:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/size|map}}

[[de:cpp/container/map/size]]
[[es:cpp/container/map/size]]
[[fr:cpp/container/map/size]]
[[it:cpp/container/map/size]]
[[ja:cpp/container/map/size]]
[[pt:cpp/container/map/size]]
[[ru:cpp/container/map/size]]
[[zh:cpp/container/map/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/std swap</title>
    <ns>0</ns>
    <id>3461</id>
    <redirect title="cpp/container/map/swap2" />
    <revision>
      <id>13011</id>
      <timestamp>2011-11-03T18:38:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/map/std swap]] to [[cpp/container/map/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/container/map/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/swap</title>
    <ns>0</ns>
    <id>981</id>
    <revision>
      <id>50569</id>
      <parentid>43369</parentid>
      <timestamp>2013-06-01T03:33:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/swap|map}}

[[de:cpp/container/map/swap]]
[[es:cpp/container/map/swap]]
[[fr:cpp/container/map/swap]]
[[it:cpp/container/map/swap]]
[[ja:cpp/container/map/swap]]
[[pt:cpp/container/map/swap]]
[[ru:cpp/container/map/swap]]
[[zh:cpp/container/map/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/swap2</title>
    <ns>0</ns>
    <id>2004</id>
    <revision>
      <id>50570</id>
      <parentid>43362</parentid>
      <timestamp>2013-06-01T03:33:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/swap2|map}}

[[de:cpp/container/map/swap2]]
[[es:cpp/container/map/swap2]]
[[fr:cpp/container/map/swap2]]
[[it:cpp/container/map/swap2]]
[[ja:cpp/container/map/swap2]]
[[pt:cpp/container/map/swap2]]
[[ru:cpp/container/map/swap2]]
[[zh:cpp/container/map/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/try emplace</title>
    <ns>0</ns>
    <id>13850</id>
    <revision>
      <id>74454</id>
      <parentid>74452</parentid>
      <timestamp>2014-12-17T18:09:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>templatize</comment>
      <text xml:space="preserve" bytes="349">{{include page|cpp/container/try_emplace assoc|map}}

[[de:cpp/container/map/try_emplace]]
[[es:cpp/container/map/try_emplace]]
[[fr:cpp/container/map/try_emplace]]
[[it:cpp/container/map/try_emplace]]
[[ja:cpp/container/map/try_emplace]]
[[pt:cpp/container/map/try_emplace]]
[[ru:cpp/container/map/try_emplace]]
[[zh:cpp/container/map/try_emplace]]</text>
      <sha1>96qx5mygnsgkulg93ginen4hji08bs9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/upper bound</title>
    <ns>0</ns>
    <id>982</id>
    <revision>
      <id>50571</id>
      <parentid>43349</parentid>
      <timestamp>2013-06-01T03:33:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/upper_bound|map}}

[[de:cpp/container/map/upper bound]]
[[es:cpp/container/map/upper bound]]
[[fr:cpp/container/map/upper bound]]
[[it:cpp/container/map/upper bound]]
[[ja:cpp/container/map/upper bound]]
[[pt:cpp/container/map/upper bound]]
[[ru:cpp/container/map/upper bound]]
[[zh:cpp/container/map/upper bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/value comp</title>
    <ns>0</ns>
    <id>983</id>
    <revision>
      <id>50572</id>
      <parentid>43344</parentid>
      <timestamp>2013-06-01T03:33:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/value_comp|map}}

[[de:cpp/container/map/value comp]]
[[es:cpp/container/map/value comp]]
[[fr:cpp/container/map/value comp]]
[[it:cpp/container/map/value comp]]
[[ja:cpp/container/map/value comp]]
[[pt:cpp/container/map/value comp]]
[[ru:cpp/container/map/value comp]]
[[zh:cpp/container/map/value comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/value compare</title>
    <ns>0</ns>
    <id>3617</id>
    <revision>
      <id>50573</id>
      <parentid>43339</parentid>
      <timestamp>2013-06-01T03:33:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/value_compare|map}}

[[de:cpp/container/map/value compare]]
[[es:cpp/container/map/value compare]]
[[fr:cpp/container/map/value compare]]
[[it:cpp/container/map/value compare]]
[[ja:cpp/container/map/value compare]]
[[pt:cpp/container/map/value compare]]
[[ru:cpp/container/map/value compare]]
[[zh:cpp/container/map/value compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/map/~map</title>
    <ns>0</ns>
    <id>984</id>
    <revision>
      <id>50574</id>
      <parentid>43330</parentid>
      <timestamp>2013-06-01T03:33:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="286">{{include page|cpp/container/destructor|map}}

[[de:cpp/container/map/~map]]
[[es:cpp/container/map/~map]]
[[fr:cpp/container/map/~map]]
[[it:cpp/container/map/~map]]
[[ja:cpp/container/map/~map]]
[[pt:cpp/container/map/~map]]
[[ru:cpp/container/map/~map]]
[[zh:cpp/container/map/~map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap</title>
    <ns>0</ns>
    <id>985</id>
    <revision>
      <id>90135</id>
      <parentid>89132</parentid>
      <timestamp>2017-02-06T20:46:30Z</timestamp>
      <contributor>
        <ip>38.109.87.242</ip>
      </contributor>
      <text xml:space="preserve" bytes="4498">{{cpp/title|multimap}}
{{cpp/container/multimap/navbar}}
{{dcl begin}}
{{dcl header|map}}
{{dcl|num=1|
template&lt;
    class Key,
    class T,
    class Compare {{=}} std::less&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;std::pair&lt;const Key, T&gt; &gt;
&gt; class multimap;
}} 
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key, class T, class Compare = std::less&lt;Key&gt;&gt;
    using multimap = std::multimap&lt;Key, T, Compare,
                                  std::pmr::polymorphic_allocator&lt;std::pair&lt;const Key,T&gt;&gt;&gt;;
}
}} 
{{dcl end}}

Multimap is an associative container that contains a sorted list of key-value pairs, while multiple entries with the same key is permitted. Sorting is done according to the comparison function {{tt|Compare}}, applied to the keys. Search, insertion, and removal operations have logarithmic complexity.

The order of the key-value pairs whose keys compare equivalent is the order of insertion and does not change. {{mark since c++11}}

Everywhere the standard library uses the {{concept|Compare}} concept, equivalence is determined by using the equivalence relation as described on {{concept|Compare}}.  In imprecise terms, two objects {{tt|a}} and {{tt|b}} are considered equivalent if neither compares less than the other: {{tt|!comp(a, b) &amp;&amp; !comp(b, a)}}.

{{tt|std::multimap}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|AssociativeContainer}} and {{concept|ReversibleContainer}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | multimap}}
{{dsc inc | cpp/container/dsc mapped_type | multimap}}
{{dsc inc | cpp/container/dsc value_type | multimap}}
{{dsc inc | cpp/container/dsc size_type | multimap}}
{{dsc inc | cpp/container/dsc difference_type | multimap}}
{{dsc inc | cpp/container/dsc key_compare | multimap}}
{{dsc inc | cpp/container/dsc allocator_type | multimap}}
{{dsc inc | cpp/container/dsc reference | multimap}}
{{dsc inc | cpp/container/dsc const_reference | multimap}}
{{dsc inc | cpp/container/dsc pointer | multimap}}
{{dsc inc | cpp/container/dsc const_pointer | multimap}}
{{dsc inc | cpp/container/dsc iterator | multimap}}
{{dsc inc | cpp/container/dsc const_iterator | multimap}}
{{dsc inc | cpp/container/dsc reverse_iterator | multimap}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | multimap}}
{{dsc inc | cpp/container/dsc node_type | multimap}}
{{dsc end}}

===Member classes===
{{dsc begin}}
{{dsc inc | cpp/container/dsc value_compare | multimap}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | multimap}}
{{dsc inc | cpp/container/dsc destructor | multimap}}
{{dsc inc | cpp/container/dsc operator{{=}} | multimap}}
{{dsc inc | cpp/container/dsc get_allocator | multimap}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | multimap}}
{{dsc inc | cpp/container/dsc end | multimap}}
{{dsc inc | cpp/container/dsc rbegin | multimap}}
{{dsc inc | cpp/container/dsc rend | multimap}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | multimap}}
{{dsc inc | cpp/container/dsc size | multimap}}
{{dsc inc | cpp/container/dsc max_size | multimap}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | multimap}}
{{dsc inc | cpp/container/dsc insert | multimap}}
{{dsc inc | cpp/container/dsc emplace | multimap}}
{{dsc inc | cpp/container/dsc emplace_hint | multimap}}
{{dsc inc | cpp/container/dsc erase | multimap}}
{{dsc inc | cpp/container/dsc swap | multimap}}
{{dsc inc | cpp/container/dsc extract | multimap}}
{{dsc inc | cpp/container/dsc merge | multimap}}


{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc count | multimap}}
{{dsc inc | cpp/container/dsc find | multimap}}
{{dsc inc | cpp/container/dsc equal_range | multimap}}
{{dsc inc | cpp/container/dsc lower_bound | multimap}}
{{dsc inc | cpp/container/dsc upper_bound | multimap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc key_comp | multimap}}
{{dsc inc | cpp/container/dsc value_comp | multimap}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | multimap}}
{{dsc inc | cpp/container/dsc swap2 | multimap}}
{{dsc end}}

[[de:cpp/container/multimap]]
[[es:cpp/container/multimap]]
[[fr:cpp/container/multimap]]
[[it:cpp/container/multimap]]
[[ja:cpp/container/multimap]]
[[pl:cpp/container/multimap]]
[[pt:cpp/container/multimap]]
[[ru:cpp/container/multimap]]
[[zh:cpp/container/multimap]]</text>
      <sha1>j4vooiz3wce2zhvfr7s7gsaqafvmqsr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/begin</title>
    <ns>0</ns>
    <id>986</id>
    <revision>
      <id>50575</id>
      <parentid>43315</parentid>
      <timestamp>2013-06-01T03:33:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/begin|multimap}}

[[de:cpp/container/multimap/begin]]
[[es:cpp/container/multimap/begin]]
[[fr:cpp/container/multimap/begin]]
[[it:cpp/container/multimap/begin]]
[[ja:cpp/container/multimap/begin]]
[[pt:cpp/container/multimap/begin]]
[[ru:cpp/container/multimap/begin]]
[[zh:cpp/container/multimap/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/clear</title>
    <ns>0</ns>
    <id>987</id>
    <revision>
      <id>50576</id>
      <parentid>43308</parentid>
      <timestamp>2013-06-01T03:33:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/clear|multimap}}

[[de:cpp/container/multimap/clear]]
[[es:cpp/container/multimap/clear]]
[[fr:cpp/container/multimap/clear]]
[[it:cpp/container/multimap/clear]]
[[ja:cpp/container/multimap/clear]]
[[pt:cpp/container/multimap/clear]]
[[ru:cpp/container/multimap/clear]]
[[zh:cpp/container/multimap/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/count</title>
    <ns>0</ns>
    <id>988</id>
    <revision>
      <id>65125</id>
      <parentid>50577</parentid>
      <timestamp>2013-08-30T16:36:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="338">{{include page|cpp/container/count_ord|multimap}}

[[de:cpp/container/multimap/count]]
[[es:cpp/container/multimap/count]]
[[fr:cpp/container/multimap/count]]
[[it:cpp/container/multimap/count]]
[[ja:cpp/container/multimap/count]]
[[pt:cpp/container/multimap/count]]
[[ru:cpp/container/multimap/count]]
[[zh:cpp/container/multimap/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/emplace</title>
    <ns>0</ns>
    <id>989</id>
    <revision>
      <id>50578</id>
      <parentid>43292</parentid>
      <timestamp>2013-06-01T03:33:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="358">{{include page|cpp/container/emplace assoc|multimap}}

[[de:cpp/container/multimap/emplace]]
[[es:cpp/container/multimap/emplace]]
[[fr:cpp/container/multimap/emplace]]
[[it:cpp/container/multimap/emplace]]
[[ja:cpp/container/multimap/emplace]]
[[pt:cpp/container/multimap/emplace]]
[[ru:cpp/container/multimap/emplace]]
[[zh:cpp/container/multimap/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/emplace hint</title>
    <ns>0</ns>
    <id>990</id>
    <revision>
      <id>85277</id>
      <parentid>73439</parentid>
      <timestamp>2016-04-13T12:50:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>exception guarantee here too</comment>
      <text xml:space="preserve" bytes="1726">{{cpp/container/multimap/title | emplace_hint}}
{{cpp/container/multimap/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element into the container as close as possible to the position just before {{tt|hint}}. The element is constructed in-place, i.e. no copy or move operations are performed. 

The constructor of the element type ({{tt|value_type}}, that is, {{c|std::pair&lt;const Key, T&gt;}}) is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|multimap|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator to the position before which the new element will be inserted}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before {{tt|hint}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |multimap}}
{{dsc inc | cpp/container/dsc insert |multimap}}
{{dsc end}}

[[de:cpp/container/multimap/emplace hint]]
[[es:cpp/container/multimap/emplace hint]]
[[fr:cpp/container/multimap/emplace hint]]
[[it:cpp/container/multimap/emplace hint]]
[[ja:cpp/container/multimap/emplace hint]]
[[pt:cpp/container/multimap/emplace hint]]
[[ru:cpp/container/multimap/emplace hint]]
[[zh:cpp/container/multimap/emplace hint]]</text>
      <sha1>sfgdr08mn68ydiop7det9bxw004molt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/empty</title>
    <ns>0</ns>
    <id>991</id>
    <revision>
      <id>50580</id>
      <parentid>41943</parentid>
      <timestamp>2013-06-01T03:33:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/empty|multimap}}

[[de:cpp/container/multimap/empty]]
[[es:cpp/container/multimap/empty]]
[[fr:cpp/container/multimap/empty]]
[[it:cpp/container/multimap/empty]]
[[ja:cpp/container/multimap/empty]]
[[pt:cpp/container/multimap/empty]]
[[ru:cpp/container/multimap/empty]]
[[zh:cpp/container/multimap/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/end</title>
    <ns>0</ns>
    <id>992</id>
    <revision>
      <id>50581</id>
      <parentid>41940</parentid>
      <timestamp>2013-06-01T03:33:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/end|multimap}}

[[de:cpp/container/multimap/end]]
[[es:cpp/container/multimap/end]]
[[fr:cpp/container/multimap/end]]
[[it:cpp/container/multimap/end]]
[[ja:cpp/container/multimap/end]]
[[pt:cpp/container/multimap/end]]
[[ru:cpp/container/multimap/end]]
[[zh:cpp/container/multimap/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/equal range</title>
    <ns>0</ns>
    <id>993</id>
    <revision>
      <id>65092</id>
      <parentid>50582</parentid>
      <timestamp>2013-08-30T15:58:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="392">{{include page|cpp/container/equal_range_ord|multimap}}

[[de:cpp/container/multimap/equal range]]
[[es:cpp/container/multimap/equal range]]
[[fr:cpp/container/multimap/equal range]]
[[it:cpp/container/multimap/equal range]]
[[ja:cpp/container/multimap/equal range]]
[[pt:cpp/container/multimap/equal range]]
[[ru:cpp/container/multimap/equal range]]
[[zh:cpp/container/multimap/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/erase</title>
    <ns>0</ns>
    <id>994</id>
    <revision>
      <id>50583</id>
      <parentid>41934</parentid>
      <timestamp>2013-06-01T03:33:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="340">{{include page|cpp/container/erase assoc|multimap}}

[[de:cpp/container/multimap/erase]]
[[es:cpp/container/multimap/erase]]
[[fr:cpp/container/multimap/erase]]
[[it:cpp/container/multimap/erase]]
[[ja:cpp/container/multimap/erase]]
[[pt:cpp/container/multimap/erase]]
[[ru:cpp/container/multimap/erase]]
[[zh:cpp/container/multimap/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/extract</title>
    <ns>0</ns>
    <id>15667</id>
    <revision>
      <id>87124</id>
      <timestamp>2016-07-27T14:48:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="53">{{include page|cpp/container/extract assoc|multimap}}</text>
      <sha1>qel10qjp9qbruhomgqecnf7afnwy539</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/find</title>
    <ns>0</ns>
    <id>995</id>
    <revision>
      <id>50584</id>
      <parentid>41932</parentid>
      <timestamp>2013-06-01T03:33:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/find|multimap}}

[[de:cpp/container/multimap/find]]
[[es:cpp/container/multimap/find]]
[[fr:cpp/container/multimap/find]]
[[it:cpp/container/multimap/find]]
[[ja:cpp/container/multimap/find]]
[[pt:cpp/container/multimap/find]]
[[ru:cpp/container/multimap/find]]
[[zh:cpp/container/multimap/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/get allocator</title>
    <ns>0</ns>
    <id>996</id>
    <revision>
      <id>50585</id>
      <parentid>41929</parentid>
      <timestamp>2013-06-01T03:33:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/get_allocator|multimap}}

[[de:cpp/container/multimap/get allocator]]
[[es:cpp/container/multimap/get allocator]]
[[fr:cpp/container/multimap/get allocator]]
[[it:cpp/container/multimap/get allocator]]
[[ja:cpp/container/multimap/get allocator]]
[[pt:cpp/container/multimap/get allocator]]
[[ru:cpp/container/multimap/get allocator]]
[[zh:cpp/container/multimap/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/insert</title>
    <ns>0</ns>
    <id>997</id>
    <revision>
      <id>87110</id>
      <parentid>81209</parentid>
      <timestamp>2016-07-26T21:53:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+node handle insert</comment>
      <text xml:space="preserve" bytes="3973">{{cpp/container/multimap/title | insert}}
{{cpp/container/multimap/navbar}}
{{dcl begin}}
{{dcl | num=1 |
iterator insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class P &gt;
iterator insert( P&amp;&amp; value );
}}
{{dcl | num=2 | since=c++17 |
iterator insert( value_type&amp;&amp; value );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
iterator insert( iterator hint, const value_type&amp; value );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++11 |
template&lt; class P &gt;
iterator insert( const_iterator hint, P&amp;&amp; value );
}}
{{dcl | num=4 | since=c++17 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 | 
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
iterator insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container.

@1-2@ inserts {{tt|value}}. If the container has elements with equivalent key, inserts at the upper bound of that range.{{mark since c++11}} The overload {{v|2}} is equivalent to {{c|emplace(std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@3-4@ inserts {{tt|value}} in the position as close as possible, just prior{{mark since c++11}}, to {{tt|hint}}. The overload {{v|4}} is equivalent to {{c|emplace_hint(hint, std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@5@ inserts elements from range {{tt|[first, last)}}.

@6@ inserts elements from initializer list {{tt|ilist}}.

{{cpp/container/node_handle_insert_desc|multimap|7|8}}

{{cpp/container/note_iterator_invalidation|multimap|insert}}
===Parameters===
{{par begin}}
{{par | hint | {{rev begin}}{{rev|until=c++11|iterator, used as a suggestion as to where to start the search}}{{rev|since=c++11|iterator to the position before which the new element will be inserted}}{{rev end}}}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-4@ Returns an iterator to the inserted element.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|multimap|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===
@1-2@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

{{rev begin}}
{{rev | until=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''after'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev | since=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev end}}

@5-6@ {{tt|O(N*log(size() + N))}}, where N is the number of elements to insert.

@7@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

@8@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |multimap}}
{{dsc inc | cpp/container/dsc emplace_hint |multimap}}
{{dsc end}}

[[de:cpp/container/multimap/insert]]
[[es:cpp/container/multimap/insert]]
[[fr:cpp/container/multimap/insert]]
[[it:cpp/container/multimap/insert]]
[[ja:cpp/container/multimap/insert]]
[[pt:cpp/container/multimap/insert]]
[[ru:cpp/container/multimap/insert]]
[[zh:cpp/container/multimap/insert]]</text>
      <sha1>bnqy0fwttzd041voer67l368dtvc95s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/key comp</title>
    <ns>0</ns>
    <id>998</id>
    <revision>
      <id>50586</id>
      <parentid>41925</parentid>
      <timestamp>2013-06-01T03:33:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/key_comp|multimap}}

[[de:cpp/container/multimap/key comp]]
[[es:cpp/container/multimap/key comp]]
[[fr:cpp/container/multimap/key comp]]
[[it:cpp/container/multimap/key comp]]
[[ja:cpp/container/multimap/key comp]]
[[pt:cpp/container/multimap/key comp]]
[[ru:cpp/container/multimap/key comp]]
[[zh:cpp/container/multimap/key comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/lower bound</title>
    <ns>0</ns>
    <id>999</id>
    <revision>
      <id>50587</id>
      <parentid>41923</parentid>
      <timestamp>2013-06-01T03:33:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/lower_bound|multimap}}

[[de:cpp/container/multimap/lower bound]]
[[es:cpp/container/multimap/lower bound]]
[[fr:cpp/container/multimap/lower bound]]
[[it:cpp/container/multimap/lower bound]]
[[ja:cpp/container/multimap/lower bound]]
[[pt:cpp/container/multimap/lower bound]]
[[ru:cpp/container/multimap/lower bound]]
[[zh:cpp/container/multimap/lower bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/max size</title>
    <ns>0</ns>
    <id>1000</id>
    <revision>
      <id>50588</id>
      <parentid>41920</parentid>
      <timestamp>2013-06-01T03:33:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/max_size|multimap}}

[[de:cpp/container/multimap/max size]]
[[es:cpp/container/multimap/max size]]
[[fr:cpp/container/multimap/max size]]
[[it:cpp/container/multimap/max size]]
[[ja:cpp/container/multimap/max size]]
[[pt:cpp/container/multimap/max size]]
[[ru:cpp/container/multimap/max size]]
[[zh:cpp/container/multimap/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/merge</title>
    <ns>0</ns>
    <id>15655</id>
    <revision>
      <id>87030</id>
      <timestamp>2016-07-21T15:37:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="51">{{include page|cpp/container/merge assoc|multimap}}</text>
      <sha1>dilwthwypqg3qbs3l9yyen1w4s0eqrv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/multimap</title>
    <ns>0</ns>
    <id>1001</id>
    <revision>
      <id>50589</id>
      <parentid>41917</parentid>
      <timestamp>2013-06-01T03:33:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="368">{{include page|cpp/container/constructor ord|multimap}}

[[de:cpp/container/multimap/multimap]]
[[es:cpp/container/multimap/multimap]]
[[fr:cpp/container/multimap/multimap]]
[[it:cpp/container/multimap/multimap]]
[[ja:cpp/container/multimap/multimap]]
[[pt:cpp/container/multimap/multimap]]
[[ru:cpp/container/multimap/multimap]]
[[zh:cpp/container/multimap/multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/operator cmp</title>
    <ns>0</ns>
    <id>2013</id>
    <revision>
      <id>50590</id>
      <parentid>41912</parentid>
      <timestamp>2013-06-01T03:33:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="397">{{include page|cpp/container/operator_cmp|multimap}}

[[de:cpp/container/multimap/operator cmp]]
[[es:cpp/container/multimap/operator cmp]]
[[fr:cpp/container/multimap/operator cmp]]
[[it:cpp/container/multimap/operator cmp]]
[[ja:cpp/container/multimap/operator cmp]]
[[pt:cpp/container/multimap/operator cmp]]
[[ru:cpp/container/multimap/operator cmp]]
[[zh:cpp/container/multimap/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/operator comp</title>
    <ns>0</ns>
    <id>4209</id>
    <redirect title="cpp/container/multimap/operator cmp" />
    <revision>
      <id>15235</id>
      <timestamp>2011-12-08T01:10:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/multimap/operator comp]] to [[cpp/container/multimap/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[cpp/container/multimap/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/operator=</title>
    <ns>0</ns>
    <id>1002</id>
    <revision>
      <id>92042</id>
      <parentid>41915</parentid>
      <timestamp>2017-04-03T20:54:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="374">{{include page|cpp/container/operator{{=}}|multimap}}

[[de:cpp/container/multimap/operator=]]
[[es:cpp/container/multimap/operator=]]
[[fr:cpp/container/multimap/operator=]]
[[it:cpp/container/multimap/operator=]]
[[ja:cpp/container/multimap/operator=]]
[[pt:cpp/container/multimap/operator=]]
[[ru:cpp/container/multimap/operator=]]
[[zh:cpp/container/multimap/operator=]]</text>
      <sha1>d3y86y2qr4ulmshoskv0fpcsqa6st6f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/rbegin</title>
    <ns>0</ns>
    <id>1003</id>
    <revision>
      <id>50591</id>
      <parentid>41909</parentid>
      <timestamp>2013-06-01T03:33:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/rbegin|multimap}}

[[de:cpp/container/multimap/rbegin]]
[[es:cpp/container/multimap/rbegin]]
[[fr:cpp/container/multimap/rbegin]]
[[it:cpp/container/multimap/rbegin]]
[[ja:cpp/container/multimap/rbegin]]
[[pt:cpp/container/multimap/rbegin]]
[[ru:cpp/container/multimap/rbegin]]
[[zh:cpp/container/multimap/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/rend</title>
    <ns>0</ns>
    <id>1004</id>
    <revision>
      <id>50592</id>
      <parentid>41906</parentid>
      <timestamp>2013-06-01T03:33:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/rend|multimap}}

[[de:cpp/container/multimap/rend]]
[[es:cpp/container/multimap/rend]]
[[fr:cpp/container/multimap/rend]]
[[it:cpp/container/multimap/rend]]
[[ja:cpp/container/multimap/rend]]
[[pt:cpp/container/multimap/rend]]
[[ru:cpp/container/multimap/rend]]
[[zh:cpp/container/multimap/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/size</title>
    <ns>0</ns>
    <id>1005</id>
    <revision>
      <id>50593</id>
      <parentid>41903</parentid>
      <timestamp>2013-06-01T03:33:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/size|multimap}}

[[de:cpp/container/multimap/size]]
[[es:cpp/container/multimap/size]]
[[fr:cpp/container/multimap/size]]
[[it:cpp/container/multimap/size]]
[[ja:cpp/container/multimap/size]]
[[pt:cpp/container/multimap/size]]
[[ru:cpp/container/multimap/size]]
[[zh:cpp/container/multimap/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/std swap</title>
    <ns>0</ns>
    <id>3462</id>
    <redirect title="cpp/container/multimap/swap2" />
    <revision>
      <id>13013</id>
      <timestamp>2011-11-03T18:38:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/multimap/std swap]] to [[cpp/container/multimap/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/container/multimap/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/swap</title>
    <ns>0</ns>
    <id>1006</id>
    <revision>
      <id>50594</id>
      <parentid>41900</parentid>
      <timestamp>2013-06-01T03:33:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/swap|multimap}}

[[de:cpp/container/multimap/swap]]
[[es:cpp/container/multimap/swap]]
[[fr:cpp/container/multimap/swap]]
[[it:cpp/container/multimap/swap]]
[[ja:cpp/container/multimap/swap]]
[[pt:cpp/container/multimap/swap]]
[[ru:cpp/container/multimap/swap]]
[[zh:cpp/container/multimap/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/swap2</title>
    <ns>0</ns>
    <id>2002</id>
    <revision>
      <id>50595</id>
      <parentid>41897</parentid>
      <timestamp>2013-06-01T03:33:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/swap2|multimap}}

[[de:cpp/container/multimap/swap2]]
[[es:cpp/container/multimap/swap2]]
[[fr:cpp/container/multimap/swap2]]
[[it:cpp/container/multimap/swap2]]
[[ja:cpp/container/multimap/swap2]]
[[pt:cpp/container/multimap/swap2]]
[[ru:cpp/container/multimap/swap2]]
[[zh:cpp/container/multimap/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/upper bound</title>
    <ns>0</ns>
    <id>1007</id>
    <revision>
      <id>50596</id>
      <parentid>41894</parentid>
      <timestamp>2013-06-01T03:33:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/upper_bound|multimap}}

[[de:cpp/container/multimap/upper bound]]
[[es:cpp/container/multimap/upper bound]]
[[fr:cpp/container/multimap/upper bound]]
[[it:cpp/container/multimap/upper bound]]
[[ja:cpp/container/multimap/upper bound]]
[[pt:cpp/container/multimap/upper bound]]
[[ru:cpp/container/multimap/upper bound]]
[[zh:cpp/container/multimap/upper bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/value comp</title>
    <ns>0</ns>
    <id>1008</id>
    <revision>
      <id>50597</id>
      <parentid>41891</parentid>
      <timestamp>2013-06-01T03:33:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/value_comp|multimap}}

[[de:cpp/container/multimap/value comp]]
[[es:cpp/container/multimap/value comp]]
[[fr:cpp/container/multimap/value comp]]
[[it:cpp/container/multimap/value comp]]
[[ja:cpp/container/multimap/value comp]]
[[pt:cpp/container/multimap/value comp]]
[[ru:cpp/container/multimap/value comp]]
[[zh:cpp/container/multimap/value comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/value compare</title>
    <ns>0</ns>
    <id>3618</id>
    <revision>
      <id>50598</id>
      <parentid>41888</parentid>
      <timestamp>2013-06-01T03:33:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/value_compare|multimap}}

[[de:cpp/container/multimap/value compare]]
[[es:cpp/container/multimap/value compare]]
[[fr:cpp/container/multimap/value compare]]
[[it:cpp/container/multimap/value compare]]
[[ja:cpp/container/multimap/value compare]]
[[pt:cpp/container/multimap/value compare]]
[[ru:cpp/container/multimap/value compare]]
[[zh:cpp/container/multimap/value compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multimap/~multimap</title>
    <ns>0</ns>
    <id>1009</id>
    <revision>
      <id>50599</id>
      <parentid>41885</parentid>
      <timestamp>2013-06-01T03:33:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="371">{{include page|cpp/container/destructor|multimap}}

[[de:cpp/container/multimap/~multimap]]
[[es:cpp/container/multimap/~multimap]]
[[fr:cpp/container/multimap/~multimap]]
[[it:cpp/container/multimap/~multimap]]
[[ja:cpp/container/multimap/~multimap]]
[[pt:cpp/container/multimap/~multimap]]
[[ru:cpp/container/multimap/~multimap]]
[[zh:cpp/container/multimap/~multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset</title>
    <ns>0</ns>
    <id>1010</id>
    <revision>
      <id>89131</id>
      <parentid>87883</parentid>
      <timestamp>2017-01-03T18:27:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="4349">{{cpp/title|multiset}}
{{cpp/container/multiset/navbar}}
{{dcl begin}}
{{dcl header|set}}
{{dcl|num=1|
template&lt;
    class Key,
    class Compare {{=}} std::less&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;Key&gt;
&gt; class multiset;
}} 
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key, class Compare = std::less&lt;Key&gt;&gt;
    using multiset = std::multiset&lt;Key, Compare,
                                   std::pmr::polymorphic_allocator&lt;Key&gt;&gt;;
}
}}
{{dcl end}}

{{tt|std::multiset}} is an associative container that contains a sorted set of objects of type Key. Unlike set, multiple keys with equivalent values are allowed. Sorting is done using the key comparison function Compare. Search, insertion, and removal operations have logarithmic complexity.

Everywhere the standard library uses the {{concept|Compare}} concept, equivalence is determined by using the equivalence relation as described on {{concept|Compare}}.  In imprecise terms, two objects {{tt|a}} and {{tt|b}} are considered equivalent if neither compares less than the other: {{tt|!comp(a, b) &amp;&amp; !comp(b, a)}}.

The order of the elements that compare equivalent is the order of insertion and does not change. {{mark since c++11}}

{{tt|std::multiset}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|AssociativeContainer}} and {{concept|ReversibleContainer}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | multiset}}
{{dsc inc | cpp/container/dsc value_type | multiset}}
{{dsc inc | cpp/container/dsc size_type | multiset}}
{{dsc inc | cpp/container/dsc difference_type | multiset}}
{{dsc inc | cpp/container/dsc key_compare | multiset}}
{{dsc inc | cpp/container/dsc value_compare2 | multiset}}
{{dsc inc | cpp/container/dsc allocator_type | multiset}}
{{dsc inc | cpp/container/dsc reference | multiset}}
{{dsc inc | cpp/container/dsc const_reference | multiset}}
{{dsc inc | cpp/container/dsc pointer | multiset}}
{{dsc inc | cpp/container/dsc const_pointer | multiset}}
{{dsc inc | cpp/container/dsc iterator | multiset}}
{{dsc inc | cpp/container/dsc const_iterator | multiset}}
{{dsc inc | cpp/container/dsc reverse_iterator | multiset}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | multiset}}
{{dsc inc | cpp/container/dsc node_type | multiset}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | multiset}}
{{dsc inc | cpp/container/dsc destructor | multiset}}
{{dsc inc | cpp/container/dsc operator{{=}} | multiset}}
{{dsc inc | cpp/container/dsc get_allocator | multiset}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | multiset}}
{{dsc inc | cpp/container/dsc end | multiset}}
{{dsc inc | cpp/container/dsc rbegin | multiset}}
{{dsc inc | cpp/container/dsc rend | multiset}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | multiset}}
{{dsc inc | cpp/container/dsc size | multiset}}
{{dsc inc | cpp/container/dsc max_size | multiset}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | multiset}}
{{dsc inc | cpp/container/dsc insert | multiset}}
{{dsc inc | cpp/container/dsc emplace | multiset}}
{{dsc inc | cpp/container/dsc emplace_hint | multiset}}
{{dsc inc | cpp/container/dsc erase | multiset}}
{{dsc inc | cpp/container/dsc swap | multiset}}
{{dsc inc | cpp/container/dsc extract| multiset}}
{{dsc inc | cpp/container/dsc merge | multiset}}

{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc count | multiset}}
{{dsc inc | cpp/container/dsc find | multiset}}
{{dsc inc | cpp/container/dsc equal_range | multiset}}
{{dsc inc | cpp/container/dsc lower_bound | multiset}}
{{dsc inc | cpp/container/dsc upper_bound | multiset}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc key_comp | multiset}}
{{dsc inc | cpp/container/dsc value_comp | multiset}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | multiset}}
{{dsc inc | cpp/container/dsc swap2 | multiset}}
{{dsc end}}

===Notes===
{{cpp/container/assoc_note}}

[[de:cpp/container/multiset]]
[[es:cpp/container/multiset]]
[[fr:cpp/container/multiset]]
[[it:cpp/container/multiset]]
[[ja:cpp/container/multiset]]
[[pl:cpp/container/multiset]]
[[pt:cpp/container/multiset]]
[[ru:cpp/container/multiset]]
[[zh:cpp/container/multiset]]</text>
      <sha1>e1gj5mt5cba6eh6udcadjemavgiq0y1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/begin</title>
    <ns>0</ns>
    <id>1011</id>
    <revision>
      <id>50600</id>
      <parentid>41878</parentid>
      <timestamp>2013-06-01T03:33:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/begin|multiset}}

[[de:cpp/container/multiset/begin]]
[[es:cpp/container/multiset/begin]]
[[fr:cpp/container/multiset/begin]]
[[it:cpp/container/multiset/begin]]
[[ja:cpp/container/multiset/begin]]
[[pt:cpp/container/multiset/begin]]
[[ru:cpp/container/multiset/begin]]
[[zh:cpp/container/multiset/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/clear</title>
    <ns>0</ns>
    <id>1012</id>
    <revision>
      <id>50601</id>
      <parentid>41876</parentid>
      <timestamp>2013-06-01T03:33:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/clear|multiset}}

[[de:cpp/container/multiset/clear]]
[[es:cpp/container/multiset/clear]]
[[fr:cpp/container/multiset/clear]]
[[it:cpp/container/multiset/clear]]
[[ja:cpp/container/multiset/clear]]
[[pt:cpp/container/multiset/clear]]
[[ru:cpp/container/multiset/clear]]
[[zh:cpp/container/multiset/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/count</title>
    <ns>0</ns>
    <id>1013</id>
    <revision>
      <id>65124</id>
      <parentid>50602</parentid>
      <timestamp>2013-08-30T16:36:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="338">{{include page|cpp/container/count_ord|multiset}}

[[de:cpp/container/multiset/count]]
[[es:cpp/container/multiset/count]]
[[fr:cpp/container/multiset/count]]
[[it:cpp/container/multiset/count]]
[[ja:cpp/container/multiset/count]]
[[pt:cpp/container/multiset/count]]
[[ru:cpp/container/multiset/count]]
[[zh:cpp/container/multiset/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/emplace</title>
    <ns>0</ns>
    <id>1014</id>
    <revision>
      <id>50603</id>
      <parentid>41870</parentid>
      <timestamp>2013-06-01T03:34:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="358">{{include page|cpp/container/emplace assoc|multiset}}

[[de:cpp/container/multiset/emplace]]
[[es:cpp/container/multiset/emplace]]
[[fr:cpp/container/multiset/emplace]]
[[it:cpp/container/multiset/emplace]]
[[ja:cpp/container/multiset/emplace]]
[[pt:cpp/container/multiset/emplace]]
[[ru:cpp/container/multiset/emplace]]
[[zh:cpp/container/multiset/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/emplace hint</title>
    <ns>0</ns>
    <id>1015</id>
    <revision>
      <id>85278</id>
      <parentid>73441</parentid>
      <timestamp>2016-04-13T12:50:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>exception guarantee here too</comment>
      <text xml:space="preserve" bytes="1660">{{cpp/container/multiset/title | emplace_hint}}
{{cpp/container/multiset/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the container as close as possible to the position just before {{tt|hint}}. The element is constructed in-place, i.e. no copy or move operations are performed. 

The constructor of the element is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}. 

{{cpp/container/note_iterator_invalidation|multiset|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator to the position before which the new element will be inserted}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before {{tt|hint}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |multiset}}
{{dsc inc | cpp/container/dsc insert |multiset}}
{{dsc end}}

[[de:cpp/container/multiset/emplace hint]]
[[es:cpp/container/multiset/emplace hint]]
[[fr:cpp/container/multiset/emplace hint]]
[[it:cpp/container/multiset/emplace hint]]
[[ja:cpp/container/multiset/emplace hint]]
[[pt:cpp/container/multiset/emplace hint]]
[[ru:cpp/container/multiset/emplace hint]]
[[zh:cpp/container/multiset/emplace hint]]</text>
      <sha1>9sfm9na3fes22ln8d1rbws3tg13kw3q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/empty</title>
    <ns>0</ns>
    <id>1016</id>
    <revision>
      <id>50605</id>
      <parentid>41865</parentid>
      <timestamp>2013-06-01T03:34:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/empty|multiset}}

[[de:cpp/container/multiset/empty]]
[[es:cpp/container/multiset/empty]]
[[fr:cpp/container/multiset/empty]]
[[it:cpp/container/multiset/empty]]
[[ja:cpp/container/multiset/empty]]
[[pt:cpp/container/multiset/empty]]
[[ru:cpp/container/multiset/empty]]
[[zh:cpp/container/multiset/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/end</title>
    <ns>0</ns>
    <id>1017</id>
    <revision>
      <id>50606</id>
      <parentid>41862</parentid>
      <timestamp>2013-06-01T03:34:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/end|multiset}}

[[de:cpp/container/multiset/end]]
[[es:cpp/container/multiset/end]]
[[fr:cpp/container/multiset/end]]
[[it:cpp/container/multiset/end]]
[[ja:cpp/container/multiset/end]]
[[pt:cpp/container/multiset/end]]
[[ru:cpp/container/multiset/end]]
[[zh:cpp/container/multiset/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/equal range</title>
    <ns>0</ns>
    <id>1018</id>
    <revision>
      <id>65091</id>
      <parentid>50607</parentid>
      <timestamp>2013-08-30T15:58:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="392">{{include page|cpp/container/equal_range_ord|multiset}}

[[de:cpp/container/multiset/equal range]]
[[es:cpp/container/multiset/equal range]]
[[fr:cpp/container/multiset/equal range]]
[[it:cpp/container/multiset/equal range]]
[[ja:cpp/container/multiset/equal range]]
[[pt:cpp/container/multiset/equal range]]
[[ru:cpp/container/multiset/equal range]]
[[zh:cpp/container/multiset/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/erase</title>
    <ns>0</ns>
    <id>1019</id>
    <revision>
      <id>50608</id>
      <parentid>41857</parentid>
      <timestamp>2013-06-01T03:34:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="340">{{include page|cpp/container/erase assoc|multiset}}

[[de:cpp/container/multiset/erase]]
[[es:cpp/container/multiset/erase]]
[[fr:cpp/container/multiset/erase]]
[[it:cpp/container/multiset/erase]]
[[ja:cpp/container/multiset/erase]]
[[pt:cpp/container/multiset/erase]]
[[ru:cpp/container/multiset/erase]]
[[zh:cpp/container/multiset/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/extract</title>
    <ns>0</ns>
    <id>15665</id>
    <revision>
      <id>87122</id>
      <timestamp>2016-07-27T14:47:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>templates</comment>
      <text xml:space="preserve" bytes="53">{{include page|cpp/container/extract assoc|multiset}}</text>
      <sha1>mscqkqvvftt213mcxan2xsskk4sf0vt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/find</title>
    <ns>0</ns>
    <id>1020</id>
    <revision>
      <id>50609</id>
      <parentid>41853</parentid>
      <timestamp>2013-06-01T03:34:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/find|multiset}}

[[de:cpp/container/multiset/find]]
[[es:cpp/container/multiset/find]]
[[fr:cpp/container/multiset/find]]
[[it:cpp/container/multiset/find]]
[[ja:cpp/container/multiset/find]]
[[pt:cpp/container/multiset/find]]
[[ru:cpp/container/multiset/find]]
[[zh:cpp/container/multiset/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/get allocator</title>
    <ns>0</ns>
    <id>1021</id>
    <revision>
      <id>50610</id>
      <parentid>41851</parentid>
      <timestamp>2013-06-01T03:34:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/get_allocator|multiset}}

[[de:cpp/container/multiset/get allocator]]
[[es:cpp/container/multiset/get allocator]]
[[fr:cpp/container/multiset/get allocator]]
[[it:cpp/container/multiset/get allocator]]
[[ja:cpp/container/multiset/get allocator]]
[[pt:cpp/container/multiset/get allocator]]
[[ru:cpp/container/multiset/get allocator]]
[[zh:cpp/container/multiset/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/insert</title>
    <ns>0</ns>
    <id>1022</id>
    <revision>
      <id>87109</id>
      <parentid>87108</parentid>
      <timestamp>2016-07-26T21:51:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="3400">{{cpp/container/multiset/title | insert}}
{{cpp/container/multiset/navbar}}
{{dcl begin}}
{{dcl | num=1 |
iterator insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
iterator insert( value_type&amp;&amp; value );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
iterator insert( iterator hint, const value_type&amp; value );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++11 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 | 
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
iterator insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container.

@1-2@ Inserts {{tt|value}}. If the container has elements with equivalent key, inserts at the upper bound of that range.{{mark since c++11}}.

@3-4@ inserts {{tt|value}} in the position as close as possible, just prior{{mark since c++11}}, to {{tt|hint}}. 

@5@ inserts elements from range {{tt|[first, last)}}.

@6@ inserts elements from initializer list {{tt|ilist}}.

{{cpp/container/node_handle_insert_desc|multiset|7|8}}

{{cpp/container/note_iterator_invalidation|multiset|insert}}

===Parameters===
{{par begin}}
{{par | hint | {{rev begin}}{{rev|until=c++11|iterator, used as a suggestion as to where to start the search}}{{rev|since=c++11|iterator to the position before which the new element will be inserted}}{{rev end}}}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-4@ Returns an iterator to the inserted element.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|multiset|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===
@1-2@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

{{rev begin}}
{{rev | until=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''after'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev | since=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev end}}

@5-6@ {{tt|O(N*log(size() + N))}}, where N is the number of elements to insert.

@7@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

@8@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |multiset}}
{{dsc inc | cpp/container/dsc emplace_hint |multiset}}
{{dsc end}}

[[de:cpp/container/multiset/insert]]
[[es:cpp/container/multiset/insert]]
[[fr:cpp/container/multiset/insert]]
[[it:cpp/container/multiset/insert]]
[[ja:cpp/container/multiset/insert]]
[[pt:cpp/container/multiset/insert]]
[[ru:cpp/container/multiset/insert]]
[[zh:cpp/container/multiset/insert]]</text>
      <sha1>hbpm0mtqoc57mn96c1xa80f81x482dm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/key comp</title>
    <ns>0</ns>
    <id>1023</id>
    <revision>
      <id>50611</id>
      <parentid>41847</parentid>
      <timestamp>2013-06-01T03:34:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/key_comp|multiset}}

[[de:cpp/container/multiset/key comp]]
[[es:cpp/container/multiset/key comp]]
[[fr:cpp/container/multiset/key comp]]
[[it:cpp/container/multiset/key comp]]
[[ja:cpp/container/multiset/key comp]]
[[pt:cpp/container/multiset/key comp]]
[[ru:cpp/container/multiset/key comp]]
[[zh:cpp/container/multiset/key comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/lower bound</title>
    <ns>0</ns>
    <id>1024</id>
    <revision>
      <id>50612</id>
      <parentid>41846</parentid>
      <timestamp>2013-06-01T03:34:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/lower_bound|multiset}}

[[de:cpp/container/multiset/lower bound]]
[[es:cpp/container/multiset/lower bound]]
[[fr:cpp/container/multiset/lower bound]]
[[it:cpp/container/multiset/lower bound]]
[[ja:cpp/container/multiset/lower bound]]
[[pt:cpp/container/multiset/lower bound]]
[[ru:cpp/container/multiset/lower bound]]
[[zh:cpp/container/multiset/lower bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/max size</title>
    <ns>0</ns>
    <id>1025</id>
    <revision>
      <id>50613</id>
      <parentid>41845</parentid>
      <timestamp>2013-06-01T03:34:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/max_size|multiset}}

[[de:cpp/container/multiset/max size]]
[[es:cpp/container/multiset/max size]]
[[fr:cpp/container/multiset/max size]]
[[it:cpp/container/multiset/max size]]
[[ja:cpp/container/multiset/max size]]
[[pt:cpp/container/multiset/max size]]
[[ru:cpp/container/multiset/max size]]
[[zh:cpp/container/multiset/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/merge</title>
    <ns>0</ns>
    <id>15656</id>
    <revision>
      <id>87031</id>
      <timestamp>2016-07-21T15:37:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="51">{{include page|cpp/container/merge assoc|multiset}}</text>
      <sha1>py1j7hfyt1hw6qpfszj6j5oc9yjelts</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/multiset</title>
    <ns>0</ns>
    <id>1026</id>
    <revision>
      <id>50614</id>
      <parentid>41840</parentid>
      <timestamp>2013-06-01T03:34:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="368">{{include page|cpp/container/constructor ord|multiset}}

[[de:cpp/container/multiset/multiset]]
[[es:cpp/container/multiset/multiset]]
[[fr:cpp/container/multiset/multiset]]
[[it:cpp/container/multiset/multiset]]
[[ja:cpp/container/multiset/multiset]]
[[pt:cpp/container/multiset/multiset]]
[[ru:cpp/container/multiset/multiset]]
[[zh:cpp/container/multiset/multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/operator cmp</title>
    <ns>0</ns>
    <id>2015</id>
    <revision>
      <id>50615</id>
      <parentid>41832</parentid>
      <timestamp>2013-06-01T03:34:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="397">{{include page|cpp/container/operator_cmp|multiset}}

[[de:cpp/container/multiset/operator cmp]]
[[es:cpp/container/multiset/operator cmp]]
[[fr:cpp/container/multiset/operator cmp]]
[[it:cpp/container/multiset/operator cmp]]
[[ja:cpp/container/multiset/operator cmp]]
[[pt:cpp/container/multiset/operator cmp]]
[[ru:cpp/container/multiset/operator cmp]]
[[zh:cpp/container/multiset/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/operator comp</title>
    <ns>0</ns>
    <id>4208</id>
    <redirect title="cpp/container/multiset/operator cmp" />
    <revision>
      <id>15233</id>
      <timestamp>2011-12-08T01:10:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/multiset/operator comp]] to [[cpp/container/multiset/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[cpp/container/multiset/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/operator=</title>
    <ns>0</ns>
    <id>1027</id>
    <revision>
      <id>92047</id>
      <parentid>41835</parentid>
      <timestamp>2017-04-03T20:54:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="374">{{include page|cpp/container/operator{{=}}|multiset}}

[[de:cpp/container/multiset/operator=]]
[[es:cpp/container/multiset/operator=]]
[[fr:cpp/container/multiset/operator=]]
[[it:cpp/container/multiset/operator=]]
[[ja:cpp/container/multiset/operator=]]
[[pt:cpp/container/multiset/operator=]]
[[ru:cpp/container/multiset/operator=]]
[[zh:cpp/container/multiset/operator=]]</text>
      <sha1>8kzp0gujm26gl149fj4hppuv4lr9ugg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/rbegin</title>
    <ns>0</ns>
    <id>1028</id>
    <revision>
      <id>50616</id>
      <parentid>41829</parentid>
      <timestamp>2013-06-01T03:34:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/rbegin|multiset}}

[[de:cpp/container/multiset/rbegin]]
[[es:cpp/container/multiset/rbegin]]
[[fr:cpp/container/multiset/rbegin]]
[[it:cpp/container/multiset/rbegin]]
[[ja:cpp/container/multiset/rbegin]]
[[pt:cpp/container/multiset/rbegin]]
[[ru:cpp/container/multiset/rbegin]]
[[zh:cpp/container/multiset/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/rend</title>
    <ns>0</ns>
    <id>1029</id>
    <revision>
      <id>50617</id>
      <parentid>41824</parentid>
      <timestamp>2013-06-01T03:34:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/rend|multiset}}

[[de:cpp/container/multiset/rend]]
[[es:cpp/container/multiset/rend]]
[[fr:cpp/container/multiset/rend]]
[[it:cpp/container/multiset/rend]]
[[ja:cpp/container/multiset/rend]]
[[pt:cpp/container/multiset/rend]]
[[ru:cpp/container/multiset/rend]]
[[zh:cpp/container/multiset/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/size</title>
    <ns>0</ns>
    <id>1030</id>
    <revision>
      <id>50618</id>
      <parentid>41821</parentid>
      <timestamp>2013-06-01T03:34:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/size|multiset}}

[[de:cpp/container/multiset/size]]
[[es:cpp/container/multiset/size]]
[[fr:cpp/container/multiset/size]]
[[it:cpp/container/multiset/size]]
[[ja:cpp/container/multiset/size]]
[[pt:cpp/container/multiset/size]]
[[ru:cpp/container/multiset/size]]
[[zh:cpp/container/multiset/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/std swap</title>
    <ns>0</ns>
    <id>3463</id>
    <redirect title="cpp/container/multiset/swap2" />
    <revision>
      <id>13015</id>
      <timestamp>2011-11-03T18:39:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/multiset/std swap]] to [[cpp/container/multiset/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/container/multiset/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/swap</title>
    <ns>0</ns>
    <id>1031</id>
    <revision>
      <id>50619</id>
      <parentid>41820</parentid>
      <timestamp>2013-06-01T03:34:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/swap|multiset}}

[[de:cpp/container/multiset/swap]]
[[es:cpp/container/multiset/swap]]
[[fr:cpp/container/multiset/swap]]
[[it:cpp/container/multiset/swap]]
[[ja:cpp/container/multiset/swap]]
[[pt:cpp/container/multiset/swap]]
[[ru:cpp/container/multiset/swap]]
[[zh:cpp/container/multiset/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/swap2</title>
    <ns>0</ns>
    <id>2001</id>
    <revision>
      <id>50620</id>
      <parentid>41817</parentid>
      <timestamp>2013-06-01T03:34:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/swap2|multiset}}

[[de:cpp/container/multiset/swap2]]
[[es:cpp/container/multiset/swap2]]
[[fr:cpp/container/multiset/swap2]]
[[it:cpp/container/multiset/swap2]]
[[ja:cpp/container/multiset/swap2]]
[[pt:cpp/container/multiset/swap2]]
[[ru:cpp/container/multiset/swap2]]
[[zh:cpp/container/multiset/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/upper bound</title>
    <ns>0</ns>
    <id>1032</id>
    <revision>
      <id>50621</id>
      <parentid>41814</parentid>
      <timestamp>2013-06-01T03:34:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/upper_bound|multiset}}

[[de:cpp/container/multiset/upper bound]]
[[es:cpp/container/multiset/upper bound]]
[[fr:cpp/container/multiset/upper bound]]
[[it:cpp/container/multiset/upper bound]]
[[ja:cpp/container/multiset/upper bound]]
[[pt:cpp/container/multiset/upper bound]]
[[ru:cpp/container/multiset/upper bound]]
[[zh:cpp/container/multiset/upper bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/value comp</title>
    <ns>0</ns>
    <id>1033</id>
    <revision>
      <id>50622</id>
      <parentid>41809</parentid>
      <timestamp>2013-06-01T03:34:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/value_comp|multiset}}

[[de:cpp/container/multiset/value comp]]
[[es:cpp/container/multiset/value comp]]
[[fr:cpp/container/multiset/value comp]]
[[it:cpp/container/multiset/value comp]]
[[ja:cpp/container/multiset/value comp]]
[[pt:cpp/container/multiset/value comp]]
[[ru:cpp/container/multiset/value comp]]
[[zh:cpp/container/multiset/value comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/multiset/~multiset</title>
    <ns>0</ns>
    <id>255</id>
    <revision>
      <id>50623</id>
      <parentid>41804</parentid>
      <timestamp>2013-06-01T03:34:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="371">{{include page|cpp/container/destructor|multiset}}

[[de:cpp/container/multiset/~multiset]]
[[es:cpp/container/multiset/~multiset]]
[[fr:cpp/container/multiset/~multiset]]
[[it:cpp/container/multiset/~multiset]]
[[ja:cpp/container/multiset/~multiset]]
[[pt:cpp/container/multiset/~multiset]]
[[ru:cpp/container/multiset/~multiset]]
[[zh:cpp/container/multiset/~multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/node handle</title>
    <ns>0</ns>
    <id>15660</id>
    <revision>
      <id>92057</id>
      <parentid>92056</parentid>
      <timestamp>2017-04-03T21:01:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>semicolon</comment>
      <text xml:space="preserve" bytes="7902">{{title|Node handle {{mark c++17}}}}
{{cpp/container/navbar}}

{{dcl begin }}
{{dcl | since=c++17 |
template&lt;/*unspecified*/&gt;
class /*node-handle*/;
}} 
{{dcl end}}

Associative containers {{lc|std::set}}, {{lc|std::map}}, {{lc|std::multiset}}, {{lc|std::multimap}}, {{lc|std::unordered_set}}, {{lc|std::unordered_map}}, {{lc|std::unordered_multiset}}, {{lc|std::unordered_multimap}} are node-based data structures, and their nodes can be extracted as an object of unspecified type known as ''node handle''.

Node handle is a move-only type that owns and provides access to the element (the
{{tt|value_type}}) stored in the node, and provides non-const access to the key part of the element (the {{tt|key_type}}) and the mapped part of the element (the {{tt|mapped_type}}). If the node handle is allowed to destruct while holding the node, the node is properly destructed using the appropriate allocator for the container. The node handle contains a copy of the container’s allocator. This is necessary so that the node handle can outlive the container.

The exact type of node handle (shown here as {{c|/*node-handle*/}}) is unspecified, but each container exposes its node handle type as the member {{tt|node_type}}.

Node handles can be used to transfer ownership of an element between two associative containers with the same key, value, and allocator type (ignoring comparison or hash/equality), without invoking any copy/move operations on the container element (this kind of operation is known as &quot;splicing&quot;). Transfer between unique and non-unique containers is also permitted: a node handle from a {{lc|std::map}} can be inserted into an {{lc|std::multimap}}, but not into {{lc|std::unordered_map}} or {{lc|std::set}}.

A node handle may be empty, in which case it holds no element and no allocator. The default-constructed and moved-from node handle is empty. In addition, an empty node handle can be produced by a failed call to container member function {{tt|extract}}.

Pointers and references to an element that are obtained while it is owned by a node handle are invalidated if the element is successfully inserted into a container.

For all map containers ({{lc|std::map}}, {{lc|std::multimap}}, {{lc|std::unordered_map}}, and {{lc|std::unordered_multimap}}) whose {{tt|key_type}} is {{tt|K}} and {{tt|mapped_type}} is {{tt|T}}, the behavior of operations involving node handles are undefined if a user-defined specialization of {{lc|std::pair}} exists for {{c|std::pair&lt;K, T&gt;}} or {{c|std::pair&lt;const K, T&gt;}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | node_handle}}
{{dsc inc | cpp/container/dsc mapped_type | node_handle}}
{{dsc inc | cpp/container/dsc value_type | node_handle}}
{{dsc inc | cpp/container/dsc allocator_type | node_handle}}
{{dsc end}}

===Member functions===

{{member | constructors | 2=
{{dcl begin}}
{{dcl|num=1|
constexpr /*node-handle*/() noexcept;
}}
{{dcl |num=2|
/*node-handle*/(/*node-handle*/&amp;&amp; nh) noexcept;
}}
{{dcl end}}
@1@ The default constructor initializes the node handle to the empty state.
@2@ The move constructor takes ownership of the container element from {{tt|nh}}, move-constructs the member allocator, and leaves {{tt|nh}} in the empty state.

===Parameters===
{{par begin}}
{{par | nh | a node handle with the same type (not necessarily the same container)}}
{{par end}}

===Notes===
Node handles are move-only, the copy constructor is not defined.
}}

{{member | operator{{=}}| 2=
{{dcl begin}}
{{dcl|1=
/*node-handle*/&amp; operator=(/*node-handle*/&amp;&amp; nh);
}}
{{dcl end}}
* If the node handle is not empty, 
:* destroys the {{tt|value_type}} subobject in the container element object managed by this node handle by calling {{tt|std::allocator_traits&lt;allocator_type&gt;::destroy}};
:* deallocates the container element by calling {{tt|allocator_traits&lt;allocator_type&gt;::rebind_traits&lt;container-node-type&gt;::deallocate}};
* Acquires ownership of the container element from {{tt|nh}};
* If node handle was empty (and so did not contain an allocator) or if {{tt|allocator_traits&lt;allocator_type&gt;::propagate_on_container_move_assignment}} is {{tt|true}}, move-assigns the allocator from {{tt|nh}};
* sets {{tt|nh}} to the empty state.

The behavior is undefined if the node is not empty and {{tt|allocator_traits&lt;allocator_type&gt;::propagate_on_container_move_assignment}} is {{tt|false}} and the allocators do not compare equal.

===Parameters===
{{par begin}}
{{par | nh | a node handle with the same type (not necessarily the same container)}}
{{par end}}
===Return===
{{c|*this}}
===Exceptions===
(none)

===Notes===
Node handles are move-only, the copy assignment is not defined.
}}

{{member | destructor | 2=
{{dcl begin}}
{{dcl |
~/*node-handle*/();
}}
{{dcl end}}

* If the node handle is not empty, 
:* destroys the {{tt|value_type}} subobject in the container element object managed by this node handle by calling {{tt|std::allocator_traits&lt;allocator_type&gt;::destroy}};
:* deallocates the container element by calling {{tt|allocator_traits&lt;allocator_type&gt;::rebind_traits&lt;container-node-type&gt;::deallocate}}.

}}

{{member | empty| 2=
{{dcl begin}}
{{dcl |
bool empty() const noexcept;
}}
{{dcl end}}
Returns {{tt|true}} if the node handle is empty, {{tt|false}} otherwise.

}}

{{member | operator bool| 2=
{{dcl begin}}
{{dcl |
explicit operator bool() const noexcept;
}}
{{dcl end}}
Converts to {{tt|false}} if the node handle is empty, {{tt|true}} otherwise.

}}

{{member | get_allocator| 2=
{{dcl begin}}
{{dcl |
allocator_type get_allocator() const;
}}
{{dcl end}}

Returns a copy of the stored allocator (which is a copy of the allocator of the source container). The behavior is undefined if the node handle is empty.

===Exceptions===
(none)
}}

{{member | value | 2=
{{dcl begin}}
{{dcl |notes={{mark|set containers only}}|
value_type&amp; value() const;
}}
{{dcl end}}

Returns a reference to the {{tt|value_type}} subobject in the container element object managed by this node handle. The behavior is undefined if the node handle is empty.

===Exceptions===
(none)
}}

{{member | key | 2=
{{dcl begin}}
{{dcl |notes={{mark|map containers only}}|
key_type&amp; key() const;
}}
{{dcl end}}

Returns a non-const reference to the {{tt|key_type}} member of the {{tt|value_type}} subobject in the container element object managed by this node handle. The behavior is undefined if the node handle is empty.

===Exceptions===
(none)

===Notes===
This function makes it possible to modify the key of a node extracted from a map, and then re-insert it into the map, without ever copying or moving the element.
}}

{{member | mapped | 2=
{{dcl begin}}
{{dcl |notes={{mark|map containers only}}|
mapped_type&amp; mapped() const;
}}
{{dcl end}}

Returns a reference to the {{tt|mapped_type}} member of the {{tt|value_type}} subobject in the container element object managed by this node handle. The behavior is undefined if the node handle is empty.

===Exceptions===
(none)
}}

{{member | swap | 2=
{{dcl begin}}
{{dcl |
void swap(/*node-handle*/&amp; nh) noexcept(/* see below */);
}}
{{dcl end}}

* swaps ownership of container nodes;
* if one node is empty or if both nodes are non-empty and {{tt|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_swap}} is {{tt|true}}, swaps the allocators as well.

The behavior is undefined if both nodes are not empty and {{tt|allocator_traits&lt;allocator_type&gt;::propagate_on_container_swap}} is {{tt|false}} and the allocators do not compare equal.

===Exceptions===
{{noexcept|std::allocator_traits&lt;allocator_type&gt;::propagate_on_container_swap::value {{!!}}
 std::allocator_traits&lt;allocator_type&gt;::is_always_equal::value}}
}}

===Non-member functions===
{{member | swap | 2=
{{dcl begin}}
{{dcl |
friend void swap(/*node-handle*/&amp; x, /*node-handle*/&amp; y) noexcept(x.swap(y));
}}
{{dcl end}}

Effectively executes {{c|x.swap(y)}}.
}}</text>
      <sha1>jqxh6g7yca8g5vhkmuglesg61zcja47</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue</title>
    <ns>0</ns>
    <id>256</id>
    <revision>
      <id>92077</id>
      <parentid>92073</parentid>
      <timestamp>2017-04-04T12:52:09Z</timestamp>
      <contributor>
        <ip>223.3.181.206</ip>
      </contributor>
      <text xml:space="preserve" bytes="4417">{{cpp/title|priority_queue}}
{{cpp/container/priority_queue/navbar}}
{{ddcl | header=queue | 1=
template&lt;
    class T,
    class Container = std::vector&lt;T&gt;,
    class Compare = std::less&lt;typename Container::value_type&gt;
&gt; class priority_queue;
}} 

A priority queue is a container adaptor that provides constant time lookup of the largest (by default) element, at the expense of logarithmic insertion and extraction.

A user-provided {{tt|Compare}} can be supplied to change the ordering, e.g. using {{lc|std::greater&lt;T&gt;}} would cause the smallest element to appear as the {{lc|top()}}.

Working with a {{tt|priority_queue}} is similar to managing a [[cpp/algorithm/make_heap | heap]] in some random access container, with the benefit of not being able to accidentally invalidate the heap.

===Template parameters===
{{par begin}}
{{par | T | The type of the stored elements. {{rev inl|since=c++17|The behavior is undefined if {{tt|T}} is not the same type as {{tt|Container::value_type}}.}} }}
{{par | Container | The type of the underlying container to use to store the elements. The container must satisfy the requirements of {{concept|SequenceContainer}}, and its iterators must satisfy the requirements of {{concept|RandomAccessIterator}}. Additionally, it must provide the following functions with the usual semantics:

* {{tt|front()}}
* {{tt|push_back()}}
* {{tt|pop_back()}}

The standard containers {{lc|std::vector}} and {{lc|std::deque}} satisfy these requirements.}}
{{par | Compare | A {{concept|Compare}} type providing a strict weak ordering.}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc container_type | priority_queue}}
{{dsc | {{tt|value_compare}} {{mark c++17}}{{mark unreviewed dr|LWG|2684}} | {{tt|Compare}} }}
{{dsc inc | cpp/container/dsc value_type | priority_queue}}
{{dsc inc | cpp/container/dsc size_type | priority_queue}}
{{dsc inc | cpp/container/dsc reference | priority_queue}}
{{dsc inc | cpp/container/dsc const_reference | priority_queue}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | priority_queue}}
{{dsc inc | cpp/container/dsc destructor | priority_queue}}
{{dsc inc | cpp/container/dsc operator{{=}} | priority_queue}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc top | priority_queue}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | priority_queue}}
{{dsc inc | cpp/container/dsc size | priority_queue}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc push | priority_queue}}
{{dsc inc | cpp/container/dsc emplace | priority_queue}}
{{dsc inc | cpp/container/dsc pop | priority_queue}}
{{dsc inc | cpp/container/dsc swap | priority_queue}}

{{dsc h1 | Member objects}}
{{dsc inc | cpp/container/dsc c | priority_queue}}
{{dsc prot mem obj | nolink=true | {{dsc small|Compare}} comp | the comparison function object}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc swap2 | priority_queue}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/container/dsc uses_allocator | priority_queue}}
{{dsc end}}

===Example===
{{example
 |
 | code=
#include &lt;functional&gt;
#include &lt;queue&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
 
template&lt;typename T&gt; void print_queue(T&amp; q) {
    while(!q.empty()) {
        std::cout &lt;&lt; q.top() &lt;&lt; &quot; &quot;;
        q.pop();
    }
    std::cout &lt;&lt; '\n';
}
 
int main() {
    std::priority_queue&lt;int&gt; q;

    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q.push(n);
 
    print_queue(q);
 
    std::priority_queue&lt;int, std::vector&lt;int&gt;, std::greater&lt;int&gt; &gt; q2;
    
    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q2.push(n);
 
    print_queue(q2);

    // Using lambda to compare elements.
    auto cmp = [](int left, int right) { return (left ^ 1) &lt; (right ^ 1);};
    std::priority_queue&lt;int, std::vector&lt;int&gt;, decltype(cmp)&gt; q3(cmp);

    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q3.push(n);
 
    print_queue(q3);

}
|output=
9 8 7 6 5 4 3 2 1 0 
0 1 2 3 4 5 6 7 8 9 
8 9 6 7 4 5 2 3 0 1
}}

[[cs:cpp/container/priority queue]]
[[de:cpp/container/priority queue]]
[[es:cpp/container/priority queue]]
[[fr:cpp/container/priority queue]]
[[it:cpp/container/priority queue]]
[[ja:cpp/container/priority queue]]
[[pt:cpp/container/priority queue]]
[[ru:cpp/container/priority queue]]
[[tr:cpp/container/priority queue]]
[[zh:cpp/container/priority queue]]</text>
      <sha1>3i7lo669xrelf8g8qxsu9tx5ct4qqc5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/emplace</title>
    <ns>0</ns>
    <id>257</id>
    <revision>
      <id>50624</id>
      <parentid>41798</parentid>
      <timestamp>2013-06-01T03:34:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="409">{{include page|cpp/container/emplace ad|priority_queue}}

[[de:cpp/container/priority queue/emplace]]
[[es:cpp/container/priority queue/emplace]]
[[fr:cpp/container/priority queue/emplace]]
[[it:cpp/container/priority queue/emplace]]
[[ja:cpp/container/priority queue/emplace]]
[[pt:cpp/container/priority queue/emplace]]
[[ru:cpp/container/priority queue/emplace]]
[[zh:cpp/container/priority queue/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/empty</title>
    <ns>0</ns>
    <id>258</id>
    <revision>
      <id>50625</id>
      <parentid>41795</parentid>
      <timestamp>2013-06-01T03:34:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="391">{{include page|cpp/container/empty ad|priority_queue}}

[[de:cpp/container/priority queue/empty]]
[[es:cpp/container/priority queue/empty]]
[[fr:cpp/container/priority queue/empty]]
[[it:cpp/container/priority queue/empty]]
[[ja:cpp/container/priority queue/empty]]
[[pt:cpp/container/priority queue/empty]]
[[ru:cpp/container/priority queue/empty]]
[[zh:cpp/container/priority queue/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/operator=</title>
    <ns>0</ns>
    <id>259</id>
    <revision>
      <id>63202</id>
      <parentid>41792</parentid>
      <timestamp>2013-07-05T18:13:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>include page</comment>
      <text xml:space="preserve" bytes="431">{{include page|cpp/container/operator{{=}} ad|priority_queue}}

[[de:cpp/container/priority queue/operator=]]
[[es:cpp/container/priority queue/operator=]]
[[fr:cpp/container/priority queue/operator=]]
[[it:cpp/container/priority queue/operator=]]
[[ja:cpp/container/priority queue/operator=]]
[[pt:cpp/container/priority queue/operator=]]
[[ru:cpp/container/priority queue/operator=]]
[[zh:cpp/container/priority queue/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/pop</title>
    <ns>0</ns>
    <id>260</id>
    <revision>
      <id>50626</id>
      <parentid>41790</parentid>
      <timestamp>2013-06-01T03:34:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/pop|priority_queue}}

[[de:cpp/container/priority queue/pop]]
[[es:cpp/container/priority queue/pop]]
[[fr:cpp/container/priority queue/pop]]
[[it:cpp/container/priority queue/pop]]
[[ja:cpp/container/priority queue/pop]]
[[pt:cpp/container/priority queue/pop]]
[[ru:cpp/container/priority queue/pop]]
[[zh:cpp/container/priority queue/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/priority queue</title>
    <ns>0</ns>
    <id>261</id>
    <revision>
      <id>83654</id>
      <parentid>83653</parentid>
      <timestamp>2016-03-06T05:20:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="8319">{{cpp/container/priority_queue/title | priority_queue}}
{{cpp/container/priority_queue/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 | 1=
explicit priority_queue( const Compare&amp; compare = Compare(),
                         const Container&amp; cont = Container() );
}}
{{dcl | since=c++11 | 1=
priority_queue( const Compare&amp; compare, const Container&amp; cont );
}}
{{dcl rev end}}
{{dcl | num=2 | since=c++11 | 1=
explicit priority_queue( const Compare&amp; compare = Compare(),
                         Container&amp;&amp; cont = Container() );
}}
{{dcl | num=3 |1=
priority_queue( const priority_queue&amp; other );
}}
{{dcl | num=4 | since=c++11 |1=
priority_queue( priority_queue&amp;&amp; other );
}}
{{dcl | num=5 | since=c++11 |1=
template&lt; class Alloc &gt; 
explicit priority_queue( const Alloc&amp; alloc );
}}
{{dcl | num=6 | since=c++11 |1=
template&lt; class Alloc &gt; 
priority_queue( const Compare&amp; compare, const Alloc&amp; alloc );
}}
{{dcl | num=7 | since=c++11 |1=
template&lt; class Alloc &gt; 
priority_queue( const Compare&amp; compare, const Container&amp; cont,
                const Alloc&amp; alloc );
}}
{{dcl | num=8 | since=c++11 |1=
template&lt; class Alloc &gt; 
priority_queue( const Compare&amp; compare, Container&amp;&amp; cont,
                const Alloc&amp; alloc );
}}
{{dcl | num=9 | since=c++11 |1=
template&lt; class Alloc &gt; 
priority_queue( const priority_queue&amp; other, const Alloc&amp; alloc );
}}
{{dcl | num=10 | since=c++11 |1=
template&lt; class Alloc &gt; 
priority_queue( priority_queue&amp;&amp; other, const Alloc&amp; alloc );
}}
{{dcl | num=11 | since=c++11 |1=
template&lt; class InputIt &gt;
priority_queue( InputIt first, InputIt last,
                const Compare&amp; compare, const Container&amp; cont );
}}
{{dcl | num=12 | since=c++11 |1=
template&lt; class InputIt &gt;
priority_queue( InputIt first, InputIt last,
                const Compare&amp; compare = Compare(), 
                Container&amp;&amp; cont = Container() );
}}
{{dcl end}}

Constructs new underlying container of the container adaptor from a variety of data sources.

@1@ Copy-constructs the underlying container {{tt|c}} with the contents of {{tt|cont}}. Copy-constructs the comparison functor {{tt|comp}} with the contents of {{tt|compare}}. Calls {{c|std::make_heap(c.begin(), c.end(), comp)}}. {{rev inl|until=c++11| This is also the default constructor.}}

@2@ Move-constructs the underlying container {{tt|c}} with {{c|std::move(cont)}}. Copy-constructs the comparison functor {{tt|comp}} with the contents of {{tt|compare}}. Calls {{c|std::make_heap(c.begin(), c.end(), comp)}}. {{rev inl|since=c++11 | This is also the default constructor.}}

@3@ Copy constructor. The adaptor is copy-constructed with the contents of {{c|other.c}}. The comparison functor is constructed with {{c|std::move(other.comp)}}. {{mark implicit}}

@4@ Move constructor. The adaptor is constructed with {{c|std::move(other.c)}}.The comparison functor is constructed with {{c|std::move(other.comp)}}. {{mark implicit}}

@5-10@ The following constructors are only defined if {{c|1=std::uses_allocator&lt;container_type, Alloc&gt;::value == true}}, that is, if the underlying container is an allocator-aware container (true for all standard library containers).

:@5@ Constructs the underlying container using {{tt|alloc}} as allocator. Effectively calls {{c|c(alloc)}}. {{tt|comp}} is value-initialized.

:@6@ Constructs the underlying container using {{tt|alloc}} as allocator. Effectively calls {{c|c(alloc)}}. Copy-constructs {{tt|comp}} from {{tt|compare}}.

:@7@ Constructs the underlying container with the contents of {{tt|cont}} and using {{tt|alloc}} as allocator, as if by {{c|c(cont, alloc)}}. Copy-constructs {{tt|comp}} from {{tt|compare}}. Then calls {{c|std::make_heap(c.begin(), c.end(), comp)}}. 

:@8@ Constructs the underlying container with the contents of {{tt|cont}} using move semantics while using {{tt|alloc}} as allocator, as if by {{c|c(std::move(cont), alloc)}}. Copy-constructs {{tt|comp}} from {{tt|compare}}. Then calls {{c|std::make_heap(c.begin(), c.end(), comp)}}. 

:@9@Constructs the adaptor with the contents of {{tt|other.c}} and using {{tt|alloc}} as allocator. Effectively calls {{c|c(other.c, alloc)}}. Copy-constructs {{tt|comp}} from {{tt|other.comp}}.

:@10@ Constructs the adaptor with the contents of {{tt|other}} using move semantics while utilising {{tt|alloc}} as allocator. Effectively calls {{c|c(std::move(other.c), alloc)}}. Move-constructs {{tt|comp}} from {{tt|other.comp}}.

@11@ Copy-constructs {{tt|c}} from {{tt|cont}} and {{tt|comp}} from {{tt|compare}}. Then calls {{c|c.insert(c.end(), first, last);}}, and then calls {{c|std::make_heap(c.begin(), c.end(), comp);}}.

@12@ Move-constructs {{tt|c}} from {{tt|std::move(cont)}} and {{tt|comp}} from {{tt|std::move(compare)}}. Then calls {{c|c.insert(c.end(), first, last);}}, and then calls {{c|std::make_heap(c.begin(), c.end(), comp);}}.

===Parameters===
{{par begin}}
{{par | alloc | allocator to use for all memory allocations of the underlying container}}
{{par | other | another container adaptor to be used as source to initialize the underlying container}}
{{par | cont | container to be used as source to initialize the underlying container}}
{{par | compare | the comparison function object to initialize the underlying comparison functor}}
{{par | first, last | range of elements to initialize with}}
{{par hreq}}
{{par req concept | Alloc | Allocator}}
{{par req concept | Container | Container | notes=The constructors (5-10) are only defined if {{tt|Container}} meets the requirements of {{concept|AllocatorAwareContainer}}}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Complexity===
@1,3@ {{math|O(N)}} comparisons, where {{math|N}} is {{c|cont.size()}}.

@@ Additionally, {{math|O(N)}} calls to the constructor of {{tt|value_type}}, where {{math|N}} is {{c|cont.size()}}.

@2@ {{math|O(N)}} comparisons, where {{math|N}} is {{c|cont.size()}}.

@4-6@ Constant.

@7@ {{math|O(N)}} comparisons, where {{math|N}} is {{c|cont.size()}}.

@@ Additionally, {{math|O(N)}} calls to the constructor of {{tt|value_type}}, where {{math|N}} is {{c|cont.size()}}.

@8@ {{math|O(N)}} comparisons, where {{math|N}} is {{c|cont.size()}}.

@9@ Linear in size of {{tt|other}}.

@10@ Constant.

@11@ {{math|O(N)}} comparisons, where {{math|N}} is {{c|cont.size() + std::distance(first, last)}}.

@@ Additionally, {{math|O(N)}} calls to the constructor of {{tt|value_type}}, where {{math|N}} is {{c|cont.size()}}.

@12@ {{math|O(N)}} comparisons, where {{math|N}} is {{c|cont.size() + std::distance(first, last)}}.

===Example===
{{example
 | code=
#include &lt;queue&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;functional&gt;

int main()
{
    std::priority_queue&lt;int&gt; c1;
    c1.push(5);
    std::cout &lt;&lt; c1.size() &lt;&lt; '\n';

    std::priority_queue&lt;int&gt; c2(c1);
    std::cout &lt;&lt; c2.size() &lt;&lt; '\n';
 
    std::vector&lt;int&gt; vec={3, 1, 4, 1, 5};
    std::priority_queue&lt;int&gt; c3(std::less&lt;int&gt;(), vec);
    std::cout &lt;&lt; c3.size() &lt;&lt; '\n';
}
 | output=
1
1
5
}}

===Example With Custom Comparator===
{{example 
 | code=
#include &lt;iostream&gt;
#include &lt;queue&gt;
#include &lt;vector&gt;
#include &lt;utility&gt;

using my_pair_t = std::pair&lt;size_t,bool&gt;;

using my_container_t = std::vector&lt;my_pair_t&gt;;

int main()
{
    auto my_comp =
        [](const my_pair_t&amp; e1, const my_pair_t&amp; e2) 
        { return e1.first &gt; e2.first; };
    std::priority_queue&lt;my_pair_t,
                        my_container_t,
                        decltype(my_comp)&gt; queue(my_comp);
    queue.push(std::make_pair(5, true));
    queue.push(std::make_pair(3, false));
    queue.push(std::make_pair(7, true));
    std::cout &lt;&lt; std::boolalpha;
    while(!queue.empty()) 
    {
        const auto&amp; p = queue.top();
        std::cout &lt;&lt; p.first &lt;&lt; &quot; &quot; &lt;&lt; p.second &lt;&lt; &quot;\n&quot;;
        queue.pop();
    }
}
 | output=
3 false
5 true
7 true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator{{=}} | priority_queue}}
{{dsc end}}

[[de:cpp/container/priority queue/priority queue]]
[[es:cpp/container/priority queue/priority queue]]
[[fr:cpp/container/priority queue/priority queue]]
[[it:cpp/container/priority queue/priority queue]]
[[ja:cpp/container/priority queue/priority queue]]
[[pt:cpp/container/priority queue/priority queue]]
[[ru:cpp/container/priority queue/priority queue]]
[[zh:cpp/container/priority queue/priority queue]]</text>
      <sha1>6plm3k3f00ezhnen13em720u3fifxnw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/push</title>
    <ns>0</ns>
    <id>262</id>
    <revision>
      <id>50627</id>
      <parentid>41783</parentid>
      <timestamp>2013-06-01T03:34:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/push|priority_queue}}

[[de:cpp/container/priority queue/push]]
[[es:cpp/container/priority queue/push]]
[[fr:cpp/container/priority queue/push]]
[[it:cpp/container/priority queue/push]]
[[ja:cpp/container/priority queue/push]]
[[pt:cpp/container/priority queue/push]]
[[ru:cpp/container/priority queue/push]]
[[zh:cpp/container/priority queue/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/size</title>
    <ns>0</ns>
    <id>263</id>
    <revision>
      <id>50628</id>
      <parentid>41781</parentid>
      <timestamp>2013-06-01T03:34:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="382">{{include page|cpp/container/size ad|priority_queue}}

[[de:cpp/container/priority queue/size]]
[[es:cpp/container/priority queue/size]]
[[fr:cpp/container/priority queue/size]]
[[it:cpp/container/priority queue/size]]
[[ja:cpp/container/priority queue/size]]
[[pt:cpp/container/priority queue/size]]
[[ru:cpp/container/priority queue/size]]
[[zh:cpp/container/priority queue/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/std swap</title>
    <ns>0</ns>
    <id>3464</id>
    <redirect title="cpp/container/priority queue/swap2" />
    <revision>
      <id>13017</id>
      <timestamp>2011-11-03T18:40:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/priority queue/std swap]] to [[cpp/container/priority queue/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[cpp/container/priority queue/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/swap</title>
    <ns>0</ns>
    <id>264</id>
    <revision>
      <id>50629</id>
      <parentid>41778</parentid>
      <timestamp>2013-06-01T03:34:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="382">{{include page|cpp/container/swap ad|priority_queue}}

[[de:cpp/container/priority queue/swap]]
[[es:cpp/container/priority queue/swap]]
[[fr:cpp/container/priority queue/swap]]
[[it:cpp/container/priority queue/swap]]
[[ja:cpp/container/priority queue/swap]]
[[pt:cpp/container/priority queue/swap]]
[[ru:cpp/container/priority queue/swap]]
[[zh:cpp/container/priority queue/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/swap2</title>
    <ns>0</ns>
    <id>3016</id>
    <revision>
      <id>50630</id>
      <parentid>41776</parentid>
      <timestamp>2013-06-01T03:34:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/swap2|priority_queue}}

[[de:cpp/container/priority queue/swap2]]
[[es:cpp/container/priority queue/swap2]]
[[fr:cpp/container/priority queue/swap2]]
[[it:cpp/container/priority queue/swap2]]
[[ja:cpp/container/priority queue/swap2]]
[[pt:cpp/container/priority queue/swap2]]
[[ru:cpp/container/priority queue/swap2]]
[[zh:cpp/container/priority queue/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/top</title>
    <ns>0</ns>
    <id>265</id>
    <revision>
      <id>60936</id>
      <parentid>57293</parentid>
      <timestamp>2013-06-01T12:08:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use lc</comment>
      <text xml:space="preserve" bytes="919">{{cpp/container/priority_queue/title | top}}
{{cpp/container/priority_queue/navbar}}
{{ddcl |
const_reference top() const;
}}

Returns reference to the top element in the priority queue. This element will be removed on a call to {{lc|pop()}}. If default comparison function is used, the returned element is also the greatest among the elements in the queue. 

===Parameters===
(none)

===Return value===

Reference to the top element as if obtained by a call to {{c|c.front()}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc pop|priority_queue}}
{{dsc end}}

[[de:cpp/container/priority queue/top]]
[[es:cpp/container/priority queue/top]]
[[fr:cpp/container/priority queue/top]]
[[it:cpp/container/priority queue/top]]
[[ja:cpp/container/priority queue/top]]
[[pt:cpp/container/priority queue/top]]
[[ru:cpp/container/priority queue/top]]
[[zh:cpp/container/priority queue/top]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/uses allocator</title>
    <ns>0</ns>
    <id>3402</id>
    <revision>
      <id>50631</id>
      <parentid>41770</parentid>
      <timestamp>2013-06-01T03:34:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="469">{{include page|cpp/container/uses_allocator|priority_queue}}

[[de:cpp/container/priority queue/uses allocator]]
[[es:cpp/container/priority queue/uses allocator]]
[[fr:cpp/container/priority queue/uses allocator]]
[[it:cpp/container/priority queue/uses allocator]]
[[ja:cpp/container/priority queue/uses allocator]]
[[pt:cpp/container/priority queue/uses allocator]]
[[ru:cpp/container/priority queue/uses allocator]]
[[zh:cpp/container/priority queue/uses allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/priority queue/~priority queue</title>
    <ns>0</ns>
    <id>266</id>
    <revision>
      <id>50632</id>
      <parentid>41767</parentid>
      <timestamp>2013-06-01T03:34:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="473">{{include page|cpp/container/destructor|priority_queue}}

[[de:cpp/container/priority queue/~priority queue]]
[[es:cpp/container/priority queue/~priority queue]]
[[fr:cpp/container/priority queue/~priority queue]]
[[it:cpp/container/priority queue/~priority queue]]
[[ja:cpp/container/priority queue/~priority queue]]
[[pt:cpp/container/priority queue/~priority queue]]
[[ru:cpp/container/priority queue/~priority queue]]
[[zh:cpp/container/priority queue/~priority queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue</title>
    <ns>0</ns>
    <id>267</id>
    <revision>
      <id>90489</id>
      <parentid>90486</parentid>
      <timestamp>2017-02-25T21:16:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>rvv</comment>
      <text xml:space="preserve" bytes="2766">{{cpp/title|queue}}
{{cpp/container/queue/navbar}}
{{ddcl | header=queue |
template&lt;
    class T,
    class Container {{=}} std::deque&lt;T&gt;
&gt; class queue;
}} 

The {{tt|std::queue}} class is a container adapter that gives the programmer the functionality of a queue - specifically, a FIFO (first-in, first-out) data structure. 

The class template acts as a wrapper to the underlying container - only a specific set of functions is provided. The queue pushes the elements on the back of the underlying container and pops them from the front.

===Template parameters===
{{par begin}}
{{par | T | The type of the stored elements. {{rev inl|since=c++17|The behavior is undefined if {{tt|T}} is not the same type as {{tt|Container::value_type}}.}} }}
{{par | Container | The type of the underlying container to use to store the elements. The container must satisfy the requirements of {{concept|SequenceContainer}}. Additionally, it must provide the following functions with the usual semantics:

* {{tt|back()}}
* {{tt|front()}}
* {{tt|push_back()}}
* {{tt|pop_front()}}

The standard containers {{lc|std::deque}} and {{lc|std::list}} satisfy these requirements. 
}}{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc container_type | queue}}
{{dsc inc | cpp/container/dsc value_type | queue}}
{{dsc inc | cpp/container/dsc size_type | queue}}
{{dsc inc | cpp/container/dsc reference | queue}}
{{dsc inc | cpp/container/dsc const_reference | queue}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | queue}}
{{dsc inc | cpp/container/dsc destructor | queue}}
{{dsc inc | cpp/container/dsc operator{{=}} | queue}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc front | queue}}
{{dsc inc | cpp/container/dsc back | queue}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | queue}}
{{dsc inc | cpp/container/dsc size | queue}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc push | queue}}
{{dsc inc | cpp/container/dsc emplace | queue}}
{{dsc inc | cpp/container/dsc pop | queue}}
{{dsc inc | cpp/container/dsc swap | queue}}

{{dsc h1 | Member objects}}
{{dsc inc | cpp/container/dsc c | queue}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | queue}}
{{dsc inc | cpp/container/dsc swap2 | queue}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/container/dsc uses_allocator | queue}}
{{dsc end}}

[[de:cpp/container/queue]]
[[es:cpp/container/queue]]
[[fr:cpp/container/queue]]
[[it:cpp/container/queue]]
[[ja:cpp/container/queue]]
[[pl:cpp/container/queue]]
[[pt:cpp/container/queue]]
[[ru:cpp/container/queue]]
[[tr:cpp/container/queue]]
[[zh:cpp/container/queue]]</text>
      <sha1>101krwokm1if1o40ryn93zpachnmoo3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/back</title>
    <ns>0</ns>
    <id>268</id>
    <revision>
      <id>69407</id>
      <parentid>57297</parentid>
      <timestamp>2014-04-07T11:41:59Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="814">{{cpp/container/queue/title | back}}
{{cpp/container/queue/navbar}}
{{dcl begin}}
{{dcl |
reference back();
}}
{{dcl |
const_reference back() const;
}}
{{dcl end}}

Returns reference to the last element in the queue. This is the most recently pushed element. Effectively calls {{c|c.back()}}.

===Parameters===
(none)

===Return value===

reference to the last element

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/dsc front|queue}}
{{dsc inc | cpp/container/dsc push|queue}}
{{dsc end}}

[[de:cpp/container/queue/back]]
[[es:cpp/container/queue/back]]
[[fr:cpp/container/queue/back]]
[[it:cpp/container/queue/back]]
[[ja:cpp/container/queue/back]]
[[pl:cpp/container/queue/back]]
[[pt:cpp/container/queue/back]]
[[ru:cpp/container/queue/back]]
[[zh:cpp/container/queue/back]]</text>
      <sha1>0rdwtn2fztd0qj19eydv22u1uz9u6ds</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/emplace</title>
    <ns>0</ns>
    <id>269</id>
    <revision>
      <id>50633</id>
      <parentid>41759</parentid>
      <timestamp>2013-06-01T03:34:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="328">{{include page|cpp/container/emplace ad|queue}}

[[de:cpp/container/queue/emplace]]
[[es:cpp/container/queue/emplace]]
[[fr:cpp/container/queue/emplace]]
[[it:cpp/container/queue/emplace]]
[[ja:cpp/container/queue/emplace]]
[[pt:cpp/container/queue/emplace]]
[[ru:cpp/container/queue/emplace]]
[[zh:cpp/container/queue/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/empty</title>
    <ns>0</ns>
    <id>270</id>
    <revision>
      <id>50634</id>
      <parentid>41757</parentid>
      <timestamp>2013-06-01T03:34:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/empty ad|queue}}

[[de:cpp/container/queue/empty]]
[[es:cpp/container/queue/empty]]
[[fr:cpp/container/queue/empty]]
[[it:cpp/container/queue/empty]]
[[ja:cpp/container/queue/empty]]
[[pl:cpp/container/queue/empty]]
[[pt:cpp/container/queue/empty]]
[[ru:cpp/container/queue/empty]]
[[zh:cpp/container/queue/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/front</title>
    <ns>0</ns>
    <id>271</id>
    <revision>
      <id>60968</id>
      <parentid>60967</parentid>
      <timestamp>2013-06-03T11:20:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="864">{{cpp/container/queue/title | front}}
{{cpp/container/queue/navbar}}
{{dcl begin}}
{{dcl |
reference front();
}}
{{dcl |
const_reference front() const;
}}
{{dcl end}}

Returns reference to the first element in the queue. This element will be the first element to be removed on a call to {{lc|pop()}}. Effectively calls {{c|c.front()}}.

===Parameters===
(none)

===Return value===
Reference to the first element.

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc back|queue}}
{{dsc inc | cpp/container/dsc pop|queue}}
{{dsc end}}

[[de:cpp/container/queue/front]]
[[es:cpp/container/queue/front]]
[[fr:cpp/container/queue/front]]
[[it:cpp/container/queue/front]]
[[ja:cpp/container/queue/front]]
[[pl:cpp/container/queue/front]]
[[pt:cpp/container/queue/front]]
[[ru:cpp/container/queue/front]]
[[zh:cpp/container/queue/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/operator cmp</title>
    <ns>0</ns>
    <id>9079</id>
    <revision>
      <id>50635</id>
      <parentid>41749</parentid>
      <timestamp>2013-06-01T03:34:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="378">{{include page|cpp/container_adaptor/operator_cmp|queue}}

[[de:cpp/container/queue/operator cmp]]
[[es:cpp/container/queue/operator cmp]]
[[fr:cpp/container/queue/operator cmp]]
[[it:cpp/container/queue/operator cmp]]
[[ja:cpp/container/queue/operator cmp]]
[[pt:cpp/container/queue/operator cmp]]
[[ru:cpp/container/queue/operator cmp]]
[[zh:cpp/container/queue/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/operator=</title>
    <ns>0</ns>
    <id>272</id>
    <revision>
      <id>92053</id>
      <parentid>41753</parentid>
      <timestamp>2017-04-03T20:54:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="350">{{include page|cpp/container/operator{{=}} ad|queue}}

[[de:cpp/container/queue/operator=]]
[[es:cpp/container/queue/operator=]]
[[fr:cpp/container/queue/operator=]]
[[it:cpp/container/queue/operator=]]
[[ja:cpp/container/queue/operator=]]
[[pt:cpp/container/queue/operator=]]
[[ru:cpp/container/queue/operator=]]
[[zh:cpp/container/queue/operator=]]</text>
      <sha1>a9836uom0hy7aokh2m7ctwf737y82ru</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/pop</title>
    <ns>0</ns>
    <id>273</id>
    <revision>
      <id>50636</id>
      <parentid>41746</parentid>
      <timestamp>2013-06-01T03:34:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="320">{{include page|cpp/container/pop|queue}}

[[de:cpp/container/queue/pop]]
[[es:cpp/container/queue/pop]]
[[fr:cpp/container/queue/pop]]
[[it:cpp/container/queue/pop]]
[[ja:cpp/container/queue/pop]]
[[pl:cpp/container/queue/pop]]
[[pt:cpp/container/queue/pop]]
[[ru:cpp/container/queue/pop]]
[[zh:cpp/container/queue/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/push</title>
    <ns>0</ns>
    <id>274</id>
    <revision>
      <id>50637</id>
      <parentid>41743</parentid>
      <timestamp>2013-06-01T03:35:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/container/push|queue}}

[[de:cpp/container/queue/push]]
[[es:cpp/container/queue/push]]
[[fr:cpp/container/queue/push]]
[[it:cpp/container/queue/push]]
[[ja:cpp/container/queue/push]]
[[pl:cpp/container/queue/push]]
[[pt:cpp/container/queue/push]]
[[ru:cpp/container/queue/push]]
[[zh:cpp/container/queue/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/queue</title>
    <ns>0</ns>
    <id>275</id>
    <revision>
      <id>50638</id>
      <parentid>41740</parentid>
      <timestamp>2013-06-01T03:35:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="349">{{include page|cpp/container/constructor ad|queue}}

[[de:cpp/container/queue/queue]]
[[es:cpp/container/queue/queue]]
[[fr:cpp/container/queue/queue]]
[[it:cpp/container/queue/queue]]
[[ja:cpp/container/queue/queue]]
[[pl:cpp/container/queue/queue]]
[[pt:cpp/container/queue/queue]]
[[ru:cpp/container/queue/queue]]
[[zh:cpp/container/queue/queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/size</title>
    <ns>0</ns>
    <id>276</id>
    <revision>
      <id>50639</id>
      <parentid>41738</parentid>
      <timestamp>2013-06-01T03:35:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="333">{{include page|cpp/container/size ad|queue}}

[[de:cpp/container/queue/size]]
[[es:cpp/container/queue/size]]
[[fr:cpp/container/queue/size]]
[[it:cpp/container/queue/size]]
[[ja:cpp/container/queue/size]]
[[pl:cpp/container/queue/size]]
[[pt:cpp/container/queue/size]]
[[ru:cpp/container/queue/size]]
[[zh:cpp/container/queue/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/std swap</title>
    <ns>0</ns>
    <id>3466</id>
    <redirect title="cpp/container/queue/swap2" />
    <revision>
      <id>13021</id>
      <timestamp>2011-11-03T18:41:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/queue/std swap]] to [[cpp/container/queue/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/container/queue/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/swap</title>
    <ns>0</ns>
    <id>277</id>
    <revision>
      <id>50640</id>
      <parentid>41736</parentid>
      <timestamp>2013-06-01T03:35:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="301">{{include page|cpp/container/swap ad|queue}}

[[de:cpp/container/queue/swap]]
[[es:cpp/container/queue/swap]]
[[fr:cpp/container/queue/swap]]
[[it:cpp/container/queue/swap]]
[[ja:cpp/container/queue/swap]]
[[pt:cpp/container/queue/swap]]
[[ru:cpp/container/queue/swap]]
[[zh:cpp/container/queue/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/swap2</title>
    <ns>0</ns>
    <id>3015</id>
    <revision>
      <id>50641</id>
      <parentid>41735</parentid>
      <timestamp>2013-06-01T03:35:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/swap2|queue}}

[[de:cpp/container/queue/swap2]]
[[es:cpp/container/queue/swap2]]
[[fr:cpp/container/queue/swap2]]
[[it:cpp/container/queue/swap2]]
[[ja:cpp/container/queue/swap2]]
[[pt:cpp/container/queue/swap2]]
[[ru:cpp/container/queue/swap2]]
[[zh:cpp/container/queue/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/uses allocator</title>
    <ns>0</ns>
    <id>3401</id>
    <revision>
      <id>50642</id>
      <parentid>41733</parentid>
      <timestamp>2013-06-01T03:35:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/uses_allocator|queue}}

[[de:cpp/container/queue/uses allocator]]
[[es:cpp/container/queue/uses allocator]]
[[fr:cpp/container/queue/uses allocator]]
[[it:cpp/container/queue/uses allocator]]
[[ja:cpp/container/queue/uses allocator]]
[[pt:cpp/container/queue/uses allocator]]
[[ru:cpp/container/queue/uses allocator]]
[[zh:cpp/container/queue/uses allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/queue/~queue</title>
    <ns>0</ns>
    <id>278</id>
    <revision>
      <id>50643</id>
      <parentid>41730</parentid>
      <timestamp>2013-06-01T03:35:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="320">{{include page|cpp/container/destructor|queue}}

[[de:cpp/container/queue/~queue]]
[[es:cpp/container/queue/~queue]]
[[fr:cpp/container/queue/~queue]]
[[it:cpp/container/queue/~queue]]
[[ja:cpp/container/queue/~queue]]
[[pt:cpp/container/queue/~queue]]
[[ru:cpp/container/queue/~queue]]
[[zh:cpp/container/queue/~queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set</title>
    <ns>0</ns>
    <id>279</id>
    <revision>
      <id>89159</id>
      <parentid>89133</parentid>
      <timestamp>2017-01-05T13:37:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>the intro sentence on eqivalence was self-contradicting. &quot;uniqueness is determined using equivalence ... considered equivalent (not unique) if&quot;. Dropping the &quot;not unique&quot;</comment>
      <text xml:space="preserve" bytes="3983">{{cpp/title|set}}
{{cpp/container/set/navbar}}
{{dcl begin}}
{{dcl header|set}}
{{dcl |num=1|
template&lt;
    class Key,
    class Compare {{=}} std::less&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;Key&gt;
&gt; class set;
}} 
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key, class Compare = std::less&lt;Key&gt;&gt;
    using set = std::set&lt;Key, Compare, std::pmr::polymorphic_allocator&lt;Key&gt;&gt;;
}
}}
{{dcl end}}

{{tt|std::set}} is an associative container that contains a sorted set of unique objects of type {{tt|Key}}. Sorting is done using the key comparison function {{concept|Compare}}. Search, removal, and insertion operations have logarithmic complexity. Sets are usually implemented as [[enwiki:Red–black_tree|red-black trees]].

Everywhere the standard library uses the {{concept|Compare}} concept, uniqueness is determined by using the equivalence relation.  In imprecise terms, two objects {{tt|a}} and {{tt|b}} are considered equivalent if neither compares less than the other: {{tt|!comp(a, b) &amp;&amp; !comp(b, a)}}.

{{tt|std::set}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|AssociativeContainer}} and {{concept|ReversibleContainer}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | set}}
{{dsc inc | cpp/container/dsc value_type | set}}
{{dsc inc | cpp/container/dsc size_type | set}}
{{dsc inc | cpp/container/dsc difference_type | set}}
{{dsc inc | cpp/container/dsc key_compare | set}}
{{dsc inc | cpp/container/dsc value_compare2 | set}}
{{dsc inc | cpp/container/dsc allocator_type | set}}
{{dsc inc | cpp/container/dsc reference | set}}
{{dsc inc | cpp/container/dsc const_reference | set}}
{{dsc inc | cpp/container/dsc pointer | set}}
{{dsc inc | cpp/container/dsc const_pointer | set}}
{{dsc inc | cpp/container/dsc iterator | set}}
{{dsc inc | cpp/container/dsc const_iterator | set}}
{{dsc inc | cpp/container/dsc reverse_iterator | set}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | set}}
{{dsc inc | cpp/container/dsc node_type | set}}
{{dsc inc | cpp/container/dsc insert_return_type | set}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | set}}
{{dsc inc | cpp/container/dsc destructor | set}}
{{dsc inc | cpp/container/dsc operator{{=}} | set}}
{{dsc inc | cpp/container/dsc get_allocator | set}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | set}}
{{dsc inc | cpp/container/dsc end | set}}
{{dsc inc | cpp/container/dsc rbegin | set}}
{{dsc inc | cpp/container/dsc rend | set}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | set}}
{{dsc inc | cpp/container/dsc size | set}}
{{dsc inc | cpp/container/dsc max_size | set}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | set}}
{{dsc inc | cpp/container/dsc insert | set}}
{{dsc inc | cpp/container/dsc emplace | set}}
{{dsc inc | cpp/container/dsc emplace_hint | set}}
{{dsc inc | cpp/container/dsc erase | set}}
{{dsc inc | cpp/container/dsc swap | set}}
{{dsc inc | cpp/container/dsc extract | set}}
{{dsc inc | cpp/container/dsc merge | set}}

{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc count | set}}
{{dsc inc | cpp/container/dsc find | set}}
{{dsc inc | cpp/container/dsc equal_range | set}}
{{dsc inc | cpp/container/dsc lower_bound | set}}
{{dsc inc | cpp/container/dsc upper_bound | set}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc key_comp | set}}
{{dsc inc | cpp/container/dsc value_comp | set}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | set}}
{{dsc inc | cpp/container/dsc swap2 | set}}
{{dsc end}}

===Notes===
{{cpp/container/assoc_note}}

[[cs:cpp/container/set]]
[[de:cpp/container/set]]
[[es:cpp/container/set]]
[[fr:cpp/container/set]]
[[it:cpp/container/set]]
[[ja:cpp/container/set]]
[[pl:cpp/container/set]]
[[pt:cpp/container/set]]
[[ru:cpp/container/set]]
[[zh:cpp/container/set]]</text>
      <sha1>1lo5cwgn3yctrgw3j9t3b70eis39jnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/begin</title>
    <ns>0</ns>
    <id>280</id>
    <revision>
      <id>50644</id>
      <parentid>41724</parentid>
      <timestamp>2013-06-01T03:35:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/begin|set}}

[[de:cpp/container/set/begin]]
[[es:cpp/container/set/begin]]
[[fr:cpp/container/set/begin]]
[[it:cpp/container/set/begin]]
[[ja:cpp/container/set/begin]]
[[pt:cpp/container/set/begin]]
[[ru:cpp/container/set/begin]]
[[zh:cpp/container/set/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/clear</title>
    <ns>0</ns>
    <id>281</id>
    <revision>
      <id>50645</id>
      <parentid>41721</parentid>
      <timestamp>2013-06-01T03:35:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/clear|set}}

[[de:cpp/container/set/clear]]
[[es:cpp/container/set/clear]]
[[fr:cpp/container/set/clear]]
[[it:cpp/container/set/clear]]
[[ja:cpp/container/set/clear]]
[[pt:cpp/container/set/clear]]
[[ru:cpp/container/set/clear]]
[[zh:cpp/container/set/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/count</title>
    <ns>0</ns>
    <id>282</id>
    <revision>
      <id>65131</id>
      <parentid>50646</parentid>
      <timestamp>2013-08-30T16:36:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="293">{{include page|cpp/container/count_ord|set}}

[[de:cpp/container/set/count]]
[[es:cpp/container/set/count]]
[[fr:cpp/container/set/count]]
[[it:cpp/container/set/count]]
[[ja:cpp/container/set/count]]
[[pt:cpp/container/set/count]]
[[ru:cpp/container/set/count]]
[[zh:cpp/container/set/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/crend</title>
    <ns>0</ns>
    <id>10175</id>
    <redirect title="cpp/container/set/rend" />
    <revision>
      <id>48508</id>
      <timestamp>2013-05-30T14:28:26Z</timestamp>
      <contributor>
        <ip>91.115.8.62</ip>
      </contributor>
      <comment>Redirected page to [[cpp/container/set/rend]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/container/set/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/emplace</title>
    <ns>0</ns>
    <id>283</id>
    <revision>
      <id>50647</id>
      <parentid>41716</parentid>
      <timestamp>2013-06-01T03:35:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="313">{{include page|cpp/container/emplace assoc|set}}

[[de:cpp/container/set/emplace]]
[[es:cpp/container/set/emplace]]
[[fr:cpp/container/set/emplace]]
[[it:cpp/container/set/emplace]]
[[ja:cpp/container/set/emplace]]
[[pt:cpp/container/set/emplace]]
[[ru:cpp/container/set/emplace]]
[[zh:cpp/container/set/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/emplace hint</title>
    <ns>0</ns>
    <id>284</id>
    <revision>
      <id>85276</id>
      <parentid>77824</parentid>
      <timestamp>2016-04-13T12:48:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>exception guarantee here too</comment>
      <text xml:space="preserve" bytes="3781">{{cpp/container/set/title | emplace_hint}}
{{cpp/container/set/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element into the container as close as possible to the position just before {{tt|hint}}. The element is constructed in-place, i.e. no copy or move operations are performed. 

The constructor of the element is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|set|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator to the position before which the new element will be inserted}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

If the insertion failed because the element already exists, returns an iterator to the already existing element with the equivalent key.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Logarithmic in the size of the container in general, but amortized constant if the new element is inserted just before {{tt|hint}}.

===Example===
{{example
|
| code=
#include &lt;set&gt;
#include &lt;chrono&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;functional&gt;

const int nof_operations = 100500;

int set_emplace() {
  std::set&lt;int&gt; set;
  for(int i = 0; i &lt; nof_operations; ++i) {
    set.emplace(i);
  }
  return set.size();
}

int set_emplace_hint() {
  std::set&lt;int&gt; set;
  auto it = set.begin();
  for(int i = 0; i &lt; nof_operations; ++i) {
    set.emplace_hint(it, i);
    it = set.end();
  }
  return set.size();
}

int set_emplace_hint_wrong() {
  std::set&lt;int&gt; set;
  auto it = set.begin();
  for(int i = nof_operations; i &gt; 0; --i) {
    set.emplace_hint(it, i);
    it = set.end();
  }
  return set.size();
}

int set_emplace_hint_corrected() {
  std::set&lt;int&gt; set;
  auto it = set.begin();
  for(int i = nof_operations; i &gt; 0; --i) {
    set.emplace_hint(it, i);
    it = set.begin();
  }
  return set.size();
}

int set_emplace_hint_closest() {
  std::set&lt;int&gt; set;
  auto it = set.begin();
  for(int i = 0; i &lt; nof_operations; ++i) {
    it = set.emplace_hint(it, i);
  }
  return set.size();
}

void timeit(std::function&lt;int()&gt; set_test, std::string what = &quot;&quot;) {
  auto start = std::chrono::system_clock::now();
  int setsize = set_test();
  auto stop = std::chrono::system_clock::now();
  std::chrono::duration&lt;double, std::milli&gt; time = stop - start;
  if (what.size() &gt; 0 &amp;&amp; setsize &gt; 0) {
    std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(2)
              &lt;&lt; time.count() &lt;&lt; &quot;  ms for &quot; &lt;&lt; what &lt;&lt; '\n';
  }
}

int main() {
   timeit(set_emplace); // stack warmup
   timeit(set_emplace, &quot;plain emplace&quot;);
   timeit(set_emplace_hint, &quot;emplace with correct hint&quot;);
   timeit(set_emplace_hint_wrong, &quot;emplace with wrong hint&quot;);
   timeit(set_emplace_hint_corrected, &quot;corrected emplace&quot;);
   timeit(set_emplace_hint_closest, &quot;emplace using returned iterator&quot;);
}
|p=true
| output=
18.96  ms for plain emplace
7.95  ms for emplace with correct hint
19.39  ms for emplace with wrong hint
8.39  ms for corrected emplace
7.90  ms for emplace using returned iterator
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |set}}
{{dsc inc | cpp/container/dsc insert |set}}
{{dsc end}}

[[de:cpp/container/set/emplace hint]]
[[es:cpp/container/set/emplace hint]]
[[fr:cpp/container/set/emplace hint]]
[[it:cpp/container/set/emplace hint]]
[[ja:cpp/container/set/emplace hint]]
[[pt:cpp/container/set/emplace hint]]
[[ru:cpp/container/set/emplace hint]]
[[zh:cpp/container/set/emplace hint]]</text>
      <sha1>s2g54kju4ltkximyfxttlyzsqavpifn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/empty</title>
    <ns>0</ns>
    <id>285</id>
    <revision>
      <id>50649</id>
      <parentid>41710</parentid>
      <timestamp>2013-06-01T03:35:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/empty|set}}

[[de:cpp/container/set/empty]]
[[es:cpp/container/set/empty]]
[[fr:cpp/container/set/empty]]
[[it:cpp/container/set/empty]]
[[ja:cpp/container/set/empty]]
[[pt:cpp/container/set/empty]]
[[ru:cpp/container/set/empty]]
[[zh:cpp/container/set/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/end</title>
    <ns>0</ns>
    <id>286</id>
    <revision>
      <id>50650</id>
      <parentid>41708</parentid>
      <timestamp>2013-06-01T03:35:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="271">{{include page|cpp/container/end|set}}

[[de:cpp/container/set/end]]
[[es:cpp/container/set/end]]
[[fr:cpp/container/set/end]]
[[it:cpp/container/set/end]]
[[ja:cpp/container/set/end]]
[[pt:cpp/container/set/end]]
[[ru:cpp/container/set/end]]
[[zh:cpp/container/set/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/equal range</title>
    <ns>0</ns>
    <id>287</id>
    <revision>
      <id>65099</id>
      <parentid>65098</parentid>
      <timestamp>2013-08-30T15:58:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>whoops</comment>
      <text xml:space="preserve" bytes="347">{{include page|cpp/container/equal_range_ord|set}}

[[de:cpp/container/set/equal range]]
[[es:cpp/container/set/equal range]]
[[fr:cpp/container/set/equal range]]
[[it:cpp/container/set/equal range]]
[[ja:cpp/container/set/equal range]]
[[pt:cpp/container/set/equal range]]
[[ru:cpp/container/set/equal range]]
[[zh:cpp/container/set/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/erase</title>
    <ns>0</ns>
    <id>288</id>
    <revision>
      <id>50652</id>
      <parentid>41703</parentid>
      <timestamp>2013-06-01T03:35:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="295">{{include page|cpp/container/erase assoc|set}}

[[de:cpp/container/set/erase]]
[[es:cpp/container/set/erase]]
[[fr:cpp/container/set/erase]]
[[it:cpp/container/set/erase]]
[[ja:cpp/container/set/erase]]
[[pt:cpp/container/set/erase]]
[[ru:cpp/container/set/erase]]
[[zh:cpp/container/set/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/extract</title>
    <ns>0</ns>
    <id>15664</id>
    <revision>
      <id>87121</id>
      <timestamp>2016-07-27T14:46:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>templated</comment>
      <text xml:space="preserve" bytes="48">{{include page|cpp/container/extract assoc|set}}</text>
      <sha1>etvu0wsdo7dex79w4rx0gmsm5f8hi31</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/find</title>
    <ns>0</ns>
    <id>289</id>
    <revision>
      <id>50653</id>
      <parentid>41701</parentid>
      <timestamp>2013-06-01T03:35:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/find|set}}

[[de:cpp/container/set/find]]
[[es:cpp/container/set/find]]
[[fr:cpp/container/set/find]]
[[it:cpp/container/set/find]]
[[ja:cpp/container/set/find]]
[[pt:cpp/container/set/find]]
[[ru:cpp/container/set/find]]
[[zh:cpp/container/set/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/get allocator</title>
    <ns>0</ns>
    <id>290</id>
    <revision>
      <id>50654</id>
      <parentid>41700</parentid>
      <timestamp>2013-06-01T03:35:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/get_allocator|set}}

[[de:cpp/container/set/get allocator]]
[[es:cpp/container/set/get allocator]]
[[fr:cpp/container/set/get allocator]]
[[it:cpp/container/set/get allocator]]
[[ja:cpp/container/set/get allocator]]
[[pt:cpp/container/set/get allocator]]
[[ru:cpp/container/set/get allocator]]
[[zh:cpp/container/set/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/insert</title>
    <ns>0</ns>
    <id>291</id>
    <revision>
      <id>91173</id>
      <parentid>87748</parentid>
      <timestamp>2017-03-24T13:54:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg2844 note</comment>
      <text xml:space="preserve" bytes="4528">{{cpp/container/set/title | insert}}
{{cpp/container/set/navbar}}
{{dcl begin}}
{{dcl | num=1 | 
std::pair&lt;iterator,bool&gt; insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
std::pair&lt;iterator,bool&gt; insert( value_type&amp;&amp; value );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
iterator insert( iterator hint, const value_type&amp; value );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++11 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 |
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
insert_return_type insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container, if the container doesn't already contain an element with an equivalent key.

@1-2@ inserts {{tt|value}}. 

@3-4@ inserts {{tt|value}} in the position as close as possible, just prior{{mark since c++11}}, to {{tt|hint}}. 

@5@ Inserts elements from range {{tt|[first, last)}}. {{cpp/container/lwg2488-note}}

@6@ Inserts elements from initializer list {{tt|ilist}}. {{cpp/container/lwg2488-note}}

{{cpp/container/node_handle_insert_desc|set|7|8}}

{{cpp/container/note_iterator_invalidation|set|insert}}
===Parameters===
{{par begin}}
{{par | hint | {{rev begin}}{{rev|until=c++11|iterator, used as a suggestion as to where to start the search}}{{rev|since=c++11|iterator to the position before which the new element will be inserted}}{{rev end}}}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-2@ Returns a pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a {{c|bool}} value set to {{c|true}} if the insertion took place.

@3-4@ Returns an iterator to the inserted element, or to the element that prevented the insertion.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|set|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-8}}

===Complexity===
@1-2@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

{{rev begin}}
{{rev | until=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''after'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev | since=c++11 |
@3-4@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.
}}
{{rev end}}

@5-6@ {{tt|O(N*log(size() + N))}}, where N is the number of elements to insert.

@7@ Logarithmic in the size of the container, {{tt|O(log(size()))}}.

@8@ Amortized constant if the insertion happens in the position just ''before'' the hint, logarithmic in the size of the container otherwise.

===Notes===
{{cpp/container/hinted_insert_note}}

The overloads {{v|5,6}} are often implemented &lt;!--examined GNU libstdc++ 4.8 and LLVM libc++ --&gt; as a loop that calls the overload (3) with {{lc|end()}} as the hint; they are optimized for appending a sorted sequence (such as another set) whose smallest element is greater than the last element in {{c|*this}}

===Example===
{{example
|
| code=
#include &lt;set&gt;
#include &lt;cassert&gt;
#include &lt;iostream&gt;

int main()
{
  std::set&lt;int&gt; set;

  auto result_1 = set.insert(3);
  assert(result_1.first != set.end()); // it's a valid iterator
  assert(*result_1.first == 3);
  if (result_1.second)
    std::cout &lt;&lt; &quot;insert done\n&quot;;

  auto result_2 = set.insert(3);
  assert(result_2.first == result_1.first); // same iterator
  assert(*result_2.first == 3);
  if (!result_2.second)
    std::cout &lt;&lt; &quot;no insertion\n&quot;;
}
| output=
insert done
no insertion
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |set}}
{{dsc inc | cpp/container/dsc emplace_hint |set}}
{{dsc end}}

[[de:cpp/container/set/insert]]
[[es:cpp/container/set/insert]]
[[fr:cpp/container/set/insert]]
[[it:cpp/container/set/insert]]
[[ja:cpp/container/set/insert]]
[[pt:cpp/container/set/insert]]
[[ru:cpp/container/set/insert]]
[[zh:cpp/container/set/insert]]</text>
      <sha1>p1alxegc008gn9c1x4gdjl5wd6gm1rj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/key comp</title>
    <ns>0</ns>
    <id>292</id>
    <revision>
      <id>50655</id>
      <parentid>41695</parentid>
      <timestamp>2013-06-01T03:35:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/key_comp|set}}

[[de:cpp/container/set/key comp]]
[[es:cpp/container/set/key comp]]
[[fr:cpp/container/set/key comp]]
[[it:cpp/container/set/key comp]]
[[ja:cpp/container/set/key comp]]
[[pt:cpp/container/set/key comp]]
[[ru:cpp/container/set/key comp]]
[[zh:cpp/container/set/key comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/lower bound</title>
    <ns>0</ns>
    <id>293</id>
    <revision>
      <id>50656</id>
      <parentid>41692</parentid>
      <timestamp>2013-06-01T03:35:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/lower_bound|set}}

[[de:cpp/container/set/lower bound]]
[[es:cpp/container/set/lower bound]]
[[fr:cpp/container/set/lower bound]]
[[it:cpp/container/set/lower bound]]
[[ja:cpp/container/set/lower bound]]
[[pt:cpp/container/set/lower bound]]
[[ru:cpp/container/set/lower bound]]
[[zh:cpp/container/set/lower bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/max size</title>
    <ns>0</ns>
    <id>294</id>
    <revision>
      <id>50657</id>
      <parentid>41689</parentid>
      <timestamp>2013-06-01T03:35:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/max_size|set}}

[[de:cpp/container/set/max size]]
[[es:cpp/container/set/max size]]
[[fr:cpp/container/set/max size]]
[[it:cpp/container/set/max size]]
[[ja:cpp/container/set/max size]]
[[pt:cpp/container/set/max size]]
[[ru:cpp/container/set/max size]]
[[zh:cpp/container/set/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/merge</title>
    <ns>0</ns>
    <id>15653</id>
    <revision>
      <id>87028</id>
      <timestamp>2016-07-21T15:36:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="46">{{include page|cpp/container/merge assoc|set}}</text>
      <sha1>3riv3wnci3qerikjgqse19tgxpw05z0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/operator cmp</title>
    <ns>0</ns>
    <id>2016</id>
    <revision>
      <id>50658</id>
      <parentid>41683</parentid>
      <timestamp>2013-06-01T03:35:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="352">{{include page|cpp/container/operator_cmp|set}}

[[de:cpp/container/set/operator cmp]]
[[es:cpp/container/set/operator cmp]]
[[fr:cpp/container/set/operator cmp]]
[[it:cpp/container/set/operator cmp]]
[[ja:cpp/container/set/operator cmp]]
[[pt:cpp/container/set/operator cmp]]
[[ru:cpp/container/set/operator cmp]]
[[zh:cpp/container/set/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/operator comp</title>
    <ns>0</ns>
    <id>4207</id>
    <redirect title="cpp/container/set/operator cmp" />
    <revision>
      <id>15231</id>
      <timestamp>2011-12-08T01:09:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/set/operator comp]] to [[cpp/container/set/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/container/set/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/operator=</title>
    <ns>0</ns>
    <id>295</id>
    <revision>
      <id>92045</id>
      <parentid>41686</parentid>
      <timestamp>2017-04-03T20:54:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="329">{{include page|cpp/container/operator{{=}}|set}}

[[de:cpp/container/set/operator=]]
[[es:cpp/container/set/operator=]]
[[fr:cpp/container/set/operator=]]
[[it:cpp/container/set/operator=]]
[[ja:cpp/container/set/operator=]]
[[pt:cpp/container/set/operator=]]
[[ru:cpp/container/set/operator=]]
[[zh:cpp/container/set/operator=]]</text>
      <sha1>a33gurjkiubrmefpgakv1f79e3oi2dk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/rbegin</title>
    <ns>0</ns>
    <id>296</id>
    <revision>
      <id>50659</id>
      <parentid>41678</parentid>
      <timestamp>2013-06-01T03:35:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/rbegin|set}}

[[de:cpp/container/set/rbegin]]
[[es:cpp/container/set/rbegin]]
[[fr:cpp/container/set/rbegin]]
[[it:cpp/container/set/rbegin]]
[[ja:cpp/container/set/rbegin]]
[[pt:cpp/container/set/rbegin]]
[[ru:cpp/container/set/rbegin]]
[[zh:cpp/container/set/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/rend</title>
    <ns>0</ns>
    <id>297</id>
    <revision>
      <id>50660</id>
      <parentid>41676</parentid>
      <timestamp>2013-06-01T03:35:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/rend|set}}

[[de:cpp/container/set/rend]]
[[es:cpp/container/set/rend]]
[[fr:cpp/container/set/rend]]
[[it:cpp/container/set/rend]]
[[ja:cpp/container/set/rend]]
[[pt:cpp/container/set/rend]]
[[ru:cpp/container/set/rend]]
[[zh:cpp/container/set/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/set</title>
    <ns>0</ns>
    <id>298</id>
    <revision>
      <id>71728</id>
      <parentid>50661</parentid>
      <timestamp>2014-06-22T07:40:45Z</timestamp>
      <contributor>
        <username>DizzySkin</username>
        <id>3171</id>
      </contributor>
      <comment>Replaced old example with an example that was more bespoke to set, previously used map.</comment>
      <text xml:space="preserve" bytes="286">{{include page|cpp/container/constructor ordset|set}}

[[de:cpp/container/set/set]]
[[es:cpp/container/set/set]]
[[fr:cpp/container/set/set]]
[[it:cpp/container/set/set]]
[[ja:cpp/container/set/set]]
[[pt:cpp/container/set/set]]
[[ru:cpp/container/set/set]]
[[zh:cpp/container/set/set]]</text>
      <sha1>73u8mypw9luizyk5hcmeqeu1ftymdqu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/size</title>
    <ns>0</ns>
    <id>299</id>
    <revision>
      <id>50662</id>
      <parentid>41670</parentid>
      <timestamp>2013-06-01T03:35:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/size|set}}

[[de:cpp/container/set/size]]
[[es:cpp/container/set/size]]
[[fr:cpp/container/set/size]]
[[it:cpp/container/set/size]]
[[ja:cpp/container/set/size]]
[[pt:cpp/container/set/size]]
[[ru:cpp/container/set/size]]
[[zh:cpp/container/set/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/std swap</title>
    <ns>0</ns>
    <id>3465</id>
    <redirect title="cpp/container/set/swap2" />
    <revision>
      <id>13019</id>
      <timestamp>2011-11-03T18:40:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/set/std swap]] to [[cpp/container/set/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/container/set/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/swap</title>
    <ns>0</ns>
    <id>300</id>
    <revision>
      <id>50663</id>
      <parentid>41667</parentid>
      <timestamp>2013-06-01T03:35:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="280">{{include page|cpp/container/swap|set}}

[[de:cpp/container/set/swap]]
[[es:cpp/container/set/swap]]
[[fr:cpp/container/set/swap]]
[[it:cpp/container/set/swap]]
[[ja:cpp/container/set/swap]]
[[pt:cpp/container/set/swap]]
[[ru:cpp/container/set/swap]]
[[zh:cpp/container/set/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/swap2</title>
    <ns>0</ns>
    <id>2000</id>
    <revision>
      <id>50664</id>
      <parentid>41664</parentid>
      <timestamp>2013-06-01T03:35:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/swap2|set}}

[[de:cpp/container/set/swap2]]
[[es:cpp/container/set/swap2]]
[[fr:cpp/container/set/swap2]]
[[it:cpp/container/set/swap2]]
[[ja:cpp/container/set/swap2]]
[[pt:cpp/container/set/swap2]]
[[ru:cpp/container/set/swap2]]
[[zh:cpp/container/set/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/upper bound</title>
    <ns>0</ns>
    <id>301</id>
    <revision>
      <id>50665</id>
      <parentid>41662</parentid>
      <timestamp>2013-06-01T03:35:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/upper_bound|set}}

[[de:cpp/container/set/upper bound]]
[[es:cpp/container/set/upper bound]]
[[fr:cpp/container/set/upper bound]]
[[it:cpp/container/set/upper bound]]
[[ja:cpp/container/set/upper bound]]
[[pt:cpp/container/set/upper bound]]
[[ru:cpp/container/set/upper bound]]
[[zh:cpp/container/set/upper bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/value comp</title>
    <ns>0</ns>
    <id>302</id>
    <revision>
      <id>50666</id>
      <parentid>41658</parentid>
      <timestamp>2013-06-01T03:35:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/value_comp|set}}

[[de:cpp/container/set/value comp]]
[[es:cpp/container/set/value comp]]
[[fr:cpp/container/set/value comp]]
[[it:cpp/container/set/value comp]]
[[ja:cpp/container/set/value comp]]
[[pt:cpp/container/set/value comp]]
[[ru:cpp/container/set/value comp]]
[[zh:cpp/container/set/value comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/set/~set</title>
    <ns>0</ns>
    <id>303</id>
    <revision>
      <id>50667</id>
      <parentid>41656</parentid>
      <timestamp>2013-06-01T03:35:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="286">{{include page|cpp/container/destructor|set}}

[[de:cpp/container/set/~set]]
[[es:cpp/container/set/~set]]
[[fr:cpp/container/set/~set]]
[[it:cpp/container/set/~set]]
[[ja:cpp/container/set/~set]]
[[pt:cpp/container/set/~set]]
[[ru:cpp/container/set/~set]]
[[zh:cpp/container/set/~set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack</title>
    <ns>0</ns>
    <id>304</id>
    <revision>
      <id>83656</id>
      <parentid>57304</parentid>
      <timestamp>2016-03-06T05:45:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Template parameters */ LWG2566</comment>
      <text xml:space="preserve" bytes="2759">{{cpp/title|stack}}
{{cpp/container/stack/navbar}}
{{ddcl | header=stack |
template&lt;
    class T,
    class Container {{=}} std::deque&lt;T&gt;
&gt; class stack;
}} 

The {{tt|std::stack}} class is a container adapter that gives the programmer the functionality of a stack - specifically, a FILO (first-in, last-out) data structure.

The class template acts as a wrapper to the underlying container - only a specific set of functions is provided. The stack pushes and pops the element from the back of the underlying container, known as the top of the stack.

===Template parameters===
{{par begin}}
{{par | T | The type of the stored elements. {{rev inl|since=c++17|The behavior is undefined if {{tt|T}} is not the same type as {{tt|Container::value_type}}.}} }}
{{par | Container | The type of the underlying container to use to store the elements. The container must satisfy the requirements of {{concept|SequenceContainer}}. Additionally, it must provide the following functions with the usual semantics:

* {{tt|back()}}
* {{tt|push_back()}}
* {{tt|pop_back()}}

The standard containers {{lc|std::vector}}, {{lc|std::deque}} and {{lc|std::list}} satisfy these requirements. 
}}{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc container_type | stack}}
{{dsc inc | cpp/container/dsc value_type | stack}}
{{dsc inc | cpp/container/dsc size_type | stack}}
{{dsc inc | cpp/container/dsc reference | stack}}
{{dsc inc | cpp/container/dsc const_reference | stack}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | stack}}
{{dsc inc | cpp/container/dsc destructor | stack}}
{{dsc inc | cpp/container/dsc operator{{=}} | stack}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc top | stack}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | stack}}
{{dsc inc | cpp/container/dsc size | stack}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc push | stack}}
{{dsc inc | cpp/container/dsc emplace | stack}}
{{dsc inc | cpp/container/dsc pop | stack}}
{{dsc inc | cpp/container/dsc swap | stack}}

{{dsc h1 | Member objects}}
{{dsc inc | cpp/container/dsc c | stack}}

{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | stack}}
{{dsc inc | cpp/container/dsc swap2 | stack}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/container/dsc uses_allocator | stack}}
{{dsc end}}

[[cs:cpp/container/stack]]
[[de:cpp/container/stack]]
[[es:cpp/container/stack]]
[[fr:cpp/container/stack]]
[[it:cpp/container/stack]]
[[ja:cpp/container/stack]]
[[pl:cpp/container/stack]]
[[pt:cpp/container/stack]]
[[ru:cpp/container/stack]]
[[tr:cpp/container/stack]]
[[zh:cpp/container/stack]]</text>
      <sha1>gkdsoujbciobt069nsytsvxlfumnzpp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/emplace</title>
    <ns>0</ns>
    <id>305</id>
    <revision>
      <id>50668</id>
      <parentid>41652</parentid>
      <timestamp>2013-06-01T03:35:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="328">{{include page|cpp/container/emplace ad|stack}}

[[de:cpp/container/stack/emplace]]
[[es:cpp/container/stack/emplace]]
[[fr:cpp/container/stack/emplace]]
[[it:cpp/container/stack/emplace]]
[[ja:cpp/container/stack/emplace]]
[[pt:cpp/container/stack/emplace]]
[[ru:cpp/container/stack/emplace]]
[[zh:cpp/container/stack/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/empty</title>
    <ns>0</ns>
    <id>306</id>
    <revision>
      <id>50669</id>
      <parentid>41650</parentid>
      <timestamp>2013-06-01T03:35:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="376">{{include page|cpp/container/empty ad|stack}}

[[cs:cpp/container/stack/empty]]
[[de:cpp/container/stack/empty]]
[[es:cpp/container/stack/empty]]
[[fr:cpp/container/stack/empty]]
[[it:cpp/container/stack/empty]]
[[ja:cpp/container/stack/empty]]
[[pl:cpp/container/stack/empty]]
[[pt:cpp/container/stack/empty]]
[[ru:cpp/container/stack/empty]]
[[zh:cpp/container/stack/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/operator cmp</title>
    <ns>0</ns>
    <id>9080</id>
    <revision>
      <id>50670</id>
      <parentid>41646</parentid>
      <timestamp>2013-06-01T03:36:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="378">{{include page|cpp/container_adaptor/operator_cmp|stack}}

[[de:cpp/container/stack/operator cmp]]
[[es:cpp/container/stack/operator cmp]]
[[fr:cpp/container/stack/operator cmp]]
[[it:cpp/container/stack/operator cmp]]
[[ja:cpp/container/stack/operator cmp]]
[[pt:cpp/container/stack/operator cmp]]
[[ru:cpp/container/stack/operator cmp]]
[[zh:cpp/container/stack/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/operator=</title>
    <ns>0</ns>
    <id>307</id>
    <revision>
      <id>92052</id>
      <parentid>41648</parentid>
      <timestamp>2017-04-03T20:54:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="350">{{include page|cpp/container/operator{{=}} ad|stack}}

[[de:cpp/container/stack/operator=]]
[[es:cpp/container/stack/operator=]]
[[fr:cpp/container/stack/operator=]]
[[it:cpp/container/stack/operator=]]
[[ja:cpp/container/stack/operator=]]
[[pt:cpp/container/stack/operator=]]
[[ru:cpp/container/stack/operator=]]
[[zh:cpp/container/stack/operator=]]</text>
      <sha1>m7nhawe2khcdrrmp5t9z46jddj8ee28</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/pop</title>
    <ns>0</ns>
    <id>308</id>
    <revision>
      <id>50671</id>
      <parentid>41644</parentid>
      <timestamp>2013-06-01T03:36:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="351">{{include page|cpp/container/pop|stack}}

[[de:cpp/container/stack/pop]]
[[es:cpp/container/stack/pop]]
[[fr:cpp/container/stack/pop]]
[[it:cpp/container/stack/pop]]
[[ja:cpp/container/stack/pop]]
[[pl:cpp/container/stack/pop]]
[[pt:cpp/container/stack/pop]]
[[ru:cpp/container/stack/pop]]
[[tr:cpp/container/stack/pop]]
[[zh:cpp/container/stack/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/push</title>
    <ns>0</ns>
    <id>309</id>
    <revision>
      <id>50672</id>
      <parentid>41642</parentid>
      <timestamp>2013-06-01T03:36:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/container/push|stack}}

[[de:cpp/container/stack/push]]
[[es:cpp/container/stack/push]]
[[fr:cpp/container/stack/push]]
[[it:cpp/container/stack/push]]
[[ja:cpp/container/stack/push]]
[[pl:cpp/container/stack/push]]
[[pt:cpp/container/stack/push]]
[[ru:cpp/container/stack/push]]
[[zh:cpp/container/stack/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/size</title>
    <ns>0</ns>
    <id>310</id>
    <revision>
      <id>50673</id>
      <parentid>41639</parentid>
      <timestamp>2013-06-01T03:36:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="333">{{include page|cpp/container/size ad|stack}}

[[de:cpp/container/stack/size]]
[[es:cpp/container/stack/size]]
[[fr:cpp/container/stack/size]]
[[it:cpp/container/stack/size]]
[[ja:cpp/container/stack/size]]
[[pl:cpp/container/stack/size]]
[[pt:cpp/container/stack/size]]
[[ru:cpp/container/stack/size]]
[[zh:cpp/container/stack/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/stack</title>
    <ns>0</ns>
    <id>311</id>
    <revision>
      <id>50674</id>
      <parentid>41637</parentid>
      <timestamp>2013-06-01T03:36:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="349">{{include page|cpp/container/constructor ad|stack}}

[[de:cpp/container/stack/stack]]
[[es:cpp/container/stack/stack]]
[[fr:cpp/container/stack/stack]]
[[it:cpp/container/stack/stack]]
[[ja:cpp/container/stack/stack]]
[[pl:cpp/container/stack/stack]]
[[pt:cpp/container/stack/stack]]
[[ru:cpp/container/stack/stack]]
[[zh:cpp/container/stack/stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/std swap</title>
    <ns>0</ns>
    <id>3467</id>
    <redirect title="cpp/container/stack/swap2" />
    <revision>
      <id>13023</id>
      <timestamp>2011-11-03T18:41:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/stack/std swap]] to [[cpp/container/stack/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/container/stack/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/swap</title>
    <ns>0</ns>
    <id>312</id>
    <revision>
      <id>50675</id>
      <parentid>41635</parentid>
      <timestamp>2013-06-01T03:36:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="301">{{include page|cpp/container/swap ad|stack}}

[[de:cpp/container/stack/swap]]
[[es:cpp/container/stack/swap]]
[[fr:cpp/container/stack/swap]]
[[it:cpp/container/stack/swap]]
[[ja:cpp/container/stack/swap]]
[[pt:cpp/container/stack/swap]]
[[ru:cpp/container/stack/swap]]
[[zh:cpp/container/stack/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/swap2</title>
    <ns>0</ns>
    <id>3014</id>
    <revision>
      <id>50676</id>
      <parentid>41633</parentid>
      <timestamp>2013-06-01T03:36:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/swap2|stack}}

[[de:cpp/container/stack/swap2]]
[[es:cpp/container/stack/swap2]]
[[fr:cpp/container/stack/swap2]]
[[it:cpp/container/stack/swap2]]
[[ja:cpp/container/stack/swap2]]
[[pt:cpp/container/stack/swap2]]
[[ru:cpp/container/stack/swap2]]
[[zh:cpp/container/stack/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/top</title>
    <ns>0</ns>
    <id>313</id>
    <revision>
      <id>60970</id>
      <parentid>60969</parentid>
      <timestamp>2013-06-03T11:21:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>reorder sections</comment>
      <text xml:space="preserve" bytes="1497">{{cpp/container/stack/title | top}}
{{cpp/container/stack/navbar}}
{{dcl begin}}
{{dcl |
reference top();
}}
{{dcl |
const_reference top() const;
}}
{{dcl end}}

Returns reference to the top element in the stack. This is the most recently pushed element. This element will be removed on a call to {{lc|pop()}}. Effectively calls {{c|c.back()}}.

===Parameters===
(none)

===Return value===
Reference to the last element

===Complexity===
Constant

===Example===
{{example
| code=
#include &lt;stack&gt;
#include &lt;iostream&gt;

int main()
{
    std::stack&lt;int&gt;   s;

    s.push( 2 );
    s.push( 6 );
    s.push( 51 );

    std::cout &lt;&lt; s.size() &lt;&lt; &quot; elements on stack\n&quot;;
    std::cout &lt;&lt; &quot;Top element: &quot;
	      &lt;&lt; s.top()         // Leaves element on stack
	      &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; s.size() &lt;&lt; &quot; elements on stack\n&quot;;
    s.pop();
    std::cout &lt;&lt; s.size() &lt;&lt; &quot; elements on stack\n&quot;;
    std::cout &lt;&lt; &quot;Top element: &quot; &lt;&lt; s.top() &lt;&lt; &quot;\n&quot;;
  
    return 0;
}
| output=
3 elements on stack
Top element: 51
3 elements on stack
2 elements on stack
Top element: 6
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc push|stack}}
{{dsc inc | cpp/container/dsc pop|stack}}
{{dsc end}}

[[de:cpp/container/stack/top]]
[[es:cpp/container/stack/top]]
[[fr:cpp/container/stack/top]]
[[it:cpp/container/stack/top]]
[[ja:cpp/container/stack/top]]
[[pl:cpp/container/stack/top]]
[[pt:cpp/container/stack/top]]
[[ru:cpp/container/stack/top]]
[[tr:cpp/container/stack/top]]
[[zh:cpp/container/stack/top]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/uses allocator</title>
    <ns>0</ns>
    <id>3403</id>
    <revision>
      <id>50677</id>
      <parentid>41629</parentid>
      <timestamp>2013-06-01T03:36:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/uses_allocator|stack}}

[[de:cpp/container/stack/uses allocator]]
[[es:cpp/container/stack/uses allocator]]
[[fr:cpp/container/stack/uses allocator]]
[[it:cpp/container/stack/uses allocator]]
[[ja:cpp/container/stack/uses allocator]]
[[pt:cpp/container/stack/uses allocator]]
[[ru:cpp/container/stack/uses allocator]]
[[zh:cpp/container/stack/uses allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/stack/~stack</title>
    <ns>0</ns>
    <id>314</id>
    <revision>
      <id>50678</id>
      <parentid>41627</parentid>
      <timestamp>2013-06-01T03:36:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="320">{{include page|cpp/container/destructor|stack}}

[[de:cpp/container/stack/~stack]]
[[es:cpp/container/stack/~stack]]
[[fr:cpp/container/stack/~stack]]
[[it:cpp/container/stack/~stack]]
[[ja:cpp/container/stack/~stack]]
[[pt:cpp/container/stack/~stack]]
[[ru:cpp/container/stack/~stack]]
[[zh:cpp/container/stack/~stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map</title>
    <ns>0</ns>
    <id>315</id>
    <revision>
      <id>89136</id>
      <parentid>86988</parentid>
      <timestamp>2017-01-03T18:29:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="6991">{{cpp/title|unordered_map}}
{{cpp/container/unordered_map/navbar}}
{{dcl begin}}
{{dcl header|unordered_map}}
{{dcl|num=1|| since=c++11 |1=
template&lt;
    class Key,
    class T,
    class Hash {{=}} std::hash&lt;Key&gt;,
    class KeyEqual {{=}} std::equal_to&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt; std::pair&lt;const Key, T&gt; &gt;
&gt; class unordered_map;
}}
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key, class T,
              class Hash = std::hash&lt;Key&gt;,
              class Pred = std::equal_to&lt;Key&gt;&gt;
    using unordered_map = std::unordered_map&lt;Key, T, Hash, Pred,
                              std::pmr::polymorphic_allocator&lt;std::pair&lt;const Key,T&gt;&gt;&gt;;
}
}}
{{dcl end}}

Unordered map is an associative container that contains key-value pairs with unique keys. Search, insertion, and removal of elements have average constant-time complexity.

Internally, the elements are not sorted in any particular order, but organized into buckets. Which bucket an element is placed into depends entirely on the hash of its key. This allows fast access to individual elements, since once the hash is computed, it refers to the exact bucket the element is placed into.

{{tt|std::unordered_map}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|UnorderedAssociativeContainer}}.

===Iterator invalidation===

{| class=&quot;dsctable&quot; style=&quot;font-size:0.8em&quot;
! Operations
! Invalidated
|-
| All read only operations, {{lc|swap}}, {{lc|std::swap}}
| Never
|-
| {{lc|clear}}, {{lc|rehash}}, {{lc|reserve}}, {{lc|1=operator=}}
| Always
|-
| {{lc|insert}}, {{lc|emplace}}, {{lc|emplace_hint}}, {{lc|operator[]}}
| Only if causes rehash
|-
| {{lc|erase}}
| Only to the element erased
|}

====Notes====
* The swap functions do not invalidate any of the iterators inside the container, but they do invalidate the iterator marking the end of the swap region.

* References and pointers to either key or data stored in the container are only invalidated by erasing that element, even when the corresponding iterator is invalidated.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | unordered_map}}
{{dsc inc | cpp/container/dsc mapped_type | unordered_map}}
{{dsc inc | cpp/container/dsc value_type | unordered_map}}
{{dsc inc | cpp/container/dsc size_type | unordered_map}}
{{dsc inc | cpp/container/dsc difference_type | unordered_map}}
{{dsc inc | cpp/container/dsc hasher | unordered_map}}
{{dsc inc | cpp/container/dsc key_equal | unordered_map}}
{{dsc inc | cpp/container/dsc allocator_type | unordered_map}}
{{dsc inc | cpp/container/dsc reference | unordered_map}}
{{dsc inc | cpp/container/dsc const_reference | unordered_map}}
{{dsc inc | cpp/container/dsc pointer | unordered_map}}
{{dsc inc | cpp/container/dsc const_pointer | unordered_map}}
{{dsc inc | cpp/container/dsc iterator | unordered_map}}
{{dsc inc | cpp/container/dsc const_iterator | unordered_map}}
{{dsc inc | cpp/container/dsc local_iterator | unordered_map}}
{{dsc inc | cpp/container/dsc const_local_iterator | unordered_map}}
{{dsc inc | cpp/container/dsc node_type | unordered_map}}
{{dsc inc | cpp/container/dsc insert_return_type | unordered_map}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | unordered_map}}
{{dsc inc | cpp/container/dsc destructor | unordered_map}}
{{dsc inc | cpp/container/dsc operator{{=}} | unordered_map}}
{{dsc inc | cpp/container/dsc get_allocator | unordered_map}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | unordered_map}}
{{dsc inc | cpp/container/dsc end | unordered_map}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | unordered_map}}
{{dsc inc | cpp/container/dsc size | unordered_map}}
{{dsc inc | cpp/container/dsc max_size | unordered_map}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | unordered_map}}
{{dsc inc | cpp/container/dsc insert | unordered_map}}
{{dsc inc | cpp/container/dsc insert_or_assign | unordered_map}}
{{dsc inc | cpp/container/dsc emplace | unordered_map}}
{{dsc inc | cpp/container/dsc emplace_hint | unordered_map}}
{{dsc inc | cpp/container/dsc try_emplace | unordered_map}}
{{dsc inc | cpp/container/dsc erase | unordered_map}}
{{dsc inc | cpp/container/dsc swap | unordered_map}}
{{dsc inc | cpp/container/dsc extract | unordered_map}}
{{dsc inc | cpp/container/dsc merge | unordered_map}}

{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc at | unordered_map}}
{{dsc inc | cpp/container/dsc operator_at | unordered_map}}
{{dsc inc | cpp/container/dsc count | unordered_map}}
{{dsc inc | cpp/container/dsc find | unordered_map}}
{{dsc inc | cpp/container/dsc equal_range | unordered_map}}

{{dsc h2 | Bucket interface}}
{{dsc inc | cpp/container/dsc begin(int) | unordered_map}}
{{dsc inc | cpp/container/dsc end(int) | unordered_map}}
{{dsc inc | cpp/container/dsc bucket_count | unordered_map}}
{{dsc inc | cpp/container/dsc max_bucket_count | unordered_map}}
{{dsc inc | cpp/container/dsc bucket_size | unordered_map}}
{{dsc inc | cpp/container/dsc bucket | unordered_map}}

{{dsc h2 | Hash policy}}
{{dsc inc | cpp/container/dsc load_factor | unordered_map}}
{{dsc inc | cpp/container/dsc max_load_factor | unordered_map}}
{{dsc inc | cpp/container/dsc rehash | unordered_map}}
{{dsc inc | cpp/container/dsc reserve | unordered_map}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc hash_function | unordered_map}}
{{dsc inc | cpp/container/dsc key_eq | unordered_map}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_map}}
{{dsc inc | cpp/container/dsc swap2 | unordered_map}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;unordered_map&gt;
 
int main()
{
    // Create an unordered_map of three strings (that map to strings)
    std::unordered_map&lt;std::string, std::string&gt; u = {
        {&quot;RED&quot;,&quot;#FF0000&quot;},
        {&quot;GREEN&quot;,&quot;#00FF00&quot;},
        {&quot;BLUE&quot;,&quot;#0000FF&quot;}
    };
 
    // Iterate and print keys and values of unordered_map
    for( const auto&amp; n : u ) {
        std::cout &lt;&lt; &quot;Key:[&quot; &lt;&lt; n.first &lt;&lt; &quot;] Value:[&quot; &lt;&lt; n.second &lt;&lt; &quot;]\n&quot;;
    }
 
    // Add two new entries to the unordered_map
    u[&quot;BLACK&quot;] = &quot;#000000&quot;;
    u[&quot;WHITE&quot;] = &quot;#FFFFFF&quot;;
 
    // Output values by key
    std::cout &lt;&lt; &quot;The HEX of color RED is:[&quot; &lt;&lt; u[&quot;RED&quot;] &lt;&lt; &quot;]\n&quot;;
    std::cout &lt;&lt; &quot;The HEX of color BLACK is:[&quot; &lt;&lt; u[&quot;BLACK&quot;] &lt;&lt; &quot;]\n&quot;;
 
    return 0;
}
 | output=
Key:[RED] Value:[#FF0000]
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
The HEX of color RED is:[#FF0000]
The HEX of color BLACK is:[#000000]
}}
[[de:cpp/container/unordered map]]
[[es:cpp/container/unordered map]]
[[fr:cpp/container/unordered map]]
[[it:cpp/container/unordered map]]
[[ja:cpp/container/unordered map]]
[[ko:cpp/container/unordered map]]
[[pt:cpp/container/unordered map]]
[[ru:cpp/container/unordered map]]
[[zh:cpp/container/unordered map]]</text>
      <sha1>1mbwm48x4z6upzk465iszpf2m4wz63l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/at</title>
    <ns>0</ns>
    <id>316</id>
    <revision>
      <id>50679</id>
      <parentid>41623</parentid>
      <timestamp>2013-06-01T03:36:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="358">{{include page|cpp/container/at assoc|unordered_map}}

[[de:cpp/container/unordered map/at]]
[[es:cpp/container/unordered map/at]]
[[fr:cpp/container/unordered map/at]]
[[it:cpp/container/unordered map/at]]
[[ja:cpp/container/unordered map/at]]
[[pt:cpp/container/unordered map/at]]
[[ru:cpp/container/unordered map/at]]
[[zh:cpp/container/unordered map/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/begin</title>
    <ns>0</ns>
    <id>317</id>
    <revision>
      <id>50680</id>
      <parentid>41622</parentid>
      <timestamp>2013-06-01T03:36:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/begin|unordered_map}}

[[de:cpp/container/unordered map/begin]]
[[es:cpp/container/unordered map/begin]]
[[fr:cpp/container/unordered map/begin]]
[[it:cpp/container/unordered map/begin]]
[[ja:cpp/container/unordered map/begin]]
[[pt:cpp/container/unordered map/begin]]
[[ru:cpp/container/unordered map/begin]]
[[zh:cpp/container/unordered map/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/begin(int)</title>
    <ns>0</ns>
    <id>9081</id>
    <redirect title="cpp/container/unordered map/begin2" />
    <revision>
      <id>38131</id>
      <timestamp>2012-07-24T13:26:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered map/begin(int)]] to [[cpp/container/unordered map/begin2]]: Text replace - &quot;/begin(int)&quot; to &quot;/begin2&quot;</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[cpp/container/unordered map/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/begin2</title>
    <ns>0</ns>
    <id>318</id>
    <revision>
      <id>50681</id>
      <parentid>41620</parentid>
      <timestamp>2013-06-01T03:36:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/begin2|unordered_map}}

[[de:cpp/container/unordered map/begin2]]
[[es:cpp/container/unordered map/begin2]]
[[fr:cpp/container/unordered map/begin2]]
[[it:cpp/container/unordered map/begin2]]
[[ja:cpp/container/unordered map/begin2]]
[[pt:cpp/container/unordered map/begin2]]
[[ru:cpp/container/unordered map/begin2]]
[[zh:cpp/container/unordered map/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/bucket</title>
    <ns>0</ns>
    <id>319</id>
    <revision>
      <id>50682</id>
      <parentid>41618</parentid>
      <timestamp>2013-06-01T03:36:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/bucket|unordered_map}}

[[de:cpp/container/unordered map/bucket]]
[[es:cpp/container/unordered map/bucket]]
[[fr:cpp/container/unordered map/bucket]]
[[it:cpp/container/unordered map/bucket]]
[[ja:cpp/container/unordered map/bucket]]
[[pt:cpp/container/unordered map/bucket]]
[[ru:cpp/container/unordered map/bucket]]
[[zh:cpp/container/unordered map/bucket]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/bucket count</title>
    <ns>0</ns>
    <id>320</id>
    <revision>
      <id>50683</id>
      <parentid>41616</parentid>
      <timestamp>2013-06-01T03:36:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="442">{{include page|cpp/container/bucket_count|unordered_map}}

[[de:cpp/container/unordered map/bucket count]]
[[es:cpp/container/unordered map/bucket count]]
[[fr:cpp/container/unordered map/bucket count]]
[[it:cpp/container/unordered map/bucket count]]
[[ja:cpp/container/unordered map/bucket count]]
[[pt:cpp/container/unordered map/bucket count]]
[[ru:cpp/container/unordered map/bucket count]]
[[zh:cpp/container/unordered map/bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/bucket size</title>
    <ns>0</ns>
    <id>321</id>
    <revision>
      <id>50684</id>
      <parentid>41615</parentid>
      <timestamp>2013-06-01T03:36:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/bucket_size|unordered_map}}

[[de:cpp/container/unordered map/bucket size]]
[[es:cpp/container/unordered map/bucket size]]
[[fr:cpp/container/unordered map/bucket size]]
[[it:cpp/container/unordered map/bucket size]]
[[ja:cpp/container/unordered map/bucket size]]
[[pt:cpp/container/unordered map/bucket size]]
[[ru:cpp/container/unordered map/bucket size]]
[[zh:cpp/container/unordered map/bucket size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/clear</title>
    <ns>0</ns>
    <id>322</id>
    <revision>
      <id>50685</id>
      <parentid>41613</parentid>
      <timestamp>2013-06-01T03:36:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/clear|unordered_map}}

[[de:cpp/container/unordered map/clear]]
[[es:cpp/container/unordered map/clear]]
[[fr:cpp/container/unordered map/clear]]
[[it:cpp/container/unordered map/clear]]
[[ja:cpp/container/unordered map/clear]]
[[pt:cpp/container/unordered map/clear]]
[[ru:cpp/container/unordered map/clear]]
[[zh:cpp/container/unordered map/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/count</title>
    <ns>0</ns>
    <id>323</id>
    <revision>
      <id>65130</id>
      <parentid>50686</parentid>
      <timestamp>2013-08-30T16:36:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="385">{{include page|cpp/container/count_unord|unordered_map}}

[[de:cpp/container/unordered map/count]]
[[es:cpp/container/unordered map/count]]
[[fr:cpp/container/unordered map/count]]
[[it:cpp/container/unordered map/count]]
[[ja:cpp/container/unordered map/count]]
[[pt:cpp/container/unordered map/count]]
[[ru:cpp/container/unordered map/count]]
[[zh:cpp/container/unordered map/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/emplace</title>
    <ns>0</ns>
    <id>324</id>
    <revision>
      <id>50687</id>
      <parentid>41609</parentid>
      <timestamp>2013-06-01T03:36:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="403">{{include page|cpp/container/emplace assoc|unordered_map}}

[[de:cpp/container/unordered map/emplace]]
[[es:cpp/container/unordered map/emplace]]
[[fr:cpp/container/unordered map/emplace]]
[[it:cpp/container/unordered map/emplace]]
[[ja:cpp/container/unordered map/emplace]]
[[pt:cpp/container/unordered map/emplace]]
[[ru:cpp/container/unordered map/emplace]]
[[zh:cpp/container/unordered map/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/emplace hint</title>
    <ns>0</ns>
    <id>325</id>
    <revision>
      <id>85281</id>
      <parentid>65118</parentid>
      <timestamp>2016-04-13T12:52:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>exception guarantee here too</comment>
      <text xml:space="preserve" bytes="1874">{{cpp/container/unordered_map/title | emplace_hint}}
{{cpp/container/unordered_map/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the container, using {{tt|hint}} as a suggestion where the element should go. The element is constructed in-place, i.e. no copy or move operations are performed. 

The constructor of the element type ({{tt|value_type}}, that is, {{c|std::pair&lt;const Key, T&gt;}}) is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|unordered_map|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the new element}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

If the insertion failed because the element already exists, returns an iterator to the already existing element with the equivalent key.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Amortized constant on average, worst case linear in the size of the container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_map}}
{{dsc inc | cpp/container/dsc insert |unordered_map}}
{{dsc end}}

[[de:cpp/container/unordered map/emplace hint]]
[[es:cpp/container/unordered map/emplace hint]]
[[fr:cpp/container/unordered map/emplace hint]]
[[it:cpp/container/unordered map/emplace hint]]
[[ja:cpp/container/unordered map/emplace hint]]
[[pt:cpp/container/unordered map/emplace hint]]
[[ru:cpp/container/unordered map/emplace hint]]
[[zh:cpp/container/unordered map/emplace hint]]</text>
      <sha1>fl41pb69vnbpbdmy545qo5qwoj80xqx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/empty</title>
    <ns>0</ns>
    <id>326</id>
    <revision>
      <id>50689</id>
      <parentid>41605</parentid>
      <timestamp>2013-06-01T03:36:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/empty|unordered_map}}

[[de:cpp/container/unordered map/empty]]
[[es:cpp/container/unordered map/empty]]
[[fr:cpp/container/unordered map/empty]]
[[it:cpp/container/unordered map/empty]]
[[ja:cpp/container/unordered map/empty]]
[[pt:cpp/container/unordered map/empty]]
[[ru:cpp/container/unordered map/empty]]
[[zh:cpp/container/unordered map/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/end</title>
    <ns>0</ns>
    <id>327</id>
    <revision>
      <id>50690</id>
      <parentid>41603</parentid>
      <timestamp>2013-06-01T03:36:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/end|unordered_map}}

[[de:cpp/container/unordered map/end]]
[[es:cpp/container/unordered map/end]]
[[fr:cpp/container/unordered map/end]]
[[it:cpp/container/unordered map/end]]
[[ja:cpp/container/unordered map/end]]
[[pt:cpp/container/unordered map/end]]
[[ru:cpp/container/unordered map/end]]
[[zh:cpp/container/unordered map/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/end(int)</title>
    <ns>0</ns>
    <id>9086</id>
    <redirect title="cpp/container/unordered map/end2" />
    <revision>
      <id>38151</id>
      <timestamp>2012-07-24T13:41:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered map/end(int)]] to [[cpp/container/unordered map/end2]]: Text replace - &quot;/end(int)&quot; to &quot;/end2&quot;</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/container/unordered map/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/end2</title>
    <ns>0</ns>
    <id>328</id>
    <revision>
      <id>50691</id>
      <parentid>41601</parentid>
      <timestamp>2013-06-01T03:36:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/end2|unordered_map}}

[[de:cpp/container/unordered map/end2]]
[[es:cpp/container/unordered map/end2]]
[[fr:cpp/container/unordered map/end2]]
[[it:cpp/container/unordered map/end2]]
[[ja:cpp/container/unordered map/end2]]
[[pt:cpp/container/unordered map/end2]]
[[ru:cpp/container/unordered map/end2]]
[[zh:cpp/container/unordered map/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/equal range</title>
    <ns>0</ns>
    <id>329</id>
    <revision>
      <id>65097</id>
      <parentid>65083</parentid>
      <timestamp>2013-08-30T15:58:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="439">{{include page|cpp/container/equal_range_unord|unordered_map}}

[[de:cpp/container/unordered map/equal range]]
[[es:cpp/container/unordered map/equal range]]
[[fr:cpp/container/unordered map/equal range]]
[[it:cpp/container/unordered map/equal range]]
[[ja:cpp/container/unordered map/equal range]]
[[pt:cpp/container/unordered map/equal range]]
[[ru:cpp/container/unordered map/equal range]]
[[zh:cpp/container/unordered map/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/erase</title>
    <ns>0</ns>
    <id>330</id>
    <revision>
      <id>50693</id>
      <parentid>41598</parentid>
      <timestamp>2013-06-01T03:36:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="385">{{include page|cpp/container/erase assoc|unordered_map}}

[[de:cpp/container/unordered map/erase]]
[[es:cpp/container/unordered map/erase]]
[[fr:cpp/container/unordered map/erase]]
[[it:cpp/container/unordered map/erase]]
[[ja:cpp/container/unordered map/erase]]
[[pt:cpp/container/unordered map/erase]]
[[ru:cpp/container/unordered map/erase]]
[[zh:cpp/container/unordered map/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/extract</title>
    <ns>0</ns>
    <id>15670</id>
    <revision>
      <id>87127</id>
      <timestamp>2016-07-27T14:49:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="58">{{include page|cpp/container/extract assoc|unordered_map}}</text>
      <sha1>35q1pdbcmg9owhiddz1xjrsl8ixwhrv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/find</title>
    <ns>0</ns>
    <id>331</id>
    <revision>
      <id>50694</id>
      <parentid>41596</parentid>
      <timestamp>2013-06-01T03:36:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/find|unordered_map}}

[[de:cpp/container/unordered map/find]]
[[es:cpp/container/unordered map/find]]
[[fr:cpp/container/unordered map/find]]
[[it:cpp/container/unordered map/find]]
[[ja:cpp/container/unordered map/find]]
[[pt:cpp/container/unordered map/find]]
[[ru:cpp/container/unordered map/find]]
[[zh:cpp/container/unordered map/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/get allocator</title>
    <ns>0</ns>
    <id>332</id>
    <revision>
      <id>50695</id>
      <parentid>41594</parentid>
      <timestamp>2013-06-01T03:36:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="451">{{include page|cpp/container/get_allocator|unordered_map}}

[[de:cpp/container/unordered map/get allocator]]
[[es:cpp/container/unordered map/get allocator]]
[[fr:cpp/container/unordered map/get allocator]]
[[it:cpp/container/unordered map/get allocator]]
[[ja:cpp/container/unordered map/get allocator]]
[[pt:cpp/container/unordered map/get allocator]]
[[ru:cpp/container/unordered map/get allocator]]
[[zh:cpp/container/unordered map/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/hash function</title>
    <ns>0</ns>
    <id>333</id>
    <revision>
      <id>50696</id>
      <parentid>41593</parentid>
      <timestamp>2013-06-01T03:36:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="451">{{include page|cpp/container/hash_function|unordered_map}}

[[de:cpp/container/unordered map/hash function]]
[[es:cpp/container/unordered map/hash function]]
[[fr:cpp/container/unordered map/hash function]]
[[it:cpp/container/unordered map/hash function]]
[[ja:cpp/container/unordered map/hash function]]
[[pt:cpp/container/unordered map/hash function]]
[[ru:cpp/container/unordered map/hash function]]
[[zh:cpp/container/unordered map/hash function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/insert</title>
    <ns>0</ns>
    <id>334</id>
    <revision>
      <id>91170</id>
      <parentid>88753</parentid>
      <timestamp>2017-03-24T13:50:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg2844 note</comment>
      <text xml:space="preserve" bytes="4475">{{cpp/container/unordered_map/title | insert}}
{{cpp/container/unordered_map/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
std::pair&lt;iterator,bool&gt; insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class P &gt;
std::pair&lt;iterator,bool&gt; insert( P&amp;&amp; value );
}}
{{dcl | num=2 | since=c++17 |
std::pair&lt;iterator,bool&gt; insert( value_type&amp;&amp; value );
}}
{{dcl | num=3 | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl | num=4 | since=c++11 |
template&lt; class P &gt;
iterator insert( const_iterator hint, P&amp;&amp; value );
}}
{{dcl | num=4 | since=c++17 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 | since=c++11 |
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
insert_return_type insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container, if the container doesn't already contain an element with an equivalent key.

@1-2@ Inserts {{tt|value}}. The overload {{v|2}} is equivalent to {{c|emplace(std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@3-4@ Inserts {{tt|value}}, using {{tt|hint}} as a non-binding suggestion to where the search should start. The overload {{v|4}} is equivalent to {{c|emplace_hint(hint, std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@5@ Inserts elements from range {{tt|[first, last)}}. {{cpp/container/lwg2488-note}}

@6@ Inserts elements from initializer list {{tt|ilist}}. {{cpp/container/lwg2488-note}}

{{cpp/container/node_handle_insert_desc|unordered_map|7|8}}

{{cpp/container/note_iterator_invalidation|unordered_map|insert}}
===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the content}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-2@ Returns a pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a {{c|bool}} denoting whether the insertion took place.

@3-4@ Returns an iterator to the inserted element, or to the element that prevented the insertion.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|unordered_map|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===
@1-4@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

@5-6@ Average case: {{tt|O(N)}}, where N is the number of elements to insert. Worse case: {{tt|O(N*size()+N)}}

@7-8@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

===Notes===
{{cpp/container/hinted_insert_note}}

===Example===
{{example
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;unordered_map&gt;

int main ()
{
    std::unordered_map&lt;int, std::string&gt; dict = {{1, &quot;one&quot;}, {2, &quot;two&quot;}};
    dict.insert({3, &quot;three&quot;});
    dict.insert(std::make_pair(4, &quot;four&quot;));
    dict.insert({{4, &quot;another four&quot;}, {5, &quot;five&quot;}});

    bool ok = dict.insert({1, &quot;another one&quot;}).second;
    std::cout &lt;&lt; &quot;inserting 1 -&gt; \&quot;another one\&quot; &quot; 
              &lt;&lt; (ok ? &quot;succeeded&quot; : &quot;failed&quot;) &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;contents:\n&quot;;
    for(auto&amp; p: dict)
        std::cout &lt;&lt; &quot; &quot; &lt;&lt; p.first &lt;&lt; &quot; =&gt; &quot; &lt;&lt; p.second &lt;&lt; '\n';
}
|p=true
| output=
inserting 1 -&gt; &quot;another one&quot; failed
contents:
 5 =&gt; five
 1 =&gt; one
 2 =&gt; two
 3 =&gt; three
 4 =&gt; four
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_map}}
{{dsc inc | cpp/container/dsc emplace_hint |unordered_map}}
{{dsc inc | cpp/container/dsc insert_or_assign |unordered_map}}
{{dsc end}}

[[de:cpp/container/unordered map/insert]]
[[es:cpp/container/unordered map/insert]]
[[fr:cpp/container/unordered map/insert]]
[[it:cpp/container/unordered map/insert]]
[[ja:cpp/container/unordered map/insert]]
[[pt:cpp/container/unordered map/insert]]
[[ru:cpp/container/unordered map/insert]]
[[zh:cpp/container/unordered map/insert]]</text>
      <sha1>n06nmgevxrtxyc4qb3m0xm9hf2gj7hx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/insert or assign</title>
    <ns>0</ns>
    <id>13854</id>
    <revision>
      <id>74464</id>
      <timestamp>2014-12-17T18:25:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="484">{{include page|cpp/container/insert_or_assign assoc|unordered_map}}

[[de:cpp/container/unordered_map/insert_or_assign]]
[[es:cpp/container/unordered_map/insert_or_assign]]
[[fr:cpp/container/unordered_map/insert_or_assign]]
[[it:cpp/container/unordered_map/insert_or_assign]]
[[ja:cpp/container/unordered_map/insert_or_assign]]
[[pt:cpp/container/unordered_map/insert_or_assign]]
[[ru:cpp/container/unordered_map/insert_or_assign]]
[[zh:cpp/container/unordered_map/insert_or_assign]]</text>
      <sha1>g6glkq8y2errgx82dml88zy82hf6dkt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/iterator semantics</title>
    <ns>0</ns>
    <id>13502</id>
    <revision>
      <id>69325</id>
      <parentid>69319</parentid>
      <timestamp>2014-04-03T06:49:18Z</timestamp>
      <contributor>
        <username>Shachar</username>
        <id>2974</id>
      </contributor>
      <comment>Remove request</comment>
      <text xml:space="preserve" bytes="1162">{|
|+ Iterator invalidation rules
! Operations
! Invalidated
|-
| All read only operations
[[cpp/container/unordered_map/swap|swap]],
[[cpp/container/unordered_map/swap2|std::swap]]
| Never
|-
|
[[cpp/container/unordered_map/clear|clear]],
[[cpp/container/unordered_map/rehash|rehash]],
[[cpp/container/unordered_map/reserve|reserve]],
[[cpp/container/unordered_map/operator%3D|operator=]]
| Always
|-
|
[[cpp/container/unordered_map/insert|insert]],
[[cpp/container/unordered_map/emplace|emplace]],
[[cpp/container/unordered_map/emplace_hint|emplace_hint]],
[[cpp/container/unordered_map/operator_at|operator[]]]
| Only if causes rehash
|-
| [[cpp/container/unordered_map/erase|erase]]
| Only to the element erased
|}

==Page needs to be removed==
The content of this page has been integrated into the main container page.

===Notes===
* The swap functions do not invalidate any of the iterators inside the container, but they do invalidate the iterator marking the end of the swap region.

* References and pointers to either key or data stored in the container are only invalidated by erasing that element, even when the corresponding iterator is invalidated.</text>
      <sha1>mnxava3kdx65j0n8a5tn7ye67h8myyd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/key eq</title>
    <ns>0</ns>
    <id>335</id>
    <revision>
      <id>50697</id>
      <parentid>41589</parentid>
      <timestamp>2013-06-01T03:36:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/key_eq|unordered_map}}

[[de:cpp/container/unordered map/key eq]]
[[es:cpp/container/unordered map/key eq]]
[[fr:cpp/container/unordered map/key eq]]
[[it:cpp/container/unordered map/key eq]]
[[ja:cpp/container/unordered map/key eq]]
[[pt:cpp/container/unordered map/key eq]]
[[ru:cpp/container/unordered map/key eq]]
[[zh:cpp/container/unordered map/key eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/load factor</title>
    <ns>0</ns>
    <id>336</id>
    <revision>
      <id>50698</id>
      <parentid>41587</parentid>
      <timestamp>2013-06-01T03:36:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/load_factor|unordered_map}}

[[de:cpp/container/unordered map/load factor]]
[[es:cpp/container/unordered map/load factor]]
[[fr:cpp/container/unordered map/load factor]]
[[it:cpp/container/unordered map/load factor]]
[[ja:cpp/container/unordered map/load factor]]
[[pt:cpp/container/unordered map/load factor]]
[[ru:cpp/container/unordered map/load factor]]
[[zh:cpp/container/unordered map/load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/max bucket count</title>
    <ns>0</ns>
    <id>337</id>
    <revision>
      <id>50699</id>
      <parentid>41586</parentid>
      <timestamp>2013-06-01T03:36:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="478">{{include page|cpp/container/max_bucket_count|unordered_map}}

[[de:cpp/container/unordered map/max bucket count]]
[[es:cpp/container/unordered map/max bucket count]]
[[fr:cpp/container/unordered map/max bucket count]]
[[it:cpp/container/unordered map/max bucket count]]
[[ja:cpp/container/unordered map/max bucket count]]
[[pt:cpp/container/unordered map/max bucket count]]
[[ru:cpp/container/unordered map/max bucket count]]
[[zh:cpp/container/unordered map/max bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/max load factor</title>
    <ns>0</ns>
    <id>338</id>
    <revision>
      <id>50700</id>
      <parentid>41584</parentid>
      <timestamp>2013-06-01T03:36:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="469">{{include page|cpp/container/max_load_factor|unordered_map}}

[[de:cpp/container/unordered map/max load factor]]
[[es:cpp/container/unordered map/max load factor]]
[[fr:cpp/container/unordered map/max load factor]]
[[it:cpp/container/unordered map/max load factor]]
[[ja:cpp/container/unordered map/max load factor]]
[[pt:cpp/container/unordered map/max load factor]]
[[ru:cpp/container/unordered map/max load factor]]
[[zh:cpp/container/unordered map/max load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/max size</title>
    <ns>0</ns>
    <id>339</id>
    <revision>
      <id>50701</id>
      <parentid>41582</parentid>
      <timestamp>2013-06-01T03:36:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/max_size|unordered_map}}

[[de:cpp/container/unordered map/max size]]
[[es:cpp/container/unordered map/max size]]
[[fr:cpp/container/unordered map/max size]]
[[it:cpp/container/unordered map/max size]]
[[ja:cpp/container/unordered map/max size]]
[[pt:cpp/container/unordered map/max size]]
[[ru:cpp/container/unordered map/max size]]
[[zh:cpp/container/unordered map/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/merge</title>
    <ns>0</ns>
    <id>15649</id>
    <revision>
      <id>87024</id>
      <timestamp>2016-07-21T15:35:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="56">{{include page|cpp/container/merge assoc|unordered_map}}</text>
      <sha1>5hc6rjija8d9zrd1w8ka8jr5tbr775l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/operator at</title>
    <ns>0</ns>
    <id>341</id>
    <revision>
      <id>73772</id>
      <parentid>44650</parentid>
      <timestamp>2014-11-15T13:43:34Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>make use of [[template:include page]]</comment>
      <text xml:space="preserve" bytes="439">{{include page|cpp/container/operator_at assoc|unordered_map}}

[[de:cpp/container/unordered map/operator at]]
[[es:cpp/container/unordered map/operator at]]
[[fr:cpp/container/unordered map/operator at]]
[[it:cpp/container/unordered map/operator at]]
[[ja:cpp/container/unordered map/operator at]]
[[pt:cpp/container/unordered map/operator at]]
[[ru:cpp/container/unordered map/operator at]]
[[zh:cpp/container/unordered map/operator at]]</text>
      <sha1>nrl2e9nhbd93s7da91xf0tckkv7cqzh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/operator cmp</title>
    <ns>0</ns>
    <id>2011</id>
    <revision>
      <id>50702</id>
      <parentid>41577</parentid>
      <timestamp>2013-06-01T03:36:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/container/operator_cmp_unord|unordered_map}}

[[de:cpp/container/unordered map/operator cmp]]
[[es:cpp/container/unordered map/operator cmp]]
[[fr:cpp/container/unordered map/operator cmp]]
[[it:cpp/container/unordered map/operator cmp]]
[[ja:cpp/container/unordered map/operator cmp]]
[[pt:cpp/container/unordered map/operator cmp]]
[[ru:cpp/container/unordered map/operator cmp]]
[[zh:cpp/container/unordered map/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/operator comp</title>
    <ns>0</ns>
    <id>4215</id>
    <redirect title="cpp/container/unordered map/operator cmp" />
    <revision>
      <id>15249</id>
      <timestamp>2011-12-08T01:16:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered map/operator comp]] to [[cpp/container/unordered map/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[cpp/container/unordered map/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/operator=</title>
    <ns>0</ns>
    <id>340</id>
    <revision>
      <id>92044</id>
      <parentid>41580</parentid>
      <timestamp>2017-04-03T20:54:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="419">{{include page|cpp/container/operator{{=}}|unordered_map}}

[[de:cpp/container/unordered map/operator=]]
[[es:cpp/container/unordered map/operator=]]
[[fr:cpp/container/unordered map/operator=]]
[[it:cpp/container/unordered map/operator=]]
[[ja:cpp/container/unordered map/operator=]]
[[pt:cpp/container/unordered map/operator=]]
[[ru:cpp/container/unordered map/operator=]]
[[zh:cpp/container/unordered map/operator=]]</text>
      <sha1>1zckdags343mxq7fvljboj9z8qnnfjr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/rehash</title>
    <ns>0</ns>
    <id>342</id>
    <revision>
      <id>50703</id>
      <parentid>41576</parentid>
      <timestamp>2013-06-01T03:36:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/rehash|unordered_map}}

[[de:cpp/container/unordered map/rehash]]
[[es:cpp/container/unordered map/rehash]]
[[fr:cpp/container/unordered map/rehash]]
[[it:cpp/container/unordered map/rehash]]
[[ja:cpp/container/unordered map/rehash]]
[[pt:cpp/container/unordered map/rehash]]
[[ru:cpp/container/unordered map/rehash]]
[[zh:cpp/container/unordered map/rehash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/reserve</title>
    <ns>0</ns>
    <id>343</id>
    <revision>
      <id>50704</id>
      <parentid>41575</parentid>
      <timestamp>2013-06-01T03:36:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="403">{{include page|cpp/container/reserve unord|unordered_map}}

[[de:cpp/container/unordered map/reserve]]
[[es:cpp/container/unordered map/reserve]]
[[fr:cpp/container/unordered map/reserve]]
[[it:cpp/container/unordered map/reserve]]
[[ja:cpp/container/unordered map/reserve]]
[[pt:cpp/container/unordered map/reserve]]
[[ru:cpp/container/unordered map/reserve]]
[[zh:cpp/container/unordered map/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/size</title>
    <ns>0</ns>
    <id>344</id>
    <revision>
      <id>50705</id>
      <parentid>41574</parentid>
      <timestamp>2013-06-01T03:37:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/size|unordered_map}}

[[de:cpp/container/unordered map/size]]
[[es:cpp/container/unordered map/size]]
[[fr:cpp/container/unordered map/size]]
[[it:cpp/container/unordered map/size]]
[[ja:cpp/container/unordered map/size]]
[[pt:cpp/container/unordered map/size]]
[[ru:cpp/container/unordered map/size]]
[[zh:cpp/container/unordered map/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/std swap</title>
    <ns>0</ns>
    <id>3468</id>
    <redirect title="cpp/container/unordered map/swap2" />
    <revision>
      <id>13025</id>
      <timestamp>2011-11-03T18:41:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered map/std swap]] to [[cpp/container/unordered map/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/container/unordered map/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/swap</title>
    <ns>0</ns>
    <id>345</id>
    <revision>
      <id>50706</id>
      <parentid>41573</parentid>
      <timestamp>2013-06-01T03:37:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/swap|unordered_map}}

[[de:cpp/container/unordered map/swap]]
[[es:cpp/container/unordered map/swap]]
[[fr:cpp/container/unordered map/swap]]
[[it:cpp/container/unordered map/swap]]
[[ja:cpp/container/unordered map/swap]]
[[pt:cpp/container/unordered map/swap]]
[[ru:cpp/container/unordered map/swap]]
[[zh:cpp/container/unordered map/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/swap2</title>
    <ns>0</ns>
    <id>1999</id>
    <revision>
      <id>50707</id>
      <parentid>41572</parentid>
      <timestamp>2013-06-01T03:37:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/swap2|unordered_map}}

[[de:cpp/container/unordered map/swap2]]
[[es:cpp/container/unordered map/swap2]]
[[fr:cpp/container/unordered map/swap2]]
[[it:cpp/container/unordered map/swap2]]
[[ja:cpp/container/unordered map/swap2]]
[[pt:cpp/container/unordered map/swap2]]
[[ru:cpp/container/unordered map/swap2]]
[[zh:cpp/container/unordered map/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/try emplace</title>
    <ns>0</ns>
    <id>13852</id>
    <revision>
      <id>74455</id>
      <timestamp>2014-12-17T18:11:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="439">{{include page|cpp/container/try_emplace assoc|unordered_map}}

[[de:cpp/container/unordered_map/try_emplace]]
[[es:cpp/container/unordered_map/try_emplace]]
[[fr:cpp/container/unordered_map/try_emplace]]
[[it:cpp/container/unordered_map/try_emplace]]
[[ja:cpp/container/unordered_map/try_emplace]]
[[pt:cpp/container/unordered_map/try_emplace]]
[[ru:cpp/container/unordered_map/try_emplace]]
[[zh:cpp/container/unordered_map/try_emplace]]</text>
      <sha1>sf3g1yykq0xl35wldzjj8jugc7o8anr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/unordered map</title>
    <ns>0</ns>
    <id>346</id>
    <revision>
      <id>50708</id>
      <parentid>41571</parentid>
      <timestamp>2013-06-01T03:37:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="455">{{include page|cpp/container/constructor unord|unordered_map}}

[[de:cpp/container/unordered map/unordered map]]
[[es:cpp/container/unordered map/unordered map]]
[[fr:cpp/container/unordered map/unordered map]]
[[it:cpp/container/unordered map/unordered map]]
[[ja:cpp/container/unordered map/unordered map]]
[[pt:cpp/container/unordered map/unordered map]]
[[ru:cpp/container/unordered map/unordered map]]
[[zh:cpp/container/unordered map/unordered map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered map/~unordered map</title>
    <ns>0</ns>
    <id>347</id>
    <revision>
      <id>50709</id>
      <parentid>41569</parentid>
      <timestamp>2013-06-01T03:37:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="456">{{include page|cpp/container/destructor|unordered_map}}

[[de:cpp/container/unordered map/~unordered map]]
[[es:cpp/container/unordered map/~unordered map]]
[[fr:cpp/container/unordered map/~unordered map]]
[[it:cpp/container/unordered map/~unordered map]]
[[ja:cpp/container/unordered map/~unordered map]]
[[pt:cpp/container/unordered map/~unordered map]]
[[ru:cpp/container/unordered map/~unordered map]]
[[zh:cpp/container/unordered map/~unordered map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap</title>
    <ns>0</ns>
    <id>348</id>
    <revision>
      <id>89137</id>
      <parentid>86989</parentid>
      <timestamp>2017-01-03T18:30:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="5874">{{cpp/title|unordered_multimap}}
{{cpp/container/unordered_multimap/navbar}}
{{dcl begin}}
{{dcl header|unordered_map}}
{{dcl |num=1|since=c++11 |1=
template&lt;
    class Key,
    class T,
    class Hash {{=}} std::hash&lt;Key&gt;,
    class KeyEqual {{=}} std::equal_to&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt; std::pair&lt;const Key, T&gt; &gt;
&gt; class unordered_multimap;
}} 
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key, class T,
              class Hash = std::hash&lt;Key&gt;,
              class Pred = std::equal_to&lt;Key&gt;&gt;
    using unordered_multimap = std::unordered_multimap&lt;Key, T, Hash, Pred,
                                   std::pmr::polymorphic_allocator&lt;std::pair&lt;const Key,T&gt;&gt;&gt;;
}
}}
{{dcl end}}

Unordered multimap is an unordered associative container that supports equivalent keys (an unordered_multimap may contain multiple copies of each key value) and that associates values of another type with the keys. The unordered_multimap class supports forward iterators. Search, insertion, and removal have average constant-time complexity.

Internally, the elements are not sorted in any particular order, but organized into buckets. Which bucket an element is placed into depends entirely on the hash of its key. This allows fast access to individual elements, since once hash is computed, it refers to the exact bucket the element is placed into.

The iteration order of this container is not required to be stable (so, for example, {{lc|std::equal}} cannot be used to compare two {{tt|std::unordered_multimap}}s), except that every group of elements whose keys compare ''equivalent'' (compare equal with {{lc|key_eq()}} as the comparator) forms a contiguous subrange in the iteration order, also accessible with {{lc|std::unordered_multimap::equal_range|equal_range()}}.

{{tt|std::unordered_multimap}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|UnorderedAssociativeContainer}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | unordered_multimap}}
{{dsc inc | cpp/container/dsc mapped_type | unordered_multimap}}
{{dsc inc | cpp/container/dsc value_type | unordered_multimap}}
{{dsc inc | cpp/container/dsc size_type | unordered_multimap}}
{{dsc inc | cpp/container/dsc difference_type | unordered_multimap}}
{{dsc inc | cpp/container/dsc hasher | unordered_multimap}}
{{dsc inc | cpp/container/dsc key_equal | unordered_multimap}}
{{dsc inc | cpp/container/dsc allocator_type | unordered_multimap}}
{{dsc inc | cpp/container/dsc reference | unordered_multimap}}
{{dsc inc | cpp/container/dsc const_reference | unordered_multimap}}
{{dsc inc | cpp/container/dsc pointer | unordered_multimap}}
{{dsc inc | cpp/container/dsc const_pointer | unordered_multimap}}
{{dsc inc | cpp/container/dsc iterator | unordered_multimap}}
{{dsc inc | cpp/container/dsc const_iterator | unordered_multimap}}
{{dsc inc | cpp/container/dsc local_iterator | unordered_multimap}}
{{dsc inc | cpp/container/dsc const_local_iterator | unordered_multimap}}
{{dsc inc | cpp/container/dsc node_type | unordered_multimap}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | unordered_multimap}}
{{dsc inc | cpp/container/dsc destructor | unordered_multimap}}
{{dsc inc | cpp/container/dsc operator{{=}} | unordered_multimap}}
{{dsc inc | cpp/container/dsc get_allocator | unordered_multimap}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | unordered_multimap}}
{{dsc inc | cpp/container/dsc end | unordered_multimap}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | unordered_multimap}}
{{dsc inc | cpp/container/dsc size | unordered_multimap}}
{{dsc inc | cpp/container/dsc max_size | unordered_multimap}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | unordered_multimap}}
{{dsc inc | cpp/container/dsc insert | unordered_multimap}}
{{dsc inc | cpp/container/dsc emplace | unordered_multimap}}
{{dsc inc | cpp/container/dsc emplace_hint | unordered_multimap}}
{{dsc inc | cpp/container/dsc erase | unordered_multimap}}
{{dsc inc | cpp/container/dsc swap | unordered_multimap}}
{{dsc inc | cpp/container/dsc extract| unordered_multimap}}
{{dsc inc | cpp/container/dsc merge | unordered_multimap}}

{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc count | unordered_multimap}}
{{dsc inc | cpp/container/dsc find | unordered_multimap}}
{{dsc inc | cpp/container/dsc equal_range | unordered_multimap}}

{{dsc h2 | Bucket interface}}
{{dsc inc | cpp/container/dsc begin(int) | unordered_multimap}}
{{dsc inc | cpp/container/dsc end(int) | unordered_multimap}}
{{dsc inc | cpp/container/dsc bucket_count | unordered_multimap}}
{{dsc inc | cpp/container/dsc max_bucket_count | unordered_multimap}}
{{dsc inc | cpp/container/dsc bucket_size | unordered_multimap}}
{{dsc inc | cpp/container/dsc bucket | unordered_multimap}}

{{dsc h2 | Hash policy}}
{{dsc inc | cpp/container/dsc load_factor | unordered_multimap}}
{{dsc inc | cpp/container/dsc max_load_factor | unordered_multimap}}
{{dsc inc | cpp/container/dsc rehash | unordered_multimap}}
{{dsc inc | cpp/container/dsc reserve | unordered_multimap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc hash_function | unordered_multimap}}
{{dsc inc | cpp/container/dsc key_eq | unordered_multimap}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_multimap}}
{{dsc inc | cpp/container/dsc swap2 | unordered_multimap}}
{{dsc end}}

[[de:cpp/container/unordered multimap]]
[[es:cpp/container/unordered multimap]]
[[fr:cpp/container/unordered multimap]]
[[it:cpp/container/unordered multimap]]
[[ja:cpp/container/unordered multimap]]
[[pt:cpp/container/unordered multimap]]
[[ru:cpp/container/unordered multimap]]
[[zh:cpp/container/unordered multimap]]</text>
      <sha1>7aba3j8ksirvm6949g0t87d1e9i7ara</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/begin</title>
    <ns>0</ns>
    <id>349</id>
    <revision>
      <id>50710</id>
      <parentid>41567</parentid>
      <timestamp>2013-06-01T03:37:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/begin|unordered_multimap}}

[[de:cpp/container/unordered multimap/begin]]
[[es:cpp/container/unordered multimap/begin]]
[[fr:cpp/container/unordered multimap/begin]]
[[it:cpp/container/unordered multimap/begin]]
[[ja:cpp/container/unordered multimap/begin]]
[[pt:cpp/container/unordered multimap/begin]]
[[ru:cpp/container/unordered multimap/begin]]
[[zh:cpp/container/unordered multimap/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/begin(int)</title>
    <ns>0</ns>
    <id>9082</id>
    <redirect title="cpp/container/unordered multimap/begin2" />
    <revision>
      <id>38133</id>
      <timestamp>2012-07-24T13:28:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multimap/begin(int)]] to [[cpp/container/unordered multimap/begin2]]: Text replace - &quot;/begin(int)&quot; to &quot;/begin2&quot;</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[cpp/container/unordered multimap/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/begin2</title>
    <ns>0</ns>
    <id>350</id>
    <revision>
      <id>50711</id>
      <parentid>41566</parentid>
      <timestamp>2013-06-01T03:37:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/begin2|unordered_multimap}}

[[de:cpp/container/unordered multimap/begin2]]
[[es:cpp/container/unordered multimap/begin2]]
[[fr:cpp/container/unordered multimap/begin2]]
[[it:cpp/container/unordered multimap/begin2]]
[[ja:cpp/container/unordered multimap/begin2]]
[[pt:cpp/container/unordered multimap/begin2]]
[[ru:cpp/container/unordered multimap/begin2]]
[[zh:cpp/container/unordered multimap/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/bucket</title>
    <ns>0</ns>
    <id>351</id>
    <revision>
      <id>50712</id>
      <parentid>41565</parentid>
      <timestamp>2013-06-01T03:37:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/bucket|unordered_multimap}}

[[de:cpp/container/unordered multimap/bucket]]
[[es:cpp/container/unordered multimap/bucket]]
[[fr:cpp/container/unordered multimap/bucket]]
[[it:cpp/container/unordered multimap/bucket]]
[[ja:cpp/container/unordered multimap/bucket]]
[[pt:cpp/container/unordered multimap/bucket]]
[[ru:cpp/container/unordered multimap/bucket]]
[[zh:cpp/container/unordered multimap/bucket]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/bucket count</title>
    <ns>0</ns>
    <id>352</id>
    <revision>
      <id>50713</id>
      <parentid>41564</parentid>
      <timestamp>2013-06-01T03:37:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="487">{{include page|cpp/container/bucket_count|unordered_multimap}}

[[de:cpp/container/unordered multimap/bucket count]]
[[es:cpp/container/unordered multimap/bucket count]]
[[fr:cpp/container/unordered multimap/bucket count]]
[[it:cpp/container/unordered multimap/bucket count]]
[[ja:cpp/container/unordered multimap/bucket count]]
[[pt:cpp/container/unordered multimap/bucket count]]
[[ru:cpp/container/unordered multimap/bucket count]]
[[zh:cpp/container/unordered multimap/bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/bucket size</title>
    <ns>0</ns>
    <id>353</id>
    <revision>
      <id>50714</id>
      <parentid>41563</parentid>
      <timestamp>2013-06-01T03:37:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="478">{{include page|cpp/container/bucket_size|unordered_multimap}}

[[de:cpp/container/unordered multimap/bucket size]]
[[es:cpp/container/unordered multimap/bucket size]]
[[fr:cpp/container/unordered multimap/bucket size]]
[[it:cpp/container/unordered multimap/bucket size]]
[[ja:cpp/container/unordered multimap/bucket size]]
[[pt:cpp/container/unordered multimap/bucket size]]
[[ru:cpp/container/unordered multimap/bucket size]]
[[zh:cpp/container/unordered multimap/bucket size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/clear</title>
    <ns>0</ns>
    <id>354</id>
    <revision>
      <id>50715</id>
      <parentid>41562</parentid>
      <timestamp>2013-06-01T03:37:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/clear|unordered_multimap}}

[[de:cpp/container/unordered multimap/clear]]
[[es:cpp/container/unordered multimap/clear]]
[[fr:cpp/container/unordered multimap/clear]]
[[it:cpp/container/unordered multimap/clear]]
[[ja:cpp/container/unordered multimap/clear]]
[[pt:cpp/container/unordered multimap/clear]]
[[ru:cpp/container/unordered multimap/clear]]
[[zh:cpp/container/unordered multimap/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/count</title>
    <ns>0</ns>
    <id>355</id>
    <revision>
      <id>65129</id>
      <parentid>50716</parentid>
      <timestamp>2013-08-30T16:36:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="430">{{include page|cpp/container/count_unord|unordered_multimap}}

[[de:cpp/container/unordered multimap/count]]
[[es:cpp/container/unordered multimap/count]]
[[fr:cpp/container/unordered multimap/count]]
[[it:cpp/container/unordered multimap/count]]
[[ja:cpp/container/unordered multimap/count]]
[[pt:cpp/container/unordered multimap/count]]
[[ru:cpp/container/unordered multimap/count]]
[[zh:cpp/container/unordered multimap/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/emplace</title>
    <ns>0</ns>
    <id>356</id>
    <revision>
      <id>50717</id>
      <parentid>41560</parentid>
      <timestamp>2013-06-01T03:37:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/container/emplace assoc|unordered_multimap}}

[[de:cpp/container/unordered multimap/emplace]]
[[es:cpp/container/unordered multimap/emplace]]
[[fr:cpp/container/unordered multimap/emplace]]
[[it:cpp/container/unordered multimap/emplace]]
[[ja:cpp/container/unordered multimap/emplace]]
[[pt:cpp/container/unordered multimap/emplace]]
[[ru:cpp/container/unordered multimap/emplace]]
[[zh:cpp/container/unordered multimap/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/emplace hint</title>
    <ns>0</ns>
    <id>357</id>
    <revision>
      <id>85282</id>
      <parentid>65117</parentid>
      <timestamp>2016-04-13T12:52:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>exception guarantee here too</comment>
      <text xml:space="preserve" bytes="1800">{{cpp/container/unordered_multimap/title | emplace_hint}}
{{cpp/container/unordered_multimap/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the container, using {{tt|hint}} as a suggestion where the element should go. The element is constructed in-place, i.e. no copy or move operations are performed.

The constructor of the element type ({{tt|value_type}}, that is, {{c|std::pair&lt;const Key, T&gt;}}) is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}.

{{cpp/container/note_iterator_invalidation|unordered_multimap|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the new element}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Amortized constant on average, worst case linear in the size of the container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_multimap}}
{{dsc inc | cpp/container/dsc insert |unordered_multimap}}
{{dsc end}}

[[de:cpp/container/unordered multimap/emplace hint]]
[[es:cpp/container/unordered multimap/emplace hint]]
[[fr:cpp/container/unordered multimap/emplace hint]]
[[it:cpp/container/unordered multimap/emplace hint]]
[[ja:cpp/container/unordered multimap/emplace hint]]
[[pt:cpp/container/unordered multimap/emplace hint]]
[[ru:cpp/container/unordered multimap/emplace hint]]
[[zh:cpp/container/unordered multimap/emplace hint]]</text>
      <sha1>2p4fagdistd5geqbeatqwb0nnpojsib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/empty</title>
    <ns>0</ns>
    <id>358</id>
    <revision>
      <id>50719</id>
      <parentid>41558</parentid>
      <timestamp>2013-06-01T03:37:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/empty|unordered_multimap}}

[[de:cpp/container/unordered multimap/empty]]
[[es:cpp/container/unordered multimap/empty]]
[[fr:cpp/container/unordered multimap/empty]]
[[it:cpp/container/unordered multimap/empty]]
[[ja:cpp/container/unordered multimap/empty]]
[[pt:cpp/container/unordered multimap/empty]]
[[ru:cpp/container/unordered multimap/empty]]
[[zh:cpp/container/unordered multimap/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/end</title>
    <ns>0</ns>
    <id>359</id>
    <revision>
      <id>50720</id>
      <parentid>41557</parentid>
      <timestamp>2013-06-01T03:37:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/end|unordered_multimap}}

[[de:cpp/container/unordered multimap/end]]
[[es:cpp/container/unordered multimap/end]]
[[fr:cpp/container/unordered multimap/end]]
[[it:cpp/container/unordered multimap/end]]
[[ja:cpp/container/unordered multimap/end]]
[[pt:cpp/container/unordered multimap/end]]
[[ru:cpp/container/unordered multimap/end]]
[[zh:cpp/container/unordered multimap/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/end(int)</title>
    <ns>0</ns>
    <id>9087</id>
    <redirect title="cpp/container/unordered multimap/end2" />
    <revision>
      <id>38153</id>
      <timestamp>2012-07-24T13:41:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multimap/end(int)]] to [[cpp/container/unordered multimap/end2]]: Text replace - &quot;/end(int)&quot; to &quot;/end2&quot;</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[cpp/container/unordered multimap/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/end2</title>
    <ns>0</ns>
    <id>360</id>
    <revision>
      <id>50721</id>
      <parentid>41556</parentid>
      <timestamp>2013-06-01T03:37:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/end2|unordered_multimap}}

[[de:cpp/container/unordered multimap/end2]]
[[es:cpp/container/unordered multimap/end2]]
[[fr:cpp/container/unordered multimap/end2]]
[[it:cpp/container/unordered multimap/end2]]
[[ja:cpp/container/unordered multimap/end2]]
[[pt:cpp/container/unordered multimap/end2]]
[[ru:cpp/container/unordered multimap/end2]]
[[zh:cpp/container/unordered multimap/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/equal range</title>
    <ns>0</ns>
    <id>361</id>
    <revision>
      <id>65096</id>
      <parentid>65082</parentid>
      <timestamp>2013-08-30T15:58:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="484">{{include page|cpp/container/equal_range_unord|unordered_multimap}}

[[de:cpp/container/unordered multimap/equal range]]
[[es:cpp/container/unordered multimap/equal range]]
[[fr:cpp/container/unordered multimap/equal range]]
[[it:cpp/container/unordered multimap/equal range]]
[[ja:cpp/container/unordered multimap/equal range]]
[[pt:cpp/container/unordered multimap/equal range]]
[[ru:cpp/container/unordered multimap/equal range]]
[[zh:cpp/container/unordered multimap/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/erase</title>
    <ns>0</ns>
    <id>362</id>
    <revision>
      <id>50723</id>
      <parentid>41554</parentid>
      <timestamp>2013-06-01T03:37:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="430">{{include page|cpp/container/erase assoc|unordered_multimap}}

[[de:cpp/container/unordered multimap/erase]]
[[es:cpp/container/unordered multimap/erase]]
[[fr:cpp/container/unordered multimap/erase]]
[[it:cpp/container/unordered multimap/erase]]
[[ja:cpp/container/unordered multimap/erase]]
[[pt:cpp/container/unordered multimap/erase]]
[[ru:cpp/container/unordered multimap/erase]]
[[zh:cpp/container/unordered multimap/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/extract</title>
    <ns>0</ns>
    <id>15671</id>
    <revision>
      <id>87128</id>
      <timestamp>2016-07-27T14:49:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="63">{{include page|cpp/container/extract assoc|unordered_multimap}}</text>
      <sha1>izi1u0tjezxvt8t95gki5b5edbhndc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/find</title>
    <ns>0</ns>
    <id>363</id>
    <revision>
      <id>50724</id>
      <parentid>41553</parentid>
      <timestamp>2013-06-01T03:37:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/find|unordered_multimap}}

[[de:cpp/container/unordered multimap/find]]
[[es:cpp/container/unordered multimap/find]]
[[fr:cpp/container/unordered multimap/find]]
[[it:cpp/container/unordered multimap/find]]
[[ja:cpp/container/unordered multimap/find]]
[[pt:cpp/container/unordered multimap/find]]
[[ru:cpp/container/unordered multimap/find]]
[[zh:cpp/container/unordered multimap/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/get allocator</title>
    <ns>0</ns>
    <id>364</id>
    <revision>
      <id>50725</id>
      <parentid>41552</parentid>
      <timestamp>2013-06-01T03:37:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="496">{{include page|cpp/container/get_allocator|unordered_multimap}}

[[de:cpp/container/unordered multimap/get allocator]]
[[es:cpp/container/unordered multimap/get allocator]]
[[fr:cpp/container/unordered multimap/get allocator]]
[[it:cpp/container/unordered multimap/get allocator]]
[[ja:cpp/container/unordered multimap/get allocator]]
[[pt:cpp/container/unordered multimap/get allocator]]
[[ru:cpp/container/unordered multimap/get allocator]]
[[zh:cpp/container/unordered multimap/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/hash function</title>
    <ns>0</ns>
    <id>365</id>
    <revision>
      <id>50726</id>
      <parentid>41551</parentid>
      <timestamp>2013-06-01T03:37:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="496">{{include page|cpp/container/hash_function|unordered_multimap}}

[[de:cpp/container/unordered multimap/hash function]]
[[es:cpp/container/unordered multimap/hash function]]
[[fr:cpp/container/unordered multimap/hash function]]
[[it:cpp/container/unordered multimap/hash function]]
[[ja:cpp/container/unordered multimap/hash function]]
[[pt:cpp/container/unordered multimap/hash function]]
[[ru:cpp/container/unordered multimap/hash function]]
[[zh:cpp/container/unordered multimap/hash function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/insert</title>
    <ns>0</ns>
    <id>366</id>
    <revision>
      <id>87118</id>
      <parentid>81208</parentid>
      <timestamp>2016-07-26T22:14:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>node handle insert</comment>
      <text xml:space="preserve" bytes="3288">{{cpp/container/unordered_multimap/title | insert}}
{{cpp/container/unordered_multimap/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
iterator insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class P &gt;
iterator insert( P&amp;&amp; value );
}}
{{dcl | num=2 | since=c++17 |
iterator insert( value_type&amp;&amp; value );
}}
{{dcl | num=3 | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl | num=4 | since=c++11 |
template&lt; class P &gt;
iterator insert( const_iterator hint, P&amp;&amp; value );
}}
{{dcl | num=4 | since=c++17 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 | since=c++11 |
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
iterator insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container.

@1-2@ inserts {{tt|value}}. The overload {{v|2}} is equivalent to {{c|emplace(std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@3-4@ inserts {{tt|value}}, using {{tt|hint}} as a non-binding suggestion to where the search should start. The overload {{v|4}} is equivalent to {{c|emplace_hint(hint, std::forward&lt;P&gt;(value))}} and only participates in overload resolution if {{c|std::is_constructible&lt;value_type, P&amp;&amp;&gt;::value {{==}} true}}.

@5@ inserts elements from range {{tt|[first, last)}}.

@6@ inserts elements from initializer list {{tt|ilist}}.

{{cpp/container/node_handle_insert_desc|unordered_multimap|7|8}}

{{cpp/container/note_iterator_invalidation|unordered_multimap|insert}}
===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the content}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-4@ Returns an iterator to the inserted element.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|unordered_multimap|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===
@1-4@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

@5-6@ Average case: {{tt|O(N)}}, where N is the number of elements to insert. Worse case: {{tt|O(N*size()+N)}}

@7-8@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_multimap}}
{{dsc inc | cpp/container/dsc emplace_hint |unordered_multimap}}
{{dsc end}}

[[de:cpp/container/unordered multimap/insert]]
[[es:cpp/container/unordered multimap/insert]]
[[fr:cpp/container/unordered multimap/insert]]
[[it:cpp/container/unordered multimap/insert]]
[[ja:cpp/container/unordered multimap/insert]]
[[pt:cpp/container/unordered multimap/insert]]
[[ru:cpp/container/unordered multimap/insert]]
[[zh:cpp/container/unordered multimap/insert]]</text>
      <sha1>owax3s444sdo0g0sqlf3ildjhqnt98v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/key eq</title>
    <ns>0</ns>
    <id>367</id>
    <revision>
      <id>50727</id>
      <parentid>41549</parentid>
      <timestamp>2013-06-01T03:37:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/key_eq|unordered_multimap}}

[[de:cpp/container/unordered multimap/key eq]]
[[es:cpp/container/unordered multimap/key eq]]
[[fr:cpp/container/unordered multimap/key eq]]
[[it:cpp/container/unordered multimap/key eq]]
[[ja:cpp/container/unordered multimap/key eq]]
[[pt:cpp/container/unordered multimap/key eq]]
[[ru:cpp/container/unordered multimap/key eq]]
[[zh:cpp/container/unordered multimap/key eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/load factor</title>
    <ns>0</ns>
    <id>368</id>
    <revision>
      <id>50728</id>
      <parentid>41548</parentid>
      <timestamp>2013-06-01T03:37:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="478">{{include page|cpp/container/load_factor|unordered_multimap}}

[[de:cpp/container/unordered multimap/load factor]]
[[es:cpp/container/unordered multimap/load factor]]
[[fr:cpp/container/unordered multimap/load factor]]
[[it:cpp/container/unordered multimap/load factor]]
[[ja:cpp/container/unordered multimap/load factor]]
[[pt:cpp/container/unordered multimap/load factor]]
[[ru:cpp/container/unordered multimap/load factor]]
[[zh:cpp/container/unordered multimap/load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/max bucket count</title>
    <ns>0</ns>
    <id>369</id>
    <revision>
      <id>50729</id>
      <parentid>41547</parentid>
      <timestamp>2013-06-01T03:37:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="523">{{include page|cpp/container/max_bucket_count|unordered_multimap}}

[[de:cpp/container/unordered multimap/max bucket count]]
[[es:cpp/container/unordered multimap/max bucket count]]
[[fr:cpp/container/unordered multimap/max bucket count]]
[[it:cpp/container/unordered multimap/max bucket count]]
[[ja:cpp/container/unordered multimap/max bucket count]]
[[pt:cpp/container/unordered multimap/max bucket count]]
[[ru:cpp/container/unordered multimap/max bucket count]]
[[zh:cpp/container/unordered multimap/max bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/max load factor</title>
    <ns>0</ns>
    <id>370</id>
    <revision>
      <id>50730</id>
      <parentid>41546</parentid>
      <timestamp>2013-06-01T03:37:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="514">{{include page|cpp/container/max_load_factor|unordered_multimap}}

[[de:cpp/container/unordered multimap/max load factor]]
[[es:cpp/container/unordered multimap/max load factor]]
[[fr:cpp/container/unordered multimap/max load factor]]
[[it:cpp/container/unordered multimap/max load factor]]
[[ja:cpp/container/unordered multimap/max load factor]]
[[pt:cpp/container/unordered multimap/max load factor]]
[[ru:cpp/container/unordered multimap/max load factor]]
[[zh:cpp/container/unordered multimap/max load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/max size</title>
    <ns>0</ns>
    <id>371</id>
    <revision>
      <id>50731</id>
      <parentid>41545</parentid>
      <timestamp>2013-06-01T03:37:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="451">{{include page|cpp/container/max_size|unordered_multimap}}

[[de:cpp/container/unordered multimap/max size]]
[[es:cpp/container/unordered multimap/max size]]
[[fr:cpp/container/unordered multimap/max size]]
[[it:cpp/container/unordered multimap/max size]]
[[ja:cpp/container/unordered multimap/max size]]
[[pt:cpp/container/unordered multimap/max size]]
[[ru:cpp/container/unordered multimap/max size]]
[[zh:cpp/container/unordered multimap/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/merge</title>
    <ns>0</ns>
    <id>15652</id>
    <revision>
      <id>87027</id>
      <timestamp>2016-07-21T15:36:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="61">{{include page|cpp/container/merge assoc|unordered_multimap}}</text>
      <sha1>seliynflul8xm44961i3b52zpaeatkk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/operator cmp</title>
    <ns>0</ns>
    <id>2010</id>
    <revision>
      <id>50732</id>
      <parentid>41543</parentid>
      <timestamp>2013-06-01T03:37:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="493">{{include page|cpp/container/operator_cmp_unord|unordered_multimap}}

[[de:cpp/container/unordered multimap/operator cmp]]
[[es:cpp/container/unordered multimap/operator cmp]]
[[fr:cpp/container/unordered multimap/operator cmp]]
[[it:cpp/container/unordered multimap/operator cmp]]
[[ja:cpp/container/unordered multimap/operator cmp]]
[[pt:cpp/container/unordered multimap/operator cmp]]
[[ru:cpp/container/unordered multimap/operator cmp]]
[[zh:cpp/container/unordered multimap/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/operator comp</title>
    <ns>0</ns>
    <id>4206</id>
    <redirect title="cpp/container/unordered multimap/operator cmp" />
    <revision>
      <id>15229</id>
      <timestamp>2011-12-08T01:09:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multimap/operator comp]] to [[cpp/container/unordered multimap/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[cpp/container/unordered multimap/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/operator=</title>
    <ns>0</ns>
    <id>372</id>
    <revision>
      <id>92050</id>
      <parentid>41544</parentid>
      <timestamp>2017-04-03T20:54:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="464">{{include page|cpp/container/operator{{=}}|unordered_multimap}}

[[de:cpp/container/unordered multimap/operator=]]
[[es:cpp/container/unordered multimap/operator=]]
[[fr:cpp/container/unordered multimap/operator=]]
[[it:cpp/container/unordered multimap/operator=]]
[[ja:cpp/container/unordered multimap/operator=]]
[[pt:cpp/container/unordered multimap/operator=]]
[[ru:cpp/container/unordered multimap/operator=]]
[[zh:cpp/container/unordered multimap/operator=]]</text>
      <sha1>d8j5nuhev36jtvx2xctj7pve7nyoaqy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/rehash</title>
    <ns>0</ns>
    <id>373</id>
    <revision>
      <id>50733</id>
      <parentid>41542</parentid>
      <timestamp>2013-06-01T03:37:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/rehash|unordered_multimap}}

[[de:cpp/container/unordered multimap/rehash]]
[[es:cpp/container/unordered multimap/rehash]]
[[fr:cpp/container/unordered multimap/rehash]]
[[it:cpp/container/unordered multimap/rehash]]
[[ja:cpp/container/unordered multimap/rehash]]
[[pt:cpp/container/unordered multimap/rehash]]
[[ru:cpp/container/unordered multimap/rehash]]
[[zh:cpp/container/unordered multimap/rehash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/reserve</title>
    <ns>0</ns>
    <id>374</id>
    <revision>
      <id>50734</id>
      <parentid>41541</parentid>
      <timestamp>2013-06-01T03:38:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/container/reserve unord|unordered_multimap}}

[[de:cpp/container/unordered multimap/reserve]]
[[es:cpp/container/unordered multimap/reserve]]
[[fr:cpp/container/unordered multimap/reserve]]
[[it:cpp/container/unordered multimap/reserve]]
[[ja:cpp/container/unordered multimap/reserve]]
[[pt:cpp/container/unordered multimap/reserve]]
[[ru:cpp/container/unordered multimap/reserve]]
[[zh:cpp/container/unordered multimap/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/size</title>
    <ns>0</ns>
    <id>375</id>
    <revision>
      <id>50735</id>
      <parentid>41540</parentid>
      <timestamp>2013-06-01T03:38:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/size|unordered_multimap}}

[[de:cpp/container/unordered multimap/size]]
[[es:cpp/container/unordered multimap/size]]
[[fr:cpp/container/unordered multimap/size]]
[[it:cpp/container/unordered multimap/size]]
[[ja:cpp/container/unordered multimap/size]]
[[pt:cpp/container/unordered multimap/size]]
[[ru:cpp/container/unordered multimap/size]]
[[zh:cpp/container/unordered multimap/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/std swap</title>
    <ns>0</ns>
    <id>3469</id>
    <redirect title="cpp/container/unordered multimap/swap2" />
    <revision>
      <id>13027</id>
      <timestamp>2011-11-03T18:41:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multimap/std swap]] to [[cpp/container/unordered multimap/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[cpp/container/unordered multimap/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/swap</title>
    <ns>0</ns>
    <id>376</id>
    <revision>
      <id>50736</id>
      <parentid>41539</parentid>
      <timestamp>2013-06-01T03:38:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/swap|unordered_multimap}}

[[de:cpp/container/unordered multimap/swap]]
[[es:cpp/container/unordered multimap/swap]]
[[fr:cpp/container/unordered multimap/swap]]
[[it:cpp/container/unordered multimap/swap]]
[[ja:cpp/container/unordered multimap/swap]]
[[pt:cpp/container/unordered multimap/swap]]
[[ru:cpp/container/unordered multimap/swap]]
[[zh:cpp/container/unordered multimap/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/swap2</title>
    <ns>0</ns>
    <id>2005</id>
    <revision>
      <id>50737</id>
      <parentid>41538</parentid>
      <timestamp>2013-06-01T03:38:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/swap2|unordered_multimap}}

[[de:cpp/container/unordered multimap/swap2]]
[[es:cpp/container/unordered multimap/swap2]]
[[fr:cpp/container/unordered multimap/swap2]]
[[it:cpp/container/unordered multimap/swap2]]
[[ja:cpp/container/unordered multimap/swap2]]
[[pt:cpp/container/unordered multimap/swap2]]
[[ru:cpp/container/unordered multimap/swap2]]
[[zh:cpp/container/unordered multimap/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/unordered multimap</title>
    <ns>0</ns>
    <id>378</id>
    <revision>
      <id>50738</id>
      <parentid>41537</parentid>
      <timestamp>2013-06-01T03:38:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="540">{{include page|cpp/container/constructor unord|unordered_multimap}}

[[de:cpp/container/unordered multimap/unordered multimap]]
[[es:cpp/container/unordered multimap/unordered multimap]]
[[fr:cpp/container/unordered multimap/unordered multimap]]
[[it:cpp/container/unordered multimap/unordered multimap]]
[[ja:cpp/container/unordered multimap/unordered multimap]]
[[pt:cpp/container/unordered multimap/unordered multimap]]
[[ru:cpp/container/unordered multimap/unordered multimap]]
[[zh:cpp/container/unordered multimap/unordered multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multimap/~unordered multimap</title>
    <ns>0</ns>
    <id>380</id>
    <revision>
      <id>50739</id>
      <parentid>41536</parentid>
      <timestamp>2013-06-01T03:38:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="541">{{include page|cpp/container/destructor|unordered_multimap}}

[[de:cpp/container/unordered multimap/~unordered multimap]]
[[es:cpp/container/unordered multimap/~unordered multimap]]
[[fr:cpp/container/unordered multimap/~unordered multimap]]
[[it:cpp/container/unordered multimap/~unordered multimap]]
[[ja:cpp/container/unordered multimap/~unordered multimap]]
[[pt:cpp/container/unordered multimap/~unordered multimap]]
[[ru:cpp/container/unordered multimap/~unordered multimap]]
[[zh:cpp/container/unordered multimap/~unordered multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset</title>
    <ns>0</ns>
    <id>381</id>
    <revision>
      <id>89135</id>
      <parentid>86987</parentid>
      <timestamp>2017-01-03T18:29:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="5623">{{cpp/title|unordered_multiset}}
{{cpp/container/unordered_multiset/navbar}}
{{dcl begin}}
{{dcl header|unordered_set}}
{{dcl|num=1| since=c++11|1=
template&lt;
    class Key,
    class Hash {{=}} std::hash&lt;Key&gt;,
    class KeyEqual {{=}} std::equal_to&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;Key&gt;
&gt; class unordered_multiset;
}} 
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key,
              class Hash = std::hash&lt;Key&gt;,
              class Pred = std::equal_to&lt;Key&gt;&gt;
    using unordered_multiset = std::unordered_multiset&lt;Key, Hash, Pred,
                                   std::pmr::polymorphic_allocator&lt;Key&gt;&gt;
}
}}
{{dcl end}}

Unordered multiset is an associative container that contains set of possibly non-unique objects of type Key. Search, insertion, and removal have average constant-time complexity.

Internally, the elements are not sorted in any particular order, but organized into buckets. Which bucket an element is placed into depends entirely on the hash of its value. This allows fast access to individual elements, since once hash is computed, it refers to the exact bucket the element is placed into.

The iteration order of this container is not required to be stable (so, for example, {{lc|std::equal}} cannot be used to compare two {{tt|std::unordered_multiset}}s), except that every group of elements whose keys compare ''equivalent'' (compare equal with {{lc|key_eq()}} as the comparator) forms a contiguous subrange in the iteration order, also accessible with {{lc|std::unordered_multiset::equal_range|equal_range()}}.

{{tt|std::unordered_multiset}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|UnorderedAssociativeContainer}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | unordered_multiset}}
{{dsc inc | cpp/container/dsc value_type | unordered_multiset}}
{{dsc inc | cpp/container/dsc size_type | unordered_multiset}}
{{dsc inc | cpp/container/dsc difference_type | unordered_multiset}}
{{dsc inc | cpp/container/dsc hasher | unordered_multiset}}
{{dsc inc | cpp/container/dsc key_equal | unordered_multiset}}
{{dsc inc | cpp/container/dsc allocator_type | unordered_multiset}}
{{dsc inc | cpp/container/dsc reference | unordered_multiset}}
{{dsc inc | cpp/container/dsc const_reference | unordered_multiset}}
{{dsc inc | cpp/container/dsc pointer | unordered_multiset}}
{{dsc inc | cpp/container/dsc const_pointer | unordered_multiset}}
{{dsc inc | cpp/container/dsc iterator | unordered_multiset}}
{{dsc inc | cpp/container/dsc const_iterator | unordered_multiset}}
{{dsc inc | cpp/container/dsc local_iterator | unordered_multiset}}
{{dsc inc | cpp/container/dsc const_local_iterator | unordered_multiset}}
{{dsc inc | cpp/container/dsc node_type | unordered_multiset}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | unordered_multiset}}
{{dsc inc | cpp/container/dsc destructor | unordered_multiset}}
{{dsc inc | cpp/container/dsc operator{{=}} | unordered_multiset}}
{{dsc inc | cpp/container/dsc get_allocator | unordered_multiset}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | unordered_multiset}}
{{dsc inc | cpp/container/dsc end | unordered_multiset}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | unordered_multiset}}
{{dsc inc | cpp/container/dsc size | unordered_multiset}}
{{dsc inc | cpp/container/dsc max_size | unordered_multiset}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | unordered_multiset}}
{{dsc inc | cpp/container/dsc insert | unordered_multiset}}
{{dsc inc | cpp/container/dsc emplace | unordered_multiset}}
{{dsc inc | cpp/container/dsc emplace_hint | unordered_multiset}}
{{dsc inc | cpp/container/dsc erase | unordered_multiset}}
{{dsc inc | cpp/container/dsc swap | unordered_multiset}}
{{dsc inc | cpp/container/dsc extract | unordered_multiset}}
{{dsc inc | cpp/container/dsc merge | unordered_multiset}}

{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc count | unordered_multiset}}
{{dsc inc | cpp/container/dsc find | unordered_multiset}}
{{dsc inc | cpp/container/dsc equal_range | unordered_multiset}}

{{dsc h2 | Bucket interface}}
{{dsc inc | cpp/container/dsc begin(int) | unordered_multiset}}
{{dsc inc | cpp/container/dsc end(int) | unordered_multiset}}
{{dsc inc | cpp/container/dsc bucket_count | unordered_multiset}}
{{dsc inc | cpp/container/dsc max_bucket_count | unordered_multiset}}
{{dsc inc | cpp/container/dsc bucket_size | unordered_multiset}}
{{dsc inc | cpp/container/dsc bucket | unordered_multiset}}

{{dsc h2 | Hash policy}}
{{dsc inc | cpp/container/dsc load_factor | unordered_multiset}}
{{dsc inc | cpp/container/dsc max_load_factor | unordered_multiset}}
{{dsc inc | cpp/container/dsc rehash | unordered_multiset}}
{{dsc inc | cpp/container/dsc reserve | unordered_multiset}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc hash_function | unordered_multiset}}
{{dsc inc | cpp/container/dsc key_eq | unordered_multiset}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_multiset}}
{{dsc inc | cpp/container/dsc swap2 | unordered_multiset}}
{{dsc end}}

===Notes===
{{cpp/container/assoc_note}}

[[de:cpp/container/unordered multiset]]
[[es:cpp/container/unordered multiset]]
[[fr:cpp/container/unordered multiset]]
[[it:cpp/container/unordered multiset]]
[[ja:cpp/container/unordered multiset]]
[[pt:cpp/container/unordered multiset]]
[[ru:cpp/container/unordered multiset]]
[[zh:cpp/container/unordered multiset]]</text>
      <sha1>phb505nonxrkp0744nup1kx632mk8xu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/begin</title>
    <ns>0</ns>
    <id>382</id>
    <revision>
      <id>50740</id>
      <parentid>41534</parentid>
      <timestamp>2013-06-01T03:38:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/begin|unordered_multiset}}

[[de:cpp/container/unordered multiset/begin]]
[[es:cpp/container/unordered multiset/begin]]
[[fr:cpp/container/unordered multiset/begin]]
[[it:cpp/container/unordered multiset/begin]]
[[ja:cpp/container/unordered multiset/begin]]
[[pt:cpp/container/unordered multiset/begin]]
[[ru:cpp/container/unordered multiset/begin]]
[[zh:cpp/container/unordered multiset/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/begin(int)</title>
    <ns>0</ns>
    <id>9083</id>
    <redirect title="cpp/container/unordered multiset/begin2" />
    <revision>
      <id>38135</id>
      <timestamp>2012-07-24T13:28:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multiset/begin(int)]] to [[cpp/container/unordered multiset/begin2]]: Text replace - &quot;/begin(int)&quot; to &quot;/begin2&quot;</comment>
      <text xml:space="preserve" bytes="53">#REDIRECT [[cpp/container/unordered multiset/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/begin2</title>
    <ns>0</ns>
    <id>383</id>
    <revision>
      <id>50741</id>
      <parentid>41533</parentid>
      <timestamp>2013-06-01T03:38:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/begin2|unordered_multiset}}

[[de:cpp/container/unordered multiset/begin2]]
[[es:cpp/container/unordered multiset/begin2]]
[[fr:cpp/container/unordered multiset/begin2]]
[[it:cpp/container/unordered multiset/begin2]]
[[ja:cpp/container/unordered multiset/begin2]]
[[pt:cpp/container/unordered multiset/begin2]]
[[ru:cpp/container/unordered multiset/begin2]]
[[zh:cpp/container/unordered multiset/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/bucket</title>
    <ns>0</ns>
    <id>384</id>
    <revision>
      <id>50742</id>
      <parentid>41532</parentid>
      <timestamp>2013-06-01T03:38:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/bucket|unordered_multiset}}

[[de:cpp/container/unordered multiset/bucket]]
[[es:cpp/container/unordered multiset/bucket]]
[[fr:cpp/container/unordered multiset/bucket]]
[[it:cpp/container/unordered multiset/bucket]]
[[ja:cpp/container/unordered multiset/bucket]]
[[pt:cpp/container/unordered multiset/bucket]]
[[ru:cpp/container/unordered multiset/bucket]]
[[zh:cpp/container/unordered multiset/bucket]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/bucket count</title>
    <ns>0</ns>
    <id>385</id>
    <revision>
      <id>50743</id>
      <parentid>41531</parentid>
      <timestamp>2013-06-01T03:38:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="487">{{include page|cpp/container/bucket_count|unordered_multiset}}

[[de:cpp/container/unordered multiset/bucket count]]
[[es:cpp/container/unordered multiset/bucket count]]
[[fr:cpp/container/unordered multiset/bucket count]]
[[it:cpp/container/unordered multiset/bucket count]]
[[ja:cpp/container/unordered multiset/bucket count]]
[[pt:cpp/container/unordered multiset/bucket count]]
[[ru:cpp/container/unordered multiset/bucket count]]
[[zh:cpp/container/unordered multiset/bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/bucket size</title>
    <ns>0</ns>
    <id>386</id>
    <revision>
      <id>50744</id>
      <parentid>41530</parentid>
      <timestamp>2013-06-01T03:38:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="478">{{include page|cpp/container/bucket_size|unordered_multiset}}

[[de:cpp/container/unordered multiset/bucket size]]
[[es:cpp/container/unordered multiset/bucket size]]
[[fr:cpp/container/unordered multiset/bucket size]]
[[it:cpp/container/unordered multiset/bucket size]]
[[ja:cpp/container/unordered multiset/bucket size]]
[[pt:cpp/container/unordered multiset/bucket size]]
[[ru:cpp/container/unordered multiset/bucket size]]
[[zh:cpp/container/unordered multiset/bucket size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/clear</title>
    <ns>0</ns>
    <id>387</id>
    <revision>
      <id>50745</id>
      <parentid>41529</parentid>
      <timestamp>2013-06-01T03:38:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/clear|unordered_multiset}}

[[de:cpp/container/unordered multiset/clear]]
[[es:cpp/container/unordered multiset/clear]]
[[fr:cpp/container/unordered multiset/clear]]
[[it:cpp/container/unordered multiset/clear]]
[[ja:cpp/container/unordered multiset/clear]]
[[pt:cpp/container/unordered multiset/clear]]
[[ru:cpp/container/unordered multiset/clear]]
[[zh:cpp/container/unordered multiset/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/count</title>
    <ns>0</ns>
    <id>388</id>
    <revision>
      <id>65128</id>
      <parentid>50746</parentid>
      <timestamp>2013-08-30T16:36:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="430">{{include page|cpp/container/count_unord|unordered_multiset}}

[[de:cpp/container/unordered multiset/count]]
[[es:cpp/container/unordered multiset/count]]
[[fr:cpp/container/unordered multiset/count]]
[[it:cpp/container/unordered multiset/count]]
[[ja:cpp/container/unordered multiset/count]]
[[pt:cpp/container/unordered multiset/count]]
[[ru:cpp/container/unordered multiset/count]]
[[zh:cpp/container/unordered multiset/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/emplace</title>
    <ns>0</ns>
    <id>389</id>
    <revision>
      <id>50747</id>
      <parentid>41527</parentid>
      <timestamp>2013-06-01T03:38:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/container/emplace assoc|unordered_multiset}}

[[de:cpp/container/unordered multiset/emplace]]
[[es:cpp/container/unordered multiset/emplace]]
[[fr:cpp/container/unordered multiset/emplace]]
[[it:cpp/container/unordered multiset/emplace]]
[[ja:cpp/container/unordered multiset/emplace]]
[[pt:cpp/container/unordered multiset/emplace]]
[[ru:cpp/container/unordered multiset/emplace]]
[[zh:cpp/container/unordered multiset/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/emplace hint</title>
    <ns>0</ns>
    <id>390</id>
    <revision>
      <id>85280</id>
      <parentid>65116</parentid>
      <timestamp>2016-04-13T12:51:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>exception guarantee here too</comment>
      <text xml:space="preserve" bytes="1737">{{cpp/container/unordered_multiset/title | emplace_hint}}
{{cpp/container/unordered_multiset/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the container, using {{tt|hint}} as a suggestion where the element should go. The element is constructed in-place, i.e. no copy or move operations are performed. 

The constructor of the element is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}. 

{{cpp/container/note_iterator_invalidation|unordered_multiset|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the new element}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Amortized constant on average, worst case linear in the size of the container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_multiset}}
{{dsc inc | cpp/container/dsc insert |unordered_multiset}}
{{dsc end}}

[[de:cpp/container/unordered multiset/emplace hint]]
[[es:cpp/container/unordered multiset/emplace hint]]
[[fr:cpp/container/unordered multiset/emplace hint]]
[[it:cpp/container/unordered multiset/emplace hint]]
[[ja:cpp/container/unordered multiset/emplace hint]]
[[pt:cpp/container/unordered multiset/emplace hint]]
[[ru:cpp/container/unordered multiset/emplace hint]]
[[zh:cpp/container/unordered multiset/emplace hint]]</text>
      <sha1>5dvt9f06ix0tf65kt0fh4l7cxvepqoy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/empty</title>
    <ns>0</ns>
    <id>391</id>
    <revision>
      <id>50749</id>
      <parentid>41525</parentid>
      <timestamp>2013-06-01T03:38:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/empty|unordered_multiset}}

[[de:cpp/container/unordered multiset/empty]]
[[es:cpp/container/unordered multiset/empty]]
[[fr:cpp/container/unordered multiset/empty]]
[[it:cpp/container/unordered multiset/empty]]
[[ja:cpp/container/unordered multiset/empty]]
[[pt:cpp/container/unordered multiset/empty]]
[[ru:cpp/container/unordered multiset/empty]]
[[zh:cpp/container/unordered multiset/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/end</title>
    <ns>0</ns>
    <id>392</id>
    <revision>
      <id>50750</id>
      <parentid>41524</parentid>
      <timestamp>2013-06-01T03:38:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/end|unordered_multiset}}

[[de:cpp/container/unordered multiset/end]]
[[es:cpp/container/unordered multiset/end]]
[[fr:cpp/container/unordered multiset/end]]
[[it:cpp/container/unordered multiset/end]]
[[ja:cpp/container/unordered multiset/end]]
[[pt:cpp/container/unordered multiset/end]]
[[ru:cpp/container/unordered multiset/end]]
[[zh:cpp/container/unordered multiset/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/end(int)</title>
    <ns>0</ns>
    <id>9088</id>
    <redirect title="cpp/container/unordered multiset/end2" />
    <revision>
      <id>38155</id>
      <timestamp>2012-07-24T13:41:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multiset/end(int)]] to [[cpp/container/unordered multiset/end2]]: Text replace - &quot;/end(int)&quot; to &quot;/end2&quot;</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[cpp/container/unordered multiset/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/end2</title>
    <ns>0</ns>
    <id>393</id>
    <revision>
      <id>50751</id>
      <parentid>41523</parentid>
      <timestamp>2013-06-01T03:38:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/end2|unordered_multiset}}

[[de:cpp/container/unordered multiset/end2]]
[[es:cpp/container/unordered multiset/end2]]
[[fr:cpp/container/unordered multiset/end2]]
[[it:cpp/container/unordered multiset/end2]]
[[ja:cpp/container/unordered multiset/end2]]
[[pt:cpp/container/unordered multiset/end2]]
[[ru:cpp/container/unordered multiset/end2]]
[[zh:cpp/container/unordered multiset/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/equal range</title>
    <ns>0</ns>
    <id>394</id>
    <revision>
      <id>65095</id>
      <parentid>65081</parentid>
      <timestamp>2013-08-30T15:58:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="484">{{include page|cpp/container/equal_range_unord|unordered_multiset}}

[[de:cpp/container/unordered multiset/equal range]]
[[es:cpp/container/unordered multiset/equal range]]
[[fr:cpp/container/unordered multiset/equal range]]
[[it:cpp/container/unordered multiset/equal range]]
[[ja:cpp/container/unordered multiset/equal range]]
[[pt:cpp/container/unordered multiset/equal range]]
[[ru:cpp/container/unordered multiset/equal range]]
[[zh:cpp/container/unordered multiset/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/erase</title>
    <ns>0</ns>
    <id>395</id>
    <revision>
      <id>50753</id>
      <parentid>43287</parentid>
      <timestamp>2013-06-01T03:38:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="430">{{include page|cpp/container/erase assoc|unordered_multiset}}

[[de:cpp/container/unordered multiset/erase]]
[[es:cpp/container/unordered multiset/erase]]
[[fr:cpp/container/unordered multiset/erase]]
[[it:cpp/container/unordered multiset/erase]]
[[ja:cpp/container/unordered multiset/erase]]
[[pt:cpp/container/unordered multiset/erase]]
[[ru:cpp/container/unordered multiset/erase]]
[[zh:cpp/container/unordered multiset/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/extract</title>
    <ns>0</ns>
    <id>15669</id>
    <revision>
      <id>87126</id>
      <timestamp>2016-07-27T14:49:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="63">{{include page|cpp/container/extract assoc|unordered_multiset}}</text>
      <sha1>o8ofaql0v168xxeds1wfio4a0iejypy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/find</title>
    <ns>0</ns>
    <id>396</id>
    <revision>
      <id>50754</id>
      <parentid>43280</parentid>
      <timestamp>2013-06-01T03:38:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/find|unordered_multiset}}

[[de:cpp/container/unordered multiset/find]]
[[es:cpp/container/unordered multiset/find]]
[[fr:cpp/container/unordered multiset/find]]
[[it:cpp/container/unordered multiset/find]]
[[ja:cpp/container/unordered multiset/find]]
[[pt:cpp/container/unordered multiset/find]]
[[ru:cpp/container/unordered multiset/find]]
[[zh:cpp/container/unordered multiset/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/get allocator</title>
    <ns>0</ns>
    <id>397</id>
    <revision>
      <id>50755</id>
      <parentid>43273</parentid>
      <timestamp>2013-06-01T03:38:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="496">{{include page|cpp/container/get_allocator|unordered_multiset}}

[[de:cpp/container/unordered multiset/get allocator]]
[[es:cpp/container/unordered multiset/get allocator]]
[[fr:cpp/container/unordered multiset/get allocator]]
[[it:cpp/container/unordered multiset/get allocator]]
[[ja:cpp/container/unordered multiset/get allocator]]
[[pt:cpp/container/unordered multiset/get allocator]]
[[ru:cpp/container/unordered multiset/get allocator]]
[[zh:cpp/container/unordered multiset/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/hash function</title>
    <ns>0</ns>
    <id>398</id>
    <revision>
      <id>50756</id>
      <parentid>43267</parentid>
      <timestamp>2013-06-01T03:38:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="496">{{include page|cpp/container/hash_function|unordered_multiset}}

[[de:cpp/container/unordered multiset/hash function]]
[[es:cpp/container/unordered multiset/hash function]]
[[fr:cpp/container/unordered multiset/hash function]]
[[it:cpp/container/unordered multiset/hash function]]
[[ja:cpp/container/unordered multiset/hash function]]
[[pt:cpp/container/unordered multiset/hash function]]
[[ru:cpp/container/unordered multiset/hash function]]
[[zh:cpp/container/unordered multiset/hash function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/insert</title>
    <ns>0</ns>
    <id>399</id>
    <revision>
      <id>87117</id>
      <parentid>81207</parentid>
      <timestamp>2016-07-26T22:12:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>node handle insert</comment>
      <text xml:space="preserve" bytes="2712">{{cpp/container/unordered_multiset/title | insert}}
{{cpp/container/unordered_multiset/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
iterator insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
iterator insert( value_type&amp;&amp; value );
}}
{{dcl | num=3 | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl | num=4 | since=c++11 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 | since=c++11 |
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
iterator insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container.

@1-2@ Inserts {{tt|value}}.

@3-4@ Inserts {{tt|value}}, using {{tt|hint}} as a non-binding suggestion to where the search should start.

@5@ Inserts elements from range {{tt|[first, last)}}.

@6@ Inserts elements from initializer list {{tt|ilist}}.

{{cpp/container/node_handle_insert_desc|unordered_multiset|7|8}}

{{cpp/container/note_iterator_invalidation|unordered_multiset|insert}}
===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the content}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-4@ Returns an iterator to the inserted element.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|unordered_multiset|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===
@1-4@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

@5-6@ Average case: {{tt|O(N)}}, where N is the number of elements to insert. Worse case: {{tt|O(N*size()+N)}}

@7-8@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_multiset}}
{{dsc inc | cpp/container/dsc emplace_hint |unordered_multiset}}
{{dsc end}}

[[de:cpp/container/unordered multiset/insert]]
[[es:cpp/container/unordered multiset/insert]]
[[fr:cpp/container/unordered multiset/insert]]
[[it:cpp/container/unordered multiset/insert]]
[[ja:cpp/container/unordered multiset/insert]]
[[pt:cpp/container/unordered multiset/insert]]
[[ru:cpp/container/unordered multiset/insert]]
[[zh:cpp/container/unordered multiset/insert]]</text>
      <sha1>i11om6x0mzijctnjz9o1ejtyfxmfz00</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/key eq</title>
    <ns>0</ns>
    <id>400</id>
    <revision>
      <id>50757</id>
      <parentid>43254</parentid>
      <timestamp>2013-06-01T03:38:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/key_eq|unordered_multiset}}

[[de:cpp/container/unordered multiset/key eq]]
[[es:cpp/container/unordered multiset/key eq]]
[[fr:cpp/container/unordered multiset/key eq]]
[[it:cpp/container/unordered multiset/key eq]]
[[ja:cpp/container/unordered multiset/key eq]]
[[pt:cpp/container/unordered multiset/key eq]]
[[ru:cpp/container/unordered multiset/key eq]]
[[zh:cpp/container/unordered multiset/key eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/load factor</title>
    <ns>0</ns>
    <id>401</id>
    <revision>
      <id>50758</id>
      <parentid>43247</parentid>
      <timestamp>2013-06-01T03:38:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="478">{{include page|cpp/container/load_factor|unordered_multiset}}

[[de:cpp/container/unordered multiset/load factor]]
[[es:cpp/container/unordered multiset/load factor]]
[[fr:cpp/container/unordered multiset/load factor]]
[[it:cpp/container/unordered multiset/load factor]]
[[ja:cpp/container/unordered multiset/load factor]]
[[pt:cpp/container/unordered multiset/load factor]]
[[ru:cpp/container/unordered multiset/load factor]]
[[zh:cpp/container/unordered multiset/load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/max bucket count</title>
    <ns>0</ns>
    <id>402</id>
    <revision>
      <id>50759</id>
      <parentid>43241</parentid>
      <timestamp>2013-06-01T03:38:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="523">{{include page|cpp/container/max_bucket_count|unordered_multiset}}

[[de:cpp/container/unordered multiset/max bucket count]]
[[es:cpp/container/unordered multiset/max bucket count]]
[[fr:cpp/container/unordered multiset/max bucket count]]
[[it:cpp/container/unordered multiset/max bucket count]]
[[ja:cpp/container/unordered multiset/max bucket count]]
[[pt:cpp/container/unordered multiset/max bucket count]]
[[ru:cpp/container/unordered multiset/max bucket count]]
[[zh:cpp/container/unordered multiset/max bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/max load factor</title>
    <ns>0</ns>
    <id>403</id>
    <revision>
      <id>50760</id>
      <parentid>43236</parentid>
      <timestamp>2013-06-01T03:38:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="514">{{include page|cpp/container/max_load_factor|unordered_multiset}}

[[de:cpp/container/unordered multiset/max load factor]]
[[es:cpp/container/unordered multiset/max load factor]]
[[fr:cpp/container/unordered multiset/max load factor]]
[[it:cpp/container/unordered multiset/max load factor]]
[[ja:cpp/container/unordered multiset/max load factor]]
[[pt:cpp/container/unordered multiset/max load factor]]
[[ru:cpp/container/unordered multiset/max load factor]]
[[zh:cpp/container/unordered multiset/max load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/max size</title>
    <ns>0</ns>
    <id>404</id>
    <revision>
      <id>50761</id>
      <parentid>43228</parentid>
      <timestamp>2013-06-01T03:38:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="451">{{include page|cpp/container/max_size|unordered_multiset}}

[[de:cpp/container/unordered multiset/max size]]
[[es:cpp/container/unordered multiset/max size]]
[[fr:cpp/container/unordered multiset/max size]]
[[it:cpp/container/unordered multiset/max size]]
[[ja:cpp/container/unordered multiset/max size]]
[[pt:cpp/container/unordered multiset/max size]]
[[ru:cpp/container/unordered multiset/max size]]
[[zh:cpp/container/unordered multiset/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/merge</title>
    <ns>0</ns>
    <id>15651</id>
    <revision>
      <id>87026</id>
      <timestamp>2016-07-21T15:36:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="61">{{include page|cpp/container/merge assoc|unordered_multiset}}</text>
      <sha1>to8tkoqmun0j609nhgxnxurhwzif2v7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/operator cmp</title>
    <ns>0</ns>
    <id>2009</id>
    <revision>
      <id>50762</id>
      <parentid>43214</parentid>
      <timestamp>2013-06-01T03:38:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="493">{{include page|cpp/container/operator_cmp_unord|unordered_multiset}}

[[de:cpp/container/unordered multiset/operator cmp]]
[[es:cpp/container/unordered multiset/operator cmp]]
[[fr:cpp/container/unordered multiset/operator cmp]]
[[it:cpp/container/unordered multiset/operator cmp]]
[[ja:cpp/container/unordered multiset/operator cmp]]
[[pt:cpp/container/unordered multiset/operator cmp]]
[[ru:cpp/container/unordered multiset/operator cmp]]
[[zh:cpp/container/unordered multiset/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/operator comp</title>
    <ns>0</ns>
    <id>4204</id>
    <redirect title="cpp/container/unordered multiset/operator cmp" />
    <revision>
      <id>15224</id>
      <timestamp>2011-12-08T01:02:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multiset/operator comp]] to [[cpp/container/unordered multiset/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[cpp/container/unordered multiset/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/operator=</title>
    <ns>0</ns>
    <id>405</id>
    <revision>
      <id>92048</id>
      <parentid>43221</parentid>
      <timestamp>2017-04-03T20:54:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="464">{{include page|cpp/container/operator{{=}}|unordered_multiset}}

[[de:cpp/container/unordered multiset/operator=]]
[[es:cpp/container/unordered multiset/operator=]]
[[fr:cpp/container/unordered multiset/operator=]]
[[it:cpp/container/unordered multiset/operator=]]
[[ja:cpp/container/unordered multiset/operator=]]
[[pt:cpp/container/unordered multiset/operator=]]
[[ru:cpp/container/unordered multiset/operator=]]
[[zh:cpp/container/unordered multiset/operator=]]</text>
      <sha1>ts5brtawm9zsz6094vct57v8jfanruk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/rehash</title>
    <ns>0</ns>
    <id>406</id>
    <revision>
      <id>50763</id>
      <parentid>43211</parentid>
      <timestamp>2013-06-01T03:38:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/rehash|unordered_multiset}}

[[de:cpp/container/unordered multiset/rehash]]
[[es:cpp/container/unordered multiset/rehash]]
[[fr:cpp/container/unordered multiset/rehash]]
[[it:cpp/container/unordered multiset/rehash]]
[[ja:cpp/container/unordered multiset/rehash]]
[[pt:cpp/container/unordered multiset/rehash]]
[[ru:cpp/container/unordered multiset/rehash]]
[[zh:cpp/container/unordered multiset/rehash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/reserve</title>
    <ns>0</ns>
    <id>407</id>
    <revision>
      <id>50764</id>
      <parentid>43204</parentid>
      <timestamp>2013-06-01T03:38:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/container/reserve unord|unordered_multiset}}

[[de:cpp/container/unordered multiset/reserve]]
[[es:cpp/container/unordered multiset/reserve]]
[[fr:cpp/container/unordered multiset/reserve]]
[[it:cpp/container/unordered multiset/reserve]]
[[ja:cpp/container/unordered multiset/reserve]]
[[pt:cpp/container/unordered multiset/reserve]]
[[ru:cpp/container/unordered multiset/reserve]]
[[zh:cpp/container/unordered multiset/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/size</title>
    <ns>0</ns>
    <id>408</id>
    <revision>
      <id>50765</id>
      <parentid>43198</parentid>
      <timestamp>2013-06-01T03:38:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/size|unordered_multiset}}

[[de:cpp/container/unordered multiset/size]]
[[es:cpp/container/unordered multiset/size]]
[[fr:cpp/container/unordered multiset/size]]
[[it:cpp/container/unordered multiset/size]]
[[ja:cpp/container/unordered multiset/size]]
[[pt:cpp/container/unordered multiset/size]]
[[ru:cpp/container/unordered multiset/size]]
[[zh:cpp/container/unordered multiset/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/std swap</title>
    <ns>0</ns>
    <id>3470</id>
    <redirect title="cpp/container/unordered multiset/swap2" />
    <revision>
      <id>13029</id>
      <timestamp>2011-11-03T18:41:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered multiset/std swap]] to [[cpp/container/unordered multiset/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[cpp/container/unordered multiset/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/swap</title>
    <ns>0</ns>
    <id>409</id>
    <revision>
      <id>50766</id>
      <parentid>43191</parentid>
      <timestamp>2013-06-01T03:38:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="415">{{include page|cpp/container/swap|unordered_multiset}}

[[de:cpp/container/unordered multiset/swap]]
[[es:cpp/container/unordered multiset/swap]]
[[fr:cpp/container/unordered multiset/swap]]
[[it:cpp/container/unordered multiset/swap]]
[[ja:cpp/container/unordered multiset/swap]]
[[pt:cpp/container/unordered multiset/swap]]
[[ru:cpp/container/unordered multiset/swap]]
[[zh:cpp/container/unordered multiset/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/swap2</title>
    <ns>0</ns>
    <id>2003</id>
    <revision>
      <id>50767</id>
      <parentid>43186</parentid>
      <timestamp>2013-06-01T03:38:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="424">{{include page|cpp/container/swap2|unordered_multiset}}

[[de:cpp/container/unordered multiset/swap2]]
[[es:cpp/container/unordered multiset/swap2]]
[[fr:cpp/container/unordered multiset/swap2]]
[[it:cpp/container/unordered multiset/swap2]]
[[ja:cpp/container/unordered multiset/swap2]]
[[pt:cpp/container/unordered multiset/swap2]]
[[ru:cpp/container/unordered multiset/swap2]]
[[zh:cpp/container/unordered multiset/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/unordered multiset</title>
    <ns>0</ns>
    <id>410</id>
    <revision>
      <id>50768</id>
      <parentid>43178</parentid>
      <timestamp>2013-06-01T03:39:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="540">{{include page|cpp/container/constructor unord|unordered_multiset}}

[[de:cpp/container/unordered multiset/unordered multiset]]
[[es:cpp/container/unordered multiset/unordered multiset]]
[[fr:cpp/container/unordered multiset/unordered multiset]]
[[it:cpp/container/unordered multiset/unordered multiset]]
[[ja:cpp/container/unordered multiset/unordered multiset]]
[[pt:cpp/container/unordered multiset/unordered multiset]]
[[ru:cpp/container/unordered multiset/unordered multiset]]
[[zh:cpp/container/unordered multiset/unordered multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered multiset/~unordered multiset</title>
    <ns>0</ns>
    <id>411</id>
    <revision>
      <id>50769</id>
      <parentid>43171</parentid>
      <timestamp>2013-06-01T03:39:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="541">{{include page|cpp/container/destructor|unordered_multiset}}

[[de:cpp/container/unordered multiset/~unordered multiset]]
[[es:cpp/container/unordered multiset/~unordered multiset]]
[[fr:cpp/container/unordered multiset/~unordered multiset]]
[[it:cpp/container/unordered multiset/~unordered multiset]]
[[ja:cpp/container/unordered multiset/~unordered multiset]]
[[pt:cpp/container/unordered multiset/~unordered multiset]]
[[ru:cpp/container/unordered multiset/~unordered multiset]]
[[zh:cpp/container/unordered multiset/~unordered multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set</title>
    <ns>0</ns>
    <id>412</id>
    <revision>
      <id>89134</id>
      <parentid>87975</parentid>
      <timestamp>2017-01-03T18:28:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="5092">{{cpp/title|unordered_set}}
{{cpp/container/unordered_set/navbar}}
{{dcl begin}}
{{dcl header|unordered_set }}
{{dcl | num=1| since=c++11 |1=
template&lt;
    class Key,
    class Hash {{=}} std::hash&lt;Key&gt;,
    class KeyEqual {{=}} std::equal_to&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;Key&gt;
&gt; class unordered_set;
}} 
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class Key,
              class Hash = std::hash&lt;Key&gt;,
              class Pred = std::equal_to&lt;Key&gt;&gt;
    using unordered_set = std::unordered_set&lt;Key, Hash, Pred,
                                             std::pmr::polymorphic_allocator&lt;Key&gt;&gt;;
}
}}
{{dcl end}}

Unordered set is an associative container that contains a set of unique objects of type Key. Search, insertion, and removal have average constant-time complexity.

Internally, the elements are not sorted in any particular order, but organized into buckets. Which bucket an element is placed into depends entirely on the hash of its value. This allows fast access to individual elements, since once a hash is computed, it refers to the exact bucket the element is placed into.

Container elements may not be modified (even by non const iterators) since modification could change an element's hash and corrupt the container.

{{tt|std::unordered_set}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|UnorderedAssociativeContainer}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc key_type | unordered_set}}
{{dsc inc | cpp/container/dsc value_type | unordered_set}}
{{dsc inc | cpp/container/dsc size_type | unordered_set}}
{{dsc inc | cpp/container/dsc difference_type | unordered_set}}
{{dsc inc | cpp/container/dsc hasher | unordered_set}}
{{dsc inc | cpp/container/dsc key_equal | unordered_set}}
{{dsc inc | cpp/container/dsc allocator_type | unordered_set}}
{{dsc inc | cpp/container/dsc reference | unordered_set}}
{{dsc inc | cpp/container/dsc const_reference | unordered_set}}
{{dsc inc | cpp/container/dsc pointer | unordered_set}}
{{dsc inc | cpp/container/dsc const_pointer | unordered_set}}
{{dsc inc | cpp/container/dsc iterator | unordered_set}}
{{dsc inc | cpp/container/dsc const_iterator | unordered_set}}
{{dsc inc | cpp/container/dsc local_iterator | unordered_set}}
{{dsc inc | cpp/container/dsc const_local_iterator | unordered_set}}
{{dsc inc | cpp/container/dsc node_type | unordered_set}}
{{dsc inc | cpp/container/dsc insert_return_type | unordered_set}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | unordered_set}}
{{dsc inc | cpp/container/dsc destructor | unordered_set}}
{{dsc inc | cpp/container/dsc operator{{=}} | unordered_set}}
{{dsc inc | cpp/container/dsc get_allocator | unordered_set}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | unordered_set}}
{{dsc inc | cpp/container/dsc end | unordered_set}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | unordered_set}}
{{dsc inc | cpp/container/dsc size | unordered_set}}
{{dsc inc | cpp/container/dsc max_size | unordered_set}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | unordered_set}}
{{dsc inc | cpp/container/dsc insert | unordered_set}}
{{dsc inc | cpp/container/dsc emplace | unordered_set}}
{{dsc inc | cpp/container/dsc emplace_hint | unordered_set}}
{{dsc inc | cpp/container/dsc erase | unordered_set}}
{{dsc inc | cpp/container/dsc swap | unordered_set}}
{{dsc inc | cpp/container/dsc extract| unordered_set}}
{{dsc inc | cpp/container/dsc merge | unordered_set}}

{{dsc h2 | Lookup}}
{{dsc inc | cpp/container/dsc count | unordered_set}}
{{dsc inc | cpp/container/dsc find | unordered_set}}
{{dsc inc | cpp/container/dsc equal_range | unordered_set}}

{{dsc h2 | Bucket interface}}
{{dsc inc | cpp/container/dsc begin(int) | unordered_set}}
{{dsc inc | cpp/container/dsc end(int) | unordered_set}}
{{dsc inc | cpp/container/dsc bucket_count | unordered_set}}
{{dsc inc | cpp/container/dsc max_bucket_count | unordered_set}}
{{dsc inc | cpp/container/dsc bucket_size | unordered_set}}
{{dsc inc | cpp/container/dsc bucket | unordered_set}}

{{dsc h2 | Hash policy}}
{{dsc inc | cpp/container/dsc load_factor | unordered_set}}
{{dsc inc | cpp/container/dsc max_load_factor | unordered_set}}
{{dsc inc | cpp/container/dsc rehash | unordered_set}}
{{dsc inc | cpp/container/dsc reserve | unordered_set}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/container/dsc hash_function | unordered_set}}
{{dsc inc | cpp/container/dsc key_eq | unordered_set}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_set}}
{{dsc inc | cpp/container/dsc swap2 | unordered_set}}
{{dsc end}}

===Notes===
{{cpp/container/assoc_note}}

[[de:cpp/container/unordered set]]
[[es:cpp/container/unordered set]]
[[fr:cpp/container/unordered set]]
[[it:cpp/container/unordered set]]
[[ja:cpp/container/unordered set]]
[[pt:cpp/container/unordered set]]
[[ru:cpp/container/unordered set]]
[[zh:cpp/container/unordered set]]</text>
      <sha1>c5itbp0maq0gfuum81d20thmnux0frs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/begin</title>
    <ns>0</ns>
    <id>413</id>
    <revision>
      <id>50770</id>
      <parentid>43157</parentid>
      <timestamp>2013-06-01T03:39:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/begin|unordered_set}}

[[de:cpp/container/unordered set/begin]]
[[es:cpp/container/unordered set/begin]]
[[fr:cpp/container/unordered set/begin]]
[[it:cpp/container/unordered set/begin]]
[[ja:cpp/container/unordered set/begin]]
[[pt:cpp/container/unordered set/begin]]
[[ru:cpp/container/unordered set/begin]]
[[zh:cpp/container/unordered set/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/begin(int)</title>
    <ns>0</ns>
    <id>9084</id>
    <redirect title="cpp/container/unordered set/begin2" />
    <revision>
      <id>38137</id>
      <timestamp>2012-07-24T13:29:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered set/begin(int)]] to [[cpp/container/unordered set/begin2]]: Text replace - &quot;/begin(int)&quot; to &quot;/begin2&quot;</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[cpp/container/unordered set/begin2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/begin2</title>
    <ns>0</ns>
    <id>414</id>
    <revision>
      <id>90322</id>
      <parentid>90307</parentid>
      <timestamp>2017-02-20T23:39:51Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 90307 by [[Special:Contributions/Mgkrupa|Mgkrupa]] ([[User talk:Mgkrupa|talk]])</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/begin2|unordered_set}}

[[de:cpp/container/unordered set/begin2]]
[[es:cpp/container/unordered set/begin2]]
[[fr:cpp/container/unordered set/begin2]]
[[it:cpp/container/unordered set/begin2]]
[[ja:cpp/container/unordered set/begin2]]
[[pt:cpp/container/unordered set/begin2]]
[[ru:cpp/container/unordered set/begin2]]
[[zh:cpp/container/unordered set/begin2]]</text>
      <sha1>fl4mi704plbosbix75i6rri1bha7je4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/bucket</title>
    <ns>0</ns>
    <id>415</id>
    <revision>
      <id>50772</id>
      <parentid>43144</parentid>
      <timestamp>2013-06-01T03:39:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/bucket|unordered_set}}

[[de:cpp/container/unordered set/bucket]]
[[es:cpp/container/unordered set/bucket]]
[[fr:cpp/container/unordered set/bucket]]
[[it:cpp/container/unordered set/bucket]]
[[ja:cpp/container/unordered set/bucket]]
[[pt:cpp/container/unordered set/bucket]]
[[ru:cpp/container/unordered set/bucket]]
[[zh:cpp/container/unordered set/bucket]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/bucket count</title>
    <ns>0</ns>
    <id>416</id>
    <revision>
      <id>50773</id>
      <parentid>43137</parentid>
      <timestamp>2013-06-01T03:39:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="442">{{include page|cpp/container/bucket_count|unordered_set}}

[[de:cpp/container/unordered set/bucket count]]
[[es:cpp/container/unordered set/bucket count]]
[[fr:cpp/container/unordered set/bucket count]]
[[it:cpp/container/unordered set/bucket count]]
[[ja:cpp/container/unordered set/bucket count]]
[[pt:cpp/container/unordered set/bucket count]]
[[ru:cpp/container/unordered set/bucket count]]
[[zh:cpp/container/unordered set/bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/bucket size</title>
    <ns>0</ns>
    <id>417</id>
    <revision>
      <id>50774</id>
      <parentid>43128</parentid>
      <timestamp>2013-06-01T03:39:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/bucket_size|unordered_set}}

[[de:cpp/container/unordered set/bucket size]]
[[es:cpp/container/unordered set/bucket size]]
[[fr:cpp/container/unordered set/bucket size]]
[[it:cpp/container/unordered set/bucket size]]
[[ja:cpp/container/unordered set/bucket size]]
[[pt:cpp/container/unordered set/bucket size]]
[[ru:cpp/container/unordered set/bucket size]]
[[zh:cpp/container/unordered set/bucket size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/clear</title>
    <ns>0</ns>
    <id>418</id>
    <revision>
      <id>50775</id>
      <parentid>43123</parentid>
      <timestamp>2013-06-01T03:39:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/clear|unordered_set}}

[[de:cpp/container/unordered set/clear]]
[[es:cpp/container/unordered set/clear]]
[[fr:cpp/container/unordered set/clear]]
[[it:cpp/container/unordered set/clear]]
[[ja:cpp/container/unordered set/clear]]
[[pt:cpp/container/unordered set/clear]]
[[ru:cpp/container/unordered set/clear]]
[[zh:cpp/container/unordered set/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/count</title>
    <ns>0</ns>
    <id>419</id>
    <revision>
      <id>65127</id>
      <parentid>50776</parentid>
      <timestamp>2013-08-30T16:36:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update</comment>
      <text xml:space="preserve" bytes="385">{{include page|cpp/container/count_unord|unordered_set}}

[[de:cpp/container/unordered set/count]]
[[es:cpp/container/unordered set/count]]
[[fr:cpp/container/unordered set/count]]
[[it:cpp/container/unordered set/count]]
[[ja:cpp/container/unordered set/count]]
[[pt:cpp/container/unordered set/count]]
[[ru:cpp/container/unordered set/count]]
[[zh:cpp/container/unordered set/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/emplace</title>
    <ns>0</ns>
    <id>420</id>
    <revision>
      <id>50777</id>
      <parentid>43109</parentid>
      <timestamp>2013-06-01T03:39:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="403">{{include page|cpp/container/emplace assoc|unordered_set}}

[[de:cpp/container/unordered set/emplace]]
[[es:cpp/container/unordered set/emplace]]
[[fr:cpp/container/unordered set/emplace]]
[[it:cpp/container/unordered set/emplace]]
[[ja:cpp/container/unordered set/emplace]]
[[pt:cpp/container/unordered set/emplace]]
[[ru:cpp/container/unordered set/emplace]]
[[zh:cpp/container/unordered set/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/emplace hint</title>
    <ns>0</ns>
    <id>421</id>
    <revision>
      <id>85279</id>
      <parentid>65115</parentid>
      <timestamp>2016-04-13T12:51:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>exception guarantee here too</comment>
      <text xml:space="preserve" bytes="1810">{{cpp/container/unordered_set/title | emplace_hint}}
{{cpp/container/unordered_set/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template &lt;class... Args&gt;
iterator emplace_hint( const_iterator hint, Args&amp;&amp;... args );
}}
{{dcl end}}

Inserts a new element to the container, using {{tt|hint}} as a suggestion where the element should go. The element is constructed in-place, i.e. no copy or move operations are performed. 

The constructor of the element is called with exactly the same arguments as supplied to the function, forwarded with {{c|std::forward&lt;Args&gt;(args)...}}. 

{{cpp/container/note_iterator_invalidation|unordered_set|emplace_hint}}

===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the new element}}
{{par | args | arguments to forward to the constructor of the element}}
{{par end}} 

===Return value===
Returns an iterator to the newly inserted element.

If the insertion failed because the element already exists, returns an iterator to the already existing element with the equivalent key.

===Exceptions===
If an exception is thrown by any operation, this function has no effect (strong exception guarantee).

===Complexity===
Amortized constant on average, worst case linear in the size of the container.

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_set}}
{{dsc inc | cpp/container/dsc insert |unordered_set}}
{{dsc end}}

[[de:cpp/container/unordered set/emplace hint]]
[[es:cpp/container/unordered set/emplace hint]]
[[fr:cpp/container/unordered set/emplace hint]]
[[it:cpp/container/unordered set/emplace hint]]
[[ja:cpp/container/unordered set/emplace hint]]
[[pt:cpp/container/unordered set/emplace hint]]
[[ru:cpp/container/unordered set/emplace hint]]
[[zh:cpp/container/unordered set/emplace hint]]</text>
      <sha1>ahmckb7nclfmx1h7m0hd66cjsuwf7t6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/empty</title>
    <ns>0</ns>
    <id>422</id>
    <revision>
      <id>50779</id>
      <parentid>43095</parentid>
      <timestamp>2013-06-01T03:39:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/empty|unordered_set}}

[[de:cpp/container/unordered set/empty]]
[[es:cpp/container/unordered set/empty]]
[[fr:cpp/container/unordered set/empty]]
[[it:cpp/container/unordered set/empty]]
[[ja:cpp/container/unordered set/empty]]
[[pt:cpp/container/unordered set/empty]]
[[ru:cpp/container/unordered set/empty]]
[[zh:cpp/container/unordered set/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/end</title>
    <ns>0</ns>
    <id>423</id>
    <revision>
      <id>50780</id>
      <parentid>43087</parentid>
      <timestamp>2013-06-01T03:39:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="361">{{include page|cpp/container/end|unordered_set}}

[[de:cpp/container/unordered set/end]]
[[es:cpp/container/unordered set/end]]
[[fr:cpp/container/unordered set/end]]
[[it:cpp/container/unordered set/end]]
[[ja:cpp/container/unordered set/end]]
[[pt:cpp/container/unordered set/end]]
[[ru:cpp/container/unordered set/end]]
[[zh:cpp/container/unordered set/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/end(int)</title>
    <ns>0</ns>
    <id>9089</id>
    <redirect title="cpp/container/unordered set/end2" />
    <revision>
      <id>38157</id>
      <timestamp>2012-07-24T13:41:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>moved [[cpp/container/unordered set/end(int)]] to [[cpp/container/unordered set/end2]]: Text replace - &quot;/end(int)&quot; to &quot;/end2&quot;</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/container/unordered set/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/end2</title>
    <ns>0</ns>
    <id>424</id>
    <revision>
      <id>50781</id>
      <parentid>43077</parentid>
      <timestamp>2013-06-01T03:39:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/end2|unordered_set}}

[[de:cpp/container/unordered set/end2]]
[[es:cpp/container/unordered set/end2]]
[[fr:cpp/container/unordered set/end2]]
[[it:cpp/container/unordered set/end2]]
[[ja:cpp/container/unordered set/end2]]
[[pt:cpp/container/unordered set/end2]]
[[ru:cpp/container/unordered set/end2]]
[[zh:cpp/container/unordered set/end2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/equal range</title>
    <ns>0</ns>
    <id>425</id>
    <revision>
      <id>65094</id>
      <parentid>65080</parentid>
      <timestamp>2013-08-30T15:58:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="439">{{include page|cpp/container/equal_range_unord|unordered_set}}

[[de:cpp/container/unordered set/equal range]]
[[es:cpp/container/unordered set/equal range]]
[[fr:cpp/container/unordered set/equal range]]
[[it:cpp/container/unordered set/equal range]]
[[ja:cpp/container/unordered set/equal range]]
[[pt:cpp/container/unordered set/equal range]]
[[ru:cpp/container/unordered set/equal range]]
[[zh:cpp/container/unordered set/equal range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/erase</title>
    <ns>0</ns>
    <id>426</id>
    <revision>
      <id>50783</id>
      <parentid>43066</parentid>
      <timestamp>2013-06-01T03:39:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="385">{{include page|cpp/container/erase assoc|unordered_set}}

[[de:cpp/container/unordered set/erase]]
[[es:cpp/container/unordered set/erase]]
[[fr:cpp/container/unordered set/erase]]
[[it:cpp/container/unordered set/erase]]
[[ja:cpp/container/unordered set/erase]]
[[pt:cpp/container/unordered set/erase]]
[[ru:cpp/container/unordered set/erase]]
[[zh:cpp/container/unordered set/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/extract</title>
    <ns>0</ns>
    <id>15668</id>
    <revision>
      <id>87125</id>
      <timestamp>2016-07-27T14:48:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="58">{{include page|cpp/container/extract assoc|unordered_set}}</text>
      <sha1>mr43smq9gyqmcpeisd2dsysi7t8d5ox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/find</title>
    <ns>0</ns>
    <id>427</id>
    <revision>
      <id>50784</id>
      <parentid>43059</parentid>
      <timestamp>2013-06-01T03:39:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/find|unordered_set}}

[[de:cpp/container/unordered set/find]]
[[es:cpp/container/unordered set/find]]
[[fr:cpp/container/unordered set/find]]
[[it:cpp/container/unordered set/find]]
[[ja:cpp/container/unordered set/find]]
[[pt:cpp/container/unordered set/find]]
[[ru:cpp/container/unordered set/find]]
[[zh:cpp/container/unordered set/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/get allocator</title>
    <ns>0</ns>
    <id>428</id>
    <revision>
      <id>50785</id>
      <parentid>43051</parentid>
      <timestamp>2013-06-01T03:39:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="451">{{include page|cpp/container/get_allocator|unordered_set}}

[[de:cpp/container/unordered set/get allocator]]
[[es:cpp/container/unordered set/get allocator]]
[[fr:cpp/container/unordered set/get allocator]]
[[it:cpp/container/unordered set/get allocator]]
[[ja:cpp/container/unordered set/get allocator]]
[[pt:cpp/container/unordered set/get allocator]]
[[ru:cpp/container/unordered set/get allocator]]
[[zh:cpp/container/unordered set/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/hash function</title>
    <ns>0</ns>
    <id>429</id>
    <revision>
      <id>50786</id>
      <parentid>43044</parentid>
      <timestamp>2013-06-01T03:39:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="451">{{include page|cpp/container/hash_function|unordered_set}}

[[de:cpp/container/unordered set/hash function]]
[[es:cpp/container/unordered set/hash function]]
[[fr:cpp/container/unordered set/hash function]]
[[it:cpp/container/unordered set/hash function]]
[[ja:cpp/container/unordered set/hash function]]
[[pt:cpp/container/unordered set/hash function]]
[[ru:cpp/container/unordered set/hash function]]
[[zh:cpp/container/unordered set/hash function]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/insert</title>
    <ns>0</ns>
    <id>430</id>
    <revision>
      <id>91169</id>
      <parentid>91168</parentid>
      <timestamp>2017-03-24T13:50:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>ilist ctor needs that note too</comment>
      <text xml:space="preserve" bytes="3097">{{cpp/container/unordered_set/title | insert}}
{{cpp/container/unordered_set/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
std::pair&lt;iterator,bool&gt; insert( const value_type&amp; value );
}}
{{dcl | num=2 | since=c++11 |
std::pair&lt;iterator,bool&gt; insert( value_type&amp;&amp; value );
}}
{{dcl | num=3 | since=c++11 |
iterator insert( const_iterator hint, const value_type&amp; value );
}}
{{dcl | num=4 | since=c++11 |
iterator insert( const_iterator hint, value_type&amp;&amp; value );
}}
{{dcl | num=5 | since=c++11 |
template&lt; class InputIt &gt;
void insert( InputIt first, InputIt last );
}}
{{dcl | num=6 | since=c++11 |
void insert( std::initializer_list&lt;value_type&gt; ilist );
}}
{{dcl | num=7 | since=c++17 |
insert_return_type insert(node_type&amp;&amp; nh);
}}
{{dcl | num=8 | since=c++17 |
iterator insert(const_iterator hint, node_type&amp;&amp; nh);
}}
{{dcl end}}

Inserts element(s) into the container, if the container doesn't already contain an element with an equivalent key.

@1-2@ Inserts {{tt|value}}. 

@3-4@ Inserts {{tt|value}}, using {{tt|hint}} as a non-binding suggestion to where the search should start.

@5@ Inserts elements from range {{tt|[first, last)}}. {{cpp/container/lwg2488-note}}

@6@ Inserts elements from initializer list {{tt|ilist}}. {{cpp/container/lwg2488-note}}

{{cpp/container/node_handle_insert_desc|unordered_set|7|8}}

{{cpp/container/note_iterator_invalidation|unordered_set|insert}}
===Parameters===
{{par begin}}
{{par | hint | iterator, used as a suggestion as to where to insert the content}}
{{par | value | element value to insert}}
{{par | first, last | range of elements to insert}}
{{par | ilist | initializer list to insert the values from}}
{{par | nh | a compatible [[cpp/container/node_handle|node handle]]}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
@1-2@ Returns a pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a {{c|bool}} denoting whether the insertion took place.

@3-4@ Returns an iterator to the inserted element, or to the element that prevented the insertion.

@5-6@ (none)

{{cpp/container/node_handle_insert_return|unordered_set|7|8}}

===Exceptions===
@1-4@ If an exception is thrown by any operation, the insertion has no effect.

{{todo|cases 5-6}}

===Complexity===
@1-4@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

@5-6@ Average case: {{tt|O(N)}}, where N is the number of elements to insert. Worse case: {{tt|O(N*size()+N)}}

@7-8@ Average case: {{tt|O(1)}}, worst case {{tt|O(size())}}

===Notes===
{{cpp/container/hinted_insert_note}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc emplace |unordered_set}}
{{dsc inc | cpp/container/dsc emplace_hint |unordered_set}}
{{dsc end}}

[[de:cpp/container/unordered set/insert]]
[[es:cpp/container/unordered set/insert]]
[[fr:cpp/container/unordered set/insert]]
[[it:cpp/container/unordered set/insert]]
[[ja:cpp/container/unordered set/insert]]
[[pt:cpp/container/unordered set/insert]]
[[ru:cpp/container/unordered set/insert]]
[[zh:cpp/container/unordered set/insert]]</text>
      <sha1>ch7bduozcjmqrnuljlb5qhzct9r63jj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/key eq</title>
    <ns>0</ns>
    <id>431</id>
    <revision>
      <id>50787</id>
      <parentid>43032</parentid>
      <timestamp>2013-06-01T03:39:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/key_eq|unordered_set}}

[[de:cpp/container/unordered set/key eq]]
[[es:cpp/container/unordered set/key eq]]
[[fr:cpp/container/unordered set/key eq]]
[[it:cpp/container/unordered set/key eq]]
[[ja:cpp/container/unordered set/key eq]]
[[pt:cpp/container/unordered set/key eq]]
[[ru:cpp/container/unordered set/key eq]]
[[zh:cpp/container/unordered set/key eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/load factor</title>
    <ns>0</ns>
    <id>432</id>
    <revision>
      <id>50788</id>
      <parentid>43025</parentid>
      <timestamp>2013-06-01T03:39:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="433">{{include page|cpp/container/load_factor|unordered_set}}

[[de:cpp/container/unordered set/load factor]]
[[es:cpp/container/unordered set/load factor]]
[[fr:cpp/container/unordered set/load factor]]
[[it:cpp/container/unordered set/load factor]]
[[ja:cpp/container/unordered set/load factor]]
[[pt:cpp/container/unordered set/load factor]]
[[ru:cpp/container/unordered set/load factor]]
[[zh:cpp/container/unordered set/load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/max bucket count</title>
    <ns>0</ns>
    <id>433</id>
    <revision>
      <id>50789</id>
      <parentid>43018</parentid>
      <timestamp>2013-06-01T03:39:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="478">{{include page|cpp/container/max_bucket_count|unordered_set}}

[[de:cpp/container/unordered set/max bucket count]]
[[es:cpp/container/unordered set/max bucket count]]
[[fr:cpp/container/unordered set/max bucket count]]
[[it:cpp/container/unordered set/max bucket count]]
[[ja:cpp/container/unordered set/max bucket count]]
[[pt:cpp/container/unordered set/max bucket count]]
[[ru:cpp/container/unordered set/max bucket count]]
[[zh:cpp/container/unordered set/max bucket count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/max load factor</title>
    <ns>0</ns>
    <id>434</id>
    <revision>
      <id>50790</id>
      <parentid>43014</parentid>
      <timestamp>2013-06-01T03:39:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="469">{{include page|cpp/container/max_load_factor|unordered_set}}

[[de:cpp/container/unordered set/max load factor]]
[[es:cpp/container/unordered set/max load factor]]
[[fr:cpp/container/unordered set/max load factor]]
[[it:cpp/container/unordered set/max load factor]]
[[ja:cpp/container/unordered set/max load factor]]
[[pt:cpp/container/unordered set/max load factor]]
[[ru:cpp/container/unordered set/max load factor]]
[[zh:cpp/container/unordered set/max load factor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/max size</title>
    <ns>0</ns>
    <id>435</id>
    <revision>
      <id>50791</id>
      <parentid>43008</parentid>
      <timestamp>2013-06-01T03:39:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="406">{{include page|cpp/container/max_size|unordered_set}}

[[de:cpp/container/unordered set/max size]]
[[es:cpp/container/unordered set/max size]]
[[fr:cpp/container/unordered set/max size]]
[[it:cpp/container/unordered set/max size]]
[[ja:cpp/container/unordered set/max size]]
[[pt:cpp/container/unordered set/max size]]
[[ru:cpp/container/unordered set/max size]]
[[zh:cpp/container/unordered set/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/merge</title>
    <ns>0</ns>
    <id>15650</id>
    <revision>
      <id>87025</id>
      <timestamp>2016-07-21T15:35:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>template</comment>
      <text xml:space="preserve" bytes="56">{{include page|cpp/container/merge assoc|unordered_set}}</text>
      <sha1>ohm7udo64tynk2qs0w64wgjun43ylft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/operator cmp</title>
    <ns>0</ns>
    <id>2008</id>
    <revision>
      <id>50792</id>
      <parentid>42994</parentid>
      <timestamp>2013-06-01T03:39:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/container/operator_cmp_unord|unordered_set}}

[[de:cpp/container/unordered set/operator cmp]]
[[es:cpp/container/unordered set/operator cmp]]
[[fr:cpp/container/unordered set/operator cmp]]
[[it:cpp/container/unordered set/operator cmp]]
[[ja:cpp/container/unordered set/operator cmp]]
[[pt:cpp/container/unordered set/operator cmp]]
[[ru:cpp/container/unordered set/operator cmp]]
[[zh:cpp/container/unordered set/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/operator comp</title>
    <ns>0</ns>
    <id>4214</id>
    <redirect title="cpp/container/unordered set/operator cmp" />
    <revision>
      <id>15247</id>
      <timestamp>2011-12-08T01:15:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered set/operator comp]] to [[cpp/container/unordered set/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[cpp/container/unordered set/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/operator=</title>
    <ns>0</ns>
    <id>436</id>
    <revision>
      <id>92046</id>
      <parentid>42999</parentid>
      <timestamp>2017-04-03T20:54:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{cpp/container/operator{{=}}&quot; to &quot;{{include page|cpp/container/operator{{=}}&quot;</comment>
      <text xml:space="preserve" bytes="419">{{include page|cpp/container/operator{{=}}|unordered_set}}

[[de:cpp/container/unordered set/operator=]]
[[es:cpp/container/unordered set/operator=]]
[[fr:cpp/container/unordered set/operator=]]
[[it:cpp/container/unordered set/operator=]]
[[ja:cpp/container/unordered set/operator=]]
[[pt:cpp/container/unordered set/operator=]]
[[ru:cpp/container/unordered set/operator=]]
[[zh:cpp/container/unordered set/operator=]]</text>
      <sha1>5ktofdz19g7iisn6tiu4v461xztfrmv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/rehash</title>
    <ns>0</ns>
    <id>437</id>
    <revision>
      <id>50793</id>
      <parentid>42984</parentid>
      <timestamp>2013-06-01T03:39:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/rehash|unordered_set}}

[[de:cpp/container/unordered set/rehash]]
[[es:cpp/container/unordered set/rehash]]
[[fr:cpp/container/unordered set/rehash]]
[[it:cpp/container/unordered set/rehash]]
[[ja:cpp/container/unordered set/rehash]]
[[pt:cpp/container/unordered set/rehash]]
[[ru:cpp/container/unordered set/rehash]]
[[zh:cpp/container/unordered set/rehash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/reserve</title>
    <ns>0</ns>
    <id>438</id>
    <revision>
      <id>50794</id>
      <parentid>42977</parentid>
      <timestamp>2013-06-01T03:39:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="403">{{include page|cpp/container/reserve unord|unordered_set}}

[[de:cpp/container/unordered set/reserve]]
[[es:cpp/container/unordered set/reserve]]
[[fr:cpp/container/unordered set/reserve]]
[[it:cpp/container/unordered set/reserve]]
[[ja:cpp/container/unordered set/reserve]]
[[pt:cpp/container/unordered set/reserve]]
[[ru:cpp/container/unordered set/reserve]]
[[zh:cpp/container/unordered set/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/size</title>
    <ns>0</ns>
    <id>439</id>
    <revision>
      <id>50795</id>
      <parentid>42971</parentid>
      <timestamp>2013-06-01T03:39:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/size|unordered_set}}

[[de:cpp/container/unordered set/size]]
[[es:cpp/container/unordered set/size]]
[[fr:cpp/container/unordered set/size]]
[[it:cpp/container/unordered set/size]]
[[ja:cpp/container/unordered set/size]]
[[pt:cpp/container/unordered set/size]]
[[ru:cpp/container/unordered set/size]]
[[zh:cpp/container/unordered set/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/std swap</title>
    <ns>0</ns>
    <id>3471</id>
    <redirect title="cpp/container/unordered set/swap2" />
    <revision>
      <id>13031</id>
      <timestamp>2011-11-03T18:42:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/unordered set/std swap]] to [[cpp/container/unordered set/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/container/unordered set/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/swap</title>
    <ns>0</ns>
    <id>440</id>
    <revision>
      <id>50796</id>
      <parentid>42964</parentid>
      <timestamp>2013-06-01T03:39:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/swap|unordered_set}}

[[de:cpp/container/unordered set/swap]]
[[es:cpp/container/unordered set/swap]]
[[fr:cpp/container/unordered set/swap]]
[[it:cpp/container/unordered set/swap]]
[[ja:cpp/container/unordered set/swap]]
[[pt:cpp/container/unordered set/swap]]
[[ru:cpp/container/unordered set/swap]]
[[zh:cpp/container/unordered set/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/swap2</title>
    <ns>0</ns>
    <id>1998</id>
    <revision>
      <id>50797</id>
      <parentid>42958</parentid>
      <timestamp>2013-06-01T03:39:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/swap2|unordered_set}}

[[de:cpp/container/unordered set/swap2]]
[[es:cpp/container/unordered set/swap2]]
[[fr:cpp/container/unordered set/swap2]]
[[it:cpp/container/unordered set/swap2]]
[[ja:cpp/container/unordered set/swap2]]
[[pt:cpp/container/unordered set/swap2]]
[[ru:cpp/container/unordered set/swap2]]
[[zh:cpp/container/unordered set/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/unordered set</title>
    <ns>0</ns>
    <id>441</id>
    <revision>
      <id>50798</id>
      <parentid>42944</parentid>
      <timestamp>2013-06-01T03:39:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="455">{{include page|cpp/container/constructor unord|unordered_set}}

[[de:cpp/container/unordered set/unordered set]]
[[es:cpp/container/unordered set/unordered set]]
[[fr:cpp/container/unordered set/unordered set]]
[[it:cpp/container/unordered set/unordered set]]
[[ja:cpp/container/unordered set/unordered set]]
[[pt:cpp/container/unordered set/unordered set]]
[[ru:cpp/container/unordered set/unordered set]]
[[zh:cpp/container/unordered set/unordered set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/unordered set/~unordered set</title>
    <ns>0</ns>
    <id>442</id>
    <revision>
      <id>50799</id>
      <parentid>42942</parentid>
      <timestamp>2013-06-01T03:39:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="456">{{include page|cpp/container/destructor|unordered_set}}

[[de:cpp/container/unordered set/~unordered set]]
[[es:cpp/container/unordered set/~unordered set]]
[[fr:cpp/container/unordered set/~unordered set]]
[[it:cpp/container/unordered set/~unordered set]]
[[ja:cpp/container/unordered set/~unordered set]]
[[pt:cpp/container/unordered set/~unordered set]]
[[ru:cpp/container/unordered set/~unordered set]]
[[zh:cpp/container/unordered set/~unordered set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector</title>
    <ns>0</ns>
    <id>443</id>
    <revision>
      <id>89141</id>
      <parentid>88350</parentid>
      <timestamp>2017-01-03T18:32:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/std::/std::pmr::</comment>
      <text xml:space="preserve" bytes="6559">{{cpp/title|vector}}
{{cpp/container/vector/navbar}}
{{dcl begin}}
{{dcl header|vector}}
{{dcl|num=1|
template&lt;
    class T,
    class Allocator {{=}} std::allocator&lt;T&gt;
&gt; class vector;
}} 
{{dcl|since=c++17|num=2|1=
namespace pmr {
    template &lt;class T&gt;
    using vector = std::vector&lt;T, std::pmr::polymorphic_allocator&lt;T&gt;&gt;;
}
}}
{{dcl end}}

@1@ {{tt|std::vector}} is a sequence container that encapsulates dynamic size arrays.
@2@ {{tt|std::pmr::vector}} is an alias template that uses a [[cpp/memory/polymorphic_allocator|polymorphic allocator]]

{{rev begin}}
{{rev | since=c++03 | The elements are stored contiguously, which means that elements can be accessed not only through iterators, but also using offsets on regular pointers to elements. This means that  a pointer to an element of a vector may be passed to any function that expects a pointer to an element of an array.}}
{{rev end}}

The storage of the vector is handled automatically, being expanded and contracted as needed. Vectors usually occupy more space than static arrays, because more memory is allocated to handle future growth. This way a vector does not need to reallocate each time an element is inserted, but only when the additional memory is exhausted. The total amount of allocated memory can be queried using {{lc|capacity()}} function. {{rev inl | since=c++11 | Extra memory can be returned to the system via a call to {{lc|shrink_to_fit()}}.}}

Reallocations are usually costly operations in terms of performance. {{lc|reserve()}} function can be used to eliminate reallocations if the number of elements is known beforehand.

The complexity (efficiency) of common operations on vectors is as follows:

* Random access - constant {{math|O(1)}}
* Insertion or removal of elements at the end - amortized constant {{math|O(1)}}
* Insertion or removal of elements - linear in distance to the end of the vector {{math|O(n)}}

{{tt|std::vector}} meets the requirements of {{concept|Container}}, {{concept|AllocatorAwareContainer}}, {{concept|SequenceContainer}} {{rev inl|since=c++17|, {{concept|ContiguousContainer}} (for {{tt|T}} other than {{tt|bool}})}} and {{concept|ReversibleContainer}}.

===Template parameters===
{{par begin}}
{{par inc | cpp/container/param list T | vector}}
{{par inc | cpp/container/param list Allocator | vector}}
{{par end}}

===Specializations===
The standard library provides a specialization of {{tt|std::vector}} for the type {{c|bool}}, which is optimized for space efficiency.
{{dsc begin}}
{{dsc inc | cpp/container/dsc vector_bool}}
{{dsc end}}

===Iterator invalidation===
{{todo}}
There are still a few inaccuracies in this section. Refer to individual member function pages for more detail.

{| class=&quot;dsctable&quot; style=&quot;font-size:0.8em&quot;
! Operations
! Invalidated
|-
| All read only operations, {{lc|swap}}, {{lc|std::swap}}
| Never
|-
| {{lc|clear}}, {{lc|1=operator=}}, {{lc|assign}}
| Always
|-
| {{lc|reserve}}, {{lc|shrink_to_fit}}
| If the vector changed capacity, all of them. If not, none.
|-
| {{lc|erase}}
| Erased elements + all elements after them (including {{lc|end()}})
|-
| {{lc|push_back}}, {{lc|emplace_back}}
| If the vector changed capacity, all of them. If not, only end().
|-
| {{lc|insert}}, {{lc|emplace}}, {{lc|resize}}
| If the vector changed capacity, all of them. If not, only those after the insertion point.
|-
| {{lc|pop_back}}
| The element erased and {{lc|end()}}.
|}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc value_type | vector}}
{{dsc inc | cpp/container/dsc allocator_type | vector}}
{{dsc inc | cpp/container/dsc size_type | vector}}
{{dsc inc | cpp/container/dsc difference_type | vector}}
{{dsc inc | cpp/container/dsc reference | vector}}
{{dsc inc | cpp/container/dsc const_reference | vector}}
{{dsc inc | cpp/container/dsc pointer | vector}}
{{dsc inc | cpp/container/dsc const_pointer | vector}}
{{dsc inc | cpp/container/dsc iterator | vector}}
{{dsc inc | cpp/container/dsc const_iterator | vector}}
{{dsc inc | cpp/container/dsc reverse_iterator | vector}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | vector}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | vector}}
{{dsc inc | cpp/container/dsc destructor | vector}}
{{dsc inc | cpp/container/dsc operator{{=}} | vector}}
{{dsc inc | cpp/container/dsc assign | vector}}
{{dsc inc | cpp/container/dsc get_allocator | vector}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc at | vector}}
{{dsc inc | cpp/container/dsc operator_at | vector}}
{{dsc inc | cpp/container/dsc front | vector}}
{{dsc inc | cpp/container/dsc back | vector}}
{{dsc inc | cpp/container/dsc data | vector}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | vector}}
{{dsc inc | cpp/container/dsc end | vector}}
{{dsc inc | cpp/container/dsc rbegin | vector}}
{{dsc inc | cpp/container/dsc rend | vector}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | vector}}
{{dsc inc | cpp/container/dsc size | vector}}
{{dsc inc | cpp/container/dsc max_size | vector}}
{{dsc inc | cpp/container/dsc reserve | vector}}
{{dsc inc | cpp/container/dsc capacity | vector}}
{{dsc inc | cpp/container/dsc shrink_to_fit | vector}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | vector}}
{{dsc inc | cpp/container/dsc insert | vector}}
{{dsc inc | cpp/container/dsc emplace | vector}}
{{dsc inc | cpp/container/dsc erase | vector}}
{{dsc inc | cpp/container/dsc push_back | vector}}
{{dsc inc | cpp/container/dsc emplace_back | vector}}
{{dsc inc | cpp/container/dsc pop_back | vector}}
{{dsc inc | cpp/container/dsc resize | vector}}
{{dsc inc | cpp/container/dsc swap | vector}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | vector}}
{{dsc inc | cpp/container/dsc swap2 | vector}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
    // Create a vector containing integers
    std::vector&lt;int&gt; v = {7, 5, 16, 8};

    // Add two more integers to vector
    v.push_back(25);
    v.push_back(13);

    // Iterate and print values of vector
    for(int n : v) {
        std::cout &lt;&lt; n &lt;&lt; '\n';
    }
}
 | output=
7
5
16
8
25
13
}}

[[cs:cpp/container/vector]]
[[de:cpp/container/vector]]
[[es:cpp/container/vector]]
[[fr:cpp/container/vector]]
[[it:cpp/container/vector]]
[[ja:cpp/container/vector]]
[[ko:cpp/container/vector]]
[[pt:cpp/container/vector]]
[[ru:cpp/container/vector]]
[[zh:cpp/container/vector]]</text>
      <sha1>eejzoyehdf83lc60tmccdaodn2fde48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector bool</title>
    <ns>0</ns>
    <id>5548</id>
    <revision>
      <id>85877</id>
      <parentid>78413</parentid>
      <timestamp>2016-05-27T17:15:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>brought up the thread unsafety issue to the top (it was hiding in the list at /cpp/container#Thread_safety and someone ran into it</comment>
      <text xml:space="preserve" bytes="5013">{{cpp/title|vector&lt;bool&gt;}}
{{cpp/container/vector_bool/navbar}}
{{ddcl | header=vector |
template&lt;class Allocator&gt; 
class vector&lt;bool, Allocator&gt;;
}} 

{{c|std::vector&lt;bool&gt;}} is a space-efficient specialization of {{lc|std::vector}} for the type {{c|bool}}. 

The manner in which {{c|std::vector&lt;bool&gt;}} is made space efficient (as well as whether it is optimized at all) is implementation defined.  One potential optimization involves coalescing vector elements such that each element occupies a single bit instead of {{c|sizeof(bool)}} bytes.

{{c|std::vector&lt;bool&gt;}} behaves similarly to {{lc|std::vector}}, but in order to be space efficient, it:

* Does not necessarily store its elements as a contiguous array (so {{c|&amp;v[0] + n !{{=}} &amp;v[n]}})
* Exposes class {{c|std::vector&lt;bool&gt;::reference}} as a method of accessing individual bits. In particular, objects of this class are returned by {{ltt|cpp/container/vector/operator_at|operator[]}} by value.
* Does not use {{c|std::allocator_traits::construct}} to construct bit values.
* Does not guarantee that different elements in the same container can be modified concurrently by different threads.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/container/dsc value_type | vector_bool}}
{{dsc inc | cpp/container/dsc allocator_type | vector_bool}}
{{dsc inc | cpp/container/dsc size_type | vector_bool}}
{{dsc inc | cpp/container/dsc difference_type | vector_bool}}
{{dsc class | cpp/container/vector_bool/reference | proxy class representing a reference to a single bool}}
{{dsc inc | cpp/container/dsc const_reference | vector_bool}}
{{dsc inc | cpp/container/dsc pointer | vector_bool}}
{{dsc inc | cpp/container/dsc const_pointer | vector_bool}}
{{dsc inc | cpp/container/dsc iterator | vector_bool}}
{{dsc inc | cpp/container/dsc const_iterator | vector_bool}}
{{dsc inc | cpp/container/dsc reverse_iterator | vector_bool}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | vector_bool}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc constructor | vector}}
{{dsc inc | cpp/container/dsc destructor | vector}}
{{dsc inc | cpp/container/dsc operator{{=}} | vector}}
{{dsc inc | cpp/container/dsc assign | vector}}
{{dsc inc | cpp/container/dsc get_allocator | vector}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/container/dsc at | vector}}
{{dsc inc | cpp/container/dsc operator_at | vector}}
{{dsc inc | cpp/container/dsc front | vector}}
{{dsc inc | cpp/container/dsc back | vector}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/container/dsc begin | vector}}
{{dsc inc | cpp/container/dsc end | vector}}
{{dsc inc | cpp/container/dsc rbegin | vector}}
{{dsc inc | cpp/container/dsc rend | vector}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/container/dsc empty | vector}}
{{dsc inc | cpp/container/dsc size | vector}}
{{dsc inc | cpp/container/dsc max_size | vector}}
{{dsc inc | cpp/container/dsc reserve | vector}}
{{dsc inc | cpp/container/dsc capacity | vector}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/container/dsc clear | vector}}
{{dsc inc | cpp/container/dsc insert | vector}}
{{dsc inc | cpp/container/vector_bool/dsc emplace}}
{{dsc inc | cpp/container/dsc erase | vector}}
{{dsc inc | cpp/container/dsc push_back | vector}}
{{dsc inc | cpp/container/vector_bool/dsc emplace_back}}
{{dsc inc | cpp/container/dsc pop_back | vector}}
{{dsc inc | cpp/container/dsc resize | vector}}
{{dsc inc | cpp/container/dsc swap | vector}}

{{dsc h2 | {{tt|vector&lt;bool&gt;}} specific modifiers}}
{{dsc inc | cpp/container/vector_bool/dsc flip}}
{{dsc inc | cpp/container/vector_bool/dsc swap}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_cmp | vector}}
{{dsc inc | cpp/container/dsc swap2 | vector}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/container/vector_bool/dsc hash}}
{{dsc end}}

===Notes===
If the size of the bitset is known at compile time, {{lc|std::bitset}} may be used, which offers a richer set of member functions. In addition, [http://www.boost.org/doc/libs/release/libs/dynamic_bitset/dynamic_bitset.html boost::dynamic_bitset] exists as an alternative to {{tt|std::vector&lt;bool&gt;}}.

Since its representation may by optimized, {{c|std::vector&lt;bool&gt;}} does not necessarily meet all {{concept|Container}} or {{concept|SequenceContainer}} requirements. For example, because {{c|std::vector&lt;bool&gt;::iterator}} is implementation-defined, it may not satisfy the {{concept|ForwardIterator}} requirement.  Use of algorithms such as {{lc|std::search}} that require {{concept|ForwardIterator}}s may result in [http://www.boost.org/doc/libs/1_52_0/libs/dynamic_bitset/dynamic_bitset.html#rationale either compile-time or run-time errors].


[[de:cpp/container/vector bool]]
[[es:cpp/container/vector bool]]
[[fr:cpp/container/vector bool]]
[[it:cpp/container/vector bool]]
[[ja:cpp/container/vector bool]]
[[pt:cpp/container/vector bool]]
[[ru:cpp/container/vector bool]]
[[zh:cpp/container/vector bool]]</text>
      <sha1>piv2qxjtk66sxqwn76azbxwq9p334tr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector bool/flip</title>
    <ns>0</ns>
    <id>5567</id>
    <revision>
      <id>57332</id>
      <parentid>49460</parentid>
      <timestamp>2013-06-01T05:51:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="689">{{cpp/container/vector_bool/title | flip}}
{{cpp/container/vector_bool/navbar}}
{{ddcl | header=vector |
void flip();
}}

Toggles each {{c|bool}} in the vector (replaces with its opposite value).

===Parameters===
(none)

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_at | vector}}
{{dsc inc | cpp/utility/bitset/dsc flip}}
{{dsc end}}

[[de:cpp/container/vector bool/flip]]
[[es:cpp/container/vector bool/flip]]
[[fr:cpp/container/vector bool/flip]]
[[it:cpp/container/vector bool/flip]]
[[ja:cpp/container/vector bool/flip]]
[[pt:cpp/container/vector bool/flip]]
[[ru:cpp/container/vector bool/flip]]
[[zh:cpp/container/vector bool/flip]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector bool/hash</title>
    <ns>0</ns>
    <id>9783</id>
    <revision>
      <id>63943</id>
      <parentid>62698</parentid>
      <timestamp>2013-08-01T15:42:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="491">{{cpp/title | hash &lt;small&gt;(std::vector&lt;bool&gt;)&lt;/small&gt;}}
{{cpp/container/vector_bool/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template &lt;class Allocator&gt; struct hash&lt;vector&lt;bool, Allocator&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for {{c|std::vector&lt;bool&gt;}} allows users to obtain hashes of objects of type {{c|std::vector&lt;bool&gt;}}.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector bool/reference</title>
    <ns>0</ns>
    <id>5566</id>
    <revision>
      <id>91329</id>
      <parentid>71843</parentid>
      <timestamp>2017-03-31T19:40:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2759">{{cpp/title | {{small|vector&lt;bool&gt;::}}reference}}
{{cpp/container/vector_bool/navbar}}
{{ddcl | 1=
class reference;
}}

The {{c|std::vector&lt;bool&gt;}} specialization defines {{c|std::vector&lt;bool&gt;::reference}} as a publicly-accessible nested class.  {{c|std::vector&lt;bool&gt;::reference}} proxies the behavior of references to a single bit in {{c|std::vector&lt;bool&gt;}}. 

The primary use of {{c|std::vector&lt;bool&gt;::reference}} is to provide an l-value that can be returned from {{tt|operator[]}}.

Any reads or writes to a vector that happen via a {{c|std::vector&lt;bool&gt;::reference}} potentially read or write to the entire underlying vector.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | nolink=true | constructs the reference. Accessible only to {{c|std::vector&lt;bool&gt;}} itself}}
{{dsc mem dtor | nolink=true | destroys the reference}}
{{dsc mem fun | operator{{=}} | nolink=true | assigns a {{c|bool}} to the referenced bit}}
{{dsc inc | cpp/container/vector_bool/reference/dsc operator bool}}
{{dsc mem fun | flip | nolink=true | flips the referenced bit}}
{{dsc end}}

{{member | {{small|std::vector&lt;bool&gt;::}}~reference | 2=
{{ddcl | 1=
~reference()
}}

Destroys the reference.
}}

{{member | {{small|std::vector&lt;bool&gt;::reference::}}operator{{=}} | 2=
{{ddcl | 1=
reference&amp; operator=( bool x );
reference&amp; operator=( const reference&amp; x );
}}

Assigns a value to the referenced bit.

===Parameters===
{{par begin}}
{{par | x | value to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{member | {{small|std::vector&lt;bool&gt;::reference::}}operator bool | 2=
{{ddcl | 1=        
operator bool() const;
}}

Returns the value of the referenced bit.

===Parameters===
(none)

===Return value===
The referenced bit.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{member | {{small|std::vector&lt;bool&gt;::reference::}}flip | 2=
{{ddcl | 1=        
void flip();
}}

Inverts the referenced bit.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/dsc operator_at | vector}}
{{dsc inc | cpp/container/vector bool/dsc swap}}
{{dsc end}}

[[de:cpp/container/vector bool/reference]]
[[es:cpp/container/vector bool/reference]]
[[fr:cpp/container/vector bool/reference]]
[[it:cpp/container/vector bool/reference]]
[[ja:cpp/container/vector bool/reference]]
[[pt:cpp/container/vector bool/reference]]
[[ru:cpp/container/vector bool/reference]]
[[zh:cpp/container/vector bool/reference]]</text>
      <sha1>5033dq3fyrn8j8i16mybf7o52nulxsi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector bool/swap</title>
    <ns>0</ns>
    <id>5569</id>
    <revision>
      <id>57337</id>
      <parentid>49463</parentid>
      <timestamp>2013-06-01T05:51:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="924">{{cpp/container/vector_bool/title | swap}}
{{cpp/container/vector_bool/navbar}}
{{ddcl | header=vector |
static void swap(reference x, reference y);
}}

Swaps the contents of {{tt|x}} and {{tt|y}}.

===Parameters===
{{par begin}}
{{par | x | {{c|std::vector&lt;bool&gt;::reference}} value to swap with {{tt|y}}}}
{{par | y | {{c|std::vector&lt;bool&gt;::reference}} value to swap with {{tt|x}}}}
{{par end}}

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc class | cpp/container/vector_bool/reference | proxy class representing a reference to a single bool}}
{{dsc inc | cpp/container/dsc swap2 | vector}}
{{dsc end}}

[[de:cpp/container/vector bool/swap]]
[[es:cpp/container/vector bool/swap]]
[[fr:cpp/container/vector bool/swap]]
[[it:cpp/container/vector bool/swap]]
[[ja:cpp/container/vector bool/swap]]
[[pt:cpp/container/vector bool/swap]]
[[ru:cpp/container/vector bool/swap]]
[[zh:cpp/container/vector bool/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector bool/vector bool</title>
    <ns>0</ns>
    <id>10119</id>
    <revision>
      <id>50829</id>
      <parentid>48203</parentid>
      <timestamp>2013-06-01T03:40:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="57">{{include page|cpp/container/constructor |vector | bool}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/assign</title>
    <ns>0</ns>
    <id>444</id>
    <revision>
      <id>50800</id>
      <parentid>42927</parentid>
      <timestamp>2013-06-01T03:39:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/assign|vector}}

[[de:cpp/container/vector/assign]]
[[es:cpp/container/vector/assign]]
[[fr:cpp/container/vector/assign]]
[[it:cpp/container/vector/assign]]
[[ja:cpp/container/vector/assign]]
[[pt:cpp/container/vector/assign]]
[[ru:cpp/container/vector/assign]]
[[zh:cpp/container/vector/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/at</title>
    <ns>0</ns>
    <id>445</id>
    <revision>
      <id>50801</id>
      <parentid>42921</parentid>
      <timestamp>2013-06-01T03:40:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="289">{{include page|cpp/container/at|vector}}

[[de:cpp/container/vector/at]]
[[es:cpp/container/vector/at]]
[[fr:cpp/container/vector/at]]
[[it:cpp/container/vector/at]]
[[ja:cpp/container/vector/at]]
[[pt:cpp/container/vector/at]]
[[ru:cpp/container/vector/at]]
[[zh:cpp/container/vector/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/back</title>
    <ns>0</ns>
    <id>446</id>
    <revision>
      <id>50802</id>
      <parentid>42915</parentid>
      <timestamp>2013-06-01T03:40:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/back|vector}}

[[de:cpp/container/vector/back]]
[[es:cpp/container/vector/back]]
[[fr:cpp/container/vector/back]]
[[it:cpp/container/vector/back]]
[[ja:cpp/container/vector/back]]
[[pt:cpp/container/vector/back]]
[[ru:cpp/container/vector/back]]
[[zh:cpp/container/vector/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/begin</title>
    <ns>0</ns>
    <id>447</id>
    <revision>
      <id>50803</id>
      <parentid>42905</parentid>
      <timestamp>2013-06-01T03:40:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/begin|vector}}

[[de:cpp/container/vector/begin]]
[[es:cpp/container/vector/begin]]
[[fr:cpp/container/vector/begin]]
[[it:cpp/container/vector/begin]]
[[ja:cpp/container/vector/begin]]
[[pt:cpp/container/vector/begin]]
[[ru:cpp/container/vector/begin]]
[[zh:cpp/container/vector/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/capacity</title>
    <ns>0</ns>
    <id>448</id>
    <revision>
      <id>67634</id>
      <parentid>50804</parentid>
      <timestamp>2014-02-14T21:16:18Z</timestamp>
      <contributor>
        <username>Samy</username>
        <id>2858</id>
      </contributor>
      <minor/>
      <comment>added link to cs translation</comment>
      <text xml:space="preserve" bytes="380">{{include page|cpp/container/capacity|vector}}

[[cs:cpp/container/vector/capacity]]
[[de:cpp/container/vector/capacity]]
[[es:cpp/container/vector/capacity]]
[[fr:cpp/container/vector/capacity]]
[[it:cpp/container/vector/capacity]]
[[ja:cpp/container/vector/capacity]]
[[pt:cpp/container/vector/capacity]]
[[ru:cpp/container/vector/capacity]]
[[zh:cpp/container/vector/capacity]]</text>
      <sha1>6qhbl9wiqxwma37siavjzqi0dn8q291</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/clear</title>
    <ns>0</ns>
    <id>449</id>
    <revision>
      <id>50805</id>
      <parentid>42892</parentid>
      <timestamp>2013-06-01T03:40:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/clear|vector}}

[[de:cpp/container/vector/clear]]
[[es:cpp/container/vector/clear]]
[[fr:cpp/container/vector/clear]]
[[it:cpp/container/vector/clear]]
[[ja:cpp/container/vector/clear]]
[[pt:cpp/container/vector/clear]]
[[ru:cpp/container/vector/clear]]
[[zh:cpp/container/vector/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/data</title>
    <ns>0</ns>
    <id>450</id>
    <revision>
      <id>50806</id>
      <parentid>42886</parentid>
      <timestamp>2013-06-01T03:40:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/data|vector}}

[[de:cpp/container/vector/data]]
[[es:cpp/container/vector/data]]
[[fr:cpp/container/vector/data]]
[[it:cpp/container/vector/data]]
[[ja:cpp/container/vector/data]]
[[pt:cpp/container/vector/data]]
[[ru:cpp/container/vector/data]]
[[zh:cpp/container/vector/data]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/emplace</title>
    <ns>0</ns>
    <id>451</id>
    <revision>
      <id>50807</id>
      <parentid>42880</parentid>
      <timestamp>2013-06-01T03:40:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="334">{{include page|cpp/container/emplace|vector}}

[[de:cpp/container/vector/emplace]]
[[es:cpp/container/vector/emplace]]
[[fr:cpp/container/vector/emplace]]
[[it:cpp/container/vector/emplace]]
[[ja:cpp/container/vector/emplace]]
[[pt:cpp/container/vector/emplace]]
[[ru:cpp/container/vector/emplace]]
[[zh:cpp/container/vector/emplace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/emplace back</title>
    <ns>0</ns>
    <id>452</id>
    <revision>
      <id>84351</id>
      <parentid>50808</parentid>
      <timestamp>2016-03-17T14:54:15Z</timestamp>
      <contributor>
        <ip>217.164.151.133</ip>
      </contributor>
      <comment>Adding TR translation reference.</comment>
      <text xml:space="preserve" bytes="420">{{include page|cpp/container/emplace_back|vector}}

[[de:cpp/container/vector/emplace back]]
[[es:cpp/container/vector/emplace back]]
[[fr:cpp/container/vector/emplace back]]
[[it:cpp/container/vector/emplace back]]
[[ja:cpp/container/vector/emplace back]]
[[pt:cpp/container/vector/emplace back]]
[[ru:cpp/container/vector/emplace back]]
[[tr:cpp/container/vector/emplace back]]
[[zh:cpp/container/vector/emplace back]]</text>
      <sha1>bc20as3cvdpvgao1db7ackvri61v883</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/empty</title>
    <ns>0</ns>
    <id>453</id>
    <revision>
      <id>67652</id>
      <parentid>50809</parentid>
      <timestamp>2014-02-17T20:09:08Z</timestamp>
      <contributor>
        <username>Samy</username>
        <id>2858</id>
      </contributor>
      <minor/>
      <comment>added link to cs translation</comment>
      <text xml:space="preserve" bytes="384">{{include page|cpp/container/empty|vector}}

[[cs:cpp/container/vector/empty]]
[[de:cpp/container/vector/empty]]
[[es:cpp/container/vector/empty]]
[[fr:cpp/container/vector/empty]]
[[it:cpp/container/vector/empty]]
[[ja:cpp/container/vector/empty]]
[[pl:cpp/container/vector/empty]]
[[pt:cpp/container/vector/empty]]
[[ru:cpp/container/vector/empty]]
[[zh:cpp/container/vector/empty]]</text>
      <sha1>k9ua11n02fos97ck5liyzbtsjsdqv2s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/end</title>
    <ns>0</ns>
    <id>454</id>
    <revision>
      <id>50810</id>
      <parentid>42853</parentid>
      <timestamp>2013-06-01T03:40:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="298">{{include page|cpp/container/end|vector}}

[[de:cpp/container/vector/end]]
[[es:cpp/container/vector/end]]
[[fr:cpp/container/vector/end]]
[[it:cpp/container/vector/end]]
[[ja:cpp/container/vector/end]]
[[pt:cpp/container/vector/end]]
[[ru:cpp/container/vector/end]]
[[zh:cpp/container/vector/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/erase</title>
    <ns>0</ns>
    <id>455</id>
    <revision>
      <id>50811</id>
      <parentid>42846</parentid>
      <timestamp>2013-06-01T03:40:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/erase|vector}}

[[de:cpp/container/vector/erase]]
[[es:cpp/container/vector/erase]]
[[fr:cpp/container/vector/erase]]
[[it:cpp/container/vector/erase]]
[[ja:cpp/container/vector/erase]]
[[pt:cpp/container/vector/erase]]
[[ru:cpp/container/vector/erase]]
[[zh:cpp/container/vector/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/front</title>
    <ns>0</ns>
    <id>456</id>
    <revision>
      <id>50812</id>
      <parentid>42835</parentid>
      <timestamp>2013-06-01T03:40:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/front|vector}}

[[de:cpp/container/vector/front]]
[[es:cpp/container/vector/front]]
[[fr:cpp/container/vector/front]]
[[it:cpp/container/vector/front]]
[[ja:cpp/container/vector/front]]
[[pt:cpp/container/vector/front]]
[[ru:cpp/container/vector/front]]
[[zh:cpp/container/vector/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/get allocator</title>
    <ns>0</ns>
    <id>457</id>
    <revision>
      <id>50813</id>
      <parentid>42826</parentid>
      <timestamp>2013-06-01T03:40:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/get_allocator|vector}}

[[de:cpp/container/vector/get allocator]]
[[es:cpp/container/vector/get allocator]]
[[fr:cpp/container/vector/get allocator]]
[[it:cpp/container/vector/get allocator]]
[[ja:cpp/container/vector/get allocator]]
[[pt:cpp/container/vector/get allocator]]
[[ru:cpp/container/vector/get allocator]]
[[zh:cpp/container/vector/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/insert</title>
    <ns>0</ns>
    <id>458</id>
    <revision>
      <id>50814</id>
      <parentid>42820</parentid>
      <timestamp>2013-06-01T03:40:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/insert|vector}}

[[de:cpp/container/vector/insert]]
[[es:cpp/container/vector/insert]]
[[fr:cpp/container/vector/insert]]
[[it:cpp/container/vector/insert]]
[[ja:cpp/container/vector/insert]]
[[pt:cpp/container/vector/insert]]
[[ru:cpp/container/vector/insert]]
[[zh:cpp/container/vector/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/max size</title>
    <ns>0</ns>
    <id>459</id>
    <revision>
      <id>50815</id>
      <parentid>42809</parentid>
      <timestamp>2013-06-01T03:40:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/max_size|vector}}

[[de:cpp/container/vector/max size]]
[[es:cpp/container/vector/max size]]
[[fr:cpp/container/vector/max size]]
[[it:cpp/container/vector/max size]]
[[ja:cpp/container/vector/max size]]
[[pt:cpp/container/vector/max size]]
[[ru:cpp/container/vector/max size]]
[[zh:cpp/container/vector/max size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/operator at</title>
    <ns>0</ns>
    <id>461</id>
    <revision>
      <id>50816</id>
      <parentid>42794</parentid>
      <timestamp>2013-06-01T03:40:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/operator_at|vector}}

[[de:cpp/container/vector/operator at]]
[[es:cpp/container/vector/operator at]]
[[fr:cpp/container/vector/operator at]]
[[it:cpp/container/vector/operator at]]
[[ja:cpp/container/vector/operator at]]
[[pt:cpp/container/vector/operator at]]
[[ru:cpp/container/vector/operator at]]
[[zh:cpp/container/vector/operator at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/operator cmp</title>
    <ns>0</ns>
    <id>1993</id>
    <revision>
      <id>50817</id>
      <parentid>42786</parentid>
      <timestamp>2013-06-01T03:40:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/container/operator_cmp|vector}}

[[de:cpp/container/vector/operator cmp]]
[[es:cpp/container/vector/operator cmp]]
[[fr:cpp/container/vector/operator cmp]]
[[it:cpp/container/vector/operator cmp]]
[[ja:cpp/container/vector/operator cmp]]
[[pt:cpp/container/vector/operator cmp]]
[[ru:cpp/container/vector/operator cmp]]
[[zh:cpp/container/vector/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/operator comp</title>
    <ns>0</ns>
    <id>4449</id>
    <redirect title="cpp/container/vector/operator cmp" />
    <revision>
      <id>15827</id>
      <timestamp>2011-12-16T16:54:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/vector/operator comp]] to [[cpp/container/vector/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/container/vector/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/operator=</title>
    <ns>0</ns>
    <id>460</id>
    <revision>
      <id>63214</id>
      <parentid>42799</parentid>
      <timestamp>2013-07-06T11:44:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{include page}}</comment>
      <text xml:space="preserve" bytes="356">{{include page|cpp/container/operator{{=}}|vector}}

[[de:cpp/container/vector/operator=]]
[[es:cpp/container/vector/operator=]]
[[fr:cpp/container/vector/operator=]]
[[it:cpp/container/vector/operator=]]
[[ja:cpp/container/vector/operator=]]
[[pt:cpp/container/vector/operator=]]
[[ru:cpp/container/vector/operator=]]
[[zh:cpp/container/vector/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/pop back</title>
    <ns>0</ns>
    <id>462</id>
    <revision>
      <id>50818</id>
      <parentid>42778</parentid>
      <timestamp>2013-06-01T03:40:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="343">{{include page|cpp/container/pop_back|vector}}

[[de:cpp/container/vector/pop back]]
[[es:cpp/container/vector/pop back]]
[[fr:cpp/container/vector/pop back]]
[[it:cpp/container/vector/pop back]]
[[ja:cpp/container/vector/pop back]]
[[pt:cpp/container/vector/pop back]]
[[ru:cpp/container/vector/pop back]]
[[zh:cpp/container/vector/pop back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/push back</title>
    <ns>0</ns>
    <id>463</id>
    <revision>
      <id>42770</id>
      <parentid>40445</parentid>
      <timestamp>2012-11-03T00:23:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding [[de:cpp/container/vector/push back]], [[pt:cpp/container/vector/push back]]</comment>
      <text xml:space="preserve" bytes="353">{{page_template|cpp/container/push_back|vector}}

[[de:cpp/container/vector/push back]]
[[es:cpp/container/vector/push back]]
[[fr:cpp/container/vector/push back]]
[[it:cpp/container/vector/push back]]
[[ja:cpp/container/vector/push back]]
[[pt:cpp/container/vector/push back]]
[[ru:cpp/container/vector/push back]]
[[zh:cpp/container/vector/push back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/rbegin</title>
    <ns>0</ns>
    <id>464</id>
    <revision>
      <id>50819</id>
      <parentid>42762</parentid>
      <timestamp>2013-06-01T03:40:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="325">{{include page|cpp/container/rbegin|vector}}

[[de:cpp/container/vector/rbegin]]
[[es:cpp/container/vector/rbegin]]
[[fr:cpp/container/vector/rbegin]]
[[it:cpp/container/vector/rbegin]]
[[ja:cpp/container/vector/rbegin]]
[[pt:cpp/container/vector/rbegin]]
[[ru:cpp/container/vector/rbegin]]
[[zh:cpp/container/vector/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/rend</title>
    <ns>0</ns>
    <id>465</id>
    <revision>
      <id>50820</id>
      <parentid>42753</parentid>
      <timestamp>2013-06-01T03:40:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="307">{{include page|cpp/container/rend|vector}}

[[de:cpp/container/vector/rend]]
[[es:cpp/container/vector/rend]]
[[fr:cpp/container/vector/rend]]
[[it:cpp/container/vector/rend]]
[[ja:cpp/container/vector/rend]]
[[pt:cpp/container/vector/rend]]
[[ru:cpp/container/vector/rend]]
[[zh:cpp/container/vector/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/reserve</title>
    <ns>0</ns>
    <id>466</id>
    <revision>
      <id>67648</id>
      <parentid>50821</parentid>
      <timestamp>2014-02-17T18:52:28Z</timestamp>
      <contributor>
        <username>Samy</username>
        <id>2858</id>
      </contributor>
      <minor/>
      <comment>added link to cs translation</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/container/reserve|vector}}

[[cs:cpp/container/vector/reserve]]
[[de:cpp/container/vector/reserve]]
[[es:cpp/container/vector/reserve]]
[[fr:cpp/container/vector/reserve]]
[[it:cpp/container/vector/reserve]]
[[ja:cpp/container/vector/reserve]]
[[pt:cpp/container/vector/reserve]]
[[ru:cpp/container/vector/reserve]]
[[zh:cpp/container/vector/reserve]]</text>
      <sha1>mi5q095czk4a1p0vppvaq302pggptal</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/resize</title>
    <ns>0</ns>
    <id>467</id>
    <revision>
      <id>80638</id>
      <parentid>50822</parentid>
      <timestamp>2015-08-24T03:52:46Z</timestamp>
      <contributor>
        <username>Neozest</username>
        <id>4245</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="360">{{include page|cpp/container/resize|vector}}

[[de:cpp/container/vector/resize]]
[[es:cpp/container/vector/resize]]
[[fr:cpp/container/vector/resize]]
[[it:cpp/container/vector/resize]]
[[ja:cpp/container/vector/resize]]
[[ko:cpp/container/vector/resize]]
[[pt:cpp/container/vector/resize]]
[[ru:cpp/container/vector/resize]]
[[zh:cpp/container/vector/resize]]</text>
      <sha1>nqqa0w7dtoapo6aopxqe2xux06ycp4a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/shrink to fit</title>
    <ns>0</ns>
    <id>468</id>
    <revision>
      <id>50823</id>
      <parentid>42733</parentid>
      <timestamp>2013-06-01T03:40:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="388">{{include page|cpp/container/shrink_to_fit|vector}}

[[de:cpp/container/vector/shrink to fit]]
[[es:cpp/container/vector/shrink to fit]]
[[fr:cpp/container/vector/shrink to fit]]
[[it:cpp/container/vector/shrink to fit]]
[[ja:cpp/container/vector/shrink to fit]]
[[pt:cpp/container/vector/shrink to fit]]
[[ru:cpp/container/vector/shrink to fit]]
[[zh:cpp/container/vector/shrink to fit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/size</title>
    <ns>0</ns>
    <id>469</id>
    <revision>
      <id>78158</id>
      <parentid>78156</parentid>
      <timestamp>2015-05-07T13:13:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 78156 by [[Special:Contributions/Susan7512|Susan7512]] ([[User talk:Susan7512|talk]])</comment>
      <text xml:space="preserve" bytes="373">{{include page|cpp/container/size|vector}}

[[cs:cpp/container/vector/size]]
[[de:cpp/container/vector/size]]
[[es:cpp/container/vector/size]]
[[fr:cpp/container/vector/size]]
[[it:cpp/container/vector/size]]
[[ja:cpp/container/vector/size]]
[[pl:cpp/container/vector/size]]
[[pt:cpp/container/vector/size]]
[[ru:cpp/container/vector/size]]
[[zh:cpp/container/vector/size]]</text>
      <sha1>oecbw6s366srawbrazg8xftxfhmm6ki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/std swap</title>
    <ns>0</ns>
    <id>3472</id>
    <redirect title="cpp/container/vector/swap2" />
    <revision>
      <id>13033</id>
      <timestamp>2011-11-03T18:42:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/container/vector/std swap]] to [[cpp/container/vector/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/container/vector/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/swap</title>
    <ns>0</ns>
    <id>470</id>
    <revision>
      <id>72828</id>
      <parentid>72827</parentid>
      <timestamp>2014-09-30T10:50:28Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Example */ std::endl =&gt; '\n'</comment>
      <text xml:space="preserve" bytes="887">{{include page|cpp/container/swap|vector}}


===Example===
{{example
 |
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;

void printVector(std::vector&lt;int&gt;&amp; vec)
{
    for (int a : vec)
    {
        std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    }
}

int main()
{
    std::vector&lt;int&gt; v1{1, 2, 3};
    std::vector&lt;int&gt; v2{7, 8, 9};
 
    std::cout &lt;&lt; &quot;v1: &quot;;
    printVector(v1);
 
    std::cout &lt;&lt; &quot;\nv2: &quot;;
    printVector(v2);
 
    std::cout &lt;&lt; &quot;\n-- SWAP\n&quot;;
    v2.swap(v1);
 
    std::cout &lt;&lt; &quot;v1: &quot;;
    printVector(v1);
 
    std::cout &lt;&lt; &quot;\nv2: &quot;;
    printVector(v2);
}
 | output=
v1: 1 2 3
v2: 7 8 9
-- SWAP
v1: 7 8 9
v2: 1 2 3
}}


[[de:cpp/container/vector/swap]]
[[es:cpp/container/vector/swap]]
[[fr:cpp/container/vector/swap]]
[[it:cpp/container/vector/swap]]
[[ja:cpp/container/vector/swap]]
[[pt:cpp/container/vector/swap]]
[[ru:cpp/container/vector/swap]]
[[zh:cpp/container/vector/swap]]</text>
      <sha1>tudx2wo1ijzmmvcnprxbwzl9bdpfheg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/swap2</title>
    <ns>0</ns>
    <id>1989</id>
    <revision>
      <id>50826</id>
      <parentid>42710</parentid>
      <timestamp>2013-06-01T03:40:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="316">{{include page|cpp/container/swap2|vector}}

[[de:cpp/container/vector/swap2]]
[[es:cpp/container/vector/swap2]]
[[fr:cpp/container/vector/swap2]]
[[it:cpp/container/vector/swap2]]
[[ja:cpp/container/vector/swap2]]
[[pt:cpp/container/vector/swap2]]
[[ru:cpp/container/vector/swap2]]
[[zh:cpp/container/vector/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/vector</title>
    <ns>0</ns>
    <id>471</id>
    <revision>
      <id>50827</id>
      <parentid>42700</parentid>
      <timestamp>2013-06-01T03:40:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="331">{{include page|cpp/container/constructor |vector}}

[[de:cpp/container/vector/vector]]
[[es:cpp/container/vector/vector]]
[[fr:cpp/container/vector/vector]]
[[it:cpp/container/vector/vector]]
[[ja:cpp/container/vector/vector]]
[[pt:cpp/container/vector/vector]]
[[ru:cpp/container/vector/vector]]
[[zh:cpp/container/vector/vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/container/vector/~vector</title>
    <ns>0</ns>
    <id>472</id>
    <revision>
      <id>50828</id>
      <parentid>42692</parentid>
      <timestamp>2013-06-01T03:40:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="337">{{include page|cpp/container/destructor|vector}}

[[de:cpp/container/vector/~vector]]
[[es:cpp/container/vector/~vector]]
[[fr:cpp/container/vector/~vector]]
[[it:cpp/container/vector/~vector]]
[[ja:cpp/container/vector/~vector]]
[[pt:cpp/container/vector/~vector]]
[[ru:cpp/container/vector/~vector]]
[[zh:cpp/container/vector/~vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/dragon/call dragon</title>
    <ns>0</ns>
    <id>473</id>
    <revision>
      <id>42657</id>
      <parentid>945</parentid>
      <timestamp>2012-11-03T00:04:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="250">{{dummy}}

[[de:cpp/dragon/call dragon]]
[[es:cpp/dragon/call dragon]]
[[fr:cpp/dragon/call dragon]]
[[it:cpp/dragon/call dragon]]
[[ja:cpp/dragon/call dragon]]
[[pt:cpp/dragon/call dragon]]
[[ru:cpp/dragon/call dragon]]
[[zh:cpp/dragon/call dragon]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/dragon/receive fire</title>
    <ns>0</ns>
    <id>474</id>
    <revision>
      <id>42652</id>
      <parentid>947</parentid>
      <timestamp>2012-11-03T00:03:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="258">{{dummy}}

[[de:cpp/dragon/receive fire]]
[[es:cpp/dragon/receive fire]]
[[fr:cpp/dragon/receive fire]]
[[it:cpp/dragon/receive fire]]
[[ja:cpp/dragon/receive fire]]
[[pt:cpp/dragon/receive fire]]
[[ru:cpp/dragon/receive fire]]
[[zh:cpp/dragon/receive fire]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error</title>
    <ns>0</ns>
    <id>475</id>
    <revision>
      <id>88696</id>
      <parentid>86164</parentid>
      <timestamp>2016-12-06T17:53:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>rearranged</comment>
      <text xml:space="preserve" bytes="3876">{{title|Error handling}}
{{cpp/error/navbar}}

===Exception handling===
The header {{tt|&lt;exception&gt;}} provides several classes and functions related to exception handling in C++ programs.

{{dsc begin}}
{{dsc header | exception}}
{{dsc inc | cpp/error/dsc exception}}
{{dsc h2 | Capture and storage of exception objects}}
{{dsc inc | cpp/error/dsc uncaught_exception}}
{{dsc inc | cpp/error/dsc exception_ptr}}
{{dsc inc | cpp/error/dsc make_exception_ptr}}
{{dsc inc | cpp/error/dsc current_exception}}
{{dsc inc | cpp/error/dsc rethrow_exception}}
{{dsc inc | cpp/error/dsc nested_exception}}
{{dsc inc | cpp/error/dsc throw_with_nested}}
{{dsc inc | cpp/error/dsc rethrow_if_nested}}
&lt;!--{{dsc header | exception_list}}
{{dsc inc | cpp/error/dsc exception_list}}--&gt;
{{dsc h2 | Handling of failures in exception handling}}
{{dsc header | exception}}
{{dsc inc | cpp/error/dsc terminate}}
{{dsc inc | cpp/error/dsc terminate_handler}}
{{dsc inc | cpp/error/dsc get_terminate}}
{{dsc inc | cpp/error/dsc set_terminate}}
{{dsc inc | cpp/error/dsc bad_exception}}
{{dsc h2 | Handling of exception specification violations (removed in C++17)}}
{{dsc inc | cpp/error/dsc unexpected}}
{{dsc inc | cpp/error/dsc unexpected_handler}}
{{dsc inc | cpp/error/dsc get_unexpected}}
{{dsc inc | cpp/error/dsc set_unexpected}}
{{dsc end}}

====Exception categories====

Several convenience classes are predefined in the header {{tt|&lt;stdexcept&gt;}} to report particular error conditions. These classes can be divided into two categories: ''logic'' errors and ''runtime'' errors. Logic errors are a consequence of faulty logic within the program and may be preventable. Runtime errors are due to events beyond the scope of the program and can not be easily predicted.

{{dsc begin}}
{{dsc header | stdexcept}}
{{dsc class | cpp/error/logic_error | exception class to indicate violations of logical preconditions or class invariants}}
{{dsc class | cpp/error/invalid_argument | exception class to report invalid arguments}}
{{dsc class | cpp/error/domain_error | exception class to report domain errors}}
{{dsc class | cpp/error/length_error | exception class to report attempts to exceed maximum allowed size}}
{{dsc class | cpp/error/out_of_range | exception class to report arguments outside of expected range}}
{{dsc class | cpp/error/runtime_error | exception class to indicate conditions only detectable at run time}}
{{dsc class | cpp/error/range_error | exception class to report range errors in internal computations}}
{{dsc class | cpp/error/overflow_error | exception class to report arithmetic overflows}}
{{dsc class | cpp/error/underflow_error | exception class to report arithmetic underflows}}
{{dsc tclass | cpp/error/tx_exception | exception class to cancel atomic transactions|notes={{mark since tm ts}}}}
{{dsc end}}

===Error numbers===

{{dsc begin}}
{{dsc header | cerrno}}
{{dsc inc | cpp/error/dsc errno}}
{{dsc inc | cpp/error/dsc errno_macros}}
{{dsc end}}

===Assertions===

Assertions help to implement checking of preconditions in programs.

{{dsc begin}}
{{dsc inc | cpp/language/dsc static_assert}}
{{dsc break}}
{{dsc header | cassert}}
{{dsc inc | cpp/error/dsc assert}}
{{dsc end}}

===System error===

The header {{tt|&lt;system_error&gt;}} defines types and functions used to report error conditions originating from the operating system, streams I/O, {{lc|std::future}}, or other low-level APIs.

{{dsc begin}}
{{dsc header | system_error}}
{{dsc inc | cpp/error/dsc error_category}}
{{dsc inc | cpp/error/dsc generic_category}}
{{dsc inc | cpp/error/dsc system_category}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc inc | cpp/error/dsc errc}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/error/dsc system_error}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/error | Error handling}}
{{dsc end}}

{{langlinks|de|es|fr|it|ja|pt|ru|zh}}</text>
      <sha1>77ufz58stxenpsyaqrvjf99nm2z8l9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/assert</title>
    <ns>0</ns>
    <id>3565</id>
    <revision>
      <id>89289</id>
      <parentid>88410</parentid>
      <timestamp>2017-01-16T16:07:40Z</timestamp>
      <contributor>
        <ip>223.104.4.50</ip>
      </contributor>
      <comment>reword</comment>
      <text xml:space="preserve" bytes="2785">{{title|assert}}
{{cpp/error/navbar}}
{{ddcl | header=cassert | 
#ifdef NDEBUG
#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/
#endif
}}

The definition of the macro {{tt|assert}} depends on another macro, {{c|NDEBUG}}, which is not defined by the standard library.

If {{c|NDEBUG}} is defined as a macro name at the point in the source code where {{tt|&lt;cassert&gt;}} is included, then {{tt|assert}} does nothing.

If {{c|NDEBUG}} is not defined, then {{tt|assert}} checks if its argument (which must have scalar type) compares equal to zero. If it does, {{tt|assert}} outputs implementation-specific diagnostic information on the standard error output and calls {{lc|std::abort}}. The diagnostic information is required to include the text of {{tt|expression}}, as well as the values of the standard macros {{c|__FILE__}},  {{c|__LINE__}}, and the standard variable {{c|__func__}}.

{{rev begin}}
{{rev|since=c++17|
The expression {{tt|assert(E)}} is guaranteed to be a [[cpp/language/constant_expression|constant subexpression]], if either
* {{c|NDEBUG}} is defined at the point where {{tt|assert}} is last defined or redefined (i.e., where the header {{tt|&lt;cassert&gt;}} or {{tt|&lt;assert.h&gt;}} was last included); or
* {{tt|E}}, contextually converted to {{c|bool}}, is a constant subexpression that evaluates to {{c|true}}.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | condition | expression of scalar type}}
{{par end}}

===Return value===
(none)

===Notes===
Because {{tt|assert}} is a [[cpp/preprocessor/replace|function-like macro]], commas anywhere in {{spar|condition}} that are not protected by parentheses are interpreted as macro argument separators. Such commas are often found in template argument lists:
{{source|1=
assert(std::is_same_v&lt;int, int&gt;); // error: assert does not take two arguments
assert((std::is_same_v&lt;int, int&gt;)); // OK: one argument
static_assert(std::is_same_v&lt;int, int&gt;); // OK: not a macro
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
// uncomment to disable assert()
// #define NDEBUG
#include &lt;cassert&gt;

int main()
{
    assert(2+2==4);
    std::cout &lt;&lt; &quot;Execution continues past the first assert\n&quot;;
    assert(2+2==5);
    std::cout &lt;&lt; &quot;Execution continues past the second assert\n&quot;;
}
 | p=true
 | output=
Execution continues past the first assert
test: test.cc:10: int main(): Assertion `2+2==5' failed.
Aborted
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/language/dsc static_assert}}
{{dsc inc | cpp/utility/program/dsc abort}}
{{dsc see c | c/error/assert |assert}}
{{dsc end}}

[[de:cpp/error/assert]]
[[es:cpp/error/assert]]
[[fr:cpp/error/assert]]
[[it:cpp/error/assert]]
[[ja:cpp/error/assert]]
[[pt:cpp/error/assert]]
[[ru:cpp/error/assert]]
[[zh:cpp/error/assert]]</text>
      <sha1>l7r3g44xytq4fy04wuhnlr1b1m5pir6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/bad exception</title>
    <ns>0</ns>
    <id>5561</id>
    <revision>
      <id>88699</id>
      <parentid>61389</parentid>
      <timestamp>2016-12-06T18:27:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>revbox until c++17 old behavior</comment>
      <text xml:space="preserve" bytes="1921">{{cpp/title|bad_exception}}
{{cpp/error/bad_exception/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl |1=
class bad_exception;
}}
{{dcl end}}

{{tt|std::bad_exception}} is the type of the exception thrown by the C++ runtime in the following situations:

@1@ If {{lc|std::exception_ptr}} stores a copy of the caught exception and if the copy constructor of the exception object caught by {{lc|std::current_exception}} throws an exception, the captured exception is an instance of {{tt|std::bad_exception}}.

{{rev begin}}
{{rev|until=c++17|
@2@ If a [[cpp/language/except_spec|dynamic exception specification]] is violated and {{lc|std::unexpected}} throws or rethrows an exception that still violates the exception specification, but the exception specification allows {{tt|std::bad_exception}},  {{tt|std::bad_exception}} is thrown.
}}
{{rev end}}

{{inheritance diagram/std-bad_exception}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/error/bad_exception/bad_exception | constructs the {{tt|bad_exception}} object}}
{{dsc mem fun | cpp/error/bad_exception/operator{{=}} | copies the object}}
{{dsc mem vfun | cpp/error/bad_exception/what | returns the explanatory string}}
{{dsc end}}

{{cpp/error/exception/inherit}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;exception&gt;
#include &lt;stdexcept&gt;

void my_unexp() { throw; }

void test() throw(std::bad_exception)
{
    throw std::runtime_error(&quot;test&quot;);
}

int main()
{
    std::set_unexpected(my_unexp);
    try {
         test();
    } catch(const std::bad_exception&amp; e)
    {
        std::cerr &lt;&lt; &quot;Caught &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
Caught std::bad_exception
}}

[[de:cpp/error/bad exception]]
[[es:cpp/error/bad exception]]
[[fr:cpp/error/bad exception]]
[[it:cpp/error/bad exception]]
[[ja:cpp/error/bad exception]]
[[pt:cpp/error/bad exception]]
[[ru:cpp/error/bad exception]]
[[zh:cpp/error/bad exception]]</text>
      <sha1>re691i53034hhwg6zr9nhe713bce0ct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/bad exception/bad exception</title>
    <ns>0</ns>
    <id>12645</id>
    <revision>
      <id>91426</id>
      <parentid>80017</parentid>
      <timestamp>2017-03-31T19:43:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="495">{{cpp/error/bad_exception/title|bad_exception}}
{{cpp/error/bad_exception/navbar}}
{{dcl begin}}
{{dcl |
bad_exception();
}}
{{dcl |
bad_exception( const bad_exception&amp; other );
}}
{{dcl end}}

Constructs new {{tt|bad_exception}} object.

@1@ Default constructor.

@2@ Copy constructor. Initializes the object with the contents of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | {{tt|bad_exception}} object to initialize with}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>iyihl0nde1gn59tp3pgzx7o3y8zykj2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/bad exception/operator=</title>
    <ns>0</ns>
    <id>12646</id>
    <revision>
      <id>91354</id>
      <parentid>80018</parentid>
      <timestamp>2017-03-31T19:41:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="400">{{cpp/error/bad_exception/title|operator{{=}}}}
{{cpp/error/bad_exception/navbar}}
{{dcl begin}}
{{dcl | 1=
bad_exception&amp; operator=( const bad_exception&amp; other );
}}
{{dcl end}}

Assigns the contents of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another {{tt|bad_exception}} object to assign}}
{{par end}}

===Return value===
{{c|*this}}.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>7vg90pll7g2kdql4b1jdw7p8qhjs4rf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/bad exception/what</title>
    <ns>0</ns>
    <id>8989</id>
    <revision>
      <id>91854</id>
      <parentid>80019</parentid>
      <timestamp>2017-03-31T19:59:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="595">{{cpp/error/bad_exception/title|what}}
{{cpp/error/bad_exception/navbar}}
{{ddcl |
virtual const char* what() const;
}}

Returns the explanatory string.

===Parameters===
(none)

===Return value===
Pointer to a null-terminated string with explanatory information. 

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/bad exception/what]]
[[es:cpp/error/bad exception/what]]
[[fr:cpp/error/bad exception/what]]
[[it:cpp/error/bad exception/what]]
[[ja:cpp/error/bad exception/what]]
[[pt:cpp/error/bad exception/what]]
[[ru:cpp/error/bad exception/what]]
[[zh:cpp/error/bad exception/what]]</text>
      <sha1>su4r85w399yt3thsi18lpelv91di9ud</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/current exception</title>
    <ns>0</ns>
    <id>5611</id>
    <revision>
      <id>91642</id>
      <parentid>85780</parentid>
      <timestamp>2017-03-31T19:53:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1989">{{cpp/title|current_exception}}
{{cpp/error/navbar}}
{{ddcl | header=exception | since=c++11 |
std::exception_ptr current_exception();
}}

If called during exception handling (typically, in a {{c|catch}} clause), captures the current exception object and creates an {{lc|std::exception_ptr}} that holds either a copy or a reference to that exception object (depending on the implementation). The referenced object remains valid at least as long as there is an {{tt|exception_ptr}} object that refers to it.

If the implementation of this function requires a call to {{c|new}} and the call fails, the returned pointer will hold a reference to an instance of {{lc|std::bad_alloc}}.

If the implementation of this function requires copying the captured exception object and its copy constructor throws an exception, the returned pointer will hold a reference to the exception thrown. If the copy constructor of the thrown exception object also throws, the returned pointer may hold a reference to an instance of {{lc|std::bad_exception}} to break the endless loop.

If the function is called when no exception is being handled, an empty {{lc|std::exception_ptr}} is returned.

===Parameters===
(none)

===Return value===
An instance of {{lc|std::exception_ptr}} holding a reference to the exception object, or a copy of the exception object, or to an instance of {{lc|std::bad_alloc}} or to an instance of {{lc|std::bad_exception}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{include| cpp/error/example_exception_ptr}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc exception_ptr}}
{{dsc inc | cpp/error/dsc rethrow_exception}}
{{dsc inc | cpp/error/dsc make_exception_ptr}}
{{dsc end}}

[[de:cpp/error/current exception]]
[[es:cpp/error/current exception]]
[[fr:cpp/error/current exception]]
[[it:cpp/error/current exception]]
[[ja:cpp/error/current exception]]
[[pt:cpp/error/current exception]]
[[ru:cpp/error/current exception]]
[[zh:cpp/error/current exception]]</text>
      <sha1>4uckia56lpx9m1i9yiu6tf34cikaolo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/domain error</title>
    <ns>0</ns>
    <id>2086</id>
    <revision>
      <id>70816</id>
      <parentid>70815</parentid>
      <timestamp>2014-05-30T18:37:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>aha, boost.math uses it</comment>
      <text xml:space="preserve" bytes="1231">{{cpp/title | domain_error}}
{{cpp/error/domain_error/navbar}}
{{ddcl | header=stdexcept |
class domain_error;
}}

Defines a type of object to be thrown as exception. It may be used by the implementation to report domain errors, that is, situations where the inputs are outside of the domain on which an operation is defined.

The standard library components do not throw this exception (mathematical functions report domain errors as specified in {{lc|math_errhandling}}). Third-party libraries, however, use this. For example, [http://www.boost.org/doc/libs/1_55_0/libs/math/doc/html/math_toolkit/error_handling.html boost.math] throws {{tt|std::domain_error}} if {{tt|boost::math::policies::throw_on_error}} is enabled (the default setting).

{{inheritance diagram/std-domain_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|domain_error}}
{{dsc end}}

{{include|cpp/error/exception/constructor|domain_error}}

{{cpp/error/exception/inherit}}

[[de:cpp/error/domain error]]
[[es:cpp/error/domain error]]
[[fr:cpp/error/domain error]]
[[it:cpp/error/domain error]]
[[ja:cpp/error/domain error]]
[[pt:cpp/error/domain error]]
[[ru:cpp/error/domain error]]
[[zh:cpp/error/domain error]]</text>
      <sha1>r265e9n0yyoeu7dekgaukhhzcnyrzv0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/domain error/domain error</title>
    <ns>0</ns>
    <id>4495</id>
    <redirect title="cpp/error/domain error" />
    <revision>
      <id>47831</id>
      <parentid>42592</parentid>
      <timestamp>2013-05-16T22:27:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/domain error]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/domain_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/errc</title>
    <ns>0</ns>
    <id>5565</id>
    <revision>
      <id>62699</id>
      <parentid>61368</parentid>
      <timestamp>2013-07-01T23:33:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="8587">{{cpp/title|errc}}
{{cpp/error/errc/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | since=c++11 | 1=
enum class errc;
}}
{{dcl end}}

The scoped enumeration {{tt|std::errc}} defines the values of portable error conditions that correspond to the POSIX error codes. 

===Member constants===
{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|address_family_not_supported}} | error condition corresponding to POSIX code EAFNOSUPPORT}}
{{dsc | {{tt|address_in_use}} | error condition corresponding to POSIX code EADDRINUSE}}
{{dsc | {{tt|address_not_available}} | error condition corresponding to POSIX code EADDRNOTAVAIL}}
{{dsc | {{tt|already_connected}} | error condition corresponding to POSIX code EISCONN}}
{{dsc | {{tt|argument_list_too_long}} | error condition corresponding to POSIX code E2BIG}}
{{dsc | {{tt|argument_out_of_domain}} | error condition corresponding to POSIX code EDOM}}
{{dsc | {{tt|bad_address}} | error condition corresponding to POSIX code EFAULT}}
{{dsc | {{tt|bad_file_descriptor}} | error condition corresponding to POSIX code EBADF}}
{{dsc | {{tt|bad_message}} | error condition corresponding to POSIX code EBADMSG}}
{{dsc | {{tt|broken_pipe}} | error condition corresponding to POSIX code EPIPE}}
{{dsc | {{tt|connection_aborted}} | error condition corresponding to POSIX code ECONNABORTED}}
{{dsc | {{tt|connection_already_in_progress}} | error condition corresponding to POSIX code EALREADY}}
{{dsc | {{tt|connection_refused}} | error condition corresponding to POSIX code ECONNREFUSED}}
{{dsc | {{tt|connection_reset}} | error condition corresponding to POSIX code ECONNRESET}}
{{dsc | {{tt|cross_device_link}} | error condition corresponding to POSIX code EXDEV}}
{{dsc | {{tt|destination_address_required}} | error condition corresponding to POSIX code EDESTADDRREQ}}
{{dsc | {{tt|device_or_resource_busy}} | error condition corresponding to POSIX code EBUSY}}
{{dsc | {{tt|directory_not_empty}} | error condition corresponding to POSIX code ENOTEMPTY}}
{{dsc | {{tt|executable_format_error}} | error condition corresponding to POSIX code ENOEXEC}}
{{dsc | {{tt|file_exists}} | error condition corresponding to POSIX code EEXIST}}
{{dsc | {{tt|file_too_large}} | error condition corresponding to POSIX code EFBIG}}
{{dsc | {{tt|filename_too_long}} | error condition corresponding to POSIX code ENAMETOOLONG}}
{{dsc | {{tt|function_not_supported}} | error condition corresponding to POSIX code ENOSYS}}
{{dsc | {{tt|host_unreachable}} | error condition corresponding to POSIX code EHOSTUNREACH}}
{{dsc | {{tt|identifier_removed}} | error condition corresponding to POSIX code EIDRM}}
{{dsc | {{tt|illegal_byte_sequence}} | error condition corresponding to POSIX code EILSEQ}}
{{dsc | {{tt|inappropriate_io_control_operation}} | error condition corresponding to POSIX code ENOTTY}}
{{dsc | {{tt|interrupted}} | error condition corresponding to POSIX code EINTR}}
{{dsc | {{tt|invalid_argument}} | error condition corresponding to POSIX code EINVAL}}
{{dsc | {{tt|invalid_seek}} | error condition corresponding to POSIX code ESPIPE}}
{{dsc | {{tt|io_error}} | error condition corresponding to POSIX code EIO}}
{{dsc | {{tt|is_a_directory}} | error condition corresponding to POSIX code EISDIR}}
{{dsc | {{tt|message_size}} | error condition corresponding to POSIX code EMSGSIZE}}
{{dsc | {{tt|network_down}} | error condition corresponding to POSIX code ENETDOWN}}
{{dsc | {{tt|network_reset}} | error condition corresponding to POSIX code ENETRESET}}
{{dsc | {{tt|network_unreachable}} | error condition corresponding to POSIX code ENETUNREACH}}
{{dsc | {{tt|no_buffer_space}} | error condition corresponding to POSIX code ENOBUFS}}
{{dsc | {{tt|no_child_process}} | error condition corresponding to POSIX code ECHILD}}
{{dsc | {{tt|no_link}} | error condition corresponding to POSIX code ENOLINK}}
{{dsc | {{tt|no_lock_available}} | error condition corresponding to POSIX code ENOLCK}}
{{dsc | {{tt|no_message_available}} | error condition corresponding to POSIX code ENODATA}}
{{dsc | {{tt|no_message}} | error condition corresponding to POSIX code ENOMSG}}
{{dsc | {{tt|no_protocol_option}} | error condition corresponding to POSIX code ENOPROTOOPT}}
{{dsc | {{tt|no_space_on_device}} | error condition corresponding to POSIX code ENOSPC}}
{{dsc | {{tt|no_stream_resources}} | error condition corresponding to POSIX code ENOSR}}
{{dsc | {{tt|no_such_device_or_address}} | error condition corresponding to POSIX code ENXIO}}
{{dsc | {{tt|no_such_device}} | error condition corresponding to POSIX code ENODEV}}
{{dsc | {{tt|no_such_file_or_directory}} | error condition corresponding to POSIX code ENOENT}}
{{dsc | {{tt|no_such_process}} | error condition corresponding to POSIX code ESRCH}}
{{dsc | {{tt|not_a_directory}} | error condition corresponding to POSIX code ENOTDIR}}
{{dsc | {{tt|not_a_socket}} | error condition corresponding to POSIX code ENOTSOCK}}
{{dsc | {{tt|not_a_stream}} | error condition corresponding to POSIX code ENOSTR}}
{{dsc | {{tt|not_connected}} | error condition corresponding to POSIX code ENOTCONN}}
{{dsc | {{tt|not_enough_memory}} | error condition corresponding to POSIX code ENOMEM}}
{{dsc | {{tt|not_supported}} | error condition corresponding to POSIX code ENOTSUP}}
{{dsc | {{tt|operation_canceled}} | error condition corresponding to POSIX code ECANCELED}}
{{dsc | {{tt|operation_in_progress}} | error condition corresponding to POSIX code EINPROGRESS}}
{{dsc | {{tt|operation_not_permitted}} | error condition corresponding to POSIX code EPERM}}
{{dsc | {{tt|operation_not_supported}} | error condition corresponding to POSIX code EOPNOTSUPP}}
{{dsc | {{tt|operation_would_block}} | error condition corresponding to POSIX code EWOULDBLOCK}}
{{dsc | {{tt|owner_dead}} | error condition corresponding to POSIX code EOWNERDEAD}}
{{dsc | {{tt|permission_denied}} | error condition corresponding to POSIX code EACCES}}
{{dsc | {{tt|protocol_error}} | error condition corresponding to POSIX code EPROTO}}
{{dsc | {{tt|protocol_not_supported}} | error condition corresponding to POSIX code EPROTONOSUPPORT}}
{{dsc | {{tt|read_only_file_system}} | error condition corresponding to POSIX code EROFS}}
{{dsc | {{tt|resource_deadlock_would_occur}} | error condition corresponding to POSIX code EDEADLK}}
{{dsc | {{tt|resource_unavailable_try_again}} | error condition corresponding to POSIX code EAGAIN}}
{{dsc | {{tt|result_out_of_range}} | error condition corresponding to POSIX code ERANGE}}
{{dsc | {{tt|state_not_recoverable}} | error condition corresponding to POSIX code ENOTRECOVERABLE}}
{{dsc | {{tt|stream_timeout}} | error condition corresponding to POSIX code ETIME}}
{{dsc | {{tt|text_file_busy}} | error condition corresponding to POSIX code ETXTBSY}}
{{dsc | {{tt|timed_out}} | error condition corresponding to POSIX code ETIMEDOUT}}
{{dsc | {{tt|too_many_files_open_in_system}} | error condition corresponding to POSIX code ENFILE}}
{{dsc | {{tt|too_many_files_open}} | error condition corresponding to POSIX code EMFILE}}
{{dsc | {{tt|too_many_links}} | error condition corresponding to POSIX code EMLINK}}
{{dsc | {{tt|too_many_symbolic_link_levels}} | error condition corresponding to POSIX code ELOOP}}
{{dsc | {{tt|value_too_large}} | error condition corresponding to POSIX code EOVERFLOW}}
{{dsc | {{tt|wrong_protocol_type}} | error condition corresponding to POSIX code EPROTOTYPE}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/error/errc/dsc make_error_code}}
{{dsc inc | cpp/error/errc/dsc make_error_condition}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/error/errc/dsc is_error_condition_enum}}
{{dsc end}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;system_error&gt;
#include &lt;thread&gt;
int main()
{
    try {
        std::thread().detach(); // detaching a not-a-thread
    } catch (const std::system_error&amp; e) {
        std::cout &lt;&lt; &quot;Caught a system_error\n&quot;;
        if(e.code() == std::errc::invalid_argument)
            std::cout &lt;&lt; &quot;The error condition is std::errc::invalid_argument\n&quot;;
        std::cout &lt;&lt; &quot;the error description is &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
| output=
Caught a system_error
The error condition is std::errc::invalid_argument
the error description is Invalid argument
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc end}}

[[de:cpp/error/errc]]
[[es:cpp/error/errc]]
[[fr:cpp/error/errc]]
[[it:cpp/error/errc]]
[[ja:cpp/error/errc]]
[[pt:cpp/error/errc]]
[[ru:cpp/error/errc]]
[[zh:cpp/error/errc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/errc/is error condition enum</title>
    <ns>0</ns>
    <id>12627</id>
    <revision>
      <id>85538</id>
      <parentid>61364</parentid>
      <timestamp>2016-04-25T03:34:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="536">{{cpp/title|is_error_condition_enum{{dsc small|&lt;std::errc&gt;}}}}
{{cpp/error/errc/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | since=c++11 | 
template&lt;&gt;
struct is_error_condition_enum&lt;std::errc&gt; : std::true_type;
}}
{{dcl end}}

Specifies that {{lc|std::errc}} is an error condition enum. This enables implicit conversion to {{lc|std::error_condition}}.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error condition/dsc is_error_condition_enum}}
{{dsc end}}</text>
      <sha1>bljm9vylzafsvi0omsm3ygqzl1dgfuz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/errc/make error code</title>
    <ns>0</ns>
    <id>9023</id>
    <revision>
      <id>91322</id>
      <parentid>72285</parentid>
      <timestamp>2017-03-31T19:40:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="511">{{cpp/title|make_error_code{{dsc small|(std::errc)}}}}
{{cpp/error/errc/navbar}}
{{ddcl | header=system_error | since=c++11 | 1=
std::error_code make_error_code( std::errc e );
}}

Creates error code value for errc enum {{tt|e}}.

Equivalent to {{c|std::error_code(static_cast&lt;int&gt;(e), std::generic_category())}}

===Parameters===
{{par begin}}
{{par | e | error code enum to create error code for}}
{{par end}}

===Return value===
Error code corresponding to {{tt|e}}.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>3a8zcz9fi6y27h13zc7avq922gunup0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/errc/make error condition</title>
    <ns>0</ns>
    <id>9637</id>
    <revision>
      <id>91790</id>
      <parentid>83880</parentid>
      <timestamp>2017-03-31T19:58:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="802">{{cpp/title|make_error_condition{{dsc small|(std::errc)}}}}
{{cpp/error/errc/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | since=c++11 |
std::error_condition make_error_condition( std::errc e );
}}
{{dcl end}}

Creates an error condition for an {{tt|errc}} value {{tt|e}}. Sets the error code to {{c|int(e)}} and error category to {{lc|std::generic_category}}.

===Parameters===
{{par begin}}
{{par | e | standard error code}}
{{par end}}

===Return value===
Error condition for {{tt|e}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;system_error&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    auto err = std::make_error_condition(std::errc::invalid_argument);
    std::cout &lt;&lt; err.message() &lt;&lt; '\n';
}
|p=true
|output=
Invalid argument
}}</text>
      <sha1>tlazdxnondbskor8gilcpxll1746b01</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/errno</title>
    <ns>0</ns>
    <id>5564</id>
    <revision>
      <id>90150</id>
      <parentid>90148</parentid>
      <timestamp>2017-02-07T09:20:34Z</timestamp>
      <contributor>
        <ip>36.149.1.131</ip>
      </contributor>
      <text xml:space="preserve" bytes="1259">{{title|errno}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | cerrno}}
{{dcl |
#define errno /*implementation-defined*/
}}
{{dcl end}}

{{tt|errno}} is a preprocessor macro used for error indication. It expands to a {{rev inl| until=c++11 | static}}{{rev inl| since=c++11 | thread-local}} modifiable lvalue of type {{c|int}}.

Several standard library functions indicate errors by writing positive integers to {{tt|errno}}. Typically, the value of {{tt|errno}} is set to one of the error codes, listed in {{tt|&lt;cerrno&gt;}} as macro constants that begin with the letter {{tt|E}}, followed by uppercase letters or digits.

The value of {{tt|errno}} is {{c|0}} at program startup, and although library functions are allowed to write positive integers to {{tt|errno}} whether or not an error occurred, library functions never store {{c|0}} in {{tt|errno}}.

===Example===
{{example template|cpp/error/example_errno}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc errno_macros}}
{{dsc inc | cpp/io/c/dsc perror}}
{{dsc inc | cpp/string/byte/dsc strerror}}
{{dsc end}}

[[de:cpp/error/errno]]
[[es:cpp/error/errno]]
[[fr:cpp/error/errno]]
[[it:cpp/error/errno]]
[[ja:cpp/error/errno]]
[[pt:cpp/error/errno]]
[[ru:cpp/error/errno]]
[[zh:cpp/error/errno]]</text>
      <sha1>r0r0nvze5gxess15qsb7w1eizdg0psr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/errno macros</title>
    <ns>0</ns>
    <id>3444</id>
    <revision>
      <id>87566</id>
      <parentid>87565</parentid>
      <timestamp>2016-09-10T03:41:52Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rv</comment>
      <text xml:space="preserve" bytes="8882">{{title|Error numbers}}
{{cpp/error/navbar}}

Each of the macros defined in {{tt|&lt;cerrno&gt;}} expands to integer constant expressions with type {{c|int}}, each with a positive value, matching most of the [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html POSIX error codes]. The following constants are defined (the implementation may define more, as long as they begin with {{c|'E'}} followed by digits or uppercase letters)

{{dsc begin}}
{{dsc header | cerrno}}
{{dsc macro const | E2BIG            | nolink=true| notes={{mark c++11}}| Argument list too long }}
{{dsc macro const | EACCES           | nolink=true| notes={{mark c++11}}| Permission denied}}
{{dsc macro const | EADDRINUSE       | nolink=true| notes={{mark c++11}}| Address in use}}
{{dsc macro const | EADDRNOTAVAIL    | nolink=true| notes={{mark c++11}}| Address not available}}
{{dsc macro const | EAFNOSUPPORT     | nolink=true| notes={{mark c++11}}| Address family not supported}}
{{dsc macro const | EAGAIN           | nolink=true| notes={{mark c++11}}| Resource unavailable, try again}}
{{dsc macro const | EALREADY         | nolink=true| notes={{mark c++11}}| Connection already in progress}}
{{dsc macro const | EBADF            | nolink=true| notes={{mark c++11}}| Bad file descriptor}}
{{dsc macro const | EBADMSG          | nolink=true| notes={{mark c++11}}| Bad message}}
{{dsc macro const | EBUSY            | nolink=true| notes={{mark c++11}}| Device or resource busy}}
{{dsc macro const | ECANCELED        | nolink=true| notes={{mark c++11}}| Operation canceled}}
{{dsc macro const | ECHILD           | nolink=true| notes={{mark c++11}}| No child processes}}
{{dsc macro const | ECONNABORTED     | nolink=true| notes={{mark c++11}}| Connection aborted}}
{{dsc macro const | ECONNREFUSED     | nolink=true| notes={{mark c++11}}| Connection refused}}
{{dsc macro const | ECONNRESET       | nolink=true| notes={{mark c++11}}| Connection reset}}
{{dsc macro const | EDEADLK          | nolink=true| notes={{mark c++11}}| Resource deadlock would occur}}
{{dsc macro const | EDESTADDRREQ     | nolink=true| notes={{mark c++11}}| Destination address required}}
{{dsc macro const | EDOM             | nolink=true                      | Mathematics argument out of domain of function}}
{{dsc macro const | EEXIST           | nolink=true| notes={{mark c++11}}| File exists}}
{{dsc macro const | EFAULT           | nolink=true| notes={{mark c++11}}| Bad address}}
{{dsc macro const | EFBIG            | nolink=true| notes={{mark c++11}}| File too large}}
{{dsc macro const | EHOSTUNREACH     | nolink=true| notes={{mark c++11}}| Host is unreachable}}
{{dsc macro const | EIDRM            | nolink=true| notes={{mark c++11}}| Identifier removed}}
{{dsc macro const | EILSEQ           | nolink=true| notes={{mark c++11}}| Illegal byte sequence}}
{{dsc macro const | EINPROGRESS      | nolink=true| notes={{mark c++11}}| Operation in progress}}
{{dsc macro const | EINTR            | nolink=true| notes={{mark c++11}}| Interrupted function}}
{{dsc macro const | EINVAL           | nolink=true| notes={{mark c++11}}| Invalid argument}}
{{dsc macro const | EIO              | nolink=true| notes={{mark c++11}}| I/O error}}
{{dsc macro const | EISCONN          | nolink=true| notes={{mark c++11}}| Socket is connected}}
{{dsc macro const | EISDIR           | nolink=true| notes={{mark c++11}}| Is a directory}}
{{dsc macro const | ELOOP            | nolink=true| notes={{mark c++11}}| Too many levels of symbolic links}}
{{dsc macro const | EMFILE           | nolink=true| notes={{mark c++11}}| File descriptor value too large}}
{{dsc macro const | EMLINK           | nolink=true| notes={{mark c++11}}| Too many links}}
{{dsc macro const | EMSGSIZE         | nolink=true| notes={{mark c++11}}| Message too large}}
{{dsc macro const | ENAMETOOLONG     | nolink=true| notes={{mark c++11}}| Filename too long}}
{{dsc macro const | ENETDOWN         | nolink=true| notes={{mark c++11}}| Network is down}}
{{dsc macro const | ENETRESET        | nolink=true| notes={{mark c++11}}| Connection aborted by network}}
{{dsc macro const | ENETUNREACH      | nolink=true| notes={{mark c++11}}| Network unreachable}}
{{dsc macro const | ENFILE           | nolink=true| notes={{mark c++11}}| Too many files open in system}}
{{dsc macro const | ENOBUFS          | nolink=true| notes={{mark c++11}}| No buffer space available}}
{{dsc macro const | ENODATA          | nolink=true| notes={{mark c++11}}| No message is available on the STREAM head read queue}}
{{dsc macro const | ENODEV           | nolink=true| notes={{mark c++11}}| No such device}}
{{dsc macro const | ENOENT           | nolink=true| notes={{mark c++11}}| No such file or directory}}
{{dsc macro const | ENOEXEC          | nolink=true| notes={{mark c++11}}| Executable file format error}}
{{dsc macro const | ENOLCK           | nolink=true| notes={{mark c++11}}| No locks available}}
{{dsc macro const | ENOLINK          | nolink=true| notes={{mark c++11}}| Link has been severed}}
{{dsc macro const | ENOMEM           | nolink=true| notes={{mark c++11}}| Not enough space}}
{{dsc macro const | ENOMSG           | nolink=true| notes={{mark c++11}}| No message of the desired type}}
{{dsc macro const | ENOPROTOOPT      | nolink=true| notes={{mark c++11}}| Protocol not available}}
{{dsc macro const | ENOSPC           | nolink=true| notes={{mark c++11}}| No space left on device}}
{{dsc macro const | ENOSR            | nolink=true| notes={{mark c++11}}| No STREAM resources}}
{{dsc macro const | ENOSTR           | nolink=true| notes={{mark c++11}}| Not a STREAM}}
{{dsc macro const | ENOSYS           | nolink=true| notes={{mark c++11}}| Function not supported}}
{{dsc macro const | ENOTCONN         | nolink=true| notes={{mark c++11}}| The socket is not connected}}
{{dsc macro const | ENOTDIR          | nolink=true| notes={{mark c++11}}| Not a directory}}
{{dsc macro const | ENOTEMPTY        | nolink=true| notes={{mark c++11}}| Directory not empty}}
{{dsc macro const | ENOTRECOVERABLE  | nolink=true| notes={{mark c++11}}| State not recoverable}}
{{dsc macro const | ENOTSOCK         | nolink=true| notes={{mark c++11}}| Not a socket}}
{{dsc macro const | ENOTSUP          | nolink=true| notes={{mark c++11}}| Not supported}}
{{dsc macro const | ENOTTY           | nolink=true| notes={{mark c++11}}| Inappropriate I/O control operation}}
{{dsc macro const | ENXIO            | nolink=true| notes={{mark c++11}}| No such device or address}}
{{dsc macro const | EOPNOTSUPP       | nolink=true| notes={{mark c++11}}| Operation not supported on socket}}
{{dsc macro const | EOVERFLOW        | nolink=true| notes={{mark c++11}}| Value too large to be stored in data type}}
{{dsc macro const | EOWNERDEAD       | nolink=true| notes={{mark c++11}}| Previous owner died}}
{{dsc macro const | EPERM            | nolink=true| notes={{mark c++11}}| Operation not permitted}}
{{dsc macro const | EPIPE            | nolink=true| notes={{mark c++11}}| Broken pipe}}
{{dsc macro const | EPROTO           | nolink=true| notes={{mark c++11}}| Protocol error}}
{{dsc macro const | EPROTONOSUPPORT  | nolink=true| notes={{mark c++11}}| Protocol not supported}}
{{dsc macro const | EPROTOTYPE       | nolink=true| notes={{mark c++11}}| Protocol wrong type for socket}}
{{dsc macro const | ERANGE           | nolink=true|                       Result too large}}
{{dsc macro const | EROFS            | nolink=true| notes={{mark c++11}}| Read-only file system}}
{{dsc macro const | ESPIPE           | nolink=true| notes={{mark c++11}}| Invalid seek}}
{{dsc macro const | ESRCH            | nolink=true| notes={{mark c++11}}| No such process}}
{{dsc macro const | ETIME            | nolink=true| notes={{mark c++11}}| Stream ioctl() timeout}}
{{dsc macro const | ETIMEDOUT        | nolink=true| notes={{mark c++11}}| Connection timed out}}
{{dsc macro const | ETXTBSY          | nolink=true| notes={{mark c++11}}| Text file busy}}
{{dsc macro const | EWOULDBLOCK      | nolink=true| notes={{mark c++11}}| Operation would block}}
{{dsc macro const | EXDEV            | nolink=true| notes={{mark c++11}}| Cross-device link}}
{{dsc end}}

All values are required to be unique except that the values of {{tt|EOPNOTSUPP}} and {{tt|ENOTSUP}} may be identical and the values of {{tt|EAGAIN}} and {{tt|EWOULDBLOCK}} may be identical

===Example===
{{example template|cpp/error/example_errno}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc errc}}
{{dsc inc | cpp/error/dsc errno}}
{{dsc inc | cpp/io/c/dsc perror}}
{{dsc inc | cpp/string/byte/dsc strerror}}
{{dsc see c | c/error/errno_macros | Error numbers }}
{{dsc end}}

[[de:cpp/error/errno macros]]
[[es:cpp/error/errno macros]]
[[fr:cpp/error/errno macros]]
[[it:cpp/error/errno macros]]
[[ja:cpp/error/errno macros]]
[[pt:cpp/error/errno macros]]
[[ru:cpp/error/errno macros]]
[[zh:cpp/error/errno macros]]</text>
      <sha1>pd6qzmbr75rzdpm0nkbiyzwkl043wfh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category</title>
    <ns>0</ns>
    <id>4828</id>
    <revision>
      <id>63295</id>
      <parentid>57355</parentid>
      <timestamp>2013-07-10T01:27:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1654">{{cpp/title|error_category}}
{{cpp/error/error_category/navbar}}
{{ddcl | header=system_error | since=c++11 | 1=
class error_category;
}}

{{tt|std::error_category}} serves as the base class for specific error category types, such as {{lc|std::system_category}}, {{c|std::iostream_category}}, etc. Each specific category class defines the {{tt|error_code}} - {{tt|error_condition}} mapping and holds the explanatory strings for all error_conditions. The objects of error category classes are treated as singletons, passed by reference.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/error_category/dsc constructor}}
{{dsc inc | cpp/error/error_category/dsc destructor}}
{{dsc inc | cpp/error/error_category/dsc operator{{=}}}}
{{dsc inc | cpp/error/error_category/dsc name}}
{{dsc inc | cpp/error/error_category/dsc default_error_condition}}
{{dsc inc | cpp/error/error_category/dsc equivalent}}
{{dsc inc | cpp/error/error_category/dsc message}}
{{dsc inc | cpp/error/error_category/dsc operator_cmp}}
{{dsc end}}

===Specific error categories===
{{dsc begin}}
{{dsc inc | cpp/error/dsc generic_category}}
{{dsc inc | cpp/error/dsc system_category}}
{{dsc inc | cpp/io/dsc iostream_category}}
{{dsc inc | cpp/thread/future/dsc future_category}}
{{dsc begin}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc end}}

[[de:cpp/error/error category]]
[[es:cpp/error/error category]]
[[fr:cpp/error/error category]]
[[it:cpp/error/error category]]
[[ja:cpp/error/error category]]
[[pt:cpp/error/error category]]
[[ru:cpp/error/error category]]
[[zh:cpp/error/error category]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category/default error condition</title>
    <ns>0</ns>
    <id>8925</id>
    <revision>
      <id>91471</id>
      <parentid>63296</parentid>
      <timestamp>2017-03-31T19:46:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="971">{{cpp/error/error_category/title|default_error_condition}}
{{cpp/error/error_category/navbar}}
{{ddcl | since=c++11 | 1=
virtual std::error_condition default_error_condition( int code ) const;
}}

Returns the error condition for the given error code.

Equivalent to {{c|std::error_condition(code, *this)}}.

===Parameters===
{{par begin}}
{{par | code | error code for which to return error condition}}
{{par end}}

===Return value===
The error condition for the given error code.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/error category/default error condition]]
[[es:cpp/error/error category/default error condition]]
[[fr:cpp/error/error category/default error condition]]
[[it:cpp/error/error category/default error condition]]
[[ja:cpp/error/error category/default error condition]]
[[pt:cpp/error/error category/default error condition]]
[[ru:cpp/error/error category/default error condition]]
[[zh:cpp/error/error category/default error condition]]</text>
      <sha1>pjgcjfwf3uz0fu3isw7r1ie6l2td0r1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category/equivalent</title>
    <ns>0</ns>
    <id>8922</id>
    <revision>
      <id>91700</id>
      <parentid>62701</parentid>
      <timestamp>2017-03-31T19:55:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1368">{{cpp/error/error_category/title|equivalent}}
{{cpp/error/error_category/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
virtual bool equivalent( int code, 
                         const std::error_condition&amp; condition ) const;
}}
{{dcl | since=c++11 | num=2 | 1=
virtual bool equivalent( const std::error_code&amp; code,
                         int condition ) const;
}}
{{dcl end}}

Checks whether error code is equivalent to an error condition for the error category represented by {{c|*this}}.

@1@ Equivalent to {{c|1=default_error_condition(code) == condition}}.
@2@ Equivalent to {{c|1=*this == code.category() &amp;&amp; code.value() == condition}}.

===Parameters===
{{par begin}}
{{par | code | specifies the error code to compare}}
{{par | condition | specifies the error condition to compare}}
{{par end}}

===Return value===
{{c|true}} if the error code is equivalent to the given error condition for the error category represented by {{c|*this}}, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/error category/equivalent]]
[[es:cpp/error/error category/equivalent]]
[[fr:cpp/error/error category/equivalent]]
[[it:cpp/error/error category/equivalent]]
[[ja:cpp/error/error category/equivalent]]
[[pt:cpp/error/error category/equivalent]]
[[ru:cpp/error/error category/equivalent]]
[[zh:cpp/error/error category/equivalent]]</text>
      <sha1>3kt0k5n2a8jvljph6lljpn11604ryhc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category/error category</title>
    <ns>0</ns>
    <id>8918</id>
    <revision>
      <id>91801</id>
      <parentid>68197</parentid>
      <timestamp>2017-03-31T19:58:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="754">{{cpp/error/error_category/title|error_category}}
{{cpp/error/error_category/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
error_category( const error_category&amp; other ) = delete;
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr error_category();
}}
{{dcl end}}

Constructs the error category object.

===Parameters===
(none)

===Exceptions===
@2@ {{unreviewed noexcept}}

[[de:cpp/error/error category/error category]]
[[es:cpp/error/error category/error category]]
[[fr:cpp/error/error category/error category]]
[[it:cpp/error/error category/error category]]
[[ja:cpp/error/error category/error category]]
[[pt:cpp/error/error category/error category]]
[[ru:cpp/error/error category/error category]]
[[zh:cpp/error/error category/error category]]</text>
      <sha1>sfuu77jonyyyoo744pw2c4w2wsp3sjj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category/message</title>
    <ns>0</ns>
    <id>8923</id>
    <revision>
      <id>69276</id>
      <parentid>63297</parentid>
      <timestamp>2014-04-02T14:01:04Z</timestamp>
      <contributor>
        <ip>182.170.95.127</ip>
      </contributor>
      <comment>This method is not noexcept</comment>
      <text xml:space="preserve" bytes="790">{{cpp/error/error_category/title|message}}
{{cpp/error/error_category/navbar}}
{{ddcl | since=c++11 | 1=
virtual std::string message( int condition ) const = 0;
}}

Returns a string describing the given error condition for the error category represented by {{c|*this}}.

===Parameters===
{{par begin}}
{{par | condition | specifies the error condition to describe}}
{{par end}}

===Return value===
A string describing the given error condition.

===Exceptions===
(none)

[[de:cpp/error/error category/message]]
[[es:cpp/error/error category/message]]
[[fr:cpp/error/error category/message]]
[[it:cpp/error/error category/message]]
[[ja:cpp/error/error category/message]]
[[pt:cpp/error/error category/message]]
[[ru:cpp/error/error category/message]]
[[zh:cpp/error/error category/message]]</text>
      <sha1>7ujasoka35cx8z42ekeuxqcaltcwn6z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category/name</title>
    <ns>0</ns>
    <id>8921</id>
    <revision>
      <id>91502</id>
      <parentid>63298</parentid>
      <timestamp>2017-03-31T19:48:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="696">{{cpp/error/error_category/title|name}}
{{cpp/error/error_category/navbar}}
{{ddcl | since=c++11 | 1=
virtual const char* name() const = 0;
}}

Returns a pointer to a null-terminated byte string that specifies the name of the error category.

===Parameters===
(none)

===Return value===
Null-terminated byte string specifying the name of the error category.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/error category/name]]
[[es:cpp/error/error category/name]]
[[fr:cpp/error/error category/name]]
[[it:cpp/error/error category/name]]
[[ja:cpp/error/error category/name]]
[[pt:cpp/error/error category/name]]
[[ru:cpp/error/error category/name]]
[[zh:cpp/error/error category/name]]</text>
      <sha1>bpjkwfcfhnzd065bzr98iv2bm2ypcwh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category/operator cmp</title>
    <ns>0</ns>
    <id>8924</id>
    <revision>
      <id>91842</id>
      <parentid>62703</parentid>
      <timestamp>2017-03-31T19:59:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1602">{{cpp/error/error_category/title|1=operator==,!=,&lt;}}
{{cpp/error/error_category/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
bool operator==( const error_category&amp; rhs ) const;
}}
{{dcl | since=c++11 | num=2 | 1=
bool operator!=( const error_category&amp; rhs ) const;
}}
{{dcl | since=c++11 | num=3 | 1=
bool operator&lt;( const error_category&amp; rhs ) const;
}}
{{dcl end}}

Compares to another error category.

@1@ Checks whether {{c|*this}} and {{tt|rhs}} refer to the same object.
@2@ Checks whether {{c|*this}} and {{tt|rhs}} do not refer to the same object.
@3@ Orders {{c|*this}} and {{tt|rhs}} by the order of {{c|this}} and {{c|&amp;rhs}}. Equivalent to {{c|std::less&lt;const error_category*&gt;()(this, &amp;rhs)}}.

===Parameters===
{{par begin}}
{{par | code | specifies the error code to compare}}
{{par | condition | specifies the error condition to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if {{c|*this}} and {{tt|rhs}} refer to the same object, {{c|false}} otherwise.
@2@ {{c|true}} if {{c|*this}} and {{tt|rhs}} do not refer to the same object, {{c|false}} otherwise.
@3@ {{c|true}} if {{c|*this}} is less than {{tt|rhs}} as defined by the order of {{tt|this}} and {{c|&amp;rhs}}.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/error category/operator cmp]]
[[es:cpp/error/error category/operator cmp]]
[[fr:cpp/error/error category/operator cmp]]
[[it:cpp/error/error category/operator cmp]]
[[ja:cpp/error/error category/operator cmp]]
[[pt:cpp/error/error category/operator cmp]]
[[ru:cpp/error/error category/operator cmp]]
[[zh:cpp/error/error category/operator cmp]]</text>
      <sha1>q7bmk7vjxsrcfpsyrx3ithay4gn6jlb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error category/~error category</title>
    <ns>0</ns>
    <id>8919</id>
    <revision>
      <id>68198</id>
      <parentid>63299</parentid>
      <timestamp>2014-03-18T03:04:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>no noexcept since LWG 2145 (it's default for all dtors anyway)</comment>
      <text xml:space="preserve" bytes="574">{{cpp/error/error_category/title|~error_category}}
{{cpp/error/error_category/navbar}}
{{ddcl | since=c++11 | 1=
virtual ~error_category();
}}

Destroys the object.

===Parameters===
(none)

[[de:cpp/error/error category/~error category]]
[[es:cpp/error/error category/~error category]]
[[fr:cpp/error/error category/~error category]]
[[it:cpp/error/error category/~error category]]
[[ja:cpp/error/error category/~error category]]
[[pt:cpp/error/error category/~error category]]
[[ru:cpp/error/error category/~error category]]
[[zh:cpp/error/error category/~error category]]</text>
      <sha1>q9o0oora5w4rndd89z40qgfqa0fc76y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code</title>
    <ns>0</ns>
    <id>4815</id>
    <revision>
      <id>90184</id>
      <parentid>63300</parentid>
      <timestamp>2017-02-09T06:48:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>reword slightly</comment>
      <text xml:space="preserve" bytes="1695">{{cpp/title|error_code}}
{{cpp/error/error_code/navbar}}
{{ddcl | header=system_error | since=c++11 | 1=
class error_code;
}}

{{tt|std::error_code}} is a platform-dependent error code. Each {{tt|std::error_code}} object holds an error code originating from the operating system or some low-level interface and a pointer to an object of type {{lc|std::error_category}}, which corresponds to the said interface. The error code values may be not unique across different error categories.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc constructor}}
{{dsc inc | cpp/error/error_code/dsc operator{{=}}}}
{{dsc inc | cpp/error/error_code/dsc assign}}
{{dsc h2 | Modifiers}}
{{dsc inc | cpp/error/error_code/dsc clear}}
{{dsc h2 | Observers}}
{{dsc inc | cpp/error/error_code/dsc value}}
{{dsc inc | cpp/error/error_code/dsc category}}
{{dsc inc | cpp/error/error_code/dsc default_error_condition}}
{{dsc inc | cpp/error/error_code/dsc message}}
{{dsc inc | cpp/error/error_code/dsc operator bool}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc operator_cmp}}
{{dsc inc | cpp/error/error_code/dsc operator_ltlt}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc is_error_code_enum}}
{{dsc inc | cpp/error/error_code/dsc hash}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc inc | cpp/error/dsc error_category}}
{{dsc end}}

[[de:cpp/error/error code]]
[[es:cpp/error/error code]]
[[fr:cpp/error/error code]]
[[it:cpp/error/error code]]
[[ja:cpp/error/error code]]
[[pt:cpp/error/error code]]
[[ru:cpp/error/error code]]
[[zh:cpp/error/error code]]</text>
      <sha1>g1gix40vcmvmaa4lf1ov7uunr2m5f61</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/assign</title>
    <ns>0</ns>
    <id>9016</id>
    <revision>
      <id>91536</id>
      <parentid>62704</parentid>
      <timestamp>2017-03-31T19:49:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="871">{{cpp/error/error_code/title|assign}}
{{cpp/error/error_code/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
void assign( int ec, const error_category&amp; ecat );
}}
{{dcl end}}

Replaces the contents with error code {{tt|ec}} and corresponding category {{tt|ecat}}.

===Parameters===
{{par begin}}
{{par | ec | platform-dependent error code enum to assign}}
{{par | ecat | error category corresponding to {{tt|ec}}}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc operator{{=}}}}
{{dsc end}}

[[de:cpp/error/error code/assign]]
[[es:cpp/error/error code/assign]]
[[fr:cpp/error/error code/assign]]
[[it:cpp/error/error code/assign]]
[[ja:cpp/error/error code/assign]]
[[pt:cpp/error/error code/assign]]
[[ru:cpp/error/error code/assign]]
[[zh:cpp/error/error code/assign]]</text>
      <sha1>4ob41sv3rvr7gz87ybi8toivowbxy93</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/category</title>
    <ns>0</ns>
    <id>9019</id>
    <revision>
      <id>91361</id>
      <parentid>63301</parentid>
      <timestamp>2017-03-31T19:41:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="704">{{cpp/error/error_code/title|category}}
{{cpp/error/error_code/navbar}}
{{ddcl  | since=c++11 | 1=
const std::error_category&amp; category() const;
}}

Returns the error category of the error value.

===Parameters===
(none)

===Return value===
The error category of the error value.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc value}}
{{dsc end}}

[[de:cpp/error/error code/category]]
[[es:cpp/error/error code/category]]
[[fr:cpp/error/error code/category]]
[[it:cpp/error/error code/category]]
[[ja:cpp/error/error code/category]]
[[pt:cpp/error/error code/category]]
[[ru:cpp/error/error code/category]]
[[zh:cpp/error/error code/category]]</text>
      <sha1>64ateiq3bexii23ivz7tvt0ceituhea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/clear</title>
    <ns>0</ns>
    <id>9017</id>
    <revision>
      <id>91473</id>
      <parentid>62705</parentid>
      <timestamp>2017-03-31T19:46:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="639">{{cpp/error/error_code/title|clear}}
{{cpp/error/error_code/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
void clear();
}}
{{dcl end}}

Replaces the error code and error category with default values. 

Equivalent to {{c|1=*this = error_code(0, std::system_category())}}.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/error code/clear]]
[[es:cpp/error/error code/clear]]
[[fr:cpp/error/error code/clear]]
[[it:cpp/error/error code/clear]]
[[ja:cpp/error/error code/clear]]
[[pt:cpp/error/error code/clear]]
[[ru:cpp/error/error code/clear]]
[[zh:cpp/error/error code/clear]]</text>
      <sha1>239hqbqy1yvrfl9trn9njbn2c082avi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/default error condition</title>
    <ns>0</ns>
    <id>9020</id>
    <revision>
      <id>91777</id>
      <parentid>63302</parentid>
      <timestamp>2017-03-31T19:57:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="863">{{cpp/error/error_code/title|default_error_condition}}
{{cpp/error/error_code/navbar}}
{{ddcl  | since=c++11 | 1=
std::error_condition default_error_condition() const;
}}

Returns the default error condition for the current error value.

Equivalent to {{c|category().default_error_condition(value())}}.

===Parameters===
(none)

===Return value===
The default error condition for the current error value.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/error code/default error condition]]
[[es:cpp/error/error code/default error condition]]
[[fr:cpp/error/error code/default error condition]]
[[it:cpp/error/error code/default error condition]]
[[ja:cpp/error/error code/default error condition]]
[[pt:cpp/error/error code/default error condition]]
[[ru:cpp/error/error code/default error condition]]
[[zh:cpp/error/error code/default error condition]]</text>
      <sha1>8e6xkdp470qrdybndl36diklu8iqrv1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/error code</title>
    <ns>0</ns>
    <id>9014</id>
    <revision>
      <id>91623</id>
      <parentid>83882</parentid>
      <timestamp>2017-03-31T19:52:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1596">{{cpp/error/error_code/title|error_code}}
{{cpp/error/error_code/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
error_code();
}}
{{dcl | num=2 | since=c++11 | 1=
error_code( int ec, const error_category&amp; ecat );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class ErrorCodeEnum &gt;
error_code( ErrorCodeEnum e );
}}
{{dcl end}}

Constructs new error code.

@1@ Constructs error code with default value. Equivalent to {{c|error_code(0, std::system_category())}}.
@2@ Constructs error code with {{tt|ec}} as the platform-dependent error code and {{tt|ecat}} as the corresponding error category.
@3@ Constructs error code from an error code enum {{tt|e}}. Equivalent to {{c|1=*this = make_error_code(e)}}. The overload participates in overload resolutions only if {{c|1=std::is_error_code_enum&lt;ErrorCodeEnum&gt;::value == true}}.

===Parameters===
{{par begin}}
{{par | ec | platform dependent error code to construct with}}
{{par | ecat | error category corresponding to {{tt|ec}}}}
{{par | e | error code enum to construct with}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/errc/dsc make_error_code}}
{{dsc inc | cpp/io/io_errc/dsc make_error_code}}
{{dsc inc | cpp/thread/future_errc/dsc make_error_code}}
{{dsc end}}

[[de:cpp/error/error code/error code]]
[[es:cpp/error/error code/error code]]
[[fr:cpp/error/error code/error code]]
[[it:cpp/error/error code/error code]]
[[ja:cpp/error/error code/error code]]
[[pt:cpp/error/error code/error code]]
[[ru:cpp/error/error code/error code]]
[[zh:cpp/error/error code/error code]]</text>
      <sha1>dzmmc2qfcxiqc7vwubm8tt03c1ghwjc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/hash</title>
    <ns>0</ns>
    <id>5533</id>
    <revision>
      <id>72079</id>
      <parentid>63303</parentid>
      <timestamp>2014-07-12T11:47:47Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>+ template&lt;&gt;</comment>
      <text xml:space="preserve" bytes="580">{{cpp/title | hash{{small|&lt;std::error_code&gt;}}}}
{{cpp/error/error_code/navbar}}
{{ddcl | header=system_error | since=c++11 | 1=
template&lt;&gt; struct hash&lt;error_code&gt;;
}}

The template specialization of {{lc|std::hash}} for {{lc|std::error_code}} allows users to obtain hashes of objects of type {{lc|std::error_code}}.

[[de:cpp/error/error code/hash]]
[[es:cpp/error/error code/hash]]
[[fr:cpp/error/error code/hash]]
[[it:cpp/error/error code/hash]]
[[ja:cpp/error/error code/hash]]
[[pt:cpp/error/error code/hash]]
[[ru:cpp/error/error code/hash]]
[[zh:cpp/error/error code/hash]]</text>
      <sha1>o7nn81zms24psdo5gtc13e3ovvd1rra</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/is error code enum</title>
    <ns>0</ns>
    <id>9930</id>
    <revision>
      <id>90953</id>
      <parentid>90928</parentid>
      <timestamp>2017-03-14T12:57:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1003">{{cpp/title|is_error_code_enum}}
{{cpp/error/error_code/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_error_code_enum;
}}
{{dcl end}}

If {{tt|T}} is an error code enumeration, this template provides the member constant {{c|value}} equal {{c|true}}.  For any other type, {{tt|value}} is {{c|false}}.

This template may be specialized for a user-defined type to indicate that the type is eligible for {{lc|std::error_code}} and {{lc|std::error_condition}} automatic conversions.

The following classes of the standard library are an error code enum: 
* {{lc|std::io_errc}}
* {{lc|std::future_errc}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_error_code_enum_v = is_error_code_enum&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an error code enum}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_condition/dsc is_error_condition_enum}}

{{dsc end}}</text>
      <sha1>sgec8b7dd93vxsydsuqz5n6vbeeuipd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/make error code</title>
    <ns>0</ns>
    <id>12631</id>
    <redirect title="cpp/error/errc/make error code" />
    <revision>
      <id>61353</id>
      <timestamp>2013-06-05T22:11:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/error code/make error code]] to [[cpp/error/errc/make error code]]: errc specific</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/error/errc/make error code]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/message</title>
    <ns>0</ns>
    <id>9021</id>
    <revision>
      <id>63304</id>
      <parentid>42427</parentid>
      <timestamp>2013-07-10T01:27:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="687">{{cpp/error/error_code/title|message}}
{{cpp/error/error_code/navbar}}
{{ddcl  | since=c++11 | 1=
std::string message() const;
}}

Returns the message corresponding to the current error value and category.

Equivalent to {{c|category().message(value())}}.

===Parameters===
(none)

===Return value===
The error message corresponding to the current error value and category.

===Exceptions===
(none)

[[de:cpp/error/error code/message]]
[[es:cpp/error/error code/message]]
[[fr:cpp/error/error code/message]]
[[it:cpp/error/error code/message]]
[[ja:cpp/error/error code/message]]
[[pt:cpp/error/error code/message]]
[[ru:cpp/error/error code/message]]
[[zh:cpp/error/error code/message]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/operator bool</title>
    <ns>0</ns>
    <id>9022</id>
    <revision>
      <id>91633</id>
      <parentid>63305</parentid>
      <timestamp>2017-03-31T19:52:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="673">{{cpp/error/error_code/title|operator bool}}
{{cpp/error/error_code/navbar}}
{{ddcl  | since=c++11 | 1=
explicit operator bool() const;
}}

Checks if the error value is valid, i.e. non-zero.

===Parameters===
(none)

===Return value===
{{c|false}} if {{c|1=value() == 0}}, {{c|true}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/error/error code/operator bool]]
[[es:cpp/error/error code/operator bool]]
[[fr:cpp/error/error code/operator bool]]
[[it:cpp/error/error code/operator bool]]
[[ja:cpp/error/error code/operator bool]]
[[pt:cpp/error/error code/operator bool]]
[[ru:cpp/error/error code/operator bool]]
[[zh:cpp/error/error code/operator bool]]</text>
      <sha1>024insx7lowb2eqgjr9degghx1t6bt2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/operator cmp</title>
    <ns>0</ns>
    <id>9025</id>
    <revision>
      <id>91378</id>
      <parentid>62709</parentid>
      <timestamp>2017-03-31T19:41:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1533">{{cpp/title|1=operator==,!=,&lt;{{small|(std::error_code)}}}}
{{cpp/error/error_code/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | num=1 | since=c++11 | 1=
bool operator==( const error_code&amp; lhs, const error_code&amp; rhs );
}}
{{dcl | num=1 | since=c++11 | 1=
bool operator!=( const error_code&amp; lhs, const error_code&amp; rhs );
}}
{{dcl | num=1 | since=c++11 | 1=
bool operator&lt;( const error_code&amp; lhs, const error_code&amp; rhs );
}}
{{dcl end}}

Compares two error code objects.

@1@ Compares {{tt|lhs}} and {{tt|rhs}} for equality.
@2@ Compares {{tt|lhs}} and {{tt|rhs}} for equality.
@3@ Checks whether {{tt|lhs}} is less than {{tt|rhs}}. 

===Parameters===
{{par begin}}
{{par | lhs, rhs | error codes to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if the error category and error value compare equal.
@2@ {{c|true}} if the error category or error value compare are not equal.
@3@ {{c|true}} if {{c|lhs.category() &lt; rhs.category()}}. Otherwise, {{c|true}} if {{c|1=lhs.category() == rhs.category() &amp;&amp; lhs.value() &lt; rhs.value()}}. Otherwise, {{c|false}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc category}}
{{dsc end}}

[[de:cpp/error/error code/operator cmp]]
[[es:cpp/error/error code/operator cmp]]
[[fr:cpp/error/error code/operator cmp]]
[[it:cpp/error/error code/operator cmp]]
[[ja:cpp/error/error code/operator cmp]]
[[pt:cpp/error/error code/operator cmp]]
[[ru:cpp/error/error code/operator cmp]]
[[zh:cpp/error/error code/operator cmp]]</text>
      <sha1>k4lfojopxwubo9eopl3e48cununykq7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/operator ltlt</title>
    <ns>0</ns>
    <id>9024</id>
    <revision>
      <id>80333</id>
      <parentid>63306</parentid>
      <timestamp>2015-08-06T07:20:51Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>The standard always uses '\u2019' RIGHT SINGLE QUOTATION MARK, but we should use the correct apostrophe within source code</comment>
      <text xml:space="preserve" bytes="890">{{cpp/title|operator&lt;&lt;{{small|(std::error_code)}}}}
{{cpp/error/error_code/navbar}}
{{ddcl | header=system_error | since=c++11 | 1=
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp;
    operator&lt;&lt;( basic_ostream&lt;CharT,Traits&gt;&amp; os, const error_code&amp; ec );
}}

Performs stream output operation on error code {{tt|ec}}.

Equivalent to {{c|os &lt;&lt; ec.category().name() &lt;&lt; ':' &lt;&lt; ec.value}}.

===Parameters===
{{par begin}}
{{par | os | output stream to insert data to}}
{{par | ec | error code}}
{{par end}}

===Return value===
{{tt|os}}

[[de:cpp/error/error code/operator ltlt]]
[[es:cpp/error/error code/operator ltlt]]
[[fr:cpp/error/error code/operator ltlt]]
[[it:cpp/error/error code/operator ltlt]]
[[ja:cpp/error/error code/operator ltlt]]
[[pt:cpp/error/error code/operator ltlt]]
[[ru:cpp/error/error code/operator ltlt]]
[[zh:cpp/error/error code/operator ltlt]]</text>
      <sha1>du82zdigw1zf86ewyhi7ajd420peurz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/operator=</title>
    <ns>0</ns>
    <id>9015</id>
    <revision>
      <id>91581</id>
      <parentid>62708</parentid>
      <timestamp>2017-03-31T19:50:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1099">{{cpp/error/error_code/title|operator{{=}}}}
{{cpp/error/error_code/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt; class ErrorCodeEnum &gt;
error_code&amp; operator=( ErrorCodeEnum e );
}}
{{dcl end}}

Replaces the error code and corresponding category with those representing error code enum {{tt|e}}. 

Equivalent to {{c|1=*this = std::make_error_code(e)}}. The overload participates in overload resolutions only if {{c|1=std::is_error_code_enum&lt;ErrorCodeEnum&gt;::value == true}}.

===Parameters===
{{par begin}}
{{par | e | error code enum to construct}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Copy-assignment operator is defined implicitly.

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc assign}}
{{dsc end}}

[[de:cpp/error/error code/operator=]]
[[es:cpp/error/error code/operator=]]
[[fr:cpp/error/error code/operator=]]
[[it:cpp/error/error code/operator=]]
[[ja:cpp/error/error code/operator=]]
[[pt:cpp/error/error code/operator=]]
[[ru:cpp/error/error code/operator=]]
[[zh:cpp/error/error code/operator=]]</text>
      <sha1>fkgzi3q1agdoel8ngh1gmjv23bcyjoi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error code/value</title>
    <ns>0</ns>
    <id>9018</id>
    <revision>
      <id>91569</id>
      <parentid>63307</parentid>
      <timestamp>2017-03-31T19:50:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="648">{{cpp/error/error_code/title|value}}
{{cpp/error/error_code/navbar}}
{{ddcl  | since=c++11 | 1=
int value() const;
}}

Returns the platform dependent error value.

===Parameters===
(none)

===Return value===
The platform-dependent error value.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc category}}
{{dsc end}}

[[de:cpp/error/error code/value]]
[[es:cpp/error/error code/value]]
[[fr:cpp/error/error code/value]]
[[it:cpp/error/error code/value]]
[[ja:cpp/error/error code/value]]
[[pt:cpp/error/error code/value]]
[[ru:cpp/error/error code/value]]
[[zh:cpp/error/error code/value]]</text>
      <sha1>akez45rvqi7cbkeg2xpzyq59yef3mo2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition</title>
    <ns>0</ns>
    <id>4808</id>
    <revision>
      <id>88237</id>
      <parentid>63308</parentid>
      <timestamp>2016-11-14T22:36:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Helper classes */ +</comment>
      <text xml:space="preserve" bytes="1648">{{cpp/title|error_condition}}
{{cpp/error/error_condition/navbar}}
{{ddcl | header=system_error | since=c++11 | 1=
class error_condition;
}}

{{tt|std::error_condition}} is a platform-independent error code. Like {{lc|std::error_code}}, it is uniquely identified by an integer value and a {{lc|std::error_category}}, but unlike {{lc|std::error_code}}, the value is not platform-dependent.

A typical implementation holds one integer data member (the value) and a pointer to an {{lc|std::error_category}}.
 
===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/error_condition/dsc constructor}}
{{dsc inc | cpp/error/error_condition/dsc operator{{=}}}}
{{dsc inc | cpp/error/error_condition/dsc assign}}
{{dsc inc | cpp/error/error_condition/dsc clear}}
{{dsc inc | cpp/error/error_condition/dsc value}}
{{dsc inc | cpp/error/error_condition/dsc category}}
{{dsc inc | cpp/error/error_condition/dsc message}}
{{dsc inc | cpp/error/error_condition/dsc operator bool}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/error/error_condition/dsc operator_cmp}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/error/error_condition/dsc is_error_condition_enum}}
{{dsc inc | cpp/error/error_condition/dsc hash}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/error/dsc error_category}}
{{dsc end}}

[[de:cpp/error/error condition]]
[[es:cpp/error/error condition]]
[[fr:cpp/error/error condition]]
[[it:cpp/error/error condition]]
[[ja:cpp/error/error condition]]
[[pt:cpp/error/error condition]]
[[ru:cpp/error/error condition]]
[[zh:cpp/error/error condition]]</text>
      <sha1>hf1tlfal3r4cu2fxd45e7f4yeksoscz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/assign</title>
    <ns>0</ns>
    <id>9630</id>
    <revision>
      <id>91453</id>
      <parentid>62710</parentid>
      <timestamp>2017-03-31T19:45:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="463">{{cpp/error/error_condition/title | assign}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void assign( int val, const error_category&amp; cat );
}}
{{dcl end}}

Assigns contents to an error condition. Sets the error code to {{tt|val}} and error category to {{tt|cat}}.

===Parameters===
{{par begin}}
{{par | val | error code}}
{{par | cat | error category}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>e1r8c65sdg8a5lcs530tb551pxu9b2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/category</title>
    <ns>0</ns>
    <id>9633</id>
    <revision>
      <id>91338</id>
      <parentid>62711</parentid>
      <timestamp>2017-03-31T19:40:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="324">{{cpp/error/error_condition/title | category}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
const error_category&amp; category() const;
}}
{{dcl end}}

Returns the stored error category.

===Parameters===
(none)

===Return value===
The stored error category.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>h1qskjch3tyv2wrgsvxne3d3gasb2i4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/clear</title>
    <ns>0</ns>
    <id>9631</id>
    <revision>
      <id>91618</id>
      <parentid>62712</parentid>
      <timestamp>2017-03-31T19:52:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="364">{{cpp/error/error_condition/title | clear}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void clear();
}}
{{dcl end}}

Clears the state of the error condition. Sets the error code to {{c|0}} and error category to {{lc|std::generic_category}}.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>ay8uh8jt91bw8fwh2ddrc9hpa850saj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/error condition</title>
    <ns>0</ns>
    <id>9628</id>
    <revision>
      <id>91605</id>
      <parentid>83881</parentid>
      <timestamp>2017-03-31T19:51:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1491">{{cpp/error/error_condition/title | error_condition}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
error_condition();
}}
{{dcl | num=2 | notes={{mark since c++11}}&lt;br/&gt;{{mark implicit}} |
error_condition( const error_condition&amp; other );
}}
{{dcl | num=3 | since=c++11 |
error_condition( int val, const error_category&amp; cat );
}}
{{dcl | num=4 | since=c++11 |
template&lt; class ErrorConditionEnum &gt;
error_condition( ErrorConditionEnum e );
}}
{{dcl end}}

Constructs new error condition.
@1@ Default constructor. Initializes the error condition with generic category and error code {{c|0}}.

@2@ Copy constructor. Initializes the error condition with the contents of {{tt|other}}.
@3@ Initializes the error condition with error code {{tt|val}} and error category {{tt|cat}}.

@4@ Initializes the error condition with enum {{tt|e}}. Effectively calls {{lc|make_error_condition()}}. Does not participate in the overload resolution unless {{c|is_error_condition_enum&lt;ErrorConditionEnum&gt;::value}} is {{c|true}}.

===Parameters===
{{par begin}}
{{par | other | another error condition to initialize with}}
{{par | val | error code}}
{{par | cat | error category}}
{{par | e | error condition enum}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/errc/dsc make_error_condition}}
{{dsc inc | cpp/io/io_errc/dsc make_error_condition}}
{{dsc inc | cpp/thread/future_errc/dsc make_error_condition}}
{{dsc end}}</text>
      <sha1>svsalxhs965lnz18tx9ko2pbn84b52l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/hash</title>
    <ns>0</ns>
    <id>15728</id>
    <revision>
      <id>88236</id>
      <timestamp>2016-11-14T22:35:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="340">{{cpp/title | hash{{small|&lt;std::error_condition&gt;}}}}
{{cpp/error/error_condition/navbar}}
{{ddcl | header=system_error | since=c++17 | 1=
template&lt;&gt; struct hash&lt;error_condition&gt;;
}}

The template specialization of {{lc|std::hash}} for {{lc|std::error_condition}} allows users to obtain hashes of objects of type {{lc|std::error_condition}}.</text>
      <sha1>0yodhc03rq8451h0rilifmfozo1koq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/is error condition enum</title>
    <ns>0</ns>
    <id>9638</id>
    <revision>
      <id>90965</id>
      <parentid>90927</parentid>
      <timestamp>2017-03-14T12:57:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="964">{{cpp/title|is_error_condition_enum}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_error_condition_enum;
}}
{{dcl end}}

If {{tt|T}} is an error condition enum, this template provides the member constant {{c|value}} equal {{c|true}}.  For any other type, {{tt|value}} is {{c|false}}.

This template may be specialized for a user-defined type to indicate that the type is eligible for {{lc|std::error_condition}} automatic conversions.

The following class of the standard library is an error condition enum: {{lc|std::errc}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_error_condition_enum_v = is_error_condition_enum&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an error condition enum}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc is_error_code_enum}}

{{dsc end}}</text>
      <sha1>pi606qfroivqc3jzn9sia9qd99e8uvg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/make error condition</title>
    <ns>0</ns>
    <id>12630</id>
    <redirect title="cpp/error/errc/make error condition" />
    <revision>
      <id>61351</id>
      <timestamp>2013-06-05T22:10:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/error condition/make error condition]] to [[cpp/error/errc/make error condition]]</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[cpp/error/errc/make error condition]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/message</title>
    <ns>0</ns>
    <id>9634</id>
    <revision>
      <id>62715</id>
      <parentid>49497</parentid>
      <timestamp>2013-07-01T23:34:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="433">{{cpp/error/error_condition/title | message}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
std::string message() const;
}}
{{dcl end}}

Returns an explanatory message for the stored error code and error category. Effectively calls {{c|category().message(value())}}.

===Parameters===
(none)

===Return value===
An explanatory message for the stored error code and error category. 

===Exceptions===
(none)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/operator bool</title>
    <ns>0</ns>
    <id>9635</id>
    <revision>
      <id>91614</id>
      <parentid>62717</parentid>
      <timestamp>2017-03-31T19:51:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="366">{{cpp/error/error_condition/title | operator bool}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
explicit operator bool() const;
}}
{{dcl end}}

Checks whether the stored error code is not zero.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|1=value != 0}}, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>0c4ffdu3wf3ohdhq9n5lt5mpqnf8274</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/operator cmp</title>
    <ns>0</ns>
    <id>9636</id>
    <revision>
      <id>91470</id>
      <parentid>85539</parentid>
      <timestamp>2017-03-31T19:46:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1875">{{title | 1=operator==,!=,&lt;{{small|(std::error_condition)}}}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | num=1 | since=c++11 | 1=
bool operator==( const error_condition&amp; lhs, const error_condition&amp; rhs );
}}
{{dcl | num=2 | since=c++11 | 1=
bool operator==( const error_code&amp; lhs, const error_condition&amp; rhs );
}}
{{dcl | num=2 | since=c++11 | 1=
bool operator==( const error_condition&amp; lhs, const error_code&amp; rhs );
}}
{{dcl | num=3 | since=c++11 | 1=
bool operator!=( const error_condition&amp; lhs, const error_condition&amp; rhs );
}}
{{dcl | num=4 | since=c++11 | 1=
bool operator!=( const error_code&amp; lhs, const error_condition&amp; rhs );
}}
{{dcl | num=4 | since=c++11 | 1=
bool operator!=( const error_condition&amp; lhs, const error_code&amp; rhs );
}}
{{dcl | num=5 | since=c++11 |
bool operator&lt;( const error_condition&amp; lhs, const error_condition&amp; rhs );
}}
{{dcl end}}

Compares two error conditions. 

@1-2@ Checks whether {{tt|lhs}} and {{tt|rhs}} are equal.
@3-4@ Checks whether {{tt|lhs}} and {{tt|rhs}} are not equal.
@5@ Checks whether {{tt|lhs}} is ''less than'' {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | error conditions to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if the error category and error value compare equal.
@2@ {{c|true}} if {{c|lhs.category().equivalent(lhs.value(), rhs)}} or {{c|rhs.category().equivalent(lhs, rhs.value())}} is {{c|true}}.
@3@ {{c|true}} if the error category or error value compare are not equal.
@4@ {{c|true}} if {{c|lhs.category().equivalent(lhs.value(), rhs)}} and {{c|rhs.category().equivalent(lhs, rhs.value())}} are both {{c|false}}.
@5@ {{c|true}} if {{c|lhs.category() &lt; rhs.category()}}. Otherwise, {{c|true}} if {{c|1=lhs.category() == rhs.category() &amp;&amp; lhs.value() &lt; rhs.value()}}. Otherwise, {{c|false}}.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>eh6y3aeyax3k0rys3tux342l0baznfp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/operator=</title>
    <ns>0</ns>
    <id>9629</id>
    <revision>
      <id>91346</id>
      <parentid>64278</parentid>
      <timestamp>2017-03-31T19:40:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="921">{{cpp/error/error_condition/title | operator{{=}}}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | num=1 | notes={{mark since c++11}}&lt;br&gt;{{mark implicit}} |
error_condition&amp; operator{{=}}( const error_condition&amp; other );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class ErrorConditionEnum &gt;
error_condition&amp; operator{{=}}( ErrorConditionEnum e );
}}
{{dcl end}}

Assigns contents to an error condition.
@1@ Copy assignment operator. Assigns the contents of {{tt|other}}.

@2@ Assigns error condition for enum {{tt|e}}. Effectively calls {{lc|make_error_condition()}}. Does not participate in the overload resolution unless {{c|is_error_condition_enum&lt;ErrorConditionEnum&gt;::value}} is {{c|true}}.

===Parameters===
{{par begin}}
{{par | other | another error condition to initialize with}}
{{par | e | error condition enum}}
{{par end}}

===Return value===
{{c|*this}}.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>4j235ut85sp8we73nhrohbjrol7fw8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/error condition/value</title>
    <ns>0</ns>
    <id>9632</id>
    <revision>
      <id>91542</id>
      <parentid>62719</parentid>
      <timestamp>2017-03-31T19:49:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="292">{{cpp/error/error_condition/title | value}}
{{cpp/error/error_condition/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
int value() const;
}}
{{dcl end}}

Returns the stored error code.

===Parameters===
(none)

===Return value===
The stored error code.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>sdht4jyt12z6b0mdvd57x6c25ubg9kz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception</title>
    <ns>0</ns>
    <id>2077</id>
    <revision>
      <id>86595</id>
      <parentid>86167</parentid>
      <timestamp>2016-07-06T21:42:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+bad_variant_access to the tree</comment>
      <text xml:space="preserve" bytes="1984">{{cpp/title | exception}}
{{cpp/error/exception/navbar}}
{{ddcl | header=exception |
class exception;
}}

Provides consistent interface to handle errors through the [[cpp/language/throw|throw expression]]. 

All exceptions generated by the standard library inherit from {{lc|std::exception}}

*{{ltt|cpp/error/logic_error}}
:*{{ltt|cpp/error/invalid_argument}}
:*{{ltt|cpp/error/domain_error}}
:*{{ltt|cpp/error/length_error}}
:*{{ltt|cpp/error/out_of_range}}
:*{{ltt|cpp/thread/future_error}}{{mark c++11}}
:*{{ltt|cpp/utility/optional/bad_optional_access}}{{mark c++17}}
*{{ltt|cpp/error/runtime_error}}
:*{{ltt|cpp/error/range_error}}
:*{{ltt|cpp/error/overflow_error}}
:*{{ltt|cpp/error/underflow_error}}
:*{{ltt|cpp/regex/regex_error}}{{mark c++11}}
:*{{ltt|cpp/error/tx_exception}}{{mark since tm ts}}
:*{{ltt|cpp/error/system_error}}{{mark c++11}}
::*{{ltt|cpp/io/ios_base/failure|ios_base::failure}}{{mark c++11}}
::*{{ltt|cpp/filesystem/filesystem_error|filesystem::filesystem_error}}{{mark c++17}}
*{{ltt|cpp/types/bad_typeid}}
*{{ltt|cpp/types/bad_cast}}
:*{{ltt|cpp/utility/any/bad_any_cast}}{{mark c++17}}
*{{ltt|cpp/memory/bad_weak_ptr}}{{mark c++11}}
*{{ltt|cpp/utility/functional/bad_function_call}}{{mark c++11}}
*{{ltt|cpp/memory/new/bad_alloc}}
:*{{ltt|cpp/memory/new/bad_array_new_length}}{{mark c++11}}
*{{ltt|cpp/error/bad_exception}}
*{{ltt|cpp/io/ios_base/failure|ios_base::failure}}{{mark until c++11}}
*{{ltt|cpp/utility/variant/bad_variant_access}}{{mark c++17}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/error/exception/exception | constructs the exception object }}
{{dsc inc | cpp/error/exception/dsc destructor}}
{{dsc inc | cpp/error/exception/dsc operator{{=}}}}
{{dsc inc | cpp/error/exception/dsc what}}
{{dsc end}}

[[de:cpp/error/exception]]
[[es:cpp/error/exception]]
[[fr:cpp/error/exception]]
[[it:cpp/error/exception]]
[[ja:cpp/error/exception]]
[[pt:cpp/error/exception]]
[[ru:cpp/error/exception]]
[[zh:cpp/error/exception]]</text>
      <sha1>sqbgkqt7c1kl3mme77ylqzq4at6gnms</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception list</title>
    <ns>0</ns>
    <id>15172</id>
    <revision>
      <id>86168</id>
      <parentid>84942</parentid>
      <timestamp>2016-06-24T16:25:21Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>not in C++17</comment>
      <text xml:space="preserve" bytes="1016">{{cpp/title | exception_list }}
{{cpp/error/exception_list/navbar}}
{{fmbox | style=font-size: 0.8em; background-color:#ffffbb | text=std::exception_list was voted out from C++17 working paper at the Oulu meeting. This class is no longer a part of the draft C++17}}
{{ddcl | header=exception_list |
class exception_list : public std::exception
}}

An {{tt|exception_list}} owns a sequence of {{lc|std::exception_ptr}} objects. An exception of this type may be thrown by a [[cpp/algorithm#Execution policies|parallel algorithm]] to report uncaught exceptions encountered during the execution of the algorithm.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc|iterator|unspecified constant {{concept|ForwardIterator}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception_list/dsc begin}}
{{dsc inc | cpp/error/exception_list/dsc end}}
{{dsc inc | cpp/error/exception_list/dsc size}}
{{dsc end}}

{{cpp/error/exception/inherit}}

===Example===
{{example
}}</text>
      <sha1>ohy9eb4xaatzxlovwlpspoc89ot1bij</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception list/begin</title>
    <ns>0</ns>
    <id>15184</id>
    <revision>
      <id>91850</id>
      <parentid>84778</parentid>
      <timestamp>2017-03-31T19:59:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="476">{{cpp/error/exception_list/title | begin}}
{{cpp/error/exception_list/navbar}}
{{dcl begin}}
{{dcl | iterator begin() const;}}
{{dcl end}}

Returns an iterator to the first element in the {{tt|exception_list}}.

===Parameters===
(none)

===Return value===
An iterator to the first element in the {{tt|exception_list}}

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/error/exception_list/dsc end}}
{{dsc end}}</text>
      <sha1>cf11vymcdm58auz5hn3421j95uzz0ad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception list/end</title>
    <ns>0</ns>
    <id>15187</id>
    <revision>
      <id>91792</id>
      <parentid>84781</parentid>
      <timestamp>2017-03-31T19:58:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="532">{{cpp/error/exception_list/title | end}}
{{cpp/error/exception_list/navbar}}
{{dcl begin}}
{{dcl | iterator end() const;}}
{{dcl end}}

Returns an iterator to one past the last element in the {{tt|exception_list}} (i.e., {{c|std::next(begin(), size())}}).

===Parameters===
(none)

===Return value===
An iterator to one past the last element in the {{tt|exception_list}}.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/error/exception_list/dsc begin}}
{{dsc end}}</text>
      <sha1>s8xpz6mx15y15jels1p4e61hj2khjz3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception list/size</title>
    <ns>0</ns>
    <id>15178</id>
    <revision>
      <id>91541</id>
      <parentid>84771</parentid>
      <timestamp>2017-03-31T19:49:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="697">{{cpp/error/exception_list/title|size}}
{{cpp/error/exception_list/navbar}}
{{dcl begin}}
{{dcl | size_type size() const;}}
{{dcl end}}

Returns the number of {{lc|std::exception_ptr}} objects owned by the {{tt|exception_list}}.

===Parameters===
(none)

===Return value===
the number of objects owned by the {{tt|exception_list}}.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

[[de:cpp/error/exception list/size]]
[[es:cpp/error/exception list/size]]
[[fr:cpp/error/exception list/size]]
[[it:cpp/error/exception list/size]]
[[ja:cpp/error/exception list/size]]
[[pt:cpp/error/exception list/size]]
[[ru:cpp/error/exception list/size]]
[[zh:cpp/error/exception list/size]]</text>
      <sha1>bdtlremlmg06gpuyog4c9if1iuzspcc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception ptr</title>
    <ns>0</ns>
    <id>3538</id>
    <revision>
      <id>87716</id>
      <parentid>72325</parentid>
      <timestamp>2016-09-27T21:20:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>contextually covertible</comment>
      <text xml:space="preserve" bytes="1723">{{cpp/title|exception_ptr}}
{{cpp/error/navbar}}
{{ddcl | header=exception | since=c++11 | 1=
typedef /*unspecified*/ exception_ptr;
}}

{{tt|std::exception_ptr}} is a nullable pointer-like type that manages an exception object which has been thrown and captured with {{lc|std::current_exception}}. An instance of {{tt|std::exception_ptr}} may be passed to another function, possibly on another thread, where the exception may be rethrown and handled with a catch clause.

A default-constructed {{tt|std::exception_ptr}} is a null pointer; it does not point to an exception object.

Two instances of {{tt|std::exception_ptr}} compare equal only if they are both null or both point at the same exception object.

{{tt|std::exception_ptr}} is not implicitly convertible to any arithmetic, enumeration, or pointer type. It is contextually convertible to {{tt|bool}}, and will evaluate to false if it is null, true otherwise.

The exception object referenced by an {{tt|std::exception_ptr}} remains valid as long as there remains at least one {{tt|std::exception_ptr}} that is referencing it: {{tt|std::exception_ptr}} is a shared-ownership smart pointer.

{{tt|std::exception_ptr}} meets the requirements of {{concept|NullablePointer}}.

===Example===
{{include| cpp/error/example_exception_ptr}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc make_exception_ptr}}
{{dsc inc | cpp/error/dsc current_exception}}
{{dsc inc | cpp/error/dsc rethrow_exception}}
{{dsc end}}

[[de:cpp/error/exception ptr]]
[[es:cpp/error/exception ptr]]
[[fr:cpp/error/exception ptr]]
[[it:cpp/error/exception ptr]]
[[ja:cpp/error/exception ptr]]
[[pt:cpp/error/exception ptr]]
[[ru:cpp/error/exception ptr]]
[[zh:cpp/error/exception ptr]]</text>
      <sha1>av30uiubu6fa0arypd341fhkldwvxj5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/bad exception</title>
    <ns>0</ns>
    <id>6605</id>
    <redirect title="cpp/error/bad exception" />
    <revision>
      <id>25926</id>
      <timestamp>2012-04-29T08:17:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/bad exception]] to [[cpp/error/bad exception]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/bad exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/current exception</title>
    <ns>0</ns>
    <id>6606</id>
    <redirect title="cpp/error/current exception" />
    <revision>
      <id>25928</id>
      <timestamp>2012-04-29T08:17:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/current exception]] to [[cpp/error/current exception]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[cpp/error/current exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/domain error</title>
    <ns>0</ns>
    <id>6607</id>
    <redirect title="cpp/error/domain error" />
    <revision>
      <id>25930</id>
      <timestamp>2012-04-29T08:17:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/domain error]] to [[cpp/error/domain error]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/domain error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/domain error/domain error</title>
    <ns>0</ns>
    <id>6608</id>
    <redirect title="cpp/error/domain error" />
    <revision>
      <id>61269</id>
      <parentid>25932</parentid>
      <timestamp>2013-06-05T14:10:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/domain error]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/domain error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/exception</title>
    <ns>0</ns>
    <id>8850</id>
    <revision>
      <id>91869</id>
      <parentid>87237</parentid>
      <timestamp>2017-03-31T20:00:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1152">{{cpp/error/exception/title|exception}}
{{cpp/error/exception/navbar}}
{{dcl begin}}
{{dcl | num=1 |
exception();
}}
{{dcl | num=2 | 
exception( const exception&amp; other );
}}
{{dcl end}}

Constructs new exception object.

@1@ Default constructor. {{ltf|cpp/error/exception/what}} returns empty string.

@2@ Copy constructor. Initializes the contents with those of {{tt|other}}

===Parameters===
{{par begin}}
{{par | other | another exception to assign the contents of}}
{{par end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Notes===
Because copying {{tt|std::exception}} is not permitted to throw exceptions, when derived classes (such as {{lc|std::runtime_error}}) have to manage a user-defined diagnostic message, it is typically implemented as a copy-on-write string.

[[de:cpp/error/exception/exception]]
[[es:cpp/error/exception/exception]]
[[fr:cpp/error/exception/exception]]
[[it:cpp/error/exception/exception]]
[[ja:cpp/error/exception/exception]]
[[pt:cpp/error/exception/exception]]
[[ru:cpp/error/exception/exception]]
[[zh:cpp/error/exception/exception]]</text>
      <sha1>30m64vsylf9gwpvkh9mqev97cyt16m6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/exception ptr</title>
    <ns>0</ns>
    <id>6612</id>
    <redirect title="cpp/error/exception ptr" />
    <revision>
      <id>25940</id>
      <timestamp>2012-04-29T08:17:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/exception ptr]] to [[cpp/error/exception ptr]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/exception ptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/exception/exception</title>
    <ns>0</ns>
    <id>4514</id>
    <redirect title="cpp/error/exception/exception" />
    <revision>
      <id>37280</id>
      <parentid>33630</parentid>
      <timestamp>2012-07-04T07:26:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/exception/exception]]</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/error/exception/exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/exception/operator=</title>
    <ns>0</ns>
    <id>6609</id>
    <redirect title="cpp/error/exception/operator=" />
    <revision>
      <id>25934</id>
      <timestamp>2012-04-29T08:17:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/exception/operator=]] to [[cpp/error/exception/operator=]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/error/exception/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/exception/what</title>
    <ns>0</ns>
    <id>6610</id>
    <redirect title="cpp/error/exception/what" />
    <revision>
      <id>25936</id>
      <timestamp>2012-04-29T08:17:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/exception/what]] to [[cpp/error/exception/what]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/error/exception/what]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/exception/~exception</title>
    <ns>0</ns>
    <id>6611</id>
    <redirect title="cpp/error/exception/~exception" />
    <revision>
      <id>25938</id>
      <timestamp>2012-04-29T08:17:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/exception/~exception]] to [[cpp/error/exception/~exception]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/error/exception/~exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/get terminate</title>
    <ns>0</ns>
    <id>6613</id>
    <redirect title="cpp/error/get terminate" />
    <revision>
      <id>25942</id>
      <timestamp>2012-04-29T08:17:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/get terminate]] to [[cpp/error/get terminate]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/get terminate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/get unexpected</title>
    <ns>0</ns>
    <id>6614</id>
    <redirect title="cpp/error/get unexpected" />
    <revision>
      <id>25944</id>
      <timestamp>2012-04-29T08:17:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/get unexpected]] to [[cpp/error/get unexpected]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/error/get unexpected]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/invalid argument</title>
    <ns>0</ns>
    <id>6615</id>
    <redirect title="cpp/error/invalid argument" />
    <revision>
      <id>25946</id>
      <timestamp>2012-04-29T08:17:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/invalid argument]] to [[cpp/error/invalid argument]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/error/invalid argument]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/invalid argument/invalid argument</title>
    <ns>0</ns>
    <id>6616</id>
    <redirect title="cpp/error/invalid argument" />
    <revision>
      <id>61271</id>
      <parentid>25948</parentid>
      <timestamp>2013-06-05T14:10:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/invalid argument]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/error/invalid argument]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/length error</title>
    <ns>0</ns>
    <id>6617</id>
    <redirect title="cpp/error/length error" />
    <revision>
      <id>25950</id>
      <timestamp>2012-04-29T08:17:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/length error]] to [[cpp/error/length error]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/length error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/length error/length error</title>
    <ns>0</ns>
    <id>6618</id>
    <redirect title="cpp/error/length error" />
    <revision>
      <id>61273</id>
      <parentid>25952</parentid>
      <timestamp>2013-06-05T14:10:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/length error]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/length error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/logic error</title>
    <ns>0</ns>
    <id>6619</id>
    <redirect title="cpp/error/logic error" />
    <revision>
      <id>25954</id>
      <timestamp>2012-04-29T08:17:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/logic error]] to [[cpp/error/logic error]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/error/logic error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/logic error/logic error</title>
    <ns>0</ns>
    <id>6620</id>
    <redirect title="cpp/error/logic error" />
    <revision>
      <id>61275</id>
      <parentid>25956</parentid>
      <timestamp>2013-06-05T14:10:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/logic error]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/error/logic error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/make exception ptr</title>
    <ns>0</ns>
    <id>6621</id>
    <redirect title="cpp/error/make exception ptr" />
    <revision>
      <id>25958</id>
      <timestamp>2012-04-29T08:17:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/make exception ptr]] to [[cpp/error/make exception ptr]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/error/make exception ptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/nested exception</title>
    <ns>0</ns>
    <id>6622</id>
    <redirect title="cpp/error/nested exception" />
    <revision>
      <id>25960</id>
      <timestamp>2012-04-29T08:17:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/nested exception]] to [[cpp/error/nested exception]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/error/nested exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/operator=</title>
    <ns>0</ns>
    <id>4519</id>
    <revision>
      <id>91492</id>
      <parentid>64833</parentid>
      <timestamp>2017-03-31T19:47:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="727">{{cpp/error/exception/title|operator{{=}}}}
{{cpp/error/exception/navbar}}
{{ddcl | 1=
exception&amp; operator=( const exception&amp; other );
}}

Copy assignment operator. Assigns the contents of {{tt|other}}

===Parameters===
{{par begin}}
{{par | other | another exception to assign the contents of}}
{{par end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/error/exception/operator=]]
[[es:cpp/error/exception/operator=]]
[[fr:cpp/error/exception/operator=]]
[[it:cpp/error/exception/operator=]]
[[ja:cpp/error/exception/operator=]]
[[pt:cpp/error/exception/operator=]]
[[ru:cpp/error/exception/operator=]]
[[zh:cpp/error/exception/operator=]]</text>
      <sha1>kemhgi81su04nlhm73svb0k5a2lbxn2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/out of range</title>
    <ns>0</ns>
    <id>6623</id>
    <redirect title="cpp/error/out of range" />
    <revision>
      <id>25962</id>
      <timestamp>2012-04-29T08:17:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/out of range]] to [[cpp/error/out of range]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/out of range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/out of range/out of range</title>
    <ns>0</ns>
    <id>6624</id>
    <redirect title="cpp/error/out of range" />
    <revision>
      <id>61277</id>
      <parentid>25964</parentid>
      <timestamp>2013-06-05T14:10:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/out of range]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/out of range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/overflow error</title>
    <ns>0</ns>
    <id>6625</id>
    <redirect title="cpp/error/overflow error" />
    <revision>
      <id>25966</id>
      <timestamp>2012-04-29T08:17:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/overflow error]] to [[cpp/error/overflow error]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/error/overflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/overflow error/overflow error</title>
    <ns>0</ns>
    <id>6626</id>
    <redirect title="cpp/error/overflow error" />
    <revision>
      <id>61279</id>
      <parentid>25968</parentid>
      <timestamp>2013-06-05T14:10:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/overflow error]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/error/overflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/range error</title>
    <ns>0</ns>
    <id>6627</id>
    <redirect title="cpp/error/range error" />
    <revision>
      <id>25970</id>
      <timestamp>2012-04-29T08:17:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/range error]] to [[cpp/error/range error]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/error/range error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/rethrow exception</title>
    <ns>0</ns>
    <id>6628</id>
    <redirect title="cpp/error/rethrow exception" />
    <revision>
      <id>25972</id>
      <timestamp>2012-04-29T08:17:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/rethrow exception]] to [[cpp/error/rethrow exception]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[cpp/error/rethrow exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/rethrow if nested</title>
    <ns>0</ns>
    <id>6629</id>
    <redirect title="cpp/error/rethrow if nested" />
    <revision>
      <id>25974</id>
      <timestamp>2012-04-29T08:17:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/rethrow if nested]] to [[cpp/error/rethrow if nested]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[cpp/error/rethrow if nested]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/runtime error</title>
    <ns>0</ns>
    <id>6630</id>
    <redirect title="cpp/error/runtime error" />
    <revision>
      <id>25976</id>
      <timestamp>2012-04-29T08:17:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/runtime error]] to [[cpp/error/runtime error]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/runtime error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/runtime error/runtime error</title>
    <ns>0</ns>
    <id>6631</id>
    <redirect title="cpp/error/runtime error" />
    <revision>
      <id>61282</id>
      <parentid>25978</parentid>
      <timestamp>2013-06-05T14:11:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/runtime error]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/runtime error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/set terminate</title>
    <ns>0</ns>
    <id>6632</id>
    <redirect title="cpp/error/set terminate" />
    <revision>
      <id>25980</id>
      <timestamp>2012-04-29T08:17:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/set terminate]] to [[cpp/error/set terminate]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/set terminate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/set unexpected</title>
    <ns>0</ns>
    <id>6633</id>
    <redirect title="cpp/error/set unexpected" />
    <revision>
      <id>25982</id>
      <timestamp>2012-04-29T08:17:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/set unexpected]] to [[cpp/error/set unexpected]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/error/set unexpected]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/terminate</title>
    <ns>0</ns>
    <id>6634</id>
    <redirect title="cpp/error/terminate" />
    <revision>
      <id>25984</id>
      <timestamp>2012-04-29T08:17:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/terminate]] to [[cpp/error/terminate]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/error/terminate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/terminate handler</title>
    <ns>0</ns>
    <id>6635</id>
    <redirect title="cpp/error/terminate handler" />
    <revision>
      <id>25986</id>
      <timestamp>2012-04-29T08:17:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/terminate handler]] to [[cpp/error/terminate handler]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[cpp/error/terminate handler]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/throw with nested</title>
    <ns>0</ns>
    <id>6636</id>
    <redirect title="cpp/error/throw with nested" />
    <revision>
      <id>25988</id>
      <timestamp>2012-04-29T08:17:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/throw with nested]] to [[cpp/error/throw with nested]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[cpp/error/throw with nested]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/uncaught exception</title>
    <ns>0</ns>
    <id>6637</id>
    <redirect title="cpp/error/uncaught exception" />
    <revision>
      <id>25990</id>
      <timestamp>2012-04-29T08:17:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/uncaught exception]] to [[cpp/error/uncaught exception]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/error/uncaught exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/underflow error</title>
    <ns>0</ns>
    <id>6638</id>
    <redirect title="cpp/error/underflow error" />
    <revision>
      <id>25992</id>
      <timestamp>2012-04-29T08:17:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/underflow error]] to [[cpp/error/underflow error]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/underflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/underflow error/underflow error</title>
    <ns>0</ns>
    <id>6639</id>
    <redirect title="cpp/error/underflow error" />
    <revision>
      <id>61284</id>
      <parentid>25994</parentid>
      <timestamp>2013-06-05T14:11:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/underflow error]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/underflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/unexpected</title>
    <ns>0</ns>
    <id>6640</id>
    <redirect title="cpp/error/unexpected" />
    <revision>
      <id>25996</id>
      <timestamp>2012-04-29T08:17:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/unexpected]] to [[cpp/error/unexpected]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/error/unexpected]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/unexpected handler</title>
    <ns>0</ns>
    <id>6641</id>
    <redirect title="cpp/error/unexpected handler" />
    <revision>
      <id>25998</id>
      <timestamp>2012-04-29T08:17:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/exception/unexpected handler]] to [[cpp/error/unexpected handler]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/error/unexpected handler]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/what</title>
    <ns>0</ns>
    <id>4516</id>
    <revision>
      <id>91793</id>
      <parentid>66024</parentid>
      <timestamp>2017-03-31T19:58:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="822">{{cpp/error/exception/title|what}}
{{cpp/error/exception/navbar}}
{{ddcl | 
virtual const char* what() const;
}}

Returns the explanatory string.

===Parameters===
(none)

===Return value===
Pointer to a null-terminated string with explanatory information. The pointer is guaranteed to be valid at least until the exception object from which it is obtained is destroyed, or until a non-const member function on the exception object is called.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/error/exception/what]]
[[es:cpp/error/exception/what]]
[[fr:cpp/error/exception/what]]
[[it:cpp/error/exception/what]]
[[ja:cpp/error/exception/what]]
[[pt:cpp/error/exception/what]]
[[ru:cpp/error/exception/what]]
[[zh:cpp/error/exception/what]]</text>
      <sha1>3qfkkp0y8suk7q92dp3xf5nfzkb6amw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/exception/~exception</title>
    <ns>0</ns>
    <id>4517</id>
    <revision>
      <id>42336</id>
      <parentid>33633</parentid>
      <timestamp>2012-11-02T22:55:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="443">{{cpp/error/exception/title|~exception}}
{{cpp/error/exception/navbar}}
{{ddcl | 
virtual ~exception();
}}

Destroys the exception object.

[[de:cpp/error/exception/~exception]]
[[es:cpp/error/exception/~exception]]
[[fr:cpp/error/exception/~exception]]
[[it:cpp/error/exception/~exception]]
[[ja:cpp/error/exception/~exception]]
[[pt:cpp/error/exception/~exception]]
[[ru:cpp/error/exception/~exception]]
[[zh:cpp/error/exception/~exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/generic category</title>
    <ns>0</ns>
    <id>4832</id>
    <revision>
      <id>91398</id>
      <parentid>63310</parentid>
      <timestamp>2017-03-31T19:42:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1509">{{cpp/title|generic_category}}
{{cpp/error/navbar}}
{{ddcl | header=system_error | since=c++11 |
const std::error_category&amp; generic_category();
}}

Obtains a reference to the static error category object for generic errors. The object is required to override the virtual function {{c|error_category::name()}} to return a pointer to the string {{c|&quot;generic&quot;}}. It is used to identify error conditions that correspond to the POSIX {{lc|errno}} codes.

===Parameters===
(none)

===Return value===
A reference to the static object of unspecified runtime type, derived from {{lc|std::error_category}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;system_error&gt;
#include &lt;cerrno&gt;
#include &lt;string&gt;
int main()
{
    std::error_condition econd = std::generic_category().default_error_condition(EDOM);
    std::cout &lt;&lt; &quot;Category: &quot; &lt;&lt; econd.category().name() &lt;&lt; '\n'
              &lt;&lt; &quot;Value: &quot; &lt;&lt; econd.value() &lt;&lt; '\n'
              &lt;&lt; &quot;Message: &quot; &lt;&lt; econd.message() &lt;&lt; '\n';
}
 | output=
Category: generic
Value: 33
Message: Numerical argument out of domain
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc system_category}}
{{dsc inc | cpp/error/dsc errc}}
{{dsc end}}

[[de:cpp/error/generic category]]
[[es:cpp/error/generic category]]
[[fr:cpp/error/generic category]]
[[it:cpp/error/generic category]]
[[ja:cpp/error/generic category]]
[[pt:cpp/error/generic category]]
[[ru:cpp/error/generic category]]
[[zh:cpp/error/generic category]]</text>
      <sha1>hapjl9bibftolt2bjidespqgzxkswcn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/get terminate</title>
    <ns>0</ns>
    <id>5557</id>
    <revision>
      <id>91845</id>
      <parentid>72154</parentid>
      <timestamp>2017-03-31T19:59:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="968">{{cpp/title|get_terminate}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl | since=c++11 |1=
std::terminate_handler get_terminate();
}}
{{dcl end}}

Returns the currently installed {{lc|std::terminate_handler}}, which may be a null pointer.

{{rev begin}}
{{rev|since=c++11|
This function is thread-safe. Prior call to {{lc|std::set_terminate}} ''synchronizes-with'' (see {{lc|std::memory_order}}) this function.
}}
{{rev end}}
===Parameters===
(none)

===Return value===
The currently installed {{lc|std::terminate_handler}}.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc terminate_handler}}
{{dsc inc | cpp/error/dsc set_terminate}}
{{dsc end}}

[[de:cpp/error/get terminate]]
[[es:cpp/error/get terminate]]
[[fr:cpp/error/get terminate]]
[[it:cpp/error/get terminate]]
[[ja:cpp/error/get terminate]]
[[pt:cpp/error/get terminate]]
[[ru:cpp/error/get terminate]]
[[zh:cpp/error/get terminate]]</text>
      <sha1>q3s6kob4s3m94f512c4ft31u0605xx3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/get unexpected</title>
    <ns>0</ns>
    <id>5572</id>
    <revision>
      <id>91460</id>
      <parentid>88687</parentid>
      <timestamp>2017-03-31T19:45:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1059">{{cpp/title|get_unexpected}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl | notes={{mark|since c++11, deprecated in C++11}} | until=c++17 |1=
std::unexpected_handler get_unexpected();
}}
{{dcl end}}

Returns the currently installed {{lc|std::unexpected_handler}}, which may be a null pointer.

{{rev begin}}
{{rev|since=c++11|
This function is thread-safe. Prior call to {{tt|std::set_unexpected}} ''synchronizes-with'' (see {{lc|std::memory_order}}) the subsequent calls to this function.
}}
{{rev end}}

===Parameters===
(none)

===Return value===
The currently installed {{lc|std::unexpected_handler}}.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc unexpected_handler}}
{{dsc inc | cpp/error/dsc set_unexpected}}
{{dsc end}}

[[de:cpp/error/get unexpected]]
[[es:cpp/error/get unexpected]]
[[fr:cpp/error/get unexpected]]
[[it:cpp/error/get unexpected]]
[[ja:cpp/error/get unexpected]]
[[pt:cpp/error/get unexpected]]
[[ru:cpp/error/get unexpected]]
[[zh:cpp/error/get unexpected]]</text>
      <sha1>ju2wiy8cfpo0f684v3qbhutpt3fuw5v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/invalid argument</title>
    <ns>0</ns>
    <id>2087</id>
    <revision>
      <id>70827</id>
      <parentid>57380</parentid>
      <timestamp>2014-05-30T19:51:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>usage note, related errc/errno</comment>
      <text xml:space="preserve" bytes="1157">{{cpp/title | invalid_argument}}
{{cpp/error/invalid_argument/navbar}}
{{ddcl | header=stdexcept |
class invalid_argument;
}}

Defines a type of object to be thrown as exception. It reports errors that arise because an argument value has not been accepted.

This exception is thrown by {{lc|std::bitset::bitset}}, and the {{lc|std::stoi}} and {{lc|std::stof}} families of functions.

{{inheritance diagram/std-invalid_argument}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|invalid_argument}}
{{dsc end}}

{{include|cpp/error/exception/constructor|invalid_argument}}

{{cpp/error/exception/inherit}}

===Notes===
The purpose of this exception type is similar to the error condition {{lc|std::errc::invalid_argument}} (thrown in {{lc|std::system_error}} from member functions of {{lc|std::thread}}) and the related errno constant {{lc|EINVAL}}.

[[de:cpp/error/invalid argument]]
[[es:cpp/error/invalid argument]]
[[fr:cpp/error/invalid argument]]
[[it:cpp/error/invalid argument]]
[[ja:cpp/error/invalid argument]]
[[pt:cpp/error/invalid argument]]
[[ru:cpp/error/invalid argument]]
[[zh:cpp/error/invalid argument]]</text>
      <sha1>p0rnal653is1z9dc64i2fm1qhls2jrv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/invalid argument/invalid argument</title>
    <ns>0</ns>
    <id>4501</id>
    <redirect title="cpp/error/invalid argument" />
    <revision>
      <id>47830</id>
      <parentid>42273</parentid>
      <timestamp>2013-05-16T22:27:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/invalid argument]]</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/error/invalid_argument]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/length error</title>
    <ns>0</ns>
    <id>2088</id>
    <revision>
      <id>70826</id>
      <parentid>70825</parentid>
      <timestamp>2014-05-30T19:45:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/]/}</comment>
      <text xml:space="preserve" bytes="966">{{cpp/title | length_error}}
{{cpp/error/length_error/navbar}}
{{ddcl | header=stdexcept |
class length_error;
}}

Defines a type of object to be thrown as exception. It reports errors that are consequence of attempt to exceed implementation defined length limits for some object.

This exception is thrown by member functions of {{lc|std::basic_string}} and {{lc|std::vector::reserve}}

{{inheritance diagram/std-length_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|length_error}}
{{dsc end}}

{{include|cpp/error/exception/constructor|length_error}}

{{cpp/error/exception/inherit}}


===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc resize}}
{{dsc end}}

[[de:cpp/error/length error]]
[[es:cpp/error/length error]]
[[fr:cpp/error/length error]]
[[it:cpp/error/length error]]
[[ja:cpp/error/length error]]
[[pt:cpp/error/length error]]
[[ru:cpp/error/length error]]
[[zh:cpp/error/length error]]</text>
      <sha1>dhytfc4s1xjxukrzajamyhma22r4vmd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/length error/length error</title>
    <ns>0</ns>
    <id>4502</id>
    <redirect title="cpp/error/length error" />
    <revision>
      <id>47832</id>
      <parentid>42255</parentid>
      <timestamp>2013-05-16T22:27:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/length error]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/length_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/logic error</title>
    <ns>0</ns>
    <id>2081</id>
    <revision>
      <id>80278</id>
      <parentid>70829</parentid>
      <timestamp>2015-08-01T20:59:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+bad optional access</comment>
      <text xml:space="preserve" bytes="1160">{{cpp/title | logic_error}}
{{cpp/error/logic_error/navbar}}
{{ddcl | header=stdexcept |
class logic_error;
}}

Defines a type of object to be thrown as exception. It reports errors that are a consequence of faulty logic within the program such as violating logical preconditions or class invariants and may be preventable.

No standard library components throw this exception directly, but the exception types 
{{lc|std::invalid_argument}}, {{lc|std::domain_error}}, {{lc|std::length_error}}, {{lc|std::out_of_range}}, {{lc|std::future_error}}, and {{ltt|cpp/experimental/optional/bad_optional_access|std::experimental::bad_optional_access}} are derived from {{tt|std::logic_error}}.

{{inheritance diagram/std-logic_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|logic_error}}
{{dsc end}}

{{include|cpp/error/exception/constructor|logic_error}}

{{cpp/error/exception/inherit}}

[[de:cpp/error/logic error]]
[[es:cpp/error/logic error]]
[[fr:cpp/error/logic error]]
[[it:cpp/error/logic error]]
[[ja:cpp/error/logic error]]
[[pt:cpp/error/logic error]]
[[ru:cpp/error/logic error]]
[[zh:cpp/error/logic error]]</text>
      <sha1>rscpldcnx68jkhryceemh670h07q4b3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/logic error/logic error</title>
    <ns>0</ns>
    <id>4500</id>
    <redirect title="cpp/error/logic error" />
    <revision>
      <id>47798</id>
      <parentid>42236</parentid>
      <timestamp>2013-05-16T21:33:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/logic error]]</comment>
      <text xml:space="preserve" bytes="36">#redirect  [[cpp/error/logic_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/make exception ptr</title>
    <ns>0</ns>
    <id>5612</id>
    <revision>
      <id>91350</id>
      <parentid>80408</parentid>
      <timestamp>2017-03-31T19:40:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1134">{{cpp/title|make_exception_ptr}}
{{cpp/error/navbar}}
{{ddcl | header=exception | since=c++11 |
template&lt; class E &gt;
std::exception_ptr make_exception_ptr( E e );
}}

Creates an {{lc|std::exception_ptr}} that holds a reference to a copy of {{tt|e}}. This is done as if executing the following code:

{{source|
try {
    throw e;
} catch(...) {
    return std::current_exception();
}
}}

===Parameters===
(none)

===Return value===
An instance of {{lc|std::exception_ptr}} holding a reference to the copy of {{tt|e}}, or to an instance of {{lc|std::bad_alloc}} or to an instance of {{lc|std::bad_exception}} (see {{lc|std::current_exception}}).

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The parameter is passed by value and is subject to slicing.

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc current_exception}}
{{dsc end}}

[[de:cpp/error/make exception ptr]]
[[es:cpp/error/make exception ptr]]
[[fr:cpp/error/make exception ptr]]
[[it:cpp/error/make exception ptr]]
[[ja:cpp/error/make exception ptr]]
[[pt:cpp/error/make exception ptr]]
[[ru:cpp/error/make exception ptr]]
[[zh:cpp/error/make exception ptr]]</text>
      <sha1>jb1zx0w75bczo2hnzrlz79y8v160rfv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/nested exception</title>
    <ns>0</ns>
    <id>4065</id>
    <revision>
      <id>90792</id>
      <parentid>70489</parentid>
      <timestamp>2017-03-10T15:45:52Z</timestamp>
      <contributor>
        <username>Ecatmur</username>
        <id>1355</id>
      </contributor>
      <minor/>
      <comment>Fix number</comment>
      <text xml:space="preserve" bytes="1505">{{cpp/title|nested_exception}}
{{cpp/error/navbar}}
{{ddcl | header=exception | since=c++11 | 1=
class nested_exception;
}}

{{tt|std::nested_exception}} is a polymorphic mixin class which can capture and store the current exception, making it possible to nest exceptions of arbitrary types within each other.  

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/error/nested_exception/nested_exception | constructs a nested_exception}}
{{dsc mem vdtor | cpp/error/nested_exception/~nested_exception | destructs a nested exception}}
{{dsc mem fun | cpp/error/nested_exception/operator{{=}} | replaces the contents of a nested_exception}}
{{dsc mem fun | cpp/error/nested_exception/rethrow_nested | throws the stored exception}}
{{dsc mem fun | cpp/error/nested_exception/nested_ptr | obtains a pointer to the stored exception}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/error/dsc throw_with_nested}}
{{dsc inc | cpp/error/dsc rethrow_if_nested}}
{{dsc end}}

===Example===
{{include| cpp/error/example_nested_exception}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc exception_ptr}}
{{dsc inc | cpp/error/dsc throw_with_nested}}
{{dsc inc | cpp/error/dsc rethrow_if_nested}}
{{dsc end}}

[[de:cpp/error/nested exception]]
[[es:cpp/error/nested exception]]
[[fr:cpp/error/nested exception]]
[[it:cpp/error/nested exception]]
[[ja:cpp/error/nested exception]]
[[pt:cpp/error/nested exception]]
[[ru:cpp/error/nested exception]]
[[zh:cpp/error/nested exception]]</text>
      <sha1>b6o8mkxrm7rjdigoarjt6o9k6qmjkun</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/nested exception/nested exception</title>
    <ns>0</ns>
    <id>9885</id>
    <revision>
      <id>91431</id>
      <parentid>74932</parentid>
      <timestamp>2017-03-31T19:43:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="709">{{cpp/error/nested_exception/title|nested_exception}}
{{cpp/error/nested_exception/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
nested_exception();
}}
{{dcl | num=2 | since=c++11 | 1=
nested_exception( const nested_exception&amp; other ) = default;
}}
{{dcl end}}

Constructs new {{tt|nested_exception}} object.

@1@ Default constructor. Stores an exception object obtained by calling {{c|std::current_exception()}} within the new {{tt|nested_exception}} object.

@2@ Copy constructor. Initializes the object with the exception stored in {{tt|other}}. 

===Parameters===
{{par begin}}
{{par | other | nested exception to initialize the contents with}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>1hgvg6hj12hdbq4phckqt8l1cz2umhx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/nested exception/nested ptr</title>
    <ns>0</ns>
    <id>9888</id>
    <revision>
      <id>91357</id>
      <parentid>80016</parentid>
      <timestamp>2017-03-31T19:41:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="299">{{cpp/error/nested_exception/title|nested_ptr}}
{{cpp/error/nested_exception/navbar}}
{{ddcl | since=c++11 | 1=
std::exception_ptr nested_ptr() const;
}}

Returns a pointer to the stored exception, if any.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>5s4m1qa71drvw1e33qikyjaikwqt4a7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/nested exception/operator=</title>
    <ns>0</ns>
    <id>9886</id>
    <revision>
      <id>91365</id>
      <parentid>63313</parentid>
      <timestamp>2017-03-31T19:41:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="438">{{cpp/error/nested_exception/title|operator{{=}}}}
{{cpp/error/nested_exception/navbar}}
{{ddcl | since=c++11 | 1=
nested_exception&amp; operator=( const nested_exception&amp; other ) = default;
}}

Replaces the stored exception with the one held in {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | nested exception to replace the contents with }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>l26353sx34nurh3061igrkimfaxho8n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/nested exception/rethrow nested</title>
    <ns>0</ns>
    <id>9887</id>
    <revision>
      <id>63314</id>
      <parentid>60955</parentid>
      <timestamp>2013-07-10T01:28:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="364">{{cpp/error/nested_exception/title|rethrow_nested}}
{{cpp/error/nested_exception/navbar}}
{{ddcl | since=c++11 | 1=
[[noreturn]] void rethrow_nested() const;
}}

Rethrows the stored exception. If there is no stored exceptions (i.e. {{lc|nested_ptr()}} returns null pointer), then {{lc|std::terminate}} is called.

===Parameters===
(none)

===Return value===
(none)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/nested exception/throw with nested</title>
    <ns>0</ns>
    <id>13107</id>
    <redirect title="cpp/error/throw with nested" />
    <revision>
      <id>66709</id>
      <timestamp>2013-12-27T14:30:42Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/throw with nested]]</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/error/throw_with_nested]]</text>
      <sha1>17zbkz4z3pdce9k9je9hdgyr16k6l9q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/nested exception/~nested exception</title>
    <ns>0</ns>
    <id>9884</id>
    <revision>
      <id>63315</id>
      <parentid>46522</parentid>
      <timestamp>2013-07-10T01:28:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="200">{{cpp/error/nested_exception/title|~nested_exception}}
{{cpp/error/nested_exception/navbar}}
{{ddcl | since=c++11 |
virtual ~nested_exception() {{=}} default;
}}

Destroys the nested exception object.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/out of range</title>
    <ns>0</ns>
    <id>2089</id>
    <revision>
      <id>70848</id>
      <parentid>70824</parentid>
      <timestamp>2014-05-31T03:20:56Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1342">{{cpp/title | out_of_range}}
{{cpp/error/out_of_range/navbar}}
{{ddcl | header=stdexcept |
class out_of_range;
}}

Defines a type of object to be thrown as exception. It reports errors that are consequence of attempt to access elements out of defined range.

It may be thrown by the member functions of {{lc|std::bitset}} and {{lc|std::basic_string}}, by  {{lc|std::stoi}} and {{lc|std::stod}} families of functions, and by the bounds-checked member access functions (e.g. {{lc|std::vector::at}} and {{lc|std::map::at}})

{{inheritance diagram/std-out_of_range}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|out_of_range}}
{{dsc end}}

{{include|cpp/error/exception/constructor|out_of_range}}

{{cpp/error/exception/inherit}}

===Notes===
The standard error condition {{lc|std::errc::result_out_of_range}} typically indicates the condition where the result, rather than the input, is out of range, and is more closely related to {{lc|std::range_error}} and {{lc|ERANGE}}.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc at }}
{{dsc end}}

[[de:cpp/error/out of range]]
[[es:cpp/error/out of range]]
[[fr:cpp/error/out of range]]
[[it:cpp/error/out of range]]
[[ja:cpp/error/out of range]]
[[pt:cpp/error/out of range]]
[[ru:cpp/error/out of range]]
[[zh:cpp/error/out of range]]</text>
      <sha1>dk3evmicksthvj4npb5bkig6fm83z1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/out of range/out of range</title>
    <ns>0</ns>
    <id>4503</id>
    <redirect title="cpp/error/out of range" />
    <revision>
      <id>47836</id>
      <parentid>42203</parentid>
      <timestamp>2013-05-16T22:28:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/out of range]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/out_of_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/overflow error</title>
    <ns>0</ns>
    <id>2084</id>
    <revision>
      <id>70819</id>
      <parentid>70817</parentid>
      <timestamp>2014-05-30T19:03:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+bitset throws this</comment>
      <text xml:space="preserve" bytes="1410">{{cpp/title | overflow_error}}
{{cpp/error/overflow_error/navbar}}
{{ddcl | header=stdexcept |
class overflow_error;
}}

Defines a type of object to be thrown as exception. It can be used to report arithmetic overflow errors (that is, situations where a result of a computation is too large for the destination type)

The only standard library components that throw this exception are {{lc|std::bitset::to_ulong}} and {{lc|std::bitset::to_ullong}}.

The mathematical functions of the standard library components do not throw this exception (mathematical functions report overflow errors as specified in {{lc|math_errhandling}}). Third-party libraries, however, use this. For example, [http://www.boost.org/doc/libs/1_55_0/libs/math/doc/html/math_toolkit/error_handling.html boost.math] throws {{tt|std::overflow_error}} if {{tt|boost::math::policies::throw_on_error}} is enabled (the default setting).

{{inheritance diagram/std-overflow_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|overflow_error}}
{{dsc end}}

{{include|cpp/error/exception/constructor|overflow_error}}

{{cpp/error/exception/inherit}}

[[de:cpp/error/overflow error]]
[[es:cpp/error/overflow error]]
[[fr:cpp/error/overflow error]]
[[it:cpp/error/overflow error]]
[[ja:cpp/error/overflow error]]
[[pt:cpp/error/overflow error]]
[[ru:cpp/error/overflow error]]
[[zh:cpp/error/overflow error]]</text>
      <sha1>qh4zxa64s404mwtaqy3mzhzbkaw4e2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/overflow error/overflow error</title>
    <ns>0</ns>
    <id>4505</id>
    <redirect title="cpp/error/overflow error" />
    <revision>
      <id>47834</id>
      <parentid>42189</parentid>
      <timestamp>2013-05-16T22:28:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/overflow error]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/error/overflow_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/range error</title>
    <ns>0</ns>
    <id>2085</id>
    <revision>
      <id>72071</id>
      <parentid>70822</parentid>
      <timestamp>2014-07-11T20:32:11Z</timestamp>
      <contributor>
        <username>Gsauthof</username>
        <id>3226</id>
      </contributor>
      <comment>restore inheritance diagram</comment>
      <text xml:space="preserve" bytes="1105">{{cpp/title | range_error}}
{{cpp/error/range_error/navbar}}
{{ddcl | header=stdexcept |
class range_error;
}}

Defines a type of object to be thrown as exception. It can be used to report range errors (that is, situations where a result of a computation cannot be represented by the destination type)

The only standard library components that throw this exception are {{lc|std::wstring_convert::from_bytes}} and {{lc|std::wstring_convert::to_bytes}}.

The mathematical functions in the standard library components do not throw this exception (mathematical functions report range errors as specified in {{lc|math_errhandling}}).

{{inheritance diagram/std-range_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|range_error}}
{{dsc end}}

{{include|cpp/error/exception/constructor|range_error}}

{{cpp/error/exception/inherit}}

[[de:cpp/error/range error]]
[[es:cpp/error/range error]]
[[fr:cpp/error/range error]]
[[it:cpp/error/range error]]
[[ja:cpp/error/range error]]
[[pt:cpp/error/range error]]
[[ru:cpp/error/range error]]
[[zh:cpp/error/range error]]</text>
      <sha1>sqdjv32m2pzl3k8rc1t7a6lfj7vpido</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/range error/range error</title>
    <ns>0</ns>
    <id>6726</id>
    <redirect title="cpp/error/range error" />
    <revision>
      <id>47837</id>
      <parentid>42173</parentid>
      <timestamp>2013-05-16T22:28:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/range error]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/error/range_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/rethrow exception</title>
    <ns>0</ns>
    <id>5608</id>
    <revision>
      <id>63316</id>
      <parentid>57394</parentid>
      <timestamp>2013-07-10T01:28:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="847">{{cpp/title|rethrow_exception}}
{{cpp/error/navbar}}

{{ddcl | header=exception | since=c++11 |
[[noreturn]] void rethrow_exception( std::exception_ptr p )
}}

Throws the previously captured exception object, referred to by the exception pointer {{tt|p}}.

===Parameters===
{{par begin}}
{{par | p | non-null {{lc|std::exception_ptr}} }}
{{par end}}

===Return value===
(none)

===Example===
{{include| cpp/error/example_exception_ptr}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc exception_ptr}}
{{dsc inc | cpp/error/dsc current_exception}}
{{dsc end}}

[[de:cpp/error/rethrow exception]]
[[es:cpp/error/rethrow exception]]
[[fr:cpp/error/rethrow exception]]
[[it:cpp/error/rethrow exception]]
[[ja:cpp/error/rethrow exception]]
[[pt:cpp/error/rethrow exception]]
[[ru:cpp/error/rethrow exception]]
[[zh:cpp/error/rethrow exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/rethrow if nested</title>
    <ns>0</ns>
    <id>5555</id>
    <revision>
      <id>90695</id>
      <parentid>81568</parentid>
      <timestamp>2017-03-07T23:04:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2784, also rewrite impl</comment>
      <text xml:space="preserve" bytes="1846">{{cpp/title|rethrow_if_nested}}
{{cpp/error/navbar}}

{{ddcl | header=exception | since=c++11 |
template&lt; class E &gt;
void rethrow_if_nested( const E&amp; e );
}}

If {{tt|E}} is not a polymorphic class type, or if {{lc|std::nested_exception}} is an inaccessible or ambiguous base class of {{tt|E}}, there is no effect.

Otherwise, performs

{{source|1=
if (auto p = dynamic_cast&lt;const std::nested_exception*&gt;(std::addressof(e)))
    p-&gt;rethrow_nested();
}}

===Parameters===
{{par begin}}
{{par | e | the exception object to rethrow}}
{{par end}}

===Return value===
(none)

===Possible implementation===
{{eq fun |1=
namespace details {
    template &lt;class E&gt;
    struct can_dynamic_cast
        : std::integral_constant&lt;bool,
              std::is_polymorphic&lt;E&gt;::value &amp;&amp;
              (!std::is_base_of&lt;std::nested_exception, E&gt;::value {{!!}} 
                std::is_convertible&lt;E*, std::nested_exception*&gt;::value)
          &gt; { };

    template &lt;class T&gt;
    void rethrow_if_nested_impl(const T&amp; e, std::true_type)
    {
        if(auto nep = dynamic_cast&lt;const std::nested_exception*&gt;(std::addressof(e)))
            nep-&gt;rethrow_nested();
    }

    template &lt;class T&gt;
    void rethrow_if_nested_impl(const T&amp;, std::false_type) { }
}

template &lt;class T&gt;
void rethrow_if_nested(const T&amp; t){
    details::rethrow_if_nested_impl(t, details::can_dynamic_cast&lt;T&gt;());
}
}}

===Example===
{{include| cpp/error/example_nested_exception}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc nested_exception}}
{{dsc inc | cpp/error/dsc throw_with_nested}}
{{dsc end}}

[[de:cpp/error/rethrow if nested]]
[[es:cpp/error/rethrow if nested]]
[[fr:cpp/error/rethrow if nested]]
[[it:cpp/error/rethrow if nested]]
[[ja:cpp/error/rethrow if nested]]
[[pt:cpp/error/rethrow if nested]]
[[ru:cpp/error/rethrow if nested]]
[[zh:cpp/error/rethrow if nested]]</text>
      <sha1>i7f65b4hzkguyqpf2sx6ix86nlotutr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/runtime error</title>
    <ns>0</ns>
    <id>2082</id>
    <revision>
      <id>85886</id>
      <parentid>70823</parentid>
      <timestamp>2016-05-29T14:59:50Z</timestamp>
      <contributor>
        <ip>79.183.51.131</ip>
      </contributor>
      <text xml:space="preserve" bytes="1160">{{cpp/title | runtime_error}}
{{cpp/error/runtime_error/navbar}}
{{ddcl | header=stdexcept |
class runtime_error;
}}

Defines a type of object to be thrown as exception. It reports errors that are due to events beyond the scope of the program and can not be easily predicted. 

Exceptions of type {{tt|std::runtime_error}} are thrown by the following standard library components: {{lc|std::locale::locale}} and {{lc|std::locale::combine}}.

In addition, the standard exception types {{lc|std::range_error}}, {{lc|std::overflow_error}}, {{lc|std::underflow_error}}, {{lc|std::regex_error}}, and {{lc|std::system_error}} are derived from {{tt|std::runtime_error}}.

{{inheritance diagram/std-runtime_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|runtime_error}}
{{dsc end}}

{{include|cpp/error/exception/constructor|runtime_error}}

{{cpp/error/exception/inherit}}

[[de:cpp/error/runtime error]]
[[es:cpp/error/runtime error]]
[[fr:cpp/error/runtime error]]
[[it:cpp/error/runtime error]]
[[ja:cpp/error/runtime error]]
[[pt:cpp/error/runtime error]]
[[ru:cpp/error/runtime error]]
[[zh:cpp/error/runtime error]]</text>
      <sha1>t5s80362d97kfq2u7eeg3uwmf9rtjpp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/runtime error/runtime error</title>
    <ns>0</ns>
    <id>4504</id>
    <redirect title="cpp/error/runtime error" />
    <revision>
      <id>47833</id>
      <parentid>42137</parentid>
      <timestamp>2013-05-16T22:28:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/runtime error]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/error/runtime_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/set terminate</title>
    <ns>0</ns>
    <id>5558</id>
    <revision>
      <id>91394</id>
      <parentid>83041</parentid>
      <timestamp>2017-03-31T19:42:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1646">{{cpp/title|set_terminate}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl | 1=
std::terminate_handler set_terminate( std::terminate_handler f );
}}
{{dcl end}}

Makes {{tt|f}} the new global terminate handler function and returns the previously installed {{lc|std::terminate_handler}}.

{{rev begin}}
{{rev|since=c++11|
This function is thread-safe. Every call to {{tt|std::set_terminate}} ''synchronizes-with'' (see {{lc|std::memory_order}}) the subsequent {{tt|std::set_terminate}} and {{lc|std::get_terminate}}
}}
{{rev end}}
===Parameters===
{{par begin}}
{{par | f | pointer to function of type {{lc|std::terminate_handler}}, or null pointer}}
{{par end}}

===Return value===
The previously-installed terminate handler, or a null pointer value if none was installed.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;exception&gt;
   
int main()
{
    std::set_terminate([](){ std::cout &lt;&lt; &quot;Unhandled exception\n&quot;; std::abort();});
    throw 1;
}
|p=true
|output=
Unhandled exception
bash: line 7:  7743 Aborted                 (core dumped) ./a.out
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc terminate}}
{{dsc inc | cpp/error/dsc get_terminate}}
{{dsc inc | cpp/error/dsc terminate_handler}}
{{dsc end}}

[[de:cpp/error/set terminate]]
[[es:cpp/error/set terminate]]
[[fr:cpp/error/set terminate]]
[[it:cpp/error/set terminate]]
[[ja:cpp/error/set terminate]]
[[pt:cpp/error/set terminate]]
[[ru:cpp/error/set terminate]]
[[zh:cpp/error/set terminate]]</text>
      <sha1>k56swwlhem85fa60xf804j948srz193</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/set unexpected</title>
    <ns>0</ns>
    <id>5573</id>
    <revision>
      <id>91372</id>
      <parentid>88688</parentid>
      <timestamp>2017-03-31T19:41:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1422">{{cpp/title|set_unexpected}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl | notes={{mark| deprecated since C++11}} | until=c++17| 1=
std::unexpected_handler set_unexpected( std::unexpected_handler f );
}}
{{dcl end}}

Makes {{tt|f}} the new global {{lc|std::unexpected_handler}} and returns the previously installed {{lc|std::unexpected_handler}}.

{{rev begin}}
{{rev|since=c++11|
This function is thread-safe. Every call to {{tt|std::set_unexpected}} ''synchronizes-with'' (see {{lc|std::memory_order}}) the subsequent calls to {{tt|std::set_unexpected}} and {{lc|std::get_unexpected}}
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | f | pointer to function of type {{lc|std::unexpected_handler}}, or null pointer}}
{{par end}}

===Return value===
The previously-installed unexpected handler, or a null pointer value if none was installed.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc unexpected}}
{{dsc inc | cpp/error/dsc get_unexpected}}
{{dsc inc | cpp/error/dsc unexpected_handler}}
{{dsc end}}

[[de:cpp/error/set unexpected]]
[[es:cpp/error/set unexpected]]
[[fr:cpp/error/set unexpected]]
[[it:cpp/error/set unexpected]]
[[ja:cpp/error/set unexpected]]
[[pt:cpp/error/set unexpected]]
[[ru:cpp/error/set unexpected]]
[[zh:cpp/error/set unexpected]]</text>
      <sha1>2fcjmhntgh6mb95459pufpcdph8aulb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system category</title>
    <ns>0</ns>
    <id>4833</id>
    <revision>
      <id>91463</id>
      <parentid>78610</parentid>
      <timestamp>2017-03-31T19:45:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1943">{{cpp/title|system_category}}
{{cpp/error/navbar}}
{{ddcl | header=system_error | since=c++11 |
const std::error_category&amp; system_category();
}}

Obtains a reference to the static error category object for errors reported by the operating system. The object is required to override the virtual function {{lc|std::error_category::name()}} to return a pointer to the string {{c|&quot;system&quot;}}. It is also required to override the virtual function {{lc|std::error_category::default_error_condition()}} to map the error codes that match POSIX {{lc|errno}} values to {{lc|std::generic_category}}.

===Parameters===
(none)

===Return value===
A reference to the static object of unspecified runtime type, derived from {{lc|std::error_category}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;system_error&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;

int main()
{
    std::error_condition econd = std::system_category().default_error_condition(EDOM);
    std::cout &lt;&lt; &quot;Category: &quot; &lt;&lt; econd.category().name() &lt;&lt; '\n'
              &lt;&lt; &quot;Value: &quot; &lt;&lt; econd.value() &lt;&lt; '\n'
              &lt;&lt; &quot;Message: &quot; &lt;&lt; econd.message() &lt;&lt; '\n';

    econd = std::system_category().default_error_condition(10001);
    std::cout &lt;&lt; &quot;Category: &quot; &lt;&lt; econd.category().name() &lt;&lt; '\n'
              &lt;&lt; &quot;Value: &quot; &lt;&lt; econd.value() &lt;&lt; '\n'
              &lt;&lt; &quot;Message: &quot; &lt;&lt; econd.message() &lt;&lt; '\n';
}
 | output=
Category: generic
Value: 33
Message: Numerical argument out of domain
Category: system
Value: 10001
Message: Unknown error 10001
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc generic_category}}
{{dsc inc | cpp/error/dsc errc}}
{{dsc end}}

[[de:cpp/error/system category]]
[[es:cpp/error/system category]]
[[fr:cpp/error/system category]]
[[it:cpp/error/system category]]
[[ja:cpp/error/system category]]
[[pt:cpp/error/system category]]
[[ru:cpp/error/system category]]
[[zh:cpp/error/system category]]</text>
      <sha1>3iou7cf499r2r6s89ctug4z0w78gsez</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error</title>
    <ns>0</ns>
    <id>5447</id>
    <revision>
      <id>69432</id>
      <parentid>62722</parentid>
      <timestamp>2014-04-08T17:33:47Z</timestamp>
      <contributor>
        <username>C.m.brandenburg</username>
        <id>2248</id>
      </contributor>
      <minor/>
      <comment>grammar fix for summary</comment>
      <text xml:space="preserve" bytes="1385">{{cpp/title|system_error}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | system_error}}
{{dcl | since=c++11 | 1=
class system_error;
}}
{{dcl end}}

{{tt|std::system_error}} is the type of the exception thrown by various library functions (typically the functions that interface with the OS facilities, e.g. the constructor of {{lc|std::thread}}) when the exception has an associated {{lc|std::error_code}}, which may be reported.

{{inheritance diagram/std-system_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/system_error/dsc constructor}}
{{dsc inc | cpp/error/system_error/dsc code}}
{{dsc inc | cpp/error/system_error/dsc what}}
{{dsc end}}

{{cpp/error/exception/inherit}}

===Example===
{{example
 |
 | code=
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;system_error&gt;

int main()
{
    try {
        std::thread().detach(); // attempt to detach a non-thread
    } catch(const std::system_error&amp; e) {
        std::cout &lt;&lt; &quot;Caught system_error with code &quot; &lt;&lt; e.code() 
                  &lt;&lt; &quot; meaning &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
Caught system_error with code generic:22 meaning Invalid argument
}}

[[de:cpp/error/system error]]
[[es:cpp/error/system error]]
[[fr:cpp/error/system error]]
[[it:cpp/error/system error]]
[[ja:cpp/error/system error]]
[[pt:cpp/error/system error]]
[[ru:cpp/error/system error]]
[[zh:cpp/error/system error]]</text>
      <sha1>c8qvih5ycw3w9lfk0u9ghwilvls0o30</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/code</title>
    <ns>0</ns>
    <id>8971</id>
    <revision>
      <id>91805</id>
      <parentid>63319</parentid>
      <timestamp>2017-03-31T19:58:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="645">{{cpp/error/system_error/title|code}}
{{cpp/error/system_error/navbar}}
{{ddcl | since=c++11 |
const std::error_code&amp; code() const;
}}

Returns the stored error code.

===Parameters===
(none)

===Return value===
The stored error code.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/system_error/dsc what}}
{{dsc end}}

[[de:cpp/error/system error/code]]
[[es:cpp/error/system error/code]]
[[fr:cpp/error/system error/code]]
[[it:cpp/error/system error/code]]
[[ja:cpp/error/system error/code]]
[[pt:cpp/error/system error/code]]
[[ru:cpp/error/system error/code]]
[[zh:cpp/error/system error/code]]</text>
      <sha1>th39mwlf23dja7tcymdw14lns4vq0fy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/errc</title>
    <ns>0</ns>
    <id>6644</id>
    <redirect title="cpp/error/errc" />
    <revision>
      <id>26003</id>
      <timestamp>2012-04-29T08:18:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/system error/errc]] to [[cpp/error/errc]]: merge cpp/error/exception and cpp/error/system_error paths to cpp/error</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[cpp/error/errc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/error category</title>
    <ns>0</ns>
    <id>6645</id>
    <redirect title="cpp/error/error category" />
    <revision>
      <id>26005</id>
      <timestamp>2012-04-29T08:18:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/system error/error category]] to [[cpp/error/error category]]: merge cpp/error/exception and cpp/error/system_error paths to cpp/error</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/error/error category]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/error code</title>
    <ns>0</ns>
    <id>6646</id>
    <redirect title="cpp/error/error code" />
    <revision>
      <id>26007</id>
      <timestamp>2012-04-29T08:18:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/system error/error code]] to [[cpp/error/error code]]: merge cpp/error/exception and cpp/error/system_error paths to cpp/error</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/error/error code]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/error code/hash</title>
    <ns>0</ns>
    <id>6647</id>
    <redirect title="cpp/error/error code/hash" />
    <revision>
      <id>26009</id>
      <timestamp>2012-04-29T08:18:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/system error/error code/hash]] to [[cpp/error/error code/hash]]: merge cpp/error/exception and cpp/error/system_error paths to cpp/error</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/error code/hash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/error condition</title>
    <ns>0</ns>
    <id>6648</id>
    <redirect title="cpp/error/error condition" />
    <revision>
      <id>26011</id>
      <timestamp>2012-04-29T08:18:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/system error/error condition]] to [[cpp/error/error condition]]: merge cpp/error/exception and cpp/error/system_error paths to cpp/error</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/error condition]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/generic category</title>
    <ns>0</ns>
    <id>6649</id>
    <redirect title="cpp/error/generic category" />
    <revision>
      <id>26013</id>
      <timestamp>2012-04-29T08:18:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/system error/generic category]] to [[cpp/error/generic category]]: merge cpp/error/exception and cpp/error/system_error paths to cpp/error</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/error/generic category]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/system category</title>
    <ns>0</ns>
    <id>6650</id>
    <redirect title="cpp/error/system category" />
    <revision>
      <id>26015</id>
      <timestamp>2012-04-29T08:18:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/error/system error/system category]] to [[cpp/error/system category]]: merge cpp/error/exception and cpp/error/system_error paths to cpp/error</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/system category]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/system error</title>
    <ns>0</ns>
    <id>6651</id>
    <revision>
      <id>90183</id>
      <parentid>90182</parentid>
      <timestamp>2017-02-09T05:41:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>upd output to match</comment>
      <text xml:space="preserve" bytes="2283">{{cpp/error/system_error/title|system_error}}
{{cpp/error/system_error/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
system_error( std::error_code ec );
}}
{{dcl | num=2 | since=c++11 |
system_error( std::error_code ec, const std::string&amp; what_arg );
}}
{{dcl | num=2 | since=c++11 |
system_error( std::error_code ec, const char* what_arg );
}}
{{dcl | num=3 | since=c++11 |
system_error( int ev, const std::error_category&amp; ecat );
}}
{{dcl | num=4 | since=c++11 |
system_error( int ev, const std::error_category&amp; ecat,
              const std::string&amp; what_arg);
}}
{{dcl | num=4 | since=c++11 |
system_error( int ev, const std::error_category&amp; ecat,
              const char* what_arg);
}}
{{dcl end}}

Constructs new system error object.

@1@ Constructs with error code {{tt|ec}}
@2@ Constructs with error code {{tt|ec}} and explanation string {{tt|what_arg}}. The string returned by {{lc|what()}} is guaranteed to contain {{tt|what_arg}}.
@3@ Constructs with underlying error code {{tt|ev}} and associated error category {{tt|ecat}}.
@4@ Constructs with underlying error code {{tt|ev}}, associated error category {{tt|ecat}} and explanatory string {{tt|what_arg}}. The string returned by {{lc|what()}} is guaranteed to contain {{tt|what_arg}}.

===Parameters===
{{par begin}}
{{par | ec | error code}}
{{par | ev | error code in base encoding}}
{{par | ecat | the category of error}}
{{par | what_arg | explanatory string}}
{{par end}}

===Example===
{{example
 | Demonstrates how to create a system_error exception from a errno value 
 | code=
#include &lt;iostream&gt;
#include &lt;system_error&gt;

int main()
{
    try
    {
        throw std::system_error(EDOM, std::generic_category());
    }
    catch (const std::system_error&amp; error)
    {
        std::cout &lt;&lt; &quot;Error: &quot; &lt;&lt; error.code()
                  &lt;&lt; &quot; - &quot; &lt;&lt; error.code().message() &lt;&lt; '\n';
    }
}
|p=true
 | output=
Error: generic:33 - Numerical argument out of domain
}}

[[de:cpp/error/system error/system error]]
[[es:cpp/error/system error/system error]]
[[fr:cpp/error/system error/system error]]
[[it:cpp/error/system error/system error]]
[[ja:cpp/error/system error/system error]]
[[pt:cpp/error/system error/system error]]
[[ru:cpp/error/system error/system error]]
[[zh:cpp/error/system error/system error]]</text>
      <sha1>4vt9sgnpcjw2zpjzmaibkxc6bsbzipw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/system error/what</title>
    <ns>0</ns>
    <id>8972</id>
    <revision>
      <id>91355</id>
      <parentid>63320</parentid>
      <timestamp>2017-03-31T19:41:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="687">{{cpp/error/system_error/title|what}}
{{cpp/error/system_error/navbar}}
{{ddcl | since=c++11 |
virtual const char* what() const;
}}

Returns the explanatory string.

===Parameters===
(none)

===Return value===
Pointer to a null-terminated string with explanatory information. 

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/system_error/dsc code}}
{{dsc end}}

[[de:cpp/error/system error/what]]
[[es:cpp/error/system error/what]]
[[fr:cpp/error/system error/what]]
[[it:cpp/error/system error/what]]
[[ja:cpp/error/system error/what]]
[[pt:cpp/error/system error/what]]
[[ru:cpp/error/system error/what]]
[[zh:cpp/error/system error/what]]</text>
      <sha1>prpz50pyi8toym3je2gfvzooda4i4q6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/terminate</title>
    <ns>0</ns>
    <id>5556</id>
    <revision>
      <id>91384</id>
      <parentid>88700</parentid>
      <timestamp>2017-03-31T19:42:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3153">{{cpp/title|terminate}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl rev begin}}
{{dcl | until=c++11 |
void terminate();
}}
{{dcl | since=c++11 |
[[noreturn]] void terminate();
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::terminate()}} is called by the C++ runtime when exception handling fails for any of the following reasons:

@1@ an [[cpp/language/throw|exception is thrown]] and not caught (it is implementation-defined whether any stack unwinding is done in this case)

@2@ an exception is thrown during exception handling (e.g. from a destructor of some local object, or from a function that had to be called during exception handling)

@3@ the constructor or the destructor of a static or thread-local object throws an exception

@4@ a function registered with {{lc|std::atexit}} or {{lc|std::at_quick_exit}} throws an exception

@5@ a [[cpp/language/noexcept_spec|noexcept specification]] is violated (it is implementation-defined whether any stack unwinding is done in this case)

{{rev begin}}
{{rev|until=c++17|
@6@ a [[cpp/language/except_spec|dynamic exception specification]] is violated and the default handler for {{lc|std::unexpected}} is executed

@7@ a non-default handler for {{lc|std::unexpected}} throws an exception that violates the previously violated dynamic exception specification, if the specification does not include {{lc|std::bad_exception}}
}}
{{rev end}}

@8@ {{c|std::nested_exception::rethrow_nested}} is called for an object that isn't holding a captured exception

@9@ an exception is thrown from the initial function of {{lc|std::thread}}

@10@ a joinable {{lc|std::thread}} is destroyed or assigned to

{{rev begin}}
{{rev|since=c++17|
@11@ a function invoked by a [[cpp/algorithm|parallel algorithm]] exits via an uncaught exception and the [[cpp/algorithm/execution_policy_tag_t|execution policy]] specifies termination.
}}
{{rev end}}

{{tt|std::terminate()}} may also be called directly from the program.


In any case, {{tt|std::terminate}} calls the currently installed {{lc|std::terminate_handler}}. The default {{lc|std::terminate_handler}} calls {{lc|std::abort}}.

{{rev begin}}
{{rev|until=c++11|
If a destructor reset the terminate handler during stack unwinding and the unwinding later led to {{tt|terminate}} being called, the handler that was installed at the end of the throw expression is the one that will be called. (note: it was ambiguous whether re-throwing applied the new handlers)
}}
{{rev|since=c++17|
If a destructor reset the terminate handler during stack unwinding, it is unspecified which handler is called if the unwinding later led to {{tt|terminate}} being called.
}}
{{rev end}}

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc terminate_handler}}
{{dsc end}}

[[de:cpp/error/terminate]]
[[es:cpp/error/terminate]]
[[fr:cpp/error/terminate]]
[[it:cpp/error/terminate]]
[[ja:cpp/error/terminate]]
[[pt:cpp/error/terminate]]
[[ru:cpp/error/terminate]]
[[zh:cpp/error/terminate]]</text>
      <sha1>bisplj9d60earb4dn1rzzwz4aioupuo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/terminate handler</title>
    <ns>0</ns>
    <id>5559</id>
    <revision>
      <id>57414</id>
      <parentid>49531</parentid>
      <timestamp>2013-06-01T05:53:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1120">{{cpp/title|terminate_handler}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl |1=
typedef void (*terminate_handler)();
}}
{{dcl end}}

{{tt|std::terminate_handler}} is the function pointer type (pointer to function that takes no arguments and returns void), which is installed and queried by the functions {{lc|std::set_terminate}} and {{lc|std::get_terminate}} and called by {{lc|std::terminate}}.

The C++ implementation provides a default {{tt|std::terminate_handler}} function, which calls {{c|std::abort()}}. If the null pointer value is installed (by means of {{lc|std::set_terminate}}), the implementation may restore the default handler instead.

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc terminate}}
{{dsc inc | cpp/error/dsc set_terminate}}
{{dsc inc | cpp/error/dsc get_terminate}}
{{dsc end}}

[[de:cpp/error/terminate handler]]
[[es:cpp/error/terminate handler]]
[[fr:cpp/error/terminate handler]]
[[it:cpp/error/terminate handler]]
[[ja:cpp/error/terminate handler]]
[[pt:cpp/error/terminate handler]]
[[ru:cpp/error/terminate handler]]
[[zh:cpp/error/terminate handler]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/throw with nested</title>
    <ns>0</ns>
    <id>5554</id>
    <revision>
      <id>90699</id>
      <parentid>81567</parentid>
      <timestamp>2017-03-07T23:21:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2855 (decay), not revboxing</comment>
      <text xml:space="preserve" bytes="1417">{{cpp/title|throw_with_nested}}
{{cpp/error/navbar}}

{{ddcl | header=exception | since=c++11 |
template&lt; class T &gt;
[[noreturn]] void throw_with_nested( T&amp;&amp; t );
}}

If {{c|std::decay&lt;T&gt;::type}} is a non-final non-union class type that is neither {{lc|std::nested_exception}} nor derived from {{lc|std::nested_exception}}, throws an exception of an unspecified type that is publicly derived from both {{lc|std::nested_exception}} and from {{c|std::decay&lt;T&gt;::type}}, and constructed from {{c|std::forward&lt;T&gt;(t)}}. The default constructor of the {{tt|nested_exception}} base class calls {{lc|std::current_exception}}, capturing the currently handled exception object, if any, in a {{lc|std::exception_ptr}}. 

Otherwise, throws {{c|std::forward&lt;T&gt;(t)}}.

Requires that {{c|std::decay&lt;T&gt;::type}} is {{concept|CopyConstructible}}

===Parameters===
{{par begin}}
{{par | t | the exception object to throw}}
{{par end}}

===Return value===
(none)

===Example===
{{include| cpp/error/example_nested_exception}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc nested_exception}}
{{dsc inc | cpp/error/dsc rethrow_if_nested}}
{{dsc end}}

[[de:cpp/error/throw with nested]]
[[es:cpp/error/throw with nested]]
[[fr:cpp/error/throw with nested]]
[[it:cpp/error/throw with nested]]
[[ja:cpp/error/throw with nested]]
[[pt:cpp/error/throw with nested]]
[[ru:cpp/error/throw with nested]]
[[zh:cpp/error/throw with nested]]</text>
      <sha1>8hz5y0go2q4233xpq1fviml1lful0ug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/tx exception</title>
    <ns>0</ns>
    <id>15516</id>
    <revision>
      <id>85818</id>
      <timestamp>2016-05-18T18:50:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1679">{{cpp/title | tx_exception}}
{{cpp/error/navbar}}
{{ddcl | header=stdexcept |notes={{mark since tm ts}}|
template&lt; class T &gt;
class tx_exception : public std::runtime_error;
}}

Defines an exception type that can be used to cancel and roll back an atomic transaction initiated by the keyword {{ltt|cpp/language/transactional_memory|atomic_cancel}}

If {{tt|T}} is not {{concept|TriviallyCopyable}}, the program that specializes {{tt|std::tx_exception&lt;T&gt;}} is ill-formed.

===Member functions===
{{member | {{small|std::tx_exception::}}tx_exception | 2=
{{dcl begin}}
{{dcl | num=1 |
explicit tx_exception( T value ) transaction_safe;
}}
{{dcl | num=2 |
tx_exception( T value, const std::string&amp; what_arg ) transaction_safe;
}}
{{dcl | num=3 | 
tx_exception( T value, const char* what_arg ) transaction_safe;
}}
{{dcl end}}

Constructs the exception object with {{tt|what_arg}} as explanatory string that can be accessed through {{lc|what()}} and {{tt|value}} as the object that can be accessed through {{lc|get()}}.

===Parameters===
{{par begin}}
{{par | value | payload object}}
{{par | what_arg | explanatory string}}
{{par end}}

===Exceptions===
(none)
}}

{{member | {{small|std::tx_exception::}}get| 2=
{{dcl begin}}
{{dcl |
T get() const transaction_safe;
}}
{{dcl end}}

Returns the payload object object held by the exception object.

===Exceptions===
(none)
}}
{{cpp/error/runtime_error/inherit}}
{{cpp/error/exception/inherit}}

[[de:cpp/error/tx_exception]]
[[es:cpp/error/tx_exception]]
[[fr:cpp/error/tx_exception]]
[[it:cpp/error/tx_exception]]
[[ja:cpp/error/tx_exception]]
[[pt:cpp/error/tx_exception]]
[[ru:cpp/error/tx_exception]]
[[zh:cpp/error/tx_exception]]</text>
      <sha1>m7bjy8dm0mt4wc916455d17trehtqnb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/uncaught exception</title>
    <ns>0</ns>
    <id>3512</id>
    <revision>
      <id>91903</id>
      <parentid>86147</parentid>
      <timestamp>2017-03-31T20:01:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3250">{{cpp/title|uncaught_exception|uncaught_exceptions}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl | num = 1 | notes={{mark|deprecated in C++17}} |
bool uncaught_exception();
}}
{{dcl | num = 2 | notes={{mark since c++17}} |
int uncaught_exceptions();
}}
{{dcl end}}

@1@ Detects if the current thread has a live exception object, that is, an exception has been thrown or rethrown and not yet entered a matching catch clause, {{lc|std::terminate}} or {{lc|std::unexpected}}. In other words, {{tt|std::uncaught_exception}} detects if stack unwinding is currently in progress.
@2@ Detects how many exceptions in the current thread have been thrown or rethrown and not yet entered their matching catch clauses. 

Sometimes it's safe to throw an exception even while {{c|1=std::uncaught_exception() == true}}. For example, if stack unwinding causes a stack-allocated object to be destructed, the destructor for that object could run code that throws an exception as long as the exception is caught by some catch block before escaping the destructor.

===Parameters===
(none)

===Return value===
@1@ {{c|true}} if stack unwinding is currently in progress in this thread.
@2@ The number of uncaught exception objects in the current thread.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Notes===
An example where int-returning {{tt|uncaught_exceptions}} is used is the [http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html boost.log] library: the expression {{c|BOOST_LOG(logger) &lt;&lt; foo();}} first creates a guard object and records the number of uncaught exceptions in its constructor. The output is performed by the guard object's destructor unless foo() throws (in which case the number of uncaught exceptions in the destructor is greater than what the constructor observed)

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;exception&gt;
#include &lt;stdexcept&gt;

struct Foo {
    ~Foo() {
        if (std::uncaught_exception()) {
            std::cout &lt;&lt; &quot;~Foo() called during stack unwinding\n&quot;;
        } else {
            std::cout &lt;&lt; &quot;~Foo() called normally\n&quot;;
        }
    }
};
int main()
{
    Foo f;
    try {
        Foo f;
        std::cout &lt;&lt; &quot;Exception thrown\n&quot;;
        throw std::runtime_error(&quot;test exception&quot;);
    } catch (const std::exception&amp; e) {
        std::cout &lt;&lt; &quot;Exception caught: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
Exception thrown
~Foo() called during stack unwinding
Exception caught: test exception
~Foo() called normally
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc terminate}}
{{dsc inc | cpp/error/dsc exception_ptr}}
{{dsc inc | cpp/error/dsc current_exception}}
{{dsc end}}

===External links===
*[http://www.gotw.ca/gotw/047.htm GOTW issue 47: Uncaught Exceptions]
*[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4152.pdf Rationale for {{lc|std::uncaught_exceptions}}]

[[de:cpp/error/uncaught exception]]
[[es:cpp/error/uncaught exception]]
[[fr:cpp/error/uncaught exception]]
[[it:cpp/error/uncaught exception]]
[[ja:cpp/error/uncaught exception]]
[[pt:cpp/error/uncaught exception]]
[[ru:cpp/error/uncaught exception]]
[[zh:cpp/error/uncaught exception]]</text>
      <sha1>jsko4joqw6ssjc35ha263nn03fja73f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/underflow error</title>
    <ns>0</ns>
    <id>2083</id>
    <revision>
      <id>70818</id>
      <parentid>64344</parentid>
      <timestamp>2014-05-30T18:59:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>usage note</comment>
      <text xml:space="preserve" bytes="1265">{{cpp/title | underflow_error}}
{{cpp/error/underflow_error/navbar}}
{{ddcl | header=stdexcept |
class underflow_error;
}}

Defines a type of object to be thrown as exception. It may be used to report arithmetic underflow errors (that is, situations where the result of a computation is a subnormal floating-point value)

The standard library components do not throw this exception (mathematical functions report underflow errors as specified in {{lc|math_errhandling}}). Third-party libraries, however, use this. For example, [http://www.boost.org/doc/libs/1_55_0/libs/math/doc/html/math_toolkit/error_handling.html boost.math] throws {{tt|std::underflow_error}} if {{tt|boost::math::policies::throw_on_error}} is enabled (the default setting).

{{inheritance diagram/std-underflow_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/error/exception/dsc constructor|underflow_error}}
{{dsc end}}

{{include|cpp/error/exception/constructor|underflow_error}}

{{cpp/error/exception/inherit}}

[[de:cpp/error/underflow error]]
[[es:cpp/error/underflow error]]
[[fr:cpp/error/underflow error]]
[[it:cpp/error/underflow error]]
[[ja:cpp/error/underflow error]]
[[pt:cpp/error/underflow error]]
[[ru:cpp/error/underflow error]]
[[zh:cpp/error/underflow error]]</text>
      <sha1>c9cgy7aairkqtu3mi8zo6wutkmzeej5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/underflow error/underflow error</title>
    <ns>0</ns>
    <id>4506</id>
    <redirect title="cpp/error/underflow error" />
    <revision>
      <id>47835</id>
      <parentid>42022</parentid>
      <timestamp>2013-05-16T22:28:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/underflow error]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/error/underflow_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/unexpected</title>
    <ns>0</ns>
    <id>5570</id>
    <revision>
      <id>88686</id>
      <parentid>81497</parentid>
      <timestamp>2016-12-06T17:41:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0003r5 (until c++17)</comment>
      <text xml:space="preserve" bytes="1780">{{cpp/title|unexpected}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl rev begin}}
{{dcl | until=c++11 |
void unexpected();
}}
{{dcl | notes={{mark|since c++11, deprecated in C++11}} | until=c++17 |
[[noreturn]] void unexpected();
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::unexpected()}} is called by the C++ runtime when a [[cpp/language/except_spec|dynamic exception specification]] is violated: an exception is thrown from a function whose exception specification forbids exceptions of this type.

{{tt|std::unexpected()}} may also be called directly from the program.

In either case, {{tt|std::unexpected}} calls the currently installed {{lc|std::unexpected_handler}}. The default {{lc|std::unexpected_handler}} calls {{lc|std::terminate}}.

{{rev begin}}
{{rev|until=c++11|
If a destructor reset the unexpected handler during stack unwinding and the unwinding later led to {{tt|unexpected}} being called, the handler that was installed at the end of the throw expression is the one that will be called. (note: it was ambiguous whether re-throwing applied the new handlers)
}}
{{rev|since=c++17|
If a destructor reset the unexpected handler during stack unwinding, it is unspecified which handler is called if the unwinding later led to {{tt|unexpected}} being called.
}}
{{rev end}}


===Parameters===
(none)

===Return value===
(none)

===Exceptions===
Throw any exception thrown by the currently installed {{lc|std::unexpected_handler}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc unexpected_handler}}
{{dsc end}}

[[de:cpp/error/unexpected]]
[[es:cpp/error/unexpected]]
[[fr:cpp/error/unexpected]]
[[it:cpp/error/unexpected]]
[[ja:cpp/error/unexpected]]
[[pt:cpp/error/unexpected]]
[[ru:cpp/error/unexpected]]
[[zh:cpp/error/unexpected]]</text>
      <sha1>j5ziuiusdwt9w6t75a4kpash2twhtsh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/error/unexpected handler</title>
    <ns>0</ns>
    <id>5571</id>
    <revision>
      <id>88689</id>
      <parentid>80032</parentid>
      <timestamp>2016-12-06T17:45:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0003r5 (until c++17)</comment>
      <text xml:space="preserve" bytes="2022">{{cpp/title|unexpected_handler}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | exception}}
{{dcl | notes={{mark| deprecated since C++11}} |until=c++17|
typedef void (*unexpected_handler)();
}}
{{dcl end}}

{{tt|std::unexpected_handler}} is the function pointer type (pointer to function that takes no arguments and returns void), which is installed and queried by the functions {{lc|std::set_unexpected}} and {{lc|std::get_unexpected}} and called by {{lc|std::unexpected}}.

The C++ implementation provides a default {{tt|std::unexpected_handler}} function, which calls {{c|std::terminate()}}. If the null pointer value is installed (by means of {{lc|std::set_unexpected}}), the implementation may restore the default handler instead.

A user-defined {{tt|std::unexpected_handler}} is expected to either terminate the program or throw an exception. If it throws an exception, one of the following three situations may be encountered:

1) the exception thrown by {{tt|std::unexpected_handler}} satisfies the dynamic exception specification that was violated earlier. The new exception is allowed to escape the function and stack unwinding continues.

2) the exception thrown by {{tt|std::unexpected_handler}} still violates the exception specification:

2a) however, the exception specification allows {{lc|std::bad_exception}}: the thrown exception object is destroyed, and {{lc|std::bad_exception}} is constructed by the C++ runtime and thrown instead.

2b) the exception specification does not allow {{lc|std::bad_exception}}: {{c|std::terminate()}} is called.

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc unexpected}}
{{dsc inc | cpp/error/dsc set_unexpected}}
{{dsc inc | cpp/error/dsc get_unexpected}}
{{dsc end}}

[[de:cpp/error/unexpected handler]]
[[es:cpp/error/unexpected handler]]
[[fr:cpp/error/unexpected handler]]
[[it:cpp/error/unexpected handler]]
[[ja:cpp/error/unexpected handler]]
[[pt:cpp/error/unexpected handler]]
[[ru:cpp/error/unexpected handler]]
[[zh:cpp/error/unexpected handler]]</text>
      <sha1>fpisb2yc7tzc10dedg4bgj7syn4trg8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental</title>
    <ns>0</ns>
    <id>13460</id>
    <revision>
      <id>91304</id>
      <parentid>91303</parentid>
      <timestamp>2017-03-31T15:41:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>coroutines have a WI. also bumping reflectino above numerics since it made more progress</comment>
      <text xml:space="preserve" bytes="6319">{{title|Experimental C++ Features}}
{{cpp/experimental/navbar}}

The C++ standards committee publishes experimental C++ language and library extensions for future standardization.

Note: until 2012, these publications used the TR (technical report) format. Since 2012 ISO procedure changed to use the TS (technical specification) format.

{|table class=wikitable
|-
!ISO number||Name||Status||links
|-
| ISO/IEC TR 18015:2006
| Technical Report on C++ Performance
| Published 2006 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43351 ISO store])
Draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf TR18015] (2006-02-15)&lt;br&gt;
| {{tt|std::hardware}}
|-
| ISO/IEC TR 19768:2007
| Technical Report on C++ Library Extensions
| Published 2007-11-15 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43289 ISO store])
Draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1745.pdf n1745] (2005-01-17)&lt;br&gt;
ISO 29124 split off, the rest merged into C++11
|
|-
| ISO/IEC 29124:2010
| Extensions to the C++ Library to support mathematical special functions
| Published 2010-09-03 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=50511 ISO Store])
Final draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3060.pdf n3060] (2010-03-06).&lt;br&gt;
Merged into C++17
| {{ltt|cpp/experimental/special_math|special math}}
|-
| ISO/IEC TR 24733:2011
| Extensions for the programming language C++ to support decimal floating-point arithmetic
| Published 2011-10-25 ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=38843 ISO Store])
Draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf n2849] (2009-03-06)&lt;br&gt;
May be superseded by a future Decimal TS or merged into C++ by [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3871.html n3871]
| {{tt|decimal32}}&lt;br&gt;{{tt|decimal64}}&lt;br&gt;{{tt|decimal128}}
|-
| ISO/IEC TS 18822:2015
| C++ File System Technical Specification
| Published 2015-06-18. ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=63483 ISO store]). Final draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf n4100] (2014-07-04).&lt;br&gt;
Merged into C++17.
| {{ltt|cpp/experimental/fs|filesystem}}
|-
| ISO/IEC TS 19570:2015
| C++ Extensions for Parallelism
| Published 2015-06-24. ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65241 ISO Store]). Final draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4507.pdf n4507] (2015-05-05).&lt;br&gt;
Merged into C++17.
| {{ltt|cpp/experimental/parallelism}}
|-
| ISO/IEC TS 19841:2015
| Transactional Memory TS
| Published 2015-09-16, ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=66343 ISO Store]). Final draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf n4514] (2015-05-08)
| [[cpp/language/transactional_memory|transactional memory]]
|-
| ISO/IEC TS 19568:2015
| C++ Extensions for Library Fundamentals
| Published 2015-09-30, ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65238 ISO Store]). Final draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html n4480] (2015-04-07).&lt;br&gt;
Merged into C++17 except for invocation traits
|{{ltt|cpp/experimental/lib_extensions|library extensions}}
|-
| ISO/IEC TS 19217:2015
| C++ Extensions for Concepts
| Published 2015-11-13. ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64031 ISO Store]). Final draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4553.pdf n4553] (2015-10-02) Current draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4641.pdf n4641] (2017-02-05)
|[[cpp/language/constraints|constraints and concepts]]
|-
| ISO/IEC TS 19571:2016
| C++ Extensions for Concurrency
| Published 2016-01-19. ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65242 ISO Store]) Final draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0159r0.html p0159r0] (2015-10-22)
| {{ltt|cpp/experimental/concurrency}}
|-
| ISO/IEC TS 19568:2017
| C++ Extensions for Library Fundamentals, Version 2
| Published 2017-03-30. ([https://www.iso.org/standard/70587.html ISO Store]) Draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4617.pdf n4617] (2016-11-28)
| {{ltt|cpp/experimental/lib_extensions_2|library extensions 2}}
|-
| ISO/IEC DTS 21425:xxxx
| Ranges TS
| PDTS, Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4651.pdf n4651] (2017-03-15)
| {{ltt|cpp/experimental/ranges|ranges}}
|-
| ISO/IEC DTS 19216:xxxx
| Networking TS
| PDTS, Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4656.pdf n4656] (2017-03-17)
|
|-
| ISO/IEC DTS 22277:xxxx 
| Coroutines TS
| PDTS. Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4649.pdf n4649] (2017-03-03)
|
|-
| ISO/IEC DTS 21544:xxxx
| Modules TS
| In development, Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4647.pdf n4647] (2017-03-19)
| 
|-
|
| Reflection
| Early development. Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0194r2.html p0194r2] (2016-10-15) with rationale in [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0385r2.pdf p0385r2] (2017-02-06). Alternative: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0590r0.pdf p0590r0] (2017-02-05)
|
|-
|
| Numerics TS
| Early development. Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0101r0.html p0101] (2015-09-27)
| 
|-
| ISO/IEC DTS 19571:xxxx
| Concurrency TS part 2
| Early development
| 
|-
| ISO/IEC DTS 19570:xxxx
| Parallelism TS part 2
| Early development. Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4578.html n4578] (2016-02-22)
| 
|-
| ISO/IEC DTS 19841:xxxx
| Transactional Memory TS part 2
| Early development
| 
|-
| 
| Graphics TS
| Early development. Draft [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0267r4.pdf p0267r4] (2017-03-20)
|
|-
| ISO/IEC DTS 19569:xxxx
| Array Extensions TS
| Withdrawn. Abandoned draft: [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3820.html n3820] (2013-10-10)
|
|}

===See also===
{{dsc begin}}
{{dsc see c | c/experimental | Experimental C libraries}}
{{dsc end}}</text>
      <sha1>a5ydisla8t0l30eujbzne9ylg8b4emm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any</title>
    <ns>0</ns>
    <id>13657</id>
    <revision>
      <id>84146</id>
      <parentid>82421</parentid>
      <timestamp>2016-03-15T17:01:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on c++17 merge</comment>
      <text xml:space="preserve" bytes="1819">{{cpp/experimental/title|any}}
{{cpp/experimental/any/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  {{ltt|cpp/utility/any|std::any}} {{mark since c++17}} }}
{{ddcl | header=experimental/any | since=libfund_ts |
class any;
}}

The class {{tt|any}} describes a type-safe container for single values of any type.

@1@ An object of class {{tt|any}} stores an instance of any type that satisfies the constructor requirements or is empty, and this is referred to as the ''state'' of the class {{tt|any}} object. The stored instance is called the contained object. Two states are equivalent if they are either both empty or if both are not empty and if the contained objects are equivalent.

@2@ The non-member {{tt|any_cast}} functions provide type-safe access to the contained object.

Implementations are encouraged to avoid dynamic allocations for small objects, but such an optimization may only be applied to types that for which {{lc|std::is_nothrow_move_constructible}} returns {{tt|true}}.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc constructor}}
{{dsc inc | cpp/experimental/any/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/any/dsc destructor}}

{{dsc h2 | Modifers}}
{{dsc inc | cpp/experimental/any/dsc clear}}
{{dsc inc | cpp/experimental/any/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/experimental/any/dsc empty}}
{{dsc inc | cpp/experimental/any/dsc type}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc swap2}}
{{dsc inc | cpp/experimental/any/dsc any_cast}}
{{dsc end}}


===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc bad_any_cast}}
{{dsc end}}</text>
      <sha1>r3pzybtvfop1yvkqvz5fbq8tnuzc6kh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/any</title>
    <ns>0</ns>
    <id>13659</id>
    <revision>
      <id>91552</id>
      <parentid>82419</parentid>
      <timestamp>2017-03-31T19:49:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1615">{{cpp/experimental/any/title|any}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
any();
}}
{{dcl | num=2 | since=libfund_ts |
any( const any&amp; other );
}}
{{dcl | num=3 | since=libfund_ts |
any( any&amp;&amp; other );
}}
{{dcl | num=4 | since=libfund_ts |
template&lt;typename ValueType&gt;
    any( ValueType&amp;&amp; value );
}}
{{dcl end}}

Constructs a new {{tt|any}} object.

@1@ Constructs an empty object.

@2-3@ Copies {{v|2}} or moves {{v|3}} content of {{tt|other}} into a new instance, so that any content is equivalent in both type and value to those of {{tt|other}} prior to the constructor call, or empty if {{tt|other}} is empty.

@4@ Constructs an object with initial content an object of type {{c|std::decay_t&lt;ValueType&gt;}}, [[cpp/language/direct initialization|direct-initialized]] from {{c|std::forward&lt;ValueType&gt;(value)}}. If {{c|1=std::is_copy_constructible&lt;std::decay_t&lt;ValueType&gt;&gt;::value}} is {{c|false}}, the program is ill-formed. {{cpp/enable if|{{c|std::decay_t&lt;ValueType&gt;}} is not the same type as {{c|any}}}}.

===Template parameters===
{{par begin}}
{{par | ValueType | contained value type}}
{{par hreq}}
{{par req concept | std::decay_t&lt;ValueType&gt; | CopyConstructible}}
{{par end}}

===Parameters===
{{par begin}}
{{par | other | another {{tt|any}} object to copy or move from}}
{{par | value | value to initialize the contained value with}}
{{par end}}

===Exceptions===
@1,3@ {{unreviewed noexcept}}
@2,4@ Throws any exception thrown by the constructor of the contained type.
===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>24wvk59boc4rty5r2tb6ejr16qyn565</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/any cast</title>
    <ns>0</ns>
    <id>13665</id>
    <revision>
      <id>91825</id>
      <parentid>83412</parentid>
      <timestamp>2017-03-31T19:58:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1525">{{cpp/title|n=experimental::|any_cast}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | num=1 |
template&lt;class ValueType&gt;
    ValueType any_cast(const any&amp; operand);
}}
{{dcl | since=libfund_ts | num=2 |
template&lt;class ValueType&gt;
    ValueType any_cast(any&amp; operand);
}}
{{dcl | since=libfund_ts | num=3 |
template&lt;class ValueType&gt;
    ValueType any_cast(any&amp;&amp; operand);
}}
{{dcl | since=libfund_ts | num=4 |
template&lt;class ValueType&gt;
    const ValueType* any_cast(const any* operand);
}}
{{dcl | since=libfund_ts | num=5 |
template&lt;class ValueType&gt;
    ValueType* any_cast(any* operand);
}}
{{dcl end}}

Performs type-safe access to the contained object.

For {{v|1-3}}, the program is ill-formed if {{tt|ValueType}} is not a reference and {{c|std::is_copy_constructible&lt;ValueType&gt;::value}} is {{c|false}}.

===Parameters===
{{par begin}}
{{par | operand | target {{tt|any}} object}}
{{par end}} 

===Return value===
@1@ Returns {{c|*any_cast&lt;std::add_const_t&lt;std::remove_reference_t&lt;ValueType&gt;&gt;&gt;(&amp;operand)}}.
@2-3@ Returns {{c|*any_cast&lt;std::remove_reference_t&lt;ValueType&gt;&gt;(&amp;operand)}}.
@4-5@ If {{tt|operand}} is not a null pointer, and the {{tt|typeid}} of the requested {{tt|ValueType}} matches that of the contents of {{tt|operand}}, a pointer to the value contained by operand, otherwise a null pointer.

===Exceptions===
@1-3@ Throws {{tt|bad_any_cast}} if the {{tt|typeid}} of the requested {{tt|ValueType}} does not match that of the contents of {{tt|operand}}.
@4-5@ {{unreviewed noexcept}}</text>
      <sha1>lu2i3pljmrejyse8q7k5mtyuzoatwpu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/bad any cast</title>
    <ns>0</ns>
    <id>14660</id>
    <revision>
      <id>82416</id>
      <timestamp>2015-12-16T11:54:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="322">{{cpp/experimental/title|bad_any_cast}}
{{cpp/experimental/any/navbar}}
{{ddcl | header=experimental/any | since=libfund_ts |
class bad_any_cast : public std::bad_cast;
}}

Defines a type of object to be thrown by the value-returning forms of {{lc|std::experimental::any_cast}} on failure.

{{cpp/error/exception/inherit}}</text>
      <sha1>hts5ji1p8yavba18to4624ih9bpxfz0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/clear</title>
    <ns>0</ns>
    <id>13667</id>
    <revision>
      <id>91636</id>
      <parentid>71493</parentid>
      <timestamp>2017-03-31T19:52:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="278">{{cpp/experimental/any/title|clear}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
void clear();
}}
{{dcl end}}

If not empty, destroys the contained object.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>mxd659hf2uklkwoquwxk8x5l8ahz5wz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/empty</title>
    <ns>0</ns>
    <id>13662</id>
    <revision>
      <id>91612</id>
      <parentid>71453</parentid>
      <timestamp>2017-03-31T19:51:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="332">{{cpp/experimental/any/title|empty}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
bool empty() const;
}}
{{dcl end}}

Checks whether the object contains a value.

===Parameters===
(none)

===Return value===
{{c|true}} if instance is empty, otherwise {{c|false}}.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>8bj8orj3sisx3kzryaudv5jaauew2wp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/operator=</title>
    <ns>0</ns>
    <id>13660</id>
    <revision>
      <id>91318</id>
      <parentid>82420</parentid>
      <timestamp>2017-03-31T19:40:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1578">{{cpp/experimental/any/title|operator{{=}}}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | num=1 | 1=
any&amp; operator=( const any&amp; rhs );
}}
{{dcl | since=libfund_ts | num=2 | 1=
any&amp; operator=( any&amp;&amp; rhs );
}}
{{dcl | since=libfund_ts | num=3 | 1=
template&lt;typename ValueType&gt;
    any&amp; operator=( ValueType&amp;&amp; rhs );
}}
{{dcl end}}

Assigns contents to the contained value. 

@1@ Assigns by copying the state of {{tt|rhs}}, as if by {{c|any(rhs).swap(*this)}}.
@2@ Assigns by moving the state of {{tt|rhs}}, as if by {{c|any(std::move(rhs)).swap(*this)}}. {{tt|rhs}} is left in a valid but unspecified state after the assignment.
@3@ Assigns the type and value of {{tt|rhs}}, as if by {{c|any(std::forward&lt;ValueType&gt;(rhs)).swap(*this)}}. If {{c|1=std::is_copy_constructible&lt;std::decay_t&lt;ValueType&gt;&gt;::value}} is {{c|false}}, the program is ill-formed. {{cpp/enable if|{{c|std::decay_t&lt;ValueType&gt;}} is not the same type as {{c|any}}}}.

===Template parameters===
{{par begin}}
{{par | ValueType | contained value type}}
{{par hreq}}
{{par req concept | std::decay_t&lt;ValueType&gt; | CopyConstructible}}
{{par end}}

===Parameters===
{{par begin}}
{{par | rhs | object whose contained value to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@2@ {{unreviewed noexcept}}

@1,3@ Throws {{lc|bad_alloc}} or any exception thrown by the constructor of the contained type. If an exception is thrown, there are no effects (strong exception guarantee).

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc constructor}}
{{dsc end}}</text>
      <sha1>myaovqh34tsngqco2duhfkawzcsupkc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/swap</title>
    <ns>0</ns>
    <id>13661</id>
    <revision>
      <id>91351</id>
      <parentid>71452</parentid>
      <timestamp>2017-03-31T19:41:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="343">{{cpp/experimental/any/title|swap}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
void swap(any&amp; other);
}}
{{dcl end}}

Swaps the content of two {{tt|any}} objects.

===Parameters===
{{par begin}}
{{par | other | object to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>grms6fqjt47o0rahk71h3a6kdl6349f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/swap2</title>
    <ns>0</ns>
    <id>13664</id>
    <revision>
      <id>91468</id>
      <parentid>82422</parentid>
      <timestamp>2017-03-31T19:46:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="498">{{cpp/title|n=experimental::|swap{{small|(std::experimental::any)}}}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
void swap(any&amp; lhs, any&amp; rhs);
}}
{{dcl end}}

Swaps the content of two {{tt|any}} objects. Calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | objects to swap}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc swap}}
{{dsc end}}</text>
      <sha1>rbv57vahh6vn6oiydo5w05mecn7bt2a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/type</title>
    <ns>0</ns>
    <id>13663</id>
    <revision>
      <id>91723</id>
      <parentid>71496</parentid>
      <timestamp>2017-03-31T19:55:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="367">{{cpp/experimental/any/title|type}}
{{cpp/experimental/any/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
const type_info&amp; type() const;
}}
{{dcl end}}

Queries the contained type.

===Parameters===
(none)

===Return value===
The {{tt|typeid}} of the contained value if instance is non-empty, otherwise {{c|typeid(void)}}.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>1m04xpljrdk1mkaug873eeq60za6386</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/any/~any</title>
    <ns>0</ns>
    <id>14661</id>
    <revision>
      <id>82417</id>
      <timestamp>2015-12-16T11:56:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="269">{{cpp/experimental/any/title|~any}}
{{cpp/experimental/any/navbar}}
{{ddcl | since=libfund_ts |
~any();
}}
Destroys the contained object, if any, as if by a call to {{tt|clear()}}.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc clear}}
{{dsc end}}</text>
      <sha1>s8ww5qpzmjhlbuxsseh6wjvcwc20p3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/apply</title>
    <ns>0</ns>
    <id>13976</id>
    <revision>
      <id>85708</id>
      <parentid>84479</parentid>
      <timestamp>2016-05-05T15:11:24Z</timestamp>
      <contributor>
        <ip>77.122.168.157</ip>
      </contributor>
      <text xml:space="preserve" bytes="1569">{{cpp/experimental/title|apply}}
{{cpp/experimental/lib_extensions/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  {{ltt|cpp/utility/apply|std::apply}} {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/tuple }}
{{dcl | since=libfund_ts |
template &lt;class F, class Tuple&gt;
constexpr decltype(auto) apply(F&amp;&amp; f, Tuple&amp;&amp; t);
}}
{{dcl end}}
Invoke the {{concept|Callable}} object {{tt|f}} with a tuple of arguments.

===Parameters===
{{par begin}}
{{par | f | {{concept|Callable}} object to be invoked}}
{{par | t | tuple whose elements to be used as arguments to {{tt|f}} }}
{{par end}}

===Return value===
What returned by {{tt|f}}.

===Possible implementation===
{{eq fun|1=
namespace detail {
template &lt;class F, class Tuple, std::size_t... I&gt;
constexpr decltype(auto) apply_impl( F&amp;&amp; f, Tuple&amp;&amp; t, std::index_sequence&lt;I...&gt; )
{
  return std::invoke(std::forward&lt;F&gt;(f), std::get&lt;I&gt;(std::forward&lt;Tuple&gt;(t))...);
  // Note: std::invoke is a C++17 feature
}
} // namespace detail

template &lt;class F, class Tuple&gt;
constexpr decltype(auto) apply(F&amp;&amp; f, Tuple&amp;&amp; t)
{
    return detail::apply_impl(std::forward&lt;F&gt;(f), std::forward&lt;Tuple&gt;(t),
        std::make_index_sequence&lt;std::tuple_size_v&lt;std::decay_t&lt;Tuple&gt;&gt;&gt;{});
}
}}

===Example===
{{example
 |
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc end}}</text>
      <sha1>7uzollij4fk8qreffo611i3q1yrjdeh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr</title>
    <ns>0</ns>
    <id>15395</id>
    <revision>
      <id>85366</id>
      <timestamp>2016-04-20T21:21:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1067">{{cpp/experimental/title|atomic_shared_ptr}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl header|experimental/atomic}}
{{dcl | since=concurrency || 1=
template &lt; class T &gt;
class atomic_shared_ptr;
}}
{{dcl end}}

The class template {{tt|atomic_shared_ptr}} provides thread-safe atomic pointer operations over a {{lc|std::shared_ptr}}. It provides a better alternative to [[cpp/memory/shared_ptr/atomic|the non-member {{tt|shared_ptr}} atomic access functions]].

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc constructor}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc operator{{=}}}}

{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc is_lock_free}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc store}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc load}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc operator_shared_ptr}}

{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc exchange}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc compare_exchange}}

{{dsc end}}</text>
      <sha1>3wwu1p3n9rft71evq9x6tb2njwl66yc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/atomic shared ptr</title>
    <ns>0</ns>
    <id>15463</id>
    <revision>
      <id>91427</id>
      <parentid>85516</parentid>
      <timestamp>2017-03-31T19:43:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="775">{{cpp/experimental/atomic_shared_ptr/title|atomic_shared_ptr}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
constexpr atomic_shared_ptr();
}}
{{dcl | num=2 |
constexpr atomic_shared_ptr( shared_ptr&lt;T&gt; desired );
}}
{{dcl | num=3 | 1=
atomic_shared_ptr( const atomic_shared_ptr&amp; ) = delete;
}}
{{dcl end}}

Constructs a new {{tt|atomic_shared_ptr}} object.
@1@ The default constructor initializes the object to an empty state.
@2@ Initializes the underlying {{tt|shared_ptr&lt;T&gt;}} with {{tt|desired}}. The initialization is not atomic.
@3@ Atomic variables are not {{concept|CopyConstructible}}.

===Parameters===
{{par begin}}
{{par | desired | value to initialize with}}
{{par end}}

===Exceptions===
@1-2@ {{unreviewed noexcept}}</text>
      <sha1>qukpd0rwjretq5p0xp805kkfbvs3kni</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/compare exchange</title>
    <ns>0</ns>
    <id>15476</id>
    <revision>
      <id>91490</id>
      <parentid>85579</parentid>
      <timestamp>2017-03-31T19:47:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4761">{{cpp/experimental/atomic_shared_ptr/title|compare_exchange_strong|compare_exchange_weak}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1| 1=
bool compare_exchange_weak( std::shared_ptr&lt;T&gt;&amp; expected, const std::shared_ptr&lt;T&gt;&amp; desired,
                            std::memory_order success,    std::memory_order failure );
}}
{{dcl | num=2| 1=
bool compare_exchange_weak( std::shared_ptr&lt;T&gt;&amp; expected, std::shared_ptr&lt;T&gt;&amp;&amp; desired,
                            std::memory_order success,    std::memory_order failure );
}}
{{dcl | num=3| 1=
bool compare_exchange_weak( std::shared_ptr&lt;T&gt;&amp; expected, const std::shared_ptr&lt;T&gt;&amp; desired,
                            std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | num=4| 1=
bool compare_exchange_weak( std::shared_ptr&lt;T&gt;&amp; expected, std::shared_ptr&lt;T&gt;&amp;&amp; desired,
                            std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | num=5| 1=
bool compare_exchange_strong( std::shared_ptr&lt;T&gt;&amp; expected, const std::shared_ptr&lt;T&gt;&amp; desired,
                              std::memory_order success,    std::memory_order failure );
}}
{{dcl | num=6| 1=
bool compare_exchange_strong( std::shared_ptr&lt;T&gt;&amp; expected, std::shared_ptr&lt;T&gt;&amp;&amp; desired,
                              std::memory_order success,    std::memory_order failure );
}}
{{dcl | num=7| 1=
bool compare_exchange_strong( std::shared_ptr&lt;T&gt;&amp; expected, const std::shared_ptr&lt;T&gt;&amp; desired,
                              std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | num=8| 1=
bool compare_exchange_strong( std::shared_ptr&lt;T&gt;&amp; expected, std::shared_ptr&lt;T&gt;&amp;&amp; desired,
                              std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl end}}

Atomically compares the underlying {{tt|shared_ptr}} in {{tt|*this}} with {{tt|expected}}, and if they are equivalent, replaces the former with {{tt|desired}} (performs read-modify-write operation). Otherwise, loads the actual value stored in {{tt|*this}} into {{tt|expected}} (performs load operation). The replacement is performed as if by the copy or move assignment operator of {{tt|shared_ptr}}, as appropriate.

Two {{tt|shared_ptr}}s are equivalent if and only if they store the same pointer value and share ownership.

The memory models for the read-modify-write and load operations are {{tt|success}} and {{tt|failure}} respectively. For overloads {{v|3-4, 7-8}}, {{tt|order}} is used for both read-modify-write and load operations, except that {{lc|std::memory_order_acquire}} and {{lc|std::memory_order_relaxed}} are used for the load operation if {{c|1=order == std::memory_order_acq_rel}}, or {{c|1=order == std::memory_order_release}} respectively.

The weak versions {{v|1-4}} may fail spuriously.

===Parameters===
{{par begin}}
{{par | expected | reference to the value expected to be found in the atomic object}}
{{par | desired | the value to store in the atomic object if it is as expected}}
{{par | success | the memory synchronization ordering for the read-modify-write operation if the comparison succeeds. All values are permitted. }}
{{par | failure | the memory synchronization ordering for the load operation if the comparison fails. Cannot be {{lc|std::memory_order_release}} or {{lc|std::memory_order_acq_rel}} and cannot specify stronger ordering than {{tt|success}}}}
{{par | order | the memory synchronization ordering for both operations}}
{{par end}}

===Return value===
{{c|true}} if the underlying atomic value was changed, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

=== Remarks ===
{{cpp/experimental/atomic_shared_ptr/atomic remarks}}

If the compare-exchange operation return {{c|true}}, {{tt|expected}} is not accessed after the atomic update step. If it returns {{c|false}}, {{tt|expected}} is updated with the existing value read from the {{tt|atomic_shared_ptr}} object in the attempted atomic update. The {{tt|use_count}} update corresponding to the write to {{tt|expected}} is part of the atomic operation, but the write to {{tt|expected}} itself is not required to be part of the atomic operation.

For overloads {{v|1,3,5,7}}, {{tt|desired}} is not accessed after the atomic update step.

For overloads {{v|2,4,6,8}}, {{tt|desired}} is moved from only if the compare-exchange operation returns {{c|true}}; the moving occurs after the atomic update step.

===Notes===
The weak forms {{v|1-4}} of the functions are allowed to fail spuriously, that is, act as if {{c|*this}} and {{c|expected}} are not equivalent even when they are. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms.


===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>j8p6tyijddl41qcuvib4tl95vqguzd6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/exchange</title>
    <ns>0</ns>
    <id>15475</id>
    <revision>
      <id>91587</id>
      <parentid>85572</parentid>
      <timestamp>2017-03-31T19:50:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="840">{{cpp/experimental/atomic_shared_ptr/title|exchange}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}

{{dcl begin}}
{{dcl | 1=
shared_ptr&lt;T&gt; exchange( shared_ptr&lt;T&gt; desired, std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl end}}

Atomically replaces the underlying {{tt|shared_ptr}} with {{tt|desired}}. The operation is a read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

===Parameters===
{{par begin}}
{{par | desired | value to assign}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value of the atomic variable before the call.

===Remarks===
{{cpp/experimental/atomic_shared_ptr/atomic remarks}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>3n8oug1wbadtgnew6jkiwgdm5s5ztba</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/is lock free</title>
    <ns>0</ns>
    <id>15470</id>
    <revision>
      <id>91370</id>
      <parentid>85559</parentid>
      <timestamp>2017-03-31T19:41:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="541">{{cpp/experimental/atomic_shared_ptr/title|is_lock_free}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl | 1=
bool is_lock_free() const;
}}
{{dcl end}}

Checks whether the atomic operations on all objects of this type are lock-free.

===Parameters===
(none)

===Return value===
{{c|true}} if the atomic operations on the objects of this type are lock-free, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>iut124l9392i3nyjawj9nsculxdkbxt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/load</title>
    <ns>0</ns>
    <id>15473</id>
    <revision>
      <id>91519</id>
      <parentid>85568</parentid>
      <timestamp>2017-03-31T19:48:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1027">{{cpp/experimental/atomic_shared_ptr/title|load}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl | 1=
shared_ptr&lt;T&gt; load( std::memory_order order = std::memory_order_seq_cst ) const;
}}
{{dcl end}}

Atomically loads and returns the current value of the {{tt|atomic_shared_ptr}}. Memory is affected according to the value of {{tt|order}}.

{{tt|order}} must be one of {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_consume}}, {{lc|std::memory_order_acquire}} or {{lc|std::memory_order_seq_cst}}. Otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Remarks===
{{cpp/experimental/atomic_shared_ptr/atomic remarks|readonly=yes}}

===Return value===
The current value of the {{tt|atomic_shared_ptr}}.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc operator_shared_ptr}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>9sx08x5jrxdciz9fcjymrmqfl0fyvs1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/operator shared ptr</title>
    <ns>0</ns>
    <id>15474</id>
    <revision>
      <id>91367</id>
      <parentid>85569</parentid>
      <timestamp>2017-03-31T19:41:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="624">{{cpp/experimental/atomic_shared_ptr/title|operator shared_ptr&lt;T&gt;}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl | 
operator shared_ptr&lt;T&gt;() const;
}}
{{dcl end}}

Atomically loads and returns the current value of the {{tt|atomic_shared_ptr}}. Equivalent to {{c|load()}}.

===Parameters===
(none)

===Return value===
The current value of the {{tt|atomic_shared_ptr}}.

===Remarks===
{{cpp/experimental/atomic_shared_ptr/atomic remarks|readonly=yes}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc load}}
{{dsc end}}</text>
      <sha1>b8rbyddm00ccm2svfvjul4hmux3lmx7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/operator=</title>
    <ns>0</ns>
    <id>15465</id>
    <revision>
      <id>91654</id>
      <parentid>85563</parentid>
      <timestamp>2017-03-31T19:53:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="973">{{cpp/experimental/atomic_shared_ptr/title|operator{{=}}}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
void operator=( shared_ptr&lt;T&gt; desired );
}}
{{dcl | num=2 | 1=
void operator=( const atomic_shared_ptr&amp; ) = delete;
}}
{{dcl end}}

@1@ Atomically assigns a value {{tt|desired}} to the atomic variable. Equivalent to {{c|store(desired)}}.
@2@ Atomic variables are not {{concept|CopyAssignable}}.

===Parameters===
{{par begin}}
{{par | desired | value to assign}}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

===Notes===
Unlike most assignment operators, the assignment operators for {{tt|atomic_shared_ptr}} returns {{c|void}}.

===Remarks===
{{cpp/experimental/atomic_shared_ptr/atomic remarks}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc constructor}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc store}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>rbw0x3bnoijn3oymergimskoja9e1qj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic shared ptr/store</title>
    <ns>0</ns>
    <id>15471</id>
    <revision>
      <id>91520</id>
      <parentid>85565</parentid>
      <timestamp>2017-03-31T19:48:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="995">{{cpp/experimental/atomic_shared_ptr/title|store}}
{{cpp/experimental/concurrency/atomic_shared_ptr/navbar}}
{{dcl begin}}
{{dcl | 1=
void store( shared_ptr&lt;T&gt; desired, std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl end}}

Atomically replaces the current value with {{tt|desired}}. Memory is affected according to the value of {{tt|order}}.

{{tt|order}} must be one of {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_release}} or {{lc|std::memory_order_seq_cst}}. Otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | desired | the {{tt|shared_ptr}} to store into the atomic variable}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
(none)

===Remarks===
{{cpp/experimental/atomic_shared_ptr/atomic remarks}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_shared_ptr/dsc operator{{=}}}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>6h76n1lewk1hv2bqoiamb4afsjn2gu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr</title>
    <ns>0</ns>
    <id>15396</id>
    <revision>
      <id>85367</id>
      <timestamp>2016-04-20T21:22:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="913">{{cpp/experimental/title|atomic_weak_ptr}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl header|experimental/atomic}}
{{dcl | since=concurrency || 1=
template &lt; class T &gt;
class atomic_weak_ptr;
}}
{{dcl end}}

The class template {{tt|atomic_weak_ptr}} provides thread-safe atomic pointer operations over a {{lc|std::weak_ptr}}. 

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc constructor}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc operator{{=}}}}

{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc is_lock_free}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc store}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc load}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc operator_weak_ptr}}

{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc exchange}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc compare_exchange}}

{{dsc end}}</text>
      <sha1>fj0v57j3aib2ciqec82alewevemzwru</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/atomic weak ptr</title>
    <ns>0</ns>
    <id>15477</id>
    <revision>
      <id>91454</id>
      <parentid>85580</parentid>
      <timestamp>2017-03-31T19:45:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="755">{{cpp/experimental/atomic_weak_ptr/title|atomic_weak_ptr}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
constexpr atomic_weak_ptr();
}}
{{dcl | num=2 |
constexpr atomic_weak_ptr( weak_ptr&lt;T&gt; desired );
}}
{{dcl | num=3 | 1=
atomic_weak_ptr( const atomic_weak_ptr&amp; ) = delete;
}}
{{dcl end}}

Constructs a new {{tt|atomic_weak_ptr}} object.
@1@ The default constructor initializes the object to an empty state.
@2@ Initializes the underlying {{tt|weak_ptr&lt;T&gt;}} with {{tt|desired}}. The initialization is not atomic.
@3@ Atomic variables are not {{concept|CopyConstructible}}.

===Parameters===
{{par begin}}
{{par | desired | value to initialize with}}
{{par end}}

===Exceptions===
@1-2@ {{unreviewed noexcept}}</text>
      <sha1>q9noub4ngqq1j1rash3lyjnbxghhl30</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/compare exchange</title>
    <ns>0</ns>
    <id>15486</id>
    <revision>
      <id>91811</id>
      <parentid>85592</parentid>
      <timestamp>2017-03-31T19:58:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4707">{{cpp/experimental/atomic_weak_ptr/title|compare_exchange_strong|compare_exchange_weak}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1| 1=
bool compare_exchange_weak( std::weak_ptr&lt;T&gt;&amp; expected, const std::weak_ptr&lt;T&gt;&amp; desired,
                            std::memory_order success,  std::memory_order failure );
}}
{{dcl | num=2| 1=
bool compare_exchange_weak( std::weak_ptr&lt;T&gt;&amp; expected, std::weak_ptr&lt;T&gt;&amp;&amp; desired,
                            std::memory_order success,  std::memory_order failure );
}}
{{dcl | num=3| 1=
bool compare_exchange_weak( std::weak_ptr&lt;T&gt;&amp; expected, const std::weak_ptr&lt;T&gt;&amp; desired,
                            std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | num=4| 1=
bool compare_exchange_weak( std::weak_ptr&lt;T&gt;&amp; expected, std::weak_ptr&lt;T&gt;&amp;&amp; desired,
                            std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | num=5| 1=
bool compare_exchange_strong( std::weak_ptr&lt;T&gt;&amp; expected, const std::weak_ptr&lt;T&gt;&amp; desired,
                              std::memory_order success,  std::memory_order failure );
}}
{{dcl | num=6| 1=
bool compare_exchange_strong( std::weak_ptr&lt;T&gt;&amp; expected, std::weak_ptr&lt;T&gt;&amp;&amp; desired,
                              std::memory_order success   std::memory_order failure );
}}
{{dcl | num=7| 1=
bool compare_exchange_strong( std::weak_ptr&lt;T&gt;&amp; expected, const std::weak_ptr&lt;T&gt;&amp; desired,
                              std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl | num=8| 1=
bool compare_exchange_strong( std::weak_ptr&lt;T&gt;&amp; expected, std::weak_ptr&lt;T&gt;&amp;&amp; desired,
                              std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl end}}

Atomically compares the underlying {{tt|weak_ptr}} in {{tt|*this}} with {{tt|expected}}, and if they are equivalent, replaces the former with {{tt|desired}} (performs read-modify-write operation). Otherwise, loads the actual value stored in {{tt|*this}} into {{tt|expected}} (performs load operation). The replacement is performed as if by the copy or move assignment operator of {{tt|weak_ptr}}, as appropriate.

Two {{tt|weak_ptr}}s are equivalent if and only if they store the same pointer value and share ownership.

The memory models for the read-modify-write and load operations are {{tt|success}} and {{tt|failure}} respectively. For overloads {{v|3-4, 7-8}}, {{tt|order}} is used for both read-modify-write and load operations, except that {{lc|std::memory_order_acquire}} and {{lc|std::memory_order_relaxed}} are used for the load operation if {{c|1=order == std::memory_order_acq_rel}}, or {{c|1=order == std::memory_order_release}} respectively.

The weak versions {{v|1-4}} may fail spuriously.

===Parameters===
{{par begin}}
{{par | expected | reference to the value expected to be found in the atomic object}}
{{par | desired | the value to store in the atomic object if it is as expected}}
{{par | success | the memory synchronization ordering for the read-modify-write operation if the comparison succeeds. All values are permitted. }}
{{par | failure | the memory synchronization ordering for the load operation if the comparison fails. Cannot be {{lc|std::memory_order_release}} or {{lc|std::memory_order_acq_rel}} and cannot specify stronger ordering than {{tt|success}}}}
{{par | order | the memory synchronization ordering for both operations}}
{{par end}}

===Return value===
{{c|true}} if the underlying atomic value was changed, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

=== Remarks ===
{{cpp/experimental/atomic_weak_ptr/atomic remarks}}

If the compare-exchange operation return {{c|true}}, {{tt|expected}} is not accessed after the atomic update step. If it returns {{c|false}}, {{tt|expected}} is updated with the existing value read from the {{tt|atomic_weak_ptr}} object in the attempted atomic update. The {{tt|use_count}} update corresponding to the write to {{tt|expected}} is part of the atomic operation, but the write to {{tt|expected}} itself is not required to be part of the atomic operation.

For overloads {{v|1,3,5,7}}, {{tt|desired}} is not accessed after the atomic update step.

For overloads {{v|2,4,6,8}}, {{tt|desired}} is moved from only if the compare-exchange operation returns {{c|true}}; the moving occurs after the atomic update step.

===Notes===
The weak forms {{v|1-4}} of the functions are allowed to fail spuriously, that is, act as if {{c|*this}} and {{c|expected}} are not equivalent even when they are. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms.


===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>rbpzlvn3rte504ad0ngxognnthqqx22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/exchange</title>
    <ns>0</ns>
    <id>15484</id>
    <revision>
      <id>91476</id>
      <parentid>85588</parentid>
      <timestamp>2017-03-31T19:46:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="828">{{cpp/experimental/atomic_weak_ptr/title|exchange}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}

{{dcl begin}}
{{dcl | 1=
weak_ptr&lt;T&gt; exchange( weak_ptr&lt;T&gt; desired, std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl end}}

Atomically replaces the underlying {{tt|weak_ptr}} with {{tt|desired}}. The operation is a read-modify-write operation. Memory is affected according to the value of {{tt|order}}.

===Parameters===
{{par begin}}
{{par | desired | value to assign}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
The value of the atomic variable before the call.

===Remarks===
{{cpp/experimental/atomic_weak_ptr/atomic remarks}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>nlidaiuv93oogp94p0ynlfy91olor73</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/is lock free</title>
    <ns>0</ns>
    <id>15481</id>
    <revision>
      <id>91392</id>
      <parentid>85585</parentid>
      <timestamp>2017-03-31T19:42:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="537">{{cpp/experimental/atomic_weak_ptr/title|is_lock_free}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl | 1=
bool is_lock_free() const;
}}
{{dcl end}}

Checks whether the atomic operations on all objects of this type are lock-free.

===Parameters===
(none)

===Return value===
{{c|true}} if the atomic operations on the objects of this type are lock-free, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>rmkcjezmvwduydf6q72iym1r6uhmx1q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/load</title>
    <ns>0</ns>
    <id>15483</id>
    <revision>
      <id>91791</id>
      <parentid>85587</parentid>
      <timestamp>2017-03-31T19:58:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1011">{{cpp/experimental/atomic_weak_ptr/title|load}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl | 1=
weak_ptr&lt;T&gt; load( std::memory_order order = std::memory_order_seq_cst ) const;
}}
{{dcl end}}

Atomically loads and returns the current value of the {{tt|atomic_weak_ptr}}. Memory is affected according to the value of {{tt|order}}.

{{tt|order}} must be one of {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_consume}}, {{lc|std::memory_order_acquire}} or {{lc|std::memory_order_seq_cst}}. Otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Remarks===
{{cpp/experimental/atomic_weak_ptr/atomic remarks|readonly=yes}}

===Return value===
The current value of the {{tt|atomic_weak_ptr}}.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc operator_weak_ptr}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>mnmbby6ap6xbffemsyfi3ubf1pfpis9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/operator weak ptr</title>
    <ns>0</ns>
    <id>15485</id>
    <revision>
      <id>91504</id>
      <parentid>85589</parentid>
      <timestamp>2017-03-31T19:48:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="608">{{cpp/experimental/atomic_weak_ptr/title|operator weak_ptr&lt;T&gt;}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl | 
operator weak_ptr&lt;T&gt;() const;
}}
{{dcl end}}

Atomically loads and returns the current value of the {{tt|atomic_weak_ptr}}. Equivalent to {{c|load()}}.

===Parameters===
(none)

===Return value===
The current value of the {{tt|atomic_weak_ptr}}.

===Remarks===
{{cpp/experimental/atomic_weak_ptr/atomic remarks|readonly=yes}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc load}}
{{dsc end}}</text>
      <sha1>ih6kpilg9046m4ahk27dr4muy9qlwm1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/operator=</title>
    <ns>0</ns>
    <id>15480</id>
    <revision>
      <id>91620</id>
      <parentid>85584</parentid>
      <timestamp>2017-03-31T19:52:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="957">{{cpp/experimental/atomic_weak_ptr/title|operator{{=}}}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
void operator=( weak_ptr&lt;T&gt; desired );
}}
{{dcl | num=2 | 1=
void operator=( const atomic_weak_ptr&amp; ) = delete;
}}
{{dcl end}}

@1@ Atomically assigns a value {{tt|desired}} to the atomic variable. Equivalent to {{c|store(desired)}}.
@2@ Atomic variables are not {{concept|CopyAssignable}}.

===Parameters===
{{par begin}}
{{par | desired | value to assign}}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

===Notes===
Unlike most assignment operators, the assignment operators for {{tt|atomic_weak_ptr}} returns {{c|void}}.

===Remarks===
{{cpp/experimental/atomic_weak_ptr/atomic remarks}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc constructor}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc store}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>bwlzw6ci2gkvkb29kcf70ak44onkioy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/atomic weak ptr/store</title>
    <ns>0</ns>
    <id>15482</id>
    <revision>
      <id>91922</id>
      <parentid>85586</parentid>
      <timestamp>2017-03-31T20:01:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="983">{{cpp/experimental/atomic_weak_ptr/title|store}}
{{cpp/experimental/concurrency/atomic_weak_ptr/navbar}}
{{dcl begin}}
{{dcl | 1=
void store( weak_ptr&lt;T&gt; desired, std::memory_order order = std::memory_order_seq_cst );
}}
{{dcl end}}

Atomically replaces the current value with {{tt|desired}}. Memory is affected according to the value of {{tt|order}}.

{{tt|order}} must be one of {{lc|std::memory_order_relaxed}}, {{lc|std::memory_order_release}} or {{lc|std::memory_order_seq_cst}}. Otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | desired | the {{tt|weak_ptr}} to store into the atomic variable}}
{{par | order | memory order constraints to enforce}}
{{par end}}

===Return value===
(none)

===Remarks===
{{cpp/experimental/atomic_weak_ptr/atomic remarks}}

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/atomic_weak_ptr/dsc operator{{=}}}}
{{dsc inc | cpp/memory/shared ptr/dsc atomic}}
{{dsc end}}</text>
      <sha1>8jqn8201vbuo91vvb9f0aq1ixojx1l4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/barrier</title>
    <ns>0</ns>
    <id>15408</id>
    <revision>
      <id>85422</id>
      <parentid>85393</parentid>
      <timestamp>2016-04-21T18:37:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1828">{{cpp/experimental/title|barrier}}
{{cpp/experimental/concurrency/barrier/navbar}}
{{dcl begin}}
{{dcl header|experimental/barrier}}
{{dcl | since=concurrency || 1=
class barrier;
}}
{{dcl end}}

The class {{tt|std::experimental::barrier}} provides a thread-coordination mechanism that allows a set of participating threads to block until an operation is completed. Unlike {{lc|std::experimental::latch}}, barriers are reusable; once the participating threads are released from a barrier's synchronization point, they can reuse the same barrier.

A barrier has a completion phase, which is executed by one of the participating threads once all threads in the set of participating threads arrive at the synchronization point. The {{tt|arrive_and_wait}} and {{tt|arrive_and_drop}} calls [[cpp/atomic/memory_order|synchronize with]] the start of the completion phase; the end of the completion phase synchronizes with the returns from all calls blocked by its completion.

For {{tt|std::experimental::barrier}}, the completion phase is empty. {{lc|std::experimental::flex_barrier}} allows the user to control the completion phase with a function object.

The set of participating threads for a {{tt|barrier}} constructed for {{tt|num_threads}} threads is the first {{tt|num_threads}} threads to arrive at its synchronization point after construction. The same set of threads (except for threads that called {{rlt|arrive_and_drop|arrive_and_drop()}}) must arrive at the {{tt|barrier}} each cycle.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/barrier/dsc constructor}}
{{dsc inc | cpp/experimental/barrier/dsc destructor}}
{{dsc inc | cpp/experimental/barrier/dsc operator{{=}}}}

{{dsc inc | cpp/experimental/barrier/dsc arrive_and_wait}}
{{dsc inc | cpp/experimental/barrier/dsc arrive_and_drop}}

{{dsc end}}</text>
      <sha1>dwcbovbv02guq724xyrcda4zev24a0t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/barrier/arrive and drop</title>
    <ns>0</ns>
    <id>15434</id>
    <revision>
      <id>85515</id>
      <parentid>85425</parentid>
      <timestamp>2016-04-22T22:03:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1304">{{cpp/experimental/barrier/title|arrive_and_drop}}
{{cpp/experimental/concurrency/barrier/navbar}}
{{dcl begin}}
{{dcl | since=concurrency | 1=
void arrive_and_drop();
}}
{{dcl end}}

Arrive at the barrier's synchronization point and remove the current thread from the set of participating threads. It is unspecified whether this function blocks until the completion phase has ended.

The behavior is undefined if the calling thread is not in the set of participating threads of this barrier.

Calls to {{tt|arrive_and_drop}} synchronizes with the start of the completion phase of the barrier. If the call blocks, then the completion of the completion phase synchronizes with the return from the call.

Calls to {{tt|arrive_and_drop}} and {{tt|arrive_and_wait}} never introduce data races with themselves or each other.

=== Exceptions ===
Throws nothing.

=== Notes ===
If every participating thread calls {{tt|arrive_and_drop()}}, the barrier can only be destroyed. 

After a thread calls {{tt|arrive_and_drop()}} on a barrier, it is no longer a member of its set of participating threads and hence can no longer call either {{tt|arrive_and_drop()}} or {{tt|arrive_and_wait()}} on the same barrier.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/barrier/dsc arrive_and_wait }}
{{dsc end}}</text>
      <sha1>c791bx4skw72e3ii4hcfm028iw2t1kc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/barrier/arrive and wait</title>
    <ns>0</ns>
    <id>15433</id>
    <revision>
      <id>85514</id>
      <parentid>85435</parentid>
      <timestamp>2016-04-22T22:03:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1355">{{cpp/experimental/barrier/title|arrive_and_wait}}
{{cpp/experimental/concurrency/barrier/navbar}}
{{dcl begin}}
{{dcl | since=concurrency | 1=
void arrive_and_wait();
}}
{{dcl end}}

Blocks and arrive at the barrier's synchronization point.

The behavior is undefined if the calling thread is not in the set of participating threads of this barrier.

Calls to {{tt|arrive_and_wait}} synchronizes with the start of the completion phase of the barrier. The completion of the completion phase synchronizes with the return from the call.

Calls to {{tt|arrive_and_drop}} and {{tt|arrive_and_wait}} never introduce data races with themselves or each other.

=== Notes ===
It is safe for a thread to call either {{tt|arrive_and_wait()}} or {{tt|arrive_and_drop()}} immediately on return from this call. It's not necessary to ensure that all blocked threads have exited {{tt|arrive_and_wait()}} before a thread calls it again.

The set of participating threads for a {{tt|barrier}} constructed for {{tt|num_threads}} threads is the first {{tt|num_threads}} to arrive at its synchronization point. This set does not change from cycle to cycle, except for threads removed from the set due to {{tt|arrive_and_drop()}} calls.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/barrier/dsc arrive_and_drop }}
{{dsc end}}</text>
      <sha1>09nuflsws6c0yr5yiwrz7e67zas26gl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/barrier/barrier</title>
    <ns>0</ns>
    <id>15430</id>
    <revision>
      <id>85417</id>
      <timestamp>2016-04-21T18:28:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="812">{{cpp/experimental/barrier/title|barrier}}
{{cpp/experimental/concurrency/barrier/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=concurrency | 1= 
explicit barrier( std::ptrdiff_t num_threads );
}}
{{dcl | num=2 | since=concurrency | 1= 
barrier( const barrier &amp; ) = delete;
}}
{{dcl end}}

@1@ Constructs a {{tt|barrier}} for {{tt|num_threads}} participating threads. The set of participating threads is the first {{tt|num_threads}} threads to arrive at the synchronization point.
@2@ Copy constructor is deleted; {{tt|barrier}} is not copyable.

===Parameters===
{{par begin}}
{{par | num_threads | the number of participating threads for the barrier; must be non-negative }}
{{par end}}

=== Notes ===
If {{tt|num_threads}} is zero, the set of participating threads is empty, and barrier can only be destroyed.</text>
      <sha1>9bip70g4a692esl0h48orry1se8hwj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/barrier/~barrier</title>
    <ns>0</ns>
    <id>15432</id>
    <revision>
      <id>85421</id>
      <timestamp>2016-04-21T18:31:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="266">{{cpp/experimental/barrier/title|~barrier}}
{{cpp/experimental/concurrency/barrier/navbar}}
{{dcl begin}}
{{dcl | since=concurrency | 1=
~barrier();
}}
{{dcl end}}

Destroys the barrier.

The behavior is undefined if a thread is blocked at the synchronization point.</text>
      <sha1>iw3rj4inkdai5jpm7u42dre2ndteu81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view</title>
    <ns>0</ns>
    <id>13633</id>
    <revision>
      <id>84476</id>
      <parentid>80777</parentid>
      <timestamp>2016-03-18T17:06:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merged to c++17 box</comment>
      <text xml:space="preserve" bytes="4942">{{cpp/title|n=experimental::|basic_string_view}}
{{cpp/experimental/basic_string_view/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  {{ltt|cpp/string/basic_string_view|std::basic_string_view}} {{mark since c++17}} }}
{{ddcl | header=experimental/string_view | since=libfund_ts |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt; 
&gt; class basic_string_view;
}}

The class template {{tt|basic_string_view}} describes an object that can refer to a constant contiguous sequence of {{c|char}}-like objects with the first element of the sequence at position zero. 

A typical implementation holds only two members: a pointer to constant {{tt|CharT}} and a size.

Several typedefs for common character types are provided:
{{dsc begin}}
{{dsc header | experimental/string_view}}
{{dsc hitem | Type | Definition}}
{{dsc | {{lc|std::experimental::string_view}} | {{c|std::experimental::basic_string_view&lt;char&gt;}} }}
{{dsc | {{lc|std::experimental::wstring_view}} | {{c|std::experimental::basic_string_view&lt;wchar_t&gt;}} }}
{{dsc | {{lc|std::experimental::u16string_view}} | {{c|std::experimental::basic_string_view&lt;char16_t&gt;}} }}
{{dsc | {{lc|std::experimental::u32string_view}} | {{c|std::experimental::basic_string_view&lt;char32_t&gt;}} }}
{{dsc end}}

===Template parameters===
{{par begin}}
{{par | CharT | character type}}
{{par | Traits | traits class specifying the operations on the character type}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}} }}
{{dsc | {{tt|value_type}} | {{tt|CharT}} }}
{{dsc | {{tt|pointer}} | {{tt|CharT*}} }}
{{dsc | {{tt|const_pointer}} | {{tt|const CharT*}} }}
{{dsc | {{tt|reference}} | {{tt|CharT&amp;}} }}
{{dsc | {{tt|const_reference}} | {{tt|const CharT&amp;}} }}
{{dsc | {{tt|const_iterator}} | implementation-defined {{concept|RandomAccessIterator}} }}
{{dsc | {{tt|iterator}} | {{tt|const_iterator}} }}
{{dsc | {{tt|reverse_iterator}} | {{tt|const_reverse_iterator}} }}
{{dsc | {{tt|const_reverse_iterator}} | {{c|std::reverse_iterator&lt;const_iterator&gt;}} }}
{{dsc | {{tt|size_type}} | {{lc|std::size_t}} }}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
{{dsc end}}

Note: {{tt|iterator}} and {{tt|const_iterator}} are the same type because string views are views into constant character sequences.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc constructor}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator{{=}}}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/experimental/basic_string_view/dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc end}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rbegin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rend}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator_at}}
{{dsc inc | cpp/experimental/basic_string_view/dsc at}}
{{dsc inc | cpp/experimental/basic_string_view/dsc front}}
{{dsc inc | cpp/experimental/basic_string_view/dsc back}}
{{dsc inc | cpp/experimental/basic_string_view/dsc data}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/experimental/basic_string_view/dsc size}}
{{dsc inc | cpp/experimental/basic_string_view/dsc max_size}}
{{dsc inc | cpp/experimental/basic_string_view/dsc empty}}

{{dsc h2 | Modifers}}
{{dsc inc | cpp/experimental/basic_string_view/dsc remove_prefix}}
{{dsc inc | cpp/experimental/basic_string_view/dsc remove_suffix}}
{{dsc inc | cpp/experimental/basic_string_view/dsc swap}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/experimental/basic_string_view/dsc to_string}}
{{dsc inc | cpp/experimental/basic_string_view/dsc copy}}
{{dsc inc | cpp/experimental/basic_string_view/dsc substr}}
{{dsc inc | cpp/experimental/basic_string_view/dsc compare}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rfind}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_not_of}}

{{dsc h1 | Constants}}
{{dsc inc | cpp/experimental/basic_string_view/dsc npos}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator_cmp}}

{{dsc h2 | Input/output}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator_ltlt}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc hash}}
{{dsc end}}

===Feature test macros===
{{dsc begin}}
{{dsc macro const | __cpp_lib_experimental_string_view | nolink=true | a value of at least {{c|201411}} indicates that basic_string_view template is supported }}
{{dsc end}}</text>
      <sha1>nsqov4540896364qu6qln3edjtkw8p1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/at</title>
    <ns>0</ns>
    <id>13571</id>
    <revision>
      <id>71247</id>
      <timestamp>2014-06-09T01:16:27Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add page.</comment>
      <text xml:space="preserve" bytes="748">{{cpp/experimental/basic_string_view/title | at}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_reference at(size_type pos) const;
}}
{{dcl end}}

Returns a reference to the character at specified location {{tt|pos}}. Bounds checking is performed, exception of type {{lc|std::out_of_range}} will be thrown on invalid access.

===Parameters===
{{par begin}}
{{par | pos | position of the character to return}}
{{par end}}

===Return value===
Reference to the requested character.

===Exceptions===
Throws {{lc|std::out_of_range}} if {{c|1=pos &gt;= size()}}.

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator_at }}
{{dsc end}}</text>
      <sha1>3ib13jd9m4v1vlmhzt3rlr2syt1jk0v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/back</title>
    <ns>0</ns>
    <id>13574</id>
    <revision>
      <id>71253</id>
      <parentid>71250</parentid>
      <timestamp>2014-06-09T01:32:35Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Fix title.</comment>
      <text xml:space="preserve" bytes="500">{{cpp/experimental/basic_string_view/title | back}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_reference back() const;
}}
{{dcl end}}

Returns reference to the last character in the view.

===Parameters===
(none)

===Return value===
Reference to the last character, equivalent to {{c|operator[](size() - 1)}}.

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc front }}
{{dsc end}}</text>
      <sha1>19y1hs01ubyj82vzkgzqo93tsuevwjp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/basic string view</title>
    <ns>0</ns>
    <id>13562</id>
    <revision>
      <id>91521</id>
      <parentid>77018</parentid>
      <timestamp>2017-03-31T19:48:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2636">{{cpp/experimental/basic_string_view/title|basic_string_view}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts | 
constexpr basic_string_view();
}}
{{dcl | num=2 | since=libfund_ts | 
constexpr basic_string_view(const basic_string_view&amp; other) {{=}} default;
}}
{{dcl | num=3 | since=libfund_ts |
template&lt;class Allocator&gt;
basic_string_view(const std::basic_string&lt;CharT, Traits, Allocator&gt;&amp; str);
}}
{{dcl | num=4 | since=libfund_ts |
constexpr basic_string_view(const CharT* s, size_type count);
}}
{{dcl | num=5 | since=libfund_ts |
constexpr basic_string_view(const CharT* s);
}}
{{dcl end}}

@1@ Default constructor. Constructs an empty {{tt|basic_string_view}}.
@2@ Copy constructor. Constructs a view of the same content as {{tt|other}}.
@3@ Constructs a view of the first {{c|str.size()}} characters of the character array starting with the element pointed by {{c|str.data()}}.
@4@ Constructs a view of the first {{tt|count}} characters of the character array starting with the element pointed by {{tt|s}}. {{tt|s}} can contain null characters. The behavior is undefined if {{c|[s, s+count)}} is not a valid range (even though the constructor may not access any of the elements of this range)
@5@ Constructs a view of the null-terminated character string pointed to by {{tt|s}}, not including the terminating null character. The length of the view is determined as if by {{c|Traits::length(s)}}. The behavior is undefined if {{c|[s, s+Traits::length(s))}} is not a valid range (even though the constructor may not access any of the elements of this range)

===Parameters===
{{par begin}}
{{par | other | another view to initialize the view with}}
{{par | str | a C++ string object to initialize view with}}
{{par | s | pointer to a character array or a C string to initialize the view with}}
{{par | count | number of characters to include in the view}}
{{par end}} 

===Exceptions===
1-3) {{unreviewed noexcept}}

===Complexity===

1-4) constant

5) linear in length of {{tt|s}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/string_view&gt;
int main()
{
    std::string cppstr = &quot;Foo&quot;;
    char array[3] = {'B', 'a', 'r'};
        
    std::experimental::string_view cppstr_v(cppstr);
    std::experimental::string_view array_v(array, sizeof array);
    
    std::experimental::wstring_view wcstr_v = L&quot;xyzzy&quot;;
    
    std::cout &lt;&lt; cppstr_v &lt;&lt; '\n'
              &lt;&lt; array_v &lt;&lt; '\n'
              &lt;&lt; wcstr_v.size() &lt;&lt; '\n';
}
|output=
Foo
Bar
5
}}
===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator{{=}} }}
{{dsc end}}</text>
      <sha1>nyc9sw2lp46lr8mspyt0nm953rtjh2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/begin</title>
    <ns>0</ns>
    <id>13564</id>
    <revision>
      <id>91600</id>
      <parentid>71243</parentid>
      <timestamp>2017-03-31T19:51:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="622">{{cpp/experimental/basic_string_view/title | begin | cbegin}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_iterator begin() const;
}}
{{dcl | since=libfund_ts |
constexpr const_iterator cbegin() const;
}}
{{dcl end}}

Returns an iterator to the first character of the view. 

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_iterator}} to the first character

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc end}}
{{dsc end}}</text>
      <sha1>k29fhau2bainn531qed6llwmlh3xur3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/compare</title>
    <ns>0</ns>
    <id>13609</id>
    <revision>
      <id>91432</id>
      <parentid>71319</parentid>
      <timestamp>2017-03-31T19:43:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3156">{{cpp/experimental/basic_string_view/title | compare }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr int compare(basic_string_view v) const;
}}
{{dcl | num=2 | since=libfund_ts |
constexpr int compare(size_type pos1, size_type count1,
                      basic_string_view v) const
}}
{{dcl | num=3 | since=libfund_ts |
constexpr int compare(size_type pos1, size_type count1, basic_string_view v,
                      size_type pos2, size_type count2) const;
}}
{{dcl | num=4 | since=libfund_ts |
constexpr int compare(const CharT* s) const;
}}
{{dcl | num=5 | since=libfund_ts |
constexpr int compare(size_type pos1, size_type count1,
                      const CharT* s) const;
}}
{{dcl | num=6 | since=libfund_ts |
constexpr int compare(size_type pos1, size_type count1,
                      const CharT* s, size_type count2) const;
}}
{{dcl end}}

Compares two character sequences.

@1@The length {{tt|rlen}} of the sequences to compare is the smaller of {{c|size()}} and {{c|v.size()}}. The function compares the two views by calling {{c|traits::compare(data(), v.data(), rlen)}}, and returns a value according to the following table:

{| class=&quot;wikitable&quot; style=&quot;text-align:center;&quot;
! colspan=2 | Condition
! Result
! Return value
|-
| colspan=2 style=&quot;text-align:left;&quot; | {{tt|Traits::compare(data(), v.data(), {{spar|rlen}}) &lt; 0}}
| {{tt|this}} is ''less'' than {{tt|v}}
| {{c|&lt;0}}
|-
| rowspan=3 | {{tt|Traits::compare(data(), v.data(), {{spar|rlen}}) {{==}} 0}}
| {{tt|size() &lt; v.size()}}
| {{tt|this}} is ''less'' than {{tt|v}}
| {{c|&lt;0}}
|-
&lt;!-- --&gt;
| {{tt|size() {{==}} v.size()}}
| {{tt|this}} is ''equal'' to {{tt|v}}
| {{c|0}}
|-
&lt;!-- --&gt;
| {{tt|size() &gt; v.size()}}
| {{tt|this}} is ''greater'' than {{tt|v}}
| {{c|&gt;0}}
|-
| colspan=2 style=&quot;text-align:left;&quot; | {{tt|Traits::compare(data(), v.data(), {{spar|rlen}}) &gt; 0}}
| {{tt|this}} is ''greater'' than {{tt|v}}
| {{c|&gt;0}}
|}

@2@Equivalent to {{c|substr(pos1, count1).compare(v)}}.
@3@Equivalent to {{c|substr(pos1, count1).compare(v.substr(pos2, count2))}}.
@4@Equivalent to {{c|compare(basic_string_view(s))}}.
@5@Equivalent to {{c|substr(pos1, count1).compare(basic_string_view(s))}}.
@6@Equivalent to {{c|substr(pos1, count1).compare(basic_string_view(s, count2))}}.

===Parameters===
{{par begin}}
{{par | v | view to compare}}
{{par | s | pointer to the character string to compare to}}
{{par | count1 | number of characters of this view to compare}}
{{par | pos1 | position of the first character in this view to compare}}
{{par | count2 | number of characters of the given view to compare}}
{{par | pos2 | position of the first character of the given view to compare}}
{{par end}} 

===Return value===
negative value if this view is less than the other character sequence, zero if the both character sequences are equal, positive value if this view is greater than the other character sequence.

===Exceptions===
1) {{unreviewed noexcept}}

===Complexity===
1) Linear in the number of characters compared.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator_cmp}}
{{dsc end}}</text>
      <sha1>lfhog9de8bkn3156dez32d83bqt8pcx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/copy</title>
    <ns>0</ns>
    <id>13604</id>
    <revision>
      <id>89052</id>
      <parentid>71312</parentid>
      <timestamp>2016-12-24T00:05:47Z</timestamp>
      <contributor>
        <username>AlexB</username>
        <id>6222</id>
      </contributor>
      <minor/>
      <comment>Throws only if pos &gt; size() [based on N4617]</comment>
      <text xml:space="preserve" bytes="897">{{cpp/experimental/basic_string_view/title | copy }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
size_type copy( CharT* dest,
                size_type count,
                size_type pos {{=}} 0) const;
}}
{{dcl end}}

Copies the substring {{tt|[pos, pos + rcount)}} to the character string pointed to by {{tt|dest}}, where {{tt|rcount}} is the smaller of {{tt|count}} and {{c|size() - pos}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the destination character string}}
{{par | pos | position of the first character}}
{{par | count | requested substring length}}
{{par end}} 

===Return value===
Number of characters copied

===Exceptions===
{{lc|std::out_of_range}} if {{c|1=pos &gt; size()}}.

===Complexity===
Linear in {{tt|rcount}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc substr}}
{{dsc end}}</text>
      <sha1>qkgh2hdrp9jnxluo8yg7pu8md05k5kn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/data</title>
    <ns>0</ns>
    <id>13575</id>
    <revision>
      <id>91443</id>
      <parentid>71255</parentid>
      <timestamp>2017-03-31T19:44:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="982">{{cpp/experimental/basic_string_view/title | data}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_pointer data() const;
}}
{{dcl end}}

Returns a pointer to the underlying character array. The pointer is such that the range [data(); data() + size()) is valid and the values in it correspond to the values of the view. (n.b. Unlike {{tt|basic_string::data()}} and string literals, {{tt|data()}} may return a pointer to a buffer that is not null-terminated. Therefore it is typically a mistake to pass {{tt|data()}} to a routine that takes just a {{tt|const CharT*}} and expects a null-terminated string.)

===Parameters===
(none)

===Return value===
A pointer to the underlying character array.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc front }}
{{dsc inc | cpp/experimental/basic_string_view/dsc back }}
{{dsc end}}</text>
      <sha1>fczukfusbxlt68t1m146blwzkugwd3b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/empty</title>
    <ns>0</ns>
    <id>13578</id>
    <revision>
      <id>91441</id>
      <parentid>71259</parentid>
      <timestamp>2017-03-31T19:44:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="596">{{cpp/experimental/basic_string_view/title | empty }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr bool empty() const;
}}
{{dcl end}}

Checks if the view has no characters, i.e. whether {{tt|size() {{==}} 0}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the view is empty, {{c|false}} otherwise

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc size }}
{{dsc inc | cpp/experimental/basic_string_view/dsc max_size }}
{{dsc end}}</text>
      <sha1>pybw0rbpbp8uxxkrz8cjrq85hfjaosh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/end</title>
    <ns>0</ns>
    <id>13568</id>
    <revision>
      <id>91501</id>
      <parentid>71242</parentid>
      <timestamp>2017-03-31T19:48:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="755">{{cpp/experimental/basic_string_view/title | end | cend}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_iterator end() const;
}}
{{dcl | since=libfund_ts |
constexpr const_iterator cend() const;
}}
{{dcl end}}

Returns an iterator to the character following the last character of the view. This character acts as a placeholder, attempting to access it results in undefined behavior.

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_iterator}} to the character following the last character.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc begin}}
{{dsc end}}</text>
      <sha1>enddsj4a7oiqfhv7pgnopt91uuejsy4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/find</title>
    <ns>0</ns>
    <id>13611</id>
    <revision>
      <id>91799</id>
      <parentid>71334</parentid>
      <timestamp>2017-03-31T19:58:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1790">{{cpp/experimental/basic_string_view/title | find }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr size_type find(basic_string_view v, size_type pos {{=}} 0) const;
}}
{{dcl | num=2 | since=libfund_ts |
constexpr size_type find(CharT c, size_type pos {{=}} 0) const;
}}
{{dcl | num=3 | since=libfund_ts |
constexpr size_type find(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=libfund_ts |
constexpr size_type find(const CharT* s, size_type pos {{=}} 0) const;
}}
{{dcl end}}

Finds the first substring equal to the given character sequence.

@1@Finds the first occurence of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of substring to search for}}
{{par | s | pointer to a character string to search for}}
{{par | ch | character to search for}}
{{par end}} 


===Return value===
Position of the first character of the found substring, or {{lc|npos}} if no such substring is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rfind}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_not_of}}
{{dsc end}}</text>
      <sha1>fnu5suzov7xfakrcavqqxmhvx3j2l6c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/find first not of</title>
    <ns>0</ns>
    <id>13620</id>
    <revision>
      <id>91524</id>
      <parentid>71333</parentid>
      <timestamp>2017-03-31T19:48:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2003">{{cpp/experimental/basic_string_view/title | find_first_not_of }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr size_type 
    find_first_not_of(basic_string_view v, size_type pos {{=}} 0) const;
}}
{{dcl | num=2 | since=libfund_ts |
constexpr size_type
    find_first_not_of(CharT c, size_type pos {{=}} 0) const;
}}
{{dcl | num=3 | since=libfund_ts |
constexpr size_type
    find_first_not_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=libfund_ts |
constexpr size_type
    find_first_not_of(const CharT* s, size_type pos {{=}} 0) const;
}}
{{dcl end}}

Finds the first character not equal to any of the characters in the given character sequence.

@1@Finds the first character not equal to any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_first_not_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_first_not_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_first_not_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to compare}}
{{par | s | pointer to a string of characters to compare}}
{{par | ch | character to compare}}
{{par end}} 

===Return value===
Position of the first character not equal to any of the characters in the given string, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rfind}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_not_of}}
{{dsc end}}</text>
      <sha1>o6ca7oletsus1f1259d47650xu3m44j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/find first of</title>
    <ns>0</ns>
    <id>13618</id>
    <revision>
      <id>91603</id>
      <parentid>71336</parentid>
      <timestamp>2017-03-31T19:51:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1933">{{cpp/experimental/basic_string_view/title | find_first_of }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr size_type find_first_of(basic_string_view v, size_type pos {{=}} 0) const;
}}
{{dcl | num=2 | since=libfund_ts |
constexpr size_type find_first_of(CharT c, size_type pos {{=}} 0) const;
}}
{{dcl | num=3 | since=libfund_ts |
constexpr size_type find_first_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=libfund_ts |
constexpr size_type find_first_of(const CharT* s, size_type pos {{=}} 0) const;
}}
{{dcl end}}

Finds the first character equal to any of the characters in the given character sequence.

@1@Finds the first occurence of any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_first_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_first_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_first_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to search for}}
{{par | s | pointer to a string of characters to search for}}
{{par | ch | character to search for}}
{{par end}} 

===Return value===
Position of the first occurrence of any character of the substring, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rfind}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_not_of}}
{{dsc end}}</text>
      <sha1>8kmav80szy9vagtpuytcl9j0mvsqve8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/find last not of</title>
    <ns>0</ns>
    <id>13621</id>
    <revision>
      <id>91522</id>
      <parentid>80471</parentid>
      <timestamp>2017-03-31T19:48:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2002">{{cpp/experimental/basic_string_view/title | find_last_not_of }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr size_type 
    find_last_not_of(basic_string_view v, size_type pos {{=}} npos) const;
}}
{{dcl | num=2 | since=libfund_ts |
constexpr size_type
    find_last_not_of(CharT c, size_type pos {{=}} npos) const;
}}
{{dcl | num=3 | since=libfund_ts |
constexpr size_type
    find_last_not_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=libfund_ts |
constexpr size_type
    find_last_not_of(const CharT* s, size_type pos {{=}} npos) const;
}}
{{dcl end}}

Finds the last character not equal to any of the characters in the given character sequence.

@1@Finds the last character not equal to any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_last_not_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_last_not_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_last_not_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to compare}}
{{par | s | pointer to a string of characters to compare}}
{{par | ch | character to compare}}
{{par end}} 

===Return value===
Position of the last character not equal to any of the characters in the given string, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rfind}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_not_of}}
{{dsc end}}</text>
      <sha1>rimepz1y3flmftir79988wvf0o6oipa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/find last of</title>
    <ns>0</ns>
    <id>13619</id>
    <revision>
      <id>91606</id>
      <parentid>80470</parentid>
      <timestamp>2017-03-31T19:51:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1932">{{cpp/experimental/basic_string_view/title | find_last_of }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr size_type find_last_of(basic_string_view v, size_type pos {{=}} npos) const;
}}
{{dcl | num=2 | since=libfund_ts |
constexpr size_type find_last_of(CharT c, size_type pos {{=}} npos) const;
}}
{{dcl | num=3 | since=libfund_ts |
constexpr size_type find_last_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=libfund_ts |
constexpr size_type find_last_of(const CharT* s, size_type pos {{=}} npos) const;
}}
{{dcl end}}

Finds the last character equal to any of the characters in the given character sequence.

@1@Finds the last occurence of any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_last_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_last_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_last_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to search for}}
{{par | s | pointer to a string of characters to search for}}
{{par | ch | character to search for}}
{{par end}} 

===Return value===
Position of the last occurrence of any character of the substring, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rfind}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_not_of}}
{{dsc end}}</text>
      <sha1>nz5uva5p33ahvq9k62epbupmf7fpiok</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/front</title>
    <ns>0</ns>
    <id>13573</id>
    <revision>
      <id>71252</id>
      <parentid>71249</parentid>
      <timestamp>2014-06-09T01:32:23Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Fix title.</comment>
      <text xml:space="preserve" bytes="494">{{cpp/experimental/basic_string_view/title | front}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_reference front() const;
}}
{{dcl end}}

Returns reference to the first character in the view.

===Parameters===
(none)

===Return value===
reference to the first character, equivalent to {{c|operator[](0)}}.

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc back }}
{{dsc end}}</text>
      <sha1>eznv7v4rlhfvo8o37i4vz4pzux0bjq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/hash</title>
    <ns>0</ns>
    <id>13625</id>
    <revision>
      <id>71345</id>
      <timestamp>2014-06-09T10:13:34Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Add page.</comment>
      <text xml:space="preserve" bytes="719">{{cpp/title|hash &lt;small&gt;(std::experimental::string_view, std::experimental::wstring_view, std::experimental::u16string_view, std::experimental::u32string_view)&lt;/small&gt;}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl header | experimental/string_view}}
{{dcl | since=libfund_ts | 1=
template&lt;&gt; struct hash&lt;std::experimental::string_view&gt;;
template&lt;&gt; struct hash&lt;std::experimental::wstring_view&gt;;
template&lt;&gt; struct hash&lt;std::experimental::u16string_view&gt;;
template&lt;&gt; struct hash&lt;std::experimental::u32string_view&gt;;
}}
{{dcl end}}

Template specializations of {{lc|std::hash}} for the various view classes for hashing views.

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}</text>
      <sha1>0hol22y79q5rchtqcluiwjwtdxhonwb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/max size</title>
    <ns>0</ns>
    <id>13577</id>
    <revision>
      <id>91690</id>
      <parentid>71258</parentid>
      <timestamp>2017-03-31T19:55:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="608">{{cpp/experimental/basic_string_view/title | max_size }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr size_type max_size() const;
}}
{{dcl end}}

The largest possible number of char-like objects that can be referred to by a {{tt|basic_string_view}}.

===Parameters===
(none)

===Return value===
Maximum number of characters.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc size }}
{{dsc inc | cpp/experimental/basic_string_view/dsc empty }}
{{dsc end}}</text>
      <sha1>7a1jkanfdbs1loakgse1vuwjpoiimvs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/npos</title>
    <ns>0</ns>
    <id>13622</id>
    <revision>
      <id>71344</id>
      <parentid>71339</parentid>
      <timestamp>2014-06-09T10:08:21Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Added library fundamentals note.</comment>
      <text xml:space="preserve" bytes="482">{{cpp/experimental/basic_string_view/title | npos}}
{{cpp/experimental/basic_string_view/navbar}}
{{ddcl | since=libfund_ts | 1=
static constexpr size_type npos = size_type(-1);
}}

This is a special value equal to the maximum value representable by the type {{tt|size_type}}. The exact meaning depends on context, but it is generally used either as end of view indicator by the functions that expect a view index or as the error indicator by the functions that return a view index.</text>
      <sha1>s9rs5dywfqsid76io889yg4nddnc6yo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/operator at</title>
    <ns>0</ns>
    <id>13572</id>
    <revision>
      <id>77016</id>
      <parentid>71248</parentid>
      <timestamp>2015-03-12T18:02:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+example, wording</comment>
      <text xml:space="preserve" bytes="1206">{{cpp/experimental/basic_string_view/title | operator[]}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_reference operator[](size_type pos) const;
}}
{{dcl end}}

Returns a const reference to the character at specified location {{tt|pos}}.

No bounds checking is performed: the behavior is undefined if {{c|pos &gt;{{=}} size()}}. 

===Parameters===
{{par begin}}
{{par | pos | position of the character to return}}
{{par end}}

===Return value===
Const reference to the requested character

===Exceptions===
Does not throw

===Complexity===
Constant.

===Notes===
Unlike {{lc|std::basic_string::operator[]}}, {{tt|basic_string_view::operator[](size())}} has undefined behavior instead of returning {{tt|CharT()}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/string_view&gt;
int main()
{
    std::string str = &quot;Exemplar&quot;;
    std::experimental::string_view v = str;
    std::cout &lt;&lt; v[2] &lt;&lt; '\n';
//  v[2] = 'y'; // Error: cannot modify through a string view
    str[2] = 'y';
    std::cout &lt;&lt; v[2] &lt;&lt; '\n';
}
|output=
e
y
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc at }}
{{dsc end}}</text>
      <sha1>no6o4ihfnh86cuff3s25i6nv2b4g82a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/operator cmp</title>
    <ns>0</ns>
    <id>13623</id>
    <revision>
      <id>91440</id>
      <parentid>81048</parentid>
      <timestamp>2017-03-31T19:44:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2674">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::experimental::basic_string_view)&lt;/small&gt;}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl header | experimental/string_view}}
{{dcl h | Compare two {{tt|basic_string_view}} objects}}
{{dcl | num=1 | since=libfund_ts | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator==( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=2 | since=libfund_ts | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator!=( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=3 | since=libfund_ts | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&lt;( basic_string_view &lt;CharT,Traits&gt; lhs, 
                          basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=4 | since=libfund_ts | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&lt;=( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=5 | since=libfund_ts | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&gt;( basic_string_view &lt;CharT,Traits&gt; lhs, 
                          basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=6 | since=libfund_ts | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&gt;=( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl end}}

Compares two views.

All comparisons are done via the {{lc|compare()}} member function (which itself is defined in terms of {{tt|Traits::compare()}}):

* Two views are equal if both the size of {{tt|lhs}} and {{tt|rhs}} are equal and each character in {{tt|lhs}} has an equivalent character in {{tt|rhs}} at the same position.

* The ordering comparisons are done lexicographically -- the comparison is performed by a function equivalent to {{lc|std::lexicographical_compare}}.

The implementation shall provide sufficient additional {{tt|constexpr}} and {{tt|noexcept}} overloads of these functions so that a {{tt|basic_string_view&lt;CharT,Traits&gt;}} object {{tt|sv}} may be compared to another object {{tt|t}} with an implicit conversion to {{tt|basic_string_view&lt;CharT,Traits&gt;}}, with semantics identical to comparing {{tt|sv}} and {{tt|basic_string_view&lt;CharT,Traits&gt;(t)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | views to compare}}
{{par end}} 

===Return value===
{{c|true}} if the corresponding comparison holds, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Linear in the size of the views.</text>
      <sha1>bp8bn9921vbh6kjrhxjva50fsnh1mi4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/operator ltlt</title>
    <ns>0</ns>
    <id>13624</id>
    <revision>
      <id>71342</id>
      <parentid>71341</parentid>
      <timestamp>2014-06-09T10:05:50Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Submitted prematurely.</comment>
      <text xml:space="preserve" bytes="592">{{title|operator&lt;&lt;{{small|(std::experimental::basic_string_view)}}}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl header | experimental/string_view}}
{{dcl | since=libfund_ts |
template &lt;class CharT, class Traits&gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp;
    operator&lt;&lt;(std::basic_ostream&lt;CharT, Traits&gt;&amp; os, 
               std::basic_string_view &lt;CharT, Traits&gt; v);
}}
{{dcl end}}

Equivalent to {{c|os &lt;&lt; v.to_string()}}.

===Parameters===
{{par begin}}
{{par | os | a character output stream}}
{{par | v | the view to be inserted}}
{{par end}}

===Return value===
{{tt|os}}</text>
      <sha1>qzk325kkps353v9rhp0djr8y5krf4tf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/operator=</title>
    <ns>0</ns>
    <id>13563</id>
    <revision>
      <id>91748</id>
      <parentid>77014</parentid>
      <timestamp>2017-03-31T19:56:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="791">{{cpp/experimental/basic_string_view/title | operator{{=}}}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |1=
basic_string_view&amp; operator=( const basic_string_view&amp; view ) = default;
}}
{{dcl end}}

Replaces the view with that of {{tt|view}}.

===Parameters===
{{par begin}}
{{par | view | view to copy}}
{{par end}} 

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/string_view&gt;
int main()
{
    std::experimental::string_view v = &quot;Hello, world&quot;;
    v = v.substr(7);
    std::cout &lt;&lt; v &lt;&lt; '\n';
}
|output=
world
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc constructor}}
{{dsc end}}</text>
      <sha1>bqbjlnl95hqrev488sr6oc1krp563mh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/rbegin</title>
    <ns>0</ns>
    <id>13569</id>
    <revision>
      <id>91397</id>
      <parentid>71246</parentid>
      <timestamp>2017-03-31T19:42:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="731">{{cpp/experimental/basic_string_view/title | rbegin | crbegin}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_reverse_iterator rbegin() const;
}}
{{dcl | since=libfund_ts |
constexpr const_reverse_iterator crbegin() const;
}}
{{dcl end}}

Returns a reverse iterator to the first character of the reversed view. It corresponds to the last character of the non-reversed view.

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_reverse_iterator}} to the first character

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rend}}
{{dsc end}}</text>
      <sha1>o2bsquqb0z3fzcw1vc73n8ph6k88wda</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/remove prefix</title>
    <ns>0</ns>
    <id>13582</id>
    <revision>
      <id>82974</id>
      <parentid>77020</parentid>
      <timestamp>2016-01-17T20:54:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>protect example against UB when the string is all space</comment>
      <text xml:space="preserve" bytes="986">{{cpp/experimental/basic_string_view/title | remove_prefix }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr void remove_prefix(size_type n);
}}
{{dcl end}}

Moves the start of the view forward by {{tt|n}} characters.

The behavior is undefined if {{c|n &gt; size()}}.

===Parameters===
{{par begin}}
{{par | n | number of characters to remove from the start of the view}}
{{par end}}

===Return value===
(none)

===Complexity===
Constant.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/string_view&gt;
int main()
{
    std::string str = &quot;   trim me&quot;;
    std::experimental::string_view v = str;
    v.remove_prefix(std::min(v.find_first_not_of(&quot; &quot;), v.size()));
    std::cout &lt;&lt; &quot;String: '&quot; &lt;&lt; str &lt;&lt; &quot;'\n&quot;
              &lt;&lt; &quot;View  : '&quot; &lt;&lt; v &lt;&lt; &quot;'\n&quot;;
}
|output=
String: '   trim me'
View  : 'trim me'
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc remove_suffix }}
{{dsc end}}</text>
      <sha1>5d17rwyl02guluqw2xqldchkze0sh1s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/remove suffix</title>
    <ns>0</ns>
    <id>13583</id>
    <revision>
      <id>82975</id>
      <parentid>80423</parentid>
      <timestamp>2016-01-17T20:58:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>protect example against UB when no \0 are found</comment>
      <text xml:space="preserve" bytes="1106">{{cpp/experimental/basic_string_view/title | remove_suffix }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr void remove_suffix(size_type n);
}}
{{dcl end}}

Moves the end of the view back by {{tt|n}} characters.

The behavior is undefined if {{c|n &gt; size()}}.

===Parameters===
{{par begin}}
{{par | n | number of characters to remove from the end of the view}}
{{par end}}

===Return value===
(none)

===Complexity===
Constant.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/string_view&gt;
int main()
{
    char arr[] = {'a', 'b', 'c', 'd', '\0', '\0', '\0'};
    std::experimental::string_view v(arr, sizeof arr);
    auto trim_pos = v.find('\0');
    if(trim_pos != v.npos)
        v.remove_suffix(v.size() - trim_pos);
    std::cout &lt;&lt; &quot;Array: '&quot; &lt;&lt; arr &lt;&lt; &quot;', size=&quot; &lt;&lt; sizeof arr &lt;&lt; '\n'
              &lt;&lt; &quot;View : '&quot; &lt;&lt; v &lt;&lt; &quot;', size=&quot; &lt;&lt; v.size() &lt;&lt; '\n';
}
|output=
Array: 'abcd', size=7
View : 'abcd', size=4
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc remove_prefix }}
{{dsc end}}</text>
      <sha1>htq81ypr57kw8499rgqscbprq83zry3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/rend</title>
    <ns>0</ns>
    <id>13570</id>
    <revision>
      <id>91345</id>
      <parentid>71286</parentid>
      <timestamp>2017-03-31T19:40:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="890">{{cpp/experimental/basic_string_view/title | rend | crend}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr const_reverse_iterator rend() const;
}}
{{dcl | since=libfund_ts |
constexpr const_reverse_iterator crend() const;
}}
{{dcl end}}

Returns a reverse iterator to the character following the last character of the reversed view. It corresponds to the character preceding the first character of the non-reversed view. This character acts as a placeholder, attempting to access it results in undefined behavior.

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_reverse_iterator}} to the character following the last character.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc rbegin}}
{{dsc end}}</text>
      <sha1>sfdjpof9gtri2ynv2o4g7b82ktccz2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/rfind</title>
    <ns>0</ns>
    <id>13617</id>
    <revision>
      <id>91336</id>
      <parentid>80469</parentid>
      <timestamp>2017-03-31T19:40:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1803">{{cpp/experimental/basic_string_view/title | rfind }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr size_type rfind(basic_string_view v, size_type pos {{=}} npos) const;
}}
{{dcl | num=2 | since=libfund_ts |
constexpr size_type rfind(CharT c, size_type pos {{=}} npos) const;
}}
{{dcl | num=3 | since=libfund_ts |
constexpr size_type rfind(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=libfund_ts |
constexpr size_type rfind(const CharT* s, size_type pos {{=}} npos) const;
}}
{{dcl end}}

Finds the last substring equal to the given character sequence.

@1@Finds the last occurence of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|rfind(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|rfind(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|rfind(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of substring to search for}}
{{par | s | pointer to a character string to search for}}
{{par | ch | character to search for}}
{{par end}} 


===Return value===
Position of the first character of the found substring or {{lc|npos}} if no such substring is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find_last_not_of}}
{{dsc end}}</text>
      <sha1>23c0677n3d4x113tjqgwm6l32ae3qa7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/size</title>
    <ns>0</ns>
    <id>13576</id>
    <revision>
      <id>91607</id>
      <parentid>71257</parentid>
      <timestamp>2017-03-31T19:51:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="693">{{cpp/experimental/basic_string_view/title | size | length}}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr size_type size() const;
}}
{{dcl | since=libfund_ts |
constexpr size_type length() const;
}}
{{dcl end}}

Returns the number of {{tt|CharT}} elements in the view, i.e. {{c|std::distance(begin(), end())}}. 

===Parameters===
(none)

===Return value===
The number of {{tt|CharT}} elements in the view.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc empty }}
{{dsc inc | cpp/experimental/basic_string_view/dsc max_size }}
{{dsc end}}</text>
      <sha1>snd410g06jba4dfcv6bweuv88ckvgek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/substr</title>
    <ns>0</ns>
    <id>13606</id>
    <revision>
      <id>85785</id>
      <parentid>71315</parentid>
      <timestamp>2016-05-17T01:32:23Z</timestamp>
      <contributor>
        <username>Billydonahue</username>
        <id>2770</id>
      </contributor>
      <minor/>
      <comment>Fix '&gt;=' to '&gt;'.  Per TS http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4584.html#string.view.ops</comment>
      <text xml:space="preserve" bytes="789">{{cpp/experimental/basic_string_view/title | substr}}
{{cpp/experimental/basic_string_view/navbar}}
{{ddcl | 1=
constexpr basic_string_view
    substr(size_type pos = 0, size_type count = npos ) const;
}}

Returns a view of the substring {{tt|[pos, pos + rcount)}}, where {{tt|rcount}} is the smaller of {{tt|count}} and {{c|size() - pos}}.

===Parameters===
{{par begin}}
{{par | pos | position of the first character}}
{{par | count | requested length}}
{{par end}} 

===Return value===
View of the substring {{tt|[pos, pos + rcount)}}.

===Exceptions===
{{lc|std::out_of_range}} if {{c|pos &gt; size()}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc copy}}
{{dsc inc | cpp/experimental/basic_string_view/dsc find}}
{{dsc end}}</text>
      <sha1>soao5p4oqauv17x86ollj277ex4tdoq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/swap</title>
    <ns>0</ns>
    <id>13584</id>
    <revision>
      <id>91533</id>
      <parentid>76636</parentid>
      <timestamp>2017-03-31T19:49:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="413">{{cpp/experimental/basic_string_view/title | swap }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
constexpr void swap(basic_string_view&amp; v);
}}
{{dcl end}}

Exchanges the view with that of {{tt|v}}.

===Parameters===
{{par begin}}
{{par | v | view to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.</text>
      <sha1>mo4do43qg0njzh735rvmdb2t18fn5c0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string view/to string</title>
    <ns>0</ns>
    <id>13603</id>
    <revision>
      <id>71307</id>
      <parentid>71306</parentid>
      <timestamp>2014-06-09T04:54:07Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <minor/>
      <comment>Swap function order.</comment>
      <text xml:space="preserve" bytes="922">{{cpp/experimental/basic_string_view/title | to_string | operator basic_string }}
{{cpp/experimental/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts |
template&lt;class Allocator {{=}} allocator&lt;CharT&gt;&gt;
basic_string&lt;CharT, Traits, Allocator&gt;
    to_string(const Allocator&amp; a {{=}} Allocator()) const;
}}
{{dcl | since=libfund_ts |
template&lt;class Allocator&gt;
explicit operator basic_string&lt;CharT, Traits, Allocator&gt;() const;
}}
{{dcl end}}

Creates a {{tt|basic_string}} with a copy of the content of the current view.

===Template parameters===
{{par begin}}
{{par | Allocator | {{concept|Allocator}} type used to allocate internal storage}}
{{par end}}

===Parameters===
{{par begin}}
{{par | a | Allocator instance to use for allocating the new string}}
{{par end}}

===Return value===
A {{tt|basic_string}} containing a copy of the characters of the current view.

===Complexity===
Linear in {{tt|size()}}</text>
      <sha1>b4uqxj42fks33z245y8mf293ak6i2mf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string/erase</title>
    <ns>0</ns>
    <id>14173</id>
    <revision>
      <id>79325</id>
      <timestamp>2015-07-05T20:31:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="52">{{include page|cpp/experimental/erase|basic_string}}</text>
      <sha1>921ipbyl6kapfomp36bay92l0e37shh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/basic string/erase if</title>
    <ns>0</ns>
    <id>14179</id>
    <revision>
      <id>79336</id>
      <timestamp>2015-07-05T20:47:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="55">{{include page|cpp/experimental/erase if|basic_string}}</text>
      <sha1>nzyx29is7t2v213w9x6irfw5963xtul</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/boyer moore horspool searcher</title>
    <ns>0</ns>
    <id>14324</id>
    <revision>
      <id>83910</id>
      <parentid>79779</parentid>
      <timestamp>2016-03-13T19:03:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0253R1</comment>
      <text xml:space="preserve" bytes="6191">{{cpp/experimental/title|boyer_moore_horspool_searcher|make_boyer_moore_horspool_searcher}}
{{cpp/experimental/lib_extensions/navbar}}

{{dcl begin}}
{{dcl header | experimental/functional }}
{{dcl | since=libfund_ts |
template&lt; class RandomIt1,
          class Hash {{=}} std::hash&lt;typename std::iterator_traits&lt;RandomIt1&gt;::value_type&gt;,
          class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
class boyer_moore_horspool_searcher;
}}
{{dcl end}}

A searcher suitable for use with {{ltt|cpp/experimental/search|std::experimental::search}} that implements the [https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore%E2%80%93Horspool_algorithm Boyer-Moore-Horspool string searching algorithm].

{{tt|boyer_moore_horspool_searcher}} is {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

{{tt|RandomIt1}} must meet the requirements of {{concept|RandomAccessIterator}}.

===Member functions===
{{member | {{small|std::experimental::boyer_moore_horspool_searcher::}}boyer_moore_horspool_searcher | 2=
{{dcl begin}}
{{dcl | 
boyer_moore_horspool_searcher( RandomIt1 pat_first,
                               RandomIt1 pat_last,
                               Hash hf {{=}} Hash(),
                               BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}
Constructs a {{tt|boyer_moore_horspool_searcher}} by storing copies of {{tt|pat_first}}, {{tt|pat_last}}, {{tt|hf}}, and {{tt|pred}}, setting up any necessary internal data structures. 

The value type of {{tt|RandomIt1}} must be {{concept|DefaultConstructible}}, {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

For any two values {{tt|A}} and {{tt|B}} of the type {{c|std::iterator_traits&lt;RandomIt1&gt;::value_type}}, if {{c|pred(A, B) {{==}} true}}, then {{c|hf(A) {{==}} hf(B)}} shall be {{tt|true}}.

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | hf | a callable object used to hash the elements of the string }}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Exceptions===
Any exceptions thrown by 
* the copy constructor of {{tt|RandomIt1}};
* the default constructor, copy constructor, or copy assignment operator of the value type of {{tt|RandomIt1}}; or
* the copy constructor or function call operator of {{tt|BinaryPredicate}} or {{tt|Hash}}.
May also throw {{lc|std::bad_alloc}} if additional memory required for internal data structures cannot be allocated.
}}

{{member | {{small|std::experimental::boyer_moore_horspool_searcher::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17|
template&lt; class RandomIt2 &gt;
RandomIt2 operator()( RandomIt2 first, RandomIt2 last ) const;
}}
{{dcl | since=c++17|
template&lt; class RandomIt2 &gt;
std::pair&lt;RandomIt2,RandomIt2&gt; operator()( RandomIt2 first, RandomIt2 last ) const;
}}
{{dcl rev end}}
{{dcl end}}
The member function called by {{ltt|cpp/experimental/search|std::experimental::search}} to perform a search with this searcher. {{tt|RandomIt2}} must meet the requirements of {{concept|RandomAccessIterator}}.

{{tt|RandomIt1}} and {{tt|RandomIt2}} must have the same value type.

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators designating the string to be examined}}
{{par end}}

===Return value===
{{rev begin}}
{{rev|until=c++17|
If the pattern ({{math|[pat_first, pat_last)}}) is empty, returns {{tt|first}}.

Otherwise, an iterator to the first position in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or a copy of {{tt|last}} otherwise.
}}
{{rev|since=c++17|
If the pattern ({{math|[pat_first, pat_last)}}) is empty, returns {{tt|make_pair(first, first)}}.

Otherwise, returns a pair of iterators to the first and one past last positions in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or {{tt|make_pair(last, last)}} otherwise.
}}
{{rev end}}
}}


===Helper Functions===
{{dcl begin}}
{{dcl | since=libfund_ts |
template&lt; class RandomIt, 
          class Hash {{=}} std::hash&lt;typename std::iterator_traits&lt;RandomIt&gt;::value_type&gt;,
          class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
boyer_moore_horspool_searcher&lt;RandomIt, Hash, BinaryPredicate&gt;
    make_boyer_moore_horspool_searcher( RandomIt pat_first,
                                        RandomIt pat_last,
                                        Hash hf {{=}} Hash(),
                                        BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}

Helper function that constructs a {{tt|std::experimental::boyer_moore_horspool_searcher}} using template argument deduction. Equivalent to {{c|return boyer_moore_horspool_searcher&lt;RandomIt, Hash, BinaryPredicate&gt;(pat_first, pat_last, hf, pred);}}

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | hf | a callable object used to hash the elements of the string }}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Return value===
A {{tt|boyer_moore_horspool_searcher}} constructed with the arguments {{tt|pat_first}}, {{tt|pat_last}}, {{tt|hf}}, and {{tt|pred}}.

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;experimental/algorithm&gt;
#include &lt;experimental/functional&gt;
 
int main()
{
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::experimental::search(in.begin(), in.end(),
                   std::experimental::make_boyer_moore_horspool_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}</text>
      <sha1>0sn4yeowlqqx1fy98osgu7pb0kumsn2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/boyer moore searcher</title>
    <ns>0</ns>
    <id>14323</id>
    <revision>
      <id>84385</id>
      <parentid>84377</parentid>
      <timestamp>2016-03-17T20:51:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84377 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="5910">{{cpp/experimental/title|boyer_moore_searcher|make_boyer_moore_searcher}}
{{cpp/experimental/lib_extensions/navbar}}

{{dcl begin}}
{{dcl header | experimental/functional }}
{{dcl | since=libfund_ts |
template&lt; class RandomIt1,
          class Hash {{=}} std::hash&lt;typename std::iterator_traits&lt;RandomIt1&gt;::value_type&gt;,
          class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
class boyer_moore_searcher;
}}
{{dcl end}}

A searcher suitable for use with {{ltt|cpp/experimental/search|std::experimental::search}} that implements the [https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm Boyer-Moore string searching algorithm].

{{tt|boyer_moore_searcher}} is {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

{{tt|RandomIt1}} must meet the requirements of {{concept|RandomAccessIterator}}.

===Member functions===
{{member | {{small|std::experimental::boyer_moore_searcher::}}boyer_moore_searcher | 2=
{{dcl begin}}
{{dcl | 
boyer_moore_searcher( RandomIt1 pat_first,
                      RandomIt1 pat_last,
                      Hash hf {{=}} Hash(),
                      BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}
Constructs a {{tt|boyer_moore_searcher}} by storing copies of {{tt|pat_first}}, {{tt|pat_last}}, {{tt|hf}}, and {{tt|pred}}, setting up any necessary internal data structures. 

The value type of {{tt|RandomIt1}} must be {{concept|DefaultConstructible}}, {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

For any two values {{tt|A}} and {{tt|B}} of the type {{c|std::iterator_traits&lt;RandomIt1&gt;::value_type}}, if {{c|pred(A, B) {{==}} true}}, then {{c|hf(A) {{==}} hf(B)}} shall be {{tt|true}}.

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | hf | a callable object used to hash the elements of the string }}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Exceptions===
Any exceptions thrown by 
* the copy constructor of {{tt|RandomIt1}};
* the default constructor, copy constructor, and copy assignment operator of the value type of {{tt|RandomIt1}}; or
* the copy constructor and function call operator of {{tt|BinaryPredicate}} or {{tt|Hash}}.
May also throw {{lc|std::bad_alloc}} if additional memory required for internal data structures cannot be allocated.
}}

{{member | {{small|std::experimental::boyer_moore_searcher::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++17| 
template&lt; class RandomIt2 &gt;
RandomIt2 operator()( RandomIt2 first, RandomIt2 last ) const;
}}
{{dcl |since=c++17| 
template&lt; class RandomIt2 &gt;
std::pair&lt;RandomIt2,RandomIt2&gt; operator()( RandomIt2 first, RandomIt2 last ) const;
}}
{{dcl rev end}}
{{dcl end}}
The member function called by {{ltt|cpp/experimental/search|std::experimental::search}} to perform a search with this searcher. {{tt|RandomIt2}} must meet the requirements of {{concept|RandomAccessIterator}}.

{{tt|RandomIt1}} and {{tt|RandomIt2}} must have the same value type.

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators designating the string to be examined}}
{{par end}}

===Return value===
{{rev begin}}
{{rev|until=c++17|
If the pattern ({{math|[pat_first, pat_last)}}) is empty, returns {{tt|first}}.

Otherwise, an iterator to the first position in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or a copy of {{tt|last}} otherwise.
}}
{{rev|since=c++17|
If the pattern ({{math|[pat_first, pat_last)}}) is empty, returns {{tt|make_pair(first, first)}}.

Otherwise, returns a pair of iterators to the first and one past last positions in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or {{tt|make_pair(last, last)}} otherwise.
}}
{{rev end}}
}}

===Helper Functions===
{{dcl begin}}
{{dcl | since=libfund_ts |
template&lt; class RandomIt, 
          class Hash {{=}} std::hash&lt;typename std::iterator_traits&lt;RandomIt&gt;::value_type&gt;,
          class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
boyer_moore_searcher&lt;RandomIt, Hash, BinaryPredicate&gt; make_boyer_moore_searcher(
    RandomIt pat_first,
    RandomIt pat_last,
    Hash hf {{=}} Hash(),
    BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}

Helper function that constructs a {{tt|std::experimental::boyer_moore_searcher}} using template argument deduction. Equivalent to {{c|return boyer_moore_searcher&lt;RandomIt, Hash, BinaryPredicate&gt;(pat_first, pat_last, hf, pred);}}

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | hf | a callable object used to hash the elements of the string }}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Return value===
A {{tt|boyer_moore_searcher}} constructed with the arguments {{tt|pat_first}}, {{tt|pat_last}}, {{tt|hf}}, and {{tt|pred}}.

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;experimental/algorithm&gt;
#include &lt;experimental/functional&gt;
 
int main()
{
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::experimental::search(in.begin(), in.end(),
                   std::experimental::make_boyer_moore_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}</text>
      <sha1>l4u31t85p5o1svd3l29do36zwavofl1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/concurrency</title>
    <ns>0</ns>
    <id>14145</id>
    <revision>
      <id>85455</id>
      <parentid>83167</parentid>
      <timestamp>2016-04-21T20:00:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Continuations and other extensions for std::future */ move</comment>
      <text xml:space="preserve" bytes="2395">{{title|Extensions for concurrency}}
{{cpp/experimental/concurrency/navbar}}

The C++ Extensions for Concurrency, ISO/IEC TS 19571:2016, defines the following new components for the C++ standard library:

===Continuations and other extensions for std::future===
{{dsc begin}}
{{dsc header | experimental/future }}
{{dsc inc | cpp/experimental/dsc future}}
{{dsc inc | cpp/experimental/dsc shared_future}}
{{dsc tclass | cpp/experimental/concurrency/promise | a modified version of {{lc|std::promise}}  that uses {{lc|std::experimental::future}} | notes={{mark since concurrency ts}}}}
{{dsc tclass | cpp/experimental/concurrency/packaged_task | a modified version of {{lc|std::packaged_task}} that uses {{lc|std::experimental::future}} | notes={{mark since concurrency ts}}}}
{{dsc inc | cpp/experimental/dsc when_all}}
{{dsc inc | cpp/experimental/dsc when_any}}
{{dsc inc | cpp/experimental/dsc make_ready_future}}
{{dsc inc | cpp/experimental/dsc make_exceptional_future}}
{{dsc end}}

===Latches and barriers===
{{dsc begin}}
{{dsc header | experimental/latch }}
{{dsc inc | cpp/experimental/dsc latch}}
{{dsc header | experimental/barrier }}
{{dsc inc | cpp/experimental/dsc barrier}}
{{dsc inc | cpp/experimental/dsc flex_barrier}}
{{dsc end}}

===Atomic smart pointers===
These class templates replace the shared_ptr [[cpp/memory/shared_ptr/atomic|atomic function overloads]]
{{dsc begin}}
{{dsc header | experimental/atomic }}
{{dsc inc | cpp/experimental/dsc atomic_shared_ptr}}
{{dsc inc | cpp/experimental/dsc atomic_weak_ptr}}
{{dsc end}}


===Feature test macros===
{{dsc begin}}
{{dsc header | experimental/future }}
{{dsc macro const | __cpp_lib_experimental_future_continuations | nolink=true | a value of at least {{c|201505}} indicates that future::then and other extensions are supported }}
{{dsc header | experimental/latch }}
{{dsc macro const | __cpp_lib_experimental_latch | nolink=true | a value of at least {{c|201505}} indicates that the latch type is supported }}
{{dsc header | experimental/barrier }}
{{dsc macro const | __cpp_lib_experimental_barrier | nolink=true | a value of at least {{c|201505}} indicates that barrier type is supported }}
{{dsc header | experimental/atomic }}
{{dsc macro const | __cpp_lib_experimental_atomic_smart_pointers | nolink=true | a value of at least {{c|201505}} indicates that the atomic smart pointers are supported }}
{{dsc end}}</text>
      <sha1>loiwtpwaip935todqwd0kqay2q2jxln</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/concurrency/packaged task</title>
    <ns>0</ns>
    <id>14668</id>
    <revision>
      <id>82482</id>
      <timestamp>2015-12-17T22:23:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1101">{{cpp/experimental/title|packaged_task {{mark since concurrency ts}}}}
{{cpp/experimental/concurrency/navbar}}

''This page is about the modified version of {{lc|std::packaged_task}} provided by the concurrency TS supporting the {{tt|std::future}} improvements made by that TS. For the version of {{tt|packaged_task}} with type-erased allocator support provided by the Library Fundamentals TSes, see {{ltt|cpp/experimental/lib extensions/packaged_task|std::experimental::fundamentals_v2::packaged_task}}.''

{{dcl begin}}
{{dcl header | experimental/future}}
{{dcl | num=1 | since=concurrency |
template&lt; class &gt; class packaged_task; //not defined
}}
{{dcl | num=2 | since=concurrency |
template&lt; class R, class ...Args &gt; 
class packaged_task&lt;R(Args...)&gt;;
}}
{{dcl end}}

{{tt|std::experimental::concurrency_v1::packaged_task}} is a modified version of {{lc|std::packaged_task}} provided by the concurrency TS that works with {{lc|std::experimental::future}}.

The only change from {{lc|std::packaged_task}} is that the {{tt|get_future()}} member function returns a {{c|std::experimental::future&lt;R&gt;}}.</text>
      <sha1>b85lae35iokfc76yzp0nubt8m2h7b9t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/concurrency/promise</title>
    <ns>0</ns>
    <id>14669</id>
    <revision>
      <id>82484</id>
      <parentid>82483</parentid>
      <timestamp>2015-12-17T22:27:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1082">{{cpp/experimental/title|promise {{mark since concurrency ts}}}}
{{cpp/experimental/concurrency/navbar}}

''This page is about the modified version of {{lc|std::promise}} provided by the concurrency TS supporting the {{tt|std::future}} improvements made by that TS. For the version of {{tt|promise}} with type-erased allocator support provided by the Library Fundamentals TSes, see {{ltt|cpp/experimental/lib extensions/promise|std::experimental::fundamentals_v2::promise}}.''

{{dcl begin}}
{{dcl header | experimental/future}}
{{dcl | num=1 | since=concurrency |
template&lt; class R &gt; class promise;
}}
{{dcl | num=2 | since=concurrency |
template&lt; class R &gt; class promise&lt;R&amp;&gt;;
}}
{{dcl | num=3 | since=concurrency |
template&lt;&gt;          class promise&lt;void&gt;;
}}
{{dcl end}}

{{tt|std::experimental::concurrency_v1::promise}} is a modified version of {{lc|std::promise}} provided by the concurrency TS that works with {{lc|std::experimental::future}}.

The only change from {{lc|std::promise}} is that the {{tt|get_future()}} member function returns a {{c|std::experimental::future}}.</text>
      <sha1>a205gqb2mwi70813nzv4fgdh15f9s7g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/conjunction</title>
    <ns>0</ns>
    <id>14517</id>
    <revision>
      <id>86300</id>
      <parentid>81735</parentid>
      <timestamp>2016-06-27T13:33:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merge notice</comment>
      <text xml:space="preserve" bytes="2506">{{cpp/experimental/title|conjunction}}
{{cpp/experimental/lib extensions 2/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 2/2016, see  {{ltt|cpp/types/conjunction|std::conjunction}} {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/type_traits}}
{{dcl | since=libfund_ts_2| 1=
template&lt;class... B&gt;
struct conjunction;
}}
{{dcl end}}

Forms the logical conjunction of the type traits {{tt|B...}}.

The BaseCharacteristic of a specialization {{c|conjunction&lt;B1, ..., BN&gt;}} is the first {{tt|Bi}} for which {{c|1=Bi::value == false}}, or if every {{c|1=Bi::value != false}}, the BaseCharacteristic is {{tt|BN}}.

If {{c|1=sizeof...(B) == 0}}, the BaseCharacteristic is {{c|std::true_type}}.

Conjunction is short-circuiting: if there is a template type argument {{tt|Bi}} with {{c|1=Bi::value == false}}, then instantiating {{c|conjunction&lt;B1, ..., BN&gt;::value}} does not require the instantiation of {{c|Bj::value}} for {{tt|j &gt; i}}

===Template parameters===
{{par begin}}
{{par | B... | every type must be usable as a base class and define member {{c|B::value}} that is convertible to {{c|bool}} }}
{{par end}}

=== Helper variable template ===
{{dcl begin}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class... B&gt;
constexpr bool conjunction_v = conjunction&lt;B...&gt;::value;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class...&gt; struct conjunction : std::true_type { };
template&lt;class B1&gt; struct conjunction&lt;B1&gt; : B1 { };
template&lt;class B1, class... Bn&gt;
struct conjunction&lt;B1, Bn...&gt; : std::conditional_t&lt;B1::value != false, conjunction&lt;Bn...&gt;, B1&gt;  {};
}}

===Notes===
A specialization of {{tt|conjunction}} does not necessarily have a BaseCharacteristic of either {{c|std::true_type}} or {{c|std::false_type}}: it simply inherits the base characteristic of the first B whose ::value, converted to bool, is false, or the base characteristic of the very last B when all of them convert to true. For example, {{c|conjunction&lt;std::integral_constant&lt;int, 2&gt;, std::integral_constant&lt;int, 4&gt;&gt;::value}} is {{c|4}}.

===Example===
{{example|code=
// func is enabled if all Ts... have the same type
template&lt;typename T, typename... Ts&gt;
std::enable_if_t&lt;std::experimental::conjunction_v&lt;std::is_same&lt;T, Ts&gt;...&gt; &gt;
func(T, Ts...) {
 // TODO something to show
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc conjunction}}
{{dsc end}}</text>
      <sha1>oux5g4a99li5ol52q52cf5a5eb3vv4v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/default searcher</title>
    <ns>0</ns>
    <id>14088</id>
    <revision>
      <id>83908</id>
      <parentid>80304</parentid>
      <timestamp>2016-03-13T18:56:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0253R1 was applied to C++17 working paper (after P0220R1 which merged libfun), but I think it should be noted in the experimental pages too</comment>
      <text xml:space="preserve" bytes="4764">{{cpp/experimental/title|default_searcher|make_default_searcher}}
{{cpp/experimental/lib_extensions/navbar}}

{{dcl begin}}
{{dcl header | experimental/functional }}
{{dcl | since=libfund_ts |
template&lt; class ForwardIterator1, class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
class default_searcher;
}}
{{dcl end}}

A class suitable for use with {{ltt|cpp/experimental/search|std::experimental::search}} that delegates the search operation to the standard library's {{lc|std::search}}.

{{tt|default_searcher}} is {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

===Member functions===
{{member | {{small|std::experimental::default_searcher::}}default_searcher | 2=
{{dcl begin}}
{{dcl | 
default_searcher( ForwardIterator pat_first,
                  ForwardIterator pat_last,
                  BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}
Constructs a {{tt|default_searcher}} by storing copies of {{tt|pat_first}}, {{tt|pat_last}}, and {{tt|pred}} 

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Exceptions===
Any exceptions thrown by the copy constructors of {{tt|BinaryPredicate}} or {{tt|ForwardIterator}}.
}}

{{member | {{small|std::experimental::default_searcher::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++17| 
template&lt; class ForwardIterator2 &gt;
ForwardIterator2 operator()( ForwardIterator2 first, ForwardIterator2 last ) const;
}}
{{dcl |since=c++17| 
template&lt; class ForwardIterator2 &gt;
std::pair&lt;ForwardIterator2, ForwardIterator2&gt;
    operator()( ForwardIterator2 first, ForwardIterator2 last ) const;
}}
{{dcl rev end}}
{{dcl end}}
The member function called by {{ltt|cpp/experimental/search|std::experimental::search}} to perform a search with this searcher.
{{rev begin}}
{{rev|until=c++17|
Equivalent to {{c|std::search(first, last, pat_first, pat_last, pred);}}
}}
{{rev|until=c++17|
Returns a pair of iterators {{tt|i, j}}, where {{tt|i}} is {{c|std::search(first, last, pat_first, pat_last, pred)}} and {{tt|j}} is {{c|std::next(i, std::distance(pat_first, pat_last))}} unless {{tt|std::search}} returned {{tt|last}} (no match), in which case {{tt|j}} equals {{tt|last}} as well
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators designating the string to be examined}}
{{par end}}

===Return value===
{{rev begin}}
{{rev|until=c++17|
Iterator to the first position in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or a copy of {{tt|last}} otherwise.
}}
{{rev|since=c++17|
A pair of iterators to the first and one past last positions in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or a pair of copies of {{tt|last}} otherwise.
}}
{{rev end}}
}}


===Helper Functions===
{{dcl begin}}
{{dcl | since=libfund_ts |
template&lt; class ForwardIterator, class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
default_searcher&lt;ForwardIterator, BinaryPredicate&gt; make_default_searcher(
    ForwardIterator pat_first,
    ForwardIterator pat_last,
    BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}

Helper function that constructs a {{tt|std::experimental::default_searcher}} using template argument deduction. Equivalent to {{c|return default_searcher&lt;ForwardIterator, BinaryPredicate&gt;(pat_first, pat_last, pred);}}

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Return value===
A {{tt|default_searcher}} constructed with the arguments {{tt|pat_first}}, {{tt|pat_last}}, {{tt|pred}}.

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;experimental/algorithm&gt;
#include &lt;experimental/functional&gt;
 
int main()
{
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::experimental::search(in.begin(), in.end(),
                   std::experimental::make_default_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}</text>
      <sha1>3vc3ytkyz68uj3du4ia0blumkoo8z8x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/deque/erase</title>
    <ns>0</ns>
    <id>14174</id>
    <revision>
      <id>79326</id>
      <timestamp>2015-07-05T20:32:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="45">{{include page|cpp/experimental/erase|deque}}</text>
      <sha1>23fwc87afuzljx34ltek6vveqt1hsao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/deque/erase if</title>
    <ns>0</ns>
    <id>14180</id>
    <revision>
      <id>79337</id>
      <timestamp>2015-07-05T20:47:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="48">{{include page|cpp/experimental/erase if|deque}}</text>
      <sha1>eay89snh5rnjbdxwyzps0366wetd5ou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/detected or</title>
    <ns>0</ns>
    <id>14099</id>
    <redirect title="cpp/experimental/is detected" />
    <revision>
      <id>78465</id>
      <parentid>78459</parentid>
      <timestamp>2015-05-23T21:03:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/experimental/is_detected]]</text>
      <sha1>lnqqzqmr1yq2ssdiyme4y4qpyrv1zum</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/disjunction</title>
    <ns>0</ns>
    <id>14518</id>
    <revision>
      <id>86301</id>
      <parentid>81732</parentid>
      <timestamp>2016-06-27T13:33:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merge notice</comment>
      <text xml:space="preserve" bytes="2299">{{cpp/experimental/title|disjunction}}
{{cpp/experimental/lib extensions 2/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 2/2016, see  {{ltt|cpp/types/disjunction|std::disjunction}} {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/type_traits}}
{{dcl | since=libfund_ts_2| 1=
template&lt;class... B&gt;
struct disjunction;
}}
{{dcl end}}

Forms the logical disjunction of the type traits {{tt|B...}}.

The BaseCharacteristic of a specialization {{c|disjunction&lt;B1, ..., BN&gt;}} is the first {{tt|Bi}} for which {{c|1=Bi::value != false}}, or if every {{c|1=Bi::value == false}}, the BaseCharacteristic is {{tt|BN}}.

If {{c|1=sizeof...(B) == 0}}, the BaseCharacteristic is {{c|std::false_type}}.

Disjunction is short-circuiting: if there is a template type argument {{tt|Bi}} with {{c|1=Bi::value != false}}, then instantiating {{c|disjunction&lt;B1, ..., BN&gt;::value}} does not require the instantiation of {{c|Bj::value}} for {{tt|j &gt; i}}

===Template parameters===
{{par begin}}
{{par | B... | every type must be usable as a base class and define member {{c|B::value}} that is convertible to {{c|bool}} }}
{{par end}}

=== Helper variable template ===
{{dcl begin}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class... B&gt;
constexpr bool disjunction_v = disjunction&lt;B...&gt;::value;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class...&gt; struct disjunction : std::false_type { };
template&lt;class B1&gt; struct disjunction&lt;B1&gt; : B1 { };
template&lt;class B1, class... Bn&gt;
struct disjunction&lt;B1, Bn...&gt; : std::conditional_t&lt;B1::value != false, B1, disjunction&lt;Bn...&gt;&gt;  { };
}}

===Notes===
A specialization of {{tt|disjunction}} does not necessarily have a BaseCharacteristic of either {{c|std::true_type}} or {{c|std::false_type}}: it simply inherits the base characteristic of the first B whose ::value, converted to bool, is true, or the base characteristic of the very last B when all of them convert to false. For example, {{c|disjunction&lt;std::integral_constant&lt;int, 2&gt;, std::integral_constant&lt;int, 4&gt;&gt;::value}} is {{c|2}}.

===Example===
{{example|code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc disjunction}}
{{dsc end}}</text>
      <sha1>4uvb7w0h507tu39ij19sthcpfp1bs86</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/dsc erase</title>
    <ns>0</ns>
    <id>14168</id>
    <redirect title="Template:cpp/experimental/dsc erase" />
    <revision>
      <id>79313</id>
      <timestamp>2015-07-05T19:41:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[cpp/experimental/dsc erase]] to [[Template:cpp/experimental/dsc erase]]</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[Template:cpp/experimental/dsc erase]]</text>
      <sha1>qcvf84el1igztj1ld0o9pdgmunnaspw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/dsc erase if</title>
    <ns>0</ns>
    <id>14169</id>
    <redirect title="Template:cpp/experimental/dsc erase if" />
    <revision>
      <id>79315</id>
      <timestamp>2015-07-05T19:41:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[cpp/experimental/dsc erase if]] to [[Template:cpp/experimental/dsc erase if]]</comment>
      <text xml:space="preserve" bytes="52">#REDIRECT [[Template:cpp/experimental/dsc erase if]]</text>
      <sha1>8exfz3cyc40bbdwaux6ime1791piddo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/erased type</title>
    <ns>0</ns>
    <id>14091</id>
    <revision>
      <id>78429</id>
      <timestamp>2015-05-23T08:13:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>start</comment>
      <text xml:space="preserve" bytes="513">{{cpp/experimental/title|erased_type}}
{{cpp/experimental/lib_extensions/navbar}}
{{dcl begin}}
{{dcl header | experimental/utility}}
{{dcl | since=libfund_ts |
struct erased_type { };
}}
{{dcl end}}

The struct {{tt|erased_type}} is an empty struct that serves as a placeholder for a type in situations where the actual type is determined at runtime. For example, in classes that use [[cpp/experimental/memory|type-erased allocators]], the nested typedef {{tt|allocator_type}} is an alias for {{tt|erased_type}}.</text>
      <sha1>pvd0ezlh6dwsg34fmmomh2if1k98bz4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/execution policy tag</title>
    <ns>0</ns>
    <id>14367</id>
    <revision>
      <id>80070</id>
      <timestamp>2015-07-29T05:07:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="737">{{cpp/experimental/parallel/title|seq|par|par_vec}}
{{cpp/experimental/parallelism/navbar}}

{{dcl begin}}
{{dcl header | experimental/execution_policy }}
{{dcl | since=parallelism_ts |
constexpr sequential_execution_policy seq{};
}}
{{dcl | since=parallelism_ts  |
constexpr parallel_execution_policy par{};
}}
{{dcl | since=parallelism_ts  |
constexpr parallel_vector_execution_policy par_vec{};
}}
{{dcl end}}

{{tt|seq}}, {{tt|par}} and {{tt|par_vec}} are instances of the execution policy types {{tt|sequential_execution_policy}}, {{tt|parallel_execution_policy}} and {{tt|parallel_vector_execution_policy}} respectively. They are used to specify the execution policy of parallel algorithms - i.e., the kinds of parallelism allowed.</text>
      <sha1>1n0whj4nfgolt937ogu159juh51ttpy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/execution policy tag t</title>
    <ns>0</ns>
    <id>14366</id>
    <revision>
      <id>80069</id>
      <timestamp>2015-07-29T05:04:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="735">{{cpp/experimental/parallel/title|sequential_execution_policy|parallel_execution_policy|parallel_vector_execution_policy}}
{{cpp/experimental/parallelism/navbar}}

{{dcl begin}}
{{dcl header | experimental/execution_policy }}
{{dcl | since=parallelism_ts |
class sequential_execution_policy { /* unspecified */ };
}}
{{dcl | since=parallelism_ts  |
class parallel_execution_policy { /* unspecified */ };
}}
{{dcl | since=parallelism_ts  |
class parallel_vector_execution_policy { /* unspecified */ };
}}
{{dcl end}}

{{tt|sequential_execution_policy}}, {{tt|parallel_execution_policy}} and {{tt|parallel_vector_execution_policy}} are tag types used to indicate the kinds of
parallelism allowed in the execution of a parallel algorithm.</text>
      <sha1>t4ewte4k3igkjcl9x6g9jupkszhmnsp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/feature test</title>
    <ns>0</ns>
    <id>14049</id>
    <revision>
      <id>87003</id>
      <parentid>81870</parentid>
      <timestamp>2016-07-20T15:20:49Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Language Features */ rename and relocate __cpp_concepts</comment>
      <text xml:space="preserve" bytes="13702">{{title|Feature Test Recommendations}}
To track progress of partial implementation of C++ standards and experimantal features, the feature test recommendations provide a set of [[cpp/preprocessor/replace|preprocessor macros]] which, if defined by the implementation, give a simple and portable way to detect the presence of said features.

===Function Macros===
Feature test function macros can be expanded in the expression of [[cpp/preprocessor/conditional|#if]] and [[cpp/preprocessor/conditional|#elif]].
They will be treated as defined macros by [[cpp/preprocessor/conditional|#ifdef]],  [[cpp/preprocessor/conditional|#ifndef]] and [[cpp/preprocessor/conditional|defined]] but cannot be used anywhere else.

====Finding Headers====
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|__has_include( }}{{spar|header-name}}{{ttb| )}} }}
{{sdsc end}}

Perform a check on the header file name in the same way a [[cpp/preprocessor/include|#include]] directive would interpret it.

If the header is found, it expands to {{tt|1}}, {{tt|0}} otherwise.

Note: {{ltt|cpp/preprocessor/include|__has_include}} is part of C++17.

====Attributes====
{{sdsc begin}}
{{sdsc | {{ttb|__has_cpp_attribute( }}{{spar|attribute-token}}{{ttb| )}} }}
{{sdsc end}}

Checks for the presence of an [[cpp/language/attributes|attribute]].

For standard attributes, it will expand to the year and month in which the attribute was added to the working draft, the presence of vendor-specific attributes is determined by a non-zero value.

===Language Features===

The following macros expand to a numeric value corresponding to the year and month when the feature has been included in the working draft.

When a feature changes significantly, the macro will be updated accordingly.

{{todo|link all features to their own page}}

&lt;!--This table is ahead of [http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations].--&gt;

{| class=&quot;wikitable sortable&quot;
|-
! Macro name
! Feature
! Value
! Header
! Standard/TS
|-
|{{c|__cpp_aggregate_nsdmi}}||[[cpp/language/aggregate_initialization|Member initializers and aggregates]]||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_alias_templates}}||[[cpp/language/type_alias|Template aliases]]||200704||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_attributes}}||[[cpp/language/attributes|Attributes]]||200809||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_binary_literals}}||[[cpp/language/integer literal|Binary Literals in the C++ Core Language]]||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_concepts}}||[[cpp/language/constraints|constraints and concepts]]||201507||''predefined''||{{mark since concepts ts}}
|-
|rowspan=&quot;2&quot; | {{c|__cpp_constexpr}}||{{ltt|cpp/language/constexpr}}||200704||''predefined''||{{mark c++11}}
|-
|Relaxing constraints on constexpr functions / constexpr member functions and implicit const||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_decltype}}||{{ltt|cpp/language/decltype}}||200707||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_decltype_auto}}||[[cpp/language/auto|Return type deduction for normal functions]]||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_delegating_constructors}}||[[cpp/language/initializer_list#Delegating_constructor|Delegating Constructors]]||200604||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_exceptions}}||[[cpp/language/exceptions|Exception handling]]||199711||''predefined''||{{mark|c++98}}
&lt;!--|-
|{{c|__cpp_explicit_conversions}}||[[cpp/language/cast_operator|Explicit conversion operators]]||200710||''predefined''||{{mark c++11}}--&gt;
&lt;!--|-
|{{c|__cpp_forward_decl_enum}}||[[cpp/language/enum|Forward declaration of enumerations]]||200809||''predefined''||{{mark c++11}}--&gt;
|-
|{{c|__cpp_generic_lambdas}}||[[cpp/language/lambda|Generic (Polymorphic) Lambda Expressions]]||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_inheriting_constructors}}||[[cpp/language/using_declaration#Inheriting_constructors|Inheriting Constructors]]||200802||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_init_captures}}||[[cpp/language/lambda|Generalized Lambda-capture]]||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_initializer_lists}}||[[cpp/language/list_initialization|Initializer lists]]||200806||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_lambdas}}||[[cpp/language/lambda|Lambda expressions]]||200907||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_lib_chrono_udls}}||[[cpp/chrono/duration#Literals|User-defined Literals for Time Types]]||201304||{{header|chrono}}||{{mark c++14}}
|-
|{{c|__cpp_lib_complex_udls}}||[[cpp/numeric/complex/operator&quot;&quot;i|User-defined Literals for std::complex]]||201309||{{header|complex}}||{{mark c++14}}
|-
|{{c|__cpp_lib_exchange_function}}||[[cpp/utility/exchange|exchange() utility function]]||201304||{{header|utility}}||{{mark c++14}}
|-
|{{c|__cpp_lib_experimental_any}}||class [[cpp/experimental/any|any]]||201411||{{header|experimental/any}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_apply}}||{{ltf|cpp/experimental/apply}} call a function with arguments from a tuple||201402||{{header|experimental/tuple}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|boyer_moore_searching}}||Extending {{lc|std::search}} to use Additional Searching Algorithms||201411||{{header|experimental/functional}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|filesystem}}||[[cpp/experimental/fs|Filesystem library]]||201406||{{header|experimental/filesystem}}||{{mark since fs ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|function_erased_allocator}}||Type-erased allocator for {{lc|std::function}}||201406||{{header|experimental/functional}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|invocation_type}}||[[cpp/experimental/invocation_type|Invocation type traits]]||201406||{{header|experimental/type_traits}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|memory_resources}}||[[cpp/experimental/memory|Polymorphic Memory Resources]]||201402||{{header|experimental/memory_resource}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|optional}}||[[cpp/experimental/optional|optional]] objects||201411||{{header|experimental/optional}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|packaged_task_erased_allocator}}||Type-erased allocator for {{lc|std::packaged_task}}||201406||{{header|experimental/future}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|promise_erased_allocator}}||Type-erased allocator for {{lc|std::promise}}||201406||{{header|experimental/future}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_sample}}||{{ltt|cpp/experimental/sample}}||201402||{{header|experimental/algorithm}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|shared_ptr_arrays}}||Extending shared_ptr to Support Arrays||201406||{{header|experimental/memory}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|string_view}}||[[cpp/experimental/basic_string_view|string_view]]: a non-owning reference to a string||201411||{{header|experimental/string_view}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_experimental_}}{{c|type_trait_variable_templates}}||Variable templates For type traits||201402||{{header|experimental/type_traits}}||{{mark since libfund ts}}
|-
|{{c|__cpp_lib_generic_}}{{c|associative_lookup}}||Adding heterogeneous comparison lookup to associative containers||201304||{{header|map}} {{header|set}}||{{mark c++14}}
|-
|{{c|__cpp_lib_integer_sequence}}||[[cpp/utility/integer_sequence|Compile-time integer sequences]]||201304||{{header|utility}}||{{mark c++14}}
|-
|{{c|__cpp_lib_integral_}}{{c|constant_callable}}||{{lc|std::integral_constant|std::integral_constant::operator()}}||201304||{{header|type_traits}}||{{mark c++14}}
|-
|{{c|__cpp_lib_is_final}}||{{ltt|cpp/types/is_final|std::is_final}}||201402||{{header|type_traits}}||{{mark c++14}}
|-
|{{c|__cpp_lib_is_null_pointer}}||{{ltt|cpp/types/is_null_pointer|std::is_null_pointer}}||201309||{{header|type_traits}}||{{mark c++14}}
|-
|{{c|__cpp_lib_make_unique}}||{{lc|std::make_unique}}||201304||{{header|memory}}||{{mark c++14}}
|-
|{{c|__cpp_lib_make_}}{{c|reverse_iterator}}||{{ltt|cpp/iterator/make_reverse_iterator|std::make_reverse_iterator}}||201402||{{header|iterator}}||{{mark c++14}}
|-
|{{c|__cpp_lib_null_iterators}}||Null {{concept|ForwardIterator}}s||201304||{{header|iterator}}||{{mark c++14}}
|-
|{{c|__cpp_lib_experimental_}}{{c|parallel_algorithm}}||[[cpp/experimental/parallelism|Extensions for parallelism]]||201505||{{header|experimental/algorithm}} {{header|experimental/exception_list}} {{header|experimental/execution_policy}} {{header|experimental/numeric}}||{{mark since parallelism ts}}
|-
|{{c|__cpp_lib_quoted_string_io}}||{{lc|std::quoted}}||201304||{{header|iomanip}}||{{mark c++14}}
|-
|{{c|__cpp_lib_result_of_sfinae}}||{{lc|std::result_of}} and SFINAE||201210||{{header|type_traits}}||{{mark c++14}}
|-
|{{c|__cpp_lib_robust_}}{{c|nonmodifying_seq_ops}}||Making non-modifying sequence operations more robust (two-range overloads for {{lc|std::mismatch}}, {{lc|std::equal}} and {{lc|std::is_permutation}})||201304||{{header|algorithm}}||{{mark c++14}}
|-
|{{c|__cpp_lib_shared_timed_mutex}}||A proposal to rename shared_mutex to shared_timed_mutex||201402||{{header|shared_mutex}}||{{mark c++14}}
|-
|{{c|__cpp_lib_string_udls}}||[[cpp/string/basic_string/operator&quot;&quot;s|User-defined Literals for String Types]]||201304||{{header|string}}||{{mark c++14}}
|-
|{{c|__cpp_lib_transformation}}{{c|_trait_aliases}}||TransformationTraits Redux||201304||{{header|type_traits}}||{{mark c++14}}
|-
|{{c|__cpp_lib_tuple_element_t}}||Consistent Metafunction Aliases||201402||{{header|utility}}||{{mark c++14}}
|-
|{{c|__cpp_lib_tuples_by_type}}||[[cpp/utility/tuple/get|Addressing Tuples by Type]]||201304||{{header|utility}}||{{mark c++14}}
|-
|{{c|__cpp_lib_}}{{c|transparent_operators}}||Making Operator Functors greater&lt;&gt;||201210||{{header|functional}}||{{mark c++14}}
&lt;!--|-
|{{c|__cpp_noexcept}}||{{ltt|cpp/language/noexcept}}||201003||''predefined''||{{mark c++11}}--&gt;
|-
|{{c|__cpp_nsdmi}}||[[cpp/language/data_members#Member_initialization|Non-static data member initializers]]||200809||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_range_based_for}}||[[cpp/language/range-for|Range-for loop]]||200907||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_raw_strings}}||[[cpp/language/string_literal|Raw String Literals]]||200710||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_ref_qualifiers}}||[[cpp/language/member_functions|ref-qualifiers]]||200710||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_return_type_deduction}}||[[cpp/language/auto|Return type deduction for normal functions]]||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_rtti}}||Run-time type identification ({{ltt|cpp/language/dynamic_cast}}, {{ltt|cpp/language/typeid}})||199711||''predefined''||{{mark|c++98}}
|-
|{{c|__cpp_rvalue_references}}||[[cpp/language/reference|Rvalue reference]]||200610||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_sized_deallocation}}||[[cpp/memory/new/operator_delete|Sized Deallocation]]||201309||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_static_assert}}||{{ltt|cpp/language/static_assert}}||200410||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_transactional_memory}}||[[cpp/language/transactional_memory|Transactional Memory]]||201505||''predefined''||{{mark since tm ts}}
|-
|{{c|__cpp_unicode_characters}}||[[cpp/language/types|New character types]] ({{c|char16_t}} and {{c|char32_t}})||200704||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_unicode_literals}}||[[cpp/language/string_literal|Unicode String Literals]]||200710||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_user_defined_literals}}||[[cpp/language/user_literal|User-defined Literals]]||200809||''predefined''||{{mark c++11}}
|-
|{{c|__cpp_variable_templates}}||[[cpp/language/variable_template|Variable Templates]]||201304||''predefined''||{{mark c++14}}
|-
|{{c|__cpp_variadic_templates}}||[[cpp/language/parameter_pack|Variadic templates]]||200704||''predefined''||{{mark c++11}}
|-
|}

===Example===
{{example|code=
#ifdef __has_include                           // Check if __has_include is present
#  if __has_include(&lt;optional&gt;)                // Check for a standard library
#    include&lt;optional&gt;
#  elif __has_include(&lt;experimental/optional&gt;) // Check for an experimental version
#    include &lt;experimental/optional&gt;
#  elif __has_include(&lt;boost/optional.hpp&gt;)    // Try with an external library
#    include &lt;boost/optional.hpp&gt;
#  else                                        // Not found at all
#     error &quot;Missing &lt;optional&gt;&quot;
#  endif
#endif

#ifdef __has_cpp_attribute                      // Check if __has_cpp_attribute is present
#  if __has_cpp_attribute(deprecated)           // Check for an attribute
#    define DEPRECATED(msg) [[deprecated(msg)]]
#  endif
#endif
#ifndef DEPRECATED
#    define DEPRECATED(msg)
#endif

DEPRECATED(&quot;foo() has been deprecated&quot;) void foo();

#if __cpp_constexpr &gt;{{=}} 201304                   // Check for a specific version of a feature
#  define CONSTEXPR constexpr
#else
#  define CONSTEXPR
#endif

CONSTEXPR int bar(unsigned i)
{
#ifdef __cpp_binary_literals                    // Check for the presence of a feature
    unsigned mask1 {{=}} 0b11000000;
    unsigned mask2 {{=}} 0b00000111;
#else
    unsigned mask1 {{=}} 0xA0;
    unsigned mask2 {{=}} 0x07;
#endif
    if ( i &amp; mask1 )
        return 1;
    if ( i &amp; mask2 )
        return 2;
    return 0;
}

int main()
{
}
}}

===See Also===

{{dsc begin}}
{{dsc|[http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations Standing Document 6]|The official document on Feature Test Recommendations}}
{{dsc end}}</text>
      <sha1>sklponyqyk0sp7rezry5ay6i9gc9bdn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/flex barrier</title>
    <ns>0</ns>
    <id>15417</id>
    <revision>
      <id>85430</id>
      <parentid>85395</parentid>
      <timestamp>2016-04-21T19:07:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1934">{{cpp/experimental/title|flex_barrier}}
{{cpp/experimental/concurrency/flex_barrier/navbar}}
{{dcl begin}}
{{dcl header|experimental/barrier}}
{{dcl | since=concurrency || 1=
class flex_barrier;
}}
{{dcl end}}

The class {{tt|std::experimental::flex_barrier}} provides a thread-coordination mechanism that allows a set of participating threads to block until an operation is completed. Unlike {{lc|std::experimental::latch}}, barriers are reusable; once the participating threads are released from a barrier's synchronization point, they can reuse the same barrier.

A barrier has a completion phase, which is executed by one of the participating threads once all threads in the set of participating threads arrive at the synchronization point. The {{tt|arrive_and_wait}} and {{tt|arrive_and_drop}} calls [[cpp/atomic/memory_order|synchronize with]] the start of the completion phase; the end of the completion phase synchronizes with the returns from all calls blocked by its completion.

{{tt|std::experimental::flex_barrier}} allows the user to control the completion phase with a function object. If the function object returns -1, the set of participating threads is unchanged (and the same set of participating threads must arrive at the synchronization point in the next cycle); otherwise the set of participating threads becomes a new set with a size equal to the returned value {{tt|N}}, and consists of the next {{tt|N}} threads to arrive at the barrier's synchronization point.

Users who do not need this functionality can use {{lc|std::experimental::barrier}}.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/flex_barrier/dsc constructor}}
{{dsc inc | cpp/experimental/flex_barrier/dsc destructor}}
{{dsc inc | cpp/experimental/flex_barrier/dsc operator{{=}}}}

{{dsc inc | cpp/experimental/flex_barrier/dsc arrive_and_wait}}
{{dsc inc | cpp/experimental/flex_barrier/dsc arrive_and_drop}}

{{dsc end}}</text>
      <sha1>dyep31mpwh6sn53ynnbwov5pexl4uon</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/flex barrier/arrive and drop</title>
    <ns>0</ns>
    <id>15439</id>
    <revision>
      <id>85628</id>
      <parentid>85512</parentid>
      <timestamp>2016-04-27T23:28:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ adjust based on discussion with proposal author</comment>
      <text xml:space="preserve" bytes="1453">{{cpp/experimental/flex_barrier/title|arrive_and_drop}}
{{cpp/experimental/concurrency/flex_barrier/navbar}}
{{dcl begin}}
{{dcl | since=concurrency | 1=
void arrive_and_drop();
}}
{{dcl end}}

Arrive at the {{tt|flex_barrier}}'s synchronization point and remove the current thread from the set of participating threads. It is unspecified whether this function blocks until the completion phase has ended. If the function blocks, the calling thread may be chosen to execute the completion phase.

The behavior is undefined if the calling thread is not in the set of participating threads of this {{tt|flex_barrier}}.

Calls to {{tt|arrive_and_drop}} synchronizes with the start of the completion phase of the {{tt|flex_barrier}}. If the call blocks, then the completion of the completion phase synchronizes with the return from the call.

Calls to {{tt|arrive_and_drop}} and {{tt|arrive_and_wait}} never introduce data races with themselves or each other.

=== Exceptions ===
Throws nothing.

=== Notes ===
The completion phase will be executed even if every participating thread calls {{tt|arrive_and_drop}}.

After a thread calls {{tt|arrive_and_drop}} on a {{tt|flex_barrier}}, it cannot call any member function on that barrier except for the destructor, even if the function object invoked by the completion phase returns a positive value.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/flex_barrier/dsc arrive_and_wait }}
{{dsc end}}</text>
      <sha1>1c3jbjff1rup1fdl4511larozr10bqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/flex barrier/arrive and wait</title>
    <ns>0</ns>
    <id>15438</id>
    <revision>
      <id>85513</id>
      <parentid>85438</parentid>
      <timestamp>2016-04-22T22:03:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1803">{{cpp/experimental/flex_barrier/title|arrive_and_wait}}
{{cpp/experimental/concurrency/flex_barrier/navbar}}
{{dcl begin}}
{{dcl | since=concurrency | 1=
void arrive_and_wait();
}}
{{dcl end}}

Blocks and arrives at the {{tt|flex_barrier}}'s synchronization point.

The behavior is undefined if the calling thread is not in the set of participating threads of this {{tt|flex_barrier}}.

Calls to {{tt|arrive_and_wait}} synchronizes with the start of the completion phase of the {{tt|flex_barrier}}. The completion of the completion phase synchronizes with the return from the call.

Calls to {{tt|arrive_and_drop}} and {{tt|arrive_and_wait}} never introduce data races with themselves or each other.

=== Notes ===
It is safe for a thread to call either {{tt|arrive_and_wait()}} or {{tt|arrive_and_drop()}} immediately on return from this call (provided that the function object for the completion phase did not return zero). It's not necessary to ensure that all blocked threads have exited {{tt|arrive_and_wait()}} before a thread calls it again.

The completion phase executes the function object specified when the {{tt|flex_barrier}} was constructed. If it returns -1, the set of participating threads is unchanged; otherwise, the set of participating threads is a new set with the size equal to the return value {{tt|N}}, and consists of the next {{tt|N}} threads to arrive at the synchronization point. If {{c|1=N == 0}}, the {{tt|flex_barrier}} can only be destroyed.

The initial set of participating threads for a {{tt|flex_barrier}} constructed for {{tt|num_threads}} threads is the first {{tt|num_threads}} to arrive at its synchronization point.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/flex_barrier/dsc arrive_and_drop }}
{{dsc end}}</text>
      <sha1>0zpys4vhfjsfjeysmgrjsu12qo6f405</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/flex barrier/flex barrier</title>
    <ns>0</ns>
    <id>15435</id>
    <revision>
      <id>85429</id>
      <parentid>85427</parentid>
      <timestamp>2016-04-21T19:05:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1511">{{cpp/experimental/flex_barrier/title|flex_barrier}}
{{cpp/experimental/concurrency/flex_barrier/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=concurrency | 1= 
explicit flex_barrier( std::ptrdiff_t num_threads );
}}
{{dcl | num=2 | since=concurrency | 1=
template &lt; class F &gt;
flex_barrier( std::ptrdiff_t num_threads, F completion );
}}
{{dcl | num=3 | since=concurrency | 1= 
flex_barrier( const flex_barrier &amp; ) = delete;
}}
{{dcl end}}

@1@ Has the same effect as {{c|flex_barrier(num_threads, c)}}, where {{tt|c}} is a {{concept|Callable}} object whose invocation returns -1 and has no side effects.
@2@ Constructs a {{tt|flex_barrier}} for {{tt|num_threads}} participating threads, using {{tt|completion}} for the completion phase. The set of participating threads is the first {{tt|num_threads}} threads to arrive at the synchronization point.
@3@ Copy constructor is deleted; {{tt|flex_barrier}} is not copyable.

===Parameters===
{{par begin}}
{{par | num_threads | the number of participating threads for the {{tt|flex_barrier}}; must be non-negative }}
{{par | completion | A function object controlling the completion phase; must be {{concept|Callable}} with no arguments and return type {{lc|std::ptrdiff_t}}, and when invoked, must return a value no less than -1 and must not throw an exception. }}
{{par hreq}}
{{par req concept | F | CopyConstructible }}
{{par end}}

=== Notes ===
If {{tt|num_threads}} is zero, the set of participating threads is empty, and flex_barrier can only be destroyed.</text>
      <sha1>3pxidazplqhcahjp8fstvjee2qz59lm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/flex barrier/~flex barrier</title>
    <ns>0</ns>
    <id>15437</id>
    <revision>
      <id>85433</id>
      <parentid>85432</parentid>
      <timestamp>2016-04-21T19:08:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>tt</comment>
      <text xml:space="preserve" bytes="298">{{cpp/experimental/flex_barrier/title|~flex_barrier}}
{{cpp/experimental/concurrency/flex_barrier/navbar}}
{{dcl begin}}
{{dcl | since=concurrency | 1=
~flex_barrier();
}}
{{dcl end}}

Destroys the {{tt|flex_barrier}}.

The behavior is undefined if a thread is blocked at the synchronization point.</text>
      <sha1>7yb94ea1ld555ntxgnx1zzw70xxln4h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/forward list/erase</title>
    <ns>0</ns>
    <id>14176</id>
    <revision>
      <id>79328</id>
      <timestamp>2015-07-05T20:32:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="52">{{include page|cpp/experimental/erase|forward_list}}</text>
      <sha1>7wne0dkbhbksoccwgr8reo25uzqcnpu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/forward list/erase if</title>
    <ns>0</ns>
    <id>14182</id>
    <revision>
      <id>79339</id>
      <timestamp>2015-07-05T20:48:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="55">{{include page|cpp/experimental/erase if|forward_list}}</text>
      <sha1>lu6z14i31g9z01m27vi7qiqr5z1hwgo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs</title>
    <ns>0</ns>
    <id>13361</id>
    <revision>
      <id>84991</id>
      <parentid>82005</parentid>
      <timestamp>2016-03-23T15:45:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>merged box</comment>
      <text xml:space="preserve" bytes="6092">{{title|Filesystem library}}
{{cpp/experimental/fs/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016; see [[cpp/filesystem|the filesystem library]] {{mark since c++17}} }}

The Filesystem library, ISO/IEC TS 18822:2015, provides facilities for performing operations on file systems and their components, such as paths, regular files, and directories.

This library is an optional [[cpp/experimental|technical specification]] and may be unavailable if a hierarchical file system is not accessible to the implementation, or if it does not provide the necessary capabilities. Some features may not be available if they are not supported by the underlying file system (e.g. FAT filesystem has no hardlinks, softlinks, and other features)

The behavior is [[cpp/language/ub|undefined]] if the calls to functions in this library introduce a ''file system race'', that is, when multiple threads, processes, or computers interleave access and modification to the same object in a file system.

This library is directly based on [http://www.boost.org/doc/libs/release/libs/filesystem/doc/index.htm boost.filesystem], which is currently available on more compilers and platforms than this experimental technical specification.

====Library-wide concepts====
* ''file'': a file system object that holds data, can be written to, read from, or both. Files have names, attributes, one of which is file type:
:* ''directory'': a file that acts as a container of directory entries, which identify other files (some of which may be other, nested, directories). When discussing a particular file, the directory in which it appears as an entry is its ''parent directory''. The parent directory can be represented by the relative pathname {{c|&quot;..&quot;}}
:* ''hard link'': a directory entry that associates a name with an existing file. If multiple hard links are supported, the file is removed after the last hard link to it is removed.
:* ''symbolic link'': a directory entry that associates a name with a path, which may or may not exist. 
:* ''regular file'': a file that is not one of the other file types
* ''file name'': a string of characters that names a file. Permissible characters, case sensitivity, maximum length, and the disallowed names are implementation-defined. Names {{c|.}} (dot) and {{c|..}} (dot-dot) have special meaning at library level.
* ''path'': sequence of elements that identifies a file. It begins with an optional {{spar|root-name}} (e.g. {{c|&quot;C:&quot;}} or {{c|&quot;//server&quot;}}), followed by optional {{spar|root-directory}} (e.g. {{c|&quot;/&quot;}} on Unix), followed by a sequence of zero or more file names (all but last of which have to be directories or links to directories). The native format (e.g. which characters are used as separators) and character encoding of the string representation of a path (the ''pathname'') is implementation-defined, this library provides portable representation of paths.
:* ''absolute path'': a path that unambiguously identifies the location of a file
:* ''canonical path'': an absolute path that includes no symlinks, {{c|&quot;.&quot;}} or {{c|&quot;..&quot;}} elements.
:* ''relative path'': a path that identifies a file relative to some location on the file system. The special path names {{c|.}} (dot, &quot;current directory&quot;) and {{c|..}} (dot-dot, &quot;parent directory&quot;) are relative paths.

===Classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc path}} &lt;!-- including  swap, hash_value, comparisons, /, &lt;&lt;, &gt;&gt;, and u8path --&gt;
{{dsc inc | cpp/experimental/fs/dsc filesystem_error}}
{{dsc inc | cpp/experimental/fs/dsc directory_entry}}
{{dsc inc | cpp/experimental/fs/dsc directory_iterator}} &lt;!-- including begin,end --&gt;
{{dsc inc | cpp/experimental/fs/dsc recursive_directory_iterator}} &lt;!-- including begin,end --&gt;
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc space_info}}
{{dsc inc | cpp/experimental/fs/dsc file_type}}
{{dsc inc | cpp/experimental/fs/dsc perms}}
{{dsc inc | cpp/experimental/fs/dsc copy_options}}
{{dsc inc | cpp/experimental/fs/dsc directory_options}}
{{dsc inc | cpp/experimental/fs/dsc file_time_type}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc absolute}}&lt;!-- including system_complete --&gt;
{{dsc inc | cpp/experimental/fs/dsc canonical}}
{{dsc inc | cpp/experimental/fs/dsc copy}}
{{dsc inc | cpp/experimental/fs/dsc copy_file}}
{{dsc inc | cpp/experimental/fs/dsc copy_symlink}}
{{dsc inc | cpp/experimental/fs/dsc create_directory}} &lt;!-- including create_directories --&gt;
{{dsc inc | cpp/experimental/fs/dsc create_hard_link}}
{{dsc inc | cpp/experimental/fs/dsc create_symlink}} &lt;!-- including create_directory_symlink --&gt;
{{dsc inc | cpp/experimental/fs/dsc current_path}}
{{dsc inc | cpp/experimental/fs/dsc exists}}
{{dsc inc | cpp/experimental/fs/dsc equivalent}}
{{dsc inc | cpp/experimental/fs/dsc file_size}}
{{dsc inc | cpp/experimental/fs/dsc hard_link_count}}
{{dsc inc | cpp/experimental/fs/dsc last_write_time}}
{{dsc inc | cpp/experimental/fs/dsc permissions}}
{{dsc inc | cpp/experimental/fs/dsc read_symlink}}
{{dsc inc | cpp/experimental/fs/dsc remove}} &lt;!-- including remove_all --&gt;
{{dsc inc | cpp/experimental/fs/dsc rename}} 
{{dsc inc | cpp/experimental/fs/dsc resize_file}}
{{dsc inc | cpp/experimental/fs/dsc space}}
{{dsc inc | cpp/experimental/fs/dsc status}} &lt;!-- including symlink_status --&gt;
{{dsc inc | cpp/experimental/fs/dsc temp_directory_path}}
{{dsc h2 | File types}}
{{dsc inc | cpp/experimental/fs/dsc is_block_file}}
{{dsc inc | cpp/experimental/fs/dsc is_character_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_empty}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_socket}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc end}}</text>
      <sha1>7oyz4chw1kc3rlfbgf1xpd5fp0qmeo1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/absolute</title>
    <ns>0</ns>
    <id>13362</id>
    <revision>
      <id>77065</id>
      <parentid>77064</parentid>
      <timestamp>2015-03-13T19:18:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note</comment>
      <text xml:space="preserve" bytes="3497">{{cpp/experimental/fs/title|absolute|system_complete}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts |num=1|1=
path absolute( const path&amp; p, const path&amp; base = current_path() );
}}
{{dcl | since=fs_ts | num=2 |
path system_complete(const path&amp; p);
path system_complete(const path&amp; p, error_code&amp; ec);
}}
{{dcl end}}

@1@ Returns absolute path of {{tt|p}} relative to {{tt|base}} according to the following rules:
:* If {{tt|p}} has both root name and root directory (e.g. {{c|&quot;C:\users&quot;}}, then the path is returned, unmodified.
:* If {{tt|p}} has a root name not followed by a root directory (e.g. {{c|&quot;C:text.txt&quot;}}), then {{tt|base}} is inserted between {{tt|p}}'s root name and the remainder of {{tt|p}}. Formally, {{c|p.root_name() / fs::absolute(base).root_directory() / fs::absolute(base).relative_path() / p.relative_path()}} is returned, 
:* If {{tt|p}} has no root name, but has a root directory (e.g. {{c|&quot;/var/tmp/file.txt&quot;}} on a POSIX system or {{c|&quot;\users\ABC\Document.doc&quot;}} on Windows, then the root name of {{tt|base}}, if it has one, is prepended to {{tt|p}} (on a POSIX system, {{tt|p}} is not modified, on a Windows system, {{c|&quot;\users\ABC\Document.doc&quot;}} becomes {{c|&quot;C:\users\ABC\Document.doc&quot;}}. Formally, {{c|fs::absolute(base).root_name() / p}} is returned.
:* If {{tt|p}} has no root name and no root directory (e.g. {{c|&quot;../file.txt&quot;}}, then the entire {{tt|base}} is prepended to {{tt|p}}. Formally, {{c|absolute(base) / p}} is returned.
@2@ Obtains the absolute path that identifies the file that the OS file opening API would access given the pathname {{tt|p}}. On POSIX systems, this is equivalent to {{v|1}} with the default {{tt|base}} ({{tt|fs::current_path()}}). On Windows systems, each logical drive has its own current working directory, and so if {{tt|p}} is not already absolute and has a root name component (e.g. {{c|&quot;E:filename.txt&quot;}}, that drive's current working directory is used, which may have been set by an earlier executed program.

===Parameters===
{{par begin}}
{{par | p | path to convert to absolute form}}
{{par | base | path (not necessarily absolute) to serve as the starting location }}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
Returns an absolute (although not necessarily canonical) path formed by combining {{tt|p}} and {{tt|base}} as described above.

===Exceptions===
{{cpp/experimental/fs/error_handling|p|base}}

===Notes===
On systems that support root names (e.g. Windows), the result of calling {{tt|absolute}} on a relative path that has a root name (e.g. {{c|&quot;D:file.txt&quot;}} when the root name of {{tt|base}} is different will usually result in a non-existent path.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = &quot;C:cl.exe&quot;;
    std::cout &lt;&lt; &quot;Current path is &quot; &lt;&lt; fs::current_path() &lt;&lt; '\n'
              &lt;&lt; &quot;Absolute path for &quot; &lt;&lt; p &lt;&lt; &quot; is &quot; &lt;&lt; fs::absolute(p) &lt;&lt; '\n'
	      &lt;&lt; &quot;System complete path for &quot; &lt;&lt; p &lt;&lt; &quot; is &quot; &lt;&lt; fs::system_complete(p) &lt;&lt; '\n';
}
|p=true
|output=
Current path is &quot;D:/local/ConsoleApplication1&quot;
Absolute path for &quot;C:cl.exe&quot; is &quot;C:/local/ConsoleApplication1/cl.exe&quot;
System complete path for &quot;C:cl.exe&quot; is &quot;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc canonical}}
{{dsc end}}</text>
      <sha1>64dzcupde7v78a4ppwdlaq2a1t6taa5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/canonical</title>
    <ns>0</ns>
    <id>13363</id>
    <revision>
      <id>87434</id>
      <parentid>86519</parentid>
      <timestamp>2016-08-24T12:54:36Z</timestamp>
      <contributor>
        <username>Tambre</username>
        <id>5717</id>
      </contributor>
      <comment>(fs::)canonical is only accessible in the filesystem namespace</comment>
      <text xml:space="preserve" bytes="1949">{{cpp/experimental/fs/title|canonical}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
path canonical( const path&amp; p, const path&amp; base {{=}} current_path() );
}}
{{dcl | num=2 | since=fs_ts | 1=
path canonical( const path&amp; p, error_code&amp; ec );
}}
{{dcl | num=3 | since=fs_ts | 1=
path canonical( const path&amp; p, const path&amp; base, error_code&amp; ec );
}}
{{dcl end}}

Converts path {{tt|p}} to a canonical absolute path, i.e. an absolute path that has no dot, dot-dot elements or symbolic links.

If {{tt|p}} is not an absolute path, the function behaves as if it is first made absolute by {{c|absolute(p, base)}} or {{c|absolute(p)}} for {{v|2}}

The path {{tt|p}} must exist.
===Parameters===
{{par begin}}
{{par | p | a path which may be absolute or relative to {{tt|base}}, and which must be an existing path}}
{{par | base | base path to be used in case {{tt|p}} is relative}}
{{par | ec | error code to store error status to}}
{{par end}}

===Return value===
An absolute path that resolves to the same file as {{c|absolute(p, base)}} (or {{c|absolute(p)}} for {{v|2}}).

===Exceptions===
{{cpp/experimental/fs/error_handling|p|base}}

This function is modeled after the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html realpath].

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = fs::path(&quot;..&quot;) / &quot;..&quot; / &quot;AppData&quot;;
    std::cout &lt;&lt; &quot;Current path is &quot; &lt;&lt; fs::current_path() &lt;&lt; '\n'
              &lt;&lt; &quot;Canonical path for &quot; &lt;&lt; p &lt;&lt; &quot; is &quot; &lt;&lt; fs::canonical(p) &lt;&lt; '\n';
}
|p=true
|output=
Current path is &quot;C:\Users\abcdef\AppData\Local\Temp&quot;
Canonical path for &quot;..\..\AppData&quot; is &quot;C:/Users\abcdef\AppData&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc path}}
{{dsc inc | cpp/experimental/fs/dsc absolute}}
{{dsc end}}</text>
      <sha1>apmwajh5ui6aye8v0uj9skr21lgt0gb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/copy</title>
    <ns>0</ns>
    <id>13364</id>
    <revision>
      <id>91207</id>
      <parentid>77771</parentid>
      <timestamp>2017-03-27T14:00:29Z</timestamp>
      <contributor>
        <username>Mlimber</username>
        <id>6624</id>
      </contributor>
      <minor/>
      <comment>Fix incorrect type name</comment>
      <text xml:space="preserve" bytes="5182">{{cpp/experimental/fs/title|copy}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
void copy( const path&amp; from, const path&amp; to );
void copy( const path&amp; from, const path&amp; to, error_code&amp; ec );
}}
{{dcl | num=2 | since=fs_ts | 1=
void copy( const path&amp; from, const path&amp; to, copy_options options );
void copy( const path&amp; from, const path&amp; to, copy_options options, error_code&amp; ec );
}}
{{dcl end}}

Copies files and directories, with a variety of options

@1@ The default, equivalent to {{v|2}} with {{tt|copy_options::none}} used as {{tt|options}}
@2@ Copies the file or directory {{tt|from}} to file or directory {{tt|to}}, using the copy options indicated by {{tt|options}}. The behavior is undefined if there is more than one option in any of the {{rlp|copy_options}} option group present in {{tt|options}} (even in the {{tt|copy_file}} group, which is not relevant to {{tt|copy}})

The behavior is as follows:
* First, before doing anything else, obtains type and permissions of {{tt|from}} by no more than single call to {{ltt|cpp/experimental/fs/status|status}} (or, if {{tt|copy_options::skip_symlinks}} or {{tt|copy_options::create_symlinks}} are present in {{tt|options}}, by a call to {{tt|symlink_status}}). 
* If necessary, obtains the status of {{tt|to}} the same way, by no more than a single status or symlink_status call.
* If {{tt|from}} does not exist, reports an error.
* If {{tt|from}} and {{tt|to}} are the same file as determined by {{ltt|cpp/experimental/fs/equivalent|equivalent()}}, reports an error
* If either {{tt|from}} or {{tt|to}} is not a regular file, a directory, or a symlink, as determined by {{ltt|cpp/experimental/fs/is_other|is_other}}, reports an error
* If {{tt|from}} is a directory, but {{tt|to}} is a regular file, reports an error
* If {{tt|from}} is a symbolic link, then
:* If {{tt|copy_options::skip_symlink}} is present in {{tt|options}}, does nothing.
:* Otherwise, if {{tt|to}} does not exist and {{tt|copy_options::copy_symlinks}} is present in {{tt|options}}, then behaves as if {{c|copy_symlink(from, to)}}
:* Otherwise, reports an error
* Otherwise, if {{tt|from}} is a regular file, then
:* If {{tt|copy_options::directories_only}} is present in {{tt|options}}, does nothing
:* Otherwise, if {{tt|copy_options::create_symlinks}} is present in {{tt|options}}, creates a symlink to {{tt|to}}. Note: {{tt|from}} must be an absolute path unless {{tt|to}} is in the current directory.
:* Otherwise, if {{tt|copy_options::create_hard_links}} is present in {{tt|options}}, creates a hard link to {{tt|to}}
:* Otherwise, if {{tt|to}} is a directory, then behaves as if {{c|copy_file(from, to/from.filename(), options)}} (creates a copy of {{tt|from}} as a file in the directory {{tt|to}})
:* Otherwise, behaves as if {{c|copy_file(from, to, options)}} (copies the file)
* Otherwise, if {{tt|from}} is a directory and either {{tt|options}} has {{tt|copy_options::recursive}} or is {{tt|copy_options::none}},
:* If {{tt|to}} does not exist, first executes {{c|create_directory(to, from)}} (creates the new directory with a copy of the old directory's attributes)
:* Then, whether {{tt|to}} already existed or was just created, iterates over the files contained in {{tt|from}} as if by {{c|for (const directory_entry&amp; x : directory_iterator(from))}} and for each directory entry, recursively calls {{c|copy(x.path(), to/x.path().filename(), options {{!}} unspecified)}}, where ''unspecified'' is some unspecified set of copy options.
* Otherwise does nothing

===Parameters===
{{par begin}}
{{par | from | path to the source file, directory, or symlink}}
{{par | to | path to the target file, directory, or symlink}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/experimental/fs/error_handling|from|to}}

===Notes===
The default behavior when copying directories is the non-recursive copy: the files are copied, but not the subdirectories:
{{source|1=
// Given
// /dir1 contains /dir1/file1, /dir1/file2, /dir1/dir2
// and /dir1/dir2 contains /dir1/dir2/file3
// After
std::experimental::filesystem::copy(&quot;/dir1&quot;, &quot;/dir3&quot;);
// /dir3 is created (with the attributes of /dir1)
// /dir1/file1 is copied to /dir3/file1
// /dir1/file2 is copied to /dir3/file2
}}

While with {{tt|copy_options::recursive}}, the subdirectories are also copied, with their content, recursively.
&lt;!-- unclear how that comes from the 15.3[fs.op.copy]/24, but that's what the TS says right after --&gt;
{{source|1=
// ...but after
std::experimental::filesystem::copy(&quot;/dir1&quot;, &quot;/dir3&quot;, copy_options::recursive);
// /dir3 is created (with the attributes of /dir1)
// /dir1/file1 is copied to /dir3/file1
// /dir1/file2 is copied to /dir3/file2
// /dir3/dir2 is created (with the attributes of /dir1/dir2)
// /dir1/dir2/file3 is copied to /dir3/dir2/file3
}}


===Example===
{{cpp/experimental/fs/copy_example}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc copy_options}}
{{dsc inc | cpp/experimental/fs/dsc copy_symlink}}
{{dsc inc | cpp/experimental/fs/dsc copy_file}}
{{dsc end}}</text>
      <sha1>70bfqnliziad1d8ab2of34weo3zx1p0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/copy file</title>
    <ns>0</ns>
    <id>13365</id>
    <revision>
      <id>77963</id>
      <parentid>77770</parentid>
      <timestamp>2015-04-21T22:19:14Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4019">{{cpp/experimental/fs/title|copy_file}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool copy_file( const path&amp; from, const path&amp; to );
bool copy_file( const path&amp; from, const path&amp; to, error_code&amp; ec );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool copy_file( const path&amp; from, const path&amp; to, copy_options options );
bool copy_file( const path&amp; from, const path&amp; to, copy_options options, error_code&amp; ec );
}}
{{dcl end}}

@1@ The default, equivalent to {{v|2}} with {{tt|copy_options::none}} used as {{tt|options}}
@2@ Copies a single file from {{tt|from}} to {{tt|to}}, using the copy options indicated by {{tt|options}}. The behavior is undefined if there is more than one option in any of the {{rlp|copy_options}} option group present in {{tt|options}} (even in the groups not relevant to {{tt|copy_file}})

* If the destination file does not exist,
:* copies the contents and the attributes of the file to which {{tt|from}} resolves to the file to which {{tt|to}} resolves (symlinks are followed)
* Otherwise, if the destination file already exists...
:* If {{tt|to}} and {{tt|from}} are the same as determined by {{ltt|cpp/experimental/fs/equivalent|equivalent(from, to)}}, report an error
:* Otherwise, if none of the copy_file control options are set in {{tt|options}}, report an error
:* Otherwise, if {{tt|copy_options::skip_existing}} is set in {{tt|options}}, do nothing
:* Otherwise, if {{tt|copy_options::overwrite_existing}} is set in {{tt|options}}, copy the contents and the attributes of the file to which {{tt|from}} resolves to the file to which {{tt|to}} resolves
:* Otherwise, if {{tt|copy_options::update_existing}} is set in {{tt|options}}, only copy the file if {{tt|from}} is newer than {{tt|to}}, as defined by {{ltt|cpp/experimental/fs/last_write_time|last_write_time()}}

The non-throwing overloads return {{c|false}} if an error occurs.

===Parameters===
{{par begin}}
{{par | from | path to the source file}}
{{par | to | path to the target file}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file was copied, {{c|false}} otherwise.

===Exceptions===
{{cpp/experimental/fs/error_handling|from|to}}

===Notes===
The functions involve at most one direct or indirect call to {{ltt|cpp/experimental/fs/status|status(to)}} (used both to determine if the file exists, and, for {{tt|copy_options::update_existing}} option, its last write time)

Error is reported when {{tt|copy_file}} is used to copy a directory: use {{ltt|cpp/experimental/fs/copy|copy}} for that.

{{tt|copy_file}} follows symlinks: use {{ltt|cpp/experimental/fs/copy_symlink|copy_symlink}} or {{ltt|cpp/experimental/fs/copy|copy}} with {{tt|copy_options::copy_symlinks}} for that.

===Examples===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directory(&quot;sandbox&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;).put('a');

    fs::copy_file(&quot;sandbox/file1.txt&quot;, &quot;sandbox/file2.txt&quot;);

    // now there are two files in sandbox:
    std::cout &lt;&lt; &quot;file1.txt holds : &quot;
              &lt;&lt; std::ifstream(&quot;sandbox/file1.txt&quot;).rdbuf() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;file2.txt holds : &quot;
              &lt;&lt; std::ifstream(&quot;sandbox/file2.txt&quot;).rdbuf() &lt;&lt; '\n';

    // fail to copy directory
    fs::create_directory(&quot;sandbox/abc&quot;);
    try {
        fs::copy_file(&quot;sandbox/abc&quot;, &quot;sandbox/def&quot;);
    } catch(fs::filesystem_error&amp; e) {
        std::cout &lt;&lt; &quot;Could not copy sandbox/abc: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
file1.txt holds : a
file2.txt holds : a
Could not copy sandbox/abc: copy_file: Is a directory: &quot;sandbox/abc&quot;, &quot;sandbox/def&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc copy_options}}
{{dsc inc | cpp/experimental/fs/dsc copy_symlink}}
{{dsc inc | cpp/experimental/fs/dsc copy}}
{{dsc end}}</text>
      <sha1>f5haim63cqdegg55ui40s8k2y70kj2o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/copy options</title>
    <ns>0</ns>
    <id>13366</id>
    <revision>
      <id>77769</id>
      <parentid>68487</parentid>
      <timestamp>2015-04-07T17:56:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail</comment>
      <text xml:space="preserve" bytes="3045">{{cpp/experimental/fs/title|copy_options}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
enum class copy_options {
    none = 0,
    skip_existing = 1,
    overwrite_existing = 2,
    update_existing = 4,
    recursive = 8,
    copy_symlinks = 16,
    skip_symlinks = 32,
    directories_only = 64,
    create_symlinks = 128,
    create_hard_links = 256
};
}}
{{dcl end}}

This type represents available options that control the behavior of the {{ltt|cpp/experimental/fs/copy|copy()}} and {{ltt|cpp/experimental/fs/copy_file|copy_file()}} function.

{{tt|copy_options}} satisfies the requirements of  {{concept|BitmaskType}} (which means the bitwise operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}} are defined for this type)

===Member constants===
At most one copy option in each of the following options groups may be present, otherwise the behavior of the copy functions is undefined.
{| class=&quot;wikitable&quot; style=&quot;text-align:left; font-size:85%; max-width:90em;&quot;
|-
! Member constant
! Value
! Meaning
|-
!colspan=3|options controlling {{ltt|cpp/experimental/fs/copy_file|copy_file()}} when the file already exists
|-
| {{tt|none}} 
| {{c|0}}
| Report an error (default behavior)
|-
| {{tt|skip_existing}} 
| {{c|1}}
| Keep the existing file, without reporting an error.
|-
| {{tt|overwrite_existing}}
| {{c|2}}
| Replace the existing file
|-
| {{tt|update_existing}}
| {{c|4}}
| Replace the existing file only if it is older than the file being copied
|-
!colspan=3|options controlling the effects of {{ltt|cpp/experimental/fs/copy|copy()}} on subdirectories
|-
| {{tt|none}}
| {{c|0}}
| Skip subdirectories (default behavior)
|-
| {{tt|recursive}}
| {{c|8}}
| Recursively copy subdirectories and their content
|-
!colspan=3|options controlling the effects of {{ltt|cpp/experimental/fs/copy|copy()}} on symbolic links
|-
| {{tt|none}}
| {{c|0}}
| Follow symlinks (default behavior)
|-
| {{tt|copy_symlinks}}
| {{c|16}}
| Copy symlinks as symlinks, not as the files they point to
|-
| {{tt|skip_symlinks}}
| {{c|32}}
| Ignore symlinks
|-
!colspan=3|options controlling the kind of copying {{ltt|cpp/experimental/fs/copy|copy()}} does
|-
| {{tt|none}}
| {{c|0}}
| Copy file content (default behavior)
|-
| {{tt|directories_only}}
| {{c|64}}
| Copy the directory structure, but do not copy any non-directory files
|-
| {{tt|create_symlinks}}
| {{c|128}}
| Instead of creating copies of files, create symlinks pointing to the originals. Note: the source path must be an absolute path unless the destination path is in the current directory.
|-
| {{tt|create_hard_links}}
| {{c|256}}
| Instead of creating copies of files, create hardlinks that resolve to the same files as the originals
|}

===Example===
{{cpp/experimental/fs/copy_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc copy}}
{{dsc inc | cpp/experimental/fs/dsc copy_file}}
{{dsc end}}</text>
      <sha1>slr0qeimaofdvtoxuzf8l8j4ps9ofkp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/copy symlink</title>
    <ns>0</ns>
    <id>13367</id>
    <revision>
      <id>77685</id>
      <parentid>68489</parentid>
      <timestamp>2015-04-03T11:20:13Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="1347">{{cpp/experimental/fs/title|copy_symlink}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
void copy_symlink( const path&amp; from, const path&amp; to);
}}
{{dcl | num=2 | since=fs_ts | 1=
void copy_symlink( const path&amp; from, const path&amp; to,
                   error_code&amp; ec );
}}
{{dcl end}}

Copies a symlink to another location.

@1@ Effectively calls {{c|f(read_symlink(from), to)}} where {{tt|f}} is {{c|create_symlink()}} or {{c|create_directory_symlink}} depending on whether {{tt|from}} resolves to a file or directory.

@2@ Effectively calls {{c|f(read_symlink(from, ec), to, ec)}} where {{tt|f}} is {{c|create_symlink()}} or {{c|create_directory_symlink}} depending on whether {{tt|from}} resolves to a file or directory.

===Parameters===
{{par begin}}
{{par | from | path to a symbolic link to copy}}
{{par | to | destination path of the new symlink}}
{{par | ec |  out-parameter for error reporting in the non-throwing overload}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/experimental/fs/error_handling|from|to}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc copy}}
{{dsc inc | cpp/experimental/fs/dsc copy_file}}
{{dsc inc | cpp/experimental/fs/dsc create_symlink}}
{{dsc inc | cpp/experimental/fs/dsc read_symlink}}
{{dsc end}}</text>
      <sha1>j6ox1oly5cxvlimsqgu436n5b3775rs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/create directory</title>
    <ns>0</ns>
    <id>13368</id>
    <revision>
      <id>78130</id>
      <parentid>78129</parentid>
      <timestamp>2015-05-03T18:47:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="3215">{{cpp/experimental/fs/title|create_directory|create_directories}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool create_directory( const path&amp; p );
bool create_directory( const path&amp; p, error_code&amp; ec );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool create_directory( const path&amp; p, const path&amp; existing_p );
bool create_directory( const path&amp; p, const path&amp; existing_p, error_code&amp; ec );
}}
{{dcl | num=3 | since=fs_ts | 1=
bool create_directories( const path&amp; p );
bool create_directories( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

@1@ Creates the directory {{tt|p}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html mkdir()] with a second argument of {{c|static_cast&lt;int&gt;(fs::perms::all)}} (the parent directory must already exist). If {{tt|p}} already exists and is already a directory, the function does nothing (this condition is not treated as an error). 
@2@ Same as {{v|1}}, except that the attributes of the new directory are copied from {{tt|existing_p}} (which must be a directory that exists). It is OS-dependent which attributes are copied: on POSIX systems, the attributes are copied as if by
{{source|1=
stat(existing_p.c_str(), &amp;attributes_stat)
mkdir(p.c_str(), attributes_stat.st_mode)
}}On Windows OS, the attributes are copied as if by
{{source|1=
CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)
}}
@3@ Executes {{v|1}} for every element of {{tt|p}} that does not already exist.

The non-throwing overloads return {{c|false}} if any error occurs.

===Parameters===
{{par begin}}
{{par | p | the path to the new directory to create}}
{{par | existing_p | the path to a directory to copy the attributes from}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
@1,2@ {{c|true}} if directory creation is successful, {{c|false}} otherwise.

===Exceptions===
@1,3@ {{cpp/experimental/fs/error_handling|p}}
@2@ {{cpp/experimental/fs/error_handling|p|existing_p}}

===Notes===
The attribute-preserving overload {{v|2}} is implicitly invoked by {{ltt|cpp/experimental/fs/copy|copy()}} when recursively copying directories. Its equivalent in boost.filesystem is [http://www.boost.org/doc/libs/1_57_0/libs/filesystem/doc/reference.html#copy_directory copy_directory] (with argument order reversed)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/1/2/a&quot;);
    fs::create_directory(&quot;sandbox/1/2/b&quot;);
    fs::permissions(&quot;sandbox/1/2/b&quot;, fs::perms::remove_perms {{!}} fs::perms::others_all);
    fs::create_directory(&quot;sandbox/1/2/c&quot;, &quot;sandbox/1/2/b&quot;);
    std::system(&quot;ls -l sandbox/1/2&quot;);
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
drwxr-xr-x 2 user group 4096 Apr 15 09:33 a
drwxr-x--- 2 user group 4096 Apr 15 09:33 b
drwxr-x--- 2 user group 4096 Apr 15 09:33 c
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc create_symlink}}
{{dsc inc | cpp/experimental/fs/dsc copy}}
{{dsc inc | cpp/experimental/fs/dsc perms}}
{{dsc end}}</text>
      <sha1>eqb03u0bp7gh0ou0skm32lc6t5m5spr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/create hard link</title>
    <ns>0</ns>
    <id>13369</id>
    <revision>
      <id>77871</id>
      <parentid>77870</parentid>
      <timestamp>2015-04-14T16:19:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso</comment>
      <text xml:space="preserve" bytes="2424">{{cpp/experimental/fs/title|create_hard_link}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
void create_hard_link( const path&amp; target, const path&amp; link );
void create_hard_link( const path&amp; target, const path&amp; link, error_code&amp; ec );
}}
{{dcl end}}

Creates a hard link {{tt|link}} with its target set to {{tt|target}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html link()]: the pathname {{tt|target}} must exist.

Once created, {{tt|link}} and {{tt|target}} are two logical names that refer to the same file (they are {{ltt|cpp/experimental/fs/equivalent|equivalent}}). Even if the original name {{tt|target}} is deleted, the file continues to exist and is accessible as {{tt|link}}.

===Parameters===
{{par begin}}
{{par | target | path of the file or directory to link to}}
{{par | link | path of the new hard link}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/experimental/fs/error_handling|target|link}}

===Notes===
Some operating systems do not support hard links at all or support them only for regular
files.

Some file systems do not support hard links regardless of the operating system: the FAT
file system used on memory cards and flash drives, for example.

Some file systems limit the number of links per file.

Hardlinking to directories is typically restricted to the superuser.

Hard links typically cannot cross filesystem boundaries.

The special pathname dot ({{c|&quot;.&quot;}}) is a hard link to its parent directory. The special pathname dot-dot {{c|&quot;..&quot;}} is a hard link to the directory that is the parent of its parent.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/subdir&quot;);
    std::ofstream(&quot;sandbox/a&quot;).put('a'); // create regular file
    fs::create_hard_link(&quot;sandbox/a&quot;, &quot;sandbox/b&quot;);
    fs::remove(&quot;sandbox/a&quot;);
    // read from the original file via surviving hard link
    char c = std::ifstream(&quot;sandbox/b&quot;).get();
    std::cout &lt;&lt; c &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
a
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc create_symlink}}
{{dsc inc | cpp/experimental/fs/dsc hard_link_count}}
{{dsc end}}</text>
      <sha1>axyf8mm5o8suukmyqxtm8ccvmvfiwwt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/create symlink</title>
    <ns>0</ns>
    <id>13370</id>
    <revision>
      <id>77869</id>
      <parentid>77868</parentid>
      <timestamp>2015-04-14T16:13:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso hardlink</comment>
      <text xml:space="preserve" bytes="2790">{{cpp/experimental/fs/title|create_symlink|create_directory_symlink}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
void create_symlink( const path&amp; target, const path&amp; link );
void create_symlink( const path&amp; target, const path&amp; link, error_code&amp; ec );
}}
{{dcl | num=2 | since=fs_ts | 1=
void create_directory_symlink( const path&amp; target, const path&amp; link );
void create_directory_symlink( const path&amp; target, const path&amp; link, error_code&amp; ec );
}}
{{dcl end}}

Creates a symbolic link {{tt|link}} with its target set to {{tt|target}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/symlink.html symlink()]: the pathname {{tt|target}} may be invalid or non-existing.

Some operating systems require symlink creation to identify that the link is to a directory. Portable code should use {{v|2}} to create directory symlinks rather than {{v|1}}, even though there is no distinction on POSIX systems.

===Parameters===
{{par begin}}
{{par | target | path to point the symlink to, does not have to exisdt}}
{{par | link | path of the new symbolic link}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/experimental/fs/error_handling|target|link}}

===Notes===
Some operating systems do not support symbolic links at all or support them only for
regular files.

Some file systems do not support symbolic links regardless of the operating system, for example the FAT system used on some memory cards and flash drives.

Like a hard link, a symbolic link allows a file to have multiple logical names. The presence of a hard link guarantees the existence of a file, even after the original name has been removed. A symbolic link provides no such assurance; in fact, the file named by the {{tt|target}} argument need not exist when the link is created. A symbolic link can cross file system boundaries.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/subdir&quot;);
    fs::create_symlink(&quot;target&quot;, &quot;sandbox/sym1&quot;);
    fs::create_directory_symlink(&quot;subdir&quot;, &quot;sandbox/sym2&quot;);

    for(auto it = fs::directory_iterator(&quot;sandbox&quot;); it != fs::directory_iterator(); ++it)
        if(is_symlink(it-&gt;symlink_status()))
            std::cout &lt;&lt; *it &lt;&lt; &quot;-&gt;&quot; &lt;&lt; read_symlink(*it) &lt;&lt; '\n';

    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/sym1&quot;-&gt;&quot;target&quot;
&quot;sandbox/sym2&quot;-&gt;&quot;subdir&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc read_symlink}}
{{dsc inc | cpp/experimental/fs/dsc create_hard_link}}
{{dsc end}}</text>
      <sha1>j9q8by1bqssskxplqmft4fphcuz9vgp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/current path</title>
    <ns>0</ns>
    <id>13371</id>
    <revision>
      <id>77691</id>
      <parentid>68497</parentid>
      <timestamp>2015-04-03T11:51:00Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="1753">{{cpp/experimental/fs/title|current_path}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
path current_path();
}}
{{dcl | num=2 | since=fs_ts | 1=
path current_path( error_code&amp; ec );
}}
{{dcl | num=3 | since=fs_ts | 1=
void current_path( const path&amp; p );
}}
{{dcl | num=4 | since=fs_ts | 1=
void current_path( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Returns or changes the current path.

@1-2@ Returns the absolute path of the current working directory, obtained as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html getcwd]. {{v|2}} returns {{c|path()}} if error occurs.

@3-4@ Changes the current working directory to {{tt|p}}, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/chdir.html chdir].

===Parameters===
{{par begin}}
{{par | p | path to change the current working directory to}}
{{par | ec | out-parameter for error reporting in the non-throwing overloads}}
{{par end}}

===Return value===
@1-2@ Returns the current working directory.

@3-4@ (none)

===Exceptions===
@1-2@ {{cpp/experimental/fs/error_handling}}

@3-4@ {{cpp/experimental/fs/error_handling|p}}

===Notes===

The current working directory is the directory that is used as the starting location in path resolution for relative paths. Single current working directory is associated with entire process.

The current working directory is a dangerous global state of the program. Behavior of various file input/output related functions are affected by the value of the current path. The current path may be unexpectedly changed by any component of the program, including various external libraries or other threads.

===See also===
{{todo}}</text>
      <sha1>8tjzw4smseynfy05cmk95arpw5tg8gx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry</title>
    <ns>0</ns>
    <id>13372</id>
    <revision>
      <id>84983</id>
      <parentid>84981</parentid>
      <timestamp>2016-03-23T15:22:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84981 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops, this is the TS version</comment>
      <text xml:space="preserve" bytes="1027">{{cpp/experimental/fs/title|directory_entry}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
class directory_entry;
}}
{{dcl end}}

Represents a directory entry. The objects stores a {{tt|path}} and two {{tt|file_status}} objects: one for file status and the second for the pointed-to file status if the directory entry refers to a symbolic link.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc constructor}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc destructor}}

{{dsc h2 | Modifiers}}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc assign}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc replace_filename}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc path}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc operator_cmp}}
{{dsc end}}</text>
      <sha1>h3grd6ukr3z83r0tjegd9mzmhaku1uv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/assign</title>
    <ns>0</ns>
    <id>13373</id>
    <revision>
      <id>84976</id>
      <parentid>68501</parentid>
      <timestamp>2016-03-23T09:18:39Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>DR 53 (now LWG2653)</comment>
      <text xml:space="preserve" bytes="453">{{cpp/experimental/fs/directory_entry/title|assign}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
void assign( const path&amp; p );
}}
{{dcl end}}

Assigns new content to the directory entry object. Sets the path to {{tt|p}}.

===Parameters===
{{todo}}

===Return value===
(none)

===Exceptions===
{{todo}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>rlf7nl927ahof08wbli4iurn48am1ou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/directory entry</title>
    <ns>0</ns>
    <id>13374</id>
    <revision>
      <id>84975</id>
      <parentid>68503</parentid>
      <timestamp>2016-03-23T09:17:10Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>DR 53 (now LWG2653), not sure whether a directory_entry can still cache the file statuses now</comment>
      <text xml:space="preserve" bytes="699">{{cpp/experimental/fs/directory_entry/title|directory_entry}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1 | 1=
directory_entry() = default;
}}
{{dcl | since=fs_ts | num=2 | 1=
directory_entry( const directory_entry&amp; ) = default;
}}
{{dcl | since=fs_ts | num=3 | 1=
directory_entry( directory_entry&amp;&amp; ) = default;
}}
{{dcl | since=fs_ts | num=4 | 1=
explicit directory_entry( const path&amp; p );
}}
{{dcl end}}

Constructs a new {{tt|directory_entry}} object.

@1@ Default constructor.

@2@ Default copy constructor.

@3@ Default move constructor.

@4@ Initializes the directory entry with path {{tt|p}}.

===Parameters===
{{todo}}

===Exceptions===
{{todo}}</text>
      <sha1>avqnpifcuscig7ttj9gum6uq9ldo1nj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/operator cmp</title>
    <ns>0</ns>
    <id>13376</id>
    <revision>
      <id>91669</id>
      <parentid>78277</parentid>
      <timestamp>2017-03-31T19:54:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1406">{{cpp/experimental/fs/directory_entry/title|1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
bool operator==( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=2 | since=fs_ts | 1=
bool operator!=( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=3 | since=fs_ts | 1=
bool operator&lt;( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=4 | since=fs_ts | 1=
bool operator&lt;=( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=5 | since=fs_ts | 1=
bool operator&gt;( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=6 | since=fs_ts | 1=
bool operator&gt;=( const directory_entry&amp; rhs ) const;
}}
{{dcl end}}

Compares the path with the directory entry {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | rhs | directory_entry to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if {{c|1=path() == rhs.path()}}, {{c|false}} otherwise.
@2@ {{c|true}} if {{c|1=path() != rhs.path()}}, {{c|false}} otherwise.
@3@ {{c|true}} if {{c|1=path() &lt; rhs.path()}}, {{c|false}} otherwise.
@4@ {{c|true}} if {{c|1=path() &lt;= rhs.path()}}, {{c|false}} otherwise.
@5@ {{c|true}} if {{c|1=path() &gt; rhs.path()}}, {{c|false}} otherwise.
@6@ {{c|true}} if {{c|1=path() &gt;= rhs.path()}}, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc path}}
{{dsc end}}</text>
      <sha1>ro95um39gn19ew6sgz4ub2t85e438gs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/operator=</title>
    <ns>0</ns>
    <id>13375</id>
    <revision>
      <id>91383</id>
      <parentid>68505</parentid>
      <timestamp>2017-03-31T19:41:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="578">{{cpp/experimental/fs/directory_entry/title|operator{{=}}}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1 | 1=
directory_entry&amp; operator=( const directory_entry&amp; ) = default;
}}
{{dcl | since=fs_ts | num=2 | 1=
directory_entry&amp; operator=( directory_entry&amp;&amp;) = default;
}}
{{dcl end}}

Assigns another directory entry.

===Parameters===
{{todo}}

===Return value===
{{c|*this}}

===Exceptions===
{{todo}}

@2@ {{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc assign}}
{{dsc end}}</text>
      <sha1>765qf3baegxqjgwmqa8x4lbajyikklc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/path</title>
    <ns>0</ns>
    <id>13377</id>
    <revision>
      <id>91576</id>
      <parentid>78625</parentid>
      <timestamp>2017-03-31T19:50:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="447">{{cpp/experimental/fs/directory_entry/title|path}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
const path&amp; path() const;
}}
{{dcl | since=fs_ts | 1=
operator const path&amp; () const;
}}
{{dcl end}}

Returns the full path the directory entry refers to.

===Parameters===
(none)

===Return value===
The full path the directory entry refers to.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{todo}}</text>
      <sha1>kxdqjwkhmuttwzqteqyjjfpeahnc3zh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/replace filename</title>
    <ns>0</ns>
    <id>13378</id>
    <revision>
      <id>84977</id>
      <parentid>68511</parentid>
      <timestamp>2016-03-23T09:20:07Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>DR 53 (now LWG2653)</comment>
      <text xml:space="preserve" bytes="573">{{cpp/experimental/fs/directory_entry/title|replace_filename}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
void replace_filename( const path&amp; p );
}}
{{dcl end}}

Changes the filename of the directory entry.

Effectively sets path to {{c|path().parent_path() / p}}.

This function does not commit any changes to the filesystem.

===Parameters===
{{par begin}}
{{par | p | the path to append to the parent path of the currently stored path}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{todo}}

===See also===
{{todo}}</text>
      <sha1>n0nfbyszl3cfc5kvv2jsiw5v3zllsy9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/status</title>
    <ns>0</ns>
    <id>13379</id>
    <revision>
      <id>77190</id>
      <parentid>77189</parentid>
      <timestamp>2015-03-17T17:49:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-empty -exists from seealso</comment>
      <text xml:space="preserve" bytes="1979">{{cpp/experimental/fs/directory_entry/title|status|symlink_status}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1| 1=
file_status status() const;
file_status status( error_code&amp; ec ) const;
}}
{{dcl | since=fs_ts | num=2| 1=
file_status symlink_status() const;
file_status symlink_status( error_code&amp; ec ) const;
}}
{{dcl end}}

@1@ Returns the potentially cached status of the entry, as if determined by a  [[cpp/experimental/fs/status|status]] call (symlinks are followed to their targets)
@2@ Returns the potentially cached status of the entry, as if determined by a  [[cpp/experimental/fs/status|symlink_status]] call (symlinks are not followed)

===Parameters===
{{par begin}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The status of the file referred to by the entry.

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Notes===
The file status information is usually provided as a byproduct of directory iteration, in which case it is cached and may be obtained by these member functions without the cost of an additional system call. During directory iteration, calling {{tt|status}} is unnecessary and accessors such as {{tt|is_directory}} should be called with the cached status value, not with a path.

===Example===
{{cpp/experimental/fs/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc inc | cpp/experimental/fs/dsc is_block_file}}
{{dsc inc | cpp/experimental/fs/dsc is_character_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_socket}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc end}}</text>
      <sha1>53i0q1h185xxhoql1j5z4re6vckm1i5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory entry/symbolic status</title>
    <ns>0</ns>
    <id>13380</id>
    <revision>
      <id>91554</id>
      <parentid>68515</parentid>
      <timestamp>2017-03-31T19:49:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="626">{{cpp/experimental/fs/directory_entry/title|symlink_status}}
{{cpp/experimental/fs/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
file_status symlink_status() const;
}}
{{dcl | since=fs_ts | 1=
file_status symlink_status( error_code&amp; ec ) const;
}}
{{dcl end}}

Returns potentially cached status of the target of the symbolic link referred to by entry.

{{todo}}

===Parameters===
{{par begin}}
{{par | ec | error code to set in case of errors}}
{{par end}}

===Return value===
Returns the symlink status of the directory entry.

===Exceptions===
{{todo}}

@2@ {{unreviewed noexcept}}

===See also===
{{todo}}</text>
      <sha1>et06xejbw95zl9rdjmpig4iibs6527w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory iterator</title>
    <ns>0</ns>
    <id>13381</id>
    <revision>
      <id>88317</id>
      <parentid>78173</parentid>
      <timestamp>2016-11-16T15:00:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>saw a link here from so.. perhaps all merged experimental pages need an infobox?</comment>
      <text xml:space="preserve" bytes="3115">{{cpp/experimental/fs/title|directory_iterator}}
{{cpp/experimental/fs/directory_iterator/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016; see [[cpp/filesystem/directory_iterator|std::filesystem::directory_iterator]] {{mark since c++17}} }}

{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
class directory_iterator;
}}
{{dcl end}}

{{tt|directory_iterator}} is an {{concept|InputIterator}} that iterates over the {{ltt|cpp/experimental/fs/directory_entry|directory_entry}} elements of a directory (but does not visit the subdirectories). The iteration order is unspecified, except that each directory entry is visited only once. The special pathnames {{spar|dot}} and {{spar|dot-dot}} are skipped.

If the {{tt|directory_iterator}} is advanced past the last directory entry, it becomes equal to the default-constructed iterator, also known as the end iterator. Two end iterators are always equal, dereferencing or incrementing the end iterator is undefined behavior.

If a file or a directory is deleted or added to the directory tree after the directory iterator has been created, it is unspecified whether the change would be observed through the iterator.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|filesystem::directory_entry}} }}
{{dsc | {{tt|difference_type}} | {{tt|std::ptrdiff_t}} }}
{{dsc | {{tt|pointer}} | {{tt|const filesystem::directory_entry*}} }}
{{dsc | {{tt|reference}} | {{tt|const filesystem::directory_entry&amp;}} }}
{{dsc | {{tt|iterator_category}} | {{tt|std::input_iterator_tag}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc constructor}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc destructor}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc operator*}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc increment}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc begin}}
{{dsc end}}

Additionally, {{tt|operator{{==}}}} and {{tt|operator!{{=}}}} are provided, either as members or as non-members, as required by {{concept|InputIterator}}

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    std::ofstream(&quot;sandbox/file2.txt&quot;);
    for(auto&amp; p: fs::directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/file2.txt&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc recursive_directory_iterator}}
{{dsc inc | cpp/experimental/fs/dsc directory_options}}
{{dsc inc | cpp/experimental/fs/dsc directory_entry}}
{{dsc end}}</text>
      <sha1>shz64ek1bmbqh5kfa4j26jy7mgr7v87</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory iterator/begin</title>
    <ns>0</ns>
    <id>14113</id>
    <revision>
      <id>91332</id>
      <parentid>78621</parentid>
      <timestamp>2017-03-31T19:40:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1467">{{cpp/experimental/fs/title | begin{{small|(directory_iterator)}}|end{{small|(directory_iterator)}}}}
{{cpp/experimental/fs/directory_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1| since=fs_ts |
directory_iterator begin( directory_iterator iter );
}}
{{dcl |num=2| since=fs_ts |
directory_iterator end( const directory_iterator&amp; );
}}
{{dcl end}}
@1@ Returns {{tt|iter}} unchanged
@2@ Returns a default-constructed {{ltt|cpp/experimental/fs/directory_iterator|directory_iterator}}, which serves as the end iterator. The argument is ignored.

These non-member functions enable the use of {{tt|directory_iterator}}s with range-based for loops.

===Parameters===
{{par begin}}
{{par | iter | a directory_iterator}}
{{par end}}

===Return value===
@1@ {{tt|iter}} unchanged
@2@ End iterator (default-constructed {{tt|directory_iterator}})

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    std::ofstream(&quot;sandbox/file2.txt&quot;);
    for(auto&amp; p: fs::directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/file2.txt&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc begin}}
{{dsc end}}</text>
      <sha1>75toiy5bp82ndhmglvqbve1d2g00w7z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory iterator/directory iterator</title>
    <ns>0</ns>
    <id>13382</id>
    <revision>
      <id>91325</id>
      <parentid>68519</parentid>
      <timestamp>2017-03-31T19:40:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1202">{{cpp/experimental/fs/directory_iterator/title | directory_iterator}}
{{cpp/experimental/fs/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
directory_iterator();
}}
{{dcl | num=2 | since=fs_ts | 1=
explicit directory_iterator( const path&amp; p );
}}
{{dcl | num=3 | since=fs_ts | 1=
directory_iterator( const path&amp; p, error_code&amp; ec );
}}
{{dcl | num=4 | since=fs_ts | 1=
directory_iterator( const directory_iterator&amp; ) = default;
}}
{{dcl | num=5 | since=fs_ts | 1=
directory_iterator( directory_iterator&amp;&amp; ) = default;
}}
{{dcl end}}

Constructs a new directory iterator.

@1@ Constructs the end iterator.

@2@ Constructs a directory iterator that refers to the first directory entry of a directory identified by {{tt|p}}. If {{tt|p}} refers to an non-existing file or not a directory, returns the end iterator.

===Parameters===
{{todo}}

===Exceptions===
@1@ {{unreviewed noexcept}}

@2@ {{c|filesystem_error}} if an error occurs. The exception object is constructed with {{tt|p}} as an argument.

@3@ {{unreviewed noexcept}}

===Notes===
To iterate over the current directory, construct the iterator as {{c|directory_iterator(&quot;.&quot;)}} instead of {{c|directory_iterator(&quot;&quot;)}}.</text>
      <sha1>1obqjuqc33jnlcc5a7xjievj9pczx5d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory iterator/increment</title>
    <ns>0</ns>
    <id>13383</id>
    <revision>
      <id>91467</id>
      <parentid>68521</parentid>
      <timestamp>2017-03-31T19:45:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="500">{{cpp/experimental/fs/directory_iterator/title | operator{{=}}}}
{{cpp/experimental/fs/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
directory_iterator&amp; operator++();

directory_iterator&amp; increment( error_code&amp; ec ) noexcept;
}}
{{dcl end}}

Advances the iterator to the next entry.

{{todo}}

===Parameters===
{{par begin}}
{{par | ec | error code to store error status to}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{todo}}

@2@ {{unreviewed noexcept}}</text>
      <sha1>0det17zh2d3iitwk96yq549vuajii1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory iterator/operator*</title>
    <ns>0</ns>
    <id>13384</id>
    <revision>
      <id>78616</id>
      <parentid>68523</parentid>
      <timestamp>2015-05-29T19:13:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fill in</comment>
      <text xml:space="preserve" bytes="854">{{cpp/experimental/fs/directory_iterator/title | operator*,operator-&gt;}}
{{cpp/experimental/fs/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
const directory_entry&amp; operator*() const;
        
const directory_entry* operator-&gt;() const;
}}
{{dcl end}}

Accesses the pointed-to {{ltt|cpp/experimental/fs/directory_entry|directory_entry}}.

The result of {{tt|operator*}} or {{tt|operator-&gt;}} on the end iterator is undefined behavior.

===Parameters===
(none)

===Return value===
@1@ Value of the {{ltt|cpp/experimental/fs/directory_entry|directory_entry}} referred to by this iterator
@2@ Pointer to the {{ltt|cpp/experimental/fs/directory_entry|directory_entry}} referred to by this iterator

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc operator*}}
{{dsc end}}</text>
      <sha1>kcnzitzb0e75fyl5c3n2d9skaib2jbt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory iterator/operator=</title>
    <ns>0</ns>
    <id>13385</id>
    <revision>
      <id>68525</id>
      <parentid>68524</parentid>
      <timestamp>2014-03-19T00:37:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="396">{{cpp/experimental/fs/directory_iterator/title | operator{{=}}}}
{{cpp/experimental/fs/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
directory_iterator&amp; operator=(const directory_iterator&amp;) = default;

directory_iterator&amp; operator=(directory_iterator&amp;&amp;) = default;
}}
{{dcl end}}

{{todo}}

===Parameters===
{{todo}}

===Return value===
{{c|*this}}

===Exceptions===
{{todo}}</text>
      <sha1>a3iuf8jadm24cwh6e04syyp16c70mhi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/directory options</title>
    <ns>0</ns>
    <id>13386</id>
    <revision>
      <id>78122</id>
      <parentid>68527</parentid>
      <timestamp>2015-05-02T15:02:10Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="1323">{{cpp/experimental/fs/title|directory_options}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl  | since=fs_ts | 1=
enum class directory_options {
    none,
    follow_directory_symlink,
    skip_permission_denied
};
}}
{{dcl end}}

This type represents available options that control the behavior of the {{ltt|cpp/experimental/fs/directory_iterator}} and {{ltt|cpp/experimental/fs/recursive_directory_iterator}}.

{{tt|directory_options}} satisfies the requirements of {{concept|BitmaskType}} (which means the bitwise operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}} are defined for this type)

===Member constants===
{| class=&quot;wikitable&quot;
|-
! Member constant
! Value
! Meaning
|-
| {{tt|none}}
| {{c|0}}
| (Default) Skip directory symlinks, permission denied is error.
|-
| {{tt|follow_directory_symlink}}
| {{c|1}}
| Follow rather than skip directory symlinks.
|-
| {{tt|skip_permission_denied}}
| {{c|2}}
| Skip directories that would otherwise result in permission denied errors.
|}

===See also===
{{dsc begin}}
{{dsc inc|cpp/experimental/fs/directory_iterator/dsc constructor}}
{{dsc inc|cpp/experimental/fs/recursive_directory_iterator/dsc constructor}}
{{dsc end}}</text>
      <sha1>3bms9y5cb5d7l2lkiyr7yco1aatiixw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/equivalent</title>
    <ns>0</ns>
    <id>13387</id>
    <revision>
      <id>77860</id>
      <parentid>68529</parentid>
      <timestamp>2015-04-13T18:42:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>detail</comment>
      <text xml:space="preserve" bytes="2446">{{cpp/experimental/fs/title|equivalent}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool equivalent( const path&amp; p1, const path&amp; p2 );
bool equivalent( const path&amp; p1, const path&amp; p2, error_code&amp; ec );
}}
{{dcl end}}

Checks whether the paths {{tt|p1}} and {{tt|p2}} refer to the same file or directory and have the same file status as determined by {{ltt|cpp/experimental/fs/status|status}} (symlinks are followed).

If {{tt|p1}} or {{tt|p2}} does not exist or if their file type is not file, directory, or symlink (as determined by {{ltt|cpp/experimental/fs/is_other|is_other}}), an error is reported.

The non-throwing overload returns {{tt|false}} on errors.

===Parameters===
{{par begin}}
{{par | p1, p2 | paths to check for equivalence}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the {{tt|p1}} and {{tt|p2}} refer to the same file or directory and their file status is the same. {{c|false}} otherwise.

===Exceptions===
{{cpp/experimental/fs/error_handling|p1|p2}}

===Notes===
Two paths are considered to resolve to the same file system entity if {{tt|st_dev}} and {{tt|st_ino}} of their POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html stat structure], obtained as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat], are equal. (meaning, the files are locate on the same device at the same location)

In particular, all hard links for the same file or directory are equivalent, and a symlink and its target on the same file system are equivalent.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cstdint&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    // hard link equivalency
    fs::path p1 = &quot;.&quot;;
    fs::path p2 = fs::current_path();
    if(fs::equivalent(p1, p2))
        std::cout &lt;&lt; p1 &lt;&lt; &quot; is equivalent to &quot; &lt;&lt; p2 &lt;&lt; '\n';

    // symlink equivalency
    fs::path p3 = &quot;/lib/libc.so.6&quot;;
    fs::path p4 = p3.parent_path() / fs::read_symlink(p3);
    if(fs::equivalent(p3, p4))
        std::cout &lt;&lt; p3 &lt;&lt; &quot; is equivalent to &quot; &lt;&lt; p4 &lt;&lt; '\n';
}
|p=true
|output=
&quot;.&quot; is equivalent to &quot;/var/tmp/test&quot;
&quot;/lib/libc.so.6&quot; is equivalent to &quot;/lib/libc-2.12.so&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc end}}</text>
      <sha1>c2wa96lz48c9w1mm5u9c515mido1fyp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/exists</title>
    <ns>0</ns>
    <id>13388</id>
    <revision>
      <id>91333</id>
      <parentid>77863</parentid>
      <timestamp>2017-03-31T19:40:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2389">{{cpp/experimental/fs/title|exists}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool exists( file_status s )
}}
{{dcl | num=2 | since=fs_ts | 1=
bool exists( const path&amp; p );
bool exists( const path&amp; p, error_code&amp; ec )
}}
{{dcl end}}

Checks if the given file status or path corresponds to an existing file or directory.

@1@ Equivalent to {{c|1=status_known(s) &amp;&amp; s.type() != file_type::not_found}}.
@2@ Equivalent to {{c|exists(status(p))}} or {{c|exists(status(p, ec))}} (symlinks are followed). The non-throwing overload returns {{c|false}} if an error occurs.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the given path or file status corresponds to an existing file or directory, {{c|false}} otherwise.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2@ {{cpp/experimental/fs/error_handling|p}}

===Notes===
The information provided by this function is usually also provided as a byproduct of directory iteration. During directory iteration, calling {{tt|exists(*iterator)}} is less efficient than {{tt|exists(iterator-&gt;status())}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdint&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

void demo_exists(const fs::path&amp; p, fs::file_status s = fs::file_status{})
{
    std::cout &lt;&lt; p;
    if(fs::status_known(s) ? fs::exists(s) : fs::exists(p))
        std::cout &lt;&lt; &quot; exists\n&quot;;
    else
        std::cout &lt;&lt; &quot; does not exist\n&quot;;
}
int main()
{
    fs::create_directory(&quot;sandbox&quot;);
    std::ofstream(&quot;sandbox/file&quot;); // create regular file
    fs::create_symlink(&quot;non-existing&quot;, &quot;sandbox/symlink&quot;);

    demo_exists(&quot;sandbox&quot;);
    for(auto it = fs::directory_iterator(&quot;sandbox&quot;); it != fs::directory_iterator(); ++it)
        demo_exists(*it, it-&gt;status()); // use cached status from directory entry
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
&quot;sandbox&quot; exists
&quot;sandbox/file&quot; exists
&quot;sandbox/symlink&quot; does not exist
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>9f9qds4boesad4zqdicoftu1mlmeijq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file size</title>
    <ns>0</ns>
    <id>13389</id>
    <revision>
      <id>84769</id>
      <parentid>84761</parentid>
      <timestamp>2016-03-22T13:41:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84761 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="1745">{{cpp/experimental/fs/title|file_size}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
std::uintmax_t file_size( const path&amp; p );
std::uintmax_t file_size( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Returns the size of the regular file {{tt|p}}, determined as if by reading the {{tt|st_size}} member of the structure obtained by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat] (symlinks are followed)

Attempting to determine the size of a directory (as well as any other file that is not a regular file or a symlink) is treated as an error.

The non-throwing overload returns returns {{c|-1}} on errors.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The size of the file, in bytes.

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = fs::current_path() / &quot;example.bin&quot;;
    std::ofstream(p).put('a'); // create file of size 1
    std::cout &lt;&lt; &quot;File size = &quot; &lt;&lt; fs::file_size(p) &lt;&lt; '\n';
    fs::remove(p);
    
    try {
        fs::file_size(&quot;/dev&quot;); // attempt to get size of a directory
    } catch(fs::filesystem_error&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }        
}

|p=true
|output=
File size = 1
boost::filesystem::file_size: Operation not permitted: &quot;/dev&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc resize_file}}
{{dsc inc | cpp/experimental/fs/dsc space}}
{{dsc end}}</text>
      <sha1>471xl0pm2rf6czd3g96bzcvlck1l3xn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file status</title>
    <ns>0</ns>
    <id>13390</id>
    <revision>
      <id>68535</id>
      <parentid>68534</parentid>
      <timestamp>2014-03-19T00:37:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="604">{{cpp/experimental/fs/title|file_status}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
class file_status;
}}
{{dcl end}}

Stores information about the type and permissions of a file. 

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/file_status/dsc constructor}}
{{dsc inc | cpp/experimental/fs/file_status/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/fs/file_status/dsc destructor}}

{{dsc inc | cpp/experimental/fs/file_status/dsc type}}
{{dsc inc | cpp/experimental/fs/file_status/dsc permissions}}
{{dsc end}}</text>
      <sha1>1d5csxwer8q37mpg6o39n9vk6ogxsga</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file status/file status</title>
    <ns>0</ns>
    <id>13391</id>
    <revision>
      <id>91924</id>
      <parentid>68537</parentid>
      <timestamp>2017-03-31T20:01:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="710">{{cpp/experimental/fs/file_status/title|file_status}}
{{cpp/experimental/fs/file_status/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1 | 1=
file_status( const file_status&amp; ) = default;
}}
{{dcl | since=fs_ts | num=2 | 1=
file_status( file_status&amp;&amp; ) = default;
}}
{{dcl | since=fs_ts | num=3 | 1=
explicit file_status( file_type type = file_type::none,
                      perms permissions = perms::unknown);
}}
{{dcl end}}

Constructs a new {{tt|file_status}} object.

@1@ Default copy constructor.

@2@ Default move constructor.

@3@ Initializes the file status object with {{tt|type}} as type and {{tt|permissions}} as permissions.

===Parameters===
{{todo}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>tee27xspaal5zk5d0eig3nvm1al7j4t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file status/operator=</title>
    <ns>0</ns>
    <id>13392</id>
    <revision>
      <id>91509</id>
      <parentid>85327</parentid>
      <timestamp>2017-03-31T19:48:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="465">{{cpp/experimental/fs/file_status/title|operator{{=}}}}
{{cpp/experimental/fs/file_status/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1 | 1=
file_status&amp; operator=( const file_status&amp; other ) = default;
}}
{{dcl | since=fs_ts | num=2 | 1=
file_status&amp; operator=( file_status&amp;&amp; other ) = default;
}}
{{dcl end}}

Copy- or move-assigns another file type object.

===Parameters===
{{todo}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>1tsvnbmpx1mcvic5rp9wi68at7j6kes</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file status/permissions</title>
    <ns>0</ns>
    <id>13393</id>
    <revision>
      <id>91807</id>
      <parentid>68541</parentid>
      <timestamp>2017-03-31T19:58:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="572">{{cpp/experimental/fs/file_status/title|permissions}}
{{cpp/experimental/fs/file_status/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1 | 1=
perms permissions() const;
}}
{{dcl | since=fs_ts | num=2 | 1=
void permissions( perms perm );
}}
{{dcl end}}

Accesses the file permissions information.

@1@ Returns file permissions information.

@2@ Sets file type to {{tt|perm}}.

===Parameters===
{{par begin}}
{{par | perm | file permissions to set to}}
{{par end}}

===Return value===
@1@ File permissions information.

@2@ (none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>1d4q7rh08447mtlsxfv723o2zxs9ki5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file status/type</title>
    <ns>0</ns>
    <id>13394</id>
    <revision>
      <id>91442</id>
      <parentid>68543</parentid>
      <timestamp>2017-03-31T19:44:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="531">{{cpp/experimental/fs/file_status/title|type}}
{{cpp/experimental/fs/file_status/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1 | 1=
file_type type() const;
}}
{{dcl | since=fs_ts | num=2 | 1=
void type( file_type type );
}}
{{dcl end}}

Accesses the file type information.

@1@ Returns file type information.

@2@ Sets file type to {{tt|type}}.

===Parameters===
{{par begin}}
{{par | type | file type to set to}}
{{par end}}

===Return value===
@1@ File type information.

@2@ (none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>e9ofden6bphtoeerg7qn8qxpa04xajm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file time type</title>
    <ns>0</ns>
    <id>13395</id>
    <revision>
      <id>78062</id>
      <parentid>77613</parentid>
      <timestamp>2015-04-28T10:26:23Z</timestamp>
      <contributor>
        <username>Frog</username>
        <id>3671</id>
      </contributor>
      <minor/>
      <comment>Typo fix</comment>
      <text xml:space="preserve" bytes="605">{{cpp/experimental/fs/title|file_time_type}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
using file_time_type = chrono::time_point&lt;/*trivial-clock*/&gt;;
}}
{{dcl end}}

Represents file time. {{tt|trivial-clock}} is an implementation-defined type that satisfies {{concept|TrivialClock}} and is sufficient to represent the resolution and range of the file time values offered by the filesystem.

===Example===
{{cpp/experimental/fs/time_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc last_write_time}}
{{dsc end}}</text>
      <sha1>eh0qi7kbuf65hekyi53n8s4i7os4vjz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/file type</title>
    <ns>0</ns>
    <id>13396</id>
    <revision>
      <id>68547</id>
      <parentid>68546</parentid>
      <timestamp>2014-03-19T00:37:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="1120">{{cpp/experimental/fs/title|file_type}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
enum class file_type {
    none = 0,
    not_found = -1,
    regular = 1,
    directory = 2,
    symlink = 3,
    block = 4,
    character = 5,
    fifo = 6,
    socket = 7,
    unknown = 8
};
}}
{{dcl end}}

Indicates a type of a file or directory a path refers to.
{{todo}}

===Constants===
{{dsc begin}}
{{dsc hitem | Constant | Meaning}}
{{dsc | {{tt|none}} | indicates that the file status has not been evaluated yet, or an error occurred when evaluating it}}
{{dsc | {{tt|not_found}} | indicates that the file was not found (this is not considered an error) }}
{{dsc | {{tt|regular}} | a regular file}}
{{dsc | {{tt|directory}} | a directory}}
{{dsc | {{tt|symlink}} | a symbolic link}}
{{dsc | {{tt|block}} | a block special file}}
{{dsc | {{tt|character}} | a character special file}}
{{dsc | {{tt|fifo}} | a FIFO (also known as pipe) file}}
{{dsc | {{tt|socket}} | a socket file}}
{{dsc | {{tt|unknown}} | an unknown file}}
{{dsc end}}

===See also===
{{todo}}</text>
      <sha1>15mhyo5d7zn6t6ht7555bd33sj963mt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/filesystem error</title>
    <ns>0</ns>
    <id>13397</id>
    <revision>
      <id>68549</id>
      <parentid>68548</parentid>
      <timestamp>2014-03-19T00:37:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="547">{{cpp/experimental/fs/title|filesystem_error}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
class filesystem_error;
}}
{{dcl end}}

An exception type thrown when errors are encountered.

{{todo|add inheritance diagram}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/filesystem_error/dsc constructor}}
{{dsc inc | cpp/experimental/fs/filesystem_error/dsc path}}
{{dsc inc | cpp/experimental/fs/filesystem_error/dsc what}}
{{dsc end}}

===See also===
{{todo}}</text>
      <sha1>8tk3vs93on3dq88bdd20bnxdrmkgqq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/filesystem error/filesystem error</title>
    <ns>0</ns>
    <id>13398</id>
    <revision>
      <id>68551</id>
      <parentid>68550</parentid>
      <timestamp>2014-03-19T00:37:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="772">{{cpp/experimental/fs/filesystem_error/title|filesystem_error}}
{{cpp/experimental/fs/filesystem_error/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
filesystem_error( const string&amp; what_arg, error_code ec );
}}
{{dcl | num=2 | since=fs_ts | 1=
filesystem_error( const string&amp; what_arg, const path&amp; p1, error_code ec );
}}
{{dcl | num=3 | since=fs_ts | 1=
filesystem_error( const string&amp; what_arg, const path&amp; p1, const path&amp; p2, error_code ec );
}}
{{dcl end}}

Constructs a new filesystem error object. The explanatory string is set to {{tt|what_arg}}, error code is set to {{tt|ec}} and optionally, the paths that were involved in the operation that resulted in the error, are set to {{tt|p1}} and {{tt|p2}}.

===Parameters===
{{todo}}

===See also===
{{todo}}</text>
      <sha1>8niau1aanubucq5ta122e6rhn59iig9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/filesystem error/path</title>
    <ns>0</ns>
    <id>13399</id>
    <revision>
      <id>91928</id>
      <parentid>68553</parentid>
      <timestamp>2017-03-31T20:02:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="413">{{cpp/experimental/fs/filesystem_error/title|path1,path2}}
{{cpp/experimental/fs/filesystem_error/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=fs_ts | 1=
const path&amp; path1() const;
}}
{{dcl | since=fs_ts | 1=
const path&amp; path2() const;
}}
{{dcl end}}

Returns the paths that were stored in the exception object.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{todo}}</text>
      <sha1>4ept0kdy6tts4b5erxaj039ofdvnupe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/filesystem error/what</title>
    <ns>0</ns>
    <id>13400</id>
    <revision>
      <id>91498</id>
      <parentid>68555</parentid>
      <timestamp>2017-03-31T19:47:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="349">{{cpp/experimental/fs/filesystem_error/title|what}}
{{cpp/experimental/fs/filesystem_error/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
const char* what() const;
}}
{{dcl end}}

Returns the explanatory byte string that was stored in the exception object.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{todo}}</text>
      <sha1>6j59ydz8uhyftt5noj2vxy9769qt794</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/hard link count</title>
    <ns>0</ns>
    <id>13401</id>
    <revision>
      <id>77612</id>
      <parentid>77608</parentid>
      <timestamp>2015-03-31T19:31:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1673">{{cpp/experimental/fs/title|hard_link_count}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
std::uintmax_t hard_link_count( const path&amp; p );
std::uintmax_t hard_link_count( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Returns the number of hard links for the filesystem object identified by path {{tt|p}}.

The non-throwing overload returns {{c|static_cast&lt;uintmax_t&gt;(-1)}} on errors.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The number of hard links for {{tt|p}}

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    // On a POSIX-style filesystem, each directory has at least 2 hard links:
    // itself and the special member pathname &quot;.&quot;
    fs::path p = fs::current_path();
    std::cout &lt;&lt; &quot;Number of hard links for current path is &quot;
              &lt;&lt; fs::hard_link_count(p) &lt;&lt; '\n';

    // each &quot;..&quot; is a hard link to the parent directory, so the total number
    // of hard links for any directory is 2 plus number of direct subdirectories
    p = fs::current_path() / &quot;..&quot;; // each dot-dot is a hard link to parent
    std::cout &lt;&lt; &quot;Number of hard links for .. is &quot;
              &lt;&lt; fs::hard_link_count(p) &lt;&lt; '\n';
}
|output=
Number of hard links for current path is 2
Number of hard links for .. is 3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc create_hard_link}}
{{dsc end}}</text>
      <sha1>hfp7kvxqrd71wbdz3vs2usaylyc4ye5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is block file</title>
    <ns>0</ns>
    <id>13402</id>
    <revision>
      <id>91921</id>
      <parentid>77224</parentid>
      <timestamp>2017-03-31T20:01:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2205">{{cpp/experimental/fs/title|is_block_file}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_block_file( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_block_file( const path&amp; p );
bool is_block_file( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a block special file, as if determined by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_ISBLK ]. Examples of block special files are block devices such as {{c|/dev/sda}} or {{c|/dev/loop0}} on Linux.

@1@ Equivalent to {{c|s.type() {{==}} file_type::block}}.
@2@ Equivalent to {{c|is_block_file(status(p))}} or {{c|is_block_file(status(p, ec))}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a block device. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2,3@ {{cpp/experimental/fs/error_handling|p}}

===Notes===
The information provided by this function is usually also provided as a byproduct of directory iteration. During directory iteration, calling {{tt|is_block_file(*iterator)}} is less efficient than {{tt|is_block_file(iterator-&gt;status())}}

===Example===
{{cpp/experimental/fs/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc inc | cpp/experimental/fs/dsc is_character_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_socket}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc inc | cpp/experimental/fs/dsc exists}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>m71itg2hoct0tz6ltydcoua1qyr6x7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is character file</title>
    <ns>0</ns>
    <id>13403</id>
    <revision>
      <id>91512</id>
      <parentid>77222</parentid>
      <timestamp>2017-03-31T19:48:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2315">{{cpp/experimental/fs/title|is_character_file}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_character_file( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_character_file( const path&amp; p );
bool is_character_file( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a character special file, as if determined by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_ISCHR]. Examples of character special files are character devices such as {{c|/dev/null}}, {{c|/dev/tty}}, {{c|/dev/audio}}, or {{c|/dev/nvram}} on Linux.

@1@ Equivalent to {{c|s.type() {{==}} file_type::character}}.
@2@ Equivalent to {{c|is_character_file(status(p))}} or {{c|is_character_file(status(p, ec))}} respectively

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a block device, {{c|false}} otherwise. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2,3@ {{cpp/experimental/fs/error_handling|p}}

===Notes===
The information provided by this function is usually also provided as a byproduct of directory iteration. During directory iteration, calling {{tt|is_character_file(*iterator)}} is less efficient than {{tt|is_character_file(iterator-&gt;status())}}

===Example===
{{cpp/experimental/fs/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc inc | cpp/experimental/fs/dsc is_block_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_socket}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc inc | cpp/experimental/fs/dsc exists}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>0eeypz8egzxgldp7cija3srivtapltz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is directory</title>
    <ns>0</ns>
    <id>13404</id>
    <revision>
      <id>91403</id>
      <parentid>80550</parentid>
      <timestamp>2017-03-31T19:42:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1115">{{cpp/experimental/fs/title|is_directory}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_directory( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_directory( const path&amp; p );
}}
{{dcl | num=3 | since=fs_ts | 1=
bool is_directory( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the gived file status or path corresponds to a directory.

@1@ Equivalent to {{c|s.type() {{==}} file_type::directory}}.

@2@ Equivalent to {{c|is_directory(status(p))}}.

@3@ Equivalent to {{c|is_directory(status(p, ec))}}. Returns {{c|false}} if error occurs.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to query}}
{{par | ec | error code to modify in case of errors}}
{{par end}}

===Return value===
{{c|true}} if the given path or file status corresponds to a directory, {{c|false}} otherwise.

===Exceptions===
@1,3@ {{unreviewed noexcept}}

@2@ Throws {{c|filesystem_error}} if an error occurs. The exception object is constructed with {{tt|p}} as an argument.

===See also===
{{todo}}</text>
      <sha1>iam3116m7ivvzjzd8bd9ykb1j5d9n93</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is empty</title>
    <ns>0</ns>
    <id>13405</id>
    <revision>
      <id>91710</id>
      <parentid>68565</parentid>
      <timestamp>2017-03-31T19:55:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1036">{{cpp/experimental/fs/title|is_empty}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_empty( const path&amp; p );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_empty( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks whether the given path refers to an empty file or directory.

The second version returns {{c|false}} and sets {{tt|ec}} to an appropriate error code if an error occurs. Otherwise, {{tt|ec}} is cleared with a call to {{c|ec.clear()}}.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | error code to modify in case of error}}
{{par end}}

===Return value===
{{c|true}} if {{tt|p}} refers to an empty file or directory, {{c|false}} otherwise.

===Exceptions===
@1@ {{c|filesystem_error}} if an error occurs. The exception object is constructed with {{tt|p}} as an argument. The error code is set to an appropriate error code for the error that caused the failure.

@2@ {{unreviewed noexcept}}

===See also===
{{todo}}</text>
      <sha1>hup8ube70j783a5yj6teyvydzejjvw1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is fifo</title>
    <ns>0</ns>
    <id>13406</id>
    <revision>
      <id>91359</id>
      <parentid>68567</parentid>
      <timestamp>2017-03-31T19:41:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1181">{{cpp/experimental/fs/title|is_fifo}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_fifo( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_fifo( const path&amp; p );
}}
{{dcl | num=3 | since=fs_ts | 1=
bool is_fifo( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a FIFO or pipe file.

@1@ Equivalent to {{c|s.type() {{==}} file_type::fifo}}.

@2@ Equivalent to {{c|is_fifo(status(p))}}.

@3@ Equivalent to {{c|is_fifo(status(p, ec))}}. Returns {{c|false}} and sets {{tt|ec}} to an appropriate error code if an error occurs. Otherwise, {{tt|ec}} is cleared with a call to {{c|ec.clear()}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to query}}
{{par | ec | error code to modify in case of errors}}
{{par end}}

===Return value===
{{c|true}} if the given path or file status corresponds to a FIFO file.

===Exceptions===
@1,3@ {{unreviewed noexcept}}

@2@ Throws {{c|filesystem_error}} if an error occurs. The exception object is constructed with {{tt|p}} as an argument.

===See also===
{{todo}}</text>
      <sha1>mpzlbtuh2hzjbyca37vd5gs8lhck5xw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is other</title>
    <ns>0</ns>
    <id>13407</id>
    <revision>
      <id>91907</id>
      <parentid>68569</parentid>
      <timestamp>2017-03-31T20:01:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1430">{{cpp/experimental/fs/title|is_other}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_other( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_other( const path&amp; p );
}}
{{dcl | num=3 | since=fs_ts | 1=
bool is_other( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a file of type ''other'' type. That is, the file exists, but is neither regular file, nor directory nor a symlink.

@1@ Equivalent to {{c|exists(s) &amp;&amp; !is_regular_file(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)}}.

@2@ Equivalent to {{c|is_other(status(p))}}.

@3@ Equivalent to {{c|is_other(status(p, ec))}}. Returns {{c|false}} and sets {{tt|ec}} to an appropriate error code if an error occurs. Otherwise, {{tt|ec}} is cleared with a call to {{c|ec.clear()}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | error code to store the error status to}}
{{par end}}

===Return value===
{{c|true}} if the given path or file status corresponds to a ''other'' file, {{c|false}} otherwise.

===Exceptions===
@1,3@ {{unreviewed noexcept}}

@2@ Throws {{c|filesystem_error}} if an error occurs. The error is constructed with {{tt|p}} as an argument. The error code is set to an appropriate error code for the error that caused the failure.

===See also===
{{todo}}</text>
      <sha1>hes8nuoz9bvk542j0e1ik490y9lsjvb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is regular file</title>
    <ns>0</ns>
    <id>13408</id>
    <revision>
      <id>91335</id>
      <parentid>80551</parentid>
      <timestamp>2017-03-31T19:40:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1551">{{cpp/experimental/fs/title|is_regular_file}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_regular_file( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_regular_file( const path&amp; p );
}}
{{dcl | num=3 | since=fs_ts | 1=
bool is_regular_file( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a regular file.

@1@ Equivalent to {{c|s.type() {{==}} file_type::regular}}.

@2@ Equivalent to {{c|is_regular_file(status(p))}}.

@3@ Equivalent to {{c|is_regular_file(status(p, ec))}}. Returns {{c|false}} and sets {{tt|ec}} to an appropriate error code if an error occurs. Otherwise, {{tt|ec}} is cleared with a call to {{c|ec.clear()}}.

{{todo|the specification says that (2) throws filesystem_error if status(p) would throw filesystem_error. This is different from the rest of is_**_file functions. Is that correct and if yes, what's the rationale?}}

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | error code to store the error status to}}
{{par end}}

===Return value===
{{c|true}} if the given path or file status corresponds to a regular link, {{c|false}} otherwise.

===Exceptions===
@1,3@ {{unreviewed noexcept}}

@2@ Throws {{c|filesystem_error}} if an error occurs. The error is constructed with {{tt|p}} as an argument. The error code is set to an appropriate error code for the error that caused the failure.

===See also===
{{todo}}</text>
      <sha1>9t88wwrvin8x3sqavuyqrzux7olm5fb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is socket</title>
    <ns>0</ns>
    <id>13409</id>
    <revision>
      <id>91677</id>
      <parentid>77597</parentid>
      <timestamp>2017-03-31T19:54:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2462">{{cpp/experimental/fs/title|is_socket}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_socket( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_socket( const path&amp; p );
bool is_socket( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a named IPC socket, as if determined by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_IFSOCK]. 
@1@ Equivalent to {{c|s.type() {{==}} file_type::socket}}.
@2@ Equivalent to {{c|is_socket(status(p))}} or {{c|is_socket(status(p, ec))}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a named socket. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2,3@ {{cpp/experimental/fs/error_handling|p}}

===Notes===
Named sockets are UNIX domain sockets constructed with [http://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html socket] and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html bind] POSIX APIs, which may be used for advanced interprocess communication. In particular, they may be used to transport open file descriptors from one running process to another.

The information provided by this function is usually also provided as a byproduct of directory iteration. During directory iteration, calling {{tt|is_socket(*iterator)}} is less efficient than {{tt|is_socket(iterator-&gt;status())}}

===Example===
{{cpp/experimental/fs/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc inc | cpp/experimental/fs/dsc is_block_file}}
{{dsc inc | cpp/experimental/fs/dsc is_character_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc inc | cpp/experimental/fs/dsc exists}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>r7yzzznfv0t6d7hum616e150pc19o8i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/is symlink</title>
    <ns>0</ns>
    <id>13410</id>
    <revision>
      <id>91908</id>
      <parentid>77598</parentid>
      <timestamp>2017-03-31T20:01:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2078">{{cpp/experimental/fs/title|is_symlink}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_symlink( file_status s );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_symlink( const path&amp; p );
bool is_symlink( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a symbolic link, as if determined by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_IFLNK]. 
@1@ Equivalent to {{c|s.type() {{==}} file_type::symlink}}.
@2@ Equivalent to {{c|is_symlink(status(p))}} or {{c|is_symlink(status(p, ec))}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a symbolic link. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2,3@ {{cpp/experimental/fs/error_handling|p}}

===Notes===
The information provided by this function is usually also provided as a byproduct of directory iteration. During directory iteration, calling {{tt|is_symlink(*iterator)}} is less efficient than {{tt|is_symlink(iterator-&gt;status())}}

===Example===
{{cpp/experimental/fs/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc inc | cpp/experimental/fs/dsc is_block_file}}
{{dsc inc | cpp/experimental/fs/dsc is_character_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_socket}}
{{dsc inc | cpp/experimental/fs/dsc exists}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>ihg2wr0dw58ngcwrs3wgt83hrbarz2d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/last write time</title>
    <ns>0</ns>
    <id>14053</id>
    <revision>
      <id>77615</id>
      <parentid>77614</parentid>
      <timestamp>2015-03-31T19:38:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1689">{{cpp/experimental/fs/title|last_write_time}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
file_time_type last_write_time(const path&amp; p);
file_time_type last_write_time(const path&amp; p, error_code&amp; ec)
}}
{{dcl | num=2 | since=fs_ts | 1=
void last_write_time(const path&amp; p, file_time_type new_time);
void last_write_time(const path&amp; p, file_time_type new_time, error_code&amp; ec);
}}
{{dcl end}}

@1@ Returns the time of the last modification of {{tt|p}}, determined as if by accessing the member {{tt|st_mtime}} of the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat] (symlinks are followed)
The non-throwing overload returns {{c|file_time_type::min()}} on errors.
@2@ Changes the time of the last modification of {{tt|p}}, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html futimens] (symlinks are followed)

===Parameters===
{{par begin}}
{{par | p | path to examine or modify}}
{{par | new_time | new modification time}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
@1@ The time of the last modification of {{tt|p}}
@2@ (none)

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Notes===
It is not guaranteed that immediately after setting the write time, the value returned by {{v|1}} is the same as what was passed as the argument to {{v|2}} because the file system's time may be more granular than {{tt|file_time_type}}.

===Example===
{{cpp/experimental/fs/time_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc file_time_type}}
{{dsc end}}</text>
      <sha1>8g4dfy3sgl4hu71omaqpyh6ef3c0qsx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path</title>
    <ns>0</ns>
    <id>13411</id>
    <revision>
      <id>88425</id>
      <parentid>87165</parentid>
      <timestamp>2016-11-18T10:01:48Z</timestamp>
      <contributor>
        <ip>46.39.53.135</ip>
      </contributor>
      <text xml:space="preserve" bytes="5552">{{cpp/experimental/fs/title|path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 
class path;
}}
{{dcl end}}

Objects of type {{tt|path}} represent paths on a filesystem. Only syntactic aspects of paths are handled: the pathname may represent a non-existing path or even one that is not allowed to exist on the current file system or OS.

The path name has the following syntax:
# {{spar|root-name}}{{mark optional}}: identifies the root on a filesystem with multiple roots (such as {{c|&quot;C:&quot;}} or {{c|&quot;//myserver&quot;}}. POSIX filesystems have single root.
# {{spar|root-directory}}{{mark optional}}: a directory separator that, if present, marks this path as ''absolute''. If it is missing (and the first element other than the root name is a file name), then the path is ''relative'' and requires another path as the starting location to resolve to a file name.
# Zero or more of the following:
:* {{spar|file-name}}: sequence of characters that aren't directory separators or preferred directory separators (additional limitations may be imposed by the OS or file system). This name may identify a file, a hard link, a symbolic link, or a directory. Two special {{spar|file-name}}s are recognized:
::* {{spar|dot}}: the file name consisting of a single dot character {{c|.}} is a directory name that refers to the current directory
::* {{spar|dot-dot}}: the file name consisting of two dot characters {{c|..}} is a directory name that refers to the parent directory.
:* {{spar|directory-separator}}s: the forward slash character {{c|/}} or the alternative character provided as {{tt|path::preferred_separator}}. If this character is repeated, it is treated as a single directory separator: {{c|/usr///////lib}} is the same as {{c|/usr/lib}}

The path can be traversed element-wise via iterators returned by the {{lc|begin()}} and {{lc|end()}} functions, which iterates over root name, root directory, and the subsequent file name elements (directory separators are skipped except the one that identifies the root directory). If the very last element in the path is a directory separator, the last iterator will dereference to a file name {{spar|dot}}.

Calling any non-const member function of a {{tt|path}} invalidates all iterators referring to elements of that object.

If the OS uses a ''native'' syntax that is different from the portable ''generic'' syntax described above, all library functions accept path names in both formats.

Paths are implicitly convertible to and from {{lc|std::basic_string}}s, which makes it possible to use them with other file APIs, e.g. as an argument to {{lc|std::ifstream::open}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | character type used by the native encoding of the filesystem: {{c|char}} on POSIX, {{c|wchar_t}} on Windows }}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;value_type&gt;}}}}
{{dsc | {{tt|const_iterator}} | a constant {{concept|BidirectionalIterator}} with a {{tt|value_type}} of {{tt|path}}}}
{{dsc | {{tt|iterator}} | an alias to {{tt|const_iterator}}}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr value_type}} preferred_separator | alternative directory separator which may be used in addition to the portable {{c|/}}. On Windows, this is the backslash character {{c|\}}. On POSIX, this is the same forward slash {{c|/}} as the portable separator }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc constructor}}
{{dsc inc | cpp/experimental/fs/path/dsc destructor}}
{{dsc inc | cpp/experimental/fs/path/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/fs/path/dsc assign}}

{{dsc h2 | Concatenation}}
{{dsc inc | cpp/experimental/fs/path/dsc append}}
{{dsc inc | cpp/experimental/fs/path/dsc concat}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/experimental/fs/path/dsc clear}}
{{dsc inc | cpp/experimental/fs/path/dsc make_preferred}}
{{dsc inc | cpp/experimental/fs/path/dsc remove_filename}}
{{dsc inc | cpp/experimental/fs/path/dsc replace_filename}}
{{dsc inc | cpp/experimental/fs/path/dsc replace_extension}}
{{dsc inc | cpp/experimental/fs/path/dsc swap}}

{{dsc h2 | Format observers}}
{{dsc inc | cpp/experimental/fs/path/dsc native}}
{{dsc inc | cpp/experimental/fs/path/dsc string}}
{{dsc inc | cpp/experimental/fs/path/dsc generic_string}}

{{dsc h2 | Compare}}
{{dsc inc | cpp/experimental/fs/path/dsc compare}}

{{dsc h2 | Decomposition}}
{{dsc inc | cpp/experimental/fs/path/dsc root_name}}
{{dsc inc | cpp/experimental/fs/path/dsc root_directory}}
{{dsc inc | cpp/experimental/fs/path/dsc root_path}}
{{dsc inc | cpp/experimental/fs/path/dsc relative_path}}
{{dsc inc | cpp/experimental/fs/path/dsc parent_path}}
{{dsc inc | cpp/experimental/fs/path/dsc filename}}
{{dsc inc | cpp/experimental/fs/path/dsc stem}}
{{dsc inc | cpp/experimental/fs/path/dsc extension}}

{{dsc h2 | Queries}}
{{dsc inc | cpp/experimental/fs/path/dsc empty}}
{{dsc inc | cpp/experimental/fs/path/dsc has_path}}
{{dsc inc | cpp/experimental/fs/path/dsc is_absrel}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/experimental/fs/path/dsc begin}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc swap2}}
{{dsc inc | cpp/experimental/fs/path/dsc operator_cmp}}
{{dsc inc | cpp/experimental/fs/path/dsc operator/}}
{{dsc inc | cpp/experimental/fs/path/dsc operator_ltltgtgt}}
{{dsc inc | cpp/experimental/fs/path/dsc u8path}}
{{dsc end}}</text>
      <sha1>29iunpzbtwwvb6gxcqiglyze34mxry5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/append</title>
    <ns>0</ns>
    <id>13412</id>
    <revision>
      <id>86698</id>
      <parentid>86697</parentid>
      <timestamp>2016-07-10T07:03:16Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 86697 by [[Special:Contributions/188.98.210.219|188.98.210.219]] ([[User talk:188.98.210.219|talk]]); add a bit explanation</comment>
      <text xml:space="preserve" bytes="2794">{{cpp/experimental/fs/path/title|append|operator/{{=}}}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num = 1 | since=fs_ts | 1=
path&amp; operator/=(const path&amp; p);
}}
{{dcl | num=2 | since=fs_ts | 1=
template&lt; class Source &gt;
path&amp; operator/=( const Source&amp; source );
}}
{{dcl | num=3 | since=fs_ts | 1=
template&lt; class Source &gt;
path&amp; append( const Source&amp; source );
}}
{{dcl | num=4 | since=fs_ts | 1=
template&lt; class InputIt &gt;
path&amp; append( InputIt first, InputIt last );
}}
{{dcl end}}

@1@ First, appends the preferred directory separator to {{c|this}}, except if any of the following conditions is true:
@@* the separator would be redundant ({{c|*this}} already ends with a separator)
@@* {{c|*this}} is empty, or adding it would turn a relative path to an absolute path in some other way
@@* {{tt|p}} is an empty path.
@@* {{c|p.native()}} begins with a directory separator.
@@Then, appends {{c|p.native()}} to the pathname maintained by {{c|*this}}
@2,3@ Same as {{v|1}}, but accepts any {{c|std::basic_string}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence.
@4@ Same as {{v|1}}, but accepts any iterator pair that designates a multicharacter string.

===Parameters===
{{par begin}}
{{par | p | pathname to append }}
{{par | source | {{c|std::basic_string}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence, which represents a path name (either in portable or in native format) }}
{{par | first, last| pair of {{concept|InputIterator}}s that specify a multicharacter sequence that represents a path name }}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{cpp/experimental/fs/error_handling_exception_only}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main() {
    fs::path p1 = &quot;C:&quot;;
    p1 /= &quot;Users&quot;; // does not insert a separator
                   // &quot;C:Users&quot; is a relative path in Windows
                   // adding directory separator would turn it to an absolute path
    std::cout &lt;&lt; &quot;\&quot;C:\&quot; / \&quot;Users\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
    p1 /= &quot;batman&quot;; // inserts fs::path::preferred_separator, '\' on Windows
    std::cout &lt;&lt; &quot;\&quot;C:\&quot; / \&quot;Users\&quot; / \&quot;batman\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
}
|p=true
|output=
&quot;C:&quot; / &quot;Users&quot; == &quot;C:Users&quot;
&quot;C:&quot; / &quot;Users&quot; / &quot;batman&quot; == &quot;C:Users\batman&quot;
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc concat}}
{{dsc inc | cpp/experimental/fs/path/dsc operator/}}
{{dsc end}}</text>
      <sha1>b3bf8est5tygyw6zstvb8bebl0fmxik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/assign</title>
    <ns>0</ns>
    <id>13413</id>
    <revision>
      <id>68581</id>
      <parentid>68580</parentid>
      <timestamp>2014-03-19T00:37:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="981">{{cpp/experimental/fs/path/title|assign}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
template&lt; class Source &gt;
path&amp; assign( const Source&amp; source );
}}
{{dcl | num=2 | since=fs_ts | 1=
template&lt; class InputIt &gt;
path&amp; assign( InputIt first, InputIt last );
}}
{{dcl end}}

Assigns the contents to the {{tt|path}} object.

@1@ Assigns the range of {{tt|source}}. {{todo}}

@2@ Assigns the pathname identified by range {{tt|[first, last)}}.

===Parameters===
{{par begin}}
{{par | source | a range to assign}}
{{par | first, last | a range to assign}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{todo}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>6axx4ney0edmgemjvd2nx208t8viumo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/begin</title>
    <ns>0</ns>
    <id>13414</id>
    <revision>
      <id>77990</id>
      <parentid>77137</parentid>
      <timestamp>2015-04-23T14:40:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention ub on *end()</comment>
      <text xml:space="preserve" bytes="1494">{{cpp/experimental/fs/path/title|begin|end}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
iterator begin() const;
}}
{{dcl | num=2 | since=fs_ts | 1=
iterator end() const;
}}
{{dcl end}}

@1@ Returns an iterator to the first element of the path. If the path is empty, the returned iterator is equal to {{lc|end()}}.
@2@ Returns an iterator one past the last element of the path. Dereferencing this iterator is undefined behavior.

The sequence denoted by this pair of iterators consists of the following:
@1@ {{spar|root-name}} (if any)
@2@ {{spar|root-directory}} (if any)
@3@ sequence of {{spar|file-name}}s, omitting any directory separators
@4@ If there is a directory separator after the last {{spar|file-name}} in the path, the last element before the end iterator is a fictitious {{spar|dot}} file name.

===Parameters===
(none)

===Return value===
@1@ Iterator to the first element of the path.
@2@ Iterator one past the end of the path

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = &quot;C:\\users\\abcdef\\AppData\\Local\\Temp\\&quot;;
    std::cout &lt;&lt; &quot;Examining the path &quot; &lt;&lt; p &lt;&lt; &quot; through iterators gives\n&quot;;
    for(auto&amp; e : p)
        std::cout &lt;&lt; e &lt;&lt; '\n';
}
|output=
Examining the path &quot;C:\users\abcdef\AppData\Local\Temp\&quot; through iterators gives
&quot;C:&quot;
&quot;/&quot;
&quot;users&quot;
&quot;abcdef&quot;
&quot;AppData&quot;
&quot;Local&quot;
&quot;Temp&quot;
&quot;.&quot;
}}</text>
      <sha1>7hpmde55tkp9sg22mz9o24i2wc7pwp6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/c str</title>
    <ns>0</ns>
    <id>13415</id>
    <revision>
      <id>91491</id>
      <parentid>68585</parentid>
      <timestamp>2017-03-31T19:47:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="455">{{cpp/experimental/fs/path/title|c_str}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
const value_type* c_str() const;
}}
{{dcl end}}

Returts C-string version of the path.

Equivalent to {{c|native().c_str()}}.

===Parameters===
(none)

===Return value===
C-string version of the path name.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc native}}
{{dsc end}}</text>
      <sha1>jm77gkhyiikppng8pu3wl4kemexezfo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/clear</title>
    <ns>0</ns>
    <id>13416</id>
    <revision>
      <id>91486</id>
      <parentid>74027</parentid>
      <timestamp>2017-03-31T19:47:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="284">{{cpp/experimental/fs/path/title|clear}}
{{cpp/experimental/fs/path/navbar}}
{{ddcl | since=fs_ts |
void clear();
}}

Clears the stored pathname. {{lc|empty()}} is {{c|true}} after the call.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>3rgr1a6azs4c2a8ypaxx29nyp13727a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/compare</title>
    <ns>0</ns>
    <id>13417</id>
    <revision>
      <id>91694</id>
      <parentid>79542</parentid>
      <timestamp>2017-03-31T19:55:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2232">{{cpp/experimental/fs/path/title|compare}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
int compare( const path&amp; p ) const;
}}
{{dcl | num=2 | since=fs_ts | 1=
int compare( const string_type&amp; str ) const;
}}
{{dcl | num=3 | since=fs_ts | 1=
int compare( const value_type* s ) const;
}}
{{dcl end}}

Compares the lexical representations of the path and another path.

@1@ Returns a value less than, equal to or greater than {{math|0}} if the native representation of the path ({{rlp|native}}()) is respectively lexicographically less than, equal to or greater than the native representation of {{tt|p}} ({{c|p.native()}}). Comparison is performed element-wise, as if by iterating both paths from {{rlp|begin}}() to {{rlp|begin|end}}().
@2@ Equivalent to {{c|compare(path(str))}}.
@3@ Equivalent to {{c|compare(path(s))}}.

===Parameters===
{{par begin}}
{{par | p | a path to compare to}}
{{par | str | a string representing path to compare to}}
{{par | s | a null-terminated string representing path to compare to}}
{{par end}}

===Return value===
A value less than {{math|0}} if the path is lexicographically less than the given path.

A value equal to {{math|0}} if the path is lexicographically equal to the given path.

A value greater than {{math|0}} if the path is lexicographically greater than the given path.

===Exceptions===
@1@ {{unreviewed noexcept}}

@2-3@ (none)

===Notes===
For two-way comparisons, [[cpp/experimental/fs/path/operator_cmp|binary operators]] may be more suitable.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
void demo(int rc, fs::path p1, fs::path p2) {
    if(rc &lt; 0) std::cout &lt;&lt; p1 &lt;&lt; &quot; &lt; &quot; &lt;&lt; p2 &lt;&lt; '\n';
    else if(rc &gt; 0) std::cout &lt;&lt; p1 &lt;&lt; &quot; &gt; &quot;  &lt;&lt; p2 &lt;&lt; '\n';
    else if(rc == 0) std::cout &lt;&lt; p1 &lt;&lt; &quot;==&quot; &lt;&lt; p2 &lt;&lt; '\n';
}
int main() {
    fs::path p1 = &quot;/a/b/&quot;; // as if &quot;a/b/.&quot; for lexicographical iteration
    fs::path p2 = &quot;/a/b/#&quot;;
    demo(p1.compare(p2), p1, p2);
    demo(p1.compare(&quot;a/b/_&quot;), p1, &quot;a/b/_&quot;);
}
|output=
&quot;/a/b/&quot; &gt; &quot;/a/b/#&quot;
&quot;/a/b/&quot; &lt; &quot;a/b/_&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc operator_cmp}}
{{dsc end}}</text>
      <sha1>gjosgflvdyko5so4vni2wlqawuo7pqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/concat</title>
    <ns>0</ns>
    <id>13418</id>
    <revision>
      <id>78008</id>
      <parentid>68591</parentid>
      <timestamp>2015-04-23T21:07:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+details, example</comment>
      <text xml:space="preserve" bytes="3905">{{cpp/experimental/fs/path/title|concat|operator+{{=}}}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
path&amp; operator+=( const path&amp; p );
}}
{{dcl | num=2 | since=fs_ts | 1=
path&amp; operator+=( const string_type&amp; str );
}}
{{dcl | num=3 | since=fs_ts | 1=
path&amp; operator+=( const value_type* ptr );
}}
{{dcl | num=4 | since=fs_ts | 1=
path&amp; operator+=( value_type x );
}}
{{dcl | num=5 | since=fs_ts | 1=
template&lt; class Source &gt;
path&amp; operator+=( const Source&amp; source );
}}
{{dcl | num=6 | since=fs_ts | 1=
template&lt; class CharT &gt;
path&amp; operator+=( CharT x );
}}
{{dcl | num=7 | since=fs_ts | 1=
template&lt; class Source &gt;
path&amp; concat( const Source&amp; source );
}}
{{dcl | num=8 | since=fs_ts | 1=
template&lt; class InputIt &gt;
path&amp; concat( InputIterator first, InputIterator last );
}}
{{dcl end}}

Concatenates the current path and the argument

@1@ Concatenates {{c|*this}} and {{c|p}} in such a way that {{rlp|native|native()}} of the result is exactly original {{rlp|native|native()}} concatenated with {{c|p.native()}}
@2@ Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{{rlp|native|native()}} and the string {{tt|str}}
@3@ Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{rlp|native|native()}} and the null-terminated string whose first character is pointed to by {{tt|ptr}}
@4@ Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{rlp|native|native()}} and the single character {{tt|x}}
@5@  Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{rlp|native|native()}} and the sequence (which may be in portable or native format) represented by {{tt|source}}, which may be {{c|std::basic_string}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence.
@6@ Same as {{v|4}}, except that character conversion may be performed
@7@ Same as {{v|5}}
@8@ Same as {{v|5}}, except that the sequence is represented by any iterator pair that designates a multicharacter string.

===Parameters===
{{par begin}}
{{par | p | path to append}}
{{par | str | string to append}}
{{par | ptr | pointer to the beginning of a null-terminated string to append}}
{{par | x | single character to append}}
{{par | source | {{c|std::basic_string}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence, which represents a path name (either in portable or in native format) }}
{{par | first, last| pair of {{concept|InputIterator}}s that specify a multicharacter sequence that represents a path name }}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par req | {{tt|CharT}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{cpp/experimental/fs/error_handling_exception_only}}

===Notes===
Unlike with {{lc|append()}} or {{lc|operator/{{=}}}}, additional directory separators are never introduced.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main() {
    fs::path p1; // empty path
    p1 += &quot;var&quot;; // does not insert a separator
    std::cout &lt;&lt; &quot;\&quot;\&quot; + \&quot;var\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
    p1 += &quot;lib&quot;; // does not insert a separator
    std::cout &lt;&lt; &quot;\&quot;\&quot; + \&quot;var\&quot; + \&quot;lib\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
}
|output=
&quot;&quot; + &quot;var&quot; == &quot;var&quot;
&quot;&quot; + &quot;var&quot; + &quot;lib&quot; == &quot;varlib&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc append}}
{{dsc inc | cpp/experimental/fs/path/dsc operator/}}
{{dsc end}}</text>
      <sha1>o328ywpf7xfrwji3qevgja6qsyi3p7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/empty</title>
    <ns>0</ns>
    <id>13419</id>
    <revision>
      <id>91585</id>
      <parentid>68593</parentid>
      <timestamp>2017-03-31T19:50:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="417">{{cpp/experimental/fs/path/title|empty}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
bool empty() const;
}}
{{dcl end}}

Checks if the path is empty.

===Parameters===
(none)

===Return value===
{{c|true}} if the path is empty, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc has_path}}
{{dsc end}}</text>
      <sha1>8pw0p7wuhi757kclq977erdnx9xu9g1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/extension</title>
    <ns>0</ns>
    <id>13421</id>
    <revision>
      <id>78397</id>
      <parentid>78395</parentid>
      <timestamp>2015-05-20T18:05:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>wording</comment>
      <text xml:space="preserve" bytes="2475">{{cpp/experimental/fs/path/title|extension}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path extension() const;
}}
{{dcl end}}

Returns the extension of the filename component of the path {{c|*this}}.

If the {{ltt|cpp/experimental/fs/path/filename|filename()}} component of the path contains a period ({{ttb|.}}), and is not one of the special filesystem elements {{spar|dot}} or {{spar|dot-dot}}, then the ''extension'' is the substring beginning at the rightmost period (including the period) and until the end of the pathname.

If the pathname is either {{tt|.}} or {{tt|..}}, or if {{ltt|cpp/experimental/fs/path/filename|filename()}} does not contain the {{tt|.}} character, then empty path is returned. 

Additional behavior may be defined by the implementations for file systems which append additional elements (such as alternate data streams or partitioned dataset names) to extensions.

===Parameters===
(none)

===Return value===
The extension of the current pathname or an empty path if there's no extension.

===Exceptions===
(none)

===Notes===
The extension as returned by this function includes a period to make it possible to distinguish the file that ends with a period (function returns {{c|&quot;.&quot;}}) from a file with no extension (function returns {{c|&quot;&quot;}})

For any path {{tt|p}}, {{c|1=p.stem()+p.extension() == p.filename()}}

===Example===
{{example 
| code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    std::cout &lt;&lt; fs::path(&quot;/foo/bar.txt&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.txt/bar.cc&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.txt/bar.&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.txt/bar&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/..&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.hidden&quot;).extension() &lt;&lt; '\n';
}
| output=
&quot;.txt&quot;
&quot;.&quot;
&quot;&quot;
&quot;.cc&quot;
&quot;.&quot;
&quot;&quot;
&quot;&quot;
&quot;&quot;
&quot;.hidden&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc filename}}
{{dsc inc | cpp/experimental/fs/path/dsc stem}}
{{dsc inc | cpp/experimental/fs/path/dsc replace_extension}}
{{dsc mem fun | cpp/experimental/fs/path/has_path | title=has_extension | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>drhc4twkxwlwk4qfnk3xd8grlc7xw8o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/filename</title>
    <ns>0</ns>
    <id>13422</id>
    <revision>
      <id>78392</id>
      <parentid>78391</parentid>
      <timestamp>2015-05-20T17:40:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-stray dsc end</comment>
      <text xml:space="preserve" bytes="1338">{{cpp/experimental/fs/path/title|filename}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path filename() const;
}}
{{dcl end}}

Returns the filename component of the path.

Equivalent to {{cc|empty() ? path() : *--end()}}.

===Parameters===
(none)

===Return value===
The filename identified by the path.

===Exceptions===
(none)

===Example===
{{example 
| code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    std::cout &lt;&lt; fs::path(&quot;/foo/bar.txt&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.bar&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar/&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/..&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;.&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;..&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/&quot;).filename() &lt;&lt; '\n';
}
| output=
&quot;bar.txt&quot;
&quot;.bar&quot;
&quot;.&quot;
&quot;.&quot;
&quot;..&quot;
&quot;.&quot;
&quot;..&quot;
&quot;/&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc extension}}
{{dsc inc | cpp/experimental/fs/path/dsc stem}}
{{dsc inc | cpp/experimental/fs/path/dsc replace_filename}}
{{dsc mem fun | cpp/experimental/fs/path/has_path | title=has_filename | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>kheslum0ns5uuukb7wxl2pdhkjm8ml0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/generic string</title>
    <ns>0</ns>
    <id>13423</id>
    <revision>
      <id>68601</id>
      <parentid>68600</parentid>
      <timestamp>2014-03-19T00:38:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="1480">{{cpp/experimental/fs/path/title|generic_string,generic_wstring,generic_u8string,...}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt;
          class Alloc = std::allocator&lt;CharT&gt; &gt;
std::basic_string&lt;CharT,Traits,Alloc&gt;
    generic_string( const Allocator&amp; a = Allocator() ) const;
}}
{{dcl rev begin | num=2 | since=fs_ts}}
{{dcl | 
std::string generic_string() const;
}}
{{dcl |
std::wstring generic_wstring() const;
}}
{{dcl |
std::u8string generic_u8string() const;
}}
{{dcl |
std::u16string generic_u16string() const;
}}
{{dcl |
std::u32string generic_u32string() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the internal pathname in generic pathname format, converted to specific string type. Conversion, if any, is specified in [[todo]]. The {{tt|/}} character is used as the directory separator. 

@1@ All memory allocations are performed by {{tt|a}}.

@2@ The encoding in the case of {{tt|u8string()}} is always UTF-8.

===Parameters===
{{par begin}}
{{par | a | allocator to construct the string with}}
{{par req | {{tt|CharT}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}

===Return value===
The internal pathname in generic pathname format, converted to specified string type.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc string}}
{{dsc end}}</text>
      <sha1>phwtsh6nx45lac9vestkirfqmhnajwp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/has path</title>
    <ns>0</ns>
    <id>13424</id>
    <revision>
      <id>68603</id>
      <parentid>68602</parentid>
      <timestamp>2014-03-19T00:38:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="1324">{{cpp/experimental/fs/path/title|has_..._path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
bool has_root_path() const;
}}
{{dcl | num=2 | since=fs_ts | 1=
bool has_root_name() const;
}}
{{dcl | num=3 | since=fs_ts | 1=
bool has_root_directory() const;
}}
{{dcl | num=4 | since=fs_ts | 1=
bool has_relative_path() const;
}}
{{dcl | num=5 | since=fs_ts | 1=
bool has_parent_path() const;
}}
{{dcl | num=6 | since=fs_ts | 1=
bool has_filename() const;
}}
{{dcl | num=7 | since=fs_ts | 1=
bool has_stem() const;
}}
{{dcl | num=8 | since=fs_ts | 1=
bool has_extension() const;
}}
{{dcl end}}

Checks whether the path contains the corresponding path element.

@1@ Checks whether {{lc|root_path()}} is empty.

@2@ Checks whether {{lc|root_name()}} is empty.

@3@ Checks whether {{lc|root_directory()}} is empty.

@4@ Checks whether {{lc|relative_path()}} is empty.

@5@ Checks whether {{lc|parent_path()}} is empty.

@6@ Checks whether {{lc|filename()}} is empty.

@7@ Checks whether {{lc|stem()}} is empty.

@8@ Checks whether {{lc|extension()}} is empty.

===Parameters===
(none)

===Return value===
{{c|true}} if the corresponding path is not empty, {{c|false}} otherwise.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc empty}}
{{dsc end}}</text>
      <sha1>gwrgivb59w9bsw5o75k617xjuxdnkw9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/is absrel</title>
    <ns>0</ns>
    <id>13425</id>
    <revision>
      <id>78402</id>
      <parentid>68605</parentid>
      <timestamp>2015-05-21T01:11:45Z</timestamp>
      <contributor>
        <ip>124.163.209.100</ip>
      </contributor>
      <text xml:space="preserve" bytes="816">{{cpp/experimental/fs/path/title|is_absolute,is_relative}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
bool is_absolute() const;
}}
{{dcl | num=2 | since=fs_ts | 1=
bool is_relative() const;
}}
{{dcl end}}

Checks whether the path is absolute or relative. An absolute path is such that the elements of {{c|root_path()}} uniquely identify a file system location. The first version returns {{c|true}} if the path is absolute, {{c|false}} otherwise; the second version the other way round.

===Parameters===
(none)

===Return value===
@1@ {{c|true}} if the path is absolute, {{c|false}} otherwise.

@2@ {{c|false}} if the path is absolute, {{c|true}} otherwise.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc has_path}}
{{dsc end}}</text>
      <sha1>dj1gdlgk1othudk87f3ztahle48h8vg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/make preferred</title>
    <ns>0</ns>
    <id>13426</id>
    <revision>
      <id>68607</id>
      <parentid>68606</parentid>
      <timestamp>2014-03-19T00:38:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="488">{{cpp/experimental/fs/path/title|make_preferred}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
path&amp; make_preferred()
}}
{{dcl end}}

Converts all directory separators in path to the preferred directory separator.

For example, on systems, where {{tt|\}} is the preferred separator, the path {{tt|foo/bar}} will be converted to {{tt|foo\bar}}.

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
(none)

===See also===
{{todo}}</text>
      <sha1>80fc42u5dy49oybd989l14x0p2j9nbt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/native</title>
    <ns>0</ns>
    <id>13427</id>
    <revision>
      <id>91544</id>
      <parentid>78685</parentid>
      <timestamp>2017-03-31T19:49:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1349">{{cpp/experimental/fs/path/title|c_str|native|operator string_type()}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
const value_type* c_str() const;
}}
{{dcl | num=2 | since=fs_ts | 1=
const string_type&amp; native() const;
}}
{{dcl | num=3 | since=fs_ts | 1=
operator string_type() const;
}}
{{dcl end}}

Accesses the native path name as a character string.

@1@ Equivalent to {{c|native().c_str()}}.
@2@ Returns the native string representation of the pathname by reference.
@3@ Returns the native string representation of the pathname by value.

===Parameters===
(none)

===Return value===
The native string representation of the pathname, using native syntax, native character type, and native character encoding. This string is suitable for use with OS APIs.

===Exceptions===
@1,2@ {{unreviewed noexcept}}

===Notes===
The conversion function {{v|3}} is provided so that standard file-opening APIs that accept {{lc|std::basic_string}} file names, such as the {{lc|std::ifstream}} constructor, can use pathnames with no changes to code:
{{source|1=
fs::path p = &quot;/tmp/text.txt&quot;;
std::ifstream f(p);
}}

===Example===
{{cpp/experimental/fs/path/string_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc string}}
{{dsc inc | cpp/experimental/fs/path/dsc generic_string}}
{{dsc end}}</text>
      <sha1>dq2cdr89gyz2lh44ntqz72ptf1gl17w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/operator cmp</title>
    <ns>0</ns>
    <id>13429</id>
    <revision>
      <id>91405</id>
      <parentid>83201</parentid>
      <timestamp>2017-03-31T19:42:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2129">{{title|1=operator==,!=,&lt;,&lt;=,&gt;,&gt;={{small|(std::experimental::filesystem::path)}}}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
bool operator==( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=2 | since=fs_ts | 1=
bool operator!=( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=3 | since=fs_ts | 1=
bool operator&lt;( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=4 | since=fs_ts | 1=
bool operator&lt;=( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=5 | since=fs_ts | 1=
bool operator&gt;( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=6 | since=fs_ts | 1=
bool operator&gt;=( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl end}}

Compares two paths lexicographically.

@1@ Checks whether {{tt|lhs}} and {{tt|rhs}} are equal. Equivalent to {{c|!(lhs &lt; rhs) &amp;&amp; !(rhs &lt; lhs)}}.

@2@ Checks whether {{tt|lhs}} and {{tt|rhs}} are not equal. Equivalent to {{c|!(lhs {{==}} rhs)}}.

@3@ Checks whether {{tt|lhs}} is less than {{tt|rhs}}. Equivalent to {{c|lhs.compare(rhs) &lt; 0}}.

@4@ Checks whether {{tt|lhs}} is less than or equal to {{tt|rhs}}. Equivalent to {{c|!(rhs &lt; lhs)}}.

@5@ Checks whether {{tt|lhs}} is greater than {{tt|rhs}}. Equivalent to {{c|rhs &lt; lhs}}.

@6@ Checks whether {{tt|lhs}} is greater than or equal to {{tt|rhs}}. Equivalent to {{c|!(lhs &lt; rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | the paths to compare}}
{{par end}}

===Return value===
{{c|true}} if the corresponding comparison yields, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Path equality and equivalence have different semantics.

In the case of equality, as determined by {{tt|operator{{==}}}}, only lexical representations are compared. Therefore, {{c|1=path(&quot;a&quot;) == path(&quot;b&quot;)}} is never {{c|true}}.

In the case of equivalence, as determined by {{ltf|cpp/experimental/fs/equivalent}}, it is checked whether two paths ''resolve'' to the same file system object. Thus {{c|equivalent(&quot;a&quot;, &quot;b&quot;)}} will return {{c|true}} if the paths resolve to the same file.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc compare}}
{{dsc end}}</text>
      <sha1>jxz65ajbednkp3fjkppep6tikbabpyw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/operator ltltgtgt</title>
    <ns>0</ns>
    <id>13430</id>
    <revision>
      <id>78121</id>
      <parentid>78120</parentid>
      <timestamp>2015-05-02T14:45:10Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1422">{{title|operator&lt;&lt;,&gt;&gt;{{small|(std::experimental::filesystem::path)}}}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp;
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; os, const path&amp; p );
}}
{{dcl | num=2 | since=fs_ts | 1=
template&lt; class CharT, class Traits &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp;
    operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; is, path&amp; p );
}}
{{dcl end}}

Performs stream input or output on the path {{tt|p}}. {{c|std::quoted}} is used so that spaces are not truncation when later read by stream input operator.

===Parameters===
{{par begin}}
{{par | os | stream to perform output on}}
{{par | is | stream to perform input on}}
{{par | p | path to insert or extract}}
{{par end}}

===Return value===
@1@ {{c|os}}
@2@ {{c|is}}

===Exceptions===
(none)

===Possible implementation===
{{eq fun
 |1=
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp;
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; os, const path&amp; p )
{
    os &lt;&lt; std::quoted(p.string&lt;CharT,Traits&gt;());
    return os;
}
 |2=
template&lt; class CharT, class Traits &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp;
    operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; is, path&amp; p )
{
    std::basic_string&lt;CharT, Traits&gt; t;
    is &gt;&gt; std::quoted(t);
    p = t;
    return is;
}
}}

===Example===
{{example
 |code=
 |output=
}}</text>
      <sha1>o0bajqvddniseh7n3sbig3wp6j3vycu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/operator slash</title>
    <ns>0</ns>
    <id>13431</id>
    <revision>
      <id>91726</id>
      <parentid>78045</parentid>
      <timestamp>2017-03-31T19:55:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="657">{{cpp/experimental/fs/title|operator/{{small|(std::experimental::filesystem::path)}}}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
path operator/( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl end}}

Concatenates two path. Effectively returns {{c|1=path(lhs) /= rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | paths to concatenate}}
{{par end}}

===Return value===
The result of path concatenation.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc append}}
{{dsc end}}</text>
      <sha1>3n5z3jhwy5f2rb4sxntbsh5j3zf2nsr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/operator=</title>
    <ns>0</ns>
    <id>13428</id>
    <revision>
      <id>91412</id>
      <parentid>77140</parentid>
      <timestamp>2017-03-31T19:43:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1707">{{cpp/experimental/fs/path/title|operator{{=}}}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
path&amp; operator=( const path&amp; p );
}}
{{dcl | num=2 | since=fs_ts | 1=
path&amp; operator=( path&amp;&amp; p );
}}
{{dcl | num=2 | since=fs_ts | 1=
template&lt; class Source &gt;
path&amp; operator=( const Source&amp; source );
}}
{{dcl end}}

@1@ Replaces the contents of {{c|*this}} with a copy of the contents of {{tt|p}}.
@2@ Replaces the contents of {{c|*this}} with {{tt|p}}, possibly using move semantics: {{tt|p}} is left in valid, but unspecified state.
@3@ Replaces the contents of {{c|*this}} with a new path value constructed from {{tt|source}} as if by overload {{v|4}} of the [[cpp/experimental/fs/path/path|path constructor]]. Equivalent to {{c|assign(source)}}.

===Parameters===
{{par begin}}
{{par | p | a path to assign}}
{{par | source | a {{lc|std::basic_string}}, pointer to a null-terminated character/wide character string, or an input iterator that points to a null-terminated character/wide character sequence. The character type must be one of {{c|char}}, {{c|char16_t}}, {{c|char32_t}}, {{c|wchar_t}}}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ (none)

@2@ {{unreviewed noexcept}}

@3@ (none)

===Example===
{{example|code=
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = &quot;C:/users/abcdef/AppData/Local&quot;;
    p = p / &quot;Temp&quot;; // move assignment
    const wchar_t* wstr = L&quot;D:/猫.txt&quot;;
    p = wstr; // assignment from a source
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc assign}}
{{dsc inc | cpp/experimental/fs/path/dsc constructor}}
{{dsc end}}</text>
      <sha1>fnxd23o79bo38tmplxdbm3h6vwld7b1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/parent path</title>
    <ns>0</ns>
    <id>13432</id>
    <revision>
      <id>78288</id>
      <parentid>68619</parentid>
      <timestamp>2015-05-14T17:50:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+example</comment>
      <text xml:space="preserve" bytes="1054">{{cpp/experimental/fs/path/title|parent_path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path parent_path() const;
}}
{{dcl end}}

Returns the path to the parent directory. Returns empty path if {{c|empty()}} or there's only a single element in the path ({{c|1=begin() == --end()}}.

The resulting path is constructed by appending all elements in a range {{tt|[begin(), --end())}} to an empty path.

===Parameters===
(none)

===Return value===
The path to the parent directory.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    for(fs::path p : {&quot;/var/tmp/example.txt&quot;, &quot;/&quot;, &quot;/var/tmp/.&quot;})
        std::cout &lt;&lt; &quot;The parent path of &quot; &lt;&lt; p
                  &lt;&lt; &quot; is &quot; &lt;&lt; p.parent_path() &lt;&lt; '\n';
}
|p=true
|output=
The parent path of &quot;/var/tmp/example.txt&quot; is &quot;/var/tmp&quot;
The parent path of &quot;/&quot; is &quot;&quot;
The parent path of &quot;/var/tmp/.&quot; is &quot;/var/tmp&quot;
}}

===See also===
{{dsc begin}}
{{todo}}
{{dsc end}}</text>
      <sha1>9hn7a8qatfh4r9iei2frj2pzd02zcnj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/path</title>
    <ns>0</ns>
    <id>13433</id>
    <revision>
      <id>91389</id>
      <parentid>77138</parentid>
      <timestamp>2017-03-31T19:42:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4315">{{cpp/experimental/fs/path/title|path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1 |
path();
}}
{{dcl | since=fs_ts | num=2 |
path( const path&amp; p );
}}
{{dcl | since=fs_ts | num=3 |
path( path&amp;&amp; p );
}}
{{dcl | since=fs_ts | num=4 |
template&lt; class Source &gt;
path( const Source&amp; source );
}}
{{dcl | since=fs_ts | num=5 |
template&lt; class InputIt &gt;
path( InputIt first, InputIt last );
}}
{{dcl | since=fs_ts | num=6 |
template&lt; class Source &gt;
path( const Source&amp; source, const std::locale&amp; loc );
}}
{{dcl | since=fs_ts | num=7 |
template&lt; class InputIt &gt;
path( InputIt first, InputIt last, const std::locale&amp; loc );
}}
{{dcl end}}

Constructs a new {{tt|path}} object.

@1@ Constructs an empty path.
@2@ Copy constructor. Constructs a copy of {{tt|p}}.
@3@ Move constructor. Constructs a copy of {{tt|p}}, {{tt|p}} is left in valid but unspecified state.
@4-5@ Constructs the path from a character sequence provided by {{tt|source}} {{v|4}}, which is a pointer or an input iterator to a null-terminated character/wide character sequence or an {{lc|std::basic_string}}, or represented as a pair of input iterators [{{tt|first}}, {{tt|last}}) {{v|5}}. Any of the four character types {{c|char}}, {{c|char16_t}}, {{c|char32_t}}, {{c|wchar_t}} is allowed, and the method of conversion to the native character set depends on the character type used by {{tt|source}}
:*If the source character type is {{c|char}}, the encoding of the source is assumed to be the native narrow encoding (so no conversion takes place on POSIX systems)
:*If the source character type is {{c|char16_t}}, conversion from UTF-16 to native filesystem encoding is used.
:*If the source character type is {{c|char32_t}}, conversion from UTF-32 to native filesystem encoding is used.
:* If the source character type is {{c|wchar_t}}, the input is assumed to be the native wide encoding (so no conversion takes places on Windows)
@6-7@ Constructs the path from a character sequence provided by {{tt|source}} {{v|6}}, which is a pointer or an input iterator to a null-terminated character sequence or an {{lc|std::string}}, or represented as a pair of input iterators [{{tt|first}}, {{tt|last}}) ({{v|7}}). The only character type allowed is {{c|char}}. Uses {{tt|loc}} to perform the character encoding conversion. If {{tt|value_type}} is {{c|wchar_t}}, converts from to wide using the {{c|std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;}} facet of {{tt|loc}}. Otherwise, first converts to wide using the {{c|std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;}} facet and then converts to filesystem native character type using {{c|std::codecvt&lt;wchar_t,value_type&gt;}} facet of {{tt|loc}}.

===Parameters===
{{par begin}}
{{par | p | a path to copy}}
{{par | source | a {{lc|std::basic_string}}, pointer to a null-terminated character string, or an input iterator with a character value type that points to a null-terminated character sequence (the character type must be {{c|char}} for overload {{v|6}} }}
{{par | first, last | pair of {{concept|InputIterator}}s that specify a UTF-8 encoded character sequence}}
{{par | loc | locale that defines encoding conversion to use}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the four character types {{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}} to use the overload {{v|5}})}}
{{par req | The value type of {{tt|InputIt}} must be {{c|char}} to use the overload {{v|7}})}}
{{par end}}

===Exceptions===
@1-2@ (none)
@3@ {{unreviewed noexcept}}
@4-7@ (none)

===Notes===
For portable pathname generation from Unicode strings, see {{rlp|u8path}}.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p1 = &quot;/usr/lib/sendmail.cf&quot;; // portable format
    fs::path p2 = &quot;C:\\users\\abcdef\\AppData\\Local\\Temp\\&quot;; // native format
    fs::path p3 = L&quot;D:/猫.txt&quot;; // wide string

    std::cout &lt;&lt; &quot;p1 = &quot; &lt;&lt; p1 &lt;&lt; '\n'
              &lt;&lt; &quot;p2 = &quot; &lt;&lt; p2 &lt;&lt; '\n'
              &lt;&lt; &quot;p3 = &quot; &lt;&lt; p3 &lt;&lt; '\n';
}
|output=
p1 = &quot;/usr/lib/sendmail.cf&quot;
p2 = &quot;C:\users\abcdef\AppData\Local\Temp\&quot;
p3 = &quot;D:/猫.txt&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc u8path}}
{{dsc end}}</text>
      <sha1>be2nfva7a31ppfljserwy0lh65o4h35</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/relative path</title>
    <ns>0</ns>
    <id>13434</id>
    <revision>
      <id>78286</id>
      <parentid>78285</parentid>
      <timestamp>2015-05-14T17:36:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p=true</comment>
      <text xml:space="preserve" bytes="1120">{{cpp/experimental/fs/path/title|relative_path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path relative_path() const;
}}
{{dcl end}}

Returns path relative to {{rlp|root path}}. If {{c|*this}} is an empty path, returns an empty path.

===Parameters===
(none)

===Return value===
Path relative to the {{rlp|root path}}.

===Exceptions===
(none)

===Examples===
{{example
 |code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::path p = fs::current_path();
    
    std::cout &lt;&lt; &quot;The current path &quot; &lt;&lt; p &lt;&lt; &quot; decomposes into:\n&quot;
              &lt;&lt; &quot;root-path &quot; &lt;&lt; p.root_path() &lt;&lt; '\n'
              &lt;&lt; &quot;relative path &quot; &lt;&lt; p.relative_path() &lt;&lt; '\n';
}
|p=true
 |output=
The current path &quot;C:\Users\abcdef\Local Settings\temp&quot; decomposes into:
root-path &quot;C:\&quot;
relative path &quot;Users\abcdef\Local Settings\temp&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc root_name}}
{{dsc inc | cpp/experimental/fs/path/dsc root_directory}}
{{dsc inc | cpp/experimental/fs/path/dsc root_path}}
{{dsc end}}</text>
      <sha1>lqjy0hh8enkc1el9bwgefqmksiuehdn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/remove filename</title>
    <ns>0</ns>
    <id>13435</id>
    <revision>
      <id>78390</id>
      <parentid>78389</parentid>
      <timestamp>2015-05-20T17:39:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+replace_filename to seealso</comment>
      <text xml:space="preserve" bytes="1008">{{cpp/experimental/fs/path/title|remove_filename}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
path&amp; remove_filename()
}}
{{dcl end}}

Removes a single filename component. 

The behavior is undefined if the path has no filename component ({{ltt|cpp/experimental/fs/path/has_path|has_filename}} returns {{c|false}}).

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{

    std::cout &lt;&lt; fs::path(&quot;/foo&quot;).remove_filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/&quot;).remove_filename() &lt;&lt; '\n';
}
| output=
&quot;/&quot;
&quot;&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc filename}}
{{dsc inc | cpp/experimental/fs/path/dsc replace_filename}}
{{dsc mem fun | cpp/experimental/fs/path/has_path | title=has_filename | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>mywgirszfrsh4dvlfc5dgih0vouligf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/replace extension</title>
    <ns>0</ns>
    <id>13436</id>
    <revision>
      <id>78399</id>
      <parentid>78398</parentid>
      <timestamp>2015-05-20T18:11:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>er oops, it's in-place, good I ran it</comment>
      <text xml:space="preserve" bytes="1441">{{cpp/experimental/fs/path/title|replace_extension}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
path&amp; replace_extension( const path&amp; replacement = path() );
}}
{{dcl end}}

Replaces the extension with {{tt|replacement}} or removes it when the default value of {{tt|replacement}} is used.

Firstly, if this path has an {{ltt|cpp/experimental/fs/path/extension|extension()}}, it is removed. 

Then, a dot character is appended if {{tt|replacement}} is not empty or does not begin with a dot character.

Then {{tt|replacement}} is appended to the path.

===Parameters===
{{par begin}}
{{par | replacement | the extension to replace with}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::path p = &quot;/foo/bar.jpeg&quot;;
    std::cout &lt;&lt; &quot;Was: &quot; &lt;&lt; p &lt;&lt; '\n';
    p.replace_extension(&quot;.jpg&quot;);
    std::cout &lt;&lt; &quot;Now: &quot; &lt;&lt; p.replace_extension(&quot;.jpg&quot;) &lt;&lt; '\n';
}
|output=
Was: &quot;/foo/bar.jpeg&quot;
Now: &quot;/foo/bar.jpg&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc extension}}
{{dsc inc | cpp/experimental/fs/path/dsc filename}}
{{dsc inc | cpp/experimental/fs/path/dsc stem}}
{{dsc mem fun | cpp/experimental/fs/path/has_path | title=has_extension | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>44ax33bs2a505424e0sqg53xkai8elq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/replace filename</title>
    <ns>0</ns>
    <id>13437</id>
    <revision>
      <id>78394</id>
      <parentid>78393</parentid>
      <timestamp>2015-05-20T17:44:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealsos</comment>
      <text xml:space="preserve" bytes="1220">{{cpp/experimental/fs/path/title|replace_filename}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl |  since=fs_ts | 1=
path&amp; replace_filename( const path&amp; replacement );
}}
{{dcl end}}

Replaces a single filename component with {{tt|replacement}}.

Equivalent to the following:
{{source|1=
remove_filename();
operator/=(replacement);
}}

The behavior is undefined if the path has no filename component ({{ltt|cpp/experimental/fs/path/has_path|has_filename}} returns {{c|false}}).

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{

    std::cout &lt;&lt; fs::path(&quot;/foo&quot;).replace_filename(&quot;bar&quot;) &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/&quot;).replace_filename(&quot;bar&quot;) &lt;&lt; '\n';
}
| output=
&quot;/bar&quot;
&quot;bar&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc replace_extension}}
{{dsc inc | cpp/experimental/fs/path/dsc filename}}
{{dsc inc | cpp/experimental/fs/path/dsc remove_filename}}
{{dsc mem fun | cpp/experimental/fs/path/has_path | title=has_filename | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>ddx4hu293py7ptguimvvwouhqg3czon</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/root directory</title>
    <ns>0</ns>
    <id>13438</id>
    <revision>
      <id>78287</id>
      <parentid>68631</parentid>
      <timestamp>2015-05-14T17:38:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+example</comment>
      <text xml:space="preserve" bytes="1137">{{cpp/experimental/fs/path/title|root_directory}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path root_directory() const;
}}
{{dcl end}}

Returns the root directory of the path. If the path does not include root name, returns {{c|path()}}.

===Parameters===
(none)

===Return value===
The root directory of the path.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::path p = fs::current_path();
    
    std::cout &lt;&lt; &quot;The current path &quot; &lt;&lt; p &lt;&lt; &quot; decomposes into:\n&quot;
              &lt;&lt; &quot;root name &quot; &lt;&lt; p.root_name() &lt;&lt; '\n'
              &lt;&lt; &quot;root directory &quot; &lt;&lt; p.root_directory() &lt;&lt; '\n'
              &lt;&lt; &quot;relative path &quot; &lt;&lt; p.relative_path() &lt;&lt; '\n';
}
|p=true
|output=
The current path &quot;C:\Users\abcdef\Local Settings\temp&quot; decomposes into:
root name &quot;C:&quot;
root directory &quot;\&quot;
relative path &quot;Users\abcdef\Local Settings\temp&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc root_name}}
{{dsc inc | cpp/experimental/fs/path/dsc root_path}}
{{dsc end}}</text>
      <sha1>3mg6gxn1e4yntry99klwztqi6my7u2f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/root name</title>
    <ns>0</ns>
    <id>13439</id>
    <revision>
      <id>78284</id>
      <parentid>78282</parentid>
      <timestamp>2015-05-14T17:31:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p=true</comment>
      <text xml:space="preserve" bytes="787">{{cpp/experimental/fs/path/title|root_name}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path root_name() const;
}}
{{dcl end}}

Returns the root name of the path. If the path does not include root name, returns {{c|path()}}.

===Parameters===
(none)

===Return value===
The root name of the path.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
 
int main()
{
    std::cout &lt;&lt; &quot;Current root name is: &quot; &lt;&lt; fs::current_path().root_name() &lt;&lt; '\n';
}
|p=true
|output=
Current root name is: &quot;C:&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc root_directory}}
{{dsc inc | cpp/experimental/fs/path/dsc root_path}}
{{dsc end}}</text>
      <sha1>ajb4bv8ysmnalqk8v9ngka79r3zhdbz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/root path</title>
    <ns>0</ns>
    <id>13440</id>
    <revision>
      <id>78283</id>
      <parentid>78281</parentid>
      <timestamp>2015-05-14T17:30:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p=true of course</comment>
      <text xml:space="preserve" bytes="864">{{cpp/experimental/fs/path/title|root_path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path root_path() const;
}}
{{dcl end}}

Returns the root path of the path. If the path does not include root path, returns {{c|path()}}.

Effectively, returns the following:
{{cc|
root_name() / root_directory()
}}

===Parameters===
(none)

===Return value===
The root path of the path.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    std::cout &lt;&lt; &quot;Current root path is: &quot; &lt;&lt; fs::current_path().root_path() &lt;&lt; '\n';
}
|p=true
|output=
Current root path is: &quot;C:\&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc root_name}}
{{dsc inc | cpp/experimental/fs/path/dsc root_directory}}
{{dsc end}}</text>
      <sha1>fss1x7v7dek0fvnqemmrwr9sinn75i2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/stem</title>
    <ns>0</ns>
    <id>13441</id>
    <revision>
      <id>78400</id>
      <parentid>68637</parentid>
      <timestamp>2015-05-20T18:17:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>updates</comment>
      <text xml:space="preserve" bytes="1284">{{cpp/experimental/fs/path/title|stem}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
path stem() const;
}}
{{dcl end}}

Returns the filename identified by the path stripped of its extension.

Returns the substring from the beginning of {{ltt|cpp/experimental/fs/path/filename|filename()}} up to and not including the last period ({{ttb|.}}) character.

If the filename is one of the special filesystem components {{spar|dot}} or {{spar|dot-dot}}, or if it has no periods, the function returns the entire {{ltt|cpp/experimental/fs/path/filename|filename()}}.

===Parameters===
(none)

===Return value===
The stem of the filename identified by the path.

===Exceptions===
(none)

===Example===
{{example 
| code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    std::cout &lt;&lt; fs::path(&quot;/foo/bar.txt&quot;).stem() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.bar&quot;).stem() &lt;&lt; '\n';

    for (fs::path p = &quot;foo.bar.baz.tar&quot;; !p.extension().empty(); p = p.stem())
        std::cout &lt;&lt; p.extension() &lt;&lt; '\n';
}
| output=
 &quot;bar&quot;
&quot;&quot;
&quot;.tar&quot;
&quot;.baz&quot;
&quot;.bar&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc filename}}
{{dsc inc | cpp/experimental/fs/path/dsc extension}}
{{dsc end}}</text>
      <sha1>sonq8harq2wkomv610d44tn09e6yort</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/string</title>
    <ns>0</ns>
    <id>13442</id>
    <revision>
      <id>85246</id>
      <parentid>80586</parentid>
      <timestamp>2016-04-12T13:21:34Z</timestamp>
      <contributor>
        <ip>63.117.0.34</ip>
      </contributor>
      <comment>Fixed typo</comment>
      <text xml:space="preserve" bytes="1202">{{cpp/experimental/fs/path/title|string,wstring,u8string,...}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt;
          class Alloc = std::allocator&lt;CharT&gt; &gt;
std::basic_string&lt;CharT,Traits,Alloc&gt;
    string( const Alloc&amp; a = Allocator() ) const;
}}
{{dcl rev begin | num=2 | since=fs_ts}}
{{dcl | 
std::string string() const;
}}
{{dcl |
std::wstring wstring() const;
}}
{{dcl |
std::string u8string() const;
}}
{{dcl |
std::u16string u16string() const;
}}
{{dcl |
std::u32string u32string() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the internal pathname in native pathname format, converted to specific string type. Conversion, if any, is specified in [[todo]].

@1@ All memory allocations are performed by {{tt|a}}.

@2@ The encoding in the case of {{tt|u8string()}} is always UTF-8.

===Parameters===
(none)

===Return value===
The internal pathname in native pathname format, converted to specified string type.

===Exceptions===
(none)

===Example===
{{cpp/experimental/fs/path/string_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc generic string}}
{{dsc end}}</text>
      <sha1>3jvlml7mq7h2tvzss5dy59uwqql62jg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/swap</title>
    <ns>0</ns>
    <id>13443</id>
    <revision>
      <id>91713</id>
      <parentid>68641</parentid>
      <timestamp>2017-03-31T19:55:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="443">{{cpp/experimental/fs/path/title|swap}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
void swap( path&amp; other );
}}
{{dcl end}}

Swaps the contents of {{c|*this}} and {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another path to exchange the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===
{{todo}}</text>
      <sha1>kvdusfy7e876pxswygxeyf7lyew07r7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/swap2</title>
    <ns>0</ns>
    <id>13444</id>
    <revision>
      <id>91331</id>
      <parentid>77995</parentid>
      <timestamp>2017-03-31T19:40:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="555">{{cpp/experimental/fs/title | swap{{small|(std::experimental::filesystem::path)}}}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts |
void swap( path&amp; lhs, path&amp; rhs );
}}
{{dcl end}}

Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | paths whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/path/dsc swap}}
{{dsc end}}</text>
      <sha1>06zaini7il6n3xql2umqpz1q8ramysd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/u8path</title>
    <ns>0</ns>
    <id>13445</id>
    <revision>
      <id>78683</id>
      <parentid>77998</parentid>
      <timestamp>2015-06-03T01:47:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>example</comment>
      <text xml:space="preserve" bytes="2656">{{cpp/experimental/fs/title|u8path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
template&lt; class Source &gt;
path u8path( const Source&amp; source );
}}
{{dcl | num=2 | since=fs_ts | 1=
template&lt; class InputIt &gt;
path u8path( InputIt first, InputIt last );
}}
{{dcl end}}

Constructs a path {{tt|p}} from a UTF-8 encoded sequence of {{c|char}}s, supplied either as an {{lc|std::string}}, or as a null-terminated multibyte string, or as a [first, last) iterator pair.

* If {{tt|path::value_type}} is {{c|char}} and native encoding is UTF-8, constructs a path directly as if by {{c|path(source)}} or {{c|path(first, last)}}. Note: this is the typical situation of a POSIX system that uses Unicode, such as Linux.
* Otherwise, if {{tt|path::value_type}} is {{c|wchar_t}} and native encoding is UTF-16 (this is the situation on Windows), or if {{tt|path::value_type}} is {{c|char16_t}} (native encoding guaranteed UTF-16) or {{c|char32_t}} (native encoding guaranteed UTF-32), then first converts the UTF-8 character sequence to a temporary string {{tt|tmp}} of type {{tt|path::string_type}} and then the new path is constructed as if by {{c|path(tmp)}}
* Otherwise (for non-UTF-8 narrow character encodings and for non-UTF-16 wchar_t), first converts the UTF-8 character sequence to a temporary UTF-32-encoded string {{tt|tmp}} of type {{c|std::u32string}}, and then the new path is constructed as if by {{c|path(tmp)}} (this path is taken on a POSIX system with a non-Unicode multibyte or single-byte encoded filesystem)

===Parameters===
{{par begin}}
{{par | source | an UTF-8 encoded {{lc|std::string}}, pointer to a null-terminated multibyte string, or an input iterator with char value type that points to a null-terminated multibyte string }}
{{par | first, last | pair of {{concept|InputIterator}}s that specify a UTF-8 encoded character sequence}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be {{c|char}}}}
{{par end}}

===Return value===
The path constructed from the input string after conversion from UTF-8 to the filesystem's native character encoding.

===Exceptions===
{{cpp/experimental/fs/error_handling_exception_only}}

===Notes===
On systems where native path format differs from the generic path format (neither Windows nor POSIX systems are examples of such OSes), if the argument to this function is using generic format, it will be converted to native.

===Example===
{{cpp/experimental/fs/path/string_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc path}}
{{dsc end}}</text>
      <sha1>2bm99yvu6affipo1zxvj7y04fz6trvb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/path/~path</title>
    <ns>0</ns>
    <id>13446</id>
    <revision>
      <id>68647</id>
      <parentid>68646</parentid>
      <timestamp>2014-03-19T00:38:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="163">{{cpp/experimental/fs/path/title|~path}}
{{cpp/experimental/fs/path/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts |
~path();
}}
{{dcl end}}

Destroys the path object.</text>
      <sha1>euj43tlrvam3zxphahd3hl8njia7mmb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/permissions</title>
    <ns>0</ns>
    <id>14060</id>
    <revision>
      <id>77753</id>
      <parentid>77750</parentid>
      <timestamp>2015-04-06T14:30:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention symlinks</comment>
      <text xml:space="preserve" bytes="2220">{{cpp/experimental/fs/title|permissions}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts|1=
void permissions(const path&amp; p, perms prms);
void permissions(const path&amp; p, perms prms, error_code&amp; ec);
}}
{{dcl end}}

Changes access permissions of the file to which {{tt|p}} resolves, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html fchmodat]. Symlinks are followed if {{tt|prms::resolve_symlinks}} is set.

The effects depend on {{tt|prms}} as follows:

* If neither {{c|perms::add_perms}} nor {{c|perms::remove_perms}} is set, file permissions are set to exactly {{c|prms &amp; fs::perms::mask}} (meaning, every valid bit of {{tt|prms}} is applied) 
* If {{c|perms::add_perms}}, the file permissions are set to exactly {{c|status(p).permissions() {{!}} (prms &amp; perms::mask)}} (meaning, any valid bit that is set in {{tt|prms}}, but not in the file's current permissions is added to the file's permissions)
* If {{c|perms::remove_perms}} is set, the file permissions are set to exactly {{c|status(p).permissions() &amp; ~(prms &amp; perms::mask)}} (meaning, any valid bit that is clear in {{tt|prms}}, but set in the file's current permissions is cleared in the file's permissions)
* If both {{c|perms::add_perms}} and {{c|perms::remove_perms}} are set, error occurs

The non-throwing overload has no special action on error.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | prms | permissions to set, add, or remove }}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Notes===
Permissions may not necessarily be implemented as bits, but they are treated that way conceptually.

Some permission bits may be ignored on some systems, and changing some bits may automatically change others (e.g. on platforms without owner/group/all distinction, setting any of the three write bits set all three)

===Example===
{{cpp/experimental/fs/permissions_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc perms}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc end}}</text>
      <sha1>a02fhyahne2pvjz1ao36b143vh2tqog</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/perms</title>
    <ns>0</ns>
    <id>13447</id>
    <revision>
      <id>77757</id>
      <parentid>77756</parentid>
      <timestamp>2015-04-06T22:11:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention which operators are defined</comment>
      <text xml:space="preserve" bytes="4322">{{cpp/experimental/fs/title|perms}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
enum class perms;
}}
{{dcl end}}

This type represents file access permissions. {{tt|perms}} satisfies the requirements of  {{concept|BitmaskType}} (which means the bitwise operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}} are defined for this type)

Access permissions model [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html POSIX permission bits], and any individual file permissions (as reported by {{rlp|status}}) are a combination of some of the following bits:

===Member constants===
{| class=&quot;wikitable&quot; style=&quot;text-align:left; font-size:85%; max-width:90em;&quot;
|-
! Member constant
! Value (octal)
! POSIX equivalent
! Meaning
|-
| {{tt|none}}
| {{c|0}}
|
| no permission bits are set
|-
| {{tt|owner_read}}
| {{c|0400}}
| {{c|S_IRUSR}}
| File owner has read permission
|-
| {{tt|owner_write}}
| {{c|0200}}
| {{c|S_IWUSR}}
| File owner has write permission
|-
| {{tt|owner_exec}}
| {{c|0100}}
| {{c|S_IXUSR}}
| File owner has execute/search permission
|-
| {{tt|owner_all}}
| {{c|0700}}
| {{c|S_IRWXU}}
| File owner has read, write, and execute/search permissions
Equivalent to {{c|owner_read {{!}} owner_write {{!}} owner_exec}}
|-
| {{tt|group_read}}
| {{c|040}}
| {{c|S_IRGRP}}
| The file's user group has read permission
|-
| {{tt|group_write}}
| {{c|020}}
| {{c|S_IWGRP}}
| The file's user group has write permission
|-
| {{tt|group_exec}}
| {{c|010}}
| {{c|S_IXGRP}}
| The file's user group has execute/search permission
|-
| {{tt|group_all}}
| {{c|070}}
| {{c|S_IRWXG}}
| The file's user group has read, write, and execute/search permissions
Equivalent to {{c|group_read {{!}} group_write {{!}} group_exec}}
|-
| {{tt|others_read}}
| {{c|04}}
| {{c|S_IROTH}}
| Other users have read permission
|-
| {{tt|others_write}}
| {{c|02}}
| {{c|S_IWOTH}}
| Other users have write permission
|-
| {{tt|others_exec}}
| {{c|01}}
| {{c|S_IXOTH}}
| Other users have execute/search permission
|-
| {{tt|others_all}}
| {{c|07}}
| {{c|S_IRWXO}}
| Other users have read, write, and execute/search permissions
Equivalent to {{c|others_read {{!}} others_write {{!}} others_exec}}
|-
| {{tt|all}}
| {{c|0777}}
|
| All users have read, write, and execute/search permissions
Equivalent to {{c|owner_all {{!}} group_all {{!}} others_all}}
|-
| {{tt|set_uid}}
| {{c|04000}}
| {{c|S_ISUID}}
| Set user ID to file owner user ID on execution
|-
| {{tt|set_gid}}
| {{c|02000}}
| {{c|S_ISGID}}
| Set group ID to file's user group ID on execution
|-
| {{tt|sticky_bit}}
| {{c|01000}}
| {{c|S_ISVTX}}
| Implementation-defined meaning, but POSIX XSI specifies that when set on a directory, only file owners may delete files even if the directory is writeable to others (used with {{c|/tmp}})
|-
| {{tt|mask}}
| {{c|07777}}
|
| All valid permission bits.
Equivalent to {{c|all {{!}} set_uid {{!}} set_gid {{!}} sticky_bit}}
|}

Additionally, the following constants of this type are defined, which do not represent permissions:

{| class=&quot;wikitable&quot; style=&quot;text-align:left; font-size:85%; max-width:90em;&quot;
|-
! Member constant
! Value (hex)
! Meaning
|-
| {{tt|unknown}}
| {{c|0xFFFF}}
| Unknown permissions (e.g. when {{rlp|file_status}} is created without permissions)
|-
| {{tt|add_perms}}
| {{c|0x10000}}
| Control bit that instructs {{rlp|permissions}} to add, but not clear permission bits.
|-
| {{tt|remove_perms}}
| {{c|0x20000}}
| Control bit that instructs {{rlp|permissions}} to clear, but not add permission bits
|-
| {{tt|resolve_symlinks}}
| {{c|0x40000}}
| Control bit that instructs {{rlp|permissions}} to resolve symlinks
|}

===Notes===
Permissions may not necessarily be implemented as bits, but they are treated that way conceptually.

Some permission bits may be ignored on some systems, and changing some bits may automatically change others (e.g. on platforms without owner/group/all distinction, setting any of the three write bits set all three)

===Example===
{{cpp/experimental/fs/permissions_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/dsc permissions}}
{{dsc end}}</text>
      <sha1>3nc4tnprhu64hl0s8oqgbj5i6tnus0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/read symlink</title>
    <ns>0</ns>
    <id>14056</id>
    <revision>
      <id>77630</id>
      <timestamp>2015-04-01T17:39:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1505">{{cpp/experimental/fs/title|read_symlink}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
path read_symlink(const path&amp; p);
path read_symlink(const path&amp; p, error_code&amp; ec);
}}
{{dcl end}}

If the path {{tt|p}} refers to a symbolic link, returns a new path object which refers to the target of that symbolic link.

It is an error if {{tt|p}} does not refer to a symbolic link.

The non-throwing overload returns an empty path on errors.

===Parameters===
{{par begin}}
{{par | p | path to a symlink}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The target of the symlink (which may not necessarily exist)

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    // on a typical Linux system, /lib/libc.so.6 is a symlink
    fs::path p = &quot;/lib/libc.so.6&quot;;
    if(exists(p) &amp;&amp; is_symlink(p))
        std::cout &lt;&lt; p &lt;&lt; &quot; -&gt; &quot; &lt;&lt; read_symlink(p) &lt;&lt; '\n';
    else
        std::cout &lt;&lt; p &lt;&lt; &quot; does not exist or is not a symlink\n&quot;;
}
|p=true
|output=
&quot;/lib/libc.so.6&quot; -&gt; &quot;libc-2.12.so&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc inc | cpp/experimental/fs/dsc create_symlink}}
{{dsc inc | cpp/experimental/fs/dsc copy_symlink}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc end}}</text>
      <sha1>a2fu0yonchmxd65mnfg5vlkhaukzil7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator</title>
    <ns>0</ns>
    <id>13448</id>
    <revision>
      <id>91053</id>
      <parentid>88318</parentid>
      <timestamp>2017-03-16T16:07:34Z</timestamp>
      <contributor>
        <ip>38.126.22.103</ip>
      </contributor>
      <comment>/s/advanvced/advanced</comment>
      <text xml:space="preserve" bytes="4854">{{cpp/experimental/fs/title|recursive_directory_iterator}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016; see [[cpp/filesystem/recursive_directory_iterator|std::filesystem::recursive_directory_iterator]] {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
class recursive_directory_iterator;
}}
{{dcl end}}

{{tt|recursive_directory_iterator}} is an {{concept|InputIterator}} that iterates over the {{ltt|cpp/experimental/fs/directory_entry|directory_entry}} elements of a directory, and, recursively, over the entries of all subdirectories. The iteration order is unspecified, except that each directory entry is visited only once.

By default, symlinks are not followed, but this can be enabled by specifying the directory option {{ltt|cpp/experimental/fs/directory_options|follow_directory_symlink}} at construction time.

The special pathnames {{spar|dot}} and {{spar|dot-dot}} are skipped.

If the {{tt|recursive_directory_iterator}} is advanced past the last directory entry of the top-level directory, it becomes equal to the default-constructed iterator, also known as the end iterator. Two end iterators are always equal, dereferencing or incrementing the end iterator is undefined behavior.

If a file or a directory is deleted or added to the directory tree after the recursive directory iterator has been created, it is unspecified whether the change would be observed through the iterator.

If the directory structure contains cycles, the end iterator may be unreachable.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|filesystem::directory_entry}} }}
{{dsc | {{tt|difference_type}} | {{tt|std::ptrdiff_t}} }}
{{dsc | {{tt|pointer}} | {{tt|const filesystem::directory_entry*}} }}
{{dsc | {{tt|reference}} | {{tt|const filesystem::directory_entry&amp;}} }}
{{dsc | {{tt|iterator_category}} | {{tt|std::input_iterator_tag}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc constructor}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc destructor}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc operator*}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc options}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc depth}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc recursion_pending}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc increment}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc pop}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc disable_recursion_pending}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc begin}}
{{dsc end}}

Additionally, {{tt|operator{{==}}}} and {{tt|operator!{{=}}}} are provided, either as members or as non-members, as required by {{concept|InputIterator}}

===Notes===
A {{tt|recursive_directory_iterator}} typically holds a reference-counted ''pointer'' (to satisfy shallow-copy semantics of {{concept|InputIterator}}) to an implementation object, which holds:
* a container (such as {{lc|std::vector}}) of non-recursive {{ltt|cpp/experimental/fs/directory_iterator|directory_iterator}}s that forms the recursion stack
* the recursion depth counter (accessible with {{ltt|cpp/experimental/fs/recursive_directory_iterator/depth|depth()}})
* the directory options used at construction (accessible with {{ltt|cpp/experimental/fs/recursive_directory_iterator/options|options()}})
* the pending recursion flag (accessible with {{ltt|cpp/experimental/fs/recursive_directory_iterator/recursion_pending|recursion_pending()}}, may be combined with the directory options to save space)

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto&amp; p: fs::recursive_directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/a/b&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/syma&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc directory_iterator}}
{{dsc inc | cpp/experimental/fs/dsc directory_entry}}
{{dsc inc | cpp/experimental/fs/dsc directory_options}}
{{dsc end}}</text>
      <sha1>81lwrgk9qacfcel7xa4zuv7fnvyneez</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/begin</title>
    <ns>0</ns>
    <id>14114</id>
    <revision>
      <id>91925</id>
      <parentid>78620</parentid>
      <timestamp>2017-03-31T20:02:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1601">{{cpp/experimental/fs/title | begin{{small|(recursive_directory_iterator)}}|end{{small|(recursive_directory_iterator)}}}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1| since=fs_ts |
recursive_directory_iterator begin( recursive_directory_iterator iter );
}}
{{dcl |num=2| since=fs_ts |
recursive_directory_iterator end( const recursive_directory_iterator&amp; );
}}
{{dcl end}}
@1@ Returns {{tt|iter}} unchanged
@2@ Returns a default-constructed {{ltt|cpp/experimental/fs/recursive_directory_iterator|recursive_directory_iterator}}, which serves as the end iterator. The argument is ignored.

These non-member functions enable the use of {{tt|recursive_directory_iterator}}s with range-based for loops.

===Parameters===
{{par begin}}
{{par | iter | a recursive_directory_iterator}}
{{par end}}

===Return value===
@1@ {{tt|iter}} unchanged
@2@ End iterator (default-constructed {{tt|recursive_directory_iterator}})

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto&amp; p: fs::recursive_directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/a/b&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/syma&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc begin}}
{{dsc end}}</text>
      <sha1>jh8eukl17bucy5pjxl3ypuso4ryqxvn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/depth</title>
    <ns>0</ns>
    <id>13449</id>
    <revision>
      <id>78182</id>
      <parentid>78181</parentid>
      <timestamp>2015-05-08T18:19:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+string header</comment>
      <text xml:space="preserve" bytes="1585">{{cpp/experimental/fs/recursive_directory_iterator/title | depth}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
int depth() const;
}}
{{dcl end}}

Returns the number of directories from the starting directory to the currently iterated directory, i.e. the current depth of the directory hierarchy. 

The starting directory has depth of {{math|0}}, its subdirectories have depth {{math|1}}, etc.

The behavior is undefined if {{c|*this}} is the end iterator.

===Parameters===
(none)

===Return value===
Current depth of the directory hierarchy.

===Exceptions===
(none)

===Example===
{{example|this example uses iteration depth to calculate the indentation of a directory tree printout
|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b/c&quot;);
    fs::create_directories(&quot;sandbox/a/b/d/e&quot;);
    std::ofstream(&quot;sandbox/a/b/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto i = fs::recursive_directory_iterator(&quot;sandbox&quot;);
             i != fs::recursive_directory_iterator();
           ++i ) {
        std::cout &lt;&lt; std::string(i.depth(), ' ') &lt;&lt; *i;
        if(fs::is_symlink(i-&gt;symlink_status()))
            std::cout &lt;&lt; &quot; -&gt; &quot; &lt;&lt; fs::read_symlink(*i);
        std::cout &lt;&lt; '\n';
    }
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
&quot;sandbox/a&quot;
 &quot;sandbox/a/b&quot;
  &quot;sandbox/a/b/c&quot;
  &quot;sandbox/a/b/d&quot;
   &quot;sandbox/a/b/d/e&quot;
  &quot;sandbox/a/b/file1.txt&quot;
&quot;sandbox/syma&quot; -&gt; &quot;a&quot;
}}</text>
      <sha1>cmbczvvgplls64af6mtpesuszb28is4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/disable recursion pending</title>
    <ns>0</ns>
    <id>13450</id>
    <revision>
      <id>78183</id>
      <parentid>68655</parentid>
      <timestamp>2015-05-08T18:55:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>example, upd</comment>
      <text xml:space="preserve" bytes="2220">{{cpp/experimental/fs/recursive_directory_iterator/title | disable_recursion_pending}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
void disable_recursion_pending();
}}
{{dcl end}}

Disables recursion to the currently referred subdirectory, if any.

The call modifies the pending recursion flag on the iterator in such a way that the next time {{ltt|cpp/experimental/fs/recursive_directory_iterator/increment|increment}} is called, the iterator will advance within the current directly even if it is currently referring to a subdirectory that hasn't been visited.

The status of the pending recursion flag can be queried with {{ltt|cpp/experimental/fs/recursive_directory_iterator/recursion_pending|recursion_pending()}}, which is {{c|false}} after this call. It is reset back to {{c|true}} after {{ltt|cpp/experimental/fs/recursive_directory_iterator/increment|increment}}, and its initial value is also {{c|true}}.

The behavior is undefined if {{c|*this}} is the end iterator.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b/c&quot;);
    fs::create_directories(&quot;sandbox/a/b/d/e&quot;);
    std::ofstream(&quot;sandbox/a/b/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto i = fs::recursive_directory_iterator(&quot;sandbox&quot;);
             i != fs::recursive_directory_iterator();
           ++i ) {
        std::cout &lt;&lt; std::string(i.depth(), ' ') &lt;&lt; *i;
        if(fs::is_symlink(i-&gt;symlink_status()))
            std::cout &lt;&lt; &quot; -&gt; &quot; &lt;&lt; fs::read_symlink(*i);
        std::cout &lt;&lt; '\n';

        // do not descend into &quot;b&quot;
        if(i-&gt;path().filename() == &quot;b&quot;)
            i.disable_recursion_pending();
    }
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
&quot;sandbox/a&quot;
 &quot;sandbox/a/b&quot;
&quot;sandbox/syma&quot; -&gt; &quot;a&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc recursion_pending}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc increment}}
{{dsc end}}</text>
      <sha1>pis0l74juo8yhheso3hkwrogdxd098o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/increment</title>
    <ns>0</ns>
    <id>13451</id>
    <revision>
      <id>91829</id>
      <parentid>68657</parentid>
      <timestamp>2017-03-31T19:59:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1516">{{cpp/experimental/fs/recursive_directory_iterator/title | operator++, increment}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
recursive_directory_iterator&amp; operator++();
}}
{{dcl | since=fs_ts | 1=
recursive_directory_iterator&amp; increment( error_code&amp; ec );
}}
{{dcl end}}

Advances the iterator to the next entry.

If there are no more entries left in the currently iterated directory, the iteration is resumed over the parent directory. The process is repeated if the parent directory has no sibling entries that can to be iterated on. If the parent of the directory hierarchy that has been recursively iterated on is reached (there are no candidate entries at {{c|1=depth() == 0)}}, {{c|*this}} is set to an end iterator.

Otherwise, if {{c|*this}} refers to a directory, it is iterated into if the following conditions are met:

* {{lc|disable_recursion_pending()}} has not been called before this increment, i.e. {{c|1=recursion_pending() == true}}.
* The directory is not a symlink or following symlinks is enabled, i.e. 
:{{cc|1=!is_symlink(this-&gt;symlink_status()) {{!!}} 
(options() &amp; directory_options::follow_directory_symlink) != 0)}}.

===Parameters===
{{par begin}}
{{par | ec | error code to store the error status to}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{c|filesystem_error}} if an error occurs. The error code is set to an appropriate error code for the error that caused the failure.

@2@ {{unreviewed noexcept}}</text>
      <sha1>i1rt0pui3xjxotu6iok6jrblubz25n2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/operator*</title>
    <ns>0</ns>
    <id>13452</id>
    <revision>
      <id>80642</id>
      <parentid>78617</parentid>
      <timestamp>2015-08-24T10:42:21Z</timestamp>
      <contributor>
        <ip>183.206.168.136</ip>
      </contributor>
      <comment>change 'recursive_directory_entry' to 'directory_entry'</comment>
      <text xml:space="preserve" bytes="895">{{cpp/experimental/fs/recursive_directory_iterator/title | operator*|operator-&gt;}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | num=1| 1=
const directory_entry&amp; operator*() const;
}}
{{dcl | since=fs_ts |num=2| 1=
const directory_entry* operator-&gt;() const;
}}
{{dcl end}}

Accesses the pointed-to {{ltt|cpp/experimental/fs/directory_entry|directory_entry}}

The result of {{tt|operator*}} or {{tt|operator-&gt;}} on the end iterator is undefined behavior.

===Parameters===
(none)

===Return value===
@1@ Value of the {{ltt|cpp/experimental/fs/directory_entry|directory_entry}} referred to by this iterator
@2@ Pointer to the {{ltt|cpp/experimental/fs/directory_entry|directory_entry}} referred to by this iterator

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc operator*}}
{{dsc end}}</text>
      <sha1>daq57io0jizlvewpgg8hnrk9is9kf2k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/operator=</title>
    <ns>0</ns>
    <id>13453</id>
    <revision>
      <id>68661</id>
      <parentid>68660</parentid>
      <timestamp>2014-03-19T00:38:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="594">{{cpp/experimental/fs/recursive_directory_iterator/title | operator{{=}}}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
recursive_directory_iterator&amp; operator=( const recursive_directory_iterator&amp; ) = default;
}}
{{dcl | since=fs_ts | 1=
recursive_directory_iterator&amp; operator=( recursive_directory_iterator&amp;&amp; ) = default;
}}
{{dcl end}}

Assigns a recursive directory iterator.

===Parameters===
{{par begin}}
{{par | - | another directory iterator to assign }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
(none)
{{todo}}</text>
      <sha1>e0g8l6cw3fw1eso0sdo7m2l4mtx9kva</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/options</title>
    <ns>0</ns>
    <id>13454</id>
    <revision>
      <id>68663</id>
      <parentid>68662</parentid>
      <timestamp>2014-03-19T00:38:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="552">{{cpp/experimental/fs/recursive_directory_iterator/title | options}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
directory_options options() const;
}}
{{dcl end}}

Returns the options that affect the directory iteration. The options can only be supplied when constructing the directory iterator.

If the options argument was not supplied, returns {{c|options::none}}.

===Parameters===
(none)

===Return value===
The effective options that affect the directory iteration. 

===Exceptions===
(none)</text>
      <sha1>sks2v7ydzkmlcyv7piwu2gtdvaxnppt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/pop</title>
    <ns>0</ns>
    <id>13455</id>
    <revision>
      <id>68665</id>
      <parentid>68664</parentid>
      <timestamp>2014-03-19T00:38:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="482">{{cpp/experimental/fs/recursive_directory_iterator/title | pop}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
void pop();
}}
{{dcl end}}

Moves the iterator one level up in the directory hierarchy.

If the parent directory is outside directory hierarchy that is iterated on (i.e. {{c|1=depth() == 0}}), sets {{c|*this}} to an end directory iterator.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{todo}}</text>
      <sha1>5cbb60fjszn7ps2pmtfbwym5va5cz0r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/recursion pending</title>
    <ns>0</ns>
    <id>13456</id>
    <revision>
      <id>68667</id>
      <parentid>68666</parentid>
      <timestamp>2014-03-19T00:38:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Import from a private wiki</comment>
      <text xml:space="preserve" bytes="675">{{cpp/experimental/fs/recursive_directory_iterator/title | recursion_pending}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=fs_ts | 1=
bool recursion_pending() const;
}}
{{dcl end}}

Returns {{c|true}} if the next increment will cause the directory currently referred to by {{c|*this}} to be iterated into.

This function returns {{c|true}} immediately after construction or an increment. Recursion can be disabled via {{lc|disable_recursion_pending()}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the next increment will iterate into the currently referred directory, {{c|false}} otherwise.

===Exceptions===
(none)</text>
      <sha1>rae8wyomt6eh1uw1iguciyjs7owr6vv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/recursive directory iterator/recursive directory iterator</title>
    <ns>0</ns>
    <id>13457</id>
    <revision>
      <id>91321</id>
      <parentid>68669</parentid>
      <timestamp>2017-03-31T19:40:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1468">{{cpp/experimental/fs/recursive_directory_iterator/title | recursive_directory_iterator}}
{{cpp/experimental/fs/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=fs_ts | 1=
recursive_directory_iterator();
}}
{{dcl | num=2 | since=fs_ts | 1=
recursive_directory_iterator( const recursive_directory_iterator&amp; ) = default;
}}
{{dcl | num=3 | since=fs_ts | 1=
recursive_directory_iterator( recursive_directory_iterator&amp;&amp; ) = default;
}}
{{dcl | num=4 | since=fs_ts | 1=
explicit recursive_directory_iterator( const path&amp; p,
                                       directory_options options = directory_options::none );
}}
{{dcl | num=5 | since=fs_ts | 1=
recursive_directory_iterator( const path&amp; p,
                              directory_options options, error_code&amp; ec );
}}
{{dcl | num=6 | since=fs_ts | 1=
recursive_directory_iterator( const path&amp; p, error_code&amp; ec );
}}
{{dcl end}}

Contructs new recursive directory iterator.

@1@ Default constructor. Constructs an end iterator.

@2-3@ Default copy and move constructors.

@4-6@ Constructs a iterator that refers to the first entry in the directory that {{tt|p}} resolves to. 

{{todo|errors}}

===Parameters===
{{todo}}

===Exceptions===
@1,5,6@ {{unreviewed noexcept}}

{{todo}}

===Notes===

Recursive directory iterators do not follow directory symlinks by default. To enable this behavior, specify {{tt|directory_options::follow_directory_symlink}} among the {{tt|options}} option set.</text>
      <sha1>rep5f3au5fmhtwhojcb5l3asbijz1tx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/remove</title>
    <ns>0</ns>
    <id>14035</id>
    <revision>
      <id>82555</id>
      <parentid>82553</parentid>
      <timestamp>2015-12-22T18:57:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>undo bolded &quot;warning&quot;</comment>
      <text xml:space="preserve" bytes="2242">{{cpp/experimental/fs/title|remove|remove_all}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts |num=1|1=
bool remove(const path&amp; p);
bool remove(const path&amp; p, error_code&amp; ec);
}}
{{dcl | since=fs_ts | num=2 |
std::uintmax_t remove_all(const path&amp; p);
std::uintmax_t remove_all(const path&amp; p, error_code&amp; ec);
}}
{{dcl end}}

@1@ The file or empty directory identified by the path {{tt|p}} is deleted as if by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/remove.html remove]. Symlinks are not followed (symlink is removed, not its target)
@2@ Deletes the contents of {{tt|p}} (if it is a directory) and the contents of all its subdirectories, recursively, then deletes {{tt|p}} itself as if by repeatedly applying the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/remove.html remove]. Symlinks are not followed (symlink is removed, not its target)

===Parameters===
{{par begin}}
{{par | p | path to delete}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
@1@ {{c|true}} if the file was deleted, {{c|false}} if it did not exist. The overload that takes {{tt|error_code&amp;}} argument returns {{c|false}} on errors.
@2@ Returns the number of files and directories that were deleted (which may be zero if {{tt|p}} did not exist to begin with). The overload that takes {{tt|error_code&amp;}} argument returns {{c|static_cast&lt;std::uintmax_t&gt;(-1)}} on error.

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Notes===
On POSIX systems, this function typically calls {{tt|unlink}} and {{tt|rmdir}} as needed, on Windows {{tt|RemoveDirectoryW}} and {{tt|DeleteFileW}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cstdint&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path dir = fs::temp_directory_path();
    fs::create_directories(dir / &quot;abcdef/example&quot;);
    std::uintmax_t n = fs::remove_all(dir / &quot;abcdef&quot;);
    std::cout &lt;&lt; &quot;Deleted &quot; &lt;&lt; n &lt;&lt; &quot; files or directories\n&quot;;
}
|p=true
|output=
Deleted 2 files or directories
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc remove}}
{{dsc end}}</text>
      <sha1>gal5q926wb1tiyqrgdnca7afbxn2xzh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/rename</title>
    <ns>0</ns>
    <id>14037</id>
    <revision>
      <id>86940</id>
      <parentid>82554</parentid>
      <timestamp>2016-07-16T22:09:27Z</timestamp>
      <contributor>
        <username>Oli</username>
        <id>1232</id>
      </contributor>
      <comment>Use &quot;std::&quot; to create a link to &quot;std::error_code&quot; (Add also missing &quot;;&quot;)</comment>
      <text xml:space="preserve" bytes="3664">{{cpp/experimental/fs/title|rename}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts|1=
void rename(const path&amp; old_p, const path&amp; new_p);
void rename(const path&amp; old_p, const path&amp; new_p, std::error_code&amp; ec);
}}
{{dcl end}}

Moves or renames the filesystem object identified by {{tt|old_p}} to {{tt|new_p}} as if by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html rename]:

* If {{tt|old_p}} is a non-directory file, then {{tt|new_p}} must be one of:
:* the same file as {{tt|old_p}} or a hardlink to it: nothing is done in this case
:* existing non-directory file: {{tt|new_p}} is first deleted, then, without allowing other processes to observe {{tt|new_p}} as deleted, the pathname {{tt|new_p}} is linked to the file and {{tt|old_p}} is unlinked from the file. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
:* non-existing file in an existing directory: The pathname {{tt|new_p}} is linked to the file and {{tt|old_p}} is unlinked from the file. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
* If {{tt|old_p}} is a directory, then {{tt|new_p}} must be one of:
:* the same directory as {{tt|old_p}} or a hardlink to it: nothing is done in this case
:* existing directory: {{tt|new_p}} is deleted if empty on POSIX systems, but this may be an error on other systems. If not an error, then {{tt|new_p}} is first deleted, then, without allowing other processes to observe {{tt|new_p}} as deleted, the pathname {{tt|new_p}} is linked to the directory and {{tt|old_p}} is unlinked from the directory. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
:* non-existing directory, not ending with a directory separator, and whose parent directory exists: The pathname {{tt|new_p}} is linked to the directory and {{tt|old_p}} is unlinked from the directory. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
* Symlinks are not followed: if {{tt|old_p}} is a symlink, it is itself renamed, not its target. If {{tt|new_p}} is an existing symlink, it is itself erased, not its target.

Rename fails if
* {{tt|new_p}} ends with {{spar|dot}} or with {{spar|dot-dot}}
* {{tt|new_p}} names a non-existing directory ending with a directory separator
* {{tt|old_p}} is a directory which is an ancestor of {{tt|new_p}}

===Parameters===
{{par begin}}
{{par | old_p | path to move or rename}}
{{par | new_p | target path for the move/rename operation}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/experimental/fs/error_handling|old_p|new_p}}


===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = fs::current_path() / &quot;sandbox&quot;;
    fs::create_directories(p/&quot;from&quot;);
    std::ofstream(p/&quot;from/file1.txt&quot;).put('a');
    fs::create_directory(p/&quot;to&quot;);

//    fs::rename(p/&quot;from/file1.txt&quot;, p/&quot;to/&quot;); // error: to is a directory
    fs::rename(p/&quot;from/file1.txt&quot;, p/&quot;to/file2.txt&quot;); // OK
//    fs::rename(p/&quot;from&quot;, p/&quot;to&quot;); // error: to is not empty
    fs::rename(p/&quot;from&quot;, p/&quot;to/subdir&quot;); // OK

    fs::remove_all(p);
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc rename}}
{{dsc inc | cpp/experimental/fs/dsc remove}}
{{dsc end}}</text>
      <sha1>0gi68wwf67ar4aux6lcvswhc04mewk8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/resize file</title>
    <ns>0</ns>
    <id>14036</id>
    <revision>
      <id>77607</id>
      <parentid>77159</parentid>
      <timestamp>2015-03-31T19:21:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>unused line</comment>
      <text xml:space="preserve" bytes="2091">{{cpp/experimental/fs/title|resize_file}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts|1=
void resize_file(const path&amp; p, std::uintmax_t new_size);
void resize_file(const path&amp; p, std::uintmax_t new_size, error_code&amp; ec);
}}
{{dcl end}}

Changes the size of the regular file named by {{tt|p}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html truncate]: if the file size was previously larger than {{tt|new_size}}, the remainder of the file is discarded. If the file was previously smaller than {{tt|new_size}}, the file size is increased and the new area appears as if zero-filled.

===Parameters===
{{par begin}}
{{par | p | path to delete}}
{{par | new_size | size that the file will now have}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Notes===
On systems that support sparse files, increasing the file size does not increase the space it occupies on the file system: space allocation takes place only when non-zero bytes are written to the file.

===Example===
{{example|demonstrates the effect of creating a sparse file on the free space
|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;fstream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p = fs::current_path() / &quot;example.bin&quot;;
    std::ofstream(p).put('a');
    std::cout &lt;&lt; &quot;File size: &quot; &lt;&lt; std::setw(10) &lt;&lt; fs::file_size(p)
              &lt;&lt; &quot; Free space: &quot; &lt;&lt; fs::space(p).free &lt;&lt; '\n';
    fs::resize_file(p, 1024*1024*1024); // resize to 1 G
    std::cout &lt;&lt; &quot;File size: &quot; &lt;&lt; fs::file_size(p)
              &lt;&lt; &quot; Free space: &quot; &lt;&lt; fs::space(p).free &lt;&lt; '\n';
    fs::remove(p);
}
|p=true
|output=
File size:          1 Free space: 3724541952
File size: 1073741824 Free space: 3724476416
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc file_size}}
{{dsc inc | cpp/experimental/fs/dsc space}}
{{dsc end}}</text>
      <sha1>q52s8r227729ix6kzl17pdybbhhdayq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/space</title>
    <ns>0</ns>
    <id>14051</id>
    <revision>
      <id>77599</id>
      <timestamp>2015-03-31T18:44:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1435">{{cpp/experimental/fs/title|space}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts|1=
space_info space(const path&amp; p);
space_info space(const path&amp; p, error_code&amp; ec) noexcept;
}}
{{dcl end}}

Determines the information about the filesystem on which the pathname {{tt|p}} is located, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/statvfs.html statvfs]

Populates and returns an object of type {{rlp|space_info}}, set from the members of the POSIX {{tt|struct statvfs}} as follows
* {{tt|space_info.capacity}} is set as if by {{tt|f_blocks*f_frsize}}
* {{tt|space_info.free}} is set to {{tt|f_bfree*f_frsize}}
* {{tt|space_info.available}} is set to {{tt|f_bavail*f_frsize}}
* Any member that could not be determined is set to {{c|static_cast&lt;uintmax_t&gt;(-1)}}

The non-throwing overload sets all members to {{c|static_cast&lt;uintmax_t&gt;(-1)}} on error.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The filesystem information (a {{rlp|space_info}} object)

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Notes===
space_info.available may be less than space_info.free

===Example===
{{cpp/experimental/fs/space_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc space_info}}
{{dsc end}}</text>
      <sha1>32r18yqw5n5dh6529exche75ahn4r65</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/space info</title>
    <ns>0</ns>
    <id>13458</id>
    <revision>
      <id>77600</id>
      <parentid>68671</parentid>
      <timestamp>2015-03-31T18:48:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>detail</comment>
      <text xml:space="preserve" bytes="738">{{cpp/experimental/fs/title|space_info}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts | 1=
struct space_info {
    uintmax_t capacity;
    uintmax_t free; 
    uintmax_t available; 
};
}}
{{dcl end}}

Represents the filesystem information as determined by {{rlp|space}}

The members have the following meaning:
* {{tt|capacity}} -- total size of the filesystem, in bytes
* {{tt|free}} -- free space on the filesystem, in bytes
* {{tt|available}} --  free space available to a non-privileged process (may be equal or less than {{tt|free}})

===Example===
{{cpp/experimental/fs/space_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc space}}
{{dsc end}}</text>
      <sha1>aqmmmbzjtqlffv21s3j1rrwz3q43gf1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/status</title>
    <ns>0</ns>
    <id>14038</id>
    <revision>
      <id>77194</id>
      <parentid>77191</parentid>
      <timestamp>2015-03-17T17:59:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix desc</comment>
      <text xml:space="preserve" bytes="3120">{{cpp/experimental/fs/title|status|symlink_status}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | since=fs_ts|num=1|1=
file_status status(const path&amp; p);
file_status status(const path&amp; p, error_code&amp; ec) noexcept;
}}
{{dcl | since=fs_ts|num=2|1=
file_status symlink_status(const path&amp; p);
file_status symlink_status(const path&amp; p, error_code&amp; ec) noexcept;
}}
{{dcl end}}

@1@ Determines the type and attributes of the filesystem object identified by {{tt|p}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat] (symlinks are followed to their targets).
:* If {{tt|p}} is a regular file, returns {{c|file_status(file_type::regular)}}. 
:* If {{tt|p}} is a directory, returns {{c|file_status(file_type::directory)}}
:* If {{tt|p}} is a block special file, returns {{c|file_status(file_type::block)}}
:* If {{tt|p}} is a character special file, returns {{c|file_status(file_type::character)}}
:* If {{tt|p}} is a fifo or pipe file, returns {{c|file_status(file_type::fifo)}}
:* If {{tt|p}} is a socket, returns {{c|file_status(file_type::socket)}}
:* If {{tt|p}} does not exist, returns {{c|file_status(file_type::not_found)}} 
:* If {{tt|p}} exists but file attributes cannot be determined, e.g. due to lack of permissions, returns {{c|file_status(file_type::unknown)}}
:* If errors prevent even knowing whether {{tt|p}} exists, the non-throwing overload sets {{tt|ec}} and returns {{c|file_status(file_type::none)}}, and the throwing overload throws {{tt|filesystem_error}}
:* Otherwise, returns {{c|file_status(file_type::unknown)}}
@2@ Same as {{v|1}} except that the behavior is as if the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/lstat.html lstat] is used (symlinks are not followed):
:* If {{tt|p}} is a symlink, returns {{c|file_status(file_type::symlink)}}

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The file status (a {{rlp|file_status}} object)

===Exceptions===
{{cpp/experimental/fs/error_handling|p}}

===Notes===
The information provided by this function is usually also provided as a byproduct of directory iteration, and may be obtained by the member functions of {{rlp|directory_entry}}. During directory iteration, calling {{tt|status}} again is unnecessary.

===Example===
{{cpp/experimental/fs/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc inc | cpp/experimental/fs/dsc is_block_file}}
{{dsc inc | cpp/experimental/fs/dsc is_character_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_socket}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc inc | cpp/experimental/fs/dsc exists}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>3ohlag8w4gy69vdf3osxv2iuyokq6av</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/status known</title>
    <ns>0</ns>
    <id>14040</id>
    <revision>
      <id>91729</id>
      <parentid>90192</parentid>
      <timestamp>2017-03-31T19:56:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="872">{{cpp/experimental/fs/title|status_known}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
bool status_known( file_status s );
}}
{{dcl end}}

Checks if the given file status is known, Equivalent to {{c|1=s.type() != file_type::none}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par end}}

===Return value===
{{c|true}} if the given file status is an unknown file status 

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Despite the name, the function checks for the file status of {{tt|file_type::none}} (meaning an error occurred), not {{tt|file_type::unknown}} (meaning file exists, but its type cannot be determined).

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc status}}
{{dsc inc | cpp/experimental/fs/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>qcytmlkqw04ovioftkxzn36sndsl662</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/fs/temp directory path</title>
    <ns>0</ns>
    <id>13459</id>
    <revision>
      <id>77149</id>
      <parentid>77148</parentid>
      <timestamp>2015-03-16T21:38:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>templated error handling</comment>
      <text xml:space="preserve" bytes="1282">{{cpp/experimental/fs/title|temp_directory_path}}
{{cpp/experimental/fs/navbar}}
{{dcl begin}}
{{dcl header | experimental/filesystem}}
{{dcl | num=1 | since=fs_ts | 1=
path temp_directory_path();
path temp_directory_path( error_code&amp; ec );
}}
{{dcl end}}

Returns the directory location suitable for temporary files.

===Parameters===
(none)

===Return value===
A directory suitable for temporary files. The path is guaranteed to exist and to be a directory. The overload that takes {{tt|error_code&amp;}} argument returns an empty path on error.

===Exceptions===
{{cpp/experimental/fs/error_handling|path to be returned}}

===Notes===
On POSIX systems, the path may be the one specified in the environment variables {{tt|TMPDIR}}, {{tt|TMP}}, {{tt|TEMP}}, {{tt|TEMPDIR}}, and, if none of them are specified, the path {{c|&quot;/tmp&quot;}} is returned. 

On Windows systems, the path is typically the one returned by {{tt|GetTempPath}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;experimental/filesystem&gt;
namespace fs = std::experimental::filesystem;
int main()
{
    std::cout &lt;&lt; &quot;Temp directory is &quot; &lt;&lt; fs::temp_directory_path() &lt;&lt; '\n';
}
|p=true
|output=
Temp directory is &quot;C:\Windows\TEMP\&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc tmpfile}}
{{dsc end}}</text>
      <sha1>nuwutvbvqya5o8bhhvmeqnlav04qvnz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function</title>
    <ns>0</ns>
    <id>14416</id>
    <revision>
      <id>83736</id>
      <parentid>81809</parentid>
      <timestamp>2016-03-08T01:39:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Helper classes */ strike assign(), LWG 2575</comment>
      <text xml:space="preserve" bytes="2108">{{cpp/experimental/title|function}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl header | experimental/functional }}
{{dcl | since=libfund_ts |
template&lt; class &gt;
class function; /* undefined */
}}
{{dcl | since=libfund_ts |
template&lt; class R, class... Args &gt;
class function&lt;R(Args...)&gt;
}}
{{dcl end}}

{{tt|std::experimental::function}} is a modified version of {{lc|std::function}} with support for type-erased allocators.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|allocator_type}} | {{lc|std::experimental::erased_type}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/function/dsc constructor}}
{{dsc inc | cpp/experimental/function/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/function/dsc swap}}
{{dsc inc | cpp/experimental/function/dsc get_memory_resource}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/function/dsc swap2}}
{{dsc inc | cpp/experimental/function/dsc operator_cmp}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/function/dsc uses_allocator}}
{{dsc end}}

{{identical|{{small|std::}}function|
2=
===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}} | {{tt|R}}}}
{{dsc | {{tt|argument_type}} | {{tt|T}} if {{c|1=sizeof...(Args)==1}} and {{tt|T}} is the first and only type in {{tt|Args...}} }}
{{dsc | {{tt|first_argument_type}} | {{tt|T1}} if {{c|1=sizeof...(Args)==2}} and {{tt|T1}} is the first of the two types in {{tt|Args...}} }}
{{dsc | {{tt|second_argument_type}} | {{tt|T2}} if {{c|1=sizeof...(Args)==2}} and {{tt|T2}} is the second of the two types in {{tt|Args...}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc destructor}}
{{dsc inc | cpp/utility/functional/function/dsc operator_bool}}
{{dsc inc | cpp/utility/functional/function/dsc operator()}}

{{dsc h2 | Target access}}
{{dsc inc | cpp/utility/functional/function/dsc target_type}}
{{dsc inc | cpp/utility/functional/function/dsc target}}
{{dsc end}}

}}</text>
      <sha1>roacjn8fklfvkd3c5hlbexjtrgnx33d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function/function</title>
    <ns>0</ns>
    <id>14547</id>
    <revision>
      <id>91709</id>
      <parentid>82112</parentid>
      <timestamp>2017-03-31T19:55:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3623">{{cpp/experimental/function/title | function}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
function();
}}
{{dcl | num=2 | since=libfund_ts |
function( std::nullptr_t );
}}
{{dcl | num=3 | since=libfund_ts |
function( const function&amp; other );
}}
{{dcl | num=4 | since=libfund_ts |
function( function&amp;&amp; other );
}}
{{dcl | num=5 | since=libfund_ts |
template&lt; class F &gt; 
function( F f );
}}
{{dcl | num=6 | since=libfund_ts |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc );
}}
{{dcl | num=7 | since=libfund_ts |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, 
          std::nullptr_t );
}}
{{dcl | num=8 | since=libfund_ts |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, 
          const function&amp; other );
}}
{{dcl | num=9 | since=libfund_ts |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, 
          function&amp;&amp; other );
}}
{{dcl | num=10 | since=libfund_ts |
template&lt; class F, class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, F f );
}}
{{dcl end}}

Constructs a {{tt|std::experimental::function}} from a variety of sources.

@1-2@ Creates an ''empty'' function.

@3-4@ Copies {{v|3}} or moves {{v|4}} the ''target'' of {{tt|other}} to the ''target'' of {{c|*this}}. If {{tt|other}} is ''empty'', {{c|*this}} will be ''empty'' after the call too.

@5@ Initializes the ''target'' with a copy of {{tt|f}}. If {{tt|f}} is a null pointer to function or null pointer to member, {{c|*this}} will be ''empty'' after the call. This constructor does not participate in overload resolution unless f is {{concept|Callable}} for argument types {{tt|Args...}} and return type {{tt|R}}.

@6-10@ Same as {{v|1-5}} except that {{tt|alloc}} is used to allocate memory for any internal data structures that the {{tt|function}} might use. These constructors treat {{tt|alloc}} as a type-erased allocator (see below).

When the ''target'' is a function pointer or a {{lc|std::reference_wrapper}}, small object optimization is guaranteed, that is, these targets are always directly stored inside the {{lc|std::experimental::function}} object, no dynamic allocation takes place. Other large objects may be constructed in dynamic allocated storage and accessed by the {{lc|std::experimental::function}} object through a pointer.

If a constructor moves or copies a function object, including an instance of {{tt|std::experimental::function}}, then that move or copy is performed by [[cpp/memory/uses_allocator|''using-allocator construction'']] with allocator {{tt|this-&gt;get_memory_resource()}}. 

{{cpp/experimental/type erased allocator|function}}

===Parameters===
{{par begin}}
{{par | other | the function object used to initialize {{c|*this}} }}
{{par | f | a callable used to initialize {{c|*this}} }}
{{par | alloc | an allocator used for internal memory allocation }}
{{par hreq}}
{{par req concept | F | CopyConstructible | Callable }}
{{par end}}

===Exceptions===
@1-2@ {{unreviewed noexcept}}

@3,8@ does not throw if {{tt|other}}'s ''target'' is a function pointer or a {{lc|std::reference_wrapper}}, otherwise may throw {{lc|std::bad_alloc}} or any exception thrown by the copy constructor of the stored callable object.

@4@ (none)

@5,10@ does not throw if {{tt|f}} is a function pointer or a {{lc|std::reference_wrapper}}, otherwise may throw {{lc|std::bad_alloc}} or any exception thrown by the copy constructor of the stored callable object.

@6-7@ {{unreviewed noexcept}}

@9@ (none)

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1>r4a7iy50c8t9oli6b3y0us0oncrwh0y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function/get memory resource</title>
    <ns>0</ns>
    <id>14426</id>
    <revision>
      <id>80223</id>
      <timestamp>2015-07-31T22:39:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="49">{{cpp/experimental/get_memory_resource|function}}</text>
      <sha1>ivwenomod8s7ibo47fk9jxbcpentpfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function/operator cmp</title>
    <ns>0</ns>
    <id>14546</id>
    <revision>
      <id>91497</id>
      <parentid>82110</parentid>
      <timestamp>2017-03-31T19:47:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1325">{{title | operator{{==}},!{{=}}&lt;small&gt;(std::experimental::function)&lt;/small&gt;}}
{{cpp/experimental/lib extensions/pmr/navbar}}

{{dcl begin}}
{{dcl | since=libfund_ts | num=1 |
template&lt; class R, class... ArgTypes &gt;
bool operator{{==}}( const std::experimental::function&lt;R(ArgTypes...)&gt;&amp; f, std::nullptr_t );
}}
{{dcl | since=libfund_ts | num=2 |
template&lt; class R, class... ArgTypes &gt;
bool operator{{==}}( std::nullptr_t, const std::experimental::function&lt;R(ArgTypes...)&gt;&amp; f );
}}
{{dcl | since=libfund_ts | num=3 |
template&lt; class R, class... ArgTypes &gt;
bool operator!{{=}}( const std::experimental::function&lt;R(ArgTypes...)&gt;&amp; f, std::nullptr_t );
}}
{{dcl | since=libfund_ts | num=4 |
template&lt; class R, class... ArgTypes &gt;
bool operator!{{=}}( std::nullptr_t, const std::experimental::function&lt;R(ArgTypes...)&gt;&amp; f );
}}
{{dcl end}}

Compares a {{tt|std::experimental::function}} with a null pointer. Empty functions (that is, functions without a callable target) compare equal, non-empty functions compare non-equal.

===Parameters===
{{par begin}}
{{par | f | {{tt|std::experimental::function}} to compare}}
{{par end}}

===Return value===
@1-2@ {{c|!f}}
@3-4@ {{c|(bool) f}}

===Exceptions===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc operator cmp}}
{{dsc end}}</text>
      <sha1>mfxhou8mfkvgrc9ya0dd8671g360g8m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function/operator=</title>
    <ns>0</ns>
    <id>14548</id>
    <revision>
      <id>91437</id>
      <parentid>83745</parentid>
      <timestamp>2017-03-31T19:44:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2302">{{cpp/experimental/function/title | operator{{=}}}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts | 1=
function&amp; operator=( const function&amp; other );
}}
{{dcl | num=2 | since=libfund_ts | 1=
function&amp; operator=( function&amp;&amp; other );
}}
{{dcl | num=3 | since=libfund_ts | 1=
function&amp; operator=( std::nullptr_t );
}}
{{dcl | num=4 | since=libfund_ts | 1=
template&lt; class F &gt; 
function&amp; operator=( F&amp;&amp; f );
}}
{{dcl | num=5 | since=libfund_ts | 1=
template&lt; class F &gt; 
function&amp; operator=( std::reference_wrapper&lt;F&gt; f );
}}
{{dcl end}}

Assigns a new ''target'' to {{tt|std::experimental::function}}. In the description below, let {{c|ALLOCATOR_OF(f)}} be the allocator specified in the construction of {{tt|f}}, or {{c|std::allocator&lt;char&gt;()}} if no allocator was specified. &lt;!-- But see LWG2527 --&gt;

@1@ Assigns a copy of ''target'' of {{tt|other}}, as if by executing {{c|function(std::allocator_arg, ALLOCATOR_OF(*this), other).swap(*this);}}

@2@ Moves the ''target'' of {{tt|other}} to {{c|*this}}, as if by executing {{c|function(std::allocator_arg, ALLOCATOR_OF(*this), std::move(other)).swap(*this);}}. {{tt|other}} is in a valid state with an unspecified value.

@3@ Destroys the ''target'' of {{c|*this}}. {{c|*this}} is ''empty'' after the call. The memory resource returned by {{tt|get_memory_resource()}} after the assignment is equivalent to the memory resource before the assignment, but the address may change.

@4@ Sets the ''target'' of {{c|*this}} to the callable {{tt|f}}, as if by executing {{c|function(std::allocator_arg, ALLOCATOR_OF(*this),std::forward&lt;F&gt;(f)).swap(*this);}}. This operator does not participate in overload resolution unless {{tt|f}} is {{concept|Callable}} for argument types {{tt|Args...}} and return type {{tt|R}}.

@5@ Sets the ''target'' of {{c|*this}} to a copy of {{tt|f}}, as if by executing {{c|function(std::allocator_arg, ALLOCATOR_OF(*this), f).swap(*this);}}

===Parameters===
{{par begin}}
{{par | other | another {{tt|std::experimental::function}} object to copy or move from }}
{{par | f | a callable to initialize the ''target'' with}}
{{par hreq}}
{{par req concept | F | Callable}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1-2@ (none)
@3@ {{unreviewed noexcept}}
@4-5@ (none)</text>
      <sha1>aakvtk6ghi4gfj7fzeqb4m226dcwxmc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function/swap</title>
    <ns>0</ns>
    <id>14529</id>
    <revision>
      <id>81808</id>
      <parentid>81807</parentid>
      <timestamp>2015-11-12T05:11:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="541">{{cpp/experimental/function/title | swap}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{ddcl | since=libfund_ts |
void swap( function&amp; other );
}}

Exchanges the stored callable objects of {{c|*this}} and {{tt|other}}.

The allocators of {{c|*this}} and {{tt|other}} are not exchanged.

The behavior is undefined if {{c|*this-&gt;get_memory_resource() !{{=}} *other.get_memory_resource()}}.

===Parameters===
{{par begin}}
{{par | other | function wrapper to exchange the stored callable object with}}
{{par end}}

===Return value===
(none)</text>
      <sha1>kxkosv6100bhbb27pmmh8djcwoop7aj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function/swap2</title>
    <ns>0</ns>
    <id>14528</id>
    <revision>
      <id>81806</id>
      <timestamp>2015-11-12T05:06:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="794">{{cpp/experimental/title | swap&lt;small&gt;(std::experimental::function)&lt;/small&gt;}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class R, class... Args &gt;
void swap( std::experimental::function&lt;R(Args...)&gt; &amp;lhs,
           std::experimental::function&lt;R(Args...)&gt; &amp;rhs );
}}
{{dcl end}}

Overloads the {{tt|swap}} algorithm for {{lc|std::experimental::function}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | polymorphic function wrappers whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/function/dsc swap}}
{{dsc end}}</text>
      <sha1>rnnhopov9uxt6brgb4mxk17g2t6jbsl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/function/uses allocator</title>
    <ns>0</ns>
    <id>14527</id>
    <revision>
      <id>82109</id>
      <parentid>81805</parentid>
      <timestamp>2015-12-05T00:10:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>experimental/</comment>
      <text xml:space="preserve" bytes="699">{{cpp/title|uses_allocator&lt;small&gt;&lt;std::experimental::function&gt;&lt;/small&gt;}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl header | experimental/functional}}
{{dcl | since=libfund_ts |
template&lt; class R, class... ArgTypes, class Alloc &gt;
struct uses_allocator&lt;std::experimental::function&lt;R(ArgTypes...)&gt;, Alloc&gt; 
    : std::true_type { };
}}
{{dcl end}}

This specialization of {{lc|std::uses_allocator}} informs other library components that all objects of type {{lc|std::experimental::function}} support ''uses-allocator construction''.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}</text>
      <sha1>cnrz3q40u6f8xw0hqenkulo431kscw9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/future</title>
    <ns>0</ns>
    <id>15446</id>
    <revision>
      <id>91060</id>
      <parentid>91059</parentid>
      <timestamp>2017-03-16T19:22:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1803">{{cpp/experimental/title|future}}
{{cpp/experimental/concurrency/future/navbar}}
{{dcl begin}}
{{dcl header | experimental/future}}
{{dcl | num=1 | since=concurrency |
template&lt; class T &gt; class future;
}}
{{dcl | num=2 | since=concurrency |
template&lt; class T &gt; class future&lt;T&amp;&gt;;
}}
{{dcl | num=3 | since=concurrency |
template&lt;&gt;          class future&lt;void&gt;;
}}
{{dcl end}}

The class template {{tt|std::experimental::future}} extends {{lc|std::future}} with the following operations:

* an ''unwrapping constructor'' from {{tt|future&lt;future&lt;T&gt;&gt;}};
* a member function {{tt|is_ready}} to query whether the associated shared state is ready; and
* a member function {{tt|then}} to attach a continuation to the future.

However, there is no interoperation between {{tt|std::experimental::future}} and {{lc|std::future}}.

=== Member functions ===
{{dsc begin}}
{{dsc inc | cpp/experimental/future/dsc constructor}}
{{dsc inc | cpp/experimental/future/dsc is_ready}}
{{dsc inc | cpp/experimental/future/dsc then}}
{{dsc inc | cpp/experimental/future/dsc operator{{=}}}}
{{dsc end}}


{{identical|std::future|
=== Member functions ===
Note that {{tt|share()}} returns a {{lc|std::experimental::shared_future&lt;T&gt;}}. The behavior is otherwise identical.

{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc destructor}}
{{dsc inc | cpp/thread/future/dsc share}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/future/dsc get | future}}

{{dsc h2 | State}}
{{dsc inc | cpp/thread/future/dsc valid | future}}
{{dsc inc | cpp/thread/future/dsc wait | future}}
{{dsc inc | cpp/thread/future/dsc wait_for | future}}
{{dsc inc | cpp/thread/future/dsc wait_until | future}}
{{dsc end}}
}}

===Example===
{{example
| code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc shared_future}}
{{dsc end}}</text>
      <sha1>rhn5hucv6syoe3pf5lpefoap5jltulw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/future/future</title>
    <ns>0</ns>
    <id>15458</id>
    <revision>
      <id>85485</id>
      <timestamp>2016-04-21T21:34:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="56">{{include page| cpp/experimental/future/future| future}}</text>
      <sha1>5khqxb6uajtqfgh0h0j7jpy1cl6qa68</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/future/is ready</title>
    <ns>0</ns>
    <id>15455</id>
    <revision>
      <id>85475</id>
      <timestamp>2016-04-21T21:19:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="56">{{include page|cpp/experimental/future/is_ready|future}}</text>
      <sha1>qad50i7jlbufag1mlvxxxkicf775ojf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/future/operator=</title>
    <ns>0</ns>
    <id>16209</id>
    <revision>
      <id>91062</id>
      <parentid>91058</parentid>
      <timestamp>2017-03-16T19:23:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>noexcept to top</comment>
      <text xml:space="preserve" bytes="912">{{cpp/experimental/future/title | operator{{=}}}}
{{cpp/experimental/concurrency/future/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
std::experimental::future&lt;T&gt;&amp; operator=( std::experimental::future&lt;T&gt;&amp;&amp; other ) noexcept;
}}
{{dcl | num=2 | 1=
std::experimental::future&lt;T&gt;&amp; operator=( const std::experimental::future&lt;T&gt;&amp; other ) = delete;
}}
{{dcl end}}

Assigns the contents of another future object.

1) Releases any shared state and move-assigns the contents of {{tt|other}} to {{c|*this}}. After the assignment, {{c|other.valid() {{==}} false}} and [[cpp/thread/future/valid|{{c|this-&gt;valid()}}]] will yield the same value as {{c|other.valid()}} before the assignment.

2) {{lc|std::experimental::future}} is not {{concept|CopyAssignable}}.

===Parameters===
{{par begin}}
{{par | other | a {{tt|std::experimental::future}} that will transfer state to {{c|*this}} }}
{{par end}}

===Return value===
{{c|*this}}</text>
      <sha1>lx37gnzowtw8wezfxthu75snfvoci75</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/future/then</title>
    <ns>0</ns>
    <id>15461</id>
    <revision>
      <id>85490</id>
      <timestamp>2016-04-21T23:26:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="56">{{include page | cpp/experimental/future/then | future}}</text>
      <sha1>eko2jk587hgatjd5zdj27ee8xwd31w8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/gcd</title>
    <ns>0</ns>
    <id>14197</id>
    <revision>
      <id>86293</id>
      <parentid>80607</parentid>
      <timestamp>2016-06-27T13:23:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merge notice</comment>
      <text xml:space="preserve" bytes="1213">{{cpp/experimental/title|gcd}}
{{cpp/experimental/lib_extensions_2/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 6/2016, see  {{ltt|cpp/numeric/gcd|std::gcd}} {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/numeric }}
{{dcl | since=libfund_ts_2 |
template&lt; class M, class N&gt;
constexpr std::common_type_t&lt;M, N&gt; gcd(M m, N n);
}}
{{dcl end}}

Computes the greatest common divisor of the integers {{tt|m}} and {{tt|n}}.

=== Parameters ===
{{par begin}}
{{par | m, n | integer values}}
{{par end}}

===Return value===
If both {{tt|m}} and {{tt|n}} are zero, returns zero. Otherwise, returns the greatest common divisor of {{tt|{{!}}m{{!}}}} and {{tt|{{!}}n{{!}}}}.

=== Remarks ===
If either {{tt|M}} or {{tt|N}} is not an integer type, the program is ill-formed.

If {{tt|{{!}}m{{!}}}} is not representable as a value of type {{tt|M}} or {{tt|{{!}}n{{!}}}} is not representable as a value of type {{tt|N}}, the behavior is undefined.

=== Exceptions ===
Throws no exceptions.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc lcm}}
{{dsc end }}</text>
      <sha1>a16ng06m2utzjemr79sn6li7p4l875r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/get default resource</title>
    <ns>0</ns>
    <id>14354</id>
    <revision>
      <id>91396</id>
      <parentid>79845</parentid>
      <timestamp>2017-03-31T19:42:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="930">{{cpp/experimental/pmr/title|get_default_resource}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
memory_resource* get_default_resource();
}}

Gets the default memory resource pointer.

The ''default memory resource pointer'' is used by certain facilities when an explicit memory resource is not supplied. The initial default memory resource pointer is the return value of {{tt|new_delete_resource()}}.

This function is thread-safe. Previous call to {{tt|set_default_resource}} ''synchronizes with'' (see {{lc|std::memory_order}}) the subsequent {{lc|get_default_resource}} calls.

=== Return value ===

Returns the value of the default memory resource pointer.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/pmr/dsc set_default_resource}}
{{dsc inc|cpp/experimental/pmr/dsc new_delete_resource}}
{{dsc end}}</text>
      <sha1>6fd8evcce6w8q46q57uo266gigqydh0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/invocation type</title>
    <ns>0</ns>
    <id>14310</id>
    <revision>
      <id>83744</id>
      <parentid>79700</parentid>
      <timestamp>2016-03-08T02:02:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+surrogate call functions; LWG 2539</comment>
      <text xml:space="preserve" bytes="3373">{{cpp/experimental/title|invocation_type|raw_invocation_type}}
{{cpp/experimental/lib_extensions/navbar}}

{{dcl begin}}
{{dcl header | experimental/type_traits}}
{{dcl | since=libfund_ts | num = 1 |
template&lt;class&gt;
struct raw_invocation_type; //undefined

template&lt;class Fn, class... ArgTypes&gt;
struct raw_invocation_type&lt;Fn(ArgTypes...)&gt;;
}}
{{dcl | since=libfund_ts | num = 2 |
template&lt;class&gt;
struct invocation_type; //undefined

template&lt;class Fn, class... ArgTypes&gt;
struct invocation_type&lt;Fn(ArgTypes...)&gt;;
}}
{{dcl end}}

Computes the ''invocation parameters'' when {{tt|Fn}} is called with the arguments {{tt|ArgTypes...}}, as in {{c|INVOKE(std::declval&lt;Fn&gt;(), std::declval&lt;ArgTypes&gt;()...)}}, where {{c|INVOKE}} is the operation defined in {{concept|Callable}}.

The ''invocation parameters'' of the expression {{c|INVOKE(f, t1, t2, ..., tN)}} is defined as follows, where {{tt|T1}} is the (possibly cv-qualified) type of {{tt|t1}} and {{tt|U1}} is {{tt|T1&amp;}} if {{tt|t1}} is an lvalue and {{tt|T1&amp;&amp;}} otherwise:

* If {{tt|f}} is a pointer to a member function of a class {{tt|T}}, then the invocation parameters are {{tt|U1}} followed by the parameters of {{tt|f}} matched by {{tt|t2, ..., tN}}.
* If {{tt|N {{==}} 1}} and {{tt|f}} is a pointer to member data of a class {{tt|T}}, then the invocation parameter is {{tt|U1}}.
* If {{tt|f}} is an object of class type, the invocation parameters are the parameters matching {{tt|t1, ..., tN}} of the best viable function for the arguments {{tt|t1, ..., tN}} among the function call operators and surrogate call functions of {{tt|f}}.
* In all other cases, the invocations parameters are the parameters of {{tt|f}} matching {{tt|t1, ..., tN}}.

If an argument {{tt|tI}} matches an ellipsis in the function's parameter list, the corresponding invocation parameter is the result of applying the default argument promotions to {{tt|tI}}.

{{tt|Fn}} and all types in {{tt|ArgTypes}} can be any complete type, array of unknown bound, or (possibly cv-qualified) {{tt|void}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|raw_invocation_type&lt;Fn(ArgTypes...)&gt;::type}} | {{c|R(T1, T2, ...)}}, where:
* {{tt|R}} is {{c|std::result_of_t&lt;Fn(ArgTypes...)&gt;}}
* {{tt|T1, T2, ...}} are the ''invocation parameters'' of {{c|INVOKE(std::declval&lt;Fn&gt;(), std::declval&lt;ArgTypes&gt;()...)}} as defined above.
Only defined if {{tt|Fn}} can be called with the arguments {{tt|ArgTypes...}} in unevaluated context. }}
{{dsc | {{c|invocation_type&lt;Fn(ArgTypes...)&gt;::type}} | {{c|R(U1, U2, ...)}}, where
* {{tt|R}} is {{c|std::result_of_t&lt;Fn(ArgTypes...)&gt;}}
* {{tt|T1, T2, ...}} are the ''invocation parameters'' of {{c|INVOKE(std::declval&lt;Fn&gt;(), std::declval&lt;ArgTypes&gt;()...)}} as defined above
* {{tt|A1, A2, ...}} denotes {{tt|ArgTypes...}}
* {{tt|Ui}} is {{c|std::decay_t&lt;Ai&gt;}} if {{c|std::declval&lt;Ai&gt;()}} is an rvalue and {{tt|Ti}} otherwise.

Only defined if {{tt|Fn}} can be called with the arguments {{tt|ArgTypes...}} in unevaluated context. }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=libfund_ts | 1=
template&lt; class T &gt;
using raw_invocation_type_t = typename raw_invocation_type&lt;T&gt;::type;
}}
{{dcl | since=libfund_ts | 1=
template&lt; class T &gt;
using invocation_type_t = typename invocation_type&lt;T&gt;::type;
}}
{{dcl end}}

===Example===
{{example
 |
 |code=
|output=
}}

===See also===</text>
      <sha1>46351qtsyc9ylboilna34nimicqh86u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/is detected</title>
    <ns>0</ns>
    <id>14095</id>
    <revision>
      <id>80462</id>
      <parentid>79745</parentid>
      <timestamp>2015-08-14T10:38:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Possible implementation */</comment>
      <text xml:space="preserve" bytes="5118">{{cpp/experimental/title|is_detected|detected_t|detected_or}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{dcl begin}}
{{dcl header | experimental/type_traits }}
{{dcl | since=libfund_ts_2 |1=
template&lt; template&lt;class...&gt; class Op, class... Args &gt;
using is_detected = /* see below */;
}}
{{dcl | since=libfund_ts_2 |1=
template&lt; template&lt;class...&gt; class Op, class... Args &gt;
using detected_t = /* see below */;
}}
{{dcl | since=libfund_ts_2 |1=
template&lt; class Default, template&lt;class...&gt; class Op, class... Args &gt;
using detected_or = /* see below */;
}}

{{dcl end}}

The alias template {{tt|detected_or}} is an alias for an unspecified class type with two public member typedefs {{tt|value_t}} and {{tt|type}}, which are defined as follows:

* If the ''template-id'' {{c|Op&lt;Args...&gt;}} is valid, then {{tt|value_t}} is an alias for {{lc|std::true_type}}, and {{tt|type}} is an alias for {{c|Op&lt;Args...&gt;}};
* Otherwise, {{tt|value_t}} is an alias for {{lc|std::false_type}} and {{tt|type}} is an alias for {{tt|Default}}.


The alias template {{tt|is_detected}} is equivalent to {{c|typename detected_or&lt;std::experimental::nonesuch, Op, Args...&gt;::value_t}}. It is an alias for {{lc|std::true_type}} if the ''template-id'' {{c|Op&lt;Args...&gt;}} is valid; otherwise it is an alias for {{lc|std::false_type}}.


The alias template {{tt|detected_t}} is equivalent to {{c|typename detected_or&lt;std::experimental::nonesuch, Op, Args...&gt;::type}}. It is an alias for {{c|Op&lt;Args...&gt;}} if that ''template-id'' is valid; otherwise it is an alias for the class {{ltt|cpp/experimental/nonesuch|std::experimental::nonesuch}}.

=== Additional utilities ===
{{dcl begin}}
{{dcl | since=libfund_ts_2 |1=
template&lt; template&lt;class...&gt; class Op, class... Args &gt;
constexpr bool is_detected_v = is_detected&lt;Op, Args...&gt;::value;
}}
{{dcl | since=libfund_ts_2 |1=
template&lt; class Default, template&lt;class...&gt; class Op, class... Args &gt;
using detected_or_t = typename detected_or&lt;Default, Op, Args...&gt;::type;
}}
{{dcl | since=libfund_ts_2 | 1=
template &lt;class Expected, template&lt;class...&gt; class Op, class... Args&gt;
using is_detected_exact = is_same&lt;Expected, detected_t&lt;Op, Args...&gt;&gt;;
}}
{{dcl | since=libfund_ts_2  | 1=
template &lt;class Expected, template&lt;class...&gt; class Op, class... Args&gt;
constexpr bool is_detected_exact_v = is_detected_exact&lt;Expected, Op, Args...&gt;::value;
}}
{{dcl | since=libfund_ts_2  | 1=
template &lt;class To, template&lt;class...&gt; class Op, class... Args&gt;
using is_detected_convertible = is_convertible&lt;detected_t&lt;Op, Args...&gt;, To&gt;;
}}
{{dcl | since=libfund_ts_2  | 1=
template &lt;class To, template&lt;class...&gt; class Op, class... Args&gt;
constexpr bool is_detected_convertible_v = is_detected_convertible&lt;To, Op, Args...&gt;::value;
}}
{{dcl end}}

The alias template {{tt|is_detected_exact}} checks whether {{c|detected_t&lt;Op, Args...&gt;}} is {{tt|Expected}}. 

The alias template {{tt|is_detected_convertible}} checks whether {{c|detected_t&lt;Op, Args...&gt;}} is convertible to {{tt|To}}.

=== Possible implementation ===
{{source|1=
namespace detail {
template &lt;class Default, class AlwaysVoid,
          template&lt;class...&gt; class Op, class... Args&gt;
struct detector {
  using value_t = std::false_type;
  using type = Default;
};

template &lt;class Default, template&lt;class...&gt; class Op, class... Args&gt;
struct detector&lt;Default, std::void_t&lt;Op&lt;Args...&gt;&gt;, Op, Args...&gt; {
  // Note that std::void_t is a C++17 feature
  using value_t = std::true_type;
  using type = Op&lt;Args...&gt;;
};

} // namespace detail

template &lt;template&lt;class...&gt; class Op, class... Args&gt;
using is_detected = typename detail::detector&lt;nonesuch, void, Op, Args...&gt;::value_t;

template &lt;template&lt;class...&gt; class Op, class... Args&gt;
using detected_t = typename detail::detector&lt;nonesuch, void, Op, Args...&gt;::type;

template &lt;class Default, template&lt;class...&gt; class Op, class... Args&gt;
using detected_or = detail::detector&lt;Default, void, Op, Args...&gt;;
}}

===Example===
{{example
 |
 |code=
#include &lt;experimental/type_traits&gt;

template&lt;class T&gt;
using copy_assign_t = decltype(std::declval&lt;T&amp;&gt;() = std::declval&lt;const T&amp;&gt;());

struct Meow { };
struct Purr { void operator=(const Purr&amp;) = delete; };
 
int main()
{
    static_assert(std::experimental::is_detected&lt;copy_assign_t, Meow&gt;::value, &quot;Meow should be copy assignable!&quot;);
    static_assert(!std::experimental::is_detected_v&lt;copy_assign_t, Purr&gt;, &quot;Purr should not be copy assignable!&quot;);
    static_assert(std::experimental::is_detected_exact_v&lt;Meow&amp;, copy_assign_t, Meow&gt;, &quot;Copy assignment of Meow should return Meow&amp;!&quot;);
}
|output=
}}

{{example
 |
 |code=
#include &lt;experimental/type_traits&gt;
#include &lt;cstddef&gt;

template&lt;class T&gt;
using diff_t = typename T::difference_type;

template &lt;class Ptr&gt;
using difference_type = std::experimental::detected_or_t&lt;std::ptrdiff_t, diff_t, Ptr&gt;;

struct Meow { using difference_type = int; };
struct Purr {};

int main()
{
    static_assert(std::is_same&lt;difference_type&lt;Meow&gt;, int&gt;::value, &quot;Meow's difference_type should be int!&quot;);
    static_assert(std::is_same&lt;difference_type&lt;Purr&gt;, std::ptrdiff_t&gt;::value, &quot;Purr's difference_type should be ptrdiff_t!&quot;);
}
|output=
}}

===See also===</text>
      <sha1>6fzhk7yi8qk93n9vsqvl2v7sv43rqts</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/is execution policy</title>
    <ns>0</ns>
    <id>14368</id>
    <revision>
      <id>80083</id>
      <parentid>80080</parentid>
      <timestamp>2015-07-29T09:03:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+_v</comment>
      <text xml:space="preserve" bytes="1126">{{cpp/experimental/parallel/title|is_execution_policy}}
{{cpp/experimental/parallelism/navbar}}

{{ddcl | header = experimental/execution_policy | since=parallelism_ts | 1=
template&lt; class T &gt;
struct is_execution_policy;
}}

Checks whether {{tt|T}} is a standard or implementation-defined execution policy type.

Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is {{tt|execution_policy}}, {{tt|sequential_execution_policy}}, {{tt|parallel_execution_policy}}, {{tt|parallel_vector_execution_policy}}, or an implementation-defined execution policy type. Otherwise, {{tt|value}} is equal to {{c|false}}.

The behavior of a program that adds specializations for {{tt|is_execution_policy}} is undefined.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}

=== Helper template ===
{{ddcl | header = experimental/execution_policy | since=parallelism_ts | 1=
template&lt; class T &gt;
constexpr bool is_execution_policy_v = is_execution_policy&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a standard or implementation-defined execution policy type }}</text>
      <sha1>msa6gm50oubb66izmlezbxgggn9aryz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/latch</title>
    <ns>0</ns>
    <id>14616</id>
    <revision>
      <id>82273</id>
      <parentid>82254</parentid>
      <timestamp>2015-12-12T20:13:10Z</timestamp>
      <contributor>
        <ip>178.115.129.114</ip>
      </contributor>
      <comment>Harmonizations in &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="1004">{{cpp/experimental/title|latch}}
{{cpp/experimental/concurrency/latch/navbar}}
{{dcl begin}}
{{dcl header|experimental/latch}}
{{dcl | since=concurrency || 1=
class latch;
}}
{{dcl end}}

The {{tt|latch}} class is a downward counter of type {{tt|ptrdiff_t}} which can be
used to synchronize threads. The value of the counter is initialized on creation.
Threads may block on the latch until the counter is decremented to zero. There is
no possibility to increase or reset the counter, which makes the latch a single-use
barrier.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/latch/dsc constructor | latch}}
{{dsc inc | cpp/experimental/latch/dsc destructor | latch}}
{{dsc inc | cpp/experimental/latch/dsc operator{{=}} | latch}}

{{dsc inc | cpp/experimental/latch/dsc count_down_and_wait | latch}}
{{dsc inc | cpp/experimental/latch/dsc count_down | latch}}

{{dsc inc | cpp/experimental/latch/dsc is_ready | latch}}
{{dsc inc | cpp/experimental/latch/dsc wait | latch}}
{{dsc end}}</text>
      <sha1>p6is1lvyvqu12e9e47jrtk5dqhvtcc6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/latch/count down</title>
    <ns>0</ns>
    <id>14627</id>
    <revision>
      <id>82454</id>
      <parentid>82272</parentid>
      <timestamp>2015-12-17T10:55:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="764">{{cpp/experimental/latch/title|count_down}}
{{cpp/experimental/concurrency/latch/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=concurrency | 1= 
void count_down( ptrdiff_t n = 1);
}}
{{dcl end}}

Atomically decrements the internal counter by {{tt|n}} without blocking the caller.

If {{tt|n}} is greater than the value of the internal counter or is negative, the behavior is undefined.

This operation [[cpp/atomic/memory_order#Happens-before|synchronizes with]] all calls that block on this latch and all {{ltt|cpp/experimental/latch/is_ready}} calls on this latch that returns {{tt|true}}.

===Parameters===
{{par begin}}
{{par | n | the value by which the internal counter is decreased }}
{{par end}}

===Return value===
(none)

===Exceptions===
Throws nothing.</text>
      <sha1>ggkd08crqamcoafwljjhbn6ir7049jf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/latch/count down and wait</title>
    <ns>0</ns>
    <id>14626</id>
    <revision>
      <id>82455</id>
      <parentid>82271</parentid>
      <timestamp>2015-12-17T10:56:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="690">{{cpp/experimental/latch/title|count_down_and_wait}}
{{cpp/experimental/concurrency/latch/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=concurrency | 1= 
void count_down_and_wait();
}}
{{dcl end}}

Atomically decrements the internal counter by {{tt|1}} and (if necessary) blocks the calling 
thread until the counter reaches zero.

The behavior is undefined if the internal counter is already zero.

This operation [[cpp/atomic/memory_order#Happens-before|synchronizes with]] all calls that block on this latch and all {{ltt|cpp/experimental/latch/is_ready}} calls on this latch that returns {{tt|true}}.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
Throws nothing.</text>
      <sha1>2k5qn2gn65fco5l471a2jjsg3wvnvvv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/latch/is ready</title>
    <ns>0</ns>
    <id>14628</id>
    <revision>
      <id>91518</id>
      <parentid>82275</parentid>
      <timestamp>2017-03-31T19:48:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="394">{{cpp/experimental/latch/title|is_ready}}
{{cpp/experimental/concurrency/latch/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=concurrency | 1= 
bool is_ready() const;
}}
{{dcl end}}

Returns {{tt|true}} if the internal counter equals zero.

===Parameters===
(none)

===Return value===
{{c|true}} if the internal counter of {{c|*this}} latch equals zero.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>qfodhi4iht8xldq90md1q6iusue890g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/latch/latch</title>
    <ns>0</ns>
    <id>14624</id>
    <revision>
      <id>85420</id>
      <parentid>82453</parentid>
      <timestamp>2016-04-21T18:30:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="524">{{cpp/experimental/latch/title|latch}}
{{cpp/experimental/concurrency/latch/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=concurrency | 1= 
explicit latch( ptrdiff_t value );
}}
{{dcl | num=2 | since=concurrency | 1= 
latch( const latch &amp; ) = delete;
}}
{{dcl end}}

@1@ Constructs a {{tt|latch}} and initializes its internal counter.
@2@ Copy constructor is deleted. {{tt|latch}} is not copyable.

===Parameters===
{{par begin}}
{{par | value | the initial value of the internal counter; must be non-negative }}
{{par end}}</text>
      <sha1>fgu9o4t6ll1p5rei93qqndd04ql2kdm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/latch/wait</title>
    <ns>0</ns>
    <id>14625</id>
    <revision>
      <id>82264</id>
      <parentid>82263</parentid>
      <timestamp>2015-12-11T22:56:34Z</timestamp>
      <contributor>
        <ip>77.119.130.60</ip>
      </contributor>
      <comment>Started to document &lt;experimental/latch&gt;</comment>
      <text xml:space="preserve" bytes="374">{{cpp/experimental/latch/title|wait}}
{{cpp/experimental/concurrency/latch/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=concurrency | 1= 
void wait() const;
}}
{{dcl end}}

Blocks the calling thread until the internal counter reaches {{tt|0}}. If it is zero
already, returns immediately.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
Throws nothing.</text>
      <sha1>hq906oprnsk1y3x0zyz2dosomxgz8nb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/latch/~latch</title>
    <ns>0</ns>
    <id>14629</id>
    <revision>
      <id>82456</id>
      <parentid>82276</parentid>
      <timestamp>2015-12-17T10:58:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweaks</comment>
      <text xml:space="preserve" bytes="600">{{cpp/experimental/latch/title|~latch}}
{{cpp/experimental/concurrency/latch/navbar}}
{{dcl begin}}
{{dcl | since=concurrency | 1=
~latch();
}}
{{dcl end}}

Destroys the latch.

The behavior is undefined if a thread is blocked at the synchronization point.

The destructor may be called even if not all threads have returned from {{tt|wait()}} or {{tt|count_down_and_wait()}}, provided the internal counter must equal zero.

The destructor may block until all threads have returned from the blocking functions.

No thread is allowed to block on this latch after one thread has invoked the destructor.</text>
      <sha1>chzpeyicjihedgo3pflxgbebcxkeghm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lcm</title>
    <ns>0</ns>
    <id>14198</id>
    <revision>
      <id>86294</id>
      <parentid>79377</parentid>
      <timestamp>2016-06-27T13:24:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>merge notice</comment>
      <text xml:space="preserve" bytes="1358">{{cpp/experimental/title|lcm}}
{{cpp/experimental/lib_extensions_2/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 6/2016, see  {{ltt|cpp/numeric/lcm|std::lcm}} {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/numeric }}
{{dcl | since=libfund_ts_2 |
template&lt; class M, class N&gt;
constexpr std::common_type_t&lt;M, N&gt; lcm(M m, N n);
}}
{{dcl end}}

Computes the least common multiple of the integers {{tt|m}} and {{tt|n}}.

=== Parameters ===
{{par begin}}
{{par | m, n | integer values}}
{{par end}}

===Return value===
If either {{tt|m}} or {{tt|n}} is zero, returns zero. Otherwise, return the least common multiple of {{tt|{{!}}m{{!}}}} and {{tt|{{!}}n{{!}}}}.

=== Remarks ===
If either {{tt|M}} or {{tt|N}} is not an integer type, the program is ill-formed.

The behavior is undefined if
*{{tt|{{!}}m{{!}}}} is not representable as a value of type {{tt|M}}; or
*{{tt|{{!}}n{{!}}}} is not representable as a value of type {{tt|N}}; or
* the least common multiple of {{tt|{{!}}m{{!}}}} and {{tt|{{!}}n{{!}}}} is not representable as a value of type {{tt|std::common_type_t&lt;M,N&gt;}}.

=== Exceptions ===
Throws no exceptions.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc gcd}}
{{dsc end }}</text>
      <sha1>mxx17uca3spety3mhkoeo66tbhwo5tl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions</title>
    <ns>0</ns>
    <id>13683</id>
    <revision>
      <id>86363</id>
      <parentid>85732</parentid>
      <timestamp>2016-06-28T15:12:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Polymorphic allocators and memory resources */ That was NAD'd</comment>
      <text xml:space="preserve" bytes="11199">{{title|C++ standard libraries extensions}}
{{cpp/experimental/lib_extensions/navbar}}

The C++ Extensions for Library Fundamentals, ISO/IEC TS 19568:2015 defines the following new components for the C++ standard library:

=Not merged into C++17=
The following components of ISO/IEC TS 19568:2015 were not selected for inclusion in C++17 

==== Modified versions of existing classes to support type-erased allocators ====
{{dsc begin}}
{{dsc header | experimental/functional}}
{{dsc tclass | cpp/experimental/function | a modified version of {{lc|std::function}} with support for type-erased allocators }}
{{dsc header | experimental/future}}
{{dsc tclass | cpp/experimental/lib extensions/promise | a modified version of {{lc|std::promise}} with support for type-erased allocators }}
{{dsc tclass | cpp/experimental/lib extensions/packaged_task | a modified version of {{lc|std::packaged_task}} with support for type-erased allocators }}
{{dsc end}}

==== Polymorphic allocators and memory resources ====
{{dsc begin}}
{{dsc talias | cpp/experimental/resource_adaptor | adapts an allocator into a {{lc|memory_resource}}}}
{{dsc end}}

===General utilities===
{{dsc begin}}
{{dsc header | experimental/utility }}
{{dsc class | cpp/experimental/erased_type | placeholder type for type erasure, such as in allocators}}
{{dsc header | experimental/type_traits }}
{{dsc tclass | cpp/experimental/invocation_type| title=invocation_type&lt;br/&gt;raw_invocation_type | deduce the implied function type of the callable object when called with the given argument types}}
{{dsc end}}

=Merged into C++17=
The following components of ISO/IEC TS 19568:2015 were included into C++17 

===optional objects===
{{dsc begin}}
{{dsc header | experimental/optional }}
{{dsc tclass | cpp/experimental/optional | a class template representing ''optional objects''}}
{{dsc end}}

=== class {{tt|any}} ===
{{dsc begin}}
{{dsc header | experimental/any }}
{{dsc class | cpp/experimental/any | a type-safe container for single values of any type}}
{{dsc end}}

=== {{tt|string_view}} ===
{{dsc begin}}
{{dsc header | experimental/string_view }}
{{dsc tclass | cpp/experimental/basic_string_view | a non-owning reference to a string }}
{{dsc end}}

=== Type-erased and polymorphic allocators ===

==== Polymorphic allocators and memory resources ====
The entities in this section are declared in the {{lc|std::experimental::pmr}} namespace.

{{dsc begin}}
{{dsc header | experimental/memory_resource}}
{{dsc class | cpp/experimental/memory_resource |  an abstract interface for classes that encapsulate memory resources }} 
{{dsc inc|cpp/experimental/pmr/dsc synchronized_pool_resource}}
{{dsc inc|cpp/experimental/pmr/dsc unsynchronized_pool_resource}}
{{dsc class | cpp/experimental/monotonic_buffer_resource | a special-purpose {{lc|memory_resource}} that releases the allocated memory only when the resource is destroyed}}
{{dsc tclass | cpp/experimental/polymorphic_allocator | an allocator that supports run-time polymorphism based on the {{lc|memory_resource}} it is constructed with }}
{{dsc inc | cpp/experimental/pmr/dsc new_delete_resource}}
{{dsc inc | cpp/experimental/pmr/dsc null_memory_resource}}
{{dsc inc | cpp/experimental/pmr/dsc get_default_resource}}
{{dsc inc | cpp/experimental/pmr/dsc set_default_resource}}
{{dsc end}}

==== Convenience aliases for containers using polymorphic allocators ====
[[cpp/experimental/lib extensions/pmr_container|Convenience aliases and alias templates]] for containers using polymorphic allocators are provided in the {{tt|std::experimental::pmr}} namespace for the following class templates in the standard library:
{{collapse top | List of container templates for which convenience aliases are provided}}
{{div col|3}}
* {{lc|std::vector}}
* {{lc|std::deque}}
* {{lc|std::forward_list}}
* {{lc|std::list}}
* {{lc|std::basic_string}}
* {{lc|std::map}}
* {{lc|std::multimap}}
* {{lc|std::set}}
* {{lc|std::multiset}}
* {{lc|std::match_results}}
* {{lc|std::unordered_map}}
* {{lc|std::unordered_multimap}}
* {{lc|std::unordered_set}}
* {{lc|std::unordered_multiset}}
{{div col end}}
{{collapse bottom}}

=== Array support for {{tt|shared_ptr}} ===
{{dsc begin}}
{{dsc header | experimental/memory}}
{{dsc hitem | Class | Description}}
{{dsc tclass | cpp/experimental/shared_ptr | A modified version of {{lc|std::shared_ptr}} that supports arrays }} 
{{dsc tclass | cpp/experimental/weak_ptr| A modified version of {{lc|std::weak_ptr}} that supports arrays }} 
{{dsc end}}

===Sampling and searching algorithms===
{{dsc begin}}
{{dsc header | experimental/algorithm }}
{{dsc tfun | cpp/experimental/sample | selects n random elements from a sequence }}
{{dsc tfun | cpp/experimental/search | applies a Searcher to a sequence }}
{{dsc header | experimental/functional }}
{{dsc tclass | cpp/experimental/default_searcher | standard C++ library search algorithm implementation }}
{{dsc tfun | cpp/experimental/default_searcher | title=make_default_searcher | helper function to create a default_searcher }}
{{dsc tclass | cpp/experimental/boyer_moore_searcher | Boyer-Moore search algorithm implementation}}
{{dsc tfun | cpp/experimental/boyer_moore_searcher | title=make_boyer_moore_searcher | helper function to create a boyer_moore_searcher }}
{{dsc tclass | cpp/experimental/boyer_moore_horspool_searcher | Boyer-Moore-Horspool search algorithm implementation }}
{{dsc tfun | cpp/experimental/boyer_moore_horspool_searcher | title= make_boyer_moore_horspool_searcher | helper function to create a boyer_moore_horspool_searcher }}
{{dsc end}}

===General utilities===
{{dsc begin}}
{{dsc header | experimental/tuple }}
{{dsc tfun | cpp/experimental/apply | calls a function to a tuple of arguments}}
{{dsc end}}

In addition, the TS provides [[cpp/experimental/type_trait_variable_templates|numerous {{tt|constexpr}} variable templates]] for the following type traits and other class templates in the standard library:
{{collapse top| List of type traits and other class templates for which variable templates are provided}}
{{div col|2}}
* {{lc|std::is_void}}
* {{lc|std::is_null_pointer}}
* {{lc|std::is_integral}}
* {{lc|std::is_floating_point}}
* {{lc|std::is_array}}
* {{lc|std::is_pointer}}
* {{lc|std::is_lvalue_reference}}
* {{lc|std::is_rvalue_reference}}
* {{lc|std::is_member_object_pointer}}
* {{lc|std::is_member_function_pointer}}
* {{lc|std::is_enum}}
* {{lc|std::is_union}}
* {{lc|std::is_class}}
* {{lc|std::is_function}}
* {{lc|std::is_reference}}
* {{lc|std::is_arithmetic}}
* {{lc|std::is_fundamental}}
* {{lc|std::is_object}}
* {{lc|std::is_scalar}}
* {{lc|std::is_compound}}
* {{lc|std::is_member_pointer}}
* {{lc|std::is_const}}
* {{lc|std::is_volatile}}
* {{lc|std::is_trivial}}
* {{lc|std::is_trivially_copyable}}
* {{lc|std::is_standard_layout}}
* {{lc|std::is_pod}}
* {{lc|std::is_literal_type}}
* {{lc|std::is_empty}}
* {{lc|std::is_polymorphic}}
* {{lc|std::is_abstract}}
* {{lc|std::is_final}}
* {{lc|std::is_signed}}
* {{lc|std::is_unsigned}}
* {{lc|std::is_constructible}}
* {{lc|std::is_trivially_constructible}}
* {{lc|std::is_nothrow_constructible}}
* {{lc|std::is_default_constructible}}
* {{lc|std::is_trivially_default_constructible}}
* {{lc|std::is_nothrow_default_constructible}}
* {{lc|std::is_copy_constructible}}
* {{lc|std::is_trivially_copy_constructible}}
* {{lc|std::is_nothrow_copy_constructible}}
* {{lc|std::is_move_constructible}}
* {{lc|std::is_trivially_move_constructible}}
* {{lc|std::is_nothrow_move_constructible}}
* {{lc|std::is_assignable}}
* {{lc|std::is_trivially_assignable}}
* {{lc|std::is_nothrow_assignable}}
* {{lc|std::is_copy_assignable}}
* {{lc|std::is_trivially_copy_assignable}}
* {{lc|std::is_nothrow_copy_assignable}}
* {{lc|std::is_move_assignable}}
* {{lc|std::is_trivially_move_assignable}}
* {{lc|std::is_nothrow_move_assignable}}
* {{lc|std::is_destructible}}
* {{lc|std::is_trivially_destructible}}
* {{lc|std::is_nothrow_destructible}}
* {{lc|std::has_virtual_destructor}}
* {{lc|std::alignment_of}}
* {{lc|std::rank}}
* {{lc|std::extent}}
* {{lc|std::is_same}}
* {{lc|std::is_base_of}}
* {{lc|std::is_convertible}}
* {{lc|std::ratio_equal}}
* {{lc|std::ratio_not_equal}}
* {{lc|std::ratio_less}}
* {{lc|std::ratio_less_equal}}
* {{lc|std::ratio_greater}}
* {{lc|std::ratio_greater_equal}}
* {{lc|std::tuple_size}}
* {{lc|std::chrono::treat_as_floating_point}}
* {{lc|std::is_error_code_enum}}
* {{lc|std::is_error_condition_enum}}
* {{lc|std::is_bind_expression}}
* {{lc|std::is_placeholder}}
* {{lc|std::uses_allocator}}
{{div col end}}
{{collapse bottom}}

===Feature test macros===
{{dsc begin}}
{{dsc header | experimental/optional }}
{{dsc macro const | __cpp_lib_experimental_optional | nolink=true | a value of at least {{c|201411}} indicates that the optional type is supported }}
{{dsc header | experimental/any }}
{{dsc macro const | __cpp_lib_experimental_any | nolink=true | a value of at least {{c|201411}} indicates that the any type is supported }}
{{dsc header | experimental/string_view }}
{{dsc macro const | __cpp_lib_experimental_string_view | nolink=true | a value of at least {{c|201411}} indicates that basic_string_view template is supported }}
{{dsc header | experimental/tuple }}
{{dsc macro const | __cpp_lib_experimental_apply | nolink=true | a value of at least {{c|201402}} indicates that the tuple apply() function is supported }}
{{dsc header | experimental/type_traits }}
{{dsc macro const | __cpp_lib_experimental_type_trait_variable_templates | nolink=true | a value of at least {{c|201402}} indicates that variable template type traits are supported }}
{{dsc macro const | __cpp_lib_experimental_invocation_type | nolink=true | a value of at least {{c|201406}} indicates that invocation type traits are supported }}
{{dsc header | experimental/functional }}
{{dsc macro const | __cpp_lib_experimental_boyer_moore_searching | nolink=true | a value of at least {{c|201411}} indicates that additional searching algorithms are supported }}
{{dsc macro const | __cpp_lib_experimental_function_erased_allocator | nolink=true | a value of at least {{c|201406}} indicates that type-erased allocator for std::function is supported }}
{{dsc header | experimental/future }}
{{dsc macro const | __cpp_lib_experimental_promise_erased_allocator | nolink=true | a value of at least {{c|201406}} indicates that type-erased allocator for std::promise is supported }}
{{dsc macro const | __cpp_lib_experimental_packaged_task_erased_allocator | nolink=true | a value of at least {{c|201406}} indicates that type-erased allocator for std::packaged_task is supported }}
{{dsc header | experimental/memory }}
{{dsc macro const | __cpp_lib_experimental_shared_ptr_arrays | nolink=true | a value of at least {{c|201406}} indicates that shared_ptr arrays are supported }}
{{dsc header | experimental/memory_resource }}
{{dsc macro const | __cpp_lib_experimental_memory_resources | nolink=true | a value of at least {{c|201402}} indicates that polymorphic memory resources are supported }}
{{dsc header | experimental/algorithm }}
{{dsc macro const | __cpp_lib_experimental_sample | nolink=true | a value of {{c|201402}} indicates that the sample algorithm is supported }}
{{dsc end}}</text>
      <sha1>m9okfmvzjhow8n8z3jwbacs0n029j57</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions 2</title>
    <ns>0</ns>
    <id>14170</id>
    <revision>
      <id>86299</id>
      <parentid>83686</parentid>
      <timestamp>2016-06-27T13:31:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>moved gcd/lcm to the &quot;c++ adoption&quot; section</comment>
      <text xml:space="preserve" bytes="6746">{{title|C++ standard libraries extensions, version 2}}
{{cpp/experimental/lib_extensions_2/navbar}}

Version 2 of the C++ Extensions for Library Fundamentals, defines the following new components for the C++ standard library, in addition to those defined in [[cpp/experimental/lib extensions|version 1]]:


=== The C++ detection idiom ===
{{dsc begin}}
{{dsc header | experimental/type_traits}}
{{dsc talias | cpp/experimental/is_detected | title=is_detected &lt;br /&gt; detected_t &lt;br /&gt; detected_or | Alias templates that detect whether a ''template-id'' is well-formed }}
{{dsc class | cpp/experimental/nonesuch | Class type returned by {{c|detected_t}} on failure }}
{{dsc end }}

===A const-propagating wrapper for pointer-like objects ===
{{dsc begin}}
{{dsc header | experimental/propagate_const}}
{{dsc tclass | cpp/experimental/propagate_const | A const-propagating wrapper for pointer-like objects}}
{{dsc end }}

=== Non-owning pointers ===

{{dsc begin}}
{{dsc header | experimental/memory}}
{{dsc tclass | cpp/experimental/observer_ptr | A class representing a non-owning pointer}}
{{dsc end }}

=== Uniform container erasure ===

{{dsc begin}}
{{dsc header | experimental/string}}
{{cpp/experimental/dsc erase |basic_string|mark=no}}
{{cpp/experimental/dsc erase if |basic_string|mark=no}}
{{dsc header | experimental/deque}}
{{cpp/experimental/dsc erase |deque|mark=no}}
{{cpp/experimental/dsc erase if |deque|mark=no}}
{{dsc header | experimental/vector}}
{{cpp/experimental/dsc erase |vector|mark=no}}
{{cpp/experimental/dsc erase if |vector|mark=no}}
{{dsc header | experimental/forward_list}}
{{cpp/experimental/dsc erase |forward_list|mark=no}}
{{cpp/experimental/dsc erase if |forward_list|mark=no}}
{{dsc header | experimental/list}}
{{cpp/experimental/dsc erase |list|mark=no}}
{{cpp/experimental/dsc erase if |list|mark=no}}
{{dsc header | experimental/map}}
{{cpp/experimental/dsc erase if |map|mark=no}}
{{cpp/experimental/dsc erase if |multimap|mark=no}}
{{dsc header | experimental/set}}
{{cpp/experimental/dsc erase if |set|mark=no}}
{{cpp/experimental/dsc erase if |multiset|mark=no}}
{{dsc header | experimental/unordered_map}}
{{cpp/experimental/dsc erase if |unordered_map|mark=no}}
{{cpp/experimental/dsc erase if |unordered_multimap|mark=no}}
{{dsc header | experimental/unordered_set}}
{{cpp/experimental/dsc erase if |unordered_set|mark=no}}
{{cpp/experimental/dsc erase if |unordered_multiset|mark=no}}
{{dsc end }}

=== {{tt|std::array}} creation ===

{{dsc begin}}
{{dsc header | experimental/array}}
{{dsc inc | cpp/experimental/dsc make array}}
{{dsc inc | cpp/experimental/dsc to array}}
{{dsc end }}

=== {{tt|ostream_joiner}} ===

{{dsc begin}}
{{dsc header | experimental/iterator }}
{{dsc tclass | cpp/experimental/ostream_joiner | An output iterator that writes successive elements into an output stream, separating adjacent elements with a delimiter }}
{{dsc end }}

=== Simple random number generation facilities ===

{{anchor|per-thread engine}}A ''per-thread engine'' of type {{lc|std::default_random_engine}}, initialized to an unpredictable state, is maintained for each thread and used by the functions below.

{{dsc begin}}
{{dsc header | experimental/random}}
{{dsc inc | cpp/experimental/dsc randint }}
{{dsc inc | cpp/experimental/dsc reseed }}
{{dsc header | experimental/algorithm}}
{{dsc tfun | cpp/experimental/sample | selects n random elements from a sequence }}
{{dsc tfun | cpp/experimental/shuffle| randomly re-orders elements in a range }}
{{dsc end }}

=== Source code information capture ===
{{dsc begin}}
{{dsc header | experimental/source_location}}
{{dsc class | cpp/experimental/source_location | A class representing information about the source code, such as file names, line numbers, and function names }}
{{dsc end }}

===Feature test macros===
{{dsc begin}}
{{dsc header | experimental/type_traits}}
{{dsc macro const | __cpp_lib_experimental_logical_traits | nolink=true | a value of at least {{c|201511}} indicates that the logical operator type traits are supported }}
{{dsc macro const | __cpp_lib_experimental_detect | nolink=true | a value of at least {{c|201505}} indicates that the detection idiom is supported }}

{{dsc header | experimental/propagate_const }}
{{dsc macro const | __cpp_lib_experimental_propagate_const | nolink=true | a value of at least {{c|201505}} indicates that {{c|propagate_const}} is supported }}

{{dsc header | experimental/functional }}
{{dsc macro const | __cpp_lib_experimental_not_fn | nolink=true | a value of at least {{c|201406}} indicates that {{c|not_fn}} is supported }}

{{dsc header | experimental/memory }}
{{dsc macro const | __cpp_lib_experimental_observer_ptr | nolink=true | a value of at least {{c|201411}} indicates that {{c|observer_ptr}} is supported }}

{{dsc header | experimental/array}}
{{dsc macro const | __cpp_lib_experimental_make_array | nolink=true | a value of at least {{c|201505}} indicates that {{c|make_array}} is supported }}

{{dsc header | experimental/iterator}}
{{dsc macro const | __cpp_lib_experimental_ostream_joiner | nolink=true | a value of at least {{c|201411}} indicates that {{c|ostream_joiner}} is supported }}

{{dsc header | experimental/vector }}
{{dsc macro const | __cpp_lib_experimental_erase_if | nolink=true | a value of at least {{c|201411}} indicates that uniform container erasure is supported }}

{{dsc header | experimental/numeric}}
{{dsc macro const | __cpp_lib_experimental_gcd_lcm | nolink=true | a value of at least {{c|201411}} indicates that {{c|gcd}} and {{c|lcm}} are supported }}

{{dsc header | experimental/random}}
{{dsc macro const | __cpp_lib_experimental_randint| nolink=true | a value of at least {{c|201511}} indicates that {{c|randint}} and related functions are supported }}

{{dsc header | experimental/source_location}}
{{dsc macro const | __cpp_lib_experimental_source_location | nolink=true | a value of at least {{c|201505}} indicates that {{c|source_location}} is supported }}

{{dsc end}}

== C++ adoption ==
The following components of the library fundamentals v2 have been adopted into the mainline C++ standard

{{dsc begin}}
{{dsc header | experimental/type_traits}}
{{dsc talias | cpp/experimental/void_t | variadic alias template for {{tt|void}}}}
{{dsc header | experimental/type_traits}}
{{dsc tclass | cpp/experimental/conjunction | variadic logical AND metafunction}}
{{dsc tclass | cpp/experimental/disjunction |  variadic logical OR metafunction }}
{{dsc tclass | cpp/experimental/negation |  logical NOT metafunction }}
{{dsc header | experimental/functional}}
{{dsc inc | cpp/experimental/dsc not_fn}}
{{dsc header | experimental/numeric}}
{{dsc inc | cpp/experimental/dsc gcd}}
{{dsc inc | cpp/experimental/dsc lcm}}
{{dsc end }}</text>
      <sha1>thjg24ha48btj41rk54yy8nuqa080x1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/packaged task</title>
    <ns>0</ns>
    <id>14404</id>
    <revision>
      <id>82481</id>
      <parentid>82103</parentid>
      <timestamp>2015-12-17T22:18:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2235">{{cpp/experimental/title|packaged_task {{mark since libfund_ts}}}}
{{cpp/experimental/lib extensions/pmr/navbar}}

''This page is about the modified version of {{lc|std::packaged_task}} with type-erased allocator support provided by the Library Fundamentals TSes. For the version of {{tt|packaged_task}} provided by the concurrency TS supporting the {{tt|std::future}} improvements made by that TS, see {{ltt|cpp/experimental/concurrency/packaged_task|std::experimental::concurrency_v1::packaged_task}}.''
{{dcl begin}}
{{dcl header | experimental/future}}
{{dcl | num=1 | since=libfund_ts |
template&lt; class &gt; class packaged_task; //not defined
}}
{{dcl | num=2 | since=libfund_ts  |
template&lt; class R, class ...Args &gt; 
class packaged_task&lt;R(Args...)&gt;;
}}
{{dcl end}}

{{tt|std::experimental::fundamentals_v1::packaged_task}} (and {{tt|std::experimental::fundamentals_v2::packaged_task}}) is a modified version of {{lc|std::packaged_task}} provided by the library fundamentals TS with support for type-erased allocators.

=== Member types ===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|allocator_type}} | {{lc|std::experimental::erased_type}}}}
{{dsc end}}

=== Member functions ===
{{dsc begin}}
{{dsc inc | cpp/experimental/lib extensions/packaged_task/dsc constructor}}
{{dsc inc | cpp/experimental/lib extensions/packaged_task/dsc get_memory_resource}}
{{dsc end}}

=== Non-member function ===
{{dsc begin}}
{{dsc inc | cpp/experimental/lib extensions/packaged_task/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/lib extensions/packaged_task/dsc uses_allocator}}
{{dsc end}}

{{identical|{{small|std::}}packaged_task|2=

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc destructor}}
{{dsc inc | cpp/thread/packaged_task/dsc operator{{=}}}}
{{dsc inc | cpp/thread/packaged_task/dsc valid}}
{{dsc inc | cpp/thread/packaged_task/dsc swap}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/packaged_task/dsc get_future}}

{{dsc h2 | Execution}}
{{dsc inc | cpp/thread/packaged_task/dsc operator()}}
{{dsc inc | cpp/thread/packaged_task/dsc make_ready_at_thread_exit}}
{{dsc inc | cpp/thread/packaged_task/dsc reset}}
{{dsc end}}

}}</text>
      <sha1>k3tjnvugf2kc4bdjtqpq2pbz5l2kevr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/packaged task/get memory resource</title>
    <ns>0</ns>
    <id>14421</id>
    <revision>
      <id>80218</id>
      <parentid>80211</parentid>
      <timestamp>2015-07-31T22:35:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>use template</comment>
      <text xml:space="preserve" bytes="54">{{cpp/experimental/get_memory_resource|packaged_task}}</text>
      <sha1>dxh5konhpade6r9orm7tg8le5lqagd0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/packaged task/packaged task</title>
    <ns>0</ns>
    <id>14420</id>
    <revision>
      <id>91687</id>
      <parentid>80214</parentid>
      <timestamp>2017-03-31T19:54:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2361">{{cpp/experimental/packaged_task/title | packaged_task {{mark since libfund_ts}}}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts | 1=
packaged_task();
}}
{{dcl | num=2 | since=libfund_ts | 1=
template &lt;class F&gt;
explicit packaged_task( F&amp;&amp; f );
}}
{{dcl | num=3 | since=libfund_ts | 1=
template &lt;class F, class Allocator&gt;
explicit packaged_task( std::allocator_arg_t, const Allocator&amp; alloc, F&amp;&amp; f );
}}
{{dcl | num=4 | since=libfund_ts | 1=
packaged_task( const packaged_task&amp; ) = delete;
}}
{{dcl | num=5 | since=libfund_ts | 1=
packaged_task( packaged_task&amp;&amp; rhs );
}}
{{dcl end}}

Constructs a new {{tt|std::experimental::packaged_task}} object.

@1@ Constructs a {{tt|std::experimental::packaged_task}} object with no task and no shared state.
@2@ Constructs a {{tt|std::experimental::packaged_task}} object with a shared state and a copy of the task, initialized with {{c|std::forward&lt;F&gt;(f)}}. This constructor does not participate in overload resolution if {{c|std::decay&lt;F&gt;::type}} is the same type as {{c|std::packaged_task&lt;R(ArgTypes...)&gt;}}. 
@3@ Constructs a {{tt|std::experimental::packaged_task}} object with a shared state and a copy of the task, initialized with {{c|std::forward&lt;F&gt;(f)}}. Uses the provided allocator to allocate memory necessary to store the task, which is treated as a type-erased allocator (see below). This constructor does not participate in overload resolution if {{c|std::decay&lt;F&gt;::type}} is the same type as {{c|std::packaged_task&lt;R(ArgTypes...)&gt;}}. 
@4@ The copy constructor is deleted, {{tt|std::experimental::packaged_task}} is move-only. 
@5@ Constructs a {{tt|std::experimental::packaged_task}} with the shared state and task formerly owned by {{tt|rhs}}, leaving {{tt|rhs}} with no shared state and a moved-from task.


{{cpp/experimental/type erased allocator|packaged_task}}

===Parameters===
{{par begin}}
{{par | f | the callable target (function, member function, lambda-expression, functor) to execute}}
{{par | alloc | the allocator to use when storing the task}}
{{par | rhs | the {{tt|std::experimental::packaged_task}} to move from}}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

@2-3@ Any exceptions thrown by copy/move constructor of {{tt|f}} and possiblly {{lc|std::bad_alloc}} if the allocation fails.

@4@ (none)

@5@ {{unreviewed noexcept}}</text>
      <sha1>odpmzsqm2ndun28fex5ec5pjsly79ll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/packaged task/swap2</title>
    <ns>0</ns>
    <id>14543</id>
    <revision>
      <id>91632</id>
      <parentid>82105</parentid>
      <timestamp>2017-03-31T19:52:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="822">{{cpp/experimental/title | swap&lt;small&gt;(std::experimental::packaged_task)&lt;/small&gt;}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class R, class... Args &gt;
void swap( std::experimental::packaged_task&lt;R(Args...)&gt; &amp;lhs,
           std::experimental::packaged_task&lt;R(Args...)&gt; &amp;rhs );
}}
{{dcl end}}

Overloads the {{tt|swap}} algorithm for {{lc|std::experimental::packaged_task}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{tt|packaged_task}}s whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc swap}}
{{dsc end}}</text>
      <sha1>tkbznkd4n7bueuylg4n2vl3xavsn7gs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/packaged task/uses allocator</title>
    <ns>0</ns>
    <id>14544</id>
    <revision>
      <id>82108</id>
      <parentid>82106</parentid>
      <timestamp>2015-12-05T00:10:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>fix c/p error</comment>
      <text xml:space="preserve" bytes="678">{{cpp/title|uses_allocator&lt;small&gt;&lt;std::experimental::packaged_task&gt;&lt;/small&gt;}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl header | experimental/future}}
{{dcl | since=libfund_ts |
template&lt; class R, class Alloc &gt;
struct uses_allocator&lt;std::experimental::packaged_task&lt;R&gt;, Alloc&gt; 
    : std::true_type { };
}}
{{dcl end}}

This specialization of {{lc|std::uses_allocator}} informs other library components that all objects of type {{lc|std::experimental::packaged_task}} support ''uses-allocator construction''.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}</text>
      <sha1>qxkqg2k9eqb0tqgacgwfuru8mpcuw05</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/pmr container</title>
    <ns>0</ns>
    <id>14317</id>
    <revision>
      <id>80185</id>
      <parentid>79785</parentid>
      <timestamp>2015-07-31T12:28:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweak navbar</comment>
      <text xml:space="preserve" bytes="3823">{{title|Convenience aliases for containers using polymorphic allocators {{mark since libfund ts}}}}
{{cpp/experimental/lib extensions/pmr/navbar}}

The following convenience aliases and alias templates for containers using polymorphic allocators are defined in the {{tt|std::experimental::pmr}} namespace.

=== Strings ===
{{dsc begin}}
{{dsc hitem | Alias/alias template | Alias for}} 
{{dsc header | experimental/string}}
{{cpp/experimental/pmr_container|basic_string|tpdecl=class charT,
         class traits=std::char_traits&lt;charT&gt;|tpargs=charT, traits|allocargs=charT|multiline=yes}}
{{cpp/experimental/pmr_container_special|string|basic_string|char}}
{{cpp/experimental/pmr_container_special|wstring|basic_string|wchar_t}}
{{cpp/experimental/pmr_container_special|u16string|basic_string|char16_t}}
{{cpp/experimental/pmr_container_special|u32string|basic_string|char32_t}}
{{dsc end }}

=== Sequence containers ===
{{dsc begin}}
{{dsc hitem | Alias template | Alias for}} 
{{dsc header | experimental/vector}}
{{cpp/experimental/pmr_container|vector}}

{{dsc header | experimental/deque }}
{{cpp/experimental/pmr_container|deque}}

{{dsc header | experimental/forward_list}}
{{cpp/experimental/pmr_container|forward_list}}

{{dsc header | experimental/list}}
{{cpp/experimental/pmr_container|list}}
{{dsc end}}

=== Associative containers ===
{{dsc begin}}
{{dsc hitem | Alias template | Alias for}} 
{{dsc header | experimental/map}}
{{cpp/experimental/pmr_container|map|tpdecl=class Key, class T, 
         class Compare=std::less&lt;Key&gt;|tpargs=Key, T, Compare|allocargs=std::pair&lt;const Key, T&gt;|multiline=yes}}
{{cpp/experimental/pmr_container|multimap|tpdecl=class Key, class T, 
         class Compare=std::less&lt;Key&gt;|tpargs=Key, T, Compare|allocargs=std::pair&lt;const Key, T&gt;|multiline=yes}}

{{dsc header | experimental/set}}
{{cpp/experimental/pmr_container|set|tpdecl=class Key,
         class Compare=std::less&lt;Key&gt;|tpargs=Key, Compare|allocargs=Key|multiline=yes}}
{{cpp/experimental/pmr_container|multiset|tpdecl=class Key,
         class Compare=std::less&lt;Key&gt;|tpargs=Key, Compare|allocargs=Key|multiline=yes}}
{{dsc end}}

=== Unordered associative containers ===
{{dsc begin}}
{{dsc hitem | Alias template | Alias for}} 

{{dsc header | experimental/unordered_map}}
{{cpp/experimental/pmr_container|unordered_map|tpdecl=class Key, class T, 
         class Hash = std::hash&lt;Key&gt;, 
         class Pred = std::equal_to&lt;Key&gt;|tpargs=Key, T, Hash, Pred|allocargs=std::pair&lt;const Key, T&gt;|multiline=yes}}
{{cpp/experimental/pmr_container|unordered_multimap|tpdecl=class Key, class T, 
         class Hash = std::hash&lt;Key&gt;, 
         class Pred = std::equal_to&lt;Key&gt;|tpargs=Key, T, Hash, Pred|allocargs=std::pair&lt;const Key, T&gt;|multiline=yes}}

{{dsc header | experimental/unordered_set}}
{{cpp/experimental/pmr_container|unordered_set|tpdecl=class Key, 
         class Hash = std::hash&lt;Key&gt;, 
         class Pred = std::equal_to&lt;Key&gt;|tpargs=Key, Hash, Pred|allocargs=Key|multiline=yes}}
{{cpp/experimental/pmr_container|unordered_multiset|tpdecl=class Key, 
         class Hash = std::hash&lt;Key&gt;, 
         class Pred = std::equal_to&lt;Key&gt;|tpargs=Key, Hash, Pred|allocargs=Key|multiline=yes}}
{{dsc end}}

==={{tt|match_results}}===
{{dsc begin}}
{{dsc hitem | Alias/alias template | Alias for}} 
{{dsc header | experimental/regex}}
{{cpp/experimental/pmr_container|match_results|tpdecl=class BidirIt
|tpargs=BidirIt|allocargs=std::sub_match&lt;BidirIt&gt;|multiline=yes}}
{{cpp/experimental/pmr_container_special|cmatch|match_results|const char*}}
{{cpp/experimental/pmr_container_special|wcmatch|match_results|const wchar_t*}}
{{cpp/experimental/pmr_container_special|smatch|match_results|pmr::string::const_iterator}}
{{cpp/experimental/pmr_container_special|wsmatch|match_results|pmr::wstring::const_iterator}}
{{dsc end}}</text>
      <sha1>61cixev7wlqksl6i7fwpx3axkxnn8o5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/promise</title>
    <ns>0</ns>
    <id>14405</id>
    <revision>
      <id>82102</id>
      <parentid>80180</parentid>
      <timestamp>2015-12-05T00:00:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+headnote</comment>
      <text xml:space="preserve" bytes="2178">{{cpp/experimental/title|promise {{mark since libfund_ts}}}}
{{cpp/experimental/lib extensions/pmr/navbar}}

''This page is about the modified version of {{lc|std::promise}} with type-erased allocator support provided by the Library Fundamentals TSes. For the version of {{tt|promise}} provided by the concurrency TS supporting the {{tt|std::future}} improvements made by that TS, see {{ltt|cpp/experimental/concurrency/promise|std::experimental::concurrency_v1::promise}}.''

{{dcl begin}}
{{dcl header | experimental/future}}
{{dcl | num=1 | since=libfund_ts |
template&lt; class R &gt; class promise;
}}
{{dcl | num=2 | since=libfund_ts |
template&lt; class R &gt; class promise&lt;R&amp;&gt;;
}}
{{dcl | num=3 | since=libfund_ts |
template&lt;&gt;          class promise&lt;void&gt;;
}}
{{dcl end}}

{{tt|std::experimental::fundamentals_v1::promise}} (and {{tt|std::experimental::fundamentals_v2::promise}}) is a modified version of {{lc|std::promise}} provided by the library fundamentals TS with support for type-erased allocators.

=== Member types ===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|allocator_type}} | {{lc|std::experimental::erased_type}}}}
{{dsc end}}

=== Member functions ===
{{dsc begin}}
{{dsc inc | cpp/experimental/lib extensions/promise/dsc constructor}}
{{dsc inc | cpp/experimental/lib extensions/promise/dsc get_memory_resource}}
{{dsc end}}

=== Non-member function ===
{{dsc begin}}
{{dsc inc | cpp/experimental/lib extensions/promise/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/lib extensions/promise/dsc uses_allocator}}
{{dsc end}}

{{identical|{{small|std::}}promise|2=

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc destructor}}
{{dsc inc | cpp/thread/promise/dsc operator{{=}}}}
{{dsc inc | cpp/thread/promise/dsc swap}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/promise/dsc get_future}}

{{dsc h2 | Setting the result}}
{{dsc inc | cpp/thread/promise/dsc set_value}}
{{dsc inc | cpp/thread/promise/dsc set_value_at_thread_exit}}
{{dsc inc | cpp/thread/promise/dsc set_exception}}
{{dsc inc | cpp/thread/promise/dsc set_exception_at_thread_exit}}
{{dsc end}}

}}</text>
      <sha1>jnhob05prdtn1r5rtqpuwa9c5vzo3cx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/promise/get memory resource</title>
    <ns>0</ns>
    <id>14424</id>
    <revision>
      <id>80220</id>
      <timestamp>2015-07-31T22:36:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="48">{{cpp/experimental/get_memory_resource|promise}}</text>
      <sha1>hlsa56cdqdxmvsvw6f5oerb63xuyvqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/promise/promise</title>
    <ns>0</ns>
    <id>14541</id>
    <revision>
      <id>91466</id>
      <parentid>82101</parentid>
      <timestamp>2017-03-31T19:45:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1274">{{cpp/experimental/promise/title | promise {{mark since libfund_ts}}}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
promise();
}}
{{dcl | num=2 | since=libfund_ts |
template&lt; class Alloc &gt;
promise( std::allocator_arg_t, const Alloc&amp; alloc );
}}
{{dcl | num=3 | since=libfund_ts |
promise( promise&amp;&amp; other );
}}
{{dcl | num=4 | since=libfund_ts | 1=
promise( const promise&amp; other ) = delete;
}}
{{dcl end}}

Constructs a {{tt|std::experimental::promise}} object.

@1@ Default constructor. Constructs the promise with an empty shared state. 

@2@ Constructs the promise with an empty shared state. The shared state is allocated using {{tt|alloc}}, which is treated as a type-erased allocator (see below).

@3@ Move constructor. Constructs the promise with the shared state of {{tt|other}} using move semantics. After construction, {{tt|other}} has no shared state.

@4@ {{tt|std::experimental::promise}} is not copyable.

{{cpp/experimental/type erased allocator|promise}}

===Parameters===
{{par begin}}
{{par | alloc | allocator to use to allocate the shared state}}
{{par | other | another {{tt|std::experimental::promise}} to acquire the state from}}
{{par end}}

===Exceptions===
@1-2@ (none)
@3@ {{unreviewed noexcept}}</text>
      <sha1>q97rq979d2kqfbhe07e6f4yp0s3oad5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/promise/swap2</title>
    <ns>0</ns>
    <id>14542</id>
    <revision>
      <id>91592</id>
      <parentid>82104</parentid>
      <timestamp>2017-03-31T19:51:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="746">{{cpp/experimental/title | swap&lt;small&gt;(std::experimental::promise)&lt;/small&gt;}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class R &gt;
void swap( std::experimental::promise&lt;R&gt; &amp;lhs,
           std::experimental::promise&lt;R&gt; &amp;rhs );
}}
{{dcl end}}

Overloads the {{tt|swap}} algorithm for {{lc|std::experimental::promise}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | promises whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc swap}}
{{dsc end}}</text>
      <sha1>9844bmrvwr40lsq15z4nldj3rr1q9lx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/promise/uses allocator</title>
    <ns>0</ns>
    <id>14545</id>
    <revision>
      <id>82107</id>
      <timestamp>2015-12-05T00:10:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="660">{{cpp/title|uses_allocator&lt;small&gt;&lt;std::experimental::promise&gt;&lt;/small&gt;}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{dcl begin}}
{{dcl header | experimental/future}}
{{dcl | since=libfund_ts |
template&lt; class R, class Alloc &gt;
struct uses_allocator&lt;std::experimental::promise&lt;R&gt;, Alloc&gt; 
    : std::true_type { };
}}
{{dcl end}}

This specialization of {{lc|std::uses_allocator}} informs other library components that all objects of type {{lc|std::experimental::promise}} support ''uses-allocator construction''.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}</text>
      <sha1>90ibtawq0kbcqzn7uo4ymejmq33vwo8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/lib extensions/type trait variable templates</title>
    <ns>0</ns>
    <id>14314</id>
    <redirect title="cpp/experimental/type trait variable templates" />
    <revision>
      <id>79725</id>
      <timestamp>2015-07-24T23:10:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[cpp/experimental/lib extensions/type trait variable templates]] to [[cpp/experimental/type trait variable templates]]</comment>
      <text xml:space="preserve" bytes="60">#REDIRECT [[cpp/experimental/type trait variable templates]]</text>
      <sha1>45rs6mmw98o50g7sr0e80igtbnkb7l0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/list/erase</title>
    <ns>0</ns>
    <id>14177</id>
    <revision>
      <id>79330</id>
      <timestamp>2015-07-05T20:35:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="44">{{include page|cpp/experimental/erase|list}}</text>
      <sha1>to5fyh2es81qus3vhpqe07sb6eb4ryb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/list/erase if</title>
    <ns>0</ns>
    <id>14183</id>
    <revision>
      <id>79340</id>
      <timestamp>2015-07-05T20:48:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="47">{{include page|cpp/experimental/erase if|list}}</text>
      <sha1>sy1rc8149sdonkjqdljec5mkcqo6vfa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/make array</title>
    <ns>0</ns>
    <id>14192</id>
    <revision>
      <id>87406</id>
      <parentid>82541</parentid>
      <timestamp>2016-08-21T10:06:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Possible implementation */ more SFINAE-friendly</comment>
      <text xml:space="preserve" bytes="2335">{{cpp/experimental/title | make_array}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{dcl begin}}
{{dcl header |experimental/array}}
{{dcl| since=libfund_ts_2 | 1=
template &lt;class D = void, class... Types&gt;
constexpr std::array&lt;VT /* see below */, sizeof...(Types)&gt; make_array(Types&amp;&amp;... t);
}}
{{dcl end}}

Creates a {{lc|std::array}} whose size is equal to the number of arguments and whose elements are initialized from the corresponding arguments. Returns {{c|std::array&lt;VT, sizeof...(Types)&gt;{std::forward&lt;Types&gt;(t)...} }}

If {{tt|D}} is {{c|void}}, then the deduced type {{tt|VT}} is {{c|std::common_type_t&lt;Types...&gt;}}. Otherwise, it is {{tt|D}}.

If {{tt|D}} is {{c|void}} and any of {{c|std::decay_t&lt;Types&gt;...}} is a specialization of {{lc|std::reference_wrapper}}, the program is ill-formed.

=== Possible implementation ===
{{eq fun|1=
namespace details {
  template&lt;class&gt; struct is_ref_wrapper : std::false_type {};
  template&lt;class T&gt; struct is_ref_wrapper&lt;std::reference_wrapper&lt;T&gt;&gt; : std::true_type {};

  template&lt;class T&gt;
  using not_ref_wrapper = std::experimental::negation&lt;is_ref_wrapper&lt;std::decay_t&lt;T&gt;&gt;&gt;;

  template &lt;class D, class...&gt; struct return_type_helper { using type = D; };
  template &lt;class... Types&gt;
  struct return_type_helper&lt;void, Types...&gt; : std::common_type&lt;Types...&gt; {
      static_assert(std::experimental::conjunction_v&lt;not_ref_wrapper&lt;Types&gt;...&gt;,
                    &quot;Types cannot contain reference_wrappers when D is void&quot;);
  };

  template &lt;class D, class... Types&gt;
  using return_type = std::array&lt;typename return_type_helper&lt;D, Types...&gt;::type,
                                 sizeof...(Types)&gt;;
}

template &lt; class D = void, class... Types&gt;
constexpr details::return_type&lt;D, Types...&gt; make_array(Types&amp;&amp;... t) {
  return {std::forward&lt;Types&gt;(t)... };
}
}}

===Example===
{{example
 |code=
#include &lt;experimental/array&gt;
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main()
{
    decltype(auto) arr = std::experimental::make_array(1, 2, 3, 4, 5);
    bool is_array_of_5_ints = std::is_same&lt;decltype(arr), std::array&lt;int, 5&gt;&gt;::value;
    std::cout &lt;&lt; &quot;Returns an array of five ints? &quot;;
    std::cout &lt;&lt; std::boolalpha &lt;&lt; is_array_of_5_ints &lt;&lt; '\n';
}
 |output=
Returns an array of five ints? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc to array}}
{{dsc end}}</text>
      <sha1>bpdkk6rwlr26zy69rwvc0jkagax8xvx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/make exceptional future</title>
    <ns>0</ns>
    <id>15426</id>
    <revision>
      <id>85410</id>
      <parentid>85409</parentid>
      <timestamp>2016-04-20T22:28:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="1163">{{cpp/experimental/title|make_exceptional_future}}
{{cpp/experimental/concurrency/navbar}}
{{dcl begin}}
{{dcl header|experimental/future}}
{{dcl | num = 1 | since=concurrency | 1=
template &lt; class T &gt;
future&lt;T&gt; make_exceptional_future(std::exception_ptr ex);
}}
{{dcl | num = 2 | since=concurrency | 1=
template &lt; class T, class E &gt;
future&lt;T&gt; make_exceptional_future(E ex);
}}
{{dcl end}}

@1@ Creates a shared state of type {{tt|T}} that is immediately ready and stores the exception pointer {{tt|ex}}, then return a future associated with that shared state, as if by {{c| 
promise&lt;T&gt; p; p.set_exception(ex); return p.get_future(); }}. The behavior is undefined if {{tt|ex}} is null.

@2@ Creates a shared state of type {{tt|T}} that is immediately ready and stores an exception pointer created from {{tt|ex}}, then return a future associated with that shared state, as if by {{c| 
promise&lt;T&gt; p; p.set_exception(std::make_exception_ptr(ex)); return p.get_future(); }}

=== Return value ===
A {{tt|future}} object associated with the shared state that was created.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc make_ready_future }}
{{dsc end}}</text>
      <sha1>mfkh4i5eqvrefxpaniepo4pmktzaz2x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/make ready future</title>
    <ns>0</ns>
    <id>15427</id>
    <revision>
      <id>85411</id>
      <parentid>85408</parentid>
      <timestamp>2016-04-20T22:33:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1077">{{cpp/experimental/title|make_ready_future}}
{{cpp/experimental/concurrency/navbar}}
{{dcl begin}}
{{dcl header|experimental/future}}
{{dcl | num = 1 | since=concurrency | 1=
template &lt; class T &gt;
future&lt;V /* see below */&gt; make_ready_future(T&amp;&amp; value);
}}
{{dcl | num = 2 | since=concurrency | 1=
future&lt;void&gt; make_ready_future();
}}
{{dcl end}}

@1@ If {{c|std::decay_t&lt;T&gt;}} is {{c|std::reference_wrapper&lt;X&gt;}}, then the type {{tt|V}} is {{tt|X&amp;}}, otherwise, {{tt|V}} is {{c|std::decay_t&lt;T&gt;}}.
@@Creates a shared state of type {{tt|V}} that is immediately ready, with the result constructed from {{c|std::forward&lt;T&gt;(value)}}, then returns a {{lc|std::experimental::future}} associated with that shared state.

@2@ Creates a shared state of type {{tt|void}} that is immediately ready, then returns a {{lc|std::experimental::future}} associated with that shared state.

=== Return value ===
A {{tt|std::experimental::future}} associated with the shared state that is created.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc make_exceptional_future }}
{{dsc end}}</text>
      <sha1>8zpk84c173peu0p5r31ptdnlhedb7r2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/map/erase if</title>
    <ns>0</ns>
    <id>14184</id>
    <revision>
      <id>79341</id>
      <timestamp>2015-07-05T20:48:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="46">{{include page|cpp/experimental/erase if|map}}</text>
      <sha1>lr29nuqznkrmhu83ubfnde0wqetshnr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory</title>
    <ns>0</ns>
    <id>13678</id>
    <redirect title="cpp/experimental/lib extensions" />
    <revision>
      <id>79713</id>
      <parentid>71552</parentid>
      <timestamp>2015-07-23T23:09:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>redirect to main page section instead</comment>
      <text xml:space="preserve" bytes="84">#REDIRECT [[cpp/experimental/lib extensions#Type-erased and polymorphic allocators]]</text>
      <sha1>78lf70utvwlgyxprmgmkozz61iiwym0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource</title>
    <ns>0</ns>
    <id>14325</id>
    <revision>
      <id>84478</id>
      <parentid>80077</parentid>
      <timestamp>2016-03-18T17:08:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merged box</comment>
      <text xml:space="preserve" bytes="1429">{{cpp/experimental/pmr/title|memory_resource}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  {{ltt|cpp/memory/memory_resource|std::pmr::memory_resource}} {{mark since c++17}} }}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
class memory_resource;
}}

The class {{tt|std::experimental::pmr::memory_resource}} is an abstract interface to an unbounded set of classes encapsulating memory resources.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/memory_resource/dsc constructor}}
{{dsc inc | cpp/experimental/memory_resource/dsc destructor}}
{{dsc inc | cpp/experimental/memory_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/experimental/memory_resource/dsc allocate}}
{{dsc inc | cpp/experimental/memory_resource/dsc deallocate}}
{{dsc inc | cpp/experimental/memory_resource/dsc is_equal}}

{{dsc h2 | Protected member functions}}
{{dsc inc | cpp/experimental/memory_resource/dsc do_allocate}}
{{dsc inc | cpp/experimental/memory_resource/dsc do_deallocate}}
{{dsc inc | cpp/experimental/memory_resource/dsc do_is_equal}}
{{dsc end}}

=== Non-member-functions ===
{{dsc begin}}
{{dsc inc | cpp/experimental/memory_resource/dsc operator eq}}
{{dsc end}}</text>
      <sha1>0p2h7n8h0kb1enlyjlbvyknt33asrbg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/allocate</title>
    <ns>0</ns>
    <id>14343</id>
    <revision>
      <id>79820</id>
      <parentid>79819</parentid>
      <timestamp>2015-07-27T22:13:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="721">{{cpp/experimental/pmr/memory_resource/title|allocate}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{ddcl|since=libfund_ts |1=
void* allocate(std::size_t bytes, std::size_t alignment = alignof(std::max_align_t));
}}

Allocates storage with a size of at least {{tt|bytes}} bytes. The returned storage is aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c| alignof(std::max_align_t)}} otherwise. 

Equivalent to {{c|return do_allocate(bytes, alignment);}}.

=== Exceptions ===
Throws an exception if storage of the requested size and alignment cannot be obtained.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>gkbo8klssumqracfcq2v7ooqg3l56hx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/deallocate</title>
    <ns>0</ns>
    <id>14347</id>
    <revision>
      <id>79824</id>
      <timestamp>2015-07-27T22:22:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="724">{{cpp/experimental/pmr/memory_resource/title|deallocate}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{ddcl|since=libfund_ts |1=
void* deallocate(void* p, std::size_t bytes, std::size_t alignment = alignof(std::max_align_t));
}}

Deallocates the storage pointed to by {{tt|p}}. {{tt|p}} shall have been returned by a prior call to {{tt|allocate(bytes, alignment)}} on a {{tt|memory_resource}} that compares equal to {{tt|*this}}, and the storage it points to shall not yet have been deallocated.

Equivalent to {{c|return do_deallocate(p, bytes, alignment);}}.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>1cg8viq5el21b1f9gfr7g7llc59987e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/do allocate</title>
    <ns>0</ns>
    <id>14344</id>
    <revision>
      <id>79821</id>
      <timestamp>2015-07-27T22:14:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="691">{{cpp/experimental/pmr/memory_resource/title|do_allocate}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment) = 0;
}}

Allocates storage with a size of at least {{tt|bytes}} bytes. The returned storage is aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c| alignof(std::max_align_t)}} otherwise. 

{{tt|alignment}} shall be a power of two.

=== Exceptions ===
Throws an exception if storage of the requested size and alignment cannot be obtained.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc allocate}}
{{dsc end}}</text>
      <sha1>l7efnh6yuqkoj2kpgzyxrl0cemtb0lf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/do deallocate</title>
    <ns>0</ns>
    <id>14348</id>
    <revision>
      <id>79825</id>
      <timestamp>2015-07-27T22:23:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="646">{{cpp/experimental/pmr/memory_resource/title|do_deallocate}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void* do_deallocate(void* p, std::size_t bytes, std::size_t alignment) = 0;
}}

Deallocates the storage pointed to by {{tt|p}}. {{tt|p}} shall have been returned by a prior call to {{tt|allocate(bytes, alignment)}} on a {{tt|memory_resource}} that compares equal to {{tt|*this}}, and the storage it points to shall not yet have been deallocated.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>84xy5h5m8i53erwllwrbwp1ze09l6ze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/do is equal</title>
    <ns>0</ns>
    <id>14342</id>
    <revision>
      <id>91611</id>
      <parentid>79818</parentid>
      <timestamp>2017-03-31T19:51:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="894">{{cpp/experimental/pmr/memory_resource/title|do_is_equal}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual bool is_equal(const memory_resource&amp; other) const = 0;
}}

Compares {{tt|*this}} for equality with {{tt|other}}.

Two {{tt|memory_resource}}s compare equal if and only if memory allocated from one {{tt|memory_resource}} can be deallocated from the other and vice versa.

=== Notes ===
The most-derived type of {{tt|other}} may not match the most derived type of {{tt|*this}}. A derived class implementation therefore must typically check whether the most derived types of {{tt|*this}} and {{tt|other}} match using {{lc|dynamic_cast}}, and immediately return {{tt|false}} if the cast fails.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc is_equal}}
{{dsc end}}</text>
      <sha1>ab1rikrw1zwpzvuebk8g26os07hxvuh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/is equal</title>
    <ns>0</ns>
    <id>14341</id>
    <revision>
      <id>91848</id>
      <parentid>79815</parentid>
      <timestamp>2017-03-31T19:59:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="608">{{cpp/experimental/pmr/memory_resource/title|is_equal}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{ddcl|since=libfund_ts |
bool is_equal(const memory_resource&amp; other) const;
}}

Compares {{tt|*this}} for equality with {{tt|other}}. Two {{tt|memory_resource}}s compare equal if and only if memory allocated from one {{tt|memory_resource}} can be deallocated from the other and vice versa.

Equivalent to {{c|return do_is_equal(other);}}.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>4cnxoxcw4h5b2r047rt6a5xcc58a5gv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/memory resource</title>
    <ns>0</ns>
    <id>14345</id>
    <revision>
      <id>79822</id>
      <timestamp>2015-07-27T22:17:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="448">{{cpp/experimental/pmr/memory_resource/title|memory_resource}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | notes={{mark implicit}} | num= 1| 1=
memory_resource() = default;
}}
{{dcl|since=libfund_ts | notes={{mark implicit}} | num= 2| 1=
memory_resource(const memory_resource&amp;) = default;
}}
{{dcl end}}

1) Implicitly declared default constructor.

2) Implicitly declared copy constructor.</text>
      <sha1>6jl8uugq8fz7dq3tda7yjp1sfa1z73y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/operator eq</title>
    <ns>0</ns>
    <id>14349</id>
    <revision>
      <id>91387</id>
      <parentid>79829</parentid>
      <timestamp>2017-03-31T19:42:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="864">{{title|operator{{==}}, operator!{{=}} {{small|(std::experimental::pmr::memory_resource)}}}}
{{cpp/experimental/lib extensions/pmr/memory_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts |num = 1 | 1=
 bool operator==(const memory_resource&amp; a, const memory_resource&amp; b);
}}
{{dcl|since=libfund_ts |num = 2 | 1=
 bool operator!=(const memory_resource&amp; a, const memory_resource&amp; b);
}}
{{dcl end}}

Compares the {{tt|memory_resource}}s {{tt|a}} and {{tt|b}} for equality. Two {{tt|memory_resource}}s compare equal if and only if memory allocated from one {{tt|memory_resource}} can be deallocated from the other and vice versa.

=== Return value ===
@1@ {{c|1=&amp;a == &amp;b {{!!}} a.is_equal(b)}}
@2@ {{c|1=!(a == b)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc is_equal}}
{{dsc end}}</text>
      <sha1>s3yh4kjqvhvzjqrclc7l8mt85pinohj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/memory resource/~memory resource</title>
    <ns>0</ns>
    <id>14346</id>
    <redirect title="cpp/experimental/memory resource" />
    <revision>
      <id>80075</id>
      <parentid>79847</parentid>
      <timestamp>2015-07-29T05:25:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/experimental/memory_resource]]</text>
      <sha1>mpn2rsdcxz2z5zqvtf5b483rz7uap5d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource</title>
    <ns>0</ns>
    <id>14370</id>
    <revision>
      <id>80138</id>
      <parentid>80108</parentid>
      <timestamp>2015-07-29T23:44:10Z</timestamp>
      <contributor>
        <ip>183.206.175.45</ip>
      </contributor>
      <text xml:space="preserve" bytes="1649">{{cpp/experimental/pmr/title|monotonic_buffer_resource}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
class monotonic_buffer_resource : public memory_resource;
}}

The class {{tt|std::experimental::pmr::monotonic_buffer_resource}} is an special-purpose memory resource class that releases the allocated memory only when the resource is destroyed. It is intended for very fast memory allocations in situations where memory is used to build up a few objects and then is released all at once.

{{tt|monotonic_buffer_resource}} can be constructed with an initial buffer. If there is no initial buffer, or if the buffer is exhausted, additional buffers are obtained from an ''upstream memory resource'' supplied at construction. The size of buffers obtained follows a geometric progression.

{{tt|monotonic_buffer_resource}} is not thread-safe.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc constructor}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc destructor}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc release}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc upstream_resource}}

{{dsc h2 | Protected member functions}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc do_allocate}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc do_deallocate}}
{{dsc inc | cpp/experimental/monotonic_buffer_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>cp56eyqtybq3fy5hdt7z1ms6i3vv5wy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource/do allocate</title>
    <ns>0</ns>
    <id>14604</id>
    <revision>
      <id>84341</id>
      <parentid>84335</parentid>
      <timestamp>2016-03-17T14:27:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84335 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="1391">{{cpp/experimental/pmr/monotonic_buffer_resource/title|do_allocate}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
}}

Allocates storage. 

If the ''current buffer'' has sufficient unused space to fit a block with the specified size and alignment, allocates the return block from the current buffer. 

Otherwise, this function allocates a new buffer by calling {{tt|upstream_resource()-&gt;allocate(n, m)}}, where {{tt|n}} is not less than the greater of {{tt|bytes}} and the ''next buffer size'' and {{tt|m}} is not less than {{tt|alignment}}. It sets the new buffer as the ''current buffer'',  increases the ''next buffer size'' by an implementation-defined growth factor (which is not necessarily integral), and then allocates the return block from the newly allocated buffer.

=== Return value ===
A pointer to allocated storage of at least {{tt|bytes}} bytes in size, aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c|alignof(std::max_align_t)}} otherwise. 

=== Exceptions ===
Throws nothing unless calling {{tt|allocate()}} on the upstream memory resource throws.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc allocate}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>r3omihmkjzfjn8erfk1hmt8r2qdp9fs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource/do deallocate</title>
    <ns>0</ns>
    <id>14599</id>
    <revision>
      <id>84342</id>
      <parentid>84336</parentid>
      <timestamp>2016-03-17T14:28:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84336 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="619">{{cpp/experimental/pmr/monotonic_buffer_resource/title|do_deallocate}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment);
}}

This function has no effect. Memory used by a {{tt|monotonic_buffer_resource}}, as its name indicates, increases monotonically until the resource is destroyed.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc deallocate}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>o1o2956vark0j0s2wfm4mjn5xcjmy3x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource/do is equal</title>
    <ns>0</ns>
    <id>14598</id>
    <revision>
      <id>91481</id>
      <parentid>84343</parentid>
      <timestamp>2017-03-31T19:46:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="640">{{cpp/experimental/pmr/monotonic_buffer_resource/title|do_is_equal}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual bool do_is_equal(const memory_resource&amp; other) const;
}}

Compare {{tt|*this}} with {{tt|other}} for identity - memory allocated using a {{tt|monotonic_buffer_resource}} can only be deallocated using that same resource.

=== Return value ===
{{c|1=this == dynamic_cast&lt;const monotonic_buffer_resource*&gt;(&amp;other)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>qe9ooumfife080cup3guc8as72rqgqr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource/monotonic buffer resource</title>
    <ns>0</ns>
    <id>14603</id>
    <revision>
      <id>82189</id>
      <parentid>82187</parentid>
      <timestamp>2015-12-05T10:16:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2104">{{cpp/experimental/pmr/monotonic_buffer_resource/title|monotonic_buffer_resource}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | num= 1| 1=
monotonic_buffer_resource();
}}
{{dcl|since=libfund_ts | num= 2| 1=
explicit monotonic_buffer_resource(memory_resource* upstream);
}}
{{dcl|since=libfund_ts | num= 3| 1=
explicit monotonic_buffer_resource(std::size_t initial_size);
}}
{{dcl|since=libfund_ts | num= 4| 1=
monotonic_buffer_resource(std::size_t initial_size,
                          memory_resource* upstream);
}}
{{dcl|since=libfund_ts | num= 5| 1=
monotonic_buffer_resource(void* buffer, std::size_t buffer_size);
}}
{{dcl|since=libfund_ts | num= 6| 1=
monotonic_buffer_resource(void* buffer, std::size_t buffer_size,
                          memory_resource* upstream);
}}
{{dcl|since=libfund_ts | num= 7| 1=
monotonic_buffer_resource(const monotonic_buffer_resource&amp;) = delete;
}}
{{dcl end}}

Constructs a {{tt|monotonic_buffer_resource}}. The constructors not taking a upstream memory resource pointer uses the return value of {{c|std::experimental::pmr::get_default_resource()}} as the upstream memory resource.

@1-2@ Sets the ''current buffer'' to null and the ''next buffer size'' to an implementation-defined size.
@3-4@ Sets the ''current buffer'' to null and the ''next buffer size'' to a size no smaller than {{tt|initial_size}}.
@5-6@ Sets the ''current buffer'' to {{tt|buffer}} and the ''next buffer size'' to {{tt|buffer_size}} (but not less than 1). Then increase the ''next buffer size'' by an implementation-defined growth factor (which does not have to be integral).
@7@ Copy constructor is deleted.

=== Parameters ===

{{par begin}}
{{par | upstream | the upstream memory resource to use; must point to a valid memory resource }}
{{par | initial_size | the minimum size of the first buffer to allocate; must be greater than zero }}
{{par | buffer | the initial buffer to use }}
{{par | buffer_size | the size of the initial buffer; cannot be greater than the number of bytes in {{ttb|buffer}} }}
{{par end}}</text>
      <sha1>kpmo6ydq3of88zmkk5jyb8mmuvj1cgm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource/release</title>
    <ns>0</ns>
    <id>14602</id>
    <revision>
      <id>84339</id>
      <parentid>84333</parentid>
      <timestamp>2016-03-17T14:26:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84333 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="563">{{cpp/experimental/pmr/monotonic_buffer_resource/title|release}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
void release();
}}
{{dcl end}}

Releases all allocated memory by calling the {{tt|deallocate}} function on the upstream memory resource as necessary.

Memory is released back to the upstream resource even if {{tt|deallocate}} has not been called for some of the allocated blocks.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>67kpzovmb17nmvwfn21aowb5ek1abud</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource/upstream resource</title>
    <ns>0</ns>
    <id>14601</id>
    <revision>
      <id>84340</id>
      <parentid>84334</parentid>
      <timestamp>2016-03-17T14:27:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84334 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="512">{{cpp/experimental/pmr/monotonic_buffer_resource/title|upstream_resource}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
memory_resource* upstream_resource() const;
}}
{{dcl end}}

Returns a pointer to the upstream memory resource. This is the same value as the {{tt|upstream}} argument passed to the constructor of this object.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/monotonic_buffer_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>3t6z1c4vcp56b3545zjcdhdi63l61f6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/monotonic buffer resource/~monotonic buffer resource</title>
    <ns>0</ns>
    <id>14600</id>
    <revision>
      <id>84338</id>
      <parentid>84332</parentid>
      <timestamp>2016-03-17T14:26:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 84332 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oops</comment>
      <text xml:space="preserve" bytes="489">{{cpp/experimental/pmr/monotonic_buffer_resource/title|~monotonic_buffer_resource}}
{{cpp/experimental/lib extensions/pmr/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
virtual ~monotonic_buffer_resource();
}}
{{dcl end}}

Destroys a {{tt|monotonic_buffer_resource}}.

Deallocates all memory owned by this resource by calling {{c|this-&gt;release()}}.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/monotonic_buffer_resource/dsc release}}
{{dsc end}}</text>
      <sha1>ql81b2c8gnyb6atwo11itadue2yclfu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/multimap/erase if</title>
    <ns>0</ns>
    <id>14185</id>
    <revision>
      <id>79345</id>
      <timestamp>2015-07-05T20:53:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="51">{{include page|cpp/experimental/erase if|multimap}}</text>
      <sha1>1yh8cmo9hxokisvb4et6igtoegx2ch1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/multiset/erase if</title>
    <ns>0</ns>
    <id>14187</id>
    <revision>
      <id>79347</id>
      <timestamp>2015-07-05T20:53:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="51">{{include page|cpp/experimental/erase if|multiset}}</text>
      <sha1>o41ffutnltgpwwwcfwlsupqlcj0uabl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/negation</title>
    <ns>0</ns>
    <id>14516</id>
    <revision>
      <id>86302</id>
      <parentid>81736</parentid>
      <timestamp>2016-06-27T13:34:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merge notice</comment>
      <text xml:space="preserve" bytes="1434">{{cpp/experimental/title|negation}}
{{cpp/experimental/lib_extensions_2/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 2/2016, see  {{ltt|cpp/types/negation|std::negation}} {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/type_traits}}
{{dcl | since=libfund_ts_2 | num=1 | 1=
template&lt;class B&gt;
struct negation;
}}
{{dcl end}}

Forms the logical negation of the type trait {{tt|B}}.

The type {{c|negation&lt;B&gt;}} is a {{concept|UnaryTypeTrait}} with a BaseCharacteristic of {{c|std::integral_constant&lt;bool, !B::value&gt;}}.

===Template parameters===
{{par begin}}
{{par | B | any type such that the expression {{c|!B::value}} is a valid [[cpp/language/constant expression#Converted constant expression|converted constant expression]] of type {{c|bool}} }}
{{par end}}

=== Helper variable template ===
{{dcl begin}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class B&gt;
constexpr bool negation_v = negation&lt;B&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit | {{tt|B}} has a member {{tt|::value}} such that {{c|!B::value}} is {{c|true}} }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class B&gt;
struct negation : std::integral_constant&lt;bool, !B::value&gt; { };
}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc negation}}
{{dsc end}}</text>
      <sha1>iz69u39j2f47sopyhm2e32x9re9rly9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/new delete resource</title>
    <ns>0</ns>
    <id>14351</id>
    <revision>
      <id>91527</id>
      <parentid>79837</parentid>
      <timestamp>2017-03-31T19:49:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="895">{{cpp/experimental/pmr/title|new_delete_resource}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
memory_resource* new_delete_resource();
}}

Returns a pointer to a {{tt|memory_resource}} that uses the global {{lc|operator new}} and {{lc|operator delete}} to allocate memory.

=== Return value ===

Returns a pointer {{tt|p}} to a static storage duration object of a type derived from {{lc|std::experimental::pmr::memory_resource}}, with the following properties:
* its {{tt|allocate()}} function uses {{tt|::operator new}} to allocate memory;
* its {{tt|deallocate()}} function uses {{tt|::operator delete}} to deallocate memory;
* for any {{tt|memory_resource}} {{tt|r}}, {{tt|p-&gt;is_equal(r)}} returns {{tt|&amp;r {{==}} p}}.

The same value is returned every time this function is called.

=== Exceptions ===
{{unreviewed noexcept}}</text>
      <sha1>h7y17wyv9w0krl6lltpqkw0jnvcsh40</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/nonesuch</title>
    <ns>0</ns>
    <id>14100</id>
    <revision>
      <id>78468</id>
      <timestamp>2015-05-23T21:16:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Created page with &quot;{{cpp/experimental/title|nonesuch}} {{cpp/experimental/lib_extensions_2/navbar}} {{dcl begin}} {{dcl header | experimental/type_traits}} {{dcl | since=libfund_ts_2 |1= struct ...&quot;</comment>
      <text xml:space="preserve" bytes="577">{{cpp/experimental/title|nonesuch}}
{{cpp/experimental/lib_extensions_2/navbar}}
{{dcl begin}}
{{dcl header | experimental/type_traits}}
{{dcl | since=libfund_ts_2 |1=
struct nonesuch {
    nonesuch() = delete;
    ~nonesuch() = delete;
    nonesuch(nonesuch const&amp;) = delete;
    void operator=(nonesuch const&amp;) = delete;
};
}}
{{dcl end}}

{{tt|std::experimental::nonesuch}} is a class type used by {{ltt|cpp/experimental/is_detected|std::experimental::detected_t}} to indicate detection failure. 

===Notes===
{{tt|nonesuch}} is not constructible, destructible, or copyable.</text>
      <sha1>j7bircx4cb9x2r8ii6zca6r55vrupvs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/not fn</title>
    <ns>0</ns>
    <id>14196</id>
    <revision>
      <id>84480</id>
      <parentid>83681</parentid>
      <timestamp>2016-03-18T17:12:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merged box for these guys too</comment>
      <text xml:space="preserve" bytes="3203">{{cpp/experimental/title|not_fn}}
{{cpp/experimental/lib_extensions_2/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  {{ltt|cpp/utility/functional/not_fn|std::not_fn}} {{mark since c++17}} }}
{{dcl begin}}
{{dcl header | experimental/functional }}
{{dcl | since=libfund_ts_2 |
template&lt; class F&gt;
/*unspecified*/ not_fn( F&amp;&amp; f );
}}
{{dcl end}}

Creates a forwarding call wrapper that returns the complement of the callable object it holds.

=== Parameters ===
{{par begin}}
{{par | f | the object from which the {{concept|Callable}} object held by the wrapper is constructed }}
{{par end}}

===Return value===
Let {{tt|FD}} be {{c|std::decay_t&lt;F&gt;}} and {{tt|fd}} be an lvalue of type {{tt|FD}} constructed from {{c|std::forward&lt;F&gt;(f)}}. 

{{tt|not_fn}} returns a forwarding call wrapper {{tt|fn}} of unspecified type such that {{c|fn(a1, a2, ..., aN)}} is equivalent to {{c|!INVOKE(fd, a1, ..., aN)}}, where {{tt|INVOKE}} is the operation described in {{concept|Callable}}.

The returned call wrapper is always {{concept|MoveConstructible}}, and is {{concept|CopyConstructible}} if FD is {{concept|CopyConstructible}}.

=== Remarks ===
If {{tt|fd}} is not {{concept|Callable}}, or {{c|std::is_constructible&lt;FD, F&gt;::value}} is not {{tt|true}}, the behavior is undefined.

=== Exceptions ===
Throws no exceptions, unless the construction of {{tt|fd}} throws.

=== Possible implementation ===
{{eq fun|1=
namespace detail {
    template&lt;class F&gt;
    struct not_fn_t {
        F f;
        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args)
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }

        // cv-qualified overload for QoI
        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args) const
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }

        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args) volatile
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }
        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args) const volatile
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }
    };
}

template&lt;class F&gt;
detail::not_fn_t&lt;std::decay_t&lt;F&gt;&gt; not_fn(F&amp;&amp; f) { return { std::forward&lt;F&gt;(f) }; }
}}

=== Notes ===
{{tt|not_fn}} is intended to replace the C++03-era negators {{lc|std::not1}} and {{lc|std::not2}}.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc not_fn}}
{{dsc end}}</text>
      <sha1>7p8fr4rr7p4fha7ukxnis00edoc6tdi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/null memory resource</title>
    <ns>0</ns>
    <id>14350</id>
    <revision>
      <id>91912</id>
      <parentid>79836</parentid>
      <timestamp>2017-03-31T20:01:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="799">{{cpp/experimental/pmr/title|null_memory_resource}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
memory_resource* null_memory_resource();
}}

Returns a pointer to a {{tt|memory_resource}} that doesn't perform any allocation.

=== Return value ===

Returns a pointer {{tt|p}} to a static storage duration object of a type derived from {{lc|std::experimental::pmr::memory_resource}}, with the following properties:
* its {{tt|allocate()}} function always throws {{lc|std::bad_alloc}};
* its {{tt|deallocate()}} function has no effect;
* for any {{tt|memory_resource}} {{tt|r}}, {{tt|p-&gt;is_equal(r)}} returns {{tt|&amp;r {{==}} p}}.

The same value is returned every time this function is called.

=== Exceptions ===
{{unreviewed noexcept}}</text>
      <sha1>1dkac8aee5y1jh42vgnmou6d4xmk5wx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr</title>
    <ns>0</ns>
    <id>14220</id>
    <revision>
      <id>85265</id>
      <parentid>82750</parentid>
      <timestamp>2016-04-12T21:52:27Z</timestamp>
      <contributor>
        <ip>82.240.132.144</ip>
      </contributor>
      <text xml:space="preserve" bytes="2334">{{cpp/experimental/title|observer_ptr}}
{{cpp/experimental/lib extensions 2/observer ptr/navbar}}
{{dcl begin}}
{{dcl header|experimental/memory}}
{{dcl | since=libfund_ts_2 || 1=
template&lt; class W &gt;
class observer_ptr;
}}
{{dcl end}}

{{tt|std::experimental::observer_ptr}} is a non-owning pointer, or ''observer''. The observer stores a pointer to a second object, known as the ''watched object''.  An {{tt|observer_ptr}} may also have no watched object. 

An observer is not responsible in any way for the watched object; there is no inherent relationship between an observer and the object it watches.

It is intended as a near drop-in replacement for raw pointer types, with the advantage that, as a vocabulary type, it indicates its intended use without need for detailed analysis by code readers.

Specializations of {{tt|observer_ptr}} satisfy the requirements of {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

{{par begin}}
{{par hreq}}
{{par req | {{tt|W}} shall not be a reference type, but may be an incomplete type. }}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|element_type}} | {{tt|W}}, the type of the object watched by this {{tt|observer_ptr}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc constructor}}
{{dsc inc | cpp/experimental/observer_ptr/dsc destructor}}
{{dsc inc | cpp/experimental/observer_ptr/dsc operator{{=}}}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/experimental/observer_ptr/dsc release}}
{{dsc inc | cpp/experimental/observer_ptr/dsc reset}}
{{dsc inc | cpp/experimental/observer_ptr/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/experimental/observer_ptr/dsc get}}
{{dsc inc | cpp/experimental/observer_ptr/dsc operator bool}}
{{dsc inc | cpp/experimental/observer_ptr/dsc operator*}}

{{dsc h2 | Conversions}}
{{dsc inc | cpp/experimental/observer_ptr/dsc operator pointer}}

{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc make_observer}}
{{dsc inc | cpp/experimental/observer_ptr/dsc operator_cmp}}
{{dsc inc | cpp/experimental/observer_ptr/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc hash}}
{{dsc end}}

===Example===
{{example |
 | code=
 | output=
}}</text>
      <sha1>75sw7ugiho6916m3k3y7a5fh1zyd6jh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/get</title>
    <ns>0</ns>
    <id>14237</id>
    <revision>
      <id>91382</id>
      <parentid>82763</parentid>
      <timestamp>2017-03-31T19:41:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="564">{{cpp/experimental/observer_ptr/title|get}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}
{{ddcl | since=libfund_ts_2 | 1=
constexpr element_type* get() const;
}}

Returns a pointer to the watched object or {{c|nullptr}} if no object is watched.

===Parameters===
(none)

===Return value===
Pointer to the watched object or {{c|nullptr}} if no object is watched.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc release}}
{{dsc end}}</text>
      <sha1>cw7qg5yhwftmwhlx75gjkmbj74o51le</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/hash</title>
    <ns>0</ns>
    <id>14247</id>
    <revision>
      <id>79441</id>
      <timestamp>2015-07-06T08:34:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="779">{{cpp/title | hash&lt;small&gt;(std::experimental::observer_ptr)&lt;/small&gt;}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}
{{dcl begin}}
{{dcl header|experimental/memory}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct hash&lt;std::experimental::observer_ptr&lt;T&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for {{c|std::experimental::observer_ptr&lt;T&gt;}} allows users to obtain hashes of objects of type {{c|std::experimental::observer_ptr&lt;T&gt;}}.

For a given {{c|std::experimental::observer_ptr&lt;T&gt; p}}, this specialization ensures that  {{c|1=std::hash&lt;std::experimental::observer_ptr&lt;T&gt;&gt;()(p) == std::hash&lt;T*&gt;()(p.get())}}.

===Example===
{{example
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}</text>
      <sha1>hp33bo926lx0g6nohne1q3oyk9wd4ov</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/make observer</title>
    <ns>0</ns>
    <id>14243</id>
    <revision>
      <id>91349</id>
      <parentid>79434</parentid>
      <timestamp>2017-03-31T19:40:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="714">{{cpp/experimental/title|make_observer}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}
{{dcl begin}}
{{dcl header | experimental/memory}}
{{dcl | since=libfund_ts_2 | 1=
template &lt;class W&gt;
std::experimental::observer_ptr&lt;W&gt; make_observer(W* p); 
}}
{{dcl end}}

Creates an {{tt|observer_ptr}} object, deducing the template argument from the type of the function argument.

===Parameters===
{{par begin}}
{{par | p | pointer to the object to be watched by the {{tt|observer_ptr}} object }}
{{par end}}

===Return value===
A {{tt|observer_ptr}} object, created as if by {{c|std::experimental::observer_ptr&lt;W&gt;(p)}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1>niyz092adeu6vimmsgqxj5p95r4xe5h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/observer ptr</title>
    <ns>0</ns>
    <id>14245</id>
    <revision>
      <id>91608</id>
      <parentid>82765</parentid>
      <timestamp>2017-03-31T19:51:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1319">{{cpp/experimental/observer_ptr/title|observer_ptr}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=libfund_ts_2 | 1= 
constexpr observer_ptr();
constexpr observer_ptr( nullptr_t );
}}
{{dcl | num=2 | since=libfund_ts_2 | 1= 
explicit observer_ptr( element_type* p );
}}
{{dcl | num=3 | since=libfund_ts_2 | 1= 
template&lt;class W2&gt;
observer_ptr( observer_ptr&lt;W2&gt; other );
}}
{{dcl | num=4 | since=libfund_ts_2 | notes={{mark implicit}} | 1= 
observer_ptr( const observer_ptr&amp; other ) = default;
}}
{{dcl | num=5 | since=libfund_ts_2 | notes={{mark implicit}} | 1= 
observer_ptr( observer_ptr&amp;&amp; other ) = default;
}}
{{dcl end}}

@1@ Constructs an {{tt|observer_ptr}} that has no corresponding watched object.
@2@ Constructs an {{tt|observer_ptr}} that watches {{tt|p}}.
@3@ Constructs an {{tt|observer_ptr}} that watches {{tt|other.get()}}. This constructor does not participate in overload resolution unless {{tt|W2*}} is convertible to {{tt|element_type*}}.
@4-5@ Implicitly declared copy and move constructors. Constructs an {{tt|observer_ptr}} that watches {{tt|other.get()}}.

===Parameters===
{{par begin}}
{{par | p | a pointer to an object to watch}}
{{par | other | another {{tt|observer_ptr}} to copy from }}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>krl7r0u3ooh2vfbgunx2yo9j3alwm2l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/operator bool</title>
    <ns>0</ns>
    <id>14236</id>
    <revision>
      <id>91456</id>
      <parentid>79423</parentid>
      <timestamp>2017-03-31T19:45:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="604">{{cpp/experimental/observer_ptr/title|operator bool}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{ddcl | since=libfund_ts_2| 1=
constexpr explicit operator bool() const;
}}

Checks whether {{c|*this}} has an associated watched object, i.e. whether {{c|1=get() != nullptr}}.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} has an associated watched object, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc get}}
{{dsc end}}</text>
      <sha1>r3k39661l1rxtf1wg6k432s4c8y6lp8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/operator cmp</title>
    <ns>0</ns>
    <id>14242</id>
    <revision>
      <id>91626</id>
      <parentid>79433</parentid>
      <timestamp>2017-03-31T19:52:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2251">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::experimental::observer_ptr)&lt;/small&gt;}}
{{cpp/experimental/lib extensions 2/observer ptr/navbar}}

{{dcl begin}}
{{dcl | since=libfund_ts_2 | num=1 | 1=
template&lt;class W1, class W2&gt;
bool operator==(const observer_ptr&lt;W1&gt;&amp; p1, const observer_ptr&lt;W2&gt;&amp; p2);
}}
{{dcl | since=libfund_ts_2 | num=2 | 1=
template&lt;class W1, class W2&gt;
bool operator!=(const observer_ptr&lt;W1&gt;&amp; p1, const observer_ptr&lt;W2&gt;&amp; p2);
}}
{{dcl | since=libfund_ts_2 | num=3 | 1=
template&lt;class W&gt;
bool operator==(const observer_ptr&lt;W&gt;&amp; p, std::nullptr_t);
}}
{{dcl | since=libfund_ts_2 | num=4 | 1=
template&lt;class W&gt;
bool operator==(std::nullptr_t, const observer_ptr&lt;W&gt;&amp; p);
}}
{{dcl | since=libfund_ts_2 | num=5 | 1=
template&lt;class W&gt;
bool operator!=(const observer_ptr&lt;W&gt;&amp; p, std::nullptr_t);
}}
{{dcl | since=libfund_ts_2 | num=6 | 1=
template&lt;class W&gt;
bool operator!=(std::nullptr_t, const observer_ptr&lt;W&gt;&amp; p);
}}
{{dcl | since=libfund_ts_2 | num=7 | 1=
template&lt;class W1, class W2&gt;
bool operator&lt;(const observer_ptr&lt;W1&gt;&amp; p1, const observer_ptr&lt;W2&gt;&amp; p2);
}}
{{dcl | since=libfund_ts_2 | num=8 | 1=
template&lt;class W1, class W2&gt;
bool operator&gt;(const observer_ptr&lt;W1&gt;&amp; p1, const observer_ptr&lt;W2&gt;&amp; p2);
}}
{{dcl | since=libfund_ts_2 | num=9 | 1=
template&lt;class W1, class W2&gt;
bool operator&lt;=(const observer_ptr&lt;W1&gt;&amp; p1, const observer_ptr&lt;W2&gt;&amp; p2);
}}
{{dcl | since=libfund_ts_2 | num=10 | 1=
template&lt;class W1, class W2&gt;
bool operator&gt;=(const observer_ptr&lt;W1&gt;&amp; p1, const observer_ptr&lt;W2&gt;&amp; p2);
}}
{{dcl end}}

Compares the pointer values of two {{tt|observer_ptr}}s, or a {{tt|observer_ptr}} and {{c|nullptr}}.

@1-2@ Equality comparison for two {{tt|observer_ptr}}s

@3-6@ Equality comparison for an {{tt|observer_ptr}} and {{c|nullptr}}.

@7-10@ Ordered comparison for two {{tt|observer_ptr}}s

===Parameters===
{{par begin}}
{{par | p, p1, p2 | {{tt|observer_ptr}}s to compare }}
{{par end}} 

===Return value===
1) {{c|p1.get() {{==}} p2.get()}}

2) {{c|!(p1 {{==}} p2)}}

3-4) {{c|!p}}

5-6) {{c|(bool)p}}

7) {{c|std::less&lt;W3&gt;()(p1.get(), p2.get())}}, where {{tt|W3}} is the composite pointer type of {{tt|W1*}} and {{tt|W2*}}

8) {{c|p2 &lt; p1}}

9) {{c|!(p2 &lt; p1)}}

10) {{c|!(p1 &lt; p2)}}

===Exceptions===
3-6) {{unreviewed noexcept}}</text>
      <sha1>sh5kz3leiu7osfpw1nwix4ggivtv5v5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/operator pointer</title>
    <ns>0</ns>
    <id>14244</id>
    <revision>
      <id>91366</id>
      <parentid>82760</parentid>
      <timestamp>2017-03-31T19:41:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="557">{{cpp/experimental/observer_ptr/title|operator element_type*}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{ddcl | since=libfund_ts_2| 1=
constexpr explicit operator element_type*() const;
}}

Provides an explicit conversion to the type of the stored pointer.

===Parameters===
(none)

===Return value===
A pointer to the watched object, i.e., {{c|get()}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc get}}
{{dsc end}}</text>
      <sha1>n1tlm7eaw3faye1wvi6j5j7djkjd5xg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/operator*</title>
    <ns>0</ns>
    <id>14238</id>
    <revision>
      <id>91493</id>
      <parentid>82766</parentid>
      <timestamp>2017-03-31T19:47:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="922">{{cpp/experimental/observer_ptr/title|operator*|operator-&gt;}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{dcl begin}}
{{dcl | since=libfund_ts_2 | num=1 | 1=
constexpr std::add_lvalue_reference_t&lt;element_type&gt; operator*() const;
}}
{{dcl | since=libfund_ts_2| num=2 | 1=
constexpr element_type* operator-&gt;() const;
}}
{{dcl end}}

{{tt|operator*}} and {{tt|operator-&gt;}} provide access to the object watched by {{c|*this}}.

The behavior of {{tt|operator*}} is undefined if {{c|get() {{==}} nullptr}}.

===Parameters===
(none)

===Return value===
1) Returns the object watched by {{c|*this}}, equivalent to {{c|*get()}}.

2) Returns a pointer to the object watched by {{c|*this}}, i.e. {{c|get()}}.

===Exceptions===
1) Throws nothing.

2) {{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc get}}
{{dsc end}}</text>
      <sha1>9n0x7obo40jgb96h7oxs37tzuanlba3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/release</title>
    <ns>0</ns>
    <id>14239</id>
    <revision>
      <id>91905</id>
      <parentid>82762</parentid>
      <timestamp>2017-03-31T20:01:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="721">{{cpp/experimental/observer_ptr/title|release}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{ddcl | since=libfund_ts_2 | 1=
constexpr element_type* release();
}}

Stop watching the watched object, if any. {{lc|get()}} returns {{c|nullptr}} after the call.

===Parameters===
(none)

===Return value===
A pointer to the previously watched object, or {{c|nullptr}} if there was no watched object, i.e. the value which would be returned by {{lc|get()}} before the call.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc get}}
{{dsc inc | cpp/experimental/observer_ptr/dsc reset}}
{{dsc end}}</text>
      <sha1>1oamv4kmfq82jwguhyrmd1y65tuvncr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/reset</title>
    <ns>0</ns>
    <id>14240</id>
    <revision>
      <id>91548</id>
      <parentid>82764</parentid>
      <timestamp>2017-03-31T19:49:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="580">{{cpp/experimental/observer_ptr/title|reset}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{ddcl | since=libfund_ts_2 | 1=
constexpr void reset(element_type* p = nullptr);
}}

Set {{tt|*this}} to watch the object pointed to by {{tt|p}}. {{lc|get()}} returns {{tt|p}} after the call.

===Parameters===
{{par begin}}
{{par | ptr | pointer to a new object to watch}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/observer_ptr/dsc release}}
{{dsc end}}</text>
      <sha1>slcn6efb4mhuivfuyhsn0qwowhpfjj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/swap</title>
    <ns>0</ns>
    <id>14241</id>
    <revision>
      <id>91506</id>
      <parentid>79432</parentid>
      <timestamp>2017-03-31T19:48:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="602">{{cpp/experimental/observer_ptr/title|swap}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{ddcl | since=libfund_ts_2 | 1=
constexpr void swap(observer_ptr&amp; other);
}}

Swaps the watched object of {{tt|*this}} and another {{c|observer_ptr}} object {{tt|other}}, by invoking {{c|swap}} on the stored pointers of {{tt|*this}} and {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another {{c|observer_ptr}} object to swap the watched object with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}</text>
      <sha1>qpp2y8pzozgm2d9evyn3bzoicff3sad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/observer ptr/swap2</title>
    <ns>0</ns>
    <id>14246</id>
    <revision>
      <id>91347</id>
      <parentid>79527</parentid>
      <timestamp>2017-03-31T19:40:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="747">{{cpp/experimental/title | swap&lt;small&gt;(std::experimental::observer_ptr)&lt;/small&gt;}}
{{cpp/experimental/lib extensions 2/observer_ptr/navbar}}

{{ddcl | since=libfund_ts_2 |
template&lt; class W &gt;
void swap( observer_ptr&lt;W&gt;&amp; lhs, observer_ptr&lt;W&gt;&amp; rhs );
}}

Specializes the {{lc|swap}} algorithm for {{lc|std::experimental::observer_ptr}}. Swaps the pointers of {{tt|lhs}} and {{tt|rhs}}. Calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{tt|observer_ptr}}s whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/experimental/observer_ptr/dsc swap}}
{{dsc end}}</text>
      <sha1>hr3w18leh0he3q6s89vsign04jq6j9o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional</title>
    <ns>0</ns>
    <id>10061</id>
    <revision>
      <id>84116</id>
      <parentid>80574</parentid>
      <timestamp>2016-03-15T14:49:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note about merge to c++17</comment>
      <text xml:space="preserve" bytes="3909">{{cpp/experimental/title|optional}}
{{cpp/experimental/optional/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  {{ltt|cpp/utility/optional|std::optional}} {{mark since c++17}} }}

{{ddcl | header=experimental/optional | since=libfund_ts |
template&lt; class T &gt;
class optional;
}}

The class template {{tt|std::experimental::optional}} manages an ''optional'' contained value, i.e. a value that may or may not be present.

A common use case for {{tt|optional}} is the return value of a function that may fail. As opposed to other approaches, such as {{c|std::pair&lt;T,bool&gt;}}, {{tt|optional}} handles expensive to construct objects well and is more readable, as the intent is expressed explicitly.

Any instance of {{tt|optional&lt;T&gt;}} at any given point in time either ''contains a value'' or ''does not contain a value''.

If an {{tt|optional&lt;T&gt;}} ''contains a value'', the value is guaranteed to be allocated as part of the {{tt|optional}} object footprint, i.e. no dynamic memory allocation ever takes place. Thus, an {{tt|optional}} object models an object, not a pointer, even though the {{lc|operator*()}} and {{lc|operator-&gt;()}} are defined.

When an object of type optional&lt;T&gt; is [[cpp/language/implicit_cast|contextually converted to bool]], the conversion returns {{c|true}} if the object ''contains a value'' and {{c|false}} if it ''does not contain a value''.

The {{tt|optional}} object ''contains a value'' in the following conditions:

* The object is initialized with a value of type {{tt|T}}
* The object is assigned from another {{tt|optional}} that ''contains a value''.

The object ''does not contain a value'' in the following conditions:

* The object is default-initialized.
* The object is initialized with a value of {{lc|std::experimental::nullopt_t}} or an  {{tt|optional}} object that ''does not contain a value''.
* The object is assigned from a value of {{lc|std::experimental::nullopt_t}} or from an {{tt|optional}} that ''does not contain a value''

===Template parameters===
{{par begin}}
{{par | T | the type of the value to manage initialization state for. The type must meet the requirements of {{concept|Destructible}} }}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc constructor}}
{{dsc inc | cpp/experimental/optional/dsc destructor}}
{{dsc inc | cpp/experimental/optional/dsc operator{{=}}}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/experimental/optional/dsc operator*}}
{{dsc inc | cpp/experimental/optional/dsc operator bool}}
{{dsc inc | cpp/experimental/optional/dsc value}}
{{dsc inc | cpp/experimental/optional/dsc value_or}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/experimental/optional/dsc swap}}
{{dsc inc | cpp/experimental/optional/dsc emplace}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Definition}}
{{dsc | {{tt|val}} {{mark|private}} | pointer to the contained value (which points at a data member of the same object), the name is for exposition only}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc operator_cmp}}
{{dsc inc | cpp/experimental/optional/dsc make_optional}}
{{dsc inc | cpp/experimental/optional/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc hash}}
{{dsc inc | cpp/experimental/optional/dsc nullopt_t}}
{{dsc inc | cpp/experimental/optional/dsc in_place_t}}
{{dsc inc | cpp/experimental/optional/dsc bad_optional_access}}
{{dsc end}}

===Helper objects===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc nullopt}}
{{dsc inc | cpp/experimental/optional/dsc in_place}}
{{dsc end}}</text>
      <sha1>0jj58h12kt2wrjm0wtk0acerg97pum2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/bad optional access</title>
    <ns>0</ns>
    <id>10106</id>
    <revision>
      <id>80194</id>
      <parentid>80191</parentid>
      <timestamp>2015-07-31T14:54:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>updates</comment>
      <text xml:space="preserve" bytes="566">{{cpp/title|n=experimental::|bad_optional_access}}
{{cpp/experimental/optional/navbar}}
{{ddcl | header=experimental/optional | since=libfund_ts |
class bad_optional_access;
}}

Defines a type of object to be thrown by {{ltt|cpp/experimental/optional/value|std::experimental::optional::value}} when accessing an optional object that does not contain a value.

{{inheritance diagram/std-bad_optional_access}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/bad_optional_access/dsc constructor}}
{{dsc end}}

{{cpp/error/exception/inherit}}</text>
      <sha1>2yl1gpmr1n5ylfsww87p5gvnvdzhc4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/emplace</title>
    <ns>0</ns>
    <id>10087</id>
    <revision>
      <id>78317</id>
      <parentid>78308</parentid>
      <timestamp>2015-05-16T06:22:29Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1634">{{cpp/experimental/optional/title|emplace}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 1=
template&lt; class... Args &gt; 
void emplace( Args&amp;&amp;... args );
}}
{{dcl | since=libfund_ts | 1=
template&lt; class U, class... Args &gt; 
void emplace( std::initializer_list&lt;U&gt; ilist, Args&amp;&amp;... args );
}}
{{dcl end}}

Constructs the contained value in-place. If {{c|*this}} already contains a value before the call, the contained value is destroyed by calling its destructor.

@1@ Initializes the contained value by [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) with {{c|std::forward&lt;Args&gt;(args)...}} as parameters.

@2@ Initializes the contained value by calling its constructor with {{c|ilist, std::forward&lt;Args&gt;(args)...}} as parameters. {{cpp/enable if|{{c|std::is_constructible&lt;T, std::initializer_list&lt;U&gt;&amp;, Args&amp;&amp;...&gt;::value}} is {{c|true}}}}.

===Parameters===
{{par begin}}
{{par | args... | the arguments to pass to the constructor}}
{{par | ilist | the initializer list to pass to the constructor}}
{{par hreq}}
{{par req | {{tt|T}} must be constructible from {{tt|Args...}} | overload=1}}
{{par req | {{tt|T}} must be constructible from {{lc|std::initializer_list}} and {{tt|Args...}} | overload=2}}
{{par end}}

===Return value===
(none)

===Exceptions===
Any exception thrown by the selected constructor of {{tt|T}}. If an exception is thrown, {{c|*this}} does not contain a value after this call (the previously contained value, if any, had been destroyed).

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>sya31cddkvxjjmu3brcznehffvnh99x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/hash</title>
    <ns>0</ns>
    <id>10098</id>
    <revision>
      <id>78311</id>
      <parentid>69018</parentid>
      <timestamp>2015-05-16T04:25:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+example</comment>
      <text xml:space="preserve" bytes="1226">{{cpp/title|hash &lt;small&gt;&lt;std::experimental::optional&gt;&lt;/small&gt;}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl header | experimental/optional}}
{{dcl | since=libfund_ts | 1=
template&lt;class T&gt;
struct hash&lt;std::experimental::optional&lt;T&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for the {{lc|std::experimental::optional}} class allows users to obtain hashes of the values contained in {{tt|optional}} objects.

===Template parameters===
{{par begin}}
{{par | T | the type of the value contained in {{tt|optional}} object. The specialization {{c|std::hash&lt;T&gt;}} must meet the requirements of class template {{tt|hash}}.}}
{{par end}}

===Example===
{{example |
 | code=
#include &lt;experimental/optional&gt;
#include &lt;unordered_set&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std::literals;
int main()
{
    // hash&lt;optional&gt; makes it possible to use unordered_set
    std::unordered_set&lt;std::experimental::optional&lt;std::string&gt;&gt; s = {
            &quot;abc&quot;s, std::experimental::nullopt, &quot;def&quot;s
    };

    for(const auto&amp; o : s)
        std::cout &lt;&lt; o.value_or(&quot;(null)&quot;) &lt;&lt; ' ';
}
|p=true
| output=
def abc (null)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}</text>
      <sha1>rld9ntn8tivgyl6pvyy0hnvatp1e78f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/in place</title>
    <ns>0</ns>
    <id>10104</id>
    <revision>
      <id>80562</id>
      <parentid>80559</parentid>
      <timestamp>2015-08-20T21:08:08Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Part of optional class, which is experimental.</comment>
      <text xml:space="preserve" bytes="595">{{cpp/title|n=experimental::|in_place}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl header | experimental/optional}}
{{dcl | since= libfund_ts |1=
constexpr in_place_t in_place{};
}}
{{dcl end}}

{{tt|std::experimental::in_place}} is a constant of type {{c|std::experimental::in_place_t}} that is used to disambiguate the overloads of constructors and member functions of that take arguments (possibly a parameter pack) for in-place construction of some value.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc in_place_t}}
{{dsc inc | cpp/utility/dsc optional}}
{{dsc end}}</text>
      <sha1>7nydfx52sxmqudybkj72i95plq9p5j7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/in place t</title>
    <ns>0</ns>
    <id>10101</id>
    <revision>
      <id>80573</id>
      <parentid>80561</parentid>
      <timestamp>2015-08-20T21:49:50Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Fixed navbar for experimental optional.</comment>
      <text xml:space="preserve" bytes="542">{{cpp/title|n=experimental::|in_place_t}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl header | experimental/optional}}
{{dcl | since=libfund_ts |1=
struct in_place_t {};
}}
{{dcl end}}

{{tt|std::experimental::in_place_t}} is an empty class type used to disambiguate the overloads of constructors and member functions of that take arguments (possibly a parameter pack) for in-place construction of some value.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc in_place}}
{{dsc inc | cpp/utility/dsc optional}}
{{dsc end}}</text>
      <sha1>3enpoy3ci02xv01693qjkks9ku5tdk1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/make optional</title>
    <ns>0</ns>
    <id>10090</id>
    <revision>
      <id>79681</id>
      <parentid>74105</parentid>
      <timestamp>2015-07-21T10:33:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="744">{{cpp/experimental/title|make_optional}}
{{cpp/experimental/optional/navbar}}
{{ddcl | header=experimental/optional | since=libfund_ts | 1=
template&lt; class T &gt; 
constexpr optional&lt;typename std::decay&lt;T&gt;::type&gt; 
    make_optional( T&amp;&amp; value );
}}

Creates an optional object from {{tt|value}}. Effectively calls 
{{cc|optional&lt;typename std::decay&lt;T&gt;::type&gt;(std::forward&lt;T&gt;(value))}}

===Parameters===
{{par begin}}
{{par | value | the value to construct optional object with}}
{{par end}}

===Return value===
An optional object with {{tt|value}} as the contained value.

===Exceptions===
Throws any exception thrown by the constructor of {{tt|T}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc constructor}}
{{dsc end}}</text>
      <sha1>jgnqgbwrrkl3k4xco3a33htdowx77ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/nullopt</title>
    <ns>0</ns>
    <id>10103</id>
    <revision>
      <id>75965</id>
      <parentid>75963</parentid>
      <timestamp>2015-02-05T03:38:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>ts</comment>
      <text xml:space="preserve" bytes="480">{{cpp/title|n=experimental::|nullopt}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl header | experimental/optional}}
{{dcl | since=libfund_ts |1=
constexpr nullopt_t nullopt{/*unspecified*/};
}}
{{dcl end}}

{{tt|std::experimental::nullopt}} is a constant of type {{lc|std::experimental::nullopt_t}} that is used to indicate {{tt|optional}} type with uninitialized state. 

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc nullopt_t}}
{{dsc end}}</text>
      <sha1>5lqlitpzv93jt51moix4xt1d2v2b9o2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/nullopt t</title>
    <ns>0</ns>
    <id>10102</id>
    <revision>
      <id>79782</id>
      <parentid>75961</parentid>
      <timestamp>2015-07-26T01:38:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>{} is misleading</comment>
      <text xml:space="preserve" bytes="1063">{{cpp/title|n=experimental::|nullopt_t}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl header | experimental/optional}}
{{dcl | since=libfund_ts |1=
struct nullopt_t;
}}
{{dcl end}}

{{tt|std::experimental::nullopt_t}} is an empty class type used to indicate {{tt|optional}} type with uninitialized state. In particular, {{c|std::experimental::optional}} has a constructor with {{tt|nullopt_t}} as a single argument, which creates an optional that does not contain a value.

{{tt|std::experimental::nullopt_t}} must be a {{concept|LiteralType}} and cannot have a default constructor.

It must have a {{tt|constexpr}} constructor that takes some implementation-defined literal type.

===Notes===
{{tt|nullopt_t}} is not {{concept|DefaultConstructible}} to support both {{c|1=op = {};}} and {{c|1=op = nullopt;}} as the syntax for disengaging an optional object. 

A possible implementation of this class is
{{source|
struct nullopt_t {
    constexpr nullopt_t(int) {}
};
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc nullopt}}
{{dsc end}}</text>
      <sha1>517cyx55hm2dv4ibfr1oikf6xtw2nr4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/operator bool</title>
    <ns>0</ns>
    <id>10086</id>
    <revision>
      <id>91528</id>
      <parentid>78307</parentid>
      <timestamp>2017-03-31T19:49:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="417">{{cpp/experimental/optional/title|operator bool}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 1=
constexpr explicit operator bool() const;
}}
{{dcl end}}

Checks whether {{c|*this}} contains a value.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} contains a value, {{c|false}} if {{c|*this}} does not contain a value.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>k4x6b3t9l3kl675pdpg2f0bnqpukmdy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/operator cmp</title>
    <ns>0</ns>
    <id>10093</id>
    <revision>
      <id>91561</id>
      <parentid>82412</parentid>
      <timestamp>2017-03-31T19:50:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="6999">{{title|1=operator==, !=, &lt;, &lt;=, &gt;, &gt;={{small|(std::experimental::optional)}}}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl header | experimental/optional}}
{{dcl h | Compare two {{tt|optional}} objects}}
{{dcl | since=libfund_ts | num=1 | 1=
template&lt; class T &gt; 
constexpr bool operator==( const optional&lt;T&gt;&amp; lhs, const optional&lt;T&gt;&amp; rhs );
}}
{{dcl | since=libfund_ts | num=2 | 1=
template&lt; class T &gt; 
constexpr bool operator!=( const optional&lt;T&gt;&amp; lhs, const optional&lt;T&gt;&amp; rhs );
}}
{{dcl | since=libfund_ts | num=3 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;( const optional&lt;T&gt;&amp; lhs, const optional&lt;T&gt;&amp; rhs );
}}
{{dcl | since=libfund_ts | num=4 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;=( const optional&lt;T&gt;&amp; lhs, const optional&lt;T&gt;&amp; rhs );
}}
{{dcl | since=libfund_ts | num=5 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;( const optional&lt;T&gt;&amp; lhs, const optional&lt;T&gt;&amp; rhs );
}}
{{dcl | since=libfund_ts | num=6 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;=( const optional&lt;T&gt;&amp; lhs, const optional&lt;T&gt;&amp; rhs );
}}
{{dcl h | Compare an {{tt|optional}} object with a {{tt|nullopt}} }}
{{dcl | since=libfund_ts | num=7 | 1=
template&lt; class T &gt; 
constexpr bool operator==( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=libfund_ts | num=8 | 1=
template&lt; class T &gt; 
constexpr bool operator==( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=9 | 1=
template&lt; class T &gt; 
constexpr bool operator!=( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=libfund_ts | num=10 | 1=
template&lt; class T &gt; 
constexpr bool operator!=( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=11 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=libfund_ts | num=12 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=13 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;=( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=libfund_ts | num=14 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;=( std::nullopt_t, const optional&lt;T&gt;&amp; opt);
}}
{{dcl | since=libfund_ts | num=15 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=libfund_ts | num=16 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=17 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;=( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=libfund_ts | num=18 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;=( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl h | Compare an {{tt|optional}} object with a {{tt|T}} }}
{{dcl | since=libfund_ts | num=19 | 1=
template&lt; class T &gt; 
constexpr bool operator==( const optional&lt;T&gt;&amp; opt, const T&amp; value);
}}
{{dcl | since=libfund_ts | num=20 | 1=
template&lt; class T &gt; 
constexpr bool operator==( const T&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=21 | 1=
template&lt; class T &gt; 
constexpr bool operator!=( const optional&lt;T&gt;&amp; opt, const T&amp; value );
}}
{{dcl | since=libfund_ts | num=22 | 1=
template&lt; class T &gt; 
constexpr bool operator!=( const T&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=23 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;( const optional&lt;T&gt;&amp; opt, const T&amp; value );
}}
{{dcl | since=libfund_ts | num=24 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;( const T&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=25 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;=( const optional&lt;T&gt;&amp; opt, const T&amp; value );
}}
{{dcl | since=libfund_ts | num=26 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;=( const T&amp; value, const optional&lt;T&gt;&amp; opt);
}}
{{dcl | since=libfund_ts | num=27 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;( const optional&lt;T&gt;&amp; opt, const T&amp; value );
}}
{{dcl | since=libfund_ts | num=28 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;( const T&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=libfund_ts | num=39 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;=( const optional&lt;T&gt;&amp; opt, const T&amp; value );
}}
{{dcl | since=libfund_ts | num=30 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;=( const T&amp; value, const optional&lt;T&gt;&amp; opt );
}}

{{dcl end}}

Performs comparison operations on {{tt|optional}} objects.

@1-6@ Compares two {{tt|optional}} objects, {{tt|lhs}} and {{tt|rhs}}. The contained values are compared (using {{c|1=operator==}} for {{v|1-2}} and {{c|operator&lt;}} for {{v|3-6}}) only if both {{tt|lhs}} and {{tt|rhs}} contain values. Otherwise, 

::*{{tt|lhs}} is considered ''equal to'' {{tt|rhs}} if, and only if, both {{tt|lhs}} and {{tt|rhs}} do not contain a value.
::*{{tt|lhs}} is considered ''less than'' {{tt|rhs}} if, and only if, {{tt|rhs}} contains a value and {{tt|lhs}} does not.

@7-18@ Compares {{tt|opt}} with a {{tt|nullopt}}. Equivalent to (1-6) when comparing to an {{tt|optional}} that does not contain a value.

@19-30@ Compares {{tt|opt}} with a {{tt|value}}. The values are compared (using {{c|1=operator==}} for {{v|19-22}} and {{c|operator&lt;}} for {{v|23-30}}) only if {{tt|opt}} contains a value. Otherwise, {{tt|opt}} is considered ''less than'' {{tt|value}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs, opt | an {{tt|optional}} object to compare}}
{{par | value | value to compare to the contained value}}
{{par hreq}}
{{par req concept | T | EqualityComparable | overloads=1-2 }}
{{par end}}

===Return value===
@1@ If {{c|1=bool(lhs) != bool(rhs)}}, returns {{c|false}}
@@ Otherwise, if {{c|1=bool(lhs) == false}} (and so {{c|bool(rhs) {{==}} false}} as well), returns {{c|true}}
@@ Otherwise, returns {{c|1=*lhs == *rhs}}.

@2@ Returns {{c|1=!(lhs == rhs)}}

@3@ If {{c|1=bool(rhs) == false}} returns {{c|false}}
@@ Otherwise, if {{c|1=bool(lhs) == false}}, returns {{c|true}}
@@ Otherwise returns {{c|*x &lt; *y}}

@4@ Returns {{c|!(rhs &lt; lhs)}}
@5@ Returns {{c|rhs &lt; lhs}}
@6@ Returns {{c|!(lhs &lt; rhs)}}

@7-8@ Returns {{c|!opt}}.
@9-10@ Returns {{c|bool(opt)}}.
@11@ Returns {{c|false}}.
@12@ Returns {{c|bool(opt)}}.
@13@ Returns {{c|!opt}}.
@14@ Returns {{c|true}}.
@15@ Returns {{c|bool(opt)}}.
@16@ Returns {{c|false}}.
@17@ Returns {{c|true}}.
@18@ Returns {{c|!opt}}.

@19@ Returns {{c|1=bool(opt) ? *opt == value : false}}.
@20@ Returns {{c|1=bool(opt) ? value == *opt : false}}.
@21@ Returns {{c|1=bool(opt) ? !(*opt == value) : true}}.
@22@ Returns {{c|1=bool(opt) ? !(value == *opt) : true}}.
@23@ Returns {{c|1=bool(opt) ? *opt &lt; value  : true}}.
@24@ Returns {{c|1=bool(opt) ? value &lt; *opt  : false}}.
@25@ Returns {{c|1=!(opt &gt; value)}}.
@26@ Returns {{c|1=!(value &gt; opt)}}.
@27@ Returns {{c|1=bool(opt) ? value &lt; *opt  : false}}.
@28@ Returns {{c|1=bool(opt) ? *opt &lt; value  : true}}.
@29@ Returns {{c|1=!(opt &lt; value)}}.
@30@ Returns {{c|1=!(value &lt; opt)}}.

===Exceptions===
@1-6@ (none)

@7-18@ {{unreviewed noexcept}}

@19-30@ (none)</text>
      <sha1>lluqh7ovmm9r3m4ez81fq0rwvhw4uub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/operator*</title>
    <ns>0</ns>
    <id>10083</id>
    <revision>
      <id>79075</id>
      <parentid>79073</parentid>
      <timestamp>2015-06-22T21:44:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso/mention _or</comment>
      <text xml:space="preserve" bytes="1529">{{cpp/experimental/optional/title|operator-&gt;|operator*}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | num=1 | 1=
constexpr const T* operator-&gt;() const;
}}
{{dcl | since=libfund_ts | num=1 | 1=
constexpr T* operator-&gt;();
}}
{{dcl | since=libfund_ts | num=2 | 1=
constexpr const T&amp; operator*() const&amp;;
}}
{{dcl | since=libfund_ts | num=2 | 1=
constexpr T&amp; operator*() &amp;;
}}
{{dcl | since=libfund_ts | num=2 | 1=
constexpr const T&amp;&amp; operator*() const&amp;&amp;;
}}
{{dcl | since=libfund_ts | num=2 | 1=
constexpr T&amp;&amp; operator*() &amp;&amp;;
}}
{{dcl end}}

Accesses the contained value.

@1@ Returns a pointer to the contained value.

@2@ Returns a reference to the contained value.

The behavior is undefined if {{c|*this}} ''does not contain a value''

===Parameters===
(none)

===Return value===
Pointer or reference to the contained value.

===Exceptions===
(none)

===Notes===
This operator does not check whether the optional contains a value. If checked access is needed, {{lc|value()}} or {{lc|value_or()}} may be used.

===Example===
{{example|code=
#include &lt;experimental/optional&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std::literals;
int main()
{
    std::experimental::optional&lt;int&gt; opt1 = 1;
    std::cout &lt;&lt; *opt1 &lt;&lt; '\n';

    std::experimental::optional&lt;std::string&gt; opt2 = &quot;abc&quot;s;
    std::cout &lt;&lt; opt2-&gt;size() &lt;&lt; '\n';
}
|output=
1
3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc value}}
{{dsc inc | cpp/experimental/optional/dsc value_or}}
{{dsc end}}</text>
      <sha1>0zu7e43ia4ndtsr3wxdpup9eby7w7fe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/operator=</title>
    <ns>0</ns>
    <id>10082</id>
    <revision>
      <id>91511</id>
      <parentid>85252</parentid>
      <timestamp>2017-03-31T19:48:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3418">{{cpp/experimental/optional/title|operator{{=}}}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | num=1 | 1=
optional&amp; operator=( std::experimental::nullopt_t );
}}
{{dcl | since=libfund_ts | num=2 | 1=
optional&amp; operator=( const optional&amp; other );
}}
{{dcl | since=libfund_ts | num=3 | 1=
optional&amp; operator=( optional&amp;&amp; other );
}}
{{dcl | since=libfund_ts | num=4 | 1=
template&lt; class U &gt; 
optional&amp; operator=( U&amp;&amp; value );
}}
{{dcl end}}

Replaces contents of {{c|*this}} with the contents of {{tt|other}}

@1@ If {{c|*this}} contains a value before the call, the contained value is destroyed by calling its destructor as if by {{c|val-&gt;T::~T()}}. {{c|*this}} does not contain a value after this call.

@2-3@ Assigns the state of {{tt|other}}. &lt;br&gt;
* If both {{c|*this}} and {{tt|other}} do not contain a value, the function has no effect.
* If {{c|*this}} contains a value, but {{tt|other}} does not, then the contained value is destroyed by calling its destructor. {{c|*this}} does not contain a value after the call.
* If {{tt|other}} contains a value, then depending on whether {{c|*this}} contains a value, the contained value is either [[cpp/language/direct_initialization|direct-initialized]] or assigned from {{c|*other}} {{v|2}} or {{c|std::move(*other)}} {{v|3}}. Note that a moved-from optional still ''contains a value''.

@4@ Decay-only perfect-forwarded assignment: depending on whether {{c|*this}} contains a value before the call, the contained value is either direct-initialized from {{c|std::forward&lt;U&gt;(value)}} or assigned from {{c|std::forward&lt;U&gt;(value)}}. The function does not participate in overload resolution unless {{c|std::is_same&lt;std::decay_t&lt;U&gt;, T&gt;::value}} is {{c|true}}.

===Parameters===
{{par begin}}
{{par | other | another {{tt|optional}} object whose contained value to assign}}
{{par | value | value to assign to the contained value}}
{{par hreq}}
{{par req concept | T | CopyConstructible | CopyAssignable | overload=2 }}
{{par req concept | T | MoveConstructible | MoveAssignable | overload=3 }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{unreviewed noexcept}}

@2-4@ Throws any exception thrown by the constructor or assignment operator of {{tt|T}}. If an exception is thrown, the initialization state of {{c|*this}} (and of {{tt|other}} in case of (2) ) is unchanged, i.e. if the object contained a value, it still contains a value, and the other way round. The contents of {{tt|value}} and the contained values of {{c|*this}} and {{tt|other}} depend on the exception safety guarantees of the operation from which the exception originates (copy-constructor, move-assignment, etc.). &lt;br&gt;
{{v|3}} has the following {{tt|noexcept}} declaration: {{unreviewed noexcept|std::is_nothrow_move_assignable&lt;T&gt;::value &amp;&amp; std::is_nothrow_move_constructible&lt;T&gt;::value}}

===Notes===
An optional object {{tt|op}} may be turned into an empty optional with both {{c|1=op = {};}} and {{c|1=op = nullopt;}}.

===Example===
{{example|code=
#include &lt;experimental/optional&gt;
#include &lt;iostream&gt;
int main()
{
    std::experimental::optional&lt;const char*&gt; s1 = &quot;abc&quot;, s2; // constructor
    s2 = s1; // assignment
    s1 = &quot;def&quot;; // decaying assignment (U = char[4], T = const char*)
    std::cout &lt;&lt; *s2 &lt;&lt; ' ' &lt;&lt; *s1 &lt;&lt; '\n';
}
|output=
abc def
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc emplace}}
{{dsc end}}</text>
      <sha1>frcgfdwsinaw1n60v4ma6s1gyqy9f66</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/optional</title>
    <ns>0</ns>
    <id>10078</id>
    <revision>
      <id>91858</id>
      <parentid>85617</parentid>
      <timestamp>2017-03-31T20:00:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4633">{{cpp/experimental/optional/title|optional}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts |
constexpr optional();
constexpr optional( std::experimental::nullopt_t );
}}
{{dcl | num=2 | since=libfund_ts |
optional( const optional&amp; other );
}}
{{dcl | num=3 | since=libfund_ts |
optional( optional&amp;&amp; other );
}}
{{dcl | num=4 | since=libfund_ts |
constexpr optional( const T&amp; value );
}}
{{dcl | num=5 | since=libfund_ts |
constexpr optional( T&amp;&amp; value );
}}
{{dcl | num=6 | since=libfund_ts |
template&lt; class... Args &gt; 
constexpr explicit optional( std::experimental::in_place_t, Args&amp;&amp;... args );
}}
{{dcl | num=7 | since=libfund_ts |
template&lt; class U, class... Args &gt;
constexpr explicit optional( std::experimental::in_place_t,
                            std::initializer_list&lt;U&gt; ilist, 
                            Args&amp;&amp;... args );
}}
{{dcl end}}

Constructs a new {{tt|optional}} object.

@1@ Constructs the object that ''does not contain a value''.
@2@ Copy constructor: If {{tt|other}} contains a value, initializes the contained value as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|*other}}. If {{tt|other}} does not contain a value, constructs an object that ''does not contain a value''.
@3@ Move constructor: If {{tt|other}} contains a value, initializes the contained value as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|std::move(*other)}} and ''does not'' make {{tt|other}} empty: a moved-from optional still ''contains a value'', but the value itself is moved from. If {{tt|other}} does not contain a value, constructs an object that ''does not contain a value''.
@4@ Constructs an optional object that ''contains a value'', initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|value}}. This constructor is {{tt|constexpr}} if the constructor of {{tt|T}} selected by direct-initialization is {{tt|constexpr}}.
@5@ Constructs an optional object that ''contains a value'', initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|std::move(value)}}. This constructor is {{tt|constexpr}} if the constructor of {{tt|T}} selected by direct-initialization is {{tt|constexpr}}.
@6@ Constructs an optional object that ''contains a value'', initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} from the arguments {{c|std::forward&lt;Args&gt;(args)...}}
@7@ Constructs an optional object that ''contains a value'', initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} from the arguments {{c|ilist, std::forward&lt;Args&gt;(args)...}}. The function does not participate in the overload resolution if {{cc|1=std::is_constructible&lt;T, std::initializer_list&lt;U&gt;&amp;, Args&amp;&amp;...&gt;::value != true}}

===Parameters===
{{par begin}}
{{par | other | another {{tt|optional}} object whose contained value to copy}}
{{par | value | value to initialize the contained value with}}
{{par | args... | arguments to initialize the contained value with}}
{{par | ilist | initializer list to initialize the contained value with}}
{{par hreq}}
{{par req concept | T | CopyConstructible | overloads=2,4}}
{{par req concept | T | MoveConstructible | overloads=3,5}}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

@2@ Throws any exception thrown by the constructor of {{tt|T}}.

@3@ Throws any exception thrown by the constructor of {{tt|T}}. Has the following {{tt|noexcept}} declaration: {{unreviewed noexcept|std::is_nothrow_move_constructible&lt;T&gt;::value}}.

@4-7@ Throws any exception thrown by the constructor of {{tt|T}}.

===Example===
{{example|code=
#include &lt;experimental/optional&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
int main()
{
    std::experimental::optional&lt;int&gt; o1, // empty
                         o2 = 1, // init from rvalue
                         o3 = o2; // copy-constructor

    std::experimental::optional&lt;std::string&gt; o4(std::experimental::in_place,
                                                {'a', 'b', 'c'});

    std::cout &lt;&lt; *o2 &lt;&lt; ' ' &lt;&lt; *o3 &lt;&lt; ' ' &lt;&lt; *o4 &lt;&lt; '\n';
}
|output=
1 1 abc
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc make_optional}}
{{dsc end}}</text>
      <sha1>hlmbnyav5adc9nknv45l8rc0xsi4o0p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/swap</title>
    <ns>0</ns>
    <id>10088</id>
    <revision>
      <id>91707</id>
      <parentid>78309</parentid>
      <timestamp>2017-03-31T19:55:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1663">{{cpp/experimental/optional/title|swap}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 1=
void swap( optional&amp; other );
}}
{{dcl end}}

Swaps the contents with those of {{tt|other}}.

* If neither {{c|*this}} nor {{tt|other}} contain a value, the function has no effect.

* If only one of {{c|*this}} and {{tt|other}} contains a value (let's call this object {{tt|in}} and the other {{tt|un}}), the contained value of {{tt|un}} is [[cpp/language/direct_initialization|direct-initialized]] from {{c|std::move(*in)}}, followed by destruction of the contained value of {{tt|in}} as if by {{c|in.val-&gt;T::~T()}}. After this call, {{tt|in}} does not contain a value {{tt|un}} contains a value.

* If both {{c|*this}} and {{tt|other}} contain values, the contained values are exchanged by calling {{c|using std::swap; swap(**this, *other)}}. {{tt|T}} lvalues must satisfy {{concept|Swappable}}.

===Parameters===
{{par begin}}
{{par | other | the {{tt|optional}} object to exchange the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept|is_nothrow_move_constructible&lt;T&gt;::value &amp;&amp; 
           noexcept(swap(declval&lt;T&amp;&gt;(), declval&lt;T&amp;&gt;()))}}

In the case of thrown exception, the states of the contained values of {{c|*this}} and {{tt|other}} are determined by the exception safety guarantees of {{tt|swap}} of type {{tt|T}} or {{tt|T}}'s move constructor, whichever is called. For both {{c|*this}} and {{tt|other}}, if the object contained a value, it is left containing a value, and the other way round.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc swap2}}
{{dsc end}}</text>
      <sha1>bvi7scl0s8jrj0ktmmhg085s6l51mwy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/swap2</title>
    <ns>0</ns>
    <id>10089</id>
    <revision>
      <id>91896</id>
      <parentid>78319</parentid>
      <timestamp>2017-03-31T20:01:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="785">{{cpp/experimental/title | swap{{small|(std::experimental::optional)}}}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl header | experimental/optional}}
{{dcl | since=libfund_ts |
template&lt; class T &gt;
void swap( optional&lt;T&gt;&amp; lhs, optional&lt;T&gt;&amp; rhs );
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::experimental::optional}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{tt|optional}} objects whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept|lhs.swap(rhs)}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc swap}}
{{dsc end}}</text>
      <sha1>6u5uupj6z8e2o8vqabsbjjo5sghh1qq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/value</title>
    <ns>0</ns>
    <id>10084</id>
    <revision>
      <id>80198</id>
      <parentid>79074</parentid>
      <timestamp>2015-07-31T15:26:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>seealso exception, trivial example</comment>
      <text xml:space="preserve" bytes="1394">{{cpp/experimental/optional/title|value}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts | 1=
constexpr T&amp; value() &amp;;
constexpr const T &amp; value() const &amp;;
}}
{{dcl | num = 2| since=libfund_ts | 1=
constexpr T&amp;&amp; value() &amp;&amp;;
constexpr const T&amp;&amp; value() const &amp;&amp;;
}}
{{dcl end}}

Returns the contained value.
@1@ Equivalent to {{c|return bool(*this) ? *val : throw bad_optional_access();}}
@2@ Equivalent to {{c|return bool(*this) ? std::move(*val) : throw bad_optional_access();}}

===Parameters===
(none)

===Return value===
A reference to the contained value.

===Exceptions===
{{lc|std::experimental::bad_optional_access}} if {{c|*this}} does not contain a value.

===Notes===
The dereference operator {{lc|operator*()}} does not check if this optional contains a value, which may be more efficient than {{tt|value()}}.

===Example===
{{example|code=
#include &lt;experimental/optional&gt;
#include &lt;iostream&gt;
int main()
{
    std::experimental::optional&lt;int&gt; opt = {};

    try {
        int n = opt.value();
    } catch(const std::logic_error&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
|p=true
|output=
optional&lt;T&gt;::value: not engaged
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc value_or}}
{{dsc inc | cpp/experimental/optional/dsc operator*}}
{{dsc inc | cpp/experimental/optional/dsc bad_optional_access}}
{{dsc end}}</text>
      <sha1>msayk6enkpf67cp0l375t2pg664sxiu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/value or</title>
    <ns>0</ns>
    <id>10085</id>
    <revision>
      <id>87046</id>
      <parentid>78315</parentid>
      <timestamp>2016-07-21T20:01:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1566">{{cpp/experimental/optional/title|value_or}}
{{cpp/experimental/optional/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 1=
template&lt; class U &gt; 
constexpr T value_or( U&amp;&amp; default_value ) const&amp;;
}}
{{dcl | since=libfund_ts | 1=
template&lt; class U &gt; 
constexpr T value_or( U&amp;&amp; default_value ) &amp;&amp;;
}}
{{dcl end}}

Returns the contained value if {{c|*this}} has a value, otherwise returns {{tt|default_value}}.
@1@ Equivalent to {{c|bool(*this) ? **this : static_cast&lt;T&gt;(std::forward&lt;U&gt;(default_value))}}
@2@ Equivalent to {{c|bool(*this) ? std::move(**this) : static_cast&lt;T&gt;(std::forward&lt;U&gt;(default_value))}}
===Parameters===
{{par begin}}
{{par | default_value | the value to use in case {{tt|*this}} is empty}}
{{par hreq}}
{{par req concept | T | CopyConstructible | overload=1}}
{{par req concept | T | MoveConstructible | overload=2}}
{{par req | {{tt|U&amp;&amp;}} must be convertible to {{tt|T}}}}
{{par end}}

===Return value===
The current value if {{c|*this}} has a value, or {{tt|default_value}} otherwise.

===Exceptions===
Any exception thrown by the selected constructor of the return value {{tt|T}}.

===Example===
{{example|code=
#include &lt;experimental/optional&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

std::experimental::optional&lt;const char*&gt; maybe_getenv(const char* n)
{
    if(const char* x = std::getenv(n))
       return x;
    else
       return {};
}
int main()
{
     std::cout &lt;&lt; maybe_getenv(&quot;MYPWD&quot;).value_or(&quot;(none)&quot;) &lt;&lt; '\n';
}
|p=true
|output=
(none)
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/optional/dsc value}}
{{dsc end}}</text>
      <sha1>ri1xr299xurj05cf69zy7ph98wrp431</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/optional/~optional</title>
    <ns>0</ns>
    <id>10079</id>
    <revision>
      <id>78313</id>
      <parentid>78302</parentid>
      <timestamp>2015-05-16T05:32:38Z</timestamp>
      <contributor>
        <ip>124.163.209.104</ip>
      </contributor>
      <text xml:space="preserve" bytes="510">{{cpp/experimental/optional/title|~optional}}
{{cpp/experimental/optional/navbar}}
{{ddcl | since=libfund_ts |
~optional();
}}

If the object contains a value and the type {{tt|T}} is not trivially destructible (see {{lc|std::is_trivially_destructible}}), destroys the contained value by calling its destructor, as if by {{c|val-&gt;T::~T()}}.

Otherwise, does nothing.

===Notes===
If {{tt|T}} is trivially-destructible, then this destructor is also trivial, so {{tt|optional&lt;T&gt;}} is also trivially-destructible.</text>
      <sha1>kmaxv6zsu9qrandlr7p67w3tbljj0qq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ostream joiner</title>
    <ns>0</ns>
    <id>14207</id>
    <revision>
      <id>83849</id>
      <parentid>79389</parentid>
      <timestamp>2016-03-10T11:10:08Z</timestamp>
      <contributor>
        <ip>69.191.176.31</ip>
      </contributor>
      <text xml:space="preserve" bytes="2729">{{cpp/experimental/title|ostream_joiner}}
{{cpp/experimental/lib extensions 2/ostream joiner/navbar}}
{{dcl begin}}
{{dcl header | experimental/iterator}}
{{dcl | since=libfund_ts_2 | 1=
template&lt; class DelimT,
          class CharT = char,
          class Traits = std::char_traits&lt;CharT&gt;&gt;
class ostream_joiner;
}}
{{dcl end}}

{{tt|std::experimental::ostream_joiner}} is a single-pass {{concept|OutputIterator}} that writes successive objects into the {{lc|std::basic_ostream}} object for which it was constructed, using {{tt|operator&lt;&lt;}}, separated by a delimiter. The delimiter is written to the output stream between every two objects that are written. The write operation is performed when the iterator (whether dereferenced or not) is assigned to. Incrementing the {{tt|ostream_joiner}} is a no-op.

In a typical implementation, the only data members of {{tt|ostream_joiner}} are a pointer to the associated {{tt|std::basic_ostream}}, the delimiter, and a {{tt|bool}} member that indicates whether the next write is for the first element in the sequence.

Compared to {{lc|std::ostream_iterator}}, {{tt|ostream_joiner}} prints the delimiter sequence one fewer time, and is not templated on the type of the object to be printed.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}}}}
{{dsc | {{tt|ostream_type}} | {{c|std::basic_ostream&lt;CharT, Traits&gt;}}}}
{{dsc | {{tt|value_type}} | {{c|void}} }}
{{dsc | {{tt|difference_type}} | {{c|void}} }}
{{dsc | {{tt|pointer}} | {{c|void}} }}
{{dsc | {{tt|reference}} | {{c|void}} }}
{{dsc | {{tt|iterator_category}} | {{c|std::output_iterator_tag }} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/ostream_joiner/dsc constructor}}
{{dsc inc | cpp/experimental/ostream_joiner/dsc destructor}}
{{dsc inc | cpp/experimental/ostream_joiner/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/ostream_joiner/dsc operator*}}
{{dsc inc | cpp/experimental/ostream_joiner/dsc operator_arith}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/ostream_joiner/dsc make_ostream_joiner}}
{{dsc end}}

===Example===
{{example
 | 
 | code=
#include &lt;algorithm&gt;
#include &lt;experimental/iterator&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    int i[] = {1, 2, 3, 4, 5};
    std::copy(std::begin(i),
              std::end(i),
              std::experimental::make_ostream_joiner(std::cout, &quot;, &quot;));
}
 | output=
1, 2, 3, 4, 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc ostreambuf_iterator}}
{{dsc inc | cpp/iterator/dsc ostream_iterator}}
{{dsc inc | cpp/iterator/dsc istream_iterator}}
{{dsc end}}</text>
      <sha1>2lwdhs9ou8n2im01s101j07k9swyol7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ostream joiner/make ostream joiner</title>
    <ns>0</ns>
    <id>14208</id>
    <revision>
      <id>81292</id>
      <parentid>79386</parentid>
      <timestamp>2015-10-13T05:06:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>indent</comment>
      <text xml:space="preserve" bytes="915">{{cpp/experimental/title|make_ostream_joiner}}
{{cpp/experimental/lib extensions 2/navbar}}
{{dcl begin}}
{{dcl header | experimental/iterator}}
{{dcl | since=libfund_ts_2 | 1=
template &lt;class charT, class traits, class DelimT&gt;
std::experimental::ostream_joiner&lt;std::decay_t&lt;DelimT&gt;, charT, traits&gt; 
    make_ostream_joiner(std::basic_ostream&lt;charT, traits&gt;&amp; os, DelimT&amp;&amp; delimiter);
}}
{{dcl end}}

Creates an {{tt|ostream_joiner}} object, deducing the template arguments from the types of the function arguments.

===Parameters===
{{par begin}}
{{par | os | the {{tt|basic_ostream}} object that the iterator is to be associated to}}
{{par | delimiter | the delimiter }}
{{par end}}

===Return value===
A {{tt|ostream_joiner}} object, created as if by {{c|std::experimental::ostream_joiner&lt;std::decay_t&lt;DelimT&gt;, charT, traits&gt;(os, std::forward&lt;DelimT&gt;(delimiter))}}.

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1>0v2cmuah16st1af4sbw1g4y7geo5i6z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ostream joiner/operator arith</title>
    <ns>0</ns>
    <id>14214</id>
    <revision>
      <id>91882</id>
      <parentid>81369</parentid>
      <timestamp>2017-03-31T20:00:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="641">{{cpp/experimental/ostream_joiner/title|operator++}}
{{cpp/experimental/lib extensions 2/ostream_joiner/navbar}}

{{dcl begin}}
{{dcl | since=libfund_ts_2| 1=
ostream_joiner&amp; operator++();
}}
{{dcl | since=libfund_ts_2| 1=
ostream_joiner&amp; operator++( int );
}}
{{dcl end}}

Does nothing. These operator overloads are provided to satisfy the requirements of {{concept|OutputIterator}}. They make it possible for the expressions {{c|1=*iter++=value}} and {{c|1=*++iter=value}} to be used to output (insert) a value into the underlying stream.

===Parameters===
(none)

===Return value===
{{c|*this}}

=== Exceptions ===
{{unreviewed noexcept}}</text>
      <sha1>pxxwsojwi1s7melgzz9a83xd2dexzha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ostream joiner/operator*</title>
    <ns>0</ns>
    <id>14213</id>
    <revision>
      <id>91409</id>
      <parentid>81370</parentid>
      <timestamp>2017-03-31T19:43:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="563">{{cpp/experimental/ostream_joiner/title|operator*}}
{{cpp/experimental/lib extensions 2/ostream_joiner/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts_2|1=
ostream_joiner&amp; operator*();
}}
{{dcl end}}

Does nothing, this member function is provided to satisfy the requirements of {{concept|OutputIterator}}.

It returns the iterator itself, which makes it possible to use code such as {{c|1=*iter = value}} to output (insert) the value into the underlying stream.

===Parameters===
(none)

===Return value===
{{c|*this}}

=== Exceptions ===
{{unreviewed noexcept}}</text>
      <sha1>0gw9lefl9yg9l8zv3co64fcnavpu8fi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ostream joiner/operator=</title>
    <ns>0</ns>
    <id>14216</id>
    <revision>
      <id>79464</id>
      <parentid>79463</parentid>
      <timestamp>2015-07-07T20:37:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1587">{{cpp/experimental/ostream_joiner/title|operator{{=}}}}
{{cpp/experimental/lib extensions 2/ostream_joiner/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts_2 | 1=
template&lt;class T&gt;
ostream_joiner&amp; operator=(const T&amp; value);
}}
{{dcl | num=2 | since=libfund_ts_2 | notes = {{mark implicit}}| 1=
ostream_joiner&amp; operator=(const ostream_joiner&amp; other) = default;
}}
{{dcl | num=3 | since=libfund_ts_2 | notes = {{mark implicit}}| 1=
ostream_joiner&amp; operator=(ostream_joiner&amp;&amp; other) = default;
}}
{{dcl end}}

1) First, if the private &quot;first element&quot; flag is {{tt|false}}, insert the delimiter {{tt|delim}} into the output stream {{tt|os}} associated with this iterator as if by {{c|os &lt;&lt; delim;}}. 

Then, unconditionally sets the &quot;first element&quot; flag to {{tt|false}}, and insert {{tt|value}} into the output stream as if by {{c|os &lt;&lt; value;}}.

Let {{tt|out_stream}}, {{tt|delim}}, and {{tt|first_element}} denote the private stream pointer, delimiter, and &quot;first element&quot; flag members respectively, then this function is equivalent to
{{source | 1= 
if (!first_element)
    *out_stream &lt;&lt; delim;
first_element = false;
*out_stream &lt;&lt; value;
return *this;
}}
2-3) Implicitly declared copy/move assignment operator that copy/move assigns the private stream pointer, delimiter, and &quot;first element&quot; flag members.

===Parameters===
{{par begin}}
{{par | value| the object to to be written to the stream }}
{{par | other | the {{tt|ostream_joiner}} object to be assigned to this object}}
{{par end}}

=== Return value ===
{{c|*this}}.

===Example===
{{example
 | 
 | code=
 | output=
}}</text>
      <sha1>ie1iqayol2l5q23akt4iavfaqh1tt6r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ostream joiner/ostream joiner</title>
    <ns>0</ns>
    <id>14215</id>
    <revision>
      <id>79466</id>
      <parentid>79465</parentid>
      <timestamp>2015-07-07T20:38:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1597">{{cpp/experimental/ostream_joiner/title|ostream_joiner}}
{{cpp/experimental/lib extensions 2/ostream_joiner/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts_2 | 1=
ostream_joiner(ostream_type&amp; stream, const DelimT&amp; delimiter);
}}
{{dcl | num=2 | since=libfund_ts_2 | 1=
ostream_joiner(ostream_type&amp; stream, DelimT&amp;&amp; delimiter);
}}
{{dcl | num=3 | since=libfund_ts_2 | notes = {{mark implicit}}| 1=
ostream_joiner(const ostream_joiner&amp; other) = default;
}}
{{dcl | num=4 | since=libfund_ts_2 | notes = {{mark implicit}}| 1=
ostream_joiner(ostream_joiner&amp;&amp; other) = default;
}}
{{dcl end}}

1) Constructs the iterator with the private {{c|ostream_type*}} member initialized with {{c|std::addressof(stream)}}, the private delimiter member initialized with {{tt|delimiter}}, and the private &quot;first element&quot; flag set to {{tt|true}}.

2) Constructs the iterator with the private {{c|ostream_type*}} member initialized with {{c|std::addressof(stream)}}, the private delimiter member initialized with {{tt|std::move(delimiter)}}, and the private &quot;first element&quot; flag set to {{tt|true}}.

3-4) Implicitly declared copy/move constructor that copy/move constructs the private stream pointer, delimiter, and &quot;first element&quot; flag members.

===Parameters===
{{par begin}}
{{par | stream | the output stream to be accessed by this iterator}}
{{par | delimiter | the delimiter to be inserted into the stream in between two outputs}}
{{par | other | the {{tt|ostream_joiner}} object from which this object is to be copy- or move-constructed }}
{{par end}}

===Example===
{{example
 | 
 | code=
 | output=
}}</text>
      <sha1>f025wbs5kdwamppapi7vze63h3crref</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/packaged task</title>
    <ns>0</ns>
    <id>14398</id>
    <revision>
      <id>80150</id>
      <timestamp>2015-07-30T21:56:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>disambiguate</comment>
      <text xml:space="preserve" bytes="57">{{cpp/experimental/fund_conc_disambiguate|packaged_task}}</text>
      <sha1>2juvasn05fhia6sjg9op240ejkf2gpc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/parallelism</title>
    <ns>0</ns>
    <id>13847</id>
    <revision>
      <id>84750</id>
      <parentid>80808</parentid>
      <timestamp>2016-03-22T01:12:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>merged box</comment>
      <text xml:space="preserve" bytes="5133">{{title|Extensions for parallelism}}
{{cpp/experimental/parallelism/navbar}}

{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard (except for dynamic execution policy) as of 3/2016; see [[cpp/algorithm|the algorithm library]] {{mark since c++17}} }}


The C++ Extensions for Parallelism, ISO/IEC TS 19570:2015 defines the following new components for the C++ standard library:

===Execution policies===

The parallelism TS describes three execution policies: [[cpp/experimental/parallelism/execution policy#sequential|sequential]], [[cpp/experimental/parallelism/execution policy#parallel|parallel]], and [[cpp/experimental/parallelism/execution policy#parallel vector|parallel+vector]], and provides corresponding execution policy types and objects. Users may select an execution policy statically by invoking a parallel algorithm with the an execution policy object of the corresponding type, or dynamically by using the type-erasing {{tt|execution_policy}} class.

Implementations may define additional execution policies as an extension. The semantics of parallel algorithms invoked with an execution policy object of implementation-defined type is implementation-defined.

{{dsc begin}}
{{dsc header | experimental/execution_policy }}
{{dsc class | cpp/experimental/execution_policy_tag_t | title=sequential_execution_policy&lt;br/&gt;parallel_execution_policy&lt;br/&gt;parallel_vector_execution_policy | execution policy types}}
{{dsc const | cpp/experimental/execution_policy_tag | title=seq&lt;br/&gt;par&lt;br/&gt;par_vec| global execution policy objects}}
{{dsc class | cpp/experimental/execution_policy | dynamic execution policy}}
{{dsc tclass | cpp/experimental/is_execution_policy | test whether a class represents an execution policy}}
{{dsc end}}

=== Exception lists ===
{{dsc begin}}
{{dsc header | experimental/exception_list }}
{{dsc class | cpp/experimental/exception_list | exceptions raised during parallel executions}}
{{dsc end}}

===Parallelized versions of existing algorithms===
The TS provides [[cpp/experimental/parallelism/existing|parallelized versions]] of the following 69 algorithms from &lt;algorithm&gt;, &lt;numeric&gt; and &lt;memory&gt;:
{{collapse top|Standard library algorithms for which parallelized versions are provided}}
{{div col|3}}
* {{lc|std::adjacent_difference}}
* {{lc|std::adjacent_find}}
* {{lc|std::all_of}}
* {{lc|std::any_of}}
* {{lc|std::copy}}
* {{lc|std::copy_if}}
* {{lc|std::copy_n}}
* {{lc|std::count}}
* {{lc|std::count_if}}
* {{lc|std::equal}}
* {{lc|std::fill}}
* {{lc|std::fill_n}}
* {{lc|std::find}}
* {{lc|std::find_end}}
* {{lc|std::find_first_of}}
* {{lc|std::find_if}}
* {{lc|std::find_if_not}}
* {{lc|std::generate}}
* {{lc|std::generate_n}}
* {{lc|std::includes}}
* {{lc|std::inner_product}}
* {{lc|std::inplace_merge}}
* {{lc|std::is_heap}}
* {{lc|std::is_heap_until}}
* {{lc|std::is_partitioned}}
* {{lc|std::is_sorted}}
* {{lc|std::is_sorted_until}}
* {{lc|std::lexicographical_compare}}
* {{lc|std::max_element}}
* {{lc|std::merge}}
* {{lc|std::min_element}}
* {{lc|std::minmax_element}}
* {{lc|std::mismatch}}
* {{ltt|cpp/algorithm/move|std::move}}
* {{lc|std::none_of}}
* {{lc|std::nth_element}}
* {{lc|std::partial_sort}}
* {{lc|std::partial_sort_copy}}
* {{lc|std::partition}}
* {{lc|std::partition_copy}}
* {{ltt|cpp/algorithm/remove|std::remove}}
* {{lc|std::remove_copy}}
* {{lc|std::remove_copy_if}}
* {{lc|std::remove_if}}
* {{lc|std::replace}}
* {{lc|std::replace_copy}}
* {{lc|std::replace_copy_if}}
* {{lc|std::replace_if}}
* {{lc|std::reverse}}
* {{lc|std::reverse_copy}}
* {{lc|std::rotate}}
* {{lc|std::rotate_copy}}
* {{lc|std::search}}
* {{lc|std::search_n}}
* {{lc|std::set_difference}}
* {{lc|std::set_intersection}}
* {{lc|std::set_symmetric_difference}}
* {{lc|std::set_union}}
* {{lc|std::sort}}
* {{lc|std::stable_partition}}
* {{lc|std::stable_sort}}
* {{lc|std::swap_ranges}}
* {{lc|std::transform}}
* {{lc|std::uninitialized_copy}}
* {{lc|std::uninitialized_copy_n}}
* {{lc|std::uninitialized_fill}}
* {{lc|std::uninitialized_fill_n}}
* {{lc|std::unique}}
* {{lc|std::unique_copy}}
{{div col end}}
{{collapse bottom}}

===New algorithms===
{{dsc begin}}
{{dsc header | experimental/algorithm }}
{{dsc tfun | cpp/experimental/for_each | similar to {{lc|std::for_each}} except returns void}}
{{dsc tfun | cpp/experimental/for_each_n | applies a function object to the first n elements of a sequence }}
{{dsc header | experimental/numeric }}
{{dsc inc | cpp/experimental/parallelism/dsc reduce}}
{{dsc tfun | cpp/experimental/exclusive_scan | similar to {{lc|std::partial_sum}}, excludes the ith input element from the ith sum}}
{{dsc tfun | cpp/experimental/inclusive_scan | similar to {{lc|std::partial_sum}}, includes the ith input element in the ith sum}}
{{dsc inc | cpp/experimental/parallelism/dsc transform_reduce}}
{{dsc tfun | cpp/experimental/transform_exclusive_scan | applies a functor, then calculates exclusive scan }}
{{dsc tfun | cpp/experimental/transform_inclusive_scan | applies a functor, then calculates inclusive scan}}
{{dsc end}}</text>
      <sha1>rr0kx0w1mge81twdjj9exmk5vb40et7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/parallelism/existing</title>
    <ns>0</ns>
    <id>14364</id>
    <revision>
      <id>86963</id>
      <parentid>80065</parentid>
      <timestamp>2016-07-19T13:53:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merged to c++17 hatnote (saw an SO answer linking here)</comment>
      <text xml:space="preserve" bytes="29788">{{title|Parallelized version of existing algorithms {{mark since parallelism ts}}}}
{{cpp/experimental/parallelism/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016; see [[cpp/algorithm|the algorithm library]] {{mark since c++17}} }}

The C++ Extensions for Parallelism TS provides parallelized versions of the following 69 existing algorithms. Each of the following parallelized algorithms
* is declared in the {{tt|std::experimental::parallel}} namespace, &lt;!-- technically, it's in parallel::v1, but we ignore the inline namespace for other purposes too --&gt;
* does not participate in overload resolution unless {{tt|is_execution_policy&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;::value}} is {{tt|true}}, and
* has the same semantics as the corresponding existing algorithm in the C++ standard library, except as noted in the page on [[cpp/experimental/parallelism/parallel algorithms|parallel algorithms]].

&lt;!-- The {{dsc header}}s below are intentionally commented out, since the Parallelism TS doesn't appear to actually specify which header these parallelized algorithms live in :( --&gt;

{{dsc begin}}
{{dsc h2 | Non-modifying sequence operations }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/algorithm}} --&gt; 
{{cpp/experimental/parallelism/existing | all_of |
template&lt; class ExecutionPolicy, class InputIt, class UnaryPred &gt;
bool all_of( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
             UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | any_of |
template&lt; class ExecutionPolicy, class InputIt, class UnaryPred &gt;
bool any_of( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
             UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | none_of |
template&lt; class ExecutionPolicy, class InputIt, class UnaryPred &gt;
bool none_of( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
              UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | count |
template&lt; class ExecutionPolicy, class InputIt, class T &gt;
typename iterator_traits&lt;InputIt&gt;::difference_type
    count( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last, 
           const T &amp;value );
}}
{{cpp/experimental/parallelism/existing | count_if |
template&lt; class ExecutionPolicy, class InputIt, class UnaryPred &gt;
typename iterator_traits&lt;InputIt&gt;::difference_type
    count_if( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
              UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | mismatch |
template&lt; class ExecutionPolicy, class InputIt1, class InputIt2 &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy,
              InputIt1 first1, InputIt1 last1,
              InputIt2 first2 );

template&lt; class ExecutionPolicy, class InputIt1, 
          class InputIt2, class BinaryPred &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy,
              InputIt1 first1, InputIt1 last1,
              InputIt2 first2, BinaryPred p );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2 &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy,
              InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2 );

template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class BinaryPred &gt;
std::pair&lt;InputIt1,InputIt2&gt;
    mismatch( ExecutionPolicy&amp;&amp; policy,
              InputIt1 first1, InputIt1 last1,
              InputIt2 first2, InputIt2 last2, BinaryPred p );
}}
{{cpp/experimental/parallelism/existing | equal |
template&lt; class ExecutionPolicy, class InputIt1, class InputIt2 &gt;
bool equal( ExecutionPolicy&amp;&amp; policy,
            InputIt1 first1, InputIt1 last1,
            InputIt2 first2 );

template&lt; class ExecutionPolicy, class InputIt1, 
          class InputIt2, class BinaryPred &gt;
bool equal( ExecutionPolicy&amp;&amp; policy,
            InputIt1 first1, InputIt1 last1,
            InputIt2 first2, BinaryPred p );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2 &gt;
bool equal( ExecutionPolicy&amp;&amp; policy,
            InputIt1 first1, InputIt1 last1,
            InputIt2 first2, InputIt2 last2 );

template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class BinaryPred &gt;
bool equal( ExecutionPolicy&amp;&amp; policy,
            InputIt1 first1, InputIt1 last1, 
            InputIt2 first2, InputIt2 last2, BinaryPred p );
}}
{{cpp/experimental/parallelism/existing | find |
template&lt; class ExecutionPolicy, class InputIt, class T &gt;
InputIt find( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
              const T&amp; value );
}}
{{cpp/experimental/parallelism/existing | find_if |
template&lt; class ExecutionPolicy, class InputIt, class UnaryPred &gt;
InputIt find_if( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
                 UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | find_if_not |
template&lt; class ExecutionPolicy, class InputIt, class UnaryPred &gt;
InputIt find_if_not( ExecutionPolicy&amp;&amp; policy,
                     InputIt first, InputIt last, 
                     UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | find_end |
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 find_end( ExecutionPolicy&amp;&amp; policy,
                     ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last );
        
template&lt; class ExecutionPolicy, class ForwardIt1,
          class ForwardIt2, class BinaryPred &gt;
ForwardIt1 find_end( ExecutionPolicy&amp;&amp; policy,
                     ForwardIt1 first, ForwardIt1 last,
                     ForwardIt2 s_first, ForwardIt2 s_last,
                     BinaryPred p );
}}
{{cpp/experimental/parallelism/existing | find_first_of |
template&lt; class ExecutionPolicy, class InputIt, class ForwardIt &gt;
InputIt find_first_of( ExecutionPolicy&amp;&amp; policy,
                       InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last );

template&lt; class ExecutionPolicy, class InputIt,
          class ForwardIt, class BinaryPred &gt;
InputIt find_first_of( ExecutionPolicy&amp;&amp; policy,
                       InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last,
                       BinaryPred p );
}}
{{cpp/experimental/parallelism/existing | adjacent_find |
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt adjacent_find( ExecutionPolicy&amp;&amp; policy, 
                         ForwardIt first, ForwardIt last );
        
template&lt; class ExecutionPolicy, class ForwardIt, class BinaryPred&gt;
ForwardIt adjacent_find( ExecutionPolicy&amp;&amp; policy, 
                         ForwardIt first, ForwardIt last,
                         BinaryPred p );
}}
{{cpp/experimental/parallelism/existing | search |
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt1 search( ExecutionPolicy&amp;&amp; policy, 
                   ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last );

template&lt; class ExecutionPolicy, class ForwardIt1,
          class ForwardIt2, class BinaryPred &gt;
ForwardIt1 search( ExecutionPolicy&amp;&amp; policy,
                   ForwardIt1 first, ForwardIt1 last,
                   ForwardIt2 s_first, ForwardIt2 s_last,
                   BinaryPred p );
}}
{{cpp/experimental/parallelism/existing | search_n |
template&lt; class ExecutionPolicy, class ForwardIt, class Size, class T &gt;
ForwardIt search_n( ExecutionPolicy&amp;&amp; policy,
                    ForwardIt first, ForwardIt last,
                    Size count, const T&amp; value );
        
template&lt; class ExecutionPolicy, class ForwardIt,
          class Size, class T, class BinaryPred &gt;
ForwardIt search_n( ExecutionPolicy&amp;&amp; policy,
                    ForwardIt first, ForwardIt last,
                    Size count, const T&amp; value, 
                    BinaryPred p );
}}

{{dsc h2 | Modifying sequence operations }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/algorithm}} --&gt; 
{{cpp/experimental/parallelism/existing | copy |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt &gt;
OutputIt copy( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last, 
               OutputIt d_first );
}}
{{cpp/experimental/parallelism/existing | copy_if |
template&lt; class ExecutionPolicy, class InputIt,
          class OutputIt, class UnaryPred &gt;
OutputIt copy_if( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
                  OutputIt d_first, UnaryPred pred );
}}
{{cpp/experimental/parallelism/existing | copy_n |
template&lt; class ExecutionPolicy, class InputIt,
          class Size, class OutputIt &gt;
OutputIt copy_n( ExecutionPolicy&amp;&amp; policy, InputIt first, Size count,
                 OutputIt result );
}}
{{cpp/experimental/parallelism/existing | move | override=cpp/algorithm/move |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt &gt;
OutputIt move( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last,
               OutputIt d_first );
}}
{{cpp/experimental/parallelism/existing | fill |
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
void fill( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last,
           const T&amp; value );
}}
{{cpp/experimental/parallelism/existing | fill_n |
template&lt; class ExecutionPolicy, class OutputIt, class Size, class T &gt;
OutputIt fill_n( ExecutionPolicy&amp;&amp; policy, OutputIt first, Size count,
                 const T&amp; value );
}}
{{cpp/experimental/parallelism/existing | transform |
template&lt; class ExecutionPolicy, class InputIt, 
          class OutputIt, class UnaryOp &gt;
OutputIt transform( ExecutionPolicy&amp;&amp; policy, 
                    InputIt first1, InputIt last1, 
                    OutputIt d_first, UnaryOp unary_op );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class BinaryOp &gt;
OutputIt transform( ExecutionPolicy&amp;&amp; policy, 
                    InputIt1 first1, InputIt1 last1, 
                    InputIt2 first2, OutputIt d_first,
                    BinaryOp binary_op );
}}
{{cpp/experimental/parallelism/existing | generate |
template&lt; class ExecutionPolicy, class ForwardIt, class Generator &gt;
void generate( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last,
               Generator g );
}}
{{cpp/experimental/parallelism/existing | generate_n |
template&lt; class ExecutionPolicy, class OutputIt,
          class Size, class Generator &gt;
OutputIt generate_n( ExecutionPolicy&amp;&amp; policy, OutputIt first,
                     Size count, Generator g );
}}
{{cpp/experimental/parallelism/existing | remove | override=cpp/algorithm/remove |
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
ForwardIt remove( ExecutionPolicy&amp;&amp; policy,
                  ForwardIt first, ForwardIt last, const T&amp; value );
}}
{{cpp/experimental/parallelism/existing | remove_if |
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPred &gt;
ForwardIt remove_if( ExecutionPolicy&amp;&amp; policy, 
                     ForwardIt first, ForwardIt last, UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | remove_copy |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt, class T &gt;
OutputIt remove_copy( ExecutionPolicy&amp;&amp; policy, 
                      InputIt first, InputIt last, 
                      OutputIt d_first, const T&amp; value );
}}
{{cpp/experimental/parallelism/existing | remove_copy_if |
template&lt; class ExecutionPolicy, class InputIt,
          class OutputIt, class UnaryPred &gt;
OutputIt remove_copy_if( ExecutionPolicy&amp;&amp; policy, 
                         InputIt first, InputIt last, 
                         OutputIt d_first, UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | replace |
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
void replace( ExecutionPolicy&amp;&amp; policy,
              ForwardIt first, ForwardIt last,
              const T&amp; old_value, const T&amp; new_value );
}}
{{cpp/experimental/parallelism/existing | replace_if |
template&lt; class ExecutionPolicy, class ForwardIt,
          class UnaryPred, class T &gt;
void replace_if( ExecutionPolicy&amp;&amp; policy,
                 ForwardIt first, ForwardIt last,
                 UnaryPred p, const T&amp; new_value );
}}
{{cpp/experimental/parallelism/existing | replace_copy |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt, class T &gt;
OutputIt replace_copy( ExecutionPolicy&amp;&amp; policy, 
                       InputIt first, InputIt last, OutputIt d_first,
                       const T&amp; old_value, const T&amp; new_value );
}}
{{cpp/experimental/parallelism/existing | replace_copy_if |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt,
          class UnaryPred, class T &gt;
OutputIt replace_copy_if( ExecutionPolicy&amp;&amp; policy, 
                          InputIt first, InputIt last, OutputIt d_first,
                          UnaryPred p, const T&amp; new_value );
}}
{{cpp/experimental/parallelism/existing | swap_ranges |
template&lt; class ExecutionPolicy, class ForwardIt1, class ForwardIt2 &gt;
ForwardIt2 swap_ranges( ExecutionPolicy&amp;&amp; policy,
                        ForwardIt1 first1, ForwardIt1 last1,
                        ForwardIt2 first2 );
}}
{{cpp/experimental/parallelism/existing | reverse |
template&lt; class ExecutionPolicy, class BidirIt &gt;
void reverse( ExecutionPolicy&amp;&amp; policy, BidirIt first, BidirIt last );
}}
{{cpp/experimental/parallelism/existing | reverse_copy |
template&lt; class ExecutionPolicy, class BidirIt, class OutputIt &gt;
OutputIt reverse_copy( ExecutionPolicy&amp;&amp; policy, 
                       BidirIt first, BidirIt last, OutputIt d_first );
}}
{{cpp/experimental/parallelism/existing | rotate |
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt rotate( ExecutionPolicy&amp;&amp; policy, 
                  ForwardIt first, ForwardIt n_first, ForwardIt last );
}}
{{cpp/experimental/parallelism/existing | rotate_copy |
template&lt; class ExecutionPolicy, class ForwardIt, class OutputIt &gt;
OutputIt rotate_copy( ExecutionPolicy&amp;&amp; policy, 
                      ForwardIt first, ForwardIt n_first, ForwardIt last,
                      OutputIt d_first );
}}
{{cpp/experimental/parallelism/existing | unique |
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt unique( ExecutionPolicy&amp;&amp; policy, 
                  ForwardIt first, ForwardIt last );

template&lt; class ExecutionPolicy, class ForwardIt, class BinaryPred &gt;
ForwardIt unique( ExecutionPolicy&amp;&amp; policy, 
                  ForwardIt first, ForwardIt last, BinaryPred p );
}}
{{cpp/experimental/parallelism/existing | unique_copy |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt &gt;
OutputIt unique_copy( ExecutionPolicy&amp;&amp; policy, 
                      InputIt first, InputIt last,
                      OutputIt d_first );

template&lt; class ExecutionPolicy, class InputIt,
          class OutputIt, class BinaryPred &gt;
OutputIt unique_copy( ExecutionPolicy&amp;&amp; policy, 
                      InputIt first, InputIt last,
                      OutputIt d_first, BinaryPred p );
}}
{{dsc h2 | Partitioning operations }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/algorithm}} --&gt; 
{{cpp/experimental/parallelism/existing | is_partitioned |
template&lt; class ExecutionPolicy, class InputIt, class UnaryPred &gt;
bool is_partitioned( ExecutionPolicy&amp;&amp; policy, 
                     InputIt first, InputIt last, UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | partition |
template&lt; class ExecutionPolicy, class ForwardIt, class UnaryPred &gt;
ForwardIt partition( ExecutionPolicy&amp;&amp; policy, 
                     ForwardIt first, ForwardIt last, UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | partition_copy |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt1,
          class OutputIt2, class UnaryPred &gt;
std::pair&lt;OutputIt1, OutputIt2&gt;
     partition_copy( ExecutionPolicy&amp;&amp; policy, 
                     InputIt first, InputIt last,
                     OutputIt1 d_first_true, OutputIt2 d_first_false,
                     UnaryPred p );
}}
{{cpp/experimental/parallelism/existing | stable_partition |
template&lt; class ExecutionPolicy, class BidirIt, class UnaryPred &gt;
BidirIt stable_partition( ExecutionPolicy&amp;&amp; policy, 
                          BidirIt first, BidirIt last, UnaryPred p );
}}
{{dsc h2 | Sorting operations }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/algorithm}} --&gt; 
{{cpp/experimental/parallelism/existing | is_sorted |
template&lt; class ExecutionPolicy, class ForwardIt &gt;
bool is_sorted( ExecutionPolicy&amp;&amp; policy,
                ForwardIt first, ForwardIt last );

template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
bool is_sorted( ExecutionPolicy&amp;&amp; policy, 
                ForwardIt first, ForwardIt last, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | is_sorted_until |
template&lt; class ExecutionPolicy, class ForwardIt &gt;
ForwardIt is_sorted_until( ExecutionPolicy&amp;&amp; policy,
                           ForwardIt first, ForwardIt last );

template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
ForwardIt is_sorted_until( ExecutionPolicy&amp;&amp; policy, 
                           ForwardIt first, ForwardIt last, 
                           Compare cmp );
}}
{{cpp/experimental/parallelism/existing | sort |
template&lt; class ExecutionPolicy, class RandomIt &gt;
void sort( ExecutionPolicy&amp;&amp; policy, RandomIt first, RandomIt last );

template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void sort( ExecutionPolicy&amp;&amp; policy, 
           RandomIt first, RandomIt last, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | partial_sort |
template&lt; class ExecutionPolicy, class RandomIt &gt;
void partial_sort( ExecutionPolicy&amp;&amp; policy,
                   RandomIt first, RandomIt middle, RandomIt last );

template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void partial_sort( ExecutionPolicy&amp;&amp; policy, 
                   RandomIt first, RandomIt middle, RandomIt last,
                   Compare cmp );
}}
{{cpp/experimental/parallelism/existing | partial_sort_copy |
template&lt; class ExecutionPolicy, class InputIt, class RandomIt &gt;
RandomIt partial_sort_copy( ExecutionPolicy&amp;&amp; policy, 
                            InputIt first, InputIt last,
                            RandomIt d_first, RandomIt d_last );

template&lt; class ExecutionPolicy, class InputIt,
          class RandomIt, class Compare &gt;
RandomIt partial_sort_copy( ExecutionPolicy&amp;&amp; policy, 
                            InputIt first, InputIt last,
                            RandomIt d_first, RandomIt d_last,
                            Compare cmp );
}}
{{cpp/experimental/parallelism/existing | stable_sort |
template&lt; class ExecutionPolicy, class RandomIt &gt;
void stable_sort( ExecutionPolicy&amp;&amp; policy, 
                  RandomIt first, RandomIt last );

template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void stable_sort( ExecutionPolicy&amp;&amp; policy,
                  RandomIt first, RandomIt last, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | nth_element |
template&lt; class ExecutionPolicy, class RandomIt &gt;
void nth_element( ExecutionPolicy&amp;&amp; policy,
                  RandomIt first, RandomIt nth, RandomIt last );

template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
void nth_element( ExecutionPolicy&amp;&amp; policy,
                  RandomIt first, RandomIt nth, RandomIt last,
                  Compare cmp );
}}
{{dsc h2 | Set operations (on sorted ranges) }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/algorithm}} --&gt; 
{{cpp/experimental/parallelism/existing | merge |
template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class OutputIt &gt;
OutputIt merge( ExecutionPolicy&amp;&amp; policy,
                InputIt1 first1, InputIt1 last1,
                InputIt2 first2, InputIt2 last2,
                OutputIt d_first );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare&gt;
OutputIt merge( ExecutionPolicy&amp;&amp; policy, 
                InputIt1 first1, InputIt1 last1,
                InputIt2 first2, InputIt2 last2,
                OutputIt d_first, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | inplace_merge |
template&lt; class ExecutionPolicy, class BidirIt &gt;
void inplace_merge( ExecutionPolicy&amp;&amp; policy,
                    BidirIt first, BidirIt middle, BidirIt last );

template&lt; class ExecutionPolicy, class BidirIt, class Compare&gt;
void inplace_merge( ExecutionPolicy&amp;&amp; policy,
                    BidirIt first, BidirIt middle, BidirIt last,
                    Compare cmp );
}}
{{cpp/experimental/parallelism/existing | includes |
template&lt; class ExecutionPolicy, class InputIt1, class InputIt2 &gt;
bool includes( ExecutionPolicy&amp;&amp; policy,
               InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2 );

template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class Compare &gt;
bool includes( ExecutionPolicy&amp;&amp; policy,
               InputIt1 first1, InputIt1 last1,
               InputIt2 first2, InputIt2 last2, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | set_difference |
template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class OutputIt &gt;
OutputIt set_difference( ExecutionPolicy&amp;&amp; policy, 
                         InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_difference( ExecutionPolicy&amp;&amp; policy,
                         InputIt1 first1, InputIt1 last1,
                         InputIt2 first2, InputIt2 last2,
                         OutputIt d_first, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | set_intersection |
template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class OutputIt &gt;
OutputIt set_intersection( ExecutionPolicy&amp;&amp; policy,
                           InputIt1 first1, InputIt1 last1,
                           InputIt2 first2, InputIt2 last2,
                           OutputIt d_first );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_intersection( ExecutionPolicy&amp;&amp; policy, 
                           InputIt1 first1, InputIt1 last1,
                           InputIt2 first2, InputIt2 last2,
                           OutputIt d_first, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | set_symmetric_difference |
template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class OutputIt &gt;
OutputIt set_symmetric_difference( ExecutionPolicy&amp;&amp; policy, 
                                   InputIt1 first1, InputIt1 last1,
                                   InputIt2 first2, InputIt2 last2,
                                   OutputIt d_first );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_symmetric_difference( ExecutionPolicy&amp;&amp; policy, 
                                   InputIt1 first1, InputIt1 last1,
                                   InputIt2 first2, InputIt2 last2,
                                   OutputIt d_first, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | set_union |
template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class OutputIt &gt;
OutputIt set_union( ExecutionPolicy&amp;&amp; policy, 
                    InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, InputIt2 last2,
                    OutputIt d_first );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2,
          class OutputIt, class Compare &gt;
OutputIt set_union( ExecutionPolicy&amp;&amp; policy, 
                    InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, InputIt2 last2,
                    OutputIt d_first, Compare cmp );
}}
{{dsc h2 | Heap operations }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/algorithm}} --&gt; 
{{cpp/experimental/parallelism/existing | is_heap |
template&lt; class ExecutionPolicy, class RandomIt &gt;
bool is_heap( ExecutionPolicy&amp;&amp; policy,
              RandomIt first, RandomIt last );

template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
bool is_heap( ExecutionPolicy&amp;&amp; policy,
              RandomIt first, RandomIt last, Compare cmp );
}}
{{cpp/experimental/parallelism/existing | is_heap_until |
template&lt; class ExecutionPolicy, class RandomIt &gt;
RandomIt is_heap_until( ExecutionPolicy&amp;&amp; policy, 
                        RandomIt first, RandomIt last );

template&lt; class ExecutionPolicy, class RandomIt, class Compare &gt;
RandomIt is_heap_until( ExecutionPolicy&amp;&amp; policy, 
                        RandomIt first, RandomIt last, Compare cmp );
}}
{{dsc h2 | Minimum/maximum operations }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/algorithm}} --&gt; 
{{cpp/experimental/parallelism/existing | max_element |
template&lt; class ExecutionPolicy, class ForwardIt &gt; 
ForwardIt max_element( ExecutionPolicy&amp;&amp; policy,
                       ForwardIt first, ForwardIt last);

template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
ForwardIt max_element( ExecutionPolicy&amp;&amp; policy, 
                       ForwardIt first, ForwardIt last, Compare cmp);
}}
{{cpp/experimental/parallelism/existing | min_element |
template&lt; class ExecutionPolicy, class ForwardIt &gt; 
ForwardIt min_element( ExecutionPolicy&amp;&amp; policy,
                       ForwardIt first, ForwardIt last);

template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
ForwardIt min_element( ExecutionPolicy&amp;&amp; policy, 
                       ForwardIt first, ForwardIt last, Compare cmp);
}}
{{cpp/experimental/parallelism/existing | minmax_element |
template&lt; class ExecutionPolicy, class ForwardIt &gt; 
std::pair&lt;ForwardIt,ForwardIt&gt;
    minmax_element( ExecutionPolicy&amp;&amp; policy,
                    ForwardIt first, ForwardIt last);

template&lt; class ExecutionPolicy, class ForwardIt, class Compare &gt;
std::pair&lt;ForwardIt,ForwardIt&gt; 
    minmax_element( ExecutionPolicy&amp;&amp; policy, 
                    ForwardIt first, ForwardIt last, Compare cmp);
}}
{{cpp/experimental/parallelism/existing | lexicographical_compare |
template&lt; class ExecutionPolicy, class InputIt1, class InputIt2 &gt;
bool lexicographical_compare( ExecutionPolicy&amp;&amp; policy,
                              InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2 );

template&lt; class ExecutionPolicy, class InputIt1, 
          class InputIt2, class Compare &gt;
bool lexicographical_compare( ExecutionPolicy&amp;&amp; policy,
                              InputIt1 first1, InputIt1 last1,
                              InputIt2 first2, InputIt2 last2,
                              Compare cmp );
}}
{{dsc h2 | Numeric operations }}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/numeric}} --&gt; 
{{cpp/experimental/parallelism/existing | adjacent_difference |
template&lt; class ExecutionPolicy, class InputIt, class OutputIt &gt;
OutputIt adjacent_difference( ExecutionPolicy&amp;&amp; policy, 
                              InputIt first, InputIt last, 
                              OutputIt d_first );

template&lt; class ExecutionPolicy, class InputIt,
          class OutputIt, class BinaryOp &gt;
OutputIt adjacent_difference( ExecutionPolicy&amp;&amp; policy, 
                              InputIt first, InputIt last, 
                              OutputIt d_first, BinaryOp op );
}}
{{cpp/experimental/parallelism/existing | inner_product |
template&lt; class ExecutionPolicy, class InputIt1,
          class InputIt2, class T &gt;
T inner_product( ExecutionPolicy&amp;&amp; policy, 
                 InputIt1 first1, InputIt1 last1, InputIt2 first2,
                 T value );

template&lt; class ExecutionPolicy, class InputIt1, class InputIt2,
          class T, class BinaryOp1, class BinaryOp2&gt; 
T inner_product( ExecutionPolicy&amp;&amp; policy, 
                 InputIt1 first1, InputIt1 last1, InputIt2 first2,
                 T value, BinaryOp1 op1, BinaryOp2 op2 );
}}
{{dsc h2 | Operations on uninitialized memory}}
{{dsc hitem | Parallelized algorithm | Existing algorithm }}
&lt;!-- {{dsc header | experimental/memory}} --&gt; 
{{cpp/experimental/parallelism/existing | uninitialized_copy |
template&lt; class ExecutionPolicy, class InputIt, class ForwardIt &gt;
ForwardIt uninitialized_copy( ExecutionPolicy&amp;&amp; policy, 
                              InputIt first, InputIt last,
                              ForwardIt d_first );
}}
{{cpp/experimental/parallelism/existing | uninitialized_copy_n |
template&lt; class ExecutionPolicy, class InputIt,
          class Size, class ForwardIt &gt;
ForwardIt uninitialized_copy_n( ExecutionPolicy&amp;&amp; policy,
                                InputIt first, Size count, 
                                ForwardIt d_first);
}}
{{cpp/experimental/parallelism/existing | uninitialized_fill |
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
void uninitialized_fill( ExecutionPolicy&amp;&amp; policy, 
                         ForwardIt first, ForwardIt last,
                         const T&amp; value );
}}
{{cpp/experimental/parallelism/existing | uninitialized_fill_n |
template&lt; class ExecutionPolicy, class ForwardIt, class Size, class T &gt;
ForwardIt uninitialized_fill_n( ExecutionPolicy&amp;&amp; policy,
                                ForwardIt first, Size count,
                                const T&amp; value );
}}
{{dsc end}}</text>
      <sha1>7i8stliz0drtgoq0ax3gd48yqo856sn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator</title>
    <ns>0</ns>
    <id>14382</id>
    <revision>
      <id>84477</id>
      <parentid>80134</parentid>
      <timestamp>2016-03-18T17:08:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>merged box</comment>
      <text xml:space="preserve" bytes="1973">{{cpp/experimental/pmr/title|polymorphic_allocator}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  {{ltt|cpp/memory/polymorphic_allocator|std::pmr::polymorphic_allocator}} {{mark since c++17}} }}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
template&lt; class T &gt;
class polymorphic_allocator;
}}

The class template {{tt|std::experimental::pmr::polymorphic_allocator}} is an {{concept|Allocator}} whose allocation behavior depends on the memory resource it is constructed with. Thus, different instances of {{tt|polymorphic_allocator}} can exhibit entirely different allocation behavior. This runtime polymorphism allows objects using {{tt|polymorphic_allocator}} to behave as if they used different allocator types at run time despite the identical static allocator type.

=== Member types ===
{{dsc begin}}
{{dsc hitem| Member type | definition}}
{{dsc |{{tt|value_type}} | {{tt|T}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc constructor}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc destructor}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc allocate}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc deallocate}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc construct}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc destroy}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc select_on_container_copy_construction}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc resource}}
{{dsc end}}

=== Non-member functions ===
{{dsc begin}}
{{dsc inc | cpp/experimental/polymorphic_allocator/dsc operator eq}}
{{dsc end}}</text>
      <sha1>ezl16n85i6tvddri04tmohcghx2vqxu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/allocate</title>
    <ns>0</ns>
    <id>14610</id>
    <revision>
      <id>82202</id>
      <parentid>82200</parentid>
      <timestamp>2015-12-05T10:51:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* See also */ +</comment>
      <text xml:space="preserve" bytes="708">{{cpp/experimental/pmr/polymorphic_allocator/title|allocate}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}

{{ddcl | since=libfund_ts | 
T* allocate( std::size_t n );
}}

Allocates storage for {{tt|n}} objects of type {{tt|T}} using the underlying memory resource. Equivalent to {{tt|return static_cast&lt;T*&gt;(this-&gt;resource()-&gt;allocate(n * sizeof(T), alignof(T)));}}

===Parameters===
{{par begin}}
{{par | n | the number of objects to allocate storage for }}
{{par end}}

===Return value===
A pointer to the allocated storage.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator traits/dsc allocate}}
{{dsc inc | cpp/experimental/memory resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>o6bdm4dx0a1l6k38tt0hejmv24o03gd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/construct</title>
    <ns>0</ns>
    <id>14614</id>
    <revision>
      <id>82206</id>
      <timestamp>2015-12-05T11:23:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="5648">{{cpp/experimental/pmr/polymorphic_allocator/title|construct}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | num=1 |
template &lt; class U, class... Args &gt;
void construct( U* p, Args&amp;&amp;... args );
}}
{{dcl | since=libfund_ts | num=2 |
template&lt; class T1, class T2, class... Args1, class... Args2 &gt;
void construct( std::pair&lt;T1, T2&gt;* p,
                std::piecewise_construct_t,
                std::tuple&lt;Args1...&gt; x,
                std::tuple&lt;Args2...&gt; y );
}}
{{dcl | since=libfund_ts | num=3 |
template&lt; class T1, class T2 &gt;
void construct( std::pair&lt;T1, T2&gt;* p );
}}
{{dcl | since=libfund_ts | num=4|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, U&amp;&amp; x, V&amp;&amp; y );
}}
{{dcl | since=libfund_ts | num=5|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, const std::pair&lt;U, V&gt;&amp; xy );
}}
{{dcl |  since=libfund_ts | num=6|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, std::pair&lt;U, V&gt;&amp;&amp; xy );
}}
{{dcl end}}

Constructs an object in allocated, but not initialized storage pointed to by {{tt|p}} the provided constructor arguments. If the object is of type that itself uses allocators, or if it is std::pair, passes {{tt|this-&gt;resource()}} down to the constructed object.

1) If {{c|1=std::uses_allocator&lt;U, memory_resource*&gt;::value==false}} (the type {{tt|U}} does not use allocators) and {{c|1=std::is_constructible&lt;U, Args...&gt;::value==true}}, then constructs the object as if by {{c|::new((void *) p) U(std::forward&lt;Args&gt;(args)... ); }}.

Otherwise, if {{c|1=std::uses_allocator&lt;U, memory_resource*&gt;::value==true}} (the type {{tt|U}} uses allocators, e.g. it is a container) and {{c|1=std::is_constructible&lt;U, std::allocator_arg_t, memory_resource*, Args...&gt;::value==true}}, then constructs the object as if by {{c|::new((void *) p) U(std::allocator_arg, this-&gt;resource(), std::forward&lt;Args&gt;(args)... ); }}.

Otherwise, if {{c|1=std::uses_allocator&lt;U, memory_resource*&gt;::value==true}} (the type {{tt|U}} uses allocators, e.g. it is a container) and {{c|1=std::is_constructible&lt;U, Args..., memory_resource*&gt;::value==true}}, then constructs the object as if by {{c|::new((void *) p) U(std::forward&lt;Args&gt;(args)..., this-&gt;resource()); }}.

Otherwise, the program is ill-formed.

2) First, if either {{tt|T1}} or {{tt|T2}} is allocator-aware, modifies the tuples {{tt|x}} and {{tt|y}} to include {{tt|this-&gt;resource()}}, resulting in the two new tuples {{tt|xprime}} and {{tt|yprime}}, according to the following three rules:

2a) if {{tt|T1}} is not allocator-aware ({{c|1=std::uses_allocator&lt;T1, memory_resource*&gt;::value==false}}) and {{c|1=std::is_constructible&lt;T1, Args1...&gt;::value==true}}, then {{tt|xprime}} is {{tt|x}}, unmodified.

2b) if {{tt|T1}} is allocator-aware ({{c|1=std::uses_allocator&lt;T1, memory_resource*&gt;::value==true}}), and its constructor takes an allocator tag ({{c|1=std::is_constructible&lt;T1, std::allocator_arg_t, memory_resource*, Args1...&gt;::value==true}}, then {{tt|xprime}} is
{{c|std::tuple_cat(std::make_tuple(std::allocator_arg, this-&gt;resource()), std::move(x))}}

2c) if {{tt|T1}} is allocator-aware ({{c|1=std::uses_allocator&lt;T1, memory_resource*&gt;::value==true}}), and its constructor takes the allocator as the last argument ({{c|1=std::is_constructible&lt;T1, Args1..., memory_resource*&gt;::value==true}}), then {{tt|xprime}} is  {{c|std::tuple_cat(std::move(x), std::make_tuple(this-&gt;resource()))}}.

2d) Otherwise, the program is ill-formed.

Same rules apply to {{tt|T2}} and the replacement of {{tt|y}} with {{tt|yprime}}.

Once {{tt|xprime}} and {{tt|yprime}} are constructed, constructs the pair {{tt|p}} in allocated storage as if by {{c|::new((void *) p) pair&lt;T1, T2&gt;(std::piecewise_construct, std::move(xprime), std::move(yprime));}}

3) Equivalent to {{c|construct(p, std::piecewise_construct, std::tuple&lt;&gt;(), std::tuple&lt;&gt;())}}, that is, passes the memory resource on to the pair's member types if they accept them.

4) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward&lt;U&gt;(x)),
                                       std::forward_as_tuple(std::forward&lt;V&gt;(y)))
}}

5) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(xy.first),
                                       std::forward_as_tuple(xy.second))
}}

6) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward&lt;U&gt;(xy.first)),
                                       std::forward_as_tuple(std::forward&lt;V&gt;(xy.second)))
}}

===Parameters===
{{par begin}}
{{par | p | pointer to allocated, but not initialized storage }}
{{par | args... | the constructor arguments to pass to the constructor of {{tt|T}} }}
{{par | x | the constructor arguments to pass to the constructor of {{tt|T1}} }}
{{par | y | the constructor arguments to pass to the constructor of {{tt|T2}} }}
{{par | xy | the pair whose two members are the constructor arguments for {{tt|T1}} and {{tt|T2}} }}
{{par end}}

===Return value===
(none)

===Notes===
This function is called (through {{lc|std::allocator_traits}}) by any allocator-aware object, such as {{lc|std::vector}}, that was given a {{lc|std::polymorphic_allocator}} as the allocator to use. Since {{tt|memory_resource*}} implicitly converts to {{tt|polymorphic_allocator}}, the memory resource pointer will propagate to any allocator-aware subobjects using polymorphic allocators. 

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc construct}}
{{dsc inc | cpp/memory/allocator/dsc construct}}
{{dsc end}}</text>
      <sha1>761k25t5sw8aa2noatrgpdwff93h769</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/deallocate</title>
    <ns>0</ns>
    <id>14611</id>
    <revision>
      <id>82201</id>
      <timestamp>2015-12-05T10:51:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="861">{{cpp/experimental/pmr/polymorphic_allocator/title|deallocate}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}

{{ddcl | since=libfund_ts | 
void deallocate(T* p, std::size_t n );
}}

Deallocates the storage pointed to by {{tt|p}}, which must have been allocated from a {{ltt|cpp/experimental/memory_resource}} {{tt|x}} that compares equal to {{tt|*resource()}} using {{tt|x.allocate(n * sizeof(T), alignof(T))}}.

Equivalent to {{tt|this-&gt;resource()-&gt;deallocate(p, n * sizeof(T), alignof(T));}}

===Parameters===
{{par begin}}
{{par | p | pointer to memory to deallocate }}
{{par | n | the number of objects originally allocated }}
{{par end}}

===Exceptions===
Throws nothing.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator traits/dsc deallocate}}
{{dsc inc | cpp/experimental/memory resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>65i2inyblxq3f3astwx9ukq6dssq0fn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/destroy</title>
    <ns>0</ns>
    <id>14609</id>
    <revision>
      <id>82198</id>
      <parentid>82197</parentid>
      <timestamp>2015-12-05T10:42:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="494">{{cpp/experimental/pmr/polymorphic_allocator/title|destroy}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 
template&lt;class U&gt;
void destroy(U* p);
}}
{{dcl end}}

Destroys the object pointed to by {{tt|p}}, as if by calling {{c|p-&gt;~U()}}.

===Parameters===
{{par begin}}
{{par | p | pointer to the object being destroyed }}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc destroy}}
{{dsc end}}</text>
      <sha1>af8xjufi35y2tdwxz40suhwhz75obqg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/operator eq</title>
    <ns>0</ns>
    <id>14613</id>
    <revision>
      <id>91373</id>
      <parentid>82205</parentid>
      <timestamp>2017-03-31T19:41:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="912">{{title|1=operator==,!={{small|(std::experimental::pmr::polymorphic_allocator)}}}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | 1=
template&lt; class T1, class T2 &gt;
bool operator==( const polymorphic_allocator&lt;T1&gt;&amp; lhs, const polymorphic_allocator&lt;T2&gt;&amp; rhs );
}}
{{dcl | 1=
template&lt; class T1, class T2 &gt;
bool operator!=( const polymorphic_allocator&lt;T1&gt;&amp; lhs, const polymorphic_allocator&lt;T2&gt;&amp; rhs );
}}
{{dcl end}}

Compares two polymorphic allocators. Two polymorphic allocators compare equal if their underlying memory resource compares equal.

@1@ Returns {{c|1=*lhs.resource() == *rhs.resource()}}
@2@ Returns {{c|1=!(lhs == rhs)}}

===Parameters===
{{par begin}}
{{par | lhs, rhs | polymorphic allocators to compare}}
{{par end}}

===Return value===
@1@ {{c|1=*lhs.resource() == *rhs.resource()}}
@2@ {{c|1=!(lhs == rhs)}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>79e3azy34xccfq6m83qkevhm0v6ohjg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/operator=</title>
    <ns>0</ns>
    <id>14608</id>
    <revision>
      <id>82196</id>
      <parentid>82195</parentid>
      <timestamp>2015-12-05T10:39:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="534">{{cpp/experimental/pmr/polymorphic_allocator/title|operator{{=}}}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 1=
polymorphic_allocator&amp; operator=(const polymorphic_allocator&amp; rhs) = default;
}}
{{dcl end}}

Copy assigns this {{tt|polymorphic_allocator}}. Sets the memory resource pointer of {{tt|*this}} to that of {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par| rhs | another {{tt|polymorphic_allocator}} to copy from}}
{{par end}}

===Return value===
{{c|*this}}</text>
      <sha1>075vu58cv0my78vkllsi71kuqz364dh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/polymorphic allocator</title>
    <ns>0</ns>
    <id>14612</id>
    <revision>
      <id>91348</id>
      <parentid>82203</parentid>
      <timestamp>2017-03-31T19:40:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1223">{{cpp/experimental/pmr/polymorphic_allocator/title|polymorphic_allocator}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl| num=1 | 1=
polymorphic_allocator();
}}
{{dcl| num=2 | 1=
polymorphic_allocator( const polymorphic_allocator&amp; other ) = default;
}}
{{dcl| num=3 | 1=
template&lt; class U &gt; 
polymorphic_allocator( const polymorphic_allocator&lt;U&gt;&amp; other );
}}
{{dcl| num=4 | 1=
polymorphic_allocator( memory_resource* r);
}}
{{dcl end}}

Constructs a new {{tt|polymorphic_allocator}}.
@1@ Constructs a {{tt|polymorphic_allocator}} using the return value of {{c|std::experimental::pmr::get_default_resource()}} as the underlying memory resource.
@2-3@  Constructs a {{tt|polymorphic_allocator}} using {{c|other.resource()}} as the underlying memory resource.
@4@ Constructs a {{tt|polymorphic_allocator}} using {{tt|r}} as the underlying memory resource. This constructor provides an implicit conversion from {{tt|memory_resource*}}.

===Parameters===
{{par begin}}
{{par| other | another {{tt|polymorphic_allocator}} to copy from}}
{{par| r | pointer to the memory resource to use. May not be null. }}
{{par end}}

===Exceptions===
@1,3@ {{unreviewed noexcept}}
@4@ Throws nothing.</text>
      <sha1>42rskhlgdt9lhsf9kt7ouve9fttk4p7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/resource</title>
    <ns>0</ns>
    <id>14607</id>
    <revision>
      <id>82199</id>
      <parentid>82194</parentid>
      <timestamp>2015-12-05T10:46:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="404">{{cpp/experimental/pmr/polymorphic_allocator/title|resource}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 
memory_resource* resource() const;
}}
{{dcl end}}

Returns the memory resource pointer used by this polymorphic allocator.

===Parameters===
(none)

===Return value===
The memory resource pointer used by this polymorphic allocator.</text>
      <sha1>8xu554hus4pmo6vtuodx4j8azu9aixn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/polymorphic allocator/select on container copy construction</title>
    <ns>0</ns>
    <id>14606</id>
    <revision>
      <id>82192</id>
      <timestamp>2015-12-05T10:35:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="678">{{cpp/experimental/pmr/polymorphic_allocator/title|select_on_container_copy_construction}}
{{cpp/experimental/lib extensions/pmr/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 
polymorphic_allocator select_on_container_copy_construction() const;
}}
{{dcl end}}

Returns a default-constructed {{tt|polymorphic_allocator}} object. 

===Parameters===
(none)

===Return value===
A default-constructed {{tt|polymorphic_allocator}} object.

=== Notes ===
{{tt|polymorphic_allocator}}s do not propagate on container copy construction.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc select_on_container_copy_construction}}
{{dsc end}}</text>
      <sha1>oqbdbjh616gh0zc3wnt9zaine8ycxpn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/pool options</title>
    <ns>0</ns>
    <id>14577</id>
    <revision>
      <id>82155</id>
      <timestamp>2015-12-05T08:46:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="1545">{{cpp/experimental/pmr/title|pool_options}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |1=
struct pool_options {
    std::size_t max_blocks_per_chunk = 0;
    std::size_t largest_required_pool_block = 0;
};
}}

The struct {{tt|std::experimental::pmr::pool_options}} contains a set of constructor options for {{lc|std::experimental::pmr::synchronized_pool_resource}} and {{lc|std::experimental::pmr::unsynchronized_pool_resource}}.

===Data members===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|std::size_t}} max_blocks_per_chunk | the maximum number of blocks that will be allocated at once from the upstream memory resource to replenish a pool}}
{{dsc mem obj | nolink=true | {{dsc small|std::size_t}} largest_required_pool_block | the largest allocation size that is required to be fulfilled through the pooling mechanism}}
{{dsc end}}

If the value of {{tt|max_blocks_per_chunk}} is zero or greater than an implementation-defined limit, that limit is used instead. The implementation may use a smaller value than is specified and may use different values for different pools.

If the value of {{tt|largest_required_pool_block}} is zero or greater than an implementation-defined limit, that limit is used instead. The implementation may use a threshold greater than specified in this field.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/pmr/dsc synchronized_pool_resource}}
{{dsc inc|cpp/experimental/pmr/dsc unsynchronized_pool_resource}}
{{dsc end}}</text>
      <sha1>ojgcmbtbndoxf8fid0ir8hxh4dfllo0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/promise</title>
    <ns>0</ns>
    <id>14397</id>
    <revision>
      <id>80149</id>
      <timestamp>2015-07-30T21:56:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>disambiguate</comment>
      <text xml:space="preserve" bytes="51">{{cpp/experimental/fund_conc_disambiguate|promise}}</text>
      <sha1>7sfw8o1pq3tc79q1lj0qlblrcq7yy2w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const</title>
    <ns>0</ns>
    <id>14268</id>
    <revision>
      <id>80296</id>
      <parentid>80293</parentid>
      <timestamp>2015-08-03T13:04:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>I know it's from the proposal, but there's no need to use endl here</comment>
      <text xml:space="preserve" bytes="4806">{{cpp/experimental/title|propagate_const}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}
{{dcl begin}}
{{dcl header|experimental/propagate_const}}
{{dcl | since=libfund_ts_2| 1=
template&lt;class T&gt;
class propagate_const;
}}
{{dcl end}}

{{tt|std::experimental::propagate_const}} is a const-propagating wrapper for pointers and pointer-like objects. It treats the wrapped pointer as a pointer to {{tt|const}} when accessed through a {{tt|const}} access path, hence the name.

The class satisfies the requirements of {{concept|MoveConstructible}} and {{concept|MoveAssignable}} if the underlying pointer-like type satisfies the corresponding concept, but {{tt|propagate_const}} is neither {{concept|CopyConstructible}} nor {{concept|CopyAssignable}}.

{{par begin}}
{{par hreq}}
{{par req | {{tt|T}} must be an object pointer type or a pointer-like class type, as specified below. The program is ill-formed if {{tt|T}} is an array type, reference type, pointer to function type, pointer to (possibly cv-qualified) {{tt|void}}, or if {{c|decltype(*std::declval&lt;T&amp;&gt;())}} is not an lvalue reference type.}}
{{par end}}

=== Requirements on pointer-like class types ===
If {{tt|T}} is a class type, it must satisfy the requirements in this subsection.

Given
* {{tt|t}}, a modifiable [[cpp/language/value_category|lvalue expression]] of type {{tt|T}}
* {{tt|ct}}, a {{tt|const T&amp;}} bound to {{tt|T}}
* {{tt|element_type}}, an object type

The following expressions must be valid and have their specified effects:

{|table class=wikitable
|-
!Expression||Return type||Pre-conditions||Operational semantics
|-
| {{c|1=t.get()}}
| {{tt|element_type*}}
| 
| 
|-
| {{c|1=ct.get()}}
| {{tt|element_type*}} or {{tt|const element_type*}}
| 
| {{c|t.get() {{==}} ct.get()}}
|-
| {{c|1=*t}}
| {{tt|element_type&amp;}}
| {{c|t.get() !{{=}} nullptr}}
| {{tt|*t}} refers to the same object as {{tt|*(t.get())}}
|-
| {{c|1=*ct}}
| {{tt|element_type&amp;}} or {{tt|const element_type&amp;}}
| {{c|ct.get() !{{=}} nullptr}}
| {{tt|*ct}} refers to the same object as {{tt|*(ct.get())}}
|-
| {{c|1=t.operator-&gt;()}}
| {{tt|element_type*}}
| {{c|t.get() !{{=}} nullptr}}
| {{c|t.operator-&gt;() {{==}} t.get()}}
|-
| {{c|1=ct.operator-&gt;()}}
| {{tt|element_type*}} or {{tt|const element_type*}}
| {{c|ct.get() !{{=}} nullptr}}
| {{c|ct.operator-&gt;() {{==}} ct.get()}}
|-
| {{c|1=(bool)t}}
| {{tt|bool}}
| 
| {{c|(bool)t}} is equivalent to {{c|t.get() !{{=}} nullptr}}
|-
| {{c|1=(bool)ct}}
| {{tt|bool}}
| 
| {{c|(bool)ct}} is equivalent to {{c|ct.get() !{{=}} nullptr}}
|}

Further, {{tt|T}} and {{tt|const T}} shall be contextually convertible to {{tt|bool}}.

In addition, if {{tt|T}} is implicitly convertible to {{tt|element_type*}}, then {{tt|(element_type*)t}} shall be equal to {{tt|t.get()}}. Similarly, if {{tt|const T}} is implicitly convertible to {{tt|const element_type*}}, then {{tt|(const element_type*)ct}} shall be equal to {{tt|ct.get()}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|element_type}} | {{c|std::remove_reference_t&lt;decltype(*std::declval&lt;T&amp;&gt;())&gt;}}, the type of the object pointed to by {{tt|T}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/propagate_const/dsc constructor}}
{{dsc inc | cpp/experimental/propagate_const/dsc destructor}}
{{dsc inc | cpp/experimental/propagate_const/dsc operator{{=}}}}
{{dsc inc | cpp/experimental/propagate_const/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/experimental/propagate_const/dsc get}}
{{dsc inc | cpp/experimental/propagate_const/dsc operator bool}}
{{dsc inc | cpp/experimental/propagate_const/dsc operator*}}
{{dsc inc | cpp/experimental/propagate_const/dsc operator element_type*}}

{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/propagate_const/dsc operator_cmp}}
{{dsc inc | cpp/experimental/propagate_const/dsc swap2}}
{{dsc inc | cpp/experimental/propagate_const/dsc get_underlying}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/propagate_const/dsc hash}}
{{dsc inc | cpp/experimental/propagate_const/dsc cmp_func}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;experimental/propagate_const&gt;

struct X
{
    void g() const { std::cout &lt;&lt; &quot;g (const)\n&quot;; }
    void g() { std::cout &lt;&lt; &quot;g (non-const)\n&quot;; }
};

struct Y
{
    Y() : m_ptrX(std::make_unique&lt;X&gt;()) { }

    void f() const
    {
        std::cout &lt;&lt; &quot;f (const)\n&quot;;
        m_ptrX-&gt;g();
    }

    void f()
    {
        std::cout &lt;&lt; &quot;f (non-const)\n&quot;;
        m_ptrX-&gt;g();
    }
    
    std::experimental::propagate_const&lt;std::unique_ptr&lt;X&gt;&gt; m_ptrX;
};
    
int main()
{
    Y y;
    y.f();
    
    const Y cy;
    cy.f();
}
 | output=
f (non-const)
g (non-const)
f (const)
g (const)
}}</text>
      <sha1>2o4lgdk8z17t8l4o0ui3eyb4yah789o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/cmp func</title>
    <ns>0</ns>
    <id>14296</id>
    <revision>
      <id>79580</id>
      <parentid>79559</parentid>
      <timestamp>2015-07-11T04:56:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>split</comment>
      <text xml:space="preserve" bytes="2548">{{cpp/title | equal_to, not_equal_to, less, greater, less_equal, greater_equal&lt;small&gt;(std::experimental::propagate_const)&lt;/small&gt;}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}
{{dcl begin}}
{{dcl header|experimental/propagate_const}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct equal_to&lt;std::experimental::propagate_const&lt;T&gt;&gt;;
}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct not_equal_to&lt;std::experimental::propagate_const&lt;T&gt;&gt;;
}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct less&lt;std::experimental::propagate_const&lt;T&gt;&gt;;
}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct greater&lt;std::experimental::propagate_const&lt;T&gt;&gt;;
}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct less_equal&lt;std::experimental::propagate_const&lt;T&gt;&gt;;
}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct greater_equal&lt;std::experimental::propagate_const&lt;T&gt;&gt;;
}}
{{dcl end}}

The standard comparison function objects are partially specialized for {{c|std::experimental::propagate_const&lt;T&gt;}}.

Let {{c|p.t_}} denote the pointer-like object wrapped by a {{c|std::experimental::propagate_const&lt;T&gt; p}}, then given objects {{tt|p}} and {{tt|q}} of type {{c|std::experimental::propagate_const&lt;T&gt;}}, the following shall hold:
* {{c|1=std::equal_to&lt;std::experimental::propagate_const&lt;T&gt;&gt;()(p, q) == std::equal_to&lt;T&gt;()(p.t_, q.t_)}}
* {{c|1=std::not_equal_to&lt;std::experimental::propagate_const&lt;T&gt;&gt;()(p, q) == std::not_equal_to&lt;T&gt;()(p.t_, q.t_)}}
* {{c|1=std::less&lt;std::experimental::propagate_const&lt;T&gt;&gt;()(p, q) == std::less&lt;T&gt;()(p.t_, q.t_)}}
* {{c|1=std::greater&lt;std::experimental::propagate_const&lt;T&gt;&gt;()(p, q) == std::greater&lt;T&gt;()(p.t_, q.t_)}}
* {{c|1=std::less_equal&lt;std::experimental::propagate_const&lt;T&gt;&gt;()(p, q) == std::less_equal&lt;T&gt;()(p.t_, q.t_)}}
* {{c|1=std::greater_equal&lt;std::experimental::propagate_const&lt;T&gt;&gt;()(p, q) == std::greater_equal&lt;T&gt;()(p.t_, q.t_)}}

===Notes===

These specializations ensure that when {{tt|T}} is a pointer type, specializations of these class templates for {{c|std::experimental::propagate_const&lt;T&gt;}} yield a total order, even if the corresponding built-in operators do not.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc equal_to}}
{{dsc inc | cpp/utility/functional/dsc not_equal_to}}
{{dsc inc | cpp/utility/functional/dsc less}}
{{dsc inc | cpp/utility/functional/dsc greater}}
{{dsc inc | cpp/utility/functional/dsc less_equal}}
{{dsc inc | cpp/utility/functional/dsc greater_equal}}
{{dsc end}}</text>
      <sha1>9ln2itqho0bk7d6khvweeyl7fddg014</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/get</title>
    <ns>0</ns>
    <id>14287</id>
    <revision>
      <id>79578</id>
      <parentid>79577</parentid>
      <timestamp>2015-07-11T04:55:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>duh</comment>
      <text xml:space="preserve" bytes="543">{{cpp/experimental/propagate_const/title|get}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}
{{dcl begin}}
{{dcl| since=libfund_ts_2 | 1=
constexpr element_type* get();
}}
{{dcl| since=libfund_ts_2 | 1=
constexpr const element_type* get() const;
}}
{{dcl end}}

Returns a pointer to the object pointed to by the wrapped pointer-like object, {{tt|t_}}.

===Parameters===
(none)

===Return value===
If {{tt|T}} is an object pointer type, then {{c|t_}}. Otherwise, {{c|t_.get()}}.


===Example===
{{example |
 | code=
 | output=
}}</text>
      <sha1>9er73twxgzs33ydm2kh9g0o376y34a9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/get underlying</title>
    <ns>0</ns>
    <id>14297</id>
    <revision>
      <id>91478</id>
      <parentid>79579</parentid>
      <timestamp>2017-03-31T19:46:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="653">{{cpp/experimental/title | get_underlying}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}

{{dcl begin}}
{{dcl | since=libfund_ts_2 |
template&lt; class T &gt;
constexpr T&amp; get_underlying(propagate_const&lt;T&gt;&amp; pt);
}}
{{dcl | since=libfund_ts_2 |
template&lt; class T &gt;
constexpr const T&amp; get_underlying(const propagate_const&lt;T&gt;&amp; pt);
}}
{{dcl end}}

Retrieves a reference to the pointer-like object stored in a {{tt|propagate_const}}.

===Parameters===
{{par begin}}
{{par | pt | a {{tt|propagate_const}} object}}
{{par end}} 

===Return value===
A reference to the pointer-like object stored in {{tt|pt}}.

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>717j0m4i0e423g57fcyq1uqy2x0urjm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/hash</title>
    <ns>0</ns>
    <id>14295</id>
    <revision>
      <id>79558</id>
      <timestamp>2015-07-10T06:29:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="870">{{cpp/title | hash&lt;small&gt;(std::experimental::propagate_const)&lt;/small&gt;}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}
{{dcl begin}}
{{dcl header|experimental/propagate_const}}
{{dcl | since=libfund_ts_2 | 1=
template&lt;class T&gt; struct hash&lt;std::experimental::propagate_const&lt;T&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for {{c|std::experimental::propagate_const&lt;T&gt;}} allows users to obtain hashes of objects of type {{c|std::experimental::propagate_const&lt;T&gt;}}.

For a given {{c|std::experimental::propagate_const&lt;T&gt; p}}, this specialization ensures that  {{c|1=std::hash&lt;std::experimental::propagate_const&lt;T&gt;&gt;()(p) == std::hash&lt;T&gt;()(p.t_)}}, where {{c|p.t_}} is the pointer-like object wrapped by {{tt|p}}.

===Example===
{{example
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}</text>
      <sha1>85mbna9q573jk91tssigbf7im6fnql5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/operator bool</title>
    <ns>0</ns>
    <id>14290</id>
    <revision>
      <id>79520</id>
      <timestamp>2015-07-08T09:44:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="555">{{cpp/experimental/propagate_const/title|operator bool}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}

{{ddcl | since=libfund_ts_2| 1=
constexpr explicit operator bool() const;
}}

Checks whether the wrapped pointer-like object, {{c|t_}}, is null.

===Parameters===
(none)

===Return value===
{{c|true}} if the wrapped object is not null, otherwise {{c|false}}. Equivalent to {{c|(bool)t_}}.


===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/propagate_const/dsc get}}
{{dsc end}}</text>
      <sha1>5pqaibvx6oynz199ygummub6hcoly3u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/operator cmp</title>
    <ns>0</ns>
    <id>14294</id>
    <revision>
      <id>79556</id>
      <timestamp>2015-07-10T02:14:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="4679">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::experimental::propagate_const)&lt;/small&gt;}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}

{{dcl begin}}
{{dcl | since=libfund_ts_2 | num=1 | 1=
template &lt;class T&gt;
constexpr bool operator==(const propagate_const&lt;T&gt;&amp; pt, nullptr_t);
}}
{{dcl | since=libfund_ts_2 | num=2 | 1=
template &lt;class T&gt;
constexpr bool operator==(nullptr_t, const propagate_const&lt;T&gt;&amp; pt);
}}
{{dcl | since=libfund_ts_2 | num=3 | 1=
template &lt;class T&gt;
constexpr bool operator!=(const propagate_const&lt;T&gt;&amp; pt, nullptr_t);
}}
{{dcl | since=libfund_ts_2 | num=4 | 1=
template &lt;class T&gt;
constexpr bool operator!=(nullptr_t, const propagate_const&lt;T&gt;&amp; pt);
}}
{{dcl | since=libfund_ts_2 | num=5 | 1=
template &lt;class T, class U&gt;
constexpr bool operator==(const propagate_const&lt;T&gt;&amp; pt, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=6 | 1=
template &lt;class T, class U&gt;
constexpr bool operator!=(const propagate_const&lt;T&gt;&amp; pt, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=7 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&lt;(const propagate_const&lt;T&gt;&amp; pt, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=8 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&gt;(const propagate_const&lt;T&gt;&amp; pt, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=9 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&lt;=(const propagate_const&lt;T&gt;&amp; pt, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=10 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&gt;=(const propagate_const&lt;T&gt;&amp; pt, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=11 | 1=
template &lt;class T, class U&gt;
constexpr bool operator==(const propagate_const&lt;T&gt;&amp; pt, const U&amp; u);
}}
{{dcl | since=libfund_ts_2 | num=12 | 1=
template &lt;class T, class U&gt;
constexpr bool operator!=(const propagate_const&lt;T&gt;&amp; pt, const U&amp; u);
}}
{{dcl | since=libfund_ts_2 | num=13 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&lt;(const propagate_const&lt;T&gt;&amp; pt, const U&amp; u);
}}
{{dcl | since=libfund_ts_2 | num=14 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&gt;(const propagate_const&lt;T&gt;&amp; pt, const U&amp; u);
}}
{{dcl | since=libfund_ts_2 | num=15 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&lt;=(const propagate_const&lt;T&gt;&amp; pt, const U&amp; u);
}}
{{dcl | since=libfund_ts_2 | num=16 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&gt;=(const propagate_const&lt;T&gt;&amp; pt, const U&amp; u);
}}
{{dcl | since=libfund_ts_2 | num=17 | 1=
template &lt;class T, class U&gt;
constexpr bool operator==(const T&amp; t, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=18 | 1=
template &lt;class T, class U&gt;
constexpr bool operator!=(const T&amp; t, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=19 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&lt;(const T&amp; t, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=20 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&gt;(const T&amp; t, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=21 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&lt;=(const T&amp; t, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl | since=libfund_ts_2 | num=22 | 1=
template &lt;class T, class U&gt;
constexpr bool operator&gt;=(const T&amp; t, const propagate_const&lt;U&gt;&amp; pu);
}}
{{dcl end}}

Compares the wrapped pointers of two {{tt|propagate_const}}s, or between a {{tt|propagate_const}} and {{c|nullptr}}, or between a {{tt|propagate_const}} and another object.

@1-4@ Equality comparison for a {{tt|propagate_const}} and {{c|nullptr}}.

@5-6@ Equality comparison for two {{tt|propagate_const}}s

@7-10@ Ordered comparison for two {{tt|propagate_const}}s

@11-14@ Equality comparison for a {{tt|propagate_const}} and another object.

@15-22@ Equality comparison for a {{tt|propagate_const}} and another object.

===Parameters===
{{par begin}}
{{par | pt, pu | {{tt|propagate_const}}s to compare }}
{{par | t, u | other objects to compare}}
{{par end}} 

===Return value===
Let {{tt|t_}} denote the underlying pointer-like object wrapped by a {{tt|propagate_const}}.

@1@ {{c|pt.t_ {{==}} nullptr}}
@2@ {{c|nullptr {{==}} pt.t_}}
@3@ {{c|pt.t_ !{{=}} nullptr}}
@4@ {{c|nullptr !{{=}} pt.t_}}
@5@ {{c|1=pt.t_ == pu.t_}}
@6@ {{c|1=pt.t_ != pu.t_}}
@7@ {{c|1=pt.t_ &lt; pu.t_}}
@8@ {{c|1=pt.t_ &gt; pu.t_}}
@9@ {{c|1=pt.t_ &lt;= pu.t_}}
@10@ {{c|1=pt.t_ &gt;= pu.t_}}
@11@ {{c|1=pt.t_ == u}}
@12@ {{c|1=pt.t_ != u}}
@13@ {{c|1=pt.t_ &lt; u}}
@14@ {{c|1=pt.t_ &gt; u}}
@15@ {{c|1=pt.t_ &lt;= u}}
@16@ {{c|1=pt.t_ &gt;= u}}
@17@ {{c|1=t == pu.t_}}
@18@ {{c|1=t != pu.t_}}
@19@ {{c|1=t &lt; pu.t_}}
@20@ {{c|1=t &gt; pu.t_}}
@21@ {{c|1=t &lt;= pu.t_}}
@22@ {{c|1=t &gt;= pu.t_}}</text>
      <sha1>9ocjz4917tmbf4yy2n6qwyyk9frhi3g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/operator element type*</title>
    <ns>0</ns>
    <id>14288</id>
    <revision>
      <id>79517</id>
      <timestamp>2015-07-08T09:37:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="1048">{{cpp/experimental/propagate_const/title|operator element_type*|operator const element_type*}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}
{{dcl begin}}
{{dcl | num = 1 | since=libfund_ts_2 | 1=
constexpr operator element_type*();
}}
{{dcl | num = 2 | since=libfund_ts_2 | 1=
constexpr operator const element_type*() const;
}}
{{dcl end}}

Provides implicit conversions to {{c|element_type*}} and {{c|const element_type*}}.

1) This function does not participate in overload resolution unless {{tt|T}} is an object pointer type or is implicitly convertible to {{c|element_type*}}.

2) This function does not participate in overload resolution unless {{tt|T}} is an object pointer type or is implicitly convertible to {{c|const element_type*}}.

===Parameters===
(none)

===Return value===
A pointer to the object pointed to by the wrapped pointer-like object, i.e., {{c|this-&gt;get()}}


===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/propagate_const/dsc get}}
{{dsc end}}</text>
      <sha1>bt9ogbybmiajaas83mu5url5irgnje8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/operator*</title>
    <ns>0</ns>
    <id>14289</id>
    <revision>
      <id>79576</id>
      <parentid>79557</parentid>
      <timestamp>2015-07-11T04:54:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>split</comment>
      <text xml:space="preserve" bytes="1038">{{cpp/experimental/propagate_const/title|operator*|operator-&gt;}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}
{{dcl begin}}
{{dcl | num = 1 | since=libfund_ts_2 | 1=
constexpr element_type&amp; operator*();
}}
{{dcl | num = 2 | since=libfund_ts_2 | 1=
constexpr const element_type&amp; operator*() const;
}}
{{dcl | num = 3 | since=libfund_ts_2 | 1=
constexpr element_type* operator-&gt;();
}}
{{dcl | num = 4 | since=libfund_ts_2 | 1=
constexpr const element_type* operator-&gt;() const;
}}
{{dcl end}}

Provides access to the object pointed to by the pointer-like object {{c|*this}} wraps.

The behavior of these functions is undefined if {{c|get() {{==}} nullptr}}.

===Parameters===
(none)

===Return value===
1-2) The object pointed to by the wrapped pointer-like object, i.e., {{c|*get()}}

3-4) A pointer to the object pointed to by the wrapped pointer-like object, i.e., {{c|get()}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/propagate_const/dsc get}}
{{dsc end}}</text>
      <sha1>mgrudof0wbey9p8l0qfqdfgrralsyny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/operator=</title>
    <ns>0</ns>
    <id>14291</id>
    <revision>
      <id>79522</id>
      <parentid>79521</parentid>
      <timestamp>2015-07-08T09:50:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Parameters */ fix</comment>
      <text xml:space="preserve" bytes="1567">{{cpp/experimental/propagate_const/title|operator{{=}}}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=libfund_ts_2 | 1= 
constexpr propagate_const&amp; operator=( propagate_const&amp;&amp; p ) = default;
}}
{{dcl | num=2 | since=libfund_ts_2 | 1= 
template&lt;class U&gt;
constexpr propagate_const&amp; operator=( propagate_const&lt;U&gt;&amp;&amp; pu );
}}
{{dcl | num=3 | since=libfund_ts_2 | 1= 
template&lt;class U&gt;
constexpr propagate_const&amp; operator=( U&amp;&amp; u );
}}
{{dcl | num=4 | since=libfund_ts_2| 1= 
propagate_const&amp; operator=( const propagate_const&amp; ) = delete;
}}
{{dcl end}}

Let {{tt|t_}} designate the private data member that is the wrapped pointer-like object.

1) Explicitly defaulted move assignment operator that move assigns {{c|this-&gt;t_}} from {{c|p.t_}}.

2) Assigns {{c|std::move(pu.t_)}} to {{c|this-&gt;t_}}.

This function does not participate in overload resolution unless {{tt|U}} is implicitly convertible to {{tt|T}}.

3) Assigns {{c|std::forward&lt;U&gt;(u)}} to {{c|this-&gt;t_}}.

This constructor does not participate in overload resolution unless {{tt|U}} is implicitly convertible to {{tt|T}} and {{c|std::decay_t&lt;U&gt;}} is not a specialization of {{tt|propagate_const}}

4) Copy assignment operator is explicitly deleted.

===Parameters===
{{par begin}}
{{par | p  | another {{tt|propagate_const}} object to move from }}
{{par | pu | another {{tt|propagate_const}} object of a different specialization to move from }}
{{par | u  | another object to assign to the contained pointer}}
{{par end}}

=== Return value ===
{{c|*this}}.</text>
      <sha1>lpkg2t6iedje7y00sufu88ljtuol9v0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/propagate const</title>
    <ns>0</ns>
    <id>14286</id>
    <revision>
      <id>79514</id>
      <timestamp>2015-07-08T09:28:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="2029">{{cpp/experimental/propagate_const/title|propagate_const}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=libfund_ts_2 | 1= 
constexpr propagate_const() = default;
}}
{{dcl | num=2 | since=libfund_ts_2 | 1= 
constexpr propagate_const( propagate_const&amp;&amp; p ) = default;
}}
{{dcl | num=3 | since=libfund_ts_2 | 1= 
template&lt;class U&gt;
/* see below */ constexpr propagate_const( propagate_const&lt;U&gt;&amp;&amp; pu );
}}
{{dcl | num=4 | since=libfund_ts_2 | 1= 
template&lt;class U&gt;
/* see below */ constexpr propagate_const( U&amp;&amp; u );
}}
{{dcl | num=5 | since=libfund_ts_2| 1= 
propagate_const( const propagate_const&amp; ) = delete;
}}
{{dcl end}}

Let {{tt|t_}} designate the private data member that is the wrapped pointer-like object.

1) Constructs an {{tt|propagate_const}}, default-initializing {{c|this-&gt;t_}}.

2) Explicitly defaulted move constructor that move constructs {{c|this-&gt;t_}} from {{c|p.t_}}.

3) Initializes {{c|this-&gt;t_}} as if by direct-non-list-initialization from the expression {{c|std::move(pu.t_)}}

This constructor does not participate in overload resolution unless {{c|std::is_constructible&lt;T, U&amp;&amp;&gt;::value}} is {{tt|true}}, and is {{tt|explicit}} if and only if {{c|std::is_convertible&lt;U&amp;&amp;, T&gt;::value}} is {{tt|false}}.

4) Initializes {{c|this-&gt;t_}} as if by direct-non-list-initialization with the expression {{c|std::forward&lt;U&gt;(u)}}.

This constructor does not participate in overload resolution unless {{c|std::is_constructible&lt;T, U&amp;&amp;&gt;::value}} is {{tt|true}} and {{c|std::decay_t&lt;U&gt;}} is not a specialization of {{tt|propagate_const}}. This constructor is {{tt|explicit}} if and only if {{c|std::is_convertible&lt;U&amp;&amp;, T&gt;::value}} is {{tt|false}}.

5) Copy constructor is explicitly deleted.

===Parameters===
{{par begin}}
{{par | p  | another {{tt|propagate_const}} object to move from }}
{{par | pu | another {{tt|propagate_const}} object of a different specialization to move from }}
{{par | u  | another object to initialize the contained pointer with}}
{{par end}}</text>
      <sha1>5s244bpbo4uhbm7ncad13o7n5f3ibax</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/swap</title>
    <ns>0</ns>
    <id>14292</id>
    <revision>
      <id>91433</id>
      <parentid>79525</parentid>
      <timestamp>2017-03-31T19:43:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="568">{{cpp/experimental/propagate_const/title|swap}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}

{{ddcl | since=libfund_ts_2 | 1= 
constexpr void swap(propagate_const &amp; pt);
}}

Swaps the wrapped pointer with that of {{tt|pt}}. Let {{tt|t_}} designate the private data member that is the wrapped pointer-like object, then this function is equivalent to {{c|swap(t_, pt.t_)}}.

===Parameters===
{{par begin}}
{{par | pt  | another {{tt|propagate_const}} object to swap with }}
{{par end}}

===Exceptions===
{{unreviewed noexcept|noexcept(swap(t_, pt.t_))}}</text>
      <sha1>njyrsj17b4u9muo94p6j7wi78rzw3er</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/propagate const/swap2</title>
    <ns>0</ns>
    <id>14293</id>
    <revision>
      <id>92121</id>
      <parentid>91328</parentid>
      <timestamp>2017-04-05T22:22:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="1009">{{cpp/experimental/title | swap&lt;small&gt;(std::experimental::propagate_const)&lt;/small&gt;}}
{{cpp/experimental/lib extensions 2/propagate_const/navbar}}

{{ddcl | since=libfund_ts_2 |
template&lt; class T &gt;
constexpr void swap( std::experimental::propagate_const&lt;T&gt;&amp; lhs,
                     std::experimental::propagate_const&lt;T&gt;&amp; rhs ) noexcept(/* see below */);
}}

Specializes the {{lc|swap}} algorithm for {{lc|std::experimental::propagate_const}}. Swaps the pointers of {{tt|lhs}} and {{tt|rhs}}. Let {{tt|t_}} designate the private data member that is the wrapped pointer-like object, then this function is equivalent to {{c|swap(lhs.t_, rhs.t_)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{tt|propagate_const}}s whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{noexcept|noexcept(swap(lhs.t_, rhs.t_))}}

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/experimental/propagate_const/dsc swap}}
{{dsc end}}</text>
      <sha1>fzif6bqiis6v91ptzyb0y6f08cfm4w3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/randint</title>
    <ns>0</ns>
    <id>14520</id>
    <revision>
      <id>82540</id>
      <parentid>82538</parentid>
      <timestamp>2015-12-21T21:37:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>-endl, fix output to match code, use correct type</comment>
      <text xml:space="preserve" bytes="1316">{{cpp/experimental/title | randint}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{dcl begin}}
{{dcl header |experimental/random}}
{{dcl| since=libfund_ts_2 | 1=
template &lt;class IntType&gt;
IntType randint(IntType a, IntType b);
}}
{{dcl end}}

Generates a random integer in the closed interval {{tt|[a, b]}}.

=== Parameters ===
{{par begin}}
{{par | a, b | integer values specifying the range}}
{{par end}}

===Return value===
A random integer {{math|i}} in the closed interval {{tt|[a, b]}}, produced using a thread-local instance of {{c|std::uniform_int_distribution&lt;IntType&gt;}} invoked with the [[cpp/experimental/lib extensions 2#per-thread engine|per-thread random number engine]].

=== Remarks ===
If {{tt|IntType}} is not one of {{c|short}}, {{c|int}}, {{c|long}}, {{c|long long}}, {{c|unsigned short}}, {{c|unsigned int}}, {{c|unsigned long}}, or {{c|unsigned long long}}, the program is ill-formed.

The behavior is undefined if {{c|a &gt; b}}.

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;experimental/random&gt;

int main()
{
    int random_number = std::experimental::randint(100, 999);
    std::cout &lt;&lt; &quot;random 3-digit number: &quot; &lt;&lt; random_number &lt;&lt; '\n';
}
|p=true
 |output=
random 3-digit number: 273
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc reseed}}
{{dsc end}}</text>
      <sha1>4vfw3rr2c7pyghcmmyihghiboeawfru</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges</title>
    <ns>0</ns>
    <id>15755</id>
    <revision>
      <id>89682</id>
      <parentid>89394</parentid>
      <timestamp>2017-01-23T09:05:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Concepts */</comment>
      <text xml:space="preserve" bytes="17050">{{title | Extensions for ranges}}
{{cpp/experimental/ranges/navbar}}

The C++ Extensions for Ranges, ISO/IEC TS 21425:XXXX, specifies one modification to the core language and defines new components for the C++ standard library listed on this page.

The Ranges TS is based on the C++14 standard as modified by the [[cpp/language/constraints | Concepts TS]].

==== Core language changes ====
The Ranges TS modifies the specification of [[cpp/language/range-for | the range-based {{c | for}} loop]] to permit differently typed begin and end iterators. This change permits the use of sentinels and is also present in C++17.

==== Concepts ====

{{dsc begin}}
{{dsc h2 | Core language concepts}}
{{dsc header | experimental/ranges/concepts}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Same}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc DerivedFrom}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc ConvertibleTo}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc CommonReference}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Common}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Integral}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc SignedIntegral}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc UnsignedIntegral}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Assignable}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Swappable}}
{{dsc h2 | Comparison concepts}}
{{dsc header | experimental/ranges/concepts}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Boolean}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc WeaklyEqualityComparable}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc EqualityComparable}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc StrictTotallyOrdered}}
{{dsc h2 | Object concepts}}
{{dsc header | experimental/ranges/concepts}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Destructible}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Constructible}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc DefaultConstructible}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc MoveConstructible}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc CopyConstructible}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Movable}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Copyable}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Semiregular}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Regular}}
{{dsc h2 | Callable concepts}}
{{dsc header | experimental/ranges/concepts}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Invocable}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Predicate}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc Relation}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc StrictWeakOrder}}
{{dsc h2 | Random number generator concept}}
{{dsc header | experimental/ranges/random}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/concepts/dsc UniformRandomNumberGenerator}}
{{dsc end}}

==== General utilities ====
{{dsc begin}}
{{dsc h2 | Utility components}}
{{dsc header | experimental/ranges/utility}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/utility/dsc swap}}
{{dsc inc | cpp/experimental/ranges/utility/dsc exchange}}
{{dsc h2 | Function objects}}
{{dsc header | experimental/ranges/functional}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/functional/dsc invoke}}
{{dsc inc | cpp/experimental/ranges/functional/dsc equal_to}}
{{dsc inc | cpp/experimental/ranges/functional/dsc not_equal_to}}
{{dsc inc | cpp/experimental/ranges/functional/dsc greater}}
{{dsc inc | cpp/experimental/ranges/functional/dsc less}}
{{dsc inc | cpp/experimental/ranges/functional/dsc greater_equal}}
{{dsc inc | cpp/experimental/ranges/functional/dsc less_equal}}
{{dsc inc | cpp/experimental/ranges/functional/dsc identity}}
{{dsc h2 | Metaprogramming and type traits}}
{{dsc header | type_traits}}
{{dsc namespace | std}}
{{dsc inc | cpp/experimental/ranges/type_traits/dsc is_swappable}}
{{dsc inc | cpp/experimental/ranges/type_traits/dsc common_reference}}
{{dsc inc | cpp/experimental/ranges/type_traits/dsc common_type}}
{{dsc h2 | Tagged pairs and tuples}}
{{dsc namespace | std::experimental::ranges}}
{{dsc header | experimental/ranges/utility}}
{{dsc inc | cpp/experimental/ranges/utility/dsc TagSpecifier}}
{{dsc inc | cpp/experimental/ranges/utility/dsc TaggedType}}
{{dsc inc | cpp/experimental/ranges/utility/dsc tagged}}
{{dsc inc | cpp/experimental/ranges/utility/dsc tagged_pair}}
{{dsc inc | cpp/experimental/ranges/utility/dsc make_tagged_pair}}
{{dsc header | experimental/ranges/tuple}}
{{dsc inc | cpp/experimental/ranges/utility/dsc tagged_tuple}}
{{dsc inc | cpp/experimental/ranges/utility/dsc make_tagged_tuple}}
{{dsc header | experimental/ranges/algorithm}}
{{dsc namespace | std::experimental::ranges::tag}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc tags}}
{{dsc end}}

==== Iterators ====
{{dsc begin}}
{{dsc header | experimental/ranges/iterator}}
{{dsc h2 | Iterator and range concepts}} &lt;!--- no actual wording that says it lives in &lt;.../iterator&gt;...or which namespaces they live in ---&gt;
{{dsc namespace | std::experimental::ranges}}
{{dsc h3 | Iterator concepts}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Readable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Writable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc WeaklyIncrementable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Incrementable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Sentinel}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc SizedSentinel}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc InputIterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc OutputIterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc ForwardIterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc BidirectionalIterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc RandomAccessIterator}}
{{dsc h3 | Indirect callable concepts}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectInvocable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectPredicate}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectRelation}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectStrictWeakOrder}}
{{dsc h3 | Common algorithm requirements}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectlyMovable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectlyMovableStorable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectlyCopyable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectlyCopyableStorable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectlySwappable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc IndirectlyComparable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Permutable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Mergeable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Sortable}}
{{dsc h3 | Range concepts}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc Range}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc SizedRange}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc View}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc BoundedRange}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc InputRange}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc OutputRange}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc ForwardRange}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc BidirectionalRange}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc RandomAccessRange}}
{{dsc h3 | Concept utilities}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc indirect_result_of}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc projected}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc disable_sized_sentinel}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc disable_sized_range}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc view_base}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc enable_view}}

{{dsc h2 | Iterator primitives}}
{{dsc h3 | Iterator utilities}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc iter_move}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc iter_swap}}
{{dsc h3 | Iterator traits}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc difference_type}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc value_type}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc iterator_category}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc iterator_traits}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc reference_t}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc rvalue_reference_t}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc iter_common_reference_t}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc is_indirectly_movable}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc is_indirectly_swappable}}
{{dsc h3 | Iterator category tags}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc iterator_tags}}
{{dsc h3 | {{lc | std::iterator_traits}} specializations}}
{{dsc namespace | std}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc std_iter_traits}}
{{dsc h3 | Iterator operations}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc advance}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc distance}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc next}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc prev}}
{{dsc h2 | Iterator adaptors}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc reverse_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc back_insert_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc front_insert_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc insert_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc move_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc move_sentinel}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc common_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc counted_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc default_sentinel}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc dangling}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc safe_iterator_t}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc unreachable}}
{{dsc h2 | Stream iterators}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc istream_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc ostream_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc istreambuf_iterator}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc ostreambuf_iterator}}

{{dsc h2 | Range access}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc begin}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc end}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc rbegin}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc rend}}
{{dsc h2 | Range primitives}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc iterator_t}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc sentinel_t}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc distance}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc size}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc empty}}
{{dsc inc | cpp/experimental/ranges/iterator/dsc data}}
{{dsc end}}

==== Algorithms ====
{{dsc begin}}
{{dsc header | experimental/ranges/algorithm}}
{{dsc h2 | Non-modifying sequence operations}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc all_any_none_of}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc for_each}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc count}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc mismatch}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc equal}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc find}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc find_end}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc find_first_of}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc search}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc search_n}}

{{dsc h2 | Modifying sequence operations}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc copy_n}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc copy_backward}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc move}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc move_backward}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc fill}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc fill_n}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc transform}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc generate}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc generate_n}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc remove}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc remove_copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc replace}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc replace_copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc swap_ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc reverse}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc reverse_copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc rotate}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc rotate_copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc shuffle}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc unique}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc unique_copy}}

{{dsc h2 | Partitioning operations}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc is_partitioned}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc partition}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc partition_copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc stable_partition}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc partition_point}}

{{dsc h2 | Sorting operations}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc is_sorted}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc is_sorted_until}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc sort}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc partial_sort}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc partial_sort_copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc stable_sort}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc nth_element}}

{{dsc h2 | Binary search operations (on sorted ranges)}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc lower_bound}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc upper_bound}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc binary_search}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc equal_range}}

{{dsc h2 | Set operations (on sorted ranges)}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc merge}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc inplace_merge}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc includes}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc set_difference}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc set_intersection}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc set_symmetric_difference}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc set_union}}

{{dsc h2 | Heap operations}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc is_heap}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc is_heap_until}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc make_heap}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc push_heap}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc pop_heap}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc sort_heap}}

{{dsc h2 | Minimum/maximum operations}}
{{dsc namespace | std::experimental::ranges}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc max}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc max_element}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc min}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc min_element}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc minmax}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc minmax_element}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc lexicographical_compare}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc is_permutation}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc next_permutation}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc prev_permutation}}
{{dsc end}}</text>
      <sha1>pz8nntm3car6nm8h3pwzjccrv3on20i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/algorithm/copy</title>
    <ns>0</ns>
    <id>16148</id>
    <revision>
      <id>89910</id>
      <parentid>89906</parentid>
      <timestamp>2017-01-29T20:04:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Complexity */ adjust</comment>
      <text xml:space="preserve" bytes="7119">{{cpp/experimental/ranges/title|copy|copy_if}}
{{cpp/experimental/ranges/navbar}}
{{dcl begin}}
{{dcl header | experimental/ranges/algorithm}}
{{dcl | since=ranges | num= 1 |1= 
template &lt; ranges::InputIterator I, ranges::Sentinel&lt;I&gt; S, ranges::WeaklyIncrementable O &gt;
  requires ranges::IndirectlyCopyable&lt;I, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(I), ranges::tag::out(O)&gt;
  copy(I first, S last, O result);
}}
{{dcl | since=ranges | num= 2 |1=
template &lt; ranges::InputRange Rng, ranges::WeaklyIncrementable O &gt;
  requires ranges::IndirectlyCopyable&lt;ranges::iterator_t&lt;Rng&gt;, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(ranges::safe_iterator_t&lt;Rng&gt;), ranges::tag::out(O)&gt; 
  copy(Rng&amp;&amp; rng, O result);
}}
{{dcl | since=ranges | num= 3 |1=
template &lt; ranges::InputIterator I, ranges::Sentinel&lt;I&gt; S, ranges::WeaklyIncrementable O,
           class Proj = ranges::identity,
           ranges::IndirectPredicate&lt;ranges::projected&lt;I, Proj&gt;&gt; Pred &gt;
  requires ranges::IndirectlyCopyable&lt;I, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(I), ranges::tag::out(O)&gt;
  copy_if(I first, S last, O result, Pred pred, Proj proj = Proj{});
}}
{{dcl | since=ranges | num= 4 |1=
template &lt; ranges::InputRange Rng, ranges::WeaklyIncrementable O,
           class Proj = ranges::identity,
           ranges::IndirectPredicate&lt;ranges::projected&lt;ranges::iterator_t&lt;Rng&gt;, Proj&gt;&gt; Pred &gt;
  requires ranges::IndirectlyCopyable&lt;iterator_t&lt;Rng&gt;, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(ranges::safe_iterator_t&lt;Rng&gt;), ranges::tag::out(O)&gt;
  copy_if(Rng&amp;&amp; rng, O result, Pred pred, Proj proj = Proj{});
}}
{{dcl end}}

Copies elements in the source range ({{tt|[first,last)}} or {{tt|rng}}) into the destination range beginning at {{tt|result}}, starting from the first element in the source range and proceeding to the last one. 

@1@ Copies all elements in the range {{tt|[first, last)}}. For each non-negative integer {{tt|n &lt; (last - first)}}, performs *(result + n) = *(first + n). The behavior is undefined if {{tt|result}} is within the range {{tt|[first, last)}}. In this case, {{lc|ranges::copy_backward}} may be used instead.
@2@ Same as {{v|1}}, but uses {{tt|rng}} as the source range, as if by {{c|ranges::copy(ranges::begin(rng), ranges::end(rng), result);}} except that {{tt|result}} may not be copied.
@3@ Only copies the elements for which the predicate {{tt|pred}} returns {{c|true}} when applied to the element's value as projected by the projection {{tt|proj}}. The order of the elements that are copied is preserved. The behavior is undefined if the source and the destination ranges overlap.
@4@ Same as {{v|3}}, but uses {{tt|rng}} as the source range, as if by {{c|ranges::copy_if(ranges::begin(rng), ranges::end(rng), result, pred, proj);}} except that {{tt|result}}, {{tt|pred}} and {{tt|proj}} may not be copied.

=== Parameters ===
{{par begin}}
{{par | first, last | the range of elements to copy}}
{{par | rng | the range of elements to copy}}
{{par | result | the beginning of the destination range}}
{{par | pred | predicate to apply to the projected elements}}
{{par | proj | projection to apply to the elements}}
{{par end}}

=== Return value ===

A {{tt|tagged_pair}} object containing the following two members:
* The first member, with the tag {{tt|tag::in}}, is the past-the-end iterator of the source range (that is, an iterator of type {{tt|I}} that compares equal to the sentinel{{tt|last}}).
* The second member, with the tag {{tt|tag::out}}, is the past-the-end iterator of the result range.

=== Complexity ===
@1@ Exactly {{c|ranges::distance(first, last)}} assignments.
@2@ Exactly {{c|ranges::distance(rng)}} assignments.
@3@ Exactly {{c|ranges::distance(first, last)}} applications of the corresponding projection and predicate.
@3@ Exactly {{c|ranges::distance(rng)}} applications of the corresponding projection and predicate.

=== Possible implementations ===

{{eq fun | 1=
template &lt;ranges::InputIterator I, ranges::Sentinel&lt;I&gt; S, ranges::WeaklyIncrementable O&gt;
  requires ranges::IndirectlyCopyable&lt;I, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(I), ranges::tag::out(O)&gt;
  copy(I first, S last, O result)
{
    for (; first != last; ++first, (void)++result)
        *result = *first;
    return {first, result};
}
 | 2=
template &lt;ranges::InputRange Rng, ranges::WeaklyIncrementable O&gt;
  requires ranges::IndirectlyCopyable&lt;ranges::iterator_t&lt;Rng&gt;, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(ranges::safe_iterator_t&lt;Rng&gt;), ranges::tag::out(O)&gt;
  copy(Rng&amp;&amp; rng, O result)
{
   return ranges::copy(ranges::begin(rng), ranges::end(rng), result);
}
 | 3=
template &lt;ranges::InputIterator I, ranges::Sentinel&lt;I&gt; S, ranges::WeaklyIncrementable O,
         class Proj = ranges::identity,
         ranges::IndirectPredicate&lt;ranges::projected&lt;I, Proj&gt;&gt; Pred&gt;
  requires ranges::IndirectlyCopyable&lt;I, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(I), ranges::tag::out(O)&gt;
  copy_if(I first, S last, O result, Pred pred, Proj proj = Proj{})
{
    for (; first != last; ++first) {
        if (ranges::invoke(pred, ranges::invoke(proj, *first))){
            *result = *first;
            ++result;
        }
    }
    return {first, result};
}
 | 4=
template &lt;ranges::InputRange Rng, ranges::WeaklyIncrementable O,
       class Proj = ranges::identity,
       ranges::IndirectPredicate&lt;ranges::projected&lt;ranges::iterator_t&lt;Rng&gt;, Proj&gt;&gt; Pred&gt;
  requires ranges::IndirectlyCopyable&lt;ranges::iterator_t&lt;Rng&gt;, O&gt;()
ranges::tagged_pair&lt;ranges::tag::in(ranges::safe_iterator_t&lt;Rng&gt;), ranges::tag::out(O)&gt;
  copy_if(Rng&amp;&amp; rng, O result, Pred pred, Proj proj = Proj{})
{
   return ranges::copy_if(ranges::begin(rng), ranges::end(rng), result, pred, proj);
}
}}

===Example===
{{example
 | The following code uses copy to both copy the contents of one vector to another and to display the resulting vector: 
 | code=
#include &lt;experimental/ranges/algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;experimental/ranges/iterator&gt;
#include &lt;numeric&gt;

int main()
{
    // see http://en.cppreference.com/w/cpp/language/namespace_alias
    namespace ranges = std::experimental::ranges;

    std::vector&lt;int&gt; from_vector(10);
    std::iota(from_vector.begin(), from_vector.end(), 0);

    std::vector&lt;int&gt; to_vector;
    ranges::copy_if(from_vector.begin(), from_vector.end(),
                    ranges::back_inserter(to_vector),
                    [](const auto i) {
                       return i % 3;
                    });
// or, alternatively,
//  std::vector&lt;int&gt; to_vector(from_vector.size());
//  std::copy(from_vector, to_vector.begin());

    std::cout &lt;&lt; &quot;to_vector contains: &quot;;

    ranges::copy(to_vector, ranges::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';
}
 | output=
to_vector contains: 1 2 4 5 7 8 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc copy_backward}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc reverse_copy}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc copy_n}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc fill}}
{{dsc inc | cpp/experimental/ranges/algorithm/dsc remove_copy}}
{{dsc end}}</text>
      <sha1>3cyk30crec0bgdkbtm3whi4b73jao37</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/algorithm/sort</title>
    <ns>0</ns>
    <id>15882</id>
    <revision>
      <id>89387</id>
      <parentid>89386</parentid>
      <timestamp>2017-01-20T23:08:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Parameters */ +</comment>
      <text xml:space="preserve" bytes="1831">{{cpp/experimental/ranges/title|sort}}
{{cpp/experimental/ranges/algorithm/navbar}}
{{dcl begin}}
{{dcl header | experimental/ranges/algorithm}}
{{dcl | since=ranges | num= 1 |1= 
template&lt; ranges::RandomAccessIterator I, ranges::Sentinel&lt;I&gt; S,
          class Comp = ranges::less&lt;&gt;, class Proj = ranges::identity&gt;
  requires ranges::Sortable&lt;I, Comp, Proj&gt;()
I sort( I first, S last, Comp comp = Comp{}, Proj proj = Proj{} );
}}
{{dcl | since=ranges | num= 2 |1= 
template&lt; ranges::RandomAccessRange Rng,
          class Comp = ranges::less&lt;&gt;, class Proj = ranges::identity&gt;
  requires ranges::Sortable&lt;ranges::iterator_t&lt;Rng&gt;, Comp, Proj&gt;()
ranges::safe_iterator_t&lt;Rng&gt; sort( Rng&amp;&amp; rng, Comp comp = Comp{}, Proj proj = Proj{} );
}}
{{dcl end}}

@1@ Sorts the elements in the range {{tt|[first, last)}} in ascending order. The order of equal elements is not guaranteed to be preserved. Elements are compared using {{tt|comp}} after applying the projection {{tt|proj}}.
@2@ Sorts the elements in the range {{tt|rng}}, as if by {{c|return ranges::sort(ranges::begin(rng), ranges::end(rng), comp, proj);}}

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to sort}}
{{par | rng | the range of elements to sort}}
{{par | comp | the comparator to use }}
{{par | proj | the projection to apply to elements to the range }}
{{par end}}

===Return value===
&lt;!-- this is missing in the current WP, but is probably the intent --&gt;
An iterator pointing past the end of the range (i.e., it compares equal to {{tt|last}} for  overload {{v|1}}, and {{tt|ranges::end(rng)}} for overload {{v|2}}).

===Complexity===
{{math|O(N&amp;middot;log(N))}} comparisons, where N is equal to the number of elements in the range.
===Example===
{{example
 |
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc end}}</text>
      <sha1>5qgi2samn2ctl2l3jzltiqm2zh7jzo0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Assignable</title>
    <ns>0</ns>
    <id>16090</id>
    <revision>
      <id>89645</id>
      <timestamp>2017-01-23T06:28:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="442">{{cpp/experimental/ranges/title|Assignable}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T, class U&gt;
concept bool Assignable() {
    return ranges::CommonReference&lt;const T&amp;, const U&amp;&gt;() &amp;&amp; 
           requires(T&amp;&amp; t, U&amp;&amp; u) {
               { std::forward&lt;T&gt;(t) = std::forward&lt;U&gt;(u) } -&gt; ranges::Same&lt;T&amp;&gt;;
           };
}
}}
{{todo|add description and extra caveats}}</text>
      <sha1>5dlfu911a4l589v9fd78xrin6o56fn4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Boolean</title>
    <ns>0</ns>
    <id>16091</id>
    <revision>
      <id>90584</id>
      <parentid>90580</parentid>
      <timestamp>2017-03-05T13:30:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 90580 by [[Special:Contributions/113.88.81.74|113.88.81.74]] ([[User talk:113.88.81.74|talk]])</comment>
      <text xml:space="preserve" bytes="1008">{{cpp/experimental/ranges/title|Boolean}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class B&gt;
concept bool Boolean() {
    return ranges::MoveConstructible&lt;B&gt;() &amp;&amp;
           requires(const B b1, const B b2, const bool a) {
               bool(b1);
               { b1 } -&gt; bool;
               bool(!b1);
               { !b1 } -&gt; bool;
               { b1 &amp;&amp; b2 } -&gt; ranges::Same&lt;bool&gt;;
               { b1 &amp;&amp; a }  -&gt; ranges::Same&lt;bool&gt;;
               { a &amp;&amp; b1 }  -&gt; ranges::Same&lt;bool&gt;;
               { b1 {{!!}} b2 } -&gt; ranges::Same&lt;bool&gt;;
               { b1 {{!!}} a }  -&gt; ranges::Same&lt;bool&gt;;
               { a {{!!}} b1 }  -&gt; ranges::Same&lt;bool&gt;;
               { b1 == b2 } -&gt; bool;
               { b1 != b2 } -&gt; bool;
               { b1 == a }  -&gt; bool;
               { a == b1 }  -&gt; bool;
               { b1 != a }  -&gt; bool;
               { a != b1 }  -&gt; bool;
          };
}
}}
{{todo|add description and extra caveats}}</text>
      <sha1>2tn3dev217nnb710dde3vzn478y3tz2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Common</title>
    <ns>0</ns>
    <id>16088</id>
    <revision>
      <id>89703</id>
      <parentid>89641</parentid>
      <timestamp>2017-01-23T15:27:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>put &amp;&amp; on the left</comment>
      <text xml:space="preserve" bytes="927">{{cpp/experimental/ranges/title|Common}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt;class T, class U&gt;
concept bool Common() {
    return ranges::CommonReference&lt;const T&amp;, const U&amp;&gt;()
        &amp;&amp; requires(T (&amp;t)(), U (&amp;u)()) {
               typename std::common_type_t&lt;T, U&gt;;
               typename std::common_type_t&lt;U, T&gt;;
               requires ranges::Same&lt;std::common_type_t&lt;U, T&gt;, std::common_type_t&lt;T, U&gt;&gt;();
               std::common_type_t&lt;T, U&gt;(t());
               std::common_type_t&lt;T, U&gt;(u());
               requires ranges::CommonReference&lt;
                   std::add_lvalue_reference_t&lt;std::common_type_t&lt;T, U&gt;&gt;,
                   std::common_reference_t&lt;std::add_lvalue_reference_t&lt;const T&gt;,
                                           std::add_lvalue_reference_t&lt;const U&gt;&gt;&gt;();
           };
}
}}
{{todo|add description and extra caveats}}</text>
      <sha1>jhgdxlgam2she5ngq11ngz452q0alkh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/CommonReference</title>
    <ns>0</ns>
    <id>15884</id>
    <revision>
      <id>90569</id>
      <parentid>90559</parentid>
      <timestamp>2017-03-04T09:27:15Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rv</comment>
      <text xml:space="preserve" bytes="619">{{cpp/experimental/ranges/title|CommonReference}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt; class T, class U &gt;
concept bool CommonReference() {
    return requires(T (&amp;t)(), U (&amp;u)()) {
        typename std::common_reference_t&lt;T, U&gt;;
        typename std::common_reference_t&lt;U, T&gt;;
        requires ranges::Same&lt;std::common_reference_t&lt;T, U&gt;,
                              std::common_reference_t&lt;U, T&gt;&gt;();
        std::common_reference_t&lt;T, U&gt;(t());
        std::common_reference_t&lt;T, U&gt;(u());
    };
}
}}
{{todo|add description and extra caveats}}</text>
      <sha1>dtbhcyoodsgscnzt4ea5irbu1o38w8e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Constructible</title>
    <ns>0</ns>
    <id>15783</id>
    <revision>
      <id>89358</id>
      <parentid>88842</parentid>
      <timestamp>2017-01-19T23:35:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>qualify Destructible</comment>
      <text xml:space="preserve" bytes="1846">{{cpp/experimental/ranges/title|Constructible}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt; class T, class... Args &gt;
concept bool __ConstructibleObject =  /* exposition only */
    ranges::Destructible&lt;T&gt;() &amp;&amp; requires(Args&amp;&amp;... args) {
       T{ std::forward&lt;Args&gt;(args)... };
       new T{ std::forward&lt;Args&gt;(args)... };
    };

template &lt; class T, class... Args &gt;
concept bool __BindableReference = /* exposition only */
    std::is_reference&lt;T&gt;::value &amp;&amp; requires(Args&amp;&amp;... args) {
       T( std::forward&lt;Args&gt;(args)... );
    };

template &lt; class T, class... Args &gt;
concept bool Constructible() { 
    return __ConstructibleObject&lt;T, Args...&gt; {{!!}} __BindableReference&lt;T, Args...&gt;;
}
}}

The concept {{c|Constructible&lt;T, Args..&gt;()}} is used to constrain a type to be either an object type constructible from a set of types, or a reference type that can be bound to those arguments.

=== Notes ===
As of the current working draft, {{c|Constructible&lt;int&amp;, char&amp;&gt;()}} is satisfied because the cast in {{c|__BindableReference}} is a {{c|reinterpret_cast}}.

Unlike {{lc|std::is_constructible}}, {{tt|Constructible}} requires a new-expression to be valid and also uses list-initialization, where narrowing conversions are not allowed, initializer-list constructors are preferentially called, and aggregate initialization can be performed. For example:
* {{c|Constructible&lt;int, double&gt;()}} is not satisfied, even though {{c|ConvertibleTo&lt;double, int&gt;()}} is satisfied and {{c|std::is_constructible&lt;int, double&gt;::value}} is {{c|true}}.
* Given {{c|struct A { int a; }; }}, {{c|Constructible&lt;A, int&gt;()}} is satisfied, even though {{c|std::is_constructible&lt;A, int&gt;::value}} is {{c|false}}.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_constructible}}
{{dsc end }}</text>
      <sha1>oecapy2qjls1wa45iqqakac79daf8pc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/ConvertibleTo</title>
    <ns>0</ns>
    <id>15770</id>
    <revision>
      <id>90469</id>
      <parentid>90465</parentid>
      <timestamp>2017-02-24T10:25:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Undo revision 90465 by [[Special:Contributions/113.88.80.118|113.88.80.118]] ([[User talk:113.88.80.118|talk]])</comment>
      <text xml:space="preserve" bytes="794">{{cpp/experimental/ranges/title|ConvertibleTo}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt; class T, class U &gt;
concept bool ConvertibleTo() { return /* see below */; }
}}

The concept {{c|ConvertibleTo&lt;T, U&gt;()}} is satisfied if and only if {{c|std::is_convertible&lt;T, U&gt;::value}} is {{c|true}}.

=== Notes ===
Despite the use of {{lc|std::is_convertible}} in its description, {{tt|ConvertibleTo}} is not required to use it in its implementation. Thus, {{c|ConvertibleTo&lt;T, U&gt;()}} may not [[cpp/language/constraints#Partial ordering of constraints|normalize to]]{{c|std::is_convertible&lt;T, U&gt;::value}} during partial ordering of constraints.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_convertible}}
{{dsc end }}</text>
      <sha1>4fb8hsrr0p1l44sfyhbahb962epeeus</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/CopyConstructible</title>
    <ns>0</ns>
    <id>16099</id>
    <revision>
      <id>89665</id>
      <timestamp>2017-01-23T08:50:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="571">{{cpp/experimental/ranges/title|CopyConstructible}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool CopyConstructible() {
    return ranges::MoveConstructible&lt;T&gt;() &amp;&amp;
           ranges::Constructible&lt;T, const std::remove_cv_t&lt;T&gt;&amp;&gt;() &amp;&amp;
           ranges::ConvertibleTo&lt;std::remove_cv_t&lt;T&gt;&amp;, T&gt;() &amp;&amp;
           ranges::ConvertibleTo&lt;const std::remove_cv_t&lt;T&gt;&amp;, T&gt;() &amp;&amp;
           ranges::ConvertibleTo&lt;const std::remove_cv_t&lt;T&gt;&amp;&amp;, T&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>14ybldo85aa2b6h6bwokiz245wckae7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Copyable</title>
    <ns>0</ns>
    <id>16101</id>
    <revision>
      <id>89667</id>
      <timestamp>2017-01-23T08:51:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="366">{{cpp/experimental/ranges/title|Copyable}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool Copyable() {
    return ranges::CopyConstructible&lt;T&gt;() &amp;&amp;
           ranges::Movable&lt;T&gt;() &amp;&amp;
           ranges::Assignable&lt;T&amp;, const T&amp;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>5rypmr0n3pav677hfvpuqsbg15uhel9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/DefaultConstructible</title>
    <ns>0</ns>
    <id>16097</id>
    <revision>
      <id>89663</id>
      <timestamp>2017-01-23T08:48:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="433">{{cpp/experimental/ranges/title|DefaultConstructible}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool DefaultConstructible() {
    return ranges::Constructible&lt;T&gt;() &amp;&amp;
           requires(const std::size_t n) {
               new T[n]{}; /* not required to be equality preserving */
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>d4k4qwwvtk91aox3ens3pd8picd1z7h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/DerivedFrom</title>
    <ns>0</ns>
    <id>15769</id>
    <revision>
      <id>90571</id>
      <parentid>90553</parentid>
      <timestamp>2017-03-04T09:28:28Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 90553 by [[Special:Contributions/113.88.81.74|113.88.81.74]] ([[User talk:113.88.81.74|talk]])</comment>
      <text xml:space="preserve" bytes="768">{{cpp/experimental/ranges/title|DerivedFrom}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt; class T, class U &gt;
concept bool DerivedFrom() { return /* see below */; }
}}

The concept {{c|DerivedFrom&lt;T, U&gt;()}} is satisfied if and only if {{c|std::is_base_of&lt;U, T&gt;::value}} is {{c|true}}.

=== Notes ===
Despite the use of {{lc|std::is_base_of}} in its description, {{tt|DerivedFrom}} is not required to use it in its implementation. Thus, {{c|DerivedFrom&lt;T, U&gt;()}} may not [[cpp/language/constraints#Partial ordering of constraints|normalize to]]{{c|std::is_base_of&lt;U,T&gt;::value}} during partial ordering of constraints.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_base_of }}
{{dsc end }}</text>
      <sha1>csmlzkhdodmqhv20s1tzy6due7je328</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Destructible</title>
    <ns>0</ns>
    <id>16096</id>
    <revision>
      <id>89662</id>
      <timestamp>2017-01-23T08:47:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="580">{{cpp/experimental/ranges/title|Destructible}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool Destructible() {
    return requires(T t, const T ct, T* p) {
               { t.∼T() } noexcept;
               { &amp;t }  -&gt; ranges::Same&lt;T*&gt;; /* not required to be equality preserving */
               { &amp;ct } -&gt; ranges::Same&lt;const T*&gt;; /* not required to be equality preserving */
               delete p;
               delete[] p;
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>lr1otyr9blj9jl191ihqwolgepzbk2x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/EqualityComparable</title>
    <ns>0</ns>
    <id>16094</id>
    <revision>
      <id>89660</id>
      <timestamp>2017-01-23T08:42:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="816">{{cpp/experimental/ranges/title|EqualityComparable}}
{{cpp/experimental/ranges/concepts/navbar}}
{{dcl begin}}
{{dcl header|experimental/ranges/concepts}}
{{dcl|since=ranges|num=1|1=
template &lt;class T&gt;
concept bool EqualityComparable() {
    return WeaklyEqualityComparable&lt;T, T&gt;();
}
}}
{{dcl|since=ranges|num=2|1=
template &lt;class T, class U&gt;
concept bool EqualityComparable() {
    return ranges::CommonReference&lt;const T&amp;, const U&amp;&gt;() &amp;&amp;
           ranges::EqualityComparable&lt;T&gt;() &amp;&amp;
           ranges::EqualityComparable&lt;U&gt;() &amp;&amp;
           ranges::EqualityComparable&lt;
                 std::remove_cv_t&lt;std::remove_reference_t&lt;
                     std::common_reference_t&lt;const T&amp;, const U&amp;&gt;&gt;&gt;&gt;() &amp;&amp;
           ranges::WeaklyEqualityComparable&lt;T, U&gt;();
}
}}
{{dcl end}}

{{todo|add description and extra caveats}}</text>
      <sha1>mcoyqf0bevkyn7m9vcp8dwy25xojogi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Integral</title>
    <ns>0</ns>
    <id>15771</id>
    <revision>
      <id>90170</id>
      <parentid>88670</parentid>
      <timestamp>2017-02-08T01:58:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>comment out for now, to be replaced with a different note, see https://github.com/ericniebler/stl2/issues/321</comment>
      <text xml:space="preserve" bytes="635">{{cpp/experimental/ranges/title|Integral}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt; class T &gt;
concept bool Integral() { return std::is_integral&lt;T&gt;::value; }
}}

The concept {{c|Integral&lt;T&gt;()}} is satisfied if and only if {{tt|T}} is an integral type.
&lt;!--
=== Notes ===
{{c|Integral&lt;T&gt;()}} is [[cpp/language/constraints#Partial ordering of constraints|normalized to]] the atomic predicate constraint {{c|std::is_integral&lt;T&gt;::value}} during the partial ordering of constraints.
--&gt;
=== See also ===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc end }}</text>
      <sha1>gorag2c3yi16gg8itew65gzjhpuit9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Invocable</title>
    <ns>0</ns>
    <id>16104</id>
    <revision>
      <id>89671</id>
      <parentid>89670</parentid>
      <timestamp>2017-01-23T08:54:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="662">{{cpp/experimental/ranges/title|Invocable|RegularInvocable}}
{{cpp/experimental/ranges/concepts/navbar}}
{{dcl begin}}
{{dcl header|experimental/ranges/concepts}}
{{dcl|since=ranges|1=
template &lt;class F, class... Args&gt;
concept bool Invocable() {
    return ranges::CopyConstructible&lt;F&gt;() &amp;&amp;
           requires(F f, Args&amp;&amp;... args) {
               ranges::invoke(f, std::forward&lt;Args&gt;(args)...);
               /* not required to be equality preserving */
           };
}
}}
{{dcl|since=ranges|1=
template &lt;class F, class... Args&gt;
concept bool RegularInvocable() {
    return Invocable&lt;F, Args...&gt;();
}
}}
{{dcl end}}

{{todo|add description and extra caveats}}</text>
      <sha1>1txtnwh4slqc5zgr9ohi20ds7vxl6gq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Movable</title>
    <ns>0</ns>
    <id>16100</id>
    <revision>
      <id>89666</id>
      <timestamp>2017-01-23T08:51:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="360">{{cpp/experimental/ranges/title|Movable}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool Movable() {
    return ranges::MoveConstructible&lt;T&gt;() &amp;&amp;
           ranges::Assignable&lt;T&amp;, T&gt;() &amp;&amp;
           ranges::Swappable&lt;T&amp;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>3lm0v8cas3jvxc0uaub9ldagp4zz1ad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/MoveConstructible</title>
    <ns>0</ns>
    <id>16098</id>
    <revision>
      <id>89664</id>
      <timestamp>2017-01-23T08:49:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="383">{{cpp/experimental/ranges/title|MoveConstructible}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool MoveConstructible() {
    return ranges::Constructible&lt;T, std::remove_cv_t&lt;T&gt;&amp;&amp;&gt;() &amp;&amp;
           ranges::ConvertibleTo&lt;std::remove_cv_t&lt;T&gt;&amp;&amp;, T&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>n2xr1ym7ebpclrcu6px72brcn604g3q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Predicate</title>
    <ns>0</ns>
    <id>16105</id>
    <revision>
      <id>89672</id>
      <timestamp>2017-01-23T08:57:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="370">{{cpp/experimental/ranges/title|Predicate}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class F, class... Args&gt;
concept bool Predicate() {
    return ranges::RegularInvocable&lt;F, Args...&gt;() &amp;&amp;
           ranges::Boolean&lt;std::result_of_t&lt;F&amp;(Args...)&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>c1ox5ay6ifl3pl7ni22mjcppxiacvc2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Regular</title>
    <ns>0</ns>
    <id>16103</id>
    <revision>
      <id>89669</id>
      <timestamp>2017-01-23T08:52:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="320">{{cpp/experimental/ranges/title|Regular}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool Regular() {
    return ranges::Semiregular&lt;T&gt;() &amp;&amp;
           ranges::EqualityComparable&lt;T&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>lmh1ks8ofsqv3dztjemmlpw99q5l381</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Relation</title>
    <ns>0</ns>
    <id>16106</id>
    <revision>
      <id>89673</id>
      <timestamp>2017-01-23T08:58:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="727">{{cpp/experimental/ranges/title|Relation}}
{{cpp/experimental/ranges/concepts/navbar}}
{{dcl begin}}
{{dcl header|experimental/ranges/concepts}}
{{dcl|since=ranges|num=1|1=
template &lt;class R, class T&gt;
concept bool Relation() {
    return ranges::Predicate&lt;R, T, T&gt;();
}
}}
{{dcl|since=ranges|num=2|1=
template &lt;class R, class T, class U&gt;
concept bool Relation() {
    return ranges::Relation&lt;R, T&gt;() &amp;&amp;
           ranges::Relation&lt;R, U&gt;() &amp;&amp;
           ranges::CommonReference&lt;const T&amp;, const U&amp;&gt;() &amp;&amp;
           ranges::Relation&lt;R, std::common_reference_t&lt;const T&amp;, const U&amp;&gt;&gt;() &amp;&amp;
           ranges::Predicate&lt;R, T, U&gt;() &amp;&amp;
           ranges::Predicate&lt;R, U, T&gt;();
}
}}
{{dcl end}}

{{todo|add description and extra caveats}}</text>
      <sha1>82855netcvejkl8irh1tker13pptrhi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Same</title>
    <ns>0</ns>
    <id>15768</id>
    <revision>
      <id>90570</id>
      <parentid>90557</parentid>
      <timestamp>2017-03-04T09:28:03Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rv</comment>
      <text xml:space="preserve" bytes="675">{{cpp/experimental/ranges/title|Same}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt; class T, class U &gt;
concept bool Same() { return /* see below */; }
}}

The concept {{c|Same&lt;T, U&gt;()}} is satisfied if and only if {{tt|T}} and {{tt|U}} denote the same type.

For the purposes of constraint checking, {{c|Same&lt;T, U&gt;()}} implies {{c|Same&lt;U, T&gt;()}}.

=== Notes ===
The additional requirement on constraint checking differentiates {{tt|Same}} from {{lc|std::is_same}}, and will typically require a compiler intrinsic to implement.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_same }}
{{dsc end }}</text>
      <sha1>hri7xunjyj0cpkl6ga5s3gobrmvwntw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Semiregular</title>
    <ns>0</ns>
    <id>16102</id>
    <revision>
      <id>89668</id>
      <timestamp>2017-01-23T08:51:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="327">{{cpp/experimental/ranges/title|Semiregular}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T&gt;
concept bool Semiregular() {
    return ranges::Copyable&lt;T&gt;() &amp;&amp;
           ranges::DefaultConstructible&lt;T&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>sl17y8qsjm4x1ymzwvsqbg5l63v3l3k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/SignedIntegral</title>
    <ns>0</ns>
    <id>15772</id>
    <revision>
      <id>88671</id>
      <timestamp>2016-12-05T23:01:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="737">{{cpp/experimental/ranges/title|SignedIntegral}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt; class T &gt;
concept bool SignedIntegral() { return Integral&lt;T&gt;() &amp;&amp; std::is_signed&lt;T&gt;::value; }
}}

The concept {{c|SignedIntegral&lt;T&gt;()}} is satisfied if and only if {{tt|T}} is an integral type and {{c|std::is_signed&lt;T&gt;::value}} is {{c|true}}.

=== Notes ===
{{c|SignedIntegral&lt;T&gt;()}} may be satisfied by a type that is not a [[cpp/language/type#Type classification|signed integer type]], for example, {{c|char}} (on a system where {{c|char}} is signed).

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc inc | cpp/types/dsc is_signed}}
{{dsc end }}</text>
      <sha1>cngxzyp8ebovhtu5tt850vpclqb4g0k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/StrictTotallyOrdered</title>
    <ns>0</ns>
    <id>16095</id>
    <revision>
      <id>89661</id>
      <timestamp>2017-01-23T08:45:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1489">{{cpp/experimental/ranges/title|StrictTotallyOrdered}}
{{cpp/experimental/ranges/concepts/navbar}}
{{dcl begin}}
{{dcl header|experimental/ranges/concepts}}
{{dcl|since=ranges|num=1|1=
template &lt;class T&gt;
concept bool StrictTotallyOrdered() {
    return ranges::EqualityComparable&lt;T&gt;() &amp;&amp;
           requires(const T a, const T b) {
               { a &lt; b }  -&gt; ranges::Boolean;
               { a &gt; b }  -&gt; ranges::Boolean;
               { a &lt;= b } -&gt; ranges::Boolean;
               { a &gt;= b } -&gt; ranges::Boolean;
           };
}
}}
{{dcl|since=ranges|num=2|1=
template &lt;class T, class U&gt;
concept bool StrictTotallyOrdered() {
    return ranges::CommonReference&lt;const T&amp;, const U&amp;&gt;() &amp;&amp;
           ranges::StrictTotallyOrdered&lt;T&gt;() &amp;&amp;
           ranges::StrictTotallyOrdered&lt;U&gt;() &amp;&amp;
           ranges::StrictTotallyOrdered&lt;
               std::remove_cv_t&lt;std::remove_reference_t&lt;
                   std::common_reference_t&lt;const T&amp;, const U&amp;&gt;&gt;&gt;&gt;() &amp;&amp;
           ranges::EqualityComparable&lt;T, U&gt;() &amp;&amp;
           requires(const T t, const U u) {
               { t &lt; u }  -&gt; ranges::Boolean;
               { t &gt; u }  -&gt; ranges::Boolean;
               { t &lt;= u } -&gt; ranges::Boolean;
               { t &gt;= u } -&gt; ranges::Boolean;
               { u &lt; t }  -&gt; ranges::Boolean;
               { u &gt; t }  -&gt; ranges::Boolean;
               { u &lt;= t } -&gt; ranges::Boolean;
               { u &gt;= t } -&gt; ranges::Boolean;
           };
}
}}
{{dcl end}}

{{todo|add description and extra caveats}}</text>
      <sha1>7d4adars2rvsq7pcgbgtqklesbkxdsa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/StrictWeakOrder</title>
    <ns>0</ns>
    <id>16107</id>
    <revision>
      <id>89675</id>
      <parentid>89674</parentid>
      <timestamp>2017-01-23T08:59:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="481">{{cpp/experimental/ranges/title|StrictWeakOrder}}
{{cpp/experimental/ranges/concepts/navbar}}
{{dcl begin}}
{{dcl header|experimental/ranges/concepts}}
{{dcl|since=ranges|num=1|1=
template &lt;class R, class T&gt;
concept bool StrictWeakOrder() {
    return ranges::Relation&lt;R, T&gt;();
}
}}
{{dcl|since=ranges|num=2|1=
template &lt;class R, class T, class U&gt;
concept bool StrictWeakOrder() {
    return ranges::Relation&lt;R, T, U&gt;();
}
}}
{{dcl end}}

{{todo|add description and extra caveats}}</text>
      <sha1>bc0yyfpqz14mauq476fc2gl4askhcx0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/Swappable</title>
    <ns>0</ns>
    <id>16092</id>
    <revision>
      <id>90585</id>
      <parentid>90582</parentid>
      <timestamp>2017-03-05T13:35:37Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rv</comment>
      <text xml:space="preserve" bytes="808">{{cpp/experimental/ranges/title|Swappable}}
{{cpp/experimental/ranges/concepts/navbar}}
{{dcl begin}}
{{dcl header|experimental/ranges/concepts}}
{{dcl|num=1|since=ranges|1=
template &lt;class T&gt;
concept bool Swappable() {
    return requires(T&amp;&amp; a, T&amp;&amp; b) {
               ranges::swap(std::forward&lt;T&gt;(a), std::forward&lt;T&gt;(b));
           };
}
}}
{{dcl|num=2|since=ranges|1=
template &lt;class T, class U&gt;
concept bool Swappable() {
    return ranges::Swappable&lt;T&gt;() &amp;&amp;
           ranges::Swappable&lt;U&gt;() &amp;&amp;
           ranges::CommonReference&lt;const T&amp;, const U&amp;&gt;() &amp;&amp;
           requires(T&amp;&amp; t, U&amp;&amp; u) {
               ranges::swap(std::forward&lt;T&gt;(t), std::forward&lt;U&gt;(u));
               ranges::swap(std::forward&lt;U&gt;(u), std::forward&lt;T&gt;(t));
           };
}
}}
{{dcl end}}
{{todo|add description and extra caveats}}</text>
      <sha1>gr1ku6hckbsv1e0paawffdx2942fq9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/UniformRandomNumberGenerator</title>
    <ns>0</ns>
    <id>16108</id>
    <revision>
      <id>89677</id>
      <parentid>89676</parentid>
      <timestamp>2017-01-23T09:00:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="546">{{cpp/experimental/ranges/title|UniformRandomNumberGenerator}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/random|since=ranges|1=
template &lt;class G&gt;
concept bool UniformRandomNumberGenerator() {
    return requires(G g) {
               { g() } -&gt; ranges::UnsignedIntegral; /* not required to be equality preserving */
               { G::min() } -&gt; ranges::Same&lt;std::result_of_t&lt;G&amp;()&gt;&gt;;
               { G::max() } -&gt; ranges::Same&lt;std::result_of_t&lt;G&amp;()&gt;&gt;;
    };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>e94a6w57gmkua8syb99p30ufn80q9d3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/UnsignedIntegral</title>
    <ns>0</ns>
    <id>15773</id>
    <revision>
      <id>88673</id>
      <timestamp>2016-12-05T23:04:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="707">{{cpp/experimental/ranges/title|UnsignedIntegral}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|
template &lt; class T &gt;
concept bool UnsignedIntegral() { return Integral&lt;T&gt;() &amp;&amp; !std::is_signed&lt;T&gt;::value; }
}}

The concept {{c|UnsignedIntegral&lt;T&gt;()}} is satisfied if and only if {{tt|T}} is an integral type and {{c|std::is_signed&lt;T&gt;::value}} is {{c|false}}.

=== Notes ===
{{c|UnsignedIntegral&lt;T&gt;()}} may be satisfied by a type that is not a [[cpp/language/type#Type classification|unsigned integer type]], for example, {{c|bool}}.
=== See also ===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc inc | cpp/types/dsc is_signed}}
{{dsc end }}</text>
      <sha1>opc0lgojcdcoo6k6e6af755klhqt4jc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/concepts/WeaklyEqualityComparable</title>
    <ns>0</ns>
    <id>16093</id>
    <revision>
      <id>89658</id>
      <timestamp>2017-01-23T08:37:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="517">{{cpp/experimental/ranges/title|WeaklyEqualityComparable}}
{{cpp/experimental/ranges/concepts/navbar}}
{{ddcl|header=experimental/ranges/concepts|since=ranges|1=
template &lt;class T, class U&gt;
concept bool WeaklyEqualityComparable() {
    return requires(const T&amp; t, const U&amp; u) {
               { t == u } -&gt; ranges::Boolean;
               { u == t } -&gt; ranges::Boolean;
               { t != u } -&gt; ranges::Boolean;
               { u != t } -&gt; ranges::Boolean;
    };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>6t9fs74z7b6lsscu8uhmsazsewoqumq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/functional/identity</title>
    <ns>0</ns>
    <id>16150</id>
    <revision>
      <id>91319</id>
      <parentid>89916</parentid>
      <timestamp>2017-03-31T19:40:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1101">{{cpp/experimental/ranges/title|identity}}
{{cpp/experimental/ranges/utility/navbar}}
{{ddcl|header=experimental/ranges/functional|since=ranges|1=
struct identity;
}}

{{c|ranges::identity}} is a function object type whose {{c|operator()}} returns its argument unchanged. It is used as the default projection for all Ranges TS algorithms.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/experimental/ranges/functional/identity | title=operator() | inlinemem=true | returns the argument unchanged}}
{{dsc end}}

{{member | {{small|std::experimental::ranges::identity::}}operator() | 2=
{{ddcl | 1=
template&lt; class T&gt;
constexpr T&amp;&amp; operator()( T&amp;&amp; t ) const;
}}

Returns {{c|std::forward&lt;T&gt;(t)}}.

===Parameters===
{{par begin}}
{{par | t | argument to return}}
{{par end}}

===Return value===
{{c|std::forward&lt;T&gt;(t)}}.

=== Exceptions ===
{{unreviewed noexcept}}

}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>e75h9o69ppe6099hu8x645xkby2svsu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/functional/invoke</title>
    <ns>0</ns>
    <id>16149</id>
    <revision>
      <id>89914</id>
      <timestamp>2017-01-30T03:14:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1589">{{cpp/experimental/ranges/title|invoke}}
{{cpp/experimental/ranges/utility/navbar}}
{{ddcl|header=experimental/ranges/functional|since=ranges|1=
template &lt; class F, class... Args &gt;
std::result_of_t&lt;F&amp;&amp;(Args&amp;&amp;...)&gt; invoke(F&amp;&amp; f, Args&amp;&amp;... args);
}}

Invoke the {{concept|Callable}} object {{tt|f}} with the parameters {{tt|args}}, and return the result, as if by {{c|return INVOKE(std::forward&lt;F&gt;(f), std::forward&lt;Args&gt;(args)...);}}, where ''INVOKE(f, t1, t2, ..., tN)'' is defined as follows:
* if {{tt|f}} is a [[cpp/language/pointer#Pointers_to_member_functions|pointer to member function]] of class {{tt|T}}:
:* If {{c|1=std::is_base_of&lt;T, std::decay_t&lt;decltype(t1)&gt;&gt;::value}} is {{c|true}}, then {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|(t1.*f)(t2, ..., tN)}}
:* otherwise, {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|((*t1).*f)(t2, ..., tN)}}.
* otherwise, if N == 1 and {{tt|f}} is a [[cpp/language/pointer#Pointers_to_data_members|pointer to data member]] of class {{tt|T}}:
:* If {{c|1=std::is_base_of&lt;T, std::decay_t&lt;decltype(t1)&gt;&gt;::value}} is {{c|true}}, then {{c|INVOKE(f, t1)}} is equivalent to {{c|t1.*f}}
:* otherwise, then {{c|INVOKE(f, t1)}} is equivalent to {{c|(*t1).*f}}
* otherwise, {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|f(t1, t2, ..., tN)}} (that is, {{tt|f}} is a {{concept|FunctionObject}})


===Parameters===
{{par begin}}
{{par | f | {{concept|Callable}} object to be invoked}}
{{par | args | arguments to pass to {{tt|f}} }}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc|cpp/utility/functional/dsc invoke}}
{{dsc end}}</text>
      <sha1>0w0qyyy0y1qq5xvub0kzt20gtvrsy96</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/BidirectionalIterator</title>
    <ns>0</ns>
    <id>16121</id>
    <revision>
      <id>89712</id>
      <timestamp>2017-01-23T15:38:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="565">{{cpp/experimental/ranges/title|BidirectionalIterator}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool BidirectionalIterator() {
    return ranges::ForwardIterator&lt;I&gt;()
        &amp;&amp; ranges::DerivedFrom&lt;ranges::iterator_category_t&lt;I&gt;,
                               ranges::bidirectional_iterator_tag&gt;()
        &amp;&amp; requires(I i) {
               { --i } -&gt; ranges::Same&lt;I&amp;&gt;;
               { i-- } -&gt; ranges::Same&lt;I&gt;;
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>cjk0vnvnr403ka8a4ayouuj0uz5lg4k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/BidirectionalRange</title>
    <ns>0</ns>
    <id>16141</id>
    <revision>
      <id>89734</id>
      <timestamp>2017-01-23T16:13:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="364">{{cpp/experimental/ranges/title|BidirectionalRange}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
concept bool BidirectionalRange() {
    return ranges::ForwardRange&lt;T&gt;() 
        &amp;&amp; ranges::BidirectionalIterator&lt;ranges::iterator_t&lt;T&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>9m8b2scjili45w7n55dko7dx3ms3pml</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/BoundedRange</title>
    <ns>0</ns>
    <id>16137</id>
    <revision>
      <id>89730</id>
      <timestamp>2017-01-23T16:10:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="351">{{cpp/experimental/ranges/title|BoundedRange}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
concept bool BoundedRange() {
    return ranges::Range&lt;T&gt;() 
        &amp;&amp; ranges::Same&lt;ranges::iterator_t&lt;T&gt;, ranges::sentinel_t&lt;T&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>11qlejb8whv8hfmk04tpp24dsk2bsyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/ForwardIterator</title>
    <ns>0</ns>
    <id>16120</id>
    <revision>
      <id>89711</id>
      <timestamp>2017-01-23T15:36:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="461">{{cpp/experimental/ranges/title|ForwardIterator}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool ForwardIterator() {
    return ranges::InputIterator&lt;I&gt;()
        &amp;&amp; ranges::DerivedFrom&lt;ranges::iterator_category_t&lt;I&gt;, ranges::forward_iterator_tag&gt;()
        &amp;&amp; ranges::Incrementable&lt;I&gt;()
        &amp;&amp; ranges::Sentinel&lt;I, I&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>q2qomeyfu1zwwd4elxnteveowsdsxhl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/ForwardRange</title>
    <ns>0</ns>
    <id>16142</id>
    <revision>
      <id>89735</id>
      <timestamp>2017-01-23T16:13:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="343">{{cpp/experimental/ranges/title|ForwardRange}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
concept bool ForwardRange() {
    return ranges::InputRange&lt;T&gt;()
        &amp;&amp; ranges::ForwardIterator&lt;ranges::iterator_t&lt;T&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>n2e5yqfkipn1pwk1shtudbvote8cc86</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Incrementable</title>
    <ns>0</ns>
    <id>16115</id>
    <revision>
      <id>89706</id>
      <timestamp>2017-01-23T15:30:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="409">{{cpp/experimental/ranges/title|Incrementable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool Incrementable() {
    return ranges::Regular&lt;I&gt;()
        &amp;&amp; ranges::WeaklyIncrementable&lt;I&gt;()
        &amp;&amp; requires(I i) {
               { i++ } -&gt; ranges::Same&lt;I&gt;;
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>l3yazdjssppu16sw18fr0yraa76xzw5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectInvocable</title>
    <ns>0</ns>
    <id>16133</id>
    <revision>
      <id>89726</id>
      <parentid>89725</parentid>
      <timestamp>2017-01-23T15:54:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2501">{{cpp/experimental/ranges/title|IndirectInvocable|IndirectRegularInvocable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{dcl begin}}
{{dcl header|experimental/ranges/iterator}}
{{dcl|since=ranges|num=1|1=
template &lt;class F&gt;
concept bool IndirectInvocable() {
    return ranges::Invocable&lt;F&gt;();
}
}}
{{dcl|since=ranges|num=2|1=
template &lt;class F, class I&gt;
concept bool IndirectInvocable() {
    return ranges::Readable&lt;I&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::value_type_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::reference_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::iter_common_reference_t&lt;I&gt;&gt;();
}
}}
{{dcl|since=ranges|num=3|1=
template &lt;class F, class I1, class I2&gt;
concept bool IndirectInvocable() {
    return ranges::Readable&lt;I1&gt;() &amp;&amp; ranges::Readable&lt;I2&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::reference_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::reference_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Invocable&lt;F, ranges::iter_common_reference_t&lt;I1&gt;,
                                ranges::iter_common_reference_t&lt;I2&gt;&gt;();
}
}}
{{dcl|since=ranges|num=4|1=
template &lt;class F&gt;
concept bool IndirectRegularInvocable() {
    return ranges::RegularInvocable&lt;F&gt;();
}
}}
{{dcl|since=ranges|num=5|1=
template &lt;class F, class I&gt;
concept bool IndirectRegularInvocable() {
    return ranges::Readable&lt;I&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::value_type_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::reference_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::iter_common_reference_t&lt;I&gt;&gt;();
}
}}

{{dcl|since=ranges|num=6|1=
template &lt;class F, class I1, class I2&gt;
concept bool IndirectRegularInvocable() {
    return ranges::Readable&lt;I1&gt;() &amp;&amp; ranges::Readable&lt;I2&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::reference_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::reference_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::RegularInvocable&lt;F, ranges::iter_common_reference_t&lt;I1&gt;, 
                                       ranges::iter_common_reference_t&lt;I2&gt;&gt;();
}
}}
{{dcl end}}

{{todo|add description and extra caveats}}</text>
      <sha1>ar25mjqt9juxpntk1ytxjp19t0l0uis</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectPredicate</title>
    <ns>0</ns>
    <id>16132</id>
    <revision>
      <id>89724</id>
      <timestamp>2017-01-23T15:50:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1104">{{cpp/experimental/ranges/title|IndirectPredicate}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class F, class I&gt;
concept bool IndirectPredicate() {
    return ranges::Readable&lt;I&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::value_type_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::reference_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::iter_common_reference_t&lt;I&gt;&gt;();
}
template &lt;class F, class I1, class I2&gt;
concept bool IndirectPredicate() {
    return ranges::Readable&lt;I1&gt;() &amp;&amp; ranges::Readable&lt;I2&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::reference_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::reference_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Predicate&lt;F, ranges::iter_common_reference_t&lt;I1&gt;,
                                ranges::iter_common_reference_t&lt;I2&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>9ksnk8gejvz2e87bpw5ctn04qmr2hlf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectRelation</title>
    <ns>0</ns>
    <id>16131</id>
    <revision>
      <id>89723</id>
      <timestamp>2017-01-23T15:48:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="815">{{cpp/experimental/ranges/title|IndirectRelation}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class F, class I1, class I2 = I1&gt;
concept bool IndirectRelation() {
    return ranges::Readable&lt;I1&gt;() &amp;&amp; ranges::Readable&lt;I2&gt;()
        &amp;&amp; ranges::Relation&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Relation&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Relation&lt;F, ranges::reference_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Relation&lt;F, ranges::reference_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::Relation&lt;F, ranges::iter_common_reference_t&lt;I1&gt;,
                               ranges::iter_common_reference_t&lt;I2&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>c21i8s8c3cn0xqz8xvs9f6sjk5p9f90</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectStrictWeakOrder</title>
    <ns>0</ns>
    <id>16130</id>
    <revision>
      <id>89722</id>
      <parentid>89721</parentid>
      <timestamp>2017-01-23T15:47:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>space</comment>
      <text xml:space="preserve" bytes="871">{{cpp/experimental/ranges/title|IndirectStrictWeakOrder}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class F, class I1, class I2 = I1&gt;
concept bool IndirectStrictWeakOrder() {
    return ranges::Readable&lt;I1&gt;() &amp;&amp; ranges::Readable&lt;I2&gt;()
        &amp;&amp; ranges::StrictWeakOrder&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::StrictWeakOrder&lt;F, ranges::value_type_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::StrictWeakOrder&lt;F, ranges::reference_t&lt;I1&gt;, ranges::value_type_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::StrictWeakOrder&lt;F, ranges::reference_t&lt;I1&gt;, ranges::reference_t&lt;I2&gt;&gt;()
        &amp;&amp; ranges::StrictWeakOrder&lt;F, ranges::iter_common_reference_t&lt;I1&gt;,
                                      ranges::iter_common_reference_t&lt;I2&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>4eh5tldoudsmadjyrjwvtux5wr8679j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectlyComparable</title>
    <ns>0</ns>
    <id>16129</id>
    <revision>
      <id>89720</id>
      <timestamp>2017-01-23T15:46:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="468">{{cpp/experimental/ranges/title|IndirectlyComparable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I1, class I2, class R = ranges::equal_to&lt;&gt;,
          class P1 = ranges::identity, class P2 = ranges::identity&gt;
concept bool IndirectlyComparable() {
    return ranges::IndirectRelation&lt;R, ranges::projected&lt;I1, P1&gt;, ranges::projected&lt;I2, P2&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>2l3jyngx7vd5cod21t4wgrbjpeaehpu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectlyCopyable</title>
    <ns>0</ns>
    <id>16125</id>
    <revision>
      <id>89716</id>
      <timestamp>2017-01-23T15:41:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="366">{{cpp/experimental/ranges/title|IndirectlyCopyable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class In, class Out&gt;
concept bool IndirectlyCopyable() {
    return ranges::Readable&lt;In&gt;()
        &amp;&amp; ranges::Writable&lt;Out, ranges::reference_t&lt;In&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>8vzhchz5si7rrc18jgan7malxu1ngd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectlyCopyableStorable</title>
    <ns>0</ns>
    <id>16127</id>
    <revision>
      <id>89718</id>
      <timestamp>2017-01-23T15:44:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="631">{{cpp/experimental/ranges/title|IndirectlyCopyableStorable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class In, class Out&gt;
concept bool IndirectlyCopyableStorable() {
    return ranges::IndirectlyCopyable&lt;In, Out&gt;()
        &amp;&amp; ranges::Writable&lt;Out, const ranges::value_type_t&lt;In&gt;&amp;&gt;()
        &amp;&amp; ranges::Copyable&lt;ranges::value_type_t&lt;In&gt;&gt;()
        &amp;&amp; ranges::Constructible&lt;ranges::value_type_t&lt;In&gt;, ranges::reference_t&lt;In&gt;&gt;()
        &amp;&amp; ranges::Assignable&lt;ranges::value_type_t&lt;In&gt;&amp;, ranges::reference_t&lt;In&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>ncuzmfbr0m1ginrd4f4wfrz1pjdpn3c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectlyMovable</title>
    <ns>0</ns>
    <id>16124</id>
    <revision>
      <id>89715</id>
      <timestamp>2017-01-23T15:41:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="371">{{cpp/experimental/ranges/title|IndirectlyMovable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class In, class Out&gt;
concept bool IndirectlyMovable() {
    return ranges::Readable&lt;In&gt;()
        &amp;&amp; ranges::Writable&lt;Out, ranges::rvalue_reference_t&lt;In&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>bawmorlkg4jxvsyf92owapk2cdqdprs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectlyMovableStorable</title>
    <ns>0</ns>
    <id>16126</id>
    <revision>
      <id>89717</id>
      <timestamp>2017-01-23T15:43:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="634">{{cpp/experimental/ranges/title|IndirectlyMovableStorable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class In, class Out&gt;
concept bool IndirectlyMovableStorable() {
    return ranges::IndirectlyMovable&lt;In, Out&gt;()
        &amp;&amp; ranges::Writable&lt;Out, ranges::value_type_t&lt;In&gt;&gt;()
        &amp;&amp; ranges::Movable&lt;ranges::value_type_t&lt;In&gt;&gt;()
        &amp;&amp; ranges::Constructible&lt;ranges::value_type_t&lt;In&gt;, ranges::rvalue_reference_t&lt;In&gt;&gt;()
        &amp;&amp; ranges::Assignable&lt;ranges::value_type_t&lt;In&gt;&amp;, ranges::rvalue_reference_t&lt;In&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>7xjgdhgu5tvq4lnzibmjhsoj05cuz5x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/IndirectlySwappable</title>
    <ns>0</ns>
    <id>16128</id>
    <revision>
      <id>89719</id>
      <timestamp>2017-01-23T15:45:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="567">{{cpp/experimental/ranges/title|IndirectlySwappable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I1, class I2 = I1&gt;
concept bool IndirectlySwappable() {
    return ranges::Readable&lt;I1&gt;() &amp;&amp; ranges::Readable&lt;I2&gt;()
        &amp;&amp; requires(const I1 i1, const I2 i2) {
               ranges::iter_swap(i1, i2);
               ranges::iter_swap(i2, i1);
               ranges::iter_swap(i1, i1);
               ranges::iter_swap(i2, i2);
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>svfnxuj6pmb1f876i7l2dkcsldl1x6k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/InputIterator</title>
    <ns>0</ns>
    <id>16119</id>
    <revision>
      <id>89710</id>
      <timestamp>2017-01-23T15:35:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="861">{{cpp/experimental/ranges/title|InputIterator}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool InputIterator() {
    return ranges::Iterator&lt;I&gt;()
        &amp;&amp; ranges::Readable&lt;I&gt;()
        &amp;&amp; requires(I i, const I ci) {
               typename ranges::iterator_category_t&lt;I&gt;;
               requires ranges::DerivedFrom&lt;ranges::iterator_category_t&lt;I&gt;,
                                            ranges::input_iterator_tag&gt;();
               { i++ } -&gt; ranges::Readable; /* not required to be equality preserving */
               requires ranges::Same&lt;ranges::value_type_t&lt;I&gt;,
                                     ranges::value_type_t&lt;decltype(i++)&gt;&gt;();
               { *ci } -&gt; const ranges::value_type_t&lt;I&gt;&amp;;
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>66zrei83z1cy2exv77h4bdfhh2o9v2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/InputRange</title>
    <ns>0</ns>
    <id>16138</id>
    <revision>
      <id>89736</id>
      <parentid>89731</parentid>
      <timestamp>2017-01-23T16:14:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="333">{{cpp/experimental/ranges/title|InputRange}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
concept bool InputRange() {
    return ranges::Range&lt;T&gt;() 
        &amp;&amp; ranges::InputIterator&lt;ranges::iterator_t&lt;T&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>0rtu7qc5jm4mgvm3dnxb132vlsd21ip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Iterator</title>
    <ns>0</ns>
    <id>16116</id>
    <revision>
      <id>89707</id>
      <timestamp>2017-01-23T15:31:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="391">{{cpp/experimental/ranges/title|Iterator}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool Iterator() {
    return ranges::WeaklyIncrementable&lt;I&gt;()
        &amp;&amp; requires(I i) {
               { *i } -&gt; auto&amp;&amp;; // Requires: i is dereferenceable
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>3r8m7tq2u0xv3jxuedoz1b0ci0zvzxe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Mergeable</title>
    <ns>0</ns>
    <id>15880</id>
    <revision>
      <id>89383</id>
      <parentid>89382</parentid>
      <timestamp>2017-01-20T22:02:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>m</comment>
      <text xml:space="preserve" bytes="888">{{cpp/experimental/ranges/title|Mergeable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|since=ranges|1=
template &lt; class I1, class I2, class Out, class R = ranges::less&lt;&gt;,
           class P1 = ranges::identity, class P2 = ranges::identity &gt;
concept bool Mergeable() {
    return ranges::InputIterator&lt;I1&gt;() &amp;&amp; ranges::InputIterator&lt;I2&gt;() &amp;&amp;
           ranges::WeaklyIncrementable&lt;Out&gt;() &amp;&amp;
           ranges::IndirectlyCopyable&lt;I1, Out&gt;() &amp;&amp;
           ranges::IndirectlyCopyable&lt;I2, Out&gt;() &amp;&amp;
           ranges::IndirectStrictWeakOrder&lt;R, ranges::projected&lt;I1, P1&gt;,
                                              ranges::projected&lt;I2, P2&gt;&gt;();
}

}}

The {{tt|Mergeable}} concept specifies the common requirements of algorithms that merge sorted sequences into an output sequence by copying the elements (for example, {{ltt|cpp/experimental/ranges/algorithm/merge|ranges::merge}}).</text>
      <sha1>hdamd7i71hzo99gv48ouo04pieduvru</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/OutputIterator</title>
    <ns>0</ns>
    <id>16122</id>
    <revision>
      <id>90468</id>
      <parentid>90466</parentid>
      <timestamp>2017-02-24T10:25:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Undo revision 90466 by [[Special:Contributions/113.88.80.118|113.88.80.118]] ([[User talk:113.88.80.118|talk]])</comment>
      <text xml:space="preserve" bytes="322">{{cpp/experimental/ranges/title|OutputIterator}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I, class T&gt;
concept bool OutputIterator() {
    return ranges::Iterator&lt;I&gt;() &amp;&amp; ranges::Writable&lt;I, T&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>ld2q2e6pkw4ritcmlep8o5qxjcw7v49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/OutputRange</title>
    <ns>0</ns>
    <id>16139</id>
    <revision>
      <id>89737</id>
      <parentid>89732</parentid>
      <timestamp>2017-01-23T16:14:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="347">{{cpp/experimental/ranges/title|OutputRange}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class R, class T&gt;
concept bool OutputRange() {
    return ranges::Range&lt;R&gt;()
        &amp;&amp; ranges::OutputIterator&lt;ranges::iterator_t&lt;R&gt;, T&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>lgk5mpns8og08vhr3ws3lxiud5vm3cf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Permutable</title>
    <ns>0</ns>
    <id>15881</id>
    <revision>
      <id>89384</id>
      <timestamp>2017-01-20T22:04:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="527">{{cpp/experimental/ranges/title|Permutable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|since=ranges|1=
template &lt;class I&gt;
concept bool Permutable() {
    return ranges::ForwardIterator&lt;I&gt;() &amp;&amp;
           ranges::IndirectlyMovableStorable&lt;I, I&gt;() &amp;&amp;
           ranges::IndirectlySwappable&lt;I, I&gt;();
}
}}

The {{tt|Permutable}} concept specifies the common requirements of algorithms that reorder elements in place by moving or swapping them (for example, {{ltt|cpp/experimental/ranges/algorithm/rotate|ranges::rotate}}).</text>
      <sha1>pb5eaosaz125bpywybgjcjf0oki5c77</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/RandomAccessIterator</title>
    <ns>0</ns>
    <id>16123</id>
    <revision>
      <id>89714</id>
      <timestamp>2017-01-23T15:40:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="917">{{cpp/experimental/ranges/title|RandomAccessIterator}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool RandomAccessIterator() {
    return ranges::BidirectionalIterator&lt;I&gt;()
        &amp;&amp; ranges::DerivedFrom&lt;ranges::iterator_category_t&lt;I&gt;, 
                               ranges::random_access_iterator_tag&gt;()
        &amp;&amp; ranges::StrictTotallyOrdered&lt;I&gt;()
        &amp;&amp; ranges::SizedSentinel&lt;I, I&gt;()
        &amp;&amp; requires(I i, const I j, const ranges::difference_type_t&lt;I&gt; n) {
               { i += n } -&gt; ranges::Same&lt;I&amp;&gt;;
               { j + n }  -&gt; ranges::Same&lt;I&gt;;
               { n + j }  -&gt; ranges::Same&lt;I&gt;;
               { i -= n } -&gt; ranges::Same&lt;I&amp;&gt;;
               { j - n }  -&gt; ranges::Same&lt;I&gt;;
               { j[n] }   -&gt; ranges::Same&lt;ranges::reference_t&lt;I&gt;&gt;;
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>se931zn8n3qe848153xaieg81rlx14o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/RandomAccessRange</title>
    <ns>0</ns>
    <id>16140</id>
    <revision>
      <id>89733</id>
      <timestamp>2017-01-23T16:13:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="367">{{cpp/experimental/ranges/title|RandomAccessRange}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
concept bool RandomAccessRange() {
    return ranges::BidirectionalRange&lt;T&gt;() 
        &amp;&amp; ranges::RandomAccessIterator&lt;ranges::iterator_t&lt;T&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>lr5ucj3r7gj59ywnkyjoaykfr7rdpy3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Range</title>
    <ns>0</ns>
    <id>16134</id>
    <revision>
      <id>89727</id>
      <timestamp>2017-01-23T15:55:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="307">{{cpp/experimental/ranges/title|Range}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
concept bool Range() {
    return requires(T&amp;&amp; t) {
               ranges::end(t);
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>mzahcdvya75k9r0uqw6quul013y6rug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Readable</title>
    <ns>0</ns>
    <id>16112</id>
    <revision>
      <id>89702</id>
      <parentid>89701</parentid>
      <timestamp>2017-01-23T15:26:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1418">{{cpp/experimental/ranges/title|Readable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool Readable() {
    return ranges::Movable&lt;I&gt;()
        &amp;&amp; ranges::DefaultConstructible&lt;I&gt;()
        &amp;&amp; requires(const I&amp; i) {
               typename ranges::value_type_t&lt;I&gt;;
               typename ranges::reference_t&lt;I&gt;;
               typename ranges::rvalue_reference_t&lt;I&gt;;
               { *i } -&gt; ranges::Same&lt;ranges::reference_t&lt;I&gt;&gt;;
               { ranges::iter_move(i) } -&gt; ranges::Same&lt;ranges::rvalue_reference_t&lt;I&gt;&gt;;
           }
        &amp;&amp; ranges::CommonReference&lt;ranges::reference_t&lt;I&gt;, ranges::value_type_t&lt;I&gt;&amp;&gt;()
        &amp;&amp; ranges::CommonReference&lt;ranges::reference_t&lt;I&gt;,
                                   ranges::rvalue_reference_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::CommonReference&lt;ranges::rvalue_reference_t&lt;I&gt;,
                                   const ranges::value_type_t&lt;I&gt;&amp;&gt;()
        &amp;&amp; ranges::Same&lt;std::common_reference_t&lt;ranges::reference_t&lt;I&gt;, 
                                                ranges::value_type_t&lt;I&gt;&gt;,
                        ranges::value_type_t&lt;I&gt;&gt;()
        &amp;&amp; ranges::Same&lt;std::common_reference_t&lt;ranges::rvalue_reference_t&lt;I&gt;,
                                                ranges::value_type_t&lt;I&gt;&gt;,
                        ranges::value_type_t&lt;I&gt;&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>mkug6g2yxhs8mh51kpkufpixio6vonl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Sentinel</title>
    <ns>0</ns>
    <id>16117</id>
    <revision>
      <id>89708</id>
      <timestamp>2017-01-23T15:32:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="370">{{cpp/experimental/ranges/title|Sentinel}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class S, class I&gt;
concept bool Sentinel() {
    return ranges::Semiregular&lt;S&gt;()
        &amp;&amp; ranges::Iterator&lt;I&gt;()
        &amp;&amp; ranges::WeaklyEqualityComparable&lt;S, I&gt;();
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>54uc8l4twir41fs7gnvh7rupqzvez2j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/SizedRange</title>
    <ns>0</ns>
    <id>16135</id>
    <revision>
      <id>89728</id>
      <timestamp>2017-01-23T16:09:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="563">{{cpp/experimental/ranges/title|SizedRange}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
concept bool SizedRange() {
    return ranges::Range&lt;T&gt;()
        &amp;&amp; !ranges::disable_sized_range&lt;std::remove_cv_t&lt;std::remove_reference_t&lt;T&gt;&gt;&gt;
        &amp;&amp; requires(const std::remove_reference_t&lt;T&gt;&amp; t) {
               { ranges::size(t) } 
                   -&gt; ranges::ConvertibleTo&lt;ranges::difference_type_t&lt;ranges::iterator_t&lt;T&gt;&gt;&gt;;
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>iz0wbgytsaq88dtxtlj7subh8qjlqde</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/SizedSentinel</title>
    <ns>0</ns>
    <id>16118</id>
    <revision>
      <id>89709</id>
      <timestamp>2017-01-23T15:33:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="583">{{cpp/experimental/ranges/title|SizedSentinel}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class S, class I&gt;
concept bool SizedSentinel() {
    return ranges::Sentinel&lt;S, I&gt;()
        &amp;&amp; !ranges::disable_sized_sentinel&lt;std::remove_cv_t&lt;S&gt;, std::remove_cv_t&lt;I&gt;&gt;
        &amp;&amp; requires(const I&amp; i, const S&amp; s) {
               { s - i } -&gt; ranges::Same&lt;ranges::difference_type_t&lt;I&gt;&gt;;
               { i - s } -&gt; ranges::Same&lt;ranges::difference_type_t&lt;I&gt;&gt;;
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>skzbfq5hz20z2o38bf3m9b6roek04u6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Sortable</title>
    <ns>0</ns>
    <id>15868</id>
    <revision>
      <id>89360</id>
      <parentid>89359</parentid>
      <timestamp>2017-01-19T23:39:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="525">{{cpp/experimental/ranges/title|Sortable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|since=ranges|1=
template &lt;class I, class R = ranges::less&lt;&gt;, class P = ranges::identity&gt;
concept bool Sortable() {
    return ranges::Permutable&lt;I&gt;() &amp;&amp;
           ranges::IndirectStrictWeakOrder&lt;R, ranges::projected&lt;I, P&gt;&gt;();
}

}}

The {{tt|Sortable}} concept specifies the common requirements of algorithms that permute sequences into ordered sequences (for example, {{ltt|cpp/experimental/ranges/algorithm/sort|ranges::sort}}).</text>
      <sha1>nl6xdw4oc1vq8o99g0728cyig0mvnbp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/View</title>
    <ns>0</ns>
    <id>16136</id>
    <revision>
      <id>89729</id>
      <timestamp>2017-01-23T16:10:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="406">{{cpp/experimental/ranges/title|View}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class T&gt;
constexpr bool __view_predicate = /* see below */; /* exposition only */

template &lt;class T&gt;
concept bool View() {
    return ranges::Range&lt;T&gt;() &amp;&amp; ranges::Semiregular&lt;T&gt;() &amp;&amp; __view_predicate&lt;T&gt;;
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>eyuzs7d9dwfatei9hcob9j516wlo3dd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/WeaklyIncrementable</title>
    <ns>0</ns>
    <id>16114</id>
    <revision>
      <id>89705</id>
      <timestamp>2017-01-23T15:29:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="626">{{cpp/experimental/ranges/title|WeaklyIncrementable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class I&gt;
concept bool WeaklyIncrementable() {
    return ranges::Semiregular&lt;I&gt;()
        &amp;&amp; requires(I i) {
               typename ranges::difference_type_t&lt;I&gt;;
               requires ranges::SignedIntegral&lt;ranges::difference_type_t&lt;I&gt;&gt;();
               { ++i } -&gt; ranges::Same&lt;I&amp;&gt;; /* not required to be equality preserving */
               i++; /* not required to be equality preserving */
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>r9mnhadqpz4ktiuaus41875sfmcojdu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/Writable</title>
    <ns>0</ns>
    <id>16113</id>
    <revision>
      <id>89704</id>
      <timestamp>2017-01-23T15:28:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="423">{{cpp/experimental/ranges/title|Writable}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl|header=experimental/ranges/iterator|since=ranges|1=
template &lt;class Out, class T&gt;
concept bool Writable() {
    return ranges::Semiregular&lt;Out&gt;()
        &amp;&amp; requires(Out o, T&amp;&amp; t) {
               *o = std::forward&lt;T&gt;(t); /* not required to be equality preserving */
           };
}
}}

{{todo|add description and extra caveats}}</text>
      <sha1>b2dzlfnkzw00oa0gct3wy9ljag3uvb6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/ranges/iterator/projected</title>
    <ns>0</ns>
    <id>16145</id>
    <revision>
      <id>89780</id>
      <timestamp>2017-01-25T15:57:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="881">{{cpp/experimental/ranges/title|projected}}
{{cpp/experimental/ranges/iterator/navbar}}
{{ddcl | header=experimental/ranges/iterator|1=
template &lt;ranges::Readable I, ranges::IndirectRegularInvocable&lt;I&gt; Proj&gt;
struct projected {
    using value_type = std::decay_t&lt;ranges::indirect_result_of_t&lt;Proj&amp;(I)&gt;&gt;;
    ranges::indirect_result_of_t&lt;Proj&amp;(I)&gt; operator*() const;
};

template &lt;ranges::WeaklyIncrementable I, class Proj&gt;
struct difference_type&lt;projected&lt;I, Proj&gt;&gt; {
    using type = ranges::difference_type_t&lt;I&gt;;
};
}}

The class template {{tt|projected}} bundles a {{rconcept|Readable|i}} type {{tt|I}} and a function {{tt|Proj}} into a new {{tt|Readable}} type whose {{tt|reference}} type is the result of applying {{tt|Proj}} to the {{tt|reference}} type of {{tt|I}}. It exists solely to ease constraint specification, and so its {{c|operator*()}} may not be actually defined.</text>
      <sha1>tl665jx60dkxtavido0114rslg8idwu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/reduce</title>
    <ns>0</ns>
    <id>14461</id>
    <revision>
      <id>84693</id>
      <parentid>84520</parentid>
      <timestamp>2016-03-21T18:20:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>s/exec/policy/</comment>
      <text xml:space="preserve" bytes="4923">{{cpp/experimental/parallel/title|reduce}}
{{cpp/experimental/parallelism/navbar}}
{{dcl begin}}
{{dcl header | experimental/numeric}}
{{dcl | num=1 | since=parallelism |
template&lt;class InputIt&gt;
typename std::iterator_traits&lt;InputIt&gt;::value_type reduce(
    InputIt first, InputIt last);
}}
{{dcl | num=2 | since=parallelism |
template&lt;class ExecutionPolicy, class InputIterator&gt;
typename std::iterator_traits&lt;InputIt&gt;::value_type reduce(
    ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last);
}}
{{dcl | num=3 | since=parallelism |
template&lt;class InputIt, class T&gt;
T reduce(InputIt first, InputIt last, T init);
}}
{{dcl | num=4 | since=parallelism |
template&lt;class ExecutionPolicy, class InputIt, class T&gt;
T reduce(ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last, T init);
}}
{{dcl | num=5 | since=parallelism |
template&lt;class InputIt, class T, class BinaryOp&gt;
T reduce(InputIt first, InputIt last, T init, BinaryOp binary_op);
}}
{{dcl | num=6 | since=parallelism |
template&lt;class ExecutionPolicy, class InputIt, class T, class BinaryOp&gt;
T reduce(ExecutionPolicy&amp;&amp; policy,
         InputIt first, InputIt last, T init, BinaryOp binary_op);
}}
{{dcl end}}

@1@ same as {{c|reduce(first, last, typename std::iterator_traits&lt;InputIt&gt;::value_type{})}}
@3@ same as {{c|reduce(first, last, init, std::plus&lt;&gt;())}}
@5@ Reduces the range {{math|[first; last)}}, possibly permuted and aggregated in unspecified manner, along with the initial value {{tt|init}} over {{tt|binary_op}}.
@2,4,6@ Same as {{v|1,3,5}}, but executed according to {{tt|policy}}

The behavior is non-deterministic if {{tt|binary_op}} is not associative or not commutative.

The behavior is undefined if {{tt|binary_op}} modifies any element or invalidates any iterator in {{math|[first; last)}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to apply the algorithm to}}
{{par | init | the initial value of the generalized sum}}
{{par | policy | the [[cpp/experimental/parallelism#Execution_policies|execution policy]]}}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in unspecified order to the result of dereferencing the input iterators, the results of other {{tt|binary_op}} and {{tt|init}}.}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Return value===
Generalized sum of {{tt|init}} and {{tt|*first}}, {{tt|*(first+1)}}, ... {{tt|*(last-1)}} over {{tt|binary_op}},

where generalized sum {{math|GSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GSUM(op, b{{su|b=1}}, ..., b{{su|b=K}}), GSUM(op, b{{su|b=M}}, ..., b{{su|b=N}}))}} where
:* {{math|b{{su|b=1}}, ..., b{{su|b=N}}}} may be any permutation of {{math|a1, ..., aN}} and
:* {{math|1 &lt; K+1 {{=}} M ≤ N}}

in other words, the elements of the range may be grouped and rearranged in arbitrary order

===Complexity===
{{math|O(last - first)}} applications of {{tt|binary_op}}.

===Exceptions===
{{cpp/experimental/exceptions_reporting_behavior}}

===Notes===
If the range is empty, {{tt|init}} is returned, unmodified

{{cpp/experimental/execution_policy_note}}

===Example===
{{example|reduce is the out-of-order version of {{lc|std::accumulate}}:
|code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;vector&gt;
#include &lt;numeric&gt;
#include &lt;experimental/execution_policy&gt;
#include &lt;experimental/numeric&gt;

int main()
{
    std::vector&lt;double&gt; v(10'000'007, 0.5);

    {
        auto t1 = std::chrono::high_resolution_clock::now();
        double result = std::accumulate(v.begin(), v.end(), 0.0);
        auto t2 = std::chrono::high_resolution_clock::now();
        std::chrono::duration&lt;double, std::milli&gt; ms = t2 - t1;
        std::cout &lt;&lt; std::fixed &lt;&lt; &quot;std::accumulate result &quot; &lt;&lt; result
                  &lt;&lt; &quot; took &quot; &lt;&lt; ms.count() &lt;&lt; &quot; ms\n&quot;;
    }

    {
        auto t1 = std::chrono::high_resolution_clock::now();
        double result = std::experimental::parallel::reduce(
                            std::experimental::parallel::par,
                            v.begin(), v.end());
        auto t2 = std::chrono::high_resolution_clock::now();
        std::chrono::duration&lt;double, std::milli&gt; ms = t2 - t1;
        std::cout &lt;&lt; &quot;parallel::reduce result &quot;
                  &lt;&lt; result &lt;&lt; &quot; took &quot; &lt;&lt; ms.count() &lt;&lt; &quot; ms\n&quot;;
    }
}
|p=true
|output=
std::accumulate result 5000003.50000 took 12.7365 ms
parallel::reduce result 5000003.50000 took 5.06423 ms
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/experimental/parallelism/dsc transform_reduce}}
{{dsc end}}

[[de:cpp/experimental/reduce]]
[[es:cpp/experimental/reduce]]
[[fr:cpp/experimental/reduce]]
[[it:cpp/experimental/reduce]]
[[ja:cpp/experimental/reduce]]
[[pt:cpp/experimental/reduce]]
[[ru:cpp/experimental/reduce]]
[[zh:cpp/experimental/reduce]]</text>
      <sha1>gboqu099wo914qb1hd70s3poojgb92h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/reseed</title>
    <ns>0</ns>
    <id>14522</id>
    <revision>
      <id>81728</id>
      <timestamp>2015-11-06T05:31:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="1002">{{cpp/experimental/title | reseed}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{dcl begin}}
{{dcl header |experimental/random}}
{{dcl| since=libfund_ts_2 | num = 1 |1=
void reseed();
}}
{{dcl| since=libfund_ts_2 | num = 2 |1=
void reseed(std::default_random_engine::result_type value);
}}
{{dcl end}}

Reseeds the [[cpp/experimental/lib extensions 2#per-thread engine|per-thread random number engine]] and any {{lc|std::uniform_int_distribution}} instances used by {{ltt|cpp/experimental/randint|randint}}.

@1@ Sets the per-thread engine to an unpredictable state.
@2@ Seeds the per-thread engine {{tt|g}} as if by {{c|g.seed(value)}}. 

=== Parameters ===
{{par begin}}
{{par | value | value of the new seed }}
{{par end}}

=== Remarks ===
Subsequent calls to {{tt|randint}} do not depend on values produced by the per-thread engine prior to calling {{tt|reseed}}.

===Example===
{{example
 |code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc randint}}
{{dsc end}}</text>
      <sha1>pbcuyi1oul1zq812c9wo4izkizwk9l3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/resource adaptor</title>
    <ns>0</ns>
    <id>14355</id>
    <revision>
      <id>80277</id>
      <parentid>80073</parentid>
      <timestamp>2015-08-01T19:57:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Member functions of resource_adaptor_imp */</comment>
      <text xml:space="preserve" bytes="4658">{{cpp/experimental/pmr/title|resource_adaptor}}
{{cpp/experimental/lib extensions/pmr/navbar}}

{{ddcl | since=libfund_ts | header=experimental/memory_resource |1=
template &lt; class Alloc &gt;
class resource_adaptor_imp : public memory_resource; // for exposition only

template &lt; class Allocator &gt;
using resource_adaptor = resource_adaptor_imp&lt;
                             typename std::allocator_traits&lt;Allocator&gt;::
                             template rebind_alloc&lt;char&gt;&gt;;
}}

The alias template {{tt|resource_adaptor}} adapts the allocator type {{tt|Allocator}} with a {{tt|memory_resource}} interface. The allocator is rebound to a {{tt|char}} value type before it is actually adapted (using the ''{{tt|resource_adaptor_imp}}'' class template), so that adapting specializations of the same allocator template always yields the same type, regardless of the value type the allocator template is originally instantiated with.

''{{tt|resource_adaptor_imp}}'' is a class template whose members are described below. The name ''{{tt|resource_adaptor_imp}}'' is for exposition purposes only and not normative.

In addition to meeting the {{concept|Allocator}} requirements, {{tt|Allocator}} must additionally satisfy the following requirements:

* Its {{tt|pointer}} shall be identical to {{tt|value_type*}}.
* Its {{tt|const_pointer}} shall be identical to {{tt|value_type const*}}.
* Its {{tt|void_pointer}} shall be identical to {{tt|void*}}.
* Its {{tt|const_void_pointer}} shall be identical to {{tt|void const*}}.

=== Member types of ''resource_adaptor_imp'' ===
{{dsc begin}}
{{dsc hitem| Member type | Definition}}
{{dsc | {{tt|allocator_type}} | {{tt|Alloc}}}}
{{dsc end}}

=== Member functions of ''resource_adaptor_imp'' ===
{{member|{{small|std::experimental::pmr::''resource_adaptor_imp''::}}''resource_adaptor_imp''
|
{{dcl begin}}
{{dcl| num = 1 |  since=libfund_ts |1=
  resource_adaptor_imp() = default;
}}
{{dcl | num = 2 |  since=libfund_ts |1=
  resource_adaptor_imp(const resource_adaptor_imp&amp; other) = default;
}}
{{dcl | num = 3 |  since=libfund_ts |1=
  resource_adaptor_imp(resource_adaptor_imp&amp;&amp; other) = default;
}}
{{dcl | num = 4 |  since=libfund_ts |1=
  explicit resource_adaptor_imp(const Alloc&amp; a2);
}}
{{dcl | num = 5 |  since=libfund_ts |1=
  explicit resource_adaptor_imp(Alloc&amp;&amp; a2);
}}
{{dcl end}}
@1@ Default constructor. Default constructs the wrapped allocator.
@2@ Copy constructor. Copy constructs the wrapped allocator from the allocator wrapped by {{tt|other}}.
@3@ Move constructor. Move constructs the wrapped allocator from the allocator wrapped by {{tt|other}}.
@4@ Initializes the wrapped allocator with {{tt|a2}}.
@5@ Initializes the wrapped allocator with {{c|std::move(a2)}}.

====Parameters====
{{par begin}}
{{par | other | another ''{{tt|resource_adaptor_imp}}'' object to copy or move from }}
{{par | a2 | another {{tt|Alloc}} object to copy or move from }}
{{par end}}
}}

{{member|{{small|std::experimental::pmr::''resource_adaptor_imp''::}}get_allocator
|
{{ddcl |  since=libfund_ts |1=
    allocator_type get_allocator() const; 
}}
Returns a copy of the wrapped allocator.
}}

{{member|{{small|std::experimental::pmr::''resource_adaptor_imp''::}}operator{{=}}
|
{{ddcl |  since=libfund_ts |1=
    resource_adaptor_imp&amp; operator=(const resource_adaptor_imp&amp; other) = default; 
}}
Defaulted copy assignment operator. Copy assigns the wrapped allocator from that of {{tt|other}}.
}}

{{member|{{small|std::experimental::pmr::''resource_adaptor_imp''::}}do_allocate
|
{{ddcl |  since=libfund_ts |1=
    virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
}}
Allocates memory using the {{tt|allocate}} member function of the wrapped allocator.
}}

{{member|{{small|std::experimental::pmr::''resource_adaptor_imp''::}}do_deallocate
|
{{ddcl |  since=libfund_ts |1=
    virtual void do_deallocate(void *p, std::size_t bytes, std::size_t alignment);
}}
Deallocates the storage pointed to by {{tt|p}} using the {{tt|deallocate}} member function of the wrapped allocator. {{tt|p}} must have been allocated using the {{tt|allocate}} member function of an allocator that compares equal to the wrapped allocator, and must not have been subsequently deallocated.
}}

{{member|{{small|std::experimental::pmr::''resource_adaptor_imp''::}}do_is_equal
|
{{ddcl |  since=libfund_ts |1=
    virtual bool do_is_equal(const memory_resource&amp; other);
}}
Let {{tt|p}} be {{c|dynamic_cast&lt;const resource_adaptor_imp*&gt;(&amp;other)}}. If {{tt|p}} is {{tt|nullptr}}, returns {{tt|false}}. Otherwise, return the result of comparing the allocators wrapped by {{tt|*p}} and {{tt|*this}} using {{tt|operator{{==}}}}.

}}</text>
      <sha1>l81cllvjfvzeiqb14aq0fq5u97yfl21</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/sample</title>
    <ns>0</ns>
    <id>14011</id>
    <revision>
      <id>86198</id>
      <parentid>81453</parentid>
      <timestamp>2016-06-24T18:21:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>0346R1: URNG -&gt; URBG</comment>
      <text xml:space="preserve" bytes="3202">{{cpp/experimental/title|sample}}
{{cpp/experimental/lib_extensions/navbar}}

{{dcl begin}}
{{dcl header | experimental/algorithm }}
{{dcl | num=1|since=libfund_ts |
template&lt; class PopulationIterator, class SampleIterator,
          class Distance, class UniformRandomBitGenerator &gt;
SampleIterator sample( PopulationIterator first, PopulationIterator last,
                       SampleIterator out, Distance n, 
                       UniformRandomBitGenerator&amp;&amp; g);
}}
{{dcl | num=2|since=libfund_ts_2 |
template&lt; class PopulationIterator, class SampleIterator, class Distance &gt;
SampleIterator sample( PopulationIterator first, PopulationIterator last,
                       SampleIterator out, Distance n);
}}
{{dcl end}}

Selects {{tt|n}} elements from the sequence {{math|[first; last)}} such that each possible sample has equal probability of appearance, and writes those selected elements into the output iterator {{tt|out}}

If {{tt|n}} is greater than the number of elements in the sequence, selects {{c|last-first}} elements.

The algorithm is stable only if {{tt|PopulationIterator}} meets the requirements of {{concept|ForwardIterator}}

@1@ Random numbers are generated using the random number generator {{tt|g}}.
@2@ Random numbers are generated using the [[cpp/experimental/lib extensions 2#Simple random number generation facilities|per-thread engine]].

===Parameters===
{{par begin}}
{{par | first, last | pair of iterators forming the range from which to make the sampling (the population) }}
{{par | out | the output iterator where the samples are written. Must not be in the {{math|[first;last)}} range }}
{{par | n | number of samples to make}}
{{par | g | the random number generator used as the source of randomness }}
{{par req concept | PopulationIterator | InputIterator}}
{{par req concept | SampleIterator | OutputIterator}}
{{par req | {{tt|SampleIterator}} must also meet the requirements of {{concept|RandomAccessIterator}} if {{tt|PopulationIterator}} doesn't meet {{concept|ForwardIterator}} }}
{{par req | {{tt|PopulationIterator}}'s value type must be writeable to {{tt|out}}}}
{{par req | {{tt|Distance}} must be an integer type}}
{{par req | {{tt|UniformRandomBitGenerator}} must meet the requirements of {{concept|UniformRandomBitGenerator}} and its return type must be convertible to {{tt|Distance}}}}
{{par end}}

===Return value===
Returns a copy of {{tt|out}} after the last sample that was output, that is, end of the sample range.

===Complexity===
Linear in {{c|std::distance(first,last)}}

===Notes===
This function may implement selection sampling or reservoir sampling.

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;random&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;experimental/algorithm&gt;
 
int main()
{
    std::string in = &quot;abcdefgh&quot;, out;
    std::experimental::sample(in.begin(), in.end(), std::back_inserter(out),
                              5, std::mt19937{std::random_device{}()});
    std::cout &lt;&lt; &quot;five random letters out of &quot; &lt;&lt; in &lt;&lt; &quot; : &quot; &lt;&lt; out &lt;&lt; '\n';
}
|p=true
 |output=
five random letters out of abcdefgh : cdefg
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc random_shuffle}}
{{dsc end}}</text>
      <sha1>7arc7486idpn3bsxpfyajk3pcsa41so</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/search</title>
    <ns>0</ns>
    <id>14086</id>
    <revision>
      <id>83907</id>
      <parentid>83906</parentid>
      <timestamp>2016-03-13T18:48:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2272">{{cpp/experimental/title|search}}
{{cpp/experimental/lib_extensions/navbar}}

{{dcl begin}}
{{dcl header | experimental/algorithm }}
{{dcl | since=libfund_ts |
template&lt;class ForwardIterator, class Searcher&gt;
ForwardIterator search( ForwardIterator first, ForwardIterator last,
                        const Searcher&amp; searcher );
}}
{{dcl end}}

Searches the sequence {{math|[first, last)}} for the pattern specified in the constructor of {{tt|searcher}}.

{{rev begin}}
{{rev|until=c++17|
Effectively executes {{c|searcher(first, last)}}.
}}
{{rev|since=c++17|
Effectively executes {{c|searcher(first, last).first}}.
}}
{{rev end}}

{{tt|Searcher}} need not be {{concept|CopyConstructible}}. 

The standard library provides the following searchers:
{{dsc begin}}
{{dsc tclass | cpp/experimental/default_searcher | standard C++ library search algorithm implementation }}
{{dsc tclass | cpp/experimental/boyer_moore_searcher | Boyer-Moore search algorithm implementation}}
{{dsc tclass | cpp/experimental/boyer_moore_horspool_searcher | Boyer-Moore-Horspool search algorithm implementation }}
{{dsc end}}

===Parameters===
{{par begin}}
{{dsc todo}}
{{par end}}

===Return value===
Returns the result of {{tt|searcher.operator()}}, that is, an iterator to the location at which the substring is found or a copy of {{tt|last}} if it was not found.

===Complexity===
Depends on the searcher

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;experimental/algorithm&gt;
#include &lt;experimental/functional&gt;
 
int main()
{
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::experimental::search(in.begin(), in.end(),
                   std::experimental::make_boyer_moore_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}</text>
      <sha1>95lhj14fzqds555kcb949kbfai752cd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/set default resource</title>
    <ns>0</ns>
    <id>14353</id>
    <revision>
      <id>91751</id>
      <parentid>79844</parentid>
      <timestamp>2017-03-31T19:56:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1108">{{cpp/experimental/pmr/title|set_default_resource}}
{{cpp/experimental/lib extensions/pmr/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
memory_resource* set_default_resource(memory_resource* r);
}}

If {{tt|r}} is not null, sets the default memory resource pointer to {{tt|r}}; otherwise, sets the default memory resource pointer to {{tt|new_delete_resource()}}.

The ''default memory resource pointer'' is used by certain facilities when an explicit memory resource is not supplied. The initial default memory resource pointer is the return value of {{tt|new_delete_resource()}}.

This function is thread-safe. Every call to {{tt|set_default_resource}} ''synchronizes with'' (see {{lc|std::memory_order}}) the subsequent {{tt|set_default_resource}} and {{lc|get_default_resource}} calls.

=== Return value ===

Returns the previous value of the default memory resource pointer.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/pmr/dsc get_default_resource}}
{{dsc inc|cpp/experimental/pmr/dsc new_delete_resource}}
{{dsc end}}</text>
      <sha1>ew2nofm7t72y5q6vz07ojku91kit72y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/set/erase if</title>
    <ns>0</ns>
    <id>14186</id>
    <revision>
      <id>79346</id>
      <timestamp>2015-07-05T20:53:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="46">{{include page|cpp/experimental/erase if|set}}</text>
      <sha1>9fpiv48dq098sifvhfar4e5u7bi4970</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared future</title>
    <ns>0</ns>
    <id>15447</id>
    <revision>
      <id>91068</id>
      <parentid>91063</parentid>
      <timestamp>2017-03-16T19:27:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1839">{{cpp/experimental/title|shared_future}}
{{cpp/experimental/concurrency/shared_future/navbar}}
{{dcl begin}}
{{dcl header | experimental/shared_future}}
{{dcl | num=1 | since=concurrency |
template&lt; class T &gt; class shared_future;
}}
{{dcl | num=2 | since=concurrency |
template&lt; class T &gt; class shared_future&lt;T&amp;&gt;;
}}
{{dcl | num=3 | since=concurrency |
template&lt;&gt;          class shared_future&lt;void&gt;;
}}
{{dcl end}}

The class template {{tt|std::experimental::shared_future}} extends {{lc|std::shared_future}} with the following operations:

* an ''unwrapping constructor'' from {{tt|future&lt;shared_future&lt;T&gt;&gt;}};
* a member function {{tt|is_ready}} to query whether the associated shared state is ready; and
* a member function {{tt|then}} to attach a continuation to the future.

There is no interoperation between {{tt|std::experimental::shared_future}} and {{lc|std::shared_future}}.

=== Member functions ===
{{dsc begin}}
{{dsc inc | cpp/experimental/shared_future/dsc constructor}}
{{dsc inc | cpp/experimental/shared_future/dsc is_ready}}
{{dsc inc | cpp/experimental/shared_future/dsc then}}
{{dsc mem fun | cpp/experimental/shared_future/operator{{=}} | assigns the contents}}
{{dsc end}}


{{identical|std::shared_future|
===Member functions===
{{dsc begin}}
{{dsc mem dtor | cpp/thread/shared_future/~shared_future | destructs the future object}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/future/dsc get | shared_future}}

{{dsc h2 | State}}
{{dsc inc | cpp/thread/future/dsc valid | shared_future}}
{{dsc inc | cpp/thread/future/dsc wait | shared_future}}
{{dsc inc | cpp/thread/future/dsc wait_for | shared_future}}
{{dsc inc | cpp/thread/future/dsc wait_until | shared_future}}
{{dsc end}}

}}

===Example===
{{example
| code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc future}}
{{dsc end}}</text>
      <sha1>fyptlg3coqjv9x7n2tbt8nw9qola8gd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared future/is ready</title>
    <ns>0</ns>
    <id>15456</id>
    <revision>
      <id>85476</id>
      <timestamp>2016-04-21T21:19:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="63">{{include page|cpp/experimental/future/is_ready|shared_future}}</text>
      <sha1>7m7wrkwwt6smwlqx3jk2jjyuqc80b9m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared future/operator=</title>
    <ns>0</ns>
    <id>16210</id>
    <revision>
      <id>91066</id>
      <timestamp>2017-03-16T19:26:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1024">{{cpp/experimental/shared_future/title | operator{{=}}}}
{{cpp/experimental/concurrency/shared_future/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
std::experimental::shared_future&lt;T&gt;&amp; operator=( const std::experimental::shared_future&lt;T&gt;&amp; other );
}}
{{dcl | num=2 |1=
std::experimental::shared_future&lt;T&gt;&amp; operator=( std::experimental::shared_future&lt;T&gt;&amp;&amp; other ) noexcept;
}}
{{dcl end}}

Assigns the contents of another {{tt|std::experimental::shared_future}} object.
@1@ Releases any shared state and assigns the contents of {{tt|other}} to {{c|*this}}. After the assignment, {{c|this-&gt;valid() {{==}} other.valid()}}.
@2@ Releases any shared state and move-assigns the contents of {{tt|other}} to {{c|*this}}. After the assignment, {{c|other.valid() {{==}} false}} and {{lc|valid|this-&gt;valid()}} will yield the same value as {{c|other.valid()}} before the assignment.

===Parameters===
{{par begin}}
{{par | other | a {{tt|std::experimental::shared_future}} object to assign from }}
{{par end}}

===Return value===
{{c|*this}}</text>
      <sha1>049q3rusuwocaixvw3uigtgo77wv98g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared future/shared future</title>
    <ns>0</ns>
    <id>15459</id>
    <revision>
      <id>85486</id>
      <timestamp>2016-04-21T21:36:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="63">{{include page| cpp/experimental/future/future| shared_future}}</text>
      <sha1>dzu2e8bnm7yan5mkg61f8zinsllseo9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared future/then</title>
    <ns>0</ns>
    <id>15462</id>
    <revision>
      <id>85491</id>
      <timestamp>2016-04-21T23:27:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="63">{{include page | cpp/experimental/future/then | shared_future}}</text>
      <sha1>qtg4cc69qo5iambck6m0rv5dq2ysh4b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared ptr</title>
    <ns>0</ns>
    <id>14630</id>
    <revision>
      <id>82300</id>
      <parentid>82299</parentid>
      <timestamp>2015-12-13T01:37:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Helper classes */ +</comment>
      <text xml:space="preserve" bytes="2909">{{cpp/experimental/title|shared_ptr}}
{{cpp/experimental/shared_ptr/navbar}}
{{ddcl | header=experimental/memory | since=libfund_ts | 1=
template&lt; class T &gt; class shared_ptr;
}}

{{tt|std::experimental::shared_ptr}} is a modified version of {{lc|std::shared_ptr}} that adds support for arrays.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|element_type}} | {{c|std::remove_extent_t&lt;T&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/shared_ptr/dsc constructor}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/experimental/shared_ptr/dsc get}}
{{dsc inc | cpp/experimental/shared_ptr/dsc operator*}}
{{dsc inc | cpp/experimental/shared_ptr/dsc operator at}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/shared_ptr/dsc pointer_cast}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/experimental/shared_ptr/dsc hash}}
{{dsc end}}


{{identical|nonmember=yes|id=shared_ptr|{{small|std::}}shared_ptr|2=

===Member functions===
The following member functions work with {{lc|std::experimental::shared_ptr}} instead of {{lc|std::shared_ptr}} and {{lc|std::experimental::weak_ptr}} instead of {{lc|std::weak_ptr}}. The behavior is otherwise identical.

{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc destructor}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator{{=}}}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/memory/shared_ptr/dsc reset}}
{{dsc inc | cpp/memory/shared_ptr/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/memory/shared_ptr/dsc use_count}}
{{dsc inc | cpp/memory/shared_ptr/dsc unique}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator bool}}
{{dsc inc | cpp/memory/shared_ptr/dsc owner_before}}
{{dsc end}}

===Non-member functions===
These non-member functions are declared in the {{tt|std::experimental}} namespace, and work with {{tt|std::experimental::shared_ptr}} rather than {{lc|std::shared_ptr}}, but otherwise behaves identically to the corresponding C++14 function.

{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc make_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc allocate_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc get_deleter}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_cmp}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_ltlt}}
{{dsc inc | cpp/memory/shared_ptr/dsc swap2}}
{{dsc break}}
{{dsc inc | cpp/memory/shared_ptr/dsc atomic}}
{{dsc end}}

===Helper class templates === 

These class templates are declared in the {{tt|std::experimental}} namespace, and work with {{tt|std::experimental::shared_ptr}} and {{lc|std::experimental::weak_ptr}} rather than {{lc|std::shared_ptr}} and {{lc|std::weak_ptr}}, but otherwise behaves identically to the corresponding C++14 class template.

{{dsc begin}}
{{dsc inc | cpp/memory/dsc owner_less}}
{{dsc inc | cpp/memory/dsc enable_shared_from_this}}
{{dsc end}}

}}

===Example===
{{example |
code=
}}</text>
      <sha1>j83s3afc19mprgo3s4d7evi1r2f2ef0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared ptr/get</title>
    <ns>0</ns>
    <id>14648</id>
    <revision>
      <id>91488</id>
      <parentid>82307</parentid>
      <timestamp>2017-03-31T19:47:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="587">{{cpp/experimental/shared_ptr/title | get}}
{{cpp/experimental/shared_ptr/navbar}}
{{ddcl | since=libfund_ts |
element_type* get() const;
}}

Returns the stored pointer.

===Parameters===
(none)

===Return value===
The stored pointer.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
A {{tt|shared_ptr}} may share ownership of an object while storing a pointer to another object. {{tt|get()}} returns the stored pointer, not the managed pointer.

===Example===
{{example
 | code=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/experimental/shared_ptr/dsc operator*}}
{{dsc end}}</text>
      <sha1>efpcc2ltt417v0xhtdli6n8w1d0696p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared ptr/hash</title>
    <ns>0</ns>
    <id>14652</id>
    <revision>
      <id>82323</id>
      <timestamp>2015-12-13T03:27:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="796">{{cpp/title | hash&lt;small&gt;(std::experimental::shared_ptr)&lt;/small&gt;}}
{{cpp/experimental/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | since=libfund_ts | 1=
template&lt;class T&gt; struct hash&lt;std::experimental::shared_ptr&lt;T&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for {{c|std::experimental::shared_ptr&lt;T&gt;}} allows users to obtain hashes of objects of type {{c|std::experimental::shared_ptr&lt;T&gt;}}.

For a given {{c|1=std::experimental::shared_ptr&lt;T&gt; p}}, this specialization ensures that  {{c|1=std::hash&lt;std::experimental::shared_ptr&lt;T&gt;&gt;()(p) == std::hash&lt;T*&gt;()(p.get())}}. &lt;!-- This doesn't work for arrays, but is what the spec says. Reported to LWG. --&gt;

===Example===
{{example
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}</text>
      <sha1>b9byakgi2onw7n0z2bqen83ettj7dm4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared ptr/operator at</title>
    <ns>0</ns>
    <id>14650</id>
    <revision>
      <id>91424</id>
      <parentid>82316</parentid>
      <timestamp>2017-03-31T19:43:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1103">{{cpp/experimental/shared_ptr/title | operator[]}}
{{cpp/experimental/shared_ptr/navbar}}
{{ddcl| since=libfund_ts | 1= 
element_type&amp; operator[](std::ptrdiff_t i) const;
}}

Index into the array pointed to by the stored pointer. 

The behavior is undefined if the stored pointer is null or if {{tt|i}} is negative. 

If {{tt|T}} (the template parameter of {{tt|shared_ptr}}) is an array type {{tt|U[N]}}, {{tt|i}} shall be less than {{tt|N}}, or the behavior is undefined.

===Parameters===
{{par begin}}
{{par | i | the array index }}
{{par end}}

===Return value===
A reference to the {{tt|i}}-th element of the array , i.e., {{c|get()[i]}}

===Exceptions===
{{unreviewed noexcept}}

===Remarks===
When {{tt|T}} is not an array type, it is unspecified whether this function is declared. If the function is declared, it is unspecified what its return type is, except that the declaration (although not necessarily the definition) of the function is guaranteed to be legal.

===Example===
{{example
 | code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/shared_ptr/dsc get}}
{{dsc end}}</text>
      <sha1>noykbvpr3yaxrxi4x37mrjhxcvc3dbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared ptr/operator*</title>
    <ns>0</ns>
    <id>14649</id>
    <revision>
      <id>91827</id>
      <parentid>82314</parentid>
      <timestamp>2017-03-31T19:59:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1112">{{cpp/experimental/shared_ptr/title | operator* | operator-&amp;gt;}}
{{cpp/experimental/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts | 1= 
T&amp; operator*() const;
}}
{{dcl | num=2 | since=libfund_ts | 1=
T* operator-&gt;() const;
}}
{{dcl end}}

Dereferences the stored pointer. The behavior is undefined if the stored pointer is null.

===Parameters===
(none)

===Return value===
@1@ The result of dereferencing the stored pointer, i.e., {{c|*get()}}
@2@ The stored pointer, i.e., {{c|get()}}

===Exceptions===
{{unreviewed noexcept}}

===Remarks===
When {{tt|T}} is an array type or (possibly cv-qualified) {{tt|void}}, it is unspecified whether function {{v|1}} is declared.

When {{tt|T}} is an array type, it is unspecified whether function {{v|2}} is declared. 

In either case, if the function is declared, it is unspecified what its return type is, except that the declaration (although not necessarily the definition) of the function is guaranteed to be legal.

===Example===
{{example
 | code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/shared_ptr/dsc get}}
{{dsc end}}</text>
      <sha1>bkpuu2ip6983zc5zz9uh57m92k94cil</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared ptr/pointer cast</title>
    <ns>0</ns>
    <id>14651</id>
    <revision>
      <id>91364</id>
      <parentid>82324</parentid>
      <timestamp>2017-03-31T19:41:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2571">{{cpp/experimental/title | static_pointer_cast | dynamic_pointer_cast | const_pointer_cast | reinterpret_pointer_cast}}
{{cpp/experimental/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts| 1= 
template&lt; class T, class U &gt; 
std::experimental::shared_ptr&lt;T&gt; static_pointer_cast( const std::experimental::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl | num=2 | since=libfund_ts | 1= 
template&lt; class T, class U &gt; 
std::experimental::shared_ptr&lt;T&gt; dynamic_pointer_cast( const std::experimental::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl | num=3 | since=libfund_ts | 1= 
template&lt; class T, class U &gt; 
std::experimental::shared_ptr&lt;T&gt; const_pointer_cast( const std::experimental::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl | num=4 | since=libfund_ts | 1= 
template&lt; class T, class U &gt; 
std::experimental::shared_ptr&lt;T&gt; reinterpret_pointer_cast( const std::experimental::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl end}}

Creates a new instance of {{lc|std::experimental::shared_ptr}} whose stored pointer is obtained from {{tt|r}}'s stored pointer using a cast expression. If {{tt|r}} is empty, so is the new {{tt|shared_ptr}} (but its stored pointer is not necessarily null).

Otherwise, the new {{tt|shared_ptr}} will share ownership with {{tt|r}}, except that it is empty if the {{tt|dynamic_cast}} performed by {{tt|dynamic_pointer_cast}} returns a null pointer.

Let {{tt|Y}} be {{c|typename std::experimental::shared_ptr&lt;T&gt;::element_type}}, then the resulting {{lc|std::experimental::shared_ptr}}'s stored pointer will be obtained by calling (in respective order):

@1@ {{c|static_cast&lt;Y*&gt;(r.get())}}.
@2@ {{c|dynamic_cast&lt;Y*&gt;(r.get())}} (If the result of the {{tt|dynamic_cast}} is a null pointer value, the returned {{tt|shared_ptr}} will be empty).
@3@ {{c|const_cast&lt;Y*&gt;(r.get())}}.
@4@ {{c|reinterpret_cast&lt;Y*&gt;(r.get())}}.

The behavior of these functions is undefined unless the corresponding cast from {{tt|U*}} to {{tt|T*}} is well formed:

@1@ The behavior is undefined unless {{c|static_cast&lt;T*&gt;((U*)nullptr)}} is well formed.
@2@ The behavior is undefined unless {{c|dynamic_cast&lt;T*&gt;((U*)nullptr)}} is well formed.
@3@ The behavior is undefined unless {{c|const_cast&lt;T*&gt;((U*)nullptr)}} is well formed.
@4@ The behavior is undefined unless {{c|reinterpret_cast&lt;T*&gt;((U*)nullptr)}} is well formed.

===Parameters===
{{par begin}}
{{par | r | The pointer to convert}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/shared_ptr/dsc constructor}}
{{dsc inc | cpp/memory/shared_ptr/dsc pointer cast}}
{{dsc end}}</text>
      <sha1>c9olw79mrmp9ji3slklzl3q4cx1zzpg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shared ptr/shared ptr</title>
    <ns>0</ns>
    <id>14653</id>
    <revision>
      <id>91337</id>
      <parentid>82334</parentid>
      <timestamp>2017-03-31T19:40:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="7581">{{cpp/experimental/shared_ptr/title | shared_ptr}}
{{cpp/experimental/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1= 
constexpr shared_ptr();
}}
{{dcl | num=2 | 1= 
constexpr shared_ptr( std::nullptr_t );
}}
{{dcl | num=3 | 1= 
template&lt; class Y &gt; 
explicit shared_ptr( Y* ptr );
}}
{{dcl | num=4 | 1= 
template&lt; class Y, class Deleter &gt; 
shared_ptr( Y* ptr, Deleter d );
}}
{{dcl | num=5 | 1= 
template&lt; class Deleter &gt; 
shared_ptr( std::nullptr_t ptr, Deleter d );
}}
{{dcl | num=6 | 1= 
template&lt; class Y, class Deleter, class Alloc &gt; 
shared_ptr( Y* ptr, Deleter d, Alloc alloc );
}}
{{dcl | num=7 | 1= 
template&lt; class Deleter, class Alloc &gt; 
shared_ptr( std::nullptr_t ptr, Deleter d, Alloc alloc );
}}
{{dcl | num=8 | 1= 
template&lt; class Y &gt; 
shared_ptr( const shared_ptr&lt;Y&gt;&amp; r, element_type *ptr );
}}
{{dcl | num=9 | 1= 
shared_ptr( const shared_ptr&amp; r );
}}
{{dcl | num=9 | 1= 
template&lt; class Y &gt; 
shared_ptr( const shared_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=10 | 1= 
shared_ptr( shared_ptr&amp;&amp; r );
}}
{{dcl | num=10 | 1= 
template&lt; class Y &gt; 
shared_ptr( shared_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl | num=11 | 1= 
template&lt; class Y &gt; 
explicit shared_ptr( const std::weak_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=12 | 1= 
template&lt; class Y &gt; 
shared_ptr( std::auto_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl | num=13 | 1= 
template&lt; class Y, class Deleter &gt; 
shared_ptr( std::unique_ptr&lt;Y,Deleter&gt;&amp;&amp; r );
}}
{{dcl end}}

Constructs new {{tt|shared_ptr}} from a variety of pointer types that refer to an object to manage. 

For the purposes of the description below, a pointer type {{tt|Y*}} is said to be compatible with a pointer type {{tt|T*}} if either {{tt|Y*}} is convertible to {{tt|T*}} or {{tt|Y}} is the array type {{tt|U[N]}} and {{tt|T}} is {{tt|U cv []}} (where cv is some set of cv-qualifiers).

@1-2@ Constructs a {{tt|shared_ptr}} with no managed object, i.e. empty {{tt|shared_ptr}}

@3-7@ Constructs a {{tt|shared_ptr}} with {{tt|ptr}} as the pointer to the managed object. If {{tt|T}} is an array type {{tt|U[N]}}, {{tt|Y(*)[N]}} must be convertible to {{tt|T*}}. If {{tt|T}} is an array type {{tt|U[]}}, {{tt|Y(*)[]}} must be convertible to {{tt|T*}}. Otherwise, {{tt|Y*}} must be convertible to {{tt|T*}}. Additionally:

:@3@ Uses a [[cpp/language/delete|delete-expression]] ({{c|delete ptr}}, if {{tt|T}} is not an array type; {{c|delete[] ptr}} if {{tt|T}} is an array type) as the deleter. {{tt|Y}} must be a complete type. That delete expression must be well formed, have well-defined behavior and not throw any exceptions.

:@4-5@ Uses the specified deleter {{tt|d}} as the deleter. The expression {{c|d(ptr)}} must be well formed, have well-defined behavior and not throw any exceptions. {{tt|Deleter}} must be {{concept|CopyConstructible}}, and its copy constructor and destructor must not throw exceptions.

:@6-7@  Same as {{v|4-5}}, but additionally uses a copy of {{tt|alloc}} for allocation of data for internal use. {{tt|Alloc}} must be a {{concept|Allocator}}, and its copy constructor and destructor must not throw exceptions.

@8@ The ''aliasing constructor'': constructs a {{tt|shared_ptr}} which shares ownership information with {{tt|r}}, but holds an unrelated and unmanaged pointer {{tt|ptr}}. Even if this {{tt|shared_ptr}} is the last of the group to go out of scope, it will call the destructor for the object originally managed by {{tt|r}}. However, calling {{tt|get()}} on this will always return a copy of {{tt|ptr}}. It is the responsibility of the programmer to make sure that this {{tt|ptr}} remains valid as long as this shared_ptr exists, such as in the typical use cases where {{tt|ptr}} is a member of the object managed by {{tt|r}} or is an alias (e.g., downcast) of {{tt|r.get()}}

@9@ Constructs a {{tt|shared_ptr}} which shares ownership of the object managed by {{tt|r}}. If {{tt|r}} manages no object, {{tt|*this}} manages no object too. The template overload doesn't participate in overload resolution if {{tt|Y*}} is not ''compatible with'' {{tt|T*}}.

@10@ Move-constructs a {{tt|shared_ptr}} from {{tt|r}}. After the construction, {{c|*this}} contains a copy of the previous state of {{tt|r}}, {{tt|r}} is empty. The template overload doesn't participate in overload resolution if {{tt|Y*}} is not ''compatible with'' {{tt|T*}}.

@11@ Constructs a {{tt|shared_ptr}} which shares ownership of the object managed by {{tt|r}}. {{tt|Y*}} must be ''compatible with'' {{tt|T*}}. Note that {{c|r.lock()}} may be used for the same purpose: the difference is that this constructor throws an exception if the argument is empty, while {{c|weak_ptr&lt;T&gt;::lock()}} constructs an empty {{tt|shared_ptr}} in that case.

@12@ Constructs a {{tt|shared_ptr}} that stores and owns the object formerly owned by {{tt|r}}. {{tt|Y*}} must be convertible to {{tt|T*}}. After construction, {{tt|r}} is empty.

@13@ Constructs a {{tt|shared_ptr}} which manages the object currently managed by {{tt|r}}. The deleter associated with {{tt|r}} is stored for future deletion of the managed object. {{tt|r}} manages no object after the call. This overload doesn't participate in overload resolution if {{tt|Y*}} is not ''compatible with'' {{tt|T*}}. &lt;br&gt; If {{tt|D}} is a reference type, equivalent to {{c|shared_ptr(r.release(), std::ref(r.get_deleter())}}. Otherwise, equivalent to {{c|shared_ptr(r.release(), r.get_deleter())}} 

===Notes===
When constructing a {{tt|shared_ptr}} from a raw pointer to an object of a type derived from {{lc|std::experimental::enable_shared_from_this}}, the constructors of {{tt|shared_ptr}} update the private {{tt|weak_ptr}} member of the {{lc|std::experimental::enable_shared_from_this}} base so that future calls to {{ltt|cpp/memory/enable_shared_from_this/shared_from_this|shared_from_this()}} would share ownership with the {{tt|shared_ptr}} created by this raw pointer constructor.

The raw pointer overloads assume ownership of the pointed-to object, and so constructing a {{tt|shared_ptr}} using the raw pointer overload for an object that is already managed by a {{tt|shared_ptr}} may lead to undefined behavior, even if the object is of a type derived from {{lc|std::experimental::enable_shared_from_this}}.

===Parameters===
{{par begin}}
{{par | ptr | a pointer to an object to manage}}
{{par | d | a deleter to use to destroy the object}}
{{par | alloc | an allocator to use for allocations of data for internal use}}
{{par | r | another smart pointer to share the ownership to or acquire the ownership from}}
{{par end}} 

===Exceptions===
@1-2@ {{unreviewed noexcept}}

@3@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. The applicable delete-expression ({{c|delete ptr}} if {{tt|T}} is not an array type, {{c|delete[] ptr}} otherwise) is called if an exception occurs.

@4-7@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. {{c|d(ptr)}} is called if an exception occurs.

@8-10@ {{unreviewed noexcept}}

@11@ {{lc|std::bad_weak_ptr}} if {{c|r.expired() {{==}} true}}. The constructor has no effect in this case.

@12@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. This constructor has no effect if an exception occurs.

@13@ If an exception is thrown, the constructor has no effects.

===Example===
{{example
 | code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc make_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc allocate_shared}}
{{dsc end}}</text>
      <sha1>idy08odz0sol2wkllsrbw30l7q14pp9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/shuffle</title>
    <ns>0</ns>
    <id>14523</id>
    <revision>
      <id>81729</id>
      <timestamp>2015-11-06T05:37:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="909">{{cpp/experimental/title|shuffle}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{ddcl | since=libfund_ts_2 | header = experimental/algorithm | 1=
template&lt; class RandomIt&gt;
void shuffle( RandomIt first, RandomIt last);
}}

Reorders the elements in the given range {{tt|[first, last)}} such that each possible permutation of those elements has equal probability of appearance, using the [[cpp/experimental/lib extensions 2#per-thread engine|per-thread random number engine]] as the random number generator.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to shuffle randomly}}
{{par req concept | RandomIt | RandomAccessIterator | ValueSwappable}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc random shuffle}}
{{dsc end}}</text>
      <sha1>na4yycmo6sndl3jaawxu5f5wtv9bzxg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/source location</title>
    <ns>0</ns>
    <id>14249</id>
    <revision>
      <id>79485</id>
      <parentid>79471</parentid>
      <timestamp>2015-07-07T22:46:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweak</comment>
      <text xml:space="preserve" bytes="1393">{{cpp/experimental/title|source_location}}
{{cpp/experimental/lib extensions 2/source_location/navbar}}
{{dcl begin}}
{{dcl header|experimental/source_location}}
{{dcl | since=libfund_ts_2 || 1=
struct source_location;
}}
{{dcl end}}

The {{tt|source_location}} class represents certain information about the source code, such as file names, line numbers, and function names. Previously, functions that desire to obtain this information about the call site (for logging, testing, or debugging purposes) must use function-style macros so that predefined macros like {{lc|__LINE__}} and {{lc|__FILE__}} are expanded in the context of the caller. The {{tt|source_location}} class provides a better alternative.

===Member functions===
{{dsc begin}}
{{dsc h2 | Creation }}
{{dsc inc | cpp/experimental/source_location/dsc constructor}}
{{dsc inc | cpp/experimental/source_location/dsc current}}

{{dsc h2  | Other special member functions}}
{{dsc inc | cpp/experimental/source_location/dsc destructor}}
{{dsc inc | cpp/experimental/source_location/dsc operator{{=}}}}

{{dsc h2 | Field access}}
{{dsc inc | cpp/experimental/source_location/dsc line}}
{{dsc inc | cpp/experimental/source_location/dsc column}}
{{dsc inc | cpp/experimental/source_location/dsc file_name}}
{{dsc inc | cpp/experimental/source_location/dsc function_name}}

{{dsc end}}

===Example===
{{example |
 | code=
 | output=
}}</text>
      <sha1>a2bq5u6wazaetzu115zi3y6mg9t59vh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/source location/column</title>
    <ns>0</ns>
    <id>14265</id>
    <revision>
      <id>91327</id>
      <parentid>79490</parentid>
      <timestamp>2017-03-31T19:40:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="910">{{cpp/experimental/source_location/title|column}}
{{cpp/experimental/lib extensions 2/source_location/navbar}}
{{ddcl | since=libfund_ts_2 | 1=
constexpr std::uint_least32_t column() const;
}}

Returns an implementation-defined value representing some offset from the start of the line represented by this object (i.e., the column number).

===Parameters===
(none)

===Return value===
An implementation-defined value representing some offset from the start of the line represented by this object (i.e., the column number).

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/source_location/dsc line}}
{{dsc inc | cpp/experimental/source_location/dsc file_name}}
{{dsc inc | cpp/experimental/source_location/dsc function_name}}
{{dsc see cpp | cpp/preprocessor/line | Filename and line information}}
{{dsc end}}</text>
      <sha1>0vklx67sjbh1x3fdqghplaamjsdnfar</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/source location/current</title>
    <ns>0</ns>
    <id>14263</id>
    <revision>
      <id>91824</id>
      <parentid>79488</parentid>
      <timestamp>2017-03-31T19:58:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1417">{{cpp/experimental/source_location/title|current}}
{{cpp/experimental/lib extensions 2/source_location/navbar}}

{{dcl begin}}
{{dcl | since=libfund_ts_2 | 1= 
static constexpr source_location current();
}}
{{dcl end}}

Constructs a new {{tt|source_location}} object. 

=== Return value ===
If {{tt|current()}} is invoked directly (via a function call that names {{tt|current()}}),  it returns a {{tt|source_location}} object with implementation-defined values representing the location of the call. The values should be affected by the [[cpp/preprocessor/line|{{tt|#line}} preprocessor directive]] in the same manner as the predefined macros {{c|__LINE__}} and {{c|__FILE__}}.

If {{tt|current()}} is invoked in any other manner, the return value is unspecified.

=== Remarks ===

If {{tt|current()}} is used in an [[cpp/language/data_members#Member initialization|initializer for a non-static data member]], the return value corresponds to the location of the constructor or [[cpp/language/aggregate_initialization|aggregate initialization]] that initializes the data member.

=== Notes ===

When {{tt|current()}} is used in a default argument, the return value will correspond to the location of the call to {{tt|current()}} at the call site.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/source_location/dsc constructor}}
{{dsc end}}</text>
      <sha1>rnkrzoaqyom88x3ujdn1623nsq66uav</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/source location/file name</title>
    <ns>0</ns>
    <id>14266</id>
    <revision>
      <id>91363</id>
      <parentid>79492</parentid>
      <timestamp>2017-03-31T19:41:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="849">{{cpp/experimental/source_location/title|file_name}}
{{cpp/experimental/lib extensions 2/source_location/navbar}}
{{ddcl | since=libfund_ts_2 | 1=
constexpr const char* file_name() const;
}}

Returns the name of the current source file represented by this object, represented as a null-terminated byte string.

===Parameters===
(none)

===Return value===
The name of the current source file represented by this object, represented as a null-terminated byte string.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/source_location/dsc line}}
{{dsc inc | cpp/experimental/source_location/dsc column}}
{{dsc inc | cpp/experimental/source_location/dsc function_name}}
{{dsc see cpp | cpp/preprocessor/line | Filename and line information}}
{{dsc end}}</text>
      <sha1>sydtbvfisa4rxeoqharssi7rqakmet7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/source location/function name</title>
    <ns>0</ns>
    <id>14267</id>
    <revision>
      <id>91356</id>
      <parentid>79493</parentid>
      <timestamp>2017-03-31T19:41:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="931">{{cpp/experimental/source_location/title|function_name}}
{{cpp/experimental/lib extensions 2/source_location/navbar}}
{{ddcl | since=libfund_ts_2 | 1=
constexpr const char* function_name() const;
}}

Returns the name of the function associated with the position represented by this object, if any.

===Parameters===
(none)

===Return value===
If this object represents a position in a body of a function, returns an implementation-defined null-terminated byte string corresponding to the name of the function.

Otherwise, an empty string is returned.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/source_location/dsc line}}
{{dsc inc | cpp/experimental/source_location/dsc column}}
{{dsc inc | cpp/experimental/source_location/dsc file_name}}
{{dsc see cpp | cpp/preprocessor/line | Filename and line information}}
{{dsc end}}</text>
      <sha1>m98x9fovm83wukam4kdnph10kp8gdko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/source location/line</title>
    <ns>0</ns>
    <id>14264</id>
    <revision>
      <id>91489</id>
      <parentid>79489</parentid>
      <timestamp>2017-03-31T19:47:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="720">{{cpp/experimental/source_location/title|line}}
{{cpp/experimental/lib extensions 2/source_location/navbar}}
{{ddcl | since=libfund_ts_2 | 1=
constexpr std::uint_least32_t line() const;
}}

Returns the line number represented by this object.

===Parameters===
(none)

===Return value===
The line number represented by this object.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/source_location/dsc column}}
{{dsc inc | cpp/experimental/source_location/dsc file_name}}
{{dsc inc | cpp/experimental/source_location/dsc function_name}}
{{dsc see cpp | cpp/preprocessor/line | Filename and line information}}
{{dsc end}}</text>
      <sha1>952odu676iexu8oe1j9a5notx918vo5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/source location/source location</title>
    <ns>0</ns>
    <id>14262</id>
    <revision>
      <id>91376</id>
      <parentid>79487</parentid>
      <timestamp>2017-03-31T19:41:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="870">{{cpp/experimental/source_location/title|source_location}}
{{cpp/experimental/lib extensions 2/source_location/navbar}}

{{dcl begin}}
{{dcl | num=1 | since=libfund_ts_2 | 1= 
constexpr source_location();
}}
{{dcl | num=2 | since=libfund_ts_2 | notes={{mark implicit}} | 1= 
source_location( const source_location&amp; other ) = default;
}}
{{dcl | num=3 | since=libfund_ts_2 | notes={{mark implicit}} | 1= 
source_location( source_location&amp;&amp; other ) = default;
}}
{{dcl end}}

@1@ Constructs an {{tt|source_location}} object whose values are implementation defined.
@2-3@ Implicitly declared copy and move constructors.

===Parameters===
{{par begin}}
{{par | other | another {{tt|source_location}} to copy from }}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/source_location/dsc current}}
{{dsc end}}</text>
      <sha1>lucn7xzhn96h62727iuaxslnx619lnp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math</title>
    <ns>0</ns>
    <id>14702</id>
    <revision>
      <id>90219</id>
      <parentid>90211</parentid>
      <timestamp>2017-02-12T05:03:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rvv</comment>
      <text xml:space="preserve" bytes="2433">{{title|Mathematical special functions}}
{{cpp/experimental/special_math/navbar}}
{{fmbox | class=noprint | style=font-size: 0.8em | text='''Merged into ISO C++''' The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, see  [[cpp/numeric/special_math|mathematical special  functions]] {{mark since c++17}} }}

The Mathematical Special Functions library, ISO/IEC 29124:2010, specifies extensions to the C++ standard library that include mathematical special functions (originally part of ISO/IEC TR 19768:2007)

This special functions in this library are implemented in [http://www.boost.org/doc/libs/release/libs/math/doc/html/special.html boost.math], which is currently available on more compilers and platforms than implementations of this standard. At the time of this writing (1/2016) the only compiler that announced direct support is gcc, for version 6.1

===Non-member functions===
{{dsc begin}}
{{dsc header|cmath}}
{{dsc inc | cpp/experimental/special_math/dsc  assoc_laguerre}}
{{dsc inc | cpp/experimental/special_math/dsc  assoc_legendre}}
{{dsc inc | cpp/experimental/special_math/dsc  beta}}
{{dsc inc | cpp/experimental/special_math/dsc  comp_ellint_1}}
{{dsc inc | cpp/experimental/special_math/dsc  comp_ellint_2}}
{{dsc inc | cpp/experimental/special_math/dsc  comp_ellint_3}}
{{dsc inc | cpp/experimental/special_math/dsc  cyl_bessel_i}}
{{dsc inc | cpp/experimental/special_math/dsc  cyl_bessel_j}}
{{dsc inc | cpp/experimental/special_math/dsc  cyl_bessel_k}}
{{dsc inc | cpp/experimental/special_math/dsc  cyl_neumann}}
{{dsc inc | cpp/experimental/special_math/dsc  ellint_1}}
{{dsc inc | cpp/experimental/special_math/dsc  ellint_2}}
{{dsc inc | cpp/experimental/special_math/dsc  ellint_3}}
{{dsc inc | cpp/experimental/special_math/dsc  expint}}
{{dsc inc | cpp/experimental/special_math/dsc  hermite}}
{{dsc inc | cpp/experimental/special_math/dsc  legendre}}
{{dsc inc | cpp/experimental/special_math/dsc  laguerre}}
{{dsc inc | cpp/experimental/special_math/dsc  riemann_zeta}}
{{dsc inc | cpp/experimental/special_math/dsc  sph_bessel}}
{{dsc inc | cpp/experimental/special_math/dsc  sph_legendre}}
{{dsc inc | cpp/experimental/special_math/dsc  sph_neumann}}
{{dsc end}}
===Macros===
{{dsc begin}}
{{dsc macro const | __STDCPP_MATH_SPEC_FUNCS__ | nolink=true | a value of at least {{c|201003L}} indicates that ISO/IEC 29124:2010 is supported}}
{{dsc end}}</text>
      <sha1>loj8lpnla0b8fyj8w6k8w5n5h3w3asf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/assoc laguerre</title>
    <ns>0</ns>
    <id>14730</id>
    <revision>
      <id>83384</id>
      <parentid>83330</parentid>
      <timestamp>2016-02-04T21:27:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>incomplete parameter rename</comment>
      <text xml:space="preserve" bytes="3894">{{cpp/title|assoc_laguerre|assoc_laguerref|assoc_laguerrel}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      assoc_laguerre( unsigned int n, unsigned int m, double x );
double      assoc_laguerre( unsigned int n, unsigned int m, float x );
double      assoc_laguerre( unsigned int n, unsigned int m, long double x );
float       assoc_laguerref( unsigned int n, unsigned int m, float x );
long double assoc_laguerrel( unsigned int n, unsigned int m, long double x );
}}
{{dcl |num=2|
double      assoc_laguerre( unsigned int n, unsigned int m, Integral x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Laguerre_polynomials#Generalized_Laguerre_polynomials|associated Laguerre polynomials]] of the degree {{tt|n}}, order {{tt|m}}, and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|assoc_laguerre}}

===Parameters===
{{par begin}}
{{par | n | the degree of the polymonial, a value of unsigned integer type}}
{{par | m | the order of the polynomial, a value of unsigned integer type}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the associated Laguerre polynomial of {{tt|x}}, that is {{math|(-1){{su|p=m}}{{mfrac|d{{su|p=m}}|dx{{su|p=m}}}}L{{su|b=n+m}}(x)}}, is returned (where {{math|L{{su|b=n+m}}(x)}} is the unassociated Laguerre polynomial, {{c|std::laguerre(n+m, x)}}).

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{tt|x}} is negative, a domain error may occur
* If {{tt|n}} or {{tt|m}} is greater or equal to 128, the behavior is implementation-defined.

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/laguerre.html available in boost.math]

The associated Laguerre polynomials are the polynomial solutions of the equation {{math|xy{{su|p=,,}}+(m+1-x)y{{su|p=,}}+ny {{=}} 0}}

The first few are:
* assoc_laguerre(0, m, x) {{=}} 1
* assoc_laguerre(1, m, x) {{=}} {{math|-x + m + 1}}
* assoc_laguerre(2, m, x) {{=}} {{math|{{mfrac|1|2}}[x{{su|p=2}}-2(m+2)x+(m+1)(m+2)]}}
* assoc_laguerre(3, m, x) {{=}} {{math|{{mfrac|1|6}}[-x{{su|p=3}}-3(m+3)x{{su|p=2}}-3(m+2)(m+3)x+(m+1)(m+2)(m+3)]}}

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double L1(unsigned m, double x) { return -x + m + 1; }
double L2(unsigned m, double x) { return 0.5*(x*x-2*(m+2)*x+(m+1)*(m+2)); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::assoc_laguerre(1, 10, 0.5) &lt;&lt; '=' &lt;&lt; L1(10, 0.5) &lt;&lt; '\n'
              &lt;&lt; std::assoc_laguerre(2, 10, 0.5) &lt;&lt; '=' &lt;&lt; L2(10, 0.5) &lt;&lt; '\n';
}
|output=
10.5=10.5
60.125=60.125
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/special_math/dsc laguerre}}
{{dsc end}}
===External links===
[http://mathworld.wolfram.com/AssociatedLaguerrePolynomial.html Weisstein, Eric W. &quot;Associated Laguerre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/assoc_laguerre]]
[[es:cpp/experimental/special_math/assoc_laguerre]]
[[fr:cpp/experimental/special_math/assoc_laguerre]]
[[it:cpp/experimental/special_math/assoc_laguerre]]
[[ja:cpp/experimental/special_math/assoc_laguerre]]
[[pt:cpp/experimental/special_math/assoc_laguerre]]
[[ru:cpp/experimental/special_math/assoc_laguerre]]
[[zh:cpp/experimental/special_math/assoc_laguerre]]</text>
      <sha1>mtoau55z5k1rwu8rtd0w9162jo9kytl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/assoc legendre</title>
    <ns>0</ns>
    <id>14739</id>
    <revision>
      <id>83432</id>
      <timestamp>2016-02-09T15:36:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3954">{{cpp/title|assoc_legendre|assoc_legendref|assoc_legendrel}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      assoc_legendre( unsigned int n, unsigned int m, double x );
double      assoc_legendre( unsigned int n, unsigned int m, float x );
double      assoc_legendre( unsigned int n, unsigned int m, long double x );
float       assoc_legendref( unsigned int n, unsigned int m, float x );
long double assoc_legendrel( unsigned int n, unsigned int m, long double x );
}}
{{dcl |num=2|
double      assoc_legendre( unsigned int n, unsigned int m, Integral x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Associated_Legendre_polynomials|associated Legendre polynomials]] of the degree {{tt|n}}, order {{tt|m}}, and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|assoc_legendre}}

===Parameters===
{{par begin}}
{{par | n | the degree of the polynomial, a value of unsigned integer type}}
{{par | m | the order of the polynomial, a value of unsigned integer type}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the associated Legendre polynomial {{math|P{{su|p=m|b=n}}}} of {{tt|x}}, that is {{math|(1-x{{su|p=2}}){{su|p=m/2}} {{mfrac|d{{su|p=m}}|dx{{su|p=m}}}}P{{su|b=n}}(x)}}, is returned (where {{math|P{{su|b=n}}(x)}} is the unassociated Legendre polynomial, {{c|std::legendre(n, x)}}).

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}x{{!}} &gt; 1}}, a domain error may occur
* If {{tt|n}} is greater or equal to 128, the behavior is implementation-defined.

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/legendre.html available in boost.math]

The first few associated Legendre polynomials are:
* assoc_legendre(0, 0, x) {{=}} 1
* assoc_legendre(1, 0, x) {{=}} {{math|x}}
* assoc_legendre(1, 1, x) {{=}} {{math|-(1-x{{su|p=2}}){{su|p=1/2}}}}
* assoc_legendre(2, 0, x) {{=}} {{math|{{mfrac|1|2}}(3x{{su|p=2}}-1)}}
* assoc_legendre(2, 1, x) {{=}} {{math|-3x(1-x{{su|p=2}}){{su|p=1/2}}}}
* assoc_legendre(2, 2, x) {{=}} {{math|3(1-x{{su|p=2}})}}

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double P20(double x) { return 0.5*(3*x*x-1); }
double P21(double x) { return -3.0*x*std::sqrt(1-x*x); }
double P22(double x) { return 3*(1-x*x); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::assoc_legendre(2, 0, 0.5) &lt;&lt; '=' &lt;&lt; P20(0.5) &lt;&lt; '\n'
              &lt;&lt; std::assoc_legendre(2, 1, 0.5) &lt;&lt; '=' &lt;&lt; P21(0.5) &lt;&lt; '\n'
              &lt;&lt; std::assoc_legendre(2, 2, 0.5) &lt;&lt; '=' &lt;&lt; P22(0.5) &lt;&lt; '\n';
}
|output=
-0.125=-0.125
-1.29904=-1.29904
2.25=2.25
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/special_math/dsc legendre}}
{{dsc end}}
===External links===
[http://mathworld.wolfram.com/AssociatedLegendrePolynomial.html Weisstein, Eric W. &quot;Associated Legendre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/assoc_legendre]]
[[es:cpp/experimental/special_math/assoc_legendre]]
[[fr:cpp/experimental/special_math/assoc_legendre]]
[[it:cpp/experimental/special_math/assoc_legendre]]
[[ja:cpp/experimental/special_math/assoc_legendre]]
[[pt:cpp/experimental/special_math/assoc_legendre]]
[[ru:cpp/experimental/special_math/assoc_legendre]]
[[zh:cpp/experimental/special_math/assoc_legendre]]</text>
      <sha1>lee2epunq7efcibu2nw07e2zc3bt0ew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/beta</title>
    <ns>0</ns>
    <id>14729</id>
    <revision>
      <id>83328</id>
      <parentid>83326</parentid>
      <timestamp>2016-01-31T17:29:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste typo</comment>
      <text xml:space="preserve" bytes="3461">{{cpp/title|beta|betaf|betal}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      beta( double x, double y );
float       betaf( float x, float y );
long double betal( long double x, long double y );
}}
{{dcl |num=2|
Promoted    beta( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Beta_function|beta function]] of {{tt|x}} and {{tt|y}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

{{cpp/experimental/special_math/macro_note|beta}}

===Parameters===
{{par begin}}
{{par | x, y | values of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the beta function of {{tt|x}} and {{tt|y}}, that is {{math|{{minteg|0|1|t{{su|p=x-1}}(1-t){{su|p=(y-1)}}d''t''}}}}, or, equivalently, {{math|{{mfrac|Γ(x)Γ(y)|Γ(x+y)}}}} is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If any argument is NaN, NaN is returned and domain error is not reported
* The function is only required to be defined where both {{tt|x}} and {{tt|y}} are greater than zero, and is allowed to report a domain error otherwise.

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_beta/beta_function.html available in boost.math]

{{c|beta(x, y)}} equals {{c|beta(y, x)}}

When {{tt|x}} and {{tt|y}} are positive integers, beta(x,y) equals {{math|{{mfrac|(x-1)!(y-1)!|(x+y-1)!}}}}


Binomial coefficients can be expressed in terms of the beta function: {{math|{{mparen|(|)|n|k}}{{=}}{{mfrac|1|(n+1)Β(n-k+1,k+1)}}}}

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
double binom(int n, int k) { return 1/((n+1)*std::beta(n-k+1,k+1)); }
int main()
{
    std::cout &lt;&lt; &quot;Pascal's triangle:\n&quot;;
    for(int n = 1; n &lt; 10; ++n) {
        std::cout &lt;&lt; std::string(20-n*2, ' ');
        for(int k = 1; k &lt; n; ++k)
            std::cout &lt;&lt; std::setw(3) &lt;&lt; binom(n,k) &lt;&lt; ' ';
        std::cout &lt;&lt; '\n';
    }
}
|output=
Pascal's triangle:
                 
                  2 
                3   3 
              4   6   4 
            5  10  10   5 
          6  15  20  15   6 
        7  21  35  35  21   7 
      8  28  56  70  56  28   8 
    9  36  84 126 126  84  36   9 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc tgamma}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/BetaFunction.html Weisstein, Eric W. &quot;Beta Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/beta]]
[[es:cpp/experimental/special_math/beta]]
[[fr:cpp/experimental/special_math/beta]]
[[it:cpp/experimental/special_math/beta]]
[[ja:cpp/experimental/special_math/beta]]
[[pt:cpp/experimental/special_math/beta]]
[[ru:cpp/experimental/special_math/beta]]
[[zh:cpp/experimental/special_math/beta]]</text>
      <sha1>pmk9dqqmk28wsflnvxw9cvws9l0pxf8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/comp ellint 1</title>
    <ns>0</ns>
    <id>14743</id>
    <revision>
      <id>83546</id>
      <parentid>83545</parentid>
      <timestamp>2016-02-24T22:26:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+seealso ellint_1</comment>
      <text xml:space="preserve" bytes="2865">{{cpp/title|comp_ellint_1|comp_ellint_1f|comp_ellint_1l}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      comp_ellint_1( double arg );
double      comp_ellint_1( float arg );
double      comp_ellint_1( long double arg );
float       comp_ellint_1f( float arg );
long double comp_ellint_1l( long double arg );
}}
{{dcl |num=2|
double      comp_ellint_1( Integral arg );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Elliptic_integral#Complete_elliptic_integral_of_the_first_kind|complete elliptic integral of the first kind]] of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|comp_ellint_1}}

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the complete elliptic integral of the first kind of {{tt|arg}}, that is {{lc|ellint_1(arg,π/2)}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}arg{{!}}&gt;1}}, a domain error may occur

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/math_toolkit/ellint/ellint_1.html available in boost.math]

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double hpi = std::acos(-1)/2;
    std::cout &lt;&lt; &quot;K(0) = &quot; &lt;&lt; std::comp_ellint_1(0) &lt;&lt; '\n'
              &lt;&lt; &quot;π/2 = &quot; &lt;&lt; hpi &lt;&lt; '\n'
              &lt;&lt; &quot;K(0.5) = &quot; &lt;&lt; std::comp_ellint_1(0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;F(0.5, π/2) = &quot; &lt;&lt; std::ellint_1(0.5, hpi) &lt;&lt; '\n';
}
|output=
K(0) = 1.5708
π/2 = 1.5708
K(0.5) = 1.68575
F(0.5, π/2) = 1.68575
}}

===External links===
[http://mathworld.wolfram.com/CompleteEllipticIntegraloftheFirstKind.html Weisstein, Eric W. &quot;Complete Elliptic Integral of the First Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/special_math/dsc  ellint_1}}
{{dsc end}}

[[de:cpp/experimental/special_math/comp_ellint_1]]
[[es:cpp/experimental/special_math/comp_ellint_1]]
[[fr:cpp/experimental/special_math/comp_ellint_1]]
[[it:cpp/experimental/special_math/comp_ellint_1]]
[[ja:cpp/experimental/special_math/comp_ellint_1]]
[[pt:cpp/experimental/special_math/comp_ellint_1]]
[[ru:cpp/experimental/special_math/comp_ellint_1]]
[[zh:cpp/experimental/special_math/comp_ellint_1]]</text>
      <sha1>1y4f60ivdnqmpwbbrww4xcmp78snsns</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/expint</title>
    <ns>0</ns>
    <id>14728</id>
    <revision>
      <id>83329</id>
      <parentid>83327</parentid>
      <timestamp>2016-01-31T17:34:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>one more copypaste issue</comment>
      <text xml:space="preserve" bytes="2460">{{cpp/title|expint|expintf|expintl}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      expint( double arg );
double      expint( float arg );
double      expint( long double arg );
float       expintf( float arg );
long double expintl( long double arg );
}}
{{dcl |num=2|
double      expint( Integral arg );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Exponential integral|exponential integral]] of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|expint}}

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, value of the exponential integral of {{tt|arg}}, that is {{math|-{{minteg|-arg|∞|{{mfrac|{{mexp|-t}}|t}}d''t''}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If the argument is ±0, -∞ is returned

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/expint/expint_i.html available in boost.math]

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;Ei(0) = &quot; &lt;&lt; std::expint(0) &lt;&lt; '\n'
              &lt;&lt; &quot;Ei(1) = &quot; &lt;&lt; std::expint(1) &lt;&lt; '\n'
              &lt;&lt; &quot;Gompetz constant = &quot; &lt;&lt; -std::exp(1)*std::expint(-1) &lt;&lt; '\n';
}
|output=
Ei(0) = -inf
Ei(1) = 1.89512
Gompetz constant = 0.596347
}}

===External links===
[http://mathworld.wolfram.com/ExponentialIntegral.html Weisstein, Eric W. &quot;Exponential Integral.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/expint]]
[[es:cpp/experimental/special_math/expint]]
[[fr:cpp/experimental/special_math/expint]]
[[it:cpp/experimental/special_math/expint]]
[[ja:cpp/experimental/special_math/expint]]
[[pt:cpp/experimental/special_math/expint]]
[[ru:cpp/experimental/special_math/expint]]
[[zh:cpp/experimental/special_math/expint]]</text>
      <sha1>t24kp7skdlul174e7d53alyl384n8fj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/hermite</title>
    <ns>0</ns>
    <id>14734</id>
    <revision>
      <id>83383</id>
      <parentid>83351</parentid>
      <timestamp>2016-02-04T21:26:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>incomplete parameter rename</comment>
      <text xml:space="preserve" bytes="3275">{{cpp/title|hermite|hermitef|hermitel}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      hermite( unsigned int n, double x );
double      hermite( unsigned int n, float x );
double      hermite( unsigned int n, long double x );
float       hermitef( unsigned int n, float x );
long double hermitel( unsigned int n, long double x );
}}
{{dcl |num=2|
double      hermite( unsigned int n, Integral x );
}}
{{dcl end}}

@1@ Computes the (physicist's) [[enwiki:Hermite_polynomials|Hermite polynomials]] of the degree {{tt|n}} and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|hermite}}

===Parameters===
{{par begin}}
{{par | n | the degree of the polynomial}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the order-{{tt|n}}Hermite polynomial of {{tt|x}}, that is {{math|(-1){{su|p=n}}{{mexp|x{{su|p=2}}}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}{{mexp|-x{{su|p=2}}}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{tt|n}} is greater or equal than 128, the behavior is implementation-defined

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/hermite.html available in boost.math]

The Hermite polynomials are the polynomial solutions of the equation 
{{math|u{{su|p=,,}}-2xu{{su|p=,}} {{=}} -2nu}}

The first few are:
* hermite(0, x) {{=}} {{math|1}}
* hermite(1, x) {{=}} {{math|2x}}
* hermite(2, x) {{=}} {{math|4x{{su|p=2}}-2}}
* hermite(3, x) {{=}} {{math|8x{{su|p=3}}-12x}}
* hermite(4, x) {{=}} {{math|16x{{su|p=4}}-48x{{su|p=2}}+12}}

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double H3(double x) { return 8*std::pow(x,3) - 12*x; }
double H4(double x) { return 16*std::pow(x,4)-48*x*x+12; }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::hermite(3, 10) &lt;&lt; '=' &lt;&lt; H3(10) &lt;&lt; '\n'
              &lt;&lt; std::hermite(4, 10) &lt;&lt; '=' &lt;&lt; H4(10) &lt;&lt; '\n';
}
|output=
7880=7880
155212=155212
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/special_math/dsc laguerre}}
{{dsc inc | cpp/experimental/special_math/dsc legendre}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/HermitePolynomial.html Weisstein, Eric W. &quot;&quot;Hermite Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/hermite]]
[[es:cpp/experimental/special_math/hermite]]
[[fr:cpp/experimental/special_math/hermite]]
[[it:cpp/experimental/special_math/hermite]]
[[ja:cpp/experimental/special_math/hermite]]
[[pt:cpp/experimental/special_math/hermite]]
[[ru:cpp/experimental/special_math/hermite]]
[[zh:cpp/experimental/special_math/hermite]]</text>
      <sha1>fyuc03t7qswsr4sooj5xlsztw3fdwek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/laguerre</title>
    <ns>0</ns>
    <id>14731</id>
    <revision>
      <id>83382</id>
      <parentid>83331</parentid>
      <timestamp>2016-02-04T21:25:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>incomplete parameter rename</comment>
      <text xml:space="preserve" bytes="3288">{{cpp/title|laguerre|laguerref|laguerrel}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      laguerre( unsigned int n, double x );
double      laguerre( unsigned int n, float x );
double      laguerre( unsigned int n, long double x );
float       laguerref( unsigned int n, float x );
long double laguerrel( unsigned int n, long double x );
}}
{{dcl |num=2|
double      laguerre( unsigned int n, Integral x );
}}
{{dcl end}}

@1@ Computes the non-associated [[enwiki:Laguerre_polynomials|Laguerre polynomials]] of the degree {{tt|n}} and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|laguerre}}

===Parameters===
{{par begin}}
{{par | n | the degree of the polymonial, a value of unsigned integer type}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the nonassociated Laguerre polynomial of {{tt|x}}, that is {{math|{{mfrac|{{mexp|x}}|x!}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}(x{{su|p=n}}{{mexp|-x}})}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{tt|x}} is negative, a domain error may occur
* If {{tt|n}} is greater or equal than 128, the behavior is implementation-defined

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/laguerre.html available in boost.math]

The Laguerre polynomials are the polynomial solutions of the equation {{math|xy{{su|p=,,}}+(1-x)y{{su|p=,}}+ny {{=}} 0}}

The first few are:
* laguerre(0, x) {{=}} 1
* laguerre(1, x) {{=}} {{math|-x + 1}}
* laguerre(2, x) {{=}} {{math|{{mfrac|1|2}}[x{{su|p=2}}-4x+2]}}
* laguerre(3, x) {{=}} {{math|{{mfrac|1|6}}[-x{{su|p=3}}-9x{{su|p=2}}-18x+6]}}

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double L1(double x) { return -x + 1; }
double L2(double x) { return 0.5*(x*x-4*x+2); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::laguerre(1, 0.5) &lt;&lt; '=' &lt;&lt; L1(0.5) &lt;&lt; '\n'
              &lt;&lt; std::laguerre(2, 0.5) &lt;&lt; '=' &lt;&lt; L2(0.5) &lt;&lt; '\n';
}
|output=
0.5=0.5
0.125=0.125
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/special_math/dsc assoc_laguerre}}
{{dsc end}}
===External links===
[http://mathworld.wolfram.com/LaguerrePolynomial.html Weisstein, Eric W. &quot;Laguerre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/laguerre]]
[[es:cpp/experimental/special_math/laguerre]]
[[fr:cpp/experimental/special_math/laguerre]]
[[it:cpp/experimental/special_math/laguerre]]
[[ja:cpp/experimental/special_math/laguerre]]
[[pt:cpp/experimental/special_math/laguerre]]
[[ru:cpp/experimental/special_math/laguerre]]
[[zh:cpp/experimental/special_math/laguerre]]</text>
      <sha1>942ineyl10fpi4ch2lexawj15ck8y4z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/legendre</title>
    <ns>0</ns>
    <id>14736</id>
    <revision>
      <id>87535</id>
      <parentid>83381</parentid>
      <timestamp>2016-09-05T21:19:25Z</timestamp>
      <contributor>
        <ip>108.243.22.39</ip>
      </contributor>
      <comment>I got rid of some extra close braces.</comment>
      <text xml:space="preserve" bytes="3363">{{cpp/title|legendre|legendref|legendrel}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      legendre( unsigned int n, double x );
double      legendre( unsigned int n, float x );
double      legendre( unsigned int n, long double x );
float       legendref( unsigned int n, float x );
long double legendrel( unsigned int n, long double x );
}}
{{dcl |num=2|
double      legendre( unsigned int n, Integral x );
}}
{{dcl end}}

@1@ Computes the unassociated [[enwiki:Legendre_polynomials|Legendre polynomials]] of the degree {{tt|n}} and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|legendre}}

===Parameters===
{{par begin}}
{{par | n | the degree of the polynomial}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the order-{{tt|n}} unassociated Legendre polynomial of {{tt|x}}, that is {{math|{{mfrac|1|2{{su|p=n}}n!}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}(x{{su|p=2}}-1){{su|p=n}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* The function is not required to be defined for {{math|{{!}}x{{!}}&gt;1}}
* If {{tt|n}} is greater or equal than 128, the behavior is implementation-defined

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/legendre.html available in boost.math]

The first few Legendre polynomials are:
* legendre(0, x) {{=}} {{math|1}}
* legendre(1, x) {{=}} {{math|x}}
* legendre(2, x) {{=}} {{math|{{mfrac|1|2}}(3x{{su|p=2}}-1)}}
* legendre(3, x) {{=}} {{math|{{mfrac|1|2}}(5x{{su|p=3}}-3x)}}
* legendre(4, x) {{=}} {{math|{{mfrac|1|8}}(35x{{su|p=4}}-30x{{su|p=2}}+3)}}

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double P3(double x) { return 0.5*(5*std::pow(x,3) - 3*x); }
double P4(double x) { return 0.125*(35*std::pow(x,4)-30*x*x+3); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::legendre(3, 0.25) &lt;&lt; '=' &lt;&lt; P3(0.25) &lt;&lt; '\n'
              &lt;&lt; std::legendre(4, 0.25) &lt;&lt; '=' &lt;&lt; P4(0.25) &lt;&lt; '\n';
}
|output=
-0.335938=-0.335938
0.157715=0.157715
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/special_math/dsc laguerre}}
{{dsc inc | cpp/experimental/special_math/dsc hermite}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/LegendrePolynomial.html Weisstein, Eric W. &quot;Legendre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/legendre]]
[[es:cpp/experimental/special_math/legendre]]
[[fr:cpp/experimental/special_math/legendre]]
[[it:cpp/experimental/special_math/legendre]]
[[ja:cpp/experimental/special_math/legendre]]
[[pt:cpp/experimental/special_math/legendre]]
[[ru:cpp/experimental/special_math/legendre]]
[[zh:cpp/experimental/special_math/legendre]]</text>
      <sha1>dol4fbx17eplbhwu1fnxtidr00yu6nm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/special math/riemann zeta</title>
    <ns>0</ns>
    <id>14732</id>
    <revision>
      <id>83341</id>
      <timestamp>2016-02-01T16:01:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3034">{{cpp/title|riemann_zeta|riemann_zetaf|riemann_zetal}}
{{cpp/experimental/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|
double      riemann_zeta( double arg );
double      riemann_zeta( float arg );
double      riemann_zeta( long double arg );
float       riemann_zetaf( float arg );
long double riemann_zetal( long double arg );
}}
{{dcl |num=2|
double      riemann_zeta( Integral arg );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Riemann_zeta_function|Riemann zeta function]] of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

{{cpp/experimental/special_math/macro_note|riemann_zeta}}

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the Riemann zeta function of {{tt|arg}}, {{math|ζ(arg)}}, defined for the entire real axis:
* For {{math|arg&gt;1}}, {{math|Σ{{su|b=n{{=}}1|p=∞}}n{{su|p=-arg}}}}
* For {{math|0≤arg≤1}}, {{math|{{mfrac|1|1-2{{su|p=1-arg}}}}Σ{{su|b=n{{=}}1|p=∞}}(-1){{su|p=n-1}}n{{su|p=-arg}}}}
* For {{math|arg&lt;0}}, {{math|2{{su|p=arg}}π{{su|p=arg-1}}sin({{mfrac|πarg|2}})Γ(1−arg)ζ(1−arg)}}

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported

===Notes===
Implementations that do not support TR 29124 but support TR 19768, provide this function in the header {{tt|tr1/cmath}} and namespace {{tt|std::tr1}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/math_toolkit/zetas/zeta.html available in boost.math]

===Example===
{{example|(works as shown with gcc 6.0)
|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    // spot checks for well-known values
    std::cout &lt;&lt; &quot;ζ(-1) = &quot; &lt;&lt; std::riemann_zeta(-1) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(0) = &quot; &lt;&lt; std::riemann_zeta(0) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(1) = &quot; &lt;&lt; std::riemann_zeta(1) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(0.5) = &quot; &lt;&lt; std::riemann_zeta(0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(2) = &quot; &lt;&lt; std::riemann_zeta(2) &lt;&lt; ' '
              &lt;&lt; &quot;(π²/6 = &quot; &lt;&lt; std::pow(std::acos(-1),2)/6 &lt;&lt; &quot;)\n&quot;;
}
|output=
ζ(-1) = -0.0833333
ζ(0) = -0.5
ζ(1) = inf
ζ(0.5) = -1.46035
ζ(2) = 1.64493 (π²/6 = 1.64493)
}}

===External links===
[http://mathworld.wolfram.com/RiemannZetaFunction.html Weisstein, Eric W. &quot;Riemann Zeta Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/experimental/special_math/riemann_zeta]]
[[es:cpp/experimental/special_math/riemann_zeta]]
[[fr:cpp/experimental/special_math/riemann_zeta]]
[[it:cpp/experimental/special_math/riemann_zeta]]
[[ja:cpp/experimental/special_math/riemann_zeta]]
[[pt:cpp/experimental/special_math/riemann_zeta]]
[[ru:cpp/experimental/special_math/riemann_zeta]]
[[zh:cpp/experimental/special_math/riemann_zeta]]</text>
      <sha1>058uioi31lqy9er2a4zoujjlhvdpctc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource</title>
    <ns>0</ns>
    <id>14549</id>
    <revision>
      <id>82122</id>
      <timestamp>2015-12-05T08:15:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="2475">{{cpp/experimental/pmr/title|synchronized_pool_resource}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
class synchronized_pool_resource : public memory_resource;
}}

The class {{tt|std::experimental::pmr::synchronized_pool_resource}} is a general-purpose memory resource class with the following properties:
* It owns the allocated memory and frees it on destruction, even if {{tt|deallocate}} has not been called for some of the allocated blocks.
* It consists of a collection of ''pools'' that serves request for different block sizes. Each pool manages a collection of ''chunks'' that are then divided into blocks of uniform size. 
* Calls to {{ltt|cpp/experimental/synchronized_pool_resource/do_allocate}} are dispatched to the pool serving the smallest blocks accommodating the requested size.
* Exhausting memory in the pool causes the next allocation request for that pool to allocate an additional chunk of memory from the ''upstream allocator'' to replenish the pool. The chunk size obtained increases geometrically.
* Allocations requests that exceed the largest block size are served from the ''upstream allocator'' directly.
* The largest block size and maximum chunk size may be tuned by passing a {{lc|std::experimental::pmr::pool_options}} struct to its constructor.

{{tt|synchronized_pool_resource}} may be accessed from multiple threads without external synchronization, and may have thread-specific pools to reduce synchronization costs. If the memory resource is only accessed from one thread, {{ltt|cpp/experimental/unsynchronized_pool_resource}} is more efficient.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc constructor}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc destructor}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc release}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc upstream_resource}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc options}}

{{dsc h2 | Protected member functions}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc do_allocate}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc do_deallocate}}
{{dsc inc | cpp/experimental/synchronized_pool_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>ot87yu7lb9kveb656wgqc00jy4dcxp7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/do allocate</title>
    <ns>0</ns>
    <id>14589</id>
    <revision>
      <id>82171</id>
      <timestamp>2015-12-05T09:28:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1106">{{cpp/experimental/pmr/synchronized_pool_resource/title|do_allocate}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
}}

Allocates storage. 

If the pool selected for a block of size {{tt|bytes}} is unable to satisfy the request from its internal data structures, calls {{tt|allocate()}} on the upstream memory resource to obtain memory.

If the size requested is larger than what the largest pool can handle, memory is allocated by calling {{tt|allocate()}} on the upstream memory resource.

=== Return value ===
A pointer to allocated storage of at least {{tt|bytes}} bytes in size, aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c|alignof(std::max_align_t)}} otherwise. 

=== Exceptions ===
Throws nothing unless calling {{tt|allocate()}} on the upstream memory resource throws.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc allocate}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>qbnen2qamdvwyrjpkgns3pqtbcgvibb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/do deallocate</title>
    <ns>0</ns>
    <id>14590</id>
    <revision>
      <id>82172</id>
      <timestamp>2015-12-05T09:30:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="647">{{cpp/experimental/pmr/synchronized_pool_resource/title|do_deallocate}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment);
}}

Returns the memory at {{tt|p}} to the pool. It is unspecified if or under what circumstances this operation will result in a call to {{tt|deallocate()}} on the upstream memory resource.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc deallocate}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>k4wjvmsi55n3ri4jx8kwhwtg04w6el5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/do is equal</title>
    <ns>0</ns>
    <id>14591</id>
    <revision>
      <id>91484</id>
      <parentid>82173</parentid>
      <timestamp>2017-03-31T19:46:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="644">{{cpp/experimental/pmr/synchronized_pool_resource/title|do_is_equal}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual bool do_is_equal(const memory_resource&amp; other) const;
}}

Compare {{tt|*this}} with {{tt|other}} for identity - memory allocated using a {{tt|synchronized_pool_resource}} can only be deallocated using that same resource.

=== Return value ===
{{c|1=this == dynamic_cast&lt;const synchronized_pool_resource*&gt;(&amp;other)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>mez2l6fkcm6j8i5qiqoz759bmwz2uho</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/options</title>
    <ns>0</ns>
    <id>14588</id>
    <revision>
      <id>82170</id>
      <parentid>82169</parentid>
      <timestamp>2015-12-05T09:21:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="652">{{cpp/experimental/pmr/synchronized_pool_resource/title|options}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
pool_options options() const;
}}
{{dcl end}}

Returns the options that controls the pooling behavior of this resource.

The values in the returned struct may differ from those supplied to the constructor in the following ways:
* Values of zero will be replaced with implementation-specified defaults;
* Sizes may be rounded to an unspecified granularity.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/synchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>dnoqh9qb8lvqke31i4qtsdcewozclx6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/release</title>
    <ns>0</ns>
    <id>14586</id>
    <revision>
      <id>82165</id>
      <timestamp>2015-12-05T09:11:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="575">{{cpp/experimental/pmr/synchronized_pool_resource/title|release}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
void release();
}}
{{dcl end}}

Releases all memory owned by this resource by calling the {{tt|deallocate}} function of the upstream memory resource as needed.

Memory is released back to the upstream resource even if {{tt|deallocate}} has not been called for some of the allocated blocks.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>hrny2tl1f7j1jcjvlyoweeqvufz5yas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/synchronized pool resource</title>
    <ns>0</ns>
    <id>14580</id>
    <revision>
      <id>82186</id>
      <parentid>82185</parentid>
      <timestamp>2015-12-05T10:06:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Undo revision 82185 by [[Special:Contributions/T. Canens|T. Canens]] ([[User talk:T. Canens|talk]]) LOL wrong page</comment>
      <text xml:space="preserve" bytes="1753">{{cpp/experimental/pmr/synchronized_pool_resource/title|synchronized_pool_resource}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | num= 1| 1=
synchronized_pool_resource();
}}
{{dcl|since=libfund_ts | num= 2| 1=
explicit synchronized_pool_resource(memory_resource* upstream);
}}
{{dcl|since=libfund_ts | num= 3| 1=
explicit synchronized_pool_resource(const pool_options&amp; opts);
}}
{{dcl|since=libfund_ts | num= 4| 1=
synchronized_pool_resource(const pool_options&amp; opts,
                           memory_resource* upstream);
}}
{{dcl|since=libfund_ts | num= 5| 1=
synchronized_pool_resource(const synchronized_pool_resource&amp;) = delete;
}}
{{dcl end}}

Constructs a {{tt|synchronized_pool_resource}}.

@1-4@ Constructs a {{tt|synchronized_pool_resource}} using the specified upstream memory resource and tuned according to the specified options. The resulting object holds a copy of {{tt|upstream}} but does not own the resource to which {{tt|upstream}} points.
&lt;br /&gt; The overloads not taking {{tt|opts}} as a parameter uses a default constructed instance of {{ltt|cpp/experimental/pool_options}} as the options. The overloads not taking {{tt|upstream}} as a parameter uses the return value of {{c|std::experimental::pmr::get_default_resource()}} as the upstream memory resource.

@5@ Copy constructor is deleted.

=== Parameters ===

{{par begin}}
{{par | opts | a {{tt|pool_options}} struct containing the constructor options }}
{{par | upstream | the upstream memory resource to use }}
{{par end}}

=== Exceptions ===

@1-4@ Throws only if a call to the {{tt|allocate()}} function of the upstream resource throws. It is unspecified if or under what conditions such a call takes place.</text>
      <sha1>155u7e6qmqsdzsbe4h5kiujzg25uvi4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/upstream resource</title>
    <ns>0</ns>
    <id>14587</id>
    <revision>
      <id>82168</id>
      <timestamp>2015-12-05T09:18:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="515">{{cpp/experimental/pmr/synchronized_pool_resource/title|upstream_resource}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
memory_resource* upstream_resource() const;
}}
{{dcl end}}

Returns a pointer to the upstream memory resource. This is the same value as the {{tt|upstream}} argument passed to the constructor of this object.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/synchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>hwzco6yizas0kr337340lvkd6pqo7j5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/synchronized pool resource/~synchronized pool resource</title>
    <ns>0</ns>
    <id>14582</id>
    <revision>
      <id>82160</id>
      <timestamp>2015-12-05T09:03:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="495">{{cpp/experimental/pmr/synchronized_pool_resource/title|~synchronized_pool_resource}}
{{cpp/experimental/lib extensions/pmr/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
virtual ~synchronized_pool_resource();
}}
{{dcl end}}

Destroys a {{tt|synchronized_pool_resource}}.

Deallocates all memory owned by this resource by calling {{c|this-&gt;release()}}.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/synchronized_pool_resource/dsc release}}
{{dsc end}}</text>
      <sha1>tu03o2e1z39c6a4gz2keg8b7r7cessg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/to array</title>
    <ns>0</ns>
    <id>14193</id>
    <revision>
      <id>83454</id>
      <parentid>82221</parentid>
      <timestamp>2016-02-12T15:14:26Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+  Possible implementation</comment>
      <text xml:space="preserve" bytes="1691">{{cpp/experimental/title | to_array}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{dcl begin}}
{{dcl header |experimental/array}}
{{dcl| since=libfund_ts_2 | 1=
template &lt;class T, std::size_t N&gt;
constexpr std::array&lt;std::remove_cv_t&lt;T&gt;, N&gt; to_array(T (&amp;a)[N]);
}}
{{dcl end}}

Creates a {{lc|std::array}} from the built-in array {{tt|a}}. The elements of the {{lc|std::array}} are copy-initialized from the corresponding element of {{tt|a}}.

===Parameters===
{{par begin}}
{{par | a | the built-in array to be used to initialize the {{lc|std::array}}}}
{{par end}}

===Return value===
An {{lc|std::array}} object whose elements are copy-initialized from the corresponding element of {{tt|a}}.

===Possible implementation===
{{eq fun|1=
namespace detail {
template &lt;class T, std::size_t N, std::size_t... I&gt;
constexpr std::array&lt;std::remove_cv_t&lt;T&gt;, N&gt;
    to_array_impl(T (&amp;a)[N], std::index_sequence&lt;I...&gt;)
{
    return { {a[I]...} };
}
}

template &lt;class T, std::size_t N&gt;
constexpr std::array&lt;std::remove_cv_t&lt;T&gt;, N&gt; to_array(T (&amp;a)[N])
{
    return detail::to_array_impl(a, std::make_index_sequence&lt;N&gt;{});
}
}}

===Example===
{{example
 |code=
#include &lt;experimental/array&gt;
#include &lt;unistd.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;assert.h&gt;

// mkstemp(3) that works
template &lt;size_t N&gt;
int tempfd(char const (&amp;tmpl)[N])
{
    using std::experimental::to_array;

    auto s = to_array(tmpl);
    int fd = mkstemp(s.data());
    if (fd != -1)
        unlink(s.data());

    return fd;
}

int main()
{
    int fd = tempfd(&quot;/tmp/test.XXXXXX&quot;);
    int rt = close(fd);
    assert(rt == 0);
}

 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/experimental/dsc make array}}
{{dsc end}}</text>
      <sha1>gvtlohp7j35ribcq2xtzam1i0zx0wgp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/transform reduce</title>
    <ns>0</ns>
    <id>14457</id>
    <revision>
      <id>84521</id>
      <parentid>82461</parentid>
      <timestamp>2016-03-18T23:31:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Parameters */ likewise</comment>
      <text xml:space="preserve" bytes="4146">{{cpp/experimental/parallel/title|transform_reduce}}
{{cpp/experimental/parallelism/navbar}}
{{dcl begin}}
{{dcl header | experimental/numeric}}
{{dcl | num=1 | since=parallelism |
template&lt;class InputIt, class UnaryOp, class T, class BinaryOp&gt;
T transform_reduce(InputIt first, InputIt last,
                   UnaryOp unary_op, T init, BinaryOp binary_op);
}}
{{dcl | num=2 | since=parallelism |
template&lt;class ExecutionPolicy,
         class InputIt, class UnaryOp, class T, class BinaryOp&gt;
T transform_reduce(ExecutionPolicy&amp;&amp; policy,
                   InputIt first, InputIt last,
                   UnaryOp unary_op, T init, BinaryOp binary_op);
}}
{{dcl end}}

Applies {{tt|unary_op}} to each element in the range {{math|[first; last)}} and reduces the results (possibly permuted and aggregated in unspecified manner) along with the initial value {{tt|init}} over {{tt|binary_op}}.

The behavior is non-deterministic if {{tt|binary_op}} is not associative or not commutative.

The behavior is undefined if {{tt|unary_op}} or {{tt|binary_op}} modifies any element or invalidates any iterator in {{math|[first; last)}}.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to apply the algorithm to}}
{{par | init | the initial value of the generalized sum}}
{{par | policy | the [[cpp/experimental/parallelism#Execution_policies|execution policy]]}}
{{par | unary_op | unary {{concept|FunctionObject}} that will be applied to each element of the input range. The return type must be acceptable as input to {{tt|binary_op}} }}
{{par | binary_op | binary {{concept|FunctionObject}} that will be applied in unspecified order to the results of {{tt|unary_op}}, the results of other {{tt|binary_op}} and {{tt|init}}.}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Return value===
Generalized sum of {{tt|init}} and {{tt|unary_op(*first)}}, {{tt|unary_op(*(first+1))}}, ... {{tt|unary_op(*(last-1))}} over {{tt|binary_op}},

where generalized sum {{math|GSUM(op, a{{su|b=1}}, ..., a{{su|b=N}})}} is defined as follows: 
* if {{math|N{{=}}1}}, {{math|a{{su|b=1}}}}
* if {{math|N &gt; 1}}, {{math|op(GSUM(op, b{{su|b=1}}, ..., b{{su|b=K}}), GSUM(op, b{{su|b=M}}, ..., b{{su|b=N}}))}} where
:* {{math|b{{su|b=1}}, ..., b{{su|b=N}}}} may be any permutation of {{math|a1, ..., aN}} and
:* {{math|1 &lt; K+1 {{=}} M ≤ N}}

in other words, the results of unary_op may be grouped and arranged in arbitrary order.

===Complexity===
{{math|O(last - first)}} applications each of {{tt|unary_op}} and {{tt|binary_op}}.

===Exceptions===
{{cpp/experimental/exceptions_reporting_behavior}}

===Notes===
{{tt|unary_op}} is not applied to {{tt|init}}

If the range is empty, {{tt|init}} is returned, unmodified

{{cpp/experimental/execution_policy_note}}

===Example===
{{example|transform_reduce can be used to parallelize {{lc|std::inner_product}}:
|code=
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;experimental/numeric&gt;
#include &lt;experimental/execution_policy&gt;
#include &lt;boost/iterator/zip_iterator.hpp&gt;
#include &lt;boost/tuple.hpp&gt;

int main()
{
    std::vector&lt;double&gt; xvalues(10007, 1.0), yvalues(10007, 1.0);

    double result = std::experimental::parallel::transform_reduce(
        std::experimental::parallel::par,
        boost::iterators::make_zip_iterator(
            boost::make_tuple(std::begin(xvalues), std::begin(yvalues))),
        boost::iterators::make_zip_iterator(
            boost::make_tuple(std::end(xvalues), std::end(yvalues))),
        [](auto r) { return boost::get&lt;0&gt;(r) * boost::get&lt;1&gt;(r); }
        0.0,
        std::plus&lt;&gt;()
    );
    std::cout &lt;&lt; result &lt;&lt; '\n';
}
|output=
10007
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/experimental/parallelism/dsc reduce}}
{{dsc end}}

[[de:cpp/algorithm/partial sum]]
[[es:cpp/algorithm/partial sum]]
[[fr:cpp/algorithm/partial sum]]
[[it:cpp/algorithm/partial sum]]
[[ja:cpp/algorithm/partial sum]]
[[pt:cpp/algorithm/partial sum]]
[[ru:cpp/algorithm/partial sum]]
[[zh:cpp/algorithm/partial sum]]</text>
      <sha1>0giii4nnto2v4i1tf4e3v7k5wh86kr4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/type trait variable templates</title>
    <ns>0</ns>
    <id>14313</id>
    <revision>
      <id>81448</id>
      <parentid>81446</parentid>
      <timestamp>2015-10-27T03:06:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>more subst</comment>
      <text xml:space="preserve" bytes="15477">{{title|Variable templates for type traits {{mark since libfund ts}}}}
{{cpp/experimental/lib extensions/navbar}}

Version 1 of the C++ Extensions for Library Fundamentals provides a number of {{tt|constexpr}} variable templates for type traits classes, as well as other similar class templates with public {{tt|::value}} members.

Unless otherwise noted, the following variable templates are defined in the {{tt|std::experimental}} namespace.

{{dsc begin}}
{{dsc h1 | Type traits}}
{{dsc h2 | Primary type categories}}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/type_traits }}
{{dsc | {{anchor|is_void|is_void_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_void_v =}}| {{c/core|std::is_void&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_null_pointer|is_null_pointer_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_null_pointer_v =}}| {{c/core|std::is_null_pointer&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_integral|is_integral_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_integral_v =}}| {{c/core|std::is_integral&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_floating_point|is_floating_point_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_floating_point_v =}}| {{c/core|std::is_floating_point&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_array|is_array_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_array_v =}}| {{c/core|std::is_array&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_pointer|is_pointer_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_pointer_v =}}| {{c/core|std::is_pointer&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_lvalue_reference|is_lvalue_reference_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_lvalue_reference_v =}}| {{c/core|std::is_lvalue_reference&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_rvalue_reference|is_rvalue_reference_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_rvalue_reference_v =}}| {{c/core|std::is_rvalue_reference&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_member_object_pointer|is_member_object_pointer_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_member_object_pointer_v =}}| {{c/core|std::is_member_object_pointer&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_member_function_pointer|is_member_function_pointer_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_member_function_pointer_v =}}| {{c/core|std::is_member_function_pointer&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_enum|is_enum_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_enum_v =}}| {{c/core|std::is_enum&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_union|is_union_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_union_v =}}| {{c/core|std::is_union&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_class|is_class_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_class_v =}}| {{c/core|std::is_class&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_function|is_function_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_function_v =}}| {{c/core|std::is_function&lt;T&gt;::value;}}}}

{{dsc h2 | Composite type categories }}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/type_traits }}
{{dsc | {{anchor|is_reference|is_reference_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_reference_v =}}| {{c/core|std::is_reference&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_arithmetic|is_arithmetic_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_arithmetic_v =}}| {{c/core|std::is_arithmetic&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_fundamental|is_fundamental_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_fundamental_v =}}| {{c/core|std::is_fundamental&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_object|is_object_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_object_v =}}| {{c/core|std::is_object&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_scalar|is_scalar_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_scalar_v =}}| {{c/core|std::is_scalar&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_compound|is_compound_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_compound_v =}}| {{c/core|std::is_compound&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_member_pointer|is_member_pointer_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_member_pointer_v =}}| {{c/core|std::is_member_pointer&lt;T&gt;::value;}}}}

{{dsc h2 | Type properties }}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/type_traits }}
{{dsc | {{anchor|is_const|is_const_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_const_v =}}| {{c/core|std::is_const&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_volatile|is_volatile_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_volatile_v =}}| {{c/core|std::is_volatile&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivial|is_trivial_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivial_v =}}| {{c/core|std::is_trivial&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_copyable|is_trivially_copyable_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivially_copyable_v =}}| {{c/core|std::is_trivially_copyable&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_standard_layout|is_standard_layout_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_standard_layout_v =}}| {{c/core|std::is_standard_layout&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_pod|is_pod_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_pod_v =}}| {{c/core|std::is_pod&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_literal_type|is_literal_type_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_literal_type_v =}}| {{c/core|std::is_literal_type&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_empty|is_empty_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_empty_v =}}| {{c/core|std::is_empty&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_polymorphic|is_polymorphic_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_polymorphic_v =}}| {{c/core|std::is_polymorphic&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_abstract|is_abstract_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_abstract_v =}}| {{c/core|std::is_abstract&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_final|is_final_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_final_v =}}| {{c/core|std::is_final&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_signed|is_signed_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_signed_v =}}| {{c/core|std::is_signed&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_unsigned|is_unsigned_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_unsigned_v =}}| {{c/core|std::is_unsigned&lt;T&gt;::value;}}}}
{{dsc end}}
{{dsc begin}}
{{dsc h2 | Supported operations }}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/type_traits }}
{{dsc | {{anchor|is_constructible|is_constructible_v}}{{c/core|1=template &lt;class T, class... Args&gt; constexpr bool is_constructible_v =}}| {{c/core|std::is_constructible&lt;T, Args...&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_constructible|is_trivially_constructible_v}}{{c/core|1=template &lt;class T, class... Args&gt; constexpr bool is_trivially_constructible_v =}}| {{c/core|std::is_trivially_constructible&lt;T, Args...&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_constructible|is_nothrow_constructible_v}}{{c/core|1=template &lt;class T, class... Args&gt; constexpr bool is_nothrow_constructible_v =}}| {{c/core|std::is_nothrow_constructible&lt;T, Args...&gt;::value;}}}}
{{dsc | {{anchor|is_default_constructible|is_default_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_default_constructible_v =}}| {{c/core|std::is_default_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_default_constructible|is_trivially_default_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivially_default_constructible_v =}}| {{c/core|std::is_trivially_default_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_default_constructible|is_nothrow_default_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_nothrow_default_constructible_v =}}| {{c/core|std::is_nothrow_default_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_copy_constructible|is_copy_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_copy_constructible_v =}}| {{c/core|std::is_copy_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_copy_constructible|is_trivially_copy_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivially_copy_constructible_v =}}| {{c/core|std::is_trivially_copy_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_copy_constructible|is_nothrow_copy_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_nothrow_copy_constructible_v =}}| {{c/core|std::is_nothrow_copy_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_move_constructible|is_move_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_move_constructible_v =}}| {{c/core|std::is_move_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_move_constructible|is_trivially_move_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivially_move_constructible_v =}}| {{c/core|std::is_trivially_move_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_move_constructible|is_nothrow_move_constructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_nothrow_move_constructible_v =}}| {{c/core|std::is_nothrow_move_constructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_assignable|is_assignable_v}}{{c/core|1=template &lt;class T, class U&gt; constexpr bool is_assignable_v =}}| {{c/core|std::is_assignable&lt;T, U&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_assignable|is_trivially_assignable_v}}{{c/core|1=template &lt;class T, class U&gt; constexpr bool is_trivially_assignable_v =}}| {{c/core|std::is_trivially_assignable&lt;T, U&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_assignable|is_nothrow_assignable_v}}{{c/core|1=template &lt;class T, class U&gt; constexpr bool is_nothrow_assignable_v =}}| {{c/core|std::is_nothrow_assignable&lt;T, U&gt;::value;}}}}
{{dsc | {{anchor|is_copy_assignable|is_copy_assignable_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_copy_assignable_v =}}| {{c/core|std::is_copy_assignable&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_copy_assignable|is_trivially_copy_assignable_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivially_copy_assignable_v =}}| {{c/core|std::is_trivially_copy_assignable&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_copy_assignable|is_nothrow_copy_assignable_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_nothrow_copy_assignable_v =}}| {{c/core|std::is_nothrow_copy_assignable&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_move_assignable|is_move_assignable_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_move_assignable_v =}}| {{c/core|std::is_move_assignable&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_move_assignable|is_trivially_move_assignable_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivially_move_assignable_v =}}| {{c/core|std::is_trivially_move_assignable&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_move_assignable|is_nothrow_move_assignable_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_nothrow_move_assignable_v =}}| {{c/core|std::is_nothrow_move_assignable&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_destructible|is_destructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_destructible_v =}}| {{c/core|std::is_destructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_trivially_destructible|is_trivially_destructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_trivially_destructible_v =}}| {{c/core|std::is_trivially_destructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_nothrow_destructible|is_nothrow_destructible_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_nothrow_destructible_v =}}| {{c/core|std::is_nothrow_destructible&lt;T&gt;::value;}}}}
{{dsc | {{anchor|has_virtual_destructor|has_virtual_destructor_v}}{{c/core|1=template &lt;class T&gt; constexpr bool has_virtual_destructor_v =}}| {{c/core|std::has_virtual_destructor&lt;T&gt;::value;}}}}
{{dsc end}}
{{dsc begin}}
{{dsc h2 | Property queries }}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/type_traits }}
{{dsc | {{anchor|alignment_of|alignment_of_v}}{{c/core|1=template &lt;class T&gt; constexpr std::size_t alignment_of_v =}}| {{c/core|std::alignment_of&lt;T&gt;::value;}}}}
{{dsc | {{anchor|rank|rank_v}}{{c/core|1=template &lt;class T&gt; constexpr std::size_t rank_v =}}| {{c/core|std::rank&lt;T&gt;::value;}}}}
{{dsc | {{anchor|extent|extent_v}}{{c/core|1=template &lt;class T, unsigned I = 0&gt; constexpr std::size_t extent_v =}}| {{c/core|std::extent&lt;T, I&gt;::value;}}}}

{{dsc h2 | Type relationships }}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/type_traits }}
{{dsc | {{anchor|is_same|is_same_v}}{{c/core|1=template &lt;class T, class U&gt; constexpr bool is_same_v =}}| {{c/core|std::is_same&lt;T, U&gt;::value;}}}}
{{dsc | {{anchor|is_base_of|is_base_of_v}}{{c/core|1=template &lt;class Base, class Derived&gt; constexpr bool is_base_of_v =}}| {{c/core|std::is_base_of&lt;Base, Derived&gt;::value;}}}}
{{dsc | {{anchor|is_convertible|is_convertible_v}}{{c/core|1=template &lt;class From, class To&gt; constexpr bool is_convertible_v =}}| {{c/core|std::is_convertible&lt;From, To&gt;::value;}}}}

{{dsc h1 | Other variable templates }}
{{dsc h2 | {{lc|std::ratio}} comparison }}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/ratio }}
{{dsc | {{anchor|ratio_equal|ratio_equal_v}}{{c/core|1=template &lt;class R1, class R2&gt; constexpr bool ratio_equal_v =}}| {{c/core|std::ratio_equal&lt;R1, R2&gt;::value;}}}}
{{dsc | {{anchor|ratio_not_equal|ratio_not_equal_v}}{{c/core|1=template &lt;class R1, class R2&gt; constexpr bool ratio_not_equal_v =}}| {{c/core|std::ratio_not_equal&lt;R1, R2&gt;::value;}}}}
{{dsc | {{anchor|ratio_less|ratio_less_v}}{{c/core|1=template &lt;class R1, class R2&gt; constexpr bool ratio_less_v =}}| {{c/core|std::ratio_less&lt;R1, R2&gt;::value;}}}}
{{dsc | {{anchor|ratio_less_equal|ratio_less_equal_v}}{{c/core|1=template &lt;class R1, class R2&gt; constexpr bool ratio_less_equal_v =}}| {{c/core|std::ratio_less_equal&lt;R1, R2&gt;::value;}}}}
{{dsc | {{anchor|ratio_greater|ratio_greater_v}}{{c/core|1=template &lt;class R1, class R2&gt; constexpr bool ratio_greater_v =}}| {{c/core|std::ratio_greater&lt;R1, R2&gt;::value;}}}}
{{dsc | {{anchor|ratio_greater_equal|ratio_greater_equal_v}}{{c/core|1=template &lt;class R1, class R2&gt; constexpr bool ratio_greater_equal_v =}}| {{c/core|std::ratio_greater_equal&lt;R1, R2&gt;::value;}}}}

{{dsc h2 | Miscellaneous}}
{{dsc hitem | Variable template | Value }}
{{dsc header | experimental/tuple }}
{{dsc | {{anchor|tuple_size|tuple_size_v}}{{c/core|1=template &lt;class T&gt; constexpr std::size_t tuple_size_v =}}| {{c/core|std::tuple_size&lt;T&gt;::value;}}}}

{{dsc header | experimental/chrono}}
{{dsc | {{anchor|treat_as_floating_point|treat_as_floating_point_v}}{{c/core|1=template &lt;class Rep&gt; constexpr bool treat_as_floating_point_v =}}| {{c/core|std::chrono::treat_as_floating_point&lt;Rep&gt;::value;}}&lt;sup&gt;[1]&lt;/sup&gt;}}

{{dsc header | experimental/system_error}}
{{dsc | {{anchor|is_error_code_enum|is_error_code_enum_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_error_code_enum_v =}}| {{c/core|std::is_error_code_enum&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_error_condition_enum|is_error_condition_enum_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_error_condition_enum_v =}}| {{c/core|std::is_error_condition_enum&lt;T&gt;::value;}}}}

{{dsc header | experimental/functional}}
{{dsc | {{anchor|is_bind_expression|is_bind_expression_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_bind_expression_v =}}| {{c/core|std::is_bind_expression&lt;T&gt;::value;}}}}
{{dsc | {{anchor|is_placeholder|is_placeholder_v}}{{c/core|1=template &lt;class T&gt; constexpr bool is_placeholder_v =}}| {{c/core|std::is_placeholder&lt;T&gt;::value;}}}}

{{dsc header | experimental/memory}}
{{dsc | {{anchor|uses_allocator|uses_allocator_v}}{{c/core|1=template &lt;class T, class Alloc&gt; constexpr bool uses_allocator_v =}}| {{c/core|std::uses_allocator&lt;T, Alloc&gt;::value;}}}}
{{dsc end}}

=== Notes ===
[1]: Defined in the {{tt|std::chrono::experimental}} namespace.</text>
      <sha1>5gzg63wdh2cwh6ouiun7yfeoxfbc7hp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unordered map/erase if</title>
    <ns>0</ns>
    <id>14188</id>
    <revision>
      <id>79348</id>
      <timestamp>2015-07-05T20:53:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="56">{{include page|cpp/experimental/erase if|unordered_map}}</text>
      <sha1>4m0fgxymiwu50t5b66vyl8jbw4v89zg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unordered multimap/erase if</title>
    <ns>0</ns>
    <id>14189</id>
    <revision>
      <id>79349</id>
      <timestamp>2015-07-05T20:53:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="61">{{include page|cpp/experimental/erase if|unordered_multimap}}</text>
      <sha1>givzrn1c3f7ogozlyt8e3ziky4neyfe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unordered multiset/erase if</title>
    <ns>0</ns>
    <id>14191</id>
    <revision>
      <id>79351</id>
      <timestamp>2015-07-05T20:54:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="61">{{include page|cpp/experimental/erase if|unordered_multiset}}</text>
      <sha1>5vaoemux6fh67m5zwvusswv305c0q1e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unordered set/erase if</title>
    <ns>0</ns>
    <id>14190</id>
    <revision>
      <id>79350</id>
      <timestamp>2015-07-05T20:54:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="56">{{include page|cpp/experimental/erase if|unordered_set}}</text>
      <sha1>rozta93t47aqfbst0k8jikgqnegt142</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource</title>
    <ns>0</ns>
    <id>14562</id>
    <revision>
      <id>82150</id>
      <parentid>82136</parentid>
      <timestamp>2015-12-05T08:34:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="2417">{{cpp/experimental/pmr/title|unsynchronized_pool_resource}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{ddcl|header=experimental/memory_resource | since=libfund_ts |
class unsynchronized_pool_resource : public memory_resource;
}}

The class {{tt|std::experimental::pmr::unsynchronized_pool_resource}} is a general-purpose memory resource class with the following properties:
* It owns the allocated memory and frees it on destruction, even if {{tt|deallocate}} has not been called for some of the allocated blocks.
* It consists of a collection of ''pools'' that serves request for different block sizes. Each pool manages a collection of ''chunks'' that are then divided into blocks of uniform size. 
* Calls to {{ltt|cpp/experimental/unsynchronized_pool_resource/do_allocate}} are dispatched to the pool serving the smallest blocks accommodating the requested size.
* Exhausting memory in the pool causes the next allocation request for that pool to allocate an additional chunk of memory from the ''upstream allocator'' to replenish the pool. The chunk size obtained increases geometrically.
* Allocations requests that exceed the largest block size are served from the ''upstream allocator'' directly.
* The largest block size and maximum chunk size may be tuned by passing a {{lc|std::experimental::pmr::pool_options}} struct to its constructor.

{{tt|unsynchronized_pool_resource}} is not thread-safe, and cannot be accessed from multiple threads simultaneously; use {{ltt|cpp/experimental/synchronized_pool_resource}} if access from multiple threads is required.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc constructor}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc destructor}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc release}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc upstream_resource}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc options}}

{{dsc h2 | Protected member functions}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc do_allocate}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc do_deallocate}}
{{dsc inc | cpp/experimental/unsynchronized_pool_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>1iw0ikzjgggiva88l9ikbjf0c57ayzr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/do allocate</title>
    <ns>0</ns>
    <id>14595</id>
    <revision>
      <id>82177</id>
      <timestamp>2015-12-05T09:35:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1110">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|do_allocate}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
}}

Allocates storage. 

If the pool selected for a block of size {{tt|bytes}} is unable to satisfy the request from its internal data structures, calls {{tt|allocate()}} on the upstream memory resource to obtain memory.

If the size requested is larger than what the largest pool can handle, memory is allocated by calling {{tt|allocate()}} on the upstream memory resource.

=== Return value ===
A pointer to allocated storage of at least {{tt|bytes}} bytes in size, aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c|alignof(std::max_align_t)}} otherwise. 

=== Exceptions ===
Throws nothing unless calling {{tt|allocate()}} on the upstream memory resource throws.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc allocate}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>qfbfez90ay2izjpsr67qec3ni9ift5b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/do deallocate</title>
    <ns>0</ns>
    <id>14596</id>
    <revision>
      <id>82178</id>
      <timestamp>2015-12-05T09:35:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="651">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|do_deallocate}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment);
}}

Returns the memory at {{tt|p}} to the pool. It is unspecified if or under what circumstances this operation will result in a call to {{tt|deallocate()}} on the upstream memory resource.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc deallocate}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>b0bvwmbo2fpmwhemin2k3ylkps9i9aw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/do is equal</title>
    <ns>0</ns>
    <id>14592</id>
    <revision>
      <id>91340</id>
      <parentid>82174</parentid>
      <timestamp>2017-03-31T19:40:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="652">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|do_is_equal}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{ddcl|since=libfund_ts |1=
virtual bool do_is_equal(const memory_resource&amp; other) const;
}}

Compare {{tt|*this}} with {{tt|other}} for identity - memory allocated using a {{tt|unsynchronized_pool_resource}} can only be deallocated using that same resource.

=== Return value ===
{{c|1=this == dynamic_cast&lt;const unsynchronized_pool_resource*&gt;(&amp;other)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/experimental/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>4lyvmwwgpdbgm72trjfxnpmf5pjzxnh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/options</title>
    <ns>0</ns>
    <id>14594</id>
    <revision>
      <id>82176</id>
      <timestamp>2015-12-05T09:35:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="658">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|options}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
pool_options options() const;
}}
{{dcl end}}

Returns the options that controls the pooling behavior of this resource.

The values in the returned struct may differ from those supplied to the constructor in the following ways:
* Values of zero will be replaced with implementation-specified defaults;
* Sizes may be rounded to an unspecified granularity.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/unsynchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>9gt7as1p01jngksjks8vlnn7srlfx92</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/release</title>
    <ns>0</ns>
    <id>14584</id>
    <revision>
      <id>82163</id>
      <parentid>82162</parentid>
      <timestamp>2015-12-05T09:08:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="579">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|release}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
void release();
}}
{{dcl end}}

Releases all memory owned by this resource by calling the {{tt|deallocate}} function of the upstream memory resource as needed.

Memory is released back to the upstream resource even if {{tt|deallocate}} has not been called for some of the allocated blocks.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>1emi0rpgcjht5wgo4wweka74qkjbnbg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/unsynchronized pool resource</title>
    <ns>0</ns>
    <id>14581</id>
    <revision>
      <id>82166</id>
      <parentid>82159</parentid>
      <timestamp>2015-12-05T09:16:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>expand</comment>
      <text xml:space="preserve" bytes="1775">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|unsynchronized_pool_resource}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | num= 1| 1=
unsynchronized_pool_resource();
}}
{{dcl|since=libfund_ts | num= 2| 1=
explicit unsynchronized_pool_resource(memory_resource* upstream);
}}
{{dcl|since=libfund_ts | num= 3| 1=
explicit unsynchronized_pool_resource(const pool_options&amp; opts);
}}
{{dcl|since=libfund_ts | num= 4| 1=
unsynchronized_pool_resource(const pool_options&amp; opts,
                           memory_resource* upstream);
}}
{{dcl|since=libfund_ts | num= 5| 1=
unsynchronized_pool_resource(const unsynchronized_pool_resource&amp;) = delete;
}}
{{dcl end}}

Constructs a {{tt|unsynchronized_pool_resource}}.

@1-4@ Constructs a {{tt|unsynchronized_pool_resource}} using the specified upstream memory resource and tuned according to the specified options. The resulting object holds a copy of {{tt|upstream}} but does not own the resource to which {{tt|upstream}} points.
&lt;br /&gt; The overloads not taking {{tt|opts}} as a parameter uses a default constructed instance of {{ltt|cpp/experimental/pool_options}} as the options. The overloads not taking {{tt|upstream}} as a parameter uses the return value of {{c|std::experimental::pmr::get_default_resource()}} as the upstream memory resource.

@5@ Copy constructor is deleted.

=== Parameters ===

{{par begin}}
{{par | opts | a {{tt|pool_options}} struct containing the constructor options }}
{{par | upstream | the upstream memory resource to use }}
{{par end}}

=== Exceptions ===

@1-4@ Throws only if a call to the {{tt|allocate()}} function of the upstream resource throws. It is unspecified if or under what conditions such a call takes place.</text>
      <sha1>1p6catszstezf9yo982le54dgrvm0yt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/upstream resource</title>
    <ns>0</ns>
    <id>14593</id>
    <revision>
      <id>82175</id>
      <timestamp>2015-12-05T09:35:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="521">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|upstream_resource}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
memory_resource* upstream_resource() const;
}}
{{dcl end}}

Returns a pointer to the upstream memory resource. This is the same value as the {{tt|upstream}} argument passed to the constructor of this object.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/unsynchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>0st14x2tm3hie6pa7ikm8sxjbn5yt1p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/unsynchronized pool resource/~unsynchronized pool resource</title>
    <ns>0</ns>
    <id>14583</id>
    <revision>
      <id>82161</id>
      <timestamp>2015-12-05T09:03:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="507">{{cpp/experimental/pmr/unsynchronized_pool_resource/title|~unsynchronized_pool_resource}}
{{cpp/experimental/lib extensions/pmr/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=libfund_ts | 1=
virtual ~unsynchronized_pool_resource();
}}
{{dcl end}}

Destroys a {{tt|unsynchronized_pool_resource}}.

Deallocates all memory owned by this resource by calling {{c|this-&gt;release()}}.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/experimental/unsynchronized_pool_resource/dsc release}}
{{dsc end}}</text>
      <sha1>r2zlk7sa555o7z8iz0whgh5sx79moc0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/vector/erase</title>
    <ns>0</ns>
    <id>14175</id>
    <revision>
      <id>79327</id>
      <timestamp>2015-07-05T20:32:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="46">{{include page|cpp/experimental/erase|vector}}</text>
      <sha1>l4bp2e3rck8qkyzjchvzez6eighnppa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/vector/erase if</title>
    <ns>0</ns>
    <id>14181</id>
    <revision>
      <id>79338</id>
      <timestamp>2015-07-05T20:47:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="49">{{include page|cpp/experimental/erase if|vector}}</text>
      <sha1>peyi4akbfjqc3td5vs5z5j5zht52o8g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/void t</title>
    <ns>0</ns>
    <id>14171</id>
    <revision>
      <id>79318</id>
      <timestamp>2015-07-05T19:52:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>create</comment>
      <text xml:space="preserve" bytes="732">{{cpp/experimental/title|void_t}}
{{cpp/experimental/lib_extensions_2/navbar}}

{{dcl begin}}
{{dcl header | experimental/type_traits }}
{{dcl | since=libfund_ts_2  |
template&lt; class... &gt;
using void_t {{=}} void;
}}
{{dcl end}}

A utility metafunction that maps a sequence of any types to the type {{c|void}}.

===Notes===
This utility metafunction is used in template metaprogramming to detect ill-formed types in SFINAE context. First voted into C++17 as {{lc|std::void_t}}, it was later added as well to the library fundamentals TS as {{tt|std::experimental::void_t}}, because it is a dependency of the [[cpp/experimental/is_detected|detection idiom]].

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc void_t}}
{{dsc end}}</text>
      <sha1>7br16xdx1nri2a6o54b0h7uta04ix1j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/weak ptr</title>
    <ns>0</ns>
    <id>14640</id>
    <revision>
      <id>82294</id>
      <timestamp>2015-12-13T01:30:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1732">{{cpp/experimental/title|weak_ptr}}
{{cpp/experimental/weak_ptr/navbar}}
{{ddcl | header=experimental/memory | since=libfund_ts | 1=
template&lt; class T &gt; class weak_ptr;
}}

{{tt|std::experimental::weak_ptr}} is a modified version of {{lc|std::weak_ptr}} that interoperates with {{lc|std::experimental::shared_ptr}} and has support for arrays.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|element_type}} | {{c|std::remove_extent_t&lt;T&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/weak_ptr/dsc constructor}}
{{dsc end}}

{{identical|nonmember=yes|id=weak_ptr|{{small|std::}}weak_ptr|2=

===Member functions===
The following member functions work with {{lc|std::experimental::shared_ptr}} instead of {{lc|std::shared_ptr}} and {{lc|std::experimental::weak_ptr}} instead of {{lc|std::weak_ptr}}. The behavior is otherwise identical.

{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc destructor}}
{{dsc inc | cpp/memory/weak_ptr/dsc operator{{=}}}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/memory/weak_ptr/dsc reset}}
{{dsc inc | cpp/memory/weak_ptr/dsc swap}}

{{dsc h2 | Observers}}

{{dsc inc | cpp/memory/weak_ptr/dsc use_count}}
{{dsc inc | cpp/memory/weak_ptr/dsc expired}}
{{dsc inc | cpp/memory/weak_ptr/dsc lock}}
{{dsc inc | cpp/memory/weak_ptr/dsc owner_before}}
{{dsc end}}

===Non-member functions===
This non-member function is declared in the {{tt|std::experimental}} namespace, and work with {{tt|std::experimental::weak_ptr}} rather than {{lc|std::weak_ptr}}, but otherwise behaves identically to the corresponding C++14 function.

{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc swap2}}
{{dsc end}}

}}

===Example===
{{example |
code=
}}</text>
      <sha1>jlqlrexaivykg0hz6vsxr9teje0rwg6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/weak ptr/weak ptr</title>
    <ns>0</ns>
    <id>14647</id>
    <revision>
      <id>91494</id>
      <parentid>82303</parentid>
      <timestamp>2017-03-31T19:47:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1995">{{cpp/experimental/weak_ptr/title | weak_ptr}}
{{cpp/experimental/weak_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=libfund_ts | 1= 
constexpr weak_ptr();
}}
{{dcl | num=2 | since=libfund_ts | 1= 
weak_ptr( const weak_ptr&amp; r );
}}
{{dcl | num=2 | since=libfund_ts | 1= 
template&lt; class Y &gt; 
weak_ptr( const weak_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=2 | since=libfund_ts  | 1= 
template&lt; class Y &gt; 
weak_ptr( const std::experimental::shared_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=3 | since=libfund_ts  | 1= 
weak_ptr( weak_ptr&amp;&amp; r );
}}
{{dcl | num=3 | since=libfund_ts  | 1= 
template&lt; class Y &gt; 
weak_ptr( weak_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl end}}

Constructs a new {{tt|weak_ptr}} that potentially shares an object with {{tt|r}}.

@1@ Default constructor. Constructs empty {{tt|weak_ptr}}.
@2@ Constructs new {{tt|weak_ptr}} which shares an object managed by {{tt|r}}. If {{tt|r}} manages no object, {{c|*this}} manages no object too. The templated overloads don't participate in overload resolution unless either {{tt|Y*}} is implicitly convertible to {{tt|T*}}, or {{tt|Y}} is the type &quot;array of {{tt|N}} {{tt|U}}&quot; for some type {{tt|U}} and some number {{tt|N}}, and {{tt|T}} is the type &quot;array of unknown bound of (possibly cv-qualified) {{tt|U}}&quot;. 
@3@ Move constructors. Moves a {{tt|weak_ptr}} instance from {{tt|r}} into {{tt|*this}}. After this, {{tt|r}} is empty and {{c|1=r.use_count()==0}}. The templated overload doesn't participate in overload resolution unless {{tt|Y*}} is implicitly convertible to {{tt|T*}}. &lt;!-- The current TS implicitly uses the C++14 constraints, but see LWG 2521 --&gt;

===Parameters===
{{par begin}}
{{par | r | a {{lc|std::experimental::shared_ptr}} or {{lc|std::experimental::weak_ptr}} that will be viewed by this {{lc|std::experimental::weak_ptr}}}}
{{par end}} 

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc constructor}}
{{dsc inc | cpp/memory/weak_ptr/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>dgahv013gbc2a8t4ld8cvqdu0pa3pae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/when all</title>
    <ns>0</ns>
    <id>15452</id>
    <revision>
      <id>85508</id>
      <parentid>85507</parentid>
      <timestamp>2016-04-22T20:20:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2642">{{cpp/experimental/title|when_all}}
{{cpp/experimental/concurrency/navbar}}
{{dcl begin}}
{{dcl header|experimental/future}}
{{dcl | num = 1 | since=concurrency | 1=
template &lt; class InputIt &gt;
auto when_all(InputIt first, InputIt last)
    -&gt; future&lt;std::vector&lt;typename std::iterator_traits&lt;InputIt&gt;::value_type&gt;&gt;; 
}}
{{dcl | num = 2 | since=concurrency | 1=
template &lt; class... Futures &gt;
auto when_all(Futures&amp;&amp;... futures)
    -&gt; future&lt;std::tuple&lt;std::decay_t&lt;Futures&gt;...&gt;&gt;;
}}
{{dcl end}}

Create a {{lc|std::experimental::future|future}} object that becomes ready when all of the input {{tt|future}}s and {{lc|std::experimental::shared_future|shared_future}}s become ready. The behavior is undefined if any input {{tt|future}} or {{tt|shared_future}} is invalid.

In particular, let {{tt|Sequence}} be a {{c|std::vector&lt;typename std::iterator_traits&lt;InputIt&gt;::value_type&gt;}} for {{v|1}} and {{c|std::tuple&lt;std::decay_t&lt;Futures&gt;...&gt;}} for {{v|2}}. This function template creates a shared state containing {{tt|Sequence}} and returns a future referring to the shared state. Every input {{tt|future}} is moved into the corresponding object in the {{tt|Sequence}} in the shared state, and every input {{tt|shared_future}} is copied to the corresponding object in the {{tt|Sequence}} in the shared state. The order of the objects in the {{tt|Sequence}} matches the order of arguments.

@1@ This function does not participate in overload resolution unless {{tt|InputIt}}'s value type (i.e.,  {{c|typename std::iterator_traits&lt;InputIt&gt;::value_type}}) is a {{lc|std::experimental::future}} or {{lc|std::experimental::shared_future}}.
@2@ This function does not participate in overload resolution unless every argument is either a (possibly cv-qualified) {{lc|std::experimental::shared_future}} or a cv-unqualified {{lc|std::experimental::future}}. (Formally, for every type {{tt|Fn}} in {{tt|Futures}}, either {{c|std::remove_reference_t&lt;Fn&gt;}} is {{c|std::experimental::future&lt;Rn&gt;}}, or {{c|std::decay_t&lt;Fn&gt;}} is {{c|std::experimental::shared_future&lt;Rn&gt;}}.)

After this call, every input {{tt|future}} is no longer valid; every input {{tt|shared_future}} remains valid.

=== Return value ===
A {{tt|future}} referring to the shared state created by the call. The future is always {{c|valid()}}, and it becomes ready when all of the input {{tt|future}}s and {{tt|shared_future}}s the call are ready.

@1@ If the range is empty (i.e., {{c|first {{==}} last}}), the returned {{tt|future}} contains an empty vector and is ready immediately.
@2@ If there are no arguments supplied, a {{tt|future&lt;std::tuple&lt;&gt;&gt;}} is returned and is immediately ready.</text>
      <sha1>1wqf26njlnw8zn0nmmwqnt52bnb9222</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/experimental/when any</title>
    <ns>0</ns>
    <id>15453</id>
    <revision>
      <id>85509</id>
      <parentid>85469</parentid>
      <timestamp>2016-04-22T20:41:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3286">{{cpp/experimental/title|when_any}}
{{cpp/experimental/concurrency/navbar}}
{{dcl begin}}
{{dcl header|experimental/future}}
{{dcl | since = concurrency | 1=
template &lt; class Sequence &gt;
struct when_any_result {
    std::size_t index;
    Sequence futures;
};
}}
{{dcl | num = 1 | since=concurrency | 1=
template &lt; class InputIt &gt;
auto when_any(InputIt first, InputIt last)
    -&gt; future&lt;when_any_result&lt;std::vector&lt;typename std::iterator_traits&lt;InputIt&gt;::value_type&gt;&gt;&gt;; 
}}
{{dcl | num = 2 | since=concurrency | 1=
template &lt; class... Futures &gt;
auto when_any(Futures&amp;&amp;... futures)
    -&gt; future&lt;when_any_result&lt;std::tuple&lt;std::decay_t&lt;Futures&gt;...&gt;&gt;&gt;;
}}
{{dcl end}}

Create a {{lc|std::experimental::future|future}} object that becomes ready when at least one of the input {{tt|future}}s and {{lc|std::experimental::shared_future|shared_future}}s become ready. The behavior is undefined if any input {{tt|future}} or {{tt|shared_future}} is invalid.

In particular, let {{tt|Sequence}} be a {{c|std::vector&lt;typename std::iterator_traits&lt;InputIt&gt;::value_type&gt;}} for {{v|1}} and {{c|std::tuple&lt;std::decay_t&lt;Futures&gt;...&gt;}} for {{v|2}}. This function template creates a shared state containing {{tt|when_any_result&lt;Sequence&gt;}} and returns a future referring to the shared state. Every input {{tt|future}} is moved into the corresponding object in the {{tt|futures}} member of the {{tt|when_any_result&lt;Sequence&gt;}} in the shared state, and every input {{tt|shared_future}} is copied to the corresponding object  in the {{tt|futures}} member of the {{tt|when_any_result&lt;Sequence&gt;}} in the shared state. The order of the objects in the {{tt|Sequence}} matches the order of arguments.

@1@ This function does not participate in overload resolution unless {{tt|InputIt}}'s value type (i.e.,  {{c|typename std::iterator_traits&lt;InputIt&gt;::value_type}}) is a {{lc|std::experimental::future}} or {{lc|std::experimental::shared_future}}.
@2@ This function does not participate in overload resolution unless every argument is either a (possibly cv-qualified) {{lc|std::experimental::shared_future}} or a cv-unqualified {{lc|std::experimental::future}}. (Formally, for every type {{tt|Fn}} in {{tt|Futures}}, either {{c|std::remove_reference_t&lt;Fn&gt;}} is {{c|std::experimental::future&lt;Rn&gt;}}, or {{c|std::decay_t&lt;Fn&gt;}} is {{c|std::experimental::shared_future&lt;Rn&gt;}}.)

After this call, every input {{tt|future}} is no longer valid; every input {{tt|shared_future}} remains valid.

=== Return value ===
A {{tt|future}} referring to the shared state created by the call. The future is always {{c|valid()}}, and it becomes ready when at least one of the input {{tt|future}}s and {{tt|shared_future}}s the call are ready. The {{tt|index}} member of the {{tt|when_any_result}} contains the position of the ready {{tt|future}} or {{tt|shared_future}} in the {{c|futures}} member.

@1@ If the range is empty (i.e., {{c|first {{==}} last}}), the returned {{tt|future}} is ready immediately; the {{tt|futures}} field of the {{tt|when_any_result}} is an empty vector, and the {{tt|index}} field is {{c|size_t(-1)}}.
@2@ If no argument is provided, the returned {{tt|future}} is ready immediately; the {{tt|futures}} field of the {{tt|when_any_result}} is an empty tuple, and the {{tt|index}} field is {{c|size_t(-1)}}.</text>
      <sha1>6totpcp3xrn7g9n41psifntarjl91al</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem</title>
    <ns>0</ns>
    <id>15089</id>
    <revision>
      <id>90174</id>
      <parentid>89908</parentid>
      <timestamp>2017-02-08T14:37:11Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="5894">{{title|Filesystem library}}
{{cpp/filesystem/navbar}}
The Filesystem library provides facilities for performing operations on file systems and their components, such as paths, regular files, and directories.

The filesystem library was originally developed as [http://www.boost.org/doc/libs/release/libs/filesystem/doc/index.htm boost.filesystem], was published as the technical specification ISO/IEC TS 18822:2015, and finally merged to ISO C++ as of C++17. The boost implementation is currently available on more compilers and platforms than the C++17 library.

The filesystem library facilities may be unavailable if a hierarchical file system is not accessible to the implementation, or if it does not provide the necessary capabilities. Some features may not be available if they are not supported by the underlying file system (e.g. FAT filesystem has no hardlinks, softlinks, and other features).

The behavior is [[cpp/language/ub|undefined]] if the calls to functions in this library introduce a ''file system race'', that is, when multiple threads, processes, or computers interleave access and modification to the same object in a file system.

====Library-wide concepts====
* ''file'': a file system object that holds data, can be written to, read from, or both. Files have names, attributes, one of which is file type:
:* ''directory'': a file that acts as a container of directory entries, which identify other files (some of which may be other, nested, directories). When discussing a particular file, the directory in which it appears as an entry is its ''parent directory''. The parent directory can be represented by the relative pathname {{c|&quot;..&quot;}}.
:* ''hard link'': a directory entry that associates a name with an existing file. If multiple hard links are supported, the file is removed after the last hard link to it is removed.
:* ''symbolic link'': a directory entry that associates a name with a path, which may or may not exist. 
:* ''regular file'': a file that is not one of the other file types.
* ''file name'': a string of characters that names a file. Permissible characters, case sensitivity, maximum length, and the disallowed names are implementation-defined. Names {{c|&quot;.&quot;}} (dot) and {{c|&quot;..&quot;}} (dot-dot) have special meaning at library level.
* ''path'': sequence of elements that identifies a file. It begins with an optional {{spar|root-name}} (e.g. {{c|&quot;C:&quot;}} or {{c|&quot;//server&quot;}} on Windows), followed by an optional {{spar|root-directory}} (e.g. {{c|&quot;/&quot;}} on Unix), followed by a sequence of zero or more file names (all but last of which have to be directories or links to directories). The native format (e.g. which characters are used as separators) and character encoding of the string representation of a path (the ''pathname'') is implementation-defined, this library provides portable representation of paths.
:* ''absolute path'': a path that unambiguously identifies the location of a file.
:* ''canonical path'': an absolute path that includes no symlinks, {{c|&quot;.&quot;}} or {{c|&quot;..&quot;}} elements.
:* ''relative path'': a path that identifies the location of a file relative to some location on the file system. The special path names {{c|&quot;.&quot;}} (dot, &quot;current directory&quot;) and {{c|&quot;..&quot;}} (dot-dot, &quot;parent directory&quot;) are relative paths.

===Classes===
{{dsc begin}}
{{dsc header|filesystem}}
{{dsc namespace|filesystem}}
{{dsc inc | cpp/filesystem/dsc path}} &lt;!-- including  swap, hash_value, comparisons, /, &lt;&lt;, &gt;&gt;, and u8path --&gt;
{{dsc inc | cpp/filesystem/dsc filesystem_error}}
{{dsc inc | cpp/filesystem/dsc directory_entry}}
{{dsc inc | cpp/filesystem/dsc directory_iterator}} &lt;!-- including begin,end --&gt;
{{dsc inc | cpp/filesystem/dsc recursive_directory_iterator}} &lt;!-- including begin,end --&gt;
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc space_info}}
{{dsc inc | cpp/filesystem/dsc file_type}}
{{dsc inc | cpp/filesystem/dsc perms}}
{{dsc inc | cpp/filesystem/dsc copy_options}}
{{dsc inc | cpp/filesystem/dsc directory_options}}
{{dsc inc | cpp/filesystem/dsc file_time_type}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc absolute}}&lt;!-- including system_complete --&gt;
{{dsc inc | cpp/filesystem/dsc canonical}}&lt;!-- including weakly_canonical --&gt;
{{dsc inc | cpp/filesystem/dsc relative}}&lt;!-- including proximate --&gt;
{{dsc inc | cpp/filesystem/dsc copy}}
{{dsc inc | cpp/filesystem/dsc copy_file}}
{{dsc inc | cpp/filesystem/dsc copy_symlink}}
{{dsc inc | cpp/filesystem/dsc create_directory}} &lt;!-- including create_directories --&gt;
{{dsc inc | cpp/filesystem/dsc create_hard_link}}
{{dsc inc | cpp/filesystem/dsc create_symlink}} &lt;!-- including create_directory_symlink --&gt;
{{dsc inc | cpp/filesystem/dsc current_path}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/dsc equivalent}}
{{dsc inc | cpp/filesystem/dsc file_size}}
{{dsc inc | cpp/filesystem/dsc hard_link_count}}
{{dsc inc | cpp/filesystem/dsc last_write_time}}
{{dsc inc | cpp/filesystem/dsc permissions}}
{{dsc inc | cpp/filesystem/dsc read_symlink}}
{{dsc inc | cpp/filesystem/dsc remove}} &lt;!-- including remove_all --&gt;
{{dsc inc | cpp/filesystem/dsc rename}} 
{{dsc inc | cpp/filesystem/dsc resize_file}}
{{dsc inc | cpp/filesystem/dsc space}}
{{dsc inc | cpp/filesystem/dsc status}} &lt;!-- including symlink_status --&gt;
{{dsc inc | cpp/filesystem/dsc temp_directory_path}}
{{dsc h2 | File types}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_empty}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc end}}

[[zh:cpp/filesystem]]</text>
      <sha1>sxdwqfng1kmjcz4qsr0pg97gr9c9ahz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/absolute</title>
    <ns>0</ns>
    <id>15144</id>
    <revision>
      <id>90207</id>
      <parentid>86328</parentid>
      <timestamp>2017-02-11T05:41:23Z</timestamp>
      <contributor>
        <ip>112.101.103.248</ip>
      </contributor>
      <comment>matched parenthesis</comment>
      <text xml:space="preserve" bytes="3582">{{cpp/filesystem/title|absolute|system_complete}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 |num=1|1=
path absolute( const std::filesystem::path&amp; p,
               const std::filesystem::path&amp; base = std::filesystem::current_path() );
}}
{{dcl | since=c++17 | num=2 |
path system_complete(const std::filesystem::path&amp; p);
path system_complete(const std::filesystem::path&amp; p, std::error_code&amp; ec);
}}
{{dcl end}}

@1@ Returns absolute path of {{tt|p}} relative to {{tt|base}} according to the following rules:
:* If {{tt|p}} has both root name and root directory (e.g. {{c|&quot;C:\users&quot;}}, then the path is returned, unmodified.
:* If {{tt|p}} has a root name not followed by a root directory (e.g. {{c|&quot;C:text.txt&quot;}}), then {{tt|base}} is inserted between {{tt|p}}'s root name and the remainder of {{tt|p}}. Formally, {{c|p.root_name() / absolute(base).root_directory() / absolute(base).relative_path() / p.relative_path()}} is returned, 
:* If {{tt|p}} has no root name, but has a root directory (e.g. {{c|&quot;/var/tmp/file.txt&quot;}} on a POSIX system or {{c|&quot;\users\ABC\Document.doc&quot;}} on Windows), then the root name of {{tt|base}}, if it has one, is prepended to {{tt|p}} (on a POSIX system, {{tt|p}} is not modified, on a Windows system, {{c|&quot;\users\ABC\Document.doc&quot;}} becomes {{c|&quot;C:\users\ABC\Document.doc&quot;}}. Formally, {{c|absolute(base).root_name() / p}} is returned.
:* If {{tt|p}} has no root name and no root directory (e.g. {{c|&quot;../file.txt&quot;}}, then the entire {{tt|base}} is prepended to {{tt|p}}. Formally, {{c|absolute(base) / p}} is returned.
@2@ Obtains the absolute path that identifies the file that the OS file opening API would access given the pathname {{tt|p}}. On POSIX systems, this is equivalent to {{v|1}} with the default {{tt|base}} ({{tt|current_path()}}). On Windows systems, each logical drive has its own current working directory, and so if {{tt|p}} is not already absolute and has a root name component (e.g. {{c|&quot;E:filename.txt&quot;}}, that drive's current working directory is used, which may have been set by an earlier executed program.

===Parameters===
{{par begin}}
{{par | p | path to convert to absolute form}}
{{par | base | path (not necessarily absolute) to serve as the starting location }}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
Returns an absolute (although not necessarily canonical) path formed by combining {{tt|p}} and {{tt|base}} as described above.

===Exceptions===
{{cpp/filesystem/error_handling|p|base}}

===Notes===
On systems that support root names (e.g. Windows), the result of calling {{tt|absolute}} on a relative path that has a root name (e.g. {{c|&quot;D:file.txt&quot;}} when the root name of {{tt|base}} is different will usually result in a non-existent path.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p = &quot;C:cl.exe&quot;;
    std::cout &lt;&lt; &quot;Current path is &quot; &lt;&lt; fs::current_path() &lt;&lt; '\n'
              &lt;&lt; &quot;Absolute path for &quot; &lt;&lt; p &lt;&lt; &quot; is &quot; &lt;&lt; fs::absolute(p) &lt;&lt; '\n'
	      &lt;&lt; &quot;System complete path for &quot; &lt;&lt; p &lt;&lt; &quot; is &quot; &lt;&lt; fs::system_complete(p) &lt;&lt; '\n';
}
|p=true
|output=
Current path is &quot;D:/local/ConsoleApplication1&quot;
Absolute path for &quot;C:cl.exe&quot; is &quot;C:/local/ConsoleApplication1/cl.exe&quot;
System complete path for &quot;C:cl.exe&quot; is &quot;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc canonical}}
{{dsc inc | cpp/filesystem/dsc relative}}
{{dsc end}}</text>
      <sha1>mkxyv3s4i8m54e23jm8w65akphqe89x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/canonical</title>
    <ns>0</ns>
    <id>15156</id>
    <revision>
      <id>88139</id>
      <parentid>88138</parentid>
      <timestamp>2016-11-09T06:17:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Return value */</comment>
      <text xml:space="preserve" bytes="3129">{{cpp/filesystem/title|canonical|weakly_canonical}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
path canonical( const std::filesystem::path&amp; p,
                const std::filesystem::path&amp; base {{=}} std::filesystem::current_path() );
}}
{{dcl | num=2 | since=c++17 | 1=
path canonical( const std::filesystem::path&amp; p,
                std::error_code&amp; ec );
}}
{{dcl | num=3 | since=c++17 | 1=
path canonical( const std::filesystem::path&amp; p,
                const std::filesystem::path&amp; base,
                std::error_code&amp; ec );
}}
{{dcl|num=4|since=c++17 | 
path weakly_canonical(const std::filesystem::path&amp; p);
}}
{{dcl|num=5|since=c++17 | 
path weakly_canonical(const std::filesystem::path&amp; p,
                      std::error_code&amp; ec);
}}
{{dcl end}}

@1-3@ Converts path {{tt|p}} to a canonical absolute path, i.e. an absolute path that has no dot, dot-dot elements or symbolic links. If {{tt|p}} is not an absolute path, the function behaves as if it is first made absolute by {{c|absolute(p, base)}} or {{c|absolute(p)}} for {{v|2}}. The path {{tt|p}} must exist.
@4-5@ Returns a path composed by {{tt|operator/&amp;#x3D;}} from the result of calling {{tt|canonical()}} without a base argument and with a path argument composed of the leading elements of {{tt|p}} that exist (as determined by {{tt|status(p)}} or {{tt|status(p, ec)}}), if any, followed by the elements of {{tt|p}} that do not exist, if any. The resulting path is in [[cpp/filesystem/path|normal form]].

===Parameters===
{{par begin}}
{{par | p | a path which may be absolute or relative to {{tt|base}}, and which must be an existing path}}
{{par | base | base path to be used in case {{tt|p}} is relative}}
{{par | ec | error code to store error status to}}
{{par end}}

===Return value===
@1-3@ An absolute path that resolves to the same file as {{c|absolute(p, base)}} (or {{c|absolute(p)}} for {{v|2}}).
@4-5@ A normal path of the form {{tt|canonical(x)/y}}, where x is a path composed of the longest leading sequence of elements in p that exist, and y is a path composed of the remaining trailing non-existent elements of p

===Exceptions===
{{cpp/filesystem/error_handling|p|base}}

===Notes===
The function {{tt|canonical()}} is modeled after the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html realpath].

The function {{tt|weakly_canonical()}} was introduced to simplify operational semantics of {{ltt|cpp/filesystem/relative|relative()}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p = fs::path(&quot;..&quot;) / &quot;..&quot; / &quot;AppData&quot;;
    std::cout &lt;&lt; &quot;Current path is &quot; &lt;&lt; fs::current_path() &lt;&lt; '\n'
              &lt;&lt; &quot;Canonical path for &quot; &lt;&lt; p &lt;&lt; &quot; is &quot; &lt;&lt; canonical(p) &lt;&lt; '\n';
}
|p=true
|output=
Current path is &quot;C:\Users\abcdef\AppData\Local\Temp&quot;
Canonical path for &quot;..\..\AppData&quot; is &quot;C:/Users\abcdef\AppData&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc path}}
{{dsc inc | cpp/filesystem/dsc absolute}}
{{dsc inc | cpp/filesystem/dsc relative}}
{{dsc end}}</text>
      <sha1>18owetjlou4dt5nh4prq0bemk2mi8c7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/copy</title>
    <ns>0</ns>
    <id>15157</id>
    <revision>
      <id>91208</id>
      <parentid>88884</parentid>
      <timestamp>2017-03-27T15:02:14Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="5689">{{cpp/filesystem/title|copy}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
void copy( const std::filesystem::path&amp; from,
           const std::filesystem::path&amp; to );
void copy( const std::filesystem::path&amp; from,
           const std::filesystem::path&amp; to,
           std::error_code&amp; ec );
}}
{{dcl | num=2 | since=c++17 | 1=
void copy( const std::filesystem::path&amp; from,
           const std::filesystem::path&amp; to,
           std::filesystem::copy_options options );
void copy( const std::filesystem::path&amp; from,
           const std::filesystem::path&amp; to,
           std::filesystem::copy_options options,
           std::error_code&amp; ec );
}}
{{dcl end}}

Copies files and directories, with a variety of options

@1@ The default, equivalent to {{v|2}} with {{tt|copy_options::none}} used as {{tt|options}}
@2@ Copies the file or directory {{tt|from}} to file or directory {{tt|to}}, using the copy options indicated by {{tt|options}}. The behavior is undefined if there is more than one option in any of the {{rlp|copy_options}} option group present in {{tt|options}} (even in the {{tt|copy_file}} group, which is not relevant to {{tt|copy}})

The behavior is as follows:
* First, before doing anything else, obtains type and permissions of {{tt|from}} by no more than a single call to 
:* {{lc|std::filesystem::symlink_status}}, if {{tt|copy_options::skip_symlinks}}, {{tt|copy_options::copy_symlinks}}, or {{tt|copy_options::create_symlinks}} is present in {{tt|options}};
:* {{lc|std::filesystem::status}} otherwise.
* If necessary, obtains the status of {{tt|to}}, by no more than a single call to
:* {{lc|std::filesystem::symlink_status}}, if {{tt|copy_options::skip_symlinks}} or {{tt|copy_options::create_symlinks}} is present in {{tt|options}};
:* {{lc|std::filesystem::status}} otherwise (including the case where {{tt|copy_options::copy_symlinks}} is present in {{tt|options}}).
* If {{tt|from}} does not exist, reports an error.
* If {{tt|from}} and {{tt|to}} are the same file as determined by {{lc|std::filesystem::equivalent}}, reports an error
* If either {{tt|from}} or {{tt|to}} is not a regular file, a directory, or a symlink, as determined by {{lc|std::filesystem::is_other}}, reports an error
* If {{tt|from}} is a directory, but {{tt|to}} is a regular file, reports an error
* If {{tt|from}} is a symbolic link, then
:* If {{tt|copy_options::skip_symlink}} is present in {{tt|options}}, does nothing.
:* Otherwise, if {{tt|to}} does not exist and {{tt|copy_options::copy_symlinks}} is present in {{tt|options}}, then behaves as if {{c|copy_symlink(from, to)}}
:* Otherwise, reports an error
* Otherwise, if {{tt|from}} is a regular file, then
:* If {{tt|copy_options::directories_only}} is present in {{tt|options}}, does nothing
:* Otherwise, if {{tt|copy_options::create_symlinks}} is present in {{tt|options}}, creates a symlink to {{tt|to}}. Note: {{tt|from}} must be an absolute path unless {{tt|to}} is in the current directory.
:* Otherwise, if {{tt|copy_options::create_hard_links}} is present in {{tt|options}}, creates a hard link to {{tt|to}}
:* Otherwise, if {{tt|to}} is a directory, then behaves as if {{c|copy_file(from, to/from.filename(), options)}} (creates a copy of {{tt|from}} as a file in the directory {{tt|to}})
:* Otherwise, behaves as if {{c|copy_file(from, to, options)}} (copies the file)
* Otherwise, if {{tt|from}} is a directory and either {{tt|options}} has {{tt|copy_options::recursive}} or is {{tt|copy_options::none}},
:* If {{tt|to}} does not exist, first executes {{c|create_directory(to, from)}} (creates the new directory with a copy of the old directory's attributes)
:* Then, whether {{tt|to}} already existed or was just created, iterates over the files contained in {{tt|from}} as if by {{c|for (const std::filesystem::directory_entry&amp; x : std::filesystem::directory_iterator(from))}} and for each directory entry, recursively calls {{c|copy(x.path(), to/x.path().filename(), options {{!}} unspecified)}}, where ''unspecified'' is some unspecified set of copy options.
* Otherwise does nothing

===Parameters===
{{par begin}}
{{par | from | path to the source file, directory, or symlink}}
{{par | to | path to the target file, directory, or symlink}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/filesystem/error_handling|from|to}}

===Notes===
The default behavior when copying directories is the non-recursive copy: the files are copied, but not the subdirectories:
{{source|1=
// Given
// /dir1 contains /dir1/file1, /dir1/file2, /dir1/dir2
// and /dir1/dir2 contains /dir1/dir2/file3
// After
std::filesystem::copy(&quot;/dir1&quot;, &quot;/dir3&quot;);
// /dir3 is created (with the attributes of /dir1)
// /dir1/file1 is copied to /dir3/file1
// /dir1/file2 is copied to /dir3/file2
}}

While with {{tt|copy_options::recursive}}, the subdirectories are also copied, with their content, recursively.
&lt;!-- unclear how that comes from the 15.3[fs.op.copy]/24, but that's what the TS says right after --&gt;
{{source|1=
// ...but after
std::filesystem::copy(&quot;/dir1&quot;, &quot;/dir3&quot;, std::filesystem::copy_options::recursive);
// /dir3 is created (with the attributes of /dir1)
// /dir1/file1 is copied to /dir3/file1
// /dir1/file2 is copied to /dir3/file2
// /dir3/dir2 is created (with the attributes of /dir1/dir2)
// /dir1/dir2/file3 is copied to /dir3/dir2/file3
}}


===Example===
{{cpp/filesystem/copy_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc copy_options}}
{{dsc inc | cpp/filesystem/dsc copy_symlink}}
{{dsc inc | cpp/filesystem/dsc copy_file}}
{{dsc end}}</text>
      <sha1>cdzw77a3z9z010pitd0svc3htzm7vzw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/copy file</title>
    <ns>0</ns>
    <id>15164</id>
    <revision>
      <id>88892</id>
      <parentid>84753</parentid>
      <timestamp>2016-12-17T00:02:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2712</comment>
      <text xml:space="preserve" bytes="4533">{{cpp/filesystem/title|copy_file}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool copy_file( const std::filesystem::path&amp; from,
                const std::filesystem::path&amp; to );
bool copy_file( const std::filesystem::path&amp; from,
                const std::filesystem::path&amp; to,
                std::error_code&amp; ec );
}}
{{dcl | num=2 | since=c++17 | 1=
bool copy_file( const std::filesystem::path&amp; from,
                const std::filesystem::path&amp; to,
                std::filesystem::copy_options options );
bool copy_file( const std::filesystem::path&amp; from,
                const std::filesystem::path&amp; to,
                std::filesystem::copy_options options,
                std::error_code&amp; ec );
}}
{{dcl end}}

@1@ The default, equivalent to {{v|2}} with {{tt|copy_options::none}} used as {{tt|options}}
@2@ Copies a single file from {{tt|from}} to {{tt|to}}, using the copy options indicated by {{tt|options}}. The behavior is undefined if there is more than one option in any of the {{rlp|copy_options}} option group present in {{tt|options}} (even in the groups not relevant to {{tt|copy_file}})
* If {{ltt|cpp/filesystem/is_regular_file|!is_regular_file(from)}} (either because the source file doesn't exist or because it is not a regular file), report an error
* Otherwise, if the destination file does not exist,
:* copies the contents and the attributes of the file to which {{tt|from}} resolves to the file to which {{tt|to}} resolves (symlinks are followed)
* Otherwise, if the destination file already exists...
:* Report an error if any of the following is true:
::* {{tt|to}} and {{tt|from}} are the same as determined by {{ltt|cpp/filesystem/equivalent|equivalent(from, to)}};
::* if {{tt|to}} is not a regular file as determined by {{ltt|cpp/filesystem/is_regular_file|!is_regular_file(to)}}
::* if none of the {{tt|copy_file{{control options are set in {{tt|options}}
:* Otherwise, if {{tt|copy_options::skip_existing}} is set in {{tt|options}}, do nothing
:* Otherwise, if {{tt|copy_options::overwrite_existing}} is set in {{tt|options}}, copy the contents and the attributes of the file to which {{tt|from}} resolves to the file to which {{tt|to}} resolves
:* Otherwise, if {{tt|copy_options::update_existing}} is set in {{tt|options}}, only copy the file if {{tt|from}} is newer than {{tt|to}}, as defined by {{ltt|cpp/filesystem/last_write_time|last_write_time()}}

The non-throwing overloads return {{c|false}} if an error occurs.

===Parameters===
{{par begin}}
{{par | from | path to the source file}}
{{par | to | path to the target file}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file was copied, {{c|false}} otherwise.

===Exceptions===
{{cpp/filesystem/error_handling|from|to}}

===Notes===
The functions involve at most one direct or indirect call to {{ltt|cpp/filesystem/status|status(to)}} (used both to determine if the file exists, and, for {{tt|copy_options::update_existing}} option, its last write time)

Error is reported when {{tt|copy_file}} is used to copy a directory: use {{ltt|cpp/filesystem/copy|copy}} for that.

{{tt|copy_file}} follows symlinks: use {{ltt|cpp/filesystem/copy_symlink|copy_symlink}} or {{ltt|cpp/filesystem/copy|copy}} with {{tt|copy_options::copy_symlinks}} for that.

===Examples===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directory(&quot;sandbox&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;).put('a');

    fs::copy_file(&quot;sandbox/file1.txt&quot;, &quot;sandbox/file2.txt&quot;);

    // now there are two files in sandbox:
    std::cout &lt;&lt; &quot;file1.txt holds : &quot;
              &lt;&lt; std::ifstream(&quot;sandbox/file1.txt&quot;).rdbuf() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;file2.txt holds : &quot;
              &lt;&lt; std::ifstream(&quot;sandbox/file2.txt&quot;).rdbuf() &lt;&lt; '\n';

    // fail to copy directory
    fs::create_directory(&quot;sandbox/abc&quot;);
    try {
        fs::copy_file(&quot;sandbox/abc&quot;, &quot;sandbox/def&quot;);
    } catch(fs::filesystem_error&amp; e) {
        std::cout &lt;&lt; &quot;Could not copy sandbox/abc: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
file1.txt holds : a
file2.txt holds : a
Could not copy sandbox/abc: copy_file: Is a directory: &quot;sandbox/abc&quot;, &quot;sandbox/def&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc copy_options}}
{{dsc inc | cpp/filesystem/dsc copy_symlink}}
{{dsc inc | cpp/filesystem/dsc copy}}
{{dsc end}}</text>
      <sha1>06xe8d4ggwdh8w1xmmkvn1jc56hghwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/copy options</title>
    <ns>0</ns>
    <id>15225</id>
    <revision>
      <id>89758</id>
      <parentid>88888</parentid>
      <timestamp>2017-01-24T09:08:07Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Member constants */ remove &quot;Value&quot; column</comment>
      <text xml:space="preserve" bytes="2985">{{cpp/filesystem/title|copy_options}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
enum class copy_options {
    none = /* unspecified */,
    skip_existing = /* unspecified */,
    overwrite_existing = /* unspecified */,
    update_existing = /* unspecified */,
    recursive = /* unspecified */,
    copy_symlinks = /* unspecified */,
    skip_symlinks = /* unspecified */,
    directories_only = /* unspecified */,
    create_symlinks = /* unspecified */,
    create_hard_links = /* unspecified */
};
}}
{{dcl end}}

This type represents available options that control the behavior of the {{ltt|cpp/filesystem/copy|copy()}} and {{ltt|cpp/filesystem/copy_file|copy_file()}} function.

{{tt|copy_options}} satisfies the requirements of  {{concept|BitmaskType}} (which means the bitwise operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}} are defined for this type)

===Member constants===
At most one copy option in each of the following options groups may be present, otherwise the behavior of the copy functions is undefined.
{| class=&quot;wikitable&quot; style=&quot;text-align:left; font-size:85%; max-width:90em;&quot;
|-
! Member constant
! Meaning
|-
!colspan=2|options controlling {{ltt|cpp/filesystem/copy_file|copy_file()}} when the file already exists
|-
| {{tt|none}} 
| Report an error (default behavior)
|-
| {{tt|skip_existing}} 
| Keep the existing file, without reporting an error.
|-
| {{tt|overwrite_existing}}
| Replace the existing file
|-
| {{tt|update_existing}}
| Replace the existing file only if it is older than the file being copied
|-
!colspan=2|options controlling the effects of {{ltt|cpp/filesystem/copy|copy()}} on subdirectories
|-
| {{tt|none}}
| Skip subdirectories (default behavior)
|-
| {{tt|recursive}}
| Recursively copy subdirectories and their content
|-
!colspan=2|options controlling the effects of {{ltt|cpp/filesystem/copy|copy()}} on symbolic links
|-
| {{tt|none}}
| Follow symlinks (default behavior)
|-
| {{tt|copy_symlinks}}
| Copy symlinks as symlinks, not as the files they point to
|-
| {{tt|skip_symlinks}}
| Ignore symlinks
|-
!colspan=2|options controlling the kind of copying {{ltt|cpp/filesystem/copy|copy()}} does
|-
| {{tt|none}}
| Copy file content (default behavior)
|-
| {{tt|directories_only}}
| Copy the directory structure, but do not copy any non-directory files
|-
| {{tt|create_symlinks}}
| Instead of creating copies of files, create symlinks pointing to the originals. Note: the source path must be an absolute path unless the destination path is in the current directory.
|-
| {{tt|create_hard_links}}
| Instead of creating copies of files, create hardlinks that resolve to the same files as the originals
|}

===Example===
{{cpp/filesystem/copy_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc copy}}
{{dsc inc | cpp/filesystem/dsc copy_file}}
{{dsc end}}</text>
      <sha1>5ouxqws6x3pvwg4egrt7hmxr1ey0hjv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/copy symlink</title>
    <ns>0</ns>
    <id>15165</id>
    <revision>
      <id>84754</id>
      <timestamp>2016-03-22T13:22:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1535">{{cpp/filesystem/title|copy_symlink}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
void copy_symlink( const std::filesystem::path&amp; from,
                   const std::filesystem::path&amp; to);
}}
{{dcl | num=2 | since=c++17  | 1=
void copy_symlink( const std::filesystem::path&amp; from,
                   const std::filesystem::path&amp; to,
                   std::error_code&amp; ec );
}}
{{dcl end}}

Copies a symlink to another location.

@1@ Effectively calls {{c|f(read_symlink(from), to)}} where {{tt|f}} is {{ltt|cpp/filesystem/create_symlink|create_symlink}} or {{ltt|cpp/filesystem/create_symlink|create_directory_symlink}} depending on whether {{tt|from}} resolves to a file or directory.

@2@ Effectively calls {{c|f(read_symlink(from, ec), to, ec)}} where {{tt|f}} is {{ltt|cpp/filesystem/create_symlink|create_symlink}} or {{ltt|cpp/filesystem/create_symlink|create_directory_symlink}} depending on whether {{tt|from}} resolves to a file or directory.

===Parameters===
{{par begin}}
{{par | from | path to a symbolic link to copy}}
{{par | to | destination path of the new symlink}}
{{par | ec |  out-parameter for error reporting in the non-throwing overload}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/filesystem/error_handling|from|to}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc copy}}
{{dsc inc | cpp/filesystem/dsc copy_file}}
{{dsc inc | cpp/filesystem/dsc create_symlink}}
{{dsc inc | cpp/filesystem/dsc read_symlink}}
{{dsc end}}</text>
      <sha1>iza92diyvj1gbu1mvx1hpyopuiw729f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/create directory</title>
    <ns>0</ns>
    <id>15166</id>
    <revision>
      <id>91965</id>
      <parentid>84755</parentid>
      <timestamp>2017-03-31T20:27:37Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="3433">{{cpp/filesystem/title|create_directory|create_directories}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool create_directory( const std::filesystem::path&amp; p );
bool create_directory( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl | num=2 | since=c++17 | 1=
bool create_directory( const std::filesystem::path&amp; p,
                       const std::filesystem::path&amp; existing_p );
bool create_directory( const std::filesystem::path&amp; p,
                       const std::filesystem::path&amp; existing_p,
                       std::error_code&amp; ec );
}}
{{dcl | num=3 | since=c++17 | 1=
bool create_directories( const std::filesystem::path&amp; p );
bool create_directories( const std::filesystem::path&amp; p,
                         std::error_code&amp; ec );
}}
{{dcl end}}

@1@ Creates the directory {{tt|p}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html mkdir()] with a second argument of {{c|static_cast&lt;int&gt;(std::filesystem::perms::all)}} (the parent directory must already exist). If {{tt|p}} already exists and is already a directory, the function does nothing (this condition is not treated as an error). 
@2@ Same as {{v|1}}, except that the attributes of the new directory are copied from {{tt|existing_p}} (which must be a directory that exists). It is OS-dependent which attributes are copied: on POSIX systems, the attributes are copied as if by
{{source|1=
stat(existing_p.c_str(), &amp;attributes_stat)
mkdir(p.c_str(), attributes_stat.st_mode)
}}On Windows OS, the attributes are copied as if by
{{source|1=
CreateDirectoryExW(existing_p.c_str(), p.c_str(), 0)
}}
@3@ Executes {{v|1}} for every element of {{tt|p}} that does not already exist.

The non-throwing overloads return {{c|false}} if any error occurs.

===Parameters===
{{par begin}}
{{par | p | the path to the new directory to create}}
{{par | existing_p | the path to a directory to copy the attributes from}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
@1,2@ {{c|true}} if directory creation is successful, {{c|false}} otherwise.

===Exceptions===
@1,3@ {{cpp/filesystem/error_handling|p}}
@2@ {{cpp/filesystem/error_handling|p|existing_p}}

===Notes===
The attribute-preserving overload {{v|2}} is implicitly invoked by {{ltt|cpp/filesystem/copy|copy()}} when recursively copying directories. Its equivalent in boost.filesystem is [http://www.boost.org/doc/libs/1_57_0/libs/filesystem/doc/reference.html#copy_directory copy_directory] (with argument order reversed)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdlib&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/1/2/a&quot;);
    fs::create_directory(&quot;sandbox/1/2/b&quot;);
    fs::permissions(&quot;sandbox/1/2/b&quot;, fs::perms::remove_perms {{!}} fs::perms::others_all);
    fs::create_directory(&quot;sandbox/1/2/c&quot;, &quot;sandbox/1/2/b&quot;);
    std::system(&quot;ls -l sandbox/1/2&quot;);
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
drwxr-xr-x 2 user group 4096 Apr 15 09:33 a
drwxr-x--- 2 user group 4096 Apr 15 09:33 b
drwxr-x--- 2 user group 4096 Apr 15 09:33 c
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc create_symlink}}
{{dsc inc | cpp/filesystem/dsc copy}}
{{dsc inc | cpp/filesystem/dsc perms}}
{{dsc end}}

[[zh:cpp/filesystem/create_directory]]</text>
      <sha1>4mn2pn7kt0x02sy5aeo1dth8s7gxhho</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/create hard link</title>
    <ns>0</ns>
    <id>15167</id>
    <revision>
      <id>84756</id>
      <timestamp>2016-03-22T13:27:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2496">{{cpp/filesystem/title|create_hard_link}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
void create_hard_link( const std::filesystem::path&amp; target,
                       const path&amp; std::filesystem::link );
void create_hard_link( const std::filesystem::path&amp; target,
                       const path&amp; std::filesystem::link,
                       std::error_code&amp; ec );
}}
{{dcl end}}

Creates a hard link {{tt|link}} with its target set to {{tt|target}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html link()]: the pathname {{tt|target}} must exist.

Once created, {{tt|link}} and {{tt|target}} are two logical names that refer to the same file (they are {{ltt|cpp/filesystem/equivalent|equivalent}}). Even if the original name {{tt|target}} is deleted, the file continues to exist and is accessible as {{tt|link}}.

===Parameters===
{{par begin}}
{{par | target | path of the file or directory to link to}}
{{par | link | path of the new hard link}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/filesystem/error_handling|target|link}}

===Notes===
Some operating systems do not support hard links at all or support them only for regular
files.

Some file systems do not support hard links regardless of the operating system: the FAT
file system used on memory cards and flash drives, for example.

Some file systems limit the number of links per file.

Hardlinking to directories is typically restricted to the superuser.

Hard links typically cannot cross filesystem boundaries.

The special pathname dot ({{c|&quot;.&quot;}}) is a hard link to its parent directory. The special pathname dot-dot {{c|&quot;..&quot;}} is a hard link to the directory that is the parent of its parent.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/subdir&quot;);
    std::ofstream(&quot;sandbox/a&quot;).put('a'); // create regular file
    fs::create_hard_link(&quot;sandbox/a&quot;, &quot;sandbox/b&quot;);
    fs::remove(&quot;sandbox/a&quot;);
    // read from the original file via surviving hard link
    char c = std::ifstream(&quot;sandbox/b&quot;).get();
    std::cout &lt;&lt; c &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
a
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc create_symlink}}
{{dsc inc | cpp/filesystem/dsc hard_link_count}}
{{dsc end}}</text>
      <sha1>80rtj0qom8jb9djak3oqowb6rq999lx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/create symlink</title>
    <ns>0</ns>
    <id>15168</id>
    <revision>
      <id>84757</id>
      <timestamp>2016-03-22T13:29:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3021">{{cpp/filesystem/title|create_symlink|create_directory_symlink}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17| 1=
void create_symlink( const std::filesystem::path&amp; target,
                     const std::filesystem::path&amp; link );
void create_symlink( const std::filesystem::path&amp; target,
                     const std::filesystem::path&amp; link,
                     std::error_code&amp; ec );
}}
{{dcl | num=2 | since=c++17 | 1=
void create_directory_symlink( const std::filesystem::path&amp; target,
                               const std::filesystem::path&amp; link );
void create_directory_symlink( const std::filesystem::path&amp; target,
                               const std::filesystem::path&amp; link,
                               std::error_code&amp; ec );
}}
{{dcl end}}

Creates a symbolic link {{tt|link}} with its target set to {{tt|target}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/symlink.html symlink()]: the pathname {{tt|target}} may be invalid or non-existing.

Some operating systems require symlink creation to identify that the link is to a directory. Portable code should use {{v|2}} to create directory symlinks rather than {{v|1}}, even though there is no distinction on POSIX systems.

===Parameters===
{{par begin}}
{{par | target | path to point the symlink to, does not have to exisdt}}
{{par | link | path of the new symbolic link}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/filesystem/error_handling|target|link}}

===Notes===
Some operating systems do not support symbolic links at all or support them only for
regular files.

Some file systems do not support symbolic links regardless of the operating system, for example the FAT system used on some memory cards and flash drives.

Like a hard link, a symbolic link allows a file to have multiple logical names. The presence of a hard link guarantees the existence of a file, even after the original name has been removed. A symbolic link provides no such assurance; in fact, the file named by the {{tt|target}} argument need not exist when the link is created. A symbolic link can cross file system boundaries.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/subdir&quot;);
    fs::create_symlink(&quot;target&quot;, &quot;sandbox/sym1&quot;);
    fs::create_directory_symlink(&quot;subdir&quot;, &quot;sandbox/sym2&quot;);

    for(auto it = fs::directory_iterator(&quot;sandbox&quot;); it != fs::directory_iterator(); ++it)
        if(is_symlink(it-&gt;symlink_status()))
            std::cout &lt;&lt; *it &lt;&lt; &quot;-&gt;&quot; &lt;&lt; read_symlink(*it) &lt;&lt; '\n';

    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/sym1&quot;-&gt;&quot;target&quot;
&quot;sandbox/sym2&quot;-&gt;&quot;subdir&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc read_symlink}}
{{dsc inc | cpp/filesystem/dsc create_hard_link}}
{{dsc end}}</text>
      <sha1>lxa7ggml0smaapxj86844xyoux0j4oo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/current path</title>
    <ns>0</ns>
    <id>15169</id>
    <revision>
      <id>84758</id>
      <timestamp>2016-03-22T13:32:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1993">{{cpp/filesystem/title|current_path}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
path current_path();
}}
{{dcl | num=2 | since=c++17 | 1=
path current_path( std::error_code&amp; ec );
}}
{{dcl | num=3 | since=c++17 | 1=
void current_path( const std::filesystem::path&amp; p );
}}
{{dcl | num=4 | since=c++17 | 1=
void current_path( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Returns or changes the current path.

@1-2@ Returns the absolute path of the current working directory, obtained as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html getcwd]. {{v|2}} returns {{c|path()}} if error occurs.

@3-4@ Changes the current working directory to {{tt|p}}, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/chdir.html chdir].

===Parameters===
{{par begin}}
{{par | p | path to change the current working directory to}}
{{par | ec | out-parameter for error reporting in the non-throwing overloads}}
{{par end}}

===Return value===
@1-2@ Returns the current working directory.

@3-4@ (none)

===Exceptions===
@1-2@ {{cpp/filesystem/error_handling}}

@3-4@ {{cpp/filesystem/error_handling|p}}

===Notes===

The current working directory is the directory that is used as the starting location in path resolution for relative paths. Single current working directory is associated with entire process.

The current working directory is a dangerous global state of the program. Behavior of various file input/output related functions are affected by the value of the current path. The current path may be unexpectedly changed by any component of the program, including various external libraries or other threads.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    std::cout &lt;&lt; &quot;Current path is &quot; &lt;&lt; fs::current_path() &lt;&lt; '\n';
}
|p=true
|output=
Current path is &quot;D:/local/ConsoleApplication1&quot;
}}</text>
      <sha1>qmsqhwjmefzli6niaoa80kxcub1khq0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry</title>
    <ns>0</ns>
    <id>15201</id>
    <revision>
      <id>84986</id>
      <parentid>84846</parentid>
      <timestamp>2016-03-23T15:25:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>-2 status objects</comment>
      <text xml:space="preserve" bytes="840">{{cpp/filesystem/title|directory_entry}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
class directory_entry;
}}
{{dcl end}}

Represents a directory entry. The object stores a {{tt|path}} as a member.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_entry/dsc constructor}}
{{dsc inc | cpp/filesystem/directory_entry/dsc destructor}}

{{dsc h2 | Modifiers}}}
{{dsc inc | cpp/filesystem/directory_entry/dsc operator{{=}}}}
{{dsc inc | cpp/filesystem/directory_entry/dsc assign}}
{{dsc inc | cpp/filesystem/directory_entry/dsc replace_filename}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/filesystem/directory_entry/dsc path}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc inc | cpp/filesystem/directory_entry/dsc operator_cmp}}
{{dsc end}}</text>
      <sha1>b9huj23uo8w91w8etruqa994sg1r0ia</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry/assign</title>
    <ns>0</ns>
    <id>15214</id>
    <revision>
      <id>84979</id>
      <parentid>84816</parentid>
      <timestamp>2016-03-23T09:35:05Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="482">{{cpp/filesystem/directory_entry/title|assign}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
void assign( const std::filesystem::path&amp; p );
}}
{{dcl end}}

Assigns new content to the directory entry object. Sets the path to {{tt|p}}.

===Parameters===
{{todo}}

===Return value===
(none)

===Exceptions===
{{todo}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_entry/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>6r5h6mpskmfbs27k8s0fqbors52on01</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry/directory entry</title>
    <ns>0</ns>
    <id>15212</id>
    <revision>
      <id>91629</id>
      <parentid>84978</parentid>
      <timestamp>2017-03-31T19:52:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="755">{{cpp/filesystem/directory_entry/title|directory_entry}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
directory_entry() = default;
}}
{{dcl | since=c++17 | num=2 | 1=
directory_entry( const directory_entry&amp; ) = default;
}}
{{dcl | since=c++17 | num=3 | 1=
directory_entry( directory_entry&amp;&amp; ) = default;
}}
{{dcl | since=c++17 | num=4 | 1=
explicit directory_entry( const std::filesystem::path&amp; p );
}}
{{dcl end}}

Constructs a new {{tt|directory_entry}} object.

@1@ Default constructor.
@2@ Defaulted copy constructor.
@3@ Defaulted move constructor.
@4@ Initializes the directory entry with path {{tt|p}}.

===Parameters===
{{todo}}

===Exceptions===
@1,3@ {{unreviewed noexcept}}

===Example===
{{example}}</text>
      <sha1>ns1obhrvevby610vmtpif3fw6twbo71</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry/operator cmp</title>
    <ns>0</ns>
    <id>15218</id>
    <revision>
      <id>91508</id>
      <parentid>84820</parentid>
      <timestamp>2017-03-31T19:48:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1391">{{cpp/filesystem/directory_entry/title|1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
bool operator==( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=2 | since=c++17 | 1=
bool operator!=( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=3 | since=c++17 | 1=
bool operator&lt;( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=4 | since=c++17 | 1=
bool operator&lt;=( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=5 | since=c++17 | 1=
bool operator&gt;( const directory_entry&amp; rhs ) const;
}}
{{dcl | num=6 | since=c++17 | 1=
bool operator&gt;=( const directory_entry&amp; rhs ) const;
}}
{{dcl end}}

Compares the path with the directory entry {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | rhs | directory_entry to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if {{c|1=path() == rhs.path()}}, {{c|false}} otherwise.
@2@ {{c|true}} if {{c|1=path() != rhs.path()}}, {{c|false}} otherwise.
@3@ {{c|true}} if {{c|1=path() &lt; rhs.path()}}, {{c|false}} otherwise.
@4@ {{c|true}} if {{c|1=path() &lt;= rhs.path()}}, {{c|false}} otherwise.
@5@ {{c|true}} if {{c|1=path() &gt; rhs.path()}}, {{c|false}} otherwise.
@6@ {{c|true}} if {{c|1=path() &gt;= rhs.path()}}, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_entry/dsc path}}
{{dsc end}}</text>
      <sha1>d0h23hau85k6bajo7na8tefkf5fyq9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry/operator=</title>
    <ns>0</ns>
    <id>15213</id>
    <revision>
      <id>91444</id>
      <parentid>84815</parentid>
      <timestamp>2017-03-31T19:44:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="590">{{cpp/filesystem/directory_entry/title|operator{{=}}}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
directory_entry&amp; operator=( const directory_entry&amp; ) = default;
}}
{{dcl | since=c++17 | num=2 | 1=
directory_entry&amp; operator=( directory_entry&amp;&amp;) = default;
}}
{{dcl end}}

Assigns another directory entry.

===Parameters===
{{todo}}

===Return value===
{{c|*this}}

===Exceptions===
{{todo}}

@2@ {{unreviewed noexcept}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_entry/dsc assign}}
{{dsc end}}</text>
      <sha1>bcyrrfl8gg2kedmvb2ejh9ea8vvzh15</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry/path</title>
    <ns>0</ns>
    <id>15216</id>
    <revision>
      <id>91931</id>
      <parentid>84818</parentid>
      <timestamp>2017-03-31T20:02:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="498">{{cpp/filesystem/directory_entry/title|path}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
const std::filesystem::path&amp; path() const;
}}
{{dcl | since=c++17 | 1=
operator const std::filesystem::path&amp; () const;
}}
{{dcl end}}

Returns the full path the directory entry refers to.

===Parameters===
(none)

===Return value===
The full path the directory entry refers to.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}

===See also===
{{todo}}</text>
      <sha1>daasqk29dno3x83ry6ouuxy7r2xme5a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry/replace filename</title>
    <ns>0</ns>
    <id>15215</id>
    <revision>
      <id>84980</id>
      <parentid>84817</parentid>
      <timestamp>2016-03-23T09:35:51Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="607">{{cpp/filesystem/directory_entry/title|replace_filename}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
void replace_filename( const std::filesystem::path&amp; p );
}}
{{dcl end}}

Changes the filename of the directory entry.

Effectively sets path to {{c|path().parent_path() / p}}.

This function does not commit any changes to the filesystem.

===Parameters===
{{par begin}}
{{par | p | the path to append to the parent path of the currently stored path}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{todo}}

===Example===
{{example}}

===See also===
{{todo}}</text>
      <sha1>0mf11oatyrxb7hrziisqw0hjce7rnrw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory entry/status</title>
    <ns>0</ns>
    <id>15217</id>
    <revision>
      <id>84985</id>
      <parentid>84819</parentid>
      <timestamp>2016-03-23T15:24:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>more detailed note about the change</comment>
      <text xml:space="preserve" bytes="2059">{{cpp/filesystem/directory_entry/title|status|symlink_status}}
{{cpp/filesystem/directory_entry/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1| 1=
std::filesystem::file_status status() const;
std::filesystem::file_status status( std::error_code&amp; ec ) const;
}}
{{dcl | since=c++17 | num=2| 1=
std::filesystem::file_status symlink_status() const;
std::filesystem::file_status symlink_status( std::error_code&amp; ec ) const;
}}
{{dcl end}}

@1@ Returns status of the entry, as if determined by a  [[cpp/filesystem/status|status]] call (symlinks are followed to their targets)
@2@ Returns status of the entry, as if determined by a  [[cpp/filesystem/status|symlink_status]] call (symlinks are not followed)

===Parameters===
{{par begin}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The status of the file referred to by the entry.

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Notes===
The file status information is usually provided as a byproduct of directory iteration. Both boost.filesystem and the Technical Specification versions of the filesystem library cached the status and these member functions accessed the cached values without the cost of an additional system call, simplifying use of accessors such as {{tt|is_directory}} during directory iteration. Status caching was removed during the merge to C++17 via [http://open-std.org/JTC1/SC22/WG21/docs/lwg-defects.html#2653 LWG 2653].

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc end}}</text>
      <sha1>kgy7tbze0b2rosl3uvzbgbdqqg0jj49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory iterator</title>
    <ns>0</ns>
    <id>15327</id>
    <revision>
      <id>84994</id>
      <timestamp>2016-03-23T16:27:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2742">{{cpp/filesystem/title|directory_iterator}}
{{cpp/filesystem/directory_iterator/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
class directory_iterator;
}}
{{dcl end}}

{{tt|directory_iterator}} is an {{concept|InputIterator}} that iterates over the {{ltt|cpp/filesystem/directory_entry|directory_entry}} elements of a directory (but does not visit the subdirectories). The iteration order is unspecified, except that each directory entry is visited only once. The special pathnames {{spar|dot}} and {{spar|dot-dot}} are skipped.

If the {{tt|directory_iterator}} is advanced past the last directory entry, it becomes equal to the default-constructed iterator, also known as the end iterator. Two end iterators are always equal, dereferencing or incrementing the end iterator is undefined behavior.

If a file or a directory is deleted or added to the directory tree after the directory iterator has been created, it is unspecified whether the change would be observed through the iterator.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{lc|std::filesystem::directory_entry}} }}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
{{dsc | {{tt|pointer}} | {{c|const std::filesystem::directory_entry*}} }}
{{dsc | {{tt|reference}} | {{c|const std::filesystem::directory_entry&amp;}} }}
{{dsc | {{tt|iterator_category}} | {{lc|std::input_iterator_tag}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc constructor}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc destructor}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc operator*}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc increment}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc begin}}
{{dsc end}}

Additionally, {{tt|operator{{==}}}} and {{tt|operator!{{=}}}} are provided, either as members or as non-members, as required by {{concept|InputIterator}}

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    std::ofstream(&quot;sandbox/file2.txt&quot;);
    for(auto&amp; p: fs::directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/file2.txt&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc recursive_directory_iterator}}
{{dsc inc | cpp/filesystem/dsc directory_options}}
{{dsc inc | cpp/filesystem/dsc directory_entry}}
{{dsc end}}</text>
      <sha1>1z3i5ysr9h260qcpw96t35uvimft1kb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory iterator/begin</title>
    <ns>0</ns>
    <id>15353</id>
    <revision>
      <id>91573</id>
      <parentid>85022</parentid>
      <timestamp>2017-03-31T19:50:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1420">{{cpp/filesystem/title | begin{{small|(directory_iterator)}}|end{{small|(directory_iterator)}}}}
{{cpp/filesystem/directory_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1| since=c++17 |
directory_iterator begin( directory_iterator iter );
}}
{{dcl |num=2| since=c++17 |
directory_iterator end( const directory_iterator&amp; );
}}
{{dcl end}}
@1@ Returns {{tt|iter}} unchanged
@2@ Returns a default-constructed {{ltt|cpp/filesystem/directory_iterator|directory_iterator}}, which serves as the end iterator. The argument is ignored.

These non-member functions enable the use of {{tt|directory_iterator}}s with range-based for loops.

===Parameters===
{{par begin}}
{{par | iter | a directory_iterator}}
{{par end}}

===Return value===
@1@ {{tt|iter}} unchanged
@2@ End iterator (default-constructed {{tt|directory_iterator}})

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    std::ofstream(&quot;sandbox/file2.txt&quot;);
    for(auto&amp; p: fs::directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/file2.txt&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc begin}}
{{dsc end}}</text>
      <sha1>oq864uvy3ulqf6nnlrkmhtwewbgpeib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory iterator/directory iterator</title>
    <ns>0</ns>
    <id>15349</id>
    <revision>
      <id>91537</id>
      <parentid>85018</parentid>
      <timestamp>2017-03-31T19:49:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1249">{{cpp/filesystem/directory_iterator/title | directory_iterator}}
{{cpp/filesystem/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
directory_iterator();
}}
{{dcl | num=2 | since=c++17 | 1=
explicit directory_iterator( const std::filesystem::path&amp; p );
}}
{{dcl | num=3 | since=c++17 | 1=
directory_iterator( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl | num=4 | since=c++17 | 1=
directory_iterator( const directory_iterator&amp; ) = default;
}}
{{dcl | num=5 | since=c++17 | 1=
directory_iterator( directory_iterator&amp;&amp; ) = default;
}}
{{dcl end}}

Constructs a new directory iterator.

@1@ Constructs the end iterator.

@2@ Constructs a directory iterator that refers to the first directory entry of a directory identified by {{tt|p}}. If {{tt|p}} refers to an non-existing file or not a directory, returns the end iterator.

===Parameters===
{{todo}}

===Exceptions===
@1@ {{unreviewed noexcept}}

@2@ {{lc|std::filesystem::filesystem_error}} if an error occurs. The exception object is constructed with {{tt|p}} as an argument.

@3@ {{unreviewed noexcept}}

===Notes===
To iterate over the current directory, construct the iterator as {{c|directory_iterator(&quot;.&quot;)}} instead of {{c|directory_iterator(&quot;&quot;)}}.</text>
      <sha1>qoupp7qpdsk44klw7ksy3bz5q9tjaa6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory iterator/increment</title>
    <ns>0</ns>
    <id>15352</id>
    <revision>
      <id>91404</id>
      <parentid>85021</parentid>
      <timestamp>2017-03-31T19:42:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="484">{{cpp/filesystem/directory_iterator/title | operator{{=}}}}
{{cpp/filesystem/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
directory_iterator&amp; operator++()

directory_iterator&amp; increment( std::error_code&amp; ec )
}}
{{dcl end}}

Advances the iterator to the next entry.

{{todo}}

===Parameters===
{{par begin}}
{{par | ec | error code to store error status to}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{todo}}

@2@ {{unreviewed noexcept}}</text>
      <sha1>119t5dcwp4sqyxuzi2c24edtcdlg0gb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory iterator/operator*</title>
    <ns>0</ns>
    <id>15351</id>
    <revision>
      <id>85020</id>
      <timestamp>2016-03-23T18:25:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="824">{{cpp/filesystem/directory_iterator/title | operator*|operator-&gt;}}
{{cpp/filesystem/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
const directory_entry&amp; operator*() const;
        
const directory_entry* operator-&gt;() const;
}}
{{dcl end}}

Accesses the pointed-to {{ltt|cpp/filesystem/directory_entry|directory_entry}}.

The result of {{tt|operator*}} or {{tt|operator-&gt;}} on the end iterator is undefined behavior.

===Parameters===
(none)

===Return value===
@1@ Value of the {{ltt|cpp/filesystem/directory_entry|directory_entry}} referred to by this iterator
@2@ Pointer to the {{ltt|cpp/filesystem/directory_entry|directory_entry}} referred to by this iterator

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc operator*}}
{{dsc end}}</text>
      <sha1>5yb3b3ullfqokh6gxrhablvqsr0ntqk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory iterator/operator=</title>
    <ns>0</ns>
    <id>15350</id>
    <revision>
      <id>85019</id>
      <timestamp>2016-03-23T18:24:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="386">{{cpp/filesystem/directory_iterator/title | operator{{=}}}}
{{cpp/filesystem/directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
directory_iterator&amp; operator=(const directory_iterator&amp;) = default;

directory_iterator&amp; operator=(directory_iterator&amp;&amp;) = default;
}}
{{dcl end}}

{{todo}}

===Parameters===
{{todo}}

===Return value===
{{c|*this}}

===Exceptions===
{{todo}}</text>
      <sha1>9d2c1quagk6hr20qogk8qv3dewjfdtu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/directory options</title>
    <ns>0</ns>
    <id>15220</id>
    <revision>
      <id>89759</id>
      <parentid>88886</parentid>
      <timestamp>2017-01-24T09:09:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Member constants */ remove &quot;Value&quot; column</comment>
      <text xml:space="preserve" bytes="1302">{{cpp/filesystem/title|directory_options}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl  | since=c++17 | 1=
enum class directory_options {
    none = /* unspecified */,
    follow_directory_symlink = /* unspecified */,
    skip_permission_denied = /* unspecified */
};
}}
{{dcl end}}

This type represents available options that control the behavior of the {{ltt|cpp/filesystem/directory_iterator}} and {{ltt|cpp/filesystem/recursive_directory_iterator}}.

{{tt|directory_options}} satisfies the requirements of {{concept|BitmaskType}} (which means the bitwise operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}} are defined for this type)

===Member constants===
{| class=&quot;wikitable&quot;
|-
! Member constant
! Meaning
|-
| {{tt|none}}
| (Default) Skip directory symlinks, permission denied is error.
|-
| {{tt|follow_directory_symlink}}
| Follow rather than skip directory symlinks.
|-
| {{tt|skip_permission_denied}}
| Skip directories that would otherwise result in permission denied errors.
|}

===See also===
{{dsc begin}}
{{dsc inc|cpp/filesystem/directory_iterator/dsc constructor}}
{{dsc inc|cpp/filesystem/recursive_directory_iterator/dsc constructor}}
{{dsc end}}</text>
      <sha1>7mwwcsfc2nnbupc6uxhjozmxs4wp3d4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/equivalent</title>
    <ns>0</ns>
    <id>15171</id>
    <revision>
      <id>88574</id>
      <parentid>88573</parentid>
      <timestamp>2016-11-26T20:02:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2507">{{cpp/filesystem/title|equivalent}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool equivalent( const std::filesystem::path&amp; p1,
                 const std::filesystem::path&amp; p2 );
bool equivalent( const std::filesystem::path&amp; p1,
                 const std::filesystem::path&amp; p2,
                 std::error_code&amp; ec );
}}
{{dcl end}}

Checks whether the paths {{tt|p1}} and {{tt|p2}} refer to the same file or directory and have the same file status as determined by {{ltt|cpp/filesystem/status|status}} (symlinks are followed).

If neither {{tt|p1}} nor {{tt|p2}} exists, or if both exist but neither is a file, directory, or symlink (as determined by {{ltt|cpp/filesystem/is_other|is_other}}), an error is reported.

The non-throwing overload returns {{tt|false}} on errors.

===Parameters===
{{par begin}}
{{par | p1, p2 | paths to check for equivalence}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the {{tt|p1}} and {{tt|p2}} refer to the same file or directory and their file status is the same. {{c|false}} otherwise.

===Exceptions===
{{cpp/filesystem/error_handling|p1|p2}}

===Notes===
Two paths are considered to resolve to the same file system entity if {{tt|st_dev}} and {{tt|st_ino}} of their POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html stat structure], obtained as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat], are equal. (meaning, the files are locate on the same device at the same location)

In particular, all hard links for the same file or directory are equivalent, and a symlink and its target on the same file system are equivalent.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cstdint&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    // hard link equivalency
    fs::path p1 = &quot;.&quot;;
    fs::path p2 = fs::current_path();
    if(fs::equivalent(p1, p2))
        std::cout &lt;&lt; p1 &lt;&lt; &quot; is equivalent to &quot; &lt;&lt; p2 &lt;&lt; '\n';

    // symlink equivalency
    fs::path p3 = &quot;/lib/libc.so.6&quot;;
    fs::path p4 = p3.parent_path() / fs::read_symlink(p3);
    if(fs::equivalent(p3, p4))
        std::cout &lt;&lt; p3 &lt;&lt; &quot; is equivalent to &quot; &lt;&lt; p4 &lt;&lt; '\n';
}
|p=true
|output=
&quot;.&quot; is equivalent to &quot;/var/tmp/test&quot;
&quot;/lib/libc.so.6&quot; is equivalent to &quot;/lib/libc-2.12.so&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc end}}</text>
      <sha1>3ig9p2qeop4wl7v6odinlpcdb8uvh2p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/exists</title>
    <ns>0</ns>
    <id>15170</id>
    <revision>
      <id>91483</id>
      <parentid>84759</parentid>
      <timestamp>2017-03-31T19:46:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2375">{{cpp/filesystem/title|exists}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool exists( std::filesystem::file_status s )
}}
{{dcl | num=2 | since=c++17 | 1=
bool exists( const std::filesystem::path&amp; p );
bool exists( const std::filesystem::path&amp; p, std::error_code&amp; ec )
}}
{{dcl end}}

Checks if the given file status or path corresponds to an existing file or directory.

@1@ Equivalent to {{c|1=status_known(s) &amp;&amp; s.type() != file_type::not_found}}.
@2@ Equivalent to {{c|exists(status(p))}} or {{c|exists(status(p, ec))}} (symlinks are followed). The non-throwing overload returns {{c|false}} if an error occurs.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the given path or file status corresponds to an existing file or directory, {{c|false}} otherwise.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2@ {{cpp/filesystem/error_handling|p}}

===Notes===
The information provided by this function is usually also provided as a byproduct of directory iteration. During directory iteration, calling {{tt|exists(*iterator)}} is less efficient than {{tt|exists(iterator-&gt;status())}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdint&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

void demo_exists(const fs::path&amp; p, fs::file_status s = fs::file_status{})
{
    std::cout &lt;&lt; p;
    if(fs::status_known(s) ? fs::exists(s) : fs::exists(p))
        std::cout &lt;&lt; &quot; exists\n&quot;;
    else
        std::cout &lt;&lt; &quot; does not exist\n&quot;;
}
int main()
{
    fs::create_directory(&quot;sandbox&quot;);
    std::ofstream(&quot;sandbox/file&quot;); // create regular file
    fs::create_symlink(&quot;non-existing&quot;, &quot;sandbox/symlink&quot;);

    demo_exists(&quot;sandbox&quot;);
    for(auto it = fs::directory_iterator(&quot;sandbox&quot;); it != fs::directory_iterator(); ++it)
        demo_exists(*it, it-&gt;status()); // use cached status from directory entry
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
&quot;sandbox&quot; exists
&quot;sandbox/file&quot; exists
&quot;sandbox/symlink&quot; does not exist
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>kjn4dfl8matv55e3td2sjco1w5vei5s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file size</title>
    <ns>0</ns>
    <id>15177</id>
    <revision>
      <id>84770</id>
      <timestamp>2016-03-22T13:42:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1719">{{cpp/filesystem/title|file_size}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
std::uintmax_t file_size( const std::filesystem::path&amp; p );
std::uintmax_t file_size( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Returns the size of the regular file {{tt|p}}, determined as if by reading the {{tt|st_size}} member of the structure obtained by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat] (symlinks are followed)

Attempting to determine the size of a directory (as well as any other file that is not a regular file or a symlink) is treated as an error.

The non-throwing overload returns returns {{c|-1}} on errors.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The size of the file, in bytes.

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p = fs::current_path() / &quot;example.bin&quot;;
    std::ofstream(p).put('a'); // create file of size 1
    std::cout &lt;&lt; &quot;File size = &quot; &lt;&lt; fs::file_size(p) &lt;&lt; '\n';
    fs::remove(p);
    
    try {
        fs::file_size(&quot;/dev&quot;); // attempt to get size of a directory
    } catch(fs::filesystem_error&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }        
}

|p=true
|output=
File size = 1
boost::filesystem::file_size: Operation not permitted: &quot;/dev&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc resize_file}}
{{dsc inc | cpp/filesystem/dsc space}}
{{dsc end}}</text>
      <sha1>h0qkg2pzy8woyao695hesqrh0s57d91</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file status</title>
    <ns>0</ns>
    <id>15229</id>
    <revision>
      <id>84847</id>
      <parentid>84831</parentid>
      <timestamp>2016-03-22T16:21:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>use full navbar</comment>
      <text xml:space="preserve" bytes="568">{{cpp/filesystem/title|file_status}}
{{cpp/filesystem/file_status/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
class file_status;
}}
{{dcl end}}

Stores information about the type and permissions of a file. 

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/file_status/dsc constructor}}
{{dsc inc | cpp/filesystem/file_status/dsc operator{{=}}}}
{{dsc inc | cpp/filesystem/file_status/dsc destructor}}

{{dsc inc | cpp/filesystem/file_status/dsc type}}
{{dsc inc | cpp/filesystem/file_status/dsc permissions}}
{{dsc end}}</text>
      <sha1>g16l4c4cupioj4y8bkvoure97r70itz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file status/file status</title>
    <ns>0</ns>
    <id>15238</id>
    <revision>
      <id>91374</id>
      <parentid>90696</parentid>
      <timestamp>2017-03-31T19:41:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="921">{{cpp/filesystem/file_status/title|file_status}}
{{cpp/filesystem/file_status/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
file_status() : file_status(std::filesystem::file_type::none) { }
}}
{{dcl | since=c++17 | num=2 | 1=
file_status( const file_status&amp; ) = default;
}}
{{dcl | since=c++17 | num=3 | 1=
file_status( file_status&amp;&amp; ) = default;
}}
{{dcl | since=c++17 | num=4 | 1=
explicit file_status(
  std::filesystem::file_type type,
  std::filesystem::perms permissions = std::filesystem::perms::unknown);
}}
{{dcl end}}

Constructs a new {{tt|file_status}} object.

@1@ Default constructor that calls {{v|4}} with {{lc|std::filesystem::file_type::none}}.

@2-3@ Copy and move constructors are defaulted.

@4@ Initializes the file status object with {{tt|type}} as type and {{tt|permissions}} as permissions.

===Parameters===
{{todo}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}</text>
      <sha1>g248p52abfq53adi7lr81cqgrhcczu3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file status/operator=</title>
    <ns>0</ns>
    <id>15239</id>
    <revision>
      <id>91326</id>
      <parentid>85328</parentid>
      <timestamp>2017-03-31T19:40:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="503">{{cpp/filesystem/file_status/title|operator{{=}}}}
{{cpp/filesystem/file_status/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
file_status&amp; operator=( const file_status&amp; other ) = default;
}}
{{dcl | since=c++17 | num=2 | 1=
file_status&amp; operator=( file_status&amp;&amp; other ) = default;
}}
{{dcl end}}

Copy- or move-assigns another file status object.

===Parameters===
{{todo}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |code=
 |output=
}}</text>
      <sha1>dogw6eq2xutt3wko6wul3nueertx5zj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file status/permissions</title>
    <ns>0</ns>
    <id>15241</id>
    <revision>
      <id>91579</id>
      <parentid>84843</parentid>
      <timestamp>2017-03-31T19:50:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="623">{{cpp/filesystem/file_status/title|permissions}}
{{cpp/filesystem/file_status/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
std::filesystem::perms permissions() const;
}}
{{dcl | since=c++17 | num=2 | 1=
void permissions( std::filesystem::perms perm );
}}
{{dcl end}}

Accesses the file permissions information.

@1@ Returns file permissions information.

@2@ Sets file type to {{tt|perm}}.

===Parameters===
{{par begin}}
{{par | perm | file permissions to set to}}
{{par end}}

===Return value===
@1@ File permissions information.

@2@ (none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}</text>
      <sha1>dyi76ena04gmlj2j29erapia1m7aeip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file status/type</title>
    <ns>0</ns>
    <id>15240</id>
    <revision>
      <id>91362</id>
      <parentid>84842</parentid>
      <timestamp>2017-03-31T19:41:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="584">{{cpp/filesystem/file_status/title|type}}
{{cpp/filesystem/file_status/navbar}}
{{dcl begin}}
{{dcl | since=c++17  | num=1 | 1=
std::filesystem::file_type type() const;
}}
{{dcl | since=c++17  | num=2 | 1=
void type( std::filesystem::file_type type );
}}
{{dcl end}}

Accesses the file type information.

@1@ Returns file type information.

@2@ Sets file type to {{tt|type}}.

===Parameters===
{{par begin}}
{{par | type | file type to set to}}
{{par end}}

===Return value===
@1@ File type information.

@2@ (none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}</text>
      <sha1>crl7tf1t5pfpao55gv6v2bjo41pyj17</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file time type</title>
    <ns>0</ns>
    <id>15219</id>
    <revision>
      <id>84821</id>
      <timestamp>2016-03-22T15:57:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="578">{{cpp/filesystem/title|file_time_type}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17  | 1=
using file_time_type = std::chrono::time_point&lt;/*trivial-clock*/&gt;;
}}
{{dcl end}}

Represents file time. {{tt|trivial-clock}} is an implementation-defined type that satisfies {{concept|TrivialClock}} and is sufficient to represent the resolution and range of the file time values offered by the filesystem.

===Example===
{{cpp/filesystem/time_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc last_write_time}}
{{dsc end}}</text>
      <sha1>cqpqaub4wskmsdipg7e6y8nsc9ouab2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/file type</title>
    <ns>0</ns>
    <id>15227</id>
    <revision>
      <id>88887</id>
      <parentid>84829</parentid>
      <timestamp>2016-12-16T23:17:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2678</comment>
      <text xml:space="preserve" bytes="1471">{{cpp/filesystem/title|file_type}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
enum class file_type {
    none = /* unspecified */,
    not_found = /* unspecified */,
    regular = /* unspecified */,
    directory = /* unspecified */,
    symlink = /* unspecified */,
    block = /* unspecified */,
    character = /* unspecified */,
    fifo = /* unspecified */,
    socket = /* unspecified */,
    unknown = /* unspecified */,
    /* implementation-defined */
};
}}
{{dcl end}}

Indicates a type of a file or directory a path refers to.
{{todo}}

===Constants===
{{dsc begin}}
{{dsc hitem | Constant | Meaning}}
{{dsc | {{tt|none}} | indicates that the file status has not been evaluated yet, or an error occurred when evaluating it}}
{{dsc | {{tt|not_found}} | indicates that the file was not found (this is not considered an error) }}
{{dsc | {{tt|regular}} | a regular file}}
{{dsc | {{tt|directory}} | a directory}}
{{dsc | {{tt|symlink}} | a symbolic link}}
{{dsc | {{tt|block}} | a block special file}}
{{dsc | {{tt|character}} | a character special file}}
{{dsc | {{tt|fifo}} | a FIFO (also known as pipe) file}}
{{dsc | {{tt|socket}} | a socket file}}
{{dsc | implementation-defined | an additional implementation-defined constant for each additional file type supported by the implementation}}
{{dsc | {{tt|unknown}} | the file exists but its type could not be determined}}

{{dsc end}}

===See also===
{{todo}}</text>
      <sha1>7ugs2rkkc3n6nsvmjibpyne1xviwo6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/filesystem error</title>
    <ns>0</ns>
    <id>15148</id>
    <revision>
      <id>84704</id>
      <timestamp>2016-03-21T20:06:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="736">{{cpp/filesystem/title|filesystem_error}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
class filesystem_error;
}}
{{dcl end}}

The class {{tt|std::filesystem::filesystem_error}} defines an exception object that is thrown on failure by the throwing overloads of the functions in the filesystem library.

{{todo|add inheritance diagram}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/filesystem_error/dsc constructor}}
{{dsc inc | cpp/filesystem/filesystem_error/dsc path}}
{{dsc inc | cpp/filesystem/filesystem_error/dsc what}}
{{dsc end}}

{{cpp/error/system_error/inherit}}
{{cpp/error/runtime_error/inherit}}
{{cpp/error/exception/inherit}}

===Example===
{{example}}</text>
      <sha1>lk9lxuae90r0i3jiiea7i2d6qdfjj43</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/filesystem error/filesystem error</title>
    <ns>0</ns>
    <id>15149</id>
    <revision>
      <id>84705</id>
      <timestamp>2016-03-21T20:08:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="953">{{cpp/filesystem/filesystem_error/title|filesystem_error}}
{{cpp/filesystem/filesystem_error/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
filesystem_error( const std::string&amp; what_arg,
                  std::error_code ec );
}}
{{dcl | num=2 | since=c++17 | 1=
filesystem_error( const std::string&amp; what_arg,
                  const std::filesystem::path&amp; p1,
                  std::error_code ec );
}}
{{dcl | num=3 | since=c++17 | 1=
filesystem_error( const std::string&amp; what_arg,
                  const std::filesystem::path&amp; p1,
                  const std::filesystem::path&amp; p2,
                  std::error_code ec );
}}
{{dcl end}}

Constructs a new filesystem error object. The explanatory string is set to {{tt|what_arg}}, error code is set to {{tt|ec}} and optionally, the paths that were involved in the operation that resulted in the error, are set to {{tt|p1}} and {{tt|p2}}.

===Parameters===
{{todo}}

===Example===
{{example}}</text>
      <sha1>nceqqtcb6u03n9l5loqy93gvv4d6lvi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/filesystem error/path</title>
    <ns>0</ns>
    <id>15154</id>
    <revision>
      <id>91812</id>
      <parentid>84710</parentid>
      <timestamp>2017-03-31T19:58:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="439">{{cpp/filesystem/filesystem_error/title|path1|path2}}
{{cpp/filesystem/filesystem_error/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++17 | 1=
const std::filesystem::path&amp; path1() const;
}}
{{dcl | since=c++17 | 1=
const std::filesystem::path&amp; path2() const;
}}
{{dcl end}}

Returns the paths that were stored in the exception object.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}</text>
      <sha1>cd7ffq7rr2s9bhuy26c4o95bbip7bie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/filesystem error/what</title>
    <ns>0</ns>
    <id>15155</id>
    <revision>
      <id>91778</id>
      <parentid>84711</parentid>
      <timestamp>2017-03-31T19:57:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="341">{{cpp/filesystem/filesystem_error/title|what}}
{{cpp/filesystem/filesystem_error/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
const char* what() const;
}}
{{dcl end}}

Returns the explanatory byte string that was stored in the exception object.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}</text>
      <sha1>j6673eg95zen1cgd6ikfwhnly2k1li2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/hard link count</title>
    <ns>0</ns>
    <id>15179</id>
    <revision>
      <id>84772</id>
      <timestamp>2016-03-22T13:44:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1660">{{cpp/filesystem/title|hard_link_count}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
std::uintmax_t hard_link_count( const std::filesystem::path&amp; p );
std::uintmax_t hard_link_count( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Returns the number of hard links for the filesystem object identified by path {{tt|p}}.

The non-throwing overload returns {{c|static_cast&lt;uintmax_t&gt;(-1)}} on errors.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The number of hard links for {{tt|p}}

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    // On a POSIX-style filesystem, each directory has at least 2 hard links:
    // itself and the special member pathname &quot;.&quot;
    fs::path p = fs::current_path();
    std::cout &lt;&lt; &quot;Number of hard links for current path is &quot;
              &lt;&lt; fs::hard_link_count(p) &lt;&lt; '\n';

    // each &quot;..&quot; is a hard link to the parent directory, so the total number
    // of hard links for any directory is 2 plus number of direct subdirectories
    p = fs::current_path() / &quot;..&quot;; // each dot-dot is a hard link to parent
    std::cout &lt;&lt; &quot;Number of hard links for .. is &quot;
              &lt;&lt; fs::hard_link_count(p) &lt;&lt; '\n';
}
|p=true
|output=
Number of hard links for current path is 2
Number of hard links for .. is 3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc create_hard_link}}
{{dsc end}}</text>
      <sha1>g4n6nfg8zjradvcnxwisr22odr9u2se</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is block file</title>
    <ns>0</ns>
    <id>15364</id>
    <revision>
      <id>91727</id>
      <parentid>85035</parentid>
      <timestamp>2017-03-31T19:56:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1917">{{cpp/filesystem/title|is_block_file}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool is_block_file( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_block_file( const std::filesystem::path&amp; p );
bool is_block_file( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a block special file, as if determined by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_ISBLK ]. Examples of block special files are block devices such as {{c|/dev/sda}} or {{c|/dev/loop0}} on Linux.

@1@ Equivalent to {{c|s.type() {{==}} file_type::block}}.
@2@ Equivalent to {{c|is_block_file(status(p))}} or {{c|is_block_file(status(p, ec))}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a block device. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2,3@ {{cpp/filesystem/error_handling|p}}

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>94p7ro8zsxfqtcy2oqp654r27878sip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is character file</title>
    <ns>0</ns>
    <id>15365</id>
    <revision>
      <id>91525</id>
      <parentid>85036</parentid>
      <timestamp>2017-03-31T19:49:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2017">{{cpp/filesystem/title|is_character_file}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool is_character_file( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_character_file( const std::filesystem::path&amp; p );
bool is_character_file( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a character special file, as if determined by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_ISCHR]. Examples of character special files are character devices such as {{c|/dev/null}}, {{c|/dev/tty}}, {{c|/dev/audio}}, or {{c|/dev/nvram}} on Linux.

@1@ Equivalent to {{c|s.type() {{==}} file_type::character}}.
@2@ Equivalent to {{c|is_character_file(status(p))}} or {{c|is_character_file(status(p, ec))}} respectively

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a block device, {{c|false}} otherwise. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2@ {{cpp/filesystem/error_handling|p}}

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>g9vlmg77fy1k5wfi1l3kabzhlmlc93y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is directory</title>
    <ns>0</ns>
    <id>15366</id>
    <revision>
      <id>91324</id>
      <parentid>85037</parentid>
      <timestamp>2017-03-31T19:40:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1695">{{cpp/filesystem/title|is_directory}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool is_directory( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_directory( const std::filesystem::path&amp; p );
bool is_directory( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a directory.

@1@ Equivalent to {{c|s.type() {{==}} file_type::directory}}.

@2@ Equivalent to {{c|is_directory(status(p))}} or {{c|is_directory(status(p, ec))}}, respectively.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to query}}
{{par | ec | error code to modify in case of errors}}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a directory, {{c|false}} otherwise. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2@ {{cpp/filesystem/error_handling|p}}

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>g3rcz0s22dkwsrhv6rxb5f4n2zzn4vs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is empty</title>
    <ns>0</ns>
    <id>15367</id>
    <revision>
      <id>85038</id>
      <timestamp>2016-03-23T21:11:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="885">{{cpp/filesystem/title|is_empty}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
bool is_empty( const std::filesystem::path&amp; p );
bool is_empty( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks whether the given path refers to an empty file or directory.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | error code to modify in case of error}}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to an empty file or directory, {{c|false}} otherwise. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc end}}</text>
      <sha1>b6t05kcd4zmpsna03c9ww0duuriu3z0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is fifo</title>
    <ns>0</ns>
    <id>15368</id>
    <revision>
      <id>91888</id>
      <parentid>85039</parentid>
      <timestamp>2017-03-31T20:00:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1780">{{cpp/filesystem/title|is_fifo}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17| 1=
bool is_fifo( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_fifo( const std::filesystem::path&amp; p );
bool is_fifo( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a FIFO or pipe file as if determined by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_ISFIFO].

@1@ Equivalent to {{c|s.type() {{==}} file_type::fifo}}.

@2@ Equivalent to {{c|is_fifo(status(p))}} or {{c|is_fifo(status(p, ec))}} respectively

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to query}}
{{par | ec | error code to modify in case of errors}}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a FIFO pipe, {{c|false}} otherwise. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2@ {{cpp/filesystem/error_handling|p}}

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>jo6c6tdogs3jktsts846xl761i146wk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is other</title>
    <ns>0</ns>
    <id>15369</id>
    <revision>
      <id>91637</id>
      <parentid>85040</parentid>
      <timestamp>2017-03-31T19:52:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1837">{{cpp/filesystem/title|is_other}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool is_other( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_other( const std::filesystem::path&amp; p );
bool is_other( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a file of type ''other'' type. That is, the file exists, but is neither regular file, nor directory nor a symlink.

@1@ Equivalent to {{c|exists(s) &amp;&amp; !is_regular_file(s) &amp;&amp; !is_directory(s) &amp;&amp; !is_symlink(s)}}.

@2@ Equivalent to {{c|is_other(status(p))}} or {{c|is_other(status(p, ec))}}, respectively.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | error code to store the error status to}}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a file that is not regular file, directory, or a symlink, {{c|false}} otherwise. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2@ {{cpp/filesystem/error_handling|p}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>ny7sf1i01y50uemy0hqnls0fphy0zcu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is regular file</title>
    <ns>0</ns>
    <id>15370</id>
    <revision>
      <id>91819</id>
      <parentid>88891</parentid>
      <timestamp>2017-03-31T19:58:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1862">{{cpp/filesystem/title|is_regular_file}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17| 1=
bool is_regular_file( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_regular_file( const std::filesystem::path&amp; p );
bool is_regular_file( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a regular file.

@1@ Equivalent to {{c|s.type() {{==}} file_type::regular}}.

@2@ Equivalent to {{c|is_regular_file(status(p))}} or {{c|is_regular_file(status(p, ec))}} respectively.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | error code to store the error status to}}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated by {{tt|s}} refers to a regular file, {{c|false}} otherwise. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2@ {{cpp/filesystem/error_handling|p}}

===Notes===
The throwing overload is additionally specified to throw {{lc|std::filesystem::filesystem_error}} if {{tt|status(p)}} would throw.

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>bu9zd9pb5pw86a2532000pa860ow117</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is socket</title>
    <ns>0</ns>
    <id>15371</id>
    <revision>
      <id>91663</id>
      <parentid>85042</parentid>
      <timestamp>2017-03-31T19:53:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2194">{{cpp/filesystem/title|is_socket}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool is_socket( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_socket( const std::filesystem::path&amp; p );
bool is_socket( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a named IPC socket, as if determined by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_IFSOCK]. 
@1@ Equivalent to {{c|s.type() {{==}} file_type::socket}}.
@2@ Equivalent to {{c|is_socket(status(p))}} or {{c|is_socket(status(p, ec))}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a named socket. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2,3@ {{cpp/filesystem/error_handling|p}}

===Notes===
Named sockets are UNIX domain sockets constructed with [http://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.html socket] and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.html bind] POSIX APIs, which may be used for advanced interprocess communication. In particular, they may be used to transport open file descriptors from one running process to another.

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>1aogrfp2ypprii4ppxvpi26uk9dsqh7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/is symlink</title>
    <ns>0</ns>
    <id>15372</id>
    <revision>
      <id>91604</id>
      <parentid>85043</parentid>
      <timestamp>2017-03-31T19:51:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1796">{{cpp/filesystem/title|is_symlink}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool is_symlink( std::filesystem::file_status s );
}}
{{dcl | num=2 | since=c++17 | 1=
bool is_symlink( const std::filesystem::path&amp; p );
bool is_symlink( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Checks if the given file status or path corresponds to a symbolic link, as if determined by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html S_IFLNK]. 
@1@ Equivalent to {{c|s.type() {{==}} file_type::symlink}}.
@2@ Equivalent to {{c|is_symlink(status(p))}} or {{c|is_symlink(status(p, ec))}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
{{c|true}} if the file indicated by {{tt|p}} or if the type indicated {{tt|s}} refers to a symbolic link. The non-throwing overload returns {{c|false}} if an error occurs.

===Exceptions===
@1@ {{unreviewed noexcept}}
@2,3@ {{cpp/filesystem/error_handling|p}}

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>nxryo2e9r2zjvmxay45a23mdlt1amk0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/last write time</title>
    <ns>0</ns>
    <id>15185</id>
    <revision>
      <id>84779</id>
      <timestamp>2016-03-22T13:49:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1908">{{cpp/filesystem/title|last_write_time}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
std::filesystem::file_time_type last_write_time(const std::filesystem::path&amp; p);
std::filesystem::file_time_type last_write_time(const std::filesystem::path&amp; p,
                                                std::error_code&amp; ec)
}}
{{dcl | num=2 | since=c++17 | 1=
void last_write_time(const std::filesystem::path&amp; p,
                     std::filesystem::file_time_type new_time);
void last_write_time(const std::filesystem::path&amp; p,
                     std::filesystem::file_time_type new_time,
                     std::error_code&amp; ec);
}}
{{dcl end}}

@1@ Returns the time of the last modification of {{tt|p}}, determined as if by accessing the member {{tt|st_mtime}} of the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat] (symlinks are followed)
The non-throwing overload returns {{c|file_time_type::min()}} on errors.
@2@ Changes the time of the last modification of {{tt|p}}, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html futimens] (symlinks are followed)

===Parameters===
{{par begin}}
{{par | p | path to examine or modify}}
{{par | new_time | new modification time}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
@1@ The time of the last modification of {{tt|p}}
@2@ (none)

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Notes===
It is not guaranteed that immediately after setting the write time, the value returned by {{v|1}} is the same as what was passed as the argument to {{v|2}} because the file system's time may be more granular than {{tt|file_time_type}}.

===Example===
{{cpp/filesystem/time_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc file_time_type}}
{{dsc end}}</text>
      <sha1>hctoqgexmoqdrg1tyr1hks0pak5c60x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path</title>
    <ns>0</ns>
    <id>15247</id>
    <revision>
      <id>91936</id>
      <parentid>90709</parentid>
      <timestamp>2017-03-31T20:06:05Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="5625">{{cpp/filesystem/title|path}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 
class path;
}}
{{dcl end}}

Objects of type {{tt|path}} represent paths on a filesystem. Only syntactic aspects of paths are handled: the pathname may represent a non-existing path or even one that is not allowed to exist on the current file system or OS.

The path name has the following syntax:
# {{spar|root-name}}{{mark optional}}: identifies the root on a filesystem with multiple roots (such as {{c|&quot;C:&quot;}} or {{c|&quot;//myserver&quot;}}). POSIX filesystems have single root.
# {{spar|root-directory}}{{mark optional}}: a directory separator that, if present, marks this path as ''absolute''. If it is missing (and the first element other than the root name is a file name), then the path is ''relative'' and requires another path as the starting location to resolve to a file name.
# Zero or more of the following:
:* {{spar|file-name}}: sequence of characters that aren't directory separators or preferred directory separators (additional limitations may be imposed by the OS or file system). This name may identify a file, a hard link, a symbolic link, or a directory. Two special {{spar|file-name}}s are recognized:
::* {{spar|dot}}: the file name consisting of a single dot character {{c|.}} is a directory name that refers to the current directory
::* {{spar|dot-dot}}: the file name consisting of two dot characters {{c|..}} is a directory name that refers to the parent directory.
:* {{spar|directory-separator}}s: the forward slash character {{c|/}} or the alternative character provided as {{tt|path::preferred_separator}}. If this character is repeated, it is treated as a single directory separator: {{c|/usr///////lib}} is the same as {{c|/usr/lib}}

A path in normal form has no redundant current directory (dot) elements, no redundant parent directory (dot-dot) elements, and no redundant directory-separators. The normal form for an empty path is an empty path. The normal form for a path ending in a directory-separator that is not the root directory has a current directory (dot) element appended.

The path can be traversed element-wise via iterators returned by the {{lc|begin()}} and {{lc|end()}} functions, which iterates over root name, root directory, and the subsequent file name elements (directory separators are skipped except the one that identifies the root directory). If the very last element in the path is a directory separator, the last iterator will dereference to a file name {{spar|dot}}.

Calling any non-const member function of a {{tt|path}} invalidates all iterators referring to elements of that object.

If the OS uses a ''native'' syntax that is different from the portable ''generic'' syntax described above, all library functions accept path names in both formats.

Paths are implicitly convertible to and from {{lc|std::basic_string}}s, which makes it possible to use them with over files APIs, e.g. as an argument to {{lc|std::ifstream::open}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | character type used by the native encoding of the filesystem: {{c|char}} on POSIX, {{c|wchar_t}} on Windows }}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;value_type&gt;}}}}
{{dsc | {{tt|const_iterator}} | a constant {{concept|BidirectionalIterator}} with a {{tt|value_type}} of {{tt|path}}}}
{{dsc | {{tt|iterator}} | an alias to {{tt|const_iterator}}}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc preferred_separator}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc constructor}}
{{dsc inc | cpp/filesystem/path/dsc destructor}}
{{dsc inc | cpp/filesystem/path/dsc operator{{=}}}}
{{dsc inc | cpp/filesystem/path/dsc assign}}

{{dsc h2 | Concatenation}}
{{dsc inc | cpp/filesystem/path/dsc append}}
{{dsc inc | cpp/filesystem/path/dsc concat}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/filesystem/path/dsc clear}}
{{dsc inc | cpp/filesystem/path/dsc make_preferred}}
{{dsc inc | cpp/filesystem/path/dsc remove_filename}}
{{dsc inc | cpp/filesystem/path/dsc replace_filename}}
{{dsc inc | cpp/filesystem/path/dsc replace_extension}}
{{dsc inc | cpp/filesystem/path/dsc swap}}

{{dsc h2 | Format observers}}
{{dsc inc | cpp/filesystem/path/dsc native}}
{{dsc inc | cpp/filesystem/path/dsc string}}
{{dsc inc | cpp/filesystem/path/dsc generic_string}}

{{dsc h2 | Compare}}
{{dsc inc | cpp/filesystem/path/dsc compare}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/filesystem/path/dsc lexically_normal}}

{{dsc h2 | Decomposition}}
{{dsc inc | cpp/filesystem/path/dsc root_name}}
{{dsc inc | cpp/filesystem/path/dsc root_directory}}
{{dsc inc | cpp/filesystem/path/dsc root_path}}
{{dsc inc | cpp/filesystem/path/dsc relative_path}}
{{dsc inc | cpp/filesystem/path/dsc parent_path}}
{{dsc inc | cpp/filesystem/path/dsc filename}}
{{dsc inc | cpp/filesystem/path/dsc stem}}
{{dsc inc | cpp/filesystem/path/dsc extension}}

{{dsc h2 | Queries}}
{{dsc inc | cpp/filesystem/path/dsc empty}}
{{dsc inc | cpp/filesystem/path/dsc has_path}}
{{dsc inc | cpp/filesystem/path/dsc is_absrel}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/filesystem/path/dsc begin}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc swap2}}
{{dsc inc | cpp/filesystem/path/dsc hash_value}}
{{dsc inc | cpp/filesystem/path/dsc operator_cmp}}
{{dsc inc | cpp/filesystem/path/dsc operator/}}
{{dsc inc | cpp/filesystem/path/dsc operator_ltltgtgt}}
{{dsc inc | cpp/filesystem/path/dsc u8path}}
{{dsc end}}

[[zh:cpp/filesystem/path]]</text>
      <sha1>80vjeme5y8zn53zj276ngngmvgxtqr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/append</title>
    <ns>0</ns>
    <id>15305</id>
    <revision>
      <id>88514</id>
      <parentid>86315</parentid>
      <timestamp>2016-11-23T04:15:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2664/2732</comment>
      <text xml:space="preserve" bytes="2847">{{cpp/filesystem/path/title|append|operator/{{=}}}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num = 1 | since=c++17 | 1=
path&amp; operator/=(const path&amp; p);
}}
{{dcl | num=2 | since=c++17 | 1=
template&lt; class Source &gt;
path&amp; operator/=( const Source&amp; source );
}}
{{dcl | num=3 | since=c++17 | 1=
template&lt; class Source &gt;
path&amp; append( const Source&amp; source );
}}
{{dcl | num=4 | since=c++17 | 1=
template&lt; class InputIt &gt;
path&amp; append( InputIt first, InputIt last );
}}
{{dcl end}}

@1@ First, appends the preferred directory separator to {{c|this}}, except if any of the following conditions is true:
@@* the separator would be redundant ({{c|*this}} already ends with a separator)
@@* {{c|*this}} is empty, or adding it would turn a relative path to an absolute path in some other way
@@* {{tt|p}} is an empty path.
@@* {{c|p.native()}} begins with a directory separator.
@@Then, appends {{c|p.native()}} to the pathname maintained by {{c|*this}}
@@The behavior is undefined if {{c|p.has_root_name()}} is {{c|true}}.
@2,3@ Same as {{v|1}}, but accepts any {{lc|std::basic_string}}, {{lc|std::basic_string_view}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence. Equivalent to {{c|1=return operator/=(path(source));}}.
@4@ Same as {{v|1}}, but accepts any iterator pair that designates a multicharacter string. Equivalent to {{c|1=return operator/=(path(first, last));}}

===Parameters===
{{par begin}}
{{par | p | pathname to append }}
{{par | source | {{lc|std::basic_string}}, {{lc|std::basic_string_view}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence, which represents a path name (either in portable or in native format) }}
{{par | first, last| pair of {{concept|InputIterator}}s that specify a multicharacter sequence that represents a path name }}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{cpp/filesystem/error_handling_exception_only}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main() {
    fs::path p1 = &quot;C:&quot;;
    p1 /= &quot;Users&quot;; // does not insert a separator
    std::cout &lt;&lt; &quot;\&quot;C:\&quot; / \&quot;Users\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
    p1 /= &quot;batman&quot;; // inserts fs::path::preferred_separator, '\' on Windows
    std::cout &lt;&lt; &quot;\&quot;C:\&quot; / \&quot;Users\&quot; / \&quot;batman\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
}
|p=true
|output=
&quot;C:&quot; / &quot;Users&quot; == &quot;C:Users&quot;
&quot;C:&quot; / &quot;Users&quot; / &quot;batman&quot; == &quot;C:Users\batman&quot;
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc concat}}
{{dsc inc | cpp/filesystem/path/dsc operator/}}
{{dsc end}}</text>
      <sha1>ctc9tisl57cxyxizp6spa84u0ln66iy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/assign</title>
    <ns>0</ns>
    <id>15319</id>
    <revision>
      <id>86313</id>
      <parentid>84950</parentid>
      <timestamp>2016-06-27T14:25:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0392r0 each Source template parameter accepts string_view</comment>
      <text xml:space="preserve" bytes="1284">{{cpp/filesystem/path/title|assign}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
template&lt; class Source &gt;
path&amp; assign( const Source&amp; source );
}}
{{dcl | num=2 | since=c++17 | 1=
template&lt; class InputIt &gt;
path&amp; assign( InputIt first, InputIt last );
}}
{{dcl end}}

Replaces the contents to the {{tt|path}} object by a new pathname constructed from the given character sequence.

@1@ Assigns the pathname identified by the character range {{tt|source}}.

@2@ Assigns the pathname identified by character range {{tt|[first, last)}}.

===Parameters===
{{par begin}}
{{par | source | a character range to use, represented as {{lc|std::string}}, {{lc|std::string_view}}, pointer to a null-terminated multibyte string, or as an input iterator with char value type that points to a null-terminated multibyte string }}
{{par | first, last | a character range to use}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{todo}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc operator{{=}}}}
{{dsc end}}</text>
      <sha1>1i8y44wa3ed9gdmjuekufn5i10mxjkn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/begin</title>
    <ns>0</ns>
    <id>15289</id>
    <revision>
      <id>84894</id>
      <timestamp>2016-03-22T17:53:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1457">{{cpp/filesystem/path/title|begin|end}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
iterator begin() const;
}}
{{dcl | num=2 | since=c++17 | 1=
iterator end() const;
}}
{{dcl end}}

@1@ Returns an iterator to the first element of the path. If the path is empty, the returned iterator is equal to {{lc|end()}}.
@2@ Returns an iterator one past the last element of the path. Dereferencing this iterator is undefined behavior.

The sequence denoted by this pair of iterators consists of the following:
@1@ {{spar|root-name}} (if any)
@2@ {{spar|root-directory}} (if any)
@3@ sequence of {{spar|file-name}}s, omitting any directory separators
@4@ If there is a directory separator after the last {{spar|file-name}} in the path, the last element before the end iterator is a fictitious {{spar|dot}} file name.

===Parameters===
(none)

===Return value===
@1@ Iterator to the first element of the path.
@2@ Iterator one past the end of the path

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p = &quot;C:\\users\\abcdef\\AppData\\Local\\Temp\\&quot;;
    std::cout &lt;&lt; &quot;Examining the path &quot; &lt;&lt; p &lt;&lt; &quot; through iterators gives\n&quot;;
    for(auto&amp; e : p)
        std::cout &lt;&lt; e &lt;&lt; '\n';
}
|output=
Examining the path &quot;C:\users\abcdef\AppData\Local\Temp\&quot; through iterators gives
&quot;C:&quot;
&quot;/&quot;
&quot;users&quot;
&quot;abcdef&quot;
&quot;AppData&quot;
&quot;Local&quot;
&quot;Temp&quot;
&quot;.&quot;
}}</text>
      <sha1>akta7e37xvxtiml6q7rgy8odyv4vclu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/clear</title>
    <ns>0</ns>
    <id>15312</id>
    <revision>
      <id>91461</id>
      <parentid>84932</parentid>
      <timestamp>2017-03-31T19:45:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="301">{{cpp/filesystem/path/title|clear}}
{{cpp/filesystem/path/navbar}}
{{ddcl | since=c++17 |
void clear();
}}

Clears the stored pathname. {{ltt|cpp/filesystem/path/empty|empty()}} is {{c|true}} after the call.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>gz4l33l0if0toqhfzv9d8x5rufguced</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/compare</title>
    <ns>0</ns>
    <id>15302</id>
    <revision>
      <id>91360</id>
      <parentid>86308</parentid>
      <timestamp>2017-03-31T19:41:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2261">{{cpp/filesystem/path/title|compare}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
int compare( const path&amp; p ) const;
}}
{{dcl | num=2 | since=c++17 | 1=
int compare( const string_type&amp; str ) const;
int compare( std::basic_string_view&lt;value_type&gt; str ) const;
}}
{{dcl | num=3 | since=c++17 | 1=
int compare( const value_type* s ) const;
}}
{{dcl end}}

Compares the lexical representations of the path and another path.

@1@ Returns a value less than, equal to or greater than {{math|0}} if the native representation of the path ({{rlp|native}}()) is respectively lexicographically less than, equal to or greater than the native representation of {{tt|p}} ({{c|p.native()}}). Comparison is performed element-wise, as if by iterating both paths from {{rlp|begin}}() to {{rlp|begin|end}}().
@2@ Equivalent to {{c|compare(path(str))}}.
@3@ Equivalent to {{c|compare(path(s))}}.

===Parameters===
{{par begin}}
{{par | p | a path to compare to}}
{{par | str | a string or string view representing path to compare to}}
{{par | s | a null-terminated string representing path to compare to}}
{{par end}}

===Return value===
A value less than {{math|0}} if the path is lexicographically less than the given path.

A value equal to {{math|0}} if the path is lexicographically equal to the given path.

A value greater than {{math|0}} if the path is lexicographically greater than the given path.

===Exceptions===
@1@ {{unreviewed noexcept}}

@2-3@ (none)

===Notes===
For two-way comparisons, [[cpp/filesystem/path/operator_cmp|binary operators]] may be more suitable.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
void demo(int rc, fs::path p1, fs::path p2) {
    if(rc &lt; 0) std::cout &lt;&lt; p1 &lt;&lt; &quot; &lt; &quot; &lt;&lt; p2 &lt;&lt; '\n';
    else if(rc &gt; 0) std::cout &lt;&lt; p1 &lt;&lt; &quot; &gt; &quot;  &lt;&lt; p2 &lt;&lt; '\n';
    else if(rc == 0) std::cout &lt;&lt; p1 &lt;&lt; &quot;==&quot; &lt;&lt; p2 &lt;&lt; '\n';
}
int main() {
    fs::path p1 = &quot;/a/b/&quot;; // as if &quot;a/b/.&quot; for lexicographical iteration
    fs::path p2 = &quot;/a/b/#&quot;;
    demo(p1.compare(p2), p1, p2);
    demo(p1.compare(&quot;a/b/_&quot;), p1, &quot;a/b/_&quot;);
}
|output=
&quot;/a/b/&quot; &gt; &quot;/a/b/#&quot;
&quot;/a/b/&quot; &lt; &quot;a/b/_&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc operator_cmp}}
{{dsc end}}</text>
      <sha1>71xvbrcz51tbva6sulddgz0twxb7885</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/concat</title>
    <ns>0</ns>
    <id>15306</id>
    <revision>
      <id>86316</id>
      <parentid>86309</parentid>
      <timestamp>2016-06-27T14:28:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0392r0 each Source template parameter accepts string_view</comment>
      <text xml:space="preserve" bytes="4010">{{cpp/filesystem/path/title|concat|operator+{{=}}}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
path&amp; operator+=( const path&amp; p );
}}
{{dcl | num=2 | since=c++17 | 1=
path&amp; operator+=( const string_type&amp; str );
path&amp; operator+=( std::basic_string_view&lt;value_type&gt; str );
}}
{{dcl | num=3 | since=c++17 | 1=
path&amp; operator+=( const value_type* ptr );
}}
{{dcl | num=4 | since=c++17 | 1=
path&amp; operator+=( value_type x );
}}
{{dcl | num=5 | since=c++17 | 1=
template&lt; class Source &gt;
path&amp; operator+=( const Source&amp; source );
}}
{{dcl | num=6 | since=c++17 | 1=
template&lt; class CharT &gt;
path&amp; operator+=( CharT x );
}}
{{dcl | num=7 | since=c++17  | 1=
template&lt; class Source &gt;
path&amp; concat( const Source&amp; source );
}}
{{dcl | num=8 | since=c++17 | 1=
template&lt; class InputIt &gt;
path&amp; concat( InputIterator first, InputIterator last );
}}
{{dcl end}}

Concatenates the current path and the argument

@1@ Concatenates {{c|*this}} and {{c|p}} in such a way that {{rlp|native|native()}} of the result is exactly original {{rlp|native|native()}} concatenated with {{c|p.native()}}
@2@ Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{{rlp|native|native()}} and the string (or string view) {{tt|str}}
@3@ Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{rlp|native|native()}} and the null-terminated string whose first character is pointed to by {{tt|ptr}}
@4@ Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{rlp|native|native()}} and the single character {{tt|x}}
@5@  Same as {{v|1}}, except the resulting {{rlp|native|native()}} is a concatenation of the original {{rlp|native|native()}} and the sequence (which may be in portable or native format) represented by {{tt|source}}, which may be {{lc|std::basic_string}}, {{lc|std::basic_string_view}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence.
@6@ Same as {{v|4}}, except that character conversion may be performed
@7@ Same as {{v|5}}
@8@ Same as {{v|5}}, except that the sequence is represented by any iterator pair that designates a multicharacter string.

===Parameters===
{{par begin}}
{{par | p | path to append}}
{{par | str | string or string view to append}}
{{par | ptr | pointer to the beginning of a null-terminated string to append}}
{{par | x | single character to append}}
{{par | source | {{lc|std::basic_string}}, {{lc|std::basic_string_view}}, null-terminated multicharacter string, or an input iterator pointing to a null-terminated multicharacter sequence, which represents a path name (either in portable or in native format) }}
{{par | first, last| pair of {{concept|InputIterator}}s that specify a multicharacter sequence that represents a path name }}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par req | {{tt|CharT}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{cpp/filesystem/error_handling_exception_only}}

===Notes===
Unlike with {{lc|append()}} or {{lc|operator/{{=}}}}, additional directory separators are never introduced.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main() {
    fs::path p1; // empty path
    p1 += &quot;var&quot;; // does not insert a separator
    std::cout &lt;&lt; &quot;\&quot;\&quot; + \&quot;var\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
    p1 += &quot;lib&quot;; // does not insert a separator
    std::cout &lt;&lt; &quot;\&quot;\&quot; + \&quot;var\&quot; + \&quot;lib\&quot; == &quot; &lt;&lt; p1 &lt;&lt; '\n';
}
|output=
&quot;&quot; + &quot;var&quot; == &quot;var&quot;
&quot;&quot; + &quot;var&quot; + &quot;lib&quot; == &quot;varlib&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc append}}
{{dsc inc | cpp/filesystem/path/dsc operator/}}
{{dsc end}}</text>
      <sha1>ngrtzz20jhdecycjpdf5x3mxoqzggmd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/empty</title>
    <ns>0</ns>
    <id>15300</id>
    <revision>
      <id>91577</id>
      <parentid>84908</parentid>
      <timestamp>2017-03-31T19:50:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="765">{{cpp/filesystem/path/title|empty}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
bool empty() const;
}}
{{dcl end}}

Checks if the path is empty.

===Parameters===
(none)

===Return value===
{{c|true}} if the path is empty, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
An empty path can be obtained by calling {{ltt|cpp/filesystem/path/clear|clear}} and by default-constructing a {{tt|path}}. It can also be returned by a path decomposition function (such as {{ltt|cpp/filesystem/path/extension|extension}}) if the corresponding component is not present in the path.

An empty path is classified as a relative path.

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc constructor}}
{{dsc end}}</text>
      <sha1>6vthlncvvk0ea20ac57q3b6a27mm9ho</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/extension</title>
    <ns>0</ns>
    <id>15298</id>
    <revision>
      <id>84904</id>
      <timestamp>2016-03-22T18:05:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2408">{{cpp/filesystem/path/title|extension}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path extension() const;
}}
{{dcl end}}

Returns the extension of the filename component of the path {{c|*this}}.

If the {{ltt|cpp/filesystem/path/filename|filename()}} component of the path contains a period ({{ttb|.}}), and is not one of the special filesystem elements {{spar|dot}} or {{spar|dot-dot}}, then the ''extension'' is the substring beginning at the rightmost period (including the period) and until the end of the pathname.

If the pathname is either {{tt|.}} or {{tt|..}}, or if {{ltt|cpp/filesystem/path/filename|filename()}} does not contain the {{tt|.}} character, then empty path is returned. 

Additional behavior may be defined by the implementations for file systems which append additional elements (such as alternate data streams or partitioned dataset names) to extensions.

===Parameters===
(none)

===Return value===
The extension of the current pathname or an empty path if there's no extension.

===Exceptions===
(none)

===Notes===
The extension as returned by this function includes a period to make it possible to distinguish the file that ends with a period (function returns {{c|&quot;.&quot;}}) from a file with no extension (function returns {{c|&quot;&quot;}})

For any path {{tt|p}}, {{c|1=p.stem()+p.extension() == p.filename()}}

===Example===
{{example 
| code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    std::cout &lt;&lt; fs::path(&quot;/foo/bar.txt&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.txt/bar.cc&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.txt/bar.&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar.txt/bar&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/..&quot;).extension() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.hidden&quot;).extension() &lt;&lt; '\n';
}
| output=
&quot;.txt&quot;
&quot;.&quot;
&quot;&quot;
&quot;.cc&quot;
&quot;.&quot;
&quot;&quot;
&quot;&quot;
&quot;&quot;
&quot;.hidden&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc filename}}
{{dsc inc | cpp/filesystem/path/dsc stem}}
{{dsc inc | cpp/filesystem/path/dsc replace_extension}}
{{dsc mem fun | cpp/filesystem/path/has_path | title=has_extension | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>85cnkumt1jj6nz39ueomguzna7i8w9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/filename</title>
    <ns>0</ns>
    <id>15296</id>
    <revision>
      <id>84902</id>
      <timestamp>2016-03-22T18:02:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1281">{{cpp/filesystem/path/title|filename}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path filename() const;
}}
{{dcl end}}

Returns the filename component of the path.

Equivalent to {{cc|empty() ? path() : *--end()}}.

===Parameters===
(none)

===Return value===
The filename identified by the path.

===Exceptions===
(none)

===Example===
{{example 
| code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    std::cout &lt;&lt; fs::path(&quot;/foo/bar.txt&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.bar&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/bar/&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/..&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;.&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;..&quot;).filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/&quot;).filename() &lt;&lt; '\n';
}
| output=
&quot;bar.txt&quot;
&quot;.bar&quot;
&quot;.&quot;
&quot;.&quot;
&quot;..&quot;
&quot;.&quot;
&quot;..&quot;
&quot;/&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc extension}}
{{dsc inc | cpp/filesystem/path/dsc stem}}
{{dsc inc | cpp/filesystem/path/dsc replace_filename}}
{{dsc mem fun | cpp/filesystem/path/has_path | title=has_filename | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>r4ivek7ilwnip63ze2mat52udjmyycb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/generic string</title>
    <ns>0</ns>
    <id>15287</id>
    <revision>
      <id>90710</id>
      <parentid>84892</parentid>
      <timestamp>2017-03-08T09:25:15Z</timestamp>
      <contributor>
        <ip>223.3.175.127</ip>
      </contributor>
      <text xml:space="preserve" bytes="1563">{{cpp/filesystem/path/title|generic_string|generic_wstring|generic_u8string|generic_u16string|generic_u32string}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt;
          class Alloc = std::allocator&lt;CharT&gt; &gt;
std::basic_string&lt;CharT,Traits,Alloc&gt;
    generic_string( const Allocator&amp; a = Allocator() ) const;
}}
{{dcl rev begin | num=2 | since=c++17 }}
{{dcl | 
std::string generic_string() const;
}}
{{dcl |
std::wstring generic_wstring() const;
}}
{{dcl |
std::string generic_u8string() const;
}}
{{dcl |
std::u16string generic_u16string() const;
}}
{{dcl |
std::u32string generic_u32string() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the internal pathname in generic pathname format, converted to specific string type. Conversion, if any, is specified as follows:
{{include|cpp/filesystem/path/encoding_rules}}

The {{tt|/}} character is used as the directory separator. 

@1@ All memory allocations are performed by {{tt|a}}.

@2@ The result encoding in the case of {{tt|u8string()}} is always UTF-8.

===Parameters===
{{par begin}}
{{par | a | allocator to construct the string with}}
{{par hreq}}
{{par req | {{tt|CharT}} must be one of the encoded character types ({{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}})}}
{{par end}}

===Return value===
The internal pathname in generic pathname format, converted to specified string type.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc string}}
{{dsc end}}</text>
      <sha1>pj7qq7ky5uk1ckrc1xr0r871pxxbpzs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/has path</title>
    <ns>0</ns>
    <id>15290</id>
    <revision>
      <id>84913</id>
      <parentid>84901</parentid>
      <timestamp>2016-03-22T18:19:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link with ltt to all those decomposition functions</comment>
      <text xml:space="preserve" bytes="1677">{{cpp/filesystem/path/title|has_root_path|has_root_name|has_root_directory|has_relative_path|has_parent_path|has_filename|has_stem|has_extension}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
bool has_root_path() const;
}}
{{dcl | num=2 | since=c++17 | 1=
bool has_root_name() const;
}}
{{dcl | num=3 | since=c++17 | 1=
bool has_root_directory() const;
}}
{{dcl | num=4 | since=c++17 | 1=
bool has_relative_path() const;
}}
{{dcl | num=5 | since=c++17  | 1=
bool has_parent_path() const;
}}
{{dcl | num=6 | since=c++17 | 1=
bool has_filename() const;
}}
{{dcl | num=7 | since=c++17 | 1=
bool has_stem() const;
}}
{{dcl | num=8 | since=c++17 | 1=
bool has_extension() const;
}}
{{dcl end}}

Checks whether the path contains the corresponding path element.

@1@ Checks whether {{ltt|cpp/filesystem/path/root_path|root_path()}} is empty.

@2@ Checks whether {{ltt|cpp/filesystem/path/root_name|root_name()}} is empty.

@3@ Checks whether {{ltt|cpp/filesystem/path/root_directory|root_directory()}} is empty.

@4@ Checks whether {{ltt|cpp/filesystem/path/relative_path|relative_path()}} is empty.

@5@ Checks whether {{ltt|cpp/filesystem/path/parent_path|parent_path()}} is empty.

@6@ Checks whether {{ltt|cpp/filesystem/path/filename|filename()}} is empty.

@7@ Checks whether {{ltt|cpp/filesystem/path/stem|stem()}} is empty.

@8@ Checks whether {{ltt|cpp/filesystem/path/extension|extension()}} is empty.

===Parameters===
(none)

===Return value===
{{c|true}} if the corresponding path component is not empty, {{c|false}} otherwise.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc empty}}
{{dsc end}}</text>
      <sha1>o9dx8e2kxyfcv89h6nld27ku6j2jr2y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/hash value</title>
    <ns>0</ns>
    <id>15311</id>
    <revision>
      <id>91530</id>
      <parentid>88034</parentid>
      <timestamp>2017-03-31T19:49:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1049">{{cpp/filesystem/title|hash_value}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
std::size_t hash_value( const path&amp; p ) noexcept;
}}
{{dcl end}}

===Parameters===
{{par begin}}
{{par | p| a {{lc|std::filesystem::path}} object }}
{{par end}}

===Return value===
A hash value such that if for two paths, {{c|p1 {{==}} p2}} then {{c|hash_value(p1) {{==}} hash_value(p2)}}. 

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Equality of two paths is determined by comparing each component separately, so, for example {{c|&quot;a//b&quot;}} equals {{c|&quot;a/b&quot;}} and has the same {{tt|hash_value}}

{{tt|hash_value}} originates from the boost.filesystem library where it was used for interoperability with boost.hash (which [http://www.boost.org/doc/libs/1_60_0/doc/html/hash/reference.html#boost.hash_val_idm45507095703056 calls hash_value] where available)

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc compare}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}</text>
      <sha1>6ow6di2qe5rjcyq3m90hpljnexcskxs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/is absrel</title>
    <ns>0</ns>
    <id>15299</id>
    <revision>
      <id>84905</id>
      <timestamp>2016-03-22T18:09:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="913">{{cpp/filesystem/path/title|is_absolute,is_relative}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17  | 1=
bool is_absolute() const;
}}
{{dcl | num=2 | since=c++17  | 1=
bool is_relative() const;
}}
{{dcl end}}

Checks whether the path is absolute or relative. An absolute path is a path that unambiguously identifies the location of a file without reference to an additional starting location. The first version returns {{c|true}} if the path is absolute, {{c|false}} otherwise; the second version the other way round.

===Parameters===
(none)

===Return value===
@1@ {{c|true}} if the path is absolute, {{c|false}} otherwise.

@2@ {{c|false}} if the path is absolute, {{c|true}} otherwise.

===Exceptions===
(none)

===Notes===
The path {{c|&quot;/&quot;}} is absolute on a POSIX OS, but is relative on Windows.

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc absolute}}
{{dsc end}}</text>
      <sha1>dvt6z9f8875opm23mvi29b1sxb0ndju</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/lexically normal</title>
    <ns>0</ns>
    <id>15543</id>
    <revision>
      <id>88310</id>
      <parentid>86441</parentid>
      <timestamp>2016-11-16T14:20:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Late 15 / commit 066aba6 - more formal desc of lexically_relative</comment>
      <text xml:space="preserve" bytes="2786">{{cpp/filesystem/path/title|lexically_normal|lexically_relative|lexically_proximate}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
path lexically_normal() const;
}}
{{dcl | since=c++17 | num=2 | 1=
path lexically_relative(const path&amp; base) const;
}}
{{dcl | since=c++17 | num=3 | 1=
path lexically_proximate(const path&amp; base) const;
}}
{{dcl end}}

@1@ Returns {{tt|*this}} converted to [[cpp/filesystem/path|normal form]] (no redundant ''dot'' or ''dot-dot'' elements, and if the last element is a non-root directory separator, ''dot'' is added)
@2@ Returns {{tt|*this}} made relative to {{tt|base}}. Effectively, first, determines the first mismatched element of {{tt|*this}} and {{tt|base}} as if by  {{c|auto [a, b] {{=}} mismatch(begin(), end(), base.begin(), base.end())}}, then
:* if {{c|a {{==}} begin()}} and {{c|b {{==}} base.begin()}}, returns {{c|path()}} (empty path).
:* otherwise, if {{c|a {{==}} end()}} and {{c|b {{==}} base.end()}}, returns {{c|path(&quot;.&quot;)}};
:* otherwise returns an object composed from a default-constructed {{c|path()}} followed by one application of {{c|operator/{{=}}(path(&quot;..&quot;))}} for each each element in the half-open range {{tt|[b, base.end())}}, and then by one application of {{c|1=operator/=}} for each element in the half-open range {{tt|[a, end())}}.
@3@ If the value of {{c|lexically_relative(base)}} is not an empty path, return it. Otherwise return {{tt|*this}}.

===Parameters===
(none)

===Return value===
@1@ The normal form of the path
@2@ The relative form of the path
@3@ The proximate form of the path

===Exceptions===
(none)

===Notes===
These conversions are purely lexical. They do not check that the paths exist, do not follow symlinks, and do not access the filesystem at all. For symlink-following counterparts of {{tt|lexically_relative}} and {{tt|lexically_proximate}}, see {{ltt|cpp/filesystem/relative|relative}} and {{ltt|cpp/filesystem/relative|proximate}}.

On Windows, the returned path has backslashes (the preferred separators), 

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
#include &lt;cassert&gt;
namespace fs = std::filesystem;
 
int main()
{
    assert(fs::path(&quot;foo/./bar/..&quot;).lexically_normal() == &quot;foo&quot;);
    assert(fs::path(&quot;foo/.///bar/../&quot;).lexically_normal() == &quot;foo/.&quot;);

    assert(path(&quot;/a/d&quot;).lexically_relative(&quot;/a/b/c&quot;) == &quot;../../d&quot;);
    assert(path(&quot;/a/b/c&quot;).lexically_relative(&quot;/a/d&quot;) == &quot;../b/c&quot;);
    assert(path(&quot;a/b/c&quot;).lexically_relative(&quot;a&quot;) == &quot;b/c&quot;);
    assert(path(&quot;a/b/c&quot;).lexically_relative(&quot;a/b/c/x/y&quot;) == &quot;../..&quot;);
    assert(path(&quot;a/b/c&quot;).lexically_relative(&quot;a/b/c&quot;) == &quot;.&quot;);
    assert(path(&quot;a/b&quot;).lexically_relative(&quot;c/d&quot;) == &quot;&quot;);
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc relative}}
{{dsc end}}</text>
      <sha1>pbb6a48a4lophv6krhmnye8ht9afb84</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/make preferred</title>
    <ns>0</ns>
    <id>15313</id>
    <revision>
      <id>84935</id>
      <timestamp>2016-03-22T19:57:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="505">{{cpp/filesystem/path/title|make_preferred}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
path&amp; make_preferred()
}}
{{dcl end}}

Converts all directory separators in path to the preferred directory separator.

For example, on systems, where {{tt|\}} is the preferred separator, the path {{tt|foo/bar}} will be converted to {{tt|foo\bar}}.

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example}}

===See also===
{{todo}}</text>
      <sha1>masxd5gt8g70ghd7p1sbptsmp3rdb7q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/native</title>
    <ns>0</ns>
    <id>15288</id>
    <revision>
      <id>91320</id>
      <parentid>84893</parentid>
      <timestamp>2017-03-31T19:40:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1337">{{cpp/filesystem/path/title|c_str|native|operator string_type()}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
const value_type* c_str() const;
}}
{{dcl | num=2 | since=c++17 | 1=
const string_type&amp; native() const;
}}
{{dcl | num=3 | since=c++17 | 1=
operator string_type() const;
}}
{{dcl end}}

Accesses the native path name as a character string.

@1@ Equivalent to {{c|native().c_str()}}.
@2@ Returns the native string representation of the pathname by reference.
@3@ Returns the native string representation of the pathname by value.

===Parameters===
(none)

===Return value===
The native string representation of the pathname, using native syntax, native character type, and native character encoding. This string is suitable for use with OS APIs.

===Exceptions===
@1,2@ {{unreviewed noexcept}}

===Notes===
The conversion function {{v|3}} is provided so that standard file-opening APIs that accept {{lc|std::basic_string}} file names, such as the {{lc|std::ifstream}} constructor, can use pathnames with no changes to code:
{{source|1=
std::filesystem::path p = &quot;/tmp/text.txt&quot;;
std::ifstream f(p);
}}

===Example===
{{cpp/filesystem/path/string_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc string}}
{{dsc inc | cpp/filesystem/path/dsc generic_string}}
{{dsc end}}</text>
      <sha1>0m4u45ird7x3740alce3he7ttsuj9w0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/operator cmp</title>
    <ns>0</ns>
    <id>15303</id>
    <revision>
      <id>91750</id>
      <parentid>88712</parentid>
      <timestamp>2017-03-31T19:56:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2100">{{title|1=operator==,!=,&lt;,&lt;=,&gt;,&gt;={{small|(std::filesystem::path)}}}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
bool operator==( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=2 | since=c++17 | 1=
bool operator!=( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=3 | since=c++17 | 1=
bool operator&lt;( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=4 | since=c++17 | 1=
bool operator&lt;=( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=5 | since=c++17 | 1=
bool operator&gt;( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl | num=6 | since=c++17 | 1=
bool operator&gt;=( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl end}}

Compares two paths lexicographically.

@1@ Checks whether {{tt|lhs}} and {{tt|rhs}} are equal. Equivalent to {{c|!(lhs &lt; rhs) &amp;&amp; !(rhs &lt; lhs)}}.

@2@ Checks whether {{tt|lhs}} and {{tt|rhs}} are not equal. Equivalent to {{c|!(lhs {{==}} rhs)}}.

@3@ Checks whether {{tt|lhs}} is less than {{tt|rhs}}. Equivalent to {{c|lhs.compare(rhs) &lt; 0}}.

@4@ Checks whether {{tt|lhs}} is less than or equal to {{tt|rhs}}. Equivalent to {{c|!(rhs &lt; lhs)}}.

@5@ Checks whether {{tt|lhs}} is greater than {{tt|rhs}}. Equivalent to {{c|rhs &lt; lhs}}.

@6@ Checks whether {{tt|lhs}} is greater than or equal to {{tt|rhs}}. Equivalent to {{c|!(lhs &lt; rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | the paths to compare}}
{{par end}}

===Return value===
{{c|true}} if the corresponding comparison yields, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Path equality and equivalence have different semantics.

In the case of equality, as determined by {{tt|operator{{==}}}}, only lexical representations are compared. Therefore, {{c|1=path(&quot;a&quot;) == path(&quot;b&quot;)}} is never {{c|true}}.

In the case of equivalence, as determined by {{ltf|cpp/filesystem/equivalent}}, it is checked whether two paths ''resolve'' to the same file system object. Thus {{c|equivalent(&quot;a&quot;, &quot;b&quot;)}} will return {{c|true}} if the paths resolve to the same file.

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc compare}}
{{dsc end}}</text>
      <sha1>0vpx2kfzx5159e5gq6blwhiet76b83c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/operator ltltgtgt</title>
    <ns>0</ns>
    <id>15307</id>
    <revision>
      <id>84923</id>
      <timestamp>2016-03-22T18:32:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1403">{{title|operator&lt;&lt;,&gt;&gt;{{small|(std::filesystem::path)}}}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp;
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; os, const path&amp; p );
}}
{{dcl | num=2 | since=c++17 | 1=
template&lt; class CharT, class Traits &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp;
    operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; is, path&amp; p );
}}
{{dcl end}}

Performs stream input or output on the path {{tt|p}}. {{c|std::quoted}} is used so that spaces are not truncation when later read by stream input operator.

===Parameters===
{{par begin}}
{{par | os | stream to perform output on}}
{{par | is | stream to perform input on}}
{{par | p | path to insert or extract}}
{{par end}}

===Return value===
@1@ {{c|os}}
@2@ {{c|is}}

===Exceptions===
(none)

===Possible implementation===
{{eq fun
 |1=
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp;
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; os, const path&amp; p )
{
    os &lt;&lt; std::quoted(p.string&lt;CharT,Traits&gt;());
    return os;
}
 |2=
template&lt; class CharT, class Traits &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp;
    operator&gt;&gt;( std::basic_istream&lt;CharT,Traits&gt;&amp; is, path&amp; p )
{
    std::basic_string&lt;CharT, Traits&gt; t;
    is &gt;&gt; std::quoted(t);
    p = t;
    return is;
}
}}

===Example===
{{example
 |code=
 |output=
}}</text>
      <sha1>lbaf6xd462xd68zkzopfggh89g82my7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/operator slash</title>
    <ns>0</ns>
    <id>15304</id>
    <revision>
      <id>91679</id>
      <parentid>84917</parentid>
      <timestamp>2017-03-31T19:54:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="750">{{cpp/filesystem/title|operator/{{small|(std::filesystem::path)}}}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
path operator/( const path&amp; lhs, const path&amp; rhs );
}}
{{dcl end}}

Concatenates two path components using the preferred directory separator if appropriate (see {{ltt|cpp/filesystem/path/append|operator/{{=}}}} for details).

Effectively returns {{c|1=path(lhs) /= rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | paths to concatenate}}
{{par end}}

===Return value===
The result of path concatenation.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc append}}
{{dsc end}}</text>
      <sha1>daxesu5wao19mf215ac0kyy7dtoajgv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/operator=</title>
    <ns>0</ns>
    <id>15320</id>
    <revision>
      <id>91617</id>
      <parentid>89014</parentid>
      <timestamp>2017-03-31T19:52:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1688">{{cpp/filesystem/path/title|operator{{=}}}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
path&amp; operator=( const path&amp; p );
}}
{{dcl | num=2 | since=c++17 | 1=
path&amp; operator=( path&amp;&amp; p );
}}
{{dcl | num=2 | since=c++17 | 1=
template&lt; class Source &gt;
path&amp; operator=( const Source&amp; source );
}}
{{dcl end}}

@1@ Replaces the contents of {{c|*this}} with a copy of the contents of {{tt|p}}.
@2@ Replaces the contents of {{c|*this}} with {{tt|p}}, possibly using move semantics: {{tt|p}} is left in a valid, but unspecified state.
@3@ Replaces the contents of {{c|*this}} with a new path value constructed from {{tt|source}} as if by overload {{v|4}} of the [[cpp/filesystem/path/path|path constructor]]. Equivalent to {{c|assign(source)}}.

===Parameters===
{{par begin}}
{{par | p | a path to assign}}
{{par | source | a {{lc|std::basic_string}}, {{lc|std::basic_string_view}}, pointer to a null-terminated character/wide character string, or an input iterator that points to a null-terminated character/wide character sequence. The character type must be one of {{c|char}}, {{c|char16_t}}, {{c|char32_t}}, {{c|wchar_t}}}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ (none)

@2@ {{unreviewed noexcept}}

@3@ (none)

===Example===
{{example|code=
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p = &quot;C:/users/abcdef/AppData/Local&quot;;
    p = p / &quot;Temp&quot;; // move assignment
    const wchar_t* wstr = L&quot;D:/猫.txt&quot;;
    p = wstr; // assignment from a source
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc assign}}
{{dsc inc | cpp/filesystem/path/dsc constructor}}
{{dsc end}}</text>
      <sha1>22b6l8b54fg4r5on2pwlghv5bt2qdsq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/parent path</title>
    <ns>0</ns>
    <id>15295</id>
    <revision>
      <id>84900</id>
      <timestamp>2016-03-22T18:01:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="966">{{cpp/filesystem/path/title|parent_path}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path parent_path() const;
}}
{{dcl end}}

Returns the path to the parent directory. Returns empty path if {{c|empty()}} or there's only a single element in the path ({{c|1=begin() == --end()}}.

The resulting path is constructed by appending all elements in a range {{tt|[begin(), --end())}} to an empty path.

===Parameters===
(none)

===Return value===
The path to the parent directory.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    for(fs::path p : {&quot;/var/tmp/example.txt&quot;, &quot;/&quot;, &quot;/var/tmp/.&quot;})
        std::cout &lt;&lt; &quot;The parent path of &quot; &lt;&lt; p
                  &lt;&lt; &quot; is &quot; &lt;&lt; p.parent_path() &lt;&lt; '\n';
}
|p=true
|output=
The parent path of &quot;/var/tmp/example.txt&quot; is &quot;/var/tmp&quot;
The parent path of &quot;/&quot; is &quot;&quot;
The parent path of &quot;/var/tmp/.&quot; is &quot;/var/tmp&quot;
}}</text>
      <sha1>gfamfws5t2ih4r2r2b0cz7f4vjvnr6p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/path</title>
    <ns>0</ns>
    <id>15324</id>
    <revision>
      <id>91769</id>
      <parentid>86310</parentid>
      <timestamp>2017-03-31T19:57:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4367">{{cpp/filesystem/path/title|path}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 |
path();
}}
{{dcl | since=c++17 | num=2 |
path( const path&amp; p );
}}
{{dcl | since=c++17 | num=3 |
path( path&amp;&amp; p );
}}
{{dcl | since=c++17 | num=4 |
template&lt; class Source &gt;
path( const Source&amp; source );
}}
{{dcl | since=c++17 | num=5 |
template&lt; class InputIt &gt;
path( InputIt first, InputIt last );
}}
{{dcl | since=c++17  | num=6 |
template&lt; class Source &gt;
path( const Source&amp; source, const std::locale&amp; loc );
}}
{{dcl | since=c++17  | num=7 |
template&lt; class InputIt &gt;
path( InputIt first, InputIt last, const std::locale&amp; loc );
}}
{{dcl end}}

Constructs a new {{tt|path}} object.

@1@ Constructs an empty path.
@2@ Copy constructor. Constructs a copy of {{tt|p}}.
@3@ Move constructor. Constructs a copy of {{tt|p}}, {{tt|p}} is left in valid but unspecified state.
@4-5@ Constructs the path from a character sequence provided by {{tt|source}} {{v|4}}, which is a pointer or an input iterator to a null-terminated character/wide character sequence, an {{lc|std::basic_string}} or an {{lc|std::basic_string_view}}, or represented as a pair of input iterators [{{tt|first}}, {{tt|last}}) {{v|5}}. Any of the four character types {{c|char}}, {{c|char16_t}}, {{c|char32_t}}, {{c|wchar_t}} is allowed, and the method of conversion to the native character set depends on the character type used by {{tt|source}}
:*If the source character type is {{c|char}}, the encoding of the source is assumed to be the native narrow encoding (so no conversion takes place on POSIX systems)
:*If the source character type is {{c|char16_t}}, conversion from UTF-16 to native filesystem encoding is used.
:*If the source character type is {{c|char32_t}}, conversion from UTF-32 to native filesystem encoding is used.
:* If the source character type is {{c|wchar_t}}, the input is assumed to be the native wide encoding (so no conversion takes places on Windows)
@6-7@ Constructs the path from a character sequence provided by {{tt|source}} {{v|6}}, which is a pointer or an input iterator to a null-terminated character sequence, an {{lc|std::string}}, an {{lc|std::basic_string_view}}, or represented as a pair of input iterators [{{tt|first}}, {{tt|last}}) ({{v|7}}). The only character type allowed is {{c|char}}. Uses {{tt|loc}} to perform the character encoding conversion. If {{tt|value_type}} is {{c|wchar_t}}, converts from to wide using the {{c|std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;}} facet of {{tt|loc}}. Otherwise, first converts to wide using the {{c|std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;}} facet and then converts to filesystem native character type using {{c|std::codecvt&lt;wchar_t,value_type&gt;}} facet of {{tt|loc}}.

===Parameters===
{{par begin}}
{{par | p | a path to copy}}
{{par | source | {{lc|std::basic_string}}, {{lc|std::basic_string_view}}, pointer to a null-terminated character string, or input iterator with a character value type that points to a null-terminated character sequence (the character type must be {{c|char}} for overload {{v|6}} }}
{{par | first, last | pair of {{concept|InputIterator}}s that specify a UTF-8 encoded character sequence}}
{{par | loc | locale that defines encoding conversion to use}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be one of the four character types {{c|char}}, {{c|wchar_t}}, {{c|char16_t}} and {{c|char32_t}} to use the overload {{v|5}})}}
{{par req | The value type of {{tt|InputIt}} must be {{c|char}} to use the overload {{v|7}})}}
{{par end}}

===Exceptions===
@1-2@ (none)
@3@ {{unreviewed noexcept}}
@4-7@ (none)

===Notes===
For portable pathname generation from Unicode strings, see {{rlp|u8path}}.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p1 = &quot;/usr/lib/sendmail.cf&quot;; // portable format
    fs::path p2 = &quot;C:\\users\\abcdef\\AppData\\Local\\Temp\\&quot;; // native format
    fs::path p3 = L&quot;D:/猫.txt&quot;; // wide string

    std::cout &lt;&lt; &quot;p1 = &quot; &lt;&lt; p1 &lt;&lt; '\n'
              &lt;&lt; &quot;p2 = &quot; &lt;&lt; p2 &lt;&lt; '\n'
              &lt;&lt; &quot;p3 = &quot; &lt;&lt; p3 &lt;&lt; '\n';
}
|output=
p1 = &quot;/usr/lib/sendmail.cf&quot;
p2 = &quot;C:\users\abcdef\AppData\Local\Temp\&quot;
p3 = &quot;D:/猫.txt&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc u8path}}
{{dsc end}}</text>
      <sha1>945yue1yi6coh9cqziuua6xeptp9xe1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/relative path</title>
    <ns>0</ns>
    <id>15294</id>
    <revision>
      <id>84899</id>
      <timestamp>2016-03-22T18:00:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1068">{{cpp/filesystem/path/title|relative_path}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path relative_path() const;
}}
{{dcl end}}

Returns path relative to {{rlp|root path}}. If {{c|*this}} is an empty path, returns an empty path.

===Parameters===
(none)

===Return value===
Path relative to the {{rlp|root path}}.

===Exceptions===
(none)

===Examples===
{{example
 |code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::path p = fs::current_path();
    
    std::cout &lt;&lt; &quot;The current path &quot; &lt;&lt; p &lt;&lt; &quot; decomposes into:\n&quot;
              &lt;&lt; &quot;root-path &quot; &lt;&lt; p.root_path() &lt;&lt; '\n'
              &lt;&lt; &quot;relative path &quot; &lt;&lt; p.relative_path() &lt;&lt; '\n';
}
|p=true
 |output=
The current path &quot;C:\Users\abcdef\Local Settings\temp&quot; decomposes into:
root-path &quot;C:\&quot;
relative path &quot;Users\abcdef\Local Settings\temp&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc root_name}}
{{dsc inc | cpp/filesystem/path/dsc root_directory}}
{{dsc inc | cpp/filesystem/path/dsc root_path}}
{{dsc end}}</text>
      <sha1>gszttk97bqcqcaahhvd1kvdb04zw5wk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/remove filename</title>
    <ns>0</ns>
    <id>15316</id>
    <revision>
      <id>84947</id>
      <timestamp>2016-03-22T21:07:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="950">{{cpp/filesystem/path/title|remove_filename}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
path&amp; remove_filename()
}}
{{dcl end}}

Removes a single filename component. 

The behavior is undefined if the path has no filename component ({{ltt|cpp/filesystem/path/has_path|has_filename}} returns {{c|false}}).

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{

    std::cout &lt;&lt; fs::path(&quot;/foo&quot;).remove_filename() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/&quot;).remove_filename() &lt;&lt; '\n';
}
| output=
&quot;/&quot;
&quot;&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc filename}}
{{dsc inc | cpp/filesystem/path/dsc replace_filename}}
{{dsc mem fun | cpp/filesystempath/has_path | title=has_filename | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>i1e4fniocg4utij09m5i1i06pt30em3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/replace extension</title>
    <ns>0</ns>
    <id>15318</id>
    <revision>
      <id>84949</id>
      <timestamp>2016-03-22T21:09:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1379">{{cpp/filesystem/path/title|replace_extension}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
path&amp; replace_extension( const path&amp; replacement = path() );
}}
{{dcl end}}

Replaces the extension with {{tt|replacement}} or removes it when the default value of {{tt|replacement}} is used.

Firstly, if this path has an {{ltt|cpp/filesystem/path/extension|extension()}}, it is removed. 

Then, a dot character is appended if {{tt|replacement}} is not empty or does not begin with a dot character.

Then {{tt|replacement}} is appended to the path.

===Parameters===
{{par begin}}
{{par | replacement | the extension to replace with}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::path p = &quot;/foo/bar.jpeg&quot;;
    std::cout &lt;&lt; &quot;Was: &quot; &lt;&lt; p &lt;&lt; '\n';
    p.replace_extension(&quot;.jpg&quot;);
    std::cout &lt;&lt; &quot;Now: &quot; &lt;&lt; p.replace_extension(&quot;.jpg&quot;) &lt;&lt; '\n';
}
|output=
Was: &quot;/foo/bar.jpeg&quot;
Now: &quot;/foo/bar.jpg&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc extension}}
{{dsc inc | cpp/filesystem/path/dsc filename}}
{{dsc inc | cpp/filesystem/path/dsc stem}}
{{dsc mem fun | cpp/filesystem/path/has_path | title=has_extension | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>8advmy172iad5xdsz0279wkuvrk2yr2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/replace filename</title>
    <ns>0</ns>
    <id>15317</id>
    <revision>
      <id>84948</id>
      <timestamp>2016-03-22T21:08:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1158">{{cpp/filesystem/path/title|replace_filename}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl |  since=c++17 | 1=
path&amp; replace_filename( const path&amp; replacement );
}}
{{dcl end}}

Replaces a single filename component with {{tt|replacement}}.

Equivalent to the following:
{{source|1=
remove_filename();
operator/=(replacement);
}}

The behavior is undefined if the path has no filename component ({{ltt|cpp/filesystem/path/has_path|has_filename}} returns {{c|false}}).

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{

    std::cout &lt;&lt; fs::path(&quot;/foo&quot;).replace_filename(&quot;bar&quot;) &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/&quot;).replace_filename(&quot;bar&quot;) &lt;&lt; '\n';
}
| output=
&quot;/bar&quot;
&quot;bar&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc replace_extension}}
{{dsc inc | cpp/filesystem/path/dsc filename}}
{{dsc inc | cpp/filesystem/path/dsc remove_filename}}
{{dsc mem fun | cpp/filesystem/path/has_path | title=has_filename | checks if the corresponding path element is not empty}}
{{dsc end}}</text>
      <sha1>t2dg3enpylxycjid63zr4l00c2e7b7t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/root directory</title>
    <ns>0</ns>
    <id>15292</id>
    <revision>
      <id>84897</id>
      <timestamp>2016-03-22T17:58:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1090">{{cpp/filesystem/path/title|root_directory}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path root_directory() const;
}}
{{dcl end}}

Returns the root directory of the path. If the path does not include root name, returns {{c|path()}}.

===Parameters===
(none)

===Return value===
The root directory of the path.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::path p = fs::current_path();
    
    std::cout &lt;&lt; &quot;The current path &quot; &lt;&lt; p &lt;&lt; &quot; decomposes into:\n&quot;
              &lt;&lt; &quot;root name &quot; &lt;&lt; p.root_name() &lt;&lt; '\n'
              &lt;&lt; &quot;root directory &quot; &lt;&lt; p.root_directory() &lt;&lt; '\n'
              &lt;&lt; &quot;relative path &quot; &lt;&lt; p.relative_path() &lt;&lt; '\n';
}
|p=true
|output=
The current path &quot;C:\Users\abcdef\Local Settings\temp&quot; decomposes into:
root name &quot;C:&quot;
root directory &quot;\&quot;
relative path &quot;Users\abcdef\Local Settings\temp&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc root_name}}
{{dsc inc | cpp/filesystem/path/dsc root_path}}
{{dsc end}}</text>
      <sha1>ni0l0heh3s0d3j7ifbznvwccwxp08v3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/root name</title>
    <ns>0</ns>
    <id>15291</id>
    <revision>
      <id>84896</id>
      <timestamp>2016-03-22T17:57:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="740">{{cpp/filesystem/path/title|root_name}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path root_name() const;
}}
{{dcl end}}

Returns the root name of the path. If the path does not include root name, returns {{c|path()}}.

===Parameters===
(none)

===Return value===
The root name of the path.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
 
int main()
{
    std::cout &lt;&lt; &quot;Current root name is: &quot; &lt;&lt; fs::current_path().root_name() &lt;&lt; '\n';
}
|p=true
|output=
Current root name is: &quot;C:&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc root_directory}}
{{dsc inc | cpp/filesystem/path/dsc root_path}}
{{dsc end}}</text>
      <sha1>elfm2gb72d7np90llrhvd8l5c8ffz9u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/root path</title>
    <ns>0</ns>
    <id>15293</id>
    <revision>
      <id>84898</id>
      <timestamp>2016-03-22T17:59:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="817">{{cpp/filesystem/path/title|root_path}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path root_path() const;
}}
{{dcl end}}

Returns the root path of the path. If the path does not include root path, returns {{c|path()}}.

Effectively, returns the following:
{{cc|
root_name() / root_directory()
}}

===Parameters===
(none)

===Return value===
The root path of the path.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    std::cout &lt;&lt; &quot;Current root path is: &quot; &lt;&lt; fs::current_path().root_path() &lt;&lt; '\n';
}
|p=true
|output=
Current root path is: &quot;C:\&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc root_name}}
{{dsc inc | cpp/filesystem/path/dsc root_directory}}
{{dsc end}}</text>
      <sha1>bjyyclyly6p48tld5tzn63hahe7pgkp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/stem</title>
    <ns>0</ns>
    <id>15297</id>
    <revision>
      <id>84903</id>
      <timestamp>2016-03-22T18:03:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1227">{{cpp/filesystem/path/title|stem}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
path stem() const;
}}
{{dcl end}}

Returns the filename identified by the path stripped of its extension.

Returns the substring from the beginning of {{ltt|cpp/filesystem/path/filename|filename()}} up to and not including the last period ({{ttb|.}}) character.

If the filename is one of the special filesystem components {{spar|dot}} or {{spar|dot-dot}}, or if it has no periods, the function returns the entire {{ltt|cpp/filesystem/path/filename|filename()}}.

===Parameters===
(none)

===Return value===
The stem of the filename identified by the path.

===Exceptions===
(none)

===Example===
{{example 
| code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    std::cout &lt;&lt; fs::path(&quot;/foo/bar.txt&quot;).stem() &lt;&lt; '\n'
              &lt;&lt; fs::path(&quot;/foo/.bar&quot;).stem() &lt;&lt; '\n';

    for (fs::path p = &quot;foo.bar.baz.tar&quot;; !p.extension().empty(); p = p.stem())
        std::cout &lt;&lt; p.extension() &lt;&lt; '\n';
}
| output=
 &quot;bar&quot;
&quot;&quot;
&quot;.tar&quot;
&quot;.baz&quot;
&quot;.bar&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc filename}}
{{dsc inc | cpp/filesystem/path/dsc extension}}
{{dsc end}}</text>
      <sha1>kja2d23t1rijko8mvxksyw6fabkhxgf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/string</title>
    <ns>0</ns>
    <id>15285</id>
    <revision>
      <id>85247</id>
      <parentid>84890</parentid>
      <timestamp>2016-04-12T13:43:26Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Return value */</comment>
      <text xml:space="preserve" bytes="1241">{{cpp/filesystem/path/title|string|wstring|u8string|u16string|u32string}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt;
          class Alloc = std::allocator&lt;CharT&gt; &gt;
std::basic_string&lt;CharT,Traits,Alloc&gt;
    string( const Alloc&amp; a = Allocator() ) const;
}}
{{dcl rev begin | num=2 | since=c++17}}
{{dcl | 
std::string string() const;
}}
{{dcl |
std::wstring wstring() const;
}}
{{dcl |
std::string u8string() const;
}}
{{dcl |
std::u16string u16string() const;
}}
{{dcl |
std::u32string u32string() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the internal pathname in native pathname format, converted to specific string type. Conversion, if any, is performed as follows:
{{cpp/filesystem/path/encoding_rules}}
@1@ All memory allocations are performed by {{tt|a}}.
@2@ The result encoding in the case of {{tt|u8string()}} is always UTF-8.

===Parameters===
(none)

===Return value===
The internal pathname in native pathname format, converted to specified string type.

===Exceptions===
(none)

===Example===
{{cpp/filesystem/path/string_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc generic string}}
{{dsc end}}</text>
      <sha1>98o19h98ilgfkkrmdbqlc4g1vi0sq7w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/swap</title>
    <ns>0</ns>
    <id>15309</id>
    <revision>
      <id>91465</id>
      <parentid>84927</parentid>
      <timestamp>2017-03-31T19:45:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="494">{{cpp/filesystem/path/title|swap}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
void swap( path&amp; other );
}}
{{dcl end}}

Swaps the contents of {{c|*this}} and {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another path to exchange the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc swap2}}
{{dsc end}}</text>
      <sha1>m4zj0jaxt76a3ec2gm679c7n6f1wlrz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/swap2</title>
    <ns>0</ns>
    <id>15308</id>
    <revision>
      <id>91699</id>
      <parentid>84925</parentid>
      <timestamp>2017-03-31T19:55:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="526">{{cpp/filesystem/title | swap{{small|(std::filesystem::path)}}}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
void swap( path&amp; lhs, path&amp; rhs );
}}
{{dcl end}}

Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | paths whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/path/dsc swap}}
{{dsc end}}</text>
      <sha1>8aceik5lyokm44sj9bfsyzxd5kxxmf0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/u8path</title>
    <ns>0</ns>
    <id>15283</id>
    <revision>
      <id>86311</id>
      <parentid>84888</parentid>
      <timestamp>2016-06-27T14:24:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0392r0 each Source template parameter accepts string_view</comment>
      <text xml:space="preserve" bytes="2674">{{cpp/filesystem/title|u8path}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
template&lt; class Source &gt;
path u8path( const Source&amp; source );
}}
{{dcl | num=2 | since=c++17| 1=
template&lt; class InputIt &gt;
path u8path( InputIt first, InputIt last );
}}
{{dcl end}}

Constructs a path {{tt|p}} from a UTF-8 encoded sequence of {{c|char}}s, supplied either as an {{lc|std::string}}, or as {{lc|std::string_view}}, or as a null-terminated multibyte string, or as a [first, last) iterator pair.

* If {{tt|path::value_type}} is {{c|char}} and native encoding is UTF-8, constructs a path directly as if by {{c|path(source)}} or {{c|path(first, last)}}. Note: this is the typical situation of a POSIX system that uses Unicode, such as Linux.
* Otherwise, if {{tt|path::value_type}} is {{c|wchar_t}} and native encoding is UTF-16 (this is the situation on Windows), or if {{tt|path::value_type}} is {{c|char16_t}} (native encoding guaranteed UTF-16) or {{c|char32_t}} (native encoding guaranteed UTF-32), then first converts the UTF-8 character sequence to a temporary string {{tt|tmp}} of type {{tt|path::string_type}} and then the new path is constructed as if by {{c|path(tmp)}}
* Otherwise (for non-UTF-8 narrow character encodings and for non-UTF-16 wchar_t), first converts the UTF-8 character sequence to a temporary UTF-32-encoded string {{tt|tmp}} of type {{c|std::u32string}}, and then the new path is constructed as if by {{c|path(tmp)}} (this path is taken on a POSIX system with a non-Unicode multibyte or single-byte encoded filesystem)

===Parameters===
{{par begin}}
{{par | source | a UTF-8 encoded {{lc|std::string}}, {{lc|std::string_view}}, a pointer to a null-terminated multibyte string, or an input iterator with char value type that points to a null-terminated multibyte string }}
{{par | first, last | pair of {{concept|InputIterator}}s that specify a UTF-8 encoded character sequence}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req | The value type of {{tt|InputIt}} must be {{c|char}}}}
{{par end}}

===Return value===
The path constructed from the input string after conversion from UTF-8 to the filesystem's native character encoding.

===Exceptions===
{{cpp/filesystem/error_handling_exception_only}}

===Notes===
On systems where native path format differs from the generic path format (neither Windows nor POSIX systems are examples of such OSes), if the argument to this function is using generic format, it will be converted to native.

===Example===
{{cpp/filesystem/path/string_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc path}}
{{dsc end}}</text>
      <sha1>916nckhcsgtgbam33obhmskn8n3gbnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/path/~path</title>
    <ns>0</ns>
    <id>15321</id>
    <revision>
      <id>84952</id>
      <timestamp>2016-03-22T21:15:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="154">{{cpp/filesystem/path/title|~path}}
{{cpp/filesystem/path/navbar}}
{{dcl begin}}
{{dcl | since=c++17  |
~path();
}}
{{dcl end}}

Destroys the path object.</text>
      <sha1>a4h1wvjmcgvphvuj8uhr1yygu9arm06</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/permissions</title>
    <ns>0</ns>
    <id>15188</id>
    <revision>
      <id>84783</id>
      <timestamp>2016-03-22T13:51:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2315">{{cpp/filesystem/title|permissions}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 |1=
void permissions(const std::filesystem::path&amp; p,
                 std::filesystem::perms prms);
void permissions(const std::filesystem::path&amp; p,
                 std::filesystem::perms prms,
                 std::error_code&amp; ec);
}}
{{dcl end}}

Changes access permissions of the file to which {{tt|p}} resolves, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchmodat.html fchmodat]. Symlinks are followed if {{tt|prms::resolve_symlinks}} is set.

The effects depend on {{tt|prms}} as follows:

* If neither {{c|perms::add_perms}} nor {{c|perms::remove_perms}} is set, file permissions are set to exactly {{c|prms &amp; std::filesystem::perms::mask}} (meaning, every valid bit of {{tt|prms}} is applied) 
* If {{c|perms::add_perms}}, the file permissions are set to exactly {{c|status(p).permissions() {{!}} (prms &amp; perms::mask)}} (meaning, any valid bit that is set in {{tt|prms}}, but not in the file's current permissions is added to the file's permissions)
* If {{c|perms::remove_perms}} is set, the file permissions are set to exactly {{c|status(p).permissions() &amp; ~(prms &amp; perms::mask)}} (meaning, any valid bit that is clear in {{tt|prms}}, but set in the file's current permissions is cleared in the file's permissions)
* If both {{c|perms::add_perms}} and {{c|perms::remove_perms}} are set, error occurs

The non-throwing overload has no special action on error.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | prms | permissions to set, add, or remove }}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Notes===
Permissions may not necessarily be implemented as bits, but they are treated that way conceptually.

Some permission bits may be ignored on some systems, and changing some bits may automatically change others (e.g. on platforms without owner/group/all distinction, setting any of the three write bits set all three)

===Example===
{{cpp/filesystem/permissions_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc perms}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc end}}</text>
      <sha1>5oyrno7agpgbcf6delckaj9d949jkew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/perms</title>
    <ns>0</ns>
    <id>15226</id>
    <revision>
      <id>88044</id>
      <parentid>84828</parentid>
      <timestamp>2016-10-24T20:50:36Z</timestamp>
      <contributor>
        <ip>199.201.64.130</ip>
      </contributor>
      <comment>This was added in C++17, not C++11</comment>
      <text xml:space="preserve" bytes="4284">{{cpp/filesystem/title|perms}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
enum class perms;
}}
{{dcl end}}

This type represents file access permissions. {{tt|perms}} satisfies the requirements of  {{concept|BitmaskType}} (which means the bitwise operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}} are defined for this type)

Access permissions model [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html POSIX permission bits], and any individual file permissions (as reported by {{rlp|status}}) are a combination of some of the following bits:

===Member constants===
{| class=&quot;wikitable&quot; style=&quot;text-align:left; font-size:85%; max-width:90em;&quot;
|-
! Member constant
! Value (octal)
! POSIX equivalent
! Meaning
|-
| {{tt|none}}
| {{c|0}}
|
| no permission bits are set
|-
| {{tt|owner_read}}
| {{c|0400}}
| {{c|S_IRUSR}}
| File owner has read permission
|-
| {{tt|owner_write}}
| {{c|0200}}
| {{c|S_IWUSR}}
| File owner has write permission
|-
| {{tt|owner_exec}}
| {{c|0100}}
| {{c|S_IXUSR}}
| File owner has execute/search permission
|-
| {{tt|owner_all}}
| {{c|0700}}
| {{c|S_IRWXU}}
| File owner has read, write, and execute/search permissions
Equivalent to {{c|owner_read {{!}} owner_write {{!}} owner_exec}}
|-
| {{tt|group_read}}
| {{c|040}}
| {{c|S_IRGRP}}
| The file's user group has read permission
|-
| {{tt|group_write}}
| {{c|020}}
| {{c|S_IWGRP}}
| The file's user group has write permission
|-
| {{tt|group_exec}}
| {{c|010}}
| {{c|S_IXGRP}}
| The file's user group has execute/search permission
|-
| {{tt|group_all}}
| {{c|070}}
| {{c|S_IRWXG}}
| The file's user group has read, write, and execute/search permissions
Equivalent to {{c|group_read {{!}} group_write {{!}} group_exec}}
|-
| {{tt|others_read}}
| {{c|04}}
| {{c|S_IROTH}}
| Other users have read permission
|-
| {{tt|others_write}}
| {{c|02}}
| {{c|S_IWOTH}}
| Other users have write permission
|-
| {{tt|others_exec}}
| {{c|01}}
| {{c|S_IXOTH}}
| Other users have execute/search permission
|-
| {{tt|others_all}}
| {{c|07}}
| {{c|S_IRWXO}}
| Other users have read, write, and execute/search permissions
Equivalent to {{c|others_read {{!}} others_write {{!}} others_exec}}
|-
| {{tt|all}}
| {{c|0777}}
|
| All users have read, write, and execute/search permissions
Equivalent to {{c|owner_all {{!}} group_all {{!}} others_all}}
|-
| {{tt|set_uid}}
| {{c|04000}}
| {{c|S_ISUID}}
| Set user ID to file owner user ID on execution
|-
| {{tt|set_gid}}
| {{c|02000}}
| {{c|S_ISGID}}
| Set group ID to file's user group ID on execution
|-
| {{tt|sticky_bit}}
| {{c|01000}}
| {{c|S_ISVTX}}
| Implementation-defined meaning, but POSIX XSI specifies that when set on a directory, only file owners may delete files even if the directory is writeable to others (used with {{c|/tmp}})
|-
| {{tt|mask}}
| {{c|07777}}
|
| All valid permission bits.
Equivalent to {{c|all {{!}} set_uid {{!}} set_gid {{!}} sticky_bit}}
|}

Additionally, the following constants of this type are defined, which do not represent permissions:

{| class=&quot;wikitable&quot; style=&quot;text-align:left; font-size:85%; max-width:90em;&quot;
|-
! Member constant
! Value (hex)
! Meaning
|-
| {{tt|unknown}}
| {{c|0xFFFF}}
| Unknown permissions (e.g. when {{rlp|file_status}} is created without permissions)
|-
| {{tt|add_perms}}
| {{c|0x10000}}
| Control bit that instructs {{rlp|permissions}} to add, but not clear permission bits.
|-
| {{tt|remove_perms}}
| {{c|0x20000}}
| Control bit that instructs {{rlp|permissions}} to clear, but not add permission bits
|-
| {{tt|resolve_symlinks}}
| {{c|0x40000}}
| Control bit that instructs {{rlp|permissions}} to resolve symlinks
|}

===Notes===
Permissions may not necessarily be implemented as bits, but they are treated that way conceptually.

Some permission bits may be ignored on some systems, and changing some bits may automatically change others (e.g. on platforms without owner/group/all distinction, setting any of the three write bits set all three)

===Example===
{{cpp/filesystem/permissions_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc permissions}}
{{dsc end}}</text>
      <sha1>k804gk265dqdjee3ru66ha61zdh056k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/read symlink</title>
    <ns>0</ns>
    <id>15190</id>
    <revision>
      <id>87712</id>
      <parentid>84785</parentid>
      <timestamp>2016-09-27T18:48:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typos in seealso</comment>
      <text xml:space="preserve" bytes="1538">{{cpp/filesystem/title|read_symlink}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
std::filesystem::path read_symlink(const std::filesystem::path&amp; p);
std::filesystem::path read_symlink(const std::filesystem::path&amp; p,
                                   std::error_code&amp; ec);
}}
{{dcl end}}

If the path {{tt|p}} refers to a symbolic link, returns a new path object which refers to the target of that symbolic link.

It is an error if {{tt|p}} does not refer to a symbolic link.

The non-throwing overload returns an empty path on errors.

===Parameters===
{{par begin}}
{{par | p | path to a symlink}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The target of the symlink (which may not necessarily exist)

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    // on a typical Linux system, /lib/libc.so.6 is a symlink
    fs::path p = &quot;/lib/libc.so.6&quot;;
    if(exists(p) &amp;&amp; is_symlink(p))
        std::cout &lt;&lt; p &lt;&lt; &quot; -&gt; &quot; &lt;&lt; read_symlink(p) &lt;&lt; '\n';
    else
        std::cout &lt;&lt; p &lt;&lt; &quot; does not exist or is not a symlink\n&quot;;
}
|p=true
|output=
&quot;/lib/libc.so.6&quot; -&gt; &quot;libc-2.12.so&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc create_symlink}}
{{dsc inc | cpp/filesystem/dsc copy_symlink}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc end}}</text>
      <sha1>7d4lpxcyhcs3ayd1c7vv02ddh1dcx5k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator</title>
    <ns>0</ns>
    <id>15335</id>
    <revision>
      <id>85003</id>
      <parentid>85002</parentid>
      <timestamp>2016-03-23T16:35:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="4412">{{cpp/filesystem/title|recursive_directory_iterator}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
class recursive_directory_iterator;
}}
{{dcl end}}

{{tt|recursive_directory_iterator}} is an {{concept|InputIterator}} that iterates over the {{ltt|cpp/filesystem/directory_entry|directory_entry}} elements of a directory, and, recursively, over the entries of all subdirectories. The iteration order is unspecified, except that each directory entry is visited only once.

By default, symlinks are not followed, but this can be enabled by specifying the directory option {{ltt|cpp/filesystem/directory_options|follow_directory_symlink}} at construction time.

The special pathnames {{spar|dot}} and {{spar|dot-dot}} are skipped.

If the {{tt|recursive_directory_iterator}} is advanced past the last directory entry of the top-level directory, it becomes equal to the default-constructed iterator, also known as the end iterator. Two end iterators are always equal, dereferencing or incrementing the end iterator is undefined behavior.

If a file or a directory is deleted or added to the directory tree after the recursive directory iterator has been created, it is unspecified whether the change would be observed through the iterator.

If the directory structure contains cycles, the end iterator may be unreachable.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{lc|std::filesystem::directory_entry}} }}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
{{dsc | {{tt|pointer}} | {{c|const std::filesystem::directory_entry*}} }}
{{dsc | {{tt|reference}} | {{c|const std::filesystem::directory_entry&amp;}} }}
{{dsc | {{tt|iterator_category}} | {{lc|std::input_iterator_tag}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc constructor}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc destructor}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc operator*}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc options}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc depth}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc recursion_pending}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc increment}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc pop}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc disable_recursion_pending}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc begin}}
{{dsc end}}

Additionally, {{tt|operator{{==}}}} and {{tt|operator!{{=}}}} are provided, either as members or as non-members, as required by {{concept|InputIterator}}

===Notes===
A {{tt|recursive_directory_iterator}} typically holds a reference-counted ''pointer'' (to satisfy shallow-copy semantics of {{concept|InputIterator}}) to an implementation object, which holds:
* a container (such as {{lc|std::vector}}) of non-recursive {{ltt|cpp/filesystem/directory_iterator|directory_iterator}}s that forms the recursion stack
* the recursion depth counter (accessible with {{ltt|cpp/filesystem/recursive_directory_iterator/depth|depth()}})
* the directory options used at construction (accessible with {{ltt|cpp/filesystem/recursive_directory_iterator/options|options()}})
* the pending recursion flag (accessible with {{ltt|cpp/filesystem/recursive_directory_iterator/recursion_pending|recursion_pending()}}, may be combined with the directory options to save space)

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto&amp; p: fs::recursive_directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/a/b&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/syma&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc directory_iterator}}
{{dsc inc | cpp/filesystem/dsc directory_entry}}
{{dsc inc | cpp/filesystem/dsc directory_options}}
{{dsc end}}</text>
      <sha1>14gmuw5cewup4notfyjaa9p33lpzbvc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/begin</title>
    <ns>0</ns>
    <id>15363</id>
    <revision>
      <id>91621</id>
      <parentid>85032</parentid>
      <timestamp>2017-03-31T19:52:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1554">{{cpp/filesystem/title | begin{{small|(recursive_directory_iterator)}}|end{{small|(recursive_directory_iterator)}}}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1| since=c++17 |
recursive_directory_iterator begin( recursive_directory_iterator iter );
}}
{{dcl |num=2| since=c++17 |
recursive_directory_iterator end( const recursive_directory_iterator&amp; );
}}
{{dcl end}}
@1@ Returns {{tt|iter}} unchanged
@2@ Returns a default-constructed {{ltt|cpp/filesystem/recursive_directory_iterator|recursive_directory_iterator}}, which serves as the end iterator. The argument is ignored.

These non-member functions enable the use of {{tt|recursive_directory_iterator}}s with range-based for loops.

===Parameters===
{{par begin}}
{{par | iter | a recursive_directory_iterator}}
{{par end}}

===Return value===
@1@ {{tt|iter}} unchanged
@2@ End iterator (default-constructed {{tt|recursive_directory_iterator}})

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b&quot;);
    std::ofstream(&quot;sandbox/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto&amp; p: fs::recursive_directory_iterator(&quot;sandbox&quot;))
        std::cout &lt;&lt; p &lt;&lt; '\n';
    fs::remove_all(&quot;sandbox&quot;);
}
|p=true
|output=
&quot;sandbox/a&quot;
&quot;sandbox/a/b&quot;
&quot;sandbox/file1.txt&quot;
&quot;sandbox/syma&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc begin}}
{{dsc end}}</text>
      <sha1>boohcepug25252j3mlj9msgh5zywfav</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/depth</title>
    <ns>0</ns>
    <id>15357</id>
    <revision>
      <id>85026</id>
      <timestamp>2016-03-23T18:38:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1548">{{cpp/filesystem/recursive_directory_iterator/title | depth}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
int depth() const;
}}
{{dcl end}}

Returns the number of directories from the starting directory to the currently iterated directory, i.e. the current depth of the directory hierarchy. 

The starting directory has depth of {{math|0}}, its subdirectories have depth {{math|1}}, etc.

The behavior is undefined if {{c|*this}} is the end iterator.

===Parameters===
(none)

===Return value===
Current depth of the directory hierarchy.

===Exceptions===
(none)

===Example===
{{example|this example uses iteration depth to calculate the indentation of a directory tree printout
|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b/c&quot;);
    fs::create_directories(&quot;sandbox/a/b/d/e&quot;);
    std::ofstream(&quot;sandbox/a/b/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto i = fs::recursive_directory_iterator(&quot;sandbox&quot;);
             i != fs::recursive_directory_iterator();
           ++i ) {
        std::cout &lt;&lt; std::string(i.depth(), ' ') &lt;&lt; *i;
        if(fs::is_symlink(i-&gt;symlink_status()))
            std::cout &lt;&lt; &quot; -&gt; &quot; &lt;&lt; fs::read_symlink(*i);
        std::cout &lt;&lt; '\n';
    }
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
&quot;sandbox/a&quot;
 &quot;sandbox/a/b&quot;
  &quot;sandbox/a/b/c&quot;
  &quot;sandbox/a/b/d&quot;
   &quot;sandbox/a/b/d/e&quot;
  &quot;sandbox/a/b/file1.txt&quot;
&quot;sandbox/syma&quot; -&gt; &quot;a&quot;
}}</text>
      <sha1>82x1qoodjs1wstva0liltr8mr99s9q8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/disable recursion pending</title>
    <ns>0</ns>
    <id>15362</id>
    <revision>
      <id>85031</id>
      <timestamp>2016-03-23T18:39:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2158">{{cpp/filesystem/recursive_directory_iterator/title | disable_recursion_pending}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
void disable_recursion_pending();
}}
{{dcl end}}

Disables recursion to the currently referred subdirectory, if any.

The call modifies the pending recursion flag on the iterator in such a way that the next time {{ltt|cpp/filesystem/recursive_directory_iterator/increment|increment}} is called, the iterator will advance within the current directly even if it is currently referring to a subdirectory that hasn't been visited.

The status of the pending recursion flag can be queried with {{ltt|cpp/filesystem/recursive_directory_iterator/recursion_pending|recursion_pending()}}, which is {{c|false}} after this call. It is reset back to {{c|true}} after {{ltt|cpp/filesystem/recursive_directory_iterator/increment|increment}}, and its initial value is also {{c|true}}.

The behavior is undefined if {{c|*this}} is the end iterator.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    fs::create_directories(&quot;sandbox/a/b/c&quot;);
    fs::create_directories(&quot;sandbox/a/b/d/e&quot;);
    std::ofstream(&quot;sandbox/a/b/file1.txt&quot;);
    fs::create_symlink(&quot;a&quot;, &quot;sandbox/syma&quot;);
    for(auto i = fs::recursive_directory_iterator(&quot;sandbox&quot;);
             i != fs::recursive_directory_iterator();
           ++i ) {
        std::cout &lt;&lt; std::string(i.depth(), ' ') &lt;&lt; *i;
        if(fs::is_symlink(i-&gt;symlink_status()))
            std::cout &lt;&lt; &quot; -&gt; &quot; &lt;&lt; fs::read_symlink(*i);
        std::cout &lt;&lt; '\n';

        // do not descend into &quot;b&quot;
        if(i-&gt;path().filename() == &quot;b&quot;)
            i.disable_recursion_pending();
    }
    fs::remove_all(&quot;sandbox&quot;);
}
|output=
&quot;sandbox/a&quot;
 &quot;sandbox/a/b&quot;
&quot;sandbox/syma&quot; -&gt; &quot;a&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc recursion_pending}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc increment}}
{{dsc end}}</text>
      <sha1>emtyymfcln8v123swlbe0703c0u4ihp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/increment</title>
    <ns>0</ns>
    <id>15360</id>
    <revision>
      <id>91559</id>
      <parentid>85029</parentid>
      <timestamp>2017-03-31T19:49:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1528">{{cpp/filesystem/recursive_directory_iterator/title | operator++|increment}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
recursive_directory_iterator&amp; operator++();
}}
{{dcl | since=c++17 | 1=
recursive_directory_iterator&amp; increment( std::error_code&amp; ec );
}}
{{dcl end}}

Advances the iterator to the next entry.

If there are no more entries left in the currently iterated directory, the iteration is resumed over the parent directory. The process is repeated if the parent directory has no sibling entries that can to be iterated on. If the parent of the directory hierarchy that has been recursively iterated on is reached (there are no candidate entries at {{c|1=depth() == 0)}}, {{c|*this}} is set to an end iterator.

Otherwise, if {{c|*this}} refers to a directory, it is iterated into if the following conditions are met:

* {{lc|disable_recursion_pending()}} has not been called before this increment, i.e. {{c|1=recursion_pending() == true}}.
* The directory is not a symlink or following symlinks is enabled, i.e. 
:{{cc|1=!is_symlink(this-&gt;symlink_status()) {{!!}} 
(options() &amp; directory_options::follow_directory_symlink) != 0)}}.

===Parameters===
{{par begin}}
{{par | ec | error code to store the error status to}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{lc|std::filesystem::filesystem_error}} if an error occurs. The error code is set to an appropriate error code for the error that caused the failure.

@2@ {{unreviewed noexcept}}</text>
      <sha1>sed1ldn3pfphgj0qhpgd2qol1w3czlw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/operator*</title>
    <ns>0</ns>
    <id>15355</id>
    <revision>
      <id>85024</id>
      <timestamp>2016-03-23T18:38:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="899">{{cpp/filesystem/recursive_directory_iterator/title | operator*|operator-&gt;}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1| 1=
const std::filesystem::directory_entry&amp; operator*() const;
}}
{{dcl | since=c++17 |num=2| 1=
const std::filesystem::directory_entry* operator-&gt;() const;
}}
{{dcl end}}

Accesses the pointed-to {{ltt|cpp/filesystem/directory_entry|directory_entry}}

The result of {{tt|operator*}} or {{tt|operator-&gt;}} on the end iterator is undefined behavior.

===Parameters===
(none)

===Return value===
@1@ Value of the {{ltt|cpp/filesystem/directory_entry|directory_entry}} referred to by this iterator
@2@ Pointer to the {{ltt|cpp/filesystem/directory_entry|directory_entry}} referred to by this iterator

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc operator*}}
{{dsc end}}</text>
      <sha1>jl9qje7jfw2zn2184jalun35o5q57gs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/operator=</title>
    <ns>0</ns>
    <id>15359</id>
    <revision>
      <id>85028</id>
      <timestamp>2016-03-23T18:38:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="584">{{cpp/filesystem/recursive_directory_iterator/title | operator{{=}}}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
recursive_directory_iterator&amp; operator=( const recursive_directory_iterator&amp; ) = default;
}}
{{dcl | since=c++17 | 1=
recursive_directory_iterator&amp; operator=( recursive_directory_iterator&amp;&amp; ) = default;
}}
{{dcl end}}

Assigns a recursive directory iterator.

===Parameters===
{{par begin}}
{{par | - | another directory iterator to assign }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
(none)
{{todo}}</text>
      <sha1>8x5n85r7rjv95euuq1s04r08ln3xnau</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/options</title>
    <ns>0</ns>
    <id>15356</id>
    <revision>
      <id>85025</id>
      <timestamp>2016-03-23T18:38:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="542">{{cpp/filesystem/recursive_directory_iterator/title | options}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
directory_options options() const;
}}
{{dcl end}}

Returns the options that affect the directory iteration. The options can only be supplied when constructing the directory iterator.

If the options argument was not supplied, returns {{c|options::none}}.

===Parameters===
(none)

===Return value===
The effective options that affect the directory iteration. 

===Exceptions===
(none)</text>
      <sha1>r72mti7odqlt3jrvhfhpl7q3jd367k0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/pop</title>
    <ns>0</ns>
    <id>15361</id>
    <revision>
      <id>85030</id>
      <timestamp>2016-03-23T18:38:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="472">{{cpp/filesystem/recursive_directory_iterator/title | pop}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
void pop();
}}
{{dcl end}}

Moves the iterator one level up in the directory hierarchy.

If the parent directory is outside directory hierarchy that is iterated on (i.e. {{c|1=depth() == 0}}), sets {{c|*this}} to an end directory iterator.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{todo}}</text>
      <sha1>f7epzwht2btu1vhfeldvmvb43hzjb96</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/recursion pending</title>
    <ns>0</ns>
    <id>15358</id>
    <revision>
      <id>85027</id>
      <timestamp>2016-03-23T18:38:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="665">{{cpp/filesystem/recursive_directory_iterator/title | recursion_pending}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
bool recursion_pending() const;
}}
{{dcl end}}

Returns {{c|true}} if the next increment will cause the directory currently referred to by {{c|*this}} to be iterated into.

This function returns {{c|true}} immediately after construction or an increment. Recursion can be disabled via {{lc|disable_recursion_pending()}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the next increment will iterate into the currently referred directory, {{c|false}} otherwise.

===Exceptions===
(none)</text>
      <sha1>fso1cejazo7ghvjcn8s87f8t6x0le29</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/recursive directory iterator/recursive directory iterator</title>
    <ns>0</ns>
    <id>15354</id>
    <revision>
      <id>91575</id>
      <parentid>85023</parentid>
      <timestamp>2017-03-31T19:50:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1513">{{cpp/filesystem/recursive_directory_iterator/title | recursive_directory_iterator}}
{{cpp/filesystem/recursive_directory_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17  | 1=
recursive_directory_iterator();
}}
{{dcl | num=2 | since=c++17 | 1=
recursive_directory_iterator( const recursive_directory_iterator&amp; ) = default;
}}
{{dcl | num=3 | since=c++17 | 1=
recursive_directory_iterator( recursive_directory_iterator&amp;&amp; ) = default;
}}
{{dcl | num=4 | since=c++17  | 1=
explicit recursive_directory_iterator(
  const std::filesystem::path&amp; p,
  std::filesystem::directory_options options = std::filesystem::directory_options::none );
}}
{{dcl | num=5 | since=c++17 | 1=
recursive_directory_iterator(
  const std::filesystem::path&amp; p,
  std::filesystem::directory_options options,
  std::error_code&amp; ec );
}}
{{dcl | num=6 | since=c++17 | 1=
recursive_directory_iterator( const std::filesystem::path&amp; p, std::error_code&amp; ec );
}}
{{dcl end}}

Contructs new recursive directory iterator.

@1@ Default constructor. Constructs an end iterator.

@2-3@ Default copy and move constructors.

@4-6@ Constructs a iterator that refers to the first entry in the directory that {{tt|p}} resolves to. 

{{todo|errors}}

===Parameters===
{{todo}}

===Exceptions===
@1,5,6@ {{unreviewed noexcept}}

{{todo}}

===Notes===

Recursive directory iterators do not follow directory symlinks by default. To enable this behavior, specify {{tt|directory_options::follow_directory_symlink}} among the {{tt|options}} option set.</text>
      <sha1>fzblhnttml6jak5luvg96brbh4pifeu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/relative</title>
    <ns>0</ns>
    <id>15545</id>
    <revision>
      <id>86334</id>
      <parentid>86331</parentid>
      <timestamp>2016-06-27T16:48:40Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2282">{{cpp/filesystem/title|relative|proximate}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
path relative( const std::filesystem::path&amp; p,
               std::error_code&amp; ec);
}}
{{dcl | num=2 | since=c++17 | 1=
path relative( const std::filesystem::path&amp; p,
               const std::filesystem::path&amp; base = std::filesystem::current_path());
path relative( const std::filesystem::path&amp; p,
               const std::filesystem::path&amp; base,
               std::error_code&amp; ec);
}}
{{dcl | num=3 | since=c++17 | 1=
path proximate( const std::filesystem::path&amp; p,
                std::error_code&amp; ec);
}}
{{dcl | num=4 | since=c++17 |1=
path proximate( const std::filesystem::path&amp; p,
                const std::filesystem::path&amp; base = std::filesystem::current_path());
path proximate( const std::filesystem::path&amp; p,
                const std::filesystem::path&amp; base,
                std::error_code&amp; ec);
}}
{{dcl end}}

@1@ Returns {{c|relative(p, current_path(), ec)}}
@2@ Returns {{tt|p}} made relative to {{tt|base}}. Resolves symlinks and normalizes both {{tt|p}} and {{tt|base}} before other processing. Effectively returns {{c|weakly_canonical(p).lexically_relative(weakly_canonical(base))}} or {{c|weakly_canonical(p, ec).lexically_relative(weakly_canonical(base, ec))}}, except the error code form returns {{c|path()}} at the first error occurrence, if any.
@3@ Returns {{c|proximate(p, current_path(), ec)}}
@4@ Effectively returns {{c|weakly_canonical(p).lexically_proximate(weakly_canonical(base))}} or {{c|weakly_canonical(p, ec).lexically_proximate(weakly_canonical(base, ec))}}, except the error code form returns {{c|path()}} at the first error occurrence, if any.

===Parameters===
{{par begin}}
{{par | p | an existing path}}
{{par | base | base path, against which {{tt|p}} will be made relative/proximate}}
{{par | ec | error code to store error status to}}
{{par end}}

===Return value===
@1@ p made relative against base.
@2@ p made proximate against base

===Exceptions===
{{cpp/filesystem/error_handling|p|base}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc path}}
{{dsc inc | cpp/filesystem/dsc absolute}}
{{dsc inc | cpp/filesystem/dsc canonical}}
{{dsc end}}</text>
      <sha1>5awytdvgit0nb9igmzb283vwxgx12tf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/remove</title>
    <ns>0</ns>
    <id>15191</id>
    <revision>
      <id>84786</id>
      <timestamp>2016-03-22T13:55:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2265">{{cpp/filesystem/title|remove|remove_all}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 |num=1|1=
bool remove(const std::filesystem::path&amp; p);
bool remove(const std::filesystem::path&amp; p, std::error_code&amp; ec);
}}
{{dcl | since=c++17 | num=2 |
std::uintmax_t remove_all(const std::filesystem::path&amp; p);
std::uintmax_t remove_all(const std::filesystem::path&amp; p, std::error_code&amp; ec);
}}
{{dcl end}}

@1@ The file or empty directory identified by the path {{tt|p}} is deleted as if by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/remove.html remove]. Symlinks are not followed (symlink is removed, not its target)
@2@ Deletes the contents of {{tt|p}} (if it is a directory) and the contents of all its subdirectories, recursively, then deletes {{tt|p}} itself as if by repeatedly applying the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/remove.html remove]. Symlinks are not followed (symlink is removed, not its target)

===Parameters===
{{par begin}}
{{par | p | path to delete}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
@1@ {{c|true}} if the file was deleted, {{c|false}} if it did not exist. The overload that takes {{tt|error_code&amp;}} argument returns {{c|false}} on errors.
@2@ Returns the number of files and directories that were deleted (which may be zero if {{tt|p}} did not exist to begin with). The overload that takes {{tt|error_code&amp;}} argument returns {{c|static_cast&lt;std::uintmax_t&gt;(-1)}} on error.

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Notes===
On POSIX systems, this function typically calls {{tt|unlink}} and {{tt|rmdir}} as needed, on Windows {{tt|RemoveDirectoryW}} and {{tt|DeleteFileW}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cstdint&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path dir = fs::temp_directory_path();
    fs::create_directories(dir / &quot;abcdef/example&quot;);
    std::uintmax_t n = fs::remove_all(dir / &quot;abcdef&quot;);
    std::cout &lt;&lt; &quot;Deleted &quot; &lt;&lt; n &lt;&lt; &quot; files or directories\n&quot;;
}
|p=true
|output=
Deleted 2 files or directories
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc remove}}
{{dsc end}}</text>
      <sha1>07z07kr0a40ip5x5l1k9o4bohzsinn0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/rename</title>
    <ns>0</ns>
    <id>15192</id>
    <revision>
      <id>86951</id>
      <parentid>84788</parentid>
      <timestamp>2016-07-18T18:18:06Z</timestamp>
      <contributor>
        <username>Oli</username>
        <id>1232</id>
      </contributor>
      <minor/>
      <comment>Add final ;</comment>
      <text xml:space="preserve" bytes="3709">{{cpp/filesystem/title|rename}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 |1=
void rename(const std::filesystem::path&amp; old_p,
            const std::filesystem::path&amp; new_p);
void rename(const std::filesystem::path&amp; old_p,
            const std::filesystem::path&amp; new_p,
            std::error_code&amp; ec);
}}
{{dcl end}}

Moves or renames the filesystem object identified by {{tt|old_p}} to {{tt|new_p}} as if by the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html rename]:

* If {{tt|old_p}} is a non-directory file, then {{tt|new_p}} must be one of:
:* the same file as {{tt|old_p}} or a hardlink to it: nothing is done in this case
:* existing non-directory file: {{tt|new_p}} is first deleted, then, without allowing other processes to observe {{tt|new_p}} as deleted, the pathname {{tt|new_p}} is linked to the file and {{tt|old_p}} is unlinked from the file. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
:* non-existing file in an existing directory: The pathname {{tt|new_p}} is linked to the file and {{tt|old_p}} is unlinked from the file. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
* If {{tt|old_p}} is a directory, then {{tt|new_p}} must be one of:
:* the same directory as {{tt|old_p}} or a hardlink to it: nothing is done in this case
:* existing directory: {{tt|new_p}} is deleted if empty on POSIX systems, but this may be an error on other systems. If not an error, then {{tt|new_p}} is first deleted, then, without allowing other processes to observe {{tt|new_p}} as deleted, the pathname {{tt|new_p}} is linked to the directory and {{tt|old_p}} is unlinked from the directory. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
:* non-existing directory, not ending with a directory separator, and whose parent directory exists: The pathname {{tt|new_p}} is linked to the directory and {{tt|old_p}} is unlinked from the directory. Write permissions are required to both the directory that contains {{tt|old_p}} and the directory that contains {{tt|new_p}}.
* Symlinks are not followed: if {{tt|old_p}} is a symlink, it is itself renamed, not its target. If {{tt|new_p}} is an existing symlink, it is itself erased, not its target.

Rename fails if
* {{tt|new_p}} ends with {{spar|dot}} or with {{spar|dot-dot}}
* {{tt|new_p}} names a non-existing directory ending with a directory separator
* {{tt|old_p}} is a directory which is an ancestor of {{tt|new_p}}

===Parameters===
{{par begin}}
{{par | old_p | path to move or rename}}
{{par | new_p | target path for the move/rename operation}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/filesystem/error_handling|old_p|new_p}}


===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p = fs::current_path() / &quot;sandbox&quot;;
    fs::create_directories(p/&quot;from&quot;);
    std::ofstream(p/&quot;from/file1.txt&quot;).put('a');
    fs::create_directory(p/&quot;to&quot;);

//    fs::rename(p/&quot;from/file1.txt&quot;, p/&quot;to/&quot;); // error: to is a directory
    fs::rename(p/&quot;from/file1.txt&quot;, p/&quot;to/file2.txt&quot;); // OK
//    fs::rename(p/&quot;from&quot;, p/&quot;to&quot;); // error: to is not empty
    fs::rename(p/&quot;from&quot;, p/&quot;to/subdir&quot;); // OK

    fs::remove_all(p);
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc rename}}
{{dsc inc | cpp/filesystem/dsc remove}}
{{dsc end}}</text>
      <sha1>1fzuceijnfz6bezun2omwntd84dww2u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/resize file</title>
    <ns>0</ns>
    <id>15193</id>
    <revision>
      <id>88834</id>
      <parentid>88833</parentid>
      <timestamp>2016-12-14T18:30:43Z</timestamp>
      <contributor>
        <ip>200.140.194.10</ip>
      </contributor>
      <comment>Undo revision 88833 by [[Special:Contributions/200.140.194.10|200.140.194.10]] ([[User talk:200.140.194.10|talk]])</comment>
      <text xml:space="preserve" bytes="2117">{{cpp/filesystem/title|resize_file}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 |1=
void resize_file(const std::filesystem::path&amp; p,
                 std::uintmax_t new_size);
void resize_file(const std::filesystem::path&amp; p,
                 std::uintmax_t new_size,
                 std::error_code&amp; ec);
}}
{{dcl end}}

Changes the size of the regular file named by {{tt|p}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html truncate]: if the file size was previously larger than {{tt|new_size}}, the remainder of the file is discarded. If the file was previously smaller than {{tt|new_size}}, the file size is increased and the new area appears as if zero-filled.

===Parameters===
{{par begin}}
{{par | p | path to resize}}
{{par | new_size | size that the file will now have}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Notes===
On systems that support sparse files, increasing the file size does not increase the space it occupies on the file system: space allocation takes place only when non-zero bytes are written to the file.

===Example===
{{example|demonstrates the effect of creating a sparse file on the free space
|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;fstream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    fs::path p = fs::current_path() / &quot;example.bin&quot;;
    std::ofstream(p).put('a');
    std::cout &lt;&lt; &quot;File size: &quot; &lt;&lt; std::setw(10) &lt;&lt; fs::file_size(p)
              &lt;&lt; &quot; Free space: &quot; &lt;&lt; fs::space(p).free &lt;&lt; '\n';
    fs::resize_file(p, 1024*1024*1024); // resize to 1 G
    std::cout &lt;&lt; &quot;File size: &quot; &lt;&lt; fs::file_size(p)
              &lt;&lt; &quot; Free space: &quot; &lt;&lt; fs::space(p).free &lt;&lt; '\n';
    fs::remove(p);
}
|p=true
|output=
File size:          1 Free space: 3724541952
File size: 1073741824 Free space: 3724476416
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc file_size}}
{{dsc inc | cpp/filesystem/dsc space}}
{{dsc end}}</text>
      <sha1>d6zk5sfg1lzl2k9gpuztyz3i8wbrk7y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/space</title>
    <ns>0</ns>
    <id>15194</id>
    <revision>
      <id>84791</id>
      <timestamp>2016-03-22T14:01:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1494">{{cpp/filesystem/title|space}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 |1=
std::filesystem::space_info space(const std::filesystem::path&amp; p)
std::filesystem::space_info space(const std::filesystem::path&amp; p,
                                  std::error_code&amp; ec)
}}
{{dcl end}}

Determines the information about the filesystem on which the pathname {{tt|p}} is located, as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/statvfs.html statvfs]

Populates and returns an object of type {{rlp|space_info}}, set from the members of the POSIX {{tt|struct statvfs}} as follows
* {{tt|space_info.capacity}} is set as if by {{tt|f_blocks*f_frsize}}
* {{tt|space_info.free}} is set to {{tt|f_bfree*f_frsize}}
* {{tt|space_info.available}} is set to {{tt|f_bavail*f_frsize}}
* Any member that could not be determined is set to {{c|static_cast&lt;uintmax_t&gt;(-1)}}

The non-throwing overload sets all members to {{c|static_cast&lt;uintmax_t&gt;(-1)}} on error.

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The filesystem information (a {{rlp|space_info}} object)

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Notes===
space_info.available may be less than space_info.free

===Example===
{{cpp/filesystem/space_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc space_info}}
{{dsc end}}</text>
      <sha1>9g3m9nke7ahxoly8396pvoxmrd6y6tp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/space info</title>
    <ns>0</ns>
    <id>15228</id>
    <revision>
      <id>84830</id>
      <timestamp>2016-03-22T16:07:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="720">{{cpp/filesystem/title|space_info}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 | 1=
struct space_info {
    std::uintmax_t capacity;
    std::uintmax_t free; 
    std::uintmax_t available; 
};
}}
{{dcl end}}

Represents the filesystem information as determined by {{rlp|space}}

The members have the following meaning:
* {{tt|capacity}} -- total size of the filesystem, in bytes
* {{tt|free}} -- free space on the filesystem, in bytes
* {{tt|available}} --  free space available to a non-privileged process (may be equal or less than {{tt|free}})

===Example===
{{cpp/filesystem/space_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc space}}
{{dsc end}}</text>
      <sha1>qdoc5ed3l4td387n9o34jaoc867p34v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/status</title>
    <ns>0</ns>
    <id>15195</id>
    <revision>
      <id>84800</id>
      <parentid>84792</parentid>
      <timestamp>2016-03-22T15:10:30Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3246">{{cpp/filesystem/title|status|symlink_status}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | since=c++17 |num=1|1=
std::filesystem::file_status status(const std::filesystem::path&amp; p)
std::filesystem::file_status status(const std::filesystem::path&amp; p,
                                    std::error_code&amp; ec)
}}
{{dcl | since=c++17|num=2|1=
std::filesystem::file_status symlink_status(const std::filesystem::path&amp; p)
std::filesystem::file_status symlink_status(const std::filesystem::path&amp; p,
                                            std::error_code&amp; ec)
}}
{{dcl end}}

@1@ Determines the type and attributes of the filesystem object identified by {{tt|p}} as if by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html stat] (symlinks are followed to their targets).
:* If {{tt|p}} is a regular file, returns {{c|file_status(file_type::regular)}}. 
:* If {{tt|p}} is a directory, returns {{c|file_status(file_type::directory)}}
:* If {{tt|p}} is a block special file, returns {{c|file_status(file_type::block)}}
:* If {{tt|p}} is a character special file, returns {{c|file_status(file_type::character)}}
:* If {{tt|p}} is a fifo or pipe file, returns {{c|file_status(file_type::fifo)}}
:* If {{tt|p}} is a socket, returns {{c|file_status(file_type::socket)}}
:* If {{tt|p}} does not exist, returns {{c|file_status(file_type::not_found)}} 
:* If {{tt|p}} exists but file attributes cannot be determined, e.g. due to lack of permissions, returns {{c|file_status(file_type::unknown)}}
:* If errors prevent even knowing whether {{tt|p}} exists, the non-throwing overload sets {{tt|ec}} and returns {{c|file_status(file_type::none)}}, and the throwing overload throws {{tt|filesystem_error}}
:* Otherwise, returns {{c|file_status(file_type::unknown)}}
@2@ Same as {{v|1}} except that the behavior is as if the POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/lstat.html lstat] is used (symlinks are not followed):
:* If {{tt|p}} is a symlink, returns {{c|file_status(file_type::symlink)}}

===Parameters===
{{par begin}}
{{par | p | path to examine}}
{{par | ec | out-parameter for error reporting in the non-throwing overload }}
{{par end}}

===Return value===
The file status (a {{tt|{{rlp|file_status}}}} object)

===Exceptions===
{{cpp/filesystem/error_handling|p}}

===Notes===
The information provided by this function is usually also provided as a byproduct of directory iteration, and may be obtained by the member functions of {{tt|{{rlp|directory_entry}}}}. During directory iteration, calling {{tt|status}} again is unnecessary.

===Example===
{{cpp/filesystem/status_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>2u374ujqdr8dnuu4az86yjm1amxi75r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/status known</title>
    <ns>0</ns>
    <id>15373</id>
    <revision>
      <id>91773</id>
      <parentid>90191</parentid>
      <timestamp>2017-03-31T19:57:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="856">{{cpp/filesystem/title|status_known}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
bool status_known( std::filesystem::file_status s );
}}
{{dcl end}}

Checks if the given file status is known, Equivalent to {{c|1=s.type() != file_type::none}}.

===Parameters===
{{par begin}}
{{par | s | file status to check}}
{{par end}}

===Return value===
{{c|true}} if the given file status is an unknown file status 

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Despite the name, the function checks for the file status of {{tt|file_type::none}} (meaning an error occurred), not {{tt|file_type::unknown}} (meaning file exists, but its type cannot be determined).

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/directory_entry/dsc status}}
{{dsc end}}</text>
      <sha1>cjmbqasv8c0n2y3yyyfgd2xcs3ro85m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/filesystem/temp directory path</title>
    <ns>0</ns>
    <id>15173</id>
    <revision>
      <id>84763</id>
      <timestamp>2016-03-22T13:39:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1232">{{cpp/filesystem/title|temp_directory_path}}
{{cpp/filesystem/navbar}}
{{dcl begin}}
{{dcl header | filesystem}}
{{dcl | num=1 | since=c++17 | 1=
path temp_directory_path();
path temp_directory_path( std::error_code&amp; ec );
}}
{{dcl end}}

Returns the directory location suitable for temporary files.

===Parameters===
(none)

===Return value===
A directory suitable for temporary files. The path is guaranteed to exist and to be a directory. The overload that takes {{tt|error_code&amp;}} argument returns an empty path on error.

===Exceptions===
{{cpp/filesystem/error_handling|path to be returned}}

===Notes===
On POSIX systems, the path may be the one specified in the environment variables {{tt|TMPDIR}}, {{tt|TMP}}, {{tt|TEMP}}, {{tt|TEMPDIR}}, and, if none of them are specified, the path {{c|&quot;/tmp&quot;}} is returned. 

On Windows systems, the path is typically the one returned by {{tt|GetTempPath}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;
int main()
{
    std::cout &lt;&lt; &quot;Temp directory is &quot; &lt;&lt; fs::temp_directory_path() &lt;&lt; '\n';
}
|p=true
|output=
Temp directory is &quot;C:\Windows\TEMP\&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc tmpfile}}
{{dsc end}}</text>
      <sha1>bn4o6h11ncyroqhasd4jw3j61posrvv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/functional</title>
    <ns>0</ns>
    <id>2357</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>5347</id>
      <timestamp>2011-07-26T15:27:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/functional]] to [[cpp/utility/functional]]: correct the hierarchy</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/functional/placeholders</title>
    <ns>0</ns>
    <id>2697</id>
    <redirect title="cpp/utility/functional/placeholders" />
    <revision>
      <id>10191</id>
      <timestamp>2011-08-31T22:17:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/functional/placeholders]] to [[cpp/utility/functional/placeholders]]</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[cpp/utility/functional/placeholders]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header</title>
    <ns>0</ns>
    <id>2125</id>
    <revision>
      <id>91996</id>
      <parentid>91847</parentid>
      <timestamp>2017-04-01T05:38:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="19934">{{title|C++ Standard Library header files}}
{{cpp/header/navbar}}

The interface of C++ standard library is defined by the following collection of header files

{{dsc begin}}

{{dsc h1|Utilities library}}

{{dsc|{{ttb|{{header|cstdlib}}}} |General purpose utilities: [[cpp/utility/program | program control]], [[cpp/memory/c | dynamic memory allocation]], [[cpp/numeric/random | random numbers]], [[cpp/algorithm | sort and search]] }}
{{dsc|{{ttb|{{header|csignal}}}} |[[cpp/utility/program | Functions and macro constants for signal management]]}}
{{dsc|{{ttb|{{header|csetjmp}}}} |[[cpp/utility/program/setjmp | Macro (and function) that saves (and jumps) to an execution context]]}}
{{dsc|{{ttb|{{header|cstdarg}}}} |[[cpp/utility/variadic | Handling of variable length argument lists]]}}
{{dsc|{{ttb|{{header|typeinfo}}}} |[[cpp/types | Runtime type information utilities]]}}
{{dsc|{{ttb|{{header|typeindex}}}} {{mark since c++11}}|{{lc|std::type_index}} }}
{{dsc|{{ttb|{{header|type_traits}}}} {{mark since c++11}}|[[cpp/types|Compile-time type information]] }}
{{dsc|{{ttb|{{header|bitset}}}} |{{lc|std::bitset}} class template }}
{{dsc|{{ttb|{{header|functional}}}} |[[cpp/utility/functional | Function objects]], designed for use with the [[cpp/algorithm | standard algorithms]] }}
{{dsc|{{ttb|{{header|utility}}}} |Various [[cpp/utility | utility components]]}}
{{dsc|{{ttb|{{header|ctime}}}} |[[cpp/chrono/c | C-style time/date utilites]] }}
{{dsc|{{ttb|{{header|chrono}}}} {{mark since c++11}}|[[cpp/chrono | C++ time utilites]] }}
{{dsc|{{ttb|{{header|cstddef}}}} |[[cpp/types | typedefs for types such as size_t, NULL and others]] }}
{{dsc|{{ttb|{{header|initializer_list}}}} {{mark since c++11}}|{{lc|std::initializer_list}} class template }}
{{dsc|{{ttb|{{header|tuple}}}} {{mark since c++11}}|{{lc|std::tuple}} class template }}
{{dsc|{{ttb|{{header|any}}}} {{mark since c++17}}|{{lc|std::any}} class template }}
{{dsc|{{ttb|{{header|optional}}}} {{mark since c++17}}|{{lc|std::optional}} class template }}
{{dsc|{{ttb|{{header|variant}}}} {{mark since c++17}}|{{lc|std::variant}} class template }}

{{dsc h2|Dynamic memory management}}

{{dsc|{{ttb|{{header|new}}}} |[[cpp/memory/new | Low-level memory management utilities]]}}
{{dsc|{{ttb|{{header|memory}}}} |[[cpp/memory | Higher level memory management utilities]] }}
{{dsc|{{ttb|{{header|scoped_allocator}}}} {{mark since c++11}}|[[cpp/memory/scoped_allocator_adaptor | Nested allocator class ]] }}
{{dsc|{{ttb|{{header|memory_resource}}}} {{mark since c++17}}|[[cpp/memory/memory_resource | Polymorphic allocators and memory resources ]] }}

{{dsc h2|Numeric limits}}

{{dsc|{{ttb|{{header|climits}}}} |[[cpp/types/climits | limits of integral types]]}}
{{dsc|{{ttb|{{header|cfloat}}}} |[[cpp/types/climits | limits of float types]]}}
{{dsc|{{ttb|{{header|cstdint}}}} {{mark since c++11}}| [[cpp/types/integer | fixed-size types]] and [[cpp/types/climits | limits of other types]]}}
{{dsc|{{ttb|{{header|cinttypes}}}} {{mark since c++11}} | [[cpp/types/integer | formatting macros ]], {{tt|intmax_t}} and {{tt|uintmax_t}} math and conversions }}
{{dsc|{{ttb|{{header|limits}}}} |[[cpp/types/numeric_limits | standardized way to query properties of arithmetic types]]}}

{{dsc h2|Error handling}}

{{dsc|{{ttb|{{header|exception}}}} |[[cpp/error | Exception handling utilities]]}}
{{dsc|{{ttb|{{header|stdexcept}}}} |[[cpp/error | Standard exception objects]] }}
{{dsc|{{ttb|{{header|cassert}}}} |[[cpp/error/assert | Conditionally compiled macro that compares its argument to zero]]}}
{{dsc|{{ttb|{{header|system_error}}}} {{mark since c++11}} |[[cpp/error/error_code | defines std::error_code, a platform-dependent error code]]}}
{{dsc|{{ttb|{{header|cerrno}}}} |[[cpp/error | Macro containing the last error number]]}}

{{dsc h1|Strings library}}

{{dsc|{{ttb|{{header|cctype}}}} |[[cpp/string/byte | functions to determine the type contained in character data]] }}
{{dsc|{{ttb|{{header|cwctype}}}} |[[cpp/string/wide | functions for determining the type of wide character data ]]}}
{{dsc|{{ttb|{{header|cstring}}}} |various [[cpp/string/byte | narrow character string handling functions]] }}
{{dsc|{{ttb|{{header|cwchar}}}} |various [[cpp/string/wide | wide ]] and [[cpp/string/multibyte | multibyte]] string handling functions }}
{{dsc|{{ttb|{{header|cuchar}}}} {{mark since c++11}}|C-style [[cpp/string/multibyte | Unicode character conversion functions]] }}
{{dsc|{{ttb|{{header|string}}}} |{{lc|std::basic_string}} class template }}
{{dsc|{{ttb|{{header|string_view}}}} {{mark since c++17}}|{{lc|std::basic_string_view}} class template }}

{{dsc h1|Containers library}}

{{dsc|{{ttb|{{header|array}}}} {{mark since c++11}}|{{lc|std::array}} container }}
{{dsc|{{ttb|{{header|vector}}}} |{{lc|std::vector}} container }}
{{dsc|{{ttb|{{header|deque}}}} |{{lc|std::deque}} container }}
{{dsc|{{ttb|{{header|list}}}} |{{lc|std::list}} container }}
{{dsc|{{ttb|{{header|forward_list}}}} {{mark since c++11}}|{{lc|std::forward_list}} container }}
{{dsc|{{ttb|{{header|set}}}} |{{lc|std::set}} and {{lc|std::multiset}} associative containers }}
{{dsc|{{ttb|{{header|map}}}} |{{lc|std::map}} and {{lc|std::multimap}} associative containers }}
{{dsc|{{ttb|{{header|unordered_set}}}} {{mark since c++11}} |{{lc|std::unordered_set}} and {{lc|std::unordered_multiset}} unordered associative containers }}
{{dsc|{{ttb|{{header|unordered_map}}}} {{mark since c++11}}|{{lc|std::unordered_map}} and {{lc|std::unordered_multimap}} unordered associative containers }}
{{dsc|{{ttb|{{header|stack}}}} |{{lc|std::stack}} container adaptor }}
{{dsc|{{ttb|{{header|queue}}}} |{{lc|std::queue}} and {{lc|std::priority_queue}} container adaptors }}

{{dsc h1|Algorithms library}}

{{dsc|{{ttb|{{header|algorithm}}}} |[[cpp/algorithm | Algorithms that operate on containers]] }}
{{dsc|{{ttb|{{header|execution}}}} {{mark c++17}}|Predefined execution policies for parallel versions of the algorithms }}

{{dsc h1|Iterators library}}

{{dsc|{{ttb|{{header|iterator}}}} |[[cpp/iterator | Container iterators]] }}

{{dsc h1|Numerics library}}

{{dsc|{{ttb|{{header|cmath}}}} |[[cpp/numeric/math | Common mathematics functions]] }}
{{dsc|{{ttb|{{header|complex}}}} |[[cpp/numeric/complex | Complex number type]] }}
{{dsc|{{ttb|{{header|valarray}}}} |[[cpp/numeric/valarray | Class for representing and manipulating arrays of values]] }}
{{dsc|{{ttb|{{header|random}}}} {{mark since c++11}} |[[cpp/numeric/random | Random number generators and distributions]] }}
{{dsc|{{ttb|{{header|numeric}}}} |[[cpp/numeric | Numeric operations on values in containers]] }}
{{dsc|{{ttb|{{header|ratio}}}} {{mark since c++11}}|[[cpp/numeric/ratio | Compile-time rational arithmetic]] }}
{{dsc|{{ttb|{{header|cfenv}}}} {{mark since c++11}}|[[cpp/numeric/fenv | Floating-point environment]] access functions }}

{{dsc h1|Input/output library}}

{{dsc|{{ttb|{{header|iosfwd}}}} |forward declarations of all classes in the input/output library }}
{{dsc|{{ttb|{{header|ios}}}} |{{lc|std::ios_base}} class, {{lc|std::basic_ios}} class template and several typedefs }}
{{dsc|{{ttb|{{header|istream}}}} |{{lc|std::basic_istream}} class template and several typedefs }}
{{dsc|{{ttb|{{header|ostream}}}} |{{lc|std::basic_ostream}}, {{lc|std::basic_iostream}} class templates and several typedefs }}
{{dsc|{{ttb|{{header|iostream}}}} |several standard stream objects  }}
{{dsc|{{ttb|{{header|fstream}}}} |{{lc|std::basic_fstream}}, {{lc|std::basic_ifstream}}, {{lc|std::basic_ofstream}} class templates and several typedefs }}
{{dsc|{{ttb|{{header|sstream}}}} |{{lc|std::basic_stringstream}}, {{lc|std::basic_istringstream}}, {{lc|std::basic_ostringstream}} class templates and several typedefs }}
{{dsc|{{ttb|{{header|strstream}}}}|{{c|std::strstream}}, {{c|std::istrstream}}, {{c|std::ostrstream}}{{mark deprecated}} }}
{{dsc|{{ttb|{{header|iomanip}}}} |[[cpp/io/manip | Helper functions to control the format or input and output]] }}
{{dsc|{{ttb|{{header|streambuf}}}} |{{lc|std::basic_streambuf}} class template}}
{{dsc|{{ttb|{{header|cstdio}}}} |[[cpp/io/c | C-style input-output functions]] }}

{{dsc h1|Localization library}}

{{dsc|{{ttb|{{header|locale}}}} |[[cpp/locale | Localization utilities]] }}
{{dsc|{{ttb|{{header|clocale}}}} |[[cpp/locale | C localization utilities]] }}
{{dsc|{{ttb|{{header|codecvt}}}} {{mark since c++11}} |[[cpp/locale | Unicode conversion facilities]] }}

{{dsc h1|Regular Expressions library}}

{{dsc|{{ttb|{{header|regex}}}} {{mark since c++11}}|[[cpp/regex | Classes, algorithms and iterators to support regular expression processing  ]]}}

{{dsc h1|Atomic Operations library}}

{{dsc|{{ttb|{{header|atomic}}}} {{mark since c++11}}|[[cpp/atomic | Atomic operations library]] }}

{{dsc h1|Thread support library}}

{{dsc|{{ttb|{{header|thread}}}} {{mark since c++11}}|{{lc|std::thread}} class and [[cpp/thread | supporting functions]] }}
{{dsc|{{ttb|{{header|mutex}}}} {{mark since c++11}}|[[cpp/thread | mutual exclusion primitives]] }}
{{dsc|{{ttb|{{header|shared_mutex}}}} {{mark since c++14}}|[[cpp/thread | shared mutual exclusion primitives]] }}
{{dsc|{{ttb|{{header|future}}}} {{mark since c++11}}|[[cpp/thread | primitives for asynchronous computations]]}}
{{dsc|{{ttb|{{header|condition_variable}}}} {{mark since c++11}}|[[cpp/thread|thread waiting conditions]]}}

{{dsc h1|Filesystem library}}
{{dsc|{{ttb|{{header|filesystem}}}} {{mark since c++17}}|{{lc|std::path}} class and [[cpp/filesystem | supporting functions]] }}


{{dsc h1|Experimental libraries}}
{{dsc|{{ttb|{{header|experimental/algorithm}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] and [[cpp/experimental/parallelism | Extensions for Parallelism ]] }}
{{dsc|{{ttb|{{header|experimental/any}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/chrono}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/deque}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/execution_policy}}}} {{mark since parallelism ts}}|[[cpp/experimental/parallelism | Extensions for Parallelism ]] }}
{{dsc|{{ttb|{{header|experimental/exception_list}}}} {{mark since parallelism ts}}|[[cpp/experimental/parallelism | Extensions for Parallelism ]] }}
{{dsc|{{ttb|{{header|experimental/filesystem}}}} {{mark since fs ts}}|[[cpp/experimental/fs | Filesystem library]] }}
{{dsc|{{ttb|{{header|experimental/forward_list}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/future}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/list}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/functional}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/map}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/memory}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/memory_resource}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/numeric}}}} {{mark since parallelism ts}}|[[cpp/experimental/parallelism | Extensions for Parallelism ]] }}
{{dsc|{{ttb|{{header|experimental/optional}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/ratio}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/regex}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/set}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/string}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/string_view}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/system_error}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/tuple}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/type_traits}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/unordered_map}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/unordered_set}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/utility}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc|{{ttb|{{header|experimental/vector}}}} {{mark since libfund ts}}|[[cpp/experimental/lib_extensions | Standard libraries extensions]] }}
{{dsc end}}

===C compatibility headers===
For some of the C standard library headers of the form {{c|xxx.h}}, the C++ standard library both includes an identically-named header and another header of the form {{c|cxxx}} (all meaningful {{c|cxxx}} headers are listed above).

With the exception of {{c|complex.h}}{{mark unreviewed dr|LWG}}&lt;!--LWG 551/2536--&gt;, each {{c|xxx.h}} header included in the C++ standard library places in the global namespace each name that the corresponding {{c|cxxx}} header would have placed in the {{c|std}} namespace.

These headers are allowed to also declare the same names in the {{c|std}} namespace, and the corresponding {{c|cxxx}} headers are allowed to also declare the same names in the global namespace: including &lt;cstdlib&gt; definitely provides {{c|std::malloc}} and may also provide {{c|::malloc}}. Including &lt;stdlib.h&gt; definitely provides {{c|::malloc}} and may also provide {{c|std::malloc}}. This applies even to functions and function overloads that are not part of C standard library.

{{dsc begin}}
{{dsc|{{ttb|&amp;lt;assert.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cassert}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;ctype.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cctype}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;errno.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cerrno}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;fenv.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cfenv}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;float.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cfloat}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;inttypes.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cinttypes}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;limits.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|climits}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;locale.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|clocale}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;math.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cmath}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;setjmp.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|csetjmp}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;signal.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|csignal}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;stdarg.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstdarg}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;stddef.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstddef}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;stdint.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstdint}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;stdio.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstdio}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;stdlib.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstdlib}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;string.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstring}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;time.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|ctime}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;uchar.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cuchar}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;wchar.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cwchar}} is placed in global namespace }}
{{dsc|{{ttb|&amp;lt;wctype.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cwctype}} is placed in global namespace }}
{{dsc end}}

====Unsupported C headers====
The C headers {{tt|&lt;stdatomic.h&gt;}}, {{tt|&lt;stdnoreturn.h&gt;}}, and {{tt|&lt;threads.h&gt;}} are not included in C++ and have no {{c|cxxx}} equivalents.

====Empty C headers====
The headers {{tt|&lt;complex.h&gt;}}, {{tt|&lt;ccomplex&gt;}}, {{tt|&lt;tgmath.h&gt;}}, and {{tt|&lt;ctgmath&gt;}} do not contain any content from the C standard library and instead merely include other headers from the C++ standard library. The use of all these headers is deprecated in C++.

{{dsc begin}}
{{dsc|{{ttb|{{header|ccomplex}}}} {{mark since c++11}}{{mark|deprecated in C++17}} | simply includes the header {{header|complex}} }}
{{dsc|{{ttb|&amp;lt;complex.h&amp;gt;}} {{mark deprecated}} | simply includes the header {{header|complex}}{{mark unreviewed dr|LWG}}&lt;!--LWG 551/2536--&gt;}}
{{dsc|{{ttb|{{header|ctgmath}}}} {{mark since c++11}}{{mark|deprecated in C++17}} | simply includes the headers {{header|complex}} and {{header|cmath}}: the overloads equivalent to the contents of the C header {{tt|tgmath.h}} are already provided by those headers }}
{{dsc|{{ttb|&amp;lt;tgmath.h&amp;gt;}} {{mark deprecated}} | simply includes the header {{header|ctgmath}}{{mark unreviewed dr|LWG|2835}}}}
{{dsc end}}

====Meaningless C headers====
The headers {{tt|&lt;ciso646&gt;}}, {{tt|&lt;cstdalign&gt;}}, and {{tt|&lt;cstdbool&gt;}} are meaningless in C++ because the macros they provide in C are language keywords in C++.

{{dsc begin}}
{{dsc|{{ttb|{{header|ciso646}}}} | empty header. The macros that appear in {{tt|iso646.h}} in C are keywords in C++ }}
{{dsc|{{ttb|&amp;lt;iso646.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|ciso646}} is placed in global namespace }}
{{dsc|{{ttb|{{header|cstdalign}}}} {{mark since c++11}}{{mark|deprecated in C++17}} | defines one [[cpp/types |compatibility macro constant ]] }}
{{dsc|{{ttb|&amp;lt;stdalign.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstdalign}} is placed in global namespace }}
{{dsc|{{ttb|{{header|cstdbool}}}} {{mark since c++11}}{{mark|deprecated in C++17}} | defines one [[cpp/types |compatibility macro constant ]] }}
{{dsc|{{ttb|&amp;lt;stdbool.h&amp;gt;}} {{mark deprecated}} | behaves as if each name from {{header|cstdbool}} is placed in global namespace }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/header | C Standard Library header files}}
{{dsc end}}

[[ar:cpp/header]]
[[de:cpp/header]]
[[es:cpp/header]]
[[fr:cpp/header]]
[[it:cpp/header]]
[[ja:cpp/header]]
[[pt:cpp/header]]
[[ru:cpp/header]]
[[zh:cpp/header]]</text>
      <sha1>5zezqhe0ph4h0llni8rr1ly7uaj47cc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/algorithm</title>
    <ns>0</ns>
    <id>9750</id>
    <revision>
      <id>87312</id>
      <parentid>57426</parentid>
      <timestamp>2016-08-10T15:10:46Z</timestamp>
      <contributor>
        <username>Vladon</username>
        <id>4148</id>
      </contributor>
      <text xml:space="preserve" bytes="30938">{{cpp/header/title|algorithm}}
{{cpp/header/navbar}}

This header is part of the [[cpp/algorithm|algorithm]] library.

===Functions===
{{dsc begin}}
{{dsc h2 | Non-modifying sequence operations}}
{{dsc inc | cpp/algorithm/dsc all_any_none_of}}
{{dsc inc | cpp/algorithm/dsc for_each}}
{{dsc inc | cpp/algorithm/dsc count}}
{{dsc inc | cpp/algorithm/dsc mismatch}}
{{dsc inc | cpp/algorithm/dsc equal}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc inc | cpp/algorithm/dsc find_end}}
{{dsc inc | cpp/algorithm/dsc find_first_of}}
{{dsc inc | cpp/algorithm/dsc adjacent_find}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc inc | cpp/algorithm/dsc search_n}}

{{dsc h2 | Modifying sequence operations}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc inc | cpp/algorithm/dsc copy_n}}
{{dsc inc | cpp/algorithm/dsc copy_backward}}
{{dsc inc | cpp/algorithm/dsc move}}
{{dsc inc | cpp/algorithm/dsc move_backward}}
{{dsc inc | cpp/algorithm/dsc fill}}
{{dsc inc | cpp/algorithm/dsc fill_n}}
{{dsc inc | cpp/algorithm/dsc transform}}
{{dsc inc | cpp/algorithm/dsc generate}}
{{dsc inc | cpp/algorithm/dsc generate_n}}
{{dsc inc | cpp/algorithm/dsc remove}}
{{dsc inc | cpp/algorithm/dsc remove_copy}}
{{dsc inc | cpp/algorithm/dsc replace}}
{{dsc inc | cpp/algorithm/dsc replace_copy}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/algorithm/dsc swap_ranges}}
{{dsc inc | cpp/algorithm/dsc iter_swap}}
{{dsc inc | cpp/algorithm/dsc reverse}}
{{dsc inc | cpp/algorithm/dsc reverse_copy}}
{{dsc inc | cpp/algorithm/dsc rotate}}
{{dsc inc | cpp/algorithm/dsc rotate_copy}}
{{dsc inc | cpp/algorithm/dsc random_shuffle}}
{{dsc inc | cpp/algorithm/dsc unique}}
{{dsc inc | cpp/algorithm/dsc unique_copy}}

{{dsc h2 | Partitioning operations}}
{{dsc inc | cpp/algorithm/dsc is_partitioned}}
{{dsc inc | cpp/algorithm/dsc partition}}
{{dsc inc | cpp/algorithm/dsc partition_copy}}
{{dsc inc | cpp/algorithm/dsc stable_partition}}
{{dsc inc | cpp/algorithm/dsc partition_point}}

{{dsc h2 | Sorting operations (on sorted ranges)}}
{{dsc inc | cpp/algorithm/dsc is_sorted}}
{{dsc inc | cpp/algorithm/dsc is_sorted_until}}
{{dsc inc | cpp/algorithm/dsc sort}}
{{dsc inc | cpp/algorithm/dsc partial_sort}}
{{dsc inc | cpp/algorithm/dsc partial_sort_copy}}
{{dsc inc | cpp/algorithm/dsc stable_sort}}
{{dsc inc | cpp/algorithm/dsc nth_element}}

{{dsc h2 | Binary search operations (on sorted ranges)}}
{{dsc inc | cpp/algorithm/dsc lower_bound}}
{{dsc inc | cpp/algorithm/dsc upper_bound}}
{{dsc inc | cpp/algorithm/dsc binary_search}}
{{dsc inc | cpp/algorithm/dsc equal_range}}

{{dsc h2 | Set operations (on sorted ranges)}}
{{dsc inc | cpp/algorithm/dsc merge}}
{{dsc inc | cpp/algorithm/dsc inplace_merge}}
{{dsc inc | cpp/algorithm/dsc includes}}
{{dsc inc | cpp/algorithm/dsc set_difference}}
{{dsc inc | cpp/algorithm/dsc set_intersection}}
{{dsc inc | cpp/algorithm/dsc set_symmetric_difference}}
{{dsc inc | cpp/algorithm/dsc set_union}}

{{dsc h2 | Heap operations}}
{{dsc inc | cpp/algorithm/dsc is_heap}}
{{dsc inc | cpp/algorithm/dsc is_heap_until}}
{{dsc inc | cpp/algorithm/dsc make_heap}}
{{dsc inc | cpp/algorithm/dsc push_heap}}
{{dsc inc | cpp/algorithm/dsc pop_heap}}
{{dsc inc | cpp/algorithm/dsc sort_heap}}

{{dsc h2 | Minimum/maximum operations}}
{{dsc inc | cpp/algorithm/dsc clamp}}
{{dsc inc | cpp/algorithm/dsc max}}
{{dsc inc | cpp/algorithm/dsc max_element}}
{{dsc inc | cpp/algorithm/dsc min}}
{{dsc inc | cpp/algorithm/dsc min_element}}
{{dsc inc | cpp/algorithm/dsc minmax}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc inc | cpp/algorithm/dsc lexicographical_compare}}
{{dsc inc | cpp/algorithm/dsc is_permutation}}
{{dsc inc | cpp/algorithm/dsc next_permutation}}
{{dsc inc | cpp/algorithm/dsc prev_permutation}}
{{dsc end}}

===Synopsis===
{{source|

#include &lt;initializer_list&gt;
namespace std
{
    // non-modifying sequence operations:
    template &lt;class InputIterator, class Predicate&gt;
        bool all_of(InputIterator first, InputIterator last, Predicate pred);
    template &lt;class InputIterator, class Predicate&gt;
        bool any_of(InputIterator first, InputIterator last, Predicate pred);
    template &lt;class InputIterator, class Predicate&gt;
        bool none_of(InputIterator first, InputIterator last, Predicate pred);
        
    template&lt;class InputIterator, class Function&gt;
        Function for_each(InputIterator first, InputIterator last, Function f);
        
    template&lt;class InputIterator, class T&gt;
        InputIterator find(InputIterator first, InputIterator last,
                           const T&amp; value);
    template&lt;class InputIterator, class Predicate&gt;
        InputIterator find_if(InputIterator first, InputIterator last,
                              Predicate pred);
    template&lt;class InputIterator, class Predicate&gt;
        InputIterator find_if_not(InputIterator first, InputIterator last,
                                  Predicate pred);
                                  
    template&lt;class ForwardIterator1, class ForwardIterator2&gt;
        ForwardIterator1
        find_end(ForwardIterator1 first1, ForwardIterator1 last1,
                 ForwardIterator2 first2, ForwardIterator2 last2);
    template&lt;class ForwardIterator1, class ForwardIterator2,
             class BinaryPredicate&gt;
        ForwardIterator1
        find_end(ForwardIterator1 first1, ForwardIterator1 last1,
                 ForwardIterator2 first2, ForwardIterator2 last2,
                 BinaryPredicate pred);
                 
    template&lt;class InputIterator, class ForwardIterator&gt;
        InputIterator
        find_first_of(InputIterator first1, InputIterator last1,
                      ForwardIterator first2, ForwardIterator last2);
    template&lt;class InputIterator, class ForwardIterator,
             class BinaryPredicate&gt;
        InputIterator
        find_first_of(InputIterator first1, InputIterator last1,
                      ForwardIterator first2, ForwardIterator last2,
                      BinaryPredicate pred);
                      
    template&lt;class ForwardIterator&gt;
        ForwardIterator adjacent_find(ForwardIterator first,
                                      ForwardIterator last);
    template&lt;class ForwardIterator, class BinaryPredicate&gt;
        ForwardIterator adjacent_find(ForwardIterator first,
                                      ForwardIterator last,
                                      BinaryPredicate pred);
    template&lt;class InputIterator, class T&gt;
        typename iterator_traits&lt;InputIterator&gt;::difference_type
        count(InputIterator first, InputIterator last, const T&amp; value);
    template&lt;class InputIterator, class Predicate&gt;
        typename iterator_traits&lt;InputIterator&gt;::difference_type
        count_if(InputIterator first, InputIterator last, Predicate pred);
        
    template&lt;class InputIterator1, class InputIterator2&gt;
        pair&lt;InputIterator1, InputIterator2&gt;
        mismatch(InputIterator1 first1, InputIterator1 last1,
                 InputIterator2 first2);
    template&lt;class InputIterator1, class InputIterator2, class BinaryPredicate&gt;
        pair&lt;InputIterator1, InputIterator2&gt;
        mismatch(InputIterator1 first1, InputIterator1 last1,
                 InputIterator2 first2, BinaryPredicate pred);
                 
    template&lt;class InputIterator1, class InputIterator2&gt;
        bool equal(InputIterator1 first1, InputIterator1 last1,
                   InputIterator2 first2);
    template&lt;class InputIterator1, class InputIterator2, class BinaryPredicate&gt;
        bool equal(InputIterator1 first1, InputIterator1 last1,
                   InputIterator2 first2, BinaryPredicate pred);
                   
    template&lt;class ForwardIterator1, class ForwardIterator2&gt;
        bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
                            ForwardIterator2 first2);
    template&lt;class ForwardIterator1, class ForwardIterator2,
    class BinaryPredicate&gt;
        bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
                            ForwardIterator2 first2, BinaryPredicate pred);
                            
    template&lt;class ForwardIterator1, class ForwardIterator2&gt;
        ForwardIterator1 search(
            ForwardIterator1 first1, ForwardIterator1 last1,
            ForwardIterator2 first2, ForwardIterator2 last2);
    template&lt;class ForwardIterator1, class ForwardIterator2,
             class BinaryPredicate&gt;
        ForwardIterator1 search(
            ForwardIterator1 first1, ForwardIterator1 last1,
            ForwardIterator2 first2, ForwardIterator2 last2,
            BinaryPredicate pred);
            
    template&lt;class ForwardIterator, class Size, class T&gt;
        ForwardIterator search_n(ForwardIterator first, ForwardIterator last,
                                 Size count, const T&amp; value);
    template&lt;class ForwardIterator, class Size, class T, class BinaryPredicate&gt;
        ForwardIterator1 search_n(ForwardIterator first, ForwardIterator last,
                                  Size count, const T&amp; value,
                                  BinaryPredicate pred);
                                  
    // modifying sequence operations:
    
    // copy:
    template&lt;class InputIterator, class OutputIterator&gt;
        OutputIterator copy(InputIterator first, InputIterator last,
                            OutputIterator result);
    template&lt;class InputIterator, class Size, class OutputIterator&gt;
        OutputIterator copy_n(InputIterator first, Size n,
                              OutputIterator result);
    template&lt;class InputIterator, class OutputIterator, class Predicate&gt;
        OutputIterator copy_if(InputIterator first, InputIterator last,
                               OutputIterator result, Predicate pred);
    template&lt;class BidirectionalIterator1, class BidirectionalIterator2&gt;
        BidirectionalIterator2 copy_backward(
            BidirectionalIterator1 first, BidirectionalIterator1 last,
            BidirectionalIterator2 result);
            
    // move:
    template&lt;class InputIterator, class OutputIterator&gt;
        OutputIterator move(InputIterator first, InputIterator last,
                            OutputIterator result);
    template&lt;class BidirectionalIterator1, class BidirectionalIterator2&gt;
        BidirectionalIterator2 move_backward(
            BidirectionalIterator1 first, BidirectionalIterator1 last,
            BidirectionalIterator2 result);
            
    // swap:
    template&lt;class ForwardIterator1, class ForwardIterator2&gt;
        ForwardIterator2 swap_ranges(ForwardIterator1 first1,
                                     ForwardIterator1 last1, ForwardIterator2 first2);
    template&lt;class ForwardIterator1, class ForwardIterator2&gt;
        void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
    template&lt;class InputIterator, class OutputIterator, class UnaryOperation&gt;
        OutputIterator transform(InputIterator first, InputIterator last,
                                 OutputIterator result, UnaryOperation op);
                                 
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator,
             class BinaryOperation&gt;
        OutputIterator transform(InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, OutputIterator result,
                                 BinaryOperation binary_op);
                                 
    template&lt;class ForwardIterator, class T&gt;
        void replace(ForwardIterator first, ForwardIterator last,
                     const T&amp; old_value, const T&amp; new_value);
    template&lt;class ForwardIterator, class Predicate, class T&gt;
        void replace_if(ForwardIterator first, ForwardIterator last,
                        Predicate pred, const T&amp; new_value);
    template&lt;class InputIterator, class OutputIterator, class T&gt;
        OutputIterator replace_copy(InputIterator first, InputIterator last,
                                    OutputIterator result,
                                    const T&amp; old_value, const T&amp; new_value);
    template&lt;class InputIterator, class OutputIterator, class Predicate, class T&gt;
        OutputIterator replace_copy_if(InputIterator first, InputIterator last,
                                       OutputIterator result,
                                       Predicate pred, const T&amp; new_value);
                                       
    template&lt;class ForwardIterator, class T&gt;
        void fill(ForwardIterator first, ForwardIterator last, const T&amp; value);
    template&lt;class OutputIterator, class Size, class T&gt;
        OutputIterator fill_n(OutputIterator first, Size n, const T&amp; value);
    template&lt;class ForwardIterator, class Generator&gt;
        void generate(ForwardIterator first, ForwardIterator last,
                      Generator gen);
    template&lt;class OutputIterator, class Size, class Generator&gt;
        OutputIterator generate_n(OutputIterator first, Size n, Generator gen);
        
    template&lt;class ForwardIterator, class T&gt;
        ForwardIterator remove(ForwardIterator first, ForwardIterator last,
                               const T&amp; value);
    template&lt;class ForwardIterator, class Predicate&gt;
        ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
                                  Predicate pred);
    template&lt;class InputIterator, class OutputIterator, class T&gt;
        OutputIterator remove_copy(InputIterator first, InputIterator last,
                                   OutputIterator result, const T&amp; value);
    template&lt;class InputIterator, class OutputIterator, class Predicate&gt;
        OutputIterator remove_copy_if(InputIterator first, InputIterator last,
                                      OutputIterator result, Predicate pred);
                                      
    template&lt;class ForwardIterator&gt;
        ForwardIterator unique(ForwardIterator first, ForwardIterator last);
    template&lt;class ForwardIterator, class BinaryPredicate&gt;
        ForwardIterator unique(ForwardIterator first, ForwardIterator last,
                               BinaryPredicate pred);
    template&lt;class InputIterator, class OutputIterator&gt;
        OutputIterator unique_copy(InputIterator first, InputIterator last,
                                   OutputIterator result);
    template&lt;class InputIterator, class OutputIterator, class BinaryPredicate&gt;
        OutputIterator unique_copy(InputIterator first, InputIterator last,
                                   OutputIterator result, BinaryPredicate pred);
                                   
    template&lt;class BidirectionalIterator&gt;
        void reverse(BidirectionalIterator first, BidirectionalIterator last);
    template&lt;class BidirectionalIterator, class OutputIterator&gt;
        OutputIterator reverse_copy(BidirectionalIterator first,
                                    BidirectionalIterator last,
                                    OutputIterator result);
                                    
    template&lt;class ForwardIterator&gt;
        ForwardIterator rotate(ForwardIterator first, ForwardIterator middle,
                               ForwardIterator last);
    template&lt;class ForwardIterator, class OutputIterator&gt;
        OutputIterator rotate_copy(
            ForwardIterator first, ForwardIterator middle,
            ForwardIterator last, OutputIterator result);
            
    template&lt;class RandomAccessIterator&gt;
        void random_shuffle(RandomAccessIterator first,
                            RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class RandomNumberGenerator&gt;
        void random_shuffle(RandomAccessIterator first,
                            RandomAccessIterator last,
                            RandomNumberGenerator&amp;&amp; rand);
    template&lt;class RandomAccessIterator, class UniformRandomNumberGenerator&gt;
        void shuffle(RandomAccessIterator first,
                     RandomAccessIterator last,
                     UniformRandomNumberGenerator&amp;&amp; rand);
                     
    // partitions:
    template &lt;class InputIterator, class Predicate&gt;
        bool is_partitioned(InputIterator first, InputIterator last, Predicate pred);
        
    template&lt;class ForwardIterator, class Predicate&gt;
        ForwardIterator partition(ForwardIterator first,
                                  ForwardIterator last,
                                  Predicate pred);
                                  
    template&lt;class BidirectionalIterator, class Predicate&gt;
        BidirectionalIterator stable_partition(BidirectionalIterator first,
                                               BidirectionalIterator last,
                                               Predicate pred);
                                               
    template &lt;class InputIterator, class OutputIterator1,
              class OutputIterator2, class Predicate&gt;
        pair&lt;OutputIterator1, OutputIterator2&gt;
        partition_copy(InputIterator first, InputIterator last,
                       OutputIterator1 out_true, OutputIterator2 out_false,
                       Predicate pred);
                       
    template&lt;class ForwardIterator, class Predicate&gt;
        ForwardIterator partition_point(ForwardIterator first,
                                        ForwardIterator last,
                                        Predicate pred);
                                        
    // sorting and related operations:
    
    // sorting:
    template&lt;class RandomAccessIterator&gt;
        void sort(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void sort(RandomAccessIterator first, RandomAccessIterator last,
                  Compare comp);
                  
    template&lt;class RandomAccessIterator&gt;
        void stable_sort(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void stable_sort(RandomAccessIterator first, RandomAccessIterator last,
                         Compare comp);
                         
    template&lt;class RandomAccessIterator&gt;
        void partial_sort(RandomAccessIterator first,
                          RandomAccessIterator middle,
                          RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void partial_sort(RandomAccessIterator first,
                          RandomAccessIterator middle,
                          RandomAccessIterator last, Compare comp);
    template&lt;class InputIterator, class RandomAccessIterator&gt;
        RandomAccessIterator partial_sort_copy(
            InputIterator first, InputIterator last,
            RandomAccessIterator result_first,
            RandomAccessIterator result_last);
    template&lt;class InputIterator, class RandomAccessIterator, class Compare&gt;
        RandomAccessIterator partial_sort_copy(
            InputIterator first, InputIterator last,
            RandomAccessIterator result_first,
            RandomAccessIterator result_last,
            Compare comp);
            
    template&lt;class ForwardIterator&gt;
        bool is_sorted(ForwardIterator first, ForwardIterator last);
    template&lt;class ForwardIterator, class Compare&gt;
        bool is_sorted(ForwardIterator first, ForwardIterator last,
                       Compare comp);
    template&lt;class ForwardIterator&gt;
        ForwardIterator is_sorted_until(ForwardIterator first, ForwardIterator last);
    template&lt;class ForwardIterator, class Compare&gt;
        ForwardIterator is_sorted_until(ForwardIterator first, ForwardIterator last,
                                        Compare comp);
                                        
    template&lt;class RandomAccessIterator&gt;
        void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
                         RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
                         RandomAccessIterator last, Compare comp);
    // binary search:
    template&lt;class ForwardIterator, class T&gt;
        ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
                                    const T&amp; value);
    template&lt;class ForwardIterator, class T, class Compare&gt;
        ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
                                    const T&amp; value, Compare comp);
                                    
    template&lt;class ForwardIterator, class T&gt;
        ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
                                    const T&amp; value);
    template&lt;class ForwardIterator, class T, class Compare&gt;
        ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
                                    const T&amp; value, Compare comp);
                                    
    template&lt;class ForwardIterator, class T&gt;
        pair&lt;ForwardIterator, ForwardIterator&gt;
        equal_range(ForwardIterator first, ForwardIterator last,
                    const T&amp; value);
    template&lt;class ForwardIterator, class T, class Compare&gt;
        pair&lt;ForwardIterator, ForwardIterator&gt;
        equal_range(ForwardIterator first, ForwardIterator last,
                    const T&amp; value, Compare comp);
                    
    template&lt;class ForwardIterator, class T&gt;
        bool binary_search(ForwardIterator first, ForwardIterator last,
                           const T&amp; value);
    template&lt;class ForwardIterator, class T, class Compare&gt;
        bool binary_search(ForwardIterator first, ForwardIterator last,
                           const T&amp; value, Compare comp);
                       
    // merge:
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator&gt;
        OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
                             InputIterator2 first2, InputIterator2 last2,
                             OutputIterator result);
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator,
            class Compare&gt;
        OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
                             InputIterator2 first2, InputIterator2 last2,
                             OutputIterator result, Compare comp);
                             
    template&lt;class BidirectionalIterator&gt;
        void inplace_merge(BidirectionalIterator first,
                           BidirectionalIterator middle,
                           BidirectionalIterator last);
    template&lt;class BidirectionalIterator, class Compare&gt;
        void inplace_merge(BidirectionalIterator first,
                           BidirectionalIterator middle,
                           BidirectionalIterator last, Compare comp);
                       
    // set operations:
    template&lt;class InputIterator1, class InputIterator2&gt;
        bool includes(InputIterator1 first1, InputIterator1 last1,
                      InputIterator2 first2, InputIterator2 last2);
    template&lt;class InputIterator1, class InputIterator2, class Compare&gt;
        bool includes(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2, Compare comp);
            
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator&gt;
        OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2,
                                 OutputIterator result);
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator,
             class Compare&gt;
        OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2,
                                 OutputIterator result, Compare comp);
                                 
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator&gt;
        OutputIterator set_intersection(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            OutputIterator result);
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator,
             class Compare&gt;
        OutputIterator set_intersection(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            OutputIterator result, Compare comp);
            
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator&gt;
        OutputIterator set_difference(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            OutputIterator result);
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator,
             class Compare&gt;
        OutputIterator set_difference(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            OutputIterator result, Compare comp);
            
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator&gt;
        OutputIterator set_symmetric_difference(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            OutputIterator result);
    template&lt;class InputIterator1, class InputIterator2, class OutputIterator,
             class Compare&gt;
        OutputIterator set_symmetric_difference(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            OutputIterator result, Compare comp);
        
    // heap operations:
    template&lt;class RandomAccessIterator&gt;
        void push_heap(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void push_heap(RandomAccessIterator first, RandomAccessIterator last,
                       Compare comp);
    template&lt;class RandomAccessIterator&gt;
        void pop_heap(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void pop_heap(RandomAccessIterator first, RandomAccessIterator last,
                      Compare comp);
                  
    template&lt;class RandomAccessIterator&gt;
        void make_heap(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void make_heap(RandomAccessIterator first, RandomAccessIterator last,
                       Compare comp);
                   
    template&lt;class RandomAccessIterator&gt;
        void sort_heap(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        void sort_heap(RandomAccessIterator first, RandomAccessIterator last,
                       Compare comp);
                   
    template&lt;class RandomAccessIterator&gt;
        bool is_heap(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        bool is_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
    template&lt;class RandomAccessIterator&gt;
        RandomAccessIterator is_heap_until(RandomAccessIterator first, RandomAccessIterator last);
    template&lt;class RandomAccessIterator, class Compare&gt;
        RandomAccessIterator is_heap_until(RandomAccessIterator first, RandomAccessIterator last,
                                           Compare comp);
    // minimum and maximum:
    template&lt;class T&gt; const T&amp; min(const T&amp; a, const T&amp; b);
    template&lt;class T, class Compare&gt;
        const T&amp; min(const T&amp; a, const T&amp; b, Compare comp);
    template&lt;class T&gt;
        T min(initializer_list&lt;T&gt; t);
    template&lt;class T, class Compare&gt;
        T min(initializer_list&lt;T&gt; t, Compare comp);
        
    template&lt;class T&gt; const T&amp; max(const T&amp; a, const T&amp; b);
    template&lt;class T, class Compare&gt;
        const T&amp; max(const T&amp; a, const T&amp; b, Compare comp);
    template&lt;class T&gt;
        T max(initializer_list&lt;T&gt; t);
    template&lt;class T, class Compare&gt;
        T max(initializer_list&lt;T&gt; t, Compare comp);
        
    template&lt;class T&gt; pair&lt;const T&amp;, const T&amp;&gt; minmax(const T&amp; a, const T&amp; b);
    template&lt;class T, class Compare&gt;
        pair&lt;const T&amp;, const T&amp;&gt; minmax(const T&amp; a, const T&amp; b, Compare comp);
    template&lt;class T&gt;
        pair&lt;T, T&gt; minmax(initializer_list&lt;T&gt; t);
    template&lt;class T, class Compare&gt;
        pair&lt;T, T&gt; minmax(initializer_list&lt;T&gt; t, Compare comp);
        
    template&lt;class ForwardIterator&gt;
        ForwardIterator min_element(ForwardIterator first, ForwardIterator last);
    template&lt;class ForwardIterator, class Compare&gt;
        ForwardIterator min_element(ForwardIterator first, ForwardIterator last,
                                    Compare comp);
                                    
    template&lt;class ForwardIterator&gt;
        ForwardIterator max_element(ForwardIterator first, ForwardIterator last);
    template&lt;class ForwardIterator, class Compare&gt;
        ForwardIterator max_element(ForwardIterator first, ForwardIterator last,
                                    Compare comp);
                                    
    template&lt;class ForwardIterator&gt;
        pair&lt;ForwardIterator, ForwardIterator&gt;
        minmax_element(ForwardIterator first, ForwardIterator last);
    template&lt;class ForwardIterator, class Compare&gt;
        pair&lt;ForwardIterator, ForwardIterator&gt;
        minmax_element(ForwardIterator first, ForwardIterator last, Compare comp);
        
    template&lt;class InputIterator1, class InputIterator2&gt;
        bool lexicographical_compare(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2);
    template&lt;class InputIterator1, class InputIterator2, class Compare&gt;
        bool lexicographical_compare(
            InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, InputIterator2 last2,
            Compare comp);
        
    // permutations:
    template&lt;class BidirectionalIterator&gt;
        bool next_permutation(BidirectionalIterator first,
                              BidirectionalIterator last);
    template&lt;class BidirectionalIterator, class Compare&gt;
        bool next_permutation(BidirectionalIterator first,
                              BidirectionalIterator last, Compare comp);
                              
    template&lt;class BidirectionalIterator&gt;
        bool prev_permutation(BidirectionalIterator first,
                              BidirectionalIterator last);
    template&lt;class BidirectionalIterator, class Compare&gt;
        bool prev_permutation(BidirectionalIterator first,
                              BidirectionalIterator last, Compare comp);
}
 

}}</text>
      <sha1>1o59g5g0140ojhz7b3zmnnhidriq0wu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/any</title>
    <ns>0</ns>
    <id>15524</id>
    <revision>
      <id>89626</id>
      <parentid>88779</parentid>
      <timestamp>2017-01-22T21:21:58Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2251">{{cpp/header/title|any}}
{{cpp/header/navbar}}

This header is part of the [[cpp/utility|general utility]] library.

===Classes===
{{dsc begin}}
{{dsc hitem | Name | Description}}
{{dsc inc | cpp/utility/dsc any}}
{{dsc inc | cpp/utility/any/dsc bad_any_cast}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc swap2}}
{{dsc inc | cpp/utility/any/dsc any_cast}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  // class bad_any_cast
  class bad_any_cast;
  // class any
  class any;
  // non-member functions
  void swap(any&amp; x, any&amp; y) noexcept;
  template &lt;class T, class... Args&gt;
  any make_any(Args&amp;&amp; ...args);
  template &lt;class T, class U, class... Args&gt;
  any make_any(initializer_list&lt;U&gt; il, Args&amp;&amp; ...args);
  template&lt;class ValueType&gt;
  ValueType any_cast(const any&amp; operand);
  template&lt;class ValueType&gt;
  ValueType any_cast(any&amp; operand);
  template&lt;class ValueType&gt;
  ValueType any_cast(any&amp;&amp; operand);
  template&lt;class ValueType&gt;
  const ValueType* any_cast(const any* operand) noexcept;
  template&lt;class ValueType&gt;
  ValueType* any_cast(any* operand) noexcept;
}
}}

====Class {{lc|std::bad_any_cast}}====
{{source|1=
class bad_any_cast : public bad_cast {
public:
  const char* what() const noexcept override;
};
}}

====Class {{lc|std::any}}====
{{source|1=
class any {
public:
  // construction and destruction
  constexpr any() noexcept;
  any(const any&amp; other);
  any(any&amp;&amp; other) noexcept;
  template &lt;class ValueType&gt; any(ValueType&amp;&amp; value);
  template &lt;class ValueType, class... Args&gt;
  explicit any(in_place_type_t&lt;ValueType&gt;, Args&amp;&amp;...);
  template &lt;class ValueType, class U, class... Args&gt;
  explicit any(in_place_type_t&lt;ValueType&gt;, initializer_list&lt;U&gt;, Args&amp;&amp;...);
  ~any();
  // assignments
  any&amp; operator=(const any&amp; rhs);
  any&amp; operator=(any&amp;&amp; rhs) noexcept;
  template &lt;class ValueType&gt; any&amp; operator=(ValueType&amp;&amp; rhs);
  // modifiers
  template &lt;class ValueType, class... Args&gt;
  void emplace(Args&amp;&amp; ...);
  template &lt;class ValueType, class U, class... Args&gt;
  void emplace(initializer_list&lt;U&gt;, Args&amp;&amp;...);
  void reset() noexcept;
  void swap(any&amp; rhs) noexcept;
  // observers
  bool has_value() const noexcept;
  const type_info&amp; type() const noexcept;
};
}}

[[zh:cpp/header/any]]</text>
      <sha1>3szarwcwvb68tyf14v5rokq88q7n22r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/array</title>
    <ns>0</ns>
    <id>9673</id>
    <revision>
      <id>57429</id>
      <parentid>49539</parentid>
      <timestamp>2013-06-01T05:53:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="4152">{{cpp/header/title|array|{{mark since c++11}}}}
{{cpp/header/navbar}}

This header is part of the [[cpp/container|containers]] library.

{{dsc begin}}
{{dsc h1|Includes}}
{{dsc|{{header|initializer_list}}{{mark c++11}}}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc array}}
{{dsc inc | cpp/container/array/dsc tuple_size}}
{{dsc inc | cpp/container/array/dsc tuple_element}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | array}}
{{dsc inc | cpp/container/array/dsc get}}
{{dsc inc | cpp/container/dsc swap2 | array}}
{{dsc end}}

===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std {
    
    template &lt;class T, size_t N &gt; struct array;
    
    template &lt;class T, size_t N&gt;
        bool operator{{==}}(const array&lt;T,N&gt;&amp; x, const array&lt;T,N&gt;&amp; y);
    template &lt;class T, size_t N&gt;
        bool operator!{{=}}(const array&lt;T,N&gt;&amp; x, const array&lt;T,N&gt;&amp; y);
    template &lt;class T, size_t N&gt;
        bool operator&lt;(const array&lt;T,N&gt;&amp; x, const array&lt;T,N&gt;&amp; y);
    template &lt;class T, size_t N&gt;
        bool operator&gt;(const array&lt;T,N&gt;&amp; x, const array&lt;T,N&gt;&amp; y);
    template &lt;class T, size_t N&gt;
        bool operator&lt;{{=}}(const array&lt;T,N&gt;&amp; x, const array&lt;T,N&gt;&amp; y);
    template &lt;class T, size_t N&gt;
        bool operator&gt;{{=}}(const array&lt;T,N&gt;&amp; x, const array&lt;T,N&gt;&amp; y);
        
    template &lt;class T, size_t N &gt;
        void swap(array&lt;T,N&gt;&amp; x, array&lt;T,N&gt;&amp; y) noexcept(noexcept(x.swap(y)));
    
    template &lt;class T&gt; class tuple_size;
    template &lt;size_t I, class T&gt; class tuple_element;
    template &lt;class T, size_t N&gt; struct tuple_size&lt;array&lt;T, N&gt; &gt;;
    template &lt;size_t I, class T, size_t N&gt; struct tuple_element&lt;I, array&lt;T, N&gt; &gt;;
    template &lt;size_t I, class T, size_t N&gt; T&amp; get(array&lt;T, N&gt;&amp;) noexcept;
    template &lt;size_t I, class T, size_t N&gt; T&amp;&amp; get(array&lt;T, N&gt;&amp;&amp;) noexcept;
    template &lt;size_t I, class T, size_t N&gt; const T&amp; get(const array&lt;T, N&gt;&amp;) noexcept;
}

}}

====Class {{lc|std::array}}====
{{source|

template &lt;class T, size_t N &gt;
struct array {
    // types:
    typedef T&amp;                               reference;
    typedef const T&amp;                         const_reference;
    typedef /*implementation-defined*/       iterator;
    typedef /*implementation-defined*/       const_iterator;
    typedef size_t                           size_type;
    typedef ptrdiff_t                        difference_type;
    typedef T                                value_type;
    typedef T*                               pointer;
    typedef const T*                         const_pointer;
    typedef reverse_iterator&lt;iterator&gt;       reverse_iterator;
    typedef reverse_iterator&lt;const_iterator&gt; const_reverse_iterator;

    T elems[N]; // exposition only

    // no explicit construct/copy/destroy for aggregate type
    
    void fill(const T&amp; u);
    void swap(array&lt;T, N&gt;&amp;) noexcept(noexcept(swap(declval&lt;T&amp;&gt;(), declval&lt;T&amp;&gt;())));

    // iterators:
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
    
    const_iterator          cbegin() noexcept;
    const_iterator          cend() noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;

    // capacity:
    constexpr size_type size() noexcept;
    constexpr size_type max_size() noexcept;
    constexpr bool      empty() noexcept;

    // element access:
    reference       operator[](size_type n);
    const_reference operator[](size_type n) const;
    const_reference at(size_type n) const;
    reference       at(size_type n);
    reference       front();
    const_reference front() const;
    reference       back();
    const_reference back() const;
    
    T *       data() noexcept;
    const T * data() const noexcept;
};

}}
=====Note=====
The variable {{ttb|array::elems}} is only for exposition, it's not part of the interface.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/atomic</title>
    <ns>0</ns>
    <id>12858</id>
    <revision>
      <id>87462</id>
      <parentid>64001</parentid>
      <timestamp>2016-08-25T14:39:49Z</timestamp>
      <contributor>
        <ip>199.106.103.58</ip>
      </contributor>
      <text xml:space="preserve" bytes="25481">{{cpp/header/title|atomic}}
{{cpp/header/navbar}}
This header is part of the [[cpp/atomic|atomic operations]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/atomic/dsc atomic}}
{{dsc inc | cpp/atomic/dsc atomic_flag}}
{{dsc inc | cpp/atomic/dsc memory_order}}
{{dsc h1|Typedefs}}
{{dsc | {{c|std::atomic_bool}} | {{c|std::atomic&lt;bool&gt;}} }}
{{dsc | {{c|std::atomic_char}} | {{c|std::atomic&lt;char&gt;}} }}
{{dsc | {{c|std::atomic_schar}} | {{c|std::atomic&lt;signed char&gt;}} }}
{{dsc | {{c|std::atomic_uchar}} | {{c|std::atomic&lt;unsigned char&gt;}} }}
{{dsc | {{c|std::atomic_short}} | {{c|std::atomic&lt;short&gt;}} }}
{{dsc | {{c|std::atomic_ushort}} | {{c|std::atomic&lt;unsigned short&gt;}} }}
{{dsc | {{c|std::atomic_int}} | {{c|std::atomic&lt;int&gt;}} }}
{{dsc | {{c|std::atomic_uint}} | {{c|std::atomic&lt;unsigned int&gt;}} }}
{{dsc | {{c|std::atomic_long}} | {{c|std::atomic&lt;long&gt;}} }}
{{dsc | {{c|std::atomic_ulong}} | {{c|std::atomic&lt;unsigned long&gt;}} }}
{{dsc | {{c|std::atomic_llong}} | {{c|std::atomic&lt;long long&gt;}} }}
{{dsc | {{c|std::atomic_ullong}} | {{c|std::atomic&lt;unsigned long long&gt;}} }}
{{dsc | {{c|std::atomic_char16_t}} | {{c|std::atomic&lt;char16_t&gt;}} }}
{{dsc | {{c|std::atomic_char32_t}} | {{c|std::atomic&lt;char32_t&gt;}} }}
{{dsc | {{c|std::atomic_wchar_t}} | {{c|std::atomic&lt;wchar_t&gt;}} }}
{{dsc | {{c|std::atomic_int_least8_t}} | {{c|std::atomic&lt;int_least8_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least8_t}} | {{c|std::atomic&lt;uint_least8_t&gt;}} }}
{{dsc | {{c|std::atomic_int_least16_t}} | {{c|std::atomic&lt;int_least16_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least16_t}} | {{c|std::atomic&lt;uint_least16_t&gt;}} }}
{{dsc | {{c|std::atomic_int_least32_t}} | {{c|std::atomic&lt;int_least32_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least32_t}} | {{c|std::atomic&lt;uint_least32_t&gt;}} }}
{{dsc | {{c|std::atomic_int_least64_t}} | {{c|std::atomic&lt;int_least64_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_least64_t}} | {{c|std::atomic&lt;uint_least64_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast8_t}} | {{c|std::atomic&lt;int_fast8_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast8_t}} | {{c|std::atomic&lt;uint_fast8_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast16_t}} | {{c|std::atomic&lt;int_fast16_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast16_t}} | {{c|std::atomic&lt;uint_fast16_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast32_t}} | {{c|std::atomic&lt;int_fast32_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast32_t}} | {{c|std::atomic&lt;uint_fast32_t&gt;}} }}
{{dsc | {{c|std::atomic_int_fast64_t}} | {{c|std::atomic&lt;int_fast64_t&gt;}} }}
{{dsc | {{c|std::atomic_uint_fast64_t}} | {{c|std::atomic&lt;uint_fast64_t&gt;}} }}
{{dsc | {{c|std::atomic_intptr_t}} | {{c|std::atomic&lt;intptr_t&gt;}} }}
{{dsc | {{c|std::atomic_uintptr_t}} | {{c|std::atomic&lt;uintptr_t&gt;}} }}
{{dsc | {{c|std::atomic_size_t}} | {{c|std::atomic&lt;size_t&gt;}} }}
{{dsc | {{c|std::atomic_ptrdiff_t}} | {{c|std::atomic&lt;ptrdiff_t&gt;}} }}
{{dsc | {{c|std::atomic_intmax_t}} | {{c|std::atomic&lt;intmax_t&gt;}} }}
{{dsc | {{c|std::atomic_uintmax_t}} | {{c|std::atomic&lt;uintmax_t&gt;}} }}
{{dsc h1|Functions}}
{{dsc inc | cpp/atomic/dsc atomic_is_lock_free}}
{{dsc inc | cpp/atomic/dsc atomic_store}}
{{dsc inc | cpp/atomic/dsc atomic_load}}
{{dsc inc | cpp/atomic/dsc atomic_exchange}}
{{dsc inc | cpp/atomic/dsc atomic_compare_exchange}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_add}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_sub}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_and}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_or}}
{{dsc inc | cpp/atomic/dsc atomic_fetch_xor}}
{{dsc inc | cpp/atomic/dsc atomic_flag_test_and_set}}
{{dsc inc | cpp/atomic/dsc atomic_flag_clear}}
{{dsc inc | cpp/atomic/dsc atomic_init}}
{{dsc inc | cpp/atomic/dsc kill_dependency}}
{{dsc inc | cpp/atomic/dsc atomic_thread_fence}}
{{dsc inc | cpp/atomic/dsc atomic_signal_fence}}
{{dsc h1|Preprocessor macros}}
{{dsc inc | cpp/atomic/dsc ATOMIC_VAR_INIT}}
{{dsc inc | cpp/atomic/dsc ATOMIC_FLAG_INIT}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
    typedef enum memory_order {
        memory_order_relaxed,
        memory_order_consume,
        memory_order_acquire,
        memory_order_release,
        memory_order_acq_rel,
        memory_order_seq_cst
    } memory_order;

    template &lt;class T&gt;
    T kill_dependency(T y) noexcept;

    // lock-free property
    #define ATOMIC_BOOL_LOCK_FREE /*unspecified*/
    #define ATOMIC_CHAR_LOCK_FREE /*unspecified*/
    #define ATOMIC_CHAR16_T_LOCK_FREE /*unspecified*/
    #define ATOMIC_CHAR32_T_LOCK_FREE /*unspecified*/
    #define ATOMIC_WCHAR_T_LOCK_FREE /*unspecified*/
    #define ATOMIC_SHORT_LOCK_FREE /*unspecified*/
    #define ATOMIC_INT_LOCK_FREE /*unspecified*/
    #define ATOMIC_LONG_LOCK_FREE /*unspecified*/
    #define ATOMIC_LLONG_LOCK_FREE /*unspecified*/
    #define ATOMIC_POINTER_LOCK_FREE /*unspecified*/
 
    // generic atomic type
    template&lt;class T&gt; struct atomic;
    // specialization for integral types
    template&lt;&gt; struct atomic&lt;/*integral*/&gt;;
    // specialization for pointers
    template&lt;class T&gt; struct atomic&lt;T*&gt;;

    // named typedefs
    typedef atomic&lt;bool&gt; atomic_bool;
    typedef atomic&lt;char&gt; atomic_char;
    typedef atomic&lt;signed char&gt; atomic_schar;
    typedef atomic&lt;unsigned char&gt; atomic_uchar;
    typedef atomic&lt;short&gt; atomic_short;
    typedef atomic&lt;unsigned short&gt; atomic_ushort;
    typedef atomic&lt;int&gt; atomic_int;
    typedef atomic&lt;unsigned int&gt; atomic_uint;
    typedef atomic&lt;long&gt; atomic_long;
    typedef atomic&lt;unsigned long&gt; atomic_ulong;
    typedef atomic&lt;long long&gt; atomic_llong;
    typedef atomic&lt;unsigned long long&gt; atomic_ullong;
    typedef atomic&lt;char16_t&gt; atomic_char16_t;
    typedef atomic&lt;char32_t&gt; atomic_char32_t;
    typedef atomic&lt;wchar_t&gt; atomic_wchar_t;
    typedef atomic&lt;int_least8_t&gt; atomic_int_least8_t;
    typedef atomic&lt;uint_least8_t&gt; atomic_uint_least8_t;
    typedef atomic&lt;int_least16_t&gt; atomic_int_least16_t;
    typedef atomic&lt;uint_least16_t&gt; atomic_uint_least16_t;
    typedef atomic&lt;int_least32_t&gt; atomic_int_least32_t;
    typedef atomic&lt;uint_least32_t&gt; atomic_uint_least32_t;
    typedef atomic&lt;int_least64_t&gt; atomic_int_least64_t;
    typedef atomic&lt;uint_least64_t&gt; atomic_uint_least64_t;
    typedef atomic&lt;int_fast8_t&gt; atomic_int_fast8_t;
    typedef atomic&lt;uint_fast8_t&gt; atomic_uint_fast8_t;
    typedef atomic&lt;int_fast16_t&gt; atomic_int_fast16_t;
    typedef atomic&lt;uint_fast16_t&gt; atomic_uint_fast16_t;
    typedef atomic&lt;int_fast32_t&gt; atomic_int_fast32_t;
    typedef atomic&lt;uint_fast32_t&gt; atomic_uint_fast32_t;
    typedef atomic&lt;int_fast64_t&gt; atomic_int_fast64_t;
    typedef atomic&lt;uint_fast64_t&gt; atomic_uint_fast64_t;
    typedef atomic&lt;intptr_t&gt; atomic_intptr_t;
    typedef atomic&lt;uintptr_t&gt; atomic_uintptr_t;
    typedef atomic&lt;size_t&gt; atomic_size_t;
    typedef atomic&lt;ptrdiff_t&gt; atomic_ptrdiff_t;
    typedef atomic&lt;intmax_t&gt; atomic_intmax_t;
    typedef atomic&lt;uintmax_t&gt; atomic_uintmax_t;

    // general operations on atomic types
    // /*atomic-type*/ is either atomic&lt;T&gt; or one of the typedefs
    // (if it's atomic&lt;T&gt;, then template&lt;class T&gt; is implied)
    bool atomic_is_lock_free(const volatile /*atomic-type*/ *) noexcept;
    bool atomic_is_lock_free(const /*atomic-type*/ *) noexcept;
    void atomic_init(volatile /*atomic-type*/ *, T) noexcept;
    void atomic_init(/*atomic-type*/ *, T) noexcept;
    void atomic_store(volatile /*atomic-type*/ *, T) noexcept;
    void atomic_store(/*atomic-type*/ *, T) noexcept;
    void atomic_store_explicit(volatile /*atomic-type*/ *, T, memory_order) noexcept;
    void atomic_store_explicit(/*atomic-type*/ *, T, memory_order) noexcept;
    T atomic_load(const volatile /*atomic-type*/ *) noexcept;
    T atomic_load(const /*atomic-type*/ *) noexcept;
    T atomic_load_explicit(const volatile /*atomic-type*/ *, memory_order) noexcept;
    T atomic_load_explicit(const /*atomic-type*/ *, memory_order) noexcept;
    T atomic_exchange(volatile /*atomic-type*/ *, T) noexcept;
    T atomic_exchange(/*atomic-type*/ *, T) noexcept;
    T atomic_exchange_explicit(volatile /*atomic-type*/ *, T, memory_order) noexcept;
    T atomic_exchange_explicit(/*atomic-type*/ *, T, memory_order) noexcept;
    bool atomic_compare_exchange_weak(volatile /*atomic-type*/ *, T*, T) noexcept;
    bool atomic_compare_exchange_weak(/*atomic-type*/ *, T*, T) noexcept;
    bool atomic_compare_exchange_strong(volatile /*atomic-type*/ *, T*, T) noexcept;
    bool atomic_compare_exchange_strong(/*atomic-type*/ *, T*, T) noexcept;
    bool atomic_compare_exchange_weak_explicit(volatile /*atomic-type*/ *, T*, T,
                                               memory_order, memory_order) noexcept;
    bool atomic_compare_exchange_weak_explicit(/*atomic-type*/ *, T*, T.
                                               memory_order, memory_order) noexcept;
    bool atomic_compare_exchange_strong_explicit(volatile /*atomic-type*/ *, T*, T,
                                                 memory_order, memory_order) noexcept;
    bool atomic_compare_exchange_strong_explicit(/*atomic-type*/ *, T*, T,
                                                 memory_order, memory_order) noexcept;

    // templated operations on atomic types (declared, but not defined)
    template &lt;class T&gt;
    T atomic_fetch_add(volatile atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_add(atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_add_explicit(volatile atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_add_explicit(atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_sub(volatile atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_sub(atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_sub_explicit(volatile atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_sub_explicit(atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_and(volatile atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_and(atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_and_explicit(volatile atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_and_explicit(atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_or(volatile atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_or(atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_or_explicit(volatile atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_or_explicit(atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_xor(volatile atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_xor(atomic&lt;T&gt;*, T) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_xor_explicit(volatile atomic&lt;T&gt;*, T, memory_order) noexcept;
    template &lt;class T&gt;
    T atomic_fetch_xor_explicit(atomic&lt;T&gt;*, T, memory_order) noexcept;

    // arithmetic operations on atomic types
    // /*atomic-integral*/ is either atomic&lt;T&gt; or one of the typedefs
    // (if it's atomic&lt;T&gt;, then template&lt;&gt; is implied)
    /*integral*/ atomic_fetch_add(volatile /*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_add(/*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_add_explicit(volatile /*atomic-integral*/ *,
                                           /*integral*/,
                                            memory_order) noexcept;
    /*integral*/ atomic_fetch_add_explicit(/*atomic-integral*/ *,
                                           /*integral*/,
                                           memory_order) noexcept;
    /*integral*/ atomic_fetch_sub(volatile /*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_sub(/*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_sub_explicit(volatile /*atomic-integral*/ *,
                                           /*integral*/ ,
                                           memory_order) noexcept;
    /*integral*/ atomic_fetch_sub_explicit(/*atomic-integral*/ *,
                                           /*integral*/ ,
                                           memory_order) noexcept;
    /*integral*/ atomic_fetch_and(volatile /*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_and(/*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_and_explicit(volatile /*atomic-integral*/ *,
                                           /*integral*/ ,
                                           memory_order) noexcept;
    /*integral*/ atomic_fetch_and_explicit(/*atomic-integral*/ *,
                                           /*integral*/ ,
                                           memory_order) noexcept;
    /*integral*/ atomic_fetch_or(volatile /*atomic-integral*/ *,
                                 /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_or(/*atomic-integral*/ *,
                                 /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_or_explicit(volatile /*atomic-integral*/ *,
                                          /*integral*/ ,
                                          memory_order) noexcept;
    /*integral*/ atomic_fetch_or_explicit(/*atomic-integral*/ *,
                                          /*integral*/ ,
                                          memory_order) noexcept;
    /*integral*/ atomic_fetch_xor(volatile /*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_xor(/*atomic-integral*/ *,
                                  /*integral*/ ) noexcept;
    /*integral*/ atomic_fetch_xor_explicit(volatile /*atomic-integral*/ *,
                                           /*integral*/ , memory_order) noexcept;
    /*integral*/ atomic_fetch_xor_explicit(/*atomic-integral*/ *,
                                           /*integral*/ ,
                                           memory_order) noexcept;

    // partial specializations for pointers
    template &lt;class T&gt;
    T* atomic_fetch_add(volatile atomic&lt;T*&gt;*, ptrdiff_t) noexcept;
    template &lt;class T&gt;
    T* atomic_fetch_add(atomic&lt;T*&gt;*, ptrdiff_t) noexcept;
    template &lt;class T&gt;
    T* atomic_fetch_add_explicit(volatile atomic&lt;T*&gt;*,
                                 ptrdiff_t, memory_order) noexcept;
    template &lt;class T&gt;
    T* atomic_fetch_add_explicit(atomic&lt;T*&gt;*, ptrdiff_t, memory_order) noexcept;
    template &lt;class T&gt;
    T* atomic_fetch_sub(volatile atomic&lt;T*&gt;*, ptrdiff_t) noexcept;
    template &lt;class T&gt;
    T* atomic_fetch_sub(atomic&lt;T*&gt;*, ptrdiff_t) noexcept;
    template &lt;class T&gt;
    T* atomic_fetch_sub_explicit(volatile atomic&lt;T*&gt;*,
                                 ptrdiff_t, memory_order) noexcept;
    template &lt;class T&gt;
    T* atomic_fetch_sub_explicit(atomic&lt;T*&gt;*, ptrdiff_t, memory_order) noexcept;

    // initialization
    #define ATOMIC_VAR_INIT(value) /*see description*/

    // flag type and operations
    struct atomic_flag;

    bool atomic_flag_test_and_set(volatile atomic_flag*) noexcept;
    bool atomic_flag_test_and_set(atomic_flag*) noexcept;
    bool atomic_flag_test_and_set_explicit(volatile atomic_flag*,
                                           memory_order) noexcept;
    bool atomic_flag_test_and_set_explicit(atomic_flag*, memory_order) noexcept;
    void atomic_flag_clear(volatile atomic_flag*) noexcept;
    void atomic_flag_clear(atomic_flag*) noexcept;
    void atomic_flag_clear_explicit(volatile atomic_flag*, memory_order) noexcept;
    void atomic_flag_clear_explicit(atomic_flag*, memory_order) noexcept;

    #define ATOMIC_FLAG_INIT /*see description*/

    // fences
    extern &quot;C&quot; void atomic_thread_fence(memory_order) noexcept;
    extern &quot;C&quot; void atomic_signal_fence(memory_order) noexcept;
}}

====Class {{lc|std::atomic}}====
{{source|1=
template &lt;class T&gt; struct atomic {
    bool is_lock_free() const volatile noexcept;
    bool is_lock_free() const noexcept;
    void store(T, memory_order = memory_order_seq_cst) volatile noexcept;
    void store(T, memory_order = memory_order_seq_cst) noexcept;
    T load(memory_order = memory_order_seq_cst) const volatile noexcept;
    T load(memory_order = memory_order_seq_cst) const noexcept;
    operator T() const volatile noexcept;
    operator T() const noexcept;
    T exchange(T, memory_order = memory_order_seq_cst) volatile noexcept;
    T exchange(T, memory_order = memory_order_seq_cst) noexcept;
    bool compare_exchange_weak(T&amp;, T,
                               memory_order, memory_order) volatile noexcept;
    bool compare_exchange_weak(T&amp;, T,
                               memory_order, memory_order) noexcept;
    bool compare_exchange_strong(T&amp;, T,
                                 memory_order, memory_order) volatile noexcept;
    bool compare_exchange_strong(T&amp;, T,
                                 memory_order, memory_order) noexcept;
    bool compare_exchange_weak(T&amp;, T,
                               memory_order = memory_order_seq_cst) volatile noexcept;
    bool compare_exchange_weak(T&amp;, T,
                               memory_order = memory_order_seq_cst) noexcept;
    bool compare_exchange_strong(T&amp;, T,
                                 memory_order = memory_order_seq_cst) volatile noexcept;
    bool compare_exchange_strong(T&amp;, T,
                                 memory_order = memory_order_seq_cst) noexcept;

    atomic() noexcept = default;
    constexpr atomic(T) noexcept;
    atomic(const atomic&amp;) = delete;
    atomic&amp; operator=(const atomic&amp;) = delete;
    atomic&amp; operator=(const atomic&amp;) volatile = delete;
    T operator=(T) volatile noexcept;
    T operator=(T) noexcept;
};
}}

====Specialization of {{lc|std::atomic}} for integral types====
{{source|1=
template&lt;&gt; struct atomic&lt;/*integral*/&gt; {
    bool is_lock_free() const volatile noexcept;
    bool is_lock_free() const noexcept;
    void store(/*integral*/,
               memory_order = memory_order_seq_cst) volatile noexcept;
    void store(/*integral*/,
               memory_order = memory_order_seq_cst) noexcept;
    /*integral*/ load(memory_order = memory_order_seq_cst) const volatile noexcept;
    /*integral*/ load(memory_order = memory_order_seq_cst) const noexcept;
    operator /*integral*/() const volatile noexcept;
    operator /*integral*/() const noexcept;
    /*integral*/ exchange(/*integral*/,
                          memory_order = memory_order_seq_cst) volatile noexcept;
    /*integral*/ exchange(/*integral*/,
                          memory_order = memory_order_seq_cst) noexcept;
    bool compare_exchange_weak(/*integral*/&amp;, /*integral*/,
                               memory_order, memory_order) volatile noexcept;
    bool compare_exchange_weak(/*integral*/&amp;, /*integral*/,
                               memory_order, memory_order) noexcept;
    bool compare_exchange_strong(/*integral*/&amp;, /*integral*/,
                                 memory_order, memory_order) volatile noexcept;
    bool compare_exchange_strong(/*integral*/&amp;, /*integral*/,
                                 memory_order, memory_order) noexcept;
    bool compare_exchange_weak(/*integral*/&amp;, /*integral*/,
                               memory_order = memory_order_seq_cst) volatile noexcept;
    bool compare_exchange_weak(/*integral*/&amp;, /*integral*/,
                               memory_order = memory_order_seq_cst) noexcept;
    bool compare_exchange_strong(/*integral*/&amp;, /*integral*/,
                                 memory_order = memory_order_seq_cst) volatile noexcept;
    bool compare_exchange_strong(/*integral*/&amp;, /*integral*/,
                                 memory_order = memory_order_seq_cst) noexcept;
    /*integral*/ fetch_add(/*integral*/,
                           memory_order = memory_order_seq_cst) volatile noexcept;
    /*integral*/ fetch_add(/*integral*/,
                           memory_order = memory_order_seq_cst) noexcept;
    /*integral*/ fetch_sub(/*integral*/,
                           memory_order = memory_order_seq_cst) volatile noexcept;
    /*integral*/ fetch_sub(/*integral*/,
                           memory_order = memory_order_seq_cst) noexcept;
    /*integral*/ fetch_and(/*integral*/,
                           memory_order = memory_order_seq_cst) volatile noexcept;
    /*integral*/ fetch_and(/*integral*/,
                           memory_order = memory_order_seq_cst) noexcept;
    /*integral*/ fetch_or(/*integral*/,
                          memory_order = memory_order_seq_cst) volatile noexcept;
    /*integral*/ fetch_or(/*integral*/,
                          memory_order = memory_order_seq_cst) noexcept;
    /*integral*/ fetch_xor(/*integral*/,
                           memory_order = memory_order_seq_cst) volatile noexcept;
    /*integral*/ fetch_xor(/*integral*/,
                           memory_order = memory_order_seq_cst) noexcept;

    atomic() noexcept = default;
    constexpr atomic(/*integral*/) noexcept;
    atomic(const atomic&amp;) = delete;
    atomic&amp; operator=(const atomic&amp;) = delete;
    atomic&amp; operator=(const atomic&amp;) volatile = delete;
    /*integral*/ operator=(/*integral*/) volatile noexcept;
    /*integral*/ operator=(/*integral*/) noexcept;
    /*integral*/ operator++(int) volatile noexcept;
    /*integral*/ operator++(int) noexcept;
    /*integral*/ operator--(int) volatile noexcept;
    /*integral*/ operator--(int) noexcept;
    /*integral*/ operator++() volatile noexcept;
    /*integral*/ operator++() noexcept;
    /*integral*/ operator--() volatile noexcept;
    /*integral*/ operator--() noexcept;
    /*integral*/ operator+=(/*integral*/) volatile noexcept;
    /*integral*/ operator+=(/*integral*/) noexcept;
    /*integral*/ operator-=(/*integral*/) volatile noexcept;
    /*integral*/ operator-=(/*integral*/) noexcept;
    /*integral*/ operator&amp;=(/*integral*/) volatile noexcept;
    /*integral*/ operator&amp;=(/*integral*/) noexcept;
    /*integral*/ operator{{!}}=(/*integral*/) volatile noexcept;
    /*integral*/ operator{{!}}=(/*integral*/) noexcept;
    /*integral*/ operator^=(/*integral*/) volatile noexcept;
    /*integral*/ operator^=(/*integral*/) noexcept;
};
}}

====Specialization of {{lc|std::atomic}} for pointer types====
{{source|1=
template &lt;class T&gt; struct atomic&lt;T*&gt; {
    bool is_lock_free() const volatile noexcept;
    bool is_lock_free() const noexcept;
    void store(T*, memory_order = memory_order_seq_cst) volatile noexcept;
    void store(T*, memory_order = memory_order_seq_cst) noexcept;
    T* load(memory_order = memory_order_seq_cst) const volatile noexcept;
    T* load(memory_order = memory_order_seq_cst) const noexcept;
    operator T*() const volatile noexcept;
    operator T*() const noexcept;
    T* exchange(T*, memory_order = memory_order_seq_cst) volatile noexcept;
    T* exchange(T*, memory_order = memory_order_seq_cst) noexcept;
    bool compare_exchange_weak(T*&amp;, T*, memory_order, memory_order) volatile noexcept;
    bool compare_exchange_weak(T*&amp;, T*, memory_order, memory_order) noexcept;
    bool compare_exchange_strong(T*&amp;, T*, memory_order, memory_order) volatile noexcept;
    bool compare_exchange_strong(T*&amp;, T*, memory_order, memory_order) noexcept;
    bool compare_exchange_weak(T*&amp;, T*,
                               memory_order = memory_order_seq_cst) volatile noexcept;
    bool compare_exchange_weak(T*&amp;, T*,
                               memory_order = memory_order_seq_cst) noexcept;
    bool compare_exchange_strong(T*&amp;, T*,
                                 memory_order = memory_order_seq_cst) volatile noexcept;
    bool compare_exchange_strong(T*&amp;, T*,
                                 memory_order = memory_order_seq_cst) noexcept;
    T* fetch_add(ptrdiff_t, memory_order = memory_order_seq_cst) volatile noexcept;
    T* fetch_add(ptrdiff_t, memory_order = memory_order_seq_cst) noexcept;
    T* fetch_sub(ptrdiff_t, memory_order = memory_order_seq_cst) volatile noexcept;
    T* fetch_sub(ptrdiff_t, memory_order = memory_order_seq_cst) noexcept;

    atomic() noexcept = default;
    constexpr atomic(T*) noexcept;
    atomic(const atomic&amp;) = delete;
    atomic&amp; operator=(const atomic&amp;) = delete;
    atomic&amp; operator=(const atomic&amp;) volatile = delete;
    T* operator=(T*) volatile noexcept;
    T* operator=(T*) noexcept;
    T* operator++(int) volatile noexcept;
    T* operator++(int) noexcept;
    T* operator--(int) volatile noexcept;
    T* operator--(int) noexcept;
    T* operator++() volatile noexcept;
    T* operator++() noexcept;
    T* operator--() volatile noexcept;
    T* operator--() noexcept;
    T* operator+=(ptrdiff_t) volatile noexcept;
    T* operator+=(ptrdiff_t) noexcept;
    T* operator-=(ptrdiff_t) volatile noexcept;
    T* operator-=(ptrdiff_t) noexcept;
};
}}

====Class {{lc|std::atomic_flag}}====
{{source|1=
typedef struct atomic_flag {
    bool test_and_set(memory_order = memory_order_seq_cst) volatile noexcept;
    bool test_and_set(memory_order = memory_order_seq_cst) noexcept;
    void clear(memory_order = memory_order_seq_cst) volatile noexcept;
    void clear(memory_order = memory_order_seq_cst) noexcept;
    atomic_flag() noexcept = default;
    atomic_flag(const atomic_flag&amp;) = delete;
    atomic_flag&amp; operator=(const atomic_flag&amp;) = delete;
    atomic_flag&amp; operator=(const atomic_flag&amp;) volatile = delete;
} atomic_flag;
}}</text>
      <sha1>m8ilfy20zqhinqytr4ww8xhkb8pi8mf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/bitset</title>
    <ns>0</ns>
    <id>9745</id>
    <revision>
      <id>69984</id>
      <parentid>57430</parentid>
      <timestamp>2014-05-04T19:28:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix apostrophe characters</comment>
      <text xml:space="preserve" bytes="4317">{{cpp/header/title|bitset}}
{{cpp/header/navbar}}
This header is part of the [[cpp/utility|general utility]] library.

{{dsc begin}}
{{dsc h1|Includes}}
{{dsc|{{header|string}}}}
{{dsc|{{header|iosfwd}}}}
{{dsc h1|Classes}}
{{dsc inc | cpp/utility/dsc bitset}}
{{dsc inc | cpp/utility/bitset/dsc hash}}
{{dsc h1|Functions}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic2}}
{{dsc inc | cpp/utility/bitset/dsc operator_ltltgtgt2}}
{{dsc end}}

===Synopsis===
{{source|

#include &lt;string&gt;
#include &lt;iosfwd&gt; // for istream, ostream

namespace std {
    template &lt;size_t N&gt; class bitset;
    
    // bitset operators:
    template &lt;size_t N&gt;
        bitset&lt;N&gt; operator&amp;(const bitset&lt;N&gt;&amp;, const bitset&lt;N&gt;&amp;) noexcept;
    template &lt;size_t N&gt;
        bitset&lt;N&gt; operator{{!}}(const bitset&lt;N&gt;&amp;, const bitset&lt;N&gt;&amp;) noexcept;
    template &lt;size_t N&gt;
        bitset&lt;N&gt; operator^(const bitset&lt;N&gt;&amp;, const bitset&lt;N&gt;&amp;) noexcept;
    template &lt;class charT, class traits, size_t N&gt;
        basic_istream&lt;charT, traits&gt;&amp;
        operator&gt;&gt;(basic_istream&lt;charT, traits&gt;&amp; is, bitset&lt;N&gt;&amp; x);
    template &lt;class charT, class traits, size_t N&gt;
        basic_ostream&lt;charT, traits&gt;&amp;
        operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp; os, const bitset&lt;N&gt;&amp; x);
    
    // Hash support
    template &lt;class T&gt; struct hash;
    template &lt;size_t N&gt; struct hash&lt;bitset&lt;N&gt; &gt;;

}


}}


====Class {{lc|std::bitset}}====
{{source|

template&lt;size_t N&gt; class bitset {
public:
    // bit reference:
    class reference {
        friend class bitset;
        reference() noexcept;
    public:
        ~reference() noexcept;
        reference&amp; operator{{=}}(bool x) noexcept;          //  for b[i] {{=}} x;
        reference&amp; operator{{=}}(const reference&amp;) noexcept;//  for b[i] {{=}} b[j];
        bool operator~() const noexcept;                //  flips the bit
        operator bool() const noexcept;                 //  for x {{=}} b[i];
        reference&amp; flip() noexcept;                     //  for b[i].flip();

    };

    //constructors:
    constexpr bitset() noexcept;
    constexpr bitset(unsigned long long val) noexcept;
    template&lt;class charT, class traits, class Allocator&gt;
        explicit bitset(
            const basic_string&lt;charT,traits,Allocator&gt;&amp; str,
            typename basic_string&lt;charT,traits,Allocator&gt;::size_type pos {{=}} 0,
            typename basic_string&lt;charT,traits,Allocator&gt;::size_type n {{=}}
                basic_string&lt;charT,traits,Allocator&gt;::npos,
            charT zero {{=}} charT('0'), charT one {{=}} charT('1'));
    template &lt;class charT&gt;
        explicit bitset(
            const charT* str,
            typename basic_string&lt;charT&gt;::size_type n {{=}} basic_string&lt;charT&gt;::npos,
            charT zero {{=}} charT('0'), charT one {{=}} charT('1'));
        
    // bitset operations:
    bitset&lt;N&gt;&amp; operator&amp;{{=}}(const bitset&lt;N&gt;&amp; rhs) noexcept;
    bitset&lt;N&gt;&amp; operator{{!=}}(const bitset&lt;N&gt;&amp; rhs) noexcept;
    bitset&lt;N&gt;&amp; operator^{{=}}(const bitset&lt;N&gt;&amp; rhs) noexcept;
    bitset&lt;N&gt;&amp; operator&lt;&lt;{{=}}(size_t pos) noexcept;
    bitset&lt;N&gt;&amp; operator&gt;&gt;{{=}}(size_t pos) noexcept;
    bitset&lt;N&gt;&amp; set() noexcept;
    bitset&lt;N&gt;&amp; set(size_t pos, bool val {{=}} true);
    bitset&lt;N&gt;&amp; reset() noexcept;
    bitset&lt;N&gt;&amp; reset(size_t pos);
    bitset&lt;N&gt; operator~() const noexcept;
    bitset&lt;N&gt;&amp; flip() noexcept;
    bitset&lt;N&gt;&amp; flip(size_t pos);
    
    // element access:
    constexpr bool operator[](size_t pos) const; // for b[i];
    reference operator[](size_t pos); // for b[i];
    
    
    unsigned long to_ulong() const;
    unsigned long long to_ullong() const;
    template &lt;class charT {{=}} char,
            class traits {{=}} char_traits&lt;charT&gt;,
            class Allocator {{=}} allocator&lt;charT&gt; &gt;
        basic_string&lt;charT, traits, Allocator&gt;
        to_string(charT zero {{=}} charT('0'), charT one {{=}} charT('1')) const;
        
    size_t count() const noexcept;
    constexpr size_t size() noexcept;
    
    bool operator{{==}}(const bitset&lt;N&gt;&amp; rhs) const noexcept;
    bool operator!{{=}}(const bitset&lt;N&gt;&amp; rhs) const noexcept;
    
    bool test(size_t pos) const;
    bool all() const noexcept;
    bool any() const noexcept;
    bool none() const noexcept;
    
    bitset&lt;N&gt; operator&lt;&lt;(size_t pos) const noexcept;
    bitset&lt;N&gt; operator&gt;&gt;(size_t pos) const noexcept;
};


}}</text>
      <sha1>rpb7puh763f33z41z1zkqo2pdesenah</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cassert</title>
    <ns>0</ns>
    <id>9688</id>
    <revision>
      <id>57433</id>
      <parentid>49541</parentid>
      <timestamp>2013-06-01T05:53:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="207">{{cpp/header/title|cassert}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/error|error handling]] library.
===Macros===
{{dsc begin}}
{{dsc inc | cpp/error/dsc assert}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/ccomplex</title>
    <ns>0</ns>
    <id>9791</id>
    <revision>
      <id>90089</id>
      <parentid>49542</parentid>
      <timestamp>2017-02-06T06:47:06Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="165">{{cpp/header/title|ccomplex}}
{{cpp/header/navbar}}
{{cpp/header/c}}

===Includes===
{{dsc begin}}
{{dsc|{{header|complex}}}}
{{dsc end}}

[[zh:cpp/header/ccomplex]]</text>
      <sha1>0qjnq9tumnzwgn38qgo2i1gfsf8kqnd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cctype</title>
    <ns>0</ns>
    <id>9686</id>
    <revision>
      <id>57434</id>
      <parentid>49543</parentid>
      <timestamp>2013-06-01T05:53:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="791">{{cpp/header/title|cctype}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/string/byte|null-terminated byte strings]] library.

{{dsc begin}}
{{dsc h1 | Functions}}
{{dsc inc | cpp/string/byte/dsc isalnum}}
{{dsc inc | cpp/string/byte/dsc isalpha}}
{{dsc inc | cpp/string/byte/dsc islower}}
{{dsc inc | cpp/string/byte/dsc isupper}}
{{dsc inc | cpp/string/byte/dsc isdigit}}
{{dsc inc | cpp/string/byte/dsc isxdigit}}
{{dsc inc | cpp/string/byte/dsc iscntrl}}
{{dsc inc | cpp/string/byte/dsc isgraph}}
{{dsc inc | cpp/string/byte/dsc isspace}}
{{dsc inc | cpp/string/byte/dsc isblank}}
{{dsc inc | cpp/string/byte/dsc isprint}}
{{dsc inc | cpp/string/byte/dsc ispunct}}
{{dsc inc | cpp/string/byte/dsc tolower}}
{{dsc inc | cpp/string/byte/dsc toupper}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cerrno</title>
    <ns>0</ns>
    <id>9689</id>
    <revision>
      <id>90158</id>
      <parentid>90149</parentid>
      <timestamp>2017-02-07T14:11:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rv header note, but it is indeed a good point that most of the contents here are from POSIX. +Note</comment>
      <text xml:space="preserve" bytes="8191">{{cpp/header/title|cerrno}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/error|error handling]] library. 

===Macros===
{{dsc begin}}
{{dsc inc | cpp/error/dsc errno}}
{{dsc macro const | E2BIG            | nolink=true| notes={{mark c++11}}| Argument list too long }}
{{dsc macro const | EACCES           | nolink=true| notes={{mark c++11}}| Permission denied}}
{{dsc macro const | EADDRINUSE       | nolink=true| notes={{mark c++11}}| Address in use}}
{{dsc macro const | EADDRNOTAVAIL    | nolink=true| notes={{mark c++11}}| Address not available}}
{{dsc macro const | EAFNOSUPPORT     | nolink=true| notes={{mark c++11}}| Address family not supported}}
{{dsc macro const | EAGAIN           | nolink=true| notes={{mark c++11}}| Resource unavailable, try again}}
{{dsc macro const | EALREADY         | nolink=true| notes={{mark c++11}}| Connection already in progress}}
{{dsc macro const | EBADF            | nolink=true| notes={{mark c++11}}| Bad file descriptor}}
{{dsc macro const | EBADMSG          | nolink=true| notes={{mark c++11}}| Bad message}}
{{dsc macro const | EBUSY            | nolink=true| notes={{mark c++11}}| Device or resource busy}}
{{dsc macro const | ECANCELED        | nolink=true| notes={{mark c++11}}| Operation canceled}}
{{dsc macro const | ECHILD           | nolink=true| notes={{mark c++11}}| No child processes}}
{{dsc macro const | ECONNABORTED     | nolink=true| notes={{mark c++11}}| Connection aborted}}
{{dsc macro const | ECONNREFUSED     | nolink=true| notes={{mark c++11}}| Connection refused}}
{{dsc macro const | ECONNRESET       | nolink=true| notes={{mark c++11}}| Connection reset}}
{{dsc macro const | EDEADLK          | nolink=true| notes={{mark c++11}}| Resource deadlock would occur}}
{{dsc macro const | EDESTADDRREQ     | nolink=true| notes={{mark c++11}}| Destination address required}}
{{dsc macro const | EDOM             | nolink=true                      | Mathematics argument out of domain of function}}
{{dsc macro const | EEXIST           | nolink=true| notes={{mark c++11}}| File exists}}
{{dsc macro const | EFAULT           | nolink=true| notes={{mark c++11}}| Bad address}}
{{dsc macro const | EFBIG            | nolink=true| notes={{mark c++11}}| File too large}}
{{dsc macro const | EHOSTUNREACH     | nolink=true| notes={{mark c++11}}| Host is unreachable}}
{{dsc macro const | EIDRM            | nolink=true| notes={{mark c++11}}| Identifier removed}}
{{dsc macro const | EILSEQ           | nolink=true| notes={{mark c++11}}| Illegal byte sequence}}
{{dsc macro const | EINPROGRESS      | nolink=true| notes={{mark c++11}}| Operation in progress}}
{{dsc macro const | EINTR            | nolink=true| notes={{mark c++11}}| Interrupted function}}
{{dsc macro const | EINVAL           | nolink=true| notes={{mark c++11}}| Invalid argument}}
{{dsc macro const | EIO              | nolink=true| notes={{mark c++11}}| I/O error}}
{{dsc macro const | EISCONN          | nolink=true| notes={{mark c++11}}| Socket is connected}}
{{dsc macro const | EISDIR           | nolink=true| notes={{mark c++11}}| Is a directory}}
{{dsc macro const | ELOOP            | nolink=true| notes={{mark c++11}}| Too many levels of symbolic links}}
{{dsc macro const | EMFILE           | nolink=true| notes={{mark c++11}}| File descriptor value too large}}
{{dsc macro const | EMLINK           | nolink=true| notes={{mark c++11}}| Too many links}}
{{dsc macro const | EMSGSIZE         | nolink=true| notes={{mark c++11}}| Message too large}}
{{dsc macro const | ENAMETOOLONG     | nolink=true| notes={{mark c++11}}| Filename too long}}
{{dsc macro const | ENETDOWN         | nolink=true| notes={{mark c++11}}| Network is down}}
{{dsc macro const | ENETRESET        | nolink=true| notes={{mark c++11}}| Connection aborted by network}}
{{dsc macro const | ENETUNREACH      | nolink=true| notes={{mark c++11}}| Network unreachable}}
{{dsc macro const | ENFILE           | nolink=true| notes={{mark c++11}}| Too many files open in system}}
{{dsc macro const | ENOBUFS          | nolink=true| notes={{mark c++11}}| No buffer space available}}
{{dsc macro const | ENODATA          | nolink=true| notes={{mark c++11}}| No message is available on the STREAM head read queue}}
{{dsc macro const | ENODEV           | nolink=true| notes={{mark c++11}}| No such device}}
{{dsc macro const | ENOENT           | nolink=true| notes={{mark c++11}}| No such file or directory}}
{{dsc macro const | ENOEXEC          | nolink=true| notes={{mark c++11}}| Executable file format error}}
{{dsc macro const | ENOLCK           | nolink=true| notes={{mark c++11}}| No locks available}}
{{dsc macro const | ENOLINK          | nolink=true| notes={{mark c++11}}| Link has been severed}}
{{dsc macro const | ENOMEM           | nolink=true| notes={{mark c++11}}| Not enough space}}
{{dsc macro const | ENOMSG           | nolink=true| notes={{mark c++11}}| No message of the desired type}}
{{dsc macro const | ENOPROTOOPT      | nolink=true| notes={{mark c++11}}| Protocol not available}}
{{dsc macro const | ENOSPC           | nolink=true| notes={{mark c++11}}| No space left on device}}
{{dsc macro const | ENOSR            | nolink=true| notes={{mark c++11}}| No STREAM resources}}
{{dsc macro const | ENOSTR           | nolink=true| notes={{mark c++11}}| Not a STREAM}}
{{dsc macro const | ENOSYS           | nolink=true| notes={{mark c++11}}| Function not supported}}
{{dsc macro const | ENOTCONN         | nolink=true| notes={{mark c++11}}| The socket is not connected}}
{{dsc macro const | ENOTDIR          | nolink=true| notes={{mark c++11}}| Not a directory}}
{{dsc macro const | ENOTEMPTY        | nolink=true| notes={{mark c++11}}| Directory not empty}}
{{dsc macro const | ENOTRECOVERABLE  | nolink=true| notes={{mark c++11}}| State not recoverable}}
{{dsc macro const | ENOTSOCK         | nolink=true| notes={{mark c++11}}| Not a socket}}
{{dsc macro const | ENOTSUP          | nolink=true| notes={{mark c++11}}| Not supported}}
{{dsc macro const | ENOTTY           | nolink=true| notes={{mark c++11}}| Inappropriate I/O control operation}}
{{dsc macro const | ENXIO            | nolink=true| notes={{mark c++11}}| No such device or address}}
{{dsc macro const | EOPNOTSUPP       | nolink=true| notes={{mark c++11}}| Operation not supported on socket}}
{{dsc macro const | EOVERFLOW        | nolink=true| notes={{mark c++11}}| Value too large to be stored in data type}}
{{dsc macro const | EOWNERDEAD       | nolink=true| notes={{mark c++11}}| Previous owner died}}
{{dsc macro const | EPERM            | nolink=true| notes={{mark c++11}}| Operation not permitted}}
{{dsc macro const | EPIPE            | nolink=true| notes={{mark c++11}}| Broken pipe}}
{{dsc macro const | EPROTO           | nolink=true| notes={{mark c++11}}| Protocol error}}
{{dsc macro const | EPROTONOSUPPORT  | nolink=true| notes={{mark c++11}}| Protocol not supported}}
{{dsc macro const | EPROTOTYPE       | nolink=true| notes={{mark c++11}}| Protocol wrong type for socket}}
{{dsc macro const | ERANGE           | nolink=true|                       Result too large}}
{{dsc macro const | EROFS            | nolink=true| notes={{mark c++11}}| Read-only file system}}
{{dsc macro const | ESPIPE           | nolink=true| notes={{mark c++11}}| Invalid seek}}
{{dsc macro const | ESRCH            | nolink=true| notes={{mark c++11}}| No such process}}
{{dsc macro const | ETIME            | nolink=true| notes={{mark c++11}}| Stream ioctl() timeout}}
{{dsc macro const | ETIMEDOUT        | nolink=true| notes={{mark c++11}}| Connection timed out}}
{{dsc macro const | ETXTBSY          | nolink=true| notes={{mark c++11}}| Text file busy}}
{{dsc macro const | EWOULDBLOCK      | nolink=true| notes={{mark c++11}}| Operation would block}}
{{dsc macro const | EXDEV            | nolink=true| notes={{mark c++11}}| Cross-device link}}
{{dsc end}}

===Notes===
Although the header {{tt|&lt;cerrno&gt;}} is based on the C standard library header {{tt|errno.h}}, the majority of the macros defined by {{tt|&lt;cerrno&gt;}} were adopted by C++ from the POSIX standard, rather than the C standard library.

===See Also===
* [[cpp/error/errno_macros|Description for the error number values]]</text>
      <sha1>hqqkwbfym4wmi840q2j6uo9v9m8q3uo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cfenv</title>
    <ns>0</ns>
    <id>9773</id>
    <revision>
      <id>57440</id>
      <parentid>49545</parentid>
      <timestamp>2013-06-01T05:53:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1552">{{cpp/header/title|cfenv}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/numeric/fenv|floating-point environment]] library.


===Types===
{{dsc begin}}
{{dsc | {{c|fenv_t}}  | The type representing the entire floating-point environment }}
{{dsc | {{c|fexcept_t}} | The type representing all floating-point status flags collectively }}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feclearexcept}}
{{dsc inc | cpp/numeric/fenv/dsc fetestexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feraiseexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feexceptflag}}
{{dsc inc | cpp/numeric/fenv/dsc feround}}
{{dsc inc | cpp/numeric/fenv/dsc feenv}}
{{dsc inc | cpp/numeric/fenv/dsc feholdexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feupdateenv}}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc FE_exceptions}}
{{dsc inc | cpp/numeric/fenv/dsc FE_round}}
{{dsc inc | cpp/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc end}}

===Synopsis===
{{source|

namespace std {
    // types
    typedef /*object type*/ fenv_t;
    typedef /*integer type*/ fexcept_t;
    
    // functions
    int feclearexcept(int except);
    int fegetexceptflag(fexcept_t *pflag, int except);
    int feraiseexcept(int except);
    int fesetexceptflag(const fexcept_t *pflag, int except);
    int fetestexcept(int except);
    int fegetround(void);
    int fesetround(int mode);
    int fegetenv(fenv_t *penv);
    int feholdexcept(fenv_t *penv);
    int fesetenv(const fenv_t *penv);
    int feupdateenv(const fenv_t *penv);
}


}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cfloat</title>
    <ns>0</ns>
    <id>9664</id>
    <revision>
      <id>88969</id>
      <parentid>87745</parentid>
      <timestamp>2016-12-20T21:08:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+synopsis.. need to macro-ise all these..</comment>
      <text xml:space="preserve" bytes="2505">{{cpp/header/title|cfloat}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/types|type support]] library, in particular it's part of the [[cpp/types/climits|C numeric limits interface]].

===Macros===
{{dsc begin}}
{{dsc inc | cpp/types/dsc FLT_RADIX }}
{{dsc inc | cpp/types/dsc DECIMAL_DIG }}
{{dsc inc | cpp/types/dsc fp_DECIMAL_DIG}}
{{dsc inc | cpp/types/dsc fp_MIN}}
{{dsc inc | cpp/types/dsc fp_TRUE_MIN}}
{{dsc inc | cpp/types/dsc fp_MAX}}
{{dsc inc | cpp/types/dsc fp_EPSILON}}
{{dsc inc | cpp/types/dsc fp_DIG}}
{{dsc inc | cpp/types/dsc fp_MANT_DIG}}
{{dsc inc | cpp/types/dsc fp_MIN_EXP}}
{{dsc inc | cpp/types/dsc fp_MIN_10_EXP}}
{{dsc inc | cpp/types/dsc fp_MAX_EXP}}
{{dsc inc | cpp/types/dsc fp_MAX_10_EXP}}
{{dsc inc | cpp/types/dsc FLT_ROUNDS }}
{{dsc inc | cpp/types/dsc FLT_EVAL_METHOD }}
{{dsc inc | cpp/types/dsc fp_HAS_SUBNORM }}
{{dsc end}}

===Synopsis===
{{source|1=
#define FLT_ROUNDS /*see definition*/
#define FLT_EVAL_METHOD /*see definition*/
#define FLT_HAS_SUBNORM /*see definition*/
#define DBL_HAS_SUBNORM /*see definition*/
#define LDBL_HAS_SUBNORM /*see definition*/
#define FLT_RADIX /*see definition*/
#define FLT_MANT_DIG /*see definition*/
#define DBL_MANT_DIG /*see definition*/
#define LDBL_MANT_DIG /*see definition*/
#define FLT_DECIMAL_DIG /*see definition*/
#define DBL_DECIMAL_DIG /*see definition*/
#define LDBL_DECIMAL_DIG /*see definition*/
#define DECIMAL_DIG /*see definition*/
#define FLT_DIG /*see definition*/
#define DBL_DIG /*see definition*/
#define LDBL_DIG /*see definition*/
#define FLT_MIN_EXP /*see definition*/
#define DBL_MIN_EXP /*see definition*/
#define LDBL_MIN_EXP /*see definition*/
#define FLT_MIN_10_EXP /*see definition*/
#define DBL_MIN_10_EXP /*see definition*/
#define LDBL_MIN_10_EXP /*see definition*/
#define FLT_MAX_EXP /*see definition*/
#define DBL_MAX_EXP /*see definition*/
#define LDBL_MAX_EXP /*see definition*/
#define FLT_MAX_10_EXP /*see definition*/
#define DBL_MAX_10_EXP /*see definition*/
#define LDBL_MAX_10_EXP /*see definition*/
#define FLT_MAX /*see definition*/
#define DBL_MAX /*see definition*/
#define LDBL_MAX /*see definition*/
#define FLT_EPSILON /*see definition*/
#define DBL_EPSILON /*see definition*/
#define LDBL_EPSILON /*see definition*/
#define FLT_MIN /*see definition*/
#define DBL_MIN /*see definition*/
#define LDBL_MIN /*see definition*/
#define FLT_TRUE_MIN /*see definition*/
#define DBL_TRUE_MIN /*see definition*/
#define LDBL_TRUE_MIN /*see definition*/
}}</text>
      <sha1>oq01qpvrbhp06xs5vffbes1dt2n9sur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/chrono</title>
    <ns>0</ns>
    <id>9807</id>
    <revision>
      <id>88776</id>
      <parentid>81841</parentid>
      <timestamp>2016-12-11T03:24:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>n4618 update (new rounding functions, but reflashed the whole thing to be sure nothing's missed, like usings instead of typedefs), +operators to the list on the top</comment>
      <text xml:space="preserve" bytes="15795">{{cpp/header/title|chrono}}
{{cpp/header/navbar}}

This header is part of the [[cpp/chrono|date and time]] library.

===Classes===
{{dsc begin}}
{{dsc namespace | std::chrono}}
{{dsc inc | cpp/chrono/dsc duration}}
{{dsc inc | cpp/chrono/dsc system_clock}}
{{dsc inc | cpp/chrono/dsc steady_clock}}
{{dsc inc | cpp/chrono/dsc high_resolution_clock}}
{{dsc inc | cpp/chrono/dsc time_point}}
{{dsc tclass | cpp/chrono/treat_as_floating_point | indicates that a duration is convertible to duration with different tick period }}
{{dsc tclass | cpp/chrono/duration_values | constructs zero, min, and max values of a tick count of given type}}

{{dsc h2|Convenience Typedefs}}
{{dsc namespace | std::chrono}}
{{dsc | {{lc|std::chrono::nanoseconds}} | duration type with Period {{lc|std::nano}} }}
{{dsc | {{lc|std::chrono::microseconds}} | duration type with Period {{lc|std::micro}} }}
{{dsc | {{lc|std::chrono::milliseconds}} | duration type with Period {{lc|std::milli}} }}
{{dsc | {{lc|std::chrono::seconds}} | duration type with Period {{c|std::ratio&lt;1&gt;}} }}
{{dsc | {{lc|std::chrono::minutes}} | duration type with Period {{c|std::ratio&lt;60&gt;}} }}
{{dsc | {{lc|std::chrono::hours}} | duration type with Period {{c|std::ratio&lt;3600&gt;}} }}

{{dsc h2|Specializations}}
{{dsc namespace | std}}
{{dsc inc | cpp/chrono/duration/dsc common_type}}
{{dsc inc | cpp/chrono/time_point/dsc common_type}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2|Duration}}
{{dsc namespace | std::chrono}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith4}}
{{dsc inc | cpp/chrono/duration/dsc operator_cmp}}
{{dsc inc | cpp/chrono/duration/dsc duration_cast }}
{{dsc inc | cpp/chrono/duration/dsc floor}}
{{dsc inc | cpp/chrono/duration/dsc ceil}}
{{dsc inc | cpp/chrono/duration/dsc round}}
{{dsc inc | cpp/chrono/duration/dsc abs}}

{{dsc h2|Time point}}
{{dsc namespace | std::chrono}}
{{dsc inc | cpp/chrono/time_point/dsc operator_arith2}}
{{dsc inc | cpp/chrono/time_point/dsc operator_cmp}}
{{dsc inc | cpp/chrono/time_point/dsc time_point_cast}}
{{dsc inc | cpp/chrono/time_point/dsc floor}}
{{dsc inc | cpp/chrono/time_point/dsc ceil}}
{{dsc inc | cpp/chrono/time_point/dsc round}}

{{dsc h2|Literals}}
{{dsc namespace | std::literals::chrono_literals | inline=true }}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;h}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;min}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;s}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;ms}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;us}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;ns}}

{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  namespace chrono {
    // class template duration
    template &lt;class Rep, class Period = ratio&lt;1&gt;&gt; class duration;
    // class template time_point
    template &lt;class Clock, class Duration = typename Clock::duration&gt; class time_point;
  }
  // common_type specializations
  template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
  struct common_type&lt;chrono::duration&lt;Rep1, Period1&gt;,
                     chrono::duration&lt;Rep2, Period2&gt;&gt;;
  template &lt;class Clock, class Duration1, class Duration2&gt;
  struct common_type&lt;chrono::time_point&lt;Clock, Duration1&gt;,
                     chrono::time_point&lt;Clock, Duration2&gt;&gt;;
  namespace chrono {
    // customization traits
    template &lt;class Rep&gt; struct treat_as_floating_point;
    template &lt;class Rep&gt; struct duration_values;
    template &lt;class Rep&gt;
    constexpr bool treat_as_floating_point_v = treat_as_floating_point&lt;Rep&gt;::value;
    // duration arithmetic
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    common_type_t&lt;duration&lt;Rep1, Period1&gt;, duration&lt;Rep2, Period2&gt;&gt;
    constexpr operator+(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                        const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    common_type_t&lt;duration&lt;Rep1, Period1&gt;, duration&lt;Rep2, Period2&gt;&gt;
    constexpr operator-(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                        const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period, class Rep2&gt;
    duration&lt;common_type_t&lt;Rep1, Rep2&gt;, Period&gt;
    constexpr operator*(const duration&lt;Rep1, Period&gt;&amp; d,
                        const Rep2&amp; s);
    template &lt;class Rep1, class Rep2, class Period&gt;
    duration&lt;common_type_t&lt;Rep1, Rep2&gt;, Period&gt;
    constexpr operator*(const Rep1&amp; s,
                        const duration&lt;Rep2, Period&gt;&amp; d);
    template &lt;class Rep1, class Period, class Rep2&gt;
    duration&lt;common_type_t&lt;Rep1, Rep2&gt;, Period&gt;
    constexpr operator/(const duration&lt;Rep1, Period&gt;&amp; d,
                        const Rep2&amp; s);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    common_type_t&lt;Rep1, Rep2&gt;
    constexpr operator/(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                        const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period, class Rep2&gt;
    duration&lt;common_type_t&lt;Rep1, Rep2&gt;, Period&gt;
    constexpr operator%(const duration&lt;Rep1, Period&gt;&amp; d,
                        const Rep2&amp; s);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    common_type_t&lt;duration&lt;Rep1, Period1&gt;, duration&lt;Rep2, Period2&gt;&gt;
    constexpr operator%(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                        const duration&lt;Rep2, Period2&gt;&amp; rhs);
    // duration comparisons
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    constexpr bool operator==(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    constexpr bool operator!=(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    constexpr bool operator&lt; (const duration&lt;Rep1, Period1&gt;&amp; lhs,
                              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    constexpr bool operator&lt;=(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    constexpr bool operator&gt; (const duration&lt;Rep1, Period1&gt;&amp; lhs,
                              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period1, class Rep2, class Period2&gt;
    constexpr bool operator&gt;=(const duration&lt;Rep1, Period1&gt;&amp; lhs,
                              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    // duration_cast
    template &lt;class ToDuration, class Rep, class Period&gt;
    constexpr ToDuration duration_cast(const duration&lt;Rep, Period&gt;&amp; d);
    template &lt;class ToDuration, class Rep, class Period&gt;
    constexpr ToDuration floor(const duration&lt;Rep, Period&gt;&amp; d);
    template &lt;class ToDuration, class Rep, class Period&gt;
    constexpr ToDuration ceil(const duration&lt;Rep, Period&gt;&amp; d);
    template &lt;class ToDuration, class Rep, class Period&gt;
    constexpr ToDuration round(const duration&lt;Rep, Period&gt;&amp; d);
    // convenience typedefs
    using nanoseconds = duration&lt;/*signed integer type of at least 64 bits*/ , nano&gt;;
    using microseconds = duration&lt;/*signed integer type of at least 55 bits*/ , micro&gt;;
    using milliseconds = duration&lt;/*signed integer type of at least 45 bits*/ , milli&gt;;
    using seconds = duration&lt;/*signed integer type of at least 35 bits*/ &gt;;
    using minutes = duration&lt;/*signed integer type of at least 29 bits*/ , ratio&lt; 60&gt;&gt;;
    using hours = duration&lt;/*signed integer type of at least 23 bits*/ , ratio&lt;3600&gt;&gt;;
    // time_point arithmetic
    template &lt;class Clock, class Duration1, class Rep2, class Period2&gt;
    constexpr time_point&lt;Clock, common_type_t&lt;Duration1, duration&lt;Rep2, Period2&gt;&gt;&gt;
    operator+(const time_point&lt;Clock, Duration1&gt;&amp; lhs,
              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Rep1, class Period1, class Clock, class Duration2&gt;
    constexpr time_point&lt;Clock, common_type_t&lt;duration&lt;Rep1, Period1&gt;, Duration2&gt;&gt;
    operator+(const duration&lt;Rep1, Period1&gt;&amp; lhs,
              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    template &lt;class Clock, class Duration1, class Rep2, class Period2&gt;
    constexpr time_point&lt;Clock, common_type_t&lt;Duration1, duration&lt;Rep2, Period2&gt;&gt;&gt;
    operator-(const time_point&lt;Clock, Duration1&gt;&amp; lhs,
              const duration&lt;Rep2, Period2&gt;&amp; rhs);
    template &lt;class Clock, class Duration1, class Duration2&gt;
    constexpr common_type_t&lt;Duration1, Duration2&gt;
    operator-(const time_point&lt;Clock, Duration1&gt;&amp; lhs,
              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    // time_point comparisons
    template &lt;class Clock, class Duration1, class Duration2&gt;
    constexpr bool operator==(const time_point&lt;Clock, Duration1&gt;&amp; lhs,
                              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    template &lt;class Clock, class Duration1, class Duration2&gt;
    constexpr bool operator!=(const time_point&lt;Clock, Duration1&gt;&amp; lhs,
                              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    template &lt;class Clock, class Duration1, class Duration2&gt;
    constexpr bool operator&lt; (const time_point&lt;Clock, Duration1&gt;&amp; lhs,
                              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    template &lt;class Clock, class Duration1, class Duration2&gt;
    constexpr bool operator&lt;=(const time_point&lt;Clock, Duration1&gt;&amp; lhs,
                              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    template &lt;class Clock, class Duration1, class Duration2&gt;
    constexpr bool operator&gt; (const time_point&lt;Clock, Duration1&gt;&amp; lhs,
                              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    template &lt;class Clock, class Duration1, class Duration2&gt;
    constexpr bool operator&gt;=(const time_point&lt;Clock, Duration1&gt;&amp; lhs,
                              const time_point&lt;Clock, Duration2&gt;&amp; rhs);
    // time_point_cast
    template &lt;class ToDuration, class Clock, class Duration&gt;
    constexpr time_point&lt;Clock, ToDuration&gt;
    time_point_cast(const time_point&lt;Clock, Duration&gt;&amp; t);
    template &lt;class ToDuration, class Clock, class Duration&gt;
    constexpr time_point&lt;Clock, ToDuration&gt;
    floor(const time_point&lt;Clock, Duration&gt;&amp; tp);
    template &lt;class ToDuration, class Clock, class Duration&gt;
    constexpr time_point&lt;Clock, ToDuration&gt;
    ceil(const time_point&lt;Clock, Duration&gt;&amp; tp);
    template &lt;class ToDuration, class Clock, class Duration&gt;
    constexpr time_point&lt;Clock, ToDuration&gt;
    round(const time_point&lt;Clock, Duration&gt;&amp; tp);
    // specialized algorithms
    template &lt;class Rep, class Period&gt;
    constexpr duration&lt;Rep, Period&gt; abs(duration&lt;Rep, Period&gt; d);
    // clocks
    class system_clock;
    class steady_clock;
    class high_resolution_clock;
  }
  inline namespace literals {
    inline namespace chrono_literals {
      // suffixes for duration literals
      constexpr chrono::hours operator &quot;&quot; h(unsigned long long);
      constexpr chrono::duration&lt;/*unspecified*/,
                                 ratio&lt;3600,1&gt;&gt; operator &quot;&quot; h(long double);
      constexpr chrono::minutes operator &quot;&quot; min(unsigned long long);
      constexpr chrono::duration&lt;/*unspecified*/,
                                 ratio&lt;60,1&gt;&gt; operator &quot;&quot; min(long double);
      constexpr chrono::seconds operator &quot;&quot; s(unsigned long long);
      constexpr chrono::duration&lt;/*unspecified*/ &gt; operator &quot;&quot; s(long double);
      constexpr chrono::milliseconds operator &quot;&quot; ms(unsigned long long);
      constexpr chrono::duration&lt;/*unspecified*/,
                                 milli&gt; operator &quot;&quot; ms(long double);
      constexpr chrono::microseconds operator &quot;&quot; us(unsigned long long);
      constexpr chrono::duration&lt;/*unspecified*/,
                                 micro&gt; operator &quot;&quot; us(long double);
      constexpr chrono::nanoseconds operator &quot;&quot; ns(unsigned long long);
      constexpr chrono::duration&lt;/*unspecified*/, 
                                 nano&gt; operator &quot;&quot; ns(long double);
    }
  }
  namespace chrono {
    using namespace literals::chrono_literals;
  }
}}
===={{c|std::chrono::treat_as_floating_point}}====
{{source|1=
template &lt;class Rep&gt; struct treat_as_floating_point : is_floating_point&lt;Rep&gt; { };
}}

===={{c|std::chrono::duration_values}}====
{{source|1=
template &lt;class Rep&gt;
struct duration_values {
public:
  static constexpr Rep zero();
  static constexpr Rep min();
  static constexpr Rep max();
};
}}

===={{c|std::chrono::duration}}====
{{source|1=
template &lt;class Rep, class Period = ratio&lt;1&gt;&gt;
class duration {
public:
  using rep = Rep;
  using period = Period;
private:
  rep rep_; // exposition only
public:
  // construct/copy/destroy
  constexpr duration() = default;
  template &lt;class Rep2&gt;
  constexpr explicit duration(const Rep2&amp; r);
  template &lt;class Rep2, class Period2&gt;
  constexpr duration(const duration&lt;Rep2, Period2&gt;&amp; d);
  ~duration() = default;
  duration(const duration&amp;) = default;
  duration&amp; operator=(const duration&amp;) = default;
  // observer
  constexpr rep count() const;
  // arithmetic
  constexpr duration operator+() const;
  constexpr duration operator-() const;
  constexpr duration&amp; operator++();
  constexpr duration operator++(int);
  constexpr duration&amp; operator--();
  constexpr duration operator--(int);
  constexpr duration&amp; operator+=(const duration&amp; d);
  constexpr duration&amp; operator-=(const duration&amp; d);
  constexpr duration&amp; operator*=(const rep&amp; rhs);
  constexpr duration&amp; operator/=(const rep&amp; rhs);
  constexpr duration&amp; operator%=(const rep&amp; rhs);
  constexpr duration&amp; operator%=(const duration&amp; rhs);
  // special values
  static constexpr duration zero();
  static constexpr duration min();
  static constexpr duration max();
};
}}

===={{c|std::chrono::time_point}}====
{{source|1=
template &lt;class Clock, class Duration = typename Clock::duration&gt;
class time_point {
public:
  using clock = Clock;
  using duration = Duration;
  using rep = typename duration::rep;
  using period = typename duration::period;
private:
  duration d_; // exposition only
public:
  // construct
  constexpr time_point(); // has value epoch
  constexpr explicit time_point(const duration&amp; d); // same as time_point() + d
  template &lt;class Duration2&gt;
  constexpr time_point(const time_point&lt;clock, Duration2&gt;&amp; t);
  // observer
  constexpr duration time_since_epoch() const;
  // arithmetic
  constexpr time_point&amp; operator+=(const duration&amp; d);
  constexpr time_point&amp; operator-=(const duration&amp; d);
  // special values
  static constexpr time_point min();
  static constexpr time_point max();
};
}}

===={{c|std::chrono::system_clock}}====
{{source|1=
class system_clock {
public:
  using rep = /*see description*/ ;
  using period = ratio&lt;/*unspecified*/, /*unspecified*/ &gt;;
  using duration = chrono::duration&lt;rep, period&gt;;
  using time_point = chrono::time_point&lt;system_clock&gt;;
  static constexpr bool is_steady = /*unspecified*/ ;
  static time_point now() noexcept;
  // Map to C API
  static time_t to_time_t (const time_point&amp; t) noexcept;
  static time_point from_time_t(time_t t) noexcept;
};
}}

===={{c|std::chrono::steady_clock}}====
{{source|1=
class steady_clock {
public:
  using rep = /*unspecified*/ ;
  using period = ratio&lt;/*unspecified*/, /*unspecified*/ &gt;;
  using duration = chrono::duration&lt;rep, period&gt;;
  using time_point = chrono::time_point&lt;/*unspecified*/, duration&gt;;
  static constexpr bool is_steady = true;
  static time_point now() noexcept;
};
}}

===={{c|std::chrono::high_resolution_clock}}====
{{source|1=
class high_resolution_clock {
public:
  using rep = /*unspecified*/ ;
  using period = ratio&lt;/*unspecified*/, /*unspecified*/ &gt;;
  using duration = chrono::duration&lt;rep, period&gt;;
  using time_point = chrono::time_point&lt;/*unspecified*/, duration&gt;;
  static constexpr bool is_steady = /*unspecified*/ ;
  static time_point now() noexcept;
};
}}</text>
      <sha1>3oofgo70l26n34l8d6r1yelu4wl9o84</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cinttypes</title>
    <ns>0</ns>
    <id>9789</id>
    <revision>
      <id>87649</id>
      <parentid>82740</parentid>
      <timestamp>2016-09-16T12:17:31Z</timestamp>
      <contributor>
        <ip>155.56.68.215</ip>
      </contributor>
      <comment>Macros do not contain the '%'-character</comment>
      <text xml:space="preserve" bytes="9327">{{cpp/header/title|cinttypes}}
{{cpp/header/navbar}}
{{cpp/header/c}}

Provides conversions from C [[cpp/string/byte|byte]] and [[cpp/string/wide|wide]] strings to {{lc|std::intmax_t}} and {{lc|std::uintmax_t}}, overloads some [[cpp/numeric/math|math functions]] for {{lc|std::intmax_t}} and provide [[cpp/io/c|C style input/output]] format macros for the types declared in {{header|cstdint}}.

===Includes===
{{dsc begin}}
{{dsc|{{header|cstdint}}}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc imaxdiv_t}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc imaxabs}}
{{dsc inc | cpp/numeric/math/dsc imaxdiv}}
{{dsc inc | cpp/string/byte/dsc strtoimax}}
{{dsc inc | cpp/string/wide/dsc wcstoimax}}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc h2 | Format constants for the {{lc|std::fprintf}} family of functions}}
{{dsc macro const | PRId8&lt;br&gt;PRId16&lt;br&gt;PRId32&lt;br&gt;PRId64&lt;br&gt;PRIdLEAST8&lt;br&gt;PRIdLEAST16&lt;br&gt;PRIdLEAST32&lt;br&gt;PRIdLEAST64&lt;br&gt;PRIdFAST8&lt;br&gt;PRIdFAST16&lt;br&gt;PRIdFAST32&lt;br&gt;PRIdFAST64&lt;br&gt;PRIdMAX&lt;br&gt;PRIdPTR | format conversion specifier to output a signed decimal integer value of type {{lc|std::int8_t}}, {{lc|std::int16_t}}, {{lc|std::int32_t}}, {{lc|std::int64_t}}, {{lc|std::int_least8_t}}, {{lc|std::int_least16_t}}, {{lc|std::int_least32_t}}, {{lc|std::int_least64_t}}, {{lc|std::int_fast8_t}}, {{lc|std::int_fast16_t}}, {{lc|std::int_fast32_t}}, {{lc|std::int_fast64_t}}, {{lc|std::intmax_t}}, {{lc|std::intptr_t}} respectively, equivalent to {{tt|d}} for {{c|int}} | nolink=true }}
{{dsc macro const | PRIi8&lt;br&gt;PRIi16&lt;br&gt;PRIi32&lt;br&gt;PRIi64&lt;br&gt;PRIiLEAST8&lt;br&gt;PRIiLEAST16&lt;br&gt;PRIiLEAST32&lt;br&gt;PRIiLEAST64&lt;br&gt;PRIiFAST8&lt;br&gt;PRIiFAST16&lt;br&gt;PRIiFAST32&lt;br&gt;PRIiFAST64&lt;br&gt;PRIiMAX&lt;br&gt;PRIiPTR | format conversion specifier to output a signed decimal integer value of type {{lc|std::int8_t}}, {{lc|std::int16_t}}, {{lc|std::int32_t}}, {{lc|std::int64_t}}, {{lc|std::int_least8_t}}, {{lc|std::int_least16_t}}, {{lc|std::int_least32_t}}, {{lc|std::int_least64_t}}, {{lc|std::int_fast8_t}}, {{lc|std::int_fast16_t}}, {{lc|std::int_fast32_t}}, {{lc|std::int_fast64_t}}, {{lc|std::intmax_t}}, {{lc|std::intptr_t}} respectively, equivalent to {{tt|i}} for {{c|int}} | nolink=true }}
{{dsc macro const | PRIu8&lt;br&gt;PRIu16&lt;br&gt;PRIu32&lt;br&gt;PRIu64&lt;br&gt;PRIuLEAST8&lt;br&gt;PRIuLEAST16&lt;br&gt;PRIuLEAST32&lt;br&gt;PRIuLEAST64&lt;br&gt;PRIuFAST8&lt;br&gt;PRIuFAST16&lt;br&gt;PRIuFAST32&lt;br&gt;PRIuFAST64&lt;br&gt;PRIuMAX&lt;br&gt;PRIuPTR | format conversion specifier to output an unsigned decimal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|u}} for {{c|unsigned int}} | nolink=true }}
{{dsc macro const | PRIo8&lt;br&gt;PRIo16&lt;br&gt;PRIo32&lt;br&gt;PRIo64&lt;br&gt;PRIoLEAST8&lt;br&gt;PRIoLEAST16&lt;br&gt;PRIoLEAST32&lt;br&gt;PRIoLEAST64&lt;br&gt;PRIoFAST8&lt;br&gt;PRIoFAST16&lt;br&gt;PRIoFAST32&lt;br&gt;PRIoFAST64&lt;br&gt;PRIoMAX&lt;br&gt;PRIoPTR | format conversion specifier to output an unsigned octal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|o}} for {{c|unsigned int}} | nolink=true }}
{{dsc macro const | PRIx8&lt;br&gt;PRIx16&lt;br&gt;PRIx32&lt;br&gt;PRIx64&lt;br&gt;PRIxLEAST8&lt;br&gt;PRIxLEAST16&lt;br&gt;PRIxLEAST32&lt;br&gt;PRIxLEAST64&lt;br&gt;PRIxFAST8&lt;br&gt;PRIxFAST16&lt;br&gt;PRIxFAST32&lt;br&gt;PRIxFAST64&lt;br&gt;PRIxMAX&lt;br&gt;PRIxPTR | format conversion specifier to output an unsigned lowercase hexadecimal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|x}} for {{c|unsigned int}} | nolink=true }}
{{dsc macro const | PRIX8&lt;br&gt;PRIX16&lt;br&gt;PRIX32&lt;br&gt;PRIX64&lt;br&gt;PRIXLEAST8&lt;br&gt;PRIXLEAST16&lt;br&gt;PRIXLEAST32&lt;br&gt;PRIXLEAST64&lt;br&gt;PRIXFAST8&lt;br&gt;PRIXFAST16&lt;br&gt;PRIXFAST32&lt;br&gt;PRIXFAST64&lt;br&gt;PRIXMAX&lt;br&gt;PRIXPTR | format conversion specifier to output an unsigned uppercase hexadecimal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|X}} for {{c|unsigned int}} | nolink=true }}
{{dsc h2 | Format constants for the {{lc|std::fscanf}} family of functions}}
{{dsc macro const | SCNd8&lt;br&gt;SCNd16&lt;br&gt;SCNd32&lt;br&gt;SCNd64&lt;br&gt;SCNdLEAST8&lt;br&gt;SCNdLEAST16&lt;br&gt;SCNdLEAST32&lt;br&gt;SCNdLEAST64&lt;br&gt;SCNdFAST8&lt;br&gt;SCNdFAST16&lt;br&gt;SCNdFAST32&lt;br&gt;SCNdFAST64&lt;br&gt;SCNdMAX&lt;br&gt;SCNdPTR | format conversion specifier to input a signed decimal integer value of type {{lc|std::int8_t}}, {{lc|std::int16_t}}, {{lc|std::int32_t}}, {{lc|std::int64_t}}, {{lc|std::int_least8_t}}, {{lc|std::int_least16_t}}, {{lc|std::int_least32_t}}, {{lc|std::int_least64_t}}, {{lc|std::int_fast8_t}}, {{lc|std::int_fast16_t}}, {{lc|std::int_fast32_t}}, {{lc|std::int_fast64_t}}, {{lc|std::intmax_t}}, {{lc|std::intptr_t}} respectively, equivalent to {{tt|d}} for {{c|int}} | nolink=true }}
{{dsc macro const | SCNi8&lt;br&gt;SCNi16&lt;br&gt;SCNi32&lt;br&gt;SCNi64&lt;br&gt;SCNiLEAST8&lt;br&gt;SCNiLEAST16&lt;br&gt;SCNiLEAST32&lt;br&gt;SCNiLEAST64&lt;br&gt;SCNiFAST8&lt;br&gt;SCNiFAST16&lt;br&gt;SCNiFAST32&lt;br&gt;SCNiFAST64&lt;br&gt;SCNiMAX&lt;br&gt;SCNiPTR | format conversion specifier to input a signed decimal/octal/hexadecimal integer value of type {{lc|std::int8_t}}, {{lc|std::int16_t}}, {{lc|std::int32_t}}, {{lc|std::int64_t}}, {{lc|std::int_least8_t}}, {{lc|std::int_least16_t}}, {{lc|std::int_least32_t}}, {{lc|std::int_least64_t}}, {{lc|std::int_fast8_t}}, {{lc|std::int_fast16_t}}, {{lc|std::int_fast32_t}}, {{lc|std::int_fast64_t}}, {{lc|std::intmax_t}}, {{lc|std::intptr_t}} respectively, equivalent to {{tt|i}} for {{c|int}} | nolink=true }}
{{dsc macro const | SCNu8&lt;br&gt;SCNu16&lt;br&gt;SCNu32&lt;br&gt;SCNu64&lt;br&gt;SCNuLEAST8&lt;br&gt;SCNuLEAST16&lt;br&gt;SCNuLEAST32&lt;br&gt;SCNuLEAST64&lt;br&gt;SCNuFAST8&lt;br&gt;SCNuFAST16&lt;br&gt;SCNuFAST32&lt;br&gt;SCNuFAST64&lt;br&gt;SCNuMAX&lt;br&gt;SCNuPTR | format conversion specifier to input an unsigned decimal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|u}} for {{c|unsigned int}} | nolink=true }}
{{dsc macro const | SCNo8&lt;br&gt;SCNo16&lt;br&gt;SCNo32&lt;br&gt;SCNo64&lt;br&gt;SCNoLEAST8&lt;br&gt;SCNoLEAST16&lt;br&gt;SCNoLEAST32&lt;br&gt;SCNoLEAST64&lt;br&gt;SCNoFAST8&lt;br&gt;SCNoFAST16&lt;br&gt;SCNoFAST32&lt;br&gt;SCNoFAST64&lt;br&gt;SCNoMAX&lt;br&gt;SCNoPTR | format conversion specifier to input an unsigned octal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|o}} for {{c|unsigned int}} | nolink=true }}
{{dsc macro const | SCNx8&lt;br&gt;SCNx16&lt;br&gt;SCNx32&lt;br&gt;SCNx64&lt;br&gt;SCNxLEAST8&lt;br&gt;SCNxLEAST16&lt;br&gt;SCNxLEAST32&lt;br&gt;SCNxLEAST64&lt;br&gt;SCNxFAST8&lt;br&gt;SCNxFAST16&lt;br&gt;SCNxFAST32&lt;br&gt;SCNxFAST64&lt;br&gt;SCNxMAX&lt;br&gt;SCNxPTR | format conversion specifier to input an unsigned hexadecimal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|x}} for {{c|unsigned int}} | nolink=true }}
&lt;!--{{dsc macro const | SCNX8&lt;br&gt;SCNX16&lt;br&gt;SCNX32&lt;br&gt;SCNX64&lt;br&gt;SCNXLEAST8&lt;br&gt;SCNXLEAST16&lt;br&gt;SCNXLEAST32&lt;br&gt;SCNXLEAST64&lt;br&gt;SCNXFAST8&lt;br&gt;SCNXFAST16&lt;br&gt;SCNXFAST32&lt;br&gt;SCNXFAST64&lt;br&gt;SCNXMAX&lt;br&gt;SCNXPTR | format conversion specifier to input an unsigned uppercase hexadecimal integer value of type {{lc|std::uint8_t}}, {{lc|std::uint16_t}}, {{lc|std::uint32_t}}, {{lc|std::uint64_t}}, {{lc|std::uint_least8_t}}, {{lc|std::uint_least16_t}}, {{lc|std::uint_least32_t}}, {{lc|std::uint_least64_t}}, {{lc|std::uint_fast8_t}}, {{lc|std::uint_fast16_t}}, {{lc|std::uint_fast32_t}}, {{lc|std::uint_fast64_t}}, {{lc|std::uintmax_t}}, {{lc|std::uintptr_t}} respectively, equivalent to {{tt|X}} for {{c|unsigned int}} | nolink=true }}--&gt;
{{dsc end}}</text>
      <sha1>trxljkwm0v2en5vqvshajgp21hl4tpg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/ciso646</title>
    <ns>0</ns>
    <id>9682</id>
    <revision>
      <id>90087</id>
      <parentid>90086</parentid>
      <timestamp>2017-02-06T06:43:21Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="460">{{cpp/header/title|ciso646}}
{{cpp/header/navbar}}
{{cpp/header/c}}

Compatibility header, in C defines [[cpp/language/operator_alternative|alternative operator representations]] which are keywords in C++.

This means that in a conforming implementation this header is empty.

It may still be required in order to have the [[cpp/language/operator_alternative|alternative operator representations]] in old or non-conformant compilers.

[[zh:cpp/header/ciso646]]</text>
      <sha1>rwm5nqf5epaq2u20h5yssv98i13w1re</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/climits</title>
    <ns>0</ns>
    <id>9663</id>
    <revision>
      <id>88951</id>
      <parentid>88934</parentid>
      <timestamp>2016-12-20T20:59:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>templatized</comment>
      <text xml:space="preserve" bytes="1286">{{cpp/header/title|climits}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/types|type support]] library, in particular it's part of the [[cpp/types/climits|C numeric limits interface]].

===Macros===
{{dsc begin}}
{{dsc inc | cpp/types/dsc CHAR_BIT }}
{{dsc inc | cpp/types/dsc MB_LEN_MAX }}
{{dsc inc | cpp/types/dsc CHAR_MIN}}
{{dsc inc | cpp/types/dsc CHAR_MAX }}
{{dsc inc | cpp/types/dsc signed_MIN}}
{{dsc inc | cpp/types/dsc signed_MAX}}
{{dsc inc | cpp/types/dsc unsigned_MAX}}
{{dsc end}}

===Synopsis===
{{source|1=
#define CHAR_BIT /* see definition */
#define SCHAR_MIN /* see definition */
#define SCHAR_MAX /* see definition */
#define UCHAR_MAX /* see definition */
#define CHAR_MIN /* see definition */
#define CHAR_MAX /* see definition */
#define MB_LEN_MAX /* see definition */
#define SHRT_MIN /* see definition */
#define SHRT_MAX /* see definition */
#define USHRT_MAX /* see definition */
#define INT_MIN /* see definition */
#define INT_MAX /* see definition */
#define UINT_MAX /* see definition */
#define LONG_MIN /* see definition */
#define LONG_MAX /* see definition */
#define ULONG_MAX /* see definition */
#define LLONG_MIN /* see definition */
#define LLONG_MAX /* see definition */
#define ULLONG_MAX /* see definition */
}}</text>
      <sha1>pem848la02smctyl6zfdl9t0kih2d2s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/clocale</title>
    <ns>0</ns>
    <id>9748</id>
    <revision>
      <id>57445</id>
      <parentid>49550</parentid>
      <timestamp>2013-06-01T05:53:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="588">{{cpp/header/title|clocale}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/locale|localization]] library

{{dsc begin}}
{{dsc h1 | Types}}
{{dsc inc | cpp/locale/dsc lconv}}
{{dsc h1 | Constants}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc inc | cpp/locale/dsc LC_categories}}
{{dsc h1 | Functions}}
{{dsc inc | cpp/locale/dsc setlocale}}
{{dsc inc | cpp/locale/dsc localeconv}}
{{dsc end}}

===Notes===
* {{lc|NULL}} is also defined in the following headers:
** {{header|cstring}}
** {{header|ctime}}
** {{header|cstddef}}
** {{header|cstdio}}
** {{header|cwchar}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cmath</title>
    <ns>0</ns>
    <id>9752</id>
    <revision>
      <id>71827</id>
      <parentid>71576</parentid>
      <timestamp>2014-06-25T20:44:06Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>tgamma first than lgamma</comment>
      <text xml:space="preserve" bytes="3577">{{cpp/header/title|cmath}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/numeric|numeric]] library.

===Macro constants===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc HUGE_VAL}}}
{{dsc inc | cpp/numeric/math/dsc INFINITY}}}
{{dsc inc | cpp/numeric/math/dsc NAN}}}
{{dsc inc | cpp/numeric/math/dsc math_errhandling}}
{{dsc h2 | Classification}}
{{dsc inc | cpp/numeric/math/dsc FP_categories}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc float_t}}
{{dsc inc | cpp/numeric/math/dsc double_t}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | Basic operations}}
{{dsc inc | cpp/numeric/math/dsc fabs}}
{{dsc inc | cpp/numeric/math/dsc fmod}}
{{dsc inc | cpp/numeric/math/dsc remainder}}
{{dsc inc | cpp/numeric/math/dsc remquo}}
{{dsc inc | cpp/numeric/math/dsc fma}}
{{dsc inc | cpp/numeric/math/dsc fmax}}
{{dsc inc | cpp/numeric/math/dsc fmin}}
{{dsc inc | cpp/numeric/math/dsc fdim}}
{{dsc inc | cpp/numeric/math/dsc fnan}}

{{dsc h2 | Exponential functions}}
{{dsc inc | cpp/numeric/math/dsc exp}}
{{dsc inc | cpp/numeric/math/dsc exp2}}
{{dsc inc | cpp/numeric/math/dsc expm1}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/math/dsc log10}}
{{dsc inc | cpp/numeric/math/dsc log2}}
{{dsc inc | cpp/numeric/math/dsc log1p}}

{{dsc h2 | Power functions}}
{{dsc inc | cpp/numeric/math/dsc pow}}
{{dsc inc | cpp/numeric/math/dsc sqrt}}
{{dsc inc | cpp/numeric/math/dsc cbrt}}
{{dsc inc | cpp/numeric/math/dsc hypot}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | cpp/numeric/math/dsc sin}}
{{dsc inc | cpp/numeric/math/dsc cos}}
{{dsc inc | cpp/numeric/math/dsc tan}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/math/dsc atan2}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | cpp/numeric/math/dsc sinh}}
{{dsc inc | cpp/numeric/math/dsc cosh}}
{{dsc inc | cpp/numeric/math/dsc tanh}}
{{dsc inc | cpp/numeric/math/dsc asinh}}
{{dsc inc | cpp/numeric/math/dsc acosh}}
{{dsc inc | cpp/numeric/math/dsc atanh}}

{{dsc h2 | Error and gamma functions}}
{{dsc inc | cpp/numeric/math/dsc erf}}
{{dsc inc | cpp/numeric/math/dsc erfc}}
{{dsc inc | cpp/numeric/math/dsc tgamma}}
{{dsc inc | cpp/numeric/math/dsc lgamma}}

{{dsc h2 | Nearest integer floating point operations}}
{{dsc inc | cpp/numeric/math/dsc ceil}}
{{dsc inc | cpp/numeric/math/dsc floor}}
{{dsc inc | cpp/numeric/math/dsc trunc}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc inc | cpp/numeric/math/dsc nearbyint}}
{{dsc inc | cpp/numeric/math/dsc rint}}

{{dsc h2 | Floating point manipulation functions}}
{{dsc inc | cpp/numeric/math/dsc frexp}}
{{dsc inc | cpp/numeric/math/dsc ldexp}}
{{dsc inc | cpp/numeric/math/dsc modf}}
{{dsc inc | cpp/numeric/math/dsc scalbn}}
{{dsc inc | cpp/numeric/math/dsc ilogb}}
{{dsc inc | cpp/numeric/math/dsc logb}}
{{dsc inc | cpp/numeric/math/dsc nextafter}}
{{dsc inc | cpp/numeric/math/dsc copysign}}

{{dsc h2 | Classification and comparison}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc inc | cpp/numeric/math/dsc isfinite}}
{{dsc inc | cpp/numeric/math/dsc isinf}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc inc | cpp/numeric/math/dsc isnormal}}
{{dsc inc | cpp/numeric/math/dsc signbit}}

{{dsc inc | cpp/numeric/math/dsc isgreater}}
{{dsc inc | cpp/numeric/math/dsc isgreaterequal}}
{{dsc inc | cpp/numeric/math/dsc isless}}
{{dsc inc | cpp/numeric/math/dsc islessequal}}
{{dsc inc | cpp/numeric/math/dsc islessgreater}}
{{dsc inc | cpp/numeric/math/dsc isunordered}}
{{dsc end}}</text>
      <sha1>st5vlz2g6yq29zcyld1gfu3bie7ud8l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/codectv</title>
    <ns>0</ns>
    <id>9772</id>
    <redirect title="cpp/header/codecvt" />
    <revision>
      <id>67854</id>
      <parentid>57451</parentid>
      <timestamp>2014-03-03T13:36:38Z</timestamp>
      <contributor>
        <ip>59.78.56.117</ip>
      </contributor>
      <comment>The header name should be &quot;codeCVT&quot;, not &quot;CTV&quot;.</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/header/codecvt]]</text>
      <sha1>rwqhk82dowl3z3ee6jur73r119ei9pf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/codecvt</title>
    <ns>0</ns>
    <id>12860</id>
    <revision>
      <id>64004</id>
      <parentid>64003</parentid>
      <timestamp>2013-08-06T03:43:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1895">{{cpp/header/title|codecvt}}
{{cpp/header/navbar}}
This header is part of the [[cpp/locale|Localization]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf16}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc inc | cpp/locale/dsc codecvt_mode}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
    enum codecvt_mode {
        consume_header = 4,
        generate_header = 2,
        little_endian = 1
    };

    template&lt;class Elem,
             unsigned long Maxcode = 0x10ffff,
             codecvt_mode Mode = (codecvt_mode)0&gt;
    class codecvt_utf8;

    template&lt;class Elem,
             unsigned long Maxcode = 0x10ffff,
             codecvt_mode Mode = (codecvt_mode)0&gt;
    class codecvt_utf16;

    template&lt;class Elem,
             unsigned long Maxcode = 0x10ffff,
             codecvt_mode Mode = (codecvt_mode)0&gt;
    class codecvt_utf8_utf16;
}
}}

====Class {{lc|std::codecvt_utf8}}====
{{source|1=
template&lt; class Elem,
          unsigned long Maxcode = 0x10ffff,
          codecvt_mode Mode = (codecvt_mode)0 &gt;
class codecvt_utf8 : public codecvt&lt;Elem, char, mbstate_t&gt; {
 public:
    explicit codecvt_utf8(size_t refs = 0);
    ~codecvt_utf8();
};
}}

====Class {{lc|std::codecvt_utf16}}====
{{source|1=
template&lt; class Elem,
          unsigned long Maxcode = 0x10ffff,
          codecvt_mode Mode = (codecvt_mode)0 &gt;
class codecvt_utf16 : public codecvt&lt;Elem, char, mbstate_t&gt; {
 public:
    explicit codecvt_utf16(size_t refs = 0);
    ~codecvt_utf16();
};
}}

====Class {{lc|std::codecvt_utf8_utf16}}====
{{source|1=
template&lt; class Elem,
          unsigned long Maxcode = 0x10ffff,
          codecvt_mode Mode = (codecvt_mode)0 &gt;
class codecvt_utf8_utf16 : public codecvt&lt;Elem, char, mbstate_t&gt; {
 public:
    explicit codecvt_utf8_utf16(size_t refs = 0);
    ~codecvt_utf8_utf16();
};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/complex</title>
    <ns>0</ns>
    <id>9801</id>
    <revision>
      <id>87432</id>
      <parentid>87430</parentid>
      <timestamp>2016-08-24T09:40:44Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 87430 by [[Special:Contributions/49.118.144.90|49.118.144.90]] ([[User talk:49.118.144.90|talk]])</comment>
      <text xml:space="preserve" bytes="9911">{{cpp/header/title|complex}}
{{cpp/header/navbar}}

This header is part of the [[cpp/numeric|numeric]] library.

===Classes===

{{dsc begin}}
{{dsc tclass | cpp/numeric/complex | a complex number type }}
{{dsc ptclass | title={{ttb|complex}}{{small|&lt;float&gt;}}&lt;br&gt;{{ttb|complex}}{{small|&lt;double&gt;}}&lt;br&gt;{{ttb|complex}}{{small|&lt;long double&gt;}} |cpp/numeric/complex | a complex number type }}
{{dsc end}}

===Functions===
{{dsc begin}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith2}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith3}}
{{dsc inc | cpp/numeric/complex/dsc operator_cmp}}
{{dsc inc | cpp/numeric/complex/dsc operator_ltltgtgt}}
{{dsc inc | cpp/numeric/complex/dsc real2}}
{{dsc inc | cpp/numeric/complex/dsc imag2}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/complex/dsc arg}}
{{dsc inc | cpp/numeric/complex/dsc norm}}
{{dsc inc | cpp/numeric/complex/dsc conj}}
{{dsc inc | cpp/numeric/complex/dsc proj}}
{{dsc inc | cpp/numeric/complex/dsc polar}}

{{dsc h2 | Exponential functions}}
{{dsc inc | cpp/numeric/complex/dsc exp}}
{{dsc inc | cpp/numeric/complex/dsc log}}
{{dsc inc | cpp/numeric/complex/dsc log10}}

{{dsc h2 | Power functions}}
{{dsc inc | cpp/numeric/complex/dsc pow}}
{{dsc inc | cpp/numeric/complex/dsc sqrt}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | cpp/numeric/complex/dsc sin}}
{{dsc inc | cpp/numeric/complex/dsc cos}}
{{dsc inc | cpp/numeric/complex/dsc tan}}
{{dsc inc | cpp/numeric/complex/dsc asin}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc inc | cpp/numeric/complex/dsc atan}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | cpp/numeric/complex/dsc sinh}}
{{dsc inc | cpp/numeric/complex/dsc cosh}}
{{dsc inc | cpp/numeric/complex/dsc tanh}}
{{dsc inc | cpp/numeric/complex/dsc asinh}}
{{dsc inc | cpp/numeric/complex/dsc acosh}}
{{dsc inc | cpp/numeric/complex/dsc atanh}}
{{dsc end}}


===Synopsis===
{{source|

namespace std {
    
    template&lt;class T&gt; class complex;
    
    template&lt;&gt; class complex&lt;float&gt;;
    template&lt;&gt; class complex&lt;double&gt;;
    template&lt;&gt; class complex&lt;long double&gt;;
    
    // operators:
    template&lt;class T&gt; complex&lt;T&gt; operator+(
        const complex&lt;T&gt;&amp;, const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator+(const complex&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator+(const T&amp;, const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; operator-(
        const complex&lt;T&gt;&amp;, const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator-(const complex&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator-(const T&amp;, const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; operator*(
        const complex&lt;T&gt;&amp;, const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator*(const complex&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator*(const T&amp;, const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; operator/(
        const complex&lt;T&gt;&amp;, const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator/(const complex&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator/(const T&amp;, const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; operator+(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; operator-(const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; bool operator{{=}}{{=}}(
        const complex&lt;T&gt;&amp;, const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; bool operator{{=}}{{=}}(const complex&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; bool operator{{=}}{{=}}(const T&amp;, const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; bool operator!{{=}}(const complex&lt;T&gt;&amp;, const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; bool operator!{{=}}(const complex&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; bool operator!{{=}}(const T&amp;, const complex&lt;T&gt;&amp;);
    
    template&lt;class T, class charT, class traits&gt;
    basic_istream&lt;charT, traits&gt;&amp;
    operator&gt;&gt;(basic_istream&lt;charT, traits&gt;&amp;, complex&lt;T&gt;&amp;);
    
    template&lt;class T, class charT, class traits&gt;
    basic_ostream&lt;charT, traits&gt;&amp;
    operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp;, const complex&lt;T&gt;&amp;);
    
    // values:
    template&lt;class T&gt; T real(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; T imag(const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; T abs(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; T arg(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; T norm(const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; conj(const complex&lt;T&gt;&amp;);
    template &lt;class T&gt; complex&lt;T&gt; proj(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; polar(const T&amp;, const T&amp; {{=}} 0);
    
    // transcendentals:
    template&lt;class T&gt; complex&lt;T&gt; acos(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; asin(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; atan(const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; acosh(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; asinh(const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; atanh(const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; cos  (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; cosh (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; exp  (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; log  (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; log10(const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; pow(const complex&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; complex&lt;T&gt; pow(const complex&lt;T&gt;&amp;, const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; pow(const T&amp;, const complex&lt;T&gt;&amp;);
    
    template&lt;class T&gt; complex&lt;T&gt; sin    (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; sinh   (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; sqrt   (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; tan    (const complex&lt;T&gt;&amp;);
    template&lt;class T&gt; complex&lt;T&gt; tanh   (const complex&lt;T&gt;&amp;);
    
    
}

}}



====Class {{lc|std::complex}}====
{{source|

template&lt;class T&gt;
class complex {
public:
    typedef T value_type;
    complex(const T&amp; re {{=}} T(), const T&amp; im {{=}} T());
    complex(const complex&amp;);
    template&lt;class X&gt; complex(const complex&lt;X&gt;&amp;);
    
    T real() const;
    void real(T);
    T imag() const;
    void imag(T);
    
    complex&lt;T&gt;&amp; operator{{=}} (const T&amp;);
    complex&lt;T&gt;&amp; operator+{{=}}(const T&amp;);
    complex&lt;T&gt;&amp; operator-{{=}}(const T&amp;);
    complex&lt;T&gt;&amp; operator*{{=}}(const T&amp;);
    complex&lt;T&gt;&amp; operator/{{=}}(const T&amp;);
    
    complex&amp; operator{{=}}(const complex&amp;);     
    template&lt;class X&gt; complex&lt;T&gt;&amp; operator{{=}} (const complex&lt;X&gt;&amp;);   
    template&lt;class X&gt; complex&lt;T&gt;&amp; operator+{{=}}(const complex&lt;X&gt;&amp;);   
    template&lt;class X&gt; complex&lt;T&gt;&amp; operator-{{=}}(const complex&lt;X&gt;&amp;);   
    template&lt;class X&gt; complex&lt;T&gt;&amp; operator*{{=}}(const complex&lt;X&gt;&amp;);   
    template&lt;class X&gt; complex&lt;T&gt;&amp; operator/{{=}}(const complex&lt;X&gt;&amp;);   
    
};

}}

===={{lc|std::complex}} specializations====
{{source|
template&lt;&gt; class complex&lt;float&gt; {
public:
    typedef float value_type;
    
    constexpr complex(float re {{=}} 0.0f, float im {{=}} 0.0f);
    explicit constexpr complex(const complex&lt;double&gt;&amp;);
    explicit constexpr complex(const complex&lt;long double&gt;&amp;);
    
    constexpr float real();
    void real(float);
    constexpr float imag();
    void imag(float);
    
    complex&lt;float&gt;&amp; operator{{=}} (float);
    complex&lt;float&gt;&amp; operator+{{=}}(float);
    complex&lt;float&gt;&amp; operator-{{=}}(float);
    complex&lt;float&gt;&amp; operator*{{=}}(float);
    complex&lt;float&gt;&amp; operator/{{=}}(float);
    
    complex&lt;float&gt;&amp; operator{{=}}(const complex&lt;float&gt;&amp;);
    template&lt;class X&gt; complex&lt;float&gt;&amp; operator{{=}} (const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;float&gt;&amp; operator+{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;float&gt;&amp; operator-{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;float&gt;&amp; operator*{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;float&gt;&amp; operator/{{=}}(const complex&lt;X&gt;&amp;);
};

template&lt;&gt; class complex&lt;double&gt; {
public:
    typedef double value_type;
    
    constexpr complex(double re {{=}} 0.0, double im {{=}} 0.0);
    constexpr complex(const complex&lt;float&gt;&amp;);
    explicit constexpr complex(const complex&lt;long double&gt;&amp;);
    
    constexpr double real();
    void real(double);
    constexpr double imag();
    void imag(double);
    
    complex&lt;double&gt;&amp; operator{{=}} (double);
    complex&lt;double&gt;&amp; operator+{{=}}(double);
    complex&lt;double&gt;&amp; operator-{{=}}(double);
    complex&lt;double&gt;&amp; operator*{{=}}(double);
    complex&lt;double&gt;&amp; operator/{{=}}(double);
    
    complex&lt;double&gt;&amp; operator{{=}}(const complex&lt;double&gt;&amp;);
    template&lt;class X&gt; complex&lt;double&gt;&amp; operator{{=}} (const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;double&gt;&amp; operator+{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;double&gt;&amp; operator-{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;double&gt;&amp; operator*{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;double&gt;&amp; operator/{{=}}(const complex&lt;X&gt;&amp;);
};

template&lt;&gt; class complex&lt;long double&gt; {
public:
    typedef long double value_type;
    
    constexpr complex(long double re {{=}} 0.0L, long double im {{=}} 0.0L);
    constexpr complex(const complex&lt;float&gt;&amp;);
    constexpr complex(const complex&lt;double&gt;&amp;);
    
    constexpr long double real();
    void real(long double);
    constexpr long double imag();
    void imag(long double);
    
    complex&lt;long double&gt;&amp; operator{{=}}(const complex&lt;long double&gt;&amp;);
    complex&lt;long double&gt;&amp; operator{{=}} (long double);
    complex&lt;long double&gt;&amp; operator+{{=}}(long double);
    complex&lt;long double&gt;&amp; operator-{{=}}(long double);
    complex&lt;long double&gt;&amp; operator*{{=}}(long double);
    complex&lt;long double&gt;&amp; operator/{{=}}(long double);
    
    template&lt;class X&gt; complex&lt;long double&gt;&amp; operator{{=}} (const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;long double&gt;&amp; operator+{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;long double&gt;&amp; operator-{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;long double&gt;&amp; operator*{{=}}(const complex&lt;X&gt;&amp;);
    template&lt;class X&gt; complex&lt;long double&gt;&amp; operator/{{=}}(const complex&lt;X&gt;&amp;);
    
};
}}</text>
      <sha1>jfpqet884fwk934z3pi4lnhe459ubq4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/condition variable</title>
    <ns>0</ns>
    <id>12853</id>
    <revision>
      <id>63995</id>
      <timestamp>2013-08-06T01:15:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3713">{{cpp/header/title|condition_variable}}
{{cpp/header/navbar}}
This header is part of the [[cpp/thread|thread support]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc class | cpp/thread/condition_variable | provides a condition variable associated with a {{lc|std::unique_lock}} | notes={{mark c++11}}}}
{{dsc class | cpp/thread/condition_variable_any | provides a condition variable associated with any lock type | notes={{mark c++11}}}}
{{dsc enum | cpp/thread/cv_status | lists the possible results of timed waits on condition variables | notes={{mark c++11}}}}
{{dsc h1|Functions}}
{{dsc fun   | cpp/thread/notify_all_at_thread_exit | schedules a call to {{tt|notify_all}} to be invoked when this thread is completely finished | notes={{mark c++11}}}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {

    class condition_variable;
    class condition_variable_any;

    void notify_all_at_thread_exit(condition_variable&amp; cond, unique_lock&lt;mutex&gt; lk);

    enum class cv_status {
        no_timeout,
        timeout
    };
}
}}

====Class {{lc|std::condition_variable}}====
{{source|1=
class condition_variable {
 public:
    condition_variable();
    ~condition_variable();
    condition_variable(const condition_variable&amp;) = delete;
    condition_variable&amp; operator=(const condition_variable&amp;) = delete;

    void notify_one() noexcept;
    void notify_all() noexcept;
    void wait(unique_lock&lt;mutex&gt;&amp; lock);
    template &lt;class Predicate&gt;
        void wait(unique_lock&lt;mutex&gt;&amp; lock, Predicate pred);
    template &lt;class Clock, class Duration&gt;
        cv_status wait_until(unique_lock&lt;mutex&gt;&amp; lock,
                             const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    template &lt;class Clock, class Duration, class Predicate&gt;
        bool wait_until(unique_lock&lt;mutex&gt;&amp; lock,
                        const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time,
                        Predicate pred);
    template &lt;class Rep, class Period&gt;
        cv_status wait_for(unique_lock&lt;mutex&gt;&amp; lock,
                           const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Rep, class Period, class Predicate&gt;
        bool wait_for(unique_lock&lt;mutex&gt;&amp; lock,
                      const chrono::duration&lt;Rep, Period&gt;&amp; rel_time,
                      Predicate pred);

    typedef implementation-defined native_handle_type;
    native_handle_type native_handle();
};
}}

====Class {{lc|std::condition_variable_any}}====
{{source|1=
class condition_variable_any {
 public:
    condition_variable_any();
    ~condition_variable_any();
    condition_variable_any(const condition_variable_any&amp;) = delete;
    condition_variable_any&amp; operator=(const condition_variable_any&amp;) = delete;

    void notify_one() noexcept;
    void notify_all() noexcept;
    template &lt;class Lock&gt;
        void wait(Lock&amp; lock);
    template &lt;class Lock, class Predicate&gt;
        void wait(Lock&amp; lock, Predicate pred);
    template &lt;class Lock, class Clock, class Duration&gt;
        cv_status wait_until(Lock&amp; lock,
                             const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    template &lt;class Lock, class Clock, class Duration, class Predicate&gt;
        bool wait_until(Lock&amp; lock,
                        const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time,
                        Predicate pred);
    template &lt;class Lock, class Rep, class Period&gt;
        cv_status wait_for(Lock&amp; lock,
                           const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Lock, class Rep, class Period, class Predicate&gt;
        bool wait_for(Lock&amp; lock,
                      const chrono::duration&lt;Rep, Period&gt;&amp; rel_time,
                      Predicate pred);
};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/csetjmp</title>
    <ns>0</ns>
    <id>9679</id>
    <revision>
      <id>88770</id>
      <parentid>88151</parentid>
      <timestamp>2016-12-11T02:43:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>&quot;see description&quot; for the std's &quot;see also&quot;</comment>
      <text xml:space="preserve" bytes="553">{{cpp/header/title|csetjmp}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/utility/program|program support]] library.
{{dsc begin}}
{{dsc h1 | Types}}
{{dsc inc | cpp/utility/program/dsc jmp_buf}}
{{dsc h1 | Macros}}
{{dsc inc | cpp/utility/program/dsc setjmp}}
{{dsc h1 | Functions}}
{{dsc inc | cpp/utility/program/dsc longjmp}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  using jmp_buf = /* see description */ ;
  [[noreturn]] void longjmp(jmp_buf env, int val);
}
#define setjmp(env) /* see description */
}}</text>
      <sha1>cgz9abbad1ivfoq54v5e0cnyiws89b0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/csignal</title>
    <ns>0</ns>
    <id>9680</id>
    <revision>
      <id>88769</id>
      <parentid>88150</parentid>
      <timestamp>2016-12-11T02:42:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>n4618 synop update</comment>
      <text xml:space="preserve" bytes="1165">{{cpp/header/title|csignal}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/utility/program|program support]] library.

{{dsc begin}}
{{dsc h1|Typedefs}}
{{dsc typedef | cpp/utility/program/sig_atomic_t | the integer type that can be accessed as an atomic entity from an asynchronous signal handler}}
{{dsc h1|Macros}}
{{dsc inc | cpp/utility/program/dsc SIG_types}}
{{dsc inc | cpp/utility/program/dsc SIG_strategies}}
{{dsc inc | cpp/utility/program/dsc SIG_ERR}}
{{dsc h1|Functions}}
{{dsc inc | cpp/utility/program/dsc signal}}
{{dsc inc | cpp/utility/program/dsc raise}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  using sig_atomic_t = /*see description*/ ;
  extern &quot;C&quot; using /*signal-handler*/ = void(int); // exposition only
  /*signal-handler*/ * signal(int sig, /*signal-handler*/ * func);
}
#define SIG_DFL /*see description*/
#define SIG_ERR /*see description*/
#define SIG_IGN /*see description*/
#define SIGABRT /*see description*/
#define SIGFPE /*see description*/
#define SIGILL /*see description*/
#define SIGINT /*see description*/
#define SIGSEGV /*see description*/
#define SIGTERM /*see description*/
}}</text>
      <sha1>lcpkacwbpivjl35ejwie8hy3pi9xwsq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstdalign</title>
    <ns>0</ns>
    <id>9681</id>
    <revision>
      <id>90085</id>
      <parentid>49556</parentid>
      <timestamp>2017-02-06T06:35:18Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="297">{{cpp/header/title|cstdalign}}
{{cpp/header/navbar}}
{{cpp/header/c}}

C compatibility header.
{{dsc begin}}
{{dsc macro const | __alignas_is_defined | nolink=true | C compatibility macro constant, expands to integer constant {{c|1}}|notes={{mark c++11}}}}
{{dsc end}}

[[zh:cpp/header/cstdalign]]</text>
      <sha1>nre23vovsdvmq2ft53hptmgedyaofup</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstdarg</title>
    <ns>0</ns>
    <id>9683</id>
    <revision>
      <id>88771</id>
      <parentid>88152</parentid>
      <timestamp>2016-12-11T02:44:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>&quot;see description&quot; for std's &quot;see also&quot;</comment>
      <text xml:space="preserve" bytes="713">{{cpp/header/title|cstdarg}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header provides support for [[cpp/utility/variadic|C-style variadic functions]].

{{dsc begin}}
{{dsc h1 | Types}}
{{dsc inc | cpp/utility/variadic/dsc va_list}}
{{dsc h1 | Macros}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc inc | cpp/utility/variadic/dsc va_arg}}
{{dsc inc | cpp/utility/variadic/dsc va_copy}}
{{dsc inc | cpp/utility/variadic/dsc va_end}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  using va_list = /*see description*/ ;
}
#define va_arg(V, P) /*see description*/
#define va_copy(VDST, VSRC) /*see description*/
#define va_end(V) /*see description*/
#define va_start(V, P) /*see description*/
}}</text>
      <sha1>ibgybyphf5vm61m53ii7cn9tegv39bg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstdbool</title>
    <ns>0</ns>
    <id>9684</id>
    <revision>
      <id>90088</id>
      <parentid>49558</parentid>
      <timestamp>2017-02-06T06:44:21Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="447">{{cpp/header/title|cstdbool}}
{{cpp/header/navbar}}
{{cpp/header/c}}

Compatibility header, in C defines [[cpp/keyword/true|{{c|true}}]], [[cpp/keyword/false|{{c|false}}]] and [[cpp/keyword/bool|{{c|bool}}]] which are keywords in C++.

{{dsc begin}}
{{dsc macro const | __bool_true_false_are_defined | nolink=true | C compatibility macro constant, expands to integer constant {{c|1}}|notes={{mark c++11}}}}
{{dsc end}}


[[zh:cpp/header/cstdbool]]</text>
      <sha1>jojovasyiwi5ixc9q40mzizjd1p7uz7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstddef</title>
    <ns>0</ns>
    <id>9661</id>
    <revision>
      <id>91071</id>
      <parentid>91070</parentid>
      <timestamp>2017-03-17T09:59:22Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>fix format</comment>
      <text xml:space="preserve" bytes="2034">{{cpp/header/title|cstddef}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/utility|utility]] library.

===Macros===
{{dsc begin}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc inc | cpp/types/dsc offsetof}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc inc | cpp/types/dsc ptrdiff_t}}
{{dsc inc | cpp/types/dsc nullptr_t}}
{{dsc inc | cpp/types/dsc max_align_t}}
{{dsc inc | cpp/types/dsc byte}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
    using ptrdiff_t = /*see definition*/ ;
    using size_t = /*see definition*/ ;
    using max_align_t = /*see definition*/ ;
    using nullptr_t = decltype(nullptr);

    enum class byte : unsigned char {} ;
    template &lt;class IntegerType&gt;
    constexpr byte&amp; operator&lt;&lt;=(byte&amp; b, IntegerType shift) noexcept;
    template &lt;class IntegerType&gt;
    constexpr byte operator&lt;&lt;(byte b, IntegerType shift) noexcept;
    template &lt;class IntegerType&gt;
    constexpr byte&amp; operator&gt;&gt;=(byte&amp; b, IntegerType shift) noexcept;
    template &lt;class IntegerType&gt;
    constexpr byte operator&gt;&gt;(byte b, IntegerType shift) noexcept;

    constexpr byte&amp; operator{{!}}=(byte&amp; l, byte r) noexcept;
    constexpr byte operator{{!}}(byte l, byte r) noexcept;
    constexpr byte&amp; operator&amp;=(byte&amp; l, byte r) noexcept;
    constexpr byte operator&amp;(byte l, byte r) noexcept;
    constexpr byte&amp; operator^=(byte&amp; l, byte r) noexcept;
    constexpr byte operator^(byte l, byte r) noexcept;
    constexpr byte operator~(byte b) noexcept;
    template &lt;class IntegerType&gt;
    constexpr IntegerType to_integer(byte b) noexcept; 
}
#define NULL /*see definition*/
#define offsetof(P, D) /*see definition*/
}}

===Notes===
* {{lc|NULL}} is also defined in the following headers:
** {{header|clocale}}
** {{header|ctime}}
** {{header|cstring}}
** {{header|cstdio}}
** {{header|cwchar}}
* {{lc|std::size_t}} is also defined in the following headers:
** {{header|ctime}}
** {{header|cstring}}
** {{header|cstdio}}
** {{header|cwchar}}

[[zh:cpp/header/cstddef]]</text>
      <sha1>pt68rbtu40rl9hlvjd6f8z55gicnkmg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstdef</title>
    <ns>0</ns>
    <id>9749</id>
    <redirect title="cpp/header/cstddef" />
    <revision>
      <id>45258</id>
      <timestamp>2012-12-12T21:02:10Z</timestamp>
      <contributor>
        <username>Bazzy</username>
        <id>405</id>
      </contributor>
      <comment>moved [[cpp/header/cstdef]] to [[cpp/header/cstddef]]: typo</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/header/cstddef]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstdint</title>
    <ns>0</ns>
    <id>9665</id>
    <revision>
      <id>89001</id>
      <parentid>85308</parentid>
      <timestamp>2016-12-20T21:30:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>updated to 4618, and templatized</comment>
      <text xml:space="preserve" bytes="3953">{{cpp/header/title|cstdint}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/types|type support]] library, providing [[cpp/types/integer|fixed width integer types]] and part of [[cpp/types/climits|C numeric limits interface]].

===Types===
{{dsc begin}}
{{dsc header | cstdint}}
{{dsc inc | cpp/types/dsc intN_t}}
{{dsc inc | cpp/types/dsc int_fastN_t}}
{{dsc inc | cpp/types/dsc int_leastN_t}}
{{dsc inc | cpp/types/dsc intmax_t }}
{{dsc inc | cpp/types/dsc intptr_t }}
{{dsc inc | cpp/types/dsc uintN_t}}
{{dsc inc | cpp/types/dsc uint_fastN_t}}
{{dsc inc | cpp/types/dsc uint_leastN_t}}
{{dsc inc | cpp/types/dsc uintmax_t }}
{{dsc inc | cpp/types/dsc uintptr_t }}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc header | cstdint}}
{{dsc h2 | Signed integers : minimum value}}
{{dsc inc | cpp/types/dsc INTn_MIN}}
{{dsc inc | cpp/types/dsc INT_FASTn_MIN}}
{{dsc inc | cpp/types/dsc INT_LEASTn_MIN}}
{{dsc inc | cpp/types/dsc INTPTR_MIN }}
{{dsc inc | cpp/types/dsc INTMAX_MIN }}
{{dsc h2 | Signed integers : maximum value| nolink=true }}
{{dsc inc | cpp/types/dsc INTn_MAX}}
{{dsc inc | cpp/types/dsc INT_FASTn_MAX}}
{{dsc inc | cpp/types/dsc INT_LEAST8_MAX}}
{{dsc inc | cpp/types/dsc INTPTR_MAX }}
{{dsc inc | cpp/types/dsc INTMAX_MAX }}
{{dsc h2 | Unsigned integers : maximum value| nolink=true }}
{{dsc inc | cpp/types/dsc UINTn_MAX}}
{{dsc inc | cpp/types/dsc UINT_FASTn_MAX}}
{{dsc inc | cpp/types/dsc UINT_LEASTn_MAX}}
{{dsc inc | cpp/types/dsc UINTPTR_MAX }}
{{dsc inc | cpp/types/dsc UINTMAX_MAX  }}
{{dsc h2 | Limits of other integer types}}
{{dsc inc | cpp/types/dsc PTRDIFF_MIN }}
{{dsc inc | cpp/types/dsc PTRDIFF_MAX }}
{{dsc inc | cpp/types/dsc SIZE_MAX }}
{{dsc inc | cpp/types/dsc SIG_ATOMIC_MIN }}
{{dsc inc | cpp/types/dsc SIG_ATOMIC_MAX }}
{{dsc inc | cpp/types/dsc WCHAR_MIN }}
{{dsc inc | cpp/types/dsc WCHAR_MAX }}
{{dsc inc | cpp/types/dsc WINT_MIN }}
{{dsc inc | cpp/types/dsc WINT_MAX}}
{{dsc h2 | Function macros for integer constants}}
{{dsc inc | cpp/types/dsc INTn_C}}
{{dsc inc | cpp/types/dsc INTMAX_C }}
{{dsc inc | cpp/types/dsc UINTn_C}}
{{dsc inc | cpp/types/dsc UINTMAX_C }}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  using int8_t = /*signed integer type*/ ; // optional
  using int16_t = /*signed integer type*/ ; // optional
  using int32_t = /*signed integer type*/ ; // optional
  using int64_t = /*signed integer type*/ ; // optional
  using int_fast8_t = /*signed integer type*/ ;
  using int_fast16_t = /*signed integer type*/ ;
  using int_fast32_t = /*signed integer type*/ ;
  using int_fast64_t = /*signed integer type*/ ;
  using int_least8_t = /*signed integer type*/ ;
  using int_least16_t = /*signed integer type*/ ;
  using int_least32_t = /*signed integer type*/ ;
  using int_least64_t = /*signed integer type*/ ;
  using intmax_t = /*signed integer type*/ ;
  using intptr_t = /*signed integer type*/ ; // optional
  using uint8_t = /*unsigned integer type*/ ; // optional
  using uint16_t = /*unsigned integer type*/ ; // optional
  using uint32_t = /*unsigned integer type*/ ; // optional
  using uint64_t = /*unsigned integer type*/ ; // optional
  using uint_fast8_t = /*unsigned integer type*/ ;
  using uint_fast16_t = /*unsigned integer type*/ ;
  using uint_fast32_t = /*unsigned integer type*/ ;
  using uint_fast64_t = /*unsigned integer type*/ ;
  using uint_least8_t = /*unsigned integer type*/ ;
  using uint_least16_t = /*unsigned integer type*/ ;
  using uint_least32_t = /*unsigned integer type*/ ;
  using uint_least64_t = /*unsigned integer type*/ ;
  using uintmax_t = /*unsigned integer type*/ ;
  using uintptr_t = /*unsigned integer type*/ ; // optional
}
/* also defines macros of the form:
INT_[FAST LEAST]{8 16 32 64}_MIN
[U]INT_[FAST LEAST]{8 16 32 64}_MAX
INT{MAX PTR}_MIN
[U]INT{MAX PTR}_MAX
{PTRDIFF SIG_ATOMIC WCHAR WINT}{_MAX _MIN}
SIZE_MAX
*/
/* also defines function-like macros of the form:
[U]INT{8 16 32 64 MAX}_C
*/
}}</text>
      <sha1>42peijfdpv1nlslt30zu9fvx0qx5ere</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstdio</title>
    <ns>0</ns>
    <id>9758</id>
    <revision>
      <id>91187</id>
      <parentid>85196</parentid>
      <timestamp>2017-03-24T17:48:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>synopsis</comment>
      <text xml:space="preserve" bytes="6626">{{cpp/header/title|cstdio}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/io/c|C-style input/output]] library.

===Types===
{{dsc begin}}
{{dsc | {{ltt|cpp/io/c#Types|FILE}} | type, capable of holding all information needed to control a C I/O stream}}
{{dsc | {{ltt|cpp/io/c#Types|fpos_t}} | type, capable of uniquely specifying a position in a file}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc end}}

===Macros===

{{dsc begin}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc macro const | stdin | nolink=true| title=stdin&lt;br&gt;stdout&lt;br&gt;stderr | expression of type {{c|FILE*}} associated with the input stream&lt;br&gt;expression of type {{c|FILE*}} associated with the output stream&lt;br&gt;expression of type {{c|FILE*}} associated with the error output stream}}
{{dsc macro const | EOF | nolink=true| integer constant expression of type {{c|int}} and negative value }}
{{dsc macro const | FOPEN_MAX | nolink=true| number of files that can be open simultaneously }}
{{dsc macro const | FILENAME_MAX | nolink=true| size needed for an array of char to hold the longest supported file name}}
{{dsc macro const | BUFSIZ | nolink=true| size of the buffer used by {{lc|std::setbuf}} }}
{{dsc macro const | _IOFBF| nolink=true| title=_IOFBF&lt;br&gt;_IOLBF&lt;br&gt;_IONBF|argument to {{lc|std::setbuf}} indicating fully buffered I/O&lt;br&gt;argument to {{lc|std::setbuf}} indicating line buffered I/O&lt;br&gt;argument to {{lc|std::setbuf}} indicating unbuffered I/O}}
{{dsc macro const | SEEK_SET | nolink=true| title=SEEK_SET&lt;br&gt;SEEK_CUR&lt;br&gt;SEEK_END | argument to {{lc|std::fseek}} indicating seeking from beginning of the file&lt;br&gt;argument to {{lc|std::fseek}} indicating seeking from the current file position&lt;br&gt;argument to {{lc|std::fseek}} indicating seeking from end of the file}}
{{dsc macro const | TMP_MAX | nolink=true| maximum number of unique filenames that can be generated by {{lc|std::tmpnam}} }}
{{dsc macro const | L_tmpnam |nolink=true|  size needed for an array of char to hold the result of {{lc|std::tmpnam}} }}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | File access}}
{{dsc inc | cpp/io/c/dsc fopen}}
{{dsc inc | cpp/io/c/dsc freopen}}
{{dsc inc | cpp/io/c/dsc fclose}}
{{dsc inc | cpp/io/c/dsc fflush}}
{{dsc inc | cpp/io/c/dsc setbuf}}
{{dsc inc | cpp/io/c/dsc setvbuf}}

{{dsc h2 | Direct input/output}}
{{dsc inc | cpp/io/c/dsc fread}}
{{dsc inc | cpp/io/c/dsc fwrite}}

{{dsc h2 | Unformatted input/output}}
{{dsc h2 | {{small|Narrow character}}}}
{{dsc inc | cpp/io/c/dsc fgetc}}
{{dsc inc | cpp/io/c/dsc fgets}}
{{dsc inc | cpp/io/c/dsc fputc}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc inc | cpp/io/c/dsc getchar}}
{{dsc inc | cpp/io/c/dsc gets}}
{{dsc inc | cpp/io/c/dsc putchar}}
{{dsc inc | cpp/io/c/dsc puts}}
{{dsc inc | cpp/io/c/dsc ungetc}}

{{dsc h2 | Formatted input/output}}
{{dsc h2 | {{small|Narrow/multibyte character}}}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/io/c/dsc vfscanf}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/io/c/dsc vfprintf}}

{{dsc h2 | File positioning}}
{{dsc inc | cpp/io/c/dsc ftell}}
{{dsc inc | cpp/io/c/dsc fgetpos}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc inc | cpp/io/c/dsc fsetpos}}
{{dsc inc | cpp/io/c/dsc rewind}}

{{dsc h2 | Error handling}}
{{dsc inc | cpp/io/c/dsc clearerr}}
{{dsc inc | cpp/io/c/dsc feof}}
{{dsc inc | cpp/io/c/dsc ferror}}
{{dsc inc | cpp/io/c/dsc perror}}

{{dsc h2 | Operations on files}}
{{dsc inc | cpp/io/c/dsc remove}}
{{dsc inc | cpp/io/c/dsc rename}}
{{dsc inc | cpp/io/c/dsc tmpfile}}
{{dsc inc | cpp/io/c/dsc tmpnam}}
{{dsc end}}

===Notes===
* {{lc|NULL}} is also defined in the following headers:
** {{header|clocale}}
** {{header|ctime}}
** {{header|cstddef}}
** {{header|cstring}}
** {{header|cwchar}}
** {{header|cstdlib}}
* {{lc|std::size_t}} is also defined in the following headers:
** {{header|ctime}}
** {{header|cstddef}}
** {{header|cstring}}
** {{header|cwchar}}
** {{header|cstdlib}}

===Synopsis===
{{source|1=
namespace std {
  using size_t = /* see definition */;
  using FILE = /* see definition */ ;
  using fpos_t = /* see definition */ ;
}

#define NULL /* see definition */
#define _IOFBF /* see definition */
#define _IOLBF /* see definition */
#define _IONBF /* see definition */
#define BUFSIZ /* see definition */
#define EOF /* see definition */
#define FOPEN_MAX /* see definition */
#define FILENAME_MAX /* see definition */
#define L_tmpnam /* see definition */
#define SEEK_CUR /* see definition */
#define SEEK_END /* see definition */
#define SEEK_SET /* see definition */
#define TMP_MAX /* see definition */
#define stderr /* see definition */
#define stdin /* see definition */
#define stdout /* see definition */

namespace std {
  int remove(const char* filename);
  int rename(const char* old, const char* new);
  FILE* tmpfile();
  char* tmpnam(char* s);
  int fclose(FILE* stream);
  int fflush(FILE* stream);
  FILE* fopen(const char* filename, const char* mode);
  FILE* freopen(const char* filename, const char* mode, FILE* stream);
  void setbuf(FILE* stream, char* buf);
  int setvbuf(FILE* stream, char* buf, int mode, size_t size);
  int fprintf(FILE* stream, const char* format, ...);
  int fscanf(FILE* stream, const char* format, ...);
  int printf(const char* format, ...);
  int scanf(const char* format, ...);
  int snprintf(char* s, size_t n, const char* format, ...);
  int sprintf(char* s, const char* format, ...);
  int sscanf(const char* s, const char* format, ...);
  int vfprintf(FILE* stream, const char* format, va_list arg);
  int vfscanf(FILE* stream, const char* format, va_list arg);
  int vprintf(const char* format, va_list arg);
  int vscanf(const char* format, va_list arg);
  int vsnprintf(char* s, size_t n, const char* format, va_list arg);
  int vsprintf(char* s, const char* format, va_list arg);
  int vsscanf(const char* s, const char* format, va_list arg);
  int fgetc(FILE* stream);
  char* fgets(char* s, int n, FILE* stream);
  int fputc(int c, FILE* stream);
  int fputs(const char* s, FILE* stream);
  int getc(FILE* stream);
  int getchar();
  int putc(int c, FILE* stream);
  int putchar(int c);
  int puts(const char* s);
  int ungetc(int c, FILE* stream);
  size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
  size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
  int fgetpos(FILE* stream, fpos_t* pos);
  int fseek(FILE* stream, long int offset, int whence);
  int fsetpos(FILE* stream, const fpos_t* pos);
  long int ftell(FILE* stream);
  void rewind(FILE* stream);
  void clearerr(FILE* stream);
  int feof(FILE* stream);
  int ferror(FILE* stream);
  void perror(const char* s);
}
}}</text>
      <sha1>awbuu2yidgrnhyxm8dqgttmn90cj580</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstdlib</title>
    <ns>0</ns>
    <id>9678</id>
    <revision>
      <id>88768</id>
      <parentid>88389</parentid>
      <timestamp>2016-12-11T02:11:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>&quot;see description&quot; is the better replacement for the standard's &quot;see below&quot; in the header pages. re-copied synop from n4618 to match its layout</comment>
      <text xml:space="preserve" bytes="6092">{{cpp/header/title|cstdlib}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header provides miscellaneous utilities. Symbols defined here are used by several library components.

===Macro constants===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc EXIT_status}}
{{dsc macro const | MB_CUR_MAX | maximum number of bytes in a multibyte character with the current locale | nolink=true }}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc inc | cpp/numeric/random/dsc RAND_MAX}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc div_t}}
{{dsc inc | cpp/numeric/math/dsc ldiv_t}}
{{dsc inc | cpp/numeric/math/dsc lldiv_t}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | Process control}}
{{dsc inc | cpp/utility/program/dsc abort}}
{{dsc inc | cpp/utility/program/dsc exit}}
{{dsc inc | cpp/utility/program/dsc quick_exit}}
{{dsc inc | cpp/utility/program/dsc _Exit}}
{{dsc inc | cpp/utility/program/dsc atexit}}
{{dsc inc | cpp/utility/program/dsc at_quick_exit}}
{{dsc inc | cpp/utility/program/dsc system}}
{{dsc inc | cpp/utility/program/dsc getenv}}

{{dsc h2 | Memory management}}
{{dsc fun | cpp/memory/c/malloc | allocates memory}}
{{dsc fun | cpp/memory/c/aligned_alloc | allocates aligned memory|notes={{mark c++17}}}}
{{dsc fun | cpp/memory/c/calloc | allocates and zeroes memory}}
{{dsc fun | cpp/memory/c/realloc | expands previously allocated memory block}}
{{dsc fun | cpp/memory/c/free | deallocates previously allocated memory}}

{{dsc h2 | Numeric string conversion}}
{{dsc inc | cpp/string/byte/dsc atof}}
{{dsc inc | cpp/string/byte/dsc atoi}}
{{dsc inc | cpp/string/byte/dsc strtol}}
{{dsc inc | cpp/string/byte/dsc strtoul}}
{{dsc inc | cpp/string/byte/dsc strtof}}

{{dsc h2 | Wide string manipulation}}
{{dsc inc | cpp/string/multibyte/dsc mblen}}
{{dsc inc | cpp/string/multibyte/dsc mbtowc}}
{{dsc inc | cpp/string/multibyte/dsc wctomb}}
{{dsc inc | cpp/string/multibyte/dsc mbstowcs}}
{{dsc inc | cpp/string/multibyte/dsc wcstombs}}

{{dsc h2 | Miscellaneous algorithms and math}}
{{dsc inc | cpp/numeric/random/dsc rand}}
{{dsc inc | cpp/numeric/random/dsc srand}}
{{dsc inc | cpp/algorithm/dsc qsort}}
{{dsc inc | cpp/algorithm/dsc bsearch}}
{{dsc inc | cpp/numeric/math/dsc abs}}
{{dsc inc | cpp/numeric/math/dsc div}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  using size_t = /*see description*/ ;
  using div_t = /*see description*/ ;
  using ldiv_t = /*see description*/ ;
  using lldiv_t = /*see description*/ ;
}
#define NULL /*see description*/
#define EXIT_FAILURE /*see description*/
#define EXIT_SUCCESS /*see description*/
#define RAND_MAX /*see description*/
#define MB_CUR_MAX /*see description*/
namespace std {
  // Exposition-only function type aliases
  extern &quot;C&quot; using /*c-atexit-handler*/ = void(); // exposition only
  extern &quot;C++&quot; using /*atexit-handler*/ = void(); // exposition only
  extern &quot;C&quot; using /*c-compare-pred*/ = int(const void* , const void*); // exposition only
  extern &quot;C++&quot; using /*compare-pred*/ = int(const void* , const void*); // exposition only
  // start and termination
  [[noreturn]] void abort() noexcept;
  int atexit(/*c-atexit-handler*/ * func) noexcept;
  int atexit(/*atexit-handler*/ * func) noexcept;
  int at_quick_exit(/*c-atexit-handler*/ * func) noexcept;
  int at_quick_exit(/*atexit-handler*/ * func) noexcept;
  [[noreturn]] void exit(int status);
  [[noreturn]] void _Exit(int status) noexcept;
  [[noreturn]] void quick_exit(int status) noexcept;
  char* getenv(const char* name);
  int system(const char* string);
  // C library memory allocation
  void* aligned_alloc(size_t alignment, size_t size);
  void* calloc(size_t nmemb, size_t size);
  void free(void* ptr);
  void* malloc(size_t size);
  void* realloc(void* ptr, size_t size);
  double atof(const char* nptr);
  int atoi(const char* nptr);
  long int atol(const char* nptr);
  long long int atoll(const char* nptr);
  double strtod(const char* nptr, char** endptr);
  float strtof(const char* nptr, char** endptr);
  long double strtold(const char* nptr, char** endptr);
  long int strtol(const char* nptr, char** endptr, int base);
  long long int strtoll(const char* nptr, char** endptr, int base);
  unsigned long int strtoul(const char* nptr, char** endptr, int base);
  unsigned long long int strtoull(const char* nptr, char** endptr, int base);
  // multibyte / wide string and character conversion functions
  int mblen(const char* s, size_t n);
  int mbtowc(wchar_t* pwc, const char* s, size_t n);
  int wctomb(char* s, wchar_t wchar);
  size_t mbstowcs(wchar_t* pwcs, const char* s, size_t n);
  size_t wcstombs(char* s, const wchar_t* pwcs, size_t n);
  // C standard library algorithms
  void* bsearch(const void* key, const void* base,
                size_t nmemb, size_t size, /*c-compare-pred*/ * compar);
  void* bsearch(const void* key, const void* base,
                size_t nmemb, size_t size, /*compare-pred*/ * compar);
  void qsort(void* base, size_t nmemb, size_t size, /*c-compare-pred*/ * compar);
  void qsort(void* base, size_t nmemb, size_t size, /*compare-pred*/ * compar);
  // low-quality random number generation
  int rand();
  void srand(unsigned int seed);
  // absolute values
  int abs(int j);
  long int abs(long int j);
  long long int abs(long long int j);
  float abs(float j);
  double abs(double j);
  long double abs(long double j);
  long int labs(long int j);
  long long int llabs(long long int j);
  div_t div(int numer, int denom);
  ldiv_t div(long int numer, long int denom);
  lldiv_t div(long long int numer, long long int denom); 
  ldiv_t ldiv(long int numer, long int denom);
  lldiv_t lldiv(long long int numer, long long int denom);
}
}}

===See Also===
* [[cpp/utility/program|Program support utilities]]
* [[cpp/numeric/random|Pseudo-random number generation]]
* [[cpp/numeric/math|Common mathematical functions]]
* [[cpp/memory/c|C memory management library]]
* [[cpp/string/byte|Null-terminated byte strings]]
* [[cpp/string/multibyte|Null-terminated multibyte strings]]
* [[cpp/algorithm|Algorithms library]]</text>
      <sha1>gkip9rqv2bub1xkdx56gfd5ljzuxtlo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cstring</title>
    <ns>0</ns>
    <id>9735</id>
    <revision>
      <id>57467</id>
      <parentid>49563</parentid>
      <timestamp>2013-06-01T05:54:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1708">{{cpp/header/title|cstring}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is for [[cpp/string/byte|C-style null-terminated byte strings]].

===Macros===
{{dsc begin}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | String manipulation}}
{{dsc inc | cpp/string/byte/dsc strcpy}}
{{dsc inc | cpp/string/byte/dsc strncpy}}
{{dsc inc | cpp/string/byte/dsc strcat}}
{{dsc inc | cpp/string/byte/dsc strncat}}
{{dsc inc | cpp/string/byte/dsc strxfrm}}

{{dsc h2 | String examination}}
{{dsc inc | cpp/string/byte/dsc strlen}}
{{dsc inc | cpp/string/byte/dsc strcmp}}
{{dsc inc | cpp/string/byte/dsc strncmp}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/string/byte/dsc strrchr}}
{{dsc inc | cpp/string/byte/dsc strspn}}
{{dsc inc | cpp/string/byte/dsc strcspn}}
{{dsc inc | cpp/string/byte/dsc strpbrk}}
{{dsc inc | cpp/string/byte/dsc strstr}}
{{dsc inc | cpp/string/byte/dsc strtok}}

{{dsc h2 | Character array manipulation}}
{{dsc inc | cpp/string/byte/dsc memchr}}
{{dsc inc | cpp/string/byte/dsc memcmp}}
{{dsc inc | cpp/string/byte/dsc memset}}
{{dsc inc | cpp/string/byte/dsc memcpy}}
{{dsc inc | cpp/string/byte/dsc memmove}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/string/byte/dsc strerror}}
{{dsc end}}


===Notes===
* {{lc|NULL}} is also defined in the following headers:
** {{header|clocale}}
** {{header|ctime}}
** {{header|cstddef}}
** {{header|cstdio}}
** {{header|cwchar}}
* {{lc|std::size_t}} is also defined in the following headers:
** {{header|ctime}}
** {{header|cstddef}}
** {{header|cstdio}}
** {{header|cwchar}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/ctgmath</title>
    <ns>0</ns>
    <id>9790</id>
    <revision>
      <id>90090</id>
      <parentid>49564</parentid>
      <timestamp>2017-02-06T06:48:05Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="250">{{cpp/header/title|ctgmath}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/numeric|numeric]] library.

===Includes===
{{dsc begin}}
{{dsc|{{header|ccomplex}}}}
{{dsc|{{header|cmath}}}}
{{dsc end}}

[[zh:cpp/header/ctgmath]]</text>
      <sha1>t3cqph22oo5ovddjglhih6vwqjety7d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/ctime</title>
    <ns>0</ns>
    <id>9685</id>
    <revision>
      <id>88158</id>
      <parentid>71946</parentid>
      <timestamp>2016-11-09T22:58:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+timespec +timespec_get, +synopsys</comment>
      <text xml:space="preserve" bytes="1779">{{cpp/header/title|ctime}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/chrono/c|C-style date and time]] library.

===Macro Constants===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc CLOCKS_PER_SEC}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/chrono/c/dsc clock_t}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc inc | cpp/chrono/c/dsc time_t}}
{{dsc inc | cpp/chrono/c/dsc tm}}
{{dsc inc | cpp/chrono/c/dsc timespec}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | Time manipulation}}
{{dsc inc | cpp/chrono/c/dsc clock}}
{{dsc inc | cpp/chrono/c/dsc time}}
{{dsc inc | cpp/chrono/c/dsc difftime}}
{{dsc inc | cpp/chrono/c/dsc timespec_get}}

{{dsc h2 | Format conversions}}
{{dsc inc | cpp/chrono/c/dsc ctime}}
{{dsc inc | cpp/chrono/c/dsc asctime}}
{{dsc inc | cpp/chrono/c/dsc strftime}}
{{dsc inc | cpp/chrono/c/dsc wcsftime}}
{{dsc inc | cpp/chrono/c/dsc gmtime}}
{{dsc inc | cpp/chrono/c/dsc localtime}}
{{dsc inc | cpp/chrono/c/dsc mktime}}
{{dsc end}}

===Synopsys===
{{source|1=
#define NULL /* see definition */
#define CLOCKS_PER_SEC /* see definition */
#define TIME_UTC /* see definition */
namespace std {
  using size_t = /* see definition */;
  using clock_t = /* see definition */;
  using time_t = /* see definition */;
  struct timespec;
  struct tm;
  clock_t clock();
  double difftime(time_t time1, time_t time0);
  time_t mktime(struct tm* timeptr);
  time_t time(time_t* timer);
  int timespec_get(timespec* ts, int base);
  char* asctime(const struct tm* timeptr);
  char* ctime(const time_t* timer);
  struct tm* gmtime(const time_t* timer);
  struct tm* localtime(const time_t* timer);
  size_t strftime(char* s, size_t maxsize, const char* format, const struct tm* timeptr);
}
}}</text>
      <sha1>le8ld4o31s8uuep809yabpg4z36hqnn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cuchar</title>
    <ns>0</ns>
    <id>9737</id>
    <revision>
      <id>57471</id>
      <parentid>49566</parentid>
      <timestamp>2013-06-01T05:54:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="658">{{cpp/header/title|cuchar}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/string/multibyte|null-terminated multibyte strings]] library.

{{dsc begin}}
{{dsc h1|Macros}}
{{dsc macro const | __STDC_UTF_16__ |  nolink=true | indicates that UTF-16 encoding is used by mbrtoc16 and c16rtomb}}
{{dsc macro const | __STDC_UTF_32__ |  nolink=true | indicates that UTF-32 encoding is used by mbrtoc32 and c32rtomb}}
{{dsc h1|Functions}}
{{dsc inc | cpp/string/multibyte/dsc mbrtoc16}}
{{dsc inc | cpp/string/multibyte/dsc c16rtomb}}
{{dsc inc | cpp/string/multibyte/dsc mbrtoc32}}
{{dsc inc | cpp/string/multibyte/dsc c32rtomb}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cwchar</title>
    <ns>0</ns>
    <id>9736</id>
    <revision>
      <id>65246</id>
      <parentid>57474</parentid>
      <timestamp>2013-09-05T15:22:23Z</timestamp>
      <contributor>
        <ip>95.220.170.37</ip>
      </contributor>
      <comment>from &quot;fom&quot; to &quot;from&quot;</comment>
      <text xml:space="preserve" bytes="3482">{{cpp/header/title|cwchar}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the null-terminated [[cpp/string/wide|wide]] and [[cpp/string/multibyte|multibyte]] strings libraries.
It also provides some [[cpp/io/c|C-style I/O]] functions and conversion from [[cpp/chrono/c|C-style Date]].

===Macros===
{{dsc begin}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc macro const | WEOF |  nolink=true | a non-character value of type wint_t used to indicate errors}}
{{dsc macro const | WCHAR_MIN |  nolink=true | the smallest valid value of wchar_t }}
{{dsc macro const | WCHAR_MAX |  nolink=true | the largest valid value of wchar_t }}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbstate_t}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc | {{tt|wint_t}} | integer type that can hold any valid wide character and at least one more value }}
{{dsc inc | cpp/chrono/c/dsc tm}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | String manipulation}}
{{dsc inc | cpp/string/wide/dsc wcscpy}}
{{dsc inc | cpp/string/wide/dsc wcsncpy}}
{{dsc inc | cpp/string/wide/dsc wcscat}}
{{dsc inc | cpp/string/wide/dsc wcsncat}}
{{dsc inc | cpp/string/wide/dsc wcsxfrm}}

{{dsc h2 | String examination}}
{{dsc inc | cpp/string/wide/dsc wcslen}}
{{dsc inc | cpp/string/wide/dsc wcscmp}}
{{dsc inc | cpp/string/wide/dsc wcsncmp}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc inc | cpp/string/wide/dsc wcsrchr}}
{{dsc inc | cpp/string/wide/dsc wcsspn}}
{{dsc inc | cpp/string/wide/dsc wcscspn}}
{{dsc inc | cpp/string/wide/dsc wcspbrk}}
{{dsc inc | cpp/string/wide/dsc wcsstr}}
{{dsc inc | cpp/string/wide/dsc wcstok}}

{{dsc h2 | Wide character array manipulation}}
{{dsc inc | cpp/string/wide/dsc wmemcpy}}
{{dsc inc | cpp/string/wide/dsc wmemmove}}
{{dsc inc | cpp/string/wide/dsc wmemcmp}}
{{dsc inc | cpp/string/wide/dsc wmemchr}}
{{dsc inc | cpp/string/wide/dsc wmemset}}

{{dsc h2 | Multibyte/wide character conversion }}
{{dsc inc | cpp/string/multibyte/dsc mbsinit}}
{{dsc inc | cpp/string/multibyte/dsc btowc}}
{{dsc inc | cpp/string/multibyte/dsc wctob}}
{{dsc inc | cpp/string/multibyte/dsc mbrlen}}
{{dsc inc | cpp/string/multibyte/dsc mbrtowc}}
{{dsc inc | cpp/string/multibyte/dsc wcrtomb}}
{{dsc inc | cpp/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | cpp/string/multibyte/dsc wcsrtombs}}

{{dsc h2 | Input/Output }}
{{dsc inc | cpp/io/c/dsc fgetwc}}
{{dsc inc | cpp/io/c/dsc fgetws}}
{{dsc inc | cpp/io/c/dsc fputwc}}
{{dsc inc | cpp/io/c/dsc fputws}}
{{dsc inc | cpp/io/c/dsc getwchar}}
{{dsc inc | cpp/io/c/dsc putwchar}}
{{dsc inc | cpp/io/c/dsc ungetwc}}
{{dsc inc | cpp/io/c/dsc fwide}}
{{dsc inc | cpp/io/c/dsc fwscanf}}
{{dsc inc | cpp/io/c/dsc vfwscanf}}
{{dsc inc | cpp/io/c/dsc fwprintf}}
{{dsc inc | cpp/io/c/dsc vfwprintf}}

{{dsc h2|String conversions}}
{{dsc inc | cpp/chrono/c/dsc wcsftime}}
{{dsc inc | cpp/string/wide/dsc wcstol}}
{{dsc inc | cpp/string/wide/dsc wcstoul}}
{{dsc inc | cpp/string/wide/dsc wcstof}}

{{dsc end}}


===Notes===
* {{lc|NULL}} is also defined in the following headers:
** {{header|cstddef}}
** {{header|cstring}}
** {{header|ctime}}
** {{header|clocale}}
** {{header|cstdio}}
* {{lc|std::size_t}} is also defined in the following headers:
** {{header|cstddef}}
** {{header|ctime}}
** {{header|cstdio}}
* {{c|std::wint_t}} is also defined in the following headers:
** {{header|cwctype}}
* {{lc|std::tm}} is also defined in the following headers:
** {{header|ctime}}</text>
      <sha1>ee61t6zx2atkupvncv5jpiwv7vpyncd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/cwctype</title>
    <ns>0</ns>
    <id>9687</id>
    <revision>
      <id>57475</id>
      <parentid>49568</parentid>
      <timestamp>2013-06-01T05:54:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1522">{{cpp/header/title|cwctype}}
{{cpp/header/navbar}}
{{cpp/header/c}}

This header is part of the [[cpp/string/wide|C-style null-terminated wide strings]] library.

===Types===
{{dsc begin}}
{{dsc | {{tt|wctrans_t}} | scalar type that holds locale-specific character mapping }}
{{dsc | {{tt|wctype_t}} | scalar type that holds locale-specific character classification }}
{{dsc | {{tt|wint_t}} | integer type that can hold any valid wide character and at least one more value }}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc macro const | WEOF |  nolink=true | a non-character value of type wint_t used to indicate errors}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | Character classification}}
{{dsc inc | cpp/string/wide/dsc iswalnum}}
{{dsc inc | cpp/string/wide/dsc iswalpha}}
{{dsc inc | cpp/string/wide/dsc iswlower}}
{{dsc inc | cpp/string/wide/dsc iswupper}}
{{dsc inc | cpp/string/wide/dsc iswdigit}}
{{dsc inc | cpp/string/wide/dsc iswxdigit}}
{{dsc inc | cpp/string/wide/dsc iswcntrl}}
{{dsc inc | cpp/string/wide/dsc iswgraph}}
{{dsc inc | cpp/string/wide/dsc iswspace}}
{{dsc inc | cpp/string/wide/dsc iswblank}}
{{dsc inc | cpp/string/wide/dsc iswprint}}
{{dsc inc | cpp/string/wide/dsc iswpunct}}
{{dsc inc | cpp/string/wide/dsc iswctype}}
{{dsc inc | cpp/string/wide/dsc wctype}}
{{dsc h2 | Character manipulation}}
{{dsc inc | cpp/string/wide/dsc towlower}}
{{dsc inc | cpp/string/wide/dsc towupper}}
{{dsc inc | cpp/string/wide/dsc towctrans}}
{{dsc inc | cpp/string/wide/dsc wctrans}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/deque</title>
    <ns>0</ns>
    <id>9674</id>
    <revision>
      <id>91143</id>
      <parentid>57478</parentid>
      <timestamp>2017-03-22T08:27:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Synopsis */</comment>
      <text xml:space="preserve" bytes="5569">{{cpp/header/title|deque}}
{{cpp/header/navbar}}
This header is part of the [[cpp/container|containers]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc deque}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | deque}}
{{dsc inc | cpp/container/dsc swap2 | deque}}
{{dsc end}}

===Synopsis===
{{source|
#include &lt;initializer_list&gt;

namespace std {
    template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt; class deque;
    
    template &lt;class T, class Allocator&gt;
        bool operator{{==}}(const deque&lt;T,Allocator&gt;&amp; x, const deque&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&lt;(const deque&lt;T,Allocator&gt;&amp; x, const deque&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator!{{=}}(const deque&lt;T,Allocator&gt;&amp; x, const deque&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&gt;(const deque&lt;T,Allocator&gt;&amp; x, const deque&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&gt;{{=}}(const deque&lt;T,Allocator&gt;&amp; x, const deque&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&lt;{{=}}(const deque&lt;T,Allocator&gt;&amp; x, const deque&lt;T,Allocator&gt;&amp; y);
        
    template &lt;class T, class Allocator&gt;
        void swap(deque&lt;T,Allocator&gt;&amp; x, deque&lt;T,Allocator&gt;&amp; y);
}

}}

===Class {{lc|std::deque}}===
{{source|

template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt;
class deque {
public:
    // types:
    typedef value_type&amp;                                         reference;
    typedef const value_type&amp;                                   const_reference;
    typedef /*implementation-defined*/                          iterator;
    typedef /*implementation-defined*/                          const_iterator; 
    typedef /*implementation-defined*/                          size_type;
    typedef /*implementation-defined*/                          difference_type;
    typedef T                                                   value_type;
    typedef Allocator                                           allocator_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer       pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt;                     reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt;               const_reverse_iterator;
    
    // construct/copy/destroy:
    explicit deque(const Allocator&amp; {{=}} Allocator());
    explicit deque(size_type n);
    deque(size_type n, const T&amp; value,const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
        deque(InputIterator first, InputIterator last,const Allocator&amp; {{=}} Allocator());
    deque(const deque&lt;T,Allocator&gt;&amp; x);
    deque(deque&amp;&amp;);
    deque(const deque&amp;, const Allocator&amp;);
    deque(deque&amp;&amp;, const Allocator&amp;);
    deque(initializer_list&lt;T&gt;, const Allocator&amp; {{=}} Allocator());
    
    ~deque();
    deque&lt;T,Allocator&gt;&amp; operator{{=}}(const deque&lt;T,Allocator&gt;&amp; x);
    deque&lt;T,Allocator&gt;&amp; operator{{=}}(deque&lt;T,Allocator&gt;&amp;&amp; x);
    deque&amp; operator{{=}}(initializer_list&lt;T&gt;);
    template &lt;class InputIterator&gt;
    void assign(InputIterator first, InputIterator last);
    void assign(size_type n, const T&amp; t);
    void assign(initializer_list&lt;T&gt;);
    allocator_type get_allocator() const noexcept;

    // iterators:
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
    
    const_iterator          cbegin() noexcept;
    const_iterator          cend() noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
    
    // capacity:
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    void      resize(size_type sz);
    void      resize(size_type sz, const T&amp; c);
    void      shrink_to_fit();
    bool      empty() const noexcept;
    
    // element access:
    reference       operator[](size_type n);
    const_reference operator[](size_type n) const;
    reference       at(size_type n);
    const_reference at(size_type n) const;
    reference       front();
    const_reference front() const;
    reference       back();
    const_reference back() const;
    
    // modifiers:
    template &lt;class... Args&gt; void emplace_front(Args&amp;&amp;... args);
    template &lt;class... Args&gt; void emplace_back(Args&amp;&amp;... args);
    template &lt;class... Args&gt; iterator emplace(const_iterator position, Args&amp;&amp;... args);
    
    void push_front(const T&amp; x);
    void push_front(T&amp;&amp; x);
    void push_back(const T&amp; x);
    void push_back(T&amp;&amp; x);

    iterator insert(const_iterator position, const T&amp; x);
    iterator insert(const_iterator position, T&amp;&amp; x);
    iterator insert(const_iterator position, size_type n, const T&amp; x);
    template &lt;class InputIterator&gt;
        iterator insert (const_iterator position, InputIterator first, 
                         InputIterator last);
    iterator insert(const_iterator position, initializer_list&lt;T&gt;);

    void pop_front();
    void pop_back();

    iterator erase(const_iterator position);
    iterator erase(const_iterator first, const_iterator last);
    void     swap(deque&lt;T,Allocator&gt;&amp;);
    void     clear() noexcept;
};

}}</text>
      <sha1>g7zgae5hpgicx1opn7z352uvyd240xc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/exception</title>
    <ns>0</ns>
    <id>9667</id>
    <revision>
      <id>57481</id>
      <parentid>49570</parentid>
      <timestamp>2013-06-01T05:54:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2980">{{cpp/header/title|exception}}
{{cpp/header/navbar}}

This header is part of the [[cpp/error|error handling]] library.

{{dsc begin}}
{{dsc h1 | Classes}}
{{dsc inc | cpp/error/dsc exception}}
{{dsc inc | cpp/error/dsc nested_exception}}
{{dsc inc | cpp/error/dsc bad_exception}}
{{dsc h1 | Typedefs}}
{{dsc inc | cpp/error/dsc unexpected}}
{{dsc inc | cpp/error/dsc unexpected_handler}}
{{dsc inc | cpp/error/dsc terminate_handler}}
{{dsc inc | cpp/error/dsc exception_ptr}}
{{dsc h1 | Functions}}
{{dsc inc | cpp/error/dsc uncaught_exception}}
{{dsc inc | cpp/error/dsc make_exception_ptr}}
{{dsc inc | cpp/error/dsc current_exception}}
{{dsc inc | cpp/error/dsc rethrow_exception}}
{{dsc inc | cpp/error/dsc throw_with_nested}}
{{dsc inc | cpp/error/dsc rethrow_if_nested}}
{{dsc inc | cpp/error/dsc terminate}}
{{dsc inc | cpp/error/dsc get_terminate}}
{{dsc inc | cpp/error/dsc set_terminate}}
{{dsc inc | cpp/error/dsc get_unexpected}}
{{dsc inc | cpp/error/dsc set_unexpected}}
{{dsc end}}

===Synopsis===
{{source|

namespace std {
    class exception;
    class bad_exception;
    class nested_exception;

    typedef void (*unexpected_handler)();
    unexpected_handler get_unexpected() noexcept;
    unexpected_handler set_unexpected(unexpected_handler f) noexcept;
    [[noreturn]] void unexpected();

    typedef void (*terminate_handler)();
    terminate_handler get_terminate() noexcept;
    terminate_handler set_terminate(terminate_handler f) noexcept;
    [[noreturn]] void terminate() noexcept;

    bool uncaught_exception() noexcept;

    typedef /*unspecified*/ exception_ptr;

    exception_ptr current_exception() noexcept;
    [[noreturn]] void rethrow_exception(exception_ptr p);
    template&lt;class E&gt; exception_ptr make_exception_ptr(E e) noexcept;

    [[noreturn]] template &lt;class T&gt; void throw_with_nested(T&amp;&amp; t);
    template &lt;class E&gt; void rethrow_if_nested(const E&amp; e);
}

}}

====Class {{lc|std::exception}}====
{{source|

class exception {
public:
    exception() noexcept;
    exception(const exception&amp;) noexcept;
    exception&amp; operator{{=}}(const exception&amp;) noexcept;
    virtual ~exception();
    virtual const char* what() const noexcept;
};

}}

====Class {{lc|std::bad_exception}}====
{{source|

class bad_exception : public exception {
public:
    bad_exception() noexcept;
    bad_exception(const bad_exception&amp;) noexcept;
    bad_exception&amp; operator{{=}}(const bad_exception&amp;) noexcept;
    virtual const char* what() const noexcept;
};

}}


====Class {{lc|std::nested_exception}}====
{{source|
class nested_exception {
public:
    nested_exception() noexcept;
    nested_exception(const nested_exception&amp;) noexcept {{=}} default;
    nested_exception&amp; operator{{=}}(const nested_exception&amp;) noexcept {{=}} default;
    virtual ~nested_exception() {{=}} default;

    // access functions
    [[noreturn]] void rethrow_nested() const;
    exception_ptr nested_ptr() const noexcept;
};
}}

===See Also===
*[[cpp/error|Error handling]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/execution</title>
    <ns>0</ns>
    <id>15521</id>
    <revision>
      <id>91024</id>
      <parentid>91023</parentid>
      <timestamp>2017-03-14T16:35:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Synopsis */</comment>
      <text xml:space="preserve" bytes="986">{{cpp/header/title|execution}}
{{cpp/header/navbar}}

This header is part of the [[cpp/algorithm|algorithm]] library.

{{dsc begin}}
{{dsc header | execution }}
{{dsc namespace | execution }}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag_t }}
{{dsc inc | cpp/algorithm/dsc execution_policy_tag }}
{{dsc inc | cpp/algorithm/dsc is_execution_policy }}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {

// execution policy type trait:
template&lt;class T&gt; struct is_execution_policy;
template&lt;class T&gt; inline constexpr bool is_execution_policy_v 
  = is_execution_policy&lt;T&gt;::value;

namespace execution { 

// sequential execution policy:
class sequenced_policy;

// parallel execution policy:
class parallel_policy;
class parallel_unsequenced_policy;

// execution policy objects:
inline constexpr sequenced_policy seq{ /*unspecified*/ };
inline constexpr parallel_policy par{ /*unspecified*/ };
inline constexpr parallel_unsequenced_policy par_unseq{ /*unspecified*/ };

}

}
}}</text>
      <sha1>8hlh2v2ss3imtykfse6vfdh9wje14zs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/execution policy</title>
    <ns>0</ns>
    <id>15529</id>
    <redirect title="cpp/header/execution" />
    <revision>
      <id>86174</id>
      <timestamp>2016-06-24T17:21:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/header/execution policy]] to [[cpp/header/execution]]: P0336r1</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/header/execution]]</text>
      <sha1>b3nngnx1yv7jurmgwijcvp7m01tx5mc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/experimental/any</title>
    <ns>0</ns>
    <id>13646</id>
    <revision>
      <id>76780</id>
      <parentid>71489</parentid>
      <timestamp>2015-03-01T14:41:40Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>allocator constructors were dropped by NB comments http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4365.pdf</comment>
      <text xml:space="preserve" bytes="1972">{{cpp/header/title|experimental/any}}
{{cpp/header/navbar}}

This header is part of the [[cpp/experimental|experimental]] library.

===Classes===
{{dsc begin}}
{{dsc hitem | Name | Description}}
{{dsc class | notes={{mark since libfund ts}} | cpp/experimental/bad_any_cast | exception that is thrown by a failed {{tt|any_cast}}. }}
{{dsc class | notes={{mark since libfund ts}} | cpp/experimental/any | Objects that hold instances of any type that satisfies the {{tt|ValueType}} requirements. }}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/experimental/any/dsc swap2}}
{{dsc inc | cpp/experimental/any/dsc any_cast}}
{{dsc end}}

===Synopsis===
{{source|1=

namespace std {
namespace experimental {
inline namespace fundamentals_v1 {

  class bad_any_cast : public bad_cast
  {
  public:
    virtual const char* what() const noexcept;
  };

  class any
  {
  public:
    // 6.3.1, any construct/destruct
    any() noexcept;

    any(const any&amp; other);
    any(any&amp;&amp; x) noexcept;

    template &lt;class ValueType&gt;
        any(ValueType&amp;&amp; value);

    ~any();

    // 6.3.2, any assignments
    any&amp; operator=(const any&amp; rhs);
    any&amp; operator=(any&amp;&amp; rhs) noexcept;

    template &lt;class ValueType&gt;
      any&amp; operator=(ValueType&amp;&amp; rhs);

    // 6.3.3, any modifiers
    void clear() noexcept;
    void swap(any&amp; rhs) noexcept;

    // 6.3.4, any observers
    bool empty() const noexcept;
    const type_info&amp; type() const noexcept;
  };

  // 6.4, Non-member functions
  void swap(any&amp; x, any&amp; y) noexcept;

  template&lt;class ValueType&gt;
    ValueType any_cast(const any&amp; operand);
  template&lt;class ValueType&gt;
    ValueType any_cast(any&amp; operand);
  template&lt;class ValueType&gt;
    ValueType any_cast(any&amp;&amp; operand);

  template&lt;class ValueType&gt;
    const ValueType* any_cast(const any* operand) noexcept;
  template&lt;class ValueType&gt;
    ValueType* any_cast(any* operand) noexcept;

} // namespace fundamentals_v1
} // namespace experimental
} // namespace std
}}</text>
      <sha1>68vqpsuahy12lky8yx1xa3ard76oy2u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/experimental/filesystem</title>
    <ns>0</ns>
    <id>14058</id>
    <revision>
      <id>78619</id>
      <parentid>77731</parentid>
      <timestamp>2015-05-30T04:14:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3204">{{cpp/header/title|experimental/filesystem}}
{{cpp/header/navbar}}

This header is part of the [[cpp/experimental/fs|filesystem]] library.

{{dsc begin}}
{{dsc namespace | inline=true | std::experimental::filesystem::v1}}
{{dsc h1|Classes}}
{{dsc inc | cpp/experimental/fs/dsc path}}
{{dsc inc | cpp/experimental/fs/dsc filesystem_error}}
{{dsc inc | cpp/experimental/fs/dsc directory_entry}}
{{dsc inc | cpp/experimental/fs/dsc directory_iterator}}
{{dsc inc | cpp/experimental/fs/dsc recursive_directory_iterator}}
{{dsc inc | cpp/experimental/fs/dsc file_status}}
{{dsc inc | cpp/experimental/fs/dsc space_info}}
{{dsc inc | cpp/experimental/fs/dsc file_type}}
{{dsc inc | cpp/experimental/fs/dsc perms}}
{{dsc inc | cpp/experimental/fs/dsc copy_options}}
{{dsc inc | cpp/experimental/fs/dsc directory_options}}
{{dsc inc | cpp/experimental/fs/dsc file_time_type}}
{{dsc h1|Functions}}
{{dsc inc | cpp/experimental/fs/path/dsc swap2}}
{{dsc inc | cpp/experimental/fs/path/dsc hash_value}}&lt;!-- defined in N4100 §8.6[path.non-member]/3 --&gt;
{{dsc inc | cpp/experimental/fs/path/dsc operator_cmp}}
{{dsc inc | cpp/experimental/fs/path/dsc operator/}}
{{dsc inc | cpp/experimental/fs/path/dsc operator_ltltgtgt}}
{{dsc inc | cpp/experimental/fs/path/dsc u8path}}
{{dsc inc | cpp/experimental/fs/directory_iterator/dsc begin}}
{{dsc inc | cpp/experimental/fs/recursive_directory_iterator/dsc begin}}
{{dsc inc | cpp/experimental/fs/dsc absolute}}&lt;!-- including system_complete --&gt;
{{dsc inc | cpp/experimental/fs/dsc canonical}}
{{dsc inc | cpp/experimental/fs/dsc copy}}
{{dsc inc | cpp/experimental/fs/dsc copy_file}}
{{dsc inc | cpp/experimental/fs/dsc copy_symlink}}
{{dsc inc | cpp/experimental/fs/dsc create_directory}} &lt;!-- including create_directories --&gt;
{{dsc inc | cpp/experimental/fs/dsc create_hard_link}}
{{dsc inc | cpp/experimental/fs/dsc create_symlink}} &lt;!-- including create_directory_symlink --&gt;
{{dsc inc | cpp/experimental/fs/dsc current_path}}
{{dsc inc | cpp/experimental/fs/dsc exists}}
{{dsc inc | cpp/experimental/fs/dsc equivalent}}
{{dsc inc | cpp/experimental/fs/dsc file_size}}
{{dsc inc | cpp/experimental/fs/dsc hard_link_count}}
{{dsc inc | cpp/experimental/fs/dsc last_write_time}}
{{dsc inc | cpp/experimental/fs/dsc permissions}}
{{dsc inc | cpp/experimental/fs/dsc read_symlink}}
{{dsc inc | cpp/experimental/fs/dsc remove}} &lt;!-- including remove_all --&gt;
{{dsc inc | cpp/experimental/fs/dsc rename}} 
{{dsc inc | cpp/experimental/fs/dsc resize_file}}
{{dsc inc | cpp/experimental/fs/dsc space}}
{{dsc inc | cpp/experimental/fs/dsc status}} &lt;!-- including symlink_status --&gt;
{{dsc inc | cpp/experimental/fs/dsc temp_directory_path}}
{{dsc h2 | File types}}
{{dsc inc | cpp/experimental/fs/dsc is_block_file}}
{{dsc inc | cpp/experimental/fs/dsc is_character_file}}
{{dsc inc | cpp/experimental/fs/dsc is_directory}}
{{dsc inc | cpp/experimental/fs/dsc is_empty}}
{{dsc inc | cpp/experimental/fs/dsc is_fifo}}
{{dsc inc | cpp/experimental/fs/dsc is_other}}
{{dsc inc | cpp/experimental/fs/dsc is_regular_file}}
{{dsc inc | cpp/experimental/fs/dsc is_socket}}
{{dsc inc | cpp/experimental/fs/dsc is_symlink}}
{{dsc inc | cpp/experimental/fs/dsc status_known}}
{{dsc end}}</text>
      <sha1>423nzjvvxpvcptfiqthecjl9lmffasb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/experimental/memory resource</title>
    <ns>0</ns>
    <id>13674</id>
    <revision>
      <id>80295</id>
      <parentid>71536</parentid>
      <timestamp>2015-08-03T12:18:24Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="3203">{{cpp/header/title|experimental/memory_resource}}
{{cpp/header/navbar}}

This header is part of the [[cpp/experimental|experimental]] library.

===Classes===
{{dsc begin}}
{{dsc namespace | std::experimental::pmr}}
{{dsc class | cpp/experimental/memory_resource |  an abstract interface for classes that encapsulate memory resources }} 
{{dsc class | cpp/experimental/synchronized_pool_resource | a thread-safe {{lc|memory_resource}} for managing allocations in pools of different block sizes}}
{{dsc class | cpp/experimental/unsynchronized_pool_resource | a thread-unsafe {{lc|memory_resource}} for managing allocations in pools of different block sizes}}
{{dsc class | cpp/experimental/monotonic_buffer_resource | a special-purpose {{lc|memory_resource}} that releases the allocated memory only when the resource is destroyed}}
{{dsc tclass | cpp/experimental/polymorphic_allocator | an allocator that supports run-time polymorphism based on the {{lc|memory_resource}} it is constructed with }}
{{dsc talias | cpp/experimental/resource_adaptor | adapts an allocator into a {{lc|memory_resource}}}}
{{dsc end}}

===Functions===

{{dsc begin}}
{{dsc namespace | std::experimental::pmr}}
{{dsc h2 | Comparison}}
{{dsc inc | cpp/experimental/pmr/memory_resource/dsc operator_cmp}}
{{dsc inc | cpp/experimental/pmr/polymorphic_allocator/dsc operator_cmp}}

{{dsc h2 | Global memory resources}}
{{dsc inc | cpp/experimental/pmr/dsc new_delete_resource}}
{{dsc inc | cpp/experimental/pmr/dsc null_memory_resource}}


{{dsc h2 | Default memory resource}}
{{dsc inc | cpp/experimental/pmr/dsc get_default_resource}}
{{dsc inc | cpp/experimental/pmr/dsc set_default_resource}}
{{dsc end}}

===Synopsis===
{{source|1=

namespace std {
namespace experimental {
inline namespace fundamentals_v1 {
namespace pmr {

  class memory_resource;

  bool operator==(const memory_resource&amp; a,
                  const memory_resource&amp; b) noexcept;
  bool operator!=(const memory_resource&amp; a,
                  const memory_resource&amp; b) noexcept;

  template &lt;class Tp&gt; class polymorphic_allocator;

  template &lt;class T1, class T2&gt;
  bool operator==(const polymorphic_allocator&lt;T1&gt;&amp; a,
                  const polymorphic_allocator&lt;T2&gt;&amp; b) noexcept;
  template &lt;class T1, class T2&gt;
  bool operator!=(const polymorphic_allocator&lt;T1&gt;&amp; a,
                  const polymorphic_allocator&lt;T2&gt;&amp; b) noexcept;

  // The name resource_adaptor_imp is for exposition only.
  template &lt;class Allocator&gt; class resource_adaptor_imp;

  template &lt;class Allocator&gt;
    using resource_adaptor = resource_adaptor_imp&lt;
      typename allocator_traits&lt;Allocator&gt;::template rebind_alloc&lt;char&gt;&gt;;

  // Global memory resources
  memory_resource* new_delete_resource() noexcept;
  memory_resource* null_memory_resource() noexcept;

  // The default memory resource
  memory_resource* set_default_resource(memory_resource* r) noexcept;
  memory_resource* get_default_resource() noexcept;

  // Standard memory resources
  struct pool_options;
  class synchronized_pool_resource;
  class unsynchronized_pool_resource;
  class monotonic_buffer_resource;

} // namespace pmr
} // namespace fundamentals_v1
} // namespace experimental
} // namespace std
}}</text>
      <sha1>kbbjcrfbaod3d69jn06jkuj0z8e4fc4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/experimental/optional</title>
    <ns>0</ns>
    <id>13666</id>
    <revision>
      <id>83230</id>
      <parentid>72493</parentid>
      <timestamp>2016-01-26T10:02:51Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>use {{cpp/experimental/optional/dsc ...}} templates</comment>
      <text xml:space="preserve" bytes="4365">{{cpp/header/title|experimental/optional}}
{{cpp/header/navbar}}

This header is part of the [[cpp/experimental|experimental]] library.

===Classes===
{{dsc begin}}
{{dsc hitem | Name | Description}}
{{dsc inc | cpp/experimental/optional/dsc optional}}
{{dsc inc | cpp/experimental/optional/dsc bad_optional_access}}
{{dsc inc | cpp/experimental/optional/dsc in_place_t}}
{{dsc inc | cpp/experimental/optional/dsc hash}}
{{dsc inc | cpp/experimental/optional/dsc nullopt_t}}
{{dsc end}}

===Functions===

{{dsc begin}}

{{dsc h2 | Comparison}}
{{dsc inc | cpp/experimental/optional/dsc operator_cmp}}

{{dsc h2 | Specialized algorithms}}
{{dsc inc | cpp/experimental/optional/dsc swap2}}
{{dsc inc | cpp/experimental/optional/dsc make_optional}}

{{dsc h2 | Hash support}}
{{dsc end}}

===Synopsis===
{{source|1=

namespace std {
  namespace experimental {
  inline namespace fundamentals_v1 {

    // 5.4, optional for object types
    template &lt;class T&gt; class optional;

    // 5.5, In-place construction
    struct in_place_t{};
    constexpr in_place_t in_place{};

    // 5.6, Disengaged state indicator
    struct nullopt_t{see below};
    constexpr nullopt_t nullopt(unspecified);

    // 5.7, Class bad_optional_access
    class bad_optional_access;

    // 5.8, Relational operators
    template &lt;class T&gt;
      constexpr bool operator==(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt;
      constexpr bool operator!=(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt;
      constexpr bool operator&lt;(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt;
      constexpr bool operator&gt;(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt;
      constexpr bool operator&lt;=(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt;
      constexpr bool operator&gt;=(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);

    // 5.9, Comparison with nullopt
    template &lt;class T&gt; constexpr bool operator==(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
    template &lt;class T&gt; constexpr bool operator==(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
    template &lt;class T&gt; constexpr bool operator!=(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
    template &lt;class T&gt; constexpr bool operator!=(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
    template &lt;class T&gt; constexpr bool operator&lt;(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
    template &lt;class T&gt; constexpr bool operator&lt;(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
    template &lt;class T&gt; constexpr bool operator&lt;=(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
    template &lt;class T&gt; constexpr bool operator&lt;=(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
    template &lt;class T&gt; constexpr bool operator&gt;(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
    template &lt;class T&gt; constexpr bool operator&gt;(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
    template &lt;class T&gt; constexpr bool operator&gt;=(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
    template &lt;class T&gt; constexpr bool operator&gt;=(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;

    // 5.10, Comparison with T
    template &lt;class T&gt; constexpr bool operator==(const optional&lt;T&gt;&amp;, const T&amp;);
    template &lt;class T&gt; constexpr bool operator==(const T&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt; constexpr bool operator!=(const optional&lt;T&gt;&amp;, const T&amp;);
    template &lt;class T&gt; constexpr bool operator!=(const T&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt; constexpr bool operator&lt;(const optional&lt;T&gt;&amp;, const T&amp;);
    template &lt;class T&gt; constexpr bool operator&lt;(const T&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt; constexpr bool operator&lt;=(const optional&lt;T&gt;&amp;, const T&amp;);
    template &lt;class T&gt; constexpr bool operator&lt;=(const T&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt; constexpr bool operator&gt;(const optional&lt;T&gt;&amp;, const T&amp;);
    template &lt;class T&gt; constexpr bool operator&gt;(const T&amp;, const optional&lt;T&gt;&amp;);
    template &lt;class T&gt; constexpr bool operator&gt;=(const optional&lt;T&gt;&amp;, const T&amp;);
    template &lt;class T&gt; constexpr bool operator&gt;=(const T&amp;, const optional&lt;T&gt;&amp;);

    // 5.11, Specialized algorithms
    template &lt;class T&gt; void swap(optional&lt;T&gt;&amp;, optional&lt;T&gt;&amp;) noexcept(see below);
    template &lt;class T&gt; constexpr optional&lt;see below&gt; make_optional(T&amp;&amp;);

  } // namespace fundamentals_v1
  } // namespace experimental

  // 5.12, Hash support
  template &lt;class T&gt; struct hash;
  template &lt;class T&gt; struct hash&lt;experimental::optional&lt;T&gt;&gt;;

} // namespace std
}}</text>
      <sha1>1anrmrj8b0wd9b2yy3h07y9ckas3vae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/experimental/string view</title>
    <ns>0</ns>
    <id>13645</id>
    <revision>
      <id>71500</id>
      <parentid>71382</parentid>
      <timestamp>2014-06-12T01:46:24Z</timestamp>
      <contributor>
        <username>Luksy</username>
        <id>3138</id>
      </contributor>
      <comment>Updated synopsis to match draft paper.</comment>
      <text xml:space="preserve" bytes="3920">{{cpp/header/title|experimental/string_view}}
{{cpp/header/navbar}}

This header is part of the [[cpp/experimental|experimental]] library.

===Classes===
{{dsc begin}}
{{dsc hitem | Name | Description}}
{{dsc| {{lc|std::experimental::basic_string_view}} {{mark since libfund ts}} | Class template representing a reference to a character string {{mark tclass}} }}
{{dsc| {{lc|std::experimental::string_view}} {{mark since libfund ts}} | {{c|std::experimental::basic_string_view&lt;char&gt;}} {{mark typedef}} }}
{{dsc | {{lc|std::experimental::wstring_view}} {{mark since libfund ts}} | {{c|std::experimental::basic_string_view&lt;wchar_t&gt;}} {{mark typedef}} }}
{{dsc | {{lc|std::experimental::u16string_view}} {{mark since libfund ts}} | {{c|std::experimental::basic_string_view&lt;char16_t&gt;}}  {{mark typedef}} }}
{{dsc | {{lc|std::experimental::u32string_view}} {{mark since libfund ts}} | {{c|std::experimental::basic_string_view&lt;char32_t&gt;}} {{mark typedef}}}}

{{dsc | {{c|std::hash&lt;std::experimental::string_view&gt;}} {{mark since libfund ts}} | {{mark ptclass}} }}
{{dsc | {{c|std::hash&lt;std::experimental::u16string_view&gt;}} {{mark since libfund ts}} | {{mark ptclass}} }}
{{dsc | {{c|std::hash&lt;std::experimental::u32string_view&gt;}} {{mark since libfund ts}} | {{mark ptclass}}}}
{{dsc | {{c|std::hash&lt;std::experimental::wstring_view&gt;}}  {{mark since libfund ts}} | {{mark ptclass}}}}
{{dsc end}}

===Functions===

{{dsc begin}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator_cmp}}

{{dsc h2 | Output}}
{{dsc inc | cpp/experimental/basic_string_view/dsc operator_ltlt}}
{{dsc end}}

===Synopsis===
{{source|1=

namespace std {
  namespace experimental {
  inline namespace fundamentals_v1 {

    // 7.2, Class template basic_string_view
    template&lt;class charT, class traits = char_traits&lt;charT&gt;&gt;
        class basic_string_view;

    // 7.9, basic_string_view non-member comparison functions
    template&lt;class charT, class traits&gt;
    constexpr bool operator==(basic_string_view&lt;charT, traits&gt; x,
                              basic_string_view&lt;charT, traits&gt; y) noexcept;
    template&lt;class charT, class traits&gt;
    constexpr bool operator!=(basic_string_view&lt;charT, traits&gt; x,
                              basic_string_view&lt;charT, traits&gt; y) noexcept;
    template&lt;class charT, class traits&gt;
    constexpr bool operator&lt; (basic_string_view&lt;charT, traits&gt; x,
                                 basic_string_view&lt;charT, traits&gt; y) noexcept;
    template&lt;class charT, class traits&gt;
    constexpr bool operator&gt; (basic_string_view&lt;charT, traits&gt; x,
                              basic_string_view&lt;charT, traits&gt; y) noexcept;
    template&lt;class charT, class traits&gt;
    constexpr bool operator&lt;=(basic_string_view&lt;charT, traits&gt; x,
                                 basic_string_view&lt;charT, traits&gt; y) noexcept;
    template&lt;class charT, class traits&gt;
    constexpr bool operator&gt;=(basic_string_view&lt;charT, traits&gt; x,
                              basic_string_view&lt;charT, traits&gt; y) noexcept;
    // see below, sufficient additional overloads of comparison functions

    // 7.10, Inserters and extractors
    template&lt;class charT, class traits&gt;
      basic_ostream&lt;charT, traits&gt;&amp;
        operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp; os,
                   basic_string_view&lt;charT, traits&gt; str);

    // basic_string_view typedef names
    typedef basic_string_view&lt;char&gt; string_view;
    typedef basic_string_view&lt;char16_t&gt; u16string_view;
    typedef basic_string_view&lt;char32_t&gt; u32string_view;
    typedef basic_string_view&lt;wchar_t&gt; wstring_view;

  }  // namespace fundamentals_v1
  }  // namespace experimental

  // 7.11, Hash support
  template &lt;class T&gt; struct hash;
  template &lt;&gt; struct hash&lt;experimental::string_view&gt;;
  template &lt;&gt; struct hash&lt;experimental::u16string_view&gt;;
  template &lt;&gt; struct hash&lt;experimental::u32string_view&gt;;
  template &lt;&gt; struct hash&lt;experimental::wstring_view&gt;;

}  // namespace std
}}</text>
      <sha1>6q0dcc7ollgrhexdciqoylfvjtwvye8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/filesystem</title>
    <ns>0</ns>
    <id>15780</id>
    <revision>
      <id>88784</id>
      <timestamp>2016-12-11T04:42:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="19507">{{cpp/header/title|filesystem}}
{{cpp/header/navbar}}
This header is part of the [[cpp/filesystem|filesystem support]] library.

{{dsc begin}}
{{dsc namespace|filesystem}}
{{dsc h1|Classes}}
{{dsc inc | cpp/filesystem/dsc path}}
{{dsc inc | cpp/filesystem/dsc filesystem_error}}
{{dsc inc | cpp/filesystem/dsc directory_entry}}
{{dsc inc | cpp/filesystem/dsc directory_iterator}}
{{dsc inc | cpp/filesystem/dsc recursive_directory_iterator}}
{{dsc inc | cpp/filesystem/dsc file_status}}
{{dsc inc | cpp/filesystem/dsc space_info}}
{{dsc inc | cpp/filesystem/dsc file_type}}
{{dsc inc | cpp/filesystem/dsc perms}}
{{dsc inc | cpp/filesystem/dsc copy_options}}
{{dsc inc | cpp/filesystem/dsc directory_options}}
{{dsc inc | cpp/filesystem/dsc file_time_type}}
{{dsc h1|Functions}}
{{dsc inc | cpp/filesystem/path/dsc u8path}}
{{dsc inc | cpp/filesystem/dsc absolute}}
{{dsc inc | cpp/filesystem/dsc canonical}}
{{dsc inc | cpp/filesystem/dsc relative}}
{{dsc inc | cpp/filesystem/dsc copy}}
{{dsc inc | cpp/filesystem/dsc copy_file}}
{{dsc inc | cpp/filesystem/dsc copy_symlink}}
{{dsc inc | cpp/filesystem/dsc create_directory}}
{{dsc inc | cpp/filesystem/dsc create_hard_link}}
{{dsc inc | cpp/filesystem/dsc create_symlink}}
{{dsc inc | cpp/filesystem/dsc current_path}}
{{dsc inc | cpp/filesystem/dsc exists}}
{{dsc inc | cpp/filesystem/dsc equivalent}}
{{dsc inc | cpp/filesystem/dsc file_size}}
{{dsc inc | cpp/filesystem/dsc hard_link_count}}
{{dsc inc | cpp/filesystem/dsc last_write_time}}
{{dsc inc | cpp/filesystem/dsc permissions}}
{{dsc inc | cpp/filesystem/dsc read_symlink}}
{{dsc inc | cpp/filesystem/dsc remove}}
{{dsc inc | cpp/filesystem/dsc rename}} 
{{dsc inc | cpp/filesystem/dsc resize_file}}
{{dsc inc | cpp/filesystem/dsc space}}
{{dsc inc | cpp/filesystem/dsc status}}
{{dsc inc | cpp/filesystem/dsc temp_directory_path}}
{{dsc h2 | File types}}
{{dsc inc | cpp/filesystem/dsc is_block_file}}
{{dsc inc | cpp/filesystem/dsc is_character_file}}
{{dsc inc | cpp/filesystem/dsc is_directory}}
{{dsc inc | cpp/filesystem/dsc is_empty}}
{{dsc inc | cpp/filesystem/dsc is_fifo}}
{{dsc inc | cpp/filesystem/dsc is_other}}
{{dsc inc | cpp/filesystem/dsc is_regular_file}}
{{dsc inc | cpp/filesystem/dsc is_socket}}
{{dsc inc | cpp/filesystem/dsc is_symlink}}
{{dsc inc | cpp/filesystem/dsc status_known}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std::filesystem {
  // paths
  class path;
  // path non-member functions
  void swap(path&amp; lhs, path&amp; rhs) noexcept;
  size_t hash_value(const path&amp; p) noexcept;
  bool operator==(const path&amp; lhs, const path&amp; rhs) noexcept;
  bool operator!=(const path&amp; lhs, const path&amp; rhs) noexcept;
  bool operator&lt; (const path&amp; lhs, const path&amp; rhs) noexcept;
  bool operator&lt;=(const path&amp; lhs, const path&amp; rhs) noexcept;
  bool operator&gt; (const path&amp; lhs, const path&amp; rhs) noexcept;
  bool operator&gt;=(const path&amp; lhs, const path&amp; rhs) noexcept;
  path operator/ (const path&amp; lhs, const path&amp; rhs);
  // path inserter and extractor
  template &lt;class charT, class traits&gt;
  basic_ostream&lt;charT, traits&gt;&amp;
    operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp; os, const path&amp; p);
  template &lt;class charT, class traits&gt;
  basic_istream&lt;charT, traits&gt;&amp;
    operator&gt;&gt;(basic_istream&lt;charT, traits&gt;&amp; is, path&amp; p);
  // path factory functions
  template &lt;class Source&gt;
  path u8path(const Source&amp; source);
  template &lt;class InputIterator&gt;
  path u8path(InputIterator first, InputIterator last);
  // filesystem errors
  class filesystem_error;
  // directory entries
  class directory_entry;
  // directory iterators
  class directory_iterator;
  // range access for directory iterators
  directory_iterator begin(directory_iterator iter) noexcept;
  directory_iterator end(const directory_iterator&amp;) noexcept;
  // recursive directory iterators
  class recursive_directory_iterator;
  // range access for recursive directory iterators
  recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept;
  recursive_directory_iterator end(const recursive_directory_iterator&amp;) noexcept;
  // file status
  class file_status;
  struct space_info {
    uintmax_t capacity;
    uintmax_t free;
    uintmax_t available;
  };
  // enumerations
  enum class file_type;
  enum class perms;
  enum class copy_options;
  enum class directory_options;
  using file_time_type = chrono::time_point&lt;trivial-clock &gt;;
  // filesystem operations
  path absolute(const path&amp; p, const path&amp; base = current_path());
  path canonical(const path&amp; p, const path&amp; base = current_path());
  path canonical(const path&amp; p, error_code&amp; ec);
  path canonical(const path&amp; p, const path&amp; base, error_code&amp; ec);
  void copy(const path&amp; from, const path&amp; to);
  void copy(const path&amp; from, const path&amp; to, error_code&amp; ec) noexcept;
  void copy(const path&amp; from, const path&amp; to, copy_options options);
  void copy(const path&amp; from, const path&amp; to, copy_options options,
            error_code&amp; ec) noexcept;
  bool copy_file(const path&amp; from, const path&amp; to);
  bool copy_file(const path&amp; from, const path&amp; to, error_code&amp; ec) noexcept;
  bool copy_file(const path&amp; from, const path&amp; to, copy_options option);
  bool copy_file(const path&amp; from, const path&amp; to, copy_options option,
                 error_code&amp; ec) noexcept;
  void copy_symlink(const path&amp; existing_symlink, const path&amp; new_symlink);
  void copy_symlink(const path&amp; existing_symlink, const path&amp; new_symlink,
                    error_code&amp; ec) noexcept;
  bool create_directories(const path&amp; p);
  bool create_directories(const path&amp; p, error_code&amp; ec) noexcept;
  bool create_directory(const path&amp; p);
  bool create_directory(const path&amp; p, error_code&amp; ec) noexcept;
  bool create_directory(const path&amp; p, const path&amp; attributes);
  bool create_directory(const path&amp; p, const path&amp; attributes,
                        error_code&amp; ec) noexcept;
  void create_directory_symlink(const path&amp; to, const path&amp; new_symlink);
  void create_directory_symlink(const path&amp; to, const path&amp; new_symlink,
                                error_code&amp; ec) noexcept;
  void create_hard_link(const path&amp; to, const path&amp; new_hard_link);
  void create_hard_link(const path&amp; to, const path&amp; new_hard_link,
                        error_code&amp; ec) noexcept;
  void create_symlink(const path&amp; to, const path&amp; new_symlink);
  void create_symlink(const path&amp; to, const path&amp; new_symlink,
                      error_code&amp; ec) noexcept;
  path current_path();
  path current_path(error_code&amp; ec);
  void current_path(const path&amp; p);
  void current_path(const path&amp; p, error_code&amp; ec) noexcept;
  bool exists(file_status s) noexcept;
  bool exists(const path&amp; p);
  bool exists(const path&amp; p, error_code&amp; ec) noexcept;
  bool equivalent(const path&amp; p1, const path&amp; p2);
  bool equivalent(const path&amp; p1, const path&amp; p2, error_code&amp; ec) noexcept;
  uintmax_t file_size(const path&amp; p);
  uintmax_t file_size(const path&amp; p, error_code&amp; ec) noexcept;
  uintmax_t hard_link_count(const path&amp; p);
  uintmax_t hard_link_count(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_block_file(file_status s) noexcept;
  bool is_block_file(const path&amp; p);
  bool is_block_file(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_character_file(file_status s) noexcept;
  bool is_character_file(const path&amp; p);
  bool is_character_file(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_directory(file_status s) noexcept;
  bool is_directory(const path&amp; p);
  bool is_directory(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_empty(const path&amp; p);
  bool is_empty(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_fifo(file_status s) noexcept;
  bool is_fifo(const path&amp; p);
  bool is_fifo(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_other(file_status s) noexcept;
  bool is_other(const path&amp; p);
  bool is_other(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_regular_file(file_status s) noexcept;
  bool is_regular_file(const path&amp; p);
  bool is_regular_file(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_socket(file_status s) noexcept;
  bool is_socket(const path&amp; p);
  bool is_socket(const path&amp; p, error_code&amp; ec) noexcept;
  bool is_symlink(file_status s) noexcept;
  bool is_symlink(const path&amp; p);
  bool is_symlink(const path&amp; p, error_code&amp; ec) noexcept;
  file_time_type last_write_time(const path&amp; p);
  file_time_type last_write_time(const path&amp; p, error_code&amp; ec) noexcept;
  void last_write_time(const path&amp; p, file_time_type new_time);
  void last_write_time(const path&amp; p, file_time_type new_time,
                       error_code&amp; ec) noexcept;
  void permissions(const path&amp; p, perms prms);
  void permissions(const path&amp; p, perms prms, error_code&amp; ec);
  path proximate(const path&amp; p, error_code&amp; ec);
  path proximate(const path&amp; p, const path&amp; base = current_path());
  path proximate(const path&amp; p, const path&amp; base, error_code&amp; ec);
  path read_symlink(const path&amp; p);
  path read_symlink(const path&amp; p, error_code&amp; ec);
  path relative(const path&amp; p, error_code&amp; ec);
  path relative(const path&amp; p, const path&amp; base = current_path());
  path relative(const path&amp; p, const path&amp; base, error_code&amp; ec);
  bool remove(const path&amp; p);
  bool remove(const path&amp; p, error_code&amp; ec) noexcept;
  uintmax_t remove_all(const path&amp; p);
  uintmax_t remove_all(const path&amp; p, error_code&amp; ec) noexcept;
  void rename(const path&amp; from, const path&amp; to);
  void rename(const path&amp; from, const path&amp; to, error_code&amp; ec) noexcept;
  void resize_file(const path&amp; p, uintmax_t size);
  void resize_file(const path&amp; p, uintmax_t size, error_code&amp; ec) noexcept;
  space_info space(const path&amp; p);
  space_info space(const path&amp; p, error_code&amp; ec) noexcept;
  file_status status(const path&amp; p);
  file_status status(const path&amp; p, error_code&amp; ec) noexcept;
  bool status_known(file_status s) noexcept;
  file_status symlink_status(const path&amp; p);
  file_status symlink_status(const path&amp; p, error_code&amp; ec) noexcept;
  path system_complete(const path&amp; p);
  path system_complete(const path&amp; p, error_code&amp; ec);
  path temp_directory_path();
  path temp_directory_path(error_code&amp; ec);
  path weakly_canonical(const path&amp; p);
  path weakly_canonical(const path&amp; p, error_code&amp; ec);
}
}}

====Class {{lc|std::filesystem::path}}====
{{source|1=
class path {
public:
  using value_type = /*see definition*/ ;
  using string_type = basic_string&lt;value_type&gt;;
  static constexpr value_type preferred_separator = /*see definition*/ ;
  // constructors and destructor
  path() noexcept;
  path(const path&amp; p);
  path(path&amp;&amp; p) noexcept;
  path(string_type&amp;&amp; source);
  template &lt;class Source&gt;
  path(const Source&amp; source);
  template &lt;class InputIterator&gt;
  path(InputIterator first, InputIterator last);
  template &lt;class Source&gt;
  path(const Source&amp; source, const locale&amp; loc);
  template &lt;class InputIterator&gt;
  path(InputIterator first, InputIterator last, const locale&amp; loc);
  ~path();
  // assignments
  path&amp; operator=(const path&amp; p);
  path&amp; operator=(path&amp;&amp; p) noexcept;
  path&amp; operator=(string_type&amp;&amp; source);
  path&amp; assign(string_type&amp;&amp; source);
  template &lt;class Source&gt;
  path&amp; operator=(const Source&amp; source);
  template &lt;class Source&gt;
  path&amp; assign(const Source&amp; source)
  template &lt;class InputIterator&gt;
  path&amp; assign(InputIterator first, InputIterator last);
  // appends
  path&amp; operator/=(const path&amp; p);
  template &lt;class Source&gt;
  path&amp; operator/=(const Source&amp; source);
  template &lt;class Source&gt;
  path&amp; append(const Source&amp; source);
  template &lt;class InputIterator&gt;
  path&amp; append(InputIterator first, InputIterator last);
  // concatenation
  path&amp; operator+=(const path&amp; x);
  path&amp; operator+=(const string_type&amp; x);
  path&amp; operator+=(basic_string_view&lt;value_type&gt; x);
  path&amp; operator+=(const value_type* x);
  path&amp; operator+=(value_type x);
  template &lt;class Source&gt;
  path&amp; operator+=(const Source&amp; x);
  template &lt;class EcharT&gt;
  path&amp; operator+=(EcharT x);
  template &lt;class Source&gt;
  path&amp; concat(const Source&amp; x);
  template &lt;class InputIterator&gt;
  path&amp; concat(InputIterator first, InputIterator last);
  // modifiers
  void clear() noexcept;
  path&amp; make_preferred();
  path&amp; remove_filename();
  path&amp; replace_filename(const path&amp; replacement);
  path&amp; replace_extension(const path&amp; replacement = path());
  void swap(path&amp; rhs) noexcept;
  // native format observers
  const string_type&amp; native() const noexcept;
  const value_type* c_str() const noexcept;
  operator string_type() const;
  template &lt;class EcharT, class traits = char_traits&lt;EcharT&gt;,
            class Allocator = allocator&lt;EcharT&gt;&gt;
  basic_string&lt;EcharT, traits, Allocator&gt;
    string(const Allocator&amp; a = Allocator()) const;
  std::string string() const;
  std::wstring wstring() const;
  std::string u8string() const;
  std::u16string u16string() const;
  std::u32string u32string() const;
  // generic format observers
  template &lt;class EcharT, class traits = char_traits&lt;EcharT&gt;,
            class Allocator = allocator&lt;EcharT&gt;&gt;
  basic_string&lt;EcharT, traits, Allocator&gt;
    generic_string(const Allocator&amp; a = Allocator()) const;
  std::string generic_string() const;
  std::wstring generic_wstring() const;
  std::string generic_u8string() const;
  std::u16string generic_u16string() const;
  std::u32string generic_u32string() const;
  // compare
  int compare(const path&amp; p) const noexcept;
  int compare(const string_type&amp; s) const;
  int compare(basic_string_view&lt;value_type&gt; s) const;
  int compare(const value_type* s) const;
  // decomposition
  path root_name() const;
  path root_directory() const;
  path root_path() const;
  path relative_path() const;
  path parent_path() const;
  path filename() const;
  path stem() const;
  path extension() const;
  // query
  bool empty() const noexcept;
  bool has_root_name() const;
  bool has_root_directory() const;
  bool has_root_path() const;
  bool has_relative_path() const;
  bool has_parent_path() const;
  bool has_filename() const;
  bool has_stem() const;
  bool has_extension() const;
  bool is_absolute() const;
  bool is_relative() const;
  // generation
  path lexically_normal() const;
  path lexically_relative(const path&amp; base) const;
  path lexically_proximate(const path&amp; base) const;
  // iterators
  class iterator;
  using const_iterator = iterator;
  iterator begin() const;
  iterator end() const;
private:
  string_type pathstring; // exposition only
};
}}

====Class {{lc|std::filesystem::filesystem_error}}====
{{source|1=
class filesystem_error : public system_error {
public:
  filesystem_error(const string&amp; what_arg, error_code ec);
  filesystem_error(const string&amp; what_arg,
                   const path&amp; p1, error_code ec);
  filesystem_error(const string&amp; what_arg,
                   const path&amp; p1, const path&amp; p2, error_code ec);
  const path&amp; path1() const noexcept;
  const path&amp; path2() const noexcept;
  const char* what() const noexcept override;
};
}}

====Class {{lc|std::filesystem::file_status}}====
{{source|1=
class file_status {
public:
  // constructors and destructor
  explicit file_status(file_type ft = file_type::none,
                       perms prms = perms::unknown) noexcept;
  file_status(const file_status&amp;) noexcept = default;
  file_status(file_status&amp;&amp;) noexcept = default;
  ~file_status();
  // assignments:
  file_status&amp; operator=(const file_status&amp;) noexcept = default;
  file_status&amp; operator=(file_status&amp;&amp;) noexcept = default;
  // modifiers
  void type(file_type ft) noexcept;
  void permissions(perms prms) noexcept;
  // observers
  file_type type() const noexcept;
  perms permissions() const noexcept;
};
}}

====Class {{lc|std::directory_entry}}====
{{source|1=
class directory_entry {
public:
  // constructors and destructor
  explicit directory_entry(const path&amp; p);
  directory_entry() noexcept = default;
  directory_entry(const directory_entry&amp;) = default;
  directory_entry(directory_entry&amp;&amp;) noexcept = default;
  ~directory_entry();
  // assignments:
  directory_entry&amp; operator=(const directory_entry&amp;) = default;
  directory_entry&amp; operator=(directory_entry&amp;&amp;) noexcept = default;
  // modifiers
  void assign(const path&amp; p);
  void replace_filename(const path&amp; p);
  // observers
  const path&amp; path() const noexcept;
  operator const path&amp;() const noexcept;
  file_status status() const;
  file_status status(error_code&amp; ec) const noexcept;
  file_status symlink_status() const;
  file_status symlink_status(error_code&amp; ec) const noexcept;
  bool operator&lt; (const directory_entry&amp; rhs) const noexcept;
  bool operator==(const directory_entry&amp; rhs) const noexcept;
  bool operator!=(const directory_entry&amp; rhs) const noexcept;
  bool operator&lt;=(const directory_entry&amp; rhs) const noexcept;
  bool operator&gt; (const directory_entry&amp; rhs) const noexcept;
  bool operator&gt;=(const directory_entry&amp; rhs) const noexcept;
private:
  path pathobject; // exposition only
};
}}

====Class {{lc|std::filesystem::directory_iterator}}====
{{source|1=
class directory_iterator {
public:
  using iterator_category = input_iterator_tag;
  using value_type = directory_entry;
  using difference_type = ptrdiff_t;
  using pointer = const directory_entry*;
  using reference = const directory_entry&amp;;
  // member functions
  directory_iterator() noexcept;
  explicit directory_iterator(const path&amp; p);
  directory_iterator(const path&amp; p, directory_options options);
  directory_iterator(const path&amp; p, error_code&amp; ec) noexcept;
  directory_iterator(const path&amp; p, directory_options options,
                     error_code&amp; ec) noexcept;
  directory_iterator(const directory_iterator&amp; rhs);
  directory_iterator(directory_iterator&amp;&amp; rhs) noexcept;
  ~directory_iterator();
  directory_iterator&amp; operator=(const directory_iterator&amp; rhs);
  directory_iterator&amp; operator=(directory_iterator&amp;&amp; rhs) noexcept;
  const directory_entry&amp; operator*() const;
  const directory_entry* operator-&gt;() const;
  directory_iterator&amp; operator++();
  directory_iterator&amp; increment(error_code&amp; ec) noexcept;
  // other members as required by input iterators
};
}}

====Class {{lc|std::filesystem::recursive_directory_iterator}}====
{{source|1=
class recursive_directory_iterator {
public:
  using iterator_category = input_iterator_tag;
  using value_type = directory_entry;
  using difference_type = ptrdiff_t;
  using pointer = const directory_entry*;
  using reference = const directory_entry&amp;;
  // constructors and destructor
  recursive_directory_iterator() noexcept;
  explicit recursive_directory_iterator(const path&amp; p);
  recursive_directory_iterator(const path&amp; p, directory_options options);
  recursive_directory_iterator(const path&amp; p, directory_options options,
                               error_code&amp; ec) noexcept;
  recursive_directory_iterator(const path&amp; p, error_code&amp; ec) noexcept;
  recursive_directory_iterator(const recursive_directory_iterator&amp; rhs);
  recursive_directory_iterator(recursive_directory_iterator&amp;&amp; rhs) noexcept;
  ~recursive_directory_iterator();
  // observers
  directory_options options() const;
  int depth() const;
  bool recursion_pending() const;
  const directory_entry&amp; operator*() const;
  const directory_entry* operator-&gt;() const;
  // modifiers
  recursive_directory_iterator&amp;
  operator=(const recursive_directory_iterator&amp; rhs);
  recursive_directory_iterator&amp;
  operator=(recursive_directory_iterator&amp;&amp; rhs) noexcept;
  recursive_directory_iterator&amp; operator++();
  recursive_directory_iterator&amp; increment(error_code&amp; ec) noexcept;
  void pop();
  void pop(error_code&amp; ec);
  void disable_recursion_pending();
  // other members as required by input iterators
};
}}</text>
      <sha1>4cijvw3dxviccaqrrlez7lfqms4d62r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/forward list</title>
    <ns>0</ns>
    <id>9676</id>
    <revision>
      <id>91142</id>
      <parentid>57482</parentid>
      <timestamp>2017-03-22T08:25:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Synopsis */</comment>
      <text xml:space="preserve" bytes="6616">{{cpp/header/title|forward_list}}
{{cpp/header/navbar}}
This header is part of the [[cpp/container|containers]] library.
{{dsc begin}}
{{dsc h1|Includes}}
{{dsc|{{header|initializer_list}}{{mark c++11}}}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc forward_list}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | forward_list}}
{{dsc inc | cpp/container/dsc swap2 | forward_list}}
{{dsc end}}


===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std {
    
template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt; class forward_list;

template &lt;class T, class Allocator&gt;
    bool operator{{=}}{{=}}(const forward_list&lt;T,Allocator&gt;&amp; x, 
                            const forward_list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&lt; (const forward_list&lt;T,Allocator&gt;&amp; x, 
                    const forward_list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator!{{=}}(const forward_list&lt;T,Allocator&gt;&amp; x, 
                        const forward_list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&gt; (const forward_list&lt;T,Allocator&gt;&amp; x, 
                    const forward_list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&gt;{{=}}(const forward_list&lt;T,Allocator&gt;&amp; x, 
                        const forward_list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&lt;{{=}}(const forward_list&lt;T,Allocator&gt;&amp; x, 
                        const forward_list&lt;T,Allocator&gt;&amp; y);

template &lt;class T, class Allocator&gt;
    void swap(forward_list&lt;T,Allocator&gt;&amp; x, forward_list&lt;T,Allocator&gt;&amp; y);

}

}}

====Class {{lc|std::list}}====
{{source|

template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt;
class forward_list {
public:
    // types:
    typedef value_type&amp;                                         reference;
    typedef const value_type&amp;                                   const_reference;
    typedef /*implementation-defined*/                          iterator;
    typedef /*implementation-defined*/                          const_iterator; 
    typedef /*implementation-defined*/                          size_type;
    typedef /*implementation-defined*/                          difference_type;
    typedef T                                                   value_type;
    typedef Allocator                                           allocator_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer       pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    
    // construct/copy/destroy:
    explicit forward_list(const Allocator&amp; {{=}} Allocator());
    explicit forward_list(size_type n);
    forward_list(size_type n, const T&amp; value,const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
        forward_list(InputIterator first, InputIterator last,
                     const Allocator&amp; {{=}} Allocator());
    forward_list(const forward_list&lt;T,Allocator&gt;&amp; x);
    forward_list(forward_list&amp;&amp;);
    forward_list(const forward_list&amp;, const Allocator&amp;);
    forward_list(forward_list&amp;&amp;, const Allocator&amp;);
    forward_list(initializer_list&lt;T&gt;, const Allocator&amp; {{=}} Allocator());
    
    ~forward_list();
    forward_list&lt;T,Allocator&gt;&amp; operator{{=}}(const forward_list&lt;T,Allocator&gt;&amp; x);
    forward_list&lt;T,Allocator&gt;&amp; operator{{=}}(forward_list&lt;T,Allocator&gt;&amp;&amp; x);
    forward_list&amp; operator{{=}}(initializer_list&lt;T&gt;);
    template &lt;class InputIterator&gt;
        void assign(InputIterator first, InputIterator last);
    void assign(size_type n, const T&amp; t);
    void assign(initializer_list&lt;T&gt;);
    allocator_type get_allocator() const noexcept;

    // iterators:
    iterator                before_begin() noexcept;
    const_iterator          before_begin() const noexcept;
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    const_iterator          cbegin() noexcept;
    const_iterator          cbefore_begin() const noexcept;
    const_iterator          cend() noexcept;
    
    // capacity:
    size_type max_size() const noexcept;
    bool      empty() const noexcept;
    
    // element access:
    reference       front();
    const_reference front() const;
    
    // modifiers:
    template &lt;class... Args&gt; void emplace_front(Args&amp;&amp;... args);
    
    void push_front(const T&amp; x);
    void push_front(T&amp;&amp; x);
    void pop_front();
    
    template &lt;class... Args&gt; 
        iterator emplace_after(const_iterator position, Args&amp;&amp;... args);
    iterator insert_after(const_iterator position, const T&amp; x);
    iterator insert_after(const_iterator position, T&amp;&amp; x);
    
    iterator insert_after(const_iterator position, size_type n, const T&amp; x);
    template &lt;class InputIterator&gt;
        iterator insert_after(const_iterator position, InputIterator first, 
                              InputIterator last);
    iterator insert_after(const_iterator position, initializer_list&lt;T&gt; il);

    iterator erase_after(const_iterator position);
    iterator erase_after(const_iterator position, iterator last);
    void swap(forward_list&lt;T,Allocator&gt;&amp;);
    
    void resize(size_type sz);
    void resize(size_type sz, const value_type&amp; c);
    void clear() noexcept;
    
    // forward_list operations:
    void splice_after(const_iterator position, forward_list&lt;T,Allocator&gt;&amp; x);
    void splice_after(const_iterator position, forward_list&lt;T,Allocator&gt;&amp;&amp; x);
    void splice_after(const_iterator position, forward_list&lt;T,Allocator&gt;&amp; x,
                    const_iterator i);
    void splice_after(const_iterator position, forward_list&lt;T,Allocator&gt;&amp;&amp; x,
                    const_iterator i);
    void splice_after(const_iterator position, forward_list&lt;T,Allocator&gt;&amp; x,
                    const_iterator first, const_iterator last);
    void splice_after(const_iterator position, forward_list&lt;T,Allocator&gt;&amp;&amp; x,
                    const_iterator first, const_iterator last);

    void remove(const T&amp; value);
    template &lt;class Predicate&gt; void remove_if(Predicate pred);

    void unique();
    template &lt;class BinaryPredicate&gt; void unique(BinaryPredicate binary_pred);

    void merge(forward_list&lt;T,Allocator&gt;&amp; x);
    void merge(forward_list&lt;T,Allocator&gt;&amp;&amp; x);
    template &lt;class Compare&gt; void merge(forward_list&lt;T,Allocator&gt;&amp; x, Compare comp);
    template &lt;class Compare&gt; void merge(forward_list&lt;T,Allocator&gt;&amp;&amp; x, Compare comp);

    void sort();
    template &lt;class Compare&gt; void sort(Compare comp);
    void reverse() noexcept;
};

}}</text>
      <sha1>b8mc9je6s0lj58xjok3jwlhnweyjcrg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/fstream</title>
    <ns>0</ns>
    <id>12850</id>
    <revision>
      <id>63992</id>
      <timestamp>2013-08-06T00:38:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="7897">{{cpp/header/title|fstream}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io|Input/Output]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc tclass | cpp/io/basic_filebuf | implements raw file device}}
{{dsc tclass | cpp/io/basic_ifstream | implements high-level file stream input operations}}
{{dsc tclass | cpp/io/basic_ofstream | implements high-level file stream output operations}}
{{dsc tclass | cpp/io/basic_fstream | implements high-level file stream input/output}}
{{dsc h1|Typedefs}}
{{dsc | {{tt|filebuf}} | {{c|basic_filebuf&lt;char&gt;}}}}
{{dsc | {{tt|wfilebuf}} | {{c|basic_filebuf&lt;wchar_t&gt;}}}}
{{dsc | {{tt|ifstream}} | {{c|basic_ifstream&lt;char&gt;}}}}
{{dsc | {{tt|wifstream}} | {{c|basic_ifstream&lt;wchar_t&gt;}}}}
{{dsc | {{tt|ofstream}} | {{c|basic_ofstream&lt;char&gt;}}}}
{{dsc | {{tt|wofstream}} | {{c|basic_ofstream&lt;wchar_t&gt;}}}}
{{dsc | {{tt|fstream}} | {{c|basic_fstream&lt;char&gt;}}}}
{{dsc | {{tt|wfstream}} | {{c|basic_fstream&lt;wchar_t&gt;}}}}
{{dsc h1|Functions}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap2}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_fstream}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {

template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
    class basic_filebuf;
typedef basic_filebuf&lt;char&gt; filebuf;
typedef basic_filebuf&lt;wchar_t&gt; wfilebuf;
template &lt;class charT, class traits&gt;
    void swap(basic_filebuf&lt;charT, traits&gt;&amp; x,
              basic_filebuf&lt;charT, traits&gt;&amp; y);

template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
    class basic_ifstream;
typedef basic_ifstream&lt;char&gt; ifstream;
typedef basic_ifstream&lt;wchar_t&gt; wifstream;
template &lt;class charT, class traits&gt;
    void swap(basic_ifstream&lt;charT, traits&gt;&amp; x,
              basic_ifstream&lt;charT, traits&gt;&amp; y);

template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
    class basic_ofstream;
typedef basic_ofstream&lt;char&gt; ofstream;
typedef basic_ofstream&lt;wchar_t&gt; wofstream;
template &lt;class charT, class traits&gt;
    void swap(basic_ofstream&lt;charT, traits&gt;&amp; x,
              basic_ofstream&lt;charT, traits&gt;&amp; y);

template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
    class basic_fstream;
typedef basic_fstream&lt;char&gt; fstream;
typedef basic_fstream&lt;wchar_t&gt; wfstream;
template &lt;class charT, class traits&gt;
    void swap(basic_fstream&lt;charT, traits&gt;&amp; x,
              basic_fstream&lt;charT, traits&gt;&amp; y);
}
}}

====Class {{lc|std::basic_filebuf}}====
{{source|1=
template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
class basic_filebuf : public basic_streambuf&lt;charT,traits&gt; {
 public:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;

    // Constructors/destructor:
    basic_filebuf();
    basic_filebuf(const basic_filebuf&amp; rhs) = delete;
    basic_filebuf(basic_filebuf&amp;&amp; rhs);
    virtual ~basic_filebuf();

    // Assign/swap:
    basic_filebuf&amp; operator=(const basic_filebuf&amp; rhs) = delete;
    basic_filebuf&amp; operator=(basic_filebuf&amp;&amp; rhs);
    void swap(basic_filebuf&amp; rhs);

    // Members:
    bool is_open() const;
    basic_filebuf&lt;charT,traits&gt;* open(const char* s, ios_base::openmode mode);
    basic_filebuf&lt;charT,traits&gt;* open(const string&amp; s, ios_base::openmode mode);
    basic_filebuf&lt;charT,traits&gt;* close();

 protected:
    // Overridden virtual functions:
    virtual streamsize showmanyc();
    virtual int_type underflow();
    virtual int_type uflow();
    virtual int_type pbackfail(int_type c = traits::eof());
    virtual int_type overflow (int_type c = traits::eof());
    virtual basic_streambuf&lt;charT,traits&gt;* setbuf(char_type* s, streamsize n);
    virtual pos_type seekoff(off_type off, ios_base::seekdir way,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    virtual pos_type seekpos(pos_type sp,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    virtual int sync();
    virtual void imbue(const locale&amp; loc);
};
}}

====Class {{lc|std::basic_ifstream}}====
{{source|1=
template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
class basic_ifstream : public basic_istream&lt;charT,traits&gt; {
 public:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;

    // Constructors:
    basic_ifstream();
    explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in);
    explicit basic_ifstream(const string&amp; s, ios_base::openmode mode = ios_base::in);
    basic_ifstream(const basic_ifstream&amp; rhs) = delete;
    basic_ifstream(basic_ifstream&amp;&amp; rhs);

    // Assign/swap:
    basic_ifstream&amp; operator=(const basic_ifstream&amp; rhs) = delete;
    basic_ifstream&amp; operator=(basic_ifstream&amp;&amp; rhs);
    void swap(basic_ifstream&amp; rhs);

    // Members:
    basic_filebuf&lt;charT,traits&gt;* rdbuf() const;
    bool is_open() const;
    void open(const char* s, ios_base::openmode mode = ios_base::in);
    void open(const string&amp; s, ios_base::openmode mode = ios_base::in);
    void close();

 private:
    basic_filebuf&lt;charT,traits&gt; sb; // exposition only
};
}}

====Class {{lc|std::basic_ofstream}}====
{{source|1=
template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
class basic_ofstream : public basic_ostream&lt;charT,traits&gt; {
 public:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;

    // Constructors:
    basic_ofstream();
    explicit basic_ofstream(const char* s, ios_base::openmode mode = ios_base::out);
    explicit basic_ofstream(const string&amp; s, ios_base::openmode mode = ios_base::out);
    basic_ofstream(const basic_ofstream&amp; rhs) = delete;
    basic_ofstream(basic_ofstream&amp;&amp; rhs);

    // Assign/swap:
    basic_ofstream&amp; operator=(const basic_ofstream&amp; rhs) = delete;
    basic_ofstream&amp; operator=(basic_ofstream&amp;&amp; rhs);
    void swap(basic_ofstream&amp; rhs);

    // Members:
    basic_filebuf&lt;charT,traits&gt;* rdbuf() const;
    bool is_open() const;
    void open(const char* s, ios_base::openmode mode = ios_base::out);
    void open(const string&amp; s, ios_base::openmode mode = ios_base::out);
    void close();

 private:
    basic_filebuf&lt;charT,traits&gt; sb; // exposition only
};
}}

====Class {{lc|std::basic_fstream}}====
{{source|1=
template &lt;class charT, class traits=char_traits&lt;charT&gt; &gt;
class basic_fstream : public basic_iostream&lt;charT,traits&gt; {
 public:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;

    // constructors/destructor
    basic_fstream();
    explicit basic_fstream(const char* s,
                           ios_base::openmode mode = ios_base::in{{!}}ios_base::out);
    explicit basic_fstream(const string&amp; s,
                           ios_base::openmode mode = ios_base::in{{!}}ios_base::out);
    basic_fstream(const basic_fstream&amp; rhs) = delete;
    basic_fstream(basic_fstream&amp;&amp; rhs);

    // Assign/swap:
    basic_fstream&amp; operator=(const basic_fstream&amp; rhs) = delete;
    basic_fstream&amp; operator=(basic_fstream&amp;&amp; rhs);
    void swap(basic_fstream&amp; rhs);

    // Members:
    basic_filebuf&lt;charT,traits&gt;* rdbuf() const;
    bool is_open() const;
    void open(const char* s,
              ios_base::openmode mode = ios_base::in{{!}}ios_base::out);
    void open(const string&amp; s,
              ios_base::openmode mode = ios_base::in{{!}}ios_base::out);
    void close();

 private:
    basic_filebuf&lt;charT,traits&gt; sb; // exposition only
};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/functional</title>
    <ns>0</ns>
    <id>9770</id>
    <revision>
      <id>91018</id>
      <parentid>91017</parentid>
      <timestamp>2017-03-14T16:24:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Synopsis */ inline; -default_order; invoke_result</comment>
      <text xml:space="preserve" bytes="13468">{{cpp/header/title|functional}}
{{cpp/header/navbar}}

This header is part of the [[cpp/utility/functional|function objects]] library and provides the standard [[cpp/utility/hash|hash function]].

===Namespaces===
{{dsc begin}}
{{dsc|[[cpp/utility/functional/placeholders|placeholders]] | Defines placeholders for the unbound arguments in a std::bind expression  }}
{{dsc h2|Constants}}
{{dsc namespace | std::placeholders }}
{{dsc inc | cpp/utility/functional/dsc placeholders}}
{{dsc end}}

===Classes===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc mem_fn}}
{{dsc inc | cpp/utility/functional/dsc bad_function_call}}
{{dsc inc | cpp/utility/functional/dsc is_bind_expression}}
{{dsc inc | cpp/utility/functional/dsc is_placeholder}}
{{dsc inc | cpp/utility/functional/dsc reference_wrapper}}

{{dsc h2|Hashing}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc|
{{c|
template&lt;&gt; struct hash&lt;bool&gt;;
template&lt;&gt; struct hash&lt;char&gt;;
template&lt;&gt; struct hash&lt;signed char&gt;;
template&lt;&gt; struct hash&lt;unsigned char&gt;;
template&lt;&gt; struct hash&lt;char16_t&gt;;
template&lt;&gt; struct hash&lt;char32_t&gt;;
template&lt;&gt; struct hash&lt;wchar_t&gt;;
template&lt;&gt; struct hash&lt;short&gt;;
template&lt;&gt; struct hash&lt;unsigned short&gt;;
template&lt;&gt; struct hash&lt;int&gt;;
template&lt;&gt; struct hash&lt;unsigned int&gt;;
template&lt;&gt; struct hash&lt;long&gt;;
template&lt;&gt; struct hash&lt;long long&gt;;
template&lt;&gt; struct hash&lt;unsigned long&gt;;
template&lt;&gt; struct hash&lt;unsigned long long&gt;;
template&lt;&gt; struct hash&lt;float&gt;;
template&lt;&gt; struct hash&lt;double&gt;;
template&lt;&gt; struct hash&lt;long double&gt;;
template&lt; class T &gt; struct hash&lt;T*&gt;;
}} | {{lc|std::hash}} specializations for built-in types &lt;br&gt; {{mark ptclass}} }}

{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bind}}
{{dsc inc | cpp/utility/functional/dsc ref}}
{{dsc inc | cpp/utility/functional/dsc invoke}}
{{dsc end}}

===Function Objects===
{{dsc begin}}
{{dsc h2 | Arithmetic operations}}
{{dsc inc | cpp/utility/functional/dsc plus}}
{{dsc inc | cpp/utility/functional/dsc minus}}
{{dsc inc | cpp/utility/functional/dsc multiplies}}
{{dsc inc | cpp/utility/functional/dsc divides}}
{{dsc inc | cpp/utility/functional/dsc modulus}}
{{dsc inc | cpp/utility/functional/dsc negate}}

{{dsc h2 | Comparisons }}
{{dsc inc | cpp/utility/functional/dsc equal_to}}
{{dsc inc | cpp/utility/functional/dsc not_equal_to}}
{{dsc inc | cpp/utility/functional/dsc greater}}
{{dsc inc | cpp/utility/functional/dsc less}}
{{dsc inc | cpp/utility/functional/dsc greater_equal}}
{{dsc inc | cpp/utility/functional/dsc less_equal}}

{{dsc h2 | Logical operations }}
{{dsc inc | cpp/utility/functional/dsc logical_and}}
{{dsc inc | cpp/utility/functional/dsc logical_or}}
{{dsc inc | cpp/utility/functional/dsc logical_not}}

{{dsc h2 | Bitwise operations }}
{{dsc inc | cpp/utility/functional/dsc bit_and}}
{{dsc inc | cpp/utility/functional/dsc bit_or}}
{{dsc inc | cpp/utility/functional/dsc bit_xor}}
{{dsc inc | cpp/utility/functional/dsc bit_not}}

{{dsc h2 | Negators }}
{{dsc inc | cpp/utility/functional/dsc not_fn}}
{{dsc inc | cpp/utility/functional/dsc unary_negate}}
{{dsc inc | cpp/utility/functional/dsc binary_negate}}
{{dsc inc | cpp/utility/functional/dsc not1}}
{{dsc inc | cpp/utility/functional/dsc not2}}

{{dsc h2 | Searchers }}
{{dsc inc | cpp/utility/functional/dsc default_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_horspool_searcher }}
{{dsc end}}

===Deprecated in C++11 and removed in C++17===
{{dsc begin}}
{{dsc h2 | Base}}
{{dsc inc | cpp/utility/functional/dsc unary_function}}
{{dsc inc | cpp/utility/functional/dsc binary_function}}

{{dsc h2 | Binders}}
{{dsc inc | cpp/utility/functional/dsc binder12}}
{{dsc inc | cpp/utility/functional/dsc bind12}}

{{dsc h2 | Function adaptors}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_unary_function}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_binary_function}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_t}}
{{dsc inc | cpp/utility/functional/dsc mem_fun}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_ref_t}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_ref}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  // invoke:
  template &lt;class F, class... Args&gt;
  invoke_result_t&lt;F, Args...&gt; invoke(F&amp;&amp; f, Args&amp;&amp;... args);

  // reference_wrapper:
  template &lt;class T&gt; class reference_wrapper;
  template &lt;class T&gt; reference_wrapper&lt;T&gt; ref(T&amp;) noexcept;
  template &lt;class T&gt; reference_wrapper&lt;const T&gt; cref(const T&amp;) noexcept;
  template &lt;class T&gt; void ref(const T&amp;&amp;) = delete;
  template &lt;class T&gt; void cref(const T&amp;&amp;) = delete;
  template &lt;class T&gt; reference_wrapper&lt;T&gt; ref(reference_wrapper&lt;T&gt;) noexcept;
  template &lt;class T&gt; reference_wrapper&lt;const T&gt; cref(reference_wrapper&lt;T&gt;) noexcept;

  // arithmetic operations:
  template &lt;class T = void&gt; struct plus;
  template &lt;class T = void&gt; struct minus;
  template &lt;class T = void&gt; struct multiplies;
  template &lt;class T = void&gt; struct divides;
  template &lt;class T = void&gt; struct modulus;
  template &lt;class T = void&gt; struct negate;
  template &lt;&gt; struct plus&lt;void&gt;;
  template &lt;&gt; struct minus&lt;void&gt;;
  template &lt;&gt; struct multiplies&lt;void&gt;;
  template &lt;&gt; struct divides&lt;void&gt;;
  template &lt;&gt; struct modulus&lt;void&gt;;
  template &lt;&gt; struct negate&lt;void&gt;;

  // comparisons:
  template &lt;class T = void&gt; struct equal_to;
  template &lt;class T = void&gt; struct not_equal_to;
  template &lt;class T = void&gt; struct greater;
  template &lt;class T = void&gt; struct less;
  template &lt;class T = void&gt; struct greater_equal;
  template &lt;class T = void&gt; struct less_equal;
  template &lt;&gt; struct equal_to&lt;void&gt;;
  template &lt;&gt; struct not_equal_to&lt;void&gt;;
  template &lt;&gt; struct greater&lt;void&gt;;
  template &lt;&gt; struct less&lt;void&gt;;
  template &lt;&gt; struct greater_equal&lt;void&gt;;
  template &lt;&gt; struct less_equal&lt;void&gt;;

  // logical operations:
  template &lt;class T = void&gt; struct logical_and;
  template &lt;class T = void&gt; struct logical_or;
  template &lt;class T = void&gt; struct logical_not;
  template &lt;&gt; struct logical_and&lt;void&gt;;
  template &lt;&gt; struct logical_or&lt;void&gt;;
  template &lt;&gt; struct logical_not&lt;void&gt;;

  // bitwise operations:
  template &lt;class T = void&gt; struct bit_and;
  template &lt;class T = void&gt; struct bit_or;
  template &lt;class T = void&gt; struct bit_xor;
  template &lt;class T = void&gt; struct bit_not;
  template &lt;&gt; struct bit_and&lt;void&gt;;
  template &lt;&gt; struct bit_or&lt;void&gt;;
  template &lt;&gt; struct bit_xor&lt;void&gt;;
  template &lt;&gt; struct bit_not&lt;void&gt;;

  // function template not_fn:
  template &lt;class F&gt; /*unspecified*/ not_fn(F&amp;&amp; f);

  // bind:
  template&lt;class T&gt; struct is_bind_expression;
  template&lt;class T&gt; struct is_placeholder;
  template&lt;class F, class... BoundArgs&gt;
  /*unspecified*/ bind(F&amp;&amp;, BoundArgs&amp;&amp;...);
  template&lt;class R, class F, class... BoundArgs&gt;
  /*unspecified*/ bind(F&amp;&amp;, BoundArgs&amp;&amp;...);
  namespace placeholders {
    // M is the implementation-defined number of placeholders
    /* implementation-defined */ _1;
    /* implementation-defined */ _2;
    ...
    /* implementation-defined */ _M;
  }

  // member function adaptors:
  template&lt;class R, class T&gt; /*unspecified*/ mem_fn(R T::*) noexcept;

  // polymorphic function wrappers:
  class bad_function_call;
  template&lt;class&gt; class function; // undefined
  template&lt;class R, class... ArgTypes&gt; class function&lt;R(ArgTypes...)&gt;;
  template&lt;class R, class... ArgTypes&gt;
  void swap(function&lt;R(ArgTypes...)&gt;&amp;, function&lt;R(ArgTypes...)&gt;&amp;);
  template&lt;class R, class... ArgTypes&gt;
  bool operator==(const function&lt;R(ArgTypes...)&gt;&amp;, nullptr_t) noexcept;
  template&lt;class R, class... ArgTypes&gt;
  bool operator==(nullptr_t, const function&lt;R(ArgTypes...)&gt;&amp;) noexcept;
  template&lt;class R, class... ArgTypes&gt;
  bool operator!=(const function&lt;R(ArgTypes...)&gt;&amp;, nullptr_t) noexcept;
  template&lt;class R, class... ArgTypes&gt;
  bool operator!=(nullptr_t, const function&lt;R(ArgTypes...)&gt;&amp;) noexcept;

  // searchers:
  template&lt;class ForwardIterator, class BinaryPredicate = equal_to&lt;&gt;&gt;
  class default_searcher;
  template&lt;class RandomAccessIterator,
           class Hash = hash&lt;typename iterator_traits&lt;RandomAccessIterator&gt;::value_type&gt;,
           class BinaryPredicate = equal_to&lt;&gt;&gt;
  class boyer_moore_searcher;
  template&lt;class RandomAccessIterator,
           class Hash = hash&lt;typename iterator_traits&lt;RandomAccessIterator&gt;::value_type&gt;,
           class BinaryPredicate = equal_to&lt;&gt;&gt;
  class boyer_moore_horspool_searcher;
  template&lt;class ForwardIterator, class BinaryPredicate = equal_to&lt;&gt;&gt;
  default_searcher&lt;ForwardIterator, BinaryPredicate&gt;
  make_default_searcher(ForwardIterator pat_first, ForwardIterator pat_last,
                        BinaryPredicate pred = BinaryPredicate());
  template&lt;class RandomAccessIterator,
           class Hash = hash&lt;typename iterator_traits&lt;RandomAccessIterator&gt;::value_type&gt;,
           class BinaryPredicate = equal_to&lt;&gt;&gt;
  boyer_moore_searcher&lt;RandomAccessIterator, Hash, BinaryPredicate&gt;
  make_boyer_moore_searcher(RandomAccessIterator pat_first,
                            RandomAccessIterator pat_last,
                            Hash hf = Hash(), BinaryPredicate pred = BinaryPredicate());
  template&lt;class RandomAccessIterator,
           class Hash = hash&lt;typename iterator_traits&lt;RandomAccessIterator&gt;::value_type&gt;,
           class BinaryPredicate = equal_to&lt;&gt;&gt;
  boyer_moore_horspool_searcher&lt;RandomAccessIterator, Hash, BinaryPredicate&gt;
  make_boyer_moore_horspool_searcher(RandomAccessIterator pat_first,
                                     RandomAccessIterator pat_last,
                                     Hash hf = Hash(),
                                     BinaryPredicate pred = BinaryPredicate());

  // hash function primary template:
  template &lt;class T&gt; struct hash;

  // function object binders:
  template &lt;class T&gt; inline constexpr bool is_bind_expression_v
  = is_bind_expression&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr int is_placeholder_v
  = is_placeholder&lt;T&gt;::value;
}
}}

====Class {{lc|std::reference_wrapper}}====
{{source|1=
namespace std {
  template &lt;class T&gt; class reference_wrapper {
    public :
    // types
    using type = T;
    // construct/copy/destroy
    reference_wrapper(T&amp;) noexcept;
    reference_wrapper(T&amp;&amp;) = delete; // do not bind to temporary objects
    reference_wrapper(const reference_wrapper&amp; x) noexcept;
    // assignment
    reference_wrapper&amp; operator=(const reference_wrapper&amp; x) noexcept;
    // access
    operator T&amp; () const noexcept;
    T&amp; get() const noexcept;
    // invocation
    template &lt;class... ArgTypes&gt;
    invoke_result_t&lt;T&amp;, ArgTypes...&gt; operator() (ArgTypes&amp;&amp;...) const;
  };
}
}}

====Class {{lc|std::is_bind_expression}}====
{{source|1=
namespace std {
  template&lt;class T&gt; struct is_bind_expression;
}
}}

====Class {{lc|std::is_placeholder}}====
{{source|1=
namespace std {
  template&lt;class T&gt; struct is_placeholder;
}
}}

====Class {{lc|std::bad_function_call}}====
{{source|1=
class bad_function_call : public std::exception {
public:
    // constructor:
    bad_function_call() noexcept;
};
}}

====Class {{lc|std::function}}====
{{source|1=
namespace std {
  template&lt;class&gt; class function; // undefined
  template&lt;class R, class... ArgTypes&gt;
  class function&lt;R(ArgTypes...)&gt; {
    public:
    using result_type = R;
    // construct/copy/destroy:
    function() noexcept;
    function(nullptr_t) noexcept;
    function(const function&amp;);
    function(function&amp;&amp;);
    template&lt;class F&gt; function(F);
    function&amp; operator=(const function&amp;);
    function&amp; operator=(function&amp;&amp;);
    function&amp; operator=(nullptr_t) noexcept;
    template&lt;class F&gt; function&amp; operator=(F&amp;&amp;);
    template&lt;class F&gt; function&amp; operator=(reference_wrapper&lt;F&gt;) noexcept;
    ~function();
    // function modifiers:
    void swap(function&amp;) noexcept;
    // function capacity:
    explicit operator bool() const noexcept;
    // function invocation:
    R operator()(ArgTypes...) const;
    // function target access:
    const type_info&amp; target_type() const noexcept;
    template&lt;class T&gt; T* target() noexcept;
    template&lt;class T&gt; const T* target() const noexcept;
  };
  // Null pointer comparisons:
  template &lt;class R, class... ArgTypes&gt;
  bool operator==(const function&lt;R(ArgTypes...)&gt;&amp;, nullptr_t) noexcept;
  template &lt;class R, class... ArgTypes&gt;
  bool operator==(nullptr_t, const function&lt;R(ArgTypes...)&gt;&amp;) noexcept;
  template &lt;class R, class... ArgTypes&gt;
  bool operator!=(const function&lt;R(ArgTypes...)&gt;&amp;, nullptr_t) noexcept;
  template &lt;class R, class... ArgTypes&gt;
  bool operator!=(nullptr_t, const function&lt;R(ArgTypes...)&gt;&amp;) noexcept;
  // specialized algorithms:
  template &lt;class R, class... ArgTypes&gt;
  void swap(function&lt;R(ArgTypes...)&gt;&amp;, function&lt;R(ArgTypes...)&gt;&amp;);
}
}}

===See Also===
{{dsc begin}}
{{dsc|{{header|string}}|Specializes {{lc|std::hash}} for {{lc|std::string}}, {{lc|std::u16string}},  {{lc|std::u32string}},  {{lc|std::wstring}} }}
{{dsc|{{header|system_error}}|Specializes {{lc|std::hash}} for {{lc|std::error_code}} }}
{{dsc|{{header|bitset}}|Specializes {{lc|std::hash}} for {{lc|std::bitset}} }}
{{dsc|{{header|memory}}|Specializes {{lc|std::hash}} for {{lc|std::unique_ptr}}, {{lc|std::shared_ptr}} }}
{{dsc|{{header|typeindex}}|Specializes {{lc|std::hash}} for {{lc|std::type_index}} }}
{{dsc|{{header|vector}}|Specializes {{lc|std::hash}} for {{c|std::vector&lt;bool&gt;}} }}
{{dsc|{{header|thread}}|Specializes {{lc|std::hash}} for {{lc|std::thread::id}} }}
{{dsc end}}</text>
      <sha1>75ntt5jrqzsn9mkzglhcecpfzns8a2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/future</title>
    <ns>0</ns>
    <id>12863</id>
    <revision>
      <id>83669</id>
      <parentid>65915</parentid>
      <timestamp>2016-03-06T07:09:52Z</timestamp>
      <contributor>
        <ip>183.206.175.40</ip>
      </contributor>
      <text xml:space="preserve" bytes="6348">{{cpp/header/title|future}}
{{cpp/header/navbar}}
This header is part of the [[cpp/thread|thread support]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/thread/dsc promise}}
{{dsc inc | cpp/thread/dsc packaged_task}}
{{dsc inc | cpp/thread/dsc future}}
{{dsc inc | cpp/thread/dsc shared_future}}
{{dsc inc | cpp/thread/dsc launch}}
{{dsc inc | cpp/thread/dsc future_status}}
{{dsc inc | cpp/thread/dsc future_error}}
{{dsc inc | cpp/thread/dsc future_errc}}
{{dsc inc | cpp/thread/promise/dsc uses_allocator}}
{{dsc inc | cpp/thread/packaged_task/dsc uses_allocator}}
{{dsc h1|Functions}}
{{dsc inc | cpp/thread/dsc async}}
{{dsc inc | cpp/thread/dsc future_category}}
{{dsc inc | cpp/thread/promise/dsc swap2}}
{{dsc inc | cpp/thread/packaged_task/dsc swap2}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
    enum class future_errc {
        broken_promise = /*implementation-defined*/,
        future_already_retrieved = /*implementation-defined*/,
        promise_already_satisfied = /*implementation-defined*/,
        no_state = /*implementation-defined*/
    };

    enum class launch : /*unspecified*/ {
        async = /*unspecified*/,
        deferred = /*unspecified*/,
        /*implementation-defined*/
    };

    enum class future_status {
        ready,
        timeout,
        deferred
    };

    template &lt;&gt;
    struct is_error_code_enum&lt;future_errc&gt; : public true_type { };

    error_code make_error_code(future_errc e) noexcept;
    error_condition make_error_condition(future_errc e) noexcept;
    const error_category&amp; future_category() noexcept;

    class future_error;

    template &lt;class R&gt; class promise;
    template &lt;class R&gt; class promise&lt;R&amp;&gt;;
    template &lt;&gt; class promise&lt;void&gt;;

    template &lt;class R&gt;
    void swap(promise&lt;R&gt;&amp; x, promise&lt;R&gt;&amp; y) noexcept;

    template &lt;class R, class Alloc&gt;
    struct uses_allocator&lt;promise&lt;R&gt;, Alloc&gt; : true_type {};

    template &lt;class R&gt; class future;
    template &lt;class R&gt; class future&lt;R&amp;&gt;;
    template &lt;&gt; class future&lt;void&gt;;

    template &lt;class R&gt; class shared_future;
    template &lt;class R&gt; class shared_future&lt;R&amp;&gt;;
    template &lt;&gt; class shared_future&lt;void&gt;;

    template &lt;class&gt; class packaged_task; // undefined
    template &lt;class R, class... ArgTypes&gt;
    class packaged_task&lt;R(ArgTypes...)&gt;;

    template &lt;class R&gt;
    void swap(packaged_task&lt;R(ArgTypes...)&gt;&amp;,
              packaged_task&lt;R(ArgTypes...)&gt;&amp;) noexcept;

    template &lt;class R, class Alloc&gt;
    struct uses_allocator&lt;packaged_task&lt;R&gt;, Alloc&gt; : true_type {};

    template &lt;class F, class... Args&gt;
     future&lt;result_of_t&lt;decay_t&lt;F&gt;(decay_t&lt;Args&gt;...)&gt;&gt;
     async(F&amp;&amp; f, Args&amp;&amp;... args);

    template &lt;class F, class... Args&gt;
     future&lt;result_of_t&lt;decay_t&lt;F&gt;(decay_t&lt;Args&gt;...)&gt;&gt;
     async(launch policy, F&amp;&amp; f, Args&amp;&amp;... args);
}
}}

====Class {{lc|std::future_error}}====
{{source|1=
class future_error : public logic_error {
 public:
    future_error(error_code ec); // exposition only
    const error_code&amp; code() const noexcept;
    const char* what() const noexcept;
};
}}

====Class {{lc|std::promise}}====
{{source|1=
template &lt;class R&gt;
class promise {
 public:
    promise();
    template &lt;class Allocator&gt;
    promise(allocator_arg_t, const Allocator&amp; a);
    promise(promise&amp;&amp; rhs) noexcept;
    promise(const promise&amp; rhs) = delete;
    ~promise();

    // assignment
    promise&amp; operator=(promise&amp;&amp; rhs) noexcept;
    promise&amp; operator=(const promise&amp; rhs) = delete;
    void swap(promise&amp; other) noexcept;

    // retrieving the result
    future&lt;R&gt; get_future();

    // setting the result
    void set_value(/*see description*/);
    void set_exception(exception_ptr p);

    // setting the result with deferred notification
    void set_value_at_thread_exit(/*see description*/);
    void set_exception_at_thread_exit(exception_ptr p);
};
}}

====Class {{lc|std::future}}====
{{source|1=
template &lt;class R&gt;
class future {
 public:
    future() noexcept;
    future(future &amp;&amp;) noexcept;
    future(const future&amp; rhs) = delete;
    ~future();
    future&amp; operator=(const future&amp; rhs) = delete;
    future&amp; operator=(future&amp;&amp;) noexcept;
    shared_future&lt;R&gt; share();

    // retrieving the value
    /*see description*/ get();

    // functions to check state
    bool valid() const noexcept;
    void wait() const;
    template &lt;class Rep, class Period&gt;
    future_status wait_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time) const;
    template &lt;class Clock, class Duration&gt;
    future_status wait_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time) const;
};
}}

====Class {{lc|std::shared_future}}====
{{source|1=
template &lt;class R&gt;
class shared_future {
 public:
    shared_future() noexcept;
    shared_future(const shared_future&amp; rhs);
    shared_future(future&lt;R&gt;&amp;&amp;) noexcept;
    shared_future(shared_future&amp;&amp; rhs) noexcept;
    ~shared_future();
    shared_future&amp; operator=(const shared_future&amp; rhs);
    shared_future&amp; operator=(shared_future&amp;&amp; rhs) noexcept;

    // retrieving the value
    /*see description*/ get() const;

    // functions to check state
    bool valid() const noexcept;
    void wait() const;
    template &lt;class Rep, class Period&gt;
    future_status wait_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time) const;
    template &lt;class Clock, class Duration&gt;
    future_status wait_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time) const;
};
}}

====Class {{lc|std::packaged_task}}====
{{source|1=
template&lt;class&gt; class packaged_task; // undefined

template&lt;class R, class... ArgTypes&gt;
class packaged_task&lt;R(ArgTypes...)&gt; {
 public:
    // construction and destruction
    packaged_task() noexcept;
    template &lt;class F&gt;
    explicit packaged_task(F&amp;&amp; f);
    template &lt;class F, class Allocator&gt;
    explicit packaged_task(allocator_arg_t, const Allocator&amp; a, F&amp;&amp; f);
    ~packaged_task();

    // no copy
    packaged_task(const packaged_task&amp;) = delete;
    packaged_task&amp; operator=(const packaged_task&amp;) = delete;

    // move support
    packaged_task(packaged_task&amp;&amp; rhs) noexcept;
    packaged_task&amp; operator=(packaged_task&amp;&amp; rhs) noexcept;

    void swap(packaged_task&amp; other) noexcept;
    bool valid() const noexcept;

    // result retrieval
    future&lt;R&gt; get_future();

    // execution
    void operator()(ArgTypes... );
    void make_ready_at_thread_exit(ArgTypes...);

    void reset();
};
}}</text>
      <sha1>ogrzxhshb2cpwr2dz1v2szx2lw66fn8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/initializer list</title>
    <ns>0</ns>
    <id>9660</id>
    <revision>
      <id>92025</id>
      <parentid>88777</parentid>
      <timestamp>2017-04-02T11:32:59Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1159">{{cpp/header/title|initializer_list}}
{{cpp/header/navbar}}
This header is part of the [[cpp/utility|utility]] library.

===Classes===
{{dsc begin}}
{{dsc| {{lc|std::initializer_list}}{{mark c++11}} | {{mark tclass}} }}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc begin2}}
{{dsc inc | cpp/utility/initializer_list/dsc end2}}
{{dsc end}}



===Synopsis===
{{source|1=
namespace std {
  template&lt;class E&gt; class initializer_list {
  public:
    using value_type = E;
    using reference = const E&amp;;
    using const_reference = const E&amp;;
    using size_type = size_t;
    using iterator = const E*;
    using const_iterator = const E*;
    constexpr initializer_list() noexcept;
    constexpr size_t size() const noexcept; // number of elements
    constexpr const E* begin() const noexcept; // first element
    constexpr const E* end() const noexcept; // one past the last element
  };
  // initializer list range access
  template&lt;class E&gt; constexpr const E* begin(initializer_list&lt;E&gt; il) noexcept;
  template&lt;class E&gt; constexpr const E* end(initializer_list&lt;E&gt; il) noexcept;
}
}}

[[zh:cpp/header/initializer_list]]</text>
      <sha1>8pnfgzvv87jwvc18clhm8647gymxuw4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/iomanip</title>
    <ns>0</ns>
    <id>9669</id>
    <revision>
      <id>75156</id>
      <parentid>57489</parentid>
      <timestamp>2015-01-08T12:55:39Z</timestamp>
      <contributor>
        <ip>80.15.155.46</ip>
      </contributor>
      <text xml:space="preserve" bytes="1295">{{cpp/header/title|iomanip}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io/manip|Input/output manipulators]] library.
===Definitions===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc inc | cpp/io/manip/dsc setbase}}
{{dsc inc | cpp/io/manip/dsc setfill}}
{{dsc inc | cpp/io/manip/dsc setprecision}}
{{dsc inc | cpp/io/manip/dsc setw}}
{{dsc inc | cpp/io/manip/dsc get_money}}
{{dsc inc | cpp/io/manip/dsc put_money}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc inc | cpp/io/manip/dsc quoted}}
{{dsc end}}

===Synopsis===
{{source|

namespace std {
    // types T1, T2, ... are unspecified implementation types
    /*T1*/ resetiosflags(ios_base::fmtflags mask);
    /*T2*/ setiosflags (ios_base::fmtflags mask);
    /*T3*/ setbase(int base);
    template&lt;charT&gt; /*T4*/ setfill(charT c);
    /*T5*/ setprecision(int n);
    /*T6*/ setw(int n);
    template &lt;class moneyT&gt; /*T7*/ get_money(moneyT&amp; mon, bool intl {{=}} false);
    template &lt;class moneyT&gt; /*T8*/ put_money(const moneyT&amp; mon, bool intl {{=}} false);
    template &lt;class charT&gt; /*T9*/ get_time(struct tm* tmb, const charT* fmt);
    template &lt;class charT&gt; /*T10*/ put_time(const struct tm* tmb, const charT* fmt);
}

}}</text>
      <sha1>iqynfd5p795genunuximvhwnv78up14</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/ios</title>
    <ns>0</ns>
    <id>12856</id>
    <revision>
      <id>72066</id>
      <parentid>63998</parentid>
      <timestamp>2014-07-11T10:58:54Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>(w)ios and (w)streampos are declared in &lt;iosfwd&gt;</comment>
      <text xml:space="preserve" bytes="8432">{{cpp/header/title|ios}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io|Input/Output]] library.
{{dsc begin}}
{{dsc h1|Includes}}
{{dsc|{{header|iosfwd}}}}
{{dsc h1|Classes}}
{{dsc class | cpp/io/ios_base | manages formatting flags and input/output exceptions}}
{{dsc tclass | cpp/io/basic_ios | manages an arbitrary stream buffer}}
{{dsc tclass  | cpp/io/fpos | represents absolute position in a stream or a file}}
{{dsc inc | cpp/io/dsc io_errc}}
{{dsc inc | cpp/io/dsc iostream_category}}
{{dsc inc | cpp/io/io_errc/dsc is_error_code_enum}}
{{dsc h1|Typedefs}}
{{dsc typedef | cpp/io/streamoff | represents relative file/stream position (offset from fpos), sufficient to represent any file size }}
{{dsc typedef | cpp/io/streamsize | represents the number of characters transferred in an I/O operation or the size of an I/O buffer}}
{{dsc h1|Functions}}
{{dsc inc | cpp/io/io_errc/dsc make_error_code}}
{{dsc inc | cpp/io/io_errc/dsc make_error_condition}}
{{dsc inc | cpp/io/manip/dsc boolalpha}}
{{dsc inc | cpp/io/manip/dsc showbase}}
{{dsc inc | cpp/io/manip/dsc showpoint}}
{{dsc inc | cpp/io/manip/dsc showpos}}
{{dsc inc | cpp/io/manip/dsc skipws}}
{{dsc inc | cpp/io/manip/dsc uppercase}}
{{dsc inc | cpp/io/manip/dsc unitbuf}}
{{dsc inc | cpp/io/manip/dsc left}}
{{dsc inc | cpp/io/manip/dsc hex}}
{{dsc inc | cpp/io/manip/dsc fixed}}
{{dsc end}}

===Synopsis===

{{source|1=
#include &lt;iosfwd&gt;
namespace std {

    typedef /*implementation-defined*/ streamoff;
    typedef /*implementation-defined*/ streamsize;

    template &lt;class stateT&gt; class fpos;

    class ios_base;

    template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
        class basic_ios;

    // manipulators:
    ios_base&amp; boolalpha (ios_base&amp; str);
    ios_base&amp; noboolalpha(ios_base&amp; str);
    ios_base&amp; showbase (ios_base&amp; str);
    ios_base&amp; noshowbase (ios_base&amp; str);
    ios_base&amp; showpoint (ios_base&amp; str);
    ios_base&amp; noshowpoint(ios_base&amp; str);
    ios_base&amp; showpos (ios_base&amp; str);
    ios_base&amp; noshowpos (ios_base&amp; str);
    ios_base&amp; skipws (ios_base&amp; str);
    ios_base&amp; noskipws (ios_base&amp; str);
    ios_base&amp; uppercase (ios_base&amp; str);
    ios_base&amp; nouppercase(ios_base&amp; str);
    ios_base&amp; unitbuf (ios_base&amp; str);
    ios_base&amp; nounitbuf (ios_base&amp; str);
    ios_base&amp; internal (ios_base&amp; str);
    ios_base&amp; left (ios_base&amp; str);
    ios_base&amp; right (ios_base&amp; str);
    ios_base&amp; dec (ios_base&amp; str);
    ios_base&amp; hex (ios_base&amp; str);
    ios_base&amp; oct (ios_base&amp; str);
    ios_base&amp; fixed (ios_base&amp; str);
    ios_base&amp; scientific (ios_base&amp; str);
    ios_base&amp; hexfloat (ios_base&amp; str);
    ios_base&amp; defaultfloat(ios_base&amp; str);

    enum class io_errc {
        stream = 1
    };

    template &lt;&gt;
    struct is_error_code_enum&lt;io_errc&gt; : public true_type { };

    error_code make_error_code(io_errc e);
    error_condition make_error_condition(io_errc e);
    const error_category&amp; iostream_category();
}
}}

====Class {{lc|std::ios_base}}====
{{source|1=
class ios_base {
 public:
    class failure;

    // fmtflags
    typedef /*bitmask-type-1*/ fmtflags;
    static constexpr fmtflags boolalpha = /*unspecified*/;
    static constexpr fmtflags dec = /*unspecified*/;
    static constexpr fmtflags fixed = /*unspecified*/;
    static constexpr fmtflags hex = /*unspecified*/;
    static constexpr fmtflags internal = /*unspecified*/;
    static constexpr fmtflags left = /*unspecified*/;
    static constexpr fmtflags oct = /*unspecified*/;
    static constexpr fmtflags right = /*unspecified*/;
    static constexpr fmtflags scientific = /*unspecified*/;
    static constexpr fmtflags showbase = /*unspecified*/;
    static constexpr fmtflags showpoint = /*unspecified*/;
    static constexpr fmtflags showpos = /*unspecified*/;
    static constexpr fmtflags skipws = /*unspecified*/;
    static constexpr fmtflags unitbuf = /*unspecified*/;
    static constexpr fmtflags uppercase = /*unspecified*/;
    static constexpr fmtflags adjustfield = /*left{{!}}right{{!}}internal*/ ;
    static constexpr fmtflags basefield = /*dec{{!}}oct{{!}}hex*/ ;
    static constexpr fmtflags floatfield = /*scientific{{!}}fixed*/ ;

    // iostate
    typedef /*bitmask-type-2*/ iostate;
    static constexpr iostate badbit = /*unspecified*/;
    static constexpr iostate eofbit = /*unspecified*/;
    static constexpr iostate failbit = /*unspecified*/;
    static constexpr iostate goodbit = /*0*/ ;

    // openmode
    typedef /*bitmask-type-3*/ openmode;
    static constexpr openmode app = /*unspecified*/;
    static constexpr openmode ate = /*unspecified*/;
    static constexpr openmode binary = /*unspecified*/;
    static constexpr openmode in = /*unspecified*/;
    static constexpr openmode out = /*unspecified*/;
    static constexpr openmode trunc = /*unspecified*/;

    // seekdir
    typedef /*bitmask-type-4*/ seekdir;
    static constexpr seekdir beg = /*unspecified*/;
    static constexpr seekdir cur = /*unspecified*/;
    static constexpr seekdir end = /*unspecified*/;

    class Init;

    // fmtflags state:
    fmtflags flags() const;
    fmtflags flags(fmtflags fmtfl);
    fmtflags setf(fmtflags fmtfl);
    fmtflags setf(fmtflags fmtfl, fmtflags mask);
    void unsetf(fmtflags mask);
    streamsize precision() const;
    streamsize precision(streamsize prec);
    streamsize width() const;
    streamsize width(streamsize wide);

    // locales:
    locale imbue(const locale&amp; loc);
    locale getloc() const;

    // storage:
    static int xalloc();
    long&amp; iword(int index);
    void*&amp; pword(int index);

    // destructor
    virtual ~ios_base();

    // callbacks;
    enum event {
        erase_event,
        imbue_event,
        copyfmt_event
    };
    typedef void (*event_callback)(event, ios_base&amp;, int index);
    void register_callback(event_callback fn, int index);

    ios_base(const ios_base&amp;) = delete;
    ios_base&amp; operator=(const ios_base&amp;) = delete;
    static bool sync_with_stdio(bool sync = true);

 protected:
    ios_base();

 private:
    static int index; // exposition only
    long* iarray; // exposition only
    void** parray; // exposition only
};
}}

====Class {{lc|std::ios_base::failure}}====
{{source|1=
class ios_base::failure : public system_error {
 public:
    explicit failure(const string&amp; msg, const error_code&amp; ec = io_errc::stream);
    explicit failure(const char* msg, const error_code&amp; ec = io_errc::stream);
};
}}

====Class {{lc|std::ios_base::Init}}====
{{source|1=
class ios_base::Init {
 public:
    Init();
    ~Init();
 private:
    static int init_cnt; // exposition only
};
}}

====Class {{lc|std::fpos}}====
{{source|1=
template &lt;class stateT&gt; class fpos {
 public:
    stateT state() const;
    void state(stateT);
 private;
    stateT st; // exposition only
};
}}

====Class {{lc|std::basic_ios}}====
{{source|1=
template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
class basic_ios : public ios_base {
 public:
    // types:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;

    explicit operator bool() const;
    bool operator!() const;
    iostate rdstate() const;
    void clear(iostate state = goodbit);
    void setstate(iostate state);
    bool good() const;
    bool eof() const;
    bool fail() const;
    bool bad() const;

    iostate exceptions() const;
    void exceptions(iostate except);

    // Constructor/destructor:
    explicit basic_ios(basic_streambuf&lt;charT,traits&gt;* sb);
    virtual ~basic_ios();

    // Members:
    basic_ostream&lt;charT,traits&gt;* tie() const;
    basic_ostream&lt;charT,traits&gt;* tie(basic_ostream&lt;charT,traits&gt;* tiestr);
    basic_streambuf&lt;charT,traits&gt;* rdbuf() const;
    basic_streambuf&lt;charT,traits&gt;* rdbuf(basic_streambuf&lt;charT,traits&gt;* sb);
    basic_ios&amp; copyfmt(const basic_ios&amp; rhs);
    char_type fill() const;
    char_type fill(char_type ch);
    locale imbue(const locale&amp; loc);
    char narrow(char_type c, char dfault) const;
    char_type widen(char c) const;
    basic_ios(const basic_ios&amp; ) = delete;
    basic_ios&amp; operator=(const basic_ios&amp;) = delete;

 protected:
    basic_ios();
    void init(basic_streambuf&lt;charT,traits&gt;* sb);
    void move(basic_ios&amp; rhs);
    void move(basic_ios&amp;&amp; rhs);
    void swap(basic_ios&amp; rhs) noexcept;
    void set_rdbuf(basic_streambuf&lt;charT, traits&gt;* sb);
};
}}</text>
      <sha1>nkp9cyjc6wuj3qty0gvbxengjtj58wr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/iosfwd</title>
    <ns>0</ns>
    <id>9738</id>
    <revision>
      <id>72077</id>
      <parentid>72068</parentid>
      <timestamp>2014-07-12T06:15:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6842">{{cpp/header/title|iosfwd}}
{{cpp/header/navbar}}
This header contains forward declarations for the [[cpp/io|Input/output]] library.

{{dsc begin}}
{{dsc h1|Forward declarations}}
{{dsc header|string}}
{{dsc| {{lc|std::char_traits}} | Class Template which describes properties of a character type {{mark tclass}} }}
{{dsc| {{c|std::char_traits&lt;char&gt;}} | {{mark ptclass}} }}
{{dsc| {{c|std::char_traits&lt;wchar_t&gt;}} | {{mark ptclass}} }}
{{dsc| {{c|std::char_traits&lt;char16_t&gt;}} {{mark c++11}} | {{mark ptclass}} }}
{{dsc| {{c|std::char_traits&lt;char32_t&gt;}} {{mark c++11}} | {{mark ptclass}} }}

{{dsc header | memory}}
{{dsc inc | cpp/memory/dsc allocator}}

{{dsc header | ios}}
{{dsc tclass | cpp/io/basic_ios | manages an arbitrary stream buffer}}
{{dsc tclass | cpp/io/fpos | represents absolute position in a stream or a file}}

{{dsc header | streambuf}}
{{dsc tclass | cpp/io/basic_streambuf | abstracts a raw device}}

{{dsc header | ostream}}
{{dsc tclass | cpp/io/basic_ostream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level output interface}}

{{dsc header | istream}}
{{dsc tclass | cpp/io/basic_istream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level input interface}}
{{dsc tclass | cpp/io/basic_iostream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level input/output interface}}

{{dsc header | fstream}}
{{dsc tclass | cpp/io/basic_filebuf | implements raw file device}}
{{dsc tclass | cpp/io/basic_ifstream | implements high-level file stream input operations}}
{{dsc tclass | cpp/io/basic_ofstream | implements high-level file stream output operations}}
{{dsc tclass | cpp/io/basic_fstream | implements high-level file stream input/output operations}}

{{dsc header | sstream}}
{{dsc tclass | cpp/io/basic_stringbuf | implements raw string device}}
{{dsc tclass | cpp/io/basic_istringstream | implements high-level string stream input operations}}
{{dsc tclass | cpp/io/basic_ostringstream | implements high-level string stream output operations}}
{{dsc tclass | cpp/io/basic_stringstream | implements high-level string stream input/output operations}}

{{dsc header | strstream}}
{{dsc class | cpp/io/strstreambuf | notes={{mark deprecated}} | implements raw character array device}}
{{dsc class | cpp/io/istrstream | notes={{mark deprecated}} | implements character array input operations}}
{{dsc class | cpp/io/ostrstream | notes={{mark deprecated}} | implements character array output operations}}
{{dsc class | cpp/io/strstream | notes={{mark deprecated}} | implements character array input/output operations}}

{{dsc h1|Typedefs and specializations}}
{{dsc | {{lc|std::streampos}} | {{c|fpos&lt;char_traits&lt;char&gt;::state_type&gt;}}}}
{{dsc | {{lc|std::wstreampos}} | {{c|fpos&lt;char_traits&lt;wchar_t&gt;::state_type&gt;}}}}
{{dsc | In addition, for each class template {{tt|std::basic_''T''}} declared in this header, {{tt|std::''T''}} and {{tt|std::w''T''}} are declared as a synonym of {{tt|std::basic_''T''&lt;char&gt;}} and {{tt|std::basic_''T''&lt;wchar_t&gt;}} respectively.}}&lt;!--It will be a rather long list if all of them are shown, see http://en.cppreference.com/w/?oldid=72068 and the header synopsis below--&gt;
{{dsc end}}

===Synopsis===
{{source|
namespace std {
    
    template&lt;class charT&gt; class char_traits;
    template&lt;&gt; class char_traits&lt;char&gt;;
    template&lt;&gt; class char_traits&lt;char16_t&gt;;
    template&lt;&gt; class char_traits&lt;char32_t&gt;;
    template&lt;&gt; class char_traits&lt;wchar_t&gt;;
    
    template&lt;class T&gt; class allocator;
    
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_ios;

    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_streambuf;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_istream;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_ostream;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_iostream;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt;,
            class Allocator {{=}} allocator&lt;charT&gt; &gt;
        class basic_stringbuf;

    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt;,
            class Allocator {{=}} allocator&lt;charT&gt; &gt;
        class basic_istringstream;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt;,
            class Allocator {{=}} allocator&lt;charT&gt; &gt;
        class basic_ostringstream;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt;,
            class Allocator {{=}} allocator&lt;charT&gt; &gt;
        class basic_stringstream;
        
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_filebuf;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_ifstream;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_ofstream;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_fstream;
    
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class istreambuf_iterator;
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class ostreambuf_iterator;


    typedef basic_ios&lt;char&gt;     ios;    
    typedef basic_ios&lt;wchar_t&gt;  wios;   
            
    typedef basic_streambuf&lt;char&gt;   streambuf;
    typedef basic_istream&lt;char&gt;     istream;
    typedef basic_ostream&lt;char&gt;     ostream;
    typedef basic_iostream&lt;char&gt;    iostream;
            
    typedef basic_stringbuf&lt;char&gt;       stringbuf;
    typedef basic_istringstream&lt;char&gt;   istringstream;
    typedef basic_ostringstream&lt;char&gt;   ostringstream;
    typedef basic_stringstream&lt;char&gt;    stringstream;
            
    typedef basic_filebuf&lt;char&gt;     filebuf;
    typedef basic_ifstream&lt;char&gt;    ifstream;
    typedef basic_ofstream&lt;char&gt;    ofstream;
    typedef basic_fstream&lt;char&gt;     fstream;
            
    typedef basic_streambuf&lt;wchar_t&gt;    wstreambuf;
    typedef basic_istream&lt;wchar_t&gt;      wistream;
    typedef basic_ostream&lt;wchar_t&gt;      wostream;
    typedef basic_iostream&lt;wchar_t&gt;     wiostream;
            
    typedef basic_stringbuf&lt;wchar_t&gt;        wstringbuf;
    typedef basic_istringstream&lt;wchar_t&gt;    wistringstream;
    typedef basic_ostringstream&lt;wchar_t&gt;    wostringstream;
    typedef basic_stringstream&lt;wchar_t&gt;     wstringstream;
            
    typedef basic_filebuf&lt;wchar_t&gt;  wfilebuf;        
    typedef basic_ifstream&lt;wchar_t&gt; wifstream;      
    typedef basic_ofstream&lt;wchar_t&gt; wofstream;      
    typedef basic_fstream&lt;wchar_t&gt;  wfstream;   
            
    template &lt;class state&gt; class fpos;      
    typedef fpos&lt;char_traits&lt;char&gt;::state_type&gt; streampos;  
    typedef fpos&lt;char_traits&lt;wchar_t&gt;::state_type&gt; wstreampos;  

}    

}}</text>
      <sha1>6ciuw65dx0smqcm4bm42vqxbx1vbqeo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/iostream</title>
    <ns>0</ns>
    <id>9756</id>
    <revision>
      <id>85980</id>
      <parentid>72149</parentid>
      <timestamp>2016-06-08T19:36:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1470">{{cpp/header/title|iostream}}
{{cpp/header/navbar}}

This header is part of the [[cpp/io|Input/output]] library.

Including {{tt|&lt;iostream&gt;}} behaves as if it defines a static storage duration object of type {{lc|std::ios_base::Init}}, whose constructor initializes the standard stream objects if it is the first {{tt|std::ios_base::Init}} object to be constructed, and whose destructor flushes those objects (except for {{tt|cin}} and {{tt|wcin}}) if it is the last {{tt|std::ios_base::Init}} object to be destroyed.

{{dsc begin}}

{{dsc begin}}
{{dsc h1|Includes}}
{{dsc | {{header|ios}} | {{mark since c++11}} }}
{{dsc | {{header|streambuf}} | {{mark since c++11}} }}
{{dsc | {{header|istream}} | {{mark since c++11}} }}
{{dsc | {{header|ostream}} | {{mark since c++11}} }}
{{dsc h1|Objects}}
{{dsc|{{lc|std::cin}}|standard input}}
{{dsc|{{lc|std::cout}}|standard output}}
{{dsc|{{lc|std::cerr}}|standard error}}
{{dsc|{{lc|std::clog}}|standard log}}
{{dsc|{{lc|std::wcin}}|standard input}}
{{dsc|{{lc|std::wcout}}|standard output}}
{{dsc|{{lc|std::wcerr}}|standard error}}
{{dsc|{{lc|std::wclog}}|standard log}}
{{dsc end}}


===Synopsis===
{{source|

#include &lt;ios&gt;
#include &lt;streambuf&gt;
#include &lt;istream&gt;
#include &lt;ostream&gt;

namespace std {
    
    extern istream cin;
    extern ostream cout;
    extern ostream cerr;
    extern ostream clog;

    extern  wistream wcin;
    extern  wostream wcout;
    extern  wostream wcerr;
    extern  wostream wclog;

}

}}</text>
      <sha1>sm4axd2fgsn5ze4dkil2bvyct2iiqex</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/istream</title>
    <ns>0</ns>
    <id>9755</id>
    <revision>
      <id>57495</id>
      <parentid>49577</parentid>
      <timestamp>2013-06-01T05:54:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="7013">{{cpp/header/title|istream}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io|input/output]] library.
{{dsc begin}}
{{dsc h1 | Classes}}
{{dsc tclass | cpp/io/basic_istream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level input interface}}
{{dsc|{{lc|std::istream}}|{{c|basic_istream&lt;char&gt;}}&lt;br/&gt; {{mark typedef}}}}
{{dsc|{{lc|std::wistream}}|{{c|basic_istream&lt;wchar_t&gt;}}&lt;br/&gt; {{mark typedef}} }}
{{dsc tclass | cpp/io/basic_iostream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level input/output interface}}
{{dsc|{{lc|std::iostream}}|{{c|basic_iostream&lt;char&gt;}}&lt;br/&gt; {{mark typedef}}}}
{{dsc|{{lc|std::wiostream}}|{{c|basic_iostream&lt;wchar_t&gt;}}&lt;br/&gt; {{mark typedef}} }}
{{dsc h1 | Functions}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt2}}
{{dsc h2 | Manipulators}}
{{dsc inc | cpp/io/manip/dsc ws}}
{{dsc end}}

===Synopsis===
{{source|
namespace std {
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_istream;
    typedef basic_istream&lt;char&gt;    istream;
    typedef basic_istream&lt;wchar_t&gt; wistream;

    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_iostream;
    typedef basic_istream&lt;char&gt;    iostream;
    typedef basic_istream&lt;wchar_t&gt; wiostream;

    template &lt;class charT, class traits&gt;
        basic_istream&lt;charT,traits&gt;&amp; ws(basic_istream&lt;charT,traits&gt;&amp; is);

    template &lt;class charT, class traits, class T&gt;
        basic_istream&lt;charT, traits&gt;&amp;
        operator&gt;&gt;(basic_istream&lt;charT, traits&gt;&amp;&amp; is, T&amp; x);

    // character extraction templates:
    template&lt;class charT, class traits&gt;
        basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(basic_istream&lt;charT,traits&gt;&amp;, 
                                                charT&amp;);
    template&lt;class traits&gt;
        basic_istream&lt;char,traits&gt;&amp; operator&gt;&gt;(basic_istream&lt;char,traits&gt;&amp;,
                                            unsigned char&amp;);
    template&lt;class traits&gt;
        basic_istream&lt;char,traits&gt;&amp; operator&gt;&gt;(basic_istream&lt;char,traits&gt;&amp;,
                                            signed char&amp;);
    template&lt;class charT, class traits&gt;
        basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(basic_istream&lt;charT,traits&gt;&amp;,
                                                charT*);
    template&lt;class traits&gt;
        basic_istream&lt;char,traits&gt;&amp; operator&gt;&gt;(basic_istream&lt;char,traits&gt;&amp;,
                                            unsigned char*);
    template&lt;class traits&gt;
        basic_istream&lt;char,traits&gt;&amp; operator&gt;&gt;(basic_istream&lt;char,traits&gt;&amp;,
                                            signed char*);

}

}}


====Class {{lc|std::basic_istream}}====
{{source|

template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
class basic_istream : virtual public basic_ios&lt;charT,traits&gt; {
public:
    // types (inherited from basic_ios):
    typedef charT                     char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits                    traits_type;
    
    // Constructor/destructor:
    explicit basic_istream(basic_streambuf&lt;char_type,traits&gt;* sb);
    virtual ~basic_istream();
    
    // Prefix/suffix:
    class sentry;
    
    // Formatted input:
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(
        basic_istream&lt;charT,traits&gt;&amp; (*pf)(basic_istream&lt;charT,traits&gt;&amp;));
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(
        basic_ios&lt;charT,traits&gt;&amp; (*pf)(basic_ios&lt;charT,traits&gt;&amp;));
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(
        ios_base&amp; (*pf)(ios_base&amp;));

    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(bool&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(short&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(unsigned short&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(int&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(unsigned int&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(long&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(unsigned long&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(long long&amp; n);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(unsigned long long&amp; n);

    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(float&amp; f);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(double&amp; f);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(long double&amp; f);

    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(void*&amp; p);
    basic_istream&lt;charT,traits&gt;&amp; operator&gt;&gt;(
        basic_streambuf&lt;char_type,traits&gt;* sb);

    // Unformatted input:
    streamsize gcount() const;
    int_type get();
    basic_istream&lt;charT,traits&gt;&amp; get(char_type&amp; c);
    basic_istream&lt;charT,traits&gt;&amp; get(char_type* s, streamsize n);
    basic_istream&lt;charT,traits&gt;&amp; get(char_type* s, streamsize n,
                                     char_type delim);
    basic_istream&lt;charT,traits&gt;&amp; get(basic_streambuf&lt;char_type,traits&gt;&amp; sb);
    basic_istream&lt;charT,traits&gt;&amp; get(basic_streambuf&lt;char_type,traits&gt;&amp; sb,
                                     char_type delim);
    
    basic_istream&lt;charT,traits&gt;&amp; getline(char_type* s, streamsize n);
    basic_istream&lt;charT,traits&gt;&amp; getline(char_type* s, streamsize n,
                                         char_type delim);
    
    
    basic_istream&lt;charT,traits&gt;&amp; ignore(
        streamsize n {{=}} 1, int_type delim {{=}} traits::eof());
    int_type                     peek();
    basic_istream&lt;charT,traits&gt;&amp; read    (char_type* s, streamsize n);
    streamsize                   readsome(char_type* s, streamsize n);

    basic_istream&lt;charT,traits&gt;&amp; putback(char_type c);
    basic_istream&lt;charT,traits&gt;&amp; unget();
    int sync();

    pos_type tellg();
    basic_istream&lt;charT,traits&gt;&amp; seekg(pos_type);
    basic_istream&lt;charT,traits&gt;&amp; seekg(off_type, ios_base::seekdir);
    
protected:
    basic_istream(const basic_istream&amp; rhs) {{=}} delete;
    basic_istream(basic_istream&amp;&amp; rhs);
    
    // Assign/swap:
    basic_istream&amp; operator{{=}}(const basic_istream&amp; rhs) {{=}} delete;
    basic_istream&amp; operator{{=}}(basic_istream&amp;&amp; rhs);
    void swap(basic_istream&amp; rhs);

};

}}

====Class {{lc|std::basic_iostream}}====
{{source|

template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
class basic_iostream :
    public basic_istream&lt;charT,traits&gt;,
    public basic_ostream&lt;charT,traits&gt; {

public:
    // types
    typedef charT                     char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits                    traits_type;
    
    // constructor/destructor
    explicit basic_iostream(basic_streambuf&lt;charT,traits&gt;* sb);
    virtual ~basic_iostream();

protected:
    basic_iostream(const basic_iostream&amp; rhs) {{=}} delete;
    basic_iostream(basic_iostream&amp;&amp; rhs);
    
    // assign/swap
    basic_iostream&amp; operator{{=}}(const basic_iostream&amp; rhs) {{=}} delete;
    basic_iostream&amp; operator{{=}}(basic_iostream&amp;&amp; rhs);
    void swap(basic_iostream&amp; rhs);
};

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/iterator</title>
    <ns>0</ns>
    <id>9780</id>
    <revision>
      <id>92150</id>
      <parentid>77768</parentid>
      <timestamp>2017-04-09T06:14:56Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="15468">{{cpp/header/title|iterator}}
{{cpp/header/navbar}}

This header is part of the [[cpp/iterator|iterator]] library.

===Classes===
{{dsc begin}}
{{dsc h2|Primitives}}
{{dsc inc | cpp/iterator/dsc iterator_traits}}
{{dsc inc | cpp/iterator/dsc iterator_tags}}
{{dsc inc | cpp/iterator/dsc iterator}}
{{dsc h2|Adaptors}}
{{dsc inc | cpp/iterator/dsc reverse_iterator}}
{{dsc inc | cpp/iterator/dsc move_iterator}}
{{dsc inc | cpp/iterator/dsc back_insert_iterator}}
{{dsc inc | cpp/iterator/dsc front_insert_iterator}}
{{dsc inc | cpp/iterator/dsc insert_iterator}}
{{dsc h2|Stream Iterators}}
{{dsc inc | cpp/iterator/dsc istream_iterator}}
{{dsc inc | cpp/iterator/dsc ostream_iterator}}
{{dsc inc | cpp/iterator/dsc istreambuf_iterator}}
{{dsc inc | cpp/iterator/dsc ostreambuf_iterator}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2|Adaptors}}
{{dsc inc | cpp/iterator/dsc make_reverse_iterator}}
{{dsc inc | cpp/iterator/dsc make_move_iterator}}
{{dsc inc | cpp/iterator/dsc front_inserter}}
{{dsc inc | cpp/iterator/dsc back_inserter}}
{{dsc inc | cpp/iterator/dsc inserter}}
{{dsc h2|Operations}}
{{dsc inc | cpp/iterator/dsc advance}}
{{dsc inc | cpp/iterator/dsc distance}}
{{dsc inc | cpp/iterator/dsc next}}
{{dsc inc | cpp/iterator/dsc prev}}
{{dsc h2|Range}}
{{dsc inc | cpp/iterator/dsc begin}}
{{dsc inc | cpp/iterator/dsc end}}
{{dsc inc | cpp/iterator/dsc rbegin}}
{{dsc inc | cpp/iterator/dsc rend}}

{{dsc h2|Non-member operators}}

{{dsc inc | cpp/iterator/adaptor/dsc operator_cmp | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator+ | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator- | move_iterator}}

{{dsc inc | cpp/iterator/adaptor/dsc operator_cmp | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator+ | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator- | reverse_iterator}}

{{dsc inc | cpp/iterator/istream_iterator/dsc operator_cmp}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc operator_cmp}}

{{dsc end}}

===Synopsis===
{{source|
namespace std {
    // primitives:
    template&lt;class Iterator&gt; struct iterator_traits;
    template&lt;class T&gt; struct iterator_traits&lt;T*&gt;;
    template&lt;class Category, class T, class Distance {{=}} ptrdiff_t,
    class Pointer {{=}} T*, class Reference {{=}} T&amp;&gt; struct iterator;

    struct input_iterator_tag { };
    struct output_iterator_tag { };
    struct forward_iterator_tag: public input_iterator_tag { };
    struct bidirectional_iterator_tag: public forward_iterator_tag { };
    struct random_access_iterator_tag: public bidirectional_iterator_tag { };

    // iterator operations:
    template &lt;class InputIterator, class Distance&gt;
        void advance(InputIterator&amp; i, Distance n);
    template &lt;class InputIterator&gt;
        typename iterator_traits&lt;InputIterator&gt;::difference_type
        distance(InputIterator first, InputIterator last);
    template &lt;class ForwardIterator&gt;
        ForwardIterator next(ForwardIterator x,
            typename std::iterator_traits&lt;ForwardIterator&gt;::difference_type n {{=}} 1);
    template &lt;class BidirectionalIterator&gt;
        BidirectionalIterator prev(BidirectionalIterator x,
            typename std::iterator_traits&lt;BidirectionalIterator&gt;::difference_type n {{=}} 1);

    // predefined iterators:
    template &lt;class Iterator&gt; class reverse_iterator;
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator{{=}}{{=}}(
            const reverse_iterator&lt;Iterator1&gt;&amp; x,
            const reverse_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&lt;(
            const reverse_iterator&lt;Iterator1&gt;&amp; x,
            const reverse_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator!{{=}}(
            const reverse_iterator&lt;Iterator1&gt;&amp; x,
            const reverse_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&gt;(
            const reverse_iterator&lt;Iterator1&gt;&amp; x,
            const reverse_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&gt;{{=}}(
            const reverse_iterator&lt;Iterator1&gt;&amp; x,
            const reverse_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&lt;{{=}}(
            const reverse_iterator&lt;Iterator1&gt;&amp; x,
            const reverse_iterator&lt;Iterator2&gt;&amp; y);

    template &lt;class Iterator1, class Iterator2&gt;
        auto operator-(
            const reverse_iterator&lt;Iterator1&gt;&amp; x,
            const reverse_iterator&lt;Iterator2&gt;&amp; y) -&gt;decltype(y.base() - x.base());
    template &lt;class Iterator&gt;
        reverse_iterator&lt;Iterator&gt;
        operator+(
            typename reverse_iterator&lt;Iterator&gt;::difference_type n,
            const reverse_iterator&lt;Iterator&gt;&amp; x);
    template &lt;class Iterator&gt;
        reverse_iterator&lt;Iterator&gt; make_reverse_iterator(Iterator i);

    template &lt;class Container&gt; class back_insert_iterator;
    template &lt;class Container&gt;
        back_insert_iterator&lt;Container&gt; back_inserter(Container&amp; x);

    template &lt;class Container&gt; class front_insert_iterator;
    template &lt;class Container&gt;
        front_insert_iterator&lt;Container&gt; front_inserter(Container&amp; x);

    template &lt;class Container&gt; class insert_iterator;
    template &lt;class Container&gt;
        insert_iterator&lt;Container&gt; inserter(Container&amp; x, typename Container::iterator i);

    template &lt;class Iterator&gt; class move_iterator;
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator{{=}}{{=}}(
            const move_iterator&lt;Iterator1&gt;&amp; x, const move_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator!{{=}}(
            const move_iterator&lt;Iterator1&gt;&amp; x, const move_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&lt;(
            const move_iterator&lt;Iterator1&gt;&amp; x, const move_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&lt;{{=}}(
            const move_iterator&lt;Iterator1&gt;&amp; x, const move_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&gt;(
            const move_iterator&lt;Iterator1&gt;&amp; x, const move_iterator&lt;Iterator2&gt;&amp; y);
    template &lt;class Iterator1, class Iterator2&gt;
        bool operator&gt;{{=}}(
            const move_iterator&lt;Iterator1&gt;&amp; x, const move_iterator&lt;Iterator2&gt;&amp; y);

    template &lt;class Iterator1, class Iterator2&gt;
        auto operator-(
            const move_iterator&lt;Iterator1&gt;&amp; x,
            const move_iterator&lt;Iterator2&gt;&amp; y) -&gt; decltype(x.base() - y.base());
    template &lt;class Iterator&gt;
        move_iterator&lt;Iterator&gt; operator+(
            typename move_iterator&lt;Iterator&gt;::difference_type n, 
            const move_iterator&lt;Iterator&gt;&amp; x);
    template &lt;class Iterator&gt;
        move_iterator&lt;Iterator&gt; make_move_iterator(Iterator i);

    // stream iterators:
    template &lt;class T, class charT {{=}} char, class traits {{=}} char_traits&lt;charT&gt;,
            class Distance {{=}} ptrdiff_t&gt;
        class istream_iterator;
    template &lt;class T, class charT, class traits, class Distance&gt;
        bool operator{{=}}{{=}}(const istream_iterator&lt;T,charT,traits,Distance&gt;&amp; x,
            const istream_iterator&lt;T,charT,traits,Distance&gt;&amp; y);
    template &lt;class T, class charT, class traits, class Distance&gt;
        bool operator!{{=}}(const istream_iterator&lt;T,charT,traits,Distance&gt;&amp; x,
            const istream_iterator&lt;T,charT,traits,Distance&gt;&amp; y);

    template &lt;class T, class charT {{=}} char, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class ostream_iterator;

    template&lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class istreambuf_iterator;
    template &lt;class charT, class traits&gt;
        bool operator{{=}}{{=}}(const istreambuf_iterator&lt;charT,traits&gt;&amp; a,
            const istreambuf_iterator&lt;charT,traits&gt;&amp; b);
    template &lt;class charT, class traits&gt;
        bool operator!{{=}}(const istreambuf_iterator&lt;charT,traits&gt;&amp; a,
            const istreambuf_iterator&lt;charT,traits&gt;&amp; b);

    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class ostreambuf_iterator;

    // range access:
    template &lt;class C&gt; auto begin(C&amp; c) -&gt; decltype(c.begin());
    template &lt;class C&gt; auto begin(const C&amp; c) -&gt; decltype(c.begin());
    template &lt;class C&gt; auto end(C&amp; c) -&gt; decltype(c.end());
    template &lt;class C&gt; auto end(const C&amp; c) -&gt; decltype(c.end());
    template &lt;class T, size_t N&gt; T* begin(T (&amp;array)[N]);
    template &lt;class T, size_t N&gt; T* end(T (&amp;array)[N]);
}

}}

====Class {{lc|std::iterator_traits}}====
{{source|
template&lt;class Iterator&gt; struct iterator_traits {
    typedef typename Iterator::difference_type      difference_type;
    typedef typename Iterator::value_type           value_type;
    typedef typename Iterator::pointer              pointer;
    typedef typename Iterator::reference            reference;
    typedef typename Iterator::iterator_category    iterator_category;
};

template&lt;class T&gt; struct iterator_traits&lt;T*&gt; {
    typedef ptrdiff_t                   difference_type;
    typedef T                           value_type;
    typedef T*                          pointer;
    typedef T&amp;                          reference;
    typedef random_access_iterator_tag  iterator_category;
};

template&lt;class T&gt; struct iterator_traits&lt;const T*&gt; {
    typedef ptrdiff_t                   difference_type;
    typedef T                           value_type;
    typedef const T*                    pointer;
    typedef const T&amp;                    reference;
    typedef random_access_iterator_tag  iterator_category;
};

}}

====Class {{lc|std::iterator}}====
{{source|

template&lt;class Category, class T, class Distance {{=}} ptrdiff_t,
         class Pointer {{=}} T*, class Reference {{=}} T&amp;&gt;
struct iterator {
    typedef T           value_type;
    typedef Distance    difference_type;
    typedef Pointer     pointer;
    typedef Reference   reference;
    typedef Category    iterator_category;
};

}}

====Iterator tags====
{{source|
struct input_iterator_tag { };
struct output_iterator_tag { };
struct forward_iterator_tag: public input_iterator_tag { };
struct bidirectional_iterator_tag: public forward_iterator_tag { };
struct random_access_iterator_tag: public bidirectional_iterator_tag { };

}}
====Class {{lc|std::reverse_iterator}}====
{{source|

template &lt;class Iterator&gt;
class reverse_iterator : public
    iterator&lt;typename iterator_traits&lt;Iterator&gt;::iterator_category,
    typename iterator_traits&lt;Iterator&gt;::value_type,
    typename iterator_traits&lt;Iterator&gt;::difference_type,
    typename iterator_traits&lt;Iterator&gt;::pointer,
    typename iterator_traits&lt;Iterator&gt;::reference&gt; {
public:
    typedef Iterator                                            iterator_type;
    typedef typename iterator_traits&lt;Iterator&gt;::difference_type difference_type;
    typedef typename iterator_traits&lt;Iterator&gt;::reference       reference;
    typedef typename iterator_traits&lt;Iterator&gt;::pointer         pointer;

    reverse_iterator();
    explicit reverse_iterator(Iterator x);
    template &lt;class U&gt; reverse_iterator(const reverse_iterator&lt;U&gt;&amp; u);
    template &lt;class U&gt; reverse_iterator&amp; operator{{=}}(const reverse_iterator&lt;U&gt;&amp; u);
    
    Iterator base() const; // explicit
    reference operator*() const;
    pointer operator-&gt;() const;

    reverse_iterator&amp; operator++();
    reverse_iterator  operator++(int);
    reverse_iterator&amp; operator--();
    reverse_iterator  operator--(int);
    
    reverse_iterator  operator+ (difference_type n) const;
    reverse_iterator&amp; operator+{{=}}(difference_type n);
    reverse_iterator  operator- (difference_type n) const;
    reverse_iterator&amp; operator-{{=}}(difference_type n);
    
    /*unspecified*/ operator[](difference_type n) const;
protected:
    Iterator current;
private:
    Iterator deref_tmp; // exposition only
};

}}
====Class {{lc|std::back_insert_iterator}}====
{{source|

template &lt;class Container&gt;
class back_insert_iterator :
    public iterator&lt;output_iterator_tag,void,void,void,void&gt; {
protected:
    Container* container;
public:
    typedef Container container_type;
    
    explicit back_insert_iterator(Container&amp; x);
    back_insert_iterator&lt;Container&gt;&amp;
        operator{{=}}(const typename Container::value_type&amp; value);
    back_insert_iterator&lt;Container&gt;&amp;
        operator{{=}}(typename Container::value_type&amp;&amp; value);
    
    back_insert_iterator&lt;Container&gt;&amp; operator*();
    back_insert_iterator&lt;Container&gt;&amp; operator++();
    back_insert_iterator&lt;Container&gt;  operator++(int);
};


}}
====Class {{lc|std::front_insert_iterator}}====
{{source|

template &lt;class Container&gt;
class front_insert_iterator :
    public iterator&lt;output_iterator_tag,void,void,void,void&gt; {
protected:
    Container* container;
public:
    typedef Container container_type;
    
    explicit front_insert_iterator(Container&amp; x);
    front_insert_iterator&lt;Container&gt;&amp;
    operator{{=}}(const typename Container::value_type&amp; value);
    front_insert_iterator&lt;Container&gt;&amp;
    operator{{=}}(typename Container::value_type&amp;&amp; value);
    
    front_insert_iterator&lt;Container&gt;&amp; operator*();
    front_insert_iterator&lt;Container&gt;&amp; operator++();
    front_insert_iterator&lt;Container&gt;  operator++(int);
};


}}
====Class {{lc|std::insert_iterator}}====
{{source|

template &lt;class Container&gt;
class insert_iterator :
    public iterator&lt;output_iterator_tag,void,void,void,void&gt; {
protected:
    Container*                   container;
    typename Container::iterator iter;
public:
    typedef Container container_type;

    insert_iterator(Container&amp; x, typename Container::iterator i);
    insert_iterator&lt;Container&gt;&amp;
    operator{{=}}(const typename Container::value_type&amp; value);
    insert_iterator&lt;Container&gt;&amp;
    operator{{=}}(typename Container::value_type&amp;&amp; value);

    insert_iterator&lt;Container&gt;&amp; operator*();
    insert_iterator&lt;Container&gt;&amp; operator++();
    insert_iterator&lt;Container&gt;&amp; operator++(int);
};

}}
====Class {{lc|std::move_iterator}}====
{{source|
template &lt;class Iterator&gt;
class move_iterator {
public:
    typedef Iterator                                            iterator_type;
    typedef typename iterator_traits&lt;Iterator&gt;::difference_type difference_type;
    typedef Iterator                                            pointer;
    typedef typename iterator_traits&lt;Iterator&gt;::value_type      value_type;
    typedef typename iterator_traits&lt;Iterator&gt;::iterator_category
                                                                iterator_category;
    typedef value_type&amp;&amp;                                        reference;

    move_iterator();
    explicit move_iterator(Iterator i);
    template &lt;class U&gt; move_iterator(const move_iterator&lt;U&gt;&amp; u);
    template &lt;class U&gt; move_iterator&amp; operator{{=}}(const move_iterator&lt;U&gt;&amp; u);
    
    iterator_type base() const;
    reference operator*() const;
    pointer operator-&gt;() const;
    
    move_iterator&amp; operator++();
    move_iterator  operator++(int);
    move_iterator&amp; operator--();
    move_iterator  operator--(int);
   
    move_iterator   operator+(difference_type n) const;
    move_iterator&amp;  operator+{{=}}(difference_type n);
    move_iterator   operator-(difference_type n) const;
    move_iterator&amp;  operator-{{=}}(difference_type n);
    /*unspecified*/ operator[](difference_type n) const;
    
private:
    Iterator current; // exposition only
};

}}

{{langlinks|zh}}</text>
      <sha1>jxigeep2o9fuhbfwgyayhi40pu7pm6g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/limits</title>
    <ns>0</ns>
    <id>9662</id>
    <revision>
      <id>57499</id>
      <parentid>49579</parentid>
      <timestamp>2013-06-01T05:54:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="5387">{{cpp/header/title|limits}}
{{cpp/header/navbar}}

This header is part of the [[cpp/types|type support]] library.

===Declarations===
{{dsc begin}}
{{dsc inc | cpp/types/dsc numeric_limits}}
{{dsc inc | cpp/types/numeric_limits/dsc float_round_style}}
{{dsc inc | cpp/types/numeric_limits/dsc float_denorm_style}}
{{dsc end}}

===Synopsis===

{{source|

namespace std {
    template&lt;class T&gt; class numeric_limits;

    enum float_round_style {
        round_indeterminate         {{=}} -1,
        round_toward_zero           {{=}}  0,
        round_to_nearest            {{=}}  1,
        round_toward_infinity       {{=}}  2,
        round_toward_neg_infinity   {{=}}  3,
    };

    enum float_denorm_style {
        denorm_indeterminate {{=}} -1,
        denorm_absent        {{=}}  0,
        denorm_present       {{=}}  1
    };


    template&lt;&gt; class numeric_limits&lt;bool&gt;;

    template&lt;&gt; class numeric_limits&lt;char&gt;;
    template&lt;&gt; class numeric_limits&lt;signed char&gt;;
    template&lt;&gt; class numeric_limits&lt;unsigned char&gt;;
    template&lt;&gt; class numeric_limits&lt;char16_t&gt;;
    template&lt;&gt; class numeric_limits&lt;char32_t&gt;;
    template&lt;&gt; class numeric_limits&lt;wchar_t&gt;;

    template&lt;&gt; class numeric_limits&lt;short&gt;;
    template&lt;&gt; class numeric_limits&lt;int&gt;;
    template&lt;&gt; class numeric_limits&lt;long&gt;;
    template&lt;&gt; class numeric_limits&lt;long long&gt;;
    template&lt;&gt; class numeric_limits&lt;unsigned short&gt;;
    template&lt;&gt; class numeric_limits&lt;unsigned int&gt;;
    template&lt;&gt; class numeric_limits&lt;unsigned long&gt;;
    template&lt;&gt; class numeric_limits&lt;unsigned long long&gt;;

    template&lt;&gt; class numeric_limits&lt;float&gt;;
    template&lt;&gt; class numeric_limits&lt;double&gt;;
    template&lt;&gt; class numeric_limits&lt;long double&gt;;
}

}}


====Class template {{lc|std::numeric_limits}}====
{{source|
template&lt;class T&gt; class numeric_limits {
public:
    static constexpr bool is_specialized {{=}} false;

    static constexpr T min() noexcept { return T(); }
    static constexpr T max() noexcept { return T(); }
    static constexpr T lowest() noexcept { return T(); }

    static constexpr int digits {{=}} 0;
    static constexpr int digits10 {{=}} 0;
    static constexpr int max_digits10 {{=}} 0;

    static constexpr bool is_signed {{=}} false;
    static constexpr bool is_integer {{=}} false;
    static constexpr bool is_exact {{=}} false;
    static constexpr int radix {{=}} 0;
    static constexpr T epsilon() noexcept { return T(); }
    static constexpr T round_error() noexcept { return T(); }

    static constexpr int min_exponent {{=}} 0;
    static constexpr int min_exponent10 {{=}} 0;
    static constexpr int max_exponent {{=}} 0;
    static constexpr int max_exponent10 {{=}} 0;

    static constexpr bool has_infinity {{=}} false;
    static constexpr bool has_quiet_NaN {{=}} false;
    static constexpr bool has_signaling_NaN {{=}} false;
    static constexpr float_denorm_style has_denorm {{=}} denorm_absent;
    static constexpr bool has_denorm_loss {{=}} false;
    static constexpr T infinity() noexcept { return T(); }
    static constexpr T quiet_NaN() noexcept { return T(); }
    static constexpr T signaling_NaN() noexcept { return T(); }
    static constexpr T denorm_min() noexcept { return T(); }

    static constexpr bool is_iec559 {{=}} false;
    static constexpr bool is_bounded {{=}} false;
    static constexpr bool is_modulo {{=}} false;

    static constexpr bool traps {{=}} false;
    static constexpr bool tinyness_before {{=}} false;
    static constexpr float_round_style round_style {{=}} round_toward_zero;

};
}}

====Specialization {{c|std::numeric_limits&lt;bool&gt;}}====
{{source|
template&lt;&gt; class numeric_limits&lt;bool&gt; {
public:
    static constexpr bool is_specialized {{=}} true;

    static constexpr bool min() noexcept { return false; }
    static constexpr bool max() noexcept { return true; }
    static constexpr bool lowest() noexcept { return false; }

    static constexpr int digits {{=}} 1;
    static constexpr int digits10 {{=}} 0;
    static constexpr int max_digits10 {{=}} 0;
    
    static constexpr bool is_signed {{=}} false;
    static constexpr bool is_integer {{=}} true;
    static constexpr bool is_exact {{=}} true;
    static constexpr int radix {{=}} 2;
    static constexpr bool epsilon() noexcept { return 0; }
    static constexpr bool round_error() noexcept { return 0; }

    static constexpr int min_exponent {{=}} 0;
    static constexpr int min_exponent10 {{=}} 0;
    static constexpr int max_exponent {{=}} 0;
    static constexpr int max_exponent10 {{=}} 0;

    static constexpr bool has_infinity {{=}} false;
    static constexpr bool has_quiet_NaN {{=}} false;
    static constexpr bool has_signaling_NaN {{=}} false;
    static constexpr float_denorm_style has_denorm {{=}} denorm_absent;
    static constexpr bool has_denorm_loss {{=}} false;
    static constexpr bool infinity() noexcept { return 0; }
    static constexpr bool quiet_NaN() noexcept { return 0; }
    static constexpr bool signaling_NaN() noexcept { return 0; }
    static constexpr bool denorm_min() noexcept { return 0; }

    static constexpr bool is_iec559 {{=}} false;
    static constexpr bool is_bounded {{=}} true;
    static constexpr bool is_modulo {{=}} false;

    static constexpr bool traps {{=}} false;
    static constexpr bool tinyness_before {{=}} false;
    static constexpr float_round_style round_style {{=}} round_toward_zero;

};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/list</title>
    <ns>0</ns>
    <id>9677</id>
    <revision>
      <id>91144</id>
      <parentid>78351</parentid>
      <timestamp>2017-03-22T08:28:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Synopsis */</comment>
      <text xml:space="preserve" bytes="6416">{{cpp/header/title|list}}
{{cpp/header/navbar}}
This header is part of the [[cpp/container|containers]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc list}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | list}}
{{dsc inc | cpp/container/dsc swap2 | list}}
{{dsc end}}

===Synopsis===
{{source|
#include &lt;initializer_list&gt;

namespace std {

template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt; class list;

template &lt;class T, class Allocator&gt;
    bool operator{{==}}(const list&lt;T,Allocator&gt;&amp; x, const list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&lt; (const list&lt;T,Allocator&gt;&amp; x, const list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator!{{=}}(const list&lt;T,Allocator&gt;&amp; x, const list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&gt; (const list&lt;T,Allocator&gt;&amp; x, const list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&gt;{{=}}(const list&lt;T,Allocator&gt;&amp; x, const list&lt;T,Allocator&gt;&amp; y);
template &lt;class T, class Allocator&gt;
    bool operator&lt;{{=}}(const list&lt;T,Allocator&gt;&amp; x, const list&lt;T,Allocator&gt;&amp; y);

template &lt;class T, class Allocator&gt;
    void swap(list&lt;T,Allocator&gt;&amp; x, list&lt;T,Allocator&gt;&amp; y);

}

}}


====Class {{lc|std::list}}====
{{source|


template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt;
class list {
public:
    // types:
    typedef value_type&amp;                                         reference;
    typedef const value_type&amp;                                   const_reference;
    typedef /*implementation-defined*/                          iterator;
    typedef /*implementation-defined*/                          const_iterator; 
    typedef /*implementation-defined*/                          size_type;
    typedef /*implementation-defined*/                          difference_type;
    typedef T                                                   value_type;
    typedef Allocator                                           allocator_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer       pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt;                     reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt;               const_reverse_iterator;
    
    // construct/copy/destroy:
    explicit list(const Allocator&amp; {{=}} Allocator());
    explicit list(size_type n);
    list(size_type n, const T&amp; value,const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
        list(InputIterator first, InputIterator last,const Allocator&amp; {{=}} Allocator());
    list(const list&lt;T,Allocator&gt;&amp; x);
    list(list&amp;&amp;);
    list(const list&amp;, const Allocator&amp;);
    list(list&amp;&amp;, const Allocator&amp;);
    list(initializer_list&lt;T&gt;, const Allocator&amp; {{=}} Allocator());
    ~list();
    list&lt;T,Allocator&gt;&amp; operator{{=}}(const list&lt;T,Allocator&gt;&amp; x);
    list&lt;T,Allocator&gt;&amp; operator{{=}}(list&lt;T,Allocator&gt;&amp;&amp; x);
    list&amp; operator{{=}}(initializer_list&lt;T&gt;);
    template &lt;class InputIterator&gt;
        void assign(InputIterator first, InputIterator last);
    void assign(size_type n, const T&amp; t);
    void assign(initializer_list&lt;T&gt;);
    allocator_type get_allocator() const noexcept;

    // iterators:
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
    
    const_iterator          cbegin() const noexcept;
    const_iterator          cend() const noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
    
    // capacity:
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    void      resize(size_type sz);
    void      resize(size_type sz, const T&amp; c);
    bool      empty() const noexcept;
    
    // element access:
    reference       front();
    const_reference front() const;
    reference       back();
    const_reference back() const;
    
    // modifiers:
    template &lt;class... Args&gt; void emplace_front(Args&amp;&amp;... args);
    void pop_front();
    template &lt;class... Args&gt; void emplace_back(Args&amp;&amp;... args);
    void push_front(const T&amp; x);
    void push_front(T&amp;&amp; x);
    void push_back(const T&amp; x);
    void push_back(T&amp;&amp; x);
    void pop_back();
    
    template &lt;class... Args&gt; iterator emplace(const_iterator position, Args&amp;&amp;... args);
    iterator insert(const_iterator position, const T&amp; x);
    iterator insert(const_iterator position, T&amp;&amp; x);
    iterator insert(const_iterator position, size_type n, const T&amp; x);
    template &lt;class InputIterator&gt;
        iterator insert (const_iterator position, InputIterator first, 
                         InputIterator last);
    iterator insert(const_iterator position, initializer_list&lt;T&gt;);


    iterator erase(const_iterator position);
    iterator erase(const_iterator first, const_iterator last);
    void     swap(list&lt;T,Allocator&gt;&amp;);
    void     clear() noexcept;

    // list operations:
    void splice(const_iterator position, list&lt;T,Allocator&gt;&amp; x);
    void splice(const_iterator position, list&lt;T,Allocator&gt;&amp;&amp; x);
    void splice(const_iterator position, list&lt;T,Allocator&gt;&amp; x,
                    const_iterator i);
    void splice(const_iterator position, list&lt;T,Allocator&gt;&amp;&amp; x,
                    const_iterator i);
    void splice(const_iterator position, list&lt;T,Allocator&gt;&amp; x,
                    const_iterator first, const_iterator last);
    void splice(const_iterator position, list&lt;T,Allocator&gt;&amp;&amp; x,
                    const_iterator first, const_iterator last);

    void remove(const T&amp; value);
    template &lt;class Predicate&gt; void remove_if(Predicate pred);

    void unique();
    template &lt;class BinaryPredicate&gt; void unique(BinaryPredicate binary_pred);

    void merge(list&lt;T,Allocator&gt;&amp; x);
    void merge(list&lt;T,Allocator&gt;&amp;&amp; x);
    template &lt;class Compare&gt; void merge(list&lt;T,Allocator&gt;&amp; x, Compare comp);
    template &lt;class Compare&gt; void merge(list&lt;T,Allocator&gt;&amp;&amp; x, Compare comp);

    void sort();
    template &lt;class Compare&gt; void sort(Compare comp);
    
    void reverse() noexcept;
};

}}</text>
      <sha1>hlinu73uobmpi4piba6avzfux6evnou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/locale</title>
    <ns>0</ns>
    <id>9751</id>
    <revision>
      <id>65366</id>
      <parentid>57505</parentid>
      <timestamp>2013-09-10T16:52:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>removing ctype_byname&lt;char&gt; from the links (the text of the header already doesn't have it)</comment>
      <text xml:space="preserve" bytes="18463">{{cpp/header/title|locale}}
{{cpp/header/navbar}}

This header is part of the [[cpp/locale|localization]] library.


{{dsc begin}}
{{dsc h1 | Classes }}
{{dsc inc | cpp/locale/dsc locale}}

{{dsc h2 | String and stream conversions }}
{{dsc inc | cpp/locale/dsc wstring_convert}}
{{dsc inc | cpp/locale/dsc wbuffer_convert}}

{{dsc h2 | Facet category base classes }}
{{dsc inc | cpp/locale/dsc ctype_base}}
{{dsc inc | cpp/locale/dsc codecvt_base}}
{{dsc inc | cpp/locale/dsc messages_base}}
{{dsc inc | cpp/locale/dsc time_base}}
{{dsc inc | cpp/locale/dsc money_base}}

{{dsc h2 | Facet categories }}
{{dsc inc | cpp/locale/dsc ctype}}
{{dsc inc | cpp/locale/dsc ctype_char}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc inc | cpp/locale/dsc collate}}
{{dsc inc | cpp/locale/dsc messages}}
{{dsc inc | cpp/locale/dsc time_get}}
{{dsc inc | cpp/locale/dsc time_put}}
{{dsc inc | cpp/locale/dsc num_get}}
{{dsc inc | cpp/locale/dsc num_put}}
{{dsc inc | cpp/locale/dsc numpunct}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc inc | cpp/locale/dsc money_put}}
{{dsc inc | cpp/locale/dsc moneypunct}}

{{dsc h2 | Locale-specific facet categories }}
{{dsc inc | cpp/locale/dsc ctype_byname}}
{{dsc inc | cpp/locale/dsc codecvt_byname}}
{{dsc inc | cpp/locale/dsc messages_byname}}
{{dsc inc | cpp/locale/dsc collate_byname}}
{{dsc inc | cpp/locale/dsc time_get_byname}}
{{dsc inc | cpp/locale/dsc time_put_byname}}
{{dsc inc | cpp/locale/dsc numpunct_byname}}
{{dsc inc | cpp/locale/dsc moneypunct_byname}}

{{dsc h1|Functions}}

{{dsc h2 | Locales and facets }}
{{dsc inc | cpp/locale/dsc use_facet}}
{{dsc inc | cpp/locale/dsc has_facet}}

{{dsc h2 | Character classification }}
{{dsc inc | cpp/locale/dsc isspace}}
{{dsc inc | cpp/locale/dsc isblank}}
{{dsc inc | cpp/locale/dsc iscntrl}}
{{dsc inc | cpp/locale/dsc isupper}}
{{dsc inc | cpp/locale/dsc islower}}
{{dsc inc | cpp/locale/dsc isalpha}}
{{dsc inc | cpp/locale/dsc isdigit}}
{{dsc inc | cpp/locale/dsc ispunct}}
{{dsc inc | cpp/locale/dsc isxdigit}}
{{dsc inc | cpp/locale/dsc isalnum}}
{{dsc inc | cpp/locale/dsc isprint}}
{{dsc inc | cpp/locale/dsc isgraph}}

{{dsc h2 | Character conversions }}
{{dsc inc | cpp/locale/dsc toupper}}
{{dsc inc | cpp/locale/dsc tolower}}

{{dsc end}}

====Synospis====
{{source|

namespace std {
    
    // locale:
    class locale;
    template &lt;class Facet&gt; const Facet&amp; use_facet(const locale&amp;);
    template &lt;class Facet&gt; bool has_facet(const locale&amp;) noexcept;
    
    // convenience interfaces:
    template &lt;class charT&gt; bool isspace (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool isprint (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool iscntrl (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool isupper (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool islower (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool isalpha (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool isdigit (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool ispunct (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool isxdigit(charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool isalnum (charT c, const locale&amp; loc);
    template &lt;class charT&gt; bool isgraph (charT c, const locale&amp; loc);
    template &lt;class charT&gt; charT toupper(charT c, const locale&amp; loc);
    template &lt;class charT&gt; charT tolower(charT c, const locale&amp; loc);
    template &lt;class Codecvt, class Elem {{=}} wchar_t,
              class Wide_alloc {{=}} std::allocator&lt;Elem&gt;,
        class Byte_alloc {{=}} std::allocator&lt;char&gt; &gt; class wstring_convert;
    template &lt;class Codecvt, class Elem {{=}} wchar_t,
              class Tr {{=}} char_traits&lt;Elem&gt;&gt; class wbuffer_convert;
              
    // ctype:
    class ctype_base;
    template &lt;class charT&gt; class ctype;
    template &lt;&gt;            class ctype&lt;char&gt;; // specialization
    template &lt;class charT&gt; class ctype_byname;
    class codecvt_base;
    template &lt;class internT, class externT, class stateT&gt; class codecvt;
    template &lt;class internT, class externT, class stateT&gt; class codecvt_byname;
    
    // numeric:
    template &lt;class charT,	class	InputIterator {{=}} istreambuf_iterator&lt;charT&gt; &gt; class num_get;
    template &lt;class charT,	class	OutputIterator {{=}} osterambuf_iterator&lt;charT&gt; &gt; class num_put;
    template &lt;class charT&gt;	class	numpunct;
    template &lt;class charT&gt;	class	numpunct_byname;
    
    // collation:
    template &lt;class charT&gt; class collate;
    template &lt;class charT&gt; class collate_byname;
    
    // date and time:
    class time_base;	
    template &lt;class charT, class InputIterator {{=}} istreambuf_iterator&lt;charT&gt; &gt;
        class time_get;	
    template &lt;class charT, class InputIterator&gt; {{=}} istreambuf_iterator&lt;charT&gt; &gt;
        class time_get_byname;	
    template &lt;class charT, class OutputIterator&gt; {{=}} ostreambuf_iterator&lt;charT&gt; &gt;
        class time_put;	
    template &lt;class charT, class OutputIterator&gt; {{=}} ostreambuf_iterator&lt;charT&gt; &gt;
        class time_put_byname;	
        
    // money:	
    class money_base;	
    template &lt;class charT, class InputIterator {{=}} istreambuf_iterator&lt;charT&gt; &gt; &gt; 
        class money_get;
    template &lt;class charT, class OutputIterator {{=}} ostreambuf_iterator&lt;charT&gt; &gt; &gt; 
        class money_put;
    template &lt;class charT, bool Intl {{=}} false&gt; class moneypunct;
    template &lt;class charT, bool Intl {{=}} false&gt; class moneypunct_byname;

    // message retrieval:
    class messages_base;
    template &lt;class charT&gt; class messages;
    template &lt;class charT&gt; class messages_byname;
}

}}


====Class {{lc|std::locale}}====

{{source|

class locale
{
public:
    // types:
    class facet;
    class id;
    typedef int category;
    static const category // values assigned here are for exposition only
        none    {{=}} 0,
        collate {{=}} 0x010, 
        ctype   {{=}} 0x020,
        monetary{{=}} 0x040, 
        numeric {{=}} 0x080,
        time    {{=}} 0x100, 
        messages{{=}} 0x200,
        all {{=}} collate {{!}} ctype {{!}} monetary {{!}} numeric {{!}} time {{!}} messages;
    
    // construct/copy/destroy:
    locale() noexcept;
    locale(const locale&amp; other) noexcept;
    explicit locale(const char* std_name);
    explicit locale(const string&amp; std_name);
    locale(const locale&amp; other, const char* std_name, category);
    locale(const locale&amp; other, const string&amp; std_name, category);
    template &lt;class Facet&gt; locale(const locale&amp; other, Facet* f);
    locale(const locale&amp; other, const locale&amp; one, category);
    ~locale();
    
    // not virtual
    const locale&amp; operator{{=}}(const locale&amp; other) noexcept;
    template &lt;class Facet&gt; locale combine(const locale&amp; other) const;
    
    // locale operations:
    basic_string&lt;char&gt;
    name() const;
    bool operator{{=}}{{=}}(const locale&amp; other) const;
    bool operator!{{=}}(const locale&amp; other) const;
    template &lt;class charT, class traits, class Allocator&gt;
    bool operator()(const basic_string&lt;charT,traits,Allocator&gt;&amp; s1,
                    const basic_string&lt;charT,traits,Allocator&gt;&amp; s2) const;
                    
    // global locale objects:
    static
    locale global(const locale&amp;);
    static const locale&amp; classic();
};
 
}}

====Class {{lc|std::ctype_base}}====
{{source|

class ctype_base {
public:
    typedef /*T*/ mask;
    
    // numeric values are for exposition only.
    static const mask space {{=}} 1 &lt;&lt; 0;
    static const mask print {{=}} 1 &lt;&lt; 1;
    static const mask cntrl {{=}} 1 &lt;&lt; 2;
    static const mask upper {{=}} 1 &lt;&lt; 3;
    static const mask lower {{=}} 1 &lt;&lt; 4;
    static const mask alpha {{=}} 1 &lt;&lt; 5;
    static const mask digit {{=}} 1 &lt;&lt; 6;
    static const mask punct {{=}} 1 &lt;&lt; 7;
    static const mask xdigit{{=}} 1 &lt;&lt; 8;
    static const mask blank {{=}} 1 &lt;&lt; 9;
    static const mask alnum {{=}} alpha {{!}} digit;
    static const mask graph {{=}} alnum {{!}} punct;

};

}}

====Class {{lc|std::ctype}}====
{{source|

template &lt;class charT&gt;
class ctype : public locale::facet, public ctype_base
{
public:
    typedef charT char_type;
    
    explicit ctype(size_t refs {{=}} 0);
    
    bool is(mask m, charT c) const;
    const charT* is(const charT* low, const charT* high, mask* vec) const;
    const charT* scan_is(mask m,
                         const charT* low, const charT* high) const;
    const charT* scan_not(mask m,
                          const charT* low, const charT* high) const;
                          
    charT           toupper(charT c) const;
    const charT*    toupper(charT* low, const charT* high) const;
    charT           tolower(charT c) const;
    const charT*    tolower(charT* low, const charT* high) const;
    
    charT       widen(char c) const;
    const char* widen(const char* low, const char* high, charT* to) const;
    char        narrow(charT c, char dfault) const;
    const charT*narrow(const charT* low, const charT*, char dfault,
                        char* to) const;
                        
    static locale::id id;
    
protected:
    ~ctype();
    virtual bool do_is(mask m, charT c) const;
    virtual const charT* do_is(const charT* low, const charT* high,
                               mask* vec) const;
    virtual const charT* do_scan_is(mask m,
                                    const charT* low, const charT* high) const;
    virtual const charT* do_scan_not(mask m,
                                     const charT* low, const charT* high) const;
                                     
    virtual charT do_toupper(charT) const;
    virtual const charT* do_toupper(charT* low, const charT* high) const;
    virtual charT do_tolower(charT) const;
    virtual const charT* do_tolower(charT* low, const charT* high) const;
    virtual charT do_widen(char) const;
    virtual const char*  do_widen(const char* low, const char* high,
                                  charT* dest) const;
    virtual char do_narrow(charT, char dfault) const;
    virtual const charT* do_narrow(const charT* low, const charT* high,
                                   char dfault, char* dest) const;
};
 
}}


====Class {{lc|std::ctype_byname}}====
{{source|

template &lt;class charT&gt;
class ctype_byname : public ctype&lt;charT&gt; {
public:
    typedef typename ctype&lt;charT&gt;::mask mask;
    explicit ctype_byname(const char*, size_t refs {{=}} 0);
    explicit ctype_byname(const string&amp;, size_t refs {{=}} 0);
    protected:
    ~ctype_byname();
};


}}

====Class {{c|std::ctype&lt;char&gt;}}====
{{source|

template &lt;&gt; class ctype&lt;char&gt;
    : public locale::facet, public ctype_base
{
public:
    typedef char char_type;
    explicit ctype(const mask* tab {{=}} 0, bool del {{=}} false,
                   size_t refs {{=}} 0);
    bool is(mask m, char c) const;
    const char* is(const char* low, const char* high, mask* vec) const;
    const char* scan_is (mask m,
                         const char* low, const char* high) const;
    const char* scan_not(mask m,
                         const char* low, const char* high) const;
    char        toupper(char c) const;
    const char* toupper(char* low, const char* high) const;
    char        tolower(char c) const;
    const char* tolower(char* low, const char* high) const;
    char        widen(char c) const;
    const char* widen(const char* low, const char* high, char* to) const;
    char        narrow(char c, char dfault) const;
    const char* narrow(const char* low, const char* high, char dfault,
                       char* to) const;
                       
    static locale::id id;
    
    static const size_t table_size {{=}} implementation-defined;
    const mask* table() const noexcept;
    static const mask* classic_table() noexcept;
    
protected:
    ~ctype();
    virtual char        do_toupper(char c) const;
    virtual const char* do_toupper(char* low, const char* high) const;
    virtual char        do_tolower(char c) const;
    virtual const char* do_tolower(char* low, const char* high) const;
    virtual char        do_widen(char c) const;
    virtual const char* do_widen(const char* low,
                                 const char* high,
                                 char* to) const;
    virtual char        do_narrow(char c, char dfault) const;
    virtual const char* do_narrow(const char* low,
                                  const char* high,
                                  char dfault, char* to) const;
};

}}

====Class {{lc|std::codecvt_base}}====
{{source|

class codecvt_base
{
public:
    enum result { ok, partial, error, noconv };
};

}}

====Class {{lc|std::codecvt}}====
{{source|

template &lt;class internT, class externT, class stateT&gt;
class codecvt : public locale::facet, public codecvt_base
{
public:
        typedef internT intern_type;
        typedef externT extern_type;
        typedef stateT state_type;
        explicit codecvt(size_t refs {{=}} 0);
        result out(stateT&amp; state,
                   const internT* from, const internT* from_end, 
                   const internT*&amp; from_next,
                   externT* to, externT* to_end, externT*&amp; to_next) const;
        result unshift(stateT&amp; state, externT* to,
                       externT* to_end, externT*&amp; to_next) const;
        result in(stateT&amp; state,
                  const externT* from, const externT* from_end, 
                  const externT*&amp; from_next,
                  internT* to,
                  internT* to_end, internT*&amp; to_next) const;
        int encoding() const noexcept;
        bool always_noconv() const noexcept;
        int length(stateT&amp;, const externT* from, const externT* end,
                   size_t max) const;
        int max_length() const noexcept;
        static locale::id id;
protected:
        ~codecvt();
        virtual result do_out(stateT&amp; state,
                              const internT* from, const internT* from_end, 
                              const internT*&amp; from_next,
                              externT* to,
                              externT* to_end, externT*&amp; to_next) const;
        virtual result do_in(stateT&amp; state,
                             const externT* from, const externT* from_end, 
                             const externT*&amp; from_next,
                             internT* to,
                             internT* to_end, internT*&amp; to_next) const;
        virtual result do_unshift(stateT&amp; state,
                                  externT* to,
                                  externT* to_end, externT*&amp; to_next) const;
        virtual int do_encoding() const noexcept;
        virtual bool do_always_noconv() const noexcept;
        virtual int do_length(stateT&amp;, const externT* from,
                              const externT* end, size_t max) const;
        virtual int do_max_length() const noexcept;
};

}}

====Class {{lc|std::codecvt_byname}}====
{{source|

template &lt;class internT, class externT, class stateT&gt;
class codecvt_byname : public codecvt&lt;internT, externT, stateT&gt; {
public:
    explicit codecvt_byname(const char*, size_t refs {{=}} 0);
    explicit codecvt_byname(const string&amp;, size_t refs {{=}} 0);
protected:
    ~codecvt_byname();
};

}}


====Class {{lc|std::num_get}}====
{{source|

template &lt;class charT, class InputIterator {{=}} istreambuf_iterator&lt;charT&gt; &gt;
class num_get : public locale::facet
{
public:
    typedef charT           char_type;
    typedef InputIterator   iter_type;
    explicit num_get(size_t refs {{=}} 0);
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, bool&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp; ,
                  ios_base::iostate&amp; err, long&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp; ,
                  ios_base::iostate&amp; err, long long&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, unsigned short&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, unsigned int&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, unsigned long&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp; ,
                  ios_base::iostate&amp; err, unsigned long long&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, float&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, double&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, long double&amp; v) const;
    iter_type get(iter_type in, iter_type end, ios_base&amp;,
                  ios_base::iostate&amp; err, void*&amp; v) const;
     
    static locale::id id;
     
     
protected:
    ~num_get();
    
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, bool&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, long&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, long long&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, unsigned short&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, unsigned int&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, unsigned long&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, unsigned long long&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, float&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, double&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, long double&amp; v) const;
    virtual iter_type do_get(iter_type, iter_type, ios_base&amp;,
                             ios_base::iostate&amp; err, void*&amp; v) const;
};

}}

{{todo|Synopses for numpunct, collate, time_get, time_put, money_get, money_put, money_punct, messages, *_byname }}</text>
      <sha1>djlj6p8cjhctm5gocyo18vfyq7y5ozb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/map</title>
    <ns>0</ns>
    <id>9694</id>
    <revision>
      <id>57508</id>
      <parentid>49582</parentid>
      <timestamp>2013-06-01T05:54:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="13884">{{cpp/header/title|map}}
{{cpp/header/navbar}}
This header is part of the [[cpp/container|containers]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc map}}
{{dsc inc | cpp/container/dsc multimap}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | map}}
{{dsc inc | cpp/container/dsc swap2 | map}}
{{dsc inc | cpp/container/dsc operator_cmp | multimap}}
{{dsc inc | cpp/container/dsc swap2 | multimap}}
{{dsc end}}


===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std {
    template &lt;class Key, class T, class Compare {{=}} less&lt;Key&gt;,
              class Allocator {{=}} allocator&lt;pair&lt;const Key, T&gt; &gt; &gt;
        class map;
        
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator{{=}}{{=}}(const map&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const map&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&lt; (const map&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const map&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator!{{=}}(const map&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const map&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&gt; (const map&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const map&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&gt;{{=}}(const map&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const map&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&lt;{{=}}(const map&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const map&lt;Key,T,Compare,Allocator&gt;&amp; y);
        
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        void swap(map&lt;Key,T,Compare,Allocator&gt;&amp; x,
                  map&lt;Key,T,Compare,Allocator&gt;&amp; y);

        
    template &lt;class Key, class T, class Compare {{=}} less&lt;Key&gt;,
              class Allocator {{=}} allocator&lt;pair&lt;const Key, T&gt; &gt; &gt;
        class multimap;
        
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator{{=}}{{=}}(const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const multimap&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&lt; (const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const multimap&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator!{{=}}(const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const multimap&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&gt; (const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const multimap&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&gt;{{=}}(const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const multimap&lt;Key,T,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        bool operator&lt;{{=}}(const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x,
                        const multimap&lt;Key,T,Compare,Allocator&gt;&amp; y);
        
    template &lt;class Key, class T, class Compare, class Allocator&gt;
        void swap(multimap&lt;Key,T,Compare,Allocator&gt;&amp; x,
                  multimap&lt;Key,T,Compare,Allocator&gt;&amp; y);
}

}}

====Class {{lc|std::map}}====
{{source|

template &lt;class Key, class T, class Compare {{=}} less&lt;Key&gt;,
          class Allocator {{=}} allocator&lt;pair&lt;const Key, T&gt; &gt; &gt;
class map {
public:
    // types:
    typedef Key                                                 key_type;
    typedef T                                                   mapped_type;
    typedef pair&lt;const Key, T&gt;                                  value_type;
    typedef Compare                                             key_compare;
    typedef Allocator                                           allocator_type;
    typedef value_type&amp;                                         reference;
    typedef const value_type&amp;                                   const_reference;
    typedef /*implementation-defined*/                          iterator;
    typedef /*implementation-defined*/                          const_iterator; 
    typedef /*implementation-defined*/                          size_type;
    typedef /*implementation-defined*/                          difference_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer       pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt;                     reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt;               const_reverse_iterator;
    
    class value_compare {
        friend class map;
    protected:
        Compare comp;
        value_compare(Compare c) : comp(c) {}
    public:
        typedef bool        result_type;
        typedef value_type  first_argument_type;
        typedef value_type  second_argument_type;
        bool operator()(const value_type&amp; x, const value_type&amp; y) const {
            return comp(x.first, y.first);
        }
    };
        
    explicit map(const Compare&amp; comp {{=}} Compare(),
                 const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
        map(InputIterator first, InputIterator last,
            const Compare&amp; comp {{=}} Compare(), const Allocator&amp; {{=}} Allocator());
    map(const map&lt;Key,T,Compare,Allocator&gt;&amp; x);
    map(map&lt;Key,T,Compare,Allocator&gt;&amp;&amp; x);
    explicit map(const Allocator&amp;);
    map(const map&amp;, const Allocator&amp;);
    map(map&amp;&amp;, const Allocator&amp;);
    map(initializer_list&lt;value_type&gt;,
        const Compare&amp; {{=}} Compare(),
        const Allocator&amp; {{=}} Allocator());
    
    ~map();
    
    map&lt;Key,T,Compare,Allocator&gt;&amp;
        operator{{=}}(const map&lt;Key,T,Compare,Allocator&gt;&amp; x);
    map&lt;Key,T,Compare,Allocator&gt;&amp;
        operator{{=}}(map&lt;Key,T,Compare,Allocator&gt;&amp;&amp; x);
    map&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    
    allocator_type get_allocator() const noexcept;


    // iterators:
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
    
    const_iterator          cbegin() noexcept;
    const_iterator          cend() noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
    
    // capacity:
    bool      empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    
    // element access:
    T&amp; operator[](const key_type&amp; x);
    T&amp; operator[](key_type&amp;&amp; x);
    T&amp;       at(const key_type&amp; x);
    const T&amp; at(const key_type&amp; x) const;

    // modifiers:
    template &lt;class... Args&gt; pair&lt;iterator, bool&gt; emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; 
        iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
    pair&lt;iterator, bool&gt; insert(const value_type&amp; x);
    template &lt;class P&gt; pair&lt;iterator, bool&gt; insert(P&amp;&amp; x);
        iterator insert(const_iterator position, const value_type&amp; x);
    template &lt;class P&gt;
        iterator insert(const_iterator position, P&amp;&amp;);
    template &lt;class InputIterator&gt;
        void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; x);
    iterator erase(const_iterator first, const_iterator last);
    void swap(map&lt;Key,T,Compare,Allocator&gt;&amp;);
    void clear() noexcept;

    // observers:
    key_compare   key_comp() const;
    value_compare value_comp() const;
    
    //map operations:
    iterator        find(const key_type&amp; x);
    const_iterator  find(const key_type&amp; x) const;
    size_type       count(const key_type&amp; x) const;
    
    iterator        lower_bound(const key_type&amp; x);
    const_iterator  lower_bound(const key_type&amp; x) const;
    iterator        upper_bound(const key_type&amp; x);
    const_iterator  upper_bound(const key_type&amp; x) const;

    pair&lt;iterator,iterator&gt; 
        equal_range(const key_type&amp; x);
    pair&lt;const_iterator,const_iterator&gt; 
        equal_range(const key_type&amp; x) const;
};


}}
====Class {{lc|std::multimap}}====
{{source|

template &lt;class Key, class T, class Compare {{=}} less&lt;Key&gt;,
          class Allocator {{=}} allocator&lt;pair&lt;const Key, T&gt; &gt; &gt;
class multimap {
public:
    // types:
    typedef Key                                                 key_type;
    typedef T                                                   mapped_type;
    typedef pair&lt;const Key, T&gt;                                  value_type;
    typedef Compare                                             key_compare;
    typedef Allocator                                           allocator_type;
    typedef value_type&amp;                                         reference;
    typedef const value_type&amp;                                   const_reference;
    typedef /*implementation-defined*/                          iterator;
    typedef /*implementation-defined*/                          const_iterator; 
    typedef /*implementation-defined*/                          size_type;
    typedef /*implementation-defined*/                          difference_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer       pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt;                     reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt;               const_reverse_iterator;
    
    class value_compare {
        friend class multimap;
    protected:
        Compare comp;
        value_compare(Compare c) : comp(c) {}
    public:
        typedef bool        result_type;
        typedef value_type  first_argument_type;
        typedef value_type  second_argument_type;
        bool operator()(const value_type&amp; x, const value_type&amp; y) const {
            return comp(x.first, y.first);
        }
    };
        
    explicit multimap(const Compare&amp; comp {{=}} Compare(),
                 const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
        multimap(InputIterator first, InputIterator last,
            const Compare&amp; comp {{=}} Compare(), const Allocator&amp; {{=}} Allocator());
    multimap(const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x);
    multimap(multimap&lt;Key,T,Compare,Allocator&gt;&amp;&amp; x);
    explicit multimap(const Allocator&amp;);
    multimap(const multimap&amp;, const Allocator&amp;);
    multimap(multimap&amp;&amp;, const Allocator&amp;);
    multimap(initializer_list&lt;value_type&gt;,
        const Compare&amp; {{=}} Compare(),
        const Allocator&amp; {{=}} Allocator());
    
    ~multimap();
    
    multimap&lt;Key,T,Compare,Allocator&gt;&amp;
        operator{{=}}(const multimap&lt;Key,T,Compare,Allocator&gt;&amp; x);
    multimap&lt;Key,T,Compare,Allocator&gt;&amp;
        operator{{=}}(multimap&lt;Key,T,Compare,Allocator&gt;&amp;&amp; x);
    multimap&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    
    allocator_type get_allocator() const noexcept;


    // iterators:
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
    
    const_iterator          cbegin() noexcept;
    const_iterator          cend() noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
    
    // capacity:
    bool      empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;

    // modifiers:
    template &lt;class... Args&gt; pair&lt;iterator, bool&gt; emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
    pair&lt;iterator, bool&gt; insert(const value_type&amp; x);
    template &lt;class P&gt; pair&lt;iterator, bool&gt; insert(P&amp;&amp; x);
        iterator insert(const_iterator position, const value_type&amp; x);
    template &lt;class P&gt;
        iterator insert(const_iterator position, P&amp;&amp;);
    template &lt;class InputIterator&gt;
        void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; x);
    iterator erase(const_iterator first, const_iterator last);
    void swap(multimap&lt;Key,T,Compare,Allocator&gt;&amp;);
    void clear() noexcept;

    // observers:
    key_compare   key_comp() const;
    value_compare value_comp() const;
    
    //multimap operations:
    iterator        find(const key_type&amp; x);
    const_iterator  find(const key_type&amp; x) const;
    size_type       count(const key_type&amp; x) const;
    
    iterator        lower_bound(const key_type&amp; x);
    const_iterator  lower_bound(const key_type&amp; x) const;
    iterator        upper_bound(const key_type&amp; x);
    const_iterator  upper_bound(const key_type&amp; x) const;

    pair&lt;iterator,iterator&gt; 
        equal_range(const key_type&amp; x);
    pair&lt;const_iterator,const_iterator&gt; 
        equal_range(const key_type&amp; x) const;
};


}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/memory</title>
    <ns>0</ns>
    <id>9769</id>
    <revision>
      <id>88932</id>
      <parentid>77301</parentid>
      <timestamp>2016-12-20T20:44:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>n4618 updates</comment>
      <text xml:space="preserve" bytes="26976">{{cpp/header/title|memory}}
{{cpp/header/navbar}}

This header is part of the [[cpp/memory|dynamic memory management]] library.

{{dsc begin}}
{{dsc h2 |Smart pointers categories}}
{{dsc inc | cpp/memory/dsc unique_ptr}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc inc | cpp/memory/dsc weak_ptr}}
{{dsc inc | cpp/memory/dsc auto_ptr}}

{{dsc h2 | Helper classes}}
{{dsc inc | cpp/memory/dsc owner_less}}
{{dsc inc | cpp/memory/dsc enable_shared_from_this}}
{{dsc inc | cpp/memory/dsc bad_weak_ptr}}
{{dsc inc | cpp/memory/dsc default_delete}}

{{dsc h2 | Allocators}}
{{dsc inc | cpp/memory/dsc allocator}}
{{dsc inc | cpp/memory/dsc allocator_traits}}
{{dsc inc | cpp/memory/dsc allocator_arg_t}}
{{dsc inc | cpp/memory/dsc allocator_arg}}
{{dsc inc | cpp/memory/dsc uses_allocator}}

{{dsc h2|Uninitialized storage}}
{{dsc inc | cpp/memory/dsc uninitialized_copy}}
{{dsc inc | cpp/memory/dsc uninitialized_copy_n}}
{{dsc inc | cpp/memory/dsc uninitialized_fill}}
{{dsc inc | cpp/memory/dsc uninitialized_fill_n}}
{{dsc inc | cpp/memory/dsc uninitialized_move}}
{{dsc inc | cpp/memory/dsc uninitialized_move_n}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct_n}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct_n}}
{{dsc inc | cpp/memory/dsc destroy_at}}
{{dsc inc | cpp/memory/dsc destroy}}
{{dsc inc | cpp/memory/dsc destroy_n}}
{{dsc inc | cpp/memory/dsc raw_storage_iterator}}
{{dsc inc | cpp/memory/dsc get_temporary_buffer}}
{{dsc inc | cpp/memory/dsc return_temporary_buffer}}

{{dsc h2 | Garbage collector support}}
{{dsc inc | cpp/memory/gc/dsc declare_reachable}}
{{dsc inc | cpp/memory/gc/dsc undeclare_reachable}}
{{dsc inc | cpp/memory/gc/dsc declare_no_pointers}}
{{dsc inc | cpp/memory/gc/dsc undeclare_no_pointers}}
{{dsc inc | cpp/memory/gc/dsc pointer_safety}}
{{dsc inc | cpp/memory/gc/dsc get_pointer_safety}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/memory/dsc pointer_traits}}
{{dsc inc | cpp/memory/dsc addressof}}
{{dsc inc | cpp/memory/dsc align}}

{{dsc end}}

{{dsc begin}}

{{dsc h2|Smart pointer non-member operations}}
{{dsc inc | cpp/memory/unique_ptr/dsc make_unique}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator_cmp}}
{{dsc inc | cpp/memory/shared_ptr/dsc make_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc allocate_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc pointer_cast}}
{{dsc inc | cpp/memory/shared_ptr/dsc get_deleter}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_cmp}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_ltlt}}
{{dsc inc | cpp/memory/shared_ptr/dsc atomic}}
{{dsc inc | cpp/memory/unique_ptr/dsc swap2}}
{{dsc inc | cpp/memory/weak_ptr/dsc swap2}}
{{dsc inc | cpp/memory/shared_ptr/dsc swap2}}

{{dsc h2|Smart pointer helper classes}}
{{dsc inc | cpp/memory/unique_ptr/dsc hash}}
{{dsc inc | cpp/memory/shared_ptr/dsc hash}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  // pointer traits
  template &lt;class Ptr&gt; struct pointer_traits;
  template &lt;class T&gt; struct pointer_traits&lt;T*&gt;;
  // pointer safety
  enum class pointer_safety { relaxed, preferred, strict };
  void declare_reachable(void* p);
  template &lt;class T&gt; T* undeclare_reachable(T* p);
  void declare_no_pointers(char* p, size_t n);
  void undeclare_no_pointers(char* p, size_t n);
  pointer_safety get_pointer_safety() noexcept;
  // pointer alignment function
  void* align(size_t alignment, size_t size, void*&amp; ptr, size_t&amp; space);
  // allocator argument tag
  struct allocator_arg_t { explicit allocator_arg_t() = default; };
  constexpr allocator_arg_t allocator_arg{};
  // uses_allocator
  template &lt;class T, class Alloc&gt; struct uses_allocator;
  // allocator traits
  template &lt;class Alloc&gt; struct allocator_traits;
  // the default allocator
  template &lt;class T&gt; class allocator;
  template &lt;class T, class U&gt;
  bool operator==(const allocator&lt;T&gt;&amp;, const allocator&lt;U&gt;&amp;) noexcept;
  template &lt;class T, class U&gt;
  bool operator!=(const allocator&lt;T&gt;&amp;, const allocator&lt;U&gt;&amp;) noexcept;
  // specialized algorithms
  template &lt;class T&gt; constexpr T* addressof(T&amp; r) noexcept;
  template &lt;class T&gt; const T* addressof(const T&amp;&amp;) = delete;
  template &lt;class ForwardIterator&gt;
  void uninitialized_default_construct(ForwardIterator first, ForwardIterator last);
  template &lt;class ExecutionPolicy, class ForwardIterator&gt;
  void uninitialized_default_construct(ExecutionPolicy&amp;&amp; exec,
                                       ForwardIterator first, ForwardIterator last);
  template &lt;class ForwardIterator, class Size&gt;
  ForwardIterator uninitialized_default_construct_n(ForwardIterator first, Size n);
  template &lt;class ExecutionPolicy, class ForwardIterator, class Size&gt;
  ForwardIterator uninitialized_default_construct_n(ExecutionPolicy&amp;&amp; exec,
                                                    ForwardIterator first, Size n);
  template &lt;class ForwardIterator&gt;
  void uninitialized_value_construct(ForwardIterator first, ForwardIterator last);
  template &lt;class ExecutionPolicy, class ForwardIterator&gt;
  void uninitialized_value_construct(ExecutionPolicy&amp;&amp; exec,
                                     ForwardIterator first, ForwardIterator last);
  template &lt;class ForwardIterator, class Size&gt;
  ForwardIterator uninitialized_value_construct_n(ForwardIterator first, Size n);
  template &lt;class ExecutionPolicy, class ForwardIterator, class Size&gt;
  ForwardIterator uninitialized_value_construct_n(ExecutionPolicy&amp;&amp; exec,
                                                  ForwardIterator first, Size n);
  template &lt;class InputIterator, class ForwardIterator&gt;
  ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
                                     ForwardIterator result);
  template &lt;class ExecutionPolicy, class InputIterator, class ForwardIterator&gt;
  ForwardIterator uninitialized_copy(ExecutionPolicy&amp;&amp; exec,
                                     InputIterator first, InputIterator last,
                                     ForwardIterator result);
  template &lt;class InputIterator, class Size, class ForwardIterator&gt;
  ForwardIterator uninitialized_copy_n(InputIterator first, Size n,
                                       ForwardIterator result);
  template &lt;class ExecutionPolicy, class InputIterator, class Size, class ForwardIterator&gt;
  ForwardIterator uninitialized_copy_n(ExecutionPolicy&amp;&amp; exec,
                                       InputIterator first, Size n,
                                       ForwardIterator result);
  template &lt;class InputIterator, class ForwardIterator&gt;
  ForwardIterator uninitialized_move(InputIterator first, InputIterator last,
                                     ForwardIterator result);
  template &lt;class ExecutionPolicy, class InputIterator, class ForwardIterator&gt;
  ForwardIterator uninitialized_move(ExecutionPolicy&amp;&amp; exec,
                                     InputIterator first, InputIterator last,
                                     ForwardIterator result);
  template &lt;class InputIterator, class Size, class ForwardIterator&gt;
  pair&lt;InputIterator, ForwardIterator&gt;
    uninitialized_move_n(InputIterator first, Size n, ForwardIterator result);
  template &lt;class ExecutionPolicy, class InputIterator, class Size, class ForwardIterator&gt;
  pair&lt;InputIterator, ForwardIterator&gt;
    uninitialized_move_n(ExecutionPolicy&amp;&amp; exec,
                         InputIterator first, Size n, ForwardIterator result);
  template &lt;class ForwardIterator, class T&gt;
  void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T&amp; x);
  template &lt;class ExecutionPolicy, class ForwardIterator, class T&gt;
  void uninitialized_fill(ExecutionPolicy&amp;&amp; exec,
                          ForwardIterator first, ForwardIterator last, const T&amp; x);
  template &lt;class ForwardIterator, class Size, class T&gt;
  ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n, const T&amp; x);
  template &lt;class ExecutionPolicy, class ForwardIterator, class Size, class T&gt;
  ForwardIterator uninitialized_fill_n(ExecutionPolicy&amp;&amp; exec,
                                       ForwardIterator first, Size n, const T&amp; x);
  template &lt;class T&gt;
  void destroy_at(T* location);
  template &lt;class ForwardIterator&gt;
  void destroy(ForwardIterator first, ForwardIterator last);
  template &lt;class ExecutionPolicy, class ForwardIterator&gt;
  void destroy(ExecutionPolicy&amp;&amp; exec, ForwardIterator first, ForwardIterator last);
  template &lt;class ForwardIterator, class Size&gt;
  ForwardIterator destroy_n(ForwardIterator first, Size n);
  template &lt;class ExecutionPolicy, class ForwardIterator, class Size&gt;
  ForwardIterator destroy_n(ExecutionPolicy&amp;&amp; exec, ForwardIterator first, Size n);
  // class template unique_ptr
  template &lt;class T&gt; struct default_delete;
  template &lt;class T&gt; struct default_delete&lt;T[]&gt;;
  template &lt;class T, class D = default_delete&lt;T&gt;&gt; class unique_ptr;
  template &lt;class T, class D&gt; class unique_ptr&lt;T[], D&gt;;
  template &lt;class T, class... Args&gt; unique_ptr&lt;T&gt; make_unique(Args&amp;&amp;... args);
  template &lt;class T&gt; unique_ptr&lt;T&gt; make_unique(size_t n);
  template &lt;class T, class... Args&gt; /*unspecified*/ make_unique(Args&amp;&amp;...) = delete;
  template &lt;class T, class D&gt; void swap(unique_ptr&lt;T, D&gt;&amp; x, unique_ptr&lt;T, D&gt;&amp; y) noexcept;
  template &lt;class T1, class D1, class T2, class D2&gt;
  bool operator==(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
  template &lt;class T1, class D1, class T2, class D2&gt;
  bool operator!=(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
  template &lt;class T1, class D1, class T2, class D2&gt;
  bool operator&lt;(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
  template &lt;class T1, class D1, class T2, class D2&gt;
  bool operator&lt;=(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
  template &lt;class T1, class D1, class T2, class D2&gt;
  bool operator&gt;(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
  template &lt;class T1, class D1, class T2, class D2&gt;
  bool operator&gt;=(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
  template &lt;class T, class D&gt;
  bool operator==(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T, class D&gt;
  bool operator==(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y) noexcept;
  template &lt;class T, class D&gt;
  bool operator!=(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T, class D&gt;
  bool operator!=(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y) noexcept;
  template &lt;class T, class D&gt;
  bool operator&lt;(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
  template &lt;class T, class D&gt;
  bool operator&lt;(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
  template &lt;class T, class D&gt;
  bool operator&lt;=(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
  template &lt;class T, class D&gt;
  bool operator&lt;=(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
  template &lt;class T, class D&gt;
  bool operator&gt;(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
  template &lt;class T, class D&gt;
  bool operator&gt;(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
  template &lt;class T, class D&gt;
  bool operator&gt;=(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
  template &lt;class T, class D&gt;
  bool operator&gt;=(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
  // class bad_weak_ptr
  class bad_weak_ptr;
  // class template shared_ptr
  template&lt;class T&gt; class shared_ptr;
  // shared_ptr creation
  template&lt;class T, class... Args&gt; shared_ptr&lt;T&gt; make_shared(Args&amp;&amp;... args);
  template&lt;class T, class A, class... Args&gt;
  shared_ptr&lt;T&gt; allocate_shared(const A&amp; a, Args&amp;&amp;... args);
  // shared_ptr comparisons
  template&lt;class T, class U&gt;
  bool operator==(const shared_ptr&lt;T&gt;&amp; a, const shared_ptr&lt;U&gt;&amp; b) noexcept;
  template&lt;class T, class U&gt;
  bool operator!=(const shared_ptr&lt;T&gt;&amp; a, const shared_ptr&lt;U&gt;&amp; b) noexcept;
  template&lt;class T, class U&gt;
  bool operator&lt;(const shared_ptr&lt;T&gt;&amp; a, const shared_ptr&lt;U&gt;&amp; b) noexcept;
  template&lt;class T, class U&gt;
  bool operator&gt;(const shared_ptr&lt;T&gt;&amp; a, const shared_ptr&lt;U&gt;&amp; b) noexcept;
  template&lt;class T, class U&gt;
  bool operator&lt;=(const shared_ptr&lt;T&gt;&amp; a, const shared_ptr&lt;U&gt;&amp; b) noexcept;
  template&lt;class T, class U&gt;
  bool operator&gt;=(const shared_ptr&lt;T&gt;&amp; a, const shared_ptr&lt;U&gt;&amp; b) noexcept;
  template &lt;class T&gt;
  bool operator==(const shared_ptr&lt;T&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T&gt;
  bool operator==(nullptr_t, const shared_ptr&lt;T&gt;&amp; y) noexcept;
  template &lt;class T&gt;
  bool operator!=(const shared_ptr&lt;T&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T&gt;
  bool operator!=(nullptr_t, const shared_ptr&lt;T&gt;&amp; y) noexcept;
  template &lt;class T&gt;
  bool operator&lt;(const shared_ptr&lt;T&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T&gt;
  bool operator&lt;(nullptr_t, const shared_ptr&lt;T&gt;&amp; y) noexcept;
  template &lt;class T&gt;
  bool operator&lt;=(const shared_ptr&lt;T&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T&gt;
  bool operator&lt;=(nullptr_t, const shared_ptr&lt;T&gt;&amp; y) noexcept;
  template &lt;class T&gt;
  bool operator&gt;(const shared_ptr&lt;T&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T&gt;
  bool operator&gt;(nullptr_t, const shared_ptr&lt;T&gt;&amp; y) noexcept;
  template &lt;class T&gt;
  bool operator&gt;=(const shared_ptr&lt;T&gt;&amp; x, nullptr_t) noexcept;
  template &lt;class T&gt;
  bool operator&gt;=(nullptr_t, const shared_ptr&lt;T&gt;&amp; y) noexcept;
  // shared_ptr specialized algorithms
  template&lt;class T&gt; void swap(shared_ptr&lt;T&gt;&amp; a, shared_ptr&lt;T&gt;&amp; b) noexcept;
  // shared_ptr casts
  template&lt;class T, class U&gt;
  shared_ptr&lt;T&gt; static_pointer_cast(const shared_ptr&lt;U&gt;&amp; r) noexcept;
  template&lt;class T, class U&gt;
  shared_ptr&lt;T&gt; dynamic_pointer_cast(const shared_ptr&lt;U&gt;&amp; r) noexcept;
  template&lt;class T, class U&gt;
  shared_ptr&lt;T&gt; const_pointer_cast(const shared_ptr&lt;U&gt;&amp; r) noexcept;
  // shared_ptr get_deleter
  template&lt;class D, class T&gt; D* get_deleter(const shared_ptr&lt;T&gt;&amp; p) noexcept;
  // shared_ptr I/O
  template&lt;class E, class T, class Y&gt;
  basic_ostream&lt;E, T&gt;&amp; operator&lt;&lt; (basic_ostream&lt;E, T&gt;&amp; os, const shared_ptr&lt;Y&gt;&amp; p);
  // class template weak_ptr
  template&lt;class T&gt; class weak_ptr;
  // weak_ptr specialized algorithms
  template&lt;class T&gt; void swap(weak_ptr&lt;T&gt;&amp; a, weak_ptr&lt;T&gt;&amp; b) noexcept;
  // class template owner_less
  template&lt;class T = void&gt; struct owner_less;
  // class template enable_shared_from_this
  template&lt;class T&gt; class enable_shared_from_this;
  // shared_ptr atomic access
  template&lt;class T&gt;
  bool atomic_is_lock_free(const shared_ptr&lt;T&gt;* p);
  template&lt;class T&gt;
  shared_ptr&lt;T&gt; atomic_load(const shared_ptr&lt;T&gt;* p);
  template&lt;class T&gt;
  shared_ptr&lt;T&gt; atomic_load_explicit(const shared_ptr&lt;T&gt;* p, memory_order mo);
  template&lt;class T&gt;
  void atomic_store(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt; r);
  template&lt;class T&gt;
  void atomic_store_explicit(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt; r, memory_order mo);
  template&lt;class T&gt;
  shared_ptr&lt;T&gt; atomic_exchange(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt; r);
  template&lt;class T&gt;
  shared_ptr&lt;T&gt; atomic_exchange_explicit(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt; r,
                                         memory_order mo);
  template&lt;class T&gt;
  bool atomic_compare_exchange_weak(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt;* v, shared_ptr&lt;T&gt; w);
  template&lt;class T&gt;
  bool atomic_compare_exchange_strong(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt;* v, shared_ptr&lt;T&gt; w);
  template&lt;class T&gt;
  bool atomic_compare_exchange_weak_explicit(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt;* v,
                                             shared_ptr&lt;T&gt; w, memory_order success,
                                             memory_order failure);
  template&lt;class T&gt;
  bool atomic_compare_exchange_strong_explicit(shared_ptr&lt;T&gt;* p, shared_ptr&lt;T&gt;* v,
                                               shared_ptr&lt;T&gt; w, memory_order success, 
                                               memory_order failure);
  // hash support
  template &lt;class T&gt; struct hash;
  template &lt;class T, class D&gt; struct hash&lt;unique_ptr&lt;T, D&gt;&gt;;
  template &lt;class T&gt; struct hash&lt;shared_ptr&lt;T&gt;&gt;;
  // uses_allocator
  template &lt;class T, class Alloc&gt;
  constexpr bool uses_allocator_v = uses_allocator&lt;T, Alloc&gt;::value;
}
}}

====Class template {{lc|std::pointer_traits}}====
{{source|1=
namespace std {
  template &lt;class Ptr&gt; struct pointer_traits {
    using pointer = Ptr;
    using element_type = /*see definition*/ ;
    using difference_type = /*see definition*/ ;
    template &lt;class U&gt; using rebind = /*see definition*/ ;
    static pointer pointer_to(/*see definition*/ r);
  };
  template &lt;class T&gt; struct pointer_traits&lt;T*&gt; {
    using pointer = T*;
    using element_type = T;
    using difference_type = ptrdiff_t;
    template &lt;class U&gt; using rebind = U*;
    static pointer pointer_to(/*see definition*/ r) noexcept;
  };
}
}}

====Class template {{lc|std::allocator_traits}}====
{{source|1=
namespace std {
  template &lt;class Alloc&gt; struct allocator_traits {
    using allocator_type = Alloc;
    using value_type = typename Alloc::value_type;
    using pointer = /*see definition*/ ;
    using const_pointer = /*see definition*/ ;
    using void_pointer = /*see definition*/ ;
    using const_void_pointer = /*see definition*/ ;
    using difference_type = /*see definition*/ ;
    using size_type = /*see definition*/ ;
    using propagate_on_container_copy_assignment = /*see definition*/ ;
    using propagate_on_container_move_assignment = /*see definition*/ ;
    using propagate_on_container_swap = /*see definition*/ ;
    using is_always_equal = /*see definition*/ ;
    template &lt;class T&gt; using rebind_alloc = /*see definition*/ ;
    template &lt;class T&gt; using rebind_traits = allocator_traits&lt;rebind_alloc&lt;T&gt;&gt;;
    static pointer allocate(Alloc&amp; a, size_type n);
    static pointer allocate(Alloc&amp; a, size_type n, const_void_pointer hint);
    static void deallocate(Alloc&amp; a, pointer p, size_type n);
    template &lt;class T, class... Args&gt;
    static void construct(Alloc&amp; a, T* p, Args&amp;&amp;... args);
    template &lt;class T&gt;
    static void destroy(Alloc&amp; a, T* p);
    static size_type max_size(const Alloc&amp; a) noexcept;
    static Alloc select_on_container_copy_construction(const Alloc&amp; rhs);
  };
}
}}

====Class template {{lc|std::allocator}}====
{{source|1=
namespace std {
  template &lt;class T&gt; class allocator {
  public:
    using value_type = T;
    using propagate_on_container_move_assignment = true_type;
    using is_always_equal = true_type;
    allocator() noexcept;
    allocator(const allocator&amp;) noexcept;
    template &lt;class U&gt; allocator(const allocator&lt;U&gt;&amp;) noexcept;
    ~allocator();
    T* allocate(size_t n);
    void deallocate(T* p, size_t n);
  };
}
}}

====Class template {{lc|std::default_delete}}====
{{source|1=
namespace std {
  template &lt;class T&gt;
  struct default_delete {
    constexpr default_delete() noexcept = default;
    template &lt;class U&gt; default_delete(const default_delete&lt;U&gt;&amp;) noexcept;
    void operator()(T*) const;
  };
  template &lt;class T&gt;
  struct default_delete&lt;T[]&gt; {
    constexpr default_delete() noexcept = default;
    template &lt;class U&gt; default_delete(const default_delete&lt;U[]&gt;&amp;) noexcept;
    template &lt;class U&gt; void operator()(U* ptr) const;
  };
}
}}

====Class template {{lc|std::unique_ptr}}====
{{source|1=
namespace std {
  template &lt;class T, class D = default_delete&lt;T&gt;&gt;
  class unique_ptr {
  public:
    using pointer = /*see definition*/ ;
    using element_type = T;
    using deleter_type = D;
    // constructors
    constexpr unique_ptr() noexcept;
    explicit unique_ptr(pointer p) noexcept;
    unique_ptr(pointer p, /*see definition*/ d1) noexcept;
    unique_ptr(pointer p, /*see definition*/ d2) noexcept;
    unique_ptr(unique_ptr&amp;&amp; u) noexcept;
    constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
    template &lt;class U, class E&gt;
    unique_ptr(unique_ptr&lt;U, E&gt;&amp;&amp; u) noexcept;
    // destructor
    ~unique_ptr();
    // assignment
    unique_ptr&amp; operator=(unique_ptr&amp;&amp; u) noexcept;
    template &lt;class U, class E&gt; unique_ptr&amp; operator=(unique_ptr&lt;U, E&gt;&amp;&amp; u) noexcept;
    unique_ptr&amp; operator=(nullptr_t) noexcept;
    // observers
    add_lvalue_reference_t&lt;T&gt; operator*() const;
    pointer operator-&gt;() const noexcept;
    pointer get() const noexcept;
    deleter_type&amp; get_deleter() noexcept;
    const deleter_type&amp; get_deleter() const noexcept;
    explicit operator bool() const noexcept;
    // modifiers
    pointer release() noexcept;
    void reset(pointer p = pointer()) noexcept;
    void swap(unique_ptr&amp; u) noexcept;
    // disable copy from lvalue
    unique_ptr(const unique_ptr&amp;) = delete;
    unique_ptr&amp; operator=(const unique_ptr&amp;) = delete;
  };

  template &lt;class T, class D&gt;
  class unique_ptr&lt;T[], D&gt; {
  public:
    using pointer = /*see definition*/ ;
    using element_type = T;
    using deleter_type = D;
    // constructors
    constexpr unique_ptr() noexcept;
    template &lt;class U&gt; explicit unique_ptr(U p) noexcept;
    template &lt;class U&gt; unique_ptr(U p, /*see definition*/d) noexcept;
    template &lt;class U&gt; unique_ptr(U p, /*see definition*/d) noexcept;
    unique_ptr(unique_ptr&amp;&amp; u) noexcept;
    template &lt;class U, class E&gt;
    unique_ptr(unique_ptr&lt;U, E&gt;&amp;&amp; u) noexcept;
    constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() { }
    // destructor
    ~unique_ptr();
    // assignment
    unique_ptr&amp; operator=(unique_ptr&amp;&amp; u) noexcept;
    template &lt;class U, class E&gt;
    unique_ptr&amp; operator=(unique_ptr&lt;U, E&gt;&amp;&amp; u) noexcept;
    unique_ptr&amp; operator=(nullptr_t) noexcept;
    // observers
    T&amp; operator[](size_t i) const;
    pointer get() const noexcept;
    deleter_type&amp; get_deleter() noexcept;
    const deleter_type&amp; get_deleter() const noexcept;
    explicit operator bool() const noexcept;
    // modifiers
    pointer release() noexcept;
    template &lt;class U&gt; void reset(U p) noexcept;
    void reset(nullptr_t = nullptr) noexcept;
    void swap(unique_ptr&amp; u) noexcept;
    // disable copy from lvalue
    unique_ptr(const unique_ptr&amp;) = delete;
    unique_ptr&amp; operator=(const unique_ptr&amp;) = delete;
  };
}
}}

====Class {{lc|std::bad_weak_ptr}}====
{{source|1=
namespace std {
  class bad_weak_ptr : public exception {
  public:
    bad_weak_ptr() noexcept;
  };
}
}}

====Class template {{lc|std::shared_ptr}}====
{{source|1=
namespace std {
  template&lt;class T&gt;
  class shared_ptr {
  public:
    using element_type = remove_extent_t&lt;T&gt;;
    using weak_type = weak_ptr&lt;T&gt;;
    // constructors
    constexpr shared_ptr() noexcept;
    template&lt;class Y&gt; explicit shared_ptr(Y* p);
    template&lt;class Y, class D&gt; shared_ptr(Y* p, D d);
    template&lt;class Y, class D, class A&gt; shared_ptr(Y* p, D d, A a);
    template &lt;class D&gt; shared_ptr(nullptr_t p, D d);
    template &lt;class D, class A&gt; shared_ptr(nullptr_t p, D d, A a);
    template&lt;class Y&gt; shared_ptr(const shared_ptr&lt;Y&gt;&amp; r, element_type* p) noexcept;
    shared_ptr(const shared_ptr&amp; r) noexcept;
    template&lt;class Y&gt; shared_ptr(const shared_ptr&lt;Y&gt;&amp; r) noexcept;
    shared_ptr(shared_ptr&amp;&amp; r) noexcept;
    template&lt;class Y&gt; shared_ptr(shared_ptr&lt;Y&gt;&amp;&amp; r) noexcept;
    template&lt;class Y&gt; explicit shared_ptr(const weak_ptr&lt;Y&gt;&amp; r);
    template &lt;class Y, class D&gt; shared_ptr(unique_ptr&lt;Y, D&gt;&amp;&amp; r);
    constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { }
    // destructor
    ~shared_ptr();
    // assignment
    shared_ptr&amp; operator=(const shared_ptr&amp; r) noexcept;
    template&lt;class Y&gt; shared_ptr&amp; operator=(const shared_ptr&lt;Y&gt;&amp; r) noexcept;
    shared_ptr&amp; operator=(shared_ptr&amp;&amp; r) noexcept;
    template&lt;class Y&gt; shared_ptr&amp; operator=(shared_ptr&lt;Y&gt;&amp;&amp; r) noexcept;
    template &lt;class Y, class D&gt; shared_ptr&amp; operator=(unique_ptr&lt;Y, D&gt;&amp;&amp; r);
    // modifiers
    void swap(shared_ptr&amp; r) noexcept;
    void reset() noexcept;
    template&lt;class Y&gt; void reset(Y* p);
    template&lt;class Y, class D&gt; void reset(Y* p, D d);
    template&lt;class Y, class D, class A&gt; void reset(Y* p, D d, A a);
    // observers
    element_type* get() const noexcept;
    T&amp; operator*() const noexcept;
    T* operator-&gt;() const noexcept;
    element_type&amp; operator[](ptrdiff_t i) const;
    long use_count() const noexcept;
    explicit operator bool() const noexcept;
    template&lt;class U&gt; bool owner_before(const shared_ptr&lt;U&gt;&amp; b) const;
    template&lt;class U&gt; bool owner_before(const weak_ptr&lt;U&gt;&amp; b) const;
  };
}
}}

====Class template {{lc|std::weak_ptr}}====
{{source|1=
namespace std {
  template&lt;class T&gt;
  class weak_ptr {
  public:
    using element_type = T;
    // constructors
    constexpr weak_ptr() noexcept;
    template&lt;class Y&gt; weak_ptr(const shared_ptr&lt;Y&gt;&amp; r) noexcept;
    weak_ptr(const weak_ptr&amp; r) noexcept;
    template&lt;class Y&gt; weak_ptr(const weak_ptr&lt;Y&gt;&amp; r) noexcept;
    weak_ptr(weak_ptr&amp;&amp; r) noexcept;
    template&lt;class Y&gt; weak_ptr(weak_ptr&lt;Y&gt;&amp;&amp; r) noexcept;
    // destructor
    ~weak_ptr();
    // assignment
    weak_ptr&amp; operator=(const weak_ptr&amp; r) noexcept;
    template&lt;class Y&gt; weak_ptr&amp; operator=(const weak_ptr&lt;Y&gt;&amp; r) noexcept;
    template&lt;class Y&gt; weak_ptr&amp; operator=(const shared_ptr&lt;Y&gt;&amp; r) noexcept;
    weak_ptr&amp; operator=(weak_ptr&amp;&amp; r) noexcept;
    template&lt;class Y&gt; weak_ptr&amp; operator=(weak_ptr&lt;Y&gt;&amp;&amp; r) noexcept;
    // modifiers
    void swap(weak_ptr&amp; r) noexcept;
    void reset() noexcept;
    // observers
    long use_count() const noexcept;
    bool expired() const noexcept;
    shared_ptr&lt;T&gt; lock() const noexcept;
    template&lt;class U&gt; bool owner_before(const shared_ptr&lt;U&gt;&amp; b) const;
    template&lt;class U&gt; bool owner_before(const weak_ptr&lt;U&gt;&amp; b) const;
  };
}
}}

====Class template {{lc|std::owner_less}}====
{{source|1=
namespace std {
  template&lt;class T = void&gt; struct owner_less;
  template&lt;class T&gt; struct owner_less&lt;shared_ptr&lt;T&gt;&gt; {
    bool operator()(const shared_ptr&lt;T&gt;&amp;, const shared_ptr&lt;T&gt;&amp;) const;
    bool operator()(const shared_ptr&lt;T&gt;&amp;, const weak_ptr&lt;T&gt;&amp;) const;
    bool operator()(const weak_ptr&lt;T&gt;&amp;, const shared_ptr&lt;T&gt;&amp;) const;
  };
  template&lt;class T&gt; struct owner_less&lt;weak_ptr&lt;T&gt;&gt; {
    bool operator()(const weak_ptr&lt;T&gt;&amp;, const weak_ptr&lt;T&gt;&amp;) const;
    bool operator()(const shared_ptr&lt;T&gt;&amp;, const weak_ptr&lt;T&gt;&amp;) const;
    bool operator()(const weak_ptr&lt;T&gt;&amp;, const shared_ptr&lt;T&gt;&amp;) const;
  };
  template&lt;&gt; struct owner_less&lt;void&gt; {
    template&lt;class T, class U&gt;
    bool operator()(const shared_ptr&lt;T&gt;&amp;, const shared_ptr&lt;U&gt;&amp;) const;
    template&lt;class T, class U&gt;
    bool operator()(const shared_ptr&lt;T&gt;&amp;, const weak_ptr&lt;U&gt;&amp;) const;
    template&lt;class T, class U&gt;
    bool operator()(const weak_ptr&lt;T&gt;&amp;, const shared_ptr&lt;U&gt;&amp;) const;
    template&lt;class T, class U&gt;
    bool operator()(const weak_ptr&lt;T&gt;&amp;, const weak_ptr&lt;U&gt;&amp;) const;
    using is_transparent = /*unspecified*/ ;
  };
}
}}

====Class template {{lc|std::enable_shared_from_this}}====
{{source|1=
namespace std {
  template&lt;class T&gt; class enable_shared_from_this {
  protected:
    constexpr enable_shared_from_this() noexcept;
    enable_shared_from_this(const enable_shared_from_this&amp;) noexcept;
    enable_shared_from_this&amp; operator=(const enable_shared_from_this&amp;) noexcept;
    ~enable_shared_from_this();
  public:
    shared_ptr&lt;T&gt; shared_from_this();
    shared_ptr&lt;T const&gt; shared_from_this() const;
    weak_ptr&lt;T&gt; weak_from_this() noexcept;
    weak_ptr&lt;T const&gt; weak_from_this() const noexcept;
  private:
    mutable weak_ptr&lt;T&gt; weak_this; // exposition only
  };
}
}}</text>
      <sha1>3c78gb9rseksjyvhcn18tw38tfktbcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/memory resource</title>
    <ns>0</ns>
    <id>15779</id>
    <revision>
      <id>88785</id>
      <parentid>88782</parentid>
      <timestamp>2016-12-11T15:37:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Class template {{lc|std::pmr::polymorphic_allocator}} */</comment>
      <text xml:space="preserve" bytes="7535">{{cpp/header/title|memory_resource}}
{{cpp/header/navbar}}

===Classes===
{{dsc begin}}
{{dsc namespace|pmr}}
{{dsc inc | cpp/memory/dsc polymorphic_allocator}}
{{dsc inc | cpp/memory/dsc memory_resource }}
{{dsc inc | cpp/memory/dsc pool_options}}
{{dsc inc | cpp/memory/dsc synchronized_pool_resource}}
{{dsc inc | cpp/memory/dsc unsynchronized_pool_resource}}
{{dsc inc | cpp/memory/dsc monotonic_buffer_resource }}
{{dsc end}}
===Functions===
{{dsc begin}}
{{dsc namespace|pmr}}
{{dsc inc | cpp/memory/dsc new_delete_resource}}
{{dsc inc | cpp/memory/dsc null_memory_resource}}
{{dsc inc | cpp/memory/dsc get_default_resource}}
{{dsc inc | cpp/memory/dsc set_default_resource}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std::pmr {
  // class memory_resource
  class memory_resource;
  bool operator==(const memory_resource&amp; a, const memory_resource&amp; b) noexcept;
  bool operator!=(const memory_resource&amp; a, const memory_resource&amp; b) noexcept;
  // class template polymorphic_allocator
  template &lt;class Tp&gt; class polymorphic_allocator;
  template &lt;class T1, class T2&gt;
  bool operator==(const polymorphic_allocator&lt;T1&gt;&amp; a,
  const polymorphic_allocator&lt;T2&gt;&amp; b) noexcept;
  template &lt;class T1, class T2&gt;
  bool operator!=(const polymorphic_allocator&lt;T1&gt;&amp; a,
  const polymorphic_allocator&lt;T2&gt;&amp; b) noexcept;
  // global memory resources
  memory_resource* new_delete_resource() noexcept;
  memory_resource* null_memory_resource() noexcept;
  memory_resource* set_default_resource(memory_resource* r) noexcept;
  memory_resource* get_default_resource() noexcept;
  // pool resource classes
  struct pool_options;
  class synchronized_pool_resource;
  class unsynchronized_pool_resource;
  class monotonic_buffer_resource;
}
}}

====Class {{lc|std::pmr::memory_resource}}====
{{source|1=
class memory_resource {
  static constexpr size_t max_align = alignof(max_align_t); // exposition only
public:
  virtual ~memory_resource();
  void* allocate(size_t bytes, size_t alignment = max_align);
  void deallocate(void* p, size_t bytes, size_t alignment = max_align);
  bool is_equal(const memory_resource&amp; other) const noexcept;
private:
  virtual void* do_allocate(size_t bytes, size_t alignment) = 0;
  virtual void do_deallocate(void* p, size_t bytes, size_t alignment) = 0;
  virtual bool do_is_equal(const memory_resource&amp; other) const noexcept = 0;
};
}}

====Class template {{lc|std::pmr::polymorphic_allocator}}====
{{source|1=
template &lt;class Tp&gt; 
class polymorphic_allocator {
  memory_resource* memory_rsrc; // exposition only
public:
  using value_type = Tp;
  // constructors
  polymorphic_allocator() noexcept;
  polymorphic_allocator(memory_resource* r);
  polymorphic_allocator(const polymorphic_allocator&amp; other) = default;
  template &lt;class U&gt;
  polymorphic_allocator(const polymorphic_allocator&lt;U&gt;&amp; other) noexcept;
  polymorphic_allocator&amp;
  operator=(const polymorphic_allocator&amp; rhs) = delete;
  // member functions
  Tp* allocate(size_t n);
  void deallocate(Tp* p, size_t n);
  template &lt;class T, class... Args&gt;
  void construct(T* p, Args&amp;&amp;... args);
  template &lt;class T1, class T2, class... Args1, class... Args2&gt;
  void construct(pair&lt;T1,T2&gt;* p, piecewise_construct_t,
                 tuple&lt;Args1...&gt; x, tuple&lt;Args2...&gt; y);
  template &lt;class T1, class T2&gt;
  void construct(pair&lt;T1,T2&gt;* p);
  template &lt;class T1, class T2, class U, class V&gt;
  void construct(pair&lt;T1,T2&gt;* p, U&amp;&amp; x, V&amp;&amp; y);
  template &lt;class T1, class T2, class U, class V&gt;
  void construct(pair&lt;T1,T2&gt;* p, const pair&lt;U, V&gt;&amp; pr);
  template &lt;class T1, class T2, class U, class V&gt;
  void construct(pair&lt;T1,T2&gt;* p, pair&lt;U, V&gt;&amp;&amp; pr);
  template &lt;class T&gt;
  void destroy(T* p);
  polymorphic_allocator select_on_container_copy_construction() const;
  memory_resource* resource() const;
};
}}

====Class {{lc|std::pmr::pool_options}}====
{{source|1=
struct pool_options {
  size_t max_blocks_per_chunk = 0;
  size_t largest_required_pool_block = 0;
};
}}

====Class {{lc|std::pmr::synchronized_pool_resource}}====
{{source|1=
class synchronized_pool_resource : public memory_resource {
public:
  synchronized_pool_resource(const pool_options&amp; opts,
  memory_resource* upstream);
  synchronized_pool_resource()
  : synchronized_pool_resource(pool_options(), get_default_resource()) {}
  explicit synchronized_pool_resource(memory_resource* upstream)
  : synchronized_pool_resource(pool_options(), upstream) {}
  explicit synchronized_pool_resource(const pool_options&amp; opts)
  : synchronized_pool_resource(opts, get_default_resource()) {}
  synchronized_pool_resource(const synchronized_pool_resource&amp;) = delete;
  virtual ~synchronized_pool_resource();
  synchronized_pool_resource&amp;
  operator=(const synchronized_pool_resource&amp;) = delete;
  void release();
  memory_resource* upstream_resource() const;
  pool_options options() const;
protected:
  void *do_allocate(size_t bytes, size_t alignment) override;
  void do_deallocate(void *p, size_t bytes, size_t alignment) override;
  bool do_is_equal(const memory_resource&amp; other) const noexcept override;
};
}}

====Class {{lc|std::pmr::unsynchronized_pool_resource}}====
{{source|1=
class unsynchronized_pool_resource : public memory_resource {
public:
  unsynchronized_pool_resource(const pool_options&amp; opts,
  memory_resource* upstream);
  unsynchronized_pool_resource()
  : unsynchronized_pool_resource(pool_options(), get_default_resource()) {}
  explicit unsynchronized_pool_resource(memory_resource* upstream)
  : unsynchronized_pool_resource(pool_options(), upstream) {}
  explicit unsynchronized_pool_resource(const pool_options&amp; opts)
  : unsynchronized_pool_resource(opts, get_default_resource()) {}
  unsynchronized_pool_resource(const unsynchronized_pool_resource&amp;) = delete;
  virtual ~unsynchronized_pool_resource();
  unsynchronized_pool_resource&amp;
  operator=(const unsynchronized_pool_resource&amp;) = delete;
  void release();
  memory_resource *upstream_resource() const;
  pool_options options() const;
protected:
  void* do_allocate(size_t bytes, size_t alignment) override;
  void do_deallocate(void* p, size_t bytes, size_t alignment) override;
  bool do_is_equal(const memory_resource&amp; other) const noexcept override;
};
}}

====Class {{lc|std::pmr::monotonic_buffer_resource}}====
{{source|1=
class monotonic_buffer_resource : public memory_resource {
  memory_resource *upstream_rsrc; // exposition only
  void *current_buffer; // exposition only
  size_t next_buffer_size; // exposition only
public:
  explicit monotonic_buffer_resource(memory_resource *upstream);
  monotonic_buffer_resource(size_t initial_size, memory_resource *upstream);
  monotonic_buffer_resource(void *buffer, size_t buffer_size,
  memory_resource *upstream);
  monotonic_buffer_resource()
  : monotonic_buffer_resource(get_default_resource()) {}
  explicit monotonic_buffer_resource(size_t initial_size)
  : monotonic_buffer_resource(initial_size, get_default_resource()) {}
  monotonic_buffer_resource(void *buffer, size_t buffer_size)
  : monotonic_buffer_resource(buffer, buffer_size, get_default_resource()) {}
  monotonic_buffer_resource(const monotonic_buffer_resource&amp;) = delete;
  virtual ~monotonic_buffer_resource();
  monotonic_buffer_resource
  operator=(const monotonic_buffer_resource&amp;) = delete;
  void release();
  memory_resource* upstream_resource() const;
protected:
  void* do_allocate(size_t bytes, size_t alignment) override;
  void do_deallocate(void* p, size_t bytes, size_t alignment) override;
  bool do_is_equal(const memory_resource&amp; other) const noexcept override;
};
}}</text>
      <sha1>qfox2iot7vtin088jecvkjo7du0nonb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/mutex</title>
    <ns>0</ns>
    <id>12861</id>
    <revision>
      <id>91022</id>
      <parentid>64006</parentid>
      <timestamp>2017-03-14T16:34:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Synopsis */ update the tags (explicit/inline)</comment>
      <text xml:space="preserve" bytes="5902">{{cpp/header/title|mutex}}
{{cpp/header/navbar}}
This header is part of the [[cpp/thread|thread support]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/thread/dsc mutex}}
{{dsc inc | cpp/thread/dsc timed_mutex}}
{{dsc inc | cpp/thread/dsc recursive_mutex}}
{{dsc inc | cpp/thread/dsc recursive_timed_mutex}}
{{dsc inc | cpp/thread/dsc lock_guard}}
{{dsc inc | cpp/thread/dsc unique_lock}}
{{dsc inc | cpp/thread/dsc lock_tag_t}}
{{dsc inc | cpp/thread/dsc lock_tag}}
{{dsc inc | cpp/thread/dsc once_flag}}
{{dsc h1|Functions}}
{{dsc inc | cpp/thread/dsc try_lock}}
{{dsc inc | cpp/thread/dsc lock}}
{{dsc inc | cpp/thread/dsc call_once}}
{{dsc inc | cpp/thread/unique_lock/dsc swap2}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
    class mutex;
    class recursive_mutex;
    class timed_mutex;
    class recursive_timed_mutex;

    struct defer_lock_t { explicit defer_lock_t() = default; };
    inline constexpr defer_lock_t defer_lock { };

    struct try_to_lock_t { explicit try_to_lock_t() = default; };
    inline constexpr try_to_lock_t try_to_lock { };

    struct adopt_lock_t { explicit adopt_lock_t() = default; };
    inline constexpr adopt_lock_t adopt_lock { };

    template &lt;class Mutex&gt; class lock_guard;
    template &lt;class Mutex&gt; class unique_lock;

    template &lt;class Mutex&gt;
    void swap(unique_lock&lt;Mutex&gt;&amp; x,
              unique_lock&lt;Mutex&gt;&amp; y) noexcept;

    template &lt;class L1, class L2, class... L3&gt;
    int try_lock(L1&amp;, L2&amp;, L3&amp;...);

    template &lt;class L1, class L2, class... L3&gt;
    void lock(L1&amp;, L2&amp;, L3&amp;...);

    struct once_flag;

    template&lt;class Callable, class ...Args&gt;
    void call_once(once_flag&amp; flag, Callable func, Args&amp;&amp;... args);
}
}}

====Class {{lc|std::mutex}}====
{{source|1=
class mutex {
 public:
    constexpr mutex() noexcept;
    ~mutex();
    mutex(const mutex&amp;) = delete;
    mutex&amp; operator=(const mutex&amp;) = delete;

    void lock();
    bool try_lock();
    void unlock();
    typedef /*implementation-defined*/ native_handle_type;
    native_handle_type native_handle();
};
}}

====Class {{lc|std::recursive_mutex}}====
{{source|1=
class recursive_mutex {
 public:
    recursive_mutex();
    ~recursive_mutex();
    recursive_mutex(const recursive_mutex&amp;) = delete;
    recursive_mutex&amp; operator=(const recursive_mutex&amp;) = delete;

    void lock();
    bool try_lock() noexcept;
    void unlock();
    typedef /*implementation-defined*/ native_handle_type;
    native_handle_type native_handle();
};
}}

====Class {{lc|std::timed_mutex}}====
{{source|1=
class timed_mutex {
 public:
    timed_mutex();
    ~timed_mutex();
    timed_mutex(const timed_mutex&amp;) = delete;
    timed_mutex&amp; operator=(const timed_mutex&amp;) = delete;

    void lock();
    bool try_lock();
    template &lt;class Rep, class Period&gt;
        bool try_lock_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Clock, class Duration&gt;
        bool try_lock_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    void unlock();
    typedef /*implementation-defined*/ native_handle_type;
    native_handle_type native_handle();
};
}}

====Class {{lc|std::recursive_timed_mutex}}====
{{source|1=
class recursive_timed_mutex {
 public:
    recursive_timed_mutex();
    ~recursive_timed_mutex();
    recursive_timed_mutex(const recursive_timed_mutex&amp;) = delete;
    recursive_timed_mutex&amp; operator=(const recursive_timed_mutex&amp;) = delete;

    void lock();
    bool try_lock() noexcept;
    template &lt;class Rep, class Period&gt;
        bool try_lock_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Clock, class Duration&gt;
        bool try_lock_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    void unlock();
    typedef /*implementation-defined*/ native_handle_type;
    native_handle_type native_handle();
};
}}

====Class {{lc|std::lock_guard}}====
{{source|1=
template &lt;class Mutex&gt;
class lock_guard {
 public:
    typedef Mutex mutex_type;
    explicit lock_guard(mutex_type&amp; m);
    lock_guard(mutex_type&amp; m, adopt_lock_t);
    ~lock_guard();
    lock_guard(lock_guard const&amp;) = delete;
    lock_guard&amp; operator=(lock_guard const&amp;) = delete;
 private:
    mutex_type&amp; pm; // exposition only
};
}}

====Class {{lc|std::unique_lock}}====
{{source|1=
template &lt;class Mutex&gt;
class unique_lock {
 public:
    typedef Mutex mutex_type;

    // construct/copy/destroy:
    unique_lock() noexcept;
    explicit unique_lock(mutex_type&amp; m);
    unique_lock(mutex_type&amp; m, defer_lock_t) noexcept;
    unique_lock(mutex_type&amp; m, try_to_lock_t);
    unique_lock(mutex_type&amp; m, adopt_lock_t);
    template &lt;class Clock, class Duration&gt;
    unique_lock(mutex_type&amp; m, const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    template &lt;class Rep, class Period&gt;
    unique_lock(mutex_type&amp; m, const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    ~unique_lock();
    unique_lock(unique_lock const&amp;) = delete;
    unique_lock&amp; operator=(unique_lock const&amp;) = delete;
    unique_lock(unique_lock&amp;&amp; u) noexcept;
    unique_lock&amp; operator=(unique_lock&amp;&amp; u) noexcept;

    // locking:
    void lock();
    bool try_lock();
    template &lt;class Rep, class Period&gt;
    bool try_lock_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Clock, class Duration&gt;
    bool try_lock_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    void unlock();

    // modifiers:
    void swap(unique_lock&amp; u) noexcept;
    mutex_type *release() noexcept;

    // observers:
    bool owns_lock() const noexcept;
    explicit operator bool () const noexcept;
    mutex_type* mutex() const noexcept;

 private:
    mutex_type *pm; // exposition only
    bool owns; // exposition only
};
}}

====Class {{lc|std::once_flag}}====
{{source|1=
struct once_flag {
    constexpr once_flag() noexcept;
    once_flag(const once_flag&amp;) = delete;
    once_flag&amp; operator=(const once_flag&amp;) = delete;
};
}}</text>
      <sha1>1a5p83c2cpm95676c1tcreizuggk3w1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/new</title>
    <ns>0</ns>
    <id>9666</id>
    <revision>
      <id>88931</id>
      <parentid>88009</parentid>
      <timestamp>2016-12-20T19:54:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>resuming n4618 updates to header synopses</comment>
      <text xml:space="preserve" bytes="3234">{{cpp/header/title|new}}
{{cpp/header/navbar}}
This header is part of the [[cpp/memory|dynamic memory management]] library, in particular provides [[cpp/memory/new|low level memory management]] features.

{{dsc begin}}
{{dsc h2 | Functions}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/new/dsc operator_delete}}
{{dsc inc | cpp/memory/new/dsc get_new_handler}}
{{dsc inc | cpp/memory/new/dsc set_new_handler}}
{{dsc inc | cpp/utility/dsc launder}}
{{dsc h2 | Classes }}
{{dsc inc | cpp/memory/new/dsc bad_alloc}}
{{dsc inc | cpp/memory/new/dsc bad_array_new_length}}
{{dsc inc | cpp/memory/new/dsc nothrow_t}}
{{dsc inc | cpp/memory/new/dsc align_val_t}}
{{dsc h2 | Types }}
{{dsc inc | cpp/memory/new/dsc new_handler}}
{{dsc h2 | Objects}}
{{dsc inc | cpp/memory/new/dsc nothrow}}
{{dsc inc | cpp/thread/dsc hardware_destructive_interference_size}}
{{dsc end}}


===Synopsis===

{{source|1=
namespace std {
  class bad_alloc;
  class bad_array_new_length;
  enum class align_val_t : size_t {};
  struct nothrow_t { explicit nothrow_t() = default; };
  extern const nothrow_t nothrow;
  using new_handler = void (*)();
  new_handler get_new_handler() noexcept;
  new_handler set_new_handler(new_handler new_p) noexcept;
  template &lt;class T&gt; constexpr T* launder(T* p) noexcept;
  static constexpr size_t
    hardware_destructive_interference_size = /*implementation-defined*/ ;
  static constexpr size_t
    hardware_constructive_interference_size = /*implementation-defined*/ ;
}

void* operator new(std::size_t size);
void* operator new(std::size_t size, std::align_val_t alignment);
void* operator new(std::size_t size, const std::nothrow_t&amp;) noexcept;
void* operator new(std::size_t size, std::align_val_t alignment,
                   const std::nothrow_t&amp;) noexcept;
void operator delete(void* ptr) noexcept;
void operator delete(void* ptr, std::size_t size) noexcept;
void operator delete(void* ptr, std::align_val_t alignment) noexcept;
void operator delete(void* ptr, std::size_t size, std::align_val_t alignment) noexcept;
void operator delete(void* ptr, const std::nothrow_t&amp;) noexcept;
void operator delete(void* ptr, std::align_val_t alignment,
                     const std::nothrow_t&amp;) noexcept;
void* operator new[](std::size_t size);
void* operator new[](std::size_t size, std::align_val_t alignment);
void* operator new[](std::size_t size, const std::nothrow_t&amp;) noexcept;
void* operator new[](std::size_t size,
                     std::align_val_t alignment,
                     const std::nothrow_t&amp;) noexcept;
void operator delete[](void* ptr) noexcept;
void operator delete[](void* ptr, std::size_t size) noexcept;
void operator delete[](void* ptr, std::align_val_t alignment) noexcept;
void operator delete[](void* ptr, std::size_t size, std::align_val_t alignment) noexcept;
void operator delete[](void* ptr, const std::nothrow_t&amp;) noexcept;
void operator delete[](void* ptr, std::align_val_t alignment,
                       const std::nothrow_t&amp;) noexcept;
void* operator new (std::size_t size, void* ptr) noexcept;
void* operator new[](std::size_t size, void* ptr) noexcept;
void operator delete (void* ptr, void*) noexcept;
void operator delete[](void* ptr, void*) noexcept;
}}</text>
      <sha1>hk0ay2dsq5wwhr59hkvokvas3eet1q3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/numeric</title>
    <ns>0</ns>
    <id>9794</id>
    <revision>
      <id>89302</id>
      <parentid>57517</parentid>
      <timestamp>2017-01-17T13:32:18Z</timestamp>
      <contributor>
        <username>Evotopid</username>
        <id>6315</id>
      </contributor>
      <comment>Added C++17 functions, source: [[cpp/numeric]]</comment>
      <text xml:space="preserve" bytes="2617">{{cpp/header/title|numeric}}
{{cpp/header/navbar}}

This header is part of the [[cpp/numeric|numeric]] library.

===Functions===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc iota}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc reduce}}
{{dsc inc | cpp/algorithm/dsc transform_reduce}}
{{dsc inc | cpp/algorithm/dsc inner_product}}
{{dsc inc | cpp/algorithm/dsc adjacent_difference}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc inclusive_scan}}
{{dsc inc | cpp/algorithm/dsc exclusive_scan}}
{{dsc inc | cpp/algorithm/dsc transform_inclusive_scan}}
{{dsc inc | cpp/algorithm/dsc transform_exclusive_scan}}
{{dsc inc | cpp/numeric/dsc gcd}}
{{dsc inc | cpp/numeric/dsc lcm}}
{{dsc end}}

===Synopsis===
{{source|

namespace std {
    template &lt;class InputIterator, class T&gt;
        T accumulate(InputIterator first, InputIterator last, T init);
    template &lt;class InputIterator, class T, class BinaryOperation&gt;
        T accumulate(InputIterator first, InputIterator last, T init,
            BinaryOperation binary_op);
        
    template &lt;class InputIterator1, class InputIterator2, class T&gt;
        T inner_product(InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, T init);
    template &lt;class InputIterator1, class InputIterator2, class T,
            class BinaryOperation1, class BinaryOperation2&gt;
        T inner_product(InputIterator1 first1, InputIterator1 last1,
            InputIterator2 first2, T init,
            BinaryOperation1 binary_op1,
            BinaryOperation2 binary_op2);
        
    template &lt;class InputIterator, class OutputIterator&gt;
        OutputIterator partial_sum(InputIterator first,
            InputIterator last,
            OutputIterator result);
    template &lt;class InputIterator, class OutputIterator,
            class BinaryOperation&gt;
        OutputIterator partial_sum(InputIterator first,
            InputIterator last,
            OutputIterator result,
            BinaryOperation binary_op);
    template &lt;class InputIterator, class OutputIterator&gt;
        OutputIterator adjacent_difference(InputIterator first,
            InputIterator last,
            OutputIterator result);
    template &lt;class InputIterator, class OutputIterator,
            class BinaryOperation&gt;
        OutputIterator adjacent_difference(InputIterator first,
            InputIterator last,
            OutputIterator result,
            BinaryOperation binary_op);
        
    template &lt;class ForwardIterator, class T&gt;
        void iota(ForwardIterator first, ForwardIterator last, T value);
}

}}</text>
      <sha1>859kcd7wf7pb8h4v75azzomkja48i6n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/optional</title>
    <ns>0</ns>
    <id>12788</id>
    <revision>
      <id>89650</id>
      <parentid>88780</parentid>
      <timestamp>2017-01-23T07:47:51Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="5911">{{cpp/header/title|optional}}
{{cpp/header/navbar}}

===Classes===
{{dsc begin}}
{{dsc hitem | Name | Description}}
{{dsc inc | cpp/utility/dsc optional}}
{{dsc inc | cpp/utility/optional/dsc bad_optional_access}}
{{dsc inc | cpp/utility/optional/dsc hash}}
{{dsc inc | cpp/utility/optional/dsc nullopt_t}}
{{dsc end}}

===Functions===

{{dsc begin}}

{{dsc h2 | Comparison}}
{{dsc inc | cpp/utility/optional/dsc operator_cmp}}

{{dsc h2 | Specialized algorithms}}
{{dsc inc | cpp/utility/optional/dsc swap2}}
{{dsc inc | cpp/utility/optional/dsc make_optional}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  // optional
  template &lt;class T&gt; class optional;
  // no-value state indicator
  struct nullopt_t{/*see definition*/ };
  constexpr nullopt_t nullopt(/*unspecified*/);
  // class bad_optional_access
  class bad_optional_access;
  // relational operators
  template &lt;class T&gt;
  constexpr bool operator==(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt;
  constexpr bool operator!=(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt;
  constexpr bool operator&lt;(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt;
  constexpr bool operator&gt;(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt;
  constexpr bool operator&lt;=(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt;
  constexpr bool operator&gt;=(const optional&lt;T&gt;&amp;, const optional&lt;T&gt;&amp;);
  // comparison with nullopt
  template &lt;class T&gt; constexpr bool operator==(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
  template &lt;class T&gt; constexpr bool operator==(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
  template &lt;class T&gt; constexpr bool operator!=(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
  template &lt;class T&gt; constexpr bool operator!=(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
  template &lt;class T&gt; constexpr bool operator&lt;(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
  template &lt;class T&gt; constexpr bool operator&lt;(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
  template &lt;class T&gt; constexpr bool operator&lt;=(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
  template &lt;class T&gt; constexpr bool operator&lt;=(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
  template &lt;class T&gt; constexpr bool operator&gt;(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
  template &lt;class T&gt; constexpr bool operator&gt;(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
  template &lt;class T&gt; constexpr bool operator&gt;=(const optional&lt;T&gt;&amp;, nullopt_t) noexcept;
  template &lt;class T&gt; constexpr bool operator&gt;=(nullopt_t, const optional&lt;T&gt;&amp;) noexcept;
  // comparison with T
  template &lt;class T&gt; constexpr bool operator==(const optional&lt;T&gt;&amp;, const T&amp;);
  template &lt;class T&gt; constexpr bool operator==(const T&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt; constexpr bool operator!=(const optional&lt;T&gt;&amp;, const T&amp;);
  template &lt;class T&gt; constexpr bool operator!=(const T&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt; constexpr bool operator&lt;(const optional&lt;T&gt;&amp;, const T&amp;);
  template &lt;class T&gt; constexpr bool operator&lt;(const T&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt; constexpr bool operator&lt;=(const optional&lt;T&gt;&amp;, const T&amp;);
  template &lt;class T&gt; constexpr bool operator&lt;=(const T&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt; constexpr bool operator&gt;(const optional&lt;T&gt;&amp;, const T&amp;);
  template &lt;class T&gt; constexpr bool operator&gt;(const T&amp;, const optional&lt;T&gt;&amp;);
  template &lt;class T&gt; constexpr bool operator&gt;=(const optional&lt;T&gt;&amp;, const T&amp;);
  template &lt;class T&gt; constexpr bool operator&gt;=(const T&amp;, const optional&lt;T&gt;&amp;);
  // specialized algorithms
  template &lt;class T&gt; void swap(optional&lt;T&gt;&amp;, optional&lt;T&gt;&amp;) noexcept(/*see definition*/);
  template &lt;class T&gt; constexpr optional&lt;/*see definition*/&gt; make_optional(T&amp;&amp;);
  template &lt;class T, class... Args&gt;
  constexpr optional&lt;T&gt; make_optional(Args&amp;&amp;... args);
  template &lt;class T, class U, class... Args&gt;
  constexpr optional&lt;T&gt; make_optional(initializer_list&lt;U&gt; il, Args&amp;&amp;... args);
  // hash support
  template &lt;class T&gt; struct hash;
  template &lt;class T&gt; struct hash&lt;optional&lt;T&gt;&gt;;
}

}}

====Class template {{lc|std::optional}}====
{{source|1=
template &lt;class T&gt; class optional {
public:
  using value_type = T;
  // constructors
  constexpr optional() noexcept;
  constexpr optional(nullopt_t) noexcept;
  optional(const optional&amp;);
  optional(optional&amp;&amp;) noexcept(/*see definition*/ );
  template &lt;class... Args&gt; constexpr explicit optional(in_place_t, Args &amp;&amp;...);
  template &lt;class U, class... Args&gt;
  constexpr explicit optional(in_place_t, initializer_list&lt;U&gt;, Args &amp;&amp;...);
  template &lt;class U = T&gt; /*conditionally-explicit*/ constexpr optional(U&amp;&amp;);
  template &lt;class U&gt; /*conditionally-explicit*/ optional(const optional&lt;U&gt;&amp;);
  template &lt;class U&gt; /*conditionally-explicit*/ optional(optional&lt;U&gt; &amp;&amp;);
  // destructor
  ~optional();
  // assignment
  optional&amp; operator=(nullopt_t) noexcept;
  optional&amp; operator=(const optional&amp;);
  optional&amp; operator=(optional&amp;&amp;) noexcept(see below );
  template &lt;class U = T&gt; optional&amp; operator=(U&amp;&amp;);
  template &lt;class U&gt; optional&amp; operator=(const optional&lt;U&gt;&amp;);
  template &lt;class U&gt; optional&amp; operator=(optional&lt;U&gt;&amp;&amp;);
  template &lt;class... Args&gt; void emplace(Args&amp;&amp;...);
  template &lt;class U, class... Args&gt;
  void emplace(initializer_list&lt;U&gt;, Args&amp;&amp;...);
  // swap
  void swap(optional&amp;) noexcept(see below );
  // observers
  constexpr const T* operator-&gt;() const;
  constexpr T* operator-&gt;();
  constexpr const T&amp; operator*() const&amp;;
  constexpr T&amp; operator*() &amp;;
  constexpr T&amp;&amp; operator*() &amp;&amp;;
  constexpr const T&amp;&amp; operator*() const&amp;&amp;;
  constexpr explicit operator bool() const noexcept;
  constexpr bool has_value() const noexcept;
  constexpr const T&amp; value() const&amp;;
  constexpr T&amp; value() &amp;;
  constexpr T&amp;&amp; value() &amp;&amp;;
  constexpr const T&amp;&amp; value() const&amp;&amp;;
  template &lt;class U&gt; constexpr T value_or(U&amp;&amp;) const&amp;;
  template &lt;class U&gt; constexpr T value_or(U&amp;&amp;) &amp;&amp;;
  // modifiers
  void reset() noexcept;
private:
  T *val; // exposition only
};
}}

[[zh:cpp/header/optional]]</text>
      <sha1>jpimnutb5diy2qesurxp251n55kvbhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/ostream</title>
    <ns>0</ns>
    <id>9670</id>
    <revision>
      <id>57518</id>
      <parentid>49586</parentid>
      <timestamp>2013-06-01T05:54:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="5322">{{cpp/header/title|ostream}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io|Input/output]] library.
{{dsc begin}}
{{dsc h1 | Classes}}
{{dsc tclass | cpp/io/basic_ostream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level output interface}}
{{dsc|{{lc|std::ostream}}|{{c|basic_ostream&lt;char&gt;}}&lt;br/&gt; {{mark typedef}}}}
{{dsc|{{lc|std::wostream}}|{{c|basic_ostream&lt;wchar_t&gt;}}&lt;br/&gt; {{mark typedef}} }}
{{dsc h1 | Functions}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt2}}
{{dsc h2 | Manipulators}}
{{dsc inc | cpp/io/manip/dsc ends}}
{{dsc inc | cpp/io/manip/dsc flush}}
{{dsc inc | cpp/io/manip/dsc endl}}
{{dsc end}}

===Synopsis===
{{source|
namespace std {
    template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
        class basic_ostream;
    typedef basic_ostream&lt;char&gt;    ostream;
    typedef basic_ostream&lt;wchar_t&gt; wostream;

    template &lt;class charT, class traits&gt;
        basic_ostream&lt;charT,traits&gt;&amp; endl(basic_ostream&lt;charT,traits&gt;&amp; os);
    template &lt;class charT, class traits&gt;
        basic_ostream&lt;charT,traits&gt;&amp; ends(basic_ostream&lt;charT,traits&gt;&amp; os);
    template &lt;class charT, class traits&gt;
        basic_ostream&lt;charT,traits&gt;&amp; flush(basic_ostream&lt;charT,traits&gt;&amp; os);

    template &lt;class charT, class traits, class T&gt;
        basic_ostream&lt;charT, traits&gt;&amp;
        operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp;&amp; os, const T&amp; x);

    // character inserters
    template&lt;class charT, class traits&gt;
        basic_ostream&lt;charT,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;charT,traits&gt;&amp;, charT);
    template&lt;class charT, class traits&gt;
        basic_ostream&lt;charT,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;charT,traits&gt;&amp;, char);
    template&lt;class traits&gt;
        basic_ostream&lt;char,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;char,traits&gt;&amp;, char);

    // signed and unsigned
    template&lt;class traits&gt;
        basic_ostream&lt;char,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;char,traits&gt;&amp;, signed char);
    template&lt;class traits&gt;
        basic_ostream&lt;char,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;char,traits&gt;&amp;, unsigned char);
    template&lt;class charT, class traits&gt;
        basic_ostream&lt;charT,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;charT,traits&gt;&amp;, const charT*);
    template&lt;class charT, class traits&gt;
        basic_ostream&lt;charT,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;charT,traits&gt;&amp;, const char*);
    template&lt;class traits&gt;
        basic_ostream&lt;char,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;char,traits&gt;&amp;, const char*);

    // signed and unsigned
    template&lt;class traits&gt;
        basic_ostream&lt;char,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;char,traits&gt;&amp;, const signed char*);
    template&lt;class traits&gt;
        basic_ostream&lt;char,traits&gt;&amp; 
        operator&lt;&lt;(basic_ostream&lt;char,traits&gt;&amp;, const unsigned char*);
}

}}


====Class {{lc|std::basic_ostream}}====
{{source|

template &lt;class charT, class traits {{=}} char_traits&lt;charT&gt; &gt;
class basic_ostream : virtual public basic_ios&lt;charT,traits&gt; {
public:
    // types (inherited from basic_ios):
    typedef charT                     char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits                    traits_type;
    
    // Constructor/destructor:
    explicit basic_ostream(basic_streambuf&lt;char_type,traits&gt;* sb);
    virtual ~basic_ostream();
    
    // Prefix/suffix:
    class sentry;
    
    // Formatted output:
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(
        basic_ostream&lt;charT,traits&gt;&amp; (*pf)(basic_ostream&lt;charT,traits&gt;&amp;));
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(
        basic_ios&lt;charT,traits&gt;&amp; (*pf)(basic_ios&lt;charT,traits&gt;&amp;));
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(
        ios_base&amp; (*pf)(ios_base&amp;));
    
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(bool n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(short n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(unsigned short n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(int n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(unsigned int n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(long n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(unsigned long n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(long long n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(unsigned long long n);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(float f);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(double f);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(long double f);
    
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(const void* p);
    basic_ostream&lt;charT,traits&gt;&amp; operator&lt;&lt;(
        basic_streambuf&lt;char_type,traits&gt;* sb);

    // Unformatted output:
    basic_ostream&lt;charT,traits&gt;&amp; put(char_type c);
    basic_ostream&lt;charT,traits&gt;&amp; write(const char_type* s, streamsize n);
    
    basic_ostream&lt;charT,traits&gt;&amp; flush();

    // seeks:
    pos_type tellp();
    basic_ostream&lt;charT,traits&gt;&amp; seekp(pos_type);
    basic_ostream&lt;charT,traits&gt;&amp; seekp(off_type, ios_base::seekdir);

protected:
    basic_ostream(const basic_ostream&amp; rhs) {{=}} delete;
    basic_ostream(basic_ostream&amp;&amp; rhs);

    // Assign/swap
    basic_ostream&amp; operator{{=}}(basic_ostream&amp; rhs) {{=}} delete;
    basic_ostream&amp; operator{{=}}(const basic_ostream&amp;&amp; rhs);
    void swap(basic_ostream&amp; rhs);
};

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/queue</title>
    <ns>0</ns>
    <id>12849</id>
    <revision>
      <id>91145</id>
      <parentid>63990</parentid>
      <timestamp>2017-03-22T08:29:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Synopsis */ +</comment>
      <text xml:space="preserve" bytes="5893">{{cpp/header/title|queue}}
{{cpp/header/navbar}}
This header is part of the [[cpp/container|containers]] library.
{{dsc begin}}
{{dsc h1|Includes}}
{{dsc|{{header|initializer_list}}{{mark c++11}}}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc queue}}
{{dsc inc | cpp/container/dsc priority_queue}}
{{dsc inc | cpp/container/dsc uses_allocator | queue}}
{{dsc inc | cpp/container/dsc uses_allocator | priority_queue}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | queue}}
{{dsc inc | cpp/container/dsc swap2 | queue}}
{{dsc inc | cpp/container/dsc swap2 | priority_queue}}
{{dsc end}}

===Synopsis===

{{source|1=
#include &lt;initializer_list&gt;

namespace std {
    template &lt;class T, class Container = deque&lt;T&gt; &gt; class queue;

    template &lt;class T,
              class Container = vector&lt;T&gt;,
              class Compare = less&lt;typename Container::value_type&gt; &gt;
    class priority_queue;

    template &lt;class T, class Container&gt;
        bool operator==(const queue&lt;T, Container&gt;&amp; x,const queue&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator!=(const queue&lt;T, Container&gt;&amp; x,const queue&lt;T, Container&gt;&amp; y);

    template &lt;class T, class Container&gt;
        bool operator&lt; (const queue&lt;T, Container&gt;&amp; x,const queue&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator&gt; (const queue&lt;T, Container&gt;&amp; x,const queue&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator&gt;=(const queue&lt;T, Container&gt;&amp; x,const queue&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator&lt;=(const queue&lt;T, Container&gt;&amp; x,const queue&lt;T, Container&gt;&amp; y);

    template &lt;class T, class Container&gt;
        void swap(queue&lt;T, Container&gt;&amp; x, queue&lt;T, Container&gt;&amp; y)
            noexcept(noexcept(x.swap(y)));

    template &lt;class T, class Container, class Compare&gt;
        void swap(priority_queue&lt;T, Container, Compare&gt;&amp; x,
                  priority_queue&lt;T, Container, Compare&gt;&amp; y)
        noexcept(noexcept(x.swap(y)));

    template &lt;class T, class Container, class Alloc&gt;
        struct uses_allocator&lt;queue&lt;T, Container&gt;, Alloc&gt;
            : uses_allocator&lt;Container, Alloc&gt;::type { };

}
}}

====Class {{lc|std::queue}}====
{{source|1=
template &lt;class T, class Container = deque&lt;T&gt; &gt;
class queue {
 public:
    typedef typename Container::value_type value_type;
    typedef typename Container::reference reference;
    typedef typename Container::const_reference const_reference;
    typedef typename Container::size_type size_type;
    typedef Container container_type;
 protected:
    Container c;
 public:
    explicit queue(const Container&amp;);
    explicit queue(Container&amp;&amp; = Container());
    template &lt;class Alloc&gt; explicit queue(const Alloc&amp;);
    template &lt;class Alloc&gt; queue(const Container&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; queue(Container&amp;&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; queue(const queue&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; queue(queue&amp;&amp;, const Alloc&amp;);

    bool empty() const {
        return c.empty();
    }
    size_type size() const {
        return c.size();
    }
    reference front() {
        return c.front();
    }
    const_reference front() const {
        return c.front();
    }
    reference back() {
        return c.back();
    }
    const_reference back() const {
        return c.back();
    }
    void push(const value_type&amp; x) {
        c.push_back(x);
    }
    void push(value_type&amp;&amp; x) {
        c.push_back(std::move(x));
    }
    template &lt;class... Args&gt; void emplace(Args&amp;&amp;... args) {
        c.emplace_back(std::forward&lt;Args&gt;(args)...);
    }
    void pop() {
        c.pop_front();
    }
    void swap(queue&amp; q) noexcept(noexcept(swap(c, q.c))) {
        using std::swap;
        swap(c, q.c);
    }
};
}}

====Class {{lc|std::priority_queue}}====
{{source|1=
template &lt;class T,
          class Container = vector&lt;T&gt;,
          class Compare = less&lt;typename Container::value_type&gt; &gt;
class priority_queue {
 public:
    typedef typename Container::value_type value_type;
    typedef typename Container::reference reference;
    typedef typename Container::const_reference const_reference;
    typedef typename Container::size_type size_type;
    typedef Container container_type;
 protected:
    Container c;
    Compare comp;
 public:
    priority_queue(const Compare&amp; x, const Container&amp;);
    explicit priority_queue(const Compare&amp; x = Compare(), Container&amp;&amp; = Container());
    template &lt;class InputIterator&gt;
    priority_queue(InputIterator first, InputIterator last,
                       const Compare&amp; x, const Container&amp;);
    template &lt;class InputIterator&gt;
    priority_queue(InputIterator first, InputIterator last,
                   const Compare&amp; x = Compare(), Container&amp;&amp; = Container());
    template &lt;class Alloc&gt; explicit priority_queue(const Alloc&amp;);
    template &lt;class Alloc&gt; priority_queue(const Compare&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; priority_queue(const Compare&amp;,
                                          const Container&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; priority_queue(const Compare&amp;,
                                          Container&amp;&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; priority_queue(const priority_queue&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; priority_queue(priority_queue&amp;&amp;, const Alloc&amp;);

    bool empty() const {
        return c.empty();
    }
    size_type size() const {
        return c.size();
    }
    const_reference top() const {
        return c.front();
    }
    void push(const value_type&amp; x);
    void push(value_type&amp;&amp; x);
    template &lt;class... Args&gt; void emplace(Args&amp;&amp;... args);
    void pop();
    void swap(priority_queue&amp; q) noexcept( noexcept(swap(c, q.c))
                                        &amp;&amp; noexcept(swap(comp, q.comp))) {
        using std::swap;
        swap(c, q.c);
        swap(comp, q.comp);
    }
};
}}</text>
      <sha1>hzmd5n8hbv8g6zx65w71z0mo2geit8l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/random</title>
    <ns>0</ns>
    <id>9771</id>
    <revision>
      <id>88766</id>
      <parentid>88079</parentid>
      <timestamp>2016-12-11T02:05:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>re-pasted the dsc tempaltes from the library page; copied synopsis from n4618</comment>
      <text xml:space="preserve" bytes="9299">{{cpp/header/title|random}}
{{cpp/header/navbar}}

This header is part of the [[cpp/numeric/random|pseudo-random number generation]] library.

{{dsc begin}}
{{dsc h2|Random number engines}}
{{dsc tclass | cpp/numeric/random/linear_congruential_engine | implements [[enwiki:Linear_congruential_generator | linear congruential]] algorithm | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/mersenne_twister_engine | implements [[enwiki:Mersenne_twister | Mersenne twister]] algorithm | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/subtract_with_carry_engine | implements subtract with carry (a [[enwiki:Lagged_Fibonacci_generator | lagged Fibonacci]]) algorithm | notes={{mark c++11}}}}

{{dsc h2|Random number engine adaptors}}
{{dsc tclass | cpp/numeric/random/discard_block_engine | discards some output of a random number engine | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/independent_bits_engine | packs the output of a random number engine into blocks of specified number of bits | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/shuffle_order_engine | delivers the output of a random number engine in different order | notes={{mark c++11}}}}

{{dsc h2|Predefined generators}}
{{dsc inc | cpp/numeric/random/dsc minstd_rand0}}
{{dsc inc | cpp/numeric/random/dsc minstd_rand}}
{{dsc inc | cpp/numeric/random/dsc mt19937}}
{{dsc inc | cpp/numeric/random/dsc mt19937_64}}
{{dsc inc | cpp/numeric/random/dsc ranlux24_base}}
{{dsc inc | cpp/numeric/random/dsc ranlux48_base}}
{{dsc inc | cpp/numeric/random/dsc ranlux24}}
{{dsc inc | cpp/numeric/random/dsc ranlux48}}
{{dsc inc | cpp/numeric/random/dsc knuth_b}}
{{dsc | {{tt|default_random_engine}} | ''implementation-defined''}}

{{dsc h2|Non-deterministic random numbers}}
{{dsc inc | cpp/numeric/random/dsc random_device}}

{{dsc h2 | Uniform distributions}}
{{dsc inc | cpp/numeric/random/dsc uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/dsc uniform_real_distribution}}

{{dsc h2 | Bernoulli distributions}}
{{dsc class | cpp/numeric/random/bernoulli_distribution | produces {{c|bool}} values on a [[enwiki:Bernoulli_distribution | Bernoulli distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/binomial_distribution | produces integer values on a  [[enwiki:Binomial_distribution | binomial distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/negative_binomial_distribution | produces integer values on a  [[enwiki:Negative_binomial_distribution | negative binomial distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/geometric_distribution | produces integer values on a  [[enwiki:Geometric_distribution | geometric distribution]].  | notes={{mark c++11}}}}

{{dsc h2 | Poisson distributions}}
{{dsc tclass | cpp/numeric/random/poisson_distribution | produces integer values on a  [[enwiki:Poisson_distribution | poisson distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/exponential_distribution | produces real values on an  [[enwiki:Exponential_distribution | exponential distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/gamma_distribution | produces real values on an  [[enwiki:Gamma_distribution | gamma distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/weibull_distribution |produces real values on a  [[enwiki:Weibull_distribution | Weibull distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/extreme_value_distribution | produces real values on an  [[enwiki:Generalized_extreme_value_distribution | extreme value distribution]]. | notes={{mark c++11}}}}

{{dsc h2 | Normal distributions}}
{{dsc tclass | cpp/numeric/random/normal_distribution | produces real values on a  [[enwiki:Normal_distribution | standard normal (Gaussian) distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/lognormal_distribution | produces real values on a  [[enwiki:Lognormal_distribution | lognormal distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/chi_squared_distribution | produces real values on a  [[enwiki:Chi-squared_distribution | chi-squared distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/cauchy_distribution | produces real values on a  [[enwiki:Cauchy_distribution | Cauchy distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/fisher_f_distribution | produces real values on a  [[enwiki:F-distribution | Fisher's F-distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/student_t_distribution | produces real values on a  [[enwiki:Student's t-distribution | Student's t-distribution]]. | notes={{mark c++11}}}}

{{dsc h2 | Sampling distributions}}
{{dsc tclass | cpp/numeric/random/discrete_distribution | produces random integers on a discrete distribution. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/piecewise_constant_distribution | produces real values distributed on constant subintervals.| notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/piecewise_linear_distribution | produces real values distributed on defined subintervals. | notes={{mark c++11}}}}

{{dsc h2| Utilities}}
{{dsc inc | cpp/numeric/random/dsc generate_canonical}}
{{dsc class | cpp/numeric/random/seed_seq | general-purpose bias-eliminating scrambled seed sequence generator | notes={{mark c++11}}}}

{{dsc end}}

===Synopsis===
{{source|1=
#include &lt;initializer_list&gt;
namespace std {
  // class template linear_congruential_engine
  template&lt;class UIntType, UIntType a, UIntType c, UIntType m&gt;
  class linear_congruential_engine;
  // class template mersenne_twister_engine
  template&lt;class UIntType, size_t w, size_t n, size_t m, size_t r,
           UIntType a, size_t u, UIntType d, size_t s,
           UIntType b, size_t t, UIntType c, size_t l, UIntType f&gt;
  class mersenne_twister_engine;
  // class template subtract_with_carry_engine
  template&lt;class UIntType, size_t w, size_t s, size_t r&gt;
  class subtract_with_carry_engine;
  // class template discard_block_engine
  template&lt;class Engine, size_t p, size_t r&gt;
  class discard_block_engine;
  // class template independent_bits_engine
  template&lt;class Engine, size_t w, class UIntType&gt;
  class independent_bits_engine;
  // class template shuffle_order_engine
  template&lt;class Engine, size_t k&gt;
  class shuffle_order_engine;
  // engines and engine adaptors with predefined parameters
  using minstd_rand0 = /*see description*/ ;
  using minstd_rand = /*see description*/ ;
  using mt19937 = /*see description*/ ;
  using mt19937_64 = /*see description*/ ;
  using ranlux24_base = /*see description*/ ;
  using ranlux48_base = /*see description*/ ;
  using ranlux24 = /*see description*/ ;
  using ranlux48 = /*see description*/ ;
  using knuth_b = /*see description*/ ;
  using default_random_engine = /*see description*/ ;
  // class random_device
  class random_device;

  // class seed_seq
  class seed_seq;
  // function template generate_canonical
  template&lt;class RealType, size_t bits, class URBG&gt;
  RealType generate_canonical(URBG&amp; g);
  // class template uniform_int_distribution
  template&lt;class IntType = int&gt;
  class uniform_int_distribution;
  // class template uniform_real_distribution
  template&lt;class RealType = double&gt;
  class uniform_real_distribution;
  // class bernoulli_distribution
  class bernoulli_distribution;
  // class template binomial_distribution
  template&lt;class IntType = int&gt;
  class binomial_distribution;
  // class template geometric_distribution
  template&lt;class IntType = int&gt;
  class geometric_distribution;
  // class template negative_binomial_distribution
  template&lt;class IntType = int&gt;
  class negative_binomial_distribution;
  // class template poisson_distribution
  template&lt;class IntType = int&gt;
  class poisson_distribution;
  // class template exponential_distribution
  template&lt;class RealType = double&gt;
  class exponential_distribution;
  // class template gamma_distribution
  template&lt;class RealType = double&gt;
  class gamma_distribution;
  // class template weibull_distribution
  template&lt;class RealType = double&gt;
  class weibull_distribution;
  // class template extreme_value_distribution
  template&lt;class RealType = double&gt;
  class extreme_value_distribution;
  // class template normal_distribution
  template&lt;class RealType = double&gt;
  class normal_distribution;
  // class template lognormal_distribution
  template&lt;class RealType = double&gt;
  class lognormal_distribution;
  // class template chi_squared_distribution
  template&lt;class RealType = double&gt;
  class chi_squared_distribution;
  // class template cauchy_distribution
  template&lt;class RealType = double&gt;
  class cauchy_distribution;
  // class template fisher_f_distribution
  template&lt;class RealType = double&gt;
  class fisher_f_distribution;
  // class template student_t_distribution
  template&lt;class RealType = double&gt;
  class student_t_distribution;
  // class template discrete_distribution
  template&lt;class IntType = int&gt;
  class discrete_distribution;
  // class template piecewise_constant_distribution
  template&lt;class RealType = double&gt;
  class piecewise_constant_distribution;
  // class template piecewise_linear_distribution
  template&lt;class RealType = double&gt;
  class piecewise_linear_distribution;
}
}}</text>
      <sha1>4zk2xe30m2naz0mm5aelxz3wdjcmrpj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/ratio</title>
    <ns>0</ns>
    <id>9747</id>
    <revision>
      <id>92148</id>
      <parentid>91201</parentid>
      <timestamp>2017-04-08T10:58:19Z</timestamp>
      <contributor>
        <ip>37.46.38.195</ip>
      </contributor>
      <comment>fix typo: Synopis -&gt; Synopsis</comment>
      <text xml:space="preserve" bytes="4507">{{cpp/header/title|ratio}}
{{cpp/header/navbar}}
This header is part of the [[cpp/numeric/ratio|compile-time rational arithmetic]] library.

{{dsc begin}}

{{dsc h1|Classes}}
{{dsc tclass | cpp/numeric/ratio/ratio | represents exact rational fraction}}

{{dsc h2|Arithmetic}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_add}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_subtract}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_multiply}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_divide}}

{{dsc h2|Comparison}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_equal}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_not_equal}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_less}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_less_equal}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_greater}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_greater_equal}}

{{dsc h2|Constants}}
{{dsc | {{tt|yocto}} | {{c|std::ratio&lt;1, 1000000000000000000000000&gt;}}, if {{lc|std::intmax_t}} can represent the denominator}}
{{dsc | {{tt|zepto}} | {{c|std::ratio&lt;1, 1000000000000000000000&gt;}}, if {{lc|std::intmax_t}} can represent the denominator}}
{{dsc | {{tt|atto}}  | {{c|std::ratio&lt;1, 1000000000000000000&gt;}}}}
{{dsc | {{tt|femto}} | {{c|std::ratio&lt;1, 1000000000000000&gt;}}}}
{{dsc | {{tt|pico}}  | {{c|std::ratio&lt;1, 1000000000000&gt;}}}}
{{dsc | {{tt|nano}}  | {{c|std::ratio&lt;1, 1000000000&gt;}}}}
{{dsc | {{tt|micro}} | {{c|std::ratio&lt;1, 1000000&gt;}}}}
{{dsc | {{tt|milli}} | {{c|std::ratio&lt;1, 1000&gt;}}}}
{{dsc | {{tt|centi}} | {{c|std::ratio&lt;1, 100&gt;}}}}
{{dsc | {{tt|deci}}  | {{c|std::ratio&lt;1, 10&gt;}}}}
{{dsc | {{tt|deca}}  | {{c|std::ratio&lt;10, 1&gt;}}}}
{{dsc | {{tt|hecto}} | {{c|std::ratio&lt;100, 1&gt;}}}}
{{dsc | {{tt|kilo}}  | {{c|std::ratio&lt;1000, 1&gt;}}}}
{{dsc | {{tt|mega}}  | {{c|std::ratio&lt;1000000, 1&gt;}}}}
{{dsc | {{tt|giga}}  | {{c|std::ratio&lt;1000000000, 1&gt;}}}}
{{dsc | {{tt|tera}}  | {{c|std::ratio&lt;1000000000000, 1&gt;}}}}
{{dsc | {{tt|peta}}  | {{c|std::ratio&lt;1000000000000000, 1&gt;}}}}
{{dsc | {{tt|exa}}   | {{c|std::ratio&lt;1000000000000000000, 1&gt;}}}}
{{dsc | {{tt|zetta}} | {{c|std::ratio&lt;1000000000000000000000, 1&gt;}}, if {{lc|std::intmax_t}} can represent the numerator}}
{{dsc | {{tt|yotta}} | {{c|std::ratio&lt;1000000000000000000000000, 1&gt;}}, if {{lc|std::intmax_t}} can represent the numerator}}
{{dsc end}}

===Synopsis===

{{source|

namespace std {

    //class template ratio
    template &lt;intmax_t N, intmax_t D {{=}} 1&gt;
    class ratio {
    public:
        typedef ratio&lt;num, den&gt; type;
        static constexpr intmax_t num;
        static constexpr intmax_t den;
    };
 
       
    // ratio arithmetic            
    template &lt;class R1, class   R2&gt; using   ratio_add      {{=}} /*ratio*/;
    template &lt;class R1, class   R2&gt; using   ratio_subtract {{=}} /*ratio*/;
    template &lt;class R1, class   R2&gt; using   ratio_multiply {{=}} /*ratio*/;
    template &lt;class R1, class   R2&gt; using   ratio_divide   {{=}} /*ratio*/;
                
    // ratio comparison            
    template &lt;class R1, class R2&gt; struct ratio_equal;           
    template &lt;class R1, class R2&gt; struct ratio_not_equal;           
    template &lt;class R1, class R2&gt; struct ratio_less;      
    template &lt;class R1, class R2&gt; struct ratio_less_equal;          
    template &lt;class R1, class R2&gt; struct ratio_greater;         
    template &lt;class R1, class R2&gt; struct ratio_greater_equal;  
    
    // convenience SI typedefs         
    typedef ratio&lt;1, 1000000000000000000000000&gt; yocto;
    typedef ratio&lt;1,    1000000000000000000000&gt; zepto;
    typedef ratio&lt;1,       1000000000000000000&gt; atto;   
    typedef ratio&lt;1,          1000000000000000&gt; femto;  
    typedef ratio&lt;1,             1000000000000&gt; pico;   
    typedef ratio&lt;1,                1000000000&gt; nano;   
    typedef ratio&lt;1,                   1000000&gt; micro;  
    typedef ratio&lt;1,                      1000&gt; milli;  
    typedef ratio&lt;1,                       100&gt; centi;  
    typedef ratio&lt;1,                        10&gt; deci;   
    typedef ratio&lt;                       10, 1&gt; deca;   
    typedef ratio&lt;                      100, 1&gt; hecto;  
    typedef ratio&lt;                     1000, 1&gt; kilo;   
    typedef ratio&lt;                  1000000, 1&gt; mega;   
    typedef ratio&lt;               1000000000, 1&gt; giga;   
    typedef ratio&lt;            1000000000000, 1&gt; tera;   
    typedef ratio&lt;         1000000000000000, 1&gt; peta;   
    typedef ratio&lt;      1000000000000000000, 1&gt; exa;    
    typedef ratio&lt;   1000000000000000000000, 1&gt; zetta;
    typedef ratio&lt;1000000000000000000000000, 1&gt; yotta;

}

}}

[[zh:cpp/header/ratio]]</text>
      <sha1>e1vdosrln6spbr2vngt2lq55hh4pfts</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/regex</title>
    <ns>0</ns>
    <id>9734</id>
    <revision>
      <id>65813</id>
      <parentid>61431</parentid>
      <timestamp>2013-10-08T18:52:36Z</timestamp>
      <contributor>
        <ip>199.87.84.206</ip>
      </contributor>
      <comment>sp: synopsis</comment>
      <text xml:space="preserve" bytes="30712">{{cpp/header/title|regex}}
{{cpp/header/navbar}}
This header is part of the [[cpp/regex|regular expressions]] library.

===Namespace {{c|std::regex_constants}}===

{{dsc begin}}
{{dsc h2|Types}}
{{dsc namespace | std::regex_constants }}
{{dsc inc | cpp/regex/dsc syntax_option_type}}
{{dsc inc | cpp/regex/dsc match_flag_type}}
{{dsc inc | cpp/regex/dsc error_type}}
{{dsc end}}
{{todo|list all constants}}



===Classes===

{{dsc begin}}
{{dsc inc | cpp/regex/dsc basic_regex }}
{{dsc inc | cpp/regex/dsc sub_match }}
{{dsc inc | cpp/regex/dsc match_results }}
{{dsc inc | cpp/regex/dsc regex_iterator }}
{{dsc inc | cpp/regex/dsc regex_token_iterator }}
{{dsc inc | cpp/regex/dsc regex_error }}
{{dsc inc | cpp/regex/dsc regex_traits }}
{{dsc end}}

===Functions===

{{dsc begin}}
{{dsc h2|Algorithm}}
{{dsc inc | cpp/regex/dsc regex_match }}
{{dsc inc | cpp/regex/dsc regex_search }}
{{dsc inc | cpp/regex/dsc regex_replace }}
{{dsc h2|Non-member operations}}
{{dsc inc | cpp/regex/basic_regex/dsc swap2}}
{{dsc inc | cpp/regex/sub_match/dsc operator_cmp}}
{{dsc tfun | cpp/regex/sub_match/operator_ltlt | title=operator&lt;&lt; | outputs the matched character subsequence}}
{{dsc inc | cpp/regex/match_results/dsc operator_cmp}}
{{dsc inc | cpp/regex/match_results/dsc swap2}}

{{dsc end}}


===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std {
    
    // regex constants:
    namespace regex_constants {
        enum error_type;
    } // namespace regex_constants
    
    // class regex_error:
    class regex_error;
    // class template regex_traits:
    template &lt;class charT&gt; struct regex_traits;
    // class template basic_regex:
    template &lt;class charT, class traits {{=}} regex_traits&lt;charT&gt; &gt; class basic_regex;
    
    typedef basic_regex&lt;char&gt; regex;
    typedef basic_regex&lt;wchar_t&gt; wregex;
    
    // basic_regex swap:
    template &lt;class charT, class traits&gt;
        void swap(basic_regex&lt;charT, traits&gt;&amp; e1, basic_regex&lt;charT, traits&gt;&amp; e2);
        
    // class template sub_match:
    template &lt;class BidirectionalIterator&gt; class sub_match;

    typedef sub_match&lt;const char*&gt;              csub_match;
    typedef sub_match&lt;const wchar_t*&gt;           wcsub_match;
    typedef sub_match&lt;string::const_iterator&gt;   ssub_match;
    typedef sub_match&lt;wstring::const_iterator&gt;  wssub_match;

    // sub_match non-member operators:
    template &lt;class BiIter&gt;
        bool operator{{=}}{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs, const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator!{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs, const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;(const sub_match&lt;BiIter&gt;&amp; lhs, const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs, const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs, const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;(const sub_match&lt;BiIter&gt;&amp; lhs, const sub_match&lt;BiIter&gt;&amp; rhs);
        
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator{{=}}{{=}}(
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator!{{=}}(
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&lt;(
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&gt;(
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&gt;{{=}}(
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&lt;{{=}}(
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);


    template &lt;class BiIter, class ST, class SA&gt;
        bool operator{{=}}{{=}}(
            const sub_match&lt;BiIter&gt;&amp; lhs,
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator!{{=}}(
            const sub_match&lt;BiIter&gt;&amp; lhs,
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&lt;(
            const sub_match&lt;BiIter&gt;&amp; lhs,
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&gt;(
            const sub_match&lt;BiIter&gt;&amp; lhs,
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&lt;{{=}}(
            const sub_match&lt;BiIter&gt;&amp; lhs,
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; rhs);
    template &lt;class BiIter, class ST, class SA&gt;
        bool operator&gt;{{=}}(
            const sub_match&lt;BiIter&gt;&amp; lhs,
            const basic_string&lt;
                typename iterator_traits&lt;BiIter&gt;::value_type, ST, SA&gt;&amp; rhs);
        
    template &lt;class BiIter&gt;
        bool operator{{=}}{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const* lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator!{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const* lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;(typename iterator_traits&lt;BiIter&gt;::value_type const* lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;(typename iterator_traits&lt;BiIter&gt;::value_type const* lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const* lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const* lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
        
    template &lt;class BiIter&gt;
        bool operator{{=}}{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const* rhs);
    template &lt;class BiIter&gt;
        bool operator!{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const* rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const* rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const* rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const* rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const* rhs);


    template &lt;class BiIter&gt;
        bool operator{{=}}{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator!{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;{{=}}(typename iterator_traits&lt;BiIter&gt;::value_type const&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;(typename iterator_traits&lt;BiIter&gt;::value_type const&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;(typename iterator_traits&lt;BiIter&gt;::value_type const&amp; lhs,
            const sub_match&lt;BiIter&gt;&amp; rhs);
        
    template &lt;class BiIter&gt;
        bool operator{{=}}{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator!{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;{{=}}(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&lt;(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const&amp; rhs);
    template &lt;class BiIter&gt;
        bool operator&gt;(const sub_match&lt;BiIter&gt;&amp; lhs,
            typename iterator_traits&lt;BiIter&gt;::value_type const&amp; rhs);
        
    template &lt;class charT, class ST, class BiIter&gt;
        basic_ostream&lt;charT, ST&gt;&amp;
        operator&lt;&lt;(basic_ostream&lt;charT, ST&gt;&amp; os, const sub_match&lt;BiIter&gt;&amp; m);
        
    // class template match_results:
    template &lt;class BidirectionalIterator,
              class Allocator {{=}} allocator&lt;sub_match&lt;BidirectionalIterator&gt; &gt; &gt;
        class match_results;
        
    typedef match_results&lt;const char*&gt;              cmatch;
    typedef match_results&lt;const wchar_t*&gt;           wcmatch;
    typedef match_results&lt;string::const_iterator&gt;   smatch;
    typedef match_results&lt;wstring::const_iterator&gt;  wsmatch;

    // match_results comparisons
    template &lt;class BidirectionalIterator, class Allocator&gt;
        bool operator{{=}}{{=}} (const match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m1,
                         const match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m2);
    template &lt;class BidirectionalIterator, class Allocator&gt;
        bool operator!{{=}} (const match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m1,
                         const match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m2);

    //  match_results swap:
    template &lt;class BidirectionalIterator, class Allocator&gt;
        void swap(match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m1,
                  match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m2);

    //  function template regex_match:
    template &lt;class BidirectionalIterator, class Allocator,
              class charT, class traits&gt;
        bool regex_match(BidirectionalIterator first, BidirectionalIterator last,
                         match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m,
                         const basic_regex&lt;charT, traits&gt;&amp; e,
                         regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class BidirectionalIterator, class charT, class traits&gt;
        bool regex_match(BidirectionalIterator first, BidirectionalIterator last,
                         const basic_regex&lt;charT, traits&gt;&amp; e,
                         regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class charT, class Allocator, class traits&gt;
        bool regex_match(const charT* str, match_results&lt;const charT*, Allocator&gt;&amp; m,
                         const basic_regex&lt;charT, traits&gt;&amp; e,
                         regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class ST, class SA, class Allocator, class charT, class traits&gt;
        bool regex_match(const basic_string&lt;charT, ST, SA&gt;&amp; s,
            match_results&lt;
                typename basic_string&lt;charT, ST, SA&gt;::const_iterator,
                Allocator&gt;&amp; m,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);
    template &lt;class charT, class traits&gt;
        bool regex_match(const charT* str,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);
    template &lt;class ST, class SA, class charT, class traits&gt;
        bool regex_match(const basic_string&lt;charT, ST, SA&gt;&amp; s,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);

    // function template regex_search:
    template &lt;class BidirectionalIterator, class Allocator,
              class charT, class traits&gt;
        bool regex_search(BidirectionalIterator first, BidirectionalIterator last,
            match_results&lt;BidirectionalIterator, Allocator&gt;&amp; m,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);
    template &lt;class BidirectionalIterator, class charT, class traits&gt;
        bool regex_search(BidirectionalIterator first, BidirectionalIterator last,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);
    template &lt;class charT, class Allocator, class traits&gt;
        bool regex_search(const charT* str,
            match_results&lt;const charT*, Allocator&gt;&amp; m,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);
    template &lt;class charT, class traits&gt;
        bool regex_search(const charT* str,
            const basic_regex&lt;charT, traits&gt;&amp; e,
                regex_constants::match_flag_type flags {{=}}
                    regex_constants::match_default);
    template &lt;class ST, class SA, class charT, class traits&gt;
        bool regex_search(const basic_string&lt;charT, ST, SA&gt;&amp; s,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);
    template &lt;class ST, class SA, class Allocator, class charT, class traits&gt;
        bool regex_search(const basic_string&lt;charT, ST, SA&gt;&amp; s,
            match_results&lt;
                typename basic_string&lt;charT, ST, SA&gt;::const_iterator,
                Allocator&gt;&amp; m,
            const basic_regex&lt;charT, traits&gt;&amp; e,
            regex_constants::match_flag_type flags {{=}}
                regex_constants::match_default);

    //  function template regex_replace:
    template &lt;class OutputIterator, class BidirectionalIterator,
              class traits, class charT, class ST, class SA&gt;
        OutputIterator
        regex_replace(  OutputIterator out,
                        BidirectionalIterator first, 
                        BidirectionalIterator last,
                        const basic_regex&lt;charT, traits&gt;&amp; e,
                        const basic_string&lt;charT, ST, SA&gt;&amp; fmt,
                        regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class OutputIterator, class BidirectionalIterator,
              class traits, class charT&gt;
        OutputIterator
        regex_replace(  OutputIterator out,
                        BidirectionalIterator first, 
                        BidirectionalIterator last,
                        const basic_regex&lt;charT, traits&gt;&amp; e,
                        const charT* fmt,
                        regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class traits, class charT, class ST, class SA,
              class FST, class FSA&gt;
        basic_string&lt;charT, ST, SA&gt;
        regex_replace(  const basic_string&lt;charT, ST, SA&gt;&amp; s,
                        const basic_regex&lt;charT, traits&gt;&amp; e,
                        const basic_string&lt;charT, FST, FSA&gt;&amp; fmt,
                        regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class traits, class charT, class ST, class SA&gt;
        basic_string&lt;charT, ST, SA&gt;
        regex_replace(  const basic_string&lt;charT, ST, SA&gt;&amp; s,
                        const basic_regex&lt;charT, traits&gt;&amp; e,
                        const charT* fmt,
                        regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class traits, class charT, class ST, class SA&gt;
        basic_string&lt;charT&gt;
        regex_replace(  const charT* s,
                        const basic_regex&lt;charT, traits&gt;&amp; e,
                        const basic_string&lt;charT, ST, SA&gt;&amp; fmt,
                        regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
    template &lt;class traits, class charT&gt;
        basic_string&lt;charT&gt;
        regex_replace(  const charT* s,
                        const basic_regex&lt;charT, traits&gt;&amp; e,
                        const charT* fmt,
                        regex_constants::match_flag_type flags {{=}}
                            regex_constants::match_default);
        
    // class template regex_iterator:
    template &lt;class BidirectionalIterator,
              class charT {{=}} typename iterator_traits&lt;
                    BidirectionalIterator&gt;::value_type,
              class traits {{=}} regex_traits&lt;charT&gt; &gt;
        class regex_iterator;
        
    typedef regex_iterator&lt;const char*&gt;             cregex_iterator;
    typedef regex_iterator&lt;const wchar_t*&gt;          wcregex_iterator;
    typedef regex_iterator&lt;string::const_iterator&gt;  sregex_iterator;
    typedef regex_iterator&lt;wstring::const_iterator&gt; wsregex_iterator;

    // class template regex_token_iterator:
    template &lt;class BidirectionalIterator,
              class charT {{=}} typename iterator_traits&lt;
                BidirectionalIterator&gt;::value_type,
              class traits {{=}} regex_traits&lt;charT&gt; &gt;
        class regex_token_iterator;

    typedef regex_token_iterator&lt;const char*&gt;               cregex_token_iterator;
    typedef regex_token_iterator&lt;const wchar_t*&gt;            wcregex_token_iterator;
    typedef regex_token_iterator&lt;string::const_iterator&gt;    scregex_token_iterator;
    typedef regex_token_iterator&lt;wstring::const_iterator&gt;   wscregex_token_iterator;


} // namespace std


}}


====Namespace {{c|std::regex_constants}}====
{{source|
namespace regex_constants {
    typedef /*T1*/ syntax_option_type;
    static constexpr syntax_option_type icase {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type nosubs {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type optimize {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type collate {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type ECMAScript {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type basic {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type extended {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type awk {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type grep {{=}} /*unspecified*/ ;
    static constexpr syntax_option_type egrep {{=}} /*unspecified*/ ;
    
    typedef /*T2*/ match_flag_type;
    static constexpr match_flag_type match_default {{=}} 0;
    static constexpr match_flag_type match_not_bol {{=}} /*unspecified*/ ;
    static constexpr match_flag_type match_not_eol {{=}} /*unspecified*/ ;
    static constexpr match_flag_type match_not_bow {{=}} /*unspecified*/ ;
    static constexpr match_flag_type match_not_eow {{=}} /*unspecified*/ ;
    static constexpr match_flag_type match_any {{=}} /*unspecified*/ ;
    static constexpr match_flag_type match_not_null {{=}} /*unspecified*/ ;
    static constexpr match_flag_type match_continuous {{=}} /*unspecified*/ ;
    static constexpr match_flag_type match_prev_avail {{=}} /*unspecified*/ ;
    static constexpr match_flag_type format_default {{=}} 0;
    static constexpr match_flag_type format_sed {{=}} /*unspecified*/ ;
    static constexpr match_flag_type format_no_copy {{=}} /*unspecified*/ ;
    static constexpr match_flag_type format_first_only {{=}} /*unspecified*/ ;

    typedef /*T3*/ error_type;
    static constexpr error_type error_collate {{=}} /*unspecified*/ ;
    static constexpr error_type error_ctype {{=}} /*unspecified*/ ;
    static constexpr error_type error_escape {{=}} /*unspecified*/ ;
    static constexpr error_type error_backref {{=}} /*unspecified*/ ;
    static constexpr error_type error_brack {{=}} /*unspecified*/ ;
    static constexpr error_type error_paren {{=}} /*unspecified*/ ;
    static constexpr error_type error_brace {{=}} /*unspecified*/ ;
    static constexpr error_type error_badbrace {{=}} /*unspecified*/ ;
    static constexpr error_type error_range {{=}} /*unspecified*/ ;
    static constexpr error_type error_space {{=}} /*unspecified*/ ;
    static constexpr error_type error_badrepeat {{=}} /*unspecified*/ ;
    static constexpr error_type error_complexity {{=}} /*unspecified*/ ;
    static constexpr error_type error_stack {{=}} /*unspecified*/ ;

}

}}

====Class {{lc|std::regex_error}}====
{{source|
class regex_error : public std::runtime_error {
public:
    explicit regex_error(regex_constants::error_type ecode);
    regex_constants::error_type code() const;
};

}}


====Class {{lc|std::regex_traits}}====
{{source|

template &lt;class charT&gt;
struct regex_traits {
public:
    typedef charT                           char_type;
    typedef std::basic_string&lt;char_type&gt;    string_type;
    typedef std::locale                     locale_type;
    typedef /*bitmask_type*/                char_class_type;
    
    regex_traits();
    static std::size_t length(const char_type* p);
    charT translate(charT c) const;
    charT translate_nocase(charT c) const;
    template &lt;class ForwardIterator&gt;
        string_type transform(ForwardIterator first, ForwardIterator last) const;
    template &lt;class ForwardIterator&gt;
        string_type transform_primary(
            ForwardIterator first, ForwardIterator last) const;
    template &lt;class ForwardIterator&gt;
        string_type lookup_collatename(
            ForwardIterator first, ForwardIterator last) const;
    template &lt;class ForwardIterator&gt;
        char_class_type lookup_classname(
            ForwardIterator first, ForwardIterator last, bool icase {{=}} false) const;
    bool isctype(charT c, char_class_type f) const;
    int value(charT ch, int radix) const;
    locale_type imbue(locale_type l);
    locale_type getloc()const;
};

}}

====Class {{lc|std::regex}}====
{{source|

template &lt;class charT,
    class traits {{=}} regex_traits&lt;charT&gt; &gt;
class basic_regex {
public:
    // types:
    typedef          charT                                  value_type;
    typedef          traits                                 traits_type;
    typedef typename traits::string_type                    string_type;
    typedef          regex_constants::syntax_option_type    flag_type;
    typedef typename traits::locale_type                    locale_type;
    
    //  constants:
    static constexpr regex_constants::syntax_option_type
        icase {{=}} regex_constants::icase;
    static constexpr regex_constants::syntax_option_type
        nosubs {{=}} regex_constants::nosubs;
    static constexpr regex_constants::syntax_option_type
        optimize {{=}} regex_constants::optimize;
    static constexpr regex_constants::syntax_option_type
        collate {{=}} regex_constants::collate;
    static constexpr regex_constants::syntax_option_type
        ECMAScript {{=}} regex_constants::ECMAScript;
    static constexpr regex_constants::syntax_option_type
        basic {{=}} regex_constants::basic;
    static constexpr regex_constants::syntax_option_type
        extended {{=}} regex_constants::extended;
    static constexpr regex_constants::syntax_option_type
        awk {{=}} regex_constants::awk;
    static constexpr regex_constants::syntax_option_type
        grep {{=}} regex_constants::grep;
    static constexpr regex_constants::syntax_option_type
        egrep {{=}} regex_constants::egrep;

    //construct/copy/destroy:
    basic_regex();
    explicit basic_regex(const charT* p,
        flag_type f {{=}} regex_constants::ECMAScript);
    basic_regex(const charT* p, size_t len, flag_type f {{=}} regex_constants::ECMAScript);
    basic_regex(const basic_regex&amp;);
    basic_regex(basic_regex&amp;&amp;) noexcept;
    template &lt;class ST, class SA&gt;
        explicit basic_regex(const basic_string&lt;charT, ST, SA&gt;&amp; p,
            flag_type f {{=}} regex_constants::ECMAScript);
    template &lt;class ForwardIterator&gt;
        basic_regex(ForwardIterator first, ForwardIterator last,
            flag_type f {{=}} regex_constants::ECMAScript);
    basic_regex(initializer_list&lt;charT&gt;,
        flag_type {{=}} regex_constants::ECMAScript);

    ~basic_regex();
    basic_regex&amp; operator{{=}}(const basic_regex&amp;);
    basic_regex&amp; operator{{=}}(basic_regex&amp;&amp;) noexcept;
    basic_regex&amp; operator{{=}}(const charT* ptr);
    basic_regex&amp; operator{{=}}(initializer_list&lt;charT&gt; il);
    template &lt;class ST, class SA&gt;
        basic_regex&amp; operator{{=}}(const basic_string&lt;charT, ST, SA&gt;&amp; p);
        
    //  assign:
    basic_regex&amp; assign(const basic_regex&amp; that);
    basic_regex&amp; assign(basic_regex&amp;&amp; that) noexcept;
    basic_regex&amp; assign(const charT* ptr,
        flag_type f {{=}} regex_constants::ECMAScript);
    basic_regex&amp; assign(const charT* p, size_t len, flag_type f);
    template &lt;class string_traits, class A&gt;
        basic_regex&amp; assign(const basic_string&lt;charT, string_traits, A&gt;&amp; s,
            flag_type f {{=}} regex_constants::ECMAScript);
    template &lt;class InputIterator&gt;
        basic_regex&amp; assign(InputIterator first, InputIterator last,
            flag_type f {{=}} regex_constants::ECMAScript);
    basic_regex&amp; assign(initializer_list&lt;charT&gt;,
        flag_type {{=}} regex_constants::ECMAScript);

    // const operations:
    unsigned mark_count() const;
    flag_type flags() const;
    
    // locale:
    locale_type imbue(locale_type loc);
    locale_type getloc() const;
    
    // swap:
    void swap(basic_regex&amp;);
};

}}

====Class {{lc|std::sub_match}}====
{{source|

template &lt;class BidirectionalIterator&gt;
class sub_match : public std::pair&lt;BidirectionalIterator, BidirectionalIterator&gt; {
public:
    typedef typename iterator_traits&lt;BidirectionalIterator&gt;::
        value_type                                              value_type;
    typedef typename iterator_traits&lt;BidirectionalIterator&gt;::
    difference_type                                             difference_type;
    typedef BidirectionalIterator                               iterator;
    typedef basic_string&lt;value_type&gt;                            string_type;
    
    bool matched;
    
    constexpr sub_match();
    difference_type length() const;
    operator string_type() const;
    string_type str() const;
    
    int compare(const sub_match&amp; s) const;
    int compare(const string_type&amp; s) const;
    int compare(const value_type* s) const;
};

}}

====Class {{lc|std::match_results}}====
{{source|

template &lt;class BidirectionalIterator,
            class Allocator {{=}} allocator&lt;sub_match&lt;BidirectionalIterator&gt; &gt;
class match_results {
public:
    typedef sub_match&lt;BidirectionalIterator&gt;                    value_type;
    typedef const value_type&amp;                                   const_reference;
    typedef const_reference                                     reference;
    typedef /*implementation-defined*/                          const_iterator;
    typedef const_iterator                                      iterator;
    typedef typename 
        iterator_traits&lt;BidirectionalIterator&gt;::difference_type difference_type;
    typedef typename allocator_traits&lt;Allocator&gt;::size_type     size_type;
    typedef Allocator                                           allocator_type;
    typedef typename 
        iterator_traits&lt;BidirectionalIterator&gt;::value_type      char_type;
    typedef basic_string&lt;char_type&gt;                             string_type;
    
    // construct/copy/destroy:
    explicit match_results(const Allocator&amp; a {{=}} Allocator());
    match_results(const match_results&amp; m);
    match_results(match_results&amp;&amp; m) noexcept;
    match_results&amp; operator{{=}}(const match_results&amp; m);
    match_results&amp; operator{{=}}(match_results&amp;&amp; m);
    ~match_results();
    
    // state:
    bool ready() const;
    
    // size:
    size_type size() const;
    size_type max_size() const;
    bool empty() const;

    // element access:
    difference_type length(size_type sub {{=}} 0) const;
    difference_type position(size_type sub {{=}} 0) const;
    string_type str(size_type sub {{=}} 0) const;
    const_reference operator[](size_type n) const;

    const_reference prefix() const;
    const_reference suffix() const;
    const_iterator  begin() const;
    const_iterator  end() const;
    const_iterator  cbegin() const;
    const_iterator  cend() const;

    //  format:
    template &lt;class OutputIter&gt;
        OutputIter
        format(OutputIter out,
            const char_type* fmt_first, const char_type* fmt_last,
            regex_constants::match_flag_type flags {{=}}
            regex_constants::format_default) const;
    template &lt;class OutputIter, class ST, class SA&gt;
        OutputIter
        format(OutputIter out,
            const basic_string&lt;char_type, ST, SA&gt;&amp; fmt,
            regex_constants::match_flag_type flags {{=}}
            regex_constants::format_default) const;
    template &lt;class ST, class SA&gt;
        basic_string&lt;char_type, ST, SA&gt;
        format(const basic_string&lt;char_type, ST, SA&gt;&amp; fmt,
            regex_constants::match_flag_type flags {{=}}
            regex_constants::format_default) const;
    string_type
        format(const char_type* fmt,
            regex_constants::match_flag_type flags {{=}}
            regex_constants::format_default) const;
        
    // allocator:
    allocator_type get_allocator() const;
    
    // swap:
    void swap(match_results&amp; that);
    
};

}}</text>
      <sha1>jp4snl3difi13npiiboz6q1ytpvx51u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/scoped allocator</title>
    <ns>0</ns>
    <id>12857</id>
    <revision>
      <id>88933</id>
      <parentid>63999</parentid>
      <timestamp>2016-12-20T20:48:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>n4618 updates</comment>
      <text xml:space="preserve" bytes="4616">{{cpp/header/title|scoped_allocator}}
{{cpp/header/navbar}}
This header is part of the [[cpp/memory|dynamic memory management]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/memory/dsc scoped_allocator_adaptor}}
{{dsc h1|Functions}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc operator_cmp}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {

    template &lt;class OuterAlloc, class... InnerAlloc&gt;
    class scoped_allocator_adaptor;

    template &lt;class OuterA1, class OuterA2, class... InnerAllocs&gt;
    bool operator==(const scoped_allocator_adaptor&lt;OuterA1,
                                                   InnerAllocs...&gt;&amp; a,
                    const scoped_allocator_adaptor&lt;OuterA2,
                                                   InnerAllocs...&gt;&amp; b) noexcept;
    template &lt;class OuterA1, class OuterA2, class... InnerAllocs&gt;
    bool operator!=(const scoped_allocator_adaptor&lt;OuterA1,
                                                   InnerAllocs...&gt;&amp; a,
                    const scoped_allocator_adaptor&lt;OuterA2,
                                                   InnerAllocs...&gt;&amp; b) noexcept;
}
}}

====Class template {{lc|std::scoped_allocator_adaptor}}====
{{source|1=
namespace std {
  template &lt;class OuterAlloc, class... InnerAllocs&gt;
  class scoped_allocator_adaptor : public OuterAlloc {
  private:
    using OuterTraits = allocator_traits&lt;OuterAlloc&gt;; // exposition only
    scoped_allocator_adaptor&lt;InnerAllocs...&gt; inner; // exposition only
  public:
    using outer_allocator_type = OuterAlloc;
    using inner_allocator_type = /* see definition */ ;
    using value_type = typename OuterTraits::value_type;
    using size_type = typename OuterTraits::size_type;
    using difference_type = typename OuterTraits::difference_type;
    using pointer = typename OuterTraits::pointer;
    using const_pointer = typename OuterTraits::const_pointer;
    using void_pointer = typename OuterTraits::void_pointer;
    using const_void_pointer = typename OuterTraits::const_void_pointer;
    using propagate_on_container_copy_assignment = /* see definition */ ;
    using propagate_on_container_move_assignment = /* see definition */ ;
    using propagate_on_container_swap = /* see definition */ ;
    using is_always_equal = /* see definition */ ;
    template &lt;class Tp&gt;
    struct rebind {
      using other = scoped_allocator_adaptor&lt;
                      OuterTraits::template rebind_alloc&lt;Tp&gt;,
                      InnerAllocs...&gt;;
    };
    scoped_allocator_adaptor();
    template &lt;class OuterA2&gt;
    scoped_allocator_adaptor(OuterA2&amp;&amp; outerAlloc,
                             const InnerAllocs&amp;... innerAllocs) noexcept;
    scoped_allocator_adaptor(const scoped_allocator_adaptor&amp; other) noexcept;
    scoped_allocator_adaptor(scoped_allocator_adaptor&amp;&amp; other) noexcept;
    template &lt;class OuterA2&gt;
    scoped_allocator_adaptor(const scoped_allocator_adaptor&lt;
                                     OuterA2,
                                     InnerAllocs...&gt;&amp; other) noexcept;
    template &lt;class OuterA2&gt;
    scoped_allocator_adaptor(scoped_allocator_adaptor&lt;
                               OuterA2,
                               InnerAllocs...&gt;&amp;&amp; other) noexcept;
    scoped_allocator_adaptor&amp; operator=(const scoped_allocator_adaptor&amp;) = default;
    scoped_allocator_adaptor&amp; operator=(scoped_allocator_adaptor&amp;&amp;) = default;
    ~scoped_allocator_adaptor();
    inner_allocator_type&amp; inner_allocator() noexcept;
    const inner_allocator_type&amp; inner_allocator() const noexcept;
    outer_allocator_type&amp; outer_allocator() noexcept;
    const outer_allocator_type&amp; outer_allocator() const noexcept;
    pointer allocate(size_type n);
    pointer allocate(size_type n, const_void_pointer hint);
    void deallocate(pointer p, size_type n);
    size_type max_size() const;
    template &lt;class T, class... Args&gt;
    void construct(T* p, Args&amp;&amp;... args);
    template &lt;class T1, class T2, class... Args1, class... Args2&gt;
    void construct(pair&lt;T1, T2&gt;* p, piecewise_construct_t,
                   tuple&lt;Args1...&gt; x, tuple&lt;Args2...&gt; y);
    template &lt;class T1, class T2&gt;
    void construct(pair&lt;T1, T2&gt;* p);
    template &lt;class T1, class T2, class U, class V&gt;
    void construct(pair&lt;T1, T2&gt;* p, U&amp;&amp; x, V&amp;&amp; y);
    template &lt;class T1, class T2, class U, class V&gt;
    void construct(pair&lt;T1, T2&gt;* p, const pair&lt;U, V&gt;&amp; x);
    template &lt;class T1, class T2, class U, class V&gt;
    void construct(pair&lt;T1, T2&gt;* p, pair&lt;U, V&gt;&amp;&amp; x);
    template &lt;class T&gt;
    void destroy(T* p);
    scoped_allocator_adaptor select_on_container_copy_construction() const;
  };
}
}}</text>
      <sha1>awihmh7k234uq7tak2ds3hy2e9hlm3t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/set</title>
    <ns>0</ns>
    <id>9753</id>
    <revision>
      <id>57530</id>
      <parentid>49590</parentid>
      <timestamp>2013-06-01T05:55:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="11590">{{cpp/header/title|set}}
{{cpp/header/navbar}}

This header is part of the [[cpp/container|containers]] library.


{{dsc begin}}
{{dsc h1|Includes}}
{{dsc | {{header|initializer_list}} {{mark c++11}} }}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc set}}
{{dsc inc | cpp/container/dsc multiset}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | set}}
{{dsc inc | cpp/container/dsc swap2 | set}}
{{dsc inc | cpp/container/dsc operator_cmp | multiset}}
{{dsc inc | cpp/container/dsc swap2 | multiset}}
{{dsc end}}

===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std
{
    template &lt;class Key, class Compare {{=}} less&lt;Key&gt;,
              class Allocator {{=}} allocator&lt;Key&gt; &gt;
        class set;

    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator{{==}}(const set&lt;Key,Compare,Allocator&gt;&amp; x,
                        const set&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&lt; (const set&lt;Key,Compare,Allocator&gt;&amp; x,
                        const set&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator!{{=}}(const set&lt;Key,Compare,Allocator&gt;&amp; x,
                        const set&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&gt; (const set&lt;Key,Compare,Allocator&gt;&amp; x,
                        const set&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&gt;{{=}}(const set&lt;Key,Compare,Allocator&gt;&amp; x,
                        const set&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&lt;{{=}}(const set&lt;Key,Compare,Allocator&gt;&amp; x,
                        const set&lt;Key,Compare,Allocator&gt;&amp; y);
                    
    template &lt;class Key, class Compare, class Allocator&gt;
        void swap(set&lt;Key,Compare,Allocator&gt;&amp; x,
                  set&lt;Key,Compare,Allocator&gt;&amp; y);
              
    template &lt;class Key, class Compare {{=}} less&lt;Key&gt;,
             class Allocator {{=}} allocator&lt;Key&gt; &gt;
        class multiset;

    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator{{==}}(const multiset&lt;Key,Compare,Allocator&gt;&amp;
                        const multiset&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&lt; (const multiset&lt;Key,Compare,Allocator&gt;&amp; x,
                        const multiset&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator!{{=}}(const multiset&lt;Key,Compare,Allocator&gt;&amp; x,
                        const multiset&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&gt; (const multiset&lt;Key,Compare,Allocator&gt;&amp; x,
                        const multiset&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&gt;{{=}}(const multiset&lt;Key,Compare,Allocator&gt;&amp; x,
                        const multiset&lt;Key,Compare,Allocator&gt;&amp; y);
    template &lt;class Key, class Compare, class Allocator&gt;
        bool operator&lt;{{=}}(const multiset&lt;Key,Compare,Allocator&gt;&amp; x,
                        const multiset&lt;Key,Compare,Allocator&gt;&amp; y);
                        
    template &lt;class Key, class Compare, class Allocator&gt;
        void swap(multiset&lt;Key,Compare,Allocator&gt;&amp; x,
                  multiset&lt;Key,Compare,Allocator&gt;&amp; y);
}
 
}}

====Class {{lc|std::set}}====
{{source|

template &lt;class Key, class Compare {{=}} less&lt;Key&gt;,
class Allocator {{=}} allocator&lt;Key&gt; &gt;
class set
{
public:
    // types:
    typedef Key key_type;
    typedef Key value_type;
    typedef Compare key_compare;
    typedef Compare value_compare;
    typedef Allocator allocator_type;
    typedef value_type&amp; reference;
    typedef const value_type&amp; const_reference;
    typedef /*implementation-defined*/ iterator;
    typedef /*implementation-defined*/ const_iterator;
    typedef /*implementation-defined*/ size_type;
    typedef /*implementation-defined*/ difference_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt; reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt; const_reverse_iterator;
    
    // construct/copy/destroy:
    explicit set(const Compare&amp; comp {{=}} Compare(),
                 const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
    set(InputIterator first, InputIterator last,
        const Compare&amp; comp {{=}} Compare(), const Allocator&amp; {{=}} Allocator());
    set(const set&lt;Key,Compare,Allocator&gt;&amp; x);
    set(set&lt;Key,Compare,Allocator&gt;&amp;&amp; x);
    explicit set(const Allocator&amp;);
    set(const set&amp;, const Allocator&amp;);
    set(set&amp;&amp;, const Allocator&amp;);
    set(initializer_list&lt;value_type&gt;,
        const Compare&amp; {{=}} Compare(),
        const Allocator&amp; {{=}} Allocator());
    ~set();
    
    set&lt;Key,Compare,Allocator&gt;&amp; operator{{=}} (const set&lt;Key,Compare,Allocator&gt;&amp; x);
    set&lt;Key,Compare,Allocator&gt;&amp; operator{{=}} (set&lt;Key,Compare,Allocator&gt;&amp;&amp; x);
    set&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    allocator_type get_allocator() const noexcept;
    
    // iterators:
    iterator        begin() noexcept;
    const_iterator  begin() const noexcept;
    iterator        end() noexcept;
    const_iterator  end() const noexcept;
 
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
 
    const_iterator          cbegin() const noexcept;
    const_iterator          cend() const noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
 
    // capacity:
    bool        empty() const noexcept;
    size_type   size() const noexcept;
    size_type   max_size() const noexcept;
 
    // modifiers:
    template &lt;class... Args&gt; pair&lt;iterator, bool&gt; emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; 
        iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
        
    pair&lt;iterator,bool&gt; insert(const value_type&amp; x);
    pair&lt;iterator,bool&gt; insert(value_type&amp;&amp; x);
    iterator insert(const_iterator position, const value_type&amp; x);
    iterator insert(const_iterator position, value_type&amp;&amp; x);
    template &lt;class InputIterator&gt;
    void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; x);
    iterator erase(const_iterator first, const_iterator last);
    
    void swap(set&lt;Key,Compare,Allocator&gt;&amp;);
    void clear() noexcept;
    
    // observers:
    key_compare   key_comp() const;
    value_compare value_comp() const;
    
    // set operations:
    iterator       find(const key_type&amp; x);
    const_iterator find(const key_type&amp; x) const;
    size_type      count(const key_type&amp; x) const;
    iterator       lower_bound(const key_type&amp; x);
    const_iterator lower_bound(const key_type&amp; x) const;
    iterator       upper_bound(const key_type&amp; x);
    const_iterator upper_bound(const key_type&amp; x) const;
    pair&lt;iterator,iterator&gt; equal_range(const key_type&amp; x);
    pair&lt;const_iterator,const_iterator&gt; equal_range(const key_type&amp; x) const;
};
 
}}

====Class {{lc|std::multiset}}====
{{source|

template &lt;class Key, class Compare {{=}} less&lt;Key&gt;,
class Allocator {{=}} allocator&lt;Key&gt; &gt;
class multiset
{
public:
    // types:
    typedef Key key_type;
    typedef Key value_type;
    typedef Compare key_compare;
    typedef Compare value_compare;
    typedef Allocator allocator_type;
    typedef value_type&amp; reference;
    typedef const value_type&amp; const_reference;
    typedef /*implementation-defined*/ iterator;
    typedef /*implementation-defined*/ const_iterator;
    typedef /*implementation-defined*/ size_type;
    typedef /*implementation-defined*/ difference_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt; reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt; const_reverse_iterator;
    
    // construct/copy/destroy:
    explicit multiset(const Compare&amp; comp {{=}} Compare(),
                 const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
    multiset(InputIterator first, InputIterator last,
        const Compare&amp; comp {{=}} Compare(), const Allocator&amp; {{=}} Allocator());
    multiset(const multiset&lt;Key,Compare,Allocator&gt;&amp; x);
    multiset(multiset&lt;Key,Compare,Allocator&gt;&amp;&amp; x);
    explicit multiset(const Allocator&amp;);
    multiset(const multiset&amp;, const Allocator&amp;);
    multiset(multiset&amp;&amp;, const Allocator&amp;);
    multiset(initializer_list&lt;value_type&gt;,
        const Compare&amp; {{=}} Compare(),
        const Allocator&amp; {{=}} Allocator());
    ~multiset();
    
    multiset&lt;Key,Compare,Allocator&gt;&amp; operator{{=}} (const multiset&lt;Key,Compare,Allocator&gt;&amp; x);
    multiset&lt;Key,Compare,Allocator&gt;&amp; operator{{=}} (multiset&lt;Key,Compare,Allocator&gt;&amp;&amp; x);
    multiset&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    allocator_type get_allocator() const noexcept;
    
    // iterators:
    iterator        begin() noexcept;
    const_iterator  begin() const noexcept;
    iterator        end() noexcept;
    const_iterator  end() const noexcept;
 
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
 
    const_iterator          cbegin() const noexcept;
    const_iterator          cend() const noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
 
    // capacity:
    bool        empty() const noexcept;
    size_type   size() const noexcept;
    size_type   max_size() const noexcept;
 
    // modifiers:
    template &lt;class... Args&gt; pair&lt;iterator, bool&gt; emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; 
        iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
        
    pair&lt;iterator,bool&gt; insert(const value_type&amp; x);
    pair&lt;iterator,bool&gt; insert(value_type&amp;&amp; x);
    iterator insert(const_iterator position, const value_type&amp; x);
    iterator insert(const_iterator position, value_type&amp;&amp; x);
    template &lt;class InputIterator&gt;
    void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; x);
    iterator erase(const_iterator first, const_iterator last);
    
    void swap(multiset&lt;Key,Compare,Allocator&gt;&amp;);
    void clear() noexcept;
    
    // observers:
    key_compare   key_comp() const;
    value_compare value_comp() const;
    
    // multiset operations:
    iterator       find(const key_type&amp; x);
    const_iterator find(const key_type&amp; x) const;
    size_type      count(const key_type&amp; x) const;
    iterator       lower_bound(const key_type&amp; x);
    const_iterator lower_bound(const key_type&amp; x) const;
    iterator       upper_bound(const key_type&amp; x);
    const_iterator upper_bound(const key_type&amp; x) const;
    pair&lt;iterator,iterator&gt; equal_range(const key_type&amp; x);
    pair&lt;const_iterator,const_iterator&gt; equal_range(const key_type&amp; x) const;
};
 
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/shared mutex</title>
    <ns>0</ns>
    <id>12862</id>
    <revision>
      <id>78694</id>
      <parentid>78689</parentid>
      <timestamp>2015-06-03T15:30:00Z</timestamp>
      <contributor>
        <username>Blastofftek</username>
        <id>3389</id>
      </contributor>
      <comment>+handle_type</comment>
      <text xml:space="preserve" bytes="3606">{{cpp/header/title|shared_mutex}}
{{cpp/header/navbar}}
This header is part of the [[cpp/thread|thread support]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/thread/dsc shared_mutex}}
{{dsc inc | cpp/thread/dsc shared_timed_mutex}}
{{dsc inc | cpp/thread/dsc shared_lock}}
{{dsc h1|Functions}}
{{dsc inc | cpp/thread/shared_lock/dsc swap2}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
    class shared_mutex;
    class shared_timed_mutex;

    template &lt;class Mutex&gt; class shared_lock;

    template &lt;class Mutex&gt;
    void swap(shared_lock&lt;Mutex&gt;&amp; x, shared_lock&lt;Mutex&gt;&amp; y) noexcept;
}
}}

====Class {{lc|std::shared_mutex}}====
{{source|1=
class shared_mutex {
 public:
    typedef /*implementation-defined*/ native_handle_type;

    shared_mutex();
    ~shared_mutex();
    shared_mutex(const shared_mutex&amp;) = delete;
    shared_mutex&amp; operator=(const shared_mutex&amp;) = delete;

    // Exclusive ownership
    void lock(); // blocking
    bool try_lock();
    void unlock();

    // Shared ownership
    void lock_shared(); // blocking
    bool try_lock_shared();
    void unlock_shared();

    // Getters
    native_handle_type native_handle();
};
}}

====Class {{lc|std::shared_timed_mutex}}====
{{source|1=
class shared_timed_mutex {
 public:
    shared_timed_mutex();
    ~shared_timed_mutex();
    shared_timed_mutex(const shared_timed_mutex&amp;) = delete;
    shared_timed_mutex&amp; operator=(const shared_timed_mutex&amp;) = delete;

    // Exclusive ownership
    void lock(); // blocking
    bool try_lock();
    template &lt;class Rep, class Period&gt;
    bool try_lock_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Clock, class Duration&gt;
    bool try_lock_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    void unlock();

    // Shared ownership
    void lock_shared(); // blocking
    bool try_lock_shared();
    template &lt;class Rep, class Period&gt;
    bool try_lock_shared_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Clock, class Duration&gt;
    bool try_lock_shared_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    void unlock_shared();
};
}}

====Class {{lc|std::shared_lock}}====
{{source|1=
template &lt;class Mutex&gt;
class shared_lock {
 public:
    typedef Mutex mutex_type;

    shared_lock() noexcept;
    explicit shared_lock(mutex_type&amp; m); // blocking
    shared_lock(mutex_type&amp; m, defer_lock_t) noexcept;
    shared_lock(mutex_type&amp; m, try_to_lock_t);
    shared_lock(mutex_type&amp; m, adopt_lock_t);
    template &lt;class Clock, class Duration&gt;
    shared_lock(mutex_type&amp; m,
    const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    template &lt;class Rep, class Period&gt;
    shared_lock(mutex_type&amp; m,
    const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    ~shared_lock();
    shared_lock(shared_lock const&amp;) = delete;
    shared_lock&amp; operator=(shared_lock const&amp;) = delete;
    shared_lock(shared_lock&amp;&amp; u) noexcept;
    shared_lock&amp; operator=(shared_lock&amp;&amp; u) noexcept;

    void lock(); // blocking
    bool try_lock();
    template &lt;class Rep, class Period&gt;
    bool try_lock_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);
    template &lt;class Clock, class Duration&gt;
    bool try_lock_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
    void unlock();

    // Setters
    void swap(shared_lock&amp; u) noexcept;
    mutex_type* release() noexcept;

    // Getters
    bool owns_lock() const noexcept;
    explicit operator bool () const noexcept;
    mutex_type* mutex() const noexcept;

 private:
    mutex_type* pm; // exposition only
    bool owns; // exposition only
};
}}</text>
      <sha1>ccuby6oqev464d4hbd5yte25yf20b1r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/sstream</title>
    <ns>0</ns>
    <id>12855</id>
    <revision>
      <id>63997</id>
      <timestamp>2013-08-06T02:03:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="9146">{{cpp/header/title|sstream}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io|Input/Output]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc tclass | cpp/io/basic_stringbuf | implements raw string device}}
{{dsc tclass | cpp/io/basic_istringstream | implements high-level string stream input operations}}
{{dsc tclass | cpp/io/basic_ostringstream | implements high-level string stream output operations}}
{{dsc tclass | cpp/io/basic_stringstream | implements high-level string stream input/output operations}}
{{dsc h1|Typedefs}}
{{dsc | {{tt|stringbuf}} | {{c|basic_stringbuf&lt;char&gt;}}}}
{{dsc | {{tt|wstringbuf}} | {{c|basic_stringbuf&lt;wchar_t&gt;}}}}
{{dsc | {{tt|istringstream}} | {{c|basic_istringstream&lt;char&gt;}}}}
{{dsc | {{tt|wistringstream}} | {{c|basic_istringstream&lt;wchar_t&gt;}}}}
{{dsc | {{tt|ostringstream}} | {{c|basic_ostringstream&lt;char&gt;}}}}
{{dsc | {{tt|wostringstream}} | {{c|basic_ostringstream&lt;wchar_t&gt;}}}}
{{dsc | {{tt|stringstream}} | {{c|basic_stringstream&lt;char&gt;}}}}
{{dsc | {{tt|wstringstream}} | {{c|basic_stringstream&lt;wchar_t&gt;}}}}
{{dsc h1|Functions}}
{{dsc inc | cpp/io/basic_stringbuf/dsc swap2}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_istringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_istringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_istringstream}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {

    template &lt;class charT,
              class traits = char_traits&lt;charT&gt;,
              class Allocator = allocator&lt;charT&gt; &gt;
        class basic_stringbuf;
    typedef basic_stringbuf&lt;char&gt; stringbuf;
    typedef basic_stringbuf&lt;wchar_t&gt; wstringbuf;
    template &lt;class charT, class traits, class Allocator&gt;
        void swap(basic_stringbuf&lt;charT, traits, Allocator&gt;&amp; x,
                  basic_stringbuf&lt;charT, traits, Allocator&gt;&amp; y);

    template &lt;class charT,
              class traits = char_traits&lt;charT&gt;,
              class Allocator = allocator&lt;charT&gt; &gt;
        class basic_istringstream;
    typedef basic_istringstream&lt;char&gt; istringstream;
    typedef basic_istringstream&lt;wchar_t&gt; wistringstream;
    template &lt;class charT, class traits, class Allocator&gt;
        void swap(basic_istringstream&lt;charT, traits, Allocator&gt;&amp; x,
                  basic_istringstream&lt;charT, traits, Allocator&gt;&amp; y);

    template &lt;class charT,
              class traits = char_traits&lt;charT&gt;,
              class Allocator = allocator&lt;charT&gt; &gt;
        class basic_ostringstream;
    typedef basic_ostringstream&lt;char&gt; ostringstream;
    typedef basic_ostringstream&lt;wchar_t&gt; wostringstream;
    template &lt;class charT, class traits, class Allocator&gt;
        void swap(basic_ostringstream&lt;charT, traits, Allocator&gt;&amp; x,
                  basic_ostringstream&lt;charT, traits, Allocator&gt;&amp; y);

    template &lt;class charT,
              class traits = char_traits&lt;charT&gt;,
              class Allocator = allocator&lt;charT&gt; &gt;
        class basic_stringstream;
    typedef basic_stringstream&lt;char&gt; stringstream;
    typedef basic_stringstream&lt;wchar_t&gt; wstringstream;
    template &lt;class charT, class traits, class Allocator&gt;
        void swap(basic_stringstream&lt;charT, traits, Allocator&gt;&amp; x,
                  basic_stringstream&lt;charT, traits, Allocator&gt;&amp; y);
}
}}

====Class {{lc|std::basic_stringbuf}}====
{{source|1=
template &lt;class charT,
          class traits = char_traits&lt;charT&gt;,
          class Allocator = allocator&lt;charT&gt; &gt;
class basic_stringbuf : public basic_streambuf&lt;charT,traits&gt; {
 public:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;
    typedef Allocator allocator_type;

    // Constructors:
    explicit basic_stringbuf(ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    explicit basic_stringbuf(const basic_string&lt;charT,traits,Allocator&gt;&amp; str,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    basic_stringbuf(const basic_stringbuf&amp; rhs) = delete;
    basic_stringbuf(basic_stringbuf&amp;&amp; rhs);

    // Assign and swap:
    basic_stringbuf&amp; operator=(const basic_stringbuf&amp; rhs) = delete;
    basic_stringbuf&amp; operator=(basic_stringbuf&amp;&amp; rhs);
    void swap(basic_stringbuf&amp; rhs);

    // Get and set:
    basic_string&lt;charT,traits,Allocator&gt; str() const;
    void str(const basic_string&lt;charT,traits,Allocator&gt;&amp; s);

 protected:
    // Overridden virtual functions:
    virtual int_type underflow();
    virtual int_type pbackfail(int_type c = traits::eof());
    virtual int_type overflow (int_type c = traits::eof());
    virtual basic_streambuf&lt;charT,traits&gt;* setbuf(charT*, streamsize);
    virtual pos_type seekoff(off_type off, ios_base::seekdir way,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    virtual pos_type seekpos(pos_type sp,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);

 private:
    ios_base::openmode mode; // exposition only
};
}}

====Class {{lc|std::basic_istringstream}}====
{{source|1=
template &lt;class charT,
          class traits = char_traits&lt;charT&gt;,
          class Allocator = allocator&lt;charT&gt; &gt;
class basic_istringstream : public basic_istream&lt;charT,traits&gt; {
 public:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;
    typedef Allocator allocator_type;

    // Constructors:
    explicit basic_istringstream(ios_base::openmode which = ios_base::in);
    explicit basic_istringstream(const basic_string&lt;charT,traits,Allocator&gt;&amp; str,
                                 ios_base::openmode which = ios_base::in);
    basic_istringstream(const basic_istringstream&amp; rhs) = delete;
    basic_istringstream(basic_istringstream&amp;&amp; rhs);

    // Assign and swap:
    basic_istringstream&amp; operator=(const basic_istringstream&amp; rhs) = delete;
    basic_istringstream&amp; operator=(basic_istringstream&amp;&amp; rhs);
    void swap(basic_istringstream&amp; rhs);

    // Members:
    basic_stringbuf&lt;charT,traits,Allocator&gt;* rdbuf() const;
    basic_string&lt;charT,traits,Allocator&gt; str() const;
    void str(const basic_string&lt;charT,traits,Allocator&gt;&amp; s);

 private:
    basic_stringbuf&lt;charT,traits,Allocator&gt; sb; // exposition only
};
}}

====Class {{lc|std::basic_ostringstream}}====
{{source|1=
template &lt;class charT,
          class traits = char_traits&lt;charT&gt;,
          class Allocator = allocator&lt;charT&gt; &gt;
class basic_ostringstream : public basic_ostream&lt;charT,traits&gt; {
 public:
    // types:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;
    typedef Allocator allocator_type;

    // Constructors/destructor:
    explicit basic_ostringstream(ios_base::openmode which = ios_base::out);
    explicit basic_ostringstream(const basic_string&lt;charT,traits,Allocator&gt;&amp; str,
                                 ios_base::openmode which = ios_base::out);
     basic_ostringstream(const basic_ostringstream&amp; rhs) = delete;
     basic_ostringstream(basic_ostringstream&amp;&amp; rhs);

    // Assign/swap:
    basic_ostringstream&amp; operator=(const basic_ostringstream&amp; rhs) = delete;
    basic_ostringstream&amp; operator=(basic_ostringstream&amp;&amp; rhs);
    void swap(basic_ostringstream&amp; rhs);

    // Members:
    basic_stringbuf&lt;charT,traits,Allocator&gt;* rdbuf() const;
    basic_string&lt;charT,traits,Allocator&gt; str() const;
    void str(const basic_string&lt;charT,traits,Allocator&gt;&amp; s);

 private:
    basic_stringbuf&lt;charT,traits,Allocator&gt; sb; // exposition only
};
}}

====Class {{lc|std::basic_stringstream}}====
{{source|1=
template &lt;class charT,
          class traits = char_traits&lt;charT&gt;,
          class Allocator = allocator&lt;charT&gt; &gt;
class basic_stringstream : public basic_iostream&lt;charT,traits&gt; {
 public:
    // types:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;
    typedef Allocator allocator_type;

    // constructors/destructor
    explicit basic_stringstream(ios_base::openmode which = ios_base::out{{!}}ios_base::in);
    explicit basic_stringstream(const basic_string&lt;charT,traits,Allocator&gt;&amp; str,
                                ios_base::openmode which = ios_base::out{{!}}ios_base::in);
    basic_stringstream(const basic_stringstream&amp; rhs) = delete;
    basic_stringstream(basic_stringstream&amp;&amp; rhs);

    // Assign/swap:
    basic_stringstream&amp; operator=(const basic_stringstream&amp; rhs) = delete;
    basic_stringstream&amp; operator=(basic_stringstream&amp;&amp; rhs);
    void swap(basic_stringstream&amp; rhs);

    // Members:
    basic_stringbuf&lt;charT,traits,Allocator&gt;* rdbuf() const;
    basic_string&lt;charT,traits,Allocator&gt; str() const;
    void str(const basic_string&lt;charT,traits,Allocator&gt;&amp; str);

 private:
    basic_stringbuf&lt;charT, traits&gt; sb; // exposition only
};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/stack</title>
    <ns>0</ns>
    <id>12848</id>
    <revision>
      <id>63989</id>
      <parentid>63988</parentid>
      <timestamp>2013-08-05T23:58:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>no std:: inside std</comment>
      <text xml:space="preserve" bytes="3124">{{cpp/header/title|stack}}
{{cpp/header/navbar}}
This header is part of the [[cpp/container|containers]] library.
{{dsc begin}}
{{dsc h1|Includes}}
{{dsc|{{header|initializer_list}}{{mark c++11}}}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc stack}}
{{dsc inc | cpp/container/dsc uses_allocator | stack}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | stack}}
{{dsc inc | cpp/container/dsc swap2 | stack}}
{{dsc end}}

===Synopsis===

{{source|1=

#include &lt;initializer_list&gt;

namespace std {
    template &lt;class T, class Container = deque&lt;T&gt; &gt; class stack;

    template &lt;class T, class Container&gt;
        bool operator==(const stack&lt;T, Container&gt;&amp; x,const stack&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator!=(const stack&lt;T, Container&gt;&amp; x,const stack&lt;T, Container&gt;&amp; y);

    template &lt;class T, class Container&gt;
        bool operator&lt; (const stack&lt;T, Container&gt;&amp; x,const stack&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator&gt; (const stack&lt;T, Container&gt;&amp; x,const stack&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator&gt;=(const stack&lt;T, Container&gt;&amp; x,const stack&lt;T, Container&gt;&amp; y);
    template &lt;class T, class Container&gt;
        bool operator&lt;=(const stack&lt;T, Container&gt;&amp; x,const stack&lt;T, Container&gt;&amp; y);

    template &lt;class T, class Container&gt;
        void swap(stack&lt;T, Container&gt;&amp; x, stack&lt;T, Container&gt;&amp; y)
            noexcept(noexcept(x.swap(y)));

    template &lt;class T, class Container, class Alloc&gt;
        struct uses_allocator&lt;stack&lt;T, Container&gt;, Alloc&gt; :
             uses_allocator&lt;Container, Alloc&gt;::type { };
}
}}

====Class {{lc|std::stack}}====
{{source|1=
template &lt;class T, class Container = std::deque&lt;T&gt; &gt;
class stack {
 public:
    typedef typename Container::value_type value_type;
    typedef typename Container::reference reference;
    typedef typename Container::const_reference const_reference;
    typedef typename Container::size_type size_type;
    typedef Container container_type;

 protected:
    Container c;

 public:
    explicit stack(const Container&amp;);
    explicit stack(Container&amp;&amp; = Container());
    template &lt;class Alloc&gt; explicit stack(const Alloc&amp;);
    template &lt;class Alloc&gt; stack(const Container&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; stack(Container&amp;&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; stack(const stack&amp;, const Alloc&amp;);
    template &lt;class Alloc&gt; stack(stack&amp;&amp;, const Alloc&amp;);

    bool empty() const {
        return c.empty();
    }
    size_type size() const {
        return c.size();
    }
    reference top() {
        return c.back();
    }
    const_reference top() const {
        return c.back();
    }
    void push(const value_type&amp; x) {
        c.push_back(x);
    }
    void push(value_type&amp;&amp; x) {
        c.push_back(std::move(x));
    }
    template &lt;class... Args&gt; void emplace(Args&amp;&amp;... args) {
        c.emplace_back(std::forward&lt;Args&gt;(args)...);
    }
    void pop() {
        c.pop_back();
    }
    void swap(stack&amp; s) noexcept(noexcept(swap(c, s.c))) {
        using std::swap;
        swap(c, s.c);
    }
};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/stdexcept</title>
    <ns>0</ns>
    <id>9690</id>
    <revision>
      <id>87948</id>
      <parentid>87946</parentid>
      <timestamp>2016-10-14T14:10:13Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 87946 by [[Special:Contributions/113.88.83.28|113.88.83.28]] ([[User talk:113.88.83.28|talk]])</comment>
      <text xml:space="preserve" bytes="2953">{{cpp/header/title|stdexcept}}
{{cpp/header/navbar}}

This header is part of the [[cpp/error|error handling]] library.

===Classes===
{{dsc begin}}
{{dsc class | cpp/error/logic_error | exception class to indicate violations of logical preconditions or class invariants}}
{{dsc class | cpp/error/invalid_argument | exception class to report invalid arguments}}
{{dsc class | cpp/error/domain_error | exception class to report domain errors}}
{{dsc class | cpp/error/length_error | exception class to report attempts to exceed maximum allowed size}}
{{dsc class | cpp/error/out_of_range | exception class to report arguments outside of expected range}}
{{dsc class | cpp/error/runtime_error | exception class to indicate conditions only detectable at run time}}
{{dsc class | cpp/error/range_error | exception class to report range errors in internal computations}}
{{dsc class | cpp/error/overflow_error | exception class to report arithmetic overflows}}
{{dsc class | cpp/error/underflow_error | exception class to report arithmetic underflows}}
{{dsc end}}

===Synopsis===
{{source|

namespace std {
    class logic_error;
        class domain_error;
        class invalid_argument;
        class length_error;
        class out_of_range;
    class runtime_error;
        class range_error;
        class overflow_error;
        class underflow_error;
}

}}

====Classes====
{{source|

class logic_error : public exception {
    public:
        explicit logic_error(const string&amp; what_arg);
        explicit logic_error(const char* what_arg);
};

class domain_error : public logic_error {
    public:
        explicit domain_error(const string&amp; what_arg);
        explicit domain_error(const char* what_arg);
};


class invalid_argument : public logic_error {
    public:
        explicit invalid_argument(const string&amp; what_arg);
        explicit invalid_argument(const char* what_arg);
};


class length_error : public logic_error {
    public:
        explicit length_error(const string&amp; what_arg);
        explicit length_error(const char* what_arg);
};


class out_of_range : public logic_error {
    public:
        explicit out_of_range(const string&amp; what_arg);
        explicit out_of_range(const char* what_arg);
};

class runtime_error : public exception {
    public:
        explicit runtime_error(const string&amp; what_arg);
        explicit runtime_error(const char* what_arg);
};

class range_error : public runtime_error {
    public:
        explicit range_error(const string&amp; what_arg);
        explicit range_error(const char* what_arg);
};

class overflow_error : public runtime_error {
    public:
        explicit overflow_error(const string&amp; what_arg);
        explicit overflow_error(const char* what_arg);
};

class underflow_error : public runtime_error {
    public:
        explicit underflow_error(const string&amp; what_arg);
        explicit underflow_error(const char* what_arg);
};

}}

===See Also===
* {{lc|std::exception}}</text>
      <sha1>jb3w5a9l361suk2yqsg56h9vd77leap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/streambuf</title>
    <ns>0</ns>
    <id>12854</id>
    <revision>
      <id>63996</id>
      <timestamp>2013-08-06T01:32:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3309">{{cpp/header/title|streambuf}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io|Input/Output]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc tclass | cpp/io/basic_streambuf | abstracts a raw device}}
{{dsc h1|Typedefs}}
{{dsc | {{tt|streambuf}} | {{c|basic_streambuf&lt;char&gt;}}}}
{{dsc | {{tt|wstreambuf}} | {{c|basic_streambuf&lt;wchar_t&gt;}}}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {

    template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
    class basic_streambuf;

    typedef basic_streambuf&lt;char&gt; streambuf;
    typedef basic_streambuf&lt;wchar_t&gt; wstreambuf;
}
}}

====Class {{lc|std::basic_streambuf}}====
{{source|1=
template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;
class basic_streambuf {
 public:
    // types:
    typedef charT char_type;
    typedef typename traits::int_type int_type;
    typedef typename traits::pos_type pos_type;
    typedef typename traits::off_type off_type;
    typedef traits traits_type;

    virtual ~basic_streambuf();

    // locales:
    locale pubimbue(const locale&amp; loc);
    locale getloc() const;

    // buffer and positioning:
    basic_streambuf&lt;char_type,traits&gt;*
    pubsetbuf(char_type* s, streamsize n);
    pos_type pubseekoff(off_type off, ios_base::seekdir way,
                        ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    pos_type pubseekpos(pos_type sp,
                        ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    int pubsync();

    // Get area:
    streamsize in_avail();
    int_type snextc();
    int_type sbumpc();
    int_type sgetc();
    streamsize sgetn(char_type* s, streamsize n);

    // Putback:
    int_type sputbackc(char_type c);
    int_type sungetc();

    // Put area:
    int_type sputc(char_type c);
    streamsize sputn(const char_type* s, streamsize n);

 protected:
    basic_streambuf();
    basic_streambuf(const basic_streambuf&amp; rhs);
    basic_streambuf&amp; operator=(const basic_streambuf&amp; rhs);
    void swap(basic_streambuf&amp; rhs);

    // Get area:
    char_type* eback() const;
    char_type* gptr() const;
    char_type* egptr() const;
    void gbump(int n);
    void setg(char_type* gbeg, char_type* gnext, char_type* gend);

    // Put area:
    char_type* pbase() const;
    char_type* pptr() const;
    char_type* epptr() const;
    void pbump(int n);
    void setp(char_type* pbeg, char_type* pend);

    // virtual functions:
    // Locales:
    virtual void imbue(const locale&amp; loc);

    // Buffer management and positioning:
    virtual basic_streambuf&lt;char_type,traits&gt;* setbuf(char_type* s, streamsize n);
    virtual pos_type seekoff(off_type off, ios_base::seekdir way,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    virtual pos_type seekpos(pos_type sp,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    virtual int sync();

    // Get area:
    virtual streamsize showmanyc();
    virtual streamsize xsgetn(char_type* s, streamsize n);
    virtual int_type underflow();
    virtual int_type uflow();

    // Putback:
    virtual int_type pbackfail(int_type c = traits::eof());

    // Put area:
    virtual streamsize xsputn(const char_type* s, streamsize n);
    virtual int_type overflow (int_type c = traits::eof());
};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/string</title>
    <ns>0</ns>
    <id>9652</id>
    <revision>
      <id>92059</id>
      <parentid>90144</parentid>
      <timestamp>2017-04-03T21:21:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>updated synopsis to n4660 (not fixing formatting to avoid horizontal wrap because I need to write a script for that at this point)</comment>
      <text xml:space="preserve" bytes="28558">{{cpp/header/title|string}}
{{cpp/header/navbar}}

This header is part of the [[cpp/string|strings]] library.

===Includes===
{{dsc begin}}
{{dsc | {{header|initializer_list}} | {{mark since c++11}} }}
{{dsc end}}

===Classes===
{{dsc begin}}
{{dsc hitem | Name | Description}}
{{dsc| {{lc|std::char_traits}} | Class Template which describes properties of a character type {{mark tclass}} }}
{{dsc| {{c|std::char_traits&lt;char&gt;}} | {{mark ptclass}} }}
{{dsc| {{c|std::char_traits&lt;wchar_t&gt;}} | {{mark ptclass}} }}
{{dsc| {{c|std::char_traits&lt;char16_t&gt;}} {{mark c++11}} | {{mark ptclass}} }}
{{dsc| {{c|std::char_traits&lt;char32_t&gt;}} {{mark c++11}} | {{mark ptclass}} }}

{{dsc| {{lc|std::basic_string}} | Class template representing a text string object {{mark tclass}} }}
{{dsc| {{lc|std::string}} | {{c|std::basic_string&lt;char&gt;}} {{mark typedef}} }}
{{dsc | {{lc|std::wstring}} | {{c|std::basic_string&lt;wchar_t&gt;}} {{mark typedef}} }}
{{dsc | {{lc|std::u16string}} {{mark c++11}} | {{c|std::basic_string&lt;char16_t&gt;}}  {{mark typedef}} }}
{{dsc | {{lc|std::u32string}} {{mark c++11}} | {{c|std::basic_string&lt;char32_t&gt;}} {{mark typedef}}}}

{{dsc | {{c|std::hash&lt;std::string&gt;}} {{mark c++11}} | {{mark ptclass}} }}
{{dsc | {{c|std::hash&lt;std::u16string&gt;}} {{mark c++11}} | {{mark ptclass}} }}
{{dsc | {{c|std::hash&lt;std::u32string&gt;}} {{mark c++11}} | {{mark ptclass}}}}
{{dsc | {{c|std::hash&lt;std::wstring&gt;}}  {{mark c++11}} | {{mark ptclass}}}}
{{dsc end}}

===Functions===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc operator+}}
{{dsc inc | cpp/string/basic_string/dsc operator_cmp}}
{{dsc inc | cpp/string/basic_string/dsc swap2}}

{{dsc h2 | Input/output}}
{{dsc inc | cpp/string/basic_string/dsc operator_ltltgtgt}}
{{dsc inc | cpp/string/basic_string/dsc getline}}

{{dsc h2 | Numeric conversions}}
{{dsc inc | cpp/string/basic_string/dsc stol}}
{{dsc inc | cpp/string/basic_string/dsc stoul}}
{{dsc inc | cpp/string/basic_string/dsc stof}}
{{dsc inc | cpp/string/basic_string/dsc to_string}}
{{dsc inc | cpp/string/basic_string/dsc to_wstring}}
{{dsc end}}

===Literals===
{{dsc begin}}
{{dsc namespace | std::literals::string_literals | inline=true }}
{{dsc inc | cpp/string/basic_string/dsc operator&quot;&quot;s}}
{{dsc end}}

===Synopsis===
{{source|1=
#include &lt;initializer_list&gt;
namespace std {
  // character traits
  template&lt;class charT&gt; struct char_traits;
  template&lt;&gt; struct char_traits&lt;char&gt;;
  template&lt;&gt; struct char_traits&lt;char16_t&gt;;
  template&lt;&gt; struct char_traits&lt;char32_t&gt;;
  template&lt;&gt; struct char_traits&lt;wchar_t&gt;;
  // basic_string
  template&lt;class charT, class traits = char_traits&lt;charT&gt;, class Allocator = allocator&lt;charT&gt;&gt;
  class basic_string;
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; lhs,
basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(const charT* lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(const charT* lhs, basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(charT lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(charT lhs, basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const charT* rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; lhs,
const charT* rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, charT rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_string&lt;charT, traits, Allocator&gt; operator+(basic_string&lt;charT, traits, Allocator&gt;&amp;&amp; lhs, charT rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator==(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs) noexcept;
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator==(const charT* lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator==(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const charT* rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator!=(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs) noexcept;
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator!=(const charT* lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator!=(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const charT* rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&lt; (const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs) noexcept;
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&lt; (const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const charT* rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&lt; (const charT* lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&gt; (const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs) noexcept;
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&gt; (const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const charT* rhs);
template&lt;class charT, class traits, class Allocator&gt;
  bool operator&gt; (const charT* lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&lt;=(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs) noexcept;
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&lt;=(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const charT* rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&lt;=(const charT* lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&gt;=(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs) noexcept;
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&gt;=(const basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, const charT* rhs);
  template&lt;class charT, class traits, class Allocator&gt;
  bool operator&gt;=(const charT* lhs, const basic_string&lt;charT, traits, Allocator&gt;&amp; rhs);
  // swap
  template&lt;class charT, class traits, class Allocator&gt;
  void swap(basic_string&lt;charT, traits, Allocator&gt;&amp; lhs, basic_string&lt;charT, traits, Allocator&gt;&amp; rhs) noexcept(noexcept(lhs.swap(rhs)));
  // inserters and extractors
  template&lt;class charT, class traits, class Allocator&gt;
  basic_istream&lt;charT, traits&gt;&amp; operator&gt;&gt;(basic_istream&lt;charT, traits&gt;&amp; is, basic_string&lt;charT, traits, Allocator&gt;&amp; str);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_ostream&lt;charT, traits&gt;&amp; operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp; os, const basic_string&lt;charT, traits, Allocator&gt;&amp; str);
  template&lt;class charT, class traits, class Allocator&gt; basic_istream&lt;charT, traits&gt;&amp; getline(basic_istream&lt;charT, traits&gt;&amp; is, basic_string&lt;charT, traits, Allocator&gt;&amp; str,
charT delim);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_istream&lt;charT, traits&gt;&amp; getline(basic_istream&lt;charT, traits&gt;&amp;&amp; is, basic_string&lt;charT, traits, Allocator&gt;&amp; str, charT delim);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_istream&lt;charT, traits&gt;&amp; getline(basic_istream&lt;charT, traits&gt;&amp; is, basic_string&lt;charT, traits, Allocator&gt;&amp; str);
  template&lt;class charT, class traits, class Allocator&gt;
  basic_istream&lt;charT, traits&gt;&amp; getline(basic_istream&lt;charT, traits&gt;&amp;&amp; is, basic_string&lt;charT, traits, Allocator&gt;&amp; str);
  // basic_string typedef names
  using string = basic_string&lt;char&gt;;
  using u16string = basic_string&lt;char16_t&gt;;
  using u32string = basic_string&lt;char32_t&gt;;
  using wstring = basic_string&lt;wchar_t&gt;;
  // numeric conversions
  int stoi(const string&amp; str, size_t* idx = 0, int base = 10);
  long stol(const string&amp; str, size_t* idx = 0, int base = 10);
  unsigned long stoul(const string&amp; str, size_t* idx = 0, int base = 10);
  long long stoll(const string&amp; str, size_t* idx = 0, int base = 10);
  unsigned long long stoull(const string&amp; str, size_t* idx = 0, int base = 10);
  float stof(const string&amp; str, size_t* idx = 0);
  double stod(const string&amp; str, size_t* idx = 0);
  long double stold(const string&amp; str, size_t* idx = 0);
  string to_string(int val);
  string to_string(unsigned val);
  string to_string(long val);
  string to_string(unsigned long val);
  string to_string(long long val);
  string to_string(unsigned long long val);
  string to_string(float val);
  string to_string(double val);
  string to_string(long double val);
  int stoi(const wstring&amp; str, size_t* idx = 0, int base = 10);
  long stol(const wstring&amp; str, size_t* idx = 0, int base = 10);
  unsigned long stoul(const wstring&amp; str, size_t* idx = 0, int base = 10);
  long long stoll(const wstring&amp; str, size_t* idx = 0, int base = 10);
  unsigned long long stoull(const wstring&amp; str, size_t* idx = 0, int base = 10);
  float stof(const wstring&amp; str, size_t* idx = 0);
  double stod(const wstring&amp; str, size_t* idx = 0);
  long double stold(const wstring&amp; str, size_t* idx = 0);
  wstring to_wstring(int val);
  wstring to_wstring(unsigned val);
  wstring to_wstring(long val);
  wstring to_wstring(unsigned long val);
  wstring to_wstring(long long val);
  wstring to_wstring(unsigned long long val);
  wstring to_wstring(float val);
  wstring to_wstring(double val);
  wstring to_wstring(long double val);
  // hash support
  template&lt;class T&gt; struct hash;
  template&lt;&gt; struct hash&lt;string&gt;;
  template&lt;&gt; struct hash&lt;u16string&gt;;
  template&lt;&gt; struct hash&lt;u32string&gt;;
  template&lt;&gt; struct hash&lt;wstring&gt;;
  namespace pmr {
    template &lt;class charT, class traits = char_traits&lt;charT&gt;&gt;
    using basic_string = std::basic_string&lt;charT, traits, polymorphic_allocator&lt;charT&gt;&gt;;
    using string = basic_string&lt;char&gt;;
    using u16string = basic_string&lt;char16_t&gt;;
    using u32string = basic_string&lt;char32_t&gt;;
    using wstring = basic_string&lt;wchar_t&gt;;
  }
  inline namespace literals {
    inline namespace string_literals {
      // suffix for basic_string literals
      string operator&quot;&quot;s(const char* str, size_t len);
      u16string operator&quot;&quot;s(const char16_t* str, size_t len);
      u32string operator&quot;&quot;s(const char32_t* str, size_t len);
      wstring operator&quot;&quot;s(const wchar_t* str, size_t len);
    }
  }
}
}}

====Class template {{lc|std::char_traits}}====
{{source|1=
namespace std {
  template&lt;&gt; struct char_traits&lt;char&gt; {
    using char_type = char;
    using int_type = int;
    using off_type = streamoff;
    using pos_type = streampos;
    using state_type = mbstate_t;
    static constexpr void assign(char_type&amp; c1, const char_type&amp; c2) noexcept;
    static constexpr bool eq(char_type c1, char_type c2) noexcept;
    static constexpr bool lt(char_type c1, char_type c2) noexcept;
    static constexpr int compare(const char_type* s1, const char_type* s2, size_t n);
    static constexpr size_t length(const char_type* s);
    static constexpr const char_type* find(const char_type* s, size_t n, const char_type&amp; a);
    static char_type* move(char_type* s1, const char_type* s2, size_t n);
    static char_type* copy(char_type* s1, const char_type* s2, size_t n);
    static char_type* assign(char_type* s, size_t n, char_type a);
    static constexpr int_type not_eof(int_type c) noexcept;
    static constexpr char_type to_char_type(int_type c) noexcept;
    static constexpr int_type to_int_type(char_type c) noexcept;
    static constexpr bool eq_int_type(int_type c1, int_type c2) noexcept;
    static constexpr int_type eof() noexcept;
  };

  template&lt;&gt; struct char_traits&lt;char16_t&gt; {
    using char_type = char16_t;
    using int_type = uint_least16_t;
    using off_type = streamoff;
    using pos_type = u16streampos;
    using state_type = mbstate_t;
    static constexpr void assign(char_type&amp; c1, const char_type&amp; c2) noexcept;
    static constexpr bool eq(char_type c1, char_type c2) noexcept;
    static constexpr bool lt(char_type c1, char_type c2) noexcept;
    static constexpr int compare(const char_type* s1, const char_type* s2, size_t n);
    static constexpr size_t length(const char_type* s);
    static constexpr const char_type* find(const char_type* s, size_t n, const char_type&amp; a);
    static char_type* move(char_type* s1, const char_type* s2, size_t n);
    static char_type* copy(char_type* s1, const char_type* s2, size_t n);
    static char_type* assign(char_type* s, size_t n, char_type a);
    static constexpr int_type not_eof(int_type c) noexcept;
    static constexpr char_type to_char_type(int_type c) noexcept;
    static constexpr int_type to_int_type(char_type c) noexcept;
    static constexpr bool eq_int_type(int_type c1, int_type c2) noexcept;
    static constexpr int_type eof() noexcept;
  };

  template&lt;&gt; struct char_traits&lt;char32_t&gt; {
    using char_type = char32_t;
    using int_type = uint_least32_t;
    using off_type = streamoff;
    using pos_type = u32streampos;
    using state_type = mbstate_t;
    static constexpr void assign(char_type&amp; c1, const char_type&amp; c2) noexcept;
    static constexpr bool eq(char_type c1, char_type c2) noexcept;
    static constexpr bool lt(char_type c1, char_type c2) noexcept;
    static constexpr int compare(const char_type* s1, const char_type* s2, size_t n);
    static constexpr size_t length(const char_type* s);
    static constexpr const char_type* find(const char_type* s, size_t n, const char_type&amp; a);
    static char_type* move(char_type* s1, const char_type* s2, size_t n);
    static char_type* copy(char_type* s1, const char_type* s2, size_t n);
    static char_type* assign(char_type* s, size_t n, char_type a);
    static constexpr int_type not_eof(int_type c) noexcept;
    static constexpr char_type to_char_type(int_type c) noexcept;
    static constexpr int_type to_int_type(char_type c) noexcept;
    static constexpr bool eq_int_type(int_type c1, int_type c2) noexcept;
    static constexpr int_type eof() noexcept;
  };

  template&lt;&gt; struct char_traits&lt;wchar_t&gt; {
    using char_type = wchar_t;
    using int_type = wint_t;
    using off_type = streamoff;
    using pos_type = wstreampos;
    using state_type = mbstate_t;
    static constexpr void assign(char_type&amp; c1, const char_type&amp; c2) noexcept;
    static constexpr bool eq(char_type c1, char_type c2) noexcept;
    static constexpr bool lt(char_type c1, char_type c2) noexcept;
    static constexpr int compare(const char_type* s1, const char_type* s2, size_t n);
    static constexpr size_t length(const char_type* s);
    static constexpr const char_type* find(const char_type* s, size_t n, const char_type&amp; a);
    static char_type* move(char_type* s1, const char_type* s2, size_t n);
    static char_type* copy(char_type* s1, const char_type* s2, size_t n);
    static char_type* assign(char_type* s, size_t n, char_type a);
    static constexpr int_type not_eof(int_type c) noexcept;
    static constexpr char_type to_char_type(int_type c) noexcept;
    static constexpr int_type to_int_type(char_type c) noexcept;
    static constexpr bool eq_int_type(int_type c1, int_type c2) noexcept;
    static constexpr int_type eof() noexcept;
  };
}
}}

====Class template {{lc|std::basic_string}}====
{{source|1=
namespace std {
  template&lt;class charT, class traits = char_traits&lt;charT&gt;, class Allocator = allocator&lt;charT&gt;&gt;
  class basic_string {
  public:
    // types:
    using traits_type = traits;
    using value_type = charT;
    using allocator_type = Allocator;
    using size_type = typename allocator_traits&lt;Allocator&gt;::size_type;
    using difference_type = typename allocator_traits&lt;Allocator&gt;::difference_type;
    using pointer = typename allocator_traits&lt;Allocator&gt;::pointer;
    using const_pointer = typename allocator_traits&lt;Allocator&gt;::const_pointer;
    using reference = value_type&amp;;
    using const_reference = const value_type&amp;;
    using iterator = /* see definition */ ;
    using const_iterator = /* see definition */ ;
    using reverse_iterator = std::reverse_iterator&lt;iterator&gt;;
    using const_reverse_iterator = std::reverse_iterator&lt;const_iterator&gt;;
    static const size_type npos = -1;
    // construct/copy/destroy
    basic_string() noexcept(noexcept(Allocator())) : basic_string(Allocator()) { }
    explicit basic_string(const Allocator&amp; a) noexcept;
    basic_string(const basic_string&amp; str);
    basic_string(basic_string&amp;&amp; str) noexcept;
    basic_string(const basic_string&amp; str, size_type pos, const Allocator&amp; a = Allocator());
    basic_string(const basic_string&amp; str, size_type pos, size_type n, const Allocator&amp; a = Allocator());
    template&lt;class T&gt;
    basic_string(const T&amp; t, size_type pos, size_type n, const Allocator&amp; a = Allocator());
    explicit basic_string(basic_string_view&lt;charT, traits&gt; sv, const Allocator&amp; a = Allocator());
    basic_string(const charT* s, size_type n, const Allocator&amp; a = Allocator());
    basic_string(const charT* s, const Allocator&amp; a = Allocator());
    basic_string(size_type n, charT c, const Allocator&amp; a = Allocator());
    template&lt;class InputIterator&gt;
    basic_string(InputIterator begin, InputIterator end, const Allocator&amp; a = Allocator());
    basic_string(initializer_list&lt;charT&gt;, const Allocator&amp; = Allocator());
    basic_string(const basic_string&amp;, const Allocator&amp;);
    basic_string(basic_string&amp;&amp;, const Allocator&amp;);
    ~basic_string();
    basic_string&amp; operator=(const basic_string&amp; str);
    basic_string&amp; operator=(basic_string&amp;&amp; str) noexcept(allocator_traits&lt;Allocator&gt;::propagate_on_container_move_assignment::value {{!!}}
allocator_traits&lt;Allocator&gt;::is_always_equal::value);
    basic_string&amp; operator=(basic_string_view&lt;charT, traits&gt; sv);
    basic_string&amp; operator=(const charT* s);
    basic_string&amp; operator=(charT c);
    basic_string&amp; operator=(initializer_list&lt;charT&gt;);
    // iterators
    iterator begin() noexcept;
    const_iterator begin() const noexcept;
    iterator end() noexcept;
    const_iterator end() const noexcept;
    reverse_iterator rbegin() noexcept;
    const_reverse_iterator rbegin() const noexcept;
    reverse_iterator rend() noexcept;
    const_reverse_iterator rend() const noexcept;
    const_iterator cbegin() const noexcept;
    const_iterator cend() const noexcept;
    const_reverse_iterator crbegin() const noexcept;
    const_reverse_iterator crend() const noexcept;
    // capacity
    size_type size() const noexcept;
    size_type length() const noexcept;
    size_type max_size() const noexcept;
    void resize(size_type n, charT c);
    void resize(size_type n);
    size_type capacity() const noexcept;
    void reserve(size_type res_arg = 0);
    void shrink_to_fit();
    void clear() noexcept;
    bool empty() const noexcept;
    // element access
    const_reference operator[](size_type pos) const;
    reference operator[](size_type pos);
    const_reference at(size_type n) const;
    reference at(size_type n);
    const charT&amp; front() const;
    charT&amp; front();
    const charT&amp; back() const;
    charT&amp; back();
    // modifiers
    basic_string&amp; operator+=(const basic_string&amp; str);
    basic_string&amp; operator+=(basic_string_view&lt;charT, traits&gt; sv);
    basic_string&amp; operator+=(const charT* s);
    basic_string&amp; operator+=(charT c);
    basic_string&amp; operator+=(initializer_list&lt;charT&gt;);
    basic_string&amp; append(const basic_string&amp; str);
    basic_string&amp; append(const basic_string&amp; str, size_type pos, size_type n = npos);
    basic_string&amp; append(basic_string_view&lt;charT, traits&gt; sv);
    template&lt;class T&gt;
    basic_string&amp; append(const T&amp; t, size_type pos, size_type n = npos);
    basic_string&amp; append(const charT* s, size_type n);
    basic_string&amp; append(const charT* s);
    basic_string&amp; append(size_type n, charT c);
    template&lt;class InputIterator&gt;
    basic_string&amp; append(InputIterator first, InputIterator last);
    basic_string&amp; append(initializer_list&lt;charT&gt;);
    void push_back(charT c);
    basic_string&amp; assign(const basic_string&amp; str);
    basic_string&amp; assign(basic_string&amp;&amp; str) noexcept(allocator_traits&lt;Allocator&gt;::propagate_on_container_move_assignment::value {{!!}}
allocator_traits&lt;Allocator&gt;::is_always_equal::value);
    basic_string&amp; assign(const basic_string&amp; str, size_type pos, size_type n = npos);
    basic_string&amp; assign(basic_string_view&lt;charT, traits&gt; sv);
    template&lt;class T&gt;
    basic_string&amp; assign(const T&amp; t, size_type pos, size_type n = npos);
    basic_string&amp; assign(const charT* s, size_type n);
    basic_string&amp; assign(const charT* s);
    basic_string&amp; assign(size_type n, charT c);
    template&lt;class InputIterator&gt;
    basic_string&amp; assign(InputIterator first, InputIterator last);
    basic_string&amp; assign(initializer_list&lt;charT&gt;);
    basic_string&amp; insert(size_type pos, const basic_string&amp; str);
    basic_string&amp; insert(size_type pos1, const basic_string&amp; str, size_type pos2, size_type n = npos);
    basic_string&amp; insert(size_type pos, basic_string_view&lt;charT, traits&gt; sv);
    template&lt;class T&gt;
    basic_string&amp; insert(size_type pos1, const T&amp; t, size_type pos2, size_type n = npos);
    basic_string&amp; insert(size_type pos, const charT* s, size_type n);
    basic_string&amp; insert(size_type pos, const charT* s);
    basic_string&amp; insert(size_type pos, size_type n, charT c);
    iterator insert(const_iterator p, charT c);
    iterator insert(const_iterator p, size_type n, charT c);
    template&lt;class InputIterator&gt;
    iterator insert(const_iterator p, InputIterator first, InputIterator last);
    iterator insert(const_iterator p, initializer_list&lt;charT&gt;);
    basic_string&amp; erase(size_type pos = 0, size_type n = npos);
    iterator erase(const_iterator p);
    iterator erase(const_iterator first, const_iterator last);
    void pop_back();
    basic_string&amp; replace(size_type pos1, size_type n1, const basic_string&amp; str);
    basic_string&amp; replace(size_type pos1, size_type n1, const basic_string&amp; str, size_type pos2, size_type n2 = npos);
    basic_string&amp; replace(size_type pos1, size_type n1, basic_string_view&lt;charT, traits&gt; sv);
    template&lt;class T&gt;
    basic_string&amp; replace(size_type pos1, size_type n1, const T&amp; t, size_type pos2, size_type n2 = npos);
    basic_string&amp; replace(size_type pos, size_type n1, const charT* s, size_type n2);
    basic_string&amp; replace(size_type pos, size_type n1, const charT* s);
    basic_string&amp; replace(size_type pos, size_type n1, size_type n2, charT c);
    basic_string&amp; replace(const_iterator i1, const_iterator i2, const basic_string&amp; str);
    basic_string&amp; replace(const_iterator i1, const_iterator i2, basic_string_view&lt;charT, traits&gt; sv);
    basic_string&amp; replace(const_iterator i1, const_iterator i2, const charT* s, size_type n);
    basic_string&amp; replace(const_iterator i1, const_iterator i2, const charT* s);
    basic_string&amp; replace(const_iterator i1, const_iterator i2, size_type n, charT c);
    template&lt;class InputIterator&gt;
    basic_string&amp; replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2);
    basic_string&amp; replace(const_iterator, const_iterator, initializer_list&lt;charT&gt;);
    size_type copy(charT* s, size_type n, size_type pos = 0) const;
    void swap(basic_string&amp; str) noexcept(allocator_traits&lt;Allocator&gt;::propagate_on_container_swap::value {{!!}}
allocator_traits&lt;Allocator&gt;::is_always_equal::value);
    // string operations
    const charT* c_str() const noexcept;
    const charT* data() const noexcept;
    charT* data() noexcept;
    operator basic_string_view&lt;charT, traits&gt;() const noexcept;
    allocator_type get_allocator() const noexcept;
    size_type find (basic_string_view&lt;charT, traits&gt; sv, size_type pos = 0) const noexcept;
    size_type find (const basic_string&amp; str, size_type pos = 0) const noexcept;
    size_type find (const charT* s, size_type pos, size_type n) const;
    size_type find (const charT* s, size_type pos = 0) const;
    size_type find (charT c, size_type pos = 0) const;
    size_type rfind(basic_string_view&lt;charT, traits&gt; sv, size_type pos = npos) const noexcept;
    size_type rfind(const basic_string&amp; str, size_type pos = npos) const noexcept;
    size_type rfind(const charT* s, size_type pos, size_type n) const;
    size_type rfind(const charT* s, size_type pos = npos) const;
    size_type rfind(charT c, size_type pos = npos) const;
    size_type find_first_of(basic_string_view&lt;charT, traits&gt; sv, size_type pos = 0) const noexcept;
    size_type find_first_of(const basic_string&amp; str, size_type pos = 0) const noexcept;
    size_type find_first_of(const charT* s, size_type pos, size_type n) const;
    size_type find_first_of(const charT* s, size_type pos = 0) const;
    size_type find_first_of(charT c, size_type pos = 0) const;
    size_type find_last_of (basic_string_view&lt;charT, traits&gt; sv, size_type pos = npos) const noexcept;
    size_type find_last_of (const basic_string&amp; str, size_type pos = npos) const noexcept;
    size_type find_last_of (const charT* s, size_type pos, size_type n) const;
    size_type find_last_of (const charT* s, size_type pos = npos) const;
    size_type find_last_of (charT c, size_type pos = npos) const;
    size_type find_first_not_of(basic_string_view&lt;charT, traits&gt; sv, size_type pos = 0) const noexcept;
    size_type find_first_not_of(const basic_string&amp; str, size_type pos = 0) const noexcept;
    size_type find_first_not_of(const charT* s, size_type pos, size_type n) const;
    size_type find_first_not_of(const charT* s, size_type pos = 0) const;
    size_type find_first_not_of(charT c, size_type pos = 0) const;
    size_type find_last_not_of (basic_string_view&lt;charT, traits&gt; sv, size_type pos = npos) const noexcept;
    size_type find_last_not_of (const basic_string&amp; str, size_type pos = npos) const noexcept;
    size_type find_last_not_of (const charT* s, size_type pos, size_type n) const;
    size_type find_last_not_of (const charT* s, size_type pos = npos) const;
    size_type find_last_not_of (charT c, size_type pos = npos) const;
    basic_string substr(size_type pos = 0, size_type n = npos) const;
    int compare(basic_string_view&lt;charT, traits&gt; sv) const noexcept;
    int compare(size_type pos1, size_type n1,
    basic_string_view&lt;charT, traits&gt; sv) const;
    template&lt;class T&gt;
    int compare(size_type pos1, size_type n1, const T&amp; t, size_type pos2, size_type n2 = npos) const;
    int compare(const basic_string&amp; str) const noexcept;
    int compare(size_type pos1, size_type n1, const basic_string&amp; str) const;
    int compare(size_type pos1, size_type n1, const basic_string&amp; str, size_type pos2, size_type n2 = npos) const;
    int compare(const charT* s) const;
    int compare(size_type pos1, size_type n1, const charT* s) const;
    int compare(size_type pos1, size_type n1, const charT* s, size_type n2) const;
  };
  template&lt;class InputIterator,
  class Allocator = allocator&lt;typename iterator_traits&lt;InputIterator&gt;::value_type&gt;&gt;
  basic_string(InputIterator, InputIterator, Allocator = Allocator())
  -&gt; basic_string&lt;typename iterator_traits&lt;InputIterator&gt;::value_type,
                  char_traits&lt;typename iterator_traits&lt;InputIterator&gt;::value_type&gt;,
                  Allocator&gt;;
}
}}

[[zh:cpp/header/string]]</text>
      <sha1>ojrzb29hhiumzzkujlebn1tlmgsq3rg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/string view</title>
    <ns>0</ns>
    <id>15522</id>
    <revision>
      <id>90119</id>
      <parentid>90084</parentid>
      <timestamp>2017-02-06T17:33:31Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>literals, from n4618</comment>
      <text xml:space="preserve" bytes="8131">{{cpp/header/title|string_view}}
{{cpp/header/navbar}}

This header is part of the [[cpp/string|strings]] library.

===Classes===
{{dsc begin}}
{{dsc tclass | cpp/string/basic_string_view | title=std::basic_string_view | read-only string view | notes={{mark c++17}} }}
{{dsc | {{lc|std::string_view}} | {{c|std::basic_string_view&lt;char&gt;}} }}
{{dsc | {{lc|std::wstring_view}} | {{c|std::basic_string_view&lt;wchar_t&gt;}} }}
{{dsc | {{lc|std::u16string_view}} | {{c|std::basic_string_view&lt;char16_t&gt;}} }}
{{dsc | {{lc|std::u32string_view}} | {{c|std::basic_string_view&lt;char32_t&gt;}} }}
{{dsc inc | cpp/string/basic_string_view/dsc hash}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc operator_cmp}}
{{dsc inc | cpp/string/basic_string_view/dsc operator_ltlt}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {

// class template basic_string_view
template&lt;class charT, class traits = char_traits&lt;charT&gt;&gt;
class basic_string_view;

// non-member comparison functions
template&lt;class charT, class traits&gt;
constexpr bool operator==(basic_string_view&lt;charT, traits&gt; x,
                          basic_string_view&lt;charT, traits&gt; y) noexcept;
template&lt;class charT, class traits&gt;
constexpr bool operator!=(basic_string_view&lt;charT, traits&gt; x,
                          basic_string_view&lt;charT, traits&gt; y) noexcept;
template&lt;class charT, class traits&gt;
constexpr bool operator&lt; (basic_string_view&lt;charT, traits&gt; x,
                          basic_string_view&lt;charT, traits&gt; y) noexcept;
template&lt;class charT, class traits&gt;
constexpr bool operator&gt; (basic_string_view&lt;charT, traits&gt; x,
                          basic_string_view&lt;charT, traits&gt; y) noexcept;
template&lt;class charT, class traits&gt;
constexpr bool operator&lt;=(basic_string_view&lt;charT, traits&gt; x,
                          basic_string_view&lt;charT, traits&gt; y) noexcept;
template&lt;class charT, class traits&gt;
constexpr bool operator&gt;=(basic_string_view&lt;charT, traits&gt; x,
                          basic_string_view&lt;charT, traits&gt; y) noexcept;
/* sufficient additional overloads of comparison functions */

// inserters and extractors
template&lt;class charT, class traits&gt;
basic_ostream&lt;charT, traits&gt;&amp; 
operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp; os, basic_string_view&lt;charT, traits&gt; str);

// basic_string_view typedef names
typedef basic_string_view&lt;char&gt; string_view;
typedef basic_string_view&lt;char16_t&gt; u16string_view;
typedef basic_string_view&lt;char32_t&gt; u32string_view;
typedef basic_string_view&lt;wchar_t&gt; wstring_view;

inline namespace literals {
inline namespace string_view_literals {
// suffix for basic_string_view literals
constexpr string_view operator &quot;&quot; sv(const char* str, size_t len) noexcept;
constexpr u16string_view operator &quot;&quot; sv(const char16_t* str, size_t len) noexcept;
constexpr u32string_view operator &quot;&quot; sv(const char32_t* str, size_t len) noexcept;
constexpr wstring_view operator &quot;&quot; sv(const wchar_t* str, size_t len) noexcept;
}
}

// hash support
template&lt;class T&gt; struct hash;
template&lt;&gt; struct hash&lt;string_view&gt;;
template&lt;&gt; struct hash&lt;u16string_view&gt;;
template&lt;&gt; struct hash&lt;u32string_view&gt;;
template&lt;&gt; struct hash&lt;wstring_view&gt;;

template&lt;class charT, class traits = char_traits&lt;charT&gt;&gt;
class basic_string_view {
public:
// types
typedef traits traits_type;
typedef charT value_type;
typedef charT* pointer;
typedef const charT* const_pointer;
typedef charT&amp; reference;
typedef const charT&amp; const_reference;
typedef implementation-defined const_iterator;
typedef const_iterator iterator;
typedef reverse_iterator&lt;const_iterator&gt; const_reverse_iterator;
typedef const_reverse_iterator reverse_iterator;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
static constexpr size_type npos = size_type(-1);

// construction and assignment
constexpr basic_string_view() noexcept;
constexpr basic_string_view(const basic_string_view&amp;) noexcept = default;
basic_string_view &amp;operator=(const basic_string_view&amp;) noexcept = default;
template &lt;class Allocator&gt;
basic_string_view(const basic_string&lt;charT, traits, Allocator&gt;&amp; str) noexcept;
constexpr basic_string_view(const charT* str);
constexpr basic_string_view(const charT* str, size_type len);

// iterator support
constexpr const_iterator begin() const noexcept;
constexpr const_iterator end() const noexcept;
constexpr const_iterator cbegin() const noexcept;
constexpr const_iterator cend() const noexcept;
const_reverse_iterator rbegin() const noexcept;
const_reverse_iterator rend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;

// capacity
constexpr size_type size() const noexcept;
constexpr size_type length() const noexcept;
constexpr size_type max_size() const noexcept;
constexpr bool empty() const noexcept;

// element access
constexpr const_reference operator[](size_type pos) const;
constexpr const_reference at(size_type pos) const;
constexpr const_reference front() const;
constexpr const_reference back() const;
constexpr const_pointer data() const noexcept;

// modifiers
constexpr void remove_prefix(size_type n);
constexpr void remove_suffix(size_type n);
constexpr void swap(basic_string_view&amp; s) noexcept;

// string operations
template &lt;class Allocator&gt;
explicit operator basic_string&lt;charT, traits, Allocator&gt;() const;
template &lt;class Allocator = allocator&lt;charT&gt;&gt;
basic_string&lt;charT, traits, Allocator&gt; to_string(const Allocator&amp; a = Allocator()) const;
size_type copy(charT* s, size_type n, size_type pos = 0) const;
constexpr basic_string_view substr(size_type pos = 0, size_type n = npos) const;
constexpr int compare(basic_string_view s) const noexcept;
constexpr int compare(size_type pos1, size_type n1, basic_string_view s) const;
constexpr int compare(size_type pos1, size_type n1, basic_string_view s,
                      size_type pos2, size_type n2) const;
constexpr int compare(const charT* s) const;
constexpr int compare(size_type pos1, size_type n1, const charT* s) const;
constexpr int compare(size_type pos1, size_type n1, const charT* s, size_type n2) const;
constexpr size_type find(basic_string_view s, size_type pos = 0) const noexcept;
constexpr size_type find(charT c, size_type pos = 0) const noexcept;
constexpr size_type find(const charT* s, size_type pos, size_type n) const;
constexpr size_type find(const charT* s, size_type pos = 0) const;
constexpr size_type rfind(basic_string_view s, size_type pos = npos) const noexcept;
constexpr size_type rfind(charT c, size_type pos = npos) const noexcept;
constexpr size_type rfind(const charT* s, size_type pos, size_type n) const;
constexpr size_type rfind(const charT* s, size_type pos = npos) const;
constexpr size_type find_first_of(basic_string_view s, size_type pos = 0) const noexcept;
constexpr size_type find_first_of(charT c, size_type pos = 0) const noexcept;
constexpr size_type find_first_of(const charT* s, size_type pos, size_type n) const;
constexpr size_type find_first_of(const charT* s, size_type pos = 0) const;
constexpr size_type find_last_of(basic_string_view s, size_type pos = npos) const noexcept;
constexpr size_type find_last_of(charT c, size_type pos = npos) const noexcept;
constexpr size_type find_last_of(const charT* s, size_type pos, size_type n) const;
constexpr size_type find_last_of(const charT* s, size_type pos = npos) const;
constexpr size_type find_first_not_of(basic_string_view s, size_type pos = 0) const noexcept;
constexpr size_type find_first_not_of(charT c, size_type pos = 0) const noexcept;
constexpr size_type find_first_not_of(const charT* s, size_type pos, size_type n) const;
constexpr size_type find_first_not_of(const charT* s, size_type pos = 0) const;
constexpr size_type find_last_not_of(basic_string_view s,size_type pos = npos) const noexcept;
constexpr size_type find_last_not_of(charT c, size_type pos = npos) const noexcept;
constexpr size_type find_last_not_of(const charT* s, size_type pos, size_type n) const;
constexpr size_type find_last_not_of(const charT* s, size_type pos = npos) const;
private:
const_pointer data_; // exposition only
size_type size_; // exposition only
};

} // namespace std

}}

[[zh:cpp/header/string_view]]</text>
      <sha1>aihyufoh947ld75wr56w1b7yxvx5jsi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/strstream</title>
    <ns>0</ns>
    <id>12859</id>
    <revision>
      <id>64002</id>
      <timestamp>2013-08-06T03:36:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3922">{{cpp/header/title|strstream}}
{{cpp/header/navbar}}
This header is part of the [[cpp/io|Input/Output]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc class | cpp/io/strstreambuf | notes={{mark deprecated}} | implements raw character array device}}
{{dsc class | cpp/io/istrstream | notes={{mark deprecated}} | implements character array input operations}}
{{dsc class | cpp/io/ostrstream | notes={{mark deprecated}} | implements character array output operations}}
{{dsc class | cpp/io/strstream | notes={{mark deprecated}} | implements character array input/output operations}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
    class strstreambuf;
    class istrstream;
    class ostrstream;
    class strstream;
}
}}

====Class {{lc|std::strstreambuf}}====
{{source|1=
class strstreambuf : public basic_streambuf&lt;char&gt; {
 public:
    explicit strstreambuf(streamsize alsize_arg = 0);
    strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*));
    strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = 0);
    strstreambuf(const char* gnext_arg, streamsize n);
    strstreambuf(signed char* gnext_arg, streamsize n, signed char* pbeg_arg = 0);
    strstreambuf(const signed char* gnext_arg, streamsize n);
    strstreambuf(unsigned char* gnext_arg, streamsize n, unsigned char* pbeg_arg = 0);
    strstreambuf(const unsigned char* gnext_arg, streamsize n);
    virtual ~strstreambuf();

    void freeze(bool freezefl = true);
    char* str();
    int pcount();

 protected:
    virtual int_type overflow (int_type c = EOF);
    virtual int_type pbackfail(int_type c = EOF);
    virtual int_type underflow();
    virtual pos_type seekoff(off_type off, ios_base::seekdir way,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    virtual pos_type seekpos(pos_type sp,
                             ios_base::openmode which = ios_base::in{{!}}ios_base::out);
    virtual streambuf* setbuf(char* s, streamsize n);

 private:
    typedef /*bitmask type*/ strstate; // exposition only
    static const strstate allocated; // exposition only
    static const strstate constant; // exposition only
    static const strstate dynamic; // exposition only
    static const strstate frozen; // exposition only
    strstate strmode; // exposition only
    streamsize alsize; // exposition only
    void* (*palloc)(size_t); // exposition only
    void (*pfree)(void*); // exposition only
};
}}

====Class {{lc|std::istrstream}}====
{{source|1=
class istrstream : public basic_istream&lt;char&gt; {
 public:
    explicit istrstream(const char* s);
    explicit istrstream(char* s);
    istrstream(const char* s, streamsize n);
    istrstream(char* s, streamsize n);
    virtual ~istrstream();

    strstreambuf* rdbuf() const;
    char *str();

 private:
    strstreambuf sb; // exposition only
};
}}

====Class {{lc|std::ostrstream}}====
{{source|1=
class ostrstream : public basic_ostream&lt;char&gt; {
 public:
    ostrstream();
    ostrstream(char* s, int n, ios_base::openmode mode = ios_base::out);
    virtual ~ostrstream();

    strstreambuf* rdbuf() const;
    void freeze(bool freezefl = true);
    char* str();
    int pcount() const;

 private:
    strstreambuf sb; // exposition only
};
}}

====Class {{lc|std::strstream}}====
{{source|1=
class strstream : public basic_iostream&lt;char&gt; {
 public:
    // Types
    typedef char char_type;
    typedef typename char_traits&lt;char&gt;::int_type int_type;
    typedef typename char_traits&lt;char&gt;::pos_type pos_type;
    typedef typename char_traits&lt;char&gt;::off_type off_type;

    // constructors/destructor
    strstream();
    strstream(char* s, int n,
    ios_base::openmode mode = ios_base::in|ios_base::out);
    virtual ~strstream();

    // Members:
    strstreambuf* rdbuf() const;
    void freeze(bool freezefl = true);
    int pcount() const;
    char* str();

 private:
    strstreambuf sb; // exposition only
};
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/system error</title>
    <ns>0</ns>
    <id>9742</id>
    <revision>
      <id>63147</id>
      <parentid>57534</parentid>
      <timestamp>2013-07-03T08:13:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typos, links</comment>
      <text xml:space="preserve" bytes="6732">{{cpp/header/title|system_error}}
{{cpp/header/navbar}}

This header is part of the [[cpp/error|error handling]] library.

===Classes===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_category}}
{{dsc inc | cpp/error/dsc generic_category}}
{{dsc inc | cpp/error/dsc system_category}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc inc | cpp/error/dsc errc}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/error/dsc system_error}}
{{dsc inc | cpp/error/error_code/dsc is_error_code_enum}}
{{dsc inc | cpp/error/error_condition/dsc is_error_condition_enum}}
{{dsc inc | cpp/error/error_code/dsc hash}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc operator_cmp}}
{{dsc inc | cpp/error/error_code/dsc operator_ltlt}}
{{dsc inc | cpp/error/errc/dsc make_error_code}}
{{dsc inc | cpp/error/error_condition/dsc operator_cmp}}
{{dsc inc | cpp/error/errc/dsc make_error_condition}}
{{dsc end}}

===Synopsis===
{{source|

namespace std {
    class error_category;
    class error_code;
    class error_condition;
    class system_error;
    
    template &lt;class T&gt;
        struct is_error_code_enum : public false_type {};
        
    template &lt;class T&gt;
        struct is_error_condition_enum : public false_type {};
        
    enum class errc {
    
        address_family_not_supported,       //  EAFNOSUPPORT
        address_in_use,                     //  EADDRINUSE
        address_not_available,              //  EADDRNOTAVAIL
        already_connected,                  //  EISCONN
        argument_list_too_long,             //  E2BIG
        argument_out_of_domain,             //  EDOM
        bad_address,                        //  EFAULT
        bad_file_descriptor,                //  EBADF
        bad_message,                        //  EBADMSG
        broken_pipe,                        //  EPIPE
        connection_aborted,                 //  ECONNABORTED
        connection_already_in_progress,     //  EALREADY
        connection_refused,                 //  ECONNREFUSED
        connection_reset,                   //  ECONNRESET
        cross_device_link,                  //  EXDEV
        destination_address_required,       //  EDESTADDRREQ
        device_or_resource_busy,            //  EBUSY
        directory_not_empty,                //  ENOTEMPTY
        executable_format_error,            //  ENOEXEC
        file_exists,                        //  EEXIST
        file_too_large,                     //  EFBIG
        filename_too_long,                  //  ENAMETOOLONG
        function_not_supported,             //  ENOSYS
        host_unreachable,                   //  EHOSTUNREACH
        identifier_removed,                 //  EIDRM
        illegal_byte_sequence,              //  EILSEQ
        inappropriate_io_control_operation, //  ENOTTY
        interrupted,                        //  EINTR
        invalid_argument,                   //  EINVAL
        invalid_seek,                       //  ESPIPE
        io_error,                           //  EIO
        is_a_directory,                     //  EISDIR
        message_size,                       //  EMSGSIZE
        network_down,                       //  ENETDOWN
        network_reset,                      //  ENETRESET
        network_unreachable,                //  ENETUNREACH
        no_buffer_space,                    //  ENOBUFS
        no_child_process,                   //  ECHILD
        no_link,                            //  ENOLINK
        no_lock_available,                  //  ENOLCK
        no_message_available,               //  ENODATA
        no_message,                         //  ENOMSG
        no_protocol_option,                 //  ENOPROTOOPT
        no_space_on_device,                 //  ENOSPC
        no_stream_resources,                //  ENOSR
        no_such_device_or_address,          //  ENXIO
        no_such_device,                     //  ENODEV
        no_such_file_or_directory,          //  ENOENT
        no_such_process,                    //  ESRCH
        not_a_directory,                    //  ENOTDIR
        not_a_socket,                       //  ENOTSOCK
        not_a_stream,                       //  ENOSTR
        not_connected,                      //  ENOTCONN
        not_enough_memory,                  //  ENOMEM
        not_supported,                      //  ENOTSUP
        operation_canceled,                 //  ECANCELED
        operation_in_progress,              //  EINPROGRESS
        operation_not_permitted,            //  EPERM
        operation_not_supported,            //  EOPNOTSUPP
        operation_would_block,              //  EWOULDBLOCK
        owner_dead,                         //  EOWNERDEAD
        permission_denied,                  //  EACCES
        protocol_error,                     //  EPROTO
        protocol_not_supported,             //  EPROTONOSUPPORT
        read_only_file_system,              //  EROFS
        resource_deadlock_would_occur,      //  EDEADLK
        resource_unavailable_try_again,     //  EAGAIN
        result_out_of_range,                //  ERANGE
        state_not_recoverable,              //  ENOTRECOVERABLE
        stream_timeout,                     //  ETIME
        text_file_busy,                     //  ETXTBSY
        timed_out,                          //  ETIMEDOUT
        too_many_files_open_in_system,      //  ENFILE
        too_many_files_open,                //  EMFILE
        too_many_links,                     //  EMLINK
        too_many_symbolic_link_levels,      //  ELOOP
        value_too_large,                    //  EOVERFLOW
        wrong_protocol_type,                //  EPROTOTYPE
    };
    
    template &lt;&gt; struct is_error_condition_enum&lt;errc&gt; : true_type { }
    
    error_code make_error_code(errc e) noexcept;
    error_condition make_error_condition(errc e) noexcept;
    
    // Comparison operators:
    bool operator{{==}}(const error_code&amp; lhs,  const error_code&amp; rhs) noexcept;
    bool operator{{==}}(const error_code&amp; lhs,  const error_condition&amp; rhs) noexcept;
    bool operator{{==}}(const error_condition&amp;  lhs, const error_code&amp; rhs) noexcept;
    bool operator{{==}}(const error_condition&amp;  lhs, const error_condition&amp; rhs) noexcept;
    bool operator!{{=}}(const error_code&amp; lhs,  const error_code&amp; rhs) noexcept;
    bool operator!{{=}}(const error_code&amp; lhs,  const error_condition&amp; rhs) noexcept;
    bool operator!{{=}}(const error_condition&amp;  lhs, const error_code&amp; rhs) noexcept;
    bool operator!{{=}}(const error_condition&amp;  lhs, const error_condition&amp; rhs) noexcept;

    // Hash support
    template &lt;class T&gt; struct hash;
    template &lt;&gt; struct hash&lt;error_code&gt;;
} // namespace std


}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/thread</title>
    <ns>0</ns>
    <id>12852</id>
    <revision>
      <id>83390</id>
      <parentid>72412</parentid>
      <timestamp>2016-02-05T15:43:53Z</timestamp>
      <contributor>
        <ip>208.65.73.219</ip>
      </contributor>
      <comment>Fix a mistake in a sentence</comment>
      <text xml:space="preserve" bytes="2735">{{cpp/header/title|thread}}
{{cpp/header/navbar}}
This header is part of the [[cpp/thread|thread support]] library.
{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/thread/dsc thread}}
{{dsc h1|Functions}}
{{dsc inc | cpp/thread/thread/dsc swap2}}
{{dsc inc | cpp/thread/thread/id/dsc operator_cmp}}
{{dsc inc | cpp/thread/thread/id/dsc operator_ltlt}}
{{dsc ptclass | cpp/thread/thread/id/hash | title=std::hash{{dsc small|&lt;std::thread::id&gt;}} | specializes {{lc|std::hash}}}}
{{dsc h1|Namespaces}}
{{dsc | {{ttb|this_thread}} | provide functions that access the current thread of execution}}
{{dsc h2|Functions}}
{{dsc namespace | std::this_thread }}
{{dsc inc | cpp/thread/dsc yield}}
{{dsc inc | cpp/thread/dsc get_id}}
{{dsc inc | cpp/thread/dsc sleep_for}}
{{dsc inc | cpp/thread/dsc sleep_until}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
    class thread;

    void swap(thread&amp; x, thread&amp; y) noexcept;

    bool operator==(thread::id x, thread::id y) noexcept;
    bool operator!=(thread::id x, thread::id y) noexcept;

    bool operator&lt;(thread::id x, thread::id y) noexcept;
    bool operator&lt;=(thread::id x, thread::id y) noexcept;
    bool operator&gt;(thread::id x, thread::id y) noexcept;
    bool operator&gt;=(thread::id x, thread::id y) noexcept;

    template&lt;class CharT, class Traits&gt;
    basic_ostream&lt;CharT, Traits&gt;&amp; operator&lt;&lt;(basic_ostream&lt;CharT, Traits&gt;&amp; out,
                                            thread::id id);
    
    template &lt;class T&gt; struct hash;
    template &lt;&gt; struct hash&lt;thread::id&gt;;

    namespace this_thread {

        thread::id get_id() noexcept;
        void yield() noexcept;
        template &lt;class Clock, class Duration&gt;
            void sleep_until(const chrono::time_point&lt;Clock, Duration&gt;&amp; abs_time);
        template &lt;class Rep, class Period&gt;
            void sleep_for(const chrono::duration&lt;Rep, Period&gt;&amp; rel_time);

    }
}
}}

====Class {{lc|std::thread}}====
{{source|1=
class thread {
 public:
    // types:
    class id;
    typedef /*implementation-defined*/ native_handle_type;

    // construct/copy/destroy:
    thread() noexcept;
    template &lt;class F, class ...Args&gt; explicit thread(F&amp;&amp; f, Args&amp;&amp;... args);
    ~thread();
    thread(const thread&amp;) = delete;
    thread(thread&amp;&amp;) noexcept;
    thread&amp; operator=(const thread&amp;) = delete;
    thread&amp; operator=(thread&amp;&amp;) noexcept;

    // members:
    void swap(thread&amp;) noexcept;
    bool joinable() const noexcept;
    void join();
    void detach();
    id get_id() const noexcept;
    native_handle_type native_handle();

    // static members:
    static unsigned hardware_concurrency() noexcept;
};
}}

====Class {{lc|std::thread::id}}====
{{source|1=
class thread::id {
 public:
    id() noexcept;
};
}}</text>
      <sha1>3s5ystukrnd6ct244obidzp14h1p7kb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/tuple</title>
    <ns>0</ns>
    <id>9744</id>
    <revision>
      <id>88778</id>
      <parentid>87632</parentid>
      <timestamp>2016-12-11T03:35:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+apply, make_from_tuple, the _t's in synop etc from 4618</comment>
      <text xml:space="preserve" bytes="7028">{{cpp/header/title|tuple}}
{{cpp/header/navbar}}
This header is part of the [[cpp/utility|general utility]] library.

{{dsc begin}}
{{dsc h1|Classes}}
{{dsc inc | cpp/utility/dsc tuple}}
{{dsc inc | cpp/utility/tuple/dsc tuple_size}}
{{dsc inc | cpp/utility/tuple/dsc tuple_element}}
{{dsc inc | cpp/utility/tuple/dsc uses_allocator}}
{{dsc h1|Constants}}
{{dsc inc | cpp/utility/tuple/dsc ignore}}
{{dsc h1|Functions}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tuple_cat}}
{{dsc inc | cpp/utility/tuple/dsc get}}
{{dsc inc | cpp/utility/tuple/dsc operator_cmp}}
{{dsc inc | cpp/utility/tuple/dsc swap2}}
{{dsc inc | cpp/utility/dsc apply}}
{{dsc inc | cpp/utility/dsc make_from_tuple}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
    // class template tuple:
    template &lt;class... Types&gt; class tuple;
        
    // tuple creation functions:
    const /*unspecified*/ ignore;
    template &lt;class... Types&gt;
        tuple&lt;VTypes...&gt; make_tuple(Types&amp;&amp;...);
    template &lt;class... Types&gt;
        tuple&lt;Types...&gt; forward_as_tuple(Types&amp;&amp;...) noexcept;
    template&lt;class... Types&gt;
        tuple&lt;Types&amp;...&gt; tie(Types&amp;...) noexcept;
    template &lt;class... Tuples&gt;
        tuple&lt;Tuples...&gt; tuple_cat(Tuples&amp;&amp;...);

    // calling a function with a tuple of arguments
    template &lt;class F, class Tuple&gt;
    constexpr decltype(auto) apply(F&amp;&amp; f, Tuple&amp;&amp; t);

    template &lt;class T, class Tuple&gt;
    constexpr T make_from_tuple(Tuple&amp;&amp; t);
        
    //  tuple helper classes:
    template &lt;class T&gt; class tuple_size; // undefined
    template &lt;class T&gt; class tuple_size&lt;const T&gt;;
    template &lt;class T&gt; class tuple_size&lt;volatile T&gt;;
    template &lt;class T&gt; class tuple_size&lt;const volatile T&gt;;
    template &lt;class... Types&gt; class tuple_size&lt;tuple&lt;Types...&gt; &gt;;

    template &lt;size_t I,  class   T&gt;     class tuple_element; // undefined
    template &lt;size_t I,  class   T&gt;     class tuple_element&lt;I, const T&gt;;
    template &lt;size_t I,  class   T&gt;     class tuple_element&lt;I, volatile T&gt;;
    template &lt;size_t I,  class   T&gt;     class tuple_element&lt;I, const volatile T&gt;;
    template &lt;size_t I, class... Types&gt; class tuple_element&lt;I, tuple&lt;Types...&gt; &gt;;
    
    //  element access:
    template &lt;size_t I, class... Types&gt;
    constexpr tuple_element_t&lt;I, tuple&lt;Types...&gt;&gt;&amp;
      get(tuple&lt;Types...&gt;&amp;) noexcept;
    template &lt;size_t I, class... Types&gt;
    constexpr tuple_element_t&lt;I, tuple&lt;Types...&gt;&gt;&amp;&amp;
      get(tuple&lt;Types...&gt;&amp;&amp;) noexcept;
    template &lt;size_t I, class... Types&gt;
    constexpr const tuple_element_t&lt;I, tuple&lt;Types...&gt;&gt;&amp;
      get(const tuple&lt;Types...&gt;&amp;) noexcept;
    template &lt;size_t I, class... Types&gt;
    constexpr const tuple_element_t&lt;I, tuple&lt;Types...&gt;&gt;&amp;&amp; 
      get(const tuple&lt;Types...&gt;&amp;&amp;) noexcept;
    template &lt;class T, class... Types&gt;
      constexpr T&amp; get(tuple&lt;Types...&gt;&amp; t) noexcept;
    template &lt;class T, class... Types&gt;
      constexpr T&amp;&amp; get(tuple&lt;Types...&gt;&amp;&amp; t) noexcept;
    template &lt;class T, class... Types&gt;
      constexpr const T&amp; get(const tuple&lt;Types...&gt;&amp; t) noexcept;
    template &lt;class T, class... Types&gt;
      constexpr const T&amp;&amp; get(const tuple&lt;Types...&gt;&amp;&amp; t) noexcept;
        
    //relational operators:
    template&lt;class... TTypes, class... UTypes&gt;
        bool operator{{==}}(const tuple&lt;TTypes...&gt;&amp;, const tuple&lt;UTypes...&gt;&amp;);
    template&lt;class... TTypes, class... UTypes&gt;
        bool operator&lt;(const tuple&lt;TTypes...&gt;&amp;, const tuple&lt;UTypes...&gt;&amp;);
    template&lt;class... TTypes, class... UTypes&gt;
        bool operator!{{=}}(const tuple&lt;TTypes...&gt;&amp;, const tuple&lt;UTypes...&gt;&amp;);
    template&lt;class... TTypes, class... UTypes&gt;
        bool operator&gt;(const tuple&lt;TTypes...&gt;&amp;, const tuple&lt;UTypes...&gt;&amp;);
    template&lt;class... TTypes, class... UTypes&gt;
        bool operator&lt;{{=}}(const tuple&lt;TTypes...&gt;&amp;, const tuple&lt;UTypes...&gt;&amp;);
    template&lt;class... TTypes, class... UTypes&gt;
        bool operator&gt;{{=}}(const tuple&lt;TTypes...&gt;&amp;, const tuple&lt;UTypes...&gt;&amp;);
        
    // allocator-related traits
    template &lt;class... Types, class Alloc&gt;
        struct uses_allocator&lt;tuple&lt;Types...&gt;, Alloc&gt;;
    // specialized algorithms:
    template &lt;class... Types&gt;
        void swap(tuple&lt;Types...&gt;&amp; x, tuple&lt;Types...&gt;&amp; y) noexcept(x.swap(y));
    // tuple helper classes
    template &lt;class T&gt; constexpr size_t tuple_size_v = tuple_size&lt;T&gt;::value;
}
}}

====Class {{lc|std::tuple}}====
{{source|1=
template &lt;class... Types&gt;
class tuple {
public:
  // tuple construction
  /*conditionally-explicit*/ constexpr tuple();
  // only if sizeof...(Types) &gt;= 1
  /*conditionally-explicit*/ constexpr tuple(const Types&amp;...); 
  // only if sizeof...(Types) &gt;= 1
  template &lt;class... UTypes&gt;
  /*conditionally-explicit*/ constexpr tuple(UTypes&amp;&amp;...); 
  tuple(const tuple&amp;) = default;
  tuple(tuple&amp;&amp;) = default;
  template &lt;class... UTypes&gt;
  /*conditionally-explicit*/ constexpr tuple(const tuple&lt;UTypes...&gt;&amp;);
  template &lt;class... UTypes&gt;
  /*conditionally-explicit*/ constexpr tuple(tuple&lt;UTypes...&gt;&amp;&amp;);
  // only if sizeof...(Types) == 2
  template &lt;class U1, class U2&gt;
  /*conditionally-explicit*/ constexpr tuple(const pair&lt;U1, U2&gt;&amp;);
  // only if sizeof...(Types) == 2
  template &lt;class U1, class U2&gt;
  /*conditionally-explicit*/ constexpr tuple(pair&lt;U1, U2&gt;&amp;&amp;); 

  // allocator-extended constructors
  template &lt;class Alloc&gt;
  tuple(allocator_arg_t, const Alloc&amp; a);
  template &lt;class Alloc&gt;
  /*conditionally-explicit*/ tuple(allocator_arg_t, const Alloc&amp; a, const Types&amp;...);
  template &lt;class Alloc, class... UTypes&gt;
  /*conditionally-explicit*/ tuple(allocator_arg_t, const Alloc&amp; a, UTypes&amp;&amp;...);
  template &lt;class Alloc&gt;
  tuple(allocator_arg_t, const Alloc&amp; a, const tuple&amp;);
  template &lt;class Alloc&gt;
  tuple(allocator_arg_t, const Alloc&amp; a, tuple&amp;&amp;);
  template &lt;class Alloc, class... UTypes&gt;
  /*conditionally-explicit*/ tuple(allocator_arg_t,
                                   const Alloc&amp; a, const tuple&lt;UTypes...&gt;&amp;);
  template &lt;class Alloc, class... UTypes&gt;
  /*conditionally-explicit*/ tuple(allocator_arg_t,
                                   const Alloc&amp; a, tuple&lt;UTypes...&gt;&amp;&amp;);
  template &lt;class Alloc, class U1, class U2&gt;
  /*conditionally-explicit*/ tuple(allocator_arg_t,
                                   const Alloc&amp; a, const pair&lt;U1, U2&gt;&amp;);
  template &lt;class Alloc, class U1, class U2&gt;
  /*conditionally-explicit*/ tuple(allocator_arg_t,
                                   const Alloc&amp; a, pair&lt;U1, U2&gt;&amp;&amp;);

  // tuple assignment
  tuple&amp; operator=(const tuple&amp;);
  tuple&amp; operator=(tuple&amp;&amp;) noexcept(see below );
  template &lt;class... UTypes&gt;
  tuple&amp; operator=(const tuple&lt;UTypes...&gt;&amp;);
  template &lt;class... UTypes&gt;
  tuple&amp; operator=(tuple&lt;UTypes...&gt;&amp;&amp;);
  template &lt;class U1, class U2&gt;
  tuple&amp; operator=(const pair&lt;U1, U2&gt;&amp;); // only if sizeof...(Types) == 2
  template &lt;class U1, class U2&gt;
  tuple&amp; operator=(pair&lt;U1, U2&gt;&amp;&amp;); // only if sizeof...(Types) == 2

  // tuple swap
  void swap(tuple&amp;) noexcept(see below );
};

}}</text>
      <sha1>cmh7tsxwdxrnyjby4x4bm5txkwij2rc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/type traits</title>
    <ns>0</ns>
    <id>9746</id>
    <revision>
      <id>91020</id>
      <parentid>91019</parentid>
      <timestamp>2017-03-14T16:29:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Synopsis */</comment>
      <text xml:space="preserve" bytes="20152">{{cpp/header/title|type_traits}}
{{cpp/header/navbar}}
This header is part of the [[cpp/types|type support]] library.

{{dsc begin}}

{{dsc h1 | Classes}}

{{dsc h2 | Helper Classes}}
{{dsc inc | cpp/types/dsc integral_constant}}
{{dsc | {{tt|true_type}} | {{c|std::integral_constant&lt;bool, true&gt;}}}}
{{dsc | {{tt|false_type}} | {{c|std::integral_constant&lt;bool, false&gt;}}}}

{{dsc h2 | Primary type categories}}
{{dsc inc | cpp/types/dsc is_void}}
{{dsc inc | cpp/types/dsc is_null_pointer}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc inc | cpp/types/dsc is_floating_point}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc is_enum}}
{{dsc inc | cpp/types/dsc is_union}}
{{dsc inc | cpp/types/dsc is_class}}
{{dsc inc | cpp/types/dsc is_function}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_lvalue_reference}}
{{dsc inc | cpp/types/dsc is_rvalue_reference}}
{{dsc inc | cpp/types/dsc is_member_object_pointer}}
{{dsc inc | cpp/types/dsc is_member_function_pointer}}

{{dsc h2 | Composite type categories}}
{{dsc inc | cpp/types/dsc is_fundamental}}
{{dsc inc | cpp/types/dsc is_arithmetic}}
{{dsc inc | cpp/types/dsc is_scalar}}
{{dsc inc | cpp/types/dsc is_object}}
{{dsc inc | cpp/types/dsc is_compound}}
{{dsc inc | cpp/types/dsc is_reference}}
{{dsc inc | cpp/types/dsc is_member_pointer}}

{{dsc h2 | Type properties}}
{{dsc inc | cpp/types/dsc is_const}}
{{dsc inc | cpp/types/dsc is_volatile}}
{{dsc inc | cpp/types/dsc is_trivial}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}
{{dsc inc | cpp/types/dsc is_standard_layout}}
{{dsc inc | cpp/types/dsc is_pod}}
{{dsc inc | cpp/types/dsc is_literal_type}}
{{dsc inc | cpp/types/dsc has_unique_object_representations}}
{{dsc inc | cpp/types/dsc is_empty}}
{{dsc inc | cpp/types/dsc is_polymorphic}}
{{dsc inc | cpp/types/dsc is_abstract}}
{{dsc inc | cpp/types/dsc is_final}}
{{dsc inc | cpp/types/dsc is_aggregate}}
{{dsc inc | cpp/types/dsc is_signed}}
{{dsc inc | cpp/types/dsc is_unsigned}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Supported operations}}
{{dsc inc | cpp/types/dsc is_constructible}}
{{dsc inc | cpp/types/dsc is_default_constructible}}
{{dsc inc | cpp/types/dsc is_copy_constructible}}
{{dsc inc | cpp/types/dsc is_move_constructible}}
{{dsc inc | cpp/types/dsc is_assignable}}
{{dsc inc | cpp/types/dsc is_copy_assignable}}
{{dsc inc | cpp/types/dsc is_move_assignable}}
{{dsc inc | cpp/types/dsc is_destructible}}
{{dsc inc | cpp/types/dsc has_virtual_destructor}}
{{dsc inc | cpp/types/dsc is_swappable}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Property queries}}
{{dsc inc | cpp/types/dsc alignment_of}}
{{dsc inc | cpp/types/dsc rank}}
{{dsc inc | cpp/types/dsc extent}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Type relationships}}
{{dsc inc | cpp/types/dsc is_same}}
{{dsc inc | cpp/types/dsc is_base_of}}
{{dsc inc | cpp/types/dsc is_convertible}}
{{dsc inc | cpp/types/dsc is_invocable}}

{{dsc h2 | Const-volatility specifiers}}
{{dsc inc | cpp/types/dsc remove_cv}}
{{dsc inc | cpp/types/dsc add_cv}}

{{dsc h2 | References}}
{{dsc inc | cpp/types/dsc remove_reference}}
{{dsc inc | cpp/types/dsc add_reference}}

{{dsc h2 | Pointers}}
{{dsc inc | cpp/types/dsc remove_pointer}}
{{dsc inc | cpp/types/dsc add_pointer}}

{{dsc h2 | Sign modifiers}}
{{dsc inc | cpp/types/dsc make_signed}}
{{dsc inc | cpp/types/dsc make_unsigned}}

{{dsc h2 | Arrays}}
{{dsc inc | cpp/types/dsc remove_extent}}
{{dsc inc | cpp/types/dsc remove_all_extents}}

{{dsc h2 | Miscellaneous transformations}}
{{dsc inc | cpp/types/dsc aligned_storage}}
{{dsc inc | cpp/types/dsc aligned_union}}
{{dsc inc | cpp/types/dsc decay}}
{{dsc inc | cpp/types/dsc enable_if}}
{{dsc inc | cpp/types/dsc conditional}}
{{dsc inc | cpp/types/dsc common_type}}
{{dsc inc | cpp/types/dsc underlying_type}}
{{dsc inc | cpp/types/dsc result_of}}
{{dsc inc | cpp/types/dsc void_t}}

{{dsc h2 | Operations on traits}}
{{dsc inc | cpp/types/dsc conjunction}}
{{dsc inc | cpp/types/dsc disjunction}}
{{dsc inc | cpp/types/dsc negation}}
{{dsc end}}


===Synopsis===
{{source|1=

namespace std {
  // helper class:
  template &lt;class T, T v&gt; struct integral_constant;
  template &lt;bool B&gt;
  using bool_constant = integral_constant&lt;bool, B&gt;;
  using true_type = bool_constant&lt;true&gt;;
  using false_type = bool_constant&lt;false&gt;;

  // primary type categories:
  template &lt;class T&gt; struct is_void;
  template &lt;class T&gt; struct is_null_pointer;
  template &lt;class T&gt; struct is_integral;
  template &lt;class T&gt; struct is_floating_point;
  template &lt;class T&gt; struct is_array;
  template &lt;class T&gt; struct is_pointer;
  template &lt;class T&gt; struct is_lvalue_reference;
  template &lt;class T&gt; struct is_rvalue_reference;
  template &lt;class T&gt; struct is_member_object_pointer;
  template &lt;class T&gt; struct is_member_function_pointer;
  template &lt;class T&gt; struct is_enum;
  template &lt;class T&gt; struct is_union;
  template &lt;class T&gt; struct is_class;
  template &lt;class T&gt; struct is_function;

  // composite type categories:
  template &lt;class T&gt; struct is_reference;
  template &lt;class T&gt; struct is_arithmetic;
  template &lt;class T&gt; struct is_fundamental;
  template &lt;class T&gt; struct is_object;
  template &lt;class T&gt; struct is_scalar;
  template &lt;class T&gt; struct is_compound;
  template &lt;class T&gt; struct is_member_pointer;

  // type properties:
  template &lt;class T&gt; struct is_const;
  template &lt;class T&gt; struct is_volatile;
  template &lt;class T&gt; struct is_trivial;
  template &lt;class T&gt; struct is_trivially_copyable;
  template &lt;class T&gt; struct is_standard_layout;
  template &lt;class T&gt; struct is_pod;
  template &lt;class T&gt; struct is_empty;
  template &lt;class T&gt; struct is_polymorphic;
  template &lt;class T&gt; struct is_abstract;
  template &lt;class T&gt; struct is_final;
  template &lt;class T&gt; struct is_aggregate;
  template &lt;class T&gt; struct is_signed;
  template &lt;class T&gt; struct is_unsigned;
  template &lt;class T, class... Args&gt; struct is_constructible;
  template &lt;class T&gt; struct is_default_constructible;
  template &lt;class T&gt; struct is_copy_constructible;
  template &lt;class T&gt; struct is_move_constructible;
  template &lt;class T, class U&gt; struct is_assignable;
  template &lt;class T&gt; struct is_copy_assignable;
  template &lt;class T&gt; struct is_move_assignable;
  template &lt;class T, class U&gt; struct is_swappable_with;
  template &lt;class T&gt; struct is_swappable;
  template &lt;class T&gt; struct is_destructible;
  template &lt;class T, class... Args&gt; struct is_trivially_constructible;
  template &lt;class T&gt; struct is_trivially_default_constructible;
  template &lt;class T&gt; struct is_trivially_copy_constructible;
  template &lt;class T&gt; struct is_trivially_move_constructible;
  template &lt;class T, class U&gt; struct is_trivially_assignable;
  template &lt;class T&gt; struct is_trivially_copy_assignable;
  template &lt;class T&gt; struct is_trivially_move_assignable;
  template &lt;class T&gt; struct is_trivially_destructible;
  template &lt;class T, class... Args&gt; struct is_nothrow_constructible;
  template &lt;class T&gt; struct is_nothrow_default_constructible;
  template &lt;class T&gt; struct is_nothrow_copy_constructible;
  template &lt;class T&gt; struct is_nothrow_move_constructible;
  template &lt;class T, class U&gt; struct is_nothrow_assignable;
  template &lt;class T&gt; struct is_nothrow_copy_assignable;
  template &lt;class T&gt; struct is_nothrow_move_assignable;
  template &lt;class T, class U&gt; struct is_nothrow_swappable_with;
  template &lt;class T&gt; struct is_nothrow_swappable;
  template &lt;class T&gt; struct is_nothrow_destructible;
  template &lt;class T&gt; struct has_virtual_destructor;
  template &lt;class T&gt; struct has_unique_object_representations;

  // type property queries:
  template &lt;class T&gt; struct alignment_of;
  template &lt;class T&gt; struct rank;
  template &lt;class T, unsigned I = 0&gt; struct extent;

  // type relations:
  template &lt;class T, class U&gt; struct is_same;
  template &lt;class Base, class Derived&gt; struct is_base_of;
  template &lt;class From, class To&gt; struct is_convertible;
  template &lt;class Fn, class... ArgTypes&gt; struct is_invocable;
  template &lt;class R, class Fn, class... ArgTypes&gt; struct is_invocable_r;
  template &lt;class Fn, class... ArgTypes&gt; struct is_nothrow_invocable;
  template &lt;class R, class Fn, class... ArgTypes&gt; struct is_nothrow_invocable_r;

  // const-volatile modifications:
  template &lt;class T&gt; struct remove_const;
  template &lt;class T&gt; struct remove_volatile;
  template &lt;class T&gt; struct remove_cv;
  template &lt;class T&gt; struct add_const;
  template &lt;class T&gt; struct add_volatile;
  template &lt;class T&gt; struct add_cv;
  template &lt;class T&gt;
  using remove_const_t = typename remove_const&lt;T&gt;::type;
  template &lt;class T&gt;
  using remove_volatile_t = typename remove_volatile&lt;T&gt;::type;
  template &lt;class T&gt;
  using remove_cv_t = typename remove_cv&lt;T&gt;::type;
  template &lt;class T&gt;
  using add_const_t = typename add_const&lt;T&gt;::type;
  template &lt;class T&gt;
  using add_volatile_t = typename add_volatile&lt;T&gt;::type;
  template &lt;class T&gt;
  using add_cv_t = typename add_cv&lt;T&gt;::type;

  // reference modifications:
  template &lt;class T&gt; struct remove_reference;
  template &lt;class T&gt; struct add_lvalue_reference;
  template &lt;class T&gt; struct add_rvalue_reference;
  template &lt;class T&gt;
  using remove_reference_t = typename remove_reference&lt;T&gt;::type;
  template &lt;class T&gt;
  using add_lvalue_reference_t = typename add_lvalue_reference&lt;T&gt;::type;
  template &lt;class T&gt;
  using add_rvalue_reference_t = typename add_rvalue_reference&lt;T&gt;::type;

  // sign modifications:
  template &lt;class T&gt; struct make_signed;
  template &lt;class T&gt; struct make_unsigned;
  template &lt;class T&gt;
  using make_signed_t = typename make_signed&lt;T&gt;::type;
  template &lt;class T&gt;
  using make_unsigned_t = typename make_unsigned&lt;T&gt;::type;

  // array modifications:
  template &lt;class T&gt; struct remove_extent;
  template &lt;class T&gt; struct remove_all_extents;
  template &lt;class T&gt;
  using remove_extent_t = typename remove_extent&lt;T&gt;::type;
  template &lt;class T&gt;
  using remove_all_extents_t = typename remove_all_extents&lt;T&gt;::type;

  // pointer modifications:
  template &lt;class T&gt; struct remove_pointer;
  template &lt;class T&gt; struct add_pointer;
  template &lt;class T&gt;
  using remove_pointer_t = typename remove_pointer&lt;T&gt;::type;
  template &lt;class T&gt;
  using add_pointer_t = typename add_pointer&lt;T&gt;::type;

  // other transformations:
  template &lt;size_t Len,
  size_t Align = /*default-alignment*/ &gt; 
  struct aligned_storage;
  template &lt;size_t Len, class... Types&gt; struct aligned_union;
  template &lt;class T&gt; struct decay;
  template &lt;bool, class T = void&gt; struct enable_if;
  template &lt;bool, class T, class F&gt; struct conditional;
  template &lt;class... T&gt; struct common_type;
  template &lt;class T&gt; struct underlying_type;
  template &lt;class&gt; class result_of; // not defined
  template &lt;class F, class... ArgTypes&gt; class result_of&lt;F(ArgTypes...)&gt;;
  template &lt;class F, class... ArgTypes&gt; class invoke_result;
  template &lt;size_t Len,
  size_t Align = /*default-alignment*/ &gt; 
  using aligned_storage_t = typename aligned_storage&lt;Len, Align&gt;::type;
  template &lt;size_t Len, class... Types&gt;
  using aligned_union_t = typename aligned_union&lt;Len, Types...&gt;::type;
  template &lt;class T&gt;
  using decay_t = typename decay&lt;T&gt;::type;
  template &lt;bool b, class T = void&gt;
  using enable_if_t = typename enable_if&lt;b, T&gt;::type;
  template &lt;bool b, class T, class F&gt;
  using conditional_t = typename conditional&lt;b, T, F&gt;::type;
  template &lt;class... T&gt;
  using common_type_t = typename common_type&lt;T...&gt;::type;
  template &lt;class T&gt;
  using underlying_type_t = typename underlying_type&lt;T&gt;::type;
  template &lt;class T&gt;
  using result_of_t = typename result_of&lt;T&gt;::type;
  template &lt;class F, class... ArgTypes&gt; 
  using invoke_result_t = typename invoke_result&lt;F, ArgTypes...&gt;::type;
  template &lt;class...&gt;
  using void_t = void;

  // logical operator traits:
  template&lt;class... B&gt; struct conjunction;
  template&lt;class... B&gt; struct disjunction;
  template&lt;class B&gt; struct negation;

  // primary type categories
  template &lt;class T&gt; inline constexpr bool is_void_v
  = is_void&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_null_pointer_v
  = is_null_pointer&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_integral_v
  = is_integral&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_floating_point_v
  = is_floating_point&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_array_v
  = is_array&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_pointer_v
  = is_pointer&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_lvalue_reference_v
  = is_lvalue_reference&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_rvalue_reference_v
  = is_rvalue_reference&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_member_object_pointer_v
  = is_member_object_pointer&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_member_function_pointer_v
  = is_member_function_pointer&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_enum_v
  = is_enum&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_union_v
  = is_union&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_class_v
  = is_class&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_function_v
  = is_function&lt;T&gt;::value;

  // composite type categories
  template &lt;class T&gt; inline constexpr bool is_reference_v
  = is_reference&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_arithmetic_v
  = is_arithmetic&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_fundamental_v
  = is_fundamental&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_object_v
  = is_object&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_scalar_v
  = is_scalar&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_compound_v
  = is_compound&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_member_pointer_v
  = is_member_pointer&lt;T&gt;::value;

  // type properties
  template &lt;class T&gt; inline constexpr bool is_const_v
  = is_const&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_volatile_v
  = is_volatile&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivial_v
  = is_trivial&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivially_copyable_v
  = is_trivially_copyable&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_standard_layout_v
  = is_standard_layout&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_pod_v
  = is_pod&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_empty_v
  = is_empty&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_polymorphic_v
  = is_polymorphic&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_abstract_v
  = is_abstract&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_final_v
  = is_final&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_aggregate_v
  = is_aggregate&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_signed_v
  = is_signed&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_unsigned_v
  = is_unsigned&lt;T&gt;::value;
  template &lt;class T, class... Args&gt; inline constexpr bool is_constructible_v
  = is_constructible&lt;T, Args...&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_default_constructible_v
  = is_default_constructible&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_copy_constructible_v
  = is_copy_constructible&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_move_constructible_v
  = is_move_constructible&lt;T&gt;::value;
  template &lt;class T, class U&gt; inline constexpr bool is_assignable_v
  = is_assignable&lt;T, U&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_copy_assignable_v
  = is_copy_assignable&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_move_assignable_v
  = is_move_assignable&lt;T&gt;::value;
  template &lt;class T, class U&gt; inline constexpr bool is_swappable_with_v
  = is_swappable_with&lt;T, U&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_swappable_v
  = is_swappable&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_destructible_v
  = is_destructible&lt;T&gt;::value;
  template &lt;class T, class... Args&gt; inline constexpr bool is_trivially_constructible_v
  = is_trivially_constructible&lt;T, Args...&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivially_default_constructible_v
  = is_trivially_default_constructible&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivially_copy_constructible_v
  = is_trivially_copy_constructible&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivially_move_constructible_v
  = is_trivially_move_constructible&lt;T&gt;::value;
  template &lt;class T, class U&gt; inline constexpr bool is_trivially_assignable_v
  = is_trivially_assignable&lt;T, U&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivially_copy_assignable_v
  = is_trivially_copy_assignable&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivially_move_assignable_v
  = is_trivially_move_assignable&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_trivially_destructible_v
  = is_trivially_destructible&lt;T&gt;::value;
  template &lt;class T, class... Args&gt; inline constexpr bool is_nothrow_constructible_v
  = is_nothrow_constructible&lt;T, Args...&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_nothrow_default_constructible_v
  = is_nothrow_default_constructible&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_nothrow_copy_constructible_v
  = is_nothrow_copy_constructible&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_nothrow_move_constructible_v
  = is_nothrow_move_constructible&lt;T&gt;::value;
  template &lt;class T, class U&gt; inline constexpr bool is_nothrow_assignable_v
  = is_nothrow_assignable&lt;T, U&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_nothrow_copy_assignable_v
  = is_nothrow_copy_assignable&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_nothrow_move_assignable_v
  = is_nothrow_move_assignable&lt;T&gt;::value;
  template &lt;class T, class U&gt; inline constexpr bool is_nothrow_swappable_with_v
  = is_nothrow_swappable_with&lt;T, U&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_nothrow_swappable_v
  = is_nothrow_swappable&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool is_nothrow_destructible_v
  = is_nothrow_destructible&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool has_virtual_destructor_v
  = has_virtual_destructor&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr bool has_unique_object_representations_v
  = has_unique_object_representations&lt;T&gt;::value;

  // type property queries
  template &lt;class T&gt; inline constexpr size_t alignment_of_v
  = alignment_of&lt;T&gt;::value;
  template &lt;class T&gt; inline constexpr size_t rank_v
  = rank&lt;T&gt;::value;
  template &lt;class T, unsigned I = 0&gt; inline constexpr size_t extent_v
  = extent&lt;T, I&gt;::value;

  // type relations
  template &lt;class T, class U&gt; inline constexpr bool is_same_v
  = is_same&lt;T, U&gt;::value;
  template &lt;class Base, class Derived&gt; inline constexpr bool is_base_of_v
  = is_base_of&lt;Base, Derived&gt;::value;
  template &lt;class From, class To&gt; inline constexpr bool is_convertible_v
  = is_convertible&lt;From, To&gt;::value;

  template &lt;class Fn, class... ArgTypes&gt; 
  inline constexpr bool is_invocable_v
    = is_invocable&lt;Fn, ArgTypes...&gt;::value;
  template &lt;class R, class Fn, class... ArgTypes&gt;
  inline constexpr bool is_invocable_r_v
    = is_invocable_r&lt;R, Fn, ArgTypes...&gt;::value;
  template &lt;class Fn, class... ArgTypes&gt;
  inline constexpr bool is_nothrow_invocable_v
    = is_nothrow_invocable&lt;Fn, ArgTypes...&gt;::value;
  template &lt;class R, class Fn, class... ArgTypes&gt;
  inline constexpr bool is_nothrow_invocable_r_v
    = is_nothrow_invocable_r&lt;R, Fn, ArgTypes...&gt;::value;

  // logical operator traits:
  template&lt;class... B&gt; inline constexpr bool conjunction_v = conjunction&lt;B...&gt;::value;
  template&lt;class... B&gt; inline constexpr bool disjunction_v = disjunction&lt;B...&gt;::value;
  template&lt;class B&gt; inline constexpr bool negation_v = negation&lt;B&gt;::value;
} // namespace std

}}

====Class {{lc|std::integral_constant}}====
{{source|1=
namespace std {
  template &lt;class T, T v&gt;
  struct integral_constant {
    static constexpr T value = v;
    using value_type = T;
    using type = integral_constant&lt;T, v&gt;;
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; }
  };
}
}}

[[zh:cpp/header/type_traits]]</text>
      <sha1>0aeuj8lmskbu7spvkzcubjluwwsplb5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/typeindex</title>
    <ns>0</ns>
    <id>9741</id>
    <revision>
      <id>90194</id>
      <parentid>57541</parentid>
      <timestamp>2017-02-09T15:58:32Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1321">{{cpp/header/title|typeindex}}
{{cpp/header/navbar}}

This header is part of the [[cpp/types|types support]] library.

===Classes===
{{dsc begin}}
{{dsc inc | cpp/types/dsc type_index}}
{{dsc inc | cpp/types/type_index/dsc hash}}
{{dsc h2|Forward declarations}}
{{dsc header|functional}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

===Synopsis===
{{source|

namespace std {
    class type_index;
    template &lt;class T&gt; struct hash;
    template&lt;&gt; struct hash&lt;type_index&gt;;
}

}}

====Class {{lc|std::type_index}}====
{{source|

class type_index {
public:
    type_index(const type_info&amp; rhs) noexcept;
    bool operator{{==}}(const type_index&amp; rhs) const noexcept;
    bool operator!{{=}}(const type_index&amp; rhs) const noexcept;
    bool operator&lt; (const type_index&amp; rhs) const noexcept;
    bool operator&lt;{{=}} (const type_index&amp; rhs) const noexcept;
    bool operator&gt; (const type_index&amp; rhs) const noexcept;
    bool operator&gt;{{=}} (const type_index&amp; rhs) const noexcept;
    size_t hash_code() const;
    const char* name() const;
private:
    const type_info* target; // exposition only
    // Note that the use of a pointer here, rather than a reference,
    // means that the default copy/move constructor and assignment
    // operators will be provided and work as expected.
};

}}

[[zh:cpp/header/typeindex]]</text>
      <sha1>nif70jbrmup57h4vbhngmg677ww3kpq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/typeinfo</title>
    <ns>0</ns>
    <id>9668</id>
    <revision>
      <id>91252</id>
      <parentid>88772</parentid>
      <timestamp>2017-03-30T12:29:05Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1409">{{cpp/header/title|typeinfo}}
{{cpp/header/navbar}}

This header is part of the [[cpp/types|type support]] library.

===Classes===
{{dsc begin}}
{{dsc inc | cpp/types/dsc type_info}}
{{dsc inc | cpp/types/dsc bad_typeid}}
{{dsc inc | cpp/types/dsc bad_cast}}
{{dsc end}}

===Synopsis===

{{source|1=
namespace std {
  class type_info;
  class bad_cast;
  class bad_typeid;
}
}}

====Class {{lc|std::type_info}}====
{{source|1=
class type_info {
public:
  virtual ~type_info();
  bool operator==(const type_info&amp; rhs) const noexcept;
  bool operator!=(const type_info&amp; rhs) const noexcept;
  bool before(const type_info&amp; rhs) const noexcept;
  size_t hash_code() const noexcept;
  const char* name() const noexcept;
  type_info(const type_info&amp; rhs) = delete; // cannot be copied
  type_info&amp; operator=(const type_info&amp; rhs) = delete; // cannot be copied
};
}}

====Class {{lc|std::bad_cast}}====
{{source|1=
class bad_cast : public exception {
public:
  bad_cast() noexcept;
  bad_cast(const bad_cast&amp;) noexcept;
  bad_cast&amp; operator=(const bad_cast&amp;) noexcept;
  const char* what() const noexcept override;
};
}}

====Class {{lc|std::bad_typeid}}====
{{source|1=
class bad_typeid : public exception {
public:
  bad_typeid() noexcept;
  bad_typeid(const bad_typeid&amp;) noexcept;
  bad_typeid&amp; operator=(const bad_typeid&amp;) noexcept;
  const char* what() const noexcept override;
};
}}

[[zh:cpp/header/typeinfo]]</text>
      <sha1>rq8mdpxtcdjf99k0zmznqiuqh2ka71q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/unordered map</title>
    <ns>0</ns>
    <id>9797</id>
    <revision>
      <id>57545</id>
      <parentid>49598</parentid>
      <timestamp>2013-06-01T05:55:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="12798">{{cpp/header/title|unordered_map}}
{{cpp/header/navbar}}

This header is part of the [[cpp/container|containers]] library.

{{dsc begin}}
{{dsc h1|Includes}}
{{dsc | {{header|initializer_list}} {{mark c++11}} }}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc unordered_map}}
{{dsc inc | cpp/container/dsc unordered_multimap}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_map}}
{{dsc inc | cpp/container/dsc swap2 | unordered_map}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_multimap}}
{{dsc inc | cpp/container/dsc swap2 | unordered_multimap}}
{{dsc end}}

===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std {
    
    // class template unordered_map:
    template &lt;class Key,
        class T,
        class Hash {{=}} hash&lt;Key&gt;,
        class Pred {{=}} std::equal_to&lt;Key&gt;,
        class Alloc {{=}} std::allocator&lt;std::pair&lt;const Key, T&gt; &gt; &gt;
    class unordered_map;
    
    // 23.5.5, class template unordered_multimap:
    template &lt;class Key,
        class T,
        class Hash {{=}} hash&lt;Key&gt;,
        class Pred {{=}} std::equal_to&lt;Key&gt;,
        class Alloc {{=}} std::allocator&lt;std::pair&lt;const Key, T&gt; &gt; &gt;
    class unordered_multimap;
    
    template &lt;class Key, class T, class Hash, class Pred, class Alloc&gt;
    void swap(unordered_map&lt;Key, T, Hash, Pred, Alloc&gt;&amp; x,
              unordered_map&lt;Key, T, Hash, Pred, Alloc&gt;&amp; y);
    template &lt;class Key, class T, class Hash, class Pred, class Alloc&gt;
    void swap(unordered_multimap&lt;Key, T, Hash, Pred, Alloc&gt;&amp; x,
              unordered_multimap&lt;Key, T, Hash, Pred, Alloc&gt;&amp; y);
    
    template &lt;class Key, class T, class Hash, class Pred, class Alloc&gt;
    bool operator{{=}}{{=}}(const unordered_map&lt;Key, T, Hash, Pred, Alloc&gt;&amp; a,
                            const unordered_map&lt;Key, T, Hash, Pred, Alloc&gt;&amp; b);
    template &lt;class Key, class T, class Hash, class Pred, class Alloc&gt;
    bool operator!{{=}}(const unordered_map&lt;Key, T, Hash, Pred, Alloc&gt;&amp; a,
                        const unordered_map&lt;Key, T, Hash, Pred, Alloc&gt;&amp; b);
    template &lt;class Key, class T, class Hash, class Pred, class Alloc&gt;
    bool operator{{=}}{{=}}(const unordered_multimap&lt;Key, T, Hash, Pred, Alloc&gt;&amp; a,
                            const unordered_multimap&lt;Key, T, Hash, Pred, Alloc&gt;&amp; b);
    template &lt;class Key, class T, class Hash, class Pred, class Alloc&gt;
    bool operator!{{=}}(const unordered_multimap&lt;Key, T, Hash, Pred, Alloc&gt;&amp; a,
                        const unordered_multimap&lt;Key, T, Hash, Pred, Alloc&gt;&amp; b);
    
} // namespace std

}}

====Class {{lc|std::unordered_map}}====
{{source|

template &lt;class Key,
    class T,
    class Hash {{=}} hash&lt;Key&gt;,
    class Pred {{=}} std::equal_to&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;std::pair&lt;const Key, T&gt; &gt; &gt;
class unordered_map
{
public:
    // types
    typedef Key                                         key_type;
    typedef Key                                         value_type;
    typedef Hash                                        hasher;
    typedef Pred                                        key_equal;
    typedef Allocator                                   allocator_type;
    typedef typename allocator_type::pointer            pointer;
    typedef typename allocator_type::const_pointer      const_pointer;
    typedef typename allocator_type::reference          reference;
    typedef typename allocator_type::const_reference    const_reference;
    typedef /*implementation-defined*/                  size_type;
    typedef /*implementation-defined*/                  difference_type;
    typedef /*implementation-defined*/                  iterator;
    typedef /*implementation-defined*/                  const_iterator;
    typedef /*implementation-defined*/                  local_iterator;
    typedef /*implementation-defined*/                  const_local_iterator;
    
    // construct/destroy/copy
    explicit unordered_map(size_type n {{=}} see below,
                           const hasher&amp; hf {{=}} hasher(),
                           const key_equal&amp; eql {{=}} key_equal(),
                           const allocator_type&amp; a {{=}} allocator_type());
    template &lt;class InputIterator&gt;
    unordered_map(InputIterator f, InputIterator l,
                  size_type n {{=}} see below,
                  const hasher&amp; hf {{=}} hasher(),
                  const key_equal&amp; eql {{=}} key_equal(),
                  const allocator_type&amp; a {{=}} allocator_type());
    unordered_map(const unordered_map&amp;);
    unordered_map(unordered_map&amp;&amp;);
    explicit unordered_map(const Allocator&amp;);
    unordered_map(const unordered_map&amp;, const Allocator&amp;);
    unordered_map(unordered_map&amp;&amp;, const Allocator&amp;);
    unordered_map(initializer_list&lt;value_type&gt;,
                  size_type {{=}} see below,
                  const hasher&amp; hf {{=}} hasher(),
                  const key_equal&amp; eql {{=}} key_equal(),
                  const allocator_type&amp; a {{=}} allocator_type());
    ~unordered_map();
    unordered_map&amp; operator{{=}}(const unordered_map&amp;);
    unordered_map&amp; operator{{=}}(unordered_map&amp;&amp;);
    unordered_map&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    allocator_type get_allocator() const noexcept;
    
    // size and capacity
    bool empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    
    // iterators
    iterator       begin() noexcept;
    const_iterator begin() const noexcept;
    iterator       end() noexcept;
    const_iterator end() const noexcept;
    const_iterator cbegin() const noexcept;
    const_iterator cend() const noexcept;
    
    // modifiers
    template &lt;class... Args&gt; pair&lt;iterator, bool&gt; emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
    pair&lt;iterator, bool&gt; insert(const value_type&amp; obj);
    template &lt;class P&gt; pair&lt;iterator, bool&gt; insert(P&amp;&amp; obj);
    iterator insert(const_iterator hint, const value_type&amp; obj);
    template &lt;class P&gt; iterator insert(const_iterator hint, P&amp;&amp; obj);
    template &lt;class InputIterator&gt; void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; k);
    iterator erase(const_iterator first, const_iterator last);
    void clear() noexcept;
    
    void swap(unordered_map&amp;);
    
    
    // observers
    hasher hash_function() const;
    key_equal key_eq() const;
    
    // lookup
    iterator find(const key_type&amp; k);
    const_iterator find(const key_type&amp; k) const;
    size_type count(const key_type&amp; k) const;
    std::pair&lt;iterator, iterator&gt;
    equal_range(const key_type&amp; k);
    std::pair&lt;const_iterator, const_iterator&gt; equal_range(const key_type&amp; k) const;
    mapped_type&amp; operator[](const key_type&amp; k);
    mapped_type&amp; operator[](key_type&amp;&amp; k);
    mapped_type&amp; at(const key_type&amp; k);
    const mapped_type&amp; at(const key_type&amp; k) const;
    
    // bucket interface
    size_type bucket_count() const noexcept;
    size_type max_bucket_count() const noexcept;
    size_type bucket_size(size_type n) const;
    size_type bucket(const key_type&amp; k) const;
    local_iterator begin(size_type n);
    const_local_iterator begin(size_type n) const;
    local_iterator end(size_type n);
    const_local_iterator end(size_type n) const;
    const_local_iterator cbegin(size_type n) const;
    const_local_iterator cend(size_type n) const;
    // hash policy
    float load_factor() const noexcept;
    float max_load_factor() const noexcept;
    void max_load_factor(float z);
    void rehash(size_type n);
    void reserve(size_type n);
};

}}

====Class {{lc|std::unordered_multimap}}====
{{source|

template &lt;class Key,
class T,
class Hash {{=}} hash&lt;Key&gt;,
class Pred {{=}} std::equal_to&lt;Key&gt;,
class Allocator {{=}} std::allocator&lt;std::pair&lt;const Key, T&gt; &gt; &gt;
class unordered_multimap
{
public:
    // types
    typedef Key                                         key_type;
    typedef Key                                         value_type;
    typedef Hash                                        hasher;
    typedef Pred                                        key_equal;
    typedef Allocator                                   allocator_type;
    typedef typename allocator_type::pointer            pointer;
    typedef typename allocator_type::const_pointer      const_pointer;
    typedef typename allocator_type::reference          reference;
    typedef typename allocator_type::const_reference    const_reference;
    typedef /*implementation-defined*/                  size_type;
    typedef /*implementation-defined*/                  difference_type;
    typedef /*implementation-defined*/                  iterator;
    typedef /*implementation-defined*/                  const_iterator;
    typedef /*implementation-defined*/                  local_iterator;
    typedef /*implementation-defined*/                  const_local_iterator;
    
    // construct/destroy/copy
    explicit unordered_multimap(size_type n {{=}} see below,
                                const hasher&amp; hf {{=}} hasher(),
                                const key_equal&amp; eql {{=}} key_equal(),
                                const allocator_type&amp; a {{=}} allocator_type());
    template &lt;class InputIterator&gt;
    unordered_multimap(InputIterator f, InputIterator l,
                       size_type n {{=}} see below,
                       const hasher&amp; hf {{=}} hasher(),
                       const key_equal&amp; eql {{=}} key_equal(),
                       const allocator_type&amp; a {{=}} allocator_type());
    unordered_multimap(const unordered_multimap&amp;);
    unordered_multimap(unordered_multimap&amp;&amp;);
    explicit unordered_multimap(const Allocator&amp;);
    unordered_multimap(const unordered_multimap&amp;, const Allocator&amp;);
    unordered_multimap(unordered_multimap&amp;&amp;, const Allocator&amp;);
    unordered_multimap(initializer_list&lt;value_type&gt;,
                       size_type {{=}} see below,
                       const hasher&amp; hf {{=}} hasher(),
                       const key_equal&amp; eql {{=}} key_equal(),
                       const allocator_type&amp; a {{=}} allocator_type());
    ~unordered_multimap();
    unordered_multimap&amp; operator{{=}}(const unordered_multimap&amp;);
    unordered_multimap&amp; operator{{=}}(unordered_multimap&amp;&amp;);
    unordered_multimap&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    allocator_type get_allocator() const noexcept;
    
    
    // size and capacity
    bool empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    
    // iterators
    iterator       begin() noexcept;
    const_iterator begin() const noexcept;
    iterator       end() noexcept;
    const_iterator end() const noexcept;
    const_iterator cbegin() const noexcept;
    const_iterator cend() const noexcept;
    
    // modifiers
    template &lt;class... Args&gt; iterator emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
    iterator insert(const value_type&amp; obj);
    template &lt;class P&gt; iterator insert(P&amp;&amp; obj);
    iterator insert(const_iterator hint, const value_type&amp; obj);
    template &lt;class P&gt; iterator insert(const_iterator hint, P&amp;&amp; obj);
    template &lt;class InputIterator&gt; void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; k);
    iterator erase(const_iterator first, const_iterator last);
    void clear() noexcept;
    
    void swap(unordered_multimap&amp;);
    
    
    
    // observers
    hasher hash_function() const;
    key_equal key_eq() const;
    
    // lookup
    iterator find(const key_type&amp; k);
    const_iterator find(const key_type&amp; k) const;
    size_type count(const key_type&amp; k) const;
    std::pair&lt;iterator, iterator&gt;
    equal_range(const key_type&amp; k);
    std::pair&lt;const_iterator, const_iterator&gt; equal_range(const key_type&amp; k) const;
    
    // bucket interface
    size_type bucket_count() const noexcept;
    size_type max_bucket_count() const noexcept;
    size_type bucket_size(size_type n) const;
    size_type bucket(const key_type&amp; k) const;
    local_iterator begin(size_type n);
    const_local_iterator begin(size_type n) const;
    local_iterator end(size_type n);
    const_local_iterator end(size_type n) const;
    const_local_iterator cbegin(size_type n) const;
    const_local_iterator cend(size_type n) const;
    // hash policy
    float load_factor() const noexcept;
    float max_load_factor() const noexcept;
    void max_load_factor(float z);
    void rehash(size_type n);
    void reserve(size_type n);
};


}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/unordered set</title>
    <ns>0</ns>
    <id>9796</id>
    <revision>
      <id>57548</id>
      <parentid>49599</parentid>
      <timestamp>2013-06-01T05:55:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="12464">{{cpp/header/title|unordered_set}}
{{cpp/header/navbar}}

This header is part of the [[cpp/container|containers]] library.

{{dsc begin}}
{{dsc h1|Includes}}
{{dsc | {{header|initializer_list}} {{mark c++11}} }}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc unordered_set}}
{{dsc inc | cpp/container/dsc unordered_multiset}}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_set}}
{{dsc inc | cpp/container/dsc swap2 | unordered_set}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_multiset}}
{{dsc inc | cpp/container/dsc swap2 | unordered_multiset}}
{{dsc end}}

===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std {
    // class template unordered_set:
    template &lt;class Key,
            class Hash {{=}} hash&lt;Key&gt;,
            class Pred {{=}} std::equal_to&lt;Key&gt;,
            class Alloc {{=}} std::allocator&lt;Key&gt; &gt;
        class unordered_set;
        
    // class template unordered_multiset:
    template &lt;class Key,
            class Hash {{=}} hash&lt;Key&gt;,
            class Pred {{=}} std::equal_to&lt;Key&gt;,
            class Alloc {{=}} std::allocator&lt;Key&gt; &gt;
        class unordered_multiset;
        
    template &lt;class Key, class Hash, class Pred, class Alloc&gt;
        void swap(unordered_set&lt;Key, Hash, Pred, Alloc&gt;&amp; x,
                unordered_set&lt;Key, Hash, Pred, Alloc&gt;&amp; y);
    template &lt;class Key, class Hash, class Pred, class Alloc&gt;
        void swap(unordered_multiset&lt;Key, Hash, Pred, Alloc&gt;&amp; x,
                unordered_multiset&lt;Key, Hash, Pred, Alloc&gt;&amp; y);
        
    template &lt;class Key, class Hash, class Pred, class Alloc&gt;
        bool operator{{=}}{{=}}(const unordered_set&lt;Key, Hash, Pred, Alloc&gt;&amp; a,
                        const unordered_set&lt;Key, Hash, Pred, Alloc&gt;&amp; b);
    template &lt;class Key, class Hash, class Pred, class Alloc&gt;
        bool operator!{{=}}(const unordered_set&lt;Key, Hash, Pred, Alloc&gt;&amp; a,
                        const unordered_set&lt;Key, Hash, Pred, Alloc&gt;&amp; b);
    template &lt;class Key, class Hash, class Pred, class Alloc&gt;
        bool operator{{=}}{{=}}(const unordered_multiset&lt;Key, Hash, Pred, Alloc&gt;&amp; a,
                        const unordered_multiset&lt;Key, Hash, Pred, Alloc&gt;&amp; b);
    template &lt;class Key, class Hash, class Pred, class Alloc&gt;
        bool operator!{{=}}(const unordered_multiset&lt;Key, Hash, Pred, Alloc&gt;&amp; a,
                        const unordered_multiset&lt;Key, Hash, Pred, Alloc&gt;&amp; b);
} // namespace std

}}


====Class {{lc|std::unordered_set}}====
{{source|

template &lt;class Key,
    class Hash {{=}} hash&lt;Key&gt;,
    class Pred {{=}} std::equal_to&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;Key&gt; &gt;
class unordered_set
{
public:
    // types
    typedef Key                                         key_type;
    typedef Key                                         value_type;
    typedef Hash                                        hasher;
    typedef Pred                                        key_equal;
    typedef Allocator                                   allocator_type;
    typedef typename allocator_type::pointer            pointer;
    typedef typename allocator_type::const_pointer      const_pointer;
    typedef typename allocator_type::reference          reference;
    typedef typename allocator_type::const_reference    const_reference;
    typedef /*implementation-defined*/                  size_type;
    typedef /*implementation-defined*/                  difference_type;
    
    typedef /*implementation-defined*/                  iterator;
    typedef /*implementation-defined*/                  const_iterator;
    typedef /*implementation-defined*/                  local_iterator;
    typedef /*implementation-defined*/                  const_local_iterator;
    
    // construct/destroy/copy
    explicit unordered_set(size_type n {{=}} implementation-defined,
                           const hasher&amp; hf {{=}} hasher(),
                           const key_equal&amp; eql {{=}} key_equal(),
                           const allocator_type&amp; a {{=}} allocator_type());
    template &lt;class InputIterator&gt;
    unordered_set(InputIterator f, InputIterator l,
                  size_type n {{=}} see below,
                  const hasher&amp; hf {{=}} hasher(),
                  const key_equal&amp; eql {{=}} key_equal(),
                  const allocator_type&amp; a {{=}} allocator_type());
    unordered_set(const unordered_set&amp;);
    unordered_set(unordered_set&amp;&amp;);
    explicit unordered_set(const Allocator&amp;);
    unordered_set(const unordered_set&amp;, const Allocator&amp;);
    unordered_set(unordered_set&amp;&amp;, const Allocator&amp;);
    unordered_set(initializer_list&lt;value_type&gt;,
                  size_type {{=}} see below,
                  const hasher&amp; hf {{=}} hasher(),
                  const key_equal&amp; eql {{=}} key_equal(),
                  const allocator_type&amp; a {{=}} allocator_type());
    ~unordered_set();
    unordered_set&amp; operator{{=}}(const unordered_set&amp;);
    unordered_set&amp; operator{{=}}(unordered_set&amp;&amp;);
    unordered_set&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    allocator_type get_allocator() const noexcept;
    
    // size and capacity
    bool      empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    
    // iterators
    iterator       begin() noexcept;
    const_iterator begin() const noexcept;
    iterator       end() noexcept;
    const_iterator end() const noexcept;
    const_iterator cbegin() const noexcept;
    const_iterator cend() const noexcept;
    
    // modifiers
    template &lt;class... Args&gt; pair&lt;iterator, bool&gt; emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
    pair&lt;iterator, bool&gt; insert(const value_type&amp; obj);
    pair&lt;iterator, bool&gt; insert(value_type&amp;&amp; obj);
    iterator insert(const_iterator hint, const value_type&amp; obj);
    iterator insert(const_iterator hint, value_type&amp;&amp; obj);
    template &lt;class InputIterator&gt; void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; k);
    iterator erase(const_iterator first, const_iterator last);
    void clear() noexcept;
    
    void swap(unordered_set&amp;);
    
    // observers
    hasher hash_function() const;
    key_equal key_eq() const;
    
    // lookup
    iterator       find(const key_type&amp; k);
    const_iterator find(const key_type&amp; k) const;
    size_type count(const key_type&amp; k) const;
    std::pair&lt;iterator, iterator&gt; equal_range(const key_type&amp; k);
    std::pair&lt;const_iterator, const_iterator&gt; equal_range(const key_type&amp; k) const;
    
    // bucket interface
    size_type bucket_count() const noexcept;
    size_type max_bucket_count() const noexcept;
    size_type bucket_size(size_type n) const;
    size_type bucket(const key_type&amp; k) const;
    local_iterator begin(size_type n);
    const_local_iterator begin(size_type n) const;
    local_iterator end(size_type n);
    const_local_iterator end(size_type n) const;
    const_local_iterator cbegin(size_type n) const;
    const_local_iterator cend(size_type n) const;
    
    // hash policy
    float load_factor() const noexcept;
    float max_load_factor() const noexcept;
    void max_load_factor(float z);
    void rehash(size_type n);
    void reserve(size_type n);
};

}}


====Class {{lc|std::unordered_multiset}}====
{{source|

template &lt;class Key,
    class Hash {{=}} hash&lt;Key&gt;,
    class Pred {{=}} std::equal_to&lt;Key&gt;,
    class Allocator {{=}} std::allocator&lt;Key&gt; &gt;
class unordered_multiset
{
public:
    // types
    typedef Key                                         key_type;
    typedef Key                                         value_type;
    typedef Hash                                        hasher;
    typedef Pred                                        key_equal;
    typedef Allocator                                   allocator_type;
    typedef typename allocator_type::pointer            pointer;
    typedef typename allocator_type::const_pointer      const_pointer;
    typedef typename allocator_type::reference          reference;
    typedef typename allocator_type::const_reference    const_reference;
    typedef /*implementation-defined*/                  size_type;
    typedef /*implementation-defined*/                  difference_type;
    typedef /*implementation-defined*/                  iterator;
    typedef /*implementation-defined*/                  const_iterator;
    typedef /*implementation-defined*/                  local_iterator;
    typedef /*implementation-defined*/                  const_local_iterator;
    
    // construct/destroy/copy
    explicit unordered_multiset(size_type n {{=}} /*implementation-defined*/,
                                const hasher&amp; hf {{=}} hasher(),
                                const key_equal&amp; eql {{=}} key_equal(),
                                const allocator_type&amp; a {{=}} allocator_type());
    template &lt;class InputIterator&gt;
    unordered_multiset(InputIterator f, InputIterator l,
                       size_type n {{=}} see below,
                       const hasher&amp; hf {{=}} hasher(),
                       const key_equal&amp; eql {{=}} key_equal(),
                       const allocator_type&amp; a {{=}} allocator_type());
    unordered_multiset(const unordered_multiset&amp;);
    unordered_multiset(unordered_multiset&amp;&amp;);
    explicit unordered_multiset(const Allocator&amp;);
    unordered_multiset(const unordered_multiset&amp;, const Allocator&amp;);
    unordered_multiset(unordered_multiset&amp;&amp;, const Allocator&amp;);
    unordered_multiset(initializer_list&lt;value_type&gt;,
                       size_type {{=}} see below,
                       const hasher&amp; hf {{=}} hasher(),
                       const key_equal&amp; eql {{=}} key_equal(),
                       const allocator_type&amp; a {{=}} allocator_type());
    ~unordered_multiset();
    unordered_multiset&amp; operator{{=}}(const unordered_multiset&amp;);
    unordered_multiset operator{{=}}(unordered_multiset&amp;&amp;);
    unordered_multiset&amp; operator{{=}}(initializer_list&lt;value_type&gt;);
    allocator_type get_allocator() const noexcept;
    
    // size and capacity
    bool empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    
    // iterators
    iterator       begin() noexcept;
    const_iterator begin() const noexcept;
    iterator       end() noexcept;
    const_iterator end() const noexcept;
    const_iterator cbegin() const noexcept;
    const_iterator cend() const noexcept;
    
    // modifiers
    template &lt;class... Args&gt; iterator emplace(Args&amp;&amp;... args);
    template &lt;class... Args&gt; iterator emplace_hint(const_iterator position, Args&amp;&amp;... args);
    iterator insert(const value_type&amp; obj);
    iterator insert(value_type&amp;&amp; obj);
    iterator insert(const_iterator hint, const value_type&amp; obj);
    iterator insert(const_iterator hint, value_type&amp;&amp; obj);
    template &lt;class InputIterator&gt; void insert(InputIterator first, InputIterator last);
    void insert(initializer_list&lt;value_type&gt;);
    
    iterator erase(const_iterator position);
    size_type erase(const key_type&amp; k);
    iterator erase(const_iterator first, const_iterator last);
    void clear() noexcept;
    
    void swap(unordered_multiset&amp;);
    
    // observers
    hasher hash_function() const;
    key_equal key_eq() const;
    
    // lookup
    iterator        find(const key_type&amp; k);
    const_iterator  find(const key_type&amp; k) const;
    size_type count(const key_type&amp; k) const;
    std::pair&lt;iterator, iterator&gt;             equal_range(const key_type&amp; k);
    std::pair&lt;const_iterator, const_iterator&gt; equal_range(const key_type&amp; k) const;
    
    // bucket interface
    size_type bucket_count() const noexcept;
    size_type max_bucket_count() const noexcept;
    size_type bucket_size(size_type n) const;
    size_type bucket(const key_type&amp; k) const;
    local_iterator       begin(size_type n);
    const_local_iterator begin(size_type n) const;
    local_iterator       end(size_type n);
    const_local_iterator end(size_type n) const;
    const_local_iterator cbegin(size_type n) const;
    const_local_iterator cend(size_type n) const;
    
    // hash policy
    float load_factor() const noexcept;
    float max_load_factor() const noexcept;
    void max_load_factor(float z);
    void rehash(size_type n);
    void reserve(size_type n);
};


}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/utility</title>
    <ns>0</ns>
    <id>9671</id>
    <revision>
      <id>88775</id>
      <parentid>88550</parentid>
      <timestamp>2016-12-11T03:01:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>n4618 synop (to/from char and inplace changes)</comment>
      <text xml:space="preserve" bytes="9598">{{cpp/header/title|utility}}
{{cpp/header/navbar}}

This header is part of the [[cpp/utility|general utility]] library.

{{dsc begin}}
{{dsc h1|Includes}}
{{dsc| {{header|initializer_list}}{{mark c++11}}}}
{{dsc h1|Namespaces}}
{{dsc | {{ttb|[[cpp/utility/rel_ops/operator_cmp|rel_ops]]}} | Provide automatic comparison operators }}
{{dsc namespace | std::rel_ops }}
{{dsc inc | cpp/utility/rel_ops/dsc operator_cmp}}
{{dsc h1|Functions}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/utility/dsc exchange}}
{{dsc inc | cpp/utility/dsc forward}}
{{dsc inc | cpp/utility/dsc move}}
{{dsc inc | cpp/utility/dsc move_if_noexcept}}
{{dsc inc | cpp/utility/dsc as_const}}
{{dsc inc | cpp/utility/dsc declval}}
{{dsc inc | cpp/utility/pair/dsc make_pair}}
{{dsc inc | cpp/utility/pair/dsc operator_cmp}}
{{dsc inc | cpp/utility/pair/dsc swap2}}
{{dsc inc | cpp/utility/pair/dsc get}}
{{dsc inc | cpp/utility/dsc to_chars}}
{{dsc inc | cpp/utility/dsc from_chars}}
{{dsc h1|Classes}}
{{dsc inc | cpp/utility/dsc pair}}
{{dsc inc | cpp/utility/dsc integer_sequence}}
{{dsc inc | cpp/utility/dsc chars_format}}
{{dsc h1|Helpers}}
{{dsc inc | cpp/utility/dsc piecewise_construct_t}}
{{dsc inc | cpp/utility/dsc piecewise_construct}}
{{dsc inc | cpp/utility/dsc in_place}}
{{dsc h2|Forward declarations}}
{{dsc inc | cpp/utility/dsc tuple}}
{{dsc end}}

===Synopsis===
{{source|1=
#include &lt;initializer_list&gt;
namespace std {
  // operators:
  namespace rel_ops {
    template&lt;class T&gt; bool operator!=(const T&amp;, const T&amp;);
    template&lt;class T&gt; bool operator&gt; (const T&amp;, const T&amp;);
    template&lt;class T&gt; bool operator&lt;=(const T&amp;, const T&amp;);
    template&lt;class T&gt; bool operator&gt;=(const T&amp;, const T&amp;);
  }
  // swap:
  template &lt;class T&gt;
  void swap(T&amp; a, T&amp; b) noexcept(/*see definition*/ );
  template &lt;class T, size_t N&gt;
  void swap(T (&amp;a)[N], T (&amp;b)[N]) noexcept(is_nothrow_swappable_v&lt;T&gt;);

  // exchange:
  template &lt;class T, class U=T&gt; T exchange(T&amp; obj, U&amp;&amp; new_val);

  // forward/move:
  template &lt;class T&gt;
  constexpr T&amp;&amp; forward(remove_reference_t&lt;T&gt;&amp; t) noexcept;
  template &lt;class T&gt;
  constexpr T&amp;&amp; forward(remove_reference_t&lt;T&gt;&amp;&amp; t) noexcept;
  template &lt;class T&gt;
  constexpr remove_reference_t&lt;T&gt;&amp;&amp; move(T&amp;&amp;) noexcept;
  template &lt;class T&gt;
  constexpr conditional_t&lt;!is_nothrow_move_constructible_v&lt;T&gt;
                          &amp;&amp; is_copy_constructible_v&lt;T&gt;, const T&amp;, T&amp;&amp;&gt;
  move_if_noexcept(T&amp; x) noexcept;

  // as_const:
  template &lt;class T&gt; constexpr add_const_t&lt;T&gt;&amp; as_const(T&amp; t) noexcept;
  template &lt;class T&gt; void as_const(const T&amp;&amp;) = delete;

  // declval:
  template &lt;class T&gt;
  add_rvalue_reference_t&lt;T&gt; declval() noexcept; // as unevaluated operand

  // Compile-time integer sequences
  template&lt;class T, T...&gt; struct integer_sequence;
  template&lt;size_t... I&gt;
  using index_sequence = integer_sequence&lt;size_t, I...&gt;;
  template&lt;class T, T N&gt;
  using make_integer_sequence = integer_sequence&lt;T, /*see definition*/ &gt;;
  template&lt;size_t N&gt;
  using make_index_sequence = make_integer_sequence&lt;size_t, N&gt;;
  template&lt;class... T&gt;
  using index_sequence_for = make_index_sequence&lt;sizeof...(T)&gt;;

  // pairs:
  template &lt;class T1, class T2&gt; struct pair;

  // pair specialized algorithms:
  template &lt;class T1, class T2&gt;
  constexpr bool operator==(const pair&lt;T1, T2&gt;&amp;, const pair&lt;T1, T2&gt;&amp;);
  template &lt;class T1, class T2&gt;
  constexpr bool operator&lt; (const pair&lt;T1, T2&gt;&amp;, const pair&lt;T1, T2&gt;&amp;);
  template &lt;class T1, class T2&gt;
  constexpr bool operator!=(const pair&lt;T1, T2&gt;&amp;, const pair&lt;T1, T2&gt;&amp;);
  template &lt;class T1, class T2&gt;
  constexpr bool operator&gt; (const pair&lt;T1, T2&gt;&amp;, const pair&lt;T1, T2&gt;&amp;);
  template &lt;class T1, class T2&gt;
  constexpr bool operator&gt;=(const pair&lt;T1, T2&gt;&amp;, const pair&lt;T1, T2&gt;&amp;);
  template &lt;class T1, class T2&gt;
  constexpr bool operator&lt;=(const pair&lt;T1, T2&gt;&amp;, const pair&lt;T1, T2&gt;&amp;);
  template &lt;class T1, class T2&gt;
  void swap(pair&lt;T1, T2&gt;&amp; x, pair&lt;T1, T2&gt;&amp; y) noexcept(noexcept(x.swap(y)));
  template &lt;class T1, class T2&gt;
  constexpr /*see definition*/ make_pair(T1&amp;&amp;, T2&amp;&amp;);

  // tuple-like access to pair:
  template &lt;class T&gt; class tuple_size;
  template &lt;size_t I, class T&gt; class tuple_element;
  template &lt;class T1, class T2&gt; struct tuple_size&lt;pair&lt;T1, T2&gt;&gt;;
  template &lt;class T1, class T2&gt; struct tuple_element&lt;0, pair&lt;T1, T2&gt;&gt;;
  template &lt;class T1, class T2&gt; struct tuple_element&lt;1, pair&lt;T1, T2&gt;&gt;;
  template&lt;size_t I, class T1, class T2&gt;
  constexpr tuple_element_t&lt;I, pair&lt;T1, T2&gt;&gt;&amp; get(pair&lt;T1, T2&gt;&amp;) noexcept;
  template&lt;size_t I, class T1, class T2&gt;
  constexpr tuple_element_t&lt;I, pair&lt;T1, T2&gt;&gt;&amp;&amp; get(pair&lt;T1, T2&gt;&amp;&amp;) noexcept;
  template&lt;size_t I, class T1, class T2&gt;
  constexpr const tuple_element_t&lt;I, pair&lt;T1, T2&gt;&gt;&amp; get(const pair&lt;T1, T2&gt;&amp;) noexcept;
  template&lt;size_t I, class T1, class T2&gt;
  constexpr const tuple_element_t&lt;I, pair&lt;T1, T2&gt;&gt;&amp;&amp; get(const pair&lt;T1, T2&gt;&amp;&amp;) noexcept;
  template &lt;class T, class U&gt;
  constexpr T&amp; get(pair&lt;T, U&gt;&amp; p) noexcept;
  template &lt;class T, class U&gt;
  constexpr const T&amp; get(const pair&lt;T, U&gt;&amp; p) noexcept;
  template &lt;class T, class U&gt;
  constexpr T&amp;&amp; get(pair&lt;T, U&gt;&amp;&amp; p) noexcept;
  template &lt;class T, class U&gt;
  constexpr const T&amp;&amp; get(const pair&lt;T, U&gt;&amp;&amp; p) noexcept;
  template &lt;class T, class U&gt;
  constexpr T&amp; get(pair&lt;U, T&gt;&amp; p) noexcept;
  template &lt;class T, class U&gt;
  constexpr const T&amp; get(const pair&lt;U, T&gt;&amp; p) noexcept;
  template &lt;class T, class U&gt;
  constexpr T&amp;&amp; get(pair&lt;U, T&gt;&amp;&amp; p) noexcept;
  template &lt;class T, class U&gt;
  constexpr const T&amp;&amp; get(const pair&lt;U, T&gt;&amp;&amp; p) noexcept;

  // pair piecewise construction
  struct piecewise_construct_t { };
  constexpr piecewise_construct_t piecewise_construct{};
  template &lt;class... Types&gt; class tuple; // defined in &lt;tuple&gt;

  // in-place construction
  struct in_place_t { explicit in_place_t() = default; };
  inline constexpr in_place_t in_place{};
  template &lt;class T&gt;
  struct in_place_type_t { explicit in_place_type_t() = default; };
  template &lt;class T&gt;
  inline constexpr in_place_type_t&lt;T&gt; in_place_type{};
  template &lt;size_t I&gt;
  struct in_place_index_t { explicit in_place_index_t() = default; };
  template &lt;size_t I&gt;
  inline constexpr in_place_index_t&lt;I&gt; in_place_index{};
  // floating-point format for primitive numerical conversion
  enum class chars_format {
    scientific = /*unspecified*/ ,
    fixed = /*unspecified*/ ,
    hex = /*unspecified*/ ,
    general = fixed {{!}} scientific
  };
  // primitive numerical output conversion
  struct to_chars_result {
    char* ptr;
    error_code ec;
  };
  to_chars_result to_chars(char* first, char* last, see below value, int base = 10);
  to_chars_result to_chars(char* first, char* last, float value);
  to_chars_result to_chars(char* first, char* last, double value);
  to_chars_result to_chars(char* first, char* last, long double value);
  to_chars_result to_chars(char* first, char* last, float value, chars_format fmt);
  to_chars_result to_chars(char* first, char* last, double value, chars_format fmt);
  to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt);
  to_chars_result to_chars(char* first, char* last, float value,
                           chars_format fmt, int precision);
  to_chars_result to_chars(char* first, char* last, double value,
                           chars_format fmt, int precision);
  to_chars_result to_chars(char* first, char* last, long double value,
                           chars_format fmt, int precision);
  // primitive numerical input conversion
  struct from_chars_result {
    const char* ptr;
    error_code ec;
  };
  from_chars_result from_chars(const char* first, const char* last,
                               /*see description*/ &amp; value, int base = 10);
  from_chars_result from_chars(const char* first, const char* last, float&amp; value,
                               chars_format fmt = chars_format::general);
  from_chars_result from_chars(const char* first, const char* last, double&amp; value,
                               chars_format fmt = chars_format::general);
  from_chars_result from_chars(const char* first, const char* last, long double&amp; value,
                               chars_format fmt = chars_format::general);
}
}}

====Class template {{lc|std::integer_sequence}} ====
{{source|1=
namespace std {
  template&lt;class T, T... I&gt;
  struct integer_sequence {
    using value_type = T;
    static constexpr size_t size() noexcept { return sizeof...(I); }
  };
}
}}

====Class {{lc|std::pair}}====
{{source|1=
namespace std {
  template &lt;class T1, class T2&gt;
  struct pair {
    using first_type = T1;
    using second_type = T2;
    T1 first;
    T2 second;
    pair(const pair&amp;) = default;
    pair(pair&amp;&amp;) = default;
    constexpr pair();
    /*conditionally-explicit*/ constexpr pair(const T1&amp; x, const T2&amp; y);
    template&lt;class U, class V&gt;
    /*conditionally-explicit*/  constexpr pair(U&amp;&amp; x, V&amp;&amp; y);
    template&lt;class U, class V&gt;
    /*conditionally-explicit*/  constexpr pair(const pair&lt;U, V&gt;&amp; p);
    template&lt;class U, class V&gt;
    /*conditionally-explicit*/  constexpr pair(pair&lt;U, V&gt;&amp;&amp; p);
    template &lt;class... Args1, class... Args2&gt;
    pair(piecewise_construct_t, tuple&lt;Args1...&gt; first_args, tuple&lt;Args2...&gt; second_args);
    pair&amp; operator=(const pair&amp; p);
    template&lt;class U, class V&gt; pair&amp; operator=(const pair&lt;U, V&gt;&amp; p);
    pair&amp; operator=(pair&amp;&amp; p) noexcept(/*see definition*/ );
    template&lt;class U, class V&gt; pair&amp; operator=(pair&lt;U, V&gt;&amp;&amp; p);
    void swap(pair&amp; p) noexcept(/*see definition*/);
  };
}
}}

===See also===
{{dsc begin}}
{{dsc| {{header|tuple}} | Defines {{lc|std::tuple}} }}
{{dsc| [[cpp/utility|Utility library]] }}
{{dsc end}}</text>
      <sha1>eyz1x8uujrzv3vqsu4073s28ty3tf77</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/valarray</title>
    <ns>0</ns>
    <id>9802</id>
    <revision>
      <id>77306</id>
      <parentid>57552</parentid>
      <timestamp>2015-03-21T14:41:59Z</timestamp>
      <contributor>
        <username>Bazzy</username>
        <id>405</id>
      </contributor>
      <comment>/* Synopsis */ + Classes</comment>
      <text xml:space="preserve" bytes="16900">{{cpp/header/title|valarray}}
{{cpp/header/navbar}}

This header is part of the [[cpp/numeric|numeric]] library.

===Classes===
{{dsc begin}}
{{dsc tclass | cpp/numeric/valarray | numeric arrays and array slices }}
{{dsc inc | cpp/numeric/valarray/dsc slice}}
{{dsc inc | cpp/numeric/valarray/dsc slice_array}}
{{dsc inc | cpp/numeric/valarray/dsc gslice}}
{{dsc inc | cpp/numeric/valarray/dsc gslice_array}}
{{dsc inc | cpp/numeric/valarray/dsc mask_array}}
{{dsc inc | cpp/numeric/valarray/dsc indirect_array}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc h2 | Operations}}
{{dsc inc | cpp/numeric/valarray/dsc swap2}}
{{dsc inc | cpp/numeric/valarray/dsc begin2}}
{{dsc inc | cpp/numeric/valarray/dsc end2}}
{{dsc inc | cpp/numeric/valarray/dsc operator_arith3}}
{{dsc inc | cpp/numeric/valarray/dsc operator_cmp}}
{{dsc inc | cpp/numeric/valarray/dsc abs}}

{{dsc h2 | Exponential functions}}
{{dsc inc | cpp/numeric/valarray/dsc exp}}
{{dsc inc | cpp/numeric/valarray/dsc log}}
{{dsc inc | cpp/numeric/valarray/dsc log10}}

{{dsc h2 | Power functions}}
{{dsc inc | cpp/numeric/valarray/dsc pow}}
{{dsc inc | cpp/numeric/valarray/dsc sqrt}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | cpp/numeric/valarray/dsc sin}}
{{dsc inc | cpp/numeric/valarray/dsc cos}}
{{dsc inc | cpp/numeric/valarray/dsc tan}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc inc | cpp/numeric/valarray/dsc atan2}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | cpp/numeric/valarray/dsc sinh}}
{{dsc inc | cpp/numeric/valarray/dsc cosh}}
{{dsc inc | cpp/numeric/valarray/dsc tanh}}
{{dsc end}}



===Synopsis===
{{source|

#include &lt;initializer_list&gt;

namespace std {
    template&lt;class T&gt; class valarray;       // An array of type T
    class slice;                            // a BLAS-like slice out of an array
    template&lt;class T&gt; class slice_array;   
    class gslice;                           // a generalized slice out of an array
    template&lt;class T&gt; class gslice_array;
    template&lt;class T&gt; class mask_array;     // a masked array
    template&lt;class T&gt; class indirect_array; // an indirected array
    
    template&lt;class T&gt; void swap(valarray&lt;T&gt;&amp;, valarray&lt;T&gt;&amp;) noexcept;
    
    template&lt;class T&gt; valarray&lt;T&gt; operator* (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator* (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator* (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator/ (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator/ (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator/ (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator% (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator% (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator% (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator+ (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator+ (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator+ (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator- (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator- (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator- (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator^ (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator^ (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator^ (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator&amp; (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator&amp; (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator&amp; (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator{{!}} (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator{{!}} (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator{{!}} (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator&lt;&lt;(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator&lt;&lt;(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator&lt;&lt;(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; operator&gt;&gt;(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator&gt;&gt;(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; operator&gt;&gt;(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;bool&gt; operator&amp;&amp;(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&amp;&amp;(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&amp;&amp;(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;bool&gt; operator{{!}}{{!}}(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator{{!}}{{!}}(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator{{!}}{{!}}(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;
    valarray&lt;bool&gt; operator{{=}}{{=}}(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator{{=}}{{=}}(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator{{=}}{{=}}(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;
    valarray&lt;bool&gt; operator!{{=}}(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator!{{=}}(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator!{{=}}(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;
    valarray&lt;bool&gt; operator&lt; (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&lt; (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&lt; (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;
    valarray&lt;bool&gt; operator&gt; (const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&gt; (const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&gt; (const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;
    valarray&lt;bool&gt; operator&lt;{{=}}(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&lt;{{=}}(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&lt;{{=}}(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;
    valarray&lt;bool&gt; operator&gt;{{=}}(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&gt;{{=}}(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;bool&gt; operator&gt;{{=}}(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class  T&gt;  valarray&lt;T&gt; abs (const  valarray&lt;T&gt;&amp;);
    template&lt;class  T&gt;  valarray&lt;T&gt; acos(const  valarray&lt;T&gt;&amp;);
    template&lt;class  T&gt;  valarray&lt;T&gt; asin(const  valarray&lt;T&gt;&amp;);
    template&lt;class  T&gt;  valarray&lt;T&gt; atan(const  valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; atan2(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; atan2(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; atan2(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class  T&gt;  valarray&lt;T&gt; cos  (const  valarray&lt;T&gt;&amp;);
    template&lt;class  T&gt;  valarray&lt;T&gt; cosh (const valarray&lt;T&gt;&amp;);
    template&lt;class  T&gt;  valarray&lt;T&gt; exp  (const  valarray&lt;T&gt;&amp;);
    template&lt;class  T&gt;  valarray&lt;T&gt; log  (const  valarray&lt;T&gt;&amp;);
    template&lt;class  T&gt;  valarray&lt;T&gt; log10(const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt; valarray&lt;T&gt; pow(const valarray&lt;T&gt;&amp;, const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; pow(const valarray&lt;T&gt;&amp;, const T&amp;);
    template&lt;class T&gt; valarray&lt;T&gt; pow(const T&amp;, const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;  valarray&lt;T&gt; sin (const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt;  valarray&lt;T&gt; sinh(const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt;  valarray&lt;T&gt; sqrt(const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt;  valarray&lt;T&gt; tan (const valarray&lt;T&gt;&amp;);
    template&lt;class T&gt;  valarray&lt;T&gt; tanh(const valarray&lt;T&gt;&amp;);
    
    template&lt;class T&gt;  /*unspecified1*/ begin(valarray&lt;T&gt;&amp; v);
    template&lt;class T&gt;  /*unspecified2*/ begin(const valarray&lt;T&gt;&amp; v);
    template&lt;class T&gt;  /*unspecified1*/ end(valarray&lt;T&gt;&amp; v);
    template&lt;class T&gt;  /*unspecified2*/ end(const valarray&lt;T&gt;&amp; v);
    
    
}

}}
==={{c|std::valarray}}===
{{source|
namespace std {
    template&lt;class T&gt; class valarray {
    public:
        typedef T value_type;

        // 26.6.2.2 construct/destroy:
        valarray();
        explicit valarray(size_t);
        valarray(const T&amp;, size_t);
        valarray(const T*, size_t);
        valarray(const valarray&amp;);
        valarray(valarray&amp;&amp;) noexcept;
        valarray(const slice_array&lt;T&gt;&amp;);
        valarray(const gslice_array&lt;T&gt;&amp;);
        valarray(const mask_array&lt;T&gt;&amp;);
        valarray(const indirect_array&lt;T&gt;&amp;);
        valarray(initializer_list&lt;T&gt;);
        
        ~valarray();
        
        // 26.6.2.3 assignment:
        valarray&lt;T&gt;&amp; operator{{=}}(const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator{{=}}(valarray&lt;T&gt;&amp;&amp;) noexcept;
        valarray&amp; operator{{=}}(initializer_list&lt;T&gt;);
        valarray&lt;T&gt;&amp; operator{{=}}(const T&amp;);
        valarray&lt;T&gt;&amp; operator{{=}}(const slice_array&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator{{=}}(const gslice_array&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator{{=}}(const mask_array&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator{{=}}(const indirect_array&lt;T&gt;&amp;);
        
        // 26.6.2.4 element access:
        const T&amp;        operator[](size_t) const;
        T&amp;              operator[](size_t);
        
        // 26.6.2.5 subset operations:
        valarray&lt;T&gt;             operator[](slice) const;
        slice_array&lt;T&gt;          operator[](slice);
        valarray&lt;T&gt;             operator[](const gslice&amp;) const;
        gslice_array&lt;T&gt;         operator[](const gslice&amp;);
        valarray&lt;T&gt;             operator[](const valarray&lt;bool&gt;&amp;) const;
        mask_array&lt;T&gt;           operator[](const valarray&lt;bool&gt;&amp;);
        valarray&lt;T&gt;             operator[](const valarray&lt;size_t&gt;&amp;) const;
        indirect_array&lt;T&gt;       operator[](const valarray&lt;size_t&gt;&amp;);
        
        // 26.6.2.6 unary operators:
        valarray&lt;T&gt; operator+() const;
        valarray&lt;T&gt; operator-() const;
        valarray&lt;T&gt; operator~() const;
        valarray&lt;bool&gt; operator!() const;
        
        // 26.6.2.7 computed assignment:
        valarray&lt;T&gt;&amp; operator*{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator/{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator%{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator+{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator-{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator^{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator&amp;{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator{{!}}{{=}} (const T&amp;);
        valarray&lt;T&gt;&amp; operator&lt;&lt;{{=}}(const T&amp;);
        valarray&lt;T&gt;&amp; operator&gt;&gt;{{=}}(const T&amp;);
        
        valarray&lt;T&gt;&amp; operator*{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator/{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator%{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator+{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator-{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator^{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator{{!}}{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator&amp;{{=}} (const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator&lt;&lt;{{=}}(const valarray&lt;T&gt;&amp;);
        valarray&lt;T&gt;&amp; operator&gt;&gt;{{=}}(const valarray&lt;T&gt;&amp;);
        
        // 26.6.2.8 member functions:
        void swap(valarray&amp;) noexcept;
        
        size_t size() const;
        
        T sum() const;
        T min() const;
        T max() const;
        
        valarray&lt;T&gt; shift (int) const;
        valarray&lt;T&gt; cshift(int) const;
        valarray&lt;T&gt; apply(T func(T)) const;
        valarray&lt;T&gt; apply(T func(const T&amp;)) const;
        void resize(size_t sz, T c {{=}} T());
    };
}
}}

==={{c|std::slice}}===
{{source|
namespace std {
    class slice {
    public:
        slice();
        slice(size_t, size_t, size_t);
        
        size_t start() const;
        size_t size() const;
        size_t stride() const;
    };
}
}}

==={{c|std::slice_array}}===
{{source|
namespace std {
template &lt;class T&gt; class slice_array {
    public:
        typedef T value_type;
        
        void operator{{=}}  (const valarray&lt;T&gt;&amp;) const;
        void operator*{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator/{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator%{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator+{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator-{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator^{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&amp;{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator{{!}}{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&lt;&lt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        void operator&gt;&gt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        
        slice_array(const slice_array&amp;);
        ~slice_array();
        
        const slice_array&amp; operator{{=}}(const slice_array&amp;) const;
        void operator{{=}}(const T&amp;) const;
        
        slice_array() {{=}} delete;
        // as implied by declaring copy constructor above
    };
}
}}

==={{c|std::gslice}}===
{{source|
namespace std {
    class gslice {
    public:
        gslice();
        gslice(size_t s, const valarray&lt;size_t&gt;&amp; l, const valarray&lt;size_t&gt;&amp; d);
        
        size_t           start()  const;
        valarray&lt;size_t&gt; size()   const;
        valarray&lt;size_t&gt; stride() const;
    };
}
}}

==={{c|std::gslice_array}}===
{{source|
namespace std {
    template &lt;class T&gt; class gslice_array {
    public:
        typedef T value_type;
        void operator{{=}}  (const valarray&lt;T&gt;&amp;) const;
        void operator*{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator/{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator%{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator+{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator-{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator^{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&amp;{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator{{!}}{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&lt;&lt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        void operator&gt;&gt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        
        gslice_array(const gslice_array&amp;);
        ~gslice_array();
        const gslice_array&amp; operator{{=}}(const gslice_array&amp;) const;
        void operator{{=}}(const T&amp;) const;
        
        gslice_array() {{=}} delete;        // as implied by declaring copy constructor above
    };
}
}}

==={{c|std::mask_array}}===
{{source|
namespace std {
    template &lt;class T&gt; class mask_array {
    public:
        typedef T value_type;
        
        void operator{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator*{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator/{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator%{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator+{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator-{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator^{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&amp;{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator{{!}}{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&lt;&lt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        void operator&gt;&gt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        
        mask_array(const mask_array&amp;);
        ~mask_array();
        const mask_array&amp; operator{{=}}(const mask_array&amp;) const;
        void operator{{=}}(const T&amp;) const;
        
        mask_array() {{=}} delete;        // as implied by declaring copy constructor above
    };
}
}}

==={{c|std::indirect_array}}===
{{source|
namespace std {
    template &lt;class T&gt; class indirect_array {
    public:
        typedef T value_type;
        
        void operator{{=}}  (const valarray&lt;T&gt;&amp;) const;
        void operator*{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator/{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator%{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator+{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator-{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator^{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&amp;{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator{{!}}{{=}} (const valarray&lt;T&gt;&amp;) const;
        void operator&lt;&lt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        void operator&gt;&gt;{{=}}(const valarray&lt;T&gt;&amp;) const;
        
        indirect_array(const indirect_array&amp;);
        ~indirect_array();
        const indirect_array&amp; operator{{=}}(const indirect_array&amp;) const;
        void operator{{=}}(const T&amp;) const;
        
        indirect_array() {{=}} delete; // as implied by declaring copy constructor above
    };
}
}}</text>
      <sha1>t8rgmgn2m074g3hgicnqpfkvggxcxzm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/variant</title>
    <ns>0</ns>
    <id>15778</id>
    <revision>
      <id>91021</id>
      <parentid>89741</parentid>
      <timestamp>2017-03-14T16:32:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Synopsis */ inline</comment>
      <text xml:space="preserve" bytes="7924">{{cpp/header/title|variant}}
{{cpp/header/navbar}}

===Classes===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc variant}}
{{dsc inc | cpp/utility/variant/dsc monostate}}
{{dsc inc | cpp/utility/variant/dsc bad_variant_access}}
{{dsc inc | cpp/utility/variant/dsc variant_size}}
{{dsc inc | cpp/utility/variant/dsc variant_alternative}}
{{dsc inc | cpp/utility/variant/dsc hash}}
{{dsc inc | cpp/utility/variant/dsc uses_allocator}}
{{dsc end}}

===Helpers===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc variant_npos}}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc visit}}
{{dsc inc | cpp/utility/variant/dsc holds_alternative}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc inc | cpp/utility/variant/dsc get_if}}
{{dsc inc | cpp/utility/variant/dsc operator_cmp}}
{{dsc inc | cpp/utility/variant/dsc swap2}}
{{dsc end}}

===Synopsis===
{{source|1=
namespace std {
  // variant
  template &lt;class... Types&gt; class variant;
  // variant helper classes
  template &lt;class T&gt; struct variant_size; // not defined
  template &lt;class T&gt; struct variant_size&lt;const T&gt;;
  template &lt;class T&gt; struct variant_size&lt;volatile T&gt;;
  template &lt;class T&gt; struct variant_size&lt;const volatile T&gt;;
  template &lt;class T&gt; inline constexpr size_t variant_size_v = variant_size&lt;T&gt;::value;
  template &lt;class... Types&gt;
  struct variant_size&lt;variant&lt;Types...&gt;&gt;;
  template &lt;size_t I, class T&gt; struct variant_alternative; // not defined
  template &lt;size_t I, class T&gt; struct variant_alternative&lt;I, const T&gt;;
  template &lt;size_t I, class T&gt; struct variant_alternative&lt;I, volatile T&gt;;
  template &lt;size_t I, class T&gt; struct variant_alternative&lt;I, const volatile T&gt;;
  template &lt;size_t I, class T&gt;
  using variant_alternative_t = typename variant_alternative&lt;I, T&gt;::type;
  template &lt;size_t I, class... Types&gt;
  struct variant_alternative&lt;I, variant&lt;Types...&gt;&gt;;
  inline constexpr size_t variant_npos = -1;
  // value access
  template &lt;class T, class... Types&gt;
  constexpr bool holds_alternative(const variant&lt;Types...&gt;&amp;) noexcept;
  template &lt;size_t I, class... Types&gt;
  constexpr variant_alternative_t&lt;I, variant&lt;Types...&gt;&gt;&amp;
    get(variant&lt;Types...&gt;&amp;);
  template &lt;size_t I, class... Types&gt;
  constexpr variant_alternative_t&lt;I, variant&lt;Types...&gt;&gt;&amp;&amp;
    get(variant&lt;Types...&gt;&amp;&amp;);
  template &lt;size_t I, class... Types&gt;
  constexpr const variant_alternative_t&lt;I, variant&lt;Types...&gt;&gt;&amp;
    get(const variant&lt;Types...&gt;&amp;);
  template &lt;size_t I, class... Types&gt;
  constexpr const variant_alternative_t&lt;I, variant&lt;Types...&gt;&gt;&amp;&amp;
    get(const variant&lt;Types...&gt;&amp;&amp;);
  template &lt;class T, class... Types&gt;
  constexpr T&amp; get(variant&lt;Types...&gt;&amp;);
  template &lt;class T, class... Types&gt;
  constexpr T&amp;&amp; get(variant&lt;Types...&gt;&amp;&amp;);
  template &lt;class T, class... Types&gt;
  constexpr const T&amp; get(const variant&lt;Types...&gt;&amp;);
  template &lt;class T, class... Types&gt;
  constexpr const T&amp;&amp; get(const variant&lt;Types...&gt;&amp;&amp;);
  template &lt;size_t I, class... Types&gt;
  constexpr add_pointer_t&lt;variant_alternative_t&lt;I, variant&lt;Types...&gt;&gt;&gt;
    get_if(variant&lt;Types...&gt;*) noexcept;
  template &lt;size_t I, class... Types&gt;
  constexpr add_pointer_t&lt;const variant_alternative_t&lt;I, variant&lt;Types...&gt;&gt;&gt;
    get_if(const variant&lt;Types...&gt;*) noexcept;
  template &lt;class T, class... Types&gt;
  constexpr add_pointer_t&lt;T&gt; get_if(variant&lt;Types...&gt;*) noexcept;
  template &lt;class T, class... Types&gt;
  constexpr add_pointer_t&lt;const T&gt; get_if(const variant&lt;Types...&gt;*) noexcept;
  // relational operators
  template &lt;class... Types&gt;
  constexpr bool operator==(const variant&lt;Types...&gt;&amp;,
  const variant&lt;Types...&gt;&amp;);
  template &lt;class... Types&gt;
  constexpr bool operator!=(const variant&lt;Types...&gt;&amp;,
  const variant&lt;Types...&gt;&amp;);
  template &lt;class... Types&gt;
  constexpr bool operator&lt;(const variant&lt;Types...&gt;&amp;,
  const variant&lt;Types...&gt;&amp;);
  template &lt;class... Types&gt;
  constexpr bool operator&gt;(const variant&lt;Types...&gt;&amp;,
  const variant&lt;Types...&gt;&amp;);
  template &lt;class... Types&gt;
  constexpr bool operator&lt;=(const variant&lt;Types...&gt;&amp;,
  const variant&lt;Types...&gt;&amp;);
  template &lt;class... Types&gt;
  constexpr bool operator&gt;=(const variant&lt;Types...&gt;&amp;,
  const variant&lt;Types...&gt;&amp;);
  // visitation
  template &lt;class Visitor, class... Variants&gt;
  constexpr /*see definition*/ visit(Visitor&amp;&amp;, Variants&amp;&amp;...);
  // class monostate
  struct monostate;
  // monostate relational operators
  constexpr bool operator&lt;(monostate, monostate) noexcept;
  constexpr bool operator&gt;(monostate, monostate) noexcept;
  constexpr bool operator&lt;=(monostate, monostate) noexcept;
  constexpr bool operator&gt;=(monostate, monostate) noexcept;
  constexpr bool operator==(monostate, monostate) noexcept;
  constexpr bool operator!=(monostate, monostate) noexcept;
  // specialized algorithms
  template &lt;class... Types&gt;
  void swap(variant&lt;Types...&gt;&amp;, variant&lt;Types...&gt;&amp;) noexcept(/*see definition*/);
  // class bad_variant_access
  class bad_variant_access;
  // hash support
  template &lt;class T&gt; struct hash;
  template &lt;class... Types&gt; struct hash&lt;variant&lt;Types...&gt;&gt;;
  template &lt;&gt; struct hash&lt;monostate&gt;;
  // allocator-related traits
  template &lt;class T, class Alloc&gt; struct uses_allocator;
  template &lt;class... Types, class Alloc&gt;
  struct uses_allocator&lt;variant&lt;Types...&gt;, Alloc&gt;;
}
}}

====Class template {{lc|std::variant}}====
{{source|1=
template &lt;class... Types&gt;
class variant {
public:
  // constructors
  constexpr variant() noexcept(/*see definition*/);
  variant(const variant&amp;);
  variant(variant&amp;&amp;) noexcept(/*see definition*/);
  template &lt;class T&gt; constexpr variant(T&amp;&amp;) noexcept(/*see definition*/);
  template &lt;class T, class... Args&gt;
  constexpr explicit variant(in_place_type_t&lt;T&gt;, Args&amp;&amp;...);
  template &lt;class T, class U, class... Args&gt;
  constexpr explicit variant(in_place_type_t&lt;T&gt;, initializer_list&lt;U&gt;, Args&amp;&amp;...);
  template &lt;size_t I, class... Args&gt;
  constexpr explicit variant(in_place_index_t&lt;I&gt;, Args&amp;&amp;...);
  template &lt;size_t I, class U, class... Args&gt;
  constexpr explicit variant(in_place_index_t&lt;I&gt;, initializer_list&lt;U&gt;, Args&amp;&amp;...);
  // allocator-extended constructors
  template &lt;class Alloc&gt;
  variant(allocator_arg_t, const Alloc&amp;);
  template &lt;class Alloc&gt;
  variant(allocator_arg_t, const Alloc&amp;, const variant&amp;);
  template &lt;class Alloc&gt;
  variant(allocator_arg_t, const Alloc&amp;, variant&amp;&amp;);
  template &lt;class Alloc, class T&gt;
  variant(allocator_arg_t, const Alloc&amp;, T&amp;&amp;);
  template &lt;class Alloc, class T, class... Args&gt;
  variant(allocator_arg_t, const Alloc&amp;, in_place_type_t&lt;T&gt;, Args&amp;&amp;...);
  template &lt;class Alloc, class T, class U, class... Args&gt;
  variant(allocator_arg_t, const Alloc&amp;, in_place_type_t&lt;T&gt;,
          initializer_list&lt;U&gt;, Args&amp;&amp;...);
  template &lt;class Alloc, size_t I, class... Args&gt;
  variant(allocator_arg_t, const Alloc&amp;, in_place_index_t&lt;I&gt;, Args&amp;&amp;...);
  template &lt;class Alloc, size_t I, class U, class... Args&gt;
  variant(allocator_arg_t, const Alloc&amp;, in_place_index_t&lt;I&gt;,
          initializer_list&lt;U&gt;, Args&amp;&amp;...);
  // destructor
  ~variant();
  // assignment
  variant&amp; operator=(const variant&amp;);
  variant&amp; operator=(variant&amp;&amp;) noexcept(/*see definition*/);
  template &lt;class T&gt; variant&amp; operator=(T&amp;&amp;) noexcept(/*see definition*/);
  // modifiers
  template &lt;class T, class... Args&gt; void emplace(Args&amp;&amp;...);
  template &lt;class T, class U, class... Args&gt;
  void emplace(initializer_list&lt;U&gt;, Args&amp;&amp;...);
  template &lt;size_t I, class... Args&gt; void emplace(Args&amp;&amp;...);
  template &lt;size_t I, class U, class... Args&gt;
  void emplace(initializer_list&lt;U&gt;, Args&amp;&amp;...);
  // value status
  constexpr bool valueless_by_exception() const noexcept;
  constexpr size_t index() const noexcept;
  // swap
  void swap(variant&amp;) noexcept(/*see definition*/);
};
}}

====Class {{lc|std::monostate}}====
{{source|1=
struct monostate{};
}}

====Class {{lc|std::bad_variant_access}}====
{{source|1=
class bad_variant_access : public exception {
public:
  bad_variant_access() noexcept;
  virtual const char* what() const noexcept;
};
}}

[[zh:cpp/header/variant]]</text>
      <sha1>jf7f8q1h8dmxytcbz19uazzs9uxcw8y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/header/vector</title>
    <ns>0</ns>
    <id>9675</id>
    <revision>
      <id>88084</id>
      <parentid>88082</parentid>
      <timestamp>2016-10-28T11:02:35Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="10731">{{cpp/header/title|vector}}
{{cpp/header/navbar}}
This header is part of the [[cpp/container|containers]] library.
{{dsc begin}}
{{dsc h1|Includes}}
{{dsc|{{header|initializer_list}}{{mark c++11}}}}
{{dsc h1|Classes}}
{{dsc inc | cpp/container/dsc vector}}
{{dsc inc | cpp/container/dsc vector_bool}}
{{dsc ptclass | cpp/container/vector bool/hash | title=std::hash{{dsc small|&lt;std::vector&lt;bool&gt;&gt;}} | hash support for {{c|std::vector&lt;bool&gt;}} | notes={{mark c++11}} }}
{{dsc h1|Functions}}
{{dsc inc | cpp/container/dsc operator_cmp | vector}}
{{dsc inc | cpp/container/dsc swap2 | vector}}
{{dsc end}}

===Synopsis===

{{source|

#include &lt;initializer_list&gt;
namespace std {
    template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt; class vector;
    
    template &lt;class T, class Allocator&gt;
        bool operator{{==}}(const vector&lt;T,Allocator&gt;&amp; x,const vector&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&lt; (const vector&lt;T,Allocator&gt;&amp; x,const vector&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator!{{=}}(const vector&lt;T,Allocator&gt;&amp; x,const vector&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&gt; (const vector&lt;T,Allocator&gt;&amp; x,const vector&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&gt;{{=}}(const vector&lt;T,Allocator&gt;&amp; x,const vector&lt;T,Allocator&gt;&amp; y);
    template &lt;class T, class Allocator&gt;
        bool operator&lt;{{=}}(const vector&lt;T,Allocator&gt;&amp; x,const vector&lt;T,Allocator&gt;&amp; y);
        
    template &lt;class T, class Allocator&gt;
        void swap(vector&lt;T,Allocator&gt;&amp; x, vector&lt;T,Allocator&gt;&amp; y);

    template &lt;class Allocator&gt; class vector&lt;bool,Allocator&gt;;
    
    // hash support
    template &lt;class T&gt; struct hash;
    template &lt;class Allocator&gt; struct hash&lt;vector&lt;bool, Allocator&gt; &gt;;
}

}}

====Class {{lc|std::vector}}====
{{source|


template &lt;class T, class Allocator {{=}} allocator&lt;T&gt; &gt;
class vector {
public:
    // types:
    typedef value_type&amp;                                         reference;
    typedef const value_type&amp;                                   const_reference;
    typedef /*implementation-defined*/                          iterator;
    typedef /*implementation-defined*/                          const_iterator; 
    typedef /*implementation-defined*/                          size_type;
    typedef /*implementation-defined*/                          difference_type;
    typedef T                                                   value_type;
    typedef Allocator                                           allocator_type;
    typedef typename allocator_traits&lt;Allocator&gt;::pointer       pointer;
    typedef typename allocator_traits&lt;Allocator&gt;::const_pointer const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt;                     reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt;               const_reverse_iterator;
    
    // construct/copy/destroy:
    explicit vector(const Allocator&amp; {{=}} Allocator());
    explicit vector(size_type n);
    vector(size_type n, const T&amp; value,const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
        vector(InputIterator first, InputIterator last,const Allocator&amp; {{=}} Allocator());
    vector(const vector&lt;T,Allocator&gt;&amp; x);
    vector(vector&amp;&amp;);
    vector(const vector&amp;, const Allocator&amp;);
    vector(vector&amp;&amp;, const Allocator&amp;);
    vector(initializer_list&lt;T&gt;, const Allocator&amp; {{=}} Allocator());
    
    ~vector();
    vector&lt;T,Allocator&gt;&amp; operator{{=}}(const vector&lt;T,Allocator&gt;&amp; x);
    vector&lt;T,Allocator&gt;&amp; operator{{=}}(vector&lt;T,Allocator&gt;&amp;&amp; x);
    vector&amp; operator{{=}}(initializer_list&lt;T&gt;);
    template &lt;class InputIterator&gt;
        void assign(InputIterator first, InputIterator last);
    void assign(size_type n, const T&amp; t);
    void assign(initializer_list&lt;T&gt;);
    allocator_type get_allocator() const noexcept;

    // iterators:
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
    
    const_iterator          cbegin() noexcept;
    const_iterator          cend() noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
    
    // capacity:
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    void      resize(size_type sz);
    void      resize(size_type sz, const T&amp; c);
    size_type capacity() const noexcept;
    bool      empty() const noexcept;
    void      reserve(size_type n);
    void      shrink_to_fit();
    
    // element access:
    reference       operator[](size_type n);
    const_reference operator[](size_type n) const;
    reference       at(size_type n);
    const_reference at(size_type n) const;
    reference       front();
    const_reference front() const;
    reference       back();
    const_reference back() const;
    
    //data access
    T*       data() noexcept;
    const T* data() const noexcept;
    
    // modifiers:
    template &lt;class... Args&gt; void emplace_back(Args&amp;&amp;... args);
    void push_back(const T&amp; x);
    void push_back(T&amp;&amp; x);
    void pop_back();
    
    template &lt;class... Args&gt; iterator emplace(const_iterator position, Args&amp;&amp;... args);
    iterator insert(const_iterator position, const T&amp; x);
    iterator insert(const_iterator position, T&amp;&amp; x);
    iterator insert(const_iterator position, size_type n, const T&amp; x);
    template &lt;class InputIterator&gt;
        iterator insert (const_iterator position, InputIterator first, 
                         InputIterator last);
    iterator insert(const_iterator position, initializer_list&lt;T&gt;);

    iterator erase(const_iterator position);
    iterator erase(const_iterator first, const_iterator last);
    void     swap(vector&lt;T,Allocator&gt;&amp;);
    void     clear() noexcept;
};

}}

====Specialization {{c|std::vector&lt;bool&gt;}}====
{{source|


template &lt; class Allocator &gt;
class vector&lt;bool, Allocator&gt; {
public:
    // types:
    typedef bool                                                const_reference;
    typedef /*implementation-defined*/                          iterator;
    typedef /*implementation-defined*/                          const_iterator; 
    typedef /*implementation-defined*/                          size_type;
    typedef /*implementation-defined*/                          difference_type;
    typedef bool                                                value_type;
    typedef Allocator                                           allocator_type;
    typedef /*implementation-defined*/                          pointer;
    typedef /*implementation-defined*/                          const_pointer;
    typedef std::reverse_iterator&lt;iterator&gt;                     reverse_iterator;
    typedef std::reverse_iterator&lt;const_iterator&gt;               const_reverse_iterator;
    
    // bit reference:
    class reference {
        friend class vector;
        reference() noexcept;
    public:
        ~reference();
        operator bool() const noexcept;
        reference&amp; operator{{=}}(const bool x) noexcept;
        reference&amp; operator{{=}}(const reference&amp; x) noexcept;
        void flip() noexcept; // flips the bit
    };

    // construct/copy/destroy:
    explicit vector(const Allocator&amp; {{=}} Allocator());
    explicit vector(size_type n);
    vector(size_type n, const bool&amp; value,const Allocator&amp; {{=}} Allocator());
    template &lt;class InputIterator&gt;
        vector(InputIterator first, InputIterator last,const Allocator&amp; {{=}} Allocator());
    vector(const vector&lt;bool,Allocator&gt;&amp; x);
    vector(vector&amp;&amp;);
    vector(const vector&amp;, const Allocator&amp;);
    vector(vector&amp;&amp;, const Allocator&amp;);
    vector(initializer_list&lt;bool&gt;, const Allocator&amp; {{=}} Allocator());
    
    ~vector();
    vector&lt;bool,Allocator&gt;&amp; operator{{=}}(const vector&lt;bool,Allocator&gt;&amp; x);
    vector&lt;bool,Allocator&gt;&amp; operator{{=}}(vector&lt;bool,Allocator&gt;&amp;&amp; x);
    vector&amp; operator{{=}}(initializer_list&lt;bool&gt;);
    template &lt;class InputIterator&gt;
        void assign(InputIterator first, InputIterator last);
    void assign(size_type n, const bool&amp; t);
    void assign(initializer_list&lt;bool&gt;);
    allocator_type get_allocator() const noexcept;

    // iterators:
    iterator                begin() noexcept;
    const_iterator          begin() const noexcept;
    iterator                end() noexcept;
    const_iterator          end() const noexcept;
    
    reverse_iterator        rbegin() noexcept;
    const_reverse_iterator  rbegin() const noexcept;
    reverse_iterator        rend() noexcept;
    const_reverse_iterator  rend() const noexcept;
    
    const_iterator          cbegin() noexcept;
    const_iterator          cend() noexcept;
    const_reverse_iterator  crbegin() const noexcept;
    const_reverse_iterator  crend() const noexcept;
    
    // capacity:
    size_type size() const noexcept;
    size_type max_size() const noexcept;
    void      resize(size_type sz);
    void      resize(size_type sz, const bool&amp; c);
    size_type capacity() const noexcept;
    bool      empty() const noexcept;
    void      reserve(size_type n);
    void      shrink_to_fit();
    
    // element access:
    reference       operator[](size_type n);
    const_reference operator[](size_type n) const;
    reference       at(size_type n);
    const_reference at(size_type n) const;
    reference       front();
    const_reference front() const;
    reference       back();
    const_reference back() const;
    
    // modifiers:
    template &lt;class... Args&gt; void emplace_back(Args&amp;&amp;... args);
    void push_back(const bool&amp; x);
    void push_back(bool&amp;&amp; x);
    void pop_back();
    
    template &lt;class... Args&gt; iterator emplace(const_iterator position, Args&amp;&amp;... args);
    iterator insert(const_iterator position, const bool&amp; x);
    iterator insert(const_iterator position, bool&amp;&amp; x);
    iterator insert(const_iterator position, size_type n, const bool&amp; x);
    template &lt;class InputIterator&gt;
        iterator insert (const_iterator position, InputIterator first, 
                         InputIterator last);
    iterator insert(const_iterator position, initializer_list&lt;bool&gt;);

    iterator erase(const_iterator position);
    iterator erase(const_iterator first, const_iterator last);
    void     swap(vector&lt;bool,Allocator&gt;&amp;);
    static void swap(reference x, reference y) noexcept;
    void     flip() noexcept;// flips all bits
    void     clear() noexcept;
};

}}</text>
      <sha1>fclxh1thi55nqcccx4lhpbrrr9w46fn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/headers</title>
    <ns>0</ns>
    <id>5419</id>
    <redirect title="cpp/header" />
    <revision>
      <id>19611</id>
      <timestamp>2012-03-11T12:25:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/headers]] to [[cpp/header]]: We use singular mostly</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[cpp/header]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/index</title>
    <ns>0</ns>
    <id>13840</id>
    <revision>
      <id>89872</id>
      <parentid>78039</parentid>
      <timestamp>2017-01-27T12:53:44Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh (the page needs update)</comment>
      <text xml:space="preserve" bytes="10987">{{title|Index}}
{{cpp/navbar}}


&lt;table class=&quot;plainlinks fmbox fmbox-system&quot; style=&quot;font-size: 0.8em; background-color:#ffffbb&quot;&gt;
&lt;tr&gt;
&lt;td class=&quot;mbox-image&quot;&gt;
  &lt;/td&gt;
&lt;td class=&quot;mbox-text&quot; style=&quot;&quot;&gt; This is work in progress, there may be inaccuracies &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


==&lt;blockquote&gt;&lt;tt&gt;[[cpp/index#A| A]]  [[cpp/index#B| B]]  [[cpp/index#C| C]]  [[cpp/index#D| D]]  [[cpp/index#E| E]]  [[cpp/index#F| F]]  [[cpp/index#G| G]]  [[cpp/index#H| H]]  [[cpp/index#I| I]]  [[cpp/index#J| J]]  [[cpp/index#K| K]]  [[cpp/index#L| L]]  [[cpp/index#M| M]]  [[cpp/index#N| N]]  [[cpp/index#O| O]]  [[cpp/index#P| P]]  [[cpp/index#Q| Q]]  [[cpp/index#R| R]]  [[cpp/index#S| S]]  [[cpp/index#T| T]]  [[cpp/index#U| U]]  [[cpp/index#V| V]]  [[cpp/index#W| W]]  [[cpp/index#X| X]]  [[cpp/index#Y| Y]]  [[cpp/index#Z| Z]] &lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=A=
[[cpp/language/abstract_class| abstract class]] &lt;br/&gt;
[[cpp/language/alignas | {{c|alignas}}]] &lt;br/&gt;
[[cpp/language/alignof | {{c|alignof}}]] &lt;br/&gt;
{{ttb|{{header|algorithm}}}} &lt;br/&gt;
[[cpp/language/array | array]] &lt;br/&gt;
{{ttb|{{header|array}}}} {{mark since c++11}} &lt;br/&gt;
[[cpp/language/ascii | ASCII]] &lt;br/&gt;
[[cpp/language/asm | {{c|asm}}]] &lt;br/&gt;
[[cpp/language/asm | assembly]] &lt;br/&gt;
{{ttb|{{header|atomic}}}} {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic| atomic operation]] &lt;br/&gt;
[[cpp/language/attributes| attribute]] {{mark c++11}} &lt;br/&gt;

=B=
[[cpp/language/bit_field | bit field]] &lt;br/&gt;
[[cpp/language/types#Boolean type | {{c|bool}}]] &lt;br/&gt;
[[cpp/language/memory_model#Byte | byte]] &lt;br/&gt;

=C=
[[cpp/language/expressions#Conversions | casting operator]] (see also [[cpp/language/expressions#Conversions | conversion, type]])&lt;br/&gt;
[[cpp/language/types#Character types | character type]] &lt;br/&gt;
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/const_cast| {{c|const_cast}}]] &lt;br/&gt;
[[cpp/language/dynamic_cast| {{c|dynamic_cast}}]] &lt;br/&gt;
[[cpp/language/reinterpret_cast| {{c|reinterpret_cast}}]] &lt;br/&gt;
[[cpp/language/static_cast| {{c|static_cast}}]] &lt;br/&gt;
&lt;/div&gt;
[[cpp/language/expressions#Conversions | casting, type]] (see also [[cpp/language/expressions#Conversions | conversion, type]])&lt;br/&gt;
[[cpp/language/classes | class]] &lt;br/&gt;
[[cpp/language/data_members | class data member]] &lt;br/&gt;
[[cpp/language/class_template | class template]] &lt;br/&gt;
[[cpp/comment | comment]] &lt;br/&gt;
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/comment#C-style | C-style]] &lt;br/&gt;
[[cpp/comment#C++-style | C++-style]] &lt;br/&gt;
&lt;/div&gt;
[[cpp/language/initializer_list | constructor]] &lt;br/&gt;
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/converting_constructor | converting]] &lt;br/&gt;
[[cpp/language/copy_constructor | copy]] &lt;br/&gt;
[[cpp/language/default_constructor | default]] &lt;br/&gt;
[[cpp/language/initializer_list#Delegating constructor | delegating]] {{mark c++11}} &lt;br/&gt;
[[cpp/language/initializer_list#Inheriting constructors | inheriting]] {{mark c++11}} &lt;br/&gt;
[[cpp/language/move_constructor | move]] {{mark c++11}} &lt;br/&gt;
&lt;/div&gt;
[[cpp/container | container]] &lt;br/&gt;
[[cpp/language/expressions#Conversions | conversion, type]] &lt;br/&gt;

=D=
[[cpp/language/decltype | {{c|decltype}}]] {{mark c++11}} &lt;br/&gt;

=E=
[[cpp/language/expressions | expression]] &lt;br/&gt;
[[cpp/language/explicit | {{c|explicit}}]]

=F=
[[cpp/language/type#Floating point types | floating point type]] &lt;br/&gt;

=G=
[[cpp/language/value_category#glvalue | glvalue]] &lt;br/&gt;

=H=
[[cpp/header| header]] &lt;br/&gt;
&lt;div class=&quot;mainpagediv&quot;&gt;
{{ttb|{{header|algorithm}}}} &lt;br/&gt;
{{ttb|{{header|array}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|atomic}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|bitset}}}}  &lt;br/&gt;
{{ttb|{{header|cassert}}}}  &lt;br/&gt;
{{ttb|{{header|ccomplex}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|cctype}}}}  &lt;br/&gt;
{{ttb|{{header|cerrno}}}}  &lt;br/&gt;
{{ttb|{{header|cfenv}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|cfloat}}}}  &lt;br/&gt;
{{ttb|{{header|chrono}}}}  &lt;br/&gt;
{{ttb|{{header|cinttypes}}}} {{mark since c++11}}  &lt;br/&gt;
{{ttb|{{header|ciso646}}}} &lt;br/&gt;
{{ttb|{{header|climits}}}}  &lt;br/&gt;
{{ttb|{{header|clocale}}}} &lt;br/&gt;
{{ttb|{{header|cmath}}}}  &lt;br/&gt;
{{ttb|{{header|codecvt}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|condition_variable}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|complex}}}}  &lt;br/&gt;
{{ttb|{{header|csignal}}}} &lt;br/&gt;
{{ttb|{{header|csetjmp}}}} &lt;br/&gt;
{{ttb|{{header|cstdalign}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|cstdarg}}}} &lt;br/&gt;
{{ttb|{{header|cstdbool}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|cstddef}}}} &lt;br/&gt;
{{ttb|{{header|cstdint}}}} {{mark since c++11}}  &lt;br/&gt;
{{ttb|{{header|cstdio}}}} &lt;br/&gt;
{{ttb|{{header|ctime}}}}  &lt;br/&gt;
{{ttb|{{header|ctgmath}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|cwchar}}}}  &lt;br/&gt;
{{ttb|{{header|cwctype}}}}  &lt;br/&gt;
{{ttb|{{header|cuchar}}}}  &lt;br/&gt;
{{ttb|{{header|exception}}}}  &lt;br/&gt;
{{ttb|{{header|forward_list}}}} {{mark since c++11}}   &lt;br/&gt;
{{ttb|{{header|fstream}}}} &lt;br/&gt;
{{ttb|{{header|functional}}}} &lt;br/&gt;
{{ttb|{{header|future}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|initializer_list}}}} {{mark since c++11}}  &lt;br/&gt;
{{ttb|{{header|iomanip}}}} &lt;br/&gt;
{{ttb|{{header|ios}}}} &lt;br/&gt;
{{ttb|{{header|iosfwd}}}} &lt;br/&gt;
{{ttb|{{header|iostream}}}} &lt;br/&gt;
{{ttb|{{header|iterator}}}} &lt;br/&gt;
{{ttb|{{header|locale}}}} &lt;br/&gt;
{{ttb|{{header|limits}}}}  &lt;br/&gt;
{{ttb|{{header|list}}}}  &lt;br/&gt;
{{ttb|{{header|map}}}} &lt;br/&gt;
{{ttb|{{header|memory}}}} &lt;br/&gt;
{{ttb|{{header|mutex}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|new}}}} &lt;br/&gt;
{{ttb|{{header|numeric}}}} &lt;br/&gt;
{{ttb|{{header|queue}}}} &lt;br/&gt;
{{ttb|{{header|random}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|ratio}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|regex}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|scoped_allocator}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|set}}}}  &lt;br/&gt;
{{ttb|{{header|shared_mutex}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|sstream}}}} &lt;br/&gt;
{{ttb|{{header|stack}}}} &lt;br/&gt;
{{ttb|{{header|stdexcept}}}}  &lt;br/&gt;
{{ttb|{{header|streambuf}}}} &lt;br/&gt;
{{ttb|{{header|string}}}}  &lt;br/&gt;
{{ttb|{{header|strstream}}}} &lt;br/&gt;
{{ttb|{{header|system_error}}}}  &lt;br/&gt;
{{ttb|{{header|thread}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|tuple}}}} {{mark since c++11}}  &lt;br/&gt;
{{ttb|{{header|typeindex}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|type_traits}}}} {{mark since c++11}} &lt;br/&gt;
{{ttb|{{header|unordered_map}}}} {{mark since c++11}}   &lt;br/&gt;
{{ttb|{{header|unordered_set}}}} {{mark since c++11}}   &lt;br/&gt;
{{ttb|{{header|utility}}}}  &lt;br/&gt;
{{ttb|{{header|valarray}}}}  &lt;br/&gt;
{{ttb|{{header|vector}}}}  &lt;br/&gt;
&lt;/div&gt;

=I=
[[cpp/language/identifiers| identifier]] &lt;br/&gt;
[[cpp/language/initialization| initialization]]
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/aggregate_initialization| aggregate]] &lt;br/&gt;
[[cpp/language/aggregate_initialization| brace]] (see also  [[cpp/language/aggregate_initialization| aggregate initialization]])&lt;br/&gt;
[[cpp/language/constant_initialization| constant]] &lt;br/&gt;
[[cpp/language/copy_initialization| copy]] &lt;br/&gt;
[[cpp/language/default_initialization| default]] &lt;br/&gt;
[[cpp/language/direct_initialization| direct]] &lt;br/&gt;
[[cpp/language/list_initialization| list]] &lt;br/&gt;
[[cpp/language/reference_initialization| reference]] &lt;br/&gt;
[[cpp/language/value_initialization| value]] &lt;br/&gt;
[[cpp/language/zero_initialization| zero]] &lt;br/&gt;
&lt;/div&gt;
[[cpp/language/initializer_list| initializer list]] &lt;br/&gt;
{{ttb|{{header|initializer_list}}}} {{mark since c++11}} &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|int}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types| integer type]] &lt;br/&gt;
{{ttb|{{header|iomanip}}}} &lt;br/&gt;
{{ttb|{{header|ios}}}} &lt;br/&gt;
{{ttb|{{header|iosfwd}}}} &lt;br/&gt;
{{ttb|{{header|iostream}}}} &lt;br/&gt;
{{ttb|{{header|iterator}}}} &lt;br/&gt;

=K=
[[cpp/keyword | keyword, c++]] &lt;br/&gt;

=L=
[[cpp/language/value_category#lvalue | lvalue]] &lt;br/&gt;

=M=
[[cpp/language/main_function | {{c|main()}}]] &lt;br/&gt;
[[cpp/language/member_functions | member function]] &lt;br/&gt;
[[cpp/language/memory_model | memory model]] &lt;br/&gt;
[[cpp/language/cv | {{c|mutable}}]] &lt;br/&gt;

=O=
[[cpp/language/object | object]] &lt;br/&gt;
[[cpp/language/expressions#Operators | operator]] &lt;br/&gt;
[[cpp/language/operator_precedence | operator precedence]] &lt;br/&gt;

=P=
[[cpp/language/pointer | pointer]] &lt;br/&gt;
[[cpp/preprocessor | preprocessor]] &lt;br/&gt;
[[cpp/language/value_category#rvalue (until C++11) / prvalue (since C++11) | prvalue]]  {{mark since c++11}} &lt;br/&gt;

=R=
[[cpp/language/value_category#rvalue | rvalue]]  {{mark until c++11}} &lt;br/&gt;

=S=
[[cpp/language/scope | scope]] &lt;br/&gt;
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/scope#Class scope | class]] &lt;br/&gt;
[[cpp/language/scope#Block scope | block]] &lt;br/&gt;
[[cpp/language/scope#Function prototype scope | function prototype]] &lt;br/&gt;
[[cpp/language/scope#Function scope | function]] &lt;br/&gt;
[[cpp/language/scope#Enumeration scope | enumeration]] &lt;br/&gt;
[[cpp/language/scope#Namespace scope | namespace]] &lt;br/&gt;
[[cpp/language/scope#Template paramater scope | template parameter]] &lt;br/&gt;
&lt;/div&gt;
[[cpp/language/sfinae| SFINAE]] (Substitution Failure Is Not An Error)&lt;br/&gt;
[[cpp/language/types#Integer types | {{c|short}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|short int}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed int}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed long}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed long int}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed long long}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed long long int}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed short}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/types#Integer types | {{c|signed short int}}]] (see also [[cpp/language/types#Integer types| integer type]]) &lt;br/&gt;
[[cpp/language/static | {{c|static}}]] &lt;br/&gt;
[[cpp/language/static#Static data members | static data members]] &lt;br/&gt;

=T=
[[cpp/language/templates | template]] &lt;br/&gt;
[[cpp/language/this | {{c|this}}]] &lt;br/&gt;
[[cpp/language/type | type]] &lt;br/&gt;
[[cpp/language/type_alias | type alias]] &lt;br/&gt;
[[cpp/language/typedef| {{c|typedef}}]] &lt;br/&gt;
[[cpp/language/typeid| {{c|typeid}}]] &lt;br/&gt;

=U=
[[cpp/language/union | union]] &lt;br/&gt;
[[cpp/language/user_literal | user-defined literals]] {{mark since c++11}} &lt;br/&gt;

=V=
[[cpp/language/value_category | value category]] &lt;br/&gt;
[[cpp/language/variadic_arguments | variadic_arguments]] &lt;br/&gt;
[[cpp/language/types#Void type | {{c|void}}]] &lt;br/&gt;

=X=
[[cpp/language/value_category#xvalue | xvalue]] &lt;br/&gt;

[[zh:cpp/index]]</text>
      <sha1>3gtnywr0lky2ao1g2izbwaxscqvpxsz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io</title>
    <ns>0</ns>
    <id>476</id>
    <revision>
      <id>83478</id>
      <parentid>83477</parentid>
      <timestamp>2016-02-15T11:30:53Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>no, the template std::basic_iostream is defined in the header &lt;istream&gt;, not in &lt;iostream&gt;</comment>
      <text xml:space="preserve" bytes="6510">{{title|Input/output library}}
{{cpp/io/navbar}}

C++ includes two input/output libraries: a modern, stream-based I/O library and the standard set of C-style I/O functions.

===Stream-based I/O===

The stream-based input/output library is organized around abstract input/output devices. These abstract devices allow the same code to handle input/output to files, memory streams, or custom adaptor devices that perform arbitrary operations (e.g. compression) on the fly.

Most of the classes are templated, so they can be adapted to any basic character type. Separate typedefs are provided for the most common basic character types ({{c|char}} and {{c|wchar_t}}).  The classes are organized into the following hierarchy:

{{inheritance diagram/std-io-complete}}

{{dsc begin}}
{{dsc h2 | Abstraction}}
{{dsc header | ios }}
{{dsc class | cpp/io/ios_base | manages formatting flags and input/output exceptions}}
{{dsc tclass | cpp/io/basic_ios | manages an arbitrary stream buffer}}
{{dsc header | streambuf }}
{{dsc tclass | cpp/io/basic_streambuf | abstracts a raw device}}
{{dsc header | ostream }}
{{dsc tclass | cpp/io/basic_ostream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level output interface}}
{{dsc header | istream }}
{{dsc tclass | cpp/io/basic_istream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level input interface}}
{{dsc tclass | cpp/io/basic_iostream | wraps a given abstract device ({{lc|std::basic_streambuf}})&lt;br/&gt; and provides high-level input/output interface}}
{{dsc h2 | File I/O implementation}}
{{dsc header | fstream }}
{{dsc tclass | cpp/io/basic_filebuf | implements raw file device}}
{{dsc tclass | cpp/io/basic_ifstream | implements high-level file stream input operations}}
{{dsc tclass | cpp/io/basic_ofstream | implements high-level file stream output operations}}
{{dsc tclass | cpp/io/basic_fstream | implements high-level file stream input/output operations}}
{{dsc h2 | String I/O implementation}}
{{dsc header | sstream }}
{{dsc tclass | cpp/io/basic_stringbuf | implements raw string device}}
{{dsc tclass | cpp/io/basic_istringstream | implements high-level string stream input operations}}
{{dsc tclass | cpp/io/basic_ostringstream | implements high-level string stream output operations}}
{{dsc tclass | cpp/io/basic_stringstream | implements high-level string stream input/output operations}}
{{dsc h2 | Array I/O implementations}}
{{dsc header | strstream }}
{{dsc class | cpp/io/strstreambuf | notes={{mark deprecated}} | implements raw character array device}}
{{dsc class | cpp/io/istrstream | notes={{mark deprecated}} | implements character array input operations}}
{{dsc class | cpp/io/ostrstream | notes={{mark deprecated}} | implements character array output operations}}
{{dsc class | cpp/io/strstream | notes={{mark deprecated}} | implements character array input/output operations}}
{{dsc end}}

====Typedefs====

The following typedefs for common character types are provided:

&lt;source lang=&quot;cpp&quot;&gt;
typedef basic_ios&lt;char&gt;                ios;
typedef basic_ios&lt;wchar_t&gt;            wios;

typedef basic_streambuf&lt;char&gt;     streambuf;
typedef basic_streambuf&lt;wchar_t&gt; wstreambuf;
typedef basic_filebuf&lt;char&gt;         filebuf;
typedef basic_filebuf&lt;wchar_t&gt;     wfilebuf;
typedef basic_stringbuf&lt;char&gt;     stringbuf;
typedef basic_stringbuf&lt;wchar_t&gt; wstringbuf;

typedef basic_istream&lt;char&gt;         istream;
typedef basic_istream&lt;wchar_t&gt;     wistream;
typedef basic_ostream&lt;char&gt;         ostream;
typedef basic_ostream&lt;wchar_t&gt;     wostream;
typedef basic_iostream&lt;char&gt;       iostream;
typedef basic_iostream&lt;wchar_t&gt;   wiostream;

typedef basic_ifstream&lt;char&gt;       ifstream;
typedef basic_ifstream&lt;wchar_t&gt;   wifstream;
typedef basic_ofstream&lt;char&gt;       ofstream;
typedef basic_ofstream&lt;wchar_t&gt;   wofstream;
typedef basic_fstream&lt;char&gt;         fstream;
typedef basic_fstream&lt;wchar_t&gt;     wfstream;

typedef basic_istringstream&lt;char&gt;     istringstream;
typedef basic_istringstream&lt;wchar_t&gt; wistringstream;
typedef basic_ostringstream&lt;char&gt;     ostringstream;
typedef basic_ostringstream&lt;wchar_t&gt; wostringstream;
typedef basic_stringstream&lt;char&gt;       stringstream;
typedef basic_stringstream&lt;wchar_t&gt;   wstringstream;
&lt;/source&gt;

====Predefined standard stream objects====
{{dsc begin}}
{{dsc header | iostream}}
{{dsc inc | cpp/io/dsc cin}}
{{dsc inc | cpp/io/dsc cout}}
{{dsc inc | cpp/io/dsc cerr}}
{{dsc inc | cpp/io/dsc clog}}
{{dsc end}}

====[[cpp/io/manip|I/O Manipulators]]====

The stream-based I/O library uses [[cpp/io/manip| I/O manipulators]] (e.g. {{lc|std::boolalpha}}, {{lc|std::hex}}, etc.) to control how streams behave.

====Types====

The following auxiliary types are defined:
{{dsc begin}}
{{dsc header | ios }}
{{dsc typedef | cpp/io/streamoff | represents relative file/stream position (offset from fpos), sufficient to represent any file size }}
{{dsc typedef | cpp/io/streamsize | represents the number of characters transferred in an I/O operation or the size of an I/O buffer}}
{{dsc tclass  | cpp/io/fpos | represents absolute position in a stream or a file}}
{{dsc end}}

The following specializations of {{lc|std::fpos}} are provided: 
{{dsc begin}}
{{dsc header | ios}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|streampos}} | {{c|std::fpos&lt;std::char_traits&lt;char&gt;::state_type&gt;}}}}
{{dsc | {{tt|wstreampos}} | {{c|std::fpos&lt;std::char_traits&lt;wchar_t&gt;::state_type&gt;}}}}
{{dsc end}}

====Error category interface====
{{dsc begin}}
{{dsc header | ios }}
{{dsc inc | cpp/io/dsc io_errc}}
{{dsc inc | cpp/io/dsc iostream_category}}
&lt;!-- TODO: these three specializations go inside the io_errc page 
{{dcl list ptfun | cpp/io/is_error_code_enum  | title=is_error_code_enum{{dsc small|(std::io_errc)}}| notes={{mark c++11}} | extends the type trait {{lc|std::is_error_code_enum}} to identify iostream error codes}}
{{dsc fun | cpp/io/make_error_code | title=make_error_code{{dsc small|(std::io_errc)}} | notes={{mark c++11}} | constructs an iostream error code}}
{{dsc fun | cpp/io/make_error_condition  | title=make_error_condition{{dsc small|(std::io_errc)}} | notes={{mark c++11}} | constructs an iostream error_condition}}
--&gt;
{{dsc end}}

===[[cpp/io/c | C-style IO]]===

C++ also includes the [[cpp/io/c | input/output functions defined by C]], such as {{lc|std::fopen}}, {{lc|std::getc}}, etc.

[[ar:cpp/io]]
[[de:cpp/io]]
[[es:cpp/io]]
[[fr:cpp/io]]
[[it:cpp/io]]
[[ja:cpp/io]]
[[pl:cpp/io]]
[[pt:cpp/io]]
[[ru:cpp/io]]
[[zh:cpp/io]]</text>
      <sha1>fivzfo0g8sv73h9py3ceg6ee7m52ncg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf</title>
    <ns>0</ns>
    <id>485</id>
    <revision>
      <id>71817</id>
      <parentid>71796</parentid>
      <timestamp>2014-06-25T13:34:21Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>charT =&gt; CharT</comment>
      <text xml:space="preserve" bytes="2695">{{cpp/title|basic_filebuf}}
{{cpp/io/basic_filebuf/navbar}}

{{ddcl | header=fstream | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;
&gt; class basic_filebuf : public std::basic_streambuf&lt;CharT, Traits&gt;
}}

{{tt|std::basic_filebuf}} is a {{lc|std::basic_streambuf}} whose associated character sequence is a file. Both the input sequence and the output sequence are associated with the same file, and a joint file position is maintained for both operations.

The functions underflow() and overflow()/sync() perform the actual I/O between the file and the get and put areas of the buffer. When {{tt|CharT}} is not {{c|char}}, most implementations store multibyte characters in the file and a {{lc|std::codecvt}} facet is used to perform wide/multibyte character conversion.

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | streambuf}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|filebuf}} | {{c|basic_filebuf&lt;char&gt;}}}}
{{dsc | {{tt|wfilebuf}} | {{c|basic_filebuf&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc | {{tt|pos_type}} | {{c|Traits::pos_type}} which is required to be {{c|std::fpos&lt;Traits::state_type&gt;}}}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc h1 | Public member functions}}
{{dsc inc | cpp/io/basic_filebuf/dsc basic_filebuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap}}
{{dsc inc | cpp/io/basic_filebuf/dsc ~basic_filebuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc is_open}}
{{dsc inc | cpp/io/basic_filebuf/dsc open}}
{{dsc inc | cpp/io/basic_filebuf/dsc close}}
{{dsc h1 | Protected member functions}}
{{dsc inc | cpp/io/basic_filebuf/dsc showmanyc}}
{{dsc inc | cpp/io/basic_filebuf/dsc underflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc uflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc pbackfail}}
{{dsc inc | cpp/io/basic_filebuf/dsc overflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc setbuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekpos}}
{{dsc inc | cpp/io/basic_filebuf/dsc sync}}
{{dsc inc | cpp/io/basic_filebuf/dsc imbue}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap2}}
{{dsc end}}

{{cpp/io/basic_streambuf/inherit}}

[[de:cpp/io/basic filebuf]]
[[es:cpp/io/basic filebuf]]
[[fr:cpp/io/basic filebuf]]
[[it:cpp/io/basic filebuf]]
[[ja:cpp/io/basic filebuf]]
[[pt:cpp/io/basic filebuf]]
[[ru:cpp/io/basic filebuf]]
[[zh:cpp/io/basic filebuf]]</text>
      <sha1>9iwpvd54jz8vjwu1xdb0g1saaidwwkk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/basic filebuf</title>
    <ns>0</ns>
    <id>5653</id>
    <revision>
      <id>64256</id>
      <parentid>64203</parentid>
      <timestamp>2013-08-15T16:05:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1928">{{cpp/io/basic_filebuf/title |basic_filebuf}}
{{cpp/io/basic_filebuf/navbar}}
{{dcl begin}}
{{dcl| num=1 |
basic_filebuf();
}}
{{dcl| num=2 | since=c++11 |1=
basic_filebuf( const std::basic_filebuf&amp; rhs ) = delete;
}}
{{dcl| num=3 | since=c++11 |
basic_filebuf( std::basic_filebuf&amp;&amp; rhs );
}}
{{dcl end}}

Contructs new {{tt|std::basic_filebuf}} object.

@1@ Constructs a {{tt|std::basic_filebuf}} object, initializing the base class by calling the default constructor of {{lc|std::basic_streambuf}}. The created {{tt|basic_filebuf}} is not associated with a file, and {{lc|is_open()}} returns {{c|false}}.

@2@ The copy constructor is deleted; {{tt|std::basic_filebuf}} is not {{concept|CopyConstructible}}

@3@ Move-constructs a {{tt|std::basic_filebuf}} object by moving all contents from another {{tt|std::basic_filebuf}} object {{tt|rhs}}, including the buffers, the associated file, the locale, the openmode, the is_open variable, and all other state. After move, {{tt|rhs}} is not associated with a file and {{c|1=rhs.is_open()==false}}. The member pointers of the base class {{lc|std::basic_streambuf}} of {{tt|rhs}} and of the base class of {{tt|*this}} are guaranteed to point to different buffers (unless null).

===Parameters===
{{par begin}}
{{par | rhs | another {{tt|basic_filebuf}} }}
{{par end}}

===Notes===
Typically called by the constructor of {{lc|std::basic_fstream}}.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc ~basic_filebuf}}
{{dsc end}}

[[de:cpp/io/basic filebuf/basic filebuf]]
[[es:cpp/io/basic filebuf/basic filebuf]]
[[fr:cpp/io/basic filebuf/basic filebuf]]
[[it:cpp/io/basic filebuf/basic filebuf]]
[[ja:cpp/io/basic filebuf/basic filebuf]]
[[pt:cpp/io/basic filebuf/basic filebuf]]
[[ru:cpp/io/basic filebuf/basic filebuf]]
[[zh:cpp/io/basic filebuf/basic filebuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/close</title>
    <ns>0</ns>
    <id>5647</id>
    <revision>
      <id>76901</id>
      <parentid>64260</parentid>
      <timestamp>2015-03-05T11:32:13Z</timestamp>
      <contributor>
        <ip>83.167.48.2</ip>
      </contributor>
      <comment>returns this, not *this</comment>
      <text xml:space="preserve" bytes="1922">{{cpp/io/basic_filebuf/title | close }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
std::basic_filebuf&lt;CharT, Traits&gt;* close();
}}

If a put area exist (e.g. file was opened for writing), first calls {{c|overflow(Traits::eof())}} to write all pending output to the file, including any unshift sequences.

If the most recently called function, out of {{lc|underflow()}}, {{lc|overflow()}}, {{lc|seekpos()}}, and {{lc|seekoff()}}, was {{lc|overflow()}}, then calls {{c|std::codecvt::unshift()}}, perhaps multiple times, to determine the unshift sequence according to the imbued locale, and writes that sequence to file with {{c|overflow(Traits::eof())}}.

Then, closes the file as if by calling {{lc|std::fclose()}}, regardless of whether any of the preceding calls succeeded or failed.

If any of the function calls made, including the call to {{lc|std::fclose()}}, fails, returns a null pointer.  If any of the function calls made throws an exception, the exception is caught and rethrown after calling {{lc|std::fclose()}}. If the file is already closed, returns a null pointer right away.

In any case, updates the private member variable that is accessed by {{lc|is_open()}}.

===Parameters===
(none)

===Return value===
{{c|this}} on success, a null pointer on failure.

===Notes===
{{tt|close()}} is typically called through the destructor of {{lc|std::basic_filebuf}} (which, in turn, is typically called by the destructor of {{lc|std::basic_fstream}}.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc is_open}}
{{dsc inc | cpp/io/basic_filebuf/dsc ~basic_filebuf}}
{{dsc end}}

[[de:cpp/io/basic filebuf/close]]
[[es:cpp/io/basic filebuf/close]]
[[fr:cpp/io/basic filebuf/close]]
[[it:cpp/io/basic filebuf/close]]
[[ja:cpp/io/basic filebuf/close]]
[[pt:cpp/io/basic filebuf/close]]
[[ru:cpp/io/basic filebuf/close]]
[[zh:cpp/io/basic filebuf/close]]</text>
      <sha1>ddj8aleqx1c82ob0fmn48dep968pu4p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/imbue</title>
    <ns>0</ns>
    <id>5657</id>
    <revision>
      <id>57564</id>
      <parentid>49607</parentid>
      <timestamp>2013-06-01T05:56:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1105">{{cpp/io/basic_filebuf/title | imbue }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
protected:
virtual void imbue( const std::locale&amp; loc )
}}

Changes the associated locale so that all characters inserted or extracted after this call (and until another call to {{tt|imbue()}}) are converted using the {{lc|std::codecvt}} facet of {{tt|loc}}.

If the old locale's encoding is state-dependent and file is not positioned at the beginning, then the new locale must have the same {{lc|std::codecvt}} facet as the one previously imbued.

===Parameters===
{{par begin}}
{{par | loc | the locale to imbue the stream with}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc imbue}}
{{dsc inc | cpp/io/basic_ios/dsc imbue}}
{{dsc end}}

[[de:cpp/io/basic filebuf/imbue]]
[[es:cpp/io/basic filebuf/imbue]]
[[fr:cpp/io/basic filebuf/imbue]]
[[it:cpp/io/basic filebuf/imbue]]
[[ja:cpp/io/basic filebuf/imbue]]
[[pt:cpp/io/basic filebuf/imbue]]
[[ru:cpp/io/basic filebuf/imbue]]
[[zh:cpp/io/basic filebuf/imbue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/is open</title>
    <ns>0</ns>
    <id>5648</id>
    <revision>
      <id>64259</id>
      <parentid>57567</parentid>
      <timestamp>2013-08-15T16:07:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1344">{{cpp/io/basic_filebuf/title |is_open}}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
bool is_open() const;
}}

Returns {{c|true}} if the most recent call to {{lc|open()}} succeeded and there has been no call to {{lc|close()}} since then.

===Parameters===
(none)

===Return value===
{{c|true}} if the associated file is open, {{c|false}} otherwise.

===Notes===
This function is typically called by {{lc|std::basic_fstream::is_open()}}.

===Example===
{{example
 |
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::ifstream fs(&quot;test.txt&quot;);
    std::filebuf fb;
    fb.open(&quot;test.txt&quot;, std::ios_base::in);
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;direct call: &quot; &lt;&lt; fb.is_open() &lt;&lt; '\n'
              &lt;&lt; &quot;through streambuf: &quot; &lt;&lt; fs.rdbuf()-&gt;is_open() &lt;&lt; '\n'
              &lt;&lt; &quot;through fstream: &quot; &lt;&lt; fs.is_open() &lt;&lt; '\n';
}
 | output=
direct call: true
through streambuf: true
through fstream: true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc open}}
{{dsc inc | cpp/io/basic_filebuf/dsc close}}
{{dsc end}}

[[de:cpp/io/basic filebuf/is open]]
[[es:cpp/io/basic filebuf/is open]]
[[fr:cpp/io/basic filebuf/is open]]
[[it:cpp/io/basic filebuf/is open]]
[[ja:cpp/io/basic filebuf/is open]]
[[pt:cpp/io/basic filebuf/is open]]
[[ru:cpp/io/basic filebuf/is open]]
[[zh:cpp/io/basic filebuf/is open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/open</title>
    <ns>0</ns>
    <id>5649</id>
    <revision>
      <id>90765</id>
      <parentid>90749</parentid>
      <timestamp>2017-03-09T12:25:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>{{rrev}}</comment>
      <text xml:space="preserve" bytes="3500">{{cpp/io/basic_filebuf/title |open}}
{{cpp/io/basic_filebuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |
std::basic_filebuf&lt;CharT, Traits&gt;* open( const char* s,
                                         std::ios_base::openmode mode )
}}
{{dcl | num=2 | since=c++11 |
std::basic_filebuf&lt;CharT, Traits&gt;* open( const std::string&amp; str,
                                         std::ios_base::openmode mode ) 
}}
{{dcl | num=3 | since=c++17 |
std::basic_filebuf&lt;CharT, Traits&gt;* open( const std::filesystem::path&amp; p,
                                         std::ios_base::openmode mode ) 
}}
{{dcl | num=4 | since=c++17 |
std::basic_filebuf&lt;CharT, Traits&gt;* open( const std::filesystem::path::value_type* s,
                                         std::ios_base::openmode mode ) 
}}
{{dcl end}}

Opens the file with the given name ({{c|s}}{{rev inl|since=c++17|, {{c|p.c_str()}}}} or {{c|str.c_str()}}, depending on the overload).

{{rrev|since=c++17|Overload {{v|4}} is only provided if {{c|std::filesystem::path::value_type}} is not {{c|char}}.}}

The file is opened as if by calling {{c|std::fopen(s, modestring)}}, where {{tt|modestring}} is determined as follows:

{| class=&quot;wikitable&quot;
|-
! modestring
! openmode &amp; ~ate
! Action if file already exists
! Action if file does not exist
|-
| &quot;r&quot;
| {{c|in}}
| Read from start
| Failure to open
|-
| &quot;w&quot;
| {{c|out}}, {{c|out{{!}}trunc}}
| Destroy contents
| Create new
|-
| &quot;a&quot;
| {{c|app}}, {{c|out{{!}}app}}
| Append to file
| Create new
|-
| &quot;r+&quot;
| {{c|out{{!}}in}}
| Read from start
| Error
|-
| &quot;w+&quot;
| {{c|out{{!}}in{{!}}trunc}}
| Destroy contents
| Create new
|-
| &quot;a+&quot;
| {{c|out{{!}}in{{!}}app}}, {{c|in{{!}}app}}
| Write to end
| Create new
|-
| &quot;rb&quot;
| {{c|binary{{!}}in}}
| Read from start
| Failure to open
|-
| &quot;wb&quot;
| {{c|binary{{!}}out}}, {{c|binary{{!}}out{{!}}trunc}}
| Destroy contents
| Create new
|-
| &quot;ab&quot;
| {{c|binary{{!}}app}}, {{c|binary{{!}}out{{!}}app}}
| Write to end
| Create new
|-
| &quot;r+b&quot;
| {{c|binary{{!}}out{{!}}in}}
| Read from start
| Error
|-
| &quot;w+b&quot;
| {{c|binary{{!}}out{{!}}in{{!}}trunc}}
| Destroy contents
| Create new
|-
| &quot;a+b&quot;
| {{c|binary{{!}}out{{!}}in{{!}}app}}, {{c|binary{{!}}in{{!}}app}}
| Write to end
| Create new
|}

If {{tt|openmode}} is not one of the modes listed, the {{tt|open()}} fails.

If the open operation succeeds and {{c|1=openmode &amp; std::ios_base::ate != 0}} (the {{tt|ate}} bit is set), repositions the file position to the end of file, as if by calling {{c|std::fseek(file, 0, SEEK_END)}}. If the repositioning fails, calls {{lc|close()}} and returns a null pointer to indicate failure.

If the associated file was already open, returns a null pointer right away.

===Parameters===
{{par begin}}
{{par | s, str, p | the file name to open }}
{{par | openmode | the file opening mode, a binary OR of the {{lc|std::ios_base}} modes}}
{{par end}}

===Return value===
{{c|this}} on success, a null pointer on failure.

===Notes===
{{tt|open()}} is typically called through the constructor or the {{tt|open()}} member function of {{lc|std::basic_fstream}}.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc is_open}}
{{dsc inc | cpp/io/basic_filebuf/dsc close}}
{{dsc end}}

[[de:cpp/io/basic filebuf/open]]
[[es:cpp/io/basic filebuf/open]]
[[fr:cpp/io/basic filebuf/open]]
[[it:cpp/io/basic filebuf/open]]
[[ja:cpp/io/basic filebuf/open]]
[[pt:cpp/io/basic filebuf/open]]
[[ru:cpp/io/basic filebuf/open]]
[[zh:cpp/io/basic filebuf/open]]</text>
      <sha1>rmb6n406dgvrcglkbnghcydfccbh27w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/operator=</title>
    <ns>0</ns>
    <id>5651</id>
    <revision>
      <id>64257</id>
      <parentid>62725</parentid>
      <timestamp>2013-08-15T16:06:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt, +lc</comment>
      <text xml:space="preserve" bytes="1816">{{cpp/io/basic_filebuf/title |operator{{=}}}}
{{cpp/io/basic_filebuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |1=
std::basic_filebuf&amp; operator=( std::basic_filebuf&amp;&amp; rhs );
}}
{{dcl | 1=
std::basic_filebuf&amp; operator=( const std::basic_filebuf&amp; rhs ) = delete;
}}
{{dcl end}}

Assigns another {{tt|basic_filebuf}} object.

@1@ First calls {{lc|close()}} to close the associated file, then moves the contents of {{tt|rhs}} into {{tt|*this}}: the put and get buffers, the associated file, the locale, the openmode, the is_open flag, and any other state. After the move, {{tt|rhs}} is not associated with a file and {{c|1=rhs.is_open() == false}}.

@2@ The copy assignment operator is deleted; {{tt|basic_filebuf}} is not {{concept|CopyAssignable}}.

===Parameters===
{{par begin}}
{{par | rhs | another {{tt|basic_filebuf}} that will be moved from}}
{{par end}}

===Return value===
{{tt|*this}}

===Example===
{{example
 |
 | code=
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{

    std::ifstream fin(&quot;test.in&quot;); // read-only
    std::ofstream fout(&quot;test.out&quot;); // write-only

    std::string s;
    getline(fin, s);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // output

    *fin.rdbuf() = std::move(*fout.rdbuf());

    getline(fin, s);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // empty line

    std::cout &lt;&lt; std::boolalpha &lt;&lt; fout.is_open() &lt;&lt; '\n'; // prints &quot;false&quot;

}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc basic_filebuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap}}
{{dsc end}}

[[de:cpp/io/basic filebuf/operator=]]
[[es:cpp/io/basic filebuf/operator=]]
[[fr:cpp/io/basic filebuf/operator=]]
[[it:cpp/io/basic filebuf/operator=]]
[[ja:cpp/io/basic filebuf/operator=]]
[[pt:cpp/io/basic filebuf/operator=]]
[[ru:cpp/io/basic filebuf/operator=]]
[[zh:cpp/io/basic filebuf/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/overflow</title>
    <ns>0</ns>
    <id>5672</id>
    <revision>
      <id>85707</id>
      <parentid>63168</parentid>
      <timestamp>2016-05-04T21:53:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention the use of always_noconv</comment>
      <text xml:space="preserve" bytes="1573">{{cpp/io/basic_filebuf/title | overflow }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |1=
protected:
virtual int_type overflow ( int_type c = Traits::eof() );
}}

Writes some data from the put area to the associated character sequence (to the file).

Behaves like the base class {{lc|std::basic_streambuf::overflow}}, except that to write the data, first uses {{lc|std::codecvt::out}} of the imbued locale to convert the characters into external (possibly multibyte) representation, stored in a temporary buffer (allocated as large as necessary), then uses file I/O to copy all fully-converted bytes into the file.

If {{lc|std::codecvt::always_noconv}} is true, the call to {{lc|std::codecvt::out}} may be skipped.

If the conversion fails with {{lc|std::codecvt_base::error}}, returns {{c|Traits::eof()}} without attempting any output.

If the associated file is not open ({{c|1=is_open() == false}}), returns {{c|Traits::eof()}} before doing anything.

===Parameters===
(none)

===Return value===
{{c|Traits::not_eof(c)}} to indicate success or {{c|Traits::eof()}} to indicate failure.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc overflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc underflow}}
{{dsc end}}

[[de:cpp/io/basic filebuf/overflow]]
[[es:cpp/io/basic filebuf/overflow]]
[[fr:cpp/io/basic filebuf/overflow]]
[[it:cpp/io/basic filebuf/overflow]]
[[ja:cpp/io/basic filebuf/overflow]]
[[pt:cpp/io/basic filebuf/overflow]]
[[ru:cpp/io/basic filebuf/overflow]]
[[zh:cpp/io/basic filebuf/overflow]]</text>
      <sha1>bftledg3w0jvu6pudfybm7mrwll4ck4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/pbackfail</title>
    <ns>0</ns>
    <id>5658</id>
    <revision>
      <id>57575</id>
      <parentid>49612</parentid>
      <timestamp>2013-06-01T05:56:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2642">{{cpp/io/basic_filebuf/title | pbackfail }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |1=
protected:
virtual int_type pbackfail( int_type c = Traits::eof() )
}}

This protected virtual function is called by the public functions {{l2tt|cpp/io/basic_streambuf/sungetc}} and {{l2tt|cpp/io/basic_streambuf/sputbackc}} (which, in turn, are called by {{l2tt|cpp/io/basic_istream/unget}} and {{l2tt|cpp/io/basic_istream/putback}}). 

@1@ The caller is requesting that the get area is backed up by one character ({{tt|pbackfail()}} is called with no arguments), in which case, this function re-reads the file starting one byte earlier and decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}, e.g. by calling {{c|gbump(-1)}}.
@2@ The caller attempts to putback a different character from the one retrieved earlier ({{tt|pbackfail()}} is called with the character that needs to be put back), in which case
:@a@ First, checks if there is a putback position, and if there isn't, backs up the get area by re-reading the file starting one byte earlier.
:@a@ Then checks what character is in the putback position. If the character held there is already equal to {{tt|c}}, as determined by {{c|Traits::eq(to_char_type(c), gptr()[-1])}}, then simply decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}.
:@b@ Otherwise, if the buffer is allowed to modify its own get area, decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}} and writes {{tt|c}} to the location pointed to gptr() after adjustment.

This function never modifies the file, only the get area of the in-memory buffer.

If the file is not open ({{c|1=is_open()==false}}, this function returns {{c|Traits::eof()}} immediately.

===Parameters===
{{par begin}}
{{par | c | the character to put back, or Traits::eof() to indicate that backing up of the get area is requested}}
{{par end}}

===Return value===
{{c|c}} on success except if {{tt|c}} was {{c|Traits::eof()}}, in which case {{c|Traits::not_eof(c)}} is returned.

{{c|Traits::eof()}} on failure.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbackfail}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc inc | cpp/io/basic_istream/dsc putback}}
{{dsc end}}

[[de:cpp/io/basic filebuf/pbackfail]]
[[es:cpp/io/basic filebuf/pbackfail]]
[[fr:cpp/io/basic filebuf/pbackfail]]
[[it:cpp/io/basic filebuf/pbackfail]]
[[ja:cpp/io/basic filebuf/pbackfail]]
[[pt:cpp/io/basic filebuf/pbackfail]]
[[ru:cpp/io/basic filebuf/pbackfail]]
[[zh:cpp/io/basic filebuf/pbackfail]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/seekoff</title>
    <ns>0</ns>
    <id>5674</id>
    <revision>
      <id>80459</id>
      <parentid>64194</parentid>
      <timestamp>2015-08-13T22:00:06Z</timestamp>
      <contributor>
        <username>Bran</username>
        <id>4364</id>
      </contributor>
      <minor/>
      <comment>Use a unique name for the second parameter</comment>
      <text xml:space="preserve" bytes="4905">{{cpp/io/basic_filebuf/title |seekoff}}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |1=
protected:
virtual pos_type seekoff( off_type off,
                          std::ios_base::seekdir dir,
                          std::ios_base::openmode which = std::ios_base::in {{!}} std::ios_base::out );
}}

Repositions the file pointer, if possible, to the position that corresponds to exactly {{tt|off}} characters from beginning, end, or current position of the file (depending on the value of {{tt|dir}}.

If the associated file is not open ({{c|1=is_open()==false}}, fails immediately.

If the multibyte character encoding is state-dependent ({{ltt|cpp/locale/codecvt/encoding|codecvt::encoding()}} returned {{c|-1}}) or variable-length ({{tt|codecvt::encoding()}} returned {{c|0}}) and the offset {{tt|off}} is not {{c|0}}, fails immediately: this function cannot determine the number of bytes that correspond to {{tt|off}} characters.

If {{tt|dir}} is not {{lc|std::basic_ios::cur}} or the offset {{tt|off}} is not {{c|0}}, and the most resent operation done on this filebuf object was output (that is, either the put buffer is not empty, or the most recently called function was {{lc|overflow()}}), then calls {{c|std::codecvt::unshift}} to determine the unshift sequence necessary, and writes that sequence to the file by calling {{lc|overflow()}}.

Then converts the argument {{tt|dir}} to a value {{tt|whence}} of type {{c|int}} as follows:

{{dsc begin}}
{{dsc hitem | value of {{tt|dir}} | value of {{tt|whence}} }}
{{dsc | {{c|std::basic_ios::beg}} | {{lc|SEEK_SET}} }}
{{dsc | {{c|std::basic_ios::end}} | {{lc|SEEK_END}} }}
{{dsc | {{c|std::basic_ios::cur}} | {{lc|SEEK_CUR}} }}
{{dsc end}}

Then, if the character encoding is fixed-width ({{tt|codecvt::encoding()}} returns some positive number {{tt|width}}, moves the file pointer as if by {{c|std::fseek(file, width*off, whence)}}.

Otherwise, moves the file pointer as if by {{c|std::fseek(file, 0, whence)}}.

The {{tt|openmode}} argument, required by the base class function signature, is usually ignored, because {{tt|std::basic_filebuf}} maintains only one file position.

===Parameters===
{{par begin}}
{{par | off | relative position to set the position indicator to.}}
{{par | dir | defines base position to apply the relative offset to. It can be one of the following constants:
{{cpp/io/ios_base/seekdir consts}} }}
{{par | which | defines which of the input and/or output sequences to affect. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Return value===
A newly constructed object of type {{c|pos_type}} which stores the resulting file position, or {{c|pos_type(off_type(-1))}} on failure.

===Notes===
{{tt|seekoff()}} is called by {{c|std::basic_streambuf::pubseekoff}}, which is called by {{c|std::basic_istream::seekg}}, {{c|std::basic_ostream::seekp}}, {{c|std::basic_istream::tellg}}, and {{c|std::basic_ostream::tellp}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;locale&gt;
int main()
{
    // prepare a 10-byte file holding 4 characters in UTF8
    std::ofstream(&quot;text.txt&quot;) &lt;&lt; u8&quot;z\u00df\u6c34\U0001d10b&quot;; // or u8&quot;zß水𝄋&quot;
                                           // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;

    // open using a non-converting encoding
    std::ifstream f1(&quot;text.txt&quot;);
    std::cout &lt;&lt; &quot;f1's locale's encoding() returns &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;char, char, std::mbstate_t&gt;&gt;(f1.getloc()).encoding() &lt;&lt; '\n'
              &lt;&lt; &quot;pubseekoff(3, beg) returns &quot; &lt;&lt; f1.rdbuf()-&gt;pubseekoff(3, std::ios_base::beg) &lt;&lt; '\n'
              &lt;&lt; &quot;pubseekoff(0, end) returns &quot; &lt;&lt; f1.rdbuf()-&gt;pubseekoff(0, std::ios_base::end) &lt;&lt; '\n';;

    // open using UTF-8
    std::wifstream f2(&quot;text.txt&quot;);
    f2.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    std::cout &lt;&lt; &quot;f2's locale's encoding() returns &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(f2.getloc()).encoding() &lt;&lt; '\n'
              &lt;&lt; &quot;pubseekoff(3, beg) returns &quot; &lt;&lt; f2.rdbuf()-&gt;pubseekoff(3, std::ios_base::beg) &lt;&lt; '\n'
              &lt;&lt; &quot;pubseekoff(0, end) returns &quot; &lt;&lt; f2.rdbuf()-&gt;pubseekoff(0, std::ios_base::end) &lt;&lt; '\n';

}
 | output=
f1's locale's encoding() returns 1
pubseekoff(3, beg) returns 3
pubseekoff(0, end) returns 10
f2's locale's encoding() returns 0
pubseekoff(3, beg) returns -1
pubseekoff(0, end) returns 10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekoff}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekpos}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc end}}

[[de:cpp/io/basic filebuf/seekoff]]
[[es:cpp/io/basic filebuf/seekoff]]
[[fr:cpp/io/basic filebuf/seekoff]]
[[it:cpp/io/basic filebuf/seekoff]]
[[ja:cpp/io/basic filebuf/seekoff]]
[[pt:cpp/io/basic filebuf/seekoff]]
[[ru:cpp/io/basic filebuf/seekoff]]
[[zh:cpp/io/basic filebuf/seekoff]]</text>
      <sha1>iolq3snvr15apa5opsoptkpzf0u9anl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/seekpos</title>
    <ns>0</ns>
    <id>5675</id>
    <revision>
      <id>81570</id>
      <parentid>65339</parentid>
      <timestamp>2015-10-27T22:45:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2473</comment>
      <text xml:space="preserve" bytes="3575">{{cpp/io/basic_filebuf/title |seekpos}}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |1=
protected:
virtual pos_type seekpos( pos_type sp,
                          std::ios_base::openmode which = std::ios_base::in {{!}} std::ios_base::out );
}}

Repositions the file pointer, if possible, to the position indicated by {{tt|sp}}.

If the associated file is not open ({{c|1=is_open()==false}}), fails immediately.

If the file is open for writing, first writes the put area and any unshift sequences required by the currently imbued locale, using {{lc|overflow()}}

Then repositions the file pointer, as if by calling {{lc|std::fsetpos()}}

If the file is open for reading, updates the get area if necessary.

If {{tt|sp}} was not obtained by calling {{lc|seekoff()}} or {{tt|seekpos()}} on the same file, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | sp | file position obtained by {{lc|seekoff()}} or {{tt|seekpos()}} called earlier on the same file }}
{{par | which | defines which of the input and/or output sequences to affect. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Return value===
{{tt|sp}} on success or {{c|pos_type(off_type(-1))}} on failure.

===Notes===
{{tt|seekpos()}} is called by {{lc|std::basic_streambuf::pubseekpos()}}, which is called by the single-argument versions of {{lc|std::basic_istream::seekg()}} and {{lc|std::basic_ostream::seekp()}}

Many implementations do not update the get area in {{tt|seekpos()}}, delegating to {{lc|underflow()}} that is called by the nest {{lc|sgetc()}}

===Example===
{{example
 | on some implementations, the get area is emptied by seekpos() and the second underflow() is necessary to observe the effects
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::filebuf
{
    pos_type seekpos(pos_type sp, std::ios_base::openmode which) {
         std::cout &lt;&lt; &quot;Before seekpos(&quot; &lt;&lt; sp &lt;&lt; &quot;), size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
         pos_type rc = std::filebuf::seekpos(sp, which);
         std::cout &lt;&lt; &quot;seekpos() returns &quot; &lt;&lt; rc &lt;&lt; &quot;.\nAfter the call, &quot;
                   &lt;&lt; &quot;size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
// uncomment if get area is emptied by seekpos()
//         std::filebuf::underflow();
//         std::cout &lt;&lt; &quot;after forced underflow(), size of the get area is &quot;
//                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
//                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
        return rc;
    }
};

int main()
{
    mybuf buf;
    buf.open(&quot;test.txt&quot;, std::ios_base::in);
    std::istream stream(&amp;buf);
    stream.get(); // read one char to force underflow()
    stream.seekg(2);
}
 | p=true
 | output=
Before seekpos(2), size of the get area is 110 with 109 read positions available
seekpos() returns 2.
After the call, size of the get area is 110 with 108 read positions available
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekpos}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekoff}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc end}}

[[de:cpp/io/basic filebuf/seekpos]]
[[es:cpp/io/basic filebuf/seekpos]]
[[fr:cpp/io/basic filebuf/seekpos]]
[[it:cpp/io/basic filebuf/seekpos]]
[[ja:cpp/io/basic filebuf/seekpos]]
[[pt:cpp/io/basic filebuf/seekpos]]
[[ru:cpp/io/basic filebuf/seekpos]]
[[zh:cpp/io/basic filebuf/seekpos]]</text>
      <sha1>mq4v6139hpwtoqqvrgrz08uv9xxytkc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/setbuf</title>
    <ns>0</ns>
    <id>4565</id>
    <revision>
      <id>69877</id>
      <parentid>62415</parentid>
      <timestamp>2014-04-30T13:49:34Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Return value */ correcting</comment>
      <text xml:space="preserve" bytes="2932">{{cpp/io/basic_filebuf/title | setbuf }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
protected:
virtual std::basic_streambuf&lt;CharT, Traits&gt;* setbuf( char_type* s, std::streamsize n )
}}

If {{tt|s}} is a null pointer and {{tt|n}} is zero, the filebuf becomes ''unbuffered'' for output, meaning {{tt|pbase()}} and {{tt|pptr()}} are null and any output is immediately sent to file.

Otherwise, a call to {{tt|setbuf()}} replaces the internal buffer (the controlled character sequence) with the user-supplied character array whose first element is pointed to by {{tt|s}} and allows this {{lc|std::basic_filebuf}} object to use up to {{tt|n}} bytes in that array for buffering.

This function is protected virtual, it may only be called through {{tt|pubsetbuf()}} or from member functions of a user-defined class derived from {{tt|std::basic_filebuf}}.

===Parameters===
{{par begin}}
{{par | s | pointer to the first byte in the user-provided buffer or null}}
{{par | n | the number of bytes in the user-provided buffer or zero}}
{{par end}}

===Return value===
{{c|this}}.

===Notes===
The conditions when this function may be used and the way in which the provided buffer is used is implementation-defined.

* GCC 4.6 libstdc++
: {{tt|setbuf()}} may only be called when the {{lc|std::basic_filebuf}} is not associated with a file (has no effect otherwise). With a user-provided buffer, reading from file reads {{tt|n-1}} bytes at a time.
* Clang++3.0 libc++
: {{tt|setbuf()}} may be called after opening the file, but before any I/O (may crash otherwise). With a user-provided buffer, reading from file reads largest multiples of 4096 that fit in the buffer. 
* Visual Studio 2010 
: {{tt|setbuf()}} may be called at any time, even after some I/O took place. Current contents of the buffer, if any, are lost.

The standard does not define any behavior for this function except that {{tt|setbuf(0, 0)}} called before any I/O has taken place is required to set unbuffered output.

===Example===
{{example
 | provide a 10k buffer for reading. On linux, the strace utility may be used to observe the actual number of bytes read
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
        int cnt = 0;
        std::ifstream file;
        char buf[10241];

        file.rdbuf()-&gt;pubsetbuf(buf, sizeof buf);
        file.open(&quot;/usr/share/dict/words&quot;);

        for (std::string line; getline(file, line); )
                ++cnt;
        std::cout &lt;&lt; cnt &lt;&lt; '\n';
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsetbuf | mem=std::basic_streambuf}}
{{dsc inc | cpp/io/c/dsc setvbuf}}
{{dsc end}}

[[de:cpp/io/basic filebuf/setbuf]]
[[es:cpp/io/basic filebuf/setbuf]]
[[fr:cpp/io/basic filebuf/setbuf]]
[[it:cpp/io/basic filebuf/setbuf]]
[[ja:cpp/io/basic filebuf/setbuf]]
[[pt:cpp/io/basic filebuf/setbuf]]
[[ru:cpp/io/basic filebuf/setbuf]]
[[zh:cpp/io/basic filebuf/setbuf]]</text>
      <sha1>gqd7qya0svkmnkssy7as846z8brrlds</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/showmanyc</title>
    <ns>0</ns>
    <id>5654</id>
    <revision>
      <id>76905</id>
      <parentid>57583</parentid>
      <timestamp>2015-03-05T15:24:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>use file name that exists on coliru in the example, and the pronunciation  note</comment>
      <text xml:space="preserve" bytes="1643">{{cpp/io/basic_filebuf/title | showmanyc }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
protected:
virtual std::streamsize showmanyc()
}}

If implemented, returns the number of characters left to read from the file.

===Parameters===
(none)

===Return value===
The number of characters available for reading from the file, or {{c|-1}} if the end of file was reached.

===Notes===
This function is optional. If not implemented, this function returns {{c|0}} (since the base class version {{c|std::basic_streambuf::showmanyc}} gets called)

Whether implemented or not, this function is normally called by {{c|std::basic_streambuf::in_avail}} if the get area is empty.

The name of this function stands for &quot;stream: how many characters?&quot;, so it is pronounced &quot;S how many C&quot;, rather than &quot;show many C&quot;

===Example===
{{example
 | implementation test to see if showmanyc() is implemented for filebuf
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::filebuf
{
     using std::filebuf::showmanyc;
};

int main()
{
    mybuf fin;
    fin.open(&quot;main.cpp&quot;, std::ios_base::in);
    std::cout &lt;&lt; &quot;showmanyc() returns &quot; &lt;&lt; fin.showmanyc() &lt;&lt; '\n';
}
|p=true
| output=
showmanyc() returns 267
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc in_avail}}
{{dsc inc | cpp/io/basic_istream/dsc readsome}}
{{dsc end}}

[[de:cpp/io/basic filebuf/showmanyc]]
[[es:cpp/io/basic filebuf/showmanyc]]
[[fr:cpp/io/basic filebuf/showmanyc]]
[[it:cpp/io/basic filebuf/showmanyc]]
[[ja:cpp/io/basic filebuf/showmanyc]]
[[pt:cpp/io/basic filebuf/showmanyc]]
[[ru:cpp/io/basic filebuf/showmanyc]]
[[zh:cpp/io/basic filebuf/showmanyc]]</text>
      <sha1>5sts5qdgpqrcq09z08izd0ncnw0x1im</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/swap</title>
    <ns>0</ns>
    <id>5650</id>
    <revision>
      <id>80026</id>
      <parentid>62726</parentid>
      <timestamp>2015-07-28T19:06:40Z</timestamp>
      <contributor>
        <username>Cppguy</username>
        <id>4311</id>
      </contributor>
      <text xml:space="preserve" bytes="1447">{{cpp/io/basic_filebuf/title |swap}}
{{cpp/io/basic_filebuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void swap( std::basic_filebuf&amp; rhs );
}}
{{dcl end}}

Swaps the state and the contents of {{c|*this}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | rhs | another {{tt|basic_filebuf}} }}
{{par end}}

===Return value===
(none)

===Notes===
This function is called automatically when swapping {{lc|std::fstream}} objects, it is rarely necessary to call it directly.

===Example===
{{example
 |
 | code=
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::ifstream fin(&quot;test.in&quot;); // read-only
    std::ofstream fout(&quot;test.out&quot;); // write-only

    std::string s;
    getline(fin, s);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // outputs the first line of test.in

    fin.rdbuf()-&gt;swap(*fout.rdbuf()); //swap the underlying buffers

    getline(fin, s); // fails: cannot read from a write-only filebuf
    std::cout &lt;&lt; s &lt;&lt; '\n'; // prints empty line
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap2}}
{{dsc inc | cpp/io/basic_fstream/dsc swap | basic_fstream}}
{{dsc end}}

[[de:cpp/io/basic filebuf/swap]]
[[es:cpp/io/basic filebuf/swap]]
[[fr:cpp/io/basic filebuf/swap]]
[[it:cpp/io/basic filebuf/swap]]
[[ja:cpp/io/basic filebuf/swap]]
[[pt:cpp/io/basic filebuf/swap]]
[[ru:cpp/io/basic filebuf/swap]]
[[zh:cpp/io/basic filebuf/swap]]</text>
      <sha1>q9jyp0evig0zr4kju6v5kt9366ayaqc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/swap2</title>
    <ns>0</ns>
    <id>5676</id>
    <revision>
      <id>63141</id>
      <parentid>62727</parentid>
      <timestamp>2013-07-03T08:00:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1040">{{cpp/title | swap&lt;small&gt;(std::basic_filebuf)&lt;/small&gt;}}
{{cpp/io/basic_filebuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class CharT, class Traits &gt;
void swap( std::basic_filebuf&lt;CharT,Traits&gt;&amp; lhs,
           std::basic_filebuf&lt;CharT,Traits&gt;&amp; rhs );
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::basic_filebuf}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{lc|std::basic_filebuf}} objects whose states to swap}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc swap}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc end}}

[[de:cpp/io/basic filebuf/swap2]]
[[es:cpp/io/basic filebuf/swap2]]
[[fr:cpp/io/basic filebuf/swap2]]
[[it:cpp/io/basic filebuf/swap2]]
[[ja:cpp/io/basic filebuf/swap2]]
[[pt:cpp/io/basic filebuf/swap2]]
[[ru:cpp/io/basic filebuf/swap2]]
[[zh:cpp/io/basic filebuf/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/sync</title>
    <ns>0</ns>
    <id>5629</id>
    <revision>
      <id>81571</id>
      <parentid>64261</parentid>
      <timestamp>2015-10-27T22:48:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2473</comment>
      <text xml:space="preserve" bytes="1257">{{cpp/io/basic_filebuf/title | sync }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
protected:
virtual int sync()
}}

If a put area exists (e.g. the file was opened for writing), calls {{lc|overflow()}} to write all pending output to the file, then flushes the file as if by calling {{lc|std::fflush}}.

If a get area exists (e.g. the file was opened for reading), the effect is implementation-defined. Typical implementation may empty out the get area and move the current file position back by the corresponding number of bytes.

===Parameters===
(none)

===Return value===
{{c|0}} in case of success, {{c|-1}} in case of failure.

===Notes===
{{tt|sync()}} or its equivalent is implicitly called by {{lc|close()}}, {{lc|seekoff()}}, and {{lc|seekpos()}} and explicitly called by {{lc|std::basic_streambuf::pubsync()}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsync}}
{{dsc inc | cpp/io/c/dsc fflush}}
{{dsc end}}

[[de:cpp/io/basic filebuf/sync]]
[[es:cpp/io/basic filebuf/sync]]
[[fr:cpp/io/basic filebuf/sync]]
[[it:cpp/io/basic filebuf/sync]]
[[ja:cpp/io/basic filebuf/sync]]
[[pt:cpp/io/basic filebuf/sync]]
[[ru:cpp/io/basic filebuf/sync]]
[[zh:cpp/io/basic filebuf/sync]]</text>
      <sha1>8lu5cqno7j6lmcj2gj74o83b1b8a6rw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/uflow</title>
    <ns>0</ns>
    <id>5656</id>
    <revision>
      <id>64195</id>
      <parentid>57591</parentid>
      <timestamp>2013-08-15T15:24:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="1039">{{cpp/io/basic_filebuf/title | uflow }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
protected:
virtual int_type uflow()
}}

Behaves like the {{lc|underflow()}}, except that if {{lc|underflow()}} succeeds (does not return {{c|Traits::eof()}}), then advances the next pointer for the get area. In other words, consumes one of the characters obtained by {{lc|underflow()}}.

===Parameters===
(none)

===Return value===
The value of the character that was read and consumed in case of success, or {{c|Traits::eof()}} in case of failure.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc uflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc underflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc overflow}}
{{dsc end}}

[[de:cpp/io/basic filebuf/uflow]]
[[es:cpp/io/basic filebuf/uflow]]
[[fr:cpp/io/basic filebuf/uflow]]
[[it:cpp/io/basic filebuf/uflow]]
[[ja:cpp/io/basic filebuf/uflow]]
[[pt:cpp/io/basic filebuf/uflow]]
[[ru:cpp/io/basic filebuf/uflow]]
[[zh:cpp/io/basic filebuf/uflow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/underflow</title>
    <ns>0</ns>
    <id>5655</id>
    <revision>
      <id>65335</id>
      <parentid>62303</parentid>
      <timestamp>2013-09-09T17:44:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+example and seealsos</comment>
      <text xml:space="preserve" bytes="2687">{{cpp/io/basic_filebuf/title | underflow }}
{{cpp/io/basic_filebuf/navbar}}
{{ddcl |
protected:
virtual int_type underflow()
}}

Reads more data into the input area. 

Behaves like the base class {{c|std::basic_streambuf::underflow}}, except that to read the data from the associated character sequence (the file) into the get area, first reads the bytes from the file into a temporary buffer (allocated as large as necessary), then uses {{c|std::codecvt::in}} of the imbued locale to convert the external (typically, multibyte) representation to the internal form which is then used to populate the get area. The conversion may be skipped if the locale's {{c|std::codecvt::always_noconv}} returns {{c|true}}

===Parameters===
(none)

===Return value===
{{c|Traits::to_int_type(*gptr())}} (the first character of the pending sequence) in case of success, or {{c|Traits::eof()}} in case of failure.

===Example===
{{example
 |
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::filebuf
{
    int underflow() {
         std::cout &lt;&lt; &quot;Before underflow(): size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
         int rc = std::filebuf::underflow();
         std::cout &lt;&lt; &quot;underflow() returns &quot; &lt;&lt; rc &lt;&lt; &quot;.\nAfter the call, &quot;
                   &lt;&lt; &quot;size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
        return rc;
    }
};

int main()
{
    mybuf buf;
    buf.open(&quot;test.txt&quot;, std::ios_base::in);
    std::istream stream(&amp;buf);
    while(stream.get()) ;
}
 | p=true
 | output=
Before underflow(): size of the get area is 0 with 0 read positions available
underflow() returns 73.
After the call, size of the get area is 110 with 110 read positions available
Before underflow(): size of the get area is 110 with 0 read positions available
underflow() returns -1.
After the call, size of the get area is 0 with 0 read positions available
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_stringbuf/dsc underflow}}
{{dsc inc | cpp/io/strstreambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc uflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc overflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc end}}

[[de:cpp/io/basic filebuf/underflow]]
[[es:cpp/io/basic filebuf/underflow]]
[[fr:cpp/io/basic filebuf/underflow]]
[[it:cpp/io/basic filebuf/underflow]]
[[ja:cpp/io/basic filebuf/underflow]]
[[pt:cpp/io/basic filebuf/underflow]]
[[ru:cpp/io/basic filebuf/underflow]]
[[zh:cpp/io/basic filebuf/underflow]]</text>
      <sha1>hpibp8ksajsb2uc00pcgk356n56ni9z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic filebuf/~basic filebuf</title>
    <ns>0</ns>
    <id>5652</id>
    <revision>
      <id>64204</id>
      <parentid>57593</parentid>
      <timestamp>2013-08-15T15:29:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="992">{{cpp/io/basic_filebuf/title |~basic_filebuf}}
{{cpp/io/basic_filebuf/navbar}}
{{dcl begin}}
{{ddcl| 
virtual ~basic_filebuf();
}}
{{dcl end}}

Calls {{lc|close()}} to close the associated file and destructs all other members of {{tt|basic_filebuf}}. If an exception is thrown by {{lc|close()}}, it is caught and not rethrown.

===Parameters===
(none)

===Return value===
(none)

===Notes===
Typically called by the destructor of {{lc|std::basic_fstream}}.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc basic_filebuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc close}}
{{dsc end}}

[[de:cpp/io/basic filebuf/~basic filebuf]]
[[es:cpp/io/basic filebuf/~basic filebuf]]
[[fr:cpp/io/basic filebuf/~basic filebuf]]
[[it:cpp/io/basic filebuf/~basic filebuf]]
[[ja:cpp/io/basic filebuf/~basic filebuf]]
[[pt:cpp/io/basic filebuf/~basic filebuf]]
[[ru:cpp/io/basic filebuf/~basic filebuf]]
[[zh:cpp/io/basic filebuf/~basic filebuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream</title>
    <ns>0</ns>
    <id>486</id>
    <revision>
      <id>90449</id>
      <parentid>90414</parentid>
      <timestamp>2017-02-23T14:56:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>trimming example, losing non-idiomatic code, adding seek. hacky way to specify the flags, but it's too verbose otherwise</comment>
      <text xml:space="preserve" bytes="3216">{{cpp/title|basic_fstream}}
{{cpp/io/basic_fstream/navbar}}
{{ddcl | header=fstream |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt;
&gt; class basic_fstream : public std::basic_iostream&lt;CharT, Traits&gt;
}}

The class template {{tt|basic_fstream}} implements high-level input/output operations on file based streams. It interfaces a file-based streambuffer ({{lc|std::basic_filebuf}}) with the high-level interface of ({{lc|std::basic_iostream}}).

A typical implementation of {{tt|std::basic_fstream}} holds only one non-derived data member: an instance of {{c|std::basic_filebuf&lt;CharT, Traits&gt;}}.

{{inheritance diagram/std-basic_fstream}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | fstream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|fstream}} | {{c|basic_fstream&lt;char&gt;}}}}
{{dsc | {{tt|wfstream}} | {{c|basic_fstream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc constructor | basic_fstream}}
{{dsc inc | cpp/io/basic_fstream/dsc destructor | basic_fstream}}
{{dsc inc | cpp/io/basic_fstream/dsc operator{{=}} | basic_fstream}}
{{dsc inc | cpp/io/basic_fstream/dsc swap | basic_fstream}}
{{dsc inc | cpp/io/basic_fstream/dsc rdbuf | basic_fstream}}

{{dsc h2 | File operations }}
{{dsc inc | cpp/io/basic_fstream/dsc is_open | basic_fstream}}
{{dsc inc | cpp/io/basic_fstream/dsc open | basic_fstream}}
{{dsc inc | cpp/io/basic_fstream/dsc close | basic_fstream}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_fstream}}
{{dsc end}}

{{cpp/io/basic_istream/inherit}}
{{cpp/io/basic_ostream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc getline}}
{{dsc end}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
 
int main() {
  std::string filename = &quot;test.bin&quot;;
  std::fstream s(filename, s.binary {{!}} s.trunc {{!}} s.in {{!}} s.out);
  if (!s.is_open()) {
    std::cout &lt;&lt; &quot;failed to open &quot; &lt;&lt; filename &lt;&lt; '\n';
  } else {
    // write
    double d = 3.14;
    s.write(reinterpret_cast&lt;char*&gt;(&amp;d), sizeof d); // binary output
    s &lt;&lt; 123 &lt;&lt; &quot;abc&quot;;                              // text output

    // for fstream, this moves the file position pointer (both put and get)
    s.seekp(0);
    
    // read
    s.read(reinterpret_cast&lt;char*&gt;(&amp;d), sizeof d); // binary input
    int n;
    std::string str;
    if (s &gt;&gt; n &gt;&gt; str)                             // text input
      std::cout &lt;&lt; &quot;read back from file: &quot; &lt;&lt; d &lt;&lt; ' ' &lt;&lt; n &lt;&lt; ' ' &lt;&lt; str &lt;&lt; '\n';
  }
}
|output=
read back from file: 3.14 123 abc
}}

[[de:cpp/io/basic fstream]]
[[es:cpp/io/basic fstream]]
[[fr:cpp/io/basic fstream]]
[[it:cpp/io/basic fstream]]
[[ja:cpp/io/basic fstream]]
[[pt:cpp/io/basic fstream]]
[[ru:cpp/io/basic fstream]]
[[zh:cpp/io/basic fstream]]</text>
      <sha1>bmopcq05zwhbnbf8o3vc18tfukehi8n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/basic fstream</title>
    <ns>0</ns>
    <id>487</id>
    <revision>
      <id>50830</id>
      <parentid>44210</parentid>
      <timestamp>2013-06-01T03:41:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="400">{{include page|cpp/io/basic_fstream/constructor|basic_fstream}}

[[de:cpp/io/basic fstream/basic fstream]]
[[es:cpp/io/basic fstream/basic fstream]]
[[fr:cpp/io/basic fstream/basic fstream]]
[[it:cpp/io/basic fstream/basic fstream]]
[[ja:cpp/io/basic fstream/basic fstream]]
[[pt:cpp/io/basic fstream/basic fstream]]
[[ru:cpp/io/basic fstream/basic fstream]]
[[zh:cpp/io/basic fstream/basic fstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/close</title>
    <ns>0</ns>
    <id>488</id>
    <revision>
      <id>50831</id>
      <parentid>44205</parentid>
      <timestamp>2013-06-01T03:41:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/io/basic_fstream/close|basic_fstream}}

[[de:cpp/io/basic fstream/close]]
[[es:cpp/io/basic fstream/close]]
[[fr:cpp/io/basic fstream/close]]
[[it:cpp/io/basic fstream/close]]
[[ja:cpp/io/basic fstream/close]]
[[pt:cpp/io/basic fstream/close]]
[[ru:cpp/io/basic fstream/close]]
[[zh:cpp/io/basic fstream/close]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/is open</title>
    <ns>0</ns>
    <id>489</id>
    <revision>
      <id>50832</id>
      <parentid>44201</parentid>
      <timestamp>2013-06-01T03:41:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="348">{{include page|cpp/io/basic_fstream/is_open|basic_fstream}}

[[de:cpp/io/basic fstream/is open]]
[[es:cpp/io/basic fstream/is open]]
[[fr:cpp/io/basic fstream/is open]]
[[it:cpp/io/basic fstream/is open]]
[[ja:cpp/io/basic fstream/is open]]
[[pt:cpp/io/basic fstream/is open]]
[[ru:cpp/io/basic fstream/is open]]
[[zh:cpp/io/basic fstream/is open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/open</title>
    <ns>0</ns>
    <id>490</id>
    <revision>
      <id>50833</id>
      <parentid>44195</parentid>
      <timestamp>2013-06-01T03:41:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="321">{{include page|cpp/io/basic_fstream/open|basic_fstream}}

[[de:cpp/io/basic fstream/open]]
[[es:cpp/io/basic fstream/open]]
[[fr:cpp/io/basic fstream/open]]
[[it:cpp/io/basic fstream/open]]
[[ja:cpp/io/basic fstream/open]]
[[pt:cpp/io/basic fstream/open]]
[[ru:cpp/io/basic fstream/open]]
[[zh:cpp/io/basic fstream/open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/operator=</title>
    <ns>0</ns>
    <id>491</id>
    <revision>
      <id>72273</id>
      <parentid>44192</parentid>
      <timestamp>2014-08-02T09:07:26Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>use {{include page}}</comment>
      <text xml:space="preserve" bytes="370">{{include page|cpp/io/basic_fstream/operator{{=}}|basic_fstream}}

[[de:cpp/io/basic fstream/operator=]]
[[es:cpp/io/basic fstream/operator=]]
[[fr:cpp/io/basic fstream/operator=]]
[[it:cpp/io/basic fstream/operator=]]
[[ja:cpp/io/basic fstream/operator=]]
[[pt:cpp/io/basic fstream/operator=]]
[[ru:cpp/io/basic fstream/operator=]]
[[zh:cpp/io/basic fstream/operator=]]</text>
      <sha1>2sgcjye5lk93oalzor71n6drptpcipn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/rdbuf</title>
    <ns>0</ns>
    <id>492</id>
    <revision>
      <id>50834</id>
      <parentid>44187</parentid>
      <timestamp>2013-06-01T03:41:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/io/basic_fstream/rdbuf|basic_fstream}}

[[de:cpp/io/basic fstream/rdbuf]]
[[es:cpp/io/basic fstream/rdbuf]]
[[fr:cpp/io/basic fstream/rdbuf]]
[[it:cpp/io/basic fstream/rdbuf]]
[[ja:cpp/io/basic fstream/rdbuf]]
[[pt:cpp/io/basic fstream/rdbuf]]
[[ru:cpp/io/basic fstream/rdbuf]]
[[zh:cpp/io/basic fstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/swap</title>
    <ns>0</ns>
    <id>493</id>
    <revision>
      <id>50835</id>
      <parentid>44182</parentid>
      <timestamp>2013-06-01T03:41:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="321">{{include page|cpp/io/basic_fstream/swap|basic_fstream}}

[[de:cpp/io/basic fstream/swap]]
[[es:cpp/io/basic fstream/swap]]
[[fr:cpp/io/basic fstream/swap]]
[[it:cpp/io/basic fstream/swap]]
[[ja:cpp/io/basic fstream/swap]]
[[pt:cpp/io/basic fstream/swap]]
[[ru:cpp/io/basic fstream/swap]]
[[zh:cpp/io/basic fstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic fstream/swap2</title>
    <ns>0</ns>
    <id>5489</id>
    <revision>
      <id>50836</id>
      <parentid>44177</parentid>
      <timestamp>2013-06-01T03:41:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/io/basic_fstream/swap2|basic_fstream}}

[[de:cpp/io/basic fstream/swap2]]
[[es:cpp/io/basic fstream/swap2]]
[[fr:cpp/io/basic fstream/swap2]]
[[it:cpp/io/basic fstream/swap2]]
[[ja:cpp/io/basic fstream/swap2]]
[[pt:cpp/io/basic fstream/swap2]]
[[ru:cpp/io/basic fstream/swap2]]
[[zh:cpp/io/basic fstream/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream</title>
    <ns>0</ns>
    <id>494</id>
    <revision>
      <id>90436</id>
      <parentid>90434</parentid>
      <timestamp>2017-02-23T08:26:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+binary io</comment>
      <text xml:space="preserve" bytes="3010">{{cpp/title|basic_ifstream}}
{{cpp/io/basic_ifstream/navbar}}
{{ddcl | header=fstream |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt;
&gt; class basic_ifstream : public std::basic_istream&lt;CharT, Traits&gt;
}}

The class template {{tt|basic_ifstream}} implements high-level input operations on file based streams. It interfaces a file-based streambuffer ({{lc|std::basic_filebuf}}) with the high-level interface of ({{lc|std::basic_istream}}).

A typical implementation of {{tt|std::basic_ifstream}} holds only one non-derived data member: an instance of {{c|std::basic_filebuf&lt;CharT, Traits&gt;}}.

{{inheritance diagram/std-basic_ifstream}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | fstream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|ifstream}} | {{c|basic_ifstream&lt;char&gt;}}}}
{{dsc | {{tt|wifstream}} | {{c|basic_ifstream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc constructor | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc destructor | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc operator{{=}} | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc swap | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc rdbuf | basic_ifstream}}

{{dsc h2 | File operations }}
{{dsc inc | cpp/io/basic_fstream/dsc is_open | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc open | basic_ifstream}}
{{dsc inc | cpp/io/basic_fstream/dsc close | basic_ifstream}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_ifstream}}
{{dsc end}}


{{cpp/io/basic_istream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

int main() {
  std::string filename = &quot;Test.b&quot;;
  // prepare a file to read
  double d = 3.14;
  std::ofstream(filename, std::ios::binary).write(reinterpret_cast&lt;char*&gt;(&amp;d), sizeof d)
     &lt;&lt; 123 &lt;&lt; &quot;abc&quot;;
  // open file for reading
  std::ifstream istrm(filename, std::ios::binary);
  if (!istrm.is_open()) {
    std::cout &lt;&lt; &quot;failed to open &quot; &lt;&lt; filename &lt;&lt; '\n';
  } else {
    double d;
    istrm.read(reinterpret_cast&lt;char*&gt;(&amp;d), sizeof d); // binary input
    int n;
    std::string s;
    if (istrm &gt;&gt; n &gt;&gt; s)                               // text input
      std::cout &lt;&lt; &quot;read back from file: &quot; &lt;&lt; d &lt;&lt; ' ' &lt;&lt; n &lt;&lt; ' ' &lt;&lt; s &lt;&lt; '\n';
  }
}
|output=
read back from file: 3.14 123 abc
}}

[[de:cpp/io/basic ifstream]]
[[es:cpp/io/basic ifstream]]
[[fr:cpp/io/basic ifstream]]
[[it:cpp/io/basic ifstream]]
[[ja:cpp/io/basic ifstream]]
[[pt:cpp/io/basic ifstream]]
[[ru:cpp/io/basic ifstream]]
[[zh:cpp/io/basic ifstream]]</text>
      <sha1>rpkc0eq0ilwtasqit6afxxofixvkb70</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/basic ifstream</title>
    <ns>0</ns>
    <id>495</id>
    <revision>
      <id>50837</id>
      <parentid>44167</parentid>
      <timestamp>2013-06-01T03:41:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="417">{{include page|cpp/io/basic_fstream/constructor|basic_ifstream}}

[[de:cpp/io/basic ifstream/basic ifstream]]
[[es:cpp/io/basic ifstream/basic ifstream]]
[[fr:cpp/io/basic ifstream/basic ifstream]]
[[it:cpp/io/basic ifstream/basic ifstream]]
[[ja:cpp/io/basic ifstream/basic ifstream]]
[[pt:cpp/io/basic ifstream/basic ifstream]]
[[ru:cpp/io/basic ifstream/basic ifstream]]
[[zh:cpp/io/basic ifstream/basic ifstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/close</title>
    <ns>0</ns>
    <id>496</id>
    <revision>
      <id>50838</id>
      <parentid>44162</parentid>
      <timestamp>2013-06-01T03:41:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="339">{{include page|cpp/io/basic_fstream/close|basic_ifstream}}

[[de:cpp/io/basic ifstream/close]]
[[es:cpp/io/basic ifstream/close]]
[[fr:cpp/io/basic ifstream/close]]
[[it:cpp/io/basic ifstream/close]]
[[ja:cpp/io/basic ifstream/close]]
[[pt:cpp/io/basic ifstream/close]]
[[ru:cpp/io/basic ifstream/close]]
[[zh:cpp/io/basic ifstream/close]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/is open</title>
    <ns>0</ns>
    <id>497</id>
    <revision>
      <id>50839</id>
      <parentid>44157</parentid>
      <timestamp>2013-06-01T03:41:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="357">{{include page|cpp/io/basic_fstream/is_open|basic_ifstream}}

[[de:cpp/io/basic ifstream/is open]]
[[es:cpp/io/basic ifstream/is open]]
[[fr:cpp/io/basic ifstream/is open]]
[[it:cpp/io/basic ifstream/is open]]
[[ja:cpp/io/basic ifstream/is open]]
[[pt:cpp/io/basic ifstream/is open]]
[[ru:cpp/io/basic ifstream/is open]]
[[zh:cpp/io/basic ifstream/is open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/open</title>
    <ns>0</ns>
    <id>498</id>
    <revision>
      <id>50840</id>
      <parentid>44152</parentid>
      <timestamp>2013-06-01T03:41:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/io/basic_fstream/open|basic_ifstream}}

[[de:cpp/io/basic ifstream/open]]
[[es:cpp/io/basic ifstream/open]]
[[fr:cpp/io/basic ifstream/open]]
[[it:cpp/io/basic ifstream/open]]
[[ja:cpp/io/basic ifstream/open]]
[[pt:cpp/io/basic ifstream/open]]
[[ru:cpp/io/basic ifstream/open]]
[[zh:cpp/io/basic ifstream/open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/operator=</title>
    <ns>0</ns>
    <id>499</id>
    <revision>
      <id>72274</id>
      <parentid>44147</parentid>
      <timestamp>2014-08-02T09:09:47Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>use {{include page}}</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/io/basic_fstream/operator{{=}}|basic_ifstream}}

[[de:cpp/io/basic ifstream/operator=]]
[[es:cpp/io/basic ifstream/operator=]]
[[fr:cpp/io/basic ifstream/operator=]]
[[it:cpp/io/basic ifstream/operator=]]
[[ja:cpp/io/basic ifstream/operator=]]
[[pt:cpp/io/basic ifstream/operator=]]
[[ru:cpp/io/basic ifstream/operator=]]
[[zh:cpp/io/basic ifstream/operator=]]</text>
      <sha1>nros7413jwe2nklf6nt9mx3orlvpr44</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/rdbuf</title>
    <ns>0</ns>
    <id>500</id>
    <revision>
      <id>50841</id>
      <parentid>44145</parentid>
      <timestamp>2013-06-01T03:41:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="339">{{include page|cpp/io/basic_fstream/rdbuf|basic_ifstream}}

[[de:cpp/io/basic ifstream/rdbuf]]
[[es:cpp/io/basic ifstream/rdbuf]]
[[fr:cpp/io/basic ifstream/rdbuf]]
[[it:cpp/io/basic ifstream/rdbuf]]
[[ja:cpp/io/basic ifstream/rdbuf]]
[[pt:cpp/io/basic ifstream/rdbuf]]
[[ru:cpp/io/basic ifstream/rdbuf]]
[[zh:cpp/io/basic ifstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/swap</title>
    <ns>0</ns>
    <id>501</id>
    <revision>
      <id>50842</id>
      <parentid>44140</parentid>
      <timestamp>2013-06-01T03:41:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/io/basic_fstream/swap|basic_ifstream}}

[[de:cpp/io/basic ifstream/swap]]
[[es:cpp/io/basic ifstream/swap]]
[[fr:cpp/io/basic ifstream/swap]]
[[it:cpp/io/basic ifstream/swap]]
[[ja:cpp/io/basic ifstream/swap]]
[[pt:cpp/io/basic ifstream/swap]]
[[ru:cpp/io/basic ifstream/swap]]
[[zh:cpp/io/basic ifstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ifstream/swap2</title>
    <ns>0</ns>
    <id>5488</id>
    <revision>
      <id>50843</id>
      <parentid>44135</parentid>
      <timestamp>2013-06-01T03:41:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="339">{{include page|cpp/io/basic_fstream/swap2|basic_ifstream}}

[[de:cpp/io/basic ifstream/swap2]]
[[es:cpp/io/basic ifstream/swap2]]
[[fr:cpp/io/basic ifstream/swap2]]
[[it:cpp/io/basic ifstream/swap2]]
[[ja:cpp/io/basic ifstream/swap2]]
[[pt:cpp/io/basic ifstream/swap2]]
[[ru:cpp/io/basic ifstream/swap2]]
[[zh:cpp/io/basic ifstream/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios</title>
    <ns>0</ns>
    <id>502</id>
    <revision>
      <id>83355</id>
      <parentid>80203</parentid>
      <timestamp>2016-02-02T11:59:28Z</timestamp>
      <contributor>
        <ip>203.97.127.101</ip>
      </contributor>
      <comment>Added std:: to ios_base so that it shows as a link.</comment>
      <text xml:space="preserve" bytes="3226">{{cpp/title|basic_ios}}
{{cpp/io/basic_ios/navbar}}
{{ddcl | header=ios | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;
&gt; class basic_ios : public std::ios_base
}}

The class {{tt|std::basic_ios}} provides facilities for interfacing with objects that have {{lc|std::basic_streambuf}} interface. Several {{tt|std::basic_ios}} objects can refer to one actual {{tt|std::basic_streambuf}} object.

{{inheritance diagram/std-basic_ios}}

Two specializations for common character types are also provided:

{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|ios}} | {{c|basic_ios&lt;char&gt;}}}}
{{dsc | {{tt|wios}} | {{c|basic_ios&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Public member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc constructor}}
{{dsc inc | cpp/io/basic_ios/dsc destructor}}
{{dsc mem fun | operator{{=}} | nolink=true | the copy assignment operator is deleted}}

{{dsc h2 | State functions}}
{{dsc inc | cpp/io/basic_ios/dsc good}}
{{dsc inc | cpp/io/basic_ios/dsc eof}}
{{dsc inc | cpp/io/basic_ios/dsc fail}}
{{dsc inc | cpp/io/basic_ios/dsc bad}}
{{dsc inc | cpp/io/basic_ios/dsc operator!}}
{{dsc inc | cpp/io/basic_ios/dsc operator bool}}
{{dsc inc | cpp/io/basic_ios/dsc rdstate}}
{{dsc inc | cpp/io/basic_ios/dsc setstate}}
{{dsc inc | cpp/io/basic_ios/dsc clear}}

{{dsc h2 | Formatting}}
{{dsc inc | cpp/io/basic_ios/dsc copyfmt}}
{{dsc inc | cpp/io/basic_ios/dsc fill}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/io/basic_ios/dsc exceptions}}
{{dsc inc | cpp/io/basic_ios/dsc imbue}}
{{dsc inc | cpp/io/basic_ios/dsc rdbuf}}
{{dsc inc | cpp/io/basic_ios/dsc tie}}
{{dsc inc | cpp/io/basic_ios/dsc narrow}}
{{dsc inc | cpp/io/basic_ios/dsc widen}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc init}}
{{dsc inc | cpp/io/basic_ios/dsc move}}
{{dsc inc | cpp/io/basic_ios/dsc swap}}
{{dsc inc | cpp/io/basic_ios/dsc set_rdbuf}}
{{dsc end}}

{{cpp/io/ios_base/inherit}}

===Notes===
Straightforward implementation of {{tt|std::basic_ios}} stores only the following members (which all depend on the template parameters and thus cannot be part of {{lc|std::ios_base}}):
* the fill character (see {{rlt|fill|fill()}})
* the tied stream pointer (see {{rlt|tie|tie()}})
* the associated stream buffer pointer (see {{rlt|rdbuf|rdbuf()}})

Actual implementations vary:

Microsoft Visual Studio stores just those three members.

LLVM libc++ stores 1 less member: it maintains the rdbuf pointer as a void* member of ios_base.

GNU libstdc++ stores 4 additional members: three cached facets and a flag to indicate that fill was initialized

&lt;!-- should I even bother with Oracle which plays dumb and maintains the iostate and the exception mask all in here instead of ios_base? --&gt;

[[de:cpp/io/basic ios]]
[[es:cpp/io/basic ios]]
[[fr:cpp/io/basic ios]]
[[it:cpp/io/basic ios]]
[[ja:cpp/io/basic ios]]
[[pt:cpp/io/basic ios]]
[[ru:cpp/io/basic ios]]
[[zh:cpp/io/basic ios]]</text>
      <sha1>6hxjimbrhpaq9tvoahgyxm141zj7eea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/bad</title>
    <ns>0</ns>
    <id>503</id>
    <revision>
      <id>63876</id>
      <parentid>49626</parentid>
      <timestamp>2013-07-29T20:29:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link to the list of conditions that set badbit</comment>
      <text xml:space="preserve" bytes="855">{{cpp/io/basic_ios/title | bad}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 1=
bool bad() const;
}}
{{dcl end}}

Returns {{c|true}} if non-recoverable error has occurred on the associated stream. Specifically, returns {{c|true}} if {{ltt|cpp/io/ios_base/iostate|badbit}} is set in {{c|rdstate()}}.

See {{l2tt|cpp/io/ios_base/iostate}} for the list of conditions that set {{tt|badbit}}.

===Parameters===
(none)

===Return value===
{{c|true}} if a non-recoverable error has occurred, {{c|false}} otherwise.

===Example===
{{example template|cpp/io/basic_ios/example1}}

===See also===
{{cpp/io/basic ios/iostate accessors}}

[[de:cpp/io/basic ios/bad]]
[[es:cpp/io/basic ios/bad]]
[[fr:cpp/io/basic ios/bad]]
[[it:cpp/io/basic ios/bad]]
[[ja:cpp/io/basic ios/bad]]
[[pt:cpp/io/basic ios/bad]]
[[ru:cpp/io/basic ios/bad]]
[[zh:cpp/io/basic ios/bad]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/basic ios</title>
    <ns>0</ns>
    <id>5534</id>
    <revision>
      <id>64264</id>
      <parentid>61894</parentid>
      <timestamp>2013-08-15T16:10:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1287">{{cpp/io/basic_ios/title | basic_ios}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | num = 1 | 
protected:
basic_ios();
}}
{{dcl | num = 2 | 
public:
explicit basic_ios( std::basic_streambuf&lt;CharT,Traits&gt;* sb );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
private:
basic_ios(const basic_ios&amp;);
}}
{{dcl | since=c++11 | 1=
public:
basic_ios(const basic_ios&amp; ) = delete;
}}
{{dcl rev end}}
{{dcl end}}

Constructs new {{tt|basic_ios}} object. 

@1@ Default constructor. The internal state is not initialized. {{lc|init()}} must be called before the first use of the object or before destructor, otherwise the behavior is undefined.

@2@ Initializes the internal state by calling {{c|init(sb)}}. The associated stream buffer is set to {{tt|sb}}. 

@3@ The copy constructor was declared {{tt|private:}} and not defined until C++11 and is declared as deleted in C++11: I/O streams are not {{concept|CopyConstructible}}.

===Parameters===
{{par begin}}
{{par | sb | stream buffer to associate to}}
{{par end}}

[[de:cpp/io/basic ios/basic ios]]
[[es:cpp/io/basic ios/basic ios]]
[[fr:cpp/io/basic ios/basic ios]]
[[it:cpp/io/basic ios/basic ios]]
[[ja:cpp/io/basic ios/basic ios]]
[[pt:cpp/io/basic ios/basic ios]]
[[ru:cpp/io/basic ios/basic ios]]
[[zh:cpp/io/basic ios/basic ios]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/clear</title>
    <ns>0</ns>
    <id>504</id>
    <revision>
      <id>83339</id>
      <parentid>83338</parentid>
      <timestamp>2016-02-01T15:00:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>in any case &quot;clears&quot; is bad start for the lead</comment>
      <text xml:space="preserve" bytes="1615">{{cpp/io/basic_ios/title | clear}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 1=
void clear( std::ios_base::iostate state = std::ios_base::goodbit );
}}
{{dcl end}}

Sets the stream error state flags by assigning them the value of {{tt|state}}. By default, assigns std::ios_base::goodbit which has the effect of clearing all error state flags.

If {{c|rdbuf() {{==}} 0}} then {{c|state {{!}} badbit}} is assigned. May throw an exception.

===Parameters===
{{par begin}}
{{par | state | new error state flags setting. It can be a combination of the following constants:
{{cpp/io/ios_base/iostate consts}}
}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{todo|link to basic_ios::exceptions, too}}

===Example===
{{example
 | clear() without arguments can be used to unset the failbit after unexpected input
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    double n;
    while( std::cout &lt;&lt; &quot;Please, enter a number\n&quot;
           &amp;&amp; ! (std::cin &gt;&gt; n) )
    {
        std::cin.clear();
        std::string line;
        std::getline(std::cin, line);
        std::cout &lt;&lt; &quot;I am sorry, but '&quot; &lt;&lt; line &lt;&lt; &quot;' is not a number\n&quot;;
    }
    std::cout &lt;&lt; &quot;Thank you for entering the number &quot; &lt;&lt; n &lt;&lt; '\n';
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc setstate}}
{{dsc inc | cpp/io/basic_ios/dsc rdstate}}
{{dsc end}}

[[de:cpp/io/basic ios/clear]]
[[es:cpp/io/basic ios/clear]]
[[fr:cpp/io/basic ios/clear]]
[[it:cpp/io/basic ios/clear]]
[[ja:cpp/io/basic ios/clear]]
[[pt:cpp/io/basic ios/clear]]
[[ru:cpp/io/basic ios/clear]]
[[zh:cpp/io/basic ios/clear]]</text>
      <sha1>swfwgmxymduu3nxj61ajjkuqi8606t0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/copyfmt</title>
    <ns>0</ns>
    <id>505</id>
    <revision>
      <id>66910</id>
      <parentid>64159</parentid>
      <timestamp>2014-01-07T13:39:15Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <comment>Corrected minor misspellings</comment>
      <text xml:space="preserve" bytes="2259">{{cpp/io/basic_ios/title | copyfmt}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 
basic_ios&amp; copyfmt(const basic_ios&amp; other);
}}
{{dcl end}}

Copies the state of the stream {{tt|other}} into {{c|*this}}. This is done in the following sequence:

@1@ Calls every callback registered by {{lc|register_callback()}} passing {{ltt|cpp/io/ios_base/event | erase_event}} as parameter

@2@ Copies all member objects from {{tt|other}} to {{c|*this}} except for {{lc|rdstate()}}, the exception mask, and {{lc|rdbuf()}}. In particular, makes copies of the locale, the formatting flags, the contents of the arrays {{lc|std::ios_base::iword}} and {{lc|std::ios_base::pword}} (but not the {{tt|iword}} and {{tt|pword}} pointers themselves), the callbacks, and the tied stream.

@3@ Calls every callback registered by {{lc|register_callback()}} passing {{ltt|cpp/io/ios_base/event | copyfmt_event}} as parameter

@4@ Copies the exception mask from {{tt|other}} to {{c|*this}} as if by calling {{c|exceptions(other.exceptions())}}

===Parameters===
{{par begin}}
{{par | other | another stream to use as source}}
{{par end}}

===Return value===
{{c|*this}}

===Notes===
The second pass through the callbacks may be used to deep-copy the user-defined objects pointed to by the pointers in {{lc|std::ios_base::pword}}

{{tt|copyfmt()}} may be used to save and restore the state of a stream. Boost provides a more fine-grained [http://www.boost.org/doc/libs/release/libs/io/doc/ios_state.html IO state savers] library for the same purpose.

===Example===
{{example
 | makes the ofstream object &quot;out&quot; behave exactly like std::cout, including formatting, tie() to std::cin, etc.
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;

int main()
{
    std::ofstream out;

    out.copyfmt(std::cout); // copy everything except rdstate and rdbuf
    out.clear(std::cout.rdstate()); // copy rdstate
    out.basic_ios&lt;char&gt;::rdbuf(std::cout.rdbuf()); // share the buffer

    out &lt;&lt; &quot;Hello, world\n&quot;;
}
 | output=
Hello, world
}}

[[de:cpp/io/basic ios/copyfmt]]
[[es:cpp/io/basic ios/copyfmt]]
[[fr:cpp/io/basic ios/copyfmt]]
[[it:cpp/io/basic ios/copyfmt]]
[[ja:cpp/io/basic ios/copyfmt]]
[[pt:cpp/io/basic ios/copyfmt]]
[[ru:cpp/io/basic ios/copyfmt]]
[[zh:cpp/io/basic ios/copyfmt]]</text>
      <sha1>eifoe3wcc6aewpi341ytgwgkbwvz4ba</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/eof</title>
    <ns>0</ns>
    <id>506</id>
    <revision>
      <id>78193</id>
      <parentid>63875</parentid>
      <timestamp>2015-05-09T21:49:09Z</timestamp>
      <contributor>
        <username>Tomalak geretkal</username>
        <id>2346</id>
      </contributor>
      <minor/>
      <comment>Fixed comma abuse.</comment>
      <text xml:space="preserve" bytes="1415">{{cpp/io/basic_ios/title | eof}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 1=
bool eof() const;
}}
{{dcl end}}

Returns {{c|true}} if the associated stream has reached end-of-file. Specifically, returns {{c|true}} if {{tt|eofbit}} is set in {{c|rdstate()}}.

See {{l2tt|cpp/io/ios_base/iostate}} for the list of conditions that set {{tt|eofbit}}.

===Parameters===
(none)

===Return value===
{{c|true}} if an end-of-file has occurred, {{c|false}} otherwise.

===Notes===
This function only reports the stream state as set by the most recent I/O operation; it does not examine the associated data source. For example, if the most recent I/O was a {{tt|get()}}, which returned the last byte of a file, {{tt|eof()}} returns {{c|false}}. The next {{tt|get()}} fails to read anything and sets the {{tt|eofbit}}. Only then {{tt|eof()}} returns {{c|true}}.

In typical usage, input stream processing stops on any error; {{tt|eof()}} and {{c|fail()}} are then used to distinguish between different error conditions.

===Example===
{{example template|cpp/io/basic_ios/example1}}

===See also===
{{cpp/io/basic ios/iostate accessors}}
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc feof}}
{{dsc end}}

[[de:cpp/io/basic ios/eof]]
[[es:cpp/io/basic ios/eof]]
[[fr:cpp/io/basic ios/eof]]
[[it:cpp/io/basic ios/eof]]
[[ja:cpp/io/basic ios/eof]]
[[pt:cpp/io/basic ios/eof]]
[[ru:cpp/io/basic ios/eof]]
[[zh:cpp/io/basic ios/eof]]</text>
      <sha1>nbs6cd6r9n9syybt6bw3wzcvijex2ay</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/exceptions</title>
    <ns>0</ns>
    <id>5224</id>
    <revision>
      <id>83340</id>
      <parentid>83337</parentid>
      <timestamp>2016-02-01T15:09:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+so link for the todo</comment>
      <text xml:space="preserve" bytes="1558">{{cpp/io/basic_ios/title | exceptions}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | num=1 |
std::ios_base::iostate exceptions() const;
}}
{{dcl | num=2 |
void exceptions( std::ios_base::iostate except );
}}
{{dcl end}}

Gets and sets the exception mask of the stream. The exception mask determines the error states, on occurrence of which the stream throws exception of type {{lc|failure}}. 

@1@ Returns the exception mask.

@2@ Sets the exception mask to {{tt|except}}.

===Parameters===
{{par begin}}
{{par | except | exception mask}}
{{par end}}

===Return value===
@1@ The current exception mask.

@2@ (none)

===Notes===
{{todo|discuss [http://cplusplus.github.io/LWG/lwg-active.html#2349 LWG2349] and link from ios_base::clear, and from (un)formatted(i/o)utputfunction concept pages (or perhaps the behavior should be fully elaborated on the concepts pages and linked from here). See also [http://stackoverflow.com/a/35089910 stackoverflow.com/a/35089910]}}

===Example===
{{example | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;

int main() 
{
    int ivalue;
    try {
        std::ifstream in(&quot;in.txt&quot;);
        in.exceptions(std::ifstream::failbit);
        in &gt;&gt; ivalue;
    } catch (std::ios_base::failure &amp;fail) {
        // handle exception here
    }
}
}}

[[de:cpp/io/basic ios/exceptions]]
[[es:cpp/io/basic ios/exceptions]]
[[fr:cpp/io/basic ios/exceptions]]
[[it:cpp/io/basic ios/exceptions]]
[[ja:cpp/io/basic ios/exceptions]]
[[pt:cpp/io/basic ios/exceptions]]
[[ru:cpp/io/basic ios/exceptions]]
[[zh:cpp/io/basic ios/exceptions]]</text>
      <sha1>0eg9ai60fadh724zdxtlvk4sugfjl1k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/fail</title>
    <ns>0</ns>
    <id>507</id>
    <revision>
      <id>64160</id>
      <parentid>63873</parentid>
      <timestamp>2013-08-15T14:54:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="910">{{cpp/io/basic_ios/title | fail}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 1=
bool fail() const;
}}
{{dcl end}}

Returns {{c|true}} if an error has occurred on the associated stream. Specifically, returns {{c|true}} if {{tt|badbit}} or {{tt|failbit}} is set in {{lc|rdstate()}}. 

See {{l2tt|cpp/io/ios_base/iostate}} for the list of conditions that set {{tt|failbit}} or {{tt|badbit}}.

===Parameters===
(none)

===Return value===
{{c|true}} if an error has occurred, {{c|false}} otherwise.

===Example===
{{example template|cpp/io/basic_ios/example1}}

===See also===
{{cpp/io/basic ios/iostate accessors}}
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc ferror}}
{{dsc end}}

[[de:cpp/io/basic ios/fail]]
[[es:cpp/io/basic ios/fail]]
[[fr:cpp/io/basic ios/fail]]
[[it:cpp/io/basic ios/fail]]
[[ja:cpp/io/basic ios/fail]]
[[pt:cpp/io/basic ios/fail]]
[[ru:cpp/io/basic ios/fail]]
[[zh:cpp/io/basic ios/fail]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/fill</title>
    <ns>0</ns>
    <id>508</id>
    <revision>
      <id>74677</id>
      <parentid>74676</parentid>
      <timestamp>2014-12-22T05:36:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso, declare variable next to use and a few other changes</comment>
      <text xml:space="preserve" bytes="1280">{{cpp/io/basic_ios/title | fill}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | num=1 |
CharT fill() const;
}}
{{dcl | num=2 |
CharT fill( CharT ch );
}}
{{dcl end}}

Manages the fill character used to pad the output conversions to the specified field width.

@1@ returns the current fill character
@2@ sets the fill character to {{tt|ch}}, returns previous value of the fill character 

===Parameters===
{{par begin}}
{{par | ch | the character to use as fill character}}
{{par end}}

===Return value===
the fill character before the call to the function.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

int main ()
{
  std::cout &lt;&lt; &quot;With default setting : &quot; &lt;&lt; std::setw(10) &lt;&lt; 40 &lt;&lt; '\n';
  char prev = std::cout.fill('x');
  std::cout &lt;&lt; &quot;Replaced '&quot; &lt;&lt; prev &lt;&lt; &quot;' with '&quot;
            &lt;&lt; std::cout.fill() &lt;&lt; &quot;': &quot; &lt;&lt; std::setw(10) &lt;&lt; 40 &lt;&lt; '\n';
}
 | output=
With default setting :         40
Replaced ' ' with 'x': xxxxxxxx40
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc setfill}}
{{dsc end}}

[[de:cpp/io/basic ios/fill]]
[[es:cpp/io/basic ios/fill]]
[[fr:cpp/io/basic ios/fill]]
[[it:cpp/io/basic ios/fill]]
[[ja:cpp/io/basic ios/fill]]
[[pt:cpp/io/basic ios/fill]]
[[ru:cpp/io/basic ios/fill]]
[[zh:cpp/io/basic ios/fill]]</text>
      <sha1>joszgmuhkivmcz297mg9ejhfvehmeob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/good</title>
    <ns>0</ns>
    <id>509</id>
    <revision>
      <id>63874</id>
      <parentid>49634</parentid>
      <timestamp>2013-07-29T20:27:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link to the list of conditions that set bits</comment>
      <text xml:space="preserve" bytes="828">{{cpp/io/basic_ios/title | good}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 1=
bool good() const;
}}
{{dcl end}}

Returns {{c|true}} if the the most recent I/O operation on the stream completed successfully. Specifically, returns result of {{c|rdstate() {{==}} 0}}. 

See {{l2tt|cpp/io/ios_base/iostate}} for the list of conditions that set the stream status bits.

===Parameters===
(none)

===Return value===
{{c|true}} if the stream has no errors occurred, {{c|false}} otherwise.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{cpp/io/basic ios/iostate accessors}}

[[de:cpp/io/basic ios/good]]
[[es:cpp/io/basic ios/good]]
[[fr:cpp/io/basic ios/good]]
[[it:cpp/io/basic ios/good]]
[[ja:cpp/io/basic ios/good]]
[[pt:cpp/io/basic ios/good]]
[[ru:cpp/io/basic ios/good]]
[[zh:cpp/io/basic ios/good]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/imbue</title>
    <ns>0</ns>
    <id>5471</id>
    <revision>
      <id>67265</id>
      <parentid>66259</parentid>
      <timestamp>2014-01-31T15:07:05Z</timestamp>
      <contributor>
        <ip>91.223.202.5</ip>
      </contributor>
      <comment>fix return type</comment>
      <text xml:space="preserve" bytes="1138">{{cpp/io/basic_ios/title|imbue}}
{{cpp/io/basic_ios/navbar}}
{{ddcl |
std::locale imbue( const std::locale&amp; loc );
}}

Replaces the current locale. Effectively calls {{c|ios_base::imbue(loc)}} and if there is an associated stream buffer ({{c|rdbuf() !{{=}} 0}}), then calls {{c|rdbuf()-&gt;pubimbue(loc)}}.

===Parameters===
{{par begin}}
{{par | loc | the new locale}}
{{par end}}

===Return value===
The previous locale, as returned by {{c|ios_base::imbue(loc)}}.

===Exceptions===
(none)

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;
 
int main()
{
    std::istringstream iss;
    iss.imbue(std::locale(&quot;en_US.UTF8&quot;));
    
    std::cout &lt;&lt; &quot;Current locale: &quot; &lt;&lt; iss.getloc().name() &lt;&lt; '\n';
    
    iss.imbue(std::locale());
    std::cout &lt;&lt; &quot;Global locale : &quot; &lt;&lt; iss.getloc().name() &lt;&lt; '\n';
}
|output=
Current locale: en_US.UTF8
Global locale : C
}}

[[de:cpp/io/basic ios/imbue]]
[[es:cpp/io/basic ios/imbue]]
[[fr:cpp/io/basic ios/imbue]]
[[it:cpp/io/basic ios/imbue]]
[[ja:cpp/io/basic ios/imbue]]
[[pt:cpp/io/basic ios/imbue]]
[[ru:cpp/io/basic ios/imbue]]
[[zh:cpp/io/basic ios/imbue]]</text>
      <sha1>mizhflub6cpfug7i2c47ghjxflzft46</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/init</title>
    <ns>0</ns>
    <id>5535</id>
    <revision>
      <id>64263</id>
      <parentid>57608</parentid>
      <timestamp>2013-08-15T16:09:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1767">{{cpp/io/basic_ios/title | init}}
{{cpp/io/basic_ios/navbar}}
{{ddcl |
protected:
void init( std::basic_streambuf&lt;CharT,Traits&gt;* sb );
}}

Sets the associated stream buffer to {{tt|sb}} and initializes the internal state.

The postconditions are as follows:

{| class=&quot;wikitable&quot;
|-
! Element
! Value
|-
| {{lc|rdbuf()}} || {{tt|sb}}
|-
| {{lc|tie()}} || {{lc|NULL}}
|-
| {{lc|rdstate()}} || {{tt|goodbit}} if {{tt|sb}} is not {{lc|NULL}}, otherwise {{tt|badbit}}
|-
| {{lc|exceptions()}} || {{tt|goodbit}}
|-
| {{ltf|cpp/io/ios_base/flags}} || {{c|skipws {{!}} dec}}
|-
| {{ltf|cpp/io/ios_base/width}} || {{c|0}}
|-
| {{ltf|cpp/io/ios_base/precision}} || {{c|6}}
|-
| {{lc|fill()}} || {{c|widen(' ')}}
|-
| {{ltf|cpp/io/ios_base/getloc}} || a copy of the value returned by {{c|std::locale()}}
|}

This member function is protected: it is called by the constructors of the derived stream classes {{lc|std::basic_istream}} and {{lc|std::basic_ostream}} once the associated stream buffer is known. Until this function is called, every member function (other than the destructor) of the default-constructed {{lc|std::basic_ios}} invokes undefined behavior. Note that {{tt|basic_ios}} is a virtual base class, and therefore its constructor is not called by the constructors of those directly derived classes, which is why two-stage initialization is necessary.

===Parameters===
{{par begin}}
{{par | sb | stream buffer to associate to}}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc constructor}}
{{dsc end}}

[[de:cpp/io/basic ios/init]]
[[es:cpp/io/basic ios/init]]
[[fr:cpp/io/basic ios/init]]
[[it:cpp/io/basic ios/init]]
[[ja:cpp/io/basic ios/init]]
[[pt:cpp/io/basic ios/init]]
[[ru:cpp/io/basic ios/init]]
[[zh:cpp/io/basic ios/init]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/move</title>
    <ns>0</ns>
    <id>8762</id>
    <revision>
      <id>90678</id>
      <parentid>64308</parentid>
      <timestamp>2017-03-07T17:02:07Z</timestamp>
      <contributor>
        <username>SteveWishnousky</username>
        <id>6287</id>
      </contributor>
      <comment>basic_ios move did not mention other.tie() requirements</comment>
      <text xml:space="preserve" bytes="1370">{{cpp/io/basic_ios/title|move}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
protected:
void move( basic_ios&amp; other );
}}
{{dcl | since=c++11 |
protected:
void move( basic_ios&amp;&amp; other );
}}
{{dcl end}}

Replaces the current state with that of {{tt|other}}, except for the associated {{tt|rdbuf}}. {{tt|other}} is in valid, but unspecified state after the call. After the call to this function, {{lc|rdbuf()}} returns {{lc|NULL}}, {{c|other.rdbuf()}} returns the same value as before the call, and {{c|other.tie()}} returns 0.

This member function is protected: it is called by the protected move constructors of the derived stream classes {{lc|std::basic_ostream}} and {{lc|std::basic_istream}}, which, in turn, are called by the public move constructors of the further derived stream classes such as {{lc|std::basic_ofstream}}, which know how to correctly move the associated streambuffer.


===Parameters===
{{par begin}}
{{par | other | the {{tt|basic_ios}} object to transfer the state from}}
{{par end}}

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc swap}}
{{dsc end}}

[[de:cpp/io/basic ios/move]]
[[es:cpp/io/basic ios/move]]
[[fr:cpp/io/basic ios/move]]
[[it:cpp/io/basic ios/move]]
[[ja:cpp/io/basic ios/move]]
[[pt:cpp/io/basic ios/move]]
[[ru:cpp/io/basic ios/move]]
[[zh:cpp/io/basic ios/move]]</text>
      <sha1>nqokilge1e2s677ipo0bdicfrhh921m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/narrow</title>
    <ns>0</ns>
    <id>5483</id>
    <revision>
      <id>57612</id>
      <parentid>49638</parentid>
      <timestamp>2013-06-01T05:57:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1157">{{cpp/io/basic_ios/title | narrow}}
{{cpp/io/basic_ios/navbar}}
{{ddcl |
char narrow( char_type c, char dfault ) const;
}}

Converts a current locale-specific character {{tt|c}} to its standard equivalent. The result is converted from {{tt|char_type}} to {{tt|char}} if needed. If no conversion can be performed, the function returns {{tt|dfault}}.

Effectively calls {{c|std::use_facet&lt; std::ctype&lt;char_type&gt; &gt;(getloc()).narrow(c, dfault);}}.

===Parameters===
{{par begin}}
{{par | c | character to convert}}
{{par | dfault | character to return if the conversion was unsuccessful}}
{{par end}}

===Return value===
Character converted to its standard equivalent and then to {{c|char}}. {{tt|dfault}} is returned if the conversion fails.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc widen}}
{{dsc inc | cpp/locale/ctype/dsc narrow}}
{{dsc inc | cpp/string/multibyte/dsc wctob}}
{{dsc end}}

[[de:cpp/io/basic ios/narrow]]
[[es:cpp/io/basic ios/narrow]]
[[fr:cpp/io/basic ios/narrow]]
[[it:cpp/io/basic ios/narrow]]
[[ja:cpp/io/basic ios/narrow]]
[[pt:cpp/io/basic ios/narrow]]
[[ru:cpp/io/basic ios/narrow]]
[[zh:cpp/io/basic ios/narrow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/operator bool</title>
    <ns>0</ns>
    <id>511</id>
    <revision>
      <id>89259</id>
      <parentid>89257</parentid>
      <timestamp>2017-01-14T12:37:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>upd output to match</comment>
      <text xml:space="preserve" bytes="1746">{{cpp/io/basic_ios/title | operator bool}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | num=1 | until=c++11 |
operator void*() const;
}}
{{dcl | num=2 | since=c++11 |
explicit operator bool() const;
}}
{{dcl end}}

Checks whether the stream has no errors. 

@1@ Returns a null pointer if {{c|fail()}} returns {{c|true}}, otherwise returns a non-null pointer. This pointer is implicitly convertible to {{c|bool}} and may be used in boolean contexts.

@2@ Returns {{c|true}} if the stream has no errors and is ready for I/O operations. Specifically, returns {{c|!fail()}}. 

This operator makes it possible to use streams and functions that return references to streams as loop conditions, resulting in the idiomatic C++ input loops such as {{c|while(stream &gt;&gt; value) {...} }} or {{c|while(getline(stream, string)){...} }}. Such loops execute the loop's body only if the input operation succeeded.

===Parameters===
(none)

===Return value===
{{c|true}} if the stream has no errors, {{c|false}} otherwise.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::istringstream s(&quot;1 2 3 error&quot;);
    int n;
    std::cout &lt;&lt; std::boolalpha &lt;&lt; &quot;s is &quot; &lt;&lt; static_cast&lt;bool&gt;(s) &lt;&lt; '\n';
    while (s &gt;&gt; n) {
        std::cout &lt;&lt; n &lt;&lt; '\n';
    }
    std::cout &lt;&lt; &quot;s is &quot; &lt;&lt; static_cast&lt;bool&gt;(s) &lt;&lt; '\n';
}
 | output=
s is true
1
2
3
s is false
}}

===See also===
{{cpp/io/basic ios/iostate accessors}}

[[de:cpp/io/basic ios/operator bool]]
[[es:cpp/io/basic ios/operator bool]]
[[fr:cpp/io/basic ios/operator bool]]
[[it:cpp/io/basic ios/operator bool]]
[[ja:cpp/io/basic ios/operator bool]]
[[pt:cpp/io/basic ios/operator bool]]
[[ru:cpp/io/basic ios/operator bool]]
[[zh:cpp/io/basic ios/operator bool]]</text>
      <sha1>5cj4jtw8l2xt564g4mks6btq8qhipdg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/operator!</title>
    <ns>0</ns>
    <id>510</id>
    <revision>
      <id>49639</id>
      <parentid>44059</parentid>
      <timestamp>2013-06-01T02:49:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="791">{{cpp/io/basic_ios/title | operator!}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 1=
bool operator!() const;
}}
{{dcl end}}

Returns {{c|true}} if an error has occurred on the associated stream. Specifically, returns {{c|true}} if {{tt|badbit}} or {{tt|failbit}} is set in {{c|rdstate()}}.

===Parameters===
(none)

===Return value===
{{c|true}} if an error has occurred, {{c|false}} otherwise.

===Example===
{{example template|cpp/io/basic_ios/example1}}

===See also===
{{cpp/io/basic ios/iostate accessors}}

[[de:cpp/io/basic ios/operator!]]
[[es:cpp/io/basic ios/operator!]]
[[fr:cpp/io/basic ios/operator!]]
[[it:cpp/io/basic ios/operator!]]
[[ja:cpp/io/basic ios/operator!]]
[[pt:cpp/io/basic ios/operator!]]
[[ru:cpp/io/basic ios/operator!]]
[[zh:cpp/io/basic ios/operator!]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/rdbuf</title>
    <ns>0</ns>
    <id>5529</id>
    <revision>
      <id>66636</id>
      <parentid>65388</parentid>
      <timestamp>2013-12-18T08:38:57Z</timestamp>
      <contributor>
        <ip>212.71.19.37</ip>
      </contributor>
      <text xml:space="preserve" bytes="1906">{{cpp/io/basic_ios/title|rdbuf}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | num = 1 |
std::basic_streambuf&lt;CharT, Traits&gt;* rdbuf() const;
}}
{{dcl | num = 2 |
std::basic_streambuf&lt;CharT, Traits&gt;* rdbuf( std::basic_streambuf&lt;CharT, Traits&gt;* sb );
}}
{{dcl end}}

Manages the associated stream buffer.

@1@ Returns the associated stream buffer. If there is no associated stream buffer, returns {{lc|NULL}}.

@2@ Sets the associated stream buffer to {{tt|sb}}. The error state is cleared by calling {{c|clear()}}. Returns the associated stream buffer before the operation. If there is no associated stream buffer, returns {{lc|NULL}}.

===Parameters===
{{par begin}}
{{par | sb | stream buffer to associate to}}
{{par end}}

===Return value===
The associated stream buffer, or {{lc|NULL}} if there was no associated stream buffer.

===Exceptions===
(none)

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::ostringstream local;
    auto cout_buff = std::cout.rdbuf(); // save pointer to std::cout buffer

    std::cout.rdbuf(local.rdbuf()); // substitute internal std::cout buffer with
        // buffer of 'local' object

    // now std::cout work with 'local' buffer
    // you don't see this message
    std::cout &lt;&lt; &quot;some message&quot;;

    // go back to old buffer
    std::cout.rdbuf(cout_buff);

    // you will see this message
    std::cout &lt;&lt; &quot;back to default buffer\n&quot;;

    // print 'local' content
    std::cout &lt;&lt; &quot;local content: &quot; &lt;&lt; local.str() &lt;&lt; &quot;\n&quot;;
}
|output=
back to default buffer
local content: some message
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc set_rdbuf}}
{{dsc end}}

[[de:cpp/io/basic ios/rdbuf]]
[[es:cpp/io/basic ios/rdbuf]]
[[fr:cpp/io/basic ios/rdbuf]]
[[it:cpp/io/basic ios/rdbuf]]
[[ja:cpp/io/basic ios/rdbuf]]
[[pt:cpp/io/basic ios/rdbuf]]
[[ru:cpp/io/basic ios/rdbuf]]
[[zh:cpp/io/basic ios/rdbuf]]</text>
      <sha1>c63rcshmbdho3fntlkzeofff41reepp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/rdstate</title>
    <ns>0</ns>
    <id>512</id>
    <revision>
      <id>65243</id>
      <parentid>65242</parentid>
      <timestamp>2013-09-05T12:27:35Z</timestamp>
      <contributor>
        <username>Ruslo</username>
        <id>2177</id>
      </contributor>
      <comment>I want to show, that there is no other bits (unlike when you, for example, reading file by getline)</comment>
      <text xml:space="preserve" bytes="1227">{{cpp/io/basic_ios/title | rdstate}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 1=
iostate rdstate() const;
}}
{{dcl end}}

Returns the current stream error state.

===Parameters===
(none)

===Return value===
current stream error state. It is a bitmask type and can be a combination of the following constants:
{{cpp/io/ios_base/iostate consts}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
  std::ostringstream stream;

  if (stream.rdstate() == std::ios_base::goodbit) {
    std::cout &lt;&lt; &quot;stream state is goodbit\n&quot;;
  }

  stream.setstate(std::ios_base::eofbit);

  // check state is exactly eofbit (no failbit and no badbit)
  if (stream.rdstate() == std::ios_base::eofbit) {
    std::cout &lt;&lt; &quot;stream state is eofbit\n&quot;;
  }
}
 | output=
stream state is goodbit
stream state is eofbit
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc setstate}}
{{dsc inc | cpp/io/basic_ios/dsc clear}}
{{dsc end}}

[[de:cpp/io/basic ios/rdstate]]
[[es:cpp/io/basic ios/rdstate]]
[[fr:cpp/io/basic ios/rdstate]]
[[it:cpp/io/basic ios/rdstate]]
[[ja:cpp/io/basic ios/rdstate]]
[[pt:cpp/io/basic ios/rdstate]]
[[ru:cpp/io/basic ios/rdstate]]
[[zh:cpp/io/basic ios/rdstate]]</text>
      <sha1>d1yqgo27ozca2xfnornnmz2007xle1t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/set rdbuf</title>
    <ns>0</ns>
    <id>5531</id>
    <revision>
      <id>66637</id>
      <parentid>57617</parentid>
      <timestamp>2013-12-18T08:41:31Z</timestamp>
      <contributor>
        <ip>212.71.19.37</ip>
      </contributor>
      <text xml:space="preserve" bytes="1236">{{cpp/io/basic_ios/title|set_rdbuf}}
{{cpp/io/basic_ios/navbar}}
{{ddcl |
protected:
void set_rdbuf( std::basic_streambuf&lt;CharT,Traits&gt;* sb );
}}

Sets the associated stream buffer to {{tt|sb}} without clearing the error state.

This member function is protected: it is called by the move constructors of the derived streams such as {{lc|std::basic_ofstream}} or {{lc|std::basic_istringstream}}, as the final step after constructing the base class and after moving the stream buffer: only the most derived stream class knows how to correctly move the stream buffer, but {{lc|std::basic_ios}} needs to be made aware of the stream's new location so that its public member functions can access it.

===Parameters===
{{par begin}}
{{par | sb | stream buffer to associate to}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example|
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc rdbuf}}
{{dsc end}}

[[de:cpp/io/basic ios/set rdbuf]]
[[es:cpp/io/basic ios/set rdbuf]]
[[fr:cpp/io/basic ios/set rdbuf]]
[[it:cpp/io/basic ios/set rdbuf]]
[[ja:cpp/io/basic ios/set rdbuf]]
[[pt:cpp/io/basic ios/set rdbuf]]
[[ru:cpp/io/basic ios/set rdbuf]]
[[zh:cpp/io/basic ios/set rdbuf]]</text>
      <sha1>nnot8snzm98fawdjv2tjbmct77razjb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/setstate</title>
    <ns>0</ns>
    <id>513</id>
    <revision>
      <id>67268</id>
      <parentid>65239</parentid>
      <timestamp>2014-02-01T00:47:16Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1373">{{cpp/io/basic_ios/title | setstate}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | 
void setstate( iostate state );
}}
{{dcl end}}

Sets the stream error flags {{tt|state}} in addition to currently set flags. Essentially calls {{c|clear(rdstate() {{!}} state)}}. May throw an exception.

===Parameters===
{{par begin}}
{{par | state | stream error state flags to set. It can be a combination of the following constants:
{{cpp/io/ios_base/iostate consts}}
}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::ostringstream stream;

    if (!stream.fail()) {
        std::cout &lt;&lt; &quot;stream is not fail\n&quot;;
    }

    stream.setstate(std::ios_base::failbit);

    if (stream.fail()) {
        std::cout &lt;&lt; &quot;now stream is fail\n&quot;;
    }

    if (!stream.good()) {
        std::cout &lt;&lt; &quot;and stream is not good\n&quot;;
    }
}
 | output=
stream is not fail
now stream is fail
and stream is not good
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc rdstate}}
{{dsc inc | cpp/io/basic_ios/dsc clear}}
{{dsc end}}

[[de:cpp/io/basic ios/setstate]]
[[es:cpp/io/basic ios/setstate]]
[[fr:cpp/io/basic ios/setstate]]
[[it:cpp/io/basic ios/setstate]]
[[ja:cpp/io/basic ios/setstate]]
[[pt:cpp/io/basic ios/setstate]]
[[ru:cpp/io/basic ios/setstate]]
[[zh:cpp/io/basic ios/setstate]]</text>
      <sha1>hbf5eycuu0tzx1lggo4lrq93pu3ntpo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/swap</title>
    <ns>0</ns>
    <id>8763</id>
    <revision>
      <id>91334</id>
      <parentid>64305</parentid>
      <timestamp>2017-03-31T19:40:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1054">{{cpp/io/basic_ios/title|swap}}
{{cpp/io/basic_ios/navbar}}
{{ddcl | since=c++11 |
protected:
void swap( basic_ios&amp; other );
}}

Exchanges the states of {{c|*this}} and {{tt|other}}, except for the associated {{tt|rdbuf}} objects. {{lc|rdbuf()}} and {{c|other.rdbuf()}} returns the same values as before the call.

This swap function is protected: it is called by the swap member functions of the derived stream classes such as {{lc|std::basic_ofstream}} or {{lc|std::basic_istringstream}}, which know how to correctly swap the associated streambuffers.

===Parameters===
{{par begin}}
{{par | other | the {{tt|basic_ios}} object to exchange the state with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc move}}
{{dsc end}}

[[de:cpp/io/basic ios/swap]]
[[es:cpp/io/basic ios/swap]]
[[fr:cpp/io/basic ios/swap]]
[[it:cpp/io/basic ios/swap]]
[[ja:cpp/io/basic ios/swap]]
[[pt:cpp/io/basic ios/swap]]
[[ru:cpp/io/basic ios/swap]]
[[zh:cpp/io/basic ios/swap]]</text>
      <sha1>evdyvujq25g49p605rkwtq634bm5cxu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/tie</title>
    <ns>0</ns>
    <id>5528</id>
    <revision>
      <id>82733</id>
      <parentid>82709</parentid>
      <timestamp>2015-12-31T14:39:13Z</timestamp>
      <contributor>
        <username>Radfler</username>
        <id>4820</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1848">{{cpp/io/basic_ios/title|tie}}
{{cpp/io/basic_ios/navbar}}
{{dcl begin}}
{{dcl | num = 1 |
std::basic_ostream&lt;CharT,Traits&gt;* tie() const;
}}
{{dcl | num = 2 |
std::basic_ostream&lt;CharT,Traits&gt;* tie( std::basic_ostream&lt;CharT,Traits&gt;* str );
}}
{{dcl end}}

Manages the tied stream. A tied stream is an output stream which is synchronized with the sequence controlled by the stream buffer ({{lc|rdbuf()}}), that is, {{c|flush()}} is called on the tied stream before any input/output operation on {{c|*this}}.

@1@ Returns the current tied stream. If there is no tied stream, {{lc|NULL}} is returned.

@2@ Sets the current tied stream to {{tt|str}}. Returns the tied stream before the operation. If there is no tied stream, {{lc|NULL}} is returned.

===Parameters===
{{par begin}}
{{par | str | an output stream to set as the tied stream}}
{{par end}}

===Return value===
The tied stream, or {{lc|NULL}} if there was no tied stream.

===Exceptions===
(none)

===Notes===
By default, the standard streams {{tt|cin}} and {{tt|cerr}} are tied to {{tt|cout}}. Similarly, their wide counterparts {{tt|wcin}} and {{tt|wcerr}} are tied to {{tt|wcout}}.

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

int main()
{
    std::ofstream os(&quot;test.txt&quot;);
    std::ifstream is(&quot;test.txt&quot;);
    std::string value(&quot;0&quot;);

    os &lt;&lt; &quot;Hello&quot;;
    is &gt;&gt; value;

    std::cout &lt;&lt; &quot;Result before tie(): \&quot;&quot; &lt;&lt; value &lt;&lt; &quot;\&quot;\n&quot;;
    is.clear();
    is.tie(&amp;os);

    is &gt;&gt; value;

    std::cout &lt;&lt; &quot;Result after tie(): \&quot;&quot; &lt;&lt; value &lt;&lt; &quot;\&quot;\n&quot;;
}
|output=
Result before tie(): &quot;0&quot;
Result after tie(): &quot;Hello&quot;
}}

[[de:cpp/io/basic ios/tie]]
[[es:cpp/io/basic ios/tie]]
[[fr:cpp/io/basic ios/tie]]
[[it:cpp/io/basic ios/tie]]
[[ja:cpp/io/basic ios/tie]]
[[pt:cpp/io/basic ios/tie]]
[[ru:cpp/io/basic ios/tie]]
[[zh:cpp/io/basic ios/tie]]</text>
      <sha1>76l0i065g0rflsglwbm53w4hemtzsut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/widen</title>
    <ns>0</ns>
    <id>5484</id>
    <revision>
      <id>69915</id>
      <parentid>57622</parentid>
      <timestamp>2014-05-01T14:18:52Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>make use of [[Template:cpp/locale/ctype/dsc do_widen]]</comment>
      <text xml:space="preserve" bytes="909">{{cpp/io/basic_ios/title | widen}}
{{cpp/io/basic_ios/navbar}}
{{ddcl |
char_type widen( char c ) const;
}}

Converts a character {{tt|c}} to its equivalent in the current locale. The result is converted from {{c|char}} to character type used within the stream if needed.

Effectively calls {{c|std::use_facet&lt; std::ctype&lt;char_type&gt; &gt;(getloc()).widen(c)}}.

===Parameters===
{{par begin}}
{{par | c | character to convert}}
{{par end}}

===Return value===
Character converted to {{tt|char_type}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc narrow}}
{{dsc inc | cpp/locale/ctype/dsc do_widen}}
{{dsc inc | cpp/string/multibyte/dsc btowc}}
{{dsc end}}

[[de:cpp/io/basic ios/widen]]
[[es:cpp/io/basic ios/widen]]
[[fr:cpp/io/basic ios/widen]]
[[it:cpp/io/basic ios/widen]]
[[ja:cpp/io/basic ios/widen]]
[[pt:cpp/io/basic ios/widen]]
[[ru:cpp/io/basic ios/widen]]
[[zh:cpp/io/basic ios/widen]]</text>
      <sha1>j419vv3hs6iftx37mm3066exvfho903</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ios/~basic ios</title>
    <ns>0</ns>
    <id>514</id>
    <revision>
      <id>63797</id>
      <parentid>46906</parentid>
      <timestamp>2013-07-25T17:14:11Z</timestamp>
      <contributor>
        <username>MooingDuck</username>
        <id>2242</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="617">{{cpp/io/basic_ios/title | ~basic_ios}}
{{cpp/io/basic_ios/navbar}}
{{ddcl | 
virtual ~basic_ios();
}}

Destroys the {{tt|basic_ios}} object. No operations on {{tt|rdbuf}} are performed, it is not destroyed.

===Notes===
This destructor is {{tt|virtual}} because the base class destructor, {{l2tt|cpp/io/ios_base/~ios_base}} is virtual.

[[de:cpp/io/basic ios/~basic ios]]
[[es:cpp/io/basic ios/~basic ios]]
[[fr:cpp/io/basic ios/~basic ios]]
[[it:cpp/io/basic ios/~basic ios]]
[[ja:cpp/io/basic ios/~basic ios]]
[[pt:cpp/io/basic ios/~basic ios]]
[[ru:cpp/io/basic ios/~basic ios]]
[[zh:cpp/io/basic ios/~basic ios]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic iostream</title>
    <ns>0</ns>
    <id>515</id>
    <revision>
      <id>90378</id>
      <parentid>57625</parentid>
      <timestamp>2017-02-22T18:35:47Z</timestamp>
      <contributor>
        <username>Mgkrupa</username>
        <id>6350</id>
      </contributor>
      <comment>Added see also section</comment>
      <text xml:space="preserve" bytes="1821">{{cpp/title|basic_iostream}}
{{cpp/io/basic_iostream/navbar}}
{{ddcl | header=istream |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt;
&gt; class basic_iostream;
}}
The class template {{tt|basic_iostream}} provides support for high level input/output operations on streams. The supported operations include sequential reading or writing and formatting. This functionality is implemented over the interface, provided by the {{tt|basic_streambuf}} class. It is accessed through {{tt|basic_ios}} class.

{{inheritance diagram/std-basic_iostream}}

Two specializations for common character types are defined:

{{dsc begin}}
{{dsc header | istream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|iostream}} | {{c|basic_iostream&lt;char&gt;}}}}
{{dsc | {{tt|wiostream}} | {{c|basic_iostream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_iostream/dsc constructor}}
{{dsc inc | cpp/io/basic_iostream/dsc destructor}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_iostream/dsc operator{{=}}}}
{{dsc inc | cpp/io/basic_iostream/dsc swap}}
{{dsc end}}

{{cpp/io/basic_istream/inherit}}
{{cpp/io/basic_ostream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

===See also===
[[cpp/io/manip | Input/output manipulators]]

[[de:cpp/io/basic iostream]]
[[es:cpp/io/basic iostream]]
[[fr:cpp/io/basic iostream]]
[[it:cpp/io/basic iostream]]
[[ja:cpp/io/basic iostream]]
[[pt:cpp/io/basic iostream]]
[[ru:cpp/io/basic iostream]]
[[zh:cpp/io/basic iostream]]</text>
      <sha1>js9yf125by2tza9bjt7x6e5chr9e5cw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic iostream/basic iostream</title>
    <ns>0</ns>
    <id>8768</id>
    <revision>
      <id>62729</id>
      <parentid>57626</parentid>
      <timestamp>2013-07-01T23:34:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1945">{{cpp/io/basic_iostream/title|basic_iostream}}
{{cpp/io/basic_iostream/navbar}}
{{dcl begin}}
{{dcl | num=1 |
explicit basic_iostream( std::basic_streambuf&lt;CharT,Traits&gt;* sb );
}}
{{dcl | num=2 | since=c++11 | 1=
basic_iostream( const basic_iostream&amp; other ) = delete;
}}
{{dcl | num=3 | since=c++11 | 1=
protected:
basic_iostream( basic_iostream&amp;&amp; other );
}}
{{dcl end}}

Constructs new stream object.

@1@ Initializes with streambuf {{tt|sb}}. The base classes are initialized as {{c|basic_istream&lt;CharT,Traits&gt;(sb)}} and {{c|basic_ostream&lt;CharT,Traits&gt;(sb)}}. After the call {{c|1=rdbuf() == sb}} and {{c|1=gcount() == 0}}.

@2@ Copy construction is not allowed.

@3@ Move constructor: move-constructs the first base class {{tt|basic_istream}} as {{c|basic_istream&lt;CharT,Traits&gt;(std::move(rhs));}}, which in turn move-constructs and initializes the virtual base {{lc|std::basic_ios}}. The initialization of the other base, {{tt|basic_ostream}}, is implementation-defined (e.g., a protected default constructor may be added to {{lc|std::basic_ostream}}, which does nothing) because move-construction cannot use {{tt|rhs}} twice. This move constructor is protected: it is called by the move constructors of the derived stream classes {{lc|std::basic_fstream}} and {{lc|std::basic_stringstream}} before they move-construct and associate the stream buffer.

===Parameters===
{{par begin}}
{{par | sb | streambuf to initialize with}}
{{par | other | another stream to initialize with}}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_iostream/dsc operator{{=}}}}
{{dsc end}}

[[de:cpp/io/basic iostream/basic iostream]]
[[es:cpp/io/basic iostream/basic iostream]]
[[fr:cpp/io/basic iostream/basic iostream]]
[[it:cpp/io/basic iostream/basic iostream]]
[[ja:cpp/io/basic iostream/basic iostream]]
[[pt:cpp/io/basic iostream/basic iostream]]
[[ru:cpp/io/basic iostream/basic iostream]]
[[zh:cpp/io/basic iostream/basic iostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic iostream/operator=</title>
    <ns>0</ns>
    <id>8773</id>
    <revision>
      <id>62730</id>
      <parentid>57629</parentid>
      <timestamp>2013-07-01T23:34:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1223">{{cpp/io/basic_iostream/title|operator{{=}}}}
{{cpp/io/basic_iostream/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
basic_iostream&amp; operator=( const basic_iostream&amp; other ) = delete;
}}
{{dcl | num=2 | since=c++11 | 1=
protected:
basic_iostream&amp; operator=( basic_iostream&amp;&amp; other );
}}
{{dcl end}}

Assigns another stream object.

@1@ Copy assignment is not allowed.
@2@ Move assigns another stream object. Effectively calls {{c|swap(rhs)}}. This move assignment operator is protected: it is called by the move assignment operators of the derived stream classes {{lc|std::basic_stringstream}} and {{lc|std::basic_fstream}} which know how to properly move-assign the associated stream buffers.

===Parameters===
{{par begin}}
{{par | other | another stream to assign state of}}
{{par end}}

===Return value===
{{c|*this}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_iostream/dsc constructor}}
{{dsc end}}

[[de:cpp/io/basic iostream/operator=]]
[[es:cpp/io/basic iostream/operator=]]
[[fr:cpp/io/basic iostream/operator=]]
[[it:cpp/io/basic iostream/operator=]]
[[ja:cpp/io/basic iostream/operator=]]
[[pt:cpp/io/basic iostream/operator=]]
[[ru:cpp/io/basic iostream/operator=]]
[[zh:cpp/io/basic iostream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic iostream/swap</title>
    <ns>0</ns>
    <id>8774</id>
    <revision>
      <id>63323</id>
      <parentid>49651</parentid>
      <timestamp>2013-07-10T01:28:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="917">{{cpp/io/basic_iostream/title|swap}}
{{cpp/io/basic_iostream/navbar}}
{{ddcl | since=c++11 | 1=
protected:
void swap( basic_iostream&amp; other );
}}

Exchanges the state with another input/output stream object. Effectively calls {{c|basic_istream&lt;CharT,Traits&gt;::swap(other)}}.

This member function is protected: it is called by the swap member functions of the derived stream classes {{lc|std::basic_stringstream}} and {{lc|std::basic_fstream}}, which know how to correctly swap the associated stream buffers.


===Parameters===
{{par begin}}
{{par | other | another stream to exchange the state with}}
{{par end}}

===Return value===
{{c|*this}}

[[de:cpp/io/basic iostream/swap]]
[[es:cpp/io/basic iostream/swap]]
[[fr:cpp/io/basic iostream/swap]]
[[it:cpp/io/basic iostream/swap]]
[[ja:cpp/io/basic iostream/swap]]
[[pt:cpp/io/basic iostream/swap]]
[[ru:cpp/io/basic iostream/swap]]
[[zh:cpp/io/basic iostream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic iostream/~basic iostream</title>
    <ns>0</ns>
    <id>8772</id>
    <revision>
      <id>49652</id>
      <parentid>43987</parentid>
      <timestamp>2013-06-01T02:49:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="803">{{cpp/io/basic_iostream/title | ~basic_iostream}}
{{cpp/io/basic_iostream/navbar}}
{{ddcl |
virtual ~basic_iostream();
}}

Destructs the input/output stream.

===Notes===
This destructor does not perform any operation on the underlying stream buffer ({{tt|rdbuf()}}): the destructors of the derived streams such as {{lc|std::basic_fstream}} and {{lc|std::basic_stringstream}} are responsible for calling the destructors of the stream buffers.

[[de:cpp/io/basic iostream/~basic iostream]]
[[es:cpp/io/basic iostream/~basic iostream]]
[[fr:cpp/io/basic iostream/~basic iostream]]
[[it:cpp/io/basic iostream/~basic iostream]]
[[ja:cpp/io/basic iostream/~basic iostream]]
[[pt:cpp/io/basic iostream/~basic iostream]]
[[ru:cpp/io/basic iostream/~basic iostream]]
[[zh:cpp/io/basic iostream/~basic iostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream</title>
    <ns>0</ns>
    <id>516</id>
    <revision>
      <id>57630</id>
      <parentid>49653</parentid>
      <timestamp>2013-06-01T05:57:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="3060">{{cpp/title|basic_istream}}
{{cpp/io/basic_istream/navbar}}
{{ddcl | header=istream |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt;
&gt; class basic_istream : virtual public std::basic_ios&lt;CharT, Traits&gt;
}}

The class template {{tt|basic_istream}} provides support for high level input operations on character streams. The supported operations include formatted input (e.g. integer values or whitespace-separated characters and characters strings) and unformatted input (e.g. raw characters and character arrays). This functionality is implemented in terms of the interface provided by the underlying {{tt|basic_streambuf}} class, accessed through the {{tt|basic_ios}} base class. The only non-inherited data member of {{tt|basic_istream}}, in most implementations, is the value returned by {{ltt|cpp/io/basic_istream/gcount|basic_istream::gcount()}}.

{{inheritance diagram/std-basic_istream}}

Two specializations for common character types are defined:

{{dsc begin}}
{{dsc header | istream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|istream}} | {{c|basic_istream&lt;char&gt;}}}}
{{dsc | {{tt|wistream}} | {{c|basic_istream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Global objects===
Two global basic_istream objects are provided by the standard library.

{{dsc begin}}
{{dsc header | iostream}}
{{dsc inc | cpp/io/dsc cin}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc constructor}}
{{dsc inc | cpp/io/basic_istream/dsc destructor}}
{{dsc inc | cpp/io/basic_istream/dsc operator{{=}}}}

{{dsc h2 | Formatted input}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}

{{dsc h2 | Unformatted input}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc peek}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc inc | cpp/io/basic_istream/dsc putback}}
{{dsc inc | cpp/io/basic_istream/dsc getline}}
{{dsc inc | cpp/io/basic_istream/dsc ignore}}
{{dsc inc | cpp/io/basic_istream/dsc read}}
{{dsc inc | cpp/io/basic_istream/dsc readsome}}
{{dsc inc | cpp/io/basic_istream/dsc gcount}}

{{dsc h2 | Positioning}}
{{dsc inc | cpp/io/basic_istream/dsc tellg}}
{{dsc inc | cpp/io/basic_istream/dsc seekg}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/io/basic_istream/dsc sync}}
{{dsc inc | cpp/io/basic_istream/dsc swap}}
{{dsc end}}

===Member classes===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc sentry}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt2}}
{{dsc end}}

{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/basic istream]]
[[es:cpp/io/basic istream]]
[[fr:cpp/io/basic istream]]
[[it:cpp/io/basic istream]]
[[ja:cpp/io/basic istream]]
[[pt:cpp/io/basic istream]]
[[ru:cpp/io/basic istream]]
[[zh:cpp/io/basic istream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/basic istream</title>
    <ns>0</ns>
    <id>517</id>
    <revision>
      <id>70119</id>
      <parentid>70049</parentid>
      <timestamp>2014-05-10T11:13:03Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2168">{{cpp/io/basic_istream/title | basic_istream}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
explicit basic_istream( std::basic_streambuf&lt;CharT, Traits&gt;* sb);
}}
{{dcl | num=2 | since=c++11 |1=
protected:
basic_istream( const basic_istream&amp; rhs ) = delete;
}}
{{dcl | num=3 | since=c++11 |1=
protected:
basic_istream( basic_istream&amp;&amp; rhs );
}}
{{dcl end}}

1) Constructs the {{tt|basic_istream}} object, assigning initial values to the base class by calling {{c|basic_ios::init(sb)}}. The value of {{tt|gcount()}} is initialized to zero.

2) The copy constructor is protected, and is deleted. Input streams are not copyable.

3) The move constructor copies the value of {{tt|gcount()}} from {{tt|rhs}}, sets the gcount() value of rhs to zero, and uses {{tt|basic_ios&lt;CharT, Traits&gt;::move(rhs)}} to move all basic_ios members, except for the {{tt|rdbuf()}}, from {{tt|rhs}} into {{tt|*this}}. This move constructor is protected: it is called by the move constructors of movable input stream classes {{lc|std::basic_ifstream}} and {{lc|std::basic_istringstream}}, which know how to correctly move the associated stream buffer.

===Parameters===
{{par begin}}
{{par | sb | streambuffer to use as underlying device}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::istringstream s1(&quot;hello&quot;);
    std::istream s2(s1.rdbuf());                        // OK: s2 shares the buffer with s1

//    std::istream s3(std::istringstream(&quot;test&quot;));      // ERROR: move constructor is protected
//    std::istream s4(s2);                              // ERROR: copy constructor is deleted
    std::istringstream s5(std::istringstream(&quot;world&quot;)); // OK: move ctor called by derived class

    std::cout &lt;&lt; s2.rdbuf() &lt;&lt; ' ' &lt;&lt; s5.rdbuf() &lt;&lt; '\n';
}
| output=
hello world
}}

[[de:cpp/io/basic istream/basic istream]]
[[es:cpp/io/basic istream/basic istream]]
[[fr:cpp/io/basic istream/basic istream]]
[[it:cpp/io/basic istream/basic istream]]
[[ja:cpp/io/basic istream/basic istream]]
[[pt:cpp/io/basic istream/basic istream]]
[[ru:cpp/io/basic istream/basic istream]]
[[zh:cpp/io/basic istream/basic istream]]</text>
      <sha1>mlm2z41wb0wko4etjwlxqfyhozu951h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/gcount</title>
    <ns>0</ns>
    <id>518</id>
    <revision>
      <id>77744</id>
      <parentid>64368</parentid>
      <timestamp>2015-04-05T10:48:19Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>link [[cpp/concept/UnformattedInputFunction]]</comment>
      <text xml:space="preserve" bytes="1402">{{cpp/io/basic_istream/title | gcount}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl |
std::streamsize gcount() const;
}}
{{dcl end}}

Returns the number of characters extracted by the last [[cpp/concept/UnformattedInputFunction|unformatted input operation]].

The following member functions of {{tt|basic_istream}} change the value of subsequent {{tt|gcount()}} calls:

* {{rlp|basic_istream|move constructor}}
* {{lc|swap()}}
* {{lc|get()}}
* {{lc|getline()}}
* {{lc|ignore()}}
* {{lc|read()}}
* {{lc|readsome()}}
* {{lc|operator&gt;&gt;|operator&gt;&gt;(basic_streambuf*)}}

The following functions set {{tt|gcount()}} to zero:

* {{rlp|basic_istream|constructor}}
* {{lc|putback()}}
* {{lc|unget()}}
* {{lc|peek()}}

===Parameters===
(none)

===Return value===
The number of characters extracted by the last unformatted input operation

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
 
int main()
{
    char x[20];
    std::istringstream stream(&quot;Hello World&quot;);
    
    stream.read(x, sizeof x);
    std::cout &lt;&lt; &quot;Characters extracted: &quot; &lt;&lt; stream.gcount();
}
 | output=Characters extracted: 11
}}

[[de:cpp/io/basic istream/gcount]]
[[es:cpp/io/basic istream/gcount]]
[[fr:cpp/io/basic istream/gcount]]
[[it:cpp/io/basic istream/gcount]]
[[ja:cpp/io/basic istream/gcount]]
[[pt:cpp/io/basic istream/gcount]]
[[ru:cpp/io/basic istream/gcount]]
[[zh:cpp/io/basic istream/gcount]]</text>
      <sha1>1kzc26ef4oi1q90omuug222q63mic72</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/get</title>
    <ns>0</ns>
    <id>519</id>
    <revision>
      <id>73092</id>
      <parentid>67055</parentid>
      <timestamp>2014-10-12T16:56:58Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <comment>Amended to match the standard</comment>
      <text xml:space="preserve" bytes="4783">{{cpp/io/basic_istream/title | get}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | num=1 |
int_type get();
}}
{{dcl | num=2 |
basic_istream&amp; get( char_type&amp; ch );
}}
{{dcl | num=3 |
basic_istream&amp; get( char_type* s, std::streamsize count );
}}
{{dcl | num=4 |
basic_istream&amp; get( char_type* s, std::streamsize count, char_type delim );
}}
{{dcl | num=5 |
basic_istream&amp; get( basic_streambuf&amp; strbuf );
}}
{{dcl | num=6 |
basic_istream&amp; get( basic_streambuf&amp; strbuf, char_type delim );
}}
{{dcl end}}

Extracts character or characters from stream.

All versions behave as {{concept|UnformattedInputFunction}}s. After constructing and checking the sentry object, these functions perform the following:

@1@ Reads one character and returns it if available. Otherwise, returns {{c|Traits::eof()}} and sets {{lc|failbit}} and {{lc|eofbit}}.

@2@ Reads one character and stores it to {{tt|ch}} if available. Otherwise, leaves {{tt|ch}} unmodified and sets {{lc|failbit}} and {{lc|eofbit}}. Note that this function is not overloaded on the types {{c|signed char}} and {{c|unsigned char}}, unlike the formatted character input operator&gt;&gt;.

@3@ Same as {{c|get(s, count, widen('\n'))}}, that is, reads at most {{c|count-1}} characters and stores them into character string pointed to by {{tt|s}} until {{c|'\n'}} is found.

@4@ Reads characters and stores them into the successive locations of the character array whose first element is pointed to by {{tt|s}}. Characters are extracted and stored until any of the following occurs:

::* n-1 characters have been stored

::* end of file condition occurs in the input sequence ({{c|setstate(eofbit)}} is called)

::* the next available input character {{tt|c}} equals {{tt|delim}}, as determined by {{c|Traits::eq(c, delim)}}. This character is not extracted (unlike {{ltt|cpp/io/basic_istream/getline|basic_istream::getline()}})

@@ If no characters were extracted, calls {{c|setstate(failbit)}}. In any case, if {{tt|count&gt;0}}, a null character ({{c|CharT()}} is stored in the next successive location of the array.

@5@ same as {{c|get(strbuf, widen('\n'))}}, that is, reads available characters and inserts them to the given {{ltt|cpp/io/basic_streambuf}} object until {{c|'\n'}} is found.

@6@ reads characters and inserts them to the output sequence controlled by the given {{ltt|cpp/io/basic_streambuf}} object. Characters are extracted and inserted into {{tt|strbuf}} until any of the following occurs:

::* end of file condition occurs in the input sequence

::* inserting into the output sequence fails (in which case the character that could not be inserted, is not extracted)

::* the next available input character {{tt|c}} equals {{tt|delim}}, as determined by {{c|Traits::eq(c, delim)}}. This character is not extracted.

::* an exception occurs (in which case the exception is caught and not rethrown)

@@ If no characters were extracted, calls {{c|setstate(failbit)}}. 

All versions set the value of {{lc|gcount()}} to the number of characters extracted.

===Parameters===
{{par begin}}
{{par | ch | reference to the character to write the result to}}
{{par | s | pointer to the character string to store the characters to}}
{{par | count | size of character string pointed to by {{tt|s}}}}
{{par | delim | delimiting character to stop the extraction at. It is not extracted and not stored.}}
{{par | strbuf | stream buffer to read the content to}}
{{par end}}

===Return value===
@1@ the extracted character or {{c|Traits::eof()}}

@2-6@ {{c|*this}}

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::istringstream s1(&quot;Hello, world.&quot;);
    char c1 = s1.get(); // reads 'H'
    std::cout &lt;&lt; &quot;after reading &quot; &lt;&lt; c1 &lt;&lt; &quot;, gcount() == &quot; &lt;&lt;  s1.gcount() &lt;&lt; '\n';
    char c2;
    s1.get(c2);         // reads 'e'
    char str[5];
    s1.get(str, 5);     // reads &quot;llo,&quot;
    std::cout &lt;&lt; &quot;after reading &quot; &lt;&lt; str &lt;&lt; &quot;, gcount() == &quot; &lt;&lt;  s1.gcount() &lt;&lt; '\n';
    std::cout &lt;&lt; c1 &lt;&lt; c2 &lt;&lt; str;
    s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n'
    std::cout &lt;&lt; &quot;\nAfter the last get(), gcount() == &quot; &lt;&lt; s1.gcount() &lt;&lt; '\n';
}

 | output=
after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc read}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt2}}
{{dsc end}}

[[de:cpp/io/basic istream/get]]
[[es:cpp/io/basic istream/get]]
[[fr:cpp/io/basic istream/get]]
[[it:cpp/io/basic istream/get]]
[[ja:cpp/io/basic istream/get]]
[[pt:cpp/io/basic istream/get]]
[[ru:cpp/io/basic istream/get]]
[[zh:cpp/io/basic istream/get]]</text>
      <sha1>nq7gwe7qfo63ipnpcfr1u4doje2xwen</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/getline</title>
    <ns>0</ns>
    <id>520</id>
    <revision>
      <id>78273</id>
      <parentid>72930</parentid>
      <timestamp>2015-05-13T21:35:48Z</timestamp>
      <contributor>
        <ip>183.131.104.6</ip>
      </contributor>
      <text xml:space="preserve" bytes="3153">{{cpp/io/basic_istream/title | getline}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_istream&amp; getline( char_type* s, std::streamsize count );
}}
{{dcl | num=2 |
basic_istream&amp; getline( char_type* s, std::streamsize count, char_type delim );
}}
{{dcl end}}

Extracts characters from stream until end of line or the specified delimiter {{tt|delim}}.

The first version is equivalent to {{c|getline(s, count, widen('\n'))}}.

Behaves as {{concept|UnformattedInputFunction}}. After constructing and checking the sentry object, extracts characters from {{tt|*this}} and stores them in successive locations of the array whose first element is pointed to by {{tt|s}}, until any of the following occurs (tested in the order shown):

* end of file condition occurs in the input sequence (in which case {{c|setstate(eofbit)}} is executed)

* the next available character {{tt|c}} is the delimiter, as determined by {{c|Traits::eq(c, delim)}}. The delimiter is extracted (unlike {{ltt|cpp/io/basic_istream/get|basic_istream::get()}}) and counted towards {{tt|gcount()}}, but is not stored.

* {{c|count-1}} characters have been extracted (in which case {{c|setstate(failbit)}} is executed).

If the function extracts no characters (e.g. if {{c|count &lt; 1}}), {{c|setstate(failbit)}} is executed.

In any case, if {{tt|count&gt;0}}, it then stores a null character {{tt|CharT()}} into the next successive location of the array and updates {{tt|gcount()}}.

===Notes===
Because condition #2 is tested before condition #3, the input line that exactly fits the buffer does not trigger failbit.

Because the terminating character is counted as an extracted character, an empty input line does not trigger failbit.

===Parameters===
{{par begin}}
{{par | s | pointer to the character string to store the characters to}}
{{par | count | size of character string pointed to by {{tt|s}}}}
{{par | delim | delimiting character to stop the extraction at. It is extracted but not stored.}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;vector&gt;
#include &lt;array&gt;

int main()
{
    std::istringstream input(&quot;abc{{!}}def{{!}}gh&quot;);
    std::vector&lt;std::array&lt;char, 4&gt;&gt; v;

    // note: the following loop terminates when std::ios_base::operator bool()
    // on the stream returned from getline() returns false
    for (std::array&lt;char, 4&gt; a; input.getline(&amp;a[0], 4, '{{!}}'); ) {
        v.push_back(a);
    }

    for (auto&amp; a : v) {
        std::cout &lt;&lt; &amp;a[0] &lt;&lt; '\n';
    }
}
 | output=
abc
def
gh
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc getline}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc read}}
{{dsc end}}

[[de:cpp/io/basic istream/getline]]
[[es:cpp/io/basic istream/getline]]
[[fr:cpp/io/basic istream/getline]]
[[it:cpp/io/basic istream/getline]]
[[ja:cpp/io/basic istream/getline]]
[[pt:cpp/io/basic istream/getline]]
[[ru:cpp/io/basic istream/getline]]
[[zh:cpp/io/basic istream/getline]]</text>
      <sha1>cciengh331a65kw9xqvpjp3wj7j7v6p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/ignore</title>
    <ns>0</ns>
    <id>521</id>
    <revision>
      <id>62004</id>
      <parentid>57637</parentid>
      <timestamp>2013-06-14T13:31:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+exceptions</comment>
      <text xml:space="preserve" bytes="2418">{{cpp/io/basic_istream/title | ignore}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl |1=
basic_istream&amp; ignore( std::streamsize count = 1, int_type delim = Traits::eof() );
}}
{{dcl end}}

Extracts and discards characters from the input stream until and including {{tt|delim}}.

{{tt|ignore}} behaves as an {{concept|UnformattedInputFunction}}. After constructing and checking the sentry object, it extracts characters from the stream and discards them until any one of the following conditions occurs:

* {{tt|count}} characters were extracted. This test is disabled in the special case when {{tt|count}} equals {{c|std::numeric_limits&lt;std::streamsize&gt;::max()}}

* end of file conditions occurs in the input sequence, in which case the function calls {{c|setstate(eofbit)}}

* the next available character {{tt|c}} in the input sequence is {{tt|delim}}, as determined by {{c|Traits::eq_int_type(Traits::to_int_type(c), delim)}}. The delimiter character is extracted and discarded. This test is disabled if {{tt|delim}} is {{c|Traits::eof()}}

===Parameters===
{{par begin}}
{{par | count | number of characters to extract}}
{{par | delim | delimiting character to stop the extraction at. It is also extracted.}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | The following example uses {{tt|ignore}} to skip over non-numeric input:
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;limits&gt;

int main()
{
    std::istringstream input(&quot;1\n&quot;
                             &quot;some non-numeric input\n&quot;
                             &quot;2\n&quot;);
    for(;;) {
        int n;
        input &gt;&gt; n;

        if (input.eof() {{!!}} input.bad()) {
            break;
        } else if (input.fail()) {
            input.clear(); // unset failbit
            input.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n'); // skip bad input
        } else {
            std::cout &lt;&lt; n &lt;&lt; '\n';
        }
    }
}
 | output=
1
2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc getline}}
{{dsc end}}

[[de:cpp/io/basic istream/ignore]]
[[es:cpp/io/basic istream/ignore]]
[[fr:cpp/io/basic istream/ignore]]
[[it:cpp/io/basic istream/ignore]]
[[ja:cpp/io/basic istream/ignore]]
[[pt:cpp/io/basic istream/ignore]]
[[ru:cpp/io/basic istream/ignore]]
[[zh:cpp/io/basic istream/ignore]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/operator gtgt</title>
    <ns>0</ns>
    <id>522</id>
    <revision>
      <id>88278</id>
      <parentid>82631</parentid>
      <timestamp>2016-11-15T15:50:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso from_chars</comment>
      <text xml:space="preserve" bytes="5478">{{cpp/io/basic_istream/title | operator&gt;&gt;}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_istream&amp; operator&gt;&gt;( short&amp; value );
basic_istream&amp; operator&gt;&gt;( unsigned short&amp; value );
}}
{{dcl | num=2 |
basic_istream&amp; operator&gt;&gt;( int&amp; value );
basic_istream&amp; operator&gt;&gt;( unsigned int&amp; value );
}}
{{dcl | num=3 |
basic_istream&amp; operator&gt;&gt;( long&amp; value );
basic_istream&amp; operator&gt;&gt;( unsigned long&amp; value );
}}
{{dcl | num=4 | since=c++11 |
basic_istream&amp; operator&gt;&gt;( long long&amp; value );
basic_istream&amp; operator&gt;&gt;( unsigned long long&amp; value );
}}
{{dcl | num=5 |
basic_istream&amp; operator&gt;&gt;( float&amp; value );
basic_istream&amp; operator&gt;&gt;( double&amp; value );
basic_istream&amp; operator&gt;&gt;( long double&amp; value );
}}
{{dcl | num=6 | 
basic_istream&amp; operator&gt;&gt;( bool&amp; value );
}}
{{dcl | num=7 |
basic_istream&amp; operator&gt;&gt;( void*&amp; value );
}}
{{dcl | num=8 |
basic_istream&amp; operator&gt;&gt;( std::ios_base&amp; (*func)(std::ios_base&amp;) );
}}
{{dcl | num=9 |
basic_istream&amp; operator&gt;&gt;( std::basic_ios&lt;CharT,Traits&gt;&amp; (*func)(std::basic_ios&lt;CharT,Traits&gt;&amp;) );
}}
{{dcl | num=10 |
basic_istream&amp; operator&gt;&gt;( basic_istream&amp; (*func)(basic_istream&amp;) );
}}
{{dcl | num=11 | 
basic_istream&amp; operator&gt;&gt;( std::basic_streambuf&lt;CharT,Traits&gt;* sb );
}}
{{dcl end}}

@1-4@ Behaves as a {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, extracts an integer value by calling {{ltt|cpp/locale/num_get/get|std::num_get::get()}}

@5@ Behaves as a {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, extracts a floating point value by calling {{ltt|cpp/locale/num_get/get|std::num_get::get()}}

@6@ Behaves as a {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, extracts {{c|bool}} value by calling {{ltt|cpp/locale/num_get/get|std::num_get::get()}}

@7@ Behaves as a {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, extracts a generic pointer value by calling {{ltt|cpp/locale/num_get/get|std::num_get::get()}}

@8-10@ Calls {{c|func(*this);}}, where {{tt|func}} is an I/O manipulator.

@11@ Behaves as an {{concept|UnformattedInputFunction}}. After constructing and checking the sentry object, extracts all data from the input stream and stores it to {{tt|sb}}. The extraction stops if one of the following conditions are met:
:* end-of-file occurs on the input sequence;
:* inserting in the output sequence fails (in which case the character to be inserted is not extracted);
:* an exception occurs (in which case the exception is caught, and only rethrown if {{tt|failbit}} is enabled in {{tt|exceptions()}}).
In either case, stores the number of characters extracted in the member variable accessed by subsequent calls to {{lc|gcount()}}. If {{tt|sb}} is a null pointer of it no characters were inserted into {{tt|sb}}, calls {{c|setstate(failbit)}} (which may throw {{lc|std::ios_base::failure}} if enabled).

{{rev begin}}
{{rev | until=c++11 | If extraction fails (e.g. if a letter was entered where a digit is expected), {{tt|value}} is left unmodified and {{tt|failbit}} is set.
}}
{{rev | since=c++11 | If extraction fails, zero is written to {{tt|value}} and {{tt|failbit}} is set. If extraction results in the value too large or too small to fit in {{tt|value}}, {{c|std::numeric_limits&lt;T&gt;::max()}} or {{c|std::numeric_limits&lt;T&gt;::min()}} is written and {{tt|failbit}} flag is set. 
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | value | reference to an integer or floating-point value to store the extracted value to}}
{{par | func | pointer to I/O manipulator function}}
{{par | sb | pointer to the streambuffer to write all the data to}}
{{par end}}

===Return value===
@1-9,11@ {{c|*this}}
@10@ {{c|func(*this)}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;sstream&gt;

int main()
{
    std::string input = &quot;41 3.14 false hello world&quot;;
    std::istringstream stream(input);
    int n;
    double f;
    bool b;

    stream &gt;&gt; n &gt;&gt; f &gt;&gt; std::boolalpha &gt;&gt; b;
    std::cout &lt;&lt; &quot;n = &quot; &lt;&lt; n &lt;&lt; '\n'
              &lt;&lt; &quot;f = &quot; &lt;&lt; f &lt;&lt; '\n'
              &lt;&lt; &quot;b = &quot; &lt;&lt; std::boolalpha &lt;&lt; b &lt;&lt; '\n';

    // extract the rest using the streambuf overload
    stream &gt;&gt; std::cout.rdbuf();
    std::cout &lt;&lt; '\n';
}
 | output=
n = 41
f = 3.14
b = false
hello world
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt2}}
{{dsc inc | cpp/string/basic_string/dsc operator_ltltgtgt}}
{{dsc inc | cpp/utility/bitset/dsc operator_ltltgtgt2}}
{{dsc inc | cpp/numeric/complex/dsc operator_ltltgtgt}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_ltltgtgt | linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | uniform_int_distribution}}
{{dsc inc | cpp/io/basic_istream/dsc read}}
{{dsc inc | cpp/io/basic_istream/dsc readsome}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc getline}}
{{dsc inc | cpp/utility/dsc from_chars}} 
{{dsc end}}

[[de:cpp/io/basic istream/operator gtgt]]
[[es:cpp/io/basic istream/operator gtgt]]
[[fr:cpp/io/basic istream/operator gtgt]]
[[it:cpp/io/basic istream/operator gtgt]]
[[ja:cpp/io/basic istream/operator gtgt]]
[[pt:cpp/io/basic istream/operator gtgt]]
[[ru:cpp/io/basic istream/operator gtgt]]
[[zh:cpp/io/basic istream/operator gtgt]]</text>
      <sha1>0ez6yzxdppf2iclfjzqfd9l6qt9bte9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/operator gtgt2</title>
    <ns>0</ns>
    <id>3766</id>
    <revision>
      <id>91985</id>
      <parentid>88681</parentid>
      <timestamp>2017-04-01T05:37:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="4798">{{title|operator&gt;&gt;{{small|(std::basic_istream)}}}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | num=1 |
template&lt; class CharT, class Traits &gt;
basic_istream&lt;CharT,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;CharT,Traits&gt;&amp; st, CharT&amp; ch );

template&lt; class Traits &gt;
basic_istream&lt;char,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;char,Traits&gt;&amp; st, signed char&amp; ch );

template&lt; class Traits &gt;
basic_istream&lt;char,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;char,Traits&gt;&amp; st, unsigned char&amp; ch );
}}
{{dcl | num=2 |
template&lt; class CharT, class Traits&gt;
basic_istream&lt;CharT,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;CharT,Traits&gt;&amp; st, CharT* s );

template&lt; class Traits &gt;
basic_istream&lt;char,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;char,Traits&gt;&amp; st, signed char* s );

template&lt; class Traits &gt;
basic_istream&lt;char,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;char,Traits&gt;&amp; st, unsigned char* s );
}}
{{dcl rev begin| num=3 }}
{{dcl| since=c++11 | until=c++17 |
template&lt; class CharT, class Traits, class T &gt;
basic_istream&lt;CharT,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;CharT,Traits&gt;&amp;&amp; st, T&amp; value );
}}
{{dcl| since=c++17 |
template&lt; class CharT, class Traits, class T &gt;
basic_istream&lt;CharT,Traits&gt;&amp; operator&gt;&gt;( basic_istream&lt;CharT,Traits&gt;&amp;&amp; st, T&amp;&amp; value );
}}
{{dcl rev end}}
{{dcl end}}


Performs character input operations.

1) Behaves as an {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, extracts a character and stores it to {{tt|ch}}. If no character is available, sets {{ltt|cpp/io/ios_base/iostate|failbit}} (in addition to {{ltt|cpp/io/ios_base/iostate|eofbit}} that is set as required of a {{concept|FormattedInputFunction}}).

2) Behaves as an {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, extracts successive characters and stores them at successive locations of a character array whose first element is pointed to by {{tt|s}}. The extraction stops if one of the following conditions are met:
:* a whitespace character (as determined by the {{ltt|cpp/locale/ctype|ctype&lt;CharT&gt;}} facet) is found. The whitespace character is not extracted. 
:* {{c|st.width() - 1}} characters are extracted
:* end of file occurs in the input sequence (this also sets {{ltt|cpp/io/ios_base/iostate|eofbit}})
In either case, an additional null character value {{c|CharT()}} is stored at the end of the output. If no characters were extracted, sets {{ltt|cpp/io/ios_base/iostate|failbit}} (the null character is still written, to the first position in the output). Finally, calls {{c|st.width(0)}} to cancel the effects of {{lc|std::setw}}, if any.

3) {{rev begin}}
{{rev|since=c++11|until=c++17|Calls the appropriate extraction operator, given an rvalue reference to an input stream object (equivalent to {{c|st &gt;&gt; value}}).}}
{{rev|since=c++17|Calls the appropriate extraction operator, given an rvalue reference to an input stream object (equivalent to {{c|st &gt;&gt; std::forward&lt;T&gt;(value)}}). This function does not participate in overload resolution unless the expression {{c|st &gt;&gt; std::forward&lt;T&gt;(value)}} is well-formed.}}
{{rev end}}
===Notes===
Extracting a single character that is the last character of the stream does not set {{tt|eofbit}}: this is different from other formatted input functions, such as extracting the last integer with {{c|operator&gt;&gt;}}, but this behavior matches the behavior of {{lc|std::scanf}} with {{c|&quot;%c&quot;}} format specifier. {{mark unreviewed dr|LWG}}&lt;!-- prooflink: http://cplusplus.github.com/LWG/lwg-closed.html#2036 --&gt;

===Parameters===

{{par begin}}
{{par | st | input stream to extract the data from}}
{{par | ch | reference to a character to store the extracted character to}}
{{par | s | pointer to a character string to store the extracted characters to}}
{{par end}}

===Return value===
{{tt|st}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;sstream&gt;

int main()
{
    std::string input = &quot;n greetings&quot;;
    std::istringstream stream(input);
    char c;
    const int MAX = 6;
    char cstr[MAX];

    stream &gt;&gt; c &gt;&gt; std::setw(MAX) &gt;&gt; cstr;
    std::cout &lt;&lt; &quot;c = &quot; &lt;&lt; c &lt;&lt; '\n'
              &lt;&lt; &quot;cstr = &quot; &lt;&lt; cstr &lt;&lt; '\n';

    double f;
    std::istringstream(&quot;1.23&quot;) &gt;&gt; f; // rvalue stream extraction
    std::cout &lt;&lt; &quot;f = &quot; &lt;&lt; f &lt;&lt; '\n';
}

| output=
c = n
cstr = greet
f = 1.23
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc end}}

[[de:cpp/io/basic istream/operator gtgt2]]
[[es:cpp/io/basic istream/operator gtgt2]]
[[fr:cpp/io/basic istream/operator gtgt2]]
[[it:cpp/io/basic istream/operator gtgt2]]
[[ja:cpp/io/basic istream/operator gtgt2]]
[[pt:cpp/io/basic istream/operator gtgt2]]
[[ru:cpp/io/basic istream/operator gtgt2]]
[[zh:cpp/io/basic istream/operator gtgt2]]</text>
      <sha1>7c9t07n6fsqsuqn88nlqdjlp26g99i8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/operator=</title>
    <ns>0</ns>
    <id>4028</id>
    <revision>
      <id>63204</id>
      <parentid>62732</parentid>
      <timestamp>2013-07-05T18:52:06Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1518">{{cpp/io/basic_istream/title | operator{{=}}}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
protected:
basic_istream&amp; operator=( const basic_istream&amp; rhs ) = delete;
}}
{{dcl | num=2 | since=c++11 | 1=
protected:
basic_istream&amp; operator=( basic_istream&amp;&amp; rhs );
}}
{{dcl end}}

1) The copy assignment operator is protected, and is deleted. Input streams are not CopyAssignable.

2) The move assignment operator exchanges the gcount() values and all data members of the base class, except for {{tt|rdbuf()}}, with {{tt|rhs}}, as if by calling {{c|swap(*rhs)}}. This move assignment operator is protected: it is only called by the move assignment operators of the derived movable input stream classes {{lc|std::basic_ifstream}} and {{lc|std::basic_istringstream}}, which know how to correctly move-assign the associated streambuffers.

===Parameters===
{{par begin}}
{{par | rhs | the basic_istream object from which to assign to {{c|*this}}}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::istringstream s1;
    s1 = std::istringstream(&quot;test&quot;); // OK

    std::cin = std::istringstream(&quot;test&quot;); // ERROR: 'operator=' is protected
}
}}

[[de:cpp/io/basic istream/operator=]]
[[es:cpp/io/basic istream/operator=]]
[[fr:cpp/io/basic istream/operator=]]
[[it:cpp/io/basic istream/operator=]]
[[ja:cpp/io/basic istream/operator=]]
[[pt:cpp/io/basic istream/operator=]]
[[ru:cpp/io/basic istream/operator=]]
[[zh:cpp/io/basic istream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/peek</title>
    <ns>0</ns>
    <id>523</id>
    <revision>
      <id>64970</id>
      <parentid>62001</parentid>
      <timestamp>2013-08-28T17:45:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso to sgetc</comment>
      <text xml:space="preserve" bytes="1219">{{cpp/io/basic_istream/title | peek}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
int_type peek();
}}

Behaves as {{concept|UnformattedInputFunction}}. After constructing and testing the sentry object, reads the next character from the input stream without extracting it. 

===Parameters===
(none)

===Return value===
If {{c|good() {{==}} true}}, returns the next character as obtained by {{c|rdbuf()-&gt;sgetc()}}

Otherwise, returns {{c|Traits::eof()}}.

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
int main()
{
    std::istringstream s1(&quot;Hello, world.&quot;);
    char c1 = s1.peek();
    char c2 = s1.get();
    std::cout &lt;&lt; &quot;Peeked: &quot; &lt;&lt; c1 &lt;&lt; &quot; got: &quot; &lt;&lt; c2 &lt;&lt; '\n';
}
 | output=
Peeked: H got: H
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc end}}

[[de:cpp/io/basic istream/peek]]
[[es:cpp/io/basic istream/peek]]
[[fr:cpp/io/basic istream/peek]]
[[it:cpp/io/basic istream/peek]]
[[ja:cpp/io/basic istream/peek]]
[[pt:cpp/io/basic istream/peek]]
[[ru:cpp/io/basic istream/peek]]
[[zh:cpp/io/basic istream/peek]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/putback</title>
    <ns>0</ns>
    <id>524</id>
    <revision>
      <id>69810</id>
      <parentid>62411</parentid>
      <timestamp>2014-04-25T18:26:15Z</timestamp>
      <contributor>
        <username>Jankowalski25</username>
        <id>2468</id>
      </contributor>
      <comment>missing parameter</comment>
      <text xml:space="preserve" bytes="2184">{{cpp/io/basic_istream/title | putback}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
basic_istream&amp; putback( char_type ch );
}}

Puts the character {{tt|ch}} back to the input stream so the next extracted character will be {{tt|ch}}. 

First clears {{tt|eofbit}}, then behaves as {{concept|UnformattedInputFunction}}. After constructing and checking the sentry object, if {{tt|rdbuf()}} is not null, calls {{c|rdbuf()-&gt;sputbackc(ch)}}, which calls {{c|rdbuf()-&gt;pbackfail(ch)}} if {{tt|ch}} does not equal the most recently extracted character.

If {{tt|rdbuf()}} is null or if {{c|rdbuf-&gt;sputbackc(ch)}} returns {{c|Traits::eof()}}, calls {{c|setstate(badbit)}}.

In any case, sets the {{tt|gcount()}} counter to zero.

===Parameters===
{{par begin}}
{{par | ch | character to put into input stream}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | demonstrates the difference between modifying and non-modifying putback()
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::stringstream s1(&quot;Hello, world&quot;); // IO stream
    s1.get();
    if (s1.putback('Y')) // modifies the buffer
        std::cout &lt;&lt; s1.rdbuf() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;putback failed\n&quot;;

    std::istringstream s2(&quot;Hello, world&quot;); // input-only stream
    s2.get();
    if (s2.putback('Y')) // cannot modify input-only buffer
        std::cout &lt;&lt; s2.rdbuf() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;putback failed\n&quot;;

    s2.clear();
    if (s2.putback('H')) // non-modifying putback
        std::cout &lt;&lt; s2.rdbuf() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;putback failed\n&quot;;
}
 | output=
Yello, world
putback failed
Hello, world
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc inc | cpp/io/basic_istream/dsc peek}}
{{dsc end}}

[[de:cpp/io/basic istream/putback]]
[[es:cpp/io/basic istream/putback]]
[[fr:cpp/io/basic istream/putback]]
[[it:cpp/io/basic istream/putback]]
[[ja:cpp/io/basic istream/putback]]
[[pt:cpp/io/basic istream/putback]]
[[ru:cpp/io/basic istream/putback]]
[[zh:cpp/io/basic istream/putback]]</text>
      <sha1>3khbkindv4bhtjol096zlglgz2ve1bi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/read</title>
    <ns>0</ns>
    <id>525</id>
    <revision>
      <id>91253</id>
      <parentid>86944</parentid>
      <timestamp>2017-03-30T13:29:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>tweaked example to test the success of read(). Also avoid explicit ::close</comment>
      <text xml:space="preserve" bytes="2491">{{cpp/io/basic_istream/title | read}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
basic_istream&amp; read( char_type* s, std::streamsize count );
}}

Extracts characters from stream.

Behaves as {{concept|UnformattedInputFunction}}. After constructing and checking the sentry object, extracts characters and stores them into successive locations of the character array whose first element is pointed to by {{tt|s}}. Characters are extracted and stored until any of the following conditions occurs:

* {{tt|count}} characters were extracted and stored

* end of file condition occurs on the input sequence (in which case, {{c|setstate(failbit{{!}}eofbit)}} is called). The number of successfully extracted characters can be queried using [[cpp/io/basic_istream/gcount | gcount()]].

===Parameters===
{{par begin}}
{{par | s | pointer to the character array to store the characters to}}
{{par | count | number of characters to read}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;cstdint&gt;

int main()
{
    // read() is often used for binary I/O
    std::string bin = {'\x12', '\x12', '\x12', '\x12'};
    std::istringstream raw(bin);
    std::uint32_t n;
    if(raw.read(reinterpret_cast&lt;char*&gt;(&amp;n), sizeof n))
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; n &lt;&lt; '\n';

    // prepare file for next snippet
    std::ofstream(&quot;test.txt&quot;, std::ios::binary) &lt;&lt; &quot;abcd1\nabcd2\nabcd3&quot;;

    // read entire file into string
    if(std::ifstream is{&quot;test.txt&quot;, std::ios::binary {{!}} std::ios::ate}) {
        auto size = is.tellg();
        std::string str(size, '\0'); // construct string to stream size
        is.seekg(0);
        if(is.read(&amp;str[0], size))
            std::cout &lt;&lt; str &lt;&lt; '\n';
    }
}
 | output=
0x12121212
abcd1
abcd2
abcd3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc write}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc inc | cpp/io/basic_istream/dsc readsome}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc getline}}
{{dsc inc | cpp/io/c/dsc fread}}
{{dsc end}}

[[de:cpp/io/basic istream/read]]
[[es:cpp/io/basic istream/read]]
[[fr:cpp/io/basic istream/read]]
[[it:cpp/io/basic istream/read]]
[[ja:cpp/io/basic istream/read]]
[[pt:cpp/io/basic istream/read]]
[[ru:cpp/io/basic istream/read]]
[[zh:cpp/io/basic istream/read]]</text>
      <sha1>0g2gh7yye09sbvumchqu6wpvjro2l0q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/readsome</title>
    <ns>0</ns>
    <id>526</id>
    <revision>
      <id>69843</id>
      <parentid>69842</parentid>
      <timestamp>2014-04-28T20:46:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>explanatory comments to the new example</comment>
      <text xml:space="preserve" bytes="2647">{{cpp/io/basic_istream/title | readsome}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
std::streamsize readsome( char_type* s, std::streamsize count );
}}

Extracts up to {{tt|count}} immediately available characters from the input stream. The extracted characters are stored into the character array pointed to by {{tt|s}}. 

Behaves as {{concept|UnformattedInputFunction}}. After constructing and checking the sentry object, 

* If {{c|1=rdbuf()-&gt;in_avail() == -1}}, calls {{c|setstate(eofbit)}} and extracts no characters.

* If {{c|1=rdbuf()-&gt;in_avail() == 0}}, extracts no characters.

* If {{c|1=rdbuf()-&gt;in_avail() &gt; 0}}, extracts {{c|std::min(rdbuf()-&gt;in_avail(), count)}} characters and stores them into successive locations of the characater array whose first element is pointed to by {{tt|s}}.

===Parameters===
{{par begin}}
{{par | s | pointer to the character array to store the characters to}}
{{par | count | maximum number of characters to read}}
{{par end}}

===Return value===
The number of characters actually extracted.

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Notes===
The behavior of this function is highly implementation-specific. For example, when used with {{lc|std::ifstream}}, some library implementations fill the underlying filebuf with data as soon as the file is opened (and readsome() on such implementations reads data, potentially, but not necessarily, the entire file), while other implementations only read from file when an actual input operation is requested (and readsome() issued after file opening never extracts any characters). Likewise, a call to {{c|std::cin.readsome()}} may return all pending unprocessed console input, or may always return zero and extract no characters.

===Example===
{{example
 | code=#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    char c[10] = {};
    std::istringstream input(&quot;This is sample text.&quot;); // std::stringbuf makes its entire
                                                      // buffer available for unblocking read
    input.readsome(c, 5); // reads 'This ' and stores in c[0] .. c[4]
    input.readsome(c, 9); // reads 'is sample' and stores in c[0] .. c[8]
    std::cout &lt;&lt; c;
}
 | output=is sample
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc read}}
{{dsc inc | cpp/io/basic_streambuf/dsc in_avail}}
{{dsc end}}

[[de:cpp/io/basic istream/readsome]]
[[es:cpp/io/basic istream/readsome]]
[[fr:cpp/io/basic istream/readsome]]
[[it:cpp/io/basic istream/readsome]]
[[ja:cpp/io/basic istream/readsome]]
[[pt:cpp/io/basic istream/readsome]]
[[ru:cpp/io/basic istream/readsome]]
[[zh:cpp/io/basic istream/readsome]]</text>
      <sha1>2p601q1hkcu4lqkjkmk57njjbgz4q7z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/seekg</title>
    <ns>0</ns>
    <id>527</id>
    <revision>
      <id>62009</id>
      <parentid>62008</parentid>
      <timestamp>2013-06-14T15:08:20Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>lc</comment>
      <text xml:space="preserve" bytes="2347">{{cpp/io/basic_istream/title | seekg}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | 1=
basic_istream&amp; seekg( pos_type pos );
}}
{{dcl | 1=
basic_istream&amp; seekg( off_type off, std::ios_base::seekdir dir);
}}
{{dcl end}}

Sets input position indicator of the current associated {{tt|streambuf}} object. In case of failure, calls {{c|setstate(std::ios_base::failbit)}}.

{{rev begin}}
{{rev|since=c++11|Before doing anything else, {{tt|seekg}} clears {{tt|eofbit}}.}}
{{rev end}}

{{tt|seekg}} behaves as {{concept|UnformattedInputFunction}}, except that {{lc|gcount()}} is not affected. After constructing and checking the sentry object,

@1@ sets the input position indicator to absolute (relative to the beginning of the file) value {{tt|pos}}. Specifically, executes {{c|rdbuf()-&gt;pubseekpos(pos, std::ios_base::in)}}.
@2@ sets the input position indicator to position {{tt|off}}, relative to position, defined by {{tt|dir}}. Specifically, executes {{c|rdbuf()-&gt;pubseekoff(off, dir, std::ios_base::in)}}. 

===Parameters===
{{par begin}}
{{par | pos | absolute position to set the input position indicator to.}}
{{par | off | relative position to set the input position indicator to.}}
{{par | dir | defines base position to apply the relative offset to. It can be one of the following constants:
{{cpp/io/ios_base/seekdir consts}} }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

int main()
{
    std::string str = &quot;Hello, world&quot;;
    std::istringstream in(str);
    std::string word1, word2;

    in &gt;&gt; word1;
    in.seekg(0); // rewind
    in &gt;&gt; word2;

    std::cout &lt;&lt; &quot;word1 = &quot; &lt;&lt; word1 &lt;&lt; '\n'
              &lt;&lt; &quot;word2 = &quot; &lt;&lt; word2 &lt;&lt; '\n';
}
 | output=
word1 = Hello,
word2 = Hello,
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc tellg}}
{{dsc inc | cpp/io/basic_ostream/dsc tellp | mem=std::basic_ostream}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp | mem=std::basic_ostream}}
{{dsc end}}

[[de:cpp/io/basic istream/seekg]]
[[es:cpp/io/basic istream/seekg]]
[[fr:cpp/io/basic istream/seekg]]
[[it:cpp/io/basic istream/seekg]]
[[ja:cpp/io/basic istream/seekg]]
[[pt:cpp/io/basic istream/seekg]]
[[ru:cpp/io/basic istream/seekg]]
[[zh:cpp/io/basic istream/seekg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/sentry</title>
    <ns>0</ns>
    <id>528</id>
    <revision>
      <id>69993</id>
      <parentid>69987</parentid>
      <timestamp>2014-05-05T10:28:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>not doing something isn't a list of actions.. reworded again</comment>
      <text xml:space="preserve" bytes="4140">{{cpp/io/basic_istream/title | sentry}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | 1=
class sentry;
}}
{{dcl end}}

An object of class {{tt|basic_istream::sentry}} is constructed in local scope at the beginning of each member function of {{lc|std::basic_istream}} that performs input (both formatted and unformatted). Its constructor prepares the input stream: checks if the stream is already in a failed state, flushes the tie()'d output streams, skips leading whitespace unless {{tt|noskipws}} flag is set, and performs other implementation-defined tasks if necessary. All cleanup, if necessary, is performed in the destructor, so that it is guaranteed to happen if exceptions are thrown during input.

===Member types===
{{dsc begin}}
{{dsc | {{tt|traits_type}} | {{c|Traits}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/sentry/dsc constructor}}
{{dsc inc | cpp/io/basic_istream/sentry/dsc destructor}}
{{dsc mem fun | operator{{=}} | nolink=true | notes={{cmark deleted}} | not copy assignable}}
{{dsc inc | cpp/io/basic_istream/sentry/dsc operator bool}}
{{dsc end}}

{{member | {{small|std::basic_istream::sentry::}}sentry | 2=
{{ddcl | 1=
explicit sentry(std::basic_istream&lt;CharT,Traits&gt;&amp; is, bool noskipws = false);
}}

Prepares the stream for formatted input.

If {{c|is.good()}} is {{c|false}}, calls {{c|is.setstate(failbit)}}{{mark|since c++11}} and returns. Otherwise, if {{c|is.tie()}} is not a null pointer, calls {{c|is.tie()-&gt;flush()}} to synchronize the output sequence with external streams. This call can be suppressed if the put area of {{c|is.tie()}} is empty. The implementation may defer the call to {{c|flush}} until a call of {{c|is.rdbuf()-&gt;underflow()}} occurs. If no such call occurs before the sentry object is destroyed, it may be eliminated entirely.

If {{tt|noskipws}} is zero and {{c|is.flags() &amp; ios_base::skipws}} is nonzero, the function extracts and discards all whitespace characters until the next available character is not a whitespace character (as determined by the currently imbued locale in {{tt|is}}). If {{c|is.rdbuf()-&gt;sbumpc()}} or {{c|is.rdbuf()-&gt;sgetc()}} returns {{c|traits::eof()}}, the function calls {{c|setstate(failbit {{!}} eofbit)}} (which may throw {{lc|std::ios_base::failure}}).

Additional implementation-defined preparation may take place, which may call {{c|setstate(failbit)}} (which may throw {{lc|std::ios_base::failure}}).

If after preparation is completed, {{c|is.good() {{==}} true}}, then any subsequent calls to {{c|operator bool}} will return {{c|true}}.

===Parameters===
{{par begin}}
{{par | is | input stream to prepare}}
{{par | noskipws | {{c|true}} if whitespace should not be skipped}}
{{par end}}

===Exceptions===
{{lc|std::ios_base::failure}} if the end of file condition occurs when skipping whitespace.
}}


{{member | {{small|std::basic_istream::sentry::}}~sentry | 2=
{{ddcl | 1=
~sentry();
}}
Does nothing.
}}


{{member | {{small|std::basic_istream::sentry::}}operator bool | 2=
{{ddcl | 1=
explicit operator bool() const;
}}
Checks whether the preparation of the input stream was successful.

===Parameters===
(none)

===Return value===
{{c|true}} if the initialization of the input stream was successful, {{c|false}} otherwise.
}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

struct Foo
{
   char n[5];
};

std::istream&amp; operator&gt;&gt;(std::istream&amp; is, Foo&amp; f)
{
    std::istream::sentry s(is);
    if (s)
        is.read(f.n, 5);
    return is;
}

int main()
{
    std::string input = &quot;   abcde&quot;;
    std::istringstream stream(input);
    Foo f;
    stream &gt;&gt; f;
    std::cout.write(f.n, 5);
    std::cout &lt;&lt; '\n';
}
| output=
abcde
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt2}}
{{dsc end}}

[[de:cpp/io/basic istream/sentry]]
[[es:cpp/io/basic istream/sentry]]
[[fr:cpp/io/basic istream/sentry]]
[[it:cpp/io/basic istream/sentry]]
[[ja:cpp/io/basic istream/sentry]]
[[pt:cpp/io/basic istream/sentry]]
[[ru:cpp/io/basic istream/sentry]]
[[zh:cpp/io/basic istream/sentry]]</text>
      <sha1>s7c88x49m3p23kxmvufxtet1utjz733</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/swap</title>
    <ns>0</ns>
    <id>4029</id>
    <revision>
      <id>64220</id>
      <parentid>62735</parentid>
      <timestamp>2013-08-15T15:34:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="1368">{{cpp/io/basic_istream/title | swap}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |1=
protected:
void swap(basic_istream&amp; rhs);
}}
{{dcl end}}

Calls {{c|basic_ios::swap(rhs)}} to swap all data members of the base class except for {{c|rdbuf()}}, and swaps the values of the {{lc|gcount()}} counters between {{c|*this}} and {{tt|rhs}}. This swap function is protected: it is called by the swap functions of the swappable input stream classes {{lc|std::basic_ifstream}} and {{lc|std::basic_istringstream}}, which know how to correctly swap the associated streambuffers.

===Parameters===
{{par begin}}
{{par | rhs | different basic_istream object of the same type to swap with}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
int main()
{
    std::istringstream s1(&quot;hello&quot;);
    std::istringstream s2(&quot;bye&quot;);

    s1.swap(s2); // OK, istringstream has a public swap()
    std::swap(s1, s2); // OK, calls s1.swap(s2)
//  std::cin.swap(s2); // ERROR: swap is a protected member

    std::cout &lt;&lt; s1.rdbuf();
}
| output=
hello
}}

[[de:cpp/io/basic istream/swap]]
[[es:cpp/io/basic istream/swap]]
[[fr:cpp/io/basic istream/swap]]
[[it:cpp/io/basic istream/swap]]
[[ja:cpp/io/basic istream/swap]]
[[pt:cpp/io/basic istream/swap]]
[[ru:cpp/io/basic istream/swap]]
[[zh:cpp/io/basic istream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/sync</title>
    <ns>0</ns>
    <id>529</id>
    <revision>
      <id>64164</id>
      <parentid>64163</parentid>
      <timestamp>2013-08-15T14:58:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="2697">{{cpp/io/basic_istream/title | sync}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
int sync();
}}

Synchronizes the input buffer with the associated data source.

Behaves as {{concept|UnformattedInputFunction}}, except that {{lc|gcount()}} is not affected. After constructing and checking the sentry object,

if {{lc|rdbuf()}} is a null pointer, returns {{c|-1}}

Otherwise, calls {{c|rdbuf()-&gt;pubsync()}}. If that function returns {{c|-1}}, calls {{c|setstate(badbit)}} and returns {{c|-1}}. Otherwise, returns {{c|0}}.

===Parameters===
(none)

===Return value===
{{c|0}} on success, {{c|-1}} on failure or if the stream does not support this operation (is unbuffered).

===Notes===
As with {{lc|readsome()}}, it is implementation-defined whether this function does anything with library-supplied streams. The intent is typically for the next read operation to pick up any changes that may have been made to the associated input sequence after the stream buffer last filled its get area. To achieve that, {{tt|sync()}} may empty the get area, or it may refill it, or it may do nothing. A notable exception is Visual Studio, where this operation discards the unprocessed input when called with a standard input stream.

===Example===
{{example
 | Demonstrates the use of input stream sync() with file input, as implemented on some platforms.
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;

void file_abc()
{
    std::ofstream f(&quot;test.txt&quot;);
    f &lt;&lt; &quot;abc\n&quot;;
}

void file_123()
{
    std::ofstream f(&quot;test.txt&quot;);
    f &lt;&lt; &quot;123\n&quot;;
}

int main()
{
    file_abc(); // file now contains &quot;abc&quot;
    std::ifstream f(&quot;test.txt&quot;);
    std::cout &lt;&lt; &quot;Reading from the file\n&quot;;
    char c;
    f &gt;&gt; c; std::cout &lt;&lt; c;
    file_123(); // file now contains &quot;123&quot;
    f &gt;&gt; c; std::cout &lt;&lt; c;
    f &gt;&gt; c; std::cout &lt;&lt; c &lt;&lt; '\n';
    f.close();

    file_abc(); // file now contains &quot;abc&quot;
    f.open(&quot;test.txt&quot;);
    std::cout &lt;&lt; &quot;Reading from the file, with sync()\n&quot;;
    f &gt;&gt; c; std::cout &lt;&lt; c;
    file_123(); // file now contains &quot;123&quot;
    f.sync();
    f &gt;&gt; c; std::cout &lt;&lt; c;
    f &gt;&gt; c; std::cout &lt;&lt; c &lt;&lt; '\n';
}
 | p=true
 | output= &lt;!-- Note: output as seen on on Sun and IBM, but the Linux/gcc that was tested printed &quot;abc&quot; both times --&gt;
Reading from the file
abc
Reading from the file, with sync()
a23
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sync}}
{{dsc inc | cpp/io/basic_ostream/dsc flush}}
{{dsc end}}

[[de:cpp/io/basic istream/sync]]
[[es:cpp/io/basic istream/sync]]
[[fr:cpp/io/basic istream/sync]]
[[it:cpp/io/basic istream/sync]]
[[ja:cpp/io/basic istream/sync]]
[[pt:cpp/io/basic istream/sync]]
[[ru:cpp/io/basic istream/sync]]
[[zh:cpp/io/basic istream/sync]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/tellg</title>
    <ns>0</ns>
    <id>530</id>
    <revision>
      <id>76328</id>
      <parentid>65957</parentid>
      <timestamp>2015-02-16T01:28:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso to the seekoffs</comment>
      <text xml:space="preserve" bytes="1692">{{cpp/io/basic_istream/title | tellg}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
pos_type tellg();
}}

Returns input position indicator of the current associated {{tt|streambuf}} object.

Behaves as {{concept|UnformattedInputFunction}}, except that {{lc|gcount()}} is not affected. After constructing and checking the sentry object, if {{c|1=fail() == true}}, returns {{c|pos_type(-1)}}. Otherwise, returns {{c|rdbuf()-&gt;pubseekoff(0, std::ios_base::cur, std::ios_base::in)}}.

===Parameters===
(none)

===Return value===
The current position of the get pointer on success, {{c|pos_type(-1)}} on failure

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

int main()
{
    std::string str = &quot;Hello, world&quot;;
    std::istringstream in(str);
    std::string word;
    in &gt;&gt; word;
    std::cout &lt;&lt; &quot;After reading the word \&quot;&quot; &lt;&lt; word
              &lt;&lt; &quot;\&quot; tellg() returns &quot; &lt;&lt; in.tellg() &lt;&lt; '\n';
}
 | output=
After reading the word &quot;Hello,&quot; tellg() returns 6
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_stringbuf/dsc seekoff}}
{{dsc inc | cpp/io/strstreambuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_istream/dsc seekg}}
{{dsc inc | cpp/io/basic_ostream/dsc tellp | mem=std::basic_ostream}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp | mem=std::basic_ostream}}
{{dsc end}}

[[de:cpp/io/basic istream/tellg]]
[[es:cpp/io/basic istream/tellg]]
[[fr:cpp/io/basic istream/tellg]]
[[it:cpp/io/basic istream/tellg]]
[[ja:cpp/io/basic istream/tellg]]
[[pt:cpp/io/basic istream/tellg]]
[[ru:cpp/io/basic istream/tellg]]
[[zh:cpp/io/basic istream/tellg]]</text>
      <sha1>hbh23xq72ax95d55371r9369pzgcsio</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/unget</title>
    <ns>0</ns>
    <id>531</id>
    <revision>
      <id>65956</id>
      <parentid>65950</parentid>
      <timestamp>2013-10-16T13:36:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix pre-c++11 behavior (it didn't check just eofbit, it checked them all , and not before sentry but after (that after-sentry wording remains in c++11, although it's redundant there)</comment>
      <text xml:space="preserve" bytes="1602">{{cpp/io/basic_istream/title | unget}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
basic_istream&amp; unget();
}}

Makes the most recently extracted character available again.

{{rev begin}}
{{rev | since=c++11 | 
First clears {{ltt|cpp/io/ios_base/iostate|eofbit}}.
}}
{{rev end}}

Then the function behaves as {{concept|UnformattedInputFunction}}. After constructing and checking the sentry object, if any {{lc|ios_base::iostate}} flags are set, the function sets {{tt|failbit}} and returns. Otherwise, calls {{c|rdbuf()-&gt;sungetc()}}.

If {{c|rdbuf()-&gt;sungetc()}} returns {{c|Traits::eof()}}, calls {{c|setstate(badbit)}}.

In any case, sets the {{tt|gcount()}} counter to zero.

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
{{include|cpp/io/stream_exceptions}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::istringstream s1(&quot;Hello, world.&quot;);
    char c1 = s1.get();
    if (s1.unget())
    {
        char c2 = s1.get();
        std::cout &lt;&lt; &quot;Got: &quot; &lt;&lt; c1 &lt;&lt; &quot; got again: &quot; &lt;&lt; c2 &lt;&lt; '\n';
    }
}
 | output=
Got: H got again: H
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc inc | cpp/io/basic_istream/dsc peek}}
{{dsc inc | cpp/io/basic_istream/dsc putback}}
{{dsc end}}

[[de:cpp/io/basic istream/unget]]
[[es:cpp/io/basic istream/unget]]
[[fr:cpp/io/basic istream/unget]]
[[it:cpp/io/basic istream/unget]]
[[ja:cpp/io/basic istream/unget]]
[[pt:cpp/io/basic istream/unget]]
[[ru:cpp/io/basic istream/unget]]
[[zh:cpp/io/basic istream/unget]]</text>
      <sha1>fc2n7s2igpylnl8y64rp1x0sayezcj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istream/~basic istream</title>
    <ns>0</ns>
    <id>532</id>
    <revision>
      <id>49671</id>
      <parentid>43863</parentid>
      <timestamp>2013-06-01T02:50:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1221">{{cpp/io/basic_istream/title | ~basic_istream}}
{{cpp/io/basic_istream/navbar}}
{{ddcl |
virtual ~basic_istream();
}}

Destructs the input stream.

===Notes===
This destructor does not perform any operation on the underlying streambuffer ({{tt|rdbuf()}}): the destructors of the derived input streams such as {{lc|std::basic_ifstream}} and {{lc|std::basic_istringstream}} are responsible for calling the destructors of the streambuffers.

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

void print_stringbuf(std::streambuf* p)
{
    std::istream buf(p); // buf shares the buffer with s1
    int n;
    buf &gt;&gt; n;
    std::cout &lt;&lt; n;
} // calls the destructor of buf. p remains unaffected

int main()
{
    std::istringstream s1(&quot;10 20&quot;);
    print_stringbuf(s1.rdbuf());
    int n;
    s1 &gt;&gt; n;
    std::cout &lt;&lt; ',' &lt;&lt; n &lt;&lt; '\n';
}
| output = 
10,20
}}

[[de:cpp/io/basic istream/~basic istream]]
[[es:cpp/io/basic istream/~basic istream]]
[[fr:cpp/io/basic istream/~basic istream]]
[[it:cpp/io/basic istream/~basic istream]]
[[ja:cpp/io/basic istream/~basic istream]]
[[pt:cpp/io/basic istream/~basic istream]]
[[ru:cpp/io/basic istream/~basic istream]]
[[zh:cpp/io/basic istream/~basic istream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istringstream</title>
    <ns>0</ns>
    <id>533</id>
    <revision>
      <id>64356</id>
      <parentid>62096</parentid>
      <timestamp>2013-08-15T18:31:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc, std</comment>
      <text xml:space="preserve" bytes="2398">{{cpp/title|basic_istringstream}}
{{cpp/io/basic_istringstream/navbar}}
{{dcl begin}}
{{dcl header | sstream}}
{{dcl rev begin}}
{{dcl | until=c++11 | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;
&gt; class basic_istringstream;
}}
{{dcl | since=c++11 | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;,
    class Allocator = std::allocator&lt;CharT&gt;
&gt; class basic_istringstream;
}}
{{dcl rev end}}
{{dcl end}}

The class template {{tt|std::basic_istringstream}} implements input operations on memory ({{lc|std::basic_string}}) based streams. It essentially wraps a raw string device implementation ({{lc|std::basic_stringbuf}}) into a higher-level interface ({{lc|std::basic_istream}}). The complete interface to unique {{tt|std::basic_stringbuf}} members is provided.

{{inheritance diagram/std-basic_istringstream}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | sstream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|istringstream}} | {{c|basic_istringstream&lt;char&gt;}}}}
{{dsc | {{tt|wistringstream}} | {{c|basic_istringstream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc inc | cpp/io/dsc allocator_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc constructor | basic_istringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc operator{{=}} | basic_istringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap | basic_istringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc rdbuf | basic_istringstream}}

{{dsc h2 | String operations }}
{{dsc inc | cpp/io/basic_stringstream/dsc str | basic_istringstream}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_istringstream}}
{{dsc end}}

{{cpp/io/basic_istream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/basic istringstream]]
[[es:cpp/io/basic istringstream]]
[[fr:cpp/io/basic istringstream]]
[[it:cpp/io/basic istringstream]]
[[ja:cpp/io/basic istringstream]]
[[pt:cpp/io/basic istringstream]]
[[ru:cpp/io/basic istringstream]]
[[zh:cpp/io/basic istringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istringstream/basic istringstream</title>
    <ns>0</ns>
    <id>534</id>
    <revision>
      <id>50844</id>
      <parentid>43852</parentid>
      <timestamp>2013-06-01T03:41:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="507">{{include page|cpp/io/basic_stringstream/constructor|basic_istringstream}}

[[de:cpp/io/basic istringstream/basic istringstream]]
[[es:cpp/io/basic istringstream/basic istringstream]]
[[fr:cpp/io/basic istringstream/basic istringstream]]
[[it:cpp/io/basic istringstream/basic istringstream]]
[[ja:cpp/io/basic istringstream/basic istringstream]]
[[pt:cpp/io/basic istringstream/basic istringstream]]
[[ru:cpp/io/basic istringstream/basic istringstream]]
[[zh:cpp/io/basic istringstream/basic istringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istringstream/operator=</title>
    <ns>0</ns>
    <id>535</id>
    <revision>
      <id>43846</id>
      <parentid>1069</parentid>
      <timestamp>2012-11-03T04:01:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="416">{{cpp/io/basic_stringstream/operator{{=}}|basic_istringstream}}

[[de:cpp/io/basic istringstream/operator=]]
[[es:cpp/io/basic istringstream/operator=]]
[[fr:cpp/io/basic istringstream/operator=]]
[[it:cpp/io/basic istringstream/operator=]]
[[ja:cpp/io/basic istringstream/operator=]]
[[pt:cpp/io/basic istringstream/operator=]]
[[ru:cpp/io/basic istringstream/operator=]]
[[zh:cpp/io/basic istringstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istringstream/rdbuf</title>
    <ns>0</ns>
    <id>536</id>
    <revision>
      <id>50845</id>
      <parentid>43840</parentid>
      <timestamp>2013-06-01T03:41:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="389">{{include page|cpp/io/basic_stringstream/rdbuf|basic_istringstream}}

[[de:cpp/io/basic istringstream/rdbuf]]
[[es:cpp/io/basic istringstream/rdbuf]]
[[fr:cpp/io/basic istringstream/rdbuf]]
[[it:cpp/io/basic istringstream/rdbuf]]
[[ja:cpp/io/basic istringstream/rdbuf]]
[[pt:cpp/io/basic istringstream/rdbuf]]
[[ru:cpp/io/basic istringstream/rdbuf]]
[[zh:cpp/io/basic istringstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istringstream/str</title>
    <ns>0</ns>
    <id>537</id>
    <revision>
      <id>50846</id>
      <parentid>43834</parentid>
      <timestamp>2013-06-01T03:41:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="371">{{include page|cpp/io/basic_stringstream/str|basic_istringstream}}

[[de:cpp/io/basic istringstream/str]]
[[es:cpp/io/basic istringstream/str]]
[[fr:cpp/io/basic istringstream/str]]
[[it:cpp/io/basic istringstream/str]]
[[ja:cpp/io/basic istringstream/str]]
[[pt:cpp/io/basic istringstream/str]]
[[ru:cpp/io/basic istringstream/str]]
[[zh:cpp/io/basic istringstream/str]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istringstream/swap</title>
    <ns>0</ns>
    <id>538</id>
    <revision>
      <id>50847</id>
      <parentid>43827</parentid>
      <timestamp>2013-06-01T03:41:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="380">{{include page|cpp/io/basic_stringstream/swap|basic_istringstream}}

[[de:cpp/io/basic istringstream/swap]]
[[es:cpp/io/basic istringstream/swap]]
[[fr:cpp/io/basic istringstream/swap]]
[[it:cpp/io/basic istringstream/swap]]
[[ja:cpp/io/basic istringstream/swap]]
[[pt:cpp/io/basic istringstream/swap]]
[[ru:cpp/io/basic istringstream/swap]]
[[zh:cpp/io/basic istringstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic istringstream/swap2</title>
    <ns>0</ns>
    <id>5492</id>
    <revision>
      <id>50848</id>
      <parentid>43822</parentid>
      <timestamp>2013-06-01T03:41:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="389">{{include page|cpp/io/basic_stringstream/swap2|basic_istringstream}}

[[de:cpp/io/basic istringstream/swap2]]
[[es:cpp/io/basic istringstream/swap2]]
[[fr:cpp/io/basic istringstream/swap2]]
[[it:cpp/io/basic istringstream/swap2]]
[[ja:cpp/io/basic istringstream/swap2]]
[[pt:cpp/io/basic istringstream/swap2]]
[[ru:cpp/io/basic istringstream/swap2]]
[[zh:cpp/io/basic istringstream/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream</title>
    <ns>0</ns>
    <id>539</id>
    <revision>
      <id>90435</id>
      <parentid>90412</parentid>
      <timestamp>2017-02-23T08:20:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>trimming example to focus on ofstream, dropped non-idiomatic code (two-phase init and explicit close). Could probably use a seek there somewhere.</comment>
      <text xml:space="preserve" bytes="2856">{{cpp/title|basic_ofstream}}
{{cpp/io/basic_ofstream/navbar}}
{{ddcl | header=fstream |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt;
&gt; class basic_ofstream : public std::basic_ostream&lt;CharT, Traits&gt;
}}

The class template {{tt|basic_ofstream}} implements high-level output operations on file based streams. It interfaces a file-based streambuffer ({{lc|std::basic_filebuf}}) with the high-level interface of ({{lc|std::basic_ostream}}).

A typical implementation of {{tt|std::basic_ofstream}} holds only one non-derived data member: an instance of {{c|std::basic_filebuf&lt;CharT, Traits&gt;}}.

{{inheritance diagram/std-basic_ofstream}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | fstream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|ofstream}} | {{c|basic_ofstream&lt;char&gt;}}}}
{{dsc | {{tt|wofstream}} | {{c|basic_ofstream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc constructor | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc destructor | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc operator{{=}} | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc swap | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc rdbuf | basic_ofstream}}

{{dsc h2 | File operations }}
{{dsc inc | cpp/io/basic_fstream/dsc is_open | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc open | basic_ofstream}}
{{dsc inc | cpp/io/basic_fstream/dsc close | basic_ofstream}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_fstream/dsc swap2 | basic_ofstream}}
{{dsc end}}


{{cpp/io/basic_ostream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

int main() {
	std::string filename = &quot;Test.b&quot;;
	{
		std::ofstream ostrm(filename, std::ios::binary);
		double d = 3.14;
		ostrm.write(reinterpret_cast&lt;char*&gt;(&amp;d), sizeof d); // binary output
		ostrm &lt;&lt; 123 &lt;&lt; &quot;abc&quot; &lt;&lt; '\n';                      // text output
	}

	// read back
	std::ifstream istrm(filename, std::ios::binary);
	double d;
	istrm.read(reinterpret_cast&lt;char*&gt;(&amp;d), sizeof d);
	int n;
	std::string s;
	istrm &gt;&gt; n &gt;&gt; s;
	std::cout &lt;&lt; &quot; read back: &quot; &lt;&lt; d &lt;&lt; &quot; &quot; &lt;&lt; n &lt;&lt; &quot; &quot; &lt;&lt; s &lt;&lt; '\n';
}
|output=
read back: 3.14 123 abc
}}


[[de:cpp/io/basic ofstream]]
[[es:cpp/io/basic ofstream]]
[[fr:cpp/io/basic ofstream]]
[[it:cpp/io/basic ofstream]]
[[ja:cpp/io/basic ofstream]]
[[pt:cpp/io/basic ofstream]]
[[ru:cpp/io/basic ofstream]]
[[zh:cpp/io/basic ofstream]]</text>
      <sha1>3tvkelsu9yzmkzi75f9o1h6bxdfbba9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/basic ofstream</title>
    <ns>0</ns>
    <id>540</id>
    <revision>
      <id>50849</id>
      <parentid>43808</parentid>
      <timestamp>2013-06-01T03:41:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="417">{{include page|cpp/io/basic_fstream/constructor|basic_ofstream}}

[[de:cpp/io/basic ofstream/basic ofstream]]
[[es:cpp/io/basic ofstream/basic ofstream]]
[[fr:cpp/io/basic ofstream/basic ofstream]]
[[it:cpp/io/basic ofstream/basic ofstream]]
[[ja:cpp/io/basic ofstream/basic ofstream]]
[[pt:cpp/io/basic ofstream/basic ofstream]]
[[ru:cpp/io/basic ofstream/basic ofstream]]
[[zh:cpp/io/basic ofstream/basic ofstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/close</title>
    <ns>0</ns>
    <id>541</id>
    <revision>
      <id>50850</id>
      <parentid>43802</parentid>
      <timestamp>2013-06-01T03:41:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="339">{{include page|cpp/io/basic_fstream/close|basic_ofstream}}

[[de:cpp/io/basic ofstream/close]]
[[es:cpp/io/basic ofstream/close]]
[[fr:cpp/io/basic ofstream/close]]
[[it:cpp/io/basic ofstream/close]]
[[ja:cpp/io/basic ofstream/close]]
[[pt:cpp/io/basic ofstream/close]]
[[ru:cpp/io/basic ofstream/close]]
[[zh:cpp/io/basic ofstream/close]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/is open</title>
    <ns>0</ns>
    <id>542</id>
    <revision>
      <id>50851</id>
      <parentid>43795</parentid>
      <timestamp>2013-06-01T03:41:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="357">{{include page|cpp/io/basic_fstream/is_open|basic_ofstream}}

[[de:cpp/io/basic ofstream/is open]]
[[es:cpp/io/basic ofstream/is open]]
[[fr:cpp/io/basic ofstream/is open]]
[[it:cpp/io/basic ofstream/is open]]
[[ja:cpp/io/basic ofstream/is open]]
[[pt:cpp/io/basic ofstream/is open]]
[[ru:cpp/io/basic ofstream/is open]]
[[zh:cpp/io/basic ofstream/is open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/open</title>
    <ns>0</ns>
    <id>543</id>
    <revision>
      <id>50852</id>
      <parentid>43789</parentid>
      <timestamp>2013-06-01T03:41:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/io/basic_fstream/open|basic_ofstream}}

[[de:cpp/io/basic ofstream/open]]
[[es:cpp/io/basic ofstream/open]]
[[fr:cpp/io/basic ofstream/open]]
[[it:cpp/io/basic ofstream/open]]
[[ja:cpp/io/basic ofstream/open]]
[[pt:cpp/io/basic ofstream/open]]
[[ru:cpp/io/basic ofstream/open]]
[[zh:cpp/io/basic ofstream/open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/operator=</title>
    <ns>0</ns>
    <id>544</id>
    <revision>
      <id>72275</id>
      <parentid>43783</parentid>
      <timestamp>2014-08-02T09:10:31Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>use {{include page}}</comment>
      <text xml:space="preserve" bytes="379">{{include page|cpp/io/basic_fstream/operator{{=}}|basic_ofstream}}

[[de:cpp/io/basic ofstream/operator=]]
[[es:cpp/io/basic ofstream/operator=]]
[[fr:cpp/io/basic ofstream/operator=]]
[[it:cpp/io/basic ofstream/operator=]]
[[ja:cpp/io/basic ofstream/operator=]]
[[pt:cpp/io/basic ofstream/operator=]]
[[ru:cpp/io/basic ofstream/operator=]]
[[zh:cpp/io/basic ofstream/operator=]]</text>
      <sha1>gzmfs4ev027o7vdi6uam0gidw1sx2qo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/rdbuf</title>
    <ns>0</ns>
    <id>545</id>
    <revision>
      <id>50853</id>
      <parentid>43777</parentid>
      <timestamp>2013-06-01T03:41:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="339">{{include page|cpp/io/basic_fstream/rdbuf|basic_ofstream}}

[[de:cpp/io/basic ofstream/rdbuf]]
[[es:cpp/io/basic ofstream/rdbuf]]
[[fr:cpp/io/basic ofstream/rdbuf]]
[[it:cpp/io/basic ofstream/rdbuf]]
[[ja:cpp/io/basic ofstream/rdbuf]]
[[pt:cpp/io/basic ofstream/rdbuf]]
[[ru:cpp/io/basic ofstream/rdbuf]]
[[zh:cpp/io/basic ofstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/swap</title>
    <ns>0</ns>
    <id>546</id>
    <revision>
      <id>50854</id>
      <parentid>43772</parentid>
      <timestamp>2013-06-01T03:41:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="330">{{include page|cpp/io/basic_fstream/swap|basic_ofstream}}

[[de:cpp/io/basic ofstream/swap]]
[[es:cpp/io/basic ofstream/swap]]
[[fr:cpp/io/basic ofstream/swap]]
[[it:cpp/io/basic ofstream/swap]]
[[ja:cpp/io/basic ofstream/swap]]
[[pt:cpp/io/basic ofstream/swap]]
[[ru:cpp/io/basic ofstream/swap]]
[[zh:cpp/io/basic ofstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ofstream/swap2</title>
    <ns>0</ns>
    <id>5490</id>
    <revision>
      <id>50855</id>
      <parentid>43765</parentid>
      <timestamp>2013-06-01T03:42:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="339">{{include page|cpp/io/basic_fstream/swap2|basic_ofstream}}

[[de:cpp/io/basic ofstream/swap2]]
[[es:cpp/io/basic ofstream/swap2]]
[[fr:cpp/io/basic ofstream/swap2]]
[[it:cpp/io/basic ofstream/swap2]]
[[ja:cpp/io/basic ofstream/swap2]]
[[pt:cpp/io/basic ofstream/swap2]]
[[ru:cpp/io/basic ofstream/swap2]]
[[zh:cpp/io/basic ofstream/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream</title>
    <ns>0</ns>
    <id>547</id>
    <revision>
      <id>57665</id>
      <parentid>49674</parentid>
      <timestamp>2013-06-01T05:58:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2657">{{cpp/title|basic_ostream}}
{{cpp/io/basic_ostream/navbar}}
{{ddcl | header=ostream |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt;
&gt; class basic_ostream : virtual public std::basic_ios&lt;CharT, Traits&gt;
}}

The class template {{tt|basic_ostream}} provides support for high level output operations on character streams. The supported operations include formatted output (e.g. integer values) and unformatted output (e.g. raw characters and character arrays). This functionality is implemented in terms of the interface provided by the {{tt|basic_streambuf}} class, accessed through the {{tt|basic_ios}} base class. In typical implementations, {{tt|basic_ostream}} has no non-inherited data members.

{{inheritance diagram/std-basic_ostream}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | ostream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|ostream}} | {{c|basic_ostream&lt;char&gt;}}}}
{{dsc | {{tt|wostream}} | {{c|basic_ostream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Global objects===
Six global basic_ostream objects are provided by the standard library.

{{dsc begin}}
{{dsc header | iostream}}
{{dsc inc | cpp/io/dsc cout}}
{{dsc inc | cpp/io/dsc cerr}}
{{dsc inc | cpp/io/dsc clog}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc constructor}}
{{dsc inc | cpp/io/basic_ostream/dsc destructor}}
{{dsc inc | cpp/io/basic_ostream/dsc operator{{=}}}}

{{dsc h2 | Formatted output }}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt}}

{{dsc h2 | Unformatted output }}
{{dsc inc | cpp/io/basic_ostream/dsc put}}
{{dsc inc | cpp/io/basic_ostream/dsc write}}

{{dsc h2 | Positioning }}
{{dsc inc | cpp/io/basic_ostream/dsc tellp}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp}}

{{dsc h2 | Miscellaneous }}
{{dsc inc | cpp/io/basic_ostream/dsc flush}}
{{dsc inc | cpp/io/basic_ostream/dsc swap}}
{{dsc end}}

===Member classes===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc sentry}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt2}}
{{dsc end}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/basic ostream]]
[[es:cpp/io/basic ostream]]
[[fr:cpp/io/basic ostream]]
[[it:cpp/io/basic ostream]]
[[ja:cpp/io/basic ostream]]
[[pt:cpp/io/basic ostream]]
[[ru:cpp/io/basic ostream]]
[[zh:cpp/io/basic ostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/basic ostream</title>
    <ns>0</ns>
    <id>4283</id>
    <revision>
      <id>65102</id>
      <parentid>62736</parentid>
      <timestamp>2013-08-30T16:07:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt example</comment>
      <text xml:space="preserve" bytes="2016">{{cpp/io/basic_ostream/title | basic_ostream}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
explicit basic_ostream( std::basic_streambuf&lt;CharT, Traits&gt;* sb );
}}
{{dcl | num=2 | since=c++11 |1=
protected:
basic_ostream( const basic_ostream&amp; rhs ) = delete;
}}
{{dcl | num=3 | since=c++11 |1=
protected:
basic_ostream( basic_ostream&amp;&amp; rhs );
}}
{{dcl end}}

1) Constructs the {{tt|basic_ostream}} object, assigning initial values to the base class by calling {{c|basic_ios::init(sb)}}.

2) The copy constructor is protected, and is deleted. Output streams are not copyable.

3) The move constructor uses {{tt|basic_ios&lt;CharT, Traits&gt;::move(rhs)}} to move all basic_ios members, except for the {{tt|rdbuf()}}, from {{tt|rhs}} into {{tt|*this}}. This move constructor is protected: it is called by the move constructors of movable output stream classes {{lc|std::basic_ofstream}} and {{lc|std::basic_ostringstream}}, which know how to correctly move the associated streambuffer.

===Parameters===
{{par begin}}
{{par | sb | streambuffer to use as output sequence}}
{{par | rhs | basic_ostream to initialize from}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;utility&gt;
#include &lt;iostream&gt;

int main()
{
    // ERROR: copy ctor is deleted
//  std::ostream myout(std::cout);

    // OK: shares buffer with cout
    std::ostream myout(std::cout.rdbuf());

    // ERROR: move constructor is protected
//  std::ostream s2(std::move(std::ostringstream() &lt;&lt; 7.1));    

    // OK: move ctor called through the derived class
    std::ostringstream s2(std::move(std::ostringstream() &lt;&lt; 7.1)); 
    myout &lt;&lt; s2.str() &lt;&lt; '\n';
}
| output=
7.1
}}

[[de:cpp/io/basic ostream/basic ostream]]
[[es:cpp/io/basic ostream/basic ostream]]
[[fr:cpp/io/basic ostream/basic ostream]]
[[it:cpp/io/basic ostream/basic ostream]]
[[ja:cpp/io/basic ostream/basic ostream]]
[[pt:cpp/io/basic ostream/basic ostream]]
[[ru:cpp/io/basic ostream/basic ostream]]
[[zh:cpp/io/basic ostream/basic ostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/flush</title>
    <ns>0</ns>
    <id>548</id>
    <revision>
      <id>66233</id>
      <parentid>57668</parentid>
      <timestamp>2013-11-10T00:31:10Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1621">{{cpp/io/basic_ostream/title | flush}}
{{cpp/io/basic_ostream/navbar}}
{{ddcl |
basic_ostream&amp; flush();
}}

Writes uncommitted changes to the underlying output sequence. 

If rdbuf() is a null pointer, does nothing

Otherwise, behaves as an {{concept|UnformattedOutputFunction}} {{mark since c++11}}. After constructing and checking the sentry object, calls {{c|rdbuf()-&gt;pubsync()}}. If the call returns {{c|-1}}, calls {{c|setstate(badbit)}}.

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
May throw {{lc|std::ios_base::failure}} if {{c|1=exceptions()&amp;badbit!=0}}.

===Example===
{{example
 | code=
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;chrono&gt;
void f()
{
    std::cout &lt;&lt; &quot;Output from thread...&quot;;
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::cout &lt;&lt; &quot;...thread calls flush()\n&quot;;
    std::cout.flush();
}

int main()
{
    std::thread t1(f);
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::clog &lt;&lt; &quot;Output from main\n&quot;;
    t1.join();
}
 | output=
Output from main
Output from thread.....thread calls flush()
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc sync | mem=std::basic_istream}}
{{dsc tfun | cpp/io/manip/flush | flushes the output stream}}
{{dsc tfun | cpp/io/manip/endl | outputs {{c|'\n'}} and flushes the output stream}}
{{dsc end}}

[[de:cpp/io/basic ostream/flush]]
[[es:cpp/io/basic ostream/flush]]
[[fr:cpp/io/basic ostream/flush]]
[[it:cpp/io/basic ostream/flush]]
[[ja:cpp/io/basic ostream/flush]]
[[pt:cpp/io/basic ostream/flush]]
[[ru:cpp/io/basic ostream/flush]]
[[zh:cpp/io/basic ostream/flush]]</text>
      <sha1>p3albe1hhu8g5zwdhvsnu2xp4oueykl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/operator ltlt</title>
    <ns>0</ns>
    <id>549</id>
    <revision>
      <id>89222</id>
      <parentid>89221</parentid>
      <timestamp>2017-01-10T19:55:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Example */ +note</comment>
      <text xml:space="preserve" bytes="6268">{{cpp/io/basic_ostream/title | operator&lt;&lt;}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_ostream&amp; operator&lt;&lt;( short value );
basic_ostream&amp; operator&lt;&lt;( unsigned short value );
}}
{{dcl | num=2 |
basic_ostream&amp; operator&lt;&lt;( int value );
basic_ostream&amp; operator&lt;&lt;( unsigned int value );
}}
{{dcl | num=3 |
basic_ostream&amp; operator&lt;&lt;( long value );
basic_ostream&amp; operator&lt;&lt;( unsigned long value );
}}
{{dcl | num=4 | since=c++11 |
basic_ostream&amp; operator&lt;&lt;( long long value );
basic_ostream&amp; operator&lt;&lt;( unsigned long long value );
}}
{{dcl | num=5 |
basic_ostream&amp; operator&lt;&lt;( float value );
basic_ostream&amp; operator&lt;&lt;( double value );
basic_ostream&amp; operator&lt;&lt;( long double value );
}}
{{dcl | num=6 | 
basic_ostream&amp; operator&lt;&lt;( bool value );
}}
{{dcl | num=7 |
basic_ostream&amp; operator&lt;&lt;( const void* value );
}}
{{dcl | num=8 | since=c++17 |
basic_ostream&amp; operator&lt;&lt;( std::nullptr_t );
}}
{{dcl | num=9 |
basic_ostream&amp; operator&lt;&lt;( std::basic_streambuf&lt;CharT, Traits&gt;* sb);
}}
{{dcl | num=10 |
basic_ostream&amp; operator&lt;&lt;(
    std::ios_base&amp; (*func)(std::ios_base&amp;) );
}}
{{dcl | num=11 |
basic_ostream&amp; operator&lt;&lt;(
    std::basic_ios&lt;CharT,Traits&gt;&amp; (*func)(std::basic_ios&lt;CharT,Traits&gt;&amp;) );
}}
{{dcl | num=12 |
basic_ostream&amp; operator&lt;&lt;(
    std::basic_ostream&lt;CharT,Traits&gt;&amp; (*func)(std::basic_ostream&lt;CharT,Traits&gt;&amp;) );
}}
{{dcl end}}

Inserts data into the stream. 

@1-2@ Behaves as a {{concept|FormattedOutputFunction}}. After constructing and checking the sentry object, if {{tt|value}} is {{c|short}} or {{c|int}}, then casts it to {{c|unsigned short}} or {{c|unsigned int}} if {{c|ios_base::flags() &amp; ios_base::basefield}} is {{c|ios_base::oct}} or {{c|ios_base::hex}}. After that, casts to {{c|long}} in any case and outputs as in {{v|3}}. If {{tt|value}} is {{c|unsigned short}} or {{c|unsigned int}}, casts to {{c|unsigned long}} and outputs as in {{v|3}}.

@3-7@ Behaves as a {{concept|FormattedOutputFunction}}. After constructing and checking the sentry object, inserts an integer, floating point, boolean or generic pointer value by calling {{ltt|cpp/locale/num_put/put|num_put::put()}}. If the end of file condition was encountered during output ({{c|1=put().failed() == true}}), sets {{c|ios::badbit}}.

@8@ Outputs an implementation-defined string as if by {{tt|*this &lt;&lt; s}}, where {{tt|s}} is a null-terminated character type string.

@9@ Behaves as an {{concept|UnformattedOutputFunction}}. After constructing and checking the sentry object, checks if {{tt|sb}} is a null pointer. If it is, executes {{c|setstate(badbit)}} and exits. Otherwise, extracts characters from the input sequence controlled by {{tt|sb}} and inserts them into {{c|*this}} until one of the following conditions are met:
:* end-of-file occurs on the input sequence;
:* inserting in the output sequence fails (in which case the character to be inserted is not extracted);
:* an exception occurs (in which case the exception is caught).
If no characters were inserted, executes {{c|setstate(failbit)}}. If an exception was thrown while extracting, sets {{c|failbit}} and, if {{tt|failbit}} is set in {{c|exceptions()}}, rethrows the exception.

@10-12@ Calls {{c|func(*this);}}. These overloads are used to implement output I/O manipulators such as {{lc|std::endl}}.

===Parameters===
{{par begin}}
{{par | value | integer, floating-point, boolean, or pointer value to insert}}
{{par | func | function to call }}
{{par | sb | pointer to the streambuffer to read the data from}}
{{par end}}

===Return value===
@1-11@ {{c|*this}}
@12@ {{c|func(*this)}}

===Notes===
There are no overload for pointers to non-static member, pointers to volatile, or function pointers (other than the ones with signatures accepted by the {{v|10-12}} overloads). Attempting to output such objects invokes implicit conversion to {{c|bool}}, and, for any non-null pointer value, the value {{c|1}} is printed (unless {{c|boolalpha}} was set).

Character and character string arguments (e.g., of type {{c|char}} or {{c|const char*}}) are handled by the [[cpp/io/basic_ostream/operator_ltlt2|non-member overloads]] of {{tt|operator&lt;&lt;}}. Attempting to output a character using the member function call syntax (e.g., {{c|std::cout.operator&lt;&lt;('c');}}) will call one of overloads {{v|2-4}} and output the numerical value. Attempting to output a character string using the member function call syntax will call overload {{v|7}} and print the pointer value instead.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;sstream&gt;
int main()
{
    std::istringstream input(&quot; \&quot;Some text.\&quot; &quot;);
    volatile int n = 42;
    double f = 3.14;
    bool b = true;
    std::cout &lt;&lt; n   // int overload
              &lt;&lt; ' ' // non-member overload
              &lt;&lt; std::boolalpha &lt;&lt; b // bool overload
              &lt;&lt; &quot; &quot; // non-member overload
              &lt;&lt; std::fixed &lt;&lt; f // double overload
              &lt;&lt; input.rdbuf() // streambuf overload
              &lt;&lt; &amp;n // bool overload: volatile int* doesn't convert to const void*
              &lt;&lt; std::endl; // function overload
}
 | output=
42 true 3.140000 &quot;Some text.&quot; true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt2}}
{{dsc tfun | cpp/string/basic_string/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs stream I/O of strings }}
{{dsc fun | cpp/utility/bitset/operator_ltltgtgt2 | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs stream input and output of bitsets}}
{{dsc tfun | cpp/numeric/complex/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | serializes and deserializes a complex number }}
{{dsc inc | cpp/numeric/random/engine/dsc operator_ltltgtgt |linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | uniform_int_distribution}}
{{dsc inc | cpp/io/basic_ostream/dsc put}}
{{dsc inc | cpp/io/basic_ostream/dsc write}}
{{dsc inc | cpp/utility/dsc to_chars}} 
{{dsc end}}

[[de:cpp/io/basic ostream/operator ltlt]]
[[es:cpp/io/basic ostream/operator ltlt]]
[[fr:cpp/io/basic ostream/operator ltlt]]
[[it:cpp/io/basic ostream/operator ltlt]]
[[ja:cpp/io/basic ostream/operator ltlt]]
[[pt:cpp/io/basic ostream/operator ltlt]]
[[ru:cpp/io/basic ostream/operator ltlt]]
[[zh:cpp/io/basic ostream/operator ltlt]]</text>
      <sha1>4jjczn8niyq791j4ug58nerp1uxfyae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/operator ltlt2</title>
    <ns>0</ns>
    <id>3765</id>
    <revision>
      <id>88680</id>
      <parentid>79462</parentid>
      <timestamp>2016-12-06T08:58:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="5584">{{title|operator&lt;&lt;{{small|(std::basic_ostream)}}}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | 
template&lt; class CharT, class Traits&gt;
basic_ostream&lt;CharT,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;CharT,Traits&gt;&amp; os,
                                         CharT ch );
}}
{{dcl |
template&lt; class CharT, class Traits&gt;
basic_ostream&lt;CharT,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;CharT,Traits&gt;&amp; os,
                                         char ch );
}}
{{dcl |
template&lt; class Traits &gt;
basic_ostream&lt;char,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;char,Traits&gt;&amp; os,
                                        char ch );
}}
{{dcl |
template&lt; class Traits &gt;
basic_ostream&lt;char,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;char,Traits&gt;&amp; os,
                                        signed char ch );
}}
{{dcl |
template&lt; class Traits &gt;
basic_ostream&lt;char,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;char,Traits&gt;&amp; os,
                                        unsigned char ch );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl |
template&lt; class CharT, class Traits &gt;
basic_ostream&lt;CharT,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;CharT,Traits&gt;&amp; os, 
                                         const CharT* s );
}}
{{dcl |
template&lt; class CharT, class Traits &gt;
basic_ostream&lt;CharT,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;CharT,Traits&gt;&amp; os, 
                                         const char* s );
}}
{{dcl |
template&lt; class Traits &gt;
basic_ostream&lt;char,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;char,Traits&gt;&amp; os,  
                                        const char* s );
}}
{{dcl |
template&lt; class Traits &gt;
basic_ostream&lt;char,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;char,Traits&gt;&amp; os, 
                                        const signed char* s );
}}
{{dcl |
template&lt; class Traits &gt;
basic_ostream&lt;char,Traits&gt;&amp; operator&lt;&lt;( basic_ostream&lt;char,Traits&gt;&amp; os, 
                                        const unsigned char* s );
}}
{{dcl rev end}}
{{dcl | num=3 | since=c++11 |
template&lt; class CharT, class Traits, class T &gt;
basic_ostream&lt; CharT, Traits &gt;&amp; operator&lt;&lt;( basic_ostream&lt;CharT,Traits&gt;&amp;&amp; os, 
                                            const T&amp; value );
}}
{{dcl end}}

Inserts a character or a character string.

@1@ Behaves as an {{concept|FormattedOutputFunction}}. After constructing and checking the sentry object, inserts the character {{tt|ch}}. If the type of the character is not {{tt|CharT}}, it is first converted with {{c|os.widen(ch)}}. Padding is determined as follows: if {{tt|os.width()&gt;1}}, then {{tt|os.width()-1}} copies of {{tt|os.fill()}} are added  to the output character to form the output character sequence.
If {{c|(out.flags()&amp;std::ios_base::adjustfield) {{==}} std::ios_base::left}}, the fill characters are placed after the output character, otherwise before. After insertion, {{c|os.width(0)}} is called to cancel the effects of {{lc|std::setw}}, if any.

@2@ Behaves as an {{concept|FormattedOutputFunction}}. After constructing and checking the sentry object, inserts successive characters from the character array whose first element is pointed to by {{tt|s}}.
* for the first and third overloads (where {{tt|CharT}} matches the type of {{tt|ch}}), exactly {{tt|traits::length(s)}} characters are inserted.
* for the second overload, exactly {{c|std::char_traits&lt;char&gt;::length(s)}} characters are inserted.
* for the last two overloads, exactly {{c|traits::length(reinterpret_cast&lt;const char*&gt;(s))}} are inserted. 
Before insertion, first, all characters are widened using {{c|os.widen()}}, then padding is determined as follows: if the number of characters to insert is less than {{tt|os.width()}}, then enough copies of {{tt|os.fill()}} are added to the character sequence to make its length equal {{tt|os.width()}}. If {{c|(out.flags()&amp;std::ios_base::adjustfield) {{==}} std::ios_base::left}}, the fill characters are added at the end of the output sequence, otherwise they are added before the output sequence.
After insertion, {{c|width(0)}} is called to cancel the effects of {{lc|std::setw}}, if any.
The behavior is undefined if {{tt|s}} is a null pointer.
@3@ Calls the appropriate insertion operator, given an rvalue reference to an output stream object (equivalent to {{c|os &lt;&lt; value}}). {{rev inl|since=c++17|This function template does not participate in overload resolution unless the expression {{c|os &lt;&lt; value}} is well-formed.}}

===Parameters===
{{par begin}}
{{par | os | output stream to insert data to}}
{{par | ch | reference to a character to insert}}
{{par | s | pointer to a character string to insert}}
{{par end}}

===Return value===
{{tt|os}}

===Notes===
Overload {{v|3}} in LLVM libc++ implements [http://cplusplus.github.io/LWG/lwg-active.html#1203 LWG#1203] and returns a stream of the same type as the argument, so that code such as {{c|(std::ostringstream() &lt;&lt; 1.2).str()}} compiles.

===Example===
{{example 
| code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;

int main()
{
    std::cout &lt;&lt; &quot;Hello, world&quot; // the const char* overload
              &lt;&lt; '\n';          // the char overload
    std::ofstream(&quot;test.txt&quot;) &lt;&lt; 1.2; // rvalue overload
}
| output=
Hello, world
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt}}
{{dsc inc | cpp/io/basic_ios/dsc widen}}
{{dsc end}}

[[de:cpp/io/basic ostream/operator ltlt2]]
[[es:cpp/io/basic ostream/operator ltlt2]]
[[fr:cpp/io/basic ostream/operator ltlt2]]
[[it:cpp/io/basic ostream/operator ltlt2]]
[[ja:cpp/io/basic ostream/operator ltlt2]]
[[pt:cpp/io/basic ostream/operator ltlt2]]
[[ru:cpp/io/basic ostream/operator ltlt2]]
[[zh:cpp/io/basic ostream/operator ltlt2]]</text>
      <sha1>lzv235f6ct5903vdp4i8gvcwznbj5f0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/operator=</title>
    <ns>0</ns>
    <id>4284</id>
    <revision>
      <id>77477</id>
      <parentid>62737</parentid>
      <timestamp>2015-03-26T14:24:14Z</timestamp>
      <contributor>
        <ip>24.61.226.3</ip>
      </contributor>
      <comment>Fix typo in return type of overload (1)</comment>
      <text xml:space="preserve" bytes="1702">{{cpp/io/basic_ostream/title | operator{{=}}}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
protected:
basic_ostream&amp; operator=( const basic_ostream&amp; rhs ) = delete;
}}
{{dcl | num=2 | since=c++11 | 1=
protected:
basic_ostream&amp; operator=( basic_ostream&amp;&amp; rhs );
}}
{{dcl end}}

1) The copy assignment operator is protected, and is deleted. Output streams are not CopyAssignable.

2) The move assignment operator exchanges all data members of the base class, except for {{tt|rdbuf()}}, with {{tt|rhs}}, as if by calling {{c|swap(*rhs)}}. This move assignment operator is protected: it is only called by the move assignment operators of the derived movable output stream classes {{lc|std::basic_ofstream}} and {{lc|std::basic_ostringstream}}, which know how to correctly move-assign the associated streambuffers.

===Parameters===
{{par begin}}
{{par | rhs | the basic_ostream object from which to assign to {{c|*this}}}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;utility&gt;
#include &lt;iostream&gt;
int main()
{
    std::ostringstream s;
//  std::cout = s;                             // ERROR: copy assignment operator is deleted
//  std::cout = std::move(s);                  // ERROR: move assignment operator is protected
    s = std::move(std::ostringstream() &lt;&lt; 42); // OK, moved through derived
    std::cout &lt;&lt; s.str() &lt;&lt; '\n';
}
| output=
42
}}

[[de:cpp/io/basic ostream/operator=]]
[[es:cpp/io/basic ostream/operator=]]
[[fr:cpp/io/basic ostream/operator=]]
[[it:cpp/io/basic ostream/operator=]]
[[ja:cpp/io/basic ostream/operator=]]
[[pt:cpp/io/basic ostream/operator=]]
[[ru:cpp/io/basic ostream/operator=]]
[[zh:cpp/io/basic ostream/operator=]]</text>
      <sha1>5cfi499l7mshco8irg4lu5zufm3mnsg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/put</title>
    <ns>0</ns>
    <id>550</id>
    <revision>
      <id>63130</id>
      <parentid>57673</parentid>
      <timestamp>2013-07-02T00:16:06Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1909">{{cpp/io/basic_ostream/title | put}}
{{cpp/io/basic_ostream/navbar}}
{{ddcl |
basic_ostream&amp; put( char_type ch );
}}

Behaves as an {{concept|UnformattedOutputFunction}}. After constructing and checking the sentry object, writes the character {{tt|ch}} to the output stream.

If the output fails for any reason, sets {{tt|badbit}}.

===Parameters===
{{par begin}}
{{par | ch | character to write}}
{{par end}}

===Return value===
{{c|*this}}

===Notes===
This function is not overloaded for the types {{c|signed char}} or {{c|unsigned char}}, unlike the formatted {{rlp|operator_ltlt2|operator&lt;&lt;}}

Unlike formatted output functions, this function does not set the {{tt|failbit}} if the output fails.

===Example===
{{example
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::cout.put('a'); // normal usage
    std::cout.put('\n');

    std::ofstream s(&quot;/does/not/exist/&quot;);
    s.clear(); // pretend the stream is good
    std::cout &lt;&lt; &quot;Unformatted output: &quot;;
    s.put('c'); // this will set badbit, but not failbit
    std::cout &lt;&lt; &quot; fail=&quot; &lt;&lt; bool(s.rdstate() &amp; s.failbit);
    std::cout &lt;&lt; &quot; bad=&quot; &lt;&lt; s.bad() &lt;&lt; '\n';
    s.clear();
    std::cout &lt;&lt; &quot;Formatted output:   &quot;;
    s &lt;&lt; 'c'; // this will set badbit and failbit
    std::cout &lt;&lt; &quot; fail=&quot; &lt;&lt; bool(s.rdstate() &amp; s.failbit);
    std::cout &lt;&lt; &quot; bad=&quot; &lt;&lt; s.bad() &lt;&lt; '\n';
}
 | output=
a
Unformatted output:  fail=0 bad=1
Formatted output:    fail=1 bad=1 &lt;!-- note: few compilers implement this correctly. Works in CLang++ --&gt;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt2}}
{{dsc inc | cpp/io/basic_ostream/dsc write}}
{{dsc end}}

[[de:cpp/io/basic ostream/put]]
[[es:cpp/io/basic ostream/put]]
[[fr:cpp/io/basic ostream/put]]
[[it:cpp/io/basic ostream/put]]
[[ja:cpp/io/basic ostream/put]]
[[pt:cpp/io/basic ostream/put]]
[[ru:cpp/io/basic ostream/put]]
[[zh:cpp/io/basic ostream/put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/seekp</title>
    <ns>0</ns>
    <id>551</id>
    <revision>
      <id>68854</id>
      <parentid>66960</parentid>
      <timestamp>2014-03-22T19:07:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg 2341</comment>
      <text xml:space="preserve" bytes="2624">{{cpp/io/basic_ostream/title | seekp}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl | num=1| 1=
basic_ostream&amp; seekp( pos_type pos );
}}
{{dcl | num=2| 1=
basic_ostream&amp; seekp( off_type off, std::ios_base::seekdir dir);
}}
{{dcl end}}

Sets the output position indicator of the current associated {{tt|streambuf}} object. 

{{rev begin}}
{{rev | since=c++11 |
Behaves as {{concept|UnformattedOutputFunction}} (except without actually performing output). After constructing and checking the sentry object, 
}}
{{rev end}}

@1@ sets the output position indicator to absolute (relative to the beginning of the file) value {{tt|pos}} by calling {{c|rdbuf()-&gt;pubseekpos(pos, std::ios_base::out)}}. If the call returns {{c|(pos_type)-1}}, executes {{c|setstate(failbit)}}.
@2@ sets the output position indicator to offset {{tt|off}} relative to {{tt|dir}} by calling {{c|rdbuf()-&gt;pubseekoff(off, dir, std::ios_base::out)}}. {{rev begin}}
{{rev|until=c++14|Does not report errors.}}
{{rev|since=c++14|If the call returns {{c|(pos_type)-1}}, executes {{c|setstate(failbit)}}.}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | pos | absolute position to set the output position indicator to.}}
{{par | off | relative position to set the output position indicator to.}}
{{par | dir | defines base position to apply the relative offset to. It can be one of the following constants:
{{cpp/io/ios_base/seekdir consts}} }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ May throw {{lc|std::ios_base::failure}} in case of failure, if {{c|1=exceptions() &amp; failbit != 0}}.
@2@{{rev begin}}
{{rev|until=c++14| Does not throw unless {{c|rdbuf()-&gt;pubseekoff()}} throws}}
{{rev|since=c++14| May throw {{lc|std::ios_base::failure}} in case of failure, if {{c|1=exceptions() &amp; failbit != 0}}.}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::ostringstream os(&quot;hello, world&quot;);
    os.seekp(7);
    os &lt;&lt; 'W';
    os.seekp(0, std::ios_base::end);
    os &lt;&lt; '!';
    os.seekp(0);
    os &lt;&lt; 'H';
    std::cout &lt;&lt; os.str() &lt;&lt; '\n';
}
 | output=
Hello, World!
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc tellp}}
{{dsc inc | cpp/io/basic_istream/dsc tellg | mem=std::basic_istream}}
{{dsc inc | cpp/io/basic_istream/dsc seekg | mem=std::basic_istream}}
{{dsc end}}

[[de:cpp/io/basic ostream/seekp]]
[[es:cpp/io/basic ostream/seekp]]
[[fr:cpp/io/basic ostream/seekp]]
[[it:cpp/io/basic ostream/seekp]]
[[ja:cpp/io/basic ostream/seekp]]
[[pt:cpp/io/basic ostream/seekp]]
[[ru:cpp/io/basic ostream/seekp]]
[[zh:cpp/io/basic ostream/seekp]]</text>
      <sha1>nod5a21x410mcv790lw81vhe7wdmk9w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/sentry</title>
    <ns>0</ns>
    <id>552</id>
    <revision>
      <id>67409</id>
      <parentid>67406</parentid>
      <timestamp>2014-02-08T01:44:55Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <comment>Fully-qualified std::uncaught_exception()</comment>
      <text xml:space="preserve" bytes="3286">{{cpp/io/basic_ostream/title | sentry}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl |1=
class sentry;
}}
{{dcl end}}

An object of class {{tt|basic_ostream::sentry}} is constructed in local scope at the beginning of each member function of {{lc|std::basic_ostream}} that performs output (both formatted and unformatted). Its constructor prepares the output stream: checks if the stream is already in a failed state, flushes the tie()'d output streams, and performs other implementation-defined tasks if necessary. Implementation-defined cleanup, as well as flushing of the output stream if necessary, is performed in the destructor, so that it is guaranteed to happen if exceptions are thrown during output.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/sentry/dsc constructor}}
{{dsc mem dtor | cpp/io/basic_ostream/sentry | inlinemem=true | finalizes the stream object after formatted output or after exception, if necessary}}
{{dsc mem fun | operator{{=}}| nolink=true | the assignment operator is deleted}}
{{dsc inc | cpp/io/basic_ostream/sentry/dsc operator bool}}
{{dsc end}}

{{member | {{small|std::basic_ostream::sentry::}}sentry | 2=
{{ddcl | 1=
explicit sentry( std::basic_ostream&lt;CharT,Traits&gt;&amp; os );
}}

Prepares the stream for formatted output.

If {{c|os.good()}} is {{c|false}}, returns. Otherwise, if {{c|os.tie()}} is not a null pointer, calls {{c|os.tie()-&gt;flush()}} to synchronize the output sequence with external streams. During preparation, the constructor may call {{c|setstate(failbit)}} (which may throw {{lc|std::ios_base::failure}}).

If after preparation is completed, {{c|is.good() {{==}} true}}, then any subsequent calls to {{c|operator bool}} will return {{c|true}}.

===Parameters===
{{par begin}}
{{par | os | output stream to prepare}}
{{par end}}

===Exceptions===
{{lc|std::ios_base::failure}} if the end of file condition occurs.
}}


{{member | {{small|std::basic_ostream::sentry::}}~sentry | 2=
{{ddcl | 1=
~sentry();
}}
If {{c|(os.flags() &amp; std::ios_base::unitbuf) &amp;&amp; !std::uncaught_exception() &amp;&amp; os.good())}} is {{c|true}}, calls {{c|os.rdbuf()-&gt;pubsync()}}. If that function returns {{c|-1}}, sets {{c|badbit}} in {{c|os.rdstate()}} without propagating an exception.
}}


{{member | {{small|std::basic_ostream::sentry::}}operator bool | 2=
{{ddcl | 1=
explicit operator bool() const;
}}
Checks whether the preparation of the output stream was successful.

===Parameters===
(none)

===Return value===
{{c|true}} if the preparation of the output stream was successful, {{c|false}} otherwise.
}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

struct Foo
{
    char n[6];
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; is, Foo&amp; f)
{
    std::ostream::sentry s(is);
    if (s) {
        is.write(f.n, 5);
    }
    return is;
}

int main()
{
    Foo f = { &quot;abcde&quot; };
    std::cout &lt;&lt; f &lt;&lt; '\n';
}
| output=
abcde
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt}}
{{dsc end}}

[[de:cpp/io/basic ostream/sentry]]
[[es:cpp/io/basic ostream/sentry]]
[[fr:cpp/io/basic ostream/sentry]]
[[it:cpp/io/basic ostream/sentry]]
[[ja:cpp/io/basic ostream/sentry]]
[[pt:cpp/io/basic ostream/sentry]]
[[ru:cpp/io/basic ostream/sentry]]
[[zh:cpp/io/basic ostream/sentry]]</text>
      <sha1>6xucuhyfg4gwmqeerimhbo6el2znnod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/swap</title>
    <ns>0</ns>
    <id>4328</id>
    <revision>
      <id>62739</id>
      <parentid>49683</parentid>
      <timestamp>2013-07-01T23:35:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1310">{{cpp/io/basic_ostream/title | swap}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |1=
protected:
void swap(basic_ostream&amp; rhs);
}}
{{dcl end}}

Calls {{c|basic_ios::swap(rhs)}} to swap all data members of the base class, except for {{c|rdbuf()}}, between {{c|*this}} and {{tt|rhs}}. This swap function is protected: it is called by the swap functions of the swappable output stream classes {{lc|std::basic_ofstream}} and {{lc|std::basic_ostringstream}}, which know how to correctly swap the associated streambuffers.

===Parameters===
{{par begin}}
{{par | rhs | a basic_ostream of the same type to swap with}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
int main()
{
    std::ostringstream s1(&quot;hello&quot;);
    std::ostringstream s2(&quot;bye&quot;);

    s1.swap(s2); // OK, ostringstream has a public swap()
    std::swap(s1, s2); // OK, calls s1.swap(s2)

//  std::cout.swap(s2); // ERROR: swap is a protected member

    std::cout &lt;&lt; s1.str() &lt;&lt; '\n';
}
| output=
hello
}}

[[de:cpp/io/basic ostream/swap]]
[[es:cpp/io/basic ostream/swap]]
[[fr:cpp/io/basic ostream/swap]]
[[it:cpp/io/basic ostream/swap]]
[[ja:cpp/io/basic ostream/swap]]
[[pt:cpp/io/basic ostream/swap]]
[[ru:cpp/io/basic ostream/swap]]
[[zh:cpp/io/basic ostream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/tellp</title>
    <ns>0</ns>
    <id>553</id>
    <revision>
      <id>61962</id>
      <parentid>57680</parentid>
      <timestamp>2013-06-12T15:55:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>rev box, link to concept</comment>
      <text xml:space="preserve" bytes="1534">{{cpp/io/basic_ostream/title | tellp}}
{{cpp/io/basic_ostream/navbar}}
{{ddcl |
pos_type tellp();
}}

Returns the output position indicator of the current associated {{tt|streambuf}} object.

{{rev begin}}
{{rev | since=c++11 |
Behaves as {{concept|UnformattedOutputFunction}} (except without actually performing output). After constructing and checking the sentry object, 
}}
{{rev end}}
If {{c|1=fail()==true}}, returns {{c|pos_type(-1)}}. Otherwise, returns {{c|rdbuf()-&gt;pubseekoff(0, std::ios_base::cur, std::ios_base::out)}}.

===Parameters===
(none)

===Return value===
current output position indicator on success, {{c|pos_type(-1)}} if a failure occurs.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
int main()
{
    std::ostringstream s;
    std::cout &lt;&lt; s.tellp() &lt;&lt; '\n';
    s &lt;&lt; 'h';
    std::cout &lt;&lt; s.tellp() &lt;&lt; '\n';
    s &lt;&lt; &quot;ello, world &quot;;
    std::cout &lt;&lt; s.tellp() &lt;&lt; '\n';
    s &lt;&lt; 3.14 &lt;&lt; '\n';
    std::cout &lt;&lt; s.tellp() &lt;&lt; '\n' &lt;&lt; s.str();
}
 | output=
0
1
13
18
hello, world 3.14
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp}}
{{dsc inc | cpp/io/basic_istream/dsc tellg | mem=std::basic_istream}}
{{dsc inc | cpp/io/basic_istream/dsc seekg | mem=std::basic_istream}}
{{dsc end}}

[[de:cpp/io/basic ostream/tellp]]
[[es:cpp/io/basic ostream/tellp]]
[[fr:cpp/io/basic ostream/tellp]]
[[it:cpp/io/basic ostream/tellp]]
[[ja:cpp/io/basic ostream/tellp]]
[[pt:cpp/io/basic ostream/tellp]]
[[ru:cpp/io/basic ostream/tellp]]
[[zh:cpp/io/basic ostream/tellp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/write</title>
    <ns>0</ns>
    <id>554</id>
    <revision>
      <id>88815</id>
      <parentid>88812</parentid>
      <timestamp>2016-12-14T15:37:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 88812 by [[Special:Contributions/176.158.133.18|176.158.133.18]] ([[User talk:176.158.133.18|talk]]) redundant parens</comment>
      <text xml:space="preserve" bytes="2004">{{cpp/io/basic_ostream/title | write}}
{{cpp/io/basic_ostream/navbar}}
{{ddcl |
basic_ostream&amp; write( const char_type* s, std::streamsize count );
}}

Behaves as an {{concept|UnformattedOutputFunction}}. After constructing and checking the sentry object, outputs the characters from successive locations in the character array whose first element is pointed to by {{tt|s}}. Characters are inserted into the output sequence until one of the following occurs:
* exactly {{tt|count}} characters are inserted
* inserting into the output sequence fails (in which case {{c|setstate(badbit)}} is called)

===Parameters===
{{par begin}}
{{par | s | pointer to the character string to write}}
{{par | count | number of characters to write}}
{{par end}}

===Return value===
{{c|*this}}

===Notes===
This function is not overloaded for the types {{c|signed char}} or {{c|unsigned char}}, unlike the formatted {{rlp|operator_ltlt2|operator&lt;&lt;}}

Also, unlike the formatted output functions, this function does not set the {{tt|failbit}} on failure.

===Exceptions===
If an exception occurs during output and {{c|1=exceptions() &amp; badbit != 0}}, rethrows that exception.

If output fails and {{c|1=exceptions() &amp; badbit != 0}}, throws {{c|ios_base::failure}}.

===Example===
{{example
 | This function may be used to output object representations, i.e. binary output
 | p=true
 | code=
#include &lt;iostream&gt;

int main()
{
    int n = 0x41424344;
    std::cout.write(reinterpret_cast&lt;char*&gt;(&amp;n), sizeof n) &lt;&lt; '\n';

    char c[]=&quot;This is sample text.&quot;;
    std::cout.write(c,4)&lt;&lt;'\n';
}
 | output=
DCBA
This
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt2}}
{{dsc inc | cpp/io/basic_ostream/dsc put}}
{{dsc end}}

[[de:cpp/io/basic ostream/write]]
[[es:cpp/io/basic ostream/write]]
[[fr:cpp/io/basic ostream/write]]
[[it:cpp/io/basic ostream/write]]
[[ja:cpp/io/basic ostream/write]]
[[pt:cpp/io/basic ostream/write]]
[[ru:cpp/io/basic ostream/write]]
[[zh:cpp/io/basic ostream/write]]</text>
      <sha1>e3mnjyq3a8un4h0qogkbbww6unhz5l3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostream/~basic ostream</title>
    <ns>0</ns>
    <id>556</id>
    <revision>
      <id>75917</id>
      <parentid>49686</parentid>
      <timestamp>2015-02-04T22:21:39Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1197">{{cpp/io/basic_ostream/title | ~basic_ostream}}
{{cpp/io/basic_ostream/navbar}}
{{ddcl | 
virtual ~basic_ostream();
}}

Destroys the {{tt|basic_ostream}} object. This destructor does not perform any operation on the underlying streambuffer ({{tt|rdbuf()}}): the destructors of the derived output streams such as {{lc|std::basic_ofstream}} and {{lc|std::basic_ostringstream}} are responsible for calling the destructors of the stream buffers.

===Example===
{{example
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
void add_words(std::streambuf* p)
{
    std::ostream buf(p); // buf shares the buffer with s
    buf &lt;&lt; &quot; is the answer&quot;;
} // calls the destructor of buf. p remains unaffected
int main()
{
    std::ostringstream s;
    s &lt;&lt; 42;
    add_words(s.rdbuf());
    s &lt;&lt; &quot;.&quot;;
    std::cout &lt;&lt; s.str() &lt;&lt; '\n';
}
| output = 
42 is the answer.
}}

[[de:cpp/io/basic ostream/~basic ostream]]
[[es:cpp/io/basic ostream/~basic ostream]]
[[fr:cpp/io/basic ostream/~basic ostream]]
[[it:cpp/io/basic ostream/~basic ostream]]
[[ja:cpp/io/basic ostream/~basic ostream]]
[[pt:cpp/io/basic ostream/~basic ostream]]
[[ru:cpp/io/basic ostream/~basic ostream]]
[[zh:cpp/io/basic ostream/~basic ostream]]</text>
      <sha1>eru5oycqz7r80w22tqggwfv5nf0zs28</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostringstream</title>
    <ns>0</ns>
    <id>557</id>
    <revision>
      <id>71794</id>
      <parentid>64354</parentid>
      <timestamp>2014-06-24T03:34:42Z</timestamp>
      <contributor>
        <username>JohnTobey</username>
        <id>3177</id>
      </contributor>
      <minor/>
      <comment>Typo</comment>
      <text xml:space="preserve" bytes="2399">{{cpp/title|basic_ostringstream}}
{{cpp/io/basic_ostringstream/navbar}}
{{dcl begin}}
{{dcl header | sstream}}
{{dcl rev begin}}
{{dcl | until=c++11 | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;
&gt; class basic_ostringstream;
}}
{{dcl | since=c++11 | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;,
    class Allocator = std::allocator&lt;CharT&gt;
&gt; class basic_ostringstream;
}}
{{dcl rev end}}
{{dcl end}}

The class template {{tt|std::basic_ostringstream}} implements output operations on memory ({{lc|std::basic_string}}) based streams. It essentially wraps a raw string device implementation ({{lc|std::basic_stringbuf}}) into a higher-level interface ({{lc|std::basic_ostream}}). The complete interface to unique {{tt|std::basic_stringbuf}} members is provided.

{{inheritance diagram/std-basic_ostringstream}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | sstream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|ostringstream}} | {{c|basic_ostringstream&lt;char&gt;}}}}
{{dsc | {{tt|wostringstream}} | {{c|basic_ostringstream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc inc | cpp/io/dsc allocator_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc constructor | basic_ostringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc operator{{=}} | basic_ostringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap | basic_ostringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc rdbuf | basic_ostringstream}}

{{dsc h2 | String operations }}
{{dsc inc | cpp/io/basic_stringstream/dsc str | basic_ostringstream}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_ostringstream}}
{{dsc end}}

{{cpp/io/basic_ostream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/basic ostringstream]]
[[es:cpp/io/basic ostringstream]]
[[fr:cpp/io/basic ostringstream]]
[[it:cpp/io/basic ostringstream]]
[[ja:cpp/io/basic ostringstream]]
[[pt:cpp/io/basic ostringstream]]
[[ru:cpp/io/basic ostringstream]]
[[zh:cpp/io/basic ostringstream]]</text>
      <sha1>ht253d8vh8x51hxjzu7fsq3qbuy2geb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostringstream/basic ostringstream</title>
    <ns>0</ns>
    <id>558</id>
    <revision>
      <id>50856</id>
      <parentid>43668</parentid>
      <timestamp>2013-06-01T03:42:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="507">{{include page|cpp/io/basic_stringstream/constructor|basic_ostringstream}}

[[de:cpp/io/basic ostringstream/basic ostringstream]]
[[es:cpp/io/basic ostringstream/basic ostringstream]]
[[fr:cpp/io/basic ostringstream/basic ostringstream]]
[[it:cpp/io/basic ostringstream/basic ostringstream]]
[[ja:cpp/io/basic ostringstream/basic ostringstream]]
[[pt:cpp/io/basic ostringstream/basic ostringstream]]
[[ru:cpp/io/basic ostringstream/basic ostringstream]]
[[zh:cpp/io/basic ostringstream/basic ostringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostringstream/operator=</title>
    <ns>0</ns>
    <id>559</id>
    <revision>
      <id>43663</id>
      <parentid>1117</parentid>
      <timestamp>2012-11-03T03:26:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="416">{{cpp/io/basic_stringstream/operator{{=}}|basic_ostringstream}}

[[de:cpp/io/basic ostringstream/operator=]]
[[es:cpp/io/basic ostringstream/operator=]]
[[fr:cpp/io/basic ostringstream/operator=]]
[[it:cpp/io/basic ostringstream/operator=]]
[[ja:cpp/io/basic ostringstream/operator=]]
[[pt:cpp/io/basic ostringstream/operator=]]
[[ru:cpp/io/basic ostringstream/operator=]]
[[zh:cpp/io/basic ostringstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostringstream/rdbuf</title>
    <ns>0</ns>
    <id>560</id>
    <revision>
      <id>50857</id>
      <parentid>43657</parentid>
      <timestamp>2013-06-01T03:42:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="389">{{include page|cpp/io/basic_stringstream/rdbuf|basic_ostringstream}}

[[de:cpp/io/basic ostringstream/rdbuf]]
[[es:cpp/io/basic ostringstream/rdbuf]]
[[fr:cpp/io/basic ostringstream/rdbuf]]
[[it:cpp/io/basic ostringstream/rdbuf]]
[[ja:cpp/io/basic ostringstream/rdbuf]]
[[pt:cpp/io/basic ostringstream/rdbuf]]
[[ru:cpp/io/basic ostringstream/rdbuf]]
[[zh:cpp/io/basic ostringstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostringstream/str</title>
    <ns>0</ns>
    <id>561</id>
    <revision>
      <id>50858</id>
      <parentid>43651</parentid>
      <timestamp>2013-06-01T03:42:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="371">{{include page|cpp/io/basic_stringstream/str|basic_ostringstream}}

[[de:cpp/io/basic ostringstream/str]]
[[es:cpp/io/basic ostringstream/str]]
[[fr:cpp/io/basic ostringstream/str]]
[[it:cpp/io/basic ostringstream/str]]
[[ja:cpp/io/basic ostringstream/str]]
[[pt:cpp/io/basic ostringstream/str]]
[[ru:cpp/io/basic ostringstream/str]]
[[zh:cpp/io/basic ostringstream/str]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostringstream/swap</title>
    <ns>0</ns>
    <id>562</id>
    <revision>
      <id>50859</id>
      <parentid>43645</parentid>
      <timestamp>2013-06-01T03:42:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="380">{{include page|cpp/io/basic_stringstream/swap|basic_ostringstream}}

[[de:cpp/io/basic ostringstream/swap]]
[[es:cpp/io/basic ostringstream/swap]]
[[fr:cpp/io/basic ostringstream/swap]]
[[it:cpp/io/basic ostringstream/swap]]
[[ja:cpp/io/basic ostringstream/swap]]
[[pt:cpp/io/basic ostringstream/swap]]
[[ru:cpp/io/basic ostringstream/swap]]
[[zh:cpp/io/basic ostringstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic ostringstream/swap2</title>
    <ns>0</ns>
    <id>5493</id>
    <revision>
      <id>50860</id>
      <parentid>43639</parentid>
      <timestamp>2013-06-01T03:42:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="389">{{include page|cpp/io/basic_stringstream/swap2|basic_ostringstream}}

[[de:cpp/io/basic ostringstream/swap2]]
[[es:cpp/io/basic ostringstream/swap2]]
[[fr:cpp/io/basic ostringstream/swap2]]
[[it:cpp/io/basic ostringstream/swap2]]
[[ja:cpp/io/basic ostringstream/swap2]]
[[pt:cpp/io/basic ostringstream/swap2]]
[[ru:cpp/io/basic ostringstream/swap2]]
[[zh:cpp/io/basic ostringstream/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf</title>
    <ns>0</ns>
    <id>563</id>
    <revision>
      <id>57685</id>
      <parentid>49688</parentid>
      <timestamp>2013-06-01T05:58:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="6343">{{cpp/title|basic_streambuf}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | header=streambuf | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;
&gt; class basic_streambuf;
}}

The class {{tt|basic_streambuf}} controls input and output to a character sequence. It includes and provides access to
@1@ The ''controlled character sequence'', also called the ''buffer'', which may contain ''input sequence'' (also called ''get area'') for buffering the input operations and/or ''output sequence'' (also called ''put area'') for buffering the output operations.
@2@ The ''associated character sequence'', also called ''source'' (for input) or ''sink'' (for output). This may be an entity that is accessed through OS API (file, TCP socket, serial port, other character device), or it may be an object (std::vector, array, string literal), that can be interpreted as a character source or sink.

The I/O stream objects {{lc|std::basic_istream}} and {{lc|std::basic_ostream}}, as well as all objects derived from them ({{lc|std::ofstream}}, {{lc|std::stringstream}}, etc), are implemented entirely in terms of {{lc|std::basic_streambuf}}.

The controlled character sequence is an array of {{tt|CharT}} which, at all times, represents a subsequence, or a &quot;window&quot; into the associated character sequence. Its state is described by three pointers:

@1@ The ''beginning pointer'', always points at the lowest element of the buffer
@2@ The ''next pointer'', points at the element that is the next candidate for reading or writing
@3@ The ''end pointer'', points one past the end of the buffer.

A {{tt|basic_streambuf}} object may support input (in which case the buffer described by the beginning, next, and end pointers is called ''get area''), output (''put area''), or input and output simultaneously. In latter case, six pointers are tracked, which may all point to elements of the same character array or two individual arrays.

If the next pointer is less than the end pointer in the put area, a ''write position'' is available. The next pointer can be dereferenced and assigned to.

If the next pointer is less than the end pointer in the get area, a ''read position'' is available. The next pointer can be dereferenced and read from.

If the next pointer is greater than the beginning pointer in a get area, a ''putback position'' is available, and the next pointer may be decremented, dereferenced, and assigned to, in order to put a character back into the get area.

The character representation and encoding in the controlled sequence may be different from the character representations in the associated sequence, in which case a {{lc|std::codecvt}} locale facet is typically used to perform the conversion. Common examples are UTF-8 (or other multibyte) files accessed through {{lc|std::wfstream}} objects: the controlled sequence consists of {{c|wchar_t}} characters, but the associated sequence consists of bytes.

Typical implementation of the {{tt|std::basic_streambuf}} base class holds only the six {{tt|CharT*}} pointers and a copy of {{lc|std::locale}} as data members. In addition, implementations may keep cached copies of locale facets, which are invalidated whenever {{tt|imbue()}} is called. The concrete buffers such as {{lc|std::basic_filebuf}} or {{lc|std::basic_stringbuf}} are derived from {{tt|std::basic_streambuf}}.

{{image|std-streambuf.svg}}

Two convenience typedefs are provided by the standard library

{{dsc begin}}
{{dsc header | streambuf}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|streambuf}} | {{c|basic_streambuf&lt;char&gt;}}}}
{{dsc | {{tt|wstreambuf}} | {{c|basic_streambuf&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc ~basic_streambuf}}

{{dsc h2 | Locales}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubimbue}}
{{dsc inc | cpp/io/basic_streambuf/dsc getloc}}

{{dsc h2 | Positioning}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsetbuf}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekoff}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekpos}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsync}}

{{dsc h2 | Get area}}
{{dsc inc | cpp/io/basic_streambuf/dsc in_avail}}
{{dsc inc | cpp/io/basic_streambuf/dsc snextc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sbumpc}}
{{dsc inc | cpp/io/basic_streambuf/dsc stossc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetn}}

{{dsc h2 | Put area}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputn}}

{{dsc h2 | Putback}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}

{{dsc h1 | Protected member functions}}
{{dsc inc | cpp/io/basic_streambuf/dsc basic_streambuf}}
{{dsc inc | cpp/io/basic_streambuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/basic_streambuf/dsc swap}}

{{dsc h2 | Locales}}
{{dsc inc | cpp/io/basic_streambuf/dsc imbue}}

{{dsc h2 | Positioning}}
{{dsc inc | cpp/io/basic_streambuf/dsc setbuf}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekpos}}
{{dsc inc | cpp/io/basic_streambuf/dsc sync}}

{{dsc h2 | Get area}}
{{dsc inc | cpp/io/basic_streambuf/dsc showmanyc}}
{{dsc inc | cpp/io/basic_streambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc uflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc xsgetn}}
{{dsc inc | cpp/io/basic_streambuf/dsc gptr}}
{{dsc inc | cpp/io/basic_streambuf/dsc gbump}}
{{dsc inc | cpp/io/basic_streambuf/dsc setg}}

{{dsc h2 | Put area}}
{{dsc inc | cpp/io/basic_streambuf/dsc xsputn}}
{{dsc inc | cpp/io/basic_streambuf/dsc overflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc pptr}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbump}}
{{dsc inc | cpp/io/basic_streambuf/dsc setp}}

{{dsc h2 | Putback}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbackfail}}
{{dsc end}}

[[de:cpp/io/basic streambuf]]
[[es:cpp/io/basic streambuf]]
[[fr:cpp/io/basic streambuf]]
[[it:cpp/io/basic streambuf]]
[[ja:cpp/io/basic streambuf]]
[[pt:cpp/io/basic streambuf]]
[[ru:cpp/io/basic streambuf]]
[[zh:cpp/io/basic streambuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/basic streambuf</title>
    <ns>0</ns>
    <id>9699</id>
    <revision>
      <id>63942</id>
      <parentid>62740</parentid>
      <timestamp>2013-08-01T15:42:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="1679">{{cpp/io/basic_streambuf/title | basic_streambuf}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
protected:
basic_streambuf();
}}
{{dcl | num=2 | since=c++11 | |1=
protected:
basic_streambuf(const basic_streambuf&amp; rhs);
}}
{{dcl end}}

@1@ Constructs the {{tt|basic_streambuf}} object, initializes the six pointer members ({{tt|eback()}}, {{tt|gptr()}}, {{tt|egptr()}}, {{tt|pbase()}}, {{tt|pptr()}}, and {{tt|epptr()}}) to null pointer values, and the locale member to {{c|std::locale()}}, a copy of the global C++ locale at the time of construction.
@2@ Constructs a copy of {{tt|rhs}}, initializing the six pointers and the locale object with the copies of the values held by {{tt|rhs}}. Note that this is a shallow copy: the pointers of the newly-constructed basic_streambuf are pointing into the same character array as the pointers of {{tt|rhs}}.

Both constructors are protected, and are only called by the concrete streambuf classes, such as {{lc|std::basic_filebuf}}, {{lc|std::basic_stringbuf}}, or {{c|std::strstreambuf}}.

===Parameters===
{{par begin}}
{{par | rhs | a streambuf object to copy}}
{{par end}}

===Notes===
Until C++11, it was unspecified whether {{tt|basic_streambuf}} or any of its derived classes is {{concept|CopyConstructible}} ([http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#421 LWG issue 421]), and different C++ library implementations provided different options.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc basic_filebuf}}
{{dsc inc | cpp/io/basic_stringbuf/dsc constructor}}
{{dsc inc | cpp/io/strstreambuf/dsc strstreambuf}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/eback</title>
    <ns>0</ns>
    <id>4894</id>
    <redirect title="cpp/io/basic streambuf/gptr" />
    <revision>
      <id>17633</id>
      <timestamp>2012-01-17T21:17:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic streambuf/gptr]]</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_streambuf/gptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/egptr</title>
    <ns>0</ns>
    <id>4893</id>
    <redirect title="cpp/io/basic streambuf/gptr" />
    <revision>
      <id>17632</id>
      <timestamp>2012-01-17T21:17:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic streambuf/gptr]]</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_streambuf/gptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/epptr</title>
    <ns>0</ns>
    <id>4891</id>
    <redirect title="cpp/io/basic streambuf/pptr" />
    <revision>
      <id>17630</id>
      <timestamp>2012-01-17T21:16:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>let's have a single page for these functions</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_streambuf/pptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/gbump</title>
    <ns>0</ns>
    <id>4897</id>
    <revision>
      <id>61081</id>
      <parentid>57689</parentid>
      <timestamp>2013-06-05T10:41:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix link</comment>
      <text xml:space="preserve" bytes="813">{{cpp/io/basic_streambuf/title|gbump}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
void gbump( int count );
}}

Skips {{tt|count}} characters in the get area. This is done by advancing the ''get pointer'' by {{tt|count}} characters. No checks are done for underflow.

===Parameters===
{{par begin}}
{{par | count | number of characters to skip}}
{{par end}}

===Return value===
(none)

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbump}}
{{dsc end}}

[[de:cpp/io/basic streambuf/gbump]]
[[es:cpp/io/basic streambuf/gbump]]
[[fr:cpp/io/basic streambuf/gbump]]
[[it:cpp/io/basic streambuf/gbump]]
[[ja:cpp/io/basic streambuf/gbump]]
[[pt:cpp/io/basic streambuf/gbump]]
[[ru:cpp/io/basic streambuf/gbump]]
[[zh:cpp/io/basic streambuf/gbump]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/getloc</title>
    <ns>0</ns>
    <id>4872</id>
    <revision>
      <id>64235</id>
      <parentid>61071</parentid>
      <timestamp>2013-08-15T15:55:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="880">{{cpp/io/basic_streambuf/title|getloc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl |
std::locale getloc() const;
}}

Returns the associated locale.

The associated locale is the value supplied to {{lc|pubimbue()}} on the last call, or, if that function has not been called, the value of the global locale ({{lc|std::locale}}) at the time of the construction of the streambuf.

===Parameters===
(none)

===Return value===
The associated locale.

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubimbue}}
{{dsc end}}

[[de:cpp/io/basic streambuf/getloc]]
[[es:cpp/io/basic streambuf/getloc]]
[[fr:cpp/io/basic streambuf/getloc]]
[[it:cpp/io/basic streambuf/getloc]]
[[ja:cpp/io/basic streambuf/getloc]]
[[pt:cpp/io/basic streambuf/getloc]]
[[ru:cpp/io/basic streambuf/getloc]]
[[zh:cpp/io/basic streambuf/getloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/gptr</title>
    <ns>0</ns>
    <id>4895</id>
    <revision>
      <id>85990</id>
      <parentid>85988</parentid>
      <timestamp>2016-06-09T20:30:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/to the end/one past the end</comment>
      <text xml:space="preserve" bytes="1318">{{cpp/io/basic_streambuf/title|eback, gptr, egptr}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |
char_type* eback() const;
}}
{{dcl | num=2 |
char_type* gptr() const;
}}
{{dcl | num=3 |
char_type* egptr() const;
}}
{{dcl end}}

Returns pointers defining the get area.

1) Returns the pointer to the beginning of the get area.

2) Returns the pointer to the current character (''get pointer'') in the get area.

3) Returns the pointer one past the end of the get area.

===Parameters===
(none)

===Return value===
1) The pointer to the beginning of the get area.

2) The pointer to the current character (''get pointer'') in the get area.

3) The pointer one past the end of the get area.

===Notes===
While the names &quot;gptr&quot; and &quot;egptr&quot; refer to the get area, the name &quot;eback&quot; refers to the end of the putback area: stepping backwards from gptr, characters can be put back until eback.

===Example===
{{example |
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pptr}}
{{dsc end}}

[[de:cpp/io/basic streambuf/gptr]]
[[es:cpp/io/basic streambuf/gptr]]
[[fr:cpp/io/basic streambuf/gptr]]
[[it:cpp/io/basic streambuf/gptr]]
[[ja:cpp/io/basic streambuf/gptr]]
[[pt:cpp/io/basic streambuf/gptr]]
[[ru:cpp/io/basic streambuf/gptr]]
[[zh:cpp/io/basic streambuf/gptr]]</text>
      <sha1>p7pam8wz6hhvfz5pdn28qf7bi3v6vjk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/imbue</title>
    <ns>0</ns>
    <id>4871</id>
    <redirect title="cpp/io/basic streambuf/pubimbue" />
    <revision>
      <id>17583</id>
      <timestamp>2012-01-17T12:15:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic streambuf/pubimbue]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/io/basic streambuf/pubimbue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/in avail</title>
    <ns>0</ns>
    <id>4878</id>
    <revision>
      <id>64242</id>
      <parentid>57694</parentid>
      <timestamp>2013-08-15T15:59:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1564">{{cpp/io/basic_streambuf/title|in_avail}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
std::streamsize in_avail();
}}

Returns the number of characters available in the get area. If a read position is available, effectively returns {{c|egptr() - gptr()}}, the size of the get area. In this case, the number of bytes returned is the number of bytes that can be extracted from the buffer without calling {{lc|underflow()}}.

If the get area is empty, calls {{lc|showmanyc()}} to determine the number of bytes available in the associated character sequence. In this case, the value returned is the number of bytes that can be extracted from the buffer while it's guaranteed that {{lc|underflow()}} would not return {{tt|Traits::eof}}.

===Parameters===
(none)

===Return value===
The number of characters available for non-blocking read (either the size of the get area or the number of characters ready for reading from the associated character sequence), or {{c|-1}} if no characters are available in the associated sequence as far as {{lc|showmanyc()}} can tell.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc showmanyc}}
{{dsc inc | cpp/io/basic_istream/dsc readsome}}
{{dsc end}}

[[de:cpp/io/basic streambuf/in avail]]
[[es:cpp/io/basic streambuf/in avail]]
[[fr:cpp/io/basic streambuf/in avail]]
[[it:cpp/io/basic streambuf/in avail]]
[[ja:cpp/io/basic streambuf/in avail]]
[[pt:cpp/io/basic streambuf/in avail]]
[[ru:cpp/io/basic streambuf/in avail]]
[[zh:cpp/io/basic streambuf/in avail]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/operator=</title>
    <ns>0</ns>
    <id>12583</id>
    <revision>
      <id>61083</id>
      <timestamp>2013-06-05T10:48:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="444">{{cpp/io/basic_streambuf/title|operator{{=}}}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
basic_streambuf&amp; operator=( const basic_streambuf&amp; other );
}}
{{dcl end}}

Assigns the data members of {{tt|other}} to {{c|*this}}.

===Parameters===
{{par begin}}
{{par | other | stream buffer to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Example===
{{example|
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/overflow</title>
    <ns>0</ns>
    <id>4890</id>
    <revision>
      <id>89017</id>
      <parentid>72224</parentid>
      <timestamp>2016-12-22T04:02:52Z</timestamp>
      <contributor>
        <ip>92.21.56.231</ip>
      </contributor>
      <comment>Correct default argument value from &quot;traits::eof()&quot; to &quot;Traits::eof()&quot;. Note that &quot;Traits&quot; (capitalized) is the name of the member type of std::basic_streambuf corresponding to its second template parameter.</comment>
      <text xml:space="preserve" bytes="3684">{{cpp/io/basic_streambuf/title|overflow}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
virtual int_type overflow( int_type ch = Traits::eof() );
}}

Ensures that there is space at the [[cpp/io/basic_streambuf|put area]] for at least one character by saving some initial subsequence of characters starting at {{lc|pbase()}} to the output sequence and updating the pointers to the put area (if needed). If {{tt|ch}} is not {{c|Traits::eof()}} (i.e. {{c|1=Traits::eq_int_type(ch, Traits::eof()) != true}}), it is either put to the put area or directly saved to the output sequence.

The function may update {{tt|pptr}}, {{tt|epptr}} and {{tt|pbase}} pointers to define the location to write more data. On failure, the function ensures that either {{c|pptr() {{==}} nullptr}} or {{c|pptr() {{==}} epptr}}.

The base class version of the function does nothing. The derived classes may override this function to allow updates to the put area in the case of exhaustion.

===Parameters===
{{par begin}}
{{par | ch | the character to store in the put area}}
{{par end}}

===Return value===
Returns unspecified value not equal to {{c|Traits::eof()}} on success, {{c|Traits::eof()}} on failure.

The base class version of the function returns {{c|Traits::eof()}}.

===Note===
The {{lc|sputc()}} and {{lc|sputn()}} call this function in case of an overflow ({{c|1=pptr() == nullptr}} or {{c|1=pptr() &gt;= epptr()}}).

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;array&gt;

// Buffer for std::ostream implemented by std::array
template&lt;std::size_t SIZE, class CharT = char&gt;
class ArrayedStreamBuffer : public std::basic_streambuf&lt;CharT&gt; {
public:

    using Base = std::basic_streambuf&lt;CharT&gt;;
    using char_type = typename Base::char_type;
    using int_type = typename Base::int_type;

    ArrayedStreamBuffer() : buffer_{} // value-initialize buffer_ to all zeroes
    {
        Base::setp(buffer_.begin(), buffer_.end()); // set std::basic_streambuf
            // put area pointers to work with 'buffer_'
    }

    int_type overflow(int_type ch) 
    {
        std::cout &lt;&lt; &quot;overflow\n&quot;;
        return Base::overflow(ch);
    }

    void print_buffer()
    {
        for (const auto&amp; i: buffer_) {
            if (i == 0) {
                std::cout &lt;&lt; &quot;NULL&quot;;
            } else {
                std::cout &lt;&lt; i;
            }
            std::cout &lt;&lt; &quot; &quot;;
        }
        std::cout &lt;&lt; &quot;\n&quot;;
    }

private:
    std::array&lt;char_type, SIZE&gt; buffer_;
};

int main()
{
    ArrayedStreamBuffer&lt;10&gt; streambuf;
    std::ostream stream(&amp;streambuf);

    stream &lt;&lt; &quot;hello&quot;;
    streambuf.print_buffer();
    if (stream.good()) {
        std::cout &lt;&lt; &quot;stream is good\n&quot;;
    }

    stream &lt;&lt; &quot;world&quot;;
    streambuf.print_buffer();
    if (stream.good()) {
        std::cout &lt;&lt; &quot;stream is good\n&quot;;
    }

    stream &lt;&lt; &quot;!&quot;;
    streambuf.print_buffer();
    if (!stream.good()) {
        std::cout &lt;&lt; &quot;stream is not good\n&quot;;
    }
}
 | output=
h e l l o NULL NULL NULL NULL NULL 
stream is good
h e l l o w o r l d 
stream is good
overflow
h e l l o w o r l d 
stream is not good
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc uflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc overflow}}
{{dsc inc | cpp/io/basic_stringbuf/dsc overflow}}
{{dsc inc | cpp/io/strstreambuf/dsc overflow}}
{{dsc end}}

[[de:cpp/io/basic streambuf/overflow]]
[[es:cpp/io/basic streambuf/overflow]]
[[fr:cpp/io/basic streambuf/overflow]]
[[it:cpp/io/basic streambuf/overflow]]
[[ja:cpp/io/basic streambuf/overflow]]
[[pt:cpp/io/basic streambuf/overflow]]
[[ru:cpp/io/basic streambuf/overflow]]
[[zh:cpp/io/basic streambuf/overflow]]</text>
      <sha1>mve0ya64tij7j8xu0574sbntx9npuj9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pbackfail</title>
    <ns>0</ns>
    <id>9693</id>
    <revision>
      <id>85890</id>
      <parentid>64276</parentid>
      <timestamp>2016-05-31T07:13:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2533">{{cpp/io/basic_streambuf/title | pbackfail}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | 1=
protected:
virtual int_type pbackfail( int_type c = Traits::eof() );
}}
{{dcl end}}

This protected virtual function is called by the public functions {{lc|sungetc()}} and {{lc|sputbackc()}} (which, in turn, are called by {{l2tt|cpp/io/basic_istream/unget}} and {{l2tt|cpp/io/basic_istream/putback}}) when either:
@1@ There is no putback position in the get area ({{tt|pbackfail()}} is called with no arguments). In this situation, the purpose of {{tt|pbackfail()}} is to back up the get area by one character, if the associated character sequence allows this (e.g. a file-backed streambuf may reload the buffer from a file, starting one character earlier). 
@2@ The caller attempts to putback a different character from the one retrieved earlier ({{tt|pbackfail()}} is called with the character that needs to be put back). In this situation, the purpose of {{tt|pbackfail()}} is to place the character {{tt|c}} into the get area at the position just before {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}, and, if possible, to modify the associated character sequence to reflect this change. This may involve backing up the get area as in the first variant.

The default base class version of this function does nothing and returns {{c|Traits::eof()}} in all situations. This function is overridden by the derived classes: {{l2tt|cpp/io/basic_stringbuf/pbackfail}}, {{l2tt|cpp/io/basic_filebuf/pbackfail}}, {{l2tt|cpp/io/strstreambuf/pbackfail}}, and is expected to be overridden by user-defined and third-party library stream classes.

===Parameters===
{{par begin}}
{{par | ch | character to put back or {{c|Traits::eof()}} if only back out is requested}}
{{par end}}

===Return value===
{{c|Traits::eof()}} in case of failure, some other value to indicate success. The base class version always fails.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc pbackfail}}
{{dsc inc | cpp/io/basic_stringbuf/dsc pbackfail}}
{{dsc inc | cpp/io/strstreambuf/dsc pbackfail}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc end}}

[[de:cpp/io/basic streambuf/sputn]]
[[es:cpp/io/basic streambuf/sputn]]
[[fr:cpp/io/basic streambuf/sputn]]
[[it:cpp/io/basic streambuf/sputn]]
[[ja:cpp/io/basic streambuf/sputn]]
[[pt:cpp/io/basic streambuf/sputn]]
[[ru:cpp/io/basic streambuf/sputn]]
[[zh:cpp/io/basic streambuf/sputn]]</text>
      <sha1>czrf05u8arfvncaa9kp3pu3uiw6rzvi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pbase</title>
    <ns>0</ns>
    <id>4892</id>
    <redirect title="cpp/io/basic streambuf/pptr" />
    <revision>
      <id>17634</id>
      <parentid>17631</parentid>
      <timestamp>2012-01-17T21:20:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[cpp/io/basic streambuf/pback]] to [[cpp/io/basic streambuf/pbase]]: typo in title</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_streambuf/pptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pbump</title>
    <ns>0</ns>
    <id>4898</id>
    <revision>
      <id>64245</id>
      <parentid>57699</parentid>
      <timestamp>2013-08-15T16:00:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1740">{{cpp/io/basic_streambuf/title|pbump}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
void pbump( int count );
}}

Repositions the ''put pointer'' ({{lc|pptr()}}) by {{tt|count}} characters, where {{tt|count}} may be positive or negative. No checks are done for moving the pointer outside the put area {{tt|[pbase(), epptr())}}.

If the pointer is advanced and then {{lc|overflow()}} is called to flush the put area to the associated character sequence, the effect is that extra {{tt|count}} characters with undefined values are output.

===Parameters===
{{par begin}}
{{par | count | number to add to the put pointer}}
{{par end}}

===Return value===
(none)

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

struct showput_streambuf : std::filebuf
{
    using std::filebuf::pbump; // expose protected
    std::string showput() const {
        return std::string(pbase(), pptr());
    }
};

int main()
{
    showput_streambuf mybuf;
    mybuf.open(&quot;test.txt&quot;, std::ios_base::out);
    std::ostream str(&amp;mybuf);
    str &lt;&lt; &quot;This is a test&quot; &lt;&lt; std::flush &lt;&lt; &quot;1234&quot;;
    std::cout &lt;&lt; &quot;The put area contains: &quot; &lt;&lt; mybuf.showput() &lt;&lt; '\n';
    mybuf.pbump(10);
    std::cout &lt;&lt; &quot;after pbump(10), it contains &quot; &lt;&lt; mybuf.showput() &lt;&lt; '\n';
}
 | output=
The put area contains: 1234
after pbump(10), it contains 1234 is a test
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc gbump}}
{{dsc end}}

[[de:cpp/io/basic streambuf/pbump]]
[[es:cpp/io/basic streambuf/pbump]]
[[fr:cpp/io/basic streambuf/pbump]]
[[it:cpp/io/basic streambuf/pbump]]
[[ja:cpp/io/basic streambuf/pbump]]
[[pt:cpp/io/basic streambuf/pbump]]
[[ru:cpp/io/basic streambuf/pbump]]
[[zh:cpp/io/basic streambuf/pbump]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pptr</title>
    <ns>0</ns>
    <id>4896</id>
    <revision>
      <id>85989</id>
      <parentid>57702</parentid>
      <timestamp>2016-06-09T20:29:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention that base means begining (josuttis says pbase stands for &quot;put base&quot;), also say &quot;one past the end&quot; for epptr, since that's more correct</comment>
      <text xml:space="preserve" bytes="1128">{{cpp/io/basic_streambuf/title|pbase|pptr|epptr}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |
char_type* pbase() const;
}}
{{dcl | num=2 |
char_type* pptr() const;
}}
{{dcl | num=3 |
char_type* epptr() const;
}}
{{dcl end}}

Returns pointers defining the put area.

1) Returns the pointer to the beginning (&quot;base&quot;) of the put area.

2) Returns the pointer to the current character (''put pointer'') in the put area.

3) Returns the pointer one past the end of the put area.

===Parameters===
(none)

===Return value===
1) The pointer to the beginning of the put area.

2) The pointer to the current character (''put pointer'') in the put area.

3) The pointer one past the end of the put area.

===Example===
{{example |
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc gptr}}
{{dsc end}}

[[de:cpp/io/basic streambuf/pptr]]
[[es:cpp/io/basic streambuf/pptr]]
[[fr:cpp/io/basic streambuf/pptr]]
[[it:cpp/io/basic streambuf/pptr]]
[[ja:cpp/io/basic streambuf/pptr]]
[[pt:cpp/io/basic streambuf/pptr]]
[[ru:cpp/io/basic streambuf/pptr]]
[[zh:cpp/io/basic streambuf/pptr]]</text>
      <sha1>fsq7amjq29ff62m9i1psyzzx2amsuq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pubimbue</title>
    <ns>0</ns>
    <id>4873</id>
    <revision>
      <id>85891</id>
      <parentid>67243</parentid>
      <timestamp>2016-05-31T07:16:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust</comment>
      <text xml:space="preserve" bytes="1230">{{cpp/io/basic_streambuf/title | pubimbue | imbue}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
std::locale pubimbue( const std::locale&amp; loc );
}}
{{dcl | num=2 |1=
protected:
virtual void imbue( const std::locale&amp; loc );
}}
{{dcl end}}

Changes the associated locale.

1) Sets {{tt|loc}} as the associated locale. Calls {{tt|imbue(loc)}} of the most derived class

2) The base class version of this function has no effect. The derived classes may override this function in order to be informed about the changes of the locale. The derived class may cache the locale and member facets between calls to {{tt|imbue()}}.

===Parameters===
{{par begin}}
{{par | loc | locale object to associate}}
{{par end}}

===Return value===
1) Previous associated locale.

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc getloc}}
{{dsc end}}

[[de:cpp/io/basic streambuf/pubimbue]]
[[es:cpp/io/basic streambuf/pubimbue]]
[[fr:cpp/io/basic streambuf/pubimbue]]
[[it:cpp/io/basic streambuf/pubimbue]]
[[ja:cpp/io/basic streambuf/pubimbue]]
[[pt:cpp/io/basic streambuf/pubimbue]]
[[ru:cpp/io/basic streambuf/pubimbue]]
[[zh:cpp/io/basic streambuf/pubimbue]]</text>
      <sha1>c7hbkchbmpzz4hj1it0hn1gfgt2gpla</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pubseekoff</title>
    <ns>0</ns>
    <id>4875</id>
    <revision>
      <id>88055</id>
      <parentid>87808</parentid>
      <timestamp>2016-10-25T13:47:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std:: to autolink seekdir and openmode</comment>
      <text xml:space="preserve" bytes="2200">{{cpp/io/basic_streambuf/title | pubseekoff | seekoff}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
pos_type pubseekoff( off_type off, std::ios_base::seekdir dir,
                     std::ios_base::openmode which = ios_base::in {{!}} ios_base::out );
}}
{{dcl | num=2 |1=
protected:
virtual pos_type seekoff( off_type off, std::ios_base::seekdir dir,
                          std::ios_base::openmode which = ios_base::in {{!}} ios_base::out );
}}
{{dcl end}}

Sets the position indicator of the input and/or output sequence relative to some other position.

1) Calls {{tt|seekoff(off, dir, which)}} of the most derived class

2) The base class version of this function has no effect. The derived classes may override this function to allow relative positioning of the position indicator.

===Parameters===
{{par begin}}
{{par | off | relative position to set the position indicator to.}}
{{par | dir | defines base position to apply the relative offset to. It can be one of the following constants:
{{cpp/io/ios_base/seekdir consts}} }}
{{par | which | defines which of the input and/or output sequences to affect. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Note===
Not all combinations of parameters may be valid, see the derived versions of {{tt|seekoff}} for details.

===Return value===
1) The return value of {{tt|seekoff(off, dir, which)}}

2) The resulting absolute position as defined by the position indicator. The base class version returns {{c|pos_type(off_type(-1))}}.

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekpos}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_stringbuf/dsc seekoff}}
{{dsc inc | cpp/io/strstreambuf/dsc seekoff}}
{{dsc end}}

[[de:cpp/io/basic streambuf/pubseekoff]]
[[es:cpp/io/basic streambuf/pubseekoff]]
[[fr:cpp/io/basic streambuf/pubseekoff]]
[[it:cpp/io/basic streambuf/pubseekoff]]
[[ja:cpp/io/basic streambuf/pubseekoff]]
[[pt:cpp/io/basic streambuf/pubseekoff]]
[[ru:cpp/io/basic streambuf/pubseekoff]]
[[zh:cpp/io/basic streambuf/pubseekoff]]</text>
      <sha1>92peoonud8wu31b6zsw8mokpdvfazua</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pubseekpos</title>
    <ns>0</ns>
    <id>4876</id>
    <revision>
      <id>57707</id>
      <parentid>49700</parentid>
      <timestamp>2013-06-01T05:59:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1707">{{cpp/io/basic_streambuf/title | pubseekpos | seekpos}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
pos_type pubseekpos( pos_type pos,
                     ios_base::openmode which = ios_base::in {{!}} ios_base::out );
}}
{{dcl | num=2 |1=
protected:
virtual pos_type seekpos( pos_type pos,
                          ios_base::openmode which = ios_base::in {{!}} ios_base::out);
}}
{{dcl end}}

Sets the position indicator of the input and/or output sequence to an absolute position.

1) Calls {{tt|seekpos(pos, which)}} of the most derived class

2) The base class version of this function has no effect. The derived classes may override this function to allow absolute positioning of the position indicator.

===Parameters===
{{par begin}}
{{par | pos | absolute position to set the position indicator to.}}
{{par | which | defines which of the input and/or output sequences to affect. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Return value===
1) The return value of {{tt|seekpos(pos, which)}}

2) The resulting absolute position as defined by the position indicator. The base class version returns {{c|pos_type(off_type(-1))}}.

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekoff}}
{{dsc end}}

[[de:cpp/io/basic streambuf/pubseekpos]]
[[es:cpp/io/basic streambuf/pubseekpos]]
[[fr:cpp/io/basic streambuf/pubseekpos]]
[[it:cpp/io/basic streambuf/pubseekpos]]
[[ja:cpp/io/basic streambuf/pubseekpos]]
[[pt:cpp/io/basic streambuf/pubseekpos]]
[[ru:cpp/io/basic streambuf/pubseekpos]]
[[zh:cpp/io/basic streambuf/pubseekpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pubsetbuf</title>
    <ns>0</ns>
    <id>4568</id>
    <revision>
      <id>69876</id>
      <parentid>65333</parentid>
      <timestamp>2014-04-30T13:45:19Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Return value */ correcting</comment>
      <text xml:space="preserve" bytes="1938">{{cpp/io/basic_streambuf/title | pubsetbuf | setbuf}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
basic_streambuf&lt;CharT, Traits&gt;* pubsetbuf( char_type* s, std::streamsize n )
}}
{{dcl | num=2 |1=
protected:
virtual basic_streambuf&lt;CharT, Traits&gt;* setbuf( char_type* s, std::streamsize n )
}}
{{dcl end}}

@1@ Calls {{tt|setbuf(s, n)}} of the most derived class

@2@ The base class version of this function has no effect. The derived classes may override this function to allow removal or replacement of the controlled character sequence (the buffer) with a user-provided array, or for any other implementation-specific purpose.

===Parameters===
{{par begin}}
{{par | s | pointer to the first byte in the user-provided buffer}}
{{par | n | the number of bytes in the user-provided buffer}}
{{par end}}

===Return value===
@1@ The return value of {{tt|setbuf(s, n)}}
@2@ {{c|this}}

===Example===
{{example
 | provide a 10k buffer for reading. On linux, the strace utility may be used to observe the actual number of bytes read
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    int cnt = 0;
    std::ifstream file;
    char buf[10241];

    file.rdbuf()-&gt;pubsetbuf(buf, sizeof buf);

    file.open(&quot;/usr/share/dict/words&quot;);

    for (std::string line; getline(file, line);) {
        cnt++;
    }
    
    std::cout &lt;&lt; cnt &lt;&lt; '\n';
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringbuf/dsc setbuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc setbuf}}
{{dsc inc | cpp/io/strstreambuf/dsc setbuf}}
{{dsc inc | cpp/io/c/dsc setbuf}}
{{dsc end}}

[[de:cpp/io/basic streambuf/pubsetbuf]]
[[es:cpp/io/basic streambuf/pubsetbuf]]
[[fr:cpp/io/basic streambuf/pubsetbuf]]
[[it:cpp/io/basic streambuf/pubsetbuf]]
[[ja:cpp/io/basic streambuf/pubsetbuf]]
[[pt:cpp/io/basic streambuf/pubsetbuf]]
[[ru:cpp/io/basic streambuf/pubsetbuf]]
[[zh:cpp/io/basic streambuf/pubsetbuf]]</text>
      <sha1>4ohve9qjsaurl7aekojob7d9arcs3bj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/pubsync</title>
    <ns>0</ns>
    <id>4877</id>
    <revision>
      <id>57711</id>
      <parentid>49702</parentid>
      <timestamp>2013-06-01T05:59:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1553">{{cpp/io/basic_streambuf/title | pubsync | sync}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
int pubsync();
}}
{{dcl | num=2 |1=
protected:
virtual int sync();
}}
{{dcl end}}

Synchronizes the controlled character sequence (the buffers) with the associated character sequence.

1) Calls {{tt|sync()}} of the most derived class

2) The base class version of this function has no effect. The derived classes may override this function to allow synchronizing the underlying device with the buffers.

For output streams, this typically results in writing the contents of the put area into the associated sequence, i.e. flushing of the output buffer. For input streams, this typically empties the get area and forces a re-read from the associated sequence to pick up recent changes. The default behavior (found, for example, in {{lc|std::basic_stringbuf}}), is to do nothing.

===Parameters===
(none)

===Return value===
1) The return value of {{tt|sync()}}.

2) Returns {{c|0}} on success, {{c|-1}} otherwise. The base class version returns {{c|0}}.

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc sync}}
{{dsc inc | cpp/io/basic_filebuf/dsc sync}}
{{dsc end}}

[[de:cpp/io/basic streambuf/pubsync]]
[[es:cpp/io/basic streambuf/pubsync]]
[[fr:cpp/io/basic streambuf/pubsync]]
[[it:cpp/io/basic streambuf/pubsync]]
[[ja:cpp/io/basic streambuf/pubsync]]
[[pt:cpp/io/basic streambuf/pubsync]]
[[ru:cpp/io/basic streambuf/pubsync]]
[[zh:cpp/io/basic streambuf/pubsync]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sbumpc</title>
    <ns>0</ns>
    <id>4880</id>
    <revision>
      <id>64240</id>
      <parentid>57712</parentid>
      <timestamp>2013-08-15T15:57:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc, fmt</comment>
      <text xml:space="preserve" bytes="963">{{cpp/io/basic_streambuf/title|sbumpc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
int_type sbumpc();
}}

Reads one character and advances the input sequence by one character.

If the input sequence read position is not available, returns {{lc|uflow()}}. Otherwise returns {{c|Traits::to_int_type(*gptr())}}.

===Parameters===
(none)

===Return value===
The value of the character pointed to by the ''get pointer'', or {{c|Traits::eof()}} if the read position is not available.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc snextc}}
{{dsc end}}

[[de:cpp/io/basic streambuf/sbumpc]]
[[es:cpp/io/basic streambuf/sbumpc]]
[[fr:cpp/io/basic streambuf/sbumpc]]
[[it:cpp/io/basic streambuf/sbumpc]]
[[ja:cpp/io/basic streambuf/sbumpc]]
[[pt:cpp/io/basic streambuf/sbumpc]]
[[ru:cpp/io/basic streambuf/sbumpc]]
[[zh:cpp/io/basic streambuf/sbumpc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/seekoff</title>
    <ns>0</ns>
    <id>4870</id>
    <redirect title="cpp/io/basic streambuf/pubseekoff" />
    <revision>
      <id>17582</id>
      <timestamp>2012-01-17T12:15:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/io/basic streambuf/pubseekoff]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/seekpos</title>
    <ns>0</ns>
    <id>4869</id>
    <redirect title="cpp/io/basic streambuf/pubseekpos" />
    <revision>
      <id>17581</id>
      <timestamp>2012-01-17T12:15:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic streambuf/pubseekpos]]</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/io/basic streambuf/pubseekpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/setbuf</title>
    <ns>0</ns>
    <id>4867</id>
    <redirect title="cpp/io/basic streambuf/pubsetbuf" />
    <revision>
      <id>17569</id>
      <timestamp>2012-01-17T12:10:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/io/basic streambuf/setbuf]] to [[cpp/io/basic streambuf/pubsetbuf]]</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/io/basic streambuf/pubsetbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/setg</title>
    <ns>0</ns>
    <id>4899</id>
    <revision>
      <id>57713</id>
      <parentid>49704</parentid>
      <timestamp>2013-06-01T05:59:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1017">{{cpp/io/basic_streambuf/title|setg}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
void setg( char_type* gbeg, char_type* gcurr, char_type* gend );
}}

Sets the values of the pointers defining the get area. Specifically, after the call {{c|1=eback() == gbeg}}, {{c|1=gptr() == gcurr}}, {{c|1=egptr() == gend}}

===Parameters===
{{par begin}}
{{par | gbeg | pointer to the new beginning of the get area}}
{{par | gcurr | pointer to the new current character (''get pointer'') in the get area}}
{{par | gend | pointer to the new end of the get area}}
{{par end}}

===Return value===
(none)

===Example===
{{include| cpp/io/basic_streambuf/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc setp}}
{{dsc end}}

[[de:cpp/io/basic streambuf/setg]]
[[es:cpp/io/basic streambuf/setg]]
[[fr:cpp/io/basic streambuf/setg]]
[[it:cpp/io/basic streambuf/setg]]
[[ja:cpp/io/basic streambuf/setg]]
[[pt:cpp/io/basic streambuf/setg]]
[[ru:cpp/io/basic streambuf/setg]]
[[zh:cpp/io/basic streambuf/setg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/setp</title>
    <ns>0</ns>
    <id>4900</id>
    <revision>
      <id>65387</id>
      <parentid>65174</parentid>
      <timestamp>2013-09-10T21:22:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt example</comment>
      <text xml:space="preserve" bytes="1957">{{cpp/io/basic_streambuf/title|setp}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
void setp( char_type* pbeg, char_type* pend );
}}

Sets the values of the pointers defining the put area. Specifically, after the call {{c|1=pbase() == pbeg}}, {{c|1=pptr() == pbeg}}, {{c|1=epptr() == pend}}

===Parameters===
{{par begin}}
{{par | pbeg | pointer to the new beginning of the put area}}
{{par | pend | pointer to the new end of the put area}}
{{par end}}

===Return value===
(none)

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;array&gt;

// Buffer for std::ostream implemented by std::array
template&lt;std::size_t SIZE, class CharT = char&gt;
class ArrayedStreamBuffer : public std::basic_streambuf&lt;CharT&gt;
{
public:
    using Base = std::basic_streambuf&lt;CharT&gt;;
    using char_type = typename Base::char_type;

    ArrayedStreamBuffer() : buffer_{} // value-initialize buffer_ to all zeroes
    {
        Base::setp(buffer_.begin(), buffer_.end()); // set std::basic_streambuf
            // put area pointers to work with 'buffer_'
    }

    void print_buffer()
    {
        for (const auto&amp; i: buffer_) {
            if (i == 0) {
                std::cout &lt;&lt; &quot;NULL&quot;;
            } else {
                std::cout &lt;&lt; i;
            }
            std::cout &lt;&lt; &quot; &quot;;
        }
        std::cout &lt;&lt; &quot;\n&quot;;
    }

private:
    std::array&lt;char_type, SIZE&gt; buffer_;
};

int main()
{
    ArrayedStreamBuffer&lt;10&gt; streambuf;
    std::ostream stream(&amp;streambuf);

    stream &lt;&lt; &quot;hello&quot;;
    stream &lt;&lt; &quot;,&quot;;

    streambuf.print_buffer();
}
 | output=
h e l l o , NULL NULL NULL NULL
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc setg}}
{{dsc end}}

[[de:cpp/io/basic streambuf/setp]]
[[es:cpp/io/basic streambuf/setp]]
[[fr:cpp/io/basic streambuf/setp]]
[[it:cpp/io/basic streambuf/setp]]
[[ja:cpp/io/basic streambuf/setp]]
[[pt:cpp/io/basic streambuf/setp]]
[[ru:cpp/io/basic streambuf/setp]]
[[zh:cpp/io/basic streambuf/setp]]</text>
      <sha1>1drx4tq8en68ma227elqe6r5zm10j6t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sgetc</title>
    <ns>0</ns>
    <id>4881</id>
    <revision>
      <id>90519</id>
      <parentid>64971</parentid>
      <timestamp>2017-02-28T23:31:32Z</timestamp>
      <contributor>
        <ip>46.4.56.61</ip>
      </contributor>
      <comment>example had unspecified behaviour</comment>
      <text xml:space="preserve" bytes="1251">{{cpp/io/basic_streambuf/title|sgetc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
int_type sgetc();
}}

Reads one character from the input sequence.

If the input sequence read position is not available, returns {{lc|underflow()}}. Otherwise returns {{c|Traits::to_int_type(*gptr())}}.

===Parameters===
(none)

===Return value===
The value of the character pointed to by the ''get pointer''.

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::stringstream stream(&quot;Hello, world&quot;);
    std::cout &lt;&lt; &quot;sgetc() returned '&quot; &lt;&lt; (char)stream.rdbuf()-&gt;sgetc() &lt;&lt; &quot;'\n&quot;;
    std::cout &lt;&lt; &quot;peek() returned '&quot; &lt;&lt; (char)stream.peek() &lt;&lt; &quot;'\n&quot;;
    std::cout &lt;&lt; &quot;get() returned '&quot; &lt;&lt; (char)stream.get() &lt;&lt; &quot;'\n&quot;;
}
 | output=
sgetc() returned 'H'
peek() returned 'H'
get() returned 'H'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sbumpc}}
{{dsc inc | cpp/io/basic_streambuf/dsc snextc}}
{{dsc end}}

[[de:cpp/io/basic streambuf/sgetc]]
[[es:cpp/io/basic streambuf/sgetc]]
[[fr:cpp/io/basic streambuf/sgetc]]
[[it:cpp/io/basic streambuf/sgetc]]
[[ja:cpp/io/basic streambuf/sgetc]]
[[pt:cpp/io/basic streambuf/sgetc]]
[[ru:cpp/io/basic streambuf/sgetc]]
[[zh:cpp/io/basic streambuf/sgetc]]</text>
      <sha1>jx2w6x2a9cdqzbmjyenjv08wqw92epu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sgetn</title>
    <ns>0</ns>
    <id>4884</id>
    <revision>
      <id>64238</id>
      <parentid>62380</parentid>
      <timestamp>2013-08-15T15:56:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1227">{{cpp/io/basic_streambuf/title | sgetn | xsgetn}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
std::streamsize sgetn( char_type* s, std::streamsize count );
}}
{{dcl | num=2 | 1=
protected:
virtual std::streamsize xsgetn( char_type* s, std::streamsize count );
}}
{{dcl end}}

@1@ Calls {{tt|xsgetn(s, count)}} of the most derived class.

@2@ Reads {{tt|count}} characters from the input sequence and stores them into a character array pointed to by {{tt|s}}. The characters are read as if by repeated calls to {{lc|sbumpc()}}. That is, if less than {{tt|count}} characters are immediately available, the function calls {{lc|uflow()}} to provide more until {{c|traits::eof()}} is returned.

===Parameters===
(none)

===Return value===
The number of characters successfully read.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputn}}
{{dsc end}}

[[de:cpp/io/basic streambuf/sgetn]]
[[es:cpp/io/basic streambuf/sgetn]]
[[fr:cpp/io/basic streambuf/sgetn]]
[[it:cpp/io/basic streambuf/sgetn]]
[[ja:cpp/io/basic streambuf/sgetn]]
[[pt:cpp/io/basic streambuf/sgetn]]
[[ru:cpp/io/basic streambuf/sgetn]]
[[zh:cpp/io/basic streambuf/sgetn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/showmanyc</title>
    <ns>0</ns>
    <id>4887</id>
    <revision>
      <id>76904</id>
      <parentid>64243</parentid>
      <timestamp>2015-03-05T13:56:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on pronounciation</comment>
      <text xml:space="preserve" bytes="1497">{{cpp/io/basic_streambuf/title|showmanyc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
protected:
virtual std::streamsize showmanyc();
}}

Estimates the number of characters available for input in the associated character sequence. {{lc|underflow()}} is guaranteed not to return {{c|Traits::eof()}} until at least that many characters are extracted.

===Parameters===
(none)

===Return value===
The number of characters that are certainly available in the associated character sequence, or {{c|-1}} if {{tt|showmanyc}} can determine, without blocking, that no characters are available. If {{tt|showmanyc}} returns {{c|-1}}, {{lc|underflow()}} and {{lc|uflow()}} will definitely return {{c|Traits::eof}}.

The base class version returns {{c|0}}, which has the meaning of &quot;unsure if there are characters available in the associated sequence&quot;.

===Notes===
The name of this function stands for &quot;stream: how many characters?&quot;, so it is pronounced &quot;S how many C&quot;, rather than &quot;show many C&quot;

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc in_avail}}
{{dsc inc | cpp/io/basic_filebuf/dsc showmanyc}}
{{dsc end}}

[[de:cpp/io/basic streambuf/showmanyc]]
[[es:cpp/io/basic streambuf/showmanyc]]
[[fr:cpp/io/basic streambuf/showmanyc]]
[[it:cpp/io/basic streambuf/showmanyc]]
[[ja:cpp/io/basic streambuf/showmanyc]]
[[pt:cpp/io/basic streambuf/showmanyc]]
[[ru:cpp/io/basic streambuf/showmanyc]]
[[zh:cpp/io/basic streambuf/showmanyc]]</text>
      <sha1>9nsbi95qljm8c0qs3i38fz6ti9srern</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/snextc</title>
    <ns>0</ns>
    <id>4879</id>
    <revision>
      <id>64241</id>
      <parentid>57724</parentid>
      <timestamp>2013-08-15T15:58:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc, fmt</comment>
      <text xml:space="preserve" bytes="1122">{{cpp/io/basic_streambuf/title|snextc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
int_type snextc();
}}

Advances the input sequence by one character and reads one character.

The function calls {{lc|sbumpc()}} to advance the input sequence. If that function returns {{c|Traits::eof()}} meaning that input sequence has been exhausted and {{lc|uflow()}} could not retrieve more data, {{c|Traits::eof()}} is returned. Otherwise {{lc|sgetc()}} is called in order to read the character.

===Parameters===
(none)

===Return value===
The value of the next character. If the input sequence has been exhausted, {{c|Traits::eof()}} is returned.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sbumpc}}
{{dsc end}}

[[de:cpp/io/basic streambuf/snextc]]
[[es:cpp/io/basic streambuf/snextc]]
[[fr:cpp/io/basic streambuf/snextc]]
[[it:cpp/io/basic streambuf/snextc]]
[[ja:cpp/io/basic streambuf/snextc]]
[[pt:cpp/io/basic streambuf/snextc]]
[[ru:cpp/io/basic streambuf/snextc]]
[[zh:cpp/io/basic streambuf/snextc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sputbackc</title>
    <ns>0</ns>
    <id>9695</id>
    <revision>
      <id>70080</id>
      <parentid>70069</parentid>
      <timestamp>2014-05-09T12:42:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>adjusted the comments in the example</comment>
      <text xml:space="preserve" bytes="2414">{{cpp/io/basic_streambuf/title | sputbackc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
int_type sputbackc( char_type c );
}}

Puts back a character back to the get area.

If a putback position is available in the get area ({{c|gptr() &gt; eback()}}), and the character {{tt|c}} is equal to the character one position to the left of {{lc|gptr()}} (as determined by {{c|Traits::eq(c, gptr()[-1])}}, then simply decrements the next pointer ({{lc|gptr()}}).

Otherwise, calls {{c|pbackfail(Traits::to_int_type(c))}} to either back up the get area or to modify both the get area and possibly the associated character sequence.

The I/O stream function {{l2tt|cpp/io/basic_istream/putback}} is implemented in terms of this function.

===Parameters===
(none)

===Return value===
If putback position was available, returns the character that the next pointer is now pointing at, converted to {{tt|int_type}} with {{c|Traits::to_int_type(*gptr())}}. The next single-character input from this streambuf will return this character.

If putback position was not available, returns what {{lc|pbackfail()}} returns, which is  {{c|Traits::eof()}} on failure.

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::stringstream s(&quot;abcdef&quot;); // gptr() points to 'a' in &quot;abcdef&quot;
    std::cout &lt;&lt; &quot;Before putback, string holds &quot; &lt;&lt; s.str() &lt;&lt; '\n';
    char c1 = s.get(); // c1 = 'a', gptr() now points to 'b' in &quot;abcdef&quot;
    char c2 = s.rdbuf()-&gt;sputbackc('z'); // same as s.putback('z')
                                         // gptr() now points to 'z' in &quot;zbcdef&quot;
    std::cout &lt;&lt; &quot;After putback, string holds &quot; &lt;&lt; s.str() &lt;&lt; '\n';
    char c3 = s.get(); // c3 = 'z', gptr() now points to 'b' in &quot;zbcdef&quot;
    char c4 = s.get(); // c4 = 'b', gptr() now points to 'c' in &quot;zbcdef&quot;
    std::cout &lt;&lt; c1 &lt;&lt; c2 &lt;&lt; c3 &lt;&lt; c4 &lt;&lt; '\n';

    s.rdbuf()-&gt;sputbackc('b');  // gptr() now points to 'b' in &quot;zbcdef&quot;
    s.rdbuf()-&gt;sputbackc('z');  // gptr() now points to 'z' in &quot;zbcdef&quot;
    int eof = s.rdbuf()-&gt;sputbackc('x');  // nothing to unget: pbackfail() fails
    if (eof == EOF)
        std::cout &lt;&lt; &quot;No room to putback after 'z'\n&quot;;
}
 | output=
Before putback, string holds abcdef
After putback, string holds zbcdef
azzb
No room to putback after 'z'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}
{{dsc inc | cpp/io/basic_istream/dsc putback}}
{{dsc end}}</text>
      <sha1>cmc22q4899s4ywg7dd92uo4fbzfkfyn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sputc</title>
    <ns>0</ns>
    <id>4886</id>
    <revision>
      <id>82441</id>
      <parentid>64236</parentid>
      <timestamp>2015-12-17T03:13:14Z</timestamp>
      <contributor>
        <username>Mafetter08</username>
        <id>4250</id>
      </contributor>
      <minor/>
      <comment>removing spurious punctuation</comment>
      <text xml:space="preserve" bytes="1112">{{cpp/io/basic_streambuf/title | sputc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
int_type sputc( char_type ch );
}}

Writes one character to the output sequence.

If the output sequence write position is not available (the buffer is full), then calls {{c|overflow(ch)}}.

===Parameters===
{{par begin}}
{{par | ch | character to write}}
{{par end}}

===Return value===
The written character, converted to {{tt|int_type}} with {{c|Traits::to_int_type(ch)}} on success.

{{c|Traits::eof()}} (as returned by {{lc|overflow()}}) on failure.

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::ostringstream s;
    s.rdbuf()-&gt;sputc('a');
    std::cout &lt;&lt; s.str() &lt;&lt; '\n';
}
 | output=
a
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputn}}
{{dsc end}}

[[de:cpp/io/basic streambuf/sputc]]
[[es:cpp/io/basic streambuf/sputc]]
[[fr:cpp/io/basic streambuf/sputc]]
[[it:cpp/io/basic streambuf/sputc]]
[[ja:cpp/io/basic streambuf/sputc]]
[[pt:cpp/io/basic streambuf/sputc]]
[[ru:cpp/io/basic streambuf/sputc]]
[[zh:cpp/io/basic streambuf/sputc]]</text>
      <sha1>023kyqmmtrvb89hk8xtakuprxnkwyrz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sputn</title>
    <ns>0</ns>
    <id>4885</id>
    <revision>
      <id>64237</id>
      <parentid>62416</parentid>
      <timestamp>2013-08-15T15:56:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1986">{{cpp/io/basic_streambuf/title | sputn | xsputn}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
std::streamsize sputn( const char_type* s, std::streamsize count );
}}
{{dcl | num=2 | 1=
protected:
virtual std::streamsize xsputn( const char_type* s, std::streamsize count );
}}
{{dcl end}}

@1@ Calls {{tt|xsputn(s, count)}} of the most derived class.

@2@ Writes {{tt|count}} characters to the output sequence from the character array whose first element is pointed to by {{tt|s}}. The characters are written as if by repeated calls to {{lc|sputc()}}. Writing stops when either {{tt|count}} characters are written or a call to {{lc|sputc()}} would have returned {{c|Traits::eof()}}.

If the put area becomes full ({{c|1=pptr() == epptr()}}), this function may call {{lc|overflow()}}, or achieve the effect of calling {{tt|overflow()}} by some other, unspecified, means.

===Parameters===
(none)

===Return value===
The number of characters successfully written.

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
 
int main()
{
    std::ostringstream s1;
    std::streamsize sz = s1.rdbuf()-&gt;sputn(&quot;This is a test&quot;, 14);
    s1 &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;The call to sputn() returned &quot; &lt;&lt; sz &lt;&lt; '\n'
              &lt;&lt; &quot;The output sequence contains &quot; &lt;&lt; s1.str();

    std::istringstream s2;
    sz = s2.rdbuf()-&gt;sputn(&quot;This is a test&quot;, 14);
    std::cout &lt;&lt; &quot;The call to sputn() on an input stream returned &quot; &lt;&lt; sz &lt;&lt; '\n';
}
 | output=
The call to sputn() returned 14
The output sequence contains This is a test
The call to sputn() on an input stream returned 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetn}}
{{dsc end}}

[[de:cpp/io/basic streambuf/sputn]]
[[es:cpp/io/basic streambuf/sputn]]
[[fr:cpp/io/basic streambuf/sputn]]
[[it:cpp/io/basic streambuf/sputn]]
[[ja:cpp/io/basic streambuf/sputn]]
[[pt:cpp/io/basic streambuf/sputn]]
[[ru:cpp/io/basic streambuf/sputn]]
[[zh:cpp/io/basic streambuf/sputn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sungetc</title>
    <ns>0</ns>
    <id>9691</id>
    <revision>
      <id>64277</id>
      <parentid>63940</parentid>
      <timestamp>2013-08-15T16:18:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1803">{{cpp/io/basic_streambuf/title | sungetc}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
int_type sungetc();
}}

If a putback position is available in the get area ({{c|gptr() &gt; eback()}}), then decrements the next pointer ({{lc|gptr()}}) and returns the character it now points to.

If a putback position is not available, then calls {{lc|pbackfail()}} to back up the input sequence if possible.

The I/O stream function {{l2tt|cpp/io/basic_istream/unget}} is implemented in terms of this function.

===Parameters===
(none)

===Return value===
If putback position was available, returns the character that the next pointer is now pointing at, converted to {{tt|int_type}} with {{c|Traits::to_int_type(*gptr())}}. The next single-character input from this streambuf will return this character.

If putback position was not available, returns what {{lc|pbackfail()}} returns, which is  {{c|Traits::eof()}} on failure.

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::stringstream s(&quot;abcdef&quot;); // gptr() poitns to 'a'
    char c1 = s.get(); // c = 'a', gptr() now points to 'b' 
    char c2 = s.rdbuf()-&gt;sungetc(); // same as s.unget(): gptr() points to 'a' again 
    char c3 = s.get(); // c3 = 'a', gptr() now points to 'b'
    char c4 = s.get(); // c4 = 'b', gptr() now points to 'c'
    std::cout &lt;&lt; c1 &lt;&lt; c2 &lt;&lt; c3 &lt;&lt; c4 &lt;&lt; '\n';

    s.rdbuf()-&gt;sungetc();  // back to 'b'
    s.rdbuf()-&gt;sungetc();  // back to 'a'
    int eof = s.rdbuf()-&gt;sungetc();  // nothing to unget: pbackfail() fails
    if (eof == EOF)
            std::cout &lt;&lt; &quot;Nothing to unget after 'a'\n&quot;;
}
 | output=
aaab
Nothing to unget after 'a'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/swap</title>
    <ns>0</ns>
    <id>12582</id>
    <revision>
      <id>61082</id>
      <timestamp>2013-06-05T10:46:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="440">{{cpp/io/basic_streambuf/title|swap}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
void swap( basic_streambuf&amp; other );
}}
{{dcl end}}

Exchanges  the contents of the stream buffer with those of {{tt|other}}. 

===Parameters===
{{par begin}}
{{par | other | stream buffer to exchange contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example|
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/sync</title>
    <ns>0</ns>
    <id>4868</id>
    <redirect title="cpp/io/basic streambuf/pubsync" />
    <revision>
      <id>17580</id>
      <timestamp>2012-01-17T12:15:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic streambuf/pubsync]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/io/basic streambuf/pubsync]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/uflow</title>
    <ns>0</ns>
    <id>4889</id>
    <revision>
      <id>64360</id>
      <parentid>64341</parentid>
      <timestamp>2013-08-15T18:33:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1766">{{cpp/io/basic_streambuf/title|uflow}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
virtual int_type uflow();
}}

Ensures that at least one character is available in the input area by updating the pointers to the input area (if needed). On success returns the value of that character and advances the value of the ''get pointer'' by one character. On failure returns {{c|traits::eof()}}. 

The function may update {{tt|gptr}}, {{tt|egptr}} and {{tt|eback}} pointers to define the location of newly loaded data (if any). On failure, the function ensures that either {{c|gptr() {{==}} nullptr}} or {{c|gptr() {{==}} egptr}}.

The base class version of the function calls {{lc|underflow()}} and increments {{lc|gptr()}}. 

===Parameters===
(none)

===Return value===
The value of the character that was pointed to by the ''get pointer'' before it was advanced by one, or {{c|traits::eof()}} otherwise.

The base class version of the function returns the value returned by {{lc|underflow()}}.

===Note===
The public functions of {{lc|std::streambuf}} call this function only if {{c|1=gptr() == nullptr}} or {{c|1=gptr() &gt;= egptr()}}.

The custom streambuf classes that do not use the get area and do not set the get area pointers in basic_streambuf are required to override this function.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc overflow}}
{{dsc end}}

[[de:cpp/io/basic streambuf/uflow]]
[[es:cpp/io/basic streambuf/uflow]]
[[fr:cpp/io/basic streambuf/uflow]]
[[it:cpp/io/basic streambuf/uflow]]
[[ja:cpp/io/basic streambuf/uflow]]
[[pt:cpp/io/basic streambuf/uflow]]
[[ru:cpp/io/basic streambuf/uflow]]
[[zh:cpp/io/basic streambuf/uflow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/underflow</title>
    <ns>0</ns>
    <id>4888</id>
    <revision>
      <id>67238</id>
      <parentid>67237</parentid>
      <timestamp>2014-01-29T02:54:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+to_int_type</comment>
      <text xml:space="preserve" bytes="1897">{{cpp/io/basic_streambuf/title|underflow}}
{{cpp/io/basic_streambuf/navbar}}
{{ddcl | 1=
virtual int_type underflow();
}}

Ensures that at least one character is available in the input area by updating the pointers to the input area (if needed) and reading more data in from the input sequence (if applicable). Returns the value of that character (converted to {{tt|int_type}} with {{c|Traits::to_int_type(c)}}) on success or {{c|Traits::eof()}} on failure.

The function may update {{tt|gptr}}, {{tt|egptr}} and {{tt|eback}} pointers to define the location of newly loaded data (if any). On failure, the function ensures that either {{c|gptr() {{==}} nullptr}} or {{c|gptr() {{==}} egptr}}.

The base class version of the function does nothing. The derived classes may override this function to allow updates to the get area in the case of exhaustion.

===Parameters===
(none)

===Return value===
The value of the character pointed to by the ''get pointer'' after the call on success, or {{c|Traits::eof()}} otherwise.

The base class version of the function returns {{c|traits::eof()}}.

===Note===
The public functions of {{lc|std::streambuf}} call this function only if {{c|1=gptr() == nullptr}} or {{c|1=gptr() &gt;= egptr()}}.

===Example===
{{include| cpp/io/basic_streambuf/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc uflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc overflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc underflow}}
{{dsc inc | cpp/io/basic_stringbuf/dsc underflow}}
{{dsc inc | cpp/io/strstreambuf/dsc underflow}}
{{dsc end}}

[[de:cpp/io/basic streambuf/underflow]]
[[es:cpp/io/basic streambuf/underflow]]
[[fr:cpp/io/basic streambuf/underflow]]
[[it:cpp/io/basic streambuf/underflow]]
[[ja:cpp/io/basic streambuf/underflow]]
[[pt:cpp/io/basic streambuf/underflow]]
[[ru:cpp/io/basic streambuf/underflow]]
[[zh:cpp/io/basic streambuf/underflow]]</text>
      <sha1>n5ebhbndd6sm5iagemh3k8l2o1wx947</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/xsgetn</title>
    <ns>0</ns>
    <id>4882</id>
    <redirect title="cpp/io/basic streambuf/sgetn" />
    <revision>
      <id>17611</id>
      <timestamp>2012-01-17T17:04:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic streambuf/sgetn]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_streambuf/sgetn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/xsputn</title>
    <ns>0</ns>
    <id>4883</id>
    <redirect title="cpp/io/basic streambuf/sputn" />
    <revision>
      <id>17612</id>
      <timestamp>2012-01-17T17:04:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic streambuf/sputn]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_streambuf/sputn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic streambuf/~basic streambuf</title>
    <ns>0</ns>
    <id>6342</id>
    <revision>
      <id>57737</id>
      <parentid>49716</parentid>
      <timestamp>2013-06-01T05:59:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1418">{{cpp/io/basic_streambuf/title|~basic_streambuf}}
{{cpp/io/basic_streambuf/navbar}}
{{dcl begin}}
{{dcl |1=
virtual ~basic_streambuf();
}}
{{dcl end}}

This destruction is empty: the members of this {{tt|basic_streambuf}} (the pointers and the locale) are destructed in accordance with the usual object destruction sequence after this destructor returns. However, since it is declared public virtual, it allows the objects that are derived from {{tt|std::basic_streambuf}} to be deleted through a pointer to base class.

===Parameters===
(none)

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;

int main()
{
    std::filebuf* fbp = new std::filebuf;
    fbp-&gt;open(&quot;test.txt&quot;, std::ios_base::out);
    fbp-&gt;sputn(&quot;Hello\n&quot;, 6);
    std::streambuf* sbp = fbp;
    delete sbp; // the file is closed, output flushed and written
    std::ifstream f(&quot;test.txt&quot;);
    std::cout &lt;&lt; f.rdbuf(); // proof
}
 | output=
Hello
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc basic_streambuf}}
{{dsc end}}

[[de:cpp/io/basic streambuf/~basic streambuf]]
[[es:cpp/io/basic streambuf/~basic streambuf]]
[[fr:cpp/io/basic streambuf/~basic streambuf]]
[[it:cpp/io/basic streambuf/~basic streambuf]]
[[ja:cpp/io/basic streambuf/~basic streambuf]]
[[pt:cpp/io/basic streambuf/~basic streambuf]]
[[ru:cpp/io/basic streambuf/~basic streambuf]]
[[zh:cpp/io/basic streambuf/~basic streambuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf</title>
    <ns>0</ns>
    <id>564</id>
    <revision>
      <id>64376</id>
      <parentid>64060</parentid>
      <timestamp>2013-08-15T18:46:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="2972">{{cpp/title|basic_stringbuf}}
{{cpp/io/basic_stringbuf/navbar}}
{{ddcl | header=sstream | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;, 
    class Allocator = std::allocator&lt;CharT&gt; 
&gt; class basic_stringbuf : public std::basic_streambuf&lt;CharT, Traits&gt;
}}

{{tt|std::basic_stringbuf}} is a {{lc|std::basic_streambuf}} whose associated character sequence is a memory-resident sequence of arbitrary characters, which can be initialized from or made available as an instance of {{lc|std::basic_string}}.

Typical implementations of {{tt|std::basic_stringbuf}} hold an object of type {{lc|std::basic_string}} or equivalent resizeable sequence container directly as a data member and use it as both the controlled character sequence (the array where the six pointers of {{lc|std::basic_streambuf}} are pointing to) and as the associated character sequence (the source of characters for all input operations and the target for the output).

In addition, a typical implementation holds a data member of type {{lc|std::ios_base::openmode}} to indicate the status of the stream (input-only, output-only, input/output, at-end, etc).
{{rev begin}}
{{rev|since=c++11|if over-allocation strategy is used by {{lc|overflow()}}, an additional high-watermark pointer may be stored to track the last initialized character}}
{{rev end}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | sstream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|stringbuf}} | {{c|basic_stringbuf&lt;char&gt;}}}}
{{dsc | {{tt|wstringbuf}} | {{c|basic_stringbuf&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc inc | cpp/io/dsc allocator_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc h1 | Public member functions}}
{{dsc inc | cpp/io/basic_stringbuf/dsc constructor}}
{{dsc inc | cpp/io/basic_stringbuf/dsc operator{{=}}}}
{{dsc inc | cpp/io/basic_stringbuf/dsc swap}}
{{dsc inc | cpp/io/basic_stringbuf/dsc destructor}}
{{dsc inc | cpp/io/basic_stringbuf/dsc str}}

{{dsc h1 | Protected member functions}}
{{dsc inc | cpp/io/basic_stringbuf/dsc underflow}}
{{dsc inc | cpp/io/basic_stringbuf/dsc pbackfail}}
{{dsc inc | cpp/io/basic_stringbuf/dsc overflow}}

{{dsc inc | cpp/io/basic_stringbuf/dsc setbuf}}
{{dsc inc | cpp/io/basic_stringbuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_stringbuf/dsc seekpos}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringbuf/dsc swap2}}
{{dsc end}}

{{cpp/io/basic_streambuf/inherit}}

[[de:cpp/io/basic stringbuf]]
[[es:cpp/io/basic stringbuf]]
[[fr:cpp/io/basic stringbuf]]
[[it:cpp/io/basic stringbuf]]
[[ja:cpp/io/basic stringbuf]]
[[pt:cpp/io/basic stringbuf]]
[[ru:cpp/io/basic stringbuf]]
[[zh:cpp/io/basic stringbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/basic stringbuf</title>
    <ns>0</ns>
    <id>9414</id>
    <revision>
      <id>80227</id>
      <parentid>64299</parentid>
      <timestamp>2015-08-01T12:13:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="3853">{{cpp/io/basic_stringbuf/title |basic_stringbuf}}
{{cpp/io/basic_stringbuf/navbar}}
{{dcl begin}}
{{dcl| num=1 |1=
explicit basic_stringbuf( std::ios_base::openmode which = std::ios_base::in
                                                        {{!}} std::ios_base::out );
}}
{{dcl| num=2 |1=
explicit basic_stringbuf( const std::basic_string&lt;CharT, traits, Allocator&gt;&amp; new_str,
                          std::ios_base::openmode which = std::ios_base::in
                                                        {{!}} std::ios_base::out );
}}
{{dcl| num=3 | since=c++11 |1=
basic_stringbuf( const basic_stringbuf&amp; rhs ) = delete;
}}
{{dcl| num=4 | since=c++11 |1=
basic_stringbuf( basic_stringbuf&amp;&amp; rhs );
}}
{{dcl end}}

@1@ Constructs a {{tt|std::basic_stringbuf}} object: initializes the base class by calling the default constructor of {{lc|std::basic_streambuf}}, initializes the character sequence with an empty string, and sets the mode to {{tt|which}}.

@2@ Constructs a {{tt|std::basic_stringbuf}} object by performing the same initialization as 1), followed by initializing the associated character sequence as if by calling {{lc|str|str(new_str)}}.

@3@ The copy constructor is deleted; {{tt|std::basic_stringbuf}} is not {{concept|CopyConstructible}}

@4@ Move-constructs a {{tt|std::basic_stringbuf}} object by moving all state from another {{tt|std::basic_stringbuf}} object {{tt|rhs}}, including the associated string, the open mode, the locale, and all other state. After the move, the six pointers of {{lc|std::basic_streambuf}} in {{c|*this}} are guaranteed to be different from the corresponding pointers in the moved-from {{tt|rhs}} unless null.

===Parameters===
{{par begin}}
{{par | new_str | a {{tt|basic_string}} used to initialize the buffer }}
{{par | rhs | another {{tt|basic_stringbuf}} }}
{{par | mode | specifies stream open mode. It is bitmask type, the following constants are defined: 
{{cpp/io/ios_base/openmode consts}}}}
{{par end}}

===Notes===
Typically called by the constructor of {{lc|std::basic_stringstream}}.

The level of support for the open modes other than {{lc|std::ios_base::in}} and {{lc|std::ios_base::out}} varies among implementations. C++11 explicitly specifies the support for {{lc|std::ios_base::ate}} in {{lc|str()}} and in this constructor, but {{lc|std::ios_base::app}}, {{lc|std::ios_base::trunc}}, and {{lc|std::ios_base::binary}} have different effects on different implementations.

===Example===
{{example
 | Demonstrates calling the constructor of basic_stringbuf directly.
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    // default constructor (mode = in{{!}}out)
    std::stringbuf buf1;
    buf1.sputc('1');
    std::cout &lt;&lt; &amp;buf1 &lt;&lt; '\n';

    // string constructor in at-end mode (C++11)
    std::stringbuf buf2(&quot;test&quot;, std::ios_base::in
                              {{!}} std::ios_base::out
                              {{!}} std::ios_base::ate);
    buf2.sputc('1');
    std::cout &lt;&lt; &amp;buf2 &lt;&lt; '\n';

    // append mode test (results differ among compilers)
    std::stringbuf buf3(&quot;test&quot;, std::ios_base::in
                              {{!}} std::ios_base::out
                              {{!}} std::ios_base::app);
    buf3.sputc('1');
    buf3.pubseekpos(1);
    buf3.sputc('2');
    std::cout &lt;&lt; &amp;buf3 &lt;&lt; '\n';
}
 | output=
1
test1
est12 (Sun Studio) 2st1 (GCC)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc constructor | basic_stringstream}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/basic stringbuf]]
[[es:cpp/io/basic stringbuf/basic stringbuf]]
[[fr:cpp/io/basic stringbuf/basic stringbuf]]
[[it:cpp/io/basic stringbuf/basic stringbuf]]
[[ja:cpp/io/basic stringbuf/basic stringbuf]]
[[pt:cpp/io/basic stringbuf/basic stringbuf]]
[[ru:cpp/io/basic stringbuf/basic stringbuf]]
[[zh:cpp/io/basic stringbuf/basic stringbuf]]</text>
      <sha1>0rhcgywczcwl90ctvoqxxo7749wz3le</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/operator=</title>
    <ns>0</ns>
    <id>9445</id>
    <revision>
      <id>62364</id>
      <parentid>57742</parentid>
      <timestamp>2013-06-27T00:56:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>versioning</comment>
      <text xml:space="preserve" bytes="1891">{{cpp/io/basic_stringbuf/title |operator{{=}}}}
{{cpp/io/basic_stringbuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |1=
std::basic_stringbuf&amp; operator=( std::basic_stringbuf&amp;&amp; rhs );
}}
{{dcl | num=2 |1=
std::basic_stringbuf&amp; operator=( const std::basic_stringbuf&amp; rhs ) = delete;
}}
{{dcl end}}

@1@ Move assignment operator: Moves the contents of {{tt|rhs}} into {{tt|*this}}. After the move, {{tt|lhs}} has the associated string, the open mode, the locale, and all other state formerly held by {{tt|rhs}}. The six pointers of {{lc|std::basic_streambuf}} in {{tt|lhs}} are guaranteed to be different from the corresponding pointers in the moved-from {{tt|rhs}} unless null.
@2@ The copy assignment operator is deleted; {{tt|basic_stringbuf}} is not {{concept|CopyAssignable}}.

===Parameters===
{{par begin}}
{{par | rhs | another {{tt|basic_stringbuf}} that will be moved from}}
{{par end}}

===Return value===
{{tt|*this}}

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{

    std::istringstream one(&quot;one&quot;);
    std::ostringstream two(&quot;two&quot;);

    std::cout &lt;&lt; &quot;Before move, one = \&quot;&quot; &lt;&lt; one.str() &lt;&lt; '&quot;'
              &lt;&lt; &quot; two = \&quot;&quot; &lt;&lt; two.str() &lt;&lt; &quot;\&quot;\n&quot;;

    *one.rdbuf() = std::move(*two.rdbuf());

    std::cout &lt;&lt; &quot;Before move, one = \&quot;&quot; &lt;&lt; one.str() &lt;&lt; '&quot;'
              &lt;&lt; &quot; two = \&quot;&quot; &lt;&lt; two.str() &lt;&lt; &quot;\&quot;\n&quot;;
}
 | output=
Before move, one = &quot;one&quot; two = &quot;two&quot;
Before move, one = &quot;two&quot; two = &quot;&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringbuf/dsc constructor}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/operator=]]
[[es:cpp/io/basic stringbuf/operator=]]
[[fr:cpp/io/basic stringbuf/operator=]]
[[it:cpp/io/basic stringbuf/operator=]]
[[ja:cpp/io/basic stringbuf/operator=]]
[[pt:cpp/io/basic stringbuf/operator=]]
[[ru:cpp/io/basic stringbuf/operator=]]
[[zh:cpp/io/basic stringbuf/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/overflow</title>
    <ns>0</ns>
    <id>12869</id>
    <revision>
      <id>64061</id>
      <parentid>64042</parentid>
      <timestamp>2013-08-07T17:49:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>comment on the overallocation in the example</comment>
      <text xml:space="preserve" bytes="4170">{{cpp/io/basic_stringbuf/title | overflow }}
{{cpp/io/basic_stringbuf/navbar}}
{{ddcl |1=
protected:
virtual int_type overflow ( int_type c = Traits::eof() );
}}

Appends the character {{tt|c}} to the output character sequence.

If {{tt|c}} is the end-of-file indicator {{c|traits::eq_int_type(c,traits::eof()) {{==}} true}}, then there is no character to append. The function does nothing and returns an unspecified value other than {{c|traits::eof()}}.

Otherwise, if the output sequence has a write position available or this function can successfully make a write position available, then calls {{c|sputc(c)}} and returns {{tt|c}}.

This function can make a write position available if the stringbuf is open for output ({{c|mode &amp; ios_base::out) !{{=}} 0}}): in this case, it reallocates (or initially allocates) the buffer big enough to hold the entire current buffer plus at least one more character. If the stringbuf is also open for input ({{c|(mode &amp; ios_base::in) !{{=}} 0}}, then {{tt|overflow}} also increases the size of the get area by moving {{c|egptr()}} to point just past the new write position.

===Parameters===
(none)

===Return value===
{{c|Traits::eof()}} to indicate failure, {{tt|c}} if the character {{tt|c}} was successfully appended, or some value other than {{c|Traits::eof()}} if called with {{c|Traits::eof()}} as the argument.

===Notes===
This function is different from a typical {{tt|overflow()}} which moves the contents of the buffer to the associated character sequence because for a {{c|std::basic_stringbuf}}, the buffer and the associated sequence are one and the same.


===Example===
{{example
 | In the implementation used to execute this example, overflow() over-allocates the put area to 512 bytes: a call to str() would only return the four initialized bytes, but the next 508 calls to sputc() would not require new calls to overflow()
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::stringbuf
{
    mybuf(const std::string&amp; new_str,
          std::ios_base::openmode which = std::ios_base::in{{!}}std::ios_base::out)
           : std::stringbuf(new_str, which) {}
    int_type overflow(int_type c = EOF) override
    {
        std::cout &lt;&lt; &quot;stringbuf::overflow('&quot; &lt;&lt; char(c) &lt;&lt; &quot;') called\n&quot;
                  &lt;&lt; &quot;Before: size of get area: &quot; &lt;&lt; egptr() - eback() &lt;&lt; '\n'
                  &lt;&lt; &quot;        size of put area: &quot; &lt;&lt; epptr() - pbase() &lt;&lt; '\n';
        int_type ret = std::stringbuf::overflow(c);
        std::cout &lt;&lt; &quot;After : size of get area: &quot; &lt;&lt; egptr() - eback() &lt;&lt; '\n'
                  &lt;&lt; &quot;        size of put area: &quot; &lt;&lt; epptr() - pbase() &lt;&lt; '\n';
        return ret;
    }
};

int main()
{
    std::cout &lt;&lt; &quot;read-write stream:\n&quot;;
    mybuf sbuf(&quot;   &quot;); // read-write stream
    std::iostream stream(&amp;sbuf);
    stream &lt;&lt; 1234;
    std::cout &lt;&lt; sbuf.str() &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;\nread-only stream:\n&quot;;
    mybuf ro_buf(&quot;   &quot;, std::ios_base::in); // read-only stream
    std::iostream ro_stream(&amp;ro_buf);
    ro_stream &lt;&lt; 1234;

    std::cout &lt;&lt; &quot;\nwrite-only stream:\n&quot;;
    mybuf wr_buf(&quot;   &quot;, std::ios_base::out); // write-only stream
    std::iostream wr_stream(&amp;wr_buf);
    wr_stream &lt;&lt; 1234;
}
 | p = true
 | output=
read-write stream:
stringbuf::overflow('4') called
Before: size of get area: 3
        size of put area: 3
After : size of get area: 4
        size of put area: 512
1234

read-only stream:
stringbuf::overflow('1') called
Before: size of get area: 3
        size of put area: 0
After : size of get area: 3
        size of put area: 0

write-only stream:
stringbuf::overflow('4') called
Before: size of get area: 0
        size of put area: 3
After : size of get area: 0
        size of put area: 512
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc overflow}}
{{dsc inc | cpp/io/basic_stringbuf/dsc underflow}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/overflow]]
[[es:cpp/io/basic stringbuf/overflow]]
[[fr:cpp/io/basic stringbuf/overflow]]
[[it:cpp/io/basic stringbuf/overflow]]
[[ja:cpp/io/basic stringbuf/overflow]]
[[pt:cpp/io/basic stringbuf/overflow]]
[[ru:cpp/io/basic stringbuf/overflow]]
[[zh:cpp/io/basic stringbuf/overflow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/pbackfail</title>
    <ns>0</ns>
    <id>9696</id>
    <revision>
      <id>63939</id>
      <parentid>57745</parentid>
      <timestamp>2013-08-01T15:42:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="2373">{{cpp/io/basic_stringbuf/title | pbackfail }}
{{cpp/io/basic_stringbuf/navbar}}
{{ddcl |1=
protected:
virtual int_type pbackfail( int_type c = Traits::eof() )
}}

This protected virtual function is called by the public functions {{l2tt|cpp/io/basic_streambuf/sungetc}} and {{l2tt|cpp/io/basic_streambuf/sputbackc}} (which, in turn, are called by {{l2tt|cpp/io/basic_istream/unget}} and {{l2tt|cpp/io/basic_istream/putback}}). 

@1@ The caller is requesting that the get area is backed up by one character ({{tt|pbackfail()}} is called with no arguments or with {{c|Traits::eof()}} as the argument)
:@a@ First, checks if there is a putback position, and if there really isn't, fails. (stringbuf has no external character source to re-read)
:@b@ If the caller was wrong and the putback position is in fact available, simply decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}, e.g. by calling {{c|gbump(-1)}}. 
@2@ The caller attempts to putback a different character from the one retrieved earlier ({{tt|pbackfail()}} is called with the character that needs to be put back), in which case
:@a@ First, checks if there is a putback position, and if there isn't, fails.
:@b@ Then checks what character is in the putback position. If the character held there is already equal to {{tt|c}}, as determined by {{c|Traits::eq(to_char_type(c), gptr()[-1])}}, then simply decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}.
:@c@ Otherwise, if the buffer is open for reading only, fails.
:@d@ Otherwise, if the buffer is open for writing ({{c|mode &amp;&amp; std::ios_base::out}} is nonzero), then decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}} and writes {{tt|c}} to the location pointed to gptr() after adjustment.

===Parameters===
{{par begin}}
{{par | c | the character to put back, or Traits::eof() to indicate that backing up of the get area is requested}}
{{par end}}

===Return value===
{{c|c}} on success except if {{tt|c}} was {{c|Traits::eof()}}, in which case {{c|Traits::not_eof(c)}} is returned.

{{c|Traits::eof()}} on failure.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbackfail}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc inc | cpp/io/basic_istream/dsc putback}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/seekoff</title>
    <ns>0</ns>
    <id>12871</id>
    <revision>
      <id>80458</id>
      <parentid>70270</parentid>
      <timestamp>2015-08-13T21:58:06Z</timestamp>
      <contributor>
        <username>Bran</username>
        <id>4364</id>
      </contributor>
      <minor/>
      <comment>Use a unique name for the second parameter</comment>
      <text xml:space="preserve" bytes="5181">{{cpp/io/basic_stringbuf/title | seekoff }}
{{cpp/io/basic_stringbuf/navbar}}
{{ddcl |1=
protected:
virtual pos_type seekoff(off_type off,
                         ios_base::seekdir dir,
                         ios_base::openmode which = ios_base::in {{!}} ios_base::out);}}

Repositions {{lc|std::basic_streambuf::gptr}} and/or {{lc|std::basic_streambuf::pptr}}, if possible, to the position that corresponds to exactly {{tt|off}} characters from beginning, end, or current position of the get and/or put area of the buffer.

* If {{tt|which}} includes {{tt|ios_base::in}} and this buffer is open for reading (that is, if {{c|((which &amp; ios_base::in) {{==}} ios_base::in}}), then repositions the read pointer {{lc|std::basic_streambuf::gptr}} inside the get area as described below
* If {{tt|which}} includes {{tt|ios_base::out}} and this buffer is open for writing (that is, {{c|(which &amp; ios_base::out) {{==}} ios_base::out}}), then repositions the write pointer {{lc|std::basic_streambuf::pptr}} inside the put area as described below
* If {{tt|which}} includes both  {{tt|ios_base::in}} and  {{tt|ios_base::out}} and the buffer is open for both reading and writing ({{c|1=(which &amp; (ios_base::in{{!}}ios_base::out)) ==(ios_base::in{{!}}ios_base::out)}}), and {{tt|dir}} is either {{c|ios_base::beg}} or {{c|ios_base::end}}, then repositions both read and write pointers as described below.
* Otherwise, this function fails.

If the pointer (either {{tt|gptr}} or {{tt|pptr}} or both) is repositioned, it is done as follows:
@1@ If the pointer to be repositioned is a null pointer and the new offset {{tt|newoff}} would be non-zero, this function fails.
@2@ The new pointer offset {{tt|newoff}} of type {{tt|off_type}} is determined
:@a@ if {{c|dir {{==}} ios_base::beg}}, then {{tt|newoff}} is zero
:@b@ if {{c|dir {{==}} ios_base::cur}}, then {{tt|newoff}} is the current position of the pointer ({{c|gptr()-eback()}} or {{c|pptr()-pbase()}})
:@c@ if {{c|dir {{==}} ios_base::end}}, then {{tt|newoff}} is the length of the entire initialized part of the buffer (if overallocation is used, the high watermark pointer minus the beginning pointer)
@3@ If {{c|newoff + off &lt; 0}} (the repositioning would move the pointer to before the beginning of the buffer) or if {{c|newoff + off}} would point past the end of the buffer (or past the last initialized character in the buffer if overallocation is used), the function fails
@4@ Otherwise, the pointer is assigned as if by {{c|gptr() {{=}} eback() + newoff + off}} or {{c|pptr() {{=}} pbase() + newoff + off}}

===Parameters===
{{par begin}}
{{par | off | relative position to set the next pointer(s) to}}
{{par | dir | defines base position to apply the relative offset to. It can be one of the following constants:
{{cpp/io/ios_base/seekdir consts}} }}
{{par | which | defines whether the input sequences, the output sequence, or both are affected. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Return value===
{{c|pos_type(newoff)}} on success, {{c|pos_type(off_type(-1))}} on failure and if pos_type cannot represent the resulting stream position.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::stringstream ss(&quot;123&quot;); // in/out
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    // absolute positioning both pointers
    ss.rdbuf()-&gt;pubseekoff(1, std::ios_base::beg); // move both 1 forward
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    // try to move both pointers 1 forward from current position
    if(-1 == ss.rdbuf()-&gt;pubseekoff(1, std::ios_base::cur))
        std::cout &lt;&lt; &quot;moving both pointers from current position failed\n&quot;;
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    // move the write pointer 1 forward, but not the read pointer
    // can also be called as ss.seekp(1, std::ios_base::cur);
    ss.rdbuf()-&gt;pubseekoff(1, std::ios_base::cur, std::ios_base::out);
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    ss &lt;&lt; 'a'; // write at put position
    std::cout &lt;&lt; &quot;Wrote 'a' at put position, the buffer is now &quot; &lt;&lt; ss.str() &lt;&lt; '\n';
    char ch;
    ss &gt;&gt; ch;
    std::cout &lt;&lt; &quot;reading at get position gives '&quot; &lt;&lt; ch &lt;&lt; &quot;'\n&quot;;
}
 | output=
put pos = 0 get pos = 0
put pos = 1 get pos = 1
moving both pointers from current position failed
put pos = 1 get pos = 1
put pos = 2 get pos = 1
Wrote 'a' at put position, the buffer is now 12a
reading at get position gives '2'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekpos}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekoff}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/seekoff]]
[[es:cpp/io/basic stringbuf/seekoff]]
[[fr:cpp/io/basic stringbuf/seekoff]]
[[it:cpp/io/basic stringbuf/seekoff]]
[[ja:cpp/io/basic stringbuf/seekoff]]
[[pt:cpp/io/basic stringbuf/seekoff]]
[[ru:cpp/io/basic stringbuf/seekoff]]
[[zh:cpp/io/basic stringbuf/seekoff]]</text>
      <sha1>ls2yv1aq5ytuf9u4c12pj42yyq1cts6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/seekpos</title>
    <ns>0</ns>
    <id>12872</id>
    <revision>
      <id>65338</id>
      <parentid>65337</parentid>
      <timestamp>2013-09-09T18:54:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealsos</comment>
      <text xml:space="preserve" bytes="2682">{{cpp/io/basic_stringbuf/title |seekpos}}
{{cpp/io/basic_stringbuf/navbar}}
{{ddcl |1=
protected:
virtual pos_type seekpos(pos_type sp,
                         std::ios_base::openmode which = std::ios_base::in {{!}} std::ios_base::out );
}}

Repositions {{lc|std::basic_streambuf::gptr}} and/or {{lc|std::basic_streambuf::pptr}}, if possible, to the position indicated by {{tt|sp}}

Effectively executes {{c|seekoff(off_type(sp), std::ios_base::beg, which)}}

===Parameters===
{{par begin}}
{{par | sp | stream position, such as one obtained by {{lc|seekoff()}} or {{tt|seekpos()}}}}
{{par | which | defines whether the input sequences, the output sequence, or both are affected. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Return value===
{{tt|sp}} on success or {{c|pos_type(off_type(-1))}} on failure.

===Notes===
{{tt|seekpos()}} is called by {{lc|std::basic_streambuf::pubseekpos()}}, which is called by the single-argument versions of {{lc|std::basic_istream::seekg()}} and {{lc|std::basic_ostream::seekp()}}

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::stringbuf
{
    mybuf(const std::string&amp; str) : std::stringbuf(str) {}
    pos_type seekpos(pos_type sp, std::ios_base::openmode which) {
         std::cout &lt;&lt; &quot;Before seekpos(&quot; &lt;&lt; sp &lt;&lt; &quot;), size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
         pos_type rc = std::stringbuf::seekpos(sp, which);
         std::cout &lt;&lt; &quot;seekpos() returns &quot; &lt;&lt; rc &lt;&lt; &quot;.\nAfter the call, &quot;
                   &lt;&lt; &quot;size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
        return rc;
    }
};

int main()
{
    mybuf buf(&quot;12345&quot;);
    std::iostream stream(&amp;buf);
    stream.seekg(2);
}
 | output=
Before seekpos(2), size of the get area is 5 with 5 read positions available
seekpos() returns 2.
After the call, size of the get area is 5 with 3 read positions available
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekpos}}
{{dsc inc | cpp/io/basic_stringbuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekpos}}
{{dsc inc | cpp/io/strstreambuf/dsc seekpos}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/seekpos]]
[[es:cpp/io/basic stringbuf/seekpos]]
[[fr:cpp/io/basic stringbuf/seekpos]]
[[it:cpp/io/basic stringbuf/seekpos]]
[[ja:cpp/io/basic stringbuf/seekpos]]
[[pt:cpp/io/basic stringbuf/seekpos]]
[[ru:cpp/io/basic stringbuf/seekpos]]
[[zh:cpp/io/basic stringbuf/seekpos]]</text>
      <sha1>bcelho7k3qx0vv2m2ibcu4s35nwspjp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/setbuf</title>
    <ns>0</ns>
    <id>4576</id>
    <revision>
      <id>69879</id>
      <parentid>62420</parentid>
      <timestamp>2014-04-30T13:54:55Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Return value */ correcting</comment>
      <text xml:space="preserve" bytes="2146">{{cpp/io/basic_stringbuf/title | setbuf }}
{{cpp/io/basic_stringbuf/navbar}}
{{ddcl |
protected:
virtual std::basic_streambuf&lt;CharT, Traits&gt;* setbuf( char_type* s, std::streamsize n )
}}

If {{tt|s}} is a null pointer and {{tt|n}} is zero, this function has no effect.

Otherwise, the effect is implementation-defined: some implementations do nothing, while some implementations clear the {{lc|std::string}} member currently used as the buffer and begin using the user-supplied character array of size {{tt|n}}, whose first element is pointed to by {{tt|s}}, as the buffer and the input/output character sequence.

This function is protected virtual, it may only be called through {{tt|pubsetbuf()}} or from member functions of a user-defined class derived from {{tt|std::basic_stringbuf}}.

===Parameters===
{{par begin}}
{{par | s | pointer to the first byte in the user-provided buffer or null}}
{{par | n | the number of bytes in the user-provided buffer or zero}}
{{par end}}

===Return value===
{{c|this}}.

===Notes===
The deprecated stream buffer {{c|std::strstreambuf}} or the boost.IOStreams device [http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/array.html#array {{tt|boost::basic_array}}] may be used to implement I/O buffering over a user-provided char array in portable manner.

===Example===
{{example
 | Test for the stringstream's setbuf functionality
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::ostringstream ss;
    char c[1024] = {};
    ss.rdbuf()-&gt;pubsetbuf(c, 1024);
    ss &lt;&lt; 3.14 &lt;&lt; '\n';
    std::cout &lt;&lt; c &lt;&lt; '\n';
}
 | output=
3.14 (on GNU g++/libstdc++ and SunPro C++/roguewave)
&lt;nothing&gt; (on MS Visual Studio 2010, SunPro C++/stlport4, CLang++/libc++)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsetbuf | mem=std::basic_streambuf}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/setbuf]]
[[es:cpp/io/basic stringbuf/setbuf]]
[[fr:cpp/io/basic stringbuf/setbuf]]
[[it:cpp/io/basic stringbuf/setbuf]]
[[ja:cpp/io/basic stringbuf/setbuf]]
[[pt:cpp/io/basic stringbuf/setbuf]]
[[ru:cpp/io/basic stringbuf/setbuf]]
[[zh:cpp/io/basic stringbuf/setbuf]]</text>
      <sha1>t4tej5j4278kvocuohv8cb7jhbjab5c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/str</title>
    <ns>0</ns>
    <id>9413</id>
    <revision>
      <id>79457</id>
      <parentid>79015</parentid>
      <timestamp>2015-07-07T11:06:45Z</timestamp>
      <contributor>
        <ip>69.191.176.33</ip>
      </contributor>
      <text xml:space="preserve" bytes="4200">{{cpp/io/basic_stringbuf/title | str }}
{{cpp/io/basic_stringbuf/navbar}}
{{dcl begin}}
{{dcl | num=1 |
std::basic_string&lt;CharT, Traits, Allocator&gt; str() const;
}}
{{dcl | num=2 |
void str( const std::basic_string&lt;CharT, Traits, Allocator&gt;&amp; s);
}}
{{dcl end}}

Gets and sets the underlying string.

@1@ Creates and returns a {{lc|std::basic_string}} object containing a copy of this {{tt|std::basic_stringbuf}}'s underlying character sequence. For input-only streams, the returned string contains the characters from the range {{c|[eback(), egptr())}}. For input/output or output-only streams, contains the characters from {{c|pbase()}} to the last character in the sequence regardless of {{c|egptr()}} and {{c|epptr()}}.

{{rev begin}}
{{rev | since=c++11 |
The member character sequence in a buffer open for writing can be over-allocated for efficiency purposes. In that case, only the ''initialized characters'' are returned: these characters are the ones that were obtained from the string argument of the constructor, the string argument of the most recent call to the second overload of {{tt|str()}}, or from an write operation. A typical implementation that uses over-allocation maintains a high-watermark pointer to track the end of the initialized part of the buffer and this overload returns the characters from {{c|pbase()}} to the high-watermark pointer}}
{{rev end}}

@2@ Deletes the entire underlying character sequence of this {{tt|std::basic_stringbuf}} and then configures a new underlying character sequence containing a copy of the contents of {{tt|s}}. The pointers of {{lc|std::basic_streambuf}} are initialized as follows:
* For input streams ({{c|mode &amp; ios_base::in {{==}} true}}), {{c|eback()}} points at the first character, {{c|gptr() {{==}} eback()}}, and {{c|egptr() {{==}} eback() + s.size()}}: the subsequent input will read the first character copied from {{tt|s}}.
* For output streams ({{c|mode &amp; ios_base::out {{==}} true}}), {{c|pbase()}} points at the first character and {{c|epptr() &gt;{{=}} pbase() + s.size()}} (epptr is allowed to point farther so that the following {{tt|sputc()}} wouldn't immediately call {{tt|overflow()}})
** For append streams ({{c|mode &amp; ios_base::ate {{==}} true}}), {{c|pptr() {{==}} pbase() + s.size()}}, so that subsequent output will be appended to the last character copied from {{tt|s}} {{mark since c++11}}
** For non-appending output streams, {{c|pptr() {{==}} pbase()}}, so that subsequent output will overwrite the characters copied from {{tt|s}}.

===Parameters===
{{par begin}}
{{par | s | a string object holding the replacement character sequence}}
{{par end}}

===Return value===
@1@ A string object holding a copy of this buffer's underlying character sequence.
@2@ (none)

===Notes===
This function is typically accessed through {{c|std::basic_stringstream::str()}}.

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
int main()
{
    int n;

    std::istringstream in;  // could also use in(&quot;1 2&quot;)
    in.rdbuf()-&gt;str(&quot;1 2&quot;); // set the get area
    in &gt;&gt; n;
    std::cout &lt;&lt; &quot;after reading the first int from \&quot;1 2\&quot;, the int is &quot; 
              &lt;&lt; n &lt;&lt; &quot;, str() = \&quot;&quot; &lt;&lt; in.rdbuf()-&gt;str() &lt;&lt; &quot;\&quot;\n&quot;; // or in.str()

    std::ostringstream out(&quot;1 2&quot;);
    out &lt;&lt; 3;
    std::cout &lt;&lt; &quot;after writing the int '3' to output stream \&quot;1 2\&quot;&quot;
              &lt;&lt; &quot;, str() = \&quot;&quot; &lt;&lt; out.str() &lt;&lt; &quot;\&quot;\n&quot;;

    std::ostringstream ate(&quot;1 2&quot;, std::ios_base::ate); // C++11
    ate &lt;&lt; 3;
    std::cout &lt;&lt; &quot;after writing the int '3' to append stream \&quot;1 2\&quot;&quot;
              &lt;&lt; &quot;, str() = \&quot;&quot; &lt;&lt; ate.str() &lt;&lt; &quot;\&quot;\n&quot;;
}
 | output=
after reading the first int from &quot;1 2&quot;, the int is 1, str() = &quot;1 2&quot;
after writing the int '3' to output stream &quot;1 2&quot;, str() = &quot;3 2&quot;
after writing the int '3' to append stream &quot;1 2&quot;, str() = &quot;1 23&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc str | basic_stringstream}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/str]]
[[es:cpp/io/basic stringbuf/str]]
[[fr:cpp/io/basic stringbuf/str]]
[[it:cpp/io/basic stringbuf/str]]
[[ja:cpp/io/basic stringbuf/str]]
[[pt:cpp/io/basic stringbuf/str]]
[[ru:cpp/io/basic stringbuf/str]]
[[zh:cpp/io/basic stringbuf/str]]</text>
      <sha1>17skl2jujaro7bquk8316jt3zsx684v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/swap</title>
    <ns>0</ns>
    <id>9446</id>
    <revision>
      <id>62742</id>
      <parentid>57750</parentid>
      <timestamp>2013-07-01T23:35:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1472">{{cpp/io/basic_stringbuf/title |swap}}
{{cpp/io/basic_stringbuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void swap( std::basic_stringbuf&amp; rhs )
}}
{{dcl end}}

Swaps the state and the contents of {{c|*this}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | rhs | another {{tt|basic_stringbuf}} }}
{{par end}}

===Return value===
(none)

===Notes===
This function is called automatically when swapping {{lc|std::stringstream}} objects, it is rarely necessary to call it directly.

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{

    std::istringstream one(&quot;one&quot;);
    std::ostringstream two(&quot;two&quot;);

    std::cout &lt;&lt; &quot;Before swap, one = \&quot;&quot; &lt;&lt; one.str() &lt;&lt; '&quot;'
              &lt;&lt; &quot; two = \&quot;&quot; &lt;&lt; two.str() &lt;&lt; &quot;\&quot;\n&quot;;

    *one.rdbuf()-&gt;swap(*two.rdbuf());

    std::cout &lt;&lt; &quot;Before swap, one = \&quot;&quot; &lt;&lt; one.str() &lt;&lt; '&quot;'
              &lt;&lt; &quot; two = \&quot;&quot; &lt;&lt; two.str() &lt;&lt; &quot;\&quot;\n&quot;;
}
| output=
Before swap, one = &quot;one&quot; two = &quot;two&quot;
Before swap, one = &quot;two&quot; two = &quot;one&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringbuf/dsc constructor}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap | basic_stringstream}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/swap]]
[[es:cpp/io/basic stringbuf/swap]]
[[fr:cpp/io/basic stringbuf/swap]]
[[it:cpp/io/basic stringbuf/swap]]
[[ja:cpp/io/basic stringbuf/swap]]
[[pt:cpp/io/basic stringbuf/swap]]
[[ru:cpp/io/basic stringbuf/swap]]
[[zh:cpp/io/basic stringbuf/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/swap2</title>
    <ns>0</ns>
    <id>12801</id>
    <revision>
      <id>80228</id>
      <parentid>63143</parentid>
      <timestamp>2015-08-01T12:13:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing Alloc template arg</comment>
      <text xml:space="preserve" bytes="806">{{cpp/title | swap&lt;small&gt;(std::basic_stringbuf)&lt;/small&gt;}}
{{cpp/io/basic_stringbuf/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class CharT, class Traits, class Alloc &gt;
void swap( std::basic_stringbuf&lt;CharT,Traits,Alloc&gt;&amp; lhs,
           std::basic_stringbuf&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::basic_stringbuf}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{lc|std::basic_stringbuf}} objects whose states to swap}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringbuf/dsc swap}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc end}}</text>
      <sha1>sza0fgg9tb0jaer8505zhjtso6k3mfl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringbuf/underflow</title>
    <ns>0</ns>
    <id>12870</id>
    <revision>
      <id>65334</id>
      <parentid>65021</parentid>
      <timestamp>2013-09-09T17:34:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso</comment>
      <text xml:space="preserve" bytes="4809">{{cpp/io/basic_stringbuf/title | underflow }}
{{cpp/io/basic_stringbuf/navbar}}
{{ddcl |
protected:
virtual int_type underflow()
}}

Reads the next character from the get area of the buffer.

Specifically:

@1@ If the input sequence has a read position available ({{c|egptr() &gt; gptr()}}), returns {{c|Traits::to_int_type(*gptr())}}

@2@ Otherwise, if {{c|pptr() &gt; egptr()}} (some characters were inserted into the stream since the last time {{lc|overflow()}} changed {{lc|egptr()}}) then extends the end of the get area to include the most recently inserted characters, by changing {{lc|egptr()}} to equal {{lc|pptr()}}, and then returns {{c|Traits::to_int_type(*gptr())}}

@3@ Otherwise, returns {{c|Traits::eof()}}.

Any character in the buffer which has been initialized, regardless of whether it originated from the string passed in the constructor or was appended by {{lc|overflow()}}, is considered to be part of the input sequence.

===Parameters===
(none)

===Return value===
{{c|Traits::to_int_type(*gptr())}} (the next character to read in the get area) in case of success, or {{c|Traits::eof()}} in case of failure.

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::stringbuf
{
    mybuf(const std::string&amp; new_str,
          std::ios_base::openmode which = std::ios_base::in{{!}}std::ios_base::out)
           : std::stringbuf(new_str, which) {}

    int_type overflow(int_type c) {
        std::cout &lt;&lt; &quot;Before overflow(): get area size is &quot; &lt;&lt; egptr()-eback() &lt;&lt; ' '
                  &lt;&lt; &quot; the put area size is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        int_type rc = std::stringbuf::overflow(c);
        std::cout &lt;&lt; &quot;After overflow(): get area size is &quot; &lt;&lt; egptr()-eback() &lt;&lt; ' '
                  &lt;&lt; &quot; put area size is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        return rc;
    }

    int_type underflow() {
        std::cout &lt;&lt; &quot;Before underflow(): get area size is &quot; &lt;&lt; egptr()-eback() &lt;&lt; ' '
                  &lt;&lt; &quot; put area size is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        int_type ch = std::stringbuf::underflow();
        std::cout &lt;&lt; &quot;After underflow(): get area size is &quot; &lt;&lt; egptr()-eback() &lt;&lt; ' '
                  &lt;&lt; &quot; put area size is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        if(ch == EOF)
            std::cout &lt;&lt; &quot;underflow() returns EOF\n&quot;;
        else
            std::cout &lt;&lt; &quot;underflow() returns '&quot; &lt;&lt; char(ch) &lt;&lt; &quot;'\n&quot;;
        return ch;
    }
};

int main()
{
    mybuf sbuf(&quot;123&quot;); // read-write stream
    std::iostream stream(&amp;sbuf);
    int n;
    stream &gt;&gt; n; // calls sgetc() four times
                 // three calls return the characters '1', '2', '3'
                 // the fourth call, gptr() == egptr() and underflow() is called
                 // underflow returns EOF
    std::cout &lt;&lt; n &lt;&lt; '\n';
    stream.clear(); // clear the eofbit

    stream &lt;&lt; &quot;123456&quot;; // sputc() is called 6 times
                        // first three calls store &quot;123&quot; in the existing buffer
                        // 4th call finds that pptr() == epptr() and calls overflow()
                        // overflow() grows the buffer and sets egptr() to 4
                        // 5th and 6th calls store '5' and '6', advancing pptr()
    stream &gt;&gt; n; // calls sgetc() 4 times
                 // 1st call returns the '4' that was made available by overflow()
                 // on the 2nd call, egptr() == egptr() and underflow() is called
                 // underflow advances egptr() to equal pptr() (which is 6)
                 // 3rd sgetc() returns '6'
                 // 4th sgetc() finds gptr() == egptr(), calls underflow()
                 // underflow() returns EOF
    std::cout &lt;&lt; n &lt;&lt; '\n';
}
 | p=true
 | output=
Before underflow(): get area size is 3  put area size is 3
After underflow(): get area size is 3  put area size is 3
underflow() returns EOF
123
Before overflow(): get area size is 3  the put area size is 3
After overflow(): get area size is 4  put area size is 35
Before underflow(): get area size is 4  put area size is 35
After underflow(): get area size is 6  put area size is 35
underflow() returns '5'
Before underflow(): get area size is 6  put area size is 35
After underflow(): get area size is 6  put area size is 35
underflow() returns EOF
456
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc underflow}}
{{dsc inc | cpp/io/strstreambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc end}}

[[de:cpp/io/basic stringbuf/underflow]]
[[es:cpp/io/basic stringbuf/underflow]]
[[fr:cpp/io/basic stringbuf/underflow]]
[[it:cpp/io/basic stringbuf/underflow]]
[[ja:cpp/io/basic stringbuf/underflow]]
[[pt:cpp/io/basic stringbuf/underflow]]
[[ru:cpp/io/basic stringbuf/underflow]]
[[zh:cpp/io/basic stringbuf/underflow]]</text>
      <sha1>s5n8lro55dmp1x3ulllis5mvnvyz0yi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringstream</title>
    <ns>0</ns>
    <id>565</id>
    <revision>
      <id>64355</id>
      <parentid>64353</parentid>
      <timestamp>2013-08-15T18:30:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="2416">{{cpp/title|basic_stringstream}}
{{cpp/io/basic_stringstream/navbar}}
{{dcl begin}}
{{dcl header | sstream}}
{{dcl rev begin}}
{{dcl | until=c++11 | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;
&gt; class basic_stringstream;
}}
{{dcl | since=c++11 | 1=
template&lt; 
    class CharT, 
    class Traits = std::char_traits&lt;CharT&gt;,
    class Allocator = std::allocator&lt;CharT&gt;
&gt; class basic_stringstream;
}}
{{dcl rev end}}
{{dcl end}}

The class template {{tt|std::basic_stringstream}} implements input/output operations on memory ({{lc|std::basic_string}}) based streams. It essentially wraps a raw string device implementation ({{lc|std::basic_stringbuf}}) into a higher-level interface ({{lc|std::basic_iostream}}). The complete interface to unique {{tt|std::basic_stringbuf}} members is provided.

{{inheritance diagram/std-basic_stringstream}}

Two specializations for common character types are also defined:

{{dsc begin}}
{{dsc header | sstream}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|stringstream}} | {{c|basic_stringstream&lt;char&gt;}}}}
{{dsc | {{tt|wstringstream}} | {{c|basic_stringstream&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc inc | cpp/io/dsc char_type}}
{{dsc inc | cpp/io/dsc traits_type}}
{{dsc inc | cpp/io/dsc int_type}}
{{dsc inc | cpp/io/dsc pos_type}}
{{dsc inc | cpp/io/dsc off_type}}
{{dsc inc | cpp/io/dsc allocator_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc constructor | basic_stringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc operator{{=}} | basic_stringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap | basic_stringstream}}
{{dsc inc | cpp/io/basic_stringstream/dsc rdbuf | basic_stringstream}}

{{dsc h2 | String operations }}
{{dsc inc | cpp/io/basic_stringstream/dsc str | basic_stringstream}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/basic_stringstream/dsc swap2 | basic_istringstream}}
{{dsc end}}

{{cpp/io/basic_istream/inherit}}
{{cpp/io/basic_ostream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/basic stringstream]]
[[es:cpp/io/basic stringstream]]
[[fr:cpp/io/basic stringstream]]
[[it:cpp/io/basic stringstream]]
[[ja:cpp/io/basic stringstream]]
[[pt:cpp/io/basic stringstream]]
[[ru:cpp/io/basic stringstream]]
[[zh:cpp/io/basic stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringstream/basic stringstream</title>
    <ns>0</ns>
    <id>566</id>
    <revision>
      <id>50861</id>
      <parentid>43413</parentid>
      <timestamp>2013-06-01T03:42:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="490">{{include page|cpp/io/basic_stringstream/constructor|basic_stringstream}}

[[de:cpp/io/basic stringstream/basic stringstream]]
[[es:cpp/io/basic stringstream/basic stringstream]]
[[fr:cpp/io/basic stringstream/basic stringstream]]
[[it:cpp/io/basic stringstream/basic stringstream]]
[[ja:cpp/io/basic stringstream/basic stringstream]]
[[pt:cpp/io/basic stringstream/basic stringstream]]
[[ru:cpp/io/basic stringstream/basic stringstream]]
[[zh:cpp/io/basic stringstream/basic stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringstream/operator=</title>
    <ns>0</ns>
    <id>567</id>
    <revision>
      <id>43406</id>
      <parentid>1133</parentid>
      <timestamp>2012-11-03T02:39:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="407">{{cpp/io/basic_stringstream/operator{{=}}|basic_stringstream}}

[[de:cpp/io/basic stringstream/operator=]]
[[es:cpp/io/basic stringstream/operator=]]
[[fr:cpp/io/basic stringstream/operator=]]
[[it:cpp/io/basic stringstream/operator=]]
[[ja:cpp/io/basic stringstream/operator=]]
[[pt:cpp/io/basic stringstream/operator=]]
[[ru:cpp/io/basic stringstream/operator=]]
[[zh:cpp/io/basic stringstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringstream/rdbuf</title>
    <ns>0</ns>
    <id>568</id>
    <revision>
      <id>50862</id>
      <parentid>43398</parentid>
      <timestamp>2013-06-01T03:42:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="380">{{include page|cpp/io/basic_stringstream/rdbuf|basic_stringstream}}

[[de:cpp/io/basic stringstream/rdbuf]]
[[es:cpp/io/basic stringstream/rdbuf]]
[[fr:cpp/io/basic stringstream/rdbuf]]
[[it:cpp/io/basic stringstream/rdbuf]]
[[ja:cpp/io/basic stringstream/rdbuf]]
[[pt:cpp/io/basic stringstream/rdbuf]]
[[ru:cpp/io/basic stringstream/rdbuf]]
[[zh:cpp/io/basic stringstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringstream/str</title>
    <ns>0</ns>
    <id>569</id>
    <revision>
      <id>50863</id>
      <parentid>43392</parentid>
      <timestamp>2013-06-01T03:42:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="362">{{include page|cpp/io/basic_stringstream/str|basic_stringstream}}

[[de:cpp/io/basic stringstream/str]]
[[es:cpp/io/basic stringstream/str]]
[[fr:cpp/io/basic stringstream/str]]
[[it:cpp/io/basic stringstream/str]]
[[ja:cpp/io/basic stringstream/str]]
[[pt:cpp/io/basic stringstream/str]]
[[ru:cpp/io/basic stringstream/str]]
[[zh:cpp/io/basic stringstream/str]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringstream/swap</title>
    <ns>0</ns>
    <id>570</id>
    <revision>
      <id>50864</id>
      <parentid>43385</parentid>
      <timestamp>2013-06-01T03:42:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="371">{{include page|cpp/io/basic_stringstream/swap|basic_stringstream}}

[[de:cpp/io/basic stringstream/swap]]
[[es:cpp/io/basic stringstream/swap]]
[[fr:cpp/io/basic stringstream/swap]]
[[it:cpp/io/basic stringstream/swap]]
[[ja:cpp/io/basic stringstream/swap]]
[[pt:cpp/io/basic stringstream/swap]]
[[ru:cpp/io/basic stringstream/swap]]
[[zh:cpp/io/basic stringstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/basic stringstream/swap2</title>
    <ns>0</ns>
    <id>5494</id>
    <revision>
      <id>50865</id>
      <parentid>43378</parentid>
      <timestamp>2013-06-01T03:42:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="380">{{include page|cpp/io/basic_stringstream/swap2|basic_stringstream}}

[[de:cpp/io/basic stringstream/swap2]]
[[es:cpp/io/basic stringstream/swap2]]
[[fr:cpp/io/basic stringstream/swap2]]
[[it:cpp/io/basic stringstream/swap2]]
[[ja:cpp/io/basic stringstream/swap2]]
[[pt:cpp/io/basic stringstream/swap2]]
[[ru:cpp/io/basic stringstream/swap2]]
[[zh:cpp/io/basic stringstream/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c</title>
    <ns>0</ns>
    <id>571</id>
    <revision>
      <id>86224</id>
      <parentid>85753</parentid>
      <timestamp>2016-06-24T20:19:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0063r3 &quot;The contents of this header are the same as the Standard C library header &lt;stdio.h&gt;&quot;, but Annex K is not imported into std::, so just adding the note about concurrency on streams</comment>
      <text xml:space="preserve" bytes="8666">{{title|C-style file input/output}}
{{cpp/io/c/navbar}}
The C I/O subset of the C++ standard library implements C-style stream input/output operations.  The {{tt|&lt;cstdio&gt;}} header provides generic file operation support and supplies functions with narrow and multibyte character input/output capabilities, and the {{tt|&lt;cwchar&gt;}} header provides functions with wide character input/output capabilities.  

C streams are objects of type {{lc|std::FILE}} that can only be accessed and manipulated through pointers of type {{c|std::FILE*}} (Note: while it may be possible to create a local object of type {{lc|std::FILE}} by dereferencing and copying a valid {{c|std::FILE*}}, using the address of such copy in the I/O functions is undefined behavior). Each C stream is associated with an external physical device (file, standard input stream, printer, serial port, etc).

C streams can be used for both unformatted and formatted input and output. They are locale-sensitive and may perform wide/multibyte conversions as necessary. Unlike C++ streams, where each stream is associated with its own locale, all C streams access the same locale object: the one most recently installed with {{lc|std::setlocale}}.

Besides the system-specific information necessary to access the device (e.g. a POSIX file descriptor), each C stream object holds the following:
@1@ Character width: unset, narrow or wide
@2@ Buffering state: unbuffered, line-buffered, fully buffered.
@3@ The buffer, which may be replaced by an external, user-provided buffer.
@4@ I/O mode: input, output, or update (both input and output).
@5@ Binary/text mode indicator.
@6@ End-of-file status indicator.
@7@ Error status indicator.
@8@ File position indicator (an object of type {{tt|std::fpos_t}}), which, for wide character streams, includes the parse state (an object of type {{lc|std::mbstate_t}}).
@9@ {{mark c++17}} Reentrant lock used to prevent data races when multiple threads read, write, position, or query the position of a stream.

====Narrow and wide orientation====
A newly opened stream has no orientation. The first call to {{lc|std::fwide}} or to any I/O function establishes the orientation: wide I/O function makes the stream wide-oriented, narrow I/O function makes the stream narrow-oriented. Once set, orientation can only be changed with {{lc|std::freopen}}. Narrow I/O functions cannot be called on a wide-oriented stream, wide I/O functions cannot be called on a narrow-oriented stream. Wide I/O functions convert between wide and multibyte characters as if by calling {{lc|std::mbrtowc}} and {{lc|std::wcrtomb}}. Unlike the multibyte character strings that are valid in a program, multibyte characters in the file may contain embedded nulls and do not have to begin or end in the initial shift state.

POSIX requires that the LC_CTYPE facet of the currently installed C locale is stored within the stream object the moment its orientation becomes wide, and is used for all future I/O on this stream until the orientation is changed, regardless of any subsequent calls to {{lc|std::setlocale}}.

====Binary and text modes====
A ''text stream'' is an ordered sequence of characters composed into lines (zero or more characters plus a terminating {{c|'\n'}}). Whether the last line requires a terminating {{c|'\n'}} is implementation-defined. Characters may have to be added, altered, or deleted on input and output to conform to the conventions for representing text in the OS (in particular, C streams on Windows OS convert {{tt|\n}} to {{tt|\r\n}} on output, and convert {{tt|\r\n}} to {{tt|\n}} on input)

Data read in from a text stream is guaranteed to compare equal to the data that were earlier written out to that stream only if all of the following is true:
* the data consist only of printing characters and the control characters {{tt|\t}} and {{tt|\n}} (in particular, on Windows OS, the character {{tt|'\0x1A'}} terminates input)
* no \n is immediately preceded by a space character (space characters that are written out immediately before a \n may disappear when read)
* the last character is \n

A ''binary stream'' is an ordered sequence of characters that can transparently record internal data. Data read in from a binary stream always equals to the data that were earlier written out to that stream. Implementations are only allowed to append a number of null characters to the end of the stream. A wide binary stream doesn't need to end in the initial shift state.

POSIX implementations do not distinguish between text and binary streams (there is no special mapping for \n or any other characters)

===Functions===
{{dsc begin}}
{{dsc header | cstdio}}
{{dsc h2 | File access}}
{{dsc inc | cpp/io/c/dsc fopen}}
{{dsc inc | cpp/io/c/dsc freopen}}
{{dsc inc | cpp/io/c/dsc fclose}}
{{dsc inc | cpp/io/c/dsc fflush}}
{{dsc inc | cpp/io/c/dsc fwide}}
{{dsc inc | cpp/io/c/dsc setbuf}}
{{dsc inc | cpp/io/c/dsc setvbuf}}

{{dsc h2 | Direct input/output}}
{{dsc inc | cpp/io/c/dsc fread}}
{{dsc inc | cpp/io/c/dsc fwrite}}

{{dsc h2 | Unformatted input/output}}
{{dsc h2 | {{small|Byte/multibyte character}}}}
{{dsc inc | cpp/io/c/dsc fgetc}}
{{dsc inc | cpp/io/c/dsc fgets}}
{{dsc inc | cpp/io/c/dsc fputc}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc inc | cpp/io/c/dsc getchar}}
{{dsc inc | cpp/io/c/dsc gets}}
{{dsc inc | cpp/io/c/dsc putchar}}
{{dsc inc | cpp/io/c/dsc puts}}
{{dsc inc | cpp/io/c/dsc ungetc}}

{{dsc h2 | {{small|Wide character}}}}
{{dsc inc | cpp/io/c/dsc fgetwc}}
{{dsc inc | cpp/io/c/dsc fgetws}}
{{dsc inc | cpp/io/c/dsc fputwc}}
{{dsc inc | cpp/io/c/dsc fputws}}
{{dsc inc | cpp/io/c/dsc getwchar}}
{{dsc inc | cpp/io/c/dsc putwchar}}
{{dsc inc | cpp/io/c/dsc ungetwc}}

{{dsc h2 | Formatted input/output}}
{{dsc h2 | {{small|Byte/multibyte character}}}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/io/c/dsc vfscanf}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/io/c/dsc vfprintf}}

{{dsc h2 | {{small|Wide character}}}}
{{dsc inc | cpp/io/c/dsc fwscanf}}
{{dsc inc | cpp/io/c/dsc vfwscanf}}
{{dsc inc | cpp/io/c/dsc fwprintf}}
{{dsc inc | cpp/io/c/dsc vfwprintf}}

{{dsc h2 | File positioning}}
{{dsc inc | cpp/io/c/dsc ftell}}
{{dsc inc | cpp/io/c/dsc fgetpos}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc inc | cpp/io/c/dsc fsetpos}}
{{dsc inc | cpp/io/c/dsc rewind}}

{{dsc h2 | Error handling}}
{{dsc inc | cpp/io/c/dsc clearerr}}
{{dsc inc | cpp/io/c/dsc feof}}
{{dsc inc | cpp/io/c/dsc ferror}}
{{dsc inc | cpp/io/c/dsc perror}}

{{dsc h2 | Operations on files}}
{{dsc inc | cpp/io/c/dsc remove}}
{{dsc inc | cpp/io/c/dsc rename}}
{{dsc inc | cpp/io/c/dsc tmpfile}}
{{dsc inc | cpp/io/c/dsc tmpnam}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | cstdio}}
{{dsc hitem | Type | Definition}}
{{dsc inc | cpp/io/c/dsc FILE}}
{{dsc inc | cpp/io/c/dsc fpos_t}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc end}}

===Macros===

{{dsc begin}}
{{dsc header | cstdio}}
{{dsc macro const | stdin | nolink=true| title=stdin&lt;br&gt;stdout&lt;br&gt;stderr | expression of type {{c|FILE*}} associated with the input stream&lt;br&gt;expression of type {{c|FILE*}} associated with the output stream&lt;br&gt;expression of type {{c|FILE*}} associated with the error output stream}}
{{dsc macro const | EOF | nolink=true| integer constant expression of type {{c|int}} and negative value }}
{{dsc macro const | FOPEN_MAX | nolink=true| number of files that can be open simultaneously }}
{{dsc macro const | FILENAME_MAX | nolink=true| size needed for an array of char to hold the longest supported file name}}
{{dsc macro const | BUFSIZ | nolink=true| size of the buffer used by {{lc|std::setbuf}} }}
{{dsc macro const | _IOFBF| nolink=true| title=_IOFBF&lt;br&gt;_IOLBF&lt;br&gt;_IONBF|argument to {{lc|std::setbuf}} indicating fully buffered I/O&lt;br&gt;argument to {{lc|std::setbuf}} indicating line buffered I/O&lt;br&gt;argument to {{lc|std::setbuf}} indicating unbuffered I/O}}
{{dsc macro const | SEEK_SET | nolink=true| title=SEEK_SET&lt;br&gt;SEEK_CUR&lt;br&gt;SEEK_END | argument to {{lc|std::fseek}} indicating seeking from beginning of the file&lt;br&gt;argument to {{lc|std::fseek}} indicating seeking from the current file position&lt;br&gt;argument to {{lc|std::fseek}} indicating seeking from end of the file}}
{{dsc macro const | TMP_MAX | nolink=true| maximum number of unique filenames that can be generated by {{lc|std::tmpnam}} }}
{{dsc macro const | L_tmpnam |nolink=true|  size needed for an array of char to hold the result of {{lc|std::tmpnam}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/io |File input/output}}
{{dsc end}}

[[cs:cpp/io/c]]
[[de:cpp/io/c]]
[[es:cpp/io/c]]
[[fr:cpp/io/c]]
[[it:cpp/io/c]]
[[ja:cpp/io/c]]
[[pt:cpp/io/c]]
[[ru:cpp/io/c]]
[[zh:cpp/io/c]]</text>
      <sha1>2umildghlycpnqkhaurup8scpg51tpb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/clearerr</title>
    <ns>0</ns>
    <id>572</id>
    <revision>
      <id>67594</id>
      <parentid>57757</parentid>
      <timestamp>2014-02-12T21:31:43Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Use std namespace for FILE*.</comment>
      <text xml:space="preserve" bytes="763">{{cpp/title | clearerr}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
void clearerr( std::FILE* stream );
}}

Resets the error flags and the {{tt|EOF}} indicator for the given file stream.

===Parameters===
{{par begin}}
{{par | stream | the file to reset the error flags for }}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc feof}}
{{dsc inc | cpp/io/c/dsc perror}}
{{dsc inc | cpp/io/c/dsc ferror}}
{{dsc see c | c/io/clearerr}}
{{dsc end}}

[[cs:cpp/io/c/clearerr]]
[[de:cpp/io/c/clearerr]]
[[es:cpp/io/c/clearerr]]
[[fr:cpp/io/c/clearerr]]
[[it:cpp/io/c/clearerr]]
[[ja:cpp/io/c/clearerr]]
[[pt:cpp/io/c/clearerr]]
[[ru:cpp/io/c/clearerr]]
[[zh:cpp/io/c/clearerr]]</text>
      <sha1>jjcb269v8smuf0gg503f447sohtosif</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fclose</title>
    <ns>0</ns>
    <id>573</id>
    <revision>
      <id>84360</id>
      <parentid>75579</parentid>
      <timestamp>2016-03-17T18:53:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+mention UB on using the indeterminate pointer after the call</comment>
      <text xml:space="preserve" bytes="1147">{{cpp/title | fclose}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fclose( std::FILE* stream );
}}

Closes the given file stream. Any unwritten buffered data are flushed to the OS. Any unread buffered data are discarded.

Whether or not the operation succeeds, the stream is no longer associated with a file, and the buffer allocated by {{lc|std::setbuf}} or {{lc|std::setvbuf}}, if any, is also disassociated and deallocated if automatic allocation was used.

The behavior is undefined if the value of the pointer {{tt|stream}} is used after {{tt|fclose}} returns.

===Parameters===
{{par begin}}
{{par | stream | the file stream to close}}
{{par end}}

===Return value===
{{c|0}} on success, {{lc|EOF}} otherwise

===Example===
{{cpp/io/c/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fopen}}
{{dsc inc | cpp/io/c/dsc freopen}}
{{dsc inc | cpp/io/basic_filebuf/dsc close}}
{{dsc see c | c/io/fclose}}
{{dsc end}}

[[cs:cpp/io/c/fclose]]
[[de:cpp/io/c/fclose]]
[[es:cpp/io/c/fclose]]
[[fr:cpp/io/c/fclose]]
[[it:cpp/io/c/fclose]]
[[ja:cpp/io/c/fclose]]
[[pt:cpp/io/c/fclose]]
[[ru:cpp/io/c/fclose]]
[[zh:cpp/io/c/fclose]]</text>
      <sha1>9adoqurcepe3pa35ng8mlemzjl8bk6l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/feof</title>
    <ns>0</ns>
    <id>574</id>
    <revision>
      <id>57761</id>
      <parentid>49728</parentid>
      <timestamp>2013-06-01T06:00:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1374">{{cpp/title | feof}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int feof( std::FILE* stream );
}}

Checks if the end of the given file stream has been reached.

===Parameters===
{{par begin}}
{{par | stream | the file stream to check }}
{{par end}}

===Return value===
Nonzero value if the end of the stream has been reached, otherwise {{c|0}}.

===Notes===
This function only reports the stream state as reported by the most recent I/O operation, it does not examine the associated data source. For example, if the most recent I/O was a {{lc|std::fgetc}}, which returned the last byte of a file, {{tt|std::feof}} returns zero. The next {{lc|std::fgetc}} fails and changes the stream state to ''end-of-file''. Only then {{tt|std::feof}} returns non-zero.

In typical usage, input stream processing stops on any error; {{tt|feof}} and {{lc|std::ferror}} are then used to distinguish between different error conditions.

===Example===
{{example template|cpp/io/c/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc eof}}
{{dsc inc | cpp/io/c/dsc clearerr}}
{{dsc inc | cpp/io/c/dsc perror}}
{{dsc inc | cpp/io/c/dsc ferror}}
{{dsc see c | c/io/feof}}
{{dsc end}}

[[cs:cpp/io/c/feof]]
[[de:cpp/io/c/feof]]
[[es:cpp/io/c/feof]]
[[fr:cpp/io/c/feof]]
[[it:cpp/io/c/feof]]
[[ja:cpp/io/c/feof]]
[[pt:cpp/io/c/feof]]
[[ru:cpp/io/c/feof]]
[[zh:cpp/io/c/feof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/ferror</title>
    <ns>0</ns>
    <id>575</id>
    <revision>
      <id>90261</id>
      <parentid>84364</parentid>
      <timestamp>2017-02-17T13:57:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>dropping perror from seealso, adding the C++'s fail() accessor instead</comment>
      <text xml:space="preserve" bytes="1348">{{cpp/title | ferror}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int ferror( std::FILE* stream );
}}

Checks the given stream for errors.

===Parameters===
{{par begin}}
{{par | stream | the file stream to check }}
{{par end}}

===Return value===
Nonzero value if the file stream has errors occurred, {{c|0}} otherwise 

===Example===
{{example|code=
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;clocale&gt;
#include &lt;cwchar&gt;
 
int main(void)
{
    const char *fname = std::tmpnam(nullptr);
    std::FILE* f = std::fopen(fname, &quot;wb&quot;);
    std::fputs(&quot;\xff\xff\n&quot;, f); // not a valid UTF-8 character sequence
    std::fclose(f);

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    f = std::fopen(fname, &quot;rb&quot;);
    std::wint_t ch;
    while ((ch=std::fgetwc(f)) != WEOF) // attempt to read as UTF-8
          std::printf(&quot;%#x &quot;, ch);
    
    if (std::feof(f))
        puts(&quot;EOF indicator set&quot;);
    if (std::ferror(f))
        puts(&quot;Error indicator set&quot;);
}
|output=
Error indicator set
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc clearerr}}
{{dsc inc | cpp/io/c/dsc feof}}
{{dsc inc | cpp/io/basic_ios/dsc fail}}
{{dsc see c | c/io/ferror}}
{{dsc end}}

[[de:cpp/io/c/ferror]]
[[es:cpp/io/c/ferror]]
[[fr:cpp/io/c/ferror]]
[[it:cpp/io/c/ferror]]
[[ja:cpp/io/c/ferror]]
[[pt:cpp/io/c/ferror]]
[[ru:cpp/io/c/ferror]]
[[zh:cpp/io/c/ferror]]</text>
      <sha1>2w35is4cq1iccil96myt99b7jfr394u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fflush</title>
    <ns>0</ns>
    <id>576</id>
    <revision>
      <id>75613</id>
      <parentid>75604</parentid>
      <timestamp>2015-01-23T21:12:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>more precise description</comment>
      <text xml:space="preserve" bytes="1605">{{cpp/title | fflush}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fflush( std::FILE* stream );
}}

For output streams (and for update streams on which the last operation was output), writes any unwritten data from the {{tt|stream}}'s buffer to the associated output device.

For input streams (and for update streams on which the last operation was input), the behavior is undefined.

If {{tt|stream}} is a null pointer, all open output streams are flushed, including the ones manipulated within library packages or otherwise not directly accessible to the program.

===Parameters===
{{par begin}}
{{par | stream | the file stream to write out}}
{{par end}}

===Return value===
Returns zero on success. Otherwise {{lc|EOF}} is returned and the error indicator of the file stream is set.

===Notes===
POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fflush.html extends the specification of fflush] by defining its effects on an input stream, as long as that stream represents a file or another seekable device: in that case the POSIX file pointer is repositioned to match the C stream pointer (which effectively undoes any read buffering) and the effects of any {{lc|std::ungetc}} or {{lc|std::ungetwc}} that weren't yet read back from the stream are discarded.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fopen}}
{{dsc inc | cpp/io/c/dsc fclose}}
{{dsc see c | c/io/fflush}}
{{dsc end}}

[[de:cpp/io/c/fflush]]
[[es:cpp/io/c/fflush]]
[[fr:cpp/io/c/fflush]]
[[it:cpp/io/c/fflush]]
[[ja:cpp/io/c/fflush]]
[[pt:cpp/io/c/fflush]]
[[ru:cpp/io/c/fflush]]
[[zh:cpp/io/c/fflush]]</text>
      <sha1>ijev81xxb9b5zpl1kohs2x5y2n61pkf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fgetc</title>
    <ns>0</ns>
    <id>577</id>
    <revision>
      <id>73483</id>
      <parentid>67969</parentid>
      <timestamp>2014-11-01T03:26:54Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>make use of [[Template:cpp/io/c/example1]]</comment>
      <text xml:space="preserve" bytes="1031">{{cpp/title | fgetc | getc}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fgetc( std::FILE* stream );
int getc( std::FILE* stream );
}}

Reads the next character from the given input stream. 

===Parameters===
{{par begin}}
{{par | stream | to read the character from }}
{{par end}}

===Return value===
The obtained character on success or {{lc|EOF}} on failure. 

If the failure has been caused by end of file condition, additionally sets the ''eof'' indicator (see {{lc|std::feof()}}) on {{tt|stream}}. If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|std::ferror()}}) on {{tt|stream}}.

===Example===
{{cpp/io/c/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc gets}}
{{dsc inc | cpp/io/c/dsc fputc}}
{{dsc inc | cpp/io/c/dsc ungetc}}
{{dsc see c | c/io/fgetc | fgetc | getc}}
{{dsc end}}

[[de:cpp/io/c/fgetc]]
[[es:cpp/io/c/fgetc]]
[[fr:cpp/io/c/fgetc]]
[[it:cpp/io/c/fgetc]]
[[ja:cpp/io/c/fgetc]]
[[pt:cpp/io/c/fgetc]]
[[ru:cpp/io/c/fgetc]]
[[zh:cpp/io/c/fgetc]]</text>
      <sha1>hylsn9r69apfgdnzr6dxzpc0flb7c9w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fgetpos</title>
    <ns>0</ns>
    <id>578</id>
    <revision>
      <id>57767</id>
      <parentid>49732</parentid>
      <timestamp>2013-06-01T06:00:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1050">{{cpp/title | fgetpos}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fgetpos( std::FILE* stream, std::fpos_t* pos );
}}

Obtains the file position indicator and the current parse state (if any) for the file stream {{tt|stream}} and stores them in the object pointed to by {{tt|pos}}. The value stored is only meaningful as the input to {{lc|std::fsetpos}}.

===Parameters===
{{par begin}}
{{par | stream | file stream to examine}}
{{par | pos | pointer to a {{c|fpos_t}} object to store the file position indicator to}}
{{par end}}

===Return value===
{{c|0}} upon success, nonzero value otherwise. Also sets {{lc|errno}} on failure.

===Example===
{{example |
| code=
| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc ftell}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc inc | cpp/io/c/dsc fsetpos}}
{{dsc see c | c/io/fgetpos}}
{{dsc end}}

[[de:cpp/io/c/fgetpos]]
[[es:cpp/io/c/fgetpos]]
[[fr:cpp/io/c/fgetpos]]
[[it:cpp/io/c/fgetpos]]
[[ja:cpp/io/c/fgetpos]]
[[pt:cpp/io/c/fgetpos]]
[[ru:cpp/io/c/fgetpos]]
[[zh:cpp/io/c/fgetpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fgets</title>
    <ns>0</ns>
    <id>579</id>
    <revision>
      <id>83796</id>
      <parentid>83795</parentid>
      <timestamp>2016-03-08T14:03:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+std::</comment>
      <text xml:space="preserve" bytes="2121">{{cpp/title | fgets}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
char* fgets( char* str, int count, std::FILE* stream );
}}

Reads at most {{c|count - 1}} characters from the given file stream and stores them in the character array pointed to by {{tt|str}}. Parsing stops if end-of-file occurs or a newline character is found, in which case {{tt|str}} will contain that newline character. If no errors occur, writes a null character at the position immediately after the last character written to {{tt|str}}.

===Parameters===
{{par begin}}
{{par | str | pointer to an element of a char array}}
{{par | count | maximum number of characters to write (typically the length of {{tt|str}})}}
{{par | stream | file stream to read the data from}}
{{par end}}

===Return value===
{{tt|str}} on success, null pointer on failure.

If the failure has been caused by end-of-file condition, additionally sets the ''eof'' indicator (see {{lc|std::feof()}}) on {{tt|stream}}. The contents of the array pointed to by {{tt|str}} are not altered in this case.

If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|std::ferror()}}) on {{tt|stream}}. The contents of the array pointed to by {{tt|str}} are indeterminate (it may not even be null-terminated).

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;

int main()
{
    std::FILE* tmpf = std::tmpfile();
    std::fputs(&quot;Alan Turing\n&quot;, tmpf);
    std::fputs(&quot;John von Neumann\n&quot;, tmpf);
    std::fputs(&quot;Alonzo Church\n&quot;, tmpf);

    std::rewind(tmpf);
    char buf[8];
    while (std::fgets(buf, sizeof buf, tmpf) != NULL) {
        std::cout &lt;&lt; '&quot;' &lt;&lt; buf &lt;&lt; '&quot;' &lt;&lt; '\n';
    }
}
 | output=
&quot;Alan Tu&quot;
&quot;ring
&quot;
&quot;John vo&quot;
&quot;n Neuma&quot;
&quot;nn
&quot;
&quot;Alonzo &quot;
&quot;Church
&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/io/c/dsc gets}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc see c | c/io/fgets}}
{{dsc end}}

[[de:cpp/io/c/fgets]]
[[es:cpp/io/c/fgets]]
[[fr:cpp/io/c/fgets]]
[[it:cpp/io/c/fgets]]
[[ja:cpp/io/c/fgets]]
[[pt:cpp/io/c/fgets]]
[[ru:cpp/io/c/fgets]]
[[zh:cpp/io/c/fgets]]</text>
      <sha1>tgrijjqylnou8yzsnsx7s2fjp01qtpb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fgetwc</title>
    <ns>0</ns>
    <id>2638</id>
    <revision>
      <id>67589</id>
      <parentid>62365</parentid>
      <timestamp>2014-02-12T21:22:34Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Use std namespace for FILE*.</comment>
      <text xml:space="preserve" bytes="1029">{{cpp/title | fgetwc }}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl |
wint_t fgetwc( std::FILE* stream );
}}
{{dcl |
wint_t getwc( std::FILE* stream );
}}
{{dcl end}}

Reads the next wide character from the given input stream. {{c|getwc()}} may be implemented as a macro and may evaluate {{tt|stream}} more than once.

===Parameters===
{{par begin}}
{{par | stream | to read the wide character from }}
{{par end}}

===Return value===
The next wide character from the stream or {{c|WEOF}} if an error has occurred or the end of file has been reached. If an encoding error occurred, {{lc|errno}} is set to {{tt|EILSEQ}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fgetc}}
{{dsc inc | cpp/io/c/dsc fgetws}}
{{dsc inc | cpp/io/c/dsc fputwc}}
{{dsc inc | cpp/io/c/dsc ungetwc}}
{{dsc see c | c/io/fgetwc}}
{{dsc end}}

[[de:cpp/io/c/fgetwc]]
[[es:cpp/io/c/fgetwc]]
[[fr:cpp/io/c/fgetwc]]
[[it:cpp/io/c/fgetwc]]
[[ja:cpp/io/c/fgetwc]]
[[pt:cpp/io/c/fgetwc]]
[[ru:cpp/io/c/fgetwc]]
[[zh:cpp/io/c/fgetwc]]</text>
      <sha1>p0h3buqcowah721tvared7awtooslks</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fgetws</title>
    <ns>0</ns>
    <id>2639</id>
    <revision>
      <id>74490</id>
      <parentid>73769</parentid>
      <timestamp>2014-12-18T12:00:08Z</timestamp>
      <contributor>
        <ip>195.191.246.124</ip>
      </contributor>
      <comment>Error correction: in the function name was fwgets and should be fgetws</comment>
      <text xml:space="preserve" bytes="1050">{{cpp/title | fgetws}}
{{cpp/io/c/navbar}}
{{ddcl | header=cwchar |
wchar_t* fgetws( wchar_t* str, int count, std::FILE* stream );
}}

Reads at most {{c|count - 1}} wide characters from the given file stream and stores them in {{tt|str}}. The produced wide string is always null-terminated. Parsing stops if end-of-file occurs or a newline wide character is found, in which case {{tt|str}} will contain that wide newline character.

===Parameters===
{{par begin}}
{{par | str | wide string to read the characters to}}
{{par | count | the length of {{tt|str}}}}
{{par | stream | file stream to read the data from}}
{{par end}}

===Return value===
{{tt|str}} on success, {{lc|NULL}} on an error

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fwscanf}}
{{dsc inc | cpp/io/c/dsc fgetwc}}
{{dsc inc | cpp/io/c/dsc fputws}}
{{dsc see c | c/io/fgetws}}
{{dsc end}}

[[de:cpp/io/c/fgetws]]
[[es:cpp/io/c/fgetws]]
[[fr:cpp/io/c/fgetws]]
[[it:cpp/io/c/fgetws]]
[[ja:cpp/io/c/fgetws]]
[[pt:cpp/io/c/fgetws]]
[[ru:cpp/io/c/fgetws]]
[[zh:cpp/io/c/fgetws]]</text>
      <sha1>8w00gn3gzt344y5xx8yixkdkz6a82t5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fopen</title>
    <ns>0</ns>
    <id>580</id>
    <revision>
      <id>91106</id>
      <parentid>91104</parentid>
      <timestamp>2017-03-19T08:30:08Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>D41D8CD98F moved page [[Cppreference talk:cpp/io/c/fopen]] to [[cpp/io/c/fopen]] over redirect: rvv</comment>
      <text xml:space="preserve" bytes="1742">{{cpp/title | fopen}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
std::FILE* fopen( const char* filename, const char* mode );
}}

Opens a file indicated by {{tt|filename}} and returns a file stream associated with that file. {{tt|mode}} is used to determine the file access mode. 

===Parameters===
{{par begin}}
{{par | filename | file name to associate the file stream to}}
{{par | mode | null-terminated character string determining file access mode

{{cpp/io/c/file access flags}}}}
{{par end}}

===Return value===
If successful, returns a pointer to the object that controls the opened file stream, with both eof and error bits cleared. The stream is fully buffered unless {{spar|filename}} refers to an interactive device.

On error, returns a null pointer. [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html POSIX requires] that {{lc|errno}} is set in this case.

===Notes===
The format of {{tt|filename}} is implementation-defined, and does not necessarily refer to a file (e.g. it may be the console or another device accessible through filesystem API). On platforms that support them, {{tt|filename}} may include absolute or relative filesystem path.

For portable directory and file naming, see [[cpp/filesystem|C++ filesystem library]] or [http://www.boost.org/doc/libs/1_56_0/libs/filesystem/doc/index.htm boost.filesystem]

===Example===
{{cpp/io/c/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fclose}}
{{dsc inc | cpp/io/c/dsc fflush}}
{{dsc inc | cpp/io/c/dsc freopen}}
{{dsc see c | c/io/fopen}}
{{dsc end}}

[[de:cpp/io/c/fopen]]
[[es:cpp/io/c/fopen]]
[[fr:cpp/io/c/fopen]]
[[it:cpp/io/c/fopen]]
[[ja:cpp/io/c/fopen]]
[[pt:cpp/io/c/fopen]]
[[ru:cpp/io/c/fopen]]
[[zh:cpp/io/c/fopen]]</text>
      <sha1>d16ilo0uzmyzewqkg6yk1sfrcc59os7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fprintf</title>
    <ns>0</ns>
    <id>581</id>
    <revision>
      <id>89312</id>
      <parentid>88272</parentid>
      <timestamp>2017-01-17T18:36:16Z</timestamp>
      <contributor>
        <ip>105.159.228.139</ip>
      </contributor>
      <comment>Summary</comment>
      <text xml:space="preserve" bytes="5484">{{cpp/title | printf | fprintf | sprintf | snprintf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cstdio}}
{{dcl | num=1 | 
int printf( const char* format, ... );
}}
{{dcl | num=2 |
int fprintf( std::FILE* stream, const char* format, ... );
}}
{{dcl | num=3 |
int sprintf( char* buffer, const char* format, ... );
}}
{{dcl | num=4 | since=c++11 |
int snprintf( char* buffer, std::size_t buf_size, const char* format, ... );
}}
{{dcl end}}

Loads the data from the given locations, converts them to character string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to {{lc|stdout}}.
@2@ Writes the results to a file stream {{tt|stream}}.
@3@ Writes the results to a character string {{tt|buffer}}.
@4@ Writes the results to a character string {{tt|buffer}}. At most {{tt|buf_size}} - 1 characters are written. The resulting character string will be terminated with a null character, unless {{tt|buf_size}} is zero. If {{tt|buf_size}} is zero, nothing is written and {{tt|buffer}} may be a null pointer, however the return value (number of bytes that would be written) is still calculated and returned.

If a call to {{tt|sprintf}} or {{tt|snprintf}} causes copying to take place between objects that overlap, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | stream | output file stream to write to}}
{{par | buffer | pointer to a character string to write to}}
{{par | buf_size | up to buf_size - 1 characters may be written, plus the null terminator}}
{{par | format | pointer to a null-terminated multibyte string specifying how to interpret the data.
{{cpp/io/c/printf format}}
}}
{{par | ... | arguments specifying data to print. If any argument is not the type expected by the corresponding conversion specifier, or if there are fewer arguments than required by {{tt|format}}, the behavior is undefined. If there are more arguments than required by {{tt|format}}, the extraneous arguments are evaluated and ignored}}
{{par end}}

===Return value===
@1-2@ Number of characters written if successful or a negative value if an error occurred.

@3@ Number of characters written if successful (not including the terminating null character) or a negative value if an error occurred.

@4@ Number of characters that would have been written for a sufficiently large buffer if successful (not including the terminating null character), or a negative value if an error occurred. Thus, the (null-terminated) output has been completely written if and only if the returned value is nonnegative and less than  {{tt|buf_size}}.

===Notes===
{{cpp/io/c/printf posix note}}

Calling {{tt|std::snprintf}} with zero {{tt|buf_size}} and null pointer for {{tt|buffer}} is useful to determine the necessary buffer size to contain the output:
{{source|1=
const char *fmt = &quot;sqrt(2) = %f&quot;;
int sz = std::snprintf(nullptr, 0, fmt, std::sqrt(2));
std::vector&lt;char&gt; buf(sz + 1); // note +1 for null terminator
std::snprintf(&amp;buf[0], buf.size(), fmt, std::sqrt(2));
}}

===Example===
{{example
 | code=
#include &lt;cstdio&gt;
#include &lt;limits&gt;
#include &lt;cstdint&gt;
#include &lt;cinttypes&gt;

int main()
{
    std::printf(&quot;Strings:\n&quot;);

    const char* s = &quot;Hello&quot;;
    std::printf(&quot;\t[%10s]\n\t[%-10s]\n\t[%*s]\n\t[%-10.*s]\n\t[%-*.*s]\n&quot;,
        s, s, 10, s, 4, s, 10, 4, s);

    std::printf(&quot;Characters:\t%c %%\n&quot;, 65);

    std::printf(&quot;Integers\n&quot;);
    std::printf(&quot;Decimal:\t%i %d %.6i %i %.0i %+i %u\n&quot;, 1, 2, 3, 0, 0, 4, -1);
    std::printf(&quot;Hexadecimal:\t%x %x %X %#x\n&quot;, 5, 10, 10, 6);
    std::printf(&quot;Octal:\t%o %#o %#o\n&quot;, 10, 10, 4);

    std::printf(&quot;Floating point\n&quot;);
    std::printf(&quot;Rounding:\t%f %.0f %.32f\n&quot;, 1.5, 1.5, 1.5);
    std::printf(&quot;Padding:\t%05.2f %.2f %5.2f\n&quot;, 1.5, 1.5, 1.5);
    std::printf(&quot;Scientific:\t%E %e\n&quot;, 1.5, 1.5);
    std::printf(&quot;Hexadecimal:\t%a %A\n&quot;, 1.5, 1.5);
    std::printf(&quot;Special values:\t0/0=%g 1/0=%g\n&quot;, 0.0/0.0, 1.0/0.0);

    std::printf(&quot;Variable width control:\n&quot;);
    std::printf(&quot;right-justified variable width: '%*c'\n&quot;, 5, 'x');
    int r = std::printf(&quot;left-justified variable width : '%*c'\n&quot;, -5, 'x');
    std::printf(&quot;(the last printf printed %d characters)\n&quot;, r);

    // fixed-width types
    std::uint32_t val = std::numeric_limits&lt;std::uint32_t&gt;::max();
    std::printf(&quot;Largest 32-bit value is %&quot; PRIu32 &quot; or %#&quot; PRIx32 &quot;\n&quot;, val, val);
}
 | output=
Strings:
        [     Hello]
        [Hello     ]
        [     Hello]
        [Hell      ]
        [Hell      ]
Characters:     A %
Integers
Decimal:        1 2 000003 0  +4 4294967295
Hexadecimal:    5 a A 0x6
Octal:  12 012 04
Floating point
Rounding:       1.500000 2 1.30000000000000004440892098500626
Padding:        01.50 1.50  1.50
Scientific:     1.500000E+00 1.500000e+00
Hexadecimal:    0x1.8p+0 0X1.8P+0
Special values: 0/0=nan 1/0=inf
Variable width control:
right-justified variable width: '    x'
left-justified variable width : 'x    '
(the last printf printed 40 characters)
Largest 32-bit value is 4294967295 or 0xffffffff
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fwprintf}}
{{dsc inc | cpp/io/c/dsc vfprintf}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/utility/dsc to_chars}} 
{{dsc see c | c/io/fprintf | printf | fprintf | sprintf | snprintf}}
{{dsc end}}

[[de:cpp/io/c/fprintf]]
[[es:cpp/io/c/fprintf]]
[[fr:cpp/io/c/fprintf]]
[[it:cpp/io/c/fprintf]]
[[ja:cpp/io/c/fprintf]]
[[pt:cpp/io/c/fprintf]]
[[ru:cpp/io/c/fprintf]]
[[zh:cpp/io/c/fprintf]]</text>
      <sha1>91zgzc19b39nm2hsf9fqdf743ltf7c5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fputc</title>
    <ns>0</ns>
    <id>582</id>
    <revision>
      <id>75611</id>
      <parentid>69825</parentid>
      <timestamp>2015-01-23T20:28:10Z</timestamp>
      <contributor>
        <username>A3f.at</username>
        <id>3652</id>
      </contributor>
      <minor/>
      <comment>added missing 2nd param</comment>
      <text xml:space="preserve" bytes="1452">{{cpp/title | fputc | putc}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fputc( int ch, std::FILE* stream );
int putc( int ch, std::FILE* stream );
}}

Writes a character {{tt|ch}} to the given output stream {{tt|stream}}.

Internally, the character is converted to {{c|unsigned char}} just before being written.

In C, {{c|putc()}} may be implemented as a macro, which is disallowed in C++. Therefore calls to {{c|std::fputc()}} and {{c|std::putc()}} always have the same effect.

===Parameters===
{{par begin}}
{{par | ch | character to be written}}
{{par | stream | output stream}}
{{par end}}

===Return value===
On success, returns the written character.

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|std::ferror()}}) on {{lc|stream}}.

===Example===
{{example
|code=
#include &lt;cstdio&gt;

int main()
{
    for (char c = 'a'; c != 'z'; c++)
        std::putc(c, stdout);
    std::putc('\n', stdout);

    // putchar return value is not equal to the argument
    int r = 0x1070;
    std::printf(&quot;\n0x%x\n&quot;, r);
    r = std::putchar(r);
    std::printf(&quot;\n0x%x\n&quot;, r);
}
|output=
abcdefghijklmnopqrstuvwxy
0x1070
p
0x70
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc putchar}}
{{dsc see c | c/io/fputc | fputc | putc}}
{{dsc end}}

[[de:cpp/io/c/fputc]]
[[es:cpp/io/c/fputc]]
[[fr:cpp/io/c/fputc]]
[[it:cpp/io/c/fputc]]
[[ja:cpp/io/c/fputc]]
[[pt:cpp/io/c/fputc]]
[[ru:cpp/io/c/fputc]]
[[zh:cpp/io/c/fputc]]</text>
      <sha1>iy0y6zypsypczsjo5ak9ibgpxsccbsv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fputs</title>
    <ns>0</ns>
    <id>583</id>
    <revision>
      <id>85758</id>
      <parentid>82745</parentid>
      <timestamp>2016-05-13T15:52:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+details/example</comment>
      <text xml:space="preserve" bytes="1661">{{cpp/title | fputs}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fputs( const char* str, std::FILE* stream );
}}

Writes every character from the null-terminated string {{tt|str}} to the output stream {{tt|stream}}, as if by repeatedly executing {{lc|std::fputc}}.

The terminating null character from {{tt|str}} is not written.

===Parameters===
{{par begin}}
{{par | str | null-terminated character string to be written}}
{{par | stream | output stream}}
{{par end}}

===Return value===
On success, returns a non-negative value

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|std::ferror}}) on {{tt|stream}}.

===Notes===
The related function {{lc|std::puts}} appends a newline character to the output, while {{tt|std::fputs}} writes the string unmodified.

Different implementations return different non-negative numbers: some return the last character written, some return the number of characters written (or INT_MAX if the string was longer than that), some simply return a non-negative constant such as zero.

===Example===
{{example | code=
#include &lt;cstdio&gt;
 
int main(void)
{
    int rc = std::fputs(&quot;Hello World&quot;, stdout);

    if (rc == EOF)
       std::perror(&quot;fputs()&quot;); // POSIX requires that errno is set
}
 | output=
Hello World
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/io/c/dsc puts}}
{{dsc inc | cpp/io/c/dsc fputws}}
{{dsc inc | cpp/io/c/dsc fgets}}
{{dsc see c | c/io/fputs}}
{{dsc end}}

[[de:cpp/io/c/fputs]]
[[es:cpp/io/c/fputs]]
[[fr:cpp/io/c/fputs]]
[[it:cpp/io/c/fputs]]
[[ja:cpp/io/c/fputs]]
[[pt:cpp/io/c/fputs]]
[[ru:cpp/io/c/fputs]]
[[zh:cpp/io/c/fputs]]</text>
      <sha1>kfm3k0n2qtm0op6fuu6h10h85i6127j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fputwc</title>
    <ns>0</ns>
    <id>2640</id>
    <revision>
      <id>67601</id>
      <parentid>62366</parentid>
      <timestamp>2014-02-12T21:43:04Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Use std namespace for FILE*.</comment>
      <text xml:space="preserve" bytes="992">{{cpp/title | fputwc }}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | 
wint_t fputwc( wchar_t ch, std::FILE* stream );
}}
{{dcl |
wint_t putwc( wchar_t ch, std::FILE* stream );
}}
{{dcl end}}

Writes a wide character {{tt|ch}} to the given output stream {{tt|stream}}. {{c|putwc()}} may be implemented as a macro and may evaluate {{tt|stream}} more than once.

===Parameters===
{{par begin}}
{{par | ch | wide character to be written}}
{{par | stream | the output stream}}
{{par end}}

===Return value===
{{tt|ch}} on success, {{c|WEOF}} on failure. If an encoding error occurs, {{lc|errno}} is set to {{tt|EILSEQ}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fputc}}
{{dsc inc | cpp/io/c/dsc fputws}}
{{dsc inc | cpp/io/c/dsc fgetwc}}
{{dsc see c | c/io/fputwc}}
{{dsc end}}

[[de:cpp/io/c/fputwc]]
[[es:cpp/io/c/fputwc]]
[[fr:cpp/io/c/fputwc]]
[[it:cpp/io/c/fputwc]]
[[ja:cpp/io/c/fputwc]]
[[pt:cpp/io/c/fputwc]]
[[ru:cpp/io/c/fputwc]]
[[zh:cpp/io/c/fputwc]]</text>
      <sha1>0e3dlx8uvggc26782aslhe1c7akkl39</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fputws</title>
    <ns>0</ns>
    <id>2641</id>
    <revision>
      <id>85761</id>
      <parentid>67602</parentid>
      <timestamp>2016-05-13T16:05:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail +example</comment>
      <text xml:space="preserve" bytes="1376">{{cpp/title | fputws}}
{{cpp/io/c/navbar}}
{{ddcl | header=cwchar |
int fputws( const wchar_t* str, std::FILE* stream );
}}

Writes every wide character from the null-terminated wide string {{tt|str}} to the output stream {{tt|stream}}, as if by repeatedly executing {{lc|std::fputwc}}.

The terminating null wide character from {{tt|str}} is not written.

===Parameters===
{{par begin}}
{{par | str | null-terminated wide string to be written}}
{{par | stream | output stream}}
{{par end}}

===Return value===
On success, returns a non-negative value

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|std::ferror}}) on {{tt|stream}}.

===Example===
{{example | code=
#include &lt;clocale&gt;
#include &lt;cstdio&gt;
#include &lt;cwchar&gt;
 
int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    int rc = std::fputws(L&quot;御休みなさい&quot;, stdout);

    if (rc == EOF)
       std::perror(&quot;fputws()&quot;); // POSIX requires that errno is set
}
 | output=
御休みなさい
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc inc | cpp/io/c/dsc fwprintf}}
{{dsc inc | cpp/io/c/dsc fputws}}
{{dsc inc | cpp/io/c/dsc fgetws}}
{{dsc see c | c/io/fputws}}
{{dsc end}}

[[de:cpp/io/c/fputws]]
[[es:cpp/io/c/fputws]]
[[fr:cpp/io/c/fputws]]
[[it:cpp/io/c/fputws]]
[[ja:cpp/io/c/fputws]]
[[pt:cpp/io/c/fputws]]
[[ru:cpp/io/c/fputws]]
[[zh:cpp/io/c/fputws]]</text>
      <sha1>qr68cgwbuxro65p2csvh4o9sqqqt2ev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fread</title>
    <ns>0</ns>
    <id>584</id>
    <revision>
      <id>77066</id>
      <parentid>73644</parentid>
      <timestamp>2015-03-13T19:19:00Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2276">{{cpp/title | fread}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
std::size_t fread( void* buffer, std::size_t size, std::size_t count, std::FILE* stream );
}}

Reads up to {{tt|count}} objects into the array {{tt|buffer}} from the given input stream {{tt|stream}} as if by calling {{lc|std::fgetc}} {{tt|size}} times for each object, and storing the results, in the order obtained, into the successive positions of {{tt|buffer}}, which is reinterpreted as an array of {{c|unsigned char}}. The file position indicator for the stream is advanced by the number of characters read.

If the objects are not {{concept|TriviallyCopyable}}, the behavior is undefined.

If an error occurs, the resulting value of the file position indicator for the stream is
indeterminate. If a partial element is read, its value is indeterminate.

===Parameters===
{{par begin}}
{{par | buffer | pointer to the first object in the array to be read}}
{{par | size | size of each object in bytes}}
{{par | count | the number of the objects to be read}}
{{par | stream | input file stream to read from}}
{{par end}}

===Return value===
Number of objects read successfully, which may be less than {{tt|count}} if an error or end-of-file condition occurs. 

If {{tt|size}} or {{tt|count}} is zero, {{tt|fread}} returns zero and performs no other action.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;
int main()
{
    // prepare file
    std::ofstream(&quot;test.txt&quot;) &lt;&lt; 1 &lt;&lt; ' ' &lt;&lt; 2 &lt;&lt; '\n';
    std::FILE* f = std::fopen(&quot;test.txt&quot;, &quot;r&quot;);

    std::vector&lt;char&gt; buf(4); // char is trivally copyable
    std::fread(&amp;buf[0], sizeof buf[0], buf.size(), f);

    for(char n : buf)
        std::cout &lt;&lt; n;

    std::vector&lt;std::string&gt; buf2; // string is not trivially copyable
// this would result in undefined behavior
//    std::fread(&amp;buf2[0], sizeof buf2[0], buf2.size(), f);
}
| output=
1 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/io/c/dsc fgets}}
{{dsc inc | cpp/io/c/dsc fwrite}}
{{dsc see c | c/io/fread}}
{{dsc end}}

[[de:cpp/io/c/fread]]
[[es:cpp/io/c/fread]]
[[fr:cpp/io/c/fread]]
[[it:cpp/io/c/fread]]
[[ja:cpp/io/c/fread]]
[[pt:cpp/io/c/fread]]
[[ru:cpp/io/c/fread]]
[[zh:cpp/io/c/fread]]</text>
      <sha1>2ngni727tc4sndfoxjuq3ca0b3ys47o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/freopen</title>
    <ns>0</ns>
    <id>585</id>
    <revision>
      <id>75583</id>
      <parentid>75581</parentid>
      <timestamp>2015-01-22T16:22:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note orientation reset</comment>
      <text xml:space="preserve" bytes="1878">{{cpp/title | freopen}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
std::FILE* freopen( const char* filename, const char* mode, std::FILE* stream );
}}

First, attempts to close the file associated with {{tt|stream}}, ignoring any errors. Then, if {{tt|filename}} is not null, attempts to open the file specified by {{tt|filename}} using {{tt|mode}} as if by {{lc|fopen}}, and associates that file with the file stream pointed to by {{tt|stream}}. If {{tt|filename}} is a null pointer, then the function attempts to reopen the file that is already associated with {{tt|stream}} (it is implementation defined which mode changes are allowed in this case)

===Parameters===
{{par begin}}
{{par | filename | file name to associate the file stream to}}
{{par | mode | null-terminated character string determining new file access mode

{{cpp/io/c/file access flags}}}}
{{par | stream | the file stream to modify}}
{{par end}}

===Return value===
{{tt|stream}} on success, {{lc|NULL}} on failure

===Notes===
{{tt|freopen}} is the only way to change the narrow/wide orientation of a stream once it has been established by an I/O operation or by {{lc|std::fwide}}.

===Example===
{{example | The following code redirects {{tt|stdout}} to a file
 | code=
#include &lt;cstdio&gt;

int main()
{
    std::printf(&quot;stdout is printed to console\n&quot;);
    if(std::freopen(&quot;redir.txt&quot;, &quot;w&quot;, stdout)) {
        std::printf(&quot;stdout is redirected to a file\n&quot;); // this is written to redir.txt
        std::fclose(stdout);
    }
}
 | output=
stdout is printed to console
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fopen}}
{{dsc inc | cpp/io/c/dsc fclose}}
{{dsc see c | c/io/freopen}}
{{dsc end}}

[[de:cpp/io/c/freopen]]
[[es:cpp/io/c/freopen]]
[[fr:cpp/io/c/freopen]]
[[it:cpp/io/c/freopen]]
[[ja:cpp/io/c/freopen]]
[[pt:cpp/io/c/freopen]]
[[ru:cpp/io/c/freopen]]
[[zh:cpp/io/c/freopen]]</text>
      <sha1>q8br3gy4w45hpdecwxcno3c95npxvhn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fscanf</title>
    <ns>0</ns>
    <id>586</id>
    <revision>
      <id>88750</id>
      <parentid>88277</parentid>
      <timestamp>2016-12-08T19:05:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>upd return value to use matching failure vs input failure (from the update made to the template)</comment>
      <text xml:space="preserve" bytes="3636">{{cpp/title | scanf | fscanf | sscanf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cstdio}}
{{dcl | num=1 |
​int scanf( const char* format, ... );​
}}
{{dcl | num=2 |
int fscanf( std::FILE* stream, const char* format, ... );
}}
{{dcl | num=3 |
int sscanf( const char* buffer, const char* format, ... );
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into given locations.

@1@ Reads the data from {{lc|stdin}}
@2@ Reads the data from file stream {{tt|stream}}
@3@ Reads the data from null-terminated character string {{tt|buffer}}

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated character string to read from}}
{{par | format | pointer to a null-terminated character string specifying how to read the input.
{{cpp/io/c/scanf format}}
}}
{{par | ... | receiving arguments}}
{{par end}}

===Return value===
Number of receiving arguments successfully assigned (which may be zero in case a matching failure occurred before the first receiving argument was assigned), or {{lc|EOF}} if input failure occurs before the first receiving argument was assigned.

===Notes===
Because most conversion specifiers first consume all consecutive whitespace, code such as 
{{source|1=
std::scanf(&quot;%d&quot;, &amp;a);
std::scanf(&quot;%d&quot;, &amp;b);
}}
will read two integers that are entered on different lines (second %d will consume the newline left over by the first) or on the same line, separated by spaces or tabs (second %d will consume the spaces or tabs).

The conversion specifiers that do not consume leading whitespace, such as %c, can be made to do so by using a whitespace character in the format string: {{source|1=
std::scanf(&quot;%d&quot;, &amp;a);
std::scanf(&quot; %c&quot;, &amp;c); // ignore the endline after %d, then read a char
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;cstdio&gt;

int main()
{
    int i, j;
    float x, y;
    char str1[10], str2[4];
    wchar_t warr[2];
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);

    char input[] = u8&quot;25 54.32E-1 Thompson 56789 0123 56ß水&quot;;
    // parse as follows:
    // %d: an integer 
    // %f: a floating-point value
    // %9s: a string of at most 9 non-whitespace characters
    // %2d: two-digit integer (digits 5 and 6)
    // %f: a floating-point value (digits 7, 8, 9)
    // %*d an integer which isn't stored anywhere
    // ' ': all consecutive whitespace
    // %3[0-9]: a string of at most 3 digits (digits 5 and 6)
    // %2lc: two wide characters, using multibyte to wide conversion
    int ret = std::sscanf(input, &quot;%d%f%9s%2d%f%*d %3[0-9]%2lc&quot;,
                     &amp;i, &amp;x, str1, &amp;j, &amp;y, str2, warr);

    std::cout &lt;&lt; &quot;Converted &quot; &lt;&lt; ret &lt;&lt; &quot; fields:\n&quot;
              &lt;&lt; &quot;i = &quot; &lt;&lt; i &lt;&lt; &quot;\nx = &quot; &lt;&lt; x &lt;&lt; '\n'
              &lt;&lt; &quot;str1 = &quot; &lt;&lt; str1 &lt;&lt; &quot;\nj = &quot; &lt;&lt; j &lt;&lt; '\n'
              &lt;&lt; &quot;y = &quot; &lt;&lt; y &lt;&lt; &quot;\nstr2 = &quot; &lt;&lt; str2 &lt;&lt; '\n'
              &lt;&lt; std::hex &lt;&lt; &quot;warr[0] = U+&quot; &lt;&lt; warr[0]
              &lt;&lt; &quot; warr[1] = U+&quot; &lt;&lt; warr[1] &lt;&lt; '\n';
}
 | output=
Converted 7 fields:
i = 25
x = 5.432
str1 = Thompson
j = 56
y = 789
str2 = 56
warr[0] = U+df warr[1] = U+6c34
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc vfscanf}}
{{dsc inc | cpp/io/c/dsc fgets}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/utility/dsc from_chars}} 
{{dsc see c | c/io/fscanf | scanf | fscanf | sscanf}}
{{dsc end}}

[[cs:cpp/io/c/fscanf]]
[[de:cpp/io/c/fscanf]]
[[es:cpp/io/c/fscanf]]
[[fr:cpp/io/c/fscanf]]
[[it:cpp/io/c/fscanf]]
[[ja:cpp/io/c/fscanf]]
[[pt:cpp/io/c/fscanf]]
[[ru:cpp/io/c/fscanf]]
[[zh:cpp/io/c/fscanf]]</text>
      <sha1>bfxzpcdkds16ub02y1mhyiia8tnj9f5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fseek</title>
    <ns>0</ns>
    <id>587</id>
    <revision>
      <id>88814</id>
      <parentid>88813</parentid>
      <timestamp>2016-12-14T15:30:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/rw/rb in the example fopen since it's talking about bytes</comment>
      <text xml:space="preserve" bytes="3509">{{cpp/title | fseek }}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fseek( std::FILE* stream, long offset, int origin );
}}

Sets the file position indicator for the file stream {{tt|stream}}.

If the {{tt|stream}} is open in binary mode, the new position is exactly {{tt|offset}} bytes measured from the beginning of the file if {{tt|origin}} is {{lc|SEEK_SET}}, from the current file position if {{tt|origin}} is {{lc|SEEK_CUR}}, and from the end of the file if {{tt|origin}} is {{lc|SEEK_END}}. Binary streams are not required to support {{lc|SEEK_END}}, in particular if additional null bytes are output.

If the {{tt|stream}} is open in text mode, the only supported values for {{tt|offset}} are zero (which works with any {{tt|origin}}) and a value returned by an earlier call to {{lc|std::ftell}} on a stream associated with the same file (which only works with {{tt|origin}} of {{lc|SEEK_SET}}).

If the {{tt|stream}} is wide-oriented, the restrictions of both text and binary streams apply (result of {{lc|std::ftell}} is allowed with SEEK_SET and zero offset is allowed from SEEK_SET and SEEK_CUR, but not SEEK_END)

In addition to changing the file position indicator, {{tt|fseek}} undoes the effects of {{lc|std::ungetc}} and clears the end-of-file status, if applicable.

If a read or write error occurs, the error indicator for the stream ({{lc|std::ferror}}) is set and the file position is unaffected.

===Parameters===
{{par begin}}
{{par | stream | file stream to modify}}
{{par | offset | number of characters to shift the position relative to origin}} 
{{par | origin | position to which {{tt|offset}} is added. It can have one of the following values: {{lc|SEEK_SET}}, {{lc|SEEK_CUR}}, {{lc|SEEK_END}}}} 
{{par end}}

===Return value===
{{c|0}} upon success, nonzero value otherwise.

===Notes===
After seeking to a non-end position in a wide stream, the next call to any output function may render the remainder of the file undefined, e.g. by outputting a multibyte sequence of a different length.

POSIX allows seeking beyond the existing end of file. If an output is performed after this seek, any read from the gap will return zero bytes. Where supported by the filesystem, this creates a ''sparse file''.

POSIX also requires that fseek first performs {{lc|fflush}} if there are any unwritten data (but whether the shift state is restored is implementation-defined). The standard C++ file streams guarantee both flushing and unshifting: {{lc|std::basic_filebuf::seekoff}}

===Example===
{{example
 |
 | code=
#include &lt;cstdio&gt;
#include &lt;cstdint&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;cassert&gt;

int main()
{
    std::ofstream(&quot;dummy.nfo&quot;) &lt;&lt; &quot;sample data\n&quot;;


    std::FILE* fp = std::fopen(&quot;dummy.nfo&quot;, &quot;rb&quot;);
    assert(fp);

    std::fseek(fp, 0, SEEK_END); // seek to end
    std::size_t filesize = std::ftell(fp);

    std::fseek(fp, 0, SEEK_SET); // seek to start
    std::vector&lt;uint8_t&gt; buffer(filesize);
    std::fread(buffer.data(), sizeof(uint8_t), buffer.size(), fp);

    std::fclose(fp);
    std::printf(&quot;i've read %zi bytes\n&quot;, filesize);
}
| output=
i've read 12 bytes
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fsetpos}}
{{dsc inc | cpp/io/c/dsc fgetpos}}
{{dsc inc | cpp/io/c/dsc ftell}}
{{dsc inc | cpp/io/c/dsc rewind}}
{{dsc see c | c/io/fseek}}
{{dsc end}}

[[de:cpp/io/c/fseek]]
[[es:cpp/io/c/fseek]]
[[fr:cpp/io/c/fseek]]
[[it:cpp/io/c/fseek]]
[[ja:cpp/io/c/fseek]]
[[pt:cpp/io/c/fseek]]
[[ru:cpp/io/c/fseek]]
[[zh:cpp/io/c/fseek]]</text>
      <sha1>kjqsw8tjtdz3mpxt7kurml4g9bpvszw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fsetpos</title>
    <ns>0</ns>
    <id>588</id>
    <revision>
      <id>72572</id>
      <parentid>57797</parentid>
      <timestamp>2014-09-04T13:58:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note about seek+output making the rest of a wide stream undefined</comment>
      <text xml:space="preserve" bytes="1452">{{cpp/title | fsetpos}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int fsetpos( std::FILE* stream, const std::fpos_t* pos );
}}

Sets the file position indicator and the multibyte parsing state (if any) for the C file stream {{tt|stream}} according to the value pointed to by {{tt|pos}}. 

Besides establishing new parse state and position, a call to this function undoes the effects of {{lc|std::ungetc}} and clears the end-of-file state, if it is set.

If a read or write error occurs, the error indicator ({{lc|std::ferror}})for the stream is set.

===Parameters===
{{par begin}}
{{par | stream | file stream to modify}}
{{par | pos | pointer to a {{c|fpos_t}} object obtained from {{lc|std::fgetpos}} called on a stream associated with the same file}}
{{par end}}

===Return value===
{{c|0}} upon success, nonzero value otherwise. Also, sets {{lc|errno}} on failure.

===Notes===
After seeking to a non-end position in a wide stream, the next call to any output function may render the remainder of the file undefined, e.g. by outputting a multibyte sequence of a different length.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fgetpos}}
{{dsc inc | cpp/io/c/dsc ftell}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc see c | c/io/fsetpos}}
{{dsc end}}

[[de:cpp/io/c/fsetpos]]
[[es:cpp/io/c/fsetpos]]
[[fr:cpp/io/c/fsetpos]]
[[it:cpp/io/c/fsetpos]]
[[ja:cpp/io/c/fsetpos]]
[[pt:cpp/io/c/fsetpos]]
[[ru:cpp/io/c/fsetpos]]
[[zh:cpp/io/c/fsetpos]]</text>
      <sha1>q5w0375t3s0sg88knx24vrg5l5awu8w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/ftell</title>
    <ns>0</ns>
    <id>589</id>
    <revision>
      <id>57798</id>
      <parentid>49747</parentid>
      <timestamp>2013-06-01T06:01:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1165">{{cpp/title | ftell}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
long ftell( std::FILE* stream );
}}

Returns the current value of the file position indicator for the file stream {{tt|stream}}.

If the stream is open in binary mode, the value obtained by this function is the number of bytes from the beginning of the file.

If the stream is open in text mode, the value returned by this function is unspecified and is only meaningful as the input to {{lc|std::fseek}}

===Parameters===
{{par begin}}
{{par | stream | file stream to examine}}
{{par end}}

===Return value===
File position indicator on success or {{c|-1L}} if failure occurs. Also sets {{lc|errno}} on failure.

===Example===
{{example |
| code=
| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fgetpos}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc inc | cpp/io/c/dsc fsetpos}}
{{dsc inc | cpp/io/basic_istream/dsc tellg}}
{{dsc inc | cpp/io/basic_ostream/dsc tellp}}
{{dsc see c | c/io/ftell}}
{{dsc end}}

[[de:cpp/io/c/ftell]]
[[es:cpp/io/c/ftell]]
[[fr:cpp/io/c/ftell]]
[[it:cpp/io/c/ftell]]
[[ja:cpp/io/c/ftell]]
[[pt:cpp/io/c/ftell]]
[[ru:cpp/io/c/ftell]]
[[zh:cpp/io/c/ftell]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fwide</title>
    <ns>0</ns>
    <id>2936</id>
    <revision>
      <id>73688</id>
      <parentid>67580</parentid>
      <timestamp>2014-11-13T03:25:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>point out that fwide does nothing on a decided stream</comment>
      <text xml:space="preserve" bytes="1186">{{cpp/title | fwide}}
{{cpp/io/c/navbar}}
{{ddcl | header=cwchar |
int fwide( std::FILE* stream, int mode );
}}

If {{tt|mode &gt; 0}}, attempts to make {{tt|stream}} wide-oriented. If {{tt|mode &lt; 0}}, attempts to make {{tt|stream}} byte-oriented. If {{c|1=mode==0}}, only queries the current orientation of the stream.

If the orientation of the stream has already been decided (by executing output or by an earlier call to fwide), this function does nothing.

===Parameters===
{{par begin}}
{{par | stream | pointer to the C I/O stream to modify or query}}
{{par | mode | integer value greater than zero to set the stream wide, less than zero to set the stream narrow, or zero to query only }}
{{par end}}

===Return value===
An integer greater than zero if the stream is wide-oriented after this call, less than zero if the stream is byte-oriented after this call, and zero if the stream has no orientation.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fopen}}
{{dsc see c | c/io/fwide}}
{{dsc end}}

[[de:cpp/io/c/fwide]]
[[es:cpp/io/c/fwide]]
[[fr:cpp/io/c/fwide]]
[[it:cpp/io/c/fwide]]
[[ja:cpp/io/c/fwide]]
[[pt:cpp/io/c/fwide]]
[[ru:cpp/io/c/fwide]]
[[zh:cpp/io/c/fwide]]</text>
      <sha1>fb9rp515v8yo72aijj6va99ywueiefg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fwprintf</title>
    <ns>0</ns>
    <id>4020</id>
    <revision>
      <id>85102</id>
      <parentid>76843</parentid>
      <timestamp>2016-03-31T18:38:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+note on determining the output buffer size</comment>
      <text xml:space="preserve" bytes="2968">{{cpp/title | wprintf | fwprintf | swprintf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | num=1 |
int wprintf( const wchar_t* format, ... );
}}
{{dcl | num=2 |
int fwprintf( std::FILE* stream, const wchar_t* format, ... );
}}
{{dcl | num=3 |
int swprintf( wchar_t* buffer, std::size_t size, const wchar_t* format, ... );
}}
{{dcl end}}

Loads the data from the given locations, converts them to wide string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to {{lc|stdout}}.
@2@ Writes the results to a file stream {{tt|stream}}.
@3@ Writes the results to a wide string {{tt|buffer}}. At most {{c|size-1}} wide characters are written followed by null wide character.

===Parameters===
{{par begin}}
{{par | stream | output file stream to write to}}
{{par | buffer | pointer to a wide character string to write to}}
{{par | size | up to {{tt|size - 1}} characters may be written, plus the null terminator}}
{{par | format | pointer to a null-terminated wide string specifying how to interpret the data.
{{cpp/io/c/printf format|wcs=true}}
}}
{{par | ... | arguments specifying data to print }}
{{par end}}

===Return value===
@1,2@ Number of wide characters written if successful or negative value if an error occurred.
@3@ Number of wide characters written (not counting the terminating null wide character) if successful or negative value if an encoding error occurred or if the number of characters to be generated was equal or greater than {{tt|size}} (including when {{tt|size}} is zero)

===Notes===
While narrow strings provide {{lc|std::snprintf}}, which makes it possible to determine the required output buffer size, there is no equivalent for wide strings, and in order to determine the buffer size, the program may need to call {{tt|std::swprintf}}, check the result value, and reallocate a larger buffer, trying again until successful.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;clocale&gt;
#include &lt;cwchar&gt;

int main()
{
    char narrow_str[] = &quot;z\u00df\u6c34\U0001f34c&quot;;
                    // or &quot;zß水🍌&quot;
                    // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c&quot;;
    wchar_t warr[29]; // the expected string is 28 characters plus 1 null terminator
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);

    std::swprintf(warr, sizeof warr/sizeof *warr,
                  L&quot;Converted from UTF-8: '%s'&quot;, narrow_str);

    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::wcout &lt;&lt; warr &lt;&lt; '\n';
}
 | output=
Converted from UTF-8: 'zß水🍌'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/io/c/dsc vfwprintf}}
{{dsc inc | cpp/io/c/dsc fputws}}
{{dsc see c | c/io/fwprintf | wprintf | fwprintf | swprintf}}
{{dsc end}}

[[de:cpp/io/c/fwprintf]]
[[es:cpp/io/c/fwprintf]]
[[fr:cpp/io/c/fwprintf]]
[[it:cpp/io/c/fwprintf]]
[[ja:cpp/io/c/fwprintf]]
[[pt:cpp/io/c/fwprintf]]
[[ru:cpp/io/c/fwprintf]]
[[zh:cpp/io/c/fwprintf]]</text>
      <sha1>ayfaciail8z1vptrc27syhuz9pdj70a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fwrite</title>
    <ns>0</ns>
    <id>590</id>
    <revision>
      <id>81320</id>
      <parentid>81318</parentid>
      <timestamp>2015-10-16T18:38:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>good point, but &quot;sizeof(char)&quot; doesn't make it all that clear what is being sized either.  C++-izing this example: vector::size is clearly the number of elements</comment>
      <text xml:space="preserve" bytes="2433">{{cpp/title | fwrite}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
std::size_t fwrite( const void* buffer, std::size_t size, std::size_t count, std::FILE* stream );
}}

Writes up to {{tt|count}} binary objects from the given array {{tt|buffer}} to the output stream {{tt|stream}}. The objects are written as if by reinterepreting each object as an array of {{c|unsigned char}} and calling {{lc|std::fputc}} {{tt|size}} times for each object to write those {{c|unsigned char}}s into {{tt|stream}}, in order. The file position indicator for the stream is advanced by the number of characters written.

If the objects are not {{concept|TriviallyCopyable}}, the behavior is undefined.

If an error occurs, the resulting value of the file position indicator for the stream is
indeterminate.

===Parameters===
{{par begin}}
{{par | buffer | pointer to the first object object in the array to be written}}
{{par | size | size of each object}}
{{par | count | the number of the objects to be written}}
{{par | stream | output file stream to write to}}
{{par end}}

===Return value===
Number of objects written successfully, which may be less than {{tt|count}} if an error occurred.

If {{tt|size}} or {{tt|count}} is zero, {{tt|fwrite}} returns zero and performs no other action.

===Example===
{{example|
| code=
#include &lt;cstdio&gt;
#include &lt;vector&gt;
#include &lt;array&gt;

int main ()
{
    // write buffer to file
    if(std::FILE* f1 = std::fopen(&quot;file.bin&quot;, &quot;wb&quot;)) {
        std::array&lt;int, 3&gt; v = {42, -1, 7}; // underlying storage of std::array is an array
        std::fwrite(v.data(), sizeof v[0], v.size(), f1);
        std::fclose(f1);
    }

    // read the same data and print it to the standard output
    if(std::FILE *f2 = std::fopen(&quot;file.bin&quot;, &quot;rb&quot;)) {
        std::vector&lt;int&gt; rbuf(10); // underlying storage of std::vector is also an array
        std::size_t sz = std::fread(&amp;rbuf[0], sizeof rbuf[0], rbuf.size(), f2);
        std::fclose(f2);
        for(std::size_t n = 0; n &lt; sz; ++n) {
            std::printf(&quot;%d\n&quot;, rbuf[n]);
        }
    }
}
| output=
42
-1
7
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc inc | cpp/io/c/dsc fread}}
{{dsc see c | c/io/fwrite}}
{{dsc end}}

[[de:cpp/io/c/fwrite]]
[[es:cpp/io/c/fwrite]]
[[fr:cpp/io/c/fwrite]]
[[it:cpp/io/c/fwrite]]
[[ja:cpp/io/c/fwrite]]
[[pt:cpp/io/c/fwrite]]
[[ru:cpp/io/c/fwrite]]
[[zh:cpp/io/c/fwrite]]</text>
      <sha1>km1lw3bh078sfyawr0y6q37y9ofgye8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/fwscanf</title>
    <ns>0</ns>
    <id>4023</id>
    <revision>
      <id>76852</id>
      <parentid>67597</parentid>
      <timestamp>2015-03-04T12:18:23Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>use [[Template:cpp/io/c/scanf format]]</comment>
      <text xml:space="preserve" bytes="1519">{{cpp/title | wscanf | fwscanf | swscanf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | num=1 | since=c++11 |
int wscanf( const wchar_t* format, ... );
}}
{{dcl | num=2 | since=c++11 |
int fwscanf( std::FILE* stream, const wchar_t* format, ... );
}}
{{dcl | num=3 | since=c++11 |
int swscanf( const wchar_t* buffer, const wchar_t* format, ... );
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into given locations.

@1@ Reads the data from {{lc|stdin}}.
@2@ Reads the data from file stream {{tt|stream}}.
@3@ Reads the data from null-terminated wide string {{tt|buffer}}.

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated wide string to read from}}
{{par | format | pointer to a null-terminated wide string specifying how to read the input. 
{{cpp/io/c/scanf format|wcs=true}}
}}
{{par | ... | receiving arguments}}
{{par end}}

===Return value===
Number of arguments successfully read, or {{lc|EOF}} if failure occurs before the first receiving argument was assigned.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc vfwscanf}}
{{dsc see c | c/io/fwscanf | wscanf | fwscanf | swscanf}}
{{dsc end}}

[[de:cpp/io/c/fwscanf]]
[[es:cpp/io/c/fwscanf]]
[[fr:cpp/io/c/fwscanf]]
[[it:cpp/io/c/fwscanf]]
[[ja:cpp/io/c/fwscanf]]
[[pt:cpp/io/c/fwscanf]]
[[ru:cpp/io/c/fwscanf]]
[[zh:cpp/io/c/fwscanf]]</text>
      <sha1>cfp8upi27z0mbflhi3e3v3gu2wzt8m3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/getc</title>
    <ns>0</ns>
    <id>3666</id>
    <redirect title="cpp/io/c/fgetc" />
    <revision>
      <id>13757</id>
      <parentid>13756</parentid>
      <timestamp>2011-11-12T12:01:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>syntax</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[cpp/io/c/fgetc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/getchar</title>
    <ns>0</ns>
    <id>591</id>
    <revision>
      <id>65787</id>
      <parentid>57807</parentid>
      <timestamp>2013-10-08T09:24:22Z</timestamp>
      <contributor>
        <username>Eendy</username>
        <id>539</id>
      </contributor>
      <text xml:space="preserve" bytes="826">{{cpp/title| getchar}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int getchar();
}}
Reads the next character from {{lc|stdin}}.

Equivalent to {{c|std::getc(stdin)}}.

===Parameters===
(none)

===Return value===
The obtained character on success or {{lc|EOF}} on failure. 

If the failure has been caused by end of file condition, additionally sets the ''eof'' indicator (see {{lc|feof()}}) on {{lc|stdin}}. If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|ferror()}}) on {{lc|stdin}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fgetc}}
{{dsc see c | c/io/getchar}}
{{dsc end}}

[[de:cpp/io/c/getchar]]
[[es:cpp/io/c/getchar]]
[[fr:cpp/io/c/getchar]]
[[it:cpp/io/c/getchar]]
[[ja:cpp/io/c/getchar]]
[[pt:cpp/io/c/getchar]]
[[ru:cpp/io/c/getchar]]
[[zh:cpp/io/c/getchar]]</text>
      <sha1>igcabmjthmzvgygmcbly61nb7kzcjwz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/gets</title>
    <ns>0</ns>
    <id>592</id>
    <revision>
      <id>68215</id>
      <parentid>65794</parentid>
      <timestamp>2014-03-18T04:31:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>removed in c++14</comment>
      <text xml:space="preserve" bytes="1213">{{cpp/title | gets}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio | until=c++14 |
char* gets( char* str );
}}

Reads {{lc|stdin}} into given character string until a newline character is found or end-of-file occurs.

===Parameters===
{{par begin}}
{{par | str | character string to be written}}
{{par end}}

===Return value===
{{tt|str}} on success, {{lc|NULL}} on failure.

If the failure has been caused by end of file condition, additionally sets the ''eof'' indicator (see {{lc|std::feof()}}) on {{lc|stdin}}. If the failure has been caused by some other error, sets the ''error'' indicator (see {{lc|std::ferror()}}) on {{lc|stdin}}.

===Notes===
The function provides no means to prevent buffer overflow of the destination array, given sufficiently long input string. {{tt|std::gets}} was deprecated in C++11 and removed from C++14.

{{lc|std::fgets}} can be used instead.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/io/c/dsc fgets}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc see c | c/io/gets}}
{{dsc end}}

[[de:cpp/io/c/gets]]
[[es:cpp/io/c/gets]]
[[fr:cpp/io/c/gets]]
[[it:cpp/io/c/gets]]
[[ja:cpp/io/c/gets]]
[[pt:cpp/io/c/gets]]
[[ru:cpp/io/c/gets]]
[[zh:cpp/io/c/gets]]</text>
      <sha1>j92c3l6nfiwa4dxe69mwho45bpqp7sk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/getwc</title>
    <ns>0</ns>
    <id>3668</id>
    <redirect title="cpp/io/c/fgetwc" />
    <revision>
      <id>13759</id>
      <timestamp>2011-11-12T12:03:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/fgetwc]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/io/c/fgetwc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/getwchar</title>
    <ns>0</ns>
    <id>2642</id>
    <revision>
      <id>62367</id>
      <parentid>57811</parentid>
      <timestamp>2013-06-27T00:58:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="620">{{cpp/title| getwchar}}
{{cpp/io/c/navbar}}
{{ddcl | header=cwchar |
wint_t getwchar();
}}
Reads the next wide character from {{lc|stdin}}.

===Parameters===
(none)

===Return value===
The obtained wide character or {{c|WEOF}} if an error has occurred or the end of file reached

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc getchar}}
{{dsc inc | cpp/io/c/dsc fgetwc}}
{{dsc see c | c/io/getwchar}}
{{dsc end}}

[[de:cpp/io/c/getwchar]]
[[es:cpp/io/c/getwchar]]
[[fr:cpp/io/c/getwchar]]
[[it:cpp/io/c/getwchar]]
[[ja:cpp/io/c/getwchar]]
[[pt:cpp/io/c/getwchar]]
[[ru:cpp/io/c/getwchar]]
[[zh:cpp/io/c/getwchar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/perror</title>
    <ns>0</ns>
    <id>593</id>
    <revision>
      <id>77080</id>
      <parentid>65688</parentid>
      <timestamp>2015-03-13T22:28:01Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1341">{{cpp/title | perror}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
void perror( const char *s );
}}

Prints a textual description of the error code currently stored in the system variable {{lc|errno}} to {{lc|stderr}}.

The description is formed by concatenating the following components:
* the contents of the null-terminated byte string pointed to by {{tt|s}} (unless {{tt|s}} is a null pointer)
* {{c|&quot;: &quot;}}
* implementation-defined error message describing the error code stored in {{tt|errno}}. This message is identical to the output of {{c|std::strerror(errno)}}.
* {{c|'\n'}}.

===Parameters===
{{par begin}}
{{par | s | pointer to a null-terminated string with explanatory message}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | code=
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstdio&gt;

int main()
{
    double not_a_number = std::log(-1.0);
    if (errno == EDOM) {
        std::perror(&quot;log(-1) failed&quot;);
    }
}
 | output=
log(-1) failed: Numerical argument out of domain
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc errno}}
{{dsc inc | cpp/string/byte/dsc strerror}}
{{dsc see c | c/io/perror}}
{{dsc end}}

[[de:cpp/io/c/perror]]
[[es:cpp/io/c/perror]]
[[fr:cpp/io/c/perror]]
[[it:cpp/io/c/perror]]
[[ja:cpp/io/c/perror]]
[[pt:cpp/io/c/perror]]
[[ru:cpp/io/c/perror]]
[[zh:cpp/io/c/perror]]</text>
      <sha1>clgidiy1si31a5w2t5run8righ3zaz7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/printf</title>
    <ns>0</ns>
    <id>2461</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>8716</id>
      <timestamp>2011-08-16T07:05:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/putc</title>
    <ns>0</ns>
    <id>3667</id>
    <redirect title="cpp/io/c/fputc" />
    <revision>
      <id>13758</id>
      <timestamp>2011-11-12T12:02:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/fputc]]</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[cpp/io/c/fputc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/putchar</title>
    <ns>0</ns>
    <id>594</id>
    <revision>
      <id>65969</id>
      <parentid>65968</parentid>
      <timestamp>2013-10-16T14:55:21Z</timestamp>
      <contributor>
        <username>Eendy</username>
        <id>539</id>
      </contributor>
      <text xml:space="preserve" bytes="1188">{{cpp/title| putchar}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int putchar( int ch );
}}
Writes a character {{tt|ch}} to {{tt|stdout}}. Internally, the character is converted to {{c|unsigned char}} just before being written.

Equivalent to {{c|putc(ch, stdout)}}.

===Parameters===
{{par begin}}
{{par | ch | character to be written}}
{{par end}}

===Return value===
On success, returns the written character.

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|ferror()}}) on {{lc|stdout}}.

===Example===
{{example
|code=
#include &lt;cstdio&gt;

int main()
{
    for (char c = 'a'; c != 'z'; c++)
        std::putchar(c);
    std::putchar('\n');

    // putchar return value is not equal to the argument
    int r = 0x1070;
    std::printf(&quot;\n0x%x\n&quot;, r);
    r = std::putchar(r);
    std::printf(&quot;\n0x%x\n&quot;, r);
}
|output=
abcdefghijklmnopqrstuvwxy
0x1070
p
0x70
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fputc}}
{{dsc see c | c/io/putchar}}
{{dsc end}}

[[de:cpp/io/c/putchar]]
[[es:cpp/io/c/putchar]]
[[fr:cpp/io/c/putchar]]
[[it:cpp/io/c/putchar]]
[[ja:cpp/io/c/putchar]]
[[pt:cpp/io/c/putchar]]
[[ru:cpp/io/c/putchar]]
[[zh:cpp/io/c/putchar]]</text>
      <sha1>fke065rbi0aaavfswo9fovoqq54ur27</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/puts</title>
    <ns>0</ns>
    <id>595</id>
    <revision>
      <id>85756</id>
      <parentid>65175</parentid>
      <timestamp>2016-05-13T15:43:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail/example</comment>
      <text xml:space="preserve" bytes="1660">{{cpp/title| puts}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int puts( const char *str );
}}
Writes every character from the null-terminated string {{tt|str}} and one additional newline character {{c|'\n'}} to the output stream {{lc|stdout}}, as if by repeatedly executing {{lc|std::fputc}}.

The terminating null character from {{tt|str}} is not written.

===Parameters===
{{par begin}}
{{par | str | character string to be written}}
{{par end}}

===Return value===
On success, returns a non-negative value

On failure, returns {{lc|EOF}} and sets the ''error'' indicator (see {{lc|std::ferror}}) on {{tt|stream}}.

===Notes===
The {{tt|std::puts}} function appends the newline character to the output, while {{lc|std::fputs}} function does not.

Different implementations return different non-negative numbers: some return the last character written, some return the number of characters written (or {{tt|INT_MAX}} if the string was longer than that), some simply return a non-negative constant.

A typical cause of failure for {{tt|std::puts}} is running out of space on the file system, when {{tt|stdout}} is redirected to a file.

===Example===
{{example| code=
#include &lt;cstdio&gt;
 
int main()
{
    int rc = std::puts(&quot;Hello World&quot;);

    if (rc == EOF)
       std::perror(&quot;puts()&quot;); // POSIX requires that errno is set
}
| output=
Hello World
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fputs}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc see c | c/io/puts}}
{{dsc end}}

[[de:cpp/io/c/puts]]
[[es:cpp/io/c/puts]]
[[fr:cpp/io/c/puts]]
[[it:cpp/io/c/puts]]
[[ja:cpp/io/c/puts]]
[[pt:cpp/io/c/puts]]
[[ru:cpp/io/c/puts]]
[[zh:cpp/io/c/puts]]</text>
      <sha1>4gn51te0igu2l02ksz1cw2jnuflwrwp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/putwc</title>
    <ns>0</ns>
    <id>3669</id>
    <redirect title="cpp/io/c/fputwc" />
    <revision>
      <id>13760</id>
      <timestamp>2011-11-12T12:03:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/fputwc]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/io/c/fputwc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/putwchar</title>
    <ns>0</ns>
    <id>2643</id>
    <revision>
      <id>57819</id>
      <parentid>49758</parentid>
      <timestamp>2013-06-01T06:01:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="648">{{cpp/title| putwchar}}
{{cpp/io/c/navbar}}
{{ddcl | header=cwchar |
wint_t putwchar( wchar_t ch );
}}
Writes a wide character {{tt|ch}} to {{tt|stdout}}

===Parameters===
{{par begin}}
{{par | ch | wide character to be written}}
{{par end}}

===Return value===
{{tt|ch}} on success, {{c|WEOF}} on failure.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc putchar}}
{{dsc inc | cpp/io/c/dsc fputwc}}
{{dsc see c | c/io/putwchar}}
{{dsc end}}

[[de:cpp/io/c/putwchar]]
[[es:cpp/io/c/putwchar]]
[[fr:cpp/io/c/putwchar]]
[[it:cpp/io/c/putwchar]]
[[ja:cpp/io/c/putwchar]]
[[pt:cpp/io/c/putwchar]]
[[ru:cpp/io/c/putwchar]]
[[zh:cpp/io/c/putwchar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/remove</title>
    <ns>0</ns>
    <id>596</id>
    <revision>
      <id>85911</id>
      <parentid>84787</parentid>
      <timestamp>2016-06-03T03:16:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention the other std::remove</comment>
      <text xml:space="preserve" bytes="2033">{{cpp/title | remove}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int remove( const char* fname );
}}

Deletes the file identified by character string pointed to by {{tt|fname}}.

If the file is currently open by the current or another process, the behavior of this function is implementation-defined (in particular, POSIX systems unlink the file name, although the file system space is not reclaimed even if this was the last hardlink to the file until the last running process closes the file, Windows does not allow the file to be deleted)

===Parameters===
{{par begin}}
{{par | fname | pointer to a null-terminated string containing the path identifying the file to delete}}
{{par end}}

===Return value===
{{c|0}} upon success or non-zero value on error.

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/remove.html POSIX specifies] many additional details for the behavior of this function.

The standard library also defines a function template {{ltt|cpp/algorithm/remove|std::remove}}  taking a pair of iterators and a value, this overload is one of the standard [[cpp/algorithm|algorithms]].

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
int main()
{
    bool ok = static_cast&lt;bool&gt;(std::ofstream(&quot;file1.txt&quot;).put('a')); // create file
    if(!ok) { std::perror(&quot;Error creating file1.txt&quot;); return 1; }
    std::cout &lt;&lt; std::ifstream(&quot;file1.txt&quot;).rdbuf() &lt;&lt; '\n'; // print file
 
    std::remove(&quot;file1.txt&quot;); // delete file
 
    bool failed = !std::ifstream(&quot;file1.txt&quot;);
    if(failed) { std::perror(&quot;Error opening deleted file&quot;); return 1; }
}
|p=true
| output=
a
Error opening deleted file: No such file or directory
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc remove}}
{{dsc inc | cpp/io/c/dsc rename}}
{{dsc see c | c/io/remove}}
{{dsc end}}

[[de:cpp/io/c/remove]]
[[es:cpp/io/c/remove]]
[[fr:cpp/io/c/remove]]
[[it:cpp/io/c/remove]]
[[ja:cpp/io/c/remove]]
[[pt:cpp/io/c/remove]]
[[ru:cpp/io/c/remove]]
[[zh:cpp/io/c/remove]]</text>
      <sha1>2i1s9ijl3kvflmueph74fa45swvbv14</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/rename</title>
    <ns>0</ns>
    <id>597</id>
    <revision>
      <id>84789</id>
      <parentid>77169</parentid>
      <timestamp>2016-03-22T13:58:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>adj seealso to c++17 version of fs::rename</comment>
      <text xml:space="preserve" bytes="1764">{{cpp/title | rename}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int rename( const char *old_filename, const char *new_filename );
}}

Changes the filename of a file. The file is identified by character string pointed to by {{tt|old_filename}}. The new filename is identified by character string pointed to by {{tt|new_filename}}.

If {{tt|new_filename}} exists, the behavior is implementation-defined.

===Parameters===
{{par begin}}
{{par | old_filename | pointer to a null-terminated string containing the path identifying the file to rename}}
{{par | new_filename | pointer to a null-terminated string containing the new path of the file}}
{{par end}}

===Return value===
{{c|0}} upon success or non-zero value on error.

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html POSIX] specifies many additional details on the semantics of this function, which are reproduced in C++ by  [[cpp/experimental/fs/rename|std::experimental::filesystem::rename]].

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
int main()
{
    bool ok = std::ofstream(&quot;from.txt&quot;).put('a'); // create and write to file
    if(!ok) { std::perror(&quot;Error creating from.txt&quot;); return 1; }

    int rc = std::rename(&quot;from.txt&quot;, &quot;to.txt&quot;); 
    if(rc) { std::perror(&quot;Error renaming&quot;); return 1; }

    std::cout &lt;&lt; std::ifstream(&quot;to.txt&quot;).rdbuf() &lt;&lt; '\n'; // print file
}
 | output=
a
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/filesystem/dsc rename}} 
{{dsc inc | cpp/io/c/dsc remove}}
{{dsc see c | c/io/rename}}
{{dsc end}}

[[de:cpp/io/c/rename]]
[[es:cpp/io/c/rename]]
[[fr:cpp/io/c/rename]]
[[it:cpp/io/c/rename]]
[[ja:cpp/io/c/rename]]
[[pt:cpp/io/c/rename]]
[[ru:cpp/io/c/rename]]
[[zh:cpp/io/c/rename]]</text>
      <sha1>8xa6jnvagmh9y7dcgpoejd9fhlk7pr5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/rewind</title>
    <ns>0</ns>
    <id>598</id>
    <revision>
      <id>70168</id>
      <parentid>66019</parentid>
      <timestamp>2014-05-11T05:02:00Z</timestamp>
      <contributor>
        <username>汪育振</username>
        <id>532</id>
      </contributor>
      <text xml:space="preserve" bytes="1350">{{cpp/title | rewind }}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
void rewind( std::FILE* stream );
}}

Moves the file position indicator to the beginning of the given file stream. 

The function is equivalent to {{c|std::fseek(stream, 0, SEEK_SET);}}, except that end-of-file and error indicators are cleared. 

The function drops any effects from previous calls to {{lc|ungetc}}.

===Parameters===
{{par begin}}
{{par | stream | file stream to modify}}
{{par end}}

===Return value===
(none)

===Example===
{{example|
| code=
#include &lt;cstdio&gt;
 
int main()
{
    std::FILE *f;
    char ch;
    char str[20];
 
    f = std::fopen(&quot;file.txt&quot;, &quot;w&quot;);
    for (ch = '0'; ch &lt;= '9'; ch++) {
        std::fputc(ch, f);
    }
    std::fclose(f);
 
 
    std::FILE* f2 = std::fopen(&quot;file.txt&quot;, &quot;r&quot;);
    unsigned int size = std::fread(str, 1, 10, f2);
    std::puts(str);
    std::printf(&quot;\n%u\n&quot;,size);
 
    std::rewind(f2);
    unsigned int size2 = std::fread(str, 1, 10, f2);
    std::puts(str);
    std::printf(&quot;\n%u&quot;,size2);
    std::fclose(f2);
}
| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fseek}}
{{dsc see c | c/io/rewind}}
{{dsc end}}

[[de:cpp/io/c/rewind]]
[[es:cpp/io/c/rewind]]
[[fr:cpp/io/c/rewind]]
[[it:cpp/io/c/rewind]]
[[ja:cpp/io/c/rewind]]
[[pt:cpp/io/c/rewind]]
[[ru:cpp/io/c/rewind]]
[[zh:cpp/io/c/rewind]]</text>
      <sha1>29kop0wc1i4dv384dffbcayvevirua3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/scanf</title>
    <ns>0</ns>
    <id>2120</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>4541</id>
      <timestamp>2011-06-20T20:16:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>create redirect</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/setbuf</title>
    <ns>0</ns>
    <id>599</id>
    <revision>
      <id>85088</id>
      <parentid>75842</parentid>
      <timestamp>2016-03-30T13:53:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>more precise using</comment>
      <text xml:space="preserve" bytes="2118">{{cpp/title | setbuf}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
void setbuf( std::FILE* stream, char* buffer );
}}

Sets the internal buffer to use for I/O operations performed on the C stream {{tt|stream}}.

If {{tt|buffer}} is not null, equivalent to {{c|std::setvbuf(stream, buffer, _IOFBF, BUFSIZ)}}

If {{tt|buffer}} is null, equivalent to {{c|std::setvbuf(stream, NULL, _IONBF, 0)}}, which turns off buffering.

===Parameters===
{{par begin}}
{{par | stream | the file stream to set the buffer to.}}
{{par | buffer | pointer to a buffer for the stream to use. If {{lc|NULL}} is supplied, the buffering is turned off. If not null, must be able to hold at least {{tt|BUFSIZ}} characters}}
{{par end}}

===Return value===
(none)

===Notes===
If {{lc|BUFSIZ}} is not the appropriate buffer size, {{lc|std::setvbuf}} can be used to change it.

{{lc|std::setvbuf}} should also be used to detect errors, since {{tt|std::setbuf}} does not indicate success or failure.

This function may only be used after {{tt|stream}} has been associated with an open file, but before any other operation (other than a failed call to {{lc|std::setbuf}}/{{tt|std::setvbuf}}).

A common error is setting the buffer of stdin or stdout to an array whose lifetime ends before the program terminates:
{{source|1=
int main() {
    char buf[BUFSIZ];
    std::setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
}}

===Example===
{{example
| setbuf may be used to disable buffering on streams that require immediate output
|code=
#include &lt;cstdio&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

int main()
{
    using namespace std::chrono_literals;

    std::setbuf(stdout, NULL); // unbuffered stdout
    std::putchar('a'); // appears immediately on unbuffered stream
    std::this_thread::sleep_for(1s);
    std::putchar('b');
}
|output=
ab
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc setvbuf}}
{{dsc see c | c/io/setbuf}}
{{dsc end}}

[[de:cpp/io/c/setbuf]]
[[es:cpp/io/c/setbuf]]
[[fr:cpp/io/c/setbuf]]
[[it:cpp/io/c/setbuf]]
[[ja:cpp/io/c/setbuf]]
[[pt:cpp/io/c/setbuf]]
[[ru:cpp/io/c/setbuf]]
[[zh:cpp/io/c/setbuf]]</text>
      <sha1>qnacni02td4u2svhn2i9uxz7q9f5hth</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/setvbuf</title>
    <ns>0</ns>
    <id>600</id>
    <revision>
      <id>87575</id>
      <parentid>87574</parentid>
      <timestamp>2016-09-11T04:17:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="3435">{{cpp/title | setvbuf}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int setvbuf( std::FILE* stream, char* buffer, int mode, std::size_t size );
}}

Changes the the buffering mode of the given file stream {{tt|stream}} as indicated by the argument {{tt|mode}}. In addition,

* If {{tt|buffer}} is a null pointer, resizes of the internal buffer to {{tt|size}}.
* If {{tt|buffer}} is not a null pointer, instructs the stream to use the user-provided buffer of size {{tt|size}} beginning at {{tt|buffer}}. The stream must be closed (with {{lc|fclose}}) before the [[c/language/lifetime|lifetime]] of the array pointed to by {{tt|buffer}} ends. The contents of the array after a successful call to {{tt|setvbuf}} are indeterminate and any attempt to use it is undefined behavior.

===Parameters===
{{par begin}}
{{par | stream | the file stream to set the buffer to or null pointer to change size and mode only}}
{{par | buffer | pointer to a buffer for the stream to use}}
{{par | mode |2= buffering mode to use. It can be one of the following values:

{{cpp/io/c/buffering modes}}
}}
{{par | size | size of the buffer}}
{{par end}}

===Return value===
{{c|0}} on success or nonzero on failure.

===Notes===
This function may only be used after {{tt|stream}} has been associated with an open file, but before any other operation (other than a failed call to {{lc|std::setbuf}}/{{tt|std::setvbuf}}).

Not all {{tt|size}} bytes will necessarily be used for buffering: the actual buffer size is usually rounded down to a multiple of 2, a multiple of page size, etc.

On many implementations, line buffering is only available for terminal input streams.

A common error is setting the buffer of stdin or stdout to an array whose lifetime ends before the program terminates:
{{source|1=
int main() {
    char buf[BUFSIZ];
    std::setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
}}

The default buffer size {{lc|BUFSIZ}} is expected to be the most efficient buffer size for file I/O on the implementation, but POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/fstat.html fstat] often provides a better estimate.

===Example===
{{example|one use case for changing buffer size is when a better size is known
|code=
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/stat.h&gt;

int main()
{
    std::FILE* fp = std::fopen(&quot;test.txt&quot;, &quot;r&quot;);
    if(!fp) {
       std::perror(&quot;fopen&quot;); return 1;
    }

    struct stat stats;
    if(fstat(fileno(fp), &amp;stats) == -1) { // POSIX only
        std::perror(&quot;fstat&quot;); return 1;
    }

    std::cout &lt;&lt; &quot;BUFSIZ is &quot; &lt;&lt; BUFSIZ &lt;&lt; &quot;, but optimal block size is &quot;
              &lt;&lt; stats.st_blksize &lt;&lt; '\n';
    if(std::setvbuf(fp, NULL, _IOFBF, stats.st_blksize) != 0) {
       perror(&quot;setvbuf failed&quot;); // POSIX version sets errno
       return 1;
    }

    int ch;
    while((ch=std::fgetc(fp)) != EOF); // read entire file: use truss/strace to
                                       // observe the read(2) syscalls used
    std::fclose(fp);
}
|p=true
|output=
BUFSIZ is 8192, but optimal block size is 65536
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc setbuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc setbuf}}
{{dsc see c | c/io/setvbuf}}
{{dsc end}}

[[de:cpp/io/c/setvbuf]]
[[es:cpp/io/c/setvbuf]]
[[fr:cpp/io/c/setvbuf]]
[[it:cpp/io/c/setvbuf]]
[[ja:cpp/io/c/setvbuf]]
[[pt:cpp/io/c/setvbuf]]
[[ru:cpp/io/c/setvbuf]]
[[zh:cpp/io/c/setvbuf]]</text>
      <sha1>n37rjw3eozbyu4omv84uehfrvn5rvf6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/snprintf</title>
    <ns>0</ns>
    <id>2459</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>8714</id>
      <timestamp>2011-08-16T07:04:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/sprintf</title>
    <ns>0</ns>
    <id>2460</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>8715</id>
      <timestamp>2011-08-16T07:05:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/sscanf</title>
    <ns>0</ns>
    <id>2462</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>8717</id>
      <timestamp>2011-08-16T07:06:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+redirect</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/swprintf</title>
    <ns>0</ns>
    <id>3680</id>
    <redirect title="cpp/io/c/fwprintf" />
    <revision>
      <id>13771</id>
      <timestamp>2011-11-12T12:09:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/fwprintf]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/io/c/fwprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/swscanf</title>
    <ns>0</ns>
    <id>3676</id>
    <redirect title="cpp/io/c/fwscanf" />
    <revision>
      <id>13767</id>
      <timestamp>2011-11-12T12:07:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/fwscanf]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/io/c/fwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/tmpfile</title>
    <ns>0</ns>
    <id>601</id>
    <revision>
      <id>87713</id>
      <parentid>84766</parentid>
      <timestamp>2016-09-27T18:52:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>replaced &quot;3&quot; with fileno (since the example is Linux-only anyway), replaced system() call with Filesystem TS calls (still doesn't print on coliru because /proc is not there)</comment>
      <text xml:space="preserve" bytes="2498">{{cpp/title | tmpfile}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
std::FILE* tmpfile();
}}

Creates and opens a temporary file with unique auto-generated filename. 

The file is opened as binary file for update (as by {{lc|std::fopen}} with access mode {{tt|&quot;wb+&quot;}}). At least {{lc|TMP_MAX}} files may be opened during the lifetime of a program (this limit may be shared with {{lc|std::tmpnam}} and may be further limited by {{lc|FOPEN_MAX}})

If the program closes the file, e.g. by executing {{lc|std::fclose}}, the file is automatically deleted.

If the program terminates normally (by calling {{lc|std::exit}}, returning from {{c|main}}, etc), all files that were opened by calling {{tt|std::tmpfile}} are also automatically deleted.

If the program terminates abnormally, it is implementation-defined if these temporary files are deleted.

===Parameters===
(none)

===Return value===
The associated file stream or {{lc|NULL}} if an error has occurred

===Notes===
On some implementations (e.g. Linux), this function actually creates, opens, and immediately deletes the file from the file system: as long as an open file descriptor to a deleted file is held by a program, the file exists, but since it was deleted, its name does not appear in any directory, so that no other process can open it. Once the file descriptor is closed, the space occupied by the file is reclaimed by the filesystem.

On some implementations (e.g. Windows), elevated privileges are required as the function may create the temporary file in a system directory.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;filesystem&gt;
namespace fs = std::filesystem;

int main()
{
    std::FILE* tmpf = std::tmpfile();
    std::fputs(&quot;Hello, world&quot;, tmpf);
    std::rewind(tmpf);
    char buf[6];
    std::fgets(buf, sizeof buf, tmpf);
    std::cout &lt;&lt; buf &lt;&lt; '\n';

    // Linux-specific method to display the tmpfile name
    std::cout &lt;&lt; fs::read_symlink(
                     fs::path(&quot;/proc/self/fd&quot;) / std::to_string(fileno(tmpf))
                 ) &lt;&lt; '\n';
}
 | p=true
 | output=
Hello
&quot;/tmp/tmpfBlY1lI (deleted)&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc tmpnam}}
{{dsc inc | cpp/filesystem/dsc temp_directory_path}}
{{dsc see c | c/io/tmpfile}}
{{dsc end}}

[[de:cpp/io/c/tmpfile]]
[[es:cpp/io/c/tmpfile]]
[[fr:cpp/io/c/tmpfile]]
[[it:cpp/io/c/tmpfile]]
[[ja:cpp/io/c/tmpfile]]
[[pt:cpp/io/c/tmpfile]]
[[ru:cpp/io/c/tmpfile]]
[[zh:cpp/io/c/tmpfile]]</text>
      <sha1>qj48de2hopm0m4m8e15ktbb7ye9prz7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/tmpnam</title>
    <ns>0</ns>
    <id>602</id>
    <revision>
      <id>85923</id>
      <parentid>84768</parentid>
      <timestamp>2016-06-03T22:30:26Z</timestamp>
      <contributor>
        <ip>89.204.139.159</ip>
      </contributor>
      <comment>Fixed typo.</comment>
      <text xml:space="preserve" bytes="2624">{{cpp/title | tmpnam}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
char* tmpnam( char* filename );
}}

Creates a unique filename that does not name a currently existing file, and stores it in the character string pointed to by {{tt|filename}}. The function is capable of generating up to {{lc|TMP_MAX}} of unique filenames, but some or all of them may already be in use, and thus not suitable return values. 

{{tt|std::tmpnam}} modifies static state and is not required to be thread-safe.

===Parameters===
{{par begin}}
{{par | filename | pointer to the character array capable of holding at least {{lc|L_tmpnam}} bytes, to be used as a result buffer. If a null pointer is passed, a pointer to an internal static buffer is returned.}}
{{par end}}

===Return value===
{{tt|filename}} if {{tt|filename}} was not {{lc|NULL}}. Otherwise a pointer to an internal static buffer is returned. If no suitable filename can be generated, {{lc|NULL}} is returned.

===Notes===
Although the names generated by {{tt|std::tmpnam}} are difficult to guess, it is possible that a file with that name is created by another process between the moment {{tt|std::tmpnam}} returns and the moment this program attempts to use the returned name to create a file. The standard function {{lc|std::tmpfile}} and the POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdtemp.html mkstemp] do not have this problem (creating a unique directory using only the standard C library still requires the use of {{tt|tmpnam}})

POSIX systems additionally define the similarly named function {{tt|[http://pubs.opengroup.org/onlinepubs/9699919799/functions/tempnam.html tempnam()]}}, which offers the choice of a directory (which defaults to the optionally defined macro {{tt|[http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdio.h.html P_tmpdir])}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;string&gt;

int main()
{
    std::string name1 = std::tmpnam(nullptr);
    std::cout &lt;&lt; &quot;temporary file name: &quot; &lt;&lt; name1 &lt;&lt; '\n';

    char name2[L_tmpnam];
    if (std::tmpnam(name2)) {
        std::cout &lt;&lt; &quot;temporary file name: &quot; &lt;&lt; name2 &lt;&lt; '\n';
    }
}
 | p=true
 | output=
temporary file name: /tmp/fileDjwifs
temporary file name: /tmp/fileEv2bfW
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc tmpfile}}
{{dsc inc | cpp/filesystem/dsc temp_directory_path}}
{{dsc see c | c/io/tmpnam}}
{{dsc end}}

[[de:cpp/io/c/tmpnam]]
[[es:cpp/io/c/tmpnam]]
[[fr:cpp/io/c/tmpnam]]
[[it:cpp/io/c/tmpnam]]
[[ja:cpp/io/c/tmpnam]]
[[pt:cpp/io/c/tmpnam]]
[[ru:cpp/io/c/tmpnam]]
[[zh:cpp/io/c/tmpnam]]</text>
      <sha1>s9ofz3gse660hg67zzm21rrj3lrgba5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/ungetc</title>
    <ns>0</ns>
    <id>603</id>
    <revision>
      <id>83475</id>
      <parentid>83470</parentid>
      <timestamp>2016-02-15T01:43:54Z</timestamp>
      <contributor>
        <ip>221.178.200.37</ip>
      </contributor>
      <text xml:space="preserve" bytes="3620">{{cpp/title| ungetc}}
{{cpp/io/c/navbar}}
{{ddcl | header=cstdio |
int ungetc( int ch, std::FILE *stream );
}}

If {{tt|ch}} does not equal {{lc|EOF}}, pushes the character {{tt|ch}} (reinterpreted as {{c|unsigned char}}) into the input buffer associated with the stream {{tt|stream}} in such a manner than subsequent read operation from {{tt|stream}} will retrieve that character. The external device associated with the stream is not modified.

Stream repositioning operations {{lc|std::fseek}}, {{lc|std::fsetpos}}, and {{lc|std::rewind}} discard the effects of {{tt|ungetc}}.

If {{tt|ungetc}} is called more than once without an intervening read or repositioning, it may fail (in other words, a pushback buffer of size 1 is guaranteed, but any larger buffer is implementation-defined). If multiple successful {{tt|ungetc}} were performed, read operations retrieve the pushed-back characters in reverse order of {{tt|ungetc}}

If {{tt|ch}} equals {{lc|EOF}}, the operation fails and the stream is not affected.

A successful call to {{tt|ungetc}} clears the end of file status flag {{lc|std::feof}}.

A successful call to {{tt|ungetc}} on a binary stream decrements the stream position indicator by one (the behavior is indeterminate if the stream position indicator was zero).

A successful call to {{tt|ungetc}} on a text stream modifies the stream position indicator in unspecified manner but guarantees that after all pushed-back characters are retrieved with a read operation, the stream position indicator is equal to its value before {{tt|ungetc}}.

===Parameters===
{{par begin}}
{{par | ch | character to be pushed into the input stream buffer }}
{{par | stream | file stream to put the character back to}}
{{par end}}

===Return value===
On success {{tt|ch}} is returned.

On failure {{lc|EOF}} is returned and the given stream remains unchanged.

===Notes===
The size of the pushback buffer varies in practice from 4k (Linux, MacOS) to as little as 4 (Solaris) or the guaranteed minimum 1 (HPUX, AIX)

The apparent size of the pushback buffer may be larger if the character that is pushed back equals the character existing at that location in the external character sequence (the implementation may simply decrement the read file position indicator and avoid maintaining a pushback buffer)

===Example===
{{example|demonstrates the use of ungetc in its original purpose: implementing scanf
|code=
#include &lt;cctype&gt;
#include &lt;cstdio&gt;

void demo_scanf(const char* fmt, std::FILE* s) {
    if(*fmt == '%') {
        switch(*++fmt) {
            case 'u': {
                int c;
                while(std::isspace(c=std::getc(s))) {} // skip leading white space
                unsigned int num = 0;
                while(std::isdigit(c)) {
                    num = num*10 + c-'0';
                    c = std::getc(s);
                }
                std::printf(&quot;%%u scanned %u\n&quot;, num);
                std::ungetc(c, s); // reprocess the non-digit
            }
            case 'c': {
                int c = std::getc(s);
                std::printf(&quot;%%c scanned '%c'\n&quot;, c);
            }
        }
    }
}

int main()
{
    std::FILE* f = std::fopen(&quot;input.txt&quot;, &quot;w+&quot;);
    std::fputs(&quot;123x&quot;, f);
    std::rewind(f);
    demo_scanf(&quot;%u%c&quot;, f);
    std::fclose(f);
}
|output=
%u scanned 123
%c scanned 'x'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fgetc}}
{{dsc see c | c/io/ungetc}}
{{dsc end}}

[[de:cpp/io/c/ungetc]]
[[es:cpp/io/c/ungetc]]
[[fr:cpp/io/c/ungetc]]
[[it:cpp/io/c/ungetc]]
[[ja:cpp/io/c/ungetc]]
[[pt:cpp/io/c/ungetc]]
[[ru:cpp/io/c/ungetc]]
[[zh:cpp/io/c/ungetc]]</text>
      <sha1>29kc78muiimodm2vxex4efs36yhxxti</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/ungetwc</title>
    <ns>0</ns>
    <id>2644</id>
    <revision>
      <id>83472</id>
      <parentid>67603</parentid>
      <timestamp>2016-02-14T23:31:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+content</comment>
      <text xml:space="preserve" bytes="2009">{{cpp/title| ungetwc}}
{{cpp/io/c/navbar}}
{{ddcl | header=cwchar |
wint_t ungetwc( wint_t ch, std::FILE* stream );
}}

If {{tt|ch}} does not equal {{lc|WEOF}}, pushes the wide character {{tt|ch}} into the input buffer associated with the stream {{tt|stream}} in such a manner than subsequent read operation from {{tt|stream}} will retrieve that wide character. The external device associated with the stream is not modified.

Stream repositioning operations {{lc|std::fseek}}, {{lc|std::fsetpos}}, and {{lc|std::rewind}} discard the effects of {{tt|ungetwc}}.

If {{tt|ungetwc}} is called more than once without an intervening read or repositioning, it may fail (in other words, a pushback buffer of size 1 is guaranteed, but any larger buffer is implementation-defined). If multiple successful {{tt|ungetwc}} were performed, read operations retrieve the pushed-back wide characters in reverse order of {{tt|ungetwc}}

If {{tt|ch}} equals {{lc|WEOF}}, the operation fails and the stream is not affected.

A successful call to {{tt|ungetwc}} clears the end of file status flag {{lc|feof}}.

A successful call to {{tt|ungetwc}} on a stream (whether text or binary) modifies the stream position indicator in unspecified manner but guarantees that after all pushed-back wide characters are retrieved with a read operation, the stream position indicator is equal to its value before {{tt|ungetwc}}.

===Parameters===
{{par begin}}
{{par | ch | wide character to be put back}}
{{par | stream | file stream to put the wide character back to}}
{{par end}}

===Return value===
On success {{tt|ch}} is returned.

On failure {{c|WEOF}} is returned and the given stream remains unchanged.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc ungetc}}
{{dsc inc | cpp/io/c/dsc fgetwc}}
{{dsc see c | c/io/ungetwc}}
{{dsc end}}

[[de:cpp/io/c/ungetwc]]
[[es:cpp/io/c/ungetwc]]
[[fr:cpp/io/c/ungetwc]]
[[it:cpp/io/c/ungetwc]]
[[ja:cpp/io/c/ungetwc]]
[[pt:cpp/io/c/ungetwc]]
[[ru:cpp/io/c/ungetwc]]
[[zh:cpp/io/c/ungetwc]]</text>
      <sha1>pytjeyrta41xrqzxtnrsjxs878ysbn6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vfprintf</title>
    <ns>0</ns>
    <id>604</id>
    <revision>
      <id>88249</id>
      <parentid>77838</parentid>
      <timestamp>2016-11-15T09:04:33Z</timestamp>
      <contributor>
        <ip>89.73.195.133</ip>
      </contributor>
      <text xml:space="preserve" bytes="3344">{{cpp/title | vprintf | vfprintf | vsprintf | vsnprintf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cstdio}}
{{dcl | num=1 |
int vprintf( const char* format, va_list vlist );
}}
{{dcl | num=2 |
int vfprintf( std::FILE* stream, const char* format, va_list vlist );
}}
{{dcl | num=3 |
int vsprintf( char* buffer, const char* format, va_list vlist );
}}
{{dcl | num=4 | since=c++11 |
int vsnprintf( char* buffer, std::size_t buf_size, const char* format, va_list vlist );
}}
{{dcl end}}

Loads the data from the locations, defined by {{tt|vlist}}, converts them to character string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to {{lc|stdout}}.
@2@ Writes the results to a file stream {{tt|stream}}.
@3@ Writes the results to a character string {{tt|buffer}}.
@4@ Writes the results to a character string {{tt|buffer}}. At most {{tt|buf_size}} characters are written. The resulting character string will be terminated with a null character, unless {{tt|buf_size}} is zero. If {{tt|buf_size}} is zero, nothing is written and {{tt|buffer}} may be a null pointer, however the return value (number of bytes that would be written) is still calculated and returned.

===Parameters===
{{par begin}}
{{par | stream | output file stream to write to}}
{{par | buffer | pointer to a character string to write to}}
{{par | buf_size | maximum number of characters to write}}
{{par | format | pointer to a null-terminated character string specifying how to interpret the data.
{{cpp/io/c/printf format}}
}}
{{par | vlist | variable argument list containing the data to print }}
{{par end}}

===Return value===
@1-3@ Number of characters written if successful or negative value if an error occurred.

@4@ Number of characters written if successful or negative value if an error occurred. If the resulting string gets truncated due to {{tt|buf_size}} limit, function returns the total number of characters (not including the terminating null-byte) which would have been written, if the limit was not imposed. 

===Notes===
All these functions invoke {{lc|va_arg}} at least once, the value of {{tt|arg}} is indeterminate after the return. These functions do not invoke {{lc|va_end}}, and it must be done by the caller.

===Example===
{{example
 | code=
#include &lt;vector&gt;
#include &lt;cstdio&gt;
#include &lt;cstdarg&gt;
#include &lt;ctime&gt;

void debug_log(const char *fmt, ...)
{
    std::time_t t = std::time(nullptr);
    char time_buf[100];
    std::strftime(time_buf, sizeof time_buf, &quot;%D %T&quot;, std::gmtime(&amp;t));
    va_list args1;
    va_start(args1, fmt);
    va_list args2;
    va_copy(args2, args1);
    std::vector&lt;char&gt; buf(1+std::vsnprintf(NULL, 0, fmt, args1));
    va_end(args1);
    std::vsnprintf(buf.data(), buf.size(), fmt, args2);
    va_end(args2);
    std::printf(&quot;%s [debug]: %s\n&quot;, time_buf, buf.data());
}

int main()
{
    debug_log(&quot;Logging, %d, %d, %d&quot;, 1, 2, 3);
}
 | output=
04/13/15 15:09:18 [debug]: Logging, 1, 2, 3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/io/c/dsc vfscanf}}
{{dsc see c | c/io/vfprintf | vprintf | vfprintf | vsprintf | vsnprintf}}
{{dsc end}}

[[de:cpp/io/c/vfprintf]]
[[es:cpp/io/c/vfprintf]]
[[fr:cpp/io/c/vfprintf]]
[[it:cpp/io/c/vfprintf]]
[[ja:cpp/io/c/vfprintf]]
[[pt:cpp/io/c/vfprintf]]
[[ru:cpp/io/c/vfprintf]]
[[zh:cpp/io/c/vfprintf]]</text>
      <sha1>8md0ndbtvfbrr4e0qzypi8xi0k119vq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vfscanf</title>
    <ns>0</ns>
    <id>605</id>
    <revision>
      <id>77841</id>
      <parentid>67591</parentid>
      <timestamp>2015-04-13T15:26:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>va_end note</comment>
      <text xml:space="preserve" bytes="2540">{{cpp/title | vscanf | vfscanf | vsscanf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cstdio}}
{{dcl | num=1 | since=c++11 |
​int vscanf( const char* format, va_list vlist );​
}}
{{dcl | num=2 | since=c++11 |
int vfscanf( std::FILE* stream, const char* format, va_list vlist );
}}
{{dcl | num=3 | since=c++11 |
int vsscanf( const char* buffer, const char* format, va_list vlist );
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into locations defined by {{tt|vlist}}.

@1@ Reads the data from {{lc|stdin}}.
@2@ Reads the data from file stream {{tt|stream}}.
@3@ Reads the data from null-terminated character string {{tt|buffer}}.

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated character string to read from}}
{{par | format | pointer to a null-terminated character string specifying how to read the input.
{{cpp/io/c/scanf format}}
}}
{{par | vlist | variable argument list containing the receiving arguments}}
{{par end}}

===Return value===
Number of arguments successfully read, or {{lc|EOF}} if failure occurs.

===Notes===
All these functions invoke {{lc|va_arg}} at least once, the value of {{tt|arg}} is indeterminate after the return. These functions to not invoke {{lc|va_end}}, and it must be done by the caller.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cstdio&gt;
#include &lt;cstdarg&gt;
#include &lt;stdexcept&gt;

void checked_sscanf(int count, const char* buf, const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    if(std::vsscanf(buf, fmt, ap) != count)
        throw std::runtime_error(&quot;parsing error&quot;);
    va_end(ap);
}

int main()
{
    try {
        int n, m;
        std::cout &lt;&lt; &quot;Parsing '1 2'...&quot;;
        checked_sscanf(2, &quot;1 2&quot;, &quot;%d %d&quot;, &amp;n, &amp;m);
        std::cout &lt;&lt; &quot;success\n&quot;;
        std::cout &lt;&lt; &quot;Parsing '1 a'...&quot;;
        checked_sscanf(2, &quot;1 a&quot;, &quot;%d %d&quot;, &amp;n, &amp;m);
        std::cout &lt;&lt; &quot;success\n&quot;;
    } catch(const std::exception&amp; e)
    {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
Parsing '1 2'...success
Parsing '1 a'...parsing error
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/io/c/dsc vfprintf}}
{{dsc see c | c/io/vfscanf | vscanf | vfscanf | vsscanf}}
{{dsc end}}

[[de:cpp/io/c/vfscanf]]
[[es:cpp/io/c/vfscanf]]
[[fr:cpp/io/c/vfscanf]]
[[it:cpp/io/c/vfscanf]]
[[ja:cpp/io/c/vfscanf]]
[[pt:cpp/io/c/vfscanf]]
[[ru:cpp/io/c/vfscanf]]
[[zh:cpp/io/c/vfscanf]]</text>
      <sha1>qj2bwqjd09z12kxvwefy6co6j5lje2p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vfwprintf</title>
    <ns>0</ns>
    <id>4021</id>
    <revision>
      <id>85103</id>
      <parentid>81166</parentid>
      <timestamp>2016-03-31T18:39:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+note on determining the output buffer size</comment>
      <text xml:space="preserve" bytes="2399">{{cpp/title | vwprintf | vfwprintf | vswprintf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | num=1 |
int vwprintf( const wchar_t* format, va_list vlist );
}}
{{dcl | num=2 |
int vfwprintf( std::FILE* stream, const wchar_t* format, va_list vlist );
}}
{{dcl | num=3 |
int vswprintf( const wchar_t* buffer, std::size_t buf_size,
               const wchar_t* format, va_list vlist );
}}
{{dcl end}}

Loads the data from locations, defined by {{tt|vlist}},, converts them to wide string equivalents and writes the results to a variety of sinks.

@1@ Writes the results to {{lc|stdout}}.
@2@ Writes the results to a file stream {{tt|stream}}.
@3@ Writes the results to a wide string {{tt|buffer}}. At most {{c|size-1}} wide characters are written followed by null wide character.

===Parameters===
{{par begin}}
{{par | stream | output wide stream to write to}}
{{par | buffer | pointer to a wide string to write to}}
{{par | buf_size | maximum number of wide characters to write}}
{{par | format | pointer to a null-terminated wide string specifying how to interpret the data.
{{cpp/io/c/printf format|wcs=true}}
}}
{{par | vlist | [[cpp/language/variadic arguments|variable argument list]] containing the data to print }}
{{par end}}

===Return value===
@1,2@ Number of wide characters written if successful or negative value if an error occurred.
@3@ Number of wide characters written (not counting the terminating null wide character) if successful or negative value if an encoding error occurred or if the number of characters to be generated was equal or greater than {{tt|size}}.

===Notes===
While narrow strings provide {{lc|std::vsnprintf}}, which makes it possible to determine the required output buffer size, there is no equivalent for wide strings, and in order to determine the buffer size, the program may need to call {{tt|std::vswprintf}}, check the result value, and reallocate a larger buffer, trying again until successful.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc vfprintf}}
{{dsc inc | cpp/io/c/dsc fwprintf}}
{{dsc see c | c/io/vfwprintf | vwprintf | vfwprintf | vswprintf}}
{{dsc end}}

[[de:cpp/io/c/vfwprintf]]
[[es:cpp/io/c/vfwprintf]]
[[fr:cpp/io/c/vfwprintf]]
[[it:cpp/io/c/vfwprintf]]
[[ja:cpp/io/c/vfwprintf]]
[[pt:cpp/io/c/vfwprintf]]
[[ru:cpp/io/c/vfwprintf]]
[[zh:cpp/io/c/vfwprintf]]</text>
      <sha1>88k51kc71sfcskbcd118w70ol42jv8s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vfwscanf</title>
    <ns>0</ns>
    <id>4022</id>
    <revision>
      <id>76854</id>
      <parentid>67598</parentid>
      <timestamp>2015-03-04T12:21:09Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Parameters */ use [[Template:cpp/io/c/scanf format]]</comment>
      <text xml:space="preserve" bytes="1572">{{cpp/title | vwscanf | vfwscanf | vswscanf}}
{{cpp/io/c/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | num=1 | since=c++11 |
int vwscanf( const wchar_t* format, va_list vlist );
}}
{{dcl | num=2 | since=c++11 |
int vfwscanf( std::FILE* stream, const wchar_t* format, va_list vlist );
}}
{{dcl | num=3 | since=c++11 |
int vswscanf( const wchar_t* buffer, const wchar_t* format, va_list vlist );
}}
{{dcl end}}

Reads data from the a variety of sources, interprets it according to {{tt|format}} and stores the results into locations defined by {{tt|vlist}}.

@1@ Reads the data from {{lc|stdin}}
@2@ Reads the data from file stream {{tt|stream}}
@3@ Reads the data from null-terminated wide string {{tt|buffer}}

===Parameters===
{{par begin}}
{{par | stream | input file stream to read from}}
{{par | buffer | pointer to a null-terminated wide string to read from}}
{{par | format | pointer to a null-terminated wide string specifying how to read the input. 
{{cpp/io/c/scanf format|wcs=true}}
}}
{{par | vlist | variable argument list containing the receiving arguments}}
{{par end}}

===Return value===
Number of arguments successfully read, or {{lc|EOF}} if failure occurs.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc fwscanf}}
{{dsc see c | c/io/vfwscanf | vwscanf | vfwscanf | vswscanf}}
{{dsc end}}

[[de:cpp/io/c/vfwscanf]]
[[es:cpp/io/c/vfwscanf]]
[[fr:cpp/io/c/vfwscanf]]
[[it:cpp/io/c/vfwscanf]]
[[ja:cpp/io/c/vfwscanf]]
[[pt:cpp/io/c/vfwscanf]]
[[ru:cpp/io/c/vfwscanf]]
[[zh:cpp/io/c/vfwscanf]]</text>
      <sha1>gmqhaoklflxtcwk3zrdmxitmjfkw74f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vprintf</title>
    <ns>0</ns>
    <id>3672</id>
    <redirect title="cpp/io/c/vfprintf" />
    <revision>
      <id>13763</id>
      <timestamp>2011-11-12T12:05:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfprintf]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/io/c/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vscanf</title>
    <ns>0</ns>
    <id>3670</id>
    <redirect title="cpp/io/c/vfscanf" />
    <revision>
      <id>13761</id>
      <timestamp>2011-11-12T12:04:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfscanf]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/io/c/vfscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vsnprintf</title>
    <ns>0</ns>
    <id>3674</id>
    <redirect title="cpp/io/c/vfprintf" />
    <revision>
      <id>13765</id>
      <timestamp>2011-11-12T12:06:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfprintf]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/io/c/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vsprintf</title>
    <ns>0</ns>
    <id>3673</id>
    <redirect title="cpp/io/c/vfprintf" />
    <revision>
      <id>13764</id>
      <timestamp>2011-11-12T12:05:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfprintf]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/io/c/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vsscanf</title>
    <ns>0</ns>
    <id>3671</id>
    <redirect title="cpp/io/c/vfscanf" />
    <revision>
      <id>13762</id>
      <timestamp>2011-11-12T12:04:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfscanf]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/io/c/vfscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vswprintf</title>
    <ns>0</ns>
    <id>3681</id>
    <redirect title="cpp/io/c/vfwprintf" />
    <revision>
      <id>13773</id>
      <parentid>13772</parentid>
      <timestamp>2011-11-12T12:09:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfwprintf]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/io/c/vfwprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vswscanf</title>
    <ns>0</ns>
    <id>3677</id>
    <redirect title="cpp/io/c/vfwscanf" />
    <revision>
      <id>13768</id>
      <timestamp>2011-11-12T12:08:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfwscanf]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/io/c/vfwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vwprintf</title>
    <ns>0</ns>
    <id>3682</id>
    <redirect title="cpp/io/c/vfwprintf" />
    <revision>
      <id>13774</id>
      <timestamp>2011-11-12T12:09:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfwprintf]]</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/io/c/vfwprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/vwscanf</title>
    <ns>0</ns>
    <id>3678</id>
    <redirect title="cpp/io/c/vfwscanf" />
    <revision>
      <id>13769</id>
      <timestamp>2011-11-12T12:08:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/vfwscanf]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/io/c/vfwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/wprintf</title>
    <ns>0</ns>
    <id>3679</id>
    <redirect title="cpp/io/c/fwprintf" />
    <revision>
      <id>13770</id>
      <timestamp>2011-11-12T12:08:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/fwprintf]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/io/c/fwprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/c/wscanf</title>
    <ns>0</ns>
    <id>3675</id>
    <redirect title="cpp/io/c/fwscanf" />
    <revision>
      <id>13766</id>
      <timestamp>2011-11-12T12:07:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/c/fwscanf]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/io/c/fwscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/cerr</title>
    <ns>0</ns>
    <id>4060</id>
    <revision>
      <id>86050</id>
      <parentid>85983</parentid>
      <timestamp>2016-06-14T15:47:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on the meaning of the name with a link to stroustrup.com faq</comment>
      <text xml:space="preserve" bytes="2766">{{cpp/title|cerr|wcerr}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl header | iostream }}
{{dcl | num=1 | 1=
extern std::ostream cerr;
}}
{{dcl | num=2| 1=
extern std::wostream wcerr;
}}
{{dcl end}}

The global objects {{tt|std::cerr}} and {{tt|std::wcerr}} control output to a stream buffer of implementation-defined type (derived from {{lc|std::streambuf}} and {{lc|std::wstreambuf}}, respectively), associated with the standard C error output stream {{lc|stderr}}.

These objects are guaranteed to be initialized during or before the first time an object of type {{lc|std::ios_base::Init}} is constructed and are available for use in the constructors and destructors of static objects with [[cpp/language/initialization#Non-local_variables|ordered initialization]] (as long as {{tt|&lt;iostream&gt;}} is included before the object is defined).

Unless {{c|sync_with_stdio(false)}} has been issued, it is safe to concurrently access these objects from multiple threads for both formatted and unformatted output.

Once initialized, {{c|1=(std::cerr.flags() &amp; unitbuf) != 0}} (same for {{tt|wcerr}}) meaning that any output sent to these stream objects is immediately flushed to the OS (via {{lc|std::basic_ostream::sentry}}'s destructor).

In addition, {{c|std::cerr.tie()}} returns {{c|&amp;std::cout}} (same for {{tt|wcerr}} and {{tt|wcout}}), meaning that any output operation on {{lc|std::cerr}} first executes {{c|std::cout.flush()}} (via {{lc|std::basic_ostream::sentry}}'s constructor) {{mark since c++11}}

===Notes===
The 'c' in the name refers to &quot;character&quot; ([http://www.stroustrup.com/bs_faq2.html#cout stroustrup.com FAQ]); {{tt|cerr}} means &quot;character error (stream)&quot; and {{tt|wcerr}} means &quot;wide character error (stream)&quot;

===Example===
{{example
 | output to stderr via cerr flushes out the pending output on cout, while output to stderr via clog does not
 | code=
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;chrono&gt;
void f()
{
    std::cout &lt;&lt; &quot;Output from thread...&quot;;
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::cout &lt;&lt; &quot;...thread calls flush()&quot; &lt;&lt; std::endl;
}

int main()
{
    std::thread t1(f);
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::clog &lt;&lt; &quot;This output from main is not tie()'d to cout\n&quot;;
    std::cerr &lt;&lt; &quot;This output is tie()'d to cout\n&quot;;
    t1.join();
}
 | output=
This output from main is not tie()'d to cout
Output from thread...This output is tie()'d to cout
...thread calls flush()
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc Init}}
{{dsc inc | cpp/io/dsc clog}}
{{dsc inc | cpp/io/dsc cout}}
{{dsc end}}

[[de:cpp/io/cerr]]
[[es:cpp/io/cerr]]
[[fr:cpp/io/cerr]]
[[it:cpp/io/cerr]]
[[ja:cpp/io/cerr]]
[[pt:cpp/io/cerr]]
[[ru:cpp/io/cerr]]
[[zh:cpp/io/cerr]]</text>
      <sha1>kdvpoborz4hmmw60zz1p0eo6mf9g4yo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/cin</title>
    <ns>0</ns>
    <id>3761</id>
    <revision>
      <id>86052</id>
      <parentid>85981</parentid>
      <timestamp>2016-06-14T15:47:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on the meaning of the name with a link to stroustrup.com faq</comment>
      <text xml:space="preserve" bytes="2018">{{cpp/title|cin|wcin}}
{{cpp/io/basic_istream/navbar}}
{{dcl begin}}
{{dcl header | iostream}}
{{dcl | num=1 | 1=
extern std::istream cin;
}}
{{dcl | num=2| 1=
extern std::wistream wcin;
}}
{{dcl end}}

The global objects {{tt|std::cin}} and {{tt|std::wcin}} control input from a stream buffer of implementation-defined type (derived from {{lc|std::streambuf}}), associated with the standard C input stream {{lc|stdin}}.

These objects are guaranteed to be initialized during or before the first time an object of type {{lc|std::ios_base::Init}} is constructed and are available for use in the constructors and destructors of static objects with [[cpp/language/initialization#Non-local_variables|ordered initialization]] (as long as {{tt|&lt;iostream&gt;}} is included before the object is defined).

Unless {{c|sync_with_stdio(false)}} has been issued, it is safe to concurrently access these objects from multiple threads for both formatted and unformatted input.

Once {{tt|std::cin}} is constructed, {{c|std::cin.tie()}} returns {{c|&amp;std::cout}}, and likewise, {{c|std::wcin.tie()}} returns {{c|&amp;std::wcout}}. This means that any formatted input operation on {{tt|std::cin}} forces a call to {{c|std::cout.flush()}} if any characters are pending for output.

===Notes===
The 'c' in the name refers to &quot;character&quot; ([http://www.stroustrup.com/bs_faq2.html#cout stroustrup.com FAQ]); {{tt|cin}} means &quot;character input&quot; and {{tt|wcin}} means &quot;wide character input&quot;

===Example===
{{example
 | code=
#include &lt;iostream&gt;
struct Foo {
    int n;
    Foo() {
       std::cout &lt;&lt; &quot;Enter n: &quot;; // no flush needed
       std::cin &gt;&gt; n;
    }
};
Foo f; // static object
int main()
{
    std::cout &lt;&lt; &quot;f.n is &quot; &lt;&lt; f.n &lt;&lt; '\n';
}
 | input=
10
 | output=
Enter n: 10
f.n is 10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc Init}}
{{dsc inc | cpp/io/dsc cout}}
{{dsc end}}

[[de:cpp/io/cin]]
[[es:cpp/io/cin]]
[[fr:cpp/io/cin]]
[[it:cpp/io/cin]]
[[ja:cpp/io/cin]]
[[pt:cpp/io/cin]]
[[ru:cpp/io/cin]]
[[zh:cpp/io/cin]]</text>
      <sha1>1kahhwdwdbjv1o80lp2bkyy7z7o75tm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/clog</title>
    <ns>0</ns>
    <id>4274</id>
    <revision>
      <id>86051</id>
      <parentid>85984</parentid>
      <timestamp>2016-06-14T15:47:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on the meaning of the name with a link to stroustrup.com faq</comment>
      <text xml:space="preserve" bytes="1944">{{cpp/title|clog|wclog}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl header | iostream }}
{{dcl | num=1 | 1=
extern std::ostream clog;
}}
{{dcl | num=2| 1=
extern std::wostream wclog;
}}
{{dcl end}}

The global objects {{tt|std::clog}} and {{tt|std::wclog}} control output to a stream buffer of implementation-defined type (derived from {{lc|std::streambuf}}), associated with the standard C output stream {{lc|stderr}}, but, unlike {{lc|std::cerr}}/{{lc|std::wcerr}}, these streams are not automatically flushed and not automatically tie()'d with cout.

These objects are guaranteed to be initialized during or before the first time an object of type {{lc|std::ios_base::Init}} is constructed and are available for use in the constructors and destructors of static objects with [[cpp/language/initialization#Non-local_variables|ordered initialization]] (as long as {{tt|&lt;iostream&gt;}} is included before the object is defined).

Unless {{c|sync_with_stdio(false)}} has been issued, it is safe to concurrently access these objects from multiple threads for both formatted and unformatted output.

===Notes===
The 'c' in the name refers to &quot;character&quot; ([http://www.stroustrup.com/bs_faq2.html#cout stroustrup.com FAQ]); {{tt|clog}} means &quot;character log&quot; and {{tt|wclog}} means &quot;wide character log&quot;

===Example===
{{example
 | code=
#include &lt;iostream&gt;

struct Foo {
    int n;
    Foo() {
       std::clog &lt;&lt; &quot;static constructor\n&quot;;
    }
    ~Foo() {
       std::clog &lt;&lt; &quot;static destructor\n&quot;;
    }
};

Foo f; // static object

int main()
{
    std::clog &lt;&lt; &quot;main function\n&quot;;
}
 | output=
static constructor
main function
static destructor
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc Init}}
{{dsc inc | cpp/io/dsc cerr}}
{{dsc inc | cpp/io/dsc cout}}
{{dsc end}}

[[de:cpp/io/clog]]
[[es:cpp/io/clog]]
[[fr:cpp/io/clog]]
[[it:cpp/io/clog]]
[[ja:cpp/io/clog]]
[[pt:cpp/io/clog]]
[[ru:cpp/io/clog]]
[[zh:cpp/io/clog]]</text>
      <sha1>knq1dw059rklgkdy4yc4n7jwgiwuc0r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/cout</title>
    <ns>0</ns>
    <id>4032</id>
    <revision>
      <id>86049</id>
      <parentid>85982</parentid>
      <timestamp>2016-06-14T15:47:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on the meaning of the name with a link to stroustrup.com faq</comment>
      <text xml:space="preserve" bytes="2375">{{cpp/title|cout|wcout}}
{{cpp/io/basic_ostream/navbar}}
{{dcl begin}}
{{dcl header | iostream }}
{{dcl | num=1 | 1=
extern std::ostream cout;
}}
{{dcl | num=2| 1=
extern std::wostream wcout;
}}
{{dcl end}}

The global objects {{tt|std::cout}} and {{tt|std::wcout}} control output to a stream buffer of implementation-defined type (derived from {{lc|std::streambuf}}), associated with the standard C output stream {{lc|stdout}}.

These objects are guaranteed to be initialized during or before the first time an object of type {{lc|std::ios_base::Init}} is constructed and are available for use in the constructors and destructors of static objects with [[cpp/language/initialization#Non-local_variables|ordered initialization]] (as long as {{tt|&lt;iostream&gt;}} is included before the object is defined).

Unless {{c|sync_with_stdio(false)}} has been issued, it is safe to concurrently access these objects from multiple threads for both formatted and unformatted output.

Once initialized, {{tt|std::cout}} is {{c|tie()}}'d to {{lc|std::cin}} and {{tt|std::wcout}} is tie()'d to {{lc|std::wcin}}, meaning that any input operation on {{lc|std::cin}} executes {{c|std::cout.flush()}} (via {{lc|std::basic_istream::sentry}}'s constructor).

Once initialized, {{tt|std::cout}} is also {{c|tie()}}'d to {{lc|std::cerr}} and {{tt|std::wcout}} is tie()'d to {{lc|std::wcerr}}, meaning that any output operation on {{lc|std::cerr}} executes {{c|std::cout.flush()}} (via {{lc|std::basic_ostream::sentry}}'s constructor) {{mark since c++11}}

===Notes===
The 'c' in the name refers to &quot;character&quot; ([http://www.stroustrup.com/bs_faq2.html#cout stroustrup.com FAQ]); {{tt|cout}} means &quot;character output&quot; and {{tt|wcout}} means &quot;wide character output&quot;

===Example===
{{example
 | code=
#include &lt;iostream&gt;
struct Foo {
    int n;
    Foo() {
       std::cout &lt;&lt; &quot;static constructor\n&quot;;
    }
    ~Foo() {
       std::cout &lt;&lt; &quot;static destructor\n&quot;;
    }
};
Foo f; // static object
int main()
{
    std::cout &lt;&lt; &quot;main function\n&quot;;
}
 | output=
static constructor
main function
static destructor
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc Init}}
{{dsc inc | cpp/io/dsc cerr}}
{{dsc inc | cpp/io/dsc clog}}
{{dsc end}}

[[de:cpp/io/cout]]
[[es:cpp/io/cout]]
[[fr:cpp/io/cout]]
[[it:cpp/io/cout]]
[[ja:cpp/io/cout]]
[[pt:cpp/io/cout]]
[[ru:cpp/io/cout]]
[[zh:cpp/io/cout]]</text>
      <sha1>87wuhy9gj9mo70bex38jgmwlj389sfn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/fpos</title>
    <ns>0</ns>
    <id>3744</id>
    <revision>
      <id>73681</id>
      <parentid>73680</parentid>
      <timestamp>2014-11-10T19:09:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/instantiation/specialization</comment>
      <text xml:space="preserve" bytes="3724">{{cpp/title | fpos}}
{{cpp/io/navbar}}
{{dcl begin}}
{{dcl header | ios}}
{{dcl | 1=
template&lt; class State &gt;
class fpos;
}}
{{dcl end}}

Specializations of the class template {{lc|std::fpos}} identify absolute positions in a stream or in a file. Each object of type {{tt|fpos}} holds the byte position in the stream (typically as a private member of type {{lc|std::streamoff}}) and the current shift state, a value of type {{tt|State}} (typically {{lc|std::mbstate_t}}).

The following specializations of {{lc|std::fpos}} are provided: 

{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|streampos}} | {{c|std::fpos&lt;std::char_traits&lt;char&gt;::state_type&gt;}}}}
{{dsc | {{tt|wstreampos}} | {{c|std::fpos&lt;std::char_traits&lt;wchar_t&gt;::state_type&gt;}}}}
{{dsc end}}
{{rev begin}}
{{rev|since=c++11|
In addition, {{lc|std::u16streampos}} and {{lc|std::u32streampos}} are provided as implementation-defined types that satisfy the requirements of {{concept|pos_type}}
}}
{{rev end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/io/fpos/state | gets/sets the value of the shift state}}
{{dsc end}}

In addition, the following member functions and operators must be provided, although it's unspecified if they are members or non-member.

* A constructor that accepts an argument of type {{c|int}}.

* A constructor that accepts an argument of type {{lc|std::streamoff}}. This constructor must also accept the special value {{c|std::streamoff(-1)}}: the {{tt|std::fpos}} constructed in this manner is returned by some stream operations to indicate errors.

* A conversion operator that converts {{tt|fpos}} to {{lc|std::streamoff}} with the value equal to the offset from {{tt|std::fpos(0)}}.

* {{c|1=operator==}} that compares two objects of type {{tt|std::fpos}} and returns a value of type convertible to {{c|bool}}

* {{c|1=operator!=}} that compares two objects of type {{tt|std::fpos}} and returns a value of type convertible to {{c|bool}}

* {{c|operator+}} and {{c|1=operator+=}} which can add {{lc|std::streamoff}} to {{tt|std::fpos}}

* {{c|operator-}} and {{c|1=operator-=}} which can subtract {{lc|std::streamoff}} from an {{tt|std::fpos}}

* {{c|operator-}} which can subtract two objects of type {{tt|std::fpos}} producing an {{lc|std::streamoff}}

===Notes===
{{tt|std::streampos}} and {{tt|std::wstreampos}} are required to be the same type because {{c|std::char_traits&lt;char&gt;::state_type}} and {{c|std::char_traits&lt;wchar_t&gt;::state_type}} are required to both be {{lc|std::mbstate_t}}. C++98 had a self-contradictory statement that they may be different if the implementation supports no shift encoding in narrow-oriented iostreams but supports one or more shift encodings in wide-oriented streams, but that was corrected in C++03.

Some of the [[cpp/io|I/O streams member functions]] return and manipulate objects of member typedef {{tt|pos_type}}. For streams, these member typedefs are provided by the template parameter {{tt|Traits}}, which defaults to {{lc|std::char_traits}}, which define their {{tt|pos_type}}s to be specializations of {{tt|std::fpos}}. The behavior of the I/O streams library is implementation-defined when {{c|Traits::pos_type}} is not {{c|std::fpos&lt;std::mbstate_t&gt;}} (aka {{c|std::streampos}} or {{c|std::wstreampos}}).

===See also===
{{dsc begin}}
{{dsc typedef | cpp/io/streamoff | represents relative file/stream position (offset from fpos), sufficient to represent any file size }}
{{dsc inc | cpp/io/basic_ostream/dsc tellp}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp}}
{{dsc inc | cpp/io/c/dsc fgetpos}}
{{dsc end}}

[[de:cpp/io/fpos]]
[[es:cpp/io/fpos]]
[[fr:cpp/io/fpos]]
[[it:cpp/io/fpos]]
[[ja:cpp/io/fpos]]
[[pt:cpp/io/fpos]]
[[ru:cpp/io/fpos]]
[[zh:cpp/io/fpos]]</text>
      <sha1>oj4udjswd4ckdmjb02ah3pt2w0dntka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/fpos/state</title>
    <ns>0</ns>
    <id>9651</id>
    <revision>
      <id>62370</id>
      <parentid>62369</parentid>
      <timestamp>2013-06-27T01:00:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1017">{{cpp/io/fpos/title | state}}
{{cpp/io/fpos/navbar}}

{{dcl begin}}
{{dcl | num=1 |
State state() const;
}}
{{dcl | num=2 |
void state( State st );
}}
{{dcl end}}

Manages the file position state.

@1@ Returns the value of the file position state
@2@ Replaces the file position state with the value of {{tt|st}}.

For the specializations of {{lc|std::fpos}} that are used in the standard library, {{tt|State}} is always {{lc|std::mbstate_t}}

===Parameters===
{{par begin}}
{{par | st | new value for the state}}
{{par end}}

===Return value===
@1@ the current value of the fpos state

@2@ (none)

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;cwchar&gt;

int main()
{
    std::istringstream s(&quot;test&quot;);
    std::mbstate_t st = s.tellg().state();

    if(std::mbsinit(&amp;st))
        std::cout &lt;&lt; &quot;The stream is in the initial shift state\n&quot;;
}
|output=
The stream is in the initial shift state
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbstate_t}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/io errc</title>
    <ns>0</ns>
    <id>4788</id>
    <revision>
      <id>80978</id>
      <parentid>62748</parentid>
      <timestamp>2015-09-19T07:16:22Z</timestamp>
      <contributor>
        <ip>117.136.45.157</ip>
      </contributor>
      <text xml:space="preserve" bytes="1816">{{cpp/title|io_errc}}
{{cpp/io/io_errc/navbar}}
{{dcl begin}}
{{dcl header | ios}}
{{dcl | since=c++11 | 1=
enum class io_errc;
}}
{{dcl end}}

The scoped enumeration {{tt|std::io_errc}} defines the error codes reported by I/O streams in {{lc|std::ios_base::failure}} exception objects. Only one error code ({{tt|std::io_errc::stream}}) is required, although the implementation may define additional error codes. Because the appropriate specialization of {{lc|std::is_error_code_enum}} is provided, values of type {{tt|std::io_errc}} are implicitly convertible to {{lc|std::error_code}}.

===Member constants===
{{dsc begin}}
{{dsc hitem | Enumeration constant | Value}}
{{dsc | {{tt|stream}} | {{c|1}} }}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/io/io_errc/dsc make_error_code}}
{{dsc inc | cpp/io/io_errc/dsc make_error_condition}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/io/io_errc/dsc is_error_code_enum}}
{{dsc end}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
int main()
{
    std::ifstream f(&quot;doesn't exist&quot;);
    try {
        f.exceptions(f.failbit);
    } catch (const std::ios_base::failure&amp; e) {
        std::cout &lt;&lt; &quot;Caught an ios_base::failure.\n&quot;;
        if(e.code() == std::io_errc::stream)
            std::cout &lt;&lt; &quot;The error code is std::io_errc::stream\n&quot;;
    }
}
 | output=
Caught an ios_base::failure.
The error code is std::io_errc::stream
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc inc | cpp/io/ios_base/dsc failure | mem=std::ios_base}}
{{dsc end}}

[[de:cpp/io/io errc]]
[[es:cpp/io/io errc]]
[[fr:cpp/io/io errc]]
[[it:cpp/io/io errc]]
[[ja:cpp/io/io errc]]
[[pt:cpp/io/io errc]]
[[ru:cpp/io/io errc]]
[[zh:cpp/io/io errc]]</text>
      <sha1>196kigdev80cwizqhthp69tnfvwaohq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/io errc/is error code enum</title>
    <ns>0</ns>
    <id>4804</id>
    <revision>
      <id>62749</id>
      <parentid>61347</parentid>
      <timestamp>2013-07-01T23:35:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1693">{{cpp/title|is_error_code_enum&lt;small&gt;&lt;std::io_errc&gt;&lt;/small&gt;}}
{{cpp/io/io_errc/navbar}}
{{dcl begin}}
{{dcl header | ios}}
{{dcl | since=c++11 |
template&lt; &gt;
struct is_error_code_enum&lt;std::io_errc&gt; : public std::true_type { };
}}
{{dcl end}}

This specialization of {{lc|std::is_error_code_enum}} informs other library components that values of type {{lc|std::io_errc}} are enumerations that hold error codes, which makes them implicitly convertible and assignable to objects of type {{lc|std::error_code}}.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===Example===
{{example
 | The comparison between {{c|e.code()}} and {{lc|std::io_errc::stream}} compiles because {{c|std::is_error_code_enum&lt;std::io_errc&gt;::value {{==}} true}}
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
int main()
{
    std::ifstream f(&quot;doesn't exist&quot;);
    try {
        f.exceptions(f.failbit);
    } catch (const std::ios_base::failure&amp; e) {
        std::cout &lt;&lt; &quot;Caught an ios_base::failure.\n&quot;;
        if(e.code() == std::io_errc::stream)
            std::cout &lt;&lt; &quot;The error code is std::io_errc::stream\n&quot;;
    }
}
 | output=
Caught an ios_base::failure.
The error code is std::io_errc::stream
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error_code/dsc is_error_code_enum}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/io/dsc io_errc}}
{{dsc end}}

[[de:cpp/io/io errc/is error code enum]]
[[es:cpp/io/io errc/is error code enum]]
[[fr:cpp/io/io errc/is error code enum]]
[[it:cpp/io/io errc/is error code enum]]
[[ja:cpp/io/io errc/is error code enum]]
[[pt:cpp/io/io errc/is error code enum]]
[[ru:cpp/io/io errc/is error code enum]]
[[zh:cpp/io/io errc/is error code enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/io errc/make error code</title>
    <ns>0</ns>
    <id>4805</id>
    <revision>
      <id>91551</id>
      <parentid>66205</parentid>
      <timestamp>2017-03-31T19:49:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1500">{{cpp/title|make_error_code{{dsc small|(std::io_errc)}}}}
{{cpp/io/io_errc/navbar}}
{{ddcl | header=ios | since=c++11 |
std::error_code make_error_code( std::io_errc e );
}}

Constructs an {{lc|std::error_code}} object from a value of type {{lc|std::io_errc}} as if by {{c|return std::error_code(static_cast&lt;int&gt;(e), std::iostream_category())}}. This function is called by the constructor of {{lc|std::error_code}} when given an {{lc|std::io_errc}} argument.

===Parameters===
{{par begin}}
{{par | e | error code number}}
{{par end}}

===Return value===
A value of type {{lc|std::error_code}} that holds the error code number from {{tt|e}} associated with the error category {{c|&quot;iostream&quot;}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;system_error&gt;
int main()
{
    std::error_code ec = std::make_error_code(std::io_errc::stream);
    std::cout &lt;&lt; &quot;Error code from io_errc::stream has category &quot;
              &lt;&lt; ec.category().name() &lt;&lt; '\n';
}
 | output=
Error code from io_errc::stream has category iostream
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/io/dsc io_errc}}
{{dsc end}}

[[de:cpp/io/io errc/make error code]]
[[es:cpp/io/io errc/make error code]]
[[fr:cpp/io/io errc/make error code]]
[[it:cpp/io/io errc/make error code]]
[[ja:cpp/io/io errc/make error code]]
[[pt:cpp/io/io errc/make error code]]
[[ru:cpp/io/io errc/make error code]]
[[zh:cpp/io/io errc/make error code]]</text>
      <sha1>tkltlpq5620must776zsxnajgvzf4dh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/io errc/make error condition</title>
    <ns>0</ns>
    <id>4806</id>
    <revision>
      <id>91538</id>
      <parentid>69156</parentid>
      <timestamp>2017-03-31T19:49:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1567">{{cpp/title|make_error_condition{{dsc small|(std::io_errc)}}}}
{{cpp/io/io_errc/navbar}}
{{ddcl | header=ios | since=c++11 |
std::error_condition make_error_condition( std::io_errc e );
}}

Constructs an {{lc|std::error_condition}} object from a value of type {{lc|std::io_errc}} as if by {{c|return std::error_condition(static_cast&lt;int&gt;(e), std::iostream_category())}}.

===Parameters===
{{par begin}}
{{par | e | error code number}}
{{par end}}

===Return value===
A value of type {{lc|std::error_condition}} that holds the error code number from {{tt|e}} associated with the error category {{c|&quot;iostream&quot;}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;system_error&gt;
#include &lt;string&gt;

int main()
{
    std::error_condition ec  = std::make_error_condition(std::io_errc::stream);
    std::cout &lt;&lt; &quot;error condition for io_errc::stream has value &quot; &lt;&lt; ec.value()
              &lt;&lt; &quot;\nand message \&quot;&quot; &lt;&lt; ec.message() &lt;&lt; &quot;\&quot;\n&quot;;
}
 | output=
error condition for io_errc::stream has value 1
and message &quot;unspecified iostream_category error&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc inc | cpp/io/dsc io_errc}}
{{dsc end}}

[[de:cpp/io/io errc/make error condition]]
[[es:cpp/io/io errc/make error condition]]
[[fr:cpp/io/io errc/make error condition]]
[[it:cpp/io/io errc/make error condition]]
[[ja:cpp/io/io errc/make error condition]]
[[pt:cpp/io/io errc/make error condition]]
[[ru:cpp/io/io errc/make error condition]]
[[zh:cpp/io/io errc/make error condition]]</text>
      <sha1>96rj65uujvxmd3w9n5i4iz81eg4g21v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base</title>
    <ns>0</ns>
    <id>606</id>
    <revision>
      <id>81364</id>
      <parentid>57861</parentid>
      <timestamp>2015-10-26T19:36:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>open_mode etc are gone too</comment>
      <text xml:space="preserve" bytes="3267">{{cpp/title|ios_base}}
{{cpp/io/ios_base/navbar}}
{{ddcl | header=ios |
class ios_base;
}}

The class {{tt|ios_base}} is a multipurpose class that serves as the base class for all I/O stream classes. It maintains several kinds of data:

@1@ state information: stream status flags
@2@ control information: flags that control formatting of both input and output sequences and the imbued locale
@3@ private storage: indexed extensible data structure that allows both {{c|long}} and {{c|void*}} members, which may be implemented as two arbitrary-length arrays or a single array of two-element structs or another container.
@4@ callbacks: arbitrary number of user-defined functions to be called from imbue(), copyfmt(), and ~ios_base()

Typical implementation holds member constants corresponding to all values of fmtflags, iostate, openmode, and seekdir shown below, member variables to maintain current precision, width, and formatting flags, the exception mask, the buffer error state, a resizeable container holding the callbacks, the currently imbued locale, the private storage, and a static integer variable for xalloc().

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc constructor}}
{{dsc inc | cpp/io/ios_base/dsc destructor}}

{{dsc h2 | Formatting}}
{{dsc inc | cpp/io/ios_base/dsc flags}}
{{dsc inc | cpp/io/ios_base/dsc setf}}
{{dsc inc | cpp/io/ios_base/dsc unsetf}}
{{dsc inc | cpp/io/ios_base/dsc precision}}
{{dsc inc | cpp/io/ios_base/dsc width}}

{{dsc h2 | Locales}}
{{dsc inc | cpp/io/ios_base/dsc imbue}}
{{dsc inc | cpp/io/ios_base/dsc getloc}}

{{dsc h2 | Internal extensible array}}
{{dsc inc | cpp/io/ios_base/dsc xalloc}}
{{dsc inc | cpp/io/ios_base/dsc iword}}
{{dsc inc | cpp/io/ios_base/dsc pword}}

{{dsc h2 | Miscellaneous}}
{{dsc inc | cpp/io/ios_base/dsc register_callback}}
{{dsc inc | cpp/io/ios_base/dsc sync_with_stdio}}

{{dsc h1 | Member classes}}
{{dsc inc | cpp/io/ios_base/dsc failure}}
{{dsc inc | cpp/io/ios_base/dsc Init}}
{{dsc end}}

{{dsc begin}}
{{dsc h1 | Member types and constants}}
{{dsc hitem | Type | Explanation}}
{{dsc inc | cpp/io/ios_base/dsc openmode}}
{{dsc inc | cpp/io/ios_base/dsc fmtflags}}
{{dsc inc | cpp/io/ios_base/dsc iostate}}
{{dsc inc | cpp/io/ios_base/dsc seekdir}}
{{dsc inc | cpp/io/ios_base/dsc event}}
{{dsc inc | cpp/io/ios_base/dsc event_callback}}
{{dsc end}}
{{rev begin}}
{{rev|until=c++17|
{{dsc begin}}
{{dsc h2 | Deprecated member types }}
{{dsc hitem | Type | Explanation}}
{{dsc | {{tt|io_state}}{{mark deprecated}} | integer type that may be used like {{tt|iostate}}}}
{{dsc | {{tt|open_mode}}{{mark deprecated}} | integer type that may be used like {{tt|openmode}}}}
{{dsc | {{tt|seek_dir}}{{mark deprecated}} | integer type that may be used like {{tt|seekdir}}}}
{{dsc | {{tt|streamoff}}{{mark deprecated}} | unspecified type that may be used like {{tt|off_type}}, not necessarily {{lc|std::streamoff}}}}
{{dsc | {{tt|streampos}}{{mark deprecated}} | unspecified type that may be used like {{tt|pos_type}}, not necessarily {{lc|std::streampos}}}}
{{dsc end}}
}}
{{rev end}}

[[de:cpp/io/ios base]]
[[es:cpp/io/ios base]]
[[fr:cpp/io/ios base]]
[[it:cpp/io/ios base]]
[[ja:cpp/io/ios base]]
[[pt:cpp/io/ios base]]
[[ru:cpp/io/ios base]]
[[zh:cpp/io/ios base]]</text>
      <sha1>12agoq3k4tnir9rm3lizeoe492welww</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/Init</title>
    <ns>0</ns>
    <id>607</id>
    <revision>
      <id>85979</id>
      <parentid>85978</parentid>
      <timestamp>2016-06-08T19:34:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Member functions */ destroyed, not created</comment>
      <text xml:space="preserve" bytes="1539">{{cpp/io/ios_base/title | Init }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
class Init;
}}

This class is used to ensure that the default C++ streams ({{lc|std::cin}}, {{lc|std::cout}}, etc.) are properly initialized and destructed. The class tracks how many instances of it are created and initializes the C++ streams when the first instance is constructed as well as flushes the output streams when the last instance is destructed.

The header {{tt|&lt;iostream&gt;}} behaves as if it defines (directly or indirectly) an instance of {{c|std::ios_base::Init}} with static storage duration: this makes it safe to access the standard I/O streams in the constructors and destructors of static objects with [[cpp/language/initialization#Non-local_variables|ordered initialization]] (as long as {{tt|#include &lt;iostream&gt;}} is included in the translation unit before these objects were defined)

===Member functions===
{{dsc begin}}
{{dsc mem ctor | nolink=true | if {{c|*this}} is the first instance created, initializes the default C++ streams}}
{{dsc mem dtor | nolink=true | if {{c|*this}} is the last instance destroyed, flushes the default C++ streams}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/dsc cin}}
{{dsc inc | cpp/io/dsc cout}}
{{dsc inc | cpp/io/dsc cerr}}
{{dsc inc | cpp/io/dsc clog}}
{{dsc end}}

[[de:cpp/io/ios base/Init]]
[[es:cpp/io/ios base/Init]]
[[fr:cpp/io/ios base/Init]]
[[it:cpp/io/ios base/Init]]
[[ja:cpp/io/ios base/Init]]
[[pt:cpp/io/ios base/Init]]
[[ru:cpp/io/ios base/Init]]
[[zh:cpp/io/ios base/Init]]</text>
      <sha1>ngqc94dlr9v781dar08jx9fhiv8wa8t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/event</title>
    <ns>0</ns>
    <id>5469</id>
    <revision>
      <id>90759</id>
      <parentid>64265</parentid>
      <timestamp>2017-03-09T12:08:36Z</timestamp>
      <contributor>
        <ip>113.88.81.69</ip>
      </contributor>
      <text xml:space="preserve" bytes="1020">{{cpp/io/ios_base/title|event}}
{{cpp/io/ios_base/navbar}}
{{ddcl | 
enum event {erase_event, imbue_event, copyfmt_event};
}}

Specifies the event type which is passed to functions registered by {{lc|register_callback()}} on specific events. The following constants are defined:

{{dsc begin}}
{{dsc hitem | Constant | Explanation }}
{{dsc | {{tt|erase_event}} | issued on {{lc|~ios_base()}} or {{ltt|cpp/io/basic_ios/copyfmt|basic_ios::copyfmt()}} (before the copy of members takes place)}}
{{dsc | {{tt|imbue_event}} | issued on {{lc|imbue()}}}}
{{dsc | {{tt|copyfmt_event}} | issued on {{ltt|cpp/io/basic_ios/copyfmt|basic_ios::copyfmt()}} (after the copy of members takes place, but before the exception settings are copied)}}
{{dsc end}}

===Example===
{{example|
|code=
|output=
}}

[[de:cpp/io/ios base/event]]
[[es:cpp/io/ios base/event]]
[[fr:cpp/io/ios base/event]]
[[it:cpp/io/ios base/event]]
[[ja:cpp/io/ios base/event]]
[[pt:cpp/io/ios base/event]]
[[ru:cpp/io/ios base/event]]
[[zh:cpp/io/ios base/event]]</text>
      <sha1>hmxo5xp6xj3krwmb166lkmax22umzco</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/event callback</title>
    <ns>0</ns>
    <id>5470</id>
    <revision>
      <id>64267</id>
      <parentid>57865</parentid>
      <timestamp>2013-08-15T16:11:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="1248">{{cpp/io/ios_base/title|event_callback}}
{{cpp/io/ios_base/navbar}}
{{ddcl | 
typedef void (*event_callback)(event type, ios_base&amp; ios, int index);
}}

The type of function callbacks that can be registered using {{lc|register_callback()}} to be called on specific events.

{{tt|type}} is a value of type {{l2tt|cpp/io/ios_base/event}} which indicates the type of the event that will invoke this callback.

{{tt|ios}} refers to the stream object for which the callback is invoked: {{c|*this}} is passed as the argument when callbacks are invoked by {{lc|std::ios_base}} and {{lc|std::basic_ios}} member functions.

{{tt|index}} is the user-provided value passed to {{lc|register_callback()}} when registering the function.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc copyfmt}}
{{dsc inc | cpp/io/ios_base/dsc imbue}}
{{dsc inc | cpp/io/ios_base/dsc destructor}}
{{dsc inc | cpp/io/ios_base/dsc register_callback}}
{{dsc end}}

[[de:cpp/io/ios base/event callback]]
[[es:cpp/io/ios base/event callback]]
[[fr:cpp/io/ios base/event callback]]
[[it:cpp/io/ios base/event callback]]
[[ja:cpp/io/ios base/event callback]]
[[pt:cpp/io/ios base/event callback]]
[[ru:cpp/io/ios base/event callback]]
[[zh:cpp/io/ios base/event callback]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/failure</title>
    <ns>0</ns>
    <id>608</id>
    <revision>
      <id>81599</id>
      <parentid>62100</parentid>
      <timestamp>2015-10-28T04:49:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2462</comment>
      <text xml:space="preserve" bytes="2392">{{cpp/io/ios_base/title | failure}}
{{cpp/io/ios_base/navbar}}
{{ddcl | header=ios | 
class failure;
}}

The class {{lc|std::ios_base::failure}} defines an exception object that is thrown on failure by the functions in the Input/Output library.

{{rev inl|since=c++17|{{lc|std::ios_base::failure}} may be defined either as a member class of {{lc|std::ios_base}} or as a synonym (typedef) for another class with equivalent functionality.}}

{{rev begin}}
{{rev | until=c++11 |
{{inheritance diagram/std-ios_base-failure-2003}}
}}
{{rev | since=c++11 |
{{inheritance diagram/std-ios_base-failure}}
}}
{{rev end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/failure/dsc constructor}}
{{dsc end}}

{{member | {{small|std::ios_base::failure::}}::failure |
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
explicit failure( const std::string&amp; message );
}}
{{dcl | since=c++11 | 1=
explicit failure( const std::string&amp; message, 
                  const std::error_code&amp; ec = std::io_errc::stream );
}}
{{dcl rev end}}
{{dcl | since=c++11 | 1=
explicit failure( const char* message,
                  const std::error_code&amp; ec = std::io_errc::stream );
}}
{{dcl end}}

Constructs the exception object using {{tt|message}} as explanation string which can later be retrieved using {{ltf|cpp/error/exception/what}}. 

===Parameters===
{{par begin}}
{{par | message | explanatory string}}
{{par end}}
}}

{{cpp/error/system_error/inherit}}
{{cpp/error/runtime_error/inherit}}
{{cpp/error/exception/inherit}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
int main()
{
    std::ifstream f(&quot;doesn't exist&quot;);
    try {
        f.exceptions(f.failbit);
    } catch (const std::ios_base::failure&amp; e)
    {
        std::cout &lt;&lt; &quot;Caught an ios_base::failure.\n&quot;
                  &lt;&lt; &quot;Explanatory string: &quot; &lt;&lt; e.what() &lt;&lt; '\n'
                  &lt;&lt; &quot;Error code: &quot; &lt;&lt; e.code() &lt;&lt; '\n';
    }
}
 | output=
Caught an ios_base::failure.
Explanatory string: ios_base::clear: unspecified iostream_category error
Error code: iostream:1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/dsc io_errc}}
{{dsc end}}

[[de:cpp/io/ios base/failure]]
[[es:cpp/io/ios base/failure]]
[[fr:cpp/io/ios base/failure]]
[[it:cpp/io/ios base/failure]]
[[ja:cpp/io/ios base/failure]]
[[pt:cpp/io/ios base/failure]]
[[ru:cpp/io/ios base/failure]]
[[zh:cpp/io/ios base/failure]]</text>
      <sha1>7zf941n7zowpzplzf1wvdb7qcwwp3is</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/failure/failure</title>
    <ns>0</ns>
    <id>609</id>
    <redirect title="cpp/io/ios base/failure" />
    <revision>
      <id>62092</id>
      <parentid>62090</parentid>
      <timestamp>2013-06-22T01:56:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/ios base/failure]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/io/ios_base/failure]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/flags</title>
    <ns>0</ns>
    <id>610</id>
    <revision>
      <id>63726</id>
      <parentid>63721</parentid>
      <timestamp>2013-07-23T13:20:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 63721 by [[Special:Contributions/SuperBoi45|SuperBoi45]] ([[User talk:SuperBoi45|talk]]) fmtflags fmtflags flags() ?</comment>
      <text xml:space="preserve" bytes="948">{{cpp/io/ios_base/title | flags }}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | num=1 |
fmtflags flags() const;
}}
{{dcl | num=2 |
fmtflags flags( fmtflags flags );
}}
{{dcl end}}

Manages format flags. 

1) returns current formatting setting

2) replaces current settings with given ones. 

===Parameters===
{{par begin}}
{{par | flags | new formatting setting. It can be a combination of the following constants:
{{cpp/io/ios_base/fmtflags consts}}
}}
{{par end}}

===Return value===
the formatting flags before the call to the function

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc setf}}
{{dsc inc | cpp/io/ios_base/dsc unsetf}}
{{dsc end}}

[[de:cpp/io/ios base/flags]]
[[es:cpp/io/ios base/flags]]
[[fr:cpp/io/ios base/flags]]
[[it:cpp/io/ios base/flags]]
[[ja:cpp/io/ios base/flags]]
[[pt:cpp/io/ios base/flags]]
[[ru:cpp/io/ios base/flags]]
[[zh:cpp/io/ios base/flags]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/fmtflags</title>
    <ns>0</ns>
    <id>611</id>
    <revision>
      <id>90764</id>
      <parentid>90757</parentid>
      <timestamp>2017-03-09T12:22:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rvv</comment>
      <text xml:space="preserve" bytes="3567">{{cpp/io/ios_base/title | fmtflags}}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | 
typedef /*implementation defined*/ fmtflags;
}}
{{dcl | 1=
static constexpr fmtflags dec = /*implementation defined*/
static constexpr fmtflags oct = /*implementation defined*/
static constexpr fmtflags hex = /*implementation defined*/
static constexpr fmtflags basefield = /*implementation defined (dec {{!}} oct {{!}} hex)*/
}}
{{dcl | 1=
static constexpr fmtflags left = /*implementation defined*/
static constexpr fmtflags right = /*implementation defined*/
static constexpr fmtflags internal = /*implementation defined*/
static constexpr fmtflags adjustfield = /*implementation defined (left {{!}} right {{!}} internal)*/
}}
{{dcl | 1=
static constexpr fmtflags scientific = /*implementation defined*/
static constexpr fmtflags fixed = /*implementation defined*/
static constexpr fmtflags floatfield = /*implementation defined (scientific {{!}} fixed)*/
}}
{{dcl | 1=
static constexpr fmtflags boolalpha = /*implementation defined*/
static constexpr fmtflags showbase = /*implementation defined*/
static constexpr fmtflags showpoint = /*implementation defined*/
static constexpr fmtflags showpos = /*implementation defined*/
static constexpr fmtflags skipws = /*implementation defined*/
static constexpr fmtflags unitbuf = /*implementation defined*/
static constexpr fmtflags uppercase = /*implementation defined*/
}}
{{dcl end}}

Specifies available formatting flags. It is a {{concept|BitmaskType}}. The following constants are defined: 
{{cpp/io/ios_base/fmtflags consts}}

===Example===
{{example
 | The following example shows several different ways to print the same result.
 | code=
#include &lt;iostream&gt;

int main() 
{
    int num = 150;

    // using fmtflags as class member constants:
    std::cout.setf(std::ios_base::hex, std::ios_base::basefield);
    std::cout.setf(std::ios_base::showbase);
    std::cout &lt;&lt; num &lt;&lt; '\n';

    // using fmtflags as inherited class member constants:
    std::cout.setf (std::ios::hex , std::ios::basefield);
    std::cout.setf (std::ios::showbase);
    std::cout &lt;&lt; num &lt;&lt; '\n';

    // using fmtflags as object member constants:
    std::cout.setf(std::cout.hex, std::cout.basefield);
    std::cout.setf(std::cout.showbase);
    std::cout &lt;&lt; num &lt;&lt; '\n';

    // using fmtflags as a type:
    std::ios_base::fmtflags ff;
    ff = std::cout.flags();
    ff &amp;= ~std::cout.basefield;   // unset basefield bits
    ff {{!}}= std::cout.hex;          // set hex
    ff {{!}}= std::cout.showbase;     // set showbase
    std::cout.flags(ff);
    std::cout &lt;&lt; num &lt;&lt; '\n';

    // not using fmtflags, but using manipulators:
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; num &lt;&lt; '\n';
}
 | output=
0x96
0x96
0x96
0x96
0x96
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc flags}}
{{dsc inc | cpp/io/ios_base/dsc setf}}
{{dsc inc | cpp/io/ios_base/dsc unsetf}}
{{dsc inc | cpp/io/manip/dsc setbase}}
{{dsc inc | cpp/io/manip/dsc setfill}}
{{dsc inc | cpp/io/manip/dsc fixed}}
{{dsc inc | cpp/io/manip/dsc showbase}}
{{dsc inc | cpp/io/manip/dsc boolalpha}}
{{dsc inc | cpp/io/manip/dsc showpos}}
{{dsc inc | cpp/io/manip/dsc showpoint}}
{{dsc inc | cpp/io/manip/dsc unitbuf}}
{{dsc inc | cpp/io/manip/dsc skipws}}
{{dsc inc | cpp/io/manip/dsc uppercase}}
{{dsc end}}

[[de:cpp/io/ios base/fmtflags]]
[[es:cpp/io/ios base/fmtflags]]
[[fr:cpp/io/ios base/fmtflags]]
[[it:cpp/io/ios base/fmtflags]]
[[ja:cpp/io/ios base/fmtflags]]
[[pt:cpp/io/ios base/fmtflags]]
[[ru:cpp/io/ios base/fmtflags]]
[[zh:cpp/io/ios base/fmtflags]]</text>
      <sha1>ct1b8645ei4ybvt2kz1cu16pgcdjf9g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/getloc</title>
    <ns>0</ns>
    <id>612</id>
    <revision>
      <id>66543</id>
      <parentid>65431</parentid>
      <timestamp>2013-12-04T17:01:12Z</timestamp>
      <contributor>
        <username>Ashish20</username>
        <id>519</id>
      </contributor>
      <minor/>
      <comment>getloc is a const member function (ios.base.locales)</comment>
      <text xml:space="preserve" bytes="1081">{{cpp/io/ios_base/title | getloc }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
std::locale getloc() const;
}}

Returns the current locale associated with the stream.

===Parameters===
(none)

===Return value===
the locale object associated with the stream.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ctime&gt;
#include &lt;iomanip&gt;
#include &lt;codecvt&gt;

int main()
{
    std::wbuffer_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; conv(std::cout.rdbuf());
    std::wostream out(&amp;conv);

    out.imbue(std::locale(out.getloc(),
                          new std::time_put_byname&lt;wchar_t&gt;(&quot;ja_JP&quot;)));

    std::time_t t = std::time(NULL);
    out &lt;&lt; std::put_time(std::localtime(&amp;t), L&quot;%A %c&quot;) &lt;&lt; '\n';
}
 | output=
土曜日 2013年09月14日 11時31分15秒
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc imbue}}
{{dsc end}}

[[de:cpp/io/ios base/getloc]]
[[es:cpp/io/ios base/getloc]]
[[fr:cpp/io/ios base/getloc]]
[[it:cpp/io/ios base/getloc]]
[[ja:cpp/io/ios base/getloc]]
[[pt:cpp/io/ios base/getloc]]
[[ru:cpp/io/ios base/getloc]]
[[zh:cpp/io/ios base/getloc]]</text>
      <sha1>1hwth5ho2yhfjqa9nzscyaq3szipa5x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/imbue</title>
    <ns>0</ns>
    <id>613</id>
    <revision>
      <id>64165</id>
      <parentid>57874</parentid>
      <timestamp>2013-08-15T14:58:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="855">{{cpp/io/ios_base/title | imbue }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
std::locale imbue( const std::locale&amp; loc );
}}

Sets the associated locale of the stream to the given one. Before returning, each function, registered by {{lc|register_callback()}} is called with {{tt|imbue_event}} as a parameter. 

===Parameters===
{{par begin}}
{{par | loc | new locale to associate the stream to}}
{{par end}}

===Return value===
The locale object, associated with the stream before the operation

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc getloc}}
{{dsc end}}

[[de:cpp/io/ios base/imbue]]
[[es:cpp/io/ios base/imbue]]
[[fr:cpp/io/ios base/imbue]]
[[it:cpp/io/ios base/imbue]]
[[ja:cpp/io/ios base/imbue]]
[[pt:cpp/io/ios base/imbue]]
[[ru:cpp/io/ios base/imbue]]
[[zh:cpp/io/ios base/imbue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/ios base</title>
    <ns>0</ns>
    <id>5536</id>
    <revision>
      <id>66006</id>
      <parentid>61895</parentid>
      <timestamp>2013-10-20T08:10:34Z</timestamp>
      <contributor>
        <username>SneakySnake</username>
        <id>2552</id>
      </contributor>
      <minor/>
      <comment>Fix incorrect numbering in declaration list</comment>
      <text xml:space="preserve" bytes="1331">{{cpp/io/ios_base/title|ios_base}}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
private:
ios_base( const ios_base&amp; );
}}
{{dcl | since=c++11 | 1=
public:
ios_base( const ios_base&amp; ) = delete;
}}
{{dcl rev end}}
{{dcl | num=2 |
protected:
ios_base();
}}
{{dcl end}}

1) The copy constuctor is deleted: streams are not copyable

2) The default constructor is protected: only derived classes may construct {{tt|std::ios_base}}. The internal state is undefined after the construction. The derived class must call {{ltf|cpp/io/basic_ios/init|basic_ios::init}} to complete initialization before first use or before destructor, otherwise the behavior is undefined.

===Notes===
The same applies to the constructors of the next class in the I/O hierarchy, {{lc|std::basic_ios}}. Further-derived classes ({{lc|std::istream}} and {{lc|std::ostream}}) are always constructed with a concrete streambuffer object and call {{ltf|cpp/io/basic_ios/init|basic_ios::init}}, possibly more than once, to complete initialization of their virtual base.

[[de:cpp/io/ios base/ios base]]
[[es:cpp/io/ios base/ios base]]
[[fr:cpp/io/ios base/ios base]]
[[it:cpp/io/ios base/ios base]]
[[ja:cpp/io/ios base/ios base]]
[[pt:cpp/io/ios base/ios base]]
[[ru:cpp/io/ios base/ios base]]
[[zh:cpp/io/ios base/ios base]]</text>
      <sha1>1fdguuqkqvqi5qxee1uvoed8xoqlagv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/iostate</title>
    <ns>0</ns>
    <id>614</id>
    <revision>
      <id>81943</id>
      <parentid>78324</parentid>
      <timestamp>2015-11-20T18:42:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>badbit is for operator&lt;&lt; from an empty streambuf, not operator&gt;&gt; to an empty streambuf (which is already correctly listed under failbit causes)</comment>
      <text xml:space="preserve" bytes="8850">{{cpp/io/ios_base/title | iostate}}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | 
typedef /*implementation defined*/ iostate;
}}
{{dcl | 1=
static constexpr iostate goodbit = 0;
}}
{{dcl | 1=
static constexpr iostate badbit = /*implementation defined*/
static constexpr iostate failbit = /*implementation defined*/
static constexpr iostate eofbit = /*implementation defined*/
}}
{{dcl end}}

Specifies stream state flags. It is a {{concept|BitmaskType}}, the following constants are defined: 
{{cpp/io/ios_base/iostate consts}}

====The eofbit====
The eofbit is set by the following standard library functions:
* The string input function {{lc|std::getline}} if it completes by reaching the end of the stream, as opposed to reaching the specified terminating character.
* The numeric input overloads of {{l2tt|cpp/io/basic_istream/operator_gtgt|operator&gt;&gt;}} if the end of the stream was encountered while reading the next character, on Stage 2 of {{l2tt|cpp/locale/num_get/get}} processing. Depending on the parsing state, {{tt|failbit}} may or may not be set at the same time: for example, {{c|1=int n; istringstream buf(&quot;1&quot;); buf &gt;&gt; n;}} sets {{tt|eofbit}}, but not {{tt|failbit}}: the integer {{c|1}} was successfully parsed and stored in {{tt|n}}. On the other hand, {{c|1=bool b; istringstream buf(&quot;tr&quot;); buf &gt;&gt; boolalpha &gt;&gt; b;}} sets both {{tt|eofbit}} and {{tt|failbit}}: there was not enough characters to complete the parsing of the boolean {{c|true}}.
* The character extraction overloads of {{ltt|cpp/io/basic_istream/operator_gtgt2|operator&gt;&gt;{{dsc small|std::basic_istream}}}}, if the end of the stream is reached before the limit (if any) on the number of characters to be extracted.
* The {{lc|std::get_time}} I/O manipulator and any of the {{lc|std::time_get}} parsing functions: {{l2tt|cpp/locale/time_get/get}}, {{l2tt|cpp/locale/time_get/get_time}}, {{l2tt|cpp/locale/time_get/get_date}}, etc., if the end of the stream is reached before the last character needed to parse the expected date/time value was processed.
* The {{lc|std::get_money}} I/O manipulator and {{l2tt|cpp/locale/money_get/get}} function, if the end of the stream is reached before the last character needed to parse the expected monetary value was processed.
* The {{l2tt|cpp/io/basic_istream/sentry}} constructor, executed at the beginning of every formatted input function: unless the {{tt|skipws}} bit is unset (e.g. by issuing {{lc|std::noskipws}}), sentry reads and discards the leading whitespace characters. If the end of the input stream is reached during this operation, both {{tt|eofbit}} and {{tt|failbit}} are set, and no input takes place.
* The I/O manipulator {{lc|std::ws}}, if it reaches the end of the stream while consuming whitespace (but, unlike the formatted input sentry, it does not set {{tt|failbit}} in this case)
* The unformatted input functions {{l2tt|cpp/io/basic_istream/read}}, {{l2tt|cpp/io/basic_istream/get}}, {{l2tt|cpp/io/basic_istream/peek}}, and {{l2tt|cpp/io/basic_istream/getline}}, when reaching the end of the stream.
* The discard input function {{l2tt|cpp/io/basic_istream/ignore}}, when reaching the end of the stream before reaching the specified delimiter character.
* The immediate input function {{l2tt|cpp/io/basic_istream/readsome}}, if {{l2tt|cpp/io/basic_streambuf/in_avail}} returns {{c|-1}}

The following functions clear {{tt|eofbit}} as a side-effect:
* {{l2tt|cpp/io/basic_istream/putback}}
* {{l2tt|cpp/io/basic_istream/unget}}
* {{l2tt|cpp/io/basic_istream/seekg}}

====The failbit====
The failbit is set by the following standard library functions:
* The {{l2tt|cpp/io/basic_istream/sentry}} constructor, executed at the beginning of every input function, if either {{tt|eofbit}} or {{tt|badbit}} is already set on the stream, or if the end of stream is encountered while consuming leading whitespace.
* The {{l2tt|cpp/io/basic_ostream/sentry}} constructor, executed at the beginning of every output function, under implementation-defined conditions.
* {{ltt|cpp/string/basic_string/operator_ltltgtgt|operator&gt;&gt;{{dsc small|(std::basic_string&lt;&gt;)}}}} if the function extracts no characters from the input stream.
* {{ltt|cpp/numeric/complex/operator_ltltgtgt|operator&gt;&gt;{{dsc small|(std::complex&lt;&gt;)}}}} if the function fails to extract a valid complex number.
* The character array and single character overloads of {{ltt|cpp/io/basic_istream/operator_gtgt2|operator&gt;&gt;}} if they fail to extract any characters.
* The streambuf overload of {{l2tt|cpp/io/basic_istream/operator_gtgt|operator&gt;&gt;}} if the streambuf argument is a null pointer or if no characters were inserted into the streambuf.
* The streambuf overload of {{l2tt|cpp/io/basic_ostream/operator_ltlt|operator&lt;&lt;}} if the function inserts no characters.
* {{ltt|cpp/utility/bitset/operator_ltltgtgt2|operator&gt;&gt;{{dsc small|(std::bitset&lt;&gt;)}}}} if the function extracts no characters from the input stream.
* {{lc|std::getline}} if the function extracts no characters or if it manages to extract {{l2tt|cpp/string/basic_string/max_size}} characters from the input stream.
* The numeric, pointer, and boolean input overloads of {{l2tt|cpp/io/basic_istream/operator_gtgt|operator&gt;&gt;}} (technically, the overloads of {{l2tt|cpp/locale/num_get/get}} they call), if the input cannot be parsed as a valid value or if the value parsed does not fit in the destination type.
* The time input manipulator {{lc|std::get_time}} (technically, {{l2tt|cpp/locale/time_get/get}} it calls), if the input cannot be unambiguously parsed as a time value according to the given format string.
* The currency input manipulator {{lc|std::get_money}} (technically, {{l2tt|cpp/locale/money_get/get}} it calls), if the input cannot be unambiguously parsed as a monetary value according to the locale rules.
* The extraction operators of all {{concept|RandomNumberEngine}}s, if bad input is encountered.
* The extraction operators of all {{concept|RandomNumberDistribution}}s, if bad input is encountered.
* The unformatted input functions {{l2tt|cpp/io/basic_istream/get}} if they fails to extract any characters.
* {{l2tt|cpp/io/basic_istream/getline}}, if it extracts no characters, if it fills in the provided buffer without encountering the delimiter, or if the provided buffer size is less than 1.
* {{l2tt|cpp/io/basic_istream/read}}, if the end-of-file condition occurs on the input stream before all requested characters could be extracted.
* {{l2tt|cpp/io/basic_istream/seekg}} on failure
* {{l2tt|cpp/io/basic_ostream/tellp}} on failure
* The constructors of {{lc|std::basic_fstream}}, {{lc|std::basic_ifstream}}, and {{lc|std::basic_ofstream}} that takes a filename argument, if the file cannot be opened.
* {{l2tt|cpp/io/basic_fstream/open}}, {{l2tt|cpp/io/basic_ifstream/open}}, and {{l2tt|cpp/io/basic_ofstream/open}} if the file cannot be opened.
* {{l2tt|cpp/io/basic_fstream/close}}, {{l2tt|cpp/io/basic_ifstream/close}}, and {{l2tt|cpp/io/basic_ofstream/close}} if the file cannot be closed.

====The badbit====
The badbit is set by the following standard library functions:

* {{l2tt|cpp/io/basic_ostream/put}} if it fails to insert a character into the output stream, for any reason.
* {{l2tt|cpp/io/basic_ostream/write}} if it fails to insert a character into the output stream, for any reason.
* Formatted output functions [[cpp/io/basic_ostream/operator_ltlt|operator&lt;&lt;]], {{lc|std::put_money}}, and {{lc|std::put_time}}, if they encounter the end of the output stream before completing output.
* {{l2tt|cpp/io/basic_ios/init}} when called to initialize a stream with a null pointer for {{tt|rdbuf()}}
* {{l2tt|cpp/io/basic_istream/putback}} and {{l2tt|cpp/io/basic_istream/unget}} when called on a stream with a null {{tt|rdbuf()}}
* {{l2tt|cpp/io/basic_ostream/operator_ltlt|operator&lt;&lt;{{dsc small|(basic_streambuf*)}}}} when a null pointer is passed as the argument.
* {{l2tt|cpp/io/basic_istream/putback}} and {{l2tt|cpp/io/basic_istream/unget}} if 
{{c|rdbuf()-&gt;sputbackc()}} or {{c|rdbuf()-&gt;sungetc()}} return {{c|traits::eof()}}.
* {{l2tt|cpp/io/basic_istream/sync}}, {{l2tt|cpp/io/basic_ostream/flush}}, and every output function on a {{tt|unitbuf}} output stream, if {{c|rdbuf()-&gt;pubsync()}} returns {{c|-1}}
* Every stream I/O function if an exception is thrown by any member function of the associated stream buffer (e.g. sbumpc(), xsputn(), sgetc(), overflow(), etc)
* {{l2tt|cpp/io/ios_base/iword}} and {{l2tt|cpp/io/ios_base/pword}} on failure (e.g. failure to allocate memory)

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{cpp/io/basic ios/iostate accessors}}

[[de:cpp/io/ios base/iostate]]
[[es:cpp/io/ios base/iostate]]
[[fr:cpp/io/ios base/iostate]]
[[it:cpp/io/ios base/iostate]]
[[ja:cpp/io/ios base/iostate]]
[[pt:cpp/io/ios base/iostate]]
[[ru:cpp/io/ios base/iostate]]
[[zh:cpp/io/ios base/iostate]]</text>
      <sha1>ozj30qvuhwwrgzuane0isi5zs0bu71u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/iword</title>
    <ns>0</ns>
    <id>615</id>
    <revision>
      <id>81171</id>
      <parentid>64166</parentid>
      <timestamp>2015-10-04T17:15:23Z</timestamp>
      <contributor>
        <username>Kariya mitsuru</username>
        <id>622</id>
      </contributor>
      <text xml:space="preserve" bytes="2747">{{cpp/io/ios_base/title | iword }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
long&amp; iword( int index );
}}

First, allocates or resizes the private storage (dynamic array of {{c|long}} or another indexable data structure) sufficiently to make {{tt|index}} a valid index, then returns a reference to the {{c|long}} element of the private storage with the index {{tt|index}}. 

The reference may be invalidated by any operation on this {{tt|ios_base}} object, including another call to {{tt|iword()}}, but the stored values are retained, so that reading from {{c|iword(index)}} with the same index later will produce the same value (until the next call to {{lc|std::basic_ios::copyfmt()}}). The value can be used for any purpose. The index of the element must be obtained by {{lc|xalloc()}}, otherwise collisions with other users of this {{tt|ios_base}} may occur. New elements are initialized to {{c|0}}.

If allocation fails, calls {{c|std::basic_ios&lt;&gt;::setstate(badbit)}} which may throw {{lc|std::ios_base::failure}}

===Notes===
Typical use of iword storage is to pass information (e.g. custom formatting flags) from user-defined I/O manipulators to user-defined {{tt|operator&lt;&lt;}} and {{tt|operator&gt;&gt;}} or to user-defined formatting facets imbued into standard streams.

===Parameters===
{{par begin}}
{{par | index | index value of the element}}
{{par end}}

===Return value===
A reference to the element.

===Exceptions===
May throw {{lc|std::ios_base::failure}} when setting the badbit.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;

struct Foo {
    static int foo_xalloc;
    std::string data; 
    Foo(const std::string&amp; s) : data(s) {}
};

// allocates the iword storage for use with Foo objects
int Foo::foo_xalloc = std::ios_base::xalloc();

// This user-defined operator&lt;&lt; prints the string in reverse if the iword holds 1
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Foo&amp; f)
{
    if(os.iword(Foo::foo_xalloc) == 1)
        return os &lt;&lt; std::string(f.data.rbegin(), f.data.rend());
    else
        return os &lt;&lt; f.data;
}

// This I/O manipulator flips the number stored in iword between 0 and 1
std::ios_base&amp; rev(std::ios_base&amp; os)
{
    os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc);
    return os;
}

int main()
{
    Foo f(&quot;example&quot;);
    std::cout &lt;&lt; f &lt;&lt; '\n' &lt;&lt; rev &lt;&lt; f &lt;&lt; '\n' &lt;&lt; rev &lt;&lt; f &lt;&lt; '\n';
}
 | output=
example
elpmaxe
example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc pword}}
{{dsc inc | cpp/io/ios_base/dsc xalloc}}
{{dsc end}}

[[de:cpp/io/ios base/iword]]
[[es:cpp/io/ios base/iword]]
[[fr:cpp/io/ios base/iword]]
[[it:cpp/io/ios base/iword]]
[[ja:cpp/io/ios base/iword]]
[[pt:cpp/io/ios base/iword]]
[[ru:cpp/io/ios base/iword]]
[[zh:cpp/io/ios base/iword]]</text>
      <sha1>abkwhtl4hfjdwmvs011st553h5blwpn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/openmode</title>
    <ns>0</ns>
    <id>616</id>
    <revision>
      <id>90754</id>
      <parentid>90752</parentid>
      <timestamp>2017-03-09T11:51:42Z</timestamp>
      <contributor>
        <ip>117.136.66.117</ip>
      </contributor>
      <comment>Undo revision 90752 by [[Special:Contributions/113.88.81.69|113.88.81.69]] ([[User talk:113.88.81.69|talk]])</comment>
      <text xml:space="preserve" bytes="1110">{{cpp/io/ios_base/title | openmode}}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | 
typedef /*implementation defined*/ openmode;
}}
{{dcl | 1=
static constexpr openmode app = /*implementation defined*/
static constexpr openmode binary = /*implementation defined*/
static constexpr openmode in = /*implementation defined*/
static constexpr openmode out = /*implementation defined*/
static constexpr openmode trunc = /*implementation defined*/
static constexpr openmode ate = /*implementation defined*/
}}
{{dcl end}}

Specifies available file open flags. It is a {{concept|BitmaskType}}, the following constants are defined: 
{{cpp/io/ios_base/openmode consts}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc open}}
{{dsc inc | cpp/io/basic_stringbuf/dsc constructor}}
{{dsc end}}

[[de:cpp/io/ios base/openmode]]
[[es:cpp/io/ios base/openmode]]
[[fr:cpp/io/ios base/openmode]]
[[it:cpp/io/ios base/openmode]]
[[ja:cpp/io/ios base/openmode]]
[[pt:cpp/io/ios base/openmode]]
[[ru:cpp/io/ios base/openmode]]
[[zh:cpp/io/ios base/openmode]]</text>
      <sha1>cehj529dbw5tcji9r4bavhvq3x53hsy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/precision</title>
    <ns>0</ns>
    <id>617</id>
    <revision>
      <id>82810</id>
      <parentid>82504</parentid>
      <timestamp>2016-01-05T23:09:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link num_put::do_put</comment>
      <text xml:space="preserve" bytes="1463">{{cpp/io/ios_base/title | precision }}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | num=1 |
streamsize precision() const;
}}
{{dcl | num=2 |
streamsize precision( streamsize new_precision );
}}
{{dcl end}}

Manages the precision (i.e. how many digits are generated) of floating point output performed by {{lc|std::num_put::do_put}}.

@1@ Returns the current precision. 
@2@ Sets the precision to the given one. 

The default precision, as established by {{lc|std::basic_ios::init}}, is 6.

===Parameters===
{{par begin}}
{{par | new_precision | new precision setting}}
{{par end}}

===Return value===
the precision before the call to the function

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    const double d = 1.2345678901234;
    std::cout &lt;&lt; &quot;The  default precision is &quot; &lt;&lt; std::cout.precision() &lt;&lt; &quot;\n\n&quot;;
    std::cout &lt;&lt; &quot;With default precision d is &quot; &lt;&lt; d &lt;&lt; '\n';
    std::cout.precision(12);
    std::cout &lt;&lt; &quot;With high    precision d is &quot; &lt;&lt; d &lt;&lt; '\n';
}
 | output=
The  default precision is 6

With default precision d is 1.23457
With high    precision d is 1.23456789012
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc width}}
{{dsc end}}

[[de:cpp/io/ios base/precision]]
[[es:cpp/io/ios base/precision]]
[[fr:cpp/io/ios base/precision]]
[[it:cpp/io/ios base/precision]]
[[ja:cpp/io/ios base/precision]]
[[pt:cpp/io/ios base/precision]]
[[ru:cpp/io/ios base/precision]]
[[zh:cpp/io/ios base/precision]]</text>
      <sha1>ivha91wsxceq5fi4kvnh6ay0ir9timy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/pword</title>
    <ns>0</ns>
    <id>618</id>
    <revision>
      <id>81173</id>
      <parentid>64167</parentid>
      <timestamp>2015-10-05T08:45:33Z</timestamp>
      <contributor>
        <ip>183.206.168.84</ip>
      </contributor>
      <text xml:space="preserve" bytes="1817">{{cpp/io/ios_base/title | pword }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
void*&amp; pword( int index );
}}

First, allocates or resizes the private storage (dynamic array of {{c|void*}} or another indexable data structure) sufficiently to make {{tt|index}} a valid index, then returns a reference to the {{c|void*}} element of the private storage with the index {{tt|index}}. 

The reference may be invalidated by any operation on this {{tt|ios_base}} object, including another call to {{tt|pword()}}, but the stored values are retained, so that reading from {{c|pword(index)}} with the same index later will produce the same value (until the next call to {{c|copyfmt()}}). The value can be used for any purpose. The index of the element must be obtained by {{lc|xalloc()}}, otherwise collisions with other users of this {{tt|ios_base}} may occur. New elements are initialized to {{lc|NULL}}.

If allocation fails, calls {{c|std::basic_ios&lt;&gt;::setstate(badbit)}} which may throw {{lc|std::ios_base::failure}}

===Parameters===
{{par begin}}
{{par | index | index value of the element}}
{{par end}}

===Return value===
A reference to the element.

===Exceptions===
May throw {{lc|std::ios_base::failure}} when setting the badbit.

===Notes===
If the pointers stored in {{tt|pword}} require management, {{lc|register_callback()}} may be used to install handlers that execute deep copy or deallocation as needed.

===Example===
{{include| cpp/io/ios_base/xalloc_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc iword}}
{{dsc inc | cpp/io/ios_base/dsc xalloc}}
{{dsc end}}

[[de:cpp/io/ios base/pword]]
[[es:cpp/io/ios base/pword]]
[[fr:cpp/io/ios base/pword]]
[[it:cpp/io/ios base/pword]]
[[ja:cpp/io/ios base/pword]]
[[pt:cpp/io/ios base/pword]]
[[ru:cpp/io/ios base/pword]]
[[zh:cpp/io/ios base/pword]]</text>
      <sha1>5p4j1nzemqkmzqe5b4lllgzoogo2nrx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/register callback</title>
    <ns>0</ns>
    <id>619</id>
    <revision>
      <id>66096</id>
      <parentid>64171</parentid>
      <timestamp>2013-10-27T14:54:08Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <comment>Class std::hash is included with &lt;functional&gt;</comment>
      <text xml:space="preserve" bytes="4224">{{cpp/io/ios_base/title | register_callback }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
void register_callback( event_callback function, int index );
}}

Registers a user-defined function which will be called by {{lc|imbue()}}, {{lc|std::basic_ios::copyfmt()}} and {{lc|~ios_base()}}. Every registered callback is called every time: the event type (a value of type {{lc|event}}) is passed as its first argument, and may be used to distinguish between the callers.

The callbacks are called in the reverse order of registration (in other words, {{tt|register_callback()}} pushes a callback pair on the callback stack). If {{tt|register_callback()}} is called from within a callback function to add a new callback, the new callback is only called on the next event.

The user-defined callback function is not allowed to throw exceptions.

===Parameters===
{{par begin}}
{{par | function | the function which will be called on event, supplied as a function pointer of type {{rlp|event_callback}} }}
{{par | index | custom parameter which will be passed to the function}}
{{par end}}

===Return value===
(none)

===Notes===
Once registered, a callback cannot be deregistered: it remains a part of the stream object for the rest of its lifetime. If the behavior of a callback needs to change, it may be controlled through {{lc|iword()}} or {{lc|pword()}}.

If the same function is registered multiple times, it is called multiple times.

The integer value that is stored together with the callback is typically an index obtained from {{lc|xalloc()}}

===Example===
{{example| demonstrates the use of register_callback to update locale-dependent cached values that are used by a custom output operator
|code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;functional&gt;

// cached locale-specific message and its hash
typedef std::pair&lt;std::string, std::size_t&gt; cache_t;

// populate the cached message and its hash from the locale
void update_cache(cache_t&amp; cache, std::locale loc)
{
    auto&amp; fct = std::use_facet&lt; std::messages&lt;char&gt; &gt;(loc);
    std::messages_base::catalog cat = fct.open(&quot;sed&quot;, loc);
    cache.first = cat &lt; 0 ? &quot;&quot; : fct.get(cat, 0, 0, &quot;Memory exhausted&quot;);
    cache.second = std::hash&lt;std::string&gt;()(cache.first);
}

// update the cache if the locale changed
void true_callback(std::ios_base::event evt, std::ios_base&amp; str, int idx)
{
    if (evt == std::ios_base::imbue_event) 
    {
        cache_t* ptr = static_cast&lt;cache_t*&gt;(str.pword(idx));
        update_cache(*ptr, str.getloc());
    }
}

// registers the cache in pword() and sets up the callback
struct CacheSetup
{
    CacheSetup(std::ostream&amp; os, std::ios_base::event_callback f, cache_t* cache)
    {
        int index = std::ostream::xalloc();
        os.pword(index) = cache; // store pointer to cache in the stream
        os.register_callback(f, index); // store callback and the index to the pointer
        update_cache(*cache, os.getloc()); // initialize cache
    };
};

// some custom class 
struct S { };
// some custom class's operator&lt;&lt; that needs fast access to hashed message
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const S&amp;)
{
   static cache_t cache;
   static CacheSetup setup(os, true_callback, &amp;cache);
   return os &lt;&lt; cache.first &lt;&lt; &quot; : &quot; &lt;&lt; cache.second;
}

int main()
{
    std::locale loc(&quot;en_US.utf8&quot;);
    
    S s;
    std::cout.imbue(loc);
    std::cout &lt;&lt; s &lt;&lt; '\n';
    
    std::cout.imbue(std::locale(loc, new std::messages_byname&lt;char&gt;(&quot;de_DE.utf8&quot;)));
    std::cout &lt;&lt; s &lt;&lt; '\n';

    std::cout.imbue(std::locale(loc, new std::messages_byname&lt;char&gt;(&quot;ja_JP.utf8&quot;)));
    std::cout &lt;&lt; s &lt;&lt; '\n';

    std::cout.imbue(std::locale(loc, new std::messages_byname&lt;char&gt;(&quot;ru_RU.utf8&quot;)));
    std::cout &lt;&lt; s &lt;&lt; '\n';
}
|output=
Memory exhausted : 2,295,079,096
Speicher erschöpft : 3,139,423,551
メモリーが足りません : 3,837,351,114
Память исчерпана : 3,742,732,851
}}

[[de:cpp/io/ios base/register callback]]
[[es:cpp/io/ios base/register callback]]
[[fr:cpp/io/ios base/register callback]]
[[it:cpp/io/ios base/register callback]]
[[ja:cpp/io/ios base/register callback]]
[[pt:cpp/io/ios base/register callback]]
[[ru:cpp/io/ios base/register callback]]
[[zh:cpp/io/ios base/register callback]]</text>
      <sha1>60038lgzceew489vu3qaevdym9cijls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/seekdir</title>
    <ns>0</ns>
    <id>620</id>
    <revision>
      <id>88056</id>
      <parentid>49799</parentid>
      <timestamp>2016-10-25T13:48:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso users</comment>
      <text xml:space="preserve" bytes="929">{{cpp/io/ios_base/title | seekdir}}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | 
typedef /*implementation defined*/ seekdir;
}}
{{dcl | 1=
static constexpr seekdir beg = /*implementation defined*/
static constexpr seekdir end = /*implementation defined*/
static constexpr seekdir cur = /*implementation defined*/
}}
{{dcl end}}

Specifies file seeking direction type. The following constants are defined: 
{{cpp/io/ios_base/seekdir consts}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc seekg}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekoff}}
{{dsc end}}

[[de:cpp/io/ios base/seekdir]]
[[es:cpp/io/ios base/seekdir]]
[[fr:cpp/io/ios base/seekdir]]
[[it:cpp/io/ios base/seekdir]]
[[ja:cpp/io/ios base/seekdir]]
[[pt:cpp/io/ios base/seekdir]]
[[ru:cpp/io/ios base/seekdir]]
[[zh:cpp/io/ios base/seekdir]]</text>
      <sha1>g4cc21wl69ne5c2j7g1qieawxrybhaa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/setf</title>
    <ns>0</ns>
    <id>621</id>
    <revision>
      <id>65050</id>
      <parentid>65040</parentid>
      <timestamp>2013-08-30T14:49:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="2421">{{cpp/io/ios_base/title | setf }}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | num=1 |
fmtflags setf( fmtflags flags );
}}
{{dcl | num=2 |
fmtflags setf( fmtflags flags, fmtflags mask );
}}
{{dcl end}}

Sets the formatting flags to specified settings.

@1@ Sets the formatting flags identified by {{tt|flags}}. Effectively the following operation is performed {{c|fl {{=}} fl {{!}} flags}} where {{tt|fl}} defines the state of internal formatting flags. 

@2@ Clears the formatting flags under {{tt|mask}}, and sets the cleared flags to those specified by {{tt|flags}}. Effectively the following operation is performed {{c|fl {{=}} (fl &amp; ~mask) {{!}} (flags &amp; mask)}} where {{tt|fl}} defines the state of internal formatting flags.

===Parameters===
{{par begin}}
{{par | flags, mask | new formatting setting. {{tt|mask}} defines which flags can be altered, {{tt|flags}} defines which flags of those to be altered should be set (others will be cleared). Both parameters can be a combination of the following constants:
{{cpp/io/ios_base/fmtflags consts}}
}}
{{par end}}

===Return value===
the formatting flags before the call to the function

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

const double PI = 3.1415926535;

int main() 
{
    const int WIDTH = 15;

    std::cout.setf(std::ios::right);  //equivalent: cout &lt;&lt; right;
    std::cout &lt;&lt; std::setw(WIDTH/2) &lt;&lt; &quot;radius&quot;
              &lt;&lt; std::setw(WIDTH) &lt;&lt; &quot;circumference&quot; &lt;&lt; '\n';
	
    std::cout.setf(std::ios::fixed);
    for (double radius = 1; radius &lt;= 6; radius += 0.5) {
        std::cout &lt;&lt; std::setprecision(1) &lt;&lt; std::setw(WIDTH/2) 
                  &lt;&lt; radius
                  &lt;&lt; std::setprecision(2) &lt;&lt; std::setw(WIDTH) 
                  &lt;&lt; (2 * PI * radius) &lt;&lt; '\n';
    }
}
 | output=
 radius  circumference
    1.0           6.28
    1.5           9.42
    2.0          12.57
    2.5          15.71
    3.0          18.85
    3.5          21.99
    4.0          25.13
    4.5          28.27
    5.0          31.42
    5.5          34.56
    6.0          37.70
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc flags}}
{{dsc inc | cpp/io/ios_base/dsc unsetf}}
{{dsc end}}

[[de:cpp/io/ios base/setf]]
[[es:cpp/io/ios base/setf]]
[[fr:cpp/io/ios base/setf]]
[[it:cpp/io/ios base/setf]]
[[ja:cpp/io/ios base/setf]]
[[pt:cpp/io/ios base/setf]]
[[ru:cpp/io/ios base/setf]]
[[zh:cpp/io/ios base/setf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/sync with stdio</title>
    <ns>0</ns>
    <id>622</id>
    <revision>
      <id>89739</id>
      <parentid>86733</parentid>
      <timestamp>2017-01-23T17:21:43Z</timestamp>
      <contributor>
        <username>Alanf</username>
        <id>5275</id>
      </contributor>
      <comment>&quot;some I/O had&quot; -&gt; &quot;I/O has&quot;</comment>
      <text xml:space="preserve" bytes="2676">{{cpp/io/ios_base/title | sync_with_stdio }}
{{cpp/io/ios_base/navbar}}
{{ddcl |1=
static bool sync_with_stdio( bool sync = true );
}}

Sets whether the standard C++ streams are synchronized to the standard C streams after each input/output operation. 

The standard C++ streams are the following: {{lc|std::cin}}, {{lc|std::cout}}, {{lc|std::cerr}}, {{lc|std::clog}}, {{lc|std::wcin}}, {{lc|std::wcout}}, {{lc|std::wcerr}} and {{lc|std::wclog}}

The standard C streams are the following: {{lc|stdin}}, {{lc|stdout}} and {{lc|stderr}}

For a standard stream {{tt|str}}, synchronized with the C stream {{tt|f}}, the following pairs of functions have identical effect:
@1@ {{c|std::fputc(f, c)}} and {{c|str.rdbuf()-&gt;sputc(c)}}
@2@ {{c|std::fgetc(f)}} and {{c|str.rdbuf()-&gt;sbumpc()}}
@3@ {{c|std::ungetc(c, f)}} and {{c|str.rdbuf()-&gt;sputbackc(c)}}

In practice, this means that the synchronized C++ streams are unbuffered, and each I/O operation on a C++ stream is immediately applied to the corresponding C stream's buffer. This makes it possible to freely mix C++ and C I/O.

In addition, synchronized C++ streams are guaranteed to be thread-safe (individual characters output from multiple threads may interleave, but no data races occur)

If the synchronization is turned off, the C++ standard streams are allowed to buffer their I/O independently, which may be considerably faster in some cases. 

By default, all eight standard C++ streams are synchronized with their respective C streams.

If this function is called after I/O has occurred on the standard stream, the behavior is implementation-defined: implementations range from no effect to destroying the read buffer.

===Parameters===
{{par begin}}
{{par | sync | the new synchronization setting}}
{{par end}}

===Return value===
synchronization state before the call to the function

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdio&gt;

int main()
{
    std::ios::sync_with_stdio(false);
    std::cout &lt;&lt; &quot;a\n&quot;;
    std::printf(&quot;b\n&quot;);
    std::cout &lt;&lt; &quot;c\n&quot;;
}
|p=true
|output=
b&lt;!-- bac, acb, and abc seen with different compilers/libraries; using bac here as it demonstrates an implementation that actually buffers the C++ I/O streams --&gt;
a
c
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/dsc cout}}
{{dsc inc | cpp/io/dsc cerr}}
{{dsc inc | cpp/io/dsc clog}}
{{dsc end}}

[[de:cpp/io/ios base/sync with stdio]]
[[es:cpp/io/ios base/sync with stdio]]
[[fr:cpp/io/ios base/sync with stdio]]
[[it:cpp/io/ios base/sync with stdio]]
[[ja:cpp/io/ios base/sync with stdio]]
[[pt:cpp/io/ios base/sync with stdio]]
[[ru:cpp/io/ios base/sync with stdio]]
[[zh:cpp/io/ios base/sync with stdio]]</text>
      <sha1>nyc00yy03uj7xhpef7exrwa3oq84ya9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/unsetf</title>
    <ns>0</ns>
    <id>623</id>
    <revision>
      <id>65038</id>
      <parentid>57887</parentid>
      <timestamp>2013-08-29T19:57:34Z</timestamp>
      <contributor>
        <username>Eendy</username>
        <id>539</id>
      </contributor>
      <text xml:space="preserve" bytes="781">{{cpp/io/ios_base/title | unsetf }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
void unsetf( fmtflags flags );
}}

Unsets the formatting flags identified by {{tt|flags}}. 

===Parameters===
{{par begin}}
{{par | flags | formatting flags to unset. It can be a combination of the following constants:
{{cpp/io/ios_base/fmtflags consts}}
}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc flags}}
{{dsc inc | cpp/io/ios_base/dsc setf}}
{{dsc end}}

[[de:cpp/io/ios base/unsetf]]
[[es:cpp/io/ios base/unsetf]]
[[fr:cpp/io/ios base/unsetf]]
[[it:cpp/io/ios base/unsetf]]
[[ja:cpp/io/ios base/unsetf]]
[[pt:cpp/io/ios base/unsetf]]
[[ru:cpp/io/ios base/unsetf]]
[[zh:cpp/io/ios base/unsetf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/width</title>
    <ns>0</ns>
    <id>624</id>
    <revision>
      <id>72670</id>
      <parentid>72669</parentid>
      <timestamp>2014-09-17T17:22:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>send off to op&lt;&lt;/op&gt;&gt; pages for details</comment>
      <text xml:space="preserve" bytes="1359">{{cpp/io/ios_base/title | width }}
{{cpp/io/ios_base/navbar}}
{{dcl begin}}
{{dcl | num=1 |
streamsize width() const;
}}
{{dcl | num=2 |
streamsize width( streamsize new_width );
}}
{{dcl end}}

Manages the minimum number of characters to generate on certain output operations and the maximum number of characters to generate on certain output operations.

@1@ Returns the current field width. 

@2@ Sets the field width to the given one. 

===Parameters===
{{par begin}}
{{par | new_width | new field width setting}}
{{par end}}

===Return value===
The field width before the call to the function

===Notes===
Some I/O functions call {{c|width(0)}} before returning, see {{lc|std::setw}} (this results in this field having effect on the next I/O function only, and not on any subsequent I/O)

The exact effects this modifier has on the input and output vary between the individual I/O functions and are described at each {{tt|operator&lt;&lt;}} and {{tt|operator&gt;&gt;}} overload page individually.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc precision}}
{{dsc end}}

[[de:cpp/io/ios base/width]]
[[es:cpp/io/ios base/width]]
[[fr:cpp/io/ios base/width]]
[[it:cpp/io/ios base/width]]
[[ja:cpp/io/ios base/width]]
[[pt:cpp/io/ios base/width]]
[[ru:cpp/io/ios base/width]]
[[zh:cpp/io/ios base/width]]</text>
      <sha1>k67dx4vs85ntialgv2hqw11gijt4jf4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/xalloc</title>
    <ns>0</ns>
    <id>625</id>
    <revision>
      <id>71076</id>
      <parentid>71073</parentid>
      <timestamp>2014-06-05T10:31:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+thread safety</comment>
      <text xml:space="preserve" bytes="1298">{{cpp/io/ios_base/title | xalloc }}
{{cpp/io/ios_base/navbar}}
{{ddcl |
static int xalloc();
}}

Returns a unique (program-wide) index value that can be used to access one {{c|long}} and one {{c|void*}} elements in the private storage of {{tt|std::ios_base}} by calling {{lc|iword()}} and {{lc|pword()}}. The call to {{tt|xalloc}} does not allocate memory.

{{rev inl|since=c++14|
This function is thread-safe; concurrent access by multiple threads does not result in a data race.}}

Effectively increments a private static data member of {{tt|std::ios_base}}, as if by executing {{c|return index++;}}, if {{tt|index}} is the name of that static member {{rev inl|since=c++14|(which may be {{lc|std::atomic}} to support concurrent access by multiple threads, or otherwise synchronized)}}

===Parameters===
(none)

===Return value===
Unique integer for use as pword/iword index.

===Example===
{{include| cpp/io/ios_base/xalloc_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc pword}}
{{dsc inc | cpp/io/ios_base/dsc iword}}
{{dsc end}}

[[de:cpp/io/ios base/xalloc]]
[[es:cpp/io/ios base/xalloc]]
[[fr:cpp/io/ios base/xalloc]]
[[it:cpp/io/ios base/xalloc]]
[[ja:cpp/io/ios base/xalloc]]
[[pt:cpp/io/ios base/xalloc]]
[[ru:cpp/io/ios base/xalloc]]
[[zh:cpp/io/ios base/xalloc]]</text>
      <sha1>9mmdyiio8qmv0k4y50tnsu66inuvkyd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ios base/~ios base</title>
    <ns>0</ns>
    <id>5537</id>
    <revision>
      <id>42789</id>
      <parentid>33863</parentid>
      <timestamp>2012-11-03T00:27:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="672">{{cpp/io/ios_base/title|~ios_base}}
{{cpp/io/ios_base/navbar}}
{{ddcl |
virtual ~ios_base();
}}

Destroys the {{tt|ios_base}} object. 

Before any of the member functions would yield undefined results, calls callbacks, registered by {{ltf|cpp/io/ios_base/register_callback}} passing {{ltt|cpp/io/ios_base/event | erase_event}} as parameter.

No operations on {{tt|rdbuf}} are performed, it is not destroyed.

[[de:cpp/io/ios base/~ios base]]
[[es:cpp/io/ios base/~ios base]]
[[fr:cpp/io/ios base/~ios base]]
[[it:cpp/io/ios base/~ios base]]
[[ja:cpp/io/ios base/~ios base]]
[[pt:cpp/io/ios base/~ios base]]
[[ru:cpp/io/ios base/~ios base]]
[[zh:cpp/io/ios base/~ios base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/iostream category</title>
    <ns>0</ns>
    <id>4774</id>
    <revision>
      <id>91411</id>
      <parentid>68700</parentid>
      <timestamp>2017-03-31T19:43:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1623">{{cpp/title|iostream_category}}
{{cpp/io/navbar}}
{{ddcl | header=ios | since=c++11 |
const std::error_category&amp; iostream_category();
}}

Obtains a reference to the static error category object for iostream errors. The object is required to override the virtual function {{c|error_category::name()}} to return a pointer to the string {{c|&quot;iostream&quot;}}. It is used to identify error codes provided in the exceptions of type {{lc|std::ios_base::failure}}.

===Parameters===
(none)

===Return value===
A reference to the static object of unspecified runtime type, derived from {{lc|std::error_category}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
 
int main()
{
    std::ifstream f(&quot;doesn't exist&quot;);
    try {
        f.exceptions(f.failbit);
    } catch (const std::ios_base::failure&amp; e) {
        std::cout &lt;&lt; &quot;Caught an ios_base::failure.\n&quot;
                  &lt;&lt; &quot;Error code: &quot; &lt;&lt; e.code().value() 
                  &lt;&lt; &quot; (&quot; &lt;&lt; e.code().message() &lt;&lt; &quot;)\n&quot;
                  &lt;&lt; &quot;Error category: &quot; &lt;&lt; e.code().category().name() &lt;&lt; '\n';

    }
}
 | p=true
 | output=
Caught an ios_base::failure.
Error code: 1 (unspecified iostream_category error)
Error category: iostream
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc failure}}
{{dsc inc | cpp/io/dsc io_errc}}
{{dsc end}}

[[de:cpp/io/iostream category]]
[[es:cpp/io/iostream category]]
[[fr:cpp/io/iostream category]]
[[it:cpp/io/iostream category]]
[[ja:cpp/io/iostream category]]
[[pt:cpp/io/iostream category]]
[[ru:cpp/io/iostream category]]
[[zh:cpp/io/iostream category]]</text>
      <sha1>2k9tba84sekhej76l25ha6nqiulz3kn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/is error code enum</title>
    <ns>0</ns>
    <id>5597</id>
    <redirect title="cpp/io/io errc/is error code enum" />
    <revision>
      <id>20634</id>
      <timestamp>2012-03-28T18:07:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/io/is error code enum]] to [[cpp/io/io errc/is error code enum]]: better title</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/io/io errc/is error code enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/istrstream</title>
    <ns>0</ns>
    <id>4696</id>
    <revision>
      <id>61848</id>
      <parentid>57893</parentid>
      <timestamp>2013-06-09T15:59:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dsc end</comment>
      <text xml:space="preserve" bytes="1364">{{cpp/title|istrstream}}
{{cpp/io/istrstream/navbar}}
{{dcl begin}}
{{dcl header|strstream}}
{{dcl | notes={{mark deprecated}} | 1=
class istrstream : public std::istream
}}
{{dcl end}}

The class {{tt|istrstream}} implements input operations on array-backed streams. It essentially wraps a raw array I/O device implementation ({{c|std::strstreambuf}}) into the higher-level interface of {{lc|std::basic_istream}}. 

The typical implementation of {{tt|istrstream}} holds only one non-derived data member: an object of type {{c|std::strstreambuf}}.

===Notes===
{{tt|istrstream}} has been deprecated since C++98, {{lc|std::istringstream}} and [http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/array.html#array_source boost::iostreams::array_source] are the recommended replacements.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/strstream/dsc constructor | istrstream}}
{{dsc inc | cpp/io/strstream/dsc destructor | istrstream}}
{{dsc inc | cpp/io/strstream/dsc rdbuf | istrstream}}
{{dsc inc | cpp/io/strstream/dsc str | istrstream}}
{{dsc end}}

{{cpp/io/basic_istream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/istrstream]]
[[es:cpp/io/istrstream]]
[[fr:cpp/io/istrstream]]
[[it:cpp/io/istrstream]]
[[ja:cpp/io/istrstream]]
[[pt:cpp/io/istrstream]]
[[ru:cpp/io/istrstream]]
[[zh:cpp/io/istrstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/istrstream/istrstream</title>
    <ns>0</ns>
    <id>12950</id>
    <revision>
      <id>65177</id>
      <timestamp>2013-09-04T16:36:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1770">{{cpp/io/istrstream/title | istrstream}}
{{cpp/io/istrstream/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
explicit istrstream(const char* s);
}}
{{dcl | num=2 | 1=
explicit istrstream(char* s);
}}
{{dcl | num=3 | 1=
istrstream(const char* s, std::streamsize n);
}}
{{dcl | num=4 | 1=
istrstream(char* s, std::streamsize n);
}}
{{dcl end}}

Constructs new istrstream and its underlying {{lc|std::strstreambuf}}.

@1,2@ Constructs the underlying {{lc|std::strstreambuf}} by calling {{c|strstreambuf(s,0)}} and initializes the base class with the address of the strstreambuf. The behavior is undefined if {{tt|s}} is not pointing at an element of a null-terminated array.

@3,4@ Constructs the underlying {{lc|std::strstreambuf}} by calling {{c|strstreambuf(s,n)}} and initializes the base class with the address of the strstreambuf. The behavior is undefined if {{tt|s}} is not pointing at an element of an array whose length is at least {{tt|n}} elements.

===Parameters===
{{par begin}}
{{par | s | C-string or char array to use as the contents of the stream}}
{{par | n | size of the array }}
{{par end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;strstream&gt;

int main()
{
    std::istrstream s1(&quot;1 2 3&quot;); // string literal
    int n1,n2,n3;
    if(s1 &gt;&gt; n1 &gt;&gt; n2 &gt;&gt; n3)
        std::cout &lt;&lt; n1 &lt;&lt; &quot;, &quot; &lt;&lt; n2 &lt;&lt; &quot;, &quot; &lt;&lt; n3 &lt;&lt; '\n';

    char arr[] = {'4', ' ', '5', ' ', '6'};
    std::istrstream s2(arr, sizeof arr);
    if(s2 &gt;&gt; n1 &gt;&gt; n2 &gt;&gt; n3)
        std::cout &lt;&lt; n1 &lt;&lt; &quot;, &quot; &lt;&lt; n2 &lt;&lt; &quot;, &quot; &lt;&lt; n3 &lt;&lt; '\n';
}
 | output=
1, 2, 3
4, 5, 6
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstreambuf/dsc strstreambuf}}
{{dsc inc | cpp/io/strstream/dsc constructor | ostrstream}}
{{dsc inc | cpp/io/strstream/dsc constructor | strstream}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/istrstream/rdbuf</title>
    <ns>0</ns>
    <id>9732</id>
    <revision>
      <id>63938</id>
      <parentid>50866</parentid>
      <timestamp>2013-08-01T15:42:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="50">{{include page|cpp/io/strstream/rdbuf|istrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/istrstream/str</title>
    <ns>0</ns>
    <id>9727</id>
    <revision>
      <id>63937</id>
      <parentid>50867</parentid>
      <timestamp>2013-08-01T15:42:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="48">{{include page|cpp/io/strstream/str|istrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/istrstream/~istrstream</title>
    <ns>0</ns>
    <id>12954</id>
    <revision>
      <id>65184</id>
      <timestamp>2013-09-04T17:25:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1074">{{cpp/io/istrstream/title|~istrstream}}
{{cpp/io/istrstream/navbar}}
{{dcl begin}}
{{dcl | 1=
virtual ~istrstream();
}}
{{dcl end}}

Destroys a {{tt|std::istrstream}} object, which also destroys the member {{lc|std::strstreambuf}}.

===Parameters===
(none)

===Notes===
The constructors of {{lc|std::istrstream}} do not create the underlying {{lc|std::strstreambuf}} in dynamically allocated mode, so the memory leaks that are possible with {{lc|std::ostrstream::~ostrstream}} or {{lc|std::strstream::~strstream}} do not apply.

===Example===
{{example
 | 
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    {
        std::istrstream s(&quot;1.234&quot;);
        double d;
        s &gt;&gt; d;
        std::cout &lt;&lt; d &lt;&lt; '\n';
    } // destructor called
}
 | output=
1.234
}}

[[de:cpp/io/istrstream/~istrstream]]
[[es:cpp/io/istrstream/~istrstream]]
[[fr:cpp/io/istrstream/~istrstream]]
[[it:cpp/io/istrstream/~istrstream]]
[[ja:cpp/io/istrstream/~istrstream]]
[[pt:cpp/io/istrstream/~istrstream]]
[[ru:cpp/io/istrstream/~istrstream]]
[[zh:cpp/io/istrstream/~istrstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/make error code</title>
    <ns>0</ns>
    <id>5598</id>
    <redirect title="cpp/io/io errc/make error code" />
    <revision>
      <id>20637</id>
      <timestamp>2012-03-28T18:09:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/io/make error code]] to [[cpp/io/io errc/make error code]]: consistency for helper classes/functions</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/io/io errc/make error code]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/make error condition</title>
    <ns>0</ns>
    <id>5599</id>
    <redirect title="cpp/io/io errc/make error condition" />
    <revision>
      <id>20639</id>
      <timestamp>2012-03-28T18:09:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/io/make error condition]] to [[cpp/io/io errc/make error condition]]: consistency for member classes/functions</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[cpp/io/io errc/make error condition]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip</title>
    <ns>0</ns>
    <id>2973</id>
    <revision>
      <id>57896</id>
      <parentid>49807</parentid>
      <timestamp>2013-06-01T06:03:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2151">{{title|Input/output manipulators}}
{{cpp/io/manip/navbar}}

Manipulators are helper functions that make it possible to control input/output streams using {{c|operator&lt;&lt;}} or {{c|operator&gt;&gt;}}. 

The manipulators that are invoked without arguments (e.g. {{c|std::cout &lt;&lt; std::boolalpha;}} or {{c|std::cin &gt;&gt; std::hex;}}) are implemented as functions that take a reference to a stream as their only argument. The special overloads of {{ltt|cpp/io/basic_ostream/operator_ltlt | basic_ostream::operator&lt;&lt;}} and {{ltt|cpp/io/basic_istream/operator_gtgt | basic_istream::operator&gt;&gt;}} accept pointers to these functions.

The manipulators that are invoked with arguments (e.g. {{c|std::cout &lt;&lt; std::setw(10);}}) are implemented as functions returning objects of unspecified type.  These manipulators define their own {{tt|operator&lt;&lt;}} or {{tt|operator&gt;&gt;}} which perform the requested manipulation.

{{dsc begin}}
{{dsc header | ios }}
{{dsc inc | cpp/io/manip/dsc boolalpha}}
{{dsc inc | cpp/io/manip/dsc showbase}}
{{dsc inc | cpp/io/manip/dsc showpoint}}
{{dsc inc | cpp/io/manip/dsc showpos}}
{{dsc inc | cpp/io/manip/dsc skipws}}
{{dsc inc | cpp/io/manip/dsc uppercase}}
{{dsc inc | cpp/io/manip/dsc unitbuf}}
{{dsc inc | cpp/io/manip/dsc left}}
{{dsc inc | cpp/io/manip/dsc hex}}
{{dsc inc | cpp/io/manip/dsc fixed}}
{{dsc header | istream}}
{{dsc inc | cpp/io/manip/dsc ws}}
{{dsc header | ostream}}
{{dsc inc | cpp/io/manip/dsc ends}}
{{dsc inc | cpp/io/manip/dsc flush}}
{{dsc inc | cpp/io/manip/dsc endl}}
{{dsc header | iomanip}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc inc | cpp/io/manip/dsc setbase}}
{{dsc inc | cpp/io/manip/dsc setfill}}
{{dsc inc | cpp/io/manip/dsc setprecision}}
{{dsc inc | cpp/io/manip/dsc setw}}
{{dsc inc | cpp/io/manip/dsc get_money}}
{{dsc inc | cpp/io/manip/dsc put_money}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc inc | cpp/io/manip/dsc quoted}}
{{dsc end}}

[[de:cpp/io/manip]]
[[es:cpp/io/manip]]
[[fr:cpp/io/manip]]
[[it:cpp/io/manip]]
[[ja:cpp/io/manip]]
[[pt:cpp/io/manip]]
[[ru:cpp/io/manip]]
[[zh:cpp/io/manip]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/boolalpha</title>
    <ns>0</ns>
    <id>4690</id>
    <revision>
      <id>62325</id>
      <parentid>62314</parentid>
      <timestamp>2013-06-26T18:46:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>caps</comment>
      <text xml:space="preserve" bytes="2132">{{cpp/title|boolalpha|noboolalpha}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; boolalpha( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; noboolalpha( std::ios_base&amp; str );
}}
{{dcl end}}

@1@ Enables the {{tt|boolalpha}} flag in the stream {{tt|str}} as if by calling {{c|str.setf(std::ios_base::boolalpha)}}

@2@ Disables the {{tt|boolalpha}} flag in the stream {{tt|str}} as if by calling {{c|str.unsetf(std::ios_base::boolalpha)}}

{{tt|std::boolalpha}} is an I/O manipulator, so it may be called with an expression such as {{c|out &lt;&lt; std::boolalpha}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::boolalpha}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;iostream&gt;
int main()
{
    // boolalpha output
    std::cout &lt;&lt; std::boolalpha 
              &lt;&lt; &quot;boolalpha true: &quot; &lt;&lt; true &lt;&lt; '\n'
              &lt;&lt; &quot;boolalpha false: &quot; &lt;&lt; false &lt;&lt; '\n';
    std::cout &lt;&lt; std::noboolalpha 
              &lt;&lt; &quot;noboolalpha true: &quot; &lt;&lt; true &lt;&lt; '\n'
              &lt;&lt; &quot;noboolalpha false: &quot; &lt;&lt; false &lt;&lt; '\n';
    // booalpha parse
    bool b1, b2;
    std::istringstream is(&quot;true false&quot;);
    is &gt;&gt; std::boolalpha &gt;&gt; b1 &gt;&gt; b2;
    std::cout &lt;&lt; '\&quot;' &lt;&lt; is.str() &lt;&lt; &quot;\&quot; parsed as &quot; &lt;&lt; b1 &lt;&lt; ' ' &lt;&lt; b2 &lt;&lt; '\n';
}
 | output=
boolalpha true: true
boolalpha false: false
noboolalpha true: 1
noboolalpha false: 0
&quot;true false&quot; parsed as 1 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc inc | cpp/locale/numpunct/dsc do_truefalsename | mem=std::numpunct&lt;CharT&gt;}}
{{dsc end}}

[[de:cpp/io/manip/boolalpha]]
[[es:cpp/io/manip/boolalpha]]
[[fr:cpp/io/manip/boolalpha]]
[[it:cpp/io/manip/boolalpha]]
[[ja:cpp/io/manip/boolalpha]]
[[pt:cpp/io/manip/boolalpha]]
[[ru:cpp/io/manip/boolalpha]]
[[zh:cpp/io/manip/boolalpha]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/endl</title>
    <ns>0</ns>
    <id>4674</id>
    <revision>
      <id>92035</id>
      <parentid>81767</parentid>
      <timestamp>2017-04-03T15:12:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/cout.sync_with_stdio/ios::sync_with_stdio/, to avoid appearance that it only affects cout</comment>
      <text xml:space="preserve" bytes="3550">{{cpp/title|endl}}
{{cpp/io/manip/navbar}}
{{ddcl | header=ostream |
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp; endl( std::basic_ostream&lt;CharT, Traits&gt;&amp; os );
}}

Inserts a newline character into the output sequence {{tt|os}} and flushes it as if by calling {{c|os.put(os.widen('\n'))}} followed by {{c|os.flush()}}. 

This is an output-only I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::endl}} for any {{tt|out}} of type {{lc|std::basic_ostream}}.

===Notes===
This manipulator may be used to produce a line of output immediately, e.g. when displaying output from a long-running process, logging activity of multiple threads or logging activity of a program that may crash unexpectedly. An explicit flush  of {{lc|std::cout}} is also necessary before a call to {{lc|std::system}}, if the spawned process performs any screen I/O.&lt;!--couldn't reproduce in VS2013, did it change? ---- (a common example is {{c|std::system(&quot;pause&quot;)}} on Windows).--&gt; In most other usual interactive I/O scenarios, {{tt|std::endl}} is redundant when used with {{lc|std::cout}} because any input from {{lc|std::cin}}, output to {{lc|std::cerr}}, or program termination forces a call to {{c|std::cout.flush()}}. Use of {{tt|std::endl}} in place of {{c|'\n'}}, encouraged by some sources, may significantly degrade output performance.

In many implementations, standard output is line-buffered, and writing {{c|'\n'}} causes a flush anyway, unless {{c|std::ios::sync_with_stdio(false)}} was executed. In those situations, unnecessary {{tt|endl}} only degrades the performance of file output, not standard output.

The code samples on this wiki [http://www.stroustrup.com/3rd_code.html follow Bjarne Stroustrup] and [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#-sl50-avoid-endl The C++ Core Guidelines] in flushing the standard output only where necessary.

When an incomplete line of output needs to be flushed, the {{lc|std::flush}} manipulator may be used.

When every character of output needs to be flushed, the {{lc|std::unitbuf}} manipulator may be used.

===Parameters===
{{par begin}}
{{par | os | reference to output stream }}
{{par end}}

===Return value===

{{tt|os}} (reference to the stream after manipulation)

===Example===
{{example
 | With \n instead of endl, the output would be the same, but may not appear in real time.
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

template&lt;typename Diff&gt;
void log_progress(Diff d)
{
    std::cout &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(d).count()
              &lt;&lt; &quot; ms passed&quot; &lt;&lt; std::endl;
}

int main()
{
    std::cout.sync_with_stdio(false); // on some platforms, stdout flushes on \n
    volatile int sink = 0;

    auto t1 = std::chrono::high_resolution_clock::now();
    for (int j=0; j&lt;5; ++j)
    {
        for (int n=0; n&lt;10000; ++n)
            for (int m=0; m&lt;20000; ++m)
                sink += m*n; // do some work
        auto now = std::chrono::high_resolution_clock::now();
        log_progress(now - t1);
    }
}
 | output=
487 ms passed
974 ms passed
1470 ms passed
1965 ms passed
2455 ms passed
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc unitbuf}}
{{dsc inc | cpp/io/manip/dsc flush}}
{{dsc inc | cpp/io/basic_ostream/dsc flush | mem=std::basic_ostream}}
{{dsc end}}

[[de:cpp/io/manip/endl]]
[[es:cpp/io/manip/endl]]
[[fr:cpp/io/manip/endl]]
[[it:cpp/io/manip/endl]]
[[ja:cpp/io/manip/endl]]
[[pt:cpp/io/manip/endl]]
[[ru:cpp/io/manip/endl]]
[[zh:cpp/io/manip/endl]]</text>
      <sha1>pzx0nph6c57bvmkxc2iv5cieggnck0r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/ends</title>
    <ns>0</ns>
    <id>4673</id>
    <revision>
      <id>77519</id>
      <parentid>49810</parentid>
      <timestamp>2015-03-29T01:27:33Z</timestamp>
      <contributor>
        <username>Vsoftco</username>
        <id>3618</id>
      </contributor>
      <comment>corrected typo in the declaration of std::ends</comment>
      <text xml:space="preserve" bytes="1510">{{cpp/title|ends}}
{{cpp/io/manip/navbar}}
{{ddcl | header=ostream |
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp; ends( std::basic_ostream&lt;CharT, Traits&gt;&amp; os );
}}

Inserts a null character into the output sequence {{tt|os}} as if by calling {{c|os.put(CharT())}}. 

This is an output-only I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::ends}} for any {{tt|out}} of type {{lc|std::basic_ostream}}.

===Notes===
This manipulator is typically used with {{c|std::ostrstream}}, when the associated output buffer needs to be null-terminated to be processed as a C string.

Unlike {{lc|std::endl}}, this manipulator does not flush the stream.

===Parameters===
{{par begin}}
{{par | os | reference to output stream }}
{{par end}}

===Return value===

{{tt|os}} (reference to the stream after insertion of the null character)

===Example===
{{example
 |
 | code=
#include &lt;cstdio&gt;
#include &lt;strstream&gt;
int main()
{
    std::ostrstream oss;
    oss &lt;&lt; &quot;Sample text: &quot; &lt;&lt; 42 &lt;&lt; std::ends;
    std::printf(&quot;%s\n&quot;, oss.str());
    oss.freeze(false); // enable memory deallocation
}
 | output=
Sample text: 42
}}

===See also===
{{dsc begin}}
{{dsc class | cpp/io/ostrstream | notes={{mark deprecated}} | implements character array output operations}}
{{dsc end}}

[[de:cpp/io/manip/ends]]
[[es:cpp/io/manip/ends]]
[[fr:cpp/io/manip/ends]]
[[it:cpp/io/manip/ends]]
[[ja:cpp/io/manip/ends]]
[[pt:cpp/io/manip/ends]]
[[ru:cpp/io/manip/ends]]
[[zh:cpp/io/manip/ends]]</text>
      <sha1>f2iuvnczcx8uhhyz582vf2d55tgizhq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/fixed</title>
    <ns>0</ns>
    <id>4770</id>
    <revision>
      <id>82508</id>
      <parentid>82502</parentid>
      <timestamp>2015-12-19T01:16:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ tweak</comment>
      <text xml:space="preserve" bytes="2986">{{cpp/title|fixed|scientific|hexfloat|defaultfloat}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; fixed( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; scientific( std::ios_base&amp; str );
}}
{{dcl | num = 3 | since=c++11 |
std::ios_base&amp; hexfloat( std::ios_base&amp; str );
}}
{{dcl | num = 4 | since=c++11 |
std::ios_base&amp; defaultfloat( std::ios_base&amp; str );
}}
{{dcl end}}

Modifies the default formatting for floating-point input/output.

@1@ Sets the {{tt|floatfield}} of the stream {{tt|str}} to {{tt|fixed}} as if by calling {{c|str.setf(std::ios_base::fixed, std::ios_base::floatfield)}}

@2@ Sets the {{tt|floatfield}} of the stream {{tt|str}} to {{tt|scientific}} as if by calling {{c|str.setf(std::ios_base::scientific, std::ios_base::floatfield)}}

@3@ Sets the {{tt|floatfield}} of the stream {{tt|str}} to {{tt|fixed}} and {{tt|scientific}} simultaneously as if by calling {{c|str.setf(std::ios_base::fixed {{!}} std::ios_base::scientific, std::ios_base::floatfield)}}. This enables hexadecimal floating-point formatting.

@4@ Sets the {{tt|floatfield}} of the stream {{tt|str}} to zero, as if by calling {{c|str.unsetf(std::ios_base::floatfield)}}. This enables the default floating-point formatting, which is different from fixed and scientific.

This is an I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::fixed}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::scientific}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Notes===
Hexadecimal floating-point formatting ignores the stream precision specification, as required by the specification of {{lc|std::num_put::do_put}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::cout &lt;&lt; &quot;The number 0.01 in fixed:      &quot; &lt;&lt; std::fixed &lt;&lt; 0.01 &lt;&lt; '\n'
              &lt;&lt; &quot;The number 0.01 in scientific: &quot; &lt;&lt; std::scientific &lt;&lt; 0.01 &lt;&lt; '\n'
              &lt;&lt; &quot;The number 0.01 in hexfloat:   &quot; &lt;&lt; std::hexfloat &lt;&lt; 0.01 &lt;&lt; '\n'
              &lt;&lt; &quot;The number 0.01 in default:    &quot; &lt;&lt; std::defaultfloat &lt;&lt; 0.01 &lt;&lt; '\n';
    double f;
    std::istringstream(&quot;0x1P-1022&quot;) &gt;&gt; std::hexfloat &gt;&gt; f;
    std::cout &lt;&lt; &quot;Parsing 0x1P-1022 as hex gives &quot; &lt;&lt; f &lt;&lt; '\n';
}
 | output=
The number 0.01 in fixed:      0.010000
The number 0.01 in scientific: 1.000000e-02
The number 0.01 in hexfloat:   0x1.47ae147ae147bp-7
The number 0.01 in default:    0.01
Parsing 0x1P-1022 as hex gives 2.22507e-308
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc setprecision}}
{{dsc end}}

[[de:cpp/io/manip/fixed]]
[[es:cpp/io/manip/fixed]]
[[fr:cpp/io/manip/fixed]]
[[it:cpp/io/manip/fixed]]
[[ja:cpp/io/manip/fixed]]
[[pt:cpp/io/manip/fixed]]
[[ru:cpp/io/manip/fixed]]
[[zh:cpp/io/manip/fixed]]</text>
      <sha1>00yp5yh699a7js3p09dhip0jhitk4as</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/flush</title>
    <ns>0</ns>
    <id>4675</id>
    <revision>
      <id>77518</id>
      <parentid>77517</parentid>
      <timestamp>2015-03-29T01:22:55Z</timestamp>
      <contributor>
        <username>Vsoftco</username>
        <id>3618</id>
      </contributor>
      <comment>corrected typo in the declaration of std::flush, looks like most declarations of manipulators have this typo, one should check</comment>
      <text xml:space="preserve" bytes="2692">{{cpp/title|flush}}
{{cpp/io/manip/navbar}}
{{ddcl | header=ostream |
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp; flush( std::basic_ostream&lt;CharT, Traits&gt;&amp; os );
}}

Flushes the output sequence {{tt|os}} as if by calling {{c|os.flush()}}. 

This is an output-only I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::flush}} for any {{tt|out}} of type {{lc|std::basic_ostream}}.

===Notes===
This manipulator may be used to produce an incomplete line of output immediately, e.g. when displaying output from a long-running process, logging activity of multiple threads or logging activity of a program that may crash unexpectedly. An explicit flush of {{lc|std::cout}} is also necessary before a call to {{lc|std::system}}, if the spawned process performs any screen I/O (a common example is {{c|std::system(&quot;pause&quot;)}} on Windows). In most other usual interactive I/O scenarios, {{lc|std::endl}} is redundant when used with {{lc|std::cout}} because any input from {{lc|std::cin}}, output to {{lc|std::cerr}}, or program termination forces a call to {{c|std::cout.flush()}}. 

When a complete line of output needs to be flushed, the {{lc|std::endl}} manipulator may be used.

When every output operation needs to be flushed, the {{lc|std::unitbuf}} manipulator may be used.

===Parameters===
{{par begin}}
{{par | os | reference to output stream }}
{{par end}}

===Return value===

{{tt|os}} (reference to the stream after manipulation)

===Example===
{{example
 | Without std::flush, the output would be the same, but may not appear in real time.
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
template&lt;typename Diff&gt;
void log_progress(Diff d)
{
    std::cout &lt;&lt; &quot;..(&quot;
              &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(d).count()
              &lt;&lt; &quot; ms)..&quot; &lt;&lt; std::flush;
}
int main()
{
    volatile int sink=0;

    auto t1 = std::chrono::high_resolution_clock::now();
    for(int j=0; j&lt;5; ++j)
    {
        for(int n=0; n&lt;10000; ++n)
            for(int m=0; m&lt;20000; ++m)
                sink += m*n; // do some work
        auto now = std::chrono::high_resolution_clock::now();
        log_progress(now - t1);
    }
    std::cout &lt;&lt; '\n';
}
 | output=
..(450 ms)....(901 ms)....(1350 ms)....(1800 ms)....(2250 ms)..
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc unitbuf}}
{{dsc inc | cpp/io/manip/dsc endl}}
{{dsc inc | cpp/io/basic_ostream/dsc flush | mem=std::basic_ostream}}
{{dsc end}}

[[de:cpp/io/manip/flush]]
[[es:cpp/io/manip/flush]]
[[fr:cpp/io/manip/flush]]
[[it:cpp/io/manip/flush]]
[[ja:cpp/io/manip/flush]]
[[pt:cpp/io/manip/flush]]
[[ru:cpp/io/manip/flush]]
[[zh:cpp/io/manip/flush]]</text>
      <sha1>sszpxv84bkcfgm5b2mldls84cgpaav7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/get money</title>
    <ns>0</ns>
    <id>4821</id>
    <revision>
      <id>85624</id>
      <parentid>78327</parentid>
      <timestamp>2016-04-27T22:14:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>get_money isn't a formatted input function. The &gt;&gt; is</comment>
      <text xml:space="preserve" bytes="2394">{{cpp/title|get_money}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip | since=c++11 |1=
template&lt; class MoneyT &gt;
/*unspecified*/ get_money( MoneyT&amp; mon, bool intl = false );
}}

When used in an expression {{c|in &gt;&gt; get_money(mon, intl)}}, parses the character input as a monetary value, as specified by the {{lc|std::money_get}} facet of the locale currently imbued in {{tt|in}}, and stores the value in {{tt|mon}}.

The extraction operation in {{c|in &gt;&gt; get_money(mon, intl)}} behaves as a {{concept|FormattedInputFunction}}.

===Parameters===
{{par begin}}
{{par | mon | variable where monetary value will be written. Can be either {{c|long double}} or {{c|basic_string}}}}
{{par | intl | expects to find required international currency strings if {{c|true}}, expects optional currency symbols otherwise}} 
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|in}} is the name of an input stream of type {{c|std::basic_istream&lt;CharT, Traits&gt;}}, then the expression {{c|in &gt;&gt; get_money(mon, intl)}} behaves as if the following code was executed:

{{c|1=
typedef std::istreambuf_iterator&lt;CharT, Traits&gt; Iter;
typedef std::money_get&lt;CharT, Iter&gt; MoneyGet;
std::ios_base::iostate err = std::ios_base::goodbit;
const MoneyGet &amp;mg = std::use_facet&lt;MoneyGet&gt;(in.getloc());
mg.get(Iter(in.rdbuf()), Iter(), intl, in, err, mon);
if (std::ios_base::goodbit != err)
    out.setstate(err);
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;iomanip&gt;

int main()
{
    std::istringstream in(&quot;$1,234.56 2.22 USD  3.33&quot;);
    long double v1, v2;
    std::string v3;
    in.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    in &gt;&gt; std::get_money(v1) &gt;&gt; std::get_money(v2) &gt;&gt; std::get_money(v3, true);
    if (in) {
        std::cout &lt;&lt; std::quoted(in.str()) &lt;&lt; &quot; parsed as: &quot;
                  &lt;&lt; v1 &lt;&lt; &quot;, &quot; &lt;&lt; v2 &lt;&lt; &quot;, &quot; &lt;&lt; v3 &lt;&lt; '\n';
    } else {
        std::cout &lt;&lt; &quot;Parse failed&quot;;
    }
}
 | output=
&quot;$1,234.56 2.22 USD  3.33&quot; parsed as: 123456, 222, 333
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc inc | cpp/io/manip/dsc put_money}}
{{dsc end}}

[[de:cpp/io/manip/get money]]
[[es:cpp/io/manip/get money]]
[[fr:cpp/io/manip/get money]]
[[it:cpp/io/manip/get money]]
[[ja:cpp/io/manip/get money]]
[[pt:cpp/io/manip/get money]]
[[ru:cpp/io/manip/get money]]
[[zh:cpp/io/manip/get money]]</text>
      <sha1>cfn8o570yvpvmczu2tshniik9zhdkpv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/get time</title>
    <ns>0</ns>
    <id>4822</id>
    <revision>
      <id>88717</id>
      <parentid>88716</parentid>
      <timestamp>2016-12-07T14:49:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+link to gcc bug report</comment>
      <text xml:space="preserve" bytes="2669">{{cpp/title|get_time}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip | since=c++11 |
template&lt; class CharT &gt;
/*unspecified*/ get_time( std::tm* tmb, const CharT* fmt);
}}

When used in an expression {{c|in &gt;&gt; get_time(tmb, fmt)}}, parses the character input as a date/time value according to format string {{tt|fmt}} according to the {{lc|std::time_get}} facet of the locale currently imbued in the input stream {{tt|in}}. The resultant value is stored in a {{lc|std::tm}} object pointed to by {{tt|tmb}}.

===Parameters===
{{par begin}}
{{par | tmb | valid pointer to the std::tm object where the result will be stored}}
{{par | fmt | pointer to a null-terminated CharT string specifying the conversion format
{{cpp/locale/time_get/time_get format}}
}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|in}} is the name of an input stream of type {{c|std::basic_istream&lt;CharT, Traits&gt;}}, then the expression {{c|in &gt;&gt; get_time(tmb, fmt)}} behaves as if the following code was executed:

{{c|1=
typedef std::istreambuf_iterator&lt;CharT, Traits&gt; Iter;
typedef std::time_get&lt;CharT, Iter&gt; TimeGet;
std::ios_base::iostate err = std::ios_base::goodbit;
const TimeGet&amp; tg = std::use_facet&lt;TimeGet&gt;(in.getloc());
tg.get(Iter(in.rdbuf()), Iter(), in, err, tmb, fmt, fmt + traits::length(fmt));
if (err != std::ios_base::goodbit)
    in.setstate(err);
}}

===Notes===
As specified in {{lc|std::time_get::do_get}}, which this function calls, it's unspecified if this function zero out the fields in {{c|*tmb}} that are not set directly by the conversion specifiers that appear in {{c|fmt}}: portable programs should initialize every field of {{c|*tmb}} to zero before calling {{tt|std::get_time}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;iomanip&gt;

int main()
{
    std::tm t = {};
    std::istringstream ss(&quot;2011-Februar-18 23:12:34&quot;);
    ss.imbue(std::locale(&quot;de_DE.utf-8&quot;));
    ss &gt;&gt; std::get_time(&amp;t, &quot;%Y-%b-%d %H:%M:%S&quot;);
    if (ss.fail()) {
        std::cout &lt;&lt; &quot;Parse failed\n&quot;;
    } else {
        std::cout &lt;&lt; std::put_time(&amp;t, &quot;%c&quot;) &lt;&lt; '\n';
    }
}
|p=true
 | output=
Sun Feb 18 23:12:34 2011&lt;!-- note; choose clang to observe the output, for gcc see  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78714 --&gt;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc time_get}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc end}}

[[de:cpp/io/manip/get time]]
[[es:cpp/io/manip/get time]]
[[fr:cpp/io/manip/get time]]
[[it:cpp/io/manip/get time]]
[[ja:cpp/io/manip/get time]]
[[pt:cpp/io/manip/get time]]
[[ru:cpp/io/manip/get time]]
[[zh:cpp/io/manip/get time]]</text>
      <sha1>1hz5bqhbjv1kmx8bxavuman20r3f7ew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/hex</title>
    <ns>0</ns>
    <id>4676</id>
    <revision>
      <id>78784</id>
      <parentid>57909</parentid>
      <timestamp>2015-06-09T00:55:14Z</timestamp>
      <contributor>
        <username>Gubbins</username>
        <id>3701</id>
      </contributor>
      <minor/>
      <comment>grammar</comment>
      <text xml:space="preserve" bytes="2071">{{cpp/title|dec|hex|oct}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; dec( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; hex( std::ios_base&amp; str );
}}
{{dcl | num = 3|
std::ios_base&amp; oct( std::ios_base&amp; str );
}}
{{dcl end}}

Modifies the default numeric base for integer I/O.

1) sets the {{tt|basefield}} of the stream {{tt|str}} to {{tt|dec}} as if by calling {{c|str.setf(std::ios_base::dec, std::ios_base::basefield)}}

2) sets the {{tt|basefield}} of the stream {{tt|str}} to {{tt|hex}} as if by calling {{c|str.setf(std::ios_base::hex, std::ios_base::basefield)}}

3) sets the {{tt|basefield}} of the stream {{tt|str}} to {{tt|oct}} as if by calling {{c|str.setf(std::ios_base::oct, std::ios_base::basefield)}}

This is an I/O manipulator. It may be called with an expression such as {{c|out &lt;&lt; std::hex}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::hex}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
int main()
{
    std::cout &lt;&lt; &quot;The number 42 in octal:   &quot; &lt;&lt; std::oct &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; &quot;The number 42 in decimal: &quot; &lt;&lt; std::dec &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; &quot;The number 42 in hex:     &quot; &lt;&lt; std::hex &lt;&lt; 42 &lt;&lt; '\n';
    int n;
    std::istringstream(&quot;2A&quot;) &gt;&gt; std::hex &gt;&gt; n;
    std::cout &lt;&lt; std::dec &lt;&lt; &quot;Parsing \&quot;2A\&quot; as hex gives &quot; &lt;&lt; n &lt;&lt; '\n';
}
 | output=
The number 42 in octal:   52
The number 42 in decimal: 42
The number 42 in hex:     2a
Parsing &quot;2A&quot; as hex gives 42
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc setbase}}
{{dsc inc | cpp/io/manip/dsc showbase}}
{{dsc end}}

[[de:cpp/io/manip/hex]]
[[es:cpp/io/manip/hex]]
[[fr:cpp/io/manip/hex]]
[[it:cpp/io/manip/hex]]
[[ja:cpp/io/manip/hex]]
[[pt:cpp/io/manip/hex]]
[[ru:cpp/io/manip/hex]]
[[zh:cpp/io/manip/hex]]</text>
      <sha1>b8femo8742fx9cpg2e473sk983ubtrp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/left</title>
    <ns>0</ns>
    <id>4801</id>
    <revision>
      <id>88301</id>
      <parentid>88300</parentid>
      <timestamp>2016-11-15T23:32:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 88300 by [[Special:Contributions/12.20.58.226|12.20.58.226]] ([[User talk:12.20.58.226|talk]]) why repeat yourself three times?</comment>
      <text xml:space="preserve" bytes="2723">{{cpp/title|left|right|internal}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; left( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; right( std::ios_base&amp; str );
}}
{{dcl | num = 3|
std::ios_base&amp; internal( std::ios_base&amp; str );
}}
{{dcl end}}

Modifies the default positioning of the fill characters. {{tt|left}} and {{tt|right}} apply to any output, {{tt|internal}} applies to integer, floating-point, and monetary output. Has no effect on input.

1) sets the {{tt|adjustfield}} of the stream {{tt|str}} to {{tt|left}} as if by calling {{c|str.setf(std::ios_base::left, std::ios_base::adjustfield)}}

2) sets the {{tt|adjustfield}} of the stream {{tt|str}} to {{tt|right}} as if by calling {{c|str.setf(std::ios_base::right, std::ios_base::adjustfield)}}

3) sets the {{tt|adjustfield}} of the stream {{tt|str}} to {{tt|internal}} as if by calling {{c|str.setf(std::ios_base::internal, std::ios_base::adjustfield)}}

This is an I/O manipulator. It may be called with an expression such as {{c|out &lt;&lt; std::left}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::left}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;locale&gt;

int main()
{
    std::cout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::cout &lt;&lt; &quot;Left fill:\n&quot; &lt;&lt; std::left &lt;&lt; std::setfill('*')
              &lt;&lt; std::setw(12) &lt;&lt; -1.23  &lt;&lt; '\n'
              &lt;&lt; std::setw(12) &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; std::setw(12) &lt;&lt; std::put_money(123, true) &lt;&lt; &quot;\n\n&quot;;

    std::cout &lt;&lt; &quot;Internal fill:\n&quot; &lt;&lt; std::internal
              &lt;&lt; std::setw(12) &lt;&lt; -1.23  &lt;&lt; '\n'
              &lt;&lt; std::setw(12) &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; std::setw(12) &lt;&lt; std::put_money(123, true) &lt;&lt; &quot;\n\n&quot;;

    std::cout &lt;&lt; &quot;Right fill:\n&quot; &lt;&lt; std::right
              &lt;&lt; std::setw(12) &lt;&lt; -1.23  &lt;&lt; '\n'
              &lt;&lt; std::setw(12) &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; std::setw(12) &lt;&lt; std::put_money(123, true) &lt;&lt; '\n';
}
 | output=
Left fill:
-1.23*******
0x2a********
USD *1.23***

Internal fill:
-*******1.23
0x********2a
USD ****1.23

Right fill:
*******-1.23
********0x2a
***USD *1.23
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc setw}}
{{dsc inc | cpp/io/manip/dsc setfill}}
{{dsc end}}

[[de:cpp/io/manip/left]]
[[es:cpp/io/manip/left]]
[[fr:cpp/io/manip/left]]
[[it:cpp/io/manip/left]]
[[ja:cpp/io/manip/left]]
[[pt:cpp/io/manip/left]]
[[ru:cpp/io/manip/left]]
[[zh:cpp/io/manip/left]]</text>
      <sha1>hr5z9gmrkxpnh5wb9zbdm0ic6lgxru6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/put money</title>
    <ns>0</ns>
    <id>4800</id>
    <revision>
      <id>89161</id>
      <parentid>89160</parentid>
      <timestamp>2017-01-05T15:29:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>wikilink basic_string</comment>
      <text xml:space="preserve" bytes="2448">{{cpp/title|put_money}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip | since=c++11 |1=
template&lt; class MoneyT &gt;
/*unspecified*/ put_money( const MoneyT&amp; mon, bool intl = false );
}}

When used in an expression {{c|out &lt;&lt; put_money(mon, intl)}}, converts the monetary value {{tt|mon}} to its character representation as specified by the {{lc|std::money_put}} facet of the locale currently imbued in {{tt|out}}.

The insertion operation in {{c|out &lt;&lt; put_money(mon, intl)}} behaves as a {{concept|FormattedOutputFunction}}.

===Parameters===
{{par begin}}
{{par | mon | a monetary value, either {{c|long double}} or {{lc|std::basic_string}}}}
{{par | intl | use international currency strings if {{c|true}}, use currency symbols otherwise}} 
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|out}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}}, then the expression {{c|out &lt;&lt; put_money(mon, intl)}} behaves as if the following code was executed:

{{c|1=
typedef std::ostreambuf_iterator&lt;CharT, Traits&gt; Iter;
typedef std::money_put&lt;CharT, Iter&gt; MoneyPut;
const MoneyPut&amp; mp = std::use_facet&lt;MoneyPut&gt;(out.getloc());
const Iter end = mp.put(Iter(out.rdbuf()), intl, out, out.fill(), mon);
if (end.failed())
    out.setstate(std::ios::badbit);
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

int main()
{
    long double mon = 123.45; // or std::string mon = &quot;123.45&quot;;

    std::cout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::cout &lt;&lt; std::showbase
              &lt;&lt; &quot;en_US: &quot; &lt;&lt; std::put_money(mon)
              &lt;&lt; &quot; or &quot; &lt;&lt; std::put_money(mon, true) &lt;&lt; '\n';

    std::cout.imbue(std::locale(&quot;ru_RU.utf8&quot;));
    std::cout &lt;&lt; &quot;ru_RU: &quot; &lt;&lt; std::put_money(mon)
              &lt;&lt; &quot; or &quot; &lt;&lt; std::put_money(mon, true) &lt;&lt; '\n';

    std::cout.imbue(std::locale(&quot;ja_JP.utf8&quot;));
    std::cout &lt;&lt; &quot;ja_JP: &quot; &lt;&lt; std::put_money(mon)
              &lt;&lt; &quot; or &quot; &lt;&lt; std::put_money(mon, true) &lt;&lt; '\n';
}
 | output=
en_US: $1.23 or USD  1.23
ru_RU: 1.23 руб or 1.23 RUB 
ja_JP: ￥123 or JPY  123
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc money_put}}
{{dsc inc | cpp/io/manip/dsc get_money}}
{{dsc end}}

[[de:cpp/io/manip/put money]]
[[es:cpp/io/manip/put money]]
[[fr:cpp/io/manip/put money]]
[[it:cpp/io/manip/put money]]
[[ja:cpp/io/manip/put money]]
[[pt:cpp/io/manip/put money]]
[[ru:cpp/io/manip/put money]]
[[zh:cpp/io/manip/put money]]</text>
      <sha1>abh6yqil144pn4gk3q9l64e1pesen2i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/put time</title>
    <ns>0</ns>
    <id>4649</id>
    <revision>
      <id>78364</id>
      <parentid>63330</parentid>
      <timestamp>2015-05-18T17:59:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso get_time</comment>
      <text xml:space="preserve" bytes="2396">{{cpp/title|put_time}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip | since=c++11 |
template&lt; class CharT &gt;
/*unspecified*/ put_time( const std::tm* tmb, const CharT* fmt );
}}

When used in an expression {{c|out &lt;&lt; put_time(tmb, fmt)}}, converts the date and time information from a given calendar time {{tt|tmb}} to a character string according to format string {{tt|fmt}}, as if by calling {{lc|std::strftime}}, {{lc|std::wcsftime}}, or analog (depending on {{tt|CharT}}), according to the {{lc|std::time_put}} facet of the locale currently imbued in the output stream {{tt|out}}.

===Parameters===
{{par begin}}
{{par | tmb | pointer to the calendar time structure as obtained from localtime() or gmtime()}}
{{par | fmt | pointer to a null-terminated CharT string specifying the format of conversion. 
{{cpp/chrono/c/strftime format}}
}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|out}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}}, then the expression {{c|out &lt;&lt; put_time(tmb, fmt)}} behaves as if the following code was executed:

{{c|1=
typedef std::ostreambuf_iterator&lt;CharT, Traits&gt; Iter;
typedef std::time_put&lt;CharT, Iter&gt; TimePut;
const TimePut&amp; tp = std::use_facet&lt;TimePut&gt;(out.getloc());
const Iter end = tp.put(Iter(out.rdbuf()), out, out.fill(), tmb, fmt, fmt + Traits::length(fmt));
if (end.failed())
    out.setstate(std::ios_base::badbit);
}}


===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;ctime&gt;

int main()
{
    std::time_t t = std::time(nullptr);
    std::tm tm = *std::localtime(&amp;t);
    std::cout.imbue(std::locale(&quot;ru_RU.utf8&quot;));
    std::cout &lt;&lt; &quot;ru_RU: &quot; &lt;&lt; std::put_time(&amp;tm, &quot;%c %Z&quot;) &lt;&lt; '\n';
    std::cout.imbue(std::locale(&quot;ja_JP.utf8&quot;));
    std::cout &lt;&lt; &quot;ja_JP: &quot; &lt;&lt; std::put_time(&amp;tm, &quot;%c %Z&quot;) &lt;&lt; '\n';
}
 | output=
ru_RU: Ср. 28 дек. 2011 10:21:16 EST
ja_JP: 2011年12月28日 10時21分16秒 EST
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc time_put}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc inc | cpp/chrono/c/dsc strftime}}
{{dsc inc | cpp/chrono/c/dsc wcsftime}}
{{dsc end}}

[[de:cpp/io/manip/put time]]
[[es:cpp/io/manip/put time]]
[[fr:cpp/io/manip/put time]]
[[it:cpp/io/manip/put time]]
[[ja:cpp/io/manip/put time]]
[[pt:cpp/io/manip/put time]]
[[ru:cpp/io/manip/put time]]
[[zh:cpp/io/manip/put time]]</text>
      <sha1>egx9kdfn3irhf5yf1ib5qt751j5s4eq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/quoted</title>
    <ns>0</ns>
    <id>12913</id>
    <revision>
      <id>91261</id>
      <parentid>88613</parentid>
      <timestamp>2017-03-30T20:19:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2785</comment>
      <text xml:space="preserve" bytes="4716">{{cpp/title|quoted}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|iomanip}}
{{dcl item | since=c++14 |num = 1 | 1=
template&lt; class CharT &gt;
/*unspecified*/ quoted(const CharT* s,
                       CharT delim=CharT('&quot;'), CharT escape=CharT('\\'));
}}
{{dcl item | since=c++14 |num = 2 | 1=
template&lt; class CharT, class Traits, class Allocator &gt;
/*unspecified*/ quoted(const std::basic_string&lt;CharT, Traits, Allocator&gt;&amp; s,
                       CharT delim=CharT('&quot;'), CharT escape=CharT('\\'));
}}
{{dcl item | since=c++17 |num = 3 | 1=
template&lt; class CharT, class Traits&gt;
/*unspecified*/ quoted(std::basic_string_view&lt;CharT, Traits&gt; s,
                       CharT delim=CharT('&quot;'), CharT escape=CharT('\\'));
}}
{{dcl item | since=c++14 |num = 4 | 1=
template&lt; class CharT, class Traits, class Allocator &gt;
/*unspecified*/ quoted(std::basic_string&lt;CharT, Traits, Allocator&gt;&amp; s,
                       CharT delim=CharT('&quot;'), CharT escape=CharT('\\'));
}}
{{dcl end}}

Allows insertion and extraction of quoted strings, such as the ones found in CSV or XML.

@1-3@ When used in an expression {{c|out &lt;&lt; quoted(s, delim, escape)}}, where {{tt|out}} is an output stream with {{tt|char_type}} equal to {{tt|CharT}} and, for overload 2, {{tt|traits_type}} equal to {{tt|Traits}}, behaves as a {{concept|FormattedOutputFunction}}, which inserts into {{c|out}} a sequence of characters {{tt|seq}} constructed as follows:
:@a@ First, the character {{tt|delim}} is added to the sequence
:@b@ Then every character from {{tt|s}}, except if the next character to output equals {{tt|delim}} or equals {{tt|escape}} (as determined by the stream's {{tt|traits_type::eq}}), then first appends an extra copy of {{tt|escape}}
:@c@ In the end, {{tt|delim}} is appended to {{tt|seq}} once more
:Then, if {{tt|seq.size() &lt; out.width()}}, adds {{tt|out.width()-seq.size()}} copies of the fill character {{tt|out.fill()}} either at the end of the sequence (if {{tt|ios_base::left}} is set in {{tt|out.flags()}}) or at the beginning of the sequence (in all other cases). 
:Finally, outputs each character from the resulting sequence as if by calling {{c|out.rdbuf()-&gt;sputn(seq, n)}}, where {{c|1=n=std::max(out.width(), seq.size())}} and {{c|out.width(0)}} to cancel the effects of {{lc|std::setw}}, if any.
@4@ When used in an expression {{c|in &gt;&gt; quoted(s, delim, escape)}}, where {{tt|in}} is an input stream with {{tt|char_type}} equal to {{tt|CharT}} and {{tt|traits_type}} equal to {{tt|Traits}}, extracts characters from {{c|in}}, using {{lc|std::basic_istream::operator&gt;&gt;}}, according to the following rules:
:@a@ If the first character extracted does not equal {{tt|delim}} (as determined by the stream's {{tt|traits_type::eq}}), then simply performs {{c|in &gt;&gt; s}}.
:@b@ Otherwise (if the first character is the delimiter):
::@1@ Turns off the {{lc|skipws}} flag on the input stream
::@2@ Empties the destination string by calling {{c|s.clear()}}
::@3@ Extracts characters from {{tt|in}} and appends them to {{tt|s}}, except that whenever an {{tt|escape}} character is extracted, it is ignored and the next character is appended to {{tt|s}}. Extraction stops when {{c|!in{{==}}true}} or when an unescaped {{tt|delim}} character is found.
::@4@ Discards the final (unescaped) {{tt|delim}} character.
::@5@ Restores the {{lc|skipws}} flag on the input stream to its original value.

===Parameters===
{{par begin}}
{{par | s | the string to insert or extract }}
{{par | delim | the character to use as the delimiter, defaults to {{tt|&quot;}} }} 
{{par | escape | the character to use as the escape character, defaults to {{tt|\}} }} 
{{par end}}

===Return value===
Returns an object of unspecified type such that the described behavior takes place.

===Exceptions===
Throws {{lc|std::ios_base::failure}} if {{tt|operator&gt;&gt;}} or {{tt|operator&lt;&lt;}} throws.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;sstream&gt;

int main()
{
    std::stringstream ss;
    std::string in = &quot;String with spaces, and embedded \&quot;quotes\&quot; too&quot;;
    std::string out;

    ss &lt;&lt; std::quoted(in);
    std::cout &lt;&lt; &quot;read in     [&quot; &lt;&lt; in &lt;&lt; &quot;]\n&quot;
              &lt;&lt; &quot;stored as   [&quot; &lt;&lt; ss.str() &lt;&lt; &quot;]\n&quot;;

    ss &gt;&gt; std::quoted(out);
    std::cout &lt;&lt; &quot;written out [&quot; &lt;&lt; out &lt;&lt; &quot;]\n&quot;;
}
 | output=
read in     [String with spaces, and embedded &quot;quotes&quot; too]
stored as   [&quot;String with spaces, and embedded \&quot;quotes\&quot; too&quot;]
written out [String with spaces, and embedded &quot;quotes&quot; too]
}}

===See also===

[[de:cpp/io/manip/quoted]]
[[es:cpp/io/manip/quoted]]
[[fr:cpp/io/manip/quoted]]
[[it:cpp/io/manip/quoted]]
[[ja:cpp/io/manip/quoted]]
[[pt:cpp/io/manip/quoted]]
[[ru:cpp/io/manip/quoted]]
[[zh:cpp/io/manip/quoted]]</text>
      <sha1>9k1kwmmoma311w73dbkuq9k3o86ignq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/resetiosflags</title>
    <ns>0</ns>
    <id>4825</id>
    <revision>
      <id>73311</id>
      <parentid>57917</parentid>
      <timestamp>2014-10-23T15:08:44Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <comment>Corrected fmtflag name</comment>
      <text xml:space="preserve" bytes="1965">{{cpp/title|resetiosflags}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip |
/*unspecified*/ resetiosflags( std::ios_base::fmtflags mask );
}}

When used in an expression {{c|out &lt;&lt; resetiosflags(mask)}} or {{c|in &gt;&gt; resetiosflags(mask)}}, clears all format flags of the stream {{tt|out}} or {{tt|in}} as specified by the {{tt|mask}}.

===Parameters===
{{par begin}}
{{par | mask | bitmask of the flags to clear}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|str}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}} or {{c|std::basic_istream&lt;CharT, Traits&gt;}}, then the expression {{c|str &lt;&lt; resetiosflags(mask)}} or {{c|str &gt;&gt; resetiosflags(mask)}} behaves as if the following code was executed:

{{c|1=
str.setf(std::ios_base::fmtflags(0), mask);
}}

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
int main()
{
    std::istringstream in(&quot;10 010 10 010 10 010&quot;);
    int n1, n2;
    in &gt;&gt; std::oct &gt;&gt; n1 &gt;&gt; n2;
    std::cout &lt;&lt; &quot;Parsing \&quot;10 010\&quot; with std::oct gives:  &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; '\n';
    in &gt;&gt; std::dec &gt;&gt; n1 &gt;&gt; n2;
    std::cout &lt;&lt; &quot;Parsing \&quot;10 010\&quot; with std::dec gives:  &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; '\n';
    in &gt;&gt; std::resetiosflags(std::ios_base::basefield) &gt;&gt; n1 &gt;&gt; n2;
    std::cout &lt;&lt; &quot;Parsing \&quot;10 010\&quot; with autodetect gives: &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; '\n';
}
 | output=
Parsing &quot;10 010&quot; with std::oct gives:  8 8
Parsing &quot;10 010&quot; with std::dec gives:  10 10
Parsing &quot;10 010&quot; with autodetect gives: 10 8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc setf | mem=std::ios_base}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc end}}

[[de:cpp/io/manip/resetiosflags]]
[[es:cpp/io/manip/resetiosflags]]
[[fr:cpp/io/manip/resetiosflags]]
[[it:cpp/io/manip/resetiosflags]]
[[ja:cpp/io/manip/resetiosflags]]
[[pt:cpp/io/manip/resetiosflags]]
[[ru:cpp/io/manip/resetiosflags]]
[[zh:cpp/io/manip/resetiosflags]]</text>
      <sha1>nxk1gvhbmwbmgbec1vhc57yvvj7fisn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/setbase</title>
    <ns>0</ns>
    <id>4677</id>
    <revision>
      <id>65685</id>
      <parentid>65683</parentid>
      <timestamp>2013-09-26T10:15:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>&quot;source&quot; seems to be the recommended template</comment>
      <text xml:space="preserve" bytes="2428">{{cpp/title|setbase}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip |
/*unspecified*/ setbase( int base );
}}

Sets the numeric base of the stream. When used in an expression {{c|out &lt;&lt; setbase(base)}} or {{c|in &gt;&gt; setbase(base)}}, changes the {{tt|basefield}} flag of the stream {{tt|out}} or {{tt|in}}, depending on the value of {{tt|base}}: 

* the value {{c|16}} sets {{tt|basefield}} to {{lc|std::ios_base::hex}}
* the value {{c|8}} sets {{lc|std::ios_base::oct}}
* the value {{c|10}} sets {{lc|std::ios_base::dec}}.

Values of {{tt|base}} other than 8, 10, or 16 reset {{tt|basefield}} to zero, which corresponds to decimal output and prefix-dependent input.

===Parameters===
{{par begin}}
{{par | base | new value for basefield}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|str}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}} or {{c|std::basic_istream&lt;CharT, Traits&gt;}}, then the expression {{c|str &lt;&lt; setbase(base)}} or {{c|str &gt;&gt; setbase(base)}} behaves as if the following code was executed:

{{source|1=
str.setf(base ==  8 ? std::ios_base::oct :
            base == 10 ? std::ios_base::dec :
                base == 16 ? std::ios_base::hex :
                     std::ios_base::fmtflags(0),
         std::ios_base::basefield);
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;iomanip&gt;
int main()
{
    std::cout &lt;&lt; &quot;Parsing string \&quot;10 0x10 010\&quot;\n&quot;;

    int n1, n2, n3;
    std::istringstream s(&quot;10 0x10 010&quot;);
    s &gt;&gt; std::setbase(16) &gt;&gt; n1 &gt;&gt; n2 &gt;&gt; n3;
    std::cout &lt;&lt; &quot;hexadecimal parse: &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; ' ' &lt;&lt; n3 &lt;&lt; '\n';

    s.clear();
    s.seekg(0);
    s &gt;&gt; std::setbase(0) &gt;&gt; n1 &gt;&gt; n2 &gt;&gt; n3;
    std::cout &lt;&lt; &quot;prefix-dependent parse: &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; ' ' &lt;&lt; n3 &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;hex output: &quot; &lt;&lt; std::setbase(16)
              &lt;&lt; std::showbase &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; ' ' &lt;&lt; n3 &lt;&lt; '\n';
}
 | output=
Parsing string &quot;10 0x10 010&quot;
hexadecimal parse: 16 16 16
prefix-dependent parse: 10 16 8
hex output: 0xa 0x10 0x8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc hex}}
{{dsc inc | cpp/io/manip/dsc showbase}}
{{dsc end}}

[[de:cpp/io/manip/setbase]]
[[es:cpp/io/manip/setbase]]
[[fr:cpp/io/manip/setbase]]
[[it:cpp/io/manip/setbase]]
[[ja:cpp/io/manip/setbase]]
[[pt:cpp/io/manip/setbase]]
[[ru:cpp/io/manip/setbase]]
[[zh:cpp/io/manip/setbase]]</text>
      <sha1>ajnvppdwv4oabvncf2y6fccv5w3gfqf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/setfill</title>
    <ns>0</ns>
    <id>4802</id>
    <revision>
      <id>74678</id>
      <parentid>57921</parentid>
      <timestamp>2014-12-22T14:34:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note that fill returns this char</comment>
      <text xml:space="preserve" bytes="1446">{{cpp/title|setfill}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip |
template&lt; class CharT &gt;
/*unspecified*/ setfill( CharT c );
}}

When used in an expression {{c|out &lt;&lt; setfill(c)}} sets the fill character of the stream {{tt|out}} to {{tt|c}}.

===Parameters===
{{par begin}}
{{par | c | new value for the fill character}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|out}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}}, then the expression {{c|out &lt;&lt; setfill(n)}} behaves as if the following code was executed:

{{c|1=
out.fill(n);
}}

===Notes===
The current fill character may be obtained with {{lc|std::ostream::fill}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
int main()
{
    std::cout &lt;&lt; &quot;default fill: &quot; &lt;&lt; std::setw(10) &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; &quot;setfill('*'): &quot; &lt;&lt; std::setfill('*')
                                  &lt;&lt; std::setw(10) &lt;&lt; 42 &lt;&lt; '\n';
}
 | output=
default fill:         42
setfill('*'): ********42
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ios/dsc fill | mem=std::basic_ios}}
{{dsc inc | cpp/io/manip/dsc left}}
{{dsc inc | cpp/io/manip/dsc setw}}
{{dsc end}}

[[de:cpp/io/manip/setfill]]
[[es:cpp/io/manip/setfill]]
[[fr:cpp/io/manip/setfill]]
[[it:cpp/io/manip/setfill]]
[[ja:cpp/io/manip/setfill]]
[[pt:cpp/io/manip/setfill]]
[[ru:cpp/io/manip/setfill]]
[[zh:cpp/io/manip/setfill]]</text>
      <sha1>f4dk4pay2wfob8pw4h1cws7uacyvjio</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/setiosflags</title>
    <ns>0</ns>
    <id>4826</id>
    <revision>
      <id>73312</id>
      <parentid>57924</parentid>
      <timestamp>2014-10-23T18:19:37Z</timestamp>
      <contributor>
        <username>Kumiponi</username>
        <id>3351</id>
      </contributor>
      <minor/>
      <comment>another case of &quot;fmt_flags&quot;</comment>
      <text xml:space="preserve" bytes="1555">{{cpp/title|setiosflags}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip |
/*unspecified*/ setiosflags( std::ios_base::fmtflags mask );
}}

When used in an expression {{c|out &lt;&lt; setiosflags(mask)}} or {{c|in &gt;&gt; setiosflags(mask)}}, sets all format flags of the stream {{tt|out}} or {{tt|in}} as specified by the {{tt|mask}}.

===Parameters===
{{par begin}}
{{par | mask | bitmask of the flags to set}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|str}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}} or {{c|std::basic_istream&lt;CharT, Traits&gt;}}, then the expression {{c|str &lt;&lt; setiosflags(mask)}} or {{c|str &gt;&gt; setiosflags(mask)}} behaves as if the following code was executed:

{{c|1=
str.setf(mask);
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

int main()
{
    std::cout &lt;&lt;  std::resetiosflags(std::ios_base::dec) 
              &lt;&lt;  std::setiosflags(  std::ios_base::hex
                                   {{!}} std::ios_base::uppercase
                                   {{!}} std::ios_base::showbase) &lt;&lt; 42 &lt;&lt; '\n';
}
 | output=
0X2A
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc setf | mem=std::ios_base}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc end}}

[[de:cpp/io/manip/setiosflags]]
[[es:cpp/io/manip/setiosflags]]
[[fr:cpp/io/manip/setiosflags]]
[[it:cpp/io/manip/setiosflags]]
[[ja:cpp/io/manip/setiosflags]]
[[pt:cpp/io/manip/setiosflags]]
[[ru:cpp/io/manip/setiosflags]]
[[zh:cpp/io/manip/setiosflags]]</text>
      <sha1>gq9sylgls0mwzjt1dzely2i9ezl9qa7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/setprecision</title>
    <ns>0</ns>
    <id>4803</id>
    <revision>
      <id>89876</id>
      <parentid>89875</parentid>
      <timestamp>2017-01-27T15:49:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fmt/update output after last edit</comment>
      <text xml:space="preserve" bytes="1749">{{cpp/title|setprecision}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip |
/*unspecified*/ setprecision( int n );
}}

When used in an expression {{c|out &lt;&lt; setprecision(n)}} or {{c|in &gt;&gt; setprecision(n)}}, sets the {{tt|precision}} parameter of the stream {{tt|out}} or {{tt|in}} to exactly {{tt|n}}. 

===Parameters===
{{par begin}}
{{par | n | new value for precision}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|str}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}} or an input stream of type {{c|std::basic_istream&lt;CharT, Traits&gt;}}, then the expression {{c|str &lt;&lt; setprecision(n)}} or {{c|str &gt;&gt; setprecision(n)}} behaves as if the following code was executed:

{{c|1=
str.precision(n);
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;cmath&gt;
#include &lt;limits&gt;
int main()
{
    const long double pi = std::acos(-1.L);
    std::cout &lt;&lt; &quot;default precision (6): &quot; &lt;&lt; pi &lt;&lt; '\n'
              &lt;&lt; &quot;std::setprecision(10): &quot; &lt;&lt; std::setprecision(10) &lt;&lt; pi &lt;&lt; '\n'
              &lt;&lt; &quot;max precision:         &quot;
              &lt;&lt; std::setprecision(std::numeric_limits&lt;long double&gt;::digits10 + 1)
              &lt;&lt; pi &lt;&lt; '\n';
}
 | output=
default precision (6): 3.14159
std::setprecision(10): 3.141592654
max precision:         3.141592653589793239
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc fixed}}
{{dsc inc | cpp/io/ios_base/dsc precision}}
{{dsc end}}

[[de:cpp/io/manip/setprecision]]
[[es:cpp/io/manip/setprecision]]
[[fr:cpp/io/manip/setprecision]]
[[it:cpp/io/manip/setprecision]]
[[ja:cpp/io/manip/setprecision]]
[[pt:cpp/io/manip/setprecision]]
[[ru:cpp/io/manip/setprecision]]
[[zh:cpp/io/manip/setprecision]]</text>
      <sha1>jssnpb01gnpi3wch9z92kp77fb8h2i6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/setw</title>
    <ns>0</ns>
    <id>4691</id>
    <revision>
      <id>87718</id>
      <parentid>77412</parentid>
      <timestamp>2016-09-28T02:07:31Z</timestamp>
      <contributor>
        <ip>99.242.226.96</ip>
      </contributor>
      <comment>Typo</comment>
      <text xml:space="preserve" bytes="2775">{{cpp/title|setw}}
{{cpp/io/manip/navbar}}
{{ddcl | header=iomanip |
/*unspecified*/ setw( int n );
}}

When used in an expression {{c|out &lt;&lt; setw(n)}} or {{c|in &gt;&gt; setw(n)}}, sets the {{tt|width}} parameter of the stream {{tt|out}} or {{tt|in}} to exactly {{tt|n}}. 

===Parameters===
{{par begin}}
{{par | n | new value for width}}
{{par end}}

===Return value===

Returns an object of unspecified type such that if {{tt|str}} is the name of an output stream of type {{c|std::basic_ostream&lt;CharT, Traits&gt;}} or {{c|std::basic_istream&lt;CharT, Traits&gt;}}, then the expression {{c|str &lt;&lt; setw(n)}} or {{c|str &gt;&gt; setw(n)}} behaves as if the following code was executed:

{{c|1=
str.width(n);
}}

===Notes===

The width property of the stream will be reset to zero (meaning &quot;unspecified&quot;) if any of the following functions are called:
* Input
:* {{ltt|cpp/string/basic_string/operator_ltltgtgt|operator&gt;&gt;(basic_istream&amp;, basic_string&amp;)}}
:* {{ltt|cpp/io/basic_istream/operator_gtgt2|operator&gt;&gt;(basic_istream&amp;, char*)}}
* Output
:* Overloads 1-7 of {{ltt|cpp/io/basic_ostream/operator_ltlt|basic_ostream::operator&lt;&lt;()}} (at Stage 3 of {{ltt|cpp/locale/num_put/put|num_put::put()}})
:* {{ltt|cpp/io/basic_ostream/operator_ltlt2|operator&lt;&lt;(basic_ostream&amp;, char)}} and {{ltt|cpp/io/basic_ostream/operator_ltlt2|operator&lt;&lt;(basic_ostream&amp;, char*)}}
:* {{ltt|cpp/string/basic_string/operator_ltltgtgt|operator&lt;&lt;(basic_ostream&amp;, basic_string&amp;)}}
:* {{lc|std::put_money}} (inside {{ltt|cpp/locale/money_put/put|money_put::put()}})
:* {{lc|std::quoted}} (when used with an output stream)

The exact effects this modifier has on the input and output vary between the individual I/O functions and are described at each {{tt|operator&lt;&lt;}} and {{tt|operator&gt;&gt;}} overload page individually.

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

int main()
{
    std::cout &lt;&lt; &quot;no setw:&quot; &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; &quot;setw(6):&quot; &lt;&lt; std::setw(6) &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; &quot;setw(6), several elements: &quot; &lt;&lt; 89 &lt;&lt; std::setw(6) &lt;&lt; 12 &lt;&lt; 34 &lt;&lt; '\n';
    std::istringstream is(&quot;hello, world&quot;);
    char arr[10];
    is &gt;&gt; std::setw(6) &gt;&gt; arr;
    std::cout &lt;&lt; &quot;Input from \&quot;&quot; &lt;&lt; is.str() &lt;&lt; &quot;\&quot; with setw(6) gave \&quot;&quot;
              &lt;&lt; arr &lt;&lt; &quot;\&quot;\n&quot;;
}
 | output=
no setw:42
setw(6):    42
setw(6), several elements: 89    1234
Input from &quot;hello, world&quot; with setw(6) gave &quot;hello&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/ios_base/dsc width | mem=std::ios_base}}
{{dsc inc | cpp/io/manip/dsc setfill}}
{{dsc inc | cpp/io/manip/dsc left}}
{{dsc end}}

[[de:cpp/io/manip/setw]]
[[es:cpp/io/manip/setw]]
[[fr:cpp/io/manip/setw]]
[[it:cpp/io/manip/setw]]
[[ja:cpp/io/manip/setw]]
[[pt:cpp/io/manip/setw]]
[[ru:cpp/io/manip/setw]]
[[zh:cpp/io/manip/setw]]</text>
      <sha1>fnju1nth6lgjy20cwjodtfade7xay9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/showbase</title>
    <ns>0</ns>
    <id>3069</id>
    <revision>
      <id>80709</id>
      <parentid>80704</parentid>
      <timestamp>2015-08-26T16:26:51Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fix typo</comment>
      <text xml:space="preserve" bytes="2619">{{cpp/title|showbase|noshowbase}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; showbase( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; noshowbase( std::ios_base&amp; str );
}}
{{dcl end}}

1) enables the {{tt|showbase}} flag in the stream {{tt|str}} as if by calling {{c|str.setf(std::ios_base::showbase)}}

2) disables the {{tt|showbase}} flag in the stream {{tt|str}} as if by calling {{c|str.unsetf(std::ios_base::showbase)}}

This is an I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::showbase}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::showbase}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

The {{tt|showbase}} flag affects the behavior of integer output (see {{lc|std::num_put::put}}), monetary input (see {{lc|std::money_get::get}}) and monetary output (see {{lc|std::money_put::put}}).

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Notes===
As specifed in {{lc|std::num_put::put}}, the showbase flag in integer output acts like the # format specifier in {{lc|std::printf}}, which means the numeric base prefix is ''not'' added when outputting the value zero.

===Example===
{{example
 |
 | code=
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
int main()
{
    // showbase affects the output of octals and hexadecimals
    std::cout &lt;&lt; std::hex
              &lt;&lt; &quot;showbase: &quot; &lt;&lt; std::showbase &lt;&lt; 42 &lt;&lt; '\n'
              &lt;&lt; &quot;noshowbase: &quot; &lt;&lt; std::noshowbase &lt;&lt; 42 &lt;&lt; '\n';

    // and both input and output of monetary values
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    long double val = 0;
    std::istringstream is(&quot;3.14&quot;);
    is &gt;&gt; std::showbase &gt;&gt; std::get_money(val);
    std::cout &lt;&lt; &quot;With showbase, parsing 3.14 as money gives &quot; &lt;&lt; val &lt;&lt; '\n';
    is.seekg(0);
    is &gt;&gt; std::noshowbase &gt;&gt; std::get_money(val);
    std::cout &lt;&lt; &quot;Without showbase, parsing 3.14 as money gives &quot; &lt;&lt; val &lt;&lt; '\n';
}
 | output=
showbase: 0x2a
noshowbase: 2a
With showbase, parsing 3.14 as money gives 0
Without showbase, parsing 3.14 as money gives 314
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc end}}

[[de:cpp/io/manip/showbase]]
[[es:cpp/io/manip/showbase]]
[[fr:cpp/io/manip/showbase]]
[[it:cpp/io/manip/showbase]]
[[ja:cpp/io/manip/showbase]]
[[pt:cpp/io/manip/showbase]]
[[ru:cpp/io/manip/showbase]]
[[zh:cpp/io/manip/showbase]]</text>
      <sha1>15lwxh39i2nzovb410oytn93n7wk1o4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/showpoint</title>
    <ns>0</ns>
    <id>4694</id>
    <revision>
      <id>83268</id>
      <parentid>83116</parentid>
      <timestamp>2016-01-29T03:35:27Z</timestamp>
      <contributor>
        <username>Fefe</username>
        <id>4823</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1888">{{cpp/title|showpoint|noshowpoint}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; showpoint( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; noshowpoint( std::ios_base&amp; str );
}}
{{dcl end}}

Enables or disables the unconditional inclusion of the decimal point character in floating-point output. Has no effect on input.

@1@ enables the {{tt|showpoint}} flag in the stream {{tt|str}} as if by calling {{c|str.setf(std::ios_base::showpoint)}}
@2@ disables the {{tt|showpoint}} flag in the stream {{tt|str}} as if by calling {{c|str.unsetf(std::ios_base::showpoint)}}

This is an I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::showpoint}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::showpoint}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

The character to use as decimal point character is determined by the numpunct facet of the locale imbued in the stream at the time of output, as described in {{lc|std::num_put::put}}

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;1.0 with showpoint: &quot; &lt;&lt; std::showpoint &lt;&lt; 1.0 &lt;&lt; '\n'
              &lt;&lt; &quot;1.0 with noshowpoint: &quot; &lt;&lt; std::noshowpoint &lt;&lt; 1.0 &lt;&lt; '\n';
}
 | output=
1.0 with showpoint: 1.00000
1.0 with noshowpoint: 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc end}}

[[de:cpp/io/manip/showpoint]]
[[es:cpp/io/manip/showpoint]]
[[fr:cpp/io/manip/showpoint]]
[[it:cpp/io/manip/showpoint]]
[[ja:cpp/io/manip/showpoint]]
[[pt:cpp/io/manip/showpoint]]
[[ru:cpp/io/manip/showpoint]]
[[zh:cpp/io/manip/showpoint]]</text>
      <sha1>67m6azel55h07s2kfyz8o79krr7gom4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/showpos</title>
    <ns>0</ns>
    <id>4692</id>
    <revision>
      <id>57931</id>
      <parentid>49827</parentid>
      <timestamp>2013-06-01T06:04:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1678">{{cpp/title|showpos|noshowpos}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; showpos( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; noshowpos( std::ios_base&amp; str );
}}
{{dcl end}}

Enables or disables the display of the plus sign {{c|'+'}} in non-negative integer output. Has no effect on input.

1) enables the {{tt|showpos}} flag in the stream {{tt|str}} as if by calling {{c|str.setf(std::ios_base::showpos)}}

2) disables the {{tt|showpos}} flag in the stream {{tt|str}} as if by calling {{c|str.unsetf(std::ios_base::showpos)}}

This is an I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::showpos}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::showpos}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
        std::cout &lt;&lt; &quot;showpos: &quot; &lt;&lt; std::showpos &lt;&lt; 42 &lt;&lt; ' ' &lt;&lt; 3.14 &lt;&lt; ' ' &lt;&lt; 0 &lt;&lt; '\n'
                  &lt;&lt; &quot;noshowpos: &quot; &lt;&lt; std::noshowpos &lt;&lt; 42 &lt;&lt; ' ' &lt;&lt; 3.14 &lt;&lt; ' ' &lt;&lt; 0 &lt;&lt; '\n';
}
 | output=
showpos: +42 +3.14 +0
noshowpos: 42 3.14 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc end}}

[[de:cpp/io/manip/showpos]]
[[es:cpp/io/manip/showpos]]
[[fr:cpp/io/manip/showpos]]
[[it:cpp/io/manip/showpos]]
[[ja:cpp/io/manip/showpos]]
[[pt:cpp/io/manip/showpos]]
[[ru:cpp/io/manip/showpos]]
[[zh:cpp/io/manip/showpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/skipws</title>
    <ns>0</ns>
    <id>4824</id>
    <revision>
      <id>57934</id>
      <parentid>49828</parentid>
      <timestamp>2013-06-01T06:04:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2103">{{cpp/title|skipws|noskipws}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; skipws( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; noskipws( std::ios_base&amp; str );
}}
{{dcl end}}

Enables or disables skipping of leading whitespace by the formatted input functions (enabled by default). Has no effect on output.

1) enables the {{tt|skipws}} flag in the stream {{tt|str}} as if by calling {{c|str.setf(std::ios_base::skipws)}}

2) disables the {{tt|skipws}} flag in the stream {{tt|str}} as if by calling {{c|str.unsetf(std::ios_base::skipws)}}

The whitespace skipping is performed by the constructor of {{lc|std::basic_istream::sentry}}, which reads and discards the characters classified as whitespace by the {{lc|std::ctype}} facet of the stream's imbued locale.

This is an I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::noskipws}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::noskipws}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
int main()
{
    char c1, c2, c3;
    std::istringstream(&quot;a b c&quot;) &gt;&gt; c1 &gt;&gt; c2 &gt;&gt; c3;
    std::cout &lt;&lt; &quot;Default  behavior: c1 = &quot; &lt;&lt; c1 &lt;&lt; &quot; c2 = &quot; &lt;&lt; c2 &lt;&lt; &quot; c3 = &quot; &lt;&lt; c3 &lt;&lt; '\n';
    std::istringstream(&quot;a b c&quot;) &gt;&gt; std::noskipws &gt;&gt; c1 &gt;&gt; c2 &gt;&gt; c3;
    std::cout &lt;&lt; &quot;noskipws behavior: c1 = &quot; &lt;&lt; c1 &lt;&lt; &quot; c2 = &quot; &lt;&lt; c2 &lt;&lt; &quot; c3 = &quot; &lt;&lt; c3 &lt;&lt; '\n';
}
 | output=
Default  behavior: c1 = a c2 = b c3 = c
noskipws behavior: c1 = a c2 =   c3 = b
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc end}}

[[de:cpp/io/manip/skipws]]
[[es:cpp/io/manip/skipws]]
[[fr:cpp/io/manip/skipws]]
[[it:cpp/io/manip/skipws]]
[[ja:cpp/io/manip/skipws]]
[[pt:cpp/io/manip/skipws]]
[[ru:cpp/io/manip/skipws]]
[[zh:cpp/io/manip/skipws]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/unitbuf</title>
    <ns>0</ns>
    <id>4820</id>
    <revision>
      <id>57935</id>
      <parentid>49829</parentid>
      <timestamp>2013-06-01T06:04:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2559">{{cpp/title|unitbuf|nounitbuf}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; unitbuf( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; nounitbuf( std::ios_base&amp; str );
}}
{{dcl end}}

Enables or disables automatic flushing of the output stream after any output operation. Has no effect on input.

1) enables the {{tt|unitbuf}} flag in the stream {{tt|str}} as if by calling {{c|str.setf(std::ios_base::unitbuf)}}

2) disables the {{tt|unitbuf}} flag in the stream {{tt|str}} as if by calling {{c|str.unsetf(std::ios_base::unitbuf)}}

This is an I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::unitbuf}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::unitbuf}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Notes===
Flushing is performed in the destructor of the {{lc|std::basic_ostream::sentry}} object, which calls {{c|str.rdbuf()-&gt;pubsync()}} if {{c|1=str.flags() &amp; std::ios_base::unitbuf == true}}.

The standard output objects {{lc|std::cerr}} and {{lc|std::wcerr}} have their {{tt|unitbuf}} bit set by default.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 | Without std::unitbuf or another explicit flush, the output is the same, but does not appear in real time.
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;

template&lt;typename Diff&gt;
void log_progress(Diff d)
{
    std::cout &lt;&lt; &quot;..(&quot;
              &lt;&lt; std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(d).count()
              &lt;&lt; &quot; ms)..&quot;;
}

int main()
{
    volatile int sink = 0;
    std::cout &lt;&lt; std::unitbuf; // enable automatic flushing

    auto t1 = std::chrono::high_resolution_clock::now();
    for (int j = 0; j &lt; 5; ++j)
    {
        for (int n = 0; n &lt; 10000; ++n)
            for (int m = 0; m &lt; 20000; ++m)
                sink += m * n; // do some work
        auto now = std::chrono::high_resolution_clock::now();
        log_progress(now - t1);
    }
    std::cout &lt;&lt; '\n';
}
 | output=
..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms)..
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc flush}}
{{dsc inc | cpp/io/manip/dsc endl}}
{{dsc end}}

[[de:cpp/io/manip/unitbuf]]
[[es:cpp/io/manip/unitbuf]]
[[fr:cpp/io/manip/unitbuf]]
[[it:cpp/io/manip/unitbuf]]
[[ja:cpp/io/manip/unitbuf]]
[[pt:cpp/io/manip/unitbuf]]
[[ru:cpp/io/manip/unitbuf]]
[[zh:cpp/io/manip/unitbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/uppercase</title>
    <ns>0</ns>
    <id>4799</id>
    <revision>
      <id>57938</id>
      <parentid>49830</parentid>
      <timestamp>2013-06-01T06:04:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1953">{{cpp/title|uppercase|nouppercase}}
{{cpp/io/manip/navbar}}
{{dcl begin}}
{{dcl header|ios}}
{{dcl | num = 1|
std::ios_base&amp; uppercase( std::ios_base&amp; str );
}}
{{dcl | num = 2|
std::ios_base&amp; nouppercase( std::ios_base&amp; str );
}}
{{dcl end}}

Enables the use of uppercase characters in floating-point and hexadecimal integer output. Has no effect on input.

1) enables the {{tt|uppercase}} flag in the stream {{tt|str}} as if by calling {{c|str.setf(std::ios_base::uppercase)}}

2) disables the {{tt|uppercase}} flag in the stream {{tt|str}} as if by calling {{c|str.unsetf(std::ios_base::uppercase)}}

This is an I/O manipulator, it may be called with an expression such as {{c|out &lt;&lt; std::uppercase}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in &gt;&gt; std::uppercase}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | str | reference to I/O stream }}
{{par end}}

===Return value===

{{tt|str}} (reference to the stream after manipulation)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase
              &lt;&lt; &quot;0x2a with uppercase: &quot; &lt;&lt; std::uppercase &lt;&lt; 0x2a &lt;&lt; '\n'
              &lt;&lt; &quot;0x2a with nouppercase: &quot; &lt;&lt; std::nouppercase &lt;&lt; 0x2a &lt;&lt; '\n'
              &lt;&lt; &quot;1e-10 with uppercase: &quot; &lt;&lt; std::uppercase &lt;&lt; 1e-10 &lt;&lt; '\n'
              &lt;&lt; &quot;1e-10 with nouppercase: &quot; &lt;&lt; std::nouppercase &lt;&lt; 1e-10 &lt;&lt; '\n';
}
 | output=
0x2a with uppercase: 0X2A
0x2a with nouppercase: 0x2a
1e-10 with uppercase: 1E-10
1e-10 with nouppercase: 1e-10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc resetiosflags}}
{{dsc inc | cpp/io/manip/dsc setiosflags}}
{{dsc end}}

[[de:cpp/io/manip/uppercase]]
[[es:cpp/io/manip/uppercase]]
[[fr:cpp/io/manip/uppercase]]
[[it:cpp/io/manip/uppercase]]
[[ja:cpp/io/manip/uppercase]]
[[pt:cpp/io/manip/uppercase]]
[[ru:cpp/io/manip/uppercase]]
[[zh:cpp/io/manip/uppercase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/manip/ws</title>
    <ns>0</ns>
    <id>4749</id>
    <revision>
      <id>91134</id>
      <parentid>66423</parentid>
      <timestamp>2017-03-21T15:10:30Z</timestamp>
      <contributor>
        <ip>165.225.86.65</ip>
      </contributor>
      <comment>#include &lt;istream&gt; required before C++11.</comment>
      <text xml:space="preserve" bytes="1788">{{cpp/title|ws}}
{{cpp/io/manip/navbar}}
{{ddcl | header=istream |
template&lt; class CharT, class Traits &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; ws( std::basic_istream&lt;CharT, Traits&gt;&amp; is );
}}

Discards leading whitespace from an input stream.

Behaves as an {{concept|UnformattedInputFunction}}, except that {{c|is.gcount()}} is not modified. After constructing and checking the sentry object, extracts characters from the stream and discards them until any one of the following conditions occurs:

* end of file condition occurs in the input sequence (in which case the function calls {{c|setstate(eofbit)}} but does not set {{tt|failbit}}.

* the next available character {{tt|c}} in the input sequence is not whitespace as determined by {{c|std::isspace(c, is.getloc())}}. The non-whitespace character is not extracted.

This is an input-only I/O manipulator, it may be called with an expression such as {{c|in &gt;&gt; std::ws}} for any {{tt|in}} of type {{lc|std::basic_istream}}.

===Parameters===
{{par begin}}
{{par | is | reference to input stream }}
{{par end}}

===Return value===

{{tt|is}} (reference to the stream after extraction of consecutive whitespace)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;istream&gt;
#include &lt;sstream&gt;

int main()
{
    std::istringstream s(&quot;     this is a test&quot;);
    std::string line;
    getline(s &gt;&gt; std::ws, line);
    std::cout &lt;&lt; &quot;ws + getline returns: \&quot;&quot; &lt;&lt; line &lt;&lt; &quot;\&quot;\n&quot;;
}
 | output=
ws + getline returns: &quot;this is a test&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc ignore| mem=std::basic_istream}}
{{dsc end}}

[[de:cpp/io/manip/ws]]
[[es:cpp/io/manip/ws]]
[[fr:cpp/io/manip/ws]]
[[it:cpp/io/manip/ws]]
[[ja:cpp/io/manip/ws]]
[[pt:cpp/io/manip/ws]]
[[ru:cpp/io/manip/ws]]
[[zh:cpp/io/manip/ws]]</text>
      <sha1>58xjn5yiq0k83cfyygj4fpsm1f5l5a6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ofstream</title>
    <ns>0</ns>
    <id>10280</id>
    <redirect title="cpp/io/basic ofstream" />
    <revision>
      <id>48771</id>
      <timestamp>2013-05-31T21:57:31Z</timestamp>
      <contributor>
        <ip>91.113.114.44</ip>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic ofstream]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/io/basic_ofstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ostrstream</title>
    <ns>0</ns>
    <id>4700</id>
    <revision>
      <id>85064</id>
      <parentid>57942</parentid>
      <timestamp>2016-03-24T14:14:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on ends</comment>
      <text xml:space="preserve" bytes="1748">{{cpp/title|ostrstream}}
{{cpp/io/ostrstream/navbar}}
{{dcl begin}}
{{dcl header|strstream}}
{{dcl | notes={{mark deprecated}} | 1=
class ostrstream : public std::ostream
}}
{{dcl end}}

The class {{tt|ostrstream}} implements output operations on array-backed streams. It essentially wraps a raw array I/O device implementation ({{c|std::strstreambuf}}) into the higher-level interface of {{lc|std::basic_ostream}}. 

The typical implementation of {{tt|ostrstream}} holds only one non-derived data member: an object of type {{c|std::strstreambuf}}.

===Notes===
After any call to {{tt|str()}}, a call to {{tt|freeze(false)}} is required to allow the destructor to deallocate the buffer as necessary.

Before any call to {{tt|str()}} that uses the result as a C string, the buffer must be null-terminated, typically with {{lc|std::ends}}.

{{tt|ostrstream}} has been deprecated since C++98, {{lc|std::ostringstream}} and [http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/array.html#array_sink boost::iostreams::array_sink] are the recommended replacements.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/strstream/dsc constructor | ostrstream}}
{{dsc inc | cpp/io/strstream/dsc destructor | ostrstream}}
{{dsc inc | cpp/io/strstream/dsc rdbuf | ostrstream}}
{{dsc inc | cpp/io/strstream/dsc str | ostrstream}}
{{dsc inc | cpp/io/strstream/dsc freeze | ostrstream}}
{{dsc inc | cpp/io/strstream/dsc pcount | ostrstream}}
{{dsc end}}

{{cpp/io/basic_ostream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/ostrstream]]
[[es:cpp/io/ostrstream]]
[[fr:cpp/io/ostrstream]]
[[it:cpp/io/ostrstream]]
[[ja:cpp/io/ostrstream]]
[[pt:cpp/io/ostrstream]]
[[ru:cpp/io/ostrstream]]
[[zh:cpp/io/ostrstream]]</text>
      <sha1>79rupcjmt8rnrs628ng519de3oiu6xv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ostrstream/freeze</title>
    <ns>0</ns>
    <id>9724</id>
    <revision>
      <id>63936</id>
      <parentid>50868</parentid>
      <timestamp>2013-08-01T15:42:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="51">{{include page|cpp/io/strstream/freeze|ostrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ostrstream/ostrstream</title>
    <ns>0</ns>
    <id>12951</id>
    <revision>
      <id>65182</id>
      <parentid>65179</parentid>
      <timestamp>2013-09-04T17:15:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+openmode in params</comment>
      <text xml:space="preserve" bytes="2351">{{cpp/io/ostrstream/title | ostrstream}}
{{cpp/io/ostrstream/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
ostrstream();
}}
{{dcl | num=2 | 1=
ostrstream(char* s, int n, std::ios_base::openmode mode = std::ios_base::out);
}}
{{dcl end}}

Constructs new output strstream and its underlying {{lc|std::strstreambuf}}.

@1@ Default-constructs the underlying {{lc|std::strstreambuf}}, which creates a dynamically growing buffer, and initializes the base class with the address of the strstreambuf member.

@2@ Initialized the base class with the address of the underlying {{lc|std::strstreambuf}} member, which is initialized in one of the two possible ways, both of which write to user-provided fixed-size array:
:@a@ if the {{tt|app}} bit is not set in {{tt|mode}}, constructs the buffer by calling {{c|strstreambuf(s, n, s)}}. The behavior is undefined if there are less than {{tt|n}} elements in the array whose first element is pointed to by {{tt|s}}
:@b@ if the {{tt|app}} bit is set in {{tt|mode}}, constructs the buffer by calling {{c|strstreambuf(s, n, s + std::strlen(s))}}. The behavior is undefined if there are less than {{tt|n}} elements in the array whose first element is pointed to by {{tt|s}} or if the array does not contain a valid null-terminated character sequence.

===Parameters===
{{par begin}}
{{par | s | char array to use as the output buffer}}
{{par | n | size of the array to be used as the output buffer}}
{{par | mode | specifies stream open mode. It is a bitmask type, the following constants are defined (although only {{tt|app}} is used): 
{{cpp/io/ios_base/openmode consts}} }}
{{par end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;strstream&gt;

int main()
{
    std::ostrstream s1; // dynamic buffer
    s1 &lt;&lt; 1 &lt;&lt; ' ' &lt;&lt; 3.14 &lt;&lt; &quot; example\n&quot; &lt;&lt; std::ends;
    std::cout &lt;&lt; s1.str();
    s1.freeze(false);

    char arr[15] = &quot;Hello&quot;;

    std::ostrstream s2(arr, sizeof arr, std::ios_base::app);
    s2 &lt;&lt; &quot;, world!&quot; &lt;&lt; std::ends;
    std::cout &lt;&lt; s2.str() &lt;&lt; '\n';
    std::cout &lt;&lt; arr &lt;&lt; '\n'; // streams use the provided arrays
}
 | output=
1 3.14 example
Hello, world!
Hello, world!
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstreambuf/dsc strstreambuf}}
{{dsc inc | cpp/io/strstream/dsc constructor | istrstream}}
{{dsc inc | cpp/io/strstream/dsc constructor | strstream}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ostrstream/pcount</title>
    <ns>0</ns>
    <id>9721</id>
    <revision>
      <id>63935</id>
      <parentid>50869</parentid>
      <timestamp>2013-08-01T15:42:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="51">{{include page|cpp/io/strstream/pcount|ostrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ostrstream/rdbuf</title>
    <ns>0</ns>
    <id>9731</id>
    <revision>
      <id>63934</id>
      <parentid>50870</parentid>
      <timestamp>2013-08-01T15:42:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="50">{{include page|cpp/io/strstream/rdbuf|ostrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ostrstream/str</title>
    <ns>0</ns>
    <id>9726</id>
    <revision>
      <id>63933</id>
      <parentid>50871</parentid>
      <timestamp>2013-08-01T15:42:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="48">{{include page|cpp/io/strstream/str|ostrstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/ostrstream/~ostrstream</title>
    <ns>0</ns>
    <id>12953</id>
    <revision>
      <id>69157</id>
      <parentid>65183</parentid>
      <timestamp>2014-03-28T17:41:18Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1278">{{cpp/io/ostrstream/title|~ostrstream}}
{{cpp/io/ostrstream/navbar}}
{{dcl begin}}
{{dcl | 1=
virtual ~ostrstream();
}}
{{dcl end}}

Destroys a {{tt|std::ostrstream}} object, which also destroys the member {{lc|std::strstreambuf}}, which may call the deallocation function if the underlying buffer was dynamically-allocated and not frozen.

===Parameters===
(none)

===Notes===
If {{lc|str()}} was called on a dynamic ostrstream and {{rlp|freeze|freeze(false)}} was not called after that, this destructor leaks memory.

===Example===
{{example
 | 
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    {
        std::ostrstream s; // dynamic buffer 
        s &lt;&lt; 1.23;
        std::cout &lt;&lt; s.str() &lt;&lt; '\n';
        s.freeze(false);
    } // destructor called, buffer deallocated 

    {
        std::ostrstream s;
        s &lt;&lt; 1.23;
        std::cout &lt;&lt; s.str() &lt;&lt; '\n';
//        buf.freeze(false);
    } // destructor called, memory leaked
}
 | output=
1.23
1.23
}}

[[de:cpp/io/ostrstream/~ostrstream]]
[[es:cpp/io/ostrstream/~ostrstream]]
[[fr:cpp/io/ostrstream/~ostrstream]]
[[it:cpp/io/ostrstream/~ostrstream]]
[[ja:cpp/io/ostrstream/~ostrstream]]
[[pt:cpp/io/ostrstream/~ostrstream]]
[[ru:cpp/io/ostrstream/~ostrstream]]
[[zh:cpp/io/ostrstream/~ostrstream]]</text>
      <sha1>ahc7ve4ub3rtn5m3x7wcfi6clly1rp3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/streamoff</title>
    <ns>0</ns>
    <id>4792</id>
    <revision>
      <id>64730</id>
      <parentid>64729</parentid>
      <timestamp>2013-08-26T14:22:31Z</timestamp>
      <contributor>
        <ip>86.149.50.166</ip>
      </contributor>
      <comment>Corrected last correction.</comment>
      <text xml:space="preserve" bytes="1528">{{cpp/title | streamoff}}
{{cpp/io/navbar}}
{{dcl begin}}
{{dcl header | ios}}
{{dcl | 1=
typedef /*unspecified*/ streamoff;
}}
{{dcl end}}

The type {{tt|std::streamoff}} is a signed integral type of sufficient size to represent the maximum possible file size supported by the operating system. Typically, this is a typedef to {{c|long long}}.

It is used to represent offsets from stream positions (values of type {{lc|std::fpos}}). A {{tt|std::streamoff}} value of {{c|-1}} is also used to represent error conditions by some of the I/O library functions.

===Relationship with std::fpos ===
* the difference between two {{lc|std::fpos}} objects is a value of type {{lc|std::streamoff}}

* a value of type {{lc|std::streamoff}} may be added or subtracted from {{lc|std::fpos}} yielding a different {{lc|std::fpos}}.

* a value of type {{lc|std::fpos}} is implicitly convertible to {{lc|std::streamoff}} (the conversion result is the offset from the beginning of the file).

* a value of type {{lc|std::fpos}} is constructible from a value of type {{lc|std::streamoff}}

===See also===
{{dsc begin}}
{{dsc tclass  | cpp/io/fpos | represents absolute position in a stream or a file}}
{{dsc inc | cpp/io/basic_istream/dsc seekg | mem=std::basic_istream}}
{{dsc inc | cpp/io/basic_ostream/dsc seekp | mem=std::basic_ostream}}
{{dsc end}}

[[de:cpp/io/streamoff]]
[[es:cpp/io/streamoff]]
[[fr:cpp/io/streamoff]]
[[it:cpp/io/streamoff]]
[[ja:cpp/io/streamoff]]
[[pt:cpp/io/streamoff]]
[[ru:cpp/io/streamoff]]
[[zh:cpp/io/streamoff]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/streamsize</title>
    <ns>0</ns>
    <id>4793</id>
    <revision>
      <id>57946</id>
      <parentid>49834</parentid>
      <timestamp>2013-06-01T06:04:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1043">{{cpp/title | streamsize}}
{{cpp/io/navbar}}
{{dcl begin}}
{{dcl header | ios}}
{{dcl | 1=
typedef /*unspecified*/ streamsize;
}}
{{dcl end}}

The type {{tt|std::streamsize}} is a signed integral type used to represent the number of characters transferred in an I/O operation or the size of an I/O buffer. It is used as a signed counterpart of {{lc|std::size_t}}, similar to the POSIX type {{tt|ssize_t}}.

Except in the constructors of {{c|std::strstreambuf}}, negative values of {{tt|std::streamsize}} are never used.

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc gcount | mem=std::basic_istream}}
{{dsc inc | cpp/io/basic_istream/dsc ignore | mem=std::basic_istream}}
{{dsc inc | cpp/io/basic_istream/dsc read | mem=std::basic_istream}}
{{dsc inc | cpp/io/basic_ostream/dsc write | mem=std::basic_ostream}}
{{dsc end}}

[[de:cpp/io/streamsize]]
[[es:cpp/io/streamsize]]
[[fr:cpp/io/streamsize]]
[[it:cpp/io/streamsize]]
[[ja:cpp/io/streamsize]]
[[pt:cpp/io/streamsize]]
[[ru:cpp/io/streamsize]]
[[zh:cpp/io/streamsize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstream</title>
    <ns>0</ns>
    <id>4795</id>
    <revision>
      <id>85065</id>
      <parentid>57947</parentid>
      <timestamp>2016-03-24T14:14:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+note on ends</comment>
      <text xml:space="preserve" bytes="1762">{{cpp/title|strstream}}
{{cpp/io/strstream/navbar}}
{{dcl begin}}
{{dcl header|strstream}}
{{dcl | notes={{mark deprecated}} | 1=
class strstream : public std::iostream
}}
{{dcl end}}

The class {{tt|strstream}} implements input and output operations on array-backed streams. It essentially wraps a raw array I/O device implementation ({{c|std::strstreambuf}}) into the higher-level interface of {{lc|std::basic_iostream}}. 

The typical implementation of {{tt|strstream}} holds only one non-derived data member: an object of type {{c|std::strstreambuf}}.

===Notes===
After any call to {{tt|str()}}, a call to {{tt|freeze(false)}} is required to allow the destructor to deallocate the buffer as necessary.

Before any call to {{tt|str()}} that uses the result as a C string, the buffer must be null-terminated, typically with {{lc|std::ends}}.

{{tt|strstream}} has been deprecated since C++98, {{lc|std::stringstream}} and [http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/array.html#array boost::iostreams::array] are the recommended replacements.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/io/strstream/dsc constructor | strstream}}
{{dsc inc | cpp/io/strstream/dsc destructor | strstream}}
{{dsc inc | cpp/io/strstream/dsc rdbuf | strstream}}
{{dsc inc | cpp/io/strstream/dsc str | strstream}}
{{dsc inc | cpp/io/strstream/dsc freeze | strstream}}
{{dsc inc | cpp/io/strstream/dsc pcount | strstream}}
{{dsc end}}

{{cpp/io/basic_istream/inherit}}
{{cpp/io/basic_ostream/inherit}}
{{cpp/io/basic_ios/inherit}}
{{cpp/io/ios_base/inherit}}

[[de:cpp/io/strstream]]
[[es:cpp/io/strstream]]
[[fr:cpp/io/strstream]]
[[it:cpp/io/strstream]]
[[ja:cpp/io/strstream]]
[[pt:cpp/io/strstream]]
[[ru:cpp/io/strstream]]
[[zh:cpp/io/strstream]]</text>
      <sha1>n139bzxuhi23s3j0yi3ctx87c1d3id8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstream/freeze</title>
    <ns>0</ns>
    <id>9723</id>
    <revision>
      <id>63932</id>
      <parentid>50872</parentid>
      <timestamp>2013-08-01T15:42:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="50">{{include page|cpp/io/strstream/freeze|strstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstream/pcount</title>
    <ns>0</ns>
    <id>9720</id>
    <revision>
      <id>63931</id>
      <parentid>50873</parentid>
      <timestamp>2013-08-01T15:42:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="50">{{include page|cpp/io/strstream/pcount|strstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstream/rdbuf</title>
    <ns>0</ns>
    <id>9730</id>
    <revision>
      <id>63930</id>
      <parentid>50874</parentid>
      <timestamp>2013-08-01T15:42:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="49">{{include page|cpp/io/strstream/rdbuf|strstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstream/str</title>
    <ns>0</ns>
    <id>9728</id>
    <revision>
      <id>63929</id>
      <parentid>50875</parentid>
      <timestamp>2013-08-01T15:42:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="47">{{include page|cpp/io/strstream/str|strstream}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstream/strstream</title>
    <ns>0</ns>
    <id>12952</id>
    <revision>
      <id>69158</id>
      <parentid>65181</parentid>
      <timestamp>2014-03-28T17:43:42Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2846">{{cpp/io/strstream/title | strstream}}
{{cpp/io/strstream/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
strstream();
}}
{{dcl | num=2 | 1=
strstream(char* s, int n, std::ios_base::openmode mode
                           = std::ios_base::in {{!}} std::ios_base::out);
}}
{{dcl end}}

Constructs new input/output strstream and its underlying {{lc|std::strstreambuf}}.

@1@ Default-constructs the underlying {{lc|std::strstreambuf}}, which creates a dynamically growing buffer, and initializes the base class with the address of the strstreambuf member.

@2@ Initialized the base class with the address of the underlying {{lc|std::strstreambuf}} member, which is initialized in one of the two possible ways, both of which use a user-provided fixed-size array:
:@a@ if the {{tt|app}} bit is not set in {{tt|mode}}, constructs the buffer by calling {{c|strstreambuf(s, n, s)}}. The behavior is undefined if there are less than {{tt|n}} elements in the array whose first element is pointed to by {{tt|s}}
:@b@ if the {{tt|app}} bit is set in {{tt|mode}}, constructs the buffer by calling {{c|strstreambuf(s, n, s + std::strlen(s))}}. The behavior is undefined if there are less than {{tt|n}} elements in the array whose first element is pointed to by {{tt|s}} or if the array does not contain a valid null-terminated character sequence.

===Parameters===
{{par begin}}
{{par | s | char array to use as the output buffer}}
{{par | n | size of the array to be used for output}}
{{par | mode | specifies stream open mode. It is a bitmask type, the following constants are defined (although only {{tt|app}} is used): 
{{cpp/io/ios_base/openmode consts}} }}
{{par end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;strstream&gt;
#include &lt;string&gt;

int main()
{
    // dynamic buffer
    std::strstream s1; // dynamic buffer
    s1 &lt;&lt; 1 &lt;&lt; ' ' &lt;&lt; 3.14 &lt;&lt; &quot; example&quot; &lt;&lt; std::ends;
    std::cout &lt;&lt; &quot;buffer holds '&quot; &lt;&lt; s1.str() &lt;&lt; &quot;'\n&quot;;
    s1.freeze(false);

    int n; double d;
    std::string w;
    s1 &gt;&gt; n &gt;&gt; d &gt;&gt; w;
    std::cout &lt;&lt; &quot;Read back: n = &quot; &lt;&lt; n
              &lt;&lt; &quot; d = &quot; &lt;&lt; d
              &lt;&lt; &quot; w = '&quot; &lt;&lt; w &lt;&lt; &quot;'\n&quot;;

    // static buffer
    char arr[20] = &quot;-1 -3.14 &quot;;
    std::strstream s2(arr, sizeof arr, std::ios_base::app);
    s2 &lt;&lt; &quot;another&quot; &lt;&lt; std::ends;
    std::cout &lt;&lt; &quot;buffer holds: '&quot; &lt;&lt; s2.str() &lt;&lt; &quot;'\n&quot;;
    s2 &gt;&gt; n &gt;&gt; d &gt;&gt; w;
    std::cout &lt;&lt; &quot;Read back: n = &quot; &lt;&lt; n
              &lt;&lt; &quot; d = &quot; &lt;&lt; d
              &lt;&lt; &quot; w = '&quot; &lt;&lt; w &lt;&lt; &quot;'\n&quot;;
}
 | output=
buffer holds '1 3.14 example'
Read back: n = 1 d = 3.14 w = 'example'
buffer holds: '-1 -3.14 another'
Read back: n = -1 d = -3.14 w = 'another'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstreambuf/dsc strstreambuf}}
{{dsc inc | cpp/io/strstream/dsc constructor | istrstream}}
{{dsc inc | cpp/io/strstream/dsc constructor | ostrstream}}
{{dsc end}}</text>
      <sha1>rgdzqromlmuq813tncffypknxcazcyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstream/~strstream</title>
    <ns>0</ns>
    <id>12884</id>
    <revision>
      <id>85060</id>
      <parentid>64185</parentid>
      <timestamp>2016-03-24T14:04:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missing ends</comment>
      <text xml:space="preserve" bytes="1464">{{cpp/io/strstream/title|~strstream}}
{{cpp/io/strstream/navbar}}
{{dcl begin}}
{{dcl | 1=
virtual ~strstream();
}}
{{dcl end}}

Destroys a {{tt|std::strstream}} object, which also destroys the member {{lc|std::strstreambuf}}, which may call the deallocation function if the underlying buffer was dynamically-allocated and not frozen.

===Parameters===
(none)

===Notes===
If {{lc|str()}} was called on a dynamic strstream and {{rlp|freeze|freeze(false)}} was not called after that, this destructor leaks memory.

===Example===
{{example
 | 
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    {
        std::ostrstream s; // dynamic buffer 
        s &lt;&lt; 1.23 &lt;&lt; std::ends;
        std::cout &lt;&lt; s.str() &lt;&lt; '\n';
        s.freeze(false);
    } // destructor called, buffer deallocated 

    {
        std::ostrstream s;
        s &lt;&lt; 1.23 &lt;&lt; std::ends;
        std::cout &lt;&lt; s.str() &lt;&lt; '\n';
//        buf.freeze(false);
    } // destructor called, memory leaked

    {
        std::istrstream s(&quot;1.23&quot;); // constant buffer
        double d;
        s &gt;&gt; d;
        std::cout &lt;&lt; d &lt;&lt; '\n';
    } // destructor called, nothing to deallocate
}
 | output=
1.23
1.23
1.23
}}

[[de:cpp/io/strstream/~strstream]]
[[es:cpp/io/strstream/~strstream]]
[[fr:cpp/io/strstream/~strstream]]
[[it:cpp/io/strstream/~strstream]]
[[ja:cpp/io/strstream/~strstream]]
[[pt:cpp/io/strstream/~strstream]]
[[ru:cpp/io/strstream/~strstream]]
[[zh:cpp/io/strstream/~strstream]]</text>
      <sha1>brwyl32ynu89hdl06bn13kwbzkab1ze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf</title>
    <ns>0</ns>
    <id>4373</id>
    <revision>
      <id>64974</id>
      <parentid>57950</parentid>
      <timestamp>2013-08-28T19:13:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>wording, mention where the start of the buffer lives</comment>
      <text xml:space="preserve" bytes="2323">{{cpp/title|strstreambuf}}
{{cpp/io/strstreambuf/navbar}}
{{ddcl | header=strstream | notes={{mark deprecated}} | 1=
class strstreambuf : public std::basic_streambuf&lt;char&gt;
}}

{{tt|std::strstreambuf}} is a {{lc|std::basic_streambuf}} whose associated character sequence is a character array, which may be constant (e.g. a string literal), modifyable but not dynamic (e.g. a stack-allocated array), or dynamic, in which case the {{tt|std::strstreambuf}} may be allowed to reallocate the array as necessary to accomodate output (e.g. by calling {{c|delete[]}} and {{c|new[]}} or user-provided functions).

Typical implementation of a {{tt|std::strstreambuf}} holds four private data members:

@1@ buffer state, a bitmask type which can represent any combination of the four values &quot;allocated&quot; (destructor will deallocate), &quot;constant&quot; (output not allowed), &quot;dynamic&quot; (output may reallocate), or &quot;frozen&quot; (deallocation and reallocation are not allowed)
@2@ allocated buffer size (the beginning of the buffer does not need a special data member, it may be stored in the inherited pointer {{lc|std::streambuf::eback|eback()}})
@3@ pointer to user-provided allocation function
@4@ pointer to user-provided deallocation function.

===Notes===
After any call to {{tt|str()}} on a stream with a dynamic buffer, a call to {{tt|freeze(false)}} is required to allow the {{tt|strstreambuf}} destructor to deallocate the buffer when necessary.

===Member functions===
{{dsc begin}}
{{dsc h1 | Public member functions}}
{{dsc inc | cpp/io/strstreambuf/dsc strstreambuf}}
{{dsc inc | cpp/io/strstreambuf/dsc ~strstreambuf}}
{{dsc inc | cpp/io/strstreambuf/dsc freeze}}
{{dsc inc | cpp/io/strstreambuf/dsc str}}
{{dsc inc | cpp/io/strstreambuf/dsc pcount}}
{{dsc h1 | Protected member functions}}
{{dsc inc | cpp/io/strstreambuf/dsc underflow}}
{{dsc inc | cpp/io/strstreambuf/dsc pbackfail}}
{{dsc inc | cpp/io/strstreambuf/dsc overflow}}
{{dsc inc | cpp/io/strstreambuf/dsc setbuf}}
{{dsc inc | cpp/io/strstreambuf/dsc seekoff}}
{{dsc inc | cpp/io/strstreambuf/dsc seekpos}}
{{dsc end}}

{{cpp/io/basic_streambuf/inherit}}

[[de:cpp/io/strstreambuf]]
[[es:cpp/io/strstreambuf]]
[[fr:cpp/io/strstreambuf]]
[[it:cpp/io/strstreambuf]]
[[ja:cpp/io/strstreambuf]]
[[pt:cpp/io/strstreambuf]]
[[ru:cpp/io/strstreambuf]]
[[zh:cpp/io/strstreambuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/freeze</title>
    <ns>0</ns>
    <id>12927</id>
    <revision>
      <id>85057</id>
      <parentid>78112</parentid>
      <timestamp>2016-03-24T13:57:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>ends-correctness</comment>
      <text xml:space="preserve" bytes="3041">{{cpp/io/strstreambuf/title|freeze}}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |
void freeze( bool freezefl {{=}} true );
}}

If the buffer uses dynamic allocation, sets the frozen status of the stream to {{tt|freezefl}}.

While the stream is frozen, {{lc|overflow()}} will not reallocate the buffer and the {{lc|~strstreambuf|destructor}} will not deallocate the buffer (thereby causing a memory leak). 

===Parameters===
{{par begin}}
{{par | freezefl | new value to set the freeze status to}}
{{par end}}


===Return value===
(none)

===Notes===
Every call to {{lc|str()}} freezes the stream to preserve the validity of the pointer it returns. To allow the destructor to deallocate the buffer, {{lc|freeze|freeze(false)}} needs to be called explicitly.

===Example===
{{example
 | In this example, initial allocation of the underlying array was for 16 bytes
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;
 
int main()
{
    {
        std::strstream dyn; // dynamically-allocated read/write buffer
        dyn &lt;&lt; &quot;Test: &quot; &lt;&lt; 1.23; // note: no std::ends to demonstrate append behavior
        std::cout &lt;&lt; &quot;dynamic buffer holds &quot; &lt;&lt; dyn.pcount() &lt;&lt; &quot; characters: '&quot;;
        std::cout.write(dyn.str(), dyn.pcount()) &lt;&lt; &quot;'\n&quot;;
        // the buffer is now frozen, further output will not make the buffer grow
        dyn &lt;&lt; &quot;more output, hopefully enough to run out of the allocated space&quot; &lt;&lt; std::ends;
        std::cout &lt;&lt; &quot;After more output, it holds &quot;
                  &lt;&lt; dyn.pcount() &lt;&lt; &quot; characters: '&quot; &lt;&lt; dyn.str() &lt;&lt; &quot;'\n&quot;;
        dyn.freeze(false); // unfreeze before destructor
    } // memory freed by the destructor
 
    {
        char arr[20];
        std::ostrstream st(arr, sizeof arr); // fixed-size buffer
        st &lt;&lt; 1.23; // note: no std::ends to demonstrate append behavior
        std::cout &lt;&lt; &quot;static buffer holds &quot;
                  &lt;&lt; st.pcount() &lt;&lt; &quot; characters: '&quot;;
        std::cout.write(st.str(), st.pcount());
        std::cout &lt;&lt; &quot;'\n&quot;;
        st &lt;&lt; &quot;more output, hopefully enough to run out of the allocated space&quot; &lt;&lt; std::ends;
        std::cout &lt;&lt; &quot;static buffer holds &quot;
                  &lt;&lt; st.pcount() &lt;&lt; &quot; characters: '&quot;;
        std::cout.write(st.str(), st.pcount());
        std::cout &lt;&lt; &quot;'\n&quot;;
    } // nothing to deallocate, no need to unfreeze,
}
 | output=
dynamic buffer holds 10 characters: 'Test: 1.23'
After more output, it holds 16 characters: 'Test: 1.23more o'
static buffer holds 4 characters: '1.23'
static buffer holds 20 characters: '1.23more output, hop'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstream/dsc freeze | strstream}}
{{dsc inc | cpp/io/strstream/dsc freeze | ostrstream}}
{{dsc inc | cpp/io/strstreambuf/dsc ~strstreambuf}}
{{dsc inc | cpp/io/strstreambuf/dsc overflow}}
{{dsc end}}

[[de:cpp/io/strstreambuf/freeze]]
[[es:cpp/io/strstreambuf/freeze]]
[[fr:cpp/io/strstreambuf/freeze]]
[[it:cpp/io/strstreambuf/freeze]]
[[ja:cpp/io/strstreambuf/freeze]]
[[pt:cpp/io/strstreambuf/freeze]]
[[ru:cpp/io/strstreambuf/freeze]]
[[zh:cpp/io/strstreambuf/freeze]]</text>
      <sha1>t2vwgvbvja30mhfh0t1x9izpbjlrfhy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/overflow</title>
    <ns>0</ns>
    <id>12968</id>
    <revision>
      <id>65329</id>
      <parentid>65328</parentid>
      <timestamp>2013-09-09T15:15:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="3079">{{cpp/io/strstreambuf/title | overflow }}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |1=
protected:
virtual int_type overflow (int_type c = EOF);
}}

Appends the character {{tt|c}} to the put area of the buffer, reallocating if possible.

@1@ If {{tt|c{{==}}EOF}}, does nothing
@2@ Otherwise, if the put area has a write position available ({{c|pptr() &lt; epptr()}}), stores the character as if by {{c|*pptr()++ {{=}} c}}
@3@ Otherwise, if the stream buffer mode is not dynamic or the stream buffer is currently frozen, the function fails and returns {{c|EOF}}
@4@ Otherwise, the function reallocates (or initially allocates) a dynamic array large enough to hold the contents of the current dynamic array (if any) plus at least one additional write position. If a pointer to the allocator function {{tt|palloc}} was used in the constructor, that function is called with {{c|(*palloc)[n]}} where {{tt|n}} is the number of bytes to allocate, otherwise {{c|new char[n]}} is used. If a pointer to the deallocating function {{tt|pfree}} was used in the constructor, that function is called with {{c|(*pfree)(p)}} to deallocate the previous array, if needed, otherwise {{c|delete[] p}} is used. If allocation fails, the function fails and returns {{c|EOF}}. 

===Parameters===
{{par begin}}
{{par | c | the character to store in the put area}}
{{par end}}

===Return value===
If {{c|c{{==}}EOF}}, returns some value other than {{c|EOF}}. Otherwise, returns {{c|(unsigned char)(c)}} on success, {{lc|EOF}} on failure.

===Example===
{{example
 |
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::strstreambuf
{
    int_type overflow(int_type c) 
    {
        std::cout &lt;&lt; &quot;Before overflow(): size of the put area is &quot; &lt;&lt; epptr()-pbase()
                  &lt;&lt; &quot; with &quot; &lt;&lt; epptr()-pptr() &lt;&lt; &quot; write positions available\n&quot;;
        int_type rc = std::strstreambuf::overflow(c);
        std::cout &lt;&lt; &quot;After overflow(): size of the put area is &quot; &lt;&lt; epptr()-pbase()
                  &lt;&lt; &quot; with &quot; &lt;&lt; epptr()-pptr() &lt;&lt; &quot; write positions available\n&quot;;
        return rc;
    }
};

int main()
{
    mybuf sbuf; // read-write dynamic strstreambuf
    std::iostream stream(&amp;sbuf);

    stream &lt;&lt; &quot;Sufficiently long string to overflow the initial allocation, at least &quot;
           &lt;&lt; &quot; on some systems.&quot;;
}
 | p=true
 | output=
Before overflow(): size of the put area is 16 with 0 write positions available
After overflow(): size of the put area is 32 with 15 write positions available
Before overflow(): size of the put area is 32 with 0 write positions available
After overflow(): size of the put area is 64 with 31 write positions available
Before overflow(): size of the put area is 64 with 0 write positions available
After overflow(): size of the put area is 128 with 63 write positions available
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc overflow}}
{{dsc inc | cpp/io/basic_stringbuf/dsc overflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc overflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputc}}
{{dsc inc | cpp/io/basic_ostream/dsc put}}
{{dsc end}}</text>
      <sha1>qdyh5wqdw3dwdt89vog6l7lgmq01r4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/pbackfail</title>
    <ns>0</ns>
    <id>9697</id>
    <revision>
      <id>63928</id>
      <parentid>57951</parentid>
      <timestamp>2013-08-01T15:42:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="2286">{{cpp/io/strstreambuf/title | pbackfail }}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |1=
protected:
virtual int_type pbackfail( int_type c = EOF );
}}

This protected virtual function is called by the public functions {{l2tt|cpp/io/basic_streambuf/sungetc}} and {{l2tt|cpp/io/basic_streambuf/sputbackc}} (which, in turn, are called by {{l2tt|cpp/io/basic_istream/unget}} and {{l2tt|cpp/io/basic_istream/putback}}). 

@1@ The caller is requesting that the get area is backed up by one character ({{tt|pbackfail()}} is called with no arguments or with {{lc|EOF}} as the argument)
:@a@ First, checks if there is a putback position, and if there really isn't, fails. (strstreambuf has no external character source to re-read)
:@b@ If the caller was wrong and the putback position is in fact available, simply decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}, e.g. by calling {{c|gbump(-1)}}. 
@2@ The caller attempts to putback a different character from the one retrieved earlier ({{tt|pbackfail()}} is called with the character that needs to be put back), in which case
:@a@ First, checks if there is a putback position, and if there isn't, fails.
:@b@ Then checks what character is in the putback position. If the character held there is already equal to {{tt|(char)c}}, then simply decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}.
:@c@ Otherwise, if the buffer is unmodifiable (this strstreambuf was constructed with a string literal or some other {{c|const}} array), fails.
:@d@ Otherwise, decrements {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}} and writes {{tt|c}} to the location pointed to gptr() after adjustment.

===Parameters===
{{par begin}}
{{par | c | the character to put back, or Traits::eof() to indicate that backing up of the get area is requested}}
{{par end}}

===Return value===
{{c|c}} on success except if {{tt|c}} was {{lc|EOF}}, in which case unspecified value other than {{lc|EOF}} is returned.

{{lc|EOF}} on failure.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pbackfail}}
{{dsc inc | cpp/io/basic_streambuf/dsc sungetc}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputbackc}}
{{dsc inc | cpp/io/basic_istream/dsc unget}}
{{dsc inc | cpp/io/basic_istream/dsc putback}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/pcount</title>
    <ns>0</ns>
    <id>12916</id>
    <revision>
      <id>85056</id>
      <parentid>64748</parentid>
      <timestamp>2016-03-24T13:52:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missing ends here too</comment>
      <text xml:space="preserve" bytes="1952">{{cpp/io/strstreambuf/title|pcount}}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |
int pcount() const;
}}


Returns the number of characters written to the output sequence.

If the next pointer for the put area ({{lc|std::streambuf::pptr()}}) is a null pointer, returns zero.

Otherwise, returns the next pointer in the put area minus the beginning pointer in the put area, that is {{c|pptr() - pbase()}}

===Parameters===
(none)

===Return value===
The number of characters written to the put area.

===Example===
{{example
 | 
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::strstream dyn; // dynamically-allocated output buffer
    dyn &lt;&lt; &quot;Test: &quot; &lt;&lt; 1.23 &lt;&lt; std::ends;
    std::strstreambuf* buf = dyn.rdbuf();
    std::cout &lt;&lt; &quot;The size of the output is &quot;
              &lt;&lt; buf-&gt;pcount() // or just buf.pcount()
              &lt;&lt; &quot; and it holds \&quot;&quot; &lt;&lt; dyn.str() &lt;&lt; &quot;\&quot;\n&quot;;
    dyn.freeze(false); // after calling .str() on a dynamic strstream

    char arr[10];
    std::ostrstream user(arr, 10); // user-provided output buffer
    buf = user.rdbuf();
    user &lt;&lt; 1.23; // note: no std::ends
    std::cout.write(arr, buf-&gt;pcount()); // or just user.pcount()
    std::cout &lt;&lt; '\n';

    std::istrstream lit(&quot;1 2 3&quot;); // read-only fixed-size buffer
    buf = lit.rdbuf();
    // istrstream has no member pcount(), so lit.pcount() won't work
    std::cout &lt;&lt; &quot;Input-only pcount() = &quot; &lt;&lt; buf-&gt;pcount() &lt;&lt; '\n';
}
 | output=
The size of the output is 11 and it holds &quot;Test: 1.23&quot;
1.23
Input-only pcount() = 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstream/dsc pcount | strstream}}
{{dsc inc | cpp/io/strstream/dsc pcount | ostrstream}}
{{dsc end}}

[[de:cpp/io/strstreambuf/pcount]]
[[es:cpp/io/strstreambuf/pcount]]
[[fr:cpp/io/strstreambuf/pcount]]
[[it:cpp/io/strstreambuf/pcount]]
[[ja:cpp/io/strstreambuf/pcount]]
[[pt:cpp/io/strstreambuf/pcount]]
[[ru:cpp/io/strstreambuf/pcount]]
[[zh:cpp/io/strstreambuf/pcount]]</text>
      <sha1>j9egehc0az1mk24o2geuo6l3r39zhbg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/seekoff</title>
    <ns>0</ns>
    <id>12971</id>
    <revision>
      <id>65341</id>
      <timestamp>2013-09-09T19:44:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="4892">{{cpp/io/strstreambuf/title | seekoff }}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |1=
protected:
virtual pos_type seekoff(off_type off,
                         ios_base::seekdir way,
                         ios_base::openmode which = ios_base::in {{!}} ios_base::out);}}

Repositions {{lc|std::basic_streambuf::gptr}} and/or {{lc|std::basic_streambuf::pptr}}, if possible, to the position that corresponds to exactly {{tt|off}} characters from beginning, end, or current position of the get and/or put area of the buffer.

* If {{tt|which}} includes {{tt|ios_base::in}} and this buffer is open for reading, then repositions the read pointer {{lc|std::basic_streambuf::gptr}} inside the get area as described below
* If {{tt|which}} includes {{tt|ios_base::out}} and this buffer is open for writing, then repositions the write pointer {{lc|std::basic_streambuf::pptr}} inside the put area as described below
* If {{tt|which}} includes both  {{tt|ios_base::in}} and  {{tt|ios_base::out}} and the buffer is open for both reading and writing, and {{tt|when}} is either {{c|ios_base::beg}} or {{c|ios_base::end}}, then repositions both read and write pointers as described below.
* Otherwise, this function fails.

If the pointer (either {{tt|gptr}} or {{tt|pptr}} or both) is repositioned, it is done as follows:
@1@ If the pointer to be repositioned is a null pointer and the new offset {{tt|newoff}} would be non-zero, this function fails.
@2@ The new pointer offset {{tt|newoff}} of type {{tt|off_type}} is determined
:@a@ if {{c|way {{==}} ios_base::beg}}, then {{tt|newoff}} is zero
:@b@ if {{c|way {{==}} ios_base::cur}}, then {{tt|newoff}} is the current position of the pointer ({{c|gptr()-eback()}} or {{c|pptr()-pbase()}})
:@c@ if {{c|way {{==}} ios_base::end}}, then {{tt|newoff}} is the length of the entire initialized part of the buffer (if overallocation is used, the high watermark pointer minus the beginning pointer)
@3@ If {{c|newoff + off}} is negative or out of bounds of the initialized part of the buffer, the function fails
@4@ Otherwise, the pointer is assigned as if by {{c|gptr() {{=}} eback() + newoff + off}} or {{c|pptr() {{=}} pbase() + newoff + off}}

===Parameters===
{{par begin}}
{{par | off | relative position to set the next pointer(s) to}}
{{par | dir | defines base position to apply the relative offset to. It can be one of the following constants:
{{cpp/io/ios_base/seekdir consts}} }}
{{par | which | defines whether the input sequences, the output sequence, or both are affected. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Return value===
{{c|pos_type(newoff)}} on success, {{c|pos_type(off_type(-1))}} on failure and if pos_type cannot represent the resulting stream position.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;strstream&gt;

int main()
{
    char a[] = &quot;123&quot;;
    std::strstream ss(a, sizeof a); // in/out
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    // absolute positioning both pointers
    ss.rdbuf()-&gt;pubseekoff(1, std::ios_base::beg); // move both forward
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    // try to move both pointers 1 forward from current position
    if(-1 == ss.rdbuf()-&gt;pubseekoff(1, std::ios_base::cur))
        std::cout &lt;&lt; &quot;moving both pointers from current position failed\n&quot;;
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    // move the write pointer 1 forward, but not the read pointer
    // can also be called as ss.seekp(1, std::ios_base::cur);
    ss.rdbuf()-&gt;pubseekoff(1, std::ios_base::cur, std::ios_base::out);
    std::cout &lt;&lt; &quot;put pos = &quot; &lt;&lt; ss.tellp()
              &lt;&lt; &quot; get pos = &quot; &lt;&lt; ss.tellg() &lt;&lt; '\n';

    ss &lt;&lt; 'a'; // write at put position
    std::cout &lt;&lt; &quot;Wrote 'a' at put position, the buffer is now: '&quot;;
    std::cout.write(a, sizeof a);
    std::cout &lt;&lt; &quot;'\n&quot;;
    char ch;
    ss &gt;&gt; ch;
    std::cout &lt;&lt; &quot;reading at get position gives '&quot; &lt;&lt; ch &lt;&lt; &quot;'\n&quot;;
}
 | output=
put pos = 0 get pos = 0
put pos = 1 get pos = 1
moving both pointers from current position failed
put pos = 1 get pos = 1
put pos = 2 get pos = 1
Wrote 'a' at put position, the buffer is now: '12a'
reading at get position gives '2'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekpos}}
{{dsc inc | cpp/io/basic_streambuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_stringbuf/dsc seekoff}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekoff}}
{{dsc end}}

[[de:cpp/io/strstreambuf/seekoff]]
[[es:cpp/io/strstreambuf/seekoff]]
[[fr:cpp/io/strstreambuf/seekoff]]
[[it:cpp/io/strstreambuf/seekoff]]
[[ja:cpp/io/strstreambuf/seekoff]]
[[pt:cpp/io/strstreambuf/seekoff]]
[[ru:cpp/io/strstreambuf/seekoff]]
[[zh:cpp/io/strstreambuf/seekoff]]</text>
      <sha1>427unszzj2779s9nd4oouox5zeunihz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/seekpos</title>
    <ns>0</ns>
    <id>12970</id>
    <revision>
      <id>65336</id>
      <timestamp>2013-09-09T18:47:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3399">{{cpp/io/strstreambuf/title|seekpos}}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |1=
protected:
virtual pos_type seekpos(pos_type sp,
                         std::ios_base::openmode which = std::ios_base::in {{!}} std::ios_base::out );
}}

Repositions {{lc|std::basic_streambuf::gptr}} and/or {{lc|std::basic_streambuf::pptr}}, if possible, to the position indicated by {{tt|sp}}

If {{lc|std::ios_base::in}} is set in {{tt|which}}, attempts to reposition {{tt|gptr()}} (the next pointer in the get area). If {{lc|std::ios_base::out}} is set in {{tt|which}}, attempts to reposition {{tt|pptr()}} (the next pointer in the put area). If neither bit is set in {{tt|which}}, the operation fails.

Each next pointer is repositioned as follows:
@1@ If the next pointer is null, the operation fails
@2@ Otherwise, the new offset {{tt|newoff}} (of type {{tt|off_type}}) is determined by calling {{c|sp.offset()}}. If {{tt|newoff}} is negative, out of bounds of the buffer, or invalid, the operation fails.
@3@ Otherwise, the next pointer is assigned as if by {{c|gptr() {{=}} eback()+newoff}} or {{c|pptr() {{=}} pbase()+newoff}}.


===Parameters===
{{par begin}}
{{par | sp | stream position, such as one obtained by {{lc|seekoff()}} or {{tt|seekpos()}}}}
{{par | which | defines whether the input sequences, the output sequence, or both are affected. It can be one or a combination of the following constants:
{{cpp/io/ios_base/openmode streambuf consts}} }}
{{par end}}

===Return value===
The resultant offset converted to {{tt|pos_type}} on success or {{c|pos_type(off_type(-1))}} on failure.

===Notes===
{{tt|seekpos()}} is called by {{lc|std::basic_streambuf::pubseekpos()}}, which is called by the single-argument versions of {{lc|std::basic_istream::seekg()}} and {{lc|std::basic_ostream::seekp()}}

===Example===
{{example
 |
 | code=
#include &lt;strstream&gt;
#include &lt;cstring&gt;
#include &lt;iostream&gt;

struct mybuf : std::strstreambuf
{
    mybuf(const char* str) : std::strstreambuf(str, std::strlen(str)) {}
    pos_type seekpos(pos_type sp, std::ios_base::openmode which) {
         std::cout &lt;&lt; &quot;Before seekpos(&quot; &lt;&lt; sp &lt;&lt; &quot;), size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
         pos_type rc = std::strstreambuf::seekpos(sp, which);
         std::cout &lt;&lt; &quot;seekpos() returns &quot; &lt;&lt; rc &lt;&lt; &quot;.\nAfter the call, &quot;
                   &lt;&lt; &quot;size of the get area is &quot;
                   &lt;&lt; egptr()-eback() &lt;&lt; &quot; with &quot;
                   &lt;&lt; egptr()-gptr() &lt;&lt; &quot; read positions available\n&quot;;
        return rc;
    }
};

int main()
{
    mybuf buf(&quot;12345&quot;);
    std::iostream stream(&amp;buf);
    stream.seekg(2);
}
 | output=
Before seekpos(2), size of the get area is 5 with 5 read positions available
seekpos() returns 2.
After the call, size of the get area is 5 with 3 read positions available
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubseekpos}}
{{dsc inc | cpp/io/basic_stringbuf/dsc seekpos}}
{{dsc inc | cpp/io/basic_filebuf/dsc seekpos}}
{{dsc inc | cpp/io/strstreambuf/dsc seekoff}}
{{dsc end}}

[[de:cpp/io/strstreambuf/seekpos]]
[[es:cpp/io/strstreambuf/seekpos]]
[[fr:cpp/io/strstreambuf/seekpos]]
[[it:cpp/io/strstreambuf/seekpos]]
[[ja:cpp/io/strstreambuf/seekpos]]
[[pt:cpp/io/strstreambuf/seekpos]]
[[ru:cpp/io/strstreambuf/seekpos]]
[[zh:cpp/io/strstreambuf/seekpos]]</text>
      <sha1>9hpkbh19vya4e3bfzzyhe1951inagoq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/setbuf</title>
    <ns>0</ns>
    <id>12969</id>
    <revision>
      <id>83443</id>
      <parentid>69878</parentid>
      <timestamp>2016-02-09T20:50:22Z</timestamp>
      <contributor>
        <ip>111.69.28.194</ip>
      </contributor>
      <text xml:space="preserve" bytes="1591">{{cpp/io/strstreambuf/title | setbuf }}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |1=
protected:
virtual streambuf&lt;char&gt;* setbuf(char* s, std::streamsize n);
}}

If {{tt|s}} is a null pointer and {{tt|n}} is zero, this function has no effect.

Otherwise, the effect is implementation-defined: some implementations do nothing, while some implementations deallocate the dynamic member array used as the buffer and begin using the user-supplied character array of size {{tt|n}}, whose first element is pointed to by {{tt|s}}.

This function is protected virtual, it may only be called through {{tt|pubsetbuf()}} or from member functions of a user-defined class derived from {{tt|std::strstreambuf}}.

===Parameters===
{{par begin}}
{{par | s | pointer to the first byte in the user-provided buffer}}
{{par | n | the number of bytes in the user-provided buffer}}
{{par end}}

===Return value===
{{c|this}}

===Example===
{{example
 | Implementation test to check if setbuf() is supported on a dynamic strstream (output obtained with Sun Studio)
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    char a[100] = {};
    std::strstream str;
    str.rdbuf()-&gt;pubsetbuf(a, sizeof a);
    str &lt;&lt; &quot;Test string&quot; &lt;&lt; std::ends;
    std::cout &lt;&lt; &quot;user-provided buffer holds '&quot; &lt;&lt; a &lt;&lt; &quot;'\n&quot;;
}
 | p=true
 | output=
user-provided buffer holds 'Test string'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc pubsetbuf}}
{{dsc inc | cpp/io/basic_streambuf/dsc setbuf}}
{{dsc inc | cpp/io/basic_stringbuf/dsc setbuf}}
{{dsc inc | cpp/io/basic_filebuf/dsc setbuf}}
{{dsc end}}</text>
      <sha1>cl5bsazzv95t04kszxvgymxv2jsq7n0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/str</title>
    <ns>0</ns>
    <id>12917</id>
    <revision>
      <id>85055</id>
      <parentid>64754</parentid>
      <timestamp>2016-03-24T13:50:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>one missing ends here</comment>
      <text xml:space="preserve" bytes="2444">{{cpp/io/strstreambuf/title|str}}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |
char* str() const;
}}

Calls {{lc|freeze()}}, then returns a copy of start pointer of the get area, {{lc|std::streambuf::eback()}}.

The start of the get area, for all writeable {{tt|std::strstreambuf}} objects constructed through the interface provided by {{lc|std::strstream}}, is also the start of the put area.

===Parameters===
(none)

===Return value===
A copy of {{lc|eback()}}, which may be a null pointer.

===Notes===
This function is typically called through the {{lc|std::strstream}} interface.

The call to {{lc|freeze()}} guarantees that the returned pointer remains valid until the next explicit call to {{lc|freeze(false)}}: otherwise (on a dynamic buffer) any output operation could trigger buffer reallocation which would invalidate the pointer. It also causes a memory leak in the destructor of {{tt|std::strstreambuf}}, unless {{lc|freeze(false)}} is called before the buffer (or, more commonly, the {{c|std::strstream}} that manages it) is destroyed.

===Example===
{{example
 | 
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::strstream dyn; // dynamically-allocated read/write buffer
    dyn &lt;&lt; &quot;Test: &quot; &lt;&lt; 1.23 &lt;&lt; std::ends;
    std::strstreambuf* buf = dyn.rdbuf();
    std::cout &lt;&lt; &quot;R/W buffer holds \&quot;&quot; &lt;&lt; buf-&gt;str() // or dyn.str()
              &lt;&lt; &quot;\&quot;\n&quot;;
    dyn.freeze(false); // after calling .str() on a dynamic strstream

    char arr[10];
    std::ostrstream user(arr, 10); // fixed-size write-only buffer
    buf = user.rdbuf();
    user &lt;&lt; 1.23 &lt;&lt; std::ends;
    std::cout &lt;&lt; &quot;Write-only buffer holds \&quot;&quot; &lt;&lt; buf-&gt;str() // or user.str()
              &lt;&lt; &quot;\&quot;\n&quot;;

    std::istrstream lit(&quot;1 2 3&quot;); // fixed-size read-only buffer
    buf = lit.rdbuf();
    std::cout &lt;&lt; &quot;Read-only buffer holds \&quot;&quot; &lt;&lt; buf-&gt;str() // or lit.str()
              &lt;&lt; &quot;\&quot;\n&quot;;
}
 | output=
R/W buffer holds &quot;Test: 1.23&quot;
Write-only buffer holds &quot;1.23&quot;
Read-only buffer holds &quot;1 2 31 2 3&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/strstream/dsc str | strstream}}
{{dsc inc | cpp/io/strstream/dsc str | ostrstream}}
{{dsc inc | cpp/io/strstream/dsc str | istrstream}}
{{dsc end}}

[[de:cpp/io/strstreambuf/str]]
[[es:cpp/io/strstreambuf/str]]
[[fr:cpp/io/strstreambuf/str]]
[[it:cpp/io/strstreambuf/str]]
[[ja:cpp/io/strstreambuf/str]]
[[pt:cpp/io/strstreambuf/str]]
[[ru:cpp/io/strstreambuf/str]]
[[zh:cpp/io/strstreambuf/str]]</text>
      <sha1>491he0iojcjxdhovs7vkms8q237desp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/strstreambuf</title>
    <ns>0</ns>
    <id>9447</id>
    <revision>
      <id>85059</id>
      <parentid>49838</parentid>
      <timestamp>2016-03-24T14:00:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missing ends</comment>
      <text xml:space="preserve" bytes="4396">{{cpp/io/strstreambuf/title|strstreambuf}}
{{cpp/io/strstreambuf/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
explicit strstreambuf( std::streamsize alsize = 0 );
}}
{{dcl | num=2 | 1=
strstreambuf( void* (*palloc)(std::size_t), void (*pfree)(void*) );
}}
{{dcl | num=3 | 1=
strstreambuf( char* gnext, std::streamsize n, char* pbeg = 0 );
}}
{{dcl | num=4 | 1=
strstreambuf( signed char* gnext, std::streamsize n, signed char* pbeg = 0 );
}}
{{dcl | num=5 | 1=
strstreambuf( unsigned char* gnext, std::streamsize n, unsigned char* pbeg = 0 );
}}
{{dcl | num=6 | 1=
strstreambuf( const char* gnext, std::streamsize n );
}}
{{dcl | num=7 | 1=
strstreambuf( const signed char* gnext, std::streamsize n);
}}
{{dcl | num=8 | 1=
strstreambuf( const unsigned char* gnext, std::streamsize n );
}}
{{dcl end}}

@1@ Constructs a {{tt|std::strstreambuf}} object: initializes the base class by calling the default constructor of {{lc|std::streambuf}}, initializes the buffer state to &quot;dynamic&quot; (the buffer will be allocated as needed), initializes allocated size to the provided {{tt|alsize}}, initializes the allocation and the deallocation functions to null (will use {{c|new[]}} and {{c|delete[]}})

@2@ Constructs a {{tt|std::strstreambuf}} object: initializes the base class by calling the default constructor of {{lc|std::streambuf}}, initializes the buffer state to &quot;dynamic&quot; (the buffer will be allocated as needed), initializes allocated size to unspecified value, initializes the allocation function to {{tt|palloc}} and the deallocation function to {{tt|pfree}}

@3-5@ Constructs a {{tt|std::strstreambuf}} object in following steps:
:@a@ Initializes the base class by calling the default constructor of {{lc|std::streambuf}}
:@b@ Initializes the buffer state to &quot;constant&quot; (the buffer is a user-provided fixed-size buffer)
:@c@ Determines the number of elements in the user-provided array as follows: if {{tt|n}} is greater than zero, {{tt|n}} is used. If {{tt|n}} is zero, {{c|std::strlen(gnext)}} is executed to determine the buffer size. If {{tt|n}} is negative, {{lc|INT_MAX}} is used.
:@d@ Configures the {{lc|std::basic_streambuf}} pointers as follows: If {{tt|pbeg}} is a null pointer, calls {{c|setg(gnext, gnext, gnext + N)}}. If {{tt|pbeg}} is not a null pointer, executes {{c|setg(gnext, gnext, pbeg)}} and {{c|setp(pbeg, pbeg+N)}}, where N is the number of elements in the array as determined earlier.

@6-8@ Same as {{c|strstreambuf((char*)gnext, n)}}, except the &quot;constant&quot; bit is set in the buffer state bitmask (output to this buffer is not allowed)

===Parameters===
{{par begin}}
{{par | alsize | the initial size of the dynamically allocated buffer}}
{{par | palloc | pointer to user-provided allocation function }}
{{par | pfree | pointer to user-provided deallocation function }}
{{par | gnext | pointer to the start of the get area in the user-provided array}}
{{par | pbeg | pointer to the start of the put area in the user-provided array}}
{{par | n | the number of bytes in the get area (if pbeg is null) or in the put area (if pbeg is not null) of the user-provided array}}
{{par end}}

===Notes===
These constructors are typically called by the constructors of {{c|std::strstream}}

===Example===
{{example
 | 
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::strstreambuf dyn; // dynamic
    std::strstream dyn_s; // equivalent stream
    dyn_s &lt;&lt; 1.23 &lt;&lt; std::ends;
    std::cout &lt;&lt; dyn_s.str() &lt;&lt; '\n';
    dyn_s.freeze(false);

    char buf[10];
    std::strstreambuf user(buf, 10, buf); // user-provided output buffer
    std::ostrstream user_s(buf, 10); // equivalent stream
    user_s &lt;&lt; 1.23 &lt;&lt; std::ends;
    std::cout &lt;&lt; buf &lt;&lt; '\n';

    std::strstreambuf lit(&quot;1 2 3&quot;, 5); // constant
    std::istrstream lit_s(&quot;1 2 3&quot;); // equivalent stream
    int i, j, k;
    lit_s &gt;&gt; i &gt;&gt; j &gt;&gt; k;
    std::cout &lt;&lt; i &lt;&lt; ' ' &lt;&lt; j &lt;&lt; ' ' &lt;&lt; k &lt;&lt; '\n';
}
 | output=
1.23
1.23
1 2 3
}}

===See also===
{{dsc begin}}
{{dsc mem ctor | cpp/io/strstream/strstream | constructs an strstream, optionally allocating the buffer}}
{{dsc end}}

[[de:cpp/io/strstreambuf/strstreambuf]]
[[es:cpp/io/strstreambuf/strstreambuf]]
[[fr:cpp/io/strstreambuf/strstreambuf]]
[[it:cpp/io/strstreambuf/strstreambuf]]
[[ja:cpp/io/strstreambuf/strstreambuf]]
[[pt:cpp/io/strstreambuf/strstreambuf]]
[[ru:cpp/io/strstreambuf/strstreambuf]]
[[zh:cpp/io/strstreambuf/strstreambuf]]</text>
      <sha1>gonarsaqgm1c8n2fcwphkwir2ro0k9x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/underflow</title>
    <ns>0</ns>
    <id>12932</id>
    <revision>
      <id>89109</id>
      <parentid>65051</parentid>
      <timestamp>2016-12-30T15:12:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-weird spaces in the example</comment>
      <text xml:space="preserve" bytes="3219">{{cpp/io/strstreambuf/title | underflow }}
{{cpp/io/strstreambuf/navbar}}
{{ddcl |1=
protected:
virtual int_type underflow();
}}

Reads the next character from the get area of the buffer.

If the input sequence has a read position available ({{c|gptr() &lt; egptr()}}, returns {{c|(unsigned char)(*gptr())}}.

Otherwise, if {{lc|pptr()}} is not null and {{c|pptr() &gt; egptr()}} (there is a put area and it is located after the get area), extends the end of the get area to include the characters that were recently written into the put area by incrementing {{lc|egptr()}} to some value between {{c|gptr()}} and {{lc|pptr()}}, and then returns {{c|(unsigned char)(*gptr())}}.

Otherwise, returns {{lc|EOF}} to indicate failure.

===Parameters===
(none)

===Return value===
The next character in the get area, {{c|(unsigned char)(*gptr())}} on success, {{lc|EOF}} on failure

===Example===
{{example
 |
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

struct mybuf : std::strstreambuf
{
    int_type overflow(int_type c) 
    {
        std::cout &lt;&lt; &quot;Before overflow(): size of the get area is &quot; &lt;&lt; egptr()-eback()
                  &lt;&lt; &quot; size of the put area is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        int_type rc = std::strstreambuf::overflow(c);
        std::cout &lt;&lt; &quot;After overflow(): size of the get area is &quot; &lt;&lt; egptr()-eback()
                  &lt;&lt; &quot; size of the put area is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        return rc;
    }

    int_type underflow() 
    {
        std::cout &lt;&lt; &quot;Before underflow(): size of the get area is &quot; &lt;&lt; egptr()-eback()
                  &lt;&lt; &quot; size of the put area is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        int_type ch = std::strstreambuf::underflow();
        std::cout &lt;&lt; &quot;After underflow(): size of the get area is &quot; &lt;&lt; egptr()-eback()
                  &lt;&lt; &quot; size of the put area is &quot; &lt;&lt; epptr()-pbase() &lt;&lt; '\n';
        if (ch == EOF) {
            std::cout &lt;&lt; &quot;underflow() returns EOF\n&quot;;
        } else {
            std::cout &lt;&lt; &quot;underflow() returns '&quot; &lt;&lt; char(ch) &lt;&lt; &quot;'\n&quot;;
        }
        return ch;
    }
};

int main()
{
    mybuf sbuf; // read-write dynamic strstreambuf
    std::iostream stream(&amp;sbuf);

    int n;
    stream &gt;&gt; n;
    stream.clear();
    stream &lt;&lt; &quot;123&quot;;
    stream &gt;&gt; n;
    std::cout &lt;&lt; n &lt;&lt; '\n';
}
 | p=true
 | output=
Before underflow(): size of the get area is 0 size of the put area is 0
After underflow(): size of the get area is 0 size of the put area is 0
underflow() returns EOF
Before overflow(): size of the get area is 0 size of the put area is 0
After overflow(): size of the get area is 0 size of the put area is 32
Before underflow(): size of the get area is 0 size of the put area is 32
After underflow(): size of the get area is 3 size of the put area is 32
underflow() returns '1'
Before underflow(): size of the get area is 3 size of the put area is 32
After underflow(): size of the get area is 3 size of the put area is 32
underflow() returns EOF
123
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc underflow}}
{{dsc inc | cpp/io/basic_stringbuf/dsc underflow}}
{{dsc inc | cpp/io/basic_filebuf/dsc underflow}}
{{dsc inc | cpp/io/basic_streambuf/dsc sgetc}}
{{dsc inc | cpp/io/basic_istream/dsc get}}
{{dsc end}}</text>
      <sha1>ibqtwcvd1xo6epwma3kamckyyl5iclu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/io/strstreambuf/~strstreambuf</title>
    <ns>0</ns>
    <id>12883</id>
    <revision>
      <id>85058</id>
      <parentid>64335</parentid>
      <timestamp>2016-03-24T13:59:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>missing ends</comment>
      <text xml:space="preserve" bytes="1864">{{cpp/io/strstreambuf/title|~strstreambuf}}
{{cpp/io/strstreambuf/navbar}}
{{dcl begin}}
{{dcl | 1=
virtual ~strstreambuf();
}}
{{dcl end}}

Destroys a {{tt|std::strstreambuf}} object. if the object is managing a dynamically-allocated buffer (the buffer state is &quot;allocated&quot;) and if the object is not frozen, then deallocates the buffer using the deallocation function provided at construction or {{c|delete[]}} if none was provided.

===Parameters===
(none0

===Notes===
This destructor is typically called by the destructor of {{lc|std::strstream}}

If {{lc|str()}} was called on a dynamic strstream and {{lc|freeze|freeze(false)}} was not called after that, this destructor leaks memory.

===Example===
{{example
 | 
 | code=
#include &lt;strstream&gt;
#include &lt;iostream&gt;

void* my_alloc(size_t n)
{
    std::cout &lt;&lt; &quot;my_alloc(&quot; &lt;&lt; n &lt;&lt; &quot;) called\n&quot;;
    return new char[n];
}

void my_free(void* p)
{
    std::cout &lt;&lt; &quot;my_free() called\n&quot;;
    delete[] (char*)p;
}

int main()
{
    {
        std::strstreambuf buf(my_alloc, my_free);
        std::ostream s(&amp;buf);
        s &lt;&lt; 1.23 &lt;&lt; std::ends;
        std::cout &lt;&lt; buf.str() &lt;&lt; '\n';
        buf.freeze(false);
    } // destructor called here, buffer deallocated

    {
        std::strstreambuf buf(my_alloc, my_free);
        std::ostream s(&amp;buf);
        s &lt;&lt; 1.23 &lt;&lt; std::ends;
        std::cout &lt;&lt; buf.str() &lt;&lt; '\n';
//        buf.freeze(false);
    } // destructor called here, memory leak!
}
 | output=
my_alloc(4096) called
1.23
my_free() called
my_alloc(4096) called
1.23
}}

[[de:cpp/io/strstreambuf/~strstreambuf]]
[[es:cpp/io/strstreambuf/~strstreambuf]]
[[fr:cpp/io/strstreambuf/~strstreambuf]]
[[it:cpp/io/strstreambuf/~strstreambuf]]
[[ja:cpp/io/strstreambuf/~strstreambuf]]
[[pt:cpp/io/strstreambuf/~strstreambuf]]
[[ru:cpp/io/strstreambuf/~strstreambuf]]
[[zh:cpp/io/strstreambuf/~strstreambuf]]</text>
      <sha1>35c7mck39p0v4nst7imlu8b9c257pdi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator</title>
    <ns>0</ns>
    <id>626</id>
    <revision>
      <id>87944</id>
      <parentid>87942</parentid>
      <timestamp>2016-10-14T13:58:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>undo table</comment>
      <text xml:space="preserve" bytes="4545">{{title|Iterator library}}
{{cpp/iterator/navbar}}

The iterator library provides definitions for five kinds of iterators as well as iterator traits, adapters, and utility functions. 

===Iterator categories===

There are {{rev inl|until=c++17|five}}{{rev inl|since=c++17|six}} kinds of iterators: {{concept|InputIterator}}, {{concept|OutputIterator}}, {{concept|ForwardIterator}}, {{concept|BidirectionalIterator}}, {{concept|RandomAccessIterator}}{{rev inl|since=c++17|, and {{concept|ContiguousIterator}}}}.

Instead of being defined by specific types, each category of iterator is defined by the operations that can be performed on it.  This definition means that any type that supports the necessary operations can be used as an iterator -- for example, a pointer supports all of the operations required by {{concept|RandomAccessIterator}}, so a pointer can be used anywhere a {{concept|RandomAccessIterator}} is expected.

All of the iterator categories (except {{concept|OutputIterator}}) can be organized into a hierarchy, where more powerful iterator categories (e.g. {{concept|RandomAccessIterator}}) support the operations of less powerful categories (e.g. {{concept|InputIterator}}). If an iterator falls into one of these categories and also satisfies the requirements of {{concept|OutputIterator}}, then it is called a ''mutable'' iterator and supports ''both'' input and output. Non-mutable iterators are called ''constant'' iterators.

{| class=&quot;wikitable&quot;
!colspan=&quot;5&quot;|Iterator category
!Defined operations
|-
|rowspan=&quot;5&quot;|{{concept|ContiguousIterator}}
|rowspan=&quot;4&quot;|{{concept|RandomAccessIterator}}
|rowspan=&quot;3&quot;|{{concept|BidirectionalIterator}}
|rowspan=&quot;2&quot;|{{concept|ForwardIterator}}
|{{concept|InputIterator}}
| 
* read
* increment (without multiple passes)
|-
|
|
* increment (with multiple passes)
|-
|colspan=&quot;2&quot;|
|
* decrement
|-
|colspan=&quot;3&quot;|
|
* random access
|-
|colspan=&quot;4&quot;|
|
* contiguous storage
|-
| colspan=&quot;6&quot; style=&quot;text-align:center;&quot; |
Iterators that fall into one of the above categories and also meet the requirements of {{concept|OutputIterator}} are called mutable iterators.
|-
|{{concept|OutputIterator}}
|colspan=&quot;4&quot;|
|
* write
* increment (without multiple passes)
|}

Note: {{concept|ContiguousIterator}} category was only formally specified in C++17, but the iterators of {{lc|std::vector}}, {{lc|std::basic_string}}, {{lc|std::array}}, and {{lc|std::valarray}}, as well as pointers into C arrays are often treated as a separate category in pre-C++17 code.

=== Iterator primitives ===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc iterator_traits}}
{{dsc inc | cpp/iterator/dsc iterator_tags}}
{{dsc inc | cpp/iterator/dsc iterator}}
{{dsc end}}

=== Iterator adaptors ===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc reverse_iterator}}
{{dsc inc | cpp/iterator/dsc make_reverse_iterator}}
{{dsc inc | cpp/iterator/dsc move_iterator}}
{{dsc inc | cpp/iterator/dsc make_move_iterator}}
{{dsc inc | cpp/iterator/dsc back_insert_iterator}}
{{dsc inc | cpp/iterator/dsc back_inserter}}
{{dsc inc | cpp/iterator/dsc front_insert_iterator}}
{{dsc inc | cpp/iterator/dsc front_inserter}}
{{dsc inc | cpp/iterator/dsc insert_iterator}}
{{dsc inc | cpp/iterator/dsc inserter}}
{{dsc end}}

=== Stream iterators ===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc istream_iterator}}
{{dsc inc | cpp/iterator/dsc ostream_iterator}}
{{dsc inc | cpp/iterator/dsc istreambuf_iterator}}
{{dsc inc | cpp/iterator/dsc ostreambuf_iterator}}
{{dsc end}}

=== Iterator operations ===
{{dsc begin}}
{{dsc header | iterator}}
{{dsc inc | cpp/iterator/dsc advance}}
{{dsc inc | cpp/iterator/dsc distance}}
{{dsc inc | cpp/iterator/dsc next}}
{{dsc inc | cpp/iterator/dsc prev}}
{{dsc end}}

=== Range access ===
These non-member functions provide a generic interface for containers, plain arrays, and {{lc|std::initializer_list}}.
{{dsc begin}}
{{dsc header | iterator}}
{{dsc inc | cpp/iterator/dsc begin}}
{{dsc inc | cpp/iterator/dsc end}}
{{dsc inc | cpp/iterator/dsc rbegin}}
{{dsc inc | cpp/iterator/dsc rend}}
{{dsc end}}

=== Container access ===
These non-member functions provide a generic interface for containers, plain arrays, and {{lc|std::initializer_list}}.
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc size}}
{{dsc inc | cpp/iterator/dsc empty}}
{{dsc inc | cpp/iterator/dsc data}}
{{dsc end}}

[[ar:cpp/iterator]]
[[de:cpp/iterator]]
[[es:cpp/iterator]]
[[fr:cpp/iterator]]
[[it:cpp/iterator]]
[[ja:cpp/iterator]]
[[ko:cpp/iterator]]
[[pt:cpp/iterator]]
[[ru:cpp/iterator]]
[[tr:cpp/iterator]]
[[zh:cpp/iterator]]</text>
      <sha1>trtlrde4za4cd74ckhiexegktyjetcr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/advance</title>
    <ns>0</ns>
    <id>2671</id>
    <revision>
      <id>86735</id>
      <parentid>83753</parentid>
      <timestamp>2016-07-12T13:52:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>UB note on advancing too far</comment>
      <text xml:space="preserve" bytes="1841">{{cpp/title| advance}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl |until=c++17|
template&lt; class InputIt, class Distance &gt;
void advance( InputIt&amp; it, Distance n );
}}
{{dcl |since=c++17|
template&lt; class InputIt, class Distance &gt;
constexpr void advance( InputIt&amp; it, Distance n );
}}
{{dcl end}}

Increments given iterator {{tt|it}} by {{tt|n}} elements.

If {{tt|n}} is negative, the iterator is decremented. In this case, {{tt|InputIt}} must meet the requirements of {{concept|BidirectionalIterator}}, otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | it | iterator to be advanced }}
{{par | n | number of elements {{tt|it}} should be advanced}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear. 

However, if {{tt|InputIt}} additionally meets the requirements of {{concept|RandomAccessIterator}}, complexity is constant.

===Notes===
The behavior is undefined if the specified sequence of increments or decrements would require that a non-incrementable iterator (such as the past-the-end iterator) is incremented, or that a non-decrementable iterator (such as the front iterator or the singular iterator) is decremented.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

int main() 
{
    std::vector&lt;int&gt; v{ 3, 1, 4 };
    
    auto vi = v.begin();

    std::advance(vi, 2);

    std::cout &lt;&lt; *vi &lt;&lt; '\n';
}
 | output=4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc next}}
{{dsc inc | cpp/iterator/dsc distance}}
{{dsc end}}

[[de:cpp/iterator/advance]]
[[es:cpp/iterator/advance]]
[[fr:cpp/iterator/advance]]
[[it:cpp/iterator/advance]]
[[ja:cpp/iterator/advance]]
[[pt:cpp/iterator/advance]]
[[ru:cpp/iterator/advance]]
[[zh:cpp/iterator/advance]]</text>
      <sha1>9iwz0puzljto4sw773vgpekxszna09j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/back insert iterator</title>
    <ns>0</ns>
    <id>4949</id>
    <revision>
      <id>78512</id>
      <parentid>78511</parentid>
      <timestamp>2015-05-24T13:15:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2502">{{cpp/title|back_insert_iterator}}
{{cpp/iterator/back_insert_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl | until=c++17 | 1=
template&lt; class Container &gt;
class back_insert_iterator : public std::iterator&lt; std::output_iterator_tag,
                                                   void, void, void, void &gt;
}}
{{dcl | since=c++17 | 1=
template&lt; class Container &gt;
class back_insert_iterator;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::back_insert_iterator}} is an {{concept|OutputIterator}} that appends to a container for which it was constructed. The container's {{tt|push_back()}} member function is called whenever the iterator (whether dereferenced or not) is assigned to. Incrementing the {{tt|std::back_insert_iterator}} is a no-op.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|container_type}} | {{tt|Container}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/inserter/dsc constructor | back_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator{{=}} | back_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator* | back_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator_arith | back_insert_iterator}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Definition}}
{{dsc | {{tt|container}} {{mark|protected}} | a pointer of type {{tt|Container*}} }}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::output_iterator_tag|void|void|void|void}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;cstdlib&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v;
    std::generate_n(std::back_insert_iterator&lt;std::vector&lt;int&gt;&gt;(v), // can be simplified
                    10, [](){ return std::rand() % 10; });        // with std::back_inserter
    for (int n : v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
3 6 7 5 3 5 6 2 9 1 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc back_inserter}}
{{dsc inc | cpp/iterator/dsc front_insert_iterator}}
{{dsc inc | cpp/iterator/dsc insert_iterator}}
{{dsc end}}

[[de:cpp/iterator/back insert iterator]]
[[es:cpp/iterator/back insert iterator]]
[[fr:cpp/iterator/back insert iterator]]
[[it:cpp/iterator/back insert iterator]]
[[ja:cpp/iterator/back insert iterator]]
[[pt:cpp/iterator/back insert iterator]]
[[ru:cpp/iterator/back insert iterator]]
[[zh:cpp/iterator/back insert iterator]]</text>
      <sha1>khniri08kvrwnazhqekf46a21sqkmln</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/back insert iterator/back insert iterator</title>
    <ns>0</ns>
    <id>8756</id>
    <revision>
      <id>50876</id>
      <parentid>42475</parentid>
      <timestamp>2013-06-01T03:42:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="568">{{include page|cpp/iterator/inserter/constructor|back_insert_iterator}}

[[de:cpp/iterator/back insert iterator/back insert iterator]]
[[es:cpp/iterator/back insert iterator/back insert iterator]]
[[fr:cpp/iterator/back insert iterator/back insert iterator]]
[[it:cpp/iterator/back insert iterator/back insert iterator]]
[[ja:cpp/iterator/back insert iterator/back insert iterator]]
[[pt:cpp/iterator/back insert iterator/back insert iterator]]
[[ru:cpp/iterator/back insert iterator/back insert iterator]]
[[zh:cpp/iterator/back insert iterator/back insert iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/back insert iterator/operator*</title>
    <ns>0</ns>
    <id>8747</id>
    <revision>
      <id>42467</id>
      <parentid>36902</parentid>
      <timestamp>2012-11-02T23:24:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="465">{{cpp/iterator/inserter/operator*|back_insert_iterator}}

[[de:cpp/iterator/back insert iterator/operator*]]
[[es:cpp/iterator/back insert iterator/operator*]]
[[fr:cpp/iterator/back insert iterator/operator*]]
[[it:cpp/iterator/back insert iterator/operator*]]
[[ja:cpp/iterator/back insert iterator/operator*]]
[[pt:cpp/iterator/back insert iterator/operator*]]
[[ru:cpp/iterator/back insert iterator/operator*]]
[[zh:cpp/iterator/back insert iterator/operator*]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/back insert iterator/operator++</title>
    <ns>0</ns>
    <id>8746</id>
    <revision>
      <id>42458</id>
      <parentid>36901</parentid>
      <timestamp>2012-11-02T23:22:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="474">{{cpp/iterator/inserter/operator++|back_insert_iterator}}

[[de:cpp/iterator/back insert iterator/operator++]]
[[es:cpp/iterator/back insert iterator/operator++]]
[[fr:cpp/iterator/back insert iterator/operator++]]
[[it:cpp/iterator/back insert iterator/operator++]]
[[ja:cpp/iterator/back insert iterator/operator++]]
[[pt:cpp/iterator/back insert iterator/operator++]]
[[ru:cpp/iterator/back insert iterator/operator++]]
[[zh:cpp/iterator/back insert iterator/operator++]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/back insert iterator/operator=</title>
    <ns>0</ns>
    <id>8757</id>
    <revision>
      <id>75852</id>
      <parentid>42452</parentid>
      <timestamp>2015-02-02T22:46:37Z</timestamp>
      <contributor>
        <username>DanielKO</username>
        <id>3746</id>
      </contributor>
      <comment>Added example</comment>
      <text xml:space="preserve" bytes="945">{{cpp/iterator/inserter/operator{{=}}|back_insert_iterator}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

void print(const std::vector&lt;int&gt;&amp; vec)
{
    std::cout &lt;&lt; &quot;[&quot;;
    for (auto&amp; elem : vec)
        std::cout &lt;&lt; &quot; &quot; &lt;&lt; elem;
    std::cout &lt;&lt; &quot; ]\n&quot;;
}

int main()
{
    std::vector&lt;int&gt; vec;
    std::back_insert_iterator&lt; std::vector&lt;int&gt; &gt; it(vec);

    for (int i=0; i&lt;10; ++i)
        it = i; // calls vec.push_back(i)

    print(vec);
}
 | output=
[ 0 1 2 3 4 5 6 7 8 9 ]
}}

[[de:cpp/iterator/back insert iterator/operator=]]
[[es:cpp/iterator/back insert iterator/operator=]]
[[fr:cpp/iterator/back insert iterator/operator=]]
[[it:cpp/iterator/back insert iterator/operator=]]
[[ja:cpp/iterator/back insert iterator/operator=]]
[[pt:cpp/iterator/back insert iterator/operator=]]
[[ru:cpp/iterator/back insert iterator/operator=]]
[[zh:cpp/iterator/back insert iterator/operator=]]</text>
      <sha1>duwjsdws9u2sjj92ncf6cpx6yaj4lox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/back inserter</title>
    <ns>0</ns>
    <id>4834</id>
    <revision>
      <id>62340</id>
      <parentid>62339</parentid>
      <timestamp>2013-06-27T00:03:47Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1609">{{cpp/title|back_inserter}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl |
template&lt; class Container &gt;
std::back_insert_iterator&lt;Container&gt; back_inserter( Container&amp; c );
}}
{{dcl end}}

{{tt|back_inserter}} is a convenience function template that constructs a {{lc|std::back_insert_iterator}} for the container {{tt|c}} with the type deduced from the type of the argument.

===Parameters===
{{par begin}}
{{par | c | container that supports a push_back operation}}
{{par end}}

===Return value===
A {{lc|std::back_insert_iterator}} which can be used to add elements to the end of the container {{tt|c}}

===Possible implementation===
{{eq fun | 1=
template&lt; class Container &gt;
std::back_insert_iterator&lt;Container&gt; back_inserter( Container&amp; c )
{
    return std::back_insert_iterator&lt;Container&gt;(c);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

int main()
{
    std::vector&lt;int&gt; v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::fill_n(std::back_inserter(v), 3, -1);
    for (int n : v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
}
 | output=
1 2 3 4 5 6 7 8 9 10 -1 -1 -1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc back_insert_iterator}}
{{dsc inc | cpp/iterator/dsc front_inserter}}
{{dsc inc | cpp/iterator/dsc inserter}}
{{dsc end}}

[[de:cpp/iterator/back inserter]]
[[es:cpp/iterator/back inserter]]
[[fr:cpp/iterator/back inserter]]
[[it:cpp/iterator/back inserter]]
[[ja:cpp/iterator/back inserter]]
[[pt:cpp/iterator/back inserter]]
[[ru:cpp/iterator/back inserter]]
[[zh:cpp/iterator/back inserter]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/begin</title>
    <ns>0</ns>
    <id>2532</id>
    <revision>
      <id>92118</id>
      <parentid>91672</parentid>
      <timestamp>2017-04-05T19:49:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="3846">{{cpp/title| begin}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++17|
template&lt; class C &gt; 
auto begin( C&amp; c ) -&gt; decltype(c.begin());
}}
{{dcl | since=c++17 |
template&lt; class C &gt; 
constexpr auto begin( C&amp; c ) -&gt; decltype(c.begin());
}}
{{dcl rev end}}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++17|
template&lt; class C &gt; 
auto begin( const C&amp; c ) -&gt; decltype(c.begin());
}}
{{dcl | since=c++17 |
template&lt; class C &gt; 
constexpr auto begin( const C&amp; c ) -&gt; decltype(c.begin());
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T, std::size_t N &gt; 
T* begin( T (&amp;array)[N] );
}}
{{dcl | since=c++14 |
template&lt; class T, std::size_t N &gt; 
constexpr T* begin( T (&amp;array)[N] ) noexcept;
}}
{{dcl rev end}}
{{dcl | num=3 | since=c++14 |
template&lt; class C &gt; 
constexpr auto cbegin( const C&amp; c ) noexcept(/* see below */)
    -&gt; decltype(std::begin(c));
}}
{{dcl end}}

Returns an iterator to the beginning of the given container {{tt|c}} or array {{tt|array}}. These templates rely on {{c|C::begin()}} having a reasonable implementation.

@1@ Returns exactly {{c|c.begin()}}, which is typically an iterator to the beginning of the sequence represented by {{tt|c}}. If {{tt|C}} is a standard {{concept|Container}}, this returns {{c|C::iterator}} when {{tt|c}} is not const-qualified, and {{c|C::const_iterator}} otherwise.
@2@ Returns a pointer to the beginning of the {{tt|array}}.
@3@ Returns exactly {{c|std::begin(c)}}, with {{tt|c}} always treated as const-qualified. If {{tt|C}} is a standard {{concept|Container}}, this always returns {{c|C::const_iterator}}.

{{image|range-begin-end.svg}}

{{todo|an explanation why cbegin was introduced}}

===Parameters===
{{par begin}}
{{par | c | a container with a {{tt|begin}} method}}
{{par | array | an array of arbitrary type}}
{{par end}}

===Return value===
An iterator to the beginning of {{tt|c}} or {{tt|array}}

===Exceptions===
@3@ {{noexcept|noexcept(std::begin(c))}}

===Notes===
{{cpp/iterator/range access availability|begin|cbegin}}

===User-defined overloads===
Custom overloads of {{tt|begin}} may be provided for classes that do not expose a suitable {{tt|begin()}} member function, yet can be iterated. The following overloads are already provided by the standard library:

{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc begin2}}
{{dsc inc | cpp/numeric/valarray/dsc begin2}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc begin}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc begin}}
{{dsc end}}

Similar to the use of {{tt|swap}} (described in {{concept|Swappable}}), typical use of the {{tt|begin}} function in generic context is an equivalent of {{c|using std::begin; begin(arg);}}, which allows both the [[cpp/language/adl|ADL]]-selected overloads for user-defined types and the standard library function templates to appear in the same overload set.
{{source|1=
template&lt;typename Container, typename Function&gt;
void for_each(Container&amp;&amp; cont, Function f) {
    using std::begin;
    auto it = begin(cont);
    using std::end;
    auto end_it = end(cont);
    while (it != end_it) {
        f(*it);
        ++it;
    }
}
}}

===Example===
{{example
 |
 | code=#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;

int main() 
{
    std::vector&lt;int&gt; v = { 3, 1, 4 };
    auto vi = std::begin(v);
    std::cout &lt;&lt; *vi &lt;&lt; '\n'; 

    int a[] = { -5, 10, 15 };
    auto ai = std::begin(a);
    std::cout &lt;&lt; *ai &lt;&lt; '\n';
}
 | output=
3
-5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc end}}
{{dsc end}}

[[de:cpp/iterator/begin]]
[[es:cpp/iterator/begin]]
[[fr:cpp/iterator/begin]]
[[it:cpp/iterator/begin]]
[[ja:cpp/iterator/begin]]
[[pt:cpp/iterator/begin]]
[[ru:cpp/iterator/begin]]
[[zh:cpp/iterator/begin]]</text>
      <sha1>n4wluc2ethwslzduou68nncjtxnufo7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/concepts</title>
    <ns>0</ns>
    <id>2151</id>
    <redirect title="cpp/concept" />
    <revision>
      <id>31711</id>
      <parentid>22876</parentid>
      <timestamp>2012-06-06T20:29:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/concept#Iterator]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/concept#Iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/data</title>
    <ns>0</ns>
    <id>14045</id>
    <revision>
      <id>91640</id>
      <parentid>91278</parentid>
      <timestamp>2017-03-31T19:53:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1581">{{cpp/title| data}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | num=1 | since=c++17 |
template &lt;class C&gt; 
constexpr auto data(C&amp; c) -&gt; decltype(c.data());
}}
{{dcl | num=2 | since=c++17 |
template &lt;class C&gt; 
constexpr auto data(const C&amp; c) -&gt; decltype(c.data());
}}
{{dcl | num=3 | since=c++17 |
template &lt;class T, std::size_t N&gt; 
constexpr T* data(T (&amp;array)[N]) noexcept;
}}
{{dcl | num=4 | since=c++17 |
template &lt;class E&gt;
constexpr const E* data(std::initializer_list&lt;E&gt; il) noexcept;
}}
{{dcl end}}

Returns a pointer to the block of memory containing the elements of the container.

@1,2@ returns {{c|c.data()}}
@3@ returns {{c|array}}
@4@ returns {{c|il.begin()}}

===Parameters===
{{par begin}}
{{par | c | a container with a {{c|data()}} method}}
{{par | array | an array of arbitrary type}}
{{par | il | an initializer list}}
{{par end}}

===Return value===
A pointer to the block of memory containing the elements of the container.

===Exceptions===
@3,4@ {{unreviewed noexcept}}

===Notes===
{{cpp/iterator/range access availability|data|nosv=true}}

===Possible implementation===
{{eq fun
 | 1=
template &lt;class C&gt; 
constexpr auto data(C&amp; c) -&gt; decltype(c.data())
{
    return c.data();
}
 | 2=
template &lt;class C&gt; 
constexpr auto data(const C&amp; c) -&gt; decltype(c.data())
{
    return c.data();
}
 | 3=
template &lt;class T, std::size_t N&gt;
constexpr T* data(T (&amp;array)[N]) noexcept
{
    return array;
}
 |4=
template &lt;class E&gt; 
constexpr const E* data(std::initializer_list&lt;E&gt; il) noexcept
{
    return il.begin();
}
}}

===Example===
{{example}}</text>
      <sha1>sc4g795otv99i71j874nh266ykajx1u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/distance</title>
    <ns>0</ns>
    <id>2672</id>
    <revision>
      <id>92093</id>
      <parentid>83754</parentid>
      <timestamp>2017-04-05T08:25:02Z</timestamp>
      <contributor>
        <ip>150.101.198.181</ip>
      </contributor>
      <comment>between is not consistent with the description below. It implies that distance it and ++it == 0</comment>
      <text xml:space="preserve" bytes="2491">{{cpp/title| distance}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl |until=c++17|
template&lt; class InputIt &gt;
typename std::iterator_traits&lt;InputIt&gt;::difference_type 
    distance( InputIt first, InputIt last );
}}
{{dcl |since=c++17|
template&lt; class InputIt &gt;
constexpr typename std::iterator_traits&lt;InputIt&gt;::difference_type 
    distance( InputIt first, InputIt last );
}}
{{dcl end}}

Returns the number of hops from {{tt|first}} to {{tt|last}}.

{{rev begin}}
{{rev|until=c++11|
The behavior is undefined if {{tt|last}} is not reachable from {{tt|first}} by (possibly repeatedly) incrementing {{tt|first}}.
}}
{{rev|since=c++11|
If {{tt|InputIt}} is not {{concept|RandomAccessIterator}}, the behavior is undefined if {{tt|last}} is not reachable from {{tt|first}} by (possibly repeatedly) incrementing {{tt|first}}.
If {{tt|InputIt}} is {{concept|RandomAccessIterator}}, the behavior is undefined if {{tt|last}} is not reachable from {{tt|first}} and {{tt|first}} is not reachable from {{tt|last}}.
}}

===Parameters===
{{par begin}}
{{par | first | iterator pointing to the first element}}
{{par | last | iterator pointing to the end of the range}}
{{par hreq}}
{{par req concept | InputIt | InputIterator | notes=The operation is more efficient if {{tt|InputIt}} additionally meets the requirements of {{concept|RandomAccessIterator}}}}
{{par end}}

===Return value===
The number of increments needed to go from {{tt|first}} to {{tt|last}}. {{rev inl|since=c++11|The value may be negative if random-access iterators are used and {{tt|first}} is reachable from {{tt|last}}}}

===Complexity===
Linear. 

However, if {{tt|InputIt}} additionally meets the requirements of {{concept|RandomAccessIterator}}, complexity is constant.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

int main() 
{
    std::vector&lt;int&gt; v{ 3, 1, 4 };
    std::cout &lt;&lt; &quot;distance(first, last) = &quot;
              &lt;&lt; std::distance(v.begin(), v.end()) &lt;&lt; '\n'
              &lt;&lt; &quot;distance(last, first) = &quot;
              &lt;&lt; std::distance(v.end(), v.begin()) &lt;&lt; '\n';
}
 | output=
distance(first, last) = 3
distance(last, first) = -3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc advance}}
{{dsc end}}

[[de:cpp/iterator/distance]]
[[es:cpp/iterator/distance]]
[[fr:cpp/iterator/distance]]
[[it:cpp/iterator/distance]]
[[ja:cpp/iterator/distance]]
[[pt:cpp/iterator/distance]]
[[ru:cpp/iterator/distance]]
[[zh:cpp/iterator/distance]]</text>
      <sha1>lzgzi5w71rcllms8i2k7qtlfqd56uvw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/empty</title>
    <ns>0</ns>
    <id>14044</id>
    <revision>
      <id>91549</id>
      <parentid>91277</parentid>
      <timestamp>2017-03-31T19:49:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1957">{{cpp/title| empty}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | num=1 | since=c++17 |
template &lt;class C&gt;
constexpr auto empty(const C&amp; c) -&gt; decltype(c.empty());
}}
{{dcl | num=2 | since=c++17 |
template &lt;class T, std::size_t N&gt;
constexpr bool empty(const T (&amp;array)[N]) noexcept;
}}
{{dcl | num=3 | since=c++17 |
template &lt;class E&gt;
constexpr bool empty(std::initializer_list&lt;E&gt; il) noexcept;
}}
{{dcl end}}

Returns whether the given container is empty.

@1@ returns {{c|c.empty()}}
@2@ returns {{c|false}}
@3@ returns {{c|il.size() {{==}} 0}}

===Parameters===
{{par begin}}
{{par | c | a container with an {{tt|empty}} method}}
{{par | array | an array of arbitrary type}}
{{par | il | an initializer list}}
{{par end}}

===Return value===
{{c|true}} if the container doesn't have any element.

===Exceptions===
@2,3@ {{unreviewed noexcept}}

===Notes===
{{cpp/iterator/range access availability|empty|nosv=true}}

===Possible implementation===
{{eq fun
 | 1=
template &lt;class C&gt; 
constexpr auto empty(const C&amp; c) -&gt; decltype(c.empty())
{
    return c.empty();
}
 | 2=
template &lt;class T, std::size_t N&gt; 
constexpr bool empty(const T (&amp;array)[N]) noexcept
{
    return false;
}
 | 3=
template &lt;class E&gt; 
constexpr bool empty(std::initializer_list&lt;E&gt; il) noexcept
{
    return il.size() {{==}} 0;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

template &lt;class T&gt;
void print(const T&amp; container)
{
    if ( !std::empty(container) )
    {
         std::cout &lt;&lt; &quot;Elements:\n&quot;;
         for ( const auto&amp; element : container )
             std::cout &lt;&lt; element &lt;&lt; '\n';
    }
    else
    {
        std::cout &lt;&lt; &quot;Empty\n&quot;;
    }
}

int main() 
{
    std::vector&lt;int&gt; c {{=}} { 1, 2, 3 };
    print(c);
    c.clear();
    print(c);

    int array[] {{=}} { 4, 5, 6 };
    print(array);

    auto il {{=}} { 7, 8, 9 };
    print(il);
}
|output=
Elements:
1
2
3
Empty
Elements:
4
5
6
Elements:
7
8
9
}}</text>
      <sha1>kv0bbecviyodws70u0rehynh89hmcjz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/end</title>
    <ns>0</ns>
    <id>2533</id>
    <revision>
      <id>92119</id>
      <parentid>91401</parentid>
      <timestamp>2017-04-05T19:50:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="4025">{{cpp/title| end}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++17|
template&lt; class C &gt; 
auto end( C&amp; c ) -&gt; decltype(c.end());
}}
{{dcl | since=c++17|
template&lt; class C &gt; 
constexpr auto end( C&amp; c ) -&gt; decltype(c.end());
}}
{{dcl rev end}}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++17 |
template&lt; class C &gt; 
auto end( const C&amp; c ) -&gt; decltype(c.end());
}}
{{dcl | since=c++17 |
template&lt; class C &gt; 
constexpr auto end( const C&amp; c ) -&gt; decltype(c.end());
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T, std::size_t N &gt; 
T* end( T (&amp;array)[N] );
}}
{{dcl | since=c++14 |
template&lt; class T, std::size_t N &gt; 
constexpr T* end( T (&amp;array)[N] ) noexcept;
}}
{{dcl rev end}}
{{dcl | num=3 | since=c++14 |
template&lt; class C &gt; 
constexpr auto cend( const C&amp; c ) noexcept(/* see below */)
    -&gt; decltype(std::end(c));
}}
{{dcl end}}

Returns an iterator to the end (i.e. the element after the last element) of the given container {{tt|c}} or array {{tt|array}}. These templates rely on {{c|C::end()}} having a reasonable implementation.

@1@ Returns exactly {{c|c.end()}}, which is typically an iterator one past the end of the sequence represented by {{tt|c}}. If {{tt|C}} is a standard {{concept|Container}}, this returns a {{c|C::iterator}} when {{tt|c}} is not const-qualified, and a {{c|C::const_iterator}} otherwise.
@2@ Returns a pointer to the end of the array {{tt|array}}.
@3@ Returns exactly {{c|std::end(c)}}, with {{tt|c}} always treated as const-qualified. If {{tt|C}} is a standard {{concept|Container}}, this always returns a {{c|C::const_iterator}}.

{{image|range-begin-end.svg}}

===Parameters===
{{par begin}}
{{par | c | a container with an {{tt|end}} method}}
{{par | array | an array of arbitrary type}}
{{par end}}

===Return value===
An iterator to the end of {{tt|c}} or {{tt|array}}. Note that the end of a container or array is defined as the element following the last valid element.

===Exceptions===
@3@ {{noexcept|noexcept(std::end(c))}}

===Notes===
{{cpp/iterator/range access availability|end|cend}}

===User-defined overloads===
Custom overloads of {{tt|end}} may be provided for classes that do not expose a suitable {{tt|end()}} member function, yet can be iterated. The following overloads are already provided by the standard library:

{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc end2}}
{{dsc inc | cpp/numeric/valarray/dsc end2}}
{{dsc inc | cpp/filesystem/directory_iterator/dsc begin}}
{{dsc inc | cpp/filesystem/recursive_directory_iterator/dsc begin}}
{{dsc end}}

Similar to the use of {{tt|swap}} (described in {{concept|Swappable}}), typical use of the {{tt|end}} function in generic context is an equivalent of {{c|using std::end; end(arg);}}, which lets both the [[cpp/language/adl|ADL]]-selected overloads for user-defined types and the standard library function templates to appear in the same overload set.
{{source|1=
template&lt;typename Container, typename Function&gt;
void for_each(Container&amp;&amp; cont, Function f) {
    using std::begin;
    auto it = begin(cont);
    using std::end;
    auto end_it = end(cont);
    while (it != end_it) {
        f(*it);
        ++it;
    }
}
}}

===Example===
{{example
 |
 | code=#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

int main() 
{
    std::vector&lt;int&gt; v = { 3, 1, 4 };
    if (std::find(std::begin(v), std::end(v), 5) != std::end(v)) {
        std::cout &lt;&lt; &quot;found a 5 in vector v!\n&quot;;
    }

    int a[] = { 5, 10, 15 };
    if (std::find(std::begin(a), std::end(a), 5) != std::end(a)) {
        std::cout &lt;&lt; &quot;found a 5 in array a!\n&quot;;
    }
}
 | output=found a 5 in array a!
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc begin}}
{{dsc end}}

[[de:cpp/iterator/end]]
[[es:cpp/iterator/end]]
[[fr:cpp/iterator/end]]
[[it:cpp/iterator/end]]
[[ja:cpp/iterator/end]]
[[pt:cpp/iterator/end]]
[[ru:cpp/iterator/end]]
[[zh:cpp/iterator/end]]</text>
      <sha1>5sti0ka0zpfdzma7d8nbxb5hdm1zdtc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/front insert iterator</title>
    <ns>0</ns>
    <id>4953</id>
    <revision>
      <id>78513</id>
      <parentid>72450</parentid>
      <timestamp>2015-05-24T13:16:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>LWG 2438 (declaration only)</comment>
      <text xml:space="preserve" bytes="2492">{{cpp/title|front_insert_iterator}}
{{cpp/iterator/front_insert_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl | until=c++17 | 1=
template&lt; class Container &gt;
class front_insert_iterator : public std::iterator&lt; std::output_iterator_tag,
                                                   void,void,void,void &gt;
}}
{{dcl | since=c++17 | 1=
template&lt; class Container &gt;
class front_insert_iterator;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::front_insert_iterator}} is an {{concept|OutputIterator}} that prepends elements to a container for which it was constructed. The container's {{tt|push_front()}} member function is called whenever the iterator (whether dereferenced or not) is assigned to. Incrementing the {{tt|std::front_insert_iterator}} is a no-op.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|container_type}} | {{tt|Container}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/inserter/dsc constructor | front_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator{{=}} | front_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator* | front_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator_arith | front_insert_iterator}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Definition}}
{{dsc | {{tt|container}} {{mark|protected}} | a pointer of type {{tt|Container*}} }}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::output_iterator_tag|void|void|void|void}}

===Example===
{{example
 | 
 | code=
#include &lt;vector&gt;
#include &lt;deque&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
int main()
{
    std::vector&lt;int&gt; v{1,2,3,4,5};
    std::deque&lt;int&gt; d;
    std::copy(v.begin(), v.end(),
              std::front_insert_iterator&lt;std::deque&lt;int&gt;&gt;(d)); // or std::front_inserter(d)
    for(int n : d)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
5 4 3 2 1 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc front_inserter}}
{{dsc inc | cpp/iterator/dsc back_insert_iterator}}
{{dsc inc | cpp/iterator/dsc insert_iterator}}
{{dsc end}}

[[de:cpp/iterator/front insert iterator]]
[[es:cpp/iterator/front insert iterator]]
[[fr:cpp/iterator/front insert iterator]]
[[it:cpp/iterator/front insert iterator]]
[[ja:cpp/iterator/front insert iterator]]
[[pt:cpp/iterator/front insert iterator]]
[[ru:cpp/iterator/front insert iterator]]
[[zh:cpp/iterator/front insert iterator]]</text>
      <sha1>qjpa6atx6grzm44l8pd1y0hyycgsayz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/front insert iterator/front insert iterator</title>
    <ns>0</ns>
    <id>8748</id>
    <revision>
      <id>50877</id>
      <parentid>42418</parentid>
      <timestamp>2013-06-01T03:42:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="585">{{include page|cpp/iterator/inserter/constructor|front_insert_iterator}}

[[de:cpp/iterator/front insert iterator/front insert iterator]]
[[es:cpp/iterator/front insert iterator/front insert iterator]]
[[fr:cpp/iterator/front insert iterator/front insert iterator]]
[[it:cpp/iterator/front insert iterator/front insert iterator]]
[[ja:cpp/iterator/front insert iterator/front insert iterator]]
[[pt:cpp/iterator/front insert iterator/front insert iterator]]
[[ru:cpp/iterator/front insert iterator/front insert iterator]]
[[zh:cpp/iterator/front insert iterator/front insert iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/front insert iterator/operator*</title>
    <ns>0</ns>
    <id>8750</id>
    <revision>
      <id>42410</id>
      <parentid>36905</parentid>
      <timestamp>2012-11-02T23:12:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="474">{{cpp/iterator/inserter/operator*|front_insert_iterator}}

[[de:cpp/iterator/front insert iterator/operator*]]
[[es:cpp/iterator/front insert iterator/operator*]]
[[fr:cpp/iterator/front insert iterator/operator*]]
[[it:cpp/iterator/front insert iterator/operator*]]
[[ja:cpp/iterator/front insert iterator/operator*]]
[[pt:cpp/iterator/front insert iterator/operator*]]
[[ru:cpp/iterator/front insert iterator/operator*]]
[[zh:cpp/iterator/front insert iterator/operator*]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/front insert iterator/operator++</title>
    <ns>0</ns>
    <id>8751</id>
    <revision>
      <id>42402</id>
      <parentid>36906</parentid>
      <timestamp>2012-11-02T23:10:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="483">{{cpp/iterator/inserter/operator++|front_insert_iterator}}

[[de:cpp/iterator/front insert iterator/operator++]]
[[es:cpp/iterator/front insert iterator/operator++]]
[[fr:cpp/iterator/front insert iterator/operator++]]
[[it:cpp/iterator/front insert iterator/operator++]]
[[ja:cpp/iterator/front insert iterator/operator++]]
[[pt:cpp/iterator/front insert iterator/operator++]]
[[ru:cpp/iterator/front insert iterator/operator++]]
[[zh:cpp/iterator/front insert iterator/operator++]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/front insert iterator/operator=</title>
    <ns>0</ns>
    <id>8749</id>
    <revision>
      <id>42392</id>
      <parentid>36904</parentid>
      <timestamp>2012-11-02T23:08:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="478">{{cpp/iterator/inserter/operator{{=}}|front_insert_iterator}}

[[de:cpp/iterator/front insert iterator/operator=]]
[[es:cpp/iterator/front insert iterator/operator=]]
[[fr:cpp/iterator/front insert iterator/operator=]]
[[it:cpp/iterator/front insert iterator/operator=]]
[[ja:cpp/iterator/front insert iterator/operator=]]
[[pt:cpp/iterator/front insert iterator/operator=]]
[[ru:cpp/iterator/front insert iterator/operator=]]
[[zh:cpp/iterator/front insert iterator/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/front inserter</title>
    <ns>0</ns>
    <id>4853</id>
    <revision>
      <id>66366</id>
      <parentid>66365</parentid>
      <timestamp>2013-11-13T00:23:31Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1630">{{cpp/title|front_inserter}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl |
template&lt; class Container &gt;
std::front_insert_iterator&lt;Container&gt; front_inserter( Container&amp; c );
}}
{{dcl end}}

{{tt|front_inserter}} is a convenience function template that constructs a {{lc|std::front_insert_iterator}} for the container {{tt|c}} with the type deduced from the type of the argument.

===Parameters===
{{par begin}}
{{par | c | container that supports a {{tt|push_front}} operation}}
{{par end}}

===Return value===
A {{lc|std::front_insert_iterator}} which can be used to add elements to the beginning of the container {{tt|c}}

===Possible implementation===
{{eq fun | 1=
template&lt; class Container &gt;
std::front_insert_iterator&lt;Container&gt; front_inserter( Container&amp; c )
{
    return std::front_insert_iterator&lt;Container&gt;(c);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;deque&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;

int main()
{
    std::deque&lt;int&gt; v{1,2,3,4,5,6,7,8,9,10};
    std::fill_n(std::front_inserter(v), 3, -1);
    for (int n : v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
}
 | output=
-1 -1 -1 1 2 3 4 5 6 7 8 9 10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc front_insert_iterator}}
{{dsc inc | cpp/iterator/dsc back_inserter}}
{{dsc inc | cpp/iterator/dsc inserter}}
{{dsc end}}

[[de:cpp/iterator/front inserter]]
[[es:cpp/iterator/front inserter]]
[[fr:cpp/iterator/front inserter]]
[[it:cpp/iterator/front inserter]]
[[ja:cpp/iterator/front inserter]]
[[pt:cpp/iterator/front inserter]]
[[ru:cpp/iterator/front inserter]]
[[zh:cpp/iterator/front inserter]]</text>
      <sha1>bghhq35dwkiy65okawk4wh3l5o36kjq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/insert iterator</title>
    <ns>0</ns>
    <id>4957</id>
    <revision>
      <id>82976</id>
      <parentid>72451</parentid>
      <timestamp>2016-01-18T17:44:59Z</timestamp>
      <contributor>
        <ip>188.109.86.106</ip>
      </contributor>
      <text xml:space="preserve" bytes="2566">{{cpp/title|insert_iterator}}
{{cpp/iterator/insert_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl | until=c++17 | 1=
template&lt; class Container &gt;
class insert_iterator : public std::iterator&lt; std::output_iterator_tag,
                                              void,void,void,void &gt;
}}
{{dcl | since=c++17 | 1=
template&lt; class Container &gt;
class insert_iterator;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::insert_iterator}} is an {{concept|OutputIterator}} that inserts elements into a container for which it was constructed, at the position pointed to by the supplied iterator. The container's {{tt|insert()}} member function is called whenever the iterator (whether dereferenced or not) is assigned to. Incrementing the {{tt|std::insert_iterator}} is a no-op.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|container_type}} | {{tt|Container}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/inserter/dsc constructor | insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator{{=}} | insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator* | insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator_arith | insert_iterator}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Definition}}
{{dsc | {{tt|container}} {{mark|protected}} | a pointer of type {{tt|Container*}} }}
{{dsc | {{tt|iter}} {{mark|protected}} | an iterator of type {{tt|Container::iterator}} }}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::output_iterator_tag|void|void|void|void}}

===Example===
{{example
 | 
 | code=
#include &lt;vector&gt;
#include &lt;list&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

int main()
{
    std::vector&lt;int&gt; v{1,2,3,4,5};
    std::list&lt;int&gt; l{-1,-2,-3};
    std::copy(v.begin(), v.end(), // may be simplified with std::inserter
              std::insert_iterator&lt;std::list&lt;int&gt;&gt;(l, std::next(l.begin()))); 
    for (int n : l)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
-1 1 2 3 4 5 -2 -3 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc inserter}}
{{dsc inc | cpp/iterator/dsc back_insert_iterator}}
{{dsc inc | cpp/iterator/dsc front_insert_iterator}}
{{dsc end}}

[[de:cpp/iterator/insert iterator]]
[[es:cpp/iterator/insert iterator]]
[[fr:cpp/iterator/insert iterator]]
[[it:cpp/iterator/insert iterator]]
[[ja:cpp/iterator/insert iterator]]
[[pt:cpp/iterator/insert iterator]]
[[ru:cpp/iterator/insert iterator]]
[[zh:cpp/iterator/insert iterator]]</text>
      <sha1>j19kdjxt6r8wb8tmq6vk9so9otzg2wq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/insert iterator/insert iterator</title>
    <ns>0</ns>
    <id>8752</id>
    <revision>
      <id>50878</id>
      <parentid>42357</parentid>
      <timestamp>2013-06-01T03:42:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="483">{{include page|cpp/iterator/inserter/constructor|insert_iterator}}

[[de:cpp/iterator/insert iterator/insert iterator]]
[[es:cpp/iterator/insert iterator/insert iterator]]
[[fr:cpp/iterator/insert iterator/insert iterator]]
[[it:cpp/iterator/insert iterator/insert iterator]]
[[ja:cpp/iterator/insert iterator/insert iterator]]
[[pt:cpp/iterator/insert iterator/insert iterator]]
[[ru:cpp/iterator/insert iterator/insert iterator]]
[[zh:cpp/iterator/insert iterator/insert iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/insert iterator/operator*</title>
    <ns>0</ns>
    <id>8754</id>
    <revision>
      <id>42353</id>
      <parentid>36909</parentid>
      <timestamp>2012-11-02T22:58:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="420">{{cpp/iterator/inserter/operator*|insert_iterator}}

[[de:cpp/iterator/insert iterator/operator*]]
[[es:cpp/iterator/insert iterator/operator*]]
[[fr:cpp/iterator/insert iterator/operator*]]
[[it:cpp/iterator/insert iterator/operator*]]
[[ja:cpp/iterator/insert iterator/operator*]]
[[pt:cpp/iterator/insert iterator/operator*]]
[[ru:cpp/iterator/insert iterator/operator*]]
[[zh:cpp/iterator/insert iterator/operator*]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/insert iterator/operator++</title>
    <ns>0</ns>
    <id>8755</id>
    <revision>
      <id>42347</id>
      <parentid>36910</parentid>
      <timestamp>2012-11-02T22:57:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="429">{{cpp/iterator/inserter/operator++|insert_iterator}}

[[de:cpp/iterator/insert iterator/operator++]]
[[es:cpp/iterator/insert iterator/operator++]]
[[fr:cpp/iterator/insert iterator/operator++]]
[[it:cpp/iterator/insert iterator/operator++]]
[[ja:cpp/iterator/insert iterator/operator++]]
[[pt:cpp/iterator/insert iterator/operator++]]
[[ru:cpp/iterator/insert iterator/operator++]]
[[zh:cpp/iterator/insert iterator/operator++]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/insert iterator/operator=</title>
    <ns>0</ns>
    <id>8753</id>
    <revision>
      <id>42338</id>
      <parentid>36908</parentid>
      <timestamp>2012-11-02T22:55:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="424">{{cpp/iterator/inserter/operator{{=}}|insert_iterator}}

[[de:cpp/iterator/insert iterator/operator=]]
[[es:cpp/iterator/insert iterator/operator=]]
[[fr:cpp/iterator/insert iterator/operator=]]
[[it:cpp/iterator/insert iterator/operator=]]
[[ja:cpp/iterator/insert iterator/operator=]]
[[pt:cpp/iterator/insert iterator/operator=]]
[[ru:cpp/iterator/insert iterator/operator=]]
[[zh:cpp/iterator/insert iterator/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/inserter</title>
    <ns>0</ns>
    <id>4854</id>
    <revision>
      <id>85731</id>
      <parentid>85730</parentid>
      <timestamp>2016-05-09T15:00:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>brought back the multiset from the original example: use of std::inserter with sets is idiomatic, but yes, the new example highlights an important point</comment>
      <text xml:space="preserve" bytes="2190">{{cpp/title|inserter}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl |
template&lt; class Container &gt;
std::insert_iterator&lt;Container&gt; inserter( Container&amp; c, typename Container::iterator i );
}}
{{dcl end}}

{{tt|inserter}} is a convenience function template that constructs a {{lc|std::insert_iterator}} for the container {{tt|c}} and its iterator {{tt|i}} with the type deduced from the type of the argument.

===Parameters===
{{par begin}}
{{par | c | container that supports a {{tt|insert}} operation}}
{{par | i | iterator in {{tt|c}} indicating the insertion position}}
{{par end}}

===Return value===
A {{lc|std::insert_iterator}} which can be used to insert elements into the container {{tt|c}} at the position indicated by {{tt|i}}.

===Possible implementation===
{{eq fun | 1=
template&lt; class Container &gt;
std::insert_iterator&lt;Container&gt; inserter( Container&amp; c, typename Container::iterator i )
{
    return std::insert_iterator&lt;Container&gt;(c, i);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;set&gt;

int main()
{

    std::multiset&lt;int&gt; s {1, 2, 3};

    // std::inserter is commonly used with sets
    std::fill_n(std::inserter(s, s.end()), 5, 2);

    for (int n : s)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::vector&lt;int&gt; d {100, 200, 300};
    std::vector&lt;int&gt; l {1, 2, 3, 4, 5};

    // when inserting in a sequence container, insertion point advances
    // because each std::insert_iterator::operator= updates the target iterator
    std::copy(d.begin(), d.end(), std::inserter(l, std::next(l.begin())));

    for (int n : l)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
1 2 2 2 2 2 2 3 
1 100 200 300 2 3 4 5 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc insert_iterator}}
{{dsc inc | cpp/iterator/dsc back_inserter}}
{{dsc inc | cpp/iterator/dsc front_inserter}}
{{dsc end}}

[[de:cpp/iterator/inserter]]
[[es:cpp/iterator/inserter]]
[[fr:cpp/iterator/inserter]]
[[it:cpp/iterator/inserter]]
[[ja:cpp/iterator/inserter]]
[[pt:cpp/iterator/inserter]]
[[ru:cpp/iterator/inserter]]
[[zh:cpp/iterator/inserter]]</text>
      <sha1>h2t0ukunoxe45fqqkv9hiamkpluy0u7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istream iterator</title>
    <ns>0</ns>
    <id>4909</id>
    <revision>
      <id>91818</id>
      <parentid>90732</parentid>
      <timestamp>2017-03-31T19:58:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="3771">{{cpp/title|istream_iterator}}
{{cpp/iterator/istream_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl | until=c++17 | 1=
template&lt; class T,
          class CharT = char,
          class Traits = std::char_traits&lt;CharT&gt;,
          class Distance = std::ptrdiff_t &gt;
class istream_iterator: public std::iterator&lt;std::input_iterator_tag,
                                             T, Distance, const T*, const T&amp;&gt;
}}
{{dcl | since=c++17 | 1=
template&lt; class T,
          class CharT = char,
          class Traits = std::char_traits&lt;CharT&gt;,
          class Distance = std::ptrdiff_t &gt;
class istream_iterator;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::istream_iterator}} is a single-pass input iterator that reads successive objects of type {{tt|T}} from the {{lc|std::basic_istream}} object for which it was constructed, by calling the appropriate {{tt|operator&gt;&gt;}}. The actual read operation is performed when the iterator is incremented, not when it is dereferenced. The first object may be read when the iterator is constructed or when the first dereferencing is done. Otherwise, dereferencing only returns a copy of the most recently read object.

The default-constructed {{tt|std::istream_iterator}} is known as the ''end-of-stream'' iterator. When a valid {{tt|std::istream_iterator}} reaches the end of the underlying stream, it becomes equal to the end-of-stream iterator. Dereferencing or incrementing it further invokes undefined behavior.

A typical implementation of {{tt|std::istream_iterator}} holds two data members: a pointer to the associated {{lc|std::basic_istream}} object and the most recently read value of type {{tt|T}}.

{{tt|T}} must meet the {{concept|DefaultConstructible}}, {{concept|CopyConstructible}}, and {{concept|CopyAssignable}} requirements. {{mark unreviewed dr|LWG|2878}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}}}}
{{dsc | {{tt|istream_type}} | {{c|std::basic_istream&lt;CharT, Traits&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/istream_iterator/dsc constructor}}
{{dsc inc | cpp/iterator/istream_iterator/dsc destructor}}
{{dsc inc | cpp/iterator/istream_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/istream_iterator/dsc operator_arith}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/istream_iterator/dsc operator_cmp}}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::input_iterator_tag|T|Distance|const T*|const T&amp;}}

===Notes===
When reading characters, {{tt|std::istream_iterator}} skips whitespace by default (unless disabled with {{lc|std::noskipws}} or equivalent), while {{lc|std::istreambuf_iterator}} does not. In addition, {{lc|std::istreambuf_iterator}} is more efficient, since it avoids the overhead of constructing and destructing the sentry object once per character.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;
#include &lt;numeric&gt;

int main()
{
    std::istringstream str(&quot;0.1 0.2 0.3 0.4&quot;);
    std::partial_sum(std::istream_iterator&lt;double&gt;(str),
                     std::istream_iterator&lt;double&gt;(),
                     std::ostream_iterator&lt;double&gt;(std::cout, &quot; &quot;));
}
 | output=
0.1 0.3 0.6 1 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc ostream_iterator}}
{{dsc inc | cpp/iterator/dsc istreambuf_iterator}}
{{dsc end}}

[[de:cpp/iterator/istream iterator]]
[[es:cpp/iterator/istream iterator]]
[[fr:cpp/iterator/istream iterator]]
[[it:cpp/iterator/istream iterator]]
[[ja:cpp/iterator/istream iterator]]
[[pt:cpp/iterator/istream iterator]]
[[ru:cpp/iterator/istream iterator]]
[[zh:cpp/iterator/istream iterator]]</text>
      <sha1>pu7zhhpfygg9urs2x1inwxrj1hpq8af</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istream iterator/istream iterator</title>
    <ns>0</ns>
    <id>9904</id>
    <revision>
      <id>90697</id>
      <parentid>88319</parentid>
      <timestamp>2017-03-07T23:12:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Remove revboxing: the &quot;is a literal type&quot; wording is nonsense.</comment>
      <text xml:space="preserve" bytes="1409">{{cpp/iterator/istream_iterator/title|istream_iterator}}
{{cpp/iterator/istream_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1|1=
constexpr istream_iterator();
}}
{{dcl |num=2|1=
istream_iterator( istream_type&amp; stream );
}}
{{dcl |num=3|1=
istream_iterator( const istream_iterator&amp; other ) = default;
}}
{{dcl end}}

@1@ Constructs the end-of-stream iterator. This constructor is constexpr if {{c|std::is_trivially_default_constructible_v&lt;T&gt;}} is {{tt|true}} &lt;!-- P0503R0 --&gt;.
@2@ Initializes the iterator and stores the address of {{tt|stream}} in a data member. Optionally, performs the first read from the input stream to initialize the cached value data member (although it may be delayed until the first access)
@3@ Constructs a copy of {{tt|other}}. If {{c|std::is_trivially_copy_constructible_v&lt;T&gt;}} is {{tt|true}} &lt;!-- P0503R0 --&gt;, this copy constructor is a trivial copy constructor.

===Parameters===
{{par begin}}
{{par | stream | stream to initialize the istream_iterator with}}
{{par | other | another istream_iterator of the same type}}
{{par end}}

===Examples===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;sstream&gt;
int main()
{
    std::istringstream stream(&quot;1 2 3 4 5&quot;);
    std::copy(
        std::istream_iterator&lt;int&gt;(stream),
        std::istream_iterator&lt;int&gt;(),
        std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;)
    );
}
|output=
1 2 3 4 5
}}</text>
      <sha1>bvh68kuduj375zmymgemce7w54b3ogl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istream iterator/operator arith</title>
    <ns>0</ns>
    <id>12656</id>
    <revision>
      <id>61416</id>
      <timestamp>2013-06-06T00:04:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="549">{{cpp/iterator/istream_iterator/title|operator++, operator++{{small|(int)}}}}
{{cpp/iterator/istream_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1|
istream_iterator&amp; operator++();
}}
{{dcl |num=2|1=
istream_iterator operator++(int);
}}
{{dcl end}}

Reads a value from the underlying stream and stores it into the iterator object. 

The behavior is undefined if the iterator is end-of-stream iterator.

===Parameters===
(none)

===Return value===
@1@ {{c|*this}}.

@2@ An {{tt|istream_iterator}} that holds an unchanged value.

===Exceptions===
(none)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istream iterator/operator cmp</title>
    <ns>0</ns>
    <id>12657</id>
    <revision>
      <id>61418</id>
      <timestamp>2013-06-06T00:07:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1135">{{title | 1=operator==,!={{small|(std::istream_iterator)}}}}
{{cpp/iterator/istream_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1| 1=
template&lt; class T, class CharT, class Traits, class Dist &gt;
bool operator==( const istream_iterator&lt;T,CharT,Traits,Dist&gt;&amp; lhs,
                 const istream_iterator&lt;T,CharT,Traits,Dist&gt;&amp; rhs );
}}
{{dcl |num=2|1=
template&lt; class CharT, class Traits &gt;
bool operator!=( const istream_iterator&lt;T,CharT,Traits,Dist&gt;&amp; lhs,
                 const istream_iterator&lt;T,CharT,Traits,Dist&gt;&amp; rhs );
}}
{{dcl end}}

Checks whether both {{tt|lhs}} and {{tt|rhs}} are equal. Two stream iterators are equal if both of them are end-of-stream iterators or both of them refer to the same stream.

@1@ Checks whether {{tt|lhs}} is ''equal to'' {{tt|rhs}}.

@2@ Checks whether {{tt|lhs}} is ''not equal to'' {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | stream iterators to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if {{tt|lhs}} is ''equal to'' {{tt|rhs}}, {{c|false}} otherwise.

@2@ {{c|true}} if {{tt|lhs}} is ''not equal to'' {{tt|rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istream iterator/operator*</title>
    <ns>0</ns>
    <id>12655</id>
    <revision>
      <id>61415</id>
      <timestamp>2013-06-06T00:00:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="468">{{cpp/iterator/istream_iterator/title|operator*, operator-&gt;}}
{{cpp/iterator/istream_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1|
const T&amp; operator*() const;
}}
{{dcl |num=2|1=
const T* operator-&gt;() const;
}}
{{dcl end}}

Returns a pointer or a reference to the current element.

The behavior is undefined if the iterator is end-of-stream iterator.

===Parameters===
(none)

===Return value===
A pointer or a reference to the current element.

===Exceptions===
(none)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istream iterator/~istream iterator</title>
    <ns>0</ns>
    <id>15736</id>
    <revision>
      <id>88322</id>
      <timestamp>2016-11-16T15:39:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+ (including P0503R0)</comment>
      <text xml:space="preserve" bytes="488">{{cpp/iterator/istream_iterator/title|~istream_iterator}}
{{cpp/iterator/istream_iterator/navbar}}
{{dcl begin}}
{{dcl|1=
~istream_iterator() = default;
}}
{{dcl end}}

@1@ Destroys the iterator, including the cached value.
{{rev begin}}
{{rev|since=c++11|until=c++17|
If {{tt|T}} is a literal type, then this destructor is a trivial destructor
}}
{{rev|since=c++17|
If {{c|std::is_trivially_destructible_v&lt;T&gt;}} is {{tt|true}}, then this destructor is a trivial destructor.
}}
{{rev end}}</text>
      <sha1>l5cb3yrdvwnkkd9aqz1gf3gdbmicibi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istreambuf iterator</title>
    <ns>0</ns>
    <id>4856</id>
    <revision>
      <id>90520</id>
      <parentid>78514</parentid>
      <timestamp>2017-03-01T00:37:28Z</timestamp>
      <contributor>
        <ip>173.197.107.14</ip>
      </contributor>
      <comment>mzeren@vmware.com: bring into conformance with N4618 24.6.3.3 [istreambuf.iterator::op*] and 24.6.3.4 [istreambuf.iterator::op++], istreambuf_iterator does not have the broken behavior of istream_iterator.</comment>
      <text xml:space="preserve" bytes="4109">{{cpp/title|istreambuf_iterator}}
{{cpp/iterator/istreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl | until=c++17 | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt; &gt;
class istreambuf_iterator : public std::iterator&lt; std::input_iterator_tag,
                                                  CharT,
                                                  typename Traits::off_type,
                                                  /* unspecified, usually CharT* */,
                                                  CharT &gt;
}}
{{dcl | since=c++17 | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt; &gt;
class istreambuf_iterator;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::istreambuf_iterator}} is a single-pass input iterator that reads successive characters from the {{lc|std::basic_streambuf}} object for which it was constructed.

The default-constructed {{tt|std::istreambuf_iterator}} is known as the ''end-of-stream'' iterator. When a valid {{tt|std::istreambuf_iterator}} reaches the end of the underlying stream, it becomes equal to the end-of-stream iterator. Dereferencing or incrementing it further invokes undefined behavior.

{{tt|std::istreambuf_iterator}} has a trivial copy constructor, a constexpr default constructor, and a trivial destructor.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}}}}
{{dsc | {{tt|int_type}} | {{c|typename traits::int_type}}}}
{{dsc | {{tt|streambuf_type}} | {{c|std::basic_streambuf&lt;CharT, Traits&gt;}}}}
{{dsc | {{tt|istream_type}} | {{c|std::basic_istream&lt;CharT, Traits&gt;}}}}
{{dsc end}}

{{todo|the proxy member type}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc constructor}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc destructor}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc operator_arith}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc equal}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc operator_cmp}}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::input_iterator_tag|CharT|Traits::off_type|/* unspecified, usually CharT* */|CharT}}

===Example===
{{example
 | 
 | code=
#include &lt;vector&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    // typical use case: an input stream represented as a pair of iterators
    std::istringstream in(&quot;Hello, world&quot;);
    std::vector&lt;char&gt; v( (std::istreambuf_iterator&lt;char&gt;(in)),
                          std::istreambuf_iterator&lt;char&gt;() );
    std::cout &lt;&lt; &quot;v has &quot; &lt;&lt; v.size() &lt;&lt; &quot; bytes. &quot;;
    v.push_back('\0');
    std::cout &lt;&lt; &quot;it holds \&quot;&quot; &lt;&lt; &amp;v[0] &lt;&lt; &quot;\&quot;\n&quot;;


    // demonstration of the single-pass nature
    std::istringstream s(&quot;abc&quot;);
    std::istreambuf_iterator&lt;char&gt; i1(s), i2(s);
    std::cout &lt;&lt; &quot;i1 returns &quot; &lt;&lt; *i1 &lt;&lt; '\n'
              &lt;&lt; &quot;i2 returns &quot; &lt;&lt; *i2 &lt;&lt; '\n';
    ++i1;
    std::cout &lt;&lt; &quot;after incrementing i1, but not i2\n&quot;
              &lt;&lt; &quot;i1 returns &quot; &lt;&lt; *i1 &lt;&lt; '\n'
              &lt;&lt; &quot;i2 returns &quot; &lt;&lt; *i2 &lt;&lt; '\n';
    ++i2; // this makes the apparent value of *i2 to jump from 'a' to 'c'
    std::cout &lt;&lt; &quot;after incrementing i2, but not i1\n&quot;
              &lt;&lt; &quot;i1 returns &quot; &lt;&lt; *i1 &lt;&lt; '\n'
              &lt;&lt; &quot;i2 returns &quot; &lt;&lt; *i2 &lt;&lt; '\n';

}
 | output=
v has 12 bytes. it holds &quot;Hello, world&quot;
i1 returns a
i2 returns a
after incrementing i1, but not i2
i1 returns b
i2 returns a
after incrementing i2, but not i1
i1 returns b
i2 returns c
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc ostreambuf_iterator}}
{{dsc inc | cpp/iterator/dsc istream_iterator}}
{{dsc end}}

[[de:cpp/iterator/istreambuf iterator]]
[[es:cpp/iterator/istreambuf iterator]]
[[fr:cpp/iterator/istreambuf iterator]]
[[it:cpp/iterator/istreambuf iterator]]
[[ja:cpp/iterator/istreambuf iterator]]
[[pt:cpp/iterator/istreambuf iterator]]
[[ru:cpp/iterator/istreambuf iterator]]
[[zh:cpp/iterator/istreambuf iterator]]</text>
      <sha1>geg16r7m44we0mtl25963lual874yuv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istreambuf iterator/equal</title>
    <ns>0</ns>
    <id>12653</id>
    <revision>
      <id>61410</id>
      <timestamp>2013-06-05T23:30:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="558">{{cpp/iterator/istreambuf_iterator/title|equal}}
{{cpp/iterator/istreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl |
bool equal( const istreambuf_iterator&amp; it ) const;
}}
{{dcl end}}

Checks whether both {{c|*this}} and {{tt|it}} are valid, or both are invalid, regardless of the stream buffer objects they use.

===Parameters===
{{par begin}}
{{par | it | another stream buffer iterator to compare to}}
{{par end}}

===Return value===
{{c|true}} if both {{c|*this}} and {{tt|it}} are valid, or both are invalid, {{c|false}} otherwise.

===Exceptions===
(none)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istreambuf iterator/istreambuf iterator</title>
    <ns>0</ns>
    <id>12650</id>
    <revision>
      <id>91563</id>
      <parentid>88375</parentid>
      <timestamp>2017-03-31T19:50:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1152">{{cpp/iterator/istreambuf_iterator/title|istreambuf_iterator}}
{{cpp/iterator/istreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
istreambuf_iterator();
}}
{{dcl | since=c++11 |
constexpr istreambuf_iterator();
}}
{{dcl rev end}}
{{dcl | num=2 |1=
istreambuf_iterator( std::basic_istream&lt;CharT,Traits&gt;&amp; is );
}}
{{dcl | num=3 |1=
istreambuf_iterator( std::basic_streambuf&lt;CharT,Traits&gt;* s );
}}
{{dcl | since=c++11 | num=4 |1=
istreambuf_iterator( const istreambuf_iterator&amp; ) = default;
}}
{{dcl end}}

@1@ Constructs an end-of-stream iterator.

@2@ Initializes the iterator and stores the value of {{c|is.rdbuf()}} in a data member. If {{c|is.rdbuf()}} is null, then end-of-stream iterator is constructed. 

@3@ Initializes the iterator and stores the value of {{tt|s}} in a data member. If {{tt|s}} is null, then end-of-stream iterator is constructed. 

@4@ The copy constructor is explicitly defaulted.

===Parameters===
{{par begin}}
{{par | is | stream to obtain the stream buffer from}}
{{par | s | stream buffer to initialize the iterator with}}
{{par end}}

===Exceptions===
@1-4@ {{unreviewed noexcept}}</text>
      <sha1>49jkm36krhh5ucx3fecmd6b0ailbcjk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istreambuf iterator/operator arith</title>
    <ns>0</ns>
    <id>12652</id>
    <revision>
      <id>88374</id>
      <parentid>61413</parentid>
      <timestamp>2016-11-17T06:01:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Return value */ cleanup</comment>
      <text xml:space="preserve" bytes="956">{{cpp/iterator/istreambuf_iterator/title|operator++, operator++{{small|(int)}}}}
{{cpp/iterator/istreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1|
istreambuf_iterator&amp; operator++();
}}
{{dcl |num=2|1=
/* unspecified */ operator++(int);
}}
{{dcl end}}

Advances the iterator by calling {{c|sbuf_-&gt;sbumpc()}} where {{tt|sbuf_}} is the stored pointer to the stream buffer.

The behavior is undefined if the iterator is end-of-stream iterator.

===Parameters===
(none)

===Return value===
@1@ {{c|*this}}.

@2@ An unspecified struct {{tt|proxy}} holding the current character obtained via {{lc|operator*()}} for later retrieval. {{tt|proxy}} is implicitly convertible to {{tt|CharT}}.

@@ {{tt|proxy}} also holds a pointer to the stream buffer. {{tt|istreambuf_iterator}} can be constructed from {{tt|proxy}}, which is equivalent to constructing the {{tt|istreambuf_iterator}} from the stream buffer pointer held by {{tt|proxy}}.

===Exceptions===
(none)</text>
      <sha1>1t3i2odi5xahxq9sidkantzg77y86oj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istreambuf iterator/operator cmp</title>
    <ns>0</ns>
    <id>12654</id>
    <revision>
      <id>61417</id>
      <parentid>61411</parentid>
      <timestamp>2013-06-06T00:06:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="943">{{title | 1=operator==,!={{small|(std::istreambuf_iterator)}}}}
{{cpp/iterator/istreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1| 1=
template&lt; class CharT, class Traits &gt;
bool operator==( const istreambuf_iterator&lt;CharT,Traits&gt;&amp; lhs,
                 const istreambuf_iterator&lt;CharT,Traits&gt;&amp; rhs );
}}
{{dcl |num=2|1=
template&lt; class CharT, class Traits &gt;
bool operator!=( const istreambuf_iterator&lt;CharT,Traits&gt;&amp; lhs,
                 const istreambuf_iterator&lt;CharT,Traits&gt;&amp; rhs );
}}
{{dcl end}}

Checks whether both {{tt|lhs}} and {{tt|rhs}} are valid, or both are invalid, regardless of the stream buffer objects they use.

@1@ Equivalent to {{c|lhs.equal(rhs)}}.

@2@ Equivalent to {{c|!lhs.equal(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | stream buffer iterators to compare}}
{{par end}}

===Return value===
@1@ The result of {{c|lhs.equal(rhs)}}.

@2@ The result of {{c|!lhs.equal(rhs)}}.

===Exceptions===
(none)</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/istreambuf iterator/operator*</title>
    <ns>0</ns>
    <id>12651</id>
    <revision>
      <id>91841</id>
      <parentid>90700</parentid>
      <timestamp>2017-03-31T19:59:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="738">{{cpp/iterator/istreambuf_iterator/title|operator*, operator-&gt;}}
{{cpp/iterator/istreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl |num=1|
CharT operator*() const;
}}
{{dcl | num=2 | since=c++11 | until=c++17 |1=
pointer operator-&gt;() const;
}}
{{dcl end}}

Reads a single character by calling {{c|sbuf_-&gt;sgetc()}} where {{c|sbuf_}} is the  stored pointer to the stream buffer. 

The behavior is undefined if the iterator is end-of-stream iterator.

===Parameters===
(none)

===Return value===
@1@ The value of the obtained character.

@2@ An object of unspecified type, such that given an istreambuf iterator {{tt|i}}, the expressions {{c|(*i).m}} and {{c|i-&gt;m}} have the same effect. {{mark unreviewed dr|LWG|659}}

===Exceptions===
(none)</text>
      <sha1>odtfdfbvxq58a8s95j5abkamij346xh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/iterator</title>
    <ns>0</ns>
    <id>4907</id>
    <revision>
      <id>87572</id>
      <parentid>87549</parentid>
      <timestamp>2016-09-11T04:06:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 87549 by [[Special:Contributions/183.39.212.211|183.39.212.211]] ([[User talk:183.39.212.211|talk]]) was more true to being an input iterator before</comment>
      <text xml:space="preserve" bytes="3353">{{cpp/title|iterator}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | notes={{mark|deprecated in C++17}}| 1=
template&lt; 
    class Category,
    class T,
    class Distance = std::ptrdiff_t,
    class Pointer = T*,
    class Reference = T&amp; 
&gt; struct iterator;
}}
{{dcl end}}

{{tt|std::iterator}} is the base class provided to simplify definitions of the required types for iterators.

===Template parameters===
{{par begin}}
{{par | Category | the category of the iterator. Must be one of [[cpp/iterator/iterator_tags|iterator category tags]].}}
{{par | T | the type of the values that can be obtained by dereferencing the iterator. This type should be {{tt|void}} for output iterators.}}
{{par | Distance | a type that can be used to identify distance between iterators}}
{{par | Pointer | defines a pointer to the type iterated over ({{tt|T}}) }}
{{par | Reference | defines a reference to the type iterated over ({{tt|T}}) }}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|iterator_category}} | {{tt|Category}}}}
{{dsc | {{tt|value_type}} | {{tt|T}}}}
{{dsc | {{tt|difference_type}} | {{tt|Distance}}}}
{{dsc | {{tt|pointer}} | {{tt|Pointer}}}}
{{dsc | {{tt|reference}} | {{tt|Reference}}}}
{{dsc end}}

===Example===
{{example
 | The following example shows how to implement a [[cpp/concept/InputIterator|input iterator]] by inheriting from std::iterator
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

template&lt;long FROM, long TO&gt;
class Range {
public:
    // member typedefs provided through inheriting from std::iterator
    class iterator: public std::iterator&lt;
                        std::input_iterator_tag,   // iterator_category
                        long,                      // value_type
                        long,                      // difference_type
                        const long*,               // pointer
                        long                       // reference
                                      &gt;{
        long num = FROM;
    public:
        explicit iterator(long _num = 0) : num(_num) {}
        iterator&amp; operator++() {num = TO &gt;= FROM ? num + 1: num - 1; return *this;}
        iterator operator++(int) {iterator retval = *this; ++(*this); return retval;}
        bool operator==(iterator other) const {return num == other.num;}
        bool operator!=(iterator other) const {return !(*this == other);}
        reference operator*() const {return num;}
    };
    iterator begin() {return iterator(FROM);}
    iterator end() {return iterator(TO &gt;= FROM? TO+1 : TO-1);}
};

int main() {
    // std::find requires a input iterator
    auto range = Range&lt;15, 25&gt;();
    auto itr = std::find(range.begin(), range.end(), 18);
    std::cout &lt;&lt; *itr &lt;&lt; '\n'; // 18

    // Range::iterator also satisfies range-based for requirements
    for(long l : Range&lt;3, 5&gt;()) {
        std::cout &lt;&lt; l &lt;&lt; ' '; // 3 4 5
    }
    std::cout &lt;&lt; '\n';
}
 | output=
18
3 4 5 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc iterator_traits}}
{{dsc inc | cpp/iterator/dsc iterator_tags}}
{{dsc end}}

[[de:cpp/iterator/iterator]]
[[es:cpp/iterator/iterator]]
[[fr:cpp/iterator/iterator]]
[[it:cpp/iterator/iterator]]
[[ja:cpp/iterator/iterator]]
[[pt:cpp/iterator/iterator]]
[[ru:cpp/iterator/iterator]]
[[zh:cpp/iterator/iterator]]</text>
      <sha1>l6wuk5qm98iojhfwu3l30bwizq9qwk4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/iterator tags</title>
    <ns>0</ns>
    <id>4934</id>
    <revision>
      <id>86398</id>
      <parentid>77889</parentid>
      <timestamp>2016-06-29T13:05:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>one example per page</comment>
      <text xml:space="preserve" bytes="4270">{{cpp/title|input_iterator_tag|output_iterator_tag|forward_iterator_tag|bidirectional_iterator_tag|random_access_iterator_tag}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | | 1=
struct input_iterator_tag { };
}}
{{dcl | | 1=
struct output_iterator_tag { };
}}
{{dcl | | 1=
struct forward_iterator_tag : public input_iterator_tag { };
}}
{{dcl | | 1=
struct bidirectional_iterator_tag : public forward_iterator_tag { };
}}
{{dcl | | 1=
struct random_access_iterator_tag : public bidirectional_iterator_tag { };
}}
{{dcl end}}

Defines the category of an iterator. Each tag is an empty type and corresponds to one of the five iterator categories:
* {{tt|input_iterator_tag}} corresponds to {{concept|InputIterator}}.
* {{tt|output_iterator_tag}} corresponds to {{concept|OutputIterator}}.
* {{tt|forward_iterator_tag}} corresponds to {{concept|ForwardIterator}}.
* {{tt|bidirectional_iterator_tag}} corresponds to {{concept|BidirectionalIterator}}.
* {{tt|random_access_iterator_tag}} corresponds to {{concept|RandomAccessIterator}}.

Iterator category tags carry information that can be used to select the most efficient algorithms for the specific requirement set that is implied by the category.

For every iterator type, a typedef {{c|std::iterator_traits&lt;Iterator&gt;::iterator_category}} is available, which is an alias to one of these five tag types.

{{rev begin}}
{{rev | since=c++17|
===Notes===
There is no separate tag for {{concept|ContiguousIterator}}
}}
{{rev end}}

===Example===
{{example
 | Common technique for algorithm selection based on iterator category tags is to use a dispatcher function (the alternative is {{lc|std::enable_if}})
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;list&gt;
#include &lt;iterator&gt;

template&lt; class BDIter &gt;
void alg(BDIter, BDIter, std::bidirectional_iterator_tag)
{
    std::cout &lt;&lt; &quot;alg() called for bidirectional iterator\n&quot;;
}

template &lt;class RAIter&gt;
void alg(RAIter, RAIter, std::random_access_iterator_tag)
{
    std::cout &lt;&lt; &quot;alg() called for random-access iterator\n&quot;;
}

template&lt; class Iter &gt;
void alg(Iter first, Iter last)
{
    alg(first, last,
        typename std::iterator_traits&lt;Iter&gt;::iterator_category());
}

int main()
{
    std::vector&lt;int&gt; v;
    alg(v.begin(), v.end());

    std::list&lt;int&gt; l;
    alg(l.begin(), l.end());

//    std::istreambuf_iterator&lt;char&gt; i1(std::cin), i2;
//    alg(i1, i2); // compile error: no matching function for call
}
 | output=
alg() called for random-access iterator
alg() called for bidirectional iterator
}}

&lt;!-- dropped because one example per page, and because both tag dispatch and (soon) concepts are generally preferred

===Example===
{{example
 | Algorithm selection based on iterator category tags using {{lc|std::enable_if}}
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;list&gt;
#include &lt;iterator&gt;

template&lt;typename Condition, typename T = void&gt;
using EnableIf_t = typename std::enable_if&lt;Condition::value, T&gt;::type;

template&lt;typename Iterator, typename IteratorTag&gt;
using IsSameIteratorCond = 
    std::is_same&lt;IteratorTag, 
    typename std::iterator_traits&lt;Iterator&gt;::iterator_category&gt;;

template&lt;
    typename BDIter, 
    typename = EnableIf_t&lt;IsSameIteratorCond&lt;BDIter, std::bidirectional_iterator_tag&gt;&gt;&gt;
void alg(BDIter, BDIter)
{
    std::cout &lt;&lt; &quot;alg() called for bidirectional iterator\n&quot;;
}

template&lt;
    typename RAIter, 
    typename = EnableIf_t&lt;IsSameIteratorCond&lt;RAIter, std::random_access_iterator_tag&gt;&gt;, 
    typename = void&gt; // dummy value to avoid template re-definition error
void alg(RAIter, RAIter)
{
    std::cout &lt;&lt; &quot;alg() called for random-access iterator\n&quot;;
}

int main()
{
    std::vector&lt;int&gt; v;
    alg(v.begin(), v.end());
 
    std::list&lt;int&gt; l;
    alg(l.begin(), l.end());
}
 | output=
alg() called for random-access iterator
alg() called for bidirectional iterator
}}
--&gt;
===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc iterator}}
{{dsc inc | cpp/iterator/dsc iterator_traits}}
{{dsc end}}

[[de:cpp/iterator/iterator tags]]
[[es:cpp/iterator/iterator tags]]
[[fr:cpp/iterator/iterator tags]]
[[it:cpp/iterator/iterator tags]]
[[ja:cpp/iterator/iterator tags]]
[[pt:cpp/iterator/iterator tags]]
[[ru:cpp/iterator/iterator tags]]
[[zh:cpp/iterator/iterator tags]]</text>
      <sha1>b0xn0fh0qzszp27q66nd1boie5rsrdp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/iterator traits</title>
    <ns>0</ns>
    <id>4935</id>
    <revision>
      <id>92141</id>
      <parentid>88325</parentid>
      <timestamp>2017-04-07T09:51:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="4702">{{cpp/title|iterator_traits}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | 1=
template&lt; class Iterator&gt;
struct iterator_traits;
}}
{{dcl | 1=
template&lt; class T &gt;
struct iterator_traits&lt;T*&gt;;
}}
{{dcl | 1=
template&lt; class T &gt;
struct iterator_traits&lt;const T*&gt;;
}}
{{dcl end}}

{{tt|std::iterator_traits}} is the type trait class that provides uniform interface to the properties of {{concept|Iterator}} types. This makes it possible to implement algorithms only in terms of iterators.

The class defines the following types:

* {{tt|difference_type}} - a type that can be used to identify distance between iterators
* {{tt|value_type}} - the type of the values that can be obtained by dereferencing the iterator. This type is {{tt|void}} for output iterators.
* {{tt|pointer}} -  defines a pointer to the type iterated over ({{tt|value_type}}) 
* {{tt|reference}} -  defines a reference to the type iterated over ({{tt|value_type}}) 
* {{tt|iterator_category}} - the category of the iterator. Must be one of [[cpp/iterator/iterator_tags|iterator category tags]]. 

The template can be specialized for user-defined iterators so that the information about the iterator can be retrieved even if the type does not provide the usual typedefs.

===Template parameters===
{{par begin}}
{{par | Iterator | the iterator type to retrieve properties for}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|difference_type}} | {{tt|Iterator::difference_type}}}}
{{dsc | {{tt|value_type}} | {{tt|Iterator::value_type}}}}
{{dsc | {{tt|pointer}} | {{tt|Iterator::pointer}}}}
{{dsc | {{tt|reference}} | {{tt|Iterator::reference}}}}
{{dsc | {{tt|iterator_category}} | {{tt|Iterator::iterator_category}}}}
{{dsc end}}

{{rev begin}}
{{rev|since=c++17|
If {{tt|Iterator}} does not have the five member types {{tt|difference_type}}, {{tt|value_type}}, {{tt|pointer}}, {{tt|reference}}, and {{tt|iterator_category}}, then this template has no members by any of those names ({{c|std::iterator_traits}} is SFINAE-friendly)
}}
{{rev end}}

===Specializations===

This type trait may be specialized for user-provided types that may be used as iterators. The standard library provides two partial specializations for pointer types T*, which makes it possible to use all iterator-based algorithms with raw pointers.

===={{tt|T*}} specialization member types====
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}}}}
{{dsc | {{tt|value_type}} | {{tt|T}}}}
{{dsc | {{tt|pointer}} | {{tt|T*}}}}
{{dsc | {{tt|reference}} | {{tt|T&amp;}}}}
{{dsc | {{tt|iterator_category}} | {{lc|std::random_access_iterator_tag}}}}
{{dsc end}}

===={{tt|const T*}} specialization member types====
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}}}}
{{dsc | {{tt|value_type}} | {{tt|T}}}}
{{dsc | {{tt|pointer}} | {{tt|const T*}}}}
{{dsc | {{tt|reference}} | {{tt|const T&amp;}}}}
{{dsc | {{tt|iterator_category}} | {{lc|std::random_access_iterator_tag}}}}
{{dsc end}}

===Example===
{{example
 | The following example shows a general-purpose {{tt|reverse()}} implementation for bidirectional iterators
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;list&gt;

template&lt;class BidirIt&gt;
void my_reverse(BidirIt first, BidirIt last)
{
    typename std::iterator_traits&lt;BidirIt&gt;::difference_type n = std::distance(first, last);
    --n;
    while(n &gt; 0) {
        typename std::iterator_traits&lt;BidirIt&gt;::value_type tmp = *first;
        *first++ = *--last;
        *last = tmp;
        n -= 2;
    }
}

int main()
{
    std::vector&lt;int&gt; v{1, 2, 3, 4, 5};
    my_reverse(v.begin(), v.end());
    for (int n : v) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';

    std::list&lt;int&gt; l{1, 2, 3, 4, 5};
    my_reverse(l.begin(), l.end());
    for (auto n : l) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';

    int a[] = {1, 2, 3, 4, 5};
    my_reverse(a, a+5);
    for (int i=0; i&lt;5; ++i) {
        std::cout &lt;&lt; a[i] &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';

//    std::istreambuf_iterator&lt;char&gt; i1(std::cin), i2;
//    my_reverse(i1, i2); // compilation error

}
 | output=
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc iterator}}
{{dsc inc | cpp/iterator/dsc iterator_tags}}
{{dsc end}}

[[de:cpp/iterator/iterator traits]]
[[es:cpp/iterator/iterator traits]]
[[fr:cpp/iterator/iterator traits]]
[[it:cpp/iterator/iterator traits]]
[[ja:cpp/iterator/iterator traits]]
[[pt:cpp/iterator/iterator traits]]
[[ru:cpp/iterator/iterator traits]]
[[zh:cpp/iterator/iterator traits]]</text>
      <sha1>2bbmpdwpxi7lg518paz9ajr0cbzd4ie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/make move iterator</title>
    <ns>0</ns>
    <id>4855</id>
    <revision>
      <id>83760</id>
      <parentid>83532</parentid>
      <timestamp>2016-03-08T03:46:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0031r0 (constexpr)</comment>
      <text xml:space="preserve" bytes="2450">{{cpp/title|make_move_iterator}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl| since=c++11 | until=c++14 |
template&lt; class Iterator &gt;
std::move_iterator&lt;Iterator&gt; make_move_iterator( const Iterator&amp; i );
}}
{{dcl| since=c++14 | until=c++17 |
template&lt; class Iterator &gt;
std::move_iterator&lt;Iterator&gt; make_move_iterator( Iterator i );
}}
{{dcl| since=c++17 |
template&lt; class Iterator &gt;
constexpr std::move_iterator&lt;Iterator&gt; make_move_iterator( Iterator i );
}}
{{dcl rev end}}
{{dcl end}}

{{tt|make_move_iterator}} is a convenience function template that constructs a {{lc|std::move_iterator}} for the given iterator {{tt|i}} with the type deduced from the type of the argument.

===Parameters===
{{par begin}}
{{par | i | input iterator to be converted to move iterator}}
{{par end}}

===Return value===
A {{lc|std::move_iterator}} which can be used to move from the elements accessed through {{tt|i}}

===Possible implementation===
{{eq fun | 1=
template&lt; class Iterator &gt;
std::move_iterator&lt;Iterator&gt; make_move_iterator( Iterator i )
{
    return std::move_iterator&lt;Iterator&gt;(i);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;

int main()
{
    std::list&lt;std::string&gt; s{&quot;one&quot;, &quot;two&quot;, &quot;three&quot;};

    std::vector&lt;std::string&gt; v1(s.begin(), s.end()); // copy

    std::vector&lt;std::string&gt; v2(std::make_move_iterator(s.begin()),
                                std::make_move_iterator(s.end())); // move

    std::cout &lt;&lt; &quot;v1 now holds: &quot;;
    for (auto str : v1)
            std::cout &lt;&lt; &quot;\&quot;&quot; &lt;&lt; str &lt;&lt; &quot;\&quot; &quot;;
    std::cout &lt;&lt; &quot;\nv2 now holds: &quot;;
    for (auto str : v2)
            std::cout &lt;&lt; &quot;\&quot;&quot; &lt;&lt; str &lt;&lt; &quot;\&quot; &quot;;
    std::cout &lt;&lt; &quot;\noriginal list now holds: &quot;;
    for (auto str : s)
            std::cout &lt;&lt; &quot;\&quot;&quot; &lt;&lt; str &lt;&lt; &quot;\&quot; &quot;;
    std::cout &lt;&lt; '\n';
}
 | p=true
 | output=
v1 now holds: &quot;one&quot; &quot;two&quot; &quot;three&quot;
v2 now holds: &quot;one&quot; &quot;two&quot; &quot;three&quot;
original list now holds: &quot;&quot; &quot;&quot; &quot;&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc move_iterator}}
{{dsc inc | cpp/utility/dsc move}}
{{dsc end}}

[[de:cpp/iterator/make move iterator]]
[[es:cpp/iterator/make move iterator]]
[[fr:cpp/iterator/make move iterator]]
[[it:cpp/iterator/make move iterator]]
[[ja:cpp/iterator/make move iterator]]
[[pt:cpp/iterator/make move iterator]]
[[ru:cpp/iterator/make move iterator]]
[[zh:cpp/iterator/make move iterator]]</text>
      <sha1>dhp6ok3e277kdea0a1056jfhwugj8vs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/make reverse iterator</title>
    <ns>0</ns>
    <id>13175</id>
    <revision>
      <id>83759</id>
      <parentid>77880</parentid>
      <timestamp>2016-03-08T03:44:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0031r0 (constexpr)</comment>
      <text xml:space="preserve" bytes="1990">{{cpp/title|make_reverse_iterator}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl| since=c++14 | until=c++17|
template &lt;class Iterator&gt;
std::reverse_iterator&lt;Iterator&gt; make_reverse_iterator( Iterator i );
}}
{{dcl| since=c++17|
template &lt;class Iterator&gt;
constexpr std::reverse_iterator&lt;Iterator&gt; make_reverse_iterator( Iterator i );
}}
{{dcl end}}

{{tt|make_reverse_iterator}} is a convenience function template that constructs a {{lc|std::reverse_iterator}} for the given iterator {{tt|i}} with the type deduced from the type of the argument.

===Parameters===
{{par begin}}
{{par | i | input iterator to be converted to reverse iterator}}
{{par end}}

===Return value===
A {{lc|std::reverse_iterator}} constructed from {{tt|i}}

===Possible implementation===
{{eq fun | 1=
template&lt; class Iterator &gt;
std::reverse_iterator&lt;Iterator&gt; make_reverse_iterator( Iterator i )
{
    return std::reverse_iterator&lt;Iterator&gt;(i);
}
}}

===Example===
{{example
  |code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

int main() {
    auto v = std::vector&lt;int&gt;{ 1, 3, 10, 8, 22 };
    
    std::sort(v.begin(), v.end());
    std::copy(v.begin(), v.end(), std::ostream_iterator&lt;int&gt;(std::cout, &quot;, &quot;));

    std::cout &lt;&lt; '\n';
    
    std::copy(
        std::make_reverse_iterator(v.end()), 
        std::make_reverse_iterator(v.begin()),
        std::ostream_iterator&lt;int&gt;(std::cout, &quot;, &quot;));
}

  |output=
1, 3, 8, 10, 22, 
22, 10, 8, 3, 1, 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc reverse_iterator}}
{{dsc inc | cpp/iterator/dsc rbegin}}
{{dsc inc | cpp/iterator/dsc rend}}
{{dsc end}}

[[de:cpp/iterator/make reverse iterator]]
[[es:cpp/iterator/make reverse iterator]]
[[fr:cpp/iterator/make reverse iterator]]
[[it:cpp/iterator/make reverse iterator]]
[[ja:cpp/iterator/make reverse iterator]]
[[pt:cpp/iterator/make reverse iterator]]
[[ru:cpp/iterator/make reverse iterator]]
[[zh:cpp/iterator/make reverse iterator]]</text>
      <sha1>5v5q5z290ciu892sm6vh39ehenxfm1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator</title>
    <ns>0</ns>
    <id>4930</id>
    <revision>
      <id>84389</id>
      <parentid>78253</parentid>
      <timestamp>2016-03-17T20:59:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Example */ p=true since we are printing moved-from strings</comment>
      <text xml:space="preserve" bytes="3645">{{cpp/title|move_iterator}}
{{cpp/iterator/move_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | since=c++11 | 1=
template&lt; class Iterator &gt;
class move_iterator;
}}
{{dcl end}}

{{tt|std::move_iterator}} is an iterator adaptor which behaves exactly like the underlying iterator (which must be at least an {{concept|InputIterator}}), except that dereferencing converts the value returned by the underlying iterator into an rvalue. If this iterator is used as an input iterator, the effect is that the values are moved from, rather than copied from.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|iterator_type}} | {{tt|Iterator}}}}
{{dsc | {{tt|difference_type}} | {{c|std::iterator_traits&lt;Iterator&gt;::difference_type}}}}
{{dsc | {{tt|pointer}} | {{tt|Iterator}}}}
{{dsc | {{tt|value_type}} | {{c|std::iterator_traits&lt;Iterator&gt;::value_type}}}}
{{dsc | {{tt|iterator_category}} | {{c|std::iterator_traits&lt;Iterator&gt;::iterator_category}}}}
{{dsc | {{tt|reference}} | {{rev inl|until=c++17|{{tt|value_type&amp;&amp;}}}}{{rev inl|since=c++17|
If {{tt|std::iterator_traits&lt;Iterator&gt;::reference}} is a reference, this is the rvalue reference version of the same type. Otherwise (such as if the wrapped iterator returns by value), this is {{tt|std::iterator_traits&lt;Iterator&gt;::reference}} unchanged}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc constructor | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator{{=}} | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc base | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator* | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_at | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_arith | move_iterator}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Definition}}
{{dsc | {{tt|current}} {{mark|private}} | a copy of the base() iterator, the name is for exposition only}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_cmp | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator+ | move_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator- | move_iterator}}
{{dsc end}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;numeric&gt;
#include &lt;string&gt;

int main()
{
    std::vector&lt;std::string&gt; v{&quot;this&quot;, &quot;is&quot;, &quot;an&quot;, &quot;example&quot;};

    std::cout &lt;&lt; &quot;Old contents of the vector: &quot;;
    for (auto&amp; s : v)
        std::cout &lt;&lt; '&quot;' &lt;&lt; s &lt;&lt; &quot;\&quot; &quot;;

    typedef std::vector&lt;std::string&gt;::iterator iter_t;
    std::string concat = std::accumulate(
                             std::move_iterator&lt;iter_t&gt;(v.begin()),
                             std::move_iterator&lt;iter_t&gt;(v.end()),
                             std::string());  // Can be simplified with std::make_move_iterator

    std::cout &lt;&lt; &quot;\nConcatenated as string: &quot; &lt;&lt; concat &lt;&lt; '\n'
              &lt;&lt; &quot;New contents of the vector: &quot;;
    for (auto&amp; s : v)
        std::cout &lt;&lt; '&quot;' &lt;&lt; s &lt;&lt; &quot;\&quot; &quot;;
    std::cout &lt;&lt; '\n';
}
 | output=
Old contents of the vector: &quot;this&quot; &quot;is&quot; &quot;an&quot; &quot;example&quot;
Concatenated as string: thisisanexample
New contents of the vector: &quot;&quot; &quot;&quot; &quot;&quot; &quot;&quot;
|p = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc make_move_iterator}}
{{dsc end}}

[[de:cpp/iterator/move iterator]]
[[es:cpp/iterator/move iterator]]
[[fr:cpp/iterator/move iterator]]
[[it:cpp/iterator/move iterator]]
[[ja:cpp/iterator/move iterator]]
[[pt:cpp/iterator/move iterator]]
[[ru:cpp/iterator/move iterator]]
[[zh:cpp/iterator/move iterator]]</text>
      <sha1>t4bcpdr0r22xgxaijri545tojmhvs7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/base</title>
    <ns>0</ns>
    <id>8726</id>
    <revision>
      <id>50879</id>
      <parentid>42254</parentid>
      <timestamp>2013-06-01T03:42:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="369">{{include page|cpp/iterator/adaptor/base|move_iterator}}

[[de:cpp/iterator/move iterator/base]]
[[es:cpp/iterator/move iterator/base]]
[[fr:cpp/iterator/move iterator/base]]
[[it:cpp/iterator/move iterator/base]]
[[ja:cpp/iterator/move iterator/base]]
[[pt:cpp/iterator/move iterator/base]]
[[ru:cpp/iterator/move iterator/base]]
[[zh:cpp/iterator/move iterator/base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/move iterator</title>
    <ns>0</ns>
    <id>8716</id>
    <revision>
      <id>50880</id>
      <parentid>42245</parentid>
      <timestamp>2013-06-01T03:43:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/iterator/adaptor/constructor|move_iterator}}

[[de:cpp/iterator/move iterator/move iterator]]
[[es:cpp/iterator/move iterator/move iterator]]
[[fr:cpp/iterator/move iterator/move iterator]]
[[it:cpp/iterator/move iterator/move iterator]]
[[ja:cpp/iterator/move iterator/move iterator]]
[[pt:cpp/iterator/move iterator/move iterator]]
[[ru:cpp/iterator/move iterator/move iterator]]
[[zh:cpp/iterator/move iterator/move iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/operator arith</title>
    <ns>0</ns>
    <id>8735</id>
    <revision>
      <id>50882</id>
      <parentid>42201</parentid>
      <timestamp>2013-06-01T03:43:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="459">{{include page|cpp/iterator/adaptor/operator_arith|move_iterator}}

[[de:cpp/iterator/move iterator/operator arith]]
[[es:cpp/iterator/move iterator/operator arith]]
[[fr:cpp/iterator/move iterator/operator arith]]
[[it:cpp/iterator/move iterator/operator arith]]
[[ja:cpp/iterator/move iterator/operator arith]]
[[pt:cpp/iterator/move iterator/operator arith]]
[[ru:cpp/iterator/move iterator/operator arith]]
[[zh:cpp/iterator/move iterator/operator arith]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/operator at</title>
    <ns>0</ns>
    <id>8730</id>
    <revision>
      <id>50883</id>
      <parentid>42190</parentid>
      <timestamp>2013-06-01T03:43:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="432">{{include page|cpp/iterator/adaptor/operator_at|move_iterator}}

[[de:cpp/iterator/move iterator/operator at]]
[[es:cpp/iterator/move iterator/operator at]]
[[fr:cpp/iterator/move iterator/operator at]]
[[it:cpp/iterator/move iterator/operator at]]
[[ja:cpp/iterator/move iterator/operator at]]
[[pt:cpp/iterator/move iterator/operator at]]
[[ru:cpp/iterator/move iterator/operator at]]
[[zh:cpp/iterator/move iterator/operator at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/operator cmp</title>
    <ns>0</ns>
    <id>8731</id>
    <revision>
      <id>50884</id>
      <parentid>42182</parentid>
      <timestamp>2013-06-01T03:43:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="441">{{include page|cpp/iterator/adaptor/operator_cmp|move_iterator}}

[[de:cpp/iterator/move iterator/operator cmp]]
[[es:cpp/iterator/move iterator/operator cmp]]
[[fr:cpp/iterator/move iterator/operator cmp]]
[[it:cpp/iterator/move iterator/operator cmp]]
[[ja:cpp/iterator/move iterator/operator cmp]]
[[pt:cpp/iterator/move iterator/operator cmp]]
[[ru:cpp/iterator/move iterator/operator cmp]]
[[zh:cpp/iterator/move iterator/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/operator*</title>
    <ns>0</ns>
    <id>8728</id>
    <revision>
      <id>83773</id>
      <parentid>78252</parentid>
      <timestamp>2016-03-08T04:14:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0031r0 (constexpr)</comment>
      <text xml:space="preserve" bytes="1309">{{cpp/iterator/move_iterator/title | operator*,-&gt; }}
{{cpp/iterator/move_iterator/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | until=c++17|
reference operator* () const;
}}
{{dcl | since=c++17|
constexpr reference operator* () const;
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++17| 
pointer operator-&gt;() const;
}}
{{dcl | since=c++17| 
constexpr pointer operator-&gt;() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns a rvalue-reference or pointer to the current element.

{{rev begin}}
{{rev|until=c++17|
@1@ Equivalent to {{c|1=std::move(*current)}};
}}
{{rev|since=c++17|
@1@ Equivalent to {{c|1=static_cast&lt;reference&gt;(*current)}};
}}
{{rev end}}
@2@ Equivalent to {{c|current}}.

===Parameters===
(none)

===Return value===
Rvalue-reference or pointer to the current element.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_at|move_iterator}}
{{dsc end}}

[[de:cpp/iterator/move iterator/operator*]]
[[es:cpp/iterator/move iterator/operator*]]
[[fr:cpp/iterator/move iterator/operator*]]
[[it:cpp/iterator/move iterator/operator*]]
[[ja:cpp/iterator/move iterator/operator*]]
[[pt:cpp/iterator/move iterator/operator*]]
[[ru:cpp/iterator/move iterator/operator*]]
[[zh:cpp/iterator/move iterator/operator*]]</text>
      <sha1>t9uq0koy4zmfnwg72q8w70h126c4sei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/operator+</title>
    <ns>0</ns>
    <id>8741</id>
    <revision>
      <id>42226</id>
      <parentid>36887</parentid>
      <timestamp>2012-11-02T22:32:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="401">{{cpp/iterator/adaptor/operator+|move_iterator}}

[[de:cpp/iterator/move iterator/operator+]]
[[es:cpp/iterator/move iterator/operator+]]
[[fr:cpp/iterator/move iterator/operator+]]
[[it:cpp/iterator/move iterator/operator+]]
[[ja:cpp/iterator/move iterator/operator+]]
[[pt:cpp/iterator/move iterator/operator+]]
[[ru:cpp/iterator/move iterator/operator+]]
[[zh:cpp/iterator/move iterator/operator+]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/operator-</title>
    <ns>0</ns>
    <id>8737</id>
    <revision>
      <id>50881</id>
      <parentid>42218</parentid>
      <timestamp>2013-06-01T03:43:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="414">{{include page|cpp/iterator/adaptor/operator-|move_iterator}}

[[de:cpp/iterator/move iterator/operator-]]
[[es:cpp/iterator/move iterator/operator-]]
[[fr:cpp/iterator/move iterator/operator-]]
[[it:cpp/iterator/move iterator/operator-]]
[[ja:cpp/iterator/move iterator/operator-]]
[[pt:cpp/iterator/move iterator/operator-]]
[[ru:cpp/iterator/move iterator/operator-]]
[[zh:cpp/iterator/move iterator/operator-]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/move iterator/operator=</title>
    <ns>0</ns>
    <id>8722</id>
    <revision>
      <id>42209</id>
      <parentid>36844</parentid>
      <timestamp>2012-11-02T22:28:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="405">{{cpp/iterator/adaptor/operator{{=}}|move_iterator}}

[[de:cpp/iterator/move iterator/operator=]]
[[es:cpp/iterator/move iterator/operator=]]
[[fr:cpp/iterator/move iterator/operator=]]
[[it:cpp/iterator/move iterator/operator=]]
[[ja:cpp/iterator/move iterator/operator=]]
[[pt:cpp/iterator/move iterator/operator=]]
[[ru:cpp/iterator/move iterator/operator=]]
[[zh:cpp/iterator/move iterator/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/next</title>
    <ns>0</ns>
    <id>2735</id>
    <revision>
      <id>86913</id>
      <parentid>86912</parentid>
      <timestamp>2016-07-15T03:23:41Z</timestamp>
      <contributor>
        <ip>132.188.64.219</ip>
      </contributor>
      <text xml:space="preserve" bytes="2012">{{cpp/title| next}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | since=c++11 | notes={{mark until c++17}} |
template&lt; class ForwardIt &gt;
ForwardIt next(
  ForwardIt it, 
  typename std::iterator_traits&lt;ForwardIt&gt;::difference_type n {{=}} 1 );
}}
{{dcl | since=c++17 |
template&lt; class InputIt &gt;
constexpr InputIt next(
  InputIt it, 
  typename std::iterator_traits&lt;InputIt&gt;::difference_type n {{=}} 1 );
}}
{{dcl end}}

Return the {{c|n}}th successor of iterator {{c|it}}.

===Parameters===
{{par begin}}
{{par | it | an iterator }}
{{par | n | number of elements to advance}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Return value===
The {{c|n}}th successor of iterator {{c|it}}.

===Possible implementation===
{{eq fun |
template&lt;class ForwardIt&gt;
ForwardIt next(ForwardIt it,
               typename std::iterator_traits&lt;ForwardIt&gt;::difference_type n {{=}} 1)
{
    std::advance(it, n);
    return it;
}
}}

===Notes===
Although the expression {{c|++c.begin()}} often compiles, it is not guaranteed to do so: {{c|c.begin()}} is an rvalue expression, and there is no {{concept|BidirectionalIterator}} requirement that specifies that increment of an rvalue is guaranteed to work. In particular, when iterators are implemented as pointers, {{c|++c.begin()}} does not compile, while {{c|std::next(c.begin())}} does.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

int main() 
{
    std::vector&lt;int&gt; v{ 3, 1, 4 };
    
    auto it = v.begin();

    auto nx = std::next(it, 2);

    std::cout &lt;&lt; *it &lt;&lt; ' ' &lt;&lt; *nx &lt;&lt; '\n';
}
 | output=3 4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc prev}}
{{dsc inc | cpp/iterator/dsc advance}}
{{dsc end}}

[[de:cpp/iterator/next]]
[[es:cpp/iterator/next]]
[[fr:cpp/iterator/next]]
[[it:cpp/iterator/next]]
[[ja:cpp/iterator/next]]
[[pt:cpp/iterator/next]]
[[ru:cpp/iterator/next]]
[[zh:cpp/iterator/next]]</text>
      <sha1>lmhderlzcsmaaugwm1n6isnr2wog282</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostream iterator</title>
    <ns>0</ns>
    <id>4913</id>
    <revision>
      <id>80139</id>
      <parentid>78510</parentid>
      <timestamp>2015-07-30T02:19:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>seealso ostream_joiner</comment>
      <text xml:space="preserve" bytes="3160">{{cpp/title|ostream_iterator}}
{{cpp/iterator/ostream_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl | until=c++17 | 1=
template&lt; class T,
          class CharT = char,
          class Traits = std::char_traits&lt;CharT&gt; &gt;
class ostream_iterator : public std::iterator&lt;std::output_iterator_tag,
                                              void, void, void, void&gt;
}}
{{dcl | since=c++17 | 1=
template&lt; class T,
          class CharT = char,
          class Traits = std::char_traits&lt;CharT&gt;&gt;
class ostream_iterator;
}}
{{dcl end}}

{{tt|std::ostream_iterator}} is a single-pass {{concept|OutputIterator}} that writes successive objects of type {{tt|T}} into the {{lc|std::basic_ostream}} object for which it was constructed, using {{tt|operator&lt;&lt;}}. Optional delimiter string is written to the output stream after every write operation. The write operation is performed when the iterator (whether dereferenced or not) is assigned to. Incrementing the {{tt|std::ostream_iterator}} is a no-op.

In a typical implementation, the only data members of {{tt|std::ostream_iterator}} are a pointer to the associated {{tt|std::basic_ostream}} and a pointer to the first character in the delimiter string.

When writing characters, {{lc|std::ostreambuf_iterator}} is more efficient, since it avoids the overhead of constructing and destructing the sentry object once per character.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}}}}
{{dsc | {{tt|ostream_type}} | {{c|std::basic_ostream&lt;CharT, Traits&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/ostream_iterator/dsc constructor}}
{{dsc inc | cpp/iterator/ostream_iterator/dsc destructor}}
{{dsc inc | cpp/iterator/ostream_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/iterator/ostream_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/ostream_iterator/dsc operator_arith}}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::output_iterator_tag|void|void|void|void}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;
#include &lt;numeric&gt;

int main()
{
    std::istringstream str(&quot;0.1 0.2 0.3 0.4&quot;);
    std::partial_sum(std::istream_iterator&lt;double&gt;(str),
                      std::istream_iterator&lt;double&gt;(),
                      std::ostream_iterator&lt;double&gt;(std::cout, &quot; &quot;));
}
 | output=
0.1 0.3 0.6 1 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc ostreambuf_iterator}}
{{dsc inc | cpp/iterator/dsc istream_iterator}}
{{dsc tclass | cpp/experimental/ostream_joiner | title=std::experimental::ostream_joiner | An output iterator that writes successive elements into an output stream, separating adjacent elements with a delimiter | notes={{mark since libfund_ts_2 }} }}
{{dsc end}}

[[de:cpp/iterator/ostream iterator]]
[[es:cpp/iterator/ostream iterator]]
[[fr:cpp/iterator/ostream iterator]]
[[it:cpp/iterator/ostream iterator]]
[[ja:cpp/iterator/ostream iterator]]
[[pt:cpp/iterator/ostream iterator]]
[[ru:cpp/iterator/ostream iterator]]
[[zh:cpp/iterator/ostream iterator]]</text>
      <sha1>cfn20v7feiwt07acua0ws0og7u7l5qs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostream iterator/operator arith</title>
    <ns>0</ns>
    <id>9128</id>
    <revision>
      <id>48475</id>
      <parentid>42153</parentid>
      <timestamp>2013-05-29T15:54:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[cpp/iterator/ostream iterator/operator++]] to [[cpp/iterator/ostream iterator/operator arith]]: move to correct location</comment>
      <text xml:space="preserve" bytes="438">{{cpp/iterator/inserter/operator++|ostream_iterator}}

[[de:cpp/iterator/ostream iterator/operator++]]
[[es:cpp/iterator/ostream iterator/operator++]]
[[fr:cpp/iterator/ostream iterator/operator++]]
[[it:cpp/iterator/ostream iterator/operator++]]
[[ja:cpp/iterator/ostream iterator/operator++]]
[[pt:cpp/iterator/ostream iterator/operator++]]
[[ru:cpp/iterator/ostream iterator/operator++]]
[[zh:cpp/iterator/ostream iterator/operator++]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostream iterator/operator*</title>
    <ns>0</ns>
    <id>9129</id>
    <revision>
      <id>42161</id>
      <parentid>38283</parentid>
      <timestamp>2012-11-02T22:19:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="429">{{cpp/iterator/inserter/operator*|ostream_iterator}}

[[de:cpp/iterator/ostream iterator/operator*]]
[[es:cpp/iterator/ostream iterator/operator*]]
[[fr:cpp/iterator/ostream iterator/operator*]]
[[it:cpp/iterator/ostream iterator/operator*]]
[[ja:cpp/iterator/ostream iterator/operator*]]
[[pt:cpp/iterator/ostream iterator/operator*]]
[[ru:cpp/iterator/ostream iterator/operator*]]
[[zh:cpp/iterator/ostream iterator/operator*]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostream iterator/operator++</title>
    <ns>0</ns>
    <id>10170</id>
    <redirect title="cpp/iterator/ostream iterator/operator arith" />
    <revision>
      <id>48476</id>
      <timestamp>2013-05-29T15:54:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/iterator/ostream iterator/operator++]] to [[cpp/iterator/ostream iterator/operator arith]]: move to correct location</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[cpp/iterator/ostream iterator/operator arith]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostream iterator/operator=</title>
    <ns>0</ns>
    <id>9130</id>
    <revision>
      <id>83739</id>
      <parentid>83738</parentid>
      <timestamp>2016-03-08T01:46:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1501">{{cpp/iterator/ostream_iterator/title|operator{{=}}}}
{{cpp/iterator/ostream_iterator/navbar}}
{{dcl begin}}
{{dcl | 1=
ostream_iterator&amp; operator=( const T&amp; value );
}}
{{dcl end}}

Inserts {{tt|value}} into the associated stream, then inserts the delimiter, if one was specified at construction time.

If {{tt|out_stream}} is a pointer to the associated {{lc|std::basic_ostream}} and {{tt|delim}} is the delimiter specified at the construction of this object, then the effect is equivalent to

{{c|1=
*out_stream &lt;&lt; value;
if(delim != 0)
    *out_stream &lt;&lt; delim;
return *this;
}}

===Parameters===
{{par begin}}
{{par | value | the object to insert}}
{{par end}}

===Return value===
{{c|*this}}

===Notes===
{{tt|T}} can be any class with a user-defined operator&lt;&lt;

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    std::ostream_iterator&lt;int&gt; i1(std::cout, &quot;, &quot;);
    *i1++ = 1; // usual form, used by standard algorithms
    *++i1 = 2;
    i1 = 3; // neither * nor ++ are necessary
    std::ostream_iterator&lt;double&gt; i2(std::cout);
    i2 = 3.14;
}
 | output=
1, 2, 3, 3.14
}}

[[de:cpp/iterator/ostream iterator/operator=]]
[[es:cpp/iterator/ostream iterator/operator=]]
[[fr:cpp/iterator/ostream iterator/operator=]]
[[it:cpp/iterator/ostream iterator/operator=]]
[[ja:cpp/iterator/ostream iterator/operator=]]
[[pt:cpp/iterator/ostream iterator/operator=]]
[[ru:cpp/iterator/ostream iterator/operator=]]
[[zh:cpp/iterator/ostream iterator/operator=]]</text>
      <sha1>n3a6xguhz4qtniokyvdk9wmchleqw0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostream iterator/ostream iterator</title>
    <ns>0</ns>
    <id>9131</id>
    <revision>
      <id>83737</id>
      <parentid>49862</parentid>
      <timestamp>2016-03-08T01:44:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust wording</comment>
      <text xml:space="preserve" bytes="1431">{{cpp/iterator/ostream_iterator/title|ostream_iterator}}
{{cpp/iterator/ostream_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
ostream_iterator(ostream_type&amp; stream, const CharT* delim)
}}
{{dcl | num=2 | 1=
ostream_iterator(ostream_type&amp; stream)
}}
{{dcl end}}

1) Constructs the iterator with {{tt|stream}} as the associated stream and {{tt|delim}} as the delimiter.

2) Constructs the iterator with {{tt|stream}} as the associated stream and a null pointer as the delimiter.

===Parameters===
{{par begin}}
{{par | stream | the output stream to be accessed by this iterator}}
{{par | delim | the null-terminated character string to be inserted into the stream after each output}}
{{par end}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
int main()
{
    std::ostream_iterator&lt;int&gt; i1(std::cout, &quot;, &quot;);
    std::fill_n(i1, 5, -1);
    std::ostream_iterator&lt;double&gt; i2(std::cout);
    *i2++ = 3.14;
}
 | output=
-1, -1, -1, -1, -1, 3.14
}}

[[de:cpp/iterator/ostream iterator/ostream iterator]]
[[es:cpp/iterator/ostream iterator/ostream iterator]]
[[fr:cpp/iterator/ostream iterator/ostream iterator]]
[[it:cpp/iterator/ostream iterator/ostream iterator]]
[[ja:cpp/iterator/ostream iterator/ostream iterator]]
[[pt:cpp/iterator/ostream iterator/ostream iterator]]
[[ru:cpp/iterator/ostream iterator/ostream iterator]]
[[zh:cpp/iterator/ostream iterator/ostream iterator]]</text>
      <sha1>evvlt33rsvq6wq69plcd83h9ftyb9nr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostream iterator/~ostream iterator</title>
    <ns>0</ns>
    <id>9132</id>
    <revision>
      <id>49863</id>
      <parentid>42125</parentid>
      <timestamp>2013-06-01T02:59:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="670">{{cpp/iterator/ostream_iterator/title|~ostream_iterator}}
{{cpp/iterator/ostream_iterator/navbar}}
{{dcl begin}}
{{dcl | 1=
~ostream_iterator()
}}
{{dcl end}}

Destructs the iterator. Does not affect the associated output stream.

[[de:cpp/iterator/ostream iterator/~ostream iterator]]
[[es:cpp/iterator/ostream iterator/~ostream iterator]]
[[fr:cpp/iterator/ostream iterator/~ostream iterator]]
[[it:cpp/iterator/ostream iterator/~ostream iterator]]
[[ja:cpp/iterator/ostream iterator/~ostream iterator]]
[[pt:cpp/iterator/ostream iterator/~ostream iterator]]
[[ru:cpp/iterator/ostream iterator/~ostream iterator]]
[[zh:cpp/iterator/ostream iterator/~ostream iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostreambuf iterator</title>
    <ns>0</ns>
    <id>4903</id>
    <revision>
      <id>78515</id>
      <parentid>72453</parentid>
      <timestamp>2015-05-24T13:18:53Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="2677">{{cpp/title|ostreambuf_iterator}}
{{cpp/iterator/ostreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl | until=c++17 | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt; &gt;
class ostreambuf_iterator : public std::iterator&lt;std::output_iterator_tag,
                                                 void, void, void, void&gt;
}}
{{dcl | since=c++17 | 1=
template&lt; class CharT, class Traits = std::char_traits&lt;CharT&gt; &gt;
class ostreambuf_iterator;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::ostreambuf_iterator}} is a single-pass {{concept|OutputIterator}} that writes successive characters into the {{lc|std::basic_streambuf}} object for which it was constructed. The actual write operation is performed when the iterator (whether dereferenced or not) is assigned to. Incrementing the {{tt|std::ostreambuf_iterator}} is a no-op.

In a typical implementation, the only data members of {{tt|std::ostreambuf_iterator}} are a pointer to the associated {{tt|std::basic_streambuf}} and a boolean flag indicating if the the end of file condition has been reached.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}}}}
{{dsc | {{tt|streambuf_type}} | {{c|std::basic_streambuf&lt;CharT, Traits&gt;}}}}
{{dsc | {{tt|ostream_type}} | {{c|std::basic_ostream&lt;CharT, Traits&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc constructor}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc destructor}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc operator_arith}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc failed}}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::output_iterator_tag|void|void|void|void}}

===Example===
{{example
 | 
 | code=
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;

int main()
{
    std::string s = &quot;This is an example\n&quot;;
    std::copy(s.begin(), s.end(), std::ostreambuf_iterator&lt;char&gt;(std::cout));
}
 | output=
This is an example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc istreambuf_iterator}}
{{dsc inc | cpp/iterator/dsc ostream_iterator}}
{{dsc end}}

[[de:cpp/iterator/ostreambuf iterator]]
[[es:cpp/iterator/ostreambuf iterator]]
[[fr:cpp/iterator/ostreambuf iterator]]
[[it:cpp/iterator/ostreambuf iterator]]
[[ja:cpp/iterator/ostreambuf iterator]]
[[pt:cpp/iterator/ostreambuf iterator]]
[[ru:cpp/iterator/ostreambuf iterator]]
[[zh:cpp/iterator/ostreambuf iterator]]</text>
      <sha1>qmn7b4ms5x46vwbhq2i1w8gg7q0fqyi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostreambuf iterator/failed</title>
    <ns>0</ns>
    <id>9124</id>
    <revision>
      <id>91419</id>
      <parentid>75422</parentid>
      <timestamp>2017-03-31T19:43:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1085">{{cpp/iterator/ostreambuf_iterator/title|failed}}
{{cpp/iterator/ostreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl | 1=
bool failed() const;
}}
{{dcl end}}

Returns {{c|true}} if the iterator encountered the end-of-file condition, that is, if an earlier call to {{lc|std::basic_streambuf::sputc}} (made by [[cpp/iterator/ostreambuf_iterator/operator=|operator=]]) returned {{c|Traits::eof}}.

===Parameters===
(none)

===Return value===
{{c|true}} if this iterator has encountered the end-of-file condition on output, {{c|false}} otherwise.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 |code=
 |output=
}}

[[de:cpp/iterator/ostreambuf iterator/failed]]
[[es:cpp/iterator/ostreambuf iterator/failed]]
[[fr:cpp/iterator/ostreambuf iterator/failed]]
[[it:cpp/iterator/ostreambuf iterator/failed]]
[[ja:cpp/iterator/ostreambuf iterator/failed]]
[[pt:cpp/iterator/ostreambuf iterator/failed]]
[[ru:cpp/iterator/ostreambuf iterator/failed]]
[[zh:cpp/iterator/ostreambuf iterator/failed]]</text>
      <sha1>6hxb7lk9cs7lnf6glda2ark035tm312</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostreambuf iterator/operator arith</title>
    <ns>0</ns>
    <id>9126</id>
    <revision>
      <id>48459</id>
      <parentid>48457</parentid>
      <timestamp>2013-05-29T15:50:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moved [[cpp/iterator/ostreambuf iterator/operator]] to [[cpp/iterator/ostreambuf iterator/operator arith]]: move to proper location</comment>
      <text xml:space="preserve" bytes="465">{{cpp/iterator/inserter/operator++|ostreambuf_iterator}}

[[de:cpp/iterator/ostreambuf iterator/operator++]]
[[es:cpp/iterator/ostreambuf iterator/operator++]]
[[fr:cpp/iterator/ostreambuf iterator/operator++]]
[[it:cpp/iterator/ostreambuf iterator/operator++]]
[[ja:cpp/iterator/ostreambuf iterator/operator++]]
[[pt:cpp/iterator/ostreambuf iterator/operator++]]
[[ru:cpp/iterator/ostreambuf iterator/operator++]]
[[zh:cpp/iterator/ostreambuf iterator/operator++]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostreambuf iterator/operator*</title>
    <ns>0</ns>
    <id>9125</id>
    <revision>
      <id>42098</id>
      <parentid>38276</parentid>
      <timestamp>2012-11-02T22:05:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="456">{{cpp/iterator/inserter/operator*|ostreambuf_iterator}}

[[de:cpp/iterator/ostreambuf iterator/operator*]]
[[es:cpp/iterator/ostreambuf iterator/operator*]]
[[fr:cpp/iterator/ostreambuf iterator/operator*]]
[[it:cpp/iterator/ostreambuf iterator/operator*]]
[[ja:cpp/iterator/ostreambuf iterator/operator*]]
[[pt:cpp/iterator/ostreambuf iterator/operator*]]
[[ru:cpp/iterator/ostreambuf iterator/operator*]]
[[zh:cpp/iterator/ostreambuf iterator/operator*]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostreambuf iterator/operator++</title>
    <ns>0</ns>
    <id>10164</id>
    <redirect title="cpp/iterator/ostreambuf iterator/operator arith" />
    <revision>
      <id>48460</id>
      <parentid>48458</parentid>
      <timestamp>2013-05-29T15:50:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix redirect</comment>
      <text xml:space="preserve" bytes="61">#REDIRECT [[cpp/iterator/ostreambuf iterator/operator_arith]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostreambuf iterator/operator=</title>
    <ns>0</ns>
    <id>9123</id>
    <revision>
      <id>80084</id>
      <parentid>70904</parentid>
      <timestamp>2015-07-29T10:36:55Z</timestamp>
      <contributor>
        <username>Cppguy</username>
        <id>4311</id>
      </contributor>
      <text xml:space="preserve" bytes="1164">{{cpp/iterator/ostreambuf_iterator/title|operator{{=}}}}
{{cpp/iterator/ostreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl | 1=
ostreambuf_iterator&amp; operator=( CharT c );
}}
{{dcl end}}

If {{lc|failed()}} returns {{c|false}}, inserts the character {{tt|c}} into the associated stream buffer by calling {{c|pbuf-&gt;sputc(c)}}, where {{tt|pbuf}} is the private member of type {{tt|streambuf_type*}}. Otherwise, does nothing.

If the call to {{c|pbuf-&gt;sputc(c)}} returns {{c|Traits::eof}}, sets the failed() flag to true.

===Parameters===
{{par begin}}
{{par | c | the character to insert}}
{{par end}}

===Return value===
{{c|*this}}

===Example===
{{example|
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_streambuf/dsc sputc}}
{{dsc end}}

[[de:cpp/iterator/ostreambuf iterator/operator=]]
[[es:cpp/iterator/ostreambuf iterator/operator=]]
[[fr:cpp/iterator/ostreambuf iterator/operator=]]
[[it:cpp/iterator/ostreambuf iterator/operator=]]
[[ja:cpp/iterator/ostreambuf iterator/operator=]]
[[pt:cpp/iterator/ostreambuf iterator/operator=]]
[[ru:cpp/iterator/ostreambuf iterator/operator=]]
[[zh:cpp/iterator/ostreambuf iterator/operator=]]</text>
      <sha1>bddwutz028gi0lz5vdy404tdmjy6k9b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/ostreambuf iterator/ostreambuf iterator</title>
    <ns>0</ns>
    <id>9127</id>
    <revision>
      <id>91439</id>
      <parentid>80085</parentid>
      <timestamp>2017-03-31T19:44:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1655">{{cpp/iterator/ostreambuf_iterator/title|ostreambuf_iterator}}
{{cpp/iterator/ostreambuf_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
ostreambuf_iterator( streambuf_type* buffer );
}}
{{dcl | num=2 | 1=
ostreambuf_iterator( ostream_type&amp; stream );
}}
{{dcl end}}

@1@ Constructs the iterator with the private {{c|streambuf_type*}} member set to {{tt|buffer}} and the failed() bit set to {{c|false}}. The behavior is undefined if {{c|buffer}} is a null pointer.

@2@ Same as {{c|ostreambuf_iterator(stream.rdbuf())}}

===Parameters===
{{par begin}}
{{par | stream | the output stream whose rdbuf() will be accessed by this iterator}}
{{par | buffer | the output stream buffer to be accessed by this iterator}}
{{par end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;iterator&gt;
int main()
{
    std::basic_filebuf&lt;char&gt; f;
    f.open(&quot;test.txt&quot;, std::ios::out);

    std::ostreambuf_iterator&lt;char&gt; out1(&amp;f);

    std::ostreambuf_iterator&lt;wchar_t&gt; out2(std::wcout);

    *out1 = 'a';
    *out2 = L'a';
}
}}

[[de:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]
[[es:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]
[[fr:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]
[[it:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]
[[ja:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]
[[pt:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]
[[ru:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]
[[zh:cpp/iterator/ostreambuf iterator/ostreambuf iterator]]</text>
      <sha1>0w1tdpsisf3khk2nh98g43ldkac3x91</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/prev</title>
    <ns>0</ns>
    <id>2736</id>
    <revision>
      <id>83756</id>
      <parentid>72640</parentid>
      <timestamp>2016-03-08T03:37:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0031r0 (constexpr)</comment>
      <text xml:space="preserve" bytes="1893">{{cpp/title| prev}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | since=c++11 | until=c++17|
template&lt; class BidirIt &gt;
BidirIt prev(
  BidirIt it, 
  typename std::iterator_traits&lt;BidirIt&gt;::difference_type n {{=}} 1 );
}}
{{dcl | since=c++17|
template&lt; class BidirIt &gt;
constexpr BidirIt prev(
  BidirIt it, 
  typename std::iterator_traits&lt;BidirIt&gt;::difference_type n {{=}} 1 );
}}
{{dcl end}}

Return the {{c|n}}th predecessor of iterator {{c|it}}.

===Parameters===
{{par begin}}
{{par | it | an iterator}}
{{par | n | number of elements {{c|it}} should be descended}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par end}}

===Return value===
The {{c|n}}th predecessor of iterator {{c|it}}.

===Possible implementation===
{{eq fun |
template&lt;class BidirIt&gt;
BidirIt prev(BidirIt it, typename std::iterator_traits&lt;BidirIt&gt;::difference_type n {{=}} 1)
{
    std::advance(it, -n);
    return it;
}
}}

===Notes===
Although the expression {{c|--c.end()}} often compiles, it is not guaranteed to do so: {{c|c.end()}} is an rvalue expression, and there is no iterator requirement that specifies that decrement of an rvalue is guaranteed to work. In particular, when iterators are implemented as pointers, {{c|--c.end()}} does not compile, while {{c|std::prev(c.end())}} does.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

int main() 
{
    std::vector&lt;int&gt; v{ 3, 1, 4 };
    
    auto it = v.end();

    auto pv = std::prev(it, 2);

    std::cout &lt;&lt; *pv &lt;&lt; '\n';
}
 | output=1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc next}}
{{dsc inc | cpp/iterator/dsc advance}}
{{dsc end}}

[[de:cpp/iterator/prev]]
[[es:cpp/iterator/prev]]
[[fr:cpp/iterator/prev]]
[[it:cpp/iterator/prev]]
[[ja:cpp/iterator/prev]]
[[pt:cpp/iterator/prev]]
[[ru:cpp/iterator/prev]]
[[zh:cpp/iterator/prev]]</text>
      <sha1>fdxmc3rqtmh7zvu6eftybhj1b2yp0ki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/rbegin</title>
    <ns>0</ns>
    <id>9999</id>
    <revision>
      <id>91273</id>
      <parentid>91270</parentid>
      <timestamp>2017-03-30T21:05:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Specializations */ not specializations</comment>
      <text xml:space="preserve" bytes="2626">{{cpp/title| rbegin|crbegin}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin|num=1}}
{{dcl | since=c++14 | until=c++17|
template&lt; class C &gt; 
auto rbegin( C&amp; c ) -&gt; decltype(c.rbegin());
}}
{{dcl | since=c++17|
template&lt; class C &gt; 
constexpr auto rbegin( C&amp; c ) -&gt; decltype(c.rbegin());
}}
{{dcl rev end}}
{{dcl rev begin|num=1}}
{{dcl | since=c++14 | until=c++17|
template&lt; class C &gt; 
auto rbegin( const C&amp; c ) -&gt; decltype(c.rbegin());
}}
{{dcl | since=c++17|
template&lt; class C &gt; 
constexpr auto rbegin( const C&amp; c ) -&gt; decltype(c.rbegin());
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | since=c++14 | until=c++17|
template&lt; class T, size_t N &gt; 
reverse_iterator&lt;T*&gt; rbegin( T (&amp;array)[N] );
}}
{{dcl | since=c++17|
template&lt; class T, size_t N &gt; 
constexpr reverse_iterator&lt;T*&gt; rbegin( T (&amp;array)[N] );
}}
{{dcl rev begin|num=3}}
{{dcl | since=c++14 | until=c++17|
template&lt; class C &gt; 
auto crbegin( const C&amp; c ) -&gt; decltype(std::rbegin(c));
}}
{{dcl | since=c++17|
template&lt; class C &gt; 
constexpr auto crbegin( const C&amp; c ) -&gt; decltype(std::rbegin(c));
}}
{{dcl rev end}}
{{dcl end}}

Returns an iterator to the reverse-beginning of the given container {{tt|c}} or array {{tt|array}}.

@1@ Returns a possibly const-qualified iterator to the reverse-beginning of the container {{tt|c}}.
@2@ Returns {{c|std::reverse_iterator&lt;T*&gt;}} to the reverse-beginning of the array {{tt|array}}.
@3@ Returns a const-qualified iterator to the reverse-beginning of the container {{tt|c}}.

{{image|range-rbegin-rend.svg}}

===Parameters===
{{par begin}}
{{par | c | a container with a {{tt|rbegin}} method}}
{{par | array | an array of arbitrary type}}
{{par end}}

===Return value===
An iterator to the reverse-beginning of {{tt|c}} or {{tt|array}}

===Notes===
{{cpp/iterator/range access availability|rbegin|crbegin}}

===Overloads===
Custom overloads of {{tt|rbegin}} may be provided for classes that do not expose a suitable {{tt|rbegin()}} member function, yet can be iterated. The following overload is already provided by the standard library:

{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc rbegin2}}
{{dsc end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;

int main() 
{
    std::vector&lt;int&gt; v = { 3, 1, 4 };
    auto vi = std::rbegin(v);
    std::cout &lt;&lt; *vi &lt;&lt; '\n'; 

    int a[] = { -5, 10, 15 };
    auto ai = std::rbegin(a);
    std::cout &lt;&lt; *ai &lt;&lt; '\n';
}
 | output=
4
15
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc begin}}
{{dsc inc | cpp/iterator/dsc end}}
{{dsc inc | cpp/iterator/dsc rend}}
{{dsc end}}</text>
      <sha1>c9e350anoo895cxy7rzbboryjuffv5s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/rend</title>
    <ns>0</ns>
    <id>10000</id>
    <revision>
      <id>91275</id>
      <parentid>91274</parentid>
      <timestamp>2017-03-30T21:06:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ use template</comment>
      <text xml:space="preserve" bytes="2791">{{cpp/title| rend|crend}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin|num=1}}
{{dcl | since=c++14 | until=c++17|
template&lt; class C &gt; 
auto rend( C&amp; c ) -&gt; decltype(c.rend());
}}
{{dcl | since=c++17|
template&lt; class C &gt; 
constexpr auto rend( C&amp; c ) -&gt; decltype(c.rend());
}}
{{dcl rev end}}
{{dcl rev begin|num=1}}
{{dcl | since=c++14 |until=c++17|
template&lt; class C &gt; 
auto rend( const C&amp; c ) -&gt; decltype(c.rend());
}}
{{dcl | since=c++17|
template&lt; class C &gt; 
constexpr auto rend( const C&amp; c ) -&gt; decltype(c.rend());
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | since=c++14 |until=c++17|
template&lt; class T, size_t N &gt; 
reverse_iterator&lt;T*&gt; rend( T (&amp;array)[N] );
}}
{{dcl | since=c++17|
template&lt; class T, size_t N &gt; 
constexpr reverse_iterator&lt;T*&gt; rend( T (&amp;array)[N] );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | since=c++14 |until=c++17|
template&lt; class C &gt; 
auto crend( const C&amp; c ) -&gt; decltype(std::rend(c));
}}
{{dcl | since=c++17|
template&lt; class C &gt; 
constexpr auto crend( const C&amp; c ) -&gt; decltype(std::rend(c));
}}
{{dcl rev end}}
{{dcl end}}

Returns an iterator to the reverse-end of the given container {{tt|c}} or array {{tt|array}}.

@1@ Returns a possibly const-qualified iterator to the reverse-end of the container {{tt|c}}.
@2@ Returns {{c|std::reverse_iterator&lt;T*&gt;}} to the reverse-end of the array {{tt|array}}.
@3@ Returns a const-qualified iterator to the reverse-end of the container {{tt|c}}.

{{image|range-rbegin-rend.svg}}

===Parameters===
{{par begin}}
{{par | c | a container with a {{tt|rend}} method}}
{{par | array | an array of arbitrary type}}
{{par end}}

===Return value===
An iterator to the reverse-end of {{tt|c}} or {{tt|array}}

===Notes===
{{cpp/iterator/range access availability|rend|crend}}

===Overloads===
Custom overloads of {{tt|rbegin}} may be provided for classes that do not expose a suitable {{tt|rbegin()}} member function, yet can be iterated. The following overload is already provided by the standard library:

{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc rend2}}
{{dsc end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

int main()
{
    int a[] = {4, 6, -3, 9, 10};
    std::cout &lt;&lt; &quot;Array backwards: &quot;;
    std::copy(std::rbegin(a), std::rend(a), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));

    std::cout &lt;&lt; &quot;\nVector backwards: &quot;;
    std::vector&lt;int&gt; v = {4, 6, -3, 9, 10};
    std::copy(std::rbegin(v), std::rend(v), std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
}
 | output=
Array backwards: 10 9 -3 6 4 
Vector backwards: 10 9 -3 6 4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc end}}
{{dsc inc | cpp/iterator/dsc rbegin}}
{{dsc inc | cpp/iterator/dsc begin}}
{{dsc end}}</text>
      <sha1>4cskzbany95n4yv6kn90s6hyz34829j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator</title>
    <ns>0</ns>
    <id>4936</id>
    <revision>
      <id>83766</id>
      <parentid>83765</parentid>
      <timestamp>2016-03-08T04:00:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 83765 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) er, no, that was about array iterators</comment>
      <text xml:space="preserve" bytes="3545">{{cpp/title|reverse_iterator}}
{{cpp/iterator/reverse_iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl rev begin}}
{{dcl |until=c++17 |1=
template&lt; class Iterator &gt;
class reverse_iterator : public std::iterator&lt;
                           typename std::iterator_traits&lt;Iterator&gt;::iterator_category,
                           typename std::iterator_traits&lt;Iterator&gt;::value_type,
                           typename std::iterator_traits&lt;Iterator&gt;::difference_type,
                           typename std::iterator_traits&lt;Iterator&gt;::pointer,
                           typename std::iterator_traits&lt;Iterator&gt;::reference &gt;
}}
{{dcl |since=c++17 |1=
template&lt; class Iterator &gt;
class reverse_iterator;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::reverse_iterator}} is an iterator adaptor that reverses the direction of a given iterator.  In other words, when provided with a bidirectional iterator, {{tt|std::reverse_iterator}} produces a new iterator that moves from the end to the beginning of the sequence defined by the underlying bidirectional iterator.

For a reverse iterator {{tt|r}} constructed from an iterator {{tt|i}}, the relationship {{c|1=&amp;*r == &amp;*(i-1)}} is always true (as long as {{tt|r}} is dereferenceable); thus a reverse iterator constructed from a one-past-the-end iterator dereferences to the last element in a sequence. 

This is the iterator returned by member functions {{tt|rbegin()}} and {{tt|rend()}} of the standard library containers.

{{image|range-rbegin-rend.svg}}

{{cpp/iterator/iterator/inherit
| std::iterator_traits&lt;Iterator&gt;::iterator_category
| std::iterator_traits&lt;Iterator&gt;::value_type
| std::iterator_traits&lt;Iterator&gt;::difference_type
| std::iterator_traits&lt;Iterator&gt;::pointer
| std::iterator_traits&lt;Iterator&gt;::reference
}}
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|iterator_type}} | {{tt|Iterator}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc constructor | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator{{=}} | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc base | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator* | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_at | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_arith | reverse_iterator}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Definition}}
{{dsc | {{tt|current}} {{mark|protected}} | a copy of the base() iterator}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_cmp | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator+ | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator- | reverse_iterator}}
{{dsc end}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;

int main()
{
    std::string s = &quot;Hello, world&quot;;
    std::reverse_iterator&lt;std::string::iterator&gt; r = s.rbegin();
    r[7] = 'O'; // replaces 'o' with 'O' 
    r += 7; // iterator now points at 'O'
    std::string rev(r, s.rend());
    std::cout &lt;&lt; rev &lt;&lt; '\n';
}
 | output=
OlleH
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc iterator}}
{{dsc end}}

[[de:cpp/iterator/reverse iterator]]
[[es:cpp/iterator/reverse iterator]]
[[fr:cpp/iterator/reverse iterator]]
[[it:cpp/iterator/reverse iterator]]
[[ja:cpp/iterator/reverse iterator]]
[[pt:cpp/iterator/reverse iterator]]
[[ru:cpp/iterator/reverse iterator]]
[[zh:cpp/iterator/reverse iterator]]</text>
      <sha1>kd4pg6nddcxfg246ryy0sm7liml07dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/base</title>
    <ns>0</ns>
    <id>5615</id>
    <revision>
      <id>83609</id>
      <parentid>72260</parentid>
      <timestamp>2016-03-03T13:38:10Z</timestamp>
      <contributor>
        <username>Bran</username>
        <id>4364</id>
      </contributor>
      <comment>constexpr since C++17 -&gt; http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0031r0.html</comment>
      <text xml:space="preserve" bytes="1527">{{cpp/iterator/reverse_iterator/title| base}}
{{cpp/iterator/reverse_iterator/navbar}}
{{dcl begin}}
{{dcl|until=c++17| 
Iterator base() const;
}}
{{dcl|since=c++17| 
constexpr Iterator base() const;
}}
{{dcl end}}

Returns the underlying base iterator. That is {{c|std::reverse_iterator(it).base() {{==}} it}}.

The base iterator refers to the element that is next (from the {{c|std::reverse_iterator::iterator_type}} perspective) to the element the {{tt|reverse_iterator}} is currently pointing to. That is {{c|&amp;*(rit.base() - 1) {{==}} &amp;*rit}}.

===Parameters===
(none)

===Return value===
The underlying iterator.

===Exceptions===
(none)

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v = { 0, 1, 2, 3, 4, 5 };
    
    using RevIt = std::reverse_iterator&lt;std::vector&lt;int&gt;::iterator&gt;;
    RevIt r_end(v.begin());
    RevIt r_begin(v.end());

    for (auto it = r_end.base(); it != r_begin.base(); ++it) {
        std::cout &lt;&lt; *it &lt;&lt; &quot; &quot;;
    }
    std::cout &lt;&lt; &quot;\n&quot;;
}
 | output=
0 1 2 3 4 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator*|reverse_iterator}}
{{dsc end}}


[[de:cpp/iterator/reverse iterator/base]]
[[es:cpp/iterator/reverse iterator/base]]
[[fr:cpp/iterator/reverse iterator/base]]
[[it:cpp/iterator/reverse iterator/base]]
[[ja:cpp/iterator/reverse iterator/base]]
[[pt:cpp/iterator/reverse iterator/base]]
[[ru:cpp/iterator/reverse iterator/base]]
[[zh:cpp/iterator/reverse iterator/base]]</text>
      <sha1>lhh85n13wugqt39ro2n37shsefv998n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator arith</title>
    <ns>0</ns>
    <id>8733</id>
    <revision>
      <id>50887</id>
      <parentid>42005</parentid>
      <timestamp>2013-06-01T03:43:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="486">{{include page|cpp/iterator/adaptor/operator_arith|reverse_iterator}}

[[de:cpp/iterator/reverse iterator/operator arith]]
[[es:cpp/iterator/reverse iterator/operator arith]]
[[fr:cpp/iterator/reverse iterator/operator arith]]
[[it:cpp/iterator/reverse iterator/operator arith]]
[[ja:cpp/iterator/reverse iterator/operator arith]]
[[pt:cpp/iterator/reverse iterator/operator arith]]
[[ru:cpp/iterator/reverse iterator/operator arith]]
[[zh:cpp/iterator/reverse iterator/operator arith]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator at</title>
    <ns>0</ns>
    <id>5617</id>
    <revision>
      <id>50888</id>
      <parentid>42002</parentid>
      <timestamp>2013-06-01T03:43:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="459">{{include page|cpp/iterator/adaptor/operator_at|reverse_iterator}}

[[de:cpp/iterator/reverse iterator/operator at]]
[[es:cpp/iterator/reverse iterator/operator at]]
[[fr:cpp/iterator/reverse iterator/operator at]]
[[it:cpp/iterator/reverse iterator/operator at]]
[[ja:cpp/iterator/reverse iterator/operator at]]
[[pt:cpp/iterator/reverse iterator/operator at]]
[[ru:cpp/iterator/reverse iterator/operator at]]
[[zh:cpp/iterator/reverse iterator/operator at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator cmp</title>
    <ns>0</ns>
    <id>5623</id>
    <revision>
      <id>50889</id>
      <parentid>41990</parentid>
      <timestamp>2013-06-01T03:43:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="468">{{include page|cpp/iterator/adaptor/operator_cmp|reverse_iterator}}

[[de:cpp/iterator/reverse iterator/operator cmp]]
[[es:cpp/iterator/reverse iterator/operator cmp]]
[[fr:cpp/iterator/reverse iterator/operator cmp]]
[[it:cpp/iterator/reverse iterator/operator cmp]]
[[ja:cpp/iterator/reverse iterator/operator cmp]]
[[pt:cpp/iterator/reverse iterator/operator cmp]]
[[ru:cpp/iterator/reverse iterator/operator cmp]]
[[zh:cpp/iterator/reverse iterator/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator eq</title>
    <ns>0</ns>
    <id>5622</id>
    <redirect title="cpp/iterator/reverse iterator/operator cmp" />
    <revision>
      <id>36867</id>
      <parentid>33931</parentid>
      <timestamp>2012-07-02T18:34:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/iterator/reverse iterator/operator cmp]]</comment>
      <text xml:space="preserve" bytes="56">#redirect [[cpp/iterator/reverse_iterator/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator*</title>
    <ns>0</ns>
    <id>5616</id>
    <revision>
      <id>83768</id>
      <parentid>83631</parentid>
      <timestamp>2016-03-08T04:03:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>dcl revs</comment>
      <text xml:space="preserve" bytes="1276">{{cpp/iterator/reverse_iterator/title | operator*,-&gt; }}
{{cpp/iterator/reverse_iterator/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl | until=c++17 |
reference operator*() const;
}}
{{dcl | since=c++17 |
constexpr reference operator*() const;
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | until=c++17 | 
pointer operator-&gt;() const;
}}
{{dcl | since=c++17 | 
constexpr pointer operator-&gt;() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns a reference or pointer to the element previous to {{tt|current}}.

@1@ Equivalent to {{c|1=Iterator tmp = current; return *--tmp;}}
@2@ Equivalent to {{c|std::addressof(operator*())}}.

===Parameters===
(none)

===Return value===
Reference or pointer to the element previous to {{tt|current}}.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_at|reverse_iterator}}
{{dsc end}}

[[de:cpp/iterator/reverse iterator/operator*]]
[[es:cpp/iterator/reverse iterator/operator*]]
[[fr:cpp/iterator/reverse iterator/operator*]]
[[it:cpp/iterator/reverse iterator/operator*]]
[[ja:cpp/iterator/reverse iterator/operator*]]
[[pt:cpp/iterator/reverse iterator/operator*]]
[[ru:cpp/iterator/reverse iterator/operator*]]
[[zh:cpp/iterator/reverse iterator/operator*]]</text>
      <sha1>p9jzlvkpxq62jzcjb38lplr4wv6bvlh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator+</title>
    <ns>0</ns>
    <id>8740</id>
    <revision>
      <id>50885</id>
      <parentid>47393</parentid>
      <timestamp>2013-06-01T03:43:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="441">{{include page|cpp/iterator/adaptor/operator+|reverse_iterator}}

[[de:cpp/iterator/reverse iterator/operator+]]
[[es:cpp/iterator/reverse iterator/operator+]]
[[fr:cpp/iterator/reverse iterator/operator+]]
[[it:cpp/iterator/reverse iterator/operator+]]
[[ja:cpp/iterator/reverse iterator/operator+]]
[[pt:cpp/iterator/reverse iterator/operator+]]
[[ru:cpp/iterator/reverse iterator/operator+]]
[[zh:cpp/iterator/reverse iterator/operator+]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator++</title>
    <ns>0</ns>
    <id>5618</id>
    <redirect title="cpp/iterator/reverse iterator/operator arith" />
    <revision>
      <id>36872</id>
      <parentid>33816</parentid>
      <timestamp>2012-07-02T19:04:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/iterator/reverse iterator/operator arith]]</comment>
      <text xml:space="preserve" bytes="58">#redirect [[cpp/iterator/reverse_iterator/operator_arith]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator-</title>
    <ns>0</ns>
    <id>8736</id>
    <revision>
      <id>50886</id>
      <parentid>42025</parentid>
      <timestamp>2013-06-01T03:43:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="441">{{include page|cpp/iterator/adaptor/operator-|reverse_iterator}}

[[de:cpp/iterator/reverse iterator/operator-]]
[[es:cpp/iterator/reverse iterator/operator-]]
[[fr:cpp/iterator/reverse iterator/operator-]]
[[it:cpp/iterator/reverse iterator/operator-]]
[[ja:cpp/iterator/reverse iterator/operator-]]
[[pt:cpp/iterator/reverse iterator/operator-]]
[[ru:cpp/iterator/reverse iterator/operator-]]
[[zh:cpp/iterator/reverse iterator/operator-]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator--</title>
    <ns>0</ns>
    <id>5619</id>
    <redirect title="cpp/iterator/reverse iterator/operator arith" />
    <revision>
      <id>36869</id>
      <parentid>33927</parentid>
      <timestamp>2012-07-02T18:46:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/iterator/reverse iterator/operator arith]]</comment>
      <text xml:space="preserve" bytes="58">#redirect [[cpp/iterator/reverse_iterator/operator_arith]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/operator=</title>
    <ns>0</ns>
    <id>5614</id>
    <revision>
      <id>42017</id>
      <parentid>36842</parentid>
      <timestamp>2012-11-02T21:47:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="432">{{cpp/iterator/adaptor/operator{{=}}|reverse_iterator}}

[[de:cpp/iterator/reverse iterator/operator=]]
[[es:cpp/iterator/reverse iterator/operator=]]
[[fr:cpp/iterator/reverse iterator/operator=]]
[[it:cpp/iterator/reverse iterator/operator=]]
[[ja:cpp/iterator/reverse iterator/operator=]]
[[pt:cpp/iterator/reverse iterator/operator=]]
[[ru:cpp/iterator/reverse iterator/operator=]]
[[zh:cpp/iterator/reverse iterator/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/reverse iterator/reverse iterator</title>
    <ns>0</ns>
    <id>5613</id>
    <revision>
      <id>50890</id>
      <parentid>41985</parentid>
      <timestamp>2013-06-01T03:43:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="499">{{include page|cpp/iterator/adaptor/constructor|reverse_iterator}}

[[de:cpp/iterator/reverse iterator/reverse iterator]]
[[es:cpp/iterator/reverse iterator/reverse iterator]]
[[fr:cpp/iterator/reverse iterator/reverse iterator]]
[[it:cpp/iterator/reverse iterator/reverse iterator]]
[[ja:cpp/iterator/reverse iterator/reverse iterator]]
[[pt:cpp/iterator/reverse iterator/reverse iterator]]
[[ru:cpp/iterator/reverse iterator/reverse iterator]]
[[zh:cpp/iterator/reverse iterator/reverse iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/iterator/size</title>
    <ns>0</ns>
    <id>13940</id>
    <revision>
      <id>91667</id>
      <parentid>91276</parentid>
      <timestamp>2017-03-31T19:54:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1305">{{cpp/title| size}}
{{cpp/iterator/navbar}}
{{dcl begin}}
{{dcl header | iterator}}
{{dcl | num=1 | since=c++17 |
template &lt; class C &gt;
constexpr auto size( const C&amp; c ) -&gt; decltype(c.size());
}}
{{dcl | num=2 | since=c++17 |
template &lt; class T, size_t N &gt;
constexpr size_t size( const T (&amp;array)[N] ) noexcept;
}}
{{dcl end}}

Returns the size of the given container {{tt|c}} or array {{tt|array}}.

@1@ Returns {{tt|c.size()}}.
@2@ Returns {{tt|N}}.

===Parameters===
{{par begin}}
{{par | c | a container with a {{tt|size}} method}}
{{par | array | an array of arbitrary type}}
{{par end}}

===Return value===
The size of {{tt|c}} or {{tt|array}}

===Exceptions===
@2@ {{unreviewed noexcept}}

===Notes===
{{cpp/iterator/range access availability|size|nosv=true}}

===Possible implementation===
{{eq fun
 | 1=
template &lt;class C&gt; 
constexpr auto size(const C&amp; c) -&gt; decltype(c.size())
{
    return c.size();
}
 | 2=
template &lt;class T, std::size_t N&gt;
constexpr std::size_t size(const T (&amp;array)[N]) noexcept
{
    return N;
}
}}

===Example===
{{example
 |
 | code=#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;

int main() 
{
    std::vector&lt;int&gt; v = { 3, 1, 4 };
    std::cout &lt;&lt; std::size(v) &lt;&lt; '\n'; 

    int a[] = { -5, 10, 15 };
    std::cout &lt;&lt; std::size(a) &lt;&lt; '\n';
}
 | output=
3
3
}}</text>
      <sha1>1u8rwa01wndbq0ny4o6q3fa6gq2onsd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword</title>
    <ns>0</ns>
    <id>627</id>
    <revision>
      <id>88865</id>
      <parentid>88864</parentid>
      <timestamp>2016-12-16T21:56:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 88864 by [[Special:Contributions/170.233.136.2|170.233.136.2]] ([[User talk:170.233.136.2|talk]]) no, [lex.digraph] is alive and well</comment>
      <text xml:space="preserve" bytes="5639">{{title|C++ keywords}}
{{cpp/keyword/navbar}}

This is a list of reserved keywords in C++. Since they are used by the language, these keywords are not available for re-definition or overloading. 

{| class=&quot;wikitable&quot;
|-
|
{{rlt|alignas}} {{mark since c++11}}&lt;br&gt;
{{rlt|alignof}} {{mark since c++11}}&lt;br&gt;
{{rlt|and}}&lt;br&gt;
{{rlt|and_eq}}&lt;br&gt;
{{rlt|asm}}&lt;br&gt;
{{ltt|cpp/language/transactional_memory|atomic_cancel}} {{mark since tm ts}}&lt;br&gt;
{{ltt|cpp/language/transactional_memory|atomic_commit}} {{mark since tm ts}}&lt;br&gt;
{{ltt|cpp/language/transactional_memory|atomic_noexcept}} {{mark since tm ts}}&lt;br&gt;
{{rlt|auto}}{{mark|1}}&lt;br&gt;
{{rlt|bitand}}&lt;br&gt;
{{rlt|bitor}}&lt;br&gt;
{{rlt|bool}}&lt;br&gt;
{{rlt|break}}&lt;br&gt;
{{rlt|case}}&lt;br&gt;
{{rlt|catch}}&lt;br&gt;
{{rlt|char}}&lt;br&gt;
{{rlt|char16_t}} {{mark since c++11}}&lt;br&gt;
{{rlt|char32_t}} {{mark since c++11}}&lt;br&gt;
{{rlt|class}}{{mark|1}}&lt;br&gt;
{{rlt|compl}}&lt;br&gt;
{{rlt|concept}} {{mark since concepts ts}}&lt;br&gt;
{{rlt|const}}&lt;br&gt;
{{rlt|constexpr}} {{mark since c++11}}&lt;br&gt;
{{rlt|const_cast}}&lt;br&gt;
{{rlt|continue}}&lt;br&gt;
{{rlt|decltype}} {{mark since c++11}}&lt;br&gt;
{{rlt|default}}{{mark|1}}&lt;br&gt;
{{rlt|delete}}{{mark|1}}&lt;br&gt;
{{rlt|do}}&lt;br&gt;
{{rlt|double}}&lt;br&gt;
|
{{rlt|dynamic_cast}}&lt;br&gt;
{{rlt|else}}&lt;br&gt;
{{rlt|enum}}&lt;br&gt;
{{rlt|explicit}}&lt;br&gt;
{{rlt|export}}{{mark|1}}&lt;br&gt; 
{{rlt|extern}}{{mark|1}}&lt;br&gt;
{{rlt|false}}&lt;br&gt;
{{rlt|float}}&lt;br&gt;
{{rlt|for}}&lt;br&gt;
{{rlt|friend}}&lt;br&gt;
{{rlt|goto}}&lt;br&gt;
{{rlt|if}}&lt;br&gt;
{{rlt|import}} {{mark since modules ts}}&lt;br&gt;
{{rlt|inline}}{{mark|1}}&lt;br&gt;
{{rlt|int}}&lt;br&gt;
{{rlt|long}}&lt;br&gt;
{{rlt|module}} {{mark since modules ts}}&lt;br&gt;
{{rlt|mutable}}{{mark|1}}&lt;br&gt;
{{rlt|namespace}}&lt;br&gt;
{{rlt|new}}&lt;br&gt;
{{rlt|noexcept}} {{mark since c++11}}&lt;br&gt;
{{rlt|not}}&lt;br&gt;
{{rlt|not_eq}}&lt;br&gt;
{{rlt|nullptr}} {{mark since c++11}}&lt;br&gt;
{{rlt|operator}}&lt;br&gt;
{{rlt|or}}&lt;br&gt;
{{rlt|or_eq}}&lt;br&gt;
{{rlt|private}}&lt;br&gt;
{{rlt|protected}}&lt;br&gt;
{{rlt|public}}&lt;br&gt;
{{rlt|register}}{{mark|2}}&lt;br&gt;
|
{{rlt|reinterpret_cast}}&lt;br&gt;
{{rlt|requires}} {{mark since concepts ts}}&lt;br&gt;
{{rlt|return}}&lt;br&gt;
{{rlt|short}}&lt;br&gt;
{{rlt|signed}}&lt;br&gt;
{{rlt|sizeof}}{{mark|1}}&lt;br&gt;
{{rlt|static}}&lt;br&gt;
{{rlt|static_assert}} {{mark since c++11}}&lt;br&gt;
{{rlt|static_cast}}&lt;br&gt;
{{rlt|struct}}{{mark|1}}&lt;br&gt;
{{rlt|switch}}&lt;br&gt;
{{ltt|cpp/language/transactional_memory|synchronized}} {{mark since tm ts}}&lt;br&gt;
{{rlt|template}}&lt;br&gt;
{{rlt|this}}&lt;br&gt;
{{rlt|thread_local}} {{mark since c++11}}&lt;br&gt;
{{rlt|throw}}&lt;br&gt;
{{rlt|true}}&lt;br&gt;
{{rlt|try}}&lt;br&gt;
{{rlt|typedef}}&lt;br&gt;
{{rlt|typeid}}&lt;br&gt;
{{rlt|typename}}&lt;br&gt;
{{rlt|union}}&lt;br&gt;
{{rlt|unsigned}}&lt;br&gt;
{{rlt|using}}{{mark|1}}&lt;br&gt;
{{rlt|virtual}}&lt;br&gt;
{{rlt|void}}&lt;br&gt;
{{rlt|volatile}}&lt;br&gt;
{{rlt|wchar_t}}&lt;br&gt;
{{rlt|while}}&lt;br&gt;
{{rlt|xor}}&lt;br&gt;
{{rlt|xor_eq}}
|}

* (1) - meaning changed or new meaning added in C++11. Note: the keyword {{tt|export}} is also used by Modules TS.
* (2) - meaning changed in C++17.
Note that {{rlt|and}}, {{rlt|bitor}}, {{rlt|or}}, {{rlt|xor}}, {{rlt|compl}}, {{rlt|bitand}}, {{rlt|and_eq}}, {{rlt|or_eq}}, {{rlt|xor_eq}}, {{rlt|not}}, and {{rlt|not_eq}} (along with the digraphs {{tt|&lt;%}}, {{tt|%&gt;}}, {{tt|&lt;:}}, {{tt|:&gt;}}, {{tt|%:}}, and {{tt|%:%:}}) provide an [[cpp/language/operator_alternative|alternative way to represent standard tokens]].

In addition to keywords, there are ''identifiers with special meaning'', which may be used as names of objects or functions, but have special meaning in certain contexts.

{| class=&quot;wikitable&quot;
|-
|
{{ltt|cpp/language/override|override}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/language/final|final}} {{mark c++11}}&lt;br&gt;
{{ltt|cpp/language/transactional_memory|transaction_safe}} {{mark since tm ts}}&lt;br&gt;
{{ltt|cpp/language/transactional_memory|transaction_safe_dynamic}} {{mark since tm ts}}
|}

Also, all [[cpp/language/identifiers|identifiers]] that contain a double underscore __ in any position and each identifier that begins with an underscore followed by an uppercase letter is always reserved and all identifiers that begin with an underscore are reserved for use as names in the global namespace. See [[cpp/language/identifiers|identifiers]] for more details.

The namespace {{tt|std}} is used to place names of the standard C++ library. See [[cpp/language/extending_std|Extending namespace std]] for the rules about adding names to it.

{{rev begin}}
{{rev|since=c++11|The name {{tt|posix}} is reserved for a future top-level namespace. The behavior is undefined if a program declares or defines anything in that namespace.}}
{{rev end}}

The following tokens are recognized by the [[c/preprocessor|preprocessor]] when in context of a preprocessor directive:
{| class=&quot;wikitable&quot;
|-
|
{{ltt|cpp/preprocessor/conditional|if}}&lt;br&gt;
{{ltt|cpp/preprocessor/conditional|elif}}&lt;br&gt;
{{ltt|cpp/preprocessor/conditional|else}}&lt;br&gt;
{{ltt|cpp/preprocessor/conditional|endif}}&lt;br&gt;
{{ltt|cpp/preprocessor/conditional|defined}}
|
{{ltt|cpp/preprocessor/conditional|ifdef}}&lt;br&gt;
{{ltt|cpp/preprocessor/conditional|ifndef}}&lt;br&gt;
{{ltt|cpp/preprocessor/replace|define}}&lt;br&gt;
{{ltt|cpp/preprocessor/replace|undef}}&lt;br&gt;
|
{{ltt|cpp/preprocessor/include|include}}&lt;br&gt;
{{ltt|cpp/preprocessor/line|line}}&lt;br&gt;
{{ltt|cpp/preprocessor/error|error}}&lt;br&gt;
{{ltt|cpp/preprocessor/impl|pragma}}&lt;br&gt;
|}

The following tokens are recognized by the preprocessor ''outside'' the context of a preprocessor directive:
{| class=&quot;wikitable&quot;
|-
|
{{ltt|cpp/preprocessor/impl|_Pragma}}{{mark since c++11}}
|}

===See also===
{{dsc begin}}
{{dsc see c | c/keyword |C keywords}}
{{dsc end}}

[[ar:cpp/keyword]]
[[de:cpp/keyword]]
[[es:cpp/keyword]]
[[fr:cpp/keyword]]
[[it:cpp/keyword]]
[[ja:cpp/keyword]]
[[ko:cpp/keyword]]
[[pl:cpp/keyword]]
[[pt:cpp/keyword]]
[[ru:cpp/keyword]]
[[zh:cpp/keyword]]</text>
      <sha1>1i6v8xc71m3f40sjluexbxx8nxajmvx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/alignas</title>
    <ns>0</ns>
    <id>3520</id>
    <revision>
      <id>44545</id>
      <parentid>33934</parentid>
      <timestamp>2012-11-03T07:11:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="379">{{cpp/keyword/title|alignas {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/alignas | {{tt|alignas}} specifier]] {{mark since c++11}}

[[de:cpp/keyword/alignas]]
[[es:cpp/keyword/alignas]]
[[fr:cpp/keyword/alignas]]
[[it:cpp/keyword/alignas]]
[[ja:cpp/keyword/alignas]]
[[pt:cpp/keyword/alignas]]
[[ru:cpp/keyword/alignas]]
[[zh:cpp/keyword/alignas]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/alignof</title>
    <ns>0</ns>
    <id>2478</id>
    <revision>
      <id>72542</id>
      <parentid>72541</parentid>
      <timestamp>2014-09-02T14:07:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>back to max_align_t, it's good to expose gcc bugs. Works with clang, too</comment>
      <text xml:space="preserve" bytes="615">{{cpp/keyword/title|alignof {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/alignof | {{tt|alignof}} operator]] {{mark since c++11}}

===Example===

{{example
 | &lt;!-- todo: smarter example, perhaps use as aligned storage? --&gt;
 | code=
#include &lt;iostream&gt;
#include &lt;cstddef&gt;
int main()
{
    std::cout &lt;&lt; alignof(std::max_align_t) &lt;&lt; '\n';
}
 | output=
16
 | p = true
}}

[[de:cpp/keyword/alignof]]
[[es:cpp/keyword/alignof]]
[[fr:cpp/keyword/alignof]]
[[it:cpp/keyword/alignof]]
[[ja:cpp/keyword/alignof]]
[[pt:cpp/keyword/alignof]]
[[ru:cpp/keyword/alignof]]
[[zh:cpp/keyword/alignof]]</text>
      <sha1>4lvrkdabkr2bwkvrn5rp19bsb258kh7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/and</title>
    <ns>0</ns>
    <id>628</id>
    <revision>
      <id>80541</id>
      <parentid>44543</parentid>
      <timestamp>2015-08-19T19:59:20Z</timestamp>
      <contributor>
        <ip>98.159.213.242</ip>
      </contributor>
      <text xml:space="preserve" bytes="503">{{cpp/keyword/title|and}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|&amp;&amp;}}

===Example===

{{example|code=
#include &lt;iostream&gt;

int n;
int main()
{
   if(n &gt; 0 and n &lt; 5)
   {
       std::cout &lt;&lt; &quot;n is small and positive\n&quot;;
   }
}
}}

[[de:cpp/keyword/and]]
[[es:cpp/keyword/and]]
[[fr:cpp/keyword/and]]
[[it:cpp/keyword/and]]
[[ja:cpp/keyword/and]]
[[pt:cpp/keyword/and]]
[[ru:cpp/keyword/and]]
[[zh:cpp/keyword/and]]</text>
      <sha1>jvsqgzl34f6o3j7f5l2lo7kzs2hmljy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/and eq</title>
    <ns>0</ns>
    <id>629</id>
    <revision>
      <id>44542</id>
      <parentid>33937</parentid>
      <timestamp>2012-11-03T07:08:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="607">{{cpp/keyword/title|and_eq}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|&lt;nowiki&gt;&amp;=&lt;/nowiki&gt;}}

===Example===

{{example|code=

#include &lt;iostream&gt;
#include &lt;bitset&gt;
int main()
{
    std::bitset&lt;4&gt; mask(&quot;1100&quot;);
    std::bitset&lt;4&gt; val(&quot;0111&quot;);
    val and_eq mask;
    std::cout &lt;&lt; val &lt;&lt; '\n';
}
| output=
0100
}}

[[de:cpp/keyword/and eq]]
[[es:cpp/keyword/and eq]]
[[fr:cpp/keyword/and eq]]
[[it:cpp/keyword/and eq]]
[[ja:cpp/keyword/and eq]]
[[pt:cpp/keyword/and eq]]
[[ru:cpp/keyword/and eq]]
[[zh:cpp/keyword/and eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/asm</title>
    <ns>0</ns>
    <id>5058</id>
    <revision>
      <id>75851</id>
      <parentid>75850</parentid>
      <timestamp>2015-02-02T21:50:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>wasn't supposed to even have an example here, other keyword pages don't.</comment>
      <text xml:space="preserve" bytes="311">{{cpp/keyword/title|asm}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/asm | Declaration of an inline assembly block]]

[[de:cpp/keyword/asm]]
[[es:cpp/keyword/asm]]
[[fr:cpp/keyword/asm]]
[[it:cpp/keyword/asm]]
[[ja:cpp/keyword/asm]]
[[pt:cpp/keyword/asm]]
[[ru:cpp/keyword/asm]]
[[zh:cpp/keyword/asm]]</text>
      <sha1>787diyiuutg7umatr87to38nbsf9ics</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/auto</title>
    <ns>0</ns>
    <id>630</id>
    <revision>
      <id>67534</id>
      <parentid>44540</parentid>
      <timestamp>2014-02-11T11:36:43Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>syntax</comment>
      <text xml:space="preserve" bytes="451">{{cpp/keyword/title|auto}}
{{cpp/keyword/navbar}}
===Usage===
{{rev begin}}
{{rev | until=c++11 |
* [[cpp/language/storage duration | automatic storage duration specifier]]
}}{{rev | since=c++11|
* [[cpp/language/auto | {{tt|auto}} specifier]]
}}
{{rev end}}

[[de:cpp/keyword/auto]]
[[es:cpp/keyword/auto]]
[[fr:cpp/keyword/auto]]
[[it:cpp/keyword/auto]]
[[ja:cpp/keyword/auto]]
[[pt:cpp/keyword/auto]]
[[ru:cpp/keyword/auto]]
[[zh:cpp/keyword/auto]]</text>
      <sha1>n3tw2vsa5bxcde1evfay73ovu29b861</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/bitand</title>
    <ns>0</ns>
    <id>631</id>
    <revision>
      <id>44539</id>
      <parentid>33940</parentid>
      <timestamp>2012-11-03T07:06:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="369">{{cpp/keyword/title|bitand}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|&amp;}}

[[de:cpp/keyword/bitand]]
[[es:cpp/keyword/bitand]]
[[fr:cpp/keyword/bitand]]
[[it:cpp/keyword/bitand]]
[[ja:cpp/keyword/bitand]]
[[pt:cpp/keyword/bitand]]
[[ru:cpp/keyword/bitand]]
[[zh:cpp/keyword/bitand]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/bitor</title>
    <ns>0</ns>
    <id>632</id>
    <revision>
      <id>44538</id>
      <parentid>33194</parentid>
      <timestamp>2012-11-03T07:05:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="364">{{cpp/keyword/title|bitor}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|{{!}}}}

[[de:cpp/keyword/bitor]]
[[es:cpp/keyword/bitor]]
[[fr:cpp/keyword/bitor]]
[[it:cpp/keyword/bitor]]
[[ja:cpp/keyword/bitor]]
[[pt:cpp/keyword/bitor]]
[[ru:cpp/keyword/bitor]]
[[zh:cpp/keyword/bitor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/bool</title>
    <ns>0</ns>
    <id>633</id>
    <revision>
      <id>44537</id>
      <parentid>33941</parentid>
      <timestamp>2012-11-03T07:05:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding [[de:cpp/keyword/bool]], [[ru:cpp/keyword/bool]], [[zh:cpp/keyword/bool]]</comment>
      <text xml:space="preserve" bytes="331">{{cpp/keyword/title|bool}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|bool}} type]]: as the declaration of the type

[[de:cpp/keyword/bool]]
[[es:cpp/keyword/bool]]
[[fr:cpp/keyword/bool]]
[[it:cpp/keyword/bool]]
[[ja:cpp/keyword/bool]]
[[pt:cpp/keyword/bool]]
[[ru:cpp/keyword/bool]]
[[zh:cpp/keyword/bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/break</title>
    <ns>0</ns>
    <id>634</id>
    <revision>
      <id>44536</id>
      <parentid>40104</parentid>
      <timestamp>2012-11-03T07:03:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, ru, zh</comment>
      <text xml:space="preserve" bytes="404">{{cpp/keyword/title|break}}
{{cpp/keyword/navbar}}
{{cpp/keyword/title | break}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/break | {{tt|break}} statement]]: as the declaration of the statement

[[de:cpp/keyword/break]]
[[es:cpp/keyword/break]]
[[fr:cpp/keyword/break]]
[[it:cpp/keyword/break]]
[[ja:cpp/keyword/break]]
[[pt:cpp/keyword/break]]
[[ru:cpp/keyword/break]]
[[zh:cpp/keyword/break]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/case</title>
    <ns>0</ns>
    <id>635</id>
    <revision>
      <id>44534</id>
      <parentid>33943</parentid>
      <timestamp>2012-11-03T07:02:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="346">{{cpp/keyword/title|case}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/switch | {{tt|switch}} statement]]: as the declaration of the case labels

[[de:cpp/keyword/case]]
[[es:cpp/keyword/case]]
[[fr:cpp/keyword/case]]
[[it:cpp/keyword/case]]
[[ja:cpp/keyword/case]]
[[pt:cpp/keyword/case]]
[[ru:cpp/keyword/case]]
[[zh:cpp/keyword/case]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/catch</title>
    <ns>0</ns>
    <id>636</id>
    <revision>
      <id>44533</id>
      <parentid>33944</parentid>
      <timestamp>2012-11-03T07:02:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="318">{{cpp/keyword/title|catch}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/try catch | {{tt|try-catch}} block]]

[[de:cpp/keyword/catch]]
[[es:cpp/keyword/catch]]
[[fr:cpp/keyword/catch]]
[[it:cpp/keyword/catch]]
[[ja:cpp/keyword/catch]]
[[pt:cpp/keyword/catch]]
[[ru:cpp/keyword/catch]]
[[zh:cpp/keyword/catch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/char</title>
    <ns>0</ns>
    <id>637</id>
    <revision>
      <id>44531</id>
      <parentid>33945</parentid>
      <timestamp>2012-11-03T07:01:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="331">{{cpp/keyword/title|char}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|char}} type]]: as the declaration of the type

[[de:cpp/keyword/char]]
[[es:cpp/keyword/char]]
[[fr:cpp/keyword/char]]
[[it:cpp/keyword/char]]
[[ja:cpp/keyword/char]]
[[pt:cpp/keyword/char]]
[[ru:cpp/keyword/char]]
[[zh:cpp/keyword/char]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/char16 t</title>
    <ns>0</ns>
    <id>638</id>
    <revision>
      <id>44529</id>
      <parentid>33946</parentid>
      <timestamp>2012-11-03T07:00:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="414">{{cpp/keyword/title|char16_t {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/types | {{tt|char16_t}} type]]: as the declaration of the type {{mark since c++11}}

[[de:cpp/keyword/char16 t]]
[[es:cpp/keyword/char16 t]]
[[fr:cpp/keyword/char16 t]]
[[it:cpp/keyword/char16 t]]
[[ja:cpp/keyword/char16 t]]
[[pt:cpp/keyword/char16 t]]
[[ru:cpp/keyword/char16 t]]
[[zh:cpp/keyword/char16 t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/char32 t</title>
    <ns>0</ns>
    <id>639</id>
    <revision>
      <id>44527</id>
      <parentid>33947</parentid>
      <timestamp>2012-11-03T06:59:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="414">{{cpp/keyword/title|char32_t {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/types | {{tt|char32_t}} type]]: as the declaration of the type {{mark since c++11}}

[[de:cpp/keyword/char32 t]]
[[es:cpp/keyword/char32 t]]
[[fr:cpp/keyword/char32 t]]
[[it:cpp/keyword/char32 t]]
[[ja:cpp/keyword/char32 t]]
[[pt:cpp/keyword/char32 t]]
[[ru:cpp/keyword/char32 t]]
[[zh:cpp/keyword/char32 t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/class</title>
    <ns>0</ns>
    <id>3526</id>
    <revision>
      <id>77590</id>
      <parentid>75766</parentid>
      <timestamp>2015-03-31T14:00:47Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>link [[cpp/language/elaborated type specifier|elaborated type specifier]]</comment>
      <text xml:space="preserve" bytes="1284">{{cpp/keyword/title|class}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/class | declaration of a class]]
{{rev begin}}
{{rev | since=c++11 |
* [[cpp/language/enum | declaration of a scoped enumeration type]]
}}
{{rev end}}
* In a [[cpp/language/templates | template declaration]], {{c|class}} can be used to introduce [[cpp/language/template_parameters#Type_template_parameter | type template parameters]] and [[cpp/language/template_parameters#Template_template_parameter | template template parameters]]
* If a function or a variable exists in scope with the name identical to the name of a class type, {{tt|class}} can be prepended to the name for disambiguation, resulting in an [[cpp/language/elaborated type specifier|elaborated type specifier]]

===Example===

{{example|code=
class Foo;  // forward declaration of a class

class Bar { // definition of a class
  public:
    Bar(int i) : m_i(i) {}
  private:
    int m_i;
};

template &lt;class T&gt; // template argument
void qux() {
    T t;
}

int main()
{
    Bar Bar(1);
    class Bar Bar2(2); // elaborated type
}
}}

[[de:cpp/keyword/class]]
[[es:cpp/keyword/class]]
[[fr:cpp/keyword/class]]
[[it:cpp/keyword/class]]
[[ja:cpp/keyword/class]]
[[pt:cpp/keyword/class]]
[[ru:cpp/keyword/class]]
[[zh:cpp/keyword/class]]</text>
      <sha1>7yu6eerx0mqxdde5rt2arb4fa9jlela</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/compl</title>
    <ns>0</ns>
    <id>640</id>
    <revision>
      <id>44522</id>
      <parentid>33949</parentid>
      <timestamp>2012-11-03T06:57:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="360">{{cpp/keyword/title|compl}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|~}}

[[de:cpp/keyword/compl]]
[[es:cpp/keyword/compl]]
[[fr:cpp/keyword/compl]]
[[it:cpp/keyword/compl]]
[[ja:cpp/keyword/compl]]
[[pt:cpp/keyword/compl]]
[[ru:cpp/keyword/compl]]
[[zh:cpp/keyword/compl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/concept</title>
    <ns>0</ns>
    <id>13974</id>
    <revision>
      <id>75811</id>
      <parentid>75810</parentid>
      <timestamp>2015-01-30T16:16:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="375">{{cpp/keyword/title|concept}}
{{cpp/keyword/navbar}}
===Usage===

* declares a [[cpp/language/constraints | named type requirement]]{{mark since concepts_ts}}

[[de:cpp/keyword/concept]]
[[es:cpp/keyword/concept]]
[[fr:cpp/keyword/concept]]
[[it:cpp/keyword/concept]]
[[ja:cpp/keyword/concept]]
[[pt:cpp/keyword/concept]]
[[ru:cpp/keyword/concept]]
[[zh:cpp/keyword/concept]]</text>
      <sha1>eibe0bel282a2mzgbhcycxcn2bh6xzj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/const</title>
    <ns>0</ns>
    <id>641</id>
    <revision>
      <id>73859</id>
      <parentid>44520</parentid>
      <timestamp>2014-11-19T14:03:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>qualifier</comment>
      <text xml:space="preserve" bytes="316">{{cpp/keyword/title|const}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/cv | {{tt|const}} type qualifier]]

[[de:cpp/keyword/const]]
[[es:cpp/keyword/const]]
[[fr:cpp/keyword/const]]
[[it:cpp/keyword/const]]
[[ja:cpp/keyword/const]]
[[pt:cpp/keyword/const]]
[[ru:cpp/keyword/const]]
[[zh:cpp/keyword/const]]</text>
      <sha1>a8ojgt3splztw87y2agcuqm6oormxlr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/const cast</title>
    <ns>0</ns>
    <id>642</id>
    <revision>
      <id>44518</id>
      <parentid>33952</parentid>
      <timestamp>2012-11-03T06:56:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="424">{{cpp/keyword/title|const_cast}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/const_cast | {{tt|const_cast}} type conversion expression]]: as the declaration of the expression

[[de:cpp/keyword/const cast]]
[[es:cpp/keyword/const cast]]
[[fr:cpp/keyword/const cast]]
[[it:cpp/keyword/const cast]]
[[ja:cpp/keyword/const cast]]
[[pt:cpp/keyword/const cast]]
[[ru:cpp/keyword/const cast]]
[[zh:cpp/keyword/const cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/constexpr</title>
    <ns>0</ns>
    <id>643</id>
    <revision>
      <id>86901</id>
      <parentid>44516</parentid>
      <timestamp>2016-07-14T15:22:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+link to if</comment>
      <text xml:space="preserve" bytes="481">{{cpp/keyword/title|constexpr {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/constexpr | {{tt|constexpr}} declaration specifier]] {{mark since c++11}}
* [[cpp/language/if| constexpr if statement]] {{mark since c++17}}


[[de:cpp/keyword/constexpr]]
[[es:cpp/keyword/constexpr]]
[[fr:cpp/keyword/constexpr]]
[[it:cpp/keyword/constexpr]]
[[ja:cpp/keyword/constexpr]]
[[pt:cpp/keyword/constexpr]]
[[ru:cpp/keyword/constexpr]]
[[zh:cpp/keyword/constexpr]]</text>
      <sha1>87gez5ejzt6ent33clln3t3dn4vtcek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/continue</title>
    <ns>0</ns>
    <id>644</id>
    <revision>
      <id>44514</id>
      <parentid>33954</parentid>
      <timestamp>2012-11-03T06:55:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="412">{{cpp/keyword/title|continue}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/continue | {{tt|continue}} statement]]: as the declaration of the statement

[[de:cpp/keyword/continue]]
[[es:cpp/keyword/continue]]
[[fr:cpp/keyword/continue]]
[[it:cpp/keyword/continue]]
[[ja:cpp/keyword/continue]]
[[pl:cpp/keyword/continue]]
[[pt:cpp/keyword/continue]]
[[ru:cpp/keyword/continue]]
[[zh:cpp/keyword/continue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/decltype</title>
    <ns>0</ns>
    <id>3103</id>
    <revision>
      <id>80334</id>
      <parentid>44512</parentid>
      <timestamp>2015-08-06T11:49:57Z</timestamp>
      <contributor>
        <ip>221.178.200.38</ip>
      </contributor>
      <comment>mention `decltype(auto)'</comment>
      <text xml:space="preserve" bytes="446">{{cpp/keyword/title|decltype}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/decltype | {{tt|decltype}} specifier]]
{{rev begin}}
{{rev | since=c++14 |
* [[cpp/language/auto | {{tt|decltype(auto)}}]]
}}
{{rev end}}

[[de:cpp/keyword/decltype]]
[[es:cpp/keyword/decltype]]
[[fr:cpp/keyword/decltype]]
[[it:cpp/keyword/decltype]]
[[ja:cpp/keyword/decltype]]
[[pt:cpp/keyword/decltype]]
[[ru:cpp/keyword/decltype]]
[[zh:cpp/keyword/decltype]]</text>
      <sha1>2gtyx1qto1ysye9aiffz0e3az4hdy12</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/default</title>
    <ns>0</ns>
    <id>645</id>
    <revision>
      <id>75424</id>
      <parentid>44510</parentid>
      <timestamp>2015-01-17T09:04:17Z</timestamp>
      <contributor>
        <ip>124.166.231.159</ip>
      </contributor>
      <text xml:space="preserve" bytes="596">{{cpp/keyword/title|default}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/switch | {{tt|switch}} statement]]: as the declaration of the default case label
* explicitly-defaulted function definition: as an explicit instruction to the compiler to generate [[cpp/language/member functions#Special member functions|special member function]] for a class. {{mark since c++11}}

[[de:cpp/keyword/default]]
[[es:cpp/keyword/default]]
[[fr:cpp/keyword/default]]
[[it:cpp/keyword/default]]
[[ja:cpp/keyword/default]]
[[pt:cpp/keyword/default]]
[[ru:cpp/keyword/default]]
[[zh:cpp/keyword/default]]</text>
      <sha1>o0a44kprmpwnszklcus22egljz0eobu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/delete</title>
    <ns>0</ns>
    <id>646</id>
    <revision>
      <id>75415</id>
      <parentid>44508</parentid>
      <timestamp>2015-01-17T06:22:40Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>link [[cpp/language/function#Deleted_functions]]</comment>
      <text xml:space="preserve" bytes="541">{{cpp/keyword/title|delete}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/delete | {{tt|delete}} expression]]
* [[cpp/memory/new/operator_delete | allocation functions]] as the name of operator-like functions
{{rev begin}}
{{rev | since=c++11 |
* [[cpp/language/function#Deleted_functions|deleted functions]]
}}
{{rev end}}

[[de:cpp/keyword/delete]]
[[es:cpp/keyword/delete]]
[[fr:cpp/keyword/delete]]
[[it:cpp/keyword/delete]]
[[ja:cpp/keyword/delete]]
[[pt:cpp/keyword/delete]]
[[ru:cpp/keyword/delete]]
[[zh:cpp/keyword/delete]]</text>
      <sha1>tuu3t4pe7kcapkvwp9hjio4ew31am06</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/do</title>
    <ns>0</ns>
    <id>647</id>
    <revision>
      <id>44505</id>
      <parentid>33959</parentid>
      <timestamp>2012-11-03T06:51:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="314">{{cpp/keyword/title|do}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/do | {{tt|do-while}} loop]]: as the declaration of the loop

[[de:cpp/keyword/do]]
[[es:cpp/keyword/do]]
[[fr:cpp/keyword/do]]
[[it:cpp/keyword/do]]
[[ja:cpp/keyword/do]]
[[pt:cpp/keyword/do]]
[[ru:cpp/keyword/do]]
[[zh:cpp/keyword/do]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/double</title>
    <ns>0</ns>
    <id>648</id>
    <revision>
      <id>44502</id>
      <parentid>33960</parentid>
      <timestamp>2012-11-03T06:50:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="351">{{cpp/keyword/title|double}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|double}} type]]: as the declaration of the type

[[de:cpp/keyword/double]]
[[es:cpp/keyword/double]]
[[fr:cpp/keyword/double]]
[[it:cpp/keyword/double]]
[[ja:cpp/keyword/double]]
[[pt:cpp/keyword/double]]
[[ru:cpp/keyword/double]]
[[zh:cpp/keyword/double]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/dynamic cast</title>
    <ns>0</ns>
    <id>649</id>
    <revision>
      <id>44500</id>
      <parentid>33961</parentid>
      <timestamp>2012-11-03T06:49:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, ru, zh</comment>
      <text xml:space="preserve" bytes="446">{{cpp/keyword/title|dynamic_cast}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/dynamic_cast | {{tt|dynamic_cast}} type conversion expression]]: as the declaration of the expression

[[de:cpp/keyword/dynamic cast]]
[[es:cpp/keyword/dynamic cast]]
[[fr:cpp/keyword/dynamic cast]]
[[it:cpp/keyword/dynamic cast]]
[[ja:cpp/keyword/dynamic cast]]
[[pt:cpp/keyword/dynamic cast]]
[[ru:cpp/keyword/dynamic cast]]
[[zh:cpp/keyword/dynamic cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/else</title>
    <ns>0</ns>
    <id>650</id>
    <revision>
      <id>44498</id>
      <parentid>33962</parentid>
      <timestamp>2012-11-03T06:48:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding [[de:cpp/keyword/else]], [[ru:cpp/keyword/else]], [[zh:cpp/keyword/else]]</comment>
      <text xml:space="preserve" bytes="345">{{cpp/keyword/title|else}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/if | {{tt|if}} statement]]: as the declaration of the alternative branch

[[de:cpp/keyword/else]]
[[es:cpp/keyword/else]]
[[fr:cpp/keyword/else]]
[[it:cpp/keyword/else]]
[[ja:cpp/keyword/else]]
[[pt:cpp/keyword/else]]
[[ru:cpp/keyword/else]]
[[zh:cpp/keyword/else]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/enum</title>
    <ns>0</ns>
    <id>3527</id>
    <revision>
      <id>44496</id>
      <parentid>33963</parentid>
      <timestamp>2012-11-03T06:47:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding [[de:cpp/keyword/enum]], [[pt:cpp/keyword/enum]], [[zh:cpp/keyword/enum]]</comment>
      <text xml:space="preserve" bytes="341">{{cpp/keyword/title|enum}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/enum | declaration of an enumeration type]]

[[ar:cpp/keyword/enum]]
[[de:cpp/keyword/enum]]
[[es:cpp/keyword/enum]]
[[fr:cpp/keyword/enum]]
[[it:cpp/keyword/enum]]
[[ja:cpp/keyword/enum]]
[[pt:cpp/keyword/enum]]
[[ru:cpp/keyword/enum]]
[[zh:cpp/keyword/enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/explicit</title>
    <ns>0</ns>
    <id>5063</id>
    <revision>
      <id>44493</id>
      <parentid>33964</parentid>
      <timestamp>2012-11-03T06:46:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding [[pt:cpp/keyword/explicit]], [[ru:cpp/keyword/explicit]]</comment>
      <text xml:space="preserve" bytes="366">{{cpp/keyword/title|explicit}}
{{cpp/keyword/navbar}}
===Usage===
*[[cpp/language/explicit | explicit specifier]]

[[de:cpp/keyword/explicit]]
[[es:cpp/keyword/explicit]]
[[fr:cpp/keyword/explicit]]
[[it:cpp/keyword/explicit]]
[[ja:cpp/keyword/explicit]]
[[pl:cpp/keyword/explicit]]
[[pt:cpp/keyword/explicit]]
[[ru:cpp/keyword/explicit]]
[[zh:cpp/keyword/explicit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/export</title>
    <ns>0</ns>
    <id>5076</id>
    <revision>
      <id>85610</id>
      <parentid>66787</parentid>
      <timestamp>2016-04-27T13:04:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention the modules ts meaning</comment>
      <text xml:space="preserve" bytes="677">{{cpp/keyword/title|export}}
{{cpp/keyword/navbar}}
===Usage===
{{rev begin}}
{{rev|until=c++11|
Used to mark a [[cpp/language/class template|template definition]] ''exported'', which  allows the same template to be declared, but not defined, in other translation units.}}
{{rev|since=c++11|
The keyword is unused and reserved.
}}
{{rev|since=modules ts|
Marks a declaration, a group of declarations, or another module as exported by the current module.
}}
{{rev end}}

[[de:cpp/keyword/export]]
[[es:cpp/keyword/export]]
[[fr:cpp/keyword/export]]
[[it:cpp/keyword/export]]
[[ja:cpp/keyword/export]]
[[pt:cpp/keyword/export]]
[[ru:cpp/keyword/export]]
[[zh:cpp/keyword/export]]</text>
      <sha1>mout7rs0h27yofbuzfrcapk3nj747pj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/extern</title>
    <ns>0</ns>
    <id>651</id>
    <revision>
      <id>46895</id>
      <parentid>44490</parentid>
      <timestamp>2013-04-16T19:26:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+language linkage (as in extern &quot;C&quot; { ....), plus already-existing extern templates</comment>
      <text xml:space="preserve" bytes="565">{{cpp/keyword/title|extern}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/storage_duration | static storage duration with ''external'' linkage specifier]]
* [[cpp/language/language_linkage|language linkage]] specification
* [[cpp/language/class_template|explicit template instantiation declaration]] (or &quot;extern template&quot;)

[[ar:cpp/keyword/extern]]
[[de:cpp/keyword/extern]]
[[es:cpp/keyword/extern]]
[[fr:cpp/keyword/extern]]
[[it:cpp/keyword/extern]]
[[ja:cpp/keyword/extern]]
[[pt:cpp/keyword/extern]]
[[ru:cpp/keyword/extern]]
[[zh:cpp/keyword/extern]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/false</title>
    <ns>0</ns>
    <id>652</id>
    <revision>
      <id>78410</id>
      <parentid>44487</parentid>
      <timestamp>2015-05-21T13:21:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link bool literal</comment>
      <text xml:space="preserve" bytes="339">{{cpp/keyword/title|false}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/bool_literal | boolean literal]]

[[de:cpp/keyword/false]]
[[es:cpp/keyword/false]]
[[fr:cpp/keyword/false]]
[[it:cpp/keyword/false]]
[[ja:cpp/keyword/false]]
[[pl:cpp/keyword/false]]
[[pt:cpp/keyword/false]]
[[ru:cpp/keyword/false]]
[[zh:cpp/keyword/false]]</text>
      <sha1>jivb3yitts4ikxs0lny96335qa08ge0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/final</title>
    <ns>0</ns>
    <id>5070</id>
    <revision>
      <id>44484</id>
      <parentid>33968</parentid>
      <timestamp>2012-11-03T06:42:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="326">{{cpp/keyword/title|final {{mark since c++11}}}}
{{cpp/keyword/navbar}}
===Usage===
*[[cpp/language/final | final specifier]]

[[de:cpp/keyword/final]]
[[es:cpp/keyword/final]]
[[fr:cpp/keyword/final]]
[[it:cpp/keyword/final]]
[[ja:cpp/keyword/final]]
[[pt:cpp/keyword/final]]
[[ru:cpp/keyword/final]]
[[zh:cpp/keyword/final]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/float</title>
    <ns>0</ns>
    <id>653</id>
    <revision>
      <id>44482</id>
      <parentid>33969</parentid>
      <timestamp>2012-11-03T06:42:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="341">{{cpp/keyword/title|float}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|float}} type]]: as the declaration of the type

[[de:cpp/keyword/float]]
[[es:cpp/keyword/float]]
[[fr:cpp/keyword/float]]
[[it:cpp/keyword/float]]
[[ja:cpp/keyword/float]]
[[pt:cpp/keyword/float]]
[[ru:cpp/keyword/float]]
[[zh:cpp/keyword/float]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/for</title>
    <ns>0</ns>
    <id>654</id>
    <revision>
      <id>44480</id>
      <parentid>33970</parentid>
      <timestamp>2012-11-03T06:41:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="431">{{cpp/keyword/title|for}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/for | {{tt|for}} loop]]: as the declaration of the loop
* [[cpp/language/range-for | range-based {{tt|for}} loop]]: as the declaration of the loop {{mark since c++11}}

[[de:cpp/keyword/for]]
[[es:cpp/keyword/for]]
[[fr:cpp/keyword/for]]
[[it:cpp/keyword/for]]
[[ja:cpp/keyword/for]]
[[pt:cpp/keyword/for]]
[[ru:cpp/keyword/for]]
[[zh:cpp/keyword/for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/friend</title>
    <ns>0</ns>
    <id>3082</id>
    <revision>
      <id>44478</id>
      <parentid>33972</parentid>
      <timestamp>2012-11-03T06:40:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="325">{{cpp/keyword/title|friend}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/friend | {{tt|friend}} specifier]]

[[de:cpp/keyword/friend]]
[[es:cpp/keyword/friend]]
[[fr:cpp/keyword/friend]]
[[it:cpp/keyword/friend]]
[[ja:cpp/keyword/friend]]
[[pt:cpp/keyword/friend]]
[[ru:cpp/keyword/friend]]
[[zh:cpp/keyword/friend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/goto</title>
    <ns>0</ns>
    <id>655</id>
    <revision>
      <id>44475</id>
      <parentid>33973</parentid>
      <timestamp>2012-11-03T06:39:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="340">{{cpp/keyword/title|goto}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/goto | {{tt|goto}} statement]]: as the declaration of the statement

[[de:cpp/keyword/goto]]
[[es:cpp/keyword/goto]]
[[fr:cpp/keyword/goto]]
[[it:cpp/keyword/goto]]
[[ja:cpp/keyword/goto]]
[[pt:cpp/keyword/goto]]
[[ru:cpp/keyword/goto]]
[[zh:cpp/keyword/goto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/if</title>
    <ns>0</ns>
    <id>656</id>
    <revision>
      <id>44472</id>
      <parentid>33974</parentid>
      <timestamp>2012-11-03T06:39:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding [[de:cpp/keyword/if]], [[fr:cpp/keyword/if]], [[zh:cpp/keyword/if]]</comment>
      <text xml:space="preserve" bytes="328">{{cpp/keyword/title|if}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/if | {{tt|if}} statement]]: as the declaration of the {{tt|if}} statement

[[de:cpp/keyword/if]]
[[es:cpp/keyword/if]]
[[fr:cpp/keyword/if]]
[[it:cpp/keyword/if]]
[[ja:cpp/keyword/if]]
[[pt:cpp/keyword/if]]
[[ru:cpp/keyword/if]]
[[zh:cpp/keyword/if]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/inline</title>
    <ns>0</ns>
    <id>3083</id>
    <revision>
      <id>87217</id>
      <parentid>44929</parentid>
      <timestamp>2016-08-03T19:41:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>...and variables</comment>
      <text xml:space="preserve" bytes="464">{{cpp/keyword/title|inline}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/inline | {{tt|inline}} specifier]] for functions {{rev inl|since=c++17|and variables}}
* [[cpp/language/namespace | {{tt|inline namespace}}]] definition {{mark since c++11}}

[[de:cpp/keyword/inline]]
[[es:cpp/keyword/inline]]
[[fr:cpp/keyword/inline]]
[[it:cpp/keyword/inline]]
[[ja:cpp/keyword/inline]]
[[pt:cpp/keyword/inline]]
[[ru:cpp/keyword/inline]]
[[zh:cpp/keyword/inline]]</text>
      <sha1>jwq9ncectqd2o9n9dpd2z075kb4tlje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/int</title>
    <ns>0</ns>
    <id>657</id>
    <revision>
      <id>44466</id>
      <parentid>33976</parentid>
      <timestamp>2012-11-03T06:37:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="344">{{cpp/keyword/title|int}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|int}} type]]: as the declaration of the type

[[de:cpp/keyword/int]]
[[es:cpp/keyword/int]]
[[fr:cpp/keyword/int]]
[[it:cpp/keyword/int]]
[[ja:cpp/keyword/int]]
[[pl:cpp/keyword/int]]
[[pt:cpp/keyword/int]]
[[ru:cpp/keyword/int]]
[[zh:cpp/keyword/int]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/long</title>
    <ns>0</ns>
    <id>658</id>
    <revision>
      <id>44463</id>
      <parentid>33977</parentid>
      <timestamp>2012-11-03T06:36:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="308">{{cpp/keyword/title|long}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|long}} type modifier]]

[[de:cpp/keyword/long]]
[[es:cpp/keyword/long]]
[[fr:cpp/keyword/long]]
[[it:cpp/keyword/long]]
[[ja:cpp/keyword/long]]
[[pt:cpp/keyword/long]]
[[ru:cpp/keyword/long]]
[[zh:cpp/keyword/long]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/mutable</title>
    <ns>0</ns>
    <id>659</id>
    <revision>
      <id>66625</id>
      <parentid>44461</parentid>
      <timestamp>2013-12-16T14:12:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+c++11 meaning</comment>
      <text xml:space="preserve" bytes="481">{{cpp/keyword/title|mutable}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/cv | {{tt|mutable}} type specifier]]
* [[cpp/language/lambda | ''lambda-declarator'' ]] that removes {{tt|const}} qualification from parameters captured by copy {{mark since c++11}}

[[de:cpp/keyword/mutable]]
[[es:cpp/keyword/mutable]]
[[fr:cpp/keyword/mutable]]
[[it:cpp/keyword/mutable]]
[[ja:cpp/keyword/mutable]]
[[pt:cpp/keyword/mutable]]
[[ru:cpp/keyword/mutable]]
[[zh:cpp/keyword/mutable]]</text>
      <sha1>ftxax60179izl3idpuarz31jd3sjps2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/namespace</title>
    <ns>0</ns>
    <id>3525</id>
    <revision>
      <id>68817</id>
      <parentid>44458</parentid>
      <timestamp>2014-03-22T02:10:14Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="484">{{cpp/keyword/title|namespace}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/namespace | namespace declaration]]
* [[cpp/language/namespace_alias | namespace alias definition]]
* [[cpp/language/namespace#Using-directives | using-directives ]]

[[de:cpp/keyword/namespace]]
[[es:cpp/keyword/namespace]]
[[fr:cpp/keyword/namespace]]
[[it:cpp/keyword/namespace]]
[[ja:cpp/keyword/namespace]]
[[pt:cpp/keyword/namespace]]
[[ru:cpp/keyword/namespace]]
[[zh:cpp/keyword/namespace]]</text>
      <sha1>ad8thit99rou2hr5hi1k1tcgi6l345q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/new</title>
    <ns>0</ns>
    <id>660</id>
    <revision>
      <id>44455</id>
      <parentid>33981</parentid>
      <timestamp>2012-11-03T06:33:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="389">{{cpp/keyword/title|new}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/new | {{tt|new}} expression]]
* [[cpp/memory/new/operator_new | allocation functions]] as the name of operator-like functions

[[de:cpp/keyword/new]]
[[es:cpp/keyword/new]]
[[fr:cpp/keyword/new]]
[[it:cpp/keyword/new]]
[[ja:cpp/keyword/new]]
[[pt:cpp/keyword/new]]
[[ru:cpp/keyword/new]]
[[zh:cpp/keyword/new]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/noexcept</title>
    <ns>0</ns>
    <id>661</id>
    <revision>
      <id>44452</id>
      <parentid>33982</parentid>
      <timestamp>2012-11-03T06:33:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="428">{{cpp/keyword/title|noexcept {{mark since c++11}}}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/noexcept | {{tt|noexcept}} operator]]
* [[cpp/language/noexcept_spec | {{tt|noexcept}} specifier]]

[[de:cpp/keyword/noexcept]]
[[es:cpp/keyword/noexcept]]
[[fr:cpp/keyword/noexcept]]
[[it:cpp/keyword/noexcept]]
[[ja:cpp/keyword/noexcept]]
[[pt:cpp/keyword/noexcept]]
[[ru:cpp/keyword/noexcept]]
[[zh:cpp/keyword/noexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/not</title>
    <ns>0</ns>
    <id>662</id>
    <revision>
      <id>44449</id>
      <parentid>33984</parentid>
      <timestamp>2012-11-03T06:32:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="342">{{cpp/keyword/title|not}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|!}}

[[de:cpp/keyword/not]]
[[es:cpp/keyword/not]]
[[fr:cpp/keyword/not]]
[[it:cpp/keyword/not]]
[[ja:cpp/keyword/not]]
[[pt:cpp/keyword/not]]
[[ru:cpp/keyword/not]]
[[zh:cpp/keyword/not]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/not eq</title>
    <ns>0</ns>
    <id>663</id>
    <revision>
      <id>44446</id>
      <parentid>33985</parentid>
      <timestamp>2012-11-03T06:31:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="374">{{cpp/keyword/title|not_eq}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|!{{=}}}}

[[de:cpp/keyword/not eq]]
[[es:cpp/keyword/not eq]]
[[fr:cpp/keyword/not eq]]
[[it:cpp/keyword/not eq]]
[[ja:cpp/keyword/not eq]]
[[pt:cpp/keyword/not eq]]
[[ru:cpp/keyword/not eq]]
[[zh:cpp/keyword/not eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/nullptr</title>
    <ns>0</ns>
    <id>3519</id>
    <revision>
      <id>44443</id>
      <parentid>33987</parentid>
      <timestamp>2012-11-03T06:30:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="385">{{cpp/keyword/title|nullptr {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/nullptr | {{tt|nullptr}} pointer literal]] {{mark since c++11}}

[[de:cpp/keyword/nullptr]]
[[es:cpp/keyword/nullptr]]
[[fr:cpp/keyword/nullptr]]
[[it:cpp/keyword/nullptr]]
[[ja:cpp/keyword/nullptr]]
[[pt:cpp/keyword/nullptr]]
[[ru:cpp/keyword/nullptr]]
[[zh:cpp/keyword/nullptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/operator</title>
    <ns>0</ns>
    <id>4064</id>
    <revision>
      <id>44440</id>
      <parentid>33988</parentid>
      <timestamp>2012-11-03T06:30:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="360">{{cpp/keyword/title|operator}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/operators | declaration of an overloaded operator]]

[[de:cpp/keyword/operator]]
[[es:cpp/keyword/operator]]
[[fr:cpp/keyword/operator]]
[[it:cpp/keyword/operator]]
[[ja:cpp/keyword/operator]]
[[pt:cpp/keyword/operator]]
[[ru:cpp/keyword/operator]]
[[zh:cpp/keyword/operator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/or</title>
    <ns>0</ns>
    <id>664</id>
    <revision>
      <id>44437</id>
      <parentid>33989</parentid>
      <timestamp>2012-11-03T06:29:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="338">{{cpp/keyword/title|or}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|{{!!}}}}

[[de:cpp/keyword/or]]
[[es:cpp/keyword/or]]
[[fr:cpp/keyword/or]]
[[it:cpp/keyword/or]]
[[ja:cpp/keyword/or]]
[[pt:cpp/keyword/or]]
[[ru:cpp/keyword/or]]
[[zh:cpp/keyword/or]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/or eq</title>
    <ns>0</ns>
    <id>665</id>
    <revision>
      <id>44435</id>
      <parentid>33990</parentid>
      <timestamp>2012-11-03T06:28:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="365">{{cpp/keyword/title|or_eq}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|{{!=}}}}

[[de:cpp/keyword/or eq]]
[[es:cpp/keyword/or eq]]
[[fr:cpp/keyword/or eq]]
[[it:cpp/keyword/or eq]]
[[ja:cpp/keyword/or eq]]
[[pt:cpp/keyword/or eq]]
[[ru:cpp/keyword/or eq]]
[[zh:cpp/keyword/or eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/override</title>
    <ns>0</ns>
    <id>5072</id>
    <revision>
      <id>44432</id>
      <parentid>33991</parentid>
      <timestamp>2012-11-03T06:28:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="359">{{cpp/keyword/title|override {{mark since c++11}}}}
{{cpp/keyword/navbar}}
===Usage===
*[[cpp/language/override | override specifier]]

[[de:cpp/keyword/override]]
[[es:cpp/keyword/override]]
[[fr:cpp/keyword/override]]
[[it:cpp/keyword/override]]
[[ja:cpp/keyword/override]]
[[pt:cpp/keyword/override]]
[[ru:cpp/keyword/override]]
[[zh:cpp/keyword/override]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/private</title>
    <ns>0</ns>
    <id>3522</id>
    <revision>
      <id>44429</id>
      <parentid>33992</parentid>
      <timestamp>2012-11-03T06:27:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="343">{{cpp/keyword/title|private}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/access | {{tt|private}} access specifier]]

[[de:cpp/keyword/private]]
[[es:cpp/keyword/private]]
[[fr:cpp/keyword/private]]
[[it:cpp/keyword/private]]
[[ja:cpp/keyword/private]]
[[pt:cpp/keyword/private]]
[[ru:cpp/keyword/private]]
[[zh:cpp/keyword/private]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/protected</title>
    <ns>0</ns>
    <id>3523</id>
    <revision>
      <id>44426</id>
      <parentid>33993</parentid>
      <timestamp>2012-11-03T06:26:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="363">{{cpp/keyword/title|protected}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/access | {{tt|protected}} access specifier]]

[[de:cpp/keyword/protected]]
[[es:cpp/keyword/protected]]
[[fr:cpp/keyword/protected]]
[[it:cpp/keyword/protected]]
[[ja:cpp/keyword/protected]]
[[pt:cpp/keyword/protected]]
[[ru:cpp/keyword/protected]]
[[zh:cpp/keyword/protected]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/public</title>
    <ns>0</ns>
    <id>3524</id>
    <revision>
      <id>44423</id>
      <parentid>33994</parentid>
      <timestamp>2012-11-03T06:25:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="333">{{cpp/keyword/title|public}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/access | {{tt|public}} access specifier]]

[[de:cpp/keyword/public]]
[[es:cpp/keyword/public]]
[[fr:cpp/keyword/public]]
[[it:cpp/keyword/public]]
[[ja:cpp/keyword/public]]
[[pt:cpp/keyword/public]]
[[ru:cpp/keyword/public]]
[[zh:cpp/keyword/public]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/register</title>
    <ns>0</ns>
    <id>666</id>
    <revision>
      <id>81359</id>
      <parentid>44420</parentid>
      <timestamp>2015-10-26T18:56:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Usage */ gone</comment>
      <text xml:space="preserve" bytes="490">{{cpp/keyword/title|register}}
{{cpp/keyword/navbar}}
===Usage===
{{rev begin}}
{{rev|until=c++17|
[[cpp/language/storage_duration | automatic storage duration specifier]] {{mark deprecated}}.
}}
{{rev|since=c++17|
The keyword is unused and reserved.
}}
{{rev end}}

[[de:cpp/keyword/register]]
[[es:cpp/keyword/register]]
[[fr:cpp/keyword/register]]
[[it:cpp/keyword/register]]
[[ja:cpp/keyword/register]]
[[pt:cpp/keyword/register]]
[[ru:cpp/keyword/register]]
[[zh:cpp/keyword/register]]</text>
      <sha1>orzepwkmxkgwjd5kl970gqzroz3i843</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/reinterpret cast</title>
    <ns>0</ns>
    <id>667</id>
    <revision>
      <id>44417</id>
      <parentid>33997</parentid>
      <timestamp>2012-11-03T06:24:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding [[fr:cpp/keyword/reinterpret cast]], [[pt:cpp/keyword/reinterpret cast]], [[zh:cpp/keyword/reinterpret cast]]</comment>
      <text xml:space="preserve" bytes="490">{{cpp/keyword/title|reinterpret_cast}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/reinterpret_cast | {{tt|reinterpret_cast}} type conversion expression]]: as the declaration of the expression

[[de:cpp/keyword/reinterpret cast]]
[[es:cpp/keyword/reinterpret cast]]
[[fr:cpp/keyword/reinterpret cast]]
[[it:cpp/keyword/reinterpret cast]]
[[ja:cpp/keyword/reinterpret cast]]
[[pt:cpp/keyword/reinterpret cast]]
[[ru:cpp/keyword/reinterpret cast]]
[[zh:cpp/keyword/reinterpret cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/requires</title>
    <ns>0</ns>
    <id>13975</id>
    <revision>
      <id>88586</id>
      <parentid>75812</parentid>
      <timestamp>2016-11-28T21:33:37Z</timestamp>
      <contributor>
        <username>Franl</username>
        <id>6085</id>
      </contributor>
      <minor/>
      <comment>Changed &quot;an&quot; to &quot;a&quot; for correctness.</comment>
      <text xml:space="preserve" bytes="575">{{cpp/keyword/title|requires}}
{{cpp/keyword/navbar}}
===Usage===

* in a function or function template declaration, specifies an [[cpp/language/constraints | associated constraint]] {{mark since concepts_ts}}
* specifies a constant expression on template parameters that [[cpp/language/constraints|evaluates a requirement]]{{mark since concepts_ts}}

[[de:cpp/keyword/requires]]
[[es:cpp/keyword/requires]]
[[fr:cpp/keyword/requires]]
[[it:cpp/keyword/requires]]
[[ja:cpp/keyword/requires]]
[[pt:cpp/keyword/requires]]
[[ru:cpp/keyword/requires]]
[[zh:cpp/keyword/requires]]</text>
      <sha1>th00e81biyvafuj0gxdbx6j571ha73d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/return</title>
    <ns>0</ns>
    <id>668</id>
    <revision>
      <id>44416</id>
      <parentid>33999</parentid>
      <timestamp>2012-11-03T06:24:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="414">{{cpp/keyword/title|return}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/return | {{tt|return}} statement]]: as the declaration of the statement

[[ar:cpp/keyword/return]]
[[de:cpp/keyword/return]]
[[es:cpp/keyword/return]]
[[fr:cpp/keyword/return]]
[[it:cpp/keyword/return]]
[[ja:cpp/keyword/return]]
[[pl:cpp/keyword/return]]
[[pt:cpp/keyword/return]]
[[ru:cpp/keyword/return]]
[[zh:cpp/keyword/return]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/short</title>
    <ns>0</ns>
    <id>669</id>
    <revision>
      <id>44412</id>
      <parentid>34000</parentid>
      <timestamp>2012-11-03T06:22:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="318">{{cpp/keyword/title|short}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|short}} type modifier]]

[[de:cpp/keyword/short]]
[[es:cpp/keyword/short]]
[[fr:cpp/keyword/short]]
[[it:cpp/keyword/short]]
[[ja:cpp/keyword/short]]
[[pt:cpp/keyword/short]]
[[ru:cpp/keyword/short]]
[[zh:cpp/keyword/short]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/signed</title>
    <ns>0</ns>
    <id>670</id>
    <revision>
      <id>44409</id>
      <parentid>34001</parentid>
      <timestamp>2012-11-03T06:21:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="328">{{cpp/keyword/title|signed}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|signed}} type modifier]]

[[de:cpp/keyword/signed]]
[[es:cpp/keyword/signed]]
[[fr:cpp/keyword/signed]]
[[it:cpp/keyword/signed]]
[[ja:cpp/keyword/signed]]
[[pt:cpp/keyword/signed]]
[[ru:cpp/keyword/signed]]
[[zh:cpp/keyword/signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/sizeof</title>
    <ns>0</ns>
    <id>671</id>
    <revision>
      <id>44406</id>
      <parentid>34002</parentid>
      <timestamp>2012-11-03T06:20:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, it, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="403">{{cpp/keyword/title|sizeof}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/sizeof | {{tt|sizeof}} operator]]

* [[cpp/language/sizeof... | {{tt|sizeof...}} operator]] {{mark since c++11}}

[[de:cpp/keyword/sizeof]]
[[es:cpp/keyword/sizeof]]
[[fr:cpp/keyword/sizeof]]
[[it:cpp/keyword/sizeof]]
[[ja:cpp/keyword/sizeof]]
[[pt:cpp/keyword/sizeof]]
[[ru:cpp/keyword/sizeof]]
[[zh:cpp/keyword/sizeof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/static</title>
    <ns>0</ns>
    <id>672</id>
    <revision>
      <id>44403</id>
      <parentid>34004</parentid>
      <timestamp>2012-11-03T06:20:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, it, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="459">{{cpp/keyword/title|static}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/storage_duration | static storage duration with ''internal'' linkage specifier]]
* [[cpp/language/static|declarations of class members not bound to specific instances]]

[[de:cpp/keyword/static]]
[[es:cpp/keyword/static]]
[[fr:cpp/keyword/static]]
[[it:cpp/keyword/static]]
[[ja:cpp/keyword/static]]
[[pt:cpp/keyword/static]]
[[ru:cpp/keyword/static]]
[[zh:cpp/keyword/static]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/static assert</title>
    <ns>0</ns>
    <id>3521</id>
    <revision>
      <id>44400</id>
      <parentid>34005</parentid>
      <timestamp>2012-11-03T06:19:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="447">{{cpp/keyword/title|static_assert {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/static_assert | {{tt|static_assert}} declaration]] {{mark since c++11}}

[[de:cpp/keyword/static assert]]
[[es:cpp/keyword/static assert]]
[[fr:cpp/keyword/static assert]]
[[it:cpp/keyword/static assert]]
[[ja:cpp/keyword/static assert]]
[[pt:cpp/keyword/static assert]]
[[ru:cpp/keyword/static assert]]
[[zh:cpp/keyword/static assert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/static cast</title>
    <ns>0</ns>
    <id>673</id>
    <revision>
      <id>44397</id>
      <parentid>34006</parentid>
      <timestamp>2012-11-03T06:18:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="435">{{cpp/keyword/title|static_cast}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/static_cast | {{tt|static_cast}} type conversion expression]]: as the declaration of the expression

[[de:cpp/keyword/static cast]]
[[es:cpp/keyword/static cast]]
[[fr:cpp/keyword/static cast]]
[[it:cpp/keyword/static cast]]
[[ja:cpp/keyword/static cast]]
[[pt:cpp/keyword/static cast]]
[[ru:cpp/keyword/static cast]]
[[zh:cpp/keyword/static cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/struct</title>
    <ns>0</ns>
    <id>3528</id>
    <revision>
      <id>77591</id>
      <parentid>75767</parentid>
      <timestamp>2015-03-31T14:02:49Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>link [[cpp/language/elaborated type specifier|elaborated type specifier]]</comment>
      <text xml:space="preserve" bytes="706">{{cpp/keyword/title|struct}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/class | declaration of a compound type]]
{{rev begin}}
{{rev | since=c++11 |
* [[cpp/language/enum | declaration of a scoped enumeration type]]
}}
{{rev end}}
* If a function or a variable exists in scope with the name identical to the name of a non-union class type, {{tt|struct}} can be prepended to the name for disambiguation, resulting in an [[cpp/language/elaborated type specifier|elaborated type specifier]]

[[de:cpp/keyword/struct]]
[[es:cpp/keyword/struct]]
[[fr:cpp/keyword/struct]]
[[it:cpp/keyword/struct]]
[[ja:cpp/keyword/struct]]
[[pt:cpp/keyword/struct]]
[[ru:cpp/keyword/struct]]
[[zh:cpp/keyword/struct]]</text>
      <sha1>2b2tlnltyjnsuhbyzuy5alcnwbopc76</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/switch</title>
    <ns>0</ns>
    <id>674</id>
    <revision>
      <id>44390</id>
      <parentid>34009</parentid>
      <timestamp>2012-11-03T06:17:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="362">{{cpp/keyword/title|switch}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/switch | {{tt|switch}} statement]]: as the declaration of the statement

[[de:cpp/keyword/switch]]
[[es:cpp/keyword/switch]]
[[fr:cpp/keyword/switch]]
[[it:cpp/keyword/switch]]
[[ja:cpp/keyword/switch]]
[[pt:cpp/keyword/switch]]
[[ru:cpp/keyword/switch]]
[[zh:cpp/keyword/switch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/template</title>
    <ns>0</ns>
    <id>3530</id>
    <revision>
      <id>72714</id>
      <parentid>44756</parentid>
      <timestamp>2014-09-20T09:04:41Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Now</comment>
      <text xml:space="preserve" bytes="488">{{cpp/keyword/title|template}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/templates | Declaration of a template]]
* Inside a template definition, {{c|template}} can be used to declare that a [[cpp/language/dependent_name|dependent name]] is a template.

[[de:cpp/keyword/template]]
[[es:cpp/keyword/template]]
[[fr:cpp/keyword/template]]
[[it:cpp/keyword/template]]
[[ja:cpp/keyword/template]]
[[pt:cpp/keyword/template]]
[[ru:cpp/keyword/template]]
[[zh:cpp/keyword/template]]</text>
      <sha1>r7t9e9yutagyg4m651xu8qay85ceqzm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/this</title>
    <ns>0</ns>
    <id>3532</id>
    <revision>
      <id>44384</id>
      <parentid>34013</parentid>
      <timestamp>2012-11-03T06:15:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="302">{{cpp/keyword/title|this}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/this | {{tt|this}} pointer]]

[[de:cpp/keyword/this]]
[[es:cpp/keyword/this]]
[[fr:cpp/keyword/this]]
[[it:cpp/keyword/this]]
[[ja:cpp/keyword/this]]
[[pt:cpp/keyword/this]]
[[ru:cpp/keyword/this]]
[[zh:cpp/keyword/this]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/thread local</title>
    <ns>0</ns>
    <id>675</id>
    <revision>
      <id>90299</id>
      <parentid>44381</parentid>
      <timestamp>2017-02-19T22:25:22Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="527">{{cpp/keyword/title|thread_local {{mark since c++11}}}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/storage_duration | thread local storage duration specifier]] {{mark since c++11}}

===See also===
{{dsc begin}}
{{dsc see c | c/thread/thread_local}}
{{dsc end}}

[[de:cpp/keyword/thread local]]
[[es:cpp/keyword/thread local]]
[[fr:cpp/keyword/thread local]]
[[it:cpp/keyword/thread local]]
[[ja:cpp/keyword/thread local]]
[[pt:cpp/keyword/thread local]]
[[ru:cpp/keyword/thread local]]
[[zh:cpp/keyword/thread local]]</text>
      <sha1>c63dt29jhq85v9qwpbn39qzjfobp9zy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/throw</title>
    <ns>0</ns>
    <id>676</id>
    <revision>
      <id>44378</id>
      <parentid>34017</parentid>
      <timestamp>2012-11-03T06:13:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, pt, zh</comment>
      <text xml:space="preserve" bytes="373">{{cpp/keyword/title|throw}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/throw | {{tt|throw}} expression]]
* [[cpp/language/except_spec | exception specifications]]

[[de:cpp/keyword/throw]]
[[es:cpp/keyword/throw]]
[[fr:cpp/keyword/throw]]
[[it:cpp/keyword/throw]]
[[ja:cpp/keyword/throw]]
[[pt:cpp/keyword/throw]]
[[ru:cpp/keyword/throw]]
[[zh:cpp/keyword/throw]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/true</title>
    <ns>0</ns>
    <id>677</id>
    <revision>
      <id>78409</id>
      <parentid>44376</parentid>
      <timestamp>2015-05-21T13:20:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link bool literal</comment>
      <text xml:space="preserve" bytes="329">{{cpp/keyword/title|true}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/bool_literal | boolean literal]]

[[de:cpp/keyword/true]]
[[es:cpp/keyword/true]]
[[fr:cpp/keyword/true]]
[[it:cpp/keyword/true]]
[[ja:cpp/keyword/true]]
[[pl:cpp/keyword/true]]
[[pt:cpp/keyword/true]]
[[ru:cpp/keyword/true]]
[[zh:cpp/keyword/true]]</text>
      <sha1>qvfe761t5cd0l5uwbyk0zmuzyu2052y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/try</title>
    <ns>0</ns>
    <id>678</id>
    <revision>
      <id>44373</id>
      <parentid>34020</parentid>
      <timestamp>2012-11-03T06:12:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="300">{{cpp/keyword/title|try}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/try catch | {{tt|try-catch}} block]]

[[de:cpp/keyword/try]]
[[es:cpp/keyword/try]]
[[fr:cpp/keyword/try]]
[[it:cpp/keyword/try]]
[[ja:cpp/keyword/try]]
[[pt:cpp/keyword/try]]
[[ru:cpp/keyword/try]]
[[zh:cpp/keyword/try]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/typedef</title>
    <ns>0</ns>
    <id>2852</id>
    <revision>
      <id>44370</id>
      <parentid>34021</parentid>
      <timestamp>2012-11-03T06:11:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, zh</comment>
      <text xml:space="preserve" bytes="338">{{cpp/keyword/title|typedef}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/typedef | {{tt|typedef}} declaration]]

[[de:cpp/keyword/typedef]]
[[es:cpp/keyword/typedef]]
[[fr:cpp/keyword/typedef]]
[[it:cpp/keyword/typedef]]
[[ja:cpp/keyword/typedef]]
[[pt:cpp/keyword/typedef]]
[[ru:cpp/keyword/typedef]]
[[zh:cpp/keyword/typedef]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/typeid</title>
    <ns>0</ns>
    <id>679</id>
    <revision>
      <id>44367</id>
      <parentid>34022</parentid>
      <timestamp>2012-11-03T06:10:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, fr, it, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="324">{{cpp/keyword/title|typeid}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/typeid | {{tt|typeid}} operator]]

[[de:cpp/keyword/typeid]]
[[es:cpp/keyword/typeid]]
[[fr:cpp/keyword/typeid]]
[[it:cpp/keyword/typeid]]
[[ja:cpp/keyword/typeid]]
[[pt:cpp/keyword/typeid]]
[[ru:cpp/keyword/typeid]]
[[zh:cpp/keyword/typeid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/typename</title>
    <ns>0</ns>
    <id>5064</id>
    <revision>
      <id>74129</id>
      <parentid>67952</parentid>
      <timestamp>2014-12-03T16:06:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++17</comment>
      <text xml:space="preserve" bytes="740">{{cpp/keyword/title|typename}}
{{cpp/keyword/navbar}}

===Usage===

* In a [[cpp/language/templates | template declaration]], {{c|typename}} can be used as an alternative to [[cpp/keyword/class | class]] to declare [[cpp/language/template_parameters#Type template parameter|type template parameters]] {{rev inl|since=c++17|and template template parameters}}.
* Inside a declaration or a definition of a template, {{c|typename}} can be used to declare that a [[cpp/language/dependent_name|dependent name]] is a type.

[[de:cpp/keyword/typename]]
[[es:cpp/keyword/typename]]
[[fr:cpp/keyword/typename]]
[[it:cpp/keyword/typename]]
[[ja:cpp/keyword/typename]]
[[pt:cpp/keyword/typename]]
[[ru:cpp/keyword/typename]]
[[zh:cpp/keyword/typename]]</text>
      <sha1>21eq3xhcftpreobzp7ib20cxxh5phf0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/union</title>
    <ns>0</ns>
    <id>3533</id>
    <revision>
      <id>77592</id>
      <parentid>44362</parentid>
      <timestamp>2015-03-31T14:10:09Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>link [[cpp/language/elaborated type specifier|elaborated type specifier]]</comment>
      <text xml:space="preserve" bytes="566">{{cpp/keyword/title|union}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/union | declaration of a union type]]
* If a function or a variable exists in scope with the name identical to the name of a union type, {{tt|union}} can be prepended to the name for disambiguation, resulting in an [[cpp/language/elaborated type specifier|elaborated type specifier]]

[[de:cpp/keyword/union]]
[[es:cpp/keyword/union]]
[[fr:cpp/keyword/union]]
[[it:cpp/keyword/union]]
[[ja:cpp/keyword/union]]
[[pt:cpp/keyword/union]]
[[ru:cpp/keyword/union]]
[[zh:cpp/keyword/union]]</text>
      <sha1>nheso1ii0lh1gmaslf5td7fjg0prqn4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/unsigned</title>
    <ns>0</ns>
    <id>680</id>
    <revision>
      <id>44359</id>
      <parentid>34026</parentid>
      <timestamp>2012-11-03T06:08:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="348">{{cpp/keyword/title|unsigned}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|unsigned}} type modifier]]

[[de:cpp/keyword/unsigned]]
[[es:cpp/keyword/unsigned]]
[[fr:cpp/keyword/unsigned]]
[[it:cpp/keyword/unsigned]]
[[ja:cpp/keyword/unsigned]]
[[pt:cpp/keyword/unsigned]]
[[ru:cpp/keyword/unsigned]]
[[zh:cpp/keyword/unsigned]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/using</title>
    <ns>0</ns>
    <id>3529</id>
    <revision>
      <id>66676</id>
      <parentid>46643</parentid>
      <timestamp>2013-12-23T20:47:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>more pedantic about aliases</comment>
      <text xml:space="preserve" bytes="575">{{cpp/keyword/title|using}}
{{cpp/keyword/navbar}}

===Usage===

* [[cpp/language/namespace | using-directives ]] for namespaces and [[cpp/language/namespace | using-declarations]] for namespace members
* [[cpp/language/using_declaration | using-declarations ]] for class members
* [[cpp/language/type_alias | type alias and alias template declaration]] {{mark since c++11}}

[[de:cpp/keyword/using]]
[[es:cpp/keyword/using]]
[[fr:cpp/keyword/using]]
[[it:cpp/keyword/using]]
[[ja:cpp/keyword/using]]
[[pt:cpp/keyword/using]]
[[ru:cpp/keyword/using]]
[[zh:cpp/keyword/using]]</text>
      <sha1>3xdvds9955ce7lwyr8541fu17siylle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/virtual</title>
    <ns>0</ns>
    <id>4063</id>
    <revision>
      <id>48511</id>
      <parentid>44353</parentid>
      <timestamp>2013-05-30T17:33:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+inheritance</comment>
      <text xml:space="preserve" bytes="402">{{cpp/keyword/title|virtual}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/virtual | virtual function specifier]]
* [[cpp/language/derived_class | virtual base class specifier]]

[[de:cpp/keyword/virtual]]
[[es:cpp/keyword/virtual]]
[[fr:cpp/keyword/virtual]]
[[it:cpp/keyword/virtual]]
[[ja:cpp/keyword/virtual]]
[[pt:cpp/keyword/virtual]]
[[ru:cpp/keyword/virtual]]
[[zh:cpp/keyword/virtual]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/void</title>
    <ns>0</ns>
    <id>3087</id>
    <revision>
      <id>67170</id>
      <parentid>44351</parentid>
      <timestamp>2014-01-25T10:55:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>+ void*</comment>
      <text xml:space="preserve" bytes="387">{{cpp/keyword/title|void}}
{{cpp/keyword/navbar}}

===Usage===
* [[cpp/language/function | {{tt|void}} specifier]]
* used to declare [[cpp/language/pointer#Pointers to void | {{tt|void*}} type]]

[[de:cpp/keyword/void]]
[[es:cpp/keyword/void]]
[[fr:cpp/keyword/void]]
[[it:cpp/keyword/void]]
[[ja:cpp/keyword/void]]
[[pt:cpp/keyword/void]]
[[ru:cpp/keyword/void]]
[[zh:cpp/keyword/void]]</text>
      <sha1>m2cduy2lkifgmiern2mhj16gulg0zjn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/volatile</title>
    <ns>0</ns>
    <id>681</id>
    <revision>
      <id>73858</id>
      <parentid>44348</parentid>
      <timestamp>2014-11-19T14:02:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>qualifier</comment>
      <text xml:space="preserve" bytes="346">{{cpp/keyword/title|volatile}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/cv | {{tt|volatile}} type qualifier]]

[[de:cpp/keyword/volatile]]
[[es:cpp/keyword/volatile]]
[[fr:cpp/keyword/volatile]]
[[it:cpp/keyword/volatile]]
[[ja:cpp/keyword/volatile]]
[[pt:cpp/keyword/volatile]]
[[ru:cpp/keyword/volatile]]
[[zh:cpp/keyword/volatile]]</text>
      <sha1>1e42wihp3xjcz7w7r44cce4sq1ortdr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/wchar t</title>
    <ns>0</ns>
    <id>682</id>
    <revision>
      <id>44345</id>
      <parentid>34031</parentid>
      <timestamp>2012-11-03T06:00:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="361">{{cpp/keyword/title|wchar_t}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/types | {{tt|wchar_t}} type]]: as the declaration of the type

[[de:cpp/keyword/wchar t]]
[[es:cpp/keyword/wchar t]]
[[fr:cpp/keyword/wchar t]]
[[it:cpp/keyword/wchar t]]
[[ja:cpp/keyword/wchar t]]
[[pt:cpp/keyword/wchar t]]
[[ru:cpp/keyword/wchar t]]
[[zh:cpp/keyword/wchar t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/while</title>
    <ns>0</ns>
    <id>683</id>
    <revision>
      <id>44342</id>
      <parentid>34032</parentid>
      <timestamp>2012-11-03T05:59:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="497">{{cpp/keyword/title|while}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/while | {{tt|while}} loop]]: as the declaration of the loop
* [[cpp/language/do | {{tt|do-while}} loop]]: as the declaration of the terminating condition of the loop

[[de:cpp/keyword/while]]
[[es:cpp/keyword/while]]
[[fr:cpp/keyword/while]]
[[it:cpp/keyword/while]]
[[ja:cpp/keyword/while]]
[[pl:cpp/keyword/while]]
[[pt:cpp/keyword/while]]
[[ru:cpp/keyword/while]]
[[tr:cpp/keyword/while]]
[[zh:cpp/keyword/while]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/xor</title>
    <ns>0</ns>
    <id>684</id>
    <revision>
      <id>44339</id>
      <parentid>34033</parentid>
      <timestamp>2012-11-03T05:58:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru</comment>
      <text xml:space="preserve" bytes="342">{{cpp/keyword/title|xor}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|^}}

[[de:cpp/keyword/xor]]
[[es:cpp/keyword/xor]]
[[fr:cpp/keyword/xor]]
[[it:cpp/keyword/xor]]
[[ja:cpp/keyword/xor]]
[[pt:cpp/keyword/xor]]
[[ru:cpp/keyword/xor]]
[[zh:cpp/keyword/xor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keyword/xor eq</title>
    <ns>0</ns>
    <id>685</id>
    <revision>
      <id>83559</id>
      <parentid>44336</parentid>
      <timestamp>2016-02-26T23:34:27Z</timestamp>
      <contributor>
        <ip>89.74.110.56</ip>
      </contributor>
      <text xml:space="preserve" bytes="374">{{cpp/keyword/title|xor_eq}}
{{cpp/keyword/navbar}}
===Usage===

* [[cpp/language/operator alternative | alternative operators]]: as an alternative for {{tt|^{{=}}}}

[[de:cpp/keyword/xor eq]]
[[es:cpp/keyword/xor eq]]
[[fr:cpp/keyword/xor eq]]
[[it:cpp/keyword/xor eq]]
[[ja:cpp/keyword/xor eq]]
[[pt:cpp/keyword/xor eq]]
[[ru:cpp/keyword/xor eq]]
[[zh:cpp/keyword/xor eq]]</text>
      <sha1>c8p95uevtbyv91xnr2ds95330jtgp0y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords</title>
    <ns>0</ns>
    <id>5328</id>
    <redirect title="cpp/keyword" />
    <revision>
      <id>19419</id>
      <timestamp>2012-03-11T12:10:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords]] to [[cpp/keyword]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[cpp/keyword]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/alignas</title>
    <ns>0</ns>
    <id>5329</id>
    <redirect title="cpp/keyword/alignas" />
    <revision>
      <id>19421</id>
      <timestamp>2012-03-11T12:10:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/alignas]] to [[cpp/keyword/alignas]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/alignas]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/alignof</title>
    <ns>0</ns>
    <id>5330</id>
    <redirect title="cpp/keyword/alignof" />
    <revision>
      <id>19423</id>
      <timestamp>2012-03-11T12:11:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/alignof]] to [[cpp/keyword/alignof]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/alignof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/and</title>
    <ns>0</ns>
    <id>5331</id>
    <redirect title="cpp/keyword/and" />
    <revision>
      <id>19425</id>
      <timestamp>2012-03-11T12:11:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/and]] to [[cpp/keyword/and]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/and]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/and eq</title>
    <ns>0</ns>
    <id>5332</id>
    <redirect title="cpp/keyword/and eq" />
    <revision>
      <id>19427</id>
      <timestamp>2012-03-11T12:11:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/and eq]] to [[cpp/keyword/and eq]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/and eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/asm</title>
    <ns>0</ns>
    <id>5333</id>
    <redirect title="cpp/keyword/asm" />
    <revision>
      <id>19429</id>
      <timestamp>2012-03-11T12:11:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/asm]] to [[cpp/keyword/asm]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/asm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/auto</title>
    <ns>0</ns>
    <id>5334</id>
    <redirect title="cpp/keyword/auto" />
    <revision>
      <id>19431</id>
      <timestamp>2012-03-11T12:11:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/auto]] to [[cpp/keyword/auto]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/auto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/bitand</title>
    <ns>0</ns>
    <id>5335</id>
    <redirect title="cpp/keyword/bitand" />
    <revision>
      <id>19433</id>
      <timestamp>2012-03-11T12:11:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/bitand]] to [[cpp/keyword/bitand]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/bitand]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/bitor</title>
    <ns>0</ns>
    <id>5336</id>
    <redirect title="cpp/keyword/bitor" />
    <revision>
      <id>19435</id>
      <timestamp>2012-03-11T12:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/bitor]] to [[cpp/keyword/bitor]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/bitor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/bool</title>
    <ns>0</ns>
    <id>5337</id>
    <redirect title="cpp/keyword/bool" />
    <revision>
      <id>19437</id>
      <timestamp>2012-03-11T12:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/bool]] to [[cpp/keyword/bool]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/break</title>
    <ns>0</ns>
    <id>5338</id>
    <redirect title="cpp/keyword/break" />
    <revision>
      <id>19439</id>
      <timestamp>2012-03-11T12:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/break]] to [[cpp/keyword/break]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/break]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/case</title>
    <ns>0</ns>
    <id>5339</id>
    <redirect title="cpp/keyword/case" />
    <revision>
      <id>19441</id>
      <timestamp>2012-03-11T12:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/case]] to [[cpp/keyword/case]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/case]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/catch</title>
    <ns>0</ns>
    <id>5340</id>
    <redirect title="cpp/keyword/catch" />
    <revision>
      <id>19443</id>
      <timestamp>2012-03-11T12:11:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/catch]] to [[cpp/keyword/catch]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/catch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/char</title>
    <ns>0</ns>
    <id>5341</id>
    <redirect title="cpp/keyword/char" />
    <revision>
      <id>19445</id>
      <timestamp>2012-03-11T12:11:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/char]] to [[cpp/keyword/char]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/char]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/char16 t</title>
    <ns>0</ns>
    <id>5342</id>
    <redirect title="cpp/keyword/char16 t" />
    <revision>
      <id>19447</id>
      <timestamp>2012-03-11T12:11:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/char16 t]] to [[cpp/keyword/char16 t]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/char16 t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/char32 t</title>
    <ns>0</ns>
    <id>5343</id>
    <redirect title="cpp/keyword/char32 t" />
    <revision>
      <id>19449</id>
      <timestamp>2012-03-11T12:11:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/char32 t]] to [[cpp/keyword/char32 t]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/char32 t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/class</title>
    <ns>0</ns>
    <id>5344</id>
    <redirect title="cpp/keyword/class" />
    <revision>
      <id>19451</id>
      <timestamp>2012-03-11T12:11:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/class]] to [[cpp/keyword/class]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/class]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/compl</title>
    <ns>0</ns>
    <id>5345</id>
    <redirect title="cpp/keyword/compl" />
    <revision>
      <id>19453</id>
      <timestamp>2012-03-11T12:11:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/compl]] to [[cpp/keyword/compl]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/compl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/const</title>
    <ns>0</ns>
    <id>5346</id>
    <redirect title="cpp/keyword/const" />
    <revision>
      <id>19455</id>
      <timestamp>2012-03-11T12:11:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/const]] to [[cpp/keyword/const]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/const]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/const cast</title>
    <ns>0</ns>
    <id>5347</id>
    <redirect title="cpp/keyword/const cast" />
    <revision>
      <id>19457</id>
      <timestamp>2012-03-11T12:11:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/const cast]] to [[cpp/keyword/const cast]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/keyword/const cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/constexpr</title>
    <ns>0</ns>
    <id>5348</id>
    <redirect title="cpp/keyword/constexpr" />
    <revision>
      <id>19459</id>
      <timestamp>2012-03-11T12:11:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/constexpr]] to [[cpp/keyword/constexpr]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/keyword/constexpr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/continue</title>
    <ns>0</ns>
    <id>5349</id>
    <redirect title="cpp/keyword/continue" />
    <revision>
      <id>19461</id>
      <timestamp>2012-03-11T12:11:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/continue]] to [[cpp/keyword/continue]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/continue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/decltype</title>
    <ns>0</ns>
    <id>5350</id>
    <redirect title="cpp/keyword/decltype" />
    <revision>
      <id>19463</id>
      <timestamp>2012-03-11T12:11:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/decltype]] to [[cpp/keyword/decltype]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/decltype]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/default</title>
    <ns>0</ns>
    <id>5351</id>
    <redirect title="cpp/keyword/default" />
    <revision>
      <id>19465</id>
      <timestamp>2012-03-11T12:11:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/default]] to [[cpp/keyword/default]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/default]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/delete</title>
    <ns>0</ns>
    <id>5352</id>
    <redirect title="cpp/keyword/delete" />
    <revision>
      <id>19467</id>
      <timestamp>2012-03-11T12:11:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/delete]] to [[cpp/keyword/delete]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/delete]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/do</title>
    <ns>0</ns>
    <id>5353</id>
    <redirect title="cpp/keyword/do" />
    <revision>
      <id>19469</id>
      <timestamp>2012-03-11T12:11:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/do]] to [[cpp/keyword/do]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[cpp/keyword/do]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/double</title>
    <ns>0</ns>
    <id>5354</id>
    <redirect title="cpp/keyword/double" />
    <revision>
      <id>19471</id>
      <timestamp>2012-03-11T12:11:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/double]] to [[cpp/keyword/double]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/double]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/dynamic cast</title>
    <ns>0</ns>
    <id>5355</id>
    <redirect title="cpp/keyword/dynamic cast" />
    <revision>
      <id>19473</id>
      <timestamp>2012-03-11T12:11:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/dynamic cast]] to [[cpp/keyword/dynamic cast]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/keyword/dynamic cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/else</title>
    <ns>0</ns>
    <id>5356</id>
    <redirect title="cpp/keyword/else" />
    <revision>
      <id>19475</id>
      <timestamp>2012-03-11T12:11:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/else]] to [[cpp/keyword/else]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/else]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/enum</title>
    <ns>0</ns>
    <id>5357</id>
    <redirect title="cpp/keyword/enum" />
    <revision>
      <id>19477</id>
      <timestamp>2012-03-11T12:11:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/enum]] to [[cpp/keyword/enum]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/explicit</title>
    <ns>0</ns>
    <id>5358</id>
    <redirect title="cpp/keyword/explicit" />
    <revision>
      <id>19479</id>
      <timestamp>2012-03-11T12:11:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/explicit]] to [[cpp/keyword/explicit]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/explicit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/export</title>
    <ns>0</ns>
    <id>5359</id>
    <redirect title="cpp/keyword/export" />
    <revision>
      <id>19481</id>
      <timestamp>2012-03-11T12:11:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/export]] to [[cpp/keyword/export]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/export]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/extern</title>
    <ns>0</ns>
    <id>5360</id>
    <redirect title="cpp/keyword/extern" />
    <revision>
      <id>19483</id>
      <timestamp>2012-03-11T12:11:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/extern]] to [[cpp/keyword/extern]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/extern]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/false</title>
    <ns>0</ns>
    <id>5361</id>
    <redirect title="cpp/keyword/false" />
    <revision>
      <id>19485</id>
      <timestamp>2012-03-11T12:11:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/false]] to [[cpp/keyword/false]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/false]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/final</title>
    <ns>0</ns>
    <id>5362</id>
    <redirect title="cpp/keyword/final" />
    <revision>
      <id>19487</id>
      <timestamp>2012-03-11T12:11:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/final]] to [[cpp/keyword/final]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/final]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/float</title>
    <ns>0</ns>
    <id>5363</id>
    <redirect title="cpp/keyword/float" />
    <revision>
      <id>19489</id>
      <timestamp>2012-03-11T12:11:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/float]] to [[cpp/keyword/float]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/float]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/for</title>
    <ns>0</ns>
    <id>5364</id>
    <redirect title="cpp/keyword/for" />
    <revision>
      <id>19491</id>
      <timestamp>2012-03-11T12:11:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/for]] to [[cpp/keyword/for]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/friend</title>
    <ns>0</ns>
    <id>5365</id>
    <redirect title="cpp/keyword/friend" />
    <revision>
      <id>19493</id>
      <timestamp>2012-03-11T12:11:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/friend]] to [[cpp/keyword/friend]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/friend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/goto</title>
    <ns>0</ns>
    <id>5366</id>
    <redirect title="cpp/keyword/goto" />
    <revision>
      <id>19495</id>
      <timestamp>2012-03-11T12:11:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/goto]] to [[cpp/keyword/goto]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/goto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/if</title>
    <ns>0</ns>
    <id>5367</id>
    <redirect title="cpp/keyword/if" />
    <revision>
      <id>19497</id>
      <timestamp>2012-03-11T12:11:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/if]] to [[cpp/keyword/if]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[cpp/keyword/if]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/inline</title>
    <ns>0</ns>
    <id>5368</id>
    <redirect title="cpp/keyword/inline" />
    <revision>
      <id>19499</id>
      <timestamp>2012-03-11T12:11:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/inline]] to [[cpp/keyword/inline]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/inline]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/int</title>
    <ns>0</ns>
    <id>5369</id>
    <redirect title="cpp/keyword/int" />
    <revision>
      <id>19501</id>
      <timestamp>2012-03-11T12:11:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/int]] to [[cpp/keyword/int]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/int]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/long</title>
    <ns>0</ns>
    <id>5370</id>
    <redirect title="cpp/keyword/long" />
    <revision>
      <id>19503</id>
      <timestamp>2012-03-11T12:11:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/long]] to [[cpp/keyword/long]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/long]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/mutable</title>
    <ns>0</ns>
    <id>5371</id>
    <redirect title="cpp/keyword/mutable" />
    <revision>
      <id>19505</id>
      <timestamp>2012-03-11T12:11:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/mutable]] to [[cpp/keyword/mutable]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/mutable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/namespace</title>
    <ns>0</ns>
    <id>5372</id>
    <redirect title="cpp/keyword/namespace" />
    <revision>
      <id>19507</id>
      <timestamp>2012-03-11T12:11:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/namespace]] to [[cpp/keyword/namespace]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/keyword/namespace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/new</title>
    <ns>0</ns>
    <id>5373</id>
    <redirect title="cpp/keyword/new" />
    <revision>
      <id>19509</id>
      <timestamp>2012-03-11T12:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/new]] to [[cpp/keyword/new]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/new]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/noexcept</title>
    <ns>0</ns>
    <id>5374</id>
    <redirect title="cpp/keyword/noexcept" />
    <revision>
      <id>19511</id>
      <timestamp>2012-03-11T12:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/noexcept]] to [[cpp/keyword/noexcept]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/noexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/not</title>
    <ns>0</ns>
    <id>5375</id>
    <redirect title="cpp/keyword/not" />
    <revision>
      <id>19513</id>
      <timestamp>2012-03-11T12:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/not]] to [[cpp/keyword/not]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/not]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/not eq</title>
    <ns>0</ns>
    <id>5376</id>
    <redirect title="cpp/keyword/not eq" />
    <revision>
      <id>19515</id>
      <timestamp>2012-03-11T12:11:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/not eq]] to [[cpp/keyword/not eq]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/not eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/nullptr</title>
    <ns>0</ns>
    <id>5377</id>
    <redirect title="cpp/keyword/nullptr" />
    <revision>
      <id>19517</id>
      <timestamp>2012-03-11T12:11:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/nullptr]] to [[cpp/keyword/nullptr]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/nullptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/operator</title>
    <ns>0</ns>
    <id>5378</id>
    <redirect title="cpp/keyword/operator" />
    <revision>
      <id>19519</id>
      <timestamp>2012-03-11T12:11:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/operator]] to [[cpp/keyword/operator]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/operator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/or</title>
    <ns>0</ns>
    <id>5379</id>
    <redirect title="cpp/keyword/or" />
    <revision>
      <id>19521</id>
      <timestamp>2012-03-11T12:11:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/or]] to [[cpp/keyword/or]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[cpp/keyword/or]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/or eq</title>
    <ns>0</ns>
    <id>5380</id>
    <redirect title="cpp/keyword/or eq" />
    <revision>
      <id>19523</id>
      <timestamp>2012-03-11T12:11:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/or eq]] to [[cpp/keyword/or eq]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/or eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/override</title>
    <ns>0</ns>
    <id>5381</id>
    <redirect title="cpp/keyword/override" />
    <revision>
      <id>19525</id>
      <timestamp>2012-03-11T12:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/override]] to [[cpp/keyword/override]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/override]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/private</title>
    <ns>0</ns>
    <id>5382</id>
    <redirect title="cpp/keyword/private" />
    <revision>
      <id>19527</id>
      <timestamp>2012-03-11T12:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/private]] to [[cpp/keyword/private]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/private]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/protected</title>
    <ns>0</ns>
    <id>5383</id>
    <redirect title="cpp/keyword/protected" />
    <revision>
      <id>19529</id>
      <timestamp>2012-03-11T12:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/protected]] to [[cpp/keyword/protected]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/keyword/protected]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/public</title>
    <ns>0</ns>
    <id>5384</id>
    <redirect title="cpp/keyword/public" />
    <revision>
      <id>19531</id>
      <timestamp>2012-03-11T12:11:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/public]] to [[cpp/keyword/public]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/public]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/register</title>
    <ns>0</ns>
    <id>5385</id>
    <redirect title="cpp/keyword/register" />
    <revision>
      <id>19533</id>
      <timestamp>2012-03-11T12:11:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/register]] to [[cpp/keyword/register]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/register]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/reinterpret cast</title>
    <ns>0</ns>
    <id>5386</id>
    <redirect title="cpp/keyword/reinterpret cast" />
    <revision>
      <id>19535</id>
      <timestamp>2012-03-11T12:11:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/reinterpret cast]] to [[cpp/keyword/reinterpret cast]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/keyword/reinterpret cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/return</title>
    <ns>0</ns>
    <id>5387</id>
    <redirect title="cpp/keyword/return" />
    <revision>
      <id>19537</id>
      <timestamp>2012-03-11T12:11:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/return]] to [[cpp/keyword/return]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/return]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/short</title>
    <ns>0</ns>
    <id>5388</id>
    <redirect title="cpp/keyword/short" />
    <revision>
      <id>19539</id>
      <timestamp>2012-03-11T12:11:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/short]] to [[cpp/keyword/short]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/short]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/signed</title>
    <ns>0</ns>
    <id>5389</id>
    <redirect title="cpp/keyword/signed" />
    <revision>
      <id>19541</id>
      <timestamp>2012-03-11T12:11:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/signed]] to [[cpp/keyword/signed]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/sizeof</title>
    <ns>0</ns>
    <id>5390</id>
    <redirect title="cpp/keyword/sizeof" />
    <revision>
      <id>19543</id>
      <timestamp>2012-03-11T12:11:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/sizeof]] to [[cpp/keyword/sizeof]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/sizeof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/static</title>
    <ns>0</ns>
    <id>5391</id>
    <redirect title="cpp/keyword/static" />
    <revision>
      <id>19545</id>
      <timestamp>2012-03-11T12:11:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/static]] to [[cpp/keyword/static]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/static]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/static assert</title>
    <ns>0</ns>
    <id>5392</id>
    <redirect title="cpp/keyword/static assert" />
    <revision>
      <id>19547</id>
      <timestamp>2012-03-11T12:11:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/static assert]] to [[cpp/keyword/static assert]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/keyword/static assert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/static cast</title>
    <ns>0</ns>
    <id>5393</id>
    <redirect title="cpp/keyword/static cast" />
    <revision>
      <id>19549</id>
      <timestamp>2012-03-11T12:11:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/static cast]] to [[cpp/keyword/static cast]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/keyword/static cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/struct</title>
    <ns>0</ns>
    <id>5394</id>
    <redirect title="cpp/keyword/struct" />
    <revision>
      <id>19551</id>
      <timestamp>2012-03-11T12:11:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/struct]] to [[cpp/keyword/struct]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/struct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/switch</title>
    <ns>0</ns>
    <id>5395</id>
    <redirect title="cpp/keyword/switch" />
    <revision>
      <id>19553</id>
      <timestamp>2012-03-11T12:11:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/switch]] to [[cpp/keyword/switch]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/switch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/template</title>
    <ns>0</ns>
    <id>5396</id>
    <redirect title="cpp/keyword/template" />
    <revision>
      <id>19555</id>
      <timestamp>2012-03-11T12:11:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/template]] to [[cpp/keyword/template]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/template]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/this</title>
    <ns>0</ns>
    <id>5397</id>
    <redirect title="cpp/keyword/this" />
    <revision>
      <id>19557</id>
      <timestamp>2012-03-11T12:11:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/this]] to [[cpp/keyword/this]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/this]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/thread local</title>
    <ns>0</ns>
    <id>5398</id>
    <redirect title="cpp/keyword/thread local" />
    <revision>
      <id>19559</id>
      <timestamp>2012-03-11T12:11:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/thread local]] to [[cpp/keyword/thread local]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/keyword/thread local]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/throw</title>
    <ns>0</ns>
    <id>5399</id>
    <redirect title="cpp/keyword/throw" />
    <revision>
      <id>19561</id>
      <timestamp>2012-03-11T12:11:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/throw]] to [[cpp/keyword/throw]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/throw]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/true</title>
    <ns>0</ns>
    <id>5400</id>
    <redirect title="cpp/keyword/true" />
    <revision>
      <id>19563</id>
      <timestamp>2012-03-11T12:11:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/true]] to [[cpp/keyword/true]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/true]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/try</title>
    <ns>0</ns>
    <id>5401</id>
    <redirect title="cpp/keyword/try" />
    <revision>
      <id>19565</id>
      <timestamp>2012-03-11T12:11:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/try]] to [[cpp/keyword/try]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/try]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/typedef</title>
    <ns>0</ns>
    <id>5402</id>
    <redirect title="cpp/keyword/typedef" />
    <revision>
      <id>19567</id>
      <timestamp>2012-03-11T12:11:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/typedef]] to [[cpp/keyword/typedef]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/typedef]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/typeid</title>
    <ns>0</ns>
    <id>5403</id>
    <redirect title="cpp/keyword/typeid" />
    <revision>
      <id>19569</id>
      <timestamp>2012-03-11T12:11:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/typeid]] to [[cpp/keyword/typeid]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/typeid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/typename</title>
    <ns>0</ns>
    <id>5404</id>
    <redirect title="cpp/keyword/typename" />
    <revision>
      <id>19571</id>
      <timestamp>2012-03-11T12:11:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/typename]] to [[cpp/keyword/typename]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/typename]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/union</title>
    <ns>0</ns>
    <id>5405</id>
    <redirect title="cpp/keyword/union" />
    <revision>
      <id>19573</id>
      <timestamp>2012-03-11T12:11:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/union]] to [[cpp/keyword/union]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/union]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/unsigned</title>
    <ns>0</ns>
    <id>5406</id>
    <redirect title="cpp/keyword/unsigned" />
    <revision>
      <id>19575</id>
      <timestamp>2012-03-11T12:11:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/unsigned]] to [[cpp/keyword/unsigned]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/unsigned]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/using</title>
    <ns>0</ns>
    <id>5407</id>
    <redirect title="cpp/keyword/using" />
    <revision>
      <id>19577</id>
      <timestamp>2012-03-11T12:11:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/using]] to [[cpp/keyword/using]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/using]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/virtual</title>
    <ns>0</ns>
    <id>5408</id>
    <redirect title="cpp/keyword/virtual" />
    <revision>
      <id>19579</id>
      <timestamp>2012-03-11T12:11:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/virtual]] to [[cpp/keyword/virtual]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/virtual]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/void</title>
    <ns>0</ns>
    <id>5409</id>
    <redirect title="cpp/keyword/void" />
    <revision>
      <id>19581</id>
      <timestamp>2012-03-11T12:11:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/void]] to [[cpp/keyword/void]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[cpp/keyword/void]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/volatile</title>
    <ns>0</ns>
    <id>5410</id>
    <redirect title="cpp/keyword/volatile" />
    <revision>
      <id>19583</id>
      <timestamp>2012-03-11T12:11:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/volatile]] to [[cpp/keyword/volatile]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/keyword/volatile]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/wchar t</title>
    <ns>0</ns>
    <id>5411</id>
    <redirect title="cpp/keyword/wchar t" />
    <revision>
      <id>19585</id>
      <timestamp>2012-03-11T12:11:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/wchar t]] to [[cpp/keyword/wchar t]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/keyword/wchar t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/while</title>
    <ns>0</ns>
    <id>5412</id>
    <redirect title="cpp/keyword/while" />
    <revision>
      <id>19587</id>
      <timestamp>2012-03-11T12:11:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/while]] to [[cpp/keyword/while]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/keyword/while]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/xor</title>
    <ns>0</ns>
    <id>5413</id>
    <redirect title="cpp/keyword/xor" />
    <revision>
      <id>19589</id>
      <timestamp>2012-03-11T12:11:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/xor]] to [[cpp/keyword/xor]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/keyword/xor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/keywords/xor eq</title>
    <ns>0</ns>
    <id>5414</id>
    <redirect title="cpp/keyword/xor eq" />
    <revision>
      <id>19591</id>
      <timestamp>2012-03-11T12:11:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/keywords/xor eq]] to [[cpp/keyword/xor eq]]: Singular is used in most pages</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/keyword/xor eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language</title>
    <ns>0</ns>
    <id>686</id>
    <revision>
      <id>90026</id>
      <parentid>88755</parentid>
      <timestamp>2017-02-01T20:57:56Z</timestamp>
      <contributor>
        <ip>196.217.66.247</ip>
      </contributor>
      <text xml:space="preserve" bytes="10569">{{title|C++ language}}
{{cpp/language/navbar}}

This is a brief reference of available C++ language constructs.

{| cellpadding=&quot;5&quot;
|- valign=&quot;top&quot;
|

'''[[cpp/language/basic_concepts | Basic concepts]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/comment | Comments]]&lt;br&gt;
[[cpp/language/ascii | ASCII chart]]&lt;br&gt;
[[cpp/language/identifiers | Names and identifiers]]&lt;br&gt;
[[cpp/language/type | Types]] - 
[[cpp/language/types | Fundamental types]]&lt;br&gt;
[[cpp/language/object | Object]] -
[[cpp/language/scope | Scope]] -
[[cpp/language/lifetime | Lifetime]]&lt;br&gt;
[[cpp/language/definition | Definitions and ODR]]&lt;br&gt;
[[cpp/language/lookup | Name lookup]]&lt;br&gt;
&amp;nbsp;[[cpp/language/qualified_lookup | qualified ]] - [[cpp/language/unqualified_lookup | unqualified]]&lt;br&gt;
[[cpp/language/memory_model | Memory model and data races]]&lt;br&gt;
[[cpp/language/translation_phases | Phases of translation]]&lt;br&gt;
[[cpp/language/main_function | The main() function]]&lt;br&gt;
&lt;/div&gt;

'''[[cpp/keyword | C++ Keywords]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
&lt;!--  --&gt;
&lt;/div&gt;

'''[[cpp/preprocessor | Preprocessor]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/preprocessor/conditional | #if - #ifdef - #ifndef]]&lt;br&gt;
[[cpp/preprocessor/replace | #define - # - ##]] -
[[cpp/preprocessor/include | #include]]&lt;br&gt;
[[cpp/preprocessor/error | #error]] -
[[cpp/preprocessor/impl | #pragma]] -
[[cpp/preprocessor/line | #line]]&lt;br&gt;
&lt;/div&gt;

'''[[cpp/language/expressions | Expressions]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/value_category | Value categories]]&lt;br&gt;
[[cpp/language/eval_order | Evaluation order and sequencing]]&lt;br&gt;
[[cpp/language/constant_expression | Constant expressions]]&lt;br&gt;
[[cpp/language/expressions#Operators | Operators]]&lt;br&gt;
&amp;nbsp;[[cpp/language/operator_assignment | assignment ]] -
[[cpp/language/operator_arithmetic | arithmetic ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/operator_incdec | increment and decrement ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/operator_logical | logical ]] -
[[cpp/language/operator_comparison | comparison ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/operator_member_access | member access and indirection ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/operator_other | call, comma, ternary ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/sizeof | {{tt|sizeof}}]] -
[[cpp/language/alignof | {{tt|alignof}}]]{{mark c++11}}&lt;br&gt;
&amp;nbsp;[[cpp/language/new | {{tt|new}}]] -
[[cpp/language/delete | {{tt|delete}}]] - [[cpp/language/typeid | {{tt|typeid}}]]&lt;br&gt;
[[cpp/language/operators | Operator overloading]]&lt;br&gt;
[[cpp/language/operator_precedence | Operator precedence]]&lt;br&gt;
[[cpp/language/expressions#Conversions | Conversions]]&lt;br&gt;
&amp;nbsp;[[cpp/language/implicit_cast | implicit ]] -
[[cpp/language/explicit_cast | explicit ]] -
[[cpp/language/cast_operator | user-defined ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/static_cast | {{tt|static_cast}} ]] - [[cpp/language/dynamic_cast | {{tt|dynamic_cast}} ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/const_cast | {{tt|const_cast}} ]] - [[cpp/language/reinterpret_cast | {{tt|reinterpret_cast}} ]]&lt;br&gt;
[[cpp/language/expressions#Literals | Literals]]&lt;br&gt;
&amp;nbsp;[[cpp/language/bool_literal | boolean ]] -
[[cpp/language/integer_literal | integer ]] -
[[cpp/language/floating_literal | floating ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/character_literal | character ]] -
[[cpp/language/string_literal | string ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/nullptr | {{tt|nullptr}} ]]{{mark c++11}}&lt;br&gt;
&amp;nbsp;[[cpp/language/user_literal | user-defined ]]{{mark c++11}}&lt;br&gt;
&lt;/div&gt;

|

'''[[cpp/language/declarations | Declaration]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/namespace | Namespace declaration]]&lt;br&gt;
[[cpp/language/namespace_alias | Namespace alias]]&lt;br&gt;
[[cpp/language/reference | Lvalue and rvalue references]]&lt;br&gt;
[[cpp/language/pointer | Pointers]] -
[[cpp/language/array | Arrays]]&lt;br&gt;
[[cpp/language/enum | Enumerations and enumerators]]&lt;br&gt;
[[cpp/language/storage_duration | Storage duration and linkage]]&lt;br&gt;
[[cpp/language/language_linkage | Language linkage]]&lt;br&gt;
[[cpp/language/asm | Inline assembly]]&lt;br&gt;
[[cpp/language/cv | {{tt|const}}/{{tt|volatile}}]]&amp;nbsp;-&amp;nbsp;[[cpp/language/constexpr |&amp;nbsp;{{tt|constexpr}}]]{{mark c++11}}&lt;br&gt;
[[cpp/language/decltype | {{tt|decltype}}]]{{mark c++11}} -
[[cpp/language/auto | {{tt|auto}}]]{{mark c++11}} &lt;br&gt;
[[cpp/language/alignas | {{tt|alignas}}]]{{mark c++11}} &lt;br&gt;
[[cpp/language/typedef | {{tt|typedef}}]] -
[[cpp/language/type_alias | Type alias]]{{mark c++11}}&lt;br&gt;
[[cpp/language/elaborated_type_specifier | Elaborated type specifiers]]&lt;br&gt;
[[cpp/language/attributes | Attributes]]{{mark c++11}}&lt;br&gt;
[[cpp/language/static_assert | {{tt|static_assert}}]]{{mark c++11}}&lt;br&gt;
&lt;/div&gt;

'''[[cpp/language/initialization | Initialization]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/default_initialization | Default initialization]]&lt;br&gt;
[[cpp/language/value_initialization | Value initialization]]{{mark c++03}}&lt;br&gt;
[[cpp/language/copy_initialization | Copy initialization]]&lt;br&gt;
[[cpp/language/direct_initialization | Direct initialization]]&lt;br&gt;
[[cpp/language/aggregate_initialization | Aggregate initialization]]&lt;br&gt;
[[cpp/language/list_initialization | List initialization]]{{mark c++11}}&lt;br&gt;
[[cpp/language/reference_initialization | Reference initialization]]&lt;br&gt;
[[cpp/language/initialization#Non-local_variables | Static non-local initialization ]]&lt;br&gt;
&amp;nbsp;[[cpp/language/zero_initialization|zero]] - [[cpp/language/constant_initialization|constant]]&lt;br&gt;
[[cpp/language/initialization#Non-local_variables | Dynamic non-local initialization]]&lt;br&gt;
&amp;nbsp;[[cpp/language/initialization#Non-local_variables|ordered]] - [[cpp/language/initialization#Non-local_variables|unordered]]
&lt;/div&gt;

'''[[cpp/language/functions | Functions]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/function | Function declaration]]&lt;br&gt;
[[cpp/language/default_arguments | Default arguments]]&lt;br&gt;
[[cpp/language/variadic_arguments | Variadic arguments]]&lt;br&gt;
[[cpp/language/lambda | Lambda expression]]{{mark c++11}}&lt;br&gt;
[[cpp/language/inline | {{tt|inline}} specifier]]&lt;br&gt;
[[cpp/language/adl | Argument-dependent lookup]]&lt;br&gt;
[[cpp/language/overload_resolution | Overload resolution]]&lt;br&gt;
[[cpp/language/operators | Operator overloading]]&lt;br&gt;
[[cpp/language/overloaded_address | Address of an overload set]]&lt;br&gt;
&lt;/div&gt;

'''[[cpp/language/statements | Statements]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/if | {{tt|if}}]] -
[[cpp/language/switch | {{tt|switch}}]]&lt;br&gt;
[[cpp/language/for | {{tt|for}}]] -
[[cpp/language/range-for | range-{{tt|for}}]]{{mark c++11}}&lt;br&gt;
[[cpp/language/while | {{tt|while}}]] - [[cpp/language/do | {{tt|do}}-{{tt|while}}]]&lt;br&gt;
[[cpp/language/continue | {{tt|continue}}]] -
[[cpp/language/break | {{tt|break}}]] -
[[cpp/language/goto | {{tt|goto}}]] -
[[cpp/language/return | {{tt|return}}]]&lt;br&gt;
[[cpp/language/transactional_memory | {{tt|synchronized}} and {{tt|atomic}}]]{{mark since tm ts}}&lt;br&gt;
&lt;/div&gt;

|

'''[[cpp/language/classes | Classes]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/class | Class types]] -
[[cpp/language/union | Union types]]&lt;br&gt;
[[cpp/language/data_members | Data members]] -
[[cpp/language/member_functions | Member functions]]&lt;br&gt;
[[cpp/language/static | Static members]] -
[[cpp/language/nested_types | Nested classes]]&lt;br&gt;
[[cpp/language/derived_class | Derived class]] -
[[cpp/language/using_declaration | {{tt|using}}-declaration]]&lt;br&gt;
[[cpp/language/virtual | Virtual function]] -
[[cpp/language/abstract_class | Abstract class]]&lt;br&gt;
[[cpp/language/access | Member access]] -
[[cpp/language/friend | {{tt|friend}}]] &lt;br&gt; 
[[cpp/language/override | {{tt|override}}]]{{mark c++11}} -
[[cpp/language/final | {{tt|final}}]]{{mark c++11}}&lt;br&gt;
[[cpp/language/bit_field | Bit fields]] -
[[cpp/language/this | The {{tt|this}} pointer]] &lt;br&gt;
[[cpp/language/initializer_list | Constructors and member initializer lists]]&lt;br&gt;
[[cpp/language/default_constructor | Default constructor]] -
[[cpp/language/destructor | Destructor]]&lt;br&gt;
[[cpp/language/copy_constructor | Copy constructor]] -
[[cpp/language/copy_assignment | Copy assignment]] &lt;br&gt;
[[cpp/language/move_constructor | Move constructor]]{{mark c++11}} -
[[cpp/language/move_assignment | Move assignment]]{{mark c++11}}&lt;br&gt;
[[cpp/language/converting_constructor | Converting constructor]] -
[[cpp/language/explicit | {{tt|explicit}} specifier]]&lt;br&gt;
&lt;/div&gt;

'''[[cpp/language/templates | Templates]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/template_parameters | Template parameters and arguments]]&lt;br&gt;
[[cpp/language/class_template | Class template]] -
[[cpp/language/function_template | Function template]]&lt;br&gt;
[[cpp/language/member_template | Class member template]]&lt;br&gt;
[[cpp/language/variable_template | Variable template]]{{mark c++14}}&lt;br&gt;
[[cpp/language/template_argument_deduction | Template argument deduction]]&lt;br&gt;
[[cpp/language/template_specialization | Explicit specialization]]&lt;br&gt;
[[cpp/language/class_template_deduction| Class template deduction]]{{mark c++17}}&lt;br&gt;
[[cpp/language/partial_specialization | Partial specialization]]&lt;br&gt;
[[cpp/language/parameter_pack | Parameter packs]]{{mark c++11}} -
[[cpp/language/sizeof... | {{tt|sizeof...}}]]{{mark c++11}}&lt;br&gt;
[[cpp/language/fold | Fold-expressions]]{{mark c++17}}&lt;br&gt;
[[cpp/language/dependent_name | Dependent names]] -
[[cpp/language/sfinae | SFINAE]]&lt;br&gt;
[[cpp/language/constraints | Constraints and concepts]] {{mark since concepts_ts}}&lt;br&gt;
&lt;/div&gt;

'''[[cpp/language/exceptions | Exceptions]]'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/throw | {{tt|throw}}-expression]]&lt;br&gt;
[[cpp/language/try_catch | {{tt|try}}-{{tt|catch}} block]]&lt;br&gt;
[[cpp/language/function-try-block | function-{{tt|try}}-block]]&lt;br&gt;
[[cpp/language/noexcept_spec | {{tt|noexcept}} specifier]]{{mark c++11}}&lt;br&gt;
[[cpp/language/noexcept | {{tt|noexcept}} operator]]{{mark c++11}}&lt;br&gt;
[[cpp/language/except_spec | Dynamic exception specification]]{{mark until c++17}}&lt;br&gt;
&lt;/div&gt;

'''Miscellaneous'''
&lt;div class=&quot;mainpagediv&quot;&gt;
[[cpp/language/history | History of C++]]&lt;br&gt;
[[cpp/language/extending_std | Extending the namespace std]]&lt;br&gt;
[[cpp/language/ub | Undefined behavior]]&lt;br&gt;
[[cpp/language/raii | RAII]] -
[[cpp/language/rule_of_three | Rule of three/five/zero]]&lt;br&gt;
[[cpp/language/as_if | As-if rule]] -
[[cpp/language/copy_elision | Copy elision]]&lt;br&gt;
[[cpp/language/ebo | Empty base optimization]]&lt;br&gt;
[[cpp/language/pimpl | pImpl]]
&lt;/div&gt;

|}

===See also===
{{dsc begin}}
{{dsc see c | c/language |C language constructs}}
{{dsc end}}


[[ar:cpp/language]]
[[de:cpp/language]]
[[es:cpp/language]]
[[fr:cpp/language]]
[[it:cpp/language]]
[[ja:cpp/language]]
[[ko:cpp/language]]
[[pt:cpp/language]]
[[ru:cpp/language]]
[[tr:cpp/language]]
[[zh:cpp/language]]</text>
      <sha1>1q4052dixwnj9tj3b23hed4y85zkle8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/abstract class</title>
    <ns>0</ns>
    <id>12924</id>
    <revision>
      <id>85959</id>
      <parentid>67483</parentid>
      <timestamp>2016-06-07T12:36:16Z</timestamp>
      <contributor>
        <ip>134.54.0.27</ip>
      </contributor>
      <comment>Remove unnecessary semicolon in &quot;Base&quot; struct definition.</comment>
      <text xml:space="preserve" bytes="3795">{{title|abstract class}}
{{cpp/language/classes/navbar}}

Defines an abstract type which cannot be instantiated, but can be used as a base class.

===Syntax===
{{spar|pure virtual}} function is a {{rlp|virtual|virtual function}} whose {{rlp|function|declarator}} has the following syntax:

{{sdsc begin}}
{{sdsc | {{spar|declarator}} {{spar|virt-specifier}}{{mark optional}} {{ttb|{{=}}}} {{ttb|0}} }}
{{sdsc end}}

Here the sequence {{ttb|{{=}} 0}} is known as {{spar|pure-specifier}}, and appears either immediately after the {{spar|declarator}} or after the optional {{spar|virt-specifier}} ({{rlp|override}} or {{rlp|final}}).

{{spar|pure-specifier}} cannot appear in a member function definition.

{{source|1=
struct Base { virtual int g(); virtual ~Base() {} };
struct A : Base{
    // ok, declares three member virtual functions, two of them pure
    virtual int f() = 0, g() override = 0, h();
    // ok, destructor can be pure too
    ~A() = 0;
    // error: pure-specifier on a function definition
    virtual int b()=0 {}
};
}}

An {{spar|abstract class}} is a class that either defines or inherits at least one function for which {{rlp|virtual|the final overrider}} is {{spar|pure virtual}}.

===Explanation===
Abstract classes are used to represent general concepts (for example, Shape), which can be used as base classes for concrete classes (for example, Circle).

No objects of an abstract class can be created. Abstract types cannot be used as parameter types, as function return types, or as the type of an explicit conversion. Pointers and references to an abstract class can be declared.

{{source|1=
struct Abstract {
    virtual void f() = 0; // pure virtual
}; // &quot;Abstract&quot; is abstract

struct Concrete : Abstract {
    void f() override {}; // non-pure virtual
    virtual void g();     // non-pure virtual
}; // &quot;Concrete&quot; is non-abstract

struct Abstract2 : Concrete {
    void g() override = 0; // pure virtual overrider
}; // &quot;Abstract2&quot; is abstract

int main()
{
    // Abstract a; // Error: abstract class
    Concrete b; // OK
    Abstract&amp; a = b; // OK to reference abstract base
    a.f(); // virtual dispatch to Concrete::f()
    // Abstract2 a2; // Error: abstract class (final overrider of g() is pure)
}
}}

The definition of a pure virtual function may be provided (and must be provided if the pure virtual is the {{rlp|destructor}}): the member functions of the derived class are free to call the abstract base's pure virtual function using qualified function id. This definition must be provided outside of the class body (the syntax of a function declaration doesn't allow both the pure specifier {{ttb|{{=}} 0}} and a function body)

Making a virtual call to a pure virtual function from a constructor or the destructor of the abstract class is undefined behavior (regardless of whether it has a definition or not)

{{source|1=struct Abstract {
    virtual void f() = 0; // pure virtual
    virtual void g() {}; // non-pure virtual
    ~Abstract() {
        g(); // okay, calls Abstract::g()
        // f(); // undefined behavior!
        Abstract::f(); // okay, non-virtual call
    }
};

//definition of the pure virtual function
void Abstract::f() { std::cout &lt;&lt; &quot;A::f()\n&quot;; }

struct Concrete : Abstract {
    void f() override {
        Abstract::f(); // OK: calls pure virtual function
    }
    void g() override {}
    ~Concrete() {
        g(); // okay, calls Concrete::g()
        f(); // okay, calls Concrete::f()
    }
};
}}

===See also===
* {{rlp|virtual}}

[[de:cpp/language/abstract_class]]
[[es:cpp/language/abstract_class]]
[[fr:cpp/language/abstract_class]]
[[it:cpp/language/abstract_class]]
[[ja:cpp/language/abstract_class]]
[[pt:cpp/language/abstract_class]]
[[ru:cpp/language/abstract_class]]
[[zh:cpp/language/abstract_class]]</text>
      <sha1>mo9a30y3g6fdoqd5h3154nwcae4eyd8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/access</title>
    <ns>0</ns>
    <id>5293</id>
    <revision>
      <id>81705</id>
      <parentid>78219</parentid>
      <timestamp>2015-11-05T07:51:44Z</timestamp>
      <contributor>
        <ip>173.16.211.108</ip>
      </contributor>
      <comment>Removed a typo (duplicate &quot;declared&quot;)</comment>
      <text xml:space="preserve" bytes="9267">{{title|access specifiers}}
{{cpp/language/classes/navbar}}
In a {{spar|member-specification}} of a {{rlp|class|class/struct}} or {{rlp|union}}, define the visibility of subsequent members.

In a {{spar|base-clause}} of a {{rlp|derived class}} declaration, define the accessibility of inherited members of the subsequent {{spar|base-specifier}}s.

===Syntax===
{{sdsc begin}}
{{sdsc |num=1| {{c|public}}  {{ttb|:}} {{spar|member-declarations}} }}
{{sdsc |num=2| {{c|protected}} {{ttb|:}} {{spar|member-declarations}} }}
{{sdsc |num=3| {{c|private}} {{ttb|:}} {{spar|member-declarations}} }}
{{sdsc |num=4| {{spar|class_name}} {{ttb|:}} {{c|public}} {{spar|base_classes}} }}
{{sdsc |num=5| {{spar|class_name}} {{ttb|:}} {{c|protected}} {{spar|base_classes}} }}
{{sdsc |num=6| {{spar|class_name}} {{ttb|:}} {{c|private}} {{spar|base_classes}} }}
{{sdsc end}}

@1@ The members declared after the specifier have public member access
@2@ The members declared after the specifier have protected member access
@3@ The members declared after the specifier have private member access
@4@ Public inheritance: the members of the {{rlp|derived class|base classes}} listed after the specifier keep their member access in the derived class
@5@ Protected inheritance: the public of the {{rlp|derived class|base classes}} listed after the specifier are protected members of the derived class
@6@ Private inheritance: the public and protected members of the {{rlp|derived class|base classes}} listed after the specifier are private members of the derived class

===Explanation===
The name of every {{rlp|class}} member (static, non-static, function, type, etc) has an associated &quot;member access&quot;. When a name of the member is used anywhere a program, its access is checked, and if it does not satisfy the access rules, the program does not compile:
{{example|code=
#include &lt;iostream&gt;
class Example {
 public: // all declarations after this point are public
    void add(int x) { // member &quot;add&quot; has public access
        n += x; // OK: private Example::n can be accessed from Example::add
    }
 private: // all declarations after this point are private
    int n = 0; // member &quot;n&quot; has private access
};
int main()
{
    Example e;
    e.add(1); // OK: public Example::add can be accessed from main
//  e.n = 7;  // Error: private Example::n cannot be accessed from main
}
}}
Access specifiers give the author of the class the ability to decide which class members are accessible to the users of the class (that is, the ''interface'') and which members are for internal use of the class (the ''implementation'')

===In detail===
All members of a class (bodies of {{rlp|member functions}}, initializers of member objects, and the entire {{rlp|nested types|nested class definitions}}) have access to all the names to which a class can access. A local class within a member function has access to all the names the member function itself can access. 

A class defined with the keyword {{tt|class}} has private access for its members and its base classes by default. A class defined with the keyword {{tt|struct}} has public access for its members and its base classes by default. A {{rlp|union}} has public access for its members by default.

To grant access to additional functions or classes to protected or private members, a {{rlp|friend|friendship declaration}} may be used.

Accessibility applies to all names with no regard to their origin, so a name introduced by a {{rlp|typedef}} or {{rlp|using declaration}}s is checked, not the name it refers to.
{{source|
class A : X {
  class B { }; // B is private in A
public:
  typedef B BB; // BB is public
};
void f() {
  A::B y; // error, A::B is private
  A::BB x; // OK, A::BB is public
}
}}

Member access does not affect visibility: names of private and privately-inherited members are visible and considered by overload resolution, implicit conversions to inaccessible base classes are still considered, etc. Member access check is the last step after any given language construct is interpreted. The intent of this rule is that replacing any {{tt|private}} with {{tt|public}} never alters the behavior of the program.

Access checking for the names used in {{rlp|default arguments|default function arguments}} as well as in the default {{rlp|template_parameters#Default_template_arguments|template parameters}} is performed at the point of declaration, not at the point of use.

Access rules for the names of {{rlp|virtual|virtual functions}} are checked at the call point using the type of the expression used to denote the object for which the member function is called. The access of the final overrider is ignored.
{{source|1=
struct B { virtual int f(); }; // f is public in B
class D : public B { private: int f(); }; // f is private in D
void f() {
 D d;
 B&amp; b = d;
 b.f(); // OK: B::f() is public, D::f() is invoked even though it's private
 d.f(); // error: D::f() is private
}
}}

A name that is private according to unqualified {{rlp|lookup|name lookup}}, may be accessible through qualified name lookup:
{{source|1=
class A { };
class B : private A { };
class C : public B {
   A* p; // error: unqualified name lookup finds A as the private base of B
   ::A* q; // OK, qualified name lookup finds the namespace-level declaration
};
}}

A name that is accessible through multiple paths in the inheritance graph has the access of the path with the most access:
{{source|1=
class W { public: void f(); };
class A : private virtual W { };
class B : public virtual W { };
class C : public A, public B {
void f() { W::f(); } // OK, W is accessible to C through B
};
}}

Any number of access specifiers may appear within a class, in any order. Member access specifiers may affect class layout: the addresses of non-static {{rlp|data members#Layout|data members}} are only guaranteed to increase in order of declaration for the members with the same access. For {{concept|StandardLayoutType}}, all non-static data members must have the same access.

When a member is redeclared within the same class, it must do so under the same member access:
{{source|
struct S {
  class A; // S::A is public
private:
  class A {}; // error: cannot change access
};
}}

===Public member access===
Public members form a part of the public interface of the class (other parts of the public interface are the non-member functions found by {{rlp|adl|ADL}}).

A public member of a class is accessible everywhere.

{{source|1=
class S {
 public: // n, f, E, A, B, C, U are public members
    int n;
    static void f() {}
    enum E {A, B, C};
    struct U {};
};
int main()
{
    S::f(); // S::f is accessible in main
    S s;
    s.n = S::B; // S::n and S::B are accesisble in main
    S::U x; // S::U is accessible in main
}
}}

===Protected member access===
Protected members form the interface for the derived classes (which is distinct from the public interface of the class).

A protected member of a class {{tt|Base}} can only be accessed
@1@ by the members and friends of {{tt|Base}} 
@2@ by the members {{rev inl|until=c++17|and friends}} of any class derived from {{tt|Base}}, but only when operating on an object of a type that is derived from {{tt|Base}} (including {{tt|this}})

{{source|
struct Base {
 protected:
    int i;
 private:
    void g(Base&amp; b, struct Derived&amp; d);
};

struct Derived : Base {
    void f(Base&amp; b, Derived&amp; d) // member function of a derived class
    {
        ++d.i; // okay: the type of d is Derived
        ++i; // okay: the type of the implied '*this' is Derived
//      ++b.i; // error: can't access a protected member through Base
    }
};
 
void Base::g(Base&amp; b, Derived&amp; d) // member function of Base
{
    ++i; // okay
    ++b.i; // okay
    ++d.i; // okay
}

void x(Base&amp; b, Derived&amp; d) // non-member non-friend
{
//    ++b.i; // error: no access from non-member
//    ++d.i; // error: no access from non-member
}
}}

When a pointer to a protected member is formed, it must use a derived class in its declaration:

{{source|1=
struct Base {
 protected:
    int i;
};

struct Derived : Base {
    void f()
    {
//      int Base::* ptr = &amp;Base::i;    // error: must name using Derived
        int Base::* ptr = &amp;Derived::i; // okay
    }
};
}}

===Private member access===
Private members form the implementation of a class, as well as the private interface for the other members of the class.

A private member of a class can only be accessed by the members and friends of that class, regardless of whether the members are on the same or different instances:

{{source|1=
class S {
 private:
    int n; // S::n is private
 public:
    S() : n(10) {} // this-&gt;n is accessible in S::S
    S(const S&amp; other) : n(other.n) {} // other.n is accessible in S::S
};
}}

The {{rlp|explicit cast}} (C-style and function-style) allows casting from a derived lvalue to reference to its private base, or from a pointer to derived to a pointer to its private base.

===Inheritance===
See {{rlp|derived class|derived classes}} for the meaning of public, protected, and private inheritance. 

[[de:cpp/language/access]]
[[es:cpp/language/access]]
[[fr:cpp/language/access]]
[[it:cpp/language/access]]
[[ja:cpp/language/access]]
[[pt:cpp/language/access]]
[[ru:cpp/language/access]]
[[zh:cpp/language/access]]</text>
      <sha1>8m2aw0u669pz90jal8jgp9lqzge0pe8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/adl</title>
    <ns>0</ns>
    <id>9974</id>
    <revision>
      <id>90599</id>
      <parentid>89232</parentid>
      <timestamp>2017-03-06T15:47:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0615R0 renamed decomposition declaration back to structured binding</comment>
      <text xml:space="preserve" bytes="10425">{{title|Argument-dependent lookup}}
{{cpp/language/functions/navbar}}

Argument-dependent lookup, also known as ADL, or Koenig lookup, is the set of rules for looking up the unqualified function names in {{rlp|operator_other|function-call expressions}}, including implicit function calls to {{rlp|operators|overloaded operators}}. These function names are looked up in the namespaces of their arguments in addition to the scopes and namespaces considered by the usual {{rlp|lookup|unqualified name lookup}}.

{{example|
Argument-dependent lookup makes it possible to use operators defined in a different namespace. Example:
|code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;Test\n&quot;; // There is no operator&lt;&lt; in global namespace, but ADL
                           // examines std namespace because the left argument is in
                           // std and finds std::operator&lt;&lt;(std::ostream&amp;, const char*)
    operator&lt;&lt;(std::cout, &quot;Test\n&quot;); // same, using function call notation

    // however,
    std::cout &lt;&lt; endl; // Error: 'endl' is not declared in this namespace.
                       // This is not a function call to endl(), so ADL does not apply

    endl(std::cout); // OK: this is a function call: ADL examines std namespace
                     // because the argument of endl is in std, and finds std::endl

    (endl)(std::cout); // Error: 'endl' is not declared in this namespace.
                       // The sub-expression (endl) is not a function call expression
}
}}

===Details===
First, the argument-dependent lookup is not considered if the lookup set produced by usual {{rlp|lookup|unqualified lookup}} contains any of the following:
@1@ a declaration of a class member
@2@ a declaration of a function at block scope (that's not a {{rlp|namespace#Using-declarations|using-declaration}})
@3@ any declaration that is not a function or a function template (e.g. a function object or another variable whose name conflicts with the name of the function that's being looked up)

Otherwise, for every argument in a function call expression its type is examined to determine the ''associated set of namespaces and classes'' that it will add to the lookup.
@1@ For arguments of fundamental type, the associated set of namespaces and classes is empty
@2@ For arguments of class type (including union), the set consists of
:@a@ The class itself
:@b@ All of its direct and indirect base classes
:@c@ If the class is a {{rlp|nested_types|member of another class}}, the class of which it is a member
:@d@ The innermost enclosing namespaces in the classes added to the set
@3@ For arguments whose type is a {{rlp|class template}} specialization, in addition to the class rules, the following types are examined and their associated classes and namespaces are added to the set
:@a@ The types of all template arguments provided for type template parameters (skipping non-type template parameters and skipping template template parameters)
:@b@ The namespaces in which any template template arguments are members
:@c@ The classes in which any template template arguments are members (if they happen to be class member templates)
@4@ For arguments of enumeration type, the namespace in which the enumeration is defined is added to the set. If the enumeration type is a member of a class, that class is added to the set.
@5@ For arguments of type pointer to T or pointer to an array of T, the type T is examined and its associated set of classes and namespaces is added to the set.
@6@ For arguments of function type, the function parameter types and the function return type are examined and their associated set of classes and namespaces are added to the set.
@7@ For arguments of type pointer to member function F of class X, the function parameter types, the function return type, and the class X are examined and their associated set of classes and namespaces are added to the set.
@8@ For arguments of type pointer to data member T of class X, the member type and the type X are both examined and their associated set of classes and namespaces are added to the set.
@9@ If the argument is the name or the {{rlp|overloaded address|address-of expression for a set of overloaded functions}} (or function templates), every function in the overload set is examined and its associated set of classes and namespaces is added to the set.
:@a@ Additionally, if the set of overloads is named by a template-id (template name with template arguments), all of its type template arguments and template template arguments (but not non-type template arguments) are examined and their associated set of classes and namespaces are added to the set.

If any namespace in the associated set of classes and namespaces is an {{rlp|namespace|inline namespace}}, its enclosing namespace is also added to the set.

If any namespace in the associated set of classes and namespaces directly contains an inline namespace, that inline namespace is added to the set.

After the associated set of classes and namespaces is determined, all declarations found in classes of this set are discarded for the purpose of further ADL processing, except namespace-scoped friend functions and function templates, as stated in point 2 below . 

The set of declarations found by ordinary {{rlp|lookup|unqualified lookup}} and the set of declarations found in all elements of the associated set produced by ADL, are merged, with the following special rules
@1@ {{rlp|namespace#Using-directives|using-directives}} in the associated namespaces are ignored
@2@ namespace-scoped friend functions (and function templates) that are declared in an associated class are visible through ADL even if they are not visible through ordinary lookup
@3@ all names except for the functions and function templates are ignored (no collision with variables)

===Notes===
Because of argument-dependent lookup, non-member functions and non-member operators defined in the same namespace as a class are considered part of the public interface of that class (if they are found through ADL) &lt;ref&gt; H. Sutter (1998) [http://www.gotw.ca/publications/mill02.htm &quot;What's In a Class? - The Interface Principle&quot;] in C++ Report, 10(3)&lt;/ref&gt;.

ADL is the reason behind the established idiom for swapping two objects in generic code:{{source|using std::swap;
swap(obj1, obj2);
}}because calling {{c|std::swap(obj1, obj2)}} directly would not consider the user-defined swap() functions that could be defined in the same namespace as the types of obj1 or obj2, and just calling the unqualified {{c|swap(obj1, obj2)}} would call nothing if no user-defined overload was provided. In particular, {{lc|std::iter_swap}} and all other standard library algorithms use this approach when dealing with {{concept|Swappable}} types.

Name lookup rules make it impractical to declare operators in global or user-defined namespace that operate on types from the std namespace, e.g. a custom {{c|operator&gt;&gt;}} or {{c|operator+}} for {{lc|std::vector}} or for {{lc|std::pair}} (unless the element types of the vector/pair are user-defined types, which would add their namespace to ADL). Such operators would not be looked up from template instantiations, such as the standard library algorithms. See {{rlp|dependent_name|dependent names}} for further details.

ADL can find a {{rlp|friend|friend function}} (typically, an overloaded operator) that is defined entirely within a class or class template, even if it was never declared at namespace level.
{{source|1=
template&lt;typename T&gt;
struct number
{
    number(int);
    friend number gcd(number x, number y) { return 0; }; // definition within
                                                         // a class template
};
// unless a matching declaration is provided gcd is an invisible (except through ADL)
// member of this namespace
void g() {
    number&lt;double&gt; a(3), b(4);
    a = gcd(a,b); // finds gcd because number&lt;double&gt; is an associated class,
                  // making gcd visible in its namespace (global scope)
//  b = gcd(3,4); // Error; gcd is not visible
}
}}

Although a function call can be resolved through ADL even if ordinary lookup finds nothing, a function call to a {{rlp|function template}} with explicitly-specified template arguments requires that there is a declaration of the template found by ordinary lookup (otherwise, it is a syntax error to encounter an unknown name followed by a less-than character)
{{source|1=
namespace N1 {
  struct S {};
  template&lt;int X&gt; void f(S);
}
namespace N2 {
  template&lt;class T&gt; void f(T t);
}
void g(N1::S s) {
  f&lt;3&gt;(s);      // Syntax error (unqualified lookup finds no f)
  N1::f&lt;3&gt;(s);  // OK, qualified lookup finds the template 'f'
  N2::f&lt;3&gt;(s);  // Error: N2::f does not take a non-type parameter
                //        N1::f is not looked up because ADL only works
                //              with unqualified names
  using N2::f;
  f&lt;3&gt;(s); // OK: Unqualified lookup now finds N2::f
           //     then ADL kicks in because this name is unqualified
           //     and finds N1::f
}
}}

In the following contexts ADL-only lookup (that is, lookup in associated namespaces only) takes place:
* the lookup of non-member functions {{tt|begin}} and {{tt|end}} performed by the {{rlp|range-for}} loop if member lookup fails
* the {{rlp|dependent_name#Lookup_rules|dependent name lookup}} from the point of template instantiation.

{{rev begin}}
{{rev|since=c++17|
* the lookup of non-member function {{tt|get}} performed by  {{rlp|declarations#Structured_binding_declaration|structured binding declaration}} for tuple-like types
}}
{{rev end}}

===Examples===
{{todo|more examples}}
{{example|Example from http://www.gotw.ca/gotw/030.htm
|code =
namespace A {
      struct X;
      struct Y;
      void f(int);
      void g(X);
}

namespace B {
    void f(int i) {
        f(i);   // calls B::f (endless recursion)
    }
    void g(A::X x) {
        g(x);   // Error: ambiguous between B::g (ordinary lookup)
                //        and A::g (argument-dependent lookup)
    }
    void h(A::Y y) {
        h(y);   // calls B::h (endless recursion): ADL examines the A namespace
                // but finds no A::h, so only B::h from ordinary lookup is used
    }
}
}}

===See also===
* {{rlp|lookup|Name lookup}} 
* {{rlp|function_template|Template argument deduction}}
* {{rlp|overload_resolution|Overload resolution}}

===References===
&lt;references/&gt;</text>
      <sha1>mih1zhnfxt7up0h2lpxzdeiyoltz3q3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/aggregate initialization</title>
    <ns>0</ns>
    <id>8871</id>
    <revision>
      <id>91998</id>
      <parentid>91981</parentid>
      <timestamp>2017-04-01T05:39:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Explanation */ adjust placement</comment>
      <text xml:space="preserve" bytes="8513">{{title|aggregate initialization}}
{{cpp/language/initialization/navbar}}
Initializes an aggregate from braced-init-list

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{spar|T}} {{spar|object}} {{ttb|{{=}} {}}{{spar|arg1, arg2, ...}}{{ttb|};}} }}
{{sdsc | num=2 | {{spar|T}} {{spar|object}} {{ttb| {}}{{spar|arg1, arg2, ...}}{{ttb|};}}|notes={{mark since c++11}}}}
{{sdsc end}}

===Explanation===

Aggregate initialization is a form of [[cpp/language/list_initialization|list-initialization]], which initializes ''aggregates''

An aggregate is one of the following types:
* array type
* class type (typically, {{c|struct}} or {{c|union}}), that has
:* no private or protected non-static data members
:* no user-provided{{rev inl|since=c++17|, inherited, or {{tt|explicit}}}} constructors {{rev inl|since=c++11|(explicitly defaulted or deleted constructors are allowed)}}
:* no {{rev inl|since=c++17|virtual, private, or protected}} base classes
:* no virtual member functions
{{rev begin}}
{{rev|since=c++11|until=c++14|
:* no {{rlp|data_members#Member_initialization|default member initializers}}
}}
{{rev end}}

The effects of aggregate initialization are:

* Each {{rev inl|since=c++17|direct public base,}} array element, or non-static class member, in order of array subscript/appearance in the class definition, is [[cpp/language/copy_initialization|copy-initialized]] from the corresponding clause of the initializer list. 

* If the initializer clause is an expression, implicit conversions are allowed as per copy-initialization{{rev inl|since=c++11|, except if they are narrowing (as in [[cpp/language/list_initialization|list-initialization]])}}.

* If the initializer clause is a nested braced-init-list (which is not an expression), the corresponding class member {{rev inl|since=c++17|or public base}} is {{rlp|list_initialization|list-initialized}} from that clause: aggregate initialization is recursive.

* If the object is an array of unknown size, and the supplied brace-enclosed initializer list has {{tt|n}} clauses, the size of the array is {{tt|n}}

* Static data members and unnamed bit-fields are skipped during aggregate initialization.

* If the number of initializer clauses exceeds the number of members {{rev inl|since=c++17|and bases}} to initialize, the program is ill-formed (compiler error)

{{rev begin}}
{{rev | until=c++11 |
* If the number of initializer clauses is less than the number of members or initializer list is completely empty, the remaining members are [[cpp/language/value_initialization|value-initialized]]. If a member of a reference type is one of these remaining members, the program is ill-formed.
}}
{{rev | since=c++11 &lt;!-- CWG1301: {} prefers aggregate-init --&gt; | {{mark unreviewed dr|CWG}}
* If the number of initializer clauses is less than the number of members {{rev inl|since=c++17|and bases}} or initializer list is completely empty, the remaining members {{rev inl|since=c++17|and bases}} are initialized {{rev inl|since=c++14|by their {{rlp|data members#Member_initialization|default initializers}}, if provided in the class definition, and otherwise}} by empty lists, in accordance with the usual [[cpp/language/list_initialization|list-initialization]] rules (which performs value-initialization for non-class types and non-aggregate classes with default constructors, and aggregate initialization for aggregates). If a member of a reference type is one of these remaining members, the program is ill-formed.}}
{{rev end }}

* {{rev inl|until=c++14|If the aggregate initialization uses the form with the equal sign ({{c|T a {{=}} {args..} }}),}} the braces around the nested initializer lists may be elided (omitted), in which case as many initializer clauses as necessary are used to initialize every member or element of the corresponding subaggregate, and the subsequent initializer clauses are used to initialize the following members of the object. However, if the object has a sub-aggregate without any members (an empty struct, or a struct holding only static members), brace elision is not allowed, and an empty nested list {{ttb|{} }} must be used.

* When a union is initialized by aggregate initialization, only its first non-static data member is initialized.

===Character arrays===
Arrays of character types ({{tt|char}}, {{tt|signed char}}, {{tt|unsigned char}}, {{tt|char16_t}}, {{tt|char32_t}}, {{tt|wchar_t}}) can be initialized from an appropriate {{rlp|string literal}}, optionally enclosed in braces. Successive characters of the string literal (which includes the implicit terminating null character) initialize the elements of the array. If the size of the array is specified and it is larger than the number of characters in the string literal, the remaining characters are zero-initialized.

{{source|1=
char a[] = &quot;abc&quot;;
// equivalent to char a[4] = {'a', 'b', 'c', '\0'};

//  unsigned char b[3] = &quot;abc&quot;; // Error: initializer string too long
unsigned char b[5]{&quot;abc&quot;};
// equivalent to unsigned char b[5] = {'a', 'b', 'c', '\0', '\0'};

wchar_t c[] = {L&quot;кошка&quot;}; // optional braces
// equivalent to wchar_t c[6] = {L'к', L'о', L'ш', L'к', L'а', L'\0'};
}}

===Notes===
An aggregate class or array may include non-aggregate {{rev inl|since=c++17|public bases}}, members, or elements, which are initialized as described above (e.g. copy-initialization from the corresponding initializer clause)

Until C++11, narrowing conversions were permitted in aggregate initialization, but they are no longer allowed.

Until C++11, aggregate initialization could not be used in a constructor initializer list due to syntax restrictions.

Until C++14, the direct-initialization form {{c|T a {args..} }} did not permit brace elision.

In C, character array of size one less than the size of the string literal may be initialized from a string literal; the resulting array is not null-terminated. This is not allowed in C++.

===Example===

{{example| code=
#include &lt;string&gt;
#include &lt;array&gt;
struct S {
    int x;
    struct Foo {
        int i;
        int j;
        int a[3];
    } b;
};

union U {
    int a;
    const char* b;
};

int main()
{
    S s1 = { 1, { 2, 3, {4, 5, 6} } };
    S s2 = { 1, 2, 3, 4, 5, 6}; // same, but with brace elision
    S s3{1, {2, 3, {4, 5, 6} } }; // same, using direct-list-initialization syntax
    S s4{1, 2, 3, 4, 5, 6}; // error in C++11: brace-elision only allowed with equals sign
                            // okay in C++14

    int ar[] = {1,2,3}; // ar is int[3]
//  char cr[3] = {'a', 'b', 'c', 'd'}; // too many initializer clauses
    char cr[3] = {'a'}; // array initialized as {'a', '\0', '\0'}

    int ar2d1[2][2] = {{1, 2}, {3, 4}}; // fully-braced 2D array: {1, 2}
                                        //                        {3, 4}
    int ar2d2[2][2] = {1, 2, 3, 4}; // brace elision: {1, 2}
                                    //                {3, 4}
    int ar2d3[2][2] = {{1}, {2}};   // only first column: {1, 0}
                                    //                    {2, 0}

    std::array&lt;int, 3&gt; std_ar2{ {1,2,3} };    // std::array is an aggregate
    std::array&lt;int, 3&gt; std_ar1 = {1, 2, 3}; // brace-elision okay

    int ai[] = { 1, 2.0 }; // narrowing conversion from double to int:
                           // error in C++11, okay in C++03

    std::string ars[] = {std::string(&quot;one&quot;), // copy-initialization
                         &quot;two&quot;,              // conversion, then copy-initialization
                         {'t', 'h', 'r', 'e', 'e'} }; // list-initialization

    U u1 = {1}; // OK, first member of the union
//    U u2 = { 0, &quot;asdf&quot; }; // error: too many initializers for union
//    U u3 = { &quot;asdf&quot; }; // error: invalid conversion to int

}

// aggregate
struct base1 { int b1, b2 = 42; };
// non-aggregate
struct base2 {
  base2() : b3(42) {}
  int b3;
};
// aggregate in C++17
struct derived : base1, base2 { int d; };
derived d1{ {1, 2}, { }, 4}; // d1.b1 = 1, d1.b2 = 2,  d1.b3 = 42, d1.d = 4
derived d2{ {    }, { }, 4}; // d2.b1 = 0, d2.b2 = 42, d2.b3 = 42, d2.d = 4

 | output=
}}

===See also===
* [[cpp/language/list_initialization|list initialization]]

[[de:cpp/language/aggregate initialization]]
[[es:cpp/language/aggregate initialization]]
[[fr:cpp/language/aggregate initialization]]
[[it:cpp/language/aggregate initialization]]
[[ja:cpp/language/aggregate initialization]]
[[pt:cpp/language/aggregate initialization]]
[[ru:cpp/language/aggregate initialization]]
[[zh:cpp/language/aggregate initialization]]</text>
      <sha1>mgr3wbmnmwgcwreof4f9e5c4m1sg8wn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/alignas</title>
    <ns>0</ns>
    <id>8371</id>
    <revision>
      <id>88563</id>
      <parentid>83560</parentid>
      <timestamp>2016-11-26T10:21:17Z</timestamp>
      <contributor>
        <username>RainerGrimm</username>
        <id>5994</id>
      </contributor>
      <comment>/* Explanation */</comment>
      <text xml:space="preserve" bytes="3238">{{title|alignas specifier {{mark since c++11}}}}
{{cpp/language/declarations/navbar}}

Specifies the {{rlp|object#Alignment|alignment requirement}} of a type or an object.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|alignas(}} {{spar|expression}} {{ttb|)}} }}
{{sdsc | {{ttb|alignas(}} {{spar|type-id}} {{ttb|)}} }}
{{sdsc | {{ttb|alignas(}} {{spar|pack}} {{ttb|...}} {{ttb|)}} }}
{{sdsc end}}

@1@ {{c|alignas(expression)}} must be an {{rlp|constant expression#Constant expression|integral constant expression}} that evaluates to zero, or to a valid value for an {{rlp|object#Alignment|alignment}} or extended alignment.
@2@ Equivalent to {{c|alignas(alignof(type))}}
@3@ Equivalent to multiple alignas specifiers applied to the same declaration, one for each member of the {{rlp|parameter pack}}, which can be either type or non-type parameter pack.

===Explanation===
The {{c|alignas}} specifier may be applied to the declaration of a variable or a non-bitfield class data member, or it can be applied to the declaration or definition of a {{rlp|classes|class/struct/union}} or {{rlp|enum|enumeration}}. It cannot be applied to a function parameter or to the exception parameter of a catch clause.

The object or the type declared by such a declaration will have its {{rlp|object#Alignment|alignment requirement}} equal to the strictest (largest) non-zero {{spar|expression}} of all {{tt|alignas}} specifiers used in the declaration, unless it would weaken the natural alignment of the type.

If the strictest (largest) {{tt|alignas}} on a declaration is weaker than the alignment it would have without any {{tt|alignas}} specifiers (that is, weaker than its natural alignment or weaker than {{tt|alignas}} on another declaration of the same object or type), the program is ill-formed:
{{source|
struct alignas(8) S {};
struct alignas(1) U { S s; }; // error: alignment of U would have been 8 without alignas(1)
}}

Invalid non-zero alignments, such as {{c|alignas(3)}} are ill-formed.

Valid non-zero alignments that are weaker than another {{c|alignas}} on the same declaration are ignored.

{{c|alignas(0)}} is always ignored.

===Notes===
As of the ISO C11 standard, the C language has the {{c|_Alignas}} keyword and defines {{c|alignas}} as a preprocessor macro expanding to the keyword in the header {{ltt|c/types|&lt;stdalign.h&gt;}}, but in C++ this is a keyword, and the headers {{ltt|cpp/header#Deprecated headers|&lt;stdalign.h&gt;}} and {{header|cstdalign}} do not define such macro. They do, however, define the macro constant {{c|__alignas_is_defined}}.

===Keywords===

{{ltt|cpp/keyword/alignas}}

===Example===

{{example|code=

// every object of type sse_t will be aligned to 16-byte boundary
struct alignas(16) sse_t
{
  float sse_data[4];
};

// the array &quot;cacheline&quot; will be aligned to 128-byte boundary
alignas(128) char cacheline[128];

}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc alignof}}
{{dsc inc | cpp/types/dsc alignment_of}}
{{dsc see c | c/keyword/_Alignas}}
{{dsc end}}

[[de:cpp/language/alignas]]
[[es:cpp/language/alignas]]
[[fr:cpp/language/alignas]]
[[it:cpp/language/alignas]]
[[ja:cpp/language/alignas]]
[[pt:cpp/language/alignas]]
[[ru:cpp/language/alignas]]
[[zh:cpp/language/alignas]]</text>
      <sha1>qe68vyidd2xf5c7t9xqgn15hmmyjujc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/alignof</title>
    <ns>0</ns>
    <id>1984</id>
    <revision>
      <id>85639</id>
      <parentid>81674</parentid>
      <timestamp>2016-04-29T20:41:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>-illformed alignas in the example</comment>
      <text xml:space="preserve" bytes="1993">{{title|alignof operator {{mark since c++11}}}}
{{cpp/language/expressions/navbar}}
Queries alignment requirements of a type

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|alignof(}} {{spar|type-id}} {{ttb|)}}}}
{{sdsc end}}

Returns a value of type {{lc|std::size_t}}.

===Explanation===
Returns {{rlp|object#Alignment|the alignment}}, in bytes, required for any instance of the type indicated by [[cpp/language/type#Type_naming|type-id]], which is either complete type, an array type, or a reference type.

If the type is reference type, the operator returns the alignment of ''referenced'' type; if the type is array type, alignment requirement of the element type is returned.

===Keywords===
{{ltt|cpp/keyword/alignof}}

===Notes===
See {{rlp|object#Alignment|alignment}} for the meaning and properties of the value returned by {{tt|alignof}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
 
struct Foo {
    int   i;
    float f;
    char  c;
};

struct Empty {};

struct alignas(64) Empty64 {};

int main()
{
    std::cout &lt;&lt; &quot;Alignment of&quot;  &quot;\n&quot;
        &quot;- char             : &quot; &lt;&lt; alignof(char)    &lt;&lt; &quot;\n&quot;
        &quot;- pointer          : &quot; &lt;&lt; alignof(int*)    &lt;&lt; &quot;\n&quot;
        &quot;- class Foo        : &quot; &lt;&lt; alignof(Foo)     &lt;&lt; &quot;\n&quot;
        &quot;- empty class      : &quot; &lt;&lt; alignof(Empty)   &lt;&lt; &quot;\n&quot;
        &quot;- alignas(64) Empty: &quot; &lt;&lt; alignof(Empty64) &lt;&lt; &quot;\n&quot;;
}
 | p=true
 | output=
Alignment of
- char             : 1
- pointer          : 8
- class Foo        : 4
- empty class      : 1
- alignas(64) Empty: 64
}}

===See also===
{{dsc begin}}
{{dsc | [[cpp/language/object#Alignment | alignment requirement ]] | restricts the addresses at which an object may be allocated }}
{{dsc inc | cpp/language/dsc alignas}}
{{dsc inc | cpp/types/dsc alignment_of}}
{{dsc end}}

[[de:cpp/language/alignof]]
[[es:cpp/language/alignof]]
[[fr:cpp/language/alignof]]
[[it:cpp/language/alignof]]
[[ja:cpp/language/alignof]]
[[pt:cpp/language/alignof]]
[[ru:cpp/language/alignof]]
[[zh:cpp/language/alignof]]</text>
      <sha1>br4gvzhiv7wvrdmzf2ody8hp9wsx919</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/array</title>
    <ns>0</ns>
    <id>9956</id>
    <revision>
      <id>86342</id>
      <parentid>85957</parentid>
      <timestamp>2016-06-27T20:09:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0135r1 array prvalues materialize temporaries just like class prvalues</comment>
      <text xml:space="preserve" bytes="8596">{{title|Array declaration}}
{{cpp/language/declarations/navbar}}

Declares an object of array type.

===Syntax===
An array declaration is any simple declaration whose {{rlp|declarations|declarator}} has the form

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|noptr-declarator}} {{ttb|[}} {{spar|expr}}{{mark optional}} {{ttb|]}} {{spar|attr}}{{mark optional}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|noptr-declarator}} | any valid {{spar|declarator}}, but if it begins with *, &amp;, or &amp;&amp;, it has to be surrounded by parentheses. }}
{{par | {{spar|attr}}{{mark c++11}} | optional list of {{rlp|attributes}} }}
{{par | {{spar|expr}} | {{rev inl|until=c++14|an {{rlp|constant expression|integral constant expression}}}}{{rev inl|since=c++14|a {{rlp|constant expression|converted constant expression}} of type {{lc|std::size_t}}}}, which evaluates to a value greater than zero }}
{{par end}}

A declaration of the form {{c|T a[N];}}, declares {{tt|a}} as an array object that consists of {{tt|N}} contiguously allocated objects of type {{tt|T}}. The elements of an array are numbered {{tt|0, …, N - 1}}, and may be accessed with the {{rlp|operator_member_access#Built-in_subscript_operator|subscript operator []}}, as in {{c|a[0]}}, …, {{c|a[N - 1]}}.

Arrays can be constructed from any {{rlp|types|fundamental type}} (except {{c|void}}), {{rlp|pointer}}s, {{rlp|pointer|pointers to members}}, {{rlp|classes}}, {{rlp|enum|enumerations}}, or from other arrays (in which case the array is said to be multi-dimensional). There are no arrays of references, arrays of functions, or arrays of abstract class types.

Applying {{rlp|cv|cv-qualifiers}} to an array type (through typedef or template type manipulation) applies the qualifiers to the element type, but any array type whose elements are of cv-qualified type is considered to have the same cv-qualification.

{{source|1=
// a and b have the same const-qualified type &quot;array of 5 const char&quot;
typedef const char CC;
CC a[5] = {}; 
typedef char CA[5];
const CA b = {};
}}

When used with {{rlp|new|new[]-expression}}, the size of an array may be zero; such an array has no elements:

{{source|1=
int* p = new int[0]; // accessing p[0] or *p is undefined
delete[] p; // cleanup still required
}} 

====Assignment====
Objects of array type cannot be modified as a whole: even though they are {{rlp|value_category|lvalues}} (e.g. an address of array can be taken), they cannot appear on the left hand side of an assignment operator:

{{source|1=
int a[3] = {1, 2, 3}, b[3] = {4, 5, 6};
int (*p)[3] = &amp;a; // okay: address of a can be taken
a = b;            // error: a is an array
struct { int c[3]; } s1, s2 = {3, 4, 5};
s1 = s2; // okay: implicity-defined copy assignment operator
         // can assign data members of array type
}}

====Array-to-pointer decay====
There is an {{rlp|implicit_cast|implicit conversion}} from lvalues and rvalues of array type to rvalues of pointer type: it constructs a pointer to the first element of an array. This conversion is used whenever arrays appear in context where arrays are not expected, but pointers are:

{{example|code=
#include &lt;iostream&gt;
#include &lt;numeric&gt;
#include &lt;iterator&gt;

void g(int (&amp;a)[3])
{
    std::cout &lt;&lt; a[0] &lt;&lt; '\n';
}

void f(int* p)
{
    std::cout &lt;&lt; *p &lt;&lt; '\n';
}

int main()
{
    int a[3] = {1, 2, 3};
    int* p = a;

    std::cout &lt;&lt; sizeof a &lt;&lt; '\n'  // prints size of array
              &lt;&lt; sizeof p &lt;&lt; '\n'; // prints size of a pointer

    // where arrays are acceptable, but pointers aren't, only arrays may be used
    g(a); // okay: function takes an array by reference
//  g(p); // error

    for(int n: a)              // okay: arrays can be used in range-for loops
        std::cout &lt;&lt; n &lt;&lt; ' '; // prints elements of the array
//  for(int n: p)              // error
//      std::cout &lt;&lt; n &lt;&lt; ' ';

    std::iota(std::begin(a), std::end(a), 7); // okay: begin and end take arrays
//  std::iota(std::begin(p), std::end(p), 7); // error

    // where pointers are acceptable, but arrays aren't, both may be used:
    f(a); // okay: function takes a pointer
    f(p); // okay: function takes a pointer

    std::cout &lt;&lt; *a &lt;&lt; '\n' // prints the first element
              &lt;&lt; *p &lt;&lt; '\n' // same
              &lt;&lt; *(a + 1) &lt;&lt; ' ' &lt;&lt; a[1] &lt;&lt; '\n'  // prints the second element
              &lt;&lt; *(p + 1) &lt;&lt; ' ' &lt;&lt; p[1] &lt;&lt; '\n'; // same
}
}}

====Multidimensional arrays====
When the element type of an array is another array, it is said that the array is multidimensional:

{{source|1=
// array of 2 arrays of 3 int each
int a[2][3] = {{1, 2, 3},  // can be viewed as a 2 × 3 matrix
               {4, 5, 6}}; // with row-major layout
}}

Note that when array-to-pointer decay is applied, a multidimensional array is converted to a pointer to its first element (e.g., a pointer to its first row or to its first plane): array-to-pointer decay is applied only once.

{{source|1=
int a[2];            // array of 2 int
int* p1 = a;         // a decays to a pointer to the first element of a

int b[2][3];         // array of 2 arrays of 3 int
// int** p2 = b;     // error: b does not decay to int**
int (*p2)[3] = b;    // b decays to a pointer to the first 3-element row of b

int c[2][3][4];      // array of 2 arrays of 3 arrays of 4 int
// int*** p3 = c;    // error: c does not decay to int***
int (*p3)[3][4] = c; // c decays to a pointer to the first 3 × 4-element plane of c
}}

====Arrays of unknown bound====
If {{spar|expr}} is omitted in the declaration of an array, the type declared is &quot;array of unknown bound of T&quot;, which is a kind of {{rlp|incomplete_type|incomplete type}}, except when used in a declaration with an {{rlp|aggregate_initialization|aggregate initializer}}:

{{source|1=
extern int x[];      // the type of x is &quot;array of unknown bound of int&quot;
int a[] = {1, 2, 3}; // the type of a is &quot;array of 3 int&quot;
}}

Because array element cannot have incomplete type, multidimensional arrays cannot have unknown bound in a dimension other than the first:
{{source|1=
extern int a[][2]; // okay: array of unknown bound of arrays of 2 int
extern int b[2][]; // error: array has incomplete element type
}}

References and pointers to arrays of unknown bound can be formed, but cannot be initialized or assigned from arrays and pointers to arrays of known bound. Note that in the C programming language, pointers to arrays of unknown bound are compatible with pointers to arrays of known bound and are thus convertible and assignable in both directions.

{{source|1=
extern int a1[];
int (&amp;r1)[] = a1;  // okay
int (*p1)[] = &amp;a1; // okay
int (*q)[2] = &amp;a1; // error (but okay in C)

int a2[] = {1, 2, 3};
int (&amp;r2)[] = a2;  // error
int (*p2)[] = &amp;a2; // error (but okay in C)
}}

Pointers to arrays of unknown bound cannot participate in {{rlp|operator_arithmetic#Additive_operators|pointer arithmetic}} and cannot be used on the left of the {{rlp|operator_member_access#Built-in_subscript_operator|subscript operator}}, but can be dereferenced. {{rev inl|until=c++14|Pointers and references to arrays of unknown bound cannot be used in {{rlp|function#Parameter_list|function parameters}}}}.

====Array rvalues====
Although arrays cannot be returned from functions by value and cannot be targets of most cast expressions, array {{rlp|value category|prvalues}} may be formed by using a type alias to construct an array temporary using {{rlp|explicit_cast|brace-initialized functional cast}}.
{{rev begin}}
{{rev|since=c++17|
Like class prvalues, array prvalues convert to xvalues by {{rlp|implicit_conversion#Temporary_materialization|temporary materialization}} when evaluated.}}
{{rev end}}

Array {{rlp|value category|xvalues}} may be formed directly by accessing an array member of a class rvalue or by using {{lc|std::move}} or another cast or function call that returns an rvalue reference. 

{{example|code=#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;utility&gt;

void f(int (&amp;&amp;x)[2][3])
{
    std::cout &lt;&lt; sizeof x &lt;&lt; '\n';
}

struct X
{
    int i[2][3];
} x;

template&lt;typename T&gt; using identity = T;

int main()
{
    std::cout &lt;&lt; sizeof X().i &lt;&lt; '\n';           // size of the array
    f(X().i);                                    // okay: binds to xvalue
//  f(x.i);                                      // error: cannot bind to lvalue

    int a[2][3];
    f(std::move(a));                             // okay: binds to xvalue

    using arr_t = int[2][3];
    f(arr_t{});                                  // okay: binds to prvalue
    f(identity&lt;int[][3]&gt;{{1, 2, 3}, {4, 5, 6}}); // okay: binds to prvalue

}
| output=
24
24
24
24
24
}}</text>
      <sha1>6i1x4zmzp40b28rky2cycmieofmbnp5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/as if</title>
    <ns>0</ns>
    <id>8874</id>
    <revision>
      <id>83086</id>
      <parentid>81259</parentid>
      <timestamp>2016-01-20T19:21:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link allocation functions (so that http://stackoverflow.com/questions/34907922 doesn't have to &quot;assume&quot;)</comment>
      <text xml:space="preserve" bytes="5969">{{title|The as-if rule}}
{{cpp/language/navbar}}
Allows any and all code transformations that do not change the observable behavior of the program

===Explanation===

The C++ compiler is permitted to perform any changes to the program as long as the following remains true:

{{rev begin}}
{{rev|until=c++11|
@1@ At every {{rlp|eval_order|sequence point}}, the values of all {{rlp|cv|volatile}} objects are stable (previous evaluations are complete, new evaluations not started)
}}{{rev|since=c++11|
@1@ Accesses (reads and writes) to {{rlp|cv|volatile}} objects occur strictly according to the semantics of the expressions in which they occur. In particular, they are [[cpp/atomic/memory_order|not reordered]] with respect to other volatile accesses on the same thread.
}}
{{rev end}}

@2@ At program termination, data written to files is exactly as if the program was executed as written.

@3@ Prompting text which is sent to interactive devices will be shown before the program waits for input.

@4@ If {{ltt|cpp/preprocessor/impl|#pragma STDC FENV_ACCESS}} is set to {{tt|ON}}, the changes to the [[cpp/numeric/fenv|floating-point environment]] (floating-point exceptions and rounding modes) are guaranteed to be observed by the floating-point arithmetic operators and function calls as if executed as written, except that
:* the result of any floating-point expression other than cast and assignment may have range and precision of a floating-point type different from the type of the expression (see {{lc|FLT_EVAL_METHOD}})
:* notwithstanding the above, intermediate results of any floating-point expression may be calculated as if to infinite range and precision (unless {{ltt|cpp/preprocessor/impl|#pragma STDC FP_CONTRACT}} is {{tt|OFF}})

===Notes===

Because the compiler is (usually) unable to analyze the code of an external library to determine whether it does or does not perform I/O or volatile access, third-party library calls also aren't affected by optimization. However, standard library calls may be replaced by other calls, eliminated, or added to the program during optimization. Statically-linked third-party library code may be subject to link-time optimization.

Programs with {{rlp|ub|undefined behavior}}, e.g. due to access to an array out of bounds, modification of a const object, [[cpp/language/eval_order|evaluation order]] violations, etc, are free from the as-if rule: they often change observable behavior when recompiled with different optimization settings. For example, if a test for signed integer overflow relies on the result of that overflow, e.g. {{c|if(n+1 &lt; n) abort();}}, [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html it is removed entirely by some compilers] because [[cpp/language/operator_arithmetic#Overflows|signed overflow is undefined behavior]] and the optimizer is free to assume it never happens and the test is redundant.

[[cpp/language/copy_elision|Copy elision]] is an exception from the as-if rule: the compiler may remove calls to move- and copy-constructors and the matching calls to the destructors of temporary objects even if those calls have observable side effects.

{{rev begin}}
{{rev|since=c++14|
[[cpp/language/new#Allocation|New-expression]] has another exception from the as-if rule: the compiler may remove calls to the [[cpp/memory/new/operator_new|replaceable allocation functions]] even if a user-defined replacement is provided and has observable side-effects.
}}
{{rev end}}

The count and order of floating-point exceptions can be changed by optimization as long as the state as observed by the next floating-point operation is as if no optimization took place:
{{source|1=
#pragma STDC FENV_ACCESS ON
for (i = 0; i &lt; n; i++) x + 1; // x+1 is dead code, but may raise FP exceptions
// (unless the optimizer can prove otherwise). However, executing it n times will
// raise the same exception over and over. So this can be optimized to:
if (0 &lt; n) x + 1; 
}}
===Example===

{{example
 |
 | code=
int&amp; preinc(int&amp; n) { return ++n; }
int add(int n, int m) { return n+m; }

// volatile input to prevent constant folding
volatile int input = 7;

// volatile output to make the result a visible side-effect
volatile int result;

int main()
{
    int n = input;
// using built-in operators would invoke undefined behavior
//    int m = ++n + ++n;
// but using functions makes sure the code executes as-if 
// the functions were not overlapped
    int m = add(preinc(n), preinc(n));
    result = m;
}
 | output=
# full code of the main() function as produced by the GCC compiler
# x86 (Intel) platform:
        movl    input(%rip), %eax   # eax = input
        leal    3(%rax,%rax), %eax  # eax = 3 + eax + eax
        movl    %eax, result(%rip)  # result = eax
        xorl    %eax, %eax          # eax = 0 (the return value of main())
        ret

# PowerPC (IBM) platform:
        lwz 9,LC..1(2)
        li 3,0          # r3 = 0 (the return value of main())
        lwz 11,0(9)     # r11 = input;
        slwi 11,11,1    # r11 = r11 &lt;&lt; 1;
        addi 0,11,3     # r0 = r11 + 3;
        stw 0,4(9)      # result = r0;
        blr

# Sparc (Sun) platform:
        sethi   %hi(result), %g2
        sethi   %hi(input), %g1
        mov     0, %o0                 # o0 = 0 (the return value of main)
        ld      [%g1+%lo(input)], %g1  # g1 = input
        add     %g1, %g1, %g1          # g1 = g1 + g1
        add     %g1, 3, %g1            # g1 = 3 + g1
        st      %g1, [%g2+%lo(result)] # result = g1
        jmp     %o7+8
        nop

# in all cases, the side effects of preinc() were eliminated, and the
# entire main() function was reduced to the equivalent of result = 2*input + 3;
}}

===See also===
* [[cpp/language/copy_elision|copy elision]]

[[de:cpp/language/as if]]
[[es:cpp/language/as if]]
[[fr:cpp/language/as if]]
[[it:cpp/language/as if]]
[[ja:cpp/language/as if]]
[[pt:cpp/language/as if]]
[[ru:cpp/language/as if]]
[[zh:cpp/language/as if]]</text>
      <sha1>lo88w9jebg6y97bv4k7jlimy2jkwaiq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/as operator</title>
    <ns>0</ns>
    <id>14539</id>
    <redirect title="cpp/language/copy assignment" />
    <revision>
      <id>82066</id>
      <timestamp>2015-11-30T15:24:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/language/as operator]] to [[cpp/language/copy assignment]]: &quot;move operator&quot; and &quot;as operator&quot; should match their content (&quot;move assignment&quot; and &quot;copy assignment&quot;) more closely</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/language/copy assignment]]</text>
      <sha1>dnupxhajsdyqz50a7n6werq9y6rqb2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/ascii</title>
    <ns>0</ns>
    <id>687</id>
    <revision>
      <id>83411</id>
      <parentid>83409</parentid>
      <timestamp>2016-02-07T18:00:44Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>revert</comment>
      <text xml:space="preserve" bytes="610">{{title|ASCII Chart}}
{{cpp/language/navbar}}
The following chart contains all 128 ASCII decimal '''(dec)''', octal '''(oct)''', hexadecimal '''(hex)''' and character '''(ch)''' codes.

{{cpp/language/ascii}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/ascii | ASCII Chart}}
{{dsc end}}

[[ar:cpp/language/ascii]]
[[cs:cpp/language/ascii]]
[[de:cpp/language/ascii]]
[[es:cpp/language/ascii]]
[[fr:cpp/language/ascii]]
[[it:cpp/language/ascii]]
[[ja:cpp/language/ascii]]
[[pl:cpp/language/ascii]]
[[pt:cpp/language/ascii]]
[[ru:cpp/language/ascii]]
[[tr:cpp/language/ascii]]
[[zh:cpp/language/ascii]]</text>
      <sha1>7a8t6gjbbyn00i7a0sucfnbp6asyv1o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/asm</title>
    <ns>0</ns>
    <id>5289</id>
    <revision>
      <id>81340</id>
      <parentid>78990</parentid>
      <timestamp>2015-10-22T10:44:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix icc link rot</comment>
      <text xml:space="preserve" bytes="2855">{{title|asm declaration}}
{{cpp/language/declarations/navbar}}
''asm-declaration'' gives the ability to embed assembly language source code within a C++ program. This declaration is conditionally-supported and implementation defined, 
meaning that it may not be present and, even when provided by the implementation, it does not have a fixed meaning.

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|asm (}} {{spar|string_literal}} {{ttb|)}} {{ttb|;}} }}
{{sdsc end}}

===Explanation===
The {{spar|string_literal}} is typically a short program written in assembly language, which is executed whenever this declaration is executed. Different C++ compilers have wildly varying rules for asm-declarations, and different conventions for the interaction with the surrounding C++ code.

As other {{rlp|declarations|block declarations}}, this declaration can appear inside a block (a function body or another compound statement), and, as all other declarations, this declaration can also appear outside a block.

{{todo|write a note on GCC extended assembly syntax, since it is now supported by Intel, IBM, Sun (as of v12), etc}}

===Examples===
{{example| Demonstrates two kinds of inline assembly syntax offered by the GCC compiler. This program will only work correctly on x86_64 platform under Linux.
|code=
#include &lt;iostream&gt;

extern &quot;C&quot; int func();
// the definition of func is written in assembly language
asm(&quot;.globl func\n\t&quot;
    &quot;.type func, @function\n\t&quot;
    &quot;func:\n\t&quot;
    &quot;.cfi_startproc\n\t&quot;
    &quot;movl $7, %eax\n\t&quot;
    &quot;ret\n\t&quot;
    &quot;.cfi_endproc&quot;);

int main()
{
    int n = func();
    // extended inline assembly
    asm (&quot;leal (%0,%0,4),%0&quot;
         : &quot;=r&quot; (n)
         : &quot;0&quot; (n));
    std::cout &lt;&lt; &quot;7*5 = &quot; &lt;&lt; n &lt;&lt; std::endl; // flush is intentional

    // standard inline assembly
    asm (&quot;movq $60, %rax\n\t&quot; // the exit syscall number on Linux
         &quot;movq $2,  %rdi\n\t&quot; // this program returns 2
         &quot;syscall&quot;);
}
|output=
7*5 = 35
}}

===External links===
*[http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html GCC Inline Assembly HOWTO]
*[http://pic.dhe.ibm.com/infocenter/comphelp/v121v141/topic/com.ibm.xlcpp121.aix.doc/language_ref/asm.html IBM XL C/C++ Inline Assembly]
*[https://software.intel.com/en-us/node/513428 Intel C++ Inline Assembly]
*[http://msdn.microsoft.com/en-us/library/4ks26t93(v=vs.120).aspx Visual Studio 2013 Inline Assembler]
*[https://blogs.oracle.com/x86be/entry/gcc_style_asm_inlining_support Sun Studio 12 Asm Statements]
*[http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=4308e2f5bde02110e2f5bde02110275d6e10RCRD Inline assembly for Itanium-based HP-UX]

[[de:cpp/language/asm]]
[[es:cpp/language/asm]]
[[fr:cpp/language/asm]]
[[it:cpp/language/asm]]
[[ja:cpp/language/asm]]
[[pt:cpp/language/asm]]
[[ru:cpp/language/asm]]
[[zh:cpp/language/asm]]</text>
      <sha1>cg7nip9n8rfzu7ur6304i13qv634tj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/attributes</title>
    <ns>0</ns>
    <id>8703</id>
    <revision>
      <id>91763</id>
      <parentid>89321</parentid>
      <timestamp>2017-03-31T19:57:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="9598">{{title|attribute specifier sequence{{mark since c++11}}}}
{{cpp/language/declarations/navbar}}

Introduces implementation-defined attributes for types, objects, code, etc.

:{{ttb|&lt;nowiki&gt;[[&lt;/nowiki&gt;}}{{spar|attr}}{{ttb|]]}} {{ttb|&lt;nowiki&gt;[[&lt;/nowiki&gt;}}{{spar|attr1}}, {{spar|attr2}}, {{spar|attr3}}{{ttb|(}}{{spar|args}}{{ttb|)}}{{ttb|]]}} {{ttb|&lt;nowiki&gt;[[&lt;/nowiki&gt;}}{{spar|namespace}}{{ttb|::}}{{spar|attr}}{{ttb|(}}{{spar|args}}{{ttb|)}}{{ttb|]]}} {{spar|alignas_specifier}}

Formally, the syntax is
{{sdsc begin}}
{{sdsc|notes={{mark since c++11}}|1=
{{ttb|&lt;nowiki&gt;[[&lt;/nowiki&gt;}} {{spar|attribute-list}} {{ttb|&lt;nowiki&gt;]]&lt;/nowiki&gt;}}
}}
{{sdsc|notes={{mark since c++17}}|1=
{{ttb|&lt;nowiki&gt;[[&lt;/nowiki&gt;}} {{ttb|using}} {{spar|attribute-namespace}} {{ttb|:}} {{spar|attribute-list}} {{ttb|&lt;nowiki&gt;]]&lt;/nowiki&gt;}}
}}
{{sdsc end}}
where {{spar|attribute-list}} is a comma-separated sequence of zero or more {{spar|attribute}}s (possibly ending with an ellipsis {{ttb|...}} indicating a {{rlp|parameter pack|pack expansion}}) 
{{sdsc begin}}
{{sdsc|{{spar|identifier}} }}
{{sdsc|{{spar|attribute-namespace}} {{ttb|::}} {{spar|identifier}} }}
{{sdsc|{{spar|identifier}} {{ttb|(}} {{spar|argument-list}} {{ttb|)}} }}
{{sdsc|{{spar|attribute-namespace}} {{ttb|::}} {{spar|identifier}} {{ttb|(}} {{spar|argument-list}} {{ttb|)}} }}
{{sdsc end}}
@1@ simple attribute, such as {{c|[[noreturn]]}}
@2@ attribute with a namespace, such as {{c|[[gnu::unused]]}}
@3@ attribute with arguments, such as {{c|[[deprecated(&quot;because&quot;)]]}}
@4@ attribute with both a namespace and an argument list

{{rev begin}}
{{rev|since=c++17|
If {{tt|using: namespace}} appears in the beginning of an attribute list, no other attributes in the attribute list can specify a namespace: the namespace specified in a using applies to them all:
{{source|1=
[[using CC: opt(1), debug]] // same as [[CC::opt(1), CC::debug]]
[[using CC: CC::opt(1)]] // error: cannot combine using and scoped attribute
}}
}}
{{rev end}}

===Explanation===

Attributes provide the unified standard syntax for implementation-defined language extensions, such as the GNU and IBM language extensions {{tt|__attribute__((...))}}, Microsoft extension {{tt|__declspec()}}, etc.

An attribute can be used almost everywhere in the C++ program, and can be applied to almost everything: to types, to variables, to functions, to names, to code blocks, to entire translation units, although each particular attribute is only valid where it is permitted by the implementation: {{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;likely]]}} could be an attribute that can only be used with an {{c|if}}, and not with a class declaration. {{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;omp::parallel()]]}} could be an attribute that applies to a code block or to a {{c|for}} loop, but not to the type {{tt|int}}, etc. (note these two attributes are fictional examples, see below for the standard and some non-standard attributes)

In declarations, attributes may appear both before and directly after the name of the entity that is declared, in which case they are combined. In most other situations, attributes apply to the directly preceding entity.

[[cpp/language/alignas|alignas_specifier]] is a part of the attribute specifier sequence, although it has different syntax. It may appear where the {{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;...]]}} attributes appear and may mix with them (provided it is used where {{c|alignas}} is permitted)

Two consecutive left square bracket tokens ({{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;}}) may only appear when introducing an attribute-specifier or {{mark unreviewed dr|CWG|2079}} inside an attribute argument.

{{source | 1=
void f() {
  int y[3];
  y[&lt;noinclude&gt;&lt;/noinclude&gt;[] { return 0; }()] = 1;    // error
  int i [[cats::meow([[]])]]; // OK
}
}}

Besides the standard attributes listed below, implementations may support arbitrary non-standard attributes with implementation-defined behavior. {{rev inl|since=c++17|All attributes unknown to an implementation are ignored without causing an error.}}

===Standard attributes===
Only the following attributes are defined by the C++ standard.

{{dsc begin}}
{{dsc|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;noreturn]]}} | Indicates that the function does not return. &lt;br&gt; This attribute applies to function declarations only. The behavior is undefined if the function with this attribute actually returns. &lt;br&gt;The following standard functions have this attribute: {{lc|std::_Exit}}, {{lc|std::abort}}, {{lc|std::exit}}, {{lc|std::quick_exit}}, {{lc|std::unexpected}}, {{lc|std::terminate}}, {{lc|std::rethrow_exception}}, {{lc|std::throw_with_nested}}, {{lc|std::nested_exception::rethrow_nested}} }}

{{dsc|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;carries_dependency]]}} | Indicates that dependency chain in release-consume {{lc|std::memory_order}} propagates in and out of the function, which allows the compiler to skip unnecessary memory fence instructions.&lt;br&gt;This attribute may appear in two situations:&lt;br&gt;
1) it may apply to the parameter declarations of a function or lambda-expressions, in which case it indicates that initialization of the parameter carries dependency into lvalue-to-rvalue conversion of that object.&lt;br&gt;
2) It may apply to the function declaration as a whole, in which case it indicates that the return value carries dependency to the evaluation of the function call expression.

This attribute must appear on the first declaration of a function or one of its parameters in any translation unit. If it is not used on the first declaration of a function or one of its parameters in another translation unit, the program is ill-formed; no diagnostic required.

See  {{lc|std::kill_dependency}}  for example usage
}}

{{dsc|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;deprecated]]}}{{mark c++14}}&lt;br&gt;{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;deprecated(&quot;reason&quot;)]]}}{{mark c++14}} | Indicates that the use of the name or entity declared with this attribute is allowed, but discouraged for some {{spar|reason}}. This attribute is allowed in declarations of classes, typedef-names, variables, non-static data members, functions, enumerations, and template specializations. A name declared non-deprecated may be redeclared deprecated. A name declared deprecated cannot be un-deprecated by redeclaring it without this attribute.}}

{{dsc|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;fallthrough]]}}{{mark c++17}}| Appears in a {{rlp|switch}} statement on a line of its own (technically as an attribute of a {{rlp|statements#Expression_statements|null statement}}), immediately before a case label. Indicates that the fall through from the previous case label is intentional and should not be diagnosed by a compiler that warns on fallthrough.}}

{{dsc|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;nodiscard]]}}{{mark c++17}}| Appears in a function declaration, enumeration declaration, or class declaration. If a function declared nodiscard or a function returning an enumeration or class declared nodiscard by value is called from a {{rlp|expressions#Discarded-value_expressions|discarded-value expression}} other than a cast to {{tt|void}}, the compiler is encouraged to issue a warning. }}

{{dsc|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;maybe_unused]]}}{{mark c++17}}| Appears in the declaration of a class, a typedef­, a variable, a non­static data member, a function, an enumeration, or an enumerator. If the compiler issues warnings on unused entities, that warning is suppressed for any entity declared maybe_unused.}}

{{dsc|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;optimize_for_synchronized]]}}{{mark since tm ts}}| Appears on a declarator of a function declaration, which must be the first declaration of the function. indicates that the function definition should be optimized for invocation from a {{rlp|transactional memory|synchronized statement}}. In particular, it avoids serializing synchronized blocks that make a call to a function that is transaction-safe for the majority of calls, but not for all calls.}}
{{dsc end}}

{{todo|give each attribute its own page}}

===Example===
{{example | code=
#include &lt;cassert&gt;
[[ noreturn ]] void f() {
  throw &quot;error&quot;;
  // OK
}

[[ noreturn ]] void q(int i) {
  // behavior is undefined if called with an argument &lt;= 0
  if (i &gt; 0) {
    throw &quot;positive&quot;;
  }
}

void f(int n) {
  void g(), h(), i();
  switch (n) {
    case 1:
    case 2:
      g();
     [[fallthrough]];
    case 3: // no warning on fallthrough
      h();
    case 4: // compiler may warn on fallthrough
      i();
      [[fallthrough]]; // ill­formed, not before a case label
  }
}

struct [[nodiscard]] error_info { };
error_info enable_missile_safety_mode();
void launch_missiles();
void test_missiles() {
   enable_missile_safety_mode(); // compiler may warn on discarding a nodiscard value
   launch_missiles();
}
error_info&amp; foo();
void f1() {
    foo(); // nodiscard type is not returned by value, no warning
} 


[[maybe_unused]] void f([[maybe_unused]] bool thing1,
                        [[maybe_unused]] bool thing2)
{
   [[maybe_unused]] bool b = thing1 &amp;&amp; thing2;
   assert(b); // in release mode, assert is compiled out, and b is unused
              // no warning because it is declared [[maybe_unused]]
} // parameters thing1 and thing2 are not used, no warning

 | output=
}}

===External links===
[http://clang.llvm.org/docs/LanguageExtensions.html#non-standard-c-11-attributes C++ attributes supported by Clang]

===See also===
{{dsc begin}}
{{dsc see c | c/language/_Noreturn}}
{{dsc end}}

[[de:cpp/language/attributes]]
[[es:cpp/language/attributes]]
[[fr:cpp/language/attributes]]
[[it:cpp/language/attributes]]
[[ja:cpp/language/attributes]]
[[pt:cpp/language/attributes]]
[[ru:cpp/language/attributes]]
[[zh:cpp/language/attributes]]</text>
      <sha1>9mozjlzw1yurihsiwzrj52gekw4pvx4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/auto</title>
    <ns>0</ns>
    <id>5060</id>
    <revision>
      <id>91834</id>
      <parentid>90598</parentid>
      <timestamp>2017-03-31T19:59:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="6239">{{title|auto specifier {{mark since c++11}}}}
{{cpp/language/declarations/navbar}}

For variables, specifies that the type of the variable that is being declared will be automatically deduced from its initializer. For functions, specifies that the return type is a trailing return type {{rev inl|since=c++14|or will be deduced from its return statements}}. {{rev inl|since=c++17|for non-type template parameters, specifies that the type will be deduced from the argument}}

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 | {{c|auto}} {{spar|variable}} {{spar|initializer}} | notes={{mark since c++11}} }}
{{sdsc | num=2 | {{c|auto}} {{spar|function}} -&gt; {{spar|return type}} | notes={{mark since c++11}} }}
{{sdsc | num=3 | {{c|auto}} {{spar|function}} | notes={{mark since c++14}} }}
{{sdsc | num=4 | {{c|decltype(auto)}} {{spar|variable}} {{spar|initializer}} | notes={{mark since c++14}} }}
{{sdsc | num=5 | {{c|decltype(auto)}} {{spar|function}} | notes={{mark since c++14}} }}
{{sdsc | num=6 | {{c|auto}} {{ttb|::}} | notes={{mark since concepts_ts}} }}
{{sdsc | num=7 | {{spar|cv}}{{mark optional}} {{c|auto}} {{spar|ref}}{{mark optional}} {{spar|parameter}} | notes={{mark since c++14}} }}
{{sdsc | num=8 | {{ttb|template}} {{ttb|&lt;}} {{c|auto}} {{spar|Parameter}} {{ttb|&gt;}} | notes={{mark since c++17}} }}
{{sdsc | num=9 | {{spar|cv}}{{mark optional}} {{c|auto}} {{spar|ref}}{{mark optional}} {{ttb|[}} {{spar|identifier-list}} {{ttb|]}} {{spar|initializer}} {{ttb|;}} | notes={{mark since c++17}} }}
{{sdsc end}}

===Explanation===
@1@ When declaring variables in block scope, in namespace scope, in initialization statements of for loops, etc., the keyword {{c|auto}} may be used as the type specifier.
@@Once the type of the initializer has been determined, the compiler determines the type that will replace the keyword {{c|auto}} using the rules for {{rlp|template argument deduction}} from a function call (see {{rlp|template argument deduction#Other contexts}} for details). The keyword {{c|auto}} may be accompanied by modifiers, such as {{c|const}} or {{c|&amp;}}, which will participate in the type deduction. For example, given {{c|1=const auto&amp; i = expr;}}, the type of {{tt|i}} is exactly the type of the argument {{tt|u}} in an imaginary template {{c|template&lt;class U&gt; void f(const U&amp; u)}} if the function call {{c|f(expr)}} was compiled. Therefore, {{c|auto&amp;&amp;}} may be deduced either as an lvalue reference or rvalue reference according to the initializer, which is used in range-based for loop.
@@If {{c|auto}} is used to declare multiple variables, the deduced types must match. For example, the declaration {{c|auto i {{=}} 0, d {{=}} 0.0;}} is ill-formed, while the declaration {{c|auto i {{=}} 0, *p {{=}} &amp;i;}} is well-formed and the {{c|auto}} is deduced as {{c|int}}.

@2@ In a {{rlp|function|function declaration}} that uses the trailing return type syntax, the keyword {{c|auto}} does not perform automatic type detection. It only serves as a part of the syntax.

@3@ In a {{rlp|function|function declaration}} that does not use the trailing return type syntax, the keyword {{c|auto}} indicates that the return type will be deduced from the operand of its {{rlp|return|return statement}} using the rules for {{rlp|template argument deduction#Other contexts|template argument deduction}}.

@4@ If the declared type of the variable is {{c|decltype(auto)}}, the keyword {{c|auto}} is replaced with the expression (or expression list) of its initializer, and the actual type is deduced using the rules for {{rlp|decltype}}.

@5@ If the return type of the function is declared {{c|decltype(auto)}}, the keyword {{c|auto}} is replaced with the operand of its return statement, and the actual return type is deduced using the rules for {{rlp|decltype}}.

@6@ A nested-name-specifier of the form {{c|auto::}} is a placeholder that is replaced by a class or enumeration type following the rules for {{rlp|constraints|constrained type}} placeholder deduction.

@7@ {{rev inl|since=c++14|A parameter declaration in a [[cpp/language/lambda|lambda expression]].}}
{{rev inl|since=concepts_ts|A [[cpp/language/function#Parameter_list|function parameter]] declaration.}}

@8@ If a {{rlp|template_parameters|template parameter}} is declared {{tt|auto}}, its type is deduced from the corresponding argument.

@9@ A {{rlp|declarations#Structured_binding_declaration|structured binding declaration}}

===Notes===
Until C++11, {{c|auto}} had the semantic of a {{rlp|storage_duration|storage duration specifier}}.

Mixing {{tt|auto}} variables and functions in one declaration, as in {{c|auto f() -&gt; int, i {{=}} 0;}} is not allowed. {{mark unreviewed dr|CWG|1265}}

===Example===
{{example|The example showing output using one of the implementations where typeinfo::name prints full type names; filter through c++filt -t if using gcc or similar.
  |code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;typeinfo&gt;

template&lt;class T, class U&gt;
auto add(T t, U u) -&gt; decltype(t + u) // the return type is the type of operator+(T, U)
{
    return t + u;
}

auto get_fun(int arg) -&gt; double (*)(double) // same as: double (*get_fun(int))(double)
{
    switch (arg)
    {
        case 1: return std::fabs;
        case 2: return std::sin;
        default: return std::cos;
    }
}

int main()
{
    auto a = 1 + 2;
    std::cout &lt;&lt; &quot;type of a: &quot; &lt;&lt; typeid(a).name() &lt;&lt; '\n';
    auto b = add(1, 1.2);
    std::cout &lt;&lt; &quot;type of b: &quot; &lt;&lt; typeid(b).name() &lt;&lt; '\n';
    auto c = {1, 2};
    std::cout &lt;&lt; &quot;type of c: &quot; &lt;&lt; typeid(c).name() &lt;&lt; '\n';

    auto my_lambda = [](int x) { return x + 3; };
    std::cout &lt;&lt; &quot;my_lambda: &quot; &lt;&lt; my_lambda(5) &lt;&lt; '\n';

    auto my_fun = get_fun(2);
    std::cout &lt;&lt; &quot;type of my_fun: &quot; &lt;&lt; typeid(my_fun).name() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;my_fun: &quot; &lt;&lt; my_fun(3) &lt;&lt; '\n';

//  auto int x; // error as of C++11: &quot;auto&quot; is no longer a storage-class specifier
}
 |p=true
 |output=
type of a: int
type of b: double
type of c: std::initializer_list&lt;int&gt;
my_lambda: 8
type of my_fun: double (*)(double)
my_fun: 0.14112
}}

[[de:cpp/language/auto]]
[[es:cpp/language/auto]]
[[fr:cpp/language/auto]]
[[it:cpp/language/auto]]
[[ja:cpp/language/auto]]
[[pt:cpp/language/auto]]
[[ru:cpp/language/auto]]
[[zh:cpp/language/auto]]</text>
      <sha1>7yyr1ou2ruc7pucj7kk0mg83di8cxv1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/basic concepts</title>
    <ns>0</ns>
    <id>13040</id>
    <revision>
      <id>88390</id>
      <parentid>85874</parentid>
      <timestamp>2016-11-17T14:02:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note that macros are not entities (GB-34)</comment>
      <text xml:space="preserve" bytes="2365">{{title|Basic concepts}}
{{cpp/language/basics/navbar}}

This section provides definitions for the specific terminology and the concepts used when describing the C++ programming language.

A C++ program is a sequence of text files (typically header and source files) that contain {{rlp|declarations}}. They undergo {{rlp|translation phases|translation}} to become an executable program, which is executed when the OS calls its {{rlp|main function}}.

Certain words in a C++ program have special meaning, and these are known as [[cpp/keyword|keywords]]. Others can be used as {{rlp|identifiers}}. [[cpp/comment|Comments]] are ignored during translation. Certain characters in the program have to be represented with {{rlp|escape|escape sequences}}.

The ''entities'' of a C++ program are values, {{rlp|objects}}, {{rlp|reference}}s, {{rlp|functions}}, {{rlp|enum|enumerators}}, {{rlp|type}}s, class members, {{rlp|templates}}, {{rlp|template specialization}}s, {{rlp|namespace}}s, {{rlp|parameter pack}}s, and the {{c|this}} pointer. Preprocessor [[cpp/preprocessor/replace|macros]] are not C++ entities.

Entities are introduced by {{rlp|declarations}}, which associate them with {{rlp|name}}s and define their properties. The declarations that define all properties required to use an entity are {{rlp|definition}}s. A program must contain only one definition of any non-inline function or variable that is {{rlp|definition|odr-used}}. 

Definitions of functions include sequences of {{rlp|statements}}, some of which include {{rlp|expressions}}, which specify the computations to be performed by the program.

Names encountered in a program are associated with the declarations that introduced them using {{rlp|lookup|name lookup}}. Each name is only valid within a part of the program called its {{rlp|scope}}. Some names have {{rlp|storage duration|linkage}} which makes them refer to the same entities when they appear in different scopes or translation units.

Each object, reference, function, expression in C++ is associated with a {{rlp|type}}, which may be {{rlp|types|fundamental}}, compound, or {{rlp|classes|user-defined}}, complete or {{rlp|incomplete type|incomplete}}, etc.

Named objects and named references to objects are known as ''variables''.

===See also===
{{dsc begin}}
{{dsc see c | c/language/basic_concepts | Basic concepts}}
{{dsc end}}</text>
      <sha1>mse0rt48ngo282z4d56v1jcm7vw9yqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/basics</title>
    <ns>0</ns>
    <id>9654</id>
    <redirect title="cpp/language/basic concepts" />
    <revision>
      <id>68983</id>
      <parentid>68824</parentid>
      <timestamp>2014-03-23T15:53:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>orphan page, all contents moved and split between different language pages</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[cpp/language/basic_concepts]]</text>
      <sha1>tb88b0jayxupnd00rrax28s241r65m3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/bit field</title>
    <ns>0</ns>
    <id>9905</id>
    <revision>
      <id>91984</id>
      <parentid>89795</parentid>
      <timestamp>2017-04-01T05:37:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="5042">{{title|Bit field}}
{{cpp/language/classes/navbar}}
Declares a class data member with explicit size, in bits. Adjacent bit field members may be packed to share and straddle the individual bytes.

A bit field declaration is a {{rlp|data_members|class data member declaration}} which uses the following declarator:

{{sdsc begin}}
{{sdsc|1=
{{spar|identifier}}{{mark optional}} {{spar|attr}}{{mark optional}} {{ttb|:}} {{spar|size}}
}}
{{sdsc end}}

The ''type'' of the bit field is introduced by the {{spar|decl-specifier-seq}} of the {{rlp|declarations|declaration syntax}}.

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|identifier}} | the name of the bit field that is being declared. The name is optional: nameless bitfields introduce the specified number of bits of padding}}
{{par | {{spar|size}} | an integral constant expression with a value greater or equal to zero. When greater than zero, this is the number of bits that this bit field will occupy. The value zero is only allowed for nameless bitfields and has special meaning: it specifies that the next bit field in the class definition will begin at an allocation unit's boundary.}}
{{par end}}

===Explanation===
The number of bits in a bit field sets the limit to the range of values it can hold:

{{example|code=#include &lt;iostream&gt;
struct S {
 // three-bit unsigned field,
 // allowed values are 0...7
 unsigned int b : 3;
};
int main()
{
    S s = {7};
    ++s.b; // unsigned overflow (guaranteed wrap-around)
    std::cout &lt;&lt; s.b &lt;&lt; '\n'; // output: 0
}
}}

Multiple adjacent bit fields are usually packed together (although this behavior is implementation-defined):

{{example|code=#include &lt;iostream&gt;
struct S {
    // will usually occupy 2 bytes:
    // 3 bits: value of b1
    // 2 bits: unused
    // 6 bits: value of b2
    // 2 bits: value of b3
    // 3 bits: unused
    unsigned char b1 : 3, : 2, b2 : 6, b3 : 2;
};
int main()
{
    std::cout &lt;&lt; sizeof(S) &lt;&lt; '\n'; // usually prints 2
}
}}

The special unnamed bit field of size zero can be forced to break up padding. It specifies that the next bit field begins at the beginning of its allocation unit:

{{example|code=#include &lt;iostream&gt;
struct S {
    // will usually occupy 2 bytes:
    // 3 bits: value of b1
    // 5 bits: unused
    // 6 bits: value of b2
    // 2 bits: value of b3
    unsigned char b1 : 3;
    unsigned char :0; // start a new byte
    unsigned char b2 : 6;
    unsigned char b3 : 2;
};
int main()
{
    std::cout &lt;&lt; sizeof(S) &lt;&lt; '\n'; // usually prints 2
}
}}

If the specified size of the bit field is greater than the size of its type, the value is limited by the type: a {{c|std::uint8_t b : 1000;}} would still hold values between 0 and 255. the extra bits become unused padding.

Because bit fields do not necessarily begin at the beginning of a byte, address of a bit field cannot be taken. Pointers and non-const references to bit fields are not possible. When {{rlp|reference_initialization|initializing a const reference}} from a bit field, a temporary is created (its type is the type of the bit field), copy initialized with the value of the bit field, and the reference is bound to that temporary.

The type of a bit field can only be integral or enumeration type.

A bit field cannot be a {{rlp|static|static data member}}.

There are no bit field {{rlp|value category|prvalues}}: lvalue-to-rvalue conversion always produces an object of the underlying type of the bit field.

===Notes===
There are no {{rlp|data_members#Member_initialization|default member initializers}} for bit fields: {{c|int b : 1 {{=}} 0;}} and {{c|int b : 1 {0} }} are ill-formed. {{mark unreviewed dr|CWG}}&lt;!-- CWG 1341 which is likely going to become a paper to EWG --&gt;

The following properties of bit fields are ''implementation-defined''
* The value that results from assigning or initializing a signed bit field with a value out of range, or from incrementing a signed bit field past its range.
* Everything about the actual allocation details of bit fields within the class object
:* For example, on some platforms, bit fields don't straddle bytes, on others they do
:* Also, on some platforms, bit fields are packed left-to-right, on others right-to-left
{{rev begin}}
{{rev|until=c++14|
* Whether {{c|char}}, {{c|short}}, {{c|int}}, {{c|long}}, and {{c|long long}} bit fields that aren't explicitly {{c|signed}} or {{c|unsigned}} are signed or unsigned.
:* For example, {{c|int b:3;}} may have the range of values {{c|0..7}} or {{c|-4..3}}.
}}
{{rev end}}

In the C programming language, the width of a bit field cannot exceed the width of the underlying type.

===References===
{{ref std c++11}}
{{ref std | section=9.6 | title=Bit-fields | id=class.bit}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=9.6 | title=Bit-fields | id=class.bit}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/bit field | Bit fields}}
{{dsc inc | cpp/utility/dsc bitset}}
{{dsc end}}</text>
      <sha1>ivhk1yw1mnz0rpeachvibogta1p9cew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/bitfield</title>
    <ns>0</ns>
    <id>15661</id>
    <redirect title="cpp/language/bit field" />
    <revision>
      <id>87091</id>
      <timestamp>2016-07-26T03:11:33Z</timestamp>
      <contributor>
        <username>Jlebar</username>
        <id>3201</id>
      </contributor>
      <comment>bitfield redirects to bit_field</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/language/bit_field]]</text>
      <sha1>e5xw45ukd2z6kvogbpyzyzncwdf06yh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/bool literal</title>
    <ns>0</ns>
    <id>5204</id>
    <revision>
      <id>78408</id>
      <parentid>78405</parentid>
      <timestamp>2015-05-21T13:14:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>okay, but there should be at least a link to implicit conversions</comment>
      <text xml:space="preserve" bytes="1144">{{title|Boolean literals}}
{{cpp/language/expressions/navbar}}
===Syntax===
{{sdsc begin}}
{{sdsc | num = 1 | {{ttb|true}} }}
{{sdsc | num = 2 | {{ttb|false}} }}
{{sdsc end}}
===Explanation===
The Boolean literals are the keywords {{tt|true}} and {{tt|false}}. They are {{rlp|value_category|prvalues}} of type {{rlp|types#Boolean_type|bool}}.

===Notes===
See {{rlp|implicit_cast#Integral_conversions|Integral conversions}} for implicit conversions from {{tt|bool}} to other types and {{rlp|implicit_cast#Boolean conversions|boolean conversions}} for the implicit conversions from other types to {{tt|bool}}.

===Example===
{{example|code=
#include &lt;iostream&gt;

int main()
{
  std::cout &lt;&lt; std::boolalpha
            &lt;&lt; true &lt;&lt; '\n'
            &lt;&lt; false &lt;&lt; '\n'
            &lt;&lt; std::noboolalpha
            &lt;&lt; true &lt;&lt; '\n'
            &lt;&lt; false &lt;&lt; '\n';
}
|output=
true
false
1
0
}}

[[de:cpp/language/bool literal]]
[[es:cpp/language/bool literal]]
[[fr:cpp/language/bool literal]]
[[it:cpp/language/bool literal]]
[[ja:cpp/language/bool literal]]
[[pt:cpp/language/bool literal]]
[[ru:cpp/language/bool literal]]
[[zh:cpp/language/bool literal]]</text>
      <sha1>my0sy6djaa4g8951wihbg49pgeo2wgb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/break</title>
    <ns>0</ns>
    <id>688</id>
    <revision>
      <id>81914</id>
      <parentid>74755</parentid>
      <timestamp>2015-11-19T09:30:27Z</timestamp>
      <contributor>
        <ip>67.183.243.24</ip>
      </contributor>
      <comment>s/exist/exit/</comment>
      <text xml:space="preserve" bytes="1986">{{title|break statement}}
{{cpp/language/statements/navbar}}
Causes the enclosing {{rlp|for}}, {{rlp|range-for}}, {{rlp|while}} or {{rlp|do|do-while}} loop or {{rlp|switch| switch statement}} to terminate.

Used when it is otherwise awkward to terminate the loop using the condition expression and conditional statements.

===Syntax===

{{sdsc begin}}
{{sdsc | {{spar|attr}}{{mark optional}} {{ttb|break}} {{ttb|;}} }}
{{sdsc end}}

===Explanation===

After this statement the control is transferred to the statement immediately following the enclosing loop or switch. As with any block exit, all automatic storage objects declared in enclosing compound statement or in the {{spar|condition}} of a loop/switch are destroyed, in reverse order of construction, before the execution of the first line following the enclosing loop.

===Keywords===

{{ltt|cpp/keyword/break}}

===Notes===
A break statement cannot be used to break out of multiple nested loops. The {{rlp|goto|goto statement}} may be used for this purpose.

===Example===
{{example 
 | code=
#include &lt;iostream&gt;

int main()
{
    int i = 2;
    switch (i) {
        case 1: std::cout &lt;&lt; &quot;1&quot;;
        case 2: std::cout &lt;&lt; &quot;2&quot;;   //execution starts at this case label
        case 3: std::cout &lt;&lt; &quot;3&quot;;
        case 4:
        case 5: std::cout &lt;&lt; &quot;45&quot;;
                break;              //execution of subsequent statements is terminated
        case 6: std::cout &lt;&lt; &quot;6&quot;;
    }

    std::cout &lt;&lt; '\n';
 
    for (int j = 0; j &lt; 2; j++) {
        for (int k = 0; k &lt; 5; k++) {         //only this loop is affected by break
            if (k == 2) break;
            std::cout &lt;&lt; j &lt;&lt; k &lt;&lt; &quot; &quot;;
        }
    }
}
 | output=
2345
00 01 10 11
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/break}}
{{dsc end}}

[[de:cpp/language/break]]
[[es:cpp/language/break]]
[[fr:cpp/language/break]]
[[it:cpp/language/break]]
[[ja:cpp/language/break]]
[[pt:cpp/language/break]]
[[ru:cpp/language/break]]
[[zh:cpp/language/break]]</text>
      <sha1>giopuqrnrep40b6uasmdgfvre7sokql</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/cast operator</title>
    <ns>0</ns>
    <id>13115</id>
    <revision>
      <id>88831</id>
      <parentid>88830</parentid>
      <timestamp>2016-12-14T18:17:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="6814">{{title|user-defined conversion}}
{{cpp/language/expressions/navbar}}
Enables {{rlp|implicit_cast|implicit conversion}} or {{rlp|explicit_cast|explicit conversion}} from a {{rlp|class|class type}} to another type.

===Syntax===
Conversion function is declared like a {{rlp|member functions|non-static member function}} or member {{rlp|function template}} with no explicit return type and with the name of the form:
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|operator}} {{spar|conversion-type-id}} }}
{{sdsc | num=2 | notes={{mark since c++11}} | {{ttb|explicit}} {{ttb|operator}} {{spar|conversion-type-id}} }}
{{sdsc end}}
@1@ Declares a user-defined conversion function that participates in all {{rlp|implicit_cast|implicit}} and {{rlp|explicit cast|explicit conversions}}
@2@ Declares a user-defined conversion function that participates in {{rlp|direct_initialization|direct-initialization}} and {{rlp|explicit cast|explicit conversions}} only.

{{spar|conversion-type-id}} is a {{rlp|type#Type_naming|type-id}} except that function and array operators {{ttb|[]}} or {{ttb|()}} are not allowed in its declarator (thus conversion to types such as pointer to array requires a type alias/typedef or an identity template: see below). Regardless of typedef, {{spar|conversion-type-id}} cannot represent an array or a function type.

Although the return type is not allowed in the declaration of a user-defined conversion function, the {{spar|decl-specifier-seq}} of {{rlp|declarations#Specifiers|the declaration grammar}} may be present and may include any specifier other than {{spar|type-specifier}} or the keyword static, In particular, besides {{tt|explicit}}, the specifiers {{rlp|inline}}, {{rlp|virtual}}, {{rlp|constexpr}}, and {{rlp|friend}} are also allowed (note that {{tt|friend}} requires a qualified name: {{tt|friend A::operator B();}}).

When such member function is declared in class X, it performs conversion from X to 
{{spar|conversion-type-id}}:
{{source|1=
struct X {
    //implicit conversion
    operator int() const { return 7; }

    // explicit conversion
    explicit operator int*() const { return nullptr; }

//   Error: array operator not allowed in conversion-type-id
//   operator int(*)[3]() const { return nullptr; }
    using arr_t = int[3];
    operator arr_t*() const { return nullptr; } // OK if done through typedef
//  operator arr_t () const; // Error: conversion to array not allowed in any case
};

int main()
{
    X x;

    int n = static_cast&lt;int&gt;(x);   // OK: sets n to 7
    int m = x;                     // OK: sets m to 7

    int* p = static_cast&lt;int*&gt;(x);  // OK: sets p to null
//  int* q = x; // Error: no implicit conversion

    int (*pa)[3] = x;  // OK
}
}}

===Explanation===
User-defined conversion function is invoked on the second stage of the {{rlp|implicit_cast|implicit conversion}}, which consists of zero or one {{rlp|converting constructor}} or zero or one user-defined conversion function.

If both conversion functions and converting constructors can be used to perform some user-defined conversion, the conversion functions and constructors are both considered by {{rlp|overload resolution}} in {{rlp|copy_initialization|copy-initialization}} and {{rlp|reference_initialization|reference-initialization}} contexts, but only the constructors are considered in {{rlp|direct_initialization|direct-initialization}} contexts.
{{source|1=
struct To {
    To() = default;
    To(const struct From&amp;) {} // converting constructor
};

struct From {
    operator To() const {return To();} // conversion function
};

int main()
{
    From f;
    To t1(f); // direct-initialization: calls the constructor
// (note, if converting constructor is not available, implicit copy constructor
//  will be selected, and conversion function will be called to prepare its argument)
    To t2 = f; // copy-initialization: ambiguous
// (note, if conversion function is from a non-const type, e.g.
//  From::operator To();, it will be selected instead of the ctor in this case)
    To t3 = static_cast&lt;To&gt;(f); // direct-initialization: calls the constructor
    const To&amp; r = f; // reference-initialization: ambiguous
}
}}

Conversion function to its own (possibly cv-qualified) class (or to a reference to it), to the base of its own class (or to a reference to it), and to the type {{c|void}} can be defined, but can not be executed as part of the conversion sequence, except, in some cases, through {{rlp|virtual}} dispatch:
{{source|1=
struct D;
struct B {
    virtual operator D() = 0;
};
struct D : B
{
    operator D() override { return D(); }
};

int main()
{
    D obj;
    D obj2 = obj; // does not call D::operator D()
    B&amp; br = obj;
    D obj3 = br; // calls D::operator D() through virtual dispatch
}
}}

It can also be called using member function call syntax:
{{source|1=
struct B {};
struct X : B {
    operator B&amp;() { return *this; };
};

int main()
{
    X x;
    B&amp; b1 = x;                  // does not call X::operatorB&amp;()
    B&amp; b2 = static_cast&lt;B&amp;&gt;(x); // does not call X::operatorB&amp;
    B&amp; b3 = x.operator B&amp;();    // calls X::operator&amp;
}
}}

When making an explicit call to the conversion function, the type-id is greedy: it is the longest possible sequence of tokens that is a valid type id (including attributes, if any):
{{source|
&amp; x.operator int * a; // parsed as &amp; (x.operator int*) a
                      // not as &amp; (x.operator int) * a
}}

{{rev begin}}
{{rev|since=c++14|
The placeholder {{rlp|auto}} can be used in {{spar|conversion-type-id}}, indicating a {{rlp|function#Return_type_deduction|deduced return type}}:
{{source|1=
struct X {
    operator int(); // OK
    operator auto() -&gt; short;  // error: trailing return type not part of syntax
    operator auto() const { return 10; } // OK: deduced return type
};
}} 
Note: a {{rlp|member_template#Conversion function templates|conversion function template}} is not allowed to have a deduced return type.
}}
{{rev end}}

Conversion functions can be inherited and can be {{rlp|virtual}}, but cannot be {{rlp|static}}. A conversion function in the derived class does not hide a conversion function in the base class unless they are converting to the same type.

Conversion function can be a template member function, for example, [[cpp/memory/auto_ptr/operator_auto_ptr|std::auto_ptr&lt;T&gt;::operator auto_ptr&lt;Y&gt;]]. See {{rlp|member_template#Conversion function templates|member template}} and {{rlp|template_argument_deduction#conversion_function_template|template argument deduction}} for applicable special rules.

[[de:cpp/language/cast_operator]]
[[es:cpp/language/cast_operator]]
[[fr:cpp/language/cast_operator]]
[[it:cpp/language/cast_operator]]
[[ja:cpp/language/cast_operator]]
[[pt:cpp/language/cast_operator]]
[[ru:cpp/language/cast_operator]]
[[zh:cpp/language/cast_operator]]</text>
      <sha1>i6wcyundoqogl3ovxe5fk7vdqfl7ccd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/character literal</title>
    <ns>0</ns>
    <id>5083</id>
    <revision>
      <id>88254</id>
      <parentid>88252</parentid>
      <timestamp>2016-11-15T14:00:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>&quot;integer character constants&quot; weren't defined here</comment>
      <text xml:space="preserve" bytes="3407">{{title|character literal}}
{{cpp/language/expressions/navbar}}
===Syntax===
{{sdsc begin}}
{{sdsc | num = 1 | {{ttb|'}} {{spar|c-char}} {{ttb|'}} }}
{{sdsc | num = 2 | notes={{mark since c++17}} | {{ttb|u8}} {{ttb|'}} {{spar|c-char}} {{ttb|'}} }}
{{sdsc | num = 3 | notes={{mark since c++11}} | {{ttb|u}} {{ttb|'}} {{spar|c-char}} {{ttb|'}} }}
{{sdsc | num = 4 | notes={{mark since c++11}} | {{ttb|U}} {{ttb|'}} {{spar|c-char}} {{ttb|'}} }}
{{sdsc | num = 5 | {{ttb|L}} {{ttb|'}} {{spar|c-char}} {{ttb|'}} }}
{{sdsc | num = 6 | {{ttb|'}} {{spar|c-char-sequence}} {{ttb|'}} }}
{{sdsc end}}
where
* {{spar|c-char}} is either
:* a character from the basic source character set minus single-quote ({{ttb|'}}), backslash ({{ttb|\}}), or the newline character, 
:* escape sequence, as defined in [[cpp/language/escape|escape sequences]]
:* universal character name, as defined in [[cpp/language/escape|escape sequences]]
* {{spar|c-char-sequence}} is a sequence of two or more {{spar|c-char}}s.

@1@ narrow character literal or ordinary character literal, e.g. {{c|'a'}} or {{c|'\n'}} or {{c|'\13'}}. Such literal has type {{c|char}} and the value equal to the representation of {{spar|c-char}} in the execution character set. If {{spar|c-char}} is not representable as a single byte in the execution character set, the literal has type {{c|int}} and implementation-defined value
@2@ UTF-8 character literal, e.g. {{c|u8'a'}}. Such literal has type {{c|char}} and the value equal to ISO 10646 code point value of {{spar|c-char}}, provided that the code point value is representable with a single UTF-8 code unit. If {{spar|c-char}} is not in Basic Latin or C0 Controls Unicode block, the program is ill-formed.
@3@ UCS-2 character literal, e.g. {{c|u'貓'}}, but not {{c|u'🍌'}} ({{c|u'\U0001f34c'}}). Such literal has type {{c|char16_t}} and the value equal to the value of {{spar|c-char}} in Unicode, if it is a part of the basic multilingual plane. If {{spar|c-char}} is not part of the BMP, the program is ill-formed.
@4@ UCS-4 character literal, e.g. {{c|U'貓'}} or {{c|U'🍌'}}. Such literal has type {{c|char32_t}} and the value equal to the value of {{spar|c-char}} in Unicode.
@5@ wide character literal, e.g. {{c|L'β'}} or {{c|L'貓'}}. Such literal has type {{c|wchar_t}} and the value equal to the value of {{spar|c-char}} in the execution wide character set. If {{spar|c-char}} is not representable in the execution character set (e.g. a non-BMP value on Windows where wchar_t is 16-bit), the value of the literal is implementation-defined.
@6@ Multicharacter literal, e.g. {{c|'AB'}}, has type {{c|int}} and implementation-defined value.

===Notes===
Many implementations of multicharacter literals use the values of each char in the literal to initialize successive bytes of the resulting integer, in big-endian order, e.g. the value of {{c|'\1\2\3\4'}} is {{c|0x01020304}}.

In C, character constants such as {{c|'a'}} or {{c|'\n'}} have type {{c|int}}, rather than {{c|char}}.

===See also===
{{dsc begin}}
{{dsc see c | c/language/character_constant | character constant}}
{{dsc end}}

[[de:cpp/language/character literal]]
[[es:cpp/language/character literal]]
[[fr:cpp/language/character literal]]
[[it:cpp/language/character literal]]
[[ja:cpp/language/character literal]]
[[pt:cpp/language/character literal]]
[[ru:cpp/language/character literal]]
[[zh:cpp/language/character literal]]</text>
      <sha1>th460l8rrta9zs6ggr96rkpzvzkxkk1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/class</title>
    <ns>0</ns>
    <id>5296</id>
    <revision>
      <id>86694</id>
      <parentid>85778</parentid>
      <timestamp>2016-07-09T16:21:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mentioned no in-class friend function definitions as a property of local classes</comment>
      <text xml:space="preserve" bytes="8969">{{title|Class declaration}}
{{cpp/language/classes/navbar}}
Classes and structs are user-defined types, defined by class-specifier, which appears in {{spar|decl-specifier-seq}} of the {{rlp|declarations|declaration}} syntax. The class specifier has the following syntax:

{{sdsc begin}}
{{sdsc|1=
{{spar|class-key}} {{spar|attr}} {{spar|class-head-name}} {{spar|base-clause}} {{ttb|{ }} {{spar|member-specification}} {{ttb|} }}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|class-key}} | one of [[cpp/keyword/class|class]] or [[cpp/keyword/struct|struct]].  The keywords are identical except for the default {{rlp|access|member access}} and the default {{rlp|derived class|base class access}}.}} 
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]], may include {{rlp|alignas|alignas specifier}}}}
{{par | {{spar|class-head-name}} | the name of the class that's being defined. Optionally {{rlp|identifiers#Qualified identifiers|qualified}}, optionally followed by keyword [[cpp/keyword/final|final]]. The name may be omitted, in which case the class is unnamed (note that unnamed class cannot be {{rlp|final}}) }}
{{par | {{spar|base-clause}} | optional list of one or more parent classes and the model of inheritance used for each (see {{rlp|derived class}}) }}
{{par | {{spar|member-specification}} | list of access specifiers, member object and member function declarations and definitions (see below)}}
{{par end}}

See {{rlp|classes}} for general overview of the syntax. If {{spar|class-key}} is {{tt|union}}, the declaration introduces a {{rlp|union|union type}}. 

===Forward declaration===
A declaration of the following form
{{sdsc begin}}
{{sdsc|1=
{{spar|class-key}} {{spar|attr}} {{spar|identifier}} {{ttb|;}}
}}
{{sdsc end}}

Declares a class type which will be defined later in this scope. Until the definition appears, this class name has {{rlp|incomplete type}}. This allows classes that refer to each other:
{{source|class Vector; // forward declaration
class Matrix {
    // ...
    friend Vector operator*(const Matrix&amp;, const Vector&amp;);
};
class Vector {
    // ...
    friend Vector operator*(const Matrix&amp;, const Vector&amp;);
};
}}
and if a particular source file only uses pointers and references to the class, this makes it possible to reduce #include dependencies:
{{source|// in MyStruct.h 
#include &lt;iosfwd&gt; // contains forward declaration of std::ostream
struct MyStruct {
    int value;
    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const S&amp; s);
    // definition provided in MyStruct.cpp file which uses #include &lt;ostream&gt;
};
}}

If forward declaration appears in local scope, it ''hides'' previously declared class, variable, function, and all other declarations of the same name that may appear in enclosing scopes:
{{source|struct s { int a; };
struct s; // does nothing (s already defined in this scope)
void g() {
    struct s; // forward declaration of a new, local struct &quot;s&quot;
              // this hides global struct s until the end of this block
    s* p;     // pointer to local struct s
    struct s { char* p; }; // definitions of the local struct s
}
}}

Note that a new class name may also be introduced by an {{rlp|elaborated type specifier}} which appears as part of another declaration, but only if {{rlp|lookup|name lookup}} can't find a previously declared class with the same name.

{{source|1=
class U;
namespace ns{
    class Y f(class T p); // declares function ns::f and declares ns::T and ns::Y
    class U f(); // U refers to ::U
    Y* p; T* q; // can use pointers and references to T and Y
}
}}

===Member specification===
The member specification, or the ''body'' of a class definition, is a brace-enclosed sequence of any number of the following:
@1@ Member declarations of the form
{{sdsc begin}}
{{sdsc | {{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}}{{mark optional}} {{spar|member-declarator-list}}{{mark optional}} {{ttb|;}}
}}
{{sdsc end}}
{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|decl-specifier-seq}} | sequence of {{rlp|declarations#Specifiers|specifiers}}. It is only optional in the declarations of constructors, destructors, and user-defined type {{rlp|cast_operator|conversion functions}}}}
{{par | {{spar|member-declarator-list}} | similar to a {{rlp|declarations|init-declarator-list}}, but additionally allows {{rlp|bit field|bit-field declaration}}, {{rlp|abstract_class|pure-specifier}}{{rev inl|since=c++11|, and virt-specifier ({{tt|{{rlp|override}}}} or {{tt|{{rlp|final}}}})}}, and does not allow {{rlp|direct initialization|direct-non-list-initialization syntax}}.}}
{{par end}}
This declaration may declare {{rlp|static}} and non-static {{rlp|data members}} and {{rlp|member functions}}, member {{rlp|typedef}}s, member {{rlp|enum|enumerations}}, and {{rlp|nested classes}}. It may also be a {{rlp|friend|friend declaration}}.
{{source|1=class S {
    int d1; // non-static data member
    int a[10] = {1,2}; // non-static data member with initializer (C++11)
    static const int d2 = 1; // static data member with initializer
    virtual void f1(int) = 0; // pure virtual member function
    std::string d3, *d4, f2(int); // two data members and a member function
    enum {NORTH, SOUTH, EAST, WEST};
    struct NestedS {
        std::string s;
    } d5, *d6;
    typedef NestedS value_type, *pointer_type;
};
}}
@2@ Function definitions, which both declare and define {{rlp|member functions}} or {{rlp|friend|friend functions}}. A semicolon after a member function definition is optional. All functions that are defined inside a class body are automaticaly {{rlp|inline}}.
{{source|class M {
    std::size_t C;
    std::vector&lt;int&gt; data;
 public:
    M(std::size_t R, std::size_t C) : C(C), data(R*C) {} // constructor definition 
    int operator()(size_t r, size_t c) const { // member function definition
        return data[r*C+c];
    }
    int&amp; operator()(size_t r, size_t c) {  // another member function definition
        return data[r*C+c];
    }
};
}}
@3@ {{rlp|access|Access specifiers}} {{tt|public:}}, {{tt|protected:}}, and {{tt|private:}}
{{source|class S {
 public:
    S();          // public constructor
    S(const S&amp;);  // public copy constructor
    virtual ~S(); // public virtual destructor
 private:
    int* ptr; // private data member
};}}
@4@ {{rlp|using_declaration|Using-declarations}}
{{source|class Base {
 protected:
     int d;
};
class Derived : public Base {
 public:
    using Base::d; // make Base's protected member d a public member of Derived
    using Base::Base; // inherit all parent's constructors (C++11)
};
}}
@5@ {{rlp|static_assert}} declarations
{{source|template&lt;typename T&gt;
struct Foo {
  static_assert(std::is_floating_point&lt;T&gt;::value, &quot;Foo&lt;T&gt;: T must be floating point&quot;);
};
}}
@6@ {{rlp|member_template|member template declarations}}
{{source|struct S {
    template&lt;typename T&gt;
    void f(T&amp;&amp; n);

    template&lt;class CharT&gt;
    struct NestedS {
        std::basic_string&lt;CharT&gt; s;
    };
};
}}
@7@ {{rlp|type_alias|alias declarations}}
{{source|1=template &lt;typename T&gt;
struct identity
{
    using type = T;
};
}}

===Local classes===
A class declaration can appear in namespace scope (in which case it defines an ordinary class), inside another class definition (in which case it defines a {{rlp|nested classes|nested class}}), and inside the body of a function, in which case it defines a ''local class''. The name of such a class only exists within the function scope, and is not accessible outside.

* A local class cannot have static members
* Member functions of a local class have no linkage
* Member functions of a local class have to be defined entirely inside the class body
* Local classes {{rev inl|since=c++14|other than [[cpp/language/lambda|closure types]]}} cannot have member templates
* Local classes cannot have {{rlp|friend#Template_friends|friend templates}}
* Local classes cannot define {{rlp|friend|friend functions}} inside the class definition
* A local class inside a function (including member function) can access the same names that the enclosing function can access.
{{rev begin}}
{{rev | until=c++11 |
* local classes could not be used as template arguments
}}
{{rev end}}
{{example
 |code=
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;int&gt; v{1,2,3};
    struct Local {
       bool operator()(int n, int m) {
           return n &gt; m;
       }
    };
    std::sort(v.begin(), v.end(), Local()); // since C++11
    for(int n: v) std::cout &lt;&lt; n &lt;&lt; ' ';
}
|output=3 2 1
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/struct | Struct declaration}}
{{dsc end}}

[[de:cpp/language/class]]
[[es:cpp/language/class]]
[[fr:cpp/language/class]]
[[it:cpp/language/class]]
[[ja:cpp/language/class]]
[[pt:cpp/language/class]]
[[ru:cpp/language/class]]
[[zh:cpp/language/class]]</text>
      <sha1>ejh45rtkft58uqjpljzoawppaitfvr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/class template</title>
    <ns>0</ns>
    <id>5065</id>
    <revision>
      <id>90176</id>
      <parentid>87818</parentid>
      <timestamp>2017-02-08T17:27:52Z</timestamp>
      <contributor>
        <username>VZ</username>
        <id>1547</id>
      </contributor>
      <comment>Rephrase explicit instantiation declaration section for clarity</comment>
      <text xml:space="preserve" bytes="7456">{{title|Class template}}
{{cpp/language/templates/navbar}}

A class template defines a family of classes.

===Syntax===
{{sdsc begin}}
{{sdsc|num=1|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|class-declaration}} }}
{{sdsc|num=2|{{ttb|export}} {{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|class-declaration}}|notes={{mark until c++11}}}}
{{sdsc end}}

===Explanation===
{{par begin}}
{{par | {{spar|class-declaration}} | a {{rlp|class|class declaration}}. The class name declared becomes a template name. }}
{{par | {{spar|parameter-list}} | a non-empty comma-separated list of the {{rlp|template parameters}}, each of which is either a [[cpp/language/template_parameters#Non-type_template_parameter|non-type parameter]], a [[cpp/language/template_parameters#Type_template_parameter|type parameter]], a [[cpp/language/template_parameters#Template_template_parameter|template parameter]], or a [[cpp/language/parameter_pack|parameter pack]] of any of those.}}
{{par end}}

{{rev begin}}
{{rev | until=c++11 | {{tt|export}} was an optional modifier which declared the template as ''exported'' (when used with a class template, it declared all of its members exported as well). Files that instantiated exported templates did not need to include their definitions: the declaration was sufficient. Implementations of {{tt|export}} were rare and disagreed with each other on details.
}}
{{rev end}}

===Class template instantiation===
A class template by itself is not a type, or an object, or any other entity. No code is generated from a source file that contains only template definitions. In order for any code to appear, a template must be instantiated: the template arguments must be provided so that the compiler can generate an actual class (or function, from a function template).
====Explicit instantiation====
{{sdsc begin}}
{{sdsc|num=1|{{ttb|template}} {{spar|class}} {{spar|name}} {{ttb|&lt;}} {{spar|argument-list}} {{ttb|&gt; ;}} }}
{{sdsc|num=2|{{ttb|extern}} {{ttb|template}} {{spar|class}} {{spar|name}} {{ttb|&lt;}} {{spar|argument-list}} {{ttb|&gt; ;}}|notes={{mark since c++11}}}}
{{sdsc end}}
@1@ Explicit instantiation definition
@2@ Explicit instantiation declaration

An explicit instantiation definition forces instantiation of the class, struct, or union they refer to. It may appear in the program anywhere after the template definition, and for a given argument-list, is only allowed to appear once in the entire program.

{{rev begin}}
{{rev|since=c++11|
An explicit instantiation declaration (an extern template) skips implicit instantiation step: the code that would otherwise cause an implicit instantiation instead uses the explicit instantiation definition provided elsewhere (resulting in link errors if no such instantiation exists). This can be used to reduce compilation times by explicitly declaring a template instantiation in all but one of the source files using it, and explicitly defining it in the remaining file.}}
{{rev end}}

Classes, functions, variables, and member template specializations can be explicitly instantiated from their templates. Member functions, member classes, and static data members of class templates can be explicitly instantiated from their member definitions.

Explicit instantiation can only appear in the enclosing namespace of the template, unless it uses qualified-id:
{{source|1=
namespace N {
  template&lt;class T&gt; class Y { void mf() { } }; // template definition
}
// template class Y&lt;int&gt;; // error: class template Y not visible in the global namespace
using N::Y;
// template class Y&lt;int&gt;; // error: explicit instantiation outside 
                          // of the namespace of the template
template class N::Y&lt;char*&gt;;      // OK: explicit instantiation
template void N::Y&lt;double&gt;::mf(); // OK: explicit instantiation
}}

Explicit instantiation has no effect if an {{rlp|template specialization|explicit specialization}} appeared before for the same set of template arguments.

Only the declaration is required to be visible when explicitly instantiating a function template, a variable template, a member function or static data member of a class template, 
or a member function template. The complete definition must appear before the explicit instantiation of a class template, a member class of a class template, or a member class
template, unless an explicit specialization with the same template arguments appeared before.

If a function template, variable template, member function template, or member function or static data member of a class template is explicitly instantiated with an explicit instantiation definition, the template definition must be present in the same translation unit.

When an explicit instantiation names a class template specialization, it serves as an explicit instantiation of the same kind (declaration or definition) of each of its non-inherited non-template members that has not been previously explicitly specialized in the translation unit. If this explicit instantiation is a definition, it is also an explicit instantiation definition only for the members that have been defined at this point.

Explicit instantiation definitions ignore member access specifiers: parameter types and return types may be private.

====Implicit instantiation====
When code refers to a template in context that requires a completely defined type, or when the completeness of the type affects the code, and this particular type has not been explicitly instantiated, implicit instantiation occurs. For example, when an object of this type is constructed, but not when a pointer to this type is constructed.

This applies to the members of the class template: unless the member is used in the program, it is not instantiated, and does not require a definition.

{{source|1=
template&lt;class T&gt; struct Z {
    void f() {}
    void g(); // never defined
}; // template definition
template struct Z&lt;double&gt;; // explicit instantiation of Z&lt;double&gt;
Z&lt;int&gt; a; // implicit instantiation of Z&lt;int&gt;
Z&lt;char&gt;* p; // nothing is instantiated here
p-&gt;f(); // implicit instantiation of Z&lt;char&gt; and Z&lt;char&gt;::f() occurs here.
// Z&lt;char&gt;::g() is never needed and never instantiated: it does not have to be defined
}}

If a class template has been declared, but not defined, at the point of instantiation, the instantiation yields an incomplete class type:
{{source|1=
template&lt;class T&gt; class X; // declaration, not definition
X&lt;char&gt; ch;                // error: incomplete type X&lt;char&gt;
}}

{{rev begin}}
{{rev|since=c++17|
{{rlp|class#Local_classes|Local classes}} and any templates used in their members are instantiated as part of the instantiation of the entity within which the local class or enumeration is declared.}}
{{rev end}}

===See also===
* {{rlp|template_parameters | template parameters and arguments}} allow templates to be parametrized
* {{rlp|function_template | function template declaration}} declares a function template
* {{rlp|template_specialization | template specialization}} defines an existing template for a specific type
* {{rlp|parameter_pack | parameter packs}} allows the use of lists of types in templates {{mark since c++11}}

[[de:cpp/language/class template]]
[[es:cpp/language/class template]]
[[fr:cpp/language/class template]]
[[it:cpp/language/class template]]
[[ja:cpp/language/class template]]
[[pt:cpp/language/class template]]
[[ru:cpp/language/class template]]
[[zh:cpp/language/class template]]</text>
      <sha1>35hyptmwp0o9vewrb6iz672j2l4i73l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/class template deduction</title>
    <ns>0</ns>
    <id>15678</id>
    <revision>
      <id>92071</id>
      <parentid>91039</parentid>
      <timestamp>2017-04-04T10:36:40Z</timestamp>
      <contributor>
        <username>Roki</username>
        <id>6664</id>
      </contributor>
      <minor/>
      <comment>Fix typo in docs</comment>
      <text xml:space="preserve" bytes="10923">{{title|Class template deduction{{mark since c++17}}}}
{{cpp/language/templates/navbar}}

In order to instantiate a {{rlp|class template}}, every template argument must be known, but not every template argument has to be specified. In the following contexts the compiler will deduce the missing template arguments from the type of the initializer:
* any {{rlp|declarations|declaration}} that specifies initialization of a variable and variable template
{{source|1=
std::pair p(2, 4.5);     // deduces to std::pair&lt;int, double&gt; p(2, 4.5);
std::tuple t(4, 3, 2.5); // same as auto t = std::make_tuple(4, 3, 2.5);
std::less l;             // same as std::less&lt;void&gt; l;
}}
* {{rlp|new|new-expressions}} 
{{source|1=
template&lt;class T&gt; struct A { A(T,T); };
auto y = new A{1,2}; // allocated type is A&lt;int&gt;
}}
* {{rlp|explicit_cast|function-style cast}} expressions
{{source|1=
auto lck = std::lock_guard(mtx); // deduces to std::lock_guard&lt;std::mutex&gt;
std::copy_n(vi1, 3, std::back_insert_iterator(vi2)); // or std::back_inserter(vi2)
std::for_each(vi.begin(), vi.end(), Foo([&amp;](int i) {...})); // deduces Foo&lt;T&gt;, where T 
                                                            // is the unique lambda type
}}

===Automatic deduction guides===
When a function-style cast or declaration of a variable uses the name of a class template without an argument list as the type specifier, deduction will proceed as follows:

* for each constructor (or constructor template) {{tt|Ci}} declared in the named primary template (if it is defined), a fictional function template {{tt|Fi}}, is constructed, such that
:* template parameters of {{tt|Fi}} are the template parameters of the named class template followed (if Ci is a constructor template) by the template parameters of {{tt|Ci}} (default template arguments are included too)
:* the function parameters of {{tt|Fi}} are the constructor parameters
:* the return type of {{tt|Fi}} is the template name followed by the template parameters of the class template enclosed in &lt;&gt;
* If the primary class template {{tt|C}} is not defined or does not declare any constructors, an additional fictional function template is added, derived as above from a hypothetical constructor {{tt|C()}}
* In any case, an additional fictional function template derived as above from a hypothetical constructor {{tt|C(C)}} is added, called the copy deduction candidate.
* {{rlp|template argument deduction}} and {{rlp|overload resolution}} is then performed for initialization of a fictional object of hypothetical class type, whose constructor signatures match the guides (except for return type) for the purpose of forming an overload set, and the initializer is provided by the context in which class template argument deduction was performed. These fictional constructors are public members of the hypothetical class type. They are  explicit if the guide was formed from an explicit constructor. If overload resolution fails, the program is ill-formed. Otherwise, the return type of the selected {{tt|F}} template specialization becomes the deduced class template specialization.

{{source|1=
template&lt;class T&gt; struct UniquePtr { UniquePtr(T* t); };
UniquePtr dp{new auto(2.0)};
// Set of constructors:
// C1: UniquePtr(T*)
// C2: UniquePtr(const UniquePtr&amp;)
// C3: UniquePtr(UniquePtr&amp;&amp;)
// Set of automatic deduction guides:
// F1: template&lt;class T&gt; UniquePtr&lt;T&gt; F(T *p);
// F2: template&lt;class T&gt; UniquePtr&lt;T&gt; F(UniquePtr&lt;T&gt; const&amp;);
// F3: template&lt;class T&gt; UniquePtr&lt;T&gt; F(UniquePtr&lt;T&gt; &amp;&amp;);
// imaginary class to initialize:
// struct X {
//     template&lt;class T&gt; X(T *p);                // from F1
//     template&lt;class T&gt; X(UniquePtr&lt;T&gt; const&amp;); // from F2
//     template&lt;class T&gt; X(UniquePtr&lt;T&gt; &amp;&amp;);     // from F3
// };
// direct-init of an X object with &quot;new double(2.0)&quot; as the initializer
// selects the constructor that corresponds to the guide F1 with T = double
// For F1 with T=double, the return type is UniquePtr&lt;double&gt;
// result:
// UniquePtr&lt;double&gt; dp{new auto(2.0)}
}}

Or, for a more complex example (note: &quot;S::N&quot; would not compile: scope resolution qualifiers are not something that can be deduced
{{source|1=
template&lt;class T&gt; struct S {
  template&lt;class U&gt; struct N {
    N(T);
    N(T, U);
    template&lt;class V&gt; N(V, U);
  };
};

S&lt;int&gt;::N x{2.0, 1};
// the automatic deduction guides are (note that T is already known to be int)
// F1: template&lt;class U&gt; S&lt;int&gt;::N&lt;U&gt; F(S&lt;int&gt;::N&lt;U&gt; const&amp;);
// F2: template&lt;class U&gt; S&lt;int&gt;::N&lt;U&gt; F(S&lt;int&gt;::N&lt;U&gt; &amp;&amp;);
// F3: template&lt;class U&gt; S&lt;int&gt;::N&lt;U&gt; F(int);
// F4: template&lt;class U&gt; S&lt;int&gt;::N&lt;U&gt; F(int, U);
// F5: template&lt;class U, class V&gt; S&lt;int&gt;::N&lt;U&gt; F(V, U);
// Overload resolution for direct-list-init with &quot;{2.0, 1}&quot; as the initializer
// chooses F5 with U=int and V=double.
// The return type is S&lt;int&gt;::N&lt;int&gt;
// result:
// S&lt;int&gt;::N&lt;int&gt; x{2.0, 1};
}}

===User-defined deduction guides===

The syntax of a user-defined deduction guide is the syntax of a function declaration with a trailing return type, except that it uses the name of a class template as the function name:
{{sdsc begin}}
{{sdsc | {{ttb|explicit}}{{mark optional}} {{spar|template-name}} {{ttb|( }} {{spar|parameter-declaration-clause}} {{ttb|)}} {{ttb|-&gt;}} {{spar|simple-template-id}} {{ttb|;}} }} 
{{sdsc end}}

User-defined deduction guides must name a class template and must be introduced within the same semantic scope of the class template (which could be namespace or enclosing class) and, for a member class template, must have the same access, but deduction guides do not become members of that scope. 

A deduction guide is not a function and does not have a body. Deduction guides are not found by name lookup and do not participate in overload resolution except for the {{rlp|overload resolution#Best_viable_function|overload resolution against other deduction guides}} when deducting class template arguments. Deduction guides cannot be redeclared in the same translation unit for the same class template.

{{source|1=
// declaration of the template
template&lt;class T&gt; struct container {
    container(T t) {}
    template&lt;class Iter&gt; container(Iter beg, Iter end);
};
// additional deduction guide
template&lt;class Iter&gt;
container(Iter b, Iter e) -&gt; container&lt;typename std::iterator_traits&lt;Iter&gt;::value_type&gt;;
// uses
container c(7); // OK: deduces T=int using an automatic guide
std::vector&lt;double&gt; v = { /* ... */};
auto d = container(v.begin(), v.end()); // OK: deduces T=double
container e{5, 6}; // Error: there is no std::iterator_traits&lt;int&gt;::value_type
}}

The fictional constructors for the purpose of overload resolution (described above) are explicit if they correspond to an automatic deduction guide formed from an explicit constructor or to a user-defined deduction guide that uses the keyword {{c|explicit}}. As always, such constructors are ignored in copy-initialization context:
{{source|1=
template&lt;class T&gt; struct A {
    explicit A(const T&amp;, ...) noexcept; // #1
    A(T&amp;&amp;, ...);                        // #2
};

int i;
A a1 = { i, i }; // error: cannot deduce from rvalue reference in #2,
                 // and #1 is explicit, and not considered in copy-initialization.
A a2{i, i};      // OK, #1 deduces to A&lt;int&gt; and also initializes
A a3{0, i};      // OK, #2 deduces to A&lt;int&gt; and also initializes
A a4 = {0, i};   // OK, #2 deduces to A&lt;int&gt; and also initializes

template&lt;class T&gt; A(const T&amp;, const T&amp;) -&gt; A&lt;T&amp;&gt;; // #3
template&lt;class T&gt; explicit A(T&amp;&amp;, T&amp;&amp;)  -&gt; A&lt;T&gt;;  // #4

A a5 = {0, 1};   // error: #3 deduces to A&lt;int&amp;&gt;
                     // and #1 &amp; #2 result in same parameter constructors.
A a6{0,1};       // OK, #4 deduces to A&lt;int&gt; and #2 initializes
A a7 = {0, i};   // error: #3 deduces to A&lt;int&amp;&gt;
A a8{0,i};       // error: #3 deduces to A&lt;int&amp;&gt;
}}
{{source|1=
template&lt;class T&gt; struct B {
    template&lt;class U&gt; using TA = T;
    template&lt;class U&gt; B(U, TA&lt;U&gt;);
};
B b{(int*)0, (char*)0}; // OK, deduces B&lt;char*&gt;
}}

===Notes===
Class template deduction is only performed if no template arguments are provided. If at least one argument is specified, deduction does not take place.
{{source|1=
std::tuple t(1, 2, 3);              // OK: deduction
std::tuple&lt;int,int,int&gt; t(1, 2, 3); // OK: all arguments are provided
std::tuple&lt;int&gt; t(1, 2, 3);         // Error: partial deduction
}}

Class template deduction of aggregates typically requires deduction guides:
{{source|1=
template&lt;class A, class B&gt; struct Agg {A a; B b; };
// automatic guides are formed from default, copy, and move constructors
template&lt;class A, class B&gt; Agg(A a, B b) -&gt; Agg&lt;A, B&gt;;
Agg agg{1, 2.0}; // deduced to Agg&lt;int, double&gt; from the user-defined guide

template &lt;class... T&gt;
array(T&amp;&amp;... t) -&gt; array&lt;std::common_type_t&lt;T...&gt;, sizeof...(T)&gt;;
auto a = array{1, 2, 3u}; // deduced from the user-defined guide
}}

User-defined deduction guides do not have to be templates:
{{source|1=
template&lt;class T&gt; struct S { S(T); };
S(char const*) -&gt; S&lt;std::string&gt;;
S s{&quot;hello&quot;}; // deduced to S&lt;std::string&gt;
}}

Within the scope of a class template, the name of the template without a parameter list is an injected class name, and can be used as a type. In that case, class argument deduction does not happen and template parameters must be supplied explicitly:
{{source|
template&lt;class T&gt;
struct X {
  template&lt;class Iter&gt; X(Iter b, Iter e) { }
	
  template&lt;class Iter&gt;
  auto foo(Iter b, Iter e) { 
     return X(b, e); // no deduction: X is the current X&lt;T&gt;
  }
  template&lt;class Iter&gt;
  auto bar(Iter b, Iter e) { 
     return X&lt;Iter::value_type&gt;(b, e); // must specify what we want
  }
};
}}

In {{rlp|overload resolution}}, guides have precedence over constructors if the conversions are as good, and even if the function template generated from the constructor is more specialized than the one generated from the deduction guide
{{source|1=
template&lt;class T&gt; struct A {
    A(T, int*);     // #1
    A(A&lt;T&gt;&amp;, int*); // #2
    enum { value };
};
template&lt;class T, int N = T::value&gt; A(T&amp;&amp;, int*) -&gt; A&lt;T&gt;; //#3

A a{1,0}; // uses #1 to deduce A&lt;int&gt; and initializes with #1
A b{a,0}; // uses #3 (not #2) to deduce A&lt;A&lt;int&gt;&amp;&gt; and initializes with #1
}}

Rvalue reference to a cv-unqualified template parameter is not a {{rlp|template_argument_deduction|forwarding reference}} if that parameter is a class template parameter:
{{source|1=
template&lt;class T&gt; struct A {
    template&lt;class U&gt;
    A(T&amp;&amp;, U&amp;&amp;, int*);   // #1: T&amp;&amp; is not a forwarding reference
                         //     U&amp;&amp; is a forwarding reference
    A(T&amp;&amp;, int*); // #2: T&amp;&amp; is not a forwarding reference
};

template&lt;class T&gt; A(T&amp;&amp;, int*) -&gt; A&lt;T&gt;; // #3: T&amp;&amp; is a forwarding reference

int i, *ip;
A a{i, 0, ip};  // error, cannot deduce from #1
A a0{0, 0, ip}; // uses #1 to deduce A&lt;int&gt; and #1 to initialize
A a2{i, ip};    // uses #3 to deduce A&lt;int&amp;&gt; and #2 to initialize
}}

{{todo|could use a note on wrap vs copy and how the copy candidate resolves it}}</text>
      <sha1>edpcdsmaccius1cklqu8k2soorhlymc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/classes</title>
    <ns>0</ns>
    <id>9899</id>
    <revision>
      <id>92037</id>
      <parentid>91832</parentid>
      <timestamp>2017-04-03T16:06:55Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="4759">{{title|Classes}}
{{cpp/language/classes/navbar}}
A class is a user-defined type.

A class type is defined by class-specifier, which appears in {{spar|decl-specifier-seq}} of the {{rlp|declarations|declaration}} syntax. The class specifier has the following syntax:

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|class-key}} {{spar|attr}} {{spar|class-head-name}} {{spar|base-clause}} {{ttb|{ }} {{spar|member-specification}} {{ttb|} }}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|class-key}} | one of [[cpp/keyword/class|class]], [[cpp/keyword/struct|struct]], [[cpp/keyword/union|union]]}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|class-head-name}} | the name of the class that's being defined. Optionally prepended by {{spar|nested-name-specifier}} (sequence of names and scope-resolution operators, ending with scope-resolution operator), optionally followed by keyword [[cpp/keyword/final|final]]. The name may be omitted, in which case the class is unnamed (note that unnamed class cannot be final) }}
{{par | {{spar|base-clause}} | optional list of one or more parent classes and the model of inheritance used for each (see {{rlp|derived_class|derived class}}) }}
{{par | {{spar|member-specification}} | list of access specifiers, member object and member function declarations and definitions (see {{rlp|class|class definition}})}}
{{par end}}

The class keys {{tt|struct}} and {{tt|class}} are indistinguishable in C++, except that the default {{rlp|access|access mode}} and default {{rlp|derived class|inheritance mode}} are {{tt|public}} if class declaration uses the {{tt|struct}} class-key and {{tt|private}} if the class declaration uses the {{tt|class}} class-key. Both {{tt|class}} and {{tt|struct}} can be used in a {{rlp|class|class definition}}.

The use of the class key {{tt|union}} results in a {{rlp|union|union definition}}, which defines a class that holds only one of its data members at a time.

A class can have the following kinds of members
@1@ {{rlp|data_members|data members}}
:@a@ non-static data members, including {{rlp|bit_field|bit fields}}.
:@b@ {{rlp|static}} data members
@2@ member functions
:@a@ {{rlp|member functions|non-static member functions}}
:@b@ {{rlp|static}} member functions
@3@ nested types
:@a@ {{rlp|nested classes}} and {{rlp|enum|enumerations}} defined within the class definition
:@b@ aliases of existing types, defined with {{rlp|typedef}} or {{rlp|type alias}} declarations
:@c@ the name of the class within its own definition acts as a public member type alias of itself for the purpose of {{rlp|unqualified_lookup#Injected_class_name|lookup}} (except when used to name a {{rlp|constructor}}): this is known as ''injected-class-name''
@4@ {{rlp|enum|enumerators}} from all unscoped enumerations defined within the class
@5@ {{rlp|member_template|member templates}} ({{rev inl|since=c++14|variable templates, }}class templates or function templates) may appear in the body of any non-local class/struct/union.

All members are defined at once in the class definition, they cannot be added to an already-defined class (unlike the members of namespaces)

A member of a class {{tt|T}} cannot use {{tt|T}} as its name if the member is a static data member, a member function, a member type, a member template{{mark unreviewed dr|CWG|1909}}, an enumerator of an unscoped enumeration, a member of a member anonymous union. However, a non-static data member may use the name {{tt|T}} as long as there are no user-declared constructors.

A class with at least one declared or inherited {{rlp|virtual}} member function is ''polymorphic''. Objects of this type are {{rlp|object#Polymorphic_objects|polymorphic objects}} and have runtime type information stored as part of the object representation, which may be queried with {{rlp|dynamic_cast}} and {{rlp|typeid}}. Virtual member functions participate in dynamic binding.

A class with at least one declared or inherited pure virtual member function is an {{rlp|abstract_class|abstract class}}. Objects of this type cannot be created.

A class with a {{rlp|constexpr}} constructor is a {{concept|LiteralType}}: objects of this type can be manipulated by {{rlp|constexpr}} functions at compile time.

Some member functions are special: under certain circumstances they are defined by the compiler even if not defined by the user. They are:
* {{rlp|default_constructor|Default constructor}}
* {{rlp|copy_constructor|Copy constructor}}
* {{rlp|move_constructor|Move constructor}} {{mark since c++11}}
* {{rlp|as_operator|Copy assignment operator}}
* {{rlp|move_operator|Move assignment operator}} {{mark since c++11}}
* {{rlp|destructor|Destructor}}

[[zh:cpp/language/classes]]</text>
      <sha1>rcsnq1mdys7avb1vqd4m3zcs68kdlws</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/concepts</title>
    <ns>0</ns>
    <id>14124</id>
    <redirect title="cpp/language/constraints" />
    <revision>
      <id>78772</id>
      <timestamp>2015-06-08T16:51:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/constraints]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/language/constraints]]</text>
      <sha1>gos0616cqlp0zwcujlzsncnbo7eqm8b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/const cast</title>
    <ns>0</ns>
    <id>2741</id>
    <revision>
      <id>90430</id>
      <parentid>90420</parentid>
      <timestamp>2017-02-23T01:58:06Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rv</comment>
      <text xml:space="preserve" bytes="3553">{{title|const_cast conversion}}
{{cpp/language/expressions/navbar}}
Converts between types with different cv-qualification.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|const_cast &amp;lt;}} {{spar|new_type}} {{ttb|&amp;gt; (}} {{spar|expression}} {{ttb|)}} }}
{{sdsc end}}

Returns a value of type {{tt|new_type}}.

===Explanation===

Only the following conversions can be done with {{c|const_cast}}. In particular, only {{c|const_cast}} may be used to cast away (remove) constness or volatility.

@1@ Two possibly multilevel pointers to the same type may be converted between each other, regardless of cv-qualifiers at each level.
@2@ lvalue of any type {{tt|T}} may be converted to a lvalue or rvalue reference to the same type {{tt|T}}, more or less cv-qualified. Likewise, an rvalue may be converted to a more or less cv-qualified rvalue reference. The result of a reference {{tt|const_cast}} refers to the original object {{rev inl|since=c++17|if {{spar|expression}} is a glvalue and to the {{rlp|implicit_cast#Temporary_materialization|materialized temporary}} otherwise}}.
@3@ Same rules apply to possibly multilevel pointers to data members {{rev inl|since=c++17|and possibly multilevel pointers to arrays of known and unknown bound (arrays to cv-qualified elements are considered to be cv-qualified themselves)}}
@4@ null pointer value may be converted to the null pointer value of {{spar|new_type}}

{{cpp/language/cast_return}}

===Notes===
Pointers to functions and pointers to member functions are not subject to {{c|const_cast}}

{{tt|const_cast}} makes it possible to form a reference or pointer to non-const type that is actually referring to a {{rlp|cv|const object}} or a reference or pointer to non-volatile type that is actually referring to a {{rlp|cv|volatile object}}. Modifying a const object through a non-const access path and referring to a volatile object through a non-volatile [[cpp/language/value category#glvalue|glvalue]] results in undefined behavior.

===Keywords===

{{ltt|cpp/keyword/const_cast}}

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;

struct type {
    type() :i(3) {}
    void m1(int v) const {
        // this-&gt;i = v;                 // compile error: this is a pointer to const
        const_cast&lt;type*&gt;(this)-&gt;i = v; // OK as long as the type object isn't const
    }
    int i;
};

int main() 
{
    int i = 3;                    // i is not declared const
    const int&amp; cref_i = i; 
    const_cast&lt;int&amp;&gt;(cref_i) = 4; // OK: modifies i
    std::cout &lt;&lt; &quot;i = &quot; &lt;&lt; i &lt;&lt; '\n';

    type t; // note, if this is const type t;, then t.m1(4); is UB
    t.m1(4);
    std::cout &lt;&lt; &quot;type::i = &quot; &lt;&lt; t.i &lt;&lt; '\n';

    const int j = 3; // j is declared const
    int* pj = const_cast&lt;int*&gt;(&amp;j);
    // *pj = 4;         // undefined behavior!

    void (type::*mfp)(int) const = &amp;type::m1; // pointer to member function
//  const_cast&lt;void(type::*)(int)&gt;(mfp); // compiler error: const_cast does not
                                         // work on function pointers
}
 | output=
i = 4
type::i = 4
}}

===See also===
* [[cpp/language/static_cast|static_cast]]
* [[cpp/language/dynamic_cast|dynamic_cast]]
* [[cpp/language/reinterpret_cast|reinterpret_cast]]
* [[cpp/language/explicit_cast|explicit cast]]
* [[cpp/language/implicit_cast|implicit conversions]]

[[de:cpp/language/const cast]]
[[es:cpp/language/const cast]]
[[fr:cpp/language/const cast]]
[[it:cpp/language/const cast]]
[[ja:cpp/language/const cast]]
[[pt:cpp/language/const cast]]
[[ru:cpp/language/const cast]]
[[zh:cpp/language/const cast]]</text>
      <sha1>c5bj2ckuag1nbn50wu2fbkybrmwnynp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/constant expression</title>
    <ns>0</ns>
    <id>12830</id>
    <revision>
      <id>92036</id>
      <parentid>91988</parentid>
      <timestamp>2017-04-03T15:15:43Z</timestamp>
      <contributor>
        <username>Winestone</username>
        <id>6404</id>
      </contributor>
      <minor/>
      <comment>Added a space between &quot;or&quot; and &quot;a&quot;</comment>
      <text xml:space="preserve" bytes="12008">{{title|Constant expressions}}
{{cpp/language/expressions/navbar}}

Defines an {{rlp|expressions|expression}} that can be evaluated at compile time.

Such expressions can be used as non-type template arguments, array sizes, and in other contexts that require constant expressions, e.g.
{{source|1=
int n = 1;
std::array&lt;int, n&gt; a1; // error, n is not a constant expression
const int cn = 2;
std::array&lt;int, cn&gt; a2; // OK, cn is a constant expression
}}

===Core constant expressions===
A ''core constant expression'' is any expression that ''does not'' have any one of the following in any subexpression (ignoring unevaluated expressions such as the operand of {{tt|sizeof}} or the right operand of builtin {{c|&amp;&amp;}} when the left operand evaluates to {{tt|false}})
@1@ A function call expression that calls a function (or a constructor) that is not declared {{rlp|constexpr}} 
{{source|1=
constexpr int n = std::numeric_limits&lt;int&gt;::max(); // OK, max() is constexpr
constexpr int m = std::time(NULL); // Error: std::time() is not constexpr
}}
@2@ A function call to a {{tt|constexpr}} function which is declared, but not defined, or {{mark unreviewed dr|CWG|1872}} a function call to a {{tt|constexpr}} function/constructor template instantiation where the instantiation fails to satisfy {{rlp|constexpr|constexpr function}}/constructor requirements.
@3@ A function call to a {{tt|constexpr}} function with arguments that do not produce a constant expression when substituted
{{source|1=
constexpr const int* addr(const int&amp; ir) { return &amp;ir; }
static const int x = 5;
constexpr const int* xp = addr(x); // OK
constexpr const int* tp = addr(5); // error: &amp;5 is not a constant expression
}}
@4@ A function call to a {{tt|constexpr}} constructor with arguments that do not produce constant expressions in member-initializer lists that are called from this function
{{source|1=
int x;
struct A {
    constexpr A(bool b) : m(b?42:x) { }
    int m;
};
constexpr int v = A(true).m; // OK
constexpr int w = A(false).m; // error: non-const x 
}}

{{rev begin}}
{{rev|until=c++14|
@5@ A function call to a recursive {{tt|constexpr}} function that would exceed compile-time recursion depth limit (implementation-defined)
}}
{{rev|since=c++14|
@5@ an expression that would exceed the implementation-defined limits
}}
{{rev end}}
{{rev begin}}
{{rev|until=c++14|
@6@ The {{rlp|this}} pointer, except if used for class member access inside a non-static member function
}}{{rev|since=c++14|
@6@ The {{rlp|this}} pointer, except in a {{tt|constexpr}} function or a {{tt|constexpr}} constructor that is being evaluated as part of the expression
}}
{{rev end}}
@7@ An expression whose evaluation leads to any form of core language{{mark unreviewed dr|CWG|1952}} undefined behavior (including signed integer overflow, division by zero, pointer arithmetic outside array bounds, etc).{{mark unreviewed dr|CWG|1313}} Whether standard library undefined behavior is detected is unspecified.
{{source|1=
constexpr double d1 = 2.0/1.0; // OK
constexpr double d2 = 2.0/0.0; // Error: not defined
constexpr int n = std::numeric_limits&lt;int&gt;::max() + 1; // Error: overflow
int x, y, z[30];
constexpr auto e1 = &amp;y - &amp;x; // Error: undefined
constexpr auto e2 = &amp;z[20] - &amp;z[3]; // OK
constexpr std::bitset&lt;2&gt; a; 
constexpr bool b = a[2]; // UB, but unspecified if detected
}}

{{rev begin}}
{{rev|until=c++17|
@8@ A {{rlp|lambda|lambda expression}}
}}
{{rev end}}
@9@ An lvalue-to-rvalue {{rlp|implicit_cast|implicit conversion}} {{rev inl|since=c++14|or modification}} applied to a non-active member of a {{rlp|union}} or its subobject
@10@ Any other lvalue-to-rvalue {{rlp|implicit_cast|implicit conversion}}, unless the lvalue...
:@a@ has integral or enumeration type and refers to a {{rlp|incomplete type|complete}} non-volatile const object, which is initialized with a constant expression
{{source|1=
int main() {
    const std::size_t tabsize = 50;
    int tab[tabsize]; // OK: tabsize is a constant expression

    std::size_t n = 50;
    const std::size_t sz = n;
    int tab2[sz]; // error: sz is not a constant expression
                  // because sz is not initialized with a constant expression
}
}}
:@b@ is a non-volatile glvalue that refers to an element of a string literal
:@c@ has literal type and refers to a non-volatile object defined with {{tt|constexpr}} or to its non-mutable subobject

{{rev begin}}
{{rev|until=c++14|
:@d@ has literal type and refers to a non-volatile temporary object, initialized with a constant expression
}}{{rev|since=c++14|
:@d@ has literal type and refers to a non-volatile object whose lifetime began within the evaluation of this expression
}}
{{rev end}}
@11@ an {{spar|id-expression}} referring to a variable or a data member of reference type, unless it was initialized with a constant expression or {{rev inl|until=c++14|is a non-static data member of a temporary object which was initialized with a constant expression}}{{rev inl|since=c++14|its lifetime began within the evaluation of this expression}}

{{rev begin}}
{{rev|since=c++14|
@12@ conversion from ''cv'' {{c|void*}} to any pointer-to-object type{{mark unreviewed dr|CWG|1312}}
}}
{{rev end}}
@13@ {{rlp|dynamic_cast}}
@14@ {{rlp|reinterpret_cast}}
@15@ pseudo-destructor call

{{rev begin}}
{{rev|until=c++14|
@16@ an increment or a decrement operator
}}
{{rev|since=c++14|
@16@ modification of an object, unless the object has non-volatile literal type and its lifetime began within the evaluation of the expression
{{source|1=
constexpr int incr(int&amp; n) {
  return ++n;
}
constexpr int g(int k) {
  constexpr int x = incr(k); // error: incr(k) is not a core constant
                             // expression because lifetime of k
                             // began outside the expression incr(k)
  return x;
}
constexpr int h(int k) {
  int x = incr(k); // OK: x is not required to be initialized with a core
                   // constant expression
  return x;
}
constexpr int y = h(1); // OK: initializes y with the value 2
                        // h(1) is a core constant expression because
                        // the lifetime of k begins inside the expression h(1)
}}
}}
{{rev end}}
@17@ a {{rlp|typeid}} expression applied to a glvalue of polymorphic type
@18@ a new-expression or a delete-expression
@19@ an equality or relational operator when the result is unspecified

{{rev begin}}
{{rev|until=c++14|
@20@ an assignment or a compound assignment operator
}}
{{rev end}}
@21@ a throw expression
@22@ inside a lambda-expression, a reference to {{tt|this}} or to a variable defined outside that lambda, if that reference would be an odr-use{{mark unreviewed dr|CWG|1613}}
{{source|1=
void g() {
  const int n=0;
  constexpr int j=*&amp;n; // OK, outside of a lambda-expression
  [=]{ constexpr int i=n;  // OK, 'n' is not odr-used and not captured here.
       constexpr int j=*&amp;n;// Ill-formed, '&amp;n' would be an odr-use of 'n'.
     };
}
}}
{{rev begin}}
{{rev|since=c++17|
note that if the ODR-use takes place in a function call to a closure, it does not refer to {{tt|this}} or to an enclosing variable, since it accesses a closure's data member instead
{{source|1=
// OK: 'v' &amp; 'm' are odr-used but do not occur in a constant-expression
// within the nested lambda
auto monad = [](auto v){return [=]{return v;};};
auto bind = [](auto m){return [=](auto fvm){return fvm(m());};};
// OK to have captures to automatic objects created during constant expression evaluation.
static_assert(bind(monad(2))(monad)() == monad(2)());
}}
}}
{{rev end}}

{{todo|needs more mini-examples and less standardese}}

===Integral constant expression===
''Integral constant expression'' is an expression of integral or unscoped enumeration type implicitly converted to a prvalue, where the converted expression is a core constant expression. If an expression of class type is used where an integral constant expression is expected, the expression is {{rlp|implicit_cast|contextually implicitly converted}} to an integral or unscoped enumeration type. 
: only integral constant expressions can be used as {{rev inl|until=c++14|{{rlp|array|array bounds}}, the dimensions in {{rlp|new|new-expressions}} other than the first}}, {{rlp|bit_field|bit-field lengths}}, enumeration initializers when the underlying type is not fixed, {{rev inl|until=c++14|null-pointer constants}}, and alignments.

===Converted constant expression===
A ''converted constant expression'' of type {{tt|T}} is an expression {{rlp|implicit cast|implicitly converted}} to type T, where the converted expression is a constant expression, and the implicit conversion sequence contains only:
:* constexpr user-defined conversions (so a class can be used where integral type is expected)
:* lvalue-to-rvalue conversions
:* integral promotions
:* non-narrowing integral conversions
{{rev begin}}
{{rev|since=c++17|
:* array-to-pointer conversions
:* function-to-pointer conversions
:* function pointer conversions (pointer to noexcept function to pointer to function)
:* qualification conversions
:* null pointer conversions from {{lc|std::nullptr_t}}
:* null member pointer conversions from {{lc|std::nullptr_t}}
}}
{{rev end}}
:* And if any {{rlp|reference initialization|reference binding}} takes place, it is direct binding (not one that constructs a temporary object)
: Only ''converted constant expressions'' can be used as {{rlp|switch|case expressions}}, {{rlp|enum|enumerator initializers}} when the underlying type is fixed, {{rev inl|since=c++14|{{rlp|array|array bounds}}, the dimensions in {{rlp|new|new-expressions}} other than the first}}, and as {{rev inl|until=c++17|integral and enumeration }}non-type {{rlp|template parameters|template arguments}}.

A ''contextually converted constant expression of type {{c|bool}}'' is an expression,  {{rlp|implicit cast#Contextual conversions|contextually converted to {{c|bool}}}}, where the converted expression is a constant expression and the conversion sequence contains only the conversions above. Such expressions can be used in {{rlp|noexcept spec|{{c|noexcept}} specifications}} and {{rlp|static assert|static assert declarations}}.

===Literal constant expression===
''Literal constant expression'' is a prvalue ''core constant expression'' of non-pointer literal type (after conversions as required by context). A literal constant expression of array or class type requires that each subobject is initialized with a constant expression.

===Reference constant expression===
''Reference constant expression'' is an lvalue core constant expression that designates an object with static storage duration or a function.

===Address constant expression===
''Address constant expression'' is a prvalue core constant expression (after conversions required by context) of type {{c|std::nullptr_t}} or of a pointer type, which points to an object with static storage duration, one past the end of an array with static storage duration, to a function, or is a null pointer.

===Notes===
{{rev begin}}
{{rev|since=c++14|Implementations are not permitted to declare library functions as {{tt|constexpr}} unless the standard says the function is {{tt|constexpr}} {{mark unreviewed dr|LWG}}&lt;!-- this was LWG #2013 --&gt;

{{rlp|copy elision}} is mandatory in constant expressions {{mark unreviewed dr|CWG}}&lt;!-- this is CWG 2022 --&gt;
}}
{{rev end}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2167|std=C++14|before=non-member references local to an evaluation were making the evaluation non-constexpr|after=non-member references allowed}}
{{dr list item|wg=cwg|dr=1313|std=C++11|before=undefined behavior was permitted, and all pointer subtraction was prohibited|after=same-array pointer subtraction ok, UB prohibited}}
{{dr list item|wg=cwg|dr=1952|std=C++11|before=standard library undefined behavior was required to be diagnosed|after=unspecified whether library UB is diagnosed}}
{{dr list end}}

===See also===
* {{rlp|constexpr|constexpr specifier}}
* {{c|std::is_literal_type}}</text>
      <sha1>9b6mi9p858ht2nvvaiasxzzcz4l78s2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/constant initialization</title>
    <ns>0</ns>
    <id>8870</id>
    <revision>
      <id>86082</id>
      <parentid>81708</parentid>
      <timestamp>2016-06-16T21:04:09Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="3356">{{title|constant initialization}}
{{cpp/language/initialization/navbar}}
Sets the initial values of the static constants

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|static}} {{spar|T}} {{ttb|&amp;}} {{spar|ref}} {{ttb|{{=}} {{spar|constexpr}};}}}}
{{sdsc | num=2 | {{ttb|static}} {{spar|T}} {{spar| object}} {{ttb|{{=}} {{spar|constexpr}};}}}}
{{sdsc end}}

===Explanation===

Constant initialization is performed {{rev inl|until=c++14|after}}{{rev inl|since=c++14|instead of}} zero initialization of the static and thread-local objects and before all other initialization. Only the following variables are constant initialized:
@1@ Static or thread-local references, if it is bound to static glvalue, to a temporary object (or its subobject), or to a function. and if every expression (including implicit conversions) in [[cpp/language/reference_initialization|the initializer]] of the reference is a [[cpp/language/constant_expression|constant expression]].
@2@ Static or thread-local object of class type that is initialized by a constructor call, if the constructor is {{rlp|constexpr}} and all constructor arguments (including implicit conversions) are {{rlp|constant expression}}s, and if the initializers in the constructor's initializer list and the brace-or-equal initializers of the class members only contain constant expressions.
@3@ Static or thread-local object (not necessarily of class type), that is not initialized by a constructor call, if the object is {{rlp|value initialization|value-initialized}} or if every expression in its initializer is a constant expression.

The effects of constant initialization are the same as the effects of the corresponding initialization, except that it's guaranteed that it is complete before any other initialization of a static or thread-local object begins, and it may be performed at compile time.

===Notes===
The compiler is permitted to initialize other static and thread-local objects using constant initialization, if it can guarantee that the value would be the same as if the standard order of initialization was followed.

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;array&gt;

struct S {
    static const int c;
};
const int d = 10 * S::c; // not a constant expression: S::c has no preceding
                         // initializer, this initialization happens after const
const int S::c = 5;      // constant initialization, guaranteed to happen first
int main()
{
    std::cout &lt;&lt; &quot;d = &quot; &lt;&lt; d &lt;&lt; '\n';
    std::array&lt;int, S::c&gt; a1; // OK: S::c is a constant expression
//  std::array&lt;int, d&gt; a2;    // error: d is not a constant expression
}
 | output=
d = 50
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2026|std=C++14|before=zero-init was specified to always occur first, even before constant-init|after=no zero-init if constant init applies}}
{{dr list end}}

===See also===
* [[cpp/language/constexpr|constexpr specifier]]
* [[cpp/language/zero_initialization|zero initialization]]

[[de:cpp/language/constant initialization]]
[[es:cpp/language/constant initialization]]
[[fr:cpp/language/constant initialization]]
[[it:cpp/language/constant initialization]]
[[ja:cpp/language/constant initialization]]
[[pt:cpp/language/constant initialization]]
[[ru:cpp/language/constant initialization]]
[[zh:cpp/language/constant initialization]]</text>
      <sha1>2ptoi62bon5x4dvhs0m8n1jfks4u53h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/constexpr</title>
    <ns>0</ns>
    <id>689</id>
    <revision>
      <id>91780</id>
      <parentid>91112</parentid>
      <timestamp>2017-03-31T19:57:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="9085">{{title|constexpr specifier {{mark since c++11}}}}
{{cpp/language/declarations/navbar}}
:*{{ttb|constexpr}} - specifies that the value of a variable or function can appear in {{rlp|constant expression}}s

===Explanation===

The {{tt|constexpr}} specifier declares that it is possible to evaluate the value of the function or variable at compile time. Such variables and functions can then be used where only compile time {{rlp|constant_expression|constant expressions}} are allowed (provided that appropriate function arguments are given). A {{c|constexpr}} specifier used in an object declaration implies {{c|const}}. A {{c|constexpr}} specifier used in a function {{rev inl|since=c++17| or {{rlp|static}} member variable}} declaration implies {{c|inline}}.

A '''{{c|constexpr}} variable''' must satisfy the following requirements:

:* its type must be a {{concept|LiteralType}}.
:* it must be immediately initialized
:* the {{rlp|eval order|full-expression}} of its initialization, including all implicit conversions, constructors calls, etc, must be a {{rlp|constant expression}}

A '''{{c|constexpr}} function''' must satisfy the following requirements:

:* it must not be {{rlp|virtual}}
:* its return type must be {{concept|LiteralType}}
:* each of its parameters must be {{concept|LiteralType}}
:* there exists at least one set of argument values such that an invocation of the function could be an evaluated subexpression of a {{rlp|constant expression#Core_constant_expressions|core constant expression}}{{rev inl|since=c++14| (for constructors, use in a constant initializer is sufficient)}}. No diagnostic is required for a violation of this bullet.
{{rev begin}}
{{rev|until=c++14|
:* the function body must be either deleted or defaulted or contain only the following:
::* {{rlp|statements#Expression_statements|null statements}} (plain semicolons)
::* {{rlp|static_assert}} declarations
::* {{rlp|typedef}} declarations and {{rlp|type_alias|alias}} declarations that do not define classes or enumerations
::* {{rlp|namespace#Using-declarations|using declarations}}
::* {{rlp|namespace#Using-directives|using directives}}
::* exactly one {{rlp|return}} statement.
}}{{rev|since=c++14|
:* the function body must be either deleted or defaulted or contain '''any statements except''':
::* an {{rlp|asm|asm declaration}}
::* a {{rlp|goto}} statement
::* a statement with a {{rlp|statements#Labels|label}} other than {{tt|case}} and {{tt|default}}{{mark unreviewed dr|CWG|2163}}
::* a {{rlp|try catch|try-block}}
::* a definition of a variable of non-literal type
::* a definition of a variable of static or thread {{rlp|storage duration}}
::* a definition of a variable for which {{rlp|default initialization|no initialization is performed}}.
:* if the function is a defaulted copy/move assignment, the class of which it is a member must not have a mutable variant member
}}
{{rev end}}

A '''{{c|constexpr}} constructor''' must satisfy the following requirements:

:* each of its parameters must be {{concept|LiteralType}}.
:* the class must have no virtual base classes
:* the constructor must not have a {{rlp|function-try-block}}
{{rev begin}}
{{rev|until=c++14|
:* the constructor body must be either deleted or defaulted or contain only the following:
::* null statements
::* {{rlp|static_assert}} declarations
::* {{rlp|typedef}} declarations and {{rlp|type_alias|alias}} declarations that do not define classes or enumerations
::* using declarations
::* using directives
:* every base class and every non-static member must be initialized, either in the constructors initialization list or by a member brace-or-equal initializer. In addition, every constructor involved must be a constexpr constructor and every clause of every brace-or-equal initializer must be a constant expression
}}{{rev|since=c++14|
:* the constructor body must be either deleted or defaulted or satisfy the following constraints:
::* the compound statement of the constructor body must satisfy the constraints for the body of a constexpr function
::* for the constructor of a {{rlp|class|class or struct}}, every base class sub-object and every {{rlp|union#Union-like classes|non-variant}} non-static data member must be initialized. If the class is a {{rlp|union#Union-like classes|union-like class}}, for each of its non-empty anonymous union members, exactly one variant member must be initialized
::* for the constructor of a non-empty {{rlp|union}}, exactly one non-static data member must be initialized
::* every constructor selected to initializing non-static members and base class must be a constexpr constructor.
:* if the constructor is a defaulted copy/move constructor, the class of which it is a member must not have a mutable variant member
}}
{{rev end}}

For constexpr function templates and constexpr member functions of class templates, at least one specialization must satisfy the abovementioned requirements. Other specializations are still considered as constexpr, even though a call to such a function cannot appear in a constant expression.&lt;!-- e.g. template&lt;class T&gt; struct X { constexpr X(T); }; X&lt;string&gt;::X(string) is a constexpr constructor, so X&lt;string&gt; is a literal type. --&gt;

===Notes===
Because the {{rlp|noexcept}} operator always returns {{tt|true}} for a constant expression, it can be used to check if a particular invocation of a constexpr function takes the constant expression branch:
{{source|1=
constexpr int f(); 
constexpr bool b1 = noexcept(f()); // false, undefined constexpr function
constexpr int f() { return 0; }
constexpr bool b2 = noexcept(f()); // true, f() is a constant expression
}}

Constexpr constructors are permitted for classes that aren't literal types. For example, the default constructor of {{lc|std::unique_ptr}} is constexpr, allowing {{rlp|constant initialization}}.

Reference variables can be declared constexpr (their initializers have to be {{rlp|constant_expression#Reference_constant_expression|reference constant expressions}}):
{{source|1=
static constexpr int const&amp; x = 42; // constexpr reference to a const int object
                                    // (the object has static storage duration
                                    //  due to life extension by a static reference)
}}

===Keywords===

{{ltt|cpp/keyword/constexpr}}

===Example===
{{example |
Definition of a C++11 constexpr function which computes factorials and a literal type that extends string literals:
 | code=
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;

// C++11 constexpr functions use recursion rather than iteration
// (C++14 constexpr functions may use local variables and loops)
constexpr int factorial(int n)
{
    return n &lt;= 1? 1 : (n * factorial(n - 1));
}

// literal class
class conststr {
    const char* p;
    std::size_t sz;
public:
    template&lt;std::size_t N&gt;
    constexpr conststr(const char(&amp;a)[N]): p(a), sz(N - 1) {}
    
    // constexpr functions signal errors by throwing exceptions
    // in C++11, they must do so from the conditional operator ?:
    constexpr char operator[](std::size_t n) const
    {
        return n &lt; sz? p[n] : throw std::out_of_range(&quot;&quot;);
    }
    constexpr std::size_t size() const { return sz; }
};

// C++11 constexpr functions had to put everything in a single return statement
// (C++14 doesn't have that requirement)
constexpr std::size_t countlower(conststr s, std::size_t n = 0,
                                             std::size_t c = 0)
{
    return n == s.size()? c :
           'a' &lt;= s[n] &amp;&amp; s[n] &lt;= 'z'? countlower(s, n + 1, c + 1) :
                                       countlower(s, n + 1, c);
}

// output function that requires a compile-time constant, for testing
template&lt;int n&gt;
struct constN
{
    constN() { std::cout &lt;&lt; n &lt;&lt; '\n'; }
};

int main()
{
    std::cout &lt;&lt; &quot;4! = &quot; ;
    constN&lt;factorial(4)&gt; out1; // computed at compile time

    volatile int k = 8; // disallow optimization using volatile
    std::cout &lt;&lt; k &lt;&lt; &quot;! = &quot; &lt;&lt; factorial(k) &lt;&lt; '\n'; // computed at run time

    std::cout &lt;&lt; &quot;the number of lowercase letters in \&quot;Hello, world!\&quot; is &quot;;
    constN&lt;countlower(&quot;Hello, world!&quot;)&gt; out2; // implicitly converted to conststr
}
 | output=
4! = 24
8! = 40320
the number of lowercase letters in &quot;Hello, world!&quot; is 9
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1911|std=c++14|before=constexpr constructors for non-literal types were not allowed|after=allowed in constant initialization}}
{{dr list item|wg=cwg|dr=2004|std=c++14|before=assignment of a union with a mutable member was allowed in a constant expression|after=mutable variants disqualify implicit copy/move}}
{{dr list item|wg=cwg|dr=2163|std=c++14|before=labels were allowed in constexpr functions even though gotos are prohibited|after=labels also prohibited}}
{{dr list end}}

===See also===
* {{rlp|constant expression}}

[[de:cpp/language/constexpr]]
[[es:cpp/language/constexpr]]
[[fr:cpp/language/constexpr]]
[[it:cpp/language/constexpr]]
[[ja:cpp/language/constexpr]]
[[pt:cpp/language/constexpr]]
[[ru:cpp/language/constexpr]]
[[zh:cpp/language/constexpr]]</text>
      <sha1>afaozkbmd9nx40aed5apefl4e1a23uj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/constraints</title>
    <ns>0</ns>
    <id>13973</id>
    <revision>
      <id>90837</id>
      <parentid>88446</parentid>
      <timestamp>2017-03-12T03:23:12Z</timestamp>
      <contributor>
        <ip>128.3.135.89</ip>
      </contributor>
      <text xml:space="preserve" bytes="29545">{{title|Constraints and concepts}}
{{cpp/language/templates/navbar}}

{{fmbox | class=noprint | style=font-size: 0.8em | text='''Experimental Feature''' The functionality described on this page is part of the Concepts Technical Specification ISO/IEC TS 19217:2015 {{mark since concepts_ts}} }}
{{small|This page describes an experimental core language feature. For named type requirements used in the specification of the standard library, see [[cpp/concept|library concepts]] }}

{{rlp|class template|Class templates}}, {{rlp|function template}}s, and non-template functions (typically members of class templates) may be associated with a ''constraint'', which specifies the requirements on template arguments, which can be used to select the most appropriate function overloads and template specializations.

Constraints may also be used to limit automatic type deduction in variable declarations and function return types to only the types that satisfy specified requirements.

Named sets of such requirements are called ''concepts''. Each concept is a predicate, evaluated at compile time, and becomes a part of the interface of a template where it is used as a constraint:
{{example|code=
#include &lt;string&gt;
#include &lt;locale&gt;
using namespace std::literals;

// Declaration of the concept &quot;EqualityComparable&quot;, which is satisfied by
// any type T such that for values a and b of type T,
// the expression a==b compiles and its result is convertible to bool
template&lt;typename T&gt;
concept bool EqualityComparable = requires(T a, T b) {
    { a == b } -&gt; bool;
};

void f(EqualityComparable&amp;&amp;); // declaration of a constrained function template
// template&lt;typename T&gt;
// void f(T&amp;&amp;) requires EqualityComparable&lt;T&gt;; // long form of the same

int main() {
  f(&quot;abc&quot;s); // OK, std::string is EqualityComparable
  f(std::use_facet&lt;std::ctype&lt;char&gt;&gt;(std::locale{})); // Error: not EqualityComparable &lt;!-- maybe needs a less arcane example, as long as the concept is a simple on-liner.. maybe Incrementable? --&gt;
}
}}

Violations of constraints are detected at compile time, early in the template instantiation process, which leads to easy to follow error messages.
{{source|1=
std::list&lt;int&gt; l = {3,-1,10};
std::sort(l.begin(), l.end()); 
//Typical compiler diagnostic without concepts:
//  invalid operands to binary expression ('std::_List_iterator&lt;int&gt;' and
//  'std::_List_iterator&lt;int&gt;')
//                           std::__lg(__last - __first) * 2);
//                                     &lt;nowiki&gt;~~~~~~ ^ ~~~~~~~&lt;/nowiki&gt;
// ... 50 lines of output ...
//
//Typical compiler diagnostic with concepts:
//  error: cannot call std::sort with std::_List_iterator&lt;int&gt;
//  note:  concept RandomAccessIterator&lt;std::_List_iterator&lt;int&gt;&gt; was not satisfied
}}

The intent of concepts is to model semantic categories (Number, Range, RegularFunction) rather than syntactic restrictions (HasPlus, Array). According to [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t20-avoid-concepts-without-meaningful-semantics ISO C++ core guideline T.20], &quot;The ability to specify a meaningful semantics is a defining characteristic of a true concept, as opposed to a syntactic constraint.&quot;

If feature testing is supported, the features described here are indicated by the macro constant {{c|__cpp_concepts}} with a value equal or greater {{c|201507}}.

===Placeholders===
The unconstrained placeholder {{c|auto}} and ''constrained placeholders'' which have the form {{spar|concept-name}} {{ttb|&lt;}} {{spar|template-argument-list}}{{mark|optional}}{{ttb|&gt;}}, are placeholders for the type that is to be deduced.

Placeholders may appear in variable declarations (in which case they are deduced from the initializer) or in function return types (in which case they are deduced from return statements)

{{source|1=
std::pair&lt;auto, auto&gt; p2 = std::make_pair(0, 'a'); // first auto is int,
                                                   // second auto is char

Sortable x = f(y); // the type of x is deduced from the return type of f, 
                   // only compiles if the type satisfies the constraint Sortable

auto f(Container) -&gt; Sortable; // return type is deduced from the return statement
                               // only compiles if the type satisfies Sortable
}}

Placeholders may also appear in parameters, in which case they turn function declarations into template declarations (constrained if the placeholder is constrained)
{{source|1=
void f(std::pair&lt;auto, EqualityComparable&gt;); // this is a template with two parameters:
       // unconstrained type parameter and a constrained non-type parameter
}}

Constrained placeholders may be used anywhere {{c|auto}} may be used, for example, in generic lambda declarations
{{source|1=
auto gl = [](Assignable&amp; a, auto* b) { a = *b; };
}}

If constrained type specifier designates a non-type or a template, but is used as a constrained placeholder, the program is ill-formed:
{{source|1=
template&lt;size_t N&gt; concept bool Even = (N%2 == 0);
struct S1 { int n; };
int Even::* p2 = &amp;S1::n; // error, invalid use of a non-type concept
void f(std::array&lt;auto, Even&gt;); // error, invalid use of a non-type concept
template&lt;Even N&gt; void f(std::array&lt;auto, N&gt;); // OK
}}

===Abbreviated templates===
If one or more placeholders appears in a function parameter list, the function declaration is actually a function template declaration, whose template parameter list includes one invented parameter for every unique placeholder, in order of appearance

{{source|1=
// short form
void g1(const EqualityComparable*, Incrementable&amp;);
// long form:
// template&lt;EqualityComparable T, Incrementable U&gt; void g1(const T*, U&amp;);
// longer form:
// template&lt;typename T, typename U&gt;
// void g1(const T*, U&amp;) requires EqualityComparable&lt;T&gt; &amp;&amp; Incrementable&lt;U&gt;;

void f2(std::vector&lt;auto*&gt;...);
// long form: template&lt;typename... T&gt; void f2(std::vector&lt;T*&gt;...);

void f4(auto (auto::*)(auto));
// long form: template&lt;typename T, typename U, typename V&gt; void f4(T (U::*)(V));
}}

All placeholders introduced by equivalent constrained type specifiers have the same invented template parameter. However, each unconstrained specifier ({{tt|auto}}) always introduces a different template parameter
{{source|1=
void f0(Comparable a, Comparable* b);
// long form: template&lt;Comparable T&gt; void f0(T a, T* b);

void f1(auto a, auto* b);
// long form: template&lt;typename T, typename U&gt; f1(T a, U* b);
}}

Both function templates and class templates can be declared using a ''template introduction'', which has the syntax {{spar|concept-name}} {{ttb|{}} {{spar|parameter-list}}{{mark optional}}{{ttb|}}}, in which case the keyword {{tt|template}} is not needed: each parameter from the {{spar|parameter-list}} of the template introduction becomes a template parameter whose kind (type, non-type, template) is determined by the kind of the corresponding parameter in the named concept.

Besides declaring a template, template introduction associates a ''predicate constraint'' (see below) that names (for variable concepts) or invokes (for function concepts) the concept named by the introduction.
{{source|1=
EqualityComparable{T} class Foo;
// long form: template&lt;EqualityComparable T&gt; class Foo;
// longer form: template&lt;typename T&gt; requires EqualityComparable&lt;T&gt; class Foo;

template&lt;typename T, int N, typename... Xs&gt; concept bool Example = ...;
Example{A, B, ...C} struct S1;
// long form template&lt;class A, int B, class... C&gt; requires Example&lt;A,B,C...&gt; struct S1;
}}

For function templates, template introduction can be combined with placeholders:
{{source|1=
Sortable{T} void f(T, auto);
// long form: template&lt;Sortable T, typename U&gt; void f(T, U);
// alternative using only placeholders: void f(Sortable, auto);
}}

{{todo|touch up template declaration pages to link here}}

===Concepts===
A concept is a named set of requirements. The definition of a concept appears at namespace scope and has the form of a {{rlp|function template}} definition (in which case it is called ''function concept'') or {{rlp|variable template}} definition (in which case it is called ''variable concept''). The only difference is that the keyword {{c|concept}} appears in the {{spar|decl-specifier-seq}}:
{{source|1=
// variable concept from the standard library (Ranges TS)
template &lt;class T, class U&gt;
concept bool Derived = std::is_base_of&lt;U, T&gt;::value;

// function concept from the standard library (Ranges TS)
template &lt;class T&gt;
concept bool EqualityComparable() { 
    return requires(T a, T b) { {a == b} -&gt; Boolean; {a != b} -&gt; Boolean; };
}
}}
The following restrictions apply to function concepts:
* {{tt|inline}} and {{tt|constexpr}} are not allowed, the function is automatically {{tt|inline}} and {{tt|constexpr}}
* {{tt|friend}} and {{tt|virtual}} are not allowed
* exception specification is not allowed, the function is automatically {{tt|noexcept(true)}}.
* cannot be declared and defined later, cannot be redeclared
* the return type must be {{tt|bool}}
* return type deduction is not allowed
* parameter list must be empty
* the function body must consist of only a {{tt|return}} statement, whose argument must be a ''constraint-expression'' (predicate constraint, conjunction/disjunction of other constraints, or a requires-expression, see below)

The following restrictions apply to variable concepts:
* Must have the type {{tt|bool}}
* Cannot be declared without an initializer
* Cannot be declared or at class scope.
* {{tt|constexpr}} is not allowed, the variable is automatically {{tt|constexpr}}
* the initializer must be a constraint expression (predicate constraint, conjunction/disjunction of constraints, or a requires-expression, see below)

Concepts cannot recursively refer to themselves in the body of the function or in the initializer of the variable:
{{source|1=
template&lt;typename T&gt;
concept bool F() { return F&lt;typename T::type&gt;(); } // error
template&lt;typename T&gt;
concept bool V = V&lt;T*&gt;; // error
}}

Explicit instantiations, explicit specializations, or partial specializations of concepts are not allowed (the meaning of the original definition of a constraint cannot be changed)

===Constraints===
A constraint is a sequence of logical operations that specifies requirements on template arguments. They can appear within ''requires-expression''s (see below) and directly as bodies of concepts

There are 9 types of constraints:
@1@ conjunctions
@2@ disjunctions
@3@ predicate constraints
@4@ expression constraints (only in a ''requires-expression'')
@5@ type constraints (only in a ''requires-expression'')
@6@ implicit conversion constraints (only in a ''requires-expression'')
@7@ argument deduction constraints (only in a ''requires-expression'')
@8@ exception constraints (only in a ''requires-expression'')
@9@ parametrized constraints (only in a ''requires-expression'')

The first three types of constraints may appear directly as the body of a concept or as an ad-hoc requires-clause: 
{{source|1=
template&lt;typename T&gt;
requires // requires-clause (ad-hoc constraint)
sizeof(T) &gt; 1 &amp;&amp; get_value&lt;T&gt;() // conjunction of two predicate constraints
void f(T);
}}

When multiple constraints are attached to the same declaration, the total constraint is a conjunction in the following order: the constraint introduced by ''template introduction'', constraints for each template parameter in order of appearance, the ''requires'' clause after the template parameter list, constraints for each function parameter in order of appearance, trailing ''requires'' clause:
{{source|1=
// the declarations declare the same constrained function template 
// with the constraint Incrementable&lt;T&gt; &amp;&amp; Decrementable&lt;T&gt;
template&lt;Incrementable T&gt; void f(T) requires Decrementable&lt;T&gt;;
template&lt;typename T&gt; requires Incrementable&lt;T&gt; &amp;&amp; Decrementable&lt;T&gt; void f(T); // ok

// the following two declarations have different constraints:
// the first declaration has Incrementable&lt;T&gt; &amp;&amp; Decrementable&lt;T&gt;
// the second declaration has Decrementable&lt;T&gt; &amp;&amp; Incrementable&lt;T&gt;
// Even though they are logically equivalent.
// The second declaration is ill-formed, no diagnostic required

template&lt;Incrementable T&gt; requires Decrementable&lt;T&gt; void g();
template&lt;Decrementable T&gt; requires Incrementable&lt;T&gt; void g(); // error
}}

====Conjunctions====
Conjunction of constraints {{tt|P}} and {{tt|Q}} is specified as {{c|P &amp;&amp; Q}}.

{{source|1=
// example concepts from the standard library (Ranges TS)
template &lt;class T&gt;
concept bool Integral = std::is_integral&lt;T&gt;::value;
template &lt;class T&gt;
concept bool SignedIntegral = Integral&lt;T&gt; &amp;&amp; std::is_signed&lt;T&gt;::value;
template &lt;class T&gt;
concept bool UnsignedIntegral = Integral&lt;T&gt; &amp;&amp; !SignedIntegral&lt;T&gt;;
}}

A conjunction of two constraints is satisfied only if both constraints are satisfied. Conjunctions are evaluated left to right and short-circuited (if the left constraint is not satisfied, template argument substitution into the right constraint is not attempted: this prevents failures due to substitution outside of immediate context). User-defined overloads of {{tt|operator&amp;&amp;}} are not allowed in constraint conjunctions.

====Disjunctions====
Disjunction of constraints {{tt|P}} and {{tt|Q}} is specified as {{c|P {{!!}} Q}}.

A disjunction of two constraints is satisfied if either constraint is satisfied. Disjunctions are evaluated left to right and short-circuited (if the left constraint is satisfied, template argument deduction into the right constraint is not attempted). User-defined overloads of {{tt|operator{{!!}}}} are not allowed in constraint disjunctions.

{{source|1=
// example constraint from the standard library (Ranges TS)
template &lt;class T = void&gt;
requires EqualityComparable&lt;T&gt;() {{!!}} Same&lt;T, void&gt;
struct equal_to;
}}

====Predicate constraints====
A predicate constraint is a constant expression of type {{c|bool}}. It is satisfied only if it evaluates to {{c|true}}
{{source|1=
template&lt;typename T&gt; concept bool Size32 = sizeof(T) == 4;
}}
Predicate constraints can specify requirements on non-type template parameters and on template template arguments.

Predicate constraints must evaluate directly to {{c|bool}}, no conversions allowed:
{{source|1=
template&lt;typename T&gt; struct S {
    constexpr explicit operator bool() const { return true; }
};
template&lt;typename T&gt;
requires S&lt;T&gt;{} // bad predicate constraint: S&lt;T&gt;{} is not bool
void f(T);
f(0); // error: constraint never satisfied
}}

===Requirements===
The keyword {{c|requires}} is used in two ways:
@1@ To introduce a ''requires-clause'', which specifies constraints on template arguments or on a function declaration.
{{source|1=
template&lt;typename T&gt;
void f(T&amp;&amp;) requires Eq&lt;T&gt;; // can appear as the last element of a function declarator

template&lt;typename T&gt; requires Addable&lt;T&gt; // or right after a template parameter list
T add(T a, T b) { return a + b; }
}}
@@ In this case, the keyword ''requires'' must be followed by some constant expression (so it's possible to write &quot;requires true;&quot;), but the intent is that a named concept (as in the example above) or a conjunction/disjunction of named concepts or a ''requires-expression'' is used.
@2@ To begin a ''requires-expression'', which is a prvalue expression of type {{c|bool}} that describes the constraints on some template arguments. Such expression is {{tt|true}} if the corresponding concept is satisfied, and false otherwise:
{{source|1=
template&lt;typename T&gt;
concept bool Addable = requires (T x) { x + x; }; // requires-expression

template&lt;typename T&gt; requires Addable&lt;T&gt; // requires-clause, not requires-expression
T add(T a, T b) { return a + b; }

template&lt;typename T&gt;
requires requires (T x) { x + x; } // ad-hoc constraint, note keyword used twice
T add(T a, T b) { return a + b; }
}}

The syntax of ''requires-expession'' is as follows:
{{sdsc begin}}
{{sdsc|{{ttb|requires}} {{ttb|(}} {{spar|parameter-list}}{{mark optional}} {{ttb|)}} {{ttb|{ }} {{spar|requirement-seq}} {{ttb|} }} }}
{{sdsc end}}
{{par begin}}
{{par | {{spar|parameter-list}} | a comma-separated list of parameters like in a function declaration, except that default arguments are not allowed and the last parameter cannot be an ellipsis. These parameters have no storage, linkage or lifetime. These parameters are in scope until the closing {{ttb|} }} of the {{spar|requirement-seq}}. If no parameters are used, the round parentheses may be omitted as well }}
{{par | {{spar|requirement-seq}} | whitespace-separated sequence of ''requirements'', described below (each requirement ends with a semicolon). Each requirement adds another constraint to the ''conjunction'' of constraints that this requires-expression defines. }}
{{par end}}

Each requirement in the {{spar|requirements-seq}} is one of the following:
* simple requirement
* type requirements
* compound requirements
* nested requirements

Requirements may refer to the template parameters that are in scope and to the local parameters introduced in the {{spar|parameter-list}}. When parametrized, a requires-expression is said to introduce a ''parametrized constraint''

The substitution of template arguments into a requires-expression may result in the formation
of invalid types or expressions in its requirements. In such cases,
* If a substitution failure occurs in a requires-expression that is used outside of a {{rlp|templates#Templated_entity|templated entity}} declaration, then the program is ill-formed.
* If the requires-expression is used in a declaration of a {{rlp|templates#Templated_entity|templated entity}}, the corresponding constraint is treated as &quot;not satisfied&quot; and the {{rlp|sfinae|substitution failure is not an error}}, however
* If a substitution failure would occur in a requires-expression for every possible template argument, the program is ill-formed, no diagnostic required:
{{source|1=
template&lt;class T&gt; concept bool C = requires {
    new int[-(int)sizeof(T)]; // invalid for every T: ill-formed, no diagnostic required
};
}}

====Simple requirements====
A simple requirement is an arbitrary expression statement. The requirement is that the expression is valid (this is an ''expression constraint''). Unlike with predicate constraints, evaluation does not take place, only language correctness is checked.

{{source|1=
template&lt;typename T&gt;
concept bool Addable =
requires (T a, T b) {
    a + b; // &quot;the expression a+b is a valid expression that will compile&quot;
};

// example constraint from the standard library (ranges TS)
template &lt;class T, class U = T&gt;
concept bool Swappable = requires(T t, U u) {
    swap(std::forward&lt;T&gt;(t), std::forward&lt;U&gt;(u));
    swap(std::forward&lt;U&gt;(u), std::forward&lt;T&gt;(t));
};
}}

====Type requirements====
A type requirement is the keyword {{c|typename}} followed by a type name, optionally qualified. The requirement is that the named type exists (a ''type constraint''): this can be used to verify that a certain named nested type exists, or that a class template specialization names a type, or that an alias template names a type.
{{source|1=
template&lt;typename T&gt; using Ref = T&amp;;
template&lt;typename T&gt; concept bool C =
requires {
    typename T::inner; // required nested member name
    typename S&lt;T&gt;;     // required class template specialization
    typename Ref&lt;T&gt;;   // required alias template substitution
};

//Example concept from the standard library (Ranges TS)
template &lt;class T, class U&gt; using CommonType = std::common_type_t&lt;T, U&gt;;
template &lt;class T, class U&gt; concept bool Common =
requires (T t, U u) {
    typename CommonType&lt;T, U&gt;; // CommonType&lt;T, U&gt; is valid and names a type
    { CommonType&lt;T, U&gt;{std::forward&lt;T&gt;(t)} }; 
    { CommonType&lt;T, U&gt;{std::forward&lt;U&gt;(u)} }; 
};
}}

====Compound Requirements====
A compound requirement has the form 
{{sdsc begin}}
{{sdsc|{{ttb|{}} {{spar|expression}} {{ttb|}}} {{ttb|noexcept}}{{mark optional}} {{spar|trailing-return-type}}{{mark optional}} {{ttb|;}} }}
{{sdsc end}}
and specifies a conjunction of the following constraints:
@1@ {{spar|expression}} is a valid expression (''expression constraint'')
@2@ If {{tt|noexcept}} is used, expression must also be noexcept (''exception constraint'')
@3@ If {{spar|trailing-return-type}} that names a type that uses placeholders, the type must be deducible from the type of the expression (''argument deduction constraint'')
@4@ If {{spar|trailing-return-type}} that names a type that does not use placeholders, then two more constraints are added:
:@4a@ the type named by {{spar|trailing-return-type}} is valid (''type constraint'')
:@4b@ the result of the expression is {{rlp|implicit cast|implicitly convertible}} to that type (''implicit conversion constraint'')

{{source|1=
template&lt;typename T&gt; concept bool C2 =
requires(T x) {
    {*x} -&gt; typename T::inner; // the expression *x must be valid
                               // AND the type T::inner must be valid
                               // AND the result of *x must be convertible to T::inner
};

// Example concept from the standard library (Ranges TS)
template &lt;class T, class U&gt; concept bool Same = std::is_same&lt;T,U&gt;::value;
template &lt;class B&gt; concept bool Boolean =
requires(B b1, B b2) {
    { bool(b1) }; // direct initialization constraint has to use expression
    { !b1 } -&gt; bool; // compound constraint
    requires Same&lt;decltype(b1 &amp;&amp; b2), bool&gt;; // nested constraint, see below
    requires Same&lt;decltype(b1 {{!!}} b2), bool&gt;;
};
}}

====Nested requirements====
A nested requirement is another ''requires-clause'', terminated with a semicolon. This is used to introduce ''predicate constraints'' (see above) expressed in terms of other named concepts applied to the local parameters (outside a requires clause, predicate constraints can't use parameters, and placing an expression directly in a requires clause makes it an expression constraint which means it is not evaluated)

{{source|1=
// example constraint from Ranges TS
template &lt;class T&gt;
concept bool Semiregular = DefaultConstructible&lt;T&gt; &amp;&amp;
    CopyConstructible&lt;T&gt; &amp;&amp; Destructible&lt;T&gt; &amp;&amp; CopyAssignable&lt;T&gt; &amp;&amp;
requires(T a, size_t n) {  
    requires Same&lt;T*, decltype(&amp;a)&gt;;  // nested: &quot;Same&lt;...&gt; evaluates to true&quot;
    { a.~T() } noexcept;  // compound: &quot;a.~T()&quot; is a valid expression that doesn't throw
    requires Same&lt;T*, decltype(new T)&gt;; // nested: &quot;Same&lt;...&gt; evaluates to true&quot;
    requires Same&lt;T*, decltype(new T[n])&gt;; // nested
    { delete new T };  // compound
    { delete new T[n] }; // compound
};
}}

===Concept resolution===
Like any other function template, a function concept (but not variable concept) can be overloaded: multiple concept definitions may be provided that all use the same {{spar|concept-name}}.

Concept resolution is performed when a {{spar|concept-name}} (which may be qualified) appears in 
@1@ a constrained type specifier {{c|1=void f(Concept); std::vector&lt;Concept&gt; x = ...;}}
@2@ a constrained parameter {{c|template&lt;Concept T&gt; void f();}}
@3@ a template introduction {{c|Concept{T} struct X;}}
@4@ a ''constraint-expression'' {{c|template&lt;typename T&gt; void f() requires Concept&lt;T&gt;;}}

{{source|1=
template&lt;typename T&gt; concept bool C() { return true; } // #1
template&lt;typename T, typename U&gt; concept bool C() { return true; } // #2
void f(C); // the set of concepts referred to by C includes both #1 and #2;
           // concept resolution (see below) selects #1.
}}

In order to perform concept resolution, ''template parameters'' of each concept that matches the name (and the qualification, if any) is matched against a sequence of ''concept arguments'', which are template arguments and ''wildcards''. A wildcard can match a template parameter of any kind (type, non-type, template). The argument set is constructed differently, depending on the context
@1@ For a concept name used as part of a constrained type specifier or parameter, if the concept name is used without a parameter list, the argument list is a single wildcard.
{{source|1=
template&lt;typename T&gt; concept bool C1() { return true; } // #1
template&lt;typename T, typename U&gt; concept bool C1() { return true; } // #2
void f1(const C1*); // &lt;wildcard&gt; matches &lt;T&gt;, selects #1
}}
@2@ For a concept name used as part of a constrained type specifier or parameter, if the concept name is used with a template argument list, the argument list is a single wildcard followed by that argument list.
{{source|1=
template&lt;typename T&gt; concept bool C1() { return true; } // #1
template&lt;typename T, typename U&gt; concept bool C1() { return true; } // #2
void f2(C1&lt;char&gt;); // &lt;wildcard, char&gt; matches &lt;T, U&gt;, selects #2
}}
@3@ If a concept appears in a template introduction, the argument list is a sequence of placeholders as long as the list of parameters in the template introduction
{{source|1=
template&lt;typename... Ts&gt;
concept bool C3 = true;
C3{T} void q2();     // OK: &lt;T&gt; matches &lt;...Ts&gt;
C3{...Ts} void q1(); // OK: &lt;...Ts&gt; matches &lt;...Ts&gt;
}}
@4@ If a concept appears as the name of a template-id, the concept argument list is exactly the sequence of arguments of that template-id
{{source|1=
template&lt;typename T&gt; concept bool C() { return true; } // #1
template&lt;typename T, typename U&gt; concept bool C() { return true; } // #2

template &lt;typename T&gt;
void f(T) requires C&lt;T&gt;(); // matches #1
}}

Concept resolution is performed by matching each argument against the corresponding parameter of each visible concept. Default template arguments (if used) are instantiated for each paramter that doesn't correspond to an argument, and are then appended to the argument list. Template parameter matches an argument only if it has the same kind (type, non-type, template), unless the argument is a wildcard. A parameter pack matches zero or more arguments as long as all arguments match the pattern in kind (unless they are wildcards).

If any argument does not match its corresponding parameter or if there are more arguments than parameters and the last parameter is not a pack, the concept is not viable. If there is zero or more than one viable concept, the program is ill-formed.

{{source|1=
template&lt;typename T&gt; concept bool C2() { return true; }
template&lt;int T&gt; concept bool C2() { return true; }

template&lt;C2&lt;0&gt; T&gt; struct S1; // error: &lt;wildcard, 0&gt; matches 
                             // neither &lt;typename T&gt; nor &lt;int T&gt;
template&lt;C2 T&gt; struct S2; // both #1 and #2 match: error
}}
{{todo|needs an example with meaningful concepts, not these 'return true' placeholders}}

===Partial ordering of constraints===
Before any further analysis, constraints are ''normalized'' by substituting the body of every name concept and every requires expression until what is left is a sequence of conjunctions and disjunctions on atomic constraints, which are predicate constraints, expression constraints, type constraints, implicit conversion constraints, argument deduction constraints, and exception constraints.

Concept {{tt|P}} is said to ''subsume'' concept {{tt|Q}} if it can be proven that {{tt|P}} [[enwiki:Logical consequence|implies]] {{tt|Q}} without analyzing types and expressions for equivalence (so {{tt|N &gt;{{=}} 0}} does not subsume {{tt|N &gt; 0}})

Specifically, first {{tt|P}} is converted to disjunctive normal form and {{tt|Q}} is converted to conjunctive normal form, and they are compared as follows:
* each atomic constraint {{tt|A}} subsumes equivalent atomic constraint {{tt|A}}
* each atomic constraint {{tt|A}} subsumes a conjunction {{tt|A&amp;&amp;B}} and does not subsume a disjunction {{tt|A{{!!}}B}}
* each disjunction {{tt|A{{!!}}B}} subsumes {{tt|A}}, but a conjunction {{tt|A&amp;&amp;B}} does not subsume {{tt|A}}

Subsumption relationship defines partial order of constraints, which is used to determine:
* the best viable candidate for a non-template function in {{rlp|overload resolution}}
* the {{rlp|overloaded address|address of a non-template function}} in an overload set
* the best match for a template template argument
* partial ordering of class template specializations
* {{rlp|function_template#Function_template_overloading|partial ordering}} of function templates

{{todo|backlinks from the above to here}}

If declarations {{tt|D1}} and {{tt|D2}} are constrained and D1's normalized constraints subsume D2's normalized constraints (or if D1 is constrained and D2 is unconstrained), then D1 is said to be ''at least as constrained'' as D2. If D1 is at least as constrained as D2 and D2 is not at least as constrained as D1, then D1 is ''more constrained'' than D2.

{{source|1=
template&lt;typename T&gt;
concept bool Decrementable = requires(T t) { --t; };
template&lt;typename T&gt;
concept bool RevIterator = Decrementable&lt;T&gt; &amp;&amp; requires(T t) { *t; };

// RevIterator subsumes Decrementable, but not the other way around
// RevIterator is more constrained as Decrementable

void f(Decrementable); // #1
void f(RevIterator);   // #2

f(0);       // int only satisfies Decrementable, selects #1
f((int*)0); // int* satisfies both constraints, selects #2 as more constrained

void g(auto);          // #3 (unconstrained)
void g(Decrementable); // #4

g(true);  // bool does not satisfy Decrementable, selects #3
g(0);     // int satisfies Decrementable, selects #4 because it is more constrained
}}

===Keywords===
{{ltt|cpp/keyword/concept}},
{{ltt|cpp/keyword/requires}}

===Compiler support===
GCC &gt;= 6.1 supports this technical specification (required option {{c|-fconcepts}})

[[de:cpp/language/constraints]]
[[es:cpp/language/constraints]]
[[fr:cpp/language/constraints]]
[[it:cpp/language/constraints]]
[[ja:cpp/language/constraints]]
[[pt:cpp/language/constraints]]
[[ru:cpp/language/constraints]]
[[zh:cpp/language/constraints]]</text>
      <sha1>1bisil2h5w0p6vnetmbu9fzrqlpgzzm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/constructor</title>
    <ns>0</ns>
    <id>13826</id>
    <redirect title="cpp/language/initializer list" />
    <revision>
      <id>73882</id>
      <timestamp>2014-11-20T19:54:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/initializer list]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/language/initializer_list]]</text>
      <sha1>0qhqgkqygw51kxxj0rs4s3m3bu7yonq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/continue</title>
    <ns>0</ns>
    <id>690</id>
    <revision>
      <id>83553</id>
      <parentid>74763</parentid>
      <timestamp>2016-02-25T23:56:39Z</timestamp>
      <contributor>
        <username>Tomalak geretkal</username>
        <id>2346</id>
      </contributor>
      <minor/>
      <comment>Typo</comment>
      <text xml:space="preserve" bytes="2043">{{title|continue statement}}
{{cpp/language/statements/navbar}}
Causes the remaining portion of the enclosing {{rlp|for}}, {{rlp|range-for}}, {{rlp|while}} or {{rlp|do | do-while}} loop body to be skipped.

Used when it is otherwise awkward to ignore the remaining portion of the loop using conditional statements.

===Syntax===

{{sdsc begin}}
{{sdsc | {{spar|attr}}{{mark optional}} {{ttb|continue}} {{ttb|;}} }}
{{sdsc end}}

===Explanation===
The {{tt|continue}} statement causes a jump, as if by {{rlp|goto}} to the end of the loop body (it may only appear within the loop body of {{rlp|for}}, {{rlp|range-for}}, {{rlp|while}}, and {{rlp|do|do-while}} loops).

More precisely, 

For {{rlp|while}} loop, it acts as
{{source|1=
while (/* ... */) {
   // ... 
   continue; // acts as goto contin;
   // ...
   contin:;
}
}}

For {{rlp|do|do-while}} loop, it acts as:
{{source|1=
do {
    // ...
    continue; // acts as goto contin;
    // ...
    contin:;
} while (/* ... */);
}}

For {{rlp|for}} and {{rlp|range-for}} loop, it acts as:
{{source|1=
for (/* ... */) {
    // ...
    continue; // acts as goto contin;
    // ...
    contin:;
}
}}

===Keywords===

{{ltt|cpp/keyword/continue}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;

int main() 
{
    for (int i = 0; i &lt; 10; i++) {
        if (i != 5) continue;
        std::cout &lt;&lt; i &lt;&lt; &quot; &quot;;       //this statement is skipped each time i!=5
    }
    
    std::cout &lt;&lt; '\n';

    for (int j = 0; j &lt; 2; j++) {
        for (int k = 0; k &lt; 5; k++) {   //only this loop is affected by continue
            if (k == 3) continue;
            std::cout &lt;&lt; j &lt;&lt; k &lt;&lt; &quot; &quot;; //this statement is skipped each time k==3
        }
    }
}
 | output=
5
00 01 02 04 10 11 12 14
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/continue}}
{{dsc end}}

[[de:cpp/language/continue]]
[[es:cpp/language/continue]]
[[fr:cpp/language/continue]]
[[it:cpp/language/continue]]
[[ja:cpp/language/continue]]
[[pt:cpp/language/continue]]
[[ru:cpp/language/continue]]
[[zh:cpp/language/continue]]</text>
      <sha1>axfid64lalgb1uclf9us7zskfeummns</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/converting constructor</title>
    <ns>0</ns>
    <id>13759</id>
    <revision>
      <id>87184</id>
      <parentid>82567</parentid>
      <timestamp>2016-08-01T22:00:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0398R0</comment>
      <text xml:space="preserve" bytes="2664">{{title|Converting constructor}}
{{cpp/language/classes/navbar}}

A constructor that is not declared with the specifier {{rlp|explicit}} {{rev inl|until=c++11|and which can be called with a single parameter}} is called a ''converting constructor''.

Unlike explicit constructors, which are only considered during {{rlp|direct initialization}} (which includes {{rlp|explicit cast|explicit conversions}} such as {{rlp|static_cast}}), converting constructors are also considered during {{rlp|copy initialization}}, as part of {{rlp|implicit cast|user-defined conversion sequence}}.

It is said that a converting constructor specifies an implicit conversion from the types of its arguments (if any) to the type of its class. Note that non-explicit {{rlp|cast operator|user-defined conversion function}} also specifies an implicit conversion.

Implicitly-declared and user-defined non-explicit {{rlp|copy constructor}}s and {{rlp|move constructor}}s are converting constructors. 

===Example===
{{example|code=
struct A
{
    A() { }         // converting constructor (since C++11)  
    A(int) { }      // converting constructor
    A(int, int) { } // converting constructor (since C++11)
};

struct B
{
    explicit B() { }
    explicit B(int) { }
    explicit B(int, int) { }
};

int main()
{
    A a1 = 1;      // OK: copy-initialization selects A::A(int)
    A a2(2);       // OK: direct-initialization selects A::A(int)
    A a3{4, 5};    // OK: direct-list-initialization selects A::A(int, int)
    A a4 = {4, 5}; // OK: copy-list-initialization selects A::A(int, int)
    A a5 = (A)1;   // OK: explicit cast performs static_cast, direct-initialization

//  B b1 = 1;      // error: copy-initialization does not consider B::B(int)
    B b2(2);       // OK: direct-initialization selects B::B(int)
    B b3{4, 5};    // OK: direct-list-initialization selects B::B(int, int)
//  B b4 = {4, 5}; // error: copy-list-initialization selected an explicit constructor
                   //        B::B(int, int)
    B b5 = (B)1;   // OK: explicit cast performs static_cast, direct-initialization
    B b6;          // OK, default-initialization
    B b7{};        // OK, direct-list-initialization
//  B b8 = {};     // error: copy-list-initialization selected an explicit constructor
                   //        B::B()
}
}}

[[de:cpp/language/converting constructor]]
[[es:cpp/language/converting constructor]]
[[fr:cpp/language/converting constructor]]
[[it:cpp/language/converting constructor]]
[[ja:cpp/language/converting constructor]]
[[pt:cpp/language/converting constructor]]
[[ru:cpp/language/converting constructor]]
[[zh:cpp/language/converting constructor]]</text>
      <sha1>63hbxredgglmhe3nkw0bla9lk3tg8cw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/copy assignment</title>
    <ns>0</ns>
    <id>9136</id>
    <revision>
      <id>91877</id>
      <parentid>89352</parentid>
      <timestamp>2017-03-31T20:00:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="9522">{{title|Copy assignment operator}}
{{cpp/language/classes/navbar}}

A copy assignment operator of class {{tt|T}} is a non-template non-static member function with the name {{c|operator{{=}}}} that takes exactly one parameter of type {{c|T}}, {{c|T&amp;}}, {{c|const T&amp;}}, {{c|volatile T&amp;}}, or {{c|const volatile T&amp;}}. For a type to be {{concept|CopyAssignable}}, it must have a public copy assignment operator.

===Syntax===
{{sdsc begin}}
{{sdsc |num=1| {{spar|class_name}} {{ttb|&amp;}} {{spar|class_name}} {{ttb|:: operator{{=}}}} ( {{spar|class_name}} ) }} 
{{sdsc |num=2| {{spar|class_name}} {{ttb|&amp;}} {{spar|class_name}} {{ttb|:: operator{{=}}}} ( const {{spar|class_name}} {{tt|&amp;}} ) }} 
{{sdsc |num=3|notes={{mark since c++11}}| {{spar|class_name}} {{ttb|&amp;}} {{spar|class_name}} {{ttb|:: operator{{=}}}} ( const {{spar|class_name}} {{tt|&amp;}} ) {{=}} {{c|default;}} }}
{{sdsc |num=4|notes={{mark since c++11}}| {{spar|class_name}} {{ttb|&amp;}} {{spar|class_name}} {{ttb|:: operator{{=}}}} ( const {{spar|class_name}} {{tt|&amp;}} ) {{=}} {{c|delete;}} }}
{{sdsc end}}

===Explanation===
# Typical declaration of a copy assignment operator when [[cpp/language/operators#Assignment_operator|copy-and-swap idiom]] can be used.
# Typical declaration of a copy assignment operator when copy-and-swap idiom cannot be used (non-swappable type or degraded performance).
# Forcing a copy assignment operator to be generated by the compiler.
# Avoiding implicit copy assignment.

The copy assignment operator is called whenever selected by [[cpp/language/overload_resolution|overload resolution]], e.g. when an object appears on the left side of an assignment expression.

===Implicitly-declared copy assignment operator===
If no user-defined copy assignment operators are provided for a class type ({{c|struct}}, {{c|class}}, or {{c|union}}), the compiler will always declare one as an inline public member of the class. This implicitly-declared copy assignment operator has the form {{c|1=T&amp; T::operator=(const T&amp;)}} if all of the following is true:
* each direct base {{tt|B}} of {{tt|T}} has a copy assignment operator whose parameters are {{c|B}} or {{c|const B&amp;}} or {{c|const volatile B&amp;}};
* each non-static data member {{tt|M}} of {{tt|T}} of class type or array of class type has a copy assignment operator whose parameters are {{c|M}} or {{c|const M&amp;}} or {{c|const volatile M&amp;}}.
Otherwise the implicitly-declared copy assignment operator is declared as {{c|1=T&amp; T::operator=(T&amp;)}}. (Note that due to these rules, the implicitly-declared copy assignment operator cannot bind to a volatile lvalue argument.)

A class can have multiple copy assignment operators, e.g. both {{c|1=T&amp; T::operator=(const T&amp;)}} and {{c|1=T&amp; T::operator=(T)}}. {{rev inl|since=c++11|If some user-defined copy assignment operators are present, the user may still force the generation of the implicitly declared copy assignment operator with the keyword {{tt|default}}.}}

The implicitly-declared (or defaulted on its first declaration) copy assignment operator has an exception specification as described in {{rev inl|until=c++17|{{rlp|except_spec|dynamic exception specification}}}}{{rev inl|since=c++17|{{rlp|noexcept_spec|exception specification}}}}

Because the copy assignment operator is always declared for any class, the base class assignment operator is always hidden. If a {{rlp|using declaration#In class definition|using-declaration}} is used to bring in the assignment operator from the base class, and its argument type could be the same as the argument type of the implicit assignment operator of the derived class, the using-declaration is also hidden by the implicit declaration.

===Deleted implicitly-declared copy assignment operator===
A implicitly-declared copy assignment operator for class {{tt|T}} is defined as ''deleted'' if any of the following is true:
* {{tt|T}} has a user-declared move constructor;
* {{tt|T}} has a user-declared move assignment operator.
Otherwise, it is defined as defaulted. 

A defaulted copy assignment operator for class {{tt|T}} is defined as ''deleted'' if any of the following is true:
* {{tt|T}} has a non-static data member of non-class type (or array thereof) that is {{c|const}};
* {{tt|T}} has a non-static data member of a reference type;
* {{tt|T}} has a non-static data member or a direct or virtual base class that cannot be copy-assigned (overload resolution for the copy assignment fails, or selects a deleted or inaccessible function);
* {{tt|T}} is a [[cpp/language/union#Union-like classes|union-like class]], and has a variant member whose corresponding assignment operator is non-trivial.

===Trivial copy assignment operator===
The copy assignment operator for class {{tt|T}} is trivial if all of the following is true:
* it is not user-provided (meaning, it is implicitly-defined or defaulted){{rev inl|until=c++14|{{mark unreviewed dr|CWG|2171}}, , and if it is defaulted, its signature is the same as implicitly-defined}};
* {{tt|T}} has no virtual member functions;
* {{tt|T}} has no virtual base classes;
* the copy assignment operator selected for every direct base of {{tt|T}} is trivial;
* the copy assignment operator selected for every non-static class type (or array of class type) member of {{tt|T}} is trivial;
{{rev begin}}
{{rev | since=c++14 |
* {{tt|T}} has no non-static data members of {{rlp|cv|volatile}}-qualified type.
}}
{{rev end}}
A trivial copy assignment operator makes a copy of the object representation as if by {{lc|std::memmove}}. All data types compatible with the C language (POD types) are trivially copy-assignable.

===Implicitly-defined copy assignment operator===
If the implicitly-declared copy assignment operator is neither deleted nor trivial, it is defined (that is, a function body is generated and compiled) by the compiler if {{rlp|definition#ODR-use|odr-used}}. For {{c|union}} types, the implicitly-defined copy assignment copies the object representation (as by {{lc|std::memmove}}). For non-union class types ({{c|class}} and {{c|struct}}), the operator performs member-wise copy assignment of the object's bases and non-static members, in their initialization order, using built-in assignment for the scalars and copy assignment operator for class types.

The generation of the implicitly-defined copy assignment operator is deprecated{{mark since c++11}} if {{tt|T}} has a user-declared destructor or user-declared copy constructor.

===Notes===
If both copy and move assignment operators are provided, overload resolution selects the move assignment if the argument is an [[cpp/language/value_category|''rvalue'']] (either a [[cpp/language/value_category|''prvalue'']] such as a nameless temporary or an [[cpp/language/value_category|''xvalue'']] such as the result of {{lc|std::move}}), and selects the copy assignment if the argument is an [[cpp/language/value_category|''lvalue'']] (named object or a function/operator returning lvalue reference). If only the copy assignment is provided, all argument categories select it (as long as it takes its argument by value or as reference to const, since rvalues can bind to const references), which makes copy assignment the fallback for move assignment, when move is unavailable.

It is unspecified whether virtual base class subobjects that are accessible through more than one path in the inheritance lattice, are assigned more than once by the implicitly-defined copy assignment operator (same applies to {{rlp|move assignment}}).

See {{rlp|operators#Assignment_operator|assignment operator overloading}} for additional detail on the expected behavior of a user-defined copy-assignment operator.

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;

struct A
{
    int n;
    std::string s1;
    // user-defined copy assignment, copy-and-swap form
    A&amp; operator=(A other)
    {
        std::cout &lt;&lt; &quot;copy assignment of A\n&quot;;
        std::swap(n, other.n);
        std::swap(s1, other.s1);
        return *this;
    }
};

struct B : A
{
    std::string s2;
    // implicitly-defined copy assignment
};

struct C
{
    std::unique_ptr&lt;int[]&gt; data;
    std::size_t size;
    // non-copy-and-swap assignment
    C&amp; operator=(const C&amp; other)
    {
        // check for self-assignment
        if(&amp;other == this)
            return *this;
        // reuse storage when possible
        if(size != other.size)
        {
            data.reset(new int[other.size]);
            size = other.size;
        }
        std::copy(&amp;other.data[0], &amp;other.data[0] + size, &amp;data[0]);
        return *this;
    }
    // note: copy-and-swap would always cause a reallocation
};

int main()
{
    A a1, a2;
    std::cout &lt;&lt; &quot;a1 = a2 calls &quot;;
    a1 = a2; // user-defined copy assignment

    B b1, b2;
    b2.s1 = &quot;foo&quot;;
    b2.s2 = &quot;bar&quot;;
    std::cout &lt;&lt; &quot;b1 = b2 calls &quot;;
    b1 = b2; // implicitly-defined copy assignment
    std::cout &lt;&lt; &quot;b1.s1 = &quot; &lt;&lt; b1.s1 &lt;&lt; &quot; b1.s2 = &quot; &lt;&lt; b1.s2 &lt;&lt; '\n';
}
| output=
a1 = a2 calls copy assignment of A
b1 = b2 calls copy assignment of A
b1.s1 = foo b1.s2 = bar
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2171|std=C++14|before={{c|1=operator=(X&amp;) = default}} was non-trivial|after=made trivial}}
{{dr list end}}

[[de:cpp/language/as operator]]
[[es:cpp/language/as operator]]
[[fr:cpp/language/as operator]]
[[it:cpp/language/as operator]]
[[ja:cpp/language/as operator]]
[[pt:cpp/language/as operator]]
[[ru:cpp/language/as operator]]
[[zh:cpp/language/as operator]]</text>
      <sha1>t8swgrb2najj80jjj0zokqv7xqzzgfg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/copy constructor</title>
    <ns>0</ns>
    <id>5295</id>
    <revision>
      <id>91794</id>
      <parentid>90054</parentid>
      <timestamp>2017-03-31T19:58:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="7299">{{title|Copy constructors}}
{{cpp/language/classes/navbar}}

A copy constructor of class {{tt|T}} is a non-template constructor whose first parameter is {{c|T&amp;}}, {{c|const T&amp;}}, {{c|volatile T&amp;}}, or {{c|const volatile T&amp;}}, and either there are no other parameters, or the rest of the parameters all have default values.

===Syntax===
{{sdsc begin}}
{{sdsc |num=1| {{spar|class_name}} ( {{c|const}} {{spar|class_name}} {{tt|&amp;}} ) }}
{{sdsc |num=2|note={{mark since c++11}}| {{spar|class_name}} ( {{c|const}} {{spar|class_name}} {{tt|&amp;}} ) {{=}} {{c|default;}} }}
{{sdsc |num=3|note={{mark since c++11}}| {{spar|class_name}} ( {{c|const}} {{spar|class_name}} {{tt|&amp;}} ) {{=}} {{c|delete;}} }}
{{sdsc end}}

===Explanation===
# Typical declaration of a copy constructor.
# Forcing a copy constructor to be generated by the compiler.
# Avoiding implicit generation of the copy constructor.

The copy constructor is called whenever an object is {{rlp|initialization|initialized}} (by {{rlp|direct initialization|direct-initialization}} or {{rlp|copy initialization|copy-initialization}}) from another object of the same type (unless {{rlp|overload resolution}} selects a better match or the call is {{rlp|copy elision|elided}}), which includes
* initialization: {{c|1=T a = b;}} or {{c|1=T a(b);}}, where b is of type {{tt|T}};
* function argument passing: {{c|f(a);}}, where {{tt|a}} is of type {{tt|T}} and {{tt|f}} is {{c|void f(T t)}};
* function return: {{c|return a;}} inside a function such as {{c|T f()}}, where {{tt|a}} is of type {{tt|T}}, which has no move constructor.

===Implicitly-declared copy constructor===
If no user-defined copy constructors are provided for a class type ({{c|struct}}, {{c|class}}, or {{c|union}}), the compiler will always declare a copy constructor as a non-{{rlp|explicit}} {{tt|inline public}} member of its class. This implicitly-declared copy constructor has the form {{c|T::T(const T&amp;)}} if all of the following are true:
* each direct and virtual base {{tt|B}} of {{tt|T}} has a copy constructor whose parameters are {{c|B}} or {{c|const B&amp;}} or {{c|const volatile B&amp;}};
* each non-static data member {{tt|M}} of {{tt|T}} of class type or array of class type has a copy constructor whose parameters are {{c|M}} or {{c|const M&amp;}} or {{c|const volatile M&amp;}}.
Otherwise, the implicitly-declared copy constructor is {{c|T::T(T&amp;)}}. (Note that due to these rules, the implicitly-declared copy constructor cannot bind to a volatile lvalue argument.)

{{rev begin}}
{{rev | since=c++11 |
A class can have multiple copy constructors, e.g. both {{c|T::T(const T&amp;)}} and {{c|T::T(T&amp;)}}. If some user-defined copy constructors are present, the user may still force the generation of the implicitly declared copy constructor with the keyword {{tt|default}}.
}}
{{rev end}}

The implicitly-declared (or defaulted on its first declaration) copy constructor has an exception specification as described in {{rev inl|until=c++17|{{rlp|except_spec|dynamic exception specification}}}}{{rev inl|since=c++17|{{rlp|noexcept_spec|exception specification}}}}

===Deleted implicitly-declared copy constructor===
{{rev begin}}
{{rev | until=c++11 | The implicitly-declared copy constructor for class {{tt|T}} is undefined if any of the following conditions are true:
}}
{{rev | since=c++11 | The implicitly-declared or defaulted copy constructor for class {{tt|T}} is  defined as ''deleted'' if any of the following conditions are true:
}}
{{rev end}}
* {{tt|T}} has non-static data members that cannot be copied (have deleted, inaccessible, or ambiguous copy constructors);
* {{tt|T}} has direct or virtual base class that cannot be copied (has deleted, inaccessible, or ambiguous copy constructors);
* {{tt|T}} has direct or virtual base class with a deleted or inaccessible destructor;
{{rev begin}}
{{rev | since=c++11 |
* {{tt|T}} has a user-defined move constructor or move assignment operator;
* {{tt|T}} is a union and has a variant member with non-trivial copy constructor;
* {{tt|T}} has a data member of rvalue reference type.
}}
{{rev end}}

===Trivial copy constructor===
The copy constructor for class {{tt|T}} is trivial if all of the following are true:
* it is not user-provided (that is, it is implicitly-defined or defaulted){{rev inl|until=c++14|{{mark unreviewed dr|CWG|2171}}, and if it is defaulted, its signature is the same as implicitly-defined}};
* {{tt|T}} has no virtual member functions;
* {{tt|T}} has no virtual base classes;
* the copy constructor selected for every direct base of {{tt|T}} is trivial;
* the copy constructor selected for every non-static class type (or array of class type) member of {{tt|T}} is trivial;

A trivial copy constructor creates a bytewise copy of the object representation of the argument, and performs no other action. {{concept|TriviallyCopyable}} objects can be copied by copying their object representations manually, e.g. with {{lc|std::memmove}}. All data types compatible with the C language (POD types) are trivially copyable.

===Implicitly-defined copy constructor===
If the implicitly-declared copy constructor is neither deleted nor trivial, it is defined (that is, a function body is generated and compiled) by the compiler if {{rlp|definition#ODR-use|odr-used}}. For {{c|union}} types, the implicitly-defined copy constructor copies the object representation (as by {{lc|std::memmove}}). For non-union class types ({{c|class}} and {{c|struct}}), the constructor performs full member-wise copy of the object's bases and non-static members, in their initialization order, using direct initialization.

{{rev begin}}
{{rev | since=c++11 |
The generation of the implicitly-defined copy constructor is deprecated if {{tt|T}} has a user-defined destructor or user-defined copy assignment operator.
}}
{{rev end}}

===Notes===
In many situations, copy constructors are optimized out even if they would produce observable side-effects, see [[cpp/language/copy_elision|copy elision]].

===Example===
{{source|code=
struct A
{
    int n;
    A(int n = 1) : n(n) { }
    A(const A&amp; a) : n(a.n) { } // user-defined copy ctor
};

struct B : A
{
    // implicit default ctor B::B()
    // implicit copy ctor B::B(const B&amp;)
};

struct C : B
{
     C() : B() { }
 private:
     C(const C&amp;); // non-copyable, C++98 style
};

int main()
{
    A a1(7);
    A a2(a1); // calls the copy ctor
    B b;
    B b2 = b;
    A a3 = b; // conversion to A&amp; and copy ctor
    volatile A va(10);
    // A a4 = va; // compile error

    C c;
    // C c2 = c; // compile error
}
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2171|std=C++14|before={{c|1=X(X&amp;) = default}} was non-trivial|after=made trivial}}
{{dr list item|wg=cwg|dr=496|std=C++11|before=structs with volatile members were trivially copyable|after=volatile members make copy non-trivial}}
{{dr list item|wg=cwg|dr=2094|std=C++14|before=volatile members make copy non-trivial|after=structs with volatile members are trivially copyable}}
{{dr list end}}

[[de:cpp/language/copy constructor]]
[[es:cpp/language/copy constructor]]
[[fr:cpp/language/copy constructor]]
[[it:cpp/language/copy constructor]]
[[ja:cpp/language/copy constructor]]
[[pt:cpp/language/copy constructor]]
[[ru:cpp/language/copy constructor]]
[[zh:cpp/language/copy constructor]]</text>
      <sha1>fpr185spi2ctlgl274joi98iq9f6cdu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/copy elision</title>
    <ns>0</ns>
    <id>8872</id>
    <revision>
      <id>91788</id>
      <parentid>90679</parentid>
      <timestamp>2017-03-31T19:58:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="8186">{{title|Copy elision}}
{{cpp/language/navbar}}
Optimizes out copy-{{rev inl|since=c++11| and move-}}constructors, resulting in zero-copy pass-by-value semantics.

===Explanation===
{{rev begin}}
{{rev|since=c++17|
Under the following circumstances, the compilers are required to omit the copy- and move- constructors of class objects even if copy/move constructor and the destructor have observable side-effects:

* In initialization, if the initializer expression is a prvalue and the cv-unqualified version of the source type is the same class as the class of the destination, the initializer expression is used to initialize the destination object:
{{source|1=
T x = T(T(T())); // only one call to default constructor of T, to initialize x
}}

* In a function call, if the operand of a {{rlp|return|return statement}} is a {{rlp|value category|prvalue}} and the return type of the function is the same as the type of that prvalue.
{{source|1=
T f() { return T{}; }
T x = f();         // only one call to default constructor of T, to initialize x
T* p = new T(f()); // only one call to default constructor of T, to initialize *p
}}
}}
{{rev end}}
Under the following circumstances, the compilers are permitted to omit the copy-{{rev inl|since=c++11| and move-}}constructors of class objects even if copy{{rev inl|since=c++11|/move}} constructor and the destructor have observable side-effects.

* If a function returns a class type by value, and the {{rlp|return|return statement}}'s expression is the name of a non-volatile object with automatic storage duration, which isn't the function parameter, or a catch clause parameter, and which has the same type (ignoring top-level [[cpp/language/cv|cv-qualification]]) as the return type of the function, then copy{{rev inl|since=c++11|/move}} is omitted. When that local object is constructed, it is constructed directly in the storage where the function's return value would otherwise be moved or copied to. This variant of copy elision is known as NRVO, &quot;named return value optimization&quot;.

{{rev begin}}
{{rev|until=c++17|
* When a nameless temporary, not bound to any references, would be {{rev inl|since=c++11|moved or}} copied into an object of the same type (ignoring top-level [[cpp/language/cv|cv-qualification]]), the copy{{rev inl|since=c++11|/move}} is omitted. When that temporary is constructed, it is constructed directly in the storage where it would otherwise be {{rev inl|since=c++11|moved or}} copied to. When the nameless temporary is the argument of a return statement, this variant of copy elision is known as RVO, &quot;return value optimization&quot;.
}}
{{rev|since=c++17|
{{small|This optimization is mandatory; see above.}}
}}
{{rev end}}
{{rev begin}}
{{rev|since=c++11|
* In a {{rlp|throw|throw-expression}}, if the operand is the name of a non-volatile object with automatic storage duration, which isn't a function parameter or a catch clause parameter, and whose scope does not extend past the innermost try-block (if there is a try-block), then copy/move is omitted. When that local object is constructed, it is constructed directly in the storage where the exception object would otherwise be moved or copied to.

* When handling an exception, if the argument of the {{rlp|try_catch|catch clause}} is of the same type (ignoring top-level cv-qualification) as the exception object thrown, the copy is omitted and the body of the catch clause accesses the exception object directly, as if caught by reference. This is disabled if such copy elision would change the observable behavior of the program for any reason other than skipping the copy constructor and the destructor of the catch clause's argument (for example, if the catch clause argument is modified, and the exception object is rethrown with {{c|throw;}}). 
}}
{{rev end}}

When copy elision occurs, the implementation treats the source and target of the omitted copy{{rev inl|since=c++11|/move}} operation as simply two different ways of referring to the same object, and the destruction of that object occurs at the later of the times when the two objects would have been destroyed without the optimization {{rev inl|since=c++17|(except that, if the parameter of the selected constructor is an rvalue reference to object type, the destruction occurs when the target would have been destroyed)}}.

Multiple copy elisions may be chained to eliminate multiple copies.

{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|2022}}
* In {{rlp|constant expression}} and {{rlp|constant initialization}}, all copy elision is guaranteed (note: this is by post-C++14 defect report CWG 2022):
{{source|1=
struct A {
    void *p;
    constexpr A(): p(this) {}
};

constexpr A g() {
  A a;
  return a;
}

constexpr A a;        // a.p points to a
constexpr A b = g();  // b.p points to b (NRVO guaranteed)
  
void g() {
  A c = g();          // c.p may point to c or to an ephemeral temporary
}
}}
}}
{{rev end}}

===Notes===
Copy elision is {{rev inl|until=c++14|the only allowed form of optimization}}{{rev inl|since=c++14|one of the two allowed forms of optimization, alongside {{rlp|new#Allocation|allocation elision and extension}},}} that can change the observable side-effects. Because some compilers do not perform copy elision in every situation where it is allowed (e.g., in debug mode), programs that rely on the side-effects of copy/move constructors and destructors are not portable.

{{rev inl|until=c++17|When copy-elision takes place}}{{rev inl|since=c++17|In those cases where copy-elision is not guaranteed, if it takes place}} and the copy-/move-constructor is not called, it still must be present and accessible (as if no optimization happened at all), otherwise the program is ill-formed.

{{rev begin}}
{{rev|since=c++11|
In a return statement or a throw-expression, if the compiler cannot perform copy elision but the conditions for copy elision are met or would be met, except that the source is a function parameter, the compiler will attempt to use the move constructor even if the object is designated by an lvalue; see [[cpp/language/return#Notes|return statement]] for details.
}}
{{rev end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct Noisy
{
    Noisy() { std::cout &lt;&lt; &quot;constructed\n&quot;; }
    Noisy(const Noisy&amp;) { std::cout &lt;&lt; &quot;copy-constructed\n&quot;; }
    Noisy(Noisy&amp;&amp;) { std::cout &lt;&lt; &quot;move-constructed\n&quot;; }
    ~Noisy() { std::cout &lt;&lt; &quot;destructed\n&quot;; }
};

std::vector&lt;Noisy&gt; f()
{
    std::vector&lt;Noisy&gt; v = std::vector&lt;Noisy&gt;(3); // copy elision when initializing
                                                  // v from a temporary
                                                  // (guaranteed in C++17)
    return v; // NRVO from v to the returned nameless temporary (not guaranteed in C++17)
}             // or the move constructor is called if optimizations are disabled

void g(std::vector&lt;Noisy&gt; arg)
{
    std::cout &lt;&lt; &quot;arg.size() = &quot; &lt;&lt; arg.size() &lt;&lt; '\n';
}

int main()
{
    std::vector&lt;Noisy&gt; v = f(); // copy elision in initialization of v
                                // from the result of f() (guaranteed in C++17)
    g(f());                     // copy elision in initialization of the 
                                // parameter of g() from the result of f()
                                // (guaranteed in C++17)
}
 | p=true
 | output=
constructed
constructed
constructed
constructed
constructed
constructed
arg.size() = 3
destructed
destructed
destructed
destructed
destructed
destructed
}}


===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2022|std=C++14|before=copy elision was optional in constant expressions|after=copy elision mandatory}}
{{dr list end}}

===See also===
* [[cpp/language/copy_initialization|copy initialization]]
* [[cpp/language/copy_constructor|copy constructor]]
* [[cpp/language/move_constructor|move constructor]]

[[de:cpp/language/copy elision]]
[[es:cpp/language/copy elision]]
[[fr:cpp/language/copy elision]]
[[it:cpp/language/copy elision]]
[[ja:cpp/language/copy elision]]
[[ko:cpp/language/copy elision]]
[[pt:cpp/language/copy elision]]
[[ru:cpp/language/copy elision]]
[[zh:cpp/language/copy elision]]</text>
      <sha1>afvj61b2my879u7sy0jaml7lcptrs4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/copy initialization</title>
    <ns>0</ns>
    <id>8866</id>
    <revision>
      <id>86349</id>
      <parentid>85904</parentid>
      <timestamp>2016-06-27T20:54:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0135r1 guaranteed copy elision</comment>
      <text xml:space="preserve" bytes="6516">{{title|copy initialization}}
{{cpp/language/initialization/navbar}}
Initializes an object from another object

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{spar|T}} {{spar|object}} {{ttb|{{=}}}} {{spar|other}}{{ttb|;}} }}
{{sdsc | num=2 | notes={{mark until c++11}} | {{spar|T}} {{spar|object}} {{ttb|{{=}}}} {{ttb|{}}{{spar|other}}{{ttb|} }}{{ttb|;}} }}
{{sdsc | num=3 | {{spar|f}}{{ttb|(}}{{spar|other}}{{ttb|)}} }}
{{sdsc | num=4 | {{ttb|return}} {{spar|other}}{{ttb|;}} }}
{{sdsc | num=5 | {{ttb|throw }}{{spar|object}}{{ttb|;}}
{{ttb|catch (}}{{spar|T}} {{spar|object}}{{ttb|)}} }}
{{sdsc | num=6 | {{spar|T}} {{spar|array}}{{ttb|[}}{{spar|N}}{{ttb|] {{=}} {}}{{spar|other}}{{ttb|};}}}}
{{sdsc end}}

===Explanation===

Copy initialization is performed in the following situations:
@1@ when a named variable (automatic, static, or thread-local) of a non-reference type {{tt|T}} is declared with the initializer consisting of an equals sign followed by an expression.
@2@ {{mark until c++11}}when a named variable of a scalar type {{tt|T}} is declared with the initializer consisting of an equals sign followed by a brace-enclosed expression (Note: as of C++11, this is classified as {{rlp|list initialization}}, and narrowing conversion is not allowed).
@3@ when {{rlp|operator_other#Built-in_function_call_operator|passing an argument}} to a function by value
@4@ when {{rlp|return|returning}} from a function that returns by value
@5@ when {{rlp|throw|throwing}} or {{rlp|try catch|catching}} an exception by value
@6@ as part of {{rlp|aggregate_initialization|aggregate initialization}}, to initialize each element for which an initializer is provided

The effects of copy initialization are:

{{rev begin}}
{{rev|since=c++17|
:* First, if {{tt|T}} is a class type and the initializer is a {{rlp|value category|prvalue}} expression whose cv-unqualified type is the same class as {{tt|T}}, the initializer expression itself, rather that a temporary materialized from it, is used to initialize the destination object: see {{rlp|copy elision}}
}}
{{rev end}}

* If {{tt|T}} is a class type and the cv-unqualified version of the type of {{spar|other}} is {{tt|T}} or a class derived from {{tt|T}}, the {{rlp|converting constructor|non-explicit constructors}} of {{tt|T}} are examined and the best match is selected by overload resolution. The constructor is then called to initialize the object.

* If {{tt|T}} is a class type, and  the cv-unqualified version of the type of {{spar|other}} is not {{tt|T}} or derived from {{tt|T}}, or if {{tt|T}} is non-class type, but the type of {{spar|other}} is a class type, [[cpp/language/implicit_cast|user-defined conversion sequences]] that can convert from the type of {{spar|other}} to {{tt|T}} (or to a type derived from T if T is a class type and a conversion function is available) are examined and the best one is selected through overload resolution. The result of the conversion, which is a {{rev inl|until=c++17|prvalue temporary}}{{rev inl|since=c++17|prvalue expression}} if a {{rlp|converting constructor}} was used, is then used to [[cpp/language/direct_initialization|direct-initialize]] the object. {{rev inl|until=c++17|The last step is usually [[cpp/language/copy_elision|optimized out]] and the result of the conversion is constructed directly in the memory allocated for the target object, but the appropriate constructor (move or copy) is required to be accessible even though it's not used.}}

* Otherwise (if neither {{tt|T}} nor the type of {{spar|other}} are class types), [[cpp/language/implicit_cast|standard conversions]] are used, if necessary, to convert the value of {{spar|other}} to the cv-unqualified version of {{tt|T}}.

===Notes===
Copy-initialization is less permissive than direct-initialization: {{rlp|explicit|explicit constructors}} are not {{rlp|converting constructor}}s and are not considered for copy-initialization.
{{source|1=
struct Exp { explicit Exp(const char*) {} }; // not convertible from const char*
Exp e1(&quot;abc&quot;);  // OK
Exp e2 = &quot;abc&quot;; // Error, copy-initialization does not consider explicit constructor

struct Imp { Imp(const char*) {} }; // convertible from const char*
Imp i1(&quot;abc&quot;);  // OK
Imp i2 = &quot;abc&quot;; // OK
}}

In addition, the implicit conversion in copy-initialization must produce {{tt|T}} directly from the initializer, while, e.g. direct-initialization expects an implicit conversion from the initializer to an argument of {{tt|T}}'s constructor.
{{source|1=
struct S { S(std::string) {} }; // implicitly convertible from std::string
S s(&quot;abc&quot;); // OK: conversion from const char[4] to std::string
S s = &quot;abc&quot;; // Error: no conversion from const char[4] to S
S s = &quot;abc&quot;s; // OK: conversion from std::string to S
}}

If {{spar|other}} is an rvalue expression, [[cpp/language/move_constructor|move constructor]] will be selected by overload resolution and called during copy-initialization. There is no such term as move-initialization.

[[cpp/language/implicit_cast|Implicit conversion]] is defined in terms of copy-initialization: if an object of type {{tt|T}} can be copy-initialized with expression {{tt|E}}, then {{tt|E}} is implicitly convertible to {{tt|T}}.

The equals sign, {{ttb|{{=}}}}, in copy-initialization of a named variable is not related to the assignment operator. Assignment operator overloads have no effect on copy-initialization.

===Example===

{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;utility&gt;
#include &lt;memory&gt;

int main()
{
    std::string s = &quot;test&quot;; // OK: constructor is non-explicit
    std::string s2 = std::move(s); // this copy-initialization performs a move

//  std::unique_ptr&lt;int&gt; p = new int(1); // error: constructor is explicit
    std::unique_ptr&lt;int&gt; p(new int(1)); // OK: direct-initialization

    int n = 3.14;    // floating-integral conversion
    const int b = n; // const doesn't matter
    int c = b;       // ...either way
}
 | output=
}}

===See also===
* [[cpp/language/default_initialization|default initialization]]
* [[cpp/language/direct_initialization|direct initialization]]
* [[cpp/language/aggregate_initialization|aggregate initialization]]
* [[cpp/language/list_initialization|list initialization]]

[[de:cpp/language/copy initialization]]
[[es:cpp/language/copy initialization]]
[[fr:cpp/language/copy initialization]]
[[it:cpp/language/copy initialization]]
[[ja:cpp/language/copy initialization]]
[[pt:cpp/language/copy initialization]]
[[ru:cpp/language/copy initialization]]
[[zh:cpp/language/copy initialization]]</text>
      <sha1>mo3hvjukymvxt5g3sviwsbo7t6yhap8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/cv</title>
    <ns>0</ns>
    <id>691</id>
    <revision>
      <id>90590</id>
      <parentid>89619</parentid>
      <timestamp>2017-03-06T15:29:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0612r0 / CH2 gives special powers to volatile glvalue accesses (rather than just volatile objects)  Not revboxing because otherwise the original point of volatile (volatile-qualified pointer to MMIO) fails</comment>
      <text xml:space="preserve" bytes="6722">{{title|cv ({{small|const}} and {{small|volatile}}) type qualifiers}}
{{cpp/language/declarations/navbar}}

Appear in any type specifier, including {{spar|decl-specifier-seq}} of  {{rlp|declarations|declaration grammar}}, to specify constness or volatility of the object being declared or of the type being named.

:*{{ttb|const}} - defines that the type is ''constant''.
:*{{ttb|volatile}} - defines that the type is ''volatile''.
:*{{ttb|mutable}} - applies to non-static {{rlp|data members|class members}} of non-reference non-const type and specifies that the member does not affect the externally visible state of the class (as often used for mutexes, memo caches, lazy evaluation, and access instrumentation). {{tt|mutable}} members of ''const'' class instances are modifiable. (Note: the C++ language grammar treats {{tt|mutable}} as a {{rlp|storage_duration|storage-class-specifier}}, but it does not affect storage class.)

===Explanation===
For any type {{tt|T}} (including incomplete types), other than {{rlp|functions|function type}} or {{rlp|reference|reference type}}, there are three more distinct types in the C++ type system: {{spar|const-qualified}} {{tt|T}}, {{spar|volatile-qualified}} {{tt|T}}, and {{spar|const-volatile-qualified}} {{tt|T}}.

:Note: {{rlp|array|array types}} are considered to have the same cv-qualification as their element types.

When an object is first created, the cv-qualifiers used (which could be part of {{spar|decl-specifier-seq}} or part of a {{spar|declarator}} in a {{rlp|declarations|declaration}}, or part of {{spar|type-id}} in a {{rlp|new|new-expression}}) determine the constness or volatility of the object, as follows:

*'''''const object''''' - an object whose type is {{spar|const-qualified}}, or a non-mutable subobject of a const object. Such object cannot be modified: attempt to do so directly is a compile-time error, and attempt to do so indirectly (e.g., by modifying the const object through a reference or pointer to non-const type) results in undefined behavior.
*'''''volatile object''''' - an object whose type is {{spar|volatile-qualified}}, or a subobject of a volatile object, or a mutable subobject of a const-volatile object. Every access (read or write operation, member function call, etc.) made through a glvalue expression of volatile-qualified type&lt;!--note; until p0612r0/NB comment CH2 on C++17, C++ standard said 'object', rather than 'expression', but this made it impossible to use volatile as intended--&gt; is treated as a visible side-effect for the {{rlp|as_if|purposes of optimization}} (that is, within a single thread of execution, volatile accesses cannot be optimized out or reordered with another visible side effect that is {{rlp|eval order|sequenced-before}} or sequenced-after the volatile access. This makes volatile objects suitable for communication with a [[cpp/utility/program/signal|signal handler]], but not with another thread of execution, see {{lc|std::memory_order}}). Any attempt to refer to a volatile object through a non-volatile [[cpp/language/value_category#glvalue|glvalue]] (e.g. through a reference or pointer to non-volatile type) results in undefined behavior.
*'''''const volatile object''''' - an object whose type is {{spar|const-volatile-qualified}}, a non-mutable subobject of a const volatile object, a const subobject of a volatile object, or a non-mutable volatile subobject of a const object. Behaves as both a const object and as a volatile object.

{{todo|should discuss more about the differences between cv-qualified objects and cv-qualified expressions}}

There is partial ordering of cv-qualifiers by the order of increasing restrictions. The type can be said ''more'' or ''less'' cv-qualified then:

:* ''unqualified'' &lt; {{tt|const}}
:* ''unqualified'' &lt; {{tt|volatile}}
:* ''unqualified'' &lt; {{tt|const volatile}}
:* {{tt|const}} &lt; {{tt|const volatile}}
:* {{tt|volatile}} &lt; {{tt|const volatile}}

References and pointers to cv-qualified types may be {{rlp|implicit_cast#Qualification_conversions | implicitly converted}} to references and pointers to ''more cv-qualified'' types. In particular, the following conversions are allowed:

:* reference/pointer to ''unqualified'' type can be converted to reference/pointer to  {{tt|const}}
:* reference/pointer to ''unqualified'' type can be converted to reference/pointer to {{tt|volatile}}
:* reference/pointer to ''unqualified'' type can be converted to reference/pointer to {{tt|const volatile}}
:* reference/pointer to {{tt|const}} type can be converted to reference/pointer to {{tt|const volatile}}
:* reference/pointer to {{tt|volatile}} type can be converted to reference/pointer to {{tt|const volatile}}

:Note: {{rlp|implicit_cast#Qualification_conversions | additional restrictions}} are imposed on multi-level pointers.

To convert a reference or a pointer to a cv-qualified type to a reference or pointer to a ''less cv-qualified'' type, {{rlp|const_cast}} must be used.

===Keywords===

{{ltt|cpp/keyword/const}}, 
{{ltt|cpp/keyword/volatile}},
{{ltt|cpp/keyword/mutable}}

===Example===
{{example
|code=int main()
{
    int n1 = 0;           // non-const object
    const int n2 = 0;     // const object
    int const n3 = 0;     // const object (same as n2)
    volatile int n4 = 0;  // volatile object
    const struct
    {
        int n1;
        mutable int n2;
    } x = {0, 0};      // const object with mutable member

    n1 = 1; // ok, modifiable object
//  n2 = 2; // error: non-modifiable object
    n4 = 3; // ok, treated as a side-effect
//  x.n1 = 4; // error: member of a const object is const
    x.n2 = 4; // ok, mutable member of a const object isn't const

    const int&amp; r1 = n1; // reference to const bound to non-const object
//  r1 = 2; // error: attempt to modify through reference to const
    const_cast&lt;int&amp;&gt;(r1) = 2; // ok, modifies non-const object n1

    const int&amp; r2 = n2; // reference to const bound to const object
//  r2 = 2; // error: attempt to modify through reference to const
//  const_cast&lt;int&amp;&gt;(r2) = 2; // undefined behavior: attempt to modify const object n2
}
| output=
# typical machine code produced on an x86_64 platform
# (only the code that contributes to observable side-effects is emitted)
main:
    movl    $0, -4(%rsp) # volatile int n4 = 0;
    movl    $3, -4(%rsp) # n4 = 3;
    xorl    %eax, %eax   # return 0 (implicit)
    ret
}}

===See Also===
{{dsc begin}}
{{dsc see c | c/language/const | const qualifier}}
{{dsc see c | c/language/volatile | volatile qualifier}}
{{dsc end}}


[[de:cpp/language/cv]]
[[es:cpp/language/cv]]
[[fr:cpp/language/cv]]
[[it:cpp/language/cv]]
[[ja:cpp/language/cv]]
[[pt:cpp/language/cv]]
[[ru:cpp/language/cv]]
[[zh:cpp/language/cv]]</text>
      <sha1>tkirfa8qcya2gcc6vzynswymb6wyqv5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/data members</title>
    <ns>0</ns>
    <id>9910</id>
    <revision>
      <id>91868</id>
      <parentid>89151</parentid>
      <timestamp>2017-03-31T20:00:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="10627">{{title|Non-static data members}}
{{cpp/language/classes/navbar}}
Non-static data members are declared in a {{rlp|class|member specification}} of a class.

{{source|1=
class S
{
    int n;                // non-static data member
    int&amp; r;               // non-static data member of reference type
    int a[10] = {1, 2};   // non-static data member with initializer (C++11)
    std::string s, *ps;   // two non-static data members
    struct NestedS {
        std::string s;
    } d5, *d6;            // two non-static data members of nested type
    char bit : 2;         // two-bit bitfield
};
}}

Any {{rlp|declarations|simple declarations}} are allowed, except
* {{ltt|cpp/keyword/extern|extern}} and {{ltt|cpp/keyword/register|register}} storage class specifiers are not allowed;
* {{ltt|cpp/keyword/thread local|thread_local}} storage class specifier is not allowed (but it is allowed for {{rlp|static}} data members);
* {{rlp|incomplete type|incomplete types}} are not allowed: in particular, a class {{tt|C}} cannot have a non-static data member of type {{tt|C}}, although it can have a non-static data member of type {{tt|C&amp;}} (reference to C) or {{tt|C*}} (pointer to C);
* a non-static data member cannot have the same name as the name of the class if at least one user-declared constructor is present;
* the {{rlp|auto|auto specifier}} cannot be used in a non-static data member declaration (although it is allowed for static data members that are {{rlp|static#Constant_static_members|initialized in the class definition}}).

In addition, {{rlp|bit_field|bit field declarations}} are allowed.

===Layout===
When an object of some class {{tt|C}} is created, each non-static data member of non-reference type is allocated in some part of the object representation of {{tt|C}}. Whether reference members occupy any storage is implementation-defined, but their {{rlp|storage duration}} is the same as that of the object in which they are members.

For non-{{rlp|union}} class types, members with the same {{rlp|access|member access}} are always allocated so that the members declared later have higher addresses within a class object. Members with different access control are allocated in unspecified order (the compiler may group them together). Alignment requirements may necessitate padding between members, or after the last member of a class.

===Standard layout===
A class where all non-static data members have the same access control and certain other conditions are satisfied is known as ''standard layout type'' (see {{concept|StandardLayoutType}} for the list of requirements).

Two standard-layout non-union class types may have a ''common initial sequence'' of non-static data members{{rev inl|since=c++14| and bit-fields}}, for a sequence of one or more initial members (in order of declaration), if the members have layout-compatible types{{rev inl|since=c++14| and if they are bit-fields, they have the same width}}.
{{source|1=
struct A { int a; char b; };
struct B { const int b1; volatile char b2; }; 
// A and B's common initial sequence is A.a, A.b and B.b1, B.b2
struct C { int c; unsigned : 0; char b; };
// A and C's common initial sequence is A.a and C.c
struct D { int d; char b : 4; };
// A and D's common initial sequence is A.a and D.d
struct E { unsigned int e; char b; };
// A and E's common initial sequence is empty
}}

Two standard-layout non-union class types are called ''layout-compatible'' if they are the same type {{rev inl|since=c++14|ignoring cv-qualifiers, if any}}, are layout-compatible {{rlp|enum|enumerations}}, or if their ''common initial sequence'' consists of every non-static data member{{rev inl|since=c++14| and bit field}} (in the example above, {{tt|A}} and {{tt|B}} are layout-compatible)

Two standard-layout unions are called ''layout-compatible'' if they have the same number of non-static data members and corresponding non-static data members (in any order) have layout-compatible types.

Standard layout types have the following special properties:
{{rev begin}}
{{rev|until=c++14|
:* If a standard-layout {{rlp|union}} holds two (or more) standard-layout structs as members, and these structs have a common initial sequence of data members, it is well-defined to examine any member of that common initial sequence regardless of which member of the union is active.
}}
{{rev|since=c++14|
:* In a standard-layout union with an active member of non-union class type {{tt|T1}}, it is permitted to read a non-static data member {{tt|m}} of another union member of non-union class type {{tt|T2}} provided {{tt|m}} is part of the common initial sequence of {{tt|T1}} and {{tt|T2}} (except that reading a volatile member through non-volatile glvalue is undefined).
}}
{{rev end}}
:* A pointer to an object of standard-layout struct type can be {{rlp|reinterpret_cast}} to pointer to its first non-static data member (if it has non-static data members) or otherwise its first base class subobject (if it has any), and vice versa. (padding is not allowed before the first data member). Note that [[cpp/language/reinterpret_cast#Type_aliasing|strict aliasing]] rules still apply to the result of such cast.
:* The macro {{lc|offsetof}} may be used to determine the offset of any member from the beginning of a standard-layout struct.

===Member initialization===
Non-static data members may be initialized in one of two ways:
@1@ In the {{rlp|initializer_list|member initializer list}} of the constructor.
{{source|1=
struct S
{
    int n;
    std::string s;
    S() : n(7) // direct-initializes n, default-initializes s
    { }
};
}}

{{rev begin}}
{{rev |since=c++11|
@2@ Through a ''default member initializer'', which is simply a brace or equals {{rlp|initialization|initializer}} included in the member declaration, which is used if the member is omitted in the member initializer list
{{source|1=
struct S
{
    int n = 7;
    std::string s{'a', 'b', 'c'};
    S() // copy-initializes n, list-initializes s
    { }
};
}}

If a member has a default member initializer and also appears in the member initialization list in a constructor, the default member initializer is ignored.
{{example|code=
#include &lt;iostream&gt;

int x = 0;
struct S
{
    int n = ++x;
    S() { }                 // uses default member initializer
    S(int arg) : n(arg) { } // uses member initializer list
};

int main()
{
    std::cout &lt;&lt; x &lt;&lt; '\n'; // prints 0
    S s1;
    std::cout &lt;&lt; x &lt;&lt; '\n'; // prints 1 (default initializer ran)
    S s2(7);
    std::cout &lt;&lt; x &lt;&lt; '\n'; // prints 1 (default initializer did not run)
}
|output=
0
1
1
}}
Default member initializers are not allowed for {{rlp|bit field}} members.{{mark unreviewed dr|CWG|1341}}

Members of array type cannot deduce their size from member initializers:
{{source|1=
struct X {
   int a[] = {1,2,3}; // error
   int b[3] = {1,2,3}; // OK
};
}}

Default member initializers are not allowed to cause the implicit definition of a defaulted {{rlp|default constructor}} for the enclosing class or the exception specification of that constructor{{mark unreviewed dr|CWG|1397}}:
{{source|1=
struct node {
    node* p = new node; // error: use of implicit or defaulted node::node() 
};
}}

}}
{{rev|since=c++14|
Reference members cannot be bound to temporaries in a default member initializer (note; same rule exists for [[cpp/language/initializer_list#Explanation|member initializer lists]])
{{source|1=
struct A
{
    A() = default;          // OK
    A(int v) : v(v) { }     // OK
    const int&amp; v = 42;      // OK
};
A a1;    // error: ill-formed binding of temporary to reference
A a2(1); // OK (default member initializer ignored because v appears in a constructor)
         // however a2.v is a dangling reference
}}

Reference members cannot be initialized with a default member initializer if it has a subexpression that would execute aggregate initialization which would use the same initializer:
{{source|1=
struct A;
extern A a;
struct A
{
    const A&amp; a1{ A{a, a} }; // OK
    const A&amp; a2{ A{} };     // error
};
A a{a, a};                  // OK
}}
}}
{{rev end}}

===Usage===
The name of a non-static data member or a non-static member function can only appear in the following three situations:
@1@ As a part of class member access expression, in which the class either has this member or is derived from a class that has this member, including the implicit {{tt|this-&gt;}} member access expressions that appear when a non-static member name is used in any of the contexts where {{rlp|this}} is allowed (inside member function bodies, in member initializer lists, in the in-class default member initializers).
{{source|1=
struct S
{
    int m;
    int n;
    int x = m;            // OK: implicit this-&gt; allowed in default initializers (C++11)
    S(int i) : m(i), n(m) // OK: implicit this-&gt; allowed in member initializer lists
    {
        this-&gt;f();        // explicit member access expression
        f();              // implicit this-&gt; allowed in member function bodies
    }
    void f();
};
}}
@2@ To form a {{rlp|pointer|pointer to non-static member}}.
{{source|1=
struct S
{
   int m;
   void f();
};
int S::*p = &amp;S::m;       // OK: use of m to make a pointer to member
void (S::*fp)() = &amp;S::f; // OK: use of f to make a pointer to member
}}

{{rev begin}}
{{rev|since=c++03|
@3@ (for data members only, not member functions) When used in {{rlp|expressions#Unevaluated_expressions|unevaluated operands}}.
{{source|1=
struct S
{
   int m;
   static const std::size_t sz = sizeof m; // OK: m in unevaluated operand
};
std::size_t j = sizeof(S::m + 42); // OK: even though there is no &quot;this&quot; object for m
}}
}}
{{rev end}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=613|std=C++03|before=unevaluated uses of non-static data members not allowed|after=such uses are allowed}} &lt;!-- gcc in particular supports it in C++03 more and defended this support as intentional in bug report 65890 --&gt;
{{dr list item|wg=cwg|dr=1696|std=C++14|before=reference members could be initialized to temporaries (whose lifetime would end at the end of ctor)|after=such init is ill-formed}}
{{dr list item|wg=cwg|dr=1397|std=C++11|before=class was regarded as complete in the default member initializers|after=default member init cannot trigger definition of default ctor}}
{{dr list item|wg=cwg|dr=1719|std=C++14|before=differently cv-qualified types weren't layout-compatible|after=cv-quals ignored, spec improved}}
{{dr list end}}

===See also===
*{{rlp|classes|classes}}
*{{rlp|static|static data members}}
*{{rlp|member_functions|member functions}}
*{{lc|std::is_standard_layout}}
*{{lc|offsetof}}</text>
      <sha1>f2qh010zxoox1inp44i772xdixf91nh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/declarations</title>
    <ns>0</ns>
    <id>9896</id>
    <revision>
      <id>90758</id>
      <parentid>90593</parentid>
      <timestamp>2017-03-09T12:07:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Specifiers */</comment>
      <text xml:space="preserve" bytes="20462">{{title|Declarations}}
{{cpp/language/declarations/navbar}}
''Declarations'' introduce (or re-introduce) names into the C++ program. Each kind of entity is declared differently. {{rlp|definition|Definitions}} are declarations that are sufficient to use the entity identified by the name. 

A declaration is one of the following:

* [[cpp/language/function#Function definition|Function definition]]
* [[cpp/language/templates|Template declaration]]
* [[cpp/language/class_template#Explicit_instantiation|Explicit template instantiation]]
* [[cpp/language/template_specialization|Explicit template specialization]]
* [[cpp/language/namespace|Namespace definition]]
* [[cpp/language/language_linkage|Linkage specification]]
* Attribute declaration ({{spar|[[cpp/language/attributes|attr]]}} {{ttb|;}}) {{mark since c++11}}
* Empty declaration ({{ttb|;}}) {{mark since c++11}}
* A function declaration without a {{spar|decl-specifier-seq}}:
{{sdsc begin}}
{{sdsc begin}}
{{sdsc|1=
{{spar|attr}}{{mark optional}} {{spar|declarator}} {{ttb|;}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}} {{mark since c++11}} | sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|declarator}} | A function declarator. }}
{{par end}}
: This declaration must declare a constructor, destructor, or user-defined type {{rlp|cast_operator|conversion function}}. It can only be used as part of a [[cpp/language/templates|template declaration]], [[cpp/language/template_specialization|explicit specialization]], or explicit instantiation.
* Block declaration (a declaration that can appear inside a [[cpp/language/statements#Compound_statement|block]]), which, in turn, can be one of the following:
:*[[cpp/language/asm|asm definition]]
:*[[cpp/language/type_alias|type alias declaration]] {{mark since c++11}}
:*[[cpp/language/namespace_alias|namespace alias definition]]
:*[[cpp/language/using_declaration|using declaration]]
:*[[cpp/language/namespace#Using-directives|using directive]]
:*{{rlp|static_assert}} declaration {{mark since c++11}}
:*[[cpp/language/enum|opaque enum declaration]] {{mark since c++11}}
:*simple declaration

===Simple declaration===

A simple declaration is a statement that introduces, creates, and optionally initializes one or several identifiers, typically variables.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|decl-specifier-seq}} {{spar|init-declarator-list}}{{mark optional}} {{ttb|;}}
}}
{{sdsc|num=2|1=
{{spar|attr}} {{spar|decl-specifier-seq}} {{spar|init-declarator-list}}{{ttb|;}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}} {{mark since c++11}} | sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|decl-specifier-seq}} | sequence of ''specifiers'' (see below).}}
{{par | {{spar|init-declarator-list}} | comma-separated list of ''declarators'' with optional ''initializers''. {{spar|init-declarator-list}} is optional when declaring a named class/struct/union or a named enumeration }}
{{par end}}

{{rev inl | since=c++17 | A [[#Structured binding declaration|structured binding declaration]] is also a simple declaration.}}

===Specifiers===

&lt;b&gt;Declaration specifiers&lt;/b&gt; ({{spar|decl-specifier-seq}}) is a sequence of the following whitespace-separated specifiers, in any order:

* {{rlp|typedef|typedef specifier}}. If present, the entire declaration is a [[cpp/language/typedef|typedef declaration]] and each declarator introduces a new type name, not an object or a function.
* function specifier ([[cpp/keyword/inline|inline]], [[cpp/keyword/virtual|virtual]], [[cpp/keyword/explicit|explicit]]), only allowed in {{rlp|function|function declarations}}

{{rev begin}}
{{rev|since=c++17|
* the [[cpp/keyword/inline|inline]] specifier is also allowed on variable declarations.
}}
{{rev end}}
* {{rlp|friend|friend specifier}}, allowed in class and function declarations.
* {{rlp|constexpr|constexpr specifier}}, only allowed in variable definitions, function and function template declarations, and the declaration of static data members of literal type.
* {{rlp|storage duration|storage class specifier}} ([[cpp/keyword/register|register]], [[cpp/keyword/static|static]], {{rev inl|since=c++11|[[cpp/keyword/thread_local|thread_local]]}}, [[cpp/keyword/extern|extern]], [[cpp/keyword/mutable|mutable]]). Only one storage class specifier is allowed, except that {{tt|thread_local}} may appear together with {{tt|extern}} or {{tt|static}}.
* &lt;b&gt;Type specifiers&lt;/b&gt; ({{spar|type-specifier-seq}}), a sequence of specifiers that names a type. The type of every entity introduced by the declaration is this type, optionally modified by the declarator (see below). This sequence of specifiers is also used by {{rlp|type#Type_naming|type-id}}. Only the following specifiers are part of {{spar|type-specifier-seq}}, in any order:
:* {{rlp|class|class specifier}}
:* {{rlp|enum|enum specifier}}
:* simple type specifier
::*[[cpp/keyword/char|char]]{{rev inl|since=c++11|, [[cpp/keyword/char16_t|char16_t]], [[cpp/keyword/char32_t|char32_t]]}}, [[cpp/keyword/wchar_t|wchar_t]], [[cpp/keyword/bool|bool]], [[cpp/keyword/short|short]], [[cpp/keyword/int|int]], [[cpp/keyword/long|long]], [[cpp/keyword/signed|signed]], [[cpp/keyword/unsigned|unsigned]], [[cpp/keyword/float|float]], [[cpp/keyword/double|double]], [[cpp/keyword/void|void]]
{{rev begin}}
{{rev|since=c++11|
::*{{rlp|auto}}
::*{{rlp|decltype|decltype specifier}}
}}{{rev end}}
::* previously declared class name (optionally {{rlp|identifiers#Qualified identifiers|qualified}})
::* previously declared enum name (optionally {{rlp|identifiers#Qualified identifiers|qualified}})
::* previously declared {{rlp|typedef|typedef-name}}{{rev inl|since=c++11| or {{rlp|type alias}}}} (optionally {{rlp|identifiers#Qualified identifiers|qualified}})
::* template name with template arguments (optionally {{rlp|identifiers#Qualified identifiers|qualified}}, optionally using {{rlp|dependent_name|template disambiguator}})
{{rev begin}}
{{rev|since=c++17|
::*template name without template arguments (optionally {{rlp|identifiers#Qualified identifiers|qualified}}): see {{rlp|class template deduction}}
}}{{rev end}}
:* {{rlp|elaborated type specifier}}
::* the keyword [[cpp/keyword/class|class]], [[cpp/keyword/struct|struct]], or [[cpp/keyword/union|union]], followed by the identifier (optionally {{rlp|identifiers#Qualified identifiers|qualified}}), previously defined as the name of a class, struct, or union.
::* the keyword [[cpp/keyword/class|class]], [[cpp/keyword/struct|struct]], or [[cpp/keyword/union|union]], followed by template name with template arguments (optionally {{rlp|identifiers#Qualified identifiers|qualified}}, optionally using {{rlp|dependent_name|template disambiguator}}), previously defined as the name of a class template.
::* the keyword [[cpp/keyword/enum|enum]] followed by the identifier (optionally {{rlp|identifiers#Qualified identifiers|qualified}}), previously declared as the name of an enumeration.
:* {{rlp|dependent_name|typename specifier}}
:* {{rlp|cv|cv qualifier}}
:only one type specifier is allowed in a decl-specifier-seq, with the following exceptions:
:- {{tt|const}} can be combined with any type specifier except itself.
:- {{tt|volatile}} can be combined with any type specifier except itself.
:- {{tt|signed}} or {{tt|unsigned}} can be combined with {{tt|char}}, {{tt|long}}, {{tt|short}}, or {{tt|int}}.
:- {{tt|short}} or {{tt|long}} can be combined with {{tt|int}}.
:- {{tt|long}} can be combined with {{tt|double}}.
{{rev begin}}
{{rev|since=c++11|
:- {{tt|long}} can be combined with {{tt|long}}.
}}{{rev end}}

[[cpp/language/attributes|Attributes]] may appear in {{spar|decl-specifier-seq}}, in which case they apply to the type determined by the preceding specifiers.

{{rev begin}}
{{rev|since=c++17|
The only specifier that is allowed to appear twice in a {{spar|decl-specifier-seq}} is {{tt|long}} (which can appear twice in a row). All other repeats, such as {{tt|const static const}}, or {{tt|virtual inline virtual}} are errors.
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
===Structured binding declaration===
{{sdsc begin}}
{{sdsc|notes={{mark since c++17}}|num=1|1=
{{spar|attr}}{{mark optional}} {{spar|cv-auto}} {{spar|ref-operator}}{{mark optional}} {{ttb|[}} {{spar|identifier-list}} {{ttb|]}} {{ttb|{{=}}}} {{spar|expression}} {{ttb|;}}
}}
{{sdsc|notes={{mark since c++17}}|num=2|1=
{{spar|attr}}{{mark optional}} {{spar|cv-auto}} {{spar|ref-operator}}{{mark optional}} {{ttb|[}} {{spar|identifier-list}} {{ttb|]}} {{ttb|{ }} {{spar|expression}} {{ttb|} }} {{ttb|;}}
}}
{{sdsc|notes={{mark since c++17}}|num=3|1=
{{spar|attr}}{{mark optional}} {{spar|cv-auto}} {{spar|ref-operator}}{{mark optional}} {{ttb|[}} {{spar|identifier-list}} {{ttb|]}} {{ttb|( }} {{spar|expression}} {{ttb|) }} {{ttb|;}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}} | sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|cv-auto}} | possibly cv-qualified type specifier {{ttb|auto}} }}
{{par | {{spar|ref-operator}} | either {{ttb|&amp;}} or {{ttb|&amp;&amp;}} }}
{{par | {{spar|identifier-list}}| list of comma-separated identifiers (structured bindings) introduced by this declaration}}
{{par | {{spar|expression}}| an expression that does not have the comma operator at the top level, and has either array or non-union class type}}
{{par end}}

A structured binding declaration introduces all identifiers in the {{spar|identifier-list}} as names (called ''structured bindings'') and binds them to subobjects or elements of the object returned by {{spar|expression}}, as follows:

* First, a uniquely-named variable {{ttb|''e''}} is introduced as follows:
:* If {{spar|expression}} has array type {{tt|A}} and no {{spar|ref-operator}} is present, then {{ttb|''e''}} has type ''cv'' {{tt|A}}, where ''cv'' is the cv-qualifiers in the {{spar|cv-auto}} sequence, and each element of {{ttb|''e''}} is copy- (for {{v|1}}) or direct- (for {{v|2,3}}) initialized from the corresponding element of {{spar|expression}}.
:* Otherwise {{ttb|''e''}} is defined as if by using its name instead of {{ttb|[}} {{spar|identifier-list}} {{ttb|]}} in the declaration.
:: Let {{ttb|''E''}} denote type of the expression {{c|e}} (note that {{ttb|''E''}} is never a reference type).
* If {{ttb|''E''}} is an array type whose element type is {{tt|T}}, then each identifier in {{spar|identifier-list}} becomes the name of an lvalue that refers to the corresponding element of the array. The ''referenced type'' for each identifier is {{tt|T}} (note that if {{ttb|''E''}} is cv-qualified, so is {{tt|T}}). The number of identifiers must equal the number of array elements:
{{source|1=
int a[2] = {1,2};
auto f() -&gt; int(&amp;)[2] { return a; }

auto [x,y] = f(); // creates e[2], copies a into e, then x refers to e[0], y refers to e[1]
auto&amp; [xr, yr] = f(); // xr refers to a[0], yr refers to a[1]
}}

* Otherwise (if {{spar|expression}} has non-union class type),
:* If {{c|std::tuple_size&lt;E&gt;}} names a complete type (e.g. {{ttb|''E''}} is a specialization of {{lc|std::pair}}, {{lc|std::tuple}}, or {{lc|std::array}}), then first, the identifier {{tt|get}} is looked up in the scope of {{ttb|''E''}} by class member access lookup. If that finds at least one declaration, each identifier in {{spar|identifier-list}} is initialized by the expression {{c|e.get&lt;i&gt;()}}. Otherwise, each identifier in {{spar|identifier-list}} is initialized by the expression {{c|get&lt;i&gt;(e)}}, where {{c|get}} is looked up by {{rlp|adl|ADL}} only, ignoring non-ADL lookup. In these expressions, {{c|e}} is an lvalue if the type of the entity {{ttb|''e''}} is an lvalue reference and an xvalue otherwise, and {{c|&lt;i&gt;}} is always interpreted as a template parameter list. Each identifier becomes a variable whose type is reference to {{c|std::tuple_element&lt;i,E&gt;::type}}: lvalue reference if its corresponding initializer is an lvalue, rvalue reference otherwise. The ''referenced type'' for the i-th identifier is {{c|std::tuple_element&lt;i, E&gt;::type}}. The expression {{c|std::tuple_size&lt;E&gt;::value}} must be a well-formed integer constant expression, and the number of identifiers must equal {{c|std::tuple_size&lt;E&gt;::value}}.
{{source|1=
std::set&lt;string&gt; myset;
if (auto [iter, success] = myset.insert(&quot;Hello&quot;); success) 
    do_something_with(iter);
}}
:* Otherwise (if {{ttb|''E''}} is a type for which {{lc|std::tuple_size}} is not defined), every non-static data member of {{ttb|''E''}} must be a public direct member of {{ttb|''E''}} or the same unambiguous public base of {{ttb|''E''}}, and {{ttb|''E''}} may not have any anonymous union member. Each identifier in {{spar|identifier-list}} becomes an lvalue that refers to the next member of {{ttb|''e''}} in declaration order (bit fields are supported); the type of the lvalue is {{tt|''cv'' T_i}}, where {{tt|''cv''}} is the cv-qualifiers of &lt;!--the {{tt|auto}} specifier--&gt; {{ttb|''E''}}&lt;!--- this intentionally differs from N4606 --&gt;  and {{tt|T_i}} is the declared type of the i-th member. The ''referenced type'' of the i-th identifier is {{tt|''cv'' T_i}}. The number of identifiers must equal the number of non-static data members.
{{source|1=
struct S {
    int x1 : 2;
    volatile double y1;
};
S f();

const auto [x, y] = f(); // x is a const int lvalue identifying the 2-bit bit field
                         // y is a const volatile double lvalue
}}
The ''referenced type'' defined above is the type returned by {{rlp|decltype|{{tt|decltype}}}} when applied to an unparenthesized structured binding.
}}
{{rev end}}

===Declarators===
{{spar|init-declarator-seq}} is a comma-separated sequence of one or more {{spar|init-declarators}}, which have the following syntax:

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|declarator}} {{spar|initializer}}{{mark optional}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|declarator}} | the declarator}}
{{par | {{spar|initializer}} | optional initializer (except where required, such as when initializing references or const objects). See [[cpp/language/initialization|Initialization]] for details.}}
{{par end}}

Each {{spar|init-declaractor}} in a init-declarator sequence {{c|S D1, D2, D3;}} is processed as if it were a standalone declaration with the same specifiers: {{c|S D1; S D2; S D3;}}.

Each declarator introduces exactly one object, reference, function, or (for typedef declarations) type alias, whose type is provided by {{spar|decl-specifier-seq}} and optionally modified by operators such as {{c|&amp;}} (reference to) or {{c|[]}} (array of) or {{c|()}} (function returning) in the declarator. These operators can be applied recursively, as shown below.

A {{spar|declarator}} is one of the following:
{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|unqualified-id}} {{spar|attr}}{{mark optional}}
}}
{{sdsc|num=2|1=
{{spar|qualified-id}} {{spar|attr}}{{mark optional}}
}}
{{sdsc|num=3|notes={{mark since c++11}}|1=
{{ttb|...}} {{spar|identifier}} {{spar|attr}}{{mark optional}}
}}
{{sdsc|num=4|1=
{{ttb|*}} {{spar|attr}}{{mark optional}} {{spar|cv}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc|num=5|1=
{{spar|nested-name-specifier}} {{ttb|*}} {{spar|attr}}{{mark optional}} {{spar|cv}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc|num=6|1=
{{ttb|&amp;}} {{spar|attr}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc|num=7|notes={{mark since c++11}}|1=
{{ttb|&amp;&amp;}} {{spar|attr}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc|num=8|1=
{{spar|noptr-declarator}} {{ttb|[}} {{spar|constexpr}}{{mark optional}} {{ttb|]}} {{spar|attr}}{{mark optional}}
}}
{{sdsc|num=9|1=
{{spar|noptr-declarator}} {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} {{spar|cv}}{{mark optional}} {{spar|ref}}{{mark optional}} {{spar|except}}{{mark optional}} {{spar|attr}}{{mark optional}}
}}
{{sdsc end}}

@1@ The {{rlp|name}} that is declared.
@2@ A declarator that uses a {{rlp|identifiers#Qualified_identifiers|qualified identifier}} ({{spar|qualified-id}}) defines or redeclares a previously declared  {{rlp|namespace#Namespaces|namespace member}} or {{rlp|classes|class member}}.
@3@ [[cpp/language/parameter pack|Parameter pack]], only appears in function parameter lists for variadic function templates.
@4@ [[cpp/language/pointer|Pointer declarator]]: the declaration {{c|S * D;}} declares {{tt|D}} as a pointer to the type determined by {{spar|decl-specifier-seq}} {{tt|S}}.
@5@ [[cpp/language/pointer|Pointer to member declaration]]: the declaration {{c|S C::* D;}} declares {{tt|D}} as a pointer to member of {{tt|C}} of type determined by {{spar|decl-specifier-seq}} {{tt|S}}. {{spar|nested-name-specifier}} is a {{rlp|identifiers#Qualified identifiers|sequence of names and scope resolution operators {{ttb|::}}}}
@6@ [[cpp/language/reference|Lvalue reference declarator]]: the declaration {{c|S &amp; D;}} declares {{tt|D}} as an lvalue reference to the type determined by {{spar|decl-specifier-seq}} {{tt|S}}.
@7@ [[cpp/language/reference|Rvalue reference declarator]]: the declaration {{c|S &amp;&amp; D;}} declares {{tt|D}} as an rvalue reference to the type determined by {{spar|decl-specifier-seq}} {{tt|S}}.
@8@ [[cpp/language/array|Array declarator]]. {{spar|noptr-declarator}} any valid declarator, but if it begins with *, &amp;, or &amp;&amp;, it has to be surrounded by parentheses.
@9@ [[cpp/language/function|Function declarator]]. {{spar|noptr-declarator}} any valid declarator, but if it begins with *, &amp;, or &amp;&amp;, it has to be surrounded by parentheses. Note that the outermost function declarator may end with the optional trailing return type. 

In all cases, {{spar|attr}} is an optional sequence of {{rlp|attributes}}. When appearing immediately after the identifier, it applies to the object being declared.

{{spar|cv}} is a sequence of {{rlp|cv|const and volatile}} qualifiers, where either qualifier may appear at most once in the sequence.

{{todo|explain declaration name hiding rules; how a variable/function declaration hides a class (but not a typedef) with the same name}}

===Notes===
When a block declaration appears {{rlp|statements#Compound statements|inside a block}}, and an identifier introduced by a declaration was previously declared in an outer block, the {{rlp|scope|outer declaration is hidden}} for the remainder of the block. 

If a declaration introduces a variable with automatic storage duration, it is initialized when its declaration statement is executed. All automatic variables declared in a block are destroyed on exit from the block (regardless how the block is exited: via {{rlp|exceptions|exception}}, {{rlp|goto}}, or by reaching its end), in order opposite to their order of initialization.

===Examples===
{{example|
|code=
class C {
    std::string member; // decl-specifier-seq is &quot;std::string&quot;
                        // declarator is &quot;member&quot;
} obj, *pObj(&amp;obj);
// decl-specifier-seq is &quot;class C { std::string member; }&quot;
// declarator &quot;obj&quot; defines an object of type C
// declarator &quot;*pObj(&amp;obj)&quot; declares and initializes a pointer to C

int a = 1, *p = NULL, f(), (*pf)(double);
// decl-specifier-seq is int
// declarator a=1 defines and initializes a variable of type int
// declarator *p=NULL defines and initializes a variable of type int*
// declarator (f)() declares (but doesn't define)
//                  a function taking no arguments and returning int
// declarator (*pf)(double) defines a pointer to function
//                  taking double and returning int

int (*(*foo)(double))[3] = NULL;
// decl-specifier-seq is int
// 1. declarator &quot;(*(*foo)(double))[3]&quot; is an array declarator:
//    the type declared is &quot;/nested declarator/ array of 3 int&quot;
// 2. the nested declarator is &quot;(*(*foo)(double))&quot;, which is a pointer declarator
//    the type declared is &quot;/nested declarator/ pointer to array of 3 int&quot;
// 3. the nested declarator is &quot;(*foo)(double)&quot;, which is a function declarator
//    the type declared is &quot;/nested declarator/ function taking double and returning
//        pointer to array of 3 int&quot;
// 4. the nested declarator is &quot;(*foo)&quot; which is a (parenthesized, as required by
//        function declarator syntax) pointer declarator.
//    the type declared is &quot;/nested declarator/ pointer to function taking double
//        and returning pointer to array of 3 int&quot;
// 5. the nested declarator is &quot;foo&quot;, which is an identifier.
// The declaration declares the object foo of type &quot;pointer to function taking double 
//     and returning pointer to array of 3 int&quot;
// The initializer &quot;= NULL&quot; provides the initial value of this pointer.
}}</text>
      <sha1>nxu10qwmdztky89md554mpp7nqer8k4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/decltype</title>
    <ns>0</ns>
    <id>3275</id>
    <revision>
      <id>90597</id>
      <parentid>87606</parentid>
      <timestamp>2017-03-06T15:45:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0615R0 renamed decomposition declaration back to structured binding</comment>
      <text xml:space="preserve" bytes="3614">{{title|decltype specifier}}
{{cpp/language/declarations/navbar}}

Inspects the declared type of an entity or the type and value category of an expression.

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|decltype (}} {{spar|entity}} {{ttb|)}} | num=1 | notes={{mark since c++11}}}}
{{sdsc | {{ttb|decltype (}} {{spar|expression}} {{ttb|)}} | num=2| notes={{mark since c++11}}}}
{{sdsc end}}

===Explanation===
{{rev begin}}
{{rev | since=c++17 |
@1@If the argument is an unparenthesized {{rlp|identifiers|id-expression}} naming a {{rlp|declarations#Structured_binding_declaration|structured binding}}, then decltype yields the ''referenced type'' (described in the specification of the structured binding declaration).
}}
{{rev end}}
@2@ If the argument is an unparenthesized {{rlp|identifiers|id-expression}} or an unparenthesized {{rlp|operator member access|class member access}} expression, then decltype yields the type of the {{spar|entity}} named by this expression. If there is no such entity, or if the argument names a set of overloaded functions, the program is ill-formed.
@3@ If the argument is any other expression of type {{tt|T}}, and
:@a@ if the [[cpp/language/value_category|value category]] of {{spar|expression}} is ''xvalue'', then decltype yields {{tt|T&amp;&amp;}};
:@b@ if the value category of {{spar|expression}} is ''lvalue'', then decltype yields {{tt|T&amp;}};
:@c@ if the value category of {{spar|expression}} is ''prvalue'', then decltype yields {{tt|T}}.

If {{spar|expression}} is a function call which returns a prvalue of class type or is a {{rlp|operator other|comma expression}} whose right operand is such a function call, a temporary object is not {{rev inl|until=c++17|introduced for}}{{rev inl|since=c++17|{{rlp|implicit_cast#Temporary_materialization|materialized}} from}} that prvalue. The class type need not be {{rlp|incomplete type|complete}} or have an available {{rlp|destructor}}. This rule doesn't apply to sub-expressions: in {{c|decltype(f(g()))}}, {{c|g()}} must have a complete type, but {{c|f()}} need not.

Note that if the name of an object is parenthesized, it is treated as an ordinary lvalue expression, thus {{c|decltype(x)}} and {{c|decltype((x))}} are often different types.

{{tt|decltype}} is useful when declaring types that are difficult or impossible to declare using standard notation, like lambda-related types or types that depend on template parameters.

===Keywords===
{{ltt|cpp/keyword/decltype}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;

struct A { double x; };
const A* a = new A{0};

decltype(a-&gt;x) y;       // type of y is double (declared type)
decltype((a-&gt;x)) z = y; // type of z is const double&amp; (lvalue expression)

template&lt;typename T, typename U&gt;
auto add(T t, U u) -&gt; decltype(t + u); // return type depends on template parameters

int main() 
{
    int i = 33;
    decltype(i) j = i * 2;
   
    std::cout &lt;&lt; &quot;i = &quot; &lt;&lt; i &lt;&lt; &quot;, &quot;
              &lt;&lt; &quot;j = &quot; &lt;&lt; j &lt;&lt; '\n';

    auto f = [](int a, int b) -&gt; int
    {
        return a * b;
    };
   
    decltype(f) g = f; // the type of a lambda function is unique and unnamed
    i = f(2, 2);
    j = g(3, 3);
   
    std::cout &lt;&lt; &quot;i = &quot; &lt;&lt; i &lt;&lt; &quot;, &quot;
              &lt;&lt; &quot;j = &quot; &lt;&lt; j &lt;&lt; '\n';
}
 | output=
i = 33, j = 66
i = 4, j = 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc auto}}
{{dsc inc | cpp/utility/dsc declval}}
{{dsc end}}

[[de:cpp/language/decltype]]
[[es:cpp/language/decltype]]
[[fr:cpp/language/decltype]]
[[it:cpp/language/decltype]]
[[ja:cpp/language/decltype]]
[[pt:cpp/language/decltype]]
[[ru:cpp/language/decltype]]
[[zh:cpp/language/decltype]]</text>
      <sha1>su47ihjolylt5zcsgq3qv8469r1h07i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/decomposition declaration</title>
    <ns>0</ns>
    <id>15862</id>
    <redirect title="cpp/language/declarations" />
    <revision>
      <id>89208</id>
      <timestamp>2017-01-10T13:59:28Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/declarations#Decomposition declaration]]</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[cpp/language/declarations#Decomposition_declaration]]</text>
      <sha1>15l7f6vghtmkxss6ooqrphjz5wadoem</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/deduction guide</title>
    <ns>0</ns>
    <id>15737</id>
    <redirect title="cpp/language/class template deduction" />
    <revision>
      <id>88369</id>
      <timestamp>2016-11-17T05:36:31Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/class template deduction#User-defined deduction guides]]</comment>
      <text xml:space="preserve" bytes="81">#REDIRECT [[cpp/language/class_template_deduction#User-defined_deduction_guides]]</text>
      <sha1>s17mgae5x4dli3329tq0ejuym7s5o9g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/default arguments</title>
    <ns>0</ns>
    <id>13509</id>
    <revision>
      <id>91939</id>
      <parentid>91797</parentid>
      <timestamp>2017-03-31T20:13:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="8323">{{title|Default arguments}}
{{cpp/language/functions/navbar}}

Allows a function to be called without providing one or more trailing arguments.

Indicated by using the following syntax for a parameter in the {{spar|parameter-list}} of a {{rlp|function|function declaration}}.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}} {{spar|declarator}} {{ttb|{{=}} }} {{spar|initializer}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}} {{spar|abstract-declarator}}{{mark optional}} {{ttb|{{=}} }} {{spar|initializer}}
}}
{{sdsc end}}

Default arguments are used in place of the missing trailing arguments in a function call:
{{source|1=
void point(int x = 3, int y = 4);

point(1,2); // calls point(1,2)
point(1);   // calls point(1,4)
point();    // calls point(3,4)
}}

In a function declaration, after a parameter with a default argument, all subsequent parameters must
* have a default argument supplied in this or a previous declaration; or
* {{rev inl| since=c++11|be a function parameter pack.}}

The ellipsis is not a parameter, and so can follow a parameter with a default argument.

{{source|1=
int f(int = 1, int); // error, assuming there's no previous declaration of f
int g(int n = 0, ...); // ok
template&lt;class...T&gt; void h(int i = 0, T... args); // ok
}}

Default arguments are only allowed in the parameter lists of {{rlp|function|function declarations}}{{rev inl|since=c++14| and {{rlp|lambda|lambda-expressions}},}} and are not allowed in the declarations of pointers to functions, references to functions, or in {{rlp|typedef}} declarations. Template parameter lists use similar syntax for their  {{rlp|template_parameters#Default_template_arguments|default template arguments}}.

For non-template functions, default arguments can be added to a function that was already declared if the function is redeclared in the same scope. At the point of a function call, the defaults are a union of the defaults provided in all visible declarations for the function. A redeclaration cannot introduce a default for an argument for which a default is already visible (even if the value is the same). A re-declaration in an inner scope does not acquire the default arguments from outer scopes.
{{source|1=
void f(int, int);     // #1 
void f(int, int = 7); // #2 OK: adds a default

void h() {
    f(3); // #1 and #2 are in scope; makes a call to f(3,7)
    void f(int =1, int); // Error: inner scope declarations don't acquire defaults
}

void m() { // new scope begins
    void f(int, int); // inner scope declaration; has no defaults.
    f(4); // Error: not enough arguments to call f(int, int)
    void f(int, int = 6); 
    f(4); // OK: calls f(4,6);
    void f(int, int = 6); // Error: cannot redeclare a default in the same scope
}

void f(int = 1, int); // #3 OK, adds a default to #2

void n() { // new scope begins 
    f(); // #1, #2, and #3 are in scope: calls f(1, 7);
}
}}

If an {{rlp|inline}} function is declared in different translation units, the accumulated sets of default arguments must be the same at the end of each translation unit.

If a {{rlp|friend}} declaration specifies a default, it must be a friend function definition, and no other declarations of this function are allowed in the translation unit.

The {{rlp|namespace#Using-declarations|using-declaration}} carries over the set of known default arguments, and if more arguments are added later to the function's namespace, those defaults are also visible anywhere the using-declaration is visible
{{source|1=
namespace N {
    void f(int, int = 1);
}
using N::f;
void g() {
    f(7); // calls f(7, 1);
    f();  // error
}
namespace N {
    void f(int = 2, int);
}
void h() {
    f();  // calls f(2, 1);
}
}}

The names used in the default arguments are looked up, checked for {{rlp|access|accessibility}}, and bound at the point of declaration, but are executed at the point of the function call:
{{source|1=
int a = 1;
int f(int);
int g(int x = f(a)); // lookup for f finds ::f, lookup for a finds ::a
                     // the value of ::a, which is 1 at this point, is not used
void h()
{
  a = 2;  // changes the value of ::a
  {
     int a = 3;
     g();       // calls f(2), then calls g() with the result
  }
}

}}

For a {{rlp|member functions|member function}} of a non-template class, the default arguments are allowed on the out-of-class definition, and are combined with the default arguments provided by the declaration inside the class body. If these out-of-class defaults would turn a member function into a default, copy, or move constructor the program is ill-formed. For member functions of class templates, all defaults must be provided in the initial declaration of the member function.
{{source|1=
class C {
    void f(int i = 3);
    void g(int i, int j = 99);
    C(int arg); // non-default constructor
};
void C::f(int i = 3) {         // error: default argument already
}                              // specified in class scope
void C::g(int i = 88, int j) { // OK: in this translation unit,
}                              // C::g can be called with no argument
C::C(int arg = 1) {   // Error: turns this into a default constructor
}
}}

The overriders of {{rlp|virtual}} functions do not acquire the default arguments from the base class declarations, and when the virtual function call is made, the default arguments are decided based on the static type of the object (note: this can be avoided with [http://www.gotw.ca/publications/mill18.htm non-virtual interface] pattern).
{{source|1=
struct Base {
    virtual void f(int a = 7);
};
struct Derived : Base {
    void f(int a) override;
};
void m() {
    Derived d;
    Base&amp; b = d;
    b.f(); // OK: calls Derived::f(7) 
    d.f(); // Error: no default 
}
}}

Local variables are not allowed in default arguments {{rev inl|since=c++14|{{mark unreviewed dr|CWG|2082}}unless used in unevaluated context}}:
{{source|1=
void f() 
{
    int n = 1;
    extern void g(int x = n); // error: local variable cannot be a default
    extern void h(int x = sizeof n); // OK as of CWG 2082
}
}}

The {{rlp|this}} pointer is not allowed in default arguments:
{{source|1=
class A {
  void f(A* p = this) { } // error: this is not allowed
};
}}

Non-static class members are not allowed in default arguments (even if they are not evaluated), except when used to form a pointer-to-member or in a member access expression.
{{source|1=
int b;
class X {
  int a;
  int mem1(int i = a); // error: non-static member cannot be used
  int mem2(int i = b); // OK: lookup finds X::b, the static member
  static int b;
};
}}

Function parameters are not allowed in default arguments {{rev inl|until=c++14|(even if they are not evaluated)}}{{rev inl|since=c++14|{{mark unreviewed dr|CWG|2082}}except if they are unevaluated}}. Note that parameters that appear earlier in the parameter list are in {{rlp|scope}}:
{{source|1=
int a;
int f(int a, int b = a); // Error: the parameter a used in a default argument
int g(int a, int b = sizeof a); // Error until CWG 2082
                                // OK after CWG 2082: use in unevaluated context is OK
}}

The default arguments are not part of the function type
{{source|1=
int f(int = 0);
void h() {
  int j = f(1);
  int k = f();  // calls f(0);
}
int (*p1)(int) = &amp;f;
int (*p2)()    = &amp;f; //Error: the type of f is int(int)
}}


If a {{rlp|lambda|lambda-expression}} appears in a default argument, it cannot explicitly or implicitly capture anything.
{{source|1=
void f2() {
    int i = 1;
    void g1(int = ([i]{ return i; })()); // error: captures something
    void g2(int = ([i]{ return 0; })()); // error: captures something
    void g3(int = ([=]{ return i; })()); // error: captures something
    void g4(int = ([=]{ return 0; })());       // OK: capture-less
    void g5(int = ([]{ return sizeof i; })()); // OK: capture-less
}
}}


Operator functions shall not have default arguments, except for the function call operator.
{{source|1=
class C {
    int operator[](int i = 0); // ill-formed
    int operator()(int x = 0); // ok
};
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2082 |std=C++14|before=default arguments were forbidden to use locals in unevaluated context|after=unevaluated context use allowed}}
{{dr list end}}</text>
      <sha1>77eozvp5qenu5u8rolkj2wcgk4fx819</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/default constructor</title>
    <ns>0</ns>
    <id>5292</id>
    <revision>
      <id>89110</id>
      <parentid>88826</parentid>
      <timestamp>2016-12-30T15:35:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>implicitly defined if ODR-used! ([class.ctor]/7)</comment>
      <text xml:space="preserve" bytes="6877">{{title|Default constructors}}
{{cpp/language/classes/navbar}}

A default constructor is a constructor which can be called with no arguments (either defined with an empty parameter list, or with default arguments provided for every parameter). A type with a public default constructor is {{concept|DefaultConstructible}}.

===Syntax===
{{sdsc begin}}
{{sdsc|num=1|{{ttb|ClassName}} {{ttb|(}} {{ttb|)}} {{ttb|;}} }}
{{sdsc|num=2|{{ttb|ClassName}} {{ttb|::}} {{ttb|ClassName}} {{ttb|(}} {{ttb|)}} {{spar|body}} }}
{{sdsc|num=3|{{ttb|ClassName()}} {{ttb|{{=}}}} {{ttb|delete}} {{ttb|;}}|notes={{mark since c++11}} }}
{{sdsc|num=4|{{ttb|ClassName()}} {{ttb|{{=}}}} {{ttb|default}} {{ttb|;}}|notes={{mark since c++11}} }}
{{sdsc end}}

===Explanation===
@1@ Declaration of a default constructor.
@2@ Definition of the constructor outside the class body.
@3@ Inhibiting the automatic generation of a default constructor by the compiler.
@4@ Explicitly forcing the automatic generation of a default constructor by the compiler.

{{ttb|ClassName}} is the identifier of the enclosing class

Default constructors are called during {{rlp|default initialization}}s and {{rlp|value initialization}}s.

===Implicitly-declared default constructor===
If no user-declared constructors of any kind are provided for a class type ({{c|struct}}, {{c|class}}, or {{c|union}}), the compiler will always declare a default constructor as an {{tt|inline public}} member of its class. 

{{rev begin}}
{{rev|since=c++11|If some user-declared constructors are present, the user may still force the automatic generation of a default constructor by the compiler that would be implicitly-declared otherwise with the keyword {{tt|default}}.}}
{{rev end}}

The implicitly-declared (or defaulted on its first declaration) default constructor has an exception specification as described in {{rev inl|until=c++17|{{rlp|except_spec|dynamic exception specification}}}}{{rev inl|since=c++17|{{rlp|noexcept_spec|exception specification}}}}

===Implicitly-defined default constructor===
If the implicitly-declared default constructor is not defined as deleted, it is defined (that is, a function body is generated and compiled) by the compiler if {{rlp|definition#ODR-use|odr-used}}, and it has exactly the same effect as a user-defined constructor with empty body and empty initializer list. That is, it calls the default constructors of the bases and of the non-static members of this class.

{{rev begin}}
{{rev|since=c++11|If some user-defined constructors are present, the user may still force the automatic generation of a default constructor by the compiler that would be implicitly-declared otherwise with the keyword {{tt|default}}.}}
{{rev end}}

===Deleted implicitly-declared default constructor===
The implicitly-declared or defaulted default constructor for class {{tt|T}} is {{rev inl|until=c++11| undefined }}{{rev inl|since=c++11|defined as deleted}} if any of the following is true:
* {{tt|T}} has a member of reference type {{rev inl|since=c++11|without a default initializer.}}
* {{tt|T}} has a {{c|const}} member without user-defined default constructor {{rev inl|since=c++11|or a default member initializer}}.
* {{tt|T}} has a member {{rev inl|since=c++11|(without a default member initializer)}} which has a deleted default constructor, or its default constructor is ambiguous or inaccessible from this constructor.
* {{tt|T}} has a direct or virtual base which has a deleted default constructor, or it is ambiguous or inaccessible from this constructor.
* {{tt|T}} has a direct or virtual base which has a deleted destructor, or a destructor that is inaccessible from this constructor.
{{rev begin}}
{{rev|since=c++11|&lt;!-- DR 2084 --&gt;
* {{tt|T}} is a {{c|union}} with at least one variant member with non-trivial default constructor, and no variant member of {{tt|T}} has a default member initializer.
* {{tt|T}} is a non-union class with a variant member {{tt|M}} with a non-trivial default constructor, and no variant member of the anonymous union containing {{tt|M}} has a default member initializer.
}}
{{rev end}}
* {{tt|T}} is a {{c|union}} and all of its variant members are {{c|const}}.

{{rev begin}}
{{rev|since=c++11|If no user-defined constructors are present and the implicitly-declared default constructor is not trivial, the user may still inhibit the automatic generation of an implicitly-defined default constructor by the compiler with the keyword {{tt|delete}}.}}
{{rev end}}

===Trivial default constructor===
The default constructor for class {{tt|T}} is trivial (i.e. performs no action) if all of the following is true:
* The constructor is not user-provided (i.e., is implicitly-defined or defaulted)
* {{tt|T}} has no virtual member functions
* {{tt|T}} has no virtual base classes
{{rev begin}}
{{rev | since=c++11 |
* {{tt|T}} has no non-static members with default initializers.
}}
{{rev end}}
* Every direct base of {{tt|T}} has a trivial default constructor
* Every non-static member of class type has a trivial default constructor

A trivial default constructor is a constructor that performs no action. All data types compatible with the C language (POD types) are trivially default-constructible. Unlike [[c/language/object#Effective_type|in C]], however, objects with trivial default constructors cannot be created by simply reinterpreting suitably aligned storage, such as memory allocated with {{lc|std::malloc}}: placement-new is required to formally {{rlp|object|introduce a new object}} and avoid potential undefined behavior.

=== Defect reports ===

{{dr list begin}}
{{dr list item|wg=cwg|dr=2084|std=C++11|before=default member initializers have no effect on &lt;br/&gt;whether a defaulted default constructor of a union is deleted |after=they prevent the defaulted default constructor&lt;br /&gt; from being defined as deleted}}
{{dr list end}}

===Example===
{{example|code=
struct A
{
    int x;
    A(int x = 1): x(x) {} // user-defined default constructor
};

struct B: A
{
    // B::B() is implicitly-defined, calls A::A()
};

struct C
{
    A a;
    // C::C() is implicitly-defined, calls A::A()
};

struct D: A
{
    D(int y): A(y) {}
    // D::D() is not declared because another constructor exists
};

struct E: A
{
    E(int y): A(y) {}
    E() = default; // explicitly defaulted, calls A::A()
};

struct F
{
    int&amp; ref; // reference member
    const int c; // const member
    // F::F() is implicitly defined as deleted
};

int main()
{
    A a;
    B b;
    C c;
//  D d; // compile error
    E e;
//  F f; // compile error
}
}}

[[de:cpp/language/default constructor]]
[[es:cpp/language/default constructor]]
[[fr:cpp/language/default constructor]]
[[it:cpp/language/default constructor]]
[[ja:cpp/language/default constructor]]
[[pt:cpp/language/default constructor]]
[[ru:cpp/language/default constructor]]
[[zh:cpp/language/default constructor]]</text>
      <sha1>6k1f1uopmt5v0aix7lgmmnel5wlhuti</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/default initialization</title>
    <ns>0</ns>
    <id>8863</id>
    <revision>
      <id>90806</id>
      <parentid>90805</parentid>
      <timestamp>2017-03-10T18:54:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/lc/ltt so it works now</comment>
      <text xml:space="preserve" bytes="5961">{{title|default initialization}}
{{cpp/language/initialization/navbar}}
This is the initialization performed when a variable is constructed with no initializer.

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 | {{spar|T}} {{spar| object}} {{ttb|;}}}}
{{sdsc | num=2 |{{ttb|new }} {{spar|T}} {{ttb|;}}
{{ttb|new }} {{spar|T}} {{ttb|(}} {{ttb|)}} {{ttb|;}} {{mark|until c++03}}
}}
{{sdsc end}}

===Explanation===
Default initialization is performed in three situations:
@1@ when a variable with automatic, static, or thread-local {{rlp|storage duration}} is declared with no initializer;
@2@ when an object with dynamic storage duration is created by a {{rlp|new|new-expression}} with no initializer {{rev inl|until=c++03|or when an object is created by a new-expression with the initializer consisting of an empty pair of parentheses}};
@3@ when a base class or a non-static data member is not mentioned in a constructor [[cpp/language/initializer_list|initializer list]] and that constructor is called.

The effects of default initialization are:
* if {{tt|T}} is a {{rev inl|until=c++11|non-POD}} class type, the constructors are considered and subjected to {{rlp|overload resolution}} against the empty argument list. The constructor selected (which is one of the {{rlp|default constructor}}s) is called to provide the initial value for the new object;
* if {{tt|T}} is an array type, every element of the array is default-initialized;
* otherwise, nothing is done: the objects with automatic storage duration (and their subobjects) are initialized to indeterminate values.

{{rev begin}}
{{rev|until=c++11|
Only (possibly cv-qualified) non-POD class types (or arrays thereof) with automatic storage duration were considered to be default-initialized when no initializer is used. Scalars and POD types with dynamic storage duration were considered to be not initialized (since C++11, this situation was reclassified as a form of default initialization).
}}
{{rev|until=c++03|
Prior to C++03 (which introduced {{rlp|value initialization}}), the expression {{c|new T()}} as well as a member initializer naming a base or a member with the initializer in the form of an empty pair of parentheses was classified as default initialization, but specified {{rlp|zero initialization}} for non-class types.
}}
{{rev end}}


{{rev begin}}
{{rev|until=c++11|
If {{tt|T}} is a cv-qualified type, its cv-unqualified version is used for the purpose of default-initialization.
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++14|
Use of an indeterminate value obtained by default-initializing a non-class variable of any type is {{rlp|ub|undefined behavior}} (in particular, it may be a {{rlp|object#Object_representation_and_value_representation|trap representation}}), except in the following cases:
* if the indeterminate value of unsigned narrow character type or {{ltt|cpp/types/byte|std::byte}} is assigned to another variable with unsigned narrow character type or {{ltt|cpp/types/byte|std::byte}} (the value of the variable becomes indeterminate, but the behavior is not undefined);
* if the indeterminate value of unsigned narrow character type or {{ltt|cpp/types/byte|std::byte}} is used to initialize another variable with unsigned narrow character type or {{ltt|cpp/types/byte|std::byte}};
* if the indeterminate value of unsigned narrow character type or {{ltt|cpp/types/byte|std::byte}} results from
:* the second or third operand of a conditional expression,
:* the right operand of the comma operator,
:* the operand of a cast or conversion to an unsigned narrow character type or {{ltt|cpp/types/byte|std::byte}},
:* a discarded-value expression.

{{source|1=
int f(bool b)
{
    int x;               // OK: the value of x is indeterminate
    int y = x;           // undefined behavior
    unsigned char c;     // OK: the value of c is indeterminate
    unsigned char d = c; // OK: the value of d is indeterminate
    int e = d;           // undefined behavior
    return b ? d : 0;    // undefined behavior if b is true
}
}}
}}
{{rev end}}

===Notes===
Default initialization of non-class variables with automatic and dynamic storage duration produces objects with indeterminate values (static and thread-local objects get [[cpp/language/zero_initialization|zero initialized]])

If {{tt|T}} is a const-qualified type, it must be a class type with a user-provided default constructor.

Reference cannot be default-initialized.

===Example===
{{example
 |
 | code=
#include &lt;string&gt;

struct T1 { int mem; };

struct T2
{
    int mem;
    T2() { } // &quot;mem&quot; is not in the initializer list
};

int n; // static non-class, a two-phase initialization is done:
       // 1) zero initialization initializes n to zero
       // 2) default initialization does nothing, leaving n being zero

int main()
{
    int n;            // non-class, the value is indeterminate
    std::string s;    // class, calls default ctor, the value is &quot;&quot; (empty string)
    std::string a[2]; // array, default-initializes the elements, the value is {&quot;&quot;, &quot;&quot;}
//  int&amp; r;           // error: a reference
//  const int n;      // error: a const non-class
//  const T1 t1;      // error: const class with implicit default ctor
    T1 t1;            // class, calls implicit default ctor
    const T2 t2;      // const class, calls the user-provided default ctor
                      // t2.mem is default-initialized (to indeterminate value)
}
 | output=
}}

===See also===
* [[cpp/language/direct_initialization|direct initialization]]
* [[cpp/language/copy_initialization|copy initialization]]
* [[cpp/language/list_initialization|list initialization]]

[[de:cpp/language/default initialization]]
[[es:cpp/language/default initialization]]
[[fr:cpp/language/default initialization]]
[[it:cpp/language/default initialization]]
[[ja:cpp/language/default initialization]]
[[pt:cpp/language/default initialization]]
[[ru:cpp/language/default initialization]]
[[zh:cpp/language/default initialization]]</text>
      <sha1>5xfg22kb4128ihngd0seeq7cxwwrzsi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/definition</title>
    <ns>0</ns>
    <id>13180</id>
    <revision>
      <id>89123</id>
      <parentid>87665</parentid>
      <timestamp>2017-01-02T13:49:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* One Definition Rule */ anchor</comment>
      <text xml:space="preserve" bytes="12708">{{title|Definitions and ODR}}
{{cpp/language/basics/navbar}}
''Definitions'' are {{rlp|declarations}} that fully define the entity introduced by the declaration. Every declaration is a definition, except for the following:

* A function declaration without a function body
{{source|int f(int); // declares, but doesn't define f}}
* Any declaration with an {{c|extern}} {{rlp|storage_duration|storage class specifier}} or with a {{rlp|language linkage}} specifier (such as {{c|extern &quot;C&quot;}}) without an initializer
{{source|1=
extern const int a; // declares, but doesn't define a
extern const int b = 1; // defines b
}}
* Declaration of a {{rev inl|since=c++17|non-inline}} {{rlp|static|static data member}} inside a class definition
{{source|
struct S {
    int n;               // defines S::n
    static int i;        // declares, but doesn't define S::i
    inline static int x; // defines S::x
};                       // defines S
int S::i;                // defines S::i
}}
{{rev begin}}
{{rev | since=c++17 |
* {{mark deprecated}} Namespace scope declaration of a static data member that was defined within the class with the {{tt|{{rlp|constexpr}}}} specifier
{{source|1=
struct S {
    static constexpr int x = 42; // implicitly inline, defines S::x
};
constexpr int S::x; // declares S::x, not a redefinition
}}
}}
{{rev end}}
* Declaration of a class name (by {{rlp|class#Forward declaration|forward declaration}} or by the use of the elaborated type specifier in another declaration)
{{source|
struct S; // declares, but doesn't define S
class Y f(class T p); // declares, but doesn't define Y and T (and also f and p)
}}
{{rev begin}}
{{rev|since=c++11|
* An {{rlp|enum|opaque declaration}} of an enumeration
{{source|
enum Color : int; // declares, but doesn't define Color
}}
}}
{{rev end}}
* Declaration of a {{rlp|template parameters|template parameter}}
{{source|
template&lt;typename T&gt; // declares, but doesn't define T
}}
* A parameter declaration in a function declaration that isn't a definition
{{source|
int f(int x); // declares, but doesn't define f and x
int f(int x) { // defines f and x
     return x+a;
}
}}
* A {{rlp|typedef}} declaration
{{source|1=
typedef S S2; // declares, but doesn't define S2 (S may be incomplete)
}}
{{rev begin}}
{{rev|since=c++11|
* An {{rlp|type alias|alias-declaration}}
{{source|1=
using S2 = S; // declares, but doesn't define S2 (S may be incomplete)
}}
}}
{{rev end}}
* A {{rlp|using declaration|using-declaration}}
{{source|1=
using N::d; // declares, but doesn't define d
}}
{{rev begin}}
{{rev|since=c++17|
* Declaration of a {{rlp|class template deduction#Explicit_deduction_guides|deduction guide}} (does not define any entities)
}}
{{rev|since=c++11|
* A {{rlp|static_assert}} declaration (does not define any entities)
* An {{rlp|declarations|attribute declaration}} (does not define any entities)
}}
{{rev end}}
* An {{rlp|declarations|empty declaration}} (does not define any entities)
* A {{rlp|namespace#Using-directives|using-directive}} (does not define any entities)
{{rev begin}}
{{rev|since=c++11|
* An {{rlp|class_template#Class_template_instantiation|explicit instantiation declaration}} (an &quot;extern template&quot;)
{{source|1=
extern template f&lt;int, char&gt;; // declares, but doesn't define f&lt;int, char&gt;
}}
}}
{{rev end}}
* An {{rlp|template specialization|explicit specialization}} whose declaration is not a definition.
{{source|1=
template&lt;&gt; struct A&lt;int&gt;; // declares, but doesn't define A&lt;int&gt;
}}

An {{rlp|asm|asm declaration}} does not define any entities, but it is classified as a definition.

Where necessary, the compiler may implicitly define the {{rlp|default constructor}}, {{rlp|copy constructor}}, {{rlp|move constructor}}, {{rlp|as_operator|copy assignment operator}}, {{rlp|move_operator|move assignment operator}}, and the {{rlp|destructor}}.

If the definition of any object results in an object of {{rlp|incomplete type}}, the program is ill-formed.

{{anchor|ODR}}
===One Definition Rule===
Only one definition of any variable, function, class type, enumeration type, or template is allowed in any one translation unit (some of these may have multiple declarations, but only one definition is allowed).

One and only one definition of every non-{{rlp|inline}} function or variable that is ''odr-used'' (see below) is required to appear in the entire program (including any standard and user-defined libraries). The compiler is not required to diagnose this violation, but the behavior of the program that violates it is undefined.

For an inline function {{rev inl|since=c++17|or inline variable}}, a definition is required in every translation unit where it is ''odr-used''.

One and only one definition of a class is required to appear in any translation unit where the class is used in a way that requires it to be {{rlp|incomplete type|complete}}.

There can be more than one definition in a program, as long as each definition appears in a different translation unit, of each of the following: class type, enumeration type, inline function with external linkage {{rev inl|since=c++17|inline variable with external linkage}}, class template, non-static function template, static data member of a class template, member function of a class template, partial template specialization, as long as all of the following is true:
* each definition consists of the same sequence of tokens (typically, appears in the same header file)
* name lookup from within each definition finds the same entities (after overload-resolution), except that constants with internal or no linkage may refer to different objects as long as they are not ODR-used and have the same values in every definition.
* overloaded operators, including conversion, allocation, and deallocation functions refer to the same function from each definition (unless referring to one defined within the definition)
* the language linkage is the same (e.g. the include file isn't inside an extern &quot;C&quot; block)
* the three rules above apply to every default argument used in each definition
* if the definition is for a class with an implicitly-declared constructor, every translation unit where it is odr-used must call the same constructor for the base and members
* if the definition is for a template, then all these requirements apply to both names at the point of definition and dependent names at the point of instantiation

If all these requirements are satisfied, the program behaves as if there is only one definition in the entire program. Otherwise, the behavior is undefined. 

Note: in C, there is no program-wide ODR for types, and even extern declarations of the same variable in different translation units may have different types [[c/language/type#Compatible_types|as long as they are compatible]]. In C++, the source-code tokens used in declarations of the same type must be the same as described above: if one .cpp file defines {{tt|struct S { int x; };}} and the other .cpp file defines {{tt|struct S { int y; };}}, the behavior of the program that links them together is undefined. This is usually resolved with {{rlp|namespace|unnamed namespaces}}.

====ODR-use====

Informally, an object is odr-used if its address is taken, or a reference is bound to it, and a function is odr-used if a function call to it is made or its address is taken. If an object or a function is odr-used, its definition must exist somewhere in the program; a violation of that is a link-time error.

{{source|1=
struct S {
    static const int x = 0; // static data member
    // a definition outside of class is required if it is odr-used
};
const int&amp; f(const int&amp; r);

int n = b ? (1, S::x) // S::x is not odr-used here
          : f(S::x);  // S::x is odr-used here: a definition is required
}}

Formally,
@1@ a variable {{tt|x}} in a ''potentially-evaluated'' expression {{tt|ex}} is odr-used unless both of the following are true:
:* applying lvalue-to-rvalue conversion to {{tt|x}} yields a constant expression that doesn't invoke non-trivial functions
{{source|1=
struct S { static const int x = 1; };
int f() { return S::x; } // does not odr-use S::x
}}
:* either {{tt|x}} is not an object (that is, {{tt|x}} is a reference) or, if {{tt|x}} is an object, it is one of the ''potential results'' of a larger expression {{tt|e}}, where that larger expression is either a {{rlp|expressions#Discarded-value_expressions|discarded-value expression}} or an lvalue-to-rvalue conversion
{{source|1=
struct S { static const int x = 1; };
void f() { &amp;S::x; } // discarded-value expression does not odr-use S::x
}}
@2@ {{rlp|this}} is odr-used if it appears as a ''potentially-evaluated'' expression (including the implicit this in a non-static member function call expression)

In the definitions above, ''potentially-evaluated'' means the expression is not an {{rlp|expressions#Unevaluated expressions|unevaluated operand}} (or its subexpression), such as the operand of {{rlp|sizeof}} and ''a set of potential results'' of an expression {{tt|e}} is a (possibly empty) set of id-expressions that appear within {{tt|e}}, combined as follows:
* If {{tt|e}} is an {{rlp|expressions|id-expression}}, the expression {{tt|e}} is its only potential result
{{rev begin}}
{{rev|since=c++17|
* If {{tt|e}} is an array subscript expression ({{c|e1[e2]}}) and the operand ({{tt|e1}}) is array, that array is included in the set}}
{{rev end}}
* If {{tt|e}} is a class member access expression ({{c|e1.e2}} or {{c|e1-&gt;e2}}), the potential results of the object expression e1 is included in the set.
* If {{tt|e}} is a pointer-to-member access expression ({{c|e1.*e2}} or {{c|e1-&gt;*e2}}) whose second operand is a constant expression, the potential results of the object expression e1 are included in the set
* If {{tt|e}} is an expression in parentheses ({{c|(e1)}}), the potential results of {{tt|e1}} are included in the set
* If {{tt|e}} is a glvalue conditional expression ({{c|e1?e2:e3}}, where e2 and e3 are glvalues), the union of the potential results of {{tt|e2}} and {{tt|e3}} are both included in the set.
* If {{tt|e}} is a comma expression ({{c|e1,e2}}), the potential results of {{tt|e2}} are in the set of potential results
* Otherwise, the set is empty.
{{source|1=
struct S {
  static const int a = 1;
  static const int b = 2;
};
int f(bool x) {
  return x ? S::a : S::b;
  // x is a part of the subexpression &quot;x&quot; (to the left of ?),
  // which applies lvalue-to-rvalue conversion, therefore x is not odr-used
  // S::a and S::b are lvalues, and carry over as &quot;potential results&quot; to the result
  // of the glvalue conditional
  // That result is then subject to lvalue-to-rvalue conversion requested
  // to copy-initialize the return value, therefore S::a and S::b are not odr-used
}
}}

@4@ Functions are ODR-used if
* A function whose name appears as a potentially-evaluated expression (including named function, overloaded operator, {{rlp|cast operator|user-defined conversion}}, user-defined placement forms of operator new, non-default initialization)  is odr-used if it is selected by overload resolution, except when it is an unqualified pure virtual member function {{rev inl|since=c++17|or a pointer-to-member to a pure virtual function}}.
* {{rlp|virtual|virtual member function}} is odr-used if it is not a pure virtual member function (addresses of virtual member functions are required to construct the vtable)
* An [[cpp/memory/new/operator_new|allocation]] or deallocation function for a class is odr-used by a {{rlp|new|new expression}} appearing in a potentially-evaluated expression
* A deallocation function for a class is odr-used by a {{rlp|delete|delete expression}} appearing in a potentially-evaluated expression
* A non-placement allocation or deallocation function for a class is odr-used by the definition of a constructor of that class.
* A non-placement deallocation function for a class is odr-used by the definition of the destructor of that class, or by being selected by the lookup at the point of definition of a virtual destructor
* An assignment operator in a class {{tt|T}} that is a member or base of another class {{tt|U}} is odr-used by an implicitly-defined copy-assignment or move-assignment functions of {{tt|U}}.
* A constructor (including default constructors) for a class is odr-used by the {{rlp|initialization}} that selects it.
* A destructor for a class is odr-used if it is potentially invoked

In all cases, a constructor selected to copy or move an object is odr-used even if {{rlp|copy elision}} takes place.

{{todo|list of all situations where odr-use makes a differences}}

===References===
{{ref std c++11}}
{{ref std | section=3.2 | title=One definition rule | id=basic.def.odr}}
{{ref std end}}</text>
      <sha1>nza0adwl9et17o6q7aavcbjf74v43qs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/delete</title>
    <ns>0</ns>
    <id>692</id>
    <revision>
      <id>91052</id>
      <parentid>91051</parentid>
      <timestamp>2017-03-16T13:46:42Z</timestamp>
      <contributor>
        <username>Ecatmur</username>
        <id>1355</id>
      </contributor>
      <minor/>
      <comment>formatting</comment>
      <text xml:space="preserve" bytes="6259">{{title|delete expression}}
{{cpp/language/expressions/navbar}}

Destructs object(s) previously allocated by the {{rlp|new | new expression}} and releases obtained memory area

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|::}}{{mark optional}} &amp;nbsp;&amp;nbsp; {{ttb|delete &amp;nbsp;&amp;nbsp;}} {{spar|expression}} }}
{{sdsc | num=2 | {{ttb|::}}{{mark optional}} &amp;nbsp;&amp;nbsp; {{ttb|delete []}} {{spar|expression}} }}
{{sdsc end}}

@1@ Destroys one non-array object created by a {{rlp|new|new-expression}}
@2@ Destroys an array created by a {{rlp|new|new[]-expression}}

===Explanation===
For the first (non-array) form, {{spar|expression}} must be a pointer to a object type or a class type {{rlp|implicit cast|contextually implicitly convertible}} to such pointer, and its value must be either ''null'' or pointer to a non-array object created by a {{rlp|new|new-expression}}, or a pointer to a base subobject of a non-array object created by a {{rlp|new|new-expression}}. If {{spar|expression}} is anything else, including if it is a pointer obtained by the array form of {{rlp|new|new-expression}}, the behavior is {{rlp|ub|undefined}}.

For the second (array) form, {{spar|expression}} must be a null pointer value or a pointer value previously obtained by an array form of {{rlp|new|new-expression}}. If {{spar|expression}} is anything else, including if it's a pointer obtained by the non-array form of {{rlp|new|new-expression}}, the behavior is {{rlp|ub|undefined}}.

The result of the expression always has type {{c|void}}.

If the object being deleted has incomplete class type at the point of deletion, and the complete class has a non-trivial destructor or a deallocation function, the behavior is undefined.

If {{spar|expression}} is not a null pointer, the {{tt|delete}} expression invokes the {{rlp|destructor}} (if any) for the object that's being destroyed, or for every element of the array being destroyed (proceeding from the last element to the first element of the array). 

After that, {{rev inl|since=c++14|unless the matching new-expression was combined with another new-expression}} the delete expression invokes the [[cpp/memory/new/operator_delete | deallocation function]], either {{c|operator delete}} (for the first version of the expression) or {{c|operator delete[]}} (for the second version of the expression).

The deallocation function's name is {{rlp|lookup|looked up}} in the scope of the dynamic type of the object pointed to by {{spar|expression}}, which means class-specific deallocation functions, if present, are found before the global ones. If {{ttb|::}} is present in the {{tt|delete}} expression, only the global namespace is examined by this lookup.

If lookup finds more than one deallocation function, the function to be called is selected as follows (see [[cpp/memory/new/operator_delete|deallocation function]] for a more detailed description of these functions and their effects):
{{rev begin}}
{{rev|since=c++17|
* If the type's alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}, alignment-aware deallocation functions (with a parameter of type {{lc|std::align_val_t}}) are  preferred. For other types, the alignment-unaware deallocation functions (without a  parameter of type {{lc|std::align_val_t}}) are preferred.
:* If exactly one preferred function is found, that function is selected.
:* If more than one preferred functions are found, only preferred functions are considered in the next step.
:* If no preferred functions are found, the non-preferred ones are considered in the next step.
}}
{{rev end}}
* If the deallocation functions that were found are class-specific, size-unaware class-specific deallocation function (without a parameter of type {{lc|std::size_t}}) is preferred over size-aware class-specific deallocation function (with a parameter of type {{lc|std::size_t}})
{{rev begin}}
{{rev|since=c++14|
* Otherwise, lookup reached global scope, and:
:* If the type is complete and if, for the delete[] only, the operand is a pointer to a class type with a non-trivial destructor or a (possibly multi-dimensional) array thereof, the global size-aware global function (with a parameter of type {{c|std::size_t}}) is selected
:* Otherwise, it is unspecified whether the global size-aware deallocation function (with a parameter of type std::size_t) or the global size-unaware deallocation function (without a parameter of type std::size_t) is selected
}}
{{rev end}}

The pointer to the block of storage to be reclaimed is passed to the [[cpp/memory/new/operator_delete|deallocation function]] that was selected by the process above as the first argument. The size of the block is passed as the optional {{tt|std::size_t}} argument. {{rev inl|since=c++17|The alignment requirement is passed as the optional {{tt|std::align_val_t}} argument.}}

{{rev begin}}
{{rev|until=c++14|
If {{spar|expression}} evaluates to a null pointer value, no destructors are called, and
the deallocation function may or may not be called (it's implementation-defined), but the default deallocation functions are guaranteed to do nothing when handed a null pointer.
}}
{{rev|since=c++14|
If {{spar|expression}} evaluates to a null pointer value, no destructors are called, and the deallocation function is not called.
}}
{{rev end}}

If {{spar|expression}} evaluates to a pointer to the base class subobject of the object that was allocated with {{rlp|new}}, the destructor of the base class must be virtual, otherwise the behavior is undefined.

===Notes===
A pointer to {{c|void}} cannot be deleted because it is not a pointer to a complete object type.

{{rev begin}}
{{rev|since=c++11|
Because a pair of brackets following the keyword {{tt|delete}} is always interpreted as the array form of delete, a lambda-expression with empty capture list immediately after {{tt|delete}} must be enclosed in parentheses.
{{source|1=
// delete []{return new int; }(); // parse error
delete ([]{return new int; })(); // OK
}}
}}
{{rev end}}

===Keywords===

{{ltt|cpp/keyword/delete}}

[[de:cpp/language/delete]]
[[es:cpp/language/delete]]
[[fr:cpp/language/delete]]
[[it:cpp/language/delete]]
[[ja:cpp/language/delete]]
[[pt:cpp/language/delete]]
[[ru:cpp/language/delete]]
[[zh:cpp/language/delete]]</text>
      <sha1>pyg1jmewq4z342t0s6n9jxahrkfajie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/dependent name</title>
    <ns>0</ns>
    <id>9611</id>
    <revision>
      <id>91741</id>
      <parentid>90775</parentid>
      <timestamp>2017-03-31T19:56:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="23956">{{title|Dependent names}}
{{cpp/language/templates/navbar}}

Inside the definition of a {{rlp|templates|template}} (both {{rlp|class template}} and {{rlp|function template}}), the meaning of some constructs may differ from one instantiation to another. In particular, types and expressions may depend on types of type template parameters and values of non-type template parameters.
{{source|1=
template&lt;typename T&gt;
struct X : B&lt;T&gt; // &quot;B&lt;T&gt;&quot; is dependent on T
{
    typename T::A* pa; // &quot;T::A&quot; is dependent on T
                       // (see below for the meaning of this use of &quot;typename&quot;)
    void f(B&lt;T&gt;* pb) {
        static int i = B&lt;T&gt;::i; // &quot;B&lt;T&gt;::i&quot; is dependent on T
        pb-&gt;j++; // &quot;pb-&gt;j&quot; is dependent on T
    }
};
}}
Name lookup and binding are different for ''dependent names'' and non-''dependent names''

===Binding rules===
Non-dependent names are looked up and bound at the point of template definition. This binding holds even if at the point of template instantiation there is a better match: 

{{example
| code=
#include &lt;iostream&gt;
void g(double) { std::cout &lt;&lt; &quot;g(double)\n&quot;; }

template&lt;class T&gt;
struct S {
    void f() const {
        g(1); // &quot;g&quot; is a non-dependent name, bound now
    }
};

void g(int) { std::cout &lt;&lt; &quot;g(int)\n&quot;; }

int main()
{
    g(1); // calls g(int)

    S&lt;int&gt; s;
    s.f(); // calls g(double)
}
}}

If the meaning of a ''non-dependent name'' changes between the definition context and the point of instantiation of a specialization of the template, the program is ill-formed, no diagnostic required. This is possible in the following situations:
* a type used in a non-dependent name is {{rlp|incomplete type|incomplete}} at the point of definition but complete at the point of instantiation
* {{mark c++17}} an instantiation uses a default argument or default template argument that had not been defined at the point of definition
* {{mark c++17}} a {{rlp|constant expression}} at the point of instantiation uses the value of a const object of integral or unscoped enum type, the value of a constexpr object, the value of a reference, or the definition of a constexpr function, and that object/reference/function was not defined at the point of definition
* {{mark c++17}} the template uses a non-dependent class template specialization or variable template specialization at the point of instantiation, and this template it uses is either instantiated from a partial specialization that was not defined at the point of definition or names an explicit specialization that was not declared at the point of definition

Binding of ''dependent names'' is postponed until lookup takes place.

===Lookup rules===
As discussed in {{rlp|lookup}}, the lookup of a dependent name used in a template is postponed until the template arguments are known, at which time
* non-ADL lookup examines function declarations with external linkage that are visible from the ''template definition'' context
* {{rlp|adl|ADL}} examines function declarations with external linkage that are visible from both the ''template definition'' context and the ''template instantiation'' context
(in other words, adding a new function declaration after template definition does not make it visible, except via ADL).

The purpose of this is rule is to help guard against violations of the {{rlp|definition#One_Definition_Rule|ODR}} for template instantiations:
{{source|1=
// an external libary
namespace E {
  template&lt;typename T&gt;
  void writeObject(const T&amp; t) {
    std::cout &lt;&lt; &quot;Value = &quot; &lt;&lt; t &lt;&lt; '\n';
  }
}

// translation unit 1:
// Programmer 1 wants to allow E::writeObject to work with vector&lt;int&gt;
namespace P1 {
  std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const std::vector&lt;int&gt;&amp; v) {
      for(int n: v) os &lt;&lt; n &lt;&lt; ' '; return os;
  }
  void doSomething() {
    std::vector&lt;int&gt; v;
    E::writeObject(v); // error: will not find P1::operator&lt;&lt;
  }
}

// translation unit 2:
// Programmer 2 wants to allow E::writeObject to work with vector&lt;int&gt;
namespace P2 {
  std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const std::vector&lt;int&gt;&amp; v) {
      for(int n: v) os &lt;&lt; n &lt;&lt;':'; return os &lt;&lt; &quot;[]&quot;;
  }
  void doSomethingElse() {
    std::vector&lt;int&gt; v;
    E::writeObject(v); // error: will not find P2::operator&lt;&lt;
  }
}
}}
In the above example, if non-ADL lookup for operator&lt;&lt; were allowed from the instantiation context, the instantiation of {{c|E::writeObject&lt;vector&lt;int&gt;&gt;}} would have two different definitions: one using {{c|P1::operator&lt;&lt;}} and one using {{c|P2::operator&lt;&lt;}}. Such ODR violation may not be detected by the linker, leading to one or the other being used in both instances.

To make ADL examine a user-defined namespace, either {{tt|std::vector}} should be replaced by a user-defined class or its element type should be a user-defined class:
{{source|1=
namespace P1 {
  // if C is a class defined in the P1 namespace
  std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const std::vector&lt;C&gt;&amp; v) {
      for(C n: v) os &lt;&lt; n; return os;
  }
  void doSomething() {
    std::vector&lt;C&gt; v;
    E::writeObject(v); // OK: instantiates writeObject(std::vector&lt;P1::C&gt;)
                       //     which finds P1::operator&lt;&lt; via ADL
  }
}
}}

Note: this rule makes it impractical to overload operators for standard library types
{{example|code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;utility&gt;

// Bad idea: operator in global namespace, but its arguments are in std::
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, std::pair&lt;int, double&gt; p)
{
    return os &lt;&lt; p.first &lt;&lt; ',' &lt;&lt; p.second;
}

int main()
{
    typedef std::pair&lt;int, double&gt; elem_t;
    std::vector&lt;elem_t&gt; v(10);
    std::cout &lt;&lt; v[0] &lt;&lt; '\n'; // OK, ordinary lookup finds ::operator&lt;&lt;
    std::copy(v.begin(), v.end(),
              std::ostream_iterator&lt;elem_t&gt;(std::cout, &quot; &quot;)); // Error: both ordinary 
    // lookup from the point of definition of std::ostream_iterator and ADL will 
    // only consider the std namespace, and will find many overloads of
    // std::operator&lt;&lt;, so the lookup will be done. Overload resolution will then
    // fail to find operator&lt;&lt; for elem_t in the set found by the lookup.
}
}}

Note: limited lookup (but not binding) of dependent names also takes place at template definition time, as needed to distinguish them from non-dependent names and also to determine whether they are members of the current instantiation or members of unknown specialization. The information obtained by this lookup can be used to detect errors, see below.

===Dependent types===

The following types are dependent types:

* template parameter
* a member of an ''unknown specialization'' (see below)
* a nested class/enum that is a dependent member of ''unknown specialization'' (see below)
* a cv-qualified version of a dependent type
* a compound type constructed from a dependent type
* an array type whose element type is dependent or whose bound (if any) is value-dependent
* a template-id where either
:* the template name is a template parameter, or
:* any of template arguments is type-dependent, value-dependent, or is a pack expansion (even if the template-id is used without its argument list, as injected-class-name)
* the result of {{rlp|decltype}} applied to a type-dependent expression

Note: a typedef member of a current instantiation is only dependent when the type it refers to is.

===Type-dependent expressions===

The following expressions are type-dependent

* an expression whose any subexpression is a type-dependent expression
* {{c|this}}, if the class is a dependent type.
* an {{rlp|identifiers|id-expression}} that
:* contains an identifier for which name lookup finds at least one dependent declaration
:* contains a dependent template-id
:* contains the special identifier {{tt|__func__}} (if some enclosing function is a template, a non-template member of a class template{{rev inl|since=c++14|, or a generic lambda}})
:* contains the name of {{rlp|cast operator|conversion function}} to a dependent type
:* contains a nested name specifier or {{rlp|identifiers|qualified-id}} that is a member of ''unknown specialization''
:* names a dependent member of the ''current instantiation'' which is a static data member of type &quot;array of unknown bound&quot;
{{rev begin}}
{{rev | since=c++14 |
:* contains an identifier for which name lookup finds one or more declarations of member functions of the current instantiation declared with {{rlp|function#Return_type_deduction|return type deduction}}
}}
{{rev | since=c++17 |
:* contains an identifier for which name lookup finds a {{rlp|declarations#Structured_binding_declaration|structured binding declaration}} whose initializer is type-dependent
:* contains an identifier for which name lookup finds a non-type template parameter whose type contains the placeholder {{tt|auto}}
}}
{{rev end}}
* any cast expression to a dependent type
* {{rlp|new|new-expression}} that creates an object of a dependent type
* member access expression that refers to a member of the ''current instantiation'' whose type is dependent
* member access expression that refers to a member of ''unknown specialization''

{{rev begin}}
{{rev|since=c++17|
* {{rlp|fold|fold-expression}}
}}
{{rev end}}

Note: literals, pseudo-destructor calls, {{rlp|sizeof}}, {{rlp|alignof}}, {{rlp|typeid}}, {{rlp|delete}}-expressions, {{rlp|throw}}-expressions, and {{rlp|noexcept}}-expressions are never type-dependent because the types of these expressions cannot be.

===Value-dependent expressions===

* an expression used in context where {{rlp|constant expression}} is required, and whose any subexpression is value-dependent
* an {{rlp|identifiers|id-expression}} that
:* is type-dependent {{mark unreviewed dr|CWG|2109}}
:* is a name of a non-type template parameter

{{rev begin}}
{{rev|since=c++14|
:* names a static data member that is a dependent member of the ''current instantiation'' and is not initialized.
:* names a static member function that is a depndent member of the ''current instantiation''
}}
{{rev end}}
:* is a constant with a literal type, initialized from a value-dependent expression
* {{rlp|sizeof}}, {{rlp|alignof}}, {{rlp|typeid}}, {{rlp|noexcept}}-expressions where the argument is a type-dependent expression or a dependent type-id
* any cast expression to a dependent type or from a value-dependent expression

{{rev begin}}
{{rev|since=c++14|
* address-of expression where the argument is {{rlp|identifiers|qualified-id}} that names a dependent member of the ''current instantiation''
* address-of expression where the argument is any expression which, evaluated as a core {{rlp|constant expression}}, refers to a {{rlp|templates#Templated_entity|templated entity}} that is an object with static or thread storage duration or a member function.
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
* {{rlp|fold|fold-expression}}
}}
{{rev end}}

=== Dependent names ===
{{todo|the lede from [temp.dep], which is missing (id-expression followed by parenthesized list...}}
{{todo|reword to maybe make it more clear (or at least less intimidating), and while at ait, apply CWG issue 591}}

=== Current instantiation ===
Within a class template definition (including its member functions and nested classes) some names may be deduced to refer to the ''current instantiation''. This allows certain errors to be detected at the point of definition, rather than instantiation, and removes the requirement on the {{tt|typename}} and {{tt|template}} disambiguators for dependent names, see below. 

Only the following names can refer to the current instantiation:
* in a class template definition:
:* a nested class, a member of class template, a member of a nested class, the injected-class-name of the template, the injected-class-name of a nested class
* in a primary class template definition or in the definition of its member: 
:* name of the class template followed by template argument list (or an equivalent alias template specialization) for the primary template where each argument is equivalent to its corresponding parameter. Note that if an expression is used as a non-type template argument (e.g. N+0 where N is the parameter), it does not name the current instantiation even if its value matches.
* in the definition of a nested class or class template:
:* name of the nested class used as a member of the current instantiation
* in the definition of a partial specialization or of a member of a partial specialization
:* the name of the class template followed by template argument list for the partial specialization, where each argument is equivalent to its corresponding parameter

{{source|1=
template &lt;class T&gt; class A {
    A* p1;    // A is the current instantiation
    A&lt;T&gt;* p2; // A&lt;T&gt; is the current instantiation
    ::A&lt;T&gt;* p4; // ::A&lt;T&gt; is the current instantiation
    A&lt;T*&gt; p3; // A&lt;T*&gt; is not the current instantiation
    class B {
        B* p1; // B is the current instantiation
        A&lt;T&gt;::B* p2; // A&lt;T&gt;::B is the current instantiation
        typename A&lt;T*&gt;::B* p3; // A&lt;T*&gt;::B is not the current instantiation
    };
};
template &lt;class T&gt; class A&lt;T*&gt; {
    A&lt;T*&gt;* p1;  // A&lt;T*&gt; is the current instantiation
    A&lt;T&gt;* p2;   // A&lt;T&gt; is not the current instantiation
};
template &lt;int I&gt; struct B {
    static const int my_I = I;
    static const int my_I2 = I+0;
    static const int my_I3 = my_I;
    B&lt;my_I&gt;* b3;  // Bm&lt;y_I&gt; is the current instantiation
    B&lt;my_I2&gt;* b4; // B&lt;my_I2&gt; is not the current instantiation
    B&lt;my_I3&gt;* b5; // B&lt;my_I3&gt; is the current instantiation
};
}}

Note that a base class can be the current instantiation if a nested class derives from its enclosing class template. Base classes that are dependent types but aren't the current instantiation are ''dependent base classes''
{{source|1=
template&lt;class T&gt; struct A {
    typedef int M;
    struct B {
        typedef void M;
        struct C;
    };
};
template&lt;class T&gt;
struct A&lt;T&gt;::B::C : A&lt;T&gt; {
    M m; // OK, A&lt;T&gt;::M
};
}}

A name is classified as a member of the current instantiation if it is
* an unqualified name that is found by {{rlp|unqualified lookup}} in the current instantiation or in its non-dependent base.
* {{rlp|qualified lookup|qualified name}}, if the qualifier (the name to the left of {{ttb|::}}) names the current instantiation and lookup finds the name in the current instantiation or in its non-dependent base
* a name used in a class member access expression ({{tt|y}} in {{tt|x.y}} or {{tt|xp-&gt;y}}), where the object expression ({{tt|x}} or {{tt|*xp}}) is the current instantiation and lookup finds the name in the current instantiation or in its non-dependent base

{{source|1=
template &lt;class T&gt;
class A {
   static const int i = 5;
   int n1[i];       // i refers to a member of the current instantiation
   int n2[A::i];    // A::i refers to a member of the current instantiation
   int n3[A&lt;T&gt;::i]; // A&lt;T&gt;::i refers to a member of the current instantiation
   int f();
};
template &lt;class T&gt;
int A&lt;T&gt;::f() {
   return i; // i refers to a member of the current instantiation
}
}}

Members of the current instantiation may be both dependent and non-dependent.

If the lookup of a member of current instantiation gives a different result between the point of instantiation and the point of definition, the lookup is ambiguous. Note however that when a member name is used, it is not automatically converted to a class member access expression, only explicit member access expressions indicate members of current instantiation:
{{source|1=
struct A { int m; };
struct B { int m; };

template&lt;typename T&gt;
struct C : A, T {
  int f() { return this-&gt;m; }// finds A::m in the template definition context
  int g() { return m; }      // finds A::m in the template definition context
};

template int C&lt;B&gt;::f(); // error: finds both A::m and B::m

template int C&lt;B&gt;::g(); // OK: transformation to class member access syntax
                        // does not occur in the template definition context
}}

=== Unknown specializations ===
Within a template definition, certain names are deduced to belong to an ''unknown specialization'', in particular,

* a {{rlp|qualified lookup|qualified name}}, if any name that appears to the left of {{ttb|::}} is a ''dependent type'' that is not a member of the ''current instantiation''
* a {{rlp|qualified lookup|qualified name}}, whose qualifier is the ''current instantiation'', and the name is not found in the current instantiation or any of its non-dependent base classes, and there is a dependent base class
* a name of a member in a class member access expression (the {{tt|y}} in {{tt|x.y}} or {{tt|xp-&gt;y}}), if the type of the object expression ({{tt|x}} or {{tt|*xp}}) is a ''dependent type'' and is not the ''current instantiation''
* a name of a member in a class member access expression (the {{tt|y}} in {{tt|x.y}} or {{tt|xp-&gt;y}}), if the type of the object expression  ({{tt|x}} or {{tt|*xp}}) is the ''current instantiation'', and the name is not found in the current instantiation or any of its non-dependent base classes, and there is a dependent base class

{{source|1=
template&lt;typename T&gt; struct Base {};

template&lt;typename T&gt;
struct Derived : Base&lt;T&gt; {
    void f() {
        // Derived&lt;T&gt; refers to current instantiation
        // there is no 'unknown_type' in the current instantiation
        // but there is a dependent base (Base&lt;T&gt;)
        // Therefore, unknown_type is a member of unknown specialization
        typename Derived&lt;T&gt;::unknown_type z;
    }
};

template&lt;&gt; struct Base&lt;int&gt; { // this specialization provides it
    typedef int unknown_type; 
};
}}


This classification allows the following errors to be detected at the point of template definition (rather than instantiation):

* If any template definition has a {{rlp|qualified lookup|qualified name}} in which the qualifier refers to the ''current instantiation'' and the name is neither a member of ''current instantiation'' nor a member of ''unknown specialization'', the program is ill-formed (no diagnostic required) even if the template is never instantiated.
{{source|1=
template&lt;class T&gt;
class A {
  typedef int type;
  void f() {
    A&lt;T&gt;::type i; // OK: 'type' is a member of the current instantiation
    typename A&lt;T&gt;::other j; // Error:
    // 'other' is not a member of the current instantiation
    // and it is not a member of an unknown specialization
    // because A&lt;T&gt; (which names the current instantiation),
    // has no dependent bases for 'other' to hide in.
}
};
}}
* If any template definition has a member acess expression where the object expression is the ''current instantiation'', but the name is neither a member of ''current instantiation'' nor a member of ''unknown specialization'', the program is ill-formed even if the template is never instantiated.

Members of unknown specialization are always dependent, and are looked up and bound at the point of instantiation as all dependent names (see above)

===The {{c|typename}} disambiguator for dependent names===

In a declaration or a definition of a template, including alias template, a name that is not a member of the ''current instantiation'' and is dependent on a template parameter is not considered to be a type unless the keyword {{c|typename}} is used or unless it was already established as a type name, e.g. with a typedef declaration or by being used to name a base class.

{{example|code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

int p = 1;
template &lt;typename T&gt;
void foo(const std::vector&lt;T&gt; &amp;v)
{

    // std::vector&lt;T&gt;::const_iterator is a dependent name,
    typename std::vector&lt;T&gt;::const_iterator it = v.begin();

    // without 'typename', the following is parsed as multiplication 
    // of the type-dependent member variable 'const_iterator' 
    // and some variable 'p'. Since there is a global 'p' visible
    // at this point, this template definition compiles.
    std::vector&lt;T&gt;::const_iterator* p; 

    typedef typename std::vector&lt;T&gt;::const_iterator iter_t;
    iter_t * p2; // iter_t is a dependent name, but it's known to be a type name
}

template&lt;typename T&gt;
struct S {
    typedef int value_t; // member of current instantiation
    void f() {
        S&lt;T&gt;::value_t n{};  // S&lt;T&gt; is dependent, but 'typename' not needed
        std::cout &lt;&lt; n &lt;&lt; '\n';
    }
};

int main()
{
    std::vector&lt;int&gt; v;
    foo(v); // template instantiation fails: there is no member variable
            // called 'const_iterator' in the type std::vector&lt;int&gt;
    S&lt;int&gt;().f();
}
}}

The keyword {{c|typename}} may only be used in this way before qualified names (e.g. {{c|T::x}}), but the names need not be dependent.

Usual {{rlp|qualified lookup|qualified name lookup}} is used for the identifier prefixed by {{tt|typename}}. Unlike the case with {{rlp|elaborated type specifier}}, the lookup rules do not change despite the qualifier:

{{source|1=
struct A { // A has a nested variable X and a nested type struct X
   struct X {};
   int X;
};
struct B {
    struct X { }; // B has a nested type struct X
};
template&lt;class T&gt; void f(T t) {
    typename T::X x;
}
void foo() {
    A a;
    B b;
    f(b); // OK: instantiates f&lt;B&gt;, T::X refers to B::X
    f(a); // error: cannot instantiate f&lt;A&gt;:
          // because qualified name lookup for A::X finds the data member
}
}}

{{rev begin}}
{{rev | until=c++11 |
The keyword {{c|typename}} must only be used in template declarations and definitions and only in contexts in which dependent names can be used. This excludes explicit specialization declarations and explicit instantiation declarations. 
}}
{{rev | since=c++11 |
The keyword {{c|typename}} can be used even outside of templates.
{{source|1=
#include &lt;vector&gt;

int main() {
    typedef typename std::vector&lt;T&gt;::const_iterator iter_t; // OK in C++11
    typename std::vector&lt;int&gt; v; // also OK in C++11

}
}}
}}
{{rev end}}
===The {{c|template}} disambiguator for dependent names===
Similarly, in a template definition, a dependent name that is not a member of the ''current instantiation'' is not considered to be a template name unless the disambiguation keyword {{c|template}} is used or unless it was already established as a template name:

{{example|code=
template&lt;typename T&gt;
struct S {
    template&lt;typename U&gt; void foo(){}
};

template&lt;typename T&gt;
void bar()
{
    S&lt;T&gt; s;
    s.foo&lt;T&gt;(); // error: &lt; parsed as less than operator
    s.template foo&lt;T&gt;(); // OK
}
}}

The keyword {{c|template}} may only be used in this way after operators {{c|::}} (scope resolution), {{c|-&gt;}} (member access through pointer), and {{c|.}} (member access), the following are all valid examples:

* {{c|T::template foo&lt;X&gt;();}}
* {{c|s.template foo&lt;X&gt;();}}
* {{c|this-&gt;template foo&lt;X&gt;();}}
* {{c|typename T::template iterator&lt;int&gt;::value_type v;}}

As is the case with {{c|typename}}, the {{c|template}} prefix is allowed even if the name is not dependent{{rev inl|since=c++11| or the use does not appear in the scope of a template}}.

{{rev begin}}
{{rev|since=c++17|
Even if the name to the left of {{ttb|::}} refers to a namespace, the template disambiguator is allowed:
{{source|1=
template&lt;typename&gt; struct s {};
::template s&lt;void&gt; q; // allowed, but unnecessary
}}
}}
{{rev end}}

Due to the special rules for {{rlp|unqualified lookup|unqualified name lookup}} for template names in member access expressions, when a non-dependent template name appears in a member access expression (after {{c|-&gt;}} or after {{c|.}}), the disambiguator is unnecessary if there is a {{rev inl|since=c++11|class}} template with the same name found by ordinary lookup in the context of the expression. {{rev inl|until=c++11|However, if the template found by lookup in the context of the expression differs from the one found in the context of the class, the program is ill-formed}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2100|std=C++14|before=address of a static data member of class template wasn't listed as value-dependent|after=listed}}
{{dr list end}}</text>
      <sha1>c90sjwn97zr0ge2nicy700h5rvpnzwp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/derived class</title>
    <ns>0</ns>
    <id>10177</id>
    <revision>
      <id>90076</id>
      <parentid>90075</parentid>
      <timestamp>2017-02-05T16:22:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 90075 by [[Special:Contributions/Cubbi|Cubbi]] ([[User talk:Cubbi|talk]]) oh yes, I can, in a nested class, one pack from outer, one on its own.</comment>
      <text xml:space="preserve" bytes="8726">{{title|Derived classes}}
{{cpp/language/classes/navbar}}

Any class type (whether declared with {{spar|class-key}} {{tt|class}} or {{tt|struct}}) may be declared as ''derived'' from one or more ''base classes'' which, in turn, may be derived from their own base classes, forming an inheritance hierarchy.

The list of base classes is provided in the {{spar|base-clause}} of the  {{rlp|class|class declaration syntax}}. The {{spar|base-clause}} consists of the character {{ttb|:}} followed by a comma-separated list of one or more {{spar|base-specifier}}s.

{{sdsc begin}}
{{sdsc|1=
{{spar|attr}}{{mark optional}} {{spar|access-specifier}}{{mark optional}} {{spar|virtual-specifier}}{{mark optional}} {{spar|class-or-decltype}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|access-specifier}} | one of {{tt|private}}, {{tt|public}}, or {{tt|protected}}}}
{{par | {{spar|virtual-specifier}} | the keyword {{tt|virtual}}}}
{{par end}}

{{spar|virtual-specifier}} and {{spar|access-specifier}} may appear in any order

{{rev begin}}
{{rev|since=c++11|
{{spar|base-specifier}}s in a {{spar|base-clause}} may be {{rlp|parameter_pack|pack expansion}}s.

A class or struct declared {{rlp|final}} cannot appear in {{spar|base-clause}}.
}}
{{rev end}}

If {{spar|access-specifier}} is omitted, it defaults to {{tt|public}} for classes declared with class-key {{tt|struct}} and to {{tt|private}} for classes declared with class-key {{tt|class}}.

{{source|struct Base {
    int a, b, c;
};
// every object of type Derived includes Base as a subobject
struct Derived : Base {
    int b;
};
// every object of type Derived2 includes Derived and Base as subobjects
struct Derived2 : Derived {
    int c;
};
}}

The classes listed in the {{spar|base-clause}} are direct base classes. Their bases are indirect base classes. The same class cannot be specified as a direct base class more than once, but the same class can be both direct and indirect base class.

Each direct and indirect base class is present, as ''base class subobject'', within the object representation of the derived class at implementation-defined offset. Empty base classes usually do not increase the size of the derived object due to {{rlp|ebo|empty base optimization}}. The constructors of base class subobjects are called by the constructor of the derived class: arguments may be provided to those constructors in the {{rlp|initializer_list|member initializer list}}. 

===Virtual base classes===
For each distinct base class that is specified {{tt|virtual}}, the most derived object contains only one base class subobject of that type, even if the class appears many times in the inheritance hierarchy (as long as it is inherited {{tt|virtual}} every time).

{{source|1=struct B { int n; };
class X : public virtual B {};
class Y : virtual public B {};
class Z : public B {};
// every object of type AA has one X, one Y, one Z, and two B's:
// one that is the base of Z and one that is shared by X and Y
struct AA : X, Y, Z {
    void f() {
        X::n = 1; // modifies the virtual B subobject's member
        Y::n = 2; // modifies the same virtual B subobject's member
        Z::n = 3; // modifies the non-virtual B subobject's member

        std::cout &lt;&lt; X::n &lt;&lt; Y::n &lt;&lt; Z::n &lt;&lt; '\n'; // prints 223
    }
};
}}

An example of an inheritance hierarchy with virtual base classes is the iostreams hierarchy of the standard library: {{lc|std::istream}} and {{lc|std::ostream}} are derived from {{lc|std::basic_ios|std::ios}} using virtual inheritance. {{lc|std::iostream}} is derived from both {{lc|std::istream}} and {{lc|std::ostream}}, so every instance of {{lc|std::iostream}} contains a {{lc|std::ostream}} subobject, a {{lc|std::istream}} subobject, and just one {{lc|std::basic_ios|std::ios}} subobject (and, consequently, one {{lc|std::ios_base}}).

All virtual base subobjects are initialized before any non-virtual base subobject, so only the most derived class calls the constructors of the virtual bases in its {{rlp|initializer_list|member initializer list}}:

{{source|1=struct B {
    int n;
    B(int x) : n(x) {}
};
struct X : virtual B { X() : B(1) {} };
struct Y : virtual B { Y() : B(2) {} };
struct AA : X, Y     { AA() : B(3), X(), Y() {} };

// the default constructor of AA calls the default constructors of X and Y
// but those constructors do not call the constructor of B because B is a virtual base
AA a; // a.n == 3
// the default constructor of X calls the constructor of B
X x; // x.n == 1
}}

The are special rules for unqualified name lookup for class members when virtual inheritance is involved (sometimes referred to as the rules of dominance), see {{rlp|unqualified_lookup#Member_function_definition}}.

===Public inheritance===
When a class uses {{tt|public}} {{rlp|access|member access specifier}} to derive from a base, all public members of the base class are accessible as public members of the derived class and all protected members of the base class are accessible as protected members of the derived class (private members of the base are never accessible unless friended)

Public inheritance models the subtyping relationship of object-oriented programming: the derived class object IS-A base class object. References and pointers to a derived object are expected to be usable by any code that expects references or pointers to any of its public bases (see [[enwiki:Liskov_substitution_principle|LSP]]) or, in [[enwiki:Design_by_contract|DbC]] terms, a derived class should maintain class invariants of its public bases, should not strengthen any precondition or weaken any postcondition of a member function it {{rlp|virtual|overrides}}.

{{todo|typical Shape, Vehicle, and Animal don't do much with invariants. Would be nice to have a a concise example that adjusts contracts correctly: weakens pre and/or strengthens post in the derived class}}

===Protected inheritance===
When a class uses {{tt|protected}} {{rlp|access|member access specifier}} to derive from a base, all public and protected members of the base class are accessible as protected members of the derived class (private members of the base are never accessible unless friended)

Protected inheritance may be used for &quot;controlled polymorphism&quot;: within the members of Derived, as well as within the members of all further-derived classes, the derived class IS-A base: references and pointers to Derived may be used where references and pointers to Base are expected.

===Private inheritance===
When a class uses {{tt|private}} {{rlp|access|member access specifier}} to derive from a base, all public and protected members of the base class are accessible as private members of the derived class (private members of the base are never accessible unless friended).

Private inheritance is commonly used in policy-based design, since policies are usually empty classes, and using them as bases both enables static polymorphism and leverages {{rlp|ebo|empty-base optimization}}

Private inheritance can also be used to implement the composition relationship (the base class subobject is an implementation detail of the derived class object). Using a member offers better encapsulation and is generally preferred unless the derived class requires access to protected members (including constructors) of the base, needs to override a virtual member of the base, needs the base to be constructed before and destructed after some other base subobject, needs to share a virtual base or needs to control the construction of a virtual base. Use of members to implement composition is also not applicable in the case of multiple inheritance from a {{rlp|parameter pack}} or when the identities of the base classes are determined at compile time through template metaprogramming.

Similar to protected inheritance, private inheritance may also be used for controlled polymorphism: within the members of the derived (but not within further-derived classes), derived IS-A base.

{{source|1=
template&lt;typename Transport&gt;
class service : Transport  // private inheritance from the Transport policy
{
public:
    void transmit() {
        this-&gt;send(...);  // send using whatever transport was supplied
    }
};
// TCP transport policy
class tcp {
public:
    void send(...);
};
// UDP transport policy
class udp {
public:
    void send(...);
};

service&lt;tcp&gt; service(host, port); 
service.transmit(...); // send over TCP
}}

===Member name lookup===
Unqualified and qualified name lookup rules for class members are detailed in {{rlp|lookup|name lookup}}.

===See also===
* {{rlp|virtual|virtual functions}}
* {{rlp|abstract_class|abstract classes}}</text>
      <sha1>14dm8k8k57k78ntf836nd91kggwcaux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/destructor</title>
    <ns>0</ns>
    <id>6540</id>
    <revision>
      <id>89287</id>
      <parentid>88828</parentid>
      <timestamp>2017-01-16T13:21:01Z</timestamp>
      <contributor>
        <ip>62.195.169.23</ip>
      </contributor>
      <comment>Fixed typo</comment>
      <text xml:space="preserve" bytes="10102">{{title|Destructors}}
{{cpp/language/classes/navbar}}

A destructor is a special {{rlp|member functions|member function}} that is called when the {{rlp|lifetime|lifetime of an object}} ends. The purpose of the destructor is to free the resources that the object may have acquired during its lifetime.

===Syntax===
{{sdsc begin}}
{{sdsc|num=1|{{ttb|~}} {{spar|class_name}} {{ttb|();}}}}
{{sdsc|num=2|{{ttb|virtual}} {{ttb|~}} {{spar|class_name}} {{ttb|();}}}}
{{sdsc|num=3|notes={{mark since c++11}}|{{spar|decl-specifier-seq}}{{mark optional}} {{ttb|~}} {{spar|class_name}} {{ttb|() {{=}} default;}}}}
{{sdsc|num=4|notes={{mark since c++11}}|{{spar|decl-specifier-seq}}{{mark optional}} {{ttb|~}} {{spar|class_name}} {{ttb|() {{=}} delete;}}}}
{{sdsc|num=5|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}}{{mark optional}} {{spar|id-expression}} {{ttb|(}} {{ttb|void}}{{mark optional}} {{ttb|)}} {{spar|except}}{{mark optional}} {{spar|attr}}{{mark optional}} {{ttb|;}} }}
{{sdsc end}}
@1@ Typical declaration of a destructor
@2@ Virtual destructor is usually required in a base class
@3@ Forcing a destructor to be generated by the compiler
@4@ Disabling the implicit destructor
@5@ Formal syntax of a destructor declaration

{{par begin}}
{{par| {{spar|decl-specifier-seq}} | {{tt|friend}}, {{tt|inline}}, {{tt|virtual}}, or nothing (no return type) }}
{{par | {{spar|id-expression}} | within a class definition, the symbol {{ttb|~}} followed by the class name. Within a class template, the symbol {{ttb|~}} followed by the name of the current instantiation of the template. At namespace scope or in a {{rlp|friend}} declaration within a different class, ''nested-name-specifier'' followed by the symbol {{ttb|~}} followed by the class name which is the same class as the one named by the nested-name-specifier.  In any case, the name must be the actual name of the class or template, and not a typedef. The entire id-expression may be surrounded by parentheses which do not change its meaning.}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|except}} | exception specification as in any function declaration (either {{rlp|except_spec|dynamic exception specification}}{{mark deprecated}} or {{rlp|noexcept_spec|noexcept specification}}{{mark c++11}})
{{rev begin}}
{{rev|since=c++11|
Except that if no exception specification is explicitly provided, the exception specification is considered to be one that would be used by the implicitly-declared destructor (see below). In most cases, this is {{c|noexcept(true)}}. Thus a throwing destructor must be explicitly declared {{c|noexcept(false)}}.
}}
{{rev end}}
}}
{{par end}}

===Explanation===
The destructor is called whenever an object's {{rlp|lifetime}} ends, which includes 
* [[cpp/utility/program/exit|program termination]], for objects with static {{rlp|storage duration}}
{{rev begin}}
{{rev|since=c++11|
* thread exit, for objects with thread-local storage duration
}}{{rev end}}
* end of scope, for objects with automatic storage duration and for temporaries whose life was extended by binding to a reference
* {{rlp|delete|delete-expression}}, for objects with dynamic storage duration
* end of the full {{rlp|expressions|expression}}, for nameless temporaries
* {{rlp|throw|stack unwinding}}, for objects with automatic storage duration when an exception escapes their block, uncaught.

The destructor may also be called directly, e.g. to destroy an object that was constructed using {{rlp|new|placement-new}} or through an allocator member function such as [[cpp/memory/allocator/destroy|std::allocator::destroy()]], to destroy an object that was constructed through the allocator. Note that calling a destructor directly for an ordinary object, such as a local variable, invokes undefined behavior when the destructor is called again, at the end of scope.

In generic contexts, the destructor call syntax can be used with an object of non-class type; this is known as pseudo-destructor call: see {{rlp|operator_member_access#Built-in_member_access_operators|member access operator}}.

===Implicitly-declared destructor===
If no user-declared destructor is provided for a {{rlp|class|class type}} ({{c|struct}}, {{c|class}}, or {{c|union}}), the compiler will always declare a destructor as an {{tt|inline public}} member of its class.

As with any implicitly-declared special member function, the exception specification of the implicitly-declared destructor is non-throwing unless {{rev inl|since=c++17|the destructor of any potentially-constructed base or member is {{rlp|noexcept_spec|potentially-throwing}}}}{{rev inl|until=c++17|implicit definition would directly invoke a function with a different exception specification}}. In practice, implicit destructors are {{tt|noexcept}} unless the class is &quot;poisoned&quot; by a base or member whose destructor is {{tt|noexcept(false)}}.

===Deleted implicitly-declared destructor===
The implicitly-declared or defaulted destructor for class {{tt|T}} is {{rev inl|until=c++11| undefined }}{{rev inl|since=c++11|defined as ''deleted''}} if any of the following is true:
* {{tt|T}} has a non-static data member that cannot be destructed (has deleted or inaccessible destructor)
* {{tt|T}} has direct or virtual base class that cannot be destructed (has deleted or inaccessible destructors)
{{rev begin}}
{{rev | since=c++11 |
* {{tt|T}} is a union and has a variant member with non-trivial destructor.
}}
{{rev end}}
* The implicitly-declared destructor is virtual (because the base class has a virtual destructor) and the lookup for the deallocation function ({{c|operator delete()}} results in a call to ambiguous, deleted, or inaccessible function.

===Trivial destructor===
The destructor for class {{tt|T}} is trivial if all of the following is true:
* The destructor is not user-provided (meaning, it is either implicitly declared, or explicitly defined as defaulted on its first declaration)
* The destructor is not virtual (that is, the base class destructor is not virtual)
* All direct base classes have trivial destructors
* All non-static data members of class type (or array of class type) have trivial destructors
A trivial destructor is a destructor that performs no action. Objects with trivial destructors don't require a delete-expression and may be disposed of by simply deallocating their storage. All data types compatible with the C language (POD types) are trivially destructible.

===Implicitly-defined destructor===
If an implicitly-declared destructor is not deleted, it is implicitly defined (that is, a function body is generated and compiled) by the compiler when it is {{rlp|definition#ODR-use|odr-used}}. This implicitly-defined destructor has an empty body.

===Destruction sequence===
For both user-defined or implicitly-defined destructors, after the body of the destructor is executed, the compiler calls the destructors for all non-static non-variant members of the class, in reverse order of declaration, then it calls the destructors of all direct non-virtual base classes in {{rlp|initializer_list#Initialization_order|reverse order of construction}} (which in turn call the destructors of their members and their base classes, etc), and then, if this object is of most-derived class, it calls the destructors of all virtual bases.

Even when the destructor is called directly (e.g. {{c|obj.~Foo();}}), the return statement in {{c|~Foo()}} does not return control to the caller immediately: it calls all those member and base destructors first.

===Virtual destructors===
Deleting an object through pointer to base invokes undefined behavior unless the destructor in the base class is {{rlp|virtual}}:

{{source|1=
class Base {
 public:
    virtual ~Base() {}
};
class Derived : public Base {};
Base* b = new Derived;
delete b; // safe
}}

A common guideline is that a destructor for a base class must be [http://www.gotw.ca/publications/mill18.htm either public and virtual or protected and nonvirtual]

===Pure virtual destructors===
A destructor may be declared {{rlp|abstract class|pure virtual}}, for example in a base class which needs to be made abstract, but has no other suitable functions that could be declared pure virtual. Such destructor must have a definition, since all base class destructors are always called when the derived class is destroyed:

{{source|1=
class AbstractBase {
 public:
    virtual ~AbstractBase() = 0;
};
AbstractBase::~AbstractBase() {}
class Derived : public AbstractBase {};
// AbstractBase obj;   // compiler error
Derived obj;           // OK
}}

===Exceptions===
As any other function, a destructor may terminate by throwing an {{rlp|exceptions|exception}} {{rev inl|since=c++11|(this usually requires it to be explicitly declared {{c|noexcept(false)}})}}, however if this destructor happens to be called during {{rlp|throw|stack unwinding}}, {{lc|std::terminate}} is called instead.

Although {{lc|std::uncaught_exception}} may sometimes be used to detect stack unwinding in progress, it is generally considered bad practice to allow any destructor to terminate by throwing an exception. This functionality is nevertheless used by some libraries, such as  [https://github.com/SOCI/soci SOCI] and [http://galeracluster.com/downloads/ Galera 3], which rely on the ability of the destructors of nameless temporaries to throw exceptions at the end of the full expression that constructs the temporary.

===Example===
{{example|code=
#include &lt;iostream&gt;

struct A
{
    int i;

    A ( int i ) : i ( i ) {}

    ~A()
    {
        std::cout &lt;&lt; &quot;~a&quot; &lt;&lt; i &lt;&lt; std::endl;
    }
};

int main()
{
    A a1(1);
    A* p;

    { // nested scope
        A a2(2);
        p = new A(3);
    } // a2 out of scope

    delete p; // calls the destructor of a3
}
|output=
~a2
~a3
~a1
}}

[[de:cpp/language/destructor]]
[[es:cpp/language/destructor]]
[[fr:cpp/language/destructor]]
[[it:cpp/language/destructor]]
[[ja:cpp/language/destructor]]
[[pt:cpp/language/destructor]]
[[ru:cpp/language/destructor]]
[[zh:cpp/language/destructor]]</text>
      <sha1>6n7173ab32lgn44i3rj7vppotcf4fuz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/direct initialization</title>
    <ns>0</ns>
    <id>8867</id>
    <revision>
      <id>86348</id>
      <parentid>83948</parentid>
      <timestamp>2016-06-27T20:49:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0135r1: the  8.5[dcl.init]/17.6: part of guaranteed copy elision</comment>
      <text xml:space="preserve" bytes="4414">{{title|direct initialization}}
{{cpp/language/initialization/navbar}}
Initializes an object from explicit set of constructor arguments.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{spar|T}} {{spar| object}} {{ttb|( }} {{spar|arg}} {{ttb|);}}
{{spar|T}} {{spar| object}} {{ttb|( }} {{spar|arg1, arg2, ...}} {{ttb|);}}
}}
{{sdsc | num=2 | {{spar|T}} {{spar| object}} {{ttb|{ }} {{spar|arg}} {{ttb|};}}
{{spar|T}} {{spar| object}} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|};}}
|notes={{mark since c++11}}}}
{{sdsc | num=3 | {{spar|T}} {{ttb|( }} {{spar|other}} {{ttb|)}}
{{spar|T}} {{ttb|( }} {{spar|arg1, arg2, ...}} {{ttb|);}}
}}
{{sdsc | num=4 | {{ttb|static_cast&lt;}} {{spar|T}} {{ttb|&gt;(}} {{spar|other}} {{ttb|)}} }}
{{sdsc | num=5 | {{ttb|new}} {{spar|T}}{{ttb|(}}{{spar|args, ...}}{{ttb|)}} }}
{{sdsc | num=6 | {{spar|Class}}{{ttb|::}}{{spar|Class}}{{ttb|() : }}{{spar|member}}{{ttb|(}}{{spar|args, ...}}{{ttb|) {...}} }}
{{sdsc | num=7 | {{ttb|[}}arg{{ttb|](){...}} | notes={{mark since c++11}}}}
{{sdsc end}}

===Explanation===

Direct initialization is performed in the following situations:
@1@ initialization with a nonempty parenthesized list of expressions
@2@ during [[cpp/language/list_initialization|list-initialization]] sequence, if no initializer-list constructors are provided and a matching constructor is accessible, and all necessary implicit conversions are non-narrowing.
@3@ initialization of a prvalue temporary by [[cpp/language/explicit_cast|functional cast]] or with a parenthesized expression list
@4@ initialization of a prvalue temporary by a [[cpp/language/static_cast|static_cast]] expression
@5@ initialization of an object with dynamic storage duration by a new-expression with a non-empty initializer
@6@ initialization of a base or a non-static member by constructor [[cpp/language/initializer_list|initializer list]]
@7@ initialization of closure object members from the variables caught by copy in a lambda-expression

The effects of direct initialization are:

* If {{tt|T}} is a class type, 

{{rev begin}}
{{rev|since=c++17|
:* if the initializer is a {{rlp|value category|prvalue}} expression whose cv-unqualified type is the same class as {{tt|T}}, the initializer expression itself, rather that a temporary materialized from it, is used to initialize the destination object: see {{rlp|copy elision}}
}}
{{rev end}}
:* the constructors of {{tt|T}} are examined and the best match is selected by overload resolution. The constructor is then called to initialize the object.

* Otherwise, if {{tt|T}} is a non-class type, [[cpp/language/implicit_cast|standard conversions]] are used, if necessary, to convert the value of {{spar|other}} to the cv-unqualified version of {{tt|T}}.

===Notes===
Direct-initialization is more permissive than copy-initialization: copy-initialization only considers non-{{rlp|explicit}} constructors and non-explicit user-defined {{rlp|cast operator|conversion functions}}, while direct-initialization considers all constructors and all user-defined conversion functions.

===Example===

{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo {
    int mem;
    explicit Foo(int n) : mem(n) {}
};

int main()
{
    std::string s1(&quot;test&quot;); // constructor from const char*
    std::string s2(10, 'a');

    std::unique_ptr&lt;int&gt; p(new int(1)); // OK: explicit constructors allowed
//  std::unique_ptr&lt;int&gt; p = new int(1); // error: constructor is explicit

    Foo f(2); // f is direct-initialized:
              // constructor parameter n is copy-initialized from the rvalue 2
              // f.mem is direct-initialized from the parameter n
//  Foo f2 = 2; // error: constructor is explicit

    std::cout &lt;&lt; s1 &lt;&lt; ' ' &lt;&lt; s2 &lt;&lt; ' ' &lt;&lt; *p &lt;&lt; ' ' &lt;&lt; f.mem  &lt;&lt; '\n';
}
 | output=
test aaaaaaaaaa 1 2
}}

===See also===
* [[cpp/language/default_initialization|default initialization]]
* [[cpp/language/copy_initialization|copy initialization]]
* [[cpp/language/aggregate_initialization|aggregate initialization]]
* [[cpp/language/list_initialization|list initialization]]

[[de:cpp/language/direct initialization]]
[[es:cpp/language/direct initialization]]
[[fr:cpp/language/direct initialization]]
[[it:cpp/language/direct initialization]]
[[ja:cpp/language/direct initialization]]
[[pt:cpp/language/direct initialization]]
[[ru:cpp/language/direct initialization]]
[[zh:cpp/language/direct initialization]]</text>
      <sha1>fqyv5dpnlusi2ygnsh38dkcco9451qz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/do</title>
    <ns>0</ns>
    <id>693</id>
    <revision>
      <id>87438</id>
      <parentid>85868</parentid>
      <timestamp>2016-08-24T13:51:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>progress guarantee notes</comment>
      <text xml:space="preserve" bytes="2248">{{title|do-while loop}}
{{cpp/language/statements/navbar}}
Executes a {{spar|statement}} repeatedly, until the value of {{spar|expression}} becomes false. The test takes place after each iteration.

===Syntax===

{{sdsc begin}}
{{sdsc | {{spar|attr}}{{mark optional}} {{ttb|do}} {{spar|statement}} {{ttb|while (}} {{spar|expression}} {{ttb|)}}  {{ttb|;}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | any number of {{rlp|attributes}} }}
{{par | {{spar|expression}} | any {{rlp|expressions|expression}} which is {{rlp|implicit_cast|contextually convertible}} to bool. This expression is evaluated after each iteration, and if it yields {{c|false}}, the loop is exited.}}
{{par | {{spar|statement}} | any {{rlp|statements|statement}}, typically a compound statement, which is the body of the loop }}
{{par end}}

===Explanation===
{{spar|statement}} is always executed at least once, even if {{spar|expression}} always yields false. If it should not execute in this case, {{rlp|while}} or {{rlp|for}} loop may be used.

If the execution of the loop needs to be terminated at some point, {{rlp|break | break statement}} can be used as terminating statement. 

If the execution of the loop needs to be continued at the end of the loop body, {{rlp|continue | continue statement}} can be used as shortcut.

===Notes===
{{cpp/language/process_guarantee_note}}

===Keywords===

{{ltt|cpp/keyword/do}},
{{ltt|cpp/keyword/while}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;string&gt;

int main()
{
    int j = 2;
    do { // compound statement is the loop body
        j += 2;
        std::cout &lt;&lt; j &lt;&lt; &quot; &quot;;
    } while (j &lt; 9);
    std::cout &lt;&lt; '\n';
    // common situation where do-while loop is used
    std::string s = &quot;aba&quot;;
    std::sort(s.begin(), s.end());
    do std::cout &lt;&lt; s &lt;&lt; '\n'; // expression statement is the loop body
    while(std::next_permutation(s.begin(), s.end()));
}
 | output=
4 6 8 10
aab
aba
baa
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/do | do-while}}
{{dsc end}}

[[de:cpp/language/do]]
[[es:cpp/language/do]]
[[fr:cpp/language/do]]
[[it:cpp/language/do]]
[[ja:cpp/language/do]]
[[pt:cpp/language/do]]
[[ru:cpp/language/do]]
[[zh:cpp/language/do]]</text>
      <sha1>axl83jste51zb4h0ls2ksvghbtrja92</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/dynamic cast</title>
    <ns>0</ns>
    <id>2739</id>
    <revision>
      <id>90586</id>
      <parentid>90583</parentid>
      <timestamp>2017-03-05T16:38:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 90583 by [[Special:Contributions/61.157.97.82|61.157.97.82]] ([[User talk:61.157.97.82|talk]]) this is supposed to describe the operand, not the return</comment>
      <text xml:space="preserve" bytes="6444">{{title|dynamic_cast conversion}}
{{cpp/language/expressions/navbar}}
Safely converts pointers and references to classes up, down, and sideways along the inheritance hierarchy.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|dynamic_cast &amp;lt;}} {{spar|new_type}} {{ttb|&amp;gt; (}} {{spar|expression}} {{ttb|)}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|new_type}} | pointer to complete class type, reference to complete class type, or pointer to (optionally cv-qualified) void}}
{{par | {{spar|expression}} | lvalue of a complete class type if {{spar|new_type}} is a reference, prvalue of a pointer to complete class type if {{spar|new_type}} is a pointer.}}
{{par end}}

If the cast is successful, {{tt|dynamic_cast}} returns a value of type {{tt|new_type}}. If the cast fails and {{tt|new_type}} is a pointer type, it returns a null pointer of that type. If the cast fails and {{tt|new_type}} is a reference type, it throws an exception that matches a handler of type {{lc|std::bad_cast}}.

===Explanation===

Only the following conversions can be done with {{c|dynamic_cast}}, except when such conversions would cast away ''constness'' or ''volatility''.

@1@ If the type of {{spar|expression}} is exactly {{spar|new_type}} or a less cv-qualified version of {{spar|new_type}}, the result is the value of {{spar|expression}}, with type {{spar|new_type}}. (In other words, {{c|dynamic_cast}} can be used to add constness. An implicit cast and {{c|static_cast}} can perform this conversion as well.)
@2@ If the value of {{spar|expression}} is the null pointer value, the result is the null pointer value of type {{spar|new_type}}.
@3@ If {{spar|new_type}} is a pointer or reference to {{tt|Base}}, and the type of {{spar|expression}} is a pointer or reference to {{tt|Derived}}, where {{tt|Base}} is a unique, accessible base class of {{tt|Derived}}, the result is a pointer or reference to the {{tt|Base}} class subobject within the {{tt|Derived}} object pointed or identified by {{spar|expression}}. (Note: an implicit cast and {{c|static_cast}} can perform this conversion as well.)
@4@ If {{spar|expression}} is a pointer or reference to a [[cpp/language/object#Polymorphic_objects|polymorphic type]], and {{tt|new_type}} is a pointer to {{c|void}}, the result is a pointer to the most derived object pointed or referenced by {{spar|expression}}.
@5@ If {{spar|expression}} is a pointer or reference to a [[cpp/language/object#Polymorphic_objects|polymorphic type]] {{tt|Base}}, and {{tt|new_type}} is a pointer or reference to the type {{tt|Derived}} a run-time check is performed:
:@a@ The most derived object pointed/identified by {{spar|expression}} is examined. If, in that object, {{spar|expression}} points/refers to a public base of {{tt|Derived}}, and if only one subobject of {{tt|Derived}} type is derived from the subobject pointed/identified by {{spar|expression}}, then the result of the cast points/refers to that {{tt|Derived}} subobject. (This is known as a &quot;downcast&quot;.)
:@b@ Otherwise, if {{spar|expression}} points/refers to a public base of the most derived object, and, simultaneously, the most derived object has an unambiguous public base class of type {{tt|Derived}}, the result of the cast points/refers to that {{tt|Derived}} (This is known as a &quot;sidecast&quot;.)
:@c@ Otherwise, the runtime check fails. If the {{c|dynamic_cast}} is used on pointers, the null pointer value of type {{spar|new_type}} is returned. If it was used on references, the exception {{lc|std::bad_cast}} is thrown.
@6@ When {{c|dynamic_cast}} is used in a constructor or a destructor (directly or indirectly), and {{spar|expression}} refers to the object that's currently under construction/destruction, the object is considered to be the most derived object. If {{spar|new_type}} is not a pointer or reference to the constructor's/destructor's own class or one of its bases, the behavior is undefined.

Similar to other cast expressions, the result is:
* an lvalue if {{spar|new_type}} is an lvalue reference type ({{spar|expression}} must be an lvalue)
* an xvalue if {{spar|new_type}} is an rvalue reference type ({{spar|expression}} {{rev inl|until=c++17|may be lvalue or rvalue}}{{rev inl|since=c++17|must be a glvalue}} of a complete class type)
* a prvalue otherwise (in this case, if {{spar|new_type}} is a pointer type)

===Note===
A downcast can also be performed with {{c|static_cast}}, which avoids the cost of the runtime check, but it's only safe if the program can guarantee (through some other logic) that the object pointed to by {{spar|expression}} is definitely {{tt|Derived}}.

===Keywords===
{{ltt|cpp/keyword/dynamic_cast}}

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;

struct V {
    virtual void f() {};  // must be polymorphic to use runtime-checked dynamic_cast
};
struct A : virtual V {};
struct B : virtual V {
  B(V* v, A* a) {
    // casts during construction (see the call in the constructor of D below)
    dynamic_cast&lt;B*&gt;(v); // well-defined: v of type V*, V base of B, results in B*
    dynamic_cast&lt;B*&gt;(a); // undefined behavior: a has type A*, A not a base of B
  }
};
struct D : A, B {
    D() : B((A*)this, this) { }
};

struct Base {
    virtual ~Base() {}
};

struct Derived: Base {
    virtual void name() {}
};

int main()
{
    D d; // the most derived object
    A&amp; a = d; // upcast, dynamic_cast may be used, but unnecessary
    D&amp; new_d = dynamic_cast&lt;D&amp;&gt;(a); // downcast
    B&amp; new_b = dynamic_cast&lt;B&amp;&gt;(a); // sidecast


    Base* b1 = new Base;
    if(Derived* d = dynamic_cast&lt;Derived*&gt;(b1))
    {
        std::cout &lt;&lt; &quot;downcast from b1 to d successful\n&quot;;
        d-&gt;name(); // safe to call
    }

    Base* b2 = new Derived;
    if(Derived* d = dynamic_cast&lt;Derived*&gt;(b2))
    {
        std::cout &lt;&lt; &quot;downcast from b2 to d successful\n&quot;;
        d-&gt;name(); // safe to call
    }
    
    delete b1;
    delete b2;
}
 | output=
downcast from b2 to d successful
}}

===See also===
* [[cpp/language/const_cast|const_cast]]
* [[cpp/language/static_cast|static_cast]]
* [[cpp/language/reinterpret_cast|reinterpret_cast]]
* [[cpp/language/explicit_cast|explicit cast]]
* [[cpp/language/implicit_cast|implicit conversions]]

[[de:cpp/language/dynamic cast]]
[[es:cpp/language/dynamic cast]]
[[fr:cpp/language/dynamic cast]]
[[it:cpp/language/dynamic cast]]
[[ja:cpp/language/dynamic cast]]
[[pt:cpp/language/dynamic cast]]
[[ru:cpp/language/dynamic cast]]
[[zh:cpp/language/dynamic cast]]</text>
      <sha1>t6e047s5u1n09b9950qf97t09ae0hl9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/ebo</title>
    <ns>0</ns>
    <id>13018</id>
    <revision>
      <id>73682</id>
      <parentid>66608</parentid>
      <timestamp>2014-11-11T15:03:38Z</timestamp>
      <contributor>
        <ip>89.228.143.151</ip>
      </contributor>
      <comment>Improved wording.</comment>
      <text xml:space="preserve" bytes="3976">{{title|Empty base optimization}}
{{cpp/language/navbar}}
Allows the size of an empty base subobject to be zero.

===Explanation===

The size of any {{rlp|object}} or member subobject is required to be at least 1 even if the type is an empty {{rlp|class|class type}} (that is, a class or struct that has no non-static data members), in order to be able to guarantee that the addresses of distinct objects of the same type are always distinct.

However, base class subobjects are not so constrained, and can be completely optimized out from the object layout:

{{source|1=
#include &lt;cassert&gt;

struct Base {}; // empty class

struct Derived1 : Base {
    int i;
};

int main()
{
    // the size of any object of empty class type is at least 1
    assert(sizeof(Base) == 1);

    // empty base optimization applies
    assert(sizeof(Derived1) == sizeof(int));
}
}}

Empty base optimization is prohibited if one of the empty base classes is also the type or the base of the type of the first non-static data member, since the two base subobjects of the same type are required to have different addresses within the object representation of the most derived type.

A typical example of such situation is the naive implementation of {{lc|std::reverse_iterator}} (derived from the empty base {{lc|std::iterator}}), which holds the underlying iterator (also derived from {{lc|std::iterator}}) as its first non-static data member. 

{{source|1=
#include &lt;cassert&gt;

struct Base {}; // empty class

struct Derived1 : Base {
    int i;
};

struct Derived2 : Base {
    Base c; // Base, occupies 1 byte, followed by padding for i
    int i;
};

struct Derived3 : Base {
    Derived1 c; // derived from Base, occupies sizeof(int) bytes
    int i;
};

int main()
{
    // empty base optimization does not apply,
    // base occupies 1 byte, Base member occupies 1 byte
    // followed by 2 bytes of padding to satisfy int alignment requirements
    assert(sizeof(Derived2) == 2*sizeof(int));

    // empty base optimization does not apply,
    // base takes up at least 1 byte plus the padding
    // to satisfy alignment requirement of the first member (whose
    // alignment is the same as int)
    assert(sizeof(Derived3) == 3*sizeof(int));
}
}}

{{rev begin}}
{{rev | since=c++11|
Empty base optimization is ''required'' for {{concept|StandardLayoutType}}s in order to maintain the requirement that the pointer to a standard-layout object, converted using {{rlp|reinterpret_cast}}, points to its initial member, which is why one of the requirements for a standard layout type is &quot;has no base classes with non-static data members and has no base classes of the same type as the first non-static data member&quot;.
}}
{{rev end}}

===Notes===
Empty base optimization is commonly used by allocator-aware standard library classes ({{lc|std::vector}}, {{lc|std::function}}, {{lc|std::shared_ptr}}, etc) to avoid occupying any additional storage for its allocator member if the allocator is stateless. This is achieved by storing one of the required data members (e.g., begin, end, or capacity pointer for the vector) in an equivalent of [http://www.boost.org/doc/libs/release/libs/utility/compressed_pair.htm boost::compressed_pair] with the allocator.


===References===
{{ref std c++11}}
{{ref std | section=5.10 | title=Equality operators | id=expr.eq | p=2}}
{{ref std | section=5.3.3 | title=Sizeof | id=expr.sizeof | p=2}}
{{ref std | section=9 | title=Classes | id=class | p=4,7}}
{{ref std | section=9.2 | title=Class members | id=class.mem | p=20}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=5.10 | title=Equality operators | id=expr.eq | p=2}}
{{ref std | section=5.3.3 | title=Sizeof | id=expr.sizeof | p=2}}
{{ref std | section=9 | title=Classes | id=class | p=3}}
{{ref std end}}

[[de:cpp/language/ebo]]
[[es:cpp/language/ebo]]
[[fr:cpp/language/ebo]]
[[it:cpp/language/ebo]]
[[ja:cpp/language/ebo]]
[[pt:cpp/language/ebo]]
[[ru:cpp/language/ebo]]
[[zh:cpp/language/ebo]]</text>
      <sha1>r9e28ea01zlyrbafs25bnktrrxmxxnj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/elaborated type specifier</title>
    <ns>0</ns>
    <id>14017</id>
    <revision>
      <id>91789</id>
      <parentid>86135</parentid>
      <timestamp>2017-03-31T19:58:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="5551">{{title|Elaborated type specifier}}
{{cpp/language/declarations/navbar}}

Elaborated type specifiers may be used to refer to a previously-declared class name (class, struct, or union) or to a previously-declared enum name even if the name was {{rlp|lookup|hidden by a non-type declaration}}. They may also be used to declare new class names. 

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 |
{{spar|class-key}} {{spar|class-name}}
}}
{{sdsc | num=2 |
{{ttb|enum}} {{spar|enum-name}}
}}
{{sdsc | num=3 |
{{spar|class-key}} {{spar|attr}}{{mark optional}} {{spar|identifier}} {{ttb|;}}
}}
{{sdsc end}}
{{par begin}}
{{par | {{spar|class-key}} | one of [[cpp/keyword/class|class]], [[cpp/keyword/struct|struct]], [[cpp/keyword/union|union]]}}
{{par | {{spar|class-name}} | the name of a previously-declared class type, optionally [[cpp/language/identifiers#Qualified_identifiers|qualified]], or an identifier not previously declared as a type name}}
{{par | {{spar|enum-name}} | the name of a previously-declared enumeration type, optionally [[cpp/language/identifiers#Qualified_identifiers|qualified]] }}
{{par end}}

@1@ elaborated type specifier for a class type
@2@ elaborated type specifier for a enumeration type
@3@ A declaration that consists solely of an elaborated type specifier always declares a class type named by {{spar|identifier}} in the {{rlp|scope}} that contains the declaration.

{{rlp|enum|Opaque enum declaration}} resembles form (3), but the enum type is a complete type after an opaque enum declaration.

===Explanation===
Form (3) is a special case of elaborated type specifier, usually referred to as ''forward declaration'' of classes, for the description of form {{v|3}}, see [[cpp/language/class#Forward_declaration|Forward declaration]]. The following only apply to form (1) and (2).

The {{spar|class-name}} or {{spar|enum-name}} in the elaborated type specifier may either be a simple identifier or be a {{rlp|identifiers#Qualified_identifiers|qualified-id}}. The name is looked up using {{rlp|unqualified lookup|unqualified name lookup}} or {{rlp|qualified lookup|qualified name lookup}}, depending on their appearance. But in either case, non-type names are not considered.
{{source|1=
class T {
public:
    class U;
private:
    int U;
};

int main()
{
    int T;
    T t; // error: the local variable T is found
    class T t; // OK: finds ::T, the local variable T is ignored
    T::U* u; // error: lookup of T::U finds the private data member
    class T::U* u; // OK: the data member is ignored
}
}}

If the name lookup does not find a previously declared type name
* The the elaborated-type-specifier is a declaration that introduces the class-name if both of the following are true:
** the elaborated-type-specifier is introduced by the {{spar|class-key}}
** {{spar|class-name}} is an identifier
* Otherwise the program is ill-formed (a compile error is produced).
{{source|1=
template &lt;typename T&gt;
struct Node {
    struct Node* Next; // OK: lookup of Node finds the injected-class-name
    struct Data* Data; // OK: declares type Data at global scope
                       // and also declares the data member Data
    friend class ::List; // error: cannot introduce a qualified name
    enum Kind* kind; // error: cannot introduce an enum
};

Data* p; // OK: struct Data has been declared
}}

If the name refers to a {{rlp|typedef|typedef name}}, a {{rlp|type alias}}, a {{rlp|template_parameters#Type_template_parameter|template type parameter}}, or an {{rlp|type alias|alias template specialization}}, the program is ill-formed, otherwise the elaborated type specifier introduces the name into the declaration the same way a {{rlp|declarations#Specifiers|simple type specifier}} introduces its type-name.
{{source|1=
template &lt;typename T&gt;
class Node {
    friend class T; // error: type parameter cannot appear in an elaborated type specifier
};

class A {};
enum b { f, t };

int main()
{
    class A a; // OK: equivalent to 'A a;'
    enum b flag; // OK: equivalent to 'b flag;'
}
}}

The {{spar|class-key}} or {{ttb|enum}} keyword present in the elaborated-type-specifier must agree in kind with the declaration to which the name in the elaborated-type-specifier refers.
* the {{ttb|enum}} keyword must be used to refer to an {{rlp|enum|enumeration type}} (whether scoped or unscoped)
* the {{ttb|union}} {{spar|class-key}} must be used to refer to a {{rlp|union}}
* either the {{ttb|class}} or {{ttb|struct}} {{spar|class-key}} must be used to refer to a non-union class type (the keywords {{ttb|class}} and {{ttb|struct}} are interchangeable here).
{{source|1=
enum class E { a, b };
enum E x = E::a; // OK
enum class E y = E::b; // error: 'enum class' cannot introduce a elaborated type specifier

struct A {};
class A a; // OK
}}

When used as a {{rlp|template_parameters#Template_arguments|template argument}}, {{c|class T}} is a type template parameter named {{tt|T}}, not an unnamed non-type parameter whose type {{tt|T}} is introduced by elaborated type specifier. {{mark unreviewed dr|CWG|1874}}

===References===
{{ref std c++11}}
{{ref std | section=3.4.4 | title=Elaborated type specifiers | id=basic.lookup.elab}}
{{ref std | section=7.1.6.3 | title=Elaborated type specifiers | id=dcl.type.elab}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=3.4.4 | title=Elaborated type specifiers | id=basic.lookup.elab}}
{{ref std | section=7.1.5.3 | title=Elaborated type specifiers | id=dcl.type.elab}}
{{ref std end}}
{{todo|probably pull most of 9.1[class.name]/2-3 out of cpp/language/class}}</text>
      <sha1>kpvort7s7jjay4qrvrxe2ffhznwiipz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/enum</title>
    <ns>0</ns>
    <id>4564</id>
    <revision>
      <id>91943</id>
      <parentid>91746</parentid>
      <timestamp>2017-03-31T20:13:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="12099">{{title|enumeration declaration}}
{{cpp/language/declarations/navbar}}

An ''enumeration'' is a distinct type whose value is restricted to a range of values (see below for details), which may include several explicitly named constants (&quot;''enumerators''&quot;). The values of the constants are values of an integral type known as the ''underlying type'' of the enumeration.

An enumeration is defined by ''enum-specifier'', which appears in {{spar|decl-specifier-seq}} of the {{rlp|declarations|declaration}} syntax. The ''enum-specifier'' has the following syntax:

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|enum-key}} {{spar|attr}}{{mark optional}} {{spar|identifier}}{{mark optional}} {{spar|enum-base}}{{mark optional}} {{ttb|{ }} {{spar|enumerator-list}}{{mark optional}} {{ttb|} }}
}}
{{sdsc|num=2|notes={{mark since c++11}}|1=
{{spar|enum-key}} {{spar|attr}}{{mark optional}} {{spar|nested-name-specifier}}{{mark optional}} {{spar|identifier}} {{spar|enum-base}}{{mark optional}} {{ttb|; }} 
}}
{{sdsc end}}
@1@ Definition of an enumeration type.
@2@ ''Opaque enum declaration'': defines the enumeration type but not its enumerators: after this declaration, the type is a complete type and its size is known. {{rev inl|since=c++14|{{mark unreviewed dr|CWG|1638}}Note: an {{rlp|template specialization|explicit specialization declaration}} of a scoped enumeration member of a class template is the only case where {{spar|nested-name-specifier}} appears before {{spar|identifier}} }}

{{par begin}}
{{par | {{spar|enum-key}} | one of {{ttb|enum}}, {{ttb|enum class}}{{mark since c++11}}, or {{ttb|enum struct}}{{mark since c++11}}}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|identifier}} | the name of the enumeration that's being declared. If present, and if this declaration is a re-declaration, it may be preceded by {{spar|nested-name-specifier}}{{mark since c++11}}: sequence of names and scope-resolution operators {{tt|::}}, ending with scope-resolution operator. The name can be omitted only in unscoped enumeration declarations}}
{{par | {{spar|enum-base}}{{mark c++11}} | colon ({{ttb|:}}), followed by a {{spar|type-specifier-seq}} that names an integral type (if it is cv-qualified, qualifications are ignored) that will serve as the fixed underlying type for this enumeration type}}
{{par | {{spar|enumerator-list}} | comma-separated list of enumerator definitions, each of which is either simply an {{spar|identifier}}, which becomes the name of the enumerator, or an identifier with an initializer: {{spar|identifier}} {{ttb|{{=}}}} {{spar|constexpr}}. {{rev inl|since=c++17|In either case, the {{spar|identifier}} can be directly followed by an optional [[cpp/language/attributes|attribute specifier sequence]].}}}}
{{par end}}

There are two distinct kinds of enumerations: ''unscoped enumeration'' (declared with the {{spar|enum-key}} {{ttb|enum}}) and ''scoped enumeration'' (declared with the {{spar|enum-key}} {{ttb|enum class}} or {{ttb|enum struct}}).

===Unscoped enumeration===

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|enum}} {{spar|name}} {{ttb|{}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} ... {{ttb|} }} 
}}
{{sdsc|num=2|notes={{mark since c++11}}|1=
{{ttb|enum}} {{spar|name}} {{ttb|:}} {{spar|type}} {{ttb|{}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} ... {{ttb|} }} 
}}
{{sdsc|num=3|notes={{mark since c++11}}|1=
{{ttb|enum}} {{spar|name}} {{ttb|:}} {{spar|type}} {{ttb|; }} 
}}
{{sdsc end}}
@1@ Declares an unscoped enumeration type whose underlying type is not fixed (in this case, the underlying type is either {{c|int}} or, if not all enumerator values can be represented as {{c|int}}, an implementation-defined larger integral type that can represent all enumerator values. If the enumerator-list is empty, the underlying type is as if the enumeration had a single enumerator with value 0).
@2@ Declares an unscoped enumeration type whose underlying type is fixed.
@3@ Opaque enum declaration for an unscoped enumeration must specify the underlying type.

Each {{spar|enumerator}} becomes a named constant of the enumeration's type (that is, {{spar|name}}), visible in the enclosing scope, and can be used whenever constants are required.
{{source|1=
enum Color { red, green, blue };
Color r = red;
switch(r)
{
    case red  : std::cout &lt;&lt; &quot;red\n&quot;;   break;
    case green: std::cout &lt;&lt; &quot;green\n&quot;; break;
    case blue : std::cout &lt;&lt; &quot;blue\n&quot;;  break;
}
}}

Each enumerator is associated with a value of the underlying type. When initializers are provided in the {{spar|enumerator-list}}, the values of enumerators are defined by those initializers. If the first enumerator does not have an initializer, the associated value is zero. For any other enumerator whose definition does not have an initializer, the associated value is the value of the previous enumerator plus one.
{{source|1=enum Foo { a, b, c = 10, d, e = 1, f, g = f + c };
//a = 0, b = 1, c = 10, d = 11, e = 1, f = 2, g = 12 }}

Values of unscoped enumeration type are {{rlp|implicit_cast|implicitly-convertible}} to integral types. If the underlying type is not fixed, the value is convertible to the first type from the following list able to hold their entire value range: {{c|int}}, {{c|unsigned int}}, {{c|long}}, {{c|unsigned long}}, {{c|long long}}, or {{c|unsigned long long}}. If the underlying type is fixed, the values can be converted to their promoted underlying type. 
{{source|1=enum color { red, yellow, green = 20, blue };
color col = red;
int n = blue; // n == 21}}

Values of integer, floating-point, and other enumeration types can be converted, such as by {{ltt|cpp/language/static_cast|static_cast}}, to any enumeration type. The result is {{rev inl|until=c++17|unspecified}}{{rev inl|since=c++17|undefined behavior}} if the value, converted to the enumeration's underlying type, is out of this enumeration's ''range''. If the underlying type is fixed, the ''range'' is the range of the underlying type. If the underlying type is not fixed, the ''range'' is all values possible for the smallest bit field large enough to hold all enumerators of the target enumeration. Note that the value after such conversion may not necessarily equal any of the named enumerators defined for the type.
{{source|1=
enum access_t { read = 1, write = 2, exec = 4 }; // enumerators: 1, 2, 4 range: 0..7
access_t rw = static_cast&lt;access_t&gt;(3);
assert(rw &amp; read &amp;&amp; rw &amp; write);
}}

The {{spar|name}} of an unscoped enumeration may be omitted: such declaration only introduces the enumerators into the enclosing scope:
{{source|1=enum { a, b, c = 0, d = a + 2 }; // defines a = 0, b = 1, c = 0, d = 2}}

When an unscoped enumeration is a class member, its enumerators may be accessed using class member access operators {{ttb|.}} and {{ttb|-&gt;}}:
{{source|1=
struct X
{
    enum direction { left = 'l', right = 'r' };
};
X x;
X* p = &amp;x;

int a = X::direction::left; // allowed only in C++11 and later
int b = X::left;
int c = x.left;
int d = p-&gt;left;
}}

{{rev begin}}
{{rev|since=c++11|
===Scoped enumerations===
{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|enum}} {{ttb|struct{{!}}class}} {{spar|name}} {{ttb|{}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} ... {{ttb|} }} 
}}
{{sdsc|num=2|1=
{{ttb|enum}} {{ttb|struct{{!}}class}} {{spar|name}} {{ttb|:}} {{spar|type}} {{ttb|{}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} {{spar|enumerator}} {{ttb|{{=}}}} {{spar|constexpr}} {{ttb|,}} ... {{ttb|} }} 
}}
{{sdsc|num=3|1=
{{ttb|enum}} {{ttb|struct{{!}}class}} {{spar|name}} {{ttb|; }} 
}}
{{sdsc|num=4|1=
{{ttb|enum}} {{ttb|struct{{!}}class}} {{spar|name}} {{ttb|:}} {{spar|type}} {{ttb|; }} 
}}
{{sdsc end}}

@1@ declares a scoped enumeration type whose underlying type is {{c|int}} (the keywords {{c|class}} and {{c|struct}} are exactly equivalent)
@2@ declares a scoped enumeration type whose underlying type is {{spar|type}}
@3@ opaque enum declaration for a scoped enumeration whose underlying type is {{c|int}}
@4@ opaque enum declaration for a scoped enumeration whose underlying type is {{spar|type}}

Each {{spar|enumerator}} becomes a named constant of the enumeration's type (that is, {{spar|name}}), which is contained within the scope of the enumeration, and can be accessed using scope resolution operator. There are no implicit conversions from the values of a scoped enumerator to integral types, although {{rlp|static_cast}} may be used to obtain the numeric value of the enumerator.
{{source|1=
enum class Color { red, green = 20, blue };
Color r = Color::blue;
switch(r)
{
    case Color::red  : std::cout &lt;&lt; &quot;red\n&quot;;   break;
    case Color::green: std::cout &lt;&lt; &quot;green\n&quot;; break;
    case Color::blue : std::cout &lt;&lt; &quot;blue\n&quot;;  break;
}
// int n = r; // error: no scoped enum to int conversion
int n = static_cast&lt;int&gt;(r); // OK, n = 21
}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
Both scoped enumeration types and unscoped enumeration types whose underlying type is fixed 
can be initialized from an integer without a cast, using {{rlp|list initialization}}, if all of the following is true:
* the initialization is direct-list-initialization
* the initializer list has only a single element
* the enumeration is either scoped or unscoped with underlying type fixed
* the conversion is non-narrowing

This makes it possible to introduce new integer types (e.g. SafeInt) that enjoy the same existing calling conventions as their underlying integer types, even on ABIs expressly designed to penalize passing/returning structures by value.

{{source|1=
enum byte : unsigned char {}; // byte is a new integer type
byte b { 42 }; // OK as of C++17 (direct-list-initialization)
byte c = { 42 }; // error
byte d = byte{ 42 }; // OK as of C++17; same value as b
byte e { -1 }; // error

struct A { byte b; };
A a1 = { { 42 } }; // error
A a2 = { byte{ 42 } }; // OK as of C++17

void f(byte);
f({ 42 }); // error

enum class Handle : std::uint32_t { Invalid = 0 };
Handle h { 42 }; // OK as of C++17
}}

}}
{{rev end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;

// enum that takes 16 bits
enum smallenum: int16_t
{
    a,
    b,
    c
};


// color may be red (value 0), yellow (value 1), green (value 20), or blue (value 21)
enum color
{
    red,
    yellow,
    green = 20,
    blue
};

// altitude may be altitude::high or altitude::low
enum class altitude: char
{ 
     high='h',
     low='l', // C++11 allows the extra comma
}; 

// the constant d is 0, the constant e is 1, the constant f is 3
enum
{
    d,
    e,
    f = e + 2
};

//enumeration types (both scoped and unscoped) can have overloaded operators
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, color c)
{
    switch(c)
    {
        case red   : os &lt;&lt; &quot;red&quot;;    break;
        case yellow: os &lt;&lt; &quot;yellow&quot;; break;
        case green : os &lt;&lt; &quot;green&quot;;  break;
        case blue  : os &lt;&lt; &quot;blue&quot;;   break;
        default    : os.setstate(std::ios_base::failbit);
    }
    return os;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, altitude al)
{
    return os &lt;&lt; static_cast&lt;char&gt;(al);
}

int main()
{
    color col = red;
    altitude a;
    a = altitude::low;

    std::cout &lt;&lt; &quot;col = &quot; &lt;&lt; col &lt;&lt; '\n'
              &lt;&lt; &quot;a = &quot;   &lt;&lt; a   &lt;&lt; '\n'
              &lt;&lt; &quot;f = &quot;   &lt;&lt; f   &lt;&lt; '\n';
}
 | output=
col = red
a = l
f = 3
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1638|std=C++14|before=grammar of opaque enum declaration prohibited use for template specializations|after=nested-name-specifier permitted}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/enum | Enumerations}}
{{dsc end}}

[[ar:cpp/language/enum]]
[[de:cpp/language/enum]]
[[es:cpp/language/enum]]
[[fr:cpp/language/enum]]
[[it:cpp/language/enum]]
[[ja:cpp/language/enum]]
[[pt:cpp/language/enum]]
[[ru:cpp/language/enum]]
[[zh:cpp/language/enum]]</text>
      <sha1>3sjb3370m44fzoxj0rcrgdlkg8oqqo6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/escape</title>
    <ns>0</ns>
    <id>694</id>
    <revision>
      <id>83216</id>
      <parentid>79636</parentid>
      <timestamp>2016-01-25T08:43:05Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>link</comment>
      <text xml:space="preserve" bytes="3907">{{title|Escape sequences}}
{{cpp/language/expressions/navbar}}
Escape sequences are used to represent certain special characters within {{rlp|string literal}}s and {{rlp|character literal}}s. 

The following escape sequences are available (extra escape sequences may be provided with implementation-defined semantics):

{| class=&quot;wikitable&quot;
|-
! Escape&lt;br&gt; sequence
! Description
! Representation
|-
| {{tt|'''&lt;nowiki&gt;\'&lt;/nowiki&gt;'''}} 
| single quote 
| byte {{tt|0x27}} in ASCII encoding
|-
| {{tt|'''\&quot;'''}} 
| double quote
| byte {{tt|0x22}} in ASCII encoding
|-
| {{tt|'''\?'''}} 
| question mark
| byte {{tt|0x3f}} in ASCII encoding
|-
| {{tt|'''\\'''}} 
| backslash
| byte {{tt|0x5c}} in ASCII encoding
|-
| {{tt|'''\a'''}} 
| audible bell
| byte {{tt|0x07}} in ASCII encoding
|-
| {{tt|'''\b'''}} 
| backspace
| byte {{tt|0x08}} in ASCII encoding
|-
| {{tt|'''\f'''}} 
| form feed - new page
| byte {{tt|0x0c}} in ASCII encoding
|-
| {{tt|'''\n'''}} 
| line feed - new line
| byte {{tt|0x0a}} in ASCII encoding
|-
| {{tt|'''\r'''}} 
| carriage return 
| byte {{tt|0x0d}} in ASCII encoding
|-
| {{tt|'''\t'''}} 
| horizontal tab 
| byte {{tt|0x09}} in ASCII encoding
|-
| {{tt|'''\v'''}} 
| vertical tab 
| byte {{tt|0x0b}} in ASCII encoding
|-
| {{tt|'''\{{small|nnn}}'''}} 
| arbitrary octal value 
| byte {{tt|nnn}}
|-
| {{tt|'''\x{{small|nn}}'''}} 
| arbitrary hexadecimal value
| byte {{tt|nn}}
|-
| {{tt|'''\u{{small|nnnn}}'''}} 
| universal character name&lt;br&gt;(arbitrary [[enwiki:Unicode | Unicode]] value);&lt;br&gt;may result in several characters
| code point {{tt|U+nnnn}}
|-
| {{tt|'''\U{{small|nnnnnnnn}}'''}} 
| universal character name&lt;br&gt;(arbitrary [[enwiki:Unicode | Unicode]] value);&lt;br&gt;may result in several characters
| code point {{tt|U+nnnnnnnn}}
|}

===Notes===
Of the octal escape sequences, {{ttb|\0}} is the most useful because it represents the terminating null character in [[cpp/string#Null-terminated strings|null-terminated strings]].

The new-line character {{ttb|\n}} has special meaning when used in [[cpp/io/c|text mode I/O]]: it is converted to the OS-specific newline byte or byte sequence.

Octal escape sequences have a limit of three octal digits, but terminate at the first character that is not a valid octal digit if encountered sooner.

Hexadecimal escape sequences have no length limit and terminate at the first character that is not a valid hexadecimal digit. If the value represented by a single hexadecimal escape sequence does not fit the range of values represented by the character type used in this string literal ({{c|char}}, {{c|char16_t}}, {{c|char32_t}}, or {{c|wchar_t}}), the result is unspecified.

A universal character name in a narrow string literal or a 16-bit string literal may map to more than one character, e.g. {{c|\U0001f34c}} is 4 {{c|char}} code units in UTF-8 ({{c|\xF0\x9F\x8D\x8C}}) and 2 {{c|char16_t}} code units in UTF-16 ({{c|\uD83C\uDF4C}})).

The question mark escape sequence {{c|\?}} is used to prevent [[cpp/language/operator_alternative|trigraphs]] from being interpreted inside string literals: a string such as {{c|&quot;??/&quot;}} is compiled as {{c|&quot;\&quot;}}, but if the second question mark is escaped, as in {{c|&quot;?\?/&quot;}}, it becomes {{c|&quot;??/&quot;}}

===Example===
{{example
 | code=
#include &lt;cstdio&gt;

int main()
{
    std::printf(&quot;This\nis\na\ntest\n\nShe said, \&quot;How are you?\&quot;\n&quot;);
}
 | output=
This
is
a
test

She said, &quot;How are you?&quot;
}}

===See also===
* [[cpp/language/ascii | ASCII chart]]
{{dsc begin}}
{{dsc see c|c/language/escape|Escape sequence|nomono=true}}
{{dsc end}}
[[ar:cpp/language/escape]]
[[cs:cpp/language/escape]]
[[de:cpp/language/escape]]
[[es:cpp/language/escape]]
[[fr:cpp/language/escape]]
[[it:cpp/language/escape]]
[[ja:cpp/language/escape]]
[[ko:cpp/language/escape]]
[[pl:cpp/language/escape]]
[[pt:cpp/language/escape]]
[[ru:cpp/language/escape]]
[[tr:cpp/language/escape]]
[[zh:cpp/language/escape]]</text>
      <sha1>3n3p2xdyrrnrlblpq5j7cvz3inrhdbi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/eval order</title>
    <ns>0</ns>
    <id>4693</id>
    <revision>
      <id>91760</id>
      <parentid>89006</parentid>
      <timestamp>2017-03-31T19:57:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="13613">{{title|Order of evaluation}}
{{cpp/language/expressions/navbar}}

Order of evaluation of the operands of almost all C++ operators (including the order of evaluation of function arguments in a function-call expression and the order of evaluation of the subexpressions within any expression) is unspecified. The compiler can evaluate operands in any order, and may choose another order when the same expression is evaluated again.

There are exceptions to this rule which are noted below. 

Except where noted below, there is no concept of left-to-right or right-to-left evaluation in C++. This is not to be confused with left-to-right and right-to-left associativity of operators: the expression {{tt|f1() + f2() + f3()}} is parsed as {{tt|(f1() + f2()) + f3()}} due to left-to-right associativity of operator+, but the function call to {{tt|f3}} may be evaluated first, last, or between {{tt|f1()}} or {{tt|f2()}} at run time.

==Sequenced-before rules {{mark since c++11}}==

===Definitions===
====Evaluations====
There are two kinds of evaluations performed by the compiler for each expression or subexpression (both of which are optional):
* ''value computation'': calculation of the value that is returned by the expression. This may involve determination of the identity of the object (glvalue evaluation, e.g. if the expression returns a reference to some object) or reading the value previously assigned to an object (prvalue evaluation, e.g. if the expression returns a number, or some other value) 
* ''side effect'': access (read or write) to an object designated by a volatile glvalue, modification (writing) to an object, calling a library I/O function, or calling a function that does any of those operations.

====Ordering====
&quot;sequenced-before&quot; is an asymmetric, transitive, pair-wise relationship between evaluations within the same thread.

* If A is sequenced before B, then evaluation of A will be complete before evaluation of B begins.
* If A is not sequenced before B and B is sequenced before A, then evaluation of B will be complete before evaluation of A begins.
* If A is not sequenced before B and B is not sequenced before A, then two possibilities exist:
** evaluations of A and B are unsequenced: they may be performed in any order and may overlap (within a single thread of execution, the compiler may interleave the CPU instructions that comprise A and B)
** evaluations of A and B are indeterminately sequenced: they may be performed in any order but may not overlap: either A will be complete before B, or B will be complete before A. The order may be the opposite the next time the same expression is evaluated.

===Rules===
@1@ Each value computation and side effect of a ''full expression'', that is
* {{rlp|expressions#Unevaluated_expressions|unevaluated operand}}
* {{rlp|constant expression}}
* an entire {{rlp|initialization|initializer}}, including any comma-separated constituent expressions
* the destructor call generated at the end of the lifetime of a non-temporary object
* an expression that is not part of another full-expression (such as the entire {{rlp|statements#Expression_statements|expression statement}}, controlling expression of a {{rlp|for}}/{{rlp|while}} loop, conditional expression of {{rlp|if}}/{{rlp|switch}}, the expression in a {{rlp|return}} statement, etc),
@@ including implicit conversions applied to the result of the expression, destructor calls to the temporaries, default member initializers (when initializing aggregates), and every other language construct that involves a function call, is ''sequenced before'' each value computation and side effect of the next ''full expression''.

@2@ The value computations (but not the side-effects) of the operands to any {{rlp|expressions#Operators|operator}} are ''sequenced before'' the value computation of the result of the operator (but not its side-effects).

@3@ When calling a function (whether or not the function is inline, and whether or not explicit function call syntax is used), every value computation and side effect associated with any argument expression, or with the postfix expression designating the called function, is ''sequenced before'' execution of every expression or statement in the body of the called function.

@4@ The value computation of the built-in {{rlp|operator_incdec|post-increment and post-decrement}} operators is ''sequenced before'' its side-effect.

@5@ The side effect of the built-in {{rlp|operator_incdec|pre-increment and pre-decrement}} operators is ''sequenced before'' its value computation (implicit rule due to definition as compound assignment)

@6@ Every value computation and side effect of the first (left) argument of the built-in {{rlp|operator_logical|logical}} AND operator {{c|&amp;&amp;}} and the built-in logical OR operator {{c|{{!!}}}} is sequenced before every value computation and side effect of the second (right) argument.

@7@ Every value computation and side effect associated with the first expression in the {{rlp|operator_other#Conditional_operator|conditional operator}} {{c|?:}} is ''sequenced before'' every value computation and side effect associated with the second or third expression.

@8@ The side effect (modification of the left argument) of the built-in {{rlp|operator_assignment#Builtin_direct_assignment|assignment}} operator and of all built-in {{rlp|operator_assignment#Builtin_compound_assignment|compound}} assignment operators is ''sequenced after'' the value computation (but not the side effects) of both left and right arguments, and is ''sequenced before'' the value computation of the assignment expression (that is, before returning the reference to the modified object)

@9@ Every value computation and side effect of the first (left) argument of the built-in {{rlp|operator_other#Built-in_comma_operator|comma operator}} {{c|,}} is ''sequenced before'' every value computation and side effect of the second (right) argument.

@10@ In {{rlp|list_initialization|list-initialization}}, every value computation and side effect of a given initializer clause is ''sequenced before'' every value computation and side effect associated with any initializer clause that follows it in the brace-enclosed comma-separated list of initalizers.

@11@ A function call that is not ''sequenced before'' or ''sequenced after'' another function call is ''indeterminately sequenced'' (the program must behave {{rlp|as if}} the CPU instructions that constitute different function calls were not interleaved, even if the functions were inlined).
{{rev begin}}
{{rev|since=c++17|The rule 11 has one exception: a function calls made by a standard library algorithm executing under {{ltt|cpp/algorithm/execution_policy_tag_t|std::par_unseq}} execution policy are unsequenced and may be arbitrarily interleaved.}}
{{rev end}}

@12@ The call to the allocation function ({{ltt|cpp/memory/new/operator_new|operator new}}) is {{rev inl|until=c++17|indeterminately sequenced with respect to}}{{rev inl|since=c++17|sequenced before}} the evaluation of the constructor arguments in a {{rlp|new|new-expression}}

{{rev begin}}
{{rev|since=c++14|
@13@ When returning from a function, copy-initialization of the temporary that is the result of evaluating the function call is ''sequenced-before'' the destruction of all temporaries at the end of the operand of the {{rlp|return|return statement}}, which, in turn, is ''sequenced-before'' the destruction of local variables of the block enclosing the return statement. {{mark unreviewed dr|CWG|1885}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
@14@ In a function-call expression, the expression that names the function is sequenced before every argument expression and every default argument.

@15@ In a function call, value computations and side effects of the initialization of every  parameter are indeterminately sequenced with respect to value computations and side effects of any other parameter.

@16@ Every overloaded operator obeys the sequencing rules of the built-in operator it overloads when called using operator notation.

@17@ In a subscript expression {{tt|E1[E2]}}, every value computation and side-effect of E1 is sequenced before every value computation and side effect of E2

@18@ In a pointer-to-member expression {{tt|E1.*E2}} or {{tt|E1-&gt;*E2}}, every value computation and side-effect of E1 is sequenced before every value computation and side effect of E2 (unless the dynamic type of E1 does not contain the member to which E2 refers)

@19@ In a shift operator expression {{tt|E1&lt;&lt;E2}} and {{tt|E1&gt;&gt;E2}}, every value computation and side-effect of E1 is sequenced before every value computation and side effect of E2

@20@ In every simple assignment expression {{tt|E1{{=}}E2}} and every compound assignment expression {{tt|E1@{{=}}E2}}, every value computation and side-effect of E2 is sequenced before every value computation and side effect of E1

@21@ Every expression in a comma-separated list of expressions in a parenthesized initializer is evaluated as if for a function call (indeterminately-sequenced)
}}
{{rev end}}

===Undefined behavior===

1) If a side effect on a scalar object is unsequenced relative to another side effect on the same scalar object, {{rlp|ub|the behavior is undefined}}.

{{c|1=
i = ++i + 2;       // undefined behavior until C++11
i = i++ + 2;       // undefined behavior until C++17
f(i = -2, i = -2); // undefined behavior until C++17
f(++i, ++i);       // undefined behavior until C++17, unspecified after C++17
i = ++i + i++;     // undefined behavior
}}

2) If a side effect on a scalar object is unsequenced relative to a value computation using the value of the same scalar object, {{rlp|ub|the behavior is undefined}}.

{{c|1=
cout &lt;&lt; i &lt;&lt; i++; // undefined behavior until C++17
a[i] = i++;       // undefined behavior until C++17
n = ++i + i;      // undefined behavior
}}

==Sequence point rules {{mark until c++11}}==
===Definitions===
Evaluation of an expression might produce side effects, which are: accessing an object designated by a volatile lvalue, modifying an object, calling a library I/O function, or calling a function that does any of those operations.

A ''sequence point'' is a point in the execution sequence where all side effects from the previous evaluations in the sequence are complete, and no side effects of the subsequent evaluations started.

===Rules===
1) There is a sequence point at the end of each full expression (typically, at the semicolon).

2) When calling a function (whether or not the function is inline and whether or not function call syntax was used), there is a sequence point after the evaluation of all function arguments (if any) which takes place before execution of any expressions or statements in the function body.

3) There is a sequence point after the copying of a returned value of a function and before the execution of any expressions outside the function.

4) Once the execution of a function begins, no expressions from the calling function are evaluated until execution of the called function has completed (functions cannot be interleaved).
 
5) In the evaluation of each of the following four expressions, using the built-in (non-overloaded) operators, there is a sequence point after the evaluation of the expression {{tt|a}}.

{{c|1=
a &amp;&amp; b
a {{!!}} b
a ? b : c
a , b
}}

===Undefined behavior===
1) Between the previous and next sequence point a scalar object must have its stored value modified at most once by the evaluation of an expression, otherwise {{rlp|ub|the behavior is undefined}}.

{{c|1=
i = ++i + i++; // undefined behavior
i = i++ + 1; // undefined behavior
i = ++i + 1; // undefined behavior (well-defined in C++11)
++ ++i; // undefined behavior (well-defined in C++11)
f(++i, ++i); // undefined behavior
f(i = -1, i = -1); // undefined behavior
}}

2) Between the previous and next sequence point, the prior value of a scalar object that is modified by the evaluation of the expression, must be accessed only to determine the value to be stored. If it is accessed in any other way, {{rlp|ub|the behavior is undefined}}.

{{c|1=
cout &lt;&lt; i &lt;&lt; i++; // undefined behavior
a[i] = i++; // undefined behavior
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1885|std=C++14|before=sequencing of the destruction of automatic variables on function return was not explicit|after=sequencing rules added}}
{{dr list end}}

===See also===
* [[cpp/language/operator_precedence|Operator precedence]] which defines how expressions are built from their source code representation.
{{dsc begin}}
{{dsc see c | c/language/eval_order | Order of evaluation}}
{{dsc end}}

===References===
{{ref std c++11}}
{{ref std | section=1.9 | title=Program execution | id=intro.execution}}
{{ref std | section=5.2.6 | title=Increment and decrement | id=expr.post.incr}}
{{ref std | section=5.3.4 | title=New | id=expr.new}}
{{ref std | section=5.14 | title=Logical AND operator | id=expr.log.and}}
{{ref std | section=5.15 | title=Logical OR operator | id=expr.log.or}}
{{ref std | section=5.16 | title=Conditional operator | id=expr.cond}}
{{ref std | section=5.17 | title=Assignment and compound assignment operators | id=expr.ass}}
{{ref std | section=5.18 | title=Comma operator | id=expr.comma}}
{{ref std | section=8.5.4 | title=List-initialization | id=dcl.init.list}}
{{ref std end}}

[[de:cpp/language/eval order]]
[[es:cpp/language/eval order]]
[[fr:cpp/language/eval order]]
[[it:cpp/language/eval order]]
[[ja:cpp/language/eval order]]
[[pt:cpp/language/eval order]]
[[ru:cpp/language/eval order]]
[[zh:cpp/language/eval order]]</text>
      <sha1>0x8hjojl2uqi6mj0o56n6yrx4hc4gq9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/except spec</title>
    <ns>0</ns>
    <id>3413</id>
    <revision>
      <id>88701</id>
      <parentid>88008</parentid>
      <timestamp>2016-12-06T19:05:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>until c++17</comment>
      <text xml:space="preserve" bytes="7565">{{title|dynamic exception specification}}
{{cpp/language/exceptions/navbar}}

Lists the exceptions that a function might directly or indirectly throw.

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|throw(}} {{ttb|)}} | notes={{mark|deprecated in c++11}}}}
{{sdsc | {{ttb|throw(}}{{spar|typeid, typeid, ...}}{{ttb|)}} | notes={{mark|deprecated in C++11}}{{mark until c++17}}}}
{{sdsc end}}
{{rev begin}}
{{rev|until=c++17|
@1@ Non-throwing dynamic exception specification
}}
{{rev|since=c++17|
@1@ Same as {{ltt|cpp/language/noexcept_spec|noexcept(true)}}
}}
{{rev end}}
@2@ Explicit dynamic exception specification

This specification may appear only on lambda-declarator or on a function declarator that is the {{rev inl|until=c++17|top-level}} declarator of a function, variable, or non-static data member, whose type is a function type, a pointer to function type, a reference to function type, a pointer to member function type. It may appear on the declarator of a parameter or on the declarator of a return type.
{{source|
void f() throw(int); // OK: function declaration
void (*fp)() throw (int); // OK: pointer to function declaration
void g(void pfa() throw(int)); // OK: pointer to function parameter declaration
typedef int (*pf)() throw(int); // Error: typedef declaration
}}
===Explanation===

If a function is declared with type {{tt|T}} listed in its exception specification, the function may throw exceptions of that type or a type derived from it.

{{rlp|incomplete type|Incomplete types}}, pointers or references to incomplete types other than cv {{tt|void*}}, and rvalue reference types are not allowed in the exception specification. Array and function types, if used, are adjusted to corresponding pointer types. {{rev inl|since=c++11|{{rlp|parameter pack}}s are allowed}}.

If the function throws an exception of the type not listed in its exception specification, the function {{lc|std::unexpected}} is called. The default function calls {{lc|std::terminate}}, but it may be replaced by a user-provided function (via {{lc|std::set_unexpected}}) which may call {{lc|std::terminate}} or throw an exception. If the exception thrown from {{lc|std::unexpected}} is accepted by the exception specification, stack unwinding continues as usual. If it isn't, but {{lc|std::bad_exception}} is allowed by the exception specification, {{lc|std::bad_exception}} is thrown. Otherwise, {{lc|std::terminate}} is called.

{{rev begin}}
{{rev|since=c++17|
===Potential exceptions===
Each function {{tt|f}}, pointer to function {{tt|fp}}, and pointer to member function {{tt|mfp}} has a ''set of potential exceptions'', which consists of types that might be thrown. Set of all types indicates that any exception may be thrown. This set is defined as follows:
@1@ If the declaration of {{tt|f}}, {{tt|fp}}, or {{tt|mfp}} uses {{tt|throw()}}{{mark deprecated}} or {{rlp|noexcept}}, the set is empty.
@2@ Otherwise, if the declaration of {{tt|f}}, {{tt|fp}}, or {{tt|mfp}} uses a dynamic exception specification{{mark deprecated}}, the set consists of the types listed in that specification
@3@ Otherwise, the set is the set of all types

Note: for implicitly-declared special member functions (constructors, assignment operators, and destructors) and for the inheriting constructors, the set of potential exceptions is a combination of the sets of the potential exceptions of everything they would call: constructors/assignment operators/destructors of non-variant non-static data members, direct bases, and, where appropriate, virtual bases (including default argument expressions, as always)

Each expression {{tt|e}} has a ''set of potential exceptions'', defined as follows:
@1@ If {{tt|e}} is a {{rlp|constexpr|core constant expression}}, the set is empty
@2@ Otherwise, the set is the union of the sets of potential exceptions of all immediate subexpressions of {{tt|e}} (including {{rlp|default arguments|default argument expressions}}), combined with another set that depends on the form of {{tt|e}}, as follows:
:@1@ If {{tt|e}} is a function call expression, and
* the function is named by an id-expression (either directly or as part of member access or pointer-to-member access expression), the set of potential exceptions of the named function is added to the list.
* if the function is named by an expression of type noexcept function or by an expression of type pointer to noexcept function, the set is empty
* otherwise, the set is the set of all types
:@2@ If {{tt|e}} calls a function implicitly (it's an operator expression and the operator is overloaded, it is a {{rlp|new|new-expression}} and the allocation function is overloaded, or it is a full expression and the destructor of a temporary is called)), then the set is the set of that function.
:@3@ If {{tt|e}} is a {{rlp|throw|throw-expression}}, the set is the exception that would be initialized by its operand, or the set of all types for the re-throwing throw-expression (with no operand)
:@4@ If {{tt|e}} is a {{rlp|dynamic_cast}} to a reference to a polymorphic type, the set consists of {{lc|std::bad_cast}}
:@5@ If {{tt|e}} is a {{rlp|typeid}} applied to a polymorphic glvalue, the set consists of {{lc|std::bad_typeid}}
:@6@ If {{tt|e}} is a {{rlp|new|new-expression}} with a non-constant size, the set consists of {{lc|std::bad_array_new_length}}

{{source|1=
void f() throw(int);  // f()'s set is &quot;int&quot;
void g();             // g()'s set is the set of all types
struct A { A(); };    // &quot;new A&quot;'s set is the set of all types
struct B { B() noexcept; }; // &quot;B()&quot;'s set is empty
struct D() { D() throw (double); }; // new D's set is the set of all types
}}

All implicitly-declared member functions (and inheriting constructors) have exception specifications, selected as follows:
* If the set of potential exceptions is the set of all types, the implicit exception specification is {{c|noexcept(false)}}.
* Otherwise, If the set of potential exceptions is not empty, the implicit exception specification lists every type from the set
* Otherwise, the implicit exception specification is {{c|noexcept(true)}} and the function type is &quot;noexcept function&quot;

{{source|1=
struct A {
    A(int = (A(5), 0)) noexcept;
    A(const A&amp;) throw();
    A(A&amp;&amp;) throw();
    ~A() throw(X);
};
struct B {
    B() throw();
    B(const B&amp;) = default; // exception specification is &quot;noexcept(true)&quot;
    B(B&amp;&amp;, int = (throw Y(), 0)) throw(Y) noexcept;
    ~B() throw(Y);
};
int n = 7;
struct D : public A, public B {
    int * p = new (std::nothrow) int[n];
    // D has the following implicitly-declared members:
    // D::D() throw(X, std::bad_array_new_length);
    // D::D(const D&amp;) noexcept(true);
    // D::D(D&amp;&amp;) throw(Y);
    // D::~D() throw(X, Y);
};
}}
}}
{{rev end}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;exception&gt;
#include &lt;cstdlib&gt;

class X {};
class Y {};
class Z : public X {};
class W {};

void f() throw(X, Y) 
{
    int n = 0;
    if (n) throw X(); // OK
    if (n) throw Z(); // also OK
    throw W(); // will call std::unexpected()
}

int main() {
  std::set_unexpected([]{
      std::cout &lt;&lt; &quot;That was unexpected&quot; &lt;&lt; std::endl; // flush needed
      std::abort();
  });
  f();
}
 | output=
That was unexpected 
}}

===See also===

*[[cpp/language/noexcept_spec | {{tt|noexcept}} specifier]]

[[de:cpp/language/except spec]]
[[es:cpp/language/except spec]]
[[fr:cpp/language/except spec]]
[[it:cpp/language/except spec]]
[[ja:cpp/language/except spec]]
[[pt:cpp/language/except spec]]
[[ru:cpp/language/except spec]]
[[zh:cpp/language/except spec]]</text>
      <sha1>g43mztjjv3qqtp7ucsf7x51vpwapwzt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/exceptions</title>
    <ns>0</ns>
    <id>9898</id>
    <revision>
      <id>92131</id>
      <parentid>87399</parentid>
      <timestamp>2017-04-06T06:27:40Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="5900">{{title|Exceptions}}
{{cpp/language/exceptions/navbar}}
Exception handling provides a way of transferring control and information from some point in the execution of a program to a handler associated with a point previously passed by the execution (in other words, exception handling transfers control up the call stack)

An exception can be thrown by a {{rlp|throw|throw-expression}}, {{rlp|dynamic_cast}}, {{rlp|typeid}}, {{rlp|new|new-expression}}, [[cpp/memory/new/operator_new|allocation function]], and any of the standard library functions that are specified to throw exceptions to signal certain error conditions (e.g. {{lc|std::vector::at}}, {{lc|std::string::substr}}, etc).

In order for an exception to be caught, the throw-expression has to be inside a {{rlp|try_catch|try-block}} or inside a function called from a try-block, and there has to be a {{rlp|try_catch|catch clause}} that matches the type of the exception object.

When declaring a function, {{rlp|except_spec | exception specifications}} and {{rlp|noexcept_spec | noexcept specifiers}} may be provided to limit the types of the exceptions a function may throw.

Errors that arise during exception handling are handled by {{lc|std::terminate}} and {{lc|std::unexpected}}.

===Usage===

While throw-expression can be used to transfer control to an arbitrary block of code up the execution stack, for arbitrary reasons (similar to {{lc|std::longjmp}}), its intended usage is error handling. 

====Error handling====

Throwing an exception is used to signal errors from functions, where &quot;errors&quot; are typically limited to only the following&lt;ref&gt; H. Sutter (2004) [http://www.drdobbs.com/when-and-how-to-use-exceptions/184401836 &quot;When and How to Use Exceptions&quot;] in Dr. Dobb's&lt;/ref&gt;&lt;ref&gt;H.Sutter, A. Alexandrescu (2004), &quot;C++ Coding Standards&quot;, Item 70&lt;/ref&gt;&lt;ref&gt;C++ Core Guidelines [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i10-use-exceptions-to-signal-a-failure-to-perform-a-required-task I.10]&lt;/ref&gt;:
# Failures to meet the postconditions, such as failing to produce a valid return value object
# Failures to meet the preconditions of another function that must be called
# (for non-private member functions) Failures to (re)establish a class invariant

In particular, this implies that the failures of constructors (see also [[cpp/language/raii|RAII]]) and most operators should be reported by throwing exceptions.

In addition, so-called ''wide contract'' functions use exceptions to indicate unacceptable inputs, for example, {{lc|std::string::at}} has no preconditions, but throws an exception to indicate index out of range.

====Exception safety====

After the error condition is reported by a function, additional guarantees may be provided with regards to the state of the program. The following four levels of exception guarantee are generally recognized&lt;ref&gt;B. Stroustrup (2000), &quot;The C++ Programming Language&quot;[http://stroustrup.com/3rd_safe.pdf Appendix E&quot;]&lt;/ref&gt;&lt;ref&gt;H. Sutter (2000) &quot;Exceptional C++&quot;&lt;/ref&gt;&lt;ref&gt;D. Abrahams (2001) [http://www.boost.org/community/exception_safety.html &quot;Exception Safety in Generic Components&quot;]&lt;/ref&gt;, which are strict supersets of each other:

# ''Nothrow (or nofail) exception guarantee'' -- the function never throws exceptions. Nothrow (errors are reported by other means or concealed) is expected of {{rlp|destructor}}s and other functions that may be called during stack unwinding. {{rev inl|since=c++11|The {{rlp|destructor}}s are {{rlp|noexcept}} by default.}} Nofail (the function always succeeds) is expected of swaps, {{rlp|move constructor}}s, and other functions used by those that provide strong exception guarantee.
# ''Strong exception guarantee'' -- If the function throws an exception, the state of the program is rolled back to the state just before the function call. (for example, {{lc|std::vector::push_back}})
# ''Basic exception guarantee'' -- If the function throws an exception, the program is in a valid state. It may require cleanup, but all invariants are intact.
# ''No exception guarantee'' -- If the function throws an exception, the program may not be in a valid state: resource leaks, memory corruption, or other invariant-destroying errors may have occurred.

Generic components may, in addition, offer ''exception-neutral guarantee'': if an exception is thrown from a template parameter (e.g. from the {{tt|Compare}} function object of {{lc|std::sort}} or from the constructor of {{tt|T}} in {{lc|std::make_shared}}), it is propagated, unchanged, to the caller. 

===Exception objects===

While objects of any complete type and cv pointers to void may be thrown as exception objects, all standard library functions throw anonymous temporary objects by value, and the types of those objects are derived (directly or indirectly) from {{lc|std::exception}}. User-defined exceptions usually follow this pattern.&lt;ref&gt;D. Abrahams (2001) [http://www.boost.org/community/error_handling.html &quot;Error and Exception Handling&quot;]&lt;/ref&gt;&lt;ref&gt;isocpp.org Super-FAQ [https://isocpp.org/wiki/faq/exceptions#what-to-throw &quot;What should I throw?&quot;]&lt;/ref&gt;&lt;ref&gt;C++ Core Guidelines [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e14-use-purpose-designed-user-defined-types-as-exceptions-not-built-in-types E.14]&lt;/ref&gt;

To avoid unnecessary copying of the exception object and object slicing, the best practice for catch clauses is to catch by reference.&lt;ref&gt;C++ Core Guidelines [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e15-catch-exceptions-from-a-hierarchy-by-reference E.15]&lt;/ref&gt;&lt;ref&gt;S. Meyers (1996) &quot;More Effective C++&quot; Item 13&lt;/ref&gt;&lt;ref&gt;isocpp.org Super-FAQ [https://isocpp.org/wiki/faq/exceptions#what-to-catch &quot;What should I catch?&quot;]&lt;/ref&gt;&lt;ref&gt;H.Sutter, A. Alexandrescu (2004) &quot;C++ Coding Standards&quot; Item 73&lt;/ref&gt;

===References===
&lt;references/&gt;

{{langlinks|zh}}</text>
      <sha1>pb1jpgllombdwe3mgtf9cenqmkl8js8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/explicit</title>
    <ns>0</ns>
    <id>5075</id>
    <revision>
      <id>87734</id>
      <parentid>87733</parentid>
      <timestamp>2016-09-28T14:21:26Z</timestamp>
      <contributor>
        <ip>75.76.46.95</ip>
      </contributor>
      <comment>example wouldn't compile</comment>
      <text xml:space="preserve" bytes="2510">{{title|explicit specifier}}
{{cpp/language/classes/navbar}}

The {{c|explicit}} specifier specifies that a constructor {{rev inl|since=c++11| or conversion function}} doesn't allow [[cpp/language/implicit_cast|implicit conversions]] or [[cpp/language/copy_initialization|copy-initialization]]. It may only appear within the {{spar|decl-specifier-seq}} of the declaration of such a function within its class definition.

===Notes===
A constructor {{rev inl|until=c++11|with a single non-default parameter}} that is declared without the function specifier {{c|explicit}} is called a {{rlp|converting constructor}}.

Both constructors (other than {{rlp|copy_constructor|copy}}/{{rlp|move_constructor|move}}) and user-defined conversion functions may be function templates; the meaning of {{tt|explicit}} doesn't change.

===Example===
{{example|code=
struct A
{
    A(int) { }      // converting constructor
    A(int, int) { } // converting constructor (C++11)
    operator bool() const { return true; }
};

struct B
{
    explicit B(int) { }
    explicit B(int, int) { }
    explicit operator bool() const { return true; }
};

int main()
{
    A a1 = 1;      // OK: copy-initialization selects A::A(int)
    A a2(2);       // OK: direct-initialization selects A::A(int)
    A a3 {4, 5};   // OK: direct-list-initialization selects A::A(int, int)
    A a4 = {4, 5}; // OK: copy-list-initialization selects A::A(int, int)
    A a5 = (A)1;   // OK: explicit cast performs static_cast
    if (a1) ;      // OK: A::operator bool()
    bool na1 = a1; // OK: copy-initialization selects A::operator bool()
    bool na2 = static_cast&lt;bool&gt;(a1); // OK: static_cast performs direct-initialization

//  B b1 = 1;      // error: copy-initialization does not consider B::B(int)
    B b2(2);       // OK: direct-initialization selects B::B(int)
    B b3 {4, 5};   // OK: direct-list-initialization selects B::B(int, int)
//  B b4 = {4, 5}; // error: copy-list-initialization does not consider B::B(int,int)
    B b5 = (B)1;   // OK: explicit cast performs static_cast
    if (b2) ;      // OK: B::operator bool()
//  bool nb1 = b2; // error: copy-initialization does not consider B::operator bool()
    bool nb2 = static_cast&lt;bool&gt;(b2); // OK: static_cast performs direct-initialization
}
}}

[[de:cpp/language/explicit]]
[[es:cpp/language/explicit]]
[[fr:cpp/language/explicit]]
[[it:cpp/language/explicit]]
[[ja:cpp/language/explicit]]
[[pt:cpp/language/explicit]]
[[ru:cpp/language/explicit]]
[[zh:cpp/language/explicit]]</text>
      <sha1>et0z6wqvro0ut7wysez719h658l9y0h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/explicit cast</title>
    <ns>0</ns>
    <id>695</id>
    <revision>
      <id>89121</id>
      <parentid>89120</parentid>
      <timestamp>2017-01-02T11:57:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rv</comment>
      <text xml:space="preserve" bytes="5643">{{title|Explicit type conversion}}
{{cpp/language/expressions/navbar}}
Converts between types using a combination of explicit and implicit conversions.

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|(}} {{spar|new_type}} {{ttb|) }} {{spar|expression}} }} 
{{sdsc | num=2 | {{spar|new_type}} {{ttb|( }} {{spar|expression}} {{ttb|) }} }} 
{{sdsc | num=3 | {{spar|new_type}} {{ttb|( }} {{spar|expressions}} {{ttb|) }} }} 
{{sdsc | num=4 | {{spar|new_type}} {{ttb|( }} {{ttb|) }} }}
{{sdsc | num=5 | {{spar|new_type}} {{ttb|{ }} {{spar|expression-list}}{{mark optional}} {{ttb|} }} | notes={{mark since c++11}} }} 
{{sdsc | num=6 | {{spar|template}} {{ttb|( }} {{spar|expressions}}{{mark optional}} {{ttb|) }}| notes={{mark since c++17}} }}
{{sdsc | num=7 | {{spar|template}} {{ttb|{ }} {{spar|expressions}}{{mark optional}} {{ttb|} }}| notes={{mark since c++17}} }}
{{sdsc end}}

Returns a value of type {{tt|new_type}}.

===Explanation===
@1@ When the ''C-style cast expression'' is encountered, the compiler attempts to interpret it as the following cast expressions, in this order:
:@a@ {{c|const_cast&lt;new_type&gt;(expression)}};
:@b@ {{c|static_cast&lt;new_type&gt;(expression)}}, with extensions: pointer or reference to a {{rlp|derived class}} is additionally allowed to be cast to pointer or reference to unambiguous base class (and vice versa) even if the base class is {{rlp|access|inaccessible}} (that is, this cast ignores the private inheritance specifier). Same applies to casting {{rlp|pointer|pointer to member}} to pointer to member of unambigous non-virtual base;
:@c@ {{c|static_cast}} (with extensions) followed by {{c|const_cast}};
:@d@ {{c|reinterpret_cast&lt;new_type&gt;(expression)}};
:@e@ {{c|reinterpret_cast}} followed by {{c|const_cast}}.
@@ The first choice that satisfies the requirements of the respective cast operator is selected, even if it cannot be compiled (see example). If the cast can be interpreted in more than one way as {{tt|static_cast}} followed by a {{tt|const_cast}}, it cannot be compiled.
@@ In addition, C-style cast notation is allowed to cast from, to, and between pointers to incomplete class type. If both {{spar|expression}} and {{spar|new_type}} are pointers to incomplete class types, it's unspecified whether static_cast or reinterpret_cast gets selected.
@2@ The ''functional cast expression'' consists of a simple type specifier or a typedef specifier (in other words, a single-word type name: {{c|unsigned int(expression)}} or {{c|int*(expression)}} are not valid), followed by a single expression in parentheses. This cast expression is exactly equivalent to the corresponding C-style cast expression.
@3@ If there are more than one expression in parentheses, {{spar|new_type}} must be a class with a suitably declared {{rlp|constructor}}. This expression is a prvalue of type {{spar|new_type}}  {{rev inl|until=c++17|designating a temporary}}{{rev inl|since=c++17|whose result object is}} {{rlp|direct initialization|direct-initialized}} with {{spar|expressions}}.
@4@ If {{spar|new_type}} names a non-array complete object type, this expression is an prvalue of type {{spar|new_type}}, {{rev inl|until=c++17|designating a temporary}}{{rev inl|since=c++17|whose result object is}} of that type. If {{spar|new_type}} is an object type, the object is {{rlp|value initialization|value-initialized}}. If {{spar|new_type}} is (possibly {{rlp|cv|cv-qualified}}) {{tt|void}}, the expression is a void prvalue {{rev inl|since=c++17|without a result object}}.
@5@ A single-word type name followed by a ''braced-init-list'' is a prvalue of the specified type {{rev inl|until=c++17|designating a temporary}}{{rev inl|since=c++17|whose result object is}} {{rlp|list initialization|direct-list-initialized}} with the specified ''braced-init-list''. This is the only cast expression that can create an {{rlp|array#Array_rvalues|array prvalue}}.
@6,7@ Same as {{v|2-5}}, except first performs {{rlp|class template deduction}}, 

{{cpp/language/cast_return}}

===Example===
{{example
 | code=
double f = 3.14;
unsigned int n1 = (unsigned int)f; // C-style cast
unsigned int n2 = unsigned(f);     // functional cast

class C1;
class C2;
C2* foo(C1* p)
{
    return (C2*)p; // casts incomplete type to incomplete type
}

// In this example, C-style cast is interpreted as static_cast
// even though it would work as reinterpret_cast
struct A {};
struct I1 : A {};
struct I2 : A {};
struct D : I1, I2 {};

int main()
{
    D* d = nullptr;
//  A* a = (A*)d;                   // compile-time error
    A* a = reinterpret_cast&lt;A*&gt;(d); // this compiles
}
}}

===References===
{{ref std c++11}}
{{ref std | section=5.2.3 | title=Explicit type conversion (functional notation) | id=expr.type.conv}}
{{ref std | section=5.4 | title=Explicit type conversion (cast notation) | id=expr.cast}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=5.2.3 | title=Explicit type conversion (functional notation) | id=expr.type.conv}}
{{ref std | section=5.4 | title=Explicit type conversion (cast notation) | id=expr.cast}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc const_cast}}
{{dsc inc | cpp/language/dsc static_cast}}
{{dsc inc | cpp/language/dsc dynamic_cast}}
{{dsc inc | cpp/language/dsc reinterpret_cast}}
{{dsc inc | cpp/language/dsc implicit_cast}}
{{dsc see c | c/language/cast | cast operator}}
{{dsc end}}

[[de:cpp/language/explicit cast]]
[[es:cpp/language/explicit cast]]
[[fr:cpp/language/explicit cast]]
[[it:cpp/language/explicit cast]]
[[ja:cpp/language/explicit cast]]
[[pt:cpp/language/explicit cast]]
[[ru:cpp/language/explicit cast]]
[[zh:cpp/language/explicit cast]]</text>
      <sha1>3a1o5oqi33cikw5y38npygb6fv4077i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/expressions</title>
    <ns>0</ns>
    <id>9881</id>
    <revision>
      <id>88189</id>
      <parentid>86351</parentid>
      <timestamp>2016-11-14T15:12:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention that parentheses preserve value/type/value category (all value categories as of editorial 36a454a)</comment>
      <text xml:space="preserve" bytes="6508">{{title|Expressions}}
{{cpp/language/expressions/navbar}}
An expression is a sequence of ''operators'' and their ''operands'', that specifies a computation.

Expression evaluation may produce a result (e.g., evaluation of {{c|2+2}} produces the result {{c|4}}) and may generate side-effects (e.g. evaluation of {{c|std::printf(&quot;%d&quot;,4)}} prints the character {{c|'4'}} on the standard output).

====General====
* {{rlp|value_category|value categories}} (lvalue, rvalue, glvalue, prvalue, xvalue) classify expressions by their values
* {{rlp|eval_order|order of evaluation}} of arguments and subexpressions specify the order in which intermediate results are obtained

===Operators===

{{cpp/language/operators}}

* {{rlp|operator_precedence | operator precedence}} defines the order in which operators are bound to their arguments
* {{rlp|operator_alternative | alternative representations}} are alternative spellings for some operators 
* {{rlp|operators|operator overloading}} makes it possible to specify the behavior of the operators with user-defined classes.

====Conversions====
* {{rlp|implicit_cast | standard conversions}} implicit conversions from one type to another
* {{rlp|const_cast | {{tt|const_cast}} conversion}}
* {{rlp|static_cast | {{tt|static_cast}} conversion}}
* {{rlp|dynamic_cast | {{tt|dynamic_cast}} conversion}}
* {{rlp|reinterpret_cast | {{tt|reinterpret_cast}} conversion}}
* {{rlp|explicit_cast | explicit cast }} conversion using C-style cast notation and functional notation
* {{rlp|cast_operator|user-defined conversion}} makes it possible to specify conversion from user-defined classes

====Memory allocation====
* {{rlp|new | new expression}} allocates memory dynamically
* {{rlp|delete | delete expression}} deallocates memory dynamically

====Other====
* {{rlp|constant_expression | constant expressions }} can be evaluated at compile time and used in compile-time context (template arguments, array sizes, etc)
* {{rlp|sizeof | {{tt|sizeof}} }}
* {{rlp|alignof | {{tt|alignof}} }}
* {{rlp|typeid | {{tt|typeid}} }}
* {{rlp|throw | throw-expression }}


===Primary expressions===

The operands of any operator may be other expressions or primary expressions (e.g. in {{c|1+2*3}}, the operands of operator+ are the subexpression {{c|2*3}} and the primary expression {{c|1}}).

Primary expressions are any of the following:
@1@ Literals (e.g. {{c|2}} or {{c|&quot;Hello, world&quot;}})
@2@ Suitably declared {{rlp|identifiers|unqualified identifiers}} (e.g. {{c|n}} or {{c|cout}})
@3@ Suitably declared {{rlp|identifiers|qualified identifiers}} (e.g. {{lc|std::string::npos}})
@4@ {{rlp|lambda|Lambda-expressions}} {{mark c++11}}
@5@ {{rlp|fold|Fold-expressions}} {{mark c++17}}

Any expression in parentheses is also classified as a primary expression: this guarantees that the parentheses have higher precedence than any operator. Parentheses preserve value, type, and value category.

====Literals====

Literals are the tokens of a C++ program that represent constant values embedded in the source code.

* {{rlp|integer_literal|integer literals}} are decimal, octal, hexadecimal or binary numbers of integer type.
* {{rlp|character_literal|character literals}} are individual characters of type {{c|char}}, {{c|char16_t}}, {{c|char32_t}}, or {{c|wchar_t}}
* {{rlp|floating_literal|floating-point literals}} are values of type {{c|float}}, {{c|double}}, or {{c|long double}}
* {{rlp|string_literal|string literals}} are sequences of characters of type {{c|const char[]}}, {{c|const char16_t[]}}, {{c|const char32_t[]}}, or {{c|const wchar_t[]}}
* {{rlp|bool_literal|boolean literals}} are values of type {{c|bool}}, that is {{c|true}} and {{c|false}}
* {{rlp|nullptr}} is the pointer literal which specifies a null pointer value {{mark since c++11}}
* {{rlp|user_literal|user-defined literals}} are constant values of user-specified type {{mark since c++11}}

===Unevaluated expressions===
The operands of the four operators {{ltt|cpp/language/typeid}}, {{ltt|cpp/language/sizeof}}{{rev inl|since=c++11|, {{ltt|cpp/language/noexcept}}, and {{ltt|cpp/language/decltype}}}} are expressions that are not evaluated (unless they are polymorphic glvalues and are the operands of {{tt|typeid}}), since these operators only query the compile-time properties of their operands. Thus, {{c|std::size_t n {{=}} sizeof(std::cout &lt;&lt; 42);}} does not perform console output. 

{{rev begin}}
{{rev|since=c++14|
The unevaluated operands are considered to be ''full expressions'' even though they are syntactically operands in a larger expression (for example, this means that {{c|sizeof(T())}} requires an accessible {{tt|T::~T}})
}}
{{rev end}}

The {{rlp|constraints|requires-expressions}}{{mark since concepts_ts}} are also unevaluated expressions.

===Discarded-value expressions===
A ''discarded-value expression'' is an expression that is used for its side-effects only. The value calculated from such expression is discarded. Such expressions include the full expression of any {{rlp|statements#Expression_statements|expression statement}}, the left-hand argument of the comma operator, or the argument of a cast-expression that casts to the type {{c|void}}.

Array-to-pointer and function-to-pointer conversions are never applied to the value calculated by a discarded-value expression. The lvalue-to-rvalue conversion, however, is applied, but only if the expression is a {{rlp|cv|volatile-qualified}} glvalue and has one of the following forms (possibly parenthesized)
* id-expression
* array subscript expression
* class member access expression
* indirection
* pointer-to-member operation 
* conditional expression where both the second and the third operands are one of these expressions,
* comma expression where the right operand is one of these expressions.

{{rev begin}}
{{rev | until=c++17|
In addition, if the expression is of class type, a volatile copy-constructor is required to initialize the resulting rvalue temporary. }}
{{rev|since=c++17|
If the expression is a prvalue (after any lvalue-to-rvalue conversion that might have taken place), {{rlp|implicit_conversion#Temporary_materialization|temporary materialization}} occurs. If the original glvalue is of volatile-qualified class type, a volatile copy-constructor is required to initialize the resulting rvalue temporary.

Compilers may issue warnings when an expression other than cast to {{tt|void}} discards a value declared {{rlp|attributes|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;nodiscard&lt;nowiki&gt;]]&lt;/nowiki&gt;}}}}
}}
{{rev end}}</text>
      <sha1>fu9gzugdgz7ve0e1ktujpgz9oh8jh49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/extending std</title>
    <ns>0</ns>
    <id>13097</id>
    <revision>
      <id>90197</id>
      <parentid>87763</parentid>
      <timestamp>2017-02-10T02:07:52Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="3326">{{title|Extending the namespace {{tt|std}}}}
{{cpp/language/navbar}}

===Adding declarations to {{tt|std}}===
It is undefined behavior to add declarations or definitions to {{tt|namespace std}} or to any namespace nested within {{tt|std}}, with a few exceptions noted below

{{source|
#include &lt;utility&gt;
namespace std {
    // a function definition added to namespace std: undefined behavior
    pair&lt;int, int&gt; operator+(pair&lt;int, int&gt; a, pair&lt;int, int&gt; b) {
        return {a.first+b.first, a.second+b.second};
    }
}
}}

===Adding template specializations===

It is allowed to add template specializations for any standard library template to the namespace {{tt|std}} only if the declaration depends on a user-defined type and the specialization satisfies all requirements for the original template, except where such specializations are prohibited.

{{source|
// Specialize std::hash so that MyType can be used as a key in 
// std::unordered_set and std::unordered_map
namespace std {
    template &lt;typename T&gt; struct hash;
    template &lt;&gt; struct hash&lt;MyType&gt; {
      std::size_t operator()(const MyType&amp; t) { return t.hash(); }
    }
}    
}}

* It is undefined behavior to declare a full specialization of any member function of a standard library class template
{{todo|mini-example}}

* It is undefined behavior to declare a full specialization of any member function template of a standard library class or class template
{{todo|mini-example}}

* It is undefined behavior to declare a full or partial specialization of any member class template of a standard library class or class template.
{{todo|mini-example}}

* None of the [[cpp/types|type traits]] defined in {{header|type_traits}} may be specialized for a user-defined type, except for {{lc|std::common_type}}.

* Specializing the template {{lc|std::complex}} for any type other than float, double, and long double is unspecified.

* Specializations of {{lc|std::hash}} for user-defined types must satisfy {{concept|Hash}} requirements.

* Specializations of {{lc|std::atomic}} must have a deleted copy constructor, a deleted copy assignment operator, and a constexpr value constructor.

* Specializations of {{lc|std::shared_ptr}} and {{lc|std::weak_ptr}} must be {{concept|CopyConstructible}} and {{concept|CopyAssignable}}. In addition, specializations of {{lc|std::shared_ptr}} must be {{concept|LessThanComparable}}, and convertible to {{c|bool}}.

* Specializations of {{lc|std::istreambuf_iterator}} must have a trivial copy constructor, a constexpr default constructor, and a trivial destructor.

* Specializations of {{lc|std::numeric_limits}} must define all members declared {{tt|static constexpr}} in the primary template, in such a way that they are usable as {{rlp|constant expression|integral constant expressions}}.

* {{lc|std::unary_function}} and {{lc|std::binary_function}} may not be specialized.

===Explicit instantiation of templates===

It is allowed to explicitly instantiate a template defined in the standard library only if the declaration depends on the name of a user-defined type and the instantiation meets the standard library requirements for the original template.
{{todo|mini-example}}

===Other restrictions===

The namespace {{tt|std}} may not be declared as an {{tt|inline}} namespace.

[[zh:cpp/language/extending_std]]</text>
      <sha1>7y2be6bb3bwvib22rm6msx9p5qglemn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/final</title>
    <ns>0</ns>
    <id>5074</id>
    <revision>
      <id>91159</id>
      <parentid>87833</parentid>
      <timestamp>2017-03-24T06:27:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Syntax */ Adjust, and let's not have one {{mark optional}} apply to two syntax elements (: and base-specifier-list)</comment>
      <text xml:space="preserve" bytes="3510">{{title|final specifier {{mark since c++11}}}}
{{cpp/language/classes/navbar}}

Specifies that a {{rlp|virtual|virtual function}} cannot be overridden in a derived class or that a class cannot be {{rlp|derived class|inherited from}}.

===Syntax===
When applied to a member function, the identifier {{tt|final}} appears immediately after the {{rlp|function|declarator}} in the syntax of a member function declaration or a member function definition inside a class definition.

When applied to a class, the identifier {{tt|final}} appears at the beginning of the class definition, immediately after the name of the class.

{{sdsc begin}}
{{sdsc | num=1 | {{spar|declarator}} {{spar|virt-specifier-seq}}{{mark optional}} {{spar|pure-specifier}}{{mark optional}} }}
{{sdsc | num=2 | {{spar|declarator}} {{spar|virt-specifier-seq}}{{mark optional}} {{spar|function-body}} }}
{{sdsc | num=3 | {{spar|class-key}} {{spar|attr}}{{mark optional}} {{spar|class-head-name}} {{spar|class-virt-specifier}}{{mark optional}} {{spar|base-clause}}{{mark optional}} }}
{{sdsc end}}
@1@ In a member function declaration, {{tt|final}} may appear in {{spar|virt-specifier-seq}} immediately after the declarator, and before the {{rlp|abstract_class|pure-specifier}}, if used.
@2@ In a member function definition inside a class definition, {{tt|final}} may appear in {{spar|virt-specifier-seq}} immediately after the declarator and just before {{spar|function-body}}.
@3@ In a class definition, {{tt|final}} may appear as {{spar|class-virt-specifier}} immediately after the name of the class, just before the colon that begins the {{spar|base-clause}}, if used.

In the cases (1,2), {{spar|virt-specifier-seq}}, if used, is either {{rlp|override}} or {{tt|final}}, or {{tt|final override}} or {{tt|override final}}. In the case (3), the only allowed value of {{spar|class-virt-specifier}}, if used, is {{tt|final}}

===Explanation===
When used in a virtual function declaration or definition, {{tt|final}} ensures that the function is virtual and specifies that it may not be overridden by derived classes. The program is ill-formed (a compile-time error is generated) otherwise.

When used in a class definition, {{tt|final}} specifies that this class may not appear in the {{spar|base-specifier-list}} of another class definition (in other words, cannot be derived from). The program is ill-formed (a compile-time error is generated) otherwise. {{tt|final}} can also be used with a {{rlp|union}} definition, in which case it has no effect (other than on the outcome of {{lc|std::is_final}}), since unions cannot be derived from)

{{c|final}} is an identifier with a special meaning when used in a member function declaration or class head.  In other contexts it is not reserved and may be used to name objects and functions.

===Example===
{{source|
struct Base
{
    virtual void foo();
};

struct A : Base
{
    void foo() final; // A::foo is overridden and it is the final override
    void bar() final; // Error: non-virtual function cannot be overridden or be final
};

struct B final : A // struct B is final
{
    void foo() override; // Error: foo cannot be overridden as it's final in A
};

struct C : B // Error: B is final
{
};
}}
===See also===
*[[cpp/language/override|override specifier]] {{mark since c++11}}

[[de:cpp/language/final]]
[[es:cpp/language/final]]
[[fr:cpp/language/final]]
[[it:cpp/language/final]]
[[ja:cpp/language/final]]
[[pt:cpp/language/final]]
[[ru:cpp/language/final]]
[[zh:cpp/language/final]]</text>
      <sha1>jol1h4g66cnv11mgtljn6a5ufui42zz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/floating literal</title>
    <ns>0</ns>
    <id>5286</id>
    <revision>
      <id>83650</id>
      <parentid>83648</parentid>
      <timestamp>2016-03-06T01:55:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>notes= instead of rev around sdscs</comment>
      <text xml:space="preserve" bytes="4734">{{title|floating point literal}}
{{cpp/language/expressions/navbar}}

Floating point literal defines a compile-time constant whose value is specified in the source file.

===Syntax===
{{sdsc begin}}
{{sdsc | {{spar|significand}} {{spar|exponent}}{{mark optional}} {{spar|suffix}}{{mark optional}} }}
{{sdsc end}}

Where the {{spar|significand}} has one of the following forms
{{sdsc begin}}
{{sdsc |num=1| {{spar|digit-sequence}} }}
{{sdsc |num=2| {{spar|digit-sequence}} {{ttb|.}} }}
{{sdsc |num=3| {{spar|digit-sequence}}{{mark optional}} {{ttb|.}} {{spar|digit-sequence}} }}
{{sdsc |num=4|notes={{mark since c++17}}|{{ttb|0x}} {{!}} {{ttb|0X}} {{spar|hex-digit-sequence}} }}
{{sdsc |num=5|notes={{mark since c++17}}|{{ttb|0x}} {{!}} {{ttb|0X}} {{spar|hex-digit-sequence}} {{ttb|.}} }}
{{sdsc |num=6|notes={{mark since c++17}}|{{ttb|0x}} {{!}} {{ttb|0X}} {{spar|hex-digit-sequence}}{{mark optional}} {{ttb|.}} {{spar|hex-digit-sequence}} }}
{{sdsc end}}
@1@ {{spar|digit-sequence}} representing a whole number without a decimal separator, in this case the exponent is not optional: {{c|1e10}}, {{c|1e-5L}}
@2@ {{spar|digit-sequence}} representing a whole number with a decimal separator, in this case the exponent is optional: {{c|1.}}, {{c|1.e-2}}
@3@ {{spar|digit-sequence}} representing a fractional number. The exponent is optional: {{c|3.14}}, {{c|.1f}}, {{c|0.1e-1L}}
@4@ Hexadecimal {{spar|digit-sequence}} representing a whole number without a radix separator. The exponent is never optional for hexadecimal floating-point literals: {{c|0x1ffp10}}, {{c|0X0p-1}}
@5@ Hexadecimal {{spar|digit-sequence}} representing a whole number with a radix separator. The exponent is never optional for hexadecimal floating-point literals: {{c|0x1.p0}}, {{c|0xf.p-1}}
@6@ Hexadecimal {{spar|digit-sequence}} representing a fractional number with a radix separator. The exponent is never optional for hexadecimal floating-point literals: {{c|0x0.123p-1}},  {{c|0xa.bp10l}}

The {{spar|exponent}} has the form
{{sdsc begin}}
{{sdsc|num=1|{{ttb|e}} {{!}} {{ttb|E}} {{spar|exponent-sign}}{{mark optional}} {{spar|digit-sequence}}}}
{{sdsc|num=2|{{ttb|p}} {{!}} {{ttb|P}} {{spar|exponent-sign}}{{mark optional}} {{spar|digit-sequence}}|notes={{mark since c++17}}}}
{{sdsc end}}
@1@ The exponent syntax for a decimal floating-point literal
@2@ The exponent syntax for hexadecimal floating-point literal

{{spar|exponent-sign}}, if present, is either {{ttb|+}} or {{ttb|-}}

{{spar|suffix}}, if present, is one of {{ttb|f}}, {{ttb|F}}, {{ttb|l}}, or {{ttb|L}}. The suffix determines the type of the floating-point literal:
:* (no suffix) defines {{c|double}}
:* {{ttb|f F}} defines {{c|float}}
:* {{ttb|l L}} defines {{c|long double}}
{{rev begin}}
{{rev | since = c++14 |Optional single quotes({{tt|'}}) can be inserted between the digits as a separator, they are ignored when compiling.}}
{{rev end}}

===Explanation===
Decimal scientific notation is used, meaning that the value of the floating-point literal is the significand mutiplied by the number 10 raised to the power of {{spar|exponent}}. The mathematical meaning of {{c|123e4}} is ''123×10&lt;sup&gt;4&lt;/sup&gt;''

{{rev begin}}
{{rev|since=c++17|
If the {{spar|significand}} begins with the character sequence {{tt|0x}} or {{tt|0X}}, the floating constant is a ''hexadecimal floating constant''. Otherwise, it is a ''decimal floating constant''.

For a ''hexadecimal floating constant'', the {{spar|significand}} is interpreted as a hexadecimal rational number, and the {{spar|digit-sequence}} of the exponent is interpreted as the integer power of 2 to which the significand has to be scaled.
{{source|1=
double d = 0x1.2p3; // hex fraction 1.2 (decimal 1.125) scaled by 2^3, that is 9.0
}}
}}
{{rev end}}
===Example===
{{example|code=
#include &lt;iostream&gt;
int main()
{
  std::cout &lt;&lt; 123.456e-67 &lt;&lt; '\n'
            &lt;&lt; .1E4f       &lt;&lt; '\n'
            &lt;&lt; 58.         &lt;&lt; '\n'
            &lt;&lt; 4e2         &lt;&lt; '\n';
}
|output=
1.23456e-65
1000
58
400
}}

===Notes===
The hexadecimal floating-point literals were not part of C++ until C++17, although they can be parsed and printed by the I/O functions since C++11: both C++ I/O streams when {{c|std::hexfloat}} is enabled and the C I/O streams: {{c|std::printf}}, {{c|std::scanf}}, etc. See {{c|std::strtof}} for the format description 

===See also===
{{dsc begin}}
{{dsc see c | c/language/floating_constant | floating point constant}}
{{dsc end}}

[[de:cpp/language/floating literal]]
[[es:cpp/language/floating literal]]
[[fr:cpp/language/floating literal]]
[[it:cpp/language/floating literal]]
[[ja:cpp/language/floating literal]]
[[pt:cpp/language/floating literal]]
[[ru:cpp/language/floating literal]]
[[zh:cpp/language/floating literal]]</text>
      <sha1>bimx0umee7h2e7nusc5xba9nlsldvcr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/fold</title>
    <ns>0</ns>
    <id>13849</id>
    <revision>
      <id>90163</id>
      <parentid>90162</parentid>
      <timestamp>2017-02-07T16:23:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Example */ calling reserve() repeatedly is an anti-pattern</comment>
      <text xml:space="preserve" bytes="4805">{{title|fold expression}}
{{cpp/language/templates/navbar}}
Reduces ([[enwiki:Fold_(higher-order_function)|folds]]) a [[cpp/language/parameter_pack|parameter pack]] over a binary operator.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | notes={{mark since c++17}} | {{ttb|(}} {{spar|pack}} {{spar|op}} {{ttb|...}} {{ttb|)}} }}
{{sdsc | num=2 | notes={{mark since c++17}} | {{ttb|(}} {{ttb|...}} {{spar|op}} {{spar|pack}} {{ttb|)}} }}
{{sdsc | num=3 | notes={{mark since c++17}} | {{ttb|(}} {{spar|pack}} {{spar|op}} {{ttb|...}} {{spar|op}} {{spar|init}} {{ttb|)}} }}
{{sdsc | num=4 | notes={{mark since c++17}} | {{ttb|(}} {{spar|init}} {{spar|op}} {{ttb|...}} {{spar|op}} {{spar|pack}} {{ttb|)}} }}
{{sdsc end}}
@1@ unary right fold
@2@ unary left fold
@3@ binary right fold
@4@ binary left fold

{{par begin}}
{{par | {{spar|op}} | any of the following 32 ''binary'' operators: {{c|+}} {{c|-}} {{c|*}} {{c|/}} {{c|%}} {{c|^}} {{c|&amp;}} {{c|{{!}}}} {{c|{{=}}}} {{c|&lt;}} {{c|&gt;}} {{c|&lt;&lt;}} {{c|&gt;&gt;}} {{c|+{{=}}}} {{c|-{{=}}}} {{c|*{{=}}}} {{c|/{{=}}}}  {{c|%{{=}}}} {{c|^{{=}}}} {{c|&amp;{{=}}}} {{c|{{!}}{{=}}}}  {{c|&lt;&lt;{{=}}}} {{c|&gt;&gt;{{=}}}} {{c|{{==}}}} {{c|!{{=}}}} {{c|&lt;{{=}}}} {{c|&gt;{{=}}}} {{c|&amp;&amp;}} {{c|{{!!}}}} {{c|,}} {{c|.*}} {{c|-&gt;*}}. In a binary fold, both {{spar|op}}s must be the same.}}
{{par | {{spar|pack}} | an expression that contains an unexpanded {{rlp|parameter pack}} and does not contain an operator with {{rlp|operator_precedence|precedence}} lower than cast at the top level (formally, a {{spar|cast-expression}})}}
{{par | {{spar|init}} | an expression that does not contain an unexpanded {{rlp|parameter pack}} and does not contain an operator with {{rlp|operator_precedence|precedence}} lower than cast  at the top level (formally, a {{spar|cast-expression}})}}
{{par end}}

Note that the open and closing parentheses are part of the fold expression.

===Explanation===

The instantiation of a ''fold expression'' expands the expression {{tt|e}} as follows:

@1@ Unary right fold {{math|(E op ...)}} becomes {{math|E{{su|b=1}} op (... op (E{{su|b=N-1}} op E{{su|b=N}}))}}
@2@ Unary left fold {{math|(... op E)}} becomes {{math|((E{{su|b=1}} op E{{su|b=2}}) op ...) op E{{su|b=N}}}}
@3@ Binary right fold {{math|(E op ... op I)}} becomes {{math|E{{su|b=1}} op (... op (E{{su|b=N−1}} op (E{{su|b=N}} op I)))}}
@4@ Binary left fold {{math|(I op ... op E)}} becomes {{math|(((I op E{{su|b=1}}) op E{{su|b=2}}) op ...) op E{{su|b=N}}}}

(where {{math|N}} is the number of elements in the pack expansion)

For example, 
{{source|1=
template&lt;typename... Args&gt;
bool all(Args... args) { return (... &amp;&amp; args); }

bool b = all(true, true, true, false);
 // within all(), the unary left fold expands as
 //  return ((true &amp;&amp; true) &amp;&amp; true) &amp;&amp; false;
 // b is false
}}

When a unary fold is used with a pack expansion of length zero, only the following operators are allowed:
@1@ Logical AND ({{c|&amp;&amp;}}). The value for the empty pack is {{c|true}}
@2@ Logical OR ({{c|{{!!}}}}). The value for the empty pack is {{c|false}}
@3@ The comma operator ({{c|,}}). The value for the empty pack is {{c|void()}}

===Note===
If the expression used as {{spar|init}} or as {{spar|pack}} has an operator with precedence below cast at the top level, it can be parenthesed:
{{source|1=
template&lt;typename ...Args&gt;
int sum(Args&amp;&amp;... args) {
//    return (args + ... + 1 * 2); // Error: operator with precedence below cast
    return (args + ... + (1 * 2)); // OK
}
}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;climits&gt;
#include &lt;cstdint&gt;
#include &lt;type_traits&gt;
#include &lt;utility&gt;

template&lt;typename ...Args&gt;
void printer(Args&amp;&amp;... args) {
    (std::cout &lt;&lt; ... &lt;&lt; args) &lt;&lt; '\n';
}

template&lt;typename T, typename... Args&gt;
void push_back_vec(std::vector&lt;T&gt;&amp; v, Args&amp;&amp;... args)
{
    (v.push_back(args), ...);
}

// compile-time endianness swap based on http://stackoverflow.com/a/36937049 
template&lt;class T, std::size_t... N&gt;
constexpr T bswap_impl(T i, std::index_sequence&lt;N...&gt;) {
  return (((i &gt;&gt; N*CHAR_BIT &amp; std::uint8_t(-1)) &lt;&lt; (sizeof(T)-1-N)*CHAR_BIT) {{!}} ...);
}
template&lt;class T, class U = std::make_unsigned_t&lt;T&gt;&gt;
constexpr U bswap(T i) {
  return bswap_impl&lt;U&gt;(i, std::make_index_sequence&lt;sizeof(T)&gt;{});
}

int main()
{
    printer(1, 2, 3, &quot;abc&quot;);

    std::vector&lt;int&gt; v;
    push_back_vec(v, 6, 2, 45, 12);
    push_back_vec(v, 1, 2, 9);
    for (int i : v) std::cout &lt;&lt; i &lt;&lt; ' ';

    static_assert(bswap&lt;std::uint16_t&gt;(0x1234u)==0x3412u);
    static_assert(bswap&lt;std::uint64_t&gt;(0x0123456789abcdefULL)==0xefcdab8967452301ULL);
}
|output=
123abc
6 2 45 12 1 2 9
}}

[[de:cpp/language/fold]]
[[es:cpp/language/fold]]
[[fr:cpp/language/fold]]
[[it:cpp/language/fold]]
[[ja:cpp/language/fold]]
[[pt:cpp/language/fold]]
[[ru:cpp/language/fold]]
[[zh:cpp/language/fold]]</text>
      <sha1>0azyvbcy8np6rmne4i2x4nh6vby7937</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/for</title>
    <ns>0</ns>
    <id>696</id>
    <revision>
      <id>87436</id>
      <parentid>87224</parentid>
      <timestamp>2016-08-24T13:49:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>progress guarantee note</comment>
      <text xml:space="preserve" bytes="5583">{{title|for loop}}
{{cpp/language/statements/navbar}}
Executes {{spar|init-statement}} once, then executes {{spar|statement}} and {{spar|iteration_expression}} repeatedly, until the value of {{spar|condition}} becomes false. The test takes place before each iteration.

===Syntax===
{{sdsc begin}}
{{sdsc | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;''formal syntax:'' }}
{{sdsc | {{spar|attr}}{{mark optional}} {{ttb|for (}} {{spar|init-statement}}&lt;!-- Please do NOT add a semicolon here! Semicolon is a part of init-statement. --&gt; {{spar|condition}}{{mark optional}} {{ttb|;}} {{spar|iteration_expression}}{{mark optional}} {{ttb|)}} {{spar|statement}} }}
{{sdsc | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;''informal syntax:'' }}
{{sdsc | {{spar|attr}}{{mark optional}} {{ttb|for (}} {{spar|declaration-or-expression}}{{mark optional}} {{ttb|;}} {{spar|declaration-or-expression}}{{mark optional}} {{ttb|;}} {{spar|expression}}{{mark optional}} {{ttb|)}} {{spar|statement}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | any number of {{rlp|attributes}} }}
{{par | {{spar|init-statement}} | either 
* an {{rlp|statements|expression statement}} (which may be a ''null statement'' &quot;{{ttb|;}}&quot;)
* a  {{rlp|declarations|simple declaration}}, typically a declaration of a loop counter variable with initializer, but it may declare arbitrary many variables
:Note that any {{spar|init-statement}} must end with a semicolon {{ttb|;}}, which is why it is often described informally as an expression or a declaration followed by a semicolon.}}
{{par | {{spar|condition}} | either
* an {{rlp|expressions|expression}} which is {{rlp|implicit_cast|contextually convertible}} to bool. This expression is evaluated before each iteration, and if it yields {{c|false}}, the loop is exited.
* a {{rlp|declarations|declaration}} of a single variable with a brace-or-equals {{rlp|initialization|initializer}}. the initializer is evaluated before each iteration, and if the value of the declared variable converts to {{c|false}}, the loop is exited.}}
{{par | {{spar|iteration_expression}} | any {{rlp|expressions|expression}}, which is executed after every iteration of the loop and before re-evaluating {{spar|condition}}. Typically, this is the expression that increments the loop counter  }}
{{par | {{spar|statement}} | any {{rlp|statements|statement}}, typically a compound statement, which is the body of the loop }}
{{par end}}

===Explanation===
The above syntax produces code equivalent to:
{{sdsc begin}}
{{sdsc | 
{{ttb|{}}&lt;br&gt;
:{{spar|init_statement}} &lt;br&gt;
:{{ttb|while (}} {{spar|condition}} {{ttb|) {}} &lt;br&gt;
::{{spar|statement}} &lt;br&gt;
::{{spar|iteration_expression}} {{ttb|;}} &lt;br&gt;
:{{ttb|} }}
{{ttb|} }}
}}
{{sdsc end}}

Except that 
@1@ Names declared by the {{spar|init-statement}} (if {{spar|init-statement}} is a declaration) and names declared by {{spar|condition}} (if condition is a declaration) are in the same scope (which is also the scope of {{spar|statement}}).
@2@ {{rlp|continue}} in the {{spar|statement}} will execute {{spar|iteration_expression}}
@3@ Empty {{spar|condition}} is equivalent to {{c|while(true)}}

If the execution of the loop needs to be terminated at some point, {{rlp|break | break statement}} can be used as terminating statement. 

If the execution of the loop needs to be continued at the end of the loop body, {{rlp|continue | continue statement}} can be used as shortcut.

As is the case with {{rlp|while}} loop, if {{spar|statement}} is a single statement (not a compound statement), the scope of variables declared in it is limited to the loop body as if it was a compound statement.
{{source|
for (;;)
    int n;
// n goes out of scope
}}

===Keywords===
{{ltt|cpp/keyword/for}}

===Notes===
{{cpp/language/process_guarantee_note}}

While in C++, the scope of the {{spar|init-statement}} and the scope of {{spar|statement}} are one and the same, in C the scope of {{spar|statement}} is nested within the scope of {{spar|init-statement}}:
{{source|1=
for (int i = 0; ; ) {
    long i = 1;   // valid C, invalid C++
    // ...
}
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
    // typical loop with a single statement as the body
    for (int i = 0; i &lt; 10; ++i)
        std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    // init-statement can declare multiple names, as long as they
    // can use the same decl-specifier-seq
    for (int i = 0, *p = &amp;i; i &lt; 9; i += 2) {
        std::cout &lt;&lt; i &lt;&lt; ':' &lt;&lt; *p &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';

    // condition may be a declaration
    char cstr[] = &quot;Hello&quot;;
    for (int n = 0; char c = cstr[n]; ++n)
        std::cout &lt;&lt; c;
    std::cout &lt;&lt; '\n';

    // init-statement can use the auto type specifier
    std::vector&lt;int&gt; v = {3, 1, 4, 1, 5, 9};
    for (auto iter = v.begin(); iter != v.end(); ++iter) {
        std::cout &lt;&lt; *iter &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';

   // init-statement can be an expression
    int n = 0;
    for (std::cout &lt;&lt; &quot;Loop start\n&quot;;
         std::cout &lt;&lt; &quot;Loop test\n&quot;;
         std::cout &lt;&lt; &quot;Iteration &quot; &lt;&lt; ++n &lt;&lt; '\n')
        if(n &gt; 1)
            break;
    std::cout &lt;&lt; '\n';
}
 | output=
0 1 2 3 4 5 6 7 8 9 
0:0 2:2 4:4 6:6 8:8 
Hello
3 1 4 1 5 9 
Loop start
Loop test
Iteration 1
Loop test
Iteration 2
Loop test
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc range-for}}
{{dsc see c | c/language/for}}
{{dsc end}}

[[de:cpp/language/for]]
[[es:cpp/language/for]]
[[fr:cpp/language/for]]
[[it:cpp/language/for]]
[[ja:cpp/language/for]]
[[pt:cpp/language/for]]
[[ru:cpp/language/for]]
[[zh:cpp/language/for]]</text>
      <sha1>3qwdvngwzg5w54z6mfg3t1myfmeu4ra</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/friend</title>
    <ns>0</ns>
    <id>3084</id>
    <revision>
      <id>86691</id>
      <parentid>85301</parentid>
      <timestamp>2016-07-09T10:22:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Description */ link to [[cpp/language/class#Local_classes]]</comment>
      <text xml:space="preserve" bytes="11167">{{title|friend declaration}}
{{cpp/language/classes/navbar}}
The friend declaration appears in a {{rlp|class|class body}} and grants a function or another class access to private and protected members of the class where the friend declaration appears.

===Syntax===
{{sdsc begin}}
{{sdsc|num=1| {{ttb|friend}} {{spar|function-declaration}} }}
{{sdsc|num=2| {{ttb|friend}} {{spar|function-definition}} }}
{{sdsc|num=3| {{ttb|friend}} {{spar|elaborated-class-name}} {{ttb|;}}}}
{{sdsc|num=4|notes={{mark since c++11}}|
{{ttb|friend}} {{spar|simple-type-specifier}} {{ttb|;}}
{{ttb|friend}} {{spar|typename-specifier}} {{ttb|;}}
}}
{{sdsc end}}

===Description===
@1@ Designates a function or several functions as friends of this class
{{source|
class Y {
    int data; // private member
    // the non-member function operator&lt;&lt; will have access to Y's private members
    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const Y&amp; o);
    friend char* X::foo(int); // members of other classes can be friends too
    friend X::X(char), X::~X(); // constructors and destructors can be friends
};
// friend declaration does not declare a member function
// this operator&lt;&lt; still needs to be defined, as a non-member
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const Y&amp; y)
{
    return out &lt;&lt; y.data; // can access private member Y::data
}
}}
@2@ (only allowed in non-{{rlp|class#Local_classes|local}} class definitions) Defines a non-member function, and makes it a friend of this class at the same time. Such non-member function is always {{rlp|inline}}.
{{source|1=class X {
    int a;
    friend void friend_set(X&amp; p, int i) {
        p.a = i; // this is a non-member function
    }
 public:
    void member_set(int i) {
        a = i; // this is a member function
    }
};
}}
@3@ Designates the class, struct, or union named by the {{spar|elaborated-class-name}} (see {{rlp|elaborated type specifier}}) as a friend of this class. This means that the friend's member declarations and definitions can access private and protected members of this class and also that the {{rlp|nested classes}} of the friend can inherit from private and protected members of this class. {{rev inl|since=c++11|The friend itself can also inherit from private and protected members of this class.}}
If the name of the class that is used in the friend declaration is not yet declared, it is forward declared on the spot.
@4@ Designates the type named by the {{spar|simple-type-specifier}} or {{spar|typename-specifier}} as a friend of this class if that type is a (possibly {{rlp|cv|cv-qualified}}) class, struct, or union; otherwise the {{tt|friend}} declaration is ignored. This declaration will not forward declare new type.
{{source|1=
class Y {};
class A {
    int data; // private data member
    class B { }; // private nested type
    enum { a = 100 }; // private enumerator
    friend class X; // friend class forward declaration (elaborated class name)
    friend Y; // friend class declaration (simple type specifier) (since c++11)
};

class X : A::B // Error until C++11: the base-clause is not part of member declarations
               // allowed in C++11
{
    A::B mx; // OK: A::B accessible to member of friend
    class Y : A::B { // OK: A::B accessible to base-clause of nested member of friend
    };
    int v[A::a]; // OK: A::a accessible to member of friend
};
}}

===Notes===
Friendship is not transitive (a friend of your friend is not your friend)

Friendship is not inherited (your friend's children are not your friends)

Prior to C++11, member declarations and definitions inside the nested class of the friend of class {{tt|T}} cannot access the private and protected members of class {{tt|T}}, but some compilers accept it even in pre-C++11 mode.

Storage class specifiers are not allowed in friend function declarations. A function that is defined in the friend declaration has external linkage, a function that was previously defined, keeps the linkage it was defined with.

{{rlp|access|Access specifiers}} have no effect on the meaning of friend declarations (they can appear in {{tt|private:}} or in {{tt|public:}} sections, with no difference)

A friend class declaration cannot define a new class ({{c|friend class X {};}} is an error)

When a local class declares an unqualified function or class as a friend, only functions and classes in the innermost non-class scope are {{rlp|lookup|looked up}}, not the global functions:
{{source|class F {};
int f();
int main()
{
    extern int g();
    class Local { // Local class in the main() function
        friend int f(); // Error, no such function declared in main()
        friend int g(); // OK, there is a declaration for g in main()
        friend class F; // friends a local F (defined later)
        friend class ::F; // friends the global F
    };
    class F {}; // local F
}
}}

A name first declared in a friend declaration within class or class template X becomes a member of the innermost enclosing namespace of X, but is not accessible for lookup (except argument-dependent lookup that considers X) unless a matching declaration at the namespace scope is provided - see {{rlp|namespace#Namespaces|namespaces}} for details.

===Template friends===
Both {{rlp|function template}} and {{rlp|class template}} declarations may appear with the {{tt|friend}} specifier in any non-local class or class template (although only function templates may be defined within the class or class template that is granting friendship). In this case, every specialization of the template becomes a friend, whether it is implicitly instantiated, partially specialized, or explicitly specialized.

{{source|class A {
    template&lt;typename T&gt;
    friend class B; // every B&lt;T&gt; is a friend of A

    template&lt;typename T&gt;
    friend void f(T) {} // every f&lt;T&gt; is a friend of A
};
}}

Friend declarations cannot refer to partial specializations, but can refer to full specializations:

{{source|
template&lt;class T&gt; class A {}; // primary
template&lt;class T&gt; class A&lt;T*&gt; {}; // partial
template&lt;&gt; class A&lt;int&gt; {}; // full
class X {
    template&lt;class T&gt; friend class A&lt;T*&gt;; // error!
    friend class A&lt;int&gt;; // OK
};
}}

When a friend declaration refers to a full specialization of a function template, the keyword {{tt|inline}} and default arguments cannot be used.

{{source|1=
template&lt;class T&gt; void f(int);
template&lt;&gt; void f&lt;int&gt;(int);

class X {
    friend void f&lt;int&gt;(int x = 1); // error: default args not allowed
};
}}

If a member of a class template A is declared to be a friend of a non-template class B, the corresponding member of every specialization of A becomes a friend of B. If A is explicitly specialized, as long as there is a member of the same name, same kind (type, function, class template, function template), same parameters/signature, it will be a friend of B.

{{source|
template&lt;typename T&gt; // primary template
struct A
{
    struct C {};
    void f();
    struct D {
        void g();
    };
};

template&lt;&gt; // full specialization
struct A&lt;int&gt;
{
    struct C {};
    int f();
    struct D {
        void g();
    };
};

class B // non-template class
{
    template&lt;class T&gt;
    friend struct A&lt;T&gt;::C; // A&lt;int&gt;::C is a friend, as well as all A&lt;T&gt;::C

    template&lt;class T&gt;
    friend void A&lt;T&gt;::f(); // A&lt;int&gt;::f() is not a friend, because the
                           // signatures do not match, but A&lt;char&gt;::f() is

    template&lt;class T&gt;
    friend void A&lt;T&gt;::D::g(); // A&lt;int&gt;::D::g() is not a friend: it is not a member
                              // of A, and A&lt;int&gt;::D is not a specialization of A&lt;T&gt;::D
};
}}

{{rev begin}}
{{rev|since=c++11|
{{rlp|template_parameters#Default_template_arguments|Default template arguments}} are only allowed on template friend declarations if the declaration is a definition and no other declarations of this function template appear in this translation unit.
}}
{{rev end}}

===Template friend operators===
A common use case for template friends is declaration of a non-member operator overload that acts on a class template, e.g. {{c|operator&lt;&lt;(std::ostream&amp;, const Foo&lt;T&gt;&amp;)}} for some user-defined {{c|Foo&lt;T&gt;}}

Such operator can be defined in the class body, which has the effect of generating a separate non-template {{tt|operator&lt;&lt;}} for each {{tt|T}} and makes that non-template {{tt|operator&lt;&lt;}} a friend of its {{tt|Foo&lt;T&gt;}}

{{example|code=#include &lt;iostream&gt;

template&lt;typename T&gt;
class Foo {
 public:
    Foo(const T&amp; val) : data(val) {}
 private:
    T data;

    // generates a non-template operator&lt;&lt; for this T
    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Foo&amp; obj)
    {
        return os &lt;&lt; obj.data;
    }
};

int main()
{
    Foo&lt;double&gt; obj(1.23);
    std::cout &lt;&lt; obj &lt;&lt; '\n';
}
|output=1.23
}}

or the function template has to be declared as a template before the class body, in which case the friend declaration within {{tt|Foo&lt;T&gt;}} can refer to the full specialization of {{tt|operator&lt;&lt;}} for its {{tt|T}}:

{{example|code=
#include &lt;iostream&gt;

template&lt;typename T&gt;
class Foo; // forward declare to make function declaration possible

template&lt;typename T&gt; // declaration
std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const Foo&lt;T&gt;&amp;);

template&lt;typename T&gt;
class Foo {
 public:
    Foo(const T&amp; val) : data(val) {}
 private:
    T data;

    // refers to a full specialization for this particular T 
    friend std::ostream&amp; operator&lt;&lt; &lt;&gt; (std::ostream&amp;, const Foo&amp;);
    // note: this relies on template argument deduction in declarations
    // can also specify the template argument with operator&lt;&lt; &lt;T&gt;&quot;
};

// definition
template&lt;typename T&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Foo&lt;T&gt;&amp; obj)
{
    return os &lt;&lt; obj.data;
}

int main()
{
    Foo&lt;double&gt; obj(1.23);
    std::cout &lt;&lt; obj &lt;&lt; '\n';
}
}}

===Example===
{{example
| stream insertion and extraction operators are often declared as non-member friends
| code=#include &lt;iostream&gt;
#include &lt;sstream&gt;

class MyClass {
    int i;

    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const MyClass&amp; o);
    friend std::istream&amp; operator&gt;&gt;(std::istream&amp; in, MyClass&amp; o);
 public:
    MyClass(int i = 0) : i(i) {}
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const MyClass&amp; mc)
{
    return out &lt;&lt; mc.i;
}

std::istream&amp; operator&gt;&gt;(std::istream&amp; in, MyClass&amp; mc)
{
    return in &gt;&gt; mc.i;
}

int main()
{
    MyClass mc(7);
    std::cout &lt;&lt; mc &lt;&lt; '\n';
    std::istringstream(&quot;100&quot;) &gt;&gt; mc;
    std::cout &lt;&lt; mc &lt;&lt; '\n';
}
|output=
7
100
}}

===References===
{{ref std c++11}}
{{ref std | section=11.3 | title=Friends | id=class.friend}}
{{ref std | section=14.5.4 | title=Friends | id=temp.friend}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=11.3 | title=Friends | id=class.friend}}
{{ref std | section=14.5.3 | title=Friends | id=temp.friend}}
{{ref std end}}

===See Also===
{{dsc begin}}
{{dsc | [[cpp/language/class | Class declaration ]] }}
{{dsc | [[cpp/language/access | Access specifiers ]] }}
{{dsc end}}

[[de:cpp/language/friend]]
[[es:cpp/language/friend]]
[[fr:cpp/language/friend]]
[[it:cpp/language/friend]]
[[ja:cpp/language/friend]]
[[pt:cpp/language/friend]]
[[ru:cpp/language/friend]]
[[zh:cpp/language/friend]]</text>
      <sha1>2n253nu7amn9dkt0mouoccsdvpsrh33</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/function</title>
    <ns>0</ns>
    <id>3127</id>
    <revision>
      <id>91997</id>
      <parentid>91755</parentid>
      <timestamp>2017-04-01T05:39:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="21997">{{title|Declaring functions}}
{{cpp/language/functions/navbar}}

A function declaration introduces the function name and its type. A function definition associates the function name/type with the function body. 

===Function declaration===
Function declarations may appear in any scope. A function declaration at class scope introduces a class member function (unless the friend specifier is used), see {{rlp|member_functions|member functions}} and {{rlp|friend|friend functions}} for details.

The type of the function being declared is composed from the ''return type'' (provided by the {{spar|decl-specifier-seq}} of the {{rlp|declarations|declaration syntax}}) and the  function {{spar|declarator}}

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|noptr-declarator}} {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} {{spar|cv}}{{mark optional}} {{spar|ref}}{{mark optional}} {{spar|except}}{{mark optional}}  {{spar|attr}}{{mark optional}} {{spar|requires}}{{mark since concepts_ts}}
}}
{{sdsc|num=2|notes={{mark since c++11}}|1=
{{spar|noptr-declarator}} {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} {{spar|cv}}{{mark optional}} {{spar|ref}}{{mark optional}} {{spar|except}}{{mark optional}}  {{spar|attr}}{{mark optional}} {{ttb|-&gt;}} {{spar|trailing}} {{spar|requires}}{{mark since concepts_ts}}
}}
{{sdsc end}}

(see {{rlp|declarations|Declarations}} for the other forms of the {{spar|declarator}} syntax)

@1@ Regular function declarator syntax
@2@ Trailing return type declaration: trailing return type is only allowed on the outermost function declarator. The decl-specifier-seq in this case must contain the keyword {{tt|auto}} 

{{par begin}}
{{par | {{spar|noptr-declarator}} | any valid {{spar|declarator}}, but if it begins with *, &amp;, or &amp;&amp;, it has to be surrounded by parentheses. }}
{{par | {{spar|parameter-list}} | possibly empty, comma-separated list of the function parameters (see below for details)}}
{{par | {{spar|attr}}{{mark c++11}} | optional list of {{rlp|attributes}}. These attributes are applied to the type of the function, not the function itself. The attributes for the function appear after the identifier within the declarator and are combined with the attributes that appear in the beginning of the declaration, if any. }}
{{par | {{spar|cv}} | const/volatile qualification, only allowed in non-static member function declarations}}
{{par | {{spar|ref}}{{mark c++11}} | ref-qualification, only allowed in non-static member function declarations}}
{{par | {{spar|except}} | either {{rlp|except_spec|dynamic exception specification}}{{mark until c++17}} or {{rlp|noexcept_spec|noexcept specification}}{{mark c++11}} {{rev inl|until=c++17|Note that the exception specification is not part of the function type}}}}
{{par | {{spar|trailing}}{{mark c++11}} | Trailing return type, useful if the return type depends on argument names, such as {{c|1=template &lt;class T, class U&gt; auto add(T t, U u) -&gt; decltype(t + u);}} or is complicated, such as in {{c|1=auto fpif(int)-&gt;int(*)(int)}}}}
{{par | {{spar|requires}}{{mark since concepts_ts}} | The ''requires'' clause, which declares the associated {{rlp|constraints|constraints}} for the function, which must be satisfied in order for the function to be selected by {{rlp|overload resolution}}. Note that the associated constraint is part of function signature, but not part of function type.  }}
{{par end}}

Function declarators can be mixed with other declarators, where decl-specifier-seq allows:
{{source|1=
// declares an int, an int*, a function, and a pointer to a function
int a = 1, *p = NULL, f(), (*pf)(double);
// decl-specifier-seq is int
// declarator f() declares (but doesn't define)
//                a function taking no arguments and returning int

struct S
{
    virtual int f(char) const, g(int) &amp;&amp;; // declares two non-static member functions
    virtual int f(char), x; // compile-time error: virtual (in decl-specifier-seq)
                            // is only allowed in declarations of non-static
                            // member functions
};
}}

The return type of a function cannot be a function type or an array type (but can be a pointer or reference to those).

{{rev begin}}
{{rev|since=c++11|
As with any declaration, attributes that appear before the declaration and the attributes that appear immediately after the identifier within the declarator both apply to the entity being declared or defined (in this case, to the function)
{{source|1=
[[noreturn]] void f [[noreturn]] (); // OK, both attributes apply to the function f
}}
However, the attributes that appear after the declarator (in the syntax above), apply to the type of the function, not to the function itself
{{source|1=
void f() [[noreturn]]; // Error: this attribute has no effect on a type
}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++14|
===Return type deduction===
If the ''decl-specifier-seq'' of the function declaration contains the keyword {{tt|auto}}, trailing return type may be omitted, and will be deduced by the compiler from the type of the expression used in the {{rlp|return}} statement. If the return type does not use {{tt|decltype(auto)}}, the deduction follows the rules of {{rlp|template argument deduction#Other_contexts|template argument deduction}}.
{{source|1=
int x = 1;
auto f() { return x; } // return type is int
const auto&amp; f() { return x; } // return type is const int&amp;
}}
If the return type is {{tt|decltype(auto)}}, the return type is as what would be obtained if the expression used in the return statement were wrapped in {{rlp|decltype}}.
{{source|1=
int x = 1;
decltype(auto) f() { return x; } // return type is int, same as decltype(x)
decltype(auto) f() { return(x); } // return type is int&amp;, same as decltype((x))
}}
(note: &quot;{{tt|const decltype(auto)&amp;}}&quot; is an error, {{tt|decltype(auto)}} must be used on its own)

If there are multiple return statements, they must all deduce to the same type
{{source|1=
auto f(bool val)
{
    if(val) return 123; // deduces return type int
    else    return 3.14f; // deduces return type float: error
} 
}}

If there is no return statement or if the argument of the return statement is a void expression, the declared return type must be {{mark unreviewed dr|CWG|2044}} either {{c|decltype(auto)}}, in which case the deduced return type is {{c|void}}, or (possibly cv-qualified) {{c|auto}}{{mark unreviewed dr|cwg}}&lt;!-- cwg 1877/2044 --&gt;, in which case the deduced return type is then (identically cv-qualified) {{c|void}}.
{{source|1=
auto f() {} // returns void
auto g() { return f(); } // returns void
auto* x() {} // error: cannot deduce auto* from void
}}

Once a return statement has been seen in a function, the return type deduced from that statement can be used in the rest of the function, including in other return statements.
{{source|1=
auto sum(int i)
{
    if(i == 1)
        return i; // sum’s return type is int
    else
        return sum(i - 1) + i; // OK, sum’s return type is already known
}
}}

If the return statement uses a brace-init-list, deduction is not allowed:
{{source|auto func () { return {1, 2, 3}; }  // error}}

{{rlp|virtual|Virtual functions}} cannot use return type deduction.
{{source|1=struct F
{
    virtual auto f() { return 2; } // error
};
}}

If a function uses return type deduction, it cannot be redeclared using the type that it deduces to, or another kind of return type deduction even if it deduces to the same type
{{source|1=
auto f();               // declared, not yet defined
auto f() { return 42; } // defined, return type is int
int f();                // error, cannot use the deduced type
decltype(auto) f();     // error, different kind of deduction
auto f();               // re-declared, OK

template&lt;typename T&gt;
struct A { friend T frf(T); };
auto frf(int i) { return i; } // not a friend of A&lt;int&gt;
}}

{{rlp|function template|Function templates}} other than {{rlp|cast operator|user-defined conversion functions}} can use return type deduction. The deduction takes place at instantiation even if the expression in the return statement is not {{rlp|dependent name|dependent}}. This instantiation is not in an immediate context for the purposes of {{rlp|sfinae|SFINAE}}.
{{source|1=
template&lt;class T&gt; auto f(T t) { return t; }
typedef decltype(f(1)) fint_t; // instantiates f&lt;int&gt; to deduce return type
template&lt;class T&gt; auto f(T* t) { return *t; }
void g() { int (*p)(int*) = &amp;f; } // instantiates both fs to determine return types,
                                  // chooses second template overload
}}

Specializations of function templates that use return type deduction must use the same return type placeholders
{{source|1=
template&lt;typename T&gt; auto g(T t) { return t; } // #1
template auto g(int);      // OK, return type is int
//template char g(char);   // error, no matching template

template&lt;&gt; auto g(double); // OK, forward declaration with unknown return type
template&lt;typename T&gt; T g(T t) { return t; } // OK, not equivalent to #1
template char g(char);     // OK, now there is a matching template
template auto g(float);    // still matches #1
// void h() { return g(42); } // error, ambiguous 
}}

{{rlp|function template#Explicit_instantiation|Explicit instantiation declarations}} do not themselves instantiate function templates that use return type deduction
{{source|1=
template&lt;typename T&gt; auto f(T t) { return t; }
extern template auto f(int); // does not instantiate f&lt;int&gt;
int (*p)(int) = f; // instantiates f&lt;int&gt; to determine its return type,
                   // but an explicit instantiation definition 
                   // is still required somewhere in the program
}}
}}
{{rev end}}

===Parameter list===
Parameter list determines the arguments that can be specified when the function is called. It is a comma-separated list of ''parameter declarations'', each of which has the following syntax

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}} {{spar|declarator}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}} {{spar|declarator}} {{ttb|{{=}} }} {{spar|initializer}}
}}
{{sdsc|num=3|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}} {{spar|abstract-declarator}}{{mark optional}}
}}
{{sdsc|num=4|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}} {{spar|abstract-declarator}}{{mark optional}} {{ttb|{{=}} }} {{spar|initializer}}
}}
{{sdsc|num=5|1=
{{ttb|...}}
}}
{{sdsc|num=6|1=
{{ttb|void}}
}}
{{sdsc end}}

@1@ Declares a named (formal) parameter. For the meanings of {{spar|decl-specifier-seq}} and {{spar|declarator}}, see {{rlp|declarations}}.
{{source|
int f(int a, int *p, int (*(*x)(double))[3]);
}}
@2@ Declares a named (formal) parameter with a {{rlp|default_arguments|default value}}.
{{source|1=
int f(int a = 7, int *p = nullptr, int (*(*x)(double))[3] = nullptr);
}}
@3@ Declares an unnamed parameter
{{source|
int f(int, int *, int (*(*)(double))[3]);
}}
@4@ Declares an unnamed parameter with a {{rlp|default_arguments|default value}}
{{source|1=
int f(int = 7, int * = nullptr, int (*(*)(double))[3] = nullptr);
}}
@5@ Declares a {{rlp|variadic_arguments|variadic function}}, may only appear as the last parameter in a parameter list.
{{source|
int printf(const char* fmt, ...);
}}
@6@ Indicates that the function takes no parameters, it is the exact synonym for an empty parameter list: {{c|int f(void);}} and {{c|int f();}} declare the same function. Note that the type {{tt|void}} (possibly cv-qualified) cannot be used in a parameter list otherwise: {{c|int f(void, int);}}  and {{c|int f(const void);}} are errors (although derived types, such as {{tt|void*}} can be used). {{rev inl|since=c++11|In a template, only non-dependent void type can be used (a function taking a single parameter of type {{tt|T}} does not become a no-parameter function if instantiated with {{tt|T {{=}} void}})}}

Although {{spar|decl-specifier-seq}} implies there can exist {{rlp|declarations#Specifiers|specifiers}} other than type specifiers, the only other specifier allowed is {{c|register}} {{rev inl|until=c++11|as well as {{c|auto}} }}, and it has virtually no effect.

{{rev begin}}
{{rev|since=concepts_ts|
If any of the function parameters uses a ''placeholder'' (either {{tt|auto}} or a {{rlp|constraints|constrained type}}), the function declaration is instead an abbreviated {{rlp|function template}} declaration:
{{source|1=
void f(auto (auto::*)(auto)); // #1
template&lt;typename T, typename U, typename V&gt; void f(T (U::*)(V)); // same as #1

void g1(const C1*, C2&amp;); // #2 (assuming C1 and C2 are concepts
template&lt;C1 T, C2 U&gt; void g1(const T*, U&amp;); // same as #2
}}
}}
{{rev end}}

Parameter names declared in function declarations are usually for only self-documenting purposes. &lt;!--they are sometimes significant when trailing return type is used--&gt;They are used (but remain optional) in function definitions.

The type of each function parameter in the parameter list is determined according to the following rules:
@1@ First, {{spar|decl-specifier-seq}} and the declarator are combined as in any {{rlp|declarations|declaration}} to determine the type.
@2@ If the type is &quot;array of T&quot; or &quot;array of unknown bound of T&quot;, it is replaced by the type &quot;pointer to T&quot;
@3@ If the type is a function type F, it is replaced by the type &quot;pointer to F&quot;
@4@ Top-level cv-qualifiers are dropped from the parameter type (This adjustment&lt;!--unlike the above three rules--&gt; only affects the function type, but doesn't modify the property of the parameter: {{c|int f(const int p, decltype(p)*);}} and {{c|int f(int, const int*);}} declare the same function){{mark unreviewed dr|CWG|1130}}

Because of these rules, the following function declarations declare exactly the same function:
{{source|
int f(char s[3]);
int f(char[]);
int f(char* s);
int f(char* const);
int f(char* volatile s);
}}
The following declarations also declare exactly the same function
{{source|
int f(int());
int f(int (*g)());
}}

{{rev begin}}
{{rev|until=c++14|Parameter type cannot be a type that includes a reference or a pointer to array of unknown bound, including a multi-level pointers/arrays of such types, or a pointer to functions whose parameters are such types}}
{{rev end}}

The comma before the ellipsis parameter that indicates {{rlp|variadic arguments}} is optional, even if it follows the ellipsis that indicates a {{rlp|parameter pack}} expansion, so the following function templates are exactly the same:
{{source|
template&lt;typename ...Args&gt; void f(Args..., ...);
template&lt;typename ...Args&gt; void f(Args... ...);
template&lt;typename ...Args&gt; void f(Args......);
}}
An example of when such declaration is used is the implementation of {{c|std::is_function}}

===Function definition===

A non-member function definition may appear at namespace scope only (there are no nested functions). A {{rlp|member functions|member function}} definition may also appear in the body of a {{rlp|class|class definition}}. They have the following syntax:

{{sdsc begin}}
{{sdsc|1=
{{spar|attr}}{{mark optional}} {{spar|decl-specifier-seq}}{{mark optional}} {{spar|declarator}} {{spar|virt-specifier-seq}}{{mark optional}} {{spar|function-body}}
}}
{{sdsc end}}
where {{spar|function-body}} is one of the following
{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|ctor-initializer}}{{mark optional}} {{spar|compound-statement}} }}
{{sdsc|num=2|1=
{{spar|function-try-block}} }}
{{sdsc|num=3|notes={{mark since c++11}}|1=
{{ttb|{{=}}}} {{ttb|delete}} {{ttb|;}} }}&lt;!--Semicolon is a part of the grammar--&gt;
{{sdsc|num=4|notes={{mark since c++11}}|1=
{{ttb|{{=}}}} {{ttb|default}} {{ttb|;}} }}
{{sdsc end}}
@1@ regular function body
@2@ {{rlp|function-try-block}} (which is a regular function body wrapped in a try/catch block)
@3@ explicitly deleted function definition
@4@ explicitly defaulted function definition, only allowed for {{rlp|member_functions#Special_member_functions|special member functions}}
{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | optional list of {{rlp|attributes}}. These attributes are combined with the attributes after the identifier in the {{spar|declarator}} (see top of this page), if any. }}
{{par | {{spar|decl-specifier-seq}} | the return type with specifiers, as in the {{rlp|declarations|declaration grammar}}}}
{{par | {{spar|declarator}} | function declarator, same as in the function declaration grammar above}}
{{par | {{spar|virt-specifier-seq}}{{mark c++11}} | {{rlp|override}}, {{rlp|final}}, or their combination in any order (only allowed for member functions)}}
{{par | {{spar|ctor-initializer}} | {{rlp|initializer_list|member initializer list}}, only allowed in constructors}}
{{par | {{spar|compound-statement}} | the brace-enclosed {{rlp|statements#Compound_statements|sequence of statements}} that constututes the body of a function}}
{{par end}}

{{source|1=
int max(int a, int b, int c)
{
    int m = (a &gt; b)? a : b;
    return (m &gt; c)? m : c;
}
// decl-specifier-seq is &quot;int&quot;
// declarator is &quot;max(int a, int b, int c)&quot;
// body is { ... }
}}

The function body is a {{rlp|statements#Compound_statements|compound statement}} (sequence of zero or more statements surrounded by a pair of curly braces), which is executed when the function call is made.

The parameter types, as well as the return type of a function cannot be {{rlp|incomplete type|incomplete}} {{rlp|class|class types}}, {{rev inl|since=c++11|except for deleted functions}}. The completeness check is made in the context of the function ''body'', which allows {{rlp|member functions}} to return the class in which they are defined (or its enclosing class), even if it's incomplete at the point of definition (it is complete in the function body).

The parameters declared in the {{spar|declarator}} of a function definition are {{rlp|scope|in scope}} within the body. If a parameter is not used in the function body, it does not need to be named (it's sufficient to use an abstract declarator)
{{source|1=
void print(int a, int) // second parameter is not used
{
    std::printf(&quot;a = %d\n&quot;,a);
}
}}
Even though top-level {{rlp|cv|cv-qualifiers}} on the parameters are discarded in function declarations, they modify the type of the parameter as visible in the body of a function:
{{source|
void f(const int n) // declares function of type void(int)
{
    // but in the body, the type of n is const int
}
}}

{{rev begin}}
{{rev|since=c++11|
===Deleted functions===
If, instead of a function body, the special syntax {{ttb|{{=}} delete ;}} is used, the function is defined as ''deleted''. Any use of a deleted function is ill-formed (the program will not compile). This includes calls, both explicit (with a function call operator) and implicit (a call to deleted overloaded operator, special member function, allocation function etc), constructing a pointer or pointer-to-member to a deleted function, and even the use of a deleted function in an unevaluated expression. However, implicit {{rlp|definition#ODR-use|ODR-use}} of a non-pure virtual member function that happens to be deleted is allowed.

If the function is overloaded, {{rlp|overload resolution}} takes place first, and the program is only ill-formed if the deleted function was selected.

{{source|1=
struct sometype
{
    void* operator new(std::size_t) = delete;
    void* operator new[](std::size_t) = delete;
};
sometype* p = new sometype; // error, attempts to call deleted sometype::operator new
}}

The deleted definition of a function must be the first declaration in a translation unit: a previously-declared function cannot be redeclared as deleted:
{{source|1=
struct sometype { sometype(); };
sometype::sometype() = delete; // error: must be deleted on the first declaration
}}

===__func__===
Within the function body, the function-local predefined variable {{lc|__func__}} is defined as if by
{{source|1=static const char __func__[] = &quot;function-name&quot;;}}
This variable has block scope and static storage duration:
{{source|1=
struct S
{
    S(): s(__func__) {} // OK: initializer-list is part of function body
    const char* s;
};
void f(const char* s = __func__); // error: parameter-list is part of declarator
}}
}}
{{rev end}}

===Example 1: non-member functions===
{{todo|move/cleanup}}
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;

// declaration in namespace(file) scope
// (the definition is provided later)
int f1();

// simple function with a default argument, returning nothing
void f0(const std::string&amp; arg = &quot;world&quot;)
{
    std::cout &lt;&lt; &quot;Hello, &quot; &lt;&lt; arg &lt;&lt; '\n';
}

// function returning a pointer to f0
auto fp11() -&gt; void(*)(const std::string&amp;)
{
    return f0;
}

// function returning a pointer to f0, pre-C++11 style
void (*fp03())(const std::string&amp;)
{
    return f0;
}

int main()
{
    f0();
    fp11()(&quot;test&quot;);
    fp03()(&quot;again&quot;);
    int f2(std::string); // declaration in function scope
    std::cout &lt;&lt; f2(&quot;bad12&quot;) &lt;&lt; '\n';
}

// simple non-member function returning int
int f1()
{
    return 42;
}

// function with an exception specification and a function try block
int f2(std::string str) noexcept try
{ 
    return std::stoi(str);
}
catch(const std::exception&amp; e)
{
    std::cerr &lt;&lt; &quot;stoi() failed!\n&quot;;
    return 0;
}
 | output=
Hello, world
Hello, test
Hello, again
stoi() failed!
0
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1394|std=c++11|before=deleted function could not return an incomplete type|after=incomplete return type allowed}}
{{dr list item|wg=cwg|dr=577|std=c++11|before=dependent type {{c|void}} could be used to declare a no-parameter function|after=only non-dependent void is allowed}}
{{dr list item|wg=cwg|dr=393|std=c++14|before=types that include pointers/references to array of unknown bound can't be parameters|after=such types are allowed}}
{{dr list end}}

[[de:cpp/language/function]]
[[es:cpp/language/function]]
[[fr:cpp/language/function]]
[[it:cpp/language/function]]
[[ja:cpp/language/function]]
[[pt:cpp/language/function]]
[[ru:cpp/language/function]]
[[zh:cpp/language/function]]</text>
      <sha1>8f70z6sk3q5oe4xdbr0ukwjrfuyygho</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/function template</title>
    <ns>0</ns>
    <id>5067</id>
    <revision>
      <id>91874</id>
      <parentid>89252</parentid>
      <timestamp>2017-03-31T20:00:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="37561">{{title|Function template}}
{{cpp/language/templates/navbar}}

A function template defines a family of functions.

===Syntax===
{{sdsc begin}}
{{sdsc|num=1|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|function-declaration}} }}
{{sdsc|num=2|notes={{mark until c++11}} | {{ttb|export}} {{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|function-declaration}} }}
{{sdsc|num=3|notes={{mark since concepts_ts}} | {{spar|function-declaration-with-placeholders}}  }}
{{sdsc end}}

===Explanation===
{{par begin}}
{{par | {{spar|function-declaration}} | a {{rlp|function|function declaration}}. The function name declared become a template name. }}
{{par | {{spar|function-declaration-with-placeholders}} | a {{rlp|function|function declaration}} where the type of at least one parameter uses the placeholder {{rlp|auto}} or a {{rlp|constraints|constrained type}} specifier: the template parameter list will have one invented parameter for each placeholder.}}
{{par | {{spar|parameter-list}} | a non-empty comma-separated list of the {{rlp|template parameters}}, each of which is either [[cpp/language/template_parameters#Non-type_template_parameter|non-type parameter]], a [[cpp/language/template_parameters#Type_template_parameter|type parameter]], a [[cpp/language/template_parameters#Template_template_parameter|template parameter]], or a [[cpp/language/parameter_pack|parameter pack]] of any of those.}}
{{par end}}

{{rev begin}}
{{rev | until=c++11 | {{tt|export}} was an optional modifier which declared the template as ''exported'' (when used with a class template, it declared all of its members exported as well). Files that instantiated exported templates did not need to include their definitions: the declaration was sufficient. Implementations of {{tt|export}} were rare and disagreed with each other on details.
}}
{{rev end}}

{{rev begin}}
{{rev | since=concepts_ts|
When placeholders (either {{tt|auto}} or {{rlp|constraints|constrained}} placeholders) appear in the parameter list of a function declaration or of a function template declaration, one invented template parameter for each placeholder is appended to the template parameter list
{{source|1=
void f(auto (auto::*)(auto)); // #1
template&lt;typename T, typename U, typename V&gt; void f(T (U::*)(V)); // same as #1

template&lt;int N&gt; void f(Array&lt;auto, N&gt;*); // #2 (assuming Array is a class template)
template&lt;int N, typename T&gt; void f(Array&lt;T, N&gt;*); // same as #2

void g1(const C1*, C2&amp;); // #3 (assuming C1 and C2 are concepts)
template&lt;C1 T, C2 U&gt; void g1(const T*, U&amp;); // same as #3
}}
}}
{{rev end}}
===Function template instantiation===
A function template by itself is not a type, or a function, or any other entity. No code is generated from a source file that contains only template definitions. In order for any code to appear, a template must be instantiated: the template arguments must be determined so that the compiler can generate an actual function (or class, from a class template).

====Explicit instantiation====
{{sdsc begin}}
{{sdsc|num=1|{{ttb|template}} {{spar|return-type}} {{spar|name}} {{ttb|&lt;}}  {{spar|argument-list}} {{ttb|&gt;}} {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} {{ttb|;}}  }}
{{sdsc|num=2|{{ttb|template}} {{spar|return-type}} {{spar|name}} {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} {{ttb|;}}  }}
{{sdsc|num=3|{{ttb|extern}} {{ttb|template}} {{spar|return-type}} {{spar|name}} {{ttb|&lt;}} {{spar|argument-list}} {{ttb|&gt;}} {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} {{ttb|;}} | notes={{mark since c++11}} }}
{{sdsc|num=4|{{ttb|extern}} {{ttb|template}} {{spar|return-type}} {{spar|name}} {{ttb|(}} {{spar|parameter-list}} {{ttb|)}} {{ttb|;}} | notes={{mark since c++11}} }}
{{sdsc end}}
@1@ Explicit instantiation definition (without {{rlp|template argument deduction}} if every non-default template parameter is explicitly specified)
@2@ Explicit instantiation definition with template argument deduction for all parameters
@3@ Explicit instantiation declaration (without template argument deduction if every non-default template parameter is explicitly specified)
@4@ Explicit instantiation declaration with template argument deduction for all parameters

An explicit instantiation definition forces instantiation of the function or member function they refer to. It may appear in the program anywhere after the template definition, and for a given argument-list, is only allowed to appear once in the program.

An explicit instantiation declaration (an extern template) prevents implicit instantiations: the code that would otherwise cause an implicit instantiation has to use the explicit instantiation definition provided somewhere else in the program.


A trailing template-argument can be left unspecified in an explicit instantiation of a function template specialization or of a member function template specialization if it can be {{rlp|template argument deduction|deduced}} from the function parameter
{{source|1=
template&lt;typename T&gt;
void f(T s)
{
    std::cout &lt;&lt; s &lt;&lt; '\n';
}

template void f&lt;double&gt;(double); // instantiates f&lt;double&gt;(double)
template void f&lt;&gt;(char); // instantiates f&lt;char&gt;(char), template argument deduced
template void f(int); // instantiates f&lt;int&gt;(int), template argument deduced
}}

Explicit instantiation of a function template or of a member function of a class template cannot use {{tt|inline}} or {{tt|constexpr}}. If the declaration of the explicit instantiation names an implicitly-declared special member function, the program is ill-formed.

Explicit instantiation declarations do not suppress the implicit instantiation of {{rlp|inline}} functions, {{rlp|auto}}-declarations, references, and class template specializations. (thus, when the inline function that is a subject of explicit instantiation declaration is ODR-used, it is implicitly instantiated for inlining, but its out-of-line copy is not generated in this TU)

Explicit instantiation definition of a function template with {{rlp|default arguments}} is not a use of the arguments, and does not attempt to initialize them:
{{source|1=
char* p = 0;
template&lt;class T&gt; T g(T x = &amp;p) { return x; }
template int g&lt;int&gt;(int);   // OK even though &amp;p isn’t an int.
}}

====Implicit instantiation====
When code refers to a function in context that requires the function definition to exist, and this particular function has not been explicitly instantiated, implicit instantiation occurs. The list of template arguments does not have to be supplied if it can be {{rlp|template_argument_deduction|deduced}} from context

{{example
|code=
#include &lt;iostream&gt;

template&lt;typename T&gt;
void f(T s)
{
    std::cout &lt;&lt; s &lt;&lt; '\n';
}

int main()
{
    f&lt;double&gt;(1); // instantiates and calls f&lt;double&gt;(double)
    f&lt;&gt;('a'); // instantiates and calls f&lt;char&gt;(char)
    f(7); // instantiates and calls f&lt;int&gt;(int)
    void (*ptr)(std::string) = f; // instantiates f&lt;string&gt;(string)
}
}}

Note: omitting {{tt|&lt;&gt;}} entirely allows {{rlp|overload resolution}} to examine both template and non-template overloads.

===Template argument deduction===
In order to instantiate a {{rlp|function template}}, every template argument must be known, but not every template argument has to be specified. When possible, the compiler will deduce the missing template arguments from the function arguments. This occurs when a function call is attempted and when an address of a function template is taken.

{{source|1=
template&lt;typename To, typename From&gt; To convert(From f);

void g(double d) 
{
    int i = convert&lt;int&gt;(d); // calls convert&lt;int,double&gt;(double)
    char c = convert&lt;char&gt;(d); // calls convert&lt;char,double&gt;(double)
    int(*ptr)(float) = convert; // instantiates convert&lt;int, float&gt;(float)
}
}}

This mechanism makes it possible to use template operators, since there is no syntax to specify template arguments for an operator other than by re-writing it as a function call expression.

{{source|1=
#include &lt;iostream&gt;
int main() 
{
    std::cout &lt;&lt; &quot;Hello, world&quot; &lt;&lt; std::endl;
    // operator&lt;&lt; is looked up via ADL as std::operator&lt;&lt;,
    // then deduced to operator&lt;&lt;&lt;char, std::char_traits&lt;char&gt;&gt; both times
    // std::endl is deduced to &amp;std::endl&lt;char, std::char_traits&lt;char&gt;&gt;
}
}}

Template argument deduction takes place after the function template {{rlp|lookup|name lookup}} (which may involve {{rlp|adl|argument-dependent lookup}}) and before {{rlp|overload_resolution|overload resolution}}.

See {{rlp|template argument deduction}} for details.

===Explicit template arguments===
Template arguments of a function template may be obtained from
* template argument deduction
* default template arguments
* specified explicitly, which can be done in the following contexts:
:* in a function call expression
:* when an address of a function is taken
:* when a reference to function is initialized 
:* when a pointer to member function is formed
:* in an explicit specialization
:* in an explicit instantiation
:* in a friend declaration

There is no way to explicitly specify template arguments to {{rlp|operators|overloaded operators}}, {{rlp|cast operator|conversion functions}}, and constructors, because they are called without the use of the function name.

The specified template arguments must match the template parameters in kind (i.e., type for type, non-type for non-type, and template for template). There cannot be more arguments than there are parameters (unless one parameter is a parameter pack, in which case there has to be an argument for each non-pack parameter)

The specified non-type arguments must either match the types of the corresponding non-type template parameters, or be {{rlp|template_parameters#Template_non-type_arguments|convertible to them}}.

The function parameters that do not participate in template argument deduction (e.g. if the corresponding template arguments are explicitly specified) are subject to implicit conversions to the type of the corresponding function parameter (as in the usual {{rlp|overload resolution}}).

A template parameter pack that is explicitly specified may be extended by template argument deduction if there are additional arguments:
{{source|1=
template&lt;class ... Types&gt; void f(Types ... values);
void g() {
  f&lt;int*, float*&gt;(0, 0, 0); // Types = {int*, float*, int}
}
}}

===Template argument substitution===
When all template arguments have been specified, deduced or obtained from default template arguments, every uses of a template parameter in the function parameter list is replaced with the corresponding template arguments.

Substitution failure (that is, failure to replace template parameters with the deduced or provided template arguments) of a function template removes the function template from the {{rlp|overload resolution|overload set}}. This allows a number of ways to manipulate overload sets using template metaprogramming: see {{rlp|sfinae|SFINAE}} for details.

After substitution, all function parameters of array and function type are adjusted to pointers and all top-level cv-qualifiers are dropped from function parameters (as in a regular {{rlp|function#Function_declaration|function declaration}}).

The removal of the top-level cv-qualifiers does not affect the type of the parameter as it appears within the function:
{{source|1=
template &lt;class T&gt; void f(T t);
template &lt;class X&gt; void g(const X x);
template &lt;class Z&gt; void h(Z z, Z* zp);

// two different functions with the same type, but 
// within the function, t has different cv qualifications
f&lt;int&gt;(1);       // function type is void(int), t is int
f&lt;const int&gt;(1); // function type is void(int), t is const int

// two different functions with the same type and the same x
// (pointers to these two functions are not equal,
//  and function-local statics would have different addresses)
g&lt;int&gt;(1);       // function type is void(int), x is const int
g&lt;const int&gt;(1); // function type is void(int), x is const int

// only top-level cv-qualifiers are dropped:
h&lt;const int&gt;(1, NULL); // function type is void(int, const int*) 
                       // z is const int, zp is const int* 
}}

===Function template overloading===
Function templates and non-template functions may be overloaded.

A non-template function is always distinct from a template specialization with the same type. Specializations of different function templates are always distinct from each other even if they have the same type. Two function templates with the same return type and the same parameter list are distinct and can be distinguished with explicit template argument list.

When an expression that uses type or non-type template parameters appears in the function parameter list or in the return type, that expression remains a part of the function template signature for the purpose of overloading:
{{source|1=
template&lt;int I, int J&gt; A&lt;I+J&gt; f(A&lt;I&gt;, A&lt;J&gt;); // overload #1
template&lt;int K, int L&gt; A&lt;K+L&gt; f(A&lt;K&gt;, A&lt;L&gt;); // same as #1
template&lt;int I, int J&gt; A&lt;I-J&gt; f(A&lt;I&gt;, A&lt;J&gt;); // overload #2
}}

Two expressions involving template parameters are called ''equivalent'' if two function definitions that contain these expressions would be the same under {{rlp|definition#One_Definition_Rule|ODR rules}}, that is, the two expressions contain the same sequence of tokens whose names are resolved to same entities via name lookup, except template parameters may be differently named.
{{source|1=
template &lt;int I, int J&gt; void f(A&lt;I+J&gt;);  // template overload #1
template &lt;int K, int L&gt; void f(A&lt;K+L&gt;);  // equivalent to #1
}}

{{rev begin}}
{{rev|since=c++14|
When determining if two {{rlp|dependent name|dependent expressions}} are equivalent, only the dependent names involved are considered, not the results of name lookup. If multiple declarations of the same template differ in the result of name lookup, the first such declaration is used:
{{source|1=
template &lt;class T&gt; decltype(g(T())) h(); // decltype(g(T())) is a dependent type
int g(int);
template &lt;class T&gt; decltype(g(T())) h() { // redeclaration of h() uses earlier lookup
    return g(T());                     // ...although the lookup here does find g(int)
}
int i = h&lt;int&gt;();   // template argument substitution fails; g(int)
                    // was not in scope at the first declaration of h()
}}
}}
{{rev end}}

Two function templates are considered ''equivalent'' if
* they are declared in the same scope
* they have the same name
* they have identical template parameter lists
* the expressions involving template parameters in their return types and parameter lists are ''equivalent''

Two expressions involving template parameters are called ''functionally equivalent'' if they are not ''equivalent'', but for any given set of template arguments, the evaluation of the two expressions results in the same value.

Two function templates are considered ''functionally equivalent'' if they are ''equivalent'', except that one or more expressions that involve template  parameters in their return types and parameter lists are ''functionally equivalent''

If a program contains declarations of function templates that are ''functionally equivalent'' but not ''equivalent'', the program is ill-formed; no diagnostic is required.
{{source|1=
// equivalent
template &lt;int I&gt; void f(A&lt;I&gt;, A&lt;I+10&gt;); // overload #1
template &lt;int I&gt; void f(A&lt;I&gt;, A&lt;I+10&gt;); // redeclaration of overload #1

// not equivalent
template &lt;int I&gt; void f(A&lt;I&gt;, A&lt;I+10&gt;); // overload #1
template &lt;int I&gt; void f(A&lt;I&gt;, A&lt;I+11&gt;); // overload #2

// functionally-equivalent but not equivalent
// This program is ill-formed, no diagnostic required
template &lt;int I&gt; void f(A&lt;I&gt;, A&lt;I+10&gt;); // overload #1
template &lt;int I&gt; void f(A&lt;I&gt;, A&lt;I+1+2+3+4&gt;); // functionally equivalent
}}

When the same function template specialization matches more than one overloaded function template (this often results from {{rlp|template argument deduction}}), ''partial ordering of overloaded function templates'' is performed to select the best match. 

Specifically, partial ordering takes place in the following situations:
@1@ {{rlp|overload resolution}} for a call to a function template specialization
{{source|1=
template&lt;class X&gt; void f(X a);
template&lt;class X&gt; void f(X* a);
int* p;
f(p);
}}
@2@ when the {{rlp|overloaded address|address of a function template specialization}} is taken
{{source|1=
template&lt;class X&gt; void f(X a);
template&lt;class X&gt; void f(X* a);
void (*p)(int*) = &amp;f;
}}
@3@ when a [[cpp/memory/new/operator_delete|placement operator delete]] that is a function template specialization is selected to match a placement operator new
{{todo|mini-example}}
@4@ when a {{rlp|friend#Template_friends|friend function declaration}}, an {{rlp|function_template#Explicit_instantiation|explicit instantiation}}, or an {{rlp|template specialization|explicit specialization}} refers to a function template specialization
{{source|1=
template&lt;class X&gt; void f(X a);  // first template f
template&lt;class X&gt; void f(X* a); // second template f
template&lt;&gt; void f&lt;&gt;(int *a) {} // explicit specialization
 // template argument deduction comes up with two candidates:
 // foo&lt;int*&gt;(int*) and f&lt;int&gt;(int*)
 // partial ordering selects f&lt;int&gt;(int*) as more specialized
}}

Informally &quot;A is more specialized than B&quot; means &quot;A accepts fewer types than B&quot;.

Formally, to determine which of any two function templates is more specialized, the partial ordering process first transforms one of the two templates as follows:
* For each type, non-type, and template parameter, including parameter packs, a unique fictitious type, value, or template is generated and substituted into function type of the template
* If only one of the two function templates being compared is a non-static member of some class {{tt|A}}, a new first parameter is inserted into its parameter list, whose type is {{tt|cv A&amp;&amp;}} if the member function template is &amp;&amp;-qualified and {{tt|cv A&amp;}} otherwise (cv is the cv-qualification of the member function template) -- this helps the ordering of operators, which are looked up both as member and as non-member functions:
{{source|1=
struct A {};
template&lt;class T&gt; struct B {
  template&lt;class R&gt; int operator*(R&amp;);                     // #1
};
template&lt;class T, class R&gt; int operator*(T&amp;, R&amp;);          // #2
int main() {
  A a;
  B&lt;A&gt; b;
  b * a; // template argument deduction for int B&lt;A&gt;::operator*(R&amp;) gives R=A 
         //                             for int operator*(T&amp;, R&amp;), T=B&lt;A&gt;, R=A
// For the purpose of partial ordering, the member template B&lt;A&gt;::operator*
// is transformed into template&lt;class R&gt; int operator*(B&lt;A&gt;&amp;, R&amp;);
// partial ordering between 
//     int operator*(   T&amp;, R&amp;)  T=B&lt;A&gt;, R=A
// and int operator*(B&lt;A&gt;&amp;, R&amp;)  R=A 
// selects int operator*(B&lt;A&gt;&amp;, A&amp;) as more specialized
}}

After one of the two templates was transformed as described above, {{rlp|template argument deduction}} is executed using the transformed template as the argument template and the original template type of the other template as the parameter template. The process is then repeated using the second template (after transformations) as the argument and the first template in its original form as the parameter.

The types used to determine the order depend on the context:
* in the context of a function call, the types are those function parameter types for which the function call has arguments (default function arguments, parameter packs, and ellipsis parameters are not considered -- see examples below)
* in the context of a call to a user-defined conversion function, the return types of the conversion function templates are used
* in other contexts, the function template type is used

Each type from the list above from the parameter template is deduced. Before deduction begins, each parameter {{ttb|P}} of the parameter template and the corresponding argument {{ttb|A}} of the argument template is adjusted as follows:

* If both {{ttb|P}} and {{ttb|A}} are reference types before, determine which is more cv-qualified (in all other cases, cv-qualificiations are ignored for partial ordering purposes)
* If {{ttb|P}} is a reference type, it is replaced by the type referred to
* If {{ttb|A}} is a reference type, it is replaced by the type referred to
* If {{ttb|P}} is cv-qualified, {{ttb|P}} is replaced with cv-unqualified version of itself
* If {{ttb|A}} is cv-qualified, {{ttb|A}} is replaced with cv-unqualified version of itself

After these adjustments, deduction of {{ttb|P}} from {{ttb|A}} is done following {{rlp|template argument deduction#Deduction_from_a_type|template argument deduction from a type}}.

If P is a function parameter pack, the type A of each remaining parameter type of the argument template is compared with the type P of the declarator-id of the function parameter pack. Each comparison deduces template arguments for subsequent positions in the template parameter packs expanded by the function parameter pack.

If A was transformed from a function parameter pack, {{rev inl|until=c++14|deduction fails.}}{{rev inl|since=c++14|{{mark unreviewed dr|CWG|1395}}it is compared with each remaining parameter type of the parameter template.}}

If the argument {{ttb|A}} of the transformed template-1 can be used to deduce the corresponding parameter {{ttb|P}} of template-2, but not vice versa, then this {{ttb|A}} is more specialized than {{ttb|P}} with regards to the type(s) that are deduced by this P/A pair.

If deduction succeeds in both directions, and the original {{ttb|P}} and {{ttb|A}} were reference types, then additional tests are made:
* If {{ttb|A}} was lvalue reference and {{ttb|P}} was rvalue reference, A is considered to be more specialized than P
* If {{ttb|A}} was more cv-qualified than {{ttb|P}}, A is considered to be more specialized than P

In all other cases, neither template is more specialized than the other with regards to the type(s) deduced by this P/A pair.

After considering every P and A in both directions, if, for each type that was considered,
* template-1 is at least as specialized as template-2 for all types
* template-1 is more specialized than template-2 for some types
* template-2 is not more specialized than template-1 for any types OR is not at least as specialized for any types

Then template-1 is more specialized than template-2. If the conditions above are true after switching template order, than template-2 is more specialized than template-1. Otherwise, neither template is more specialized than the other.

{{mark unreviewed dr|CWG|1395}}
In case of a tie, if one function template has a trailing parameter pack and the other does not, the one with the omitted parameter is considered to be more specialized than the one with the empty parameter pack.

If, after considering all pairs of overloaded templates, there is one that is unambiguously more specialized than all others, that template's specialization is selected, otherwise compilation fails.

In the following examples, the fictitious arguments will be called U1, U2
{{source|1=
template&lt;class T&gt; void f(T);        // template #1
template&lt;class T&gt; void f(T*);       // template #2
template&lt;class T&gt; void f(const T*); // template #3
void m() {
  const int* p;
  f(p); // overload resolution picks: #1: void f(T ) [T = const int *]
        //                            #2: void f(T*) [T = const int]
        //                            #3: void f(const T *) [T = int]
// partial ordering
// #1 from transformed #2: void(T) from void(U1*): P=T A=U1*: deduction ok: T=U1*
// #2 from transformed #1: void(T*) from void(U1): P=T* A=U1: deduction fails
// #2 is more specialized than #1 with regards to T
// #1 from transformed #3: void(T) from void(const U1*): P=T, A=const U1*: ok
// #3 from transformed #1: void(const T*) from void(U1): P=const T*, A=U1: fails
// #3 is more specialized than #1 with regards to T
// #2 from transformed #3: void(T*) from void(const U1*): P=T* A=const U1*: ok
// #3 from transformed #2: void(const T*) from void(U1*): P=const T* A=U1*: fails
// #3 is more specialized than #2 with regards to T
// result: #3 is selected
// in other words, f(const T*) is more specialized than f(T) or f(T*)
}
}}

{{source|1=
template&lt;class T&gt; void f(T, T*);    // #1
template&lt;class T&gt; void f(T, int*);  // #2
void m(int* p) {
    f(0, p); // deduction for #1: void f(T, T*) [T = int]
             // deduction for #2: void f(T, int*) [T = int]
 // partial ordering:
 // #1 from #2: void(T,T*) from void(U1,int*): P1=T, A1=U1: T=U1
 //                                            P2=T*, A2=int*: T=int: fails
 // #2 from #1: void(T,int*) from void(U1,U2*) : P1=T A1=U1: T=U1
 //                                              P2=int* A2=U2*: fails
 // neither is more specialized w.r.t T, the call is ambiguous
}
}}

{{source|1=
template&lt;class T&gt; void g(T);  // template #1
template&lt;class T&gt; void g(T&amp;); // template #2
void m() {
  float x;
  g(x); // deduction from #1: void g(T ) [T = float]
        // deduction from #2: void g(T&amp;) [T = float]
// partial ordering
// #1 from #2: void(T) from void(U1&amp;): P=T, A=U1 (after adjustment), ok
// #2 from #1: void(T&amp;) from void(U1): P=T (after adjustment), A=U1: ok
// neither is more specialized w.r.t T, the call is ambiguous
}
}}

{{source|1=
template&lt;class T&gt; struct A { A(); };

template&lt;class T&gt; void h(const T&amp;); // #1
template&lt;class T&gt; void h(A&lt;T&gt;&amp;);    // #2
void m() {
  A&lt;int&gt; z;
  h(z);  // deduction from #1: void h(const T &amp;) [T = A&lt;int&gt;]
         // deduction from #2: void h(A&lt;T&gt; &amp;) [T = int]
 // partial ordering
 // #1 from #2: void(const T&amp;) from void(A&lt;U1&gt;&amp;): P=T A=A&lt;U1&gt;: ok T=A&lt;U1&gt;
 // #2 from #1: void(A&lt;T&gt;&amp;) from void(const U1&amp;): P=A&lt;T&gt; A=const U1: fails
 // #2 is more specialized than #1 w.r.t T

  const A&lt;int&gt; z2;
  h(z2); // deduction from #1: void h(const T&amp;) [T = A&lt;int&gt;]
         // deduction from #2: void h(A&lt;T&gt;&amp;) [T = int], but substitution fails
 // only one overload to choose from, partial ordering not tried, #1 is called
}
}}

Since in a call context considers only parameters for which there are explicit call arguments, those function parameter packs, ellipsis parameters, and parameters with default arguments, for which there is no explicit call argument, are ignored:
{{source|1=
template&lt;class T&gt;  void  f(T);               // #1
template&lt;class T&gt;  void  f(T*, int=1);       // #2
void m(int* ip) {
  int* ip;
  f(ip);     // calls #2 (T* is more specialized than T)
}
}}

{{source|1=
template&lt;class  T&gt;  void  g(T);               // #1
template&lt;class  T&gt;  void  g(T*, ...);         // #2
void m(int* ip) {
   g(ip);     // calls #2 (T* is more specialized than T)
}
}}

{{source|1=
template&lt;class T, class U&gt; struct A { };
template&lt;class T, class U&gt; void f(U, A&lt;U,T&gt;* p = 0); // #1
template&lt;         class U&gt; void f(U, A&lt;U,U&gt;* p = 0); // #2
void h() {
  f&lt;int&gt;(42, (A&lt;int, int&gt;*)0);  // calls #2
  f&lt;int&gt;(42);                   // error: ambiguous
}
}}

{{source|1=
template&lt;class T           &gt;  void g(T, T = T());  // #1
template&lt;class T, class... U&gt; void g(T, U ...);    // #2
void h() {
  g(42);  // error: ambiguous
}
}}

{{source|1=
template&lt;class  T, class... U&gt; void f(T, U...);           // #1
template&lt;class  T            &gt; void f(T);                 // #2
void h(int i) {
  f(&amp;i);        // calls #2 due to the tie-breaker between parameter pack and no parameter
                // (note: was ambiguous between DR692 and DR1395)
}
}}

{{source|1=
template&lt;class  T, class... U&gt; void g(T*, U...);          // #1
template&lt;class  T            &gt; void g(T);                 // #2
void h(int i) {
  g(&amp;i);        // OK: calls #1 (T* is more specialized than T)
}
}}

{{source|1=
template &lt;class ...T&gt; int f(T*...);  // #1
template &lt;class T&gt;  int f(const T&amp;); // #2
f((int*)0); // OK: selects #1
            // (was ambiguous before DR1395 because deduction failed in both directions)
}}

{{source|1=
template&lt;class... Args&gt;           void f(Args... args);               // #1
template&lt;class T1, class... Args&gt; void f(T1 a1, Args... args);        // #2
template&lt;class T1, class T2&gt;      void f(T1 a1, T2 a2);               // #3
f();                  // calls #1
f(1, 2, 3);           // calls #2
f(1, 2);              // calls #3; non-variadic template #3 is more
                      // specialized than the variadic templates #1 and #2
}}

During template argument deduction within the partial ordering process, template parameters don't require to be matched with arguments, if the argument is not used in any of the types considered for partial ordering
{{source|1=
template &lt;class T&gt;          T f(int);  // #1
template &lt;class T, class U&gt; T f(U);    // #2
void g() {
  f&lt;int&gt;(1);  // specialization of #1 is explicit: T f(int) [T = int]
              // specialization of #2 is deduced:  T f(U) [T = int, U = int]
// partial ordering (only considering the argument type)
// #1 from #2: T(int) from U1(U2): fails
// #2 from #1: T(U) from U1(int): ok: U=int, T unused
// calls #1
}
}}

Partial ordering of function templates containing template parameter packs is independent of the number of deduced arguments for those template parameter packs.
{{source|1=
template&lt;class...&gt; struct Tuple { };
template&lt;          class... Types&gt; void g(Tuple&lt;Types ...&gt;);        // #1
template&lt;class T1, class... Types&gt; void g(Tuple&lt;T1, Types ...&gt;);    // #2
template&lt;class T1, class... Types&gt; void g(Tuple&lt;T1, Types&amp; ...&gt;);   // #3

g(Tuple&lt;&gt;());                     // calls #1
g(Tuple&lt;int, float&gt;());           // calls #2
g(Tuple&lt;int, float&amp;&gt;());          // calls #3
g(Tuple&lt;int&gt;());                  // calls #3
}}



{{todo|14.8.3[temp.over]}}
To compile a call to a function template, the compiler has to decide between non-template overloads, template overloads, and the specializations of the template overloads.

{{source|1=
template&lt; class T &gt; void f(T);              // #1: template overload
template&lt; class T &gt; void f(T*);             // #2: template overload
void                     f(double);         // #3: nontemplate overload
template&lt;&gt;          void f(int);            // #4: specialization of #1

f('a');        // calls #1
f(new int(1)); // calls #2
f(1.0);        // calls #3
f(1);          // calls #4
}}

===Function overloads vs function specializations===
Note that only non-template and primary template overloads participate in overload resolution. The specializations are not overloads and are not considered. Only after the overload resolution selects the best-matching primary function template, its specializations are examined to see if one is a better match.

{{source|1=
template&lt; class T &gt; void f(T);    // #1: overload for all types
template&lt;&gt;          void f(int*); // #2: specialization of #1 for pointers to int
template&lt; class T &gt; void f(T*);   // #3: overload for all pointer types

f(new int(1)); // calls #3, even though specialization of #1 would be a perfect match
}}

It is important to remember this rule while ordering the header files of a translation unit. For more examples of the interplay between function overloads and function specializations, expand below:
----
{|style=&quot;border-style: none; border-spacing: 2px; width: 100%;&quot; class=&quot;mw-collapsible mw-collapsed&quot;
|-
| 


|- 
| 
Consider first some scenarios where the argument-dependent lookup is not employed. For that, we use the call {{c|(f)(t)}}. As described in {{rlp|adl|ADL}}, wrapping the function name in parentheses is suppressing the argument-dependent lookup.

* Multiple overloads of {{c|f()}} declared before the ''point-of-reference'' (POR) in {{c|g()}}.
{{example | code=
#include &lt;iostream&gt;
struct A{};
template&lt;class T&gt; void f(T)    {std::cout &lt;&lt; &quot;#1\n&quot;;} // overload #1 before f() POR
template&lt;class T&gt; void f(T*)   {std::cout &lt;&lt; &quot;#2\n&quot;;} // overload #2 before f() POR
template&lt;class T&gt; void g(T* t) 
{
    (f)(t); // f() POR
}

int main()
{
    A *p=nullptr;
    g(p);
}           // POI of g() and f()

// Both #1 and #2 are added to the candidate list;
// #2 is selected because it is a better match.
| output=
#2
}}


* A better matching template overload is declared after POR.
{{example | code=
#include &lt;iostream&gt;
struct A{};
template&lt;class T&gt; void f(T)    {std::cout &lt;&lt; &quot;#1\n&quot;;} // #1
template&lt;class T&gt; void g(T* t) 
{
    (f)(t); // f() POR
}
template&lt;class T&gt; void f(T*)   {std::cout &lt;&lt; &quot;#2\n&quot;;} // #2

int main()
{
    A *p=nullptr;
    g(p);
}           // POI of g() and f()

// Only #1 is added to the candidate list; #2 is defined after POR;
// therefore, it is not considered for overloading even if it is a better match.
| output=
#1
}}


* A better matching explicit template specialization is declared after POR.
{{example | code=
#include &lt;iostream&gt;
struct A{};
template&lt;class T&gt; void f(T)    {std::cout &lt;&lt; &quot;#1\n&quot;;} // #1
template&lt;class T&gt; void g(T* t) 
{
    (f)(t); // f() POR
}
template&lt;&gt;        void f&lt;&gt;(A*) {std::cout &lt;&lt; &quot;#3\n&quot;;} // #3

int main()
{
    A *p=nullptr;
    g(p);
}           // POI of g() and f()

// #1 is added to the candidate list; #3 is a better match defined after POR. The
// candidate list consists of #1 which is eventually selected. After that, the explicit 
// specialization #3 of #1 declared after POI is selected because it is a better match. 
// This behavior is governed by 14.7.3/6 [temp.expl.spec] and has nothing to do with ADL.
| output=
#3
}}


* A better matching template overload is declared after POR. The best matching explicit template specialization is declared after the better matching overload.
{{example | code=
#include &lt;iostream&gt;
struct A{};
template&lt;class T&gt; void f(T)    {std::cout &lt;&lt; &quot;#1\n&quot;;} // #1
template&lt;class T&gt; void g(T* t) 
{
    (f)(t); // f() POR
}
template&lt;class T&gt; void f(T*)   {std::cout &lt;&lt; &quot;#2\n&quot;;} // #2
template&lt;&gt;        void f&lt;&gt;(A*) {std::cout &lt;&lt; &quot;#3\n&quot;;} // #3

int main()
{
    A *p=nullptr;
    g(p);
}           // POI of g() and f()

// #1 is the only member of the candidate list and it is eventually selected. 
// After that, the explicit specialization #3 is skipped because it actually 
// specializes #2 declared after POR.
| output=
#1
}}


Let's consider now those cases employing argument-dependent lookup (i.e., we use the more common call format {{c|f(t)}}).

* A better matching template overload is declared after POR.
{{example | code=
#include &lt;iostream&gt;
struct A{};
template&lt;class T&gt; void f(T)    {std::cout &lt;&lt; &quot;#1\n&quot;;} // #1
template&lt;class T&gt; void g(T* t) 
{
    f(t); // f() POR
}
template&lt;class T&gt; void f(T*)   {std::cout &lt;&lt; &quot;#2\n&quot;;} // #2

int main()
{
    A *p=nullptr;
    g(p);
}           // POI of g() and f()

// #1 is added to the candidate list as a result of the ordinary lookup;
// #2 is defined after POR but it is added to the candidate list via ADL lookup.
// #2 is selected being the better match.
| output=
#2
}}


* A better matching template overload is declared after POR. The best matching explicit template specialization is declared before the better matching overload.
{{example | code=
#include &lt;iostream&gt;
struct A{};
template&lt;class T&gt; void f(T)    {std::cout &lt;&lt; &quot;#1\n&quot;;} // #1
template&lt;class T&gt; void g(T* t) 
{
    f(t); // f() POR
}
template&lt;&gt;        void f&lt;&gt;(A*) {std::cout &lt;&lt; &quot;#3\n&quot;;} // #3
template&lt;class T&gt; void f(T*)   {std::cout &lt;&lt; &quot;#2\n&quot;;} // #2

int main()
{
    A *p=nullptr;
    g(p);
}           // POI of g() and f()

// #1 is added to the candidate list as a result of the ordinary lookup;
// #2 is defined after POR but it is added to the candidate list via ADL lookup.
// #2 is selected among the primary templates, being the better match.
// Since #3 is declared before #2, it is an explicit specialization of #1.
// Hence the final selection is #2.
| output=
#2
}}


* A better matching template overload is declared after POR. The best matching explicit template specialization is declared last.
{{example | code=
#include &lt;iostream&gt;
struct A{};
template&lt;class T&gt; void f(T)    {std::cout &lt;&lt; &quot;#1\n&quot;;} // #1
template&lt;class T&gt; void g(T* t) 
{
    f(t); // f() POR
}
template&lt;class T&gt; void f(T*)   {std::cout &lt;&lt; &quot;#2\n&quot;;} // #2
template&lt;&gt;        void f&lt;&gt;(A*) {std::cout &lt;&lt; &quot;#3\n&quot;;} // #3

int main()
{
    A *p=nullptr;
    g(p);
}           // POI of g() and f()

// #1 is added to the candidate list as a result of the ordinary lookup;
// #2 is defined after POR but it is added to the candidate list via ADL lookup.
// #2 is selected among the primary templates, being the better match.
// Since #3 is declared after #2, it is an explicit specialization of #2;
// therefore, selected as the function to call.
| output=
#3
}}


Whenever the arguments are some C++ basic types, there are no ADL-associated namespaces. Hence, those scenarios are identical with the non-ADL examples above.
|}
----

For detailed rules on overload resolution, see {{rlp|overload_resolution|overload resolution}}

===Function template specialization===
{{todo|14.8[temp.fct.spec] (note that 14.8.1[temp.arg.explicit] is already in full specialization article: either function specifics go here: lack of partials, interaction with function overloads, or just refer to that}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1395|std=C++14|before=deduction failed when A was from a pack, and there was no empty pack tie-breaker|after=deduction allowed, tie-breaker added}}
{{dr list end}}

==See Also==
* [[cpp/language/class template|class template]]
* [[cpp/language/function|function declaration]]

[[de:cpp/language/function template]]
[[es:cpp/language/function template]]
[[fr:cpp/language/function template]]
[[it:cpp/language/function template]]
[[ja:cpp/language/function template]]
[[pt:cpp/language/function template]]
[[ru:cpp/language/function template]]
[[zh:cpp/language/function template]]</text>
      <sha1>1xm0bk01jq36qfb2vudognr9r95ahuj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/function-try-block</title>
    <ns>0</ns>
    <id>13494</id>
    <revision>
      <id>83830</id>
      <parentid>83127</parentid>
      <timestamp>2016-03-09T15:28:41Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Explanation */ cwg 2017</comment>
      <text xml:space="preserve" bytes="4516">{{title|Function-try-block}}
{{cpp/language/exceptions/navbar}}
Establishes an exception handler around the body of a function.

===Syntax===
The function-try-block is one of the alternative syntax forms for {{spar|function-body}}, which is a part of {{rlp|function|function definition}}.
{{sdsc begin}}
{{sdsc|1=
{{ttb|try}} {{spar|ctor-initializer}}{{mark optional}} {{spar|compound-statement}} {{spar|handler-sequence}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|ctor-initializer}} | member {{rlp|initializer list}}, only allowed in constructors}}
{{par | {{spar|compound-statement}} | the brace-enclosed {{rlp|statements#Compound_statements|sequence of statements}} that constututes the body of a function}}
{{par | {{spar|handler-sequence}} | sequence of one or more {{rlp|try_catch|catch-clauses}} }}
{{par end}}

===Explanation===
A ''function-try-block'' associates a sequence of catch clauses with the entire function body, and with the {{rlp|initializer list|member initializer list}} (if used in a constructor) as well. Every exception thrown from any statement in the function body, or (for constructors) from any member or base constructor, or (for destructors) from any member or base destructor, transfers control to the {{spar|handler-sequence}} the same way an exception thrown in a regular {{rlp|try_catch|try block}} would.
{{source|1=struct S {
    std::string m;
    S(const std::string&amp; arg) try : m(arg, 100) {
        std::cout &lt;&lt; &quot;constructed, mn = &quot; &lt;&lt; m &lt;&lt; '\n';
    } catch(const std::exception&amp; e) {
        std::cerr &lt;&lt; &quot;arg=&quot; &lt;&lt; arg &lt;&lt; &quot; failed: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    } // implicit throw; here
};
}}

Before any catch clauses of a function-try-block on a constructor are entered, all fully-constructed members and bases have already been destroyed.

{{rev begin}}
{{rev |since=c++11| If the function-try-block is on a delegating constructor, which called a non-delegating constructor that completed successfully, but then the body of the delegating constructor throws, the destructor of this object will be completed before any catch clauses of the function-try-block are entered.}}
{{rev end}}

Before any catch clauses of a function-try-block on a destructor are entered, all bases and non-variant members have already been destroyed.

The behavior is undefined if the catch-clause of a function-try-block used on a constructor or a destructor accesses a base or a non-static member of the object.

Every catch-clause in the function-try-block for a constructor must terminate by throwing an exception. If the control reaches the end of such handler, the current exception is automatically rethrown as if by {{c|throw;}}. The return statement is not allowed in any catch clause of a constructor's function-try-block.

Reaching the end of a catch clause for a function-try-block on a destructor also automatically rethrows the current exception as if by {{c|throw;}}, but a return statement is allowed.

For all other functions, reaching the end of a catch clause is equivalent to {{c|return;}} if the function's return type is (possibly cv-qualified) {{c|void}}, otherwise the behavior is undefined.

===Notes===
The primary purpose of function-try-blocks is to log or modify, and then rethrow the exceptions thrown from the member initializer list in a constructor. They are rarely used with destructors or with regular functions.

Function-try-block does not catch the exceptions thrown by the copy/move constructors and the destructors of the function parameters passed by value: those exceptions are thrown in context of the caller.

{{rev begin}}
{{rev|since=c++11|
Function-try-block of the top-level function of a thread does not catch the exceptions thrown from the constructors and destructors of {{rlp|storage_duration|thread-local}} objects (except for the constructors of function-scoped thread-locals). }}
{{rev end}}
Likewise, function-try-block of the {{rlp|main_function|main() function}} does not catch the exceptions thrown from the constructors and destructors of {{rlp|storage_duration|static}} objects (except for the constructors of function-local statics).

{{rlp|scope#Block_scope|The scope}} and lifetime of the function parameters (but not any objects declared in the function itself), extend to the end of the {{spar|handler-sequence}}.
{{source|1=
int f(int n = 2) try {
   ++n; // increments the function parameter
   throw n;
} catch(...) {
   ++n; // n is in scope and still refers to the function parameter
   assert(n == 4);
   return n;
}
}}</text>
      <sha1>pj4g25f0uaoed2te09tlcbljchee5pp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/functions</title>
    <ns>0</ns>
    <id>9921</id>
    <revision>
      <id>90065</id>
      <parentid>81640</parentid>
      <timestamp>2017-02-04T17:08:09Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="3693">{{title|Functions}}
{{cpp/language/functions/navbar}}

Functions are C++ entities that associate a sequence of {{rlp|statements}} (a ''function body'') with a ''name'' and a list of zero or more ''function parameters''.

{{source|
// function name: &quot;isodd&quot;
// parameter list has one parameter, with name &quot;n&quot; and type int
// the return type is bool
bool isodd(int n)
{                      // the body of the function begins
    return n % 2;
}                      // the body of the function ends
}}

When a function is invoked, e.g. in a {{rlp|operator_other#Built-in_function_call_operator|function-call expression}}, the parameters are initialized from the arguments (either provided at the place of call or {{rlp|default_arguments|defaulted}}) and the statements in the function body are executed.

{{source|
int main()
{
    for(int arg : {-3, -2, -1, 0, 1, 2, 3})
        std::cout &lt;&lt; isodd(arg) &lt;&lt; ' '; // isodd called 7 times, each
                                        // time n is copy-initialized from arg
}
}}

A function can terminate by {{rlp|return|returning}} or by {{rlp|throw|throwing}} an {{rlp|exceptions|exception}}.

A {{rlp|function|function declaration}} may appear in any scope, but a {{rlp|function|function definition}} may only appear in namespace scope or, for {{rlp|member_functions|member}} and {{rlp|friend}} functions, in class scope. A function that is declared in a class body without a friend specifier is a class member function. Such functions have many additional properties, see {{rlp|member_functions|member functions}} for details.

Functions are not objects: there are no arrays of functions and functions cannot be passed by value or returned from other functions. Pointers and references to functions are allowed, and may be used where functions themselves cannot.

Each function has a type, which consists of the function's return type, the types of all parameters (after array-to-pointer and function-to-pointer transformations, see {{rlp|function#Parameter list|parameter list}}) {{rev inl|since=c++17|, whether the function is noexcept or not}}, and, for member functions, cv-qualification and ref-qualification. Function types also have {{rlp|language_linkage|language linkage}}. There are no cv-qualified function types (not to be confused with the types of {{rlp|member_functions|cv-qualified functions}} such as {{c|int f() const;}} or functions returning {{rlp|cv|cv-qualified types}}, such as {{c|std::string const f();}})

Unnamed functions can be generated by {{rlp|lambda|lambda-expressions}}.

Multiple functions in the same scope may have the same name, as long as their parameter lists and, for member functions, cv/ref qualifications are different. This is known as {{rlp|overload_resolution|function overloading}}. Function declarations that differ only in the return type {{rev inl|since=c++17|and the noexcept specification}} cannot be overloaded.

{{todo|links to other Function subpages}}

===Function objects===
Besides function lvalues, the function call expression supports pointers to functions, dereferenced pointers to member functions, {{rlp|lambda|lambda-expressions}}, and any variable of class type that overloads the function-call operator. Together, these types are known as {{concept|FunctionObject}}s, and they are used ubiquitously through the C++ standard library, see for example, usages of {{concept|BinaryPredicate}} and {{concept|Compare}}.

The standard library also provides a number of pre-defined [[cpp/utility/functional|function object templates]] as well as the methods to compose new ones (including {{lc|std::mem_fn}}, {{lc|std::bind}}, and {{lc|std::function}}).

[[zh:cpp/language/functions]]</text>
      <sha1>1qea84tjyo7dl5d4d11wbvdg6r3s5vs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/goto</title>
    <ns>0</ns>
    <id>697</id>
    <revision>
      <id>86079</id>
      <parentid>82841</parentid>
      <timestamp>2016-06-16T14:19:08Z</timestamp>
      <contributor>
        <username>Fish2000</username>
        <id>4337</id>
      </contributor>
      <comment>Added external link to related Dijkstra material</comment>
      <text xml:space="preserve" bytes="3613">{{title|goto statement}}
{{cpp/language/statements/navbar}}

Transfers control unconditionally.

Used when it is otherwise impossible to transfer control to the desired location using other statements.

===Syntax===

{{sdsc begin}}
{{sdsc | {{spar|attr}}{{mark optional}} {{ttb|goto}} {{spar|label}} {{ttb|;}} }}
{{sdsc end}}

===Explanation===

The goto statement transfers control to the location specified by {{rlp|statements#Labels|label}}. The goto statement must be in the same function as the {{spar|label}} it is referring, it may appear before or after the label.

If transfer of control exits the scope of any automatic variables (e.g. by jumping backwards to a point before the declarations of such variables or by jumping forward out of a compound statement where the variables are scoped), the destructors are called for all variables whose scope was exited, in the order opposite to the order of their construction.

The {{tt|goto}} statement cannot transfer control into a {{rlp|try_catch|try-block}} or into a catch-clause, but can transfer control out of a try-block or a catch-clause (the rules above regarding automatic variables in scope are followed)

If transfer of control enters the scope of any automatic variables (e.g. by jumping forward over a declaration statement), the program is ill-formed (cannot be compiled), unless all variables whose scope is entered have
@1@ scalar types declared without initializers
@2@ class types with trivial default constructors and trivial destructors declared without initializers
@3@ cv-qualified versions of one of the above
@4@ arrays of one of the above

(Note: the same rules apply to all forms of transfer of control)

===Keywords===

{{ltt|cpp/keyword/goto}}

===Notes===
In the C programming language, the {{tt|goto}} statement has fewer restrictions and can enter the scope of any variable other than variable-length array or variably-modified pointer.

===Example===
{{example
 | code=
#include &lt;iostream&gt;

struct Object {
    // non-trivial destructor
    ~Object() { std::cout &lt;&lt; &quot;d&quot;; }
};

struct Trivial {
    double d1;
    double d2;
}; // trivial ctor and dtor

int main()
{
    int a = 10;
    
    // loop using goto
label:
    Object obj;
    std::cout &lt;&lt; a &lt;&lt; &quot; &quot;;
    a = a - 2;

    if (a != 0) {
        goto label;  // jumps out of scope of obj, calls obj destructor
    }
    std::cout &lt;&lt; '\n';

    // goto can be used to leave a multi-level loop easily
    for (int x = 0; x &lt; 3; x++) {
        for (int y = 0; y &lt; 3; y++) {
            std::cout &lt;&lt; &quot;(&quot; &lt;&lt; x &lt;&lt; &quot;;&quot; &lt;&lt; y &lt;&lt; &quot;) &quot; &lt;&lt; '\n';
            if (x + y &gt;= 3) {
                goto endloop;
            }
        }
    }
endloop:
    std::cout &lt;&lt; '\n';

    goto label2; // jumps into the scope of n and t
    int n; // no initializer
    Trivial t; // trivial ctor/dtor, no initializer
//  int x = 1; // error: has initializer
//  Object obj2; // error: non-trivial dtor
label2:

    {
        Object obj3;
        goto label3; // jumps forward, out of scope of obj3
    }
label3: ;

}
 | output=
10 d8 d6 d4 d2
(0;0) 
(0;1) 
(0;2) 
(1;0) 
(1;1) 
(1;2) 

dd
}}

===Further Reading===
The popular Edsger W. Dijkstra essay, [http://david.tribble.com/text/goto.html “Goto Considered Harmful”], presents a survey of the many subtle problems the careless use of this keyword can introduce. 

===See Also===
{{dsc begin}}
{{dsc see c | c/language/goto}}
{{dsc end}}

[[de:cpp/language/goto]]
[[es:cpp/language/goto]]
[[fr:cpp/language/goto]]
[[it:cpp/language/goto]]
[[ja:cpp/language/goto]]
[[pt:cpp/language/goto]]
[[ru:cpp/language/goto]]
[[zh:cpp/language/goto]]</text>
      <sha1>qfasaaolqtr12zeomettt2cv9dk3ba5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/history</title>
    <ns>0</ns>
    <id>4470</id>
    <revision>
      <id>91257</id>
      <parentid>91153</parentid>
      <timestamp>2017-03-30T15:23:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>n4660 is now password-protected (history repeated itself), repointing the link to n4659.pdf</comment>
      <text xml:space="preserve" bytes="170057">{{title|History of C++}}
{{cpp/language/navbar}}

==Early C++==
* 1979: C with Classes first implemented
# New features: {{rlp|classes}}, {{rlp|member functions}}, {{rlp|derived class}}es, separate compilation, {{rlp|access|public and private access control}}, {{rlp|friend}}s, type checking of function arguments, {{rlp|default arguments}}, {{rlp|inline|inline functions}}, {{rlp|as operator|overloaded assignment operator}}, {{rlp|constructor}}s, {{rlp|destructor}}s, f() same as f(void), call-function and return-function (synchronization features, not in C++)
# Libraries: the concurrent task library (not in C++)
* 1982: C with Classes reference manual published
* 1984: C84 implemented, reference manual published
* 1985: Cfront 1.0
# New features: {{rlp|virtual|virtual functions}}, function and {{rlp|operators|operator overloading}}, {{rlp|reference|references}}, [[cpp/memory/new/operator_new|new]] and [[cpp/memory/new/operator_delete|delete]] operators, {{rlp|cv|the keyword const}}, scope resolution operator
# Library additions: [[cpp/numeric/complex|complex]], [[cpp/string/basic_string|string]], [[cpp/header/iostream|iostream]]
* 1985: The C++ Programming Language, 1st edition
* 1986: The &quot;whatis?&quot; paper documenting the remaining design goals, including multiple inheritance, exception handling, and templates.
* 1987: C++ support in GCC 1.15.3
* 1989: Cfront 2.0
# New features: {{rlp|derived_class|multiple inheritance}}, {{rlp|pointer|pointers to members}}, {{rlp|access|protected access}}, type-safe linkage, {{rlp|abstract class}}es, [[cpp/language/static#Static_member_functions|static]] and [[cpp/language/member_functions#const-,_volatile-,_and_ref-qualified_member_functions|const]] member functions, class-specific [[cpp/memory/new/operator_new#Replacing_and_overloading|new]] and [[cpp/memory/new/operator_delete#Replacing_and_overloading|delete]]
# Library additions: [[cpp/io/manip|I/O manipulators]]
* 1990: The Annotated C++ Reference Manual
This book described the language as designed, including some features that were not yet implemented. It served as the de-facto standard until the ISO.
# New features: {{rlp|namespace}}s, {{rlp|exceptions|exception handling}}, {{rlp|nested classes}}, {{rlp|templates}}
* 1991: Cfront 3.0
* 1991: The C++ Programming Language, 2nd edition

==Standard C++==

* 1990 ANSI C++ Committee founded
* 1991 ISO C++ Committee founded
* 1992 [http://www.sgi.com/tech/stl STL] implemented in C++
* 1998 {{ttb|C++98}} (ISO/IEC 14882:1998)
# New features: RTTI ({{rlp|dynamic_cast}}, {{rlp|typeid|typeid}}), {{rlp|virtual|covariant return types}}, {{rlp|cast operator}}s, [[cpp/language/cv|mutable]], {{rlp|types#Boolean_type|bool}}, declarations in conditions, {{rlp|templates|template instantiations}}, {{rlp|member template}}s, export
# Library additions: [[cpp/container|containers]], [[cpp/algorithm|algorithms]], [[cpp/iterator|iterators]], [[cpp/utility/functional|function objects]] (based on [http://www.sgi.com/tech/stl STL]), [[cpp/locale|locales]], [[cpp/utility/bitset|bitset]], [[cpp/numeric/valarray|valarray]], [[cpp/memory/auto_ptr|auto_ptr]], [[cpp/string/basic_string|templatized string]], [[cpp/header/iostream|iostream]], and [[cpp/numeric/complex|complex]].
* 1998 The C++ Programming Language, 3rd edition
* 1999 [http://www.boost.org Boost] founded by the committee members to produce new high-quality candidate libraries for the standard.
* 2003 {{ttb|C++03}} (ISO/IEC 14882:2003)
This was a minor revision, intended to be little more than a technical corrigendum
# New features: {{rlp|value initialization}}
{{collapse top|Defect Reports fixed in C++03 (92 core, 125 library)}}
{{div col|6}}
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1 CWG#1]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#20 CWG#20]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#21 CWG#21]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#22 CWG#22]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#24 CWG#24]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#25 CWG#25]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#30 CWG#30]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#32 CWG#32]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#33 CWG#33]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#35 CWG#35]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#38 CWG#38]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#40 CWG#40]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#41 CWG#41]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#43 CWG#43]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#48 CWG#48]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#49 CWG#49]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#51 CWG#51]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#52 CWG#52]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#53 CWG#53]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#56 CWG#56]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#59 CWG#59]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#64 CWG#64]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#65 CWG#65]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#67 CWG#67]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#68 CWG#68]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#69 CWG#69]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#73 CWG#73]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#74 CWG#74]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#75 CWG#75]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#76 CWG#76]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#80 CWG#80]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#83 CWG#83]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#84 CWG#84]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#85 CWG#85]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#89 CWG#89]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#90 CWG#90]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#93 CWG#93]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#94 CWG#94]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#98 CWG#98]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#100 CWG#100]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#101 CWG#101]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#103 CWG#103]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#105 CWG#105]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#108 CWG#108]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#116 CWG#116]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#120 CWG#120]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#121 CWG#121]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#123 CWG#123]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#126 CWG#126]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#127 CWG#127]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#128 CWG#128]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#131 CWG#131]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#134 CWG#134]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#135 CWG#135]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#137 CWG#137]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#142 CWG#142]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#145 CWG#145]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#147 CWG#147]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#148 CWG#148]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#149 CWG#149]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#151 CWG#151]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#152 CWG#152]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#153 CWG#153]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#159 CWG#159]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#161 CWG#161]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#163 CWG#163]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#164 CWG#164]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#166 CWG#166]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#171 CWG#171]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#173 CWG#173]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#176 CWG#176]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#178 CWG#178]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#179 CWG#179]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#181 CWG#181]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#183 CWG#183]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#185 CWG#185]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#187 CWG#187]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#188 CWG#188]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#190 CWG#190]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#193 CWG#193]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#194 CWG#194]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#202 CWG#202]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#206 CWG#206]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#210 CWG#210]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#213 CWG#213]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#217 CWG#217]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#227 CWG#227]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#235 CWG#235]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#241 CWG#241]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#249 CWG#249]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#250 CWG#250]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#304 CWG#304]
{{div col end}}
{{div col|6}}
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1 LWG#1]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#3 LWG#3]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#5 LWG#5]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#7 LWG#7]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#8 LWG#8]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#9 LWG#9]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#11 LWG#11]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#13 LWG#13]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#14 LWG#14]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#15 LWG#15]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#16 LWG#16]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#17 LWG#17]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#18 LWG#18]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#19 LWG#19]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#20 LWG#20]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#21 LWG#21]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#22 LWG#22]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#24 LWG#24]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#25 LWG#25]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#26 LWG#26]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#27 LWG#27]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#28 LWG#28]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#29 LWG#29]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#30 LWG#30]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#31 LWG#31]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#32 LWG#32]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#33 LWG#33]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#34 LWG#34]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#35 LWG#35]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#36 LWG#36]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#37 LWG#37]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#38 LWG#38]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#39 LWG#39]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#40 LWG#40]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#41 LWG#41]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#42 LWG#42]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#46 LWG#46]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#47 LWG#47]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#48 LWG#48]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#50 LWG#50]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#51 LWG#51]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#52 LWG#52]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#53 LWG#53]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#54 LWG#54]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#55 LWG#55]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#56 LWG#56]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#57 LWG#57]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#59 LWG#59]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#60 LWG#60]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#61 LWG#61]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#62 LWG#62]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#63 LWG#63]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#64 LWG#64]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#66 LWG#66]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#68 LWG#68]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#69 LWG#69]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#70 LWG#70]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#71 LWG#71]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#74 LWG#74]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#75 LWG#75]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#78 LWG#78]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#79 LWG#79]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#80 LWG#80]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#83 LWG#83]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#86 LWG#86]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#90 LWG#90]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#106 LWG#106]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#108 LWG#108]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#110 LWG#110]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#112 LWG#112]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#114 LWG#114]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#115 LWG#115]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#119 LWG#119]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#122 LWG#122]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#124 LWG#124]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#125 LWG#125]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#126 LWG#126]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#127 LWG#127]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#129 LWG#129]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#132 LWG#132]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#133 LWG#133]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#134 LWG#134]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#137 LWG#137]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#139 LWG#139]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#141 LWG#141]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#142 LWG#142]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#144 LWG#144]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#146 LWG#146]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#147 LWG#147]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#148 LWG#148]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#150 LWG#150]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#151 LWG#151]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#152 LWG#152]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#154 LWG#154]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#155 LWG#155]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#156 LWG#156]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#158 LWG#158]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#159 LWG#159]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#160 LWG#160]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#161 LWG#161]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#164 LWG#164]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#168 LWG#168]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#169 LWG#169]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#170 LWG#170]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#172 LWG#172]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#173 LWG#173]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#174 LWG#174]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#175 LWG#175]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#176 LWG#176]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#181 LWG#181]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#189 LWG#189]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#193 LWG#193]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#195 LWG#195]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#199 LWG#199]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#208 LWG#208]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#209 LWG#209]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#210 LWG#210]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#211 LWG#211]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#212 LWG#212]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#217 LWG#217]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#220 LWG#220]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#222 LWG#222]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#223 LWG#223]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#224 LWG#224]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#227 LWG#227]
{{div col end}}
{{collapse bottom}}
* 2006 Performance TR (ISO/IEC TR 18015:2006) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43351 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf 2006 draft]) 
This TR discussed the costs of various C++ abstractions, provided implementation guidance, discussed use of C++ in embedded systems and introduced {{tt|&lt;hardware&gt;}} interface to C's ISO/IEC TR 18037:2008 {{tt|&lt;iohw.h&gt;}}.
* 2007 Library extension TR1 (ISO/IEC TR 19768:2007)  ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43289 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1745.pdf 2005 draft]).
This TR is a C++ library extension, which adds the following to the C++ standard library:
# From Boost: [[cpp/utility/functional/reference_wrapper|Reference wrapper]], [[cpp/memory#Smart_pointers|Smart pointers]], [[cpp/utility/functional/mem_fn|Member function]], [[cpp/types/result_of|Result Of]], [[cpp/utility/functional/bind|Bind]], [[cpp/utility/functional/function|Function]], [[cpp/types|Type Traits]], [[cpp/numeric/random|Random]], Mathematical Special Functions, [[cpp/utility/tuple|Tuple]], [[cpp/container/array|Array]], [[cpp/container#Unordered_associative_containers|Unordered Containers]] (including [[cpp/utility/hash|Hash]]), and [[cpp/regex|Regular Expressions]].
# From C99: mathematical functions from math.h that were new in C99, [[cpp/string/byte/isblank|blank character class]], [[cpp/numeric/fenv|Floating-point environment]], [[cpp/io/manip/fixed|hexfloat I/O Manipulator]], [[cpp/types/integer|fixed-size integral types]], [[cpp/language/types#Integer_types|the long long type]], [[cpp/utility/variadic/va_copy|va_copy]], the {{lc|snprintf()}} and {{ltf|cpp/io/c/vfscanf}} families of functions, and the C99 conversion specifies for {{ltf|cpp/io/c/printf}} and {{ltf|cpp/io/c/scanf}} families of functions. 
All of TR1 except for the special functions was included in C++11, with minor changes.
* 2010 Mathematical special functions (ISO/IEC 29124:2010) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=50511 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3060.pdf 2010 draft])
This international standard is a C++ standard library extension, which adds the special functions that were part of TR1, but were not included in C++11: elliptic integrals, exponential integral, Laguerre polynomials, Legendre polynomials, Hermite polynomials, Bessel functions, Newmann functions, beta function, and Riemann zeta function. This standard was merged into C++17.
* 2011 {{ttb|C++11}} (ISO/IEC 14882:2011) ([http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372 ISO Store]) ([http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+14882-2012 ANSI Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf Post-publication draft]).
A large number of changes were introduced to both standardize existing practices and improve the abstractions available to the C++ programmers
# New language features: {{rlp|auto}} and {{rlp|decltype}}, defaulted and deleted functions, {{rlp|final}} and {{rlp|override}}, [[cpp/language/function#Function_declaration|trailing return type]], {{rlp|reference|rvalue references}}, {{rlp|move constructor}}s/{{rlp|move_operator|move assignment}}, {{rlp|enum|scoped enums}}, {{rlp|constexpr}} and [[cpp/concept/LiteralType|literal types]], {{rlp|list initialization}}, {{rlp|initializer list#Delegating constructor|delegating}} and {{rlp|using declaration|inherited}} constructors, brace-or-equal initializers, {{rlp|nullptr}}, [[cpp/language/types#Integer_types|long long]], [[cpp/language/types#Character_types|char16_t and char32_t]], {{rlp|type_alias|type alias}}es, {{rlp|parameter_pack|variadic templates}}, {{rlp|union|generalized unions}}, [[cpp/concept/PODType|generalized PODs]], {{rlp|string_literal|Unicode string literals}}, {{rlp|user_literal|user-defined literals}}, {{rlp|attributes}}, {{rlp|lambda|lambda expressions}}, {{rlp|noexcept_spec|noexcept}}, {{rlp|alignof}} and {{rlp|alignas}}, multithreaded memory model, [[cpp/language/storage_duration#Storage_duration|thread-local storage]], [[cpp/memory#Garbage_collector_support|GC interface]], {{rlp|range-for|range for}} (based on a Boost library), {{rlp|static_assert|static assertions}} (based on a Boost library)
# New library features: [[cpp/atomic|atomic operations library]], emplace() and other use of rvalue references throughout all parts of the existing library, [[cpp/utility/initializer_list|std::initializer_list]], stateful and [[cpp/memory/scoped_allocator_adaptor|scoped]] allocators, [[cpp/container/forward_list|forward_list]], [[cpp/chrono|chrono library]], [[cpp/numeric/ratio|ratio library]], new algorithms, [[cpp/locale#Locale-independent_unicode_conversion_facets|Unicode conversion facets]]
# From TR1: all of TR1 except Special Functions.
# From Boost: [[cpp/thread|The thread library]], [[cpp/error/exception_ptr|exception_ptr]], [[cpp/error/error_code|error_code]] and [[cpp/error/error_condition|error_condition]], iterator improvements ([[cpp/iterator/begin|std::begin]], [[cpp/iterator/end|std::end]], [[cpp/iterator/next|std::next]], [[cpp/iterator/prev|std::prev]])
# From C: C-style Unicode conversion functions
{{collapse top|Defect Reports fixed in C++11 (741 core, 685 library)}}
{{div col|6}}
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#4 CWG#4]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#5 CWG#5]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#8 CWG#8]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#9 CWG#9]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#10 CWG#10]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#11 CWG#11]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#16 CWG#16]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#28 CWG#28]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#29 CWG#29]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#39 CWG#39]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#44 CWG#44]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#45 CWG#45]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#54 CWG#54]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#58 CWG#58]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#60 CWG#60]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#62 CWG#62]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#63 CWG#63]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#70 CWG#70]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#77 CWG#77]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#78 CWG#78]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#86 CWG#86]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#87 CWG#87]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#96 CWG#96]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#106 CWG#106]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#112 CWG#112]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#113 CWG#113]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#115 CWG#115]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#118 CWG#118]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#119 CWG#119]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#122 CWG#122]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#124 CWG#124]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#125 CWG#125]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#136 CWG#136]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#139 CWG#139]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#140 CWG#140]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#141 CWG#141]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#143 CWG#143]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#158 CWG#158]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#160 CWG#160]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#162 CWG#162]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#172 CWG#172]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#175 CWG#175]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#177 CWG#177]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#180 CWG#180]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#184 CWG#184]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#195 CWG#195]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#197 CWG#197]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#198 CWG#198]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#199 CWG#199]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#201 CWG#201]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#204 CWG#204]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#207 CWG#207]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#208 CWG#208]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#214 CWG#214]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#215 CWG#215]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#216 CWG#216]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#218 CWG#218]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#220 CWG#220]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#221 CWG#221]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#222 CWG#222]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#224 CWG#224]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#226 CWG#226]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#228 CWG#228]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#237 CWG#237]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#239 CWG#239]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#244 CWG#244]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#245 CWG#245]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#246 CWG#246]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#248 CWG#248]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#252 CWG#252]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#254 CWG#254]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#256 CWG#256]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#257 CWG#257]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#258 CWG#258]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#259 CWG#259]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#261 CWG#261]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#262 CWG#262]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#263 CWG#263]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#270 CWG#270]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#272 CWG#272]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#273 CWG#273]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#274 CWG#274]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#275 CWG#275]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#276 CWG#276]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#277 CWG#277]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#280 CWG#280]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#281 CWG#281]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#283 CWG#283]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#284 CWG#284]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#286 CWG#286]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#288 CWG#288]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#289 CWG#289]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#291 CWG#291]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#295 CWG#295]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#296 CWG#296]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#298 CWG#298]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#299 CWG#299]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#300 CWG#300]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#301 CWG#301]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#302 CWG#302]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#305 CWG#305]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#306 CWG#306]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#309 CWG#309]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#317 CWG#317]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#318 CWG#318]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#319 CWG#319]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#320 CWG#320]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#322 CWG#322]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#323 CWG#323]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#324 CWG#324]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#326 CWG#326]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#327 CWG#327]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#328 CWG#328]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#329 CWG#329]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#331 CWG#331]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#335 CWG#335]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#336 CWG#336]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#337 CWG#337]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#339 CWG#339]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#341 CWG#341]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#345 CWG#345]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#348 CWG#348]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#349 CWG#349]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#351 CWG#351]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#352 CWG#352]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#353 CWG#353]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#354 CWG#354]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#355 CWG#355]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#357 CWG#357]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#362 CWG#362]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#364 CWG#364]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#366 CWG#366]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#367 CWG#367]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#368 CWG#368]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#370 CWG#370]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#372 CWG#372]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#373 CWG#373]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#374 CWG#374]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#377 CWG#377]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#378 CWG#378]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#379 CWG#379]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#381 CWG#381]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#382 CWG#382]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#383 CWG#383]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#385 CWG#385]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#387 CWG#387]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#389 CWG#389]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#390 CWG#390]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#391 CWG#391]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#392 CWG#392]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#394 CWG#394]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#396 CWG#396]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#397 CWG#397]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#398 CWG#398]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#400 CWG#400]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#401 CWG#401]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#403 CWG#403]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#404 CWG#404]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#406 CWG#406]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#407 CWG#407]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#408 CWG#408]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#409 CWG#409]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#410 CWG#410]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#413 CWG#413]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#414 CWG#414]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#415 CWG#415]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#416 CWG#416]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#417 CWG#417]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#420 CWG#420]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#421 CWG#421]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#424 CWG#424]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#425 CWG#425]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#427 CWG#427]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#428 CWG#428]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#429 CWG#429]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#430 CWG#430]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#431 CWG#431]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#432 CWG#432]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#433 CWG#433]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#436 CWG#436]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#437 CWG#437]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#438 CWG#438]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#439 CWG#439]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#441 CWG#441]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#442 CWG#442]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#443 CWG#443]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#446 CWG#446]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#447 CWG#447]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#448 CWG#448]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#450 CWG#450]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#451 CWG#451]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#452 CWG#452]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#454 CWG#454]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#457 CWG#457]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#458 CWG#458]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#460 CWG#460]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#463 CWG#463]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#464 CWG#464]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#466 CWG#466]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#468 CWG#468]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#470 CWG#470]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#474 CWG#474]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#475 CWG#475]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#477 CWG#477]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#479 CWG#479]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#480 CWG#480]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#481 CWG#481]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#484 CWG#484]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#485 CWG#485]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#486 CWG#486]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#488 CWG#488]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#490 CWG#490]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#491 CWG#491]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#492 CWG#492]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#493 CWG#493]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#494 CWG#494]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#495 CWG#495]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#497 CWG#497]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#499 CWG#499]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#500 CWG#500]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#502 CWG#502]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#505 CWG#505]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#506 CWG#506]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#508 CWG#508]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#509 CWG#509]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#510 CWG#510]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#513 CWG#513]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#514 CWG#514]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#515 CWG#515]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#516 CWG#516]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#517 CWG#517]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#518 CWG#518]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#519 CWG#519]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#520 CWG#520]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#521 CWG#521]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#522 CWG#522]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#524 CWG#524]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#525 CWG#525]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#526 CWG#526]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#527 CWG#527]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#530 CWG#530]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#531 CWG#531]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#532 CWG#532]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#534 CWG#534]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#537 CWG#537]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#538 CWG#538]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#540 CWG#540]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#541 CWG#541]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#542 CWG#542]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#543 CWG#543]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#546 CWG#546]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#547 CWG#547]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#551 CWG#551]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#556 CWG#556]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#557 CWG#557]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#558 CWG#558]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#559 CWG#559]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#561 CWG#561]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#564 CWG#564]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#568 CWG#568]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#569 CWG#569]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#570 CWG#570]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#571 CWG#571]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#572 CWG#572]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#573 CWG#573]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#575 CWG#575]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#576 CWG#576]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#580 CWG#580]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#582 CWG#582]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#587 CWG#587]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#588 CWG#588]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#589 CWG#589]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#590 CWG#590]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#592 CWG#592]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#594 CWG#594]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#598 CWG#598]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#599 CWG#599]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#601 CWG#601]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#602 CWG#602]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#603 CWG#603]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#604 CWG#604]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#605 CWG#605]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#606 CWG#606]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#608 CWG#608]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#611 CWG#611]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#612 CWG#612]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#613 CWG#613]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#614 CWG#614]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#615 CWG#615]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#618 CWG#618]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#619 CWG#619]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#620 CWG#620]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#621 CWG#621]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#624 CWG#624]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#625 CWG#625]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#626 CWG#626]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#628 CWG#628]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#629 CWG#629]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#630 CWG#630]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#632 CWG#632]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#633 CWG#633]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#634 CWG#634]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#637 CWG#637]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#638 CWG#638]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#639 CWG#639]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#641 CWG#641]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#642 CWG#642]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#644 CWG#644]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#645 CWG#645]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#647 CWG#647]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#648 CWG#648]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#649 CWG#649]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#650 CWG#650]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#651 CWG#651]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#652 CWG#652]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#653 CWG#653]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#654 CWG#654]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#655 CWG#655]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#656 CWG#656]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#657 CWG#657]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#658 CWG#658]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#659 CWG#659]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#660 CWG#660]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#661 CWG#661]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#663 CWG#663]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#664 CWG#664]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#665 CWG#665]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#666 CWG#666]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#667 CWG#667]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#668 CWG#668]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#671 CWG#671]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#672 CWG#672]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#674 CWG#674]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#676 CWG#676]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#677 CWG#677]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#678 CWG#678]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#679 CWG#679]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#680 CWG#680]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#681 CWG#681]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#683 CWG#683]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#684 CWG#684]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#685 CWG#685]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#686 CWG#686]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#688 CWG#688]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#690 CWG#690]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#691 CWG#691]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#692 CWG#692]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#693 CWG#693]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#694 CWG#694]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#695 CWG#695]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#696 CWG#696]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#699 CWG#699]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#700 CWG#700]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#701 CWG#701]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#702 CWG#702]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#703 CWG#703]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#704 CWG#704]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#705 CWG#705]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#707 CWG#707]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#709 CWG#709]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#710 CWG#710]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#711 CWG#711]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#713 CWG#713]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#714 CWG#714]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#715 CWG#715]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#716 CWG#716]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#717 CWG#717]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#719 CWG#719]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#720 CWG#720]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#721 CWG#721]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#722 CWG#722]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#726 CWG#726]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#730 CWG#730]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#731 CWG#731]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#732 CWG#732]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#734 CWG#734]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#735 CWG#735]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#737 CWG#737]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#738 CWG#738]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#740 CWG#740]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#741 CWG#741]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#743 CWG#743]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#744 CWG#744]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#746 CWG#746]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#749 CWG#749]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#750 CWG#750]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#751 CWG#751]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#752 CWG#752]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#753 CWG#753]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#754 CWG#754]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#756 CWG#756]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#757 CWG#757]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#758 CWG#758]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#759 CWG#759]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#760 CWG#760]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#761 CWG#761]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#762 CWG#762]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#763 CWG#763]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#764 CWG#764]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#765 CWG#765]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#766 CWG#766]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#767 CWG#767]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#768 CWG#768]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#769 CWG#769]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#770 CWG#770]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#771 CWG#771]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#772 CWG#772]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#773 CWG#773]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#774 CWG#774]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#775 CWG#775]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#776 CWG#776]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#777 CWG#777]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#778 CWG#778]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#779 CWG#779]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#782 CWG#782]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#784 CWG#784]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#785 CWG#785]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#786 CWG#786]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#787 CWG#787]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#788 CWG#788]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#789 CWG#789]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#790 CWG#790]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#792 CWG#792]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#793 CWG#793]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#796 CWG#796]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#797 CWG#797]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#798 CWG#798]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#799 CWG#799]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#801 CWG#801]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#803 CWG#803]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#804 CWG#804]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#805 CWG#805]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#806 CWG#806]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#808 CWG#808]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#809 CWG#809]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#810 CWG#810]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#811 CWG#811]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#812 CWG#812]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#814 CWG#814]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#815 CWG#815]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#816 CWG#816]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#817 CWG#817]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#818 CWG#818]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#820 CWG#820]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#823 CWG#823]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#828 CWG#828]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#830 CWG#830]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#831 CWG#831]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#832 CWG#832]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#833 CWG#833]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#834 CWG#834]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#835 CWG#835]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#837 CWG#837]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#838 CWG#838]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#840 CWG#840]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#842 CWG#842]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#845 CWG#845]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#846 CWG#846]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#847 CWG#847]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#850 CWG#850]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#853 CWG#853]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#854 CWG#854]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#855 CWG#855]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#858 CWG#858]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#860 CWG#860]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#861 CWG#861]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#862 CWG#862]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#863 CWG#863]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#864 CWG#864]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#865 CWG#865]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#869 CWG#869]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#872 CWG#872]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#873 CWG#873]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#874 CWG#874]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#876 CWG#876]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#877 CWG#877]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#879 CWG#879]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#880 CWG#880]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#882 CWG#882]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#883 CWG#883]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#884 CWG#884]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#886 CWG#886]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#887 CWG#887]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#888 CWG#888]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#891 CWG#891]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#892 CWG#892]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#896 CWG#896]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#898 CWG#898]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#899 CWG#899]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#904 CWG#904]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#905 CWG#905]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#906 CWG#906]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#908 CWG#908]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#910 CWG#910]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#913 CWG#913]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#915 CWG#915]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#919 CWG#919]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#920 CWG#920]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#921 CWG#921]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#922 CWG#922]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#923 CWG#923]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#924 CWG#924]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#926 CWG#926]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#927 CWG#927]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#928 CWG#928]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#929 CWG#929]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#930 CWG#930]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#931 CWG#931]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#932 CWG#932]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#933 CWG#933]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#934 CWG#934]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#935 CWG#935]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#936 CWG#936]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#938 CWG#938]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#939 CWG#939]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#940 CWG#940]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#941 CWG#941]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#942 CWG#942]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#945 CWG#945]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#946 CWG#946]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#948 CWG#948]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#950 CWG#950]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#951 CWG#951]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#953 CWG#953]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#955 CWG#955]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#956 CWG#956]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#957 CWG#957]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#959 CWG#959]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#960 CWG#960]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#961 CWG#961]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#962 CWG#962]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#963 CWG#963]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#964 CWG#964]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#965 CWG#965]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#966 CWG#966]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#968 CWG#968]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#969 CWG#969]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#970 CWG#970]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#971 CWG#971]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#972 CWG#972]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#973 CWG#973]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#976 CWG#976]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#978 CWG#978]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#979 CWG#979]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#980 CWG#980]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#981 CWG#981]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#983 CWG#983]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#984 CWG#984]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#985 CWG#985]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#986 CWG#986]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#988 CWG#988]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#989 CWG#989]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#990 CWG#990]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#991 CWG#991]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#993 CWG#993]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#994 CWG#994]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#995 CWG#995]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#996 CWG#996]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#997 CWG#997]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#999 CWG#999]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1000 CWG#1000]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1004 CWG#1004]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1006 CWG#1006]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1009 CWG#1009]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1010 CWG#1010]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1011 CWG#1011]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1012 CWG#1012]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1015 CWG#1015]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1016 CWG#1016]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1017 CWG#1017]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1018 CWG#1018]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1020 CWG#1020]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1022 CWG#1022]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1025 CWG#1025]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1029 CWG#1029]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1030 CWG#1030]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1031 CWG#1031]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1032 CWG#1032]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1033 CWG#1033]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1034 CWG#1034]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1035 CWG#1035]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1036 CWG#1036]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1037 CWG#1037]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1042 CWG#1042]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1043 CWG#1043]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1044 CWG#1044]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1047 CWG#1047]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1051 CWG#1051]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1054 CWG#1054]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1055 CWG#1055]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1056 CWG#1056]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1057 CWG#1057]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1060 CWG#1060]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1061 CWG#1061]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1062 CWG#1062]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1063 CWG#1063]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1064 CWG#1064]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1065 CWG#1065]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1066 CWG#1066]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1068 CWG#1068]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1069 CWG#1069]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1070 CWG#1070]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1071 CWG#1071]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1072 CWG#1072]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1073 CWG#1073]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1074 CWG#1074]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1075 CWG#1075]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1079 CWG#1079]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1080 CWG#1080]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1081 CWG#1081]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1082 CWG#1082]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1083 CWG#1083]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1086 CWG#1086]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1087 CWG#1087]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1088 CWG#1088]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1090 CWG#1090]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1091 CWG#1091]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1094 CWG#1094]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1095 CWG#1095]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1096 CWG#1096]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1098 CWG#1098]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1099 CWG#1099]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1100 CWG#1100]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1101 CWG#1101]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1102 CWG#1102]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1103 CWG#1103]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1104 CWG#1104]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1105 CWG#1105]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1106 CWG#1106]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1107 CWG#1107]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1109 CWG#1109]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1111 CWG#1111]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1112 CWG#1112]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1113 CWG#1113]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1114 CWG#1114]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1115 CWG#1115]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1117 CWG#1117]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1119 CWG#1119]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1120 CWG#1120]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1121 CWG#1121]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1122 CWG#1122]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1123 CWG#1123]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1125 CWG#1125]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1126 CWG#1126]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1127 CWG#1127]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1128 CWG#1128]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1129 CWG#1129]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1130 CWG#1130]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1131 CWG#1131]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1133 CWG#1133]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1134 CWG#1134]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1135 CWG#1135]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1136 CWG#1136]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1137 CWG#1137]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1138 CWG#1138]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1139 CWG#1139]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1140 CWG#1140]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1142 CWG#1142]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1144 CWG#1144]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1145 CWG#1145]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1146 CWG#1146]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1147 CWG#1147]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1148 CWG#1148]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1149 CWG#1149]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1151 CWG#1151]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1152 CWG#1152]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1153 CWG#1153]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1154 CWG#1154]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1155 CWG#1155]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1156 CWG#1156]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1158 CWG#1158]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1159 CWG#1159]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1160 CWG#1160]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1161 CWG#1161]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1164 CWG#1164]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1165 CWG#1165]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1166 CWG#1166]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1167 CWG#1167]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1168 CWG#1168]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1169 CWG#1169]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1170 CWG#1170]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1171 CWG#1171]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1173 CWG#1173]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1174 CWG#1174]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1175 CWG#1175]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1176 CWG#1176]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1177 CWG#1177]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1178 CWG#1178]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1180 CWG#1180]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1181 CWG#1181]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1182 CWG#1182]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1183 CWG#1183]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1184 CWG#1184]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1185 CWG#1185]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1186 CWG#1186]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1187 CWG#1187]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1188 CWG#1188]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1189 CWG#1189]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1190 CWG#1190]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1191 CWG#1191]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1192 CWG#1192]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1193 CWG#1193]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1194 CWG#1194]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1195 CWG#1195]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1196 CWG#1196]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1197 CWG#1197]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1198 CWG#1198]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1199 CWG#1199]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1201 CWG#1201]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1202 CWG#1202]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1204 CWG#1204]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1206 CWG#1206]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1207 CWG#1207]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1208 CWG#1208]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1210 CWG#1210]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1212 CWG#1212]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1214 CWG#1214]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1215 CWG#1215]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1216 CWG#1216]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1218 CWG#1218]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1219 CWG#1219]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1220 CWG#1220]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1224 CWG#1224]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1225 CWG#1225]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1229 CWG#1229]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1231 CWG#1231]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1232 CWG#1232]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1233 CWG#1233]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1234 CWG#1234]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1235 CWG#1235]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1236 CWG#1236]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1237 CWG#1237]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1238 CWG#1238]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1239 CWG#1239]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1240 CWG#1240]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1241 CWG#1241]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1242 CWG#1242]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1243 CWG#1243]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1244 CWG#1244]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1245 CWG#1245]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1246 CWG#1246]
{{div col end}}
{{div col|6}}
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#23 LWG#23]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#44 LWG#44]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#49 LWG#49]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#76 LWG#76]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#91 LWG#91]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#92 LWG#92]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#98 LWG#98]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#103 LWG#103]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#109 LWG#109]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#117 LWG#117]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#118 LWG#118]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#120 LWG#120]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#123 LWG#123]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#130 LWG#130]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#136 LWG#136]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#149 LWG#149]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#153 LWG#153]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#165 LWG#165]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#167 LWG#167]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#171 LWG#171]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#179 LWG#179]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#180 LWG#180]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#182 LWG#182]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#183 LWG#183]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#184 LWG#184]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#185 LWG#185]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#186 LWG#186]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#187 LWG#187]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#198 LWG#198]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#200 LWG#200]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#201 LWG#201]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#202 LWG#202]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#206 LWG#206]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#214 LWG#214]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#221 LWG#221]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#225 LWG#225]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#226 LWG#226]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#228 LWG#228]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#229 LWG#229]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#230 LWG#230]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#231 LWG#231]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#232 LWG#232]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#233 LWG#233]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#234 LWG#234]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#235 LWG#235]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#237 LWG#237]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#238 LWG#238]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#239 LWG#239]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#240 LWG#240]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#241 LWG#241]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#242 LWG#242]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#243 LWG#243]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#247 LWG#247]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#248 LWG#248]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#250 LWG#250]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#251 LWG#251]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#252 LWG#252]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#253 LWG#253]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#254 LWG#254]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#256 LWG#256]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#258 LWG#258]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#259 LWG#259]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#260 LWG#260]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#261 LWG#261]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#262 LWG#262]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#263 LWG#263]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#264 LWG#264]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#265 LWG#265]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#266 LWG#266]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#268 LWG#268]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#270 LWG#270]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#271 LWG#271]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#272 LWG#272]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#273 LWG#273]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#274 LWG#274]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#275 LWG#275]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#276 LWG#276]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#278 LWG#278]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#280 LWG#280]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#281 LWG#281]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#282 LWG#282]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#283 LWG#283]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#284 LWG#284]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#285 LWG#285]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#286 LWG#286]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#288 LWG#288]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#291 LWG#291]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#292 LWG#292]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#294 LWG#294]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#295 LWG#295]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#296 LWG#296]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#297 LWG#297]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#298 LWG#298]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#300 LWG#300]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#301 LWG#301]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#303 LWG#303]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#305 LWG#305]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#306 LWG#306]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#307 LWG#307]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#308 LWG#308]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#310 LWG#310]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#311 LWG#311]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#312 LWG#312]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#315 LWG#315]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#316 LWG#316]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#317 LWG#317]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#318 LWG#318]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#319 LWG#319]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#320 LWG#320]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#321 LWG#321]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#322 LWG#322]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#324 LWG#324]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#325 LWG#325]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#327 LWG#327]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#328 LWG#328]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#329 LWG#329]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#331 LWG#331]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#333 LWG#333]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#334 LWG#334]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#335 LWG#335]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#336 LWG#336]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#337 LWG#337]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#338 LWG#338]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#339 LWG#339]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#340 LWG#340]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#341 LWG#341]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#345 LWG#345]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#346 LWG#346]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#347 LWG#347]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#349 LWG#349]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#352 LWG#352]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#354 LWG#354]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#355 LWG#355]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#358 LWG#358]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#359 LWG#359]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#360 LWG#360]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#362 LWG#362]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#363 LWG#363]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#364 LWG#364]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#365 LWG#365]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#369 LWG#369]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#370 LWG#370]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#371 LWG#371]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#373 LWG#373]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#375 LWG#375]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#376 LWG#376]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#379 LWG#379]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#380 LWG#380]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#381 LWG#381]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#383 LWG#383]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#384 LWG#384]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#386 LWG#386]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#387 LWG#387]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#389 LWG#389]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#391 LWG#391]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#395 LWG#395]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#396 LWG#396]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#400 LWG#400]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#401 LWG#401]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#402 LWG#402]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#403 LWG#403]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#404 LWG#404]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#405 LWG#405]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#406 LWG#406]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#407 LWG#407]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#409 LWG#409]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#410 LWG#410]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#411 LWG#411]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#412 LWG#412]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#413 LWG#413]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#414 LWG#414]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#415 LWG#415]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#416 LWG#416]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#419 LWG#419]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#420 LWG#420]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#422 LWG#422]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#425 LWG#425]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#426 LWG#426]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#427 LWG#427]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#428 LWG#428]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#430 LWG#430]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#432 LWG#432]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#434 LWG#434]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#435 LWG#435]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#436 LWG#436]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#438 LWG#438]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#441 LWG#441]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#442 LWG#442]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#443 LWG#443]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#444 LWG#444]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#445 LWG#445]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#448 LWG#448]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#449 LWG#449]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#453 LWG#453]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#455 LWG#455]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#456 LWG#456]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#457 LWG#457]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#460 LWG#460]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#461 LWG#461]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#464 LWG#464]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#465 LWG#465]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#467 LWG#467]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#468 LWG#468]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#469 LWG#469]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#471 LWG#471]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#473 LWG#473]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#474 LWG#474]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#475 LWG#475]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#478 LWG#478]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#488 LWG#488]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#495 LWG#495]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#496 LWG#496]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#497 LWG#497]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#498 LWG#498]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#505 LWG#505]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#507 LWG#507]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#508 LWG#508]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#518 LWG#518]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#519 LWG#519]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#520 LWG#520]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#521 LWG#521]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#522 LWG#522]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#524 LWG#524]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#527 LWG#527]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#530 LWG#530]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#531 LWG#531]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#533 LWG#533]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#534 LWG#534]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#535 LWG#535]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#537 LWG#537]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#538 LWG#538]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#539 LWG#539]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#540 LWG#540]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#541 LWG#541]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#542 LWG#542]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#543 LWG#543]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#545 LWG#545]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#550 LWG#550]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#551 LWG#551]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#552 LWG#552]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#556 LWG#556]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#559 LWG#559]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#561 LWG#561]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#562 LWG#562]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#563 LWG#563]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#564 LWG#564]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#565 LWG#565]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#566 LWG#566]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#567 LWG#567]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#574 LWG#574]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#575 LWG#575]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#576 LWG#576]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#577 LWG#577]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#578 LWG#578]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#581 LWG#581]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#586 LWG#586]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#589 LWG#589]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#593 LWG#593]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#595 LWG#595]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#596 LWG#596]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#607 LWG#607]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#608 LWG#608]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#609 LWG#609]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#610 LWG#610]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#611 LWG#611]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#612 LWG#612]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#613 LWG#613]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#616 LWG#616]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#618 LWG#618]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#619 LWG#619]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#620 LWG#620]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#621 LWG#621]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#622 LWG#622]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#623 LWG#623]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#624 LWG#624]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#628 LWG#628]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#629 LWG#629]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#630 LWG#630]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#634 LWG#634]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#638 LWG#638]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#640 LWG#640]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#643 LWG#643]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#646 LWG#646]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#650 LWG#650]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#651 LWG#651]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#652 LWG#652]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#654 LWG#654]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#655 LWG#655]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#659 LWG#659]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#660 LWG#660]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#661 LWG#661]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#664 LWG#664]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#665 LWG#665]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#666 LWG#666]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#671 LWG#671]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#672 LWG#672]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#673 LWG#673]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#674 LWG#674]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#675 LWG#675]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#676 LWG#676]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#677 LWG#677]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#678 LWG#678]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#679 LWG#679]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#680 LWG#680]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#681 LWG#681]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#682 LWG#682]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#685 LWG#685]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#687 LWG#687]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#688 LWG#688]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#689 LWG#689]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#691 LWG#691]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#692 LWG#692]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#693 LWG#693]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#694 LWG#694]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#695 LWG#695]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#696 LWG#696]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#698 LWG#698]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#699 LWG#699]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#700 LWG#700]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#703 LWG#703]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#704 LWG#704]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#705 LWG#705]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#706 LWG#706]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#709 LWG#709]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#710 LWG#710]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#711 LWG#711]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#712 LWG#712]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#713 LWG#713]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#714 LWG#714]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#715 LWG#715]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#716 LWG#716]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#720 LWG#720]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#722 LWG#722]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#723 LWG#723]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#724 LWG#724]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#727 LWG#727]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#728 LWG#728]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#734 LWG#734]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#740 LWG#740]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#743 LWG#743]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#744 LWG#744]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#746 LWG#746]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#749 LWG#749]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#752 LWG#752]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#753 LWG#753]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#755 LWG#755]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#758 LWG#758]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#759 LWG#759]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#761 LWG#761]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#762 LWG#762]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#765 LWG#765]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#766 LWG#766]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#768 LWG#768]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#769 LWG#769]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#770 LWG#770]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#771 LWG#771]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#772 LWG#772]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#774 LWG#774]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#775 LWG#775]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#776 LWG#776]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#777 LWG#777]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#778 LWG#778]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#779 LWG#779]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#780 LWG#780]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#781 LWG#781]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#782 LWG#782]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#783 LWG#783]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#787 LWG#787]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#788 LWG#788]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#789 LWG#789]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#792 LWG#792]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#798 LWG#798]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#804 LWG#804]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#805 LWG#805]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#806 LWG#806]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#807 LWG#807]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#808 LWG#808]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#809 LWG#809]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#810 LWG#810]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#811 LWG#811]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#813 LWG#813]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#814 LWG#814]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#817 LWG#817]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#818 LWG#818]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#819 LWG#819]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#820 LWG#820]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#821 LWG#821]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#824 LWG#824]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#829 LWG#829]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#835 LWG#835]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#836 LWG#836]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#838 LWG#838]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#842 LWG#842]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#843 LWG#843]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#844 LWG#844]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#845 LWG#845]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#846 LWG#846]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#847 LWG#847]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#848 LWG#848]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#850 LWG#850]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#852 LWG#852]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#853 LWG#853]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#854 LWG#854]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#856 LWG#856]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#857 LWG#857]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#858 LWG#858]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#859 LWG#859]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#860 LWG#860]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#861 LWG#861]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#865 LWG#865]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#866 LWG#866]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#868 LWG#868]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#869 LWG#869]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#870 LWG#870]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#871 LWG#871]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#872 LWG#872]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#876 LWG#876]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#878 LWG#878]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#881 LWG#881]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#882 LWG#882]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#883 LWG#883]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#885 LWG#885]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#886 LWG#886]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#888 LWG#888]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#890 LWG#890]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#891 LWG#891]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#893 LWG#893]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#894 LWG#894]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#896 LWG#896]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#898 LWG#898]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#899 LWG#899]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#900 LWG#900]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#904 LWG#904]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#907 LWG#907]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#909 LWG#909]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#911 LWG#911]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#920 LWG#920]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#921 LWG#921]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#922 LWG#922]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#925 LWG#925]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#929 LWG#929]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#931 LWG#931]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#934 LWG#934]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#938 LWG#938]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#939 LWG#939]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#943 LWG#943]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#948 LWG#948]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#949 LWG#949]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#951 LWG#951]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#954 LWG#954]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#956 LWG#956]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#957 LWG#957]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#960 LWG#960]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#962 LWG#962]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#963 LWG#963]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#965 LWG#965]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#967 LWG#967]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#968 LWG#968]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#970 LWG#970]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#974 LWG#974]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#975 LWG#975]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#978 LWG#978]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#981 LWG#981]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#982 LWG#982]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#984 LWG#984]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#986 LWG#986]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#987 LWG#987]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#990 LWG#990]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#991 LWG#991]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#993 LWG#993]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#994 LWG#994]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#997 LWG#997]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#998 LWG#998]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#999 LWG#999]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1004 LWG#1004]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1006 LWG#1006]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1011 LWG#1011]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1012 LWG#1012]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1014 LWG#1014]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1019 LWG#1019]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1021 LWG#1021]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1030 LWG#1030]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1033 LWG#1033]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1034 LWG#1034]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1037 LWG#1037]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1038 LWG#1038]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1039 LWG#1039]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1040 LWG#1040]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1044 LWG#1044]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1045 LWG#1045]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1065 LWG#1065]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1066 LWG#1066]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1070 LWG#1070]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1071 LWG#1071]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1073 LWG#1073]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1079 LWG#1079]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1089 LWG#1089]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1094 LWG#1094]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1095 LWG#1095]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1097 LWG#1097]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1098 LWG#1098]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1103 LWG#1103]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1104 LWG#1104]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1108 LWG#1108]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1110 LWG#1110]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1113 LWG#1113]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1114 LWG#1114]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1118 LWG#1118]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1123 LWG#1123]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1126 LWG#1126]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1130 LWG#1130]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1131 LWG#1131]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1133 LWG#1133]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1134 LWG#1134]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1136 LWG#1136]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1137 LWG#1137]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1138 LWG#1138]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1144 LWG#1144]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1152 LWG#1152]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1157 LWG#1157]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1158 LWG#1158]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1159 LWG#1159]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1170 LWG#1170]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1171 LWG#1171]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1177 LWG#1177]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1178 LWG#1178]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1180 LWG#1180]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1181 LWG#1181]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1182 LWG#1182]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1183 LWG#1183]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1187 LWG#1187]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1189 LWG#1189]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1191 LWG#1191]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1192 LWG#1192]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1193 LWG#1193]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1194 LWG#1194]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1195 LWG#1195]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1197 LWG#1197]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1198 LWG#1198]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1199 LWG#1199]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1204 LWG#1204]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1205 LWG#1205]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1206 LWG#1206]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1207 LWG#1207]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1208 LWG#1208]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1209 LWG#1209]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1215 LWG#1215]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1216 LWG#1216]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1218 LWG#1218]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1220 LWG#1220]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1221 LWG#1221]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1222 LWG#1222]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1227 LWG#1227]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1231 LWG#1231]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1234 LWG#1234]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1237 LWG#1237]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1240 LWG#1240]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1241 LWG#1241]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1245 LWG#1245]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1247 LWG#1247]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1249 LWG#1249]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1250 LWG#1250]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1252 LWG#1252]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1253 LWG#1253]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1254 LWG#1254]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1255 LWG#1255]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1256 LWG#1256]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1257 LWG#1257]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1261 LWG#1261]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1262 LWG#1262]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1264 LWG#1264]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1267 LWG#1267]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1270 LWG#1270]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1271 LWG#1271]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1276 LWG#1276]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1277 LWG#1277]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1278 LWG#1278]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1279 LWG#1279]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1280 LWG#1280]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1284 LWG#1284]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1285 LWG#1285]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1286 LWG#1286]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1287 LWG#1287]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1288 LWG#1288]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1292 LWG#1292]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1294 LWG#1294]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1295 LWG#1295]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1298 LWG#1298]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1299 LWG#1299]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1303 LWG#1303]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1306 LWG#1306]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1309 LWG#1309]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1310 LWG#1310]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1312 LWG#1312]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1316 LWG#1316]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1319 LWG#1319]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1323 LWG#1323]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1325 LWG#1325]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1332 LWG#1332]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1333 LWG#1333]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1334 LWG#1334]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1335 LWG#1335]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1337 LWG#1337]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1338 LWG#1338]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1339 LWG#1339]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1340 LWG#1340]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1349 LWG#1349]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1354 LWG#1354]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1360 LWG#1360]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1362 LWG#1362]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1363 LWG#1363]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1367 LWG#1367]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1368 LWG#1368]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1370 LWG#1370]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1372 LWG#1372]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1381 LWG#1381]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1384 LWG#1384]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1385 LWG#1385]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1386 LWG#1386]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1387 LWG#1387]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1388 LWG#1388]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1399 LWG#1399]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1400 LWG#1400]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1401 LWG#1401]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1402 LWG#1402]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1403 LWG#1403]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1404 LWG#1404]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1408 LWG#1408]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1414 LWG#1414]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1416 LWG#1416]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1417 LWG#1417]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1418 LWG#1418]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1420 LWG#1420]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1423 LWG#1423]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1424 LWG#1424]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1425 LWG#1425]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1426 LWG#1426]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1427 LWG#1427]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1428 LWG#1428]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1429 LWG#1429]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1430 LWG#1430]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1431 LWG#1431]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1432 LWG#1432]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1435 LWG#1435]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1436 LWG#1436]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1437 LWG#1437]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1438 LWG#1438]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1439 LWG#1439]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1440 LWG#1440]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1441 LWG#1441]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1448 LWG#1448]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1449 LWG#1449]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1474 LWG#1474]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1478 LWG#1478]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1479 LWG#1479]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1480 LWG#1480]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1487 LWG#1487]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1494 LWG#1494]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1497 LWG#1497]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1514 LWG#1514]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1516 LWG#1516]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1517 LWG#1517]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1518 LWG#1518]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1519 LWG#1519]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1520 LWG#1520]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1522 LWG#1522]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1524 LWG#1524]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1525 LWG#1525]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2000 LWG#2000]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2001 LWG#2001]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2004 LWG#2004]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2007 LWG#2007]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2008 LWG#2008]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2014 LWG#2014]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2017 LWG#2017]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2019 LWG#2019]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2020 LWG#2020]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2022 LWG#2022]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2027 LWG#2027]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2029 LWG#2029]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2030 LWG#2030]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2031 LWG#2031]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2032 LWG#2032]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2041 LWG#2041]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2042 LWG#2042]
{{div col end}}
{{collapse bottom}}
* 2011 Decimal floating-point TR (ISO/IEC TR 24733:2011) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=38843 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf 2009 draft])
This TR implements the decimal floating-point types from IEEE 754-2008 Standard for Floating-Point Arithmetic: std::decimal::decimal32, std::decimal::decimal64, and std::decimal::decimal128.
* 2012 [http://isocpp.org The Standard C++ Foundation] founded
* 2013 The C++ Programming Language, 4th edition
* 2014 {{ttb|C++14}} ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64029 ISO Store]) ([https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true 2014 final draft])
Minor revision of the C++ standard
# New language features: {{rlp|variable template}}s, {{rlp|lambda|polymorphic lambdas}}, lambda captures expressions, new/delete elision&lt;!-- 5.3.4[expr.new]/10 &quot;An implementation is allowed to omit a call...&quot; --&gt;, {{rlp|constexpr|relaxed restrictions on constexpr functions}}, {{rlp|integer literal|binary literals}}, digit separators, {{rlp|function#Return type deduction (since C++14)|return type deduction for functions}}, {{rlp|aggregate initialization}} for classes with brace-or-equal initializers.
# New library features: {{lc|std::make_unique}}, {{lc|std::shared_timed_mutex}} and {{lc|std::shared_lock}}, {{lc|std::integer_sequence}}, {{lc|std::exchange}}, {{lc|std::quoted}}, and many small improvements to existing library facilities, such as two-range overloads for some algorithms, type alias versions of type traits, user-defined string, duration, and complex number literals, etc.
{{collapse top|Defect Reports fixed in C++14 (276 core, 149 library)}}
{{div col|6}}
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#129 CWG#129]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#223 CWG#223]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#240 CWG#240]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#292 CWG#292]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#312 CWG#312]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#332 CWG#332]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#342 CWG#342]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#344 CWG#344]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#388 CWG#388]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#462 CWG#462]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#482 CWG#482]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#483 CWG#483]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#496 CWG#496]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#535 CWG#535]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#539 CWG#539]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#565 CWG#565]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#577 CWG#577]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#583 CWG#583]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#597 CWG#597]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#616 CWG#616]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#623 CWG#623]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#631 CWG#631]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#675 CWG#675]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#712 CWG#712]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#729 CWG#729]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#739 CWG#739]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#755 CWG#755]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#903 CWG#903]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#912 CWG#912]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#974 CWG#974]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#975 CWG#975]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#977 CWG#977]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1003 CWG#1003]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1013 CWG#1013]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1024 CWG#1024]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1048 CWG#1048]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1059 CWG#1059]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1093 CWG#1093]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1213 CWG#1213]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1226 CWG#1226]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1227 CWG#1227]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1250 CWG#1250]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1251 CWG#1251]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1260 CWG#1260]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1261 CWG#1261]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1262 CWG#1262]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1264 CWG#1264]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1265 CWG#1265]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1267 CWG#1267]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1268 CWG#1268]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1269 CWG#1269]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1270 CWG#1270]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1275 CWG#1275]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1282 CWG#1282]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1287 CWG#1287]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1288 CWG#1288]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1290 CWG#1290]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1293 CWG#1293]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1295 CWG#1295]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1296 CWG#1296]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1297 CWG#1297]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1298 CWG#1298]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1301 CWG#1301]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1302 CWG#1302]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1305 CWG#1305]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1306 CWG#1306]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1307 CWG#1307]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1308 CWG#1308]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1310 CWG#1310]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1311 CWG#1311]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1312 CWG#1312]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1313 CWG#1313]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1318 CWG#1318]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1320 CWG#1320]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1321 CWG#1321]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1324 CWG#1324]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1327 CWG#1327]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1328 CWG#1328]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1329 CWG#1329]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1330 CWG#1330]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1333 CWG#1333]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1336 CWG#1336]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1340 CWG#1340]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1344 CWG#1344]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1345 CWG#1345]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1346 CWG#1346]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1347 CWG#1347]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1350 CWG#1350]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1352 CWG#1352]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1354 CWG#1354]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1355 CWG#1355]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1357 CWG#1357]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1358 CWG#1358]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1359 CWG#1359]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1361 CWG#1361]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1362 CWG#1362]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1363 CWG#1363]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1364 CWG#1364]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1365 CWG#1365]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1366 CWG#1366]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1367 CWG#1367]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1368 CWG#1368]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1369 CWG#1369]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1370 CWG#1370]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1372 CWG#1372]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1374 CWG#1374]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1375 CWG#1375]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1376 CWG#1376]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1380 CWG#1380]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1381 CWG#1381]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1382 CWG#1382]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1383 CWG#1383]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1385 CWG#1385]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1387 CWG#1387]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1388 CWG#1388]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1392 CWG#1392]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1394 CWG#1394]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1398 CWG#1398]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1399 CWG#1399]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1401 CWG#1401]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1402 CWG#1402]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1405 CWG#1405]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1406 CWG#1406]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1408 CWG#1408]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1409 CWG#1409]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1410 CWG#1410]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1411 CWG#1411]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1412 CWG#1412]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1413 CWG#1413]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1415 CWG#1415]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1416 CWG#1416]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1417 CWG#1417]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1418 CWG#1418]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1423 CWG#1423]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1424 CWG#1424]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1425 CWG#1425]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1428 CWG#1428]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1431 CWG#1431]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1435 CWG#1435]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1437 CWG#1437]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1438 CWG#1438]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1439 CWG#1439]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1440 CWG#1440]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1441 CWG#1441]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1442 CWG#1442]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1447 CWG#1447]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1449 CWG#1449]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1450 CWG#1450]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1453 CWG#1453]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1454 CWG#1454]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1455 CWG#1455]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1456 CWG#1456]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1457 CWG#1457]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1458 CWG#1458]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1460 CWG#1460]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1462 CWG#1462]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1464 CWG#1464]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1466 CWG#1466]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1471 CWG#1471]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1472 CWG#1472]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1473 CWG#1473]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1475 CWG#1475]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1476 CWG#1476]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1477 CWG#1477]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1479 CWG#1479]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1480 CWG#1480]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1481 CWG#1481]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1482 CWG#1482]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1487 CWG#1487]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1489 CWG#1489]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1491 CWG#1491]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1493 CWG#1493]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1494 CWG#1494]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1495 CWG#1495]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1502 CWG#1502]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1503 CWG#1503]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1504 CWG#1504]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1506 CWG#1506]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1507 CWG#1507]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1508 CWG#1508]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1509 CWG#1509]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1510 CWG#1510]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1511 CWG#1511]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1512 CWG#1512]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1514 CWG#1514]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1515 CWG#1515]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1516 CWG#1516]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1522 CWG#1522]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1527 CWG#1527]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1528 CWG#1528]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1531 CWG#1531]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1532 CWG#1532]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1533 CWG#1533]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1535 CWG#1535]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1537 CWG#1537]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1538 CWG#1538]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1539 CWG#1539]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1541 CWG#1541]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1543 CWG#1543]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1544 CWG#1544]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1550 CWG#1550]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1551 CWG#1551]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1553 CWG#1553]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1556 CWG#1556]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1557 CWG#1557]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1559 CWG#1559]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1560 CWG#1560]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1562 CWG#1562]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1563 CWG#1563]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1567 CWG#1567]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1569 CWG#1569]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1570 CWG#1570]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1575 CWG#1575]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1576 CWG#1576]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1579 CWG#1579]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1583 CWG#1583]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1587 CWG#1587]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1588 CWG#1588]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1592 CWG#1592]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1593 CWG#1593]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1595 CWG#1595]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1597 CWG#1597]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1598 CWG#1598]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1601 CWG#1601]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1604 CWG#1604]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1605 CWG#1605]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1607 CWG#1607]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1608 CWG#1608]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1611 CWG#1611]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1612 CWG#1612]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1613 CWG#1613]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1618 CWG#1618]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1629 CWG#1629]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1648 CWG#1648]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1649 CWG#1649]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1658 CWG#1658]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1660 CWG#1660]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1662 CWG#1662]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1664 CWG#1664]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1666 CWG#1666]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1669 CWG#1669]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1673 CWG#1673]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1674 CWG#1674]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1681 CWG#1681]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1684 CWG#1684]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1687 CWG#1687]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1689 CWG#1689]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1690 CWG#1690]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1691 CWG#1691]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1692 CWG#1692]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1693 CWG#1693]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1707 CWG#1707]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1716 CWG#1716]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1717 CWG#1717]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1732 CWG#1732]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1737 CWG#1737]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1738 CWG#1738]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1739 CWG#1739]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1740 CWG#1740]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1741 CWG#1741]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1746 CWG#1746]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1747 CWG#1747]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1759 CWG#1759]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1760 CWG#1760]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1762 CWG#1762]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1764 CWG#1764]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1765 CWG#1765]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1767 CWG#1767]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1769 CWG#1769]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1770 CWG#1770]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1772 CWG#1772]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1773 CWG#1773]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1775 CWG#1775]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1778 CWG#1778]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1786 CWG#1786]
* [http://open-std.org/JTC1/SC22/WG21/docs/cwg_status.html#1787 CWG#1787]
{{div col end}}
{{div col|6}}
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1214 LWG#1214]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#1450 LWG#1450]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2003 LWG#2003]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2005 LWG#2005]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2009 LWG#2009]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2010 LWG#2010]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2011 LWG#2011]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2013 LWG#2013]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2015 LWG#2015]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2018 LWG#2018]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2021 LWG#2021]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2028 LWG#2028]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2033 LWG#2033]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2039 LWG#2039]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2044 LWG#2044]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2045 LWG#2045]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2047 LWG#2047]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2048 LWG#2048]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2049 LWG#2049]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2050 LWG#2050]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2053 LWG#2053]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2056 LWG#2056]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2058 LWG#2058]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2061 LWG#2061]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2064 LWG#2064]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2065 LWG#2065]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2067 LWG#2067]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2069 LWG#2069]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2071 LWG#2071]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2074 LWG#2074]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2078 LWG#2078]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2080 LWG#2080]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2081 LWG#2081]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2083 LWG#2083]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2085 LWG#2085]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2086 LWG#2086]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2087 LWG#2087]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2091 LWG#2091]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2092 LWG#2092]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2093 LWG#2093]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2094 LWG#2094]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2096 LWG#2096]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2097 LWG#2097]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2098 LWG#2098]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2099 LWG#2099]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2100 LWG#2100]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2102 LWG#2102]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2103 LWG#2103]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2104 LWG#2104]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2105 LWG#2105]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2109 LWG#2109]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2110 LWG#2110]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2112 LWG#2112]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2120 LWG#2120]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2122 LWG#2122]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2123 LWG#2123]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2128 LWG#2128]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2130 LWG#2130]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2132 LWG#2132]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2135 LWG#2135]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2138 LWG#2138]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2140 LWG#2140]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2141 LWG#2141]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2142 LWG#2142]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2143 LWG#2143]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2144 LWG#2144]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2145 LWG#2145]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2147 LWG#2147]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2148 LWG#2148]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2149 LWG#2149]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2150 LWG#2150]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2159 LWG#2159]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2162 LWG#2162]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2163 LWG#2163]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2169 LWG#2169]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2172 LWG#2172]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2174 LWG#2174]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2175 LWG#2175]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2176 LWG#2176]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2177 LWG#2177]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2180 LWG#2180]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2182 LWG#2182]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2185 LWG#2185]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2186 LWG#2186]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2187 LWG#2187]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2188 LWG#2188]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2190 LWG#2190]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2193 LWG#2193]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2194 LWG#2194]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2196 LWG#2196]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2197 LWG#2197]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2200 LWG#2200]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2203 LWG#2203]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2205 LWG#2205]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2207 LWG#2207]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2209 LWG#2209]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2210 LWG#2210]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2211 LWG#2211]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2213 LWG#2213]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2222 LWG#2222]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2225 LWG#2225]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2229 LWG#2229]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2231 LWG#2231]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2235 LWG#2235]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2246 LWG#2246]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2247 LWG#2247]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2252 LWG#2252]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2257 LWG#2257]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2258 LWG#2258]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2263 LWG#2263]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2268 LWG#2268]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2271 LWG#2271]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2272 LWG#2272]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2275 LWG#2275]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2278 LWG#2278]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2280 LWG#2280]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2284 LWG#2284]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2285 LWG#2285]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2288 LWG#2288]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2291 LWG#2291]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2293 LWG#2293]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2298 LWG#2298]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2299 LWG#2299]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2300 LWG#2300]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2301 LWG#2301]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2304 LWG#2304]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2306 LWG#2306]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2308 LWG#2308]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2313 LWG#2313]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2314 LWG#2314]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2315 LWG#2315]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2316 LWG#2316]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2317 LWG#2317]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2320 LWG#2320]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2322 LWG#2322]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2323 LWG#2323]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2324 LWG#2324]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2329 LWG#2329]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2330 LWG#2330]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2332 LWG#2332]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2339 LWG#2339]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2341 LWG#2341]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2344 LWG#2344]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2346 LWG#2346]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2350 LWG#2350]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2356 LWG#2356]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2357 LWG#2357]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2359 LWG#2359]
* [http://open-std.org/JTC1/SC22/WG21/docs/lwg-status.html#2360 LWG#2360]
{{div col end}}
{{collapse bottom}}
*2015 Filesystem library TS (ISO/IEC TS 18822:2015) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=63483 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf 2014 draft])
This TS is an experimental C++ library extension that specifies a filesystem library based on boost.filesystem V3 (with some modifications and extensions). This TS was merged into C++17.
*2015 Extensions for Parallelism TS (ISO/IEC TS 19570:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65241 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4507.pdf 2015 draft])
This TS standardizes parallel and vector-parallel API for all standard library algorithms, as well as adds new algorithms such as {{tt|reduce}}, {{tt|transform_reduce}}, or {{tt|exclusive_scan}}. This TS was merged into C++17.
*2015 Extensions for Transactional Memory TS (ISO/IEC TS 19841:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=66343 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf 2015 draft])
This TS extends the C++ core language with synchronized and atomic blocks, as well as transaction-safe functions, which implement transactional memory semantics.
*2015 Extensions for Library Fundamentals TS (ISO/IEC TS 19568:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65238 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html 2015 draft])
This TS adds several new components to the C++ standard library: {{ltt|cpp/experimental/optional|optional}}, {{ltt|cpp/experimental/any|any}}, {{ltt|cpp/experimental/basic_string_view|string_view}}, {{ltt|cpp/experimental/sample|sample}}, {{ltt|cpp/experimental/search|search}}, {{ltt|cpp/experimental/apply|apply}}, [[cpp/experimental/lib_extensions#Type-erased_and_polymorphic_allocators|polymorphic allocators]], and [[cpp/experimental/lib_extensions|variable templates]] for type traits. This TS was merged into C++17.
*2015 Extensions for Concepts TS (ISO/IEC TS 19217:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64031 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4553.pdf 2015 draft])
This TS extends the C++ core language with concepts (named type requirements) and constraints (limits on the types allowed in template, function, and variable declarations), which aids metaprogramming and simplifies template instantiation diagnostics, see {{rlp|concepts}}
*2016 Extensions for Concurrency TS (ISO/IEC TS 19571:2016) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65242 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0159r0.html 2015 draft])
This TS extends the C++ library to include [[cpp/experimental/concurrency|several extensions]] to std::future, latches and barriers, and atomic smart pointers.

===Future development===
* [[cpp/experimental|Experimental technical specifications]] (Networking, Ranges, Modules, Numerics, versions 2 of Library Extensions, Parallelism, Concurrency)
* 2017 C++17 ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf n4659 (2017-03-21 final draft)])
The next major revision of the C++ standard
#  Language changes: {{rlp|fold|fold-expressions}}, {{rlp|class template deduction}} ({{c|1=std::vector v = {1,2,3};}}), auto non-type {{rlp|template parameters}} ({{c|template &lt;auto v&gt; struct B}}), compile-time {{rlp|if|if constexpr}}, {{rlp|inline|inline variables}}, [[cpp/language/declarations#Structured_binding_declaration|structured bindings]] ({{c|1=auto [a,b] = f();}}), initializers for {{rlp|if}} and {{rlp|switch}} {{c|if(init;condition)}} and {{c|switch(init;condition)}}, {{rlp|character literal|u8-char}}, simplified {{rlp|namespace|nested namespaces}}, {{rlp|namespace|using-declaration}} can declare multiple names, made {{rlp|noexcept_spec|noexcept}} part of type system, [[cpp/memory/new/operator_new|allocation functions]] with explicit alignment, guaranteed {{rlp|copy elision}}, [[cpp/preprocessor/include|__has_include]], {{rlp|lambda#Lambda_capture|lambda capture of *this}}, {{rlp|lambda|constexpr lambda}}, {{rlp|attributes|attribute namespaces}} don't have to repeat, new {{rlp|attributes}} &lt;nowiki&gt;[[&lt;/nowiki&gt;fallthrough]], &lt;nowiki&gt;[[&lt;/nowiki&gt;nodiscard]], and &lt;nowiki&gt;[[&lt;/nowiki&gt;maybe_unused]]. Removed {{rlp|operator_alternative|trigraphs}}, the {{ltt|cpp/keyword/register|register}} keyword, {{rlp|operator_incdec|bool increment}}
# Library changes:
# {{ltt|cpp/utility/variant|std::variant}}, {{ltt|cpp/utility/launder|std::launder}}, uninitialized memory tools ({{ltt|cpp/memory/destroy_at|std::destroy_at}}/{{ltt|cpp/memory/destroy|std::destroy}}/{{ltt|cpp/memory/destroy_n|std::destroy_n}}, {{ltt|cpp/memory/uninitialized_move|std::uninitialized_move}}, {{ltt|cpp/memory/uninitialized_value_construct|std::uninitialized_value_construct}}, etc), map/set {{ltt|cpp/container/map/extract|extract}} and map/set {{ltt|cpp/container/map/merge|merge}}, {{ltt|cpp/types/byte|byte}},  {{ltt|cpp/utility/make_from_tuple|std::make_from_tuple}}, {{ltt|cpp/utility/to_chars|std::to_chars}}/{{ltt|cpp/utility/from_chars|from_chars}}, relative path support in Filesystem ({{ltt|cpp/filesystem/relative|proximate}}, {{ltt|cpp/filesystem/relative|relative}}, {{ltt|cpp/filesystem/canonical|weakly_canonical}}), directory entry caching in Filesystem, contiguous iterators, non-member {{ltt|cpp/iterator/size|size}}/{{ltt|cpp/iterator/empty|empty}}/{{ltt|cpp/iterator/data|data}}, map/unordered_map {{ltt|cpp/container/map/try_emplace|try_emplace}} and {{ltt|cpp/container/map/insert_or_assign|insert_or_assign}}, {{ltt|cpp/error/uncaught_exception|uncaught_exceptions}}, variadic {{ltt|cpp/thread/lock_guard|lock_guard}}, {{ltt|cpp/utility/as_const|as_const}}, {{ltt|cpp/types/conjunction|conjunction}}/{{ltt|cpp/types/disjunction|disjunction}}/{{ltt|cpp/types/negation|negation}}, [[cpp/types|type trait]] variables xxx_v, transparent {{ltt|cpp/memory/owner_less|owner_less}}, rounding functions for {{ltt|cpp/chrono/duration|duration}} and {{ltt|cpp/chrono/time_point|time_point}}, array support for {{lc|std::shared_ptr}}, {{ltt|cpp/utility/functional/not_fn|not_fn}}, {{ltt|cpp/memory/enable_shared_from_this/weak_from_this|weak_from_this}}, {{ltt|cpp/atomic/atomic/is_always_lock_free|is_always_lock_free}}, {{ltt|cpp/types/is_swappable|is_swappable}}, {{ltt|cpp/algorithm/clamp|clamp}}, {{ltt|cpp/numeric/math/hypot|3D hypot}}, {{ltt|cpp/thread/hardware_destructive_interference_size|cache line interface}}, {{ltt|cpp/types/is_invocable|is_invocable}}, {{ltt|cpp/types/is_aggregate|is_aggregate}}, {{ltt|cpp/types/has_unique_object_representations|has_unique_object_representations}}. Deprecated {{tt|std::iterator}}, {{tt|std::raw_storage_iterator}}, {{tt|std::get_temporary_buffer}}, {{tt|std::is_literal_type}}, {{tt|std::result_of}}, all of {{tt|&lt;codecvt&gt;}} Removed {{ltt|cpp/memory/auto_ptr|auto_ptr}}, the [[cpp/utility/functional#Old_binders_and_adaptors|deprecated function objects]], {{lc|std::random_shuffle}}, {{lc|std::unexpected}}, the [[cpp/io/ios_base#Deprecated_member_types|obsolete iostreams aliases]].
# From TS's: the [[cpp/filesystem|filesystem library]], the library fundamentals v1 (including {{ltt|cpp/utility/optional|optional}}, {{ltt|cpp/utility/any|any}}, {{ltt|cpp/string/basic_string_view|string_view}}, [[cpp/memory#Allocators|polymorphic allocators]], [[cpp/utility/functional#Searchers|searchers]], {{ltt|cpp/utility/apply}}), parallelism v1 (including [[cpp/algorithm/execution_policy_tag_t|execution policies]], {{ltt|cpp/algorithm/reduce|reduce}}, {{ltt|cpp/algorithm/inclusive_scan|inclusive_scan}}, {{ltt|cpp/algorithm/exclusive_scan|exclusive_scan}}), but removing {{tt|exception_list}}. From special math IS: [[cpp/numeric/special_math|special mathematical functions]], from library fundamentals v2: {{ltt|cpp/numeric/gcd|std::gcd}}, {{ltt|cpp/numeric/lcm|std::lcm}}
# From C11: {{ltt|cpp/memory/c/aligned_alloc|std::aligned_alloc}}, {{ltt|cpp/chrono/c/timespec_get|std::timespec_get}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/history |History of C}}
{{dsc end}}

===External links===
*[http://www.stroustrup.com/hopl2.pdf A History of C++: 1979-1991]
*[http://www.stroustrup.com/hopl-almost-final.pdf Evolving a language in and for the real world: C++ 1991-2006]
*[http://isocpp.org Standard C++ foundation]
*[[:enwiki:C++#History | C++ on Wikipedia]]
*[http://www.open-std.org/jtc1/sc22/wg21/ C++ Standards Committee]

[[de:cpp/language/history]]
[[es:cpp/language/history]]
[[fr:cpp/language/history]]
[[it:cpp/language/history]]
[[ja:cpp/language/history]]
[[pt:cpp/language/history]]
[[ru:cpp/language/history]]
[[zh:cpp/language/history]]</text>
      <sha1>6rxcawwoc9q41w00sp6xvoi86ghbjtk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/identifiers</title>
    <ns>0</ns>
    <id>9902</id>
    <revision>
      <id>85210</id>
      <parentid>83563</parentid>
      <timestamp>2016-04-07T23:37:32Z</timestamp>
      <contributor>
        <username>Tmcleod</username>
        <id>3750</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="10029">{{title|Identifiers}}
{{cpp/language/basics/navbar}}
An ''identifier'' is an arbitrarily long sequence of digits, underscores, lowercase and uppercase Latin letters, and most Unicode characters (see below for details). A valid identifier must begin with a non-digit character (Latin letter, underscore, or Unicode non-digit character). Identifiers are case-sensitive (lowercase and uppercase letters are distinct), and every character is significant.

Note: C++ grammar formally requires Unicode characters to be {{rlp|escape}}d with {{tt|\u}} or {{tt|\U}}, but due to {{rlp|translation phases|translation phase 1}}, that is exactly how raw unicode characters from the source code are presented to the compiler. Also note that support of this feature may be limited, e.g. [https://gcc.gnu.org/wiki/FAQ#What_is_the_status_of_adding_the_UTF-8_support_for_identifier_names_in_GCC.3F gcc]

===In declarations===
An identifier can be used {{rlp|declarations|to name}} objects, references, functions, enumerators, types, class members, namespaces, templates, template specializations, parameter packs, goto labels, and other entities, with the following exceptions:
* the identifiers that are [[cpp/keyword|keywords]] cannot be used for other purposes;
* the identifiers with a double underscore anywhere are reserved;
* the identifiers that begin with an underscore followed by an uppercase letter are reserved;
* the identifiers that begin with an underscore are reserved in the global namespace.

&quot;Reserved&quot; here means that the standard library headers #define or declare such identifiers for their internal needs, the compiler may predefine non-standard identifiers of that kind, and that name mangling algorithm may assume that some of these identifiers are not in use. If the programmer uses such identifiers, the behavior is undefined.

In addition, it's undefined behavior to #define or #undef names identical to [[cpp/keywords|keywords]]. If at least one standard library header is included, it's undefined behavior to #define or #undef identifiers identical to names declared in any standard library header.

{{todo|+other contents of 17.6.4.3 [reserved.names]}}

===In expressions===
An identifier that names a variable, a function, or an enumerator can be used as an {{rlp|expressions|expression}}. The expression consisting of just the identifier returns the entity named by the identifier. The {{rlp|value category}} of the expression is ''lvalue'' if the identifier names a function, a variable, or a data member, and ''prvalue'' otherwise (e.g. an {{rlp|enum|enumerator}} is a prvalue expression).

Within the body of a non-static {{rlp|member functions|member function}}, each identifier that names a non-static member is implicitly transformed to a class member access expression {{c|this-&gt;member}}.

====Unqualified identifiers====
Besides suitably declared identifiers, the following can be used in expressions in the same role:
* an {{rlp|operators|overloaded operator}} name in function notation, such as {{c|operator+}} or {{c|operator new}};
* a {{rlp|cast operator|user-defined conversion function}} name, such as {{c|operator bool}};
* a {{rlp|user literal|user-defined literal operator}} name, such as {{c|operator &quot;&quot; _km}};
* a {{rlp|templates|template}} name followed by its argument list, such as {{c|MyTemplate&lt;int&gt;}};
* the character {{c|~}} followed by a class name, such as {{c|~MyClass}};
* the character {{c|~}} followed by a {{rlp|decltype}} specifier, such as {{c|~decltype(str)}}.

Together with identifiers they are known as ''unqualified id-expressions''.

====Qualified identifiers====
A ''qualified id-expression'' is an unqualified id-expression prepended by a scope resolution operator {{c|::}}, and optionally, a sequence of {{rev inl|since=c++11|enumeration, }}class or namespace names {{rev inl|since=c++11|or {{lc|decltype}} expressions}} separated by scope resolution operators. For example, the expression {{c|std::string::npos}} is an expression that names the static member {{c|npos}} in the class {{c|string}} in namespace {{c|std}}. The expression {{c|::tolower}} names the function {{c|tolower}} in the global namespace. The expression {{c|::std::cout}} names the global variable {{c|cout}} in namespace {{c|std}}, which is a top-level namespace. The expression {{c|boost::signals2::connection}} names the type {{c|connection}} declared in namespace {{c|signals2}}, which is declared in namespace {{c|boost}}.

The keyword {{ltt|cpp/keyword/template|template}} may appear in qualified identifiers as necessary to disambiguate {{rlp|dependent_name|dependent template names}}.

See {{rlp|lookup#Qualified lookup|qualified lookup}} for the details of the name lookup for qualified identifiers.

===Names===
A ''name'' is the use of one of the following to refer to an entity or to a label:
* an identifier;
* an overloaded operator name in function notation ({{c|operator+}}, {{c|operator new}});
* a user-defined conversion function name ({{c|operator bool}});
* a user-defined literal operator name ({{c|operator &quot;&quot; _km}});
* a template name followed by its argument list ({{c|MyTemplate&lt;int&gt;}}).

Every name that denotes an entity is introduced into the program by a {{rlp|declarations|declaration}}. Every name that denotes a label is introduced into the program either by a {{rlp|goto|goto statement}} or by a {{rlp|statements#Labels|labeled statement}}. A name used in more than one translation unit may refer to the same or different entities, depending on {{rlp|storage_duration#Linkage|linkage}}.

When the compiler encounters an unknown name in a program, it associates it with the declaration that introduced the name by means of {{rlp|lookup|name lookup}}, except for the {{rlp|dependent_name|dependent names}} in template declarations and definitions (for those names, the compiler determines whether they name a type, a template, or some other entity, which may require [[cpp/language/dependent_name|explicit disambiguation]]).

===Unicode characters in identifiers===
The following Unicode character ranges are allowed in identifiers:
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:75%; max-width:90em;&quot;
|-
! Code points
! Description
! Characters
|-
|U+00A8
|DIARESIS
|{{tt|¨}}
|-
|U+00AA
|FEMININE ORDINAL INDICATOR
|{{tt|ª}}
|-
|U+00AD
|SOFT HYPHEN
|{{tt|&amp;shy;}}
|-
|U+00AF
|MACRON
|{{tt|¯}}
|-
|U+00B2 - U+00B5
|SUPERSCRIPT TWO - MICRO SIGN
|{{tt|²³´µ}}
|-
|U+00B7 - U+00BA
|MIDDLE DOT - MASCULINE ORDINAL INDICATOR
|{{tt|·¸¹º}}
|-
|U+00BC - U+00BE
|VULGAR FRACTION ONE QUARTER - VULGAR FRACTION THREE QUARTERS
|{{tt|¼½¾}}
|-
|U+00C0 - U+00D6
|LATIN CAPITAL LETTER A WITH GRAVE - LATIN CAPITAL LETTER O WITH DIAERESIS
|{{tt|ÀÁÂ...ÔÕÖ}}
|-
|U+00D8 - U+00F6
|LATIN CAPITAL LETTER O WITH STROKE - LATIN SMALL LETTER O WITH DIAERESIS
|{{tt|ØÙÚ...ôõö}}
|-
|U+00F8 - U+167F
|LATIN SMALL LETTER O WITH STROKE - CANADIAN SYLLABICS BLACKFOOT W
|{{tt|øùú...ᙽᙾᙿ}}
|-
|U+1681 - U+180D
|OGHAM LETTER BEITH - MONGOLIAN FREE VARIATION SELECTOR THREE
|{{tt|ᚁᚂᚃ...&amp;#6155;&amp;#6156;&amp;#6157;}}
|-
|U+180F - U+1FFF
|SYRIAC LETTER BETH - GREEK DASIA
|{{tt|᠏ܒܓ...´῾🿾}}
|-
|U+200B - U+200D
|ZERO WIDTH SPACE - ZERO WIDTH JOINER
|{{tt|&amp;#8203;&amp;#8204;&amp;#8205;}}
|-
|U+202A - U+202E
|LEFT-TO-RIGHT EMBEDDING - RIGHT-TO-LEFT OVERRIDE
|{{tt|}}
|-
|U+203F - U+2040
|UNDERTIE - CHARACTER TIE 
|{{tt|‿⁀}}
|-
|U+2054
|INVERTED UNDERTIE
|{{tt|⁔}}
|-
|U+2060 - U+218F
|WORD JOINER - TURNED DIGIT THREE
|{{tt|...↉↊↋}}
|-
|U+2460 - U+24FF
|CIRCLED DIGIT ONE - NEGATIVE CIRCLED DIGIT ZERO
|{{tt|①②③...⓽⓾⓿}}
|-
|U+2776 - U+2793
|DINGBAT NEGATIVE CIRCLED DIGIT ONE - DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
|{{tt|❶❷❸...➑➒➓}}
|-
|U+2C00 - U+2DFF
|GLAGOLITIC CAPITAL LETTER AZU - COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
|{{tt|ⰀⰁⰂ...}}
|-
|U+2E80 - U+2FFF
|CJK RADICAL REPEAT - IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
|{{tt|⺀⺁⺂...⿹⿺⿻}}
|-
|U+3004 - U+3007
|JAPANESE INDUSTRIAL STANDARD SYMBOL - IDEOGRAPHIC NUMBER ZERO
|{{tt|〄々〆〇}}
|-
|U+3021 - U+302F
|HANGZHOU NUMERAL ONE - HANGUL DOUBLE DOT TONE MARK
|{{tt|〡〢〣...}}
|-
|U+3031 - U+D7FF
|VERTICAL KANA REPEAT MARK - HANGUL JONGSEONG PHIEUPH-THIEUTH
|{{tt|...}}
|-
|U+F900 - U+FD3D
|CJK COMPATIBILITY IDEOGRAPH-F900 - ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
|{{tt|豈更車...ﴻﴼﴽ}}
|-
|U+FD40 - U+FDCF
|ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM -&lt;br&gt;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
|
|-
|U+FDF0 - U+FE44
|ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM -&lt;br&gt;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
|{{tt|...﹂﹃﹄}}
|-
|U+FE47 - U+FFFD
|PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET - REPLACEMENT CHARACTER
|{{tt|﹇﹈﹉...￻￼�}}
|-
|U+10000 - U+1FFFD
|LINEAR B SYLLABLE B008 A - CHEESE WEDGE (U+1F9C0)
|
|-
|U+20000 - U+2FFFD
|&lt;CJK Ideograph Extension B, First&gt; - CJK COMPATIBILITY IDEOGRAPH-2FA1D (U+2FA1D)
|
|-
|U+30000 - U+3FFFD
|
|
|-
|U+40000 - U+4FFFD
|
|
|-
|U+50000 - U+5FFFD
|
|
|-
|U+60000 - U+6FFFD
|
|
|-
|U+70000 - U+7FFFD
|
|
|-
|U+80000 - U+8FFFD
|
|
|-
|U+90000 - U+9FFFD
|
|
|-
|U+A0000 - U+AFFFD
|
|
|-
|U+B0000 - U+BFFFD
|
|
|-
|U+C0000 - U+CFFFD
|
|
|-
|U+D0000 - U+DFFFD
|
|
|-
|U+E0000 - U+EFFFD
|LANGUAGE TAG (U+E0001) - VARIATION SELECTOR-256 (U+E01EF)
|
|}


The following Unicode character ranges are not allowed to begin an identifier:
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! Code points
! Description
! Characters
|-
|U+0300 - U+036F
|COMBINING GRAVE ACCENT - COMBINING LATIN SMALL LETTER X
|
|-
|U+1DC0 - U+1DFF
|COMBINING DOTTED GRAVE ACCENT - COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
|
|-
|U+20D0 - U+20FF
|COMBINING LEFT HARPOON ABOVE - COMBINING ASTERISK ABOVE
|
|-
|U+FE20 - U+FE2F
|COMBINING LIGATURE LEFT HALF - COMBINING CYRILLIC TITLO RIGHT HALF
|
|-
|}

===See also===
{{dsc begin}}
{{dsc see c | c/language/identifier}}
{{dsc end}}</text>
      <sha1>27xuuvkivra38zy28c6l3dtr4s3rghr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/if</title>
    <ns>0</ns>
    <id>698</id>
    <revision>
      <id>89192</id>
      <parentid>88803</parentid>
      <timestamp>2017-01-08T15:07:27Z</timestamp>
      <contributor>
        <username>Buster</username>
        <id>6278</id>
      </contributor>
      <minor/>
      <comment>Spelling (&quot;Lables&quot; -&gt; &quot;Labels&quot;)</comment>
      <text xml:space="preserve" bytes="9287">{{title|if statement}}
{{cpp/language/statements/navbar}}
Conditionally executes another statement.

Used where code needs to be executed based on a run-time or compile-time condition.

===Syntax===
{{rev begin}}
{{rev|until=c++17|
{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement-true}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement-true}} {{ttb|else}} {{spar|statement-false}}
}}
{{sdsc end}}
}}
{{rev|since=c++17|
{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|constexpr}}{{mark optional}} {{ttb|(}} {{spar|init-statement}}{{mark optional}} {{spar|condition}} {{ttb|)}} {{spar|statement-true}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|constexpr}}{{mark optional}} {{ttb|(}} {{spar|init-statement}}{{mark optional}} {{spar|condition}} {{ttb|)}} {{spar|statement-true}} {{ttb|else}} {{spar|statement-false}}
}}
{{sdsc end}}
}}
{{rev end}}
{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | any number of {{rlp|attributes}} }}
{{par | {{spar|condition}} | one of 
* {{rlp|expressions|expression}} which is {{rlp|implicit_cast|contextually convertible}} to bool
* {{rlp|declarations|declaration}} of a single non-array variable with a brace-or-equals {{rlp|initialization|initializer}}.}}
{{par | {{spar|init-statement}}{{mark c++17}} | either 
* an {{rlp|statements|expression statement}} (which may be a ''null statement'' &quot;{{ttb|;}}&quot;)
* a  {{rlp|declarations|simple declaration}}, typically a declaration of a variable with initializer, but it may declare arbitrary many variables or be a decomposition declaration
:Note that any {{spar|init-statement}} must end with a semicolon {{ttb|;}}, which is why it is often described informally as an expression or a declaration followed by a semicolon.}}
{{par | {{spar|statement-true}} | any {{rlp|statements|statement}} (often a compound statement), which is executed if {{spar|condition}} evaluates to {{c|true}} }}
{{par | {{spar|statement-false}} | any {{rlp|statements|statement}} (often a compound statement), which is executed if {{spar|condition}} evaluates to {{c|false}} }}
{{par end}}

===Explanation===
If the {{spar|condition}} yields {{c|true}} after conversion to {{c|bool}}, {{spar|statement-true}} is executed.

If the else part of the if statement is present and {{spar|condition}} yields {{c|false}} after conversion to {{c|bool}}, {{spar|statement-false}} is executed.

In the second form of if statement (the one including else), if {{spar|statement-true}} is also an if statement then that inner if statement must contain an else part as well (in other words, in nested if-statements, the else is associated with the closest if that doesn't have an else)

{{example | code=
#include &lt;iostream&gt;

int main() {
    // simple if-statement with an else clause
    int i = 2;
    if (i &gt; 2) {
        std::cout &lt;&lt; i &lt;&lt; &quot; is greater than 2\n&quot;;
    } else {
        std::cout &lt;&lt; i &lt;&lt; &quot; is not greater than 2\n&quot;;
    }

    // nested if-statement
    int j = 1;
    if (i &gt; 1)
        if (j &gt; 2)
            std::cout &lt;&lt; i &lt;&lt; &quot; &gt; 1 and &quot; &lt;&lt; j &lt;&lt; &quot; &gt; 2\n&quot;;
        else // this else is part of if (j &gt; 2), not of if (i &gt; 1)
            std::cout &lt;&lt; i &lt;&lt; &quot; &gt; 1 and &quot; &lt;&lt; j &lt;&lt; &quot; &lt;= 2\n&quot;;

   // declarations can be used as conditions with dynamic_cast
   struct Base {
        virtual ~Base() {}
   };
   struct Derived : Base {
       void df() { std::cout &lt;&lt; &quot;df()\n&quot;; }
   };
   Base* bp1 = new Base;
   Base* bp2 = new Derived;

   if (Derived* p = dynamic_cast&lt;Derived*&gt;(bp1)) // cast fails, returns NULL
       p-&gt;df();  // not executed

   if (auto p = dynamic_cast&lt;Derived*&gt;(bp2)) // cast succeeds
       p-&gt;df();  // executed
}
 | output=
2 is not greater than 2
2 &gt; 1 and 1 &lt;= 2
df()
}}


{{rev begin}}
{{rev|since=c++17|
If {{spar|init-statement}} is used, the if statement is equivalent to

{{sdsc begin}}
{{sdsc | 
{{ttb|{}}&lt;br&gt;
:{{spar|init_statement}} &lt;br&gt;
:{{ttb|if}} {{ttb|constexpr}}{{mark optional}} {{ttb|(}} {{spar|condition}} {{ttb|)}}  &lt;br&gt;
::{{spar|statement-true}} &lt;br&gt;
{{ttb|} }}
}}
{{sdsc end}}

or 
{{sdsc begin}}
{{sdsc | 
{{ttb|{}}&lt;br&gt;
:{{spar|init_statement}} &lt;br&gt;
:{{ttb|if}} {{ttb|constexpr}}{{mark optional}} {{ttb|(}} {{spar|condition}} {{ttb|)}}  &lt;br&gt;
::{{spar|statement-true}} &lt;br&gt;
:{{ttb|else}}
::{{spar|statement-false}} &lt;br&gt;
{{ttb|} }}
}}
{{sdsc end}}

Except that names declared by the {{spar|init-statement}} (if {{spar|init-statement}} is a declaration) and names declared by {{spar|condition}} (if condition is a declaration) are in the same scope, which is also the scope of both {{spar|statement}}s.

{{source|1=
std::map&lt;int, std::string&gt; m;
std::mutex mx;
extern bool shared_flag; // guarded by mx
int demo() {
   if (auto it = m.find(10); it != m.end()) { return it-&gt;size(); }
   if (char buf[10]; std::fgets(buf, 10, stdin)) { m[0] += buf; }
   if (std::lock_guard lock(mx); shared_flag) { unsafe_ping(); shared_flag = false; }
   if (int s; int count = ReadBytesWithSignal(&amp;s)) { publish(count); raise(s); }
   if (auto keywords = {&quot;if&quot;, &quot;for&quot;, &quot;while&quot;};
       std::any_of(keywords.begin(), keywords.end(),
                   [&amp;s](const char* kw) { return s == kw; })) {
     std::cerr &lt;&lt; &quot;Token must not be a keyword\n&quot;);
   }
}
}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
====Constexpr If====
The statement that begins with {{ttb|if constexpr}} is known as the ''constexpr if statement''.

In a constexpr if statement, the value of {{spar|condition}} must be a contextually converted {{rlp|constant expression}} of type {{tt|bool}}. If the value is {{tt|true}}, then {{spar|statement-false}} is discarded (if present), otherwise, {{spar|statement-true}} is discarded. 

The return statements in a discarded statement do not participate in function return type deduction:
{{source|1=
template &lt;typename T&gt;
auto get_value(T t) {
    if constexpr (std::is_pointer_v&lt;T&gt;)
        return *t; // deduces return type to int for T = int*
    else
        return t;  // deduces return type to int for T = int
}
}}

The discarded statement can {{rlp|definition#One_Definition_Rule|odr-use}} a variable that is not defined
{{source|1=
extern int x; // no definition of x required
int f() {
if constexpr (true)
    return 0;
else if (x)
    return x;
else
    return -x;
}
}}

If a constexpr if statement appears inside a {{rlp|templates#Templated_entity|templated entity}}, and if {{spar|condition}} is not {{rlp|dependent_name#Value-dependent_expressions|value-dependent}} after instantiation, the discarded statement is not instantiated when the enclosing template is instantiated . 
{{source|1=
template&lt;typename T, typename ... Rest&gt;
void g(T&amp;&amp; p, Rest&amp;&amp; ...rs) {
    // ... handle p
    if constexpr (sizeof...(rs) &gt; 0)
        g(rs...); // never instantiated with an empty argument list.
}
}}

Note: an example where the condition remains value-dependent after instantiation is a nested template, e.g.
{{source|1=
template&lt;class T&gt; void g() {
    auto lm = [](auto p) {
        if constexpr (sizeof(T) == 1 &amp;&amp; sizeof p == 1) {
           // this condition remains value-dependent after instantiation of g&lt;T&gt;
        }
    };
}
}}

Note: the discarded statement can't be ill-formed for every possible specialization:
{{source|1=
template &lt;typename T&gt;
void f() {
     if constexpr (std::is_arithmetic_v&lt;T&gt;)
         // ...
     else
       static_assert(false, &quot;Must be arithmetic&quot;); // ill-formed: invalid for every T
}
}}
The common workaround for such a catch-all statement is a type-dependent expression that is always false:
{{source|1=
template&lt;class T&gt; struct dependent_false : std::false_type {};
template &lt;typename T&gt;
void f() {
     if constexpr (std::is_arithmetic_v&lt;T&gt;)
         // ...
     else
       static_assert(dependent_false&lt;T&gt;::value, &quot;Must be arithmetic&quot;); // ok
}
}}

Labels ({{rlp|goto|goto targets}}, {{tt|case}} labels, and {{tt|default:}}) appearing in a substatement of a constexpr if can only be referenced (by {{rlp|switch}} or {{rlp|goto}}) in the same substatement.
}}
{{rev end}}

===Notes===
If {{spar|statement_true}} or {{spar|statement_false}} is not a compound statement, it is treated as if it were:
{{source|1=
if (x)
    int i;
// i is no longer in scope
}}
is the same as
{{source|1=
if (x) {
    int i;
} // i is no longer in scope
}}

The scope of the name introduced by {{spar|condition}}, if it is a declaration, is the combined scope of both statements' bodies:
{{source|1=
if (int x = f()) {
    int x; // error: redeclaration of x
} else {
    int x; // error: redeclaration of x
}
}}

{{rev begin}}
{{rev|since=c++14|
If {{spar|statement-true}} is entered by {{rlp|goto}} or {{lc|longjmp}}, {{spar|statement_false}} is not executed.
}}
{{rev|since=c++17|
Switch and goto are not allowed to jump into a branch of constexpr if statement.
}}
{{rev end}}

===Keywords===
{{ltt|cpp/keyword/if}},
{{ltt|cpp/keyword/else}},
{{ltt|cpp/keyword/constexpr}}

===See Also===
{{dsc begin}}
{{dsc see c | c/language/if | if statement}}
{{dsc end}}

[[de:cpp/language/if]]
[[es:cpp/language/if]]
[[fr:cpp/language/if]]
[[it:cpp/language/if]]
[[ja:cpp/language/if]]
[[pt:cpp/language/if]]
[[ru:cpp/language/if]]
[[zh:cpp/language/if]]</text>
      <sha1>6z0ndm9ojq36xtkpoxrhderl36q9l6b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/implicit cast</title>
    <ns>0</ns>
    <id>15375</id>
    <redirect title="cpp/language/implicit conversion" />
    <revision>
      <id>85114</id>
      <timestamp>2016-04-01T19:44:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/language/implicit cast]] to [[cpp/language/implicit conversion]]: rename URL to match the content (per Kst's suggestion on Talk:FAQ)</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/language/implicit conversion]]</text>
      <sha1>jvhr0v8f2227st42sss38iw0tiw4cyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/implicit conversion</title>
    <ns>0</ns>
    <id>699</id>
    <revision>
      <id>91077</id>
      <parentid>90455</parentid>
      <timestamp>2017-03-17T21:25:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+list of temporary materialization contexts from [class.temporary]p2 to reciprocate the links to here from those places</comment>
      <text xml:space="preserve" bytes="25240">{{title|Implicit conversions}}
{{cpp/language/expressions/navbar}}

Implicit conversions are performed whenever an expression of some type {{tt|T1}} is used in context that does not accept that type, but accepts some other type {{tt|T2}}; in particular:
* when the expression is used as the argument when calling a function that is declared with {{tt|T2}} as parameter;
* when the expression is used as an operand with an operator that expects {{tt|T2}};
* when initializing a new object of type {{tt|T2}}, including {{tt|return}} statement in a function returning {{tt|T2}};
* when the expression is used in a {{tt|switch}} statement ({{tt|T2}} is integral type);
* when the expression is used in an {{tt|if}} statement or a loop ({{tt|T2}} is {{c|bool}}).
The program is well-formed (compiles) only if there exists one unambiguous ''implicit conversion sequence'' from {{tt|T1}} to {{tt|T2}}. 

If there are multiple overloads of the function or operator being called, after the implicit conversion sequence is built from {{tt|T1}} to each available {{tt|T2}}, [[cpp/language/overload_resolution|overload resolution]] rules decide which overload is compiled.

===Order of the conversions===
Implicit conversion sequence consists of the following, in this order:
@1@ zero or one ''standard conversion sequence'';
@2@ zero or one ''user-defined conversion'';
@3@ zero or one ''standard conversion sequence''.

When considering the argument to a constructor or to a user-defined conversion function, only one standard conversion sequence is allowed (otherwise user-defined conversions could be effectively chained). When converting from one built-in type to another built-in type, only one standard conversion sequence is allowed.

A standard conversion sequence consists of the following, in this order:
@1@ zero or one ''[[cpp/language/value_category#lvalue|lvalue]] transformation'';
@2@ zero or one ''numeric promotion'' or ''numeric conversion'';

{{rev begin}}
{{rev|since=c++17|
@3@ zero or one ''function pointer conversion'';
}}
{{rev end}}
@4@ zero or one ''qualification adjustment''.

A user-defined conversion consists of zero or one non-explicit single-argument constructor or non-explicit {{rlp|cast_operator|conversion function}} call

An expression {{tt|e}} is said to be ''implicitly convertible to {{tt|T2}}'' if and only if {{tt|T2}} can be [[cpp/language/copy_initialization|copy-initialized]] from {{tt|e}}, that is the declaration {{c|1=T2 t = e;}} is well-formed (can be compiled), for some invented temporary {{tt|t}}. Note that this is different from [[cpp/language/direct_initialization|direct initialization]] ({{c|1=T2 t(e)}}), where explicit constructors and conversion functions would additionally be considered.

====Contextual conversions====
{{rev begin}}
{{rev|since=c++11|
In the following five contexts, the type {{c|bool}} is expected and the implicit conversion sequence is built if the declaration {{c|1=bool t(e);}} is well-formed. that is, the explicit user-defined conversion function such as {{tt|explicit T::operator bool() const;}} is considered. Such expression {{tt|e}} is said to be ''contextually convertible to bool''.
:* controlling expression of {{tt|if}}, {{tt|while}}, {{tt|for}};
:* the logical operators {{tt|!}}, {{tt|&amp;&amp;}} and {{tt|{{!!}}}};
:* the conditional operator {{tt|?:}};
:* {{tt|static_assert}};
:* {{tt|noexcept}}.
}}
{{rev end}}

In the following contexts, a context-specific type {{tt|T}} is expected, and the expression {{tt|e}} of class type {{tt|E}} is only allowed if {{rev inl|until=c++14|{{tt|E}} has a single non-explicit {{rlp|cast operator|user-defined conversion function}} to an allowable type}}{{rev inl|since=c++14|there is exactly one type {{tt|T}} among the allowable types such that {{tt|E}} has non-explicit conversion functions whose return types are (possibly cv-qualified) {{tt|T}} or reference to (possibly cv-qualified) {{tt|T}}, and {{tt|e}} is implicitly convertible to {{tt|T}}}}. Such expression {{tt|e}} is said to be ''contextually implicitly converted'' to the specified type {{tt|T}}. {{rev inl|since=c++11|Note that explicit conversion functions are not considered, even though they are considered in contextual conversions to bool.}}
* the argument of the {{rlp|delete|delete-expression}} ({{tt|T}} is any object pointer type);
* {{rlp|constant_expression#Integral_constant_expression|integral constant expression}}, where a literal class is used ({{tt|T}} is any integral or unscoped enumeration type, the selected user-defined conversion function must be {{rlp|constexpr}});
* the controlling expression of the {{rlp|switch}} statement ({{tt|T}} is any integral or enumeration type).

{{source|1=
#include &lt;cassert&gt;

template&lt;typename T&gt;
class zero_init
{
    T val;
public:
    zero_init() : val(static_cast&lt;T&gt;(0)) { }
    zero_init(T val) : val(val) { }
    operator T&amp;() { return val; }
    operator T() const { return val; }
};

int main()
{
    zero_init&lt;int&gt; i; assert(i == 0);
    i = 7; assert(i == 7);
    switch(i) { }     // error until C++14 (more than one conversion function)
                      // OK since C++14 (both functions convert to the same type int)
    switch(i + 0) { } // always okay (implicit conversion)
}
}}

===Value transformations===
Value transformations are conversions that change the {{rlp|value category}} of an expression. They take place whenever an expression appears as an operand of an operator that expects an expression of a different value category.

====Lvalue to rvalue conversion====
A [[cpp/language/value_category#glvalue|glvalue]] of any non-function, non-array type {{tt|T}} can be implicitly converted to a [[cpp/language/value_category#prvalue|prvalue]] of the same type. If {{tt|T}} is a non-class type, this conversion also removes cv-qualifiers. If the glvalue has the type {{lc|std::nullptr_t}}, the resulting prvalue is the null pointer constant {{c|nullptr}}.

Unless encountered in [[cpp/language/expressions#Unevaluated_expressions|unevaluated context]] (in an operand of sizeof, typeid, noexcept, or decltype), this conversion effectively copy-constructs a temporary object of type {{tt|T}} using the original glvalue as the constructor argument, and that temporary object is returned as a prvalue.

This conversion models the act of reading a value from a memory location into a CPU register.

If the object to which the glvalue refers contains an indeterminate value (such as obtained by {{rlp|default initialization|default initializing}} a non-class automatic variable), the behavior is {{rlp|ub|undefined}}
{{rev begin}}
{{rev|since=c++11|
except if the indeterminate value is of possibly cv-qualified unsigned character type which was not cached in a CPU register, or, formally:
:* its {{rlp|storage duration}} was static or thread-local;
:* or a pointer to it was constructed;
:* or it was bound to a reference.

The behavior is also implementation-defined (rather than undefined) if the glvalue contains a pointer value that was invalidated by {{rlp|delete}}.
}}
{{rev end}}

====Array to pointer conversion====
An [[cpp/language/value_category#lvalue|lvalue]] or [[cpp/language/value_category#rvalue|rvalue]] of type &quot;array of {{tt|N}} {{tt|T}}&quot; or &quot;array of unknown bound of {{tt|T}}&quot; can be implicitly converted to a [[cpp/language/value_category#prvalue|prvalue]] of type &quot;pointer to {{tt|T}}&quot;. {{rev inl|since=c++17|If the array is a prvalue, [[#Temporary materialization|temporary materialization]] occurs.}} The resulting pointer refers to the first element of the array (see [[cpp/language/array#Array-to-pointer_decay|array to pointer decay]] for details)

{{rev begin}}
{{rev|since=c++17|
====Temporary materialization====
A [[cpp/language/value_category#prvalue|prvalue]] of any complete type {{tt|T}} can be converted to an xvalue of the same type {{tt|T}}. This conversion initializes a temporary object of type T from the prvalue by evaluating the prvalue with the temporary object as its result object, and produces an xvalue denoting the temporary object. 
If {{tt|T}} is a class or array of class type, it must have an accessible and non-deleted destructor
{{source|1=
struct X { int n; };
int k = X().n; // member access expects glvalue as of C++17;
               // X() prvalue is converted to xvalue
}}
Temporary materialization occurs in the following situations:
* when {{rlp|reference initialization|binding a reference}} to a prvalue
* when performing a {{rlp|operator member access|member access}} on a class prvalue
* when performing an array-to-pointer conversion (see above) or {{rlp|operator_member_access#Built-in_subscript_operator|subscripting}} on an array prvalue
* when initializing an object of type {{lc|std::initializer_list&lt;T&gt;}} from a {{rlp|list_initialization|braced-init-list}}
* when {{rlp|typeid}} is applied to a prvalue (this is part of an unevaluated expression)
* when {{rlp|sizeof}} is applied to a prvalue (this is part of an unevaluated expression)
* when a prvalue appears as a {{rlp|expressions#Discarded-value_expressions|discarded-value expression}}
}}
{{rev end}}

====Function to pointer====
An [[cpp/language/value_category#lvalue|lvalue]] of function type {{tt|T}} can be implicitly converted to a [[cpp/language/value_category#prvalue|prvalue]] [[cpp/language/pointer#Pointers_to_functions|pointer to that function]]. This does not apply to non-static member functions because lvalues that refer to non-static member functions do not exist.

===Numeric promotions===
====Integral promotion====
[[cpp/language/value_category#prvalue|prvalue]]s of small integral types (such as {{c|char}}) may be converted to prvalues of larger integral types (such as {{c|int}}). In particular, [[cpp/language/operator_arithmetic|arithmetic operators]] do not accept types smaller than {{c|int}} as arguments, and integral promotions are automatically applied after lvalue-to-rvalue conversion, if applicable. This conversion always preserves the value.

The following implicit conversions are classified as integral promotions:
:* {{ttb|signed char}} or {{ttb|signed short}} can be converted to {{c|int}};
:* {{ttb|unsigned char}} or {{ttb|unsigned short}} can be converted to {{c|int}} if it can hold its entire value range, and {{c|unsigned int}} otherwise;
:* {{ttb|char}} can be converted to {{c|int}} or {{c|unsigned int}} depending on the underlying type: {{c|signed char}} or {{c|unsigned char}} (see above);
:* {{ttb|wchar_t}}, {{ttb|char16_t}}, and {{ttb|char32_t}} can be converted to the first type from the following list able to hold their entire value range: {{c|int}}, {{c|unsigned int}}, {{c|long}}, {{c|unsigned long}}, {{c|long long}}, {{c|unsigned long long}};
:* an {{rlp|enum|''unscoped enumeration''}} type whose underlying type is not fixed can be converted to the first type from the following list able to hold their entire value range: {{c|int}}, {{c|unsigned int}}, {{c|long}}, {{c|unsigned long}}{{rev inl|since=c++11|, {{c|long long}}, or {{c|unsigned long long}}, extended integer types (in size order, signed given preference over unsigned)}}. If the value range is greater, no integral promotions apply;
{{rev begin}}
{{rev|since=c++11|
:* an ''unscoped enumeration'' type whose underlying type is fixed can be converted to its underlying type, and, if the underlying type is also subject to integral promotion, to the promoted underlying type;
}}
{{rev end}}
:* a {{rlp|bit field|''bit field''}} type can be converted to {{c|int}} if it can represent entire value range of the bit field, otherwise to {{c|unsigned int}} if it can represent entire value range of the bit field, otherwise no integral promotions apply;
:* the type {{c|bool}} can be converted to {{c|int}} with the value {{c|false}} becoming {{c|0}} and {{c|true}} becoming {{c|1}}.

Note that all other conversions are not promotions; for example, {{rlp|overload resolution}} chooses {{c|char}} -&gt; {{c|int}} (promotion) over {{c|char}} -&gt; {{c|short}} (conversion).

====Floating-point promotion====
A [[cpp/language/value_category#prvalue|prvalue]] of type {{c|float}} can be converted to a prvalue of type {{c|double}}. The value does not change.

===Numeric conversions===
Unlike the promotions, numeric conversions may change the values, with potential loss of precision.

====Integral conversions====
A [[cpp/language/value_category#prvalue|prvalue]] of an integer type or of an unscoped enumeration type can be converted to any other integer type. If the conversion is listed under integral promotions, it is a promotion and not a conversion.
:* If the destination type is unsigned, the resulting value is the smallest unsigned value equal to the source value [[enwiki: Modular_arithmetic | modulo]] {{math|2{{su|p=n}}}} where {{math|n}} is the number of bits used to represent the destination type.
:: That is, depending on whether the destination type is wider or narrower, signed integers are sign-extended&lt;ref group=&quot;footnote&quot;&gt;This only applies if the arithmetic is two's complement which is only required for the [[cpp/types/integer|exact-width integer types]]. Note, however, that at the moment all platforms with a C++ compiler use two's complement arithmetic&lt;/ref&gt; or truncated and unsigned integers are zero-extended or truncated respectively.
:* If the destination type is signed, the value does not change if the source integer can be represented in the destination type. Otherwise the result is implementation-defined. (Note that this is different from [[cpp/language/operator_arithmetic#Overflows|signed integer arithmetic overflow]], which is undefined).
:* If the source type is {{c|bool}}, the value {{c|false}} is converted to zero and the value {{c|true}} is converted to the value one of the destination type (note that if the destination type is {{c|int}}, this is an integer promotion, not an integer conversion).
:* If the destination type is {{c|bool}}, this is a boolean conversion (see below).

====Floating-point conversions====
A [[cpp/language/value_category#prvalue|prvalue]] of a floating-point type can be converted to a prvalue of any other floating-point type. If the conversion is listed under floating-point promotions, it is a promotion and not a conversion.
:* If the source value can be represented exactly in the destination type, it does not change.
:* If the source value is between two representable values of the destination type, the result is one of those two values (it is implementation-defined which one, although if IEEE arithmetic is supported, rounding defaults [[cpp/numeric/fenv/FE_round|to nearest]]).
:* Otherwise, the behavior is undefined.

====Floating–integral conversions====
:* A [[cpp/language/value_category#prvalue|prvalue]] of floating-point type can be converted to a prvalue of any integer type. The fractional part is truncated, that is, the fractional part is discarded. If the value cannot fit into the destination type, the behavior is undefined (even when the destination type is unsigned, modulo arithmetic does not apply). If the destination type is {{c|bool}}, this is a boolean conversion (see below).
:* A prvalue of integer or unscoped enumeration type can be converted to a prvalue of any floating-point type. If the value cannot be represented correctly, it is implementation defined whether the closest higher or the closest lower representable value will be selected, although if IEEE arithmetic is supported, rounding defaults [[cpp/numeric/fenv/FE_round|to nearest]]. If the value cannot fit into the destination type, the behavior is undefined. If the source type is {{c|bool}}, the value {{c|false}} is converted to zero, and the value {{c|true}} is converted to one.

====Pointer conversions====
:* A ''null pointer constant'' (see {{lc|NULL}}), can be converted to any pointer type, and the result is the null pointer value of that type. Such conversion (known as ''null pointer conversion'') is allowed to convert to a cv-qualified type as a single conversion, that is, it's not considered a combination of numeric and qualifying conversions.
:* A [[cpp/language/value_category#prvalue|prvalue]] pointer to any (optionally cv-qualified) object type {{tt|T}} can be converted to a prvalue pointer to (identically cv-qualified) {{c|void}}. The resulting pointer represents the same location in memory as the original pointer value. If the original pointer is a null pointer value, the result is a null pointer value of the destination type.
:* A prvalue pointer to a (optionally cv-qualified) derived class type can be converted to a prvalue pointer to its (identically cv-qualified) base class. If the base class is inaccessible or  ambiguous, the conversion is ill-formed  (won't compile). The result of the conversion is a pointer to the base class subobject within the pointed-to object. The null pointer value is converted to the null pointer value of the destination type.

====Pointer-to-member conversions====
:* A ''null pointer constant'' (see {{lc|NULL}}) can be converted to any pointer-to-member type, and the result is the null member pointer value of that type. Such conversion (known as ''null member pointer conversion'') is allowed to convert to a cv-qualified type as a single conversion, that is, it's not considered a combination of numeric and qualifying conversions.
:* A [[cpp/language/value_category#prvalue|prvalue]] pointer to member of some type {{tt|T}} in a base class {{tt|B}} can be converted to a [[cpp/language/value_category#prvalue|prvalue]] pointer to member of the same type {{tt|T}} in its derived class {{tt|D}}. If {{tt|B}} is inaccessible, ambiguous, or virtual base of {{tt|D}} or is a base of some intermediate virtual base of {{tt|D}}, the conversion is ill-formed (won't compile). The resulting pointer can be dereferenced with a {{tt|D}} object, and it will access the member within the {{tt|B}} base subobject of that {{tt|D}} object. The null pointer value is converted to the null pointer value of the destination type.

====Boolean conversions====
A [[cpp/language/value_category#prvalue|prvalue]] of integral, floating-point, unscoped enumeration, pointer, and pointer-to-member types can be converted to a prvalue of type {{c|bool}}.

The value zero (for integral, floating-point, and unscoped enumeration) and the null pointer and the null pointer-to-member values become {{c|false}}. All other values become {{c|true}}.
{{rev begin}}
{{rev|since=c++11|
A prvalue of type {{lc|std::nullptr_t}}, including {{c|nullptr}}, can be converted to a prvalue of type {{c|bool}} in context of {{rlp|direct initialization|direct-initialization}}. The resulting value is {{c|false}}.}}
{{rev end}}

===Qualification conversions===
:* A [[cpp/language/value_category#prvalue|prvalue]] of type pointer to {{rlp|cv|cv-qualified}} type {{tt|T}} can be converted to a prvalue pointer to a more cv-qualified same type {{tt|T}} (in other words, constness and volatility can be added).
:* A prvalue of type pointer to member of cv-qualified type {{tt|T}} in class {{tt|X}} can be converted to a prvalue pointer to member of more cv-qualified type {{tt|T}} in class {{tt|X}}.
&quot;More&quot; cv-qualified means that
:* a pointer to ''unqualified'' type can be converted to a pointer to {{tt|const}};
:* a pointer to ''unqualified'' type can be converted to a pointer to {{tt|volatile}};
:* a pointer to ''unqualified'' type can be converted to a pointer to {{tt|const volatile}};
:* a pointer to {{tt|const}} type can be converted to a pointer to {{tt|const volatile}};
:* a pointer to {{tt|volatile}} type can be converted to a pointer to {{tt|const volatile}}.

For multi-level pointers, the following restrictions apply: a multilevel pointer {{tt|P1}} which is {{math|cv{{su|b=0|p=1}}}}-qualified pointer to {{math|cv{{su|b=1|p=1}}}}-qualified pointer to ... {{math|cv{{su|b=n-1|p=1}}}}-qualified pointer to {{math|cv{{su|b=n|p=1}}}}-qualified {{tt|T}} is convertible to a multilevel pointer {{tt|P2}} which is {{math|cv{{su|b=0|p=2}}}}-qualified pointer to {{math|cv{{su|b=1|p=2}}}}-qualified pointer to ... {{math|cv{{su|b=n-1|p=2}}}}-qualified pointer to {{math|cv{{su|b=n|p=2}}}}-qualified {{tt|T}} only if
:* the number of levels {{tt|n}} is the same for both pointers;
:* if there is a {{c|const}} in the {{math|cv{{su|b=k|p=1}}}} qualification at some level (other than level zero) of P1, there is a {{c|const}} in the same level {{math|cv{{su|b=k|p=2}}}} of P2;
:* if there is a {{c|volatile}} in the {{math|cv{{su|b=k|p=1}}}} qualification at some level (other than level zero) of P1, there is a {{c|volatile}} in the same {{math|cv{{su|b=k|p=2}}}}level of P2;
:* if at some level {{tt|k}} the {{tt|P2}} is ''more'' cv-qualified than {{tt|P1}}, then there must be a {{c|const}} at every single level (other than level zero) of {{tt|P2}} up until k: {{math|cv{{su|b=1|p=2}}, cv{{su|b=2|p=2}} ... cv{{su|b=k|p=2}}}}.
:* same rules apply to multi-level pointers to members and multi-level mixed pointers to objects and pointers to members;
{{rev begin}}
{{rev|since=c++14|
:* same rules apply to multi-level pointers that include pointers to array of known or unknown bound at any level (arrays of cv-qualified elements are considered to be identically cv-qualified themselves);
}}
{{rev end}}
:* level zero is addressed by the rules for non-multilevel qualification conversions.

{{source|1=
char** p = 0;
const char** p1 = p; // error: level 2 more cv-qualified but level 1 is not const
const char* const * p2 = p; // OK: level 2 more cv-qualified and const added at level 1
volatile char * const * p3 = p; // OK: level 2 more cv-qual and const added at level 1
volatile const char* const* p4 = p2; // OK: 2 more cv-qual and const was already at 1

double *a[2][3];
double const * const (*ap)[3] = a; // OK since C++14
}}

Note that in the C programming language, const/volatile can be added to the first level only:
{{source|1=
char** p = 0;
char * const* p1 = p; // OK in C and C++
const char* const * p2 = p; // error in C, OK in C++
}}

{{rev begin}}
{{rev|since=c++17|
====Function pointer conversions====
:* A [[cpp/language/value_category#prvalue|prvalue]] of type pointer to non-throwing function can be converted to a prvalue pointer to potentially-throwing function.
:* A prvalue of type pointer to non-throwing member function can be converted to a prvalue pointer to potentially-throwing member function.

{{source|1=
void (*p)();
void (**pp)() noexcept = &amp;p; // error: cannot convert to pointer to noexcept function

struct S
{
    typedef void (*p)();
    operator p();
};
void (*q)() noexcept = S(); // error: cannot convert to pointer to noexcept function
}}
}}
{{rev end}}

===The safe bool problem===
Until the introduction of explicit conversion functions in C++11, designing a class that should be usable in boolean contexts (e.g. {{c|if(obj) { ... } }}) presented a problem: given a user-defined conversion function, such as {{c|T::operator bool() const;}}, the implicit conversion sequence allowed one additional standard conversion sequence after that function call, which means the resultant {{c|bool}} could be converted to {{c|int}}, allowing such code as {{c|obj &lt;&lt; 1;}} or {{c|1=int i = obj;}}.

One early solution for this can be seen in {{lc|std::basic_ios}}, which defines {{c|operator!}} and {{c|operator void*}}{{mark until c++11}}, so that the code such as {{c|if(std::cin) {...} }} compiles because {{c|void*}} is convertible to {{c|bool}}, but {{c|1=int n = std::cout;}} does not compile because {{c|void*}} is not convertible to {{c|int}}. This still allows nonsense code such as {{c|delete std::cout;}} to compile, and many pre-C++11 third party libraries were designed with a more elaborate solution, known as the [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool Safe Bool idiom].

{{rev begin}}
{{rev|since=c++11|
The [[cpp/language/explicit|explicit bool conversion]] can also be used to resolve the safe bool problem

{{source|1=
    explicit operator bool() const { ... }
}}
}}
{{rev end}}

===Footnotes===
&lt;references group=&quot;footnote&quot;/&gt;

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=616|std=C++11|before=lvalue to rvalue conversion of any uninitialized object was always UB|after=indeterminate unsigned char is allowed}}
{{dr list item|wg=cwg|dr=1423|std=C++11|before=std::nullptr_t is convertible to bool in both direct- and copy-initialization|after=direct-initialization only}}
{{dr list item|wg=cwg|dr=330|std=C++14|before=conversion from {{c|double * const (*p)[3]}} to {{c|double const * const (*p)[3]}} invalid|after=conversion valid}}
{{dr list end}}

===See also===
* [[cpp/language/const_cast|const_cast]]
* [[cpp/language/static_cast|static_cast]]
* [[cpp/language/dynamic_cast|dynamic_cast]]
* [[cpp/language/reinterpret_cast|reinterpret_cast]]
* [[cpp/language/explicit_cast|explicit cast]]
* [[cpp/language/cast_operator|user-defined conversion]]
{{dsc begin}}
{{dsc see c|c/language/conversion|Implicit conversions}}
{{dsc end}}

[[de:cpp/language/implicit cast]]
[[es:cpp/language/implicit cast]]
[[fr:cpp/language/implicit cast]]
[[it:cpp/language/implicit cast]]
[[ja:cpp/language/implicit cast]]
[[pt:cpp/language/implicit cast]]
[[ru:cpp/language/implicit cast]]
[[zh:cpp/language/implicit cast]]</text>
      <sha1>ff0prc9d11vg9mtrcy15l2mzw55oj3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/incomplete type</title>
    <ns>0</ns>
    <id>13108</id>
    <redirect title="cpp/language/type" />
    <revision>
      <id>66711</id>
      <timestamp>2013-12-27T15:00:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>redirect to type#Incomplete type for now</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/language/type#Incomplete type]]</text>
      <sha1>544ylwz3ngc7qcw6l2f89c1d3k813wd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/initialization</title>
    <ns>0</ns>
    <id>9897</id>
    <revision>
      <id>90839</id>
      <parentid>90838</parentid>
      <timestamp>2017-03-12T16:38:59Z</timestamp>
      <contributor>
        <ip>223.3.175.127</ip>
      </contributor>
      <comment>/* Dynamic initialization */</comment>
      <text xml:space="preserve" bytes="8958">{{title|Initialization}}
{{cpp/language/initialization/navbar}}
''Initialization'' of a variable provides its initial value at the time of construction. 

The initial value may be provided in the initializer section of a {{rlp|declarations|declarator}} or a {{rlp|new|new expression}}. It also takes place during function calls: function parameters and the function return values are also initialized.

For each declarator, the initializer may be one of the following:

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|(}} {{spar|expression-list}} {{ttb|)}}
}}
{{sdsc|num=2|1=
{{ttb|{{=}}}} {{spar|expression}}
}}
{{sdsc|num=3|1=
{{ttb|{ }} {{spar|initializer-list}} {{ttb|} }}
}}
{{sdsc end}}

@1@ comma-separated list of arbitrary expressions and braced-init-lists in parentheses
@2@ the equals sign followed by an expression
@3@ braced-init-list: possibly empty, comma-separated list of expressions and other braced-init-lists

Depending on context, the initializer may invoke one of the following:
* {{rlp|value_initialization|Value initialization}}, e.g. {{c|std::string s{};}}
* {{rlp|direct_initialization|Direct initialization}}, e.g. {{c|std::string s(&quot;hello&quot;);}}
* {{rlp|copy_initialization|Copy initialization}}, e.g. {{c|std::string s {{=}} &quot;hello&quot;;}}
* {{rlp|list_initialization|List initialization}}, e.g. {{c|std::string s{'a', 'b', 'c'};}}
* {{rlp|aggregate_initialization|Aggregate initialization}}, e.g. {{c|char a[3] {{=}} {'a', 'b'};}}
* {{rlp|reference_initialization|Reference initialization}}, e.g. {{c|char&amp; c {{=}} a[0];}}

If no initializer is provided, the rules of {{rlp|default_initialization|default initialization}} apply.

===Non-local variables===
All non-local variables with static {{rlp|storage duration}} are initialized as part of program startup, before the execution of the {{rlp|main function}} begins (unless deferred, see below). All variables with thread-local storage duration are initialized as part of thread launch, sequenced-before the execution of the thread function begins. For both of these classes of variables, initialization occurs in two distinct stages:

====Static initialization====
@1@ If permitted, {{rlp|constant_initialization|Constant initialization}} takes place first (see  {{rlp|constant_initialization|Constant initialization}} for the list of those situations).
In practice, constant initialization is usually performed at compile time, and pre-calculated object representations are stored as part of the program image. If the compiler doesn't do that, it still has to guarantee that this initialization happens before any dynamic initialization.

@2@ For all other non-local static and thread-local variables, {{rlp|zero_initialization|Zero initialization}} takes place.
In practice, variables that are going to be zero-initialized are placed in the {{tt|.bss}} segment of the program image, which occupies no space on disk, and is zeroed out by the OS when loading the program.

====Dynamic initialization====
After all static initialization is completed, dynamic initialization of non-local variables occurs in the following situations:

@1@ ''Unordered dynamic initialization'', which applies only to (static/thread-local) class template {{rlp|static|static data members}} {{rev inl|since=c++14|and {{rlp|variable template}}s}} that aren't [[cpp/language/template_specialization|explicitly specialized]]. Initialization of such static variables is indeterminately sequenced with respect to all other dynamic initialization {{rev inl|since=c++17|except if the program starts a thread before a variable is initialized, in which case its initialization is unsequenced}}. Initialization of such thread-local variables is unsequenced with respect to all other dynamic initialization.

{{rev begin}}
{{rev|since=c++17|
@2@ ''Partially-ordered dynamic initialization'', which applies to all inline variables that are not an implicitly or explicitly instantiated specialization. If a partially-ordered V is defined before ordered or partially-ordered W in every translation unit, the initialization of V is sequenced before the initialization of W (or happens-before, if the program starts a thread)
}}
{{rev end}}

@3@ ''Ordered dynamic initialization'', which applies to all other non-local variables: within a single translation unit, initialization of these variables is always {{rlp|eval_order|sequenced}} in exact order their definitions appear in the source code. Initialization of static variables in different translation units is indeterminately sequenced. Initialization of thread-local variables in different translation units is unsequenced.

If the initialization of a non-local variable with static or thread storage duration exits via an exception, {{lc|std::terminate}} is called.

====Early dynamic initialization====
The compilers are allowed to initialize dynamically-initialized variables as part of static initialization (essentially, at compile time), if the following conditions are both true:
@1@ the dynamic version of the initialization does not change the value of any other object of namespace scope prior to its initialization
@2@ the static version of the initialization produces the same value in the initialized variable as would be produced by the dynamic initialization if all variables not required to be initialized statically were initialized dynamically.

Because of the rule above, if initialization of some object {{tt|o1}} refers to an namespace-scope object {{tt|o2}}, which potentially requires dynamic initialization, but is defined later in the same translation unit, it is unspecified whether the value of {{tt|o2}} used will be the value of the fully initialized {{tt|o2}} (because the compiler promoted initialization of {{tt|o2}} to compile time) or will be the value of {{tt|o2}} merely zero-initialized. 
{{source|1=
inline double fd() { return 1.0; }
extern double d1;
double d2 = d1;   // unspecified:
                  // dynamically initialized to 0.0 if d1 is dynamically initialized, or
                  // dynamically initialized to 1.0 if d1 is statically initialized, or
                  // statically initialized to 0.0 (because that would be its value
                  // if both variables were dynamically initialized)
double d1 = fd(); // may be initialized statically or dynamically to 1.0
}}

====Deferred dynamic initialization====
It is implementation-defined whether dynamic initialization happens-before the first statement of the main function (for statics) or the initial function of the thread (for thread-locals), or deferred to happen after.

If the initialization {{rev inl|of a non-inline variable}} is deferred to happen after the first statement of main/thread function, it happens before the first {{rlp|definition#ODR-use|odr-use}} of any variable with static/thread storage duration defined in the same translation unit as the variable to be initialized. If no variable or function is odr-used from a given translation unit, the non-local variables defined in that translation unit may never be initialized (this models the behavior of an on-demand dynamic library). However, as long as anything from a TU is odr-used, all non-local variables whose initialization or destruction has side effects will be initialized even if they are not used in the program.

{{rev begin}}
{{rev|since=c++17|
If the initialization of an inline variable is deferred, it happens before the first {{rlp|definition#ODR-use|odr-use}} of that specific variable.
}}
{{rev end}}

{{source|1=
// - File 1 -
#include &quot;a.h&quot;
#include &quot;b.h&quot;
B b;
A::A(){ b.Use(); }

// - File 2 -
#include &quot;a.h&quot;
A a;

// - File 3 -
#include &quot;a.h&quot;
#include &quot;b.h&quot;
extern A a;
extern B b;

int main() {
  a.Use();
  b.Use();

// if a is initialized before main is entered, b may still be uninitialized
// at the point where A::A() uses it (because dynamic init is indeterminately sequenced
// across translation units)

// If a is initialized at some point after the first statement of main (which odr-uses
// a function defined in File 1, forcing its dynamic initialization to run),
// then b will be initialized prior to its use in A::A
}}

===Static local variables===
For initialization of locals (that is, block scope) static and thread-local variables, see {{rlp|storage_duration#Static_local_variables|static local variables}}

===Class members===
Non-static data members can be initialized with {{rlp|initializer_list|member initializer list}} or with a {{rlp|data_members#Member_initialization|default member initializer}}.

===Notes===
The order of destruction of non-local variables is described in {{lc|std::exit}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2026|std=C++14|before=zero-init was specified to always occur first, even before constant-init|after=no zero-init if constant init applies}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/initialization}}
{{dsc end}}

[[zh:cpp/language/initialization]]</text>
      <sha1>3n3l9gqnz33gxnq83oefm3k8lw1li4e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/initializer list</title>
    <ns>0</ns>
    <id>5432</id>
    <revision>
      <id>87379</id>
      <parentid>87370</parentid>
      <timestamp>2016-08-17T14:50:58Z</timestamp>
      <contributor>
        <username>Yanpas</username>
        <id>5042</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="11099">{{title|Constructors and member initializer lists}}
{{cpp/language/classes/navbar}}

Constructor is a special non-static {{rlp|member functions|member function}} of a class that is used to initialize objects of its class type.

In the definition of a constructor of a class, ''member initializer list'' specifies the initializers for direct and virtual base subobjects and non-static data members.
( Not to be confused with [[cpp/utility/initializer_list|std::initializer_list]] )

==Syntax==
Constructors are declared using member {{rlp|function|function declarators}} of the following form:

{{sdsc begin}}
{{sdsc|num=1| {{spar|class-name}} {{ttb|(}} {{spar|parameter-list}}{{mark optional}} {{ttb|)}} {{spar|except-spec}}{{mark optional}} {{spar|attr}}{{mark optional}} }}
{{sdsc end}}
Where {{spar|class-name}} must name the current class (or current instantiation of a class template), or, when declared at namespace scope or in a friend declaration, it must be a qualified class name.

The only specifiers allowed in the {{spar|decl-specifier-seq}} of a constructor declaration are {{rlp|friend}}, {{rlp|inline}}, {{tt|explicit}} and {{tt|constexpr}} (in particular, no return type is allowed). Note that {{rlp|member functions|cv- and ref-qualifiers}} are not allowed either; const and volatile semantics of an object under construction don't kick in until the most-derived constructor completes.

The body of a {{rlp|function|function definition}} of any constructor, before the opening brace of the compound statement, may include the ''member initializer list'', whose syntax is the colon character {{ttb|:}}, followed by the comma-separated list of one or more {{spar|member-initializers}}, each of which has the following syntax
{{sdsc begin}}
{{sdsc|num=1| {{spar|class-or-identifier}} {{ttb|(}} {{spar|expression-list}}{{mark optional}} {{ttb|)}} }}
{{sdsc|num=2|notes={{mark since c++11}}| {{spar|class-or-identifier}} {{spar|brace-init-list}} }}
{{sdsc|num=3|notes={{mark since c++11}}| {{spar|parameter-pack}} {{ttb|...}} }}
{{sdsc end}}

@1@ Initializes the base or member named by {{spar|class-or-identifier}} using {{rlp|direct_initialization|direct initialization}} or, if {{spar|expression-list}} is empty, {{rlp|value_initialization|value-initialization}}
@2@ Initializes the base or member named by {{spar|class-or-identifier}} using {{rlp|list_initialization|list-initialization}} (which becomes {{rlp|value_initialization|value-initialization}} if the list is empty and {{rlp|aggregate_initialization|aggregate-initialization}} when initializing an aggregate)
@3@ Initializes multiple bases using a {{rlp|parameter_pack|pack expansion}}

{{par begin}}
{{par | {{spar|class-or-identifier}} | any identifier, class name, or {{c|decltype}} expression that names a non-static data member, a direct or virtual base, or (for delegating constructors) the class itself }}
{{par | {{spar|expression-list}} | possibly empty, comma-separated list of the parameters to pass to the constructor of the base or member }}
{{par | {{spar|braced-init-list}} | brace-enclosed list of comma-separated initializers and nested braced-init-lists }}
{{par | {{spar|parameter-pack}} | name of a variadic template parameter pack }}
{{par end}}

{{example|code=
struct S {
    int n;
    S(int); // constructor declaration
    S() : n(7) {} // constructor definition.
                  // &quot;: n(7)&quot; is the initializer list
                  // &quot;: n(7) {}&quot; is the function body
};
S::S(int x) : n{x} {} // constructor definition. &quot;: n{x}&quot; is the initializer list
int main()
{
    S s; // calls S::S()
    S s2(10); // calls S::S(int)
}
}}

==Explanation==
Constructors have no names and cannot be called directly. They are invoked when {{rlp|initialization}} takes place, and they are selected according to the rules of initialization. The constructors without {{tt|explicit}} specifier are {{rlp|converting constructor}}s. The constructors with a {{tt|constexpr}} specifier make their type a {{concept|LiteralType}}. Constructors that may be called without any argument are {{rlp|default constructor}}s. Constructors that take another object of the same type as the argument are {{rlp|copy constructor}}s and {{rlp|move constructor}}s.

Before the compound statement that forms the function body of the constructor begins executing, initialization of all direct bases, virtual bases, and non-static data members is finished. Member initializer list is the place where non-default initialization of these objects can be specified. For members that cannot be default-initialized, such as members of reference and const-qualified types, member initializers must be specified. No initialization is performed for [[cpp/language/union#Anonymous unions|anonymous unions]] or [[cpp/language/union#Union-like class|variant members]] that do not have a member initializer.

The initializers where {{spar|class-or-identifier}} names a {{rlp|derived_class|virtual base class}} are ignored  during execution of constructors of any class that is not the most derived class of the object that's being constructed.

Names that appear in {{spar|expression-list}} or {{spar|brace-init-list}} are evaluated in scope of the constructor:
{{source|class X {
    int a, b, i, j;
public:
    const int&amp; r;
    X(int i)
      : r(a) // initializes X::r to refer to X::a
      , b{i} // initializes X::b to the value of the parameter i
      , i(i) // initializes X::i to the value of the parameter i
      , j(this-&gt;i) // initializes X::j to the value of X::i
    { }
};
}}

Exceptions that are thrown from member initializers may be handled by {{rlp|function-try-block}}

Member functions (including virtual member functions) can be called from member initializers, but the behavior is undefined if not all direct bases are initialized at that point.

For virtual calls (if the bases are initialized), the same rules apply as the rules for the virtual calls from constructors and destructors: virtual member functions behave as if the dynamic type of {{c|*this}} is the class that's being constructed (dynamic dispatch does not propagate down the inheritance hierarchy) and virtual calls (but not static calls) to {{rlp|abstract class|pure virtual}} member functions are undefined behavior.

{{rev begin}}
{{rev | since=c++11 |
If a non-static data member has an {{rlp|data_members#Member initialization|default member initializer}} and also appears in a member initializer list, then member initializer list is executed and the default member initializer is ignored:
{{source|1=struct S {
    int n = 42;   // default member initializer
    S() : n(7) {} // will set n to 7, not 42
};}}
}}

{{rev | since=c++14|
Reference members cannot be bound to temporaries in a member initializer list:
{{source|1=
struct A {
    A() : v(42) { }  // Error
    const int&amp; v;
};
}}
Note: same applies to {{rlp|data_members#Member initialization|default member initializer}}
}}
{{rev end}}

{{rev begin}}

{{rev | since=c++11 |
===Delegating constructor===
If the name of the class itself appears as {{spar|class-or-identifier}} in the member initializer list, then the list must consist of that one member initializer only; such constructor is known as the ''delegating constructor'', and the constructor selected by the only member of the initializer list is the ''target constructor''

In this case, the target constructor is selected by overload resolution and executed first, then the control returns to the delegating constructor and its body is executed.

Delegating constructors cannot be recursive.

{{source|1=
class Foo {
public: 
  Foo(char x, int y) {}
  Foo(int y) : Foo('a', y) {} // Foo(int) delegates to Foo(char,int)
};
}}

===Inheriting constructors===
See {{rlp|using declaration}}.
}}
{{rev end}}

==Initialization order==
The order of member initializers in the list is irrelevant: the actual order of initialization is as follows:

@1@ If the constructor is for the most-derived class, virtual base classes are initialized in the order in which they appear in depth-first left-to-right traversal of the base class declarations (left-to-right refers to the appearance in base-specifier lists)
@2@ Then, direct base classes are initialized in left-to-right order as they appear in this class's base-specifier list
@3@ Then, non-static data members are initialized in order of declaration in the class definition.
@4@ Finally, the body of the constructor is executed

(Note: if initialization order was controlled by the appearance in the member initializer lists of different constructors, then the {{rlp|destructor}} wouldn't be able to ensure that the order of destruction is the reverse of the order of construction)

==Example==
{{source|code=
#include &lt;fstream&gt;
#include &lt;mutex&gt;

struct Base {
    int n;
    Base(int n) : n(n) {}
};   

struct Class : public Base
{
    unsigned char x;
    unsigned char y;
    std::mutex m;
    std::lock_guard&lt;std::mutex&gt; lg;
    std::fstream f1, f2;

    Class ( int x )
      : Base ( 123 ), // initialize base class
        x ( x ),      // x (member) is initialized with x (parameter)
        y { 0 },      // y initialized to 0
        f1{&quot;test.cc&quot;, std::ios::app}, // this takes place after m and lg are initialized
        f2(&quot;test.bin&quot;, std::ios::binary{{!}}std::ios::app),
        lg ( m ),      // lg uses m, which is already initialized
        m{}            // m is initialized before lg even though it appears last here
    {}                // empty compound statement

    Class ( double a )
      : Base ( 0 ),
        y ( a+1 ),
        x ( y ), // x will be initialized before y, its value here is indeterminate
        lg ( m )
    {} // base class constructor does not appear in the list, it is
       // default-initialized (not the same as if Base() were used, which is value-init)

    Class()
    try // function-try block begins before the function body, which includes init list
      : Base ( 789 ),
        x ( 0 ),
        y ( 0 ),
        lg ( m )
    {
        // ...
    }
    catch (...)
    {
        // exception occurred on initialization
    }
};

int main() {
    Class c;
    Class c1(1);
    Class c2(0.1);
}
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1696|std=C++14|before=reference members could be initialized to temporaries (whose lifetime would end at the end of ctor)|after=such init is ill-formed}}
{{dr list end}}

===References===
{{ref std c++11}}
{{ref std | section=12.1 | title=Constructors | id=class.ctor}}
{{ref std | section=12.6.2 | title=Initializing bases and members | id=class.base.init}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=12.1 | title=Constructors | id=class.ctor}}
{{ref std | section=12.6.2 | title=Initializing bases and members | id=class.base.init}}
{{ref std end}}

[[de:cpp/language/initializer list]]
[[es:cpp/language/initializer list]]
[[fr:cpp/language/initializer list]]
[[it:cpp/language/initializer list]]
[[ja:cpp/language/initializer list]]
[[pt:cpp/language/initializer list]]
[[ru:cpp/language/initializer list]]
[[zh:cpp/language/initializer list]]</text>
      <sha1>427usc1btfxvuekk1w4cw57c5mqs06o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/inline</title>
    <ns>0</ns>
    <id>3085</id>
    <revision>
      <id>89194</id>
      <parentid>88475</parentid>
      <timestamp>2017-01-09T13:47:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>adding mention that the multiple definitions have to be identical to the first line where multiple definitions are mentioned to avoid mis-reads as &quot;multiple different definitions&quot;</comment>
      <text xml:space="preserve" bytes="6010">{{title|inline specifier}}
{{cpp/language/functions/navbar}}

The {{c|inline}} specifier, when used in a function's {{rlp|declarations#Specifiers|decl-specifier-seq}}, declares the function to be an ''inline function''.

A function defined entirely inside a {{rlp|classes|class/struct/union definition}}, whether it's a member function or a non-member {{c|friend}} function, is implicitly an inline function.

{{rev begin}}
{{rev|since=c++11|
A function declared {{c|constexpr}} is implicitly an inline function.

A deleted function is implicitly an inline function: its (deleted) definition can appear in more than one translation unit.
}}{{rev end}}

{{rev begin}}
{{rev|since=c++17|
The {{c|inline}} specifier, when used in a {{rlp|declarations#Specifiers|decl-specifier-seq}} of a variable with static storage duration (static class member or namespace-scope variable), declares the variable to be an ''inline variable''.

A static member variable (but not a namespace-scope variable) declared {{c|constexpr}} is implicitly an inline variable.
}}
{{rev end}}

===Description===
An ''inline function'' {{rev inl|since=c++17|or ''inline variable''}} is a function {{rev inl|since=c++17|or variable}} with the following properties:

@1@ There may be {{rlp|definition#One Definition Rule|more than one definition}} of an inline function {{rev inl|since=c++17|or variable}} in the program as long as each definition appears in a different translation unit and (for non-static inline functions) all definitions are identical. For example, an inline function {{rev inl|since=c++17|or an inline variable}} may be defined in a header file that is #include'd in multiple source files.
@2@ The definition of an inline function {{rev inl|since=c++17|or variable}} must be present in the translation unit where it is accessed (not necessarily before the point of access).
@3@ An inline function {{rev inl|since=c++17|or variable}} with [[cpp/language/storage_duration|external linkage]] (e.g. not declared {{c|static}}) has the following additional properties:
:@1@ It must be declared {{c|inline}} in every translation unit.
:@2@ It has the same address in every translation unit.

In an inline function,
* Function-local static objects in all function definitions are shared across all translation units (they all refer to the same object defined in one translation unit)
* Types defined in all function definitions are also the same in all translation units.

{{rev begin}}
{{rev|until=c++17|
* {{rlp|string literal|String literals}} in all function definitions are shared (they are all the same string literal defined in just one translation unit)
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
Inline const variables at namespace scope have {{rlp|storage_duration|external linkage}} by default (unlike the non-inline non-volatile const-qualified variables)
}}
{{rev end}}

The original intent of the {{tt|inline}} keyword was to serve as an indicator to the optimizer that [[enwiki:inline expansion|inline substitution of a function]] is preferred over function call, that is, instead of executing the function call CPU instruction to transfer control to the function body, a copy of the function body is executed without generating the call. This avoids overhead created by the function call (copying the arguments and retrieving the result) but it may result in a larger executable as the code for the function has to be repeated multiple times.

Since this meaning of the keyword {{c|inline}} is non-binding, compilers are free to use inline substitution for any function that's not marked inline, and are free to generate function calls to any function marked inline. Those optimization choices do not change the rules regarding multiple definitions and shared statics listed above. 

{{rev begin}}
{{rev|since=c++17|
Because the meaning of the keyword inline for functions came to mean &quot;multiple definitions are permitted&quot; rather than &quot;inlining is preferred&quot;, that meaning was extended to variables.
}}
{{rev end}}

====Notes====
If an inline function {{rev inl|since=c++17|or variable}} with external linkage is defined differently in different translation units, the behavior is undefined.

The inline specifier cannot be used with a function declaration at block scope (inside another function)

The inline specifier cannot re-declare a function that was already defined in the translation unit as non-inline.

The implicitly-generated member functions and any member function declared as defaulted on its first declaration are inline just like any other function defined inside a class definition.

If an inline function is declared in different translation units, the accumulated sets of {{rlp|default arguments}} must be the same at the end of each translation unit.

In C, inline functions do not have to be declared inline in every translation unit (at most one may be non-inline or extern inline), the function definitions do not have to be identical (but the behavior of the program must not depend on which one is called), and the function-local statics are distinct between different definitions of the same function.

{{rev begin}}
{{rev|since=c++17|
See {{rlp|static|static data members}} for additional rules about inline static members

Inline variables eliminate the main obstacle to packaging C++ code as header-only libraries.
}}
{{rev end}}

===Example===
{{example
|code=
// header file
#ifndef EXAMPLE_H
#define EXAMPLE_H
// function included in multiple source files must be inline
inline int sum(int a, int b) 
{
    return a + b;
}
#endif

// source file #2
#include &quot;example.h&quot;
int a()
{
    return sum(1, 2);
}

// source file #1
#include &quot;example.h&quot;
int b()
{
    return sum(3, 4);
}
}}

===See Also===
{{dsc begin}}
{{dsc see c | c/language/inline}}
{{dsc end}}

[[de:cpp/language/inline]]
[[es:cpp/language/inline]]
[[fr:cpp/language/inline]]
[[it:cpp/language/inline]]
[[ja:cpp/language/inline]]
[[pt:cpp/language/inline]]
[[ru:cpp/language/inline]]
[[zh:cpp/language/inline]]</text>
      <sha1>4cr7rp6259plrii0igp6490z2yv4kcv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/integer literal</title>
    <ns>0</ns>
    <id>5082</id>
    <revision>
      <id>85985</id>
      <parentid>85049</parentid>
      <timestamp>2016-06-09T08:05:39Z</timestamp>
      <contributor>
        <username>Gubbins</username>
        <id>3701</id>
      </contributor>
      <minor/>
      <comment>run-on sentence</comment>
      <text xml:space="preserve" bytes="7422">{{title|integer literal}}
{{cpp/language/expressions/navbar}}
Allows values of integer type to be used in expressions directly.
===Syntax===
An integer literal is a {{rlp|expressions#Primary_expressions|primary expression}} of the form
{{sdsc begin}}
{{sdsc | num = 1 | {{spar|decimal-literal}} {{spar|integer-suffix}}{{mark optional}} }}
{{sdsc | num = 2 | {{spar|octal-literal}} {{spar|integer-suffix}}{{mark optional}} }}
{{sdsc | num = 3 | {{spar|hex-literal}} {{spar|integer-suffix}}{{mark optional}} }}
{{sdsc | num = 4 | notes={{mark since c++14}} | {{spar|binary-literal}} {{spar|integer-suffix}}{{mark optional}} }}
{{sdsc end}}
where
* {{spar|decimal-literal}} is a non-zero decimal digit ({{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}}, {{tt|8}}, {{tt|9}}), followed by zero or more decimal digits ({{tt|0}}, {{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}}, {{tt|8}}, {{tt|9}})
* {{spar|octal-literal}} is the digit zero ({{tt|0}}) followed by zero or more octal digits ({{tt|0}}, {{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}})
* {{spar|hex-literal}} is the character sequence {{tt|0x}} or the character sequence {{tt|0X}} followed by one or more hexadecimal digits ({{tt|0}}, {{tt|1}}, {{tt|2}}, {{tt|3}}, {{tt|4}}, {{tt|5}}, {{tt|6}}, {{tt|7}}, {{tt|8}}, {{tt|9}}, {{tt|a}}, {{tt|A}}, {{tt|b}}, {{tt|B}}, {{tt|c}}, {{tt|C}}, {{tt|d}}, {{tt|D}}, {{tt|e}}, {{tt|E}}, {{tt|f}}, {{tt|F}})
* {{spar|binary-literal}} is the character sequence {{tt|0b}} or the character sequence {{tt|0B}} followed by one or more binary digits ({{tt|0}}, {{tt|1}})
* {{spar|integer-suffix}}, if provided, may contain one or both of the following (if both are provided, they may appear in any order:
:* {{spar|unsigned-suffix}} (the character {{tt|u}} or the character {{tt|U}})
:* {{spar|long-suffix}} (the character {{tt|l}} or the character {{tt|L}}){{rev inl|since=c++11| or the {{spar|long-long-suffix}} (the character sequence {{tt|ll}} or the character sequence {{tt|LL}})}}
{{rev begin}}
{{rev | since = c++14 |Optional single quotes({{tt|'}}) may be inserted between the digits as a separator. They are ignored by the compiler.}}
{{rev end}}
===Explanation===
@1@ Decimal integer literal (base 10, the first digit is the most significant)
@2@ Octal integer literal (base 8, the first digit is the most significant)
@3@ Hexadecimal integer literal (base 16, the first digit is the most significant, the letters 'a' through 'f' represent values (decimal) 10 through 15)
@4@ Binary integer literal (base 2, the first digit is the most significant)

The following variables are initialized to the same value:
{{source|1=
int d = 42;
int o = 052;
int x = 0x2a;
int X = 0X2A;
int b = 0b101010; // C++14
}}

The following variables are also initialized to the same value:
{{source|1=
unsigned long long l1 = 18446744073709550592ull; // C++11
unsigned long long l2 = 18'446'744'073'709'550'592llu; // C++14
unsigned long long l3 = 1844'6744'0737'0955'0592uLL; // C++14
unsigned long long l4 = 184467'440737'0'95505'92LLU; // C++14
}}

===The type of the literal===
The type of the integer literal is the first type in which the value can fit, from the list of types which depends on which numeric base and which {{spar|integer-suffix}} was used.

{| class=&quot;wikitable&quot;
|- style=&quot;text-align:center&quot;
! colspan=&quot;3&quot; | Types allowed for integer literals
|- style=&quot;text-align:center&quot;
| suffix
| decimal bases
| hexadecimal or octal bases
|- style=&quot;text-align:left&quot;
| no suffix
| {{c|int}}
{{c|long int}}&lt;br&gt;
{{c|long long int}}{{mark since c++11}}
| {{c|int}}
{{c|unsigned int}}&lt;br&gt;
{{c|long int}}&lt;br&gt;
{{c|unsigned long int}}&lt;br&gt;
{{c|long long int}}{{mark since c++11}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c++11}}
|-
| {{tt|u}} or {{tt|U}}
| {{c|unsigned int}}
{{c|unsigned long int}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c++11}}
| {{c|unsigned int}}
{{c|unsigned long int}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c++11}}
|-
| {{tt|l}} or {{tt|L}}
| {{c|long int}}
{{c|unsigned long int}}{{mark until c++11}}&lt;br&gt;
{{c|long long int}}{{mark since c++11}}
| {{c|long int}}
{{c|unsigned long int}}&lt;br&gt;
{{c|long long int}}{{mark since c++11}}&lt;br&gt;
{{c|unsigned long long int}}{{mark since c++11}}
|-
| both {{tt|l}}/{{tt|L}} and {{tt|u}}/{{tt|U}}
| {{c|unsigned long int}}
{{c|unsigned long long int}}{{mark since c++11}}
| {{c|unsigned long int}}{{mark since c++11}}
{{c|unsigned long long int}}{{mark since c++11}}
|-
| {{tt|ll}} or {{tt|LL}}
| {{c|long long int}}{{mark since c++11}}
| {{c|long long int}}{{mark since c++11}}
{{c|unsigned long long int}}{{mark since c++11}}
|-
| both {{tt|ll}}/{{tt|LL}} and {{tt|u}}/{{tt|U}}
| {{c|unsigned long long int}}{{mark since c++11}}
| {{c|unsigned long long int}}{{mark since c++11}}
|}

If the value of the integer literal is too big to fit in any of the types allowed by suffix/base combination and the compiler supports extended integer types (such as {{c|__int128}}) the literal may be given the extended integer type -- otherwise the program is ill-formed.

===Notes===
Letters in the integer literals are case-insensitive: {{tt|0xDeAdBaBeU}} and {{tt|0XdeadBABEu}} represent the same number (one exception is the {{spar|long-long-suffix}}, which is either {{tt|ll}} or {{tt|LL}}, never {{tt|lL}} or {{tt|Ll}})

There are no negative integer literals. Expressions such as {{c|-1}} apply the {{rlp|operator_arithmetic|unary minus operator}} to the value represented by the literal, which may involve implicit type conversions.

In C prior to C99 (but not in C++), unsuffixed decimal values that do not fit in {{c|long int}} are allowed to have the type {{c|unsigned long int}}.

When used in a controlling expression of [[cpp/preprocessor/conditional|#if]] or [[c/preprocessor/conditional|#elif]], all signed integer constants act as if they have type {{lc|std::intmax_t}} and all unsigned integer constants act as if they have type {{lc|std::uintmax_t}}.

===Example===
{{example|code=
#include &lt;iostream&gt;

int main()
{
std::cout &lt;&lt; 123    &lt;&lt; '\n'
          &lt;&lt; 0123   &lt;&lt; '\n'
          &lt;&lt; 0x123  &lt;&lt; '\n'
          &lt;&lt; 0b10   &lt;&lt; '\n'
          &lt;&lt; 12345678901234567890ull &lt;&lt; '\n'
          &lt;&lt; 12345678901234567890u   &lt;&lt; '\n'; // the type is unsigned long long even
                                              // without a long long suffix

//   std::cout &lt;&lt; -9223372036854775808 &lt;&lt; '\n'; // error: the value
                // 9223372036854775808 cannot fit in signed long long, which is the
                // biggest type allowed for unsuffixed decimal integer literal
     std::cout &lt;&lt; -9223372036854775808u &lt;&lt; '\n'; // unary minus applied to unsigned
                // value subtracts it from 2^64, this gives 9223372036854775808
     std::cout &lt;&lt; -9223372036854775807 - 1 &lt;&lt; '\n'; // correct way to calculate
                                                    // the value -9223372036854775808
}
|output=
123
83
291
2
12345678901234567890
12345678901234567890
9223372036854775808
-9223372036854775808
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/integer_constant | integer constant}}
{{dsc end}}

[[de:cpp/language/integer literal]]
[[es:cpp/language/integer literal]]
[[fr:cpp/language/integer literal]]
[[it:cpp/language/integer literal]]
[[ja:cpp/language/integer literal]]
[[pt:cpp/language/integer literal]]
[[ru:cpp/language/integer literal]]
[[zh:cpp/language/integer literal]]</text>
      <sha1>i8akg2nw4nve6vveu2lfm76fa3jxdro</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/lambda</title>
    <ns>0</ns>
    <id>5059</id>
    <revision>
      <id>92026</id>
      <parentid>91889</parentid>
      <timestamp>2017-04-02T15:46:09Z</timestamp>
      <contributor>
        <ip>36.149.64.109</ip>
      </contributor>
      <text xml:space="preserve" bytes="27132">{{title|Lambda expressions {{mark since c++11}}}}
{{cpp/language/functions/navbar}}

Constructs a [[enwiki:Closure (computer science)|closure]]: an unnamed function object capable of capturing variables in scope.

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 |
{{ttb|[}} {{spar|capture-list}} {{ttb|]}} {{ttb|(}} {{spar|params}} {{ttb|)}} {{ttb|mutable}}{{mark optional}} {{ttb|constexpr}}{{mark optional}}{{mark|c++17}} {{spar|exception}} {{spar|attribute}} {{ttb|-&gt;}} {{spar|ret}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc | num=2 |
{{ttb|[}} {{spar|capture-list}} {{ttb|]}} {{ttb|(}} {{spar|params}} {{ttb|)}} {{ttb|-&gt;}} {{spar|ret}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc | num=3 |
{{ttb|[}} {{spar|capture-list}} {{ttb|]}} {{ttb|(}} {{spar|params}} {{ttb|)}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc | num=4 |
{{ttb|[}} {{spar|capture-list}} {{ttb|]}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc end}}

1) Full declaration.

2) Declaration of a const lambda: the objects captured by copy cannot be modified.

3) Omitted trailing-return-type: the return type of the closure's {{tt|operator()}} is determined according to the following rules:
{{rev begin}}
{{rev|until=c++14|
* if the {{spar|body}} consists of nothing but a single {{c|return}} statement with an expression, the return type is the type of the returned expression (after {{rlp|implicit_cast#Lvalue transformations|lvalue-to-rvalue, array-to-pointer, or function-to-pointer implicit conversion}});
* otherwise, the return type is {{c|void}}.
}}{{rev|since=c++14|
The return type is {{rlp|template argument deduction|deduced}} from {{ltt|cpp/language/return}} statements as if for a function whose {{rlp|function#Return_type_deduction|return type is declared auto}}.
}}
{{rev end}}

4) Omitted parameter list: function takes no arguments, as if the parameter list was {{ttb|()}}. This form can only be used if none of constexpr, mutable, exception specification, attributes, or trailing return type is used.

===Explanation===

{{par begin}}
{{par | mutable | allows {{spar|body}} to modify the parameters captured by copy, and to call their non-const member functions}}
{{par | constexpr{{mark c++17}} | explicitly specifies that the function call operator is a {{rlp|constexpr}} function. When this specifier is not present, the function call operator will be {{tt|constexpr}} anyway, if it happens to satisfy all constexpr function requirements}}
{{par | {{spar|exception}} | provides the [[cpp/language/except_spec|exception specification]] or the [[cpp/language/noexcept_spec|noexcept clause]] for operator() of the closure type}}
{{par | {{spar|attribute}} | provides the [[cpp/language/attributes|attribute specification]] for operator() of the closure type}}
{{par | {{spar|capture-list}} | a comma-separated list of zero or more [[#Lambda capture|captures]], optionally beginning with a {{spar|capture-default}}.
Capture list can be passed as follows (see [[#Lambda_capture|below]] for the detailed description): 
*{{ttb|[a,&amp;b]}} where ''a'' is captured by copy and ''b'' is captured by reference.
*{{ttb|[this]}} captures the current object ({{tt|*[[cpp/language/this|this]]}}) by reference
*{{ttb|[&amp;]}} captures all [[cpp/language/storage_duration|automatic]] variables used in the body of the lambda by reference and current object by reference if exists
*{{ttb|[{{=}}]}} captures all {{rlp|storage duration|automatic}} variables used in the body of the lambda by copy and current object by reference if exists
*{{ttb|[]}} captures nothing }}
{{par | {{spar|params}} | The list of parameters, as in [[cpp/language/function|named functions]]{{rev inl|until=c++14|, except that {{rlp|default arguments}} are not allowed}}. {{rev inl|since=c++14|If {{tt|auto}} is used as a type of a parameter, the lambda is a ''generic lambda''.}}}}
{{par | {{spar|ret}} | Return type. If not present it's implied by the function return statements (or void if it doesn't return any value)}}
{{par | {{spar|body}} | Function body}}
{{par end}}

The lambda expression is a prvalue expression {{rev inl|until=c++17|whose value is}}{{rev inl|since=c++17|whose result object is}} an unnamed temporary object of unique unnamed non-union non-aggregate class type, known as ''closure type'', which is declared (for the purposes of {{rlp|adl|ADL}}) in the smallest block scope, class scope, or namespace scope that contains the lambda expression. The closure type has the following members:

{{member | {{small|ClosureType::}}operator()({{spar|params}}) | 2=
{{dcl begin}}
{{dcl | notes={{mark|the keyword mutable was not used}} | 1=
ret operator()(params) const { body }
}}
{{dcl | notes={{mark|the keyword mutable was used}} | 1=
ret operator()(params) { body }
}}
{{dcl | since=c++14 | notes={{mark|generic lambda}} | 1=
template&lt;template-params&gt;
ret operator()(params) { body }
}}
{{dcl end}}
Executes the body of the lambda-expression, when invoked. When accessing a variable, accesses its captured copy (for the entities captured by copy), or the original object (for the entities captured by reference). Unless the keyword {{c|mutable}} was used in the lambda-expression, the function-call operator is const-qualified and the objects that were captured by copy are non-modifiable from inside this {{c|operator()}}. The function-call operator is never volatile-qualified and never virtual.
{{rev begin}}
{{rev |since=c++17|
The function-call operator is always {{tt|constexpr}} if it satisfies the requirements of a {{rlp|constexpr|constexpr function}}. It is also constexpr if the keyword constexpr was used in the lambda declaration.
}}
{{rev |since=c++14|
For every parameter in {{spar|params}} whose type is specified as {{tt|auto}}, an invented template parameter is added to {{spar|template-params}}, in order of appearance. The invented template parameter may be a {{rlp|parameter pack}} if the corresponding function member of {{spar|params}} is a function parameter pack.
{{source|1=
// generic lambda, operator() is a template with two parameters
auto glambda = [](auto a, auto&amp;&amp; b) { return a &lt; b; };
bool b = glambda(3, 3.14); // ok

// generic lambda, operator() is a template with one parameter
auto vglambda = [](auto printer) {
    return [=](auto&amp;&amp;... ts) // generic lambda, ts is a parameter pack
    { 
        printer(std::forward&lt;decltype(ts)&gt;(ts)...);
        return [=] { printer(ts...); }; // nullary lambda (takes no parameters)
    };
};
auto p = vglambda([](auto v1, auto v2, auto v3) { std::cout &lt;&lt; v1 &lt;&lt; v2 &lt;&lt; v3; });
auto q = p(1, 'a', 3.14); // outputs 1a3.14
q();                      // outputs 1a3.14
}}
{{tt|ClosureType}}'s {{tt|operator()}} cannot be explicitly instantiated or explicitly specialized.
}}
{{rev end}}
the exception specification {{spar|exception}} on the lambda-expression applies to the function-call operator or operator template.

For the purpose of {{rlp|lookup|name lookup}}, determining the type and value of the {{rlp|this|this pointer}} and for accessing non-static class members, the body of the closure type's function call operator is considered in the context of the lambda-expression.

{{source|1=
struct X {
    int x, y;
    int operator()(int);
    void f()
    {
        // the context of the following lambda is the member function X::f
        [=]()-&gt;int
        {
            return operator()(this-&gt;x + y); // X::operator()(this-&gt;x + (*this).y)
                                            // this has type X*
        };
    }
};
}}
{{tt|ClosureType}}'s {{tt|operator()}} cannot be named in a {{rlp|friend}} declaration.

===Dangling references===
If a non-reference entity is captured by reference, implicitly or explicitly, and the function call operator of the closure object is invoked after the entity's lifetime has ended, undefined behavior occurs. The C++ closures do not extend the lifetimes of the captured references.

Same applies to the lifetime of the object pointed to by the captured {{tt|this}} pointer.
}}

{{member | {{small|ClosureType::}}operator ret(*)({{spar|params}})() | 2=

{{dcl begin}}
{{dcl rev begin| notes={{mark|capture-less non-generic lambda}}}}
{{dcl |until=c++17| 1=
using F = ret(*)(params);
operator F() const; 
}}
{{dcl |since=c++17| 1=
using F = ret(*)(params);
constexpr operator F() const; 
}}
{{dcl rev end}}
{{dcl rev begin| notes={{mark|capture-less generic lambda}}}}
{{dcl | since=c++14|until=c++17|1=
template&lt;template-params&gt; using fptr_t = /*see below*/;
template&lt;template-params&gt; operator fptr_t&lt;template-params&gt;() const; 
}}
{{dcl | since=c++17| 1=
template&lt;template-params&gt; using fptr_t = /*see below*/;
template&lt;template-params&gt; operator fptr_t&lt;template-params&gt;() const; 
}}
{{dcl rev end}}
{{dcl end}}

This {{rlp|cast operator|user-defined conversion function}} is only defined if the capture list of the lambda-expression is empty. It is a public, {{rev inl|since=c++17|constexpr}} non-virtual, non-explicit, const {{rev inl|since=c++14|noexcept}} member function of the closure object.

{{rev begin}}
{{rev|since=c++14|
A generic captureless lambda has user-defined conversion function template with the same invented template parameter list as the function-call operator template. If the return type is empty or auto, it is obtained by return type deduction on the function template specialization, which, in turn, is obtained by {{rlp|template argument deduction}} for conversion function templates.
{{source|1=
void f1(int (*)(int)) {}
void f2(char (*)(int)) {}
void h(int (*)(int)) {} // #1
void h(char (*)(int)) {} // #2
auto glambda = [](auto a) { return a; };
f1(glambda); // ok
f2(glambda); // error: not convertible
h(glambda); // ok: calls #1 since #2 is not convertible

int&amp; (*fpi)(int*) = [](auto* a)-&gt;auto&amp; { return *a; }; // ok
}}
}}
{{rev end}}

The value returned by this conversion function is a pointer to a function with C++ {{rlp|language linkage}} that, when invoked, has the same effect as invoking the closure object's function call operator directly.
{{rev begin}}
{{rev|since=c++17|
This function is constexpr if the function call operator (or specialization, for generic lambdas) is constexpr.
{{source|1=
auto Fwd= [](int(*fp)(int), auto a){return fp(a);};
auto C=[](auto a){return a;};
static_assert(Fwd(C,3)==3);//OK
auto NC=[](auto a){static int s; return a;};
static_assert(Fwd(NC,3)==3); // error: no specialization can be constexpr because of s
}}

If the closure object's {{tt|operator()}} has a non-throwing exception specification, then the pointer returned by this function has the type pointer to noexcept function.
}}
{{rev end}}
}}

{{member | {{small|ClosureType::}}ClosureType() | 2=
{{dcl begin}}
{{dcl | notes={{mark until c++14}} | 1=
ClosureType() = delete;
}}
{{dcl | notes={{mark since c++14}} | 1=
ClosureType(const ClosureType&amp; ) = default;
}}
{{dcl | notes={{mark since c++14}} | 1=
ClosureType(ClosureType&amp;&amp; ) = default;
}}
{{dcl end}}
Closure types are not {{concept|DefaultConstructible}}. Closure types have {{rev inl|until=c++14|a deleted}}{{rev inl|since=c++14|no}} default constructor. The copy constructor and the move constructor are {{rev inl|until=c++14|implicitly-declared}}{{rev inl|since=c++14|declared as defaulted}} and may be implicitly-defined according to the usual rules for [[cpp/language/copy_constructor|copy constructors]] and [[cpp/language/move_constructor|move constructors]].
}}

{{member | {{small|ClosureType::}}operator{{=}}(const ClosureType&amp;) | 2=
{{ddcl |1=
ClosureType&amp; operator=(const ClosureType&amp;) = delete;
}}
Closure types are not {{concept|CopyAssignable}}.
}}

{{member | {{small|ClosureType::}}~ClosureType() | 2=
{{ddcl |1=
~ClosureType() = default;
}}
The destructor is implicitly-declared.
}}

{{member | {{small|ClosureType::}}{{spar|Captures}} | 2=
{{ddcl |1=
T1 a;
T2 b;
...
}}
If the lambda-expression captures anything by copy (either implicitly with capture clause {{ttb|[{{=}}]}} or explicitly with a capture that does not include the character &amp;, e.g. {{ttb|[a, b, c]}}), the closure type includes unnamed non-static data members, declared in unspecified order, that hold copies of all entities that were so captured.

Those data members that correspond to captures without initializers are {{rlp|direct initialization|direct-initialized}} when the lambda-expression is evaluated. Those that correspond to captures with initializers are initialized as the initializer requires (could be copy- or direct-initialization). If an array is captured, array elements are direct-initialized in increasing index order. The order in which the data members are initialized is the order in which they are declared (which is unspecified).

The type of each data member is the type of the corresponding captured entity, except if the entity has reference type (in that case, references to functions are captured as {{mark unreviewed dr|CWG|2095}}lvalue references to the referenced functions, and references to objects are captured as copies of the referenced objects).

For the entities that are captured by reference (with the default capture {{ttb|[&amp;]}} or when using the character &amp;, e.g. {{ttb|[&amp;a, &amp;b, &amp;c]}}), it is unspecified if additional data members are declared in the closure type {{rev inl|since=c++17|, but any such additional members must satisfy {{concept|LiteralType}}}}.
}}

Lambda-expressions are not allowed in {{rlp|expressions#Unevaluated_expressions|unevaluated expressions}}, {{rlp|template parameters|template arguments}}, {{rlp|type alias|alias declarations}}, {{rlp|typedef|typedef declarations}}, and anywhere in a function (or function template) declaration except the function body and the function's {{rlp|default arguments}}.

===Lambda capture===
The {{spar|capture-list}} is a comma-separated list of zero or more ''captures'', optionally beginning with the {{spar|capture-default}}. The only capture defaults are
* {{ttb|&amp;}} (implicitly catch the {{rlp|definition#ODR-use|odr-used}} automatic variables and &lt;!--{{rev inl|until=c++17|{{tt|this}}}}{{rev inl|since=c++17|--&gt;{{tt|*this}}&lt;!--}}--&gt; by reference) and
* {{ttb| {{=}} }} (implicitly catch the odr-used automatic variables by copy and &lt;!--{{rev inl|until=c++17|implicitly catch {{tt|this}} by copy if it is odr-used}}{{rev inl|since=c++17|--&gt;implicitly catch {{tt|*this}} by reference if {{tt|this}} is odr-used&lt;!--}}--&gt;).

The syntax of an individual capture in {{spar|capture-list}} is
{{sdsc begin}}
{{sdsc | num=1 | {{spar|identifier}} }}
{{sdsc | num=2 | {{spar|identifier}} {{ttb|...}} }}
{{sdsc | num=3 |notes={{mark c++14}}| {{spar|identifier}} {{spar|initializer}} }}
{{sdsc | num=4 |{{ttb|&amp;}} {{spar|identifier}} }}
{{sdsc | num=5 |{{ttb|&amp;}} {{spar|identifier}} {{ttb|...}} }}
{{sdsc | num=6 |notes={{mark c++14}}| {{ttb|&amp;}} {{spar|identifier}} {{spar|initializer}} }}
{{sdsc | num=7 | {{ttb|this}} }}
{{sdsc | num=8 | {{ttb|*}} {{ttb|this}} | notes={{mark c++17}}}}
{{sdsc end}}
@1@ simple by-copy capture
@2@ by-copy capture that is a {{rlp|parameter pack|pack expansion}}
@3@ by-copy capture with an {{rlp|initialization|initializer}}
@4@ simple by-reference capture
@5@ by-reference capture that is a {{rlp|parameter pack|pack expansion}}
@6@ by-reference capture with an initializer
@7@ &lt;!--{{rev inl|until=c++17|by-copy capture of the {{rlp|this|this pointer}}}}
{{rev inl|since=c++17|--&gt;by-reference capture of the current object&lt;!--}}--&gt;
@8@ by-copy capture of the current object

If the capture-default is {{tt|&amp;}}, subsequent captures must not begin with {{tt|&amp;}}. If the capture-default is {{tt|{{=}}}}, subsequent captures must begin with {{tt|&amp;}}{{rev inl|since=c++17| or be {{tt|*this}}}}. Any capture may appear only once.
{{source|1=
struct S2 { void f(int i); };
void S2::f(int i)
{
    [&amp;]{}; //ok: by-reference capture default
    [=]{}; //ok: by-copy capture default
    [&amp;, i]{}; // ok: by-reference capture, except i is captured by copy
    [=, &amp;i]{}; // ok: by-copy capture, except i is captured by reference
    [&amp;, &amp;i] {}; // error: by-reference capture when by-reference is the default
    [=, this] {}; // error: this when = is the default
    [=, *this]{}; // ok: captures the enclosing S2 by copy (C++17)
    [i, i] {}; // error: i repeated
    [this, *this] {}; // error: &quot;this&quot; repeated (C++17)
}
}}

Only lambda-expressions defined at block scope may have a capture-default or captures without initializers. For such lambda-expression, the ''reaching scope'' is defined as the set of enclosing scopes up to and including the innermost enclosing function (and its parameters). This includes nested block scopes and the scopes of enclosing lambdas if this lambda is nested.

The {{spar|identifier}} in any capture without an initializer (other than the {{tt|this}}-capture) is looked up using usual {{rlp|lookup|unqualified name lookup}} in the ''reaching scope'' of the lambda. The result of the lookup must be a {{rlp|object|variable}} with automatic storage duration declared in the reaching scope. The variable (or {{tt|this}}) is ''explicitly captured''.

{{rev begin}}
{{rev|since=c++14|
A capture with an initializer acts as if it declares and explicitly captures a variable declared with type {{rlp|auto}}, whose declarative region is the body of the lambda expression (that is, it is not in scope within its initializer), except that:
* if the capture is by-copy, the non-static data member of the closure object is another way to refer to that auto variable.
* if the capture is by-reference, the reference variable's lifetime ends when the lifetime of the closure object ends

This is used to capture move-only types with a capture such as {{c|1=x = std::move(x)}}

{{source|1=
int x = 4;
auto y = [&amp;r = x, x = x + 1]()-&gt;int
    {
        r += 2;
        return x * x;
    }(); // updates ::x to 6 and initializes y to 25.
}}
}}
{{rev end}}

If a capture list has a capture-default and does not explicitly capture the enclosing object (as {{tt|this}} or {{tt|*this}}) or an automatic variable, it captures it ''implicitly'' if
* the body of the lambda {{rlp|definition#ODR-use|odr-uses}} the variable or the {{tt|this}} pointer
{{rev begin}}
{{rev |since=c++14|
* or the variable or the {{tt|this}} pointer is named in a potentially-evaluated expression within an expression that depends on a generic lambda parameter
{{source|1=
void f(int, const int (&amp;)[2] = {}) {} // #1
void f(const int&amp;, const int (&amp;)[1]) {} // #2
void test()
{
    const int x = 17;
    auto g1 = [](auto a) { f(x); }; // ok: calls #1, does not capture x
    auto g2 = [=](auto a) {
            int selector[sizeof(a) == 1 ? 1 : 2] = {};
            f(x, selector); // ok: is a dependent expression, so captures x
    };
}
}}
}}
{{rev end}}

If the body of a lambda {{rlp|definition#ODR-use|odr-uses}} an entity captured by copy, the member of the closure type is accessed. If it is not odr-using the entity, the access is to the original object:
{{source|1=
void f(const int*);
void g()
{
    const int N = 10;
    [=]{ 
        int arr[N]; // not an odr-use: refers to g's const int N
        f(&amp;N); // odr-use: causes N to be captured (by copy)
               // &amp;N is the address of the closure object's member N, not g's N
    }();
}
}}

{{mark unreviewed dr|CWG|2011}}If a lambda odr-uses a reference that is captured by reference, it is using the object referred-to by the original reference, not the captured reference itself:
{{example|code=
#include &lt;iostream&gt;

auto make_function(int&amp; x) {
  return [&amp;]{ std::cout &lt;&lt; x &lt;&lt; '\n'; };
}

int main() {
  int i = 3;
  auto f = make_function(i); // the use of x in f binds directly to i
  i = 5;
  f(); // OK; prints 5
}
}}

Within the body of a lambda, any use of {{rlp|decltype}} on any variable with automatic storage duration is as if it were captured and odr-used, even though decltype itself isn't an odr-use and no actual capture takes place:
{{source|1=
void f3() {
    float x, &amp;r = x;
    [=]
    { // x and r are not captured (appearance in a decltype operand is not an odr-use)
        decltype(x) y1; // y1 has type float
        decltype((x)) y2 = y1; // y2 has type float const&amp; because this lambda
                               // is not mutable and x is an lvalue
        decltype(r) r1 = y1;   // r1 has type float&amp; (transformation not considered)
        decltype((r)) r2 = y2; // r2 has type float const&amp;
    };
}
}}

Any entity captured by a lambda (implicitly or explicitly) is odr-used by the lambda-expression (therefore, implicit capture by a nested lambda triggers implicit capture in the enclosing lambda).

All implicitly-captured variables must be declared within the ''reaching scope'' of the lambda.

If a lambda captures the enclosing object (as {{tt|this}} or {{tt|*this}}), the nearest enclosing function must be a non-static member function:
{{source|1=
struct s2 {
  double ohseven = .007;
  auto f() { // nearest enclosing function for the following two lambdas
    return [this] { // capture the enclosing s2 by reference
      return [*this] { // capture the enclosing s2 by copy (C++17)
          return ohseven; // OK
       }
     }();
  }
  auto g() {
     return []{ // capture nothing
         return [*this]{}; // error: *this not captured by outer lambda-expression
      }();
   }
};
}}

If a lambda expression (or an instantiation of a generic lambda's function call operator) ODR-uses {{tt|this}} or any variable with automatic storage duration, it must be captured by the lambda expression.

{{source|1=
void f1(int i)
{
    int const N = 20;
    auto m1 = [=] {
            int const M = 30;
            auto m2 = [i] {
                    int x[N][M]; // N and M are not odr-used 
                                 // (ok that they are not captured)
                    x[0][0] = i; // i is explicitly captured by m2
                                 // and implicitly captured by m1
            };
    };

    struct s1 // local class within f1()
    {
        int f;
        void work(int n) // non-static member function
        {
            int m = n * n;
            int j = 40;
            auto m3 = [this, m] {
                auto m4 = [&amp;, j] { // error: j is not captured by m3
                        int x = n; // error: n is implicitly captured by m4
                                   // but not captured by m3
                        x += m;    // ok: m is implicitly captured by m4
                                   // and explicitly captured by m3
                        x += i;    // error: i is outside of the reaching scope
                                   // (which ends at work())
                        x += f;    // ok: this is captured implicitly by m4
                                   // and explicitly captured by m3
                };
            };
        }
    };
}
}}

Class members cannot be captured explicitly by a capture without initializer (as mentioned above, only {{rlp|object|variables}} are permitted in the capture list):
{{source|1=
class S {
  int x = 0;
  void f() {
    int i = 0;
//  auto l1 = [i, x]{ use(i, x); };    // error: x is not a variable
    auto l2 = [i, x=x]{ use(i, x); };  // OK, copy capture
    i = 1; x = 1; l2(); // calls use(0,0)
    auto l3 = [i, &amp;x=x]{ use(i, x); }; // OK, reference capture
    i = 2; x = 2; l3(); // calls use(1,2)
  }
};
}}

When a lambda captures a member using implicit by-copy capture, it does not make a copy of that member variable: the use of a member variable {{tt|m}} is treated as an expression {{c|(*this).m}}, and the {{c|this}} pointer is what's captured (by value) instead. The member behaves as if caught by reference:
{{source|1=
class S {
  int x = 0;
  void f() {
    int i = 0;
    auto l1 = [=]{ use(i, x); }; // captures a copy of i and a copy of the this pointer
    i = 1; x = 1; l1(); // calls use(0,1), as if i by copy and x by reference
    auto l2 = [i, this]{ use(i, x); }; // same as above, made explicit
    i = 2; x = 2; l2(); // calls use(1,2), as if i by copy and x by reference
    auto l3 = [&amp;]{ use(i, x); }; // captures i by reference and a copy of the this pointer
    i = 3; x = 2; l3(); // calls use(3,2), as if i and x are both by reference
    auto l4 = [i, *this]{ use(i, x); }; // makes a copy of *this, including a copy of x
    i = 4; x = 4; l4(); // calls use(3,2), as if i and x are both by copy
  }
};
}}

If a lambda-expression appears in a {{rlp|default arguments|default argument}}, it cannot explicitly or implicitly capture anything.

Members of {{rlp|union|anonymous unions}} cannot be captured.

If a nested lambda {{tt|m2}} captures something that is also captured by the immediately enclosing lambda {{tt|m1}}, then {{tt|m2}}'s capture is transformed as follows:
* if the enclosing lambda {{tt|m1}} captures by copy, {{tt|m2}} is capturing the non-static member of {{tt|m1}}'s closure type, not the original variable or {{tt|this}}.
* if the enclosing lambda {{tt|m1}} by reference, {{tt|m2}} is capturing the original variable or {{tt|this}}.
{{example
|code=
#include &lt;iostream&gt;

int main()
{
    int a = 1, b = 1, c = 1;
    
    auto m1 = [a, &amp;b, &amp;c]() mutable {
        auto m2 = [a, b, &amp;c]() mutable {
            std::cout &lt;&lt; a &lt;&lt; b &lt;&lt; c &lt;&lt; '\n';
            a = 4; b = 4; c = 4;
        };
        a = 3; b = 3; c = 3;
        m2();
    };
    
    a = 2; b = 2; c = 2;

    m1();                             // calls m2() and prints 123
    std::cout &lt;&lt; a &lt;&lt; b &lt;&lt; c &lt;&lt; '\n'; // prints 234
}
}}

===Example===
{{example
 | This example shows (a) how to pass a lambda to a generic algorithm; (b) how objects resulting from a lambda declaration can be stored in {{lc|std::function}} objects.
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

int main()
{
    std::vector&lt;int&gt; c = {1, 2, 3, 4, 5, 6, 7};
    int x = 5;
    c.erase(std::remove_if(c.begin(), c.end(), [x](int n) { return n &lt; x; }), c.end());

    std::cout &lt;&lt; &quot;c: &quot;;
    std::for_each(c.begin(), c.end(), [](int i){ std::cout &lt;&lt; i &lt;&lt; ' '; });
    std::cout &lt;&lt; '\n';

    // the type of a closure cannot be named, but can be inferred with auto
    auto func1 = [](int i) { return i + 4; };
    std::cout &lt;&lt; &quot;func1: &quot; &lt;&lt; func1(6) &lt;&lt; '\n';
 
    // like all callable objects, closures can be captured in std::function
    // (this may incur unnecessary overhead)
    std::function&lt;int(int)&gt; func2 = [](int i) { return i + 4; };
    std::cout &lt;&lt; &quot;func2: &quot; &lt;&lt; func2(6) &lt;&lt; '\n';
}
 | output= 
c: 5 6 7
func1: 10
func2: 10
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1891|std=C++14|before=closure had a deleted default ctor and implicit copy/move ctors|after=no default and defaulted copy/move}}
{{dr list item|wg=cwg|dr=1722 |std=C++14|before=the conversion function for captureless lambdas had unspecified exception specification|after=conversion function is noexcept}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc auto}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc end}}

[[de:cpp/language/lambda]]
[[es:cpp/language/lambda]]
[[fr:cpp/language/lambda]]
[[it:cpp/language/lambda]]
[[ja:cpp/language/lambda]]
[[pt:cpp/language/lambda]]
[[ru:cpp/language/lambda]]
[[zh:cpp/language/lambda]]</text>
      <sha1>2afmah6220vgmn8plce4hst8fsu543w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/language linkage</title>
    <ns>0</ns>
    <id>9919</id>
    <revision>
      <id>90282</id>
      <parentid>76733</parentid>
      <timestamp>2017-02-19T07:26:59Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="5663">{{title|Language linkage}}
{{cpp/language/declarations/navbar}}
Provides for linkage between modules written in different programming languages.

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|extern}} {{spar|string-literal}} {{ttb|{}} {{spar|declaration-seq}}{{mark optional}} {{ttb|} }}
}}
{{sdsc|num=2|1=
{{ttb|extern}} {{spar|string-literal}} {{spar|declaration}}
}}
{{sdsc end}}
@1@ Applies the language specification {{spar|string-literal}} to all function types, function names with external linkage and variables with external linkage declared in {{spar|declaration-seq}}
@2@ Applies the language specification {{spar|string-literal}} to a single declaration or definition.

{{par begin}}
{{par | {{spar|string-literal}} | The name of the required language linkage }}
{{par | {{spar|declaration-seq}} | a sequence of declarations, which may include nested linkage specifications }}
{{par | {{spar|declaration}} | a declaration }}
{{par end}}

===Explanation===
Every function type, every function name with {{rlp|storage_duration|external linkage}}, and every variable name with {{rlp|storage_duration|external linkage}}, has a property called ''language linkage''. Language linkage encapsulates the set of requirements necessary to link with a module written in another programming language: [[enwiki:Calling_convention|calling convention]], [[enwiki::Name_mangling|name mangling]] algorithm, etc.

Only two language linkages are guaranteed to be supported:
@1@ {{c|&quot;C++&quot;}}, the default language linkage.
@2@ {{c|&quot;C&quot;}}, which makes it possible to link with functions written in the C programming language, and to define, in a C++ program, functions that can be called from the modules written in C.

{{source|1=
extern &quot;C&quot; {
    int open(const char *pathname, int flags); // C function declaration
}

int main()
{
    int fd = open(&quot;test.txt&quot;, 0); // calls a C function from a C++ program
}

// This C++ function can be called from C code
extern &quot;C&quot; void handler(int) {
    std::cout &lt;&lt; &quot;Callback invoked\n&quot;; // It can use C++
} 
}}

Since language linkage is part of every function type, pointers to functions maintain language linkage as well. Language linkage of function types (which represents calling convention) and language linkage of function names (which represents name mangling) are independent of each other:

{{source|1=
extern &quot;C&quot; void f1(void(*pf)()); // declares a function f1 with C linkage,
                             // which returns void and takes a pointer to a C function
                             // which returns void and takes no parameters
extern &quot;C&quot; typedef void FUNC(); // declares FUNC as a C function type that returns void
                                // and takes no parameters
FUNC f2;            // the name f2 has C++ linkage, but its type is C function
extern &quot;C&quot; FUNC f3; // the name f3 has C linkage and its type is C function void()
void (*pf2)(FUNC*); // the name pf2 has C++ linkage, and its type is
                    // &quot;pointer to a C++ function which returns void and takes one
                    // argument of type 'pointer to the C function which returns void
                    // and takes no parameters'&quot;
extern &quot;C&quot; {
    static void f4();  // the name of the function f4 has internal linkage (no language)
                      // but the function's type has C language linkage
}
}}

Two functions with the same name and the same parameter list in the same namespace cannot have two different language linkages (note, however, that linkage of a parameter may permit such overloading, as in the case of {{lc|std::qsort}} and {{lc|std::bsearch}}). Likewise, two variables in the same namespace cannot have two different language linkages.

====Special rules for &quot;C&quot; linkage====
@1@ When class member declarations and member function type declarations appear in a {{c|&quot;C&quot;}} language block, their linkage remains {{c|&quot;C++&quot;}}
@2@ When two functions with the same unqualified name are declared in different namespaces, and both have {{c|&quot;C&quot;}} language linkage, the declarations refer to the same function
@3@ When two variables with {{c|&quot;C&quot;}} language linkage and the same name that appear in different namespaces, they refer to the same variable.
@4@ A {{c|&quot;C&quot;}} variable and a {{c|&quot;C&quot;}} function cannot have the same name, regardless if they are defined in the same or different namespaces.

===Notes===

Language specifications can only appear in namespace scope

The braces of the language specification do not establish a scope.

When language specifications nest, the innermost specification is the one that is in effect.

A function can be re-declared without a linkage specification after it was declared with a language specification, the second declaration will reuse the first language linkage. The opposite is not true: if the first declaration has no language linkage, it is assumed {{c|&quot;C++&quot;}}, and redeclaring with another language is an error.

A declaration directly contained in a language linkage specification is treated as if it contains the [[cpp/language/storage_duration|extern specifier]] for the purpose of determining the {{rlp|storage_duration#Linkage|linkage}} of the declared name and whether it is a {{rlp|definition}}.
{{source|1=
extern &quot;C&quot; int x; // a declaration and not a definition
// The above line is equivalent to extern &quot;C&quot; { extern int x; }

extern &quot;C&quot; { int x; } // a declaration and definition
}}

===References===
{{ref std c++14}}
{{ref std | section=7.5 | title=Linkage specifications | id=dcl.link}}
{{ref std end}}
{{ref std c++11}}
{{ref std | section=7.5 | title=Linkage specifications | id=dcl.link}}
{{ref std end}}

[[zh:cpp/language/language_linkage]]</text>
      <sha1>q305r77ucwu7uiyandpg87timtu4lae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/lifetime</title>
    <ns>0</ns>
    <id>13096</id>
    <revision>
      <id>91798</id>
      <parentid>90801</parentid>
      <timestamp>2017-03-31T19:58:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="11881">{{title|Lifetime}}
{{cpp/language/basics/navbar}}
Every {{rlp|object}} and {{rlp|reference}} has a ''lifetime'', which is a runtime property: for any object or reference, there is a point of execution of a program when its lifetime begins, and there is a moment when it ends.

* For any object of class or aggregate types if it, or any of its subobjects, is initialized by anything other than the {{rlp|default_constructor#Trivial_default_constructor|trivial default constructor}}, lifetime begins when initialization ends.
* For any object of class types whose {{rlp|destructor#Trivial_destructor|destructor}} is not trivial, lifetime ends when the execution of the destructor begins.
* Lifetime of a member of a {{rlp|union}} begins when that member is made active
* For all other objects (class objects initialized by a trivial default constructor, non-class objects, arrays of those, etc.), lifetime begins when the properly-aligned storage for the object is allocated and ends when the storage is deallocated or reused by another object.

Lifetime of an object is equal to or is nested within the lifetime of its storage, see {{rlp|storage duration}}.

{{rev begin}}
{{rev|until=c++14|
Lifetime of a {{rlp|reference}} is exactly its storage duration.
}}{{rev|since=c++14|{{mark unreviewed dr|CWG|2012}}
The lifetime of a {{rlp|reference}} begins when its initialization is complete and ends as if it were a scalar object.
}}
{{rev end}}
Note: the lifetime of the referred object may end before the end of the lifetime of the reference, which makes {{rlp|reference#Dangling_references|dangling references}} possible.

Lifetimes of member objects and base subobjects begin and end following {{rlp|initializer_list#Initialization order|class initialization order}}.

===Temporary object lifetime===
Temporary objects are created {{rev inl|since=c++17|when a prvalue is {{rlp|implicit_conversion#Temporary_materialization|materialized}} so that it can be used as a glvalue, which occurs}} in the following situations:
* {{rlp|reference_initialization|binding a reference to a prvalue}}

{{rev begin}}
{{rev|until=c++17|
* returning a prvalue from a function
* {{rlp|expressions#Conversions|conversion}} that creates a prvalue
* {{rev inl|since=c++11| {{rlp|lambda|lambda expression}},}}
* {{rlp|copy_initialization|copy-initialization}} that requires conversion of the initializer,
* {{rev inl|since=c++11|{{rlp|list_initialization|list-initialization}} that constructs an {{lc|std::initializer_list}},}}
* {{rlp|reference_initialization|reference-initialization|binding a reference}} to a different but convertible type or to a bitfield.
}}
{{rev|since=c++17|
* when {{rlp|list_initialization|initializing}} an object of type {{c|std::initializer_list&lt;T&gt;}} from a braced-init-list
* when performing {{rlp|operator_member_access#Built-in_member_access_operators|member access}} on a class prvalue
* when performing an {{rlp|array#Array-to-pointer_decay|array-to-pointer}} conversion or {{rlp|operator_member_access#Built-in_subscript_operator|subscripting}} on an array prvalue
* for unevaluated operands in {{rlp|sizeof}} and {{rlp|typeid}}
* when a prvalue appears as a {{rlp|expressions#Discarded-value_expressions|discarded-value expression}}
* if supported by the implementation, when passing or returning an object of trivially-copyable type in a {{rlp|operator_other#Built-in_function_call_operator|function call expression}} (this models passing structs in CPU registers)
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
The materialization of a temporary object is generally delayed as long as possible in order to avoid creating unnecessary temporary object: see {{rlp|copy elision}}
}}
{{rev end}}

All temporary objects are destroyed as the last step in evaluating the full-expression that (lexically) contains the point where they were created, and if multiple temporary objects were created, they are destroyed in the order opposite to the order of creation. This is true even if that evaluation ends in throwing an exception.

There are two exceptions from that:
* The lifetime of a temporary object may be extended by binding to a const lvalue reference {{rev inl|since=c++11|or to an rvalue reference}}, see {{rlp|reference_initialization#Lifetime_of_a_temporary|reference initialization}} for details.
{{rev begin}}
{{rev|since=c++11|
* The lifetime of a temporary object created when evaluating the default arguments of a default constructor used to initialize an element of an array ends before the next element of the array begins initialization.}}
{{rev end}}

===Storage reuse===
A program is not required to call the destructor of an object to end its lifetime if the object is {{rlp|destructor#Trivial_destructor|trivially-destructible}} or if the program does not rely on the side effects of the destructor. However, if a program ends the lifetime of an non-trivial object, it must ensure that a new object of the same type is constructed in-place (e.g. via placement new) before the destructor may be called implicitly, i.e. due to scope exit or exception for automatic objects, due to thread exit for thread-local objects, or due to program exit for static objects; otherwise the behavior is undefined.

{{source|1=
class T {}; // trivial
struct B {
    ~B() {} // non-trivial
};
void x() {
    long long n; // automatic, trivial
    new (&amp;n) double(3.14); // reuse with a different type okay
} // okay
void h() {
    B b; // automatic non-trivially destructible
    b.~B(); // end lifetime (not required, since no side-effects)
    new (&amp;b) T; // wrong type: okay until the destructor is called
} // destructor is called: undefined behavior
}}

It is undefined behavior to reuse storage that is or was occupied by a const complete object of static, thread-local, or automatic storage duration because such objects may be stored in read-only memory.

{{source|1=
struct B {
    B(); // non-trivial
    ~B(); // non-trivial
};
const B b; // const static
void h() {
    b.~B(); // end the lifetime of b
    new (const_cast&lt;B*&gt;(&amp;b)) const B; // undefined behavior: attempted reuse of a const
}
}}

If a new object is created at the address that was occupied by another object, then all pointers, references, and the name of the original object will automatically refer to the new object and, once the lifetime of the new object begins, can be used to manipulate the new object, but only if the following conditions are satisfied:
* the storage for the new object exactly overlays the storage location which the original object occupied
* the new object is of the same type as the original object (ignoring the top-level cv-qualifiers)
* the type of the original object is not const-qualified
* if the original object had class type, it does not contain any non-static data member whose type is const-qualified or a reference type
* the original object was a most derived object of type T and the new object is a most derived object of type T (that is, they are not base class subobjects).

{{source|1=
struct C {
  int i;
  void f();
  const C&amp; operator=( const C&amp; );
};
const C&amp; C::operator=( const C&amp; other) {
  if ( this != &amp;other ) {
    this-&gt;~C();          // lifetime of *this ends
    new (this) C(other); // new object of type C created
    f();                 // well-defined
  }
  return *this;
}
C c1;
C c2;
c1 = c2; // well-defined
c1.f();  // well-defined; c1 refers to a new object of type C
}}

{{rev begin}}
{{rev|since=c++17|
If the conditions listed above are not met, a valid pointer to the new object may still be obtained by applying the pointer optimization barrier {{ltt|cpp/utility/launder|std::launder}}

Similarly, if an object is created in the storage of a class member or array element, the created object is only a subobject (member or element) of the original object's containing object if:
* the lifetime of the containing object has begun and not ended
* the storage for the new object exactly overlays the storage of the original object
* the new object is of the same type as the original object (ignoring cv-qualification).

Otherwise (such as if the subobject contains a reference member or a const subobject), the name of the original subobject cannot be used to access the new object without {{lc|std::launder}}:
{{source|1=
struct X { const int n; };
union U { X x; float f; };
void tong() {
  U u = { { 1 } };
  u.f = 5.f;                          // OK, creates new subobject of 'u'
  X *p = new (&amp;u.x) X {2};            // OK, creates new subobject of 'u'
  assert(p-&gt;n == 2);                  // OK
  assert(*std::launder(&amp;u.x.n) == 2); // OK
  assert(u.x.n == 2);                 // undefined: 'u.x' does not name the new subobject
}
}}

As a special case, objects can be created in arrays of {{tt|unsigned char}} or {{ltt|cpp/types/byte|std::byte}} (in which case it is said that the array ''provides storage'' for the object) if
* the lifetime of the array has begun and not ended
* the storage for the new object fits entirely within the array
* there is no smaller array object that satisfies these constraints.

If that portion of the array previously provided storage for another object, the lifetime of that object ends because its storage was reused, however the lifetime of the array itself does not end (its storage is not considered to have been reused)
{{source|1=
template&lt;typename ...T&gt;
struct AlignedUnion {
  alignas(T...) unsigned char data[max(sizeof(T)...)];
};
int f() {
  AlignedUnion&lt;int, char&gt; au;
  int *p = new (au.data) int;     // OK, au.data provides storage
  char *c = new (au.data) char(); // OK, ends lifetime of *p
  char *d = new (au.data + 1) char();
  return *c + *d; // OK
}
}}
}}
{{rev end}}

===Access outside of lifetime===
Before the lifetime of an object has started but after the storage which the object will occupy has been allocated or, after the lifetime of an object has ended and before the storage which the object occupied is reused or released, the following uses of the glvalue expression that identifies that object are undefined:
# Lvalue to rvalue conversion (e.g. function call to a function that takes a value).
# Access to a non-static data member or a call to a non-static member function.
# Binding to reference to a virtual base class subobject.
# {{c|dynamic_cast}} or {{c|typeid}} expressions.

The above rules apply to pointers as well (binding a reference to virtual base is replaced by implicit conversion to a pointer to virtual base), with two additional rules:
# {{ltt|cpp/language/static_cast}} of a pointer to storage without an object is only allowed when casting to (possibly cv-qualified) {{c|void*}}.
# Pointers to storage without an object that were cast to possibly cv-qualified {{c|void*}} can only be {{ltt|cpp/language/static_cast}} to pointers to possibly cv-qualified {{c|char}}, possibly cv-qualified {{c|unsigned char}}, or possibly cv-qualified {{ltt|cpp/types/byte|std::byte}}.

During construction and destruction, other restrictions apply, see {{rlp|virtual#During construction and destruction|virtual function calls during construction and destruction}}.

===Notes===
The difference in the end of lifetime rules between non-class objects (end of storage duration) and class objects (reverse order of construction) matters in the following example:
{{source|1=
struct A {
  int* p;
  ~A() { std::cout &lt;&lt; *p; } // if n outlives a, prints 123
};
void f() {
  A a;
  int n = 123; // if n does not outlive a, this is optimized out (dead store)
  a.p = &amp;n;
}
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2012|std=C++14|before=lifetime of references was specified to match storage duration, requiring that&lt;br&gt;extern references are alive before their initializers run|after=lifetime begins at initialization}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/lifetime}}
{{dsc end}}</text>
      <sha1>b6aogc8gcol7py7r461689pq3802i6r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/list initialization</title>
    <ns>0</ns>
    <id>8868</id>
    <revision>
      <id>92060</id>
      <parentid>91895</parentid>
      <timestamp>2017-04-03T21:33:00Z</timestamp>
      <contributor>
        <username>Flacs</username>
        <id>3329</id>
      </contributor>
      <minor/>
      <comment>add missing space</comment>
      <text xml:space="preserve" bytes="13415">{{title|list initialization {{mark since c++11}}}}
{{cpp/language/initialization/navbar}}
Initializes an object from braced-init-list

===Syntax===
====direct-list-initialization====
{{sdsc begin}}
{{sdsc | num=1 | {{spar|T}} {{spar| object}} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|};}} }}
{{sdsc | num=2 | {{spar|T}} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|};}} }}
{{sdsc | num=3 | {{ttb|new}} {{spar|T}} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|} }} }}
{{sdsc | num=4| {{spar|Class}} {{ttb|{}} {{spar|T}} {{spar|member}} {{ttb|{ }}{{spar|arg1, arg2, ...}} {{ttb|}; }; }}}}
{{sdsc | num=5 | {{spar|Class}}{{ttb|::}}{{spar|Class}}{{ttb|() : }}{{spar|member}}{{ttb|{}}{{spar|arg1, arg2, ...}}{{ttb|} {...}} }}
{{sdsc end}}
====copy-list-initialization====
{{sdsc begin}}
{{sdsc | num=6 | {{spar|T}} {{spar|object}} {{ttb|{{=}} {}}{{spar|arg1, arg2, ...}}{{ttb|};}} }}
{{sdsc | num=7 | {{spar|function}}{{ttb|( { }} {{spar|arg1, arg2, ...}} {{ttb|} ) ;}} }}
{{sdsc | num=8 | {{ttb|return { }} {{spar|arg1, arg2, ...}} {{ttb|} ;}} }}
{{sdsc | num=9 | {{spar|object}}{{ttb|[ { }} {{spar|arg1, arg2, ...}} {{ttb|} ] ;}} }}
{{sdsc | num=10 | {{spar|object}} {{ttb|{{=}} }} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|} ;}} }}
{{sdsc | num=11 | {{spar|U}}{{ttb|( { }} {{spar|arg1, arg2, ...}} {{ttb|} ) }} }}
{{sdsc | num=12 | {{spar|Class}} {{ttb|{}} {{spar|T}} {{spar|member}} {{ttb|{{=}}}} {{ttb|{ }}{{spar|arg1, arg2, ...}} {{ttb|}; }; }}}}
{{sdsc end}}

List initialization is performed in the following situations:
* direct-list-initialization (both explicit and non-explicit constructors are considered)

@1@ initialization of a named variable with a ''braced-init-list'' (that is, a possibly empty brace-enclosed list of expressions or nested braced-init-lists)
@2@ initialization of an unnamed temporary with a ''braced-init-list''
@3@ initialization of an object with dynamic storage duration with a {{rlp|new|new-expression}}, where the initializer is a brace-init-list
@4@ in a non-static {{rlp|data_members#Member_initialization|data member initializer}} that does not use the equals sign
@5@ in a {{rlp|initializer list|member initializer list}} of a constructor if ''braced-init-list'' is used

* copy-list-initialization (both explicit and non-explicit constructors are considered, but only non-explicit constructors may be called)

@6@ initialization of a named variable with a ''braced-init-list'' after an equals sign
@7@ in a function call expression, with ''braced-init-list'' used as an argument and list-initialization initializes the function parameter
@8@ in a {{c|return}} statement with braced-init-list used as the return expression and list-initialization initializes the returned object
@9@ in a {{rlp|operator_member_access#Built-in_subscript_operator|subscript expression}} with a user-defined {{tt|operator[]}}, where list-initialization initializes the parameter of the overloaded operator
@10@ in an {{rlp|operator_assignment#Builtin_direct_assignment|assignment expression}}, where list-initialization initializes the parameter of the overloaded {{tt|operator{{=}} }}
@11@ {{rlp|explicit cast|functional cast expression}} or other constructor invocations, where ''braced-init-list'' is used in place of a constructor argument. Copy-list-initialization initializes the constructor's parameter (note; the type U in this example is not the type that's being list-initialized; U's constructor's parameter is)
@12@ in a non-static {{rlp|data_members#Member_initialization|data member initializer}} that uses the equals sign

===Explanation===

The effects of list initialization of an object of type {{tt|T}} are:
{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|1467}}
* If {{tt|T}} is an {{mark unreviewed dr|CWG|2137}} aggregate type and the initializer list has a single element of the same or derived type (possibly cv-qualified), the object is initialized from that element (by {{rlp|copy_initialization|copy-initialization}} for copy-list-initialization, or by {{rlp|direct_initialization|direct-initialization}} for direct-list-initialization).
* Otherwise, if {{tt|T}} is a character array and the initializer list has a single element that is an appropriately-typed string literal, the array is  {{rlp|aggregate_initialization#Character_arrays|initialized from the string literal as usual}}.
}}
{{rev end}}
{{rev begin}}
{{rev|until=c++14|
* If the braced-init-list is empty and {{tt|T}} is a class type with a default constructor, [[cpp/language/value_initialization|value-initialization]] is performed.

* Otherwise, if {{tt|T}} is an {{rlp|aggregate_initialization|aggregate type}}, {{rlp|aggregate_initialization|aggregate initialization}} is performed.
}}
{{rev|since=c++14|
* If {{tt|T}} is an {{rlp|aggregate_initialization|aggregate type}}, {{rlp|aggregate_initialization|aggregate initialization}} is performed.

* Otherwise, If the braced-init-list is empty and {{tt|T}} is a class type with a default constructor, {{rlp|value_initialization|value-initialization}} is performed.
}}
{{rev end}}

* Otherwise, if {{tt|T}} is a specialization of {{lc|std::initializer_list}}, the {{tt|T}} object is direct-initialized or copy-initialized, depending on context, from {{rev inl|until=c++17|a prvalue of the same type initialized from}} the braced-init-list.

* Otherwise, the constructors of {{tt|T}} are considered, in two phases:

:* All constructors that take {{lc|std::initializer_list}} as the only argument, or as the first argument if the remaining arguments have default values, are examined, and matched by {{rlp|overload resolution}} against a single argument of type {{lc|std::initializer_list}}

:* If the previous stage does not produce a match, all constructors of {{tt|T}} participate in {{rlp|overload_resolution#Implicit_conversion_sequence_in_list-initialization|overload resolution}} against the set of arguments that consists of the elements of the braced-init-list, with the restriction that only non-narrowing conversions are allowed. If this stage produces an explicit constructor as the best match for a copy-list-initialization, compilation fails (note, in simple copy-initialization, explicit constructors are not considered at all).

{{rev begin}}
{{rev|since=c++17|
* Otherwise, if {{tt|T}} is a {{rlp|enum|enumeration type}} that is either scoped or unscoped with fixed underlying type, and if the braced-init-list has only one initializer, and if the conversion from the initializer to the underlying type is non-narrowing, and if the initialization is direct-list-initialization, then the enumeration is initialized with the result of converting the initializer to its underlying type.
}}
{{rev end}}

* Otherwise (if {{tt|T}} is not a class type), if the braced-init-list has only one element and {{mark unreviewed dr|CWG|1288}}either {{tt|T}} isn't a reference type or is a reference type that is compatible with the type of the element, {{tt|T}} is [[cpp/language/direct_initialization|direct-initialized]] (in direct-list-initialization) or [[cpp/language/copy_initialization|copy-initialized]] (in copy-list-initialization), except that narrowing conversions are not allowed.

* {{mark unreviewed dr|CWG|1288}}Otherwise, if {{tt|T}} is a reference type that isn't compatible with the type of the element, {{rev inl|until=c++17|a temporary of the referenced type is list-initialized, and the reference is bound to that temporary}}{{rev inl|since=c++17|the reference is direct-initialized from a prvalue expression of the referenced type that list-initializes its result object}}. (this fails if the reference is a non-const lvalue reference)

* Otherwise, if the braced-init-list has no elements, {{tt|T}} is [[cpp/language/value_initialization|value-initialized]].

===Narrowing conversions===
list-initialization limits the allowed [[cpp/language/implicit_cast|implicit conversions]] by prohibiting the following:

* conversion from a floating-point type to an integer type

* conversion from a {{c|long double}} to {{c|double}} or to {{c|float}} and conversion from {{c|double}} to {{c|float}}, except where the source is a {{rlp|constant expression}} and overflow does not occur

* conversion from an integer type to a floating-point type, except where the source is a constant expression whose value can be stored exactly in the target type

* conversion from integer or unscoped enumeration type to integer type that cannot represent all values of the original, except where source is a constant expression whose value can be stored exactly in the target type

===Notes===
Every initializer clause is {{rlp|eval order|sequenced before}} any initializer clause that follows it in the braced-init-list. This is in contrast with the arguments of a {{rlp|operator_other#Built-in_function_call_operator|function call expression}}, which are {{rlp|eval order|unsequenced}}.

A braced-init-list is not an expression and therefore has no type, e.g. {{c|decltype({1,2})}} is ill-formed. Having no type implies that template type deduction cannot deduce a type that matches a braced-init-list, so given the declaration {{c|template&lt;class T&gt; void f(T);}} the expression {{lc|f({1,2,3})}} is ill-formed. However, the template parameter can otherwise be deduced, as is the case for {{c|std::vector&lt;int&gt; v(std::istream_iterator&lt;int&gt;(std::cin), {})}}, where the iterator type is deduced by the first argument but also used in the second parameter position. A special exception is made for {{rlp|template_argument_deduction#Other_contexts|type deduction using the keyword {{c|auto}} }}, which deduces any braced-init-list as {{lc|std::initializer_list}}.

Also because braced-init-list has no type, {{rlp|overload_resolution#Implicit_conversion_sequence_in_list-initialization|special rules for overload resolution}} apply when it is used as an argument to an overloaded function call.

{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|2137}}
Aggregates copy/move initialize directly from single-element braced-init-lists of the same type, but non-aggregates consider initializer_list constructors first:
{{source|1=
struct X {
    X() = default;
    X(const X&amp;) = default;
};

struct Q {
    Q() = default;
    Q(Q const&amp;) = default;
    Q(std::initializer_list&lt;Q&gt;) {}
};

int main() {
  X x;
  X x2 = X { x }; // copy-constructor (not aggregate initialization)
  Q q;
  Q q2 = Q { q }; // initializer-list constructor (not copy constructor)
}
}}
}}
{{rev end}}

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;string&gt;

struct Foo {
    std::vector&lt;int&gt; mem = {1,2,3}; // list-initialization of a non-static member
    std::vector&lt;int&gt; mem2;
    Foo() : mem2{-1, -2, -3} {} // list-initialization of a member in constructor
};

std::pair&lt;std::string, std::string&gt; f(std::pair&lt;std::string, std::string&gt; p)
{
    return {p.second, p.first}; // list-initialization in return statement
}

int main()
{
    int n0{};     // value-initialization (to zero)
    int n1{1};    // direct-list-initialization
    std::string s1{'a', 'b', 'c', 'd'}; // initializer-list constructor call
    std::string s2{s1, 2, 2};           // regular constructor call
    std::string s3{0x61, 'a'}; // initializer-list ctor is preferred to (int, char)

    int n2 = {1}; // copy-list-initialization
    double d = double{1.2}; // list-initialization of a temporary, then copy-init
                     
    std::map&lt;int, std::string&gt; m = { // nested list-initialization
           {1, &quot;a&quot;},
           {2, {'a', 'b', 'c'} },
           {3, s1}
    };

    std::cout &lt;&lt; f({&quot;hello&quot;, &quot;world&quot;}).first // list-initialization in function call
              &lt;&lt; '\n';

    const int (&amp;ar)[2] = {1,2}; // binds a lvalue reference to a temporary array
    int&amp;&amp; r1 = {1}; // binds a rvalue reference to a temporary int
//  int&amp; r2 = {2}; // error: cannot bind rvalue to a non-const lvalue ref

//  int bad{1.0}; // error: narrowing conversion
    unsigned char uc1{10}; // okay
//  unsigned char uc2{-1}; // error: narrowing conversion

    Foo f;

    std::cout &lt;&lt; n0 &lt;&lt; ' ' &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; '\n'
              &lt;&lt; s1 &lt;&lt; ' ' &lt;&lt; s2 &lt;&lt; ' ' &lt;&lt; s3 &lt;&lt; '\n';
    for(auto p: m)
        std::cout &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; p.second &lt;&lt; '\n';
    for(auto n: f.mem)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    for(auto n: f.mem2)
        std::cout &lt;&lt; n &lt;&lt; ' ';
}
 | output=
world
0 1 1
abcd cd aa
1 a
2 abc
3 abcd
1 2 3 -1 -2 -3 
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1467|std=C++14|before=same-type initialization of aggregates and char arrays was prohibited|after=same-type initialization allowed}}
{{dr list item|wg=cwg|dr=1467|std=C++14|before=std::initializer_list constructors had priority over copy constructors for single-element lists|after=single-element lists initialize directly}}
{{dr list end}}

===See also===
* [[cpp/language/default_initialization|default initialization]]
* [[cpp/language/direct_initialization|direct initialization]]
* [[cpp/language/aggregate_initialization|aggregate initialization]]
* [[cpp/language/copy_initialization|copy initialization]]

[[de:cpp/language/list initialization]]
[[es:cpp/language/list initialization]]
[[fr:cpp/language/list initialization]]
[[it:cpp/language/list initialization]]
[[ja:cpp/language/list initialization]]
[[pt:cpp/language/list initialization]]
[[ru:cpp/language/list initialization]]
[[zh:cpp/language/list initialization]]</text>
      <sha1>mzsr8pxysg6hldc1tulop73vj7wa5lr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/lookup</title>
    <ns>0</ns>
    <id>13015</id>
    <revision>
      <id>91856</id>
      <parentid>86133</parentid>
      <timestamp>2017-03-31T19:59:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="2690">{{title|Name lookup}}
{{cpp/language/basics/navbar}}
Name lookup is the procedure by which a {{rlp|name}}, when encountered in a program, is associated with the {{rlp|declarations|declaration}} that introduced it.

For example, to compile {{c|std::cout &lt;&lt; std::endl;}}, the compiler performs:
* unqualified name lookup for the name {{tt|std}}, which finds the declaration of namespace std in the header {{tt|&lt;iostream&gt;}}
* qualified name lookup for the name {{tt|cout}}, which finds a variable declaration in the namespace {{tt|std}}
* qualified name lookup for the name {{tt|endl}}, which finds a function template declaration in the namespace {{tt|std}}
* {{rlp|adl|argument-dependent lookup}} for the name {{tt|operator &lt;&lt;}}, which finds multiple function template declarations in the namespace std

For function and function template names, name lookup can associate multiple declarations with the same name, and may obtain additional declarations from {{rlp|adl|argument-dependent lookup}}. {{rlp|function template|Template argument deduction}} may also apply, and the set of declarations is passed to {{rlp|overload resolution}}, which selects the declaration that will be used. {{rlp|access|Member access}} rules, if applicable, are considered only after name lookup and overload resolution.

For all other names (variables, namespaces, classes, etc), name lookup must produce a single declaration in order for the program to compile, with one exception, known as the &quot;struct hack&quot; or &quot;type/non-type hiding&quot;: some occurrences of a name may refer to a declaration of a class/struct/union/enum that is not a typedef, while all other occurrences of the same name either all refer to the same variable, {{rev inl|since=c++14|non-static data member{{mark unreviewed dr|CWG|2063}}}}, or enumerator, or they all refer to possibly overloaded function or function template names. In this case, there is no error, but the type name is hidden from lookup (the code must use {{rlp|elaborated type specifier}} to access it)

===Types of lookup===
If the name appears immediately to the right of the scope resolution operator {{ttb|::}} or possibly after {{ttb|::}} followed by the disambiguating keyword {{tt|template}}, see
* {{rlp|qualified lookup|Qualified name lookup}}

Otherwise, see
* {{rlp|unqualified lookup|Unqualified name lookup}}
:* (which, for function names, includes {{rlp|adl|Argument-dependent lookup}})

===See also===
* {{rlp|scope|Scope}} 
* {{rlp|adl|Argument-dependent lookup}} 
* {{rlp|function_template|Template argument deduction}}
* {{rlp|overload_resolution|Overload resolution}}
{{dsc begin}}
{{dsc see c | c/language/name_space | Lookup and name spaces}}
{{dsc end}}</text>
      <sha1>t1izirufallctbby9u7g8sdiauhar2s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/main function</title>
    <ns>0</ns>
    <id>9805</id>
    <revision>
      <id>82372</id>
      <parentid>78260</parentid>
      <timestamp>2015-12-15T19:27:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link MSDN's article on argv pre-processing and POSIX page on shell</comment>
      <text xml:space="preserve" bytes="5116">{{title|Main function}}
{{cpp/language/basics/navbar}}

A program shall contain a global function named {{ttb|main}}, which is the designated start of the program.

{{sdsc begin}}
{{sdsc|num=1|1=
{{c|int}} {{ttb|main}} {{ttb|()}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc|num=2|1=
{{c|int}} {{ttb|main}} {{ttb|(}}{{c|int}} {{spar|argc}}{{ttb|,}} {{c|char}} {{c|*}}{{spar|argv}}{{c|[]}}{{ttb|)}} {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc|num=3|1=
{{c|int}} {{ttb|main}} {{ttb|(}}{{c|int}} {{spar|argc}}{{ttb|,}} {{c|char}} {{c|*}}{{spar|argv}}{{c|[]}}  {{ttb|,}} {{spar|other_parameters}} {{ttb|)}}  {{ttb|{}} {{spar|body}} {{ttb|} }}
}}
{{sdsc end}}

{{par begin}}
{{par | argc | Non-negative value representing the number of arguments passed to the program from the environment in which the program is run.}}
{{par | argv | Pointer to the first element of an array of pointers to [[cpp/string/multibyte|null-terminated multibyte strings]] that represent the arguments passed to the program from the execution environment ({{c|argv[0]}} through {{c|argv[argc-1]}}). The value of {{c|argv[argc]}} is guaranteed to be {{c|0}}.}}
{{par | body | The body of the main function}}
{{par | {{spar|other_parameters}} | Implementations may allow additional forms of the main function as long as the return type remains {{tt|int}}. A very common extension is passing a third argument of type {{tt|char*[]}} pointing at [http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html an array of pointers to the execution environment variables].}}
{{par end}}

The names {{tt|argc}} and {{tt|argv}} are arbitrary, as well as the representation of the types of the parameters: {{c|int main(int ac, char** av)}} is equally valid.

===Explanation===
The {{tt|main}} function is called at program startup after {{rlp|initialization}} of the non-local objects with static {{rlp|storage duration}}. It is the designated entry point to a program that is executed in ''hosted'' environment (that is, with an operating system). The entry points to ''freestanding'' programs (boot loaders, OS kernels, etc) are implementation-defined.

The parameters of the two-parameter form of the main function allow arbitrary multibyte character strings to be passed from the execution environment (these are typically known as ''command line arguments''), the pointers {{tt|argv[1] .. argv[argc-1]}} point at the first characters in each of these strings. {{tt|argv[0]}} is the pointer to the initial character of a null-terminated multibyte strings that represents the name used to invoke the program itself (or an empty string {{c|&quot;&quot;}} if this is not supported by the execution environment). The strings are modifiable, although these modifications do not propagate back to the execution environment: they can be used, for example, with {{lc|std::strtok}}. The size of the array pointed to by {{tt|argv}} is at least {{tt|argc+1}}, and the last element, {{tt|argv[argc]}}, is guaranteed to be a null pointer.

The {{tt|main}} function has several special properties:
@1@ It cannot be used anywhere in the program
:@a@ in particular, it cannot be called recursively
:@b@ its address cannot be taken
@2@ It cannot be predefined and cannot be overloaded: effectively, the name {{tt|main}} in the global namespace is reserved for functions (although it can be used to name classes, namespaces, enumerations, and any entity in a non-global namespace{{rev inl|since=c++17|, except that a function called &quot;main&quot; cannot be declared with C {{rlp|language linkage}} in any namespace}})
@3@ It cannot be defined as deleted or declared {{rev inl|since=c++17|with C {{rlp|language linkage}}}}, {{rlp|inline}}, {{rlp|static}}, or {{rlp|constexpr}}
@4@ The body of the main function does not need to contain the {{rlp|return|return statement}}: if control reaches the end of {{tt|main}} without encountering a return statement, the effect is that of executing {{c|return 0;}}.
@5@ Execution of the return (or the implicit return upon reaching the end of main) is equivalent to first leaving the function normally (which destroys the objects with automatic storage duration) and then calling {{c|std::exit}} with the same argument as the argument of the {{rlp|return}}. ({{c|std::exit}} then destroys static objects and terminates the program)
@6@ If the main function is defined with a {{rlp|function-try-block}}, the exceptions thrown by the destructors of static objects (which are destroyed by the implied {{lc|std::exit}}) are not caught by it.
@7@ {{mark since c++14}} The return type of the main function cannot be deduced ({{c|auto main() {...}} is not allowed)

===Notes===
The manner in which the arguments given at the OS command line are converted into the multibyte arrays referenced by {{tt|argv}} may involve implementation-defined processing:
* [https://msdn.microsoft.com/en-us/library/17w5ykft.aspx Parsing C++ Command-Line Arguments] MSDN
* [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 Shell Introduction] POSIX

===See also===
{{dsc begin}}
{{dsc see c | c/language/main function}}
{{dsc end}}</text>
      <sha1>5a67woyb1h5yzfcnqkwfqlpswypu0h7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/member functions</title>
    <ns>0</ns>
    <id>12757</id>
    <revision>
      <id>88656</id>
      <parentid>88655</parentid>
      <timestamp>2016-12-05T20:01:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="7773">{{title|Non-static member functions}}
{{cpp/language/classes/navbar}}
A non-static member function is a function that is declared in a {{rlp|class|member specification}} of a class without a {{rlp|static}} or {{rlp|friend}} specifier.

{{source|1=
class S {
    int mf1(); // non-static member function declaration
    void mf2() volatile, mf3() &amp;&amp;; // can be cv-qualified and reference-qualified
    int mf4() const { return data; } // can be defined inline
    virtual void mf5() final; // can be virtual, can use final/override
    S() : data(12) {} // constructors are member functions too
    int data;
};
int S::mf1() { return 7; } // if not defined inline, has to be defined at namespace
}}

Any {{rlp|function|function declarations}} are allowed, with additional syntax elements that are only available for non-static member functions: {{rlp|final}} and {{rlp|override}} specifiers, {{rlp|abstract class|pure-specifiers}}, cv-qualifiers, ref-qualifiers, and {{rlp|initializer_list|member initialization lists}}.

A non-static member function of class X may be called
@1@ For an object of type X using the class member access operator
@2@ For an object of a class {{rlp|derived_class|derived}} from X
@3@ Directly from within the body of a member function of X
@4@ Directly from within the body of a member function of a class derived from X

Calling a member function of class X on an object of any other type invokes undefined behavior.

Within the body of a non-static member function of X, any {{rlp|expressions|id-expression}} E (e.g. an identifier) that resolves to a non-type non-static member of X or of a base class of X, is transformed to a member access expression {{c|(*this).E}} (unless it's already a part of a member access expression). This does not occur in template definition context, so a name may have to be prefixed with {{c|this-&gt;}} explicitly to become {{rlp|dependent name|dependent}}.

{{source|1=
struct S {
    int n;
    void f();
};
void S::f() {
    n = 1; // transformed to (*this).n = 1;
}
int main() {
    S s1, s2;
    s1.f(); // changes s1.n
}
}}

Within the body of a non-static member function of X, any unqualified-id that resolves to a static member, an enumerator or a nested type of X or of a base class of X, is transformed to the corresponding qualified-id.

{{source|1=
struct S {
    static int n;
    void f();
};
void S::f() {
    n = 1; // transformed to S::n = 1;
}
int main() {
    S s1, s2;
    s1.f(); // changes S::n
}
}}

===const-, volatile-, and ref-qualified member functions===
A non-static member function can be declared with a const, volatile, or const volatile qualifier (this qualifier appears after the name of the function in {{rlp|function|function declaration}}). Differently cv-qualified functions have different types and so may overload each other.

In the body of a cv-qualified function, the {{rlp|this}} pointer is cv-qualified, e.g. in a {{c|const}} member function, only other const member functions may be called normally. (A non-const member function may still be called if {{rlp|const_cast}} is applied or through an access path that does not involve {{rlp|this}}.)

{{source|1=
#include &lt;vector&gt;
struct Array {
    std::vector&lt;int&gt; data;
    Array(int sz) : data(sz) {}
    // const member function
    int operator[](int idx) const {
                          // this has type const Array*
        return data[idx]; // transformed to (*this).data[idx];
    }
    // non-const member function
    int&amp; operator[](int idx) {
                          // this has type Array*
        return data[idx]; // transformed to (*this).data[idx]
    }
};
int main()
{
    Array a(10);
    a[1] = 1; // OK: the type of a[1] is int&amp;
    const Array ca(10);
    ca[1] = 2; // Error: the type of ca[1] is int
}
}}

{{rev begin}}
{{rev|since=c++11|
A non-static member function can be declared with no ref-qualifier, with an lvalue ref-qualifier (the token {{tt|&amp;}} after the function name) or the rvalue ref-qualifier (the token {{tt|&amp;&amp;}} after the function name). During {{rlp|overload_resolution|overload resolution}}, non-static cv-qualified member function of class X is treated as follows:
* no ref-qualifier: the implicit object parameter has type lvalue reference to cv-qualified X and is additionally allowed to bind rvalue implied object argument
* lvalue ref-qualifier: the implicit object parameter has type lvalue reference to cv-qualified X
* rvalue ref-qualifier: the implicit object parameter has type rvalue reference to cv-qualified X

{{source|1=#include &lt;iostream&gt;
struct S {
    void f() &amp; { std::cout &lt;&lt; &quot;lvalue\n&quot;; }
    void f() &amp;&amp;{ std::cout &lt;&lt; &quot;rvalue\n&quot;; }
};

int main(){
    S s;
    s.f();            // prints &quot;lvalue&quot;
    std::move(s).f(); // prints &quot;rvalue&quot;
    S().f();          // prints &quot;rvalue&quot;
}
}}
Note: unlike cv-qualification, ref-qualification does not change the properties of the {{rlp|this}} pointer: within a rvalue ref-qualified function, {{c|*this}} remains an lvalue expression.
}}
{{rev end}}

===Virtual and pure virtual functions===
A non-static member function may be declared ''virtual'' or ''pure virtual''. See {{rlp|virtual|virtual functions}} and {{rlp|abstract_class|abstract classes}} for details.

===Special member functions===
{{rlp|constructor}}s and {{rlp|destructor}}s are non-public member functions that use a special syntax for their declarations (see their pages for details).

Some member functions are ''special'': under certain circumstances they are defined by the compiler even if not defined by the user. They are:
* {{rlp|default_constructor|Default constructor}}
* {{rlp|copy_constructor|Copy constructor}}
* {{rlp|move_constructor|Move constructor}} {{mark since c++11}}
* {{rlp|as_operator|Copy assignment operator}}
* {{rlp|move_operator|Move assignment operator}} {{mark since c++11}}
* {{rlp|destructor|Destructor}}
Special member functions are the only functions that can be ''defaulted'', that is, defined using {{c|{{=}} default}} instead of the function body (see their pages for details)

===Example===
{{example
 |
 | code= 
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;utility&gt;
#include &lt;exception&gt;

struct S {
    int data;

    // simple converting constructor (declaration)
    S(int val);

    // simple explicit constructor (declaration)
    explicit S(std::string str);

    // const member function (definition)
    virtual int getData() const { return data; }
    
};

// definition of the constructor
S::S(int val) : data(val) {
    std::cout &lt;&lt; &quot;ctor1 called, data = &quot; &lt;&lt; data &lt;&lt; '\n';
}

// this constructor has a catch clause
S::S(std::string str) try : data(std::stoi(str)) {
    std::cout &lt;&lt; &quot;ctor2 called, data = &quot; &lt;&lt; data &lt;&lt; '\n';
} catch(const std::exception&amp;) {
    std::cout &lt;&lt; &quot;ctor2 failed, string was '&quot; &lt;&lt; str &lt;&lt; &quot;'\n&quot;;
    throw; // ctor's catch clause should always rethrow
}

struct D : S {
    int data2;
    // constructor with a default argument
    D(int v1, int v2 = 11) : S(v1), data2(v2) {}

    // virtual member function
    int getData() const override { return data*data2; }

    // lvalue-only assignment operator
    D&amp; operator=(D other) &amp; {
        std::swap(other.data, data);
        std::swap(other.data2, data2);
        return *this;
    }
};

int main()
{
    D d1 = 1;
    S s2(&quot;2&quot;);
    try {
         S s3(&quot;not a number&quot;);
    } catch(const std::exception&amp;) {}
    std::cout &lt;&lt; s2.getData() &lt;&lt; '\n';
    
   D d2(3, 4);
   d2 = d1; // OK: assignment to lvalue
//   D(5) = d1; // ERROR: no suitable overload of operator=
}
 | output=
ctor1 called, data = 1
ctor2 called, data = 2
ctor2 failed, string was 'not a number'
2
ctor1 called, data = 3
}}

===See also===
*{{rlp|classes|classes}}
*{{rlp|data_members|data members}}
*{{rlp|static|static data members}}</text>
      <sha1>00r7tqojpwpdd30553ea169w3io8fs0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/member template</title>
    <ns>0</ns>
    <id>12799</id>
    <revision>
      <id>91733</id>
      <parentid>88533</parentid>
      <timestamp>2017-03-31T19:56:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="6035">{{title|Member templates}}
{{cpp/language/templates/navbar}}
Template declarations ({{rlp|class_template|class}}, {{rlp|function_template|function}}{{rev inl|since=c++14|, and {{rlp|variable template|variables}}}}) can appear inside a {{rlp|class|member specification}} of any class, struct, or union that aren't {{rlp|class#Local classes|local class}}es.

{{example|code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

struct Printer { // generic functor
    std::ostream&amp; os;
    Printer(std::ostream&amp; os) : os(os) {}
    template&lt;typename T&gt;
    void operator()(const T&amp; obj) { os &lt;&lt; obj &lt;&lt; ' '; } // member template
};

int main()
{
    std::vector&lt;int&gt; v = {1,2,3};
    std::for_each(v.begin(), v.end(), Printer(std::cout));
    std::string s = &quot;abc&quot;;
    std::for_each(s.begin(), s.end(), Printer(std::cout));
}
|output=1 2 3 a b c 
}}

Partial specializations of member template may appear both at class scope and at enclosing namespace scope, but explicit specializations may only appear at enclosing namespace scope.
{{source|1=
struct A {
    template&lt;class T&gt; struct B;         // primary member template
    template&lt;class T&gt; struct B&lt;T*&gt; { }; // OK: partial specialization
//  template&lt;&gt; struct B&lt;int*&gt; { };      // Error: full specialization
};
template&lt;&gt; struct A::B&lt;int*&gt; { };       // OK
template&lt;class T&gt; struct A::B&lt;T&amp;&gt; { };  // OK
}}

If the enclosing class declaration is, in turn, a class template, when a member template is defined outside of the class body, it takes two sets of template parameters: one for the enclosing class, and another one for itself:
{{source|1=
template&lt;typename T1&gt;
struct string {
    // member template function
    template&lt;typename T2&gt;
    int compare(const T2&amp;);
    // constructors can be templates too
    template&lt;typename T2&gt;
    string(const std::basic_string&lt;T2&gt;&amp; s) { /*...*/ }
};
// out of class definition of string&lt;T1&gt;::compare&lt;T2&gt; 
template&lt;typename T1&gt; // for the enclosing class template
template&lt;typename T2&gt; // for the member template
int string&lt;T1&gt;::compare(const T2&amp; s) { /* ... */ }
}}

===Member function templates===

Destructors and copy constructors cannot be templates. If a template constructor is declared which could be instantiated with the type signature of a {{rlp|copy_constructor|copy constructor}}, the implicitly-declared copy constructor is used instead.

A member function template cannot be virtual, and a member function template in a derived class cannot override a virtual member function from the base class.
{{source|1=class Base {
    virtual void f(int);
};
struct Derived : Base {
    // this member template does not override B::f
    template &lt;class T&gt; void f(T);

    // non-template member override can call the template:
    void f(int i) override {
         f&lt;&gt;(i);
    }
};
}}

A non-template member function and a template member function with the same name may be declared. In case of conflict (when some template specialization matches the non-template function signature exactly), use of that name and type refers to the non-template member unless an explicit template argument list is supplied.

{{source|1=template&lt;typename T&gt;
struct A {
    void f(int); // non-template member
    
    template&lt;typename T2&gt;
    void f(T2); // member template
};

//template member definition
template&lt;typename T&gt;
template&lt;typename T2&gt;
void A&lt;T&gt;::f(T2)
{
    // some code
}

int main()
{
    A&lt;char&gt; ac;
    ac.f('c'); // calls template function A&lt;char&gt;::f&lt;char&gt;(int)
    ac.f(1);   // calls non-template function A&lt;char&gt;::f(int)
    ac.f&lt;&gt;(1); // calls template function A&lt;char&gt;::f&lt;int&gt;(int)
}
}}


An out-of-class definition of a member function template must be ''equivalent'' to the declaration inside the class (see {{rlp|function_template#Function_template_overloading|function template overloading}} for the definition of equivalency), otherwise it is considered to be an overload.

{{source|1=
struct X {
    template&lt;class T&gt; T good(T n);
    template&lt;class T&gt; T bad(T n);
};

template&lt;class T&gt; struct identity { using type = T; };

// OK: equivalent declaration
template&lt;class V&gt;
V X::good(V n) { return n; }

// Error: not equivalent to any of the declarations inside X
template&lt;class T&gt;
T X::bad(typename identity&lt;T&gt;::type n) { return n; }
}}

===Conversion function templates===
A user-defined {{rlp|cast operator|conversion function}} can be a template.

{{source|1=
struct A {
    template&lt;typename T&gt;
    operator T*(); // conversion to pointer to any type
};

// out-of-class definition
template&lt;typename T&gt;
A::operator T*() {return nullptr;}

// explicit specialization for char*
template&lt;&gt;
A::operator char*() {return nullptr;}

// explicit instantiation
template A::operator void*();

int main() {
    A a;
    int* ip = a.operator int*(); // explicit call to A::operator int*()
}
}}

During {{rlp|overload_resolution|overload resolution}}, specializations of conversion function templates are not found by {{rlp|lookup|name lookup}}. Instead, all visible conversion function templates are considered, and every specialization produced by {{rlp|template argument deduction}} (which has special rules for conversion function templates) is used as if found by name lookup.

Using-declarations in derived classes cannot refer to specializations of template conversion functions from base classes.

{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|1878}}
A user-defined conversion function template cannot have a deduced return type
{{source|1=
struct S {
  operator auto() const { return 10; } // OK
  template&lt;class T&gt; operator auto() const { return 42; } // error
}; 
}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++14|
===Member variable templates===
A variable template declaration may appear at class scope, in which case it declares a static data member template. See {{rlp|variable template}}s for details.
}}
{{rev end}}


===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1878|std=C++14|before=operator auto was technically allowed|after=operator auto forbidden}}
{{dr list end}}</text>
      <sha1>p1v9dgljtzye8dy2726p5rrjv45wntg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/memory model</title>
    <ns>0</ns>
    <id>13490</id>
    <revision>
      <id>92034</id>
      <parentid>90591</parentid>
      <timestamp>2017-04-03T14:50:36Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="7355">{{title|Memory model}}
{{cpp/language/basics/navbar}}
Defines the semantics of computer memory storage for the purpose of the C++ abstract machine.

The memory available to a C++ program is one or more contiguous sequences of ''bytes''. Each byte in memory has a unique ''address''.

===Byte===
A ''byte'' is the smallest addressable unit of memory. It is defined as a contiguous sequence of bits, large enough to hold {{rev inl|since=c++14|the value of any {{tt|UTF-8}} code unit (256 distinct values) and of }}any member of the ''basic execution character set'' ({{rlp|translation_phases|the 96 characters}} that are required to be single-byte). Similar to C, C++ supports bytes of sizes 8 bits and greater.

The {{rlp|types}} {{c|char}}, {{c|unsigned char}}, and {{c|signed char}} use one byte for both storage and {{rlp|object|value representation}}. The number of bits in a byte is accessible as {{lc|CHAR_BIT}} or {{c|std::numeric_limits&lt;unsigned char&gt;::digits}}.

===Memory location===
A ''memory location'' is 
* an object of {{rlp|type|scalar type}} (arithmetic type, pointer type, enumeration type, or std::nullptr_t)
* or the largest contiguous sequence of {{rlp|bit field}}s of non-zero length

Note: Various features of the language, such as {{rlp|reference|references}} and {{rlp|virtual|virtual functions}}, might involve additional memory locations that are not accessible to programs but are managed by the implementation.

{{source|
struct S {
    char a;     // memory location #1
    int b : 5;  // memory location #2
    int c : 11, // memory location #2 (continued)
          : 0,
        d : 8;  // memory location #3
    struct {
        int ee : 8; // memory location #4
    } e;
} obj; // The object 'obj' consists of 4 separate memory locations
}}

===Threads and data races===
A thread of execution is a flow of control within a program that begins with the invocation of a top-level function by {{lc|std::thread::thread}}, {{lc|std::async}}, or other means.

Any thread can potentially access any object in the program (objects with automatic and thread-local {{rlp|storage duration}} may still be accessed by another thread through a pointer or by reference).

Different threads of execution are always allowed to access (read and modify) different ''memory locations'' concurrently, with no interference and no synchronization requirements.

When an {{rlp|eval_order|evaluation}} of an expression writes to a memory location and another evaluation reads or modifies the same memory location, the expressions are said to ''conflict''. A program that has two conflicting evaluations has a ''data race'' unless
* both evaluations execute on the same thread or in the same [[cpp/utility/program/signal#Signal_handler|signal handler]], or
* both conflicting evaluations are atomic operations (see {{lc|std::atomic}}), or
* one of the conflicting evaluations ''happens-before'' another (see {{lc|std::memory_order}})

If a data race occurs, the behavior of the program is undefined.

(in particular, release of a {{lc|std::mutex}} is ''synchronized-with'', and therefore, ''happens-before'' acquisition of the same mutex by another thread, which makes it possible to use mutex locks to guard against data races)

{{source|1=
int cnt;
auto f = [&amp;]{cnt++;};
std::thread t1{f}, t2{f}, t3{f}; // undefined behavior
}}
{{source|1=
std::atomic&lt;int&gt; cnt{0};
auto f = [&amp;]{cnt++;};
std::thread t1{f}, t2{f}, t3{f}; // OK
}}

===Memory order===
When a thread reads a value from a memory location, it may see the initial value, the value written in the same thread, or the value written in another thread. See {{lc|std::memory_order}} for details on the order in which writes made from threads become visible to other threads.

===Forward progress===

====Obstruction freedom====
When only one thread that is not blocked in a standard library function executes an [[cpp/atomic|atomic function]] that is lock-free, that execution is guaranteed to complete (all standard library lock-free operations are [[enwiki:Non-blocking_algorithm#Obstruction-freedom|obstruction-free]])

====Lock freedom====
When one or more lock-free atomic functions run concurrently, at least one of them is guaranteed to complete (all standard library lock-free operations are [[enwiki:Non-blocking_algorithm#Lock-freedom|lock-free]] -- it is the job of the implementation to ensure they cannot be live-locked indefinitely by other threads, such as by continuously stealing the cache line)

====Progress guarantee====
In a valid C++ program, every thread eventually does one of the following:
* terminate
* makes a call to an I/O library function
* performs an access through a {{rlp|cv|volatile}} glvalue
* performs an atomic operation or a synchronization operation

No thread of execution can execute forever without performing any of these observable behaviors.

Note that it means that a program with endless recursion or endless loop (whether implemented as a {{rlp|for|for-statement}} or by looping {{rlp|goto}} or otherwise) has {{rlp|ub|undefined behavior}}. This allows the compilers to remove all loops that have no observable behavior, without having to prove that they would eventually terminate.

A thread is said to ''make progress'' if it performs one of the execution steps above (I/O, volatile, atomic, or synchronization), blocks in a standard library function, or calls an atomic lock-free function that does not complete because of a non-blocked concurrent thread.

{{rev begin}}
{{rev|since=c++17|
====Concurrent forward progress====
If a thread offers ''concurrent forward progress guarantee'', it will  ''make progress'' (as defined above) in finite amount of time, for as long as it has not terminated, regardless of whether other threads (if any) are making progress.

The standard encourages, but doesn't require that the main thread and the threads started by {{lc|std::thread}} offer concurrent forward progress guarantee.

====Parallel forward progress====
If a thread offers ''parallel forward progress guarantee'', the implementation is not required
to ensure that the thread will eventually make progress if it has not yet executed any execution step (I/O, volatile, atomic, or synchronization), but once this thread has executed a step, it provides ''concurrent forward progress'' guarantees (this rule describes a thread in a thread pool that executes tasks in arbitrary order)

====Weakly parallel forward progress====
If a thread offers ''weakly parallel forward progress guarantee'', it does not guarantee to eventually make progress, regardless of whether other threads make progress or not.

Such threads can still be guaranteed to make progress by blocking with forward progress guarantee delegation: if a thread P blocks in this manner on the completion of a set of threads S, then at least one thread in S will offer a forward progress guarantee that is same or stronger than P. Once that thread completes, another thread in S will be similarly strengthened. Once the set is empty, P will unblock.

The [[cpp/algorithm|parallel algorithms]] from the C++ standard library block with forward progress delegation on the completion of an unspecified set of library-managed threads.
}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/memory_model | Memory model}}
{{dsc end}}

[[zh:cpp/language/memory_model]]</text>
      <sha1>t0tknvvxa9eah77rovba5c16vt3isjl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/move assignment</title>
    <ns>0</ns>
    <id>9134</id>
    <revision>
      <id>89351</id>
      <parentid>89196</parentid>
      <timestamp>2017-01-19T14:54:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>downplaying copy-and-swap per new operators#Assignment_operator</comment>
      <text xml:space="preserve" bytes="10789">{{title|Move assignment operator}}
{{cpp/language/classes/navbar}}

A move assignment operator of class {{tt|T}} is a non-template non-static member function with the name {{c|operator{{=}}}} that takes exactly one parameter of type {{c|T&amp;&amp;}}, {{c|const T&amp;&amp;}}, {{c|volatile T&amp;&amp;}}, or {{c|const volatile T&amp;&amp;}}.

===Syntax===
{{sdsc begin}}
{{sdsc |num=1|notes={{mark since c++11}}| {{spar|class_name}} {{ttb|&amp;}} {{spar|class_name}} {{ttb|:: operator{{=}}}} ( {{spar|class_name}} {{tt|&amp;&amp;}} ) }} 
{{sdsc |num=2|notes={{mark since c++11}}|note={{mark since c++11}}| {{spar|class_name}} {{ttb|&amp;}} {{spar|class_name}} {{ttb|:: operator{{=}}}} ( {{spar|class_name}} {{tt|&amp;&amp;}} ) {{=}} {{c|default;}} }}
{{sdsc |num=3|notes={{mark since c++11}}|note={{mark since c++11}}| {{spar|class_name}} {{ttb|&amp;}} {{spar|class_name}} {{ttb|:: operator{{=}}}} ( {{spar|class_name}} {{tt|&amp;&amp;}} ) {{=}} {{c|delete;}} }}
{{sdsc end}}

===Explanation===
# Typical declaration of a move assignment operator.
# Forcing a move assignment operator to be generated by the compiler.
# Avoiding implicit move assignment.

The move assignment operator is called whenever it is selected by [[cpp/language/overload_resolution|overload resolution]], e.g. when an object appears on the left-hand side of an assignment expression, where the right-hand side is an rvalue of the same or implicitly convertible type.

Move assignment operators typically &quot;steal&quot; the resources held by the argument (e.g. pointers to dynamically-allocated objects, file descriptors, TCP sockets, I/O streams, running threads, etc.), rather than make copies of them, and leave the argument in some valid but otherwise indeterminate state. For example, move-assigning from a {{lc|std::string}} or from a {{lc|std::vector}} may result in the argument being left empty. This is not, however, a guarantee.  A move assignment is less, not more restrictively defined than ordinary assignment; where ordinary assignment must leave two copies of data at completion, move assignment is required to leave only one.

===Implicitly-declared move assignment operator===
If no user-defined move assignment operators are provided for a class type ({{c|struct}}, {{c|class}}, or {{c|union}}), and all of the following is true:
* there are no user-declared copy constructors;
* there are no user-declared move constructors;
* there are no user-declared copy assignment operators;
* there are no user-declared destructors;
{{rev begin}}
{{rev | until=c++14 |
* the implicitly-declared move assignment operator would not be defined as deleted,
}}
{{rev end}}
then the compiler will declare a move assignment operator as an {{tt|inline public}} member of its class with the signature {{tt|T&amp; T::operator{{=}}(T&amp;&amp;)}}. 

A class can have multiple move assignment operators, e.g. both {{c|1=T&amp; T::operator=(const T&amp;&amp;)}} and {{c|1=T&amp; T::operator=(T&amp;&amp;)}}. If some user-defined move assignment operators are present, the user may still force the generation of the implicitly declared move assignment operator with the keyword {{tt|default}}.

The implicitly-declared (or defaulted on its first declaration) move assignment operator has an exception specification as described in {{rev inl|until=c++17|{{rlp|except_spec|dynamic exception specification}}}}{{rev inl|since=c++17|{{rlp|noexcept_spec|exception specification}}}}

Because some assignment operator (move or copy) is always declared for any class, the base class assignment operator is always hidden. If a using-declaration is used to bring in the assignment operator from the base class, and its argument type could be the same as the argument type of the implicit assignment operator of the derived class, the using-declaration is also hidden by the implicit declaration.

===Deleted implicitly-declared move assignment operator===
The implicitly-declared or defaulted move assignment operator for class {{tt|T}} is defined as ''deleted'' if any of the following is true:
* {{tt|T}} has a non-static data member that is {{c|const}};
* {{tt|T}} has a non-static data member of a reference type;
* {{tt|T}} has a non-static data member that cannot be move-assigned (has deleted, inaccessible, or ambiguous move assignment operator);
* {{tt|T}} has direct or virtual base class that cannot be move-assigned (has deleted, inaccessible, or ambiguous move assignment operator);
{{rev begin}}
{{rev | until=c++14 |
* {{tt|T}} has a non-static data member or a direct or virtual base without a move assignment operator that is not trivially copyable;
* {{tt|T}} has a direct or indirect virtual base class.
}}
{{rev end}}
{{rev begin}}
{{rev | since=c++14 |
A deleted implicitly-declared move assignment operator is ignored by {{rlp|overload resolution}}.
}}
{{rev end}}

===Trivial move assignment operator===
The move assignment operator for class {{tt|T}} is trivial if all of the following is true:
* It is not user-provided (meaning, it is implicitly-defined or defaulted);
* {{tt|T}} has no virtual member functions;
* {{tt|T}} has no virtual base classes;
* the move assignment operator selected for every direct base of {{tt|T}} is trivial;
* the move assignment operator selected for every non-static class type (or array of class type) member of {{tt|T}} is trivial;
{{rev begin}}
{{rev | since=c++14 |
* {{tt|T}} has no non-static data members of {{rlp|cv|volatile}}-qualified type.
}}
{{rev end}}
A trivial move assignment operator performs the same action as the trivial copy assignment operator, that is, makes a copy of the object representation as if by {{lc|std::memmove}}. All data types compatible with the C language (POD types) are trivially move-assignable.

===Implicitly-defined move assignment operator===
If the implicitly-declared move assignment operator is neither deleted nor trivial, it is defined (that is, a function body is generated and compiled) by the compiler if {{rlp|definition#ODR-use|odr-used}}.

For {{c|union}} types, the implicitly-defined move assignment operator copies the object representation (as by {{lc|std::memmove}}).

For non-union class types ({{c|class}} and {{c|struct}}), the move assignment operator performs full member-wise move assignment of the object's direct bases and immediate non-static members, in their declaration order, using built-in assignment for the scalars, memberwise move-assignment for arrays, and move assignment operator for class types (called non-virtually).

{{rev begin}}
{{rev|since=c++14|
As with copy assignment, it is unspecified whether virtual base class subobjects that are accessible through more than one path in the inheritance lattice, are assigned more than once by the implicitly-defined move assignment operator:
{{source|1=
struct V
{
    V&amp; operator=(V&amp;&amp; other) {
        // this may be called once or twice
        // if called twice, 'other' is the just-moved-from V subobject
        return *this;
    }
};
struct A : virtual V { }; // operator= calls V::operator=
struct B : virtual V { }; // operator= calls V::operator=
struct C : B, A { };      // operator= calls B::operator=, then A::operator=
                          // but they may only called V::operator= once

int main()
{
  C c1, c2;
  c2 = std::move(c1);
}
}}
}}
{{rev end}}

===Notes===
If both copy and move assignment operators are provided, overload resolution selects the move assignment if the argument is an [[cpp/language/value_category|''rvalue'']] (either a [[cpp/language/value_category|''prvalue'']] such as a nameless temporary or an [[cpp/language/value_category|''xvalue'']] such as the result of {{lc|std::move}}), and selects the copy assignment if the argument is an [[cpp/language/value_category|''lvalue'']] (named object or a function/operator returning lvalue reference). If only the copy assignment is provided, all argument categories select it (as long as it takes its argument by value or as reference to const, since rvalues can bind to const references), which makes copy assignment the fallback for move assignment, when move is unavailable.

It is unspecified whether virtual base class subobjects that are accessible through more than one path in the inheritance lattice, are assigned more than once by the implicitly-defined move assignment operator (same applies to {{rlp|copy assignment}}).

See {{rlp|operators#Assignment_operator|assignment operator overloading}} for additional detail on the expected behavior of a user-defined move-assignment operator.

===Example===
{{example
| code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;

struct A
{
    std::string s;
    A() : s(&quot;test&quot;) { }
    A(const A&amp; o) : s(o.s) { std::cout &lt;&lt; &quot;move failed!\n&quot;; }
    A(A&amp;&amp; o) : s(std::move(o.s)) { }
    A&amp; operator=(const A&amp; other)
    {
         s = other.s;
         std::cout &lt;&lt; &quot;copy assigned\n&quot;;
         return *this;
    }
    A&amp; operator=(A&amp;&amp; other)
    {
         s = std::move(other.s);
         std::cout &lt;&lt; &quot;move assigned\n&quot;;
         return *this;
    }
};

A f(A a) { return a; }

struct B : A
{
     std::string s2; 
     int n;
     // implicit move assignment operator B&amp; B::operator=(B&amp;&amp;)
     // calls A's move assignment operator
     // calls s2's move assignment operator
     // and makes a bitwise copy of n
};

struct C : B
{
    ~C() { } // destructor prevents implicit move assignment
};

struct D : B
{
    D() { }
    ~D() { } // destructor would prevent implicit move assignment
    D&amp; operator=(D&amp;&amp;) = default; // force a move assignment anyway 
};

int main()
{
    A a1, a2;
    std::cout &lt;&lt; &quot;Trying to move-assign A from rvalue temporary\n&quot;;
    a1 = f(A()); // move-assignment from rvalue temporary
    std::cout &lt;&lt; &quot;Trying to move-assign A from xvalue\n&quot;;
    a2 = std::move(a1); // move-assignment from xvalue

    std::cout &lt;&lt; &quot;Trying to move-assign B\n&quot;;
    B b1, b2;
    std::cout &lt;&lt; &quot;Before move, b1.s = \&quot;&quot; &lt;&lt; b1.s &lt;&lt; &quot;\&quot;\n&quot;;
    b2 = std::move(b1); // calls implicit move assignment
    std::cout &lt;&lt; &quot;After move, b1.s = \&quot;&quot; &lt;&lt; b1.s &lt;&lt; &quot;\&quot;\n&quot;;

    std::cout &lt;&lt; &quot;Trying to move-assign C\n&quot;;
    C c1, c2;
    c2 = std::move(c1); // calls the copy assignment operator

    std::cout &lt;&lt; &quot;Trying to move-assign D\n&quot;;
    D d1, d2;
    d2 = std::move(d1);
}
| output=
Trying to move-assign A from rvalue temporary
move assigned
Trying to move-assign A from xvalue
move assigned
Trying to move-assign B
Before move, b1.s = &quot;test&quot;
move assigned
After move, b1.s = &quot;&quot; &lt;!-- note, gcc 4.7.1 still prints &quot;test&quot;, clang 3.1 works --&gt;
Trying to move-assign C
copy assigned
Trying to move-assign D
move assigned
}}


[[de:cpp/language/move operator]]
[[es:cpp/language/move operator]]
[[fr:cpp/language/move operator]]
[[it:cpp/language/move operator]]
[[ja:cpp/language/move operator]]
[[pt:cpp/language/move operator]]
[[ru:cpp/language/move operator]]
[[zh:cpp/language/move operator]]</text>
      <sha1>c7yfdpo99n46le3lby99lddhz02gj3v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/move constructor</title>
    <ns>0</ns>
    <id>8540</id>
    <revision>
      <id>90053</id>
      <parentid>90050</parentid>
      <timestamp>2017-02-03T23:29:27Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Explanation */</comment>
      <text xml:space="preserve" bytes="9317">{{title|Move constructors}}
{{cpp/language/classes/navbar}}

A move constructor of class {{tt|T}} is a non-template constructor whose first parameter is {{c|T&amp;&amp;}}, {{c|const T&amp;&amp;}}, {{c|volatile T&amp;&amp;}}, or {{c|const volatile T&amp;&amp;}}, and either there are no other parameters, or the rest of the parameters all have default values.

===Syntax===
{{sdsc begin}}
{{sdsc |num=1|notes={{mark since c++11}}| {{spar|class_name}} ( {{spar|class_name}} {{tt|&amp;&amp;}} ) }} 
{{sdsc |num=2|notes={{mark since c++11}}|note={{mark since c++11}}| {{spar|class_name}} ( {{spar|class_name}} {{tt|&amp;&amp;}} ) {{=}} {{c|default;}} }}
{{sdsc |num=3|notes={{mark since c++11}}|note={{mark since c++11}}| {{spar|class_name}} ( {{spar|class_name}} {{tt|&amp;&amp;}} ) {{=}} {{c|delete;}} }}
{{sdsc end}}

===Explanation===
# Typical declaration of a move constructor.
# Forcing a move constructor to be generated by the compiler.
# Avoiding implicit move constructor.

The move constructor is called whenever selected by {{rlp|overload resolution}}, which typically occurs when an object is {{rlp|initialization|initialized}} (by {{rlp|direct initialization|direct-initialization}} or {{rlp|copy initialization|copy-initialization}}) from {{rev inl|until=c++17|{{rlp|value_category#rvalue|rvalue}} (xvalue or prvalue)}}{{rev inl|since=c++17|xvalue}} of the same type, including 
* initialization: {{c|1=T a = std::move(b);}} or {{c|1=T a(std::move(b));}}, where b is of type {{tt|T}};
* function argument passing: {{c|f(std::move(a));}}, where {{tt|a}} is of type {{tt|T}} and {{tt|f}} is {{c|void f(T t)}};
* function return: {{c|return a;}} inside a function such as {{c|T f()}}, where {{tt|a}} is of type {{tt|T}} which has a move constructor.

Move constructors typically &quot;steal&quot; the resources held by the argument (e.g. pointers to dynamically-allocated objects, file descriptors, TCP sockets, I/O streams, running threads, etc), rather than make copies of them, and leave the argument in some valid but otherwise indeterminate state. For example, moving from a {{lc|std::string}} or from a {{lc|std::vector}} may result in the argument being left empty. However, this behavior should not be relied upon. For some types, such as {{lc|std::unique_ptr}}, the moved-from state is fully specified.

===Implicitly-declared move constructor===
If no user-defined move constructors are provided for a class type ({{c|struct}}, {{c|class}}, or {{c|union}}), and all of the following is true:
* there are no user-declared copy constructors;
* there are no user-declared copy assignment operators;
* there are no user-declared move assignment operators;
* there are no user-declared destructors;
{{rev begin}}
{{rev | until=c++14 |
* the implicitly-declared move constructor is not defined as ''deleted'' due to conditions detailed in the next section,
}}
{{rev end}}
then the compiler will declare a move constructor as a non-{{rlp|explicit}} {{tt|inline public}} member of its class with the signature {{tt|T::T(T&amp;&amp;)}}. 

A class can have multiple move constructors, e.g. both {{c|T::T(const T&amp;&amp;)}} and {{c|T::T(T&amp;&amp;)}}. If some user-defined move constructors are present, the user may still force the generation of the implicitly declared move constructor with the keyword {{tt|default}}.

The implicitly-declared (or defaulted on its first declaration) move constructor has an exception specification as described in {{rev inl|until=c++17|{{rlp|except_spec|dynamic exception specification}}}}{{rev inl|since=c++17|{{rlp|noexcept_spec|exception specification}}}}

===Deleted implicitly-declared move constructor===
The implicitly-declared or defaulted move constructor for class {{tt|T}} is defined as ''deleted'' in any of the following is true:
* {{tt|T}} has non-static data members that cannot be moved (have deleted, inaccessible, or ambiguous move constructors);
* {{tt|T}} has direct or virtual base class that cannot be moved (has deleted, inaccessible, or ambiguous move constructors);
* {{tt|T}} has direct or virtual base class with a deleted or inaccessible destructor;
* {{tt|T}} is a union and has a variant member with non-trivial copy constructor;
{{rev begin}}
{{rev | until=c++14 |
* {{tt|T}} has a non-static data member or a direct or virtual base without a move constructor that is not trivially copyable.
}}
{{rev end}}
{{rev begin}}
{{rev | since=c++14 |
The deleted implicitly-declared move constructor is ignored by {{rlp|overload resolution}} (otherwise it would prevent copy-initialization from rvalue).
}}
{{rev end}}

===Trivial move constructor===
The move constructor for class {{tt|T}} is trivial if all of the following is true:
* it is not user-provided (meaning, it is implicitly-defined or defaulted);
* {{tt|T}} has no virtual member functions;
* {{tt|T}} has no virtual base classes;
* the move constructor selected for every direct base of {{tt|T}} is trivial;
* the move constructor selected for every non-static class type (or array of class type) member of {{tt|T}} is trivial;
{{rev begin}}
{{rev | since=c++14 |
* {{tt|T}} has no non-static data members of {{rlp|cv|volatile}}-qualified type.
}}
{{rev end}}
A trivial move constructor is a constructor that performs the same action as the trivial copy constructor, that is, makes a copy of the object representation as if by {{lc|std::memmove}}. All data types compatible with the C language (POD types) are trivially movable.

===Implicitly-defined move constructor===
If the implicitly-declared move constructor is neither deleted nor trivial, it is defined (that is, a function body is generated and compiled) by the compiler if {{rlp|definition#ODR-use|odr-used}}. For {{c|union}} types, the implicitly-defined move constructor copies the object representation (as by {{lc|std::memmove}}). For non-union class types ({{c|class}} and {{c|struct}}), the move constructor performs full member-wise move of the object's bases and non-static members, in their initialization order, using direct initialization with an [[cpp/language/value_category#xvalue|xvalue]] argument.

===Notes===
To make strong exception guarantee possible, user-defined move constructors should not throw exceptions. For example, {{lc|std::vector}} relies on {{lc|std::move_if_noexcept}} to choose between move and copy when the elements need to be relocated.

If both copy and move constructors are provided, overload resolution selects the move constructor if the argument is an [[cpp/language/value_category|''rvalue'']] (either a [[cpp/language/value_category|''prvalue'']] such as a nameless temporary or an [[cpp/language/value_category|''xvalue'']] such as the result of {{lc|std::move}}), and selects the copy constructor if the argument is an [[cpp/language/value_category|''lvalue'']] (named object or a function/operator returning lvalue reference). If only the copy constructor is provided, all argument categories select it (as long as it takes a reference to const, since rvalues can bind to const references), which makes copying the fallback for moving, when moving is unavailable.

In many situations, move constructors are optimized out even if they would produce observable side-effects, see [[cpp/language/copy_elision|copy elision]].

A constructor is called a 'move constructor' when it takes an rvalue reference as a parameter. It is not obligated to move anything, the class is not required to have a resource to be moved and a 'move constructor' may not be able to move a resource as in the allowable (but maybe not sensible) case where the parameter is a const rvalue reference (const T&amp;&amp;).

===Example===
{{example
| code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;utility&gt;

struct A
{
    std::string s;
    A() : s(&quot;test&quot;) { }
    A(const A&amp; o) : s(o.s) { std::cout &lt;&lt; &quot;move failed!\n&quot;; }
    A(A&amp;&amp; o) noexcept : s(std::move(o.s)) { }
};

A f(A a)
{
    return a;
}

struct B : A
{
    std::string s2; 
    int n;
    // implicit move constructor B::(B&amp;&amp;)
    // calls A's move constructor
    // calls s2's move constructor
    // and makes a bitwise copy of n
};

struct C : B
{
    ~C() { } // destructor prevents implicit move ctor C::(C&amp;&amp;)
};

struct D : B
{
    D() { }
    ~D() { }          // destructor would prevent implicit move ctor D::(D&amp;&amp;)
    D(D&amp;&amp;) = default; // force a move ctor anyway
};

int main()
{
    std::cout &lt;&lt; &quot;Trying to move A\n&quot;;
    A a1 = f(A()); // move-construct from rvalue temporary
    A a2 = std::move(a1); // move-construct from xvalue

    std::cout &lt;&lt; &quot;Trying to move B\n&quot;;
    B b1;
    std::cout &lt;&lt; &quot;Before move, b1.s = &quot; &lt;&lt; std::quoted(b1.s) &lt;&lt; &quot;\n&quot;;
    B b2 = std::move(b1); // calls implicit move ctor
    std::cout &lt;&lt; &quot;After move, b1.s = &quot; &lt;&lt; std::quoted(b1.s) &lt;&lt; &quot;\n&quot;;

    std::cout &lt;&lt; &quot;Trying to move C\n&quot;;
    C c1;
    C c2 = std::move(c1); // calls the copy constructor

    std::cout &lt;&lt; &quot;Trying to move D\n&quot;;
    D d1;
    D d2 = std::move(d1);
}
| output=
Trying to move A
Trying to move B
Before move, b1.s = &quot;test&quot;
After move, b1.s = &quot;&quot;
Trying to move C
move failed!
Trying to move D
}}


[[de:cpp/language/move constructor]]
[[es:cpp/language/move constructor]]
[[fr:cpp/language/move constructor]]
[[it:cpp/language/move constructor]]
[[ja:cpp/language/move constructor]]
[[pt:cpp/language/move constructor]]
[[ru:cpp/language/move constructor]]
[[zh:cpp/language/move constructor]]</text>
      <sha1>9wrrhunoebi15nfhpdjhom9rbxks2m3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/move operator</title>
    <ns>0</ns>
    <id>14537</id>
    <redirect title="cpp/language/move assignment" />
    <revision>
      <id>82062</id>
      <timestamp>2015-11-30T15:23:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/language/move operator]] to [[cpp/language/move assignment]]: &quot;move operator&quot; and &quot;as operator&quot; should match their content (&quot;move assignment&quot; and &quot;copy assignment&quot;) more closely</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/language/move assignment]]</text>
      <sha1>jrlrmmjob4r2jpbz847nwrplquqqzoz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/name</title>
    <ns>0</ns>
    <id>13179</id>
    <redirect title="cpp/language/identifiers" />
    <revision>
      <id>67970</id>
      <parentid>67956</parentid>
      <timestamp>2014-03-10T14:26:01Z</timestamp>
      <contributor>
        <ip>60.55.10.139</ip>
      </contributor>
      <comment>Redirected page to [[cpp/language/identifiers#Names]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/language/identifiers#Names]]</text>
      <sha1>jr6rbdgtw2cmwdp893rwexjbs3zuzww</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/namespace</title>
    <ns>0</ns>
    <id>5741</id>
    <revision>
      <id>91892</id>
      <parentid>89322</parentid>
      <timestamp>2017-03-31T20:00:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="22873">{{title|Namespaces}}
{{cpp/language/declarations/navbar}}

Namespaces provide a method for preventing name conflicts in large projects.

Symbols declared inside a namespace block are placed in a named scope that prevents them from being mistaken for identically-named symbols in other scopes.

Multiple namespace blocks with the same name are allowed. All declarations within those blocks are declared in the named scope.

===Syntax===
{{sdsc begin}}
{{sdsc |num=1|
{{ttb|namespace}} {{spar|ns_name}} { {{spar|declarations}} }
}}
{{sdsc |num=2|notes={{mark since c++11}}|
  {{ttb|inline}} {{ttb|namespace}} {{spar|ns_name}} { {{spar|declarations}} }
}}
{{sdsc |num=3|
{{ttb|namespace}} { {{spar|declarations}} }
}}
{{sdsc |num=4|
{{spar|ns_name}}{{ttb|::}}{{spar|name}}
}}
{{sdsc |num=5|
{{ttb|using}} {{ttb|namespace}} {{spar|ns_name}}{{ttb|;}}
}}
{{sdsc |num=6|
{{ttb|using}} {{spar|ns_name}}{{ttb|::}}{{spar|name}}{{ttb|;}}
}}
{{sdsc | num=7|
{{ttb|namespace}} {{spar|name}} {{ttb|{{=}}}} {{spar|qualified-namespace}} {{ttb|;}}
}}
{{sdsc | num=8|notes={{mark since c++17}}|
{{ttb|namespace}} {{spar|ns_name}}{{ttb|::}}{{spar|name}}
}}
{{sdsc end}}

@1@ {{rlp|namespace#Namespaces|Named namespace definition}} for the namespace {{spar|ns_name}}.
@2@ {{rlp|namespace#Inline_namespaces|Inline namespace definition}} for the namespace {{spar|ns_name}}. Declarations inside {{spar|ns_name}} will be visible in its enclosing namespace.
@3@ {{rlp|namespace#Unnamed_namespaces|Unnamed namespace definition}}. Its members have potential scope from their point of declaration to the end of the translation unit, and have {{rlp|storage duration|internal linkage}}.
@4@ Namespace names (along with class names) can appear on the left hand side of the scope resolution operator, as part of {{rlp|lookup|qualified name lookup}}.
@5@ {{rlp|namespace#Using-directives|using-directive}}: From the point of view of unqualified {{rlp|lookup|name lookup}} of any name after a using-directive and until the end of the scope in which it appears, every name from {{spar|ns_name}} is visible as if it were declared in the nearest enclosing namespace which contains both the using-directive and {{spar|ns_name}}.
@6@ {{rlp|namespace#Using-declarations|using-declaration}}: makes the symbol {{spar|name}} from the namespace {{spar|ns_name}} accessible for {{rlp|lookup|unqualified lookup}} as if declared in the same class scope, block scope, or namespace as where this using-declaration appears.
@7@ {{spar|namespace-alias-definition}}: makes {{spar|name}} a synonym for another namespace: see {{rlp|namespace alias}}
@8@ nested namespace definition: {{c|namespace A::B::C { }} is equivalent to {{c|namespace A { namespace B { namespace C { }}

===Explanation===
====Namespaces====
{{sdsc begin}}
{{sdsc|1=
{{ttb|inline}}{{mark optional}} {{ttb|namespace}} {{spar|attr}}{{mark optional}} {{spar|identifier}} {{ttb|{ }} {{spar|namespace-body}} {{ttb|} }} }}
{{sdsc end}}
{{par begin}}
{{par | {{tt|inline}} | if present, makes this an inline namespace (see below). Cannot appear on the ''extension-namespace-definition'' if the ''original-namespace-definition'' did not use {{tt|inline}} }}
{{par | {{spar|attr}}{{mark c++17}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|identifier}} | either a previously unused identifier, in which case this is ''original-namespace-definition'' or the name of a namespace, in which case this is ''extension-namespace-definition'' {{rev inl|since=c++17|or a sequence of enclosing namespace specifiers separated by ::, ending with {{spar|identifier}}, in which case this is a ''nested-namespace-definition''}}}}
{{par | {{spar|namespace-body}} | possibly empty sequence of {{rlp|declarations}} of any kind (including class and function definitions as well as nested namespaces) }}
{{par end}}

Namespace definitions are only allowed at namespace scope, including the global scope.

To reopen an existing namespace (formally, to be an ''extension-namespace-definition''), the lookup for the {{spar|identifier}} used in the namespace definition must resolve to a namespace name (not a namespace alias), that was declared as a member of the enclosing namespace or of an inline namespace within an enclosing namespace.

The {{spar|namespace-body}} defines a {{rlp|scope|namespace scope}}, which affects {{rlp|lookup|name lookup}}.

All names introduced by the declarations that appear within {{spar|namespace-body}} (including nested namespace definitions) become members of the namespace {{spar|identifier}}, whether this namespace definition is the original namespace definition (which introduced {{spar|identifier}}), or an extension namespace definition (which &quot;reopened&quot; the already defined namespace)

A namespace member that was declared within a namespace body may be defined or redeclared outside of it using explicit qualification
{{source|1=
namespace Q {
  namespace V { // V is a member of Q, and is fully defined within Q
// namespace Q::V { // C++17 alternative to the above two lines
    class C { void m(); }; // C is a member of V and is fully defined within V
                           // C::m is only declared
    void f(); // f is a member of V, but is only declared here
  }
  void V::f() // definition of V's member f outside of V
              // f's enclosing namespaces are still the global namespace, Q, and Q::V
  {
      extern void h(); // This declares ::Q::V::h
  }
  void V::C::m() // definition of V::C::m outside of the namespace (and the class body)
                 // enclosing namespaces are the global namespace, Q, and Q::V
  {
  }
}
}}

Out-of-namespace definitions and redeclarations are only allowed after the point of declaration, only at namespace scope, and only in namespaces that enclose the original namespace (including the global namespace){{rev inl|since=c++14|{{mark unreviewed dr|CWG|1838}} and they must use qualified-id syntax}}

{{source|1=
namespace Q {
  namespace V { // original-namespace-definition for V
    void f(); // declaration of Q::V::f
  }
  void V::f() {} // OK
  void V::g() {} // Error: g() is not yet a member of V
  namespace V { // extension-namespace-definition for V
    void g(); // declaration of Q::V::g
  }
}
namespace R { // not a enclosing namespace for Q
   void Q::V::g() {} // Error: cannot define Q::V::g inside R
}
void Q::V::g() {} // OK: global namespace encloses Q
}}

Names introduced by {{rlp|friend}} declarations within a non-local class X become members of the innermost enclosing namespace of X, but they do not become visible to {{rlp|lookup}} (neither unqualified nor qualified) unless a matching declaration is provided at namespace scope, either before or after the class definition. Such name may be found through {{rlp|adl|ADL}} which considers both namespaces and classes.

Only the innermost enclosing namespace is considered by such friend declaration when deciding whether the name would conflict with a previously declared name.

{{source|1=
void h(int);
namespace A {
  class X {
    friend void f(X); // A::f is a friend
    class Y {
        friend void g(); // A::g is a friend
        friend void h(int); // A::h is a friend, no conflict with ::h
    };
  };
  // A::f, A::g and A::h are not visible at namespace scope
  // even though they are members of the namespace A
  X x;
  void g() {  // definition of A::g
     f(x); // A::X::f is found through ADL
  }
  void f(X) {}       // definition of A::f
  void h(int) {}     // definition of A::h
  // A::f, A::g and A::h are now visible at namespace scope
  // and they are also friends of A::X and A::X::Y
}
}}

{{rev begin}}
{{rev|since=c++11|
====Inline namespaces====
An inline namespace is a namespace that uses the optional keyword {{tt|inline}} in its ''original-namespace-definition''. 

Members of an inline namespace are treated as if they are members of the enclosing namespace in many situations (listed below). This property is transitive: if a namespace N contains an inline namespace M, which in turn contains an inline namespace O, then the members of O can be used as though they were members of M or N. 

* A ''using-directive'' that names the inline namespace is implicitly inserted in the enclosing namespace (similar to the implicit using-directive for the unnamed namespace)
* In {{rlp|adl|argument-dependent lookup}}, when a namespace is added to the set of associated namespaces, its inline namespaces are added as well, and if an inline namespace is added to the list of associated namespaces, its enclosing namespace is added as well.
* Each member of an inline namespace can be partially specialized{{mark unreviewed dr|CWG|1819}}, explicitly instantiated or explicitly specialized as if it were a member of the enclosing namespace.
* Qualified {{rlp|lookup|name lookup}} that examines the enclosing namespace will include the names from the inline namespaces even if the same name is present in the enclosing namespace.

{{source|1=
{ // in C++14, std::literals and its member namespaces are inline
   using namespace std::string_literals; // makes visible operator&quot;&quot;s 
                                         // from std::literals::string_literals
   auto str = &quot;abc&quot;s;
}
{
   using namespace std::literals; // makes visible both
                                  // std::literals::string_literals::operator&quot;&quot;s
                                  // and std::literals::chrono_literals::operator&quot;&quot;s
   auto str = &quot;abc&quot;s;
   auto min = 60s;
}
{
   using std::operator&quot;&quot;s; // makes both std::literals::string_literals::operator&quot;&quot;s
                           // and std::literals::chrono_literals::operator&quot;&quot;s visible
   auto str = &quot;abc&quot;s;
   auto min = 60s;
}
}}

Note: the rule about specializations allows library versioning: different implementations of a library template may be defined in different inline namespaces, while still allowing the user to extend the parent namespace with an explicit specialization of the primary template.
}}
{{rev end}}

====Unnamed namespaces====
The ''unnamed-namespace-definition'' is a namespace definition of the form
{{sdsc begin}}
{{sdsc|1=
{{ttb|inline}}{{mark optional}} {{ttb|namespace}} {{spar|attr}}{{mark optional}} {{ttb|{ }} {{spar|namespace-body}} {{ttb|} }} }}
{{sdsc end}}
{{par begin}}
{{par | {{spar|attr}}{{mark c++17}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par end}}
This definition is treated as a definition of a namespace with unique name and a ''using-directive'' in the current scope that nominates this unnamed namespace.

{{source|
namespace {
    int i;  // defines ::(unique)::i
}
void f() {
    i++;  // increments ::(unique)::i
}

namespace A {
    namespace {
        int i; // A::(unique)::i
        int j; // A::(unique)::j
    }
    void g() { i++; } // A::unique::i++
}

using namespace A; // introduces all names from A into global namespace
void h() {
    i++;    // error: ::(unique)::i and ::A::(unique)::i are both in scope
    A::i++; // ok, increments ::A::(unique)::i
    j++;    // ok, increments ::A::(unique)::j
}
}}

{{rev begin}}
{{rev|until=c++11|
Even though names in an unnamed namespace may be declared with external linkage, they are never accessible from other translation units because their namespace name is unique.
}}
{{rev|since=c++11|
Unnamed namespaces as well as all namespaces declared directly or indirectly within an unnamed namespace have {{rlp|storage_duration#Linkage|internal linkage}}, which means that any name that is declared within an unnamed namespace has internal linkage.
}}
{{rev end}}

====Using-declarations====
Introduces a name that is defined elsewhere into the declarative region where this using-declaration appears.

{{sdsc begin}}
{{sdsc|1=
{{ttb|using}} {{ttb|typename}}{{mark optional}} {{spar|nested-name-specifier}} {{spar|unqualified-id}} {{ttb|;}}|notes={{mark until c++17}}
}}
{{sdsc|{{ttb|using}} {{spar|declarator-list}} {{ttb|;}}|notes={{mark since c++17}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|nested-name-specifier}} | a sequence of names and scope resolution operators {{tt|::}}, ending with a scope resolution operator. A single {{tt|::}} refers to the global namespace.}}
{{par | {{spar|unqualified-id}} | an {{rlp|identifiers|id-expression}} }}
{{par | {{spar|typename}} | the keyword {{tt|typename}} may be used as necessary to resolve {{rlp|dependent_name|dependent names}}, when the using-declaration introduces a member type from a base class into a class template}}
{{par | {{spar|declarator-list}} | comma-separated list of one or more declarators of the form {{ttb|typename}}{{mark optional}} {{spar|nested-name-specifier}} {{spar|unqualified-id}}. The last declarator may be an ellipsis, although that form is only meaningful in {{rlp|using declaration|derived class definitions}} }}
{{par end}}

Using-declarations can be used to introduce namespace members into other namespaces and block scopes, or to introduce base class members into derived class definitions.
{{rev begin}}
{{rev|since=c++17|
A using-declaration with more than one using-declarator is equivalent to a corresponding sequence of using-declarations with one using-declarator.
}}
{{rev end}}

For the use in derived class definitions, see {{rlp|using declaration}}.

Names introduced into a namespace scope by a using-declaration can be used just like any other names, including qualified lookup from other scopes:
{{source|1=
void f();
namespace A {
    void g();
}
namespace X {
    using ::f; // global f is now visible as ::X::f
    using A::g; // A::g is now visible as ::X::g
    using A::g, A::g; // (C++17) OK: double declaration allowed at namespace scope
}
void h()
{
    X::f(); // calls ::f
    X::g(); // calls A::g
}
}}

If, after the using-declaration was used to take a member from a namespace, the namespace is extended and additional declarations for the same name are introduced, those additional declarations do not become visible through the using-declaration (in contrast with using-directive). One exception is when a using-declaration names a class template: partial specializations introduced later are effectively visible, because their {{rlp|lookup}} proceeds through the primary template.
{{source|1=
namespace A {
    void f(int);
}
using A::f; // ::f is now a synonym for A::f(int)

namespace A { // namespace extension
   void f(char); // does not change what ::f means
}
void foo() {
    f('a'); // calls f(int), even though f(char) exists.
} 
void bar() {
   using A::f; // this f is a synonym for both A::f(int) and A::f(char)
   f('a'); // calls f(char)
}
}}

Using-declarations cannot name template-id, namespace, or a scoped enumerator. Each declarator in a using-declaration introduces one and only one name, for example using-declaration for an {{rlp|enum|enumeration}} does not introduce any of its enumerators.

All restrictions on regular declarations of the same names, hiding, and overloading rules apply to using-declarations:

{{source|1=
namespace A {
    int x;
}
namespace B {
    int i;
    struct g { };
    struct x { };
    void f(int);
    void f(double);
    void g(char); // OK: function name g hides struct g
}
void func() {
    int i;
    using B::i; // error: i declared twice

    void f(char);
    using B::f; // OK: f(char), f(int), f(double) are overloads
    f(3.5); // calls B::f(double)

    using B::g;
    g('a');      // calls B::g(char)
    struct g g1; // declares g1 to have type struct B::g

    using B::x;
    using A::x;  // OK: hides struct B::x
    x = 99;      // assigns to A::x
    struct x x1; // declares x1 to have type struct B::x
}
}}

If a function was introduced by a using-declaration, declaring a function with the same name and parameter list is ill-formed (unless the declaration is for the same function). If a function template was introduced by a using-declaration, declaring a function template with the same name, parameter type list, return type, and template parameter list is ill-formed.
Two using-declarations can introduce functions with the same name and parameter list, but if a call to that function is attempted, the program is ill-formed. 

{{source|1=
namespace B {
    void f(int);
    void f(double);
}
namespace C {
    void f(int);
    void f(double);
    void f(char);
}
void h() {
    using B::f; // introduces B::f(int), B::f(double)
    using C::f; // introduces C::f(int), C::f(double), and C::f(char)
    f('h');      // calls C::f(char)
    f(1);        // error: B::f(int) or C::f(int)?
    void f(int); // error: f(int) conflicts with C::f(int) and B::f(int)
}
}}

{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|1838}}
If an entity is declared, but not defined in some inner namespace, and then declared through using-declaration in the outer namespace, and then a definition appears in the outer namespace with the same unqualified name, that definition is a member of the outer namespace and conflicts with the using-declration:
{{source|1=
namespace X {
  namespace M {
     void g(); // declares, but doesn't define X::M::g()
  }
  using M::g;
  void g();   // Error: attempt to declare X::g which conflicts with X::M::g()
}
}}
More generally, a declaration that appears in any namespace scope and introduces a name using an unqualified identifier always introduces a member into the namespace it's in and not to any other namespace. The exceptions are explicit instantiations and explicit specializations of a primary template that is defined in an inline namespace: because they do not introduce a new name, they may use unqualified-id in an enclosing namespace.
}}
{{rev end}}
====Using-directives====
A ''using-directive'' is a {{rlp|declarations|block-declaration}} with the following syntax:
{{sdsc begin}}
{{sdsc |num=1|
{{spar|attr}}{{mark optional}} {{ttb|using}} {{ttb|namespace}} {{spar|nested-name-specifier}}{{mark optional}} {{spar|namespace-name}} {{ttb|;}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | any number of {{rlp|attributes}} that apply to this using-directive}}
{{par | {{spar|nested-name-specifier}} | a sequence of names and scope resolution operators {{tt|::}}, ending with a scope resolution operator. A single {{tt|::}} refers to the global namespace.}}
{{par | {{spar|namespace-name}} | a name of a namespace. When looking up this name, {{rlp|lookup}} considers namespace declarations only}}
{{par end}}

Using-directives are allowed only in namespace {{rlp|scope}} and in block scope. From the point of view of unqualified {{rlp|lookup|name lookup}} of any name after a using-directive and until the end of the scope in which it appears, every name from {{spar|namespace-name}} is visible as if it were declared in the nearest enclosing namespace which contains both the using-directive and {{spar|namespace-name}}.

Using-directive does not add any names to the declarative region in which it appears (unlike the using-declaration), and thus does not prevent identical names from being declared.

Using-directives are transitive for the purposes of {{rlp|lookup|unqualified lookup}}: if a scope contains a using-directive that nominates a {{spar|namespace-name}}, which itself contains using-directive for some {{spar|namespace-name-2}}, the effect is as if the using directives from the second namespace appear within the first. The order in which these transitive namespaces occur does not influence name lookup.
{{source|1=
namespace A {
    int i;
}
namespace B {
    int i;
    int j;
    namespace C {
        namespace D {
            using namespace A; // all names from A injected into global namespace
            int j;
            int k;
            int a = i; // i is B::i, because A::i is hidden by B::i
        }
        using namespace D; // names from D are injected into C
                           // names from A are injected into global namespace
        int k = 89; // OK to declare name identical to one introduced by a using
        int l = k;  // ambiguous: C::k or D::k
        int m = i;  // ok: B::i hides A::i
        int n = j;  // ok: D::j hides B::j
    }
}
}}

If, after a using-directive was used to nominate some namespace, the namespace is extended an additional members and/or using-directives are added to it, those additional members and the additional namespaces are visible through the using-directive (in contrast with using-declaration)

{{source|
namespace D {
   int d1;
   void f(char);
}
using namespace D; // introduces D::d1, D::f, D::d2, D::f,
                   //  E::e, and E::f into global namespace!

int d1; // OK: no conflict with D::d1 when declaring
namespace E {
    int e;
    void f(int);
}
namespace D { // namespace extension
    int d2;
    using namespace E; // transitive using-directive
    void f(int);
}
void f() {
    d1++; // error: ambiguous ::d1 or D::d1?
    ::d1++; // OK
    D::d1++; // OK
    d2++; // OK, d2 is D::d2
    e++; // OK: e is E::e due to transitive using
    f(1); // error: ambiguous: D::f(int) or E::f(int)?
    f('a'); // OK: the only f(char) is D::f(char)
}
}}

===Notes===
The using-directive {{tt|using namespace std;}} at any namespace scope introduces every name from the namespace {{tt|std}} into the global namespace (since the global namespace is the nearest namespace that contains both {{tt|std}} and any user-declared namespace), which may lead to undesirable name collisions. This, and other using directives are generally considered bad practice at file scope of a header file&lt;!-- TODO: reference to Sutter/Alexandrescu's book--&gt;.

===Example===

{{example
 | This example shows how to use a namespace to create a class that already has been named in the {{tt|std}} namespace. 
 | code=
#include &lt;vector&gt;

namespace vec {

    template&lt; typename T &gt;
    class vector {
        // ...
    };

} // of vec

int main()
{
    std::vector&lt;int&gt; v1; // Standard vector.
    vec::vector&lt;int&gt; v2; // User defined vector.

    v1 = v2; // Error: v1 and v2 are different object's type.

    {
        using namespace std;
        vector&lt;int&gt; v3; // Same as std::vector
        v1 = v3; // OK
    }

    {
        using vec::vector;
        vector&lt;int&gt; v4; // Same as vec::vector
        v2 = v4; // OK
    }
        
    return 0;
}
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1838|std=C++14|before=unqualified definition in an outer namespace could define an entry declared,
but not defined in another namespace and pulled in by a using|after=unqualified defns always refers to its namespace}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc namespace_alias}}
{{dsc end}}

[[de:cpp/language/namespace]]
[[es:cpp/language/namespace]]
[[fr:cpp/language/namespace]]
[[it:cpp/language/namespace]]
[[ja:cpp/language/namespace]]
[[pt:cpp/language/namespace]]
[[ru:cpp/language/namespace]]
[[zh:cpp/language/namespace]]</text>
      <sha1>k9fhdh4dh6klb7vspyb3sxli8urseik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/namespace alias</title>
    <ns>0</ns>
    <id>8401</id>
    <revision>
      <id>67707</id>
      <parentid>58021</parentid>
      <timestamp>2014-02-21T19:11:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>navbar</comment>
      <text xml:space="preserve" bytes="1483">{{title|Namespace aliases}}
{{cpp/language/declarations/navbar}}

Namespace aliases allow the programmer to define an alternate name for a namespace.  

They are commonly used as a convenient shortcut for long or deeply-nested namespaces.

===Syntax===
{{sdsc begin}}
{{sdsc |num=1|
{{ttb|namespace}} {{spar|alias_name}} {{=}} {{spar|ns_name}}{{ttb|;}}
}}
{{sdsc |num=2|
{{ttb|namespace}} {{spar|alias_name}} {{=}} {{ttb|::}}{{spar|ns_name}}{{ttb|;}} 
}}
{{sdsc |num=3|
{{ttb|namespace}} {{spar|alias_name}} {{=}} {{spar|nested_name}}{{ttb|::}}{{spar|ns_name}}{{ttb|;}}
}}
{{sdsc end}}

===Explanation===

The new alias {{spar|alias_name}} provides an alternate method of accessing {{spar|ns_name}}.  

{{spar|alias_name}} must be a name not previously used.  {{spar|alias_name}} is valid for the duration of the scope in which it is introduced.

===Example===

{{example
 | code=
#include &lt;iostream&gt;
 
namespace foo {
    namespace bar {
         namespace baz {
             int qux = 42;
         }
    }
}
 
namespace fbz = foo::bar::baz;
 
int main()
{
    std::cout &lt;&lt; fbz::qux &lt;&lt; '\n';
}
 | output=
42
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc namespace}}
{{dsc end}}

[[de:cpp/language/namespace alias]]
[[es:cpp/language/namespace alias]]
[[fr:cpp/language/namespace alias]]
[[it:cpp/language/namespace alias]]
[[ja:cpp/language/namespace alias]]
[[pt:cpp/language/namespace alias]]
[[ru:cpp/language/namespace alias]]
[[zh:cpp/language/namespace alias]]</text>
      <sha1>inxo7hnsmnrp99ni06gbj9eglwn0iyx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/nested classes</title>
    <ns>0</ns>
    <id>13548</id>
    <redirect title="cpp/language/nested types" />
    <revision>
      <id>70460</id>
      <timestamp>2014-05-23T11:13:33Z</timestamp>
      <contributor>
        <ip>115.231.76.55</ip>
      </contributor>
      <comment>Redirected page to [[cpp/language/nested types]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/language/nested_types]]</text>
      <sha1>0cteqy5peydoecvf4aqtfxva3z1iex3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/nested types</title>
    <ns>0</ns>
    <id>13013</id>
    <revision>
      <id>88790</id>
      <parentid>88789</parentid>
      <timestamp>2016-12-11T21:18:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix broken link, and apparent type (name function -&gt; member function)</comment>
      <text xml:space="preserve" bytes="3794">{{title|nested classes}}
{{cpp/language/classes/navbar}}

A declaration of a {{rlp|class|class/struct}} or {{rlp|union}} may appear in within another class. Such declaration declares a ''nested class''

===Explanation===
The name of the nested class exists in the scope of the enclosing class, and name lookup from a member function of a nested class visits the scope of the enclosing class after examining the scope of the nested class. Like any member of its enclosing class, the nested class has access to all names (private, protected, etc) to which the enclosing class has access, but it is otherwise independent and has no special access to the {{rlp|this}} pointer of the enclosing class.
{{rev begin}}
{{rev|until=c++11|Declarations in a nested class can use only type names, static members, and enumerators from the enclosing class.
}}
{{rev|since=c++11|
Declarations in a nested class can use any members of the enclosing class, following the {{rlp|data members#Usage|usual usage rules}} for the non-static members.
}}
{{rev end}}

{{source|1=
int x,y; // globals
class enclose { // enclosing class
    int x; // note: private members
    static int s;
 public:
    struct inner { // nested class
        void f(int i) {
            x = i; // Error: can't write to non-static enclose::x without instance
            int a = sizeof x; // Error until C++11,
                              // OK in C++11: operand of sizeof is unevaluated,
                              // this use of the non-static enclose::x is allowed.
            s = i;   // OK: can assign to the static enclose::s
            ::x = i; // OK: can assign to global x
            y = i;   // OK: can assign to global y
        }
        void g(enclose* p, int i) {
            p-&gt;x = i; // OK: assign to enclose::x
        }
    };
};
}}

{{rlp|friend|Friend}} functions defined within a nested class have no special access to the members of the enclosing class even if lookup from the body of a member function that is defined within a nested class can find the private members of the enclosing class.

Out-of-class definitions of the members of a nested class appear in the namespace of the enclosing class:

{{source|1=
struct enclose {
    struct inner {
        static int x;
        void f(int i);
    };
};
int enclose::inner::x = 1; // definition
void enclose::inner::f(int i) {} // definition
}}

Nested classes can be forward-declared and later defined, either within the same enclosing class body, or outside of it:

{{source|1=
class enclose {
    class nested1; // forward declaration
    class nested2; // forward declaration
    class nested1 {}; // definition of nested class
};
class enclose::nested2 { }; // definition of nested class
}}

Nested class declarations obey {{rlp|access|member access}} specifiers, a private member class cannot be named outside the scope of the enclosing class, although objects of that class may be manipulated:

{{source|1=
class enclose {
    struct nested { // private member
        void g() {}
    };
 public:
    static nested f() { return nested{}; }
};

int main()
{
    //enclose::nested n1 = e.f(); // error: 'nested' is private

    enclose::f().g(); // OK: does not name 'nested'
    auto n2 = enclose::f(); // OK: does not name 'nested'
    n2.g();
}
}}

===References===
{{ref std c++11}}
{{ref std | section=9.7 | title=Nested class declarations | id=class.nest}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=9.7 | title=Nested class declarations | id=class.nest}}
{{ref std end}}

[[de:cpp/language/nested types]]
[[es:cpp/language/nested types]]
[[fr:cpp/language/nested types]]
[[it:cpp/language/nested types]]
[[ja:cpp/language/nested types]]
[[pt:cpp/language/nested types]]
[[ru:cpp/language/nested types]]
[[zh:cpp/language/nested types]]</text>
      <sha1>prfjs356y83whurd985lflbsbi4x60p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/new</title>
    <ns>0</ns>
    <id>700</id>
    <revision>
      <id>91945</id>
      <parentid>91757</parentid>
      <timestamp>2017-03-31T20:13:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="13291">{{title|new expression}}
{{cpp/language/expressions/navbar}}

Creates and initializes objects with dynamic [[cpp/language/storage_duration|storage duration]], that is, objects whose lifetime is not limited by the scope in which they were created.

===Syntax===
{{sdsc begin}} 
{{sdsc | num=1 |1= 
{{ttb|::}}{{mark optional}} {{ttb|new}} {{ttb|(}}{{spar|placement_params}}{{ttb|)}}{{mark optional}} {{ttb|(}} {{spar|type}} {{ttb|)}} {{spar|initializer}}{{mark optional}}
}}
{{sdsc | num=2 |1= 
{{ttb|::}}{{mark optional}} {{ttb|new}} {{ttb|(}}{{spar|placement_params}}{{ttb|)}}{{mark optional}} {{spar|type}} {{spar|initializer}}{{mark optional}}
}}
{{sdsc end}}

@1@ Attempts to create an object of type, denoted by the {{rlp|type#Type_naming|type-id}} {{tt|type}}, which may be array type{{rev inl|since=c++11|, and may include the type specifier {{tt|auto}}}}{{rev inl|since=c++17|or the placeholder type {{tt|decltype(auto)}}}}
@2@ Same, but {{tt|type}} cannot include parentheses:

{{source|1=
new int(*[10])(); // error: parsed as (new int) (*[10]) ()
new (int (*[10])()); // okay: allocates an array of 10 pointers to functions
}}

In addition, unparenthesized {{spar|type}} is greedy: it will include every token that can be a part of a declarator:

{{source|1=
new int + 1; // okay: parsed as (new int) + 1, increments a pointer returned by new int
new int * 1; // error: parsed as (new int*) (1)
}}

Note: If {{tt|auto}} is used in {{tt|type}}, then {{tt|initializer}} is not optional: it is required to deduce the type to use in place of {{tt|auto}}:
{{c|1=auto p = new auto('c'); // creates a single object of type char. p is a char*}}

===Explanation===
The {{tt|new}} expression attempts to allocate storage and then attempts to construct and initialize either a single unnamed object, or an unnamed array of objects in the allocated storage. The new-expression returns a prvalue pointer to the constructed object or, if an array of objects was constructed, a pointer to the initial element of the array.

If {{tt|type}} is an array type, all dimensions other than the first must be specified as positive {{rev inl|until=c++14|{{rlp|constant expression|integral constant expression}}}}{{rev inl|since=c++14|{{rlp|constant expression|converted constant expression}} of type {{lc|std::size_t}}}}, but the first dimension may be any expression convertible to {{lc|std::size_t}}. This is the only way to directly create an array with size defined at runtime, such arrays are often referred to as ''dynamic arrays'':

{{source|1=
int n = 42;
double a[n][5]; // error
auto p1 = new double[n][5]; // okay
auto p2 = new double[5][n]; // error
}}

In the following cases the expression specifying the first dimension is erroneous:
* the expression is of non-class type and its value before conversion to {{lc|std::size_t}} is negative;
* the expression is of class type and its value after user-defined conversion function and before the {{rlp|implicit cast|second standard conversion}} is negative;
* the value of the expression is larger than some implementation-defined limit;
* the value is smaller than the number of array elements provided in {{rlp|aggregate initialization|the brace-enclosed initializer}} (including the terminating {{tt|'\0'}} on a {{rlp|string literal}}).

If the value in the first dimension is erroneous for any of these reasons, 
* if, after conversion to {{lc|std::size_t}}, the first dimension is a {{rlp|constant expression|core constant expression}}, the program is ill-formed (a compile-time error is issued);
{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|1992}}
* Otherwise, if the allocation function that would have been called is non-throwing, the new-expression returns the null pointer of the required result type
}}
{{rev end}}
{{rev begin}}
{{rev|since=c++11|
* Otherwise, the new-expression does not call the allocation function, and instead throws an exception of type {{lc|std::bad_array_new_length}} or derived from it
}}
{{rev end}}

The first dimension of zero is acceptable, and the allocation function is called.

Note: {{lc|std::vector}} offers similar functionality for one-dimensional dynamic arrays.

====Allocation====
The new-expression allocates storage by calling the appropriate [[cpp/memory/new/operator_new | allocation function]]. If {{tt|type}} is a non-array type, the name of the function is {{tt|operator new}}. If {{tt|type}} is an array type, the name of the function is {{tt|operator new[]}}. 

As described in [[cpp/memory/new/operator_new | allocation function]], the C++ program may provide global and class-specific replacements for these functions. If the new-expression begins with the optional {{c|::}} operator, as in {{c|::new T}} or {{c|::new T[n]}}, class-specific replacements will be ignored (the function is {{rlp|lookup|looked up}} in global {{rlp|scope}}). Otherwise, if {{tt|T}} is a class type, lookup begins in the class scope of {{tt|T}}.

When calling the allocation function, the new-expression passes the number of bytes requested as the first argument, of type {{c|std::size_t}}, which is exactly {{c|sizeof(T)}} for non-array {{tt|T}}.

Array allocation may supply unspecified overhead, which may vary from one call to new to the next. The pointer returned by the new-expression will be offset by that value from the pointer returned by the allocation function. Many implementations use the array overhead to store the number of objects in the array which is used by the [[cpp/language/delete|{{c|delete[]}}]] expression to call the correct number of destructors. In addition, if the new-expression is used to allocate an array of {{c|char}}, {{c|unsigned char}}, or {{ltt|cpp/types/byte|std::byte}}, it may request additional memory from the allocation function if necessary to guarantee correct alignment of objects of all types no larger than the requested array size, if one is later placed into the allocated array. 

{{rev begin}}
{{rev|since=c++14|
New-expressions are allowed to elide or combine allocations made through replaceable allocation functions. In case of elision, the storage may be provided by the compiler without making the call to an allocation function (this also permits optimizing out unused new-expression). In case of combining, the allocation made by a new-expression E1 may be extended to provide additional storage for another new-expression E2 if all of the following is true:
@1@ The lifetime of the object allocated by E1 strictly contains the lifetime of the object allocated by E2,
@2@ E1 and E2 would invoke the same replaceable global allocation function
@3@ For a throwing allocation function, exceptions in E1 and E2 would be first caught in the same handler.

Note that this optimization is only permitted when new-expressions are used, not any other methods to call a replaceable allocation function: {{c|delete new int[10];}} can be optimized out, but {{c|operator delete(operator new(10));}} cannot.
}}
{{rev end}}

If {{tt|placement_params}} are provided, they are passed to the allocation function as additional arguments. Such allocation functions are known as &quot;placement new&quot;, after the standard allocation function {{c|void* operator new(std::size_t, void*)}}, which simply returns its second argument unchanged. This is used to construct objects in allocated storage:

{{source|1=
char* ptr = new char[sizeof(T)]; // allocate memory
T* tptr = new(ptr) T;            // construct in allocated storage (&quot;place&quot;)
tptr-&gt;~T();                      // destruct
delete[] ptr;                    // deallocate memory
}}

Note: this functionality is encapsulated by the member functions of the {{concept|Allocator}} classes.

{{rev begin}}
{{rev|since=c++17|
When allocating an object whose alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}} or an array of such objects, the new-expression passes the alignment requirement (wrapped in {{lc|std::align_val_t}}) as the second argument for the allocation function (for placement forms, {{tt|placement_params}} appear after the alignment, as the third, fourth, etc arguments). If overload resolution fails (which happens when a class-specific allocation function is defined with a different signature, since it hides the globals), overload resolution is attempted a second time, without alignment in the argument list. This allows alignment-unaware class-specific allocation functions to take precedence over the global alignment-aware allocation functions.
}}
{{rev end}}

{{source|1=
new T;      // calls operator new(sizeof(T))
            // (C++17) or operator new(sizeof(T), std::align_val_t(alignof(T))))
new T[5];   // calls operator new[](sizeof(T)*5 + overhead)
            // (C++17) or operator new(sizeof(T)*5+overhead, std::align_val_t(alignof(T))))
new(2,f) T; // calls operator new(sizeof(T), 2, f)
            // (C++17) or operator new(sizeof(T), std::align_val_t(alignof(T)), 2, f)
}}

If the allocation function return a null pointer, which is possible if the non-throwing overload was selected, e.g. with {{c|new(std::nothrow) T;}}, then the new-expression returns immediately, it does not attempt to initialize an object or to call a deallocation function. {{rev inl|since=c++17|If the standard placement allocation function returns a null pointer, which is possible if the user passes a null pointer as the argument, the behavior is undefined.}}

====Construction====
The object created by a new-expression is initialized according to the following rules:
* For non-array {{tt|type}}, the single object is constructed in the acquired memory area.
:* If {{spar|initializer}} is absent, the object is [[cpp/language/default_initialization|default-initialized]].
:* If {{spar|initializer}} is a parenthesized list of arguments, the object is [[cpp/language/direct_initialization|direct-initialized]].
{{rev begin}}
{{rev|since=c++11|
:* If {{spar|initializer}} is a brace-enclosed list of arguments, the object is [[cpp/language/list_initialization|list-initialized]].
}}
{{rev end}}
* If {{spar|type}} is an array type, an array of objects is initialized.
:* If {{spar|initializer}} is absent, each element is [[cpp/language/default_initialization|default-initialized]]
:* If {{spar|initializer}} is an empty pair of parentheses, each element is [[cpp/language/value_initialization|value-initialized]].
{{rev begin}}
{{rev|since=c++11|
:* If {{spar|initializer}} is a brace-enclosed list of arguments, the array is [[cpp/language/aggregate_initialization|aggregate-initialized]].
}}
{{rev end}}

If initialization terminates by throwing an exception (e.g. from the constructor), if new-expression allocated any storage, it calls the appropriate [[cpp/memory/new/operator_delete|deallocation function]]: {{c|operator delete}} for non-array {{tt|type}}, {{c|operator delete[]}} for array {{tt|type}}. The deallocation function is looked up in global scope if the new-expression used the {{c|::new}} syntax, otherwise it is looked up in the scope of {{tt|T}}, if {{tt|T}} is a class type. If the failed allocation function was usual (non-placement), lookup for the deallocation function follows the rules described in {{rlp|delete|delete-expression}}. For a failed placement new, all parameter types, except the first, of the matching deallocation function must be identical to the parameters of the placement new. The call to the deallocation function is made the value obtained earlier from the allocation function passed as the first argument, {{rev inl|since=c++17|alignment passed as the optional alignment argument}}, and {{tt|placement_params}}, if any, passed as the additional placement arguments. If no deallocation function is found, memory is not deallocated. 

===Memory leaks===
The objects created by new-expressions (objects with dynamic storage duration) persist until the pointer returned by the new-expression is used in a matching [[cpp/language/delete|delete-expression]]. If the original value of pointer is lost, the object becomes unreachable and cannot be deallocated: a ''memory leak'' occurs.

This may happen if the pointer is assigned to:

{{source|1=
int* p = new int(7); // dynamically allocated int with value 7
p = nullptr; // memory leak
}}

or if the pointer goes out of scope:

{{source|1=
void f()
{
    int* p = new int(7);
} // memory leak
}}

or due to exception

{{source|1=
void f()
{
   int* p = new int(7);
   g();      // may throw
   delete p; // okay if no exception
} // memory leak if g() throws
}}

To simplify management of dynamically-allocated objects, the result of a new-expression is often stored in a ''[[cpp/memory#Smart pointers|smart pointer]]'': {{rev inl|until=c++17|{{lc|std::auto_ptr}} }}{{rev inl|since=c++11|{{lc|std::unique_ptr}}, or {{lc|std::shared_ptr}}}}. These pointers guarantee that the delete expression is executed in the situations shown above.

===Keywords===
{{ltt|cpp/keyword/new}}


===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1992|std=C++14|before=new (std::nothrow) int[N] could throw bad_array_new_length|after=changed to return a null pointer}}
{{dr list end}}

[[de:cpp/language/new]]
[[es:cpp/language/new]]
[[fr:cpp/language/new]]
[[it:cpp/language/new]]
[[ja:cpp/language/new]]
[[pt:cpp/language/new]]
[[ru:cpp/language/new]]
[[zh:cpp/language/new]]</text>
      <sha1>5jol79yctwqpd45hmfukq5unj227ysz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/noexcept</title>
    <ns>0</ns>
    <id>701</id>
    <revision>
      <id>83505</id>
      <parentid>81357</parentid>
      <timestamp>2016-02-18T11:47:20Z</timestamp>
      <contributor>
        <ip>119.122.229.169</ip>
      </contributor>
      <text xml:space="preserve" bytes="3717">{{title|noexcept operator {{mark since c++11}}}}
{{cpp/language/exceptions/navbar}}

The {{tt|noexcept}} operator performs a compile-time check that returns true if an expression is declared to not throw any exceptions.

It can be used within a function template's {{rlp|noexcept_spec | noexcept specifier}} to declare that the function will throw exceptions for some types but not others.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|noexcept(}} {{spar|expression}} {{ttb|)}}}}
{{sdsc end}}

Returns a {{rlp|value category|prvalue}} of type {{c|bool}}. 

===Explanation===

The {{tt|noexcept}} operator does not evaluate {{spar|expression}}.

{{rev begin}}
{{rev|until=c++17|
The result is {{ttb|false}} if the {{spar|expression}} contains at least one of the following potentially evaluated constructs:

:* call to any type of function that does not have non-throwing exception specification, unless it is a {{rlp|constexpr | constant expression}}.
:* {{rlp|throw|{{tt|throw}} expression}}.
:* {{rlp|dynamic_cast|{{tt|dynamic_cast}} expression}} when the target type is a reference type, and conversion needs a run time check
:* {{rlp|typeid|{{tt|typeid}} expression}} when argument type is polymorphic class type 

In all other cases the result is {{ttb|true}}.
}}
{{rev|since=c++17|
The result is {{ttb|true}} if the set of {{rlp|except spec|''potential exceptions''}} of the {{spar|expression}} is empty, and {{ttb|false}} otherwise.
}}
{{rev end}}
===Keywords===

{{ltt|cpp/keyword/noexcept}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;vector&gt;

void may_throw();
void no_throw() noexcept;
auto lmay_throw = []{};
auto lno_throw = []() noexcept {};
class T{
public:
  ~T(){} // dtor prevents move ctor
         // copy ctor is noexcept
};
class U{
public:
  ~U(){} // dtor prevents move ctor
         // copy ctor is noexcept(false)
  std::vector&lt;int&gt; v;
};
class V{
public:
  std::vector&lt;int&gt; v;
};
 
int main()
{
 T t;
 U u;
 V v;
 
 std::cout &lt;&lt; std::boolalpha
           &lt;&lt; &quot;Is may_throw() noexcept? &quot; &lt;&lt; noexcept(may_throw()) &lt;&lt; '\n'
           &lt;&lt; &quot;Is no_throw() noexcept? &quot; &lt;&lt; noexcept(no_throw()) &lt;&lt; '\n'
           &lt;&lt; &quot;Is lmay_throw() noexcept? &quot; &lt;&lt; noexcept(lmay_throw()) &lt;&lt; '\n'
           &lt;&lt; &quot;Is lno_throw() noexcept? &quot; &lt;&lt; noexcept(lno_throw()) &lt;&lt; '\n'
           &lt;&lt; &quot;Is ~T() noexcept? &quot; &lt;&lt; noexcept(std::declval&lt;T&gt;().~T()) &lt;&lt; '\n'
           // note: the following tests also require that ~T() is noexcept because
           // the expression within noexcept constructs and destroys a temporary
           &lt;&lt; &quot;Is T(rvalue T) noexcept? &quot; &lt;&lt; noexcept(T(std::declval&lt;T&gt;())) &lt;&lt; '\n'
           &lt;&lt; &quot;Is T(lvalue T) noexcept? &quot; &lt;&lt; noexcept(T(t)) &lt;&lt; '\n'
           &lt;&lt; &quot;Is U(rvalue U) noexcept? &quot; &lt;&lt; noexcept(U(std::declval&lt;U&gt;())) &lt;&lt; '\n'
           &lt;&lt; &quot;Is U(lvalue U) noexcept? &quot; &lt;&lt; noexcept(U(u)) &lt;&lt; '\n'  
           &lt;&lt; &quot;Is V(rvalue V) noexcept? &quot; &lt;&lt; noexcept(V(std::declval&lt;V&gt;())) &lt;&lt; '\n'
           &lt;&lt; &quot;Is V(lvalue V) noexcept? &quot; &lt;&lt; noexcept(V(v)) &lt;&lt; '\n';  
}
|output=
Is may_throw() noexcept? false
Is no_throw() noexcept? true
Is lmay_throw() noexcept? false
Is lno_throw() noexcept? true
Is ~T() noexcept? true
Is T(rvalue T) noexcept? true
Is T(lvalue T) noexcept? true
Is U(rvalue U) noexcept? false
Is U(lvalue U) noexcept? false
Is V(rvalue V) noexcept? true
Is V(lvalue V) noexcept? false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc noexcept_spec}}
{{dsc inc | cpp/language/dsc except_spec}}
{{dsc end}}

[[de:cpp/language/noexcept]]
[[es:cpp/language/noexcept]]
[[fr:cpp/language/noexcept]]
[[it:cpp/language/noexcept]]
[[ja:cpp/language/noexcept]]
[[pt:cpp/language/noexcept]]
[[ru:cpp/language/noexcept]]
[[zh:cpp/language/noexcept]]</text>
      <sha1>j1247qyd671hipws7927nvjl1tg7wzs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/noexcept spec</title>
    <ns>0</ns>
    <id>2458</id>
    <revision>
      <id>89181</id>
      <parentid>88816</parentid>
      <timestamp>2017-01-06T16:00:06Z</timestamp>
      <contributor>
        <ip>137.226.194.17</ip>
      </contributor>
      <comment>fixing plural.</comment>
      <text xml:space="preserve" bytes="11791">{{title|noexcept specifier  {{mark since c++11}}}}
{{cpp/language/exceptions/navbar}}

Specifies whether a function will throw exceptions or not.

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|noexcept}}}}
{{sdsc | num=2 | {{ttb|noexcept(}}{{spar|expression}}{{ttb|)}}}}
{{sdsc | num=3 | {{ttb|throw()}} | notes={{mark deprecated}} }}
{{sdsc end}}
@1@ Same as {{ttb|noexcept}} {{ttb|(}} {{ttb|true}} {{ttb|)}}
@2@ If {{spar|expression}} evaluates to {{c|true}}, the function is declared to not throw any exceptions.

{{rev begin}}
{{rev|since=c++17|
@3@ Same as {{ttb|noexcept(true)}}
}}
{{rev|until=c++17|
@3@ Non-throwing {{rlp|except spec|dynamic exception specification}} (unlike {{lc|noexcept(true)}} guarantees stack unwinding and may call {{lc|std::unexpected}})
}}
{{rev end}}
{{par begin}}
{{par | {{spar|expression}} | {{rlp|constant expression#Converted constant expression|contextually converted constant expression of type {{c|bool}}}} }}
{{par end}}

===Explanation===
{{rev begin}}
{{rev|since=c++17|
The noexcept-specification is a part of the function type and may appear as part of any {{rlp|function|function declarator}}.
}}
{{rev|until=c++17|
The noexcept-specification is not a part of the function type (just like {{rlp|except spec|dynamic exception specification}}) and can only appear as a part of a {{rlp|lambda|lambda declarator}} or a top-level {{rlp|function|function declarator}} when declaring functions, variables, non-static data members of type function, pointer to function, reference to function, or pointer to member function, and also when declaring a parameter or a return type in one of those declarations that in turn happens to be a pointer or reference to function. It cannot appear in a {{rlp|typedef}} or {{rlp|type alias}} declaration.
{{source|1=
void f() noexcept; // the function f() does not throw
void (*fp)() noexcept(false); // fp points to a function that may throw
void g(void pfa() noexcept);  // g takes a pointer to function that doesn't throw
// typedef int (*pf)() noexcept; // error
}}
}}
{{rev end}}

Every function in C++ is either ''non-throwing'' or ''potentially throwing''
* ''potentially-throwing'' functions are:

{{rev begin}}
{{rev|until=c++17|
:* functions declared with a {{rlp|except spec|dynamic exception specification}}.
}}
{{rev end}}
:* functions declared with noexcept specifier whose {{spar|expression}} evaluates to {{tt|false}}
:* functions declared without noexcept specifier except for
::* {{rlp|destructor}}s unless the destructor of any potentially-constructed base or member is ''potentially-throwing'' (see below)
::* {{rlp|default constructor}}s, {{rlp|copy constructor}}s, {{rlp|move constructor}}s,  defaulted on their first declaration unless 
:::* a constructor for a base or member that an the implicit definition of the constructor would call is ''potentially-throwing'' (see below)
:::* a subexpression of such an initialization, such as a default argument expression, is ''potentially-throwing'' (see below)
:::* a default member initializer (for default constructor only) is ''potentially-throwing'' (see below)
::* {{rlp|as operator|copy-assignment}} operators, {{rlp|move operator|move-assignment}} operators defaulted on their first declaration unless the invocation of any assignment operator in the implicit definition is ''potentially-throwing'' (see below)
::* [[cpp/memory/new/operator_delete|deallocation functions]]
* non-throwing functions are all others (those with noexcept specifier whose {{spar|expression}} evaluates to {{tt|true}} as well as destructors, defaulted special member functions, and deallocation functions)

{{rlp|function_template#Explicit_instantiation|Explicit instantiations}} may use the noexcept specifier, but it is not required. If used, the exception specification must be the same as for all other declarations. A diagnostic is required only if the exception specifications are not the same within a single translation unit.

Functions differing only in their exception specification cannot be overloaded {{rev inl|since=c++17|(just like the return type, exception specification is part of function type, but not not part of the function signature)}}.
{{source|1=
void f() noexcept;
void f(); // error: different exception specification
void g() noexcept(false);
void g(); // ok, both declarations for g are potentially-throwing
}}

Pointers to non-throwing functions are {{rev inl|since=c++17|{{rlp|implicit cast#Function_pointer_conversions|implicitly convertible}}}}{{rev inl|until=c++17|can be assigned to}} to pointers to potentially-throwing functions, but not the other way around.
{{source|1=
void ft(); // potentially-throwing
void (*fn)() noexcept = ft; // error
}}

If a virtual function is non-throwing, all declarations, including the definition, of every overrider must be non-throwing as well, unless the overrider is defined as deleted:
{{source|1=
struct B {
   virtual void f() noexcept;
   virtual void g();
   virtual void h() noexcept = delete;
};
struct D: B {
   void f();              // ill-formed: D::f is potentially-throwing, B::f is non-throwing
   void g() noexcept;     // OK
   void h() = delete;     // OK
};
}}

Non-throwing functions are permitted to call potentially-throwing functions. Whenever an exception is thrown and the search for a handler encounters the outermost block of a non-throwing function, the function {{lc|std::terminate}} is called:
{{source|
extern void f();  // potentially-throwing
void g() noexcept {
    f();      // valid, even if f throws
    throw 42; // valid, effectively a call to std::terminate
}
}}

{{rev begin}}
{{rev|since=c++14|
The exception specification of a function template specialization is not instantiated along with the function declaration; it is instantiated only when ''needed'' (as defined below).

The exception-specification of an implicitly-declared special member function is also evaluated only when needed (in particular, implicit declaration of a member function of a derived class does not require the exception-specification of a base member function to be instantiated)

When the noexcept-specification of a function template specialization is ''needed'', but hasn't yet been instantiated, the dependent names are looked up and any templates used in the {{spar|expression}} are instantiated as if for the declaration of the specialization.

A noexcept-specification of a function is considered to be ''needed'' in the following contexts
* in an expression, where the function is selected by overload resolution
* the function is {{rlp|definition#ODR-use|odr-used}}
* the function would be odr-used but appears in an unevaluated operand
{{source|1=
template&lt;class T&gt; T f() noexcept(sizeof(T) &lt; 4);
int main() {
    decltype(f&lt;void&gt;()) *p; // f unevaluated, but noexcept-spec is needed
}
}}
* the specification is needed to compare to another function declaration (e.g. on an virtual function overrider or on an explicit specialization of a function template)
* in a function definition
* the specification is needed because a defaulted special member function needs to check it in order to decide its own exception specification (this takes place only when the specification of the defaulted special member function is, itself, needed).
}}
{{rev end}}


Formal definition of ''potentially-throwing expression'' (used to determine the default exception specification of destructors, constructors, and assignment operators as described above):
{{rev begin}}
{{rev|until=c++17|
See {{rlp|except spec|dynamic exception specification}}.
}}
{{rev|since=c++17|
An expression {{tt|e}} is ''potentially-throwing'' if:
* {{tt|e}} is a function call to a ''potentially-throwing'' function or pointer to function
* {{tt|e}} makes an implicit call to a ''potentially-throwing'' function (such as an overloaded operator, an allocation function in a new-expression, a constructor for a function argument, or a destructor if {{tt|e}} is a full-expression)
* {{tt|e}} is a {{rlp|throw|throw-expression}}
* {{tt|e}} is a {{rlp|dynamic_cast}} that casts a polymorphic reference type 
* {{tt|e}} is a {{rlp|typeid}} expression applied to a dereferenced pointer to a polymorphic type
* {{tt|e}} has an immediate subexpression that is potentially-throwing

{{source|1=
struct A {
  A(int = (A(5), 0)) noexcept;
  A(const A&amp;) noexcept;
  A(A&amp;&amp;) noexcept;
  ~A();
};
struct B {
  B() throw();
  B(const B&amp;) = default; // implicit exception specification is noexcept(true)
  B(B&amp;&amp;, int = (throw Y(), 0)) noexcept;
  ~B() noexcept(false);
};
int n = 7;
struct D : public A, public B {
  int * p = new int[n];
  // D::D() potentially-throwing because of the new operator
  // D::D(const D&amp;) non-throwing
  // D::D(D&amp;&amp;) potentially-throwing: the default argument for B’s constructor may throw
  // D:: D() potentially-throwing

  // note; if A::~A() were virtual, this program would be ill-formed because an overrider
  // of a non-throwing virtual cannot be potentially-throwing
};
}}
}}
{{rev end}}

===Notes===
One of the uses of the constant {{spar|expression}} is (along with the [[cpp/language/noexcept|{{tt|noexcept}} operator]]) to define function templates that declare {{ttb|noexcept}} for some types but not others.

Note that a {{ttb|noexcept}} specification on a function is not a compile-time check; it is merely a method for a programmer to inform the compiler whether or not a function should throw exceptions.  The compiler can use this information to enable certain optimizations on non-throwing functions as well as enable the [[cpp/language/noexcept|{{tt|noexcept}} operator]], which can check at compile time if a particular expression is declared to throw any exceptions. For example, containers such as {{lc|std::vector}} will move their elements if the elements' move constructor is {{ttb|noexcept}}, and copy otherwise (unless the copy constructor is not accessible, but a potentially throwing move constructor is, in which case the strong exception guarantee is waived).

====Deprecates====
{{ttb|noexcept}} is an improved version of [[cpp/language/except_spec|{{c|throw()}}]], which is deprecated in C++11. Unlike pre-C++17 [[cpp/language/except_spec|{{c|throw()}}]], {{ttb|noexcept}} will not call {{lc|std::unexpected}} and may or may not unwind the stack, which potentially allows the compiler to implement {{ttb|noexcept}} without the runtime overhead of [[cpp/language/except_spec|{{c|throw()}}]]. As of C++17, {{c|throw()}} is redefined to be an exact equivalent of {{c|noexcept(true)}}.

===Defect reports===
{{dr list begin}}
{{dr list item | wg=cwg | dr=2039 | std=C++11 | before=only the expression before conversion is required to be constant| after= the conversion must also be valid in a constant expression}}
{{dr list end}}

===Keywords===
{{ltt|cpp/keyword/noexcept}}

===Example===
{{example
 | code=
// whether foo is declared noexcept depends on if the expression
// T() will throw any exceptions
template &lt;class T&gt;
  void foo() noexcept(noexcept(T())) {}

void bar() noexcept(true) {}
void baz() noexcept { throw 42; }  // noexcept is the same as noexcept(true)

int main() 
{
    foo&lt;int&gt;();  // noexcept(noexcept(int())) =&gt; noexcept(true), so this is fine

    bar();  // fine
    baz();  // compiles, but at runtime this calls std::terminate
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc noexcept}}
{{dsc inc | cpp/language/dsc except_spec}}
{{dsc inc | cpp/language/dsc throw}}
{{dsc inc | cpp/utility/dsc move_if_noexcept}}
{{dsc end}}

[[de:cpp/language/noexcept spec]]
[[es:cpp/language/noexcept spec]]
[[fr:cpp/language/noexcept spec]]
[[it:cpp/language/noexcept spec]]
[[ja:cpp/language/noexcept spec]]
[[pt:cpp/language/noexcept spec]]
[[ru:cpp/language/noexcept spec]]
[[zh:cpp/language/noexcept spec]]</text>
      <sha1>390tyl743u1ghr3ihxugmpzar16sesq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/nullptr</title>
    <ns>0</ns>
    <id>3537</id>
    <revision>
      <id>87869</id>
      <parentid>87865</parentid>
      <timestamp>2016-10-09T17:22:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 87865 by [[Special:Contributions/81.159.167.76|81.159.167.76]] ([[User talk:81.159.167.76|talk]]) -endl</comment>
      <text xml:space="preserve" bytes="1610">{{title|nullptr, the pointer literal}}
{{cpp/language/expressions/navbar}}

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|nullptr}}| notes={{mark since c++11}}}}
{{sdsc end}}

===Explanation===
The keyword {{tt|nullptr}} denotes the pointer literal. It is a [[cpp/language/value_category|prvalue]] of type {{lc|std::nullptr_t}}. There exist {{rlp|implicit_cast|implicit conversions}} from {{tt|nullptr}} to null pointer value of any pointer type and any pointer to member type. Similar conversions exist for any null pointer constant, which includes values of type {{lc|std::nullptr_t}} as well as the macro {{lc|NULL}}.

===Example===
{{example
 | Demonstrates how nullptr allows forwarding via a template function.
 | code=
#include &lt;cstddef&gt;
#include &lt;iostream&gt;

template&lt;class F, class A&gt;
void Fwd(F f, A a)
{
    f(a);
}

void g(int* i)
{
    std::cout &lt;&lt; &quot;Function g called\n&quot;;
}

int main()
{
    g(NULL);           // Fine
    g(0);              // Fine

    Fwd(g, nullptr);   // Fine
//  Fwd(g, NULL);  // ERROR: No function g(int)
}
| output=
Function g called
Function g called
Function g called
}}

===Keywords===
{{ltt|cpp/keyword/nullptr}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc inc | cpp/types/dsc nullptr_t}}
{{dsc end}}

[[de:cpp/language/nullptr]]
[[es:cpp/language/nullptr]]
[[fr:cpp/language/nullptr]]
[[it:cpp/language/nullptr]]
[[ja:cpp/language/nullptr]]
[[pt:cpp/language/nullptr]]
[[ru:cpp/language/nullptr]]
[[zh:cpp/language/nullptr]]

===References===
{{ref std c++11}}
{{ref std | section=4.10 | title=Pointer conversions | id=conv.ptr}}
{{ref std end}}</text>
      <sha1>61uxukcdxwe98jiuyds1sf6lnl29a0r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/object</title>
    <ns>0</ns>
    <id>13083</id>
    <revision>
      <id>90802</id>
      <parentid>88835</parentid>
      <timestamp>2017-03-10T18:47:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>P0298R3 - mentioning std::byte in object representation part</comment>
      <text xml:space="preserve" bytes="9237">{{title|Object}}
{{cpp/language/basics/navbar}}

C++ programs create, destroy, refer to, access, and manipulate ''objects''.

An object, in C++, is a ''region of storage'' that has
* size (can be determined with {{rlp|sizeof}});
* alignment requirement (can be determined with {{rlp|alignof}});
* {{rlp|storage duration}} (automatic, static, dynamic, thread-local);
* {{rlp|lifetime}} (bounded by storage duration or temporary);
* {{rlp|type}};
* value (which may be indeterminate, e.g. for {{rlp|default_initialization|default-initialized}} non-class types);
* optionally, a {{rlp|name}}.

The following entities are not objects: value, reference, function, enumerator, type, non-static class member, bit-field, template, class or function template specialization, namespace, parameter pack, and {{c|this}}.

A ''variable'' is an object or a reference that is not a non-static data member, that is introduced by a {{rlp|declarations|declaration}}.

Objects are created by {{rlp|definition}}s, {{rlp|new|new-expressions}}, {{rlp|throw|throw-expressions}}, when changing the active member of a {{rlp|union}}, and where {{rlp|lifetime#Temporary object lifetime|temporary objects}} are required.

===Object representation and value representation===
For an object of type {{tt|T}}, ''object representation'' is the sequence of {{c|sizeof(T)}} objects of type {{c|unsigned char}} (or, equivalently, {{ltt|cpp/types/byte|std::byte}}) beginning at the same address as the {{tt|T}} object.

The ''value representation'' of an object is the set of bits that hold the value of its type {{tt|T}}.

For {{concept|TriviallyCopyable}} types, value representation is a part of the object representation, which means that copying the bytes occupied by the object in the storage is sufficient to produce another object with the same value (except if the value is a ''trap representation'' of its type and loading it into the CPU raises a hardware exception, such as SNaN (&quot;signalling not-a-number&quot;) floating-point values or NaT (&quot;not-a-thing&quot;) integers).

The reverse is not necessarily true: two objects of {{concept|TriviallyCopyable}} type with different object representations may represent the same value. For example, multiple floating-point bit patterns represent the same special value [[cpp/numeric/math/NAN|NaN]]. More commonly, some bits of the object representation may not participate in the value representation at all; such bits may be padding introduced to satisfy {{rlp|object#Alignment|alignment requirements}}, {{rlp|bit field}} sizes, etc.

{{source|1=
#include &lt;cassert&gt;
struct S {
    char c;  // 1 byte value
             // 3 bytes padding
    float f; // 4 bytes value
    bool operator==(const S&amp; arg) const { // value-based equality
        return c == arg.c &amp;&amp; f == arg.f;
    }
};
assert(sizeof(S) == 8);
S s1 = {'a', 3.14};
S s2 = s1;
reinterpret_cast&lt;char*&gt;(&amp;s1)[2] = 'b'; // change 2nd byte
assert(s1 == s2); // value did not change
}}

For the objects of type {{c|char}}, {{c|signed char}}, and {{c|unsigned char}} (unless they are oversize {{rlp|bit field}}s), every bit of the object representation is required to participate in the value representation and each possible bit pattern represents a distinct value (no padding, trap bits, or multiple representations allowed).

===Subobjects===
An object can contain other objects, which are called ''subobjects''. These include
* member objects
* base class subobjects
* array elements
An object that is not a subobject of another object is called ''complete object''.

Complete objects, member objects, and array elements are also known as ''most derived objects'', to distinguish them from base class subobjects. The size of a ''most derived object'' that is not a {{rlp|bit field}} is required to be non-zero (the size of a base class subobject may be zero: see {{rlp|ebo|empty base optimization}}).

Any two objects with overlapping {{rlp|lifetime}}s (that are not {{rlp|bit field}}s) are guaranteed to have different addresses unless one of them is a subobject of another or provides storage for another, or if they are subobjects of different type within the same complete object, and one of them is a zero-size base.

{{source|1=static const char c1 = ’x’;
static const char c2 = ’x’;
assert(&amp;c1 != &amp;c2); // same values, different addresses
}}

===Polymorphic objects===
Objects of class type that declare or inherit at least one virtual function are polymorphic objects. Within each polymorphic object, the implementation stores additional information (in every existing implementation, it is one pointer unless optimized out), which is used by {{rlp|virtual|virtual function}} calls and by the RTTI features ({{rlp|dynamic_cast}} and {{rlp|typeid}}) to determine, at run time, the type with which the object was created, regardless of the expression it is used in.

For non-polymorphic objects, the interpretation of the value is determined from the expression in which the object is used, and is decided at compile time.

{{example
|code=
#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
struct Base1 {
    // polymorphic type: declares a virtual member
    virtual ~Base1() {}
};
struct Derived1 : Base1 {
     // polymorphic type: inherits a virtual member
};

struct Base2 {
     // non-polymorphic type
};
struct Derived2 : Base2 {
     // non-polymorphic type
};

int main()
{
    Derived1 obj1; // object1 created with type Derived1
    Derived2 obj2; // object2 created with type Derived2

    Base1&amp; b1 = obj1; // b1 refers to the object obj1
    Base2&amp; b2 = obj2; // b2 refers to the object obj2

    std::cout &lt;&lt; &quot;Expression type of b1: &quot; &lt;&lt; typeid(decltype(b1)).name() &lt;&lt; ' '
              &lt;&lt; &quot;Expression type of b2: &quot; &lt;&lt; typeid(decltype(b2)).name() &lt;&lt; '\n'
              &lt;&lt; &quot;Object type of b1: &quot; &lt;&lt; typeid(b1).name() &lt;&lt; ' '
              &lt;&lt; &quot;Object type of b2: &quot; &lt;&lt; typeid(b2).name() &lt;&lt; '\n'
              &lt;&lt; &quot;size of b1: &quot; &lt;&lt; sizeof b1 &lt;&lt; ' '
              &lt;&lt; &quot;size of b2: &quot; &lt;&lt; sizeof b2 &lt;&lt; '\n';
}
|output=
Expression type of b1: Base1 Expression type of b2: Base2
Object type of b1: Derived1 Object type of b2: Base2
size of b1: 8 size of b2: 1
}}

===Strict aliasing===
Accessing an object using an expression of a type other than the type with which it was created is undefined behavior in many cases, see {{rlp|reinterpret_cast#Type aliasing|reinterpret_cast}} for the list of exceptions and examples.

===Alignment===
Every {{rlp|type|object type}} has the property called ''alignment requirement'', which is an integer value (of type {{lc|std::size_t}}, always a power of 2) representing the number of bytes between successive addresses at which objects of this type can be allocated. The alignment requirement of a type can be queried with {{rlp|alignof}} or {{lc|std::alignment_of}}. The pointer alignment function {{lc|std::align}} can be used to obtain a suitably-aligned pointer within some buffer, and {{lc|std::aligned_storage}} can be used to obtain suitably-aligned storage.

Each object type imposes its alignment requirement on every object of that type; stricter alignment (with larger alignment requirement) can be requested using {{rlp|alignas}}.

In order to satisfy alignment requirements of all non-static members of a {{rlp|class}}, ''padding'' may be inserted after some of its members.

{{example|code=
#include &lt;iostream&gt;

// objects of type S can be allocated at any address
// because both S.a and S.b can be allocated at any address
struct S {
  char a; // size: 1, alignment: 1
  char b; // size: 1, alignment: 1
}; // size: 2, alignment: 1

// objects of type X must be allocated at 4-byte boundaries
// because X.n must be allocated at 4-byte boundaries
// because int's alignment requirement is (usually) 4
struct X {
  int n;  // size: 4, alignment: 4
  char c; // size: 1, alignment: 1
  // three bytes padding
}; // size: 8, alignment: 4 

int main()
{
    std::cout &lt;&lt; &quot;sizeof(S) = &quot; &lt;&lt; sizeof(S)
              &lt;&lt; &quot; alignof(S) = &quot; &lt;&lt; alignof(S) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;sizeof(X) = &quot; &lt;&lt; sizeof(X)
              &lt;&lt; &quot; alignof(X) = &quot; &lt;&lt; alignof(X) &lt;&lt; '\n';
}
|output=
sizeof(S) = 2 alignof(S) = 1
sizeof(X) = 8 alignof(X) = 4
}}

The weakest alignment (the smallest alignment requirement) is the alignment of {{c|char}}, {{c|signed char}}, and {{c|unsigned char}}, which equals 1&lt;!-- because there is no padding between chars in arrays of char --&gt;; the largest ''fundamental alignment'' of any type is the alignment of {{lc|std::max_align_t}}. If a type's alignment is made stricter (larger) than {{lc|std::max_align_t}} using {{rlp|alignas}}, it is known as a type with ''extended alignment'' requirement. A type whose alignment is extended or a class type whose non-static data member has extended alignment is an ''over-aligned type''. It is implementation-defined if {{rlp|new|new-expression}}, {{lc|std::allocator::allocate}}, and {{lc|std::get_temporary_buffer}} support over-aligned types. {{concept|Allocator}}s instantiated with over-aligned types are allowed to fail to instantiate at compile time, to throw {{lc|std::bad_alloc}} at runtime, to silently ignore unsupported alignment requirement, or to handle them correctly.

===See also===
{{dsc begin}}
{{dsc see c | c/language/object}}
{{dsc end}}</text>
      <sha1>q96t0iirmqguwmrtky26qkuxqzvwv24</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/objects</title>
    <ns>0</ns>
    <id>13087</id>
    <redirect title="cpp/language/object" />
    <revision>
      <id>66415</id>
      <timestamp>2013-11-21T14:28:08Z</timestamp>
      <contributor>
        <username>ArbyCoder</username>
        <id>2649</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/object]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/language/object]]</text>
      <sha1>kmjxbvjvzltmq6y8ch3jscz0szwayhb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator alternative</title>
    <ns>0</ns>
    <id>702</id>
    <revision>
      <id>90456</id>
      <parentid>90452</parentid>
      <timestamp>2017-02-23T17:27:17Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 90452 by [[Special:Contributions/131.155.220.25|131.155.220.25]] ([[User talk:131.155.220.25|talk]])</comment>
      <text xml:space="preserve" bytes="4821">{{title|Alternative operator representations}}
{{cpp/language/expressions/navbar}}

C++ (and C) source code may be written in any non-ASCII 7-bit character set that includes the [[enwiki:ISO 646|ISO 646:1983]] invariant character set. However, several C++ operators and punctuators require characters that are outside of the ISO 646 codeset: {{tt|{, }, [, ], #, \, ^, {{!}}, ~}}. To be able to use character encodings where some or all of these symbols do not exist (such as the German [http://de.wikipedia.org/wiki/DIN_66003 DIN 66003]), C++ defines the following alternatives composed of ISO 646 compatible characters.

==Alternative tokens==

There are alternative spellings for several operators and other tokens that use non-ISO646 characters. In all respects of the language, each alternative token behaves exactly the same as its primary token, except for its spelling (the [[cpp/preprocessor/replace|stringification operator]] can make the spelling visible). The two-letter alternative tokens are sometimes called &quot;digraphs&quot;

{| class=&quot;wikitable&quot;
|-
! Primary
! Alternative
|-
| {{tt|&amp;&amp;}}
| {{tt|and}}
|-
| {{tt|&amp;{{=}}}}
| {{tt|and_eq}}
|-
| {{tt|&amp;}}
| {{tt|bitand}}
|-
| {{tt|&amp;#124;}}
| {{tt|bitor}}
|-
| {{tt|~}}
| {{tt|compl}}
|-
| {{tt|!}}
| {{tt|not}}
|-
| {{tt|!{{=}}}}
| {{tt|not_eq}}
|-
| {{tt|&amp;#124;&amp;#124;
| {{tt|or
|-
| {{tt|&amp;#124;{{=}}}}
| {{tt|or_eq}}
|-
| {{tt|^}}
| {{tt|xor}}
|-
| {{tt|^{{=}}}}
| {{tt|xor_eq}}
|-
| {{tt|{}} || {{tt|&lt;%}}
|-
| {{tt|} }} || {{tt|%&gt;}}
|-
| {{tt|[}} || {{tt|&lt;:}}
|-
| {{tt|]}} || {{tt|:&gt;}}
|-
| {{tt|#}} || {{tt|%:}}
|-
| {{tt|##}} || {{tt|%:%:}}
|}

{{rev begin}}
{{rev|since=c++11|
When the parser encounters the character sequence {{c|&lt;::}} and the subsequent character is neither {{c|:}} nor {{c|&gt;}}, the {{c|&lt;}} is treated as a preprocessing token by itself and not as the first character of the alternative token {{c|&lt;:}}. Thus {{c|std::vector&lt;::std::string&gt;}} won't be wrongly treated as {{c|std::vector[:std::string&gt;}}.
}}
{{rev end}}

====Notes====
The characters {{c|&amp;}} and {{c|!}} are invariant under ISO-646, but alternatives are provided for the tokens that use these characters anyway to accomodate even more restrictive historical charsets&lt;!-- best reference found so far &quot;The Danish delegation did not, in fact, have a way of representing those characters on their terminals&quot; from https://groups.google.com/d/msg/comp.std.c/eYbj0lCIvn4/89oK8U6JpqEJ , but it doesn't specifically call out &amp; and ! --&gt;.

There is no alternative spelling (such as {{c|eq}}) for the equality operator {{c|{{==}}}} because the character {{c|{{=}}}} was present in all supported charsets.

===Compatibility with C===
The same words are defined in the C programming language in the include file {{c|&lt;iso646.h&gt;}} as macros. Because in C++ these are built into the language, the C++ version of {{c|&lt;iso646.h&gt;}}, as well as {{c|&lt;ciso646&gt;}}, does not define anything.

==Trigraphs {{mark until c++17}}==

The following three-character groups (trigraphs) are {{rlp|translation_phases|parsed before comments and string literals are recognized}}, and each appearance of a trigraph is replaced by the corresponding primary character:

{| class=&quot;wikitable&quot;
|- style=&quot;text-align: left;&quot;
! Primary
! Trigraph
|-
| {{tt|{}} || {{tt|??&lt;}}
|-
| {{tt|}}} || {{tt|??&gt;}}
|-
| {{tt|[}} || {{tt|??(}}
|-
| {{tt|]}} || {{tt|??)}}
|-
| {{tt|#}} || {{tt|??{{=}}}}
|-
| {{tt|\}} || {{tt|??/}}
|-
| {{tt|^}} || {{tt|??'}}
|-
| {{tt|&lt;nowiki&gt;|&lt;/nowiki&gt;}} || {{tt|??!}}
|-
| {{tt|~}} || {{tt|??-}}
|}

Because trigraphs are processed early, a comment such as {{c|// Will the next line be executed?????/}} will effectively comment out the following line, and the string literal such as {{c|&quot;Enter date ??/??/??&quot;}} is parsed as {{c|&quot;Enter date \\??&quot;}}.

===Keywords===

{{ltt|cpp/keyword/and}},
{{ltt|cpp/keyword/and_eq}},
{{ltt|cpp/keyword/bitand}},
{{ltt|cpp/keyword/bitor}},
{{ltt|cpp/keyword/compl}},
{{ltt|cpp/keyword/not}},
{{ltt|cpp/keyword/not_eq}},
{{ltt|cpp/keyword/or}},
{{ltt|cpp/keyword/or_eq}},
{{ltt|cpp/keyword/xor}},
{{ltt|cpp/keyword/xor_eq}}

===Example===

{{example
 | The following example demonstrates the use of several alternative tokens.
 | code=
%:include &lt;iostream&gt;

int main(int argc, char *argv&lt;::&gt;) 
&lt;%
    if (argc &gt; 1 and argv&lt;:1:&gt; not_eq NULL) &lt;%
        std::cout &lt;&lt; &quot;Hello, &quot; &lt;&lt; argv&lt;:1:&gt; &lt;&lt; '\n';
    %&gt;
%&gt;
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/operator_alternative | Alternative operator representations}}
{{dsc end}}

[[de:cpp/language/operator alternative]]
[[es:cpp/language/operator alternative]]
[[fr:cpp/language/operator alternative]]
[[it:cpp/language/operator alternative]]
[[ja:cpp/language/operator alternative]]
[[pt:cpp/language/operator alternative]]
[[ru:cpp/language/operator alternative]]
[[zh:cpp/language/operator alternative]]</text>
      <sha1>bwhyvkupvv9kpai2tsgs4ehq8ui8o6h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator arithmetic</title>
    <ns>0</ns>
    <id>703</id>
    <revision>
      <id>91991</id>
      <parentid>91898</parentid>
      <timestamp>2017-04-01T05:38:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="22803">{{title|Arithmetic operators}}
{{cpp/language/expressions/navbar}}
Returns the result of specific arithmetic operation.

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|-
! rowspan=&quot;2&quot; | Operator name
! rowspan=&quot;2&quot; | Syntax
! rowspan=&quot;2&quot; | {{rlp|operators|Over&amp;#8203;load&amp;#8203;able}}
! colspan=&quot;2&quot; | Prototype examples (for {{c|class T}})
|-
! Inside class definition
! Outside class definition
|-
| unary plus
| {{tt|+a}}
| {{yes}}
| {{c|T T::operator+() const;}}
| {{c|T operator+(const T &amp;a);}}
|-
| unary minus
| {{tt|-a}}
| {{yes}}
| {{c|T T::operator-() const;}}
| {{c|T operator-(const T &amp;a);}}
|-
| addition
| {{tt|a + b}}
| {{yes}}
| {{c|T T::operator+(const T2 &amp;b) const;}}
| {{c|T operator+(const T &amp;a, const T2 &amp;b);}}
|-
| subtraction 
| {{tt|a - b}}
| {{yes}}
| {{c|T T::operator-(const T2 &amp;b) const;}}
| {{c|T operator-(const T &amp;a, const T2 &amp;b);}}
|-
| multiplication
| {{tt|a * b}}
| {{yes}}
| {{c|T T::operator*(const T2 &amp;b) const;}}
| {{c|T operator*(const T &amp;a, const T2 &amp;b);}}
|-
| division 
| {{tt|a / b}}
| {{yes}}
| {{c|T T::operator/(const T2 &amp;b) const;}}
| {{c|T operator/(const T &amp;a, const T2 &amp;b);}}
|-
| modulo 
| {{tt|a % b}}
| {{yes}}
| {{c|T T::operator%(const T2 &amp;b) const;}}
| {{c|T operator%(const T &amp;a, const T2 &amp;b);}}
|-
| bitwise NOT
| {{tt|~a}}
| {{yes}}
| {{c|T T::operator~() const;}}
| {{c|T operator~(const T &amp;a);}}
|-
| bitwise AND 
| {{tt|a &amp; b}}
| {{yes}}
| {{c|T T::operator&amp;(const T2 &amp;b) const;}}
| {{c|T operator&amp;(const T &amp;a, const T2 &amp;b);}}
|-
| bitwise OR 
| {{tt|a &amp;#124; b}}
| {{yes}}
| {{c|T T::operator{{!}}(const T2 &amp;b) const;}}
| {{c|T operator{{!}}(const T &amp;a, const T2 &amp;b);}}
|-
| bitwise XOR 
| {{tt|a ^ b}}
| {{yes}}
| {{c|T T::operator^(const T2 &amp;b) const;}}
| {{c|T operator^(const T &amp;a, const T2 &amp;b);}}
|-
| bitwise left shift 
| {{tt|a &lt;&lt; b}}
| {{yes}}
| {{c|T T::operator&lt;&lt;(const T2 &amp;b) const;}}
| {{c|T operator&lt;&lt;(const T &amp;a, const T2 &amp;b);}}
|-
| bitwise right shift 
| {{tt|a &gt;&gt; b}}
| {{yes}}
| {{c|T T::operator&gt;&gt;(const T2 &amp;b) const;}}
| {{c|T operator&gt;&gt;(const T &amp;a, const T2 &amp;b);}}
|-
| colspan=&quot;5&quot; |
:'''Notes'''&lt;br&gt;
* All built-in operators return values, and most {{rlp|operators|user-defined overloads}} also return values so that the user-defined operators can be used in the same manner as the built-ins. However, in a user-defined operator overload, any type can be used as return type (including {{c|void}}). In particular, stream insertion and stream extraction overloads of {{tt|operator&lt;&lt;}} and {{tt|operator&gt;&gt;}} return {{tt|T&amp;}}.
* {{tt|T2}} can be any type including {{tt|T}}
|}

===Explanation===

All arithmetic operators compute the result of specific arithmetic operation and returns its result. The arguments are not modified.

====Conversions====
If the operand passed to an arithmetic operator is integral or unscoped enumeration type, then before any other action (but after lvalue-to-rvalue conversion, if applicable), the operand undergoes [[cpp/language/implicit_cast#Integral_promotion|integral promotion]]. If an operand has array or function type, array-to-pointer and function-to-pointer conversions are applied.

For the binary operators (except shifts), if the promoted operands have different types, additional set of implicit conversions is applied, known as ''usual arithmetic conversions'' with the goal to produce the ''common type'' (also accessible via the {{lc|std::common_type}} type trait)

* If either operand has scoped enumeration type, no conversion is performed: the other operand and the return type must have the same type

* Otherwise, if either operand is {{c|long double}}, the other operand is converted to {{c|long double}}

* Otherwise, if either operand is {{c|double}}, the other operand is converted to {{c|double}}

* Otherwise, if either operand is {{c|float}}, the other operand is converted to {{c|float}}

* Otherwise, the operand has integer type (because bool, char, char16_t, char32_t, wchar_t, and unscoped enumeration were promoted at this point) and [[cpp/language/implicit_cast#integral conversions|integral conversions]] are applied to produce the common type, as follows:

:* If both operands are signed or both are unsigned, the operand with lesser ''conversion rank'' is converted to the operand with the greater integer conversion rank

:* Otherwise, if the unsigned operand's conversion rank is greater or equal to the conversion rank of the signed operand, the signed operand is converted to the unsigned operand's type.

:* Otherwise, if the signed operand's type can represent all values of the unsigned operand, the unsigned operand is converted to the signed operand's type

:* Otherwise, both operands are converted to the unsigned counterpart of the signed operand's type.

The ''conversion rank'' above increases in order {{c|bool}}, {{c|signed char}}, {{c|short}}, {{c|int}}, {{c|long}}, {{c|long long}}. The rank of any unsigned type is equal to the rank of the corresponding signed type. The rank of {{c|char}} is equal to the rank of {{c|signed char}} and {{c|unsigned char}}. The ranks of {{c|char16_t}}, {{c|char32_t}}, and {{c|wchar_t}} are equal to the ranks of their underlying types.

====Overflows====
Unsigned integer arithmetic is always performed {{math|modulo 2{{su|p=n}}}} where n is the number of bits in that particular integer. E.g. for {{c|unsigned int}}, adding one to {{lc|UINT_MAX}} gives {{c|0}}, and subtracting one from {{c|0}} gives {{lc|UINT_MAX}}.

When signed integer arithmetic operation overflows (the result does not fit in the result type), the behavior is undefined: it may wrap around according to the rules of the representation (typically 2's complement), it may trap on some platforms or due to compiler options (e.g. {{tt|-ftrapv}} in GCC and Clang), or may be completely [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html optimized out by the compiler].

====Floating-point environment====
If {{ltt|cpp/preprocessor/impl|#pragma STDC FENV_ACCESS}} is supported and set to {{tt|ON}}, all floating-point arithmetic operators obey the current floating-point [[cpp/numeric/fenv/FE_round|rounding direction]] and report floating-point arithmetic errors as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]] unless part of a [[cpp/language/initialization#Non-local_variables|static initializer]] (in which case floating-point exceptions are not raised and the rounding mode is to nearest)

====Floating-point contraction====
Unless {{ltt|cpp/preprocessor/impl|#pragma STDC FP_CONTRACT}} is supported and set to {{tt|OFF}}, all floating-point arithmetic may be performed as if the intermediate results have infinite range and precision, that is, optimizations that omit rounding errors and floating-point exceptions are allowed. For example, C++ allows the implementation of {{c|(x*y) + z}} with a single fused multiply-add CPU instruction or optimization of {{c|1=a = x*x*x*x;}} as {{c|1=tmp = x *x; a = tmp*tmp}}. {{mark unreviewed dr|LWG}}&lt;!-- confirmed in 2016 by LWG 238 --&gt;

Unrelated to contracting, intermediate results of floating-point arithmetic may have range and precision that is different from the one indicated by its type, see {{lc|FLT_EVAL_METHOD}}

Formally, the C++ standard makes no guarantee on the accuracy of floating-point operations.

====Unary arithmetic operators====
For every promoted arithmetic type {{tt|A}} and for every type {{tt|T}}, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | A operator+(A)}}
{{dcl | T* operator+(T*)}}
{{dcl | A operator-(A)}} 
{{dcl end}}

The builtin unary plus operator returns the value of its operand. The only situation where it is not a no-op is when the operand has integral type or unscoped enumeration type, which is changed by integral promotion, e.g, it converts {{c|char}} to {{c|int}} or if the operand is subject to lvalue-to-rvalue, array-to-pointer, or function-to-pointer conversion.

The builtin unary minus operator calculates the negative of its promoted operand. For unsigned {{tt|a}}, the value of {{tt|-a}} is {{math|2{{su|p=b}}-a}}, where {{tt|b}} is the number of bits after promotion.

{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    char c = 0x6a;
    int n1 = 1;
    unsigned char n2 = 1;
    unsigned int n3 = 1;
    std::cout &lt;&lt; &quot;char: &quot; &lt;&lt; c &lt;&lt; &quot; int: &quot; &lt;&lt; +c &lt;&lt; '\n'
              &lt;&lt; &quot;-1, where 1 is signed: &quot; &lt;&lt; -n1 &lt;&lt; '\n'
              &lt;&lt; &quot;-1, where 1 is unsigned char: &quot; &lt;&lt; -n2 &lt;&lt; '\n'
              &lt;&lt; &quot;-1, where 1 is unsigned int: &quot; &lt;&lt; -n3 &lt;&lt; '\n';
    char a[3];
    std::cout &lt;&lt; &quot;size of array: &quot; &lt;&lt; sizeof a &lt;&lt; '\n'
              &lt;&lt; &quot;size of pointer: &quot; &lt;&lt; sizeof +a &lt;&lt; '\n';
}
 | output=
char: j int: 106
-1, where 1 is signed: -1
-1, where 1 is unsigned char: -1
-1, where 1 is unsigned int: 4294967295
size of array: 3
size of pointer: 8
}}

====Additive operators====
For every pair of promoted arithmetic types {{tt|L}} and {{tt|R}} and for every object type {{tt|T}}, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | LR operator+(L, R)}}
{{dcl | LR operator-(L, R)}}
{{dcl | T* operator+(T*, std::ptrdiff_t)}}
{{dcl | T* operator+(std::ptrdiff_t, T*)}}
{{dcl | T* operator-(T*, std::ptrdiff_t)}}
{{dcl | std::ptrdiff_t operator-(T*, T*)}}
{{dcl end}}
where {{tt|LR}} is the result of usual arithmetic conversions on {{tt|L}} and {{tt|R}}

With operands of arithmetic or enumeration type, the result of binary plus is the sum of the operands (after usual arithmetic converesions), and the result of the binary minus operator is the result of subtracting the second operand from the first (after usual arithmetic conversions), except that, if the type supports IEEE floating-point arithmetic (see {{lc|std::numeric_limits::is_iec559}}),
:* if one operand is NaN, the result is NaN
:* infinity minus infinity is NaN and {{lc|FE_INVALID}} is raised
:* infinity plus the negative infinity is NaN and {{lc|FE_INVALID}} is raised

If any of the operands is a pointer, the following rules apply:
* A pointer to non-array object is treated as a pointer to the first element of an array with size 1.
* If the pointer {{tt|P}} points to the {{tt|i}}th element of an array, then the expressions {{tt|P+n}}, {{tt|n+P}}, and {{tt|P-n}} are pointers of the same type that point to the {{tt|i+n}}th, {{tt|i+n}}th, and {{tt|i-n}}th element of the same array, respectively. The result of pointer addition may also be a one-past-the-end pointer (that is, pointer {{tt|P}} such that the expression {{tt|P-1}} points to the last element of the array). Any other situations (that is, attempts to generate a pointer that isn't pointing at an element of the same array or one past the end) invoke undefined behavior.
* If the pointer {{tt|P}} points to the {{tt|i}}th element of an array, and the pointer {{tt|Q}} points at the {{tt|j}}th element of the same array, the expression {{tt|P-Q}} has the value {{c|i-j}}, if the value fits in {{lc|std::ptrdiff_t}}. Both operands must point to the elements of the same array (or one past the end), otherwise the behavior is undefined. If the result does not fit in {{lc|std::ptrdiff_t}}, the behavior is undefined.
* In any case, if the pointed-to type is different from the array element type, disregarding cv qualifications, at every level if the elements are themselves pointers, the behavior of pointer arithmetic is undefined. In particular, pointer arithmetic with pointer to base, which is pointing at an element of an array of derived objects is undefined.
* If the value {{c|0}} is added or subtracted from a pointer, the result is the pointer, unchanged. If two pointers point at the same object or are both one past the end of the same array, or both are null pointers, then the result of subtraction is equal to {{c|(std::ptrdiff_t)0}}.
These pointer arithmetic operators allow pointers to satisfy the {{concept|RandomAccessIterator}} concept.

{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    char c = 2;
    unsigned int un = 2;
    int  n = -10;
    std::cout &lt;&lt;  &quot; 2 + (-10), where 2 is a char    = &quot; &lt;&lt; c + n &lt;&lt; '\n'
              &lt;&lt;  &quot; 2 + (-10), where 2 is unsigned  = &quot; &lt;&lt; un + n &lt;&lt; '\n'
              &lt;&lt;  &quot; -10 - 2.12  = &quot; &lt;&lt; n - 2.12 &lt;&lt; '\n';

    char a[4] = {'a', 'b', 'c', 'd'};
    char* p = &amp;a[1];
    std::cout &lt;&lt; &quot;Pointer addition examples: &quot; &lt;&lt; *p &lt;&lt; *(p + 2)
              &lt;&lt; *(2 + p) &lt;&lt; *(p - 1) &lt;&lt; '\n';
    char* p2 = &amp;a[4];
    std::cout &lt;&lt; &quot;Pointer difference: &quot; &lt;&lt; p2 - p &lt;&lt; '\n';
}
 | output=
 2 + (-10), where 2 is a char    = -8
 2 + (-10), where 2 is unsigned  = 4294967288
 -10 - 2.12  = -12.12
Pointer addition examples: bdda
Pointer difference: 3
}}

====Multiplicative operators====

For every pair of promoted arithmetic types {{tt|LA}} and {{tt|RA}} and for every pair of promoted integral types {{tt|LI}} and {{tt|RI}} the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | LRA operator*(LA, RA)}}
{{dcl | LRA operator/(LA, RA)}}
{{dcl | LRI operator%(LI, RI)}}
{{dcl end}}
where {{tt|LRx}} is the result of usual arithmetic conversions on {{tt|Lx}} and {{tt|Rx}}

The binary operator * performs multiplication of its operands (after usual arithmetic conversions), except that, for floating-point multiplication,
* multiplication of a NaN by any number gives NaN
* multiplication if infinity by zero gives NaN and {{lc|FE_INVALID}} is raised

The binary operator / divides the first operand by the second (after usual arithmetic conversions).

For integral operands, it yields the algebraic quotient.
{{rev begin}}
{{rev | until=c++11 | The quotient is rounded in implementation-defined direction. }}
{{rev | since=c++11 | The quotient is truncated towards zero (fractional part is discarded).}}
{{rev end}}

If the second operand is zero, the behavior is undefined, except that if floating-point division is taking place and the type supports IEEE floating-point arithmetic (see {{lc|std::numeric_limits::is_iec559}}), then:
* if one operand is NaN, the result is NaN
* dividing a non-zero number by ±0.0 gives the correctly-signed infinity and {{lc|FE_DIVBYZERO}} is raised
* dividing 0.0 by 0.0 gives NaN and {{lc|FE_INVALID}} is raised

The binary operator % yields the remainder of the integer division of the first operand by the second (after usual arithmetic conversions; note that the operand types must be integral types). If the quotient {{tt|a/b}} is representable in the result type, {{c|1=(a/b)*b + a%b == a}}. If the second operand is zero, the behavior is undefined. If the quotient {{tt|a/b}} is not representable in the result type, the behavior of both {{tt|a/b}} and {{tt|a%b}} is undefined (that means {{c|INT_MIN%-1}} is undefined on 2's complement systems)

Note: Until C++11, if one or both operands to binary operator % were negative, the sign of the remainder was implementation-defined, as it depends on the rounding direction of integer division. The function {{lc|std::div}} provided well-defined behavior in that case.

Note: for floating-point remainder, see {{lc|std::remainder}} and {{lc|std::fmod}}.

{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    char c = 2;
    unsigned int un = 2;
    int  n = -10;
    std::cout &lt;&lt;  &quot;2 * (-10), where 2 is a char    = &quot; &lt;&lt; c * n &lt;&lt; '\n'
              &lt;&lt;  &quot;2 * (-10), where 2 is unsigned  = &quot; &lt;&lt; un * n &lt;&lt; '\n'
              &lt;&lt;  &quot;-10 / 2.12  = &quot; &lt;&lt; n / 2.12 &lt;&lt; '\n'
              &lt;&lt;  &quot;-10 / 21  = &quot; &lt;&lt; n / 21 &lt;&lt; '\n'
              &lt;&lt;  &quot;-10 % 21  = &quot; &lt;&lt; n % 21 &lt;&lt; '\n';
}
 | output=
2 * (-10), where 2 is a char    = -20
2 * (-10), where 2 is unsigned  = 4294967276
-10 / 2.12  = -4.71698
-10 / 21  = 0
-10 % 21  = -10
}}

====Bitwise logic operators====
For every pair of promoted integral types {{tt|L}} and {{tt|R}} the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl |R operator~(R)}}
{{dcl |LR operator&amp;(L, R)}}
{{dcl |LR operator^(L, R)}}
{{dcl |LR operator{{!}}(L, R)}}
{{dcl end}}
where {{tt|LR}} is the result of usual arithmetic conversions on {{tt|L}} and {{tt|R}}

The result of operator~ is the bitwise NOT (one's complement) value of the argument (after promotion). The result of operator&amp; is the bitwise AND value of the operands (after usual arithmetic conversions). The result of operator| is the bitwise OR value of the operands (after usual arithmetic conversions). The result of operator^ is the bitwise XOR value of the operands (after usual arithmetic conversions)

{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;
    uint16_t mask = 0x00f0;
    uint32_t a = 0x12345678;
    std::cout &lt;&lt; &quot;Value: &quot; &lt;&lt; a &lt;&lt; &quot; mask: &quot; &lt;&lt; mask &lt;&lt; '\n'
              &lt;&lt; &quot;Setting bits: &quot; &lt;&lt; (a {{!}} mask) &lt;&lt; '\n'
              &lt;&lt; &quot;Clearing bits: &quot; &lt;&lt; (a &amp; ~mask) &lt;&lt; '\n'
              &lt;&lt; &quot;Selecting bits: &quot; &lt;&lt; (a &amp; mask) &lt;&lt; '\n';
}
 | output=
Value: 0x12345678 mask: 0xf0
Setting bits: 0x123456f8
Clearing bits: 0x12345608
Selecting bits: 0x70
}}

====Bitwise shift operators====
For every pair of promoted integral types {{tt|L}} and {{tt|R}}, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | L operator&lt;&lt;(L, R)}}
{{dcl | L operator&gt;&gt;(L, R)}} 
{{dcl end}}
The operands of the built-in bitwise shift operators have either integral types or unscoped enumeration type. Integral promotions are performed on both operands before evaluation. The return type is the type of the left operand after integral promotions. 

For unsigned and positive {{tt|a}}, the value of {{tt|a &lt;&lt; b}} is the value of {{math|a * 2{{su|p=b}}}}, reduced modulo maximum value of the return type plus 1 (that is, bitwise left shift is performed and the bits that get shifted out of the destination type are discarded). 

For signed and positive {{tt|a}},
{{rev begin}}
{{rev|until=c++14| the value of {{tt|a &lt;&lt; b}} is {{math|a * 2{{su|p=b}}}} if it is representable the return type, otherwise the behavior is undefined.}}
{{rev|since=c++14| the value of {{tt|a &lt;&lt; b}} is {{math|a * 2{{su|p=b}}}} if it is representable in the unsigned version of the return type (which is then {{rlp|implicit_cast#Integral_conversions|converted}} to signed: this makes it legal to create {{lc|INT_MIN}} as {{c|1&lt;&lt;31}}), otherwise the behavior is undefined.}}{{mark unreviewed dr|CWG|1457}}
{{rev end}}

For negative {{tt|a}}, the behavior of {{tt|a &lt;&lt; b}} is undefined. 

For unsigned {{tt|a}} and for signed {{tt|a}} with nonnegative values, the value of {{tt|a &gt;&gt; b}} is the integer part of {{math|a/2{{su|p=b}}}}. For negative {{tt|a}}, the value of {{tt|a &gt;&gt; b}} is implementation-defined (in most implementations, this performs arithmetic right shift, so that the result remains negative).

In any case, if the value of the right operand is negative or is greater or equal to the number of bits in the promoted left operand, the behavior is undefined.

{{example
 |
 | code=
#include &lt;iostream&gt;
enum {ONE=1, TWO=2};
int main()
{
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;
    char c = 0x10;
    unsigned long long ull = 0x123;
    std::cout &lt;&lt; &quot;0x123 &lt;&lt; 1 = &quot; &lt;&lt; (ull &lt;&lt; 1) &lt;&lt; '\n'
              &lt;&lt; &quot;0x123 &lt;&lt; 63 = &quot; &lt;&lt; (ull &lt;&lt; 63) &lt;&lt; '\n' // overflow in unsigned
              &lt;&lt; &quot;0x10 &lt;&lt; 10 = &quot; &lt;&lt; (c &lt;&lt; 10) &lt;&lt; '\n';   // char is promoted to int
    long long ll = -1000;
    std::cout &lt;&lt; std::dec &lt;&lt; &quot;-1000 &gt;&gt; 1 = &quot; &lt;&lt; (ll &gt;&gt; ONE) &lt;&lt; '\n';
}
 | output=
0x123 &lt;&lt; 1 = 0x246
0x123 &lt;&lt; 63 = 0x8000000000000000
0x10 &lt;&lt; 10 = 0x4000
-1000 &gt;&gt; 1 = -500
}}

===Standard library===
Arithmetic operators are overloaded for many standard library types.

====Unary arithmetic operators====
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith2}}
{{dsc inc | cpp/numeric/valarray/dsc operator_arith}}
{{dsc end}}

====Additive operators====
{{dsc begin}}
{{dsc inc | cpp/chrono/time_point/dsc operator_arith2}}
{{dsc inc | cpp/string/basic_string/dsc operator+}}
{{dsc mem fun | cpp/iterator/reverse_iterator/operator_arith | title=operator+&lt;br&gt;operator- | advances or decrements the iterator }}
{{dsc mem fun | cpp/iterator/move_iterator/operator_arith | title=operator+&lt;br/&gt;operator- | advances or decrements the iterator }}
{{dsc inc | cpp/numeric/complex/dsc operator_arith3}}
{{dsc inc | cpp/numeric/valarray/dsc operator_arith3}}
{{dsc end}}

====Multiplicative operators====
{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith4}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith3}}
{{dsc inc | cpp/numeric/valarray/dsc operator_arith3}}
{{dsc end}}

====Bitwise logic operators====
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic2}}
{{dsc mem fun | cpp/numeric/valarray/operator_arith | title=operator~ | applies a unary arithmetic operator to each element of the valarray}}
{{dsc tfun | cpp/numeric/valarray/operator_arith3 | title=operator^&lt;br&gt;operator&amp;&lt;br&gt;operator{{!}}| applies binary operators to each element of two valarrays, or a valarray and a value }}
{{dsc end}}

====Bitwise shift operators====
{{dsc begin}}
{{dsc tfun | cpp/numeric/valarray/operator_arith3 | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | applies binary operators to each element of two valarrays, or a valarray and a value }}
{{dsc mem fun | cpp/utility/bitset/operator_ltltgtgt | title=operator&lt;&lt;&lt;br&gt;operator&gt;&gt; | performs binary shift left and shift right}}
{{dsc end}}

====Stream insertion/extraction operators====
Throughout the standard library, bitwise shift operators are commonly overloaded with I/O stream ({{c|std::ios_base&amp;}} or one of the classes derived from it) as both the left operand and return type. Such operators are known as ''stream insertion'' and ''stream extraction'' operators:

{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt2}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt2}}
{{dsc inc | cpp/numeric/complex/dsc operator_ltltgtgt}}
{{dsc inc | cpp/utility/bitset/dsc operator_ltltgtgt2}}
{{dsc inc | cpp/string/basic_string/dsc operator_ltltgtgt}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_ltltgtgt |linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | uniform_int_distribution}}
{{dsc end}}

===See also===

[[cpp/language/operator precedence | Operator precedence]]

[[cpp/language/operators | Operator overloading]]

{{cpp/language/operators}}

[[de:cpp/language/operator arithmetic]]
[[es:cpp/language/operator arithmetic]]
[[fr:cpp/language/operator arithmetic]]
[[it:cpp/language/operator arithmetic]]
[[ja:cpp/language/operator arithmetic]]
[[pt:cpp/language/operator arithmetic]]
[[ru:cpp/language/operator arithmetic]]
[[zh:cpp/language/operator arithmetic]]</text>
      <sha1>it1osi2iyp29iwy73yhxfcdq1mar1jl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator assignment</title>
    <ns>0</ns>
    <id>704</id>
    <revision>
      <id>82582</id>
      <parentid>77001</parentid>
      <timestamp>2015-12-23T20:33:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>add T.C.'s http://stackoverflow.com/a/33512951 regarding expr = {} resolving to the wrong operator=</comment>
      <text xml:space="preserve" bytes="9467">{{title|Assignment operators}}
{{cpp/language/expressions/navbar}}
Assignment operators modify the value of the object. 

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|-
! rowspan=&quot;2&quot; | Operator name
! rowspan=&quot;2&quot; | Syntax
! rowspan=&quot;2&quot; | {{rlp|operators|Over&amp;#8203;load&amp;#8203;able}}
! colspan=&quot;2&quot; | Prototype examples (for {{c|class T}})
|-
! Inside class definition
! Outside class definition
|-
| simple assignment 
| {{tt|1=a = b}} 
| {{yes}}
| {{c|1=T&amp; T::operator =(const T2&amp; b);}} 
| {{n/a}}
|-
| addition assignment 
| {{tt|1=a += b}}
| {{yes}}
| {{c|1=T&amp; T::operator +=(const T2&amp; b);}}
| {{c|1=T&amp; operator +=(T&amp; a, const T2&amp; b);}}
|-
| subtraction assignment 
| {{tt|1=a -= b}}
| {{yes}}
| {{c|1=T&amp; T::operator -=(const T2&amp; b);}}
| {{c|1=T&amp; operator -=(T&amp; a, const T2&amp; b);}}
|-
| multiplication assignment 
| {{tt|1=a *= b}}
| {{yes}}
| {{c|1=T&amp; T::operator *=(const T2&amp; b);}}
| {{c|1=T&amp; operator *=(T&amp; a, const T2&amp; b);}}
|-
| division assignment 
| {{tt|1=a /= b}}
| {{yes}}
| {{c|1=T&amp; T::operator /=(const T2&amp; b);}}
| {{c|1=T&amp; operator /=(T&amp; a, const T2&amp; b);}}
|-
| modulo assignment 
| {{tt|1=a %= b}}
| {{yes}}
| {{c|1=T&amp; T::operator %=(const T2&amp; b);}}
| {{c|1=T&amp; operator %=(T&amp; a, const T2&amp; b);}}
|-
| bitwise AND assignment 
| {{tt|1=a &amp;= b}}
| {{yes}}
| {{c|1=T&amp; T::operator &amp;=(const T2&amp; b);}}
| {{c|1=T&amp; operator &amp;=(T&amp; a, const T2&amp; b);}}
|-
| bitwise OR assignment 
| {{tt|1=a &amp;#124;= b}}
| {{yes}}
| {{c|1=T&amp; T::operator {{!}}=(const T2&amp; b);}}
| {{c|1=T&amp; operator {{!}}=(T&amp; a, const T2&amp; b);}}
|-
| bitwise XOR assignment 
| {{tt|1=a ^= b}}
| {{yes}}
| {{c|1=T&amp; T::operator ^=(const T2&amp; b);}}
| {{c|1=T&amp; operator ^=(T&amp; a, const T2&amp; b);}}
|-
| bitwise left shift assignment 
| {{tt|1=a &lt;&lt;= b}}
| {{yes}}
| {{c|1=T&amp; T::operator &lt;&lt;=(const T2&amp; b);}}
| {{c|1=T&amp; operator &lt;&lt;=(T&amp; a, const T2&amp; b);}}
|-
| bitwise right shift assignment 
| {{tt|1=a &gt;&gt;= b}}
| {{yes}}
| {{c|1=T&amp; T::operator &gt;&gt;=(const T2&amp; b);}}
| {{c|1=T&amp; operator &gt;&gt;=(T&amp; a, const T2&amp; b);}}
|-
| colspan=&quot;5&quot; |
:'''Notes'''&lt;br&gt;
* All built-in assignment operators return {{c|*this}}, and most {{rlp|operators|user-defined overloads}} also return {{c|*this}} so that the user-defined operators can be used in the same manner as the built-ins. However, in a user-defined operator overload, any type can be used as return type (including {{c|void}}).
* {{tt|T2}} can be any type including {{tt|T}}
|}

===Explanation===

''copy assignment'' operator replaces the contents of the object {{tt|a}} with a copy of the contents of {{tt|b}} ({{tt|b}} is not modified). For class types, this is a special member function, described in [[cpp/language/as_operator|copy assignment operator]].

''move assignment'' operator replaces the contents of the object {{tt|a}} with the contents of {{tt|b}}, avoiding copying if possible ({{tt|b}} may be modified). For class types, this is a special member function, described in [[cpp/language/move_operator|move assignment operator]].  {{mark since c++11}} 

For non-class types, copy and move assignment are indistinguishable and are referred to as ''direct assignment''.

''compound assignment'' operators replace the contents of the object {{tt|a}} with the result of a binary operation between the previous value of {{tt|a}} and the value of {{tt|b}}.

====Builtin direct assignment====

For every type {{tt|T}}, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | T*&amp; operator{{=}}(T*&amp;, T*);}}
{{dcl | T*volatile &amp; operator{{=}}(T*volatile &amp;, T*);}}
{{dcl end}}

For every enumeration or pointer to member type {{tt|T}}, optionally volatile-qualified, the following function signature participates in overload resolution:
{{dcl begin}}
{{dcl | T&amp; operator{{=}}(T&amp;, T );}}
{{dcl end}}

For every pair A1 and A2, where A1 is an arithmetic type (optionally volatile-qualified) and A2 is a promoted arithmetic type, the following function signature participates in overload resolution:
{{dcl begin}}
{{dcl | A1&amp; operator{{=}}(A1&amp;, A2);}}
{{dcl end}}

For expressions E1 of any scalar type {{tt|T}}, the following additional forms of the builtin assignment expression are allowed:
{{dcl begin}}
{{dcl | E1 {{=}} {} | notes={{mark since c++11}}}}
{{dcl | E1 {{=}} {E2} | notes={{mark since c++11}}}}
{{dcl end}}

Note: the above includes all non-class types except reference types, array types, function types, and the type {{c|void}}, which are not directly assignable.

The direct assignment operator expects a modifiable lvalue as its left operand and an rvalue expression {{rev inl|since=c++11|or a ''braced-init-list''}} as its right operand, and returns an lvalue identifying the left operand after modification.

For non-class types, the right operand is first [[cpp/language/implicit_cast|implicitly converted]] to the cv-unqualified type of the left operand, and then its value is copied into the object identified by left operand.

When the left operand has reference type, the assignment operator modifies the referred-to object.

If the left and the right operands identify overlapping objects, the behavior is undefined (unless the overlap is exact and the type is the same)

{{rev begin}}
{{rev|since=c++11|
If the right operand is a ''braced-init-list''
* if the expression {{tt|E1}} has scalar type, 
:* the expression {{c|1=E1 = {} }} is equivalent to {{c|1=E1 = T{} }}, where {{tt|T}} is the type of {{tt|E1}}.
:* the expression {{c|1=E1 = {E2} }} is equivalent to {{c|1=E1 = T{E2} }}, where {{tt|T}} is the type of {{tt|E1}}.
* if the expression {{tt|E1}} has class type, the syntax {{c|1=E1 = {args...} }} generates a call to the assignment operator with the ''braced-init-list'' as the argument, which then selects the appropriate assignment operator following the rules of {{rlp|overload resolution}}. Note that, if a non-template assignment operator from some non-class type is available, it is preferred over the copy/move assignment in {{tt|E1 {{=}} {} }} because {{tt|{} }} to non-class is an {{rlp|overload_resolution#Implicit_conversion_sequence_in_list-initialization|identity conversion}}, which outranks the user-defined conversion from {{tt|{} }} to a class type.
}}
{{rev end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    int n = 0;  // not an assignment
    n = 1;      // direct assignment
    std::cout &lt;&lt; n &lt;&lt; ' ';
    n = {};     // zero-initialization, then assignment
    std::cout &lt;&lt; n &lt;&lt; ' ';
    n = 'a';    // integral promotion, then assignment
    std::cout &lt;&lt; n &lt;&lt; ' ';
    n = {'b'};   // explicit cast, then assignment
    std::cout &lt;&lt; n &lt;&lt; ' ';
    n = 1.0;    // floating-point conversion, then assignment
    std::cout &lt;&lt; n &lt;&lt; ' ';
//    n = {1.0}; // compiler error (narrowing conversion)

    int&amp; r = n;  // not an assignment
    int* p;

    r = 2;       // assignment through reference
    std::cout &lt;&lt; n &lt;&lt; '\n';
    p = &amp;n;      // direct assignment
    p = nullptr; // null-pointer conversion, then assignment 

    struct {int a; std::string s;} obj;
    obj = {1, &quot;abc&quot;}; // assignment from a braced-init-list
    std::cout &lt;&lt; obj.a &lt;&lt; ':' &lt;&lt; obj.s &lt;&lt; '\n';
}
 | output=
1 0 97 98 1 2
1:abc
}}

====Builtin compound assignment====

For every pair A1 and A2, where A1 is an arithmetic type (optionally volatile-qualified) and A2 is a promoted arithmetic type, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl |A1&amp; operator*{{=}}(A1&amp;, A2);}}
{{dcl |A1&amp; operator/{{=}}(A1&amp;, A2);}}
{{dcl |A1&amp; operator+{{=}}(A1&amp;, A2);}}
{{dcl |A1&amp; operator-{{=}}(A1&amp;, A2);}}
{{dcl end}}

For every pair I1 and I2, where I1 is an integral type (optionally volatile-qualified) and I2 is a promoted integral type, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl |I1&amp; operator%{{=}}(I1&amp;, I2);}}
{{dcl |I1&amp; operator&lt;&lt;{{=}}(I1&amp;, I2);}}
{{dcl |I1&amp; operator&gt;&gt;{{=}}(I1&amp;, I2);}}
{{dcl |I1&amp; operator&amp;{{=}}(I1&amp;, I2);}}
{{dcl |I1&amp; operator^{{=}}(I1&amp;, I2);}}
{{dcl |I1&amp; operator{{!}}{{=}}(I1&amp;, I2);}}
{{dcl end}}

For every optionally cv-qualified object type {{tt|T}}, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl |T*&amp; operator+{{=}}(T*&amp;, std::ptrdiff_t);}}
{{dcl |T*&amp; operator-{{=}}(T*&amp;, std::ptrdiff_t);}}
{{dcl |T*volatile &amp; operator+{{=}}(T*volatile &amp;, std::ptrdiff_t);}}
{{dcl |T*volatile &amp; operator-{{=}}(T*volatile &amp;, std::ptrdiff_t);}}
{{dcl end}}

The behavior of every builtin compound-assignment expression {{c|1=E1 op= E2}} (where E1 is a modifiable lvalue expression and E2 is an rvalue expression {{rev inl|since=c++11|or a ''braced-init-list''}}) is exactly the same as the behavior of the expression {{c|1=E1 = E1 op E2}}, except that the expression {{tt|E1}} is evaluated only once and that it behaves as a single operation with respect to indeterminately-sequenced function calls (e.g. in {{c|1=f(a += b, g())}}, the += is either not started at all or is completed as seen from inside {{c|g()}}).

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===

[[cpp/language/operator precedence | Operator precedence]]

[[cpp/language/operators | Operator overloading]]

{{cpp/language/operators}}

[[de:cpp/language/operator assignment]]
[[es:cpp/language/operator assignment]]
[[fr:cpp/language/operator assignment]]
[[it:cpp/language/operator assignment]]
[[ja:cpp/language/operator assignment]]
[[pt:cpp/language/operator assignment]]
[[ru:cpp/language/operator assignment]]
[[zh:cpp/language/operator assignment]]</text>
      <sha1>k0idcl1l714o0f1401ynwjuhwqzu3fx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator comparison</title>
    <ns>0</ns>
    <id>705</id>
    <revision>
      <id>91131</id>
      <parentid>82023</parentid>
      <timestamp>2017-03-21T00:30:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Pointer comparison operators */ cwg 2206</comment>
      <text xml:space="preserve" bytes="16988">{{title|Comparison operators}}
{{cpp/language/expressions/navbar}}
Compares the arguments.

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|-
! rowspan=&quot;2&quot; | Operator name
! rowspan=&quot;2&quot; | Syntax
! rowspan=&quot;2&quot; | {{rlp|operators|Over&amp;#8203;load&amp;#8203;able}}
! colspan=&quot;2&quot; | Prototype examples (for {{c|class T}})
|-
! As member function
! As free (namespace) function
|-
| equal to
| {{tt|1=a == b}}
| {{yes}}
| {{c|1=bool T::operator ==(const T2 &amp;b) const;}}
| {{c|1=bool operator ==(const T &amp;a, const T2 &amp;b);}}
|-
| not equal to
| {{tt|1=a != b}}
| {{yes}}
| {{c|1=bool T::operator !=(const T2 &amp;b) const;}}
| {{c|1=bool operator !=(const T &amp;a, const T2 &amp;b);}}
|-
| less than
| {{tt|1=a &lt; b}}
| {{yes}}
| {{c|1=bool T::operator &lt;(const T2 &amp;b) const;}}
| {{c|1=bool operator &lt;(const T &amp;a, const T2 &amp;b);}}
|-
| greater than
| {{tt|1=a &gt; b}}
| {{yes}}
| {{c|1=bool T::operator &gt;(const T2 &amp;b) const;}}
| {{c|1=bool operator &gt;(const T &amp;a, const T2 &amp;b);}}
|-
| less than or equal to
| {{tt|1=a &lt;= b}}
| {{yes}}
| {{c|1=bool T::operator &lt;=(const T2 &amp;b) const;}}
| {{c|1=bool operator &lt;=(const T &amp;a, const T2 &amp;b);}}
|-
| greater than or equal to
| {{tt|1=a &gt;= b}}
| {{yes}}
| {{c|1=bool T::operator &gt;=(const T2 &amp;b) const;}}
| {{c|1=bool operator &gt;=(const T &amp;a, const T2 &amp;b);}}
|-
| colspan=&quot;5&quot; |
:'''Notes'''&lt;br&gt;
* All built-in operators return {{c|bool}}, and most {{rlp|operators|user-defined overloads}} also return {{c|bool}} so that the user-defined operators can be used in the same manner as the built-ins. However, in a user-defined operator overload, any type can be used as return type (including {{c|void}}).
* {{tt|T2}} can be any type including {{tt|T}}
|}

===Explanation===

Returns the boolean result of comparison of the values of the arguments, which are not modified.

====Arithmetic comparison operators====
For every pair of promoted arithmetic types {{tt|L}} and {{tt|R}}, including enumeration types, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | bool operator&lt;(L, R);}}
{{dcl | bool operator&gt;(L, R);}}
{{dcl |1= bool operator&lt;=(L, R);}}
{{dcl |1= bool operator&gt;=(L, R);}}
{{dcl |1= bool operator==(L, R);}}
{{dcl |1= bool operator!=(L, R);}}
{{dcl end}}
If the operands has arithmetic or enumeration type (scoped or unscoped), ''usual arithmetic conversions'' are performed following the rules for [[cpp/language/operator_arithmetic|arithmetic operators]]. The values are compared after conversions:
===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; std::boolalpha;
    int n = -1;

    int n2 = 1;
    std::cout &lt;&lt; &quot; -1 == 1? &quot; &lt;&lt; (n == n2) &lt;&lt; '\n'
              &lt;&lt; &quot;Comparing two signed values:\n&quot;
              &lt;&lt; &quot; -1  &lt; 1? &quot; &lt;&lt; (n &lt; n2) &lt;&lt; '\n'
              &lt;&lt; &quot; -1  &gt; 1? &quot; &lt;&lt; (n &gt; n2) &lt;&lt; '\n';

    unsigned int u = 1;
    std::cout &lt;&lt; &quot;Comparing signed and unsigned:\n&quot;
              &lt;&lt; &quot; -1  &lt; 1? &quot; &lt;&lt; (n &lt; u) &lt;&lt; '\n'
              &lt;&lt; &quot; -1  &gt; 1? &quot; &lt;&lt; (n &gt; u) &lt;&lt; '\n';

    unsigned char uc = 1;
    std::cout &lt;&lt; &quot;Comparing signed and smaller unsigned:\n&quot;
              &lt;&lt; &quot; -1  &lt; 1? &quot; &lt;&lt; (n &lt; uc) &lt;&lt; '\n'
              &lt;&lt; &quot; -1  &gt; 1? &quot; &lt;&lt; (n &gt; uc) &lt;&lt; '\n';
}
 | output=
 -1 == 1? false
Comparing two signed values:
 -1  &lt; 1? true
 -1  &gt; 1? false
Comparing signed and unsigned:
 -1  &lt; 1? false
 -1  &gt; 1? true
Comparing signed and smaller unsigned:
 -1  &lt; 1? true
 -1  &gt; 1? false
}}

====Pointer comparison operators====
For every type {{tt|P}} which is either pointer to object or pointer to function {{rev inl|until=c++14|or {{lc|std::nullptr_t}}}}, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | bool operator&lt;(P, P);}}
{{dcl | bool operator&gt;(P, P);}}
{{dcl |1= bool operator&lt;=(P, P);}}
{{dcl |1= bool operator&gt;=(P, P);}}
{{dcl |1= bool operator==(P, P);}}
{{dcl |1= bool operator!=(P, P);}}
{{dcl end}}
For every type {{tt|MP}} that is a pointer to member object or pointer to member function or {{lc|std::nullptr_t}}, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl |1= bool operator==(MP, MP);}}
{{dcl |1= bool operator!=(MP, MP);}}
{{dcl end}}

Comparison operators can be used to compare two pointers (or pointers-to-members, for {{c|1=operator==}} and {{c|1=operator!=}} only), or a pointer {{rev inl|since=c++14|to member}} and a null pointer constant{{rev inl|until=c++14|, or two null pointer constants (but only as long as at least one of them is {{lc|std::nullptr_t}}: comparison of NULL and NULL follows arithmetic comparison rules)}}.

First, [[cpp/language/implicit_cast|Pointer conversions]] (pointer to member conversions if the arguments are pointers to members){{rev inl|since=c++17|, function pointer conversions,}} and [[cpp/language/implicit_cast|qualification conversions]] are applied to both operands to obtain the ''composite pointer type'', as follows
@1@ If both operands are null pointer constants, the composite pointer type is {{lc|std::nullptr_t}}
@2@ If one operand is a null pointer constant, and the other is a pointer, the composite type is exactly the pointer type
@3@ If one operand is pointer to ''cv1'' {{c|void}} and the other is a pointer to ''cv2'' {{tt|T}} for some type {{tt|T}}, where {{tt|T}} is an object type or {{c|void}}, the composite type is &quot;pointer to ''cv12'' {{c|void}}&quot;, where ''cv12'' is the union of ''cv1'' and ''cv2''

{{rev begin}}
{{rev|until=c++14|
@4@ If both operands are pointers to the same type, with different cv-qualification, the composite is pointer to the same type with cv-qualification that is a union of the cv-qualifications of the arguments.
}}
{{rev|since=c++14|
@4@ If the types of the operands are P1, a pointer to (possibly cv-qualified) T1, and P2, a pointer to (possibly cv-qualified) T2, and if T1 is the same as T2 or is a base class of T2, then the composite pointer type is the ''cv-combined'' type of P1 and P2. Otherwise, if T2 is a base class of T1, then the composite pointer type is the ''cv-combined'' type of P2 and P1.
@5@ If the types of the operands are MP1, pointer to member of T1 of type (possibly cv-qualified) U1 and MP2, pointer to member of T2 of type (possibly cv-qualified) U2, and if T1 is the same as or derived from T2, then the composite pointer type is the ''cv-combined'' type of MP1 and MP2. Otherwise, if T2 is derived from T1, then the composite pointer type is the cv-combined type of MP2 and MP1.
@6@ if the types of the operands P1 and P2 are multi-level mixed pointer and pointer to member types with the same number of levels that only differ by cv-qualifications at any of the levels, the composite pointer type is the cv-combined type of P1 and P2

In the definition above, ''cv-combined'' type of two pointer types P1 and P2 is a type P3 that has the same number of levels and type at every level as P1, except that cv-qualifications at every level are set as follows:
@a@ at every level other than top level, the union of the cv-qualifications of P1 and P2 at that level
@b@ if the resulting cv-qualification at any level is different from P1's or P2's cv-qualification at the same level, then const is added to every level between the top level and this one.

For example, the composite pointer type of {{c|void*}} and {{c|const int*}} is {{c|const void*}}. The composite pointer type of {{c|int**}} and {{c|const int**}} is {{c|const int* const*}}. Note that until C++14, {{c|int**}} and {{c|const int**}} could not be compared.
}}
{{rev|since=c++17|
In addition to the above, the composite pointer type between pointer to function and pointer to noexcept function (as long as the function type is the same) is pointer to function.
}}
{{rev end}}

Note that this implies that any pointer can be compared with {{c|void*}}.

The result of comparing two pointers to objects (after conversions) is defined as follows:

@1@ If two pointers point to different elements of the same array, or to subobjects within different elements of the same array, the pointer to the element with the higher subscript ''compares greater''. In other words, they results of comparing the pointers is the same as the result of comparing the indexes of the elements they point to.
@2@ If one pointer points to an element of an array, or to a subobject of the element of the array, and another pointer points one past the last element of the array, the latter pointer ''compares greater''. {{rev inl|since=c++17|Pointers to single objects are treated as pointers to arrays of one: {{tt|&amp;obj+1}} compares greater than {{tt|&amp;obj}}}}
@3@ If, within an object of non-union class type, two pointers point to different non-static data members with the same {{rlp|access|member access}}, or to subobjects or array elements of such members, recursively, the pointer to the later declared member ''compares greater''. In other words, class members in each of the three member access modes are positioned in memory in order of declaration.

The result of equality comparison of two pointers (after conversions) is defined as follows:
@1@ If the pointers are both null pointer values, they ''compare equal''
@2@ If the pointers are pointers to function and point to the same function, then ''compare equal''
@3@ If the pointers are pointers to object and represent the same address, they ''compare equal'' (this includes two pointers to non-static members of the same union, pointers to standard-layout struct and to its first member, pointers related by reinterpret_cast, etc)
@4@ All other pointers compare unequal

The result of comparing two pointers to members (after conversions) is defined as follows:

@1@ If both pointers to member are null member pointer values, they ''compare equal''.
@2@ Otherwise, if only one of two pointers to member is the null member pointer value, they compare unequal.
@3@ Otherwise, if either is a pointer to a virtual member function, the result is unspecified.
@4@ Otherwise, two pointers to member compare equal if and only if they would refer to the same member of the same most derived object or the same subobject if they were dereferenced with a hypothetical object of the associated class type
@5@ Otherwise they compare unequal.
&lt;!-- [ Example:
   struct B {
     int f();
   };
   struct L : B { };
   struct R : B { };
   struct D : L, R { };
   int (B::*pb)() = &amp;B::f;
   int (L::*pl)() = pb;
   int (R::*pr)() = pb;
   int (D::*pdl)() = pl;
   int (D::*pdr)() = pr;
   bool x = (pdl == pdr);             // false
-- end example ]
--&gt;

If a pointer {{tt|p}} ''compare equal'' to pointer {{tt|q}}, {{tt|p&lt;{{=}}q}} and {{tt|p&gt;{{=}}q}} both yield {{tt|true}} and {{tt|p&lt;q}} and {{tt|p&gt;q}} both yield {{tt|false}}.

If a pointer {{tt|p}} ''compares greater'' than a pointer {{tt|q}}, then {{tt|p&gt;{{=}}q}}, {{tt|p&gt;q}}, {{tt|q&lt;{{=}}p}}, and {{tt|q&lt;p}} all yield {{tt|true}} and {{tt|p&lt;{{=}}q}}, {{tt|p&lt;q}}, {{tt|q&gt;{{=}}p}}, and {{tt|q&gt;p}} all yield {{tt|false}}.

If two pointers are not specified to compare greater or compare equal, the result of the comparison is unspecified.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
struct Foo  { int n1; int n2; };
union Union { int n; double d; };
int main()
{
    std::cout &lt;&lt; std::boolalpha;

    char a[4] = &quot;abc&quot;;

    char* p1 = &amp;a[1];
    char* p2 = &amp;a[2];
    std::cout &lt;&lt; &quot;Pointers to array elements: p1 == p2 &quot; &lt;&lt; (p1 == p2)
              &lt;&lt; &quot;, p1 &lt; p2 &quot;  &lt;&lt; (p1 &lt; p2) &lt;&lt; '\n';

    Foo f;
    int* p3 = &amp;f.n1;
    int* p4 = &amp;f.n2;
    std::cout &lt;&lt; &quot;Pointers to members of a class: p3 == p4 &quot; &lt;&lt; (p3 == p4)
              &lt;&lt; &quot;, p3 &lt; p4 &quot;  &lt;&lt; (p3 &lt; p4) &lt;&lt; '\n';

    Union u;
    int* p5 = &amp;u.n;
    double* p6 = &amp;u.d;
    std::cout &lt;&lt; &quot;Pointers to members of a union: p5 == (void*)p6 &quot; &lt;&lt; (p5 == (void*)p6)
              &lt;&lt; &quot;, p5 &lt; p6 &quot;  &lt;&lt; (p5 &lt; (void*)p6) &lt;&lt; '\n';
}
 | output=
Pointers to array elements: p1 == p2 false, p1 &lt; p2 true
Pointers to members of a class: p3 == p4 false, p3 &lt; p4 true
Pointers to members of a union: p5 == (void*)p6 true, p5 &lt; p6 false
}}

===Notes===
Because these operators group left-to-right, the expression {{c|a&lt;b&lt;c}} is parsed {{c|(a&lt;b)&lt;c}}, and not {{c|a&lt;(b&lt;c)}} or {{c|(a&lt;b)&amp;&amp;(b&lt;c)}}.

A common requirement for {{rlp|operators#Relational_operators|user-defined operator&lt;}} is [[enwiki:Strict weak ordering|strict weak ordering]]. In particular, this is required by the standard algorithms and containers that work with {{concept|Compare}} types: {{lc|std::sort}}, {{lc|std::max_element}}, {{lc|std::map}}, etc.

Although the results of comparing pointers of random origin (e.g. not all pointing to members of the same array) is unspecified, many implementations provide [[enwiki:Total order#Strict total order|strict total ordering]] of pointers, e.g. if they are implemented as addresses within continuous virtual address space. Those implementations that do not (e.g. where not all bits of the pointer are part of a memory address and have to be ignored for comparison, or an additional calculation is required or otherwise pointer and integer is not a 1 to 1 relationship), provide a specialization of {{lc|std::less}} for pointers that has that guarantee. This makes it possible to use all pointers of random origin as keys in standard associative containers such as {{lc|std::set}} or {{lc|std::map}}.

For the types that are both {{concept|EqualityComparable}} and {{concept|LessThanComparable}}, the C++ standard library makes a distinction between ''equality'', which is the value of the expression {{c|a {{==}} b}} and ''equivalence'', which is the value of the expression {{c|!(a &lt; b) &amp;&amp; !(b &lt; a)}}.

Comparison between pointers and null pointer constants was removed in C++14
{{source|1=
void f(char * p)
{
  if (p &gt; 0) { ... } // OK in C++98..C++11, does not compile in C++14
  if (p &gt; nullptr) { ... } // OK in C++98..C++11, does not compile in C++14
}
}}

===Standard library===
Comparison operators are overloaded for many classes in the standard library.

{{dsc begin}}
{{dsc inc | cpp/types/type_info/dsc operator_cmp}}
{{dsc inc | cpp/error/error_code/dsc operator_cmp}}
{{dsc inc | cpp/error/error_condition/dsc operator_cmp}}
{{dsc inc | cpp/utility/pair/dsc operator_cmp}}
{{dsc inc | cpp/utility/tuple/dsc operator_cmp}}
{{dsc inc | cpp/utility/bitset/dsc operator_cmp}}
{{dsc inc | cpp/memory/allocator/dsc operator_cmp}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator_cmp}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_cmp}}
{{dsc inc | cpp/utility/functional/function/dsc operator_cmp}}
{{dsc inc | cpp/chrono/duration/dsc operator_cmp}}
{{dsc inc | cpp/chrono/time_point/dsc operator_cmp}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc operator_cmp}}
{{dsc inc | cpp/types/type_index/dsc operator_cmp}}
{{dsc inc | cpp/string/basic_string/dsc operator_cmp}}
{{dsc inc | cpp/locale/locale/dsc operator_cmp}}
{{dsc inc | cpp/container/dsc operator_cmp | array}}
{{dsc inc | cpp/container/dsc operator_cmp | deque}}
{{dsc inc | cpp/container/dsc operator_cmp | forward_list}}
{{dsc inc | cpp/container/dsc operator_cmp | list}}
{{dsc inc | cpp/container/dsc operator_cmp | vector}}
{{dsc inc | cpp/container/dsc operator_cmp | map}}
{{dsc inc | cpp/container/dsc operator_cmp | multimap}}
{{dsc inc | cpp/container/dsc operator_cmp | set}}
{{dsc inc | cpp/container/dsc operator_cmp | multiset}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_map}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_multimap}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_set}}
{{dsc inc | cpp/container/dsc operator_cmp_unord | unordered_multiset}}
{{dsc inc | cpp/container/dsc operator_cmp | queue}}
{{dsc inc | cpp/container/dsc operator_cmp | stack}}
{{dsc inc | cpp/iterator/adaptor/dsc operator cmp|reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator cmp|move_iterator}}
{{dsc inc | cpp/iterator/istream_iterator/dsc operator_cmp}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc operator_cmp}}
{{dsc inc | cpp/numeric/complex/dsc operator_cmp}}
{{dsc inc | cpp/numeric/valarray/dsc operator_cmp}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_cmp |linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | poisson_distribution }}
{{dsc inc | cpp/regex/sub_match/dsc operator_cmp}}
{{dsc inc | cpp/regex/match_results/dsc operator_cmp}}
{{dsc inc | cpp/regex/regex_iterator/dsc operator_cmp}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc operator_cmp}}
{{dsc inc | cpp/thread/thread/id/dsc operator_cmp}}
{{dsc inc | cpp/utility/rel_ops/dsc operator_cmp}}
{{dsc end}}

===See also===

[[cpp/language/operator precedence | Operator precedence]]

[[cpp/language/operators | Operator overloading]]

{{cpp/language/operators}}

[[de:cpp/language/operator comparison]]
[[es:cpp/language/operator comparison]]
[[fr:cpp/language/operator comparison]]
[[it:cpp/language/operator comparison]]
[[ja:cpp/language/operator comparison]]
[[pt:cpp/language/operator comparison]]
[[ru:cpp/language/operator comparison]]
[[zh:cpp/language/operator comparison]]</text>
      <sha1>01g5c49amjxp8fpbsylaw3vmg6ltq0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator incdec</title>
    <ns>0</ns>
    <id>706</id>
    <revision>
      <id>85292</id>
      <parentid>81706</parentid>
      <timestamp>2016-04-14T16:02:07Z</timestamp>
      <contributor>
        <username>Gubbins</username>
        <id>3701</id>
      </contributor>
      <minor/>
      <comment>grammar</comment>
      <text xml:space="preserve" bytes="7209">{{title|Increment/decrement operators}}
{{cpp/language/expressions/navbar}}
Increment/decrement operators increment or decrement the value of the object. 

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|-
! rowspan=&quot;2&quot; | Operator name
! rowspan=&quot;2&quot; | Syntax
! rowspan=&quot;2&quot; | {{rlp|operators|Over&amp;#8203;load&amp;#8203;able}}
! colspan=&quot;2&quot; | Prototype examples (for {{c|class T}})
|-
! Inside class definition
! Outside class definition
|-
| pre-increment
| {{tt|++a}} 
| {{yes}}
| {{c|T&amp; T::operator++();}} 
| {{c|T&amp; operator++(T&amp; a);}}
|-
| pre-decrement
| {{tt|--a}} 
| {{yes}}
| {{c|T&amp; T::operator--();}} 
| {{c|T&amp; operator--(T&amp; a);}}
|-
| post-increment
| {{tt|a++}} 
| {{yes}}
| {{c|T T::operator++(int);}} 
| {{c|T operator++(T&amp; a, int);}}
|-
| post-decrement
| {{tt|a--}} 
| {{yes}}
| {{c|T T::operator--(int);}} 
| {{c|T operator--(T&amp; a, int);}}
|-
| colspan=&quot;5&quot; |
:'''Notes'''&lt;br&gt;
* Prefix versions of the built-in operators return ''references'' and postfix versions return ''values'', and typical {{rlp|operators|user-defined overloads}} follow the pattern so that the user-defined operators can be used in the same manner as the built-ins. However, in a user-defined operator overload, any type can be used as return type (including {{c|void}}).
* The {{c|int}} parameter is a dummy parameter used to differentiate between prefix and postfix versions of the operators. When the user-defined postfix operator is called, the value passed in that parameter is always zero, although it may be changed by calling the operator using function call notation (e.g., {{c|a.operator++(2)}} or {{c|operator++(a, 2)}}).
|}

===Explanation===
''Pre-increment'' and ''pre-decrement'' operators increments or decrements the value of the object and returns a reference to the result.

''Post-increment'' and ''post-decrement'' creates a copy of the object, increments or decrements the value of the object and returns the copy from before the increment or decrement.

====Built-in prefix operators====
For every optionally volatile-qualified arithmetic type {{tt|A}} other than {{c|bool}}, and for every optionally volatile-qualified pointer {{tt|P}} to optionally cv-qualified object type, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | A&amp; operator++(A&amp;)}}
{{dcl | bool&amp; operator++(bool&amp;) | notes={{mark deprecated}}{{mark until c++17}}}}
{{dcl | P&amp; operator++(P&amp;)}}
{{dcl | A&amp; operator--(A&amp;)}}
{{dcl | P&amp; operator--(P&amp;)}}
{{dcl end}}

The operand of a built-in prefix increment or decrement operator must be a modifiable (non-const) {{rlp|value category|lvalue}} of non-boolean arithmetic type or pointer to complete {{rlp|type|object type}}. For non-boolean operands, the expression {{c|++x}} is exactly equivalent to {{c|1=x += 1}}, and the expression {{c|--x}} is exactly equivalent to {{c|1=x -= 1}}, that is, the prefix increment or decrement is an lvalue expression that identifies the modified operand. All arithmetic conversion rules and pointer arithmetic rules defined for [[cpp/language/operator_arithmetic|arithmetic operators]] apply.

{{rev inl|until=c++17|If the operand of the pre-increment operator is of type {{c|bool}}, it is set to {{c|true}} {{mark deprecated}}.}}

====Built-in postfix operators====
For every optionally volatile-qualified arithmetic type {{tt|A}} other than {{c|bool}}, and for every optionally volatile-qualified pointer {{tt|P}} to optionally cv-qualified object type, the following function signatures participate in overload resolution:
{{dcl begin}}
{{dcl | A operator++(A&amp;, int)}}
{{dcl | bool operator++(bool&amp;, int) | notes={{mark deprecated}}{{mark until c++17}}}}
{{dcl | P operator++(P&amp;, int)}}
{{dcl | A operator--(A&amp;, int)}}
{{dcl | P operator--(P&amp;, int)}}
{{dcl end}}

The operand of a built-in postfix increment or decrement operator must be a modifiable (non-const) {{rlp|value category|lvalue}} of non-boolean arithmetic type or pointer to complete {{rlp|type|object type}}. The result is {{rlp|value category|prvalue}} copy of the original value of the operand. As a side-effect, for non-boolean operands, the expression {{c|x++}} modifies the value of its operand as if by evaluating {{c|1=x += 1}}, and the expression {{c|x--}} modifies the value of its operand as if by evaluating {{c|1=x -= 1}}. All arithmetic conversion rules and pointer arithmetic rules defined for [[cpp/language/operator_arithmetic|arithmetic operators]] apply.

{{rev inl|until=c++17|If the operand of the post-increment operator is of type {{c|bool}}, it is set to {{c|true}} {{mark deprecated}}.}}

====Example====
{{example
 |
 | code=
#include &lt;iostream&gt;

int main()
{
    int n1 = 1;
    int n2 = ++n1;
    int n3 = ++ ++n1;
    int n4 = n1++;
//  int n5 = n1++ ++;   // error
//  int n6 = n1 + ++n1; // undefined behavior
    std::cout &lt;&lt; &quot;n1 = &quot; &lt;&lt; n1 &lt;&lt; '\n'
              &lt;&lt; &quot;n2 = &quot; &lt;&lt; n2 &lt;&lt; '\n'
              &lt;&lt; &quot;n3 = &quot; &lt;&lt; n3 &lt;&lt; '\n'
              &lt;&lt; &quot;n4 = &quot; &lt;&lt; n4 &lt;&lt; '\n';
}
 | output=
n1 = 5
n2 = 2
n3 = 4
n4 = 4
}}

===Notes===
Because of the side-effects involved, built-in increment and decrement operators must be used with care to avoid undefined behavior due to violations of [[cpp/language/eval_order|sequencing rules]].

Because a temporary copy of the object is constructed during post-increment and post-decrement, ''pre-increment'' or ''pre-decrement'' operators are usually more efficient in contexts where the returned value is not used.

===Standard library===
Increment and decrement operators are overloaded for many standard library types. In particular, every {{concept|Iterator}} overloads operator++ and every {{concept|BidirectionalIterator}} overloads operator--, even if those operators are no-ops for the particular iterator.

{{dsc begin}}
{{dsc h2 | overloads for arithmetic types}}
{{dsc inc | cpp/atomic/atomic/dsc operator_arith}}
{{dsc inc | cpp/chrono/duration/dsc operator_arith2}}
{{dsc h2 | overloads for iterator types}}
{{dsc inc | cpp/memory/raw_storage_iterator/dsc operator_arith}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_arith | reverse_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_arith | move_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator_arith | front_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator_arith | back_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator_arith | insert_iterator}}
{{dsc inc | cpp/iterator/istream_iterator/dsc operator_arith}}
{{dsc inc | cpp/iterator/ostream_iterator/dsc operator_arith}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc operator_arith}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc operator_arith}}
{{dsc inc | cpp/regex/regex_iterator/dsc operator_arith}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc operator_arith}}
{{dsc end}}

===See also===
[[cpp/language/operator precedence | Operator precedence]]

[[cpp/language/operators| Operator overloading]]
 
{{cpp/language/operators}}

[[de:cpp/language/operator incdec]]
[[es:cpp/language/operator incdec]]
[[fr:cpp/language/operator incdec]]
[[it:cpp/language/operator incdec]]
[[ja:cpp/language/operator incdec]]
[[pt:cpp/language/operator incdec]]
[[ru:cpp/language/operator incdec]]
[[zh:cpp/language/operator incdec]]</text>
      <sha1>48ont3jylepjvc7ymakgvgzk6tmzagm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator logical</title>
    <ns>0</ns>
    <id>5287</id>
    <revision>
      <id>76808</id>
      <parentid>66846</parentid>
      <timestamp>2015-03-02T14:32:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link overloading</comment>
      <text xml:space="preserve" bytes="5568">{{title|Logical operators}}
{{cpp/language/expressions/navbar}}
Returns the result of a boolean operation.

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|-
! rowspan=&quot;2&quot; | Operator name
! rowspan=&quot;2&quot; | Syntax
! rowspan=&quot;2&quot; | {{rlp|operators|Over&amp;#8203;load&amp;#8203;able}}
! colspan=&quot;2&quot; | Prototype examples (for {{c|class T}})
|-
! Inside class definition
! Outside class definition
|-
| negation
| {{c|not a}}
{{tt|!a}}
| {{yes}}
| {{c|bool T::operator!() const;}}
| {{c|bool operator!(const T &amp;a);}}
|-
| AND
| {{c|a and b}}
{{tt|a&amp;nbsp;&amp;&amp;&amp;nbsp;b}}
| {{yes}}
| {{c|bool T::operator&amp;&amp;(const T2 &amp;b) const;}}
| {{c|bool operator&amp;&amp;(const T &amp;a, const T2 &amp;b);}}
|-
| inclusive OR
| {{c|a or b}}
{{tt|&lt;nowiki&gt;a&amp;nbsp;||&amp;nbsp;b&lt;/nowiki&gt;}}
| {{yes}}
| {{c|bool T::operator{{!!}}(const T2 &amp;b) const;}}
| {{c|bool operator{{!!}}(const T &amp;a, const T2 &amp;b);}}
|-
| colspan=&quot;5&quot; |
:'''Notes'''&lt;br&gt;
* The keyword-like forms ({{c|and}},{{c|or}},{{c|not}}) and the symbol-like forms ({{c|&amp;&amp;}},{{c|{{!!}}}},{{c|!}}) can be used interchangeably (See [[cpp/language/operator_alternative|alternative representations]]) 
* All built-in operators return {{c|bool}}, and most {{rlp|operators|user-defined overloads}} also return {{c|bool}} so that the user-defined operators can be used in the same manner as the built-ins. However, in a user-defined operator overload, any type can be used as return type (including {{c|void}}).
* Builtin operators {{ttb|&amp;&amp;}} and {{ttb|{{!!}}}} perform short-circuit evaluation (do not evaluate the second operand if the result is known after evaluating the first), but overloaded operators behave like regular function calls and always evaluate both operands
|}

===Explanation===

The logical operators apply logic functions (NOT, AND, and inclusive OR) to boolean arguments (or types contextually-convertible to {{c|bool}}), with a boolean result. Unlike the [[cpp/language/operator_arithmetic|bitwise logic operators]], these operators (in their built-in form) do not evaluate the second operand if the result is known after evaluating the first.

====Builtin operators====

The following built-in function signatures participate in overload resolution:
{{dcl begin}}
{{dcl |bool operator!(bool)}}
{{dcl |bool operator&amp;&amp;(bool, bool)}}
{{dcl |bool operator{{!!}}(bool, bool)}}
{{dcl end}}

If the operand is not {{c|bool}}, it is converted to {{c|bool}} using [[cpp/language/implicit_cast|contextual conversion to bool]]: it is only well-formed if the declaration {{tt|bool t(arg)}} is well-formed, for some invented temporary {{tt|t}}.

For the built-in logical NOT operator, the result is {{c|true}} if the operand is {{c|false}}. Otherwise, the result is {{c|false}}.

For the built-in logical AND operator, the result is {{c|true}} if both operands are {{c|true}}. Otherwise, the result is {{c|false}}. If the first operand is {{c|false}}, the second operand is not evaluated.

For the built-in logical OR operator, the result is {{c|true}} if either the first or the second operand (or both) is {{c|true}}. If the firstoperand is {{c|true}}, the second operand is not evaluated.

===Results===
{|table class=wikitable
!{{c|a}}
|{{c|true}}
|{{c|false}}
|-
!{{c|!a}}
|{{c|false}}
|{{c|true}}
|}
{|table class=wikitable
!colspan=2 rowspan=2|{{c|and}}
!colspan=2|{{c|a}}
|-
|{{c|true}} &lt;!--a--&gt;
|{{c|false}} &lt;!--a--&gt;
|-
!rowspan=2|{{c|b}}
|{{c|true}} &lt;!--b--&gt;
|{{c|true}} &lt;!--true&amp;&amp;true--&gt;
|{{c|false}}&lt;!--true&amp;&amp;false--&gt;
|-
|{{c|false}}&lt;!--b--&gt;
|{{c|false}}&lt;!--true&amp;&amp;false--&gt;
|{{c|false}}&lt;!--false&amp;&amp;false--&gt;
|}
{|table class=wikitable
!colspan=2 rowspan=2|{{c|or}}
!colspan=2|{{c|a}}
|-
|{{c|true}} &lt;!--a--&gt;
|{{c|false}}&lt;!--a--&gt;
|-
!rowspan=2|{{c|b}}
|{{c|true}}&lt;!--b--&gt;
|{{c|true}}&lt;!--true||true--&gt;
|{{c|true}}&lt;!--true||false--&gt;
|-
|{{c|false}}&lt;!--b--&gt;
|{{c|true}}&lt;!--false||true--&gt;
|{{c|false}}&lt;!--false||false--&gt;
|}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
int main()
{
    int n = 2;
    int* p = &amp;n;
    // pointers are convertible to bool
    if(    p &amp;&amp; *p == 2   // &quot;*p&quot; is safe to use after &quot;p &amp;&amp;&quot;
       {{!!}} !p &amp;&amp;  n != 2 ) // {{!!}} has lower precedence than &amp;&amp;
        std::cout &lt;&lt; &quot;true\n&quot;;

    // streams are also convertible to bool
    std::cout &lt;&lt; &quot;Enter 'quit' to quit.\n&quot;;
    for(std::string line;    std::cout &lt;&lt; &quot;&gt; &quot;
                          &amp;&amp; std::getline(std::cin, line)
                          &amp;&amp; line != &quot;quit&quot;; )
        ;
}
 | output=
true
Enter 'quit' to quit.
&gt; test
&gt; quit
}}

===Standard library===
Because the short-circuiting properties of {{tt|operator&amp;&amp;}} and {{tt|operator{{!!}}}} do not apply to overloads, and because types with boolean semantics are uncommon, only two standard library classes overload these operators:

{{dsc begin}}
{{dsc mem fun | cpp/numeric/valarray/operator_arith | title=operator! | applies a unary arithmetic operator to each element of the valarray}}
{{dsc tfun | cpp/numeric/valarray/operator_arith3 | title=operator&amp;&amp;&lt;br&gt;operator&lt;nowiki&gt;||&lt;/nowiki&gt; | applies binary operators to each element of two valarrays, or a valarray and a value }}
{{dsc inc | cpp/io/basic_ios/dsc operator!}}
{{dsc end}}

===See also===

[[cpp/language/operator precedence | Operator precedence]]

[[cpp/language/operators | Operator overloading]]

{{cpp/language/operators}}

[[de:cpp/language/operator logical]]
[[es:cpp/language/operator logical]]
[[fr:cpp/language/operator logical]]
[[it:cpp/language/operator logical]]
[[ja:cpp/language/operator logical]]
[[pt:cpp/language/operator logical]]
[[ru:cpp/language/operator logical]]
[[zh:cpp/language/operator logical]]</text>
      <sha1>hjvdtwzedst65syfgm1qsgbdjtzlwag</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator member access</title>
    <ns>0</ns>
    <id>707</id>
    <revision>
      <id>89050</id>
      <parentid>88114</parentid>
      <timestamp>2016-12-23T21:52:51Z</timestamp>
      <contributor>
        <ip>83.220.239.137</ip>
      </contributor>
      <comment>According to 5.2.1/1: &quot;The result is of type T. The type T shall be a completely-defined object type.&quot;</comment>
      <text xml:space="preserve" bytes="18255">{{title|Member access operators}}
{{cpp/language/expressions/navbar}}
Accesses a member of its operand.

{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|-
! rowspan=&quot;2&quot; | Operator name
! rowspan=&quot;2&quot; | Syntax
! rowspan=&quot;2&quot; | {{rlp|operators|Over&amp;#8203;load&amp;#8203;able}}
! colspan=&quot;2&quot; | Prototype examples (for {{c|class T}})
|-
! Inside class definition
! Outside class definition
|-
| subscript
| {{tt|a[b]}}
| {{yes}}
| {{c|R&amp; T::operator[](S b);}}
| {{n/a}}
|-
| indirection
| {{tt|*a}}
| {{yes}}
| {{c|1=R&amp; T::operator*();}}
| {{c|1=R&amp; operator*(T a);}}
|-
| address-of
| {{tt|&amp;a}}
| {{yes}}
| {{c|R* T::operator&amp;();}}
| {{c|R* operator&amp;(T a);}}
|-
| member of object
| {{tt|a.b}}
| {{no}}
| {{n/a}}
| {{n/a}}
|-
| member of pointer
| {{tt|1=a-&gt;b}}
| {{yes}}
| {{c|R* T::operator-&gt;();}}
| {{n/a}}
|-
| pointer to member of object
| {{tt|a.*b}}
| {{no}}
| {{n/a}}
| {{n/a}}
|-
| pointer to member of pointer
| {{tt|1=a-&gt;*b}}
| {{yes}}
| {{c|R&amp; T::operator-&gt;*(S b);}}
| {{c|R&amp; operator-&gt;*(T a, S b);}}
|-
| colspan=&quot;5&quot; |
:'''Notes'''&lt;br&gt;
* As with most user-defined overloads, return types should match return types provided by the built-in operators so that {{rlp|operators|the user-defined operators}} can be used in the same manner as the built-ins. However, in a user-defined operator overload, any type can be used as return type (including {{c|void}}). One exception is {{tt|operator-&gt;}}, which must return a pointer or another class with overloaded {{tt|operator-&gt;}} to be realistically usable.
|}

===Explanation===
Built-in ''subscript'' operator provides access to an object pointed-to by the {{rlp|pointer}} or {{rlp|array}} operand.

Built-in ''indirection'' operator provides access to an object or function pointed-to by the pointer operand.

Built-in ''address-of'' operator creates a pointer pointing to the object or function operand.

''Member of object'' and ''pointer to member of object'' operators provide access to a data member or member function of the class operand.

Built-in ''member of pointer'' and ''pointer to member of pointer'' operators provide access to a data member or member function of the class pointed-to by the pointer operand.

====Built-in subscript operator====
For every object type {{tt|T}} (possibly cv-qualified), the following function signature participates in overload resolution:
{{dcl begin}}
{{dcl|T&amp; operator[](T*, std::ptrdiff_t);}}
{{dcl|T&amp; operator[](std::ptrdiff_t, T*);}}
{{dcl end}}

The non-pointer operand may be any expression of integral or unscoped enumeration type, it is [[cpp/language/implicit cast|implicitly converted]] to {{lc|std::ptrdiff_t}}. The expression {{c|E1[E2]}} is exactly identical to the expression {{c|*(E1 + E2)}}, that is, the pointer operand (which may be a result of array-to-pointer conversion, and which must point to an element of some array or one past the end) is adjusted to point to another element of the same array, following the rules of [[cpp/language/operator arithmetic|pointer arithmetics]], and is then dereferenced.

When applied to an array, the subscript expression is an {{rlp|value category|lvalue}}{{rev inl|since=c++11| if the array is an lvalue, and an {{rlp|value category|xvalue}} if it isn't}}. When applied to a pointer, the subscript expression is always an lvalue.

The type {{tt|T}} is not allowed to be an {{rlp|incomplete type}}, even if the size or internal structure of {{tt|T}} is never used, as in {{c|&amp;x[0]}}.

{{example
 |
 | code=
#include &lt;iostream&gt;

int main()
{
    int a[4] = {1, 2, 3, 4};
    int* p = &amp;a[2];
    std::cout &lt;&lt; p[1] &lt;&lt; p[-1] &lt;&lt; 1[p] &lt;&lt; (-1)[p] &lt;&lt; '\n';
}
 | output=
4242
}}

====Built-in indirection operator====
For every type {{tt|T}} that is either object type (possibly cv-qualified) or function type (not const- or ref-qualified), the following function signature participates in overload resolution:
{{dcl begin}}
{{dcl|T&amp; operator*(T*);}}
{{dcl end}}

The operand of the built-in indirection operator is a pointer to object or function, and the result is the lvalue that the pointer is pointing to. A pointer to (possibly {{rlp|cv}}-qualified) {{c|void}} cannot be dereferenced. Pointers to other incomplete types can be dereferenced, but the resulting lvalue can only be used in contexts that allow an lvalue of incomplete type, e.g. when initializing a reference. 

{{example
 |
 | code=
#include &lt;iostream&gt;

int f() { return 42; }

int main()
{
    int n = 1;
    int* pn = &amp;n;

    int&amp; r = *pn;  // lvalue can be bound to a reference
    int m = *pn;   // indirection + lvalue-to-rvalue conversion

    int (*fp)() = &amp;f;
    int (&amp;fr)() = *fp; // function lvalue can be bound to a reference 
}
}}

====Built-in address-of operator====
The operand of the built-in {{tt|operator&amp;}} is either an lvalue expression of any type or the qualified name of a non-static data member or member function in some class. This operator does not participate in overload resolution. If there are no {{rlp|overload resolution#Viable functions|viable functions}}, special rules are used:
* If the operand is an lvalue expression of some type {{tt|T}}, {{tt|operator&amp;}} creates and returns a prvalue of type {{tt|T*}}, with the same cv qualification, that is pointing to the object designated by the operand. If the operand has incomplete type, the pointer can be formed, but if that incomplete type happens to be a class that defines its own {{tt|operator&amp;}}, {{rev inl|until=c++14|the behavior is undefined}} {{rev inl|since=c++14|it is unspecified whether the built-in or the overload is used}}. For the operands of type with user-defined {{tt|operator&amp;}}, {{lc|std::addressof}} may be used to obtain the true pointer.
* If the operand is the name of an overloaded function, the address may be taken only if the overload can be resolved due to context. See {{rlp|overloaded_address|Address of an overloaded function}} for details.
* If the operand is a qualified name of a non-static member, e.g. {{c|&amp;C::member}}, the result is a prvalue {{rlp|pointer#Pointers_to_member_functions|pointer to member function}} or {{rlp|pointer#Pointers_to_data_members|pointer to data member}} of type {{tt|T}} in class {{tt|C}}. Note that neither {{c|&amp;member}} nor {{c|C::member}} nor even {{c|&amp;(C::member)}} may be used to initialize a pointer to member.

{{example
 |
 | code=
void f(int) {}
void f(double) {}
struct A { int i; };
struct B { void f(); };

int main()
{
    int n = 1;
    int* pn = &amp;n; // pointer
    int* pn2 = &amp;*pn; // pn2 == pn
    int A::* mp = &amp;A::i; // pointer to data member
    void (B::*mpf)() = &amp;B::f; // pointer to member function
 
    void (*pf)(int) = &amp;f; // overload resolution due to initialization context
//  auto pf2 = &amp;f; // error: ambiguous overloaded function type
    auto pf2 = static_cast&lt;void (*)(int)&gt;(&amp;f); // overload resolution due to cast
}
}}

====Built-in member access operators====
The first operand of the {{tt|operator.}} is an expression of {{rlp|incomplete type|complete class type}} {{tt|T}}. The first operand of the built-in {{tt|operator-&gt;}} is an expression of pointer to complete class type {{tt|T*}}. The first operand of both operators is evaluated even if it is not necessary (e.g. when the second operand names a static member).

The second operand of both operators is a name of (formally, an {{rlp|identifiers#In_expressions|id-expression}} that names) a data member or member function of {{tt|T}} or of an unambiguous and accessible base class {{tt|B}} of {{tt|T}} (e.g. {{c|E1.E2}} or {{c|E1-&gt;E2}}), optionally {{rlp|identifiers#Qualified_identifiers|qualified}} (e.g. {{c|E1.B::E2}} or {{c|E1-&gt;B::E2}}), optionally using {{rlp|dependent_name|template disambiguator}} (e.g. {{c|E1.template E2}} or {{c|E1-&gt;template E2}}).

If a user-defined {{tt|operator-&gt;}} is provided, the {{tt|operator-&gt;}} is called again on the value that it returns, recursively, until an {{tt|operator-&gt;}} is reached that returns a plain pointer. After that, built-in semantics are applied to that pointer.

The expression {{c|E1-&gt;E2}} is exactly equivalent to {{c|(*E1).E2}} for built-in types; that is why the following rules address only {{c|E1.E2}}.

In the expression {{c|E1.E2}}:
@1@ if {{tt|E2}} is a {{rlp|static|static data member}}:
* if {{tt|E2}} is of reference type {{tt|T&amp;}} or {{tt|T&amp;&amp;}}, the result is an lvalue of type {{tt|T}} designating the object or function to which {{tt|E2}} refers,
* otherwise, the result is an lvalue designating that static data member.
: Essentially, {{tt|E1}} is evaluated and discarded in both cases;
@2@ if {{tt|E2}} is a {{rlp|data members|non-static data member}}:
* if {{tt|E2}} is of reference type {{tt|T&amp;}} or {{tt|T&amp;&amp;}}, the result is an lvalue of type {{tt|T}} designating the object or function to which {{tt|E2}} refers,
* otherwise, if {{tt|E1}} is an lvalue, the result is an lvalue designating that non-static data member of {{tt|E1}},
* otherwise (if {{tt|E1}} is an {{rev inl|until=c++17|rvalue}}{{rev inl|since=c++17|xvalue (which may be {{rlp|implicit_conversion#Temporary_materialization|materialized}} from prvalue)}}), the result is an {{rev inl|until=c++11|rvalue}}{{rev inl|since=c++11|xvalue}} designating that non-static data member of {{tt|E1}}.
: If {{tt|E2}} is not a mutable member, the {{rlp|cv|cv-qualification}} of the result is the union of the cv-qualifications of {{tt|E1}} and {{tt|E2}}, otherwise (if {{tt|E2}} is a mutable member), it is the union of the volatile-qualifications of {{tt|E1}} and {{tt|E2}};
@3@ if {{tt|E2}} is a {{rlp|static|static member function}}, the result is an lvalue designating that static member function. Essentially, {{tt|E1}} is evaluated and discarded in this case;
@4@ if {{tt|E2}} is a {{rlp|member functions|non-static member function}} including a {{rlp|destructor}}, the result is a special kind of prvalue designating that non-static member function of {{tt|E1}} that can only be used as the left-hand operand of a member function call operator, and for no other purpose;
@5@ if {{tt|E2}} is a member enumerator, the result is a prvalue equal to that member enumerator of {{tt|E1}};
@6@ if {{tt|E2}} is a {{rlp|nested classes|nested type}}, the program is ill-formed (won't compile);
@7@ if {{tt|E1}} is a {{rlp|type|scalar type}} and {{tt|E2}} is a {{ttb|~}} followed by the {{rlp|type#Type naming|type name}} or {{rlp|decltype|decltype specifier}} designating the same type (minus cv-qualifications), optionally {{rlp|identifiers#Qualified_identifiers|qualified}}, the result is a special kind of prvalue that can only be used as the left-hand operand of a function call operator, and for no other purpose. The resulting function call expression is called ''pseudo destructor call''. It takes no arguments, returns void, and performs no action other than initial evaluation of {{tt|E1}}. This is the only case where the left-hand operand of {{tt|operator.}} has non-class type. Allowing pseudo destructor call makes it possible to write code without having to know if a destructor exists for a given type.

{{example
 |
 | code=
#include &lt;iostream&gt;

struct P
{
    template&lt;typename T&gt;
    static T* ptr() { return new T; }
};

template&lt;typename T&gt;
struct A
{
    A(int n): n(n) {}
    int n;
    static int sn;
    int f() { return 10 + n; }
    static int sf() { return 4; }
    class B {};
    enum E {RED = 1, BLUE = 2};
 
    void g()
    {
        typedef int U;
        // keyword template needed for a dependent template member
        int* p = T().template ptr&lt;U&gt;();
        p-&gt;~U(); // U is int, calls int's pseudo destructor
        delete p;
    }
};
template&lt;&gt; int A&lt;P&gt;::sn = 2;

int main()
{
    A&lt;P&gt; a(1);
    std::cout &lt;&lt; a.n &lt;&lt; ' '
              &lt;&lt; a.sn &lt;&lt; ' '   // A::sn also works
              &lt;&lt; a.f() &lt;&lt; ' ' 
              &lt;&lt; a.sf() &lt;&lt; ' ' // A::sf() also works
//            &lt;&lt; a.B &lt;&lt; ' '    // error: nested type not allowed
              &lt;&lt; a.RED &lt;&lt; ' '; // enumerator
}
 | output=
1 2 11 4 1
}}

====Built-in pointer-to-member access operators====
The first operand of the {{tt|operator.*}} is an expression of class type {{tt|T}}. The first operand of the {{tt|operator-&gt;*}} is an expression of type pointer to class type {{tt|T*}}.

The second operand of both operators is an expression of type pointer to member of {{tt|T}} or pointer to member of an unambiguous and accessible base class {{tt|B}} of {{tt|T}}.

For every combination of types {{tt|D}}, {{tt|B}}, {{tt|R}}, where class type {{tt|B}} is either the same class as {{tt|D}} or an unambiguous and accessible base class of {{tt|D}}, and {{tt|R}} is either an object or function type, the following function signature participates in overload resolution:
{{dcl begin}}
{{dcl|R&amp; operator-&gt;*(D*, R B::*);}}
{{dcl end}}
where both operands may be cv-qualified, in which case the return type's cv-qualification is the union of the cv-qualification of the operands.

The expression {{c|E1-&gt;*E2}} is exactly equivalent to {{c|(*E1).*E2}} for built-in types; that is why the following rules address only {{c|E1.*E2}}.

In the expression {{c|E1.*E2}}:
@1@ if {{tt|E2}} is a pointer to data member,
* if {{tt|E1}} is an lvalue, the result is an lvalue designating that data member,
* otherwise (if {{tt|E1}} is an {{rev inl|until=c++17|rvalue}}{{rev inl|since=c++17|xvalue (which may be {{rlp|implicit_conversion#Temporary_materialization|materialized}}from prvalue)}}), the result is an {{rev inl|until=c++11|rvalue}}{{rev inl|since=c++11|xvalue}} designating that data member;
@2@ if {{tt|E2}} is a pointer to member function, the result is a special kind of prvalue designating that member function that can only be used as the left-hand operand of a member function call operator, and for no other purpose;
@3@ cv-qualification rules are the same as for member of object operator, with one additional rule: a pointer to member that refers to a mutable member cannot be used to modify that member in a const object;
@4@ if {{tt|E2}} is a null pointer-to-member value, the behavior is undefined;
@5@ if the {{rlp|type#Dynamic type|dynamic type}} of {{tt|E1}} does not contain the member to which {{tt|E2}} refers, the behavior is undefined;
@6@ if {{tt|E1}} is an rvalue and {{tt|E2}} points to a member function with ref-qualifier &amp;, the program is ill-formed;
@7@ if {{tt|E1}} is an lvalue and {{tt|E2}} points to a member function with ref-qualifier &amp;&amp;, the program is ill-formed.

{{example
 |
 | code=
#include &lt;iostream&gt;

struct S
{
    S(int n): mi(n) {}
    mutable int mi;
    int f(int n) { return mi + n; }
};

struct D: public S
{
    D(int n): S(n) {}
};

int main()
{
    int S::* pmi = &amp;S::mi;
    int (S::* pf)(int) = &amp;S::f;

    const S s(7);
//  s.*pmi = 10; // error: cannot modify through mutable
    std::cout &lt;&lt; s.*pmi &lt;&lt; '\n';

    D d(7); // base pointers work with derived object
    D* pd = &amp;d;
    std::cout &lt;&lt; (d.*pf)(7) &lt;&lt; ' '
              &lt;&lt; (pd-&gt;*pf)(8) &lt;&lt; '\n';
}
 | output=
7
14 15
}}

===Standard library===
Subscript operator is overloaded by many standard container classes
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_at}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator_at}}
{{dsc inc | cpp/string/basic_string/dsc operator_at}}
{{dsc inc | cpp/container/dsc operator_at | array}}
{{dsc inc | cpp/container/dsc operator_at | deque}}
{{dsc inc | cpp/container/dsc operator_at | vector}}
{{dsc inc | cpp/container/dsc operator_at | map}}
{{dsc inc | cpp/container/dsc operator_at | unordered_map}}
{{dsc inc | cpp/iterator/reverse_iterator/dsc operator_at}}
{{dsc inc | cpp/iterator/adaptor/dsc operator_at | move_iterator}}
{{dsc inc | cpp/numeric/valarray/dsc operator_at}}
{{dsc inc | cpp/regex/match_results/dsc operator_at}}
{{dsc end}}

The indirection and member operators are overloaded by many iterators and smart pointer classes
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator*}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator*}}
{{dsc inc | cpp/memory/auto_ptr/dsc operator*}}
{{dsc inc | cpp/memory/raw_storage_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/reverse_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/inserter/dsc operator* | back_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator* | front_insert_iterator}}
{{dsc inc | cpp/iterator/inserter/dsc operator* | insert_iterator}}
{{dsc inc | cpp/iterator/adaptor/dsc operator* | move_iterator}}
{{dsc inc | cpp/iterator/istream_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/ostream_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/istreambuf_iterator/dsc operator*}}
{{dsc inc | cpp/iterator/ostreambuf_iterator/dsc operator*}}
{{dsc inc | cpp/regex/regex_iterator/dsc operator*}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc operator*}}
{{dsc end}}

No standard library classes overload {{tt|operator&amp;}}. The best known example of overloaded {{tt|operator&amp;}} is the Microsoft COM class [http://msdn.microsoft.com/en-us/library/31k6d0k7(v=vs.100).aspx CComPtr], although it can also appear in EDSLs such as [http://www.boost.org/doc/libs/release/libs/spirit/doc/html/spirit/qi/reference/operator/and_predicate.html boost.spirit]

No standard library classes overload {{tt|operator-&gt;*}}. It was suggested that it could be part of [http://www.aristeia.com/Papers/DDJ_Oct_1999.pdf smart pointer interface], and in fact is used in that capacity by actors in [http://www.boost.org/doc/libs/release/libs/phoenix/doc/html/phoenix/modules/operator.html#phoenix.modules.operator.member_pointer_operator boost.phoenix], but is more common in EDSLs such as [https://github.com/schlangster/cpp.react/blob/master/include/react/Signal.h#L557 cpp.react].

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1213|std=C++11|before=subscripting an array rvalue resulted in  lvalue|after=reclassified as xvalue}}
{{dr list end}}

===See also===
[[cpp/language/operator precedence|Operator precedence]]

[[cpp/language/operators|Operator overloading]]

{{cpp/language/operators}}

[[de:cpp/language/operator member access]]
[[es:cpp/language/operator member access]]
[[fr:cpp/language/operator member access]]
[[it:cpp/language/operator member access]]
[[ja:cpp/language/operator member access]]
[[pt:cpp/language/operator member access]]
[[ru:cpp/language/operator member access]]
[[zh:cpp/language/operator member access]]</text>
      <sha1>7nljuxhhx4ne7i1cenzewsc2y12duw3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator other</title>
    <ns>0</ns>
    <id>708</id>
    <revision>
      <id>91940</id>
      <parentid>91753</parentid>
      <timestamp>2017-03-31T20:13:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="18761">{{title|Other operators}}
{{cpp/language/expressions/navbar}}
{| class=&quot;wikitable&quot; style=&quot;font-size:85%;&quot;
|-
! rowspan=&quot;2&quot; | Operator name
! rowspan=&quot;2&quot; | Syntax
! rowspan=&quot;2&quot; | {{rlp|operators|Over&amp;#8203;load&amp;#8203;able}}
! colspan=&quot;2&quot; | Prototype examples (for {{c|class T}})
|-
! Inside class definition
! Outside class definition
|-
| function call
| {{tt|a(a1, a2)}}
| {{yes}}
| {{c|R T::operator()(Arg1 &amp;a1, Arg2 &amp;a2, ... ...);}}
| {{n/a}}
|-
| comma
| {{tt|a, b}}
| {{yes}}
| {{c|T2&amp; T::operator,(T2 &amp;b);}}
| {{c|T2&amp; operator,(const T &amp;a, T2 &amp;b);}}
|-
| ternary conditional
| {{tt|a ? b : c}}
| {{no}}
| {{n/a}}
| {{n/a}}
|}

===Explanation===

The ''function call'' operator provides function semantics for any object.

The ''ternary conditional'' operator checks the boolean value of the first expression and,  depending on the resulting value, evaluates and returns either the second or the third expression.

====Built-in function call operator====

A function call expression, such as {{c|E(A1, A2, A3)}}, consists of an expression that names the {{rlp|functions|function}}, {{tt|E}}, followed by a possibly empty list of expressions {{tt|A1, A2, A3, ...}}, in parentheses.

The expression that names the function can be
@a@ lvalue expression that refers to a function
@b@ pointer to function
@c@ explicit [[cpp/language/operator_member_access|class member access]] expression that selects a member function
@d@ implicit class member access expression, e.g. member function name used within another member function.

The function (or member) name specified by {{tt|E}} can be overloaded, [[cpp/language/overload_resolution|overload resolution]] rules used to decide which overload is to be called.

If {{tt|E}} specifies a member function, it may be virtual, in which case the final overrider of that function will be called, using dynamic dispatch at runtime.

To call the function, 
{{rev begin}}
{{rev|until=c++17|
The expression {{tt|E}} as well as all expressions {{tt|A1}}, {{tt|A2}}, {{tt|A3}}, etc, provided as arguments are evaluated in arbitrary order, {{rlp|eval_order|unsequenced}} with respect to each other.
}}
{{rev|since=c++17|
The expression {{tt|E}} is sequenced before each of the expressions {{tt|A1}}, {{tt|A2}}, {{tt|A3}} as well as default arguments, if any. The argument expressions are evaluated in arbitrary order, {{rlp|eval order|indeterminately sequenced}} with respect to each other.
}}
{{rev end}}
Each function parameter is initialized with its corresponding argument after [[cpp/language/implicit_cast|implicit conversion]] if necessary. If the call is made to a member function, then the {{c|this}} pointer to current object is converted as if by explicit cast to the {{c|this}} pointer expected by the function. The initialization and destruction of each parameter occurs in the context of the caller, which means, for example, that if constructor of a parameter throws an exception, the exception handlers defined within the function, even as a function-try block, are not considered. If the function is a variadic function, [[cpp/utility/variadic#Default conversions|default argument promotions]] are applied to all arguments matched by the ellipsis parameter. It is implementation-defined whether the {{rlp|lifetime}} of a parameter ends when the function in which it is defined returns or at the end of the enclosing full-expression.

The return type of a function call expression is the return type of the chosen function, decided using static binding (ignoring the {{tt|virtual}} keyword), even if the overriding function that's actually called returns a different type. This allows the overriding functions to return pointers or references to classes that are derived from the return type returned by the base function, i.e. C++ supports [[enwiki:Covariant return type|covariant return types]]. If {{tt|E}} specifies a destructor, the return type is {{c|void}}.

{{rev begin}}
{{rev|since=c++17|
When an object of class type X is passed to or returned from a function, if each copy constructor, move constructor, and destructor of X is either trivial or deleted, and X has at least one non-deleted copy or move constructor, implementations are permitted to create a temporary object to hold the function parameter or result object.

The temporary object is constructed from the function argument or return value, respectively, and the function's parameter or return object is initialized as if by using the non-deleted trivial constructor to copy the temporary (even if that constructor is inaccessible or would not be selected by overload resolution to perform a copy or move of the object).

This allows objects of small class types, such as {{lc|std::complex}} or {{tt|gsl::span}}, to be passed to or returned from functions in registers
}}
{{rev end}}

The value category of a function call expression is lvalue if the function returns an lvalue reference or an rvalue reference to function, is an xvalue if the function returns an rvalue reference to object, and is a prvalue otherwise. If the function call expression is a prvalue of object type, it must have complete type except {{rev inl|since=c++17|when the prvalue is not materialized, such as}} when used as the operand of {{rlp|decltype}} (or as the right operand of a [[#Built-in comma operator|built-in comma operator expression]] that is the operand of {{tt|decltype}}) .

Function call expression is similar in syntax to value initialization {{c|T()}}, to [[cpp/language/explicit_cast|function-style cast]] expression {{c|T(A1)}}, and to direct initialization of a temporary {{c|T(A1, A2, A3, ...)}}, where {{tt|T}} is the name of a type.

{{example
 |
 | code=
#include &lt;cstdio&gt;
struct S
{
    int f1(double d) {
        printf(&quot;%f \n&quot;, d); // variable argument function call
    }
    int f2() {
        f1(7); // member function call, same as this-&gt;f1()
               // integer argument converted to double
    }
};
void f() {
   puts(&quot;function called&quot;); // function call
}
int main()
{
    f(); // function call
    S s;
    s.f2(); // member function call
}
 | output=
function called
7.000000 
}}

====Built-in comma operator====

In a comma expression {{c|E1, E2}}, the expression {{tt|E1}} is evaluated, its result is discarded, and its side effects are completed before evaluation of the expression {{tt|E2}} begins {{rev inl|until=c++17|(note that a user-defined {{tt|operator,}} cannot guarantee sequencing)}}. 

The type, value, and value category of the result of the comma expression are exactly the type, value, and value category of the second operand, {{tt|E2}}. If {{tt|E2}} is a temporary {{rev inl|since=c++17|expression}}, the result of the expression is that temporary {{rev inl|since=c++17|expression}}. If {{tt|E2}} is a bit-field, the result is a bit-field.

The comma in various comma-separated lists, such as function argument lists ({{c|f(a, b, c)}}) and initializer lists {{c|1=int a[] = {1,2,3} }}, is not the comma operator. If the comma operator needs to be used in such contexts, it has to be parenthesized: {{c|f(a, (n++, n+b), c)}}

{{example
 |
 | code=
#include &lt;iostream&gt;
int main()
{
    int n = 1;
    int m = (++n, std::cout &lt;&lt; &quot;n = &quot; &lt;&lt; n &lt;&lt; '\n', ++n, 2*n);
    std::cout &lt;&lt; &quot;m = &quot; &lt;&lt; (++m, m) &lt;&lt; '\n';
}
 | output=
n = 2
m = 7
}}

====Conditional operator====

The first operand of the conditional operator is evaluated and {{rlp|implicit_cast|contextually converted}} to {{c|bool}}. After both the value evaluation and all side effects of the first operand are completed, if the result was {{c|true}}, the second operand is evaluated. If the result was {{c|false}}, the third operand is evaluated.

The type and value category of the conditional expression {{c|E1 ? E2 : E3}} are determined according to the following rules:

@1@ If either {{tt|E2}} or {{tt|E3}} has type {{c|void}}, then one of the following must be true, or the program is ill-formed:
:@1.1@ Either {{tt|E2}} or {{tt|E3}} (but not both) is a (possibly parenthesized) {{rlp|throw|throw-expression}}. The result of the conditional operator has the type and the value category of the other expression. If the other expression is a {{rlp|bit field}}, the result is a bit field. Such conditional operator was commonly used in C++11 [[cpp/language/constexpr|constexpr programming]] prior to C++14.
:@1.2@ Both {{tt|E2}} and {{tt|E3}} are of type {{c|void}} (including the case when they are both throw-expressions). The result is a prvalue of type {{c|void}}.

{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|1932}}
@2@ Otherwise, if {{tt|E2}} or {{tt|E3}} are glvalue bit-fields of the same value category and of types cv1 T and cv2 T, respectively, the operands are considered to be of type cv T for the remainder of this section, where cv is the union of cv1 and cv2.}}
{{rev end}}
@3@ Otherwise, if {{tt|E2}} and {{tt|E3}} have different types, at least one of which is a (possibly cv-qualified) class type, or both are glvalues of the same value category and have the same type except for cv-qualification, then an attempt is made to form an {{rlp|implicit conversion|implicit conversion sequence}} {{rev inl|since=c++14|{{mark unreviewed dr|CWG|1895}}ignoring member access, whether an operand is a bit-field, or whether a conversion function is deleted}}. from each of the operands to the ''target type'' determined by the other operand, as described below.  An operand (call it {{tt|X}}) of type {{tt|TX}} can be converted the ''target type'' of the other operand (call it {{tt|Y}}) of type {{tt|TY}} as follows:
:@3.1@ If {{tt|Y}} is an lvalue, the target type is {{tt|TY&amp;}}, and the reference must bind directly to an lvalue;
:@3.2@ If {{tt|Y}} is an xvalue, the target type is {{tt|TY&amp;&amp;}}, and the reference must bind directly;
:@3.3@ If {{tt|Y}} is a prvalue, or if neither the above conversion sequences can be formed and at least one of {{tt|TX}} and {{tt|TY}} is a (possibly cv-qualified) class type, &lt;!-- this is a simplified version of expr.cond/4.3 per  https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/hFSv84WY14o which notes that if 4.3.1 is satisfied, T2 is class type and decay conversions do nothing to it, so it trivially satisfies 4.3.2 as well --&gt; the target type is the type that {{tt|Y}} would have after applying the lvalue-to-rvalue, array-to-pointer, and function-to-pointer {{rlp|implicit conversion|standard conversions}}
:@3.4@ If both sequences can be formed (E2 to target type of E3 and E3 to target type of E2), or only one can be formed but it is the ambiguous conversion sequence, the program is ill-formed.
:@3.5@ If exactly one conversion sequence can be formed (note that it may still be ill-formed e.g. due to access violation), that conversion sequence is applied and the converted operand is used in place of the original operand for the remained of this description (starting at {{v|4}})
:@3.6@ If no conversion sequence can be formed, the operands are left unchanged for the remainder of this description
@4@ If {{tt|E2}} and {{tt|E3}} are glvalues of the same type and the same value category, then the result has the same type and value category, and is a bit-field if at least one of {{tt|E2}} and {{tt|E3}} is a bit-field.
@5@ Otherwise, the result is a prvalue. If {{tt|E2}} and {{tt|E3}} do not have the same type, and either has (possibly cv-qualified) class type, overload resolution is performed using the built-in candidates below to attempt to convert the operands to built-in types. If the overload resolution fails, the program is ill-formed. Otherwise, the selected conversions are applied and the converted operands are used in place of the original operands for step 6.
@6@ The lvalue-to-rvalue, array-to-pointer, and function-to-pointer conversions are applied to the second and third operands. Then, 
:@6.1@ If both {{tt|E2}} and {{tt|E3}} now have the same type, the result is a prvalue of that type {{rev inl|until=c++17|designating a temporary object}}{{rev inl|since=c++17|whose result object is}} copy-initialized from whatever operand was selected after evaluating {{tt|E1}}.
:@6.2@ If both {{tt|E2}} and {{tt|E3}} have arithmetic or enumeration type: the [[cpp/language/operator_arithmetic#conversions|''usual arithmetic conversions'']] are applied to bring them to ''common type'', and that type is the result.
:@6.3@ If both {{tt|E2}} and {{tt|E3}} are pointers, or one is a pointer and the other is a null pointer constant, then pointer conversions and qualification conversions are applied to bring them to common type, and that type is the result.
:@6.4@ If both {{tt|E2}} and {{tt|E3}} are pointers to members, or one is a pointer to member and the other is a null pointer constant, then pointer-to-member conversions and qualification conversions are applied to bring them to common type, and that type is the result.
:@6.5@ If both {{tt|E2}} and {{tt|E3}} are null pointer constants, and at least one of which is of type {{lc|std::nullptr_t}}, then the result's type is {{tt|std::nullptr_t}}.
:@6.6@ In all other cases, the program is ill-formed.

{{todo|any chance to make this more readable without losing the fine point? At the very least, a micro-example for each bullet point would help tremendously}}

For every pair of promoted arithmetic types L and R and for every type P, where P is a pointer, pointer-to-member, or scoped enumeration type, the following function signatures participate in the overload resolution performed in step 5 of the rules above:
{{dcl begin}}
{{dcl | LR operator?:(bool, L, R );}}
{{dcl | P operator?:(bool, P, P );}}
{{dcl end}}
where LR is the result of [[cpp/language/operator_arithmetic|usual arithmetic conversions]] performed on {{tt|L}} and {{tt|R}}. The operator “?:” cannot be overloaded, these function signatures only exist for the purpose of overload resolution.

The return type of a conditional operator is also accessible as the binary type trait {{lc|std::common_type}}.

{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;stdexcept&gt;
#include &lt;iostream&gt;
struct Node
{
    Node* next;
    int data;
    // deep-copying copy constructor
    Node(const Node&amp; other)
      : next(other.next ? new Node(*other.next) : NULL)
      , data(other.data)
    {}
    Node(int d) : next(NULL), data(d) {}
    ~Node() { delete next ; }
};
int main()
{   
    // simple rvalue example
    int n = 1&gt;2 ? 10 : 11;  // 1&gt;2 is false, so n = 11
    // simple lvalue example
    int m = 10; 
    (n == m ? n : m) = 7; // n == m is false, so m = 7
    // throw example
    std::string str = 2+2==4 ? &quot;ok&quot; : throw std::logic_error(&quot;2+2 != 4&quot;);
    std::cout &lt;&lt; &quot;n = &quot; &lt;&lt; n &lt;&lt; &quot;\nm = &quot; &lt;&lt; m &lt;&lt; &quot;\nstr = &quot; &lt;&lt; str; //output the result
}
 | output=
n = 11
m = 7
str = ok
}}

===Standard library===
Many classes in the standard library overload {{tt|operator()}} to be used as function objects.
{{dsc begin}}
{{dsc inc | cpp/memory/default_delete/dsc operator()}}
{{dsc inc | cpp/utility/functional/plus/dsc operator()}}
{{dsc inc | cpp/utility/functional/minus/dsc operator()}}
{{dsc inc | cpp/utility/functional/multiplies/dsc operator()}}
{{dsc inc | cpp/utility/functional/divides/dsc operator()}}
{{dsc inc | cpp/utility/functional/modulus/dsc operator()}}
{{dsc inc | cpp/utility/functional/negate/dsc operator()}}
{{dsc inc | cpp/utility/functional/equal_to/dsc operator()}}
{{dsc inc | cpp/utility/functional/not_equal_to/dsc operator()}}
{{dsc inc | cpp/utility/functional/greater/dsc operator()}}
{{dsc inc | cpp/utility/functional/less/dsc operator()}}
{{dsc inc | cpp/utility/functional/greater_equal/dsc operator()}}
{{dsc inc | cpp/utility/functional/less_equal/dsc operator()}}
{{dsc inc | cpp/utility/functional/logical_and/dsc operator()}}
{{dsc inc | cpp/utility/functional/logical_or/dsc operator()}}
{{dsc inc | cpp/utility/functional/logical_not/dsc operator()}}
{{dsc inc | cpp/utility/functional/bit_and/dsc operator()}}
{{dsc inc | cpp/utility/functional/bit_or/dsc operator()}}
{{dsc inc | cpp/utility/functional/bit_xor/dsc operator()}}
{{dsc inc | cpp/utility/functional/unary_negate/dsc operator()}}
{{dsc inc | cpp/utility/functional/binary_negate/dsc operator()}}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc operator()}}
{{dsc inc | cpp/utility/functional/function/dsc operator()}}
{{dsc inc | cpp/locale/locale/dsc operator()}}
{{dsc inc | cpp/container/value_compare/dsc operator() | map }}
{{dsc inc | cpp/container/value_compare/dsc operator() | multimap }}
{{dsc inc | cpp/thread/packaged_task/dsc operator()}}
{{dsc inc | cpp/numeric/random/engine/dsc operator() |linear_congruential_engine}} &lt;!-- and all other engines --&gt;
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | uniform_int_distribution}} &lt;!-- and all other distributions --&gt;
&lt;!-- also the deprecated pointer_to_unary_function, pointer_to_binary_function, mem_fun_t, mem_fun_ref_t, mem_fun1_ref_t, const_mem_fun_t, const_mem_fun1_t, const_mem_fun_ref_t, const_mem_fun1_ref_t, binder1st, binder2nd --&gt;
{{dsc end}}

The comma operator is not overloaded by any class in the standard library. The boost library uses {{tt|operator,}} in [http://www.boost.org/doc/libs/release/libs/assign/doc/index.html#intro boost.assign], boost.spirit, and other libraries. The database access library [http://soci.sourceforge.net/doc.html SOCI] also overloads {{tt|operator,}}.

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1550|std=C++98|before=parenthesized throw-expression not allowed in ?: if other operand is non-void|after=parenthesized throw-expressions accepted}}
{{dr list item|wg=cwg|dr=1560|std=C++98|before=void operand in ?: caused gratuitous l-to-r conversion on the other operand,&lt;br/&gt; always resulting in rvalue|after=?:with a void can be lvalue}}
{{dr list item|wg=cwg|dr=1932|std=C++14|before=same-type bit fields were missing in ?:|after=handled by underlying types}}
{{dr list item|wg=cwg|dr=1895|std=C++14|before=unclear if deleted or inaccessible conversion function prevents conversion in ?:,&lt;br/&gt; and conversions from base class to derived class prvalue were not considered&lt;!-- or, as summarized in https://github.com/llvm-mirror/clang/blob/0d385d/test/SemaCXX/conditional-expr.cpp#L115, &quot;for rvalues, hierarchy takes precedence over other conversions&quot; --&gt;|after=handled like overload resolution}}
{{dr list end}}

===See also===

[[cpp/language/operator precedence | Operator precedence]]

[[cpp/language/operators | Operator overloading]]

{{cpp/language/operators}}

[[de:cpp/language/operator other]]
[[es:cpp/language/operator other]]
[[fr:cpp/language/operator other]]
[[it:cpp/language/operator other]]
[[ja:cpp/language/operator other]]
[[pt:cpp/language/operator other]]
[[ru:cpp/language/operator other]]
[[zh:cpp/language/operator other]]</text>
      <sha1>f0wnvfpcva7a8uveqvnmysrf5trdyyg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operator precedence</title>
    <ns>0</ns>
    <id>709</id>
    <revision>
      <id>87905</id>
      <parentid>87195</parentid>
      <timestamp>2016-10-12T15:25:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>expanded overloading note to demonstrate stream I/O</comment>
      <text xml:space="preserve" bytes="11154">{{title|C++ Operator Precedence}}
{{cpp/language/expressions/navbar}}

The following table lists the precedence and associativity of C++ operators. Operators are listed top to bottom, in descending precedence. 

{| class=&quot;wikitable&quot;
|-
! style=&quot;text-align: left&quot; | Precedence
! style=&quot;text-align: left&quot; | Operator
! style=&quot;text-align: left&quot; | Description
! style=&quot;text-align: left&quot; | Associativity
|-
! 1
| &lt;code&gt;::&lt;/code&gt;
| {{rlp|identifiers#Qualified_identifiers|Scope resolution}}
| style=&quot;vertical-align: top&quot; rowspan=&quot;6&quot; | Left-to-right
|-
! rowspan=5| 2
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;a++&lt;/code&gt;   &lt;code&gt;a--&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | Suffix/postfix {{rlp|operator incdec|increment and decrement}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;''type''()&lt;/code&gt;   &lt;code&gt;''type''{}&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|explicit cast|Functional cast}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;a()&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_other#Built-in_function_call_operator|Function call}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;a[]&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_member_access#Built-in_subscript_operator|Subscript}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;.&lt;/code&gt;   &lt;code&gt;-&gt;&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_member_access#Built-in_member_access_operators|Member access}}
|-
! rowspan=9| 3
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;++a&lt;/code&gt;   &lt;code&gt;--a&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | Prefix {{rlp|operator incdec|increment and decrement}}
| style=&quot;vertical-align: top&quot; rowspan=&quot;9&quot; | Right-to-left
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;+a&lt;/code&gt;   &lt;code&gt;-a&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | Unary {{rlp|operator_arithmetic#Unary_arithmetic_operators|plus and minus}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;!&lt;/code&gt;   &lt;code&gt;~&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator logical|Logical NOT}} and {{rlp|operator_arithmetic#Bitwise_logic_operators|bitwise NOT}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;(''type'')&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|explicit cast|C-style cast}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;*a&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_member_access#Built-in_indirection_operator|Indirection}} (dereference)
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;&amp;a&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_member_access#Built-in_address-of_operator|Address-of}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;sizeof&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|sizeof|Size-of}}&lt;ref group=&quot;note&quot;&gt;The operand of {{tt|sizeof}} can't be a C-style type cast: the expression {{tt|sizeof (int) * p}} is unambiguously interpreted as {{tt|(sizeof(int)) * p}}, but not {{tt|sizeof((int)*p)}}.&lt;/ref&gt;
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;new&lt;/code&gt;   &lt;code&gt;new[]&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|new|Dynamic memory allocation}}
|-
| style=&quot;border-top-style: none&quot; | &lt;code&gt;delete&lt;/code&gt;   &lt;code&gt;delete[]&lt;/code&gt;
| style=&quot;border-top-style: none&quot; | {{rlp|delete|Dynamic memory deallocation}}
|-
! 4
| &lt;code&gt;.*&lt;/code&gt;   &lt;code&gt;-&gt;*&lt;/code&gt;
| {{rlp|operator_member_access#Built-in_pointer-to-member_access_operators|Pointer-to-member}}
| style=&quot;vertical-align: top&quot; rowspan=&quot;12&quot; | Left-to-right
|-
! 5
| &lt;code&gt;a*b&lt;/code&gt;   &lt;code&gt;a/b&lt;/code&gt;   &lt;code&gt;a%b&lt;/code&gt;
| {{rlp|operator_arithmetic#Multiplicative_operators|Multiplication, division, and remainder}}
|-
! 6
| &lt;code&gt;a+b&lt;/code&gt;   &lt;code&gt;a-b&lt;/code&gt;
| {{rlp|operator_arithmetic#Additive_operators|Addition and subtraction}}
|-
! 7
| &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;   &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;
| Bitwise {{rlp|operator_arithmetic#Bitwise_shift_operators|left shift and right shift}}
|-
! rowspan=2| 8
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;&amp;lt;&lt;/code&gt;   &lt;code&gt;&amp;lt;=&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | For {{rlp|operator_comparison|relational operators}} &lt; and ≤ respectively
|-
| style=&quot;border-top-style: none&quot; | &lt;code&gt;&amp;gt;&lt;/code&gt;   &lt;code&gt;&amp;gt;=&lt;/code&gt;
| style=&quot;border-top-style: none&quot; | For {{rlp|operator_comparison|relational operators}} &gt; and ≥ respectively
|-
! 9
| &lt;code&gt;==&lt;/code&gt;   &lt;code&gt;!=&lt;/code&gt;
| For {{rlp|operator_comparison|relational operators}} = and ≠ respectively
|-
! 10
| &lt;code&gt;a&amp;b&lt;/code&gt;
| {{rlp|operator_arithmetic#Bitwise_logic_operators|Bitwise AND}}
|-
! 11
| &lt;code&gt;^&lt;/code&gt;
| {{rlp|operator_arithmetic#Bitwise_logic_operators|Bitwise XOR}} (exclusive or)
|-
! 12
| &lt;code&gt;&lt;nowiki&gt;|&lt;/nowiki&gt;&lt;/code&gt;
| {{rlp|operator_arithmetic#Bitwise_logic_operators|Bitwise OR}} (inclusive or)
|-
! 13
| &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;
| {{rlp|operator_logical|Logical AND}}
|-
! 14
| &lt;code&gt;&lt;nowiki&gt;||&lt;/nowiki&gt;&lt;/code&gt;
| {{rlp|operator_logical|Logical OR}}
|-
! rowspan=7| 15
| style=&quot;border-bottom-style: none&quot; | &lt;code&gt;a?b:c&lt;/code&gt;
| style=&quot;border-bottom-style: none&quot; | {{rlp|operator_other#Conditional_operator|Ternary conditional}}&lt;ref group=&quot;note&quot;&gt;The expression in the middle of the conditional operator (between {{ttb|?}} and {{ttb|:}}) is parsed as if parenthesized: its precedence relative to {{tt|?:}} is ignored.&lt;/ref&gt;
| style=&quot;vertical-align: top&quot; rowspan=&quot;7&quot; | Right-to-left
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;throw&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|throw|throw operator}}
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;=&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_assignment#Builtin_direct_assignment|Direct assignment}} (provided by default for C++ classes)
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;+=&lt;/code&gt;   &lt;code&gt;-=&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_assignment#Builtin_compound_assignment|Compound assignment}} by sum and difference
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;*=&lt;/code&gt;   &lt;code&gt;/=&lt;/code&gt;   &lt;code&gt;%=&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_assignment#Builtin_compound_assignment|Compound assignment}} by product, quotient, and remainder
|-
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | &lt;code&gt;&amp;lt;&amp;lt;=&lt;/code&gt;   &lt;code&gt;&amp;gt;&amp;gt;=&lt;/code&gt;
| style=&quot;border-bottom-style: none; border-top-style: none&quot; | {{rlp|operator_assignment#Builtin_compound_assignment|Compound assignment}} by bitwise left shift and right shift
|-
| style=&quot;border-top-style: none&quot; | &lt;code&gt;&amp;amp;=&lt;/code&gt;   &lt;code&gt;^=&lt;/code&gt;   &lt;code&gt;&lt;nowiki&gt;|=&lt;/nowiki&gt;&lt;/code&gt;
| style=&quot;border-top-style: none&quot; | {{rlp|operator_assignment#Builtin_compound_assignment|Compound assignment}} by bitwise AND, XOR, and OR
|-
! 16 
| &lt;code&gt;,&lt;/code&gt;
| {{rlp|operator_other#Built-in_comma_operator|Comma}}
| Left-to-right
|}
&lt;references group=&quot;note&quot; /&gt;

When parsing an expression, an operator which is listed on some row of the table above with a precedence will be bound tighter (as if by parentheses) to its arguments than any operator that is listed on a row further below it with a lower precedence. For example, the expressions {{c|std::cout &lt;&lt; a &amp; b}} and  {{c|*p++}} are parsed as {{c|(std::cout &lt;&lt; a) &amp; b}} and {{c|*(p++)}}, and not as {{c|std::cout &lt;&lt; (a &amp; b)}} or {{c|(*p)++}}.

Operators that have the same precedence are bound to their arguments in the direction of their associativity. For example, the expression {{c|1=a = b = c}} is parsed as {{c|1=a = (b = c)}}, and not as {{c|1=(a = b) = c}} because of right-to-left associativity of assignment, but {{c|a + b - c}} is parsed {{c|(a + b) - c}} and not {{c|a + (b - c)}} because of left-to-right associativity of addition and subtraction.

Associativity specification is redundant for unary operators and is only shown for completeness: unary prefix operators always associate right-to-left ({{c|delete ++*p}} is {{c|delete(++(*p))}}) and unary postfix operators always associate left-to-right ({{c|a[1][2]++}} is {{c|((a[1])[2])++}}). Note that the associativity is meaningful for member access operators, even though they are grouped with unary postfix operators: {{c|a.b++}} is parsed {{c|(a.b)++}} and not {{c|a.(b++)}}.

Operator precedence is unaffected by {{rlp|operators|operator overloading}}. For example, {{c|std::cout &lt;&lt; a ? b : c;}} parses as {{c|(std::cout &lt;&lt; a) ? b : c;}} because the precedence of arithmetic left shift is higher than the conditional operator.

===Notes===
Precedence and associativity are compile-time concepts and are independent from [[cpp/language/eval_order|order of evaluation]], which is a runtime concept.

The standard itself doesn't specify precedence levels. They are derived from the grammar.

{{ltt|cpp/language/const_cast}}, {{ltt|cpp/language/static_cast}}, {{ltt|cpp/language/dynamic_cast}}, {{ltt|cpp/language/reinterpret_cast}}, {{ltt|cpp/language/typeid}}, {{ltt|cpp/language/sizeof...}}, {{ltt|cpp/language/noexcept}} and {{ltt|cpp/language/alignof}} are not included since they are never ambiguous.

Some of the operators have [[cpp/language/operator_alternative|alternate spellings]] (e.g., {{c|and}} for &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;, {{c|or}} for &lt;code&gt;&lt;nowiki&gt;||&lt;/nowiki&gt;&lt;/code&gt;, {{c|not}} for &lt;code&gt;!&lt;/code&gt;, etc.).

Relative precedence of the ternary conditional and assignment operators differs between C and C++: in C, assignment is not allowed on the right-hand side of a ternary conditional operator, so {{c|1=e = a &lt; d ? a++ : a = d}} cannot be parsed. Many C compilers use a modified grammar where {{tt|?:}} has higher precedence than {{tt|{{=}}}}, which parses that as {{c|1=e = ( ((a &lt; d) ? (a++) : a) = d )}} (which then fails to compile because {{tt|?:}} is never lvalue in C and {{tt|{{=}}}} requires lvalue on the left). In C++, {{tt|?:}} and {{tt|{{=}}}} have equal precedence and group right-to-left, so that {{c|1=e = a &lt; d ? a++ : a = d}} parses as {{c|1=e = ((a &lt; d) ? (a++) : (a = d))}}.

===See also===
{{cpp/language/operators}}
{{dsc begin}}
{{dsc see c|c/language/operator_precedence|C operator precedence}}
{{dsc end}}

[[ar:cpp/language/operator precedence]]
[[cs:cpp/language/operator precedence]]
[[de:cpp/language/operator precedence]]
[[es:cpp/language/operator precedence]]
[[fr:cpp/language/operator precedence]]
[[it:cpp/language/operator precedence]]
[[ja:cpp/language/operator precedence]]
[[ko:cpp/language/operator precedence]]
[[pt:cpp/language/operator precedence]]
[[ru:cpp/language/operator precedence]]
[[tr:cpp/language/operator precedence]]
[[zh:cpp/language/operator precedence]]</text>
      <sha1>hioympkw50m3g8x28w3h9frn0zu250r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/operators</title>
    <ns>0</ns>
    <id>4062</id>
    <revision>
      <id>91821</id>
      <parentid>91135</parentid>
      <timestamp>2017-03-31T19:58:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="20720">{{title|operator overloading}}
{{cpp/language/expressions/navbar}}

Customizes the C++ operators for operands of user-defined types.

===Syntax===
Overloaded operators are {{rlp|functions}} with special function names:

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|operator}} {{spar|op}} }}
{{sdsc | num=2 | {{ttb|operator}} {{spar|type}} }}
{{sdsc | num=3 | {{ttb|operator}} {{ttb|new}} &lt;br&gt; {{ttb|operator}} {{ttb|new []}}}} 
{{sdsc | num=4 | {{ttb|operator}} {{ttb|delete}} &lt;br&gt; {{ttb|operator}} {{ttb|delete []}}}}
{{sdsc | num=5 | notes={{mark since c++11}} | {{ttb|operator}} {{ttb|&quot;&quot;}} {{spar|suffix-identifier}} }}
{{sdsc end}}
{{par begin}}
{{par | {{spar|op}} | any of the following 38 operators:{{c|+}} {{c|-}} {{c|*}} {{c|/}} {{c|%}} {{c|ˆ}} {{c|&amp;}} {{c|{{!}}}} {{c|~}} {{c|!}} {{c|{{=}}}} {{c|&lt;}} {{c|&gt;}} {{c|+{{=}}}} {{c|-{{=}}}} {{c|*{{=}}}} {{c|/{{=}}}} {{c|%{{=}}}} {{c|ˆ{{=}}}} {{c|&amp;{{=}}}} {{c|{{!}}{{=}}}} {{c|&lt;&lt;}} {{c|&gt;&gt;}} {{c|&gt;&gt;{{=}}}} {{c|&lt;&lt;{{=}}}} {{c|{{=}}{{=}}}} {{c|!{{=}}}} {{c|&lt;{{=}}}} {{c|&gt;{{=}}}} {{c|&amp;&amp;}} {{c|{{!}}{{!}}}} {{c|++}} {{c|--}} {{c|,}} {{c|-&gt;*}} {{c|-&gt;}} {{c|( )}} {{c|[ ]}}}}
{{par end}}
@1@ overloaded operator;
@2@ {{rlp|cast_operator|user-defined conversion function}};
@3@ [[cpp/memory/new/operator_new|allocation function]];
@4@ [[cpp/memory/new/operator_delete|deallocation function]];
@5@ {{rlp|user_literal|user-defined literal}}.

===Overloaded operators===
When an operator appears in an {{rlp|expressions|expression}}, and at least one of its operands has a {{rlp|class|class type}} or an {{rlp|enum|enumeration type}}, then {{rlp|overload_resolution|overload resolution}} is used to determine the user-defined function to be called among all the functions whose signatures match the following:
{| class=&quot;wikitable&quot; style=&quot;font-size:85%; text-align:left;&quot;
|-
! Expression
! As member function 
! As non-member function
! Example
|-
| @a
| (a).operator@ ( )
| operator@ (a)
| {{c|!std::cin}} calls {{c|std::cin.operator!()}}
|-
| a@b
| (a).operator@ (b)
| operator@ (a, b)
| {{c|std::cout &lt;&lt; 42}} calls {{c|std::cout.operator&lt;&lt;(42)}}
|-
| a=b
| (a).operator= (b)
| {{no|cannot be non-member}}
| {{c|1=std::string s; s = &quot;abc&quot;;}} calls {{c|1=s.operator=(&quot;abc&quot;)}}
|-
| a(b...)
| (a).operator()(b...)
| {{no|cannot be non-member}}
| {{c|1=std::random_device r; auto n = r();}} calls {{c|r.operator()()}}
|-
| a[b]
| (a).operator[](b)
| {{no|cannot be non-member}}
| {{c|1=std::map&lt;int, int&gt; m; m[1] = 2;}} calls {{c|m.operator[](1)}}
|-
| a-&gt;
| (a).operator-&gt; ( )
| {{no|cannot be non-member}}
| {{c|1=auto p = std::make_unique&lt;S&gt;(); p-&gt;bar()}} calls {{c|p.operator-&gt;()}}
|-
| a@
| (a).operator@ (0)
| operator@ (a, 0)
| {{c|1=std::vector&lt;int&gt;::iterator i = v.begin(); i++}} calls {{c|i.operator++(0)}}
|-
| colspan=&quot;4&quot; |
in this table, {{ttb|@}} is a placeholder representing all matching operators: all prefix operators in @a, all postfix operators other than -&gt; in a@, all infix operators other than = in a@b
|}

Note: for overloading {{rlp|cast_operator|user-defined conversion functions}}, {{rlp|user_literal|user-defined literals}}, [[cpp/memory/new/operator_new|allocation]] and [[cpp/memory/new/operator_new|deallocation]] see their respective articles.

Overloaded operators (but not the built-in operators) can be called using function notation:
{{source|1=
std::string str = &quot;Hello, &quot;;
str.operator+=(&quot;world&quot;);                       // same as str += &quot;world&quot;;
operator&lt;&lt;(operator&lt;&lt;(std::cout, str) , '\n'); // same as std::cout &lt;&lt; str &lt;&lt; '\n';
                                               // (since C++17) except for sequencing
}}

===Restrictions===
* The operators {{ttb|::}} (scope resolution), {{ttb|.}} (member access), {{ttb|.*}} (member access through pointer to member), and {{ttb|?:}} (ternary conditional) cannot be overloaded.
* New operators such as {{ttb|**}}, {{ttb|&lt;&gt;}}, or {{ttb|&amp;{{!}}}} cannot be created.
* The overloads of operators {{ttb|&amp;&amp;}} and {{ttb|{{!!}}}} lose short-circuit evaluation.
* The overload of operator {{ttb|-&gt;}} must either return a raw pointer or return an object (by reference or by value), for which operator {{ttb|-&gt;}} is in turn overloaded.
* It is not possible to change the precedence, grouping, or number of operands of operators.
{{rev begin}}
{{rev|until=c++17|
* {{ttb|&amp;&amp;}}, {{ttb|{{!!}}}}, and {{ttb|,}} (comma) lose their special {{rlp|eval_order|sequencing properties}} when overloaded and behave like regular function calls even when they are used without function-call notation.}}
{{rev end}}

===Canonical implementations===
Other than the restrictions above, the language puts no other constraints on what the overloaded operators do, or on the return type (it does not participate in overload resolution), but in general, overloaded operators are expected to behave as similar as possible to the built-in operators: {{c|operator+}} is expected to add, rather than multiply its arguments, {{c|operator{{=}}}} is expected to assign, etc. The related operators are expected to behave similarly ({{c|operator+}} and {{c|operator+{{=}}}} do the same addition-like operation). The return types are limited by the expressions in which the operator is expected to be used: for example, assignment operators return by reference to make it possible to write {{c|1=a = b = c = d}}, because the built-in operators allow that.

Commonly overloaded operators have the following typical, canonical forms:&lt;ref&gt;[http://stackoverflow.com/questions/4421706/operator-overloading/4421708#4421708 Operator Overloading] on StackOverflow C++ FAQ&lt;/ref&gt;

====Assignment operator====
The assignment operator ({{c|1=operator=}}) has special properties: see {{rlp|copy assignment}} and {{rlp|move assignment}} for details.

The canonical copy-assignment operator is expected to [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c62-make-copy-assignment-safe-for-self-assignment perform no action on self-assignment], and to return the lhs by reference:
{{source|1=
// assume the object holds reusable storage, such as a heap-allocated buffer mArray
T&amp; operator=(const T&amp; other) // copy assignment
{
    if (this != &amp;other) { // self-assignment check expected
        if (other.size != size) {         // storage cannot be reused
            delete[] mArray;              // destroy storage in this
            size = 0;
            mArray = nullptr;             // preserve invariants in case next line throws
            mArray = new int[other.size]; // create storage in this
            size = other.size;
        } else {                          // storage can be reused
            std::copy(other.mArray, other.mArray + other.size, mArray);
        }
    }
    return *this;
}
}}

The canonical move assignment is expected to [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c64-a-move-operation-should-move-and-leave-its-source-in-a-valid-state leave the moved-from object in valid state] (that is, a state with class invariants intact), and either [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c65-make-move-assignment-safe-for-self-assignment do nothing] or at least leave the object in a valid state on self-assignment, and return the lhs by reference to non-const, and be noexcept:
{{source|1=
T&amp; operator=(T&amp;&amp; other) noexcept // move assignment
{
    if(this != &amp;other) { // no-op on self-move-assignment (delete[]/size=0 also ok)
        delete[] mArray;                               // delete this storage
        mArray = std::exchange(other.mArray, nullptr); // leave moved-from in valid state
        size = std::exchange(other.size, 0);
    }
    return *this;
}
}}

In those situations where copy assignment cannot benefit from resource reuse (it does not manage a heap-allocated array and does not have a (possibly transitive) member that does, such as a member {{lc|std::vector}} or {{lc|std::string}}), there is a popular convenient shorthand: the copy-and-swap assignment operator, which takes its parameter by value (thus working as both copy- and move-assignment depending on the value category of the argument), swaps with the parameter, and lets the destructor clean it up.
{{source|1=
T&amp; T::operator=(T arg) noexcept // copy/move constructor is called to construct arg
{
    swap(arg); // resources are exchanged between *this and arg
    return *this;
} // destructor of arg is called to release the resources formerly held by *this
}}
This form automatically provides {{rlp|exceptions|strong exception guarantee}}, but prohibits resource reuse.

====Stream extraction and insertion====
The overloads of {{tt|operator&gt;&gt;}} and {{tt|operator&lt;&lt;}} that take a {{c|std::istream&amp;}} or {{c|std::ostream&amp;}} as the left hand argument are known as insertion and extraction operators. Since they take the user-defined type as the right argument ({{tt|b}} in {{spar|a@b}}), they must be implemented as non-members. 
{{source|1=
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const T&amp; obj)
{
    // write obj to stream
    return os;
}
std::istream&amp; operator&gt;&gt;(std::istream&amp; is, T&amp; obj)
{
    // read obj from stream
    if( /* T could not be constructed */ )
        is.setstate(std::ios::failbit);
    return is;
}
}}
These operators are sometimes implemented as {{rlp|friend|friend functions}}.

====Function call operator====
When a user-defined class overloads the function call operator, {{c|operator()}}, it becomes a {{concept|FunctionObject}} type. Many standard algorithms, from {{c|std::sort}} to {{c|std::accumulate}} accept objects of such types to customize behavior. There are no particularly notable canonical forms of {{c|operator()}}, but to illustrate the usage
{{source|1=
struct Sum
{
    int sum;
    Sum() : sum(0) { }
    void operator()(int n) { sum += n; }
};
Sum s = std::for_each(v.begin(), v.end(), Sum());
}}

====Increment and decrement====
When the postfix increment and decrement appear in an expression, the corresponding user-defined function ({{c|operator++}} or {{c|operator--}}) is called with an integer argument {{tt|0}}. Typically, it is implemented as {{c|T operator++(int)}}, where the argument is ignored. The postfix increment and decrement operator is usually implemented in terms of the prefix version:
{{source|1=
struct X
{
    X&amp; operator++()
    {
        // actual increment takes place here
        return *this;
    }
    X operator++(int)
    {
        X tmp(*this); // copy
        operator++(); // pre-increment
        return tmp;   // return old value
    }
};
}}
Although canonical form of pre-increment/pre-decrement returns a reference, as with any operator overload, the return type is user-defined; for example the overloads of these operators for {{lc|std::atomic}} return by value.

====Binary arithmetic operators====
Binary operators are typically implemented as non-members to maintain symmetry (for example, when adding a complex number and an integer, if {{tt|operator+}} is a member function of the complex type, then only {{c|complex+integer}} would compile, and not {{c|integer+complex}}). Since for every binary arithmetic operator there exists a corresponding compound assignment operator, canonical forms of binary operators are implemented in terms of their compound assignments:
{{source|1=
class X
{
 public:
  X&amp; operator+=(const X&amp; rhs) // compound assignment (does not need to be a member,
  {                           // but often is, to modify the private members)
    /* addition of rhs to *this takes place here */
    return *this; // return the result by reference
  }

  // friends defined inside class body are inline and are hidden from non-ADL lookup
  friend X operator+(X lhs,        // passing lhs by value helps optimize chained a+b+c
                     const X&amp; rhs) // otherwise, both parameters may be const references
  {
    lhs += rhs; // reuse compound assignment
    return lhs; // return the result by value (uses move constructor)
  }
};
}}

====Relational operators====
Standard algorithms such as {{c|std::sort}} and containers such as {{c|std::set}} expect {{c|operator&lt;}} to be defined, by default, for the user-provided types, and expect it to implement strict weak ordering (thus satisfying the {{concept|Compare}} concept). An idiomatic way to implement strict weak ordering for a structure is to use lexicographical comparison provided by {{lc|std::tie}}:
{{source|1=
struct Record
{
    std::string name;
    unsigned int floor;
    double weight;
    friend bool operator&lt;(const Record&amp; l, const Record&amp; r)
    {
        return std::tie(l.name, l.floor, l.weight)
             &lt; std::tie(r.name, r.floor, r.weight); // keep the same order
    }
};
}}

Typically, once {{c|operator&lt;}} is provided, the other relational operators are implemented in terms of {{c|operator&lt;}}.
{{source|1=
inline bool operator&lt; (const X&amp; lhs, const X&amp; rhs){ /* do actual comparison */ }
inline bool operator&gt; (const X&amp; lhs, const X&amp; rhs){ return rhs &lt; lhs; }
inline bool operator&lt;=(const X&amp; lhs, const X&amp; rhs){ return !(lhs &gt; rhs); }
inline bool operator&gt;=(const X&amp; lhs, const X&amp; rhs){ return !(lhs &lt; rhs); }
}}

Likewise, the inequality operator is typically implemented in terms of {{c|1=operator==}}:
{{source|1=
inline bool operator==(const X&amp; lhs, const X&amp; rhs){ /* do actual comparison */ }
inline bool operator!=(const X&amp; lhs, const X&amp; rhs){ return !(lhs == rhs); }
}}

When three-way comparison (such as {{lc|std::memcmp}} or {{lc|std::string::compare}}) is provided, all six relational operators may be expressed through that:
{{source|1=
inline bool operator==(const X&amp; lhs, const X&amp; rhs){ return cmp(lhs,rhs) == 0; }
inline bool operator!=(const X&amp; lhs, const X&amp; rhs){ return cmp(lhs,rhs) != 0; }
inline bool operator&lt; (const X&amp; lhs, const X&amp; rhs){ return cmp(lhs,rhs) &lt;  0; }
inline bool operator&gt; (const X&amp; lhs, const X&amp; rhs){ return cmp(lhs,rhs) &gt;  0; }
inline bool operator&lt;=(const X&amp; lhs, const X&amp; rhs){ return cmp(lhs,rhs) &lt;= 0; }
inline bool operator&gt;=(const X&amp; lhs, const X&amp; rhs){ return cmp(lhs,rhs) &gt;= 0; }
}}

====Array subscript operator====
User-defined classes that provide array-like access that allows both reading and writing typically define two overloads for {{c|operator[]}}: const and non-const variants:
{{source|1=
struct T
{
          value_t&amp; operator[](std::size_t idx)       { return mVector[idx]; }
    const value_t&amp; operator[](std::size_t idx) const { return mVector[idx]; }
};
}}
If the value type is known to be a built-in type, the const variant should return by value.

Where direct access to the elements of the container is not wanted or not possible or distinguishing between lvalue {{c|c[i] {{=}} v;}} and rvalue {{c|v {{=}} c[i];}} usage, operator[] may return a proxy. see for example {{lc|std::bitset::operator[]}}.

To provide multidimensional array access semantics, e.g. to implement a 3D array access {{c|a[i][j][k] {{=}} x;}}, operator[] has to return a reference to a 2D plane, which has to have its own operator[] which returns a reference to a 1D row, which has to have operator[] which returns a reference to the element. To avoid this complexity, some libraries opt for overloading {{c|operator()}} instead, so that 3D access expressions have the Fortran-like syntax {{c|a(i, j, k) {{=}} x;}}

====Bitwise arithmetic operators====
User-defined classes and enumerations that implement the requirements of {{concept|BitmaskType}}
are required to overload the bitwise arithmetic operators {{c|operator&amp;}}, {{c|operator{{!}}}}, {{c|operator^}}, {{c|operator~}}, {{c|operator&amp;{{=}}}}, {{c|operator{{!}}{{=}}}}, and {{c|operator^{{=}}}}, and may optionally overload the shift operators {{c|operator&lt;&lt;}} {{c|operator&gt;&gt;}}, {{c|operator&gt;&gt;{{=}}}}, and {{c|operator&lt;&lt;{{=}}}}. The canonical implementations usually follow the pattern for binary arithmetic operators described above.

====Boolean negation operator====
The operator {{c|operator!}} is commonly overloaded by the user-defined classes that are intended to be used in boolean contexts. Such classes also provide a user-defined conversion function {{c|explicit operator bool()}} (see {{lc|std::basic_ios}} for the standard library example), and the expected behavior of {{c|operator!}} is to return the value opposite of {{c|operator bool}}.

====Rarely overloaded operators====
The following operators are rarely overloaded:
* The address-of operator, {{c|operator&amp;}}. If the unary &amp; is applied to an lvalue of incomplete type and the complete type declares an overloaded {{c|operator&amp;}}, {{rev inl|until=c++11|the behavior is undefined}}{{rev inl|since=c++11|{{mark unreviewed dr|CWG|1458}}it is implementation-defined whether the overloaded operator is used}}. Because this operator may be overloaded, generic libraries use {{lc|std::addressof}} to obtain addresses of objects of user-defined types. The best known example of a canonical overloaded operator&amp; is the Microsoft class [https://msdn.microsoft.com/en-us/library/31k6d0k7(v=vs.140).aspx CComPtr]. An example of its use in EDSL can be found in  [http://www.boost.org/doc/libs/release/libs/spirit/doc/html/spirit/qi/reference/operator/and_predicate.html boost.spirit].
* The boolean logic operators, {{c|operator&amp;&amp;}} and {{c|operator{{!!}}}}. Unlike the built-in versions, the overloads cannot implement short-circuit evaluation. {{rev inl|until=c++17|Also unlike the built-in versions, they do not sequence their left operand before the right one.}} In the standard library, these operators are only overloaded for {{lc|std::valarray}}.
* The comma operator, {{c|operator,}}. {{rev inl|until=c++17|Unlike the built-in version, the overloads do not sequence their left operand before the right one.}} Because this operator may be overloaded, generic libraries use expressions such as {{c|a,void(),b}} instead of {{c|a,b}} to sequence execution of expressions of user-defined types. The boost library uses {{tt|operator,}} in [http://www.boost.org/doc/libs/release/libs/assign/doc/index.html#intro boost.assign], [https://github.com/boostorg/spirit/blob/develop/include/boost/spirit/home/qi/string/symbols.hpp#L317 boost.spirit], and other libraries. The database access library [http://soci.sourceforge.net/doc.html SOCI] also overloads {{tt|operator,}}.
* The member access through pointer to member {{c|operator-&gt;*}}. There are no specific downsides to overloading this operator, but it is rarely used in practice. It was suggested that it could be part of [http://www.aristeia.com/Papers/DDJ_Oct_1999.pdf smart pointer interface], and in fact is used in that capacity by actors in [http://www.boost.org/doc/libs/release/libs/phoenix/doc/html/phoenix/modules/operator.html#phoenix.modules.operator.member_pointer_operator boost.phoenix]. It is more common in EDSLs such as [https://github.com/schlangster/cpp.react/blob/master/include/react/Signal.h#L557 cpp.react].

===Example===
{{example
 | code=
#include &lt;iostream&gt;

class Fraction
{
    int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
    int n, d;
public:
    Fraction(int n, int d = 1) : n(n/gcd(n, d)), d(d/gcd(n, d)) { }
    int num() const { return n; }
    int den() const { return d; }
    Fraction&amp; operator*=(const Fraction&amp; rhs)
    {
        int new_n = n * rhs.n/gcd(n * rhs.n, d * rhs.d);
        d = d * rhs.d/gcd(n * rhs.n, d * rhs.d);
        n = new_n;
        return *this;
    }
};
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const Fraction&amp; f)
{
   return out &lt;&lt; f.num() &lt;&lt; '/' &lt;&lt; f.den() ;
}
bool operator==(const Fraction&amp; lhs, const Fraction&amp; rhs)
{
    return lhs.num() == rhs.num() &amp;&amp; lhs.den() == rhs.den();
}
bool operator!=(const Fraction&amp; lhs, const Fraction&amp; rhs)
{
    return !(lhs == rhs);
}
Fraction operator*(Fraction lhs, const Fraction&amp; rhs)
{
    return lhs *= rhs;
}

int main()
{
   Fraction f1(3, 8), f2(1, 2), f3(10, 2);
   std::cout &lt;&lt; f1 &lt;&lt; &quot; * &quot; &lt;&lt; f2 &lt;&lt; &quot; = &quot; &lt;&lt; f1 * f2 &lt;&lt; '\n'
             &lt;&lt; f2 &lt;&lt; &quot; * &quot; &lt;&lt; f3 &lt;&lt; &quot; = &quot; &lt;&lt; f2 * f3 &lt;&lt; '\n'
             &lt;&lt;  2 &lt;&lt; &quot; * &quot; &lt;&lt; f1 &lt;&lt; &quot; = &quot; &lt;&lt;  2 * f1 &lt;&lt; '\n';
}
 | output=
3/8 * 1/2 = 3/16
1/2 * 5/1 = 5/2
2 * 3/8 = 3/4
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1458|std=C++11|before=taking address of incomplete type that overloads address-of was undefined behavior|after=the behavior is only unspecified}}
{{dr list end}}

===See Also===
* [[cpp/language/operator precedence | Operator precedence]]
* [[cpp/language/operator alternative | Alternative operator syntax]]
{{cpp/language/operators}}

===References===
&lt;references/&gt;

[[de:cpp/language/operators]]
[[es:cpp/language/operators]]
[[fr:cpp/language/operators]]
[[it:cpp/language/operators]]
[[ja:cpp/language/operators]]
[[pt:cpp/language/operators]]
[[ru:cpp/language/operators]]
[[zh:cpp/language/operators]]</text>
      <sha1>r9gwkwk2l4ha2c88glsxcbh186zdmup</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/overload resolution</title>
    <ns>0</ns>
    <id>12784</id>
    <revision>
      <id>91934</id>
      <parentid>91036</parentid>
      <timestamp>2017-03-31T20:02:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="34554">{{title|Overload resolution}}
{{cpp/language/functions/navbar}}

In order to compile a function call, the compiler must first perform {{rlp|lookup|name lookup}}, which, for functions, may involve {{rlp|adl|argument-dependent lookup}}, and for function templates may be followed by {{rlp|template argument deduction}}. If these steps produce more than one ''candidate function'', then ''overload resolution'' is performed to select the function that will actually be called.

In general, the candidate function whose parameters match the arguments most closely is the one that is called.

For other contexts where overloaded function names can appear, see {{rlp|overloaded_address|taking the address of an overloaded function}}.

===Details===
Before overload resolution begins, the functions selected by name lookup and template argument deduction are combined to form the set of ''candidate functions'' (the exact criteria depend on the context in which overload resolution takes place, see below).

If any candidate function is a {{rlp|member_functions|member function}} (static or non-static), but not a constructor, it is treated as if it has an extra parameter (''implicit object parameter'') which represents the object for which they are called and appears before the first of the actual parameters.

Similarly, the object on which a member function is being called is prepended to the argument list as the ''implied object argument''.

For member functions of class {{tt|X}}, the type of the implicit object parameter is affected by cv-qualifications and ref-qualifications of the member function as described in {{rlp|member_functions|member functions}}.

The user-defined conversion functions are considered to be members of the ''implied object argument'' for the purpose of determining the type of the ''implicit object parameter''.

The member functions introduced by a using-declaration into a derived class are considered to be members of the derived class for the purpose of defining the type of the ''implicit
object parameter''.

For the static member functions, the ''implicit object parameter'' is considered to match any
object: its type is not examined and no conversion sequence is attempted for it.

For the rest of overload resolution, the ''implied object argument'' is indistinguishable from other arguments, but the following special rules apply to the ''implicit object parameter'':
&lt;!-- removed by p0135r1 in C++17, with a note that this was always redundant, but harmless until p0135r1 made a().b() materialize a temporary out of a()
@1@ the argument for the implicit object parameter cannot be held in a temporary object
--&gt;
@1@ user-defined conversions cannot be applied to the implicit object parameter

{{rev begin}}
{{rev|since=c++11|
@2@ rvalues can be bound to non-const implicit object parameter (unless this is for a ref-qualified member function) and do not affect the ranking of the implicit conversions.
}}
{{rev end}}
{{source|
struct B { void f(int); };
struct A { operator B&amp;(); };
A a;
a.f(1); // Error: user-defined conversions cannot be applied
        // to the implicit object parameter
static_cast&lt;B&amp;&gt;(a).f(1); // OK
}}

===Candidate functions===
The set of candidate functions and the list of arguments is prepared in a unique way for each of the contexts where overload resolution is used:
====Call to a named function====
If {{tt|E}} in a {{rlp|operator_other#Built-in_function_call_operator|function call expression}} {{tt|E(args)}} names a set of overloaded functions and/or function templates (but not callable objects), the following rules are followed:
* If the expression {{tt|E}} has the form {{tt|PA-&gt;B}} or {{tt|A.B}} (where A has class type cv T), then {{tt|B}} is {{rlp|lookup|looked up}} as a member function of {{tt|T}}. The function declarations found by that lookup are the candidate functions. The argument list for the purpose of overload resolution has the implied object argument of type cv T.
* If the expression {{tt|E}} is a {{rlp|expressions#Primary_expressions|primary expression}}, the name is {{rlp|lookup|looked up}} following normal rules for function calls (which may involve {{rlp|adl|ADL}}). The function declarations found by this lookup are (due to the way lookup works) either:
:a) all non-member functions (in which case the argument list for the purpose of overload resolution is exactly the argument list used in the function call expression)
:b) all member functions of some class {{tt|T}}, in which case, if {{rlp|this}} is in scope and refers to {{tt|T}}, {{tt|*this}} is used as the implied object argument. Otherwise (if {{tt|this}} is not in scope or does not point to {{tt|T}}, a fake object of type {{tt|T}} is used as the implied object argument, and if overload resolution subsequently selects a non-static member function, the program is ill-formed.
====Call to a class object====
If {{tt|E}} in a {{rlp|operator_other#Built-in_function_call_operator|function call expression}} {{tt|E(args)}} has class type cv {{tt|T}}, then
* The function-call operators of T are obtained by ordinary {{rlp|lookup}} of the name {{c|operator()}} in the context of the expression {{tt|(E).operator()}}, and every declaration found is added to the set of candidate functions. 
* For each non-explicit {{rlp|cast operator|user-defined conversion function}} in {{tt|T}} or in a base of {{tt|T}} (unless hidden), whose cv-qualifiers is same or greater than {{tt|T}}'s cv-qualifiers, and where the conversion function converts to:
:* to pointer-to-function
:* to reference-to-pointer-to-function
:* to reference-to-function
:then a ''surrogate call function'' with a unique name whose first parameter is the result of the conversion, the remaining parameters are the parameter-list accepted by the result of the conversion, and the return type is the return type of the result of the conversion, is added to the set of candidate functions. If this surrogate function is selected by the subsequent overload resolution, then the user-defined conversion function will be called and then the result of the conversion will be called.

In any case, the argument list for the purpose of overload resolution is the argument list of the function call expression preceded by the implied object argument {{tt|E}} (when matching against the surrogate function, the user-defined conversion will automatically convert the implied object argument to the first argument of the surrogate function).
{{source|1=
int f1(int);
int f2(float);
struct A {
    using fp1 = int(*)(int);
    operator fp1() { return f1; } // conversion function to pointer to function
    using fp2 = int(*)(float);
    operator fp2() { return f2; } // conversion function to pointer to function
} a;
int i = a(1); // calls f1 via pointer returned from conversion function
}}

====Call to an overloaded operator====
If at least one of the arguments to an operator in an expression has a class type or an enumeration type, both {{rlp|expressions#Operators|builtin operators}} and {{rlp|operators|user-defined operator overloads}} participate in overload resolution, with the set of candidate functions selected as follows:

For a unary operator {{ttb|@}} whose argument has type {{tt|T1}} (after removing cv-qualifications), or binary operator {{ttb|@}} whose left operand has type {{tt|T1}} and right operand of type {{tt|T2}} (after removing cv-qualifications), three sets of candidate functions are prepared:
@1@ ''member candidates'': if {{tt|T1}} is a complete class or a class currently being defined, the set of member candidates is the result of {{rlp|lookup|qualified name lookup}} of {{tt|T1::operator@}}. In all other cases, the set of member candidates is empty. 
@2@ ''non-member candidates'': For the operators where {{rlp|operators|operator overloading}} permits non-member forms, all declarations found by {{rlp|lookup|unqualified name lookup}} of {{tt|operator@}} in the context of the expression (which may involve {{rlp|adl|ADL}}), except that member function declarations are ignored and do not prevent the lookup from continuing into the next enclosing scope. If both operands of a binary operator or the only operand of a unary operator has enumeration type, the only functions from the lookup set that become non-member candidates are the ones whose parameter has that enumeration type (or reference to that enumeration type)
@3@ ''built-in candidates'': For {{c|operator,}}, the unary {{c|operator&amp;}}, and the {{c|operator-&gt;}}, the set of built-in candidates is empty. For other operators built-in candidates are the ones listed in {{rlp|expressions#Operators|built-in operator pages}} as long as all operands can be implicitly converted to their parameters. If any built-in candidate has the same parameter list as a non-member candidate that isn't a function template specialization, it is not added to the list of built-in candidates. When the built-in assignment operators are considered, the conversions from their left-hand arguments are restricted: user-defined conversions are not considered.

The set of candidate functions to be submitted for overload resolution is a union of the three sets above. The argument list for the purpose of overload resolution consists of the operands of the operator except for {{tt|operator-&gt;}}, where the second operand is not an argument for the function call (see {{rlp|operator_member_access#Built-in_member_access_operators|member access operator}}). 
{{source|
struct A {
    operator int(); // user-defined conversion
};
A operator+(const A&amp;, const A&amp;); // non-member user-defined operator
void m()
{
    A a, b;
    a + b; // member-candidates: none
           // non-member candidates: operator+(a,b)
           // built-in candidates: int(a) + int(b)
           // overload resolution chooses operator+(a,b)
}
}}

If the overload resolution selects a built-in candidate, the {{rlp|implicit cast|user-defined conversion sequence}} from an operand of class type is not allowed to have a second standard conversion sequence: the user-defined conversion function must give the expected operand type directly:
{{source|1=
struct Y { operator int*(); };  // Y is convertible to int*
int *a = Y() + 100.0; // error: no operator+ between pointer and double
}}

For {{c|operator,}}, the unary {{c|operator&amp;}}, and {{c|operator-&gt;}}, if there are no viable functions (see below) in the set of candidate functions, then the operator is reinterpreted as a built-in.

====Initialization by constructor====
When an object of class type is {{rlp|direct_initialization|direct-initialized}} or {{rlp|default_initialization|default-initialized}} outside a {{rlp|copy_initialization|copy-initialization}} context, the candidate functions are all constructors of the class being initialized. The argument list is the expression list of the initializer.

When an object of class type is copy-initialized from an object of the same or derived class type, or default-initialized in a copy-initialization context, the candidate functions are all {{rlp|converting constructor}}s of the class being initialized. The argument list is the expression of the initializer.

====Copy-initialization by conversion====
If {{rlp|copy_initialization|copy-initialization}} of an object of class type requires that a {{rlp|cast operator|user-defined conversion function}} is called to convert the initializer expression of type cv {{tt|S}} to the type cv {{tt|T}} of the object being initialized, the following functions are candidate functions:
* all {{rlp|converting constructor}}s of {{tt|T}}
* the non-explicit conversion functions from {{tt|S}} and its base classes (unless hidden) to {{tt|T}} or class derived from {{tt|T}} or a reference to such. If this copy-initialization is part of the direct-initialization sequence of ''cv'' {{tt|T}} (initializing a reference to be bound to the first parameter of a constructor that takes a reference to cv {{tt|T}}), then explicit conversion functions are also considered.

Either way, the argument list for the purpose of overload resolution consists of a single argument which is the initializer expression, which will be compared against the first argument of the constructor or against the implicit object argument of the conversion function.
====Non-class initialization by conversion====
When initialization of an object of non-class type cv1 {{tt|T}} requires a {{rlp|cast operator|user-defined conversion function}} to convert from an initializer expression of class type cv {{tt|S}}, the following functions are candidates:
* the non-explicit user-defined conversion functions of {{tt|S}} and its base classes (unless hidden) that produce type {{tt|T}} or a type convertible to {{tt|T}} by a {{rlp|implicit cast|standard conversion sequence}}, or a reference to such type. cv qualifiers on the returned type are ignored for the purpose of selecting candidate functions.
* if this is {{rlp|direct initialization|direct-initialization}}, the explicit user-defined conversion functions of {{tt|S}} and its base classes (unless hidden) that produce type {{tt|T}} or a type convertible to {{tt|T}} by a {{rlp|implicit cast|qualification conversion}}, or a reference to such type, are also considered.

Either way, the argument list for the purpose of overload resolution consists of a single argument which is the initializer expression, which will be compared against the implicit object argument of the conversion function.
====Reference initialization by conversion====
During {{rlp|reference initialization}}, where the reference to cv1 {{tt|T}} is bound to the glvalue or class prvalue result of a conversion from the initializer expression from the class type cv2 {{tt|S}}, the following functions are selected for the candidate set:
* the non-explicit user-defined conversion functions of {{tt|S}} and its base classes (unless hidden) to the type
:* (when initializing lvalue reference or rvalue reference to function) lvalue reference to cv2 {{tt|T2}}
:* (when initializing rvalue reference or lvalue reference to function) cv2 {{tt|T2}} or rvalue reference to cv2 {{tt|T2}}
:where cv2 T2 is reference-compatible with cv1 T
* for direct initializaton, the explicit user-defined conversion functions are also considered if T2 is the same type as T or can be converted to type T with a qualification conversion.

Either way, the argument list for the purpose of overload resolution consists of a single argument which is the initializer expression, which will be compared against the implicit object argument of the conversion function.
====List-initialization====
When an object of non-aggregate class type {{tt|T}} is {{rlp|list initialization|list-initialized}}, two-phase overload resolution takes place.
* at phase 1, the candidate functions are all initializer-list constructors of {{tt|T}} and the argument list for the purpose of overload resolution consists of a single initializer list argument
* if overload resolution fails at phase 1, phase 2 is entered, where the candidate functions are all constructors of {{tt|T}} and the argument list for the purpose of overload resolution consists of the individual elements of the initializer list. 

If the initializer list is empty and {{tt|T}} has a default constructor, phase 1 is skipped.

In copy-list-initialization, if phase 2 selects an explicit constructor, the initialization is ill-formed (as opposed to all over copy-initializations where explicit constructors are not even considered).

===Viable functions===
Given the set of candidate functions, constructed as described above, the next step of overload resolution is examining arguments and parameters to reduce the set to the set of ''viable functions''

To be included in the set of viable functions, the candidate function must satisfy the following:
@1@ If there are {{tt|M}} arguments, the candidate function that has exactly {{tt|M}} parameters is viable
@2@ If the candidate function has less than {{tt|M}} parameters, but has an {{rlp|variadic arguments|ellipsis parameter}}, it is viable.
@3@ If the candidate function has more than {{tt|M}} parameters and the {{tt|M+1}}'st parameter and all parameters that follow must have default arguments, it is viable. For the rest of overload resolution, the parameter list is truncated at M.
@4@ For every argument there must be at least one implicit conversion sequence that converts it to the corresponding parameter.
@5@ If any parameter has reference type, reference binding is accounted for at this step: if an rvalue argument corresponds to non-const lvalue reference parameter or an lvalue argument corresponds to rvalue reference parameter, the function is not viable.

User-defined conversions (both converting constructors and user-defined conversion functions) are prohibited from taking part in implicit conversion sequence where it would make it possible to apply more than one user-defined conversion. Specifically, they are prohibited if the target of the conversion is the first parameter of a constructor or the implicit object parameter of a user-defined conversion function, and that constructor/user-defined conversion is a candidate for
* copy-initialization of a class by user-defined conversion,
* initialization by a conversion function,
* initialization by conversion function for direct reference binding,
* initialization by constructor where the argument is a temporary in class copy-initialization,
* {{mark unreviewed dr|CWG|2076}} initialization by list-initialization where the initializer list has exactly one element that is itself an initializer list, and the target is the first parameter of a constructor of class X, and the conversion is to X or reference to (possibly cv-qualified) X
{{source|1=
struct A { A(int); };
struct B { B(A); };
B b{ {0} }; // list-init of B
// candidates: B(const B&amp;), B(B&amp;&amp;), B(A)
// {0} -&gt; B&amp;&amp; not viable: would have to call B(A)
// {0} -&gt; const B&amp;: not viable: would have to bind to rvalue, would have to call B(A)
// {0} -&gt; A viable. Calls A(int): user-defined conversion to A is not banned
}}

===Best viable function===
For each pair of viable function {{tt|F1}} and {{tt|F2}}, the implicit conversion sequences from the {{tt|i}}-th parameter to {{tt|i}}-th argument are ranked to determine which one is better (except the first argument, the ''implicit object argument'' for static member functions has no effect on the ranking)

{{tt|F1}} is determined to be a better function than {{tt|F2}} if implicit conversions for all arguments of F1 are ''not worse'' than the implicit conversions for all arguments of F2, and
@1@ there is at least one argument of F1 whose implicit conversion is ''better'' than the corresponding implicit conversion for that argument of F2
@2@ or. if not that, (only in context of non-class initialization by conversion), the standard conversion sequence from the return type of F1 to the type being initialized is ''better'' than the standard conversion sequence from the return type of F2

@4@ or, if not that, F1 is a non-template function while F2 is a template specialization
@5@ or, if not that, F1 and F2 are both template specializations and F1 is ''more specialized'' according to the {{rlp|function_template#Function_template_overloading|partial ordering rules for template specializations}}

{{rev begin}}
{{rev|since=c++17|
@6@ or, if not that, F1 is generated from a {{rlp|deduction guide|user-defined deduction-guide}} and F2 is not
@7@ or, if not that, F1 is the {{rlp|deduction guide|copy deduction candidate}} and F2 is not
@8@ or, if not that, F1 is generated from a non-template constructor and F2 is generated from a constructor template
{{source|1=
template &lt;class T&gt; struct A {
  using value_type = T;
  A(value_type);                  // #1
  A(const A&amp;);                    // #2
  A(T, T, int);                   // #3
  template&lt;class U&gt; A(int, T, U); // #4
};                                // #5 is A(A), the copy deduction candidate
A x (1, 2, 3);  // uses #3, generated from a non-template constructor
template &lt;class T&gt; A(T) -&gt; A&lt;T&gt;;  // #6, less specialized than #5
A a (42); // uses #6 to deduce A&lt;int&gt; and #1 to initialize
A b = a;  // uses #5 to deduce A&lt;int&gt; and #2 to initialize
template &lt;class T&gt; A(A&lt;T&gt;) -&gt; A&lt;A&lt;T&gt;&gt;;  // #7, as specialized as #5
A b2 = a;  // uses #7 to deduce A&lt;A&lt;int&gt;&gt; and #1 to initialize
}}
}}
{{rev end}}

These pair-wise comparisons are applied to all viable functions. If exactly one viable function is better than all others, overload resolution succeeds and this function is called. Otherwise, compilation fails.

{{source|1=
void Fcn(const int*, short); // overload #1
void Fcn(int*, int); // overload #2
int i;
short s = 0;
void f() {
    Fcn(&amp;i, 1L);  // 1st argument: &amp;i -&gt; int* is better than &amp;i -&gt; const int*
                  // 2nd argument: 1L -&gt; short and 1L -&gt; int are equivalent
                  // calls Fcn(int*, int)

    Fcn(&amp;i,'c');  // 1st argument: &amp;i -&gt; int* is better than &amp;i -&gt; const int*
                  // 2nd argument: 'c' -&gt; int is better than 'c' -&gt; short
                  // calls Fcn(int*, int)

    Fcn(&amp;i, s);   // 1st argument: &amp;i -&gt; int* is better than &amp;i -&gt; const int*
                  // 2nd argument: s -&gt; short is better than s -&gt; int
                  // no winner, compilation error
}
}}

===Ranking of implicit conversion sequences===
The argument-parameter implicit conversion sequences considered by overload resolution correspond to {{rlp|implicit_cast|implicit conversions}} used in {{rlp|copy_initialization|copy initialization}} (for non-reference parameters), except that when considering conversion to the implicit object parameter or to the left-hand side of assignment operator, conversions that create temporary objects are not considered.

Each {{rlp|implicit_cast|type of standard conversion sequence}} is assigned one of three ranks:
@1@ '''Exact match''': no conversion required, lvalue-to-rvalue conversion, qualification conversion, {{rev inl|since=c++17|function pointer conversion,}} user-defined conversion of class type to the same class
@2@ '''Promotion''': integral promotion, floating-point promotion
@3@ '''Conversion''': integral conversion, floating-point conversion, floating-integral conversion, pointer conversion, pointer-to-member conversion, boolean conversion, user-defined conversion of a derived class to its base

The rank of the standard conversion sequence is the worst of the ranks of the standard conversions it holds (there may be up to {{rlp|implicit_cast|three conversions}})

Binding of a reference parameter directly to the argument expression is either Identity or a derived-to-base Conversion:
{{source|1=
struct Base {};
struct Derived : Base {} d;
int f(Base&amp;);    // overload #1
int f(Derived&amp;); // overload #2
int i = f(d); // d -&gt; Derived&amp; has rank Exact Match
              // d -&gt; Base&amp; has rank Conversion
              // calls f(Derived&amp;)
}}
Since ranking of conversion sequences operates with types and value categories only, a {{rlp|bit_field|bit field}} can bind to a reference argument for the purpose of ranking, but if that function gets selected, it will be ill-formed.

@1@ A standard conversion sequence is always ''better'' than a user-defined conversion sequence or an ellipsis conversion sequence.
@2@ A user-defined conversion sequence is always ''better'' than an {{rlp|variadic arguments|ellipsis conversion}} sequence
@3@ A standard conversion sequence {{tt|S1}} is ''better'' than a standard conversion sequence {{tt|S2}} if
:@a@ {{tt|S1}} is a subsequence of {{tt|S2}}, excluding lvalue transformations. The identity conversion sequence is considered a subsequence of any other conversion
:@b@ Or, if not that, the rank of {{tt|S1}} is better thank the rank of {{tt|S2}}
:@c@ or, if not that, both {{tt|S1}} and {{tt|S2}} are binding to a reference parameter to something other than the implicit object parameter of a ref-qualified member function, and {{tt|S1}} binds an rvalue reference to an rvalue while {{tt|S2}} binds an lvalue reference to an rvalue
{{source|1=
int i;
int f1();
int g(const int&amp;);  // overload #1
int g(const int&amp;&amp;); // overload #2
int j = g(i);    // lvalue int -&gt; const int&amp; is the only valid conversion
int k = g(f1()); // rvalue int -&gt; const int&amp;&amp; better than rvalue int -&gt; const int&amp;
}}
:@d@ or, if not that, both {{tt|S1}} and {{tt|S2}} are binding to a reference parameter and {{tt|S1}} binds an lvalue reference to function while {{tt|S2}} binds an rvalue reference to function.
{{source|1=
int f(void(&amp;)());  // overload #1
int f(void(&amp;&amp;)()); // overload #2
void g();
int i1 = f(g);     // calls #1
}}
:@e@ or, if not that, both {{tt|S1}} and {{tt|S2}} are binding to a reference parameters only different in top-level cv-qualification, and {{tt|S1}}'s type is ''less'' cv-qualified than {{tt|S2}}'s.
{{source|1=
int f(const int &amp;); // overload #1
int f(int &amp;);       // overload #2 (both references)
int g(const int &amp;); // overload #1
int g(int);         // overload #2
int i;
int j = f(i); // lvalue i -&gt; int&amp; is better than lvalue int -&gt; const int&amp;
              // calls f(int&amp;)
int k = g(i); // lvalue i -&gt; const int&amp; ranks Exact Match
              // lvalue i -&gt; rvalue int ranks Exact Match
              // ambiguous overload: compilation error
}}
:@f@ Or, if not that, S1 and S2 only differ in qualification conversion, and the cv-qualification of the result of {{tt|S1}} is a subset of the cv-qualification of the result of {{tt|S2}}
{{source|1=
int f(const int*);
int f(int*);
int i;
int j = f(&amp;i); // &amp;i -&gt; int* is better than &amp;i -&gt; const int*, calls f(int*)
}}
@4@ A user-defined conversion sequence {{tt|U1}} is ''better'' than a user-defined conversion sequence {{tt|U2}} if they call the same constructor/user-defined conversion function or initialize the same class with aggregate-initialization, and in either case the second standard conversion sequence in {{tt|U1}} is better than the second standard conversion sequence in {{tt|U2}}
{{source|1=
struct A {
    operator short(); // user-defined conversion function
} a;
int f(int);   // overload #1
int f(float); // overload #2
int i = f(a); // A -&gt; short, followed by short -&gt; int (rank Promotion)
              // A -&gt; short, followed by short -&gt; float (rank Conversion)
              // calls f(int)
}}
@5@ A list-initialization sequence {{tt|L1}} is ''better'' than list-initialization sequence {{tt|L2}} if {{tt|L1}} initializes an {{c|std::initializer_list}} parameter, while {{tt|L2}} does not.
{{source|1=
void f1(int);                                 // #1
void f1(std::initializer_list&lt;long&gt;);         // #2
void g1() { f1({42}); }                       // chooses #2

void f2(std::pair&lt;const char*, const char*&gt;); // #3
void f2(std::initializer_list&lt;std::string&gt;);  // #4
void g2() { f2({&quot;foo&quot;,&quot;bar&quot;}); }              // chooses #4
}}

{{rev begin}}
{{rev|since=c++14|
@6@ A list-initialization sequence {{tt|L1}} is ''better'' than list-initialization sequence {{tt|L2}} if the corresponding parameters are references to arrays, and L1 converts to type &quot;array of N1 T,&quot; L2 converts to type &quot;array of N2 T&quot;, and N1 is smaller than N2.
}}
{{rev end}}

If two conversion sequences are indistinguishable because they have the same rank, the following additional rules apply:
@1@ Conversion that involves pointer to bool, pointer-to-member to bool, or {{lc|std::nullptr_t}} to bool conversion is worse than the one that doesn't
@2@ Conversion that converts pointer-to-derived to pointer-to-base is better than the conversion of pointer-to-derived to pointer-to-void, and conversion of pointer-to-base to void is better than pointer-to-derived to void.
@3@ If {{tt|Mid}} is derived (directly or indirectly) from {{tt|Base}}, and {{tt|Derived}} is derived (directly or indirectly) from {{tt|Mid}}
:@a@ {{c|Derived*}} to {{c|Mid*}} is better than {{c|Derived*}} to {{c|Base*}}
:@b@ {{c|Derived}} to {{c|Mid&amp;}} or {{c|Mid&amp;&amp;}} is better than {{c|Derived}} to {{c|Base&amp;}} or {{c|Base&amp;&amp;}}
:@c@ {{c|Base::*}} to {{c|Mid::*}} is better than {{c|Base::*}} to {{c|Derived::*}}
:@d@ {{c|Derived}} to {{c|Mid}} is better than {{c|Derived}} to {{c|Base}}
:@e@ {{c|Mid*}} to {{c|Base*}} is better than {{c|Derived*}} to {{c|Base*}}
:@f@ {{c|Mid}} to {{c|Base&amp;}} or {{c|Base&amp;&amp;}} is better than {{c|Derived}} to {{c|Base&amp;}} or {{c|Base&amp;&amp;}}
:@g@ {{c|Mid::*}} to {{c|Derived::*}} is better than {{c|Base::*}} to {{c|Derived::*}}
:@h@ {{c|Mid}} to {{c|Base}} is better than {{c|Derived}} to {{c|Base}}

Ambiguous conversion sequences are ranked as user-defined conversion sequences because multiple conversion sequences for an argument can exist only if they involve different user-defined conversions:
{{source|1=
class B;
class A { A (B&amp;);}; // converting constructor
class B { operator A (); }; // user-defined conversion function
class C { C (B&amp;); }; // converting constructor
void f(A) { } // overload #1
void f(C) { } // overload #2
B b;
f(b); // B -&gt; A via ctor or B -&gt; A via function (ambiguous conversion)
      // b -&gt; C via ctor (user-defined conversion)
      // the conversions for overload #1 and for overload #2
      // are indistinguishable; compilation fails 
}}

===Implicit conversion sequence in list-initialization===
In {{rlp|list initialization}}, the argument is a {{spar|braced-init-list}}, which isn't an expression, so the implicit conversion sequence into the parameter type for the purpose of overload resolution is decided by the following special rules:
{{rev begin}}
{{rev|since=c++14| {{mark unreviewed dr|CWG|1467}}
* If the parameter type is some {{mark unreviewed dr|CWG|2137}}aggregate {{tt|X}} and the initializer list consists of exactly one element of same or derived class (possibly cv-qualified), the implicit conversion sequence is the one required to convert the element to the parameter type.
* Otherwise, if the parameter type is a reference to character array and the initializer list has a single element that is an appropriately-typed string literal, the implicit conversion sequence is the identity conversion.
}}
{{rev end}}
* If the parameter type is {{c|std::initializer_list&lt;X&gt;}}, and there is an non-narrowing implicit conversion from every element of the initializer list to {{tt|X}}, the implicit conversion sequence for the purpose of overload resolution is the worst conversion necessary. If the braced-init-list is empty, the conversion sequence is the identity conversion.
{{source|1=
struct A {
    A(std::initializer_list&lt;double&gt;);                    // #1
    A(std::initializer_list&lt;complex&lt;double&gt;&gt;);           // #2
    A(std::initializer_list&lt;std::string&gt;);               // #3
};
A a{1.0,2.0}; // selects #1 (rvalue double -&gt; double: identity conv)
void g(A);
g({&quot;foo&quot;,&quot;bar&quot;}); // selects #3 (lvalue const char[4] -&gt; std::string: user-def conv)
}}
* Otherwise, if the parameter type is &quot;array of N T&quot; (this only happens for references to arrays), {{rev inl|since=c++14|the initializer list must have N or less elements, and}} the worst implicit conversion necessary to convert every element of the list {{rev inl|since=c++14|(or the empty pair of braces {{c|{} }} if the list is shorter than N)}} to {{tt|T}} is the one used.
{{source|1=
typedef int IA[3];
void h(const IA&amp;);
h({1,2,3});        // int-&gt;int identity conversion
}}
* Otherwise, if the parameter type is a non-aggregate class type {{tt|X}}, overload resolution picks the constructor C of X to initialize from the argument initializer list
{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|2137}}
:* If C is not an initializer-list constructor and the initializer list has a single element of possibly cv-qualified X, the implicit conversion sequence has Exact Match rank. If the initializer list has a single element of possibly cv-qualified type derived from X, the implicit conversion sequence has Conversion rank. (note the difference from aggregates: aggregates initialize directly from single-element init lists before considering {{rlp|aggregate initialization}}, non-aggregates consider initializer_list constructors before any other constructors)
}}
{{rev end}}
:* {{rev inl|since=c++14|otherwise, }} the implicit conversion sequence is a user-defined conversion sequence with the second standard conversion sequence an identity conversion.

If multiple constructors are viable but none is better than the others, the implicit conversion sequence is the ambiguous conversion sequence.
{{source|1=
struct A { A(std::initializer_list&lt;int&gt;); };
void f(A);
struct B { B(int, double); };
void g(B);
g({'a','b'});  // calls g(B(int,double)), user-defined conversion
// g({1.0, 1,0}); // error: double-&gt;int is narrowing, not allowed in list-init
void f(B);
// f({'a','b'}); // f(A) and f(B) both user-defined conversions
}}
* Otherwise, if the parameter type is an aggregate which can be initialized from the initializer list according by {{rlp|aggregate initialization}}, the implicit conversion sequence is a user-defined conversion sequence with the second standard conversion sequence an identity conversion.
{{source|1=
struct A { int m1; double m2;};
void f(A);
f({'a','b'});  // calls f(A(int,double)), user-defined conversion
}}
* Otherwise, if the parameter is a reference, reference initialization rules apply
{{source|1=
struct A { int m1; double m2; };
void f(const A&amp;);
f({'a','b'});  // temporary created, f(A(int,double)) called. User-defined conversion
}}
* Otherwise, if the parameter type is not a class and the initializer list has one element, the implicit conversion sequence is the one required to convert the element to the parameter type
* Otherwise, if the parameter type is not a class type and if the initializer list has no elements, the implicit conversion sequence is the identity conversion.

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1467|std=C++14|before=same-type list-initialization of aggregates and arrays was omitted|after=initialization defined}}
{{dr list item|wg=cwg|dr=2137|std=C++14|before=init-list ctors lost to copy ctors when list-initializing X from {X}|after=non-aggregates consider init-lists first}}
{{dr list end}}

===See also===
* {{rlp|lookup|Name lookup}} 
* {{rlp|adl|Argument-dependent lookup}} 
* {{rlp|template argument deduction|Template argument deduction}}
* {{rlp|sfinae|SFINAE}}

===References===
{{ref std c++14}}
{{ref std | section=13.3 | title=Overload resolution | id=over.match}}
{{ref std end}}
{{ref std c++11}}
{{ref std | section=13.3 | title=Overload resolution | id=over.match}}
{{ref std end}}

[[zh:cpp/language/overload resolution]]</text>
      <sha1>0dfeynm9wi1839wya0e0qjx5ksan8of</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/overloaded address</title>
    <ns>0</ns>
    <id>13003</id>
    <revision>
      <id>72399</id>
      <parentid>69224</parentid>
      <timestamp>2014-08-19T14:13:50Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>+links</comment>
      <text xml:space="preserve" bytes="3668">{{title|Address of an overloaded function}}
{{cpp/language/functions/navbar}}

Besides {{rlp|operator_other|function-call expressions}}, where {{rlp|overload resolution}} takes place, the name of an overloaded function may appear in the following 7 contexts:

@1@ {{rlp|initialization|initializer}} in a {{rlp|declarations|declaration}} of an object or {{rlp|reference initialization|reference}}
@2@ on the right-hand-side of an assignment expression
@3@ as a function call argument
@4@ as a user-defined operator argument
@5@ the {{rlp|return}} statement
@6@ {{rlp|explicit cast}} or {{rlp|static cast}} argument
@7@ non-type {{rlp|template parameters|template argument}}

In each context, the name of an overloaded function may be preceded by address-of operator {{ttb|&amp;}} and may be enclosed in a redundant set of parentheses.

In all these contexts, the function selected from the overload set is the function whose type matches the pointer to function, reference to function, or pointer to member function type that is expected by ''target'': the object or reference being initialized, the left-hand side of the assignment, function or operator parameter, the return type of a function, the target type of a cast, or the type of the template parameter, respectively.

The type of the function must match the target exactly, no implicit conversions are considered (e.g. a function returning a pointer to derived won't get selected when initializing a pointer to function returning a pointer to base)

If the function name names a function template, then, first, {{rlp|function template|template argument deduction}} is done, and if it succeeds, it produces a single template specialization which is added to the list of overloads to consider. If more than one function from the set matches the target, and at least one function is non-template, the template specializations are eliminated from consideration. If all candidates are template specializations, {{rlp|partial specialization|less specialized}} ones are removed if more specialized are available. If more than one candidate remains after the removals, the program is ill-formed.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;string&gt;
#include &lt;cctype&gt; // int std::toupper(int)
#include &lt;locale&gt; // template&lt;class CharT&gt; CharT std::toupper(CharT,const locale&amp;)

int f(int) { return 1; }
int f(double) { return 2; }

void g( int(&amp;f1)(int), int(*f2)(double) ) {}

template&lt; int(*F)(int) &gt;
struct Templ {};

struct Foo {
    int mf(int) { return 3; }
    int mf(double) { return 4; }
};

// 5. return value
int (*(foo)(void))(int) {
    return f; // selects int f(int)
}

int main()
{
    // 1. initialization
    int (*pf)(double) = f; // selects int f(double)
    int (&amp;rf)(int) = f; // selects int f(int)
    int (Foo::*mpf)(int) = &amp;Foo::mf; // selects int mf(int)

    // 2. assignment
    pf = nullptr;
    pf = &amp;f; // selects int f(double)

    // 3. function argument
    g(f, f); // selects int f(int) for the 1st argument
             // and int f(double) for the second

    // 4. user-defined operator

    // 6. cast
    std::string str = &quot;example&quot;;
    std::transform(str.begin(), str.end(), str.begin(),
                   static_cast&lt;int(*)(int)&gt;(std::toupper)); // selects int toupper(int)
    std::cout &lt;&lt; str &lt;&lt; '\n';

    // 7. template argument
    Templ&lt;f&gt; t;  // selects int f(int)
}
|output=EXAMPLE
}}

===References===
{{ref std c++11}}
{{ref std | section=13.4 | title=Address of overloaded function | id=over.over}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=13.4 | title=Address of overloaded function | id=over.over}}
{{ref std end}}</text>
      <sha1>8cgix1m8sylhjbnmi9hov4tb4m2kfrk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/override</title>
    <ns>0</ns>
    <id>5073</id>
    <revision>
      <id>91158</id>
      <parentid>76910</parentid>
      <timestamp>2017-03-24T06:21:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Syntax */ Since there are no virtual constructors, no point talking about the ctor-initializer. Clarify that virt-specifier-seq can only appear inside a function-definition used as a member-declaration.</comment>
      <text xml:space="preserve" bytes="2240">{{title|override specifier {{mark since c++11}}}}
{{cpp/language/classes/navbar}}

Specifies that a {{rlp|virtual|virtual function}} overrides another virtual function. 

===Syntax===
The identifier {{tt|override}}, if used, appears immediately after the {{rlp|function|declarator}} in the syntax of a member function declaration or a member function definition inside a class definition.

{{sdsc begin}}
{{sdsc | num=1 | {{spar|declarator}} {{spar|virt-specifier-seq}}{{mark optional}} {{spar|pure-specifier}}{{mark optional}} }}
{{sdsc | num=2 | {{spar|declarator}} {{spar|virt-specifier-seq}}{{mark optional}} {{spar|function-body}} }}
{{sdsc end}}
@1@ In a member function declaration, {{tt|override}} may appear in {{spar|virt-specifier-seq}} immediately after the declarator, and before the {{rlp|abstract_class|pure-specifier}}, if used.
@2@ In a member function definition inside a class definition, {{tt|override}} may appear in {{spar|virt-specifier-seq}} immediately after the declarator and just before {{spar|function-body}}.

In both cases, {{spar|virt-specifier-seq}}, if used, is either {{tt|override}} or {{rlp|final}}, or {{tt|final override}} or {{tt|override final}}.

===Explanation===
In a member function declaration or definition, {{tt|override}} ensures that the function is virtual and is overriding a virtual function from the base class. The program is ill-formed (a compile-time error is generated) if this is not true.

{{c|override}} is an identifier with a special meaning when used after member function declarators: it's not a reserved keyword otherwise.

===Example===
{{source|
struct A
{
    virtual void foo();
    void bar();
};

struct B : A
{
    void foo() const override; // Error: B::foo does not override A::foo
                               // (signature mismatch)
    void foo() override; // OK: B::foo overrides A::foo
    void bar() override; // Error: A::bar is not virtual
};
}}

===See also===
*[[cpp/language/final|final specifier]] {{mark since c++11}}

[[de:cpp/language/override]]
[[es:cpp/language/override]]
[[fr:cpp/language/override]]
[[it:cpp/language/override]]
[[ja:cpp/language/override]]
[[pt:cpp/language/override]]
[[ru:cpp/language/override]]
[[zh:cpp/language/override]]</text>
      <sha1>hops2dj2pse02nea0cy9pjnm1frw04m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/parameter pack</title>
    <ns>0</ns>
    <id>9639</id>
    <revision>
      <id>91248</id>
      <parentid>91247</parentid>
      <timestamp>2017-03-29T18:26:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/Error/can't be used since the definition compiles</comment>
      <text xml:space="preserve" bytes="12421">{{title|Parameter pack}}
{{cpp/language/templates/navbar}}

A template parameter pack is a template parameter that accepts zero or more template arguments (non-types, types, or templates). A function parameter pack is a function parameter that accepts zero or more function arguments.

A template with at least one parameter pack is called a ''variadic template''.

===Syntax===
Template parameter pack (appears in a [[cpp/language/class template|class template]] and in a [[cpp/language/function template|function template]] parameter list)
{{sdsc begin}}
{{sdsc|num=1|{{spar|type}} {{ttb|...}} {{spar|Args}}{{mark optional}} | notes={{mark since c++11}}}}
{{sdsc|num=2|{{ttb|typename{{!}}class}} {{ttb|...}} {{spar|Args}}{{mark optional}} | notes={{mark since c++11}}}}
{{sdsc|num=3|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{ttb|typename{{mark c++17}}{{!}}class}} {{ttb|...}} {{spar|Args}}{{mark optional}} | notes={{mark since c++11}}}}
{{sdsc end}}
Function parameter pack (a form of {{rlp|declarations|declarator}}, appears in a function parameter list of a variadic function template)
{{sdsc begin}}
{{sdsc|num=4|{{spar|Args}} {{ttb|...}} {{spar|args}}{{mark optional}} | notes={{mark since c++11}}}}
{{sdsc end}}
Parameter pack expansion (appears in a body of a variadic template)
{{sdsc begin}}
{{sdsc|{{spar|pattern}} {{ttb|...}} | num=5 | notes={{mark since c++11}} }}
{{sdsc end}}

@1@ A non-type template parameter pack with an optional name
@2@ A type template parameter pack with an optional name
@3@ A template template parameter pack with an optional name
@4@ A function parameter pack with an optional name
@5@ Parameter pack expansion: expands to comma-separated list of zero or more {{tt|pattern}}s. Pattern must include at least one parameter pack.

===Explanation===

A variadic class template can be instantiated with any number of template arguments:
{{source|
template&lt;class ... Types&gt; struct Tuple {};
Tuple&lt;&gt; t0;           // Types contains no arguments
Tuple&lt;int&gt; t1;        // Types contains one argument: int
Tuple&lt;int, float&gt; t2; // Types contains two arguments: int and float
Tuple&lt;0&gt; error;       // error: 0 is not a type
}}

A variadic function template can be called with any number of function arguments (the template arguments are deduced through {{rlp|template argument deduction}}):
{{source|
template&lt;class ... Types&gt; void f(Types ... args);
f();       // OK: args contains no arguments
f(1);      // OK: args contains one argument: int
f(2, 1.0); // OK: args contains two arguments: int and double
}}

In a primary class template, the template parameter pack must be the final parameter in the template parameter list. In a function template, the template parameter pack may appear earlier in the list provided that all following parameters can be deduced from the function arguments, or have default arguments:
{{source|1=
template&lt;typename... Ts, typename U&gt; struct Invalid; // Error: Ts.. not at the end

template&lt;typename ...Ts, typename U, typename=void&gt;
void valid(U, Ts...);     // OK: can deduce U
// void valid(Ts..., U);  // Can't be used: Ts... is a non-deduced context in this position

valid(1.0, 1, 2, 3);      // OK: deduces U as double, Ts as {int,int,int}
}}


===Pack expansion===
A pattern followed by an ellipsis, in which the name of at least one parameter pack appears at least once, is ''expanded'' into zero or more comma-separated instantiations of the pattern, where the name of the parameter pack is replaced by each of the elements from the pack, in order.

{{source|
template&lt;class ...Us&gt; void f(Us... pargs) {}
template&lt;class ...Ts&gt; void g(Ts... args) {
    f(&amp;args...); // “&amp;args...” is a pack expansion
                 // “&amp;args” is its pattern
}
g(1, 0.2, &quot;a&quot;); // Ts... args expand to int E1, double E2, const char* E3
                // &amp;args... expands to &amp;E1, &amp;E2, &amp;E3
                // Us... pargs expand to int* E1, double* E2, const char** E3
}}

If the names of two parameter packs appear in the same pattern, they are expanded simultaneously, and they must have the same length:

{{source|
template&lt;typename...&gt; struct Tuple {};
template&lt;typename T1, typename T2&gt; struct Pair {};

template&lt;class ...Args1&gt; struct zip {
    template&lt;class ...Args2&gt; struct with {
        typedef Tuple&lt;Pair&lt;Args1, Args2&gt;...&gt; type;
//        Pair&lt;Args1, Args2&gt;... is the pack expansion
//        Pair&lt;Args1, Args2&gt; is the pattern
    };
};

typedef zip&lt;short, int&gt;::with&lt;unsigned short, unsigned&gt;::type T1;
// Pair&lt;Args1, Args2&gt;... expands to
// Pair&lt;short, unsigned short&gt;, Pair&lt;int, unsigned int&gt; 
// T1 is Tuple&lt;Pair&lt;short, unsigned short&gt;, Pair&lt;int, unsigned&gt;&gt;

typedef zip&lt;short&gt;::with&lt;unsigned short, unsigned&gt;::type T2;
// error: pack expansion contains parameter packs of different lengths
}}

If a pack expansion is nested within another pack expansion, the parameter packs that appear inside the innermost pack expansion are expanded by it, and there must be another pack mentioned in the enclosing pack expansion, but not in the innermost one:

{{source|template&lt;class ...Args&gt;
    void g(Args... args) {
        f(const_cast&lt;const Args*&gt;(&amp;args)...); 
 // const_cast&lt;const Args*&gt;(&amp;args) is the pattern, it expands two packs
 // (Args and args) simultaneously

        f(h(args...) + args...); // Nested pack expansion:
   // inner pack expansion is &quot;args...&quot;, it is expanded first
   // outer pack expansion is h(E1, E2, E3) + args..., it is expanded
   // second (as h(E1,E2,E3) + E1, h(E1,E2,E3) + E2, h(E1,E2,E3) + E3)
}
}}

===Expansion loci===
Depending on where the expansion takes place, the resulting comma-separated list is a different kind of list: function parameter list, member initializer list, attribute list, etc. The following is the list of all allowed contexts

====Function argument lists====
A pack expansion may appear inside the parentheses of a function call operator, in which case the largest expression to the left of the ellipsis is the pattern that is expanded.

{{source|
f(&amp;args...); // expands to f(&amp;E1, &amp;E2, &amp;E3)
f(n, ++args...); // expands to f(n, ++E1, ++E2, ++E3);
f(++args..., n); // expands to f(++E1, ++E2, ++E3, n);
f(const_cast&lt;const Args*&gt;(&amp;args)...);
// f(const_cast&lt;const E1*&gt;(&amp;X1), const_cast&lt;const E2*&gt;(&amp;X2), const_cast&lt;const E3*&gt;(&amp;X3))
f(h(args...) + args...); // expands to 
// f(h(E1,E2,E3) + E1, h(E1,E2,E3) + E2, h(E1,E2,E3) + E3)
}}

====Template argument lists====
Pack expansions can be used anywhere in a template argument list, provided the template has the parameters to match the expansion.

{{source|
template&lt;class A, class B, class...C&gt; void func(A arg1, B arg2, C...arg3)
{
    container&lt;A,B,C...&gt; t1;  // expands to container&lt;A,B,E1,E2,E3&gt; 
    container&lt;C...,A,B&gt; t2;  // expands to container&lt;E1,E2,E3,A,B&gt; 
    container&lt;A,C...,B&gt; t3;  // expands to container&lt;A,E1,E2,E3,B&gt; 
}
}}

====Function parameter list====
In a function parameter list, if an ellipsis appears in a parameter declaration (whether it names a function parameter pack (as in,  {{spar|Args}} {{ttb|...}} {{spar|args}}) or not) the parameter declaration is the pattern:
{{source|
template&lt;typename ...Ts&gt; void f(Ts...) {}
f('a', 1);  // Ts... expands to void f(char, int)
f(0.1);     // Ts... expands to void f(double)

template&lt;typename ...Ts, int... N&gt; void g(Ts (&amp;...arr)[N]) {}
int n[1];
g&lt;const char, int&gt;(&quot;a&quot;, n); // Ts (&amp;...arr)[N] expands to 
                            // const char (&amp;)[2], int(&amp;)[1]
}}
Note: In the pattern {{tt|Ts (&amp;...arr)[N]}}, the ellipsis is the innermost element, not the last element as in all other pack expansions.

Note: {{tt|Ts (&amp;...)[N]}} is not allowed because the C++11 grammar requires the parenthesized ellipsis to have a name: [http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1488 CWG #1488].

====Template parameter list====
Pack expansion may appear in a template parameter list:

{{source|
template&lt;typename... T&gt; struct value_holder
{
    template&lt;T... Values&gt; // expands to a non-type template parameter 
    struct apply { };     // list, such as &lt;int, char, int(&amp;)[5]&gt;
};
}}

====Base specifiers and member initializer lists====
A pack expansion may designate the list of base classes in a {{rlp|class|class declaration}}. Typically, this also means that the constructor needs to use a pack expansion in the {{rlp|initializer list|member initializer list}} to call the constructors of these bases:

{{source|
template&lt;class... Mixins&gt;
class X : public Mixins... {
 public:
    X(const Mixins&amp;... mixins) : Mixins(mixins)... { }
};
}}

====Braced init lists====
In a braced-init-list (brace-enclosed list of initializers and other braced-init-lists, used in {{rlp|list_initialization|list-initialization}} and some other contexts), a pack expansion may appear as well:

{{source|1=
template&lt;typename... Ts&gt; void func(Ts... args){
    const int size = sizeof...(args) + 2;
    int res[size] = {1,args...,2};
    // since initializer lists guarantee sequencing, this can be used to
    // call a function on each element of a pack, in order:
    int dummy[sizeof...(Ts)] = { (std::cout &lt;&lt; args, 0)... };
}
}}

====Lambda captures====
A parameter pack may appear in the capture clause of a {{rlp|lambda}} expression
{{source|1=
template&lt;class ...Args&gt;
void f(Args... args) {
    auto lm = [&amp;, args...] { return g(args...); };
    lm();
}
}}

====The sizeof... operator====
The {{rlp|sizeof...}} operator is classified as a pack expansion as well

{{source|1=template&lt;class... Types&gt;
struct count {
    static const std::size_t value = sizeof...(Types);
};
}}

====Dynamic exception specifications====
The list of exceptions in a {{rlp|except_spec|dynamic exception specification}} may also be a pack expansion

{{source|template&lt;class...X&gt; void func(int arg) throw(X...)
{
 // ... throw different Xs in different situations
}
}}

====Alignment specifier====
Pack expansions are allowed in both the lists of types and the lists of expressions used by the keyword {{rlp|alignas}} 

====Attribute list====
Pack expansions are allowed in the lists of {{rlp|attributes}}, as in {{c|[[attributes...]]}}. For example: {{c|void [[attributes...]] function()}}

{{rev begin}}
{{rev|since=c++17|
====Fold-expressions====
In {{rlp|fold|fold-expressions}}, the pattern is the entire subexpression that does not contain an unexpanded parameter pack.

====Using-declarations====
In {{rlp|using declaration}}, ellipsis may appear in the list of declarators, this is useful when deriving from a parameter pack:
{{source|
template &lt;typename... bases&gt;
struct X : bases... {
	using bases::g...;
};
X&lt;B, D&gt; x; // OK: B::g and D::g introduced
}}
}}
{{rev end}}

===Notes===
{{todo|a few words about partial specializations and other ways to access individual elements? Mention recursion vs logarithmic vs shortcuts such as fold expressions}}

===Example===
{{example|code=
#include &lt;iostream&gt;

void tprintf(const char* format) // base function
{
    std::cout &lt;&lt; format;
}

template&lt;typename T, typename... Targs&gt;
void tprintf(const char* format, T value, Targs... Fargs) // recursive variadic function
{
    for ( ; *format != '\0'; format++ ) {
        if ( *format == '%' ) {
           std::cout &lt;&lt; value;
           tprintf(format+1, Fargs...); // recursive call
           return;
        }
        std::cout &lt;&lt; *format;
    }
}

int main()
{
    tprintf(&quot;% world% %\n&quot;,&quot;Hello&quot;,'!',123);
    return 0;
}
| output=
Hello world! 123
}}
The above example defines a function similar to {{lc|std::printf}}, that replace each occurrence of the character % in the format string with a value.

The first overload is called when only the format string is passed and there is no parameter expansion.

The second overload contains a separate template parameter for the head of the arguments and a parameter pack, this allows the recursive call to pass only the tail of the parameters until it becomes empty.

{{ttb|Targs}} is the template parameter pack and {{ttb|Fargs}} is the function parameter pack

===See also===
{{dsc begin}}
{{dsc | [[cpp/language/function_template|function template]] }}
{{dsc | [[cpp/language/class_template|class template]] }}
{{dsc | {{ltt|cpp/language/sizeof...}} | Queries the number of elements in a parameter pack.  }}
{{dsc | [[cpp/utility/variadic|C-style variadic functions]] }}
{{dsc | [[cpp/preprocessor/replace | Preprocessor macros]] | Can be variadic as well }}
{{dsc end}}

[[zh:cpp/language/parameter pack]]</text>
      <sha1>nm3x7bcun69k9ipc2iw8t26tyw9o7v5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/partial specialization</title>
    <ns>0</ns>
    <id>12828</id>
    <revision>
      <id>91942</id>
      <parentid>91734</parentid>
      <timestamp>2017-03-31T20:13:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="10317">{{title|partial template specialization}}
{{cpp/language/templates/navbar}}
Allows customizing class templates for a given category of template arguments.

===Syntax===

{{sdsc begin}}
{{sdsc|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|class-key}} {{spar|class-head-name}} {{ttb|&lt;}} {{spar|argument-list}} {{ttb|&gt;}} {{spar|declaration}} }}
{{sdsc end}}

where {{spar|class-head-name}} identifies the name of a previously declared {{rlp|class_template|class template}}. This declaration must be in the same {{rlp|namespace}} or, for {{rlp|member template}}s, class scope as the primary template definition which it specializes{{mark unreviewed dr|CWG|1819}}.

For example,
{{source|
template&lt;class T1, class T2, int I&gt;
class A {};            // primary template

template&lt;class T, int I&gt;
class A&lt;T, T*, I&gt; {};  // #1: partial specialization where T2 is a pointer to T1

template&lt;class T, class T2, int I&gt;
class A&lt;T*, T2, I&gt; {}; // #2: partial specialization where T1 is a pointer

template&lt;class T&gt;
class A&lt;int, T*, 5&gt; {}; // #3: partial specialization where T1 is int, I is 5,
                        //     and T2 is a pointer

template&lt;class X, class T, int I&gt;
class A&lt;X, T*, I&gt; {};   // #4: partial specialization where T2 is a pointer
}}

Examples of partial specializations in the standard library include {{c|std::unique_ptr}}, which has a partial specialization for array types.

===The argument list===
The following restrictions apply to the {{spar|argument-list}} of a partial template specialization:
@1@ The argument list cannot be identical to the non-specialized argument list (it must specialize something)
{{source|
template&lt;class T1, class T2, int I&gt; class B {}; // primary template
template&lt;class X, class Y, int N&gt; class B&lt;X,Y,N&gt; {}; // error
}}
{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|1495}}
Moreover, the specialization has to be more specialized than the primary template
{{source|1=
template&lt;int N, typename T1, typename... Ts&gt; struct B;
template&lt;typename... Ts&gt; struct B&lt;0, Ts...&gt; { }; // Error: not more specialized
}}
}}
{{rev end}}

@2@ Default arguments cannot appear in the argument list
@3@ If any argument is a pack expansion, it must be the last argument in the list
@4@ {{rev inl|until=c++14|{{mark unreviewed dr|CWG|1315}}Non-type argument expression cannot use the name of the template parameter except when it is exactly the name of the template parameter}}{{rev inl|since=c++14|{{mark unreviewed dr|CWG|1315}}Non-type argument expressions can use template parameters as long as the parameter appears at least once outside a {{rlp|template_argument_deduction#Non-deduced_contexts|non-deduced context}}}}
{{source|1=
template &lt;int I, int J&gt; struct A {};
template &lt;int I&gt; struct A&lt;I+5, I*2&gt; {}; // error, I is not deducible

template &lt;int I, int J, int K&gt; struct B {};
template &lt;int I&gt; struct B&lt;I, I*2, 2&gt; {};  // OK: first parameter is deducible
}}
@5@ Non-type template argument cannot specialize a template parameter whose type depends on a parameter of the specialization:
{{source|1=
template &lt;class T, T t&gt; struct C {}; // primary template
template &lt;class T&gt; struct C&lt;T, 1&gt;; // error: type of the argument 1 is T,
                                   // which depends on the parameter T

template&lt; int X, int (*array_ptr)[X] &gt; class B {}; // primary template
int array[5];
template&lt; int X &gt; class B&lt;X,&amp;array&gt; { }; // error: type of the argument &amp;array
                             // is int(*)[X], which depends on the parameter X
}}

===Name lookup===
Partial template specializations are not found by name lookup. Only if the primary template is found by name lookup, its partial specializations are considered. In particular, a using declaration that makes a primary template visible, makes partial specializations visible as well:
{{source|1=
namespace N {
    template&lt;class T1, class T2&gt; class Z { }; // primary template
}
using N::Z; // refers to the primary template
namespace N {
    template&lt;class T&gt; class Z&lt;T, T*&gt; { }; // partial specialization
}
Z&lt;int,int*&gt; z; // name lookup finds N::Z (the primary template),
               // the partial specialization with T = int is then used
}}

===Partial ordering===
When a class template is instantiated, and there are partial specializations available, the compiler has to decide if the primary template is going to be used or one of its partial specializations. 

@1@ If only one specialization matches the template arguments, that specialization is used
@2@ If more than one specialization matches, partial order rules are used to determine which specialization is more specialized. The most specialized specialization is used, if it is unique (if it is not unique, the program cannot be compiled)
@3@ If no specializations match, the primary template is used
{{source|1=
// given the template A as defined above
A&lt;int, int, 1&gt; a1;   // no specializations match, uses primary template
A&lt;int, int*, 1&gt; a2;  // uses partial specialization #1 (T=int, I=1)
A&lt;int, char*, 5&gt; a3; // uses partial specialization #3, (T=char)
A&lt;int, char*, 1&gt; a4; // uses partial specialization #4, (X=int, T=char, I=1)
A&lt;int*, int*, 2&gt; a5; // error: matches #2 (T=int, T2=int*, I=2)
                     //        matches #4 (X=int*, T=int, I=2)
                     // neither one is more specialized than the other
}}

Informally &quot;A is more specialized than B&quot; means &quot;A accepts fewer types than B&quot;.

Formally, to establish more-specialized-than relationship between partial specializations, each is first converted to a fictitious function template as follows:
* the first function template has the same template parameters as the first partial specialization and has just one function parameter, whose type is a class template specialization with all the template arguments from the first partial specialization
* the second function template has the same template parameters as the second partial specialization and has just one function parameter whose type is a class template specialization with all the template arguments from the second partial specialization.

The function templates are then ranked as if for {{rlp|function_template#Function_template_overloading|function template overloading}}.

{{source|1=
template&lt;int I, int J, class T&gt; struct X { }; // primary template
template&lt;int I, int J&gt;          struct X&lt;I, J, int&gt; {
        static const int s = 1;
}; // partial specialization #1
// fictitious function template for #1 is
// template&lt;int I, int J&gt; void f(X&lt;I, J, int&gt;); #A

template&lt;int I&gt;                 struct X&lt;I, I, int&gt; {
        static const int s = 2;
}; // partial specialization #2
// fictitious function template for #2 is 
// template&lt;int I&gt;        void f(X&lt;I, I, int&gt;); #B

int main()
{
    X&lt;2, 2, int&gt; x; // both #1 and #2 match
// partial ordering for function templates:
// #A from #B: void(X&lt;I,J,int&gt;) from void(X&lt;U1, U1, int&gt;): deduction ok
// #B from #A: void(X&lt;I,I,int&gt;) from void(X&lt;U1, U2, int&gt;): deduction fails
// #B is more specialized
// #2 is the specialization that is instantiated
    std::cout &lt;&lt; x.s &lt;&lt; '\n'; // prints 2
}
}}

===Members of partial specializations===
The template parameter list and the template argument list of a member of a partial specialization must match the parameter list and the argument list of the partial specialization. 

Just like with members of primary templates, they only need to be defined if used in the program.

Members of partial specializations are not related to the members of the primary template.

Explicit (full) specialization of a member of a partial specialization is declared the same way as an explicit specialization of the primary template.

{{source|1=
template&lt;class T, int I&gt;  // primary template
struct A {
    void f(); // member declaration
};

template&lt;class T, int I&gt;
void A&lt;T,I&gt;::f() { } // primary template member definition

// partial specialization
template&lt;class T&gt;
struct A&lt;T,2&gt; {
    void f();
    void g();
    void h();
};

// member of partial specialization
template&lt;class T&gt;
void A&lt;T,2&gt;::g() { }

// explicit (full) specialization
// of a member of partial specialization
template&lt;&gt;
void A&lt;char,2&gt;::h() {}

int main() {
    A&lt;char,0&gt; a0;
    A&lt;char,2&gt; a2;
    a0.f(); // OK, uses primary template’s member definition
    a2.g(); // OK, uses partial specialization's member definition
    a2.h(); // OK, uses fully-specialized definition of
            // the member of a partial specialization
    a2.f(); // error: no definition of f() in the partial
            // specialization A&lt;T,2&gt; (the primary template is not used)
}
}}

If a class template is a member of another class template, and it has partial specializations, these specializations are members of the enclosing class template. If the enclosing template is instantiated, the declarations of each member partial specialization is instantiated as well (the same way declarations, but not definitions, of all other members of a template are instantiated)

If the primary member template is explicitly (fully) specialized for a given (implicit) specialization of the enclosing class template, the partial specializations of the member
template are ignored for this specialization of the enclosing class template.

If a partial specialization of the member template is explicitly specialized for a given (implicit) specialization of the enclosing class template, the primary member template and its other partial specializations are still considered for this specialization
of the enclosing class template.

{{source|1=
template&lt;class T&gt; struct A { // enclosing class template
  template&lt;class T2&gt;
  struct B {}; // primary member template
  template&lt;class T2&gt;
  struct B&lt;T2*&gt; {}; // partial specialization of member template
};

template&lt;&gt;
template&lt;class T2&gt;
struct A&lt;short&gt;::B {}; // full specialization of primary member template
                       // (will ignore the partial)

A&lt;char&gt;::B&lt;int*&gt; abcip; // uses partial specialization T2=int
A&lt;short&gt;::B&lt;int*&gt; absip; // uses full specialization of the primary (ignores partial)
A&lt;char&gt;::B&lt;int&gt; abci; // uses primary
}}


===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1315|std=C++14|before=template parameter could not be used in non-type arg expressions other than id-expresisons|after=expressions ok as long as deducible}}
{{dr list end}}</text>
      <sha1>p4fhyn5pq7uexb5glnhzz80lihfscv5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/pimpl</title>
    <ns>0</ns>
    <id>14656</id>
    <revision>
      <id>87979</id>
      <parentid>87768</parentid>
      <timestamp>2016-10-18T17:56:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>extra comment in the opening code snipped to note that it's only one example and more possibilities are discussed below</comment>
      <text xml:space="preserve" bytes="10209">{{title|PImpl}}
{{cpp/language/navbar}}

&quot;Pointer to implementation&quot; or &quot;pImpl&quot; is a C++ programming technique&lt;ref&gt;[http://herbsutter.com/gotw/_100/ GotW #100]: Compilation Firewalls&lt;/ref&gt; that removes implementation details of a class from its object representation by placing them in a separate class, accessed through an opaque pointer:
{{source|1=
// widget.h (interface)
class widget {
    // public members
private:
    struct impl;  // forward declaration of the implementation class
    // One implementation example: see below for other design options and trade-offs
    std::experimental::propagate_const&lt; // const-forwarding pointer wrapper
        std::unique_ptr&lt;                // unique-ownership opaque pointer
            impl&gt;&gt; pImpl;               // to the forward-declared implementation class
};

// widget.cpp (implementation)
struct widget::impl {
   // implementation details
};
}}

This technique is used to construct C++ library interfaces with stable ABI and to reduce compile-time dependencies.

===Explanation===
Because private data members of a class participate in its object representation, affecting size and layout, and because private member functions of a class participate in {{rlp|overload resolution}} (which takes place before member access checking), any change to those implementation details requires recompilation of all users of the class.

pImpl breaks this compilation dependency; changes to the implementation do not cause recompilation. Consequently, if a library uses pImpl in its ABI, newer versions of the library may change the implementation while remaining ABI-compatible with older versions.

===Trade-offs===
The alternatives to the pImpl idiom are
* inline implementation: private members and public members are members of the same class
* pure abstract class (OOP factory): users obtain a unique pointer to a lightweight or abstract base class, the implementation details are in the derived class that overrides its virtual member functions

====Compilation firewall====
In simple cases, both pImpl and factory method break compile-time dependency between the implementation and the users of the class interface. Factory method creates a hidden dependency on the vtable, and so reordering, adding, or removing virtual member functions breaks the ABI. The pImpl approach has no hidden dependencies, however if the implementation class is a class template specialization, the compilation firewall benefit is lost: the users of the interface must observe the entire template definition in order to instantiate the correct specialization. A common design approach in this case is to refactor the implementation in a way that avoids parametrization, this is another use case for the C++ Core Guidelines [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rt-scary T.61 Do not over-parametrize members] and [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t84-use-a-non-template-core-implementation-to-provide-an-abi-stable-interface T.84 Use a non-template core implementation to provide an ABI-stable interface]

For example, the following class template does not use the type T in its private members or in the body of push_back &lt;!-- note; de-parametrization part of the example based on User:Jwakely's http://accu.org/content/conf2011/Jonathan-Wakely-diet-templates.pdf --&gt;
{{source|1=
template&lt;class T&gt;
class ptr_vector {
    void **beg, **end, **cap;
public:
    void push_back(T* p) {
        if (end == cap) reallocate(end - beg + 1);
        *end++ = p;
    }
};
}}

Therefore, private members can be transferred to implementation as-is, and push_back can forward to an implementation that does not use T in the interface either:
{{source|1=
// header (ptr_vector.h)
class ptr_vector_base {
    struct impl; // does not depend on T
    std::unique_ptr&lt;impl&gt; pImpl;
 protected:
    void push_back_fwd(void*);
    ... // see implementation section for special member functions
};
template&lt;class T&gt;
class ptr_vector : private ptr_vector_base {
public:
    void push_back(T* p) { push_back_fwd(p); }
};

// source (ptr_vector.cpp)
struct ptr_vector_base::impl {
    void **beg, **end, **cap;
    void push_back(void* p) {
        if (end == cap) reallocate(end - beg + 1);
        *end++ = p;
    }
    void reallocate(size_t sz) { ... }
};
void ptr_vector_base::push_back_fwd(void* p) { pImpl-&gt;push_back(p); }
ptr_vector_base::ptr_vector_base() : pImpl(std::make_unique&lt;impl&gt;()) {}
}}

====Runtime overhead====
* Access overhead: In pImpl, each call to a private member function indirects through a pointer. Each access to a public member made by a private member indirects through another pointer. Both indirections cross translation unit boundaries and so can only be optimized out by link-time optimization. Note that OO factory requires indirection across translation units to access both public data and implementation detail, and offers even fewer opportunities for the link time optimizer due to virtual dispatch.
* Space overhead: pImpl adds one pointer to the public component and, if any private member needs access to a public member, another pointer is either added to the implementation component or passed as a parameter for each call to the private member that requires it. If stateful custom allocators are supported, the allocator instance also has to be stored.
* Lifetime management overhead: pImpl (as well as OO factory) place the implementation object on the heap, which imposes significant runtime overhead at construction and destruction. This may be partially offset by custom allocators, since allocation size for pImpl (but not OO factory) is known at compile time.

On the other hand, pImpl classes are move-friendly; refactoring a large class as movable pImpl may improve performance of algorithms that manipulate containers holding such objects, although movable pImpl has an additional source of runtime overhead: any public member function that is permitted on a moved-from object and needs access to private implementation incurs a null pointer check.

{{todo|Microbenchmark?)}}

====Maintenance overhead====
Use of pImpl requires a dedicated translation unit (a header-only library cannot use pImpl), introduces an additional class, a set of forwarding functions, and, if allocators are used, exposes the implementation detail of allocator use in the public interface.

Since virtual members are part of the interface component of pImpl, mocking a pImpl implies mocking the interface component alone. A testable pImpl is typically designed to allow full test coverage through the available interface.

===Implementation===
As the object of the interface type controls the lifetime of the object of the implementation type, the pointer to implementation is usually {{lc|std::unique_ptr}}.

Because {{lc|std::unique_ptr}} requires that the pointed-to type is a complete type in any context where the deleter is called, the destructor and the copy/move assignment operators must be user-declared and defined out-of-line, in the implementation file, where the implementation class is complete. This suppresses the move constructor, which has to be defined or defaulted.

Because when const member function calls a function through a non-const member pointer, the non-const overload of the implementation function is called, the pointer has to be wrapped in {{lc|std::experimental::propagate_const}} or equivalent.

All private data members and all private non-virtual member functions are placed in the implementation class. All public, protected, and virtual members remain in the interface class (see [http://herbsutter.com/gotw/_100/ GOTW #100] for the discussion of the alternatives).

If any of the private members needs to access a public or protected member, a reference or pointer to the interface may be passed to the private function as a parameter. Alternatively, the back-reference may be maintained as part of the implementation class.

If non-default allocators are intended to be supported for the allocation of the implementation object, any of the usual allocator awareness patterns may be utilized, including allocator template parameter defaulting to {{lc|std::allocator}} and constructor argument of type {{ltt|cpp/memory/memory_resource|std::pmr::memory_resource*}}.

===Example===
{{example|demonstrates a pImpl with const propagation, with back-reference passed as a parameter, without allocator awareness, and move-enabled without runtime checks
|code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;experimental/propagate_const&gt;

// interface (widget.h)
class widget {
    class impl;
    std::experimental::propagate_const&lt;std::unique_ptr&lt;impl&gt;&gt; pImpl;
 public:
    void draw() const; // public API that will be forwarded to the implementation
    void draw();
    bool shown() const { return true; } // public API that implementation has to call
    widget(int);
    ~widget(); // defined in the implementation file, where impl is a complete type
    widget(widget&amp;&amp;) = default;  // Note: calling draw() on moved-from object is UB
    widget(const widget&amp;) = delete;
    widget&amp; operator=(widget&amp;&amp;); // defined in the implementation file
    widget&amp; operator=(const widget&amp;) = delete;
};

// implementation (widget.cpp)
class widget::impl {
    int n; // private data
 public:
    void draw(const widget&amp; w) const {
        if(w.shown()) // this call to public member function requires the back-reference 
            std::cout &lt;&lt; &quot;drawing a const widget &quot; &lt;&lt; n &lt;&lt; '\n';
    }
    void draw(const widget&amp; w) {
        if(w.shown())
            std::cout &lt;&lt; &quot;drawing a non-const widget &quot; &lt;&lt; n &lt;&lt; '\n';
    }
    impl(int n) : n(n) {}
};
void widget::draw() const { pImpl-&gt;draw(*this); }
void widget::draw() { pImpl-&gt;draw(*this); }
widget::widget(int n) : pImpl{std::make_unique&lt;impl&gt;(n)} {}
widget::~widget() = default;
widget&amp; widget::operator=(widget&amp;&amp;) = default;

// user (main.cpp)
int main()
{
    widget w(7);
    const widget w2(8);
    w.draw();
    w2.draw();
}
|output=
drawing a non-const widget 7
drawing a const widget 8
}}

===Notes===
{{todo|note connection to value-semantic polymorphism}}

==References==
&lt;references/&gt;</text>
      <sha1>9igwtt740zcihppg08c4gzo7oednb92</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/pointer</title>
    <ns>0</ns>
    <id>5596</id>
    <revision>
      <id>83586</id>
      <parentid>83154</parentid>
      <timestamp>2016-03-01T03:08:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention that base-to-derived implicit pdm conversions require that the base is non-virtual</comment>
      <text xml:space="preserve" bytes="16612">{{title|Pointer declaration}}
{{cpp/language/declarations/navbar}}

Declares a variable of a pointer or pointer-to-member type.

===Syntax===
A pointer declaration is any simple declaration whose {{rlp|declarations|declarator}} has the form

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|*}} {{spar|attr}}{{mark optional}} {{spar|cv}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc|num=2|1=
{{spar|nested-name-specifier}} {{ttb|*}} {{spar|attr}}{{mark optional}} {{spar|cv}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc end}}

@1@ '''Pointer declarator''': the declaration {{c|S* D;}} declares {{tt|D}} as a pointer to the type determined by {{spar|decl-specifier-seq}} {{tt|S}}.
@2@ '''Pointer to member declarator''': the declaration {{c|S C::* D;}} declares {{tt|D}} as a pointer to non-static member of {{tt|C}} of type determined by {{spar|decl-specifier-seq}} {{tt|S}}.

{{par begin}}
{{par | {{spar|declarator}} | any {{rlp|declarations|declarator}} other than a reference declarator (there are no pointers to references). It can be another pointer declarator (pointer to pointers are allowed) }}
{{par | {{spar|attr}}{{mark c++11}} | optional list of {{rlp|attributes}} }}
{{par | {{spar|cv}} | const/volatile qualification which apply to the pointer that is being declared (not to the pointed-to type, whose qualifications are part of {{spar|decl-specifier-seq}}) }}
{{par | {{spar|nested-name-specifier}} | a {{rlp|identifiers#Qualified identifiers|sequence of names and scope resolution operators {{ttb|::}} }} }}
{{par end}}

There are no pointers to {{rlp|reference}}s and there are no pointers to {{rlp|bit field}}s.

====Pointers to objects====
A pointer to object can be initialized with the return value of the {{rlp|operator_member_access|address-of operator}} applied to any expression of object type, including another pointer type:

{{source|1=
int n;
int* np = &amp;n; // pointer to int
int* const* npp = &amp;np; // non-const pointer to const pointer to non-const int

int a[2];
int (*ap)[2] = &amp;a; // pointer to array of int

struct S { int n; };
S s = {1};
int* sp = &amp;s.n; // pointer to the int that is a member of s
}}

Pointers may appear as operands to the built-in indirection operator (unary {{tt|operator*}}), which returns the {{rlp|value category|lvalue expression}} identifying the pointed-to object:

{{source|1=
int n;
int* p = &amp;n;     // pointer to n
int&amp; r = *p;     // reference is bound to the lvalue expression that identifies n
r = 7;           // stores the int 7 in n
std::cout &lt;&lt; *p; // lvalue-to-rvalue implicit conversion reads the value from n
}}

Pointers to class objects may also appear as the left-hand operands of the member access operators {{rlp|operator_member_access#Built-in member_access_operators|operator-&gt;}} and {{rlp|operator_member_access#Built-in_pointer-to-member_access_operators|operator-&gt;*}}.

Because of the {{rlp|implicit_cast|array-to-pointer}} implicit conversion, pointer to the first element of an array can be initialized with an expression of array type:

{{source|1=
int a[2];
int* p1 = a; // pointer to the first element a[0] (an int) of the array a

int b[6][3][8];
int (*p2)[3][8] = b; // pointer to the first element b[0] of the array b,
                     // which is an array of 3 arrays of 8 ints
}}

Because of the {{rlp|implicit_cast|derived-to-base}} implicit conversion for pointers, pointer to a base class can be initialized with the address of a derived class:

{{source|1=
struct Base {};
struct Derived : Base {};

Derived d;
Base* p = &amp;d;
}}

If {{tt|Derived}} is {{rlp|object#Polymorphic_objects|polymorphic}}, such pointer may be used to make {{rlp|virtual|virtual function calls}}.

Certain {{rlp|operator_arithmetic#Additive_operators|addition, subtraction}}, {{rlp|operator_incdec|increment, and decrement}} operators are defined for pointers to elements of arrays: such pointers satisfy the {{concept|RandomAccessIterator}} requirements and allow the C++ library [[cpp/algorithm|algorithms]] to work with raw arrays.

{{rlp|operator_comparison#Pointer_comparison_operators|Comparison operators}} are defined for pointers to objects in some situations: two pointers that represent the same address compare equal, two null pointer values compare equal, pointers to elements of the same array compare the same as the array indexes of those elements, and pointers to non-static data members with the same {{rlp|access|member access}} compare in order of declaration of those members.

Many implementations also provide [[enwiki:Total order#Strict total order|strict total ordering]] of pointers of random origin, e.g. if they are implemented as addresses within continuous virtual address space. Those implementations that do not (e.g. where not all bits of the pointer are part of a memory address and have to be ignored for comparison, or an additional calculation is required or otherwise pointer and integer is not a 1 to 1 relationship), provide a specialization of {{lc|std::less}} for pointers that has that guarantee. This makes it possible to use all pointers of random origin as keys in standard associative containers such as {{lc|std::set}} or {{lc|std::map}}.

====Pointers to functions====
A pointer to function can be initialized with an address of a non-member function or a static member function. Because of the {{rlp|implicit_cast|function-to-pointer}} implicit conversion, the address-of operator is optional:

{{source|1=
void f(int);
void (*p1)(int) = &amp;f;
void (*p2)(int) = f; // same as &amp;f
}}

Unlike functions or references to functions, pointers to functions are objects and thus can be stored in arrays, copied, assigned, etc.

A pointer to function can be used as the left-hand operand of the {{rlp|operator_other|function call operator}}, this invokes the pointed-to function:

{{source|1=
int f(int n)
{
    std::cout &lt;&lt; n &lt;&lt; '\n';
    return n * n;
}

int main()
{
    int (*p)(int) = f;
    int x = p(7);
}
}}

Dereferencing a function pointer yields the lvalue identifying the pointed-to function:

{{source|1=
int f();
int (*p)() = f;  // pointer p is pointing to f
int (&amp;r)() = *p; // the lvalue that identifies f is bound to a reference
r();             // function f invoked through lvalue reference
(*p)();          // function f invoked through the function lvalue
p();             // function f invoked directly through the pointer
}}

A pointer to function may be initialized from an overload set which may include functions, function template specializations, and function templates, if only one overload matches the type of the pointer (see {{rlp|overloaded address|address of an overloaded function}} for more detail):

{{source|1=
template&lt;typename T&gt; T f(T n) { return n; }
double f(double n) { return n; }

int main()
{
    int (*p)(int) = f; // instantiates and selects f&lt;int&gt;
}
}}

{{rlp|operator_comparison#Pointer_comparison_operators|Equality comparison operators}} are defined for pointers to functions (they compare equal if pointing to the same function).

====Pointers to data members====
A pointer to non-static member object {{tt|m}} which is a member of class {{tt|C}} can be initialized with the expression {{tt|&amp;C::m}} exactly. Expressions such as {{tt|&amp;(C::m)}} or {{tt|&amp;m}} inside C's member function do not form pointers to members.

Such pointer may be used as the right-hand operand of the {{rlp|operator member access|pointer-to-member access operators}} {{tt|operator.*}} and {{tt|operator-&gt;*}}:

{{source|1=
struct C { int m; };

int main()
{
    int C::* p = &amp;C::m;          // pointer to data member m of class C
    C c = {7};
    std::cout &lt;&lt; c.*p &lt;&lt; '\n';   // prints 7
    C* cp = &amp;c;
    cp-&gt;m = 10;
    std::cout &lt;&lt; cp-&gt;*p &lt;&lt; '\n'; // prints 10
}
}}

Pointer to data member of an accessible unambiguous non-virtual base class can be {{rlp|implicit cast|implicitly converted}} to pointer to the same data member of a derived class:

{{source|1=
struct Base { int m; };
struct Derived : Base {};

int main()
{
    int Base::* bp = &amp;Base::m;
    int Derived::* dp = bp;
    Derived d;
    d.m = 1;
    std::cout &lt;&lt; d.*dp &lt;&lt; ' ' &lt;&lt; d.*bp &lt;&lt; '\n'; // prints 1 1
}
}}

Conversion in the opposite direction, from a pointer to data member of a derived class to a pointer to data member of an unambiguous non-virtual base class, is allowed with {{rlp|static_cast}} and {{rlp|explicit cast}}, even if the base class does not have that member (but the most-derived class does, when the pointer is used for access):

{{source|1=
struct Base {};
struct Derived : Base { int m; };

int main()
{
    int Derived::* dp = &amp;Derived::m;
    int Base::* bp = static_cast&lt;int Base::*&gt;(dp);

    Derived d;
    d.m = 7;
    std::cout &lt;&lt; d.*bp &lt;&lt; '\n'; // okay: prints 7

    Base b;
    std::cout &lt;&lt; b.*bp &lt;&lt; '\n'; // undefined behavior
}
}}

The pointed-to type of a pointer-to-member may be a pointer-to-member itself: pointers to members can be multilevel, and can be cv-qualifed differently at every level. Mixed multi-level combinations of pointers and pointers-to-members are also allowed:

{{source|1=
struct A
{
    int m;
    // const pointer to non-const member
    int A::* const p;
};

int main()
{
    // non-const pointer to data member which is a const pointer to non-const member
    int A::* const A::* p1 = &amp;A::p;

    const A a = {1, &amp;A::m};
    std::cout &lt;&lt; a.*(a.*p1) &lt;&lt; '\n'; // prints 1

    // regular non-const pointer to a const pointer-to-member
    int A::* const* p2 = &amp;a.p;
    std::cout &lt;&lt; a.**p2 &lt;&lt; '\n'; // prints 1
}
}}

====Pointers to member functions====
A pointer to non-static member function {{tt|f}} which is a member of class {{tt|C}} can be initialized with the expression {{tt|&amp;C::f}} exactly. Expressions such as {{tt|&amp;(C::f)}} or {{tt|&amp;f}} inside C's member function do not form pointers to member functions.

Such pointer may be used as the right-hand operand of the {{rlp|operator member access|pointer-to-member access operators}} {{tt|operator.*}} and {{tt|operator-&gt;*}}. The {{rlp|value category#Pending member function call|resulting expression}} can be used only as the left-hand operand of a function-call operator:

{{source|1=
struct C
{
    void f(int n) { std::cout &lt;&lt; n &lt;&lt; '\n'; }
};

int main()
{
    void (C::* p)(int) = &amp;C::f; // pointer to member function f of class C
    C c;
    (c.*p)(1);                  // prints 1
    C* cp = &amp;c;
    (cp-&gt;*p)(2);                // prints 2
}
}}


Pointer to member function of a base class can be {{rlp|implicit cast|implicitly converted}} to pointer to the same member function of a derived class:

{{source|1=
struct Base
{
    void f(int n) { std::cout &lt;&lt; n &lt;&lt; '\n'; }
};
struct Derived : Base {};

int main()
{
    void (Base::* bp)(int) = &amp;Base::f;
    void (Derived::* dp)(int) = bp;
    Derived d;
    (d.*dp)(1);
    (d.*bp)(2);
}
}}

Conversion in the opposite direction, from a pointer to member function of a derived class to a pointer to member function of an unambiguous non-virtual base class, is allowed with {{rlp|static_cast}} and {{rlp|explicit cast}}, even if the base class does not have that member function (but the most-derived class does, when the pointer is used for access):

{{source|1=
struct Base {};
struct Derived : Base
{
    void f(int n) { std::cout &lt;&lt; n &lt;&lt; '\n'; }
};

int main()
{
    void (Derived::* dp)(int) = &amp;Derived::f;
    void (Base::* bp)(int) = static_cast&lt;void (Base::*)(int)&gt;(dp);

    Derived d;
    (d.*bp)(1); // okay: prints 1

    Base b;
    (b.*bp)(2); // undefined behavior
}
}}

Pointers to member functions may be used as callbacks or as function objects, often after applying {{lc|std::mem_fn}} or {{lc|std::bind}}:

{{example|
code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

int main()
{
    std::vector&lt;std::string&gt; v = {&quot;a&quot;, &quot;ab&quot;, &quot;abc&quot;};
    std::vector&lt;std::size_t&gt; l;
    transform(v.begin(), v.end(), std::back_inserter(l),
              std::mem_fn(&amp;std::string::size));
    for(std::size_t n : l)
        std::cout &lt;&lt; n &lt;&lt; ' ';
}
| output=
1 2 3
}}

===Pointers to void===
Pointer to object of any type can be {{rlp|implicit cast|implicitly converted}} to pointer to {{c|void}} (optionally {{rlp|cv|cv-qualified}}). The reverse conversion, which requires {{rlp|static_cast}} or {{rlp|explicit cast}}, yields the original pointer value:

{{source|1=
int n = 1;
int* p1 = &amp;n;
void* pv = p1;
int* p2 = static_cast&lt;int*&gt;(pv);
std::cout &lt;&lt; *p2 &lt;&lt; '\n'; // prints 1
}}

If the original pointer is pointing to a base class subobject within an object of some polymorphic type, {{rlp|dynamic_cast}} may be used to obtain a {{tt|void*}} that is pointing at the complete object of the most derived type.

Pointers to void are used to pass objects of unknown type, which is common in C interfaces: {{lc|std::malloc}} returns {{c|void*}}, {{lc|std::qsort}} expects a user-provided callback that accepts two {{c|const void*}} arguments. [http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_create.html pthread_create] expects a user-provided callback that accepts and returns {{c|void*}}. In all cases, it is the caller's responsibility to cast the pointer to the correct type before use.

===Null pointers===
Pointers of every type have a special value known as ''null pointer value'' of that type. A pointer whose value is null does not point to an object or a function (dereferencing a null pointer is undefined behavior), and compares equal to all pointers of the same type whose value is also ''null''.

To initialize a pointer to null or to assign the null value to an existing pointer, the null pointer literal {{c|nullptr}}, the null pointer constant {{lc|NULL}}, or the {{rlp|implicit_cast|implicit conversion}} from the integer value {{c|0}} may be used.

{{rlp|zero_initialization|Zero-}} and {{rlp|value_initialization|value-initialization}} also initialize pointers to their null values.

Null pointers can be used to indicate the absence of an object (e.g. {{l2tt|cpp/utility/functional/function/target|target()}}), or as other error condition indicators (e.g. {{rlp|dynamic_cast}}). In general, a function that receives a pointer argument almost always needs to check if the value is null and handle that case differently (for example, the {{rlp|delete|delete expression}} does nothing when a null pointer is passed).

===Constness===
* If {{spar|cv}} appears before {{ttb|*}} in the pointer declaration, it is part of {{spar|decl-specifier-seq}} and applies to the the pointed-to object.
* If {{spar|cv}} appears after {{ttb|*}} in the pointer declaration, it is part of {{spar|declarator}} and applies to the pointer that's being declared.
{| class=&quot;wikitable&quot;
|-
! Syntax || meaning
|-
| {{c|const T*}} || pointer to constant object
|-
| {{c|T const*}} || pointer to constant object
|-
| {{c|T* const}} || constant pointer to object
|-
| {{c|const T* const}} || constant pointer to constant object
|-
|}

{{source|1=
// pc is a non-const pointer to const int
// cpc is a const pointer to const int
// ppc is a non-const pointer to non-const pointer to const int
const int ci = 10, *pc = &amp;ci, *const cpc = pc, **ppc;
// p is a non-const pointer to non-const int
// cp is a const pointer to non-const int
int i, *p, *const cp = &amp;i;

i = ci;    // okay: value of const int copied into non-const int
*cp = ci;  // okay: non-const int (pointed-to by const pointer) can be changed
pc++;      // okay: non-const pointer (to const int) can be changed
pc = cpc;  // okay: non-const pointer (to const int) can be changed
pc = p;    // okay: non-const pointer (to const int) can be changed
ppc = &amp;pc; // okay: address of pointer to const int is pointer to pointer to const int

ci = 1;    // error: const int cannot be changed
ci++;      // error: const int cannot be changed
*pc = 2;   // error: pointed-to const int cannot be changed
cp = &amp;ci;  // error: const pointer (to non-const int) cannot be changed
cpc++;     // error: const pointer (to const int) cannot be changed
p = pc;    // error: pointer to non-const int cannot point to const int
ppc = &amp;p;  // error: pointer to pointer to const int cannot point to
           // pointer to non-const int
}}

In general, implicit conversion from one multi-level pointer to another follows the rules described in {{rlp|implicit_cast#Qualification_conversions|qualification conversions}} and in {{rlp|operator_comparison#Pointer_comparison_operators|pointer comparison operators}}.

[[de:cpp/language/pointer]]
[[es:cpp/language/pointer]]
[[fr:cpp/language/pointer]]
[[it:cpp/language/pointer]]
[[ja:cpp/language/pointer]]
[[pt:cpp/language/pointer]]
[[ru:cpp/language/pointer]]
[[zh:cpp/language/pointer]]</text>
      <sha1>domzeonchhq6ue80vh7kuuw2vw228lf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/qualified lookup</title>
    <ns>0</ns>
    <id>14019</id>
    <revision>
      <id>90252</id>
      <parentid>89022</parentid>
      <timestamp>2017-02-15T06:41:42Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Class members */ [expr.prim.id.qual]/5</comment>
      <text xml:space="preserve" bytes="8819">{{title|Qualified name lookup}}
{{cpp/language/basics/navbar}}
A ''qualified'' name is a name that appears on the right hand side of the scope resolution operator {{ttb|::}} (see also {{rlp|identifiers#Qualified_identifiers|qualified identifiers}}).
A qualified name may refer to a 
* class member (including static and non-static functions, types, templates, etc)
* namespace member (including another namespace)
* enumerator

If there is nothing on the left hand side of the {{ttb|::}}, the lookup considers only declarations made in the global namespace scope (or introduced into the global namespace by a {{rlp|namespace|using declaration}}). This makes it possible to refer to such names even if they were hidden by a local declaration:
{{source|1=
#include &lt;iostream&gt;
int main()
{
  struct std{};
  std::cout &lt;&lt; &quot;fail\n&quot;; // Error: unqualified lookup for 'std' finds the struct
  ::std::cout &lt;&lt; &quot;ok\n&quot;; // OK: ::std finds the namespace std
}
}}

Before name lookup can be performed for the name on the right hand side of {{ttb|::}}, lookup must be completed for the name on its left hand side (unless a {{rlp|decltype}} expression is used, or there is nothing on the left). This lookup, which may be qualified or unqualified, depending on whether there's another {{ttb|::}} to the left of that name, considers only namespaces, class types, enumerations, and templates whose specializations are types:
{{source|1=
struct A {
  static int n;
};
int main() {
  int A;
  A::n = 42;    // OK: unqualified lookup of A to the left of :: ignores the variable
  A b;          // error: unqualified lookup of A finds the variable A
}
}}

When a qualified name is used as a {{rlp|declarations|declarator}}, then {{rlp|unqualified lookup}} of the names used in the same declarator that follow that qualified name, but not the names that precede it, is performed in the scope of the member's class or namespace:
{{source|1=
class X { };
constexpr int number = 100;
struct C {
  class X { };
  static const int number = 50;
  static X arr[number];
};
X C::arr[number], brr[number];   // Error: look up for X finds ::X, not C::X
C::X C::arr[number], brr[number]; // OK, size of arr is 50, size of brr is 100
}}

If {{ttb|::}} is followed by the character {{ttb|~}} that is in turn followed by an identifier (that is, it specifies a destructor or pseudo-destructor), that identifier is looked up in the same scope as the name on the left hand side of {{ttb|::}}
{{source|1=
struct C { typedef int I; };
typedef int I1, I2;
extern int *p, *q;
struct A { ~A(); };
typedef A AB;
int main() {
  p-&gt;C::I::~I(); // the name I after ~ is looked up in the same scope as I before ::
                 // (that is, within the scope of C, so it finds C::I)
  q-&gt;I1::~I2();  // The name I2 is looked up in the same scope as I1
                 // that is, from the current scope, so it finds ::I2
  AB x;
  x.AB::~AB(); // The name AB after ~ is looked up in the same scope as AB before ::
               // that is, from the current scope, so it finds ::AB
}
}}

{{rev begin}}
{{rev|since=c++11|
====Enumerators====
If the lookup of the left-hand side name comes up with an {{rlp|enum|enumeration}} (either scoped or unscoped), the lookup of the right-hand side must result in an enumerator that belongs that enumeration, otherwise the program is ill-formed.
}}
{{rev end}}

====Class members====
If the lookup of the left hand side name comes up with a class/struct or union name, the name on the right hand side of {{ttb|::}} is looked up in the scope of that class (and so may find a declaration of a member of that class or of its base), with the following exceptions
* A destructor is looked up as described above (in the scope of the name to the left of ::)
* A conversion-type-id in a {{rlp|cast operator|user-defined conversion}} function name is first looked up in the scope of the class. If not found, the name is then looked up in the current scope. The conversion-type-id must denote the same type in both scopes.
* names used in template arguments are looked up in the current scope (not in the scope of the template name)
* names in {{rlp|namespace|using-declarations}} also consider class/enum names that are hidden by the name of a variable, data member, function, or enumerator declared in the same scope
{{todo|micro-examples for the above}}

If the right hand side of {{ttb|::}} names the same class as the left hand side, the name designates the {{rlp|constructor}} of that class. Such qualified name can only be used in a declaration of a constructor and in the {{rlp|using_declaration|using-declaration}} for an {{rlp|using_declaration#Inheriting_constructors|inheriting constructor}}. In those lookups where function names are ignored (that is, when looking up a name on the left of {{ttb|::}}, when looking up a name in {{rlp|elaborated type specifier}}, or {{rlp|derived class|base specifier}}), the same syntax resolves to the injected-class-name:
{{source|1=
struct A { A(); };
struct B : A { B(); };
A::A() { } // A::A names a constructor, used in a declaration
B::B() { } // B::B names a constructor, used in a declaration
B::A ba;   // B::A names the type A (looked up in the scope of B)
A::A a;    // Error, A::A does not name a type

struct A::A a2; // OK: lookup in elaborated type specifier ignores functions
                // so A::A simply names the class A as seen from within the scope of A
                // (that is, the injected-class-name)
}}

Qualified name lookup can be used to access a class member that is hidden by a nested declaration or by a derived class. A call to a qualified member function is never virtual
{{source|1=
struct B { virtual void foo(); };
struct D : B { void foo() override; };
int main()
{
    D x;
    B&amp; b = x;
    b.foo(); // calls D::foo (virtual dispatch)
    b.B::foo(); // calls B::foo (static dispatch)
}
}}

====Namespace members====
If the name on the left of {{ttb|::}} refers to a namespace or if there is nothing on the left of {{ttb|::}} (in which case it refers to the global namespace), the name that appears on the right hand side of {{ttb|::}} is looked up in the scope of that namespace, except that 
* names used in template arguments are looked up in the current scope
{{source|1=
namespace N {
   template&lt;typename T&gt; struct foo {};
   struct X {};
}
N::foo&lt;X&gt; x; // error: X is looked up as ::X, not as N::X
}}

Qualified lookup within the scope of a {{rlp|namespace}} {{tt|N}} first considers all declarations that are located in {{tt|N}} and all declarations that are located in the {{rlp|namespace#Inline_namespaces|inline namespace members}} of {{tt|N}} (and, transitively, in their inline namespace members). If there are no declarations in that set then it considers declarations in all namespaces named by {{rlp|namespace#Using-directives|using-directives}} found in {{tt|N}} and in all transitive inline namespace members of {{tt|N}}. The rules are applied recursively:

{{source|1=
int x;
namespace Y {
  void f(float);
  void h(int);
}
namespace Z {
  void h(double);
}
namespace A {
  using namespace Y;
  void f(int);
  void g(int);
  int i;
}
namespace B {
  using namespace Z;
  void f(char);
  int i;
}
namespace AB {
  using namespace A;
  using namespace B;
  void g();
}
void h()
{
  AB::g();  // AB is searched, AB::g found by lookup and is chosen AB::g(void)
            // (A and B are not searched)
  AB::f(1); // First, AB is searched, there is no f
            // Then, A, B are searched
            // A::f, B::f found by lookup (but Y is not searched so Y::f is not considered)
            // overload resolution picks A::f(int)
  AB::x++;    // First, AB is searched, there is no x
              // Then A, B are searched. There is no x
              // Then Y and Z are searched. There is still no x: this is an error
  AB::i++;  // AB is searched, there is no i
            // Then A, B are searched. A::i and B::i found by lookup: this is an error
  AB::h(16.8);  // First, AB is searched: there is no h
                // Then A, B are searched. There is no h
                // Then Y and Z are searched.
                // lookup finds Y::h and Z::h. Overload resolution picks Z::h(double)
}
}}

It is allowed for the same declaration to be found more than once:
{{source|1=
namespace A { int a; }
namespace B { using namespace A; }
namespace D { using A::a; }
namespace BD {
  using namespace B;
  using namespace D;
}
void g()
{
  BD::a++; // OK: finds the same A::a through B and through D
}
}}
{{todo|the rest of 3.4.3.2[namespace.qual], try to shorten their examples}}

===See also===
* {{rlp|unqualified lookup|Unqualified name lookup}} 
* {{rlp|scope|Scope}} 
* {{rlp|adl|Argument-dependent lookup}} 
* {{rlp|function_template|Template argument deduction}}
* {{rlp|overload_resolution|Overload resolution}}</text>
      <sha1>bextsutjvik7k4crnz25zupuu9lyd6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/raii</title>
    <ns>0</ns>
    <id>13513</id>
    <revision>
      <id>92027</id>
      <parentid>90177</parentid>
      <timestamp>2017-04-02T16:00:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note that RAII only applies to resources that must be acquired (not electric power or cpu time). Also small note in the beginning that invariants are not just a fancy word, they eliminate redundant runtime tests</comment>
      <text xml:space="preserve" bytes="4160">{{title|RAII}}
{{cpp/language/navbar}}

''Resource Acquisition Is Initialization'' or RAII, is a C++ programming technique&lt;ref&gt;[http://www.stroustrup.com/bs_faq2.html#finally RAII in Stroustrup's C++ FAQ]&lt;/ref&gt;&lt;ref&gt;[https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e6-use-raii-to-prevent-leaks C++ Core Guidelines E.6 &quot;Use RAII to prevent leaks&quot;]&lt;/ref&gt; which binds the life cycle of a resource that must be acquired before use (allocated heap memory, thread of execution, open socket, open file, locked mutex, disk space, database connection—anything that exists in limited supply) to the {{rlp|lifetime}} of an object.

RAII guarantees that the resource is available to any function that may access the object (resource availability is a [[enwiki:Class_invariant|class invariant]], eliminating redundant runtime tests). It also guarantees that all resources are released when the lifetime of their controlling object ends, in reverse order of acquisition. Likewise, if resource acquisition fails (the constructor exits with an exception), all resources acquired by every fully-constructed member and base subobject are released in reverse order of initialization. This leverages the core language features ({{rlp|lifetime|object lifetime}}, {{rlp|statements|scope exit}}, {{rlp|initializer_list#Initialization_order|order of initialization}} and {{rlp|throw#Stack_unwinding|stack unwinding}}) to eliminate resource leaks and guarantee exception safety. Another name for this technique is ''Scope-Bound Resource Management'' (SBRM), after the basic use case where the lifetime of an RAII object ends due to scope exit.

RAII can be summarized as follows:
* encapsulate each resource into a class, where
:* the constructor acquires the resource and establishes all class invariants or throws an exception if that cannot be done,
:* the destructor releases the resource and never throws exceptions;
* always use the resource via an instance of a RAII-class that either
:* has automatic storage duration or temporary lifetime itself, or
:* has lifetime that is bounded by the lifetime of an automatic or temporary object

Move semantics make it possible to safely transfer resource ownership between objects, across scopes, and in and out of threads, while maintaining resource safety.

Classes with open()/close(), lock()/unlock(), or init()/copyFrom()/destroy() member functions are typical examples of non-RAII classes:

{{source|1=
std::mutex m;

void bad() 
{
    m.lock();                    // acquire the mutex
    f();                         // if f() throws an exception, the mutex is never released
    if(!everything_ok()) return; // early return, the mutex is never released
    m.unlock();                  // if bad() reaches this statement, the mutex is released
}

void good()
{
    std::lock_guard&lt;std::mutex&gt; lk(m); // RAII class: mutex acquisition is initialization
    f();                               // if f() throws an exception, the mutex is released
    if(!everything_ok()) return;       // early return, the mutex is released
}                                      // if good() returns normally, the mutex is released
}}

===The standard library===
The C++ library classes that manage their own resources follow RAII: {{lc|std::string}}, {{lc|std::vector}}, {{lc|std::thread}}, and many others acquire their resources in constructors (which throw exceptions on errors), release them in their destructors (which never throw), and don't require explicit cleanup.

In addition, the standard library offers several RAII wrappers to manage user-provided resources:
* {{lc|std::unique_ptr}} and {{lc|std::shared_ptr}} to manage dynamically-allocated memory or, with a user-provided deleter, any resource represented by a plain pointer;
* {{lc|std::lock_guard}}, {{lc|std::unique_lock}}, {{lc|std::shared_lock}} to manage mutexes.

===Notes===
RAII does not apply to the management of the resources that are not acquired before use: CPU time, cores, and cache capacity, entropy pool capacity, network bandwidth, electric power consumption, stack memory.

==References==
&lt;references/&gt;

[[zh:cpp/language/raii]]</text>
      <sha1>7psriqkdw97yxq9gh7d7z2r3u6eaz2f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/range-for</title>
    <ns>0</ns>
    <id>2146</id>
    <revision>
      <id>90595</id>
      <parentid>87369</parentid>
      <timestamp>2017-03-06T15:43:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0615R0 renamed decomposition declaration back to structured binding</comment>
      <text xml:space="preserve" bytes="6853">{{title|Range-based for loop  {{mark since c++11}}}}
{{cpp/language/statements/navbar}}
Executes a for loop over a range.

Used as a more readable equivalent to the traditional  {{rlp|for | for loop}} operating over a range of values, such as all elements in a container.

===Syntax===
{{sdsc begin}}
{{sdsc |
{{spar|attr}}{{mark optional}} {{ttb|for (}} {{spar|range_declaration}} {{ttb|:}} {{spar|range_expression}} {{ttb|)}} {{spar|loop_statement}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}} | any number of {{rlp|attributes}} }}
{{par | {{spar|range_declaration}} | a  {{rlp|declarations|declaration}} of a named variable, whose type is the type of the element of the sequence represented by {{spar|range_expression}}, or a reference to that type. Often uses the {{rlp|auto|auto specifier}} for automatic type deduction}}
{{par | {{spar|range_expression}} | any {{rlp|expressions|expression}} that represents a suitable sequence (either an array or an object for which {{tt|begin}} and {{tt|end}} member functions or free functions are defined, see below) or a {{rlp|list initialization|braced-init-list}}. }}
{{par | {{spar|loop_statement}} | any {{rlp|statements|statement}}, typically a compound statement, which is the body of the loop }}
{{par end}}

{{rev begin}}
{{rev|since=c++17|
{{spar|range_declaration}} may be a {{rlp|declarations#Structured_binding_declaration|structured binding declaration}}
{{source|1=
for (auto&amp;&amp; [first,second] : mymap) {
    // use first and second
}
}}
}}
{{rev end}}

===Explanation===
The above syntax produces code equivalent to the following ('''{{tt|__range}}''', '''{{tt|__begin}}''' and '''{{tt|__end}}''' are for exposition only):

{{rev begin}}
{{rev|until=c++17|
{{sdsc begin}}
{{sdsc | 
{{ttb|{}}&lt;br&gt;
:{{ttb|auto &amp;amp;&amp;amp; __range {{=}}}} {{spar|range_expression}} {{ttb|;}} &lt;br&gt;
:{{ttb|for (auto __begin {{=}}}} ''begin_expr''{{ttb|,}} {{ttb|__end {{=}}}} ''end_expr''{{ttb|;}} &lt;br&gt;
:::{{ttb|__begin !{{=}} __end; ++__begin) {}} &lt;br&gt;
::{{spar|range_declaration}} {{ttb|{{=}} *__begin;}} &lt;br&gt;
::{{spar|loop_statement}} &lt;br&gt;
:{{ttb|} }} &lt;br&gt;
{{ttb|} }} &lt;br&gt;
}}
{{sdsc end}}
}}
{{rev|since=c++17|
{{sdsc begin}}
{{sdsc | 
{{ttb|{}}&lt;br&gt;
:{{ttb|auto &amp;amp;&amp;amp; __range {{=}}}} {{spar|range_expression}} {{ttb|;}} &lt;br&gt;
:{{ttb|auto __begin {{=}}}} ''begin_expr'' {{ttb|;}}&lt;br&gt;
:{{ttb|auto __end {{=}}}} ''end_expr'' {{ttb|;}}&lt;br&gt;
:{{ttb|for ( ; __begin !{{=}} __end; ++__begin) {}} &lt;br&gt;
::{{spar|range_declaration}} {{ttb|{{=}} *__begin;}} &lt;br&gt;
::{{spar|loop_statement}} &lt;br&gt;
:{{ttb|} }} &lt;br&gt;
{{ttb|} }} &lt;br&gt;
}}
{{sdsc end}}
}}
{{rev end}}

{{spar|range_expression}} is evaluated to determine the sequence or range to iterate. Each element of the sequence, in turn, is dereferenced and assigned to the variable with the type and name given in {{spar|range_declaration}}.

''{{tt|begin_expr}}'' and ''{{tt|end_expr}}'' are defined as follows:
* If {{spar|range_expression}} is an expression of array type, then ''{{tt|begin_expr}}'' is {{c|__range}} and ''{{tt|end_expr}}'' is {{c|(__range + __bound)}}, where {{tt|__bound}} is the number of elements in the array (if the array has unknown size or is of an incomplete type, the program is ill-formed)
* If {{spar|range_expression}} is an expression of a class type {{tt|C}} that has a member named {{c|begin}} and/or a member named {{c|end}} (regardless of the type or accessibility of such member), then ''{{tt|begin_expr}}'' is {{c|__range.begin()}} and ''{{tt|end_expr}}'' is {{c|__range.end()}};
* Otherwise, ''{{tt|begin_expr}}'' is {{c|begin(__range)}} and ''{{tt|end_expr}}'' is {{c|end(__range)}}, which are found via {{rlp|adl|argument-dependent lookup}} (non-ADL lookup is not performed).

If {{spar|range_expression}} returns a temporary, its lifetime is extended until the end of the loop, as indicated by binding to the rvalue reference '''{{tt|__range}}''', but beware that the lifetime of any temporary within {{spar|range_expression}} ''is not'' extended.

Just as with a traditional loop, a {{rlp|break | break statement}} can be used to exit the loop early and a {{rlp|continue | continue statement}} can be used to restart the loop with the next element.

{{spar|attr}} represents an optional number of {{rlp|attributes}}.

===Notes===
If the initializer ({{spar|range_expression}}) is a braced-init-list, __range is deduced to be {{lc|std::initializer_list&lt;&gt;&amp;&amp;}}

It is safe, and in fact, preferable in generic code, to use deduction to forwarding reference, {{c|for (auto&amp;&amp; var : sequence)}}.

The presence of any member named {{tt|begin}} or {{tt|end}}, regardless of whether it is a type, data member, function, or enumerator, and regardless of its accessibility, will cause {{c|__range.begin()}} and {{c|__range.end()}} to be used as ''{{tt|begin_expr}}'' and ''{{tt|end_expr}}'', respectively. As a result, the range-based for loop cannot be used with classes containing member types or enumerators named {{tt|begin}} or {{tt|end}} even if the appropriate namespace-scope free functions are provided.

While the variable declared in the {{spar|range_declaration}} is usually used in the {{spar|loop_statement}}, doing so is not required.

As of C++17, the types of the begin-expression and the end-expression do not have to be the same, and in fact the type of the end-expression does not have to be an iterator: it just needs to be able to be compared for inequality with one. This makes it possible to delimit a range by a predicate (e.g. &quot;the iterator points at a null character&quot;).

===Keywords===

{{ltt|cpp/keyword/for}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

int main() {
    std::vector&lt;int&gt; v = {0, 1, 2, 3, 4, 5};

    for (const int&amp; i : v) // access by const reference
        std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
    
    for (auto i : v) // access by value, the type of i is int
        std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    for (auto&amp;&amp; i : v) // access by reference, the type of i is int&amp;
        std::cout &lt;&lt; i &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    for (int n : {0, 1, 2, 3, 4, 5}) // the initializer may be a braced-init-list
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    int a[] = {0, 1, 2, 3, 4, 5};
    for (int n : a) // the initializer may be an array
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    for (int n : a)  
        std::cout &lt;&lt; 1 &lt;&lt; ' '; // the loop variable need not be used
    std::cout &lt;&lt; '\n';

}
 | output=
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
1 1 1 1 1 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc for_each}}
{{dsc end}}

[[de:cpp/language/range-for]]
[[es:cpp/language/range-for]]
[[fr:cpp/language/range-for]]
[[it:cpp/language/range-for]]
[[ja:cpp/language/range-for]]
[[pt:cpp/language/range-for]]
[[ru:cpp/language/range-for]]
[[zh:cpp/language/range-for]]</text>
      <sha1>k2fi6oxwzrqfw8rfs8eu2qwp8ftzzns</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/reference</title>
    <ns>0</ns>
    <id>9955</id>
    <revision>
      <id>90038</id>
      <parentid>90030</parentid>
      <timestamp>2017-02-02T14:05:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>let's stash the additions into the main function with a comment about why they matter (or it makes it look like it's special to function arguments)</comment>
      <text xml:space="preserve" bytes="9455">{{title|Reference declaration}}
{{cpp/language/declarations/navbar}}

Declares a named variable as a reference, that is, an alias to an already-existing object or function.

===Syntax===
A reference variable declaration is any simple declaration whose {{rlp|declarations|declarator}} has the form

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|&amp;}} {{spar|attr}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc|num=2|notes={{mark since c++11}}|1=
{{ttb|&amp;&amp;}} {{spar|attr}}{{mark optional}} {{spar|declarator}}
}}
{{sdsc end}}

@1@ '''Lvalue reference declarator''': the declaration {{c|S&amp; D;}} declares {{tt|D}} as an ''lvalue reference'' to the type determined by {{spar|decl-specifier-seq}} {{tt|S}}.
@2@ '''Rvalue reference declarator''': the declaration {{c|S&amp;&amp; D;}} declares {{tt|D}} as an ''rvalue reference'' to the type determined by {{spar|decl-specifier-seq}} {{tt|S}}.

{{par begin}}
{{par | {{spar|declarator}} | any {{rlp|declarations|declarator}} except another reference declarator (there are no references to references) }}
{{par | {{spar|attr}}{{mark c++11}} | optional list of {{rlp|attributes}} }}
{{par end}}

A reference is required to be initialized to refer to a valid object or function: see {{rlp|reference_initialization|reference initialization}}.

There are no references to {{c|void}} and no references to references.

Reference types cannot be {{rlp|cv|cv-qualified}} at the top level; there is no syntax for that in declaration, and if a qualification is introduced through a typedef, decltype, or template type argument, it is ignored.

References are not objects; they do not necessarily occupy storage, although the compiler may allocate storage if it is necessary to implement the desired semantics (e.g. a non-static data member of reference type usually increases the size of the class by the amount necessary to store a memory address).

Because references are not objects, there are no arrays of references, no pointers to references, and no references to references:

{{source|
int&amp; a[3]; // error
int&amp;* p;   // error
int&amp; &amp;r;   // error
}}

{{rev begin}}
{{rev|since=c++11|
=====Reference collapsing=====
It is permitted to form references to references through type manipulations in templates or typedefs, in which case the ''reference collapsing'' rules apply: rvalue reference to rvalue reference collapses to rvalue reference, all other combinations form lvalue reference:
{{source|1=
typedef int&amp;  lref;
typedef int&amp;&amp; rref;
int n;
lref&amp;  r1 = n; // type of r1 is int&amp;
lref&amp;&amp; r2 = n; // type of r2 is int&amp;
rref&amp;  r3 = n; // type of r3 is int&amp;
rref&amp;&amp; r4 = 1; // type of r4 is int&amp;&amp;
}}
(This, along with special rules for {{rlp|template argument deduction}} when {{tt|T&amp;&amp;}} is used in a function template, forms the rules that make {{lc|std::forward}} possible.)
}}
{{rev end}}

====Lvalue references====
Lvalue references can be used to alias an existing object (optionally with different cv-qualification):

{{example|code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s = &quot;Ex&quot;;
    std::string&amp; r1 = s;
    const std::string&amp; r2 = s;

    r1 += &quot;ample&quot;;           // modifies s
//  r2 += &quot;!&quot;;               // error: cannot modify through reference to const
    std::cout &lt;&lt; r2 &lt;&lt; '\n'; // prints s, which now holds &quot;Example&quot;
}
}}

They can also be used to implement pass-by-reference semantics in function calls:

{{example|code=
#include &lt;iostream&gt;
#include &lt;string&gt;

void double_string(std::string&amp; s)
{
    s += s; // 's' is the same object as main()'s 'str'
}

int main()
{
    std::string str = &quot;Test&quot;;
    double_string(str);
    std::cout &lt;&lt; str &lt;&lt; '\n';
}
}}

When a function's return type is lvalue reference, the function call expression becomes an {{rlp|value_category|lvalue expression}}:

{{example|code=
#include &lt;iostream&gt;
#include &lt;string&gt;

char&amp; char_number(std::string&amp; s, std::size_t n)
{
    return s.at(n); // string::at() returns a reference to char
}

int main()
{
    std::string str = &quot;Test&quot;;
    char_number(str, 1) = 'a'; // the function call is lvalue, can be assigned to
    std::cout &lt;&lt; str &lt;&lt; '\n';
}
}}

{{rev begin}}
{{rev|since=c++11|
====Rvalue references====
Rvalue references can be used to {{rlp|reference_initialization#Lifetime_of_a_temporary|extend the lifetimes}} of temporary objects (note, lvalue references to const can extend the lifetimes of temporary objects too, but they are not modifiable through them):

{{example|code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s1 = &quot;Test&quot;;
//  std::string&amp;&amp; r1 = s1;           // error: can't bind to lvalue

    const std::string&amp; r2 = s1 + s1; // okay: lvalue reference to const extends lifetime
//  r2 += &quot;Test&quot;;                    // error: can't modify through reference to const

    std::string&amp;&amp; r3 = s1 + s1;      // okay: rvalue reference extends lifetime
    r3 += &quot;Test&quot;;                    // okay: can modify through reference to non-const
    std::cout &lt;&lt; r3 &lt;&lt; '\n';
}
}}

More importantly, when a function has both rvalue reference and lvalue reference {{rlp|overload resolution|overloads}}, the rvalue reference overload binds to rvalues (including both prvalues and xvalues), while the lvalue reference overload binds to lvalues:

{{example|code=
#include &lt;iostream&gt;
#include &lt;utility&gt;

void f(int&amp; x)
{
    std::cout &lt;&lt; &quot;lvalue reference overload f(&quot; &lt;&lt; x &lt;&lt; &quot;)\n&quot;;
}

void f(const int&amp; x)
{
    std::cout &lt;&lt; &quot;lvalue reference to const overload f(&quot; &lt;&lt; x &lt;&lt; &quot;)\n&quot;;
}

void f(int&amp;&amp; x)
{
    std::cout &lt;&lt; &quot;rvalue reference overload f(&quot; &lt;&lt; x &lt;&lt; &quot;)\n&quot;;
}

int main()
{
    int i = 1;
    const int ci = 2;
    f(i);  // calls f(int&amp;)
    f(ci); // calls f(const int&amp;)
    f(3);  // calls f(int&amp;&amp;)
           // would call f(const int&amp;) if f(int&amp;&amp;) overload wasn't provided
    f(std::move(i)); // calls f(int&amp;&amp;)

    // rvalue reference variables are lvalues when used in expressions
    int&amp;&amp; x = 1;
    f(x);            // calls f(int&amp; x)
    f(std::move(x)); // calls f(int&amp;&amp; x)
}
}}

This allows {{rlp|move_constructor|move constructors}}, {{rlp|move_operator|move assignment}} operators, and other move-aware functions (e.g. {{ltf|cpp/container/vector/push_back|vector::push_back}} to be automatically selected when suitable.
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++11|
====Forwarding references====
Forwarding references are a special kind of references that preserve the value category of a function argument, making it possible to ''forward'' it by means of {{lc|std::forward}}. Forwarding references are either:
@1@ function parameter of a function template declared as rvalue reference to cv-unqualified type template parameter of that same function template:
{{source|1=
template&lt;class T&gt;
int f(T&amp;&amp; x) {  // x is a forwarding reference
  return g(std::forward&lt;T&gt;(x)); // and so can be forwarded
}
int main() {
  int i;
  f(i); // argument is lvalue, calls f&lt;int&amp;&gt;(int&amp;), std::forward&lt;T&gt;(x) is lvalue
  f(0); // argument is rvalue: calls f&lt;int&gt;(int&amp;&amp;), std::forward&lt;T&gt;(x) is rvalue
}

template&lt;class T&gt;
int g(const T&amp;&amp; y); // y is not a forwarding reference: const T is not exactly T

template&lt;class T&gt; struct A {
    template&lt;class U&gt;
    A(T&amp;&amp; x, U&amp;&amp; y, int* p); // x is not a forwarding reference, but y is
};

}}
@2@ {{c|auto&amp;&amp;}} except when deduced from a brace-enclosed initializer list.
{{source|1=
auto&amp;&amp; vec = foo();       // foo() may be lvalue or rvalue, vec is a forwarding reference
auto i = std::begin(vec); // works either way
(*i)++;                   // works either way
g(std::forward&lt;decltype(vec)&gt;(vec)); // forwards, preserving value category

for(auto&amp;&amp; x: f()) {
  // x is a forwarding reference; this is the safest way to use range for loops
}

auto&amp;&amp; z = {1,2,3}; // *not* a forwarding reference (special case for initializer lists)
}}

See also {{rlp|template_argument_deduction#Deduction_from_a_function_call|template argument deduction}} and {{lc|std::forward}}
}}
{{rev end}}

====Dangling references====
Although references, once initialized, always refer to valid objects or functions, it is possible to create a program where the {{rlp|lifetime}} of the referred-to object ends, but the reference remains accessible (''dangling''). Accessing such a reference is undefined behavior.
A common example is a function returning a reference to an automatic variable:

{{source|1=
std::string&amp; f()
{
    std::string s = &quot;Example&quot;;
    return s; // exits the scope of s:
              // its destructor is called and its storage deallocated
}

std::string&amp; r = f(); // dangling reference
std::cout &lt;&lt; r;       // undefined behavior: reads from a dangling reference
std::string s = f();  // undefined behavior: copy-initializes from a dangling reference
}}

Note that rvalue references and lvalue references to const extend the lifetimes of temporary objects (see {{rlp|reference_initialization#Lifetime_of_a_temporary}} for rules and exceptions).

If the referred-to object was destroyed (e.g. by explicit destructor call), but the storage was not deallocated, a reference to the out-of-lifetime object may be used in limited ways, and may become valid if the object is recreated in the same storage (see {{rlp|lifetime#Access_outside_of_lifetime|Access outside of lifetime}} for details).

[[de:cpp/language/reference]]
[[es:cpp/language/reference]]
[[fr:cpp/language/reference]]
[[it:cpp/language/reference]]
[[ja:cpp/language/reference]]
[[pt:cpp/language/reference]]
[[ru:cpp/language/reference]]
[[zh:cpp/language/reference]]</text>
      <sha1>c7tsgt3jxsiuk4hyzijnz966bsquk4s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/reference initialization</title>
    <ns>0</ns>
    <id>8869</id>
    <revision>
      <id>87176</id>
      <parentid>87175</parentid>
      <timestamp>2016-07-31T23:41:00Z</timestamp>
      <contributor>
        <ip>146.200.64.224</ip>
      </contributor>
      <text xml:space="preserve" bytes="10810">{{title|reference initialization}}
{{cpp/language/initialization/navbar}}
Binds a reference to an object

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{spar|T}} {{ttb|&amp;}} {{spar|ref}} {{ttb|{{=}}}} {{spar|object}} ;

{{spar|T}} {{ttb|&amp;}} {{spar|ref}} {{ttb|{{=}}}} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|};}}

{{spar|T}} {{ttb|&amp;}} {{spar|ref}} {{ttb|(}} {{spar|object}} {{ttb|) }};

{{spar|T}} {{ttb|&amp;}} {{spar|ref}} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|} }};
}}
{{sdsc | num=2 | {{spar|T}} {{ttb|&amp;&amp;}} {{spar|ref}} {{ttb|{{=}}}} {{spar|object}} ;

{{spar|T}} {{ttb|&amp;&amp;}} {{spar|ref}} {{ttb|{{=}}}} {{ttb|{ }} {{spar|arg1, arg2, ...}} {{ttb|};}}

{{spar|T}} {{ttb|&amp;&amp;}} {{spar|ref}} {{ttb|(}} {{spar|object}} {{ttb|) }};

{{spar|T}} {{ttb|&amp;&amp;}} {{spar|ref}} {{ttb|{}} {{spar|arg1, arg2, ...}} {{ttb|} }};
|notes={{mark since c++11}}
}}
{{sdsc | num=3 | given {{spar|R}} {{spar|fn}} {{ttb|(}} {{spar|T}} {{ttb|&amp;}} {{spar|arg}} {{ttb|);}} or {{spar|R}} {{spar|fn}} {{ttb|(}} {{spar|T}} {{ttb|&amp;&amp;}} {{spar|arg}} {{ttb|);}}

{{spar|fn}} {{ttb|(}} {{spar|object}} {{ttb|)}}

{{spar|fn}} {{ttb|(}} {{ttb|{}} {{spar|arg1, arg2, ...}} {{ttb|} }} {{ttb|)}}
}}
{{sdsc | num=4 | given {{spar|T}} {{ttb|&amp;}} {{spar|fn}} {{ttb|() { }} or {{spar|T}} {{ttb|&amp;&amp;}} {{spar|fn}} {{ttb|() { }}

{{ttb|return}} {{spar|object}} {{ttb|;}} 
}}
{{sdsc | num=5 | {{spar|Class}}{{ttb|::}}{{spar|Class(...)}} {{ttb|:}} {{spar|refmember}}{{ttb|(}} {{spar|expr}}{{ttb|)}} {...} }}
{{sdsc end}}

===Explanation===

A reference to {{tt|T}} can be initialized with an object of type {{tt|T}}, a function of type {{tt|T}}, or an object implicitly convertible to {{tt|T}}. Once initialized, a reference cannot be changed to refer to another object.

References are initialized in the following situations:
@1@ When a named {{rlp|reference#Lvalue_references|lvalue reference}} variable is declared with an initializer
@2@ When a named {{rlp|reference#Rvalue_references|rvalue reference}} variable is declared with an initializer
@3@ In a function call expression, when the function parameter has reference type
@4@ In the {{c|return}} statement, when the function returns a reference type
@5@ When a {{rlp|data members|non-static data member}} of reference type is initialized using a {{rlp|initializer_list|member initializer}}

The effects of reference initialization are:

* If the initializer is a braced-init-list {{ttb|{}} {{spar|arg1, arg2, ...}} {{ttb|} }}, rules of {{rlp|list initialization}} are followed.

* Otherwise, if the reference is an lvalue reference:

:* If {{spar|object}} is an lvalue expression, and its type is {{tt|T}} or derived from {{tt|T}}, and is equally or less cv-qualified, then the reference is bound to the object identified by the lvalue or to its base class subobject.
{{source|1=
double d = 2.0;
double&amp; rd = d;        // rd refers to d
const double&amp; rcd = d; // rcd refers to d
struct A {};
struct B : A {} b;
A&amp; ra = b;             // ra refers to A subobject in b
const A&amp; rca = b;      // rca refers to A subobject in b
}}

:* If {{spar|object}} is an lvalue expression, and its type is implicitly convertible to a type that is either {{tt|T}} or derived from {{tt|T}}, equally or less cv-qualified, then the non-explicit conversion functions of the source type and its base classes that return lvalue references are considered and the best one is selected by overload resolution. The reference is then bound to the object identified by the lvalue returned by the conversion function (or to its base class subobject)
{{source|1=
struct A { };
struct B : A { operator int&amp;(); } b;
int&amp; ir = B();         // ir refers to the result of B::operator int&amp;
}}

* Otherwise, if the reference is either rvalue reference or lvalue reference to {{c|const}}:

:* If {{spar|object}} is a non-bit-field {{rev inl|until=c++17|xvalue, a class prvalue, an array prvalue,}}{{rev inl|since=c++17|rvalue}} or a function lvalue, and its type is either {{tt|T}} or derived from {{tt|T}}, equally or less cv-qualified, then the reference is bound to the value of the initializer expression or to its base subobject {{rev inl|since=c++17|(after {{rlp|implicit_conversion#Temporary_materialization|materializing a temporary if necessary)}}.}}
{{source|1=
struct A { };
struct B : A { } b;
extern B f();
const A&amp; rca2 = f(); // bound to the A subobject of the B rvalue.
A&amp;&amp; rra = f();       // same as above

int i2 = 42;
int&amp;&amp; rri = static_cast&lt;int&amp;&amp;&gt;(i2); // bound directly to i2
}}

:* If {{spar|object}} is a class type expression {{rev inl|since=c++17|that is not same or derived from {{tt|T}} and}} that can be implicitly converted to {{rev inl|until=c++17|an xvalue, a class prvalue,}}{{rev inl|since=c++17|rvalue}} or a function value of type that is either {{tt|T}} or derived from {{tt|T}}, equally or less cv-qualified, then the reference is bound to the result of the conversion or to its base subobject {{rev inl|since=c++17|(after {{rlp|implicit_conversion#Temporary_materialization|materializing a temporary if necessary)}}.}} {{rev inl|since=c++17|User-defined conversions are not considered}}
{{source|1=
struct A { };
struct B : A { };
struct X { operator B(); } x;
const A&amp; r = x; // bound to the A subobject of the result of the conversion
B&amp;&amp; rrb = x;    // bound directly to the result of the conversion
}}

:* Otherwise, a temporary of type {{tt|T}} is constructed and [[cpp/language/copy_initialization|copy-initialized]] from {{spar|object}}. Copy-initialization rules apply (explicit constructors are not considered). If {{tt|T}} or the type of {{spar|object}} is a class type, the reference is then direct-initialized with the result of the conversion, except user-defined conversions are ignored for that direct-initialization. For non-class types, the reference is bound directly to {{rev inl|until=c++17|this temporary}}{{rev inl|since=c++17|the result of the conversion (after {{rlp|implicit_conversion#Temporary_materialization|materializing a temporary if necessary)}}}}
{{source|1=
const std::string&amp; rs = &quot;abc&quot;; // rs refers to temporary copy-initialized from char array
const double&amp; rcd2 = 2;        // rcd2 refers to temporary with value 2.0
int i3 = 2;
double&amp;&amp; rrd3 = i3;            // rrd3 refers to temporary with value 2.0
}}
===Lifetime of a temporary===
Whenever a reference is bound to a temporary or to a base subobject of a temporary, the lifetime of the temporary is extended to match the lifetime of the reference, with the following exceptions:
* a temporary bound to a return value of a function in a {{c|return}} statement is not extended: it is destroyed immediately at the end of the return expression. Such function always returns a dangling reference.
{{rev begin}}
{{rev|until=c++14|
* a temporary bound to a reference member in a constructor [[cpp/language/initializer_list|initializer list]] persists only until the constructor exits, not as long as the object exists. (note: such initialization is ill-formed as of DR 1696)
}}
{{rev end}}
* a temporary bound to a reference parameter in a function call exists until the end of the full expression containing that function call: if the function returns a reference, which outlives the full expression, it becomes a dangling reference.
* a temporary bound to a reference in the initializer used in a new-expression exists until the end of the full expression containing that new-expression, not as long as the initialized object. If the initialized object outlives the full expression, its reference member becomes a dangling reference.

In general, the lifetime of a temporary cannot be further extended by &quot;passing it on&quot;: a second reference, initialized from the reference to which the temporary was bound, does not affect its lifetime.

===Notes===
References appear without initializers only in function parameter declaration, in function return type declaration, in the declaration of a class member, and with the {{tt|extern}} specifier.

===Example===

{{example
 |
 | code=
#include &lt;utility&gt;
#include &lt;sstream&gt;
struct S {
 int mi;
 const std::pair&lt;int,int&gt;&amp; mp; // reference member
};

void foo(int) {}

struct A {};
struct B : A {
   int n;
   operator int&amp;() { return n; };
};

B bar() {return B(); }

//int&amp; bad_r; // error: no initializer
extern int&amp; ext_r; // OK

int main()
{
 // lvalues
    int n = 1;
    int&amp; r1 = n;  // lvalue reference to the object n
    const int&amp; cr(n); // reference can be more cv-qualified
    volatile int&amp; cv{n}; // any initializer syntax can be used
    int&amp; r2 = r1; // another lvalue reference to the object n
//    int&amp; bad = cr; // error: less cv-qualified
    int&amp; r3 = const_cast&lt;int&amp;&gt;(cr); // const_cast is needed

    void (&amp;rf)(int) = foo; // lvalue reference to function
    int ar[3];
    int (&amp;ra)[3] = ar; // lvalue reference to array

    B b;
    A&amp; base_ref = b; // reference to base subobject
    int&amp; converted_ref = b; // reference to the result of a conversion

// rvalues
//  int&amp; bad = 1; // error: cannot bind lvalue ref to rvalue
    const int&amp; cref = 1; // bound to rvalue
    int&amp;&amp; rref = 1; // bound to rvalue

    const A&amp; cref2 = bar(); // reference to A subobject of B temporary
    A&amp;&amp; rref2 = bar();      // same

    int&amp;&amp; xref = static_cast&lt;int&amp;&amp;&gt;(n); // bind directly to n
//  int&amp;&amp; copy_ref = n; // error: can't bind to an lvalue
    double&amp;&amp; copy_ref = n; // bind to an rvalue temporary with value 1.0

// restrictions on temporary lifetimes
    std::ostream&amp; buf_ref = std::ostringstream() &lt;&lt; 'a'; // the ostringstream temporary
                      // was bound to the left operand of operator&lt;&lt;, but its lifetime
                      // ended at the semicolon: buf_ref is now a dangling reference.

    S a { 1, {2,3} }; // temporary pair {2,3} bound to the reference member
                      // a.mp and its lifetime is extended to match a
                      // (Note: does not compile in C++17)
    S* p = new S{ 1, {2,3} }; // temporary pair {2,3} bound to the reference
                      // member p-&gt;mp, but its lifetime ended at the semicolon
                      //  p-&gt;mp is a dangling reference
    delete p;
}
 | output=
}}

===See also===
* [[cpp/language/default_initialization|default initialization]]
* [[cpp/language/direct_initialization|direct initialization]]
* [[cpp/language/value_initialization|value initialization]]
* [[cpp/language/copy_initialization|copy initialization]]
* [[cpp/language/list_initialization|list initialization]]

[[de:cpp/language/reference initialization]]
[[es:cpp/language/reference initialization]]
[[fr:cpp/language/reference initialization]]
[[it:cpp/language/reference initialization]]
[[ja:cpp/language/reference initialization]]
[[pt:cpp/language/reference initialization]]
[[ru:cpp/language/reference initialization]]
[[zh:cpp/language/reference initialization]]</text>
      <sha1>jysh8bwl35vko2pcvfjgu25y20osdgt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/reinterpret cast</title>
    <ns>0</ns>
    <id>2742</id>
    <revision>
      <id>91995</id>
      <parentid>90803</parentid>
      <timestamp>2017-04-01T05:38:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="9444">{{title|reinterpret_cast conversion}}
{{cpp/language/expressions/navbar}}

Converts between types by reinterpreting the underlying bit pattern.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|reinterpret_cast &amp;lt;}} {{spar|new_type}} {{ttb|&amp;gt; (}} {{spar|expression}} {{ttb|)}} }}
{{sdsc end}}

Returns a value of type {{tt|new_type}}.

===Explanation===

Unlike {{c|static_cast}}, but like {{c|const_cast}}, the {{c|reinterpret_cast}} expression does not compile to any CPU instructions. It is purely a compiler directive which instructs the compiler to treat the sequence of bits (object representation) of {{spar|expression}} as if it had the type {{spar|new_type}}.

Only the following conversions can be done with {{c|reinterpret_cast}}, except when such conversions would cast away ''constness'' or ''volatility''.

@1@ An expression of integral, enumeration, pointer, or pointer-to-member type can be converted to its own type. The resulting value is the same as the value of {{tt|expression}}. {{mark since c++11}}
@2@ Any pointer can be converted to any integral type large enough to hold the value of the pointer (e.g. to {{lc|std::uintptr_t}})
@3@ A value of any integral or enumeration type can be converted to a pointer type. A pointer converted to an integer of sufficient size and back to the same pointer type is guaranteed to have its original value, otherwise the resulting pointer cannot be dereferenced safely (the round-trip conversion in the opposite direction is not guaranteed; the same pointer may have multiple integer representations) The null pointer constant {{lc|NULL}} or integer zero is not guaranteed to yield the null pointer value of the target type; {{rlp|static_cast}} or {{rlp|implicit_cast|implicit conversion}} should be used for this purpose.
@4@ Any value of type {{lc|std::nullptr_t}}, including {{c|nullptr}} can be converted to any integral type as if it were {{c|(void*)0}}, but no value, not even {{c|nullptr}} can be converted to {{lc|std::nullptr_t}}: {{c|static_cast}} should be used for that purpose. {{mark since c++11}}
@5@ Any pointer to object of type {{tt|T1}} can be converted to pointer to object of another type ''cv'' {{tt|T2}}. This is exactly equivalent to {{c|static_cast&lt;cv T2*&gt;(static_cast&lt;cv void*&gt;(expression))}} (which implies that if {{tt|T2}}'s alignment requirement is not stricter than {{tt|T1}}'s, the value of the pointer does not change and conversion of the resulting pointer back to its original type yields the original value). In any case, the resulting pointer may only be dereferenced safely if allowed by the ''type aliasing'' rules (see below){{mark unreviewed dr|cwg}}&lt;!-- cwg658, cwg1412 --&gt;
@6@ An lvalue expression of type {{tt|T1}} can be converted to reference to another type {{tt|T2}}. The result is an lvalue or xvalue referring to the same object as the original lvalue, but with a different type. No temporary is created, no copy is made, no constructors or conversion functions are called. The resulting reference can only be accessed safely if allowed by the ''type aliasing'' rules (see below)
@7@ Any pointer to function can be converted to a pointer to a different function type. Calling the function through a pointer to a different function type is undefined, but converting such pointer back to pointer to the original function type yields the pointer to the original function.
@8@ On some implementations (in particular, on any POSIX compatible system as required by [http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html dlsym]), a function pointer can be converted to {{c|void*}} or any other object pointer, or vice versa. If the implementation supports conversion in both directions, conversion to the original type yields the original value, otherwise the resulting pointer cannot be dereferenced or called safely.
@9@ The null pointer value of any pointer type can be converted to any other pointer type, resulting in the null pointer value of that type. Note that the null pointer constant {{c|nullptr}} or any other value of type {{lc|std::nullptr_t}} cannot be converted to a pointer with {{c|reinterpret_cast}}: implicit conversion or {{c|static_cast}} should be used for this purpose.
@10@ An rvalue pointer to member function can be converted to pointer to a different member function of a different type. Conversion to the original type yields the original value, otherwise the resulting pointer cannot be used safely.
@11@ An rvalue pointer to member object of some class {{tt|T1}} can be converted to a pointer to another member object of another class {{tt|T2}}. If {{tt|T2}}'s alignment is not stricter than {{tt|T1}}'s, conversion to the original type yields the original value, otherwise the resulting pointer cannot be used safely.

{{cpp/language/cast_return}}

===Keywords===

{{ltt|cpp/keyword/reinterpret_cast}}

===Type aliasing===

When a pointer or reference to object whose {{rlp|type#Dynamic_type|dynamic type}} is {{tt|DynamicType}} is {{tt|reinterpret_cast}} (or {{rlp|explicit cast|C-style cast}}) to a pointer or reference to object of a different type {{tt|AliasedType}}, the cast always succeeds, but the resulting pointer or reference may only be used to access the object if one of the following is true:

* {{tt|AliasedType}} is (possibly {{rlp|cv}}-qualified) {{tt|DynamicType}}

* {{tt|AliasedType}} and {{tt|DynamicType}} are both (possibly multi-level, possibly cv-qualified at each level) pointers to the same type {{tt|T}} {{mark since c++11}}

* {{tt|AliasedType}} is the (possibly {{rlp|cv}}-qualified) signed or unsigned variant of {{tt|DynamicType}}

* {{tt|AliasedType}} is an {{rlp|aggregate_initialization|aggregate type}} or a {{rlp|union}} type which holds one of the aforementioned types as an element or non-static member (including, recursively, elements of subaggregates and non-static data members of the contained unions): this makes it safe to obtain a usable pointer to a struct or union given a pointer to its non-static member or element.

* {{tt|AliasedType}} is a (possibly {{rlp|cv}}-qualified) {{rlp|derived_class|base class}} of {{tt|DynamicType}} and {{tt|DynamicType}} is a standard-layout class that has has no non-static data members, and {{tt|AliasedType}} is its first base class.

* {{tt|AliasedType}} is {{c|char}}, {{c|unsigned char}}, or {{ltt|cpp/types/byte|std::byte}}: this permits examination of the  {{rlp|object#Object_representation_and_value_representation|object representation}} of any object as an array of bytes.

If {{tt|AliasedType}} does not satisfy these requirements, accessing the object through the new pointer or reference invokes {{rlp|ub|undefined behavior}}. This is known as the ''strict aliasing'' rule and applies to both C++ and C programming languages.

Note that many C++ compilers relax this rule, as a non-standard language extension, to allow wrong-type access through the inactive member of a {{rlp|union}} (such access is not undefined in C).

Also note that this set of rules is more strict than the equivalent rules in the C programming language: C allows access through a pointer to any compatible type. C++ has no compatible types and does not allow access through a pointer or reference to a [[cpp/language/data_members#Standard_layout|layout-compatible type]] if it doesn't satisfy any of the rules listed above (although access to its member may be allowed)

===Notes===
C++98 did not allow conversion between function pointers and {{c|void*}}, this was corrected by DR [http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#195 CWG195]

===Example===

{{example
 | Demonstrates some uses of reinterpret_cast:
 | code=
#include &lt;cstdint&gt;
#include &lt;cassert&gt;
#include &lt;iostream&gt;
int f() { return 42; }
int main()
{
    int i = 7;

    // pointer to integer and back
    uintptr_t v1 = reinterpret_cast&lt;uintptr_t&gt;(&amp;i); // static_cast is an error
    std::cout &lt;&lt; &quot;The value of &amp;i is 0x&quot; &lt;&lt; std::hex &lt;&lt; v1 &lt;&lt; '\n';
    int* p1 = reinterpret_cast&lt;int*&gt;(v1);
    assert(p1 == &amp;i);

    // pointer to function to another and back
    void(*fp1)() = reinterpret_cast&lt;void(*)()&gt;(f);
    // fp1(); undefined behavior
    int(*fp2)() = reinterpret_cast&lt;int(*)()&gt;(fp1);
    std::cout &lt;&lt; std::dec &lt;&lt; fp2() &lt;&lt; '\n'; // safe

    // type aliasing through pointer
    char* p2 = reinterpret_cast&lt;char*&gt;(&amp;i);
    if(p2[0] == '\x7')
        std::cout &lt;&lt; &quot;This system is little-endian\n&quot;;
    else
        std::cout &lt;&lt; &quot;This system is big-endian\n&quot;;

    // type aliasing through reference
    reinterpret_cast&lt;unsigned int&amp;&gt;(i) = 42;
    std::cout &lt;&lt; i &lt;&lt; '\n';

    const int &amp;const_iref = i;
    //int &amp;iref = reinterpret_cast&lt;int&amp;&gt;(const_iref); //compiler error - can't get rid of const
    //Must use const_cast instead:  int &amp;iref = const_cast&lt;int&amp;&gt;(const_iref);
}
 | p=true
 | output=
The value of &amp;i is 0x7fff352c3580
42
This system is little-endian
42
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc const_cast}}
{{dsc inc | cpp/language/dsc static_cast}}
{{dsc inc | cpp/language/dsc dynamic_cast}}
{{dsc inc | cpp/language/dsc explicit_cast}}
{{dsc inc | cpp/language/dsc implicit_cast}}
{{dsc end}}

[[de:cpp/language/reinterpret cast]]
[[es:cpp/language/reinterpret cast]]
[[fr:cpp/language/reinterpret cast]]
[[it:cpp/language/reinterpret cast]]
[[ja:cpp/language/reinterpret cast]]
[[pt:cpp/language/reinterpret cast]]
[[ru:cpp/language/reinterpret cast]]
[[zh:cpp/language/reinterpret cast]]</text>
      <sha1>r37up370x9bgwdgtc07b3dxz2bgzv2t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/return</title>
    <ns>0</ns>
    <id>710</id>
    <revision>
      <id>88529</id>
      <parentid>86378</parentid>
      <timestamp>2016-11-23T16:53:02Z</timestamp>
      <contributor>
        <ip>216.83.132.247</ip>
      </contributor>
      <text xml:space="preserve" bytes="5051">{{title|return statement}}
{{cpp/language/statements/navbar}}
Terminates current function and returns specified value to the caller function.

===Syntax===

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|return}} {{spar|expression}}{{mark optional}} {{ttb|;}}
}}
{{sdsc|num=2|notes={{mark since c++11}}|1=
{{spar|attr}}{{mark optional}} {{ttb|return}} {{spar|braced-init-list}} {{ttb|;}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of {{rlp|attributes}}}}
{{par | {{spar|expression}} | {{rlp|expressions|expression}}, convertible to the function return type}}
{{par | {{spar|braced-init-list}} | brace-enclosed list of initializers and other braced-init-lists}}
{{par end}}

===Explanation===
@1@ Evaluates the {{spar|expression}}, terminates the current function and returns the result of the {{spar|expression}} to the caller, after {{rlp|implicit_cast|implicit conversion}} to the function return type. The {{spar|expression}} is optional in functions whose return type is (possibly cv-qualified) {{c|void}}, in constructors and in destructors.

@2@ Uses {{rlp|list_initialization|copy-list-initialization}} to construct the return value of the function.

===Notes===
If control reaches the end of a function with the return type {{tt|void}} (possibly cv-qualified), end of a constructor, end of a destructor, or the end of a {{rlp|function-try-block}} for a function with the return type (possibly cv-qualified) {{tt|void}} without encountering a return statement, {{c|return;}} is executed.

If control reaches the end of the {{rlp|main function}}, {{c|return 0;}} is executed.

Flowing off the end of a value-returning function (except {{c|main}}) without a return statement is undefined behavior.

In a function returning {{c|void}}, the return statement with {{spar|expression}} can be used, if the expression type is {{c|void}}.

Returning by value may involve construction and copy/move of a temporary object, unless {{rlp|copy_elision|copy elision}} is used.

{{rev begin}}
{{rev|since=c++11|
If {{spar|expression}} is an lvalue expression and the conditions for {{rlp|copy_elision|copy elision}} are met, or would be met, except that {{spar|expression}} names a function parameter, then {{rlp|overload resolution}} to select the constructor to use for initialization of the returned value is performed ''twice'': first as if {{spar|expression}} were an rvalue expression (thus it may select the move constructor or a copy constructor taking reference to const), and if no suitable conversion is available, overload resolution is performed the second time, with lvalue {{spar|expression}} (so it may select the copy constructor taking a reference to non-const).

The above rule applies even if the function return type is different from the type of {{spar|expression}} (copy elision requires same type)
}}
{{rev|since=c++14|
The copy-initialization of the {{rev inl|until=c++17|temporary that is the result of evaluating a}}{{rev inl|since=c++17|the result object of the}} function call is {{rlp|eval order|sequenced-before}} the destruction of all temporaries at the end of {{spar|expression}}, which, in turn, is ''sequenced-before'' the destruction of local variables of the block enclosing the return statement.
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++17|
If {{spar|expression}} is a prvalue, the object returned by the function is initialized directly by that expression. This does not involve a copy or move constructor when the types match (see {{rlp|copy elision}})
}}
{{rev end}}

===Keywords===

{{ltt|cpp/keyword/return}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;utility&gt;

void fa(int i)
{
    if (i == 2)
         return;
    std::cout &lt;&lt; i &lt;&lt; '\n';
} // implied return;

int fb(int i)
{
    if (i &gt; 4)
         return 4;
    std::cout &lt;&lt; i &lt;&lt; '\n';
    return 2;
}

std::pair&lt;std::string, int&gt; fc(const char* p, int x)
{
    return {p, x};
}

void fd()
{
    return fa(10); // fa(10) is a void expression
}

int main()
{
    fa(2); // returns, does nothing when i==2
    fa(1); // prints its argument, then returns
    int i = fb(5); // returns 4
    i = fb(i); // prints its argument, returns 2
    std::cout &lt;&lt; i &lt;&lt; '\n'
              &lt;&lt; fc(&quot;Hello&quot;, 7).second &lt;&lt; '\n';
    fd();
}
 | output=
1
4
2
7
10
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1579|std=C++11|before=return by converting move constructor was not allowed|after=converting move constructor look up enabled}}
{{dr list item|wg=cwg|dr=1885|std=C++14|before=sequencing of the destruction of atomatic variables was not explicit|after=sequencing rules added}}
{{dr list end}}


===See also===
{{dsc begin}}
{{dsc see c | c/language/return | return statement}}
{{dsc end}}

[[ar:cpp/language/return]]
[[de:cpp/language/return]]
[[es:cpp/language/return]]
[[fr:cpp/language/return]]
[[it:cpp/language/return]]
[[ja:cpp/language/return]]
[[pt:cpp/language/return]]
[[ru:cpp/language/return]]
[[zh:cpp/language/return]]</text>
      <sha1>4ua5ead2zckjeuyrvf28awmqguaerpg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/rule of three</title>
    <ns>0</ns>
    <id>13512</id>
    <revision>
      <id>91194</id>
      <parentid>89909</parentid>
      <timestamp>2017-03-25T16:04:26Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="5927">{{title|The rule of three/five/zero}}
{{cpp/language/navbar}}

===Rule of three===
If a class requires a user-defined {{rlp|destructor}}, a user-defined {{rlp|copy constructor}}, or a user-defined {{rlp|as_operator|copy assignment operator}}, it almost certainly requires all three.

Because C++ copies and copy-assigns objects of user-defined types in various situations (passing/returning by value, manipulating a container, etc), these special member functions will be called, if accessible, and if they are not user-defined, they are implicitly-defined by the compiler.

The implicitly-defined special member functions are typically incorrect if the class is managing a resource whose handle is an object of non-class type (raw pointer, POSIX file descriptor, etc), whose destructor does nothing and copy constructor/assignment operator performs a &quot;shallow copy&quot; (copy the value of the handle, without duplicating the underlying resource). 

{{source|1=
class rule_of_three
{
    char* cstring; // raw pointer used as a handle to a dynamically-allocated memory block
 public:
    rule_of_three(const char* arg)
    : cstring(new char[std::strlen(arg)+1]) // allocate
    {
        std::strcpy(cstring, arg); // populate
    }
    ~rule_of_three()
    {
        delete[] cstring;  // deallocate
    }
    rule_of_three(const rule_of_three&amp; other) // copy constructor
    {
        cstring = new char[std::strlen(other.cstring) + 1];
        std::strcpy(cstring, other.cstring);
    }
    rule_of_three&amp; operator=(const rule_of_three&amp; other) // copy assignment
    {
        char* tmp_cstring = new char[std::strlen(other.cstring) + 1];
        std::strcpy(tmp_cstring, other.cstring);
        delete[] cstring;
        cstring = tmp_cstring;
        return *this;
    }
// alternatively, reuse destructor and copy ctor
//  rule_of_three&amp; operator=(rule_of_three other)
//  {
//      std::swap(cstring, other.cstring);
//      return *this;
//  }
};
}}

Classes that manage non-copyable resources through copyable handles may have to declare copy assignment and copy constructor private and not provide their definitions or define them as deleted. This is another application of the rule of three: deleting one and leaving the other to be implicitly-defined will most likely result in errors.

===Rule of five===
Because the presence of a user-defined destructor, copy-constructor, or copy-assignment operator prevents implicit definition of the {{rlp|move constructor}} and the {{rlp|move operator|move assignment operator}}, any class for which move semantics are desirable, has to declare all five special member functions:

{{source|1=
class rule_of_five
{
    char* cstring; // raw pointer used as a handle to a dynamically-allocated memory block
 public:
    rule_of_five(const char* arg)
    : cstring(new char[std::strlen(arg)+1]) // allocate
    {
        std::strcpy(cstring, arg); // populate
    }
    ~rule_of_five()
    {
        delete[] cstring;  // deallocate
    }
    rule_of_five(const rule_of_five&amp; other) // copy constructor
    {
        cstring = new char[std::strlen(other.cstring) + 1];
        std::strcpy(cstring, other.cstring);
    }
    rule_of_five(rule_of_five&amp;&amp; other) : cstring(other.cstring) // move constructor
    {
        other.cstring = nullptr;
    }
    rule_of_five&amp; operator=(const rule_of_five&amp; other) // copy assignment
    {
        char* tmp_cstring = new char[std::strlen(other.cstring) + 1];
        std::strcpy(tmp_cstring, other.cstring);
        delete[] cstring;
        cstring = tmp_cstring;
        return *this;
    }
    rule_of_five&amp; operator=(rule_of_five&amp;&amp; other) // move assignment
    {
        if(this!=&amp;other) // prevent self-move
        {
            delete[] cstring;
            cstring = other.cstring;
            other.cstring = nullptr;
        }
        return *this;
    }
// alternatively, replace both assignment operators with 
//  rule_of_five&amp; operator=(rule_of_five other)
//  {
//      std::swap(cstring, other.cstring);
//      return *this;
//  }
};
}}

Unlike Rule of Three, failing to provide move constructor and move assignment is usually not an error, but a missed optimization opportunity.

===Rule of zero===
Classes that have custom destructors, copy/move constructors or copy/move assignment operators should deal exclusively with ownership (which follows from the [[enwiki:Single responsibility principle|Single Responsibility Principle]]). Other classes should not have custom destructors, copy/move constructors or copy/move assignment operators.&lt;ref&gt;[https://rmf.io/cxx11/rule-of-zero &quot;Rule of Zero&quot;, R. Martinho Fernandes 8/15/2012]&lt;/ref&gt;
{{source|1=
class rule_of_zero
{
    std::string cppstring;
 public:
    rule_of_zero(const std::string&amp; arg) : cppstring(arg) {}
};
}}

When a base class is intended for polymorphic use, its destructor may have to be declared public and virtual. This blocks implicit moves (and deprecates implicit copies), and so the special member functions have to be declared as defaulted&lt;ref&gt;[http://scottmeyers.blogspot.fr/2014/03/a-concern-about-rule-of-zero.html &quot;A Concern about the Rule of Zero&quot;, Scott Meyers, 3/13/2014]&lt;/ref&gt;
{{source|1=
class base_of_five_defaults
{
 public:
    base_of_five_defaults(const base_of_five_defaults&amp;) = default;
    base_of_five_defaults(base_of_five_defaults&amp;&amp;) = default;
    base_of_five_defaults&amp; operator=(const base_of_five_defaults&amp;) = default;
    base_of_five_defaults&amp; operator=(base_of_five_defaults&amp;&amp;) = default;
    virtual ~base_of_five_defaults() = default;
};
}}
however, this can be avoided if the objects of the derived class are not dynamically allocated, or are dynamically allocated only to be stored in a {{lc|std::shared_ptr}} (such as by {{lc|std::make_shared}}): shared pointers invoke the derived class destructor even after casting to {{tt|std::shared_ptr&lt;Base&gt;}}.

===References===
&lt;references/&gt;

[[zh:cpp/language/rule_of_three]]</text>
      <sha1>a0j032060btmg2czundpo7d1ej0vs3y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/scope</title>
    <ns>0</ns>
    <id>13085</id>
    <revision>
      <id>83129</id>
      <parentid>78341</parentid>
      <timestamp>2016-01-21T16:54:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>compound statements were renamed...</comment>
      <text xml:space="preserve" bytes="14729">{{title|Scope}}
{{cpp/language/basics/navbar}}
Each {{rlp|name}} that appears in a C++ program is only valid in some possibly discontiguous
portion of the source code called its ''scope''.

Within a scope, {{rlp|lookup|unqualified name lookup}} can be used to associate the name with its declaration.

===Block scope===
The potential scope of a variable introduced by a declaration in a {{rlp|statements#Compound_statements|block (compound statement)}} begins at the point of declaration and ends at the end of the block. Actual scope is the same as potential scope unless there is a nested block with a declaration that introduces identical name (in which case, the entire potential scope of the nested declaration is excluded from the scope of the outer declaration)

{{source|1=
int main()
{
    int a = 0; // scope of the first 'a' begins
    ++a; // the name 'a' is in scope and refers to the first 'a'
    {
        int a = 1; // scope of the second 'a' begins
                   // scope of the first 'a' is interrupted
        a = 42;    // 'a' is in scope and refers to the second 'a'                 
    } // block ends, scope of the second 'a' ends
      //             scope of the first 'a' resumes
} // block ends, scope of the first 'a' ends
int b = a; // Error: name 'a' is not in scope
}}

The potential scope of a function parameter (including parameters of a lambda expression) begins at the point of declaration and ends at the end of the last exception handler of the {{rlp|function-try-block}}, or at the end of the function body if a function try block was not used.

{{source|1=
int f(int n = 2)  // scope of 'n' begins
try // function try block
{         // the body of the function begins
   ++n;   // 'n' is in scope and refers to the function parameter
   {
      int n = 2; // scope of the local variable 'n' begins
                 // scope of function parameter 'n' interrupted 
      ++n; // 'n' refers to the local variable in this block
    }            // scope of the local variable 'n' ends
                 // scope of function parameter 'n' resumes
} catch(...) {
   ++n; // n is in scope and refers to the function parameter
   throw;
} // last exception handler ends, scope of function parameter 'n' ends
int a = n; // Error: name 'n' is not in scope
}}

The potential scope of a name declared in an exception handler begins at the point of declaration and ends when the exception handler ends, and is not in scope in another exception handler or in the enclosing block.

{{source|1=
try {   
    f();
} catch(const std::runtime_error&amp; re) { // scope of re begins
    int n = 1; // scope of n begins
    std::cout &lt;&lt; re.what(); // re is in scope
} // scope of re ends, scope of n ends
 catch(std::exception&amp; e) {
    std::cout &lt;&lt; re.what(); // error: re is not in scope
    ++n; // error: n is not in scope
}
}}

The potential scope of a name declared in the ''init-statement'' of the {{rlp|for|for loop}}, in the ''condition'' of a {{rlp|for|for loop}}, in the ''range_declaration'' of a {{rlp|range-for|range for loop}}, in the ''condition'' of the {{rlp|if|if statement}}, {{rlp|while|while loop}}, or {{rlp|switch|switch statement}} begins at the point of declaration and ends at the end of the controlled statement.

{{source|1=
Base* bp = new Derived;
if(Derived* dp = dynamic_cast&lt;Derived*&gt;(bp))
{
    dp-&gt;f(); // dp is in scope
} // scope of dp ends
        
for(int n = 0; // scope of n begins
    n &lt; 10;    // n is in scope
    ++n)       // n is in scope
{
    std::cout &lt;&lt; n &lt;&lt; ' '; // n is in scope
} // scope of n ends
}}

===Function prototype scope===
The scope of a name introduced in the parameter list of a function declaration that is not a definition ends at the end of the function declarator. If there are multiple or nested declarators in the declaration, the scope ends at the end of the nearest enclosing function declarator.

{{source|1=
const int n = 3;

int f1(int n,     // scope of global 'n' interrupted,
                  // scope of the parameter 'n' begins
       int y = n); // error: default argument references a parameter

int (*(*f2)(int n))[n]; // OK: the scope of the function parameter 'n'
                        // ends at the end of its function declarator
                        // in the array declarator, global n is in scope
// (this declares a pointer to function returning a pointer to an array of 3 int

// by contrast
auto (*f3)(int n)-&gt;int (*)[n]; // error: parameter 'n' as array bound
}}

===Function scope===
A {{rlp|statements#Labels|label (and only a label)}} declared inside a function is in scope everywhere in that function, in all nested blocks, before and after its own declaration.

{{source|1=
void f()
{
   {   
       goto label; // label in scope even though declared later
label:;
   }
   goto label; // label ignores block scope
}

void g()
{
    goto label; // error: label not in scope in g()
}
}}

===Namespace scope===
The potential scope of any entity declared in a {{rlp|namespace}} begins at the declaration and consists of the concatenation of all namespace definitions for the same namespace name that follow, plus, for any {{rlp|namespace|using-directive}} that introduced this name or its entire namespace into another scope, the rest of that scope.

The top-level scope of a translation unit (&quot;file scope&quot; or &quot;global scope&quot;) is also a namespace and is properly called &quot;global namespace scope&quot;. The potential scope of any entity declared in the global namespace scope begins at the declaration and continues to the end of the translation unit. 

The scope of an entity declared in an unnamed namespace or in an inline namespace includes the enclosing namespace;

{{source|1=
namespace N { // scope of N begins (as a member of global namespace)
    int i; // scope of i begins
    int g(int a) { return a; } // scope of g begins
    int j(); // scope of j begins
    void q(); // scope of q begins
    namespace {
        int x; // scope of x begins
    } // scope of x does not end
    inline namespace inl { // scope of inl begins
      int y; // scope of y begins
    } // scope of y does not end
} // scope of i,g,j,q,inl,x,y interrupted

namespace {
    int l=1; // scope of l begins
} // scope of l does not end (it's a member of unnamed namespace)

namespace N { // scope of i,g,j,q,inl,x,y continues
    int g(char a) {  // overloads N::g(int)
        return l+a;  // l from unnamed namespace is in scope
    }
    int i; // error: duplicate definition (i is already in scope)
    int j(); // OK: repeat function declaration is allowed
    int j() { // OK: definition of the earlier-declared N::j()
        return g(i); // calls N::g(int)
    }
    int q(); // error: q is already in scope with different return type
} // scope of i,g,j,q,inl,x,y interrupted

int main() {
    using namespace N; // scope of i,g,j,q,inl,x,y resumes
    i = 1; // N::i is in scope
    x = 1; // N::(anonymous)::x is in scope
    y = 1; // N::inl::y is in scope
    inl::y = 2; // N::inl is also in scope
} // scope of i,g,j,q,inl,x,y interrupted

}}
===Class scope===
The potential scope of a name declared in a {{rlp|class}} begins at the point of declaration and includes the rest of the class body and all function bodies (even if defined outside the class definition or before the declaration of the name), default arguments, exception specifications, in-class brace-or-equal initializers, and all these things in nested classes, recursively.

{{source|1=
class X {
    int f(int a = n) { // X::n is in scope inside default parameter
         return a*n;   // X::n is in scope inside function body
    }
    int g();
    int i = n*2;   // X::n is in scope inside initializer

//  int x[n];      // Error: n is not in scope in class body
    static const int n = 1;
    int x[n];      // OK: n is now in scope in class body
};
int X::g() { return n; } // X::n is in scope in out-of-class member function body
}}

If a name is used in a class body before it is declared, and another declaration for that name is in scope, the program is {{rlp|ub|ill-formed, no diagnostic required}}.

{{source|1=
typedef int c; // ::c
enum { i = 1 }; // ::i
class X {
    char v[i]; // Error: at this point, i refers to ::i
               // but there is also X::i
    int f() {
         return sizeof(c); // OK: X::c, not ::c is in scope inside a member function
    }
    char c; // X::c
    enum { i = 2 }; // X::i
};

typedef char* T;
struct Y {
    T a; // error: at this point, T refers to ::T
         // but there is also Y::T
    typedef long T;
    T b;
};
}}

Names of any class members can only be used in four contexts:
* in its own class scope or in the class scope of a derived class
* after the {{ttb|.}} operator applied to an expression of the type of its class or a class derived from it
* after the {{ttb|-&gt;}} operator applied to an expression of the type of pointer to its class or pointers to a class derived from it
* after the {{ttb|::}} operator applied to the name of its class or the name of a class derived from it

===Enumeration scope===
The name of an enumerator introduced in a {{rlp|enum|scoped enumeration}} begins at the point of declaration and ends at the end of the enum specifier (in contrast, unscoped enumerators are in scope after the end of the enum specifier)

{{source|1=
enum e1_t { // unscoped enumeration
  A,
  B = A*2
}; // scope of A and B does not end

enum class e2_t { // scoped enumeration
    SA,
    SB = SA*2 // SA is in scope
}; // scope of SA and SB ends

e1_t e1 = B; // OK, B is in scope
// e2_t e2 = SB; // Error: SB is not in scope
e2_t e2 = e2_t::SB; // OK

}}
===Template parameter scope===
The potential scope of a template parameter name begins immediately at the point of declaration and continues to the end of the smallest template declaration in which it was introduced.  In particular, a template parameter can be used in the declarations of subsequent template parameters and in the specifications of base classes, but can't be used in the declarations of the preceding template parameters.

{{source|1=
template&lt; typename T, // scope of T begins
          T* p,       // T can be used for a non-type parameter
          class U = T // T can be used for a default type
        &gt;
class X : public Array&lt;T&gt; // T can be used in base class name
{
   // T can be used inside the body as well
}; // scopes of T and U end, scope of X continues
}}

The potential scope of the name of the parameter of a template template parameter is the smallest template parameter list in which that name appears

{{source|1=
template&lt; template&lt; // template template parameter
                    typename Y,     // scope of Y begins
                    typename G = Y // Y is in scope
                  &gt; // scopes of Y and G end
          class T,
//          typename U = Y // Error: Y is not in scope
          typename U
        &gt;
class X
{
}; // scopes of T and U end
}}

Similar to other nested scopes, the name of a template parameter hides the same name from the outer scope for the duration of its own:

{{source|1=
typedef int N;
template&lt; N X, // non-type parameter of type int
          typename N, // scope of this N begins, scope of ::N interrupted
          template&lt;N Y&gt; class T // N here is the template parameter, not int
         &gt; struct A;
}}

===Point of declaration===
Scope begins at the ''point of declaration'', which is located as follows:

For variables and other names introduced by simple declarations, the point of declaration is immediately after that name's {{rlp|declarations#Declarators|declarator}} and before its initializer, if any:

{{source|1=
unsigned char x = 32; // scope of the first 'x' begins
{
    unsigned char x = x; // scope of the second 'x' begins before the initializer (= x)
                         // this does not initialize the second 'x' with the value 32, 
                         // this initializes the second 'x' with its own, indeterminate, value
}
std::function&lt;int(int)&gt; f = [&amp;](int n){return n&gt;1 ? n*f(n-1) : n;};
           // the name of the function 'f' is in scope within the lambda, and can
           // be correctly captured by reference, giving a recursive function
}}

{{source|1=
const int x = 2; // scope of the first 'x' begins
{
    int x[x] = {}; // scope of the second x begins before the initializer (= {})
                   // but after the declarator (x[x]). Within the declarator, the outer
                   // 'x' is still in scope. This declares an array of 2 int.
}
}}

The point of declaration of a class or template is immediately after the identifier that names the class (or the template-id that names the template) appears in its {{rlp|classes|class-head}}, and is already in scope in the list of the base classes:

{{source|1=
// the name 'S' is in scope immediately after it appears, 
// so it can be used in the list of base classes
struct S: std::enable_shared_from_this&lt;S&gt; 
{
};
}}

The point of declaration of an enumeration is immediately after the identifier that names it appears in the {{rlp|enum|enum specifier}} or opaque enum declaration, whichever is used first:

{{source|1=
enum E : int { // E is already in scope
    A = sizeof(E)
};
}}

The point of declaration of a {{rlp|type alias|type alias or alias template}} is immediately after the type-id to which the alias refers:

{{source|1=
using T = int; // point of declaration of T is at the semicolon
using T = T;   // same as T = int
}}

The point of declaration of an enumerator is immediately after its definition (not before the initializer as it is for variables):

{{source|1=
const int x = 12;
{
    enum { x = x + 1, // point of declaration is at the comma, x is initialized to 13
           y = x + 1  // the enumerator x is now in scope, y is initialized to 14
         };
}
}}

The point of declaration for an {{spar|injected-class-name}} is immediately following the opening brace of its class (or class template) definition
{{todo|injected-class-name needs to be defined somewhere and linked here}}
{{source|1=
template&lt;typename T&gt;
struct Array
// : std::enable_shared_from_this&lt;Array&gt; // Error: the injected class name is not in scope
   : std::enable_shared_from_this&lt; Array&lt;T&gt; &gt; //OK: the template-name Array is in scope
{ // the injected class name Array is now in scope as if a public member name
    Array* p; // pointer to Array&lt;T&gt;
};
}}

{{todo|remainder of [basic.scope.pdecl]}}

===References===
{{ref std c++11}}
{{ref std | section=3.3 | title=Scope | id=basic.scope}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=3.3 | title=Declarative regions and scopes | id=basic.scope}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/scope | Scope}}
{{dsc end}}</text>
      <sha1>h4963s3por0zfz5ggnkqgcf6ztn6s0z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/sfinae</title>
    <ns>0</ns>
    <id>13155</id>
    <revision>
      <id>80890</id>
      <parentid>80889</parentid>
      <timestamp>2015-09-14T22:55:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>the todo still applies</comment>
      <text xml:space="preserve" bytes="8366">{{title|SFINAE}}
{{cpp/language/templates/navbar}}

&quot;Substitution Failure Is Not An Error&quot;


This rule applies during overload resolution of function templates: When {{rlp|function_template#Template_argument_substitution|substituting}} the {{rlp|template argument deduction|deduced type}} for the template parameter fails, the specialization is discarded from the {{rlp|overload resolution|overload set}} instead of causing a compile error.

This feature is used in template metaprogramming.

===Explanation===
Function template parameters are substituted (replaced by template arguments) twice:

* explicitly specified template arguments are substituted before template argument deduction
* deduced arguments and the arguments obtained from the defaults are substituted after template argument deduction

Substitution occurs in
* all types used in the function type (which includes return type and the types of all parameters)
* all types used in the template parameter declarations
{{rev begin}}
{{rev|since=c++11|
* all expressions used in the function type
* all expressions used in a template parameter declaration
}}
{{rev end}}

A ''substitution failure'' is any situation when the type or expression above would be ill-formed (with a required diagnostic), if written using the substituted arguments.

Only the failures in the types and expressions in the ''immediate context'' of the function type or its template parameter types are SFINAE errors. If the evaluation of a substituted type/expression causes a side-effect such as instantiation of some template specialization, generation of an implicitly-defined member function, etc, errors in those side-effects are treated as hard errors.
{{todo|mini-example where this matters}}

{{rev begin}}
{{rev | since=c++14|
Substitution proceeds in lexical order and stops when a failure is encountered.
{{source|1=
template&lt;typename SomeType&gt;
struct inner_type { typedef typename SomeType::type type; };
template &lt;
  class T,
  class   = typename T::type,            // SFINAE failure if T has no member type
  class U = typename inner_type&lt;T&gt;::type // hard error if T has no member type
                                         // (guaranteed to not occur as of C++14)
&gt; void foo (int);
}}}}{{rev end}}

===Type SFINAE===
The following type errors are SFINAE errors:

{{rev begin}}
{{rev|since=c++11|
* attempting to instantiate a pack expansion containing multiple packs of different lengths
}}
{{rev end}}
* attempting to create an array of void, array of reference, array of function, array of abstract class types, array of negative size, or array of size zero.
{{source|1=
template&lt;int I&gt; void div(char(*)[I % 2 == 0] = 0) {
    // this overload is selected when I is even
}
template&lt;int I&gt; void div(char(*)[I % 2 == 1] = 0) {
    // this overload is selected  when I is odd
}
}}
* attempting to use a type that is not a class or enumeration on the left of a scope resolution operator {{ttb|::}}
{{source|1=
template &lt;class T&gt; int f(typename T::B*);
template &lt;class T&gt; int f(T);
int i = f&lt;int&gt;(0); // uses second overload
}}
* attempting to use a member of a type, where
:* the type does not contain the specified member
:* the specified member is not a type where a type is required
:* the specified member is not a template where a template is required
:* the specified member is not a non-type where a non-type is required
{{source|1=
template &lt;int I&gt; struct X { };
template &lt;template &lt;class T&gt; class&gt; struct Z { };
template &lt;class T&gt; void f(typename T::Y*){}
template &lt;class T&gt; void g(X&lt;T::N&gt;*){}
template &lt;class T&gt; void h(Z&lt;T::template TT&gt;*){}
struct A {};
struct B { int Y; };
struct C { typedef int N; };
struct D { typedef int TT; };
struct B1 { typedef int Y; };
struct C1 { static const int N = 0; };
struct D1 { 
    template &lt;typename T&gt;
    struct TT
    {    
    }; 
};
int main() {
    // Deduction fails in each of these cases:
    f&lt;A&gt;(0); // A does not contain a member Y
    f&lt;B&gt;(0); // The Y member of B is not a type
    g&lt;C&gt;(0); // The N member of C is not a non-type
    h&lt;D&gt;(0); // The TT member of D is not a template

    // Deduction succeeds in each of these cases:
    f&lt;B1&gt;(0); 
    g&lt;C1&gt;(0); 
    h&lt;D1&gt;(0);
}
// todo: needs to demonstrate overload resolution, not just failure
}}
* attempting to create a pointer to reference
* attempting to create a reference to void
* attempting to create pointer to member of T, where T is not a class type
{{source|1=
template&lt;typename T&gt;
class is_class {
    typedef char yes[1];
    typedef char no [2];
    template&lt;typename C&gt; static yes&amp; test(int C::*); // selected if C is a class type
    template&lt;typename C&gt; static no&amp;  test(...);      // selected otherwise
  public:
    static bool const value = sizeof(test&lt;T&gt;(0)) == sizeof(yes);
};
}}
* attempting to give an invalid type to a non-type template parameter
{{source|1=
template &lt;class T, T&gt; struct S {};
template &lt;class T&gt; int f(S&lt;T, T()&gt;*);
struct X {};
int i0 = f&lt;X&gt;(0);
// todo: needs to demonstrate overload resolution, not just failure
}}
* attempting to perform an invalid conversion in 
:* in a template argument expression
:* in an expression used in function declaration
{{source|1=
template &lt;class T, T*&gt; int f(int);
int i2 = f&lt;int,1&gt;(0); // can’t conv 1 to int*
// todo: needs to demonstrate overload resolution, not just failure
}}
* attempting to create a function type with a parameter of type void
* attempting to create a function type which returns an array type or a function type
{{rev begin}}
{{rev | until=c++11|
* attempting to create a cv-qualified function type
}}{{rev |since=c++11|
* attempting to create a function type with a parameter or return type that is an {{rlp|abstract class}}.
}}{{rev end}}

===Expression SFINAE===
{{rev begin}}
{{rev | since=c++11 |
The following expression errors are SFINAE errors

* Ill-formed expression used in a template parameter type
* Ill-formed expression used in the function type
{{source|1=
struct X {};
struct Y { Y(X){} }; // X is convertible to Y

template &lt;class T&gt;
auto f(T t1, T t2) -&gt; decltype(t1 + t2); // overload #1

X f(Y, Y);  // overload #2

X x1, x2;
X x3 = f(x1, x2);  // deduction fails on #1 (expression x1+x2 is ill-formed)
                   // only #2 is in the overload set, and is called
}}

}}
{{rev | until=c++11|
Only constant expressions that are used in types (such as array bounds) were required to be treated as SFINAE (and not hard errors) before C++11.
}}
{{rev end}}

===Library support===
The standard library component {{lc|std::enable_if}} allows for creating a substitution failure in order to enable or disable particular overloads based on a condition evaluated at compile time.

The standard library component {{lc|std::void_t}} is another utility metafunction that simplifies SFINAE applications.

In addition, many [[cpp/types|type traits]] are implemented using SFINAE.

===Alternatives===
Where applicable, [[cpp/iterator/iterator_tags#Example|tag dispatch]], {{rlp|static_assert}}, and, if available, {{rlp|concepts}}, are usually preferred over direct use of SFINAE.

===Examples===
{{example|A common idiom is to use expression SFINAE on the return type, where the expression uses the comma operator, whose left subexpression is the one that is being examined (cast to void to ensure the user-defined operator comma on the returned type is not selected), and the right subexpression has the type that the function is supposed to return.
|code=
#include &lt;iostream&gt;

// this overload is always in the set of overloads
// ellipsis parameter has the lowest ranking for overload resolution
void test(...)
{
    std::cout &lt;&lt; &quot;Catch-all overload called\n&quot;;
}

// this overload is added to the set of overloads if
// C is a reference-to-class type and F is a member function pointer
template&lt;class C, class F&gt;
auto test(C c, F f) -&gt; decltype((void)(c.*f)(), void())
{
    std::cout &lt;&lt; &quot;Reference overload called\n&quot;;
}

// this overload is added to the set of overloads if
// C is a pointer-to-class type and F is a member function pointer
template&lt;class C, class F&gt;
auto test(C c, F f) -&gt; decltype((void)((c-&gt;*f)()), void())
{
    std::cout &lt;&lt; &quot;Pointer overload called\n&quot;;
}

struct X { void f() {} };

int main(){
  X x;
  test( x, &amp;X::f);
  test(&amp;x, &amp;X::f);
  test(42, 1337);
}
|output=
Reference overload called
Pointer overload called
Catch-all overload called
}}</text>
      <sha1>ibc6wvpyorgsjz1ei39id10fibwnhn5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/sizeof</title>
    <ns>0</ns>
    <id>711</id>
    <revision>
      <id>87342</id>
      <parentid>86375</parentid>
      <timestamp>2016-08-15T15:39:25Z</timestamp>
      <contributor>
        <username>Kevinarpe</username>
        <id>5678</id>
      </contributor>
      <comment>add more samples for declared arrays and calculating length of declared array</comment>
      <text xml:space="preserve" bytes="3713">{{title|sizeof operator}}
{{cpp/language/expressions/navbar}}
Queries size of the object or type.

Used when actual size of the object must be known.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|sizeof(}} {{spar|type}} {{ttb|)}}}}
{{sdsc | num=2 | {{ttb|sizeof}} {{spar|expression}} {{ttb|}}}}
{{sdsc end}}

Both versions return a constant of type {{lc|std::size_t}}. 

===Explanation===

@1@ Returns size in bytes of the {{rlp|object|object representation}} of {{spar|type}}.
@2@ Returns size in bytes of the object representation of the type that would be returned by {{spar|expression}}, if evaluated.

===Notes===
Depending on the computer architecture, a [[enwiki:Byte|byte]] may consist of 8 ''or more'' bits, the exact number being recorded in {{lc|CHAR_BIT}}.

{{c|sizeof(char)}}, {{c|sizeof(signed char)}}, and {{c|sizeof(unsigned char)}} always return {{c|1}}.

sizeof cannot be used with function types, incomplete types, or bit-field glvalues.

When applied to a reference type, the result is the size of the referenced type.

When applied to a class type, the result is the size of an object of that class plus any additional padding required to place such object in an array.

When applied to an empty class type, always returns 1.

When applied to an expression, {{tt|sizeof}} does {{rlp|expressions#Unevaluated_expressions|not evaluate the expression}}, and even if the expression designates a polymorphic object, the result is the size of the static type of the expression. Lvalue-to-rvalue, array-to-pointer, or function-to-pointer conversions are not performed. {{rev inl|since=c++17|{{rlp|implicit_cast#Temporary_materialization|Temporary materialization}}, however, is (formally) performed for prvalue arguments: sizeof determines the size of the result object.}}

===Keywords===
{{ltt|cpp/keyword/sizeof}}

===Example===
{{example
 | The example output corresponds to a system with 64-bit pointers and 32-bit int.
 | code=
#include &lt;iostream&gt;

struct Empty {};
struct Base { int a; };
struct Derived : Base { int b; };
struct Bit { unsigned bit: 1; };

int main()
{
    Empty e;
    Derived d;
    Base&amp; b = d;
    Bit bit;
    int a[10];
    std::cout &lt;&lt; &quot;size of empty class: &quot;              &lt;&lt; sizeof e          &lt;&lt; '\n'
              &lt;&lt; &quot;size of pointer : &quot;                 &lt;&lt; sizeof &amp;e         &lt;&lt; '\n'
//            &lt;&lt; &quot;size of function: &quot;                 &lt;&lt; sizeof(void())    &lt;&lt; '\n'  // error
//            &lt;&lt; &quot;size of incomplete type: &quot;          &lt;&lt; sizeof(int[])     &lt;&lt; '\n'  // error
//            &lt;&lt; &quot;size of bit field: &quot;                &lt;&lt; sizeof bit.bit    &lt;&lt; '\n'  // error
              &lt;&lt; &quot;size of array of 10 int: &quot;          &lt;&lt; sizeof(int[10])   &lt;&lt; '\n'
              &lt;&lt; &quot;size of array of 10 int (2): &quot;      &lt;&lt; sizeof a          &lt;&lt; '\n'
              &lt;&lt; &quot;length of array of 10 int: &quot;        &lt;&lt; ((sizeof a) / (sizeof *a)) &lt;&lt; '\n'
              &lt;&lt; &quot;length of array of 10 int (2): &quot;    &lt;&lt; ((sizeof a) / (sizeof a[0])) &lt;&lt; '\n'
              &lt;&lt; &quot;size of the Derived: &quot;              &lt;&lt; sizeof d          &lt;&lt; '\n'
              &lt;&lt; &quot;size of the Derived through Base: &quot; &lt;&lt; sizeof b          &lt;&lt; '\n';

}
|p=true
| output=
size of empty class: 1
size of pointer : 8
size of array of 10 int: 40
size of array of 10 int (2): 40
length of array of 10 int: 10
length of array of 10 int (2): 10
size of the Derived: 8
size of the Derived through Base: 4
}}

===See also===
* {{rlp|alignof}}
* {{rlp|sizeof...}}
{{dsc begin}}
{{dsc see c | c/language/sizeof}}
{{dsc end}}

[[de:cpp/language/sizeof]]
[[es:cpp/language/sizeof]]
[[fr:cpp/language/sizeof]]
[[it:cpp/language/sizeof]]
[[ja:cpp/language/sizeof]]
[[pt:cpp/language/sizeof]]
[[ru:cpp/language/sizeof]]
[[zh:cpp/language/sizeof]]</text>
      <sha1>l3zv1t1urdcmoo4edwia7ouiiges9mq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/sizeof...</title>
    <ns>0</ns>
    <id>2428</id>
    <revision>
      <id>87398</id>
      <parentid>75831</parentid>
      <timestamp>2016-08-19T19:51:26Z</timestamp>
      <contributor>
        <ip>38.117.109.20</ip>
      </contributor>
      <comment>Add missing header include</comment>
      <text xml:space="preserve" bytes="1170">{{title|sizeof... operator}}
{{cpp/language/templates/navbar}}
Queries the number of elements in a [[cpp/language/parameter_pack|parameter pack]].

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|sizeof...(}} {{spar|parameter_pack}} {{ttb|)}} | notes={{mark since c++11}}}}
{{sdsc end}}

Returns a constant of type {{lc|std::size_t}}.

===Explanation===
Returns the number of elements in a [[cpp/language/parameter_pack|parameter pack]].

===Keywords===
{{ltt|cpp/keyword/sizeof}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;array&gt;
#include &lt;type_traits&gt;
 
template&lt;typename... Ts&gt;
constexpr auto make_array(Ts&amp;&amp;... ts)
    -&gt; std::array&lt;std::common_type_t&lt;Ts...&gt;,sizeof...(ts)&gt;
{
    return { std::forward&lt;Ts&gt;(ts)... };
}
 
int main()
{
    auto b = make_array(1, 2, 3);
    std::cout &lt;&lt; b.size() &lt;&lt; '\n';
    for (auto i : b)
        std::cout &lt;&lt; i &lt;&lt; ' ';
}
 |output=
3
1 2 3
}}

===See also===
* {{rlp|sizeof}}

[[de:cpp/language/sizeof...]]
[[es:cpp/language/sizeof...]]
[[fr:cpp/language/sizeof...]]
[[it:cpp/language/sizeof...]]
[[ja:cpp/language/sizeof...]]
[[pt:cpp/language/sizeof...]]
[[ru:cpp/language/sizeof...]]
[[zh:cpp/language/sizeof...]]</text>
      <sha1>cruin4qy40w9z4e82e310v36vyhazm7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/statements</title>
    <ns>0</ns>
    <id>9895</id>
    <revision>
      <id>92031</id>
      <parentid>86899</parentid>
      <timestamp>2017-04-03T04:35:05Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="8935">{{title|Statements}}
{{cpp/language/statements/navbar}}

Statements are fragments of the C++ program that are executed in sequence. The body of any function is a sequence of statements. For example:

{{source|1=
int main()
{
    int n = 1;                        // declaration statement
    n = n + 1;                        // expression statement
    std::cout &lt;&lt; &quot;n = &quot; &lt;&lt; n &lt;&lt; '\n'; // expression statement
    return 0;                         // return statement
}  
}}

C++ includes the following types of statements:
@1@ expression statements;
@2@ compound statements;
@3@ selection statements;
@4@ iteration statements;
@5@ jump statements;
@6@ declaration statements;
@7@ try blocks;
@8@ atomic and synchronized blocks {{mark since tm ts}}.

===Labels===
Any statement can be ''labeled'', by providing a label followed by a colon before the statement itself.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{spar|identifier}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|case}} {{spar|constexpr}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc|num=3|1=
{{spar|attr}}{{mark optional}} {{ttb|default}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc end}}

@1@ target for {{rlp|goto}};
@2@ case label in a {{rlp|switch}} statement;
@3@ default label in a {{rlp|switch}} statement.

An [[cpp/language/attributes|attribute]] sequence {{spar|attr}} may appear just before the label (in which case it applies to the label), or just before any statement itself, in which case it applies to the entire statement. A statement may carry multiple labels. Labels (and only labels) have {{rlp|scope#Function_scope|function scope}}. Labels are ignored by {{rlp|unqualified lookup}}: a label can have the same name as any other entity in the program.

===Expression statements===
An expression followed by a semicolon is a statement.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{spar|expression}}{{mark optional}} {{ttb|;}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par | {{spar|expression}} | an [[cpp/language/expressions|expression]]}}
{{par end}}

Most statements in a typical C++ program are expression statements, such as assignments or function calls.

An expression statement without an expression is called a ''null statement''. It is often used to provide an empty body to a {{rlp|for}} or {{rlp|while}} loop. It can also be used to carry a label in the end of a compound statement.

===Compound statements===
Compound statements or ''blocks'' are brace-enclosed sequences of statements.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|{}} {{spar|statement...}}{{mark optional}} {{ttb|}}}
}}
{{sdsc end}}

When one statement is expected, but multiple statements need to be executed in sequence (for example, in an {{rlp|if}} statement or a loop), a compound statement may be used:

{{source|1=
if (x &gt; 5)          // start of if statement
{                   // start of block
    int n = 1;      // declaration statement
    std::cout &lt;&lt; n; // expression statement
}                   // end of block, end of if statement
}}

Each compound statement introduces its own block {{rlp|scope}}; variables declared inside a block are destroyed at the closing brace in reverse order:

{{source|1=
int main()
{
    {                                // start of block
        std::ofstream f(&quot;test.txt&quot;); // declaration statment
        f &lt;&lt; &quot;abc\n&quot;;                // expression statement
    }                                // end of block: f is flushed and closed
    std::ifstream f(&quot;test.txt&quot;); 
    std::string str;
    f &gt;&gt; str; 
}
}}

===Selection statements===
Selection statements choose between one of several flows of control.
{{rev begin}}
{{rev|until=c++17|
{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement}} {{ttb|else}} {{spar|statement}}
}}
{{sdsc|num=3|1=
{{spar|attr}}{{mark optional}} {{ttb|switch}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement}} 
}}
{{sdsc end}}
}}
{{rev|since=c++17|
{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|constexpr}}{{mark optional}} {{ttb|(}} {{spar|init-statement}}{{mark optional}} {{spar|condition}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|if}} {{ttb|constexpr}}{{mark optional}} {{ttb|(}} {{spar|init-statement}}{{mark optional}} {{spar|condition}} {{ttb|)}} {{spar|statement}} {{ttb|else}} {{spar|statement}}
}}
{{sdsc|num=3|1=
{{spar|attr}}{{mark optional}} {{ttb|switch}} {{ttb|(}} {{spar|init-statement}}{{mark optional}} {{spar|condition}} {{ttb|)}} {{spar|statement}} 
}}
{{sdsc end}}
}}
{{rev end}}

@1@ {{rlp|if}} statement;
@2@ {{rlp|if}} statement with an else clause;
@3@ {{rlp|switch}} statement.

===Iteration statements===
Iteration statements repeatedly execute some code.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|while}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|do}} {{spar|statement}} {{ttb|while}} {{ttb|(}} {{spar|expression}} {{ttb|)}} {{ttb|;}} 
}}
{{sdsc|num=3|1=
{{spar|attr}}{{mark optional}} {{ttb|for}} {{ttb|(}} {{spar|init-statement}} {{spar|condition}}{{mark optional}} {{ttb|;}} {{spar|expression}}{{mark optional}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc|num=4|notes={{mark since c++11}}|1=
{{spar|attr}}{{mark optional}} {{ttb|for}} {{ttb|(}} {{spar|for-range-decl}} {{ttb|:}} {{spar|for-range-init}} {{ttb|)}} {{spar|statement}}
}}
{{sdsc end}}

@1@ {{rlp|while}} loop;
@2@ {{rlp|do|do-while}} loop;
@3@ {{rlp|for|for}} loop;
@4@ {{rlp|range-for|range for}} loop.

===Jump statements===
Jump statements unconditionally transfer flow control

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|break}} {{ttb|;}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|continue}} {{ttb|;}}
}}
{{sdsc|num=3|1=
{{spar|attr}}{{mark optional}} {{ttb|return}} {{spar|expression}}{{mark optional}} {{ttb|;}}
}}
{{sdsc|num=4|notes={{mark since c++11}}|1=
{{spar|attr}}{{mark optional}} {{ttb|return}} {{spar|braced-init-list}} {{ttb|;}}
}}
{{sdsc|num=5|1=
{{spar|attr}}{{mark optional}} {{ttb|goto}} {{spar|identifier}} {{ttb|;}}
}}
{{sdsc end}}

@1@ {{rlp|break}} statement;
@2@ {{rlp|continue}} statement;
@3@ {{rlp|return}} statement with an optional expression;
@4@ {{rlp|return}} statement using [[cpp/language/list_initialization|list initialization]];
@5@ {{rlp|goto}} statement.

Note: for all jump statements, transfer out of a loop, out of a block, or back past an initialized variable with automatic storage duration involves the destruction of objects with automatic storage duration that are in scope at the point transferred from but not at the point transferred to. If multiple objects were initialized, the order of destruction is the opposite of the order of initialization.

===Declaration statements===
Declaration statements introduce one or more identifiers into a block.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|block-declaration}} {{ttb|;}}
}}
{{sdsc end}}

@1@ see [[cpp/language/declarations|Declarations]] and [[cpp/language/initialization|Initialization]] for details.

===Try blocks===
Try blocks provide the ability to catch exceptions thrown when executing other statements.

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|try}} {{spar|compound-statement}} {{spar|handler-sequence}}
}}
{{sdsc end}}

@1@ see {{rlp|try_catch|try/catch}} for details.

{{rev begin}}
{{rev|since=tm_ts|
===Atomic and synchronized blocks===
Atomic and synchronized blocks are used to implement [[cpp/language/transactional_memory|transactional memory]].

{{sdsc begin}}
{{sdsc|num=1|notes={{mark since tm ts}}|1=
{{ttb|synchronized}} {{spar|compound-statement}}
}}
{{sdsc|num=2|notes={{mark since tm ts}}|1=
{{ttb|atomic_noexcept}} {{spar|compound-statement}}
}}
{{sdsc|num=3|notes={{mark since tm ts}}|1=
{{ttb|atomic_cancel}} {{spar|compound-statement}}
}}
{{sdsc|num=4|notes={{mark since tm ts}}|1=
{{ttb|atomic_commit}} {{spar|compound-statement}}
}}
{{sdsc end}}
@1@ [[cpp/language/transactional_memory#Synchronized_blocks|synchronized block]], executed in single total order with all synchronized blocks;
@2@ [[cpp/language/transactional_memory#Atomic_blocks|atomic block]] that aborts on exceptions;
@3@ [[cpp/language/transactional_memory#Atomic_blocks|atomic block]] that rolls back on exceptions;
@4@ [[cpp/language/transactional_memory#Atomic_blocks|atomic block]] that commits on exceptions.
}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/statements | Statements}}
{{dsc end}}

[[zh:cpp/language/statements]]</text>
      <sha1>1n8bv48fq7gg87a767ozi1qug71ru91</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/static</title>
    <ns>0</ns>
    <id>5288</id>
    <revision>
      <id>88754</id>
      <parentid>87679</parentid>
      <timestamp>2016-12-09T09:21:09Z</timestamp>
      <contributor>
        <ip>194.96.39.91</ip>
      </contributor>
      <comment>fixed minor typos (&quot;a&quot; -&gt; &quot;an&quot;, +&quot;a&quot;)</comment>
      <text xml:space="preserve" bytes="6389">{{title|static members}}
{{cpp/language/classes/navbar}}

Inside a class definition, the keyword {{ltt|cpp/keywords/static|static}} declares members that are not bound to class instances. 

Outside a class definition, it has a different meaning: see {{rlp|storage duration}}.

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 | {{c|static}} {{spar|data_member}} }}
{{sdsc | num=2 | {{c|static}} {{spar|member_function}} }}
{{sdsc end}}

@1@ Declares a static data member.
@2@ Declares a static member function.

===Explanation===
Static members of a class are not associated with the objects of the class: they are independent objects with [[cpp/language/storage_duration|static storage duration]] or regular functions defined in namespace scope, only once in the program.

The {{c|static}} keyword is only used with the declaration of a static member, inside the class definition, but not with the definition of that static member:

{{source|1=
class X { static int n; }; // declaration (uses 'static')
int X::n = 1;              // definition (does not use 'static')
}}

The declaration inside the class body is not a definition and may declare the member to be of {{rlp|incomplete type}} (other than {{c|void}}), including the type in which the member is declared:

{{source|
struct Foo;
struct S
{
   static int a[]; // declaration, incomplete type
   static Foo x;   // declaration, incomplete type
   static S s;     // declaration, incomplete type (inside its own definition)
};

int S::a[10]; // definition, complete type
struct Foo {};
Foo S::x;     // definition, complete type
S S::s;       // definition, complete type
}}

To refer to a static member {{tt|m}} of class {{tt|T}}, two forms may be used: qualified name {{tt|T::m}} or member access expression {{tt|E.m}} or {{tt|E-&gt;m}}, where {{tt|E}} is an expression that evaluates to {{tt|T}} or {{tt|T*}} respectively. When in the same class scope, the qualification is unnecessary:

{{source|1=
struct X
{
    static void f(); // declaration
    static int n;    // declaration
};

X g() { return X(); } // some function returning X

void f()
{
    X::f();  // X::f is a qualified name of static member function
    g().f(); // g().f is member access expression referring to a static member function
}

int X::n = 7; // definition

void X::f() // definition 
{ 
    n = 1; // X::n is accessible as just n in this scope
} 
}}

Static members obey the {{rlp|access|class member access rules (private, protected, public)}}.

====Static member functions====
Static member functions are not associated with any object. When called, they have no {{c|this}} pointer.

Static member functions cannot be {{c|virtual}}, {{c|const}}, or {{c|volatile}}.

The address of a static member function may be stored in a regular {{rlp|pointer#Pointers to functions|pointer to function}}, but not in a {{rlp|pointer#Pointers to member functions|pointer to member function}}.

====Static data members====
Static data members are not associated with any object. They exist even if no objects of the class have been defined. If the static member is declared thread_local{{mark since c++11}}, there is one such object per thread. Otherwise, there is only one instance of the static data member in the entire program, with static {{rlp|storage duration}}.

Static data members cannot be {{c|mutable}}.

Static data members of a class in namespace scope have {{rlp|storage duration|external linkage}} if the class itself has external linkage (i.e. is not a member of {{rlp|namespace#Unnamed_namespaces|unnamed namespace}}). Local classes (classes defined inside functions) and unnamed classes, including member classes of unnamed classes, cannot have static data members.

{{rev begin}}
{{rev|since=c++17|
A static data member may be declared {{ltt|cpp/language/inline|inline}}. An inline static data member can be defined in the class definition and may specify a default member initializer. It does not need an out-of-class definition:
{{source|1=
struct X
{
    inline static int n = 1;
};
}}
}}
{{rev end}}

====Constant static members====
If a static data member of integral or enumeration type is declared {{c|const}} (and not {{c|volatile}}), it can be initialized with an {{rlp|initialization|initializer}} in which every expression is a {{rlp|constexpr|constant expression}}, right inside the class definition:

{{source|1=
struct X
{
    const static int n = 1;
    const static int m{2}; // since C++11
    const static int k;
};
const int X::k = 3;
}}

{{rev begin}}
{{rev|since=c++11|
If a static data member of {{concept|LiteralType}} is declared {{c|constexpr}}, it must be initialized with an initializer in which every expression is a constant expression, right inside the class definition:

{{source|1=
struct X {
    constexpr static int arr[] = { 1, 2, 3 };        // OK
    constexpr static std::complex&lt;double&gt; n = {1,2}; // OK
    constexpr static int k; // Error: constexpr static requires an initializer
};
}}
}}
{{rev end}}

If a const {{rev inl|since=c++17|non-inline}} static data member {{rev inl|since=c++11|or a  constexpr static data member}} is {{rlp|definition#ODR-use|odr-used}}, a definition at namespace scope is still required, but it cannot have an initializer. {{rev inl|since=c++17|This definition is deprecated for {{tt|constexpr}} data members}}.

{{source|1=
struct X {
    static const int n = 1;
    static constexpr int m = 4;
};
const int *p = &amp;X::n, *q = &amp;X::m; // X::n and X::m are odr-used
const int X::n, X::m;       // … so a definition is necessary (except for X::m in C++17)
}}

{{rev begin}}
{{rev|since=c++17|
If a static data member is declared {{c|constexpr}}, it is implicitly {{c|inline}} and does not need to be redeclared at namespace scope. This redeclaration without an initializer (formerly required as shown above) is still permitted, but is deprecated.
}}
{{rev end}}

===References===
{{ref std c++11}}
{{ref std | section=9.4 | title=Static members | id=class.static}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=9.4 | title=Static members | id=class.static}}
{{ref std end}}

===See also===
* [[cpp/language/storage_duration|{{c|static}} storage specifier]]

[[de:cpp/language/static]]
[[es:cpp/language/static]]
[[fr:cpp/language/static]]
[[it:cpp/language/static]]
[[ja:cpp/language/static]]
[[pt:cpp/language/static]]
[[ru:cpp/language/static]]
[[zh:cpp/language/static]]</text>
      <sha1>bqzno3uyvgnzyos121c4w6a9pyr02r6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/static assert</title>
    <ns>0</ns>
    <id>6480</id>
    <revision>
      <id>85344</id>
      <parentid>85214</parentid>
      <timestamp>2016-04-20T19:52:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>namespace scope is also a scope where block-declarations appear (grammatically)</comment>
      <text xml:space="preserve" bytes="3289">{{title|Static Assertion}}
{{cpp/language/declarations/navbar}}
Performs compile-time assertion checking
===Syntax===
{{sdsc begin}}
{{sdsc|notes={{mark since c++11}}|{{ttb|static_assert}} {{ttb|(}} {{spar|bool_constexpr}} {{ttb|,}} {{spar|message}} {{ttb|)}} }} 
{{sdsc|notes={{mark since c++17}}|{{ttb|static_assert}} {{ttb|(}} {{spar|bool_constexpr}}  {{ttb|)}} }} 
{{sdsc end}}
===Explanation===
{{par begin}}
{{par | {{spar|bool_constexpr}} | a {{rlp|constant expression#Converted constant expression|contextually converted constant expression of type {{c|bool}}}}}}
{{par | {{spar|message}} | {{rev inl|since=c++17|optional }}string literal that will appear as compiler error if {{spar|bool_constexpr}} is false}}
{{par end}}

A static assert declaration may appear at namespace and block scope (as a {{rlp|declarations|block declaration}}) and inside a class body (as a {{rlp|class|member declaration}})

If {{spar|bool_constexpr}} returns {{c|true}}, this declaration has no effect. Otherwise a compile-time error is issued, and the text of {{spar|message}}, if any, is included in the diagnostic message. 

{{rev begin}}
{{rev | since=c++17 |
{{spar|message}} can be omitted.
}}
{{rev end}}

===Note===
Since {{spar|message}} has to be a string literal, it cannot contain dynamic information or even a {{rlp|constant expression}} that is not a string literal itself. In particular, it cannot contain the {{rlp|name}} of the {{rlp|template parameters|template type argument}}.
===Defect reports===
{{dr list begin}}
{{dr list item | wg=cwg | dr=2039 | std=C++11 | before=only the expression before conversion is required to be constant| after= the conversion must also be valid in a constant expression}}
{{dr list end}}

===Example===
{{example|code=
#include &lt;type_traits&gt;

template &lt;class T&gt;
void swap(T&amp; a, T&amp; b)
{
    static_assert(std::is_copy_constructible&lt;T&gt;::value,
                  &quot;Swap requires copying&quot;);
    static_assert(std::is_nothrow_move_constructible&lt;T&gt;::value
               &amp;&amp; std::is_nothrow_move_assignable&lt;T&gt;::value,
                  &quot;Swap may throw&quot;);
    auto c = b;
    b = a;
    a = c;
}

template &lt;class T&gt;
struct data_structure
{
    static_assert(std::is_default_constructible&lt;T&gt;::value,
                  &quot;Data Structure requires default-constructible elements&quot;);
};

struct no_copy
{
    no_copy ( const no_copy&amp; ) = delete;
    no_copy () = default;
};

struct no_default
{
    no_default () = delete;
};

int main()
{
    int a, b;
    swap(a, b);

    no_copy nc_a, nc_b;
    swap(nc_a, nc_b); // 1

    data_structure&lt;int&gt; ds_ok;
    data_structure&lt;no_default&gt; ds_error; // 2
}
|output=
1: error: static assertion failed: Swap requires copying
2: error: static assertion failed: Data Structure requires default-constructible elements
|p=true
}}

===See also===
* [[cpp/preprocessor/error|#error]]
* [[cpp/error/assert|assert]]
* [[cpp/types#Type_traits_.28since_C.2B.2B11.29|type traits]]
{{dsc begin}}
{{dsc see c | c/error/static_assert |static_assert}}
{{dsc end}}

[[de:cpp/language/static assert]]
[[es:cpp/language/static assert]]
[[fr:cpp/language/static assert]]
[[it:cpp/language/static assert]]
[[ja:cpp/language/static assert]]
[[pt:cpp/language/static assert]]
[[ru:cpp/language/static assert]]
[[zh:cpp/language/static assert]]</text>
      <sha1>rx5p7wu3ch1u2iztctqn3bh0coy0uuo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/static cast</title>
    <ns>0</ns>
    <id>2740</id>
    <revision>
      <id>87849</id>
      <parentid>87846</parentid>
      <timestamp>2016-10-06T14:51:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-endl, match output to example</comment>
      <text xml:space="preserve" bytes="7676">{{title|static_cast conversion}}
{{cpp/language/expressions/navbar}}
Converts between types using a combination of implicit and user-defined conversions.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|static_cast &amp;lt;}} {{spar|new_type}} {{ttb|&amp;gt; (}} {{spar|expression}} {{ttb|)}} }}
{{sdsc end}}

Returns a value of type {{tt|new_type}}.

===Explanation===

Only the following conversions can be done with {{c|static_cast}}, except when such conversions would cast away ''constness'' or ''volatility''.

@1@ If there is an {{rlp|implicit cast|implicit conversion sequence}} from {{spar|expression}} to {{spar|new_type}}, or if overload resolution for a {{rlp|direct initialization}} of an object or reference of type {{spar|new_type}} from {{spar|expression}} would find at least one viable function, then {{c|static_cast&lt;new_type&gt;(expression)}} returns the imaginary variable {{tt|Temp}} initialized as if by {{c|new_type Temp(expression);}}, which may involve {{rlp|implicit cast|implicit conversions}}, a call to the {{rlp|constructor}} of {{spar|new_type}} or a call to a {{rlp|cast operator|user-defined conversion operator}}. {{rev inl|since=c++17|For non-reference {{spar|new_type}}, the result object of the static_cast prvalue expression is what's direct-initialized}}
@2@ If {{spar|new_type}} is a pointer or reference to some class {{tt|D}} and the type of {{spar|expression}} is a pointer or reference to its non-virtual base {{tt|B}}, {{tt|static_cast}} performs a ''downcast''. This downcast is ill-formed if {{tt|B}} is ambiguous, inaccessible, or virtual base (or a base of a virtual base) of {{tt|D}}. Such {{tt|static_cast}} makes no runtime checks to ensure that the object's runtime type is actually {{tt|D}}, and may only be used safely if this precondition is guaranteed by other means, such as when implementing [[enwiki:Curiously recurring template pattern#Static polymorphism|static polymorphism]]. Safe downcast may be done with {{ltt|cpp/language/dynamic_cast}}.

{{rev begin}}
{{rev|since=c++11|
@3@ If {{spar|new_type}} is an rvalue reference type, {{tt|static_cast}} converts the value of {{rev inl|until=c++17|glvalue, class prvalue, or array prvalue}}{{rev inl|since=c++17|any lvalue}} {{spar|expression}} to ''xvalue'' referring to the same object as the expression, or to its base sub-object (depending on {{spar|new_type}}). If the target type is an inaccessible or ambiguous base of the type of the expression, the program is ill-formed. If the expression is a {{rlp|bit field}} lvalue, it is first converted to prvalue of the underlying type. This type of {{tt|static_cast}} is used to implement move semantics in {{lc|std::move}}.
}}
{{rev end}}
@4@ If {{spar|new_type}} is the type {{c|void}} (possibly cv-qualified), {{tt|static_cast}} discards the value of {{spar|expression}} after evaluating it.
@5@ If a {{rlp|implicit_cast |standard conversion}} sequence from {{spar|new_type}} to the type of {{spar|expression}} exists, that does not include lvalue-to-rvalue, array-to-pointer, function-to-pointer, null pointer, null member pointer, {{rev inl|since=c++17|function pointer,}} or boolean conversion, then {{tt|static_cast}} can perform the inverse of that implicit conversion.
@6@ If conversion of {{spar|expression}} to {{spar|new_type}} involves lvalue-to-rvalue, array-to-pointer, or function-to-pointer conversion, it can be performed explicitly by {{tt|static_cast}}.
@7@ {{rlp|enum|Scoped enumeration}} type can be converted to an integer or floating-point type. When the target type is ''cv'' {{c|bool}}, the result is {{c|false}} if the original value is zero and {{c|true}} for all other values. For the remaining integral types, the result is the value of the enum if it can be represented by the target type and unspecified otherwise. {{mark since c++11}}
@8@ Integer, floating-point, or enumeration type can be converted to any complete {{rlp|enum|enumeration type}}. The result is {{rev inl|until=c++17|unspecified}}{{rev inl|since=c++17|undefined behavior}} if the value of {{spar|expression}}, converted to the enumeration's underlying type, is out of range (if the underlying type is fixed, the range is the range of the type. If the underlying type is not fixed, the range is all values possible for the smallest bit field large enough to hold all enumerators of the target enumeration)
@9@ A pointer to member of some class {{tt|D}} can be upcast to a pointer to member of its unambiguous, accessible base class {{tt|B}}. This {{tt|static_cast}} makes no checks to ensure the member actually exists in the runtime type of the pointed-to object.
@10@ A prvalue of type pointer to {{c|void}} (possibly cv-qualified) can be converted to pointer to any type. If the value of the original pointer satisfies the alignment requirement of the target type, then the resulting pointer value is unchanged, otherwise it is unspecified. Conversion of any pointer to pointer to void and back to pointer to the original (or more cv-qualified) type preserves its original value.

{{cpp/language/cast_return}}

===Notes===
{{c|static_cast}} may also be used to disambiguate function overloads by performing a function-to-pointer conversion to specific type, as in {{c|std::transform(s.begin(), s.end(), s.begin(), static_cast&lt;int(*)(int)&gt;(std::toupper));}}

===Keywords===
{{ltt|cpp/keyword/static_cast}}

===Example===
{{example
 |
 | code=
#include &lt;vector&gt;
#include &lt;iostream&gt;

struct B {
    int m = 0;
    void hello() const {
        std::cout &lt;&lt; &quot;Hello world, this is B!\n&quot;;
    }
};
struct D : B {
    void hello() const {
        std::cout &lt;&lt; &quot;Hello world, this is D!\n&quot;;
    }
};

enum class E { ONE = 1, TWO, THREE };
enum EU { ONE = 1, TWO, THREE };

int main()
{
    // 1: initializing conversion
    int n = static_cast&lt;int&gt;(3.14); 
    std::cout &lt;&lt; &quot;n = &quot; &lt;&lt; n &lt;&lt; '\n';
    std::vector&lt;int&gt; v = static_cast&lt;std::vector&lt;int&gt;&gt;(10);
    std::cout &lt;&lt; &quot;v.size() = &quot; &lt;&lt; v.size() &lt;&lt; '\n';

    // 2: static downcast
    D d;
    B&amp; br = d; // upcast via implicit conversion
    br.hello();
    D&amp; another_d = static_cast&lt;D&amp;&gt;(br); // downcast
    another_d.hello();

    // 3: lvalue to xvalue
    std::vector&lt;int&gt; v2 = static_cast&lt;std::vector&lt;int&gt;&amp;&amp;&gt;(v);
    std::cout &lt;&lt; &quot;after move, v.size() = &quot; &lt;&lt; v.size() &lt;&lt; '\n';

    // 4: discarded-value expression
    static_cast&lt;void&gt;(v2.size());

    // 5. inverse of implicit conversion
    void* nv = &amp;n;
    int* ni = static_cast&lt;int*&gt;(nv);
    std::cout &lt;&lt; &quot;*ni = &quot; &lt;&lt; *ni &lt;&lt; '\n';

    // 6. array-to-pointer followed by upcast
    D a[10];
    B* dp = static_cast&lt;B*&gt;(a);

    // 7. scoped enum to int or float
    E e = E::ONE;
    int one = static_cast&lt;int&gt;(e);
    std::cout &lt;&lt; one &lt;&lt; '\n';

    // 8. int to enum, enum to another enum
    E e2 = static_cast&lt;E&gt;(one);
    EU eu = static_cast&lt;EU&gt;(e2);

    // 9. pointer to member upcast
    int D::*pm = &amp;D::m;
    std::cout &lt;&lt; br.*static_cast&lt;int B::*&gt;(pm) &lt;&lt; '\n';

    // 10. void* to any type
    void* voidp = &amp;e;
    std::vector&lt;int&gt;* p = static_cast&lt;std::vector&lt;int&gt;*&gt;(voidp);
}
 | output=
n = 3
v.size() = 10
Hello world, this is B!
Hello world, this is D!
after move, v.size() = 0
*ni = 3
1
0
}}

===See also===
* [[cpp/language/const_cast|const_cast]]
* [[cpp/language/dynamic_cast|dynamic_cast]]
* [[cpp/language/reinterpret_cast|reinterpret_cast]]
* [[cpp/language/explicit_cast|explicit cast]]
* [[cpp/language/implicit_cast|implicit conversions]]

[[de:cpp/language/static cast]]
[[es:cpp/language/static cast]]
[[fr:cpp/language/static cast]]
[[it:cpp/language/static cast]]
[[ja:cpp/language/static cast]]
[[pt:cpp/language/static cast]]
[[ru:cpp/language/static cast]]
[[zh:cpp/language/static cast]]</text>
      <sha1>7vq8pvo3xclbbjlr59kporfkn8pirap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/storage duration</title>
    <ns>0</ns>
    <id>712</id>
    <revision>
      <id>91138</id>
      <parentid>91136</parentid>
      <timestamp>2017-03-22T00:28:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>good point, but let's link to inline and reuse the wording from there. also, not every function template is inline.</comment>
      <text xml:space="preserve" bytes="11983">{{title|Storage class specifiers}}
{{cpp/language/declarations/navbar}}

The storage class specifiers are a part of the {{spar|decl-specifier-seq}} of a name's {{rlp|declarations|declaration syntax}}. Together with the {{rlp|scope|scope}} of the name, they control two independent properties of the name: Its ''storage duration'' and its ''linkage''. 

{{rev begin}}
{{rev | until=c++11 |
:*{{ttb|auto}} - ''automatic'' storage duration.
}}
{{rev | until=c++17 |
:*{{ttb|register}} - ''automatic'' storage duration. Also hints to the compiler to place the object in the processor's register. {{mark deprecated}}
}}
{{rev end}}
:*{{ttb|static}} - ''static'' or ''thread'' storage duration and ''internal'' linkage
:*{{ttb|extern}} - ''static'' or ''thread'' storage duration and ''external'' linkage
{{rev begin}}
{{rev | since=c++11 |
:*{{ttb|thread_local}} - ''thread'' storage duration.
}}
{{rev end}}


Only one storage class specifier may appear in a declaration {{rev inl|since=c++11|except that {{tt|thread_local}} may be combined with {{tt|static}} or with {{tt|extern}} }}

===Explanation===
{{rev begin}}
{{rev | until=c++11 |
@1@ The {{tt|auto}} specifier was only allowed for objects declared at block scope or in function parameter lists. It indicated automatic storage duration, which is the default for these kinds of declarations. The meaning of this keyword was changed in C++11.
}}
{{rev | until=c++17 |
@2@ The {{tt|register}} specifier is only allowed for objects declared at block scope and in function parameter lists. It indicates automatic storage duration, which is the default for these kinds of declarations. Additionally, the presence of this keyword may be used as a hint for the optimizer to store the value of this variable in a CPU register. This keyword was deprecated in C++11.
}}
{{rev end}}
@3@ The {{tt|static}} specifier is only allowed in the declarations of objects (except in function parameter lists), declarations of functions (except at block scope), and declarations of anonymous unions. When used in a declaration of a class member, it declares a {{rlp|static|static member}}. When used in a declaration of an object, it specifies static storage duration (except if accompanied by {{tt|thread_local}}). When used in a declaration at namespace scope, it specifies internal linkage.
@4@ The {{tt|extern}} specifier is only allowed in the declarations of variables and functions (except class members or function parameters). It specifies external linkage, and does not technically affect storage duration, but it cannot be used in a definition of an automatic storage duration object, so all {{tt|extern}} objects have static or thread durations. In addition, a variable declaration that uses {{tt|extern}} and has no initializer is not a {{rlp|definition}}.

{{rev begin}}
{{rev | since=c++11 |
@5@ The {{tt|thread_local}} keyword is only allowed for objects declared at namespace scope, objects declared at block scope, and static data members. It indicates that the object has thread storage duration. It can be combined with {{tt|static}} or {{tt|extern}} to specify internal or external linkage (except for static data members which always have external linkage), respectively, but that additional {{tt|static}} doesn't affect the storage duration.
}}
{{rev end}}

====Storage duration====

All {{rlp|object|objects}} in a program have one of the following storage durations:

:*'''''automatic''''' storage duration. The object is allocated at the beginning of the enclosing code block and deallocated at the end. All local objects have this storage duration, except those declared {{tt|static}}, {{tt|extern}} or {{tt|thread_local}}.

:*'''''static''''' storage duration. The storage for the object is allocated when the program begins and deallocated when the program ends. Only one instance of the object exists. All objects declared at namespace scope (including global namespace) have this storage duration, plus those declared with {{tt|static}} or {{tt|extern}}.

{{rev begin}}
{{rev | since=c++11 |
:*'''''thread''''' storage duration. The object is allocated when the thread begins and deallocated when the thread ends. Each thread has its own instance of the object. Only objects declared {{tt|thread_local}} have this storage duration.  {{tt|thread_local}} can appear together with {{tt|static}} or {{tt|extern}} to adjust linkage.
}}
{{rev end}}

:*'''''dynamic''''' storage duration. The object is allocated and deallocated per request by using [[cpp/memory|dynamic memory allocation]] functions.

====Linkage====

A name that denotes object, reference, function, type, template, namespace, or value, may have ''linkage''. If a name has linkage, it refers to the same entity as the same name introduced by a declaration in another scope. If a variable, function, or another entity with the same name is declared in several scopes, but does not have sufficient linkage, then several instances of the entity are generated.

The following linkages are recognized:

:*'''''no linkage'''''. The name can be referred to only from the scope it is in.
:: Any of the following names declared at block scope have no linkage:
::* Variables that aren't explicitly declared {{tt|extern}} (regardless of the {{tt|static}} modifier)
::* {{rlp|class#Local_classes|Local classes}} and their member functions
::* Other names declared at block scope such as typedefs, enumerations, and enumerators

:*'''''internal linkage'''''. The name can be referred to from all scopes in the current translation unit.
:: Any of the following names declared at namespace scope have internal linkage
::* variables, functions, or function templates declared {{tt|static}}
::* non-volatile {{rev inl|since=c++17|non-inline}} {{rlp|cv|const-qualified}} variables (including {{rlp|constexpr}}) that aren't declared {{tt|extern}} and aren't previously declared to have external linkage.
::* data members of {{rlp|union|anonymous unions}}
{{rev begin}}
{{rev|since=c++11|
:: In addition, all names declared in {{rlp|namespace|unnamed namespace}} or a namespace within an unnamed namespace, even ones explicitly declared {{tt|extern}}, have internal linkage.
}}{{rev end}}

:*'''''external linkage'''''. The name can be referred to from the scopes in the other translation units. Variables and functions with external linkage also have {{rlp|language_linkage|language linkage}}, which makes it possible to link translation units written in different programming languages.
:: Any of the following names declared at namespace scope have external linkage {{rev inl|since=c++11|unless the namespace is unnamed or is contained within an unnamed namespace}}
::* variables and functions not listed above (that is, functions not declared {{tt|static}}, namespace-scope non-const variables not declared {{tt|static}}, and any variables declared {{tt|extern}})
::* enumerations and enumerators
::* names of classes, their member functions, static data members (const or not), nested classes and enumerations, and functions first introduced with {{rlp|friend}} declarations inside class bodies
::* names of all templates not listed above (that is, not function templates declared {{tt|static}})
:: Any of the following names first declared at block scope have external linkage
::* names of variables declared {{tt|extern}}
::* names of functions

===Static local variables===
Variables declared at block scope with the specifier {{tt|static}} have static storage duration but are initialized the first time control passes through their declaration (unless their initialization is {{rlp|zero_initialization|zero-}} or {{rlp|constant_initialization|constant-initialization}}, which can be performed before the block is first entered). On all further calls, the declaration is skipped.

If the initialization {{rlp|throw|throws an exception}}, the variable is not considered to be initialized, and initialization will be attempted again the next time control passes through the declaration.

If the initialization recursively enters the block in which the variable is being initialized, the behavior is undefined.

{{rev begin}}
{{rev |since=c++11|
If multiple threads attempt to initialize the same static local variable concurrently, the initialization occurs exactly once (similar behavior can be obtained for arbitrary functions with {{lc|std::call_once}}).

Note: usual implementations of this feature use variants of the double-checked locking pattern, which reduces runtime overhead for already-initialized local statics to a single non-atomic boolean comparison.}}
{{rev end}}

The destructor for a block-scope static variable [[cpp/utility/program/exit|is called at program exit]], but only if the initialization took place successfully.

Function-local static objects in all definitions of the same {{rlp|inline|inline function}} (which may be implicitly inline) all refer to the same object defined in one translation unit 

===Notes===
Names at the top-level namespace scope (file scope in C) that are {{tt|const}} and not {{tt|extern}} have external linkage in C, but internal linkage in C++.

{{rev begin}}
{{rev|until=c++17|
In C, the address of a {{tt|register}} variable cannot be taken, but in C++, a variable declared {{tt|register}} is semantically indistinguishable from a variable declared without any storage class specifiers
}}
{{rev|since=c++17|
In C++, unlike C, variables cannot be declared {{tt|register}}.
}}
{{rev end}}

Names of {{tt|thread_local}} variables with internal or external linkage referred from different scopes may refer to the same or to different instances depending on whether the code is executing in the same or in different threads.

The {{tt|extern}} keyword can also be used to specify {{rlp|language_linkage|language linkage}} and {{rlp|class_template|explicit template instantiation declarations}}, but it's not a storage class specifier in those cases (except when a declaration is directly contained in a language linkage specification, in which case the declaration is treated as if it contains the {{tt|extern}} specifier).

{{rlp|cv|The keyword {{tt|mutable}}}} is a storage class specifier in the C++ language grammar, although it doesn't affect storage duration or linkage.

{{todo|the rules about re-declaring names in the same TU}}

Storage class specifiers, except for {{tt|thread_local}}, are not allowed on {{rlp|template specialization|explicit specializations}} and {{rlp|class_template#Explicit_instantiation|explicit instantiations}}:
{{source|1=
template &lt;class T&gt; struct S {
    thread_local static int tlm;
};
template &lt;&gt; thread_local int S&lt;float&gt;::tlm = 0; // &quot;static&quot; does not appear here
}}

===Keywords===

{{ltt|cpp/keyword/auto}},
{{ltt|cpp/keyword/register}},
{{ltt|cpp/keyword/static}},
{{ltt|cpp/keyword/extern}},
{{ltt|cpp/keyword/thread_local}}

===Example===

{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;thread&gt;
#include &lt;mutex&gt;

thread_local unsigned int rage = 1; 
std::mutex cout_mutex;

void increase_rage(const std::string&amp; thread_name)
{
    ++rage; // modifying outside a lock is okay; this is a thread-local variable
    std::lock_guard&lt;std::mutex&gt; lock(cout_mutex);
    std::cout &lt;&lt; &quot;Rage counter for &quot; &lt;&lt; thread_name &lt;&lt; &quot;: &quot; &lt;&lt; rage &lt;&lt; '\n';
}

int main()
{
    std::thread a(increase_rage, &quot;a&quot;), b(increase_rage, &quot;b&quot;);

    {
        std::lock_guard&lt;std::mutex&gt; lock(cout_mutex);
        std::cout &lt;&lt; &quot;Rage counter for main: &quot; &lt;&lt; rage &lt;&lt; '\n';
    }

    a.join();
    b.join();
}
 | output=
Rage counter for a: 2
Rage counter for main: 1
Rage counter for b: 2
}}

===See Also===
{{dsc begin}}
{{dsc see c | c/language/storage_duration}}
{{dsc end}}

[[de:cpp/language/storage duration]]
[[es:cpp/language/storage duration]]
[[fr:cpp/language/storage duration]]
[[it:cpp/language/storage duration]]
[[ja:cpp/language/storage duration]]
[[pt:cpp/language/storage duration]]
[[ru:cpp/language/storage duration]]
[[zh:cpp/language/storage duration]]</text>
      <sha1>5lb1d6bdayrmxkvbp2gwruv91h2gacb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/string literal</title>
    <ns>0</ns>
    <id>5078</id>
    <revision>
      <id>88593</id>
      <parentid>87913</parentid>
      <timestamp>2016-11-29T16:34:20Z</timestamp>
      <contributor>
        <username>JayBazuzi</username>
        <id>6116</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6411">{{title|string literal}}
{{cpp/language/expressions/navbar}}
===Syntax===
{{sdsc begin}}
{{sdsc | num = 1| {{ttb|&quot;}} ({{spar|unescaped_character}}{{!}}{{spar|escaped_character}})* {{ttb|&quot;}} }}
{{sdsc | num = 2| {{ttb|L}} {{ttb|&quot;}} ({{spar|unescaped_character}}{{!}}{{spar|escaped_character}})* {{ttb|&quot;}} }}
{{sdsc | num = 3| {{ttb|u8}} {{ttb|&quot;}} ({{spar|unescaped_character}}{{!}}{{spar|escaped_character}})* {{ttb|&quot;}} | notes={{mark since c++11}} }}
{{sdsc | num = 4| {{ttb|u}} {{ttb|&quot;}} ({{spar|unescaped_character}}{{!}}{{spar|escaped_character}})* {{ttb|&quot;}} | notes={{mark since c++11}} }}
{{sdsc | num = 5| {{ttb|U}} {{ttb|&quot;}} ({{spar|unescaped_character}}{{!}}{{spar|escaped_character}})* {{ttb|&quot;}} | notes={{mark since c++11}} }}
{{sdsc | num = 6| notes={{mark since c++11}} |
{{spar|prefix}}{{mark optional}} {{ttb|R}} {{ttb|&quot;}}{{spar|delimiter}}{{ttb|(}} {{spar|raw_characters}} {{ttb|)}}{{spar|delimiter}}{{ttb|&quot;}} }}
{{sdsc end}}

===Explanation===
{{par begin}}
{{par | {{spar|unescaped_character}} | Any valid character except the double-quote {{c|&quot;}}, backslash {{c|\}}, or new-line character}}
{{par | {{spar|escaped_character}} | See [[cpp/language/escape|escape sequences]] }}
{{par | {{spar|prefix}} |One of {{ttb|L}}, {{ttb|u8}}, {{ttb|u}}, {{ttb|U}} }}
{{par | {{spar|delimiter}} | A character sequence made of any source character but parentheses, backslash and [[cpp/string/byte/isspace|spaces]] (can be empty, and at most 16 characters long) }}
{{par | {{spar|raw_characters}} | Any character sequence, except that it must not contain the closing sequence {{ttb|)}}{{spar|delimiter}}{{ttb|&quot;}} }}
{{par end}}


@1@ Narrow multibyte string literal. The type of an unprefixed string literal is {{c|const char[]}}.
@2@ Wide string literal. The type of a {{c|L&quot;...&quot;}} string literal is {{c|const wchar_t[]}}.
@3@ UTF-8 encoded string literal. The type of a {{c|u8&quot;...&quot;}} string literal is {{c|const char[]}}.
@4@ UTF-16 encoded string literal. The type of a {{c|u&quot;...&quot;}} string literal is {{c|const char16_t[]}}.
@5@ UTF-32 encoded string literal. The type of a {{c|U&quot;...&quot;}} string literal is {{c|const char32_t[]}}.
@6@ Raw string literal. Used to avoid escaping of any character, anything between the delimiters becomes part of the string. {{spar|prefix}}, if present, has the same meaning as described above.

===Notes===
The null character ({{c|'\0'}}, {{c|L'\0'}}, {{c|char16_t()}}, etc) is always appended to the string literal: thus, a string literal {{c|&quot;Hello&quot;}} is a {{c|const char[6]}} holding the characters {{c|'H'}}, {{c|'e'}}, {{c|'l'}}, {{c|'l'}}, {{c|'o'}}, and {{c|'\0'}}.

String literals placed side-by-side are concatenated at [[cpp/language/translation_phases|translation phase 6]] (after the preprocessor).  That is, {{c|&quot;Hello,&quot;  &quot; world!&quot;}} yields the (single) string {{c|&quot;Hello, world!&quot;}}. If the two strings have the same encoding prefix (or neither has one), the resulting string will have the same encoding prefix (or no prefix).
{{rev begin}}
{{rev|since=c++11| If one of the strings has an encoding prefix and the other doesn't, the one that doesn't will be considered to have the same encoding prefix as the other.
{{source|1=
L&quot;Δx = %&quot; PRId16 // at phase 4, PRId16 expands to &quot;d&quot;
                 // at phase 6, L&quot;Δx = %&quot; and &quot;d&quot; form L&quot;Δx = %d&quot;
}}
If a UTF-8 string literal and a wide string literal are side by side, the program is ill-formed.
}}
{{rev end}}
Any other combination of encoding prefixes may or may not be supported by the implementation. The result of such a concatenation is implementation-defined.

String literals have {{rlp|storage duration|static storage duration}}, and thus exist in memory for the life of the program.

String literals can be used to [[cpp/language/aggregate_initialization|initialize character arrays]]. If an array is initialized like {{c|1=char str[] = &quot;foo&quot;;}}, {{c|str}} will contain a copy of the string {{c|&quot;foo&quot;}}.

The compiler is allowed, ''but not required'', to combine storage for equal or overlapping string literals. That means that identical string literals may or may not compare equal when compared by pointer.
{{source|1=
bool b = &quot;bar&quot; == 3+&quot;foobar&quot; // could be true or false, implementation-defined
}}

Attempting to modify a string literal results in ''undefined behavior'': they may be stored in read-only storage (such as {{tt|.rodata}}) or combined with other string literals:
{{source|1=
const char* pc = &quot;Hello&quot;;
char* p = const_cast&lt;char*&gt;(pc);
p[0] = 'M'; // undefined behavior
}}

In C, string literals are of type {{c|char[]}}, and can be assigned directly to a (non-const) {{c|char*}}. C++03 allowed it as well (but deprecated it, as literals are {{c|const}} in C++). C++11 no longer allows such assignments without a cast.

A string literal is not necessarily a C string: if a string literal has embedded null characters, it represents an array which contains more than one string.
{{source|1=
const char* p = &quot;abc\0def&quot;; // std::strlen(p) == 3, but the array has size 8
}}

If a valid hex digit follows a hex escape in a string literal, it would fail to compile as an invalid escape sequence. String concatenation can be used as a workaround:
{{source|1=
//const char* p = &quot;\xfff&quot;; // error: hex escape sequence out of range
const char* p = &quot;\xff&quot;&quot;f&quot;; // OK: the literal is const char[3] holding {'\xff','f','\0'}
}}

The encoding of narrow multibyte string literals {{v|1}} and wide string literals {{v|2}} is implementation-defined. For example, gcc selects them with the [https://gcc.gnu.org/onlinedocs/cpp/Invocation.html commandline options] {{c|-fexec-charset}} and {{c|-fwide-exec-charset}}.

===Example===
{{example| code=
#include &lt;iostream&gt;

char array1[] = &quot;Foo&quot; &quot;bar&quot;;
// same as
char array2[] = { 'F', 'o', 'o', 'b', 'a', 'r', '\0' };

const char* s1 = R&quot;foo(
Hello
World
)foo&quot;;
//same as
const char* s2 = &quot;\nHello\nWorld\n&quot;;

int main()
{
    std::cout &lt;&lt; array1 &lt;&lt; '\n';
    std::cout &lt;&lt; array2 &lt;&lt; '\n';

    std::cout &lt;&lt; s1;
    std::cout &lt;&lt; s2;
}
| output= 
Foobar
Foobar

Hello
World

Hello
World
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/string literal}}
{{dsc end}}

[[de:cpp/language/string literal]]
[[es:cpp/language/string literal]]
[[fr:cpp/language/string literal]]
[[it:cpp/language/string literal]]
[[ja:cpp/language/string literal]]
[[pt:cpp/language/string literal]]
[[ru:cpp/language/string literal]]
[[zh:cpp/language/string literal]]</text>
      <sha1>1rjw7yquysgvun497p4ksp0046am355</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/switch</title>
    <ns>0</ns>
    <id>713</id>
    <revision>
      <id>90596</id>
      <parentid>86903</parentid>
      <timestamp>2017-03-06T15:44:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0615R0 renamed decomposition declaration back to structured binding</comment>
      <text xml:space="preserve" bytes="6996">{{title|switch statement}}
{{cpp/language/statements/navbar}}
Transfers control to one of the several statements, depending on the value of a condition.

===Syntax===
{{rev begin}}
{{rev|until=c++17|
{{sdsc begin}}
{{sdsc|1=
{{spar|attr}}{{mark optional}} {{ttb|switch}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement}} 
}}
{{sdsc end}}
}}
{{rev|since=c++17|
{{sdsc begin}}
{{sdsc|1=
{{spar|attr}}{{mark optional}} {{ttb|switch}} {{ttb|(}} {{spar|init-statement}}{{mark optional}} {{spar|condition}} {{ttb|)}} {{spar|statement}} 
}}
{{sdsc end}}
}}
{{rev end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | any number of {{rlp|attributes}} }}
{{par | {{spar|condition}} | any {{rlp|expressions|expression}} of integral or enumeration type, or of a class type {{rlp|implicit cast|contextually implicitly convertible}} to an integral or enumeration type, or a {{rlp|declarations|declaration}} of a single non-array variable of such type with a brace-or-equals {{rlp|initialization|initializer}}.}}
{{par | {{spar|init-statement}}{{mark c++17}} | either 
* an {{rlp|statements|expression statement}} (which may be a ''null statement'' &quot;{{ttb|;}}&quot;)
* a  {{rlp|declarations|simple declaration}}, typically a declaration of a variable with initializer, but it may declare arbitrary many variables or structured bindings 
:Note that any {{spar|init-statement}} must end with a semicolon {{ttb|;}}, which is why it is often described informally as an expression or a declaration followed by a semicolon.}}
{{par | {{spar|statement}} | any {{rlp|statements|statement}} (typically a compound statement). {{ttb|case:}} and {{ttb|default:}} labels are permitted in {{spar|statement}} and {{c|break;}} statement has special meaning.}}
{{par end}}

{{sdsc begin}}
{{sdsc|num=1|1=
{{spar|attr}}{{mark optional}} {{ttb|case}} {{spar|constant_expression}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc|num=2|1=
{{spar|attr}}{{mark optional}} {{ttb|default}} {{ttb|:}} {{spar|statement}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|constant_expression}} | a constant expression of the same type as the type of {{spar|condition}} after conversions and {{rlp|implicit_cast|integral promotions}} }}
{{par end}}

===Explanation===
The body of a switch statement may have an arbitrary number of {{tt|case:}} labels, as long as the values of all {{spar|constant_expressions}} are unique (after conversions/promotions). At most one {{tt|default:}} label may be present (although nested switch statements may use their own {{tt|default:}} labels or have {{tt|case:}} labels whose constants are identical to the ones used in the enclosing switch)

If {{spar|condition}} evaluates to the value that is equal to the value of one of {{spar|constant_expression}}s, then control is transferred to the statement that is labeled with that {{spar|constant_expression}}.

If {{spar|condition}} evaluates to the value that doesn't match any of the {{tt|case:}} labels, and the {{tt|default:}} label is present, control is transferred to the statement labeled with the {{tt|default:}} label.

The {{rlp|break}} statement, when encountered in {{spar|statement}} exits the switch statement:

{{source|switch(1) {
    case 1 : cout &lt;&lt; '1'; // prints &quot;1&quot;,
    case 2 : cout &lt;&lt; '2'; // then prints &quot;2&quot;
}
}}
{{source|switch(1) {
    case 1 : cout &lt;&lt; '1'; // prints &quot;1&quot;
             break;       // and exits the switch
    case 2 : cout &lt;&lt; '2';
             break;
}
}}

{{rev begin}}
{{rev|since=c++17|
Compilers may issue warnings on fallthrough (reaching the next case label without a break) unless the attribute {{rlp|attributes|{{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;fallthrough&lt;nowiki&gt;]]&lt;/nowiki&gt;}}}} appears immediately before the case label to indicate that the fallthrough is intentional.

If {{spar|init-statement}} is used, the switch statement is equivalent to

{{sdsc begin}}
{{sdsc | 
{{ttb|{}}&lt;br&gt;
:{{spar|init_statement}} &lt;br&gt;
:{{ttb|switch}} {{ttb|(}} {{spar|condition}} {{ttb|)}} {{spar|statement}} &lt;br&gt;
{{ttb|} }}
}}
{{sdsc end}}
Except that names declared by the {{spar|init-statement}} (if {{spar|init-statement}} is a declaration) and names declared by {{spar|condition}} (if condition is a declaration) are in the same scope, which is also the scope of {{spar|statement}}.
}}{{rev end}}

Because transfer of control is {{rlp|goto|not permitted to enter the scope}} of a variable, if a declaration statement is encountered inside the {{spar|statement}}, it has to be scoped in its own compound statement:

{{source|1=switch(1) {
    case 1: int x = 0; // initialization
            std::cout &lt;&lt; x &lt;&lt; '\n';
            break;
    default: // compilation error: jump to default: would enter the scope of 'x'
             // without initializing it
             std::cout &lt;&lt; &quot;default\n&quot;;
             break;
}
}}

{{source|1=switch(1) {
    case 1: {  int x = 0;
               std::cout &lt;&lt; x &lt;&lt; '\n';
               break;
            } // scope of 'x' ends here
    default: std::cout &lt;&lt; &quot;default\n&quot;; // no error
             break;
}
}}

===Keywords===

{{ltt|cpp/keyword/switch}},
{{ltt|cpp/keyword/case}},
{{ltt|cpp/keyword/default}}

===Example===
{{example
 | The following code shows several usage cases of the ''switch'' statement
 | code=
#include &lt;iostream&gt;

int main()
{
    int i = 2;
    switch (i) {
        case 1: std::cout &lt;&lt; &quot;1&quot;;
        case 2: std::cout &lt;&lt; &quot;2&quot;;   //execution starts at this case label
        case 3: std::cout &lt;&lt; &quot;3&quot;;
        case 4:
        case 5: std::cout &lt;&lt; &quot;45&quot;;
                break;              //execution of subsequent statements is terminated
        case 6: std::cout &lt;&lt; &quot;6&quot;;
    }
    
    std::cout &lt;&lt; '\n';
    
    switch (i) {
        case 4: std::cout &lt;&lt; &quot;a&quot;;
        default: std::cout &lt;&lt; &quot;d&quot;; //there are no applicable constant_expressions 
                                   //therefore default is executed
    }

    std::cout &lt;&lt; '\n';

    switch (i) {
        case 4: std::cout &lt;&lt; &quot;a&quot;;  //nothing is executed
    }

    // when enumerations are used in a switch statement, many compilers
    // issue warnings if one of the enumerators is not handled
    enum color {RED, GREEN, BLUE};
    switch(RED) {
        case RED:   std::cout &lt;&lt; &quot;red\n&quot;; break;
        case GREEN: std::cout &lt;&lt; &quot;green\n&quot;; break;
        case BLUE:  std::cout &lt;&lt; &quot;blue\n&quot;; break;
    }

    // pathological examples

    // the statement doesn't have to be a compound statement
    switch(0)
        std::cout &lt;&lt; &quot;this does nothing\n&quot;;

    // labels don't require a compound statement either
    switch(int n = 1)
        case 0:
        case 1: std::cout &lt;&lt; n &lt;&lt; '\n';

    // Duff's Device: http://en.wikipedia.org/wiki/Duff's_device
}
 | output=
2345
d
red
1
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/switch}}
{{dsc end}}


[[ar:cpp/language/switch]]
[[de:cpp/language/switch]]
[[es:cpp/language/switch]]
[[fr:cpp/language/switch]]
[[it:cpp/language/switch]]
[[ja:cpp/language/switch]]
[[pt:cpp/language/switch]]
[[ru:cpp/language/switch]]
[[zh:cpp/language/switch]]</text>
      <sha1>qncj7p69xpny09uuomrbytb197sqd3q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/template argument deduction</title>
    <ns>0</ns>
    <id>13515</id>
    <revision>
      <id>91979</id>
      <parentid>91843</parentid>
      <timestamp>2017-04-01T05:34:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>adjust placement</comment>
      <text xml:space="preserve" bytes="37044">{{title|Template argument deduction}}
{{cpp/language/templates/navbar}}

In order to instantiate a {{rlp|function template}}, every template argument must be known, but not every template argument has to be specified. When possible, the compiler will deduce the missing template arguments from the function arguments. This occurs when a function call is attempted, when an address of a function template is taken, and in some [[#Other_contexts|other contexts]]:
{{source|1=
template&lt;typename To, typename From&gt; To convert(From f);

void g(double d) 
{
    int i = convert&lt;int&gt;(d);    // calls convert&lt;int, double&gt;(double)
    char c = convert&lt;char&gt;(d);  // calls convert&lt;char, double&gt;(double)
    int(*ptr)(float) = convert; // instantiates convert&lt;int, float&gt;(float)
}
}}

This mechanism makes it possible to use template operators, since there is no syntax to specify template arguments for an operator other than by re-writing it as a function call expression:
{{source|1=
#include &lt;iostream&gt;

int main() 
{
    std::cout &lt;&lt; &quot;Hello, world&quot; &lt;&lt; std::endl;
    // operator&lt;&lt; is looked up via ADL as std::operator&lt;&lt;,
    // then deduced to operator&lt;&lt;&lt;char, std::char_traits&lt;char&gt;&gt; both times
    // std::endl is deduced to &amp;std::endl&lt;char, std::char_traits&lt;char&gt;&gt;
}
}}

Template argument deduction takes place after the function template {{rlp|lookup|name lookup}} (which may involve {{rlp|adl|argument-dependent lookup}}) and before {{rlp|function template#Template argument substitution|template argument substitution}} (which may involve {{rlp|sfinae|SFINAE}}) and {{rlp|overload_resolution|overload resolution}}.

{{rev begin}}
{{rev|since=c++17|
Template argument deduction is also performed when the name of a class template is used as the type of an object being constructed:
{{source|1=
std::pair p(2, 4.5);
std::tuple t(4, 3, 2.5);
std::copy_n(vi1, 3, std::back_insert_iterator(vi2));
std::for_each(vi.begin(), vi.end(), Foo([&amp;](int i) {...}));
auto lck = std::lock_guard(foo.mtx);
std::lock_guard lck2(foo.mtx, ul);
}}
Template argument deduction for class templates takes place in declarations and in explicit cast expressions; see {{rlp|class template deduction}} for details.
}}
{{rev end}}

===Deduction from a function call===
Template argument deduction attempts to determine template arguments (types for type template parameters {{ttb|T}}i, templates for template template parameters {{ttb|TT}}i, and values for non-type template parameters {{ttb|I}}i), which can be substituted into each parameter {{ttb|P}} to produce the type ''deduced'' {{ttb|A}}, which is the same as the type of the argument {{ttb|A}}, after adjustments listed below.

If there are multiple parameters, each {{ttb|P}}/{{ttb|A}} pair is deduced separately and the deduced template arguments are then combined. If deduction fails or is ambiguous for any {{ttb|P}}/{{ttb|A}} pair or if different pairs yield different deduced template arguments, or if any template argument remains neither deduced nor explicitly specified, compilation fails.

If removing references and cv-qualifiers from {{ttb|P}} gives {{c|std::initializer_list&lt;P'&gt;}} and {{ttb|A}} is a {{rlp|list_initialization|braced-init-list}}, then deduction is performed for every element of the initializer list, taking {{ttb|P'}} as the parameter and the list element {{ttb|A'}} as the argument:
{{source|1=
template&lt;class T&gt; void f(std::initializer_list&lt;T&gt;);
f({1, 2, 3});  // P = std::initializer_list&lt;T&gt;, A = {1, 2, 3}
               // P'1 = T, A'1 = 1: deduced T = int
               // P'2 = T, A'2 = 2: deduced T = int
               // P'3 = T, A'3 = 3: deduced T = int
               // OK: deduced T = int
f({1, &quot;abc&quot;}); // P = std::initializer_list&lt;T&gt;, A = {1, &quot;abc&quot;}
               // P'1 = T, A'1 = 1: deduced T = int
               // P'2 = T, A'2 = &quot;abc&quot;: deduced T = const char*
               // error: deduction fails, T is ambiguous
}}

{{rev begin}}
{{rev|since=c++17|
If removing references and cv-qualifiers from {{ttb|P}} gives {{ttb|P'}}[{{tt|N}}], and {{ttb|A}} is a non-empty braced-init-list, then deduction is performed as above, except if {{tt|N}} is a non-type template parameter, it is deduced from the length of the initializer list:
{{source|1=
template&lt;class T, int N&gt; void h(T const(&amp;)[N]);
h({1, 2, 3}); // deduced T = int, deduced N = 3

template&lt;class T&gt; void j(T const(&amp;)[3]);
j({42}); // deduced T = int, array bound is not a parameter, not considered

struct Aggr { int i; int j; };
template&lt;int N&gt; void k(Aggr const(&amp;)[N]);
k({1, 2, 3});       // error: deduction fails, no conversion from int to Aggr
k({{1}, {2}, {3}}); // OK: deduced N = 3

template&lt;int M, int N&gt; void m(int const(&amp;)[M][N]);
m({{1, 2}, {3, 4}}); // deduced M = 2, deduced N = 2

template&lt;class T, int N&gt; void n(T const(&amp;)[N], T);
n({{1}, {2}, {3}}, Aggr()); // deduced T = Aggr, deduced N = 3
}}
}}
{{rev end}}

If a {{rlp|parameter pack}} appears as the last {{ttb|P}}, then the type {{ttb|P}} is matched against the type {{ttb|A}} of each remaining argument of the call. Each match deduces the template arguments for the next position in the pack expansion:
{{source|1=
template&lt;class... Types&gt; void f(Types&amp;...);

void h(int x, float&amp; y)
{
    const int z = x;
    f(x, y, z); // P = Types&amp;..., A1 = x: deduced first member of Types... = int
                // P = Types&amp;..., A2 = y: deduced second member of Types... = float
                // P = Types&amp;..., A3 = z: deduced third member of Types... = const int
                // calls f&lt;int, float, const int&gt;
}
}}

If {{ttb|P}} is a function type, pointer to function type, or pointer to member function type and if {{ttb|A}} is a {{rlp|overloaded address|set of overloaded functions}} not containing function templates, template argument deduction is attempted with each overload. If only one succeeds, that successful deduction is used. If none or more than one succeeds, the template parameter is non-deduced context (see below):
{{source|1=
template&lt;class T&gt; int f(T(*p)(T));
int g(int);
int g(char);
f(g); // P = T(*)(T), A = overload set
      // P = T(*)(T), A1 = int(int): deduced T = int
      // P = T(*)(T), A2 = int(char): fails to deduce T
      // only one overload works, deduction succeeds
}}

Before deduction begins, the following adjustments to {{ttb|P}} and {{ttb|A}} are made:
@1@ If {{ttb|P}} is not a reference type, 
:@a@ if {{ttb|A}} is an array type, {{ttb|A}} is replaced by the pointer type obtained from array-to-pointer conversion;
:@b@ otherwise, if {{ttb|A}} is a function type, {{ttb|A}} is replaced by the pointer type obtained from function-to-pointer conversion;
:@c@ otherwise, if {{ttb|A}} is a cv-qualified type, the top-level cv-qualifiers are ignored for deduction:
{{source|1=
template&lt;class T&gt; void f(T);
int a[3];
f(a); // P = T, A = int[3], adjusted to int*: deduced T = int*
const int b = 13;
f(b); // P = T, A = const int, adjusted to int: deduced T = int
void g(int);
f(g); // P = T, A = void(int), adjusted to void(*)(int): deduced T = void(*)(int)
}}
@2@ If {{ttb|P}} is a cv-qualified type, the top-level cv-qualifiers are ignored for deduction.
@3@ If {{ttb|P}} is a reference type, the type referred to by {{ttb|P}} is used for deduction.
@4@ If {{ttb|P}} is an rvalue reference to a cv-unqualified template parameter (so-called {{rlp|reference#Forwarding_references|forwarding reference}}), and the corresponding function call argument is an lvalue, the type lvalue reference to {{ttb|A}} is used in place of {{ttb|A}} for deduction (Note: this is the basis for the action of {{lc|std::forward}} {{rev inl|since=c++17|Note: in {{rlp|class template deduction}}, template parameter of a class template is never a forwarding reference}}):
{{source|1=
template&lt;class T&gt;
int f(T&amp;&amp;);       // P is an rvalue reference to cv-unqualified T (forwarding reference)
template&lt;class T&gt;
int g(const T&amp;&amp;); // P is an rvalue reference to cv-qualified T (not special)

int main()
{
    int i;
    int n1 = f(i); // argument is lvalue: calls f&lt;int&amp;&gt;(int&amp;) (special case)
    int n2 = f(0); // argument is not lvalue: calls f&lt;int&gt;(int&amp;&amp;)

//  int n3 = g(i); // error: deduces to g&lt;int&gt;(const int&amp;&amp;), which
                   // cannot bind an rvalue reference to an lvalue
}
}}

After these transformations, the deduction processes as described below (cf. section &quot;Deduction from type&quot;) and attempts to find such template arguments that would make the deduced {{ttb|A}} (that is, {{ttb|P}} after adjustments listed above and the substitution of the deduced template parameters) identical to the ''transformed'' {{ttb|A}}, that is {{ttb|A}} after the adjustments listed above.

If the usual deduction from {{ttb|P}} and {{ttb|A}} fails, the following alternatives are additionally considered: 
@1@ If {{ttb|P}} is a reference type, the deduced {{ttb|A}} (i.e., the type referred to by the reference) can be more cv-qualified than the transformed {{ttb|A}}:
{{source|1=
template&lt;typename T&gt; void f(const T&amp; t);
bool a = false;
f(a); // P = const T&amp;, adjusted to const T, A = bool:
      // deduced T = bool, deduced A = const bool
      // deduced A is more cv-qualified than A
}}
@2@ The transformed {{ttb|A}} can be another pointer or pointer to member type that can be converted to the deduced {{ttb|A}} via a {{rlp|implicit_cast#Qualification_conversions|qualification conversions}} {{rev inl|since=c++17|or a function pointer conversion}}:
{{source|1=
template&lt;typename T&gt; void f(const T*);
int* p;
f(p); // P = const T*, A = int*:
      // deduced T = int, deduced A = const int*
      // qualification conversion applies (from int* to const int*)
}}
@3@ If {{ttb|P}} is a class and {{ttb|P}} has the form ''simple-template-id'', then the transformed {{ttb|A}} can be a derived class of the deduced {{ttb|A}}. Likewise, if {{ttb|P}} is a pointer to a class of the form ''simple-template-id'', the transformed {{ttb|A}} can be a pointer to a derived class pointed to by the deduced {{ttb|A}}:
{{source|1=
template&lt;class T&gt; struct B { };
template&lt;class T&gt; struct D : public B&lt;T&gt; { };
template&lt;class T&gt; void f(B&lt;T&gt;&amp;) { }

void f()
{
    D&lt;int&gt; d;
    f(d); // P = B&lt;T&gt;&amp;, adjusted to P = B&lt;T&gt; (a simple-template-id), A = D&lt;int&gt;:
          // deduced T = int, deduced A = B&lt;int&gt;
          // A is derived from deduced A
}
}}

====Non-deduced contexts====
In the following cases, the types, templates, and non-type values that are used to compose {{ttb|P}} do not participate in template argument deduction, but instead ''use'' the template arguments that were either deduced elsewhere or explicitly specified. If a template parameter is used only in non-deduced contexts and is not explicitly specified, template argument deduction fails.
@1@ The {{spar|nested-name-specifier}} (everything to the left of the scope resolution operator {{c|::}}) of a type that was specified using a {{rlp|identifiers#Qualified_identifiers|qualified-id}}:
{{source|1=
// the identity template, often used to exclude specific arguments from deduction
template&lt;typename T&gt; struct identity { typedef T type; };
template&lt;typename T&gt; void bad(std::vector&lt;T&gt; x, T value = 1);
template&lt;typename T&gt; void good(std::vector&lt;T&gt; x, typename identity&lt;T&gt;::type value = 1);
std::vector&lt;std::complex&lt;double&gt;&gt; x;
bad(x, 1.2);  // P1 = std::vector&lt;T&gt;, A1 = std::vector&lt;std::complex&lt;double&gt;&gt;
              // P1/A1: deduced T = std::complex&lt;double&gt;
              // P2 = T, A2 = double
              // P2/A2: deduced T = double
              // error: deduction fails, T is ambiguous
good(x, 1.2); // P1 = std::vector&lt;T&gt;, A1 = std::vector&lt;std::complex&lt;double&gt;&gt;
              // P1/A1: deduced T = std::complex&lt;double&gt;
              // P2 = identity&lt;T&gt;::type, A2 = double
              // P2/A2: uses T deduced by P1/A1 because T is to the left of :: in P2
              // OK: T = std::complex&lt;double&gt;
}}
{{rev begin}}
{{rev|since=c++14|
@2@ The expression of a {{rlp|decltype}}-specifier:
{{source|1=
template&lt;typename T&gt; void f(decltype(*std::declval&lt;T&gt;()) arg);
int n;
f&lt;int*&gt;(n); // P = decltype(*declval&lt;T&gt;()), A = int: T is in non-deduced context
}}
}}{{rev end}}
@3@ A non-type template argument or an array bound in which a subexpression references a template
parameter:
{{source|1=
template&lt;std::size_t N&gt; void f(std::array&lt;int, 2 * N&gt; a);
std::array&lt;int, 10&gt; a;
f(a); // P = std::array&lt;int, 2 * N&gt;, A = std::array&lt;int, 10&gt;:
      // 2 * N is non-deduced context, N cannot be deduced
      // note: f(std::array&lt;int, N&gt; a) would be able to deduce N
}}
@4@ A template parameter used in the parameter type of a function parameter that has a default argument that is being used in the call for which argument deduction is being done:
{{source|1=
template&lt;typename T, typename F&gt;
void f(const std::vector&lt;T&gt;&amp; v, const F&amp; comp = std::less&lt;T&gt;());
std::vector&lt;std::string&gt; v(3);
f(v); // P1 = const std::vector&lt;T&gt;&amp;, A1 = std::vector&lt;std::string&gt; lvalue
      // P1/A1 deduced T = std::string
      // P2 = const F&amp;, A2 = std::less&lt;std::string&gt; rvalue
      // P2 is non-deduced context for F (template parameter) used in the
      // parameter type (const F&amp;) of the function parameter comp,
      // that has a default argument that is being used in the call f(v)
}}
@5@ The parameter {{ttb|P}}, whose {{ttb|A}} is a function or a set of overloads such that more than one function matches {{ttb|P}} or no function matches {{ttb|P}} or the set of overloads includes one or more function templates:
{{source|1=
template&lt;typename T&gt; void out(const T&amp; value) { std::cout &lt;&lt; value; }
out(&quot;123&quot;);     // P = const T&amp;, A = const char[4] lvalue: deduced T = char[4]
out(std::endl); // P = const T&amp;, A = function template: T is in non-deduced context
}}
@6@ The parameter {{ttb|P}}, whose {{ttb|A}} is a braced-init-list, but {{ttb|P}} is not std::initializer_list or a reference to one:
{{source|1=
template&lt;class T&gt; void g1(std::vector&lt;T&gt;);
template&lt;class T&gt; void g2(std::vector&lt;T&gt;, T x);
g1({1, 2, 3});     // P = std::vector&lt;T&gt;, A = {1, 2, 3}: T is in non-deduced context
                   // error: T is not explicitly specified or deduced from another P/A
g2({1, 2, 3}, 10); // P1 = std::vector&lt;T,&gt; A1 = {1, 2, 3}: T is in non-deduced context
                   // P2 = T, A2 = int: deduced T = int
}}
@7@ The parameter {{ttb|P}} which is a parameter pack and does not occur at the end of the parameter list:
{{source|1=
template&lt;class... Ts, class T&gt; void f1(T n, Ts... args);
template&lt;class... Ts, class T&gt; void f2(Ts... args, T n);
f1(1, 2, 3, 4); // P1 = T, A1 = 1: deduced T = int
                // P2 = Ts..., A2 = 2, A3 = 3, A4 = 4: deduced Ts = [int, int, int]
f2(1, 2, 3, 4); // P1 = Ts...: Ts is non-deduced context
}}
@8@ The template parameter list that appears within the parameter {{ttb|P}}, and which includes a pack expansion that is not at the very end of the template parameter list:
{{source|1=
template&lt;int...&gt; struct T { };

template&lt;int... Ts1, int N, int... Ts2&gt;
void good(const T&lt;N, Ts1...&gt;&amp; arg1, const T&lt;N, Ts2...&gt;&amp;);

template&lt;int... Ts1, int N, int... Ts2&gt;
void bad(const T&lt;Ts1..., N&gt;&amp; arg1, const T&lt;Ts2..., N&gt;&amp;);

T&lt;1, 2&gt; t1;
T&lt;1, -1, 0&gt; t2;
good(t1, t2); // P1 = const T&lt;N, Ts1...&gt;&amp;, A1 = T&lt;1, 2&gt;:
              // deduced N = 1, deduced Ts1 = [2]
              // P2 = const T&lt;N, Ts2...&gt;&amp;, A2 = T&lt;1, -1, 0&gt;:
              // deduced N = 1, deduced Ts2 = [-1, 0]
bad(t1, t2);  // P1 = const T&lt;Ts1..., N&gt;&amp;, A1 = T&lt;1, 2&gt;:
              // &lt;Ts1..., N&gt; is non-deduced context
              // P2 = const T&lt;Ts2..., N&gt;&amp;, A2 = T&lt;1, -1, 0&gt;:
              // &lt;Ts2..., N&gt; is non-deduced context
}}
@9@ For {{ttb|P}} of array type (but not reference to array or pointer to array), the major array bound:
{{source|1=
template&lt;int i&gt; void f1(int a[10][i]);
template&lt;int i&gt; void f2(int a[i][20]);    // P = int[i][20], array type
template&lt;int i&gt; void f3(int (&amp;a)[i][20]); // P = int(&amp;)[i][20], reference to array

void g()
{
    int a[10][20];
    f1(a);     // OK: deduced i = 20
    f1&lt;20&gt;(a); // OK
    f2(a);     // error: i is non-deduced context
    f2&lt;10&gt;(a); // OK
    f3(a);     // OK: deduced i = 10
    f3&lt;10&gt;(a); // OK
}
}}

In any case, if any part of a type name is non-deduced, the entire type name is non-deduced context. However, compound types can include both deduced and non-deduced type names. For example, in {{c|A&lt;T&gt;::B&lt;T2&gt;}}, {{tt|T}} is non-deduced because of rule #1 (nested name specifier), and {{tt|T2}} is non-deduced because it is part of the same type name, but in {{c|void(*f)(typename A&lt;T&gt;::B, A&lt;T&gt;)}}, the {{tt|T}} in {{c|A&lt;T&gt;::B}} is non-deduced (because of the same rule), while the {{tt|T}} in {{c|A&lt;T&gt;}} is deduced.

====Deduction from a type====
Given a function parameter {{ttb|P}} that depends on one or more type template parameters {{ttb|T}}i, template template parameters {{ttb|TT}}i, or non-type template parameters {{ttb|I}}i, and the corresponding argument {{ttb|A}}, deduction takes place if {{ttb|P}} has one of the following forms:
{{todo|possibly a table with micro-examples}}
* {{tt|T}};
* {{tt|cv-list T}};
* {{tt|T*}};
* {{tt|T&amp;}};
* {{tt|T&amp;&amp;}};
* {{tt|T[integer-constant]}};
* {{tt|class-template-name&lt;T&gt;}};
* {{tt|type(T)}};
* {{tt|T()}};
* {{tt|T(T)}};
* {{tt|T type::*}};
* {{tt|type T::*}};
* {{tt|T T::*}};
* {{tt|T(type::*)()}};
* {{tt|type(T::*)()}};
* {{tt|type(type::*)(T)}};
* {{tt|type(T::*)(T)}};
* {{tt|T (type::*)(T)}};
* {{tt|T (T::*)()}};
* {{tt|T (T::*)(T)}};
* {{tt|type[i]}};
* {{tt|class-template-name&lt;nowiki&gt;&lt;&lt;/nowiki&gt;I&gt;}};
* {{tt|TT&lt;T&gt;}};
* {{tt|TT&lt;nowiki&gt;&lt;&lt;/nowiki&gt;I&gt;}};
* {{tt|TT&lt;&gt;}};
where
* {{tt|(T)}} is a function parameter type list where at least one parameter type contains T;
* {{tt|()}} is a function parameter type list where no parameters contain T;
* {{tt|&lt;T&gt;}} is a template argument list where at least one argument contains T;
* {{tt|&lt;nowiki&gt;&lt;&lt;/nowiki&gt;I&gt;}} is a template argument list where at least one argument contains I;
* {{tt|&lt;&gt;}} is a template argument list where no arguments contain T or I.

If {{ttb|P}} has one of the forms that include a template parameter list {{ttb|&lt;T&gt;}} or {{ttb|&lt;nowiki&gt;&lt;&lt;/nowiki&gt;I&gt;}}, then each element {{ttb|P}}i of that template argument list is matched against the corresponding template argument {{ttb|A}}i of its {{ttb|A}}. If the last {{ttb|P}}i is a pack expansion, then its pattern is compared against each remaining argument in the template argument list of {{ttb|A}}. A trailing parameter pack that is not otherwise deduced, is deduced to an empty parameter pack.

If {{ttb|P}} has one of the forms that include a function parameter list {{ttb|(T)}}, then each parameter {{ttb|P}}i from that list is compared with the corresponding argument {{ttb|A}}i from {{ttb|A}}'s function parameter list. If the last {{ttb|P}}i is a pack expansion, then its declarator is compared with each remaining {{ttb|A}}i in the parameter type list of {{ttb|A}}.

Forms can be nested and processed recursively: {{tt|X&lt;int&gt;(*)(char[6])}} is an example of {{tt|type(*)(T)}}, where ''type'' is {{tt|class-template-name&lt;T&gt;}} and T is {{tt|type[i]}}.&lt;!-- $14.8.2.5/11--&gt;

{{rev begin}}
{{rev|until=c++17|
Template type argument cannot be deduced from the type of a non-type template argument:
{{source|1=
template&lt;typename T, T i&gt; void f(double a[10][i]);
double v[10][20];
f(v); // P = double[10][i], A = double[10][20]:
      // i can be deduced to equal 20
      // but T cannot be deduced from the type of i
}}
}}
{{rev|since=c++17|
When the value of the argument corresponding to a non-type template parameter P that is declared with a dependent type is deduced from an expression, the template parameters in the type of P are deduced from the type of the value.
{{source|1=
template &lt;long n&gt; struct A { };
template &lt;class T&gt; struct C;
template &lt;class T, T n&gt; struct C&lt;A&lt;n&gt;&gt; { using Q = T; };
typedef long R;

typedef C&lt;A&lt;2&gt;&gt;::Q R;  // OK; T was deduced to long 
                       // from the template argument value in the type A&lt;2&gt;
}}

The type of {{tt|N}} in the type {{tt|T[N]}} is {{lc|std::size_t}}
{{source|1=
template&lt;class T, T i&gt; void f(int (&amp;a)[i]);
int v[10];
f(v); // OK: T is std::size_t
}}
}}
{{rev end}}

If a non-type template parameter is used in the parameter list, and the corresponding template argument is deduced, the type of the deduced template argument ({{mark unreviewed dr|CWG|2091}}as specified in its enclosing template parameter list, meaning references are preserved) must match the type of the non-type template parameter exactly, except that cv-qualifiers are dropped, and except where the template argument is deduced from an array bound—in that case any integral type is allowed, even bool though it would always become true:
{{source|1=
template&lt;int i&gt; class A { };
template&lt;short s&gt; void f(A&lt;s&gt;); // the type of the non-type template param is short

void k1()
{
    A&lt;1&gt; a;  // the type of the non-type template param of a is int
    f(a);    // P = A&lt;(short)s&gt;, A = A&lt;(int)1&gt;
             // error: deduced non-type template argument does not have the same
             // type as its corresponding template argument
    f&lt;1&gt;(a); // OK: the template argument is not deduced, 
             // this calls f&lt;(short)1&gt;(A&lt;(short)1&gt;)
}

template&lt;int&amp;&gt; struct X;
template&lt;int&amp; R&gt; void k2(X&lt;R&gt;&amp;);
int n;
void g(X&lt;n&gt; &amp;x) {
    k2(x); // P = X&lt;R&gt;, A = X&lt;n&gt;
           // parameter type is int&amp;
           // argument type is int&amp; in struct X's template declaration
           // OK (with CWG 2091): deduces R to refer to n
}
}}

Type template parameter cannot be deduced from the type of a function default argument:
{{source|1=
template&lt;typename T&gt; void f(T = 5, T = 7);

void g()
{
    f(1);     // OK: calls f&lt;int&gt;(1, 7)
    f();      // error: cannot deduce T
    f&lt;int&gt;(); // OK: calls f&lt;int&gt;(5, 7)
}
}}

Deduction of template template parameter can use the type used in the template specialization used in the function call:
{{source|1=
template&lt;template&lt;typename&gt; class X&gt; struct A { }; // A is a template with a TT param
template&lt;template&lt;typename&gt; class TT&gt; void f(A&lt;TT&gt;) { }
template&lt;class T&gt; struct B { };
A&lt;B&gt; ab;
f(ab); // P = A&lt;TT&gt;, A = A&lt;B&gt;: deduced TT = B, calls f(A&lt;B&gt;)
}}

===Other contexts===
Besides function calls and operator expressions, template argument deduction is used in the following situations:

====auto type deduction====
Template argument deduction is used in {{rlp|declarations}} of variables, when deducing the meaning of the '''{{rlp|auto|auto specifier}}''' from the variable's initializer.

The parameter {{ttb|P}} is obtained as follows: in {{tt|T}}, the declared type of the variable that includes {{tt|auto}}, every occurrence of {{tt|auto}} is replaced with an imaginary type template parameter {{tt|U}} or, if the initializer is a brace-init-list, with {{tt|std::initializer_list&lt;nowiki&gt;&lt;&lt;/nowiki&gt;U&gt;}}. The argument {{ttb|A}} is the initializer expression. After deduction of {{tt|U}} from {{ttb|P}} and {{ttb|A}} following the rules described above, the deduced {{tt|U}} is substituted into {{tt|T}} to get the actual variable type:
{{source|1=
const auto&amp; x = 1 + 2; // P = const U&amp;, A = 1 + 2:
                       // same rules as for calling f(1 + 2) where f is
                       // template&lt;class U&gt; void f(const U&amp; u)
                       // deduced U = int, the type of x is const int&amp;
auto l = {13}; // P = std::initializer_list&lt;U&gt;, A = {13}:
               // deduced U = int, the type of l is std::initializer_list&lt;int&gt;
}}
{{rev begin}}
{{rev|since=c++17|
In direct-list-initialization (but not in copy-list-initalization), when deducing the meaning of the {{rlp|auto}} from a braced-init-list, the braced-init-list must contain only one element, and the type of auto will be the type of that element:
{{source|1=
auto x1 = {3}; // x1 is std::initializer_list&lt;int&gt;
auto x2{1, 2}; // error: not a single element
auto x3{3};    // x3 is int (before C++17 it was std::initializer_list&lt;int&gt;)
}}
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++14|
====auto-returning functions====
Template argument deduction is used in declarations of {{rlp|functions}}, when deducing the meaning of the {{rlp|auto}} specifier in the function's return type, from the return statement.

For auto-returning functions, the parameter {{ttb|P}} is obtained as follows: in {{tt|T}}, the declared return type of the function that includes {{tt|auto}}, every occurrence of {{tt|auto}} is replaced with an imaginary type template parameter {{tt|U}}. The argument {{ttb|A}} is the expression of the {{rlp|return}} statement, and if the return statement has no operand, {{ttb|A}} is {{c|void()}}. After deduction of {{tt|U}} from {{ttb|P}} and {{ttb|A}} following the rules described above, the deduced {{tt|U}} is substituted into {{tt|T}} to get the actual return type:
{{source|1=
auto f() { return 42; } // P = auto, A = 42:
                        // deduced U = int, the return type of f is int
}}

If such function has multiple return statements, the deduction is performed for each return statement. All the resulting types must be the same and become the actual return type.

If such function has no return statement, {{ttb|A}} is {{c|void()}} when deducing.

Note: the meaning of {{c|decltype(auto)}} placeholder in variable and function declarations does not use template argument deduction.
}}
{{rev end}}

====Overload resolution====
Template argument deduction is used during {{rlp|overload resolution}}, when generating specializations from a candidate template function.
{{ttb|P}} and {{ttb|A}} are the same as in a regular function call:
{{source|1=
std::string s;
std::getline(std::cin, s); // &quot;std::getline&quot; names 4 function templates, 
// 2 of which are candidate functions (correct number of parameters)
// 1st candidate template:
// P1 = std::basic_istream&lt;CharT, Traits&gt;&amp;, A1 = std::cin
// P2 = std::basic_string&lt;CharT, Traits, Allocator&gt;&amp;, A2 = s
// deduction determines the type template parameters CharT, Traits, and Allocator
// specialization std::getline&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;
// 2nd candidate template:
// P1 = std::basic_istream&lt;CharT, Traits&gt;&amp;&amp;, A1 = std::cin
// P2 = std::basic_string&lt;CharT, Traits, Allocator&gt;&amp;, A2 = s
// deduction determines the type template parameters CharT, Traits, and Allocator
// specialization std::getline&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;
// overload resolution ranks reference binding from lvalue std::cin and picks
// the first of the two candidate specializations
}}

If deduction fails{{rev inl|since=c++14|{{mark unreviewed dr|CWG|2052}}, or if deduction succeeds, but the specialization it produces would be invalid (for example, an overloaded operator whose parameters are neither class nor enumeration types),}} the specialization is not included in the overload set, similar to {{rlp|sfinae|SFINAE}}.

====Address of an overload set====
Template argument deduction is used when taking an {{rlp|overloaded address|address of a overload set}}, which includes function templates.

The function type of the function template is {{ttb|P}}. The {{rlp|overloaded address|target type}} is the type of {{ttb|A}}:
{{source|1=
std::cout &lt;&lt; std::endl; // std::endl names a function template
// type of endl P =
// std::basic_ostream&lt;CharT, Traits&gt;&amp; (std::basic_ostream&lt;CharT, Traits&gt;&amp;)
// operator&lt;&lt; parameter A =
// std::basic_ostream&lt;char, std::char_traits&lt;char&gt;&gt;&amp; (*)(
//   std::basic_ostream&lt;char, std::char_traits&lt;char&gt;&gt;&amp;
// )
// (other overloads of operator&lt;&lt; are not viable) &lt;!-- As is mentioned in {{rlp|overloaded address|address of a overload set}}, the type of the function must match the target exactly, no implicit conversions are considered. --&gt;
// deduction determines the type template parameters CharT and Traits
}}
An additional rule is applied to the deduction in this case: when comparing function parameters {{ttb|P}}i and {{ttb|A}}i, if any {{ttb|P}}i is an rvalue reference to cv-unqualified template parameter (a &quot;forwarding reference&quot;) and the corresponding {{ttb|A}}i is an lvalue reference, then {{ttb|P}}i is adjusted to the template parameter type (T&amp;&amp; becomes T).

{{rev begin}}
{{rev|since=c++14|
If the return type of the function template is a placeholder ({{c|auto}} or {{c|decltype(auto)}}), that return type is a non-deduced context and is determined from the instantiation.
}}
{{rev end}}

====Partial ordering====
Template argument deduction is used during {{rlp|function template|partial ordering of overloaded function templates}}

{{todo|mini-example}} &lt;!-- don't lose the paragraph from 14.8.2.5/8 about matching a pack expansion against Ai which was originally a pack expansion, and 14.8.2.5/10 about the same for pack expansions in function parameter lists. it will go into the partial ordering text since this one is overcrowded.--&gt;

====Conversion function template====
Template argument deduction is used when selecting {{rlp|cast operator|user-defined conversion function}} template arguments.

{{ttb|A}} is the type that is required as the result of the conversion. {{ttb|P}} is the return type of the conversion function template, except that
@a@ if the return type is a reference type then {{ttb|P}} is the referred type;
@b@ if the return type is an array type and {{ttb|A}} is not a reference type, then {{ttb|P}} is the pointer type obtained by array-to-pointer conversion;
@c@ if the return type is a function type and {{ttb|A}} is not a reference type, then {{ttb|P}} is the function pointer type obtained by function-to-pointer conversion;
@d@ if {{ttb|P}} is cv-qualified, the top-level cv-qualifiers are ignored.

If {{ttb|A}} is cv-qualified, the top-level cv-qualifiers are ignored. If {{ttb|A}} is a reference type, the referred type is used by deduction.

If the usual deduction from {{ttb|P}} and {{ttb|A}} (as described above) fails, the following alternatives are additionally considered:
@a@ if {{ttb|A}} is a reference type, {{ttb|A}} can be more cv-qualified than the deduced {{ttb|A}};
@b@ if {{ttb|A}} is a pointer or pointer to member type, the deduced {{ttb|A}} is allowed to be any pointer that can be converted to {{ttb|A}} by qualification conversion:
{{source|1=
struct A { template&lt;class T&gt; operator T***(); };
A a;
const int* const* const* p1 = a; // P = T***, A = const int* const* const*
// regular function-call deduction for 
// template&lt;class T&gt; void f(T*** p) as if called with the argument
// of type const int* const* const* fails
// additional deduction for conversion functions determines T = int 
// (deduced A is int***, convertible to const int* const* const*)
}}
{{rev begin}}
{{rev|since=c++17|
@c@ if {{ttb|A}} is a function pointer type, the deduced {{ttb|A}} is allowed to be pointer to noexcept function, convertible to {{ttb|A}} by function pointer conversion;
@d@ if {{ttb|A}} is a pointer to member function, the deduced {{ttb|A}} is allowed to be a pointer to noexcept member function, convertible to {{ttb|A}} by function pointer conversion.
}}
{{rev end}}

See {{rlp|member_template#Conversion function templates|member template}} for other rules regarding conversion function templates.

====Explicit instantiation====
Template argument deduction is used in {{rlp|function_template#Explicit_instantiation|explicit instantiations}}, {{rlp|template specialization|explicit specializations}}, and those {{rlp|friend#Template_friends|friend declarations}} where the declarator-id happens to refer to a specialization of a function template (for example, {{c|friend ostream&amp; operator&lt;&lt; &lt;&gt; (...)}}), if not all template arguments are explicitly specified or defaulted, template argument deduction is used to determine which template's specialization is referred to.

{{ttb|P}} is the type of the function template that is being considered as a potential match, and {{ttb|A}} is the function type from the declaration. If there are no matches or more than one match (after partial ordering), the function declaration is ill-formed:
{{source|1=
template&lt;class X&gt; void f(X a);  // 1st template f
template&lt;class X&gt; void f(X* a); // 2nd template f
template&lt;&gt; void f&lt;&gt;(int* a) { } // explicit specialization of f
// P1 = void(X), A1 = void(int*): deduced X = int*, f&lt;int*&gt;(int*)
// P2 = void(X*), A2 = void(int*): deduced X = int, f&lt;int&gt;(int*)
// f&lt;int*&gt;(int*) and f&lt;int&gt;(int*) are then submitted to partial ordering
// which selects f&lt;int&gt;(int*) as the more specialized template
}}

An additional rule is applied to the deduction in this case: when comparing function parameters {{ttb|P}}i and {{ttb|A}}i, if any {{ttb|P}}i is an rvalue reference to cv-unqualified template parameter (a &quot;forwarding reference&quot;) and the corresponding {{ttb|A}}i is an lvalue reference, then {{ttb|P}}i is adjusted to the template parameter type (T&amp;&amp; becomes T).

====Deallocation function template====
Template argument deduction is used when determining if a [[cpp/memory/new/operator_delete|deallocation function]] template specialization matches a given placement form of {{tt|operator new}}.

{{ttb|P}} is the type of the function template that is being considered as a potential match, and {{ttb|A}} is the function type of the deallocation function that would be the match for the placement operator new under consideration. If there is no match or more than one match (after overload resolution), the placement deallocation function is not called (memory leak may occur):
{{source|1=
struct X
{
    X() { throw std::runtime_error(&quot;&quot;); }
    static void* operator new(std::size_t sz, bool b) { return ::operator new(sz); }
    static void* operator new(std::size_t sz, double f) { return ::operator new(sz); }
    template&lt;typename T&gt; static void operator delete(void* ptr, T arg)
    {
        ::operator delete(ptr);
    }
};

int main()
{
    try
    {
        X* p1 = new (true) X; // when X() throws, operator delete is looked up
                              // P1 = void(void*, T), A1 = void(void*, bool):
                              // deduced T = bool
                              // P2 = void(void*, T), A2 = void(void*, double):
                              // deduced T = double
                              // overload resolution picks operator delete&lt;bool&gt;
    } catch(const std::exception&amp;) { }
    try
    {
        X* p1 = new (13.2) X; // same lookup, picks operator delete&lt;double&gt;
    } catch(const std::exception&amp;) { }
}
}}

===Alias templates===
{{rlp|type alias|Alias templates}} are never deduced:
{{source|1=
template&lt;class T&gt; struct Alloc { };
template&lt;class T&gt; using Vec = vector&lt;T, Alloc&lt;T&gt;&gt;;
Vec&lt;int&gt; v;

template&lt;template&lt;class, class&gt; class TT&gt; void g(TT&lt;int, Alloc&lt;int&gt;&gt;);
g(v); // OK: deduced TT = vector

template&lt;template&lt;class&gt; class TT&gt; void f(TT&lt;int&gt;);
f(v); // error: TT cannot be deduced as &quot;Vec&quot; because Vec is an alias template
}}

===Implicit conversions===
Type deduction does not consider implicit conversions (other than type adjustments listed above): that's the job for {{rlp|overload resolution}}, which happens later.

{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|1391}}
However, if deduction succeeds for all parameters that participate in template argument deduction, and all template arguments that aren't deduced are explicitly specified or defaulted, then the remaining function parameters are compared with the corresponding function arguments. For each remaining parameter {{ttb|P}} with a type that was non-dependent before substitution of any explicitly-specified template arguments, if the corresponding argument {{ttb|A}} cannot be implicitly converted to {{ttb|P}}, deduction fails.

Parameters with dependent types in which no template-parameters participate in template argument deduction, and parameters that became non-dependent due to substitution of explicitly-specified template arguments will be checked during overload resolution:
{{source|1=
template&lt;class T&gt; struct Z { typedef typename T::x xx; };
template&lt;class T&gt; typename Z&lt;T&gt;::xx f(void*, T); // #1
template&lt;class T&gt; void f(int, T);                // #2
struct A { } a;

int main()
{
    f(1, a); // for #1, deduction determines T = struct A, but the remaining argument 1
             // cannot be implicitly converted to its parameter void*: deduction fails
             // instantiation of the return type is not requested
             // for #2, deduction determines T = struct A, and the remaining argument 1
             // can be implicitly converted to its parameter int: deduction succeeds
             // the function call compiles as a call to #2 (deduction failure is SFINAE)
}
}}
}}
{{rev end}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1391|std=C++14|before=effect of implicit conversions of the arguments that aren't involved in deduction were not specified|after=specified as described above}}
{{dr list item|wg=cwg|dr=2052|std=C++14|before=deducing an operator with non-class arguments was a hard error (in some compilers)|after=soft error if there are other overloads}}
{{dr list item|wg=cwg|dr=2091|std=C++98|before=deducing a reference non-type parameter did not work due to type mismatch against the argument|after=type mismatch avoided}}
{{dr list end}}</text>
      <sha1>e7r1y7kydejd7x08vm7q2sn16000il4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/template parameters</title>
    <ns>0</ns>
    <id>13162</id>
    <revision>
      <id>91999</id>
      <parentid>91986</parentid>
      <timestamp>2017-04-01T05:41:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>adjust placement</comment>
      <text xml:space="preserve" bytes="18908">{{title|Template parameters and template arguments}}
{{cpp/language/templates/navbar}}
Every {{rlp|templates|template}} is parametrized by one or more template parameters, indicated in the {{spar|parameter-list}} of the template declaration syntax:

{{sdsc begin}}
{{sdsc|num=1|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|declaration}} }}
{{sdsc end}}

Each parameter in {{spar|parameter-list}} may be:
* a non-type template parameter;
* a type template parameter;
* a template template parameter.

====Non-type template parameter====
{{sdsc begin}}
{{sdsc|num=1|{{spar|type}} {{spar|name}}{{mark optional}} }}
{{sdsc|num=2|{{spar|type}} {{spar|name}}{{mark optional}} {{ttb|{{=}} }} {{spar|default}} }}
{{sdsc|num=3|{{spar|type}} {{ttb|...}} {{spar|name}}{{mark optional}} | notes={{mark since c++11}}}}
{{sdsc|num=4|{{ttb|auto}} {{spar|name}} |notes={{mark since c++17}} }}
{{sdsc end}}
@1@ A non-type template parameter with an optional name.
@2@ A non-type template parameter with an optional name and a default value.
@3@ A non-type template [[cpp/language/parameter_pack|parameter pack]] with an optional name.
@4@ A non-type template parameter with a deduced type (note, it may also be {{c|auto **}} or any other type that includes the placeholder {{tt|auto}} )

{{spar|type}} is one of the following types (optionally cv-qualified, the qualifiers are ignored):
* {{lc|std::nullptr_t}} {{mark since c++11}};
* {{rlp|type|integral type}};
* {{rlp|reference#lvalue_references|lvalue reference type}} (to object or to function);
* {{rlp|pointer|pointer type}} (to object or to function);
* {{rlp|pointer#pointers_to_data_members|pointer to member type}} (to member object or to member function);
* {{rlp|enum|enumeration type}}.

Array and function types may be written in a template declaration, but they are automatically replaced by pointer to object and pointer to function as appropriate.

When the name of a non-type template parameter is used in an expression within the body of the class template, it is an unmodifiable {{rlp|value category|prvalue}} unless its type was an lvalue reference type.

A template parameter of the form {{c|class Foo}} is not an unnamed non-type template parameter of type {{tt|Foo}}, even if otherwise {{c|class Foo}} is an {{rlp|elaborated type specifier}} and {{c|class Foo x;}} declares {{tt|x}} to be of type {{tt|Foo}}.

{{rev begin}}
{{rev|since=c++17|
The type of a non-type template parameter may be deduced if it includes the placeholder keyword {{tt|auto}}:
{{source|1=
template&lt;auto n&gt; struct B { /* ... */ };
B&lt;5&gt; b1;   // OK: non-type template parameter type is int
B&lt;'a'&gt; b2; // OK: non-type template parameter type is char
B&lt;2.5&gt; b3; // error: non-type template parameter type cannot be double
}}
}}
{{rev end}}

====Type template parameter====
{{sdsc begin}}
{{sdsc|num=1|{{ttb|typename}} {{spar|name}}{{mark optional}} }}
{{sdsc|num=2|{{ttb|class}} {{spar|name}}{{mark optional}} }}
{{sdsc|num=3|{{ttb|typename{{!}}class}} {{spar|name}}{{mark optional}} {{ttb|{{=}} }} {{spar|default}}  }}
{{sdsc|num=4|{{ttb|typename{{!}}class}} {{ttb|...}} {{spar|name}}{{mark optional}} | notes={{mark since c++11}}}}
{{sdsc end}}
@1@ A type template parameter with an optional name.
@2@ Exactly the same as 1).
@3@ A type template parameter with an optional name and a default.
@4@ A type template [[cpp/language/parameter_pack|parameter pack]] with an optional name.

In the body of the template declaration, the name of a type parameter is a typedef-name which aliases the type supplied when the template is instantiated.

There is no difference between the keywords {{ttb|class}} and {{ttb|typename}} in a type template parameter declaration.

====Template template parameter====
{{sdsc begin}}
{{sdsc|num=1|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{ttb|typename{{mark c++17}}{{!}}class}} {{spar|name}}{{mark optional}} }}
{{sdsc|num=2|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{ttb|typename{{mark c++17}}{{!}}class}} {{spar|name}}{{mark optional}} {{ttb|{{=}}}} {{spar|default}} }}
{{sdsc|num=3|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{ttb|typename{{mark c++17}}{{!}}class}} {{ttb|...}} {{spar|name}}{{mark optional}} | notes={{mark since c++11}}}}
{{sdsc end}}
@1@ A template template parameter with an optional name.
@2@ A template template parameter with an optional name and a default.
@3@ A template template [[cpp/language/parameter_pack|parameter pack]] with an optional name.

{{rev begin}}
{{rev|until=c++17|
Unlike type template parameter declaration, template template parameter declaration can only use the keyword {{ttb|class}} and not {{ttb|typename}}.
}}
{{rev end}}

In the body of the template declaration, the name of this parameter is a template-name (and needs arguments to be instantiated).

{{source|1=
template&lt;typename T&gt; class my_array {};

// two type template parameters and one template template parameter:
template&lt;typename K, typename V, template&lt;typename&gt; typename C = my_array&gt;
class Map
{
    C&lt;K&gt; key;
    C&lt;V&gt; value;
};
}}

===Template arguments===
In order for a template to be instantiated, every template parameter (type, non-type, or template) must be replaced by a corresponding template argument. For {{rlp|class template}}s, the arguments are either explicitly provided{{rev inl|since=c++17|, {{rlp|class_template_deduction|deduced from the initializer}}, }} or defaulted. For {{rlp|function template}}s, the arguments are explicitly provided, {{rlp|template argument deduction|deduced from the context}}, or defaulted.

If an argument can be interpreted as a both a {{rlp|type-id}} and an expression, it is always interpreted as a type-id, even if the corresponding template parameter is non-type:
{{source|1=
template&lt;class T&gt; void f(); // #1
template&lt;int I&gt; void f(); // #2
void g() {
    f&lt;int()&gt;(); // &quot;int()&quot; is both a type and an expression,
                // calls #1 because it is interpreted as a type
}
}}
====Template non-type arguments====
The following limitations apply when instantiating templates that have non-type template parameters:
{{rev begin}}
{{rev|until=c++17|
* For integral and arithmetic types, the template argument provided during instantiation must be a {{rlp|constant expression|converted constant expression}} of the template parameter's type (so certain implicit conversion applies).
* For pointers to objects, the template arguments have to designate the address of an object with static {{rlp|storage duration}} and a {{rlp|storage_duration#Linkage|linkage}} (either internal or external), or a constant expression that evaluates to the appropriate null pointer or {{lc|std::nullptr_t}} value.
* For pointers to functions, the valid arguments are pointers to functions with linkage (or constant expressions that evaluate to null pointer values).
* For lvalue reference parameters, the argument provided at instantiation cannot be a temporary, an unnamed lvalue, or a named lvalue with no linkage (in other words, the argument must have linkage).
* For pointers to members, the argument has to be a pointer to member expressed as {{c|&amp;Class::Member}} or a constant expression that evaluates to null pointer or {{lc|std::nullptr_t}} value.

In particular, this implies that string literals, addresses of array elements, and addresses of non-static members cannot be used as template arguments to instantiate templates whose corresponding non-type template parameters are pointers to objects.
}}
{{rev|since=c++17|
The template argument that can be used with a non-type template parameter can be any  {{rlp|constant expression|converted constant expression}} of the type of the template parameter.
{{source|1=
template&lt;const int* pci&gt; struct X {};
int ai[10];
X&lt;ai&gt; xi;  // ok: array to pointer conversion and cv-qualification conversion

struct Y {};
template&lt;const Y&amp; b&gt; struct Z {};
Y y;
Z&lt;y&gt; z;  // ok: no conversion

template&lt;int (&amp;pa)[5]&gt; struct W {};
int b[5];
W&lt;b&gt; w; // ok: no conversion

void f(char);
void f(int);
template&lt;void (*pf)(int)&gt; struct A {};
A&lt;&amp;f&gt; a; // ok: overload resolution selects f(int)
}}

The only exceptions are that non-type template parameters of ''reference'' and ''pointer'' type cannot refer to/be the address of
* a subobject (including non-static class member, base subobject, or array element);
* a temporary object (including one created during {{rlp|reference initialization}});
* a {{rlp|string literal}};
* the result of {{rlp|typeid}};
* or the predefined variable {{c|__func__}}.
{{source|1=
template&lt;class T, const char* p&gt; class X {};
X&lt;int, &quot;Studebaker&quot;&gt; x1; // error: string literal as template-argument

template&lt;int* p&gt; class X {};
int a[10];
struct S
{
    int m;
    static int s;
} s;
X&lt;&amp;a[2]&gt; x3;  // error: address of array element
X&lt;&amp;s.m&gt; x4;   // error: address of non-static member
X&lt;&amp;s.s&gt; x5;   // ok: address of static member
X&lt;&amp;S::s&gt; x6;  // ok: address of static member

template&lt;const int&amp; CRI&gt; struct B {};
B&lt;1&gt; b2;     // error: temporary would be required for template argument
int c = 1;
B&lt;c&gt; b1;     // ok
}}
}}
{{rev end}}

====Template type arguments====
A template argument for a type template parameter must be a {{rlp|type#Type_naming|type-id}}, which may name an incomplete type:
{{source|
template&lt;typename T&gt; class X {}; // class template

struct A; // incomplete type
typedef struct {} B; // type alias to an unnamed type

int main()
{
    X&lt;A&gt; x1; // ok: 'A' names a type
    X&lt;A*&gt; x2; // ok: 'A*' names a type
    X&lt;B&gt; x3; // ok: 'B' names a type
}
}}

====Template template arguments====
A template argument for a template template parameter must be an {{rlp|identifiers#In_expressions|id-expression}} which names a class template or a template alias.

When the argument is a class template, only the primary template is considered when matching the parameter. The partial specializations, if any, are only considered when a specialization based on this template template parameter happens to be instantiated.

{{source|1=
template&lt;typename T&gt; class A { int x; }; // primary template
template&lt;class T&gt; class A&lt;T*&gt; { long x; }; // partial specialization

// class template with a template template parameter V
template&lt;template&lt;typename&gt; class V&gt; class C
{
    V&lt;int&gt; y; // uses the primary template
    V&lt;int*&gt; z; // uses the partial specialization
};

C&lt;A&gt; c; // c.y.x has type int, c.z.x has type long
}}

To match a template template argument {{tt|A}} to a template template parameter {{tt|P}}, {{rev inl|until=c++14|each of the template parameters of {{tt|A}} must match corresponding template parameters of {{tt|P}} exactly}}{{rev inl|since=c++14&lt;!--DR CWG 150 --&gt;|{{mark unreviewed dr|CWG}}{{tt|P}} must be at least as specialized as {{tt|A}}}}. If {{tt|P}}'s parameter list includes a {{rlp|parameter_pack|parameter pack}}, zero or more template parameters (or parameter packs) from {{tt|A}}'s template parameter list are matched by it.

{{source|1=
template&lt;typename T&gt; struct eval; // primary template 

template&lt;template&lt;typename, typename...&gt; class TT, typename T1, typename... Rest&gt;
struct eval&lt;TT&lt;T1, Rest...&gt;&gt; {}; // partial specialization of eval

template&lt;typename T1&gt; struct A;
template&lt;typename T1, typename T2&gt; struct B;
template&lt;int N&gt; struct C;
template&lt;typename T1, int N&gt; struct D;
template&lt;typename T1, typename T2, int N = 17&gt; struct E;

eval&lt;A&lt;int&gt;&gt; eA; // ok: matches partial specialization of eval
eval&lt;B&lt;int, float&gt;&gt; eB; // ok: matches partial specialization of eval
eval&lt;C&lt;17&gt;&gt; eC; // error: C does not match TT in partial specialization because
                // TT's first parameter is a type template parameter,
                // while 17 does not name a type
eval&lt;D&lt;int, 17&gt;&gt; eD; // error: D does not match TT in partial specialization
                     // because TT's second parameter is a type parameter pack,
                     // while 17 does not name a type
eval&lt;E&lt;int, float&gt;&gt; eE; // error: E does not match TT in partial specialization
                        // because E's third (default) parameter is a non-type
}}

{{source|1=
template&lt;class T&gt; class A { /* ... */ };
template&lt;class T, class U = T&gt; class B { /* ... */ };
template &lt;class ...Types&gt; class C { /* ... */ };

template&lt;template&lt;class&gt; class P&gt; class X { /* ... */ };
X&lt;A&gt; xa; // OK
X&lt;B&gt; xb; // OK in C++14 after CWG 150
         // Error earlier: not an exact match
X&lt;C&gt; xc; // OK in C++14 after CWG 150
         // Error earlier: not an exact match

template&lt;template&lt;class ...&gt; class Q&gt; class Y { /* ... */ };
Y&lt;A&gt; ya; // OK
Y&lt;B&gt; yb; // OK
Y&lt;C&gt; yc; // OK

template&lt;auto n&gt; class D { /* ... */ }; // note: C++17
template&lt;template&lt;int&gt; class R&gt; class Z { /* ... */ };
Z&lt;D&gt; zd; // OK

template &lt;int&gt; struct SI { /* ... */ };
template &lt;template &lt;auto&gt; class&gt; void FA();  // note: C++17
FA&lt;SI&gt;();  // Error
}}

{{rev begin}}
{{rev|since=c++14&lt;!--DR CWG 150 --&gt;|{{mark unreviewed dr|CWG}}
Formally, a template template-parameter {{tt|P}} is at least as specialized as a template template argument {{tt|A}} if, given the following rewrite to two function templates, the function template corresponding to {{tt|P}} is at least as specialized as the function template corresponding to {{tt|A}} according to the partial ordering rules for {{rlp|function template}}s. Given an invented class template {{tt|X }} with the template parameter list of {{tt|A}} (including default arguments):
* Each of the two function templates has the same template parameters, respectively, as {{tt|P}} or {{tt|A}}.
* Each function template has a single function parameter whose type is a specialization of {{tt|X}} with template arguments corresponding to the template parameters from the respective function template where, for each template parameter {{tt|PP}} in the template parameter list of the function template, a corresponding template argument {{tt|AA}} is formed. If {{tt|PP}} declares a parameter pack, then {{tt|AA}} is the pack expansion {{tt|PP...}}; otherwise, {{tt|AA}} is the id-expression {{tt|PP}}.

If the rewrite produces an invalid type, then {{tt|P}} is not at least as specialized as {{tt|A}}.
}}
{{rev end}}

====Default template arguments====
Default template arguments are specified in the parameter lists after the {{c|{{=}}}} sign. Defaults can be specified for any kind of template parameter (type, non-type, or template), but not to parameter packs.

If the default is specified for a template parameter of a primary class template {{rev inl|since=c++14|, primary variable template, }}or alias template, each subsequent template parameter must have a default argument, except the very last one may be a template parameter pack. In a function template, a parameter pack may be followed by more type parameters only if they have defaults or can be deduced from the function arguments.

Default parameters are not allowed
* in the out-of-class definition of a {{rlp|member template}} (they have to be provided in the declaration inside the class body)
* in {{rlp|friend#Template_friends|friend class template}} declarations
{{rev begin}}
{{rev|until=c++11| {{mark unreviewed dr|CWG}}&lt;!-- CWG #226, but the compilers did not apply it to their C++03 mode --&gt;
* in any {{rlp|function template}} declaration or definition
}}
{{rev end}}

{{rev begin}}
{{rev|since=c++11|
On a friend function template declaration, default template arguments are allowed only if the declaration is a definition, and no other declarations of this function appear in this translation unit.
}}
{{rev end}}

Default template arguments that appear in the declarations and the definition are merged similarly to default function arguments:
{{source|1=
template&lt;typename T1, typename T2 = int&gt; class A;
template&lt;typename T1 = int, typename T2&gt; class A;
// the above is the same as the following:
template&lt;typename T1 = int, typename T2 = int&gt; class A;
}}
But the same parameter cannot be given default arguments twice in the same scope
{{source|1=
template&lt;typename T = int&gt; class X;
template&lt;typename T = int&gt; class X {}; // error
}}

The template parameter lists of template template parameters can have their own default arguments, which are only in effect where the template template parameter itself is in scope:

{{source|1=
// class template, with a type template parameter with a default
template&lt;typename T = float&gt; struct B {};

// template template parameter T has a parameter list, which 
// consists of one type template parameter with a default
template&lt;template&lt;typename = float&gt; typename T&gt; struct A
{
    void f();
    void g();
};

// out-of-body member function template definitions
template&lt;template&lt;typename TT&gt; class T&gt;
void A&lt;T&gt;::f()
{
    T&lt;&gt; t; // error: TT has no default in scope
}
template&lt;template&lt;typename TT = char&gt; class T&gt;
void A&lt;T&gt;::g()
{
    T&lt;&gt; t; // ok: t is T&lt;char&gt;
}
}}

{{rlp|access|Member access}} for the names used in a default template parameter is checked at the declaration, not at the point of use:
{{source|1=
class B {};

template&lt;typename T&gt; class C
{
    protected:
        typedef T TT;
};

template&lt;typename U, typename V = typename U::TT&gt; class D: public U {};

D&lt;C&lt;B&gt;&gt;* d; // error: C::TT is protected
}}

{{rev begin}}
{{rev|since=c++14|{{mark unreviewed dr|CWG|2008}}
The default template argument is implicitly instantiated when the value of that default argument is needed, except if the template is used to name a function:
{{source|1=
template&lt;typename T, typename U = int&gt; struct S { };
S&lt;bool&gt;* p; // The default argument for U is instantiated at this point
            // the type of p is S&lt;bool, int&gt;*
}}
}}
{{rev end}}

===Examples===
====Non-type template parameters====
{{example
|code=
#include &lt;iostream&gt;

// simple non-type template parameter
template&lt;int N&gt;
struct S { int a[N]; };

template&lt;const char*&gt;
struct S2 {};

// complicated non-type example
template
&lt;
    char c, // integral type
    int (&amp;ra)[5], // lvalue reference to object (of array type)
    int (*pf)(int), // pointer to function
    int (S&lt;10&gt;::*a)[10] // pointer to member object (of type int[10])
&gt; struct Complicated
{
    // calls the function selected at compile time
    // and stores the result in the array selected at compile time
    void foo(char base)
    {
        ra[4] = pf(c - base);
    }
};

S2&lt;&quot;fail&quot;&gt; s2; // error: string literal cannot be used
char okay[] = &quot;okay&quot;; // static object with linkage
S2&lt; &amp;okay[0] &gt; s2; // error: array element has no linkage
S2&lt;okay&gt; s2; // works

int a[5];
int f(int n) { return n; }

int main()
{
    S&lt;10&gt; s; // s.a is an array of 10 int
    s.a[9] = 4;

    Complicated&lt;'2', a, f, &amp;S&lt;10&gt;::a&gt; c;
    c.foo('0');

    std::cout &lt;&lt; s.a[9] &lt;&lt; a[4] &lt;&lt; '\n';
}
|output=
42
}}
{{todo|more examples}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=150|std=C++14|before=template-template arguments had to match parameter lists of template-template parameters exactly|after=more specialized also allowed}}
{{dr list end}}</text>
      <sha1>a9vlj11mrss94mkwq7ea79pgeufb2ky</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/template specialization</title>
    <ns>0</ns>
    <id>5143</id>
    <revision>
      <id>91980</id>
      <parentid>90604</parentid>
      <timestamp>2017-04-01T05:37:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="9265">{{title|explicit (full) template specialization}}
{{cpp/language/templates/navbar}}
Allows customizing the template code for a given set of template arguments.

===Syntax===
{{sdsc begin}}
{{sdsc|{{ttb|template}} {{ttb|&lt;&gt;}} {{spar|declaration}} }}
{{sdsc end}}

Any of the following can be fully specialized:
# {{rlp|function template}}
# {{rlp|class template}}
# {{mark since c++14}}{{rlp|variable template}}
# {{rlp|member functions|member function}} of a class template
# {{rlp|static|static data member}} of a class template
# {{rlp|nested types|member class}} of a class template
# member {{rlp|enum|enumeration}} of a class template
# {{rlp|member template|member class template}} of a class or class template
# {{rlp|member template#Member function templates|member function template}} of a class or class template

For example, 
{{example|code=
#include &lt;iostream&gt;
template&lt;typename T&gt;   // primary template
struct is_void : std::false_type
{
};
template&lt;&gt;  // explicit specialization for T = void
struct is_void&lt;void&gt; : std::true_type
{
};
int main()
{
    // for any type T other than void, the 
    // class is derived from false_type
    std::cout &lt;&lt; is_void&lt;char&gt;::value &lt;&lt; '\n'; 
    // but when T is void, the class is derived
    // from true_type
    std::cout &lt;&lt; is_void&lt;void&gt;::value &lt;&lt; '\n';
}

}}

===In detail===
Explicit specialization may be declared in any scope where its primary template may be defined (which may be different from the scope where the primary template is defined; such as with out-of-class specialization of a {{rlp|member template}}){{mark unreviewed dr|cwg}}&lt;!--note cwg727 below--&gt;. Explicit specialization has to appear after the non-specialized template declaration.

{{source|
namespace N {
    template&lt;class T&gt; class X { /*...*/ }; // primary template
    template&lt;&gt; class X&lt;int&gt; { /*...*/ }; // specialization in same namespace

    template&lt;class T&gt; class Y { /*...*/ }; // primary template
    template&lt;&gt; class Y&lt;double&gt;; // forward declare specialization for double
}
template&lt;&gt;
class N::Y&lt;double&gt; { /*...*/ }; // OK: specialization in same namespace
}}

Specialization must be declared before the first use that would cause implicit instantiation, in every translation unit where such use occurs:

{{source|
class String {};
template&lt;class T&gt; class Array { /*...*/ };
template&lt;class T&gt; void sort(Array&lt;T&gt;&amp; v) { /*...*/ } // primary template

void f(Array&lt;String&gt;&amp; v) {
    sort(v); // implicitly instantiates sort(Array&lt;String&gt;&amp;), 
}            // using the primary template for sort()

template&lt;&gt;  // ERROR: explicit specialization of sort(Array&lt;String&gt;)
void sort&lt;String&gt;(Array&lt;String&gt;&amp; v); // after implicit instantiation
}}

A template specialization that was declared but not defined can be used just like any other {{rlp|incomplete type}} (e.g. pointers and references to it may be used)
{{source|
template&lt;class T&gt; class X; // primary template
template&lt;&gt; class X&lt;int&gt;; // specialization (declared, not defined)
X&lt;int&gt;* p; // OK: pointer to incomplete type
X&lt;int&gt; x; // error: object of incomplete type
}}

===Explicit specializations of function templates===
When specializing a function template, its template arguments can be omitted if {{rlp|template argument deduction}} can provide them from the function arguments:
{{source|1=
template&lt;class T&gt; class Array { /*...*/ };
template&lt;class T&gt; void sort(Array&lt;T&gt;&amp; v); // primary template
template&lt;&gt; void sort(Array&lt;int&gt;&amp;); // specialization for T = int
// no need to write
// template&lt;&gt; void sort&lt;int&gt;(Array&lt;int&gt;&amp;);
}}

A function with the same name and the same argument list as a specialization is not a specialization (see template overloading in {{rlp|function_template}})

An explicit specialization of a function template is inline only if it is declared with the {{rlp|inline|inline specifier}} (or defined as deleted), it doesn't matter if the primary template is inline.

{{rlp|default arguments|Default function arguments}} cannot be specified in explicit specializations of function templates, member function templates, and member functions of class templates when the class is implicitly instantiated.

An explicit specialization cannot be a {{rlp|friend|friend declaration}}.

If the primary template has a exception specification that isn't {{tt|noexcept(false)}}, the explicit specializations must have a compatible exception specification.

===Members of specializations===
When defining a member of an explicitly specialized class template outside the body of the class, the syntax {{c|template &lt;&gt;}} is not used, except if it's a member of an explicitly specialized member class template, which is specialized as a class template, because otherwise, the syntax would require such definition to begin with {{c|template&lt;parameters&gt;}} required by the nested template

{{source|1=
template&lt; typename T&gt;
struct A {
    struct B {};  // member class 
    template&lt;class U&gt; struct C { }; // member class template
};

template&lt;&gt; // specialization
struct A&lt;int&gt; {
    void f(int); // member function of a specialization
};
// template&lt;&gt; not used for a member of a specialization
void A&lt;int&gt;::f(int) { /* ... */ }

template&lt;&gt; // specialization of a member class
struct A&lt;char&gt;::B {
    void f();
};
// template&lt;&gt; not used for a member of a specialized member class either
void A&lt;char&gt;::B::f() { /* ... */ }

template&lt;&gt; // specialization of a member class template
template&lt;class U&gt; struct A&lt;char&gt;::C {
    void f();
};

// template&lt;&gt; is used when defining a member of an explicitly
// specialized member class template specialized as a class template
template&lt;&gt;
template&lt;class U&gt; void A&lt;char&gt;::C&lt;U&gt;::f() { /* ... */ }
}}


An explicit specialization of a static data member of a template is a definition if the declaration includes an initializer; otherwise, it is a declaration. These definitions must use braces for default initialization:
{{source|
template&lt;&gt; X Q&lt;int&gt;::x; // declaration of a static member
template&lt;&gt; X Q&lt;int&gt;::x (); // error: function declaration
template&lt;&gt; X Q&lt;int&gt;::x {}; // definition of a default-initialized static member
}}

A member or a member template of a class template may be explicitly specialized for a given implicit instantiation of the class template, even if the member or member template is defined in the class template definition.

{{source|1=
template&lt;typename T&gt;
struct A {
    void f(T); // member, declared in the primary template
    void h(T) {} // member, defined in the primary template
    template&lt;class X1&gt; void g1(T, X1); // member template
    template&lt;class X2&gt; void g2(T, X2); // member template
};

// specialization of a member
template&lt;&gt; void A&lt;int&gt;::f(int);
// member specialization OK even if defined in-class
template&lt;&gt; void A&lt;int&gt;::h(int) {}

// out of class member template definition
template&lt;class T&gt;
template&lt;class X1&gt; void A&lt;T&gt;::g1(T, X1) { }

// member template specialization
template&lt;&gt;
template&lt;class X1&gt; void A&lt;int&gt;::g1(int, X1);

// member template specialization
template&lt;&gt;
template&lt;&gt; void A&lt;int&gt;::g2&lt;char&gt;(int, char); // for X2 = char
// same, using template argument deduction (X1 = char)
template&lt;&gt; 
template&lt;&gt; void A&lt;int&gt;::g1(int, char); 
}}

Member or a member template may be nested within many enclosing class templates. In an explicit specialization for such a member, there's a {{c|template&lt;&gt;}} for every
enclosing class template that is explicitly specialized.

{{source|
template&lt;class T1&gt; class A {
    template&lt;class T2&gt; class B {
        void mf();
    };
};
template&lt;&gt; template&lt;&gt; class A&lt;int&gt;::B&lt;double&gt;;
template&lt;&gt; template&lt;&gt; void A&lt;char&gt;::B&lt;char&gt;::mf();
}}

In such a nested declaration, some of the levels may remain unspecialized (except that it can't specialize a class member template if its enclosing class is unspecialized). For each of those levels, the declaration needs {{c|template&lt;arguments&gt;}}, because such specializations are themselves templates:
{{source|
template &lt;class T1&gt; class A {
    template&lt;class T2&gt; class B {
        template&lt;class T3&gt; void mf1(T3); // member template
        void mf2(); // non-template member
     };
};

// specialization
template&lt;&gt; // for the specialized A
template&lt;class X&gt; // for the unspecialized B
class A&lt;int&gt;::B {
    template &lt;class T&gt; void mf1(T);
};

// specialization
template&lt;&gt; // for the specialized A
template&lt;&gt; // for the specialized B
template&lt;class T&gt; // for the unspecialized mf1
void A&lt;int&gt;::B&lt;double&gt;::mf1(T t) { }

// ERROR: B&lt;double&gt; is specialized and is a member template, so its enclosing A
// must be specialized also
template&lt;class Y&gt;
template&lt;&gt; void A&lt;Y&gt;::B&lt;double&gt;::mf2() { }
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=727|std=C++14|before=full specializations not allowed in class scope, even though partial are|after=full specialization allowed in any scope}}
{{dr list end}}

===See also===
* {{rlp|templates}}
* {{rlp|class template}}
* {{rlp|function template}}
* {{rlp|partial specialization}}


[[de:cpp/language/template specialization]]
[[es:cpp/language/template specialization]]
[[fr:cpp/language/template specialization]]
[[it:cpp/language/template specialization]]
[[ja:cpp/language/template specialization]]
[[pt:cpp/language/template specialization]]
[[ru:cpp/language/template specialization]]
[[zh:cpp/language/template specialization]]</text>
      <sha1>kuwu9zn3kre4rhr6emm759liapzjis6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/templates</title>
    <ns>0</ns>
    <id>13160</id>
    <revision>
      <id>90267</id>
      <parentid>86906</parentid>
      <timestamp>2017-02-18T11:27:52Z</timestamp>
      <contributor>
        <ip>88.117.65.85</ip>
      </contributor>
      <comment>added note about class template deduction since C++17</comment>
      <text xml:space="preserve" bytes="5169">{{title|Templates}}
{{cpp/language/templates/navbar}}
A template is a C++ entity that defines one of the following:
* a family of classes ({{rlp|class template}}), which may be {{rlp|member template|nested classes}}
* a family of functions ({{rlp|function template}}), which may be {{rlp|member template|member functions}}
* an alias to a family of types ({{rlp|type alias|alias template}}) {{mark since c++11}}
* a family of variables ({{rlp|variable template}}) {{mark since c++14}}

Templates are parametrized by one or more {{rlp|template parameters}}, of three kinds: type template parameters, non-type template parameters, and template template parameters.

When template arguments are provided or, for {{rlp|function_template#Template argument deduction|function}} {{rev inl|since=c++17| and {{rlp|class_template_deduction|class}}}} templates only, deduced, they are substituted for the template parameters to obtain a ''specialization'' of the template, that is, a specific type or a specific function lvalue. Specializations may also be provided explicitly: {{rlp|template specialization|full specializations}} are allowed for both class and function templates, {{rlp|partial_specialization|partial specializations}} are only allowed for class templates.

When a class template specialization is referenced in context that requires a complete object type, or when a function template specialization is referenced in context that requires a function definition to exist, the template is ''instantiated'' (the code for it is actually compiled), unless the template was already explicitly specialized or explicitly instantiated. Instantiation of a class template doesn't instantiate any of its member functions unless they are also used. At link time, identical instantiations generated by different translation units are merged.

The definition of a template must be visible at the point of implicit instantiation, which is why template libraries typically provide all template definitions in the headers (e.g. [http://www.boost.org/doc/libs/release/more/getting_started/unix-variants.html#header-only-libraries most boost libraries are header-only])

===Syntax===
{{sdsc begin}}
{{sdsc|num=1|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|declaration}} }}
{{sdsc|num=2|{{ttb|export}} {{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|declaration}}|notes={{mark until c++11}}}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|declaration}} | declaration of a {{rlp|class template|class (including struct and union)}}, a {{rlp|member template|member class or member enumeration type}}, a {{rlp|function template|function}} or {{rlp|member template|member function}}, a static data member at namespace scope, {{rev inl|since=c++14|{{rlp|variable template|a variable or static data member at class scope}},}} {{rev inl|since=c++11|or an [[cpp/language/type_alias|alias template]]}} It may also define a [[cpp/language/template_specialization|template specialization]].}}
{{par | {{spar|parameter-list}} | a non-empty comma-separated list of the {{rlp|template parameters}}, each of which is either [[cpp/language/template_parameters#Non-type_template_parameter|non-type parameter]], a [[cpp/language/template_parameters#Type_template_parameter|type parameter]], a [[cpp/language/template_parameters#Template_template_parameter|template parameter]], or a [[cpp/language/parameter_pack|parameter pack]] of any of those.}}
{{par end}}

{{rev begin}}
{{rev | until=c++11 | {{tt|export}} was an optional modifier which declared the template as ''exported'' (when used with a class template, it declared all of its members exported as well). Files that instantiated exported templates did not need to include their definitions: the declaration was sufficient. Implementations of {{tt|export}} were rare and disagreed with each other on details.
}}
{{rev end}}

{{todo|core syntax, template parameters, and instantiations, take content common between class_template and function_template}}

===Templated entity===
Besides class/function/variable templates themselves, various entities defined within a template are never considered to be entities that can be separately instantiated (this in turn includes default arguments, exception-specifications, non-static data member initializers, etc, of those entities). As a result, these non-template entities undergo template instantiation: the dependent names are looked up, the semantic constraints are checked, and any templates used are instantiated as part of the instantiation of the template within which this entity is declared. Together with templates, such entities are known as &quot;templated entities&quot; (or, in some sources, &quot;temploids&quot;)

All of the following are templated entities:
* a class/function/variable template
* a member of a templated entity (such as a non-template member function of a class template)
* an enumerator of an enumeration that is a templated entity
* any entity defined or created within a templated entity: a local class, a local variable, a friend function, etc
* the closure type of a lambda expression that appears in the declaration of a templated entity</text>
      <sha1>iyr4waxukgv5u8grzzc6roivdh8dbdu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/this</title>
    <ns>0</ns>
    <id>5291</id>
    <revision>
      <id>91992</id>
      <parentid>88480</parentid>
      <timestamp>2017-04-01T05:38:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="4630">{{title|this pointer}}
{{cpp/language/classes/navbar}}

===Syntax===
{{sdsc begin}}
{{sdsc | {{ttb|this}} }}
{{sdsc end}}

The keyword {{tt|this}} is a {{rlp|value_category|prvalue}} {{rlp|expressions|expression}} whose value is the address of the object, on which the member function is being called. It can appear in the following contexts:
@1@ Within the body of any non-static {{rlp|member functions|member function}}, including {{rlp|initializer list|member initializer list}}
@2@ within the {{rlp|function|declaration}} of a non-static member function anywhere after the (optional) cv-qualifier sequence, including {{rlp|except_spec|dynamic exception specification}}{{mark deprecated}}, {{rlp|noexcept_spec|noexcept specification}}{{mark c++11}}, and the trailing return type{{mark since c++11}}
@3@ within {{rlp|data_members#Member_initialization|default member initializer}} {{mark since c++11}}

The type of {{tt|this}} in a member function of class {{tt|X}} is {{tt|X*}} (pointer to X). If the member function is {{rlp|member_functions|cv-qualified}}, the type of {{tt|this}} is {{tt|cv X*}} (pointer to identically cv-qualified X). Since constructors and destructors cannot be cv-qualified, the type of {{tt|this}} in them is always {{tt|X*}}, even when constructing or destroying a const object.

When a non-static class member is used in any of the contexts where the {{tt|this}} keyword is allowed (non-static member function bodies, member initializer lists, default member initializers), the implicit {{ttb|this-&gt;}} is automatically added before the name, resulting in a member access expression (which, if the member is a virtual member function, results in a virtual function call).

In class templates, {{tt|this}} is a {{rlp|dependent name|dependent expression}}, and explicit {{tt|this-&gt;}} may be used to force another expression to become dependent.

{{rlp|constructor|During construction}} of an {{mark unreviewed dr|cwg}}&lt;!-- was only const until cwg2271 --&gt; object, if the value of the object or any of its subobjects is accessed through a glvalue that is not obtained, directly or indirectly, from the constructor's {{tt|this}} pointer, the value of the object or subobject thus obtained is unspecified. In other words, the this pointer cannot be aliased in a constructor:
{{source|1=
extern struct D d;
struct D {
    D(int a) : a(a), b(d.a) {} // b(a) or b(this-&gt;a) would be correct
    int a, b;
};
D d = D(1);   // because b(d.a) did not obtain a through this, d.b is now unspecified
}}

It is possible to execute {{c|delete this;}}, if the program can guarantee that the object was allocated by {{c|new}}, however, this renders every pointer to the deallocated object invalid, including the {{tt|this}} pointer itself: after {{c|delete this;}} returns, such member function cannot refer to a member of a class (since this involves an implicit dereference of {{tt|this}}) and no other member function may be called. This is used, for example, in the member function of the control block of {{lc|std::shared_ptr}} responsible for decrementing the reference count, when the last reference to the managed object goes out of scope.
{{source|1=
&lt;!-- libreoffice i18nlangtag/source/languagetag/simple-langtag.cxx --&gt;
class ref
{
    // ...
    void incRef() { ++mnRef; }
    void decRef() { if (--mnRef == 0) delete this; }
};
}}

===Example===
{{source
 | 
 | code=
class T
{
    int x;

    void foo()
    {
        x = 6;       // same as this-&gt;x = 6;
        this-&gt;x = 5; // explicit use of this-&gt;
    }

    void foo() const
    {
//        x = 7; // Error: *this is constant
    }

    void foo(int x) // parameter x shadows the member with the same name
    {
        this-&gt;x = x; // unqualified x refers to the parameter
                     // 'this-&gt;' required for disambiguation
    }

    int y;
    T(int x) : x(x), // uses parameter x to initialize member x
               y(this-&gt;x) // uses member x to initialize member y
    {}

    T&amp; operator= ( const T&amp; b )
    {
        x = b.x;
        return *this; // many overloaded operators return *this
    }
};

class Outer {
    int a[sizeof(*this)]; // error: not inside a member function
    unsigned int sz = sizeof(*this); // OK: in default member initializer
    void f() {
        int b[sizeof(*this)]; // OK
        struct Inner {
            int c[sizeof(*this)]; // error: not inside a member function of Inner
        };
    }
}
}}

[[de:cpp/language/this]]
[[es:cpp/language/this]]
[[fr:cpp/language/this]]
[[it:cpp/language/this]]
[[ja:cpp/language/this]]
[[pt:cpp/language/this]]
[[ru:cpp/language/this]]
[[zh:cpp/language/this]]</text>
      <sha1>q45bpiiedcwu2192gy13en9tyqs6n2h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/throw</title>
    <ns>0</ns>
    <id>714</id>
    <revision>
      <id>91938</id>
      <parentid>91814</parentid>
      <timestamp>2017-03-31T20:13:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="9222">{{title|throw expression}}
{{cpp/language/exceptions/navbar}}
Signals an erroneous condition and executes an error handler.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|throw}} {{spar|expression}} }}
{{sdsc | num=2 | {{ttb|throw}} }}
{{sdsc end}}

===Explanation===

:{{small|See {{rlp|try_catch | try-catch block}} for more information about ''try'' and ''catch'' (exception handler) blocks}} 

@1@ First, {{rlp|copy initialization|copy-initializes}} the ''exception object'' from {{spar|expression}} (this may call the move constructor for rvalue expression, and the copy/move may be subject to {{rlp|copy elision}}), then transfers control to the  {{rlp|try_catch|exception handler}} with the matching type whose compound statement or member initializer list was most recently entered and not exited by this thread of execution. {{rev inl|since=c++14|{{mark unreviewed dr|CWG|1863}}Even if copy initialization selects the move constructor, copy initialization from lvalue must be well-formed, and the destructor must be accessible}}
@2@ Rethrows the currently handled exception. Abandons the execution of the current catch block and passes control to the next matching exception handler (but not to another catch clause after the same try block: its compound-statement is considered to have been 'exited'), reusing the existing exception object: no new objects are made. This form is only allowed when an exception is presently being handled (it calls {{lc|std::terminate}} if used otherwise). The catch clause associated with a {{rlp|function-try-block}} must exit via rethrowing if used on a constructor.

See {{lc|std::terminate}} and {{lc|std::unexpected}} for the handling of errors that arise during exception handling.

===The exception object===
The exception object is a temporary object in unspecified storage that is constructed by the {{tt|throw}} expression. 

The type of the ''exception object'' is the static type of {{spar|expression}} with top-level {{rlp|cv|cv-qualifiers}} removed. Array and function types are adjusted to pointer and pointer to function types, respectively. If the type of the exception object would be an {{rlp|incomplete type}} or pointer to incomplete type other than pointer to (cv-qualified) void, the throw-expression is a compile-time error. If the type of {{spar|expression}} is a class type, its copy/move constructor and destructor must be accessible even if {{rlp|copy elision}} takes place.

Unlike other temporary objects, the exception object is considered to be an lvalue argument when initializing the catch clause parameters, so it can be caught by lvalue reference, modified, and rethrown.

The exception object persists until the last catch clause exits other than by rethrowing (if not by rethrowing, it is destroyed immediately after the destruction of the catch clause's parameter), or until the last {{lc|std::exception_ptr}} that references this object is destroyed (in which case the exception object is destroyed just before the destructor of {{lc|std::exception_ptr}} returns.

===Stack unwinding===
Once the exception object is constructed, the control flow works backwards (up the call stack) until it reaches the start of a {{rlp|try_catch|try block}}, at which point the parameters of all associated {{tt|catch}} blocks are compared, in order of appearance, with the type of the exception object to find a match (see {{rlp|try_catch|try-catch}} for details on this process). If no match is found, the control flow continues to unwind the stack until the next {{tt|try}} block, and so on. If a match is found, the control flow jumps to the matching {{tt|catch}} block.

As the control flow moves up the call stack, destructors are invoked for all objects with {{rlp|storage_duration|automatic storage duration}} constructed, but not yet destroyed, since the corresponding try-block was entered, in reverse order of completion of their constructors. {{rev inl|since=c++14|{{mark unreviewed dr|CWG|2176}}If an exception is thrown from a destructor of a local variable or of a temporary used in a {{rlp|return}} statement, the destructor for the object returned from the function is also invoked.}}

If an exception is thrown from a constructor or (rare) from a destructor of an object (regardless of the object's storage duration), destructors are called for all fully-constructed non-static {{rev inl|until=c++14|non-variant }}members and base classes, in reverse order of completion of their constructors. {{rev inl|since=c++14|{{mark unreviewed dr|CWG|1866}}Variant members of union-like classes are only destroyed in the case of unwinding from constructor, and if the active member changed between initialization and destruction, the behavior is undefined.}}
{{rev begin}}
{{rev|since=c++11| If a delegating constructor exits with an exception after the non-delegating constructor successfully completed, the destructor for this object is called.}}
{{rev end}}
If the exception is thrown from a constructor that is invoked by a {{rlp|new|new-expression}}, the matching [[cpp/memory/new/operator_delete|deallocation function]] is called, if available.

This process is called ''stack unwinding''.

If any function that is called directly by the stack unwinding mechanism, after initialization of the exception object and before the start of the exception handler, exits with an exception, {{lc|std::terminate}} is called. Such functions include {{rlp|destructor}}s of objects with automatic storage duration whose scopes are exited, and the copy constructor of the exception object that is called ({{rlp|copy elision|if not elided}}) to initialize catch-by-value arguments.

If an exception is thrown and not caught, including exceptions that escape the initial function of {{lc|std::thread}}, the main function, and the constructor or destructor of any static or thread-local objects, then {{lc|std::terminate}} is called. It is implementation-defined whether any stack unwinding takes place for uncaught exceptions.

===Notes===
When rethrowing exceptions, the second form must be used to avoid object slicing in the (typical) case where exception objects use inheritance:
{{source|
try {
    std::string(&quot;abc&quot;).substr(10); // throws std::length_error
} catch(const std::exception&amp; e) {
    std::cout &lt;&lt; e.what() &lt;&lt; '\n';
//  throw e; // copy-initializes a new exception object of type std::exception
    throw;   // rethrows the exception object of type std::length_error
}
}}

The throw-expression is classified as {{rlp|value_category|prvalue expression}} of type {{c|void}}. Like any other expression, it may be a sub-expression in another expression, most commonly in the {{rlp|operator_other#Conditional_operator|conditional operator}}:
{{source|1=
double f(double d)
{
    return d &gt; 1e7 ? throw std::overflow_error(&quot;too big&quot;) : d;
}
int main()  
{
    try {
        std::cout &lt;&lt; f(1e10) &lt;&lt; '\n';
    } catch (const std::overflow_error&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
}}

===Keywords===

{{ltt|cpp/keyword/throw}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;

struct A {
    int n;
    A(int n = 0): n(n) { std::cout &lt;&lt; &quot;A(&quot; &lt;&lt; n &lt;&lt; &quot;) constructed successfully\n&quot;; }
    ~A() { std::cout &lt;&lt; &quot;A(&quot; &lt;&lt; n &lt;&lt; &quot;) destroyed\n&quot;; }
};

int foo()
{
    throw std::runtime_error(&quot;error&quot;);
}

struct B {
    A a1, a2, a3;
    B() try : a1(1), a2(foo()), a3(3) {
        std::cout &lt;&lt; &quot;B constructed successfully\n&quot;;
    } catch(...) {
    	std::cout &lt;&lt; &quot;B::B() exiting with exception\n&quot;;
    }
    ~B() { std::cout &lt;&lt; &quot;B destroyed\n&quot;; }
};

struct C : A, B {
    C() try {
        std::cout &lt;&lt; &quot;C::C() completed successfully\n&quot;;
    } catch(...) {
        std::cout &lt;&lt; &quot;C::C() exiting with exception\n&quot;;
    }
    ~C() { std::cout &lt;&lt; &quot;C destroyed\n&quot;; }
};

int main () try
{
    // creates the A base subobject
    // creates the a1 member of B
    // fails to create the a2 member of B
    // unwinding destroys the a1 member of B
    // unwinding destroys the A base subobject
    C c;
} catch (const std::exception&amp; e) {
    std::cout &lt;&lt; &quot;main() failed to create C with: &quot; &lt;&lt; e.what();
}
|output=
A(0) constructed successfully
A(1) constructed successfully
A(1) destroyed
B::B() exiting with exception
A(0) destroyed
C::C() exiting with exception
main() failed to create C with: error
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1866|std=C++14|before=variant members were leaked on stack unwinding from constructor|after=variant members destroyed}}
{{dr list item|wg=cwg|dr=1863|std=C++14|before=copy constructor was not required for move-only exception objects when thrown, but copying allowed later|after=copy constructor required}}
{{dr list item|wg=cwg|dr=2176|std=C++14|before=throw from a local variable dtor could skip return value destructor|after=function return value added to unwinding}}
{{dr list end}}

===See also===
* {{rlp|try_catch | try-catch block}}
* {{rlp|noexcept_spec | noexcept specifier}}
* {{rlp|except_spec | exception specifications}}

[[de:cpp/language/throw]]
[[es:cpp/language/throw]]
[[fr:cpp/language/throw]]
[[it:cpp/language/throw]]
[[ja:cpp/language/throw]]
[[pt:cpp/language/throw]]
[[ru:cpp/language/throw]]
[[zh:cpp/language/throw]]</text>
      <sha1>5tldg9g8p6p0nzng1zj8eowhltrz4tc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/transactional memory</title>
    <ns>0</ns>
    <id>14480</id>
    <revision>
      <id>92005</id>
      <parentid>87870</parentid>
      <timestamp>2017-04-01T20:40:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Atomic blocks */ this thing doesn't exist any more</comment>
      <text xml:space="preserve" bytes="10890">{{title|Transactional memory}}
{{cpp/language/statements/navbar}}

{{fmbox | class=noprint | style=font-size: 0.8em | text='''Work in progress''' This page is under construction }}

{{fmbox | class=noprint | style=font-size: 0.8em | text='''Experimental Feature''' The functionality described on this page is part of the Transactional Memory Technical Specification ISO/IEC TS 19841:2015 {{mark since tm_ts}} }}

Transactional memory is a concurrency synchronization mechanism that combines groups of statements in transactions, that are
* atomic (either all statements occur, or nothing occurs)
* isolated (statements in a transaction may not observe half-written writes made by another transaction, even if they execute in parallel)

Typical implementations use hardware transactional memory where supported and to the limits that it is available (e.g. until the changeset is saturated) and fall back to software transactional memory, usually implemented with optimistic concurrency: if another transaction updated some of the variables used by a transaction, it is silently retried. For that reason, retriable transactions (&quot;atomic blocks&quot;) can only call transaction-safe functions.

Note that accessing a variable in a transaction and out of a transaction without other external synchronization is a data race.

If feature testing is supported, the features described here are indicated by the macro constant {{c|__cpp_transactional_memory}} with a value equal or greater {{c|201505}}.

===Synchronized blocks===

{{ttb|synchronized}} {{spar|compound-statement}}

Executes the [[cpp/language/statements#Compound_statements|compound statement]] as if under a global lock: all outermost synchronized blocks in the program execute in a single total order. The end of each synchronized block synchronizes with the beginning of the next synchronized block in that order. Synchronized blocks that are nested within other synchronized blocks have no special semantics.

Synchronized blocks are not transactions (unlike the atomic blocks below) and may call transaction-unsafe functions.

{{example|code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;thread&gt;
int f()
{
    static int i = 0;
    synchronized { // begin synchronized block
        std::cout &lt;&lt; i &lt;&lt; &quot; -&gt; &quot;;
        ++i;       // each call to f() obtains a unique value of i
        std::cout &lt;&lt; i &lt;&lt; '\n';
        return i; // end synchronized block
    }
}
int main()
{
    std::vector&lt;std::thread&gt; v(10);
    for(auto&amp; t: v)
        t = std::thread([]{ for(int n = 0; n &lt; 10; ++n) f(); });
    for(auto&amp; t: v)
        t.join();
}|output=
0 -&gt; 1
1 -&gt; 2
2 -&gt; 3
...
99 -&gt; 100
}}

Leaving a synchronized block by any means (reaching the end, executing goto, break, continue, or return, or throwing an exception) exits the block and synchronizes-with the next block in the single total order if the exited block was an outer block. The behavior is undefined if {{lc|std::longjmp}} is used to exit a synchronized block.

Entering a synchronized block by goto or switch is not allowed. 

Although synchronized blocks execute as-if under a global lock, the implementations are expected to examine the code within each block and use optimistic concurrency (backed up by hardware transactional memory where available) for transaction-safe code and minimal locking for non-transaction safe code. When a synchronized block makes a call to a non-inlined function, the compiler may have to drop out of speculative execution and hold a lock around the entire call unless the function is declared {{tt|transaction_safe}} (see below) or the attribute {{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;optimize_for_synchronized]]}} (see below) is used.

===Atomic blocks===
{{todo}}

{{ttb|atomic_noexcept}} {{spar|compound-statement}}

{{ttb|atomic_cancel}} {{spar|compound-statement}}

{{ttb|atomic_commit}} {{spar|compound-statement}}

@1@ If an exception is thrown, {{c|std::abort}} is called
@2@ If an exception is thrown, {{c|std::abort}} is called, unless the exception is one of the exceptions uses for transaction cancellation (see below) in which case the transaction is ''cancelled'': the values of all memory locations in the program that were modified by side effects of the operations of the atomic block are restored to the values they had at the time the start of the atomic block was executed, and the exception continues stack unwinding as usual.
@3@ If an exception is thrown, the transaction is committed normally.

The exceptions used for transaction cancellation in {{tt|atomic_cancel}} blocks are {{lc|std::bad_alloc}},&lt;!-- {{lc|std::bad_array_length}},--&gt; {{lc|std::bad_array_new_length}}, {{lc|std::bad_cast}}, {{lc|std::bad_typeid}}, {{lc|std::bad_exception}}, {{lc|std::exception}} and all standard library exceptions derived from it, and the special exception type  {{ltt|cpp/error/tx_exception|std::tx_exception&lt;T&gt;}}

The {{spar|compound-statement}} in an atomic block is not allowed to execute any expression or statement or call any function that isn't {{tt|transaction_safe}} (this is a compile time error)

{{source|1=
// each call to f() retrieves a unique value of i, even when done in parallel
int f()
{
   static int i = 0;
   atomic_noexcept { // begin transaction
//   printf(&quot;before %d\n&quot;, i); // error: cannot call a non transaction-safe function
      ++i;
      return i; // commit transaction
   }
}
}}

Leaving an atomic block by any means other than exception (reaching the end, goto, break, continue, return) commits the transaction. The behavior is undefined if {{lc|std::longjmp}} is used to exit an atomic block.

===Transaction-safe functions===
{{todo}}
A function can be explicitly declared to be transaction-safe by using the keyword {{c|transaction_safe}} in its declaration.

{{todo}}
In a {{rlp|lambda}} declaration, it appears either immediately after the capture list, or immediately after the (keyword {{tt|mutable}} (if one is used).
{{todo}}


{{source|1=
extern volatile int * p = 0;
struct S {
  virtual ~S();
};
int f() transaction_safe {
  int x = 0; // ok: not volatile
  p = &amp;x; // ok: the pointer is not volatile
  int i = *p; // error: read through volatile glvalue
  S s; // error: invocation of unsafe destructor
}
}}

{{source|1=
int f(int x) { // implicitly transaction-safe
  if (x &lt;= 0)
    return 0;
  return x + f(x-1);
}
}}

If a function that is not transaction-safe is called through a reference or pointer to a non-transaction-safe function, the behavior is undefined.


&lt;!-- implicit conversion from lambda to pointer is transaction-safe --&gt;


Pointers to transaction-safe functions and pointers to transaction-safe member functions are implicitly convertible to pointers to functions and pointers to member functions respectively. It is unspecified if the resulting pointer compares equal to the original.

====Transaction-safe virtual functions====

{{todo}}

If the final overrider of a {{tt|transaction_safe_dynamic}} function is not declared {{tt|transaction_safe}}, calling it in an atomic block is undefined behavior.

===Standard library===

Besides introducing the new exception template {{ltt|cpp/error/tx_exception|std::tx_exception}}, the transactional memory technical specification makes the following changes to the standard library:

* makes the following functions explicitly {{tt|transaction_safe}}:
:* {{lc|std::forward}}, {{lc|std::move}}, {{lc|std::move_if_noexcept}}, {{lc|std::align}}, {{lc|std::abort}}, global default {{lc|operator new}}, global default {{lc|operator delete}}, {{lc|std::allocator::construct}} if the invoked constructor is transaction-safe, {{lc|std::allocator::destroy}} if the invoked destructor is transaction-safe, {{lc|std::get_temporary_buffer}}, {{lc|std::return_temporary_buffer}}, {{lc|std::addressof}},  {{lc|std::pointer_traits::poiner_to}}, each non-virtual member function of all exception types that support transaction cancellation (see {{tt|atomic_cancel}} above) {{todo|there's more}}
* makes the following functions explicitly {{tt|transaction_safe_dynamic}} 
:* each virtual member function of all exception types that support transaction cancellation (see {{tt|atomic_cancel}} above)
e* requires that all operations that are transaction-safe on an {{concept|Allocator}} X are transaction-safe on {{tt|X::rebind&lt;&gt;::other}}

===Attributes===
The attribute  {{c|[[optimize_for_synchronized]]}} may be applied to a declarator in a function declaration and must appear on the first declaration of the function.

If a function is declared {{c|[[optimize_for_synchronized]]}} in one translation unit and the same function is declared without {{c|[[optimize_for_synchronized]]}} in another translation unit, the program is ill-formed; no diagnostic required.

It indicates that a the function definition should be optimized for invocation from a {{c|synchronized}} statement. In particular, it avoids serializing synchronized blocks that make a call to a function that is transaction-safe for the majority of calls, but not for all calls (e.g. hash table insertion that may have to rehash, allocator that may have to request a new block, a simple function that may rarely log)

{{source|1=
std::atomic&lt;bool&gt; rehash{false};

// maintenance thread runs this loop
void maintenance_thread(void*) {
    while (!shutdown) {
        synchronized {
            if (rehash) {
                hash.rehash();
                rehash = false;
            }
        }
    }
}

// worker threads execute hundreds of thousands of calls to this function 
// every second. Calls to insert_key() from synchronized blocks in other
// translation units will cause those blocks to serialize, unless insert_key()
// is marked [[optimize_for_synchronized]]
[[optimize_for_synchronized]] void insert_key(char* key, char* value) {
  bool concern = hash.insert(key, value);
  if (concern) rehash = true;
}
}}
GCC assembly without the attribute: the entire function is serialized
&lt;pre&gt;insert_key(char*, char*):
	subq	$8, %rsp
	movq	%rsi, %rdx
	movq	%rdi, %rsi
	movl	$hash, %edi
	call	Hash::insert(char*, char*)
	testb	%al, %al
	je	.L20
	movb	$1, rehash(%rip)
	mfence
.L20:
	addq	$8, %rsp
	ret
&lt;/pre&gt;
GCC assembly with the attribute:
&lt;pre&gt;transaction clone for insert_key(char*, char*):
	subq	$8, %rsp
	movq	%rsi, %rdx
	movq	%rdi, %rsi
	movl	$hash, %edi
	call	transaction clone for Hash::insert(char*, char*)
	testb	%al, %al
	je	.L27
	xorl	%edi, %edi
	call	_ITM_changeTransactionMode // Note: this is the serialization point
	movb	$1, rehash(%rip)
	mfence
.L27:
	addq	$8, %rsp
	ret
&lt;/pre&gt;

{{todo|check assembly with trunk, also show caller-side changes}}

===Notes===
{{todo|experience notes from Wyatt paper/talk}}

===Compiler support===
This technical specification is supported by GCC as of version 6.1 (requires {{c|-fgnu-tm}} to enable). An older variant of this specification was [http://www-users.cs.umn.edu/~boutcher/stm/ supported in GCC] as of 4.7.</text>
      <sha1>0aumhs19093hk3nnyz249rr7puyn3z3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/translation phases</title>
    <ns>0</ns>
    <id>9900</id>
    <revision>
      <id>89773</id>
      <parentid>87934</parentid>
      <timestamp>2017-01-25T09:47:31Z</timestamp>
      <contributor>
        <username>Gubbins</username>
        <id>3701</id>
      </contributor>
      <minor/>
      <comment>grammar/punctuation</comment>
      <text xml:space="preserve" bytes="6331">{{title|Phases of translation}}
{{cpp/language/basics/navbar}}
The C++ source file is processed by the compiler as if the following phases take place, in this exact order:

===Phase 1===
@1@ The individual bytes of the source code file are mapped (in implementation-defined manner) to the characters of the ''basic source character set''. In particular, OS-dependent end-of-line indicators are replaced by newline characters. The ''basic source character set'' consists of 96 characters:
:@a@ 5 whitespace characters (space, horizontal tab, vertical tab, form feed, new-line)
:@b@ 10 digit characters from {{c|'0'}} to {{c|'9'}}
:@c@ 52 letters from {{c|'a'}} to {{c|'z'}} and from {{c|'A'}} to {{c|'Z'}}
:@d@ 29 punctuation characters: {{c|_ { } [ ] # ( ) &lt; &gt; % : ; . ? * + - / ^ &amp; {{!}} ~ ! {{=}} , \ &quot; '}}
@2@ Any source file character that cannot be mapped to a character in the basic source character set is replaced by its {{rlp|escape|universal character name}} (escaped with {{tt|\u}} or {{tt|\U}}) or by some implementation-defined form that is handled equivalently.

{{rev begin}}
{{rev|until=c++17|
@3@ {{rlp|operator_alternative|Trigraph sequences}} are replaced by corresponding single-character representations.
}}
{{rev end}}

===Phase 2===
@1@ Whenever backslash appears at the end of a line (immediately followed by the newline character), both backslash and newline are deleted, combining two physical source lines into one logical source line. This is a single-pass operation; a line ending in two backslashes followed by an empty line does not combine three lines into one. If a universal character name ({{c|\uXXX}}) is formed in this phase, the behavior is undefined.
@2@ If a non-empty source file does not end with a newline character after this step (whether it had no newline originally, or it ended with a backslash), {{rev inl|until=c++11|the behavior is undefined}}{{rev inl|since=c++11|a terminating newline character is added}}.

===Phase 3===
@1@ The source file is decomposed into [[cpp/comment|comments]], sequences of whitespace characters (space, horizontal tab, new-line, vertical tab, and form-feed), and ''preprocessing tokens'', which are the following:
:@a@ header names such as {{c|&lt;iostream&gt;}} or {{c|&quot;myfile.h&quot;}} (only recognized after {{ltt|cpp/preprocessor/include|#include}})
:@b@ {{rlp|identifiers|identifiers}}
:@c@ preprocessing numbers
:@d@ {{rlp|character_literal|character}} and {{rlp|string_literal|string}} literals {{rev inl|since=c++11|, including {{rlp|user_literal|user-defined}}}}
:@e@ operators and punctuators (including {{rlp|operator_alternative|alternative tokens}}), such as {{c|+}}, {{c|&lt;&lt;{{=}}}}, {{c|new}}, {{c|&lt;%}}, {{c|##}}, or {{c|and}}
:@f@ individual non-whitespace characters that do not fit in any other category

{{rev begin}}
{{rev|since=c++11|
@2@ Any transformations performed during phases 1 and 2 between the initial and the final double quote of any {{rlp|string literal|raw string literal}} are reverted.}}
{{rev end}}

@3@ Each comment is replaced by one space character.

Newlines are kept, and it's unspecified whether non-newline whitespace sequences may be collapsed into single space characters.

===Phase 4===
@1@ The [[cpp/preprocessor|preprocessor]] is executed.
@2@ Each file introduced with the [[cpp/preprocessor/include|#include]] directive goes through phases 1 through 4, recursively.
@3@ At the end of this phase, all preprocessor directives are removed from the source.

===Phase 5===
@1@ All characters in {{rlp|character_literal|character literals}} and {{rlp|string_literal|string literals}} are converted from the source character set to the ''execution character set'' (which may be a multibyte character set such as UTF-8, as long as the 96 characters of the ''basic source character set'' listed in phase 1 have single-byte representations).
@2@ {{rlp|escape|Escape sequences}} and universal character names in character literals and non-raw string literals are expanded and converted to the ''execution character set''.
If the character specified by a universal character name isn't a member of the execution character set, the result is implementation-defined, but is guaranteed not to be a null (wide) character.

Note: the conversion performed at this stage can be controlled by command line options in some implementations: gcc and clang use {{c|-finput-charset}} to specify the encoding of the source character set, {{c|-fexec-charset}} and {{c|-fwide-exec-charset}} to specify the encodings of the execution character set in the string and character literals {{rev inl|since=c++11|that don't have an encoding prefix}}.

===Phase 6===
Adjacent {{rlp|string literal|string literals}} are concatenated.

===Phase 7===
Compilation takes place: each preprocessing token is converted to a token. The tokens are syntactically and semantically analyzed and translated as a translation unit.

===Phase 8===
Each translation unit is examined to produce a list of required template instantiations, including the ones requested by {{rlp|class_template|explicit instantiations}}. The definitions of the templates are located, and the required instantiations are performed to produce ''instantiation units''.

===Phase 9===
Translation units, instantiation units, and library components needed to satisfy external references are collected into a program image which contains information needed for execution in its execution environment.

===Notes===
Some compilers don't implement instantiation units (also known as [http://docs.oracle.com/cd/E18659_01/html/821-1383/bkagr.html#scrolltoc template repositories] or [http://www-01.ibm.com/support/knowledgecenter/SSXVZZ_12.1.0/com.ibm.xlcpp121.linux.doc/compiler_ref/fcat_template.html?lang=en template registries]) and simply compile each template instantiation at Phase 7, storing the code in the object file where it is implicitly or explicitly requested, and then the linker collapses these compiled instantiations into one at Phase 9.

===References===
{{ref std c++11}}
{{ref std | section=2.2 | title=Phases of translation | id=lex.phases}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=2.1 | title=Phases of translation | id=lex.phases}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/translation_phases | phases of translation}}
{{dsc end}}</text>
      <sha1>lk0xymozvy6hnx3qcwg8ze5oboc9vq0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/try catch</title>
    <ns>0</ns>
    <id>5203</id>
    <revision>
      <id>87232</id>
      <parentid>87231</parentid>
      <timestamp>2016-08-04T07:08:59Z</timestamp>
      <contributor>
        <username>Maggyero</username>
        <id>4316</id>
      </contributor>
      <minor/>
      <comment>corrected indentation</comment>
      <text xml:space="preserve" bytes="9760">{{title|try-block}}
{{cpp/language/exceptions/navbar}}

Associates one or more exception handlers (catch-clauses) with a compound statement.

===Syntax===
{{sdsc begin}}
{{sdsc|1=
{{ttb|try}} {{spar|compound-statement}} {{spar|handler-sequence}}
}}
{{sdsc end}}

where {{spar|handler-sequence}} is a sequence of one or more {{spar|handler}}s, which have the following syntax:

{{sdsc begin}}
{{sdsc|num=1|1=
{{ttb|catch}} {{ttb|(}} {{spar|attr}}{{mark optional}} {{spar|type-specifier-seq}} {{spar|declarator}} {{ttb|)}} {{spar|compound-statement}}
}}
{{sdsc|num=2|1=
{{ttb|catch}} {{ttb|(}} {{spar|attr}}{{mark optional}} {{spar|type-specifier-seq}} {{spar|abstract-declarator}}{{mark optional}} {{ttb|)}} {{spar|compound-statement}}
}}
{{sdsc|num=3|1=
{{ttb|catch}} {{ttb|(}} {{ttb|...}} {{ttb|)}} {{spar|compound-statement}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|compound-statement}} | brace-enclosed {{rlp|statements#Compound_statements|sequence of statements}}}}
{{par | {{spar|attr}}{{mark c++11}} | optional list of {{rlp|attributes}}, applies to the formal parameter}}
{{par | {{spar|type-specifier-seq}} | part of a formal parameter declaration, same as in a {{rlp|function}} parameter list }}
{{par | {{spar|declarator}} | part of a formal parameter declaration, same as in a {{rlp|function}} parameter list }}
{{par | {{spar|abstract-declarator}} | part of an unnamed formal parameter declaration, same as in {{rlp|function}} parameter list }}
{{par end}}

@1@ Catch-clause that declares a named formal parameter
{{source|try { /* */ } catch (const std::exception&amp; e) { /* */ }
}}
@2@ Catch-clause that declares an unnamed parameter
{{source|try { /* */ } catch (const std::exception&amp;) { /* */ }
}}
@3@ Catch-all handler, which is activated for any exception
{{source|try { /* */ } catch (...) { /* */ }
}}

===Explanation===
:{{small|See {{rlp|throw | throw exceptions}} for more information about throw-expressions}}

A try-block is a {{rlp|statements|statement}}, and as such, can appear anywhere a statement can appear (that is, as one of the statements in a compound statement, including the function body compound statement). See {{rlp|function-try-block}} for the try blocks around function bodies. The following description applies to both try-blocks and {{rlp|function-try-block}}s.

The formal parameter of the catch clause ({{spar|type-specifier-seq}} and {{spar|declarator}} or {{spar|type-specifier-seq}} and {{spar|abstract-declarator}}) determines which types of exceptions cause this catch clause to be entered. It cannot be an {{rlp|reference|rvalue reference type}}, {{rlp|abstract class}}, {{rlp|incomplete type}}, or pointer to incomplete type (except that pointers to (possibly {{rlp|cv}}-qualified) {{c|void}} are allowed). If the type of the formal parameter is array type or function type, it is treated as the corresponding pointer type (similar to a {{rlp|function|function declaration}}).

When an exception of type {{tt|E}} is thrown by any statement in {{spar|compound-statement}}, it is matched against the types of the formal parameters {{tt|T}} of each catch-clause in {{spar|handler-seq}}, in the order in which the catch clauses are listed. The exception is a match if any of the following is true:
* {{tt|E}} and {{tt|T}} are the same type (ignoring top-level cv-qualifiers on {{tt|T}})
* {{tt|T}} is an lvalue-reference to (possibly cv-qualified) {{tt|E}}
* {{tt|T}} is an unambiguous public base class of {{tt|E}}
* {{tt|T}} is a reference to an unambiguous public base class of {{tt|E}}
* {{tt|T}} is (possibly cv-qualified) {{tt|U}} {{rev inl|since=c++14|or {{tt|const U&amp;}}}}, and {{tt|U}} is a pointer {{rev inl|since=c++17|or pointer to member}} type, and {{tt|E}} is also a pointer {{rev inl|since=c++17|or pointer to member}} type that is implicitly convertible to {{tt|U}} by one or more of
:* a standard {{rlp|implicit_cast#Pointer conversions|pointer conversion}} other than one to a private, protected, or ambiguous base class
:* a {{rlp|implicit_cast#Qualification conversions|qualification conversion}}
{{rev begin}}
{{rev|since=c++17|
:* a {{rlp|implicit_cast#Function pointer conversions|function pointer conversion}}
}}
{{rev end}}
* {{tt|T}} is a pointer or a pointer to member {{rev inl|since=c++14|or a reference to a const pointer}}, while {{tt|E}} is {{lc|std::nullptr_t}}.

{{source|
try {
    f();
} catch (const std::overflow_error&amp; e) {
    // this executes if f() throws std::overflow_error (same type rule)
} catch (const std::runtime_error&amp; e) {
    // this executes if f() throws std::underflow_error (base class rule)
} catch (const std::exception&amp; e) {
    // this executes if f() throws std::logic_error (base class rule)
} catch (...) {
    // this executes if f() throws std::string or int or any other unrelated type
}
}}

The catch-all clause {{c|catch (...)}} matched exceptions of any type. If present, it has to be the last catch clause in the {{spar|handler-seq}}. Catch-all block may be used to ensure that no uncaught exceptions can possibly escape from a function that offers  {{rlp|exceptions|nothrow exception guarantee}}.

If no matches are found after all catch-clauses were examined, the exception propagation continues to the containing try-block, as described in {{rlp|throw|throw-expression}}. If there are no containing try-blocks left, {{lc|std::terminate}} is executed (in this case, it is implementation-defined whether any stack unwinding occurs at all: throwing an uncaught exception is permitted to terminate the program without invoking any destructors).

When entering a catch clause, if its formal parameter is a base class of the exception type, it is {{rlp|copy_initialization|copy-initialized}} from the base class subobject of the exception object. Otherwise, it is copy-initialized from the exception object (this copy is subject to {{rlp|copy elision}}).
{{source|1=
try {
   std::string(&quot;abc&quot;).substr(10); // throws std::length_error
// } catch (std::exception e) { // copy-initialization from the std::exception base
//     std::cout &lt;&lt; e.what(); // information from length_error is lost
// }
} catch (const std::exception&amp; e) { // reference to the base of a polymorphic object
     std::cout &lt;&lt; e.what(); // information from length_error printed
}
}}

If the parameter of the catch-clause is a reference type, any changes made to it are reflected in the exception object, and can be observed by another handler if the exception is rethrown with {{c|throw;}}. If the parameter is not a reference, any changes made to it are are local and its lifetime ends when the handler exits.

{{rev begin}}
{{rev |since=c++11|
Within a catch-clause, {{lc|std::current_exception}} can be used to capture the exception in an {{lc|std::exception_ptr}}, and {{lc|std::throw_with_nested}} may be used to build nested exceptions.}}
{{rev end}}

Other than by throwing or rethrowing the exception, the catch-clause after a regular try block (not {{rlp|function-try-block}}) may be exited with a {{rlp|return}}, {{rlp|continue}}, {{rlp|break}}, {{rlp|goto}}, or by reaching the end of its {{spar|compound-statement}}. In any case, this destroys the exception object (unless an instance of {{lc|std::exception_ptr}} exists that refers to it).

===Notes===
The throw-expression {{c|throw NULL;}} is not matched by a pointer catch clause, because the exception object type is {{c|int}}, but {{c|throw nullptr;}} is matched by any pointer or pointer-to-member catch clause.

If a catch-clause for a derived class is placed after the catch-clause for a base class, the derived catch-clause will never be executed.
{{source|1=
try {
    f();
} catch (const std::exception&amp; e) {
    // will be executed if f() throws std::runtime_error
} catch (const std::runtime_error&amp; e) {
    // dead code!
}
}}

If {{rlp|goto}} is used to exit a try-block and if any of the destructors of block-scoped automatic variables that are executed by the {{tt|goto}} throw exceptions, those exceptions are caught by the try blocks in which the variables are defined:
{{source|1=
label:
    try {
        T1 t1;
        try {
            T2 t2;
            if(condition)
                goto label; // destroys t2, then destroys t1, then jumps to label
        } catch (...) {  } // catches the exception from the destructor of t2
    } catch (...) {  } // catches the exception from the destructor of t1
}}

===Keywords===
{{ltt|cpp/keyword/try}},
{{ltt|cpp/keyword/catch}},
{{ltt|cpp/keyword/throw}}

===Example===
{{example
 | The following example demonstrates several usage cases of the {{tt|try-catch}} block
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;

int main() {
    try {
        std::cout &lt;&lt; &quot;Throwing an integer exception...\n&quot;;
        throw 42;
    } catch (int i) {
        std::cout &lt;&lt; &quot; the integer exception was caught, with value: &quot; &lt;&lt; i &lt;&lt; '\n';
    }

    try {
        std::cout &lt;&lt; &quot;Creating a vector of size 5... \n&quot;;
        std::vector&lt;int&gt; v(5);
        std::cout &lt;&lt; &quot;Accessing the 11th element of the vector...\n&quot;;
        std::cout &lt;&lt; v.at(10); // vector::at() throws std::out_of_range
    } catch (const std::exception&amp; e) { // caught by reference to base
        std::cout &lt;&lt; &quot; a standard exception was caught, with message '&quot;
                  &lt;&lt; e.what() &lt;&lt; &quot;'\n&quot;;
    }

}
 | output=
Throwing an integer exception...
 the integer exception was caught, with value: 42
Creating a vector of size 5...
Accessing the 11th element of the vector...
 a standard exception was caught, with message 'out_of_range'
}}

[[de:cpp/language/try catch]]
[[es:cpp/language/try catch]]
[[fr:cpp/language/try catch]]
[[it:cpp/language/try catch]]
[[ja:cpp/language/try catch]]
[[pt:cpp/language/try catch]]
[[ru:cpp/language/try catch]]
[[zh:cpp/language/try catch]]</text>
      <sha1>38iet6mw3d83xa3a5uw71508vmh93us</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/type</title>
    <ns>0</ns>
    <id>13105</id>
    <revision>
      <id>92038</id>
      <parentid>91155</parentid>
      <timestamp>2017-04-03T18:41:11Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="10115">{{title|Type}}
{{cpp/language/basics/navbar}}
{{rlp|object|Objects}}, {{rlp|reference}}s, {{rlp|functions}} including {{rlp|template specialization|function template specializations}}, and {{rlp|expressions}} have a property called ''type'', which both restricts the operations that are permitted for those entities and provides semantic meaning to the otherwise generic sequences of bits.

===Type classification===
The C++ type system consists of the following types:
* {{rlp|types|fundamental types}} (see also {{lc|std::is_fundamental}}):
:* the type {{c|void}} (see also {{lc|std::is_void}});
:* the type {{c|std::nullptr_t}} {{ mark since c++11 }} (see also {{lc|std::is_null_pointer}}); 
:* arithmetic types (see also {{lc|std::is_arithmetic}}):
::* floating-point types ({{c|float}}, {{c|double}}, {{c|long double}}) (see also {{lc|std::is_floating_point}});
::* integral types (see also {{lc|std::is_integral}}):
:::* the type {{c|bool}};
:::* character types:
::::* narrow character types ({{c|char}}, {{c|signed char}}, {{c|unsigned char}});
::::* wide character types ({{c|char16_t}}, {{c|char32_t}}, {{c|wchar_t}});
:::* signed integer types ({{c|short int}}, {{c|int}}, {{c|long int}}, {{c|long long int}});
:::* unsigned integer types ({{c|unsigned short int}}, {{c|unsigned int}}, {{c|unsigned long int}}, {{c|unsigned long long int}});
* compound types (see also {{lc|std::is_compound}}):
:* reference types (see also {{lc|std::is_reference}}):
::* {{rlp|reference#Lvalue_references|lvalue reference types}} (see also {{lc|std::is_lvalue_reference}}):
:::* lvalue reference to object types;
:::* lvalue reference to function types;
::* {{rlp|reference#Rvalue_references|rvalue reference types}} (see also {{lc|std::is_rvalue_reference}}):
:::* rvalue reference to object types;
:::* rvalue reference to function types;
:* pointer types (see also {{lc|std::is_pointer}}):
::* {{rlp|pointer#Pointers_to_objects|pointer to object types}};
::* {{rlp|pointer#Pointers_to_functions|pointer to function types}};
:* pointer to member types (see also {{lc|std::is_member_pointer}}):
::* {{rlp|pointer#Pointers_to_data_members|pointer to data member}} types (see also {{lc|std::is_member_object_pointer}});
::* {{rlp|pointer#Pointers_to_member_functions|pointer to member function}} types (see also {{lc|std::is_member_function_pointer}});
:* {{rlp|array|array types}} (see also {{lc|std::is_array}});
:* {{rlp|function|function types}} (see also {{lc|std::is_function}});
:* {{rlp|enum|enumeration types}} (see also {{lc|std::is_enum}});
:* {{rlp|class|class types}}:
::* non-union types (see also {{lc|std::is_class}});
::* {{rlp|union|union types}} (see also {{lc|std::is_union}}).

For every type other than reference and function, the type system supports three additional {{rlp|cv|cv-qualified versions}} of that type ({{c|const}}, {{c|volatile}}, and {{c|const volatile}}).

Types are grouped in various categories based on their properties: 
* object type is a (possibly cv-qualified) type that is not a function type, not a reference type, and not {{c|void}} type (see also {{lc|std::is_object}});
* scalar types are (possibly cv-qualified) arithmetic, pointer, pointer to member, enumeration, and {{c|std::nullptr_t}} types (see also {{lc|std::is_scalar}});
* trivial types (see also {{lc|std::is_trivial}}), POD types (see also {{lc|std::is_pod}}), literal types (see also {{lc|std::is_literal_type}}), and other categories listed in the [[cpp/types | the type traits library]] or as [[cpp/concept|named type requirements]].

===Type naming===
A {{rlp|name}} can be declared to refer to a type by means of:
* {{rlp|class}} declaration;
* {{rlp|enum}} declaration;
* {{rlp|typedef}} declaration;
* {{rlp|type alias}} declaration.

Types that do not have names often need to be referred to in C++ programs; the syntax for that is known as ''type-id''. The syntax of the type-id that names type T is exactly the syntax of a {{rlp|declarations|declaration}} of a variable or function of type T, with the identifier omitted, except that ''decl-specifier-seq'' of the declaration grammar is constrained to ''type-specifier-seq'', and that new types may be defined only if the type-id appears on the right-hand side of a non-template type alias declaration.
{{source|1=
int* p;               // declaration of a pointer to int
static_cast&lt;int*&gt;(p); // type-id is &quot;int*&quot;

int a[3];   // declaration of an array of 3 int
new int[3]; // type-id is &quot;int[3]&quot; (called new-type-id)

int (*(*x[2])())[3];      // declaration of an array of 2 pointers to functions
                          // returning pointer to array of 3 int
new (int (*(*[2])())[3]); // type-id is &quot;int (*(*[2])())[3]&quot;

void f(int);                    // declaration of a function taking int and returning void
std::function&lt;void(int)&gt; x = f; // type template parameter is a type-id &quot;void(int)&quot;

std::vector&lt;int&gt; v;       // declaration of a vector of int
sizeof(std::vector&lt;int&gt;); // type-id is &quot;std::vector&lt;int&gt;&quot;

struct { int x; } b;         // creates a new type and declares an object b of that type
sizeof(struct{ int x; });    // error: cannot define new types in a sizeof expression
using t = struct { int x; }; // creates a new type and declares t as an alias of that type

sizeof(static int); // error: storage class specifiers not part of type-specifier-seq
std::function&lt;inline void(int)&gt; f; // error: neither are function specifiers
}}
The ''declarator'' part of the declaration grammar with the name removed is referred to as ''abstract-declarator''.

''Type-id'' may be used in the following situations:
* to specify the target type in {{rlp|expressions#Conversions|cast expressions}};
* as arguments to {{rlp|sizeof}}, {{rlp|alignof}}, {{rlp|alignas}}, {{rlp|new}}, and {{rlp|typeid}};
* on the right-hand side of a {{rlp|type alias}} declaration;
* as the trailing return type of a {{rlp|function}} declaration;
* as the default argument of a {{rlp|template parameters#Type template parameter|template type parameter}};
* as the template argument for a {{rlp|template parameters#Template type arguments|template type parameter}};
* in {{rlp|except_spec|dynamic exception specification}}.

''Type-id'' can be used with some modifications in the following situations:
* in the parameter list of a {{rlp|function#Parameter list|function}} (when the parameter name is omitted), type-id uses ''decl-specifier-seq'' instead of ''type-specifier-seq'' (in particular, some storage class specifiers are allowed);
* in the name of a {{rlp|cast operator|user-defined conversion function}}, the abstract declarator cannot include function or array operators.

{{todo|8.2[dcl.ambig.res] if it can be compactly summarized}}
{{todo|mention and link to decltype and auto}}

===Elaborated type specifier===
Elaborated type specifiers may be used to refer to a previously-declared class name (class, struct, or union) or to a previously-declared enum name even if the name was {{rlp|lookup|hidden by a non-type declaration}}. They may also be used to declare new class names.

See {{rlp|elaborated type specifier}} for details.

===Static type===
The type of an expression that results from the compile-time analysis of the program is known as the ''static type'' of the expression. The static type does not change while the program is executing.

===Dynamic type===
If some {{rlp|value category|glvalue expression}} refers to a {{rlp|object|polymorphic object}}, the type of its most derived object is known as the dynamic type.
{{source|1=
// given
struct B { virtual ~B() {} }; // polymorphic type
struct D: B {}; // polymorphic type
D d; // most-derived object
B* ptr = &amp;d;
// the static type of (*ptr) is B
// the dynamic type of (*ptr) is D
}}

For prvalue expressions, the dynamic type is always the same as the static type.

===Incomplete type===
The following types are ''incomplete types'':
* the type {{c|void}} (possibly {{rlp|cv}}-qualified);
* class type that has been declared (e.g. by {{rlp|class#Forward declaration|forward declaration}}) but not defined;
* {{rlp|array#Arrays_of_unknown_bound|array of unknown bound}};
* array of elements of incomplete type;
* {{rlp|enum|enumeration type}} from the point of declaration until its underlying type is determined.

Any of the following contexts requires class {{tt|T}} to be complete:
* {{rlp|function|definition}} or function call to a function with return type {{tt|T}} or argument type {{tt|T}}&lt;!-- there are exceptions, e.g., when the function call is the operand of decltype --&gt;;
* {{rlp|definition}} of an object of type {{tt|T}};
* declaration of a {{rlp|data members|non-static class data member}} of type {{tt|T}};
* {{rlp|new|new-expression}} for an object of type {{tt|T}} or an array whose element type is {{tt|T}};
* {{rlp|implicit cast#Lvalue to rvalue conversion|lvalue-to-rvalue conversion}} applied to a glvalue of type {{tt|T}};
* an {{rlp|implicit cast|implicit}} or {{rlp|explicit cast|explicit}} conversion to type {{tt|T}};
* a {{rlp|implicit cast|standard conversion}}, {{rlp|dynamic_cast}}, or {{rlp|static_cast}} to type {{tt|T*}} or {{tt|T&amp;}}, except when converting from the [[cpp/types/NULL|null pointer constant]] or from a {{rlp|pointer#Pointers to void|pointer to void}};
* {{rlp|operator member access|class member access operator}} applied to an expression of type {{tt|T}};
* {{rlp|typeid}}, {{rlp|sizeof}}, or {{rlp|alignof}} operator applied to type {{tt|T}};
* {{rlp|operator arithmetic|arithmetic operator}} applied to a pointer to {{tt|T}};
* definition of a class with base class {{tt|T}};
* assignment to an lvalue of type {{tt|T}};
* a {{rlp|try catch|catch-clause}} for an exception of type {{tt|T}}, {{tt|T&amp;}}, or {{tt|T*}}.
(In general, when the size and layout of {{tt|T}} must be known.)

If any of these situations occur in a translation unit, the definition of the type must appear in the same translation unit. Otherwise, it is not required.

{{todo|rules for completing the incomplete types from §3.9[basic.types]/6}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/type | Type}}
{{dsc end}}

[[zh:cpp/language/type]]</text>
      <sha1>7fnkilkey48thoesby2hdebwynen8o1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/type alias</title>
    <ns>0</ns>
    <id>5426</id>
    <revision>
      <id>82447</id>
      <parentid>82446</parentid>
      <timestamp>2015-12-17T10:34:33Z</timestamp>
      <contributor>
        <username>Maggyero</username>
        <id>4316</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="5493">{{title|Type alias, alias template {{mark since c++11}}}}
{{cpp/language/declarations/navbar}}

Type alias is a name that refers to a previously defined type (similar to {{rlp|typedef}}).

Alias template is a name that refers to a family of types.

===Syntax===
Alias declarations are {{rlp|declarations}} with the following syntax:

{{sdsc begin}}
{{sdsc|num=1|{{ttb|using}} {{spar|identifier}} {{spar|attr}}{{mark optional}} {{ttb|{{=}}}} {{spar|type-id}} {{ttb|;}}
}}
{{sdsc|num=2|{{ttb|template}} {{ttb|&lt;}} {{spar|template-parameter-list}} {{ttb|&gt;}}
{{ttb|using}} {{spar|identifier}} {{spar|attr}}{{mark optional}} {{ttb|{{=}}}} {{spar|type-id}} {{ttb|;}} }}
{{sdsc end}}

{{par begin}}
{{par|{{spar|attr}}{{mark c++11}}|optional sequence of any number of [[cpp/language/attributes|attributes]]}}
{{par|{{spar|identifier}}|the name that is introduced by this declaration, which becomes either a type name {{v|1}} or a template name {{v|2}} }}
{{par|{{spar|template-parameter-list}}|{{rlp|template parameters|template parameter list}}, as in {{rlp|templates|template declaration}}}}
{{par|{{spar|type-id}}|abstract declarator or any other valid {{spar|type-id}} (which may introduce a new type, as noted in {{rlp|type#Type_naming|type-id}}). The {{spar|type-id}} cannot directly or indirectly refer to {{spar|identifier}}. Note that the {{rlp|scope#Point_of_declaration|point of declaration}} of the identifier is at the semicolon following {{spar|type-id}}.}} 
{{par end}}

===Explanation===
@1@ A type alias declaration introduces a name which can be used as a synonym for the type denoted by {{spar|type-id}}. It does not introduce a new type and it cannot change the meaning of an existing type name. There is no difference between a type alias declaration and {{rlp|typedef}} declaration. This declaration may appear in block scope, class scope, or namespace scope.
@2@ An alias template is a template which, when specialized, is equivalent to the result of substituting the template arguments of the alias template for the template parameters in the {{spar|type-id}}
{{source|1=
template&lt;class T&gt;
struct Alloc { };
template&lt;class T&gt;
using Vec = vector&lt;T, Alloc&lt;T&gt;&gt;; // type-id is vector&lt;T, Alloc&lt;T&gt;&gt;
Vec&lt;int&gt; v; // Vec&lt;int&gt; is the same as vector&lt;int, Alloc&lt;int&gt;&gt;
}}
{{rev begin}}
{{rev|since=c++14|
When the result of specializing an alias template is a dependent template-id, subsequent substitutions apply to that template-id:
{{source|1=
template&lt;typename...&gt;
using void_t = void;
template&lt;typename T&gt;
void_t&lt;typename T::foo&gt; f();
f&lt;int&gt;(); // error, int does not have a nested type foo
}}
}}
{{rev end}}
The type produced when specializing an alias template is not allowed to directly or indirectly make use of its own type:
{{source|1=
template&lt;class T&gt;
struct A;
template&lt;class T&gt;
using B = typename A&lt;T&gt;::U; // type-id is A&lt;T&gt;::U
template&lt;class T&gt;
struct A { typedef B&lt;T&gt; U; };
B&lt;short&gt; b; // error: B&lt;short&gt; uses its own type via A&lt;short&gt;::U
}}
Alias templates are never deduced by {{rlp|function_template#Template argument deduction|template argument deduction}} when deducing a template template parameter.
It is not possible to {{rlp|partial specialization|partially}} or {{rlp|template specialization|explicitly specialize}} an alias template.

Like any template declaration, an alias template can only be declared at class scope or namespace scope.

===Example===
{{example
  |
  |code=
#include &lt;string&gt;
#include &lt;ios&gt;
#include &lt;type_traits&gt;

// type alias, identical to
// typedef std::ios_base::fmtflags flags;
using flags = std::ios_base::fmtflags;
// the name 'flags' now denotes a type:
flags fl = std::ios_base::dec;

// type alias, identical to
// typedef void (*func)(int, int);
using func = void (*) (int, int);
// the name 'func' now denotes a pointer to function:
void example(int, int) {}
func f = example;

// alias template
template&lt;class T&gt;
using ptr = T*; 
// the name 'ptr&lt;T&gt;' is now an alias for pointer to T
ptr&lt;int&gt; x;

// type alias used to hide a template parameter 
template&lt;class CharT&gt;
using mystring = std::basic_string&lt;CharT, std::char_traits&lt;CharT&gt;&gt;;
mystring&lt;char&gt; str;

// type alias can introduce a member typedef name
template&lt;typename T&gt;
struct Container { using value_type = T; };
// which can be used in generic programming
template&lt;typename Container&gt;
void g(const Container&amp; c) { typename Container::value_type n; }

// type alias used to simplify the syntax of std::enable_if
template&lt;typename T&gt;
using Invoke = typename T::type;
template&lt;typename Condition&gt;
using EnableIf = Invoke&lt;std::enable_if&lt;Condition::value&gt;&gt;;
template&lt;typename T, typename = EnableIf&lt;std::is_polymorphic&lt;T&gt;&gt;&gt;
int fpoly_only(T t) { return 1; }

struct S { virtual ~S() {} };

int main() 
{
    Container&lt;int&gt; c;
    g(c); // Container::value_type will be int in this function
//  fpoly_only(c); // error: enable_if prohibits this
    S s;
    fpoly_only(s); // okay: enable_if allows this
} 
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1558|std=C++14|before=whether unused arguments in an alias specialization participate in substitition is not specified|after=substitution is performed}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc typedef}}
{{dsc end}}

[[de:cpp/language/type alias]]
[[es:cpp/language/type alias]]
[[fr:cpp/language/type alias]]
[[it:cpp/language/type alias]]
[[ja:cpp/language/type alias]]
[[pt:cpp/language/type alias]]
[[ru:cpp/language/type alias]]
[[zh:cpp/language/type alias]]</text>
      <sha1>toed9pkkojqcijzlt2t2bp7l2yxpbb0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/type-id</title>
    <ns>0</ns>
    <id>14456</id>
    <redirect title="cpp/language/type" />
    <revision>
      <id>80774</id>
      <timestamp>2015-08-28T13:07:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>been looking up the exact anchor every type type-id was mentioned.. should really do this for a few other terms</comment>
      <text xml:space="preserve" bytes="44"> #REDIRECT [[cpp/language/type#Type_naming]]</text>
      <sha1>4605kzhjtsqt4txoxjzf0jte7awq7tr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/typedef</title>
    <ns>0</ns>
    <id>2396</id>
    <revision>
      <id>91880</id>
      <parentid>86144</parentid>
      <timestamp>2017-03-31T20:00:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="3143">{{title|typedef specifier}}
{{cpp/language/declarations/navbar}}

:*{{ttb|typedef}} - creates an alias that can be used anywhere in place of a (possibly complex) type name.

===Explanation===
The {{c|typedef}} specifier, when used in a {{rlp|declarations|declaration}}'s {{spar|decl-specifier-seq}}, specifies that the declaration is a ''typedef declaration'', and declares typedef-names rather than functions or objects. It may declare one or many identifiers on the same line (e.g. int and a pointer to int), it may declare array and function types, pointers and references, class types, etc. Every identifier introduced in this declaration becomes a typedef-name, which is a synonym for the type of the object or function that it would become if the keyword {{c|typedef}} were removed.

The {{c|typedef}} specifier cannot be combined with any other specifier except for {{rlp|declarations#Specifiers|''type-specifier''}}s.

The typedef-names are aliases for existing types, and are not declarations of new types. Typedef cannot be used to change the meaning of an existing type name (including a typedef-name). Once declared, a typedef-name may only be redeclared to refer to the same type again. Typedef names are only in effect in the scope where they are visible: different functions or class declarations may define identically-named types with different meaning.

{{rev begin}}
{{rev | since=c++17 {{mark unreviewed dr|CWG|2071}} |
The {{tt|typedef}} specifier may not appear in a declaration that does not contain a declarator.
{{source | code=
typedef struct X {}; // ill-formed
}}
}}

{{rev end}}

===Keywords===
{{ltt|cpp/keyword/typedef}}

===Notes===
[[cpp/language/type_alias|type aliases]] provide the same functionality as typedefs using a different syntax, and are also applicable to template names.

===Example===
{{source|code=
// simple typedef
typedef unsigned long ulong;

// the following two objects have the same type
unsigned long l1;
ulong l2;

// more complicated typedef
typedef int int_t, *intp_t, (&amp;fp)(int, ulong), arr_t[10];

// the following two objects have the same type
int a1[10];
arr_t a2;

// common C idiom to avoid having to write &quot;struct S&quot;
typedef struct {int a; int b;} S, *pS;

// the following two objects have the same type
pS ps1;
S* ps2;

// error: storage-class-specifier cannot appear in a typedef declaration
// typedef static unsigned int uint;

// typedef can be used anywhere in the decl-specifier-seq
long unsigned typedef int long ullong;

// std::add_const, like many other metafunctions, use member typedefs
template&lt; class T&gt;
struct add_const {
    typedef const T type;
};

typedef struct Node {
    struct listNode* next; // declares a new (incomplete) struct type named listNode
} listNode; // error: conflicts with the previously declared struct name
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/typedef | Typedef declaration}}
{{dsc end}}

[[de:cpp/language/typedef]]
[[es:cpp/language/typedef]]
[[fr:cpp/language/typedef]]
[[it:cpp/language/typedef]]
[[ja:cpp/language/typedef]]
[[pt:cpp/language/typedef]]
[[ru:cpp/language/typedef]]
[[zh:cpp/language/typedef]]</text>
      <sha1>574kctpt60e25xs37jd2ptdapx8ljlz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/typeid</title>
    <ns>0</ns>
    <id>715</id>
    <revision>
      <id>88918</id>
      <parentid>87229</parentid>
      <timestamp>2016-12-19T18:37:16Z</timestamp>
      <contributor>
        <username>Mattcalabrese</username>
        <id>6207</id>
      </contributor>
      <text xml:space="preserve" bytes="6493">{{title|typeid operator}}
{{cpp/language/expressions/navbar}}
Queries information of a type.

Used where the [[cpp/language/type#Dynamic type|dynamic type]] of a [[cpp/language/object#Polymorphic objects|polymorphic object]] must be known and for static type identification.

===Syntax===
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|typeid(}} {{spar|type}} {{ttb|)}}}}
{{sdsc | num=2 | {{ttb|typeid(}} {{spar|expression}} {{ttb|)}}}}
{{sdsc end}}

The header [[cpp/header/typeinfo|&lt;typeinfo&gt;]] must be included before using {{tt|typeid}} (if the header is not included, every use of the keyword {{tt|typeid}} makes the program ill-formed.)

The typeid expression is {{rlp|value_category|lvalue expression}} which refers to an object with {{rlp|static|static storage duration}}, of the polymorphic type {{c|const std::type_info}} or of some type derived from it.

===Explanation===
@1@ Refers to a {{c|std::type_info}} object representing the type {{spar|type}}. If {{spar|type}} is a reference type, the result refers to a {{c|std::type_info}} object representing the referenced type.
@2@ Examines the expression {{spar|expression}}
:@a@ If {{spar|expression}} is a {{rlp|value category|glvalue expression}} that identifies an {{rlp|object#Polymorphic_objects|object of a polymorphic type}} (that is, a class that declares or inherits at least one {{rlp|virtual|virtual function}}), the {{tt|typeid}} expression evaluates the expression and then refers to the {{c|std::type_info}} object that represents the dynamic type of the expression. If the glvalue expression is obtained by applying the unary * operator to a pointer and the pointer is a null pointer value, an exception of type {{lc|std::bad_typeid}} or a type derived from {{lc|std::bad_typeid}} is thrown.
:@b@ If {{spar|expression}} is not a glvalue expression of polymorphic type, {{tt|typeid}} does {{rlp|expressions#Unevaluated_expressions|not evaluate the expression}}, and the {{c|std::type_info}} object it identifies represents the static type of the expression. Lvalue-to-rvalue, array-to-pointer, or function-to-pointer conversions are not performed. {{rev inl|since=c++17|{{rlp|implicit_cast#Temporary_materialization|Temporary materialization}}, however, is (formally) performed for prvalue arguments: typeid determines the type of the result object.}}

In all cases, cv-qualifiers are ignored by typeid (that is, {{c|typeid(T) {{==}} typeid(const T)}})

If the operand to {{tt|typeid}} is a class type or a reference to a class type, then that class type must not be an {{rlp|incomplete type}}.

If {{tt|typeid}} is used on an object under construction or destruction (in a destructor or in a constructor, including constructor's {{rlp|initializer_list|initializer list}} or {{rlp|data_members#Member_initialization|default member initializers}}), then the {{c|std::type_info}} object referred to by this {{tt|typeid}} represents the class that is being constructed or destroyed even if it is not the most-derived class.

===Keywords===
{{ltt|cpp/keyword/typeid}}

===Notes===
When applied to an expression of polymorphic type, evaluation of a typeid expression may involve runtime overhead (a virtual table lookup), otherwise typeid expression is resolved at compile time.

It is unspecified whether the destructor for the object referred to by {{tt|typeid}} is executed at the end of the program.

There is no guarantee that the same {{lc|std::type_info}} instance will be referred to by all evaluations of the typeid expression on the same type, although {{lc|std::type_info::hash_code}} of those type_info objects would be identical, as would be their {{lc|std::type_index}}.
{{source|1=
const std::type_info&amp; ti1 = typeid(A);
const std::type_info&amp; ti2 = typeid(A);

assert(&amp;ti1 == &amp;ti2); // not guaranteed
assert(ti1.hash_code() == ti2.hash_code()); // guaranteed
assert(std::type_index(ti1) == std::type_index(ti2)); // guaranteed
}}

===Example===
{{example|The example showing output using one of the implementations where type_info::name prints full type names; filter through c++filt -t if using gcc or similar.
| p=true
| code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;typeinfo&gt;

struct Base {}; // non-polymorphic
struct Derived : Base {};

struct Base2 { virtual void foo() {} }; // polymorphic
struct Derived2 : Base2 {};

int main() {
    int myint = 50;
    std::string mystr = &quot;string&quot;;
    double *mydoubleptr = nullptr;

    std::cout &lt;&lt; &quot;myint has type: &quot; &lt;&lt; typeid(myint).name() &lt;&lt; '\n'
              &lt;&lt; &quot;mystr has type: &quot; &lt;&lt; typeid(mystr).name() &lt;&lt; '\n'
              &lt;&lt; &quot;mydoubleptr has type: &quot; &lt;&lt; typeid(mydoubleptr).name() &lt;&lt; '\n';

    // std::cout &lt;&lt; myint is a glvalue expression of polymorphic type; it is evaluated
    const std::type_info&amp; r1 = typeid(std::cout &lt;&lt; myint);
    std::cout &lt;&lt; &quot;std::cout&lt;&lt;myint has type : &quot; &lt;&lt; r1.name() &lt;&lt; '\n';

    // std::printf() is not a glvalue expression of polymorphic type; NOT evaluated
    const std::type_info&amp; r2 = typeid(std::printf(&quot;%d\n&quot;, myint));
    std::cout &lt;&lt; &quot;printf(\&quot;%d\\n\&quot;,myint) has type : &quot; &lt;&lt; r2.name() &lt;&lt; '\n';

    // Non-polymorphic lvalue is a static type
    Derived d1;
    Base&amp; b1 = d1;
    std::cout &lt;&lt; &quot;reference to non-polymorphic base: &quot; &lt;&lt; typeid(b1).name() &lt;&lt; '\n';

    Derived2 d2;
    Base2&amp; b2 = d2;
    std::cout &lt;&lt; &quot;reference to polymorphic base: &quot; &lt;&lt; typeid(b2).name() &lt;&lt; '\n';

    try {
        // dereferencing a null pointer: okay for a non-polymoprhic expression
        std::cout &lt;&lt; &quot;mydoubleptr points to &quot; &lt;&lt; typeid(*mydoubleptr).name() &lt;&lt; '\n'; 
        // dereferencing a null pointer: not okay for a polymorphic lvalue
        Derived2* bad_ptr = nullptr;
        std::cout &lt;&lt; &quot;bad_ptr points to... &quot;;
        std::cout &lt;&lt; typeid(*bad_ptr).name() &lt;&lt; '\n';
    } catch (const std::bad_typeid&amp; e) {
         std::cout &lt;&lt; &quot; caught &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
myint has type: int
mystr has type: std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;
mydoubleptr has type: double*
50std::cout&lt;&lt;myint has type : std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;
printf(&quot;%d\n&quot;,myint) has type : int
reference to non-polymorphic base: Base
reference to polymorphic base: Derived2
mydoubleptr points to double
bad_ptr points to...  caught std::bad_typeid
}}

[[de:cpp/language/typeid]]
[[es:cpp/language/typeid]]
[[fr:cpp/language/typeid]]
[[it:cpp/language/typeid]]
[[ja:cpp/language/typeid]]
[[pt:cpp/language/typeid]]
[[ru:cpp/language/typeid]]
[[zh:cpp/language/typeid]]</text>
      <sha1>8g2iwnz3sr6ddno176d5tbrmuw06uhn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/types</title>
    <ns>0</ns>
    <id>716</id>
    <revision>
      <id>90446</id>
      <parentid>90425</parentid>
      <timestamp>2017-02-23T14:16:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>it is a very useful note that char is unsigned on ARM by default, trying to trim it a bit so it doesn't stand out so much from the surrounding text</comment>
      <text xml:space="preserve" bytes="14312">{{title|Fundamental types}}
{{cpp/language/basics/navbar}}

&lt;small&gt;(See also {{rlp|type}} for type system overview and [[cpp/types | the list of type-related utilities]] that are provided by the C++ library)&lt;/small&gt;

===Void type===

:{{c|void}} - type with an empty set of values. It is an {{rlp|incomplete type}} that cannot be completed (consequently, objects of type {{tt|void}} are disallowed). There are no {{rlp|array}}s of {{tt|void}}, nor {{rlp|reference}}s to {{tt|void}}. However, {{rlp|pointer#Pointers to void|pointers to {{tt|void}}}} and {{rlp|function}}s returning type {{tt|void}} (''procedures'' in other languages) are permitted.

==={{lc|std::nullptr_t}}===

{{dcl begin}}
{{dcl header | cstddef}}
{{dcl | since=c++11 |
typedef decltype(nullptr) nullptr_t;
}}
{{dcl end}}

{{lc|std::nullptr_t}} is the type of the null pointer literal, {{ltt|cpp/language/nullptr|nullptr}}. It is a distinct type that is not itself a pointer type or a pointer to member type.

===Boolean type===

:{{c|bool}} - type, capable of holding one of the two values: {{ltt|cpp/language/bool_literal|true}} or {{ltt|cpp/language/bool_literal|false}}. The value of {{c|sizeof(bool)}} is implementation defined and might differ from 1.

===Character types===

:{{c|signed char}} - type for signed character representation.
:{{c|unsigned char}} - type for unsigned character representation. Also used to inspect {{rlp|object|object representations}} (raw memory).
:{{c|char}} - type for character representation which can be most efficiently processed on the target system (has the same representation and alignment as either {{c|signed char}} or {{c|unsigned char}}, but is always a distinct type). [[cpp/string/multibyte|Multibyte characters strings]] use this type to represent code units. {{rev inl|since=c++14|The character types are large enough to represent 256 different values (in order to be suitable for storing UTF-8 encoded data)}}. The signedness of {{c|char}} depends on the compiler and the target platform: the defaults for ARM and PowerPC are typically unsigned, the defaults for x86 and x64 are typically signed.
:{{c|wchar_t}} - type for wide character representation (see [[cpp/string/wide|wide strings]]). Required to be large enough to represent any supported character code point (32 bits on systems that support Unicode. A notable exception is Windows, where wchar_t is 16 bits and holds UTF-16 code units) It has the same size, signedness, and alignment as one of the integral types, but is a distinct type.
{{rev begin}}
{{rev|since=c++11|
:{{c|char16_t}} - type for UTF-16 character representation, required to be large enough to represent any UTF-16 code unit (16 bits). It has the same size, signedness, and alignment as {{lc|std::uint_least16_t}}, but is a distinct type.
:{{c|char32_t}} - type for UTF-32 character representation, required to be large enough to represent any UTF-32 code unit (32 bits). It has the same size, signedness, and alignment as {{lc|std::uint_least32_t}}, but is a distinct type.
}}{{rev end}}

===Integer types===

:{{c|int}} - basic integer type. The keyword {{tt|int}} may be omitted if any of the modifiers listed below are used. If no length modifiers are present, it's guaranteed to have a width of at least 16 bits. However, on 32/64 bit systems it is almost exclusively guaranteed to have width of at least 32 bits (see below).

====Modifiers====

Modifies the integer type. Can be mixed in any order. Only one of each group can be present in type name.

'''Signedness'''

:{{c|signed}} - target type will have signed representation (this is the default if omitted)
:{{c|unsigned}} - target type will have unsigned representation

'''Size'''

:{{c|short}} - target type will be optimized for space and will have width of at least 16 bits.
:{{c|long}} - target type will have width of at least 32 bits.
{{rev begin}}
{{rev|since=c++11|
:{{c|long long}} - target type will have width of at least 64 bits.
}}{{rev end}}

Note: as with all type specifiers, any order is permitted: {{c|unsigned long long int}} and {{c|long int unsigned long}} name the same type.

====Properties====

The following table summarizes all available integer types and their properties:

{| class=&quot;wikitable&quot; style=&quot;text-align:center;&quot;
|-
! rowspan=&quot;2&quot; | Type specifier 
! rowspan=&quot;2&quot; | Equivalent type 
! colspan=&quot;5&quot; | Width in bits by data model
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
! C++ standard 
! LP32
! ILP32
! LLP64
! LP64
|-
| {{left|{{c|short}}}}
| rowspan=&quot;4&quot; | {{c|short int}}
| rowspan=&quot;6&quot; | at least&lt;br&gt; '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
| rowspan=&quot;6&quot; | '''16'''  
|-
| {{left|{{c|short int}}}}
|-
| {{left|{{c|signed short}}}}
|-
| {{left|{{c|signed short int}}}}
|-
| {{left|{{c|unsigned short}}}}
| rowspan=&quot;2&quot; | {{c|unsigned short int}}
|-
| {{left|{{c|unsigned short int}}}}
|-
| {{left|{{c|int}}}}
| rowspan=&quot;3&quot; | {{c|int}}  
| rowspan=&quot;5&quot; | at least&lt;br&gt; '''16'''  
| rowspan=&quot;5&quot; | '''16'''  
| rowspan=&quot;5&quot; | '''32'''  
| rowspan=&quot;5&quot; | '''32'''  
| rowspan=&quot;5&quot; | '''32''' 
|-
| {{left|{{c|signed}}}}
|-
| {{left|{{c|signed int}}}}
|-
| {{left|{{c|unsigned}}}}
| rowspan=&quot;2&quot; | {{c|unsigned int}}
|-
| {{left|{{c|unsigned int}}}}
|-
| {{left|{{c|long}}}}
| rowspan=&quot;4&quot; | {{c|long int}}  
| rowspan=&quot;6&quot; | at least&lt;br&gt; '''32'''  
| rowspan=&quot;6&quot; | '''32'''  
| rowspan=&quot;6&quot; | '''32'''  
| rowspan=&quot;6&quot; | '''32'''  
| rowspan=&quot;6&quot; | '''64'''  
|-
| {{left|{{c|long int}}}}
|-
| {{left|{{c|signed long}}}}
|-
| {{left|{{c|signed long int}}}}
|-
| {{left|{{c|unsigned long}}}}
| rowspan=&quot;2&quot; | {{c|unsigned long int}}
|-
| {{left|{{c|unsigned long int}}}}
|-
| {{left|{{c|long long}}}}
| rowspan=&quot;4&quot; | {{c|long long int}} &lt;br&gt; {{mark c++11}}
| rowspan=&quot;6&quot; | at least&lt;br&gt; '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
| rowspan=&quot;6&quot; | '''64'''  
|-
| {{left|{{c|long long int}}}}
|-
| {{left|{{c|signed long long}}}}
|-
| {{left|{{c|signed long long int}}}}
|-
| {{left|{{c|unsigned long long}}}}
| rowspan=&quot;2&quot; | {{c|unsigned long long int}} &lt;br&gt; {{mark c++11}}
|-
| {{left|{{c|unsigned long long int}}}}
|}

Besides the minimal bit counts, the C++ Standard guarantees that

:{{c|1=1 == sizeof(char) &lt;= sizeof(short) &lt;= sizeof(int) &lt;= sizeof(long) &lt;= sizeof(long long)}}.

Note: this allows the extreme case in which [[enwiki:Byte|bytes]] are sized 64 bits, all types (including {{c|char}}) are 64 bits wide, and {{c|sizeof}} returns 1 for every type.

Note: integer arithmetic is defined differently for the signed and unsigned integer types. See {{rlp|operator_arithmetic|arithmetic operators}}, in particular  {{rlp|operator_arithmetic#Overflows|integer overflows}}.

====Data models====

The choices made by each implementation about the sizes of the fundamental types are collectively known as ''data model''. Four data models found wide acceptance:

32 bit systems:

:*'''LP32''' or '''2/4/4''' (int is 16-bit, long and pointer are 32-bit)
::* Win16 API
:*'''ILP32''' or '''4/4/4''' (int, long, and pointer are 32-bit);
::* Win32 API
::* Unix and Unix-like systems (Linux, Mac OS X)

64 bit systems:

:* '''LLP64''' or '''4/4/8''' (int and long are 32-bit, pointer is 64-bit)
::* Win64 API
:* '''LP64''' or '''4/8/8''' (int is 32-bit, long and pointer are 64-bit)
::* Unix and Unix-like systems (Linux, Mac OS X)

Other models are very rare. For example, '''ILP64''' ('''8/8/8''': int, long, and pointer are 64-bit) only appeared in some early 64-bit Unix systems (e.g. Unicos on Cray).

===Floating point types===

:{{c|float}} - single precision floating point type. Usually IEEE-754 32 bit floating point type

:{{c|double}} - double precision floating point type. Usually IEEE-754 64 bit floating point type

:{{c|long double}} - extended precision floating point type. Does not necessarily map to types mandated by IEEE-754. Usually 80-bit x87 floating point type on x86 and x86-64 architectures.

====Properties====
Floating-point types may support [[cpp/types/numeric_limits|special values]]:
* ''infinity'' (positive and negative), see {{lc|INFINITY}}
* the ''negative zero'', {{c|-0.0}}. It compares equal to the positive zero, but is meaningful in some arithmetic operations, e.g. {{c|1.0/0.0 {{==}} INFINITY}}, but {{c|1.0/-0.0 {{==}} -INFINITY}}), and for some mathematical functions, e.g. {{ltt|cpp/numeric/complex/sqrt|sqrt{{small|(std::complex)}}}}
* ''not-a-number'' (NaN), which does not compare equal with anything (including itself). Multiple bit patterns represent NaNs, see {{lc|std::nan}}, {{lc|NAN}}. Note that C++ takes no special notice of signalling NaNs other than detecting their support by {{lc|std::numeric_limits::has_signaling_NaN}}, and treats all NaNs as quiet.

Real floating-point numbers may be used with {{rlp|operator arithmetic|arithmetic operators}} + - / * and various mathematical functions from [[cpp/numeric/math|cmath]]. Both built-in operators and library functions may raise floating-point exceptions and set {{lc|errno}} as described in {{ltt|cpp/numeric/math/math_errhandling}}

Floating-point expressions may have greater range and precision than indicated by their types, see {{lc|FLT_EVAL_METHOD}}. Floating-point expressions may also be ''contracted'', that is, calculated as if all intermediate values have infinite range and precision, see [[cpp/preprocessor/impl#Standard_pragmas|#pragma STDC FP_CONTRACT]].

Some operations on floating-point numbers are affected by and modify the state of [[cpp/numeric/fenv|the floating-point environment]] (most notably, the rounding direction)

{{rlp|implicit cast|Implicit conversions}} are defined between real floating types and integer types.

See [[cpp/types/climits#Limits_of_floating_point_types|Limits of floating point types]] and [[cpp/types/numeric_limits|std::numeric_limits]] for additional details, limits, and properties of the floating-point types.

===Range of values===

The following table provides a reference for the limits of common numeric representations. As the C++ Standard allows any signed integer representation, the table gives both the minimum guaranteed requirements (which correspond to the limits of [[enwiki:One's complement|one's complement]] or [[enwiki:Signed_number_representations#Sign-and-magnitude_method|sign-and-magnitude]]) and the limits of the most commonly used implementation, [[enwiki:Two's complement|two's complement]]. All popular data models (including all of ILP32, LP32, LP64, LLP64) use two's complement representation, though.

{| class=&quot;wikitable&quot; style=&quot;text-align:center;&quot;
|-
! rowspan=2 | Type
! rowspan=2 | Size in bits
! rowspan=2 | Format
! colspan=2 | Value range
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
! Approximate
! Exact
|-
! rowspan=5 | character
| rowspan=3 | 8 
| signed {{small|(one's complement)}}
| colspan=2 | '''-127''' to '''127'''&lt;ref group=&quot;note&quot;&gt;As of C++14, {{c|char}} must represent 256 distinct values, bijectively {{rlp|implicit_cast#Integral_conversions|convertible}} to the values 0..255 of {{c|unsigned char}}, which may require a wider range of values.&lt;/ref&gt;
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
| colspan=2 | '''-128''' to '''127'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| colspan=2 | '''0''' to '''255'''
|-
|-
| 16 
| unsigned
| colspan=2 | '''0''' to '''65535'''
|-
|-
| 32
| unsigned
| colspan=2 | '''0''' to '''1114111''' ('''0x10ffff''')
|-
|-
! rowspan=9 | integral
| rowspan=3 | 16
| signed {{small|(one's complement)}}
| rowspan=2 | '''± 3.27 · 10&lt;sup&gt;4&lt;/sup&gt;'''
| '''-32767''' to '''32767'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
&lt;!-- --&gt;
| '''-32768''' to '''32767'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| '''0''' to '''6.55 · 10&lt;sup&gt;4&lt;/sup&gt;'''  
| '''0''' to '''65535'''
|-
&lt;!-- --&gt;
| rowspan=3 | 32 
| signed {{small|(one's complement)}}
| rowspan=2 | '''± 2.14 · 10&lt;sup&gt;9&lt;/sup&gt;'''
| '''-2,147,483,647''' to '''2,147,483,647'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
&lt;!-- --&gt;
| '''-2,147,483,648''' to '''2,147,483,647'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| '''0''' to '''4.29 · 10&lt;sup&gt;9&lt;/sup&gt;'''   
| '''0''' to '''4,294,967,295'''
|-
&lt;!-- --&gt;
| rowspan=3 | 64 
| signed {{small|(one's complement)}}
| rowspan=2 | '''± 9.22 · 10&lt;sup&gt;18&lt;/sup&gt;'''
| '''-9,223,372,036,854,775,807''' to '''9,223,372,036,854,775,807'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| signed {{small|(two's complement)}}
&lt;!-- --&gt;
| '''-9,223,372,036,854,775,808''' to '''9,223,372,036,854,775,807'''
|-
&lt;!-- --&gt;
&lt;!-- --&gt;
| unsigned
| '''0''' to '''1.84 · 10&lt;sup&gt;19&lt;/sup&gt;'''
| '''0''' to '''18,446,744,073,709,551,615'''
|-
! rowspan=&quot;2&quot; | floating&lt;br&gt; point
| 32 
| [[enwiki:IEEE-754|IEEE-754]]
| '''± 3.4 · 10&lt;sup&gt;± 38&lt;/sup&gt;'''&lt;br&gt; {{small|(~7 digits)}}
|&lt;div&gt;
*min subnormal: '''± 1.401,298,4 · 10&lt;sup&gt;-47&lt;/sup&gt;'''
*min normal: '''± 1.175,494,3 · 10&lt;sup&gt;-38&lt;/sup&gt;'''
*max: '''± 3.402,823,4 · 10&lt;sup&gt;38&lt;/sup&gt;
&lt;/div&gt;
|-
&lt;!-- --&gt;
| 64 
| IEEE-754
| '''± 1.7 · 10&lt;sup&gt;± 308&lt;/sup&gt;'''&lt;br&gt; {{small|(~15 digits)}}
| &lt;div&gt;
*min subnormal: '''± 4.940,656,458,412 · 10&lt;sup&gt;-324&lt;/sup&gt;'''
*min normal: '''± 2.225,073,858,507,201,4 · 10&lt;sup&gt;-308&lt;/sup&gt;'''
*max: '''± 1.797,693,134,862,315,7 · 10&lt;sup&gt;308&lt;/sup&gt;
&lt;/div&gt;
|}
&lt;references group=&quot;note&quot; /&gt;

Note: actual (as opposed to guaranteed minimal) limits on the values representable by these types are available in [[cpp/types/climits|&lt;climits&gt;, &lt;cfloat&gt;]] and {{lc|std::numeric_limits}}

===Keywords===

{{ltt|cpp/keyword/bool}}, 
{{ltt|cpp/keyword/true}}, 
{{ltt|cpp/keyword/false}}, 
{{ltt|cpp/keyword/char}}, 
{{ltt|cpp/keyword/wchar_t}},
{{ltt|cpp/keyword/char16_t}},
{{ltt|cpp/keyword/char32_t}},
{{ltt|cpp/keyword/int}},
{{ltt|cpp/keyword/short}},
{{ltt|cpp/keyword/long}},
{{ltt|cpp/keyword/signed}},
{{ltt|cpp/keyword/unsigned}},
{{ltt|cpp/keyword/float}},
{{ltt|cpp/keyword/double}}

===See also===
* {{rlp | type             | the C++ type system overview}} 
* {{rlp | cv               | const-volatility (cv) specifiers and qualifiers}}
* {{rlp | storage_duration | storage duration specifiers}}
{{dsc begin}}
{{dsc see c | c/language/arithmetic_types | arithmetic types}}
{{dsc end}}


[[ar:cpp/language/types]]
[[de:cpp/language/types]]
[[es:cpp/language/types]]
[[fr:cpp/language/types]]
[[it:cpp/language/types]]
[[ja:cpp/language/types]]
[[pt:cpp/language/types]]
[[ru:cpp/language/types]]
[[zh:cpp/language/types]]</text>
      <sha1>0wotko61899aisexxtwah983db6gbge</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/ub</title>
    <ns>0</ns>
    <id>14016</id>
    <revision>
      <id>88070</id>
      <parentid>87442</parentid>
      <timestamp>2016-10-25T22:00:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+live example of uninit value UB</comment>
      <text xml:space="preserve" bytes="5998">{{title|Undefined behavior}}
{{cpp/language/navbar}}
Renders the entire program meaningless if certain rules of the language are violated.

===Explanation===
The C++ standard precisely defines the {{rlp|as if|observable behavior}} of every C++ program that does not fall into one of the following classes:
* ''ill-formed'' - the program has syntax errors or diagnosable semantic errors. A conforming C++ compiler is required to issue a diagnostic, even if it defines a language extension that assigns meaning to such code (such as with variable-length arrays). The text of the standard uses ''shall'', ''shall not'', and ''ill-formed'' to indicate these requirements. &lt;!-- see  http://stackoverflow.com/questions/25300461 for the discussion on whether shall violations mean ill-formed or undefined --&gt;
* ''ill-formed no diagnostic required'' - the program has semantic errors which may not be diagnosable in general case (e.g. violations of the {{rlp|definition|ODR}} or other errors that are only detectable at link time). The behavior is undefined if such program is executed.
* ''implementation-defined behavior'' - the behavior of the program varies between implementations, and the conforming implementation must document the effects of each behavior. For example, the type of {{lc|std::size_t}} or the number of bits in a byte, or the text of {{lc|std::bad_alloc::what}}. A subset of implementation-defined behavior is ''locale-specific behavior'', which depends on the implementation-supplied [[cpp/locale|locale]].
* ''unspecified behavior'' - the behavior of the program varies between implementations and the conforming implementation is not required to document the effects of each behavior. For example, {{rlp|eval order|order of evaluation}}, whether identical {{rlp|string literal}}s are distinct, the amount of array allocation overhead, etc. Each unspecified behavior results in one of a set of valid results.
* ''undefined behavior'' - there are no restrictions on the behavior of the program. Examples of undefined behavior are memory accesses outside of array bounds, signed integer overflow, null pointer dereference, modification of the same scalar {{rlp|eval order|more than once}} in an expression without sequence points, access to an object through a pointer of a different type, etc. Compilers are not required to diagnose undefined behavior (although many simple situations are diagnosed), and the compiled program is not required to do anything meaningful.

===UB and optimization===
Because correct C++ programs are free of undefined behavior, compilers may produce unexpected results when a program that actually has UB is compiled with optimization enabled:

For example, 
====Signed overflow====
{{source|1=
int foo(int x) {
    return x+1 &gt; x; // either true or UB due to signed overflow
}
}}
may be compiled as ([https://godbolt.org/g/u1MDjW demo])
{{source|
foo(int):
        movl    $1, %eax
        ret
}}


====Access out of bounds====
{{source|1=
int table[4] = {};
bool exists_in_table(int v)
{
    // return true in one of the first 4 iterations or UB due to out-of-bounds access
    for (int i = 0; i &lt;= 4; i++) {
        if (table[i] == v) return true;
    }
    return false;
}
}}
May be compiled as ([https://godbolt.org/g/Mc6Qu1 demo])
{{source|
exists_in_table(int):
        movl    $1, %eax
        ret
}}

====Uninitialized scalar====
{{example|code=
std::size_t f(int x)
{
    std::size_t a;
    if(x) // either x nonzero or UB
        a = 42;
    return a; 
}
}}
May be compiled as ([https://godbolt.org/g/CZKrdp demo])
{{source|
f(int):
        mov     eax, 42
        ret
}}

{{example|the output shown was observed on an older version of gcc|code=
bool p; // uninitialized local variable
if(p) // UB access to uninitialized scalar
    std::puts(&quot;p is true&quot;);
if(!p) // UB access to uninitialized scalar
    std::puts(&quot;p is false&quot;);
|p=true
|output=
p is true
p is false
}}

====Access to pointer passed to realloc====
{{example|Choose clang to observe the output shown
|code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
int main() {
    int *p = (int*)std::malloc(sizeof(int));
    int *q = (int*)std::realloc(p, sizeof(int));
    *p = 1; // UB access to a pointer that was passed to realloc
    *q = 2;
    if (p == q) // UB access to a pointer that was passed to realloc
        std::cout &lt;&lt; *p &lt;&lt; *q &lt;&lt; '\n';
}
|p=true
|output=
12
}}
====Infinite loop without side-effects====
{{example|Choose clang to observe the output shown
|code=
#include &lt;iostream&gt;

int fermat() {
  const int MAX = 1000;
  int a=1,b=1,c=1;
  // Endless loop with no side effects is UB
  while (1) {
    if (((a*a*a) == ((b*b*b)+(c*c*c)))) return 1;
    a++;
    if (a&gt;MAX) { a=1; b++; }
    if (b&gt;MAX) { b=1; c++; }
    if (c&gt;MAX) { c=1;}
  }
  return 0;
}

int main() {
  if (fermat())
    std::cout &lt;&lt; &quot;Fermat's Last Theorem has been disproved.\n&quot;;
  else
    std::cout &lt;&lt; &quot;Fermat's Last Theorem has not been disproved.\n&quot;;
}
|p=true
|output=
Fermat's Last Theorem has been disproved.
}}

===External links===
* [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html What Every C Programmer Should Know About Undefined Behavior #1/3]
* [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html What Every C Programmer Should Know About Undefined Behavior #2/3]
* [http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html What Every C Programmer Should Know About Undefined Behavior #3/3]
* [http://blogs.msdn.com/b/oldnewthing/archive/2014/06/27/10537746.aspx Undefined behavior can result in time travel (among other things, but time travel is the funkiest)]
* [http://www.cs.utah.edu/~regehr/papers/overflow12.pdf Understanding Integer Overflow in C/C++]
* [http://kukuruku.co/hub/cpp/undefined-behavior-and-fermats-last-theorem Undefined Behavior and Fermat’s Last Theorem]
* [http://lwn.net/Articles/342330/ Fun with NULL pointers, part 1] (local exploit in Linux 2.6.30 caused by UB due to null pointer dereference)</text>
      <sha1>7cw8uhnz9vj6fmw9yi9j15k78dnzh5e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/union</title>
    <ns>0</ns>
    <id>5526</id>
    <revision>
      <id>91920</id>
      <parentid>88606</parentid>
      <timestamp>2017-03-31T20:01:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(CWG|cwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|CWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="9268">{{title|Union declaration}}
{{cpp/language/classes/navbar}}

A union is a special class type that can hold only one of its non-static {{rlp|data_members|data members}} at a time.

The class specifier for a union declaration is similar to {{rlp|class|class or struct}} declaration:

{{sdsc begin}}
{{sdsc|1=
{{ttb|union}} {{spar|attr}} {{spar|class-head-name}} {{ttb|{ }} {{spar|member-specification}} {{ttb|} }}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | optional sequence of any number of {{rlp|attributes}} }}
{{par | {{spar|class-head-name}} | the name of the union that's being defined. Optionally prepended by {{spar|nested-name-specifier}} (sequence of names and scope-resolution operators, ending with scope-resolution operator). The name may be omitted, in which case the union is ''unnamed''}}
{{par | {{spar|member-specification}} | list of access specifiers, member object and member function declarations and definitions.}}
{{par end}}

A union can have member functions (including constructors and destructors), but not virtual functions. 

A union cannot have base classes and cannot be used as a base class.

A union cannot have data members of reference types.
{{rev begin}}
{{rev | until=c++11 | Unions cannot contain a non-static data member with a non-trivial special member function ({{rlp|copy_constructor|copy constructor}}, {{rlp|as_operator|copy-assignment}} operator, or {{rlp|destructor}}).
}}
{{rev | since=c++11 | If a union contains a non-static data member with a non-trivial {{rlp|copy_constructor|copy}}/{{rlp|move_constructor|move}} constructor, {{rlp|as_operator|copy}}/{{rlp|move_operator|move}} assignment, or {{rlp|destructor}}), that function is deleted by default in the union and needs to be defined explicitly by the programmer.

If a union contains a non-static data member with a non-trivial {{rlp|default_constructor|default}} constructor, the default constructor of the union is deleted by default unless a [[#Union-like classes|variant member]] of the union has a default member initializer{{mark unreviewed dr|CWG|2084}}.

At most one [[#Union-like classes|variant member]] can have a {{rlp|data_members#Member_initialization|default member initializer}}.
}}
{{rev end}}

Just like in {{rlp|classes|struct}} declaration, the default member access in a union is {{rlp|access|public}}.

===Explanation===
The union is only as big as necessary to hold its largest data member. The other data members are allocated in the same bytes as part of that largest member. The details of that allocation are implementation-defined, and it's undefined behavior to read from the member of the union that wasn't most recently written. Many compilers implement, as a non-standard language extension, the ability to read inactive members of a union.

{{source|1=
#include &lt;iostream&gt;

union S
{
    std::int32_t n;     // occupies 4 bytes
    std::uint16_t s[2]; // occupies 4 bytes
    std::uint8_t c;     // occupies 1 byte
};                      // the whole union occupies 4 bytes

int main()
{
    S s = {0x12345678}; // initializes the first member, s.n is now the active member
    // at this point, reading from s.s or s.c is undefined behavior
    std::cout &lt;&lt; std::hex &lt;&lt; &quot;s.n = &quot; &lt;&lt; s.n &lt;&lt; '\n';
    s.s[0] = 0x0011; // s.s is now the active member
    // at this point, reading from n or c is UB but most compilers define it
    std::cout &lt;&lt; &quot;s.c is now &quot; &lt;&lt; +s.c &lt;&lt; '\n' // 11 or 00, depending on platform
              &lt;&lt; &quot;s.n is now &quot; &lt;&lt; s.n &lt;&lt; '\n'; // 12340011 or 00115678
}
}}

Each member is allocated as if it is the only member of the class.

{{rev begin}}
{{rev|since=c++11|
If members of a union are classes with user-defined constructors and destructors, to switch the active member, explicit destructor and placement new are generally needed:

{{source|1=#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

union S
{
    std::string str;
    std::vector&lt;int&gt; vec;
    ~S() {} // needs to know which member is active, only possible in union-like class 
};          // the whole union occupies max(sizeof(string), sizeof(vector&lt;int&gt;))

int main()
{
    S s = {&quot;Hello, world&quot;};
    // at this point, reading from s.vec is undefined behavior
    std::cout &lt;&lt; &quot;s.str = &quot; &lt;&lt; s.str &lt;&lt; '\n';
    s.str.~basic_string&lt;char&gt;();
    new (&amp;s.vec) std::vector&lt;int&gt;;
    // now, s.vec is the active member of the union
    s.vec.push_back(10);
    std::cout &lt;&lt; s.vec.size() &lt;&lt; '\n';
    s.vec.~vector&lt;int&gt;();
}
}}
}}
{{rev end}}

If two union members are standard-layout types, it's well-defined to examine their common subsequence on any compiler.

====Member lifetime====
The {{rlp|lifetime}} of a union member begins when the member is made active. If another member was active previously, its lifetime ends.

When active member of a union is switched by an assignment expression of the form {{tt|E1 {{=}} E2}} that uses either the built-in assignment operator or a trivial assignment operator, for each union member X that appears in the member access and array subscript subexpressions of {{tt|E1}} that is not a class with non-trivial or deleted default constructors, if modification of X would have undefined behavior under type aliasing rules, an object of the type of X is implicitly created in the nominated storage; no initialization is performed and the beginning of its lifetime is sequenced after the value computation of the left and right operands and before the assignment. 
{{source|1=
union A { int x; int y[4]; };
struct B { A a; };
union C { B b; int k; };
int f() {
  C c;               // does not start lifetime of any union member
  c.b.a.y[3] = 4;    // OK: &quot;c.b.a.y[3]&quot;, names union members c.b and c.b.a.y;
                     // This creates objects to hold union members c.b and c.b.a.y
  return c.b.a.y[3]; // OK: c.b.a.y refers to newly created object
}

struct X { const int a; int b; };
union Y { X x; int k; };
void g() {
  Y y = { { 1, 2 } }; // OK, y.x is active union member (9.2)
  int n = y.x.a;
  y.k = 4;   // OK: ends lifetime of y.x, y.k is active member of union
  y.x.b = n; // undefined behavior: y.x.b modified outside its lifetime,
             // &quot;y.x.b&quot; names y.x, but X's default constructor is deleted,
             // so union member y.x's lifetime does not implicitly start
}
}}

====Anonymous unions====
An ''anonymous union'' is an unnamed union definition that does not simultaneously define any variables (including objects of the union type, references, or pointers to the union).

{{sdsc begin}}
{{sdsc|1=
{{ttb|union}} {{ttb|{ }} {{spar|member-specification}} {{ttb|} }} {{ttb|;}}
}}
{{sdsc end}}

Anonymous unions have further restrictions: they cannot have member functions, cannot have static data members, and all their data members must be public. The only declarations allowed are non-static data members {{rev inl|since=c++14| and {{rlp|static_assert}} declarations}}.

Members of an anonymous union are injected in the enclosing scope (and must not conflict with other names declared there).

{{source|1=int main()
{
    union
    {
        int a;
        const char* p;
    };
    a = 1;
    p = &quot;Jennifer&quot;;
}
}}

Namespace-scope anonymous unions must be declared static unless they appear in an unnamed namespace.

====Union-like classes====
A ''union-like class'' is either a (non-union) class that has at least one anonymous union as a member or a union. A union-like class has a set of ''variant members'':
* the non-static data members of its member anonymous unions;
* in addition, if the union-like class is a union, its non-static data members that are not anonymous unions.

Union-like classes can be used to implement [[enwiki:Tagged union|tagged unions]].

{{source|1=
#include &lt;iostream&gt;

// S has one non-static data member (tag), three enumerator members (CHAR, INT, DOUBLE), 
// and three variant members (c, i, d)
struct S
{
    enum{CHAR, INT, DOUBLE} tag;
    union
    {
        char c;
        int i;
        double d;
    };
};

void print_s(const S&amp; s)
{
    switch(s.tag)
    {
        case S::CHAR: std::cout &lt;&lt; s.c &lt;&lt; '\n'; break;
        case S::INT: std::cout &lt;&lt; s.i &lt;&lt; '\n'; break;
        case S::DOUBLE: std::cout &lt;&lt; s.d &lt;&lt; '\n'; break;
    }
}

int main()
{
    S s = {S::CHAR, 'a'};
    print_s(s);
    s.tag = S::INT;
    s.i = 123;
    print_s(s);
}
}}

{{rev begin}}
{{rev|since=c++17|
The C++ standard library includes {{lc|std::variant}}, which can replace many uses of unions and union-like classes. The example above can be re-written as
{{source|1=
#include &lt;variant&gt;
#include &lt;iostream&gt;

int main()
{
    std::variant&lt;char, int, double&gt; s = 'a';
    std::visit([](auto x){ std::cout &lt;&lt; x &lt;&lt; '\n';}, s);
    s = 123;
    std::visit([](auto x){ std::cout &lt;&lt; x &lt;&lt; '\n';}, s);
}
}}
}}
{{rev end}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1940|std=c++14|before=anonymous unions only allowed non-static data members|after=static_assert also allowed}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc see c|c/language/union|Union declaration}}
{{dsc end}}

[[de:cpp/language/union]]
[[es:cpp/language/union]]
[[fr:cpp/language/union]]
[[it:cpp/language/union]]
[[ja:cpp/language/union]]
[[pt:cpp/language/union]]
[[ru:cpp/language/union]]
[[zh:cpp/language/union]]</text>
      <sha1>4vq62fbah7j1ojvg7ks6zq8dtwm9h5y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/unqualified lookup</title>
    <ns>0</ns>
    <id>14018</id>
    <revision>
      <id>87571</id>
      <parentid>87545</parentid>
      <timestamp>2016-09-11T04:02:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>well then it should say 'derived' rather than strike through things</comment>
      <text xml:space="preserve" bytes="20415">{{title|Unqualified name lookup}}
{{cpp/language/basics/navbar}}

For an ''unqualified'' name, that is a name that does not appear to the right of a scope resolution operator {{ttb|::}}, name lookup examines the {{rlp|scope|scopes}} as described below, until it finds at least one declaration of any kind, at which time the lookup stops and no further scopes are examined. (Note: lookup from some contexts skips some declarations, for example, lookup of the name used to the left of {{ttb|::}} ignores function, variable, and enumerator declarations, lookup of a name used as a base class specifier ignores all non-type declarations)

For the purpose of unqualified name lookup, all declarations from a namespace nominated by a {{rlp|namespace|using directive}} appear as if declared in the nearest enclosing namespace which contains, directly or indirectly, both the using-directive and the nominated namespace.

Unqualified name lookup of the name used to the left of the function-call operator (and, equivalently, operator in an expression) is described in {{rlp|adl|argument-dependent lookup}}.

===File scope===
For a name used in global (top-level namespace) scope, outside of any function, class, or user-declared namespace, the global scope before the use of the name is examined:
{{source|1=
int n = 1;     // declaration of n
int x = n + 1; // OK: lookup finds ::n

int z = y - 1; // Error: lookup fails
int y = 2;     // declaration of y

int main() {}
}}

===Namespace scope===
For a name used in a user-declared namespace outside of any function or class, this namespace is searched before the use of the name, then the namespace enclosing this namespace before the declaration of this namespace, etc until the global namespace is reached.
{{source|1=
int n = 1; // declaration
namespace N {
  int m = 2;
  namespace Y {
    int x = n; // OK, lookup finds ::n
    int y = m; // OK, lookup finds ::N::m
    int z = k; // Error: lookup fails
  }
  int k = 3;
}
}}

===Definition outside of its namespace===
For a name used in the definition of a namespace-member variable outside the namespace, lookup proceeds the same way as for a name used inside the namespace:
{{source|1=
namespace X {
    extern int x; // declaration, not definition
    int n = 1; // found 1st
};
int n = 2; // found 2nd.
int X::x = n; // finds X::n, sets X::x to 1
}}

===Non-member function definition===
For a name used in the definition of a function, either in its body or as part of default argument, where the function is a member of user-declared or global namespace, the block in which the name is used is searched before the use of the name, then the enclosing block is searched before the start of that block, etc, until reaching the block that is the function body. Then the namespace in which the function is declared is searched until the definition (not necessarily the declaration) of the function that uses the name, then the enclosing namespaces, etc.
{{source|1=
namespace A {
   namespace N {
       void f();
       int i=3; // found 3rd (if 2nd is not present)
    }
    int i=4; // found 4th (if 3rd is not present)
}

int i=5; // found 5th (if 4th is not present)

void A::N::f() {
    int i = 2; // found 2nd (if 1st is not present)
    while(true) {
       int i = 1; // found 1st: lookup is done
       std::cout &lt;&lt; i;
    }
}

// int i; // not found

namespace A {
  namespace N {
    // int i; // not found
  }
}
}}

===Class definition===
For a name used anywhere in {{rlp|class|class definition}}, except inside a member function body, a default argument of a member function, exception specification of a member function, default member initializer, or inside a nested class definition (including names of the bases from which the nested class is derived), the following scopes are searched:
@a@ the body of the class in which the name is used until the point of use and the entire body of its base class(es)
@b@ if this class is {{rlp|nested types|nested}}, the body of the enclosing class until the declaration of this class and the entire body of the base class(es) of the enclosing class.
@c@ if this class is {{rlp|class#Local classes|local}}, or nested within a local class, the block scope in which the class is defined until the point of definition
@d@ if this class is a member of a namespace, or is nested in a class that is a member of a namespace, or is a local class in a function that is a member of a namespace, the scope of the namespace is searched until the definition of the class, enclosing class, or function. if the lookup of for a name introduced by a {{rlp|friend}} declaration: in this case only the innermost enclosing namespace is considered, otherwise lookup continues to enclosing namespaces until the global scope as usual.
{{source|1=
namespace M {
    // const int i = 1; // never found
    class B {
        // const const int i = 3; // found 3nd (but later rejected by access check)
    };
}
// const int i = 5; // found 5th
namespace N {
    // const int i = 4; // found 4th
    class Y : public M::B {
        // static const int i = 2; // found 2nd
        class X {
            // static const int i = 1; // found 1st
            int a[i]; // use of i
            // static const int i = 1; // never found
        };
        // static const int i = 2; // never found
    };
    // const int i = 4; // never found
}
// const int i = 5; // never found
}}

===Injected class name===
For the name of a class or class template used within the definition of that class or template or derived from one, unqualified name lookup finds the class that's being defined as if the name was introduced by a member declaration (with public member access) {{todo|anything else that's relevant on injected class names (e.g. 14.6.10[temp.local]?)}}

===Member function definition===
For a name used inside a member function body, a default argument of a member function, exception specification of a member function, default member initializer, or inside a nested class definition (including names of the bases from which the nested class is derived), the scopes searched are the same as in [[#Class_definition|class definition]], except that the entire scope of the class is considered, not just the part prior to the declaration that uses the name. For nested classes the entire body of the enclosing class is searched.
{{source|1=
class B {
    // int i; // found 3rd
};
namespace M {
    // int i; // found 5th
    namespace N {
        // int i; // found 4th
        class X : public B {
            // int i; // found 2nd
            void f();
            // int i; // found 2nd as well
        };
        // int i; // found 4th
    }
}
// int i; // found 6th
void M::N::X::f()
{
    // int i; // found 1st
    i = 16;
    // int i; // never found
}
namespace M {
  namespace N {
    // int i; // never found
  }
}
}}

: Either way, when examining the bases from which the class is derived, the following rules, sometime referred to as [[enwiki:Dominance_(C++)|dominance in virtual inheritance]], are followed:
{{rev begin}}
{{rev|until=c++11|A member name found in a sub-object {{tt|B}} hides the same member name in any sub-object {{tt|A}} if {{tt|A}} is a base class sub-object of {{tt|B}}. (Note that this does not hide the name in any additional, non-virtual, copies of {{tt|A}} on the inheritance lattice that aren't bases of {{tt|B}}: this rule only has an effect on virtual inheritance.) Names introduced by using-declarations are treated as names in the class containing the declaration. After examining each base, the resulting set must either include declarations of a static member from subobjects of the same type, or declarations of non-static members from the same subobject}}
{{rev|since=c++11|A ''lookup set'' is constructed, which consists of the declarations and the subobjects in which these declarations were found. Using-declarations are replaced by the members they represent and type declarations, including injected-class-names are replaced by the types they represent. If {{tt|C}} is the class in whose scope the name was used, {{tt|C}} is examined first. If the list of declarations in {{tt|C}} is empty, lookup set is built for each of its direct bases {{tt|Bi}} (recursively applying these rules if {{tt|Bi}} has its own bases). Once built, the lookup sets for the direct bases are merged into the lookup set in {{tt|C}} as follows
:* if the set of declarations in {{tt|Bi}} is empty, it is discarded
:* if the lookup set of {{tt|C}} built so far is empty, it is replaced by the lookup set of {{tt|Bi}}
:* if every subobject in the lookup set of {{tt|Bi}} is a base of at least one of the subobjects already added to the lookup set of {{tt|C}}, the lookup set of {{tt|Bi}} is discarded.
:* if every subobject already added to the lookup set of {{tt|C}} is a base of at least one subobject in the lookup set of {{tt|Bi}}, then the lookup set of {{tt|C}} is discarded and replaced with the lookup set of {{tt|Bi}}
:* otherwise, if the declaration sets in {{tt|Bi}} and in {{tt|C}} are different, the result is an ambiguous merge: the new lookup set of {{tt|C}} has an invalid declaration and a union of the subobjects ealier merged into {{tt|C}} and introduced from {{tt|Bi}}. This invalid lookup set may not be an error if it is discarded later.
:* otherwise, the new lookup set of {{tt|C}} has the shared declaration sets and the union of the subobjects ealier merged into {{tt|C}} and introduced from {{tt|Bi}}
}}
{{rev end}} 
{{source|
struct X { void f(); };
struct B1: virtual X { void f(); };
struct B2: virtual X {};
struct D : B1, B2 {
    void foo() {
        X::f(); // OK, calls X::f (qualified lookup)
        f(); // OK, calls B1::f (unqualified lookup)
// C++98 rules: B1::f hides X::f, so even though X::f can be reached from D
// through B2, it is not found by name lookup from D.
// C++11 rules: lookup set for f in D finds nothing, proceeds to bases
//  lookup set for f in B1 finds B1::f, and is completed
// merge replaces the empty set, now lookup set for f in C has B1::f in B1
//  lookup set for f in B2 finds nothing, proceeds to bases
//    lookup for f in X finds X::f
//  merge replaces the empty set, now lookup set for f in B2 has X::f in X
// merge into C finds that every subobject (X) in the lookup set in B2 is a base
// of every subobject (B1) already merged, so the B2 set is discareded
// C is left with just B1::f found in B1
// (if struct D : B2, B1 was used, then the last merge would *replace* C's 
//  so far merged X::f in X because every subobject already added to C (that is X)
//  would be a base of at least one subobject in the new set (B1), the end
//  result would be the same: lookup set in C holds just B1::f found in B1)
    }
};
}}
: Unqualified name lookup that finds static members of {{tt|B}}, nested types of {{tt|B}}, and enumerators declared in {{tt|B}} is unambiguous even if there are multiple non-virtual base subobjects of type {{tt|B}} in the inheritance tree of the class being examined:
{{source|1=
struct V { int v; };
struct A {
        int a;
        static int s;
        enum { e };
};
struct B : A, virtual V { };
struct C : A, virtual V { };
struct D : B, C { };

void f(D&amp; pd) {
        ++pd.v; // OK: only one v because only one virtual base subobject
        ++pd.s; // OK: only one static A::s, even though found in B and in C
        int i = pd.e; // OK: only one enumerator A::e, even though found in B and C
        ++pd.a; // error, ambiguous: A::a in B and A::a in C 
}
}}

===Friend function definition===
For a name used in a {{rlp|friend}} function definition inside the body of the class that is granting friendship, unqualified name lookup proceeds the same way as for a member function. For a name used in a {{rlp|friend}} function which is defined outside the body of a class, unqualified name lookup proceeds the same way as for a function in a namespace.
{{source|1=
int i = 3; // found 3rd for f1, found 2nd for f2
struct X {
    static const int i = 2; // found 2nd for f1, never found for f2
    friend void f1(int x)
    {
        // int i; // found 1st
        i = x; // finds and modifies X::i
    }
    friend int f2();
    // static const int i = 2; // found 2nd for f1 anywhere in class scope
};
void f2(int x) {
    // int i; // found 1st
    i = x; // finds and modifies ::i
}
}}

===Friend function declaration===
For a name used in the declarator of a {{rlp|friend}} function declaration that friends a member function from another class, if the name isn't a part of any template argument, the unqualified lookup first examines the entire scope of the member function's class. If not found in that scope (or if the name is a part of a template argument), the lookup continues as if for a member function of the class that is granting friendship
{{source|1=
// the class whose member functions are friended
struct A { 
    typedef int AT;
    void f1(AT);
    void f2(float);
    template &lt;class T&gt; void f3();
};

// the class that is granting friendship
struct B {
    typedef char AT;
    typedef float BT;
    friend void A::f1(AT); // lookup for AT finds A::AT
    friend void A::f2(BT); // lookup for BT finds B::BT 
    friend void A::f3&lt;AT&gt;(); // lookup for AT finds B::AT 
};
}}

===Default argument===
For a name used in a {{rlp|default arguments|default argument}} in a function declaration, or name used in the {{spar|expression}} part of a {{rlp|initializer list|member-initializer}} of a constructor, the function parameter names are found first, before the enclosing block, class, or namespace scopes are examined:
{{source|1=
class X {
    int a, b, i, j;
public:
    const int&amp; r;
    X(int i): r(a), // initializes X::r to refer to X::a
              b(i), // initializes X::b to the value of the parameter i
              i(i), // initializes X::i to the value of the parameter i
              j(this-&gt;i) // initializes X::j to the value of X::i
    { }
}

int a;
int f(int a, int b = a); // error: lookup for a finds the parameter a, not ::a
                         // and parameters are not allowed as default arguments
}}

===Static data member definition===
For a name used in the definition of a {{rlp|static|static data member}}, lookup proceeds the same way as for a name used in the definition of a member function.
{{source|1=
struct X {
    static int x;
    static const int n = 1; // found 1st
};
int n = 2; // found 2nd.
int X::x = n; // finds X::n, sets X::x to 1, not 2
}}

===Enumerator declaration===
For a name used in the initializer part of the {{rlp|enum|enumerator declaration}}, previously declared enumerators in the same enumeration are found first, before the unqualified name lookup proceeds to examine the enclosing block, class, or namespace scope.
{{source|1=
const int RED = 7;
enum class color {
    RED,
    GREEN = RED+2, // RED finds color::RED, not ::RED, so GREEN = 2
    BLUE = ::RED+4 // qualified lookup finds ::RED, BLUE = 11
};
}}

===Catch clause of a function-try block===
For a name used in the catch-clause of a {{rlp|function-try-block}}, lookup proceeds as if for a name used in the very beginning of the outermost block of the function body (in particular, function parameters are visible, but names declared in that outermost block are not)
{{source|1=
int n = 3; // found 3rd
int f(int n = 2) // found 2nd
try {
   int n = -1;  // never found
} catch(...) {
   // int n = 1; // found 1st
   assert(n == 2); // loookup for n finds function parameter f
   throw;
}
}}

===Overloaded operator===
For an {{rlp|expressions#Operators|operator}} used in expression (e.g., {{tt|operator+}} used in {{tt|a+b}}), the lookup rules are slightly different from the operator used in an explicit function-call expression such as {{tt|operator+(a,b)}}: when parsing an expression, two separate lookups are performed: for the non-member operator overloads and for the member operator overloads (for the operators where both forms are permitted). Those sets are then merged with the built-in operator overloads on equal grounds as described in {{rlp|overload resolution}}. If explicit function call syntax is used, regular unqualified name lookup is performed:
{{source|1=
struct A {};
void operator+(A, A); // user-defined non-member operator+

struct B {
    void operator+(B); // user-defined member operator+
    void f ();
};

A a;

void B::f() // definition of a member function of B
{
    operator+(a,a); // error: regular name lookup from a member function
                    // finds the declaration of operator+ in the scope of B
                    // and stops there, never reaching the global scope
    a + a; // OK: member lookup finds B::operator+, non-member lookup
           // finds ::operator+(A,A), overload resolution selects ::operator+(A,A)
}
}}

===Template definition===
For a {{rlp|dependent name|non-dependent name}} used in a template definition, unqualified name lookup takes place when the template definition is examined. The binding to the declarations made at that point is not affected by declarations visible at the point of instantiation. For a {{rlp|dependent name}} used in a template definition, the lookup is postponed until the template arguments are known, at which time {{rlp|adl|ADL}} examines function declarations {{rev inl|until=c++11|with external linkage}} that are visible from the template definition context as well as in the template instantiation context, while non-ADL lookup only examines function declarations {{rev inl|until=c++11|with external linkage}} that are visible from the template definition context (in other words, adding a new function declaration after template definition does not make it visible except via ADL). The behavior is undefined if there is a better match with external linkage in the namespaces examined by the ADL lookup, declared in some other translation unit, or if the lookup would have been ambiguous if those translation units were examined. In any case, if a base class depends on a template parameter, its scope is not examined by unqualified name lookup (neither at the point of definition nor at the point of instantiation).
{{source|1=
void f(char); // first declaration of f

template&lt;class T&gt; 
void g(T t) {
    f(1);    // non-dependent name: lookup finds ::f(char) and binds it now
    f(T(1)); // dependent name: lookup postponed
    f(t);    // dependent name: lookup postponed
//  dd++;    // non-dependent name: lookup finds no declaration
}

enum E { e };
void f(E);   // second declaration of f
void f(int); // third declaration of f
double dd;

void h() {
    g(e);  // instantiates g&lt;E&gt;, at which point
           // the second and the third uses of the name 'f'
           // are looked up and find ::f(char) (by lookup) and ::f(E) (by ADL)
           // then overload resolution chooses ::f(E).
           // This calls f(char), then f(E) twice
    g(32); // instantiates g&lt;int&gt;, at which point
           // the second and the third uses of the name 'f'
           // are looked up and find ::f(char) only
           // then overload resolution chooses ::f(char)
           // This calls f(char) three times
}

typedef double A;
template&lt;class T&gt; class B {
   typedef int A;
};
template&lt;class T&gt; struct X : B&lt;T&gt; {
   A a; // lookup for A finds ::A (double), not B&lt;T&gt;::A
};
}}
Note: see {{rlp|dependent name#Lookup rules|dependent name lookup rules}} for the reasoning and implications of this rule.

===Template name===
{{todo|dual-scope lookup of the template name after -&gt; and . &lt;!-- see http://stackoverflow.com/a/10426708/273767 for the example where it makes sense --&gt;}}

===Member of a class template outside of template===
{{todo}}


===References===
{{ref std c++11}}
{{ref std | section=3.4 | title=Name lookup | id=basic.lookup}}
{{ref std | section=10.2 | title=Member name lookup | id=class.member.lookup}}
{{ref std | section=14.6 | title=Name resolution | id=temp.res}}
{{ref std end}}
{{ref std c++98}}
{{ref std | section=3.4 | title=Name lookup | id=basic.lookup}}
{{ref std | section=10.2 | title=Member name lookup | id=class.member.lookup}}
{{ref std | section=14.6 | title=Name resolution | id=temp.res}}
{{ref std end}}

===See also===
* {{rlp|qualified lookup|Qualified name lookup}} 
* {{rlp|scope|Scope}} 
* {{rlp|adl|Argument-dependent lookup}} 
* {{rlp|function_template|Template argument deduction}}
* {{rlp|overload_resolution|Overload resolution}}</text>
      <sha1>hqmij4x65b2yps0yshky4n7zcqsc4ek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/user literal</title>
    <ns>0</ns>
    <id>5061</id>
    <revision>
      <id>89187</id>
      <parentid>89186</parentid>
      <timestamp>2017-01-06T23:15:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+namespace for operator&quot;&quot;sv</comment>
      <text xml:space="preserve" bytes="13511">{{title|User-defined literals {{mark since c++11}}}}
{{cpp/language/expressions/navbar}}

Allows integer, floating-point, character, and string literals to produce objects of user-defined type by defining a user-defined suffix.

===Syntax===
A user-defined literal is an expression of any of the following forms
{{sdsc begin}}
{{sdsc | since=c++11 | num=1 | {{spar|decimal-literal}} {{spar|ud-suffix}} }}
{{sdsc | since=c++11 | num=2 | {{spar|octal-literal}} {{spar|ud-suffix}} }}
{{sdsc | since=c++11 | num=3 | {{spar|hex-literal}} {{spar|ud-suffix}} }}
{{sdsc | since=c++14 | num=4 | {{spar|binary-literal}} {{spar|ud-suffix}} }}
{{sdsc | since=c++11 | num=5 | {{spar|fractional-constant}} {{spar|exponent-part}}{{mark optional}} {{spar|ud-suffix}} }}
{{sdsc | since=c++11 | num=6 | {{spar|digit-sequence}} {{spar|exponent-part}} {{spar|ud-suffix}} }}
{{sdsc | since=c++11 | num=7 | {{spar|character-literal}} {{spar|ud-suffix}} }}
{{sdsc | since=c++11 | num=8 | {{spar|string-literal}} {{spar|ud-suffix}} }}
{{sdsc end}}
@1-4@ user-defined integer literals, such as {{c|12_km}}
@5-6@ user-defined floating-point literals, such as {{c|0.5_Pa}}
@7@ user-defined character literal, such as {{c|'c'_X}}
@8@ user-defined string literal, such as {{c|&quot;abd&quot;_L}} or {{c|u16&quot;xyz&quot;_M}}

{{par begin}}
{{par | {{spar|decimal-literal}} | same as in {{rlp|integer literal}}, a non-zero decimal digit followed by zero or more decimal digits}}
{{par | {{spar|octal-literal}} | same as in {{rlp|integer literal}}, a zero followed by zero or more octal digits}}
{{par | {{spar|hex-literal}} | same as in {{rlp|integer literal}}, {{tt|0x}} or {{tt|0X}} followed by one or more hexadecimal digits}}
{{par | {{spar|binary-literal}} | same as in {{rlp|integer literal}}, {{tt|0b}} or {{tt|0B}} followed by one or more binary digits}}
{{par | {{spar|digit-sequence}} | same as in {{rlp|floating literal}}, a sequence of decimal digits }}
{{par | {{spar|fractional-constant}} | same as in {{rlp|floating literal}}, either a {{spar|digit-sequence}} followed by a dot ({{c|123.}}) or an optional {{spar|digit-sequence}} followed by a dot and another {{spar|digit-sequence}} ({{c|1.0}} or {{c|.12}}) }}
{{par | {{spar|exponent-part}} | same as in {{rlp|floating literal}}, the letter {{tt|e}} or the letter {{tt|E}} followed by optional sign, followed by {{spar|digit-sequence}}}}
{{par | {{spar|character-literal}} | same as in {{rlp|character literal}} }}
{{par | {{spar|string-literal}} | same as in {{rlp|string literal}}, including raw string literals }}
{{par | {{spar|ud-suffix}} | an identifier, introduced by a ''literal operator'' or a ''literal operator template'' declaration (see below). All {{spar|ud-suffix}}es introduced by a program must begin with the underscore character {{ttb|_}}. The standard library {{spar|ud-suffix}}es do not begin with underscores.  }}
{{par end}}

{{rev begin}}
{{rev|since=c++14|
In the integer and floating-point digit sequences, optional separators {{ttb|'}} are allowed between any two digits and are ignored}}
{{rev end}}

If a token matches a user-defined literal syntax and a regular literal syntax, it is assumed to be a regular literal (that is, it's impossible to overload {{c|LL}} in {{c|123LL}})

When the compiler encounters a user-defined literal with {{spar|ud-suffix}} {{tt|X}}, it performs {{rlp|lookup#Unqualified_name_lookup|unqualified name lookup}}, looking for a function with the name {{tt|operator &quot;&quot; X}}. If the lookup does not find a declaration, the program is ill-formed. Otherwise,
@1@ For user-defined integer literals
:@a@ if the overload set includes a literal operator with the parameter type {{c|unsigned long long}}, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X(nULL)}}, where n is the literal without {{spar|ud-suffix}}
:@b@ otherwise, the overload set must include either, but not both, a raw literal operator or a raw literal operator template. If the overload set includes a raw literal operator, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X(&quot;n&quot;)}}
:@c@ otherwise, if the overload set includes a raw literal operator template, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X&lt;'c1', 'c2', 'c3'..., 'ck'&gt;()}}, where c1..ck are the individual characters of {{tt|n}}.
@2@ For user-defined floating-point literals,
:@a@ If the overload set includes a literal operator with the parameter type {{c|long double}}, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X(fL)}}, where {{tt|f}} is the literal without {{spar|ud-suffix}}
:@b@ otherwise, the overload set must include either, but not both, a raw literal operator or a raw literal operator template. If the overload set includes a raw literal operator, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X(&quot;f&quot;)}}
:@c@ otherwise, if the overload set includes a raw literal operator template, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X&lt;'c1', 'c2', 'c3'..., 'ck'&gt;()}}, where c1..ck are the individual characters of {{tt|f}}.
@3@ For user-defined string literals, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X (str, len)}}, where {{tt|str}} is the literal without {{spar|ud-suffix}} and {{tt|len}} is its length excluding the terminating null character
@4@ For user-defined character literals, the user-defined literal expression is treated as a function call {{c|operator &quot;&quot; X (ch)}}, where {{tt|ch}} is the literal without {{spar|ud-suffix}}

{{source|1=
long double operator &quot;&quot; _w(long double);
std::string operator &quot;&quot; _w(const char16_t*, size_t);
unsigned operator &quot;&quot; _w(const char*);
int main() {
    1.2_w; // calls operator &quot;&quot; _w(1.2L)
    u&quot;one&quot;_w; // calls operator &quot;&quot; _w(u&quot;one&quot;, 3)
    12_w; // calls operator &quot;&quot; _w(&quot;12&quot;)
    &quot;two&quot;_w; // error: no applicable literal operator
}
}}

When string literal concatenation takes place in {{rlp|translation phases|translation phase 6}}, user-defined string literals are concatenated as well, and their {{spar|ud-suffix}}es are ignored for the purpose of concatenation, except that only one suffix may appear on all concatenated literals:
{{source|1=
int main() {
    L&quot;A&quot; &quot;B&quot; &quot;C&quot;_x; // OK: same as L&quot;ABC&quot;_x
    &quot;P&quot;_x &quot;Q&quot; &quot;R&quot;_y;// error: two different ud-suffixes (_x and _y)
}
}}

===Literal operators===
The function called by a user-defined literal is known as ''literal operator'' (or, if it's a template, ''literal operator template''). It is declared just like any other {{rlp|function}} or {{rlp|function template}} at namespace scope (it may also be a friend function, an explicit instantiation or specialization of a function template, or introduced by a using-declaration), except for the following restrictions:

The name of this function can have one of the two forms:

{{sdsc begin}}
{{sdsc | {{ttb|operator}} {{ttb|&quot;&quot;}} {{spar|identifier}} }}
{{sdsc | {{ttb|operator}} {{spar|user-defined-string-literal}} {{mark since c++14}} }} 
{{sdsc end}}
{{par begin}}
{{par | {{spar|identifier}} | the identifier to use as the {{spar|ud-suffix}} for the user-defined literals that will call this function. Must begin with the underscore {{ttb|_}}: the suffixes that do not begin with the underscore are reserved for the literal operators provided by the standard library.}}
{{par | {{spar|user-defined-string-literal}} | the character sequence {{ttb|&quot;&quot;}} followed, without a space, by the character sequence that becomes the {{spar|ud-suffix}}. This special syntax makes it possible to use language keywords and [[cpp/keywords|reserved identifiers]] as ud-suffixes, and is used by the declaration of {{c|operator &quot;&quot;if}} from the header {{c|&lt;complex&gt;}}. Note that using this form does not change the rules that user-defined literal operators must begin with an underscore: declarations such as {{c|operator &quot;&quot;if}} may only appear as part of a standard library header. However, it allows the use of an underscore followed by a capital letter (which is otherwise a [[cpp/language/identifiers|reserved identifier]])}}
{{par end}}

If the literal operator is a template, it must have an empty parameter list and can have only one template parameter, which must be a non-type template parameter pack with element type char
{{source|1=
template &lt;char...&gt; double operator &quot;&quot; _x();
}}

Only the following parameter lists are allowed on literal operators :
{{sdsc begin}}
{{sdsc | num=1 | {{ttb|(}} {{c|const char *}} {{ttb|)}} }}
{{sdsc | num=2 | {{ttb|(}} {{c|unsigned long long int}} {{ttb|)}} }}
{{sdsc | num=3 | {{ttb|(}} {{c|long double}} {{ttb|)}} }}
{{sdsc | num=4 | {{ttb|(}} {{c|char}} {{ttb|)}} }}
{{sdsc | num=5 | {{ttb|(}} {{c|wchar_t}} {{ttb|)}} }}
{{sdsc | num=6 | {{ttb|(}} {{c|char16_t}} {{ttb|)}} }}
{{sdsc | num=7 | {{ttb|(}} {{c|char32_t}} {{ttb|)}} }}
{{sdsc | num=8 | {{ttb|(}} {{c|const char *}} {{ttb|,}} {{c|std::size_t}} {{ttb|)}} }}
{{sdsc | num=9 | {{ttb|(}} {{c|const wchar_t *}} {{ttb|,}} {{c|std::size_t}} {{ttb|)}} }}
{{sdsc | num=10 | {{ttb|(}} {{c|const char16_t *}} {{ttb|,}} {{c|std::size_t}} {{ttb|)}} }}
{{sdsc | num=11 | {{ttb|(}} {{c|const char32_t *}} {{ttb|,}} {{c|std::size_t}} {{ttb|)}} }}
{{sdsc end}}
@1@ Literal operators with this parameter list are the ''raw literal operators'', used as fallbacks for integer and floating-point user-defined literals (see above)
@2@ Literal operators with these parameter lists are the first-choice literal operator for user-defined integer literals
@3@ Literal operators with these parameter lists are the first-choice literal operator for user-defined floating-point literals
@4-7@ Literal operators with these parameter lists are called by user-defined character literals
@8-11@ Literal operators with these parameter lists are called by user-defined string literals

{{rlp|default arguments|Default arguments}} are not allowed

C {{rlp|language linkage}} is not allowed

Other than the restrictions above, literal operators and literal operator templates are normal functions (and function templates), they can be declared inline or constexpr, they may have internal or external linkage, they can be called explicitly, their addresses can be taken, etc.

{{source|1=
void operator &quot;&quot; _km(long double); // OK, will be called for 1.0_km
std::string operator &quot;&quot; _i18n(const char*, std::size_t); // OK
template &lt;char...&gt; double operator &quot;&quot; _π(); // OK
float operator &quot;&quot;_e(const char*); // OK

float operator &quot;&quot;Z(const char*); // error: suffix must begin with underscore
double operator&quot;&quot; _Z(long double); // error: all names that begin with underscore
                                   // followed by uppercase letter are reserved
double operator&quot;&quot;_Z(long double); // OK: even though _Z is reserved &quot;&quot;_Z is allowed
}}

===Notes===
Since the introduction of user-defined literals, the code that uses [[c/types/integer|format macro constants for fixed-width integer types]] with no space after the preceding string literal became invalid: {{c|std::printf(&quot;%&quot;PRId64&quot;\n&quot;,INT64_MIN);}} has to be replaced by {{c|std::printf(&quot;%&quot; PRId64&quot;\n&quot;,INT64_MIN);}}

Due to maximal munch, user-defined integer and floating point literals ending in {{rev inl|since=c++17|{{tt|p}}, {{tt|P}},}} {{tt|e}} and {{tt|E}}, when followed by the operators {{tt|+}} or {{tt|-}}, must be separated from the operator with whitespace in the source:

{{source|1=
long double operator&quot;&quot;_E(long double);
long double operator&quot;&quot;_a(long double);
int operator&quot;&quot;_p(unsigned long long);

auto x = 1.0_E+2.0;  // error
auto y = 1.0_a+2.0;  // OK
auto z = 1.0_E +2.0; // OK
auto w = 1_p+2;      // error
auto u = 1_p +2;     // OK
}}

Otherwise, a single invalid preprocessing number token (e.g., {{c|1.0_E+2.0}}) is formed, which causes compilation to fail.

===Examples===
{{example||code=
#include &lt;iostream&gt;

// used as conversion
constexpr long double operator&quot;&quot; _deg ( long double deg )
{
    return deg*3.141592/180;
}

// used with custom type
struct mytype
{
    mytype ( unsigned long long m):m(m){}
    unsigned long long m;
};
mytype operator&quot;&quot; _mytype ( unsigned long long n )
{
    return mytype(n);
}

// used for side-effects
void operator&quot;&quot; _print ( const char* str )
{
    std::cout &lt;&lt; str;
}

int main(){
    double x = 90.0_deg;
    std::cout &lt;&lt; std::fixed &lt;&lt; x &lt;&lt; '\n';
    mytype y = 123_mytype;
    std::cout &lt;&lt; y.m &lt;&lt; '\n';
    0x123ABC_print;
}
|output=
1.570796
123
0x123ABC
}}

===Standard library===
The following literal operators are defined in the standard library

{{dsc begin}}
{{dsc namespace | std::literals::complex_literals | inline=true }}
{{dsc inc | cpp/numeric/dsc operator&quot;&quot;i}}
{{dsc namespace | std::literals::chrono_literals | inline=true }}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;h}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;min}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;s}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;ms}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;us}}
{{dsc inc | cpp/chrono/dsc operator&quot;&quot;ns}}
{{dsc namespace | std::literals::string_literals | inline=true }}
{{dsc inc | cpp/string/basic_string/dsc operator&quot;&quot;s}}
{{dsc namespace | std::literals::string_view_literals | inline=true }}
{{dsc inc | cpp/string/basic_string_view/dsc operator&quot;&quot;sv}}
{{dsc end}}



[[de:cpp/language/user literal]]
[[es:cpp/language/user literal]]
[[fr:cpp/language/user literal]]
[[it:cpp/language/user literal]]
[[ja:cpp/language/user literal]]
[[pt:cpp/language/user literal]]
[[ru:cpp/language/user literal]]
[[zh:cpp/language/user literal]]</text>
      <sha1>iu9i3kjdzguh0sum6vgms2hzgp4ia5v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/using declaration</title>
    <ns>0</ns>
    <id>9918</id>
    <revision>
      <id>92107</id>
      <parentid>90817</parentid>
      <timestamp>2017-04-05T14:58:16Z</timestamp>
      <contributor>
        <ip>223.3.181.206</ip>
      </contributor>
      <text xml:space="preserve" bytes="12481">{{title|Using-declaration}}
{{cpp/language/classes/navbar}}
Introduces a name that is defined elsewhere into the declarative region where this using-declaration appears.

{{sdsc begin}}
{{sdsc|{{ttb|using}} {{ttb|typename}}{{mark optional}} {{spar|nested-name-specifier}} {{spar|unqualified-id}} {{ttb|;}}|notes={{mark until c++17}}
}}
{{sdsc|{{ttb|using}} {{spar|declarator-list}} {{ttb|;}}|notes={{mark since c++17}}
}}
{{sdsc end}}

{{par begin}}
{{par | {{spar|nested-name-specifier}} | a sequence of names and scope resolution operators {{tt|::}}, ending with a scope resolution operator. A single {{tt|::}} refers to the global namespace.}}
{{par | {{spar|unqualified-id}} | an {{rlp|identifiers|id-expression}} }}
{{par | {{spar|typename}} | the keyword {{tt|typename}} may be used as necessary to resolve {{rlp|dependent_name|dependent names}}, when the using-declaration introduces a member type from a base class into a class template }}
{{par | {{spar|declarator-list}} | comma-separated list of one or more declarators of the {{ttb|typename}}{{mark optional}} {{spar|nested-name-specifier}} {{spar|unqualified-id}}. Some or all of the declarators may be followed by an ellipsis {{c|...}} to indicate {{rlp|parameter pack|pack expansion}}}}
{{par end}}

==Explanation==
Using-declarations can be used to introduce namespace members into other namespaces and block scopes, or to introduce base class members into derived class definitions.

{{rev begin}}
{{rev|since=c++17|
A using-declaration with more than one using-declarator is equivalent to a corresponding sequence of using-declarations with one using-declarator.
}}
{{rev end}}

===In namespace and block scope===
Using-declaration introduces a member of another namespace into current namespace or block scope
{{source|1=
#include &lt;iostream&gt;
#include &lt;string&gt;
using std::string;
int main()
{
    string str = &quot;Example&quot;;
    using std::cout;
    cout &lt;&lt; str;
}
}}
See {{rlp|namespace}} for details.

===In class definition===
Using-declaration introduces a member of a base class into the derived class definition, such as to expose a protected member of base as public member of derived. In this case, {{spar|nested-name-specifier}} must name a base class of the one being defined. If the name is the name of an overloaded member function of the base class, all base class member functions with that name are introduced. If the derived class already has a member with the same name, parameter list, and qualifications, the derived class member hides or overrides (doesn't conflict with) the member that is introduced from the base class.
{{example|
code=
#include &lt;iostream&gt;
struct B {
    virtual void f(int) { std::cout &lt;&lt; &quot;B::f\n&quot;; }
    void g(char)        { std::cout &lt;&lt; &quot;B::g\n&quot;; }
    void h(int)         { std::cout &lt;&lt; &quot;B::h\n&quot;; }
 protected:
    int m; // B::m is protected
    typedef int value_type;
};

struct D : B {
    using B::m; // D::m is public
    using B::value_type; // D::value_type is public

    using B::f;
    void f(int) { std::cout &lt;&lt; &quot;D::f\n&quot;; } // D::f(int) overrides B::f(int)
    using B::g;
    void g(int) { std::cout &lt;&lt; &quot;D::g\n&quot;; } // both g(int) and g(char) are visible
                                           // as members of D
    using B::h;
    void h(int) { std::cout &lt;&lt; &quot;D::h\n&quot;; } // D::h(int) hides B::h(int)
};

int main()
{
    D d;
    B&amp; b = d;

//    b.m = 2; // error, B::m is protected
    d.m = 1; // protected B::m is accessible as public D::m
    b.f(1); // calls derived f()
    d.f(1); // calls derived f()
    d.g(1); // calls derived g(int)
    d.g('a'); // calls base g(char)
    b.h(1); // calls base h()
    d.h(1); // calls derived h()
}
|output=
D::f
D::f
D::g
B::g
B::h
D::h
}}

===Inheriting constructors===
{{rev begin}}
{{rev|since=c++11|until=c++17|
If the ''using-declaration'' refers to a constructor of a direct base of the class being defined (e.g. {{c|using Base::Base;}}), constructors of that base class are inherited, according to the following rules:
@1@ A set of ''candidate inheriting constructors'' is composed of 
:@a@ All non-template constructors of the base class {{rev inl|since=c++14|(after omitting ellipsis parameters, if any)}}
:@b@ For each constructor with default arguments or the ellipsis parameter, all constructor signatures that are formed by dropping the ellipsis and omitting default arguments from the ends of argument lists one by one
:@c@ All constructor templates of the base class {{rev inl|since=c++14|(after omitting ellipsis parameters, if any)}}
:@d@ For each constructor template with default arguments or the ellipsis, all constructor signatures that are formed by dropping the ellipsis and omitting default arguments from the ends of argument lists one by one
@2@ All candidate inherited constructors that aren't the default constructor or the copy/move constructor and whose signatures do not match user-defined constructors in the derived class, are implicitly declared in the derived class. The default parameters are not inherited:
{{source|1=
struct B1 {
    B1(int);
};
struct D1 : B1 {
    using B1::B1;
// The set of candidate inherited constructors is 
// 1. B1(const B1&amp;)
// 2. B1(B1&amp;&amp;)
// 3. B1(int)

// D1 has the following constructors:
// 1. D1() = delete
// 2. D1(const D1&amp;) 
// 3. D1(D1&amp;&amp;)
// 4. D1(int) &lt;- inherited
};

struct B2 {
    B2(int = 13, int = 42);
};
struct D2 : B2 {
    using B2::B2;
// The set of candidate inherited constructors is
// 1. B2(const B2&amp;)
// 2. B2(B2&amp;&amp;)
// 3. B2(int = 13, int = 42)
// 4. B2(int = 13)
// 5. B2()

// D2 has the following constructors:
// 1. D2()
// 2. D2(const D2&amp;)
// 3. D2(D2&amp;&amp;)
// 4. D2(int, int) &lt;- inherited
// 5. D2(int) &lt;- inherited
};
}}

The inherited constructors are equivalent to user-defined constructors with an empty body and with a {{rlp|initializer_list|member initializer list}} consisting of a single {{spar|nested-name-specifier}}, which forwards all of its arguments to the base class constructor.

It has the same {{rlp|access}} as the corresponding base constructor. It is {{tt|constexpr}} if the user-defined constructor would have satisfied {{tt|constexpr}} constructor requirements. It is deleted if the corresponding base constructor is deleted or if a defaulted default constructor would be deleted (except that the construction of the base whose constructor is being inherited doesn't count). An inheriting constructor cannot be explicitly instantiated or explicitly specialized.

If two using-declarations inherit the constructor with the same signature (from two direct base classes), the program is ill-formed.
}}
{{rev|since=c++17|
If the ''using-declaration'' refers to a constructor of a direct base of the class being defined (e.g. {{c|using Base::Base;}}), all constructors of that base (ignoring member access) are made visible to overload resolution when initializing the derived class. 

If overload resolution selects an inherited constructor, it is accessible if it would be accessible when used to construct an object of the corresponding base class: the accessibility of the using-declaration that introduced it is ignored.

If overload resolution selects one of the inherited constructors when initializing an object of such derived class, then the {{tt|Base}} subobject from which the constructor was inherited is initialized using the inherited constructor, and all other bases and members of {{tt|Derived}} are initialized as if by the defaulted default constructor (default member initializers are used if provided, otherwise default initialization takes place). The entire initialization is treated as a single function call: initialization of the parameters of the inherited constructor is sequenced-before initialization of any base or member of the derived object.

{{source|1=
struct B1 {  B1(int, ...) { } };
struct B2 {  B2(double)   { } };

int get();

struct D1 : B1 {
  using B1::B1;  // inherits B1(int, ...)
  int x;
  int y = get();
};

void test() {
  D1 d(2, 3, 4); // OK: B1 is initialized by calling B1(2, 3, 4),
                 // then d.x is default-initialized (no initialization is performed),
                 // then d.y is initialized by calling get()
  D1 e;          // Error: D1 has no default constructor
}

struct D2 : B2 {
  using B2::B2; // inherits B2(double)
  B1 b;
};

D2 f(1.0);       // error: B1 has no default constructor
}}

{{source|1=
struct W { W(int); };
struct X : virtual W {
 using W::W;   // inherits W(int)
 X() = delete;
};
struct Y : X {
 using X::X;
};
struct Z : Y, virtual W {
  using Y::Y;
};
Z z(0); // OK: initialization of Y does not invoke default constructor of X
}}

If the constructor was inherited from multiple base class subobjects of type B, the program is ill-formed, similar to multiply-inherited non-static member functions:
{{source|1=
struct A { A(int); };
struct B : A { using A::A; };
struct C1 : B { using B::B; };
struct C2 : B { using B::B; };

struct D1 : C1, C2 {
  using C1::C1;
  using C2::C2;
};
D1 d1(0); // ill-formed: constructor inherited from different B base subobjects

struct V1 : virtual B { using B::B; };
struct V2 : virtual B { using B::B; };

struct D2 : V1, V2 {
  using V1::V1;
  using V2::V2;
};
D2 d2(0); // OK: there is only one B subobject.
          // This initializes the virtual B base class,
          //  which initializes the A base class
          // then initializes the V1 and V2 base classes
          //  as if by a defaulted default constructor
}}

As with using-declarations for any other non-static member functions, if an inherited constructor matches the signature of one of the constructors of {{tt|Derived}}, it is hidden from lookup by the version found in {{tt|Derived}}. If one of the inherited constructors of {{tt|Base}} happens to have the signature that matches a copy/move constructor of the {{tt|Derived}}, it does not prevent implicit generation of {{tt|Derived}} copy/move constructor (which then hides the inherited version, similar to {{tt|1=using operator=}}).

{{source|1=
struct B1 {   B1(int); };
struct B2 {   B2(int); };

struct D2 : B1, B2 {
  using B1::B1;
  using B2::B2;
  D2(int);   // OK: D2::D2(int) hides both B1::B1(int) and B2::B2(int)
};
D2 d2(0);    // calls D2::D2(int)
}}

}}
{{rev end}}

===Notes===
Only the name explicitly mentioned in the using-declaration is transferred into the declarative scope: in particular, enumerators are not transferred when the enumeration type name is using-declared.

A using-declaration cannot refer to a namespace, to a scoped enumerator, to a destructor of a base class or to a specialization of a member template for a user-defined conversion function.

Using-declaration can refer to a member template, but cannot refer to a member template specialization (template-id is not permitted)
{{source|1=
struct B { template&lt;class T&gt; void f(); };
struct D : B {
      using B::f;      // OK: names a template
//    using B::f&lt;int&gt;; // Error: names a template specialization
      void g() { f&lt;int&gt;(); }
};
}}
Using-declaration also can't refer to a dependent member template (the template disambiguator for {{rlp|dependent name}}s is not permitted)
{{source|1=
template&lt;class X&gt; struct B { template&lt;class T&gt; void f(); };
template&lt;class Y&gt; struct D : B&lt;Y&gt; {
//  using B&lt;Y&gt;::template f; // Error: disambiguator not allowed
  using B&lt;Y&gt;::f;            // compiles, but declares f as non-type non-template
  void g() { f&lt;int&gt;(); }    // Error here
};
}}

If a using-declaration brings the base class assignment operator into derived class, whose signature happens to match the derived class's copy-assignment or move-assignment operator, that operator is hidden by the implicitly-declared copy/move assignment operator of the derived class. {{rev inl|since=c++17|Same applies to a using-declaration that inherits a base class constructor that happens to match the derived class copy/move constructor}}

{{rev begin}}
{{rev|since=c++17|
{{rlp|parameter pack|Pack expansions}} in using-declarations make it possible to form a class that exposes overloaded members of variadic bases without recursion:
{{source|1=

template &lt;typename... Ts&gt;
struct Overloader : Ts... {
    using Ts::operator()...; // exposes operator() from every base
};

template &lt;typename... T&gt;
Overloader(T...) -&gt; Overloader&lt;T...&gt;; // C++17 deduction guide

int main() {
    auto o = Overloader{ [] (auto const&amp; a) {std::cout &lt;&lt; a;},
                         [] (float f) {std::cout &lt;&lt; std::setprecision(3) &lt;&lt; f;} };
}
}}
}}
{{rev end}}</text>
      <sha1>cpxhcsdolwzq0wylpocd0zccfsmvoxt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/value category</title>
    <ns>0</ns>
    <id>4706</id>
    <revision>
      <id>91188</id>
      <parentid>91084</parentid>
      <timestamp>2017-03-25T05:51:50Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* prvalue */ add note after &quot;A non-class non-array prvalue cannot be cv-qualified.&quot;</comment>
      <text xml:space="preserve" bytes="17585">{{title|Value categories}}
{{cpp/language/expressions/navbar}}

Each C++ {{rlp|expressions|expression}} (an operator with its operands, a literal, a variable name, etc.) is characterized by two independent properties: a ''type'' and a ''value category''. Each expression has some non-reference type, and each expression belongs to exactly one of the three primary value categories: ''prvalue'', ''xvalue'', ''lvalue'', defined as follows:

* a glvalue is an expression whose evaluation determines the identity of an object, bit-field, or function
* a prvalue is an expression whose evaluation either
:* computes the value of the operand of an operator (such prvalue has no ''result object''), or
:* initializes an object or a bit-field (such prvalue is said to have a ''result object''). All class and array prvalues have a result object even if it is discarded. If the result object is a temporary, [[cpp/language/implicit_conversion#Temporary_materialization|temporary materialization]] occurs.
* an xvalue is a glvalue that denotes an object or bit-field whose resources can be reused 
* an lvalue is a glvalue that is not an xvalue.
* an rvalue is a prvalue or an xvalue.

Note: this taxonomy went through significant changes with past C++ standard revisions, see [[#History|History]] below for details.

==Primary categories==
===lvalue===
The following expressions are ''lvalue expressions'':
* the name of a variable or a function in scope, regardless of type, such as {{c|std::cin}} or {{c|std::endl}}. Even if the variable's type is rvalue reference, the expression consisting of its name is an lvalue expression;
* a function call or an overloaded operator expression of lvalue reference return type, such as {{c|std::getline(std::cin, str)}}, {{c|std::cout &lt;&lt; 1}}, {{c|str1 {{=}} str2}}, or {{c|++it}};
* {{c|1=a = b}}, {{c|1=a += b}}, {{c|1=a %= b}}, and all other built-in {{rlp|operator_assignment|assignment and compound assignment}} expressions;
* {{c|++a}} and {{c|--a}}, the built-in {{rlp|operator_incdec#Built-in prefix_operators|pre-increment and pre-decrement}} expressions;
* {{c|*p}}, the built-in {{rlp|operator_member_access#Built-in_indirection_operator|indirection}} expression;
* {{c|a[n]}} and {{c|p[n]}}, the built-in {{rlp|operator_member_access#Built-in_subscript_operator|subscript}} expressions{{rev inl|since=c++11|, except where {{tt|a}} is an array rvalue}};
* {{c|a.m}}, the {{rlp|operator_member_access#Built-in member_access_operators|member of object}} expression, except where {{tt|m}} is a member enumerator or a non-static member function, or where {{tt|a}} is an rvalue and {{tt|m}} is a non-static data member of non-reference type;
* {{c|p-&gt;m}}, the built-in {{rlp|operator_member_access#Built-in member_access_operators|member of pointer}} expression, except where {{tt|m}} is a member enumerator or a non-static member function;
* {{c|a.*mp}}, the {{rlp|operator_member_access#Built-in_pointer-to-member_access_operators|pointer to member of object}} expression, where {{tt|a}} is an lvalue and {{tt|mp}} is a pointer to data member;
* {{c|p-&gt;*mp}}, the built-in {{rlp|operator_member_access#Built-in_pointer-to-member_access_operators|pointer to member of pointer}} expression, where {{tt|mp}} is a pointer to data member;
* {{c|a, b}}, the built-in {{rlp|operator_other#Built-in_comma_operator|comma}} expression, where {{tt|b}} is an lvalue;
* {{c|a ? b : c}}, the {{rlp|operator_other#Conditional_operator|ternary conditional}} expression for some {{tt|a}}, {{tt|b}}, and {{tt|c}};
* a {{rlp|string literal}}, such as {{c|&quot;Hello, world!&quot;}};
* a cast expression to lvalue reference type, such as {{c|static_cast&lt;int&amp;&gt;(x)}};
{{rrev|since=c++11|
* a function call or an overloaded operator expression of rvalue reference to function return type;
* a cast expression to rvalue reference to function type, such as {{c|static_cast&lt;void (&amp;&amp;)(int)&gt;(x)}}.
}}

Properties:
* Same as glvalue (below).
* Address of an lvalue may be taken: {{c|&amp;++i}}&lt;ref&gt;Assuming {{c|i}} has built-in type or the pre-increment operator is {{rlp|operators|overloaded}} to return by lvalue reference&lt;/ref&gt; and {{c|&amp;std::endl}} are valid expressions.
* A modifiable lvalue may be used as the left-hand operand of the built-in assignment and compound assignment operators.
* An lvalue may be used to {{rlp|reference initialization|initialize an lvalue reference}}; this associates a new name with the object identified by the expression.

===prvalue===
The following expressions are ''prvalue expressions'':
* a {{rlp|expressions#Literals|literal}} (except for {{rlp|string literal}}), such as {{c|42}}, {{c|true}} or {{c|nullptr}};
* a function call or an overloaded operator expression of non-reference return type, such as {{c|str.substr(1, 2)}}, {{c|str1 + str2}}, or {{c|it++}};
* {{c|a++}} and {{c|a--}}, the built-in  {{rlp|operator_incdec#Built-in_postfix_operators|post-increment and post-decrement}} expressions;
* {{c|a + b}}, {{c|a % b}}, {{c|a &amp; b}}, {{c|a &lt;&lt; b}}, and all other built-in {{rlp|operator_arithmetic|arithmetic}} expressions;
* {{c|a &amp;&amp; b}}, {{c|a {{!!}} b}}, {{c|!a}}, the built-in {{rlp|operator_logical|logical}} expressions;
* {{c|a &lt; b}}, {{c|1=a == b}}, {{c|1=a &gt;= b}}, and all other built-in {{rlp|operator_comparison|comparison}} expressions;
* {{c|&amp;a}}, the built-in {{rlp|operator_member_access#Built-in_address-of_operator|address-of}} expression;
* {{c|a.m}}, the {{rlp|operator_member_access#Built-in member_access_operators|member of object}} expression, where {{tt|m}} is a member enumerator or a non-static member function&lt;ref name=pmfc&gt;special rvalue category, see pending member function call&lt;/ref&gt;{{rev inl|until=c++11|, or where {{tt|a}} is an rvalue and {{tt|m}} is a non-static data member of non-reference type}};
* {{c|p-&gt;m}}, the built-in {{rlp|operator_member_access#Built-in member_access_operators|member of pointer}} expression, where {{tt|m}} is a member enumerator or a non-static member function&lt;ref name=pmfc/&gt;;
* {{c|a.*mp}}, the {{rlp|operator_member_access#Built-in_pointer-to-member_access_operators|pointer to member of object}} expression, where {{tt|mp}} is a pointer to member function&lt;ref name=pmfc/&gt;{{rev inl|until=c++11|, or where {{tt|a}} is an rvalue and {{tt|mp}} is a pointer to data member}};
* {{c|p-&gt;*mp}}, the built-in {{rlp|operator_member_access#Built-in_pointer-to-member_access_operators|pointer to member of pointer}} expression, where {{tt|mp}} is a pointer to member function&lt;ref name=pmfc/&gt;;
* {{c|a, b}}, the built-in {{rlp|operator_other#Built-in_comma_operator|comma}} expression, where {{tt|b}} is an rvalue;
* {{c|a ? b : c}}, the {{rlp|operator_other#Conditional_operator|ternary conditional}} expression for some {{tt|a}}, {{tt|b}}, and {{tt|c}};
* a cast expression to non-reference type, such as {{c|static_cast&lt;double&gt;(x)}}, {{c|std::string{} }}, or {{c|(int)42}};
* the {{ltt|cpp/language/this|this}} pointer;
{{rrev|since=c++11|
* a {{rlp|lambda|lambda expression}}, such as {{c|[](int x){ return x * x; } }}.
}}

Properties:
* Same as rvalue (below).
* A prvalue cannot be {{rlp|object#Polymorphic_objects|polymorphic}}: the {{rlp|type#Dynamic_type|dynamic type}} of the object it identifies is always the type of the expression.
* A non-class non-array prvalue cannot be {{rlp|cv|cv-qualified}}. (Note: a function call or cast expression may result in a prvalue of non-class cv-qualified type, but the cv-qualifier is immediately stripped out.)
* A prvalue cannot have {{rlp|type#Incomplete_type|incomplete type}} (except for type void, see below, or when used in {{rlp|decltype|decltype specifier}}).

===xvalue===
The following expressions are ''xvalue expressions'':
* a function call or an overloaded operator expression of rvalue reference to object return type, such as {{c|std::move(x)}};
* {{c|a[n]}}, the built-in {{rlp|operator_member_access#Built-in_subscript_operator|subscript}} expression, where one operand is an array rvalue &lt;!-- as of C++17 (p0135r1) a temporary will be materialized for array prvalue and converted to xvalue--&gt;;
* {{c|a.m}}, the {{rlp|operator_member_access#Built-in member_access_operators|member of object}} expression, where {{tt|a}} is an rvalue &lt;!-- as of C++17 (p0135r1) if the left operand is a prvalue, a temporary will be materialized and it will be converted to an xvalue per [expr]/9+. --&gt; and {{tt|m}} is a non-static data member of non-reference type;
* {{c|a.*mp}}, the {{rlp|operator_member_access#Built-in_pointer-to-member_access_operators|pointer to member of object}} expression, where {{tt|a}} is an rvalue and {{tt|mp}} is a pointer to data member&lt;!-- as of C++17 (p0135r1) if the left operand is a prvalue, a temporary will be materialized and it will be converted to an xvalue per [expr]/9+. --&gt;;
* {{c|a ? b : c}}, the {{rlp|operator_other#Conditional_operator|ternary conditional}} expression for some {{tt|a}}, {{tt|b}}, and {{tt|c}};
* a cast expression to rvalue reference to object type, such as {{c|static_cast&lt;char&amp;&amp;&gt;(x)}}.
{{rrev|since=c++17|
* any expession that designates a temporary object, after {{rlp|implicit_conversion#Temporary_materialization|temporary materialization}}
}}

Properties:
* Same as rvalue (below).
* Same as glvalue (below).

In particular, like all rvalues, xvalues bind to rvalue references, and like all glvalues, xvalues may be {{rlp|object#Polymorphic_objects|polymorphic}}, and non-class xvalues may be {{rlp|cv|cv-qualified}}.

==Mixed categories==
===glvalue===
A ''glvalue expression'' is either lvalue or xvalue. 

Properties:
* A glvalue may be implicitly converted to a prvalue with lvalue-to-rvalue, array-to-pointer, or function-to-pointer [[cpp/language/implicit_cast|implicit conversion]].
* A glvalue may be {{rlp|object#Polymorphic_objects|polymorphic}}: the {{rlp|type#Dynamic_type|dynamic type}} of the object it identifies is not necessarily the static type of the expression.
* A glvalue can have {{rlp|type#Incomplete_type|incomplete type}}, where permitted by the expression.

===rvalue===
An ''rvalue expression'' is either prvalue or xvalue.

Properties:
* Address of an rvalue may not be taken: {{c|&amp;int()}}, {{c|&amp;i++}}&lt;ref&gt;Assuming {{c|i}} has built-in type or the postincrement operator is not {{rlp|operators|overloaded}} to return by lvalue reference&lt;/ref&gt;, {{c|&amp;42}}, and {{c|&amp;std::move(x)}} are invalid.
* An rvalue can't be used as the left-hand operand of the built-in assignment or compound assignment operators.
* An rvalue may be used to [[cpp/language/reference_initialization|initialize a const lvalue reference]], in which case the lifetime of the object identified by the rvalue is {{rlp|reference_initialization#Lifetime_of_a_temporary|extended}} until the scope of the reference ends.
{{rrev|since=c++11|
* An rvalue may be used to [[cpp/language/reference_initialization|initialize an rvalue reference]], in which case the lifetime of the object identified by the rvalue is {{rlp|reference_initialization#Lifetime_of_a_temporary|extended}} until the scope of the reference ends.
* When used as a function argument and when {{rlp|overload resolution|two overloads}} of the function are available, one taking rvalue reference parameter and the other taking lvalue reference to const parameter, an rvalue binds to the rvalue reference overload (thus, if both copy and move constructors are available, an rvalue argument invokes the [[cpp/language/move constructor|move constructor]], and likewise with copy and move assignment operators).
}}

==Special categories==
===Pending member function call===
The expressions {{c|a.mf}} and {{c|p-&gt;mf}}, where {{tt|mf}} is a {{rlp|member functions|non-static member function}}, and the expressions {{c|a.*mfp}} and {{c|p-&gt;*mfp}}, where {{tt|mfp}} is a {{rlp|pointer#Pointers_to_member_functions|pointer to member function}}, are classified as prvalue expressions, but they cannot be used to initialize references, as function arguments, or for any purpose at all, except as the left-hand argument of the function call operator, e.g. {{c|(p-&gt;*mfp)(args)}}.

===Void expressions===
Function call expressions returning {{c|void}}, cast expressions to {{c|void}}, and {{rlp|throw|throw-expressions}} are classified as prvalue expressions, but they cannot be used to initialize references or as function arguments. They can be used in discarded-value contexts (e.g. on a line of its own, as the left-hand operand of the comma operator, etc.) and in the {{c|return}} statement in a function returning {{c|void}}. In addition, throw-expressions may be used as the second and the third operands of the [[cpp/language/operator_other|conditional operator ?:]].
{{rrev|since=c++17|
Void expressions have no ''result object''
}}

===Bit fields===
An expression that designates a {{rlp|bit field}} (e.g. {{c|a.m}}, where {{tt|a}} is an lvalue of type {{c|struct A { int m: 3; } }}) is an lvalue expression: it may be used as the left-hand operand of the assignment operator, but its address cannot be taken and a non-const lvalue reference cannot be bound to it. A const lvalue reference can be initialized from a bit-field lvalue, but a temporary copy of the bit-field will be made: it won't bind to the bit field directly.

==History==
===CPL===
The programming language [[enwiki:CPL_(programming_language)|CPL]] was first to introduce value categories for expressions: all CPL expressions can be evaluated in &quot;right-hand mode&quot;, but only certain kinds of expression are meaningful in &quot;left-hand mode&quot;. When evaluated in right-hand mode, an expression is regarded as being a rule for the computation of a value (the right-hand value, or ''rvalue''). When evaluated in left-hand mode an expression effectively gives an address (the left-hand value, or ''lvalue''). &quot;Left&quot; and &quot;Right&quot; here stood for &quot;left of assignment&quot; and &quot;right of assignment&quot;.
===C===
The C programming language followed a similar taxonomy, except that the role of assignment was no longer significant: C expressions are categorized between &quot;lvalue expressions&quot; and others (functions and non-object values), where &quot;lvalue&quot; means an expression that identifies an object, a &quot;locator value&quot;&lt;ref&gt;&quot;A difference of opinion within the C community centered around the meaning of lvalue, one group considering an lvalue to be any kind of object locator, another group holding that an lvalue is meaningful on the left side of an assigning operator. The C89 Committee adopted the definition of lvalue as an object locator&quot; -- ANSI C Rationale, 6.3.2.1/10&lt;/ref&gt;
===C++98===
Pre-2011 C++ followed the C model, but restored the name &quot;rvalue&quot; to non-lvalue expressions, made functions into lvalues, and added the rule that references can bind to lvalues, but only references to const can bind to rvalues. Several non-lvalue C expressions became lvalue expressions in C++.
===C++11===
With the introduction of move semantics in C++11, value categories were redefined to characterize two independent properties of expressions&lt;ref&gt;[http://www.stroustrup.com/terminology.pdf &quot;New&quot; Value Terminology] by Bjarne Stroustrup, 2010&lt;/ref&gt;:
* ''has identity'': it's possible to determine whether the expression refers to the same entity as another expression, such as by comparing addresses of the objects or the functions they identify (obtained directly or indirectly);
* ''can be moved from'': {{rlp|move constructor}}, {{rlp|move assignment|move assignment operator}}, or another function overload that implements move semantics can bind to the expression.

In C++11, expressions that:
* have identity and cannot be moved from are called ''lvalue'' expressions;
* have identity and can be moved from are called ''xvalue'' expressions;
* do not have identity and can be moved from are called ''prvalue'' (&quot;pure rvalue&quot;) expressions;
* do not have identity and cannot be moved from are not used&lt;ref&gt;const prvalues (only allowed for class types) and const xvalues do not bind to T&amp;&amp; overloads, but they bind to the const T&amp;&amp; overloads, which are also classified as &quot;move constructor&quot; and &quot;move assignment operator&quot; by the standard, satisfying the definition of &quot;can be moved from&quot; for the purpose of this classification. However, such overloads cannot modify their arguments and are not used in practice; in their absence const prvalues and const xvalues bind to const T&amp; overloads.&lt;/ref&gt;.

The expressions that have identity are called &quot;glvalue expressions&quot; (glvalue stands for &quot;generalized lvalue&quot;). Both lvalues and xvalues are glvalue expressions.

The expressions that can be moved from are called &quot;rvalue expressions&quot;. Both prvalues and xvalues are rvalue expressions.

===C++17===
In C++17, {{rlp|copy elision}} was made mandatory in some situations, and that required separation of prvalue expressions from the temporary objects initialized by them, resulting in the system we have today.

==Footnotes==
&lt;references/&gt;

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=616|std=C++11|before=member access and member access through pointer to member of an rvalue resulted in prvalue|after=reclassified as xvalue}}
{{dr list item|wg=cwg|dr=1213|std=C++11|before=subscripting an array rvalue resulted in  lvalue|after=reclassified as xvalue}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc see c|c/language/value_category|value categories}}
{{dsc end}}

[[de:cpp/language/value category]]
[[es:cpp/language/value category]]
[[fr:cpp/language/value category]]
[[it:cpp/language/value category]]
[[ja:cpp/language/value category]]
[[pt:cpp/language/value category]]
[[ru:cpp/language/value category]]
[[zh:cpp/language/value category]]</text>
      <sha1>5f9f9j5rjlocyhosr0jpzt28tl9qt9c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/value initialization</title>
    <ns>0</ns>
    <id>8864</id>
    <revision>
      <id>88657</id>
      <parentid>87559</parentid>
      <timestamp>2016-12-05T21:07:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on array rvalues</comment>
      <text xml:space="preserve" bytes="7505">{{title|value initialization}}
{{cpp/language/initialization/navbar}}
This is the initialization performed when a variable is constructed with an empty initializer.

===Syntax===
{{sdsc begin}}
{{sdsc|num=1| {{spar|T}}{{ttb|();}} }}
{{sdsc|num=2| {{ttb|new}} {{spar|T}} {{ttb|();}} }}
{{sdsc|num=3| {{spar|Class}}{{ttb|::}}{{spar|Class}}{{ttb|(}}{{spar|...}}{{ttb|)}} {{ttb|:}} {{spar|member}}{{ttb|()}} {{ttb|{}} {{spar|...}} {{ttb|1=} }} }}
{{sdsc|num=4| {{spar|T}} {{spar|object}} {{ttb|{};}} |notes={{mark since c++11}}}}
{{sdsc|num=5| {{spar|T}}{{ttb|{};}} |notes={{mark since c++11}}}}
{{sdsc|num=6| {{ttb|new}} {{spar|T}} {{ttb|{};}} |notes={{mark since c++11}}}}
{{sdsc|num=7| {{spar|Class}}{{ttb|::}}{{spar|Class}}{{ttb|(}}{{spar|...}}{{ttb|)}} {{ttb|:}} {{spar|member}}{{ttb|{} }} {{ttb|{}} {{spar|...}} {{ttb|1=} }} |notes={{mark since c++11}}}}
{{sdsc end}}

===Explanation===
Value initialization is performed in these situations:
@1,5@ when a nameless temporary object is created with the initializer consisting of an empty pair of parentheses {{rev inl|since=c++11|or braces}};
@2,6@ when an object with dynamic storage duration is created by a {{rlp|new|new-expression}} with the initializer consisting of an empty pair of parentheses {{rev inl|since=c++11|or braces}};
@3,7@ when a non-static data member or a base class is initialized using a {{rlp|initializer_list|member initializer}} with an empty pair of parentheses {{rev inl|since=c++11|or braces}};

{{rev begin}}
{{rev|since=c++11|
@4@ when a named variable (automatic, static, or thread-local) is declared with the initializer consisting of a pair of braces.
}}
{{rev end}}

In all cases, if the empty pair of braces {{tt|{} }} is used and {{tt|T}} is an ''aggregate type'', {{rlp|aggregate_initialization|aggregate-initialization}} is performed instead of value-initialization.

If {{tt|T}} is a class type that has no default constructor but has a constructor taking {{c|std::initializer_list}}, {{rlp|list_initialization|list-initialization}} is performed. 


The effects of value initialization are:
{{rev begin}}
{{rev|until=c++11|
@1@ if {{tt|T}} is a class type with at least one user-provided constructor of any kind, the {{rlp|default constructor}} is called;
}}
{{rev|since=c++11|
@1@ if {{tt|T}} is a class type with no default constructor or with a user-provided or deleted default constructor, the object is {{rlp|default_initialization|default-initialized}};
}}
{{rev end}}
{{rev begin}}
{{rev|until=c++11|
@2@ if {{tt|T}} is a non-union class type without any user-provided constructors, every non-static data member and base-class component of T is value-initialized;
}}
{{rev|since=c++11|
@2@ if {{tt|T}} is a class type with a default constructor that is neither user-provided nor deleted (that is, it may be a class with an implicitly-defined or defaulted default constructor), the object is {{rlp|zero_initialization|zero-initialized}} and then it is {{rlp|default_initialization|default-initialized}} if it has a non-trivial default constructor;
}}
{{rev end}}
@3@ if {{tt|T}} is an array type, each element of the array is value-initialized;
@4@ otherwise, the object is zero-initialized.

===Notes===
A constructor is ''user-provided'' if it is user-declared and not explicitly defaulted on its first declaration.

The syntax {{c|T object();}} does not initialize an object; it declares a function that takes no arguments and returns {{tt|T}}. The way to value-initialize a named variable before C++11 was {{c|1=T object = T();}}, which value-initializes a temporary and then copy-initializes the object: most compilers {{rlp|copy elision|optimize out the copy}} in this case.

In C++98 prior to C++03 (which introduced value initialization), the expression {{c|new T()}} was classified as default initialization and specified zero-initialization.

References cannot be value-initialized.

As described in {{rlp|explicit cast|functional cast}}, the syntax {{c|T()}} {{v|1}} is prohibited for arrays, while {{c|T{} }} {{v|5}} is allowed.

All standard containers ({{lc|std::vector}}, {{lc|std::list}}, etc.) value-initialize their elements when constructed with a single {{tt|size_type}} argument or when grown by a call to {{c|resize()}}.

Since C++11, value-initializing a class without a user-provided constructor, which has a member of a class type with a user-provided constructor zeroes out the member before calling its constructor:

{{source|1=
struct A
{
    int i;
    A() { } // user-provided default ctor, does not initialize i
};

struct B { A a; }; // implicitly-defined default ctor

std::cout &lt;&lt; B().a.i &lt;&lt; '\n'; // value-initializes a B temporary
                              // leaves b.a.i uninitialized in C++03
                              // sets b.a.i to zero in C++11
// (note that B{}.a.i leaves b.a.i uninitialized in C++11, but for 
// a different reason: in post-DR1301 C++11, B{} is aggregate-initialization,
// which then value-initializes A, which has a user-provided ctor)
}}

===Example===
{{example
 |
 |code=
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

struct T1
{
    int mem1;
    std::string mem2;
}; // implicit default constructor

struct T2
{
    int mem1;
    std::string mem2;
    T2(const T2&amp;) { } // user-provided copy constructor
};                    // no default constructor

struct T3
{
    int mem1;
    std::string mem2;
    T3() { } // user-provided default constructor
};

std::string s{}; // class =&gt; default-initialization, the value is &quot;&quot;

int main()
{
    int n{};                // scalar =&gt; zero-initialization, the value is 0
    double f = double();    // scalar =&gt; zero-initialization, the value is 0.0
    int* a = new int[10](); // array =&gt; value-initialization of each element
                            //          the value of each element is 0
    T1 t1{};                // class with implicit default constructor =&gt;
                            //     t1.mem1 is zero-initialized, the value is 0
                            //     t1.mem2 is default-initialized, the value is &quot;&quot;
//  T2 t2{};                // error: class with no default constructor
    T3 t3{};                // class with user-provided default constructor =&gt;
                            //     t3.mem1 is default-initialized to indeterminate value
                            //     t3.mem2 is default-initialized, the value is &quot;&quot;
    std::vector&lt;int&gt; v(3);  // value-initialization of each element
                            // the value of each element is 0
    std::cout &lt;&lt; s.size() &lt;&lt; ' ' &lt;&lt; n &lt;&lt; ' ' &lt;&lt; f &lt;&lt; ' ' &lt;&lt; a[9] &lt;&lt; ' ' &lt;&lt; v[2] &lt;&lt; '\n';
    std::cout &lt;&lt; t1.mem1 &lt;&lt; ' ' &lt;&lt; t3.mem1 &lt;&lt; '\n';
    delete[] a;
}
|p=true
|output=
0 0 0 0 0
0 4199376
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1301|std=C++11|before=defaulted default constructor skipped zero-init before construction|after=zero-init performed}}
{{dr list end}}

===See also===
* [[cpp/language/default_initialization|default initialization]]
* [[cpp/language/direct_initialization|direct initialization]]
* [[cpp/language/copy_initialization|copy initialization]]
* [[cpp/language/list_initialization|list initialization]]

[[de:cpp/language/value initialization]]
[[es:cpp/language/value initialization]]
[[fr:cpp/language/value initialization]]
[[it:cpp/language/value initialization]]
[[ja:cpp/language/value initialization]]
[[pt:cpp/language/value initialization]]
[[ru:cpp/language/value initialization]]
[[zh:cpp/language/value initialization]]</text>
      <sha1>sg45sgk9oo7aka7sbysmloo9hn1tjw7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/variable template</title>
    <ns>0</ns>
    <id>13729</id>
    <revision>
      <id>83876</id>
      <parentid>81071</parentid>
      <timestamp>2016-03-11T21:25:50Z</timestamp>
      <contributor>
        <username>Yanpas</username>
        <id>5042</id>
      </contributor>
      <text xml:space="preserve" bytes="3320">{{title|Variable template}}
{{cpp/language/templates/navbar}}

A variable template defines a family of variables or static data members.

===Syntax===
{{sdsc begin}}
{{sdsc|{{ttb|template}} {{ttb|&lt;}} {{spar|parameter-list}} {{ttb|&gt;}} {{spar|variable-declaration}} }}
{{sdsc end}}

===Explanation===
{{par begin}}
{{par | {{spar|variable-declaration}} | a {{rlp|declarations|declaration}} of a variable. The declared variable name becomes a template name. }}
{{par | {{spar|parameter-list}} | a non-empty comma-separated list of the {{rlp|template parameters}}, each of which is either [[cpp/language/template_parameters#Non-type_template_parameter|non-type parameter]], a [[cpp/language/template_parameters#Type_template_parameter|type parameter]], a [[cpp/language/template_parameters#Template_template_parameter|template parameter]], or a [[cpp/language/parameter_pack|parameter pack]] of any of those.}}
{{par end}}

A variable template may be introduced by a template declaration at namespace scope, where {{spar|declaration}} declares a variable.

{{source|1=
template&lt;class T&gt;
constexpr T pi = T(3.1415926535897932385);  // variable template

template&lt;class T&gt;
T circular_area(T r) // function template
{
    return pi&lt;T&gt; * r * r; // pi&lt;T&gt; is a variable template instantiation
}
}}

When used at class scope, variable template declares a static data member template.

{{source|1=
using namespace std::literals;
struct matrix_constants
{
    template&lt;class T&gt;
    using pauli = hermitian_matrix&lt;T, 2&gt;; // alias template

    template&lt;class T&gt; // static data member template
    static constexpr pauli&lt;T&gt; sigma1 = { { 0, 1 }, { 1, 0 } }; 

    template&lt;class T&gt;
    static constexpr pauli&lt;T&gt; sigma2 = { { 0, -1i }, { 1i, 0 } };

    template&lt;class T&gt;
    static constexpr pauli&lt;T&gt; sigma3 = { { 1, 0 }, { 0, -1 } };
};
}}

As with other {{rlp|static|static members}}, a definition of a static data member template may be required. Such definition is provided outside the class definition. A template declaration of a static data member at namespace scope may also be a definition of a non-template {{rlp|member template|data member of a class template}}:

{{source|1=
struct limits {
    template&lt;typename T&gt;
    static const T min; // declaration of a static data member template
};
template&lt;typename T&gt;
const T limits::min = { }; // definition of a static data member template

template&lt;class T&gt;
class X {
   static T s; // declaration of a non-template static data member of a class template
};
template&lt;class T&gt;
T X&lt;T&gt;::s = 0; // definition of a non-template data member of a class template
}}

Unless a variable template was {{rlp|template specialization|explicitly specialized}} or explicitly instantiated, it is implicitly instantiated when a specialization of the variable template is used.

Default template argument of a variable template is implicitly instantiated when the variable template is used in the context that requires the value of the argument.

===Notes===
Until variable templates were introduced in C++14, parametrized variables were typically implemented as either static data members of class templates or as constexpr function templates returning the desired values.

Variable templates cannot be used as {{rlp|template_parameters#Template_template_arguments|template template arguments}}.</text>
      <sha1>mopvrhh5rwi9k40leg4gxvcyhxanumx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/variadic arguments</title>
    <ns>0</ns>
    <id>13164</id>
    <revision>
      <id>83622</id>
      <parentid>81700</parentid>
      <timestamp>2016-03-03T14:48:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>historical note about comma before the ellipsis</comment>
      <text xml:space="preserve" bytes="4115">{{title|Variadic arguments}}
{{cpp/language/functions/navbar}}

Allows a function to accept any number of arguments.

Indicated by the parameter of the form {{c|...}} which must appear last in the {{spar|parameter-list}} of a {{rlp|function|function declaration}}.

Where syntactically correct, {{c|, ...}} may be replaced by {{c|...}}.

{{source|1=
// the function declared as follows
int printx(const char* fmt, ...);
// may be called with one or more arguments:
printx(&quot;hello world&quot;);
printx(&quot;a=%d b=%d&quot;, a, b);

int printx(const char* fmt...); // same as above (comma is optional)
int printy(..., const char* fmt); // error: ... must be the last
int printz(...); // valid, but the arguments cannot be accessed portably
}}

Note: this is different from a function {{rlp|parameter pack}} expansion, which is indicated by an ellipsis that is a part of a parameter declarator, rather than an ellipsis that appears as a parameter on its own. Both parameter pack expansion and the ellipsis parameter may appear in the declaration of a function template, as in the case of {{lc|std::is_function}}.

===Default conversions===

When a variadic function is called, after lvalue-to-rvalue, array-to-pointer, and function-to-pointer [[cpp/language/implicit_cast#Lvalue transformations|conversions]], each argument that is a part of the variable argument list undergoes additional conversions known as ''default argument promotions'': 

* {{lc|std::nullptr_t}} is converted to {{c|void*}}
* {{c|float}} arguments are converted to {{c|double}} as in [[cpp/language/implicit_cast#Floating point promotion|floating-point promotion]]
* {{c|bool}}, {{c|char}}, {{c|short}}, and unscoped enumerations are converted to {{c|int}} or wider integer types as in [[cpp/language/implicit_cast#Integer promotion|integer promotion]] 

Only arithmetic, enumeration, pointer, pointer to member, and class type arguments are allowed.

Because variadic parameters have the lowest rank for the purpose of {{rlp|overload resolution}}, they are commonly used as the catch-all fallbacks in {{rlp|sfinae|SFINAE}}.

Within the body of a function that uses variadic arguments, the values of these arguments may be accessed using the [[cpp/utility/variadic|&lt;cstdarg&gt; library facilities]]:
{{dsc begin}}
{{dsc header | cstdarg}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc inc | cpp/utility/variadic/dsc va_arg}}
{{dsc inc | cpp/utility/variadic/dsc va_copy}}
{{dsc inc | cpp/utility/variadic/dsc va_end}}
{{dsc inc | cpp/utility/variadic/dsc va_list}}
{{dsc end}}

The behavior of the {{lc|va_start}} macro is undefined if the last parameter before the ellipsis has reference type, or has type that is not compatible with the type that results from default argument promotions.

===Alternatives===

* [[cpp/language/parameter_pack|Variadic templates]] can also be used to create functions that take variable number of arguments.  They are often the better choice because they do not impose restrictions on the types of the arguments, do not perform integral and floating-point promotions, and are type safe. {{mark since c++11}}
* If all variable arguments share a common type, a {{lc|std::initializer_list}} provides a convenient mechanism (albeit with a different syntax) for accessing variable arguments. {{mark since c++11}}

===Notes===
In the C programming language, at least one named parameter must appear before the ellipsis parameter, so {{tt|printz(...);}} is not valid. In C++, this form is allowed even though the arguments passed to such function are not accessible, and is commonly used as the fallback overload in {{rlp|sfinae|SFINAE}}, exploiting the lowest priority of the ellipsis conversion in {{rlp|overload resolution}}.

This syntax for variadic arguments was introduced in 1987 C++ without the comma before the ellipsis. When C89 adopted function prototypes from C++, it replaced the syntax with one requiring the comma. For compatibility, C++98 accepts both C++-style {{c|f(int n...)}} and C-style {{c|f(int n, ...)}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/variadic | Variadic arguments}}
{{dsc end}}</text>
      <sha1>3cjm0ejqq88242gib5y0l58ft6kmyap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/virtual</title>
    <ns>0</ns>
    <id>4061</id>
    <revision>
      <id>90128</id>
      <parentid>88746</parentid>
      <timestamp>2017-02-06T19:19:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>rm stray ;</comment>
      <text xml:space="preserve" bytes="12728">{{title|virtual function specifier}}
{{cpp/language/classes/navbar}}

The {{c|virtual}} specifier specifies that a non-static {{rlp|member functions|member function}} is ''virtual'' and supports dynamic binding. It may only appear in the {{spar|decl-specifier-seq}} of the initial declaration of a non-static member function (i.e., when it is declared in the class definition).

===Explanation===
Virtual functions are member functions whose behavior can be overridden in derived classes. As opposed to non-virtual functions, the overridden behavior is preserved even if there is no compile-time information about the actual type of the class. If a derived class is handled using pointer or reference to the base class, a call to an overridden virtual function would invoke the behavior defined in the derived class. This behavior is suppressed if the function is selected using {{rlp|lookup|qualified name lookup}} (that is, if the function's name appears to the right of the scope resolution operator {{tt|::}})

{{example|code=
#include &lt;iostream&gt;
struct Base {
   virtual void f() {
       std::cout &lt;&lt; &quot;base\n&quot;;
   }
};
struct Derived : Base {
    void f() override { // 'override' is optional
        std::cout &lt;&lt; &quot;derived\n&quot;;
    }
};
int main()
{
    Base b;
    Derived d;

    // virtual function call through reference
    Base&amp; br = b; // the type of br is Base&amp;
    Base&amp; dr = d; // the type of dr is Base&amp; as  well
    br.f(); // prints &quot;base&quot;
    dr.f(); // prints &quot;derived&quot;

    // virtual function call through pointer
    Base* bp = &amp;b; // the type of bp is Base*
    Base* dp = &amp;d; // the type of dp is Base* as  well
    bp-&gt;f(); // prints &quot;base&quot;
    dp-&gt;f(); // prints &quot;derived&quot;

    // non-virtual function call
    br.Base::f(); // prints &quot;base&quot;
    dr.Base::f(); // prints &quot;base&quot;
}
}}

===In detail===
If some member function {{tt|vf}} is declared as {{tt|virtual}} in a class {{tt|Base}}, and some class {{tt|Derived}}, which is derived, directly or indirectly, from {{tt|Base}}, has a declaration for member function with the same 
* name
* parameter type list (but not the return type)
* cv-qualifiers
* ref-qualifiers
Then this function in the class {{tt|Derived}} is also ''virtual'' (whether or not the keyword {{tt|virtual}} is used in its declaration) and ''overrides'' Base::vf (whether or not the word {{tt|override}} is used in its declaration).

{{tt|Base::vf}} does not need to be visible (can be declared private, or inherited using private inheritance) to be overridden.

{{source|1=
class B {
    virtual void do_f(); // private member
 public:
    void f() { do_f(); } // public interface
};
struct D : public B {
    void do_f() override; // overrides B::do_f
};

int main()
{
    D d;
    B* bp = &amp;d;
    bp-&gt;f(); // internally calls D::do_f();
}
}}

For every virtual function, there is the ''final overrider'', which is executed when a virtual function call is made. A virtual member function {{tt|vf}} of a base class {{tt|Base}} is the final overrider unless the derived class declares or inherits (through multiple inheritance) another function that overrides {{tt|vf}}.

{{source|1=
struct A { virtual void f(); };     // A::f is virtual
struct B : A { void f(); };         // B::f overrides A::f in B
struct C : virtual B { void f(); }; // C::f overrides A::f in C
struct D : virtual B {}; // D does not introduce an overrider, B::f is final in D
struct E : C, D  {       // E does not introduce an overrider, C::f is final in E
    using A::f; // not a function declaration, just makes A::f visible to lookup
};
int main() {
   E e;
   e.f();    // virtual call calls C::f, the final overrider in e
   e.E::f(); // non-virtual call calls A::f, which is visible in E
}
}}

If a function has more than one final overrider, the program is ill-formed:
{{source|1=
struct A {
    virtual void f();
};
struct VB1 : virtual A {
    void f(); // overrides A::f
};
struct VB2 : virtual A {
    void f(); // overrides A::f
};
// struct Error : VB1, VB2 {
//     // Error: A::f has two final overriders in Error
// };
struct Okay : VB1, VB2 {
    void f(); // OK: this is the final overrider for A::f
};
struct VB1a : virtual A {}; // does not declare an overrider
struct Da : VB1a, VB2 {
    // in Da, the final overrider of A::f is VB2::f
};
}}

A function with the same name but different parameter list does not override the base function of the same name, but ''hides'' it: when {{rlp|lookup|unqualified name lookup}} examines the scope of the derived class, the lookup finds the declaration and does not examine the base class.

{{source|1=
struct B {
    virtual void f();
};
struct D : B {
    void f(int); // D::f hides B::f (wrong parameter list)
};
struct D2 : D {
    void f(); // D2::f overrides B::f (doesn't matter that it's not visible)
};

int main()
{
    B b;   B&amp; b_as_b   = b;
    D d;   B&amp; d_as_b   = d;    D&amp; d_as_d = d;
    D2 d2; B&amp; d2_as_b  = d2;   D&amp; d2_as_d = d2;

    b_as_b.f(); // calls B::f()
    d_as_b.f(); // calls B::f()
    d2_as_b.f(); // calls D2::f()

    d_as_d.f(); // Error: lookup in D finds only f(int)
    d2_as_d.f(); // Error: lookup in D finds only f(int)
}
}}

{{rev begin}}
{{rev|since=c++11|
If a function is declared with the specifier {{tt|override}}, but does not override a virtual function, the program is ill-formed:
{{source|1=
struct B {
    virtual void f(int);
};
struct D : B {
    virtual void f(int) override; // OK, D::f(int) overrides B::f(int)
    virtual void f(long) override; // Error: f(long) does not override B::f(int)
};
}}

If a function is declared with the specifier {{tt|final}}, and another function attempts to override it, the program is ill-formed
{{source|1=
struct B {
    virtual void f() const final;
};
struct D : B {
    void f() const; // Error: D::f attempts to override final B::f
};
}}
}}
{{rev end}}

Non-member functions and static member functions cannot be virtual.

Functions templates cannot be declared {{tt|virtual}}. This applies only to functions that are themselves templates - a regular member function of a class template can be declared virtual.

{{rev begin}}
{{rev|since=concepts_ts|
Virtual functions cannot have any associated constraints.
{{source|1=
struct A {
    virtual void f() requires true; // Error: constrained virtual function
};
}}
}}
{{rev end}}

{{rlp|default arguments|Default arguments}} for virtual functions are substituted at the compile time.

====Covariant return types====
If the function {{tt|Derived::f}} overrides a function {{tt|Base::f}}, their return types must either be the same or be ''covariant''. Two types are covariant if they satisfy all of the following requirements:

* both types are pointers or references (lvalue or rvalue) to classes. Multi-level pointers or references are not allowed.
* the referenced/pointed-to class in the return type of {{tt|Base::f()}} must be a unambiguous and accessible direct or indirect base class of the referenced/pointed-to class of the return type of {{tt|Derived::f()}}.
* the return type of {{tt|Derived::f()}} must be equally or less [[cpp/language/cv | cv-qualified]] than the return type of {{tt|Base::f()}}.

The class in the return type of {{tt|Derived::f}} must be either {{tt|Derived}} itself, or must be a {{rlp|incomplete type|complete type}} at the point of declaration of {{tt|Derived::f}}.

When a virtual function call is made, the type returned by the final overrider is {{rlp|implicit cast|implicitly converted}} to the return type of the overridden function that was called:

{{source|1=
class B {};

struct Base {
    virtual void vf1();
    virtual void vf2();
    virtual void vf3();
    virtual B* vf4();
    virtual B* vf5();
};

class D : private B {
    friend struct Derived; // in Derived, B is an accessible base of D
};

class A; // forward-declared class is an incomplete type

struct Derived : public Base {
    void vf1();    // virtual, overrides Base::vf1()
    void vf2(int); // non-virtual, hides Base::vf2()
//  char vf3();    // Error: overrides Base::vf3, but has different
                   // and non-covariant return type
    D* vf4();      // overrides Base::vf4() and has covariant return type
//  A* vf5();      // Error: A is incomplete type
};

int main()
{
    Derived d;
    Base&amp; br = d;
    Derived&amp; dr = d;

    br.vf1(); // calls Derived::vf1()
    br.vf2(); // calls Base::vf2()
//  dr.vf2(); // Error: vf2(int) hides vf2()

    B* p = br.vf4(); // calls Derived::vf4() and converts the result to B*
    D* q = dr.vf4(); // calls Derived::vf4() and does not convert
                     //  the result to B*

}
}}

====Virtual destructor====
Even though destructors are not inherited, if a base class declares its destructor {{tt|virtual}}, the derived destructor always overrides it. This makes it possible to delete dynamically allocated objects of polymorphic type through pointers to base

{{source|1=
class Base {
 public:
    virtual ~Base() { /* releases Base's resources */ }
};

class Derived : public Base {
    ~Derived() { /* releases Derived's resources */ }
};

int main()
{
    Base* b = new Derived;
    delete b; // Makes a virtual function call to Base::~Base()
              // since it is virtual, it calls Derived::~Derived() which can
              // release resources of the derived class, and then calls
              // Base::~Base() following the usual order of destruction
}
}}

Moreover, if a class is ''polymorphic'' (declares or inherits at least one virtual function), and its destructor is not virtual, deleting it is ''undefined behavior'' regardless of whether there are resources that would be leaked if the derived destructor is not invoked.

A useful guideline is that the destructor of any base class must be [https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#discussion-make-base-class-destructors-public-and-virtual-or-protected-and-nonvirtual public and virtual or protected and non-virtual].

===During construction and destruction===
When a virtual function is called directly or indirectly from a constructor or from a destructor (including during the construction or destruction of the class’s non-static data members, e.g. in a member {{rlp|initializer list}}), and the object to which the call applies is the object under construction or destruction, the function called is the final overrider
in the constructor’s or destructor’s class and not one overriding it in a more-derived class. 
In other words, during construction or destruction, the more-derived classes do not exist.

When constructing a complex class with multiple branches, within a constructor that belongs to one branch, polymorphism is restricted to that class and its bases: if it obtains a pointer or reference to a base subobject outside this subhierarchy, and attempts to invoke a virtual function call (e.g. using explicit member access), the behavior is undefined:

{{source|1=
struct V {
    virtual void f();
    virtual void g();
};

struct A : virtual V {
    virtual void f(); // A::f is the final overrider of V::f in A
};
struct B : virtual V {
    virtual void g(); // B::g is the final overrider of V::g in B
    B(V*, A*);
};
struct D : A, B {
    virtual void f(); // D::f is the final overrider of V::f in D
    virtual void g(); // D::g is the final overrider of V::g in D

    // note: A is initialized before B
    D() : B((A*)this, this) 
    {
    }
};

// the constructor of B, called from the constructor of D 
B::B(V* v, A* a)
{
    f(); // virtual call to V::f (although D has the final overrider, D doesn't exist)
    g(); // virtual call to B::g, which is the final overrider in B 

    v-&gt;g(); // v's type V is base of B, virtual call calls B::g as before

    a-&gt;f(); // a’s type A is not a base of B. it belongs to a different branch of the
            // hierarchy. Attempting a virtual call through that branch causes
            // undefined behavior even though A was already fully constructed in this
            // case (it was constructed before B since it appears before B in the list
            // of the bases of D). In practice, the virtual call to A::f will be
            // attempted using B's virtual member function table, since that's what
            // is active during B's construction)
}
}}

===See also===
* [[cpp/language/derived_class | derived classes and modes of inheritance ]]
* [[cpp/language/override | override specifier]] {{mark since c++11}}
* [[cpp/language/final | final specifier]] {{mark since c++11}}

[[de:cpp/language/virtual]]
[[es:cpp/language/virtual]]
[[fr:cpp/language/virtual]]
[[it:cpp/language/virtual]]
[[ja:cpp/language/virtual]]
[[pt:cpp/language/virtual]]
[[ru:cpp/language/virtual]]
[[zh:cpp/language/virtual]]</text>
      <sha1>2x034drsi35y1shd4km0x6bmizj2ihs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/while</title>
    <ns>0</ns>
    <id>717</id>
    <revision>
      <id>87437</id>
      <parentid>87228</parentid>
      <timestamp>2016-08-24T13:50:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>progress guarantee note</comment>
      <text xml:space="preserve" bytes="3038">{{title|while loop}}
{{cpp/language/statements/navbar}}
Executes a {{spar|statement}} repeatedly, until the value of {{spar|condition}} becomes {{c|false}}. The test takes place before each iteration.

===Syntax===
{{sdsc begin}}
{{sdsc | {{spar|attr}}{{mark optional}} {{ttb|while (}} {{spar|condition}} {{ttb|)}} {{spar|statement}} }}
{{sdsc end}}

{{par begin}}
{{par | {{spar|attr}}{{mark c++11}} | any number of {{rlp|attributes}} }}
{{par | {{spar|condition}} | any {{rlp|expressions|expression}} which is {{rlp|implicit_cast|contextually convertible}} to bool or a {{rlp|declarations|declaration}} of a single variable with a brace-or-equals {{rlp|initialization|initializer}}. This expression is evaluated before each iteration, and if it yields {{c|false}}, the loop is exited. If this is a declaration, the initializer is evaluated before each iteration, and if the value of the declared variable converts to {{c|false}}, the loop is exited.}}
{{par | {{spar|statement}} | any {{rlp|statements|statement}}, typically a compound statement, which is the body of the loop }}
{{par end}}

===Explanation===
If {{spar|statement}} is a single statement (not a compound statement), the scope of variables declared in it is limited to the while loop as if it was a compound statement, in other words,
{{source|1=
while (--x &gt;= 0)
    int i;
// i goes out of scope
}}
is the same as
{{source|1=
while (--x &gt;= 0) {
    int i;
} // i goes out of scope
}}

If {{spar|condition}} is a declaration such as {{c|T t {{=}} x}}, the declared variable is only in scope in the body of the loop, and is destroyed and recreated on every iteration, in other words, such while loop is equivalent to

{{source|1=
label:
{ // start of condition scope
    T t = x;
    if (t) {
        statement
        goto label; // calls the destructor of t
    }
}
}}

If the execution of the loop needs to be terminated at some point, {{rlp |break| break statement}} can be used as terminating statement. 

If the execution of the loop needs to be continued at the end of the loop body, {{rlp|continue | continue statement}} can be used as shortcut.

===Notes===
{{cpp/language/process_guarantee_note}}

===Keywords===
{{ltt|cpp/keyword/while}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;

int main() {
    // while loop with a single statement
    int i = 0;
    while (i &lt; 10)
         i++;
    std::cout &lt;&lt; i &lt;&lt; '\n';

    // while loop with a compound statement
    int j = 2;
    while (j &lt; 9) {
        std::cout &lt;&lt; j &lt;&lt; ' ';
        j += 2;
    }
    std::cout &lt;&lt; '\n';

   // while loop with a declaration condition
   char cstr[] = &quot;Hello&quot;;
   int k = 0;
   while (char c = cstr[k++])
       std::cout &lt;&lt; c;
   std::cout &lt;&lt; '\n';
}
 | output=
10
2 4 6 8 
Hello
}}

===See also===
{{dsc begin}}
{{dsc see c | c/language/while}}
{{dsc end}}

[[de:cpp/language/while]]
[[es:cpp/language/while]]
[[fr:cpp/language/while]]
[[it:cpp/language/while]]
[[ja:cpp/language/while]]
[[pt:cpp/language/while]]
[[ru:cpp/language/while]]
[[zh:cpp/language/while]]</text>
      <sha1>h8zjqyz8eeq0tctkroyykocq3ffe29c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/language/zero initialization</title>
    <ns>0</ns>
    <id>8865</id>
    <revision>
      <id>87367</id>
      <parentid>87366</parentid>
      <timestamp>2016-08-16T20:14:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>T() is already listed, T{} is another case of value-init. &quot;C-style zero initialization&quot; is aggregate init (and is not from c99), which, again is another case of value-init.</comment>
      <text xml:space="preserve" bytes="3967">{{title|zero initialization}}
{{cpp/language/initialization/navbar}}
Sets the initial value of an object to zero

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|static}} {{spar|T}} {{spar| object}} {{ttb|;}}}}
{{sdsc | num=2 |notes=&lt;br&gt;&lt;br&gt;{{mark since c++11}}|{{spar|T}} {{ttb|()}} {{ttb|;}}
{{spar|T}} {{spar|t}} {{ttb|{{=}}}} {{ttb|{} }} {{ttb|;}} &lt;br&gt;
{{spar|T}} {{ttb|{} }} {{ttb|;}}
}}
{{sdsc | num=3 | {{ttb|char}} {{spar|array}} {{ttb|[}} {{spar|n}} {{ttb|]}} {{ttb|{{=}} &quot;&quot;;}}}}
{{sdsc end}}

===Explanation===

Zero initialization is performed in the following situations:
@1@ For every named variable with static or thread-local [[cpp/language/storage_duration|storage duration]] {{rev inl|since=c++14|that is not subject to {{rlp|constant initialization}}}}, before any other initialization.
@2@ As part of [[cpp/language/value_initialization|value-initialization]] sequence for non-class types and for members of value-initialized class types that have no constructors, including value initialization of elements of [[cpp/language/aggregate initialization|aggregates]] for which no initializers are provided.
@3@ When a character array is {{rlp|aggregate initialization#Character arrays|initialized with a string literal}} that is too short, the remainder of the array is zero-initialized.

The effects of zero initialization are:

* If {{tt|T}} is a scalar type, the object's initial value is the integral constant zero [[cpp/language/explicit_cast|explicitly converted]] to {{tt|T}}. 

* If {{tt|T}} is an non-union class type, all base classes and non-static data members are zero-initialized, and all padding is initialized to zero bits. The constructors, if any, are ignored.

* If {{tt|T}} is a union type, the first non-static named data member is zero-initialized and all padding is initialized to zero bits.

* If {{tt|T}} is array type, each element is zero-initialized

* If {{tt|T}} is reference type, nothing is done.

===Notes===
As described in [[cpp/language/initialization#Non-local_variables|non-local initialization]], static and thread-local variables {{rev inl|since=c++14|that aren't constant-initialized}} are zero-initialized before any other initialization takes place. If the definition of a non-class non-local variable has no initializer, then default initialization does nothing, leaving the result of the earlier zero-initialization unmodified.

A zero-initialized pointer is the null pointer value of its type, even if the value of the null pointer is not integral zero.

===Example===

{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;

struct A {
    int a,b,c;
};

double f[3]; // zero-initialized to three 0.0's
int* p;   // zero-initialized to null pointer value
std::string s; // zero-initialized to indeterminate value
               // then default-initialized to &quot;&quot;
int main(int argc, char* argv[])
{
    A a = A();
    std::cout &lt;&lt; a.a &lt;&lt; a.b &lt;&lt; a.c &lt;&lt; '\n';
    static int n = argc; // zero-initialized to 0
                         // then copy-initialized to argc
    delete p; // safe to delete a null pointer
}
 | output=000
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=2026|std=C++14|before=zero-init was specified to always occur first, even before constant-init|after=no zero-init if constant init applies}}
{{dr list end}}

===See also===
* [[cpp/language/default_initialization|default initialization]]
* [[cpp/language/direct_initialization|direct initialization]]
* [[cpp/language/value_initialization|value initialization]]
* [[cpp/language/copy_initialization|copy initialization]]
* [[cpp/language/list_initialization|list initialization]]

[[de:cpp/language/zero initialization]]
[[es:cpp/language/zero initialization]]
[[fr:cpp/language/zero initialization]]
[[it:cpp/language/zero initialization]]
[[ja:cpp/language/zero initialization]]
[[pt:cpp/language/zero initialization]]
[[ru:cpp/language/zero initialization]]
[[zh:cpp/language/zero initialization]]</text>
      <sha1>8p3fnqyduvmzrmrau15li9p5pxvduf2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/links</title>
    <ns>0</ns>
    <id>6541</id>
    <revision>
      <id>92069</id>
      <parentid>92030</parentid>
      <timestamp>2017-04-03T22:28:28Z</timestamp>
      <contributor>
        <ip>202.20.18.5</ip>
      </contributor>
      <comment>Fixed broken cxx-abi link</comment>
      <text xml:space="preserve" bytes="5183">{{title|Useful resources}}
*[http://isocpp.org/ The Standard C++ Foundation] - Non-profit hub for C++ news, articles, and events

===C++ FAQs===
*[http://isocpp.org/faq isocpp.org C++ FAQ] - unified FAQ by the Standard C++ Foundation.
*[http://www.stroustrup.com/bs_faq.html Bjarne Stroustrup FAQ] - Answers to the frequently asked questions from the creator of the language
*[http://www.stroustrup.com/C++11FAQ.html Bjarne Stroustrup C++11 FAQ] - Additional FAQ regarding the recent changes to the C++ language standards
*[http://stackoverflow.com/questions/tagged/c%2b%2b-faq?sort{{=}}votes StackOverflow.com C++ FAQ ] - Best answers to the frequently asked C++ questions on the programmers' Q&amp;A website StackOverflow.com
*&lt;s&gt;[http://www.parashift.com/c++-faq-lite/ C++ FAQ Lite]&lt;/s&gt; - Answers to the frequently asked questions from the Usenet newsgroup comp.lang.c++ (retired, now links to the isocpp.org C++ FAQ)

===C++ Language and library references===
*[http://www.open-std.org/jtc1/sc22/wg21/ JTC1/SC22/WG21] - The C++ Standards Committee, includes draft C++ language standards, proposals, and defect reports
**[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf n3337.pdf] - C++11 first post-publication draft
**[https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true n4140.pdf] - C++14 final draft
**[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf n4659.pdf] - C++17 final draft
* [http://eel.is/c++draft/ eel.is/c++draft] - HTML version of current draft
*[http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882%3a2014+(2016) ansi.org] Official C++ ISO/IEC 14882:2014 for purchase
*[http://stdcxx.apache.org/doc/stdlibref/index.html Apache] - Reference manual for the Apache implementation of the C++ standard library 
*[http://www-01.ibm.com/support/knowledgecenter/SSGH3R_13.1.0/com.ibm.xlcpp131.aix.doc/language_ref/langrefindex.html?lang=en IBM] Reference manual for the IBM implementation of C and C++ core languages
*[http://www-01.ibm.com/support/knowledgecenter/SSGH3R_13.1.0/com.ibm.xlcpp131.aix.doc/standlib/header_files.html?lang=en IBM] Reference manual for the IBM implementations of the C++ standard library
*[https://msdn.microsoft.com/en-us/library/3bstk3k5.aspx MSDN] - Reference manual for the Microsoft implementation of the C++ core language
*[http://msdn.microsoft.com/en-us/library/cscc687y MSDN] - Reference manual for the Microsoft implementation of the C++ library
**[http://web.archive.org/web/20120204111500/http://www.dinkumware.com/manuals/default.aspx dinkumware] - C++ Standard Library implementation that ships with Microsoft Visual C++
*[http://gcc.gnu.org/onlinedocs/libstdc++/api.html GNU libstdc++] - Reference manual for the GNU implementation of the C++ library  
*[http://h20565.www2.hpe.com/hpsc/doc/public/display?sp4ts.oid=7792031&amp;docId=emr_na-c02133105&amp;docLocale=en_US HP] - Reference manual for the Dinkumware implementation of the C++ library (as licensed to HP)
&lt;!-- *[http://www.freescale.com/infocenter/nav/1_2_3 EWL] - Reference manual for the Embedded Warrior implementation of the C++ library --&gt;
*[http://cplusplus.com/reference cplusplus.com] - Unofficial C++ standard library reference 
*[http://www.sgi.com/tech/stl/ SGI STL ] - Reference for STL, the 1994 library that introduced many concepts later adopted by the C++ standard library.

===C++ Online Tools===
*[http://coudier.com/tk?entry=cppref coudier.com] - search in compiled C++ source code of cppreference.com and some other web sites

===C++ ABIs===
*[https://mentorembedded.github.io/cxx-abi/ Itanium C++ ABI] de-facto C++ ABI standard, adopted by [https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI System V ABI], among others
*[http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html ARM ABI] ABI for the ARM Architecture, including C++ ABI.

===Patterns, idioms, tips and tricks===
*[https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md C++ Core Guidelines] by Bjarne Stroustrup and Herb Sutter
*[http://stackoverflow.com/documentation/c%2b%2b/topics StackOverflow Documentation] C++ Language topics
*[http://www.cppsamples.com/ C++ Samples] modern C++ examples created by the community
*[https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms More C++ Idioms] at wikibooks.org
*[http://c2.com/cgi/wiki?CeePlusPlusIdioms CeePlusPlusIdioms] at c2.com

===Related standards===
*[http://www.open-std.org/jtc1/sc22/wg14/ JTC1/SC22/WG14] - the C Standards Committee, includes draft C language standards, proposals, and defect reports
*[http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html POSIX.1-2008/IEEE Std 1003.1-2008/Cor 1-2013] - The operating system API of the Unix-compatible systems
*[http://www.unicode.org/versions/Unicode7.0.0/ Unicode 7.0 (6/16/2014)] - The universal encoding standard for written characters 

===Might be also useful===
* [[cpp/links/libs | List of C++ libraries]]

===See also===
{{dsc begin}}
{{dsc see c | c/links | External Links}}
{{dsc end}}

[[de:cpp/links]]
[[es:cpp/links]]
[[fr:cpp/links]]
[[it:cpp/links]]
[[ja:cpp/links]]
[[pt:cpp/links]]
[[ru:cpp/links]]
[[zh:cpp/links]]</text>
      <sha1>5z3x5uorvg3ig08ij4hd1sps8zk2fsm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/links/libs</title>
    <ns>0</ns>
    <id>8399</id>
    <revision>
      <id>92032</id>
      <parentid>91240</parentid>
      <timestamp>2017-04-03T09:19:23Z</timestamp>
      <contributor>
        <ip>84.14.43.216</ip>
      </contributor>
      <text xml:space="preserve" bytes="29284">{{title|A list of open source C++ libraries}}
&lt;div style=&quot;border: 1px solid silver; border-radius: 5px; padding: 0.5em;&quot;&gt;
The objective of this page is to build a comprehensive list of open source C++ libraries, so that when one needs an implementation of particular functionality, one needn't to waste time searching on web (DuckDuckGo, Google, Bing e.t.c).
 
If you know a library that might be useful to others, please add a link to it here. There are no restrictions on what can be included except that the source of the library must be readily available to download.

The page is provided 'as is' - with the hope of being useful, but without any warranties. Outdated, misleading or wrong links might appear here. If you've noticed one of these, it would be great if you fixed the error.
&lt;/div&gt;

==Generic==

*{{lib|Boost|http://www.boost.org/doc/libs | large collection of generic libraries (Boost License)}}
*{{lib|BDE|https://github.com/bloomberg/bde | The Bloomberg Development Environment core libraries from Bloomberg L.P. (Apache License)}}
*{{lib|Dlib|http://dlib.net | networking, threads, graphical interfaces, data structures, linear algebra, machine learning, XML and text parsing, numerical optimization, Bayesian nets, and numerous other tasks (Boost License)}}
*{{lib|JUCE|http://www.juce.com/ | An extensive, mature, cross-platform C++ toolkit (GPL License)}}
*{{lib|Loki|http://loki-lib.sourceforge.net/ | design patterns}}
*{{lib|Reason|http://www.reasoning.biz/index.htm | xml, xpath, regex, threads, sockets, http, sql, date-time, streams, encoding and decoding, filesystem, compression (GPL License)}}
*{{lib|Yomm11|http://www.yorel.be/mm/ | Open multi-methods for C++11 (Boost License)}}
*{{lib|Folly|https://github.com/facebook/folly | Facebook Open-source LibrarY. Library of C++11 components designed with practicality and efficiency in mind.}}
*{{lib|cxxomfort|http://ryan.gulix.cl/fossil.cgi/cxxomfort/|Backports of C++ features (C++11 to C++03 and C++1y proposals to C++11/C++03).}}
*{{lib|libsourcey|http://sourcey.com/libsourcey/ | Cross-platform C++11 library for high speed networking and media encoding. HTTP, WebSockets, TURN, STUN, Symple and more...}}
*{{lib|OnPosix|http://onposix.sourceforge.net/ | C++ library providing several abstractions (e.g., threading, networking, logging, IPC, etc.) on POSIX platforms.}}
*{{lib|Ultimate++|http://ultimatepp.org/ | Cross-platform rapid application development framework}}
*{{lib|CAF|https://github.com/actor-framework/actor-framework|The C++ Actor Framework (CAF) is an open source C++11 actor model implementation featuring lightweight &amp; fast actor implementations, pattern matching for messages, network transparent messaging, and more (BSD License).}}
*{{lib|cpp-mmf|https://github.com/carlomilanesi/cpp-mmf/|A C++98 library that encapsulates memory-mapped-files for POSIX or Windows}}
*{{lib|CommonPP|https://github.com/daedric/commonpp|Multi-purpose library with a strong emphasis on getting metrics out of a project. (BSD)}}
*{{lib|Better Enums|https://github.com/aantron/better-enums|Reflective enums (enum to string, iteration, etc.) with constexpr support. (BSD)}}
*{{lib|Smart Enum|https://github.com/krabicezpapundeklu/smart_enum|&quot;to_string&quot;, &quot;from_string&quot; and more for your enums. (Boost License)}}
*{{lib|nytl|https://github.com/nyorain/nytl|Generic C++17 header-only utility template library. (Boost License)}}
*{{lib|SaferCPlusPlus|https://github.com/duneroadrunner/SaferCPlusPlus | SaferCPlusPlus - Safe compatible substitutes for unsafe C++ primitives, including pointers, int and std::vector. (Boost License)}}
*{{lib|fcppt|http://fcppt.org/ | Freundlich's C++ Toolkit (fcppt) is a collection of libraries focusing on improving general C++ code by providing better types and making use of functional programming.}}
*{{lib|bitfield.h|https://github.com/wkaras/C-plus-plus-library-bit-fields | Bit field structure facility, more portable/flexible than the base language facility.}}
*{{lib|composite_op.h|https://github.com/wkaras/C-plus-plus-library-default-operators | Basic class data member introspection, cumbersome and often non-re-entrant, but sometimes useful.}}
*{{lib|Abstract Intrusive Containers|https://github.com/wkaras/C-plus-plus-intrusive-container-templates | More flexible than boost::instrusive, but not STL-compatible.}}
*{{lib|Yato|https://bitbucket.org/alexey_gruzdev/yato/overview | Modern C++(11/14) cross-platform STL-styled and STL-compatible library with implementing containers, ranges, iterators, type traits and other tools and experiments (MIT License)}}

==Communication==
*{{lib|libnavajo|http://www.libnavajo.org | a light but powerful API including http server for web and RESTful application development, supporting SSL, authentification, cookies and session management, including Websocket server support... (LGPL License)}}
*{{lib|C++ RESTful framework|https://github.com/corvusoft/restbed| C++ micro-framework designed to be embedded into a wide range of applications.}}
*{{lib|C++ REST SDK|https://github.com/Microsoft/cpprestsdk|asynchronous HTTP client and listener, asynchronous Stream, URI, JSON}}
*{{lib|cpr|https://github.com/whoshuu/cpr|a modern C++ HTTP requests library}}
*{{lib|cpp-netlib|http://cpp-netlib.org/|cpp-netlib: The C++ Network Library}}
*{{lib|cpp-redis|http://github.com/Cylix/cpp_redis/|C++11 Lightweight Redis client: async, thread-safe, no dependency, pipelining, multi-platform.}}
*{{lib|tacopie|http://github.com/Cylix/tacopie/|C++11 TCP Library}}
*{{lib|Boost.Asio|http://boost.org/libs/asio/|asynchronous and synchronous networking, timers, serial I/O}}
*{{lib|gsoap|http://gsoap2.sourceforge.net/ | C/C++ development toolkit for XML data bindings, fast WSDL/SOAP/XML Web services, WS-Security, JSON/XML-RPC RESTful services}}
*{{lib|POCO|http://pocoproject.org/ | networking: encryption, HTTP; Zip files }}
*{{lib|omniORB|http://omniorb.sourceforge.net | the fastest, complete and portable CORBA ORB implementation in C++ }}
*{{lib|ACE|http://www.cs.wustl.edu/~schmidt/ACE.html | asynchronous networking, event demultiplexing, messaging, CORBA}}
*{{lib| wvstreams | http://alumnit.ca }}
*{{lib| Unicomm|http://libunicomm.org | asynchronous networking, high-level TCP communication framework}}
*{{lib|restful_mapper|https://github.com/logandk/restful_mapper|ORM for consuming RESTful JSON APIs in C++}}
*{{lib| zeromq | http://zeromq.org/ | fast message queue}}
*{{lib| curlpp | https://code.google.com/p/curlpp/ | C++ wrapper for CURL library}}
*{{lib| Apache Thrift | https://thrift.apache.org/ | The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.}}
*{{lib| libashttp | https://github.com/tghosgor/libashttp | asynchronous HTTP client library}}
*{{lib|Simple C++ REST library|https://github.com/pdumais/rest| Very simple and self documenting library for creating a REST API in your c++ application}}
*{{lib|libtins|https://libtins.github.io/|Network packet crafting and sniffing library}}
*{{lib|HTTPP|https://github.com/daedric/httpp|Simple, production ready HTTP server built on top of Boost and a client built on top of libcurl. (BSD)}}
*{{lib|The Silicon C++14 Web Framework|http://siliconframework.org|Fast and Robust Web APIs (MIT).}}
*{{lib|ngrest|https://github.com/loentar/ngrest|Fast and easy in use JSON RESTful Web Services Framework (Apache2).}}
*{{lib|restc-cpp|https://github.com/jgaa/restc-cpp|Takes the pain out of accessing JSON API's from C++. HTTP Client, native C++ class to/from JSON serialization, asynchronous IO trough boost::asio coroutines. C++14. (MIT)}}
==Graphic user interface==

*{{lib|FLTK|http://www.fltk.org/}}
*{{lib| nana | http://nanapro.org/|doc=http://qpcr4vir.github.io/nana-doxy/html/|GUI programming in modern C++ style (Boost License)}}
*{{lib| WxWidgets|http://wxwidgets.org/|doc=http://docs.wxwidgets.org|src=http://wxwidgets.org/downloads}}
*{{lib|OWLNext|http://sourceforge.net/projects/owlnext/|Modern update to [http://en.wikipedia.org/wiki/Object_Windows_Library OWL] for writing GUI applications in standard C++ on Windows}}
*{{lib| tiny file dialogs | http://tinyfiledialogs.sourceforge.net | a single C C++ cross-platform file (no init, no main loop, 6 modal function calls)}}

; GTK+

*{{lib| glibmm | http://www.gtkmm.org/ }}
*{{lib| gtkmm | http://www.gtkmm.org/ }}
*{{lib| goocanvasmm | http://live.gnome.org/GooCanvas }}
*{{lib| libglademm | http://www.gtkmm.org/ }}
*{{lib| libgnomecanvasmm | http://www.gtkmm.org/ }}
*{{lib| webkitgtk | http://webkitgtk.org/ }}
*{{lib| flowcanvas | http://drobilla.net/software/flowcanvas/ }}
*{{lib| evince | http://www.gnome.org/projects/evince/ }}

; Qt

*{{lib| Qt|http://qt.io/|doc=http://doc.qt.io/|src=http://qt.io/download}}
*{{lib| qwtplot3d | http://qwtplot3d.sourceforge.net }}
*{{lib| qwt5 | http://qwt.sourceforge.net | Qt Widgets for Technical Applications }}
*{{lib| libdbusmenu-qt | https://launchpad.net/libdbusmenu-qt }}
*{{lib| QuickQanava | https://github.com/cneben/QuickQanava | C++14 library for drawing directed graphs in a Qt/QML application; project homepage: http://www.qanava.org }}
*{{lib| QuickProperties | https://github.com/cneben/QuickProperties | C++/QML library for QObject/QtObject properties edition; project homepage: http://www.qanava.org }}

== General Multimedia ==

*{{lib| SFML (Simple and Fast Multimedia Library) | http://www.sfml-dev.org/index.php }}
*{{lib| SDL (Simple DirectMedia Layer) | http://www.libsdl.org/ | cross-platform, low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D (zlib license) }}
*{{lib| SIGIL (Sound, Input, and Graphics Integration Library) | http://www.libsigil.com/ | mind-bogglingly simple, cross-platform, minimalist library for text, shapes, input, audio, and 2D images }}
*{{lib| Cinder | http://libcinder.org/ }}
*{{lib| openFrameworks | http://www.openframeworks.cc/ }}

==Graphics==

*{{lib| cairomm | http://cairographics.org/cairomm/ }}
*{{lib| nux | http://launchpad.net/nux }}
*{{lib| pangomm | http://gtkmm.org }}
*{{lib| gegl | http://gegl.org/ }}
*{{lib| stb | https://github.com/nothings/stb }}
*{{lib|Adobe/boost GIL|http://boost.org/libs/gil | high-level generic library, focused on algorithms that operate on 2D images. Very limited I/O options.}}
*{{lib|GraphicsMagick|http://www.graphicsmagick.org/|Reading, writing, and manipulating images in over 88 major formats. Forked from ImageMagick in 2002}}
*{{lib|Skia Graphics Engine|https://skia.org/|Google's core graphics library as of 2005, used in Chrome, Chrome OS, Android, and also in Firefox and Sublime Text [[enwiki:Skia_Graphics_Engine]]}}
*{{lib|Anti-Grain Evolution|https://github.com/tyoma/agge|cross-platform 2D rasterization and rendering engine}}

; Plotting
*{{lib| plotutils | http://www.gnu.org/software/plotutils/ }}

; Formats
*{{lib| libraw | http://www.libraw.org/ }}
*{{lib| openexr | http://www.openexr.com }}
*{{lib| qimageblitz | http://www.kde.org/ }}
*{{lib| imagemagick | http://www.imagemagick.org/ }}
*{{lib| djvulibre | http://djvu.sourceforge.net/ }}
*{{lib| poppler | http://poppler.freedesktop.org/ }}
*{{lib| SVG++ | http://svgpp.org/ }}

==Audio==
*{{lib| soundtouch | http://www.surina.net/soundtouch/ }}
*{{lib| KFR | https://www.kfrlib.com | Fast, modern DSP framework, DFT/FFT, Audio resampling, FIR/IIR filters, Biquad }}
*{{lib| Aquila| http://aquila-dsp.org/ | cross-platform DSP library }}

; Fingerprinting
*{{lib| chromaprint | http://acoustid.org/chromaprint }}
*{{lib| libofa | http://code.google.com/p/musicip-libofa/ }}
*{{lib| libmusicbrainz | http://musicbrainz.org }}

; Formats
*{{lib| audiofile | http://audiofile.68k.org/ }}
*{{lib| flac | http://flac.sourceforge.net/ }}

; Tagging
*{{lib| id3lib | http://id3lib.sourceforge.net/ }}
*{{lib| taglib | http://developer.kde.org/~wheeler/taglib.html }}

; CD
*{{lib| libkcompactdisc | http://www.kde.org/ }}

==Image Processing==
*{{lib| opencv | http://opencv.org/ }}
*{{lib| dlib | http://dlib.net/imaging.html }}
*{{lib| ITK | https://itk.org/ }}
*{{lib| OTB | https://www.orfeo-toolbox.org/ }}


==Video==
*{{lib| crystalhd | http://www.broadcom.com/support/crystal_hd/ }}
*{{lib| mjpegtools | http://mjpeg.sourceforge.net/ }}
*{{lib| libmatroska | http://www.matroska.org/ }}
*{{lib| libVLC | http://wiki.videolan.org/LibVLC }}
*{{lib| gstreamermm | http://gstreamer.freedesktop.org/ }}

==3D Graphics==
*{{lib|Vulkan|https://www.khronos.org/vulkan/}}
*{{lib|OpenGL|http://www.opengl.org/}}
*{{lib|bgfx|https://github.com/bkaradzic/bgfx#bgfx---cross-platform-rendering-library}} Cross-platform, graphics API agnostic, &quot;Bring Your Own Engine/Framework&quot; style rendering library.
*{{lib|Ogre3D|http://www.ogre3d.org/docs/manual/}}
*{{lib|GLEW|http://glew.sourceforge.net/}} OpenGL function loading
*{{lib|Epoxy|https://github.com/anholt/libepoxy}} Modern successor to GLEW. Abstracts difference between some kinds of GL contexts, which makes it sometimes simpler to use than GLEW. Used by GTK+ project since 2015.
*{{lib|GLFW|http://www.glfw.org/}} OpenGL window manager
*{{lib|GLM|http://glm.g-truc.net/}} Header only C++ mathematics library for rendering
*{{lib|assimp|http://assimp.sourceforge.net/}} 3D model loading
*{{lib|VTK|http://vtk.org/}}
*{{lib|Magnum|http://mosra.cz/blog/magnum.php}} C++11 and OpenGL/GLES/WebGL graphics engine
*{{lib|Irrlicht|http://irrlicht.sourceforge.net/}}
*{{lib|Horde3D|http://www.horde3d.org/}}
*{{lib|Visionaray|https://github.com/szellmann/visionaray}} A C++ ray tracing template library


== Game Engine Architecture ==
*{{lib|EntityX|https://github.com/alecthomas/entityx}}
*{{lib|Anax|https://github.com/miguelishawt/anax}}
*{{lib|EntityPlus|https://github.com/Yelnats321/EntityPlus}}

==Internationalization==
*{{lib|IBM ICU|http://site.icu-project.org/}}
*{{lib| gettext | http://www.gnu.org/software/gettext/ }}
*{{lib| spirit-po | https://github.com/cbeck88/spirit-po | A small, header-only library which parses po-files and provides an interface similar to GNU libintl. Based on boost::spirit.}}

==Math==
*{{lib| alglib | http://www.alglib.net/ }}
*{{lib|ArrayFire High Performance Computation Library|http://www.arrayfire.com/docs/index.htm }}
*{{lib|GNU MP bignum C++ interface|http://gmplib.org/manual/C_002b_002b-Class-Interface.html#C_002b_002b-Class-Interface}}
*{{lib|Boost.Multiprecision|http://www.boost.org/doc/libs/release/libs/multiprecision/doc/html/index.html}}
*{{lib|Boost.Math.Special Functions and Statistical Distributions|http://www.boost.org/doc/libs/release/libs/math/doc/sf_and_dist/html/}}
*{{lib|Boost.Random|http://www.boost.org/doc/libs/release/doc/html/boost_random.html}}
*{{lib|NTL - A Library for doing Number Theory | http://www.shoup.net/ntl/ }}
*{{lib|cpp-measures|https://github.com/carlomilanesi/cpp-measures/|A header-only C++11 library to handle physical measures }}
*{{lib|G+Smo cross-platform library for isogeometric analysis|http://gs.jku.at/gismo}}

;Linear algebra
*{{lib|Boost.uBLAS|http://www.boost.org/doc/libs/release/libs/numeric/ublas/doc/index.htm}} 
*{{lib|Eigen|http://eigen.tuxfamily.org/index.php?title{{=}}Main_Page#Documentation}}
*{{lib|Armadillo|http://arma.sourceforge.net/}}
*{{lib|Blitz++|http://sourceforge.net/projects/blitz/}}
*{{lib|IT++|http://sourceforge.net/projects/itpp/}}
*{{lib| Dlib - linear algebra tools | http://dlib.net/linear_algebra.html }}

;Graph theory
*{{lib|Boost.Graph|http://www.boost.org/doc/libs/release/libs/graph/doc/index.html}}
*{{lib|LEMON|http://lemon.cs.elte.hu/trac/lemon}}
*{{lib|OGDF - Open Graph Drawing Framework|http://www.ogdf.net/}}
*{{lib|NGraph - a simple (Network) Graph library in C++ |http://math.nist.gov/~RPozo/ngraph/ngraph_index.html}}
*{{lib|GTpo|https://github.com/cneben/GTpo|C++14 generic graph topology library with Protocol Buffer serialization; project homepage: http://www.qanava.org }}

; Class Library for Numbers
*{{lib| cln | http://www.ginac.de/CLN/ }}

; Machine Learning
*{{lib| liblinear | http://www.csie.ntu.edu.tw/~cjlin/liblinear/ }}
*{{lib| Dlib - machine learning tools | http://dlib.net/ml.html }}
*{{lib| MLPACK - machine learning package | http://mlpack.org }}
*{{lib| Shogun - large scale machine learning toolbox | http://shogun-toolbox.org }}

; Computational geometry
*{{lib|CGAL - Computational geometry algorithms library |http://www.cgal.org/}}
*{{lib|Wykobi - Computational geometry library | http://www.wykobi.com}}
*{{lib|PCL - Point Cloud library | http://pointclouds.org/}}

; Automata theory
*{{lib| yasmine - C++11 UML state machine framework | http://yasmine.seadex.de|doc=http://yasmine.seadex.de/Documentation.html|src=http://yasmine.seadex.de/Downloads.html }}

==Financial Calculations==
*{{lib|QuantLib - Quantitative finance library |http://www.quantlib.org/}}

==Concurrency==
*{{lib|Intel TBB|http://threadingbuildingblocks.org/documentation.php}}
*{{lib|OpenMP|http://openmp.org/wp/openmp-specifications/}}
*{{lib|RaftLib|http://raftlib.io}} C++ stream like concurrent actors
*{{lib|Thrust|http://thrust.github.io/}} STL-like algorithms and data-structures for CUDA
*{{lib|ViennaCL|http://viennacl.sourceforge.net/}} Linear algebra and algorithms with OpenMP, CUDA, and OpenCL backends
*{{lib|VexCL|https://github.com/ddemidov/vexcl}} C++ expression templates library for OpenCL and CUDA
*{{lib|Boost.Compute|https://github.com/kylelutz/compute}} (unofficial) STL-like algorithms and data-structures for OpenCL
*{{lib|Boost.Interprocess|http://www.boost.org/doc/libs/release/doc/html/interprocess.html}}
*{{lib|Boost.Thread|http://www.boost.org/doc/libs/release/doc/html/thread.html}}
*{{lib|Boost.Atomic|http://www.boost.org/doc/libs/release/doc/html/atomic.html}}
*{{lib|Boost.Lockfree|http://www.boost.org/doc/libs/release/doc/html/lockfree.html}}
*{{lib|Boost.MPI|http://www.boost.org/doc/libs/release/doc/html/mpi.html}}
*{{lib|Boost.Context|http://www.boost.org/doc/libs/release/libs/context/doc/html/index.html}}
*{{lib|libopenmpi | http://www.open-mpi.org/ }}
*{{lib|libsimdpp | https://github.com/p12tic/libsimdpp }} &lt;!-- would fit better in &quot;parallelism&quot; section, if one appears some day--&gt;
*{{lib|HPX|https://github.com/STEllAR-GROUP/hpx/}} A general purpose C++ runtime system for parallel and distributed applications of any scale
*{{lib|SObjectizer|https://sourceforge.net/projects/sobjectizer/}} A small framework for simplification of development of concurrent and event-driven applications in C++ by using actor and publish-subscribe models.

==Containers==
*{{lib|Boost.Any|http://www.boost.org/doc/libs/release/libs/any/}}
*{{lib|Boost.Array|http://www.boost.org/doc/libs/release/libs/array/}}
*{{lib|Boost.Bimap|http://www.boost.org/doc/libs/release/libs/bimap/}}
*{{lib|Boost.Container|http://www.boost.org/doc/libs/release/libs/container/}}
*{{lib|Boost.Fusion|http://www.boost.org/doc/libs/release/libs/fusion/}}
*{{lib|Boost.Heap|http://www.boost.org/doc/libs/release/libs/heap/}}
*{{lib|Boost.Pointer Container|http://www.boost.org/doc/libs/release/libs/ptr_container/}}
*{{lib|Boost.Tuple|http://www.boost.org/doc/libs/release/libs/tuple/}}
*{{lib|Boost.Variant|http://www.boost.org/doc/libs/release/libs/variant/}}
*{{lib|cpp-btree|https://code.google.com/p/cpp-btree/| btree_map, btree_set, btree_multimap, btree_multiset.}}
*{{lib|TdhLists|https://sites.google.com/a/tdhgis.com/tdhlistsapi/}}
*{{lib|strict_variant|https://github.com/cbeck88/strict-variant|A fast, never-empty variant targetting C++11. Prevents many undesirable implicit conversions.}}
*{{lib|eggs::variant|https://github.com/eggs-cpp/variant|Eggs.Variant is a C++11/14 generic, type-safe, discriminated union. It is notable in particular for having very good `constexpr` support.}}

==Metaprogramming==
*{{lib|Boost.MPL|http://www.boost.org/doc/libs/release/libs/mpl/doc/index.html|Original metaprogramming library, targeted at C++03, slow}}
*{{lib|Boost.Hana|http://www.boost.org/doc/libs/release/libs/hana/doc/html/index.html|New metaprogramming library for both types and values}}
*{{lib|Metal|https://github.com/brunocodutra/metal|Uses lazy metafunctions (like MPL), 100% SFINAE-friendly, optimized for SLOC}}
*{{lib|Brigand|https://github.com/edouarda/brigand|Uses eager metafunctions, optimized for best performance}}
*{{lib|Meta|https://github.com/ericniebler/meta|Uses eager metafunctions, middle ground between metal and brigand wrt performance}}
*{{lib|Boost.Metaparse|http://www.boost.org/doc/libs/1_61_0/doc/html/metaparse.html|Compile-time parser library, producing types, values, and metafunctions from compile-time strings}}
*{{lib|Boost.Proto|http://www.boost.org/doc/libs/1_61_0/doc/html/proto.html|A library for building expression template-backed EDSLs}}
*{{lib|CoMeta|https://github.com/kfrlib/cometa|Lightweight, header-only C++14 metaprogramming library}}
*{{lib|visit_struct|https://github.com/cbeck88/visit_struct| A miniature reflection library, providing structure visitors for C++11. Self-contained, 100-200 lines of code depending how you count.}}

==Serialization==
*{{lib|Boost.Serialization|http://www.boost.org/doc/libs/release/libs/serialization/}}
*{{lib|libs11n|http://www.s11n.net}}
*{{lib|sweet_persist|http://www.sweetsoftware.co.nz/persist_overview.html}}
*{{lib|protobuf | http://code.google.com/p/protobuf/ }}
*{{lib|gSOAP|http://gsoap2.sourceforge.net}}
*{{lib|C++ XML objects | http://cppxmlobj.sourceforge.net}}
*{{lib|yaml-cpp| https://github.com/jbeder/yaml-cpp }}
*{{lib|YAS (Yet Another Serialization)|https://github.com/niXman/yas}}
*{{lib|cereal (C++11 serialization)|http://uscilab.github.io/cereal/}}
*{{lib|jios (JSON serialization)|https://github.com/castedo/jios}}

==Testing==
*{{lib| Boost.Test | http://www.boost.org/libs/test/ }}
*{{lib| cppunit | http://sourceforge.net/projects/cppunit/}}
*{{lib| Google Test | http://code.google.com/p/googletest/}}
*{{lib| Catch | https://github.com/philsquared/Catch}}
*{{lib| jest | https://github.com/jeaye/jest|A sane and minimal C++14 unit test framework}}
*{{lib| doctest | https://github.com/onqtam/doctest | The lightest feature-rich C++ single-header testing framework for unit tests and TDD}}
*{{lib| liblittletest | https://github.com/etr/liblittletest| Portable, one file header-only testing framework}}

==Benchmarking==
*{{lib| Celero | https://github.com/DigitalInBlue/Celero/ }}
*{{lib| gperftools | https://github.com/gperftools/gperftools | 'Google Performance Tools' includes a high-performance, multi-threaded malloc implementation plus tools for benchmarking heap allocation and CPU utilization. }}

==XML==
*{{lib| libxml++ | http://libxmlplusplus.sourceforge.net/}}
*{{lib| pugixml | http://pugixml.org/}}
*{{lib| tinyxml | http://www.grinninglizard.com/tinyxml/}}
*{{lib|tinyxml2|https://github.com/leethomason/tinyxml2/|Another and work in progress of TinyXML.}}
*{{lib| Xerces | http://xerces.apache.org/xerces-c/}}

==JSON==
*{{lib|ArduinoJson|https://github.com/bblanchon/ArduinoJson|ArduinoJson}}
*{{lib|json|https://github.com/nlohmann/json|JSON for Modern C++}}
*{{lib|jsonme--|https://github.com/pibara/jsonme--}}
*{{lib|ThorsSerializer|https://github.com/Loki-Astari/ThorsSerializer}}
*{{lib|JsonBox|https://github.com/anhero/JsonBox}}
*{{lib|jsoncpp|https://github.com/open-source-parsers/jsoncpp}}
*{{lib|zoolib|http://www.zoolib.org/doc/}}
*{{lib|JOST|http://ddsbench.svn.sourceforge.net/viewvc/ddsbench/trunk/jost/}}
*{{lib|CAJUN|http://cajun-jsonapi.sourceforge.net/}}
*{{lib|libjson|http://sourceforge.net/projects/libjson/}}
*{{lib|nosjob|http://fossil.wanderinghorse.net/repos/nosjob/index.cgi/index}}
*{{lib|rapidjson|https://github.com/miloyip/rapidjson}}
*{{lib|jsoncons|https://github.com/danielaparker/jsoncons/ | jsoncons is a C++ library for the construction of tree structured json values. It also supports an event-based streaming API.}}
*{{lib|JSON++|https://bitbucket.org/tunnuz/json}}
*{{lib|qjson|http://qjson.sourceforge.net/}}
*{{lib|json-cpp|https://github.com/ascheglov/json-cpp}}
*{{lib|jansson|http://www.digip.org/jansson/ | Jansson is C library for encoding, decoding and manipulating JSON data.}}
*{{lib|json11|https://github.com/dropbox/json11 | json11 is a tiny JSON library for C++11, providing JSON parsing and serialization.}}
*{{lib|JSON Voorhees|http://tgockel.github.io/json-voorhees/|Killer JSON for C++}}
*{{lib|jeayeson|https://github.com/jeaye/jeayeson|A very sane (header only) C++14 JSON library}}
*{{lib|ujson|https://bitbucket.org/awangk/ujson|µjson is a small, C++11, UTF-8, JSON library}}
*{{lib|minijson|https://giacomodrago.github.io/minijson/|C++ DOM-less and allocation-free JSON parsing and serialization}}
*{{lib|jios (JSON Input Output Streams)|https://github.com/castedo/jios}}

==Web==

*{{lib| libmusicbrainz5 | http://musicbrainz.org/doc/libmusicbrainz }}
*{{lib| liblastfm | http://www.last.fm/ }}
*{{lib| libkcddb | http://www.kde.org/ }}
*{{lib| Chromium Embedded | https://code.google.com/p/chromiumembedded/ }}
*{{lib| QtWebApp | http://stefanfrings.de/qtwebapp/index-en.html }} HTTP(s) Server in C++ inspired by Java Servlets
*{{lib| Wt|http://www.webtoolkit.eu/wt/|doc=http://www.webtoolkit.eu/wt/doc/reference/html/index.html|src=http://www.webtoolkit.eu/wt/download}}
*{{lib| Tufão | https://github.com/vinipsmaker/tufao }}
*{{lib| libhttpserver | https://github.com/etr/libhttpserver}}

==GPS==
*{{lib| gpsd | http://www.catb.org/gpsd/ }}

==Databases==
*{{lib| OTL | http://otl.sourceforge.net/ }}
*{{lib| DTL | http://dtemplatelib.sourceforge.net/ }}
*{{lib| libpqxx | http://pqxx.org/development/libpqxx/ }}
*{{lib| lmdb++ | https://github.com/bendiken/lmdbxx | C++11 wrapper for the LMDB embedded B+ tree database library. }}
*{{lib| mongocxx | https://github.com/mongodb/mongo-cxx-driver/tree/master | C++11 driver library for MongoDB }}
*{{lib| mysql++ | http://dev.mysql.com/ }}
*{{lib| ODB - C++ Object-Relational Mapping (ORM)|  http://www.codesynthesis.com/products/odb/}}
*{{lib| QUINCE: QUeries IN C++ Expressions (ORM+EDSL)|  http://quince-lib.com/}}
*{{lib| QxOrm - C++ Qt Object-Relational Mapping (ORM) | http://www.qxorm.com/ }}
*{{lib| SOCI | http://soci.sourceforge.net/ }}
*{{lib| sqlpp11 | https://github.com/rbock/sqlpp11}}

==Cryptography==
*{{lib| Botan | http://botan.randombit.net/ }}
*{{lib| gnutls | http://www.gnutls.org/ }}
*{{lib| openssl | http://www.openssl.org/ }}
*{{lib| crypto++ | http://www.cryptopp.com/ }}
*{{lib| TomCrypt | http://github.com/libtom/libtomcrypt }}

==File metadata==
*{{lib| libkexiv2 | http://www.kde.org/ }}
*{{lib| exiv2 | http://www.exiv2.org }}
*{{lib| exempi | http://libopenraw.freedesktop.org/wiki/Exempi }}
*{{lib| rarian | http://rarian.freedesktop.org/ }}

==Text==
; Parse
*{{lib| PEGTL | https://github.com/ColinH/PEGTL | Parsing Expression Grammar Template Library}}
; Search
*{{lib| clucene | http://clucene.sourceforge.net }}
*{{lib| xapian | http://xapian.org/ }}

==Terminal==
*{{lib| cwidget | http://cwidget.alioth.debian.org }}

==Configuration==
*{{lib| gconfmm | http://www.gtkmm.org/ }}
*{{lib| libconfig| http://www.hyperrealm.com/libconfig/}}
*{{lib| Boost.Program_options | http://www.boost.org/doc/libs/1_51_0/doc/html/program_options.html}}

==Embedded languages bindings==
*{{lib| ChaiScript | http://github.com/ChaiScript/ChaiScript }}
*{{lib| ExprTk | http://partow.net/programming/exprtk/index.html }}
*{{lib| lua | http://www.lua.org }}
*{{lib| AngelScript | http://angelcode.com/angelscript/ |a scripting language like C++.}}
*{{lib| mozjs | http://www.mozilla.org/js/spidermonkey/ }}
*{{lib| muparser | http://muparser.sourceforge.net }}
*{{lib| PythonQt | http://pythonqt.sourceforge.net/ }}

==Embedded/realtime==
*{{lib| QP/C++ | http://sourceforge.net/projects/qpc/files/QP_C%2B%2B/4.5.04/ | RTOS kernel, dual GPL }}
*{{lib| FreeRTOS C++ Handler | https://github.com/yuriykulikov/Event-driven_Framework_for_Embedded_Systems | handler, looper, state machine, CLI, portable }}
*{{lib| ETL - Embedded Template Library | http://www.etlcpp.com | C++ 03, Portable template library tailored for low resource platforms }}
*{{lib| distortos | http://distortos.org/ | object-oriented C++ RTOS for microcontrollers }}
*{{lib| µcuREST | http://github.com/hutorny/micurest | C++11 REST/JSON server framework for microcontrollers }}

==PDF==
*{{lib| HARU | http://libharu.sourceforge.net/ }}
*{{lib| PoDoFo | http://podofo.sourceforge.net/ }}
*{{lib| JagPDF | http://www.jagpdf.org/ }}

==Logging==

*{{lib|Log4cpp|http://log4cpp.sourceforge.net/|A library of C++ classes for flexible logging to files, syslog, IDSA and other destinations (LGPL)}}
*{{lib|spdlog|https://github.com/gabime/spdlog|Super fast, header only, C++ logging library}}
*{{lib|plog|https://github.com/SergiusTheBest/plog|Portable and simple log for C++ in less than 1000 lines of code (MPL2)}}

===See also===
{{dsc begin}}
{{dsc see c | c/links/libs | Non-ANSI/ISO Libraries}}
{{dsc end}}

[[de:cpp/links/libs]]
[[es:cpp/links/libs]]
[[fr:cpp/links/libs]]
[[it:cpp/links/libs]]
[[ja:cpp/links/libs]]
[[pt:cpp/links/libs]]
[[ru:cpp/links/libs]]
[[zh:cpp/links/libs]]</text>
      <sha1>awwb5080jn7yz62hawe56a32uiv0wie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale</title>
    <ns>0</ns>
    <id>718</id>
    <revision>
      <id>71006</id>
      <parentid>71005</parentid>
      <timestamp>2014-06-04T18:48:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>name the new see-also</comment>
      <text xml:space="preserve" bytes="3266">{{title|Localization library}}
{{cpp/locale/navbar}}

The locale facility includes internationalization support for character classification and string collation, numeric, monetary, and date/time formatting and parsing, and message retrieval. Locale settings control the behavior of stream I/O, regular expression library, and other components of the C++ standard library.

=== Locales ===
{{dsc begin}}
{{dsc header | locale }}

{{dsc h2 | Locales and facets }}
{{dsc inc | cpp/locale/dsc locale}}
{{dsc inc | cpp/locale/dsc use_facet}}
{{dsc inc | cpp/locale/dsc has_facet}}

{{dsc h2 | Character classification }}
{{dsc inc | cpp/locale/dsc isspace}}
{{dsc inc | cpp/locale/dsc isblank}}
{{dsc inc | cpp/locale/dsc iscntrl}}
{{dsc inc | cpp/locale/dsc isupper}}
{{dsc inc | cpp/locale/dsc islower}}
{{dsc inc | cpp/locale/dsc isalpha}}
{{dsc inc | cpp/locale/dsc isdigit}}
{{dsc inc | cpp/locale/dsc ispunct}}
{{dsc inc | cpp/locale/dsc isxdigit}}
{{dsc inc | cpp/locale/dsc isalnum}}
{{dsc inc | cpp/locale/dsc isprint}}
{{dsc inc | cpp/locale/dsc isgraph}}

{{dsc h2 | Character conversions }}
{{dsc inc | cpp/locale/dsc toupper}}
{{dsc inc | cpp/locale/dsc tolower}}

{{dsc h2 | String and stream conversions }}
{{dsc inc | cpp/locale/dsc wstring_convert}}
{{dsc inc | cpp/locale/dsc wbuffer_convert}}

{{dsc h2 | Facet category base classes }}
{{dsc inc | cpp/locale/dsc ctype_base}}
{{dsc inc | cpp/locale/dsc codecvt_base}}
{{dsc inc | cpp/locale/dsc messages_base}}
{{dsc inc | cpp/locale/dsc time_base}}
{{dsc inc | cpp/locale/dsc money_base}}

{{dsc h2 | Facet categories }}
{{dsc inc | cpp/locale/dsc ctype}}
{{dsc inc | cpp/locale/dsc ctype_char}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc inc | cpp/locale/dsc collate}}
{{dsc inc | cpp/locale/dsc messages}}
{{dsc inc | cpp/locale/dsc time_get}}
{{dsc inc | cpp/locale/dsc time_put}}
{{dsc inc | cpp/locale/dsc num_get}}
{{dsc inc | cpp/locale/dsc num_put}}
{{dsc inc | cpp/locale/dsc numpunct}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc inc | cpp/locale/dsc money_put}}
{{dsc inc | cpp/locale/dsc moneypunct}}

{{dsc h2 | Locale-specific facet categories }}
{{dsc inc | cpp/locale/dsc ctype_byname}}
{{dsc inc | cpp/locale/dsc codecvt_byname}}
{{dsc inc | cpp/locale/dsc messages_byname}}
{{dsc inc | cpp/locale/dsc collate_byname}}
{{dsc inc | cpp/locale/dsc time_get_byname}}
{{dsc inc | cpp/locale/dsc time_put_byname}}
{{dsc inc | cpp/locale/dsc numpunct_byname}}
{{dsc inc | cpp/locale/dsc moneypunct_byname}}
{{dsc end}}

=== Locale-independent unicode conversion facets ===
{{dsc begin}}
{{dsc header | codecvt }}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf16}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc inc | cpp/locale/dsc codecvt_mode}}
{{dsc end}}

=== C library locales ===
{{dsc begin}}
{{dsc header | clocale }}
{{dsc inc | cpp/locale/dsc setlocale}}
{{dsc inc | cpp/locale/dsc LC_categories}}
{{dsc inc | cpp/locale/dsc localeconv}}
{{dsc inc | cpp/locale/dsc lconv}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/locale | Localization support}}
{{dsc end}}

[[ar:cpp/locale]]
[[de:cpp/locale]]
[[es:cpp/locale]]
[[fr:cpp/locale]]
[[it:cpp/locale]]
[[ja:cpp/locale]]
[[pt:cpp/locale]]
[[ru:cpp/locale]]
[[zh:cpp/locale]]</text>
      <sha1>3tzbcks4ty8izsl0z8144d77z5lwajn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/LC ALL</title>
    <ns>0</ns>
    <id>4405</id>
    <redirect title="cpp/locale/LC categories" />
    <revision>
      <id>15779</id>
      <parentid>15762</parentid>
      <timestamp>2011-12-15T17:05:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/LC categories]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/locale/LC_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/LC COLLATE</title>
    <ns>0</ns>
    <id>4406</id>
    <redirect title="cpp/locale/LC categories" />
    <revision>
      <id>15778</id>
      <parentid>15763</parentid>
      <timestamp>2011-12-15T17:05:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/LC categories]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/locale/LC_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/LC CTYPE</title>
    <ns>0</ns>
    <id>4407</id>
    <redirect title="cpp/locale/LC categories" />
    <revision>
      <id>15777</id>
      <parentid>15764</parentid>
      <timestamp>2011-12-15T17:05:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/LC categories]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/locale/LC_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/LC MONETARY</title>
    <ns>0</ns>
    <id>4408</id>
    <redirect title="cpp/locale/LC categories" />
    <revision>
      <id>15776</id>
      <parentid>15765</parentid>
      <timestamp>2011-12-15T17:05:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/LC categories]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/locale/LC_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/LC NUMERIC</title>
    <ns>0</ns>
    <id>4409</id>
    <redirect title="cpp/locale/LC categories" />
    <revision>
      <id>15773</id>
      <parentid>15766</parentid>
      <timestamp>2011-12-15T17:04:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/LC categories]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/locale/LC_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/LC TIME</title>
    <ns>0</ns>
    <id>4410</id>
    <redirect title="cpp/locale/LC categories" />
    <revision>
      <id>15772</id>
      <parentid>15767</parentid>
      <timestamp>2011-12-15T17:04:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/LC categories]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/locale/LC_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/LC categories</title>
    <ns>0</ns>
    <id>4562</id>
    <revision>
      <id>89616</id>
      <parentid>89613</parentid>
      <timestamp>2017-01-22T18:54:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>undo</comment>
      <text xml:space="preserve" bytes="2702">{{title|&lt;small&gt;LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME&lt;/small&gt;}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header|clocale}}
{{dcl |
#define LC_ALL      /*implementation defined*/
}}
{{dcl |
#define LC_COLLATE  /*implementation defined*/
}}
{{dcl |
#define LC_CTYPE    /*implementation defined*/
}}
{{dcl |
#define LC_MONETARY /*implementation defined*/
}}
{{dcl |
#define LC_NUMERIC  /*implementation defined*/
}}
{{dcl |
#define LC_TIME     /*implementation defined*/
}}
{{dcl end}}

Each of the above macro constants expand to integer constant expressions with distinct values that are suitable for use as the first argument of {{lc|std::setlocale}}.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|LC_ALL}}      | selects the entire C locale}}
{{dsc | {{tt|LC_COLLATE}}  | selects the collation category of the C locale}}
{{dsc | {{tt|LC_CTYPE}}    | selects the character classification category of the C locale}}
{{dsc | {{tt|LC_MONETARY}} | selects the monetary formatting category of the C locale}}
{{dsc | {{tt|LC_NUMERIC}}  | selects the numeric formatting category of the C locale}}
{{dsc | {{tt|LC_TIME}}     | selects the time formatting category of the C locale}}
{{dsc end}}

Additional macro constants, with names that begin with {{tt|LC_}} followed by at least one uppercase letter, may be defined in {{tt|&lt;clocale&gt;}}. For example, the POSIX specification requires LC_MESSAGES (which controls {{lc|std::perror}} and {{lc|std::strerror}}) and the GNU C library additionally defines LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, and LC_IDENTIFICATION.

===Example===
{{example
 | 
 | code=
#include &lt;cstdio&gt;
#include &lt;clocale&gt;
#include &lt;ctime&gt;
#include &lt;cwchar&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.UTF-8&quot;); // the C locale will be the UTF-8 enabled English
    std::setlocale(LC_NUMERIC, &quot;de_DE&quot;);   // decimal dot will be German
    std::setlocale(LC_TIME, &quot;ja_JP&quot;);      // date/time formatting will be Japanese
    wchar_t str[100];
    std::time_t t = std::time(nullptr);
    std::wcsftime(str, 100, L&quot;%A %c&quot;, std::localtime(&amp;t));
    std::wprintf(L&quot;Number: %.2f\nDate: %Ls\n&quot;, 3.14, str);
}
 | output=
Number: 3,14
Date: 月曜日 2011年12月19日 18時04分40秒
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc setlocale}}
{{dsc inc | cpp/locale/dsc locale}}
{{dsc see c | c/locale/LC_categories | locale categories | nomono=true}}
{{dsc end}}

[[de:cpp/locale/LC categories]]
[[es:cpp/locale/LC categories]]
[[fr:cpp/locale/LC categories]]
[[it:cpp/locale/LC categories]]
[[ja:cpp/locale/LC categories]]
[[pt:cpp/locale/LC categories]]
[[ru:cpp/locale/LC categories]]
[[zh:cpp/locale/LC categories]]</text>
      <sha1>cyi2f7sjty600f4ci6gne921cwircps</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt</title>
    <ns>0</ns>
    <id>2926</id>
    <revision>
      <id>90505</id>
      <parentid>90500</parentid>
      <timestamp>2017-02-27T18:38:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>in fact, having looked at the impls, let's be stronger and say single-byte for the locale-independent wchar_t codecvt to avoid further confusion -- this is all re http://stackoverflow.com/questions/42477036</comment>
      <text xml:space="preserve" bytes="5223">{{cpp/title | codecvt}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; 
    class InternT, 
    class ExternT, 
    class State
&gt; class codecvt;
}}
{{dcl end}}

Class {{lc|std::codecvt}} encapsulates conversion of character strings, including wide and multibyte, from one encoding to another. All file I/O operations performed through {{c|std::basic_fstream&lt;CharT&gt;}} use the {{c|std::codecvt&lt;CharT, char, std::mbstate_t&gt;}} facet of the locale imbued in the stream.

{{inheritance diagram/std-codecvt}}

Four standalone (locale-independent) specializations are provided by the standard library:

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} | identity conversion }}
{{dsc | {{c|std::codecvt&lt;char16_t, char, std::mbstate_t&gt;}} | conversion between UTF-16 and UTF-8 {{mark since c++11}}}}
{{dsc | {{c|std::codecvt&lt;char32_t, char, std::mbstate_t&gt;}} | conversion between UTF-32 and UTF-8 {{mark since c++11}}}}
{{dsc | {{c|std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;}} | conversion between the system's native wide and the single-byte narrow character sets}}
{{dsc end}}

In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these four specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|intern_type}} | {{tt|InternT}}}}
{{dsc | {{tt|extern_type}} | {{tt|ExternT}}}}
{{dsc | {{tt|state_type}} | {{tt|State}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/codecvt/codecvt | constructs a new codecvt facet }}
{{dsc prot mem dtor | cpp/locale/codecvt/~codecvt | destructs a codecvt facet }}
{{dsc inc | cpp/locale/codecvt/dsc out}}
{{dsc inc | cpp/locale/codecvt/dsc in}}
{{dsc inc | cpp/locale/codecvt/dsc unshift}}
{{dsc inc | cpp/locale/codecvt/dsc encoding}}
{{dsc inc | cpp/locale/codecvt/dsc always_noconv}}
{{dsc inc | cpp/locale/codecvt/dsc length}}
{{dsc inc | cpp/locale/codecvt/dsc max_length}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc | {{tt|id}} {{mark|static}} | {{lc|std::locale::id}} }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc inc | cpp/locale/codecvt/dsc do_unshift}}
{{dsc inc | cpp/locale/codecvt/dsc do_encoding}}
{{dsc inc | cpp/locale/codecvt/dsc do_always_noconv}}
{{dsc inc | cpp/locale/codecvt/dsc do_length}}
{{dsc inc | cpp/locale/codecvt/dsc do_max_length}}
{{dsc end}}

{{cpp/locale/codecvt_base/inherit}}

===Example===

{{example
 | The following examples reads a UTF-8 file using a locale which implements UTF-8 conversion in codecvt&lt;wchar_t, char, mbstate_t&gt; and converts a UTF-8 string to UTF-16 using one of the standard specializations of std::codecvt
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;iomanip&gt;
#include &lt;codecvt&gt;

// utility wrapper to adapt locale-bound facets for wstring/wbuffer convert
template&lt;class Facet&gt;
struct deletable_facet : Facet
{
    template&lt;class ...Args&gt;
    deletable_facet(Args&amp;&amp; ...args) : Facet(std::forward&lt;Args&gt;(args)...) {}
    ~deletable_facet() {}
};

int main()
{
    // UTF-8 narrow multibyte encoding
    std::string data = u8&quot;z\u00df\u6c34\U0001f34c&quot;;
                       // or u8&quot;zß水🍌&quot;
                       // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c&quot;;

    std::ofstream(&quot;text.txt&quot;) &lt;&lt; data;

    // using system-supplied locale's codecvt facet
    std::wifstream fin(&quot;text.txt&quot;);
    // reading from wifstream will use codecvt&lt;wchar_t, char, mbstate_t&gt;
    // this locale's codecvt converts UTF-8 to UCS4 (on systems such as Linux)
    fin.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    std::cout &lt;&lt; &quot;The UTF-8 file contains the following UCS4 code points: \n&quot;;
    for (wchar_t c; fin &gt;&gt; c; )
        std::cout &lt;&lt; &quot;U+&quot; &lt;&lt; std::hex &lt;&lt; std::setw(4) &lt;&lt; std::setfill('0') &lt;&lt; c &lt;&lt; '\n';

    // using standard (locale-independent) codecvt facet
    std::wstring_convert&lt;
        deletable_facet&lt;std::codecvt&lt;char16_t, char, std::mbstate_t&gt;&gt;, char16_t&gt; conv16;
    std::u16string str16 = conv16.from_bytes(data);

    std::cout &lt;&lt; &quot;The UTF-8 file contains the following UTF-16 code points: \n&quot;;
    for (char16_t c : str16)
        std::cout &lt;&lt; &quot;U+&quot; &lt;&lt; std::hex &lt;&lt; std::setw(4) &lt;&lt; std::setfill('0') &lt;&lt; c &lt;&lt; '\n';
}
 | output=
The UTF-8 file contains the following UCS4 code points:
U+007a
U+00df
U+6c34
U+1f34c
The UTF-8 file contains the following UTF-16 code points:
U+007a
U+00df
U+6c34
U+d83c
U+df4c
}}

===See also===
{{cpp/locale/unicode string conversions}}
{{dsc begin}}
{{dsc tclass | cpp/locale/codecvt_base | defines character conversion errors }}
{{dsc tclass | cpp/locale/codecvt_byname | creates a codecvt facet for the named locale }}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf16}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc end}}

[[de:cpp/locale/codecvt]]
[[es:cpp/locale/codecvt]]
[[fr:cpp/locale/codecvt]]
[[it:cpp/locale/codecvt]]
[[ja:cpp/locale/codecvt]]
[[pt:cpp/locale/codecvt]]
[[ru:cpp/locale/codecvt]]
[[zh:cpp/locale/codecvt]]</text>
      <sha1>0at1josit1ivb4gi02pob8pj8gq7hce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt base</title>
    <ns>0</ns>
    <id>3605</id>
    <revision>
      <id>58068</id>
      <parentid>49987</parentid>
      <timestamp>2013-06-01T06:07:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1370">{{cpp/title | codecvt_base}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class codecvt_base;
}}
{{dcl end}}

The class {{lc|std::codecvt_base}} provides the conversion status constants which are inherited and used by the {{lc|std::codecvt}} facets.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|enum result { ok, partial, error, noconv };}} | Unscoped enumeration type}}
{{dsc end}}

{{dsc begin}}
{{dsc hitem | Value | Explanation}}
{{dsc | {{tt|ok}}      | conversion was completed with no error}}
{{dsc | {{tt|partial}} | not all source characters were converted}}
{{dsc | {{tt|error}}   | encountered an invalid character}}
{{dsc | {{tt|noconv}}  | no conversion required, input and output types are the same}}
{{dsc end}}

===Notes===
The value {{lc|std::codecvt_base::partial}} is used to indicate that either the destination range is too short to receive the results of the conversion or the input is truncated in the middle of an otherwise valid multibyte character.

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc end}}

[[de:cpp/locale/codecvt base]]
[[es:cpp/locale/codecvt base]]
[[fr:cpp/locale/codecvt base]]
[[it:cpp/locale/codecvt base]]
[[ja:cpp/locale/codecvt base]]
[[pt:cpp/locale/codecvt base]]
[[ru:cpp/locale/codecvt base]]
[[zh:cpp/locale/codecvt base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt byname</title>
    <ns>0</ns>
    <id>2958</id>
    <revision>
      <id>90501</id>
      <parentid>62465</parentid>
      <timestamp>2017-02-27T18:03:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>same fix as for codecvt</comment>
      <text xml:space="preserve" bytes="2621">{{cpp/title | codecvt_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class InternT, class ExternT, class State &gt;
class codecvt_byname : public std::codecvt&lt;InternT, ExternT, State&gt;;
}}
{{dcl end}}

{{lc|std::codecvt_byname}} is a {{lc|std::codecvt}} facet which encapsulates multibyte/wide character conversion rules of a locale specified at its construction.

Four specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::codecvt_byname&lt;char, char, std::mbstate_t&gt;}} | identity conversion }}
{{dsc | {{c|std::codecvt_byname&lt;char16_t, char, std::mbstate_t&gt;}} | conversion between UTF-16 and UTF-8 {{mark since c++11}}}}
{{dsc | {{c|std::codecvt_byname&lt;char32_t, char, std::mbstate_t&gt;}} | conversion between UTF-32 and UTF-8 {{mark since c++11}}}}
{{dsc | {{c|std::codecvt_byname&lt;wchar_t, char, std::mbstate_t&gt;}} | locale-specific conversion between wide string and narrow character sets}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | codecvt_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | codecvt_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | codecvt_byname}}
{{include | cpp/locale/byname/destructor | codecvt_byname}}

{{cpp/locale/codecvt/inherit}}
{{cpp/locale/codecvt_base/inherit}}

===Example===
{{example
 | This example demonstrates reading a GB18030-encoded file using the codecvt facet from a GB18030-aware locale
 | code=
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;

int main()
{
    // GB18030 narrow multibyte encoding
    std::ofstream(&quot;text.txt&quot;) &lt;&lt; &quot;\x7a&quot;              // letter 'z', U+007a
                                 &quot;\x81\x30\x89\x38&quot;  // letter 'ß', U+00df
                                 &quot;\xcb\xae&quot;          // CJK ideogram '水' (water), U+6c34
                                 &quot;\x94\x32\xbc\x35&quot;; // musical sign '𝄋' (segno), U+1d10b
    std::wifstream fin(&quot;text.txt&quot;);
    fin.imbue(std::locale(fin.getloc(),
              new std::codecvt_byname&lt;wchar_t, char, std::mbstate_t&gt;(&quot;zh_CN.gb18030&quot;)));
    for (wchar_t c; fin.get(c); )
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';
}
 | output=
0x7a
0xdf
0x6c34
0x1d10b
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc end}}

[[de:cpp/locale/codecvt byname]]
[[es:cpp/locale/codecvt byname]]
[[fr:cpp/locale/codecvt byname]]
[[it:cpp/locale/codecvt byname]]
[[ja:cpp/locale/codecvt byname]]
[[pt:cpp/locale/codecvt byname]]
[[ru:cpp/locale/codecvt byname]]
[[zh:cpp/locale/codecvt byname]]</text>
      <sha1>m09ujcf8se4fzjdqr3xiprphm8p6ioc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt mode</title>
    <ns>0</ns>
    <id>2924</id>
    <revision>
      <id>90616</id>
      <parentid>62445</parentid>
      <timestamp>2017-03-06T16:47:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt (also the header here was wrong)</comment>
      <text xml:space="preserve" bytes="2563">{{cpp/title | codecvt_mode}}
{{cpp/locale/navbar}}
{{ddcl | since=c++11 | notes={{mark|deprecated in C++17}}| header=codecvt | 1=
enum codecvt_mode {
    consume_header = 4,
    generate_header = 2,
    little_endian = 1
};
}}

The facets {{lc|std::codecvt_utf8}}, {{lc|std::codecvt_utf16}}, and {{lc|std::codecvt_utf8_utf16}} accept an optional value of type {{lc|std::codecvt_mode}} as a template argument, which specifies optional features of the unicode string conversion.

===Constants===

{{dsc begin}}
{{dsc header | locale}}
{{dsc hitem | Value | Meaning }}
{{dsc | {{tt|little_endian}}  | assume the input is in little-endian byte order (applies to UTF-16 input only, the default is big-endian) }}
{{dsc | {{tt|consume_header}} | consume the byte order mark, if present at the start of input sequence, and (in case of UTF-16), rely on the byte order it specifies for decoding the rest of the input}}
{{dsc | {{tt|generate_header}} | output the byte order mark at the start of the output sequence }}
{{dsc end}}

The recognized byte order marks are:
{{dsc begin}}
{{dsc | {{tt|0xfe 0xff}} | UTF-16 big-endian }}
{{dsc | {{tt|0xff 0xfe}} | UTF-16 little-endian }}
{{dsc | {{tt|0xef 0xbb 0xbf}} | UTF-8 (no effect on endianness)}}
{{dsc end}}

If {{lc|std::consume_header}} is not selected when reading a file beginning with byte order mark, the Unicode character U+FEFF (Zero width non-breaking space) will be read as the first character of the string content.

===Example===
{{example
 | The following example demonstrates consuming the UTF-8 BOM
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;

int main()
{
    // UTF-8 data with BOM
    std::ofstream(&quot;text.txt&quot;) &lt;&lt; u8&quot;\ufeffz\u6c34\U0001d10b&quot;;
    // read the UTF8 file, skipping the BOM
    std::wifstream fin(&quot;text.txt&quot;);
    fin.imbue(std::locale(fin.getloc(),
                          new std::codecvt_utf8&lt;wchar_t, 0x10ffff, std::consume_header&gt;));
    for (wchar_t c; fin.get(c); )
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';
}
 | output=
0x7a
0x6c34
0x1d10b
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf16}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc end}}

[[de:cpp/locale/codecvt mode]]
[[es:cpp/locale/codecvt mode]]
[[fr:cpp/locale/codecvt mode]]
[[it:cpp/locale/codecvt mode]]
[[ja:cpp/locale/codecvt mode]]
[[pt:cpp/locale/codecvt mode]]
[[ru:cpp/locale/codecvt mode]]
[[zh:cpp/locale/codecvt mode]]</text>
      <sha1>r62x00hzhnp7ei3574949z24uvyx37m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt utf16</title>
    <ns>0</ns>
    <id>2910</id>
    <revision>
      <id>90617</id>
      <parentid>64475</parentid>
      <timestamp>2017-03-06T16:47:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="3558">{{cpp/title | codecvt_utf16 }}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | codecvt }}
{{dcl | since=c++11 | notes={{mark|deprecated in C++17}}| 1=
template&lt; class Elem,
          unsigned long Maxcode = 0x10ffff,
          std::codecvt_mode Mode = (std::codecvt_mode)0 &gt;
class codecvt_utf16 : public std::codecvt&lt;Elem, char, std::mbstate_t&gt;;;
}}
{{dcl end}}

{{lc|std::codecvt_utf16}} is a {{lc|std::codecvt}} facet which encapsulates conversion between a UTF-16 encoded byte string and UCS2 or UCS4 character string (depending on the type of {{tt|Elem}}). This codecvt facet can be used to read and write UTF-16 files in binary mode. 

===Template Parameters===
{{par begin}}
{{par | Elem | either {{c|char16_t}}, {{c|char32_t}}, or {{c|wchar_t}} }}
{{par | Maxcode | the largest value of {{tt|Elem}} that this facet will read or write without error }}
{{par | Mode | a constant of type {{lc|std::codecvt_mode}} }}
{{par end}} 

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/codecvt_utf16 | inlinemem=true | constructs a new {{tt|codecvt_utf16}} facet }}
{{dsc mem dtor | cpp/locale/codecvt_utf16 | inlinemem=true | destroys a {{tt|codecvt_utf16}} facet }}
{{dsc end}}

{{member | {{small|std::codecvt_utf16::}}codecvt_utf16 |
{{dcl begin}}
{{dcl | 1=
explicit codecvt_utf16( std::size_t refs = 0 );
}}
{{dcl end}}

Constructs a new {{tt|std::codecvt_utf16}} facet, passes the initial reference counter {{tt|refs}} to the base class.

===Parameters===
{{par begin}}
{{par | refs | the number of references that link to the facet}}
{{par end}}
}}

{{member | {{small|std::codecvt_utf16::}}~codecvt_utf16 |
{{dcl begin}}
{{dcl | 1=
~codecvt_utf16();
}}
{{dcl end}}

Destroys the facet. Unlike the locale-managed facets, this facet's destructor is public.
}}

{{cpp/locale/codecvt/inherit}}
{{cpp/locale/codecvt_base/inherit}}

===Example===

{{example
 | The following example demonstrates decoding of UTF-16le file on a system with 32-bit {{c|wchar_t}}. On a system with 16-bit {{c|wchar_t}}, decoding of the third character will fail because {{c|std::codecvt_utf16&lt;char16_t&gt;}} produces UCS2, not UTF-16.
 | code=
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;

void prepare_file()
{
    // UTF-16le data (if host system is little-endian)
    char16_t utf16le[4] ={0x007a,          // latin small letter 'z' U+007a
                          0x6c34,          // CJK ideograph &quot;water&quot;  U+6c34
                          0xd834, 0xdd0b}; // musical sign segno U+1d10b
    // store in a file
    std::ofstream fout(&quot;text.txt&quot;);
    fout.write( reinterpret_cast&lt;char*&gt;(utf16le), sizeof utf16le);
}

int main()
{
    prepare_file();
    // open as a byte stream
    std::wifstream fin(&quot;text.txt&quot;, std::ios::binary);
    // apply facet
    fin.imbue(std::locale(fin.getloc(),
       new std::codecvt_utf16&lt;wchar_t, 0x10ffff, std::little_endian&gt;));

    for (wchar_t c; fin.get(c); )
            std::cout &lt;&lt; std::showbase &lt;&lt; std::hex &lt;&lt; c &lt;&lt; '\n';
}
 | output=
0x7a
0x6c34
0x1d10b
}}

===See also===
{{cpp/locale/unicode string conversions}}
{{dsc begin}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc inc | cpp/locale/dsc codecvt_mode}}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc end}}

[[de:cpp/locale/codecvt utf16]]
[[es:cpp/locale/codecvt utf16]]
[[fr:cpp/locale/codecvt utf16]]
[[it:cpp/locale/codecvt utf16]]
[[ja:cpp/locale/codecvt utf16]]
[[pt:cpp/locale/codecvt utf16]]
[[ru:cpp/locale/codecvt utf16]]
[[zh:cpp/locale/codecvt utf16]]</text>
      <sha1>4vhprtgy3ycoeuyjnjxbg7jgxupcgix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt utf8</title>
    <ns>0</ns>
    <id>2900</id>
    <revision>
      <id>90614</id>
      <parentid>64474</parentid>
      <timestamp>2017-03-06T16:46:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="3781">{{cpp/title | codecvt_utf8 }}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | codecvt }}
{{dcl | since=c++11 | notes={{mark|deprecated in C++17}} | 1=
template&lt; 
    class Elem,
    unsigned long Maxcode = 0x10ffff,
    std::codecvt_mode Mode = (std::codecvt_mode)0 
&gt; class codecvt_utf8 : public std::codecvt&lt;Elem, char, std::mbstate_t&gt;;
}}
{{dcl end}}

{{lc|std::codecvt_utf8}} is a {{lc|std::codecvt}} facet which encapsulates conversion between a UTF-8 encoded byte string and UCS2 or UCS4 character string (depending on the type of {{tt|Elem}}). This codecvt facet can be used to read and write UTF-8 files, both text and binary. 

===Template Parameters===
{{par begin}}
{{par | Elem | either {{c|char16_t}}, {{c|char32_t}}, or {{c|wchar_t}} }}
{{par | Maxcode | the largest value of {{tt|Elem}} that this facet will read or write without error }}
{{par | Mode | a constant of type {{lc|std::codecvt_mode}} }}
{{par end}} 

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/codecvt_utf8 | inlinemem=true | constructs a new {{tt|codecvt_utf8}} facet }}
{{dsc mem dtor | cpp/locale/codecvt_utf8 | inlinemem=true | destroys a {{tt|codecvt_utf8}} facet }}
{{dsc end}}

{{member | {{small|std::codecvt_utf8::}}codecvt_utf8 |
{{dcl begin}}
{{dcl | 1=
explicit codecvt_utf8( std::size_t refs = 0 );
}}
{{dcl end}}

Constructs a new {{tt|std::codecvt_utf8}} facet, passes the initial reference counter {{tt|refs}} to the base class.

===Parameters===
{{par begin}}
{{par | refs | the number of references that link to the facet}}
{{par end}}
}}

{{member | {{small|std::codecvt_utf8::}}~codecvt_utf8 |
{{dcl begin}}
{{dcl | 1=
~codecvt_utf8();
}}
{{dcl end}}

Destroys the facet. Unlike the locale-managed facets, this facet's destructor is public.
}}

{{cpp/locale/codecvt/inherit}}
{{cpp/locale/codecvt_base/inherit}}

===Example===

{{example
 | The following example demonstrates the difference between UCS2/UTF-8 and UTF-16/UTF-8 conversions: the third character in the string is not a valid UCS2 character.
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;

int main()
{
    // UTF-8 data. The character U+1d10b, musical sign segno, does not fit in UCS2
    std::string utf8 = u8&quot;z\u6c34\U0001d10b&quot;;

    // the UTF-8 / UTF-16 standard conversion facet
    std::wstring_convert&lt;std::codecvt_utf8_utf16&lt;char16_t&gt;, char16_t&gt; utf16conv;
    std::u16string utf16 = utf16conv.from_bytes(utf8);
    std::cout &lt;&lt; &quot;UTF16 conversion produced &quot; &lt;&lt; utf16.size() &lt;&lt; &quot; code points:\n&quot;;
    for (char16_t c : utf16)
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';

    // the UTF-8 / UCS2 standard conversion facet
    std::wstring_convert&lt;std::codecvt_utf8&lt;char16_t&gt;, char16_t&gt; ucs2conv;
    try {
        std::u16string ucs2 = ucs2conv.from_bytes(utf8);
    } catch(const std::range_error&amp; e) {
        std::u16string ucs2 = ucs2conv.from_bytes(utf8.substr(0, ucs2conv.converted()));
        std::cout &lt;&lt; &quot;UCS2 failed after producing &quot; &lt;&lt; std::dec &lt;&lt; ucs2.size()&lt;&lt;&quot; characters:\n&quot;;
        for (char16_t c : ucs2)
            std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';
    }
}
 | output=
UTF16 conversion produced 4 code points:
0x7a
0x6c34
0xd834
0xdd0b
UCS2 failed after producing 2 characters:
0x7a
0x6c34
}}

===See also===
{{cpp/locale/unicode string conversions}}
{{dsc begin}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc inc | cpp/locale/dsc codecvt_mode}}
{{dsc inc | cpp/locale/dsc codecvt_utf16}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc end}}

[[de:cpp/locale/codecvt utf8]]
[[es:cpp/locale/codecvt utf8]]
[[fr:cpp/locale/codecvt utf8]]
[[it:cpp/locale/codecvt utf8]]
[[ja:cpp/locale/codecvt utf8]]
[[pt:cpp/locale/codecvt utf8]]
[[ru:cpp/locale/codecvt utf8]]
[[zh:cpp/locale/codecvt utf8]]</text>
      <sha1>ren5v8h9n42ybo3aoulauyhdopfdn8v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt utf8 utf16</title>
    <ns>0</ns>
    <id>2911</id>
    <revision>
      <id>91309</id>
      <parentid>90781</parentid>
      <timestamp>2017-03-31T17:47:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>uh, this said &quot;this can be used to read and write files&quot; and in the next sentence &quot;cannot be used wit basic_filebuf&quot;.. let's not self-contradict</comment>
      <text xml:space="preserve" bytes="3932">{{cpp/title | codecvt_utf8_utf16 }}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | codecvt }}
{{dcl | since=c++11 | notes={{mark|deprecated in C++17}}| 1=
template&lt; class Elem,
          unsigned long Maxcode = 0x10ffff,
          std::codecvt_mode Mode = (std::codecvt_mode)0 &gt;
class codecvt_utf8_utf16 : public std::codecvt&lt;Elem, char, std::mbstate_t&gt;;
}}
{{dcl end}}

{{lc|std::codecvt_utf8_utf16}} is a {{lc|std::codecvt}} facet which encapsulates conversion between a UTF-8 encoded byte string and UTF-16 encoded character string. If {{tt|Elem}} is a 32-bit type, one UTF-16 code unit will be stored in each 32-bit character of the output sequence.

This is an N:M conversion facet, and cannot be used with {{lc|std::basic_filebuf}} (which only permits 1:N conversions, such as UTF-32/UTF-8, between the internal and the external encodings). This facet can be used with {{lc|std::wstring_convert}}.

===Template Parameters===
{{par begin}}
{{par | Elem | either {{c|char16_t}}, {{c|char32_t}}, or {{c|wchar_t}} }}
{{par | Maxcode | the largest value of {{tt|Elem}} that this facet will read or write without error }}
{{par | Mode | a constant of type {{lc|std::codecvt_mode}} }}
{{par end}} 

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/codecvt_utf8_utf16 | inlinemem=true | constructs a new {{tt|codecvt_utf8_utf16}} facet }}
{{dsc mem dtor | cpp/locale/codecvt_utf8_utf16 | inlinemem=true | destroys a {{tt|codecvt_utf8_utf16}} facet }}
{{dsc end}}

{{member | {{small|std::codecvt_utf8_utf16::}}codecvt_utf8_utf16 |
{{dcl begin}}
{{dcl | 1=
explicit codecvt_utf8_utf16( std::size_t refs = 0 );
}}
{{dcl end}}

Constructs a new {{tt|std::codecvt_utf8_utf16}} facet, passes the initial reference counter {{tt|refs}} to the base class.

===Parameters===
{{par begin}}
{{par | refs | the number of references that link to the facet}}
{{par end}}
}}

{{member | {{small|std::codecvt_utf8_utf16::}}~codecvt_utf8_utf16 |
{{dcl begin}}
{{dcl | 1=
~codecvt_utf8_utf16();
}}
{{dcl end}}

Destroys the facet. Unlike the locale-managed facets, this facet's destructor is public.
}}

{{cpp/locale/codecvt/inherit}}
{{cpp/locale/codecvt_base/inherit}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;codecvt&gt;
#include &lt;cassert&gt;
#include &lt;locale&gt;

int main()
{
    std::string u8 = u8&quot;z\u00df\u6c34\U0001f34c&quot;;
    std::u16string u16 = u&quot;z\u00df\u6c34\U0001f34c&quot;;
        
    // UTF-8 to UTF-16/char16_t
    std::u16string u16_conv = std::wstring_convert&lt;
        std::codecvt_utf8_utf16&lt;char16_t&gt;, char16_t&gt;{}.from_bytes(u8);
    assert(u16 == u16_conv);
    std::cout &lt;&lt; &quot;UTF-8 to UTF-16 conversion produced &quot;
              &lt;&lt; u16_conv.size() &lt;&lt; &quot; code units:\n&quot;;
    for (char16_t c : u16_conv)
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; ' ';

    // UTF-16/char16_t to UTF-8
    std::string u8_conv = std::wstring_convert&lt;
        std::codecvt_utf8_utf16&lt;char16_t&gt;, char16_t&gt;{}.to_bytes(u16);
    assert(u8 == u8_conv);
    std::cout &lt;&lt; &quot;\nUTF-16 to UTF-8 conversion produced &quot;
              &lt;&lt; std::dec &lt;&lt; u8_conv.size() &lt;&lt; &quot; bytes:\n&quot; &lt;&lt; std::hex;
    for (char c : u8_conv)
        std::cout &lt;&lt; +(unsigned char)c &lt;&lt; ' ';
}
 | output=
UTF-8 to UTF-16 conversion produced 5 code units:
0x7a 0xdf 0x6c34 0xd83c 0xdf4c 
UTF-16 to UTF-8 conversion produced 10 bytes:
0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c 
}}

===See also===
{{cpp/locale/unicode string conversions}}
{{dsc begin}}
{{dsc inc | cpp/locale/dsc codecvt}}
{{dsc inc | cpp/locale/dsc codecvt_mode}}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf16}}
{{dsc end}}

[[de:cpp/locale/codecvt utf8 utf16]]
[[es:cpp/locale/codecvt utf8 utf16]]
[[fr:cpp/locale/codecvt utf8 utf16]]
[[it:cpp/locale/codecvt utf8 utf16]]
[[ja:cpp/locale/codecvt utf8 utf16]]
[[pt:cpp/locale/codecvt utf8 utf16]]
[[ru:cpp/locale/codecvt utf8 utf16]]
[[zh:cpp/locale/codecvt utf8 utf16]]</text>
      <sha1>g9gowchf34mjzaozz1vxxsqnxsqgils</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/always noconv</title>
    <ns>0</ns>
    <id>5170</id>
    <revision>
      <id>91418</id>
      <parentid>85706</parentid>
      <timestamp>2017-03-31T19:43:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2231">{{cpp/codecvt/title|always_noconv, do_always_noconv}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
bool always_noconv() const;
}}
{{dcl | num=2 | 1=
protected:
virtual bool do_always_noconv() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_always_noconv}} of the most derived class.

@2@ Returns {{c|true}} if both {{lc|do_in()}} and {{lc|do_out()}} return {{tt|std::codecvt_base::noconv}} for all valid inputs.

===Return value===
{{c|true}} if this conversion facet performs no conversions, {{c|false}} otherwise.

The non-converting specialization {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} returns {{c|true}}

===Notes===
This function may be used e.g. in the implementation of {{lc|std::basic_filebuf::underflow}} and {{lc|std::basic_filebuf::overflow}} to use bulk character copy instead of calling {{lc|std::codecvt::in}} or {{lc|std::codecvt::out}} if it is known that the locale imbued in the {{lc|std::basic_filebuf}} does not perform any conversions.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;

int main()
{
    std::cout &lt;&lt; &quot;The non-converting char&lt;-&gt;char codecvt::always_noconv() returns &quot; 
              &lt;&lt; std::boolalpha
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;char, char, std::mbstate_t&gt;&gt;(
                    std::locale()
                 ).always_noconv() &lt;&lt; &quot;\n&quot;
              &lt;&lt; &quot;while wchar_t&lt;-&gt;char codecvt::always_noconv() returns &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(
                    std::locale()
                 ).always_noconv() &lt;&lt; &quot;\n&quot;;

}
 | output=
The non-converting char&lt;-&gt;char codecvt::always_noconv() returns true
while wchar_t&lt;-&gt;char codecvt::always_noconv() returns false
}}

[[de:cpp/locale/codecvt/always noconv]]
[[es:cpp/locale/codecvt/always noconv]]
[[fr:cpp/locale/codecvt/always noconv]]
[[it:cpp/locale/codecvt/always noconv]]
[[ja:cpp/locale/codecvt/always noconv]]
[[pt:cpp/locale/codecvt/always noconv]]
[[ru:cpp/locale/codecvt/always noconv]]
[[zh:cpp/locale/codecvt/always noconv]]</text>
      <sha1>hbzqodyurgxkggvod5abvj8h6bm7h5a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/codecvt</title>
    <ns>0</ns>
    <id>4383</id>
    <revision>
      <id>43797</id>
      <parentid>15732</parentid>
      <timestamp>2012-11-03T03:52:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="313">{{cpp/locale/facet/constructor|codecvt}}

[[de:cpp/locale/codecvt/codecvt]]
[[es:cpp/locale/codecvt/codecvt]]
[[fr:cpp/locale/codecvt/codecvt]]
[[it:cpp/locale/codecvt/codecvt]]
[[ja:cpp/locale/codecvt/codecvt]]
[[pt:cpp/locale/codecvt/codecvt]]
[[ru:cpp/locale/codecvt/codecvt]]
[[zh:cpp/locale/codecvt/codecvt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/do always noconv</title>
    <ns>0</ns>
    <id>9458</id>
    <redirect title="cpp/locale/codecvt/always noconv" />
    <revision>
      <id>40292</id>
      <timestamp>2012-10-12T18:42:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/codecvt/do always noconv]] to [[cpp/locale/codecvt/always noconv]]</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/locale/codecvt/always noconv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/do encoding</title>
    <ns>0</ns>
    <id>9459</id>
    <redirect title="cpp/locale/codecvt/encoding" />
    <revision>
      <id>40294</id>
      <timestamp>2012-10-12T18:42:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/codecvt/do encoding]] to [[cpp/locale/codecvt/encoding]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[cpp/locale/codecvt/encoding]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/do in</title>
    <ns>0</ns>
    <id>9461</id>
    <redirect title="cpp/locale/codecvt/in" />
    <revision>
      <id>40298</id>
      <timestamp>2012-10-12T18:42:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/codecvt/do in]] to [[cpp/locale/codecvt/in]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/locale/codecvt/in]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/do length</title>
    <ns>0</ns>
    <id>9457</id>
    <redirect title="cpp/locale/codecvt/length" />
    <revision>
      <id>40290</id>
      <timestamp>2012-10-12T18:42:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/codecvt/do length]] to [[cpp/locale/codecvt/length]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/locale/codecvt/length]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/do max length</title>
    <ns>0</ns>
    <id>9456</id>
    <redirect title="cpp/locale/codecvt/max length" />
    <revision>
      <id>40288</id>
      <timestamp>2012-10-12T18:42:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/codecvt/do max length]] to [[cpp/locale/codecvt/max length]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/locale/codecvt/max length]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/do out</title>
    <ns>0</ns>
    <id>9462</id>
    <redirect title="cpp/locale/codecvt/out" />
    <revision>
      <id>40300</id>
      <timestamp>2012-10-12T18:42:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/codecvt/do out]] to [[cpp/locale/codecvt/out]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/locale/codecvt/out]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/do unshift</title>
    <ns>0</ns>
    <id>9460</id>
    <redirect title="cpp/locale/codecvt/unshift" />
    <revision>
      <id>40296</id>
      <timestamp>2012-10-12T18:42:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/codecvt/do unshift]] to [[cpp/locale/codecvt/unshift]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/locale/codecvt/unshift]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/encoding</title>
    <ns>0</ns>
    <id>5175</id>
    <revision>
      <id>91375</id>
      <parentid>80235</parentid>
      <timestamp>2017-03-31T19:41:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2468">{{cpp/codecvt/title|encoding, do_encoding}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
int encoding() const;
}}
{{dcl | num=2 | 1=
protected:
virtual int do_encoding() const;
}}
{{dcl end}}

@1@ public member function, calls the member function {{tt|do_encoding}} of the most derived class.

@2@ if the encoding represented by this codecvt facet maps each internal character to the same, constant number of external characters, returns that number. If the encoding is variable-length (e.g. UTF-8 or UTF-16), returns {{c|0}}. If the encoding is state-dependent, returns {{c|-1}}.

===Return value===
The exact number of {{tt|externT}} characters that correspond to one {{tt|internT}} character, if constant. {{c|0}} if the number varies, {{c|-1}} if the encoding is state-dependent.

The non-converting specialization {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} returns {{c|1}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;

int main()
{
    std::cout &lt;&lt; &quot;en_US.utf8 is a variable-length encoding, encoding() returns &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(
                    std::locale(&quot;en_US.utf8&quot;)
              ).encoding() &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;zh_CN.gb18030 is also variable-length, encoding() == &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(
                    std::locale(&quot;zh_CN.gb18030&quot;)
              ).encoding() &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;ru_RU.koi8r is a single-byte encoding encoding() == &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(
                    std::locale(&quot;ru_RU.koi8r&quot;)
              ).encoding() &lt;&lt; '\n';
}
 | output=
en_US.utf8 is a variable-length encoding, encoding() returns 0
zh_CN.gb18030 is also variable-length, encoding() == 0
ru_RU.koi8r is a single-byte encoding encoding() == 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc MB_CUR_MAX}}
{{dsc inc | cpp/locale/codecvt/dsc do_max_length}}
{{dsc end}}

[[de:cpp/locale/codecvt/encoding]]
[[es:cpp/locale/codecvt/encoding]]
[[fr:cpp/locale/codecvt/encoding]]
[[it:cpp/locale/codecvt/encoding]]
[[ja:cpp/locale/codecvt/encoding]]
[[pt:cpp/locale/codecvt/encoding]]
[[ru:cpp/locale/codecvt/encoding]]
[[zh:cpp/locale/codecvt/encoding]]</text>
      <sha1>68p9ok3k5o35s9o4cmhi4yru8ewyuuy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/in</title>
    <ns>0</ns>
    <id>5181</id>
    <revision>
      <id>80237</id>
      <parentid>63164</parentid>
      <timestamp>2015-08-01T12:20:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing virtual</comment>
      <text xml:space="preserve" bytes="4068">{{cpp/codecvt/title|in|do_in}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
result in( StateT&amp; state,
           const ExternT* from,
           const ExternT* from_end,
           const ExternT*&amp; from_next,
           InternT* to,
           InternT* to_end,
           InternT*&amp; to_next ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual result do_in( StateT&amp; state,
                      const ExternT* from,
                      const ExternT* from_end,
                      const ExternT*&amp; from_next,
                      InternT* to,
                      InternT* to_end,
                      InternT*&amp; to_next ) const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_in}} of the most derived class.

@2@ If this {{tt|codecvt}} facet defines a conversion, translates the external characters from the source range {{tt|[from, from_end)}} to internal characters, placing the results in the subsequent locations starting at {{tt|to}}. Converts no more than {{c|from_end - from}} external characters and writes no more than {{c|to_end - to}} internal characters. Leaves {{tt|from_next}} and {{tt|to_next}} pointing one beyond the last element successfully converted.

If this {{tt|codecvt}} facet does not define a conversion, no characters are converted. {{tt|to_next}} is set to be equal to {{tt|to}}, {{tt|state}} is unchanged, and {{lc|std::codecvt_base::noconv}} is returned.

===Return value===
A value of type {{lc|std::codecvt_base::result}}, indicating the success status as follows:
{{dsc begin}}
{{dsc | {{tt|ok}} | conversion completed}}
{{dsc | {{tt|partial}} | not enough space in the output buffer or unexpected end of source buffer}}
{{dsc | {{tt|error}} | encountered a character that could not be converted}}
{{dsc | {{tt|noconv}} | this facet is non-converting, no output written}}
{{dsc end}}

The non-converting specialization {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} always returns {{lc|std::codecvt_base::noconv}}

===Notes===
Requires that {{c|1=from &lt;= from_end &amp;&amp; to &lt;= to_end}} and that {{tt|state}} either representing the initial shift state or obtained by converting the preceding characters in the sequence.

The effect on {{tt|state}} is deliberately unspecified. In standard facets, it is used to maintain shift state like when calling {{lc|std::mbsrtowcs}}, and is therefore updated to reflect the conversion state after the last processed external character, but a user-defined facet is free to use it to maintain any other state, e.g. count the number of special characters encountered.

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    auto&amp; f = std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(std::locale());
    std::string external = u8&quot;z\u00df\u6c34\U0001d10b&quot;; // or u8&quot;zß水𝄋&quot;
                          // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;

    // note that the following can be done with wstring_convert
    std::mbstate_t mb = std::mbstate_t(); // initial shift state
    std::wstring internal(external.size(), '\0'); 
    const char* from_next;
    wchar_t* to_next;
    f.in(mb, &amp;external[0], &amp;external[external.size()], from_next,
             &amp;internal[0], &amp;internal[internal.size()], to_next);
    // error checking skipped for brevity
    internal.resize(to_next - &amp;internal[0]);

    std::wcout &lt;&lt; L&quot;The string in wide encoding: &quot; &lt;&lt; internal &lt;&lt; '\n';
}
 | output=
The string in wide encoding: zß水𝄋
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc underflow}}
{{dsc inc | cpp/locale/wstring_convert/dsc from_bytes}}
{{dsc inc | cpp/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc end}}

[[de:cpp/locale/codecvt/in]]
[[es:cpp/locale/codecvt/in]]
[[fr:cpp/locale/codecvt/in]]
[[it:cpp/locale/codecvt/in]]
[[ja:cpp/locale/codecvt/in]]
[[pt:cpp/locale/codecvt/in]]
[[ru:cpp/locale/codecvt/in]]
[[zh:cpp/locale/codecvt/in]]</text>
      <sha1>qeki54766ik5bf2aj1a99v6cndxtfr9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/length</title>
    <ns>0</ns>
    <id>5163</id>
    <revision>
      <id>80233</id>
      <parentid>71513</parentid>
      <timestamp>2015-08-01T12:19:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2545">{{cpp/codecvt/title|length, do_length}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
int length( StateT&amp; state,
            const ExternT* from,
            const ExternT* from_end,
            std::size_t max ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual int do_length( StateT&amp; state,
                       const ExternT* from,
                       const ExternT* from_end,
                       std::size_t max ) const;
}}
{{dcl end}}

@1@ public member function, calls the member function {{tt|do_length}} of the most derived class.

@2@ attempts to convert the {{tt|externT}} characters from the character array defined by {{tt|[from, from_end)}}, given initial conversion state {{tt|state}}, to at most {{tt|max}} {{tt|internT}} characters, and returns the number of {{tt|externT}} characters that such conversion would consume. Modifies {{tt|state}} as if by executing {{c|do_in(state, from, from_end, from, to, to+max, to)}} for some imaginary {{tt|[to, to+max)}} output buffer.

===Return value===
The number of {{tt|externT}} characters that would be consumed if converted by {{lc|do_in()}} until either all {{c|from_end-from}} characters were consumed or {{tt|max}} {{tt|internT}} characters were produced, or a conversion error occurred.

The non-converting specialization {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} returns {{c|std::min(max, from_end-from)}}

===Example===

{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    //  narrow multibyte encoding
    std::string s = &quot;z\u00df\u6c34\U0001d10b&quot;; // or u8&quot;zß水𝄋&quot;
                      // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;
    std::mbstate_t mb = std::mbstate_t();
    std::cout &lt;&lt; &quot;Only the first &quot; &lt;&lt;
              std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(
                    std::locale(&quot;en_US.utf8&quot;)
              ).length(mb, &amp;s[0], &amp;s[s.size()], 2)
              &lt;&lt; &quot; bytes out of &quot; &lt;&lt; s.size() &lt;&lt; &quot; would be consumed &quot;
                 &quot; to produce the first 2 characters\n&quot;;
}
 | output=
Only the first 3 bytes out of 10 would be consumed to produce the first 2 characters
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc end}}

[[de:cpp/locale/codecvt/length]]
[[es:cpp/locale/codecvt/length]]
[[fr:cpp/locale/codecvt/length]]
[[it:cpp/locale/codecvt/length]]
[[ja:cpp/locale/codecvt/length]]
[[pt:cpp/locale/codecvt/length]]
[[ru:cpp/locale/codecvt/length]]
[[zh:cpp/locale/codecvt/length]]</text>
      <sha1>5yxvzpf2e1qbxvmyjkebzgyy2qk17et</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/max length</title>
    <ns>0</ns>
    <id>5166</id>
    <revision>
      <id>91570</id>
      <parentid>80232</parentid>
      <timestamp>2017-03-31T19:50:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2886">{{cpp/codecvt/title|max_length, do_max_length}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
int max_length() const;
}}
{{dcl | num=2 | 1=
protected:
virtual int do_max_length() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_max_length}} of the most derived class.

@2@ Returns the maximum value that {{c|do_length(state, from, from_end, 1)}} can return for any valid range {{tt|[from, from_end)}} and any valid {{tt|state}}.

===Return value===
The maximum number of {{tt|ExternT}} characters that could be consumed if converted by {{lc|in()}} to produce one {{tt|InternT}} character.

The non-converting specialization {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} returns {{c|1}}

===Notes===
If the encoding is state-dependent ({{c|1=encoding() == -1}}), then more than {{tt|max_length()}} external characters may be consumed to produce one internal character

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===

{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;codecvt&gt;

int main()
{
    std::cout &lt;&lt; &quot;In codecvt_utf8, the longest multibyte character is &quot;
              &lt;&lt; std::codecvt_utf8&lt;wchar_t&gt;().max_length() &lt;&lt; &quot; bytes long\n&quot;;

    std::cout &lt;&lt; &quot;In header-consuming codecvt_utf8, the longest multibyte character is &quot;
              &lt;&lt; std::codecvt_utf8&lt;wchar_t,
                                   0x10ffff,
                                   std::consume_header&gt;().max_length() &lt;&lt; &quot; bytes long\n&quot;;

    std::cout &lt;&lt; &quot;In this system's en_US.utf8, the longest multibyte character is &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(
                    std::locale(&quot;en_US.utf8&quot;)
              ).max_length() &lt;&lt; &quot; bytes long\n&quot;;

    std::cout &lt;&lt; &quot;In this system's zh_CN.gb18030, the longest multibyte character is &quot;
              &lt;&lt; std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(
                    std::locale(&quot;zh_CN.gb18030&quot;)
              ).max_length() &lt;&lt; &quot; bytes long\n&quot;;
}
 | output=
In codecvt_utf8, the longest multibyte character is 4 bytes long
In header-consuming codecvt_utf8, the longest multibyte character is 7 bytes long
In this system's en_US.utf8, the longest multibyte character is 6 bytes long
In this system's zh_CN.gb18030, the longest multibyte character is 4 bytes long
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc MB_CUR_MAX}}
{{dsc inc | cpp/locale/codecvt/dsc do_encoding}}
{{dsc end}}

[[de:cpp/locale/codecvt/max length]]
[[es:cpp/locale/codecvt/max length]]
[[fr:cpp/locale/codecvt/max length]]
[[it:cpp/locale/codecvt/max length]]
[[ja:cpp/locale/codecvt/max length]]
[[pt:cpp/locale/codecvt/max length]]
[[ru:cpp/locale/codecvt/max length]]
[[zh:cpp/locale/codecvt/max length]]</text>
      <sha1>059zy52vmi3kk1qryczsuw032lgynnn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/out</title>
    <ns>0</ns>
    <id>5179</id>
    <revision>
      <id>80238</id>
      <parentid>62444</parentid>
      <timestamp>2015-08-01T12:20:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing virtual</comment>
      <text xml:space="preserve" bytes="4746">{{cpp/codecvt/title|out, do_out}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
result out( StateT&amp; state,
            const InternT* from,
            const InternT* from_end,
            const InternT*&amp; from_next,
            ExternT* to,
            ExternT* to_end,
            ExternT*&amp; to_next ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual result do_out( StateT&amp; state,
                       const InternT* from,
                       const InternT* from_end,
                       const InternT*&amp; from_next,
                       ExternT* to,
                       ExternT* to_end,
                       ExternT*&amp; to_next ) const;
}}
{{dcl end}}

@1@ public member function, calls the member function {{tt|do_out}} of the most derived class.

@2@ If this {{tt|codecvt}} facet defines a conversion, translates the internal characters from the source range {{tt|[from, from_end)}} to external characters, placing the results in the subsequent locations starting at {{tt|to}}. Converts no more than {{c|from_end - from}} internal characters and writes no more than {{c|to_end - to}} external characters. Leaves {{tt|from_next}} and {{tt|to_next}} pointing one beyond the last element successfully converted.

If this {{tt|codecvt}} facet does not define a conversion, no characters are converted. {{tt|to_next}} is set to be equal to {{tt|to}}, {{tt|state}} is unchanged, and {{lc|std::codecvt_base::noconv}} is returned.

===Return value===
A value of type {{lc|std::codecvt_base::result}}, indicating the success status as follows:
{{dsc begin}}
{{dsc | {{tt|ok}} | conversion completed}}
{{dsc | {{tt|partial}} | not enough space in the output buffer or unexpected end of source buffer}}
{{dsc | {{tt|error}} | encountered a character that could not be converted}}
{{dsc | {{tt|noconv}} | this facet is non-converting, no output written}}
{{dsc end}}

The non-converting specialization {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} always returns {{lc|std::codecvt_base::noconv}}

===Notes===
Requires that {{c|1=from &lt;= from_end &amp;&amp; to &lt;= to_end}} and that {{tt|state}} either representing the initial shift state or obtained by converting the preceding characters in the sequence.

While {{tt|codecvt}} supports N:M conversions (e.g. UTF-16 to UTF-8, where two internal characters may be necessary to decide what external characters to output), {{lc|std::basic_filebuf}} can only use {{tt|codecvt}} facets that define a 1:N conversion, that is it must be able to process one internal character at a time when writing to a file.

When performing N:M conversions, this function may return {{lc|std::codecvt_base::partial}} after consuming all source characters ({{tt|from_next {{==}} from_end}}). This means that another internal character is needed to complete the conversion (e.g. when converting UTF-16 to UTF-8, if the last character in the source buffer is a high surrogate).

The effect on {{tt|state}} is deliberately unspecified. In standard facets, it is used to maintain shift state like when calling {{c|std::wcsrtombs}}, and is therefore updated to reflect the shift state after the last successfully converted character, but a user-defined facet is free to use it to maintain any other state, e.g. count the number of special characters encountered.

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    auto&amp; f = std::use_facet&lt;std::codecvt&lt;wchar_t, char, std::mbstate_t&gt;&gt;(std::locale());
    std::wstring internal = L&quot;z\u00df\u6c34\U0001d10b&quot;; // L&quot;zß水𝄋&quot;

    // note that the following can be done with wstring_convert
    std::mbstate_t mb = std::mbstate_t(); // initial shift state
    std::string external(internal.size() * f.max_length(), '\0'); 
    const wchar_t* from_next;
    char* to_next;
    f.out(mb, &amp;internal[0], &amp;internal[internal.size()], from_next,
              &amp;external[0], &amp;external[external.size()], to_next);
    // error checking skipped for brevity
    external.resize(to_next - &amp;external[0]);

    std::cout &lt;&lt; &quot;The string in narrow multibyte encoding: &quot; &lt;&lt; external &lt;&lt; '\n';
}
 | output=
The string in narrow multibyte encoding: zß水𝄋
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_filebuf/dsc overflow}}
{{dsc inc | cpp/locale/wstring_convert/dsc to_bytes}}
{{dsc inc | cpp/string/multibyte/dsc wcsrtombs}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc end}}

[[de:cpp/locale/codecvt/out]]
[[es:cpp/locale/codecvt/out]]
[[fr:cpp/locale/codecvt/out]]
[[it:cpp/locale/codecvt/out]]
[[ja:cpp/locale/codecvt/out]]
[[pt:cpp/locale/codecvt/out]]
[[ru:cpp/locale/codecvt/out]]
[[zh:cpp/locale/codecvt/out]]</text>
      <sha1>mas365a4cycw4mos5tgpunxn3tx0nae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/unshift</title>
    <ns>0</ns>
    <id>5176</id>
    <revision>
      <id>80236</id>
      <parentid>62383</parentid>
      <timestamp>2015-08-01T12:19:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing virtual</comment>
      <text xml:space="preserve" bytes="2309">{{cpp/codecvt/title|unshift, do_unshift}}
{{cpp/locale/codecvt/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
result unshift( StateT&amp; state,
                ExternT* to,
                ExternT* to_end,
                ExternT*&amp; to_next) const;
}}
{{dcl | num=2 | 1=
protected:
virtual result do_unshift( StateT&amp; state,
                           ExternT* to,
                           ExternT* to_end,
                           ExternT*&amp; to_next) const;
}}
{{dcl end}}

@1@ public member function, calls the member function {{tt|do_unshift}} of the most derived class.

@2@ if the encoding represented by this {{tt|codecvt}} facet is state-dependent, and {{tt|state}} represents a conversion state that is not the initial shift state, writes the characters necessary to return to the initial shift state. The characters are written to a character array whose first element is pointed to by {{tt|to}}. No more than {{tt|to_end-to}} characters are written. The parameter {{tt|to_next}} is updated to point one past the last character written.

===Return value===
A value of type {{lc|std::codecvt_base::result}}, indicating the success status as follows:
{{dsc begin}}
{{dsc | {{tt|ok}} | all necessary characters were written. {{tt|state}} now represents initial shift state}}
{{dsc | {{tt|partial}} | not enough space in the output buffer. {{c|1=to_next == to_end}}}}
{{dsc | {{tt|error}} | unspecified error occurred}}
{{dsc | {{tt|noconv}} | the encoding is not state-dependent, no termination sequence necessary}}
{{dsc end}}

The non-converting specialization {{c|std::codecvt&lt;char, char, std::mbstate_t&gt;}} always returns {{lc|std::codecvt_base::noconv}}

===Notes===
This function is called by {{c|std::basic_filebuf::close()}} and in other situations when finalizing a state-dependent multibyte character sequence.

===Example===

{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc wcrtomb}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc end}}

[[de:cpp/locale/codecvt/unshift]]
[[es:cpp/locale/codecvt/unshift]]
[[fr:cpp/locale/codecvt/unshift]]
[[it:cpp/locale/codecvt/unshift]]
[[ja:cpp/locale/codecvt/unshift]]
[[pt:cpp/locale/codecvt/unshift]]
[[ru:cpp/locale/codecvt/unshift]]
[[zh:cpp/locale/codecvt/unshift]]</text>
      <sha1>tqnwx6gvzkewc7oc7ruwgcr36r3fxan</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/codecvt/~codecvt</title>
    <ns>0</ns>
    <id>4437</id>
    <revision>
      <id>43753</id>
      <parentid>15809</parentid>
      <timestamp>2012-11-03T03:44:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="320">{{cpp/locale/facet/destructor|codecvt}}

[[de:cpp/locale/codecvt/~codecvt]]
[[es:cpp/locale/codecvt/~codecvt]]
[[fr:cpp/locale/codecvt/~codecvt]]
[[it:cpp/locale/codecvt/~codecvt]]
[[ja:cpp/locale/codecvt/~codecvt]]
[[pt:cpp/locale/codecvt/~codecvt]]
[[ru:cpp/locale/codecvt/~codecvt]]
[[zh:cpp/locale/codecvt/~codecvt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate</title>
    <ns>0</ns>
    <id>2976</id>
    <revision>
      <id>65764</id>
      <parentid>61772</parentid>
      <timestamp>2013-10-07T18:12:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>this wasn't as wrong as codecvt, but fix description of the required specializations for consistency</comment>
      <text xml:space="preserve" bytes="3325">{{cpp/title | collate}}
{{cpp/locale/collate/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class collate;
}}
{{dcl end}}

Class {{lc|std::collate}} encapsulates locale-specific collation (comparison) and hashing of strings. This facet is used by {{lc|std::basic_regex}} and can be applied, by means of {{c|std::locale::operator()}}, directly to all standard algorithms that expect a string comparison predicate.

{{inheritance diagram/std-collate}}

Two standalone (locale-independent) specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::collate&lt;char&gt;}}   | implements lexicographical ordering of byte strings }}
{{dsc | {{c|std::collate&lt;wchar_t&gt;}} | implements lexicographical ordering of wide strings }}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{tt|std::basic_string&lt;CharT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/collate/collate | constructs a new collate facet }}
{{dsc prot mem dtor | cpp/locale/collate/~collate | destructs a collate facet }}
{{dsc inc | cpp/locale/collate/dsc compare}}
{{dsc inc | cpp/locale/collate/dsc transform}}
{{dsc inc | cpp/locale/collate/dsc hash}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/collate/dsc do_compare}}
{{dsc inc | cpp/locale/collate/dsc do_transform}}
{{dsc inc | cpp/locale/collate/dsc do_hash}}
{{dsc end}}

===Example===

{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

int main()
{
    std::wcout.imbue(std::locale(&quot;&quot;));
    std::vector&lt;std::wstring&gt; v = {L&quot;ar&quot;, L&quot;zebra&quot;, L&quot;\u00f6grupp&quot;, L&quot;Zebra&quot;, L&quot;\u00e4ngel&quot;,
                                   L&quot;\u00e5r&quot;, L&quot;f\u00f6rnamn&quot;};

    std::wcout &lt;&lt; &quot;Default locale collation order: &quot;;
    std::sort(v.begin(), v.end());
    for (auto s : v) std::wcout &lt;&lt; s &lt;&lt; ' '; std::wcout &lt;&lt; '\n';

    std::wcout &lt;&lt; &quot;English locale collation order: &quot;;
    std::sort(v.begin(), v.end(), std::locale(&quot;en_US.UTF-8&quot;));
    for (auto s : v) std::wcout &lt;&lt; s &lt;&lt; ' '; std::wcout &lt;&lt; '\n';

    std::wcout &lt;&lt; &quot;Swedish locale collation order: &quot;;
    std::sort(v.begin(), v.end(), std::locale(&quot;sv_SE.UTF-8&quot;));
    for (auto s : v) std::wcout &lt;&lt; s &lt;&lt; ' '; std::wcout &lt;&lt; '\n';
}
 | output=
Default locale collation order: Zebra ar förnamn zebra ängel år ögrupp
English locale collation order: ängel ar år förnamn ögrupp zebra Zebra
Swedish locale collation order: ar förnamn zebra Zebra år ängel ögrupp
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc operator()}}
{{dsc tclass | cpp/locale/collate_byname | creates a collate facet for the named locale }}
{{dsc end}}

[[de:cpp/locale/collate]]
[[es:cpp/locale/collate]]
[[fr:cpp/locale/collate]]
[[it:cpp/locale/collate]]
[[ja:cpp/locale/collate]]
[[pt:cpp/locale/collate]]
[[ru:cpp/locale/collate]]
[[zh:cpp/locale/collate]]</text>
      <sha1>qy30w1xovsdf4a1va1gubu0n5yoztql</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate byname</title>
    <ns>0</ns>
    <id>9313</id>
    <revision>
      <id>61618</id>
      <parentid>58088</parentid>
      <timestamp>2013-06-06T07:21:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+inline descriptions</comment>
      <text xml:space="preserve" bytes="1809">{{cpp/title|collate_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class collate_byname : public std::collate&lt;CharT&gt;;
}}
{{dcl end}}

{{lc|std::collate_byname}} is a {{lc|std::collate}} facet which encapsulates locale-specific collation (comparison) and hashing of strings. Just like {{lc|std::collate}}, it can be imbued in {{lc|std::regex}} and applied, by means of {{c|std::locale::operator()}}, directly to all standard algorithms that expect a string comparison predicate.

Two specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::collate_byname&lt;char&gt;}} | locale-specific collation of multibyte strings }}
{{dsc | {{c|std::collate_byname&lt;wchar_t&gt;}} | locale-specific collation of wide strings}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | collate_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | collate_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | collate_byname}}
{{include | cpp/locale/byname/destructor | collate_byname}}

{{cpp/locale/collate/inherit}}

===Notes===
{{cpp/locale/collate/collation_note}}

===Example===
{{example
 | &lt;!-- TODO: a useful example would probably be a regex, check on clang --&gt;
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc collate}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc inc | cpp/locale/locale/dsc operator()}}
{{dsc end}}

[[de:cpp/locale/collate byname]]
[[es:cpp/locale/collate byname]]
[[fr:cpp/locale/collate byname]]
[[it:cpp/locale/collate byname]]
[[ja:cpp/locale/collate byname]]
[[pt:cpp/locale/collate byname]]
[[ru:cpp/locale/collate byname]]
[[zh:cpp/locale/collate byname]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate/collate</title>
    <ns>0</ns>
    <id>4391</id>
    <revision>
      <id>43704</id>
      <parentid>15744</parentid>
      <timestamp>2012-11-03T03:33:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="313">{{cpp/locale/facet/constructor|collate}}

[[de:cpp/locale/collate/collate]]
[[es:cpp/locale/collate/collate]]
[[fr:cpp/locale/collate/collate]]
[[it:cpp/locale/collate/collate]]
[[ja:cpp/locale/collate/collate]]
[[pt:cpp/locale/collate/collate]]
[[ru:cpp/locale/collate/collate]]
[[zh:cpp/locale/collate/collate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate/compare</title>
    <ns>0</ns>
    <id>9255</id>
    <revision>
      <id>83379</id>
      <parentid>62391</parentid>
      <timestamp>2016-02-04T15:16:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on the two-way alternative</comment>
      <text xml:space="preserve" bytes="3331">{{cpp/locale/collate/title|compare|do_compare}}
{{cpp/locale/collate/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
int compare( const CharT* low1, const CharT* high1,
             const CharT* low2, const CharT* high2 ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual int do_compare( const CharT* low1, const CharT* high1,
                        const CharT* low2, const CharT* high2 ) const;
}}
{{dcl end}}

@1@ Public member function, calls the protected virtual member function {{tt|do_compare}} of the most derived class.

@2@ Compares the character sequence {{tt|[low1, high1)}} to the character sequence {{tt|[low2, high2)}}, using this locale's collation rules, and returns 1 if the first string follows the second, -1 if the first string precedes the second, zero if the two strings are equivalent.

===Parameters===
{{par begin}}
{{par | low1 | pointer to the first character of the first string }}
{{par | high1 | one past the end pointer for the first string }}
{{par | low2 | pointer to the first character of the second string }}
{{par | high2 | one past the end pointer for the second string }}
{{par end}}

===Return value===
1 if the first string is greater than the second (that is, follows the second in the collation order), -1 if the first string is less than the second (precedes the second in the collation order), zero if the two strings are equivalent.

===Notes===
When three-way comparison is not required (such as when providing a {{tt|Compare}} argument to standard algorithms such as {{lc|std::sort}}), {{ltt|cpp/locale/locale/operator()|std::locale::operator()}} may be more appropriate.

{{cpp/locale/collate/collation_note}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;

template&lt;typename CharT&gt;
void try_compare(const std::locale&amp; l, const CharT* p1, const CharT* p2)
{
    auto&amp; f = std::use_facet&lt;std::collate&lt;CharT&gt;&gt;(l);

    std::basic_string&lt;CharT&gt; s1(p1), s2(p2);
    if(f.compare(&amp;s1[0], &amp;s1[0] + s1.size(),
                 &amp;s2[0], &amp;s2[0] + s2.size() ) &lt; 0)
         std::wcout &lt;&lt; p1 &lt;&lt; &quot; before &quot; &lt;&lt; p2 &lt;&lt; '\n';
    else
         std::wcout &lt;&lt; p2 &lt;&lt; &quot; before &quot; &lt;&lt; p1 &lt;&lt; '\n';
}

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::wcout.imbue(std::locale());

    std::wcout &lt;&lt; &quot;In the American locale: &quot;;
    try_compare(std::locale(), &quot;hrnec&quot;, &quot;chrt&quot;);
    std::wcout &lt;&lt; &quot;In the Czech locale: &quot;;
    try_compare(std::locale(&quot;cs_CZ.utf8&quot;), &quot;hrnec&quot;, &quot;chrt&quot;);

    std::wcout &lt;&lt; &quot;In the American locale: &quot;;
    try_compare(std::locale(), L&quot;år&quot;, L&quot;ängel&quot;);
    std::wcout &lt;&lt; &quot;In the Swedish locale: &quot;;
    try_compare(std::locale(&quot;sv_SE.utf8&quot;), L&quot;år&quot;, L&quot;ängel&quot;);
}
 | output=
In the American locale: chrt before hrnec
In the Czech locale: hrnec before chrt
In the American locale: ängel before år
In the Swedish locale: år before ängel
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc inc | cpp/locale/locale/dsc operator()}}
{{dsc end}}

[[de:cpp/locale/collate/compare]]
[[es:cpp/locale/collate/compare]]
[[fr:cpp/locale/collate/compare]]
[[it:cpp/locale/collate/compare]]
[[ja:cpp/locale/collate/compare]]
[[pt:cpp/locale/collate/compare]]
[[ru:cpp/locale/collate/compare]]
[[zh:cpp/locale/collate/compare]]</text>
      <sha1>angdk7v9pm7v7w0luxegr6nwbr8x5bv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate/do compare</title>
    <ns>0</ns>
    <id>9454</id>
    <redirect title="cpp/locale/collate/compare" />
    <revision>
      <id>40272</id>
      <timestamp>2012-10-12T18:37:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/collate/do compare]] to [[cpp/locale/collate/compare]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/locale/collate/compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate/do transform</title>
    <ns>0</ns>
    <id>9455</id>
    <redirect title="cpp/locale/collate/transform" />
    <revision>
      <id>40274</id>
      <timestamp>2012-10-12T18:37:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/collate/do transform]] to [[cpp/locale/collate/transform]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/locale/collate/transform]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate/hash</title>
    <ns>0</ns>
    <id>9839</id>
    <revision>
      <id>63922</id>
      <parentid>62389</parentid>
      <timestamp>2013-08-01T15:38:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="2663">{{cpp/locale/collate/title|hash, do_hash}}
{{cpp/locale/collate/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
long hash( const CharT* beg, const CharT* end ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual long do_hash( const CharT* beg, const CharT* end ) const;
}}
{{dcl end}}

@1@ Public member function, calls the protected virtual member function {{tt|do_hash}} of the most derived class.

@2@ Converts the character sequence {{tt|[beg, end)}} to an integer value that is equal to the hash obtained for all strings that collate equivalent in this locale ({{lc|compare()}} returns {{c|0}}). For two strings that do not collate equivalent, the probability that their hashes are equal should be very small, approaching {{c|1=1.0/std::numeric_limits&lt;unsigned long&gt;::max()}}.

===Parameters===
{{par begin}}
{{par | beg | pointer to the first character in the sequence to hash }}
{{par | end | one past the end pointer for the sequence to hash }}
{{par end}}

===Return value===
The hash value that respects collation order

===Note===
The system-supplied locales normally do not collate two strings as equivalent ({{lc|compare()}} does not return {{c|0}}) if {{l2tt|cpp/string/basic_string/operator_cmp|operator{{==}}|basic_string}} returns {{c|false}}, but a user-installed {{lc|std::collate}} facet may provide different collation rules, for example, it may treat strings as equivalent if they have the same Unicode normalized form.

===Example===
{{example
 | Demonstrates a locale-aware unordered container
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;unordered_set&gt;

struct CollateHash {
    template&lt;typename CharT&gt;
    std::size_t operator()(const std::basic_string&lt;CharT&gt;&amp; s) const
    {
        return std::use_facet&lt;std::collate&lt;CharT&gt;&gt;(std::locale()).hash(
                   &amp;s[0], &amp;s[0] + s.size()
               );
    }
};
struct CollateEq {
    template&lt;typename CharT&gt;
    bool operator()(const std::basic_string&lt;CharT&gt;&amp; s1,
                    const std::basic_string&lt;CharT&gt;&amp; s2) const
    {
        return std::use_facet&lt;std::collate&lt;CharT&gt;&gt;(std::locale()).compare(
                     &amp;s1[0], &amp;s1[0] + s1.size(),
                     &amp;s2[0], &amp;s2[0] + s2.size()
               ) == 0;
    }
};

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::wcout.imbue(std::locale());

    std::unordered_set&lt;std::wstring, CollateHash, CollateEq&gt; s2 = {L&quot;Foo&quot;, L&quot;Bar&quot;};
    for(auto&amp; str: s2)
        std::wcout &lt;&lt; str &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | p=true
 | output=
Bar Foo
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc hash}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate/transform</title>
    <ns>0</ns>
    <id>9250</id>
    <revision>
      <id>81614</id>
      <parentid>64300</parentid>
      <timestamp>2015-10-28T12:47:15Z</timestamp>
      <contributor>
        <ip>62.112.55.5</ip>
      </contributor>
      <text xml:space="preserve" bytes="2910">{{cpp/locale/collate/title|transform, do_transform}}
{{cpp/locale/collate/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
string_type transform( const CharT* low, const CharT* high ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual string_type do_transform( const CharT* low, const CharT* high ) const;
}}
{{dcl end}}

@1@ Public member function, calls the protected virtual member function {{tt|do_transform}} of the most derived class.

@2@ Converts the character sequence {{tt|[low, high)}} to a string that, compared lexicographically (e.g. with {{tt|operator&lt;}} for strings) with the result of calling {{tt|transform()}} on another string, produces the same result as calling {{lc|do_compare()}} on the same two strings.

===Parameters===
{{par begin}}
{{par | low | pointer to the first character in the sequence to transform }}
{{par | high | one past the end pointer for the sequence to transform }}
{{par end}}

===Return value===
The string transformed so that lexicographic comparison of the transformed strings may be used instead of collating of the originals. In the &quot;C&quot; locale, the returned string is the exact copy of {{tt|[low, high)}}. In other locales, the contents of the returned string are implementation-defined, and the size may be considerably longer.

===Notes===
In addition to the use in collation, the implementation-specific format of the transformed string is known to [[cpp/regex/regex_traits/transform_primary|std::regex_traits&lt;&gt;::transform_primary]], which is able to extract the equivalence class information.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;locale&gt;

int main()
{
    std::locale::global(std::locale(&quot;sv_SE.utf8&quot;));
    auto&amp; f = std::use_facet&lt;std::collate&lt;wchar_t&gt;&gt;(std::locale());

    std::wstring in1 = L&quot;\u00e4ngel&quot;;
    std::wstring in2 = L&quot;\u00e5r&quot;;

    std::wstring out1 = f.transform(&amp;in1[0], &amp;in1[0] + in1.size());
    std::wstring out2 = f.transform(&amp;in2[0], &amp;in2[0] + in2.size());

    std::wcout &lt;&lt; &quot;In the Swedish locale: &quot;;
    if(out1 &lt; out2)
         std::wcout &lt;&lt; in1 &lt;&lt; &quot; before &quot; &lt;&lt; in2 &lt;&lt; '\n';
    else
         std::wcout &lt;&lt; in2 &lt;&lt; &quot; before &quot; &lt;&lt; in1 &lt;&lt; '\n';

    std::wcout &lt;&lt; &quot;In lexicographic comparison: &quot;;
    if(in1 &lt; in2)
         std::wcout &lt;&lt; in1 &lt;&lt; &quot; before &quot; &lt;&lt; in2 &lt;&lt; '\n';
    else
         std::wcout &lt;&lt; in2 &lt;&lt; &quot; before &quot; &lt;&lt; in1 &lt;&lt; '\n';

}
 | output=
In the Swedish locale: år before ängel
In lexicographic comparison: ängel before år
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strxfrm}}
{{dsc inc | cpp/string/wide/dsc wcsxfrm}}
{{dsc end}}

[[de:cpp/locale/collate/transform]]
[[es:cpp/locale/collate/transform]]
[[fr:cpp/locale/collate/transform]]
[[it:cpp/locale/collate/transform]]
[[ja:cpp/locale/collate/transform]]
[[pt:cpp/locale/collate/transform]]
[[ru:cpp/locale/collate/transform]]
[[zh:cpp/locale/collate/transform]]</text>
      <sha1>i6cbl3t06gleskpx3cmdlpg5id6suid</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/collate/~collate</title>
    <ns>0</ns>
    <id>4448</id>
    <revision>
      <id>43684</id>
      <parentid>15821</parentid>
      <timestamp>2012-11-03T03:30:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="320">{{cpp/locale/facet/destructor|collate}}

[[de:cpp/locale/collate/~collate]]
[[es:cpp/locale/collate/~collate]]
[[fr:cpp/locale/collate/~collate]]
[[it:cpp/locale/collate/~collate]]
[[ja:cpp/locale/collate/~collate]]
[[pt:cpp/locale/collate/~collate]]
[[ru:cpp/locale/collate/~collate]]
[[zh:cpp/locale/collate/~collate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype</title>
    <ns>0</ns>
    <id>2779</id>
    <revision>
      <id>85234</id>
      <parentid>85233</parentid>
      <timestamp>2016-04-10T15:15:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>I guess I should leave a comment</comment>
      <text xml:space="preserve" bytes="4205">{{cpp/title | ctype}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class ctype;
}}
{{dcl end}}

Class ctype encapsulates character classification features. All stream input operations performed through {{c|std::basic_istream&lt;charT&gt;}} use the {{c|std::ctype&lt;charT&gt;}} of the locale imbued in the stream to identify whitespace characters for input tokenization. Stream output operations apply {{c|std::ctype&lt;charT&gt;::widen()}} to narrow-character arguments prior to output.

{{inheritance diagram/std-ctype}}

Two standalone (locale-independent) specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{ltt|cpp/locale/ctype_char|std::ctype&lt;char&gt;}} | provides narrow character equivalents of the minimal &quot;C&quot; locale classification. This specialization uses table lookup for character classification }}
{{dsc | {{c|std::ctype&lt;wchar_t&gt;}} | provides wide character classification appropriate to the native character set }}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/ctype/ctype | constructs a new ctype facet }}
{{dsc prot mem dtor | cpp/locale/ctype/~ctype | destructs a ctype facet }}
{{dsc inc | cpp/locale/ctype/dsc is}}
{{dsc inc | cpp/locale/ctype/dsc scan_is}}
{{dsc inc | cpp/locale/ctype/dsc scan_not}}
{{dsc inc | cpp/locale/ctype/dsc toupper}}
{{dsc inc | cpp/locale/ctype/dsc tolower}}
{{dsc inc | cpp/locale/ctype/dsc widen}}
{{dsc inc | cpp/locale/ctype/dsc narrow}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_is}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_is}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_not}}
{{dsc inc | cpp/locale/ctype/dsc do_toupper}}
{{dsc inc | cpp/locale/ctype/dsc do_tolower}}
{{dsc inc | cpp/locale/ctype/dsc do_widen}}
{{dsc inc | cpp/locale/ctype/dsc do_narrow}}
{{dsc end}}

{{cpp/locale/ctype_base/inherit}}

===Example===

{{example
 | The following example demonstrates modification of a ctype other than ctype&lt;char&gt; to tokenize a CSV file
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;
 
struct csv_whitespace : std::ctype&lt;wchar_t&gt;
{
    bool do_is(mask m, char_type c) const
    {   
        if ((m &amp; space) &amp;&amp; c == L' ') {
            return false; // space will NOT be classified as whitespace
        }
        if ((m &amp; space) &amp;&amp; c == L',') {
            return true; // comma will be classified as whitespace
        }
        return ctype::do_is(m, c); // leave the rest to the parent class
    } 
};
 
int main()
{
    std::wstring in = L&quot;Column 1,Column 2,Column 3\n123,456,789&quot;;
    std::wstring token;
 
    std::wcout &lt;&lt; &quot;default locale:\n&quot;;
    std::wistringstream s1(in);
    while (s1 &gt;&gt; token) {
        std::wcout &lt;&lt; &quot;  &quot; &lt;&lt; token &lt;&lt; '\n';
    }
 
    std::wcout &lt;&lt; &quot;locale with modified ctype:\n&quot;;
    std::wistringstream s2(in);
    csv_whitespace* my_ws = new csv_whitespace; // note: this allocation is not leaked
    s2.imbue(std::locale(s2.getloc(), my_ws));
    while (s2 &gt;&gt; token) {
        std::wcout &lt;&lt; &quot;  &quot; &lt;&lt; token&lt;&lt; '\n';
    }
}
 | output=
default locale:
  Column
  1,Column
  2,Column
  3
  123,456,789
locale with modified ctype:
  Column 1
  Column 2
  Column 3
  123
  456
  789
}}

===See also===
{{dsc begin}}
{{dsc ptclass | cpp/locale/ctype_char | title=ctype{{small|&lt;char&gt;}} | specialization of {{lc|std::ctype}} for type {{c|char}} }}
{{dsc tclass | cpp/locale/ctype_base | defines character classification categories }}
{{dsc tclass | cpp/locale/ctype_byname | creates a ctype facet for the named locale }}
{{dsc end}}

[[de:cpp/locale/ctype]]
[[es:cpp/locale/ctype]]
[[fr:cpp/locale/ctype]]
[[it:cpp/locale/ctype]]
[[ja:cpp/locale/ctype]]
[[pt:cpp/locale/ctype]]
[[ru:cpp/locale/ctype]]
[[zh:cpp/locale/ctype]]</text>
      <sha1>qodnqlasir1rdaubyjkiex2cnsqho48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype base</title>
    <ns>0</ns>
    <id>3097</id>
    <revision>
      <id>58107</id>
      <parentid>50006</parentid>
      <timestamp>2013-06-01T06:08:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2202">{{cpp/title | ctype_base}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class ctype_base;
}}
{{dcl end}}

The class {{lc|std::ctype_base}} lists the character classification categories which are inherited by the {{lc|std::ctype}} facets.

===Member types ===
{{dsc begin}}
{{dsc begin}}
{{dsc typedef | mask | nolink=true | unspecified {{concept|BitmaskType}} (enumeration, integer type, or bitset)}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc mem sconst | space | nolink=true | the value of {{tt|mask}} identifying whitespace character classification }}
{{dsc mem sconst | print | nolink=true | the value of {{tt|mask}} identifying printable character classification }}
{{dsc mem sconst | cntrl | nolink=true | the value of {{tt|mask}} identifying control character classification }}
{{dsc mem sconst | upper | nolink=true | the value of {{tt|mask}} identifying uppercase character classification }}
{{dsc mem sconst | lower | nolink=true | the value of {{tt|mask}} identifying lowercase character classification }}
{{dsc mem sconst | alpha | nolink=true | the value of {{tt|mask}} identifying alphabetic character classification }}
{{dsc mem sconst | digit | nolink=true | the value of {{tt|mask}} identifying digit character classification  }}
{{dsc mem sconst | punct | nolink=true | the value of {{tt|mask}} identifying punctuation character classification }}
{{dsc mem sconst | xdigit | nolink=true | the value of {{tt|mask}} identifying hexadecimal digit character classification }}
{{dsc mem sconst | blank | nolink=true | the value of {{tt|mask}} identifying blank character classification | notes={{mark c++11}}}}
{{dsc mem sconst | alnum | nolink=true | {{c|alpha {{!}} digit}} }}
{{dsc mem sconst | graph | nolink=true | {{c|alnum {{!}} punct}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc ctype}}
{{dsc inc | cpp/locale/dsc ctype_char}}
{{dsc inc | cpp/locale/dsc ctype_byname}}
{{dsc end}}

[[de:cpp/locale/ctype base]]
[[es:cpp/locale/ctype base]]
[[fr:cpp/locale/ctype base]]
[[it:cpp/locale/ctype base]]
[[ja:cpp/locale/ctype base]]
[[pt:cpp/locale/ctype base]]
[[ru:cpp/locale/ctype base]]
[[zh:cpp/locale/ctype base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype byname</title>
    <ns>0</ns>
    <id>9241</id>
    <revision>
      <id>65365</id>
      <parentid>61607</parentid>
      <timestamp>2013-09-10T16:44:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note about &lt;char&gt;</comment>
      <text xml:space="preserve" bytes="2506">{{cpp/title | ctype_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class ctype_byname : public std::ctype&lt;CharT&gt;;
}}
{{dcl end}}

{{lc|std::ctype_byname}} is a {{lc|std::ctype}} facet which encapsulates character classification rules of the locale specified at its construction.

Two specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{tt|std::ctype_byname&lt;char&gt;}} | provides narrow character classification. This specialization uses table lookup for character classification }}
{{dsc | {{tt|std::ctype_byname&lt;wchar_t&gt;}} | provides wide character classification }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|mask}} | {{tt|ctype&lt;CharT&gt;::mask}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | ctype_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | ctype_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | ctype_byname}}
{{include | cpp/locale/byname/destructor | ctype_byname}}

{{cpp/locale/ctype/inherit}}
{{cpp/locale/ctype_base/inherit}}

===Notes===
The explicit specialization {{tt|std::ctype_byname&lt;char&gt;}} was listed as a separate entry in the header file {{tt|&lt;locale&gt;}} until C++11. it was removed in C++11 as [http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#1298 defect #1298], but it remains a required specialization, just like {{tt|std::ctype_byname&lt;wchar_t&gt;}}.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    wchar_t c = L'\u00de'; // capital letter thorn
 
    std::locale loc(&quot;C&quot;);

    std::cout &lt;&lt; &quot;isupper('Þ', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isupper(c, loc) &lt;&lt; '\n';

    loc = std::locale(loc, new std::ctype_byname&lt;wchar_t&gt;(&quot;en_US.utf8&quot;));
 
    std::cout &lt;&lt; &quot;isupper('Þ', C locale with Unicode ctype) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isupper(c, loc) &lt;&lt; '\n';
}
 | output=
isupper('Þ', C locale) returned false
isupper('Þ', C locale with Unicode ctype) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc ctype}}
{{dsc inc | cpp/locale/dsc ctype_char}}
{{dsc end}}

[[de:cpp/locale/ctype byname]]
[[es:cpp/locale/ctype byname]]
[[fr:cpp/locale/ctype byname]]
[[it:cpp/locale/ctype byname]]
[[ja:cpp/locale/ctype byname]]
[[pt:cpp/locale/ctype byname]]
[[ru:cpp/locale/ctype byname]]
[[zh:cpp/locale/ctype byname]]</text>
      <sha1>awwbcue87s33nqv2ilqdk99no750sjb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype byname char</title>
    <ns>0</ns>
    <id>9243</id>
    <revision>
      <id>58111</id>
      <parentid>50008</parentid>
      <timestamp>2013-06-01T06:08:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2238">{{cpp/title | ctype_byname{{dsc small|&lt;char&gt;}}}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt;&gt;
class ctype_byname : public std::ctype&lt;char&gt;;
}}
{{dcl end}}

This specialization of {{lc|std::ctype_byname}} encapsulates character classification features for type {{c|char}}. Like its base class {{tt|std::ctype&lt;char&gt;}} and unlike general-purpose {{lc|std::ctype_byname}}, table lookup is used to classify characters

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|mask}} | {{tt|ctype&lt;char&gt;::mask}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/ctype_byname_char/ctype_byname_char | constructs a new ctype_byname&lt;char&gt; facet }}
{{dsc prot mem dtor | cpp/locale/ctype_byname_char/~ctype_byname_char | destructs a ctype_byname&lt;char&gt; facet }}
{{dsc end}}

{{cpp/locale/ctype_char/inherit}}
{{cpp/locale/ctype_base/inherit}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    char c = '\xde'; // capital letter thorn
 
    std::locale loc(&quot;C&quot;);

    std::cout &lt;&lt; &quot;isupper('Þ', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isupper(c, loc) &lt;&lt; '\n';

    loc = std::locale(loc, new std::ctype_byname&lt;char&gt;(&quot;en_US.utf8&quot;));
 
    std::cout &lt;&lt; &quot;isupper('Þ', C locale with Unicode ctype&lt;char&gt;) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isupper(c, loc) &lt;&lt; '\n';

    loc = std::locale(loc, new std::ctype_byname&lt;char&gt;(&quot;is_IS.iso88591&quot;));
 
    std::cout &lt;&lt; &quot;isupper('Þ', C locale with Islandic ctype&lt;char&gt;) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isupper(c, loc) &lt;&lt; '\n';
}
 | output=
isupper('Þ', C locale) returned false
isupper('Þ', C locale with Unicode ctype&lt;char&gt;) returned false
isupper('Þ', C locale with Islandic ctype&lt;char&gt;) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc ctype}}
{{dsc inc | cpp/locale/dsc ctype_char}}
{{dsc end}}

[[de:cpp/locale/ctype byname char]]
[[es:cpp/locale/ctype byname char]]
[[fr:cpp/locale/ctype byname char]]
[[it:cpp/locale/ctype byname char]]
[[ja:cpp/locale/ctype byname char]]
[[pt:cpp/locale/ctype byname char]]
[[ru:cpp/locale/ctype byname char]]
[[zh:cpp/locale/ctype byname char]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char</title>
    <ns>0</ns>
    <id>2782</id>
    <revision>
      <id>66370</id>
      <parentid>65369</parentid>
      <timestamp>2013-11-14T11:25:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>make example description a bit more precise</comment>
      <text xml:space="preserve" bytes="4126">{{cpp/title | ctype{{small|&lt;char&gt;}}}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt;&gt;
class ctype&lt;char&gt;;
}}
{{dcl end}}

This specialization of {{lc|std::ctype}} encapsulates character classification features for type {{c|char}}. Unlike general-purpose {{lc|std::ctype}}, which uses virtual functions, this specialization uses table lookup to classify characters (which is generally faster).

The base class {{c|std::ctype&lt;char&gt;}} implements character classification equivalent to the minimal &quot;C&quot; locale. The classification rules can be extended or modified if constructed with a non-default classification table argument, if constructed as {{c|std::ctype_byname&lt;char&gt;}} or as a user-defined derived facet. All {{lc|std::istream}} formatted input functions are required to use {{c|std::ctype&lt;char&gt;}} for character classing during input parsing. 

{{inheritance diagram/std-ctype_char}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|char}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype_char/dsc constructor}}
{{dsc inc | cpp/locale/ctype_char/dsc destructor}}
{{dsc inc | cpp/locale/ctype_char/dsc table}}
{{dsc inc | cpp/locale/ctype_char/dsc classic_table}}
{{dsc inc | cpp/locale/ctype_char/dsc is}}
{{dsc inc | cpp/locale/ctype_char/dsc scan_is}}
{{dsc inc | cpp/locale/ctype_char/dsc scan_not}}
{{dsc inc | cpp/locale/ctype/dsc toupper}}
{{dsc inc | cpp/locale/ctype/dsc tolower}}
{{dsc inc | cpp/locale/ctype/dsc widen}}
{{dsc inc | cpp/locale/ctype/dsc narrow}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_toupper}}
{{dsc inc | cpp/locale/ctype/dsc do_tolower}}
{{dsc inc | cpp/locale/ctype/dsc do_widen}}
{{dsc inc | cpp/locale/ctype/dsc do_narrow}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc mem sconst | nolink=true | {{dsc small|static const std::size_t }} table_size | size of the classification table, at least 256 }}
{{dsc end}}

{{cpp/locale/ctype_base/inherit}}

===Example===

{{example
 | The following example demonstrates modification of ctype&lt;char&gt; to tokenize comma-separated values &lt;!-- for a real CSV, it would have to handle quotes and escapes --&gt;
 | code=#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;

// This ctype facet classifies commas and endlines as whitespace
struct csv_whitespace : std::ctype&lt;char&gt; {
    static const mask* make_table()
    {
        // make a copy of the &quot;C&quot; locale table
        static std::vector&lt;mask&gt; v(classic_table(), classic_table() + table_size);
        v[','] {{!}}=  space;  // comma will be classified as whitespace
        v[' '] &amp;= ~space;      // space will not be classified as whitespace
        return &amp;v[0];
    }
    csv_whitespace(std::size_t refs = 0) : ctype(make_table(), false, refs) {}
};

int main()
{
    std::string in = &quot;Column 1,Column 2,Column 3\n123,456,789&quot;;
    std::string token;

    std::cout &lt;&lt; &quot;default locale:\n&quot;;
    std::istringstream s1(in);
    while(s1 &gt;&gt; token)
            std::cout &lt;&lt; &quot;  &quot; &lt;&lt; token &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;locale with modified ctype:\n&quot;;
    std::istringstream s2(in);
    s2.imbue(std::locale(s2.getloc(), new csv_whitespace));
    while(s2 &gt;&gt; token)
            std::cout &lt;&lt; &quot;  &quot; &lt;&lt; token&lt;&lt; '\n';
}
 | output=
default locale:
  Column
  1,Column
  2,Column
  3
  123,456,789
locale with modified ctype:
  Column 1
  Column 2
  Column 3
  123
  456
  789
}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/locale/ctype | defines character classification tables }}
{{dsc tclass | cpp/locale/ctype_base | defines character classification categories }}
{{dsc tclass | cpp/locale/ctype_byname | creates a ctype facet for the named locale }}
{{dsc end}}

[[de:cpp/locale/ctype char]]
[[es:cpp/locale/ctype char]]
[[fr:cpp/locale/ctype char]]
[[it:cpp/locale/ctype char]]
[[ja:cpp/locale/ctype char]]
[[pt:cpp/locale/ctype char]]
[[ru:cpp/locale/ctype char]]
[[zh:cpp/locale/ctype char]]</text>
      <sha1>76zz8inmnzztgxq5d4oiqomiw27v6k6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char/classic table</title>
    <ns>0</ns>
    <id>12834</id>
    <revision>
      <id>91572</id>
      <parentid>64871</parentid>
      <timestamp>2017-03-31T19:50:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="684">{{cpp/locale/ctype_char/title|classic_table}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
static const mask* classic_table();
}}
{{dcl end}}

Returns the classification table that matches the classification used by the minimal &quot;C&quot; locale.

===Parameters===
(none)

===Return value===
A pointer to the first element in the classification table (which an array of size {{tt|std::ctype&lt;char&gt;::table_size}})

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Notes===
Default-constructed {{c|std::ctype&lt;char&gt;}} facets use this table for classification.

===Example===
{{example}}</text>
      <sha1>h31zl5mizyi2051ah9dfzz5u5iiqwxz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char/ctype</title>
    <ns>0</ns>
    <id>12837</id>
    <revision>
      <id>64179</id>
      <parentid>63694</parentid>
      <timestamp>2013-08-15T15:16:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="1100">{{cpp/locale/ctype_char/title | ctype}}
{{cpp/locale/ctype/navbar}}

{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
explicit ctype( const mask* tbl = 0, bool del = false, std::size_t refs = 0);
}}
{{dcl end}}

Creates a {{c|std::ctype&lt;char&gt;}} facet and forwards the starting reference count {{tt|refs}} to the base class constructor, {{ltt|cpp/locale/locale/facet/facet|locale::facet::facet()}}.

If {{tt|tbl}} is null, {{lc|classic_table()}} is used by all classification member functions. Otherwise, {{tt|tbl}} must be a pointer to the first element of an array of masks, at least {{c|std::ctype&lt;char&gt;::table_size}} in size, and that array is used by all of this facet's classification member functions.

If {{tt|del}} is {{c|true}}, it is assumed that the array was allocated with {{c|new[]}}, and the destructor of this facet will call {{c|delete[] tbl}}

===Parameters===
{{par begin}}
{{par | tbl | classification table to use or a null pointer}}
{{par | del | indicator whether the table needs to be deleted.}}
{{par | refs | starting reference count}}
{{par end}}

===Example===
{{example}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char/is</title>
    <ns>0</ns>
    <id>12831</id>
    <revision>
      <id>64201</id>
      <parentid>63695</parentid>
      <timestamp>2013-08-15T15:28:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="1872">{{cpp/locale/ctype_char/title|is}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
bool is(mask m, char c) const;
}}
{{dcl | num=2 | 1=
const char* is(const char* low, const char* high, mask* vec) const;
}}
{{dcl end}}

@1@ Checks if the character {{tt|c}} is classified by the mask {{tt|m}} according to the classification table returned by the member function {{lc|table()}}. Effectively calculates {{c|table()[(unsigned char)c] &amp; m}}
@2@ For every character in the character array {{tt|[low, high)}}, reads its full classification mask from the classification table returned by the member function {{lc|table()}} (that is, evaluates {{c|table()[ (unsigned char)*p]}} and stores it in the corresponding element of the array pointed to by {{tt|vec}}

If {{c|(unsigned char)c &gt;{{=}} std::ctype&lt;char&gt;::table_size}}, then an implementation-defined value is substituted instead of {{c|table()[(unsigned char)c]}}, possibly different for different values of {{c|c}}.

===Parameters===
{{par begin}}
{{par | c | character to classify}}
{{par | m | mask to use for classifying a single character}}
{{par | low | pointer to the first character in an array of characters to classify }}
{{par | high | one past the end pointer for the array of characters to classify }}
{{par | vec | pointer to the first element of the array of masks to fill }}
{{par end}}

===Return value===
@1@ {{c|true}} if {{tt|c}} is classified by {{tt|m}} in {{lc|table()}}
@2@ {{tt|high}}

===Notes===
Unlike the primary template {{c|std::ctype}}, this specialization does not perform a virtual function call when classifying characters. To customize the behavior, a derived class may provide a non-default classification table to the base class constructor.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_is}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char/scan is</title>
    <ns>0</ns>
    <id>12835</id>
    <revision>
      <id>63697</id>
      <parentid>63696</parentid>
      <timestamp>2013-07-19T02:43:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2034">{{cpp/locale/ctype_char/title|scan_is}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
const char* scan_is (mask m, const char* beg, const char* end) const;
}}
{{dcl end}}

Locates the first character in the character array {{tt|[beg, end)}} that satisfies the classification mask {{tt|m}}, that is, the first character {{tt|c}} such that {{c|table()[(unsigned char) c] &amp; m}} would return {{c|true}}.

If {{c|(unsigned char)c &gt;{{=}} std::ctype&lt;char&gt;::table_size}}, then an implementation-defined value is substituted instead of {{c|table()[(unsigned char)c]}}, possibly different for different values of {{c|c}}.

===Parameters===
{{par begin}}
{{par | m | mask to search for}}
{{par | beg | pointer to the first character in an array of characters to search }}
{{par | end | one past the end pointer for the array of characters to search }}
{{par end}}

===Return value===
Pointer to the first character in {{tt|[beg, end)}} that satisfies the mask, or {{tt|end}} if no such character was found.

===Notes===
Unlike the primary template {{c|std::ctype}}, this specialization does not perform a virtual function call when classifying characters. To customize the behavior, a derived class may provide a non-default classification table to the base class constructor.

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    auto&amp; f = std::use_facet&lt;std::ctype&lt;char&gt;&gt;(std::locale(&quot;&quot;));

    // skip until the first letter
    char s1[] = &quot;      \t\t\n  Test&quot;;
    const char* p1 = f.scan_is(std::ctype_base::alpha, std::begin(s1), std::end(s1));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p1 &lt;&lt; &quot;'\n&quot;;

    // skip until the first letter
    char s2[] = &quot;123456789abcd&quot;;
    const char* p2 = f.scan_is(std::ctype_base::alpha, std::begin(s2), std::end(s2));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p2 &lt;&lt; &quot;'\n&quot;;
}
 | output=
'Test'
'abcd'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_is}}
{{dsc inc | cpp/locale/ctype_char/dsc scan_not}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char/scan not</title>
    <ns>0</ns>
    <id>12836</id>
    <revision>
      <id>63698</id>
      <parentid>63693</parentid>
      <timestamp>2013-07-19T02:44:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on past-the-end chars</comment>
      <text xml:space="preserve" bytes="2039">{{cpp/locale/ctype_char/title|scan_is}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
const char* scan_not (mask m, const char* beg, const char* end) const;
}}
{{dcl end}}

Locates the first character in the character array {{tt|[beg, end)}} that does not satisfy the classification mask {{tt|m}}, that is, the first character {{tt|c}} such that {{c|table()[(unsigned char)c] &amp; m}} would return {{c|false}}.

If {{c|(unsigned char)c &gt;{{=}} std::ctype&lt;char&gt;::table_size}}, then an implementation-defined value is substituted instead of {{c|table()[(unsigned char)c]}}, possibly different for different values of {{c|c}}.

===Parameters===
{{par begin}}
{{par | m | mask to search for}}
{{par | beg | pointer to the first character in an array of characters to search }}
{{par | end | one past the end pointer for the array of characters to search }}
{{par end}}

===Return value===
Pointer to the first character in {{tt|[beg, end)}} that does not satisfy the mask, or {{tt|end}} if no such character was found.

===Notes===
Unlike the primary template {{c|std::ctype}}, this specialization does not perform a virtual function call when classifying characters. To customize the behavior, a derived class may provide a non-default classification table to the base class constructor.

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    auto&amp; f = std::use_facet&lt;std::ctype&lt;char&gt;&gt;(std::locale(&quot;&quot;));

    // skip leading whitespace
    char s1[] = &quot;      \t\t\n  Test&quot;;
    const char* p1 = f.scan_not(std::ctype_base::space, std::begin(s1), std::end(s1));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p1 &lt;&lt; &quot;'\n&quot;;

    // skip leading digits
    char s2[] = &quot;123456789abcd&quot;;
    const char* p2 = f.scan_not(std::ctype_base::digit, std::begin(s2), std::end(s2));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p2 &lt;&lt; &quot;'\n&quot;;
}
 | output=
'Test'
'abcd'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_not}}
{{dsc inc | cpp/locale/ctype_char/dsc scan_is}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char/table</title>
    <ns>0</ns>
    <id>12832</id>
    <revision>
      <id>91416</id>
      <parentid>64872</parentid>
      <timestamp>2017-03-31T19:43:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="661">{{cpp/locale/ctype_char/title|table}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
const mask* table() const;
}}
{{dcl end}}

Returns the classification table that was provided in the constructor of this instance of {{c|std::ctype&lt;char&gt;}}, or returns a copy of {{lc|classic_table()}} if none was provided.

===Parameters===
(none)

===Return value===
A pointer to the first element in the classification table (which an array of size {{tt|std::ctype&lt;char&gt;::table_size}}).

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example}}</text>
      <sha1>1h1479nvw1w6cj5qmk7n8phn7ijvv7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype char/~ctype</title>
    <ns>0</ns>
    <id>12838</id>
    <revision>
      <id>63699</id>
      <timestamp>2013-07-19T02:47:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="828">{{cpp/locale/ctype_char/title | ~ctype}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
protected: ~ctype();
}}
{{dcl end}}

Destructs a {{c|std::ctype&lt;char&gt;}} facet. This destructor is protected and virtual (due to [[cpp/locale/locale/facet|base class]] destructor being virtual). An object of type {{c|std::ctype&lt;char&gt;}}, like most facets, can only be destroyed when the last {{lc|std::locale}} object that implements this facet goes out of scope or if a user-defined class is derived from {{c|std::ctype&lt;char&gt;}} and implements a public destructor.

If, when this instance of {{c|std::ctype&lt;char&gt;}} was constructed, a custom classification table was provided and the second argument to the constructor (the boolean {{tt|del}}) was {{c|true}}, then this destructor executes {{c|delete[] table()}}.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/ctype</title>
    <ns>0</ns>
    <id>3609</id>
    <revision>
      <id>43662</id>
      <parentid>15731</parentid>
      <timestamp>2012-11-03T03:26:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="279">{{cpp/locale/facet/constructor|ctype}}

[[de:cpp/locale/ctype/ctype]]
[[es:cpp/locale/ctype/ctype]]
[[fr:cpp/locale/ctype/ctype]]
[[it:cpp/locale/ctype/ctype]]
[[ja:cpp/locale/ctype/ctype]]
[[pt:cpp/locale/ctype/ctype]]
[[ru:cpp/locale/ctype/ctype]]
[[zh:cpp/locale/ctype/ctype]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/is</title>
    <ns>0</ns>
    <id>9572</id>
    <revision>
      <id>63651</id>
      <parentid>62055</parentid>
      <timestamp>2013-07-16T00:20:34Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2869">{{cpp/locale/ctype/title|is|do_is}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
bool is(mask m, CharT c) const;
}}
{{dcl | num=2 | 1=
public:
const CharT* is(const CharT* low, const CharT* high, mask* vec) const;
}}
{{dcl | num=3 | 1=
protected:
virtual bool do_is(mask m, CharT c) const;
}}
{{dcl | num=4 | 1=
protected:
virtual const CharT* do_is(const CharT* low, const CharT* high, mask* vec) const;
}}
{{dcl end}}

@1,2@ public member function, calls the protected virtual member function {{tt|do_is}} of the most derived class.
@3@ Checks if the character {{tt|c}} is classified by the mask {{tt|m}} 
@4@ For every character in the character array {{tt|[low, high)}}, identifies the complete classification mask (e.g. {{c|digit{{!}}xdigit{{!}}alnum{{!}}print{{!}}graph}} for the digit {{c|'0'}} in the default locale), and stores the masks in the corresponding elements of the array pointed to by {{tt|vec}}

===Parameters===
{{par begin}}
{{par | c | character to classify}}
{{par | m | mask to use for classifying a single character}}
{{par | low | pointer to the first character in an array of characters to classify }}
{{par | high | one past the end pointer for the array of characters to classify }}
{{par | vec | pointer to the first element of the array of masks to fill }}
{{par end}}

===Return value===
@1,3@ {{c|true}} if {{tt|c}} is classified by {{tt|m}}
@2,4@ {{tt|high}}

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;utility&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;

// utility wrapper to make locale-bound facets destructible
template&lt;class Facet&gt;
struct deletable_facet : Facet
{
    template&lt;class ...Args&gt;
    deletable_facet(Args&amp;&amp; ...args) : Facet(std::forward&lt;Args&gt;(args)...) {}
    ~deletable_facet() {}
};

int main()
{
    // classify a single character using the default locale
    auto&amp; f = std::use_facet&lt;std::ctype&lt;char&gt;&gt;(std::locale());
    char c = '0';
    if (f.is(std::ctype_base::digit, c)) // or isdigit(c, locale());
    {
        std::cout &lt;&lt; &quot;'&quot; &lt;&lt; c &lt;&lt; &quot;' is a digit\n&quot;;
    }

    // classify every character in a string using a named locale
    deletable_facet&lt;std::ctype_byname&lt;wchar_t&gt;&gt; f2(&quot;en_US.utf8&quot;);
    std::wstring str = L&quot;z\u00df\u6c34\U0001d10b&quot;;
    std::vector&lt;std::ctype_base::mask&gt; vec(str.size());
    f2.is(&amp;str[0], &amp;str[0] + str.size(), &amp;vec[0]);

    for (std::size_t n = 0; n &lt; str.size(); ++n) {
       std::cout &lt;&lt; std::hex &lt;&lt; &quot;U+&quot; &lt;&lt; str[n] &lt;&lt; &quot; is: &quot;;
       if (vec[n] &amp; std::ctype_base::alnum) 
          std::cout &lt;&lt; &quot; alnum &quot;;
       if (vec[n] &amp; std::ctype_base::punct) 
          std::cout &lt;&lt; &quot; punct &quot;;
       std::cout &lt;&lt; '\n';
    }
}
 | output=
'0' is a digit
U+7a is:  alnum 
U+df is:  alnum 
U+6c34 is:  alnum 
U+1d10b is:  punct 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc iswctype}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/narrow</title>
    <ns>0</ns>
    <id>9777</id>
    <revision>
      <id>64197</id>
      <parentid>58095</parentid>
      <timestamp>2013-08-15T15:27:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="3465">{{cpp/locale/ctype/title|narrow, do_narrow}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
char narrow( CharT c, char dflt ) const;
}}
{{dcl | num=2 | 1=
public:
const CharT* narrow( const CharT* beg, const CharT* end, 
                     char dflt, char* dst ) const;
}}
{{dcl | num=3 | 1=
protected:
virtual char do_narrow( CharT c, char dflt ) const;
}}
{{dcl | num=4 | 1=
protected:
virtual const CharT* do_narrow( const CharT* beg, const CharT* end, 
                                char dflt, char* dst ) const;
}}
{{dcl end}}

@1,2@ Public member function, calls the protected virtual member function {{tt|do_narrow}} of the most derived class.

@3@ Converts the (possibly wide) character {{tt|c}} to multibyte representation if the character can be represented with a single byte (for example, ASCII characters in UTF-8 encoding are single bytes). Returns {{c|dflt}} if such conversion does not exist.

@4@ For every character in the character array {{tt|[beg, end)}}, writes narrowed characters (or {{tt|dflt}} whenever narrowing fails) to the successive locations in the character array pointed to by {{tt|dst}}.

Narrowing is always successful and is always reversible (by calling {{lc|widen()}}) for all characters from the basic source character set (latin letters, digits, and punctuations required to write a C++ program)

Narrowing, if successful, preserves all character classification categories known to {{lc|is()}}.

Narrowing of any digit character guarantees that if the result is subtracted from the character literal {{c|'0'}}, the difference equals the digit value of the original character.

===Parameters===
{{par begin}}
{{par | c | character to convert}}
{{par | dflt | default value to produce if the conversion fails}}
{{par | beg | pointer to the first character in an array of characters to convert }}
{{par | end | one past the end pointer for the array of characters to convert }}
{{par | dst | pointer to the first element of the array of char to fill }}
{{par end}}

===Return value===
@1,3@ narrowed character or {{tt|dflt}} if narrowing fails
@2,4@ {{tt|end}}

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;

void try_narrow(const std::ctype&lt;wchar_t&gt;&amp; f, wchar_t c)
{
    char n = f.narrow(c, 0);
    if (n) {
        std::wcout &lt;&lt; '\'' &lt;&lt; c &lt;&lt; &quot;' narrowed to &quot; &lt;&lt; +(unsigned char)n &lt;&lt; '\n';
    } else {
        std::wcout &lt;&lt; '\'' &lt;&lt; c &lt;&lt; &quot;' could not be narrowed\n&quot;;
    }
}
 
int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::wcout.imbue(std::locale());
    std::wcout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; &quot;In US English UTF-8 locale:\n&quot;;
    auto&amp; f = std::use_facet&lt;std::ctype&lt;wchar_t&gt;&gt;(std::locale());
    try_narrow(f, L'A');
    try_narrow(f, L'Ａ');
    try_narrow(f, L'ě');
 
    std::locale::global(std::locale(&quot;cs_CZ.iso88592&quot;));
    auto&amp; f2 = std::use_facet&lt;std::ctype&lt;wchar_t&gt;&gt;(std::locale());
    std::wcout &lt;&lt; &quot;In Czech ISO-8859-2 locale:\n&quot;;
    try_narrow(f2, L'A');
    try_narrow(f2, L'Ａ');
    try_narrow(f2, L'ě');
}
 | output=
In US English UTF-8 locale:
'A' narrowed to 0x41
'Ａ' could not be narrowed
'ě' could not be narrowed
In Czech ISO-8859-2 locale:
'A' narrowed to 0x41
'Ａ' could not be narrowed
'ě' narrowed to 0xec
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc widen}}
{{dsc inc | cpp/io/basic_ios/dsc narrow}}
{{dsc inc | cpp/string/multibyte/dsc wctob}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/scan is</title>
    <ns>0</ns>
    <id>9826</id>
    <revision>
      <id>58096</id>
      <parentid>50001</parentid>
      <timestamp>2013-06-01T06:07:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1738">{{cpp/locale/ctype/title|scan_is|do_scan_is}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
const CharT* scan_is( mask m, const CharT* beg, const CharT* end ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual const CharT* do_scan_is( mask m, const CharT* beg, const CharT* end) const;
}}
{{dcl end}}

@1@ public member function, calls the protected virtual member function {{tt|do_scan_is}} of the most derived class.
@2@ Locates the first character in the character array {{tt|[beg, end)}} that satisfies the classification mask {{tt|m}}, that is, the first character {{tt|c}} such that {{c|is(m, c)}} would return {{c|true}}.

===Parameters===
{{par begin}}
{{par | m | mask to search for}}
{{par | beg | pointer to the first character in an array of characters to search }}
{{par | end | one past the end pointer for the array of characters to search }}
{{par end}}

===Return value===
Pointer to the first character in {{tt|[beg, end)}} that satisfies the mask, or {{tt|end}} if no such character was found.

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    auto&amp; f = std::use_facet&lt;std::ctype&lt;char&gt;&gt;(std::locale(&quot;&quot;));

    // skip until the first letter
    char s1[] = &quot;      \t\t\n  Test&quot;;
    const char* p1 = f.scan_is(std::ctype_base::alpha, std::begin(s1), std::end(s1));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p1 &lt;&lt; &quot;'\n&quot;;

    // skip until the first letter
    char s2[] = &quot;123456789abcd&quot;;
    const char* p2 = f.scan_is(std::ctype_base::alpha, std::begin(s2), std::end(s2));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p2 &lt;&lt; &quot;'\n&quot;;
}
 | output=
'Test'
'abcd'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_not}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/scan not</title>
    <ns>0</ns>
    <id>9827</id>
    <revision>
      <id>62069</id>
      <parentid>58099</parentid>
      <timestamp>2013-06-20T20:32:37Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1746">{{cpp/locale/ctype/title|scan_not|do_scan_not}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
const CharT* scan_not( mask m, const CharT* beg, const CharT* end ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual const CharT* do_scan_not( mask m, const CharT* beg, const CharT* end) const;
}}
{{dcl end}}

@1@ public member function, calls the protected virtual member function {{tt|do_scan_not}} of the most derived class.
@2@ Locates the first character in the character array {{tt|[beg, end)}} that does not satisfy the classification mask {{tt|m}}, that is, the first character {{tt|c}} such that {{c|is(m, c)}} would return {{c|false}}.

===Parameters===
{{par begin}}
{{par | m | mask to search for}}
{{par | beg | pointer to the first character in an array of characters to search }}
{{par | end | one past the end pointer for the array of characters to search }}
{{par end}}

===Return value===
Pointer to the first character in {{tt|[beg, end)}} that doesn't satisfy the mask, or {{tt|end}} if no such character was found.

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;

int main()
{
    auto&amp; f = std::use_facet&lt;std::ctype&lt;char&gt;&gt;(std::locale(&quot;&quot;));

    // skip leading whitespace
    char s1[] = &quot;      \t\t\n  Test&quot;;
    const char* p1 = f.scan_not(std::ctype_base::space, std::begin(s1), std::end(s1));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p1 &lt;&lt; &quot;'\n&quot;;

    // skip leading digits
    char s2[] = &quot;123456789abcd&quot;;
    const char* p2 = f.scan_not(std::ctype_base::digit, std::begin(s2), std::end(s2));
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; p2 &lt;&lt; &quot;'\n&quot;;
}
 | output=
'Test'
'abcd'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc do_scan_is}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/tolower</title>
    <ns>0</ns>
    <id>9823</id>
    <revision>
      <id>85875</id>
      <parentid>58100</parentid>
      <timestamp>2016-05-27T12:27:44Z</timestamp>
      <contributor>
        <ip>117.136.66.143</ip>
      </contributor>
      <text xml:space="preserve" bytes="2689">{{cpp/locale/ctype/title|tolower|do_tolower}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
CharT tolower( CharT c ) const;
}}
{{dcl | num=2 | 1=
public:
const CharT* tolower( CharT* beg, const CharT* end ) const;
}}
{{dcl | num=3 | 1=
protected:
virtual CharT do_tolower( CharT c ) const;
}}
{{dcl | num=4 | 1=
protected:
virtual const CharT* do_tolower( CharT* beg, const CharT* end ) const;
}}
{{dcl end}}

@1,2@ public member function, calls the protected virtual member function {{tt|do_tolower}} of the most derived class.
@3@ Converts the character {{tt|c}} to lower case if a lower case form is defined by this locale.
@4@ For every character in the character array {{tt|[beg, end)}}, for which a lower case form exists, replaces the character with that lower case form.

===Parameters===
{{par begin}}
{{par | c | character to convert}}
{{par | beg | pointer to the first character in an array of characters to convert }}
{{par | end | one past the end pointer for the array of characters to convert }}
{{par end}}

===Return value===
@1,3@ lower case character or {{tt|c}} if no lower case form is listed by this locale.
@2,4@ {{tt|end}}.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the Greek uppercase letter 'Σ' has two lowercase forms, depending on the position in a word: 'σ' and 'ς'. A call to {{tt|do_tolower}} cannot be used to obtain the correct lowercase form in this case. 

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;

void try_lower(const std::ctype&lt;wchar_t&gt;&amp; f, wchar_t c)
{
    wchar_t up = f.tolower(c);
    if (up != c) {
        std::wcout &lt;&lt; &quot;Lower case form of \'&quot; &lt;&lt; c &lt;&lt; &quot;' is &quot; &lt;&lt; up &lt;&lt; '\n';
    } else {
        std::wcout &lt;&lt; '\'' &lt;&lt; c &lt;&lt; &quot;' has no lower case form\n&quot;;
    }
}

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::wcout.imbue(std::locale());
    std::wcout &lt;&lt; &quot;In US English UTF-8 locale:\n&quot;;
    auto&amp; f = std::use_facet&lt;std::ctype&lt;wchar_t&gt;&gt;(std::locale());
    try_lower(f, L'Σ');
    try_lower(f, L'Ɛ');
    try_lower(f, L'Ａ');

    std::wstring str = L&quot;HELLo, wORLD!&quot;;
    std::wcout &lt;&lt; &quot;Lowercase form of the string '&quot; &lt;&lt; str &lt;&lt; &quot;' is &quot;;
    f.tolower(&amp;str[0], &amp;str[0] + str.size());
    std::wcout &lt;&lt; &quot;'&quot; &lt;&lt; str &lt;&lt; &quot;'\n&quot;;
}
 | output=
In US English UTF-8 locale:
Lower case form of 'Σ' is σ
Lower case form of 'Ɛ' is ɛ
Lower case form of 'Ａ' is ａ
Lowercase form of the string 'HELLo, wORLD!' is 'hello, world!'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc toupper}}
{{dsc inc | cpp/string/byte/dsc tolower}}
{{dsc inc | cpp/string/wide/dsc towlower}}
{{dsc end}}</text>
      <sha1>5agauctxljcymhy9ugv3bkf9fl57ngp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/toupper</title>
    <ns>0</ns>
    <id>9824</id>
    <revision>
      <id>62056</id>
      <parentid>58103</parentid>
      <timestamp>2013-06-20T03:03:53Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2609">{{cpp/locale/ctype/title|toupper|do_toupper}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
CharT toupper( CharT c ) const;
}}
{{dcl | num=2 | 1=
public:
const CharT* toupper( CharT* beg, const CharT* end ) const;
}}
{{dcl | num=3 | 1=
protected:
virtual CharT do_toupper( CharT c ) const;
}}
{{dcl | num=4 | 1=
protected:
virtual const CharT* do_toupper( CharT* beg, const CharT* end ) const;
}}
{{dcl end}}

@1,2@ public member function, calls the protected virtual member function {{tt|do_toupper}} of the most derived class.
@3@ Converts the character {{tt|c}} to upper case if an upper case form is defined by this locale.
@4@ For every character in the character array {{tt|[beg, end)}}, for which an upper case form exists, replaces the character with that upper case form.

===Parameters===
{{par begin}}
{{par | c | character to convert}}
{{par | beg | pointer to the first character in an array of characters to convert }}
{{par | end | one past the end pointer for the array of characters to convert }}
{{par end}}

===Return value===
@1,3@ upper case character or {{tt|c}} if no upper case form is listed by this locale.
@2,4@ {{tt|end}}.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the uppercase form of 'ß' is (with some exceptions) the two-character string &quot;SS&quot;, which cannot be obtained by {{tt|do_toupper}}.

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;

void try_upper(const std::ctype&lt;wchar_t&gt;&amp; f, wchar_t c)
{
    wchar_t up = f.toupper(c);
    if (up != c) {
        std::wcout &lt;&lt; &quot;Upper case form of \'&quot; &lt;&lt; c &lt;&lt; &quot;' is &quot; &lt;&lt; up &lt;&lt; '\n';
    } else {
        std::wcout &lt;&lt; '\'' &lt;&lt; c &lt;&lt; &quot;' has no upper case form\n&quot;;
    }
}

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::wcout.imbue(std::locale());
    std::wcout &lt;&lt; &quot;In US English UTF-8 locale:\n&quot;;
    auto&amp; f = std::use_facet&lt;std::ctype&lt;wchar_t&gt;&gt;(std::locale());
    try_upper(f, L's');
    try_upper(f, L'ſ');
    try_upper(f, L'ß');

    std::wstring str = L&quot;Hello, World!&quot;;
    std::wcout &lt;&lt; &quot;Uppercase form of the string '&quot; &lt;&lt; str &lt;&lt; &quot;' is &quot;;
    f.toupper(&amp;str[0], &amp;str[0] + str.size());
    std::wcout &lt;&lt; &quot;'&quot; &lt;&lt; str &lt;&lt; &quot;'\n&quot;;
}
 | output=
In US English UTF-8 locale:
Upper case form of 's' is S
Upper case form of 'ſ' is S
'ß' has no upper case form
Uppercase form of the string 'Hello, World!' is 'HELLO, WORLD!'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc tolower}}
{{dsc inc | cpp/string/byte/dsc toupper}}
{{dsc inc | cpp/string/wide/dsc towupper}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/widen</title>
    <ns>0</ns>
    <id>9778</id>
    <revision>
      <id>64199</id>
      <parentid>64198</parentid>
      <timestamp>2013-08-15T15:27:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="3582">{{cpp/locale/ctype/title|widen, do_widen}}
{{cpp/locale/ctype/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
CharT widen( char c ) const;
}}
{{dcl | num=2 | 1=
public:
const char* widen( const char* beg, const char* end, CharT* dst ) const;
}}
{{dcl | num=3 | 1=
protected:
virtual CharT do_widen( char c ) const;
}}
{{dcl | num=4 | 1=
protected:
virtual const char* do_widen( const char* beg, const char* end, CharT* dst ) const;
}}
{{dcl end}}

@1,2@ public member function, calls the protected virtual member function {{tt|do_widen}} of the most derived class.
@3@ Converts the single-byte character {{tt|c}} to the corresponding wide character representation using the simplest reasonable transformation. Typically, this applies only to the characters whose multibyte encoding is a single byte (e.g. U+0000-U+007F in UTF-8).
@4@ For every character in the character array {{tt|[beg, end)}}, writes the corresponding widened character to the successive locations in the character array pointed to by {{tt|dst}}.

Widening always returns a wide character, but only the characters from the basic source character set (latin letters, digits, and punctuations required to write a C++ program) are guaranteed to have a unique, well-defined, widening transformation, which is also guaranteed to be reversible (by {{lc|narrow()}}). In practice, all characters whose multibyte representation is a single byte are usually widened to their wide character counterparts, and the rest of the possible single-byte values are usually mapped into the same placeholder value, typically {{c|CharT(-1)}}.

Widening, if successful, preserves all character classification categories known to {{lc|is()}}.

===Parameters===
{{par begin}}
{{par | c | character to convert}}
{{par | dflt | default value to produce if the conversion fails}}
{{par | beg | pointer to the first character in an array of characters to convert }}
{{par | end | one past the end pointer for the array of characters to convert }}
{{par | dst | pointer to the first element of the array of char to fill }}
{{par end}}

===Return value===
@1,3@ widened character
@2,4@ {{tt|end}}

===Example===
{{example
 |
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;

void try_widen(const std::ctype&lt;wchar_t&gt;&amp; f, char c)
{
    wchar_t w = f.widen(c);
    std::cout &lt;&lt; &quot;The single-byte character &quot; &lt;&lt; +(unsigned char)c
              &lt;&lt; &quot; widens to &quot; &lt;&lt; +w &lt;&lt; '\n';
}
 
int main()
{
    std::locale::global(std::locale(&quot;cs_CZ.iso88592&quot;));
    auto&amp; f = std::use_facet&lt;std::ctype&lt;wchar_t&gt;&gt;(std::locale());
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; &quot;In Czech ISO-8859-2 locale:\n&quot;;
    try_widen(f, 'a');
    try_widen(f, '\xdf'); // German letter ß (U+00df) in ISO-8859-2
    try_widen(f, '\xec'); // Czech letter ě (U+011b) in ISO-8859-2
 
    std::locale::global(std::locale(&quot;cs_CZ.utf8&quot;));
    auto&amp; f2 = std::use_facet&lt;std::ctype&lt;wchar_t&gt;&gt;(std::locale());
    std::cout &lt;&lt; &quot;In Czech UTF-8 locale:\n&quot;;
    try_widen(f2, 'a');
    try_widen(f2, '\xdf'); 
    try_widen(f2, '\xec'); 
}
 | output=
In Czech ISO-8859-2 locale:
The single-byte character 0x61 widens to 0x61
The single-byte character 0xdf widens to 0xdf
The single-byte character 0xec widens to 0x11b
In Czech UTF-8 locale:
The single-byte character 0x61 widens to 0x61
The single-byte character 0xdf widens to 0xffffffff
The single-byte character 0xec widens to 0xffffffff
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/ctype/dsc narrow}}
{{dsc inc | cpp/io/basic_ios/dsc widen}}
{{dsc inc | cpp/string/multibyte/dsc btowc}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ctype/~ctype</title>
    <ns>0</ns>
    <id>3614</id>
    <revision>
      <id>43656</id>
      <parentid>15807</parentid>
      <timestamp>2012-11-03T03:24:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="286">{{cpp/locale/facet/destructor|ctype}}

[[de:cpp/locale/ctype/~ctype]]
[[es:cpp/locale/ctype/~ctype]]
[[fr:cpp/locale/ctype/~ctype]]
[[it:cpp/locale/ctype/~ctype]]
[[ja:cpp/locale/ctype/~ctype]]
[[pt:cpp/locale/ctype/~ctype]]
[[ru:cpp/locale/ctype/~ctype]]
[[zh:cpp/locale/ctype/~ctype]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/has facet</title>
    <ns>0</ns>
    <id>2834</id>
    <revision>
      <id>91450</id>
      <parentid>64830</parentid>
      <timestamp>2017-03-31T19:44:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1679">{{cpp/title | has_facet}}
{{cpp/locale/navbar}}
{{ddcl | header=locale |
template&lt; class Facet &gt;
bool has_facet( const locale&amp; loc );
}}

Checks if the locale {{tt|loc}} implements the facet {{tt|Facet}}.

===Parameters===
{{par begin}}
{{par | loc | the locale object to query }}
{{par end}}

===Return value===
Returns {{c|true}} if the facet {{tt|Facet}} was installed in the locale {{tt|loc}}, {{c|false}} otherwise.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

// minimal custom facet
struct myfacet : public std::locale::facet {
    static std::locale::id id;
};

std::locale::id myfacet::id;

int main()
{
    // loc is a &quot;C&quot; locale with myfacet added
    std::locale loc(std::locale::classic(), new myfacet);
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;Can loc classify chars? &quot;
              &lt;&lt; std::has_facet&lt;std::ctype&lt;char&gt;&gt;(loc) &lt;&lt; '\n'
              &lt;&lt; &quot;Can loc classify char32_t? &quot;
              &lt;&lt; std::has_facet&lt;std::ctype&lt;char32_t&gt;&gt;(loc) &lt;&lt; '\n'
              &lt;&lt; &quot;Does loc implement myfacet? &quot;
              &lt;&lt; std::has_facet&lt;myfacet&gt;(loc) &lt;&lt; '\n';
}
 | output=
Can loc classify chars? true
Can loc classify char32_t? false
Does loc implement myfacet? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc locale}}
{{dsc inc | cpp/locale/dsc use_facet}}
{{dsc end}}

[[de:cpp/locale/has facet]]
[[es:cpp/locale/has facet]]
[[fr:cpp/locale/has facet]]
[[it:cpp/locale/has facet]]
[[ja:cpp/locale/has facet]]
[[pt:cpp/locale/has facet]]
[[ru:cpp/locale/has facet]]
[[zh:cpp/locale/has facet]]</text>
      <sha1>fzc7pkj5b8gz0p2qjrfbnpce9cm0qas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isalnum</title>
    <ns>0</ns>
    <id>2938</id>
    <revision>
      <id>72546</id>
      <parentid>58116</parentid>
      <timestamp>2014-09-03T04:35:45Z</timestamp>
      <contributor>
        <ip>60.240.174.156</ip>
      </contributor>
      <text xml:space="preserve" bytes="1671">{{cpp/title | isalnum{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isalnum( charT ch, const locale&amp; loc );
}}

Checks if the given character classified as an alphanumeric character by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as alphanumeric, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isalnum( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::alnum, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of isalnum() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t c = L'\u2135'; // mathematical symbol aleph

    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;isalnum('ℵ', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isalnum(c, loc1) &lt;&lt; '\n';

    std::locale loc2(&quot;en_US.UTF-8&quot;);
    std::cout &lt;&lt; &quot;isalnum('ℵ', Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isalnum(c, loc2) &lt;&lt; '\n';
}
 | output=
isalnum('ℵ​', C locale) returned false
isalnum('ℵ', Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isalnum}}
{{dsc inc | cpp/string/wide/dsc iswalnum}}
{{dsc end}}

[[de:cpp/locale/isalnum]]
[[es:cpp/locale/isalnum]]
[[fr:cpp/locale/isalnum]]
[[it:cpp/locale/isalnum]]
[[ja:cpp/locale/isalnum]]
[[pt:cpp/locale/isalnum]]
[[ru:cpp/locale/isalnum]]
[[zh:cpp/locale/isalnum]]</text>
      <sha1>bkrxngwz71sw0kq0zj57xvl6u16mf97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isalpha</title>
    <ns>0</ns>
    <id>2812</id>
    <revision>
      <id>76922</id>
      <parentid>58119</parentid>
      <timestamp>2015-03-06T19:25:45Z</timestamp>
      <contributor>
        <username>Frog</username>
        <id>3671</id>
      </contributor>
      <comment>Grammar fix</comment>
      <text xml:space="preserve" bytes="1669">{{cpp/title | isalpha{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isalpha( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as an alphabetic character by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as alphabetic, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isalpha( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::alpha, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of isalpha() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t c = L'\u042f'; // cyrillic capital letter ya

    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;isalpha('Я​', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isalpha(c, loc1) &lt;&lt; '\n';

    std::locale loc2(&quot;en_US.UTF8&quot;);
    std::cout &lt;&lt; &quot;isalpha('Я', Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isalpha(c, loc2) &lt;&lt; '\n';
}
 | output=
isalpha('Я​', C locale) returned false
isalpha('Я', Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isalpha}}
{{dsc inc | cpp/string/wide/dsc iswalpha}}
{{dsc end}}

[[de:cpp/locale/isalpha]]
[[es:cpp/locale/isalpha]]
[[fr:cpp/locale/isalpha]]
[[it:cpp/locale/isalpha]]
[[ja:cpp/locale/isalpha]]
[[pt:cpp/locale/isalpha]]
[[ru:cpp/locale/isalpha]]
[[zh:cpp/locale/isalpha]]</text>
      <sha1>pof1wpsnu59gg34l8he2zoxogo8x91e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isblank</title>
    <ns>0</ns>
    <id>2933</id>
    <revision>
      <id>63761</id>
      <parentid>63331</parentid>
      <timestamp>2013-07-24T13:04:35Z</timestamp>
      <contributor>
        <ip>81.68.113.129</ip>
      </contributor>
      <comment>what was the template trying to catch?</comment>
      <text xml:space="preserve" bytes="1663">{{cpp/title | isblank{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale | since=c++11 |
template&lt; class charT &gt;
bool isblank( charT ch, const locale&amp; loc );
}}


Checks if the given character is classified as a blank character by the given locale's ctype facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as a blank character, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isblank( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::blank, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of isblank() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

void try_with(wchar_t c, const char* loc)
{
    std::wcout &lt;&lt; &quot;isblank('&quot; &lt;&lt; c &lt;&lt; &quot;', locale(\&quot;&quot; &lt;&lt; loc &lt;&lt; &quot;\&quot;)) returned &quot; &lt;&lt; std::boolalpha
               &lt;&lt; std::isblank(c, std::locale(loc)) &lt;&lt; '\n';
}
int main()
{
    const wchar_t IDEO_SPACE = L'\u3000'; // Unicode character 'IDEOGRAPHIC SPACE'
    try_with(IDEO_SPACE, &quot;C&quot;);
    try_with(IDEO_SPACE, &quot;en_US.UTF-8&quot;);
}
 | output=
isblank(' ', locale(&quot;C&quot;)) returned false
isblank(' ', locale(&quot;en_US.UTF-8&quot;)) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isblank}}
{{dsc inc | cpp/string/wide/dsc iswblank}}
{{dsc end}}

[[de:cpp/locale/isblank]]
[[es:cpp/locale/isblank]]
[[fr:cpp/locale/isblank]]
[[it:cpp/locale/isblank]]
[[ja:cpp/locale/isblank]]
[[pt:cpp/locale/isblank]]
[[ru:cpp/locale/isblank]]
[[zh:cpp/locale/isblank]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/iscntrl</title>
    <ns>0</ns>
    <id>2808</id>
    <revision>
      <id>76928</id>
      <parentid>58121</parentid>
      <timestamp>2015-03-07T15:03:57Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>English grammar</comment>
      <text xml:space="preserve" bytes="1675">{{cpp/title | iscntrl{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool iscntrl( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as a control character by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as a control character, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool iscntrl( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::cntrl, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of iscntrl() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t CCH = L'\u0094'; // Destructive Backspace in Unicode

    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;iscntrl(CCH, C locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::iscntrl(CCH, loc1) &lt;&lt; '\n';

    std::locale loc2(&quot;en_US.UTF8&quot;);
    std::cout &lt;&lt; &quot;iscntrl(CCH, Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::iscntrl(CCH, loc2) &lt;&lt; '\n';
}
 | output=
iscntrl(CCH, C locale) returned false
iscntrl(CCH, Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc iscntrl}}
{{dsc inc | cpp/string/wide/dsc iswcntrl}}
{{dsc end}}

[[de:cpp/locale/iscntrl]]
[[es:cpp/locale/iscntrl]]
[[fr:cpp/locale/iscntrl]]
[[it:cpp/locale/iscntrl]]
[[ja:cpp/locale/iscntrl]]
[[pt:cpp/locale/iscntrl]]
[[ru:cpp/locale/iscntrl]]
[[zh:cpp/locale/iscntrl]]</text>
      <sha1>4c8ned25x51v3gzkswtbsd5md4xw8ze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isdigit</title>
    <ns>0</ns>
    <id>2927</id>
    <revision>
      <id>63904</id>
      <parentid>63903</parentid>
      <timestamp>2013-08-01T01:40:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>bool main?? anyway, let's show an example that actually makes use of the locale</comment>
      <text xml:space="preserve" bytes="2043">{{cpp/title | isdigit{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isdigit( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as a digit by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as a digit, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isdigit( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::digit, ch);
}
}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;string&gt;
#include &lt;set&gt;

struct jdigit_ctype : std::ctype&lt;wchar_t&gt;
{
    std::set&lt;wchar_t&gt; jdigits{L'一',L'二',L'三',L'四',L'五',L'六',L'七',L'八',L'九',L'十'};
    bool do_is(mask m, char_type c) const {
        if ((m &amp; digit) &amp;&amp; jdigits.count(c))
            return true; // Japanese digits will be classified as digits
        return ctype::do_is(m, c); // leave the rest to the parent class
    }
};

int main()
{

    std::wstring text = L&quot;123一二三１２３&quot;;
    std::locale loc(std::locale(&quot;&quot;), new jdigit_ctype);

    std::locale::global(std::locale(&quot;&quot;));
    std::wcout.imbue(std::locale());

    for(wchar_t c : text)
        if(std::isdigit(c, loc))
            std::wcout &lt;&lt; c &lt;&lt; &quot; is a digit\n&quot;;
        else
            std::wcout &lt;&lt; c &lt;&lt; &quot; is NOT a digit\n&quot;;
}
 | output=
1 is a digit
2 is a digit
3 is a digit
一 is a digit
二 is a digit
三 is a digit
１ is NOT a digit
２ is NOT a digit
３ is NOT a digit
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isdigit}}
{{dsc inc | cpp/string/wide/dsc iswdigit}}
{{dsc end}}

[[de:cpp/locale/isdigit]]
[[es:cpp/locale/isdigit]]
[[fr:cpp/locale/isdigit]]
[[it:cpp/locale/isdigit]]
[[ja:cpp/locale/isdigit]]
[[pt:cpp/locale/isdigit]]
[[ru:cpp/locale/isdigit]]
[[zh:cpp/locale/isdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isgraph</title>
    <ns>0</ns>
    <id>2940</id>
    <revision>
      <id>58125</id>
      <parentid>50016</parentid>
      <timestamp>2013-06-01T06:08:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1684">{{cpp/title | isgraph{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isgraph( charT ch, const locale&amp; loc );
}}

Checks if the given character classified as a graphic character (i.e. printable, excluding space) by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as graphic, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isgraph( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::graph, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of isgraph() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t c = L'\u2a0c'; // quadruple integral

    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;isgraph('⨌', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isgraph(c, loc1) &lt;&lt; '\n';

    std::locale loc2(&quot;en_US.UTF-8&quot;);
    std::cout &lt;&lt; &quot;isgraph('⨌', Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isgraph(c, loc2) &lt;&lt; '\n';
}
 | output=
isgraph('⨌', C locale) returned false
isgraph('⨌', Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isgraph}}
{{dsc inc | cpp/string/wide/dsc iswgraph}}
{{dsc end}}

[[de:cpp/locale/isgraph]]
[[es:cpp/locale/isgraph]]
[[fr:cpp/locale/isgraph]]
[[it:cpp/locale/isgraph]]
[[ja:cpp/locale/isgraph]]
[[pt:cpp/locale/isgraph]]
[[ru:cpp/locale/isgraph]]
[[zh:cpp/locale/isgraph]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/islower</title>
    <ns>0</ns>
    <id>2810</id>
    <revision>
      <id>76925</id>
      <parentid>58126</parentid>
      <timestamp>2015-03-07T14:50:46Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>English grammar</comment>
      <text xml:space="preserve" bytes="1680">{{cpp/title | islower{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool islower( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as a lowercase alphabetic character by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as lowercase, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool islower( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::lower, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of islower() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t c = L'\u03c0'; // greek small letter pi
 
    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;islower('π​', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::islower(c, loc1) &lt;&lt; '\n';
 
    std::locale loc2(&quot;en_US.UTF8&quot;);
    std::cout &lt;&lt; &quot;islower('π​', Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::islower(c, loc2) &lt;&lt; '\n';
}
 | output=
islower('π​', C locale) returned false
islower('π​', Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc islower}}
{{dsc inc | cpp/string/wide/dsc iswlower}}
{{dsc end}}

[[de:cpp/locale/islower]]
[[es:cpp/locale/islower]]
[[fr:cpp/locale/islower]]
[[it:cpp/locale/islower]]
[[ja:cpp/locale/islower]]
[[pt:cpp/locale/islower]]
[[ru:cpp/locale/islower]]
[[zh:cpp/locale/islower]]</text>
      <sha1>7xfnkeq1ygyfted47xbnk4wcn5hs85z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isprint</title>
    <ns>0</ns>
    <id>2939</id>
    <revision>
      <id>58129</id>
      <parentid>50018</parentid>
      <timestamp>2013-06-01T06:08:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1668">{{cpp/title | isprint{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isprint( charT ch, const locale&amp; loc );
}}

Checks if the given character classified as a printable character (including space) by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as printable, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isprint( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::print, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of isprint() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t c = L'\u2122'; // trademark sign

    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;isprint('™', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isprint(c, loc1) &lt;&lt; '\n';

    std::locale loc2(&quot;en_US.UTF-8&quot;);
    std::cout &lt;&lt; &quot;isprint('™', Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isprint(c, loc2) &lt;&lt; '\n';
}
 | output=
isprint('™', C locale) returned false
isprint('™', Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isprint}}
{{dsc inc | cpp/string/wide/dsc iswprint}}
{{dsc end}}

[[de:cpp/locale/isprint]]
[[es:cpp/locale/isprint]]
[[fr:cpp/locale/isprint]]
[[it:cpp/locale/isprint]]
[[ja:cpp/locale/isprint]]
[[pt:cpp/locale/isprint]]
[[ru:cpp/locale/isprint]]
[[zh:cpp/locale/isprint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/ispunct</title>
    <ns>0</ns>
    <id>2934</id>
    <revision>
      <id>58130</id>
      <parentid>50019</parentid>
      <timestamp>2013-06-01T06:08:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1665">{{cpp/title | ispunct{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool ispunct( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as an punctuation character by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as punctuation, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool ispunct( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::punct, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of ispunct() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t c = L'\u214b'; // upside-down ampersand

    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;ispunct('⅋', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::ispunct(c, loc1) &lt;&lt; '\n';

    std::locale loc2(&quot;en_US.UTF-8&quot;);
    std::cout &lt;&lt; &quot;ispunct('⅋', Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::ispunct(c, loc2) &lt;&lt; '\n';
}
 | output=
isalpha('⅋', C locale) returned false
isalpha('⅋', Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc ispunct}}
{{dsc inc | cpp/string/wide/dsc iswpunct}}
{{dsc end}}

[[de:cpp/locale/ispunct]]
[[es:cpp/locale/ispunct]]
[[fr:cpp/locale/ispunct]]
[[it:cpp/locale/ispunct]]
[[ja:cpp/locale/ispunct]]
[[pt:cpp/locale/ispunct]]
[[ru:cpp/locale/ispunct]]
[[zh:cpp/locale/ispunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isspace</title>
    <ns>0</ns>
    <id>2774</id>
    <revision>
      <id>76927</id>
      <parentid>62463</parentid>
      <timestamp>2015-03-07T14:51:50Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>English grammar</comment>
      <text xml:space="preserve" bytes="1642">{{cpp/title | isspace{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isspace( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as a whitespace character by the given locale's ctype facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as a whitespace character, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isspace( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::space, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of isspace() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

void try_with(wchar_t c, const char* loc)
{
    std::wcout &lt;&lt; &quot;isspace('&quot; &lt;&lt; c &lt;&lt; &quot;', locale(\&quot;&quot; &lt;&lt; loc &lt;&lt; &quot;\&quot;)) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isspace(c, std::locale(loc)) &lt;&lt; '\n';
}

int main()
{
    const wchar_t EM_SPACE = L'\u2003'; // Unicode character 'EM SPACE'
    try_with(EM_SPACE, &quot;C&quot;);
    try_with(EM_SPACE, &quot;en_US.UTF8&quot;);
}
 | output=
isspace(' ', locale(&quot;C&quot;)) returned false
isspace(' ', locale(&quot;en_US.UTF8&quot;)) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isspace}}
{{dsc inc | cpp/string/wide/dsc iswspace}}
{{dsc end}}

[[de:cpp/locale/isspace]]
[[es:cpp/locale/isspace]]
[[fr:cpp/locale/isspace]]
[[it:cpp/locale/isspace]]
[[ja:cpp/locale/isspace]]
[[pt:cpp/locale/isspace]]
[[ru:cpp/locale/isspace]]
[[zh:cpp/locale/isspace]]</text>
      <sha1>mjvduyi5keom47gxm1nvz8tc3z8ousq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isupper</title>
    <ns>0</ns>
    <id>2809</id>
    <revision>
      <id>76929</id>
      <parentid>58134</parentid>
      <timestamp>2015-03-07T15:05:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>English grammar</comment>
      <text xml:space="preserve" bytes="1666">{{cpp/title | isupper{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isupper( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as an uppercase alphabetic character by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as uppercase, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isupper( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::upper, ch);
}
}}

===Example===
{{example
 | Demonstrates the use of isupper() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const wchar_t c = L'\u00de'; // capital letter thorn

    std::locale loc1(&quot;C&quot;);
    std::cout &lt;&lt; &quot;isupper('Þ', C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; std::isupper(c, loc1) &lt;&lt; '\n';

    std::locale loc2(&quot;en_US.UTF8&quot;);
    std::cout &lt;&lt; &quot;isupper('Þ', Unicode locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; std::isupper(c, loc2) &lt;&lt; '\n';
}
 | output=
isupper('Þ', C locale) returned false
isupper('Þ', Unicode locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isupper}}
{{dsc inc | cpp/string/wide/dsc iswupper}}
{{dsc end}}

[[de:cpp/locale/isupper]]
[[es:cpp/locale/isupper]]
[[fr:cpp/locale/isupper]]
[[it:cpp/locale/isupper]]
[[ja:cpp/locale/isupper]]
[[pt:cpp/locale/isupper]]
[[ru:cpp/locale/isupper]]
[[zh:cpp/locale/isupper]]</text>
      <sha1>7ekko2ajz8ylfsxgjed0tw00kzbh88x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/isxdigit</title>
    <ns>0</ns>
    <id>2937</id>
    <revision>
      <id>58137</id>
      <parentid>50022</parentid>
      <timestamp>2013-06-01T06:08:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1102">{{cpp/title | isxdigit{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
bool isxdigit( charT ch, const locale&amp; loc );
}}

Checks if the given character is classified as a hexadecimal digit by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===

Returns {{c|true}} if the character is classified as a hexadecimal digit, {{c|false}} otherwise.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
bool isxdigit( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).is(std::ctype_base::xdigit, ch);
}
}}

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc isxdigit}}
{{dsc inc | cpp/string/wide/dsc iswxdigit}}
{{dsc end}}

[[de:cpp/locale/isxdigit]]
[[es:cpp/locale/isxdigit]]
[[fr:cpp/locale/isxdigit]]
[[it:cpp/locale/isxdigit]]
[[ja:cpp/locale/isxdigit]]
[[pt:cpp/locale/isxdigit]]
[[ru:cpp/locale/isxdigit]]
[[zh:cpp/locale/isxdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/lconv</title>
    <ns>0</ns>
    <id>5136</id>
    <revision>
      <id>89617</id>
      <parentid>89614</parentid>
      <timestamp>2017-01-22T18:56:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 89614 by [[Special:Contributions/160.176.59.6|160.176.59.6]] ([[User talk:160.176.59.6|talk]]) std says nonnegative</comment>
      <text xml:space="preserve" bytes="6341">{{cpp/title | lconv}}
{{cpp/locale/locale/navbar}}
{{dcl begin}}
{{dcl header | clocale}}
{{dcl | 1=
struct lconv;
}}
{{dcl end}}

The class {{tt|std::lconv}} contains numeric and monetary formatting rules as defined by a C locale. Objects of this struct may be obtained with {{lc|std::localeconv}}. The members of {{tt|std::lconv}} are values of type {{c|char}} and of type {{c|char*}}. Each {{c|char*}} member except {{tt|decimal_point}} may be pointing at a null character (that is, at an empty C-string). The members of type {{c|char}} are all non-negative numbers, any of which may be {{lc|CHAR_MAX}} if the corresponding value is not available in the current C locale.

===Member objects===
====Non-monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} decimal_point | the character used as the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} thousands_sep | the character used to separate groups of digits before the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} grouping | a string whose elements indicate the sizes of digit groups}}
{{dsc end}}
====Monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} mon_decimal_point | the character used as the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} mon_thousands_sep | the character used to separate groups of digits before the decimal point}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} mon_grouping | a string whose elements indicate the sizes of digit groups}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} positive_sign | a string used to indicate non-negative monetary quantity}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} negative_sign | a string used to indicate negative monetary quantity}}
{{dsc end}}
====Local monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} currency_symbol | the symbol used for currency in the current C locale}}
{{dsc mem obj | nolink=true | {{dsc small|char}} frac_digits | the number of digits after the decimal point to display in a monetary quantity}}
{{dsc mem obj | nolink=true | {{dsc small|char}} p_cs_precedes | {{c|1}} if currency_symbol is placed before non-negative value, {{c|0}} if after}}
{{dsc mem obj | nolink=true | {{dsc small|char}} n_cs_precedes | {{c|1}} if currency_symbol is placed before negative value, {{c|0}} if after}}
{{dsc mem obj | nolink=true | {{dsc small|char}} p_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|positive_sign}}, and the non-negative monetary value}}
{{dsc mem obj | nolink=true | {{dsc small|char}} n_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|negative_sign}}, and the negative monetary value}}
{{dsc mem obj | nolink=true | {{dsc small|char}} p_sign_posn | indicates the position of {{tt|positive_sign}} in a non-negative monetary value}}
{{dsc mem obj | nolink=true | {{dsc small|char}} n_sign_posn | indicates the position of {{tt|negative_sign}} in a negative monetary value}}
{{dsc end}}
====International monetary numeric formatting parameters====
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|char*}} int_curr_symbol | the string used as international currency name in the current C locale}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_frac_digits | the number of digits after the decimal point to display in an international monetary quantity}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_p_cs_precedes | {{c|1}} if currency_symbol is placed before non-negative international monetary value, {{c|0}} if after|notes={{mark c++11}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_n_cs_precedes | {{c|1}} if currency_symbol is placed before negative international monetary value, {{c|0}} if after|notes={{mark c++11}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_p_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|positive_sign}}, and the non-negative international monetary value|notes={{mark c++11}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_n_sep_by_space | indicates the separation of {{tt|currency_symbol}}, {{tt|negative_sign}}, and the negative international monetary value|notes={{mark c++11}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_p_sign_posn | indicates the position of {{tt|positive_sign}} in a non-negative international monetary value|notes={{mark c++11}}}}
{{dsc mem obj | nolink=true | {{dsc small|char}} int_n_sign_posn | indicates the position of {{tt|negative_sign}} in a negative international monetary value|notes={{mark c++11}}}}
{{dsc end}}


The characters of the C-strings pointed to by {{tt|grouping}} and {{tt|mon_grouping}} are interpreted according to their numeric values. When the terminating {{c|'\0'}} is encountered, the last value seen is assumed to repeat for the remainder of digits. If {{lc|CHAR_MAX}} is encountered, no further digits are grouped. the typical grouping of three digits at a time is {{c|&quot;\003&quot;}}.

The values of {{tt|p_sep_by_space}}, {{tt|n_sep_by_space}}, {{tt|int_p_sep_by_space}}, {{tt|int_n_sep_by_space}} are interpreted as follows:
{{dsc begin}}
{{dsc|0|no space separates the currency symbol and the value}}
{{dsc|1|sign sticks to the currency symbol, value is separated by a space}}
{{dsc|2|sign sticks to the value. Currency symbol is separated by a space}}
{{dsc end}}

The values of {{tt|p_sign_posn}}, {{tt|n_sign_posn}}, {{tt|int_p_sign_posn}}, {{tt|int_n_sign_posn}} are interpreted as follows:
{{dsc begin}}
{{dsc|0|parentheses around the value and the currency symbol are used to represent the sign}}
{{dsc|1|sign before the value and the currency symbol}}
{{dsc|2|sign after the value and the currency symbol}}
{{dsc|3|sign before the currency symbol}}
{{dsc|4|sign after the currency symbol}}
{{dsc end}}

===Example===
{{include| cpp/locale/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc localeconv}}
{{dsc inc | cpp/locale/dsc numpunct}}
{{dsc inc | cpp/locale/dsc moneypunct}}
{{dsc see c | c/locale/lconv}}
{{dsc end}}

[[de:cpp/locale/lconv]]
[[es:cpp/locale/lconv]]
[[fr:cpp/locale/lconv]]
[[it:cpp/locale/lconv]]
[[ja:cpp/locale/lconv]]
[[pt:cpp/locale/lconv]]
[[ru:cpp/locale/lconv]]
[[zh:cpp/locale/lconv]]</text>
      <sha1>obu411t83fvtdy5jqra5p0df2fhagxv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale</title>
    <ns>0</ns>
    <id>2786</id>
    <revision>
      <id>82215</id>
      <parentid>74147</parentid>
      <timestamp>2015-12-07T02:25:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p=true</comment>
      <text xml:space="preserve" bytes="5200">{{cpp/title | locale}}
{{cpp/locale/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class locale;
}}
{{dcl end}}

An object of class {{tt|std::locale}} is an immutable indexed set of immutable facets. Each stream object of the C++ input/output library is associated with an {{tt|std::locale}} object and uses its facets for parsing and formatting of all data. In addition, a locale object is associated with each {{lc|std::basic_regex}} object. Locale objects can also be used as predicates that perform string collation with the standard containers and algorithms and can be accessed directly to obtain or modify the facets they hold.

Each locale constructed in a C++ program holds at least the following standard facets, but a program may define additional specializations or completely new facets and add them to any existing locale object. 

{| class=&quot;wikitable&quot; style=&quot;font-size:0.85em&quot;
! colspan=2 | Supported facets
|-
| {{c|std::collate&lt;char&gt;}}
| {{c|std::collate&lt;wchar_t&gt;}}
|-
| {{c|std::ctype&lt;char&gt;}}
| {{c|std::ctype&lt;wchar_t&gt;}}
|-
| {{c|std::codecvt&lt;char,char,mbstate_t&gt;}}&lt;br&gt;{{c|std::codecvt&lt;char16_t,char,mbstate_t&gt;}} 
| {{c|std::codecvt&lt;char32_t,char,mbstate_t&gt;}}&lt;br&gt; {{c|std::codecvt&lt;wchar_t,char,mbstate_t&gt;}}
|-
| {{c|std::moneypunct&lt;char&gt;}} &lt;br&gt;{{c|std::moneypunct&lt;char,true&gt;}}
| {{c|std::moneypunct&lt;wchar_t&gt;}}&lt;br&gt; {{c|std::moneypunct&lt;wchar_t,true&gt;}}
|-
| {{c|std::money_get&lt;char&gt;}}
| {{c|std::money_get&lt;wchar_t&gt;}}
|-
| {{c|std::money_put&lt;char&gt;}}
| {{c|std::money_put&lt;wchar_t&gt;}}
|-
| {{c|std::numpunct&lt;char&gt;}}
| {{c|std::numpunct&lt;wchar_t&gt;}}
|- 
| {{c|std::num_get&lt;char&gt;}}
| {{c|std::num_get&lt;wchar_t&gt;}}
|-
| {{c|std::num_put&lt;char&gt;}}
| {{c|std::num_put&lt;wchar_t&gt;}}
|-
| {{c|std::time_get&lt;char&gt;}}
| {{c|std::time_get&lt;wchar_t&gt;}}
|-
| {{c|std::time_put&lt;char&gt;}}
| {{c|std::time_put&lt;wchar_t&gt;}}
|-
| {{c|std::messages&lt;char&gt;}}
| {{c|std::messages&lt;wchar_t&gt;}}
|}

Internally, a locale object is implemented as-if it is a reference-counted pointer to an array (indexed by {{lc|std::locale::id}}) of reference-counted pointers to facets: copying a locale only copies one pointer and increments several reference counts. To maintain the standard C++ library thread safety guarantees (operations on different objects are always thread-safe), both the locale reference count and each facet reference count are updated in thread-safe manner, similar to {{lc|std::shared_ptr}}.

===Member types===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc id}}
{{dsc inc | cpp/locale/locale/dsc facet}}
{{dsc typedef | nolink=true | category | {{c|int}} }}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | none | a zero value of type {{tt|category}} indicating no facet category }}
{{dsc mem sconst | nolink=true | collate | a bitmask value of type {{tt|category}} indicating the collate facet category }}
{{dsc mem sconst | nolink=true | ctype | a bitmask value of type {{tt|category}} indicating the ctype facet category }}
{{dsc mem sconst | nolink=true | monetary | a bitmask value of type {{tt|category}} indicating the monetary facet category }}
{{dsc mem sconst | nolink=true | numeric | a bitmask value of type {{tt|category}} indicating the numeric facet category }}
{{dsc mem sconst | nolink=true | time | a bitmask value of type {{tt|category}} indicating the time facet category }}
{{dsc mem sconst | nolink=true | messages | a bitmask value of type {{tt|category}} indicating the messages facet category }}
{{dsc mem sconst | nolink=true | all | {{c|collate {{!}} ctype {{!}} monetary {{!}} numeric {{!}} time {{!}} messages}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc locale}}
{{dsc inc | cpp/locale/locale/dsc ~locale}}
{{dsc inc | cpp/locale/locale/dsc operator{{=}} }}
{{dsc inc | cpp/locale/locale/dsc combine}}
{{dsc inc | cpp/locale/locale/dsc name}}
{{dsc inc | cpp/locale/locale/dsc operator_cmp}}
{{dsc inc | cpp/locale/locale/dsc operator()}}
{{dsc inc | cpp/locale/locale/dsc global}}
{{dsc inc | cpp/locale/locale/dsc classic}}
{{dsc end}}

===Example===
{{example
 | Demonstrates the typical prologue of a locale-sensitive program (cross-platform)
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    std::wcout &lt;&lt; &quot;User-preferred locale setting is &quot; &lt;&lt; std::locale(&quot;&quot;).name().c_str() &lt;&lt; '\n';
    // on startup, the global locale is the &quot;C&quot; locale
    std::wcout &lt;&lt; 1000.01 &lt;&lt; '\n';
    // replace the C++ global locale as well as the C locale with the user-preferred locale
    std::locale::global(std::locale(&quot;&quot;));
    // use the new global locale for future wide character output
    std::wcout.imbue(std::locale());
    // output the same number again
    std::wcout &lt;&lt; 1000.01 &lt;&lt; '\n';
}
|p=true
 | output=
User-preferred locale setting is en_US.UTF8
1000.01
1,000.01
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc use_facet}}
{{dsc inc | cpp/locale/dsc has_facet}}
{{dsc inc | cpp/io/ios_base/dsc imbue}}
{{dsc inc | cpp/io/ios_base/dsc getloc}}
{{dsc end}}

[[de:cpp/locale/locale]]
[[es:cpp/locale/locale]]
[[fr:cpp/locale/locale]]
[[it:cpp/locale/locale]]
[[ja:cpp/locale/locale]]
[[pt:cpp/locale/locale]]
[[ru:cpp/locale/locale]]
[[zh:cpp/locale/locale]]</text>
      <sha1>8tdpgjkg4qyi6dl7w3qfdndvfqnlh2s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/classic</title>
    <ns>0</ns>
    <id>2880</id>
    <revision>
      <id>58142</id>
      <parentid>50025</parentid>
      <timestamp>2013-06-01T06:08:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1086">{{cpp/locale/locale/title | classic}}
{{cpp/locale/locale/navbar}}

{{ddcl | header=locale |
static const locale&amp; classic();
}}

Obtains a reference to the C++ locale that implements the classic &quot;C&quot; locale semantics. This locale, unlike the global locale, cannot be altered. 

===Parameters===
none

===Return value===
Returns a reference to the &quot;C&quot; locale.

===Notes===
Some of the standard-required facets, such as the UTF-8/UTF-32 conversion facet {{c|std::codecvt&lt;char32_t, char, std::mbstate_t&gt;}}, have no equivalents in the &quot;C&quot; locale, but they are nevertheless present in the locale returned by {{c|std::locale::classic()}}, as in any other locale constructed in a C++ program.

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc global}}
{{dsc end}}

[[de:cpp/locale/locale/classic]]
[[es:cpp/locale/locale/classic]]
[[fr:cpp/locale/locale/classic]]
[[it:cpp/locale/locale/classic]]
[[ja:cpp/locale/locale/classic]]
[[pt:cpp/locale/locale/classic]]
[[ru:cpp/locale/locale/classic]]
[[zh:cpp/locale/locale/classic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/combine</title>
    <ns>0</ns>
    <id>2925</id>
    <revision>
      <id>58145</id>
      <parentid>50026</parentid>
      <timestamp>2013-06-01T06:08:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1237">{{cpp/locale/locale/title | combine}}
{{cpp/locale/locale/navbar}}

{{ddcl | header=locale |
template&lt; class Facet &gt;
locale combine( const locale&amp; other ) const;
}}

Constructs a locale object which is a copy of {{c|*this}} except for the facet of type {{tt|Facet}}, which is copied from {{tt|other}}.

===Return value===
The new, nameless, locale.

===Exceptions===
{{lc|std::runtime_error}} if {{tt|other}} does not implement {{tt|Facet}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    const double number = 1000.25;
    std::cout &lt;&lt; &quot;\&quot;C\&quot; locale: &quot; &lt;&lt; number &lt;&lt; '\n';
    std::locale loc = std::locale().combine&lt;std::numpunct&lt;char&gt;&gt;(std::locale(&quot;en_US.UTF8&quot;));
    std::cout.imbue(loc);
    std::cout &lt;&lt; &quot;\&quot;C\&quot; locale with en_US numpunct: &quot; &lt;&lt; number &lt;&lt; '\n';
}
 | output=
&quot;C&quot; locale: 1000.25
&quot;C&quot; locale with en_US numpunct: 1,000.25
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc locale}}
{{dsc end}}

[[de:cpp/locale/locale/combine]]
[[es:cpp/locale/locale/combine]]
[[fr:cpp/locale/locale/combine]]
[[it:cpp/locale/locale/combine]]
[[ja:cpp/locale/locale/combine]]
[[pt:cpp/locale/locale/combine]]
[[ru:cpp/locale/locale/combine]]
[[zh:cpp/locale/locale/combine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/facet</title>
    <ns>0</ns>
    <id>2953</id>
    <revision>
      <id>58146</id>
      <parentid>50027</parentid>
      <timestamp>2013-06-01T06:08:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1523">{{cpp/locale/locale/title | facet}}
{{cpp/locale/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class locale::facet;
}}
{{dcl end}}

{{lc|std::locale::facet}} is the base class for facets. It provides a common base class so that locales could store pointers to the facets they implement in a single indexed container, and it abstracts support for facet reference counting. Whenever a facet is added to a locale, the locale increments the reference count in the facet (through an implementation-specific mechanism). Whenever a locale is destructed or modified, it decrements the reference count in each facet it no longer implements. Whenever a facet's reference count becomes zero, the locale performs {{c|delete static_cast&lt;std::locale::facet*&gt;(f)}} where {{tt|f}} is the pointer to the facet.

===Member functions===
{{dsc begin}}
{{dsc prot mem ctor | cpp/locale/locale/facet/facet | constructs a new facet with specified reference count }}
{{dsc prot mem fun | nolink=true | operator{{=}} | the copy assignment operator is deleted }}
{{dsc prot mem vdtor | nolink=true | the destructor is protected virtual}}
{{dsc end}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc id}}
{{dsc end}}

[[de:cpp/locale/locale/facet]]
[[es:cpp/locale/locale/facet]]
[[fr:cpp/locale/locale/facet]]
[[it:cpp/locale/locale/facet]]
[[ja:cpp/locale/locale/facet]]
[[pt:cpp/locale/locale/facet]]
[[ru:cpp/locale/locale/facet]]
[[zh:cpp/locale/locale/facet]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/facet/facet</title>
    <ns>0</ns>
    <id>2954</id>
    <revision>
      <id>50028</id>
      <parentid>43501</parentid>
      <timestamp>2013-06-01T03:09:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="883">{{cpp/locale/facet/title | facet}}
{{cpp/locale/locale/navbar}}

{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
explicit facet( std::size_t refs = 0 );
}}
{{dcl | num=2 | 1=
facet(const facet&amp;) = delete;
}}
{{dcl end}}

1) creates a facet with starting reference count {{tt|refs}}. If {{tt|refs}} is non-zero, the facet will not be deleted when the last locale referencing it goes out of scope. A facet with static or dynamic storage duration should always be constructed with a non-zero {{tt|refs}}.

2) copy constructor is deleted; {{lc|std::locale::facet}} is not copyable.

[[de:cpp/locale/locale/facet/facet]]
[[es:cpp/locale/locale/facet/facet]]
[[fr:cpp/locale/locale/facet/facet]]
[[it:cpp/locale/locale/facet/facet]]
[[ja:cpp/locale/locale/facet/facet]]
[[pt:cpp/locale/locale/facet/facet]]
[[ru:cpp/locale/locale/facet/facet]]
[[zh:cpp/locale/locale/facet/facet]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/global</title>
    <ns>0</ns>
    <id>2891</id>
    <revision>
      <id>58147</id>
      <parentid>50029</parentid>
      <timestamp>2013-06-01T06:09:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1186">{{cpp/locale/locale/title | global}}
{{cpp/locale/locale/navbar}}

{{ddcl | header=locale |
static locale global( const locale&amp; loc );
}}

Replaces the global C++ locale with {{tt|loc}}, which means all future calls to the {{lc|std::locale}} default constructor will now return a copy of {{tt|loc}}. If {{tt|loc}} has a name, also replaces the C locale as if by {{c|1=std::setlocale(LC_ALL, loc.name().c_str());}}. This function is the only way to modify the global C++ locale, which is otherwise equivalent to {{c|std::locale::classic()}} at program startup.

===Parameters===
{{par begin}}
{{par | loc | the new global C++ locale}}
{{par end}}

===Return value===
The previous value of the global C++ locale.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc locale}}
{{dsc inc | cpp/locale/locale/dsc classic}}
{{dsc inc | cpp/locale/dsc setlocale}}
{{dsc end}}

[[de:cpp/locale/locale/global]]
[[es:cpp/locale/locale/global]]
[[fr:cpp/locale/locale/global]]
[[it:cpp/locale/locale/global]]
[[ja:cpp/locale/locale/global]]
[[pt:cpp/locale/locale/global]]
[[ru:cpp/locale/locale/global]]
[[zh:cpp/locale/locale/global]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/id</title>
    <ns>0</ns>
    <id>2944</id>
    <revision>
      <id>88472</id>
      <parentid>63974</parentid>
      <timestamp>2016-11-20T09:08:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1657">{{cpp/locale/locale/title | id}}
{{cpp/locale/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class locale::id;
}}
{{dcl end}}

The class {{lc|std::locale::id}} provides implementation-specific identification of a locale facet. Each class derived from {{lc|std::locale::facet}} must have a public static member named {{ttb|id}} of type {{lc|std::locale::id}} and each {{lc|std::locale}} object maintains a list of facets it implements, indexed by their {{tt|id}}s.

Facets with the same {{tt|id}} belong to the same facet category and replace each other when added to a locale object.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/locale/id/id | constructs a new id }}
{{dsc mem fun | operator{{=}} | nolink=true | copy assignment operator is deleted}}
{{dsc end}}

===Example===
{{example
 | The following example shows how to construct a minimal custom facet.
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

struct myfacet : std::locale::facet
{
    myfacet(std::size_t refs = 0) : facet(refs) {}
    static std::locale::id id;
};

std::locale::id myfacet::id;

int main()
{
    std::locale myloc(std::locale(), new myfacet);
    std::cout &lt;&lt; &quot;has_facet&lt;myfacet&gt;(myloc) returns &quot; &lt;&lt; std::boolalpha
              &lt;&lt; std::has_facet&lt;myfacet&gt;(myloc) &lt;&lt; '\n';
}
 | output=
has_facet&lt;myfacet&gt;(myloc) returns true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc facet}}
{{dsc end}}

[[de:cpp/locale/locale/id]]
[[es:cpp/locale/locale/id]]
[[fr:cpp/locale/locale/id]]
[[it:cpp/locale/locale/id]]
[[ja:cpp/locale/locale/id]]
[[pt:cpp/locale/locale/id]]
[[ru:cpp/locale/locale/id]]
[[zh:cpp/locale/locale/id]]</text>
      <sha1>n1z7f3de4d9ao4lix1pgzz7uh85anp8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/id/id</title>
    <ns>0</ns>
    <id>2945</id>
    <revision>
      <id>50031</id>
      <parentid>43481</parentid>
      <timestamp>2013-06-01T03:09:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1065">{{cpp/locale/id/title | id}}
{{cpp/locale/locale/navbar}}

{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
id();
}}
{{dcl | num=2 | 1=
id(const id&amp;) = delete;
}}
{{dcl end}}

1) default constructor: creates an object of type {{lc|std::locale::id}} with implementation-specific content.

2) copy constructor is deleted; {{lc|std::locale::id}} is not copyable.

===Notes===
Because locales and facets must be available for the IO stream objects with static storage duration, such as {{lc|std::cout}}, typical implementations let implicit default constructor zero-initialize the contents of {{lc|std::locale::id}} during static initialization (before constructors run for static objects), and when a facet is added to any locale for the first time, the locale completes initialization of the facet's {{tt|id}}.

[[de:cpp/locale/locale/id/id]]
[[es:cpp/locale/locale/id/id]]
[[fr:cpp/locale/locale/id/id]]
[[it:cpp/locale/locale/id/id]]
[[ja:cpp/locale/locale/id/id]]
[[pt:cpp/locale/locale/id/id]]
[[ru:cpp/locale/locale/id/id]]
[[zh:cpp/locale/locale/id/id]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/locale</title>
    <ns>0</ns>
    <id>2943</id>
    <revision>
      <id>91510</id>
      <parentid>85651</parentid>
      <timestamp>2017-03-31T19:48:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4193">{{cpp/locale/locale/title | locale}}
{{cpp/locale/locale/navbar}}

{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
locale();
}}
{{dcl | num=2 | 1=
locale( const locale&amp; other );
}}
{{dcl | num=3 | 1=
explicit locale( const char* std_name );
}}
{{dcl | since=c++11 | num=4 | 1=
explicit locale( const std::string&amp; std_name );
}}
{{dcl | num=5 | 1=
locale( const locale&amp; other, const char* std_name, category cat );
}}
{{dcl | since=c++11 | num=6 | 1=
locale( const locale&amp; other, const std::string&amp; std_name, category cat );
}}
{{dcl | num=7 | 1=
template&lt; class Facet &gt;
locale( const locale&amp; other, Facet* f );
}}
{{dcl | num=8 | 1=
locale( const locale&amp; other, const locale&amp; one, category cat );
}}
{{dcl end}}

Contstructs a new locale object.

@1@ Default constructor. Constructs a copy of the global C++ locale, which is the locale most recently used as the argument to {{c|std::locale::global}} or a copy of {{c|std::locale::classic}} if no call to {{c|std::locale::global}} has been made.

@2@ Copy constructor. Constructs a copy of {{tt|other}}.

@3-4@ Constructs a copy of the system locale with specified {{tt|std_name}} (such as &quot;C&quot;, or &quot;POSIX&quot;, or &quot;en_US.UTF-8&quot;, or &quot;English_US.1251&quot;), if such locale is supported by the operating system. The locale constructed in this manner has a name.

@5-6@ Constructs a copy of {{tt|other}} except for all the facets identified by the {{tt|cat}} argument, which are copied from the system locale identified by its {{tt|std_name}}. The locale constructed in this manner has a name if and only if {{tt|other}} has a name.

@7@ Constructs a copy of {{tt|other}} except for the facet of type {{tt|Facet}} (typically deduced from the type of the argument) which is installed from the argument {{tt|facet}}. If {{tt|facet}} is {{lc|NULL}}, the constructed locale is a full copy of {{tt|other}}. The locale constructed in this manner has no name.

@8@ Constructs a copy of {{tt|other}} except for all the facets identified by the {{tt|cat}} argument, which are copied from {{tt|one}}. If both {{tt|other}} and {{tt|one}} have names, then the resulting locale also has a name.

===Parameters===
{{par begin}}
{{par | other | another locale to copy}}
{{par | std_name | name of the system locale to use}}
{{par | f | pointer to a facet to merge with {{tt|other}} }}
{{par | cat | the locale category used to identify the facets to merge with {{tt|other}} }}
{{par | one | another locale to take facets from}}
{{par end}}

===Exceptions===
@1,2@ {{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

@3,5@ {{lc|std::runtime_error}} if the operating system has no locale named {{tt|std_name}} or if {{tt|std_name}} is {{lc|NULL}}.

@4,6@ {{lc|std::runtime_error}} if the operating system has no locale named {{tt|std_name}}.

@7,8@ (none)

===Notes===
Overload 7 is typically called with its second argument, {{tt|f}}, obtained directly from a new-expression: the locale is responsible for calling the matching {{tt|delete}} from its own destructor.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;

int main()
{
    std::locale l1;  // l1 is a copy of the classic &quot;C&quot; locale
    std::locale l2(&quot;en_US.UTF-8&quot;); // l2 is a unicode locale
    std::locale l3(l1, l2, std::locale::ctype); // l3 is &quot;C&quot; except for ctype, which is unicode
    std::locale l4(l1, new std::codecvt_utf8&lt;wchar_t&gt;); // l4 is &quot;C&quot; except for codecvt
    std::cout &lt;&lt; &quot;Locale names:\nl1: &quot; &lt;&lt; l1.name() &lt;&lt; &quot;\nl2: &quot; &lt;&lt; l2.name()
               &lt;&lt; &quot;\nl3: &quot; &lt;&lt; l3.name() &lt;&lt; &quot;\nl4: &quot; &lt;&lt; l4.name() &lt;&lt; '\n';
}
 | output=
Locale names:
l1: C
l2: en_US.UTF-8
l3: LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
l4: *
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc ~locale}}
{{dsc end}}

[[de:cpp/locale/locale/locale]]
[[es:cpp/locale/locale/locale]]
[[fr:cpp/locale/locale/locale]]
[[it:cpp/locale/locale/locale]]
[[ja:cpp/locale/locale/locale]]
[[pt:cpp/locale/locale/locale]]
[[ru:cpp/locale/locale/locale]]
[[zh:cpp/locale/locale/locale]]</text>
      <sha1>2eyno5h5w8k1vu4czkc1oannhi7xkjp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/name</title>
    <ns>0</ns>
    <id>2909</id>
    <revision>
      <id>58154</id>
      <parentid>50033</parentid>
      <timestamp>2013-06-01T06:09:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1227">{{cpp/locale/locale/title | name}}
{{cpp/locale/locale/navbar}}

{{ddcl | header=locale |
std::string name() const;
}}

Returns the name of the locale, which is the name by which it is known to the operating system, such as &quot;POSIX&quot; or &quot;en_US.UTF8&quot; or &quot;English_United States.1252&quot;. If the locale is not a copy of a system-supplied locale, the string &quot;*&quot; is returned.

===Return value===
The name of the locale or &quot;*&quot; if unnamed.

===Example===
{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::locale loc(std::locale(), new std::ctype&lt;char&gt;);
    std::cout &lt;&lt; &quot;The default locale is &quot; &lt;&lt; std::locale().name() &lt;&lt; '\n'
              &lt;&lt; &quot;The user's locale is &quot; &lt;&lt; std::locale(&quot;&quot;).name() &lt;&lt; '\n'
              &lt;&lt; &quot;A nameless locale is &quot; &lt;&lt; loc.name() &lt;&lt; '\n';
}
 | output=
The default locale is C
The user's locale is en_US.UTF8
A nameless locale is *
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc locale}}
{{dsc end}}

[[de:cpp/locale/locale/name]]
[[es:cpp/locale/locale/name]]
[[fr:cpp/locale/locale/name]]
[[it:cpp/locale/locale/name]]
[[ja:cpp/locale/locale/name]]
[[pt:cpp/locale/locale/name]]
[[ru:cpp/locale/locale/name]]
[[zh:cpp/locale/locale/name]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/operator cmp</title>
    <ns>0</ns>
    <id>2894</id>
    <revision>
      <id>58159</id>
      <parentid>50036</parentid>
      <timestamp>2013-06-01T06:09:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1249">{{cpp/locale/locale/title | 1=operator==, operator!= }}
{{cpp/locale/locale/navbar}}

{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
bool operator==( const locale&amp; other ) const;
}}
{{dcl | num=2 | 1=
bool operator!=( const locale&amp; other ) const;
}}
{{dcl end}}

Tests two locales for equality. Named locales are considered equal if their names are equal. Unnamed locales are considered equal if they are copies of each other. 

===Parameters===
{{par begin}}
{{par | other | a {{lc|std::locale}} object to compare}}
{{par end}}

===Return value===
1) {{c|true}} if {{tt|other}} is a copy of {{c|*this}} or has an identical name, {{c|false}} otherwise.

2) {{c|false}} if {{tt|other}} is a copy of {{c|*this}} or has an identical name, {{c|true}} otherwise.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc locale}}
{{dsc inc | cpp/locale/locale/dsc name}}
{{dsc end}}

[[de:cpp/locale/locale/operator cmp]]
[[es:cpp/locale/locale/operator cmp]]
[[fr:cpp/locale/locale/operator cmp]]
[[it:cpp/locale/locale/operator cmp]]
[[ja:cpp/locale/locale/operator cmp]]
[[pt:cpp/locale/locale/operator cmp]]
[[ru:cpp/locale/locale/operator cmp]]
[[zh:cpp/locale/locale/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/operator eq</title>
    <ns>0</ns>
    <id>4248</id>
    <redirect title="cpp/locale/locale/operator cmp" />
    <revision>
      <id>15382</id>
      <timestamp>2011-12-08T17:18:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/locale/operator eq]] to [[cpp/locale/locale/operator cmp]]: eq-&gt;cmp</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/locale/locale/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/operator()</title>
    <ns>0</ns>
    <id>2892</id>
    <revision>
      <id>58155</id>
      <parentid>50034</parentid>
      <timestamp>2013-06-01T06:09:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2187">{{cpp/locale/locale/title | operator()}}
{{cpp/locale/locale/navbar}}
{{ddcl |
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator()( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; s1,
                 const basic_string&lt;CharT,Traits,Alloc&gt;&amp; s2) const;
}}

Compares two string arguments {{tt|s1}} and {{tt|s2}} according to the lexicographic comparison rules defined by this locale's {{c|std::collate&lt;charT&gt;}} facet. This operator allows any locale object that has a collate facet to be used as a binary predicate in the standard algorithms (such as {{lc|std::sort}}) and ordered containers (such as {{lc|std::set}})

===Parameters===
{{par begin}}
{{par | s1 | the first string to compare}}
{{par | s2 | the second string to compare}}
{{par end}}

===Return value===
{{c|true}} if {{tt|s1}} is lexicographically less than {{tt|s2}}, {{c|false}} otherwise.

===Possible implementation===

{{eq fun
 | 1=
template&lt;class CharT, class Traits, class Alloc &gt;
bool operator()(const std::basic_string&lt;CharT,Traits,Alloc&gt;&amp; s1,
                const std::basic_string&lt;CharT,Traits,Alloc&gt;&amp; s2) const;
{
    return std::use_facet&lt;std::collate&lt;CharT&gt;&gt;(*this).compare(
                                         s1.data(), s1.data() + s1.size(),
                                         s2.data(), s2.data() + s2.size()   ) &lt; 0;
}
}}

===Example===
{{example
 | A vector of strings can be sorted according to a non-default locale by using the locale object as comparator:
 | code=
#include &lt;locale&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;cassert&gt;

int main()
{
    std::vector&lt;std::wstring&gt; v = {L&quot;жил&quot;, L&quot;был&quot;, L&quot;кот&quot;};
    std::sort(v.begin(), v.end(), std::locale(&quot;ru_RU.UTF8&quot;));
    assert(v[0] == L&quot;был&quot;);
    assert(v[1] == L&quot;жил&quot;);
    assert(v[2] == L&quot;кот&quot;);
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc collate}}
{{dsc end}}

[[de:cpp/locale/locale/operator()]]
[[es:cpp/locale/locale/operator()]]
[[fr:cpp/locale/locale/operator()]]
[[it:cpp/locale/locale/operator()]]
[[ja:cpp/locale/locale/operator()]]
[[pt:cpp/locale/locale/operator()]]
[[ru:cpp/locale/locale/operator()]]
[[zh:cpp/locale/locale/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/operator=</title>
    <ns>0</ns>
    <id>2941</id>
    <revision>
      <id>91472</id>
      <parentid>64828</parentid>
      <timestamp>2017-03-31T19:46:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1064">{{cpp/locale/locale/title | operator{{=}}}}
{{cpp/locale/locale/navbar}}

{{ddcl | header=locale | 1=
const locale&amp; operator=( const locale&amp; other );
}}

Creates a copy of {{tt|other}}, replacing the contents of {{c|*this}}. The reference counts of all facets held by {{tt|other}} are incremented. The reference counts of all facets previously held by {{c|*this}} are decremented, and those facets whose reference count becomes zero are deleted.

===Return value===
Returns {{c|*this}}, which is now a copy of {{tt|other}}.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc locale}}
{{dsc end}}

[[de:cpp/locale/locale/operator=]]
[[es:cpp/locale/locale/operator=]]
[[fr:cpp/locale/locale/operator=]]
[[it:cpp/locale/locale/operator=]]
[[ja:cpp/locale/locale/operator=]]
[[pt:cpp/locale/locale/operator=]]
[[ru:cpp/locale/locale/operator=]]
[[zh:cpp/locale/locale/operator=]]</text>
      <sha1>2zpfhhy1qm7sr66qs4dmhlcy7cbfqdh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/locale/~locale</title>
    <ns>0</ns>
    <id>2942</id>
    <revision>
      <id>58160</id>
      <parentid>50037</parentid>
      <timestamp>2013-06-01T06:09:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="718">{{cpp/locale/locale/title | ~locale}}
{{cpp/locale/locale/navbar}}

{{ddcl | header=locale | 1=
~locale();
}}

Non-virtual destructor which decrements reference counts of all facets held by {{tt|*this}}. Those facets whose reference count becomes zero are deleted.

===Return value===
(none)

===Exceptions===
(none)

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/locale/dsc locale}}
{{dsc end}}

[[de:cpp/locale/locale/~locale]]
[[es:cpp/locale/locale/~locale]]
[[fr:cpp/locale/locale/~locale]]
[[it:cpp/locale/locale/~locale]]
[[ja:cpp/locale/locale/~locale]]
[[pt:cpp/locale/locale/~locale]]
[[ru:cpp/locale/locale/~locale]]
[[zh:cpp/locale/locale/~locale]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/localeconv</title>
    <ns>0</ns>
    <id>5135</id>
    <revision>
      <id>58163</id>
      <parentid>50038</parentid>
      <timestamp>2013-06-01T06:09:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1064">{{cpp/title|localeconv}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header|clocale}}
{{dcl |
std::lconv* localeconv();
}}
{{dcl end}}

The {{tt|localeconv}} function obtains a pointer to a static object of type {{lc|std::lconv}}, which represents numeric and monetary formatting rules of the current C locale.

===Parameters===
(none)

===Return value===
Pointer to the current {{lc|std::lconv}} object. 

===Notes===
Modifying the object references through the returned pointer is undefined behavior.

{{tt|std::localeconv}} modifies a static object, calling it from different threads without synchronization is undefined behavior.

===Example===
{{include| cpp/locale/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc setlocale}}
{{dsc inc | cpp/locale/dsc lconv}}
{{dsc see c | c/locale/localeconv}}
{{dsc end}}

[[de:cpp/locale/localeconv]]
[[es:cpp/locale/localeconv]]
[[fr:cpp/locale/localeconv]]
[[it:cpp/locale/localeconv]]
[[ja:cpp/locale/localeconv]]
[[pt:cpp/locale/localeconv]]
[[ru:cpp/locale/localeconv]]
[[zh:cpp/locale/localeconv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages</title>
    <ns>0</ns>
    <id>2977</id>
    <revision>
      <id>65766</id>
      <parentid>65765</parentid>
      <timestamp>2013-10-07T18:13:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="2427">{{cpp/title | messages}}
{{cpp/locale/messages/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class messages;
}}
{{dcl end}}

Class template {{lc|std::messages}} is a standard locale facet that encapsulates retrieval of strings from message catalogs, such as the ones provided by GNU [http://www.gnu.org/s/gettext/ gettext] or by POSIX [http://pubs.opengroup.org/onlinepubs/9699919799/functions/catgets.html catgets].

The source of the messages is implementation-defined.

{{inheritance diagram/std-messages}}

Two standalone (locale-independent) specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::messages&lt;char&gt;}} | accesses narrow string message catalog }}
{{dsc | {{c|std::messages&lt;wchar_t&gt;}} | accesses wide string message catalog }}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{tt|std::basic_string&lt;CharT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/messages/messages | constructs a new messages facet }}
{{dsc prot mem dtor | cpp/locale/messages/~messages | destructs a messages facet }}
{{dsc inc | cpp/locale/messages/dsc open}}
{{dsc inc | cpp/locale/messages/dsc get}}
{{dsc inc | cpp/locale/messages/dsc close}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/messages/dsc do_open}}
{{dsc inc | cpp/locale/messages/dsc do_get}}
{{dsc inc | cpp/locale/messages/dsc do_close}}
{{dsc end}}

{{ inherited | {{small|std::}}messages_base |
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|catalog}} | int }}
{{dsc end}}
}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/locale/messages_base | defines messages catalog type }}
{{dsc tclass | cpp/locale/messages_byname | creates a messages facet for the named locale }}
{{dsc end}}

[[de:cpp/locale/messages]]
[[es:cpp/locale/messages]]
[[fr:cpp/locale/messages]]
[[it:cpp/locale/messages]]
[[ja:cpp/locale/messages]]
[[pt:cpp/locale/messages]]
[[ru:cpp/locale/messages]]
[[zh:cpp/locale/messages]]</text>
      <sha1>8mpxcfb331a3grqv4p33enx9s267pii</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages base</title>
    <ns>0</ns>
    <id>3606</id>
    <revision>
      <id>64133</id>
      <parentid>58167</parentid>
      <timestamp>2013-08-15T03:04:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>defect/c++14</comment>
      <text xml:space="preserve" bytes="963">{{cpp/title | messages_base}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class messages_base;
}}
{{dcl end}}

The class {{lc|std::messages_base}} provides a type definition which is inherited and used by the {{lc|std::messages}} facets.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|catalog}} | {{c|/*unspecified signed integer type*/}}}}
{{dsc end}}

===Notes===
{{tt|catalog}} was erroneously specified as {{tt|int}} in C++11, this was corrected in [http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2028 LWG issue #2028] and included in C++14

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc messages}}
{{dsc end}}

[[de:cpp/locale/messages base]]
[[es:cpp/locale/messages base]]
[[fr:cpp/locale/messages base]]
[[it:cpp/locale/messages base]]
[[ja:cpp/locale/messages base]]
[[pt:cpp/locale/messages base]]
[[ru:cpp/locale/messages base]]
[[zh:cpp/locale/messages base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages byname</title>
    <ns>0</ns>
    <id>9246</id>
    <revision>
      <id>61617</id>
      <parentid>58168</parentid>
      <timestamp>2013-06-06T07:21:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+inline descriptions</comment>
      <text xml:space="preserve" bytes="2718">{{cpp/title | messages_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class messages_byname : public std::messages&lt;CharT&gt;;
}}
{{dcl end}}

{{lc|std::messages_byname}} is a {{lc|std::messages}} facet which encapsulates retrieval of strings from message catalogs of the locale specified at its construction.

Two specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::messages_byname&lt;char&gt;}} | narrow/multibyte message catalog access }}
{{dsc | {{c|std::messages_byname&lt;wchar_t&gt;}} | wide string message catalog access }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|catalog}} | {{tt|std::messages_base&lt;CharT&gt;::catalog}}}}
{{dsc | {{tt|string_type}} | {{tt|std::basic_string&lt;CharT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | messages_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | messages_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | messages_byname}}
{{include | cpp/locale/byname/destructor | messages_byname}}

{{cpp/locale/messages/inherit}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
 
void try_with(const std::locale&amp; loc)
{
    const std::messages&lt;char&gt;&amp; facet = std::use_facet&lt;std::messages&lt;char&gt; &gt;(loc)
;
    std::messages&lt;char&gt;::catalog cat = facet.open(&quot;sed&quot;, std::cout.getloc());
    if(cat &lt; 0 )
        std::cout &lt;&lt; &quot;Could not open \&quot;sed\&quot; message catalog\n&quot;;
    else
        std::cout &lt;&lt; &quot;\&quot;No match\&quot; &quot;
                  &lt;&lt; facet.get(cat, 0, 0, &quot;No match&quot;) &lt;&lt; '\n'
                  &lt;&lt; &quot;\&quot;Memory exhausted\&quot; &quot; 
                  &lt;&lt; facet.get(cat, 0, 0, &quot;Memory exhausted&quot;) &lt;&lt; '\n';
    facet.close(cat);
}
int main()
{
    std::locale loc(&quot;en_US.utf8&quot;);
    std::cout.imbue(loc);

    try_with(std::locale(loc, new std::messages_byname&lt;char&gt;(&quot;de_DE.utf8&quot;)));
    try_with(std::locale(loc, new std::messages_byname&lt;char&gt;(&quot;fr_FR.utf8&quot;)));
    try_with(std::locale(loc, new std::messages_byname&lt;char&gt;(&quot;ja_JP.utf8&quot;)));
}
 | p=true
 | output=
&quot;No match&quot; Keine Übereinstimmung
&quot;Memory exhausted&quot; Speicher erschöpft
&quot;No match&quot; Pas de concordance
&quot;Memory exhausted&quot; Mémoire épuisée
&quot;No match&quot; 照合しません
&quot;Memory exhausted&quot; メモリーが足りません
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc messages}}
{{dsc end}}

[[de:cpp/locale/messages byname]]
[[es:cpp/locale/messages byname]]
[[fr:cpp/locale/messages byname]]
[[it:cpp/locale/messages byname]]
[[ja:cpp/locale/messages byname]]
[[pt:cpp/locale/messages byname]]
[[ru:cpp/locale/messages byname]]
[[zh:cpp/locale/messages byname]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages/close</title>
    <ns>0</ns>
    <id>9864</id>
    <revision>
      <id>63921</id>
      <parentid>63812</parentid>
      <timestamp>2013-08-01T15:38:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="1126">{{cpp/locale/messages/title|close|do_close}}
{{cpp/locale/messages/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
void close( catalog c ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual void do_close( catalog c ) const;
}}
{{dcl end}}

1) public member function, calls the protected virtual member function {{tt|do_close}} of the most derived class.

2) Releases the implementation-defined resources associated with an open catalog that is designated by the value {{tt|c}} of type {{tt|catalog}} (inherited from {{lc|std::messages_base}}), which was obtained from {{lc|open()}}.

===Parameters===
{{par begin}}
{{par | c | a valid open catalog identifier, on which {{tt|close()}} has not yet been called}}
{{par end}}

===Return value===
(none)

===Notes===
On POSIX systems, this function call usually translates to a call to {{tt|[http://pubs.opengroup.org/onlinepubs/9699919799/functions/catclose.html catclose()]}}. In GNU libstdc++, which is implemented in terms of GNU {{tt|gettext()}}, it does nothing. 

===Example===
{{cpp/locale/messages/example}}

===See also===
{{dsc begin}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages/get</title>
    <ns>0</ns>
    <id>9865</id>
    <revision>
      <id>64200</id>
      <parentid>63920</parentid>
      <timestamp>2013-08-15T15:27:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>use {{lc}}</comment>
      <text xml:space="preserve" bytes="1757">{{cpp/locale/messages/title|get, do_get}}
{{cpp/locale/messages/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
string_type get( catalog cat, int set, int msgid, const string_type&amp; dfault ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual string_type do_get( catalog cat, int set, int msgid, const string_type&amp; dfault ) const;
}}
{{dcl end}}

1) Public member function, calls the protected virtual member function {{tt|do_get}} of the most derived class.

2) Obtains a message from the open message catalog {{tt|cat}} using the values {{tt|set}}, {{tt|msgid}} and {{tt|dfault}} in implementation-defined manner. If the expected message is not found in the catalog, returns a copy of {{tt|dfault}}.

===Parameters===
{{par begin}}
{{par | cat | identifier of message catalog obtained from {{lc|open()}} and not yet passed to {{lc|close()}} }}
{{par | set | implementation-defined argument, message set in POSIX}}
{{par | msgid | implementation-defined argument, message id in POSIX}}
{{par | dfault | the string to look up in the catalog (if the catalog uses string look-up) and also the string to return in case of a failure}}
{{par end}}

===Return value===
The message from the catalog or a copy of {{tt|dfault}} if none was found.

===Notes===
On POSIX systems, this function call usually translates to a call to {{tt|[http://pubs.opengroup.org/onlinepubs/9699919799/functions/catgets.html catgets()]}}, and the parameters {{tt|set}}, {{tt|msgid}}, and {{tt|dfault}} are passed to {{tt|catgets()}} as-is. In GNU libstdc++, this function ignores {{tt|set}} and {{tt|msgid}} and simply calls GNU {{tt|gettext(dfault)}} in the required locale.

===Example===
{{cpp/locale/messages/example}}

===See also===
{{dsc begin}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages/messages</title>
    <ns>0</ns>
    <id>4396</id>
    <revision>
      <id>43401</id>
      <parentid>15750</parentid>
      <timestamp>2012-11-03T02:38:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="330">{{cpp/locale/facet/constructor|messages}}

[[de:cpp/locale/messages/messages]]
[[es:cpp/locale/messages/messages]]
[[fr:cpp/locale/messages/messages]]
[[it:cpp/locale/messages/messages]]
[[ja:cpp/locale/messages/messages]]
[[pt:cpp/locale/messages/messages]]
[[ru:cpp/locale/messages/messages]]
[[zh:cpp/locale/messages/messages]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages/open</title>
    <ns>0</ns>
    <id>9856</id>
    <revision>
      <id>63919</id>
      <parentid>60950</parentid>
      <timestamp>2013-08-01T15:38:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="1921">{{cpp/locale/messages/title|open|do_open}}
{{cpp/locale/messages/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
catalog open( const std::basic_string&lt;char&gt;&amp; name, const std::locale&amp; loc ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual catalog do_open( const std::basic_string&lt;char&gt;&amp; name, const std::locale&amp; loc ) const;
}}
{{dcl end}}

1) Public member function, calls the protected virtual member function {{tt|do_open}} of the most derived class.

2) Obtains a value of type {{tt|catalog}} (inherited from {{lc|std::messages_base}}), which can be passed to {{lc|get()}} to retrieve messages from the message catalog named by {{tt|name}}. This value is usable until passed to {{lc|close()}}.

===Parameters===
{{par begin}}
{{par | name | name of the message catalog to open}}
{{par | loc | a locale object that provides additional facets that may be required to read messages from the catalog, such as {{lc|std::codecvt}} to perform wide/multibyte conversions }}
{{par end}}

===Return value===
The non-negative value of type {{tt|catalog}} that can be used with {{lc|get()}} and {{lc|close()}}. Returns a negative value if the catalog could not be opened.

===Notes===
On POSIX systems, this function call usually translates to a call to {{tt|[http://pubs.opengroup.org/onlinepubs/9699919799/functions/catopen.html catopen()]}}. In GNU libstdc++, it calls {{tt|[http://gcc.gnu.org/onlinedocs/libstdc++/manual/facets.html textdomain]}}. 

The actual catalog location is implementation-defined: for the catalog {{c|&quot;sed&quot;}} (message catalogs installed with the Unix utility {{tt|'sed'}}) in German locale, for example, the file opened by this function call may be {{tt|/usr/lib/nls/msg/de_DE/sed.cat}}, {{tt|/usr/lib/locale/de_DE/LC_MESSAGES/sed.cat}}, or {{tt|/usr/share/locale/de/LC_MESSAGES/sed.mo}}.

===Example===
{{cpp/locale/messages/example}}

===See also===
{{dsc begin}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/messages/~messages</title>
    <ns>0</ns>
    <id>4447</id>
    <revision>
      <id>43396</id>
      <parentid>15820</parentid>
      <timestamp>2012-11-03T02:38:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="337">{{cpp/locale/facet/destructor|messages}}

[[de:cpp/locale/messages/~messages]]
[[es:cpp/locale/messages/~messages]]
[[fr:cpp/locale/messages/~messages]]
[[it:cpp/locale/messages/~messages]]
[[ja:cpp/locale/messages/~messages]]
[[pt:cpp/locale/messages/~messages]]
[[ru:cpp/locale/messages/~messages]]
[[zh:cpp/locale/messages/~messages]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money base</title>
    <ns>0</ns>
    <id>3607</id>
    <revision>
      <id>69678</id>
      <parentid>64436</parentid>
      <timestamp>2014-04-19T12:32:22Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2062">{{cpp/title | money_base}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class money_base;
}}
{{dcl end}}

The class {{lc|std::money_base}} provides constants which are inherited and used by the {{lc|std::moneypunct}}, {{lc|std::money_get}} and {{lc|std::money_put}} facets.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|enum part { none, space, symbol, sign, value };}} | unscoped enumeration type}}
{{dsc | {{c|struct pattern { char field[4]; };}} | the monetary format type}}
{{dsc end}}

{{dsc begin}}
{{dsc hitem | Enumeration constant | Definition}}
{{dsc | {{tt|none}}     | whitespace is permitted but not required except in the last position, where whitespace is not permitted}}
{{dsc | {{tt|space}}    | one or more whitespace characters are required}}
{{dsc | {{tt|symbol}}   | the sequence of characters returned by moneypunct::curr_symbol is required}}
{{dsc | {{tt|sign}}     | the first of the characters returned by moneypunct::positive_sign or moneypunct::negative_sign is required}}
{{dsc | {{tt|value}}    | the absolute numeric monetary value is required}}
{{dsc end}}

===Notes===
The monetary format is an array of four {{c|char}}s convertible to {{lc|std::money_base::part}}. In that sequence, each of {{tt|symbol}}, {{tt|sign}}, and {{tt|value}} appears exactly once, and either {{tt|space}} or {{tt|none}} appears in the remaining position. The value {{tt|none}}, if present, is not first; the value {{tt|space}}, if present, is neither first nor last.

The default format, returned by the standard specializations of {{lc|std::moneypunct}} is {{c|{symbol, sign, none, value} }}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc moneypunct}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc inc | cpp/locale/dsc money_put}}
{{dsc end}}

[[de:cpp/locale/money base]]
[[es:cpp/locale/money base]]
[[fr:cpp/locale/money base]]
[[it:cpp/locale/money base]]
[[ja:cpp/locale/money base]]
[[pt:cpp/locale/money base]]
[[ru:cpp/locale/money base]]
[[zh:cpp/locale/money base]]</text>
      <sha1>72hhnfihqyro35h3pgj1psyxaak2np6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money get</title>
    <ns>0</ns>
    <id>3760</id>
    <revision>
      <id>65774</id>
      <parentid>64431</parentid>
      <timestamp>2013-10-07T18:36:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix description of the required specializations</comment>
      <text xml:space="preserve" bytes="3624">{{cpp/title|money_get}}
{{cpp/locale/money_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; 
    class CharT,
    class InputIt = std::istreambuf_iterator&lt;CharT&gt;
&gt; class money_get;
}}
{{dcl end}}

Class template {{tt|std::money_get}} encapsulates the rules for parsing monetary values from character streams. The standard I/O manipulator {{lc|std::get_money}} uses the {{tt|std::money_get}} facet of the I/O stream's locale.

{{inheritance diagram/std-money_get}}

===Type requirements===
{{par begin}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Specializations===
Two standalone (locale-independent) full specializations and two partial specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::money_get&lt;char&gt;}} | parses narrow string representations of monetary values}}
{{dsc | {{c|std::money_get&lt;wchar_t&gt;}} | parses wide string representations of monetary values}}
{{dsc | {{c|std::money_get&lt;char, InputIt&gt;}} | parses narrow string representations of monetary values using custom input iterator}}
{{dsc | {{c|std::money_get&lt;wchar_t, InputIt&gt;}} | parses wide string representations of monetary values using custom input iterator}}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{tt|std::basic_string&lt;CharT&gt;}}}}
{{dsc | {{tt|iter_type}} | {{tt|InputIt}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/money_get/money_get | constructs a new money_get facet }}
{{dsc prot mem dtor | cpp/locale/money_get/~money_get | destructs a money_get facet }}
{{dsc mem fun | cpp/locale/money_get/get | invokes {{tt|do_get}} }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/money_get/dsc do_get}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;iomanip&gt;
#include &lt;iterator&gt;
int main()
{
    std::string str = &quot;$1.11 $2.22 $3.33&quot;;
    std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(2);

    std::cout &lt;&lt; '&quot;' &lt;&lt; str &lt;&lt; &quot;\&quot; parsed with the I/O manipulator: &quot;;
    std::istringstream s1(str);
    s1.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    long double val;
    while(s1 &gt;&gt; std::get_money(val))
        std::cout &lt;&lt; val/100 &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    str = &quot;USD  1,234.56&quot;;
    std::cout &lt;&lt; '&quot;' &lt;&lt; str &lt;&lt; &quot;\&quot; parsed with the facet directly: &quot;;
    std::istringstream s2(str);
    s2.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    auto&amp; f = std::use_facet&lt;std::money_get&lt;char&gt;&gt;(s2.getloc());
    std::ios_base::iostate err;
    std::istreambuf_iterator&lt;char&gt; beg(s2), end;
    f.get(beg, end, true, s2, err, val);
    std::cout &lt;&lt; val/100 &lt;&lt; '\n';
}
 | output=
&quot;$1.11 $2.22 $3.33&quot; parsed with the I/O manipulator: 1.11 2.22 3.33
&quot;USD  1,234.56&quot; parsed with the facet directly: 1234.56
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc moneypunct}}
{{dsc inc | cpp/locale/dsc money_put}}
{{dsc tfun | cpp/io/manip/get_money | parses a monetary value| notes={{mark c++11}}}}
{{dsc end}}

[[de:cpp/locale/money get]]
[[es:cpp/locale/money get]]
[[fr:cpp/locale/money get]]
[[it:cpp/locale/money get]]
[[ja:cpp/locale/money get]]
[[pt:cpp/locale/money get]]
[[ru:cpp/locale/money get]]
[[zh:cpp/locale/money get]]</text>
      <sha1>q7rkucny3gdea1qdime5x957nn34d6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money get/get</title>
    <ns>0</ns>
    <id>12906</id>
    <revision>
      <id>72592</id>
      <parentid>64593</parentid>
      <timestamp>2014-09-06T13:25:27Z</timestamp>
      <contributor>
        <username>Lilliemarck</username>
        <id>2526</id>
      </contributor>
      <minor/>
      <comment>The virtual functions are named do_get</comment>
      <text xml:space="preserve" bytes="7210">{{cpp/locale/money_get/title | get, do_get}}
{{cpp/locale/money_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type get(iter_type beg, iter_type end, bool intl, std::ios_base&amp; str,
              std::ios_base::iostate&amp; err, long double&amp; units) const;}}
{{dcl | num=2 | 1=
iter_type get(iter_type beg, iter_type end, bool intl, std::ios_base&amp; str,
              std::ios_base::iostate&amp; err, string_type&amp; digits) const;}}
{{dcl | num=3 | 1=
protected:
virtual iter_type do_get(iter_type beg, iter_type end, bool intl, std::ios_base&amp; str,
                         std::ios_base::iostate&amp; err, long double&amp; units) const;}}
{{dcl | num=4 | 1=
virtual iter_type do_get(iter_type beg, iter_type end, bool intl, std::ios_base&amp; str,
                         std::ios_base::iostate&amp; err, string_type&amp; digits) const;
}}
{{dcl end}}

Parses monetary value from an input iterator and writes the result to a {{tt|long double}} or string.

@1-2@ Public member functions, call the member function {{tt|do_get}} of the most derived class.

@3-4@ Reads characters from the input iterator {{tt|beg}}, expecting to find a monetary value formatted according to the rules specified by the {{c|std::ctype}} facet imbued in {{c|str.getloc()}} ({{tt|ct}} for the rest of this page), the {{c|std::moneypunct&lt;CharT, intl&gt;}} facet imbued in {{c|str.getloc()}} ({{tt|mp}} for the rest of this page), and the stream formatting flags obtained from {{c|str.flags()}}.

If the input iterator {{tt|beg}} becomes equal to {{tt|end}} before the parsing was completed, sets both {{lc|failbit}} and {{lc|eofbit}} in {{tt|err}}. If parsing fails for another reason, sets the {{tt|failbit}} in {{tt|err}}. Either way, does not modify the output parameter (({{tt|units}} or {{tt|digits}}) on error.

If the parsing succeeds, does not change {{tt|err}}, and stores the result in {{tt|units}} or {{tt|digits}}.

The formatting {{lc|pattern}} used by this function is always {{c|mp.neg_format()}}.

If {{c|mp.grouping()}} does not permit thousands separators, the first separator encountered is treated as a parsing error, otherwise they are treated as optional.

If {{lc|money_base::space}} or {{lc|money_base::none}} is the last element in the {{lc|pattern}}, the parser does not attempt to consume any whitespace after the other components of the monetary value were parsed. Otherwise, one or more whitespace characters are consumed where {{lc|money_base::space}} appears.

If {{tt|showbase}} flag is set in {{c|str.flags()}}, the currency symbol or currency string is required, if it is not set, the currency symbol is optional.

If the first character of the string returned by {{c|mp.positive_sign()}} or {{c|mp.negative_sign()}} is found in the {{lc|money_base::sign}} position of the formatting pattern, it is consumed, and the rest of the characters in that string are expected and consumed after all other components of the monetary value. If both {{c|mp.positive_sign()}} and  {{c|mp.negative_sign()}} are non-empty, the sign is required and must match the first character of one of these strings. If one of theses strings is empty, the sign is optional (and if it is absent, the sign of the result corresponds to the string that was empty). If both strings are empty, or have the same first character, the result is given the positive sign. If the output parameter is a string ({{tt|digits}}) and the result is negative, the value {{c|ct.widen('-')}} is stored as the first character of the result.

Digits from the input are extracted in order in which they appear and are placed in {{tt|digits}} (after widening by {{c|ct.widen()}} as necessary), or into a temporary buffer {{tt|buf1}}, from which the value of {{tt|units}} is constructed as if by 

{{source|1=static const char src[] = &quot;0123456789-&quot;;
CharT atoms[sizeof(src)];
ct.widen(src, src + sizeof(src) - 1, atoms);
for (int i = 0; i &lt; n; ++i)
buf2[i] = src[find(atoms, atoms+sizeof(src), buf1[i]) - atoms];
buf2[n] = 0;
sscanf(buf2, &quot;%Lf&quot;, &amp;units);
}}
(where {{tt|n}} is the number of characters extracted from the input and stored in {{tt|buf1}} and {{tt|buf2}} is another sufficiently large character buffer)

===Return value===
An iterator pointing immediately after the last character recognized as a valid part of the monetary string input.

===Notes===
The currency units are assumed to be the smallest non-fractional units of the currency: cents in the U.S, yen in Japan. Thus, the input sequence {{c|&quot;$1,056.23&quot;}} in a U.S. locale produces the number {{c|105623.0}} in {{tt|units}} or a string {{c|&quot;105623&quot;}} in {{tt|digits}}

Because currency symbol is optional if {{tt|showbase}} is off but the entire multicharacter {{tt|negative_sign()}} is required, given the formatting pattern {{c|{sign, value, space, symbol} }} with {{tt|showbase}} off and negative_sign of {{c|&quot;-&quot;}}, the string {{c|&quot;-1.23 €&quot;}} parses as {{c|-123}} and leaves &quot;€&quot; unconsumed on the input stream, but if negative_sign is {{c|&quot;()&quot;}}, the string {{c|&quot;(1.23 €)&quot;}} is consumed completely.

The I/O manipulator {{lc|std::get_money}} offers a simpler interface to this function.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;

void demo_money_get(std::locale loc, const std::string&amp; input)
{
    std::istringstream str(input);
    str.imbue(loc);
    long double units;
// note, the following can be written simple with std::get_money(units)
    std::ios_base::iostate err = std::ios_base::goodbit;
    std::istreambuf_iterator&lt;char&gt; ret =
        std::use_facet&lt;std::money_get&lt;char&gt;&gt;(loc).get(
                 std::istreambuf_iterator&lt;char&gt;(str),
                 std::istreambuf_iterator&lt;char&gt;(),
                 false, str, err, units);
    str.setstate(err);
    if(str) {
        std::cout &lt;&lt; &quot;Successfully parsed '&quot; &lt;&lt; str.str() &lt;&lt; &quot;' as &quot;
                  &lt;&lt; units/100 &lt;&lt; &quot; units\n&quot;;
        if(ret != std::istreambuf_iterator&lt;char&gt;()) {
            std::cout &lt;&lt; &quot;Remaining content: '&quot;;
            std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                           std::ostreambuf_iterator&lt;char&gt;(std::cout));
            std::cout &lt;&lt; &quot;'\n&quot;;
        } else {
            std::cout &lt;&lt; &quot;The input was fully consumed\n&quot;;
        }
    } else {
            std::cout &lt;&lt; &quot;Parse failed. Unparsed string: '&quot;;
            std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                           std::ostreambuf_iterator&lt;char&gt;(std::cout));
            std::cout &lt;&lt; &quot;'\n&quot;;
    }
}

int main()
{
    demo_money_get(std::locale(&quot;en_US.utf8&quot;), &quot;-$5.12 abc&quot;);
    demo_money_get(std::locale(&quot;ms_MY.utf8&quot;), &quot;(RM5.12) def&quot;);
}
 | output=
Successfully parsed '-$5.12 abc' as -5.12 units
Remaining content: ' abc'
Successfully parsed '(RM5.12) def' as -5.12 units
Remaining content: ' def'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc moneypunct}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc inc | cpp/io/manip/dsc get_money}}
{{dsc end}}

[[de:cpp/locale/money_get/get]]
[[es:cpp/locale/money_get/get]]
[[fr:cpp/locale/money_get/get]]
[[it:cpp/locale/money_get/get]]
[[ja:cpp/locale/money_get/get]]
[[pt:cpp/locale/money_get/get]]
[[ru:cpp/locale/money_get/get]]
[[zh:cpp/locale/money_get/get]]</text>
      <sha1>6lxm12jne4jk6c5jcrxa67nn71rdk1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money get/money get</title>
    <ns>0</ns>
    <id>4427</id>
    <revision>
      <id>43364</id>
      <parentid>15796</parentid>
      <timestamp>2012-11-03T02:32:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="347">{{cpp/locale/facet/constructor|money_get}}

[[de:cpp/locale/money get/money get]]
[[es:cpp/locale/money get/money get]]
[[fr:cpp/locale/money get/money get]]
[[it:cpp/locale/money get/money get]]
[[ja:cpp/locale/money get/money get]]
[[pt:cpp/locale/money get/money get]]
[[ru:cpp/locale/money get/money get]]
[[zh:cpp/locale/money get/money get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money get/~money get</title>
    <ns>0</ns>
    <id>4440</id>
    <revision>
      <id>43358</id>
      <parentid>15813</parentid>
      <timestamp>2012-11-03T02:30:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="354">{{cpp/locale/facet/destructor|money_get}}

[[de:cpp/locale/money get/~money get]]
[[es:cpp/locale/money get/~money get]]
[[fr:cpp/locale/money get/~money get]]
[[it:cpp/locale/money get/~money get]]
[[ja:cpp/locale/money get/~money get]]
[[pt:cpp/locale/money get/~money get]]
[[ru:cpp/locale/money get/~money get]]
[[zh:cpp/locale/money get/~money get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money put</title>
    <ns>0</ns>
    <id>3751</id>
    <revision>
      <id>65775</id>
      <parentid>64434</parentid>
      <timestamp>2013-10-07T18:38:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix description of the required specializations</comment>
      <text xml:space="preserve" bytes="3304">{{cpp/title|money_put}}
{{cpp/locale/money_put/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; 
    class CharT,
    class OutputIt = std::ostreambuf_iterator&lt;CharT&gt;
&gt; class money_put;
}}
{{dcl end}}

Class {{tt|std::money_put}} encapsulates the rules for formatting monetary values as strings. The standard I/O manipulator {{lc|std::put_money}} uses the {{tt|std::money_put}} facet of the I/O stream's locale.

{{inheritance diagram/std-money_put}}

===Type requirements===
{{par begin}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Specializations===
Two standalone (locale-independent) full specializations and two partial specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::money_put&lt;char&gt;}} | creates narrow string representations of monetary values}}
{{dsc | {{c|std::money_put&lt;wchar_t&gt;}} | creates wide string representations of monetary values}}
{{dsc | {{c|std::money_put&lt;char, OutputIt&gt;}} | creates narrow string representations of monetary values using custom output iterator}}
{{dsc | {{c|std::money_put&lt;wchar_t, OutputIt&gt;}} | creates wide string representations of monetary values using custom output iterator}}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{tt|std::basic_string&lt;CharT&gt;}}}}
{{dsc | {{tt|iter_type}} | {{tt|OutputIt}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/money_put/money_put | constructs a new money_put facet }}
{{dsc prot mem dtor | cpp/locale/money_put/~money_put | destructs a money_put facet }}
{{dsc mem fun | cpp/locale/money_put/put | invokes {{tt|do_put}} }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/money_put/dsc do_put}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;iomanip&gt;
#include &lt;iterator&gt;
int main()
{
    // using the IO manipulator
    std::cout.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    std::cout &lt;&lt; &quot;american locale: &quot;
               &lt;&lt; std::showbase &lt;&lt; std::put_money(12345678.9)&lt;&lt; '\n';

    // using the facet directly
    std::cout.imbue(std::locale(&quot;de_DE&quot;));
    std::cout &lt;&lt; &quot;german locale: &quot; ;
    std::ostreambuf_iterator&lt;char&gt; out(std::cout);
    auto&amp; f = std::use_facet&lt;std::money_put&lt;char&gt;&gt;(std::cout.getloc());
    f.put(out, false, std::cout, std::cout.fill(), 12345678.9 );
    std::cout &lt;&lt; '\n';
}
 | output=
american locale: $123,456.79
german locale: 123.456,79 EUR
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc moneypunct}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc tfun | cpp/io/manip/put_money | formats and outputs a monetary value| notes={{mark c++11}}}}
{{dsc end}}

[[de:cpp/locale/money put]]
[[es:cpp/locale/money put]]
[[fr:cpp/locale/money put]]
[[it:cpp/locale/money put]]
[[ja:cpp/locale/money put]]
[[pt:cpp/locale/money put]]
[[ru:cpp/locale/money put]]
[[zh:cpp/locale/money put]]</text>
      <sha1>gb2q51d6hp6hp11xymdlx8p2viqt73c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money put/money put</title>
    <ns>0</ns>
    <id>4432</id>
    <revision>
      <id>43343</id>
      <parentid>15802</parentid>
      <timestamp>2012-11-03T02:28:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="347">{{cpp/locale/facet/constructor|money_put}}

[[de:cpp/locale/money put/money put]]
[[es:cpp/locale/money put/money put]]
[[fr:cpp/locale/money put/money put]]
[[it:cpp/locale/money put/money put]]
[[ja:cpp/locale/money put/money put]]
[[pt:cpp/locale/money put/money put]]
[[ru:cpp/locale/money put/money put]]
[[zh:cpp/locale/money put/money put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money put/put</title>
    <ns>0</ns>
    <id>12898</id>
    <revision>
      <id>64444</id>
      <parentid>64443</parentid>
      <timestamp>2013-08-17T16:45:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="5747">{{cpp/locale/money_put/title | put, do_put}}
{{cpp/locale/money_put/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type put(iter_type out, bool intl, std::ios_base&amp; f,
              char_type fill, long double quant) const; }}
{{dcl | num=2 | 1=
iter_type put(iter_type out, bool intl, std::ios_base&amp; f,
             char_type fill, const string_type&amp; quant) const;}}
{{dcl | num=3 | 1=
protected:
virtual iter_type do_put(iter_type out, bool intl, std::ios_base&amp; str,
                         char_type fill, long double units) const;}}
{{dcl | num=4 | 1=
virtual iter_type do_put(iter_type out, bool intl, std::ios_base&amp; str,
                         char_type fill, const string_type&amp; digits) const;
}}
{{dcl end}}

Formats monetary value and writes the result to output stream.

@1-2@ Public member functions, call the member function {{tt|do_put}} of the most derived class.

@3@ The numeric arguments {{tt|units}} is converted to a wide character string as if by
{{c|ct.widen(buf1, buf1 + std::sprintf(buf1, &quot;%.0Lf&quot;, units), buf2)}}, where {{tt|ct}} is the {{c|std::ctype}} facet imbued in {{c|str.getloc()}} and {{tt|buf1}} and {{tt|buf2}} are sufficiently large character buffers. The resulting character string {{tt|buf2}} is processed, formatted, and output to {{tt|out}} as desribed below.

@4@ From the string argument {{tt|digits}}, only the optional leading minus sign (as determined by comparing to {{tt|ct.widen('-')}}, where {{tt|ct}} is the {{c|std::ctype}} facet imbued in {{c|str.getloc()}}) and the immediately following digit characters (as classified by {{tt|ct}}) are taken as the character sequence to be processed, formatted, and output to {{tt|out}} as described below.

Given the character sequence from the previous steps, if the first character equals {{c|ct.widen('-')}}, calls {{c|mp.neg_format()}} to obtain the formatting {{lc|pattern}}, otherwise calls {{c|mp.pos_format()}}, where {{tt|mp}} is the {{c|std::moneypunct&lt;CharT, intl&gt;}} facet imbued in {{c|str.getloc()}}.

Thousands separator and decimal point characters are inserted as required by {{tt|mp.grouping()}}, {{tt|mp.frac_digits()}}, {{tt|mp.decimal_point()}}, and {{tt|mp.thousands_sep()}}, and the resulting string is placed in the output sequence where {{lc|value}} appears in the formatting pattern.

If {{c|str.flags() &amp; str.showbase}} is non-zero (the {{c|std::showbase}} manipulator was used), then the currency symbol or string is generated by calling {{c|mp.curr_symbol()}} and placed in the output sequence where {{lc|symbol}} appears in the formatting pattern.

If {{c|mp.positive_sign()}} (in case positive format pattern is used) or {{c|mp.negative_sign()}} (in case negative format pattern is used) returns a string with more than one character, the first character returned is placed in the output sequence where {{lc|sign}} appears in the formatting pattern, and the rest of the characters are placed after all other characters, for example, formatting pattern {{c|{sign, value, space, symbol}} with units {{c|123}} and negative_sign of {{c|&quot;-&quot;}} may result in {{c|&quot;-1.23 €&quot;}}, while negative_sign of {{c|&quot;()&quot;}} would generate {{c|&quot;(1.23 €)&quot;}}.

If the number of characters generated for the specified format is less than the value returned by {{c|str.width()}}, then copies of {{tt|fill}} are inserted to bring the total length of the output sequence to exactly {{c|str.width()}}, as follows:
* If {{c|str.flags() &amp; str.adjustfield}} equals {{c|str.internal}}, the fill characters are inserted where {{tt|none}} or {{tt|space}} appears in the formatting pattern.
* Otherwise, if {{c|str.flags() &amp; str.adjustfield}} equals {{c|str.left}}, the copies of {{tt|fill}} are appended after all other characters
* Otherwise, the fill characters are placed before all other characters.

In the end, calls {{c|str.width(0)}} to cancel the effects of any {{c|std::setw}}.

===Return value===
An iterator pointing immediately after the last character produced

===Notes===
The currency units are assumed to be the smallest non-fractional units of the currency: cents in the U.S, yen in Japan.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;locale&gt;

struct my_punct : std::moneypunct_byname&lt;char, false&gt; {
    my_punct(const char* name) : moneypunct_byname(name) {}
    string_type do_negative_sign() const { return &quot;()&quot;; }
};

int main()
{
    std::locale loc(&quot;ru_RU.utf8&quot;);
    std::cout.imbue(loc);
    long double units = -123.45;
    std::cout &lt;&lt; &quot;In Russian locale, &quot; &lt;&lt; units &lt;&lt; &quot; prints as &quot;
              &lt;&lt; std::showbase;
// note, the following is equivalent to simply std::put_money(units)
    std::use_facet&lt;std::money_put&lt;char&gt;&gt;(loc).put(
             std::ostreambuf_iterator&lt;char&gt;(std::cout),
             false, std::cout, std::cout.fill(), units);
    std::cout &lt;&lt; '\n';

    std::cout.imbue(std::locale(std::cout.getloc(), new my_punct(&quot;ru_RU.utf8&quot;)));
    std::cout &lt;&lt; &quot;With negative_sign set to \&quot;()\&quot;, it prints  as &quot;;
    std::use_facet&lt;std::money_put&lt;char&gt;&gt;(loc).put(
             std::ostreambuf_iterator&lt;char&gt;(std::cout),
             false, std::cout, std::cout.fill(), units);
    std::cout &lt;&lt; '\n';
}
 | output=
In Russian locale, -123,45 prints as -1.23 руб
With negative_sign set to &quot;()&quot;, it prints  as (1.23 руб)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc moneypunct}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc inc | cpp/io/manip/dsc put_money}}
{{dsc end}}

[[de:cpp/locale/money_put/put]]
[[es:cpp/locale/money_put/put]]
[[fr:cpp/locale/money_put/put]]
[[it:cpp/locale/money_put/put]]
[[ja:cpp/locale/money_put/put]]
[[pt:cpp/locale/money_put/put]]
[[ru:cpp/locale/money_put/put]]
[[zh:cpp/locale/money_put/put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/money put/~money put</title>
    <ns>0</ns>
    <id>4439</id>
    <revision>
      <id>43336</id>
      <parentid>15811</parentid>
      <timestamp>2012-11-03T02:27:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="354">{{cpp/locale/facet/destructor|money_put}}

[[de:cpp/locale/money put/~money put]]
[[es:cpp/locale/money put/~money put]]
[[fr:cpp/locale/money put/~money put]]
[[it:cpp/locale/money put/~money put]]
[[ja:cpp/locale/money put/~money put]]
[[pt:cpp/locale/money put/~money put]]
[[ru:cpp/locale/money put/~money put]]
[[zh:cpp/locale/money put/~money put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct</title>
    <ns>0</ns>
    <id>3608</id>
    <revision>
      <id>80098</id>
      <parentid>80095</parentid>
      <timestamp>2015-07-29T13:22:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>pattern wasn't missing, it was lower on this page</comment>
      <text xml:space="preserve" bytes="3286">{{cpp/title | moneypunct}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT, bool International = false &gt;
class moneypunct;
}}
{{dcl end}}

The facet {{lc|std::moneypunct}} encapsulates monetary value format preferences. Stream I/O manipulators {{lc|std::get_money}} and {{lc|std::put_money}} use {{lc|std::moneypunct}} through {{lc|std::money_get}} and {{lc|std::money_put}} for parsing monetary value input and formatting monetary value output. 

{{inheritance diagram/std-moneypunct}}

Four standalone (locale-independent) specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::moneypunct&lt;char&gt;}}          | provides equivalents of the &quot;C&quot; locale preferences }}
{{dsc | {{c|std::moneypunct&lt;wchar_t&gt;}}       | provides wide character equivalents of the &quot;C&quot; locale preferences }}
{{dsc | {{c|std::moneypunct&lt;char, true&gt;}}    | provides equivalents of the &quot;C&quot; locale preferences, with international currency symbols }}
{{dsc | {{c|std::moneypunct&lt;wchar_t, true&gt;}} | provides wide character equivalents of the &quot;C&quot; locale preferences, with international currency symbols }}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;CharT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc constructor}}
{{dsc inc | cpp/locale/moneypunct/dsc destructor}}
{{dsc inc | cpp/locale/moneypunct/dsc decimal_point}}
{{dsc inc | cpp/locale/moneypunct/dsc thousands_sep}}
{{dsc inc | cpp/locale/moneypunct/dsc grouping}}
{{dsc inc | cpp/locale/moneypunct/dsc curr_symbol}}
{{dsc inc | cpp/locale/moneypunct/dsc positive_sign}}
{{dsc inc | cpp/locale/moneypunct/dsc frac_digits}}
{{dsc inc | cpp/locale/moneypunct/dsc pos_format}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_decimal_point}}
{{dsc inc | cpp/locale/moneypunct/dsc do_thousands_sep}}
{{dsc inc | cpp/locale/moneypunct/dsc do_grouping}}
{{dsc inc | cpp/locale/moneypunct/dsc do_curr_symbol}}
{{dsc inc | cpp/locale/moneypunct/dsc do_positive_sign}}
{{dsc inc | cpp/locale/moneypunct/dsc do_frac_digits}}
{{dsc inc | cpp/locale/moneypunct/dsc do_pos_format}}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc hitem | Member | Definition}}
{{dsc | {{dsc small|const bool}} {{tt|intl}} {{mark|static}} | {{tt|International}} }}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

{{include | cpp/locale/money_base/inherit}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc money_base}}
{{dsc inc | cpp/locale/dsc moneypunct_byname}}
{{dsc inc | cpp/locale/dsc money_get}}
{{dsc inc | cpp/locale/dsc money_put}}
{{dsc end}}

[[de:cpp/locale/moneypunct]]
[[es:cpp/locale/moneypunct]]
[[fr:cpp/locale/moneypunct]]
[[it:cpp/locale/moneypunct]]
[[ja:cpp/locale/moneypunct]]
[[pt:cpp/locale/moneypunct]]
[[ru:cpp/locale/moneypunct]]
[[zh:cpp/locale/moneypunct]]</text>
      <sha1>sy4qienrtpnd17p3iencybuhy6ixeew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct byname</title>
    <ns>0</ns>
    <id>6346</id>
    <revision>
      <id>61628</id>
      <parentid>61622</parentid>
      <timestamp>2013-06-06T07:30:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+inherited members</comment>
      <text xml:space="preserve" bytes="2537">{{cpp/title | moneypunct_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT, bool Intl = false &gt;
class moneypunct_byname : public std::moneypunct&lt;CharT, Intl&gt;;
}}
{{dcl end}}

{{lc|std::moneypunct_byname}} is a {{lc|std::moneypunct}} facet which encapsulates monetary formatting preferences of a locale specified at its construction.

Two specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::moneypunct_byname&lt;char, Intl&gt;}} | locale-specific {{lc|std::moneypunct}} facet for narrow character I/O }}
{{dsc | {{c|std::moneypunct_byname&lt;wchar_t, Intl&gt;}} | locale-specific {{lc|std::moneypunct}} facet for wide character I/O }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|pattern}} | {{lc|std::money_base::pattern}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;CharT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | moneypunct_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | moneypunct_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | moneypunct_byname}}
{{include | cpp/locale/byname/destructor | moneypunct_byname}}

{{include | cpp/locale/moneypunct/inherit}}
{{include | cpp/locale/money_base/inherit}}
===Example===

{{example
 | This example demonistrates how to apply monetary formatting rules of another language without changing the rest of the locale. 
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;locale&gt;
int main()
{
    long double mon = 1234567;
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::wcout.imbue(std::locale());
    std::wcout &lt;&lt; L&quot;american locale : &quot; &lt;&lt; std::showbase
               &lt;&lt; std::put_money(mon) &lt;&lt; '\n';
    std::wcout.imbue(std::locale(std::wcout.getloc(),
                                 new std::moneypunct_byname&lt;wchar_t&gt;(&quot;ru_RU.utf8&quot;)));
    std::wcout &lt;&lt; L&quot;american locale with russian moneypunct: &quot;
               &lt;&lt; std::put_money(mon) &lt;&lt; '\n';
}
 | output=
american locale : $12,345.67
american locale with russian moneypunct: 12 345.67 руб
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc moneypunct}}
{{dsc end}}

[[de:cpp/locale/moneypunct byname]]
[[es:cpp/locale/moneypunct byname]]
[[fr:cpp/locale/moneypunct byname]]
[[it:cpp/locale/moneypunct byname]]
[[ja:cpp/locale/moneypunct byname]]
[[pt:cpp/locale/moneypunct byname]]
[[ru:cpp/locale/moneypunct byname]]
[[zh:cpp/locale/moneypunct byname]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/curr symbol</title>
    <ns>0</ns>
    <id>12881</id>
    <revision>
      <id>64099</id>
      <parentid>64094</parentid>
      <timestamp>2013-08-08T23:56:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-neg</comment>
      <text xml:space="preserve" bytes="2177">{{cpp/locale/moneypunct/title | curr_symbol, do_curr_symbol}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
string_type curr_symbol() const;
}}
{{dcl | num=2 | 1=
protected:
virtual string_type do_curr_symbol() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_curr_symbol}} of the most derived class.

@2@ Returns the string used as the currency identifier by this locale. If {{tt|International}} (the second template parameter of {{tt|std::moneypunct}}) is {{c|false}}, the identifier is usually a single (wide) character, such as {{c|&quot;￥&quot;}} or {{c|&quot;$&quot;}}. If {{tt|International}} is {{c|true}}, the identifier is usually a four-character string holding the three-character international currency code followed by a space ({{c|&quot;JPY &quot;}} or {{c|&quot;USD &quot;}})

===Return value===
The object of type {{tt|string_type}} holding the currency symbol or code.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
void show_ccy(const char* locname)
{
    std::locale loc(locname);
    std::cout &lt;&lt; locname &lt;&lt; &quot; currency symbol is &quot;
              &lt;&lt; std::use_facet&lt;std::moneypunct&lt;char, true&gt;&gt;(loc).curr_symbol()
              &lt;&lt; &quot;or &quot; &lt;&lt; std::use_facet&lt;std::moneypunct&lt;char&gt;&gt;(loc).curr_symbol()
              &lt;&lt; &quot; for short\n&quot;;
}
int main()
{
    show_ccy(&quot;en_US.utf8&quot;);
    show_ccy(&quot;ja_JP.utf8&quot;);
    show_ccy(&quot;sv_SE.utf8&quot;);
    show_ccy(&quot;ru_RU.utf8&quot;);
    show_ccy(&quot;vi_VN.utf8&quot;);
}
 | output=
en_US.utf8 currency symbol is USD or $ for short
ja_JP.utf8 currency symbol is JPY or ￥ for short
sv_SE.utf8 currency symbol is SEK or kr for short
ru_RU.utf8 currency symbol is RUB or руб for short
vi_VN.utf8 currency symbol is VND or ₫ for short
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_pos_format}}
{{dsc end}}

[[de:cpp/locale/moneypunct/curr_symbol]]
[[es:cpp/locale/moneypunct/curr_symbol]]
[[fr:cpp/locale/moneypunct/curr_symbol]]
[[it:cpp/locale/moneypunct/curr_symbol]]
[[ja:cpp/locale/moneypunct/curr_symbol]]
[[pt:cpp/locale/moneypunct/curr_symbol]]
[[ru:cpp/locale/moneypunct/curr_symbol]]
[[zh:cpp/locale/moneypunct/curr_symbol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/decimal point</title>
    <ns>0</ns>
    <id>12893</id>
    <revision>
      <id>65575</id>
      <parentid>64420</parentid>
      <timestamp>2013-09-20T22:59:03Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2081">{{cpp/locale/moneypunct/title | decimal_point, do_decimal_point}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
CharT decimal_point() const;
}}
{{dcl | num=2 | 1=
protected:
virtual CharT do_decimal_point() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_decimal_point}} of the most derived class.

@2@ Returns the character to use as the decimal point separator in monetary I/O if the format uses fractions (that is, if {{lc|do_frac_digits()}} is greater than zero). For typical U.S. locales, it is the character {{c|'.'}} (or {{c|L'.'}})

===Return value===
The object of type {{tt|CharT}} holding the decimal point character. 

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;locale&gt;

void show_dpt(const char* locname)
{
    std::locale loc(locname);
    std::cout.imbue(loc);
    std::cout &lt;&lt; locname &lt;&lt; &quot; decimal point is '&quot;
              &lt;&lt; std::use_facet&lt;std::moneypunct&lt;char&gt;&gt;(loc).decimal_point()
              &lt;&lt; &quot;' for example: &quot; &lt;&lt; std::showbase &lt;&lt; std::put_money(123);
    if (std::use_facet&lt;std::moneypunct&lt;char&gt;&gt;(loc).frac_digits() == 0)
        std::cout &lt;&lt; &quot; (does not use frac digits) &quot;;

    std::cout &lt;&lt; '\n';
}

int main()
{
    show_dpt(&quot;en_US.utf8&quot;);
    show_dpt(&quot;ja_JP.utf8&quot;);
    show_dpt(&quot;sv_SE.utf8&quot;);
    show_dpt(&quot;de_DE.utf8&quot;);

}
 | output=
en_US.utf8 decimal point is '.' for example: $1.23
ja_JP.utf8 decimal point is '.' for example: ￥123 (does not use frac digits)
sv_SE.utf8 decimal point is ',' for example: 1,23 kr
de_DE.utf8 decimal point is ',' for example: 1,23 €
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_frac_digits}}
{{dsc end}}

[[de:cpp/locale/moneypunct/decimal_point]]
[[es:cpp/locale/moneypunct/decimal_point]]
[[fr:cpp/locale/moneypunct/decimal_point]]
[[it:cpp/locale/moneypunct/decimal_point]]
[[ja:cpp/locale/moneypunct/decimal_point]]
[[pt:cpp/locale/moneypunct/decimal_point]]
[[ru:cpp/locale/moneypunct/decimal_point]]
[[zh:cpp/locale/moneypunct/decimal_point]]</text>
      <sha1>tfitk5gh5mn7l7j6he29nm98qgg5zag</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/do thousands sep</title>
    <ns>0</ns>
    <id>9465</id>
    <redirect title="cpp/locale/moneypunct/thousands sep" />
    <revision>
      <id>40316</id>
      <timestamp>2012-10-12T18:54:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/moneypunct/do thousands sep]] to [[cpp/locale/moneypunct/thousands sep]]</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[cpp/locale/moneypunct/thousands sep]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/frac digits</title>
    <ns>0</ns>
    <id>12876</id>
    <revision>
      <id>69693</id>
      <parentid>69676</parentid>
      <timestamp>2014-04-20T03:37:13Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1144">{{cpp/locale/moneypunct/title | frac_digits, do_frac_digits}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
int frac_digits() const;
}}
{{dcl | num=2 | 1=
protected:
virtual int do_frac_digits() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_frac_digits}} of the most derived class.

@2@ Returns the number of digits to be displayed after the decimal point when printing monetary values

===Return value===
The number of digits to be displayed after the decimal point. In common U.S. locales, this is the value {{c|2}}.

===Example===
{{cpp/locale/moneypunct/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_thousands_sep}}
{{dsc inc | cpp/locale/moneypunct/dsc do_decimal_point}}
{{dsc end}}

[[de:cpp/locale/moneypunct/frac digits]]
[[es:cpp/locale/moneypunct/frac digits]]
[[fr:cpp/locale/moneypunct/frac digits]]
[[it:cpp/locale/moneypunct/frac digits]]
[[ja:cpp/locale/moneypunct/frac digits]]
[[pt:cpp/locale/moneypunct/frac digits]]
[[ru:cpp/locale/moneypunct/frac digits]]
[[zh:cpp/locale/moneypunct/frac digits]]</text>
      <sha1>i3u0lhk2k3kpm9lpobv6ulx155j8e14</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/grouping</title>
    <ns>0</ns>
    <id>12877</id>
    <revision>
      <id>64069</id>
      <timestamp>2013-08-07T22:59:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1314">{{cpp/locale/moneypunct/title | grouping, do_grouping}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
std::string grouping() const;
}}
{{dcl | num=2 | 1=
protected:
virtual std::string do_grouping() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_grouping}} of the most derived class.

@2@ Returns the pattern that determines the grouping of the digits in the monetary output, with the same exact meaning as {{lc|std::numpunct::do_grouping}}

===Return value===
The object of type {{lc|std::string}} holding the groups. The standard specializations of {{tt|std::numpunct}} return an empty string, indicating no grouping. Typical groupings (e.g. the {{tt|en_US}} locale) return {{c|&quot;\003&quot;}}.

===Example===
{{cpp/locale/moneypunct/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_thousands_sep}}
{{dsc inc | cpp/locale/moneypunct/dsc do_decimal_point}}
{{dsc end}}

[[de:cpp/locale/moneypunct/frac digits]]
[[es:cpp/locale/moneypunct/frac digits]]
[[fr:cpp/locale/moneypunct/frac digits]]
[[it:cpp/locale/moneypunct/frac digits]]
[[ja:cpp/locale/moneypunct/frac digits]]
[[pt:cpp/locale/moneypunct/frac digits]]
[[ru:cpp/locale/moneypunct/frac digits]]
[[zh:cpp/locale/moneypunct/frac digits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/moneypunct</title>
    <ns>0</ns>
    <id>4434</id>
    <revision>
      <id>43321</id>
      <parentid>15805</parentid>
      <timestamp>2012-11-03T02:24:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="364">{{cpp/locale/facet/constructor|moneypunct}}

[[de:cpp/locale/moneypunct/moneypunct]]
[[es:cpp/locale/moneypunct/moneypunct]]
[[fr:cpp/locale/moneypunct/moneypunct]]
[[it:cpp/locale/moneypunct/moneypunct]]
[[ja:cpp/locale/moneypunct/moneypunct]]
[[pt:cpp/locale/moneypunct/moneypunct]]
[[ru:cpp/locale/moneypunct/moneypunct]]
[[zh:cpp/locale/moneypunct/moneypunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/neg format</title>
    <ns>0</ns>
    <id>12897</id>
    <redirect title="cpp/locale/moneypunct/pos format" />
    <revision>
      <id>64435</id>
      <timestamp>2013-08-16T19:35:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/locale/moneypunct/pos_format]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/pos format</title>
    <ns>0</ns>
    <id>12882</id>
    <revision>
      <id>64432</id>
      <parentid>64101</parentid>
      <timestamp>2013-08-16T19:32:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso</comment>
      <text xml:space="preserve" bytes="2652">{{cpp/locale/moneypunct/title | pos_format, do_pos_format, neg_format, do_neg_format}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
pattern pos_format() const;
}}
{{dcl | num=2 | 1=
public:
pattern neg_format() const;
}}
{{dcl | num=3 | 1=
protected:
virtual pattern do_pos_format() const;
}}
{{dcl | num=4 | 1=
protected:
virtual pattern do_neg_format() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_pos_format}} of the most derived class.
@2@ Public member function, calls the member function {{tt|do_neg_format}} of the most derived class.
@3@ Returns the format structure (of type {{ltt|cpp/locale/money_base|std::money_base::format}}) which describes the formatting of positive monetary values.
@4@ Returns the format structure (of type {{ltt|cpp/locale/money_base|std::money_base::format}}) which describes the formatting of negative monetary values.

The standard specializations of {{c|std::moneypunct}} return the pattern {{c|{symbol, sign, none, value} }}

===Return value===
The object of type {{ltt|cpp/locale/money_base|std::money_base::format}} describing the formatting used by this locale.

===Example===
{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

struct my_punct : std::moneypunct_byname&lt;char, false&gt; {
    my_punct(const char* name) : moneypunct_byname(name) {}
    pattern do_pos_format() const { return { {value, space, symbol, sign} };}
    pattern do_neg_format() const { return { {value, space, symbol, sign} };}
};
int main()
{
    std::cout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::cout &lt;&lt; &quot;american locale: &quot; &lt;&lt; std::showbase
              &lt;&lt; std::put_money(12345678.0) &lt;&lt; '\n';

    std::cout.imbue(std::locale(std::cout.getloc(), new my_punct(&quot;en_US.utf8&quot;)));
    std::cout &lt;&lt; &quot;locale with modified moneypunct:\n&quot;
              &lt;&lt; std::put_money(12345678.0)  &lt;&lt; '\n'
              &lt;&lt; std::put_money(-12345678.0) &lt;&lt; '\n';
}
 | output=
american locale: $123,456.78
locale with modified moneypunct:
123,456.78 $
123,456.78 $-
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_curr_symbol}}
{{dsc inc | cpp/locale/moneypunct/dsc do_positive_sign}}
{{dsc inc | cpp/locale/money_get/dsc do_get}}
{{dsc inc | cpp/locale/money_put/dsc do_put}}
{{dsc end}}

[[de:cpp/locale/moneypunct/pos_format]]
[[es:cpp/locale/moneypunct/pos_format]]
[[fr:cpp/locale/moneypunct/pos_format]]
[[it:cpp/locale/moneypunct/pos_format]]
[[ja:cpp/locale/moneypunct/pos_format]]
[[pt:cpp/locale/moneypunct/pos_format]]
[[ru:cpp/locale/moneypunct/pos_format]]
[[zh:cpp/locale/moneypunct/pos_format]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/positive sign</title>
    <ns>0</ns>
    <id>12894</id>
    <revision>
      <id>64441</id>
      <parentid>64425</parentid>
      <timestamp>2013-08-17T05:42:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix copypaste typo in example and expand slightly</comment>
      <text xml:space="preserve" bytes="3030">{{cpp/locale/moneypunct/title | positive_sign, do_positive_sign, negative_sign, do_negative_sign}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
string_type positive_sign() const;
}}
{{dcl | num=2 | 1=
public:
string_type negative_sign() const;
}}
{{dcl | num=3 | 1=
protected:
virtual string_type do_positive_sign() const;
}}
{{dcl | num=4 | 1=
protected:
virtual string_type do_negative_sign() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_positive_sign}} of the most derived class.
@2@ Public member function, calls the member function {{tt|do_negative_sign}} of the most derived class.
@3@ Returns the string that is used for formatting of positive monetary values.
@3@ Returns the string that is used for formatting of negative monetary values.

Only the first character of the string returned is the character that appears in the {{lc|pos_format()}}/{{lc|neg_format()}} position indicated by the value {{c|sign}}. The rest of the characters appear ''after'' the rest of the monetary string.

In particular, for negative_sign of {{c|&quot;-&quot;}}, the formatting may appear as {{c|&quot;-1.23 €&quot;}}, while for negative_sign of {{c|&quot;()&quot;}} it would appear as {{c|&quot;(1.23 €)&quot;}}.

===Return value===
The string of type {{tt|string_type}} holding the characters to be used as positive or negative sign.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;locale&gt;

struct my_punct : std::moneypunct_byname&lt;char, false&gt; {
    my_punct(const char* name) : moneypunct_byname(name) {}
    string_type do_negative_sign() const { return &quot;()&quot;; }
};

int main()
{
    std::locale loc(&quot;de_DE.utf8&quot;);
    std::cout.imbue(loc);
    std::cout &lt;&lt; loc.name() &lt;&lt; &quot; negative sign is '&quot;
              &lt;&lt; std::use_facet&lt;std::moneypunct&lt;char&gt;&gt;(loc).negative_sign()
              &lt;&lt; &quot;' for example: &quot; &lt;&lt; std::showbase &lt;&lt; std::put_money(-1234) &lt;&lt; '\n';

    std::locale loc2(&quot;ms_MY.utf8&quot;);
    std::cout.imbue(loc2);
    std::cout &lt;&lt; loc2.name() &lt;&lt; &quot; negative sign is '&quot;
              &lt;&lt; std::use_facet&lt;std::moneypunct&lt;char&gt;&gt;(loc2).negative_sign()
              &lt;&lt; &quot;' for example: &quot; &lt;&lt; std::put_money(-1234) &lt;&lt; '\n';

    std::cout.imbue(std::locale(std::cout.getloc(), new my_punct(&quot;de_DE.utf8&quot;)));
    std::cout &lt;&lt; &quot;de_DE.utf8 with negative_sign set to \&quot;()\&quot;: &quot;
              &lt;&lt; std::put_money(-1234) &lt;&lt; '\n';

}
 | output=
de_DE.utf8 negative sign is '-' for example: -12,34 €
ms_MY.utf8 negative sign is '()' for example: (RM12.34)
de_DE.utf8 with negative_sign set to &quot;()&quot;: (12,34 €)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_pos_format}}
{{dsc end}}

[[de:cpp/locale/moneypunct/decimal_point]]
[[es:cpp/locale/moneypunct/decimal_point]]
[[fr:cpp/locale/moneypunct/decimal_point]]
[[it:cpp/locale/moneypunct/decimal_point]]
[[ja:cpp/locale/moneypunct/decimal_point]]
[[pt:cpp/locale/moneypunct/decimal_point]]
[[ru:cpp/locale/moneypunct/decimal_point]]
[[zh:cpp/locale/moneypunct/decimal_point]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/thousands sep</title>
    <ns>0</ns>
    <id>3756</id>
    <revision>
      <id>69677</id>
      <parentid>64067</parentid>
      <timestamp>2014-04-19T11:27:10Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>wording</comment>
      <text xml:space="preserve" bytes="1182">{{cpp/locale/moneypunct/title | thousands_sep, do_thousands_sep}}
{{cpp/locale/moneypunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
char_type thousands_sep() const;
}}
{{dcl | num=2 | 1=
protected:
virtual char_type do_thousands_sep() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_thousands_sep}} of the most derived class.

@2@ Returns the character to be used as the separator between digit groups when parsing or formatting the integral parts of monetary values. 

===Return value===
The object of type {{tt|char_type}} to use as the thousands separator. In common U.S. locales, this is {{c|’,’}} or {{c|L’,’}}.

===Example===
{{cpp/locale/moneypunct/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/moneypunct/dsc do_grouping}}
{{dsc end}}

[[de:cpp/locale/moneypunct/thousands sep]]
[[es:cpp/locale/moneypunct/thousands sep]]
[[fr:cpp/locale/moneypunct/thousands sep]]
[[it:cpp/locale/moneypunct/thousands sep]]
[[ja:cpp/locale/moneypunct/thousands sep]]
[[pt:cpp/locale/moneypunct/thousands sep]]
[[ru:cpp/locale/moneypunct/thousands sep]]
[[zh:cpp/locale/moneypunct/thousands sep]]</text>
      <sha1>4puegg9k5yrkumecvcs11moeo9xo9ah</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/moneypunct/~moneypunct</title>
    <ns>0</ns>
    <id>4438</id>
    <revision>
      <id>43306</id>
      <parentid>15810</parentid>
      <timestamp>2012-11-03T02:21:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="371">{{cpp/locale/facet/destructor|moneypunct}}

[[de:cpp/locale/moneypunct/~moneypunct]]
[[es:cpp/locale/moneypunct/~moneypunct]]
[[fr:cpp/locale/moneypunct/~moneypunct]]
[[it:cpp/locale/moneypunct/~moneypunct]]
[[ja:cpp/locale/moneypunct/~moneypunct]]
[[pt:cpp/locale/moneypunct/~moneypunct]]
[[ru:cpp/locale/moneypunct/~moneypunct]]
[[zh:cpp/locale/moneypunct/~moneypunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num get</title>
    <ns>0</ns>
    <id>3759</id>
    <revision>
      <id>65769</id>
      <parentid>62442</parentid>
      <timestamp>2013-10-07T18:25:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix description of the required specializations</comment>
      <text xml:space="preserve" bytes="3950">{{cpp/title|num_get}}
{{cpp/locale/num_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; 
    class CharT,
    class InputIt = std::istreambuf_iterator&lt;CharT&gt;
&gt; class num_get;
}}
{{dcl end}}

Class {{tt|std::num_get}} encapsulates the rules for parsing string representations of numeric values. Specifically, types {{c|bool}}, {{c|unsigned short}}, {{c|unsigned int}}, {{c|long}}, {{c|unsigned long}}, {{c|long long}}, {{c|unsigned long long}}, {{c|float}}, {{c|double}}, {{c|long double}}, and {{c|void*}} are supported. The standard formatting input operators (such as {{c|cin &gt;&gt; n;}}) use the {{tt|std::num_get}} facet of the I/O stream's locale to parse the text representations of the numbers.

{{inheritance diagram/std-num_get}}

===Type requirements===
{{par begin}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Specializations===
Two standalone (locale-independent) full specializations and two partial specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::num_get&lt;char&gt;}} | creates narrow string parsing of numbers}}
{{dsc | {{c|std::num_get&lt;wchar_t&gt;}} | creates wide string parsing of numbers}}
{{dsc | {{c|std::num_get&lt;char, InputIt&gt;}} | creates narrow string parsing of numbers using custom input iterator}}
{{dsc | {{c|std::num_get&lt;wchar_t, InputIt&gt;}} | creates wide string parsing of numbers using custom input iterator}}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|iter_type}} | {{tt|InputIt}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/num_get/num_get | constructs a new num_get facet }}
{{dsc prot mem dtor | cpp/locale/num_get/~num_get | destructs a num_get facet }}
{{dsc mem fun | cpp/locale/num_get/get | invokes {{tt|do_get}} }}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc prot mem vfun | cpp/locale/num_get/get | title=do_get | parses a number from an input stream}}
{{dsc end}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;

int main()
{
    std::string de_double = &quot;1.234.567,89&quot;;
    std::string us_double = &quot;1,234,567.89&quot;;

    // parse using streams
    std::istringstream de_in(de_double);
    de_in.imbue(std::locale(&quot;de_DE&quot;));
    double f1;
    de_in &gt;&gt; f1;

    std::istringstream us_in(de_double);
    us_in.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    double f2;
    us_in &gt;&gt; f2;

    std::cout &lt;&lt; &quot;Parsing &quot; &lt;&lt; de_double &lt;&lt; &quot; as double gives &quot; &lt;&lt; std::fixed
              &lt;&lt; f1 &lt;&lt; &quot; in de_DE locale and &quot; &lt;&lt; f2 &lt;&lt; &quot; in en_US\n&quot;;

    // use the facet directly
    std::istringstream s3(us_double);
    s3.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    auto&amp; f = std::use_facet&lt;std::num_get&lt;char&gt;&gt;(s3.getloc());
    std::istreambuf_iterator&lt;char&gt; beg(s3), end;
    double f3;
    std::ios::iostate err;
    f.get(beg, end, s3, err, f3);
    std::cout &lt;&lt; &quot;parsing &quot; &lt;&lt; us_double
              &lt;&lt; &quot; as double using raw en_US facet gives &quot; &lt;&lt; f3 &lt;&lt; '\n';
}
 | output=
Parsing 1.234.567,89 as double gives 1234567.890000 in de_DE locale and 1.234000 in en_US
parsing 1,234,567.89 as double using raw en_US facet gives 1234567.890000
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc numpunct}}
{{dsc inc | cpp/locale/dsc num_put}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc end}}

[[de:cpp/locale/num get]]
[[es:cpp/locale/num get]]
[[fr:cpp/locale/num get]]
[[it:cpp/locale/num get]]
[[ja:cpp/locale/num get]]
[[pt:cpp/locale/num get]]
[[ru:cpp/locale/num get]]
[[zh:cpp/locale/num get]]</text>
      <sha1>lm7odiu6yaq9zegawdyd8gwnj0pgjkn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num get/do get</title>
    <ns>0</ns>
    <id>9463</id>
    <redirect title="cpp/locale/num get/get" />
    <revision>
      <id>40307</id>
      <timestamp>2012-10-12T18:48:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/num get/do get]] to [[cpp/locale/num get/get]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/locale/num get/get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num get/get</title>
    <ns>0</ns>
    <id>4048</id>
    <revision>
      <id>85899</id>
      <parentid>82349</parentid>
      <timestamp>2016-06-01T21:02:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention hexfloat numbers in the note about LWG 2381</comment>
      <text xml:space="preserve" bytes="12253">{{cpp/num_get/title|get|do_get}}
{{cpp/locale/num_get/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl |
public:
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, bool&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, long&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, long long&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, unsigned short&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, unsigned int&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, unsigned long&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, unsigned long long&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, float&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, double&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, long double&amp; v ) const;
}}
{{dcl |
iter_type get( iter_type in, iter_type end, std::ios_base&amp; str, 
               std::ios_base::iostate&amp; err, void*&amp; v ) const;
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl |
protected:
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, bool&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, long&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, long long&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, unsigned short&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, unsigned int&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, unsigned long&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, unsigned long long&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, float&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, double&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, long double&amp; v ) const;
}}
{{dcl |
virtual iter_type do_get( iter_type in, iter_type end, std::ios_base&amp; str, 
                          std::ios_base::iostate&amp; err, void*&amp; v ) const;
}}
{{dcl rev end}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_get}} of the most derived class.

@2@ Reads characters from the input iterator {{tt|in}} and generates the value of the type of {{tt|v}}, taking into account IO stream formatting flags from {{tt|str.flags()}}, character classification rules from {{c|std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(str.getloc())}}, and numeric punctuation characters from {{c|std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc())}}. This function is called by all formatted input stream operators such as {{c|std::cin &gt;&gt; n;}}.

Conversion occurs in three stages

====Stage 1: conversion specifier selection==== 

* I/O format flags are obtained, as if by
: {{c|1=fmtflags basefield = (str.flags() &amp; std::ios_base::basefield);}}
: {{c|1=fmtflags boolalpha = (str.flags() &amp; std::ios_base::boolalpha);}}
* If the type of {{tt|v}} is an integer type, the the first applicable choice of the following five is selected:
: If {{c|1=basefield == oct}}, will use conversion specifier {{c|%o}}
: If {{c|1=basefield == hex}}, will use conversion specifier {{c|%X}}
: If {{c|1=basefield == 0}}, will use conversion specifier {{c|%i}}
: If the type of {{tt|v}} is signed, will use conversion specifier {{c|%d}}
: If the type of {{tt|v}} is unsigned, will use conversion specifier {{c|%u}}
* For integer types, length modifier is added to the conversion specification if necessary: {{c|h}} for {{c|short}} and {{c|unsigned short}}, {{c|l}} for {{c|long}} and {{c|unsigned long}}, {{c|ll}} for {{c|long long}} and {{c|unsigned long long}}
* If the type of {{tt|v}} is {{c|float}}, will use conversion specifier {{c|%g}}
* If the type of {{tt|v}} is {{c|double}}, will use conversion specifier {{c|%lg}}
* If the type of {{tt|v}} is {{c|long double}}, will use conversion specifier {{c|%Lg}}
* If the type of {{tt|v}} is {{c|void*}}, will use conversion specifier {{c|%p}}
* If the type of {{tt|v}} is {{c|bool}} and {{c|1=boolalpha==0}}, proceeds as if the type of {{tt|v}} is {{c|long}}, except for the value to be stored in {{tt|v}} in stage 3.
* If the type of {{tt|v}} is {{c|bool}} and {{c|1=boolalpha!=0}}, the following replaces stages 2 and 3:
** Successive characters obtained from the input iterator {{tt|in}} are matched against the character sequences obtained from {{c|std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc()).falsename()}} and {{c|std::use_facet&lt;std::numpunct&lt;charT&gt; &gt;(str.getloc()).truename()}} only as necessary as to identify the unique match. The input iterator {{tt|in}} is compared to {{tt|end}} only when necessary to obtain a character.
** If the target sequence is uniquely matched, {{tt|v}} is set to the corresponding {{c|bool}} value. Otherwise {{c|false}} is stored in {{tt|v}} and {{lc|std::ios_base::failbit}} is assigned to {{tt|err}}. If unique match could not be found before the input ended ({{c|1=in==end}}), {{c|1=err{{!}}=std::ios_base::eofbit}} is executed.
====Stage 2: character extraction==== 
* If {{c|1=in==end}}, Stage 2 is terminated immediately, no further characters are extracted
* The next character is extracted from {{c|in}} as if by {{c|1=char_type ct = *in;}}
** If the character matches one of {{c|&quot;0123456789abcdefxABCDEFX+-&quot;}}, widened to the locale's char_type as if by {{c|std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(str.getloc()).widen()}}, it is converted to the corresponding {{c|char}}.
** If the character matches the decimal point separator ({{c|std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc()).decimal_point())}}), it is replaced by {{c|'.'}}.
** If the character matches the thousands separator ({{c|std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc()).thousands_sep()}}) and the thousands separation is in use at all {{c|1=std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc()).grouping().length() != 0}}, then if the decimal point {{c|'.'}} has not yet been accumulated, the position of the character is remembered, but the character is otherwise ignored. If the decimal point has already been accumulated, the character is discarded and Stage 2 terminates.
** In any case, the check is made whether the {{c|char}} obtained from the previous steps is allowed in the input field that would be parsed by {{lc|std::scanf}} given the conversion specifier selected in Stage 1. If it is allowed, it is accumulated in a temporary buffer and Stage 2 repeats. If it is not allowed, Stage 2 terminates.
====Stage 3: conversion and storage====
* The sequence of {{c|char}}s accumulated in Stage 2 is converted to a numeric value
{{rev begin}}
{{rev | until=c++11 | 
:The input is parsed as if by {{lc|std::scanf}} with the conversion specifier selected in Stage 1 
}}
{{rev | since=c++11 |  until=c++17 |
:The input is parsed as if by {{lc|std::strtoll}} for signed integer {{tt|v}}, {{lc|std::strtoull}} for unsigned integer {{tt|v}}, or {{lc|std::strtold}} for floating-point {{tt|v}}
}}
{{rev | since=c++17 | 
:The input is parsed as if by {{lc|std::strtoll}} for signed integer {{tt|v}}, {{lc|std::strtoull}} for unsigned integer {{tt|v}}, {{lc|std::strtof}} for {{tt|float}} {{tt|v}}, {{lc|std::strtod}} for {{tt|double}} {{tt|v}}, or {{lc|std::strtold}} for {{tt|long double}} {{tt|v}}
}}
{{rev end}}
{{rev begin}}
{{rev | since=c++11 |
* If the conversion function fails to convert the entire field, the value {{c|0}} is stored in {{tt|v}}
* If the conversion function results in a positive value too large to fit in the type of {{tt|v}}, the most positive representable value is stored in {{tt|v}}
* If the conversion function results in a negative value too large to fit in the type of {{tt|v}}, the most negative representable value is stored in {{tt|v}}{{rev inl|until=c++17|, or zero for unsigned integer types.}}
}}
{{rev end}}
* In any case, if the conversion function fails {{lc|std::ios_base::failbit}} is assigned to {{tt|err}}
* Otherwise, the numeric result of the conversion is stored in {{tt|v}}
** If the type of {{tt|v}} is {{c|bool}} and boolalpha is not set, then if the value to be stored is {{c|0}}, {{c|false}} is stored, if the value to be stored is {{c|1}}, {{c|true}} is stored, for any other value {{lc|std::ios_base::failbit}} is assigned to {{tt|err}} and {{c|true}} is stored.
* After this, digit grouping is checked. if the position of any of the thousands separators discarded in Stage 2 does not match the grouping provided by {{c|std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc()).grouping()}}, {{lc|std::ios_base::failbit}} is assigned to {{tt|err}}.
* If Stage 2 was terminated by the test {{c|1=in==end}}, {{c|1=err{{!}}=std::ios_base::eofbit}} is executed to set the eof bit.

===Return value===
{{tt|in}}

===Notes===
In C++98/C++03, if an error occurs, {{tt|v}} is left unchanged. In C++11, it is set to a value as described above.

The result of converting a negative number string into an unsigned integer was specified to produce zero until C++17, although some implementations followed the protocol of {{lc|std::strtoull}} which negates in the target type, giving {{c|LLONG_MAX}} for {{c|&quot;-1&quot;}}, and so produce the largest value of the target type instead. As of C++17, strictly following {{lc|std::strtoull}} is the correct behavior.

Because stage 2 filters out characters such as 'p', 'N' or 'i', the hexadecimal floating-point numbers such as &quot;0x1.23p-10&quot; and the strings &quot;NaN&quot; or &quot;inf&quot; may be rejected by {{tt|do_get(double)}} even if they are valid input to {{tt|strtod}}: this is [http://cplusplus.github.io/LWG/lwg-active.html#2381 LWG #2381]

===Example===

{{example
 | 
An implementation of {{lc|operator&gt;&gt;}} for a user-defined type.
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;locale&gt;
 
struct base { long x; };
 
template &lt;class CharT, class Traits&gt;
std::basic_istream&lt;CharT, Traits&gt;&amp;
    operator &gt;&gt;(std::basic_istream&lt;CharT, Traits&gt;&amp; is,
                base&amp; b)
{
    std::ios_base::iostate err = std::ios_base::goodbit;
    try // setting err could throw
    {
        typename std::basic_istream&lt;CharT, Traits&gt;::sentry s(is);
 
        if (s) // if stream is ready for input
        {
            std::istreambuf_iterator&lt;CharT, Traits&gt; end;
            std::use_facet&lt;std::num_get&lt;CharT&gt;&gt;(is.getloc()).get(is, end, is, err, b.x);
        }
    } catch(std::ios_base::failure&amp; error)
    {
        // handle the exception
    }
    return is;
}

int main()
{
    base b;
 
    std::cin &gt;&gt; b;
}

| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc end}}

[[de:cpp/locale/num get/get]]
[[es:cpp/locale/num get/get]]
[[fr:cpp/locale/num get/get]]
[[it:cpp/locale/num get/get]]
[[ja:cpp/locale/num get/get]]
[[pt:cpp/locale/num get/get]]
[[ru:cpp/locale/num get/get]]
[[zh:cpp/locale/num get/get]]</text>
      <sha1>c6u3bbwtrt1973cbhmi6lro99ykq6a1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num get/num get</title>
    <ns>0</ns>
    <id>4415</id>
    <revision>
      <id>43270</id>
      <parentid>15782</parentid>
      <timestamp>2012-11-03T02:14:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="313">{{cpp/locale/facet/constructor|num_get}}

[[de:cpp/locale/num get/num get]]
[[es:cpp/locale/num get/num get]]
[[fr:cpp/locale/num get/num get]]
[[it:cpp/locale/num get/num get]]
[[ja:cpp/locale/num get/num get]]
[[pt:cpp/locale/num get/num get]]
[[ru:cpp/locale/num get/num get]]
[[zh:cpp/locale/num get/num get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num get/~num get</title>
    <ns>0</ns>
    <id>4444</id>
    <revision>
      <id>43263</id>
      <parentid>15817</parentid>
      <timestamp>2012-11-03T02:13:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="320">{{cpp/locale/facet/destructor|num_get}}

[[de:cpp/locale/num get/~num get]]
[[es:cpp/locale/num get/~num get]]
[[fr:cpp/locale/num get/~num get]]
[[it:cpp/locale/num get/~num get]]
[[ja:cpp/locale/num get/~num get]]
[[pt:cpp/locale/num get/~num get]]
[[ru:cpp/locale/num get/~num get]]
[[zh:cpp/locale/num get/~num get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num put</title>
    <ns>0</ns>
    <id>3745</id>
    <revision>
      <id>65770</id>
      <parentid>62321</parentid>
      <timestamp>2013-10-07T18:26:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix description of the required specializations</comment>
      <text xml:space="preserve" bytes="3666">{{cpp/title|num_put}}
{{cpp/locale/num_put/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; 
    class CharT,
    class OutputIt = std::ostreambuf_iterator&lt;CharT&gt;
&gt; class num_put;
}}
{{dcl end}}

Class {{tt|std::num_put}} encapsulates the rules for formatting numeric values as strings. Specifically, the types {{c|bool}}, {{c|long}}, {{c|unsigned long}}, {{c|long long}}, {{c|unsigned long long}}, {{c|double}}, {{c|long double}}, {{c|void*}}, and of all types implicitly convertible to these (such as {{c|int}} or {{c|float}}) are supported. The standard formatting output operators (such as {{c|cout &lt;&lt; n;}}) use the {{tt|std::num_put}} facet of the I/O stream's locale to generate text representation of numbers.

{{inheritance diagram/std-num_put}}

===Type requirements===
{{par begin}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Specializations===
Two standalone (locale-independent) full specializations and two partial specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::num_put&lt;char&gt;}} | creates narrow string representations of numbers}}
{{dsc | {{c|std::num_put&lt;wchar_t&gt;}} | creates wide string representations of numbers}}
{{dsc | {{c|std::num_put&lt;char, OutputIt&gt;}} | creates narrow string representations of numbers using custom output iterator}}
{{dsc | {{c|std::num_put&lt;wchar_t, OutputIt&gt;}} | creates wide string representations of numbers using custom output iterator}}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|iter_type}} | {{tt|OutputIt}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/num_put/num_put | constructs a new num_put facet }}
{{dsc prot mem dtor | cpp/locale/num_put/~num_put | destructs a num_put facet }}
{{dsc mem fun | cpp/locale/num_put/put | invokes {{tt|do_put}} }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc prot mem vfun | cpp/locale/num_put/put | title=do_put | formats a number and writes to output stream}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;

int main()
{
    double n = 1234567.89;
    std::cout.imbue(std::locale(&quot;de_DE&quot;));
    std::cout &lt;&lt; &quot;Direct conversion to string:\n&quot;
              &lt;&lt; std::to_string(n) &lt;&lt; '\n'
              &lt;&lt; &quot;Output using a german locale:\n&quot;
              &lt;&lt; std::fixed &lt;&lt; n &lt;&lt; '\n'
              &lt;&lt; &quot;Output using an american locale:\n&quot;;
    // use the facet directly
    std::cout.imbue(std::locale(&quot;en_US.UTF-8&quot;));
    auto&amp; f = std::use_facet&lt;std::num_put&lt;char&gt;&gt;(std::cout.getloc());
    f.put(std::ostreambuf_iterator&lt;char&gt;(std::cout), std::cout, ' ', n);
    std::cout &lt;&lt; '\n';
}
 | output=
Direct conversion to string:
1234567.890000
Output using a german locale:
1.234.567,890000
Output using an american locale:
1,234,567.890000
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc numpunct}}
{{dsc inc | cpp/locale/dsc num_get}}
{{dsc inc | cpp/string/basic_string/dsc to_string}}
{{dsc inc | cpp/string/basic_string/dsc to_wstring}}
{{dsc end}}

[[de:cpp/locale/num put]]
[[es:cpp/locale/num put]]
[[fr:cpp/locale/num put]]
[[it:cpp/locale/num put]]
[[ja:cpp/locale/num put]]
[[pt:cpp/locale/num put]]
[[ru:cpp/locale/num put]]
[[zh:cpp/locale/num put]]</text>
      <sha1>rxfnle2o4tllf9idzieb3b2jkibeal4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num put/do put</title>
    <ns>0</ns>
    <id>9464</id>
    <redirect title="cpp/locale/num put/put" />
    <revision>
      <id>40312</id>
      <timestamp>2012-10-12T18:52:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/num put/do put]] to [[cpp/locale/num put/put]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/locale/num put/put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num put/num put</title>
    <ns>0</ns>
    <id>4422</id>
    <revision>
      <id>43249</id>
      <parentid>15790</parentid>
      <timestamp>2012-11-03T02:10:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="313">{{cpp/locale/facet/constructor|num_put}}

[[de:cpp/locale/num put/num put]]
[[es:cpp/locale/num put/num put]]
[[fr:cpp/locale/num put/num put]]
[[it:cpp/locale/num put/num put]]
[[ja:cpp/locale/num put/num put]]
[[pt:cpp/locale/num put/num put]]
[[ru:cpp/locale/num put/num put]]
[[zh:cpp/locale/num put/num put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num put/put</title>
    <ns>0</ns>
    <id>4254</id>
    <revision>
      <id>83117</id>
      <parentid>82519</parentid>
      <timestamp>2016-01-21T15:00:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>showpoint was totally missing from stage 1 here (it's missing in prose of [facet.num.put.members] but present in table 89, may warrant an editorial)</comment>
      <text xml:space="preserve" bytes="10488">{{cpp/locale/num_put/title|put|do_put}}
{{cpp/locale/num_put/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl rev begin | num=1}}
{{dcl |
public:
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, bool v ) const;
}}
{{dcl |
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, long v ) const;
}}
{{dcl |
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, long long v ) const;
}}
{{dcl |
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, unsigned long v ) const;
}}
{{dcl |
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, unsigned long long v ) const;
}}
{{dcl |
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, double v ) const;
}}
{{dcl |
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, long double v ) const;
}}
{{dcl |
iter_type put( iter_type out, std::ios_base&amp; str, char_type fill, const void* v ) const;
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl |
protected:
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, bool v ) const;
}}
{{dcl |
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, long v ) const;
}}
{{dcl |
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, long long v ) const;
}}
{{dcl |
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, unsigned long ) const;
}}
{{dcl |
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, unsigned long long ) const;
}}
{{dcl |
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, double v ) const;
}}
{{dcl |
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, long double v ) const;
}}
{{dcl |
virtual iter_type do_put( iter_type out, std::ios_base&amp; str, char_type fill, const void* v ) const;
}}
{{dcl rev end}}
{{dcl end}}

@1@ Public member function, calls the protected virtual member function {{tt|do_put}} of the most derived class.

@2@ Writes characters to the output sequence {{tt|out}} which represent the value of {{tt|v}}, formatted as requested by the formatting flags {{c|str.flags()}} and the {{lc|std::numpunct}} and {{lc|std::ctype}} facets of the locale imbued in the stream {{tt|str}}. This function is called by all formatted output stream operators, such as {{c|std::cout &lt;&lt; n;}}.

Conversion occurs in four stages

====Stage 1: conversion specifier selection==== 

* I/O format flags are obtained, as if by
: {{c|1=fmtflags basefield = (str.flags() &amp; std::ios_base::basefield);}}
: {{c|1=fmtflags uppercase = (str.flags() &amp; std::ios_base::uppercase);}}
: {{c|1=fmtflags floatfield = (str.flags() &amp; std::ios_base::floatfield);}}
: {{c|1=fmtflags showpos = (str.flags() &amp; std::ios_base::showpos);}}
: {{c|1=fmtflags showbase = (str.flags() &amp; std::ios_base::showbase);}}
: {{c|1=fmtflags showpoint = (str.flags() &amp; std::ios_base::showpoint);}}
* If the type of {{tt|v}} is {{c|bool}}
** If {{c|1=boolalpha == 0}}, then converts {{tt|v}} to type {{c|int}} and performs integer output.
** If {{c|1=boolalpha != 0}} obtains {{c|std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc()).truename()}} if {{c|1=v == true}} or {{c|std::use_facet&lt;std::numpunct&lt;charT&gt;&gt;(str.getloc()).falsename()}} if {{c|1=v == false}}, and outputs each successive character {{tt|c}} of that string to {{tt|out}} with {{c|1=*out++ = c}}. No further processing is done in this case, the function returns {{tt|out}}.
* If the type of {{tt|v}} is an integer type, the the first applicable choice of the following is selected:
: If {{c|1=basefield == oct}}, will use conversion specifier {{c|%o}}
: If {{c|1=basefield == hex &amp;&amp; !uppercase}}, will use conversion specifier {{c|%x}}
: If {{c|1=basefield == hex}}, will use conversion specifier {{c|%X}}
: If the type of {{tt|v}} is signed, will use conversion specifier {{c|%d}}
: If the type of {{tt|v}} is unsigned, will use conversion specifier {{c|%u}}
* For integer types, length modifier is added to the conversion specification if necessary: {{c|l}} for {{c|long}} and {{c|unsigned long}}, {{c|ll}} for {{c|long long}} and {{c|unsigned long long}}.
* If the type of {{tt|v}} is a floating-point type, the the first applicable choice of the following is selected:
: If {{c|1=floatfield == std::ios_base::fixed}}, will use conversion specifier {{c|%f}}
: If {{c|1=floatfield == std::ios_base::scientific &amp;&amp; !uppercase}}, will use conversion specifier {{c|%e}}
: If {{c|1=floatfield == std::ios_base::scientific}}, will use conversion specifier {{c|%E}}
{{rev begin}}
{{rev|since=c++11|
: If {{c|1=floatfield == (std::ios_base::fixed {{!}} std::ios_base::scientific) &amp;&amp; !uppercase}}, will use conversion specifier {{c|%a}}
: If {{c|1=floatfield == (std::ios_base::fixed {{!}} std::ios_base::scientific)}}, will use conversion specifier {{c|%A}}
}}
{{rev end}}
: If {{c|1=!uppercase}}, will use conversion specifier {{c|%g}}
: otherwise, will use conversion specifier {{c|%G}}
:* If the type of {{tt|v}} is {{c|long double}}, the length modifier {{c|L}} is added to the conversion specifier.
:* Additionally, {{rev inl|since=c++11|if {{c|1=floatfield != (ios_base::fixed {{!}} ios_base::scientific)}}, then}} precision modifier is added, set to {{c|str.precision()}}
* For both integer and floating-point types, if {{c|showpos}} is set, the modifier {{c|+}} is prepended
* For integer types, if {{c|showbase}} is set, the modifier {{c|#}} is prepended.
* For floating-point types, if {{c|showpoint}} is set, the modifier {{c|#}} is prepended.
* If the type of {{tt|v}} is {{c|void*}}, will use conversion specifier {{c|%p}}
* A narrow character string is created as if by a call to {{c|std::printf(spec, v)}} in the &quot;C&quot; locale, where {{tt|spec}} is the chosen conversion specifier.

====Stage 2: locale-specific conversion==== 
* Every character {{tt|c}} obtained in Stage 1, other than the decimal point {{c|'.'}}, is converted to {{tt|CharT}} by calling {{c|std::use_facet&lt;std::ctype&lt;CharT&gt;&gt;(str.getloc()).widen(c)}}.
* For arithmetic types, the thousands separator character, obtained from {{c|std::use_facet&lt;std::numpunct&lt;CharT&gt;&gt;(str.getloc()).thousands_sep()}}, is inserted into the sequence according to the grouping rules provided by {{c|std::use_facet&lt;std::numpunct&lt;CharT&gt;&gt;(str.getloc()).grouping()}}
* Decimal point characters ({{c|'.'}}) are replaced by {{c|std::use_facet&lt;std::numpunct&lt;CharT&gt;&gt;(str.getloc()).decimal_point()}}
====Stage 3: padding====
* The adjustment flag is obtained as if by {{c|1=std::fmtflags adjustfield = (flags &amp; (std::ios_base::adjustfield))}} and examined to identify padding location, as follows
: If {{c|1=adjustfield == std::ios_base::left}}, will pad after
: If {{c|1=adjustfield == std::ios_base::right}}, will pad before
: If {{c|1=adjustfield == std::ios_base::internal}} and a sign character occurs in the representation, will pad after the sign
: If {{c|1=adjustfield == std::ios_base::internal}} and Stage 1 representation began with 0x or 0X, will pad after the x or X
: otherwise, will pad before
* If {{c|str.width()}} is non-zero (e.g. {{lc|std::setw}} was just used) and the number of CharT's after Stage 2 is less than {{c|str.width()}}, then copies of the {{c|fill}} character are inserted at the position indicated by padding to bring the length of the sequence to {{c|str.width()}}.
In any case, {{c|str.width(0)}} is called to cancel the effects of {{lc|std::setw}}.

====Stage 4: output====
Every successive character {{tt|c}} from the sequence of CharT's from Stage 3 is output as if by {{c|1=*out++ = c}}.

===Parameters===
{{par begin}}
{{par | out | iterator pointing to the first character to be overwritten}}
{{par | str | stream to retrieve the formatting information from}}
{{par | fill | padding character used when the results needs to be padded to the field width}}
{{par | v | value to convert to string and output}}
{{par end}}

===Return value===
{{tt|out}}

===Notes===
The leading zero generated by the conversion specification {{c|#o}} (resulting from the combination of {{lc|std::showbase}} and {{lc|std::oct}} for example) is not counted as a padding character.
{{rev begin}}
{{rev|since=c++11|1=
When formatting a floating point value as hexfloat (i.e., when {{c|1=floatfield == (std::ios_base::fixed {{!}} std::ios_base::scientific)}}), the stream's precision is not used; instead, the number is always printed with enough precision to exactly represent the value.
}}
{{rev end}}

===Example===
{{example
 | Output a number using the facet directly, and demonstrate user-defined facet
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

// this custom num_put outputs squares of all integers (except long long)
struct squaring_num_put : std::num_put&lt;char&gt; {
    iter_type do_put(iter_type s, std::ios_base&amp; f,
                     char_type fill, long v) const
    {
        return std::num_put&lt;char&gt;::do_put(s, f, fill, v*v );
    }

    iter_type do_put(iter_type s, std::ios_base&amp; f,
                     char_type fill, unsigned long v) const
    {
        return std::num_put&lt;char&gt;::do_put(s, f, fill, v*v);
    }
};

int main()
{
    auto&amp; facet = std::use_facet&lt;std::num_put&lt;char&gt;&gt;(std::locale());
    facet.put(std::cout, std::cout, '0', 2.71);
    std::cout &lt;&lt; '\n';

    std::cout.imbue(std::locale(std::cout.getloc(), new squaring_num_put));
    std::cout &lt;&lt; 6 &lt;&lt; ' ' &lt;&lt; -12 &lt;&lt; '\n';
} 
 | output=
2.71
36 144
}}

 {{example |
An implementation of {{lc|operator&lt;&lt;}} for a user-defined type.
 |code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;locale&gt;

struct base { long x = 10; };

template &lt;class CharT, class Traits&gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp;
    operator&lt;&lt; (std::basic_ostream&lt;CharT, Traits&gt;&amp; os, base const&amp; b)
{
    try {
        typename std::basic_ostream&lt;CharT, Traits&gt;::sentry s(os);
        if (s)
        {
            std::ostreambuf_iterator&lt;CharT, Traits&gt; it(os);
            std::use_facet&lt;std::num_put&lt;CharT&gt;&gt;(os.getloc())
                .put(it, os, os.fill(), b.x);
        }
    } catch (...) {
        // set badbit on os and rethrow if required
    }
    return os;
}

int main()
{
    base b;
    
    std::cout &lt;&lt; b;
}
 |output=
10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt}}
{{dsc end}}

[[de:cpp/locale/num put/put]]
[[es:cpp/locale/num put/put]]
[[fr:cpp/locale/num put/put]]
[[it:cpp/locale/num put/put]]
[[ja:cpp/locale/num put/put]]
[[pt:cpp/locale/num put/put]]
[[ru:cpp/locale/num put/put]]
[[zh:cpp/locale/num put/put]]</text>
      <sha1>02qnzsm5cplf7501xq1yklviaefg2w4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/num put/~num put</title>
    <ns>0</ns>
    <id>4442</id>
    <revision>
      <id>43232</id>
      <parentid>15815</parentid>
      <timestamp>2012-11-03T02:06:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="320">{{cpp/locale/facet/destructor|num_put}}

[[de:cpp/locale/num put/~num put]]
[[es:cpp/locale/num put/~num put]]
[[fr:cpp/locale/num put/~num put]]
[[it:cpp/locale/num put/~num put]]
[[ja:cpp/locale/num put/~num put]]
[[pt:cpp/locale/num put/~num put]]
[[ru:cpp/locale/num put/~num put]]
[[zh:cpp/locale/num put/~num put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct</title>
    <ns>0</ns>
    <id>2784</id>
    <revision>
      <id>65771</id>
      <parentid>64374</parentid>
      <timestamp>2013-10-07T18:30:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix description of the required specializations</comment>
      <text xml:space="preserve" bytes="3890">{{cpp/title | numpunct}}
{{cpp/locale/numpunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class numpunct;
}}
{{dcl end}}

The facet {{lc|std::numpunct}} encapsulates numeric punctuation preferences. Stream I/O operations use {{lc|std::numpunct}} through {{lc|std::num_get}} and {{lc|std::num_put}} for parsing numeric input and formatting numeric output. 

The numbers that are supported by {{lc|std::numpunct}} have the format described below. Here {{tt|digit}} represents the radix set specified by the {{tt|fmtflags}} argument value, {{tt|thousands-sep}} and {{tt|decimal-point}} are the results of {{lc|thousands_sep()}} and {{lc|decimal_point()}} functions respectively. The format of integer values is as follows:

{{source|lang=text|1=
integer     ::= [sign] units
sign        ::= plusminus
plusminus   ::= '+' {{!}} '-'
units       ::= digits [thousands-sep units]
digits      ::= digit [digits]
}}

The number of digits between the {{tt|thousand-sep}}s (maximum size of {{tt|digits}}) is specified by the result of {{lc|grouping()}}.

The format of floating-point values is as follows:
{{source|lang=text|1=
floatval    ::= [sign] units [decimal-point [digits]] [e [sign] digits] {{!}}
                [sign]        decimal-point  digits   [e [sign] digits]
e           ::= ’e’ {{!}} ’E’
}}

{{inheritance diagram/std-numpunct}}

Two standalone (locale-independent) specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::numpunct&lt;char&gt;}} | provides equivalents of the &quot;C&quot; locale preferences }}
{{dsc | {{c|std::numpunct&lt;wchar_t&gt;}} | provides wide character equivalents of the &quot;C&quot; locale preferences }}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|charT}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;charT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/numpunct/dsc numpunct}}
{{dsc inc | cpp/locale/numpunct/dsc ~numpunct}}
{{dsc h2 |  }}
{{dsc inc | cpp/locale/numpunct/dsc decimal_point}}
{{dsc inc | cpp/locale/numpunct/dsc thousands_sep}}
{{dsc inc | cpp/locale/numpunct/dsc grouping}}
{{dsc inc | cpp/locale/numpunct/dsc truefalsename}}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/numpunct/dsc do_decimal_point}}
{{dsc inc | cpp/locale/numpunct/dsc do_thousands_sep}}
{{dsc inc | cpp/locale/numpunct/dsc do_grouping}}
{{dsc inc | cpp/locale/numpunct/dsc do_truefalsename}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Example===

{{example
 | The following example changes the string representations of {{c|true}} and {{c|false}}
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

struct french_bool : std::numpunct&lt;char&gt; {
    string_type do_truename() const { return &quot;oui&quot;; }
    string_type do_falsename() const { return &quot;non&quot;; }
};

int main()
{
    std::cout &lt;&lt; &quot;default locale: &quot;
              &lt;&lt; std::boolalpha &lt;&lt; true &lt;&lt; &quot;, &quot; &lt;&lt; false &lt;&lt; '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new french_bool));
    std::cout &lt;&lt; &quot;locale with modified numpunct: &quot;
              &lt;&lt; std::boolalpha &lt;&lt; true &lt;&lt; &quot;, &quot; &lt;&lt; false &lt;&lt; '\n';
}
 | output=
default locale: true, false
locale with modified numpunct: oui, non
}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/locale/numpunct_byname | creates a numpunct facet for the named locale }}
{{dsc end}}

[[de:cpp/locale/numpunct]]
[[es:cpp/locale/numpunct]]
[[fr:cpp/locale/numpunct]]
[[it:cpp/locale/numpunct]]
[[ja:cpp/locale/numpunct]]
[[pt:cpp/locale/numpunct]]
[[ru:cpp/locale/numpunct]]
[[zh:cpp/locale/numpunct]]</text>
      <sha1>586xuzzledd8xyw3gtjyx993wsb574o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct byname</title>
    <ns>0</ns>
    <id>2785</id>
    <revision>
      <id>61629</id>
      <parentid>61621</parentid>
      <timestamp>2013-06-06T07:32:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+inherited members</comment>
      <text xml:space="preserve" bytes="2232">{{cpp/title | numpunct_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT &gt;
class numpunct_byname : public std::numpunct&lt;CharT&gt;;
}}
{{dcl end}}

{{lc|std::numpunct_byname}} is a {{lc|std::numpunct}} facet which encapsulates numeric punctuation preferences of a locale specified at its construction.

Two specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::numpunct_byname&lt;char&gt;}} | locale-specific {{lc|std::numpunct}} facet for narrow character I/O }}
{{dsc | {{c|std::numpunct_byname&lt;wchar_t&gt;}} | locale-specific {{lc|std::numpunct}} facet for wide characters I/O }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;CharT&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | numpunct_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | numpunct_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | numpunct_byname}}
{{include | cpp/locale/byname/destructor | numpunct_byname}}

{{include | cpp/locale/numpunct/inherit}}

===Example===

{{example
 | This example demonistrates how to apply numeric punctuation rules of another language without changing the rest of the locale. 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
int main()
{
    const double number = 1000.25;
    std::wcout &lt;&lt; L&quot;default locale: &quot; &lt;&lt; number &lt;&lt; L'\n';
    std::wcout.imbue(std::locale(std::wcout.getloc(),
                                 new std::numpunct_byname&lt;wchar_t&gt;(&quot;ru_RU.UTF8&quot;)));
    std::wcout &lt;&lt; L&quot;default locale with russian numpunct: &quot; &lt;&lt; number &lt;&lt; L'\n';
}
 | output=
default locale: 1000.25
default locale with russian numpunct: 1 000,25
}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/locale/numpunct | defines numeric punctuation rules }}
{{dsc end}}

[[de:cpp/locale/numpunct byname]]
[[es:cpp/locale/numpunct byname]]
[[fr:cpp/locale/numpunct byname]]
[[it:cpp/locale/numpunct byname]]
[[ja:cpp/locale/numpunct byname]]
[[pt:cpp/locale/numpunct byname]]
[[ru:cpp/locale/numpunct byname]]
[[zh:cpp/locale/numpunct byname]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/decimal point</title>
    <ns>0</ns>
    <id>9922</id>
    <revision>
      <id>75891</id>
      <parentid>62397</parentid>
      <timestamp>2015-02-04T13:03:56Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1185">{{cpp/locale/numpunct/title | decimal_point, do_decimal_point}}
{{cpp/locale/numpunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
char_type decimal_point() const;
}}
{{dcl | num=2 | 1=
protected:
virtual char_type do_decimal_point() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_decimal_point}} of the most derived class.

@2@ Returns the character to be used as the decimal separator between integer and fractional parts. 

===Return value===
The object of type {{tt|char_type}} to use as the thousands separator. The standard specializations of {{tt|std::numpunct}} return {{c|'.'}} and {{c|L'.'}}.

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

struct slash : std::numpunct&lt;char&gt; {
    char do_decimal_point()   const { return '/'; }  // separate with slash
};

int main()
{
    std::cout.precision(10);
    std::cout &lt;&lt; &quot;default locale: &quot; &lt;&lt; 1234.5678 &lt;&lt; '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new slash));
    std::cout &lt;&lt; &quot;locale with modified numpunct: &quot; &lt;&lt; 1234.5678 &lt;&lt; '\n';
}
 | output=
default locale: 1234.5678
locale with modified numpunct: 1234/5678
}}</text>
      <sha1>pg0b7g02e28b6sfjd9m0zl2tk23lq4a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/do thousands sep</title>
    <ns>0</ns>
    <id>9466</id>
    <redirect title="cpp/locale/numpunct/thousands sep" />
    <revision>
      <id>40319</id>
      <timestamp>2012-10-12T18:58:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/locale/numpunct/do thousands sep]] to [[cpp/locale/numpunct/thousands sep]]</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/locale/numpunct/thousands sep]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/falsename</title>
    <ns>0</ns>
    <id>9927</id>
    <redirect title="cpp/locale/numpunct/truefalsename" />
    <revision>
      <id>47034</id>
      <timestamp>2013-04-23T13:30:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/numpunct/truefalsename]]</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/locale/numpunct/truefalsename]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/grouping</title>
    <ns>0</ns>
    <id>9920</id>
    <revision>
      <id>63918</id>
      <parentid>62395</parentid>
      <timestamp>2013-08-01T15:38:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="2369">{{cpp/locale/numpunct/title | grouping, do_grouping}}
{{cpp/locale/numpunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
std::string grouping() const;
}}
{{dcl | num=2 | 1=
protected:
virtual std::string do_grouping() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_grouping}} of the most derived class.

@2@ Returns an {{lc|std::string}} holding, in each {{c|char}} element, the number of digits in each group of the numeric output formatted by {{ltt|cpp/locale/num_put/put|num_put::put()}} (and, therefore, {{ltt|cpp/io/basic_ostream/operator_ltlt|basic_ostream::operator&lt;&lt;}})

The groups are stored as binary values: three-digit group is {{c|'\3'}}, and 51-digit group is {{c|'3'}}. The character at index zero of the returned string holds the number of digits in the rightmost group. The character at index 1 holds the number of digits in the second group from the right, etc. The grouping indicated by the last character in the returned string is reused to group all remaining digits in the (left part of) the number.

===Return value===
The object of type {{lc|std::string}} holding the groups. The standard specializations of {{tt|std::numpunct}} return an empty string, indicating no grouping. Typical groupings (e.g. the {{tt|en_US}} locale) return {{c|&quot;\003&quot;}}.

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;locale&gt;

struct space_out : std::numpunct&lt;char&gt;
{
    char do_thousands_sep()   const { return ' ';  } // separate with spaces
    std::string do_grouping() const { return &quot;\1&quot;; } // groups of 1 digit
};

struct g123 : std::numpunct&lt;char&gt;
{
    std::string do_grouping() const { return &quot;\1\2\3&quot;; }
};

int main()
{
    std::cout &lt;&lt; &quot;default locale: &quot; &lt;&lt; 12345678 &lt;&lt; '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
    std::cout &lt;&lt; &quot;locale with modified numpunct: &quot; &lt;&lt; 12345678 &lt;&lt; '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new g123));
    std::cout &lt;&lt; &quot;Locale with \\1\\2\\3 grouping: &quot; &lt;&lt; 
              std::numeric_limits&lt;unsigned long long&gt;::max() &lt;&lt; '\n';
}
 | output=
default locale: 12345678
locale with modified numpunct: 1 2 3 4 5 6 7 8
Locale with \1\2\3 grouping: 18,446,744,073,709,551,61,5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/numpunct/dsc do_thousands_sep}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/numpunct</title>
    <ns>0</ns>
    <id>4423</id>
    <revision>
      <id>43218</id>
      <parentid>15791</parentid>
      <timestamp>2012-11-03T02:02:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="330">{{cpp/locale/facet/constructor|numpunct}}

[[de:cpp/locale/numpunct/numpunct]]
[[es:cpp/locale/numpunct/numpunct]]
[[fr:cpp/locale/numpunct/numpunct]]
[[it:cpp/locale/numpunct/numpunct]]
[[ja:cpp/locale/numpunct/numpunct]]
[[pt:cpp/locale/numpunct/numpunct]]
[[ru:cpp/locale/numpunct/numpunct]]
[[zh:cpp/locale/numpunct/numpunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/thousands sep</title>
    <ns>0</ns>
    <id>3746</id>
    <revision>
      <id>75890</id>
      <parentid>62396</parentid>
      <timestamp>2015-02-04T13:03:07Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1719">{{cpp/locale/numpunct/title | thousands_sep, do_thousands_sep}}
{{cpp/locale/numpunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
char_type thousands_sep() const;
}}
{{dcl | num=2 | 1=
protected:
virtual char_type do_thousands_sep() const;
}}
{{dcl end}}

@1@ Public member function, calls the member function {{tt|do_thousands_sep}} of the most derived class.

@2@ Returns the character to be used as the separator between digit groups when parsing or formatting integers and integral parts of floating-point values. 

===Return value===
The object of type {{tt|char_type}} to use as the thousands separator. The standard specializations of {{tt|std::numpunct}} return {{c|','}} and {{c|L','}}.

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

struct space_out : std::numpunct&lt;char&gt; {
    char do_thousands_sep()   const { return ' '; }  // separate with spaces
    std::string do_grouping() const { return &quot;\1&quot;; } // groups of 1 digit
};

int main()
{
    std::cout &lt;&lt; &quot;default locale: &quot; &lt;&lt; 12345678 &lt;&lt; '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
    std::cout &lt;&lt; &quot;locale with modified numpunct: &quot; &lt;&lt; 12345678 &lt;&lt; '\n';
}
 | output=
default locale: 12345678
locale with modified numpunct: 1 2 3 4 5 6 7 8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/numpunct/dsc do_grouping}}
{{dsc end}}

[[de:cpp/locale/numpunct/thousands sep]]
[[es:cpp/locale/numpunct/thousands sep]]
[[fr:cpp/locale/numpunct/thousands sep]]
[[it:cpp/locale/numpunct/thousands sep]]
[[ja:cpp/locale/numpunct/thousands sep]]
[[pt:cpp/locale/numpunct/thousands sep]]
[[ru:cpp/locale/numpunct/thousands sep]]
[[zh:cpp/locale/numpunct/thousands sep]]</text>
      <sha1>09g82s14wijt3g9bse90ue0ysz5pejc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/truefalsename</title>
    <ns>0</ns>
    <id>9923</id>
    <revision>
      <id>89098</id>
      <parentid>62394</parentid>
      <timestamp>2016-12-29T17:55:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fixes per talk</comment>
      <text xml:space="preserve" bytes="1770">{{cpp/locale/numpunct/title | truename, do_truename, falsename, do_falsename}}
{{cpp/locale/numpunct/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
string_type truename() const;
}}
{{dcl | num=2 | 1=
public:
string_type falsename() const;
}}
{{dcl | num=3 | 1=
protected:
virtual string_type do_truename() const;
}}
{{dcl | num=4 | 1=
protected:
virtual string_type do_falsename() const;
}}
{{dcl end}}

@1-2@ Public member function, calls the member function {{tt|do_truename}} and {{tt|do_falsename}} of the most derived class respectively.
@3@ Returns the string to be used as the representation of the boolean value {{c|true}}.
@4@ Returns the string to be used as the representation of the boolean value {{c|false}}.

===Return value===
@1,3@ The object of type {{tt|string_type}} to use as the representation of {{c|true}}. The standard specializations of {{tt|std::numpunct}} return {{c|&quot;true&quot;}} and {{c|L&quot;true&quot;}}.

@2,4@ The object of type {{tt|string_type}} to use as the representation of {{c|false}}. The standard specializations of {{tt|std::numpunct}} return {{c|&quot;false&quot;}} and {{c|L&quot;false&quot;}}.

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;iomanip&gt;

struct custom_tf : std::numpunct&lt;char&gt; {
    std::string do_truename()  const { return &quot;t&quot;; }
    std::string do_falsename() const { return &quot;f&quot;; }
};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;default locale: &quot; &lt;&lt; true &lt;&lt; true &lt;&lt; false &lt;&lt; false &lt;&lt; '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new custom_tf));
    std::cout &lt;&lt; &quot;locale with modified numpunct: &quot; 
              &lt;&lt; true &lt;&lt; true &lt;&lt; false &lt;&lt; false &lt;&lt; '\n';
}
 | output=
default locale: truetruefalsefalse
locale with modified numpunct: ttff
}}</text>
      <sha1>58p4ytdr9fprr0ip009iicdp071jb6p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/truename</title>
    <ns>0</ns>
    <id>9926</id>
    <redirect title="cpp/locale/numpunct/truefalsename" />
    <revision>
      <id>47033</id>
      <timestamp>2013-04-23T13:30:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/locale/numpunct/truefalsename]]</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/locale/numpunct/truefalsename]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/numpunct/~numpunct</title>
    <ns>0</ns>
    <id>4441</id>
    <revision>
      <id>43203</id>
      <parentid>15814</parentid>
      <timestamp>2012-11-03T01:59:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="337">{{cpp/locale/facet/destructor|numpunct}}

[[de:cpp/locale/numpunct/~numpunct]]
[[es:cpp/locale/numpunct/~numpunct]]
[[fr:cpp/locale/numpunct/~numpunct]]
[[it:cpp/locale/numpunct/~numpunct]]
[[ja:cpp/locale/numpunct/~numpunct]]
[[pt:cpp/locale/numpunct/~numpunct]]
[[ru:cpp/locale/numpunct/~numpunct]]
[[zh:cpp/locale/numpunct/~numpunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/setlocale</title>
    <ns>0</ns>
    <id>4563</id>
    <revision>
      <id>73589</id>
      <parentid>73586</parentid>
      <timestamp>2014-11-06T15:55:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+meaning of the returned pointer</comment>
      <text xml:space="preserve" bytes="3827">{{cpp/title|setlocale}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header|clocale}}
{{dcl |
char* setlocale( int category, const char* locale);
}}
{{dcl end}}

The {{tt|setlocale}} function installs the specified system locale or its portion as the new C locale. The modifications remain in effect and influences the execution of all locale-sensitive C library functions until the next call to {{tt|setlocale}}. If {{tt|locale}} is a null pointer, {{tt|setlocale}} queries the current C locale without modifying it.

===Parameters===
{{par begin}}
{{par | category | locale category identifier, one of the {{rlp|LC_categories|LC_xxx}} macros. May be 0.}}
{{par | locale | system-specific locale identifier. Can be {{c|&quot;&quot;}} for the user-preferred locale or {{c|&quot;C&quot;}} for the minimal locale }}
{{par end}}

===Return value===
Pointer to a narrow null-terminated string identifying the C locale after applying the changes, if any, or null pointer on failure.

A copy of the returned string along with the category used in this call to {{tt|std::setlocale}} may be used later in the program to restore the locale back to the state at the end of this call.

===Notes===
During program startup, the equivalent of {{c|std::setlocale(LC_ALL, &quot;C&quot;);}} is executed before any user code is run.

Although the return type is {{c|char*}}, modifying the pointed-to characters is undefined behavior.

Because {{tt|setlocale}} modifies global state which affects execution of locale-dependent functions, it is undefined behavior to call it from one thread, while another thread is executing any of the following functions: {{lc|std::fprintf}}, {{lc|std::isprint}}, {{lc|std::iswdigit}}, {{lc|std::localeconv}}, {{lc|std::tolower}}, {{lc|std::fscanf}}, {{lc|std::ispunct}}, {{lc|std::iswgraph}}, {{lc|std::mblen}}, {{lc|std::toupper}}, {{lc|std::isalnum}}, {{lc|std::isspace}}, {{lc|std::iswlower}}, {{lc|std::mbstowcs}}, {{lc|std::towlower}}, {{lc|std::isalpha}}, {{lc|std::isupper}}, {{lc|std::iswprint}}, {{lc|std::mbtowc}}, {{lc|std::towupper}}, {{lc|std::isblank}}, {{lc|std::iswalnum}}, {{lc|std::iswpunct}}, {{lc|std::setlocale}}, {{lc|std::wcscoll}}, {{lc|std::iscntrl}}, {{lc|std::iswalpha}}, {{lc|std::iswspace}}, {{lc|std::strcoll}}, {{lc|std::wcstod}}, {{lc|std::isdigit}}, {{lc|std::iswblank}}, {{lc|std::iswupper}}, {{lc|std::strerror}}, {{lc|std::wcstombs}}, {{lc|std::isgraph}}, {{lc|std::iswcntrl}}, {{lc|std::iswxdigit}}, {{lc|std::strtod}}, {{lc|std::wcsxfrm}}, {{lc|std::islower}}, {{lc|std::iswctype}}, {{lc|std::isxdigit}}.

POSIX also defines a locale named &quot;POSIX&quot;, which is always accessible and is exactly equivalent to the default minimal &quot;C&quot; locale. 

POSIX also specifies that the returned pointer, not just the contents of the pointed-to string, may be invalidated by subsequent calls to setlocale.

===Example===
{{example
 | 
 | code=
#include &lt;cstdio&gt;
#include &lt;clocale&gt;
#include &lt;ctime&gt;
#include &lt;cwchar&gt;

int main()
{
    // the C locale will be UTF-8 enabled English;
    // decimal dot will be German
    // date and time formatting will be Japanese
    std::setlocale(LC_ALL, &quot;en_US.UTF-8&quot;);
    std::setlocale(LC_NUMERIC, &quot;de_DE&quot;);
    std::setlocale(LC_TIME, &quot;ja_JP&quot;);

    wchar_t str[100];
    std::time_t t = std::time(NULL);
    std::wcsftime(str, 100, L&quot;%A %c&quot;, std::localtime(&amp;t));
    std::wprintf(L&quot;Number: %.2f\nDate: %Ls\n&quot;, 3.14, str);
}
 | output=
Number: 3,14
Date: 月曜日 2011年12月19日 18時04分40秒
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc LC_categories}}
{{dsc inc | cpp/locale/dsc locale}}
{{dsc see c | c/locale/setlocale}}
{{dsc end}}

[[de:cpp/locale/setlocale]]
[[es:cpp/locale/setlocale]]
[[fr:cpp/locale/setlocale]]
[[it:cpp/locale/setlocale]]
[[ja:cpp/locale/setlocale]]
[[pt:cpp/locale/setlocale]]
[[ru:cpp/locale/setlocale]]
[[zh:cpp/locale/setlocale]]</text>
      <sha1>j8fvcvizzs2xsjfa9rpgq2oij75ii9d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time base</title>
    <ns>0</ns>
    <id>3569</id>
    <revision>
      <id>58198</id>
      <parentid>50062</parentid>
      <timestamp>2013-06-01T06:10:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1117">{{cpp/title | time_base}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
class time_base;
}}
{{dcl end}}

The class {{lc|std::time_base}} provides the date order constants which are inherited by the {{lc|std::time_get}} facets.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|enum dateorder { no_order, dmy, mdy, ymd, ydm };}} | Unscoped enumeration type}}
{{dsc end}}

{{dsc begin}}
{{dsc hitem | Enumeration constant | Definition}}
{{dsc | {{tt|no_order}} | Unspecified order}}
{{dsc | {{tt|dmy}} | Day, month, year (european) order}}
{{dsc | {{tt|mdy}} | Month, day, year (american) order}}
{{dsc | {{tt|ymd}} | Year, month, day}}
{{dsc | {{tt|ydm}} | Year, day, month}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/time_get/dsc do_date_order}}
{{dsc inc | cpp/locale/time_get/dsc do_get_date}}
{{dsc end}}

[[de:cpp/locale/time base]]
[[es:cpp/locale/time base]]
[[fr:cpp/locale/time base]]
[[it:cpp/locale/time base]]
[[ja:cpp/locale/time base]]
[[pt:cpp/locale/time base]]
[[ru:cpp/locale/time base]]
[[zh:cpp/locale/time base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get</title>
    <ns>0</ns>
    <id>3567</id>
    <revision>
      <id>65767</id>
      <parentid>58201</parentid>
      <timestamp>2013-10-07T18:22:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix description of the required specializations</comment>
      <text xml:space="preserve" bytes="3843">{{cpp/title | time_get}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; 
    class CharT, 
    class InputIt = std::istreambuf_iterator&lt;CharT&gt; 
&gt; class time_get;
}}
{{dcl end}}

Class template {{tt|std::time_get}} encapsulates date and time parsing rules. The I/O manipulator {{lc|std::get_time}} uses the {{tt|std::time_get}} facet of the I/O stream's locale to convert text input to a {{lc|std::tm}} object.

{{inheritance diagram/std-time_get}}

===Type requirements===
{{par begin}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Specializations===

Two standalone (locale-independent) full specializations and two partial specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::time_get&lt;char&gt;}} | parses narrow string representations of date and time }}
{{dsc | {{c|std::time_get&lt;wchar_t&gt;}} | parses wide string representations of date and time }}
{{dsc | {{c|std::time_get&lt;char, InputIt&gt;}} | parses narrow string representations of date and time using custom input iterator}}
{{dsc | {{c|std::time_get&lt;wchar_t, InputIt&gt;}} | parses wide string representations of date and time using custom input iterator}}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|iter_type}} | {{tt|InputIt}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/locale/time_get/time_get | constructs a new time_get facet }}
{{dsc prot mem dtor | cpp/locale/time_get/~time_get | destructs a time_get facet }}
{{dsc inc | cpp/locale/time_get/dsc date_order}}
{{dsc inc | cpp/locale/time_get/dsc get_time}}
{{dsc inc | cpp/locale/time_get/dsc get_date}}
{{dsc inc | cpp/locale/time_get/dsc get_weekday}}
{{dsc inc | cpp/locale/time_get/dsc get_monthname}}
{{dsc inc | cpp/locale/time_get/dsc get_year}}
{{dsc inc | cpp/locale/time_get/dsc get}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/time_get/dsc do_date_order}}
{{dsc inc | cpp/locale/time_get/dsc do_get_time}}
{{dsc inc | cpp/locale/time_get/dsc do_get_date}}
{{dsc inc | cpp/locale/time_get/dsc do_get_weekday}}
{{dsc inc | cpp/locale/time_get/dsc do_get_monthname}}
{{dsc inc | cpp/locale/time_get/dsc do_get_year}}
{{dsc inc | cpp/locale/time_get/dsc do_get}}
{{dsc end}}

{{ inherited | {{small|std::}}time_base |
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|dateorder}} | date order enumeration type, defining the values {{tt|no_order}}, {{tt|dmy}}, {{tt|mdy}}, {{tt|ymd}}, and {{tt|ydm}}}}
{{dsc end}}
}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;ctime&gt;
#include &lt;iomanip&gt;
int main()
{
    std::wstring input = L&quot;2011-Februar-18 23:12:34&quot;;
    std::tm t;
    std::wistringstream ss(input);
    ss.imbue(std::locale(&quot;de_DE&quot;));
    ss &gt;&gt; std::get_time(&amp;t, L&quot;%Y-%b-%d %H:%M:%S&quot;); // uses std::time_get&lt;wchar_t&gt;
    std::cout &lt;&lt; std::asctime(&amp;t);
}
 | output=
Sun Feb 18 23:12:34 2011
}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/locale/time_put | formats contents of {{c|struct std::tm}} for output as character sequence}}
{{dsc tfun | cpp/io/manip/get_time | parses a date/time value of specified format| notes={{mark c++11}}}}
{{dsc end}}

[[de:cpp/locale/time get]]
[[es:cpp/locale/time get]]
[[fr:cpp/locale/time get]]
[[it:cpp/locale/time get]]
[[ja:cpp/locale/time get]]
[[pt:cpp/locale/time get]]
[[ru:cpp/locale/time get]]
[[zh:cpp/locale/time get]]</text>
      <sha1>jbfhkfk3jwyw2yxqzs0oymuejvfyfh4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get byname</title>
    <ns>0</ns>
    <id>9315</id>
    <revision>
      <id>63753</id>
      <parentid>61619</parentid>
      <timestamp>2013-07-24T00:01:00Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <text xml:space="preserve" bytes="1676">{{cpp/title | time_get_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt;
    class CharT,
    class InputIterator = std::istreambuf_iterator&lt;CharT&gt;
&gt; class time_get_byname : public std::time_get&lt;CharT, InputIterator&gt;
}}
{{dcl end}}

{{lc|std::time_get_byname}} is a {{lc|std::time_get}} facet which encapsulates time and date parsing rules of the locale specified at its construction.

Two specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::time_get_byname&lt;char, InputIterator&gt;}} | narrow/multibyte time parsing }}
{{dsc | {{c|std::time_get_byname&lt;wchar_t, InputIterator&gt;}} | wide string time parsing }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|iter_type}} | {{tt|OutputIterator}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | time_get_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | time_get_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | time_get_byname}}
{{include | cpp/locale/byname/destructor | time_get_byname}}

{{cpp/locale/time_get/inherit}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc time_get}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc end}}

[[de:cpp/locale/time get byname]]
[[es:cpp/locale/time get byname]]
[[fr:cpp/locale/time get byname]]
[[it:cpp/locale/time get byname]]
[[ja:cpp/locale/time get byname]]
[[pt:cpp/locale/time get byname]]
[[ru:cpp/locale/time get byname]]
[[zh:cpp/locale/time get byname]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/date order</title>
    <ns>0</ns>
    <id>9832</id>
    <revision>
      <id>64016</id>
      <parentid>60952</parentid>
      <timestamp>2013-08-06T14:20:19Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2706">{{cpp/locale/time_get/title|date_order|do_date_order}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
dateorder date_order() const;
}}
{{dcl | num=2 | 1=
protected:
virtual dateorder do_date_order() const;
}}
{{dcl end}}

@1@ Public member function, calls the protected virtual member function {{tt|do_date_order}} of the most derived class.
@2@ Returns a value of type {{lc|std::time_base::dateorder}}, which describes the default date format used by this locale (expected by {{lc|get_date()}} and produced by {{lc|std::strftime()}} with format specifier {{c|'%x'}}).

The valid values (inherited from {{lc|std::time_base}}) are:

{{dsc begin}}
{{dsc | {{tt|no_order}} | the format contains variable items (week day, Julian day, etc), or this function is not implemented}}
{{dsc | {{tt|dmy}} | day, month, year (European locales)}}
{{dsc | {{tt|mdy}} | month, day, year (American locales)}}
{{dsc | {{tt|ymd}} | year, month, day (Asian locales)}}
{{dsc | {{tt|ydm}} | year, day, month (rare)}}
{{dsc end}}

===Parameters===
(none)

===Return value===
A value of type {{tt|dateorder}}

===Notes===
This function is optional, it may return {{tt|no_order}} in every case.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

void show_date_order()
{
    std::time_base::dateorder d = std::use_facet&lt;std::time_get&lt;char&gt;&gt;(
                                           std::locale()
                                  ).date_order();
    switch (d)
    {
        case std::time_base::no_order: std::cout &lt;&lt; &quot;no_order\n&quot;; break;
        case std::time_base::dmy: std::cout &lt;&lt; &quot;day, month, year\n&quot;; break;
        case std::time_base::mdy: std::cout &lt;&lt; &quot;month, day, year\n&quot;; break;
        case std::time_base::ymd: std::cout &lt;&lt; &quot;year, month, day\n&quot;; break;
        case std::time_base::ydm: std::cout &lt;&lt; &quot;year, day, month\n&quot;; break;
    }
}

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::cout &lt;&lt; &quot;In U.S. locale, the default date order is: &quot;;
    show_date_order();

    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    std::cout &lt;&lt; &quot;In Japanese locale, the default date order is: &quot;;
    show_date_order();

    std::locale::global(std::locale(&quot;de_DE.utf8&quot;));
    std::cout &lt;&lt; &quot;In German locale, the default date order is: &quot;;
    show_date_order();
}
 | output=&lt;!-- works with LLVM libc++ --&gt;
In U.S. locale, the default date order is: month, day, year
In Japanese locale, the default date order is: year, month, day
In German locale, the default date order is: day, month, year
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/time_get/dsc do_get_date}}
{{dsc inc | cpp/locale/dsc time_base}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/get</title>
    <ns>0</ns>
    <id>9835</id>
    <revision>
      <id>79141</id>
      <parentid>62759</parentid>
      <timestamp>2015-06-24T20:25:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>tweak locale names so it compiles in coliru</comment>
      <text xml:space="preserve" bytes="7290">{{cpp/locale/time_get/title|get|do_get}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | since=c++11 | 1=
public:
iter_type get(iter_type beg, iter_type end, std::ios_base&amp; str,
              std::ios_base::iostate&amp; err, std::tm* t,
              const char_type* fmtbeg, const char_type* fmtend) const;
}}
{{dcl | num=2 | since=c++11 | 1=
protected:
virtual iter_type do_get(iter_type neg, iter_type end, std::ios_base&amp; str,
                         std::ios_base::iostate&amp; err, std::tm *t,
                         char format, char modifier) const;
}}
{{dcl end}}

@1@ Parses the date and time from the input character sequence {{tt|[beg, end)}} according to the format provided in the character sequence {{c|[fmtbeg, fmtend)}}. The format is expected to follow the format described below, although actual processing of each format specifier can be customized by overriding {{tt|do_get}}. The {{tt|get}} function performs the following:
First, clears the error bits in {{tt|err}} by executing {{c|1=err = std::ios_base::goodbit}}. Then enters a loop, which terminates whenever any of the following conditions becomes true (checked in this order):
:@a@ All characters have been read from the format string ({{c|fmtbeg {{==}} fmtend}})
:@b@ There was a parsing error ({{c|err !{{=}} std::ios_base::goodbit}})
:@c@ All characters have been read from the input sequence ({{c|beg {{==}} end}}. If this condition terminates the loop, the function sets both {{tt|eofbit}} and {{tt|failbit}} in {{tt|err}}

::In the body of the loop, the following steps take place:
:@a@ if the next character in the format string is {{c|'%'}}, followed by one or two characters that form a valid {{lc|std::get_time}} conversion specifier (see below), these characters are used in the call {{c|do_get(beg, end, str, err, t, format, modifier)}}, where {{tt|format}} is the primary conversion specifier character, and {{tt|modifier}} is the optional modifier (which appears between {{tt|%}} and the format character, if present). If there is no modifier, the value {{c|'\0'}} is used. If the format string is ambiguous or ends too early to determine the conversion specifier after {{c|'%'}}, {{tt|eofbit}} is set in {{tt|err}} and the loop is terminated. If, after the call to {{tt|do_get}}, no error bits are set in {{tt|err}}, the function increments {{tt|fmtbeg}} to point right after the conversion specifier and continues the loop.
:@b@ If the next character is whitespace, as indicated by the locale provided in the stream {{tt|str}} (i.e. {{c|std::isspace(*fmtbeg, str.getloc()) {{==}} true}}, the function keeps incrementing {{tt|fmtbeg}} until it either becomes equal to {{tt|fmtend}} or points to a non-whitespace character.
:@c@ If the next character in the format string is equivalent to the next character in the input stream according to case-insensitive comparison, the function advances both sequences by one character {{c|++fmtbeg, ++beg;}} and continues the loop, Otherwise, it sets the {{tt|failbit}} in {{tt|err}}.

@2@ Parses one conversion specifier from the input sequence {{tt|[beg, end)}} and updates the {{lc|std::tm}} structure pointed to by {{tt|t}} accordingly.

::First, clears the error bits in {{tt|err}} by executing {{c|1=err = std::ios_base::goodbit}}. Then reads characters from the input sequence {{tt|[beg, end)}} that are expected by the {{lc|std::time_get}} format specifier formed by combining {{c|'%'}}, {{tt|modifier}} (if not {{c|'\0'}}), and {{tt|format}}. If the characters do not combine to form a valid conversion specifier, sets {{tt|failbit}} in {{tt|err}}. If the end of the input stream is reached after reading a character, sets {{tt|eofbit}} in {{tt|err}}. If the input string was parsed successfully, updates the corresponding fields of {{c|*t}}.

::For complex conversion specifiers, such as {{c|'%x'}} or {{c|'%c'}}, or the directives that use the modifiers {{c|'E'}} and {{c|'O'}}, the function may fail to determine some of the values to store in {{c|*t}}. In such case, it sets {{tt|eofbit}} in {{tt|err}} and leaves these fields in unspecified state.

===Parameters===
{{par begin}}
{{par | beg | iterator designating the start of the sequence to parse}}
{{par | end | one past the end iterator for the sequence to parse }}
{{par | str | a stream object that this function uses to obtain locale facets when needed, e.g. {{lc|std::ctype}} to skip whitespace or {{lc|std::collate}} to compare strings}}
{{par | err | stream error flags object that is modified by this function to indicate errors}}
{{par | t | pointer to the {{lc|std::tm}} object that will hold the result of this function call }}
{{par | fmtbeg | pointer to the first character of a sequence of char_type characters specifying the conversion format
{{cpp/locale/time_get/time_get format}}
}}
{{par | fmtend | pointer one past the last character of a sequence of char_type characters specifying the conversion format}}
{{par | format | the character that names a conversion specifier}}
{{par | modifier | the optional modifier that may appear between {{tt|%}} and the conversion specifier}}
{{par end}}

===Return value===
Iterator pointing one past the last character in {{tt|[beg, end)}} that was parsed successfully.

===Notes===
The case-insensitive comparison for the non-whitespace non-{{c|'%'}} characters in the format string, the {{lc|std::collate}} facet of the locale provided by {{tt|str}} is typically, but not necessarily, used.

If a parsing error is encountered, many implementations of this function leave {{tt|*t}} completely untouched.

It's unspecified if these functions zero out the fields in {{c|*t}} that they do not set directly: portable programs should initialize every field to zero before calling {{tt|get()}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;iomanip&gt;

int main()
{
    std::istringstream ss(&quot;2011-Februar-18 23:12:34&quot;);
    ss.imbue(std::locale(&quot;de_DE.utf8&quot;));

    auto&amp; f = std::use_facet&lt;std::time_get&lt;char&gt;&gt;(std::locale(&quot;de_DE.utf8&quot;));
    std::tm t{};
    std::string s = &quot;%Y-%b-%d %H:%M:%S&quot;;
    std::ios_base::iostate err = std::ios_base::goodbit;
    std::istreambuf_iterator&lt;char&gt; ret = f.get(std::istreambuf_iterator&lt;char&gt;(ss),
                                               std::istreambuf_iterator&lt;char&gt;(),
                                               ss, err, &amp;t, &amp;s[0], &amp;s[0] + s.size());
    ss.setstate(err);

    if(ss) {
        std::cout &lt;&lt; &quot;Successfully parsed as &quot; &lt;&lt; std::put_time(&amp;t, &quot;%c&quot;);
        if(ret != std::istreambuf_iterator&lt;char&gt;()) {
            std::cout &lt;&lt; &quot; Remaining content: &quot;;
            std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                           std::ostreambuf_iterator&lt;char&gt;(std::cout));
        } else {
                std::cout &lt;&lt; &quot; The input was fully consumed&quot;;
        }
    } else {
            std::cout &lt;&lt; &quot;Parse failed. Unparsed string: &quot;;
            std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                           std::ostreambuf_iterator&lt;char&gt;(std::cout));
    }
    std::cout &lt;&lt; '\n';
}
 | output=
Successfully parsed, as Sun Feb 18 23:12:34 2011 The input was fully consumed
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc end}}</text>
      <sha1>1udui98ymun8ub1sw6t1xezhiglqnmh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/get date</title>
    <ns>0</ns>
    <id>9831</id>
    <revision>
      <id>60954</id>
      <parentid>60953</parentid>
      <timestamp>2013-06-03T11:09:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="4137">{{cpp/locale/time_get/title|get_date|do_get_date}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type get_date( iter_type beg, iter_type end, std::ios_base&amp; str,
                    std::ios_base::iostate&amp; err, std::tm* t ) const;
}}
{{dcl | num=2 | 1=
protected:
virtual iter_type do_get_date( iter_type beg, iter_type end, std::ios_base&amp; str,
                               std::ios_base::iostate&amp; err, std::tm* t ) const;
}}
{{dcl end}}

@1@ Public member function, calls the protected virtual member function {{tt|do_get_date()}} of the most derived class.
@2@ Reads successive characters from the sequence {{tt|[beg, end)}} and parses out the calendar date value using the default format expected by this locale, which is the same format as

{{rev begin}}
{{rev | until=c++11 | {{c|&quot;%x&quot;}} }}
{{rev | since=c++11 | {{c|&quot;%d/%m/%y&quot;}}, {{c|&quot;%m/%d/%y&quot;}}, {{c|&quot;%y/%m/%d&quot;}}, and {{c|&quot;%y/%d/%m&quot;}}, depending on {{lc|date_order()}} }}
{{rev end}}

@@ as used by the functions {{lc|std::get_time()}}, {{lc|get()}}, and the POSIX function {{tt|strptime()}}

@@ The parsed date is stored in the corresponding fields of the {{lc|std::tm}} structure pointed to by the argument {{tt|t}}.

@@ If the end iterator is reached before a valid date is read, the function sets {{lc|std::ios_base::eofbit}} in {{tt|err}}. If a parsing error is encountered, the function sets {{lc|std::ios_base::failbit}} in {{tt|err}}.

===Parameters===
{{par begin}}
{{par | beg | iterator designating the start of the sequence to parse}}
{{par | end | one past the end iterator for the sequence to parse }}
{{par | str | a stream object that this function uses to obtain locale facets when needed, e.g. {{lc|std::ctype}} to skip whitespace or {{lc|std::collate}} to compare strings}}
{{par | err | stream error flags object that is modified by this function to indicate errors}}
{{par | t | pointer to the {{lc|std::tm}} object that will hold the result of this function call }}
{{par end}}

===Return value===
Iterator pointing one past the last character in {{tt|[beg, end)}} that was recognized as a part of a valid date.

===Notes===
For the alphabetic components of the default date format (if any), this function is usually case-insensitive.

If a parsing error is encountered, most implementations of this function leave {{tt|*t}} unmodified.

The implementation may support other date formats besides the ones required by the standard.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;
#include &lt;ctime&gt;

void try_get_date(const std::string&amp; s)
{
    std::cout &lt;&lt; &quot;Parsing the date out of '&quot; &lt;&lt; s &lt;&lt;
                 &quot;' in the locale &quot; &lt;&lt; std::locale().name() &lt;&lt; '\n';
    std::istringstream str(s);
    std::ios_base::iostate err = std::ios_base::goodbit;

    std::tm t;
    std::istreambuf_iterator&lt;char&gt; ret =
        std::use_facet&lt;std::time_get&lt;char&gt;&gt;(str.getloc()).get_date(
            std::istreambuf_iterator&lt;char&gt;(str),
            std::istreambuf_iterator&lt;char&gt;(),
            str, err, &amp;t
        );
    str.setstate(err);
    if(str) {
        std::cout &lt;&lt; &quot;Day: &quot;   &lt;&lt; t.tm_mday &lt;&lt; ' '
                  &lt;&lt; &quot;Month: &quot; &lt;&lt; t.tm_mon + 1 &lt;&lt; ' '
                  &lt;&lt; &quot;Year: &quot;  &lt;&lt; t.tm_year + 1900 &lt;&lt; '\n';
    } else {
        std::cout &lt;&lt; &quot;Parse failed. Unparsed string: &quot;;
        std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                  std::ostreambuf_iterator&lt;char&gt;(std::cout));
        std::cout &lt;&lt; '\n';
    }
}
int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    try_get_date(&quot;02/01/2013&quot;);
    try_get_date(&quot;02-01-2013&quot;);

    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    try_get_date(&quot;2013年02月01日&quot;);
}
 | output=
Parsing the date out of '02/01/2013' in the locale en_US.utf8
Day: 1 Month: 2 Year: 2013
Parsing the date out of '02-01-2013' in the locale en_US.utf8
Parse failed. Unparsed string: -01-2013
Parsing the date out of '2013年02月01日' in the locale ja_JP.utf8
Day: 1 Month: 2 Year: 2013
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/get monthname</title>
    <ns>0</ns>
    <id>9834</id>
    <revision>
      <id>58211</id>
      <parentid>50067</parentid>
      <timestamp>2013-06-01T06:10:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="4878">{{cpp/locale/time_get/title|get_monthname|do_get_monthname}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type get_monthname( iter_type beg, iter_type end, std::ios_base&amp; str,
                         std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl | num=2 | 1=
protected:
virtual iter_type do_get_monthname( iter_type beg, iter_type end, std::ios_base&amp; str,
                                    std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl end}}

@1@ public member function, calls the protected virtual member function {{tt|do_get_monthname}} of the most derived class.
@2@ Reads successive characters from the sequence {{tt|[beg, end)}} and parses out the month name (possibly abbreviated), using the default format for month names expected by this locale, which is the same format as {{c|&quot;%b&quot;}} as used by the functions {{lc|std::get_time}}, {{l2tt|cpp/locale/time_get/get}}, and the POSIX function {{tt|strptime()}}

If it finds abbreviated name, followed by the characters that are valid for the full name, it continues reading until it consumes all the characters for the full name or finds a character that isn't expected, in which case parsing fails even if the first few characters were a valid abbreviation.

The parsed month is stored in the {{lc|std::tm}} field {{c|t-&gt;tm_mon}}.

If the end iterator is reached before a valid month name is read, the function sets {{lc|std::ios_base::eofbit}} in {{tt|err}}. If a parsing error is encountered, the function sets {{lc|std::ios_base::failbit}} in {{tt|err}}.

===Parameters===
{{par begin}}
{{par | beg | iterator designating the start of the sequence to parse}}
{{par | end | one past the end iterator for the sequence to parse }}
{{par | str | a stream object that this function uses to obtain locale facets when needed, e.g. {{lc|std::ctype}} to skip whitespace or {{lc|std::collate}} to compare strings}}
{{par | err | stream error flags object that is modified by this function to indicate errors}}
{{par | t | pointer to the {{lc|std::tm}} object that will hold the result of this function call }}
{{par end}}

===Return value===
Iterator pointing one past the last character in {{tt|[beg, end)}} that was recognized as a part of a valid month name.

===Notes===
This function is usually case-insensitive.

If a parsing error is encountered, most implementations of this function leave {{tt|*t}} unmodified.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;
#include &lt;ctime&gt;

void try_get_mon(const std::string&amp; s)
{
    std::cout &lt;&lt; &quot;Parsing the month out of '&quot; &lt;&lt; s &lt;&lt;
                 &quot;' in the locale &quot; &lt;&lt; std::locale().name() &lt;&lt; '\n';
    std::istringstream str(s);
    std::ios_base::iostate err = std::ios_base::goodbit;

    std::tm t;
    std::istreambuf_iterator&lt;char&gt; ret =
        std::use_facet&lt;std::time_get&lt;char&gt;&gt;(str.getloc()).get_monthname(
            std::istreambuf_iterator&lt;char&gt;(str),
            std::istreambuf_iterator&lt;char&gt;(),
            str, err, &amp;t
        );
    str.setstate(err);
    if(str) {
        std::cout &lt;&lt; &quot;Successfully parsed, month number is &quot; &lt;&lt; t.tm_mon;
        if(ret != std::istreambuf_iterator&lt;char&gt;()) {
            std::cout &lt;&lt; &quot;. Remaining content: &quot;;
            std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                      std::ostreambuf_iterator&lt;char&gt;(std::cout));
        } else {
            std::cout &lt;&lt; &quot;. The input was fully consumed&quot;;
        }
    } else {
        std::cout &lt;&lt; &quot;Parse failed. Unparsed string: &quot;;
        std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                  std::ostreambuf_iterator&lt;char&gt;(std::cout));
    }
    std::cout &lt;&lt; '\n';
}
int main()
{
    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    try_get_mon(&quot;2月&quot;);
    std::locale::global(std::locale(&quot;th_TH.utf8&quot;));
    try_get_mon(&quot;กุมภาพันธ์&quot;);
    std::locale::global(std::locale(&quot;el_GR.utf8&quot;));
    try_get_mon(&quot;Φεβ&quot;);
    try_get_mon(&quot;Φεβρουάριος&quot;);
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    try_get_mon(&quot;Febrile&quot;);
}
 | output=
Parsing the month out of '2月' in the locale ja_JP.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'กุมภาพันธ์' in the locale th_TH.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'Φεβ' in the locale el_GR.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'Φεβρουάριος' in the locale el_GR.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'Febrile' in the locale en_US.utf8
Parse failed. Unparsed string: ile
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/get time</title>
    <ns>0</ns>
    <id>9836</id>
    <revision>
      <id>58212</id>
      <parentid>50068</parentid>
      <timestamp>2013-06-01T06:10:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="3860">{{cpp/locale/time_get/title|get_time|do_get_time}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type get_time( iter_type beg, iter_type end, std::ios_base&amp; str,
                    std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl | num=2 | 1=
protected:
virtual iter_type get_time( iter_type beg, iter_type end, std::ios_base&amp; str,
                            std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl end}}

@1@ public member function, calls the protected virtual member function {{tt|do_get_time}} of the most derived class.
@2@ Reads successive characters from the sequence {{tt|[beg, end)}} and parses out the time value following the same rules as the format specifier 

{{rev begin}}
{{rev | until=c++11 | {{c|'%X'}} }}
{{rev | since=c++11 | {{c|&quot;%H:%M:%S&quot;}} }}
{{rev end}}

@@ as used by the functions {{lc|std::get_time}}, {{l2tt|cpp/locale/time_get/get}}, and the POSIX function {{tt|strptime()}}

@@ The parsed time is stored in the corresponding fields of the {{lc|std::tm}} structure pointed to by the argument {{tt|t}}.

@@ If the end iterator is reached before a valid value is read, the function sets {{lc|std::ios_base::eofbit}} in {{tt|err}}. If a parsing error is encountered, the function sets {{lc|std::ios_base::failbit}} in {{tt|err}}.

===Parameters===
{{par begin}}
{{par | beg | iterator designating the start of the sequence to parse}}
{{par | end | one past the end iterator for the sequence to parse }}
{{par | str | a stream object that this function uses to obtain locale facets when needed, e.g. {{lc|std::ctype}} to skip whitespace}}
{{par | err | stream error flags object that is modified by this function to indicate errors}}
{{par | t | pointer to the {{lc|std::tm}} object that will hold the result of this function call }}
{{par end}}

===Return value===
Iterator pointing one past the last character in {{tt|[beg, end)}} that was recognized as a part of a valid date.

===Notes===
For the alphabetic components of the default time format (if any), this function is usually case-insensitive.

If a parsing error is encountered, most implementations of this function leave {{tt|*t}} unmodified.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;

void try_get_time(const std::string&amp; s)
{
    std::cout &lt;&lt; &quot;Parsing the time out of '&quot; &lt;&lt; s &lt;&lt;
                 &quot;' in the locale &quot; &lt;&lt; std::locale().name() &lt;&lt; '\n';
    std::istringstream str(s);
    std::ios_base::iostate err = std::ios_base::goodbit;

    std::tm t;
    std::istreambuf_iterator&lt;char&gt; ret =
        std::use_facet&lt;std::time_get&lt;char&gt;&gt;(str.getloc()).get_time(
            std::istreambuf_iterator&lt;char&gt;(str),
            std::istreambuf_iterator&lt;char&gt;(),
            str, err, &amp;t
        );
    str.setstate(err);
    if(str) {
        std::cout &lt;&lt; &quot;Hours: &quot;   &lt;&lt; t.tm_hour &lt;&lt; ' '
                  &lt;&lt; &quot;Minutes: &quot; &lt;&lt; t.tm_min  &lt;&lt; ' '
                  &lt;&lt; &quot;Seconds: &quot; &lt;&lt; t.tm_sec  &lt;&lt; '\n';
    } else {
        std::cout &lt;&lt; &quot;Parse failed. Unparsed string: &quot;;
        std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                  std::ostreambuf_iterator&lt;char&gt;(std::cout));
        std::cout &lt;&lt; '\n';
    }
}
int main()
{
    std::locale::global(std::locale(&quot;ru_RU.utf8&quot;));
    try_get_time(&quot;21:40:11&quot;);
    try_get_time(&quot;21-40-11&quot;);

    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    try_get_time(&quot;21時37分58秒&quot;);
}
 | output=
Parsing the time out of '21:40:11' in the locale ru_RU.utf8
Hours: 21 Minutes: 40 Seconds: 11
Parsing the time out of '21-40-11' in the locale ru_RU.utf8
Parse failed. Unparsed string: -40-11
Parsing the time out of '21時37分58秒' in the locale ja_JP.utf8
Hours: 21 Minutes: 37 Seconds: 58
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/get weekday</title>
    <ns>0</ns>
    <id>9833</id>
    <revision>
      <id>58215</id>
      <parentid>50069</parentid>
      <timestamp>2013-06-01T06:10:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="4635">{{cpp/locale/time_get/title|get_weekday|do_get_weekday}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type get_weekday( iter_type beg, iter_type end, std::ios_base&amp; str,
                       std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl | num=2 | 1=
protected:
virtual iter_type do_get_weekday( iter_type beg, iter_type end, std::ios_base&amp; str,
                                  std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl end}}

@1@ public member function, calls the protected virtual member function {{tt|do_get_weekday}} of the most derived class.
@2@ Reads successive characters from the sequence {{tt|[beg, end)}} and parses out the weekday name (possibly abbreviated), using the default format for weekdays expected by this locale, which is the same format as {{c|&quot;%a&quot;}} as used by the functions {{lc|std::get_time}}, {{l2tt|cpp/locale/time_get/get}}, and the POSIX function {{tt|strptime()}}

If it finds abbreviated name, followed by the characters that are valid for the full name, it continues reading until it consumes all the characters for the full name or finds a character that isn't expected, in which case parsing fails even if the first few characters were a valid abbreviation.

The parsed weekday is stored in the {{lc|std::tm}} field {{c|t-&gt;tm_wday}}.

If the end iterator is reached before a valid weekday name is read, the function sets {{lc|std::ios_base::eofbit}} in {{tt|err}}. If a parsing error is encountered, the function sets {{lc|std::ios_base::failbit}} in {{tt|err}}.

===Parameters===
{{par begin}}
{{par | beg | iterator designating the start of the sequence to parse}}
{{par | end | one past the end iterator for the sequence to parse }}
{{par | str | a stream object that this function uses to obtain locale facets when needed, e.g. {{lc|std::ctype}} to skip whitespace or {{lc|std::collate}} to compare strings}}
{{par | err | stream error flags object that is modified by this function to indicate errors}}
{{par | t | pointer to the {{lc|std::tm}} object that will hold the result of this function call }}
{{par end}}

===Return value===
Iterator pointing one past the last character in {{tt|[beg, end)}} that was recognized as a part of a valid weekname.

===Notes===
This function is usually case-insensitive.

If a parsing error is encountered, most implementations of this function leave {{tt|*t}} unmodified.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;

void try_get_wday(const std::string&amp; s)
{
    std::cout &lt;&lt; &quot;Parsing the weekday out of '&quot; &lt;&lt; s &lt;&lt;
                 &quot;' in the locale &quot; &lt;&lt; std::locale().name() &lt;&lt; '\n';
    std::istringstream str(s);
    std::ios_base::iostate err = std::ios_base::goodbit;

    std::tm t;
    std::istreambuf_iterator&lt;char&gt; ret =
        std::use_facet&lt;std::time_get&lt;char&gt;&gt;(str.getloc()).get_weekday(
            std::istreambuf_iterator&lt;char&gt;(str),
            std::istreambuf_iterator&lt;char&gt;(),
            str, err, &amp;t
        );
    str.setstate(err);
    if(str) {
        std::cout &lt;&lt; &quot;Successfully parsed, weekday number is &quot; &lt;&lt; t.tm_wday;
        if(ret != std::istreambuf_iterator&lt;char&gt;()) {
            std::cout &lt;&lt; &quot; Remaining content: &quot;;
            std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                      std::ostreambuf_iterator&lt;char&gt;(std::cout));
        } else {
            std::cout &lt;&lt; &quot; the input was fully consumed&quot;;
        }
    } else {
        std::cout &lt;&lt; &quot;Parse failed. Unparsed string: &quot;;
        std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                  std::ostreambuf_iterator&lt;char&gt;(std::cout));
    }
    std::cout &lt;&lt; '\n';
}
int main()
{
    std::locale::global(std::locale(&quot;lt_LT.utf8&quot;));
    try_get_wday(&quot;Št&quot;);
    try_get_wday(&quot;Šeštadienis&quot;);

    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    try_get_wday(&quot;SATELLITE&quot;);

    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    try_get_wday(&quot;土曜日&quot;);
}
 | output=
Parsing the weekday out of 'Št' in the locale lt_LT.utf8
Successfully parsed, weekday number is 6 the input was fully consumed
Parsing the weekday out of 'Šeštadienis' in the locale lt_LT.utf8
Successfully parsed, weekday number is 6 the input was fully consumed
Parsing the weekday out of 'SATELLITE' in the locale en_US.utf8
Successfully parsed, weekday number is 6 Remaining content: ELLITE
Parsing the weekday out of '土曜日' in the locale ja_JP.utf8
Successfully parsed, weekday number is 6 the input was fully consumed
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/get year</title>
    <ns>0</ns>
    <id>9837</id>
    <revision>
      <id>62466</id>
      <parentid>60983</parentid>
      <timestamp>2013-06-30T19:21:38Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4337">{{cpp/locale/time_get/title|get_year|do_get_year}}
{{cpp/locale/time_get/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type do_get_year( iter_type s, iter_type end, std::ios_base&amp; str,
                       std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl | num=2 | 1=
protected:
virtual iter_type do_get_year( iter_type s, iter_type end, std::ios_base&amp; str,
                               std::ios_base::iostate&amp; err, std::tm* t) const;
}}
{{dcl end}}

@1@ public member function, calls the protected virtual member function {{tt|do_get_year}} of the most derived class.
@2@ Reads successive characters from the sequence {{tt|[beg, end)}} and parses out the year using some implementation-defined format. Depending on the locale, two-digit years may be accepted, and it is implementation-defined which century they belong to.

The parsed year is stored in the {{lc|std::tm}} structure field {{c|t-&gt;tm_year}}.

If the end iterator is reached before a valid date is read, the function sets {{lc|std::ios_base::eofbit}} in {{tt|err}}. If a parsing error is encountered, the function sets {{lc|std::ios_base::failbit}} in {{tt|err}}.

===Parameters===
{{par begin}}
{{par | beg | iterator designating the start of the sequence to parse}}
{{par | end | one past the end iterator for the sequence to parse }}
{{par | str | a stream object that this function uses to obtain locale facets when needed, e.g. {{lc|std::ctype}} to skip whitespace or {{lc|std::collate}} to compare strings}}
{{par | err | stream error flags object that is modified by this function to indicate errors}}
{{par | t | pointer to the {{lc|std::tm}} object that will hold the result of this function call }}
{{par end}}

===Return value===
Iterator pointing one past the last character in {{tt|[beg, end)}} that was recognized as a part of a valid year.

===Notes===
For two-digit input values, many implementations use the same parsing rules as the conversion specifier {{c|'%y'}} as used by {{lc|std::get_time}}, {{lc|std::time_get::get()}}, and the POSIX function {{tt|strptime()}}: two-digit integer is expected, the values in the range [69,99] results in values 1969 to 1999, range [00,68] results in 2000-2068. Four-digit inputs are typically accepted as-is.

If a parsing error is encountered, most implementations of this function leave {{tt|*t}} unmodified.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;

void try_get_year(const std::string&amp; s)
{
    std::cout &lt;&lt; &quot;Parsing the year out of '&quot; &lt;&lt; s &lt;&lt;
                 &quot;' in the locale &quot; &lt;&lt; std::locale().name() &lt;&lt; '\n';
    std::istringstream str(s);
    std::ios_base::iostate err = std::ios_base::goodbit;

    std::tm t;
    std::istreambuf_iterator&lt;char&gt; ret =
        std::use_facet&lt;std::time_get&lt;char&gt;&gt;(str.getloc()).get_year(
            std::istreambuf_iterator&lt;char&gt;(str),
            std::istreambuf_iterator&lt;char&gt;(),
            str, err, &amp;t
        );
    str.setstate(err);
    if (str) {
        std::cout &lt;&lt; &quot;Successfully parsed, year is &quot; &lt;&lt; 1900 + t.tm_year;
        if (ret != std::istreambuf_iterator&lt;char&gt;()) {
            std::cout &lt;&lt; &quot; Remaining content: &quot;;
            std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                      std::ostreambuf_iterator&lt;char&gt;(std::cout));
        } else {
            std::cout &lt;&lt; &quot; the input was fully consumed&quot;;
        }
    } else {
        std::cout &lt;&lt; &quot;Parse failed. Unparsed string: &quot;;
        std::copy(ret, std::istreambuf_iterator&lt;char&gt;(),
                  std::ostreambuf_iterator&lt;char&gt;(std::cout));
    }
    std::cout &lt;&lt; '\n';
}

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    try_get_year(&quot;13&quot;);
    try_get_year(&quot;2013&quot;);

    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    try_get_year(&quot;2013年&quot;);
}
 | p=true
 | output=&lt;!--produced using LLVM libc++--&gt;
Parsing the year out of '13' in the locale en_US.utf8
Successfully parsed, year is 2013 the input was fully consumed
Parsing the year out of '2013' in the locale en_US.utf8
Successfully parsed, year is 2013 the input was fully consumed
Parsing the year out of '2013年' in the locale ja_JP.utf8
Successfully parsed, year is 2013 Remaining content: 年
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc get_time}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/time get</title>
    <ns>0</ns>
    <id>4401</id>
    <revision>
      <id>43163</id>
      <parentid>15756</parentid>
      <timestamp>2012-11-03T01:51:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="330">{{cpp/locale/facet/constructor|time_get}}

[[de:cpp/locale/time get/time get]]
[[es:cpp/locale/time get/time get]]
[[fr:cpp/locale/time get/time get]]
[[it:cpp/locale/time get/time get]]
[[ja:cpp/locale/time get/time get]]
[[pt:cpp/locale/time get/time get]]
[[ru:cpp/locale/time get/time get]]
[[zh:cpp/locale/time get/time get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time get/~time get</title>
    <ns>0</ns>
    <id>4446</id>
    <revision>
      <id>43156</id>
      <parentid>15819</parentid>
      <timestamp>2012-11-03T01:50:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="337">{{cpp/locale/facet/destructor|time_get}}

[[de:cpp/locale/time get/~time get]]
[[es:cpp/locale/time get/~time get]]
[[fr:cpp/locale/time get/~time get]]
[[it:cpp/locale/time get/~time get]]
[[ja:cpp/locale/time get/~time get]]
[[pt:cpp/locale/time get/~time get]]
[[ru:cpp/locale/time get/~time get]]
[[zh:cpp/locale/time get/~time get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time put</title>
    <ns>0</ns>
    <id>3568</id>
    <revision>
      <id>65768</id>
      <parentid>58222</parentid>
      <timestamp>2013-10-07T18:23:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix description of the required specializations</comment>
      <text xml:space="preserve" bytes="2893">{{cpp/title | time_put}}
{{cpp/locale/time_put/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; 
    class CharT, 
    class OutputIt = std::ostreambuf_iterator&lt;CharT&gt; 
&gt; class time_put;
}}
{{dcl end}}

Class template {{tt|std::time_put}} encapsulates date and time formatting rules. The I/O manipulator {{lc|std::put_time}} uses the {{tt|std::time_put}} facet of the I/O stream's locale to generate text representation of an {{lc|std::tm}} object.

{{inheritance diagram/std-time_put}}

===Type requirements===
{{par begin}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Specializations===
Two standalone (locale-independent) full specializations and two partial specializations are provided by the standard library:
{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::time_put&lt;char&gt;}} | creates narrow string representations of date and time }}
{{dsc | {{c|std::time_put&lt;wchar_t&gt;}} | creates wide string representations of date and time }}
{{dsc | {{c|std::time_put&lt;char, OutputIt&gt;}} | creates narrow string representations of date and time using custom output iterator}}
{{dsc | {{c|std::time_put&lt;wchar_t, OutputIt&gt;}} | creates wide string representations of date and time using custom output iterator}}
{{dsc end}}
In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|iter_type}} | {{tt|OutputIt}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/time_put/dsc constructor}}
{{dsc inc | cpp/locale/time_put/dsc destructor}}
{{dsc inc | cpp/locale/time_put/dsc put}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|static std::locale::id}} id | ''id'' of the locale }}
{{dsc end}}

===Protected member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/time_put/dsc do_put}}
{{dsc end}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;ctime&gt;
#include &lt;iomanip&gt;
#include &lt;codecvt&gt;

int main()
{
    std::time_t t = std::time(NULL);
    std::wbuffer_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; conv(std::cout.rdbuf());
    std::wostream out(&amp;conv);
    out.imbue(std::locale(&quot;ja_JP&quot;));
    // this I/O manipulator std::put_time uses std::time_put&lt;wchar_t&gt;
    out &lt;&lt; std::put_time(std::localtime(&amp;t), L&quot;%A %c&quot;) &lt;&lt; '\n';
}
 | output=
水曜日 2011年11月09日 12時32分05秒
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc time_put_byname}}
{{dsc inc | cpp/locale/dsc time_get}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc end}}

[[de:cpp/locale/time put]]
[[es:cpp/locale/time put]]
[[fr:cpp/locale/time put]]
[[it:cpp/locale/time put]]
[[ja:cpp/locale/time put]]
[[pt:cpp/locale/time put]]
[[ru:cpp/locale/time put]]
[[zh:cpp/locale/time put]]</text>
      <sha1>4by5f2kz1jh8yzgt5ovoxymmqh3925l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time put byname</title>
    <ns>0</ns>
    <id>9248</id>
    <revision>
      <id>61620</id>
      <parentid>58226</parentid>
      <timestamp>2013-06-06T07:21:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+inline descriptions</comment>
      <text xml:space="preserve" bytes="2674">{{cpp/title | time_put_byname}}
{{cpp/locale/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
template&lt; class CharT, class OutputIterator = std::ostreambuf_iterator&lt;CharT&gt; &gt;
class time_put_byname : public std::time_put&lt;CharT, OutputIterator&gt;;
}}
{{dcl end}}

{{lc|std::time_put_byname}} is a {{lc|std::time_put}} facet which encapsulates time and date formatting rules of the locale specified at its construction.

Two specializations are provided by the standard library

{{dsc begin}}
{{dsc header | locale }}
{{dsc | {{c|std::time_put_byname&lt;char, OutputIterator&gt;}} | narrow/multibyte time formatting }}
{{dsc | {{c|std::time_put_byname&lt;wchar_t, OutputIterator&gt;}} | wide string time formatting }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|iter_type}} | {{tt|OutputIterator}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/byname/dsc constructor | time_put_byname}}
{{dsc inc | cpp/locale/byname/dsc destructor | time_put_byname}}
{{dsc end}}

{{include | cpp/locale/byname/constructor | time_put_byname}}
{{include | cpp/locale/byname/destructor | time_put_byname}}

{{cpp/locale/time_put/inherit}}

===Example===
{{example
 | This example prints current time using the &quot;C&quot; locale with the time_put facet replaced by various time_put_byname facets
 | code=
#include &lt;iostream&gt;
#include &lt;ctime&gt;
#include &lt;iomanip&gt;
#include &lt;codecvt&gt;
 
int main()
{
    std::time_t t = std::time(NULL);
    std::wbuffer_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; conv(std::cout.rdbuf());
    std::wostream out(&amp;conv);

    out.imbue(std::locale(out.getloc(),
                          new std::time_put_byname&lt;wchar_t&gt;(&quot;ja_JP&quot;)));
    out &lt;&lt; std::put_time(std::localtime(&amp;t), L&quot;%A %c&quot;) &lt;&lt; '\n';

    out.imbue(std::locale(out.getloc(),
                         new std::time_put_byname&lt;wchar_t&gt;(&quot;ru_RU.utf8&quot;)));
    out &lt;&lt; std::put_time(std::localtime(&amp;t), L&quot;%A %c&quot;) &lt;&lt; '\n'; 

    out.imbue(std::locale(out.getloc(),
                         new std::time_put_byname&lt;wchar_t&gt;(&quot;sv_SE.utf8&quot;)));
    out &lt;&lt; std::put_time(std::localtime(&amp;t), L&quot;%A %c&quot;) &lt;&lt; '\n'; 
}
 | p=true
 | output=
木曜日 2012年08月09日 21時41分02秒
Четверг Чт. 09 авг. 2012 21:41:02
torsdag tor  9 aug 2012 21:41:02
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc time_put}}
{{dsc end}}

[[de:cpp/locale/time put byname]]
[[es:cpp/locale/time put byname]]
[[fr:cpp/locale/time put byname]]
[[it:cpp/locale/time put byname]]
[[ja:cpp/locale/time put byname]]
[[pt:cpp/locale/time put byname]]
[[ru:cpp/locale/time put byname]]
[[zh:cpp/locale/time put byname]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time put/put</title>
    <ns>0</ns>
    <id>9838</id>
    <revision>
      <id>72354</id>
      <parentid>72348</parentid>
      <timestamp>2014-08-14T11:35:42Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>charT =&gt; CharT</comment>
      <text xml:space="preserve" bytes="5375">{{cpp/locale/time_put/title|put|do_put}}
{{cpp/locale/time_put/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
public:
iter_type put( iter_type out, std::ios_base&amp; str,
               char_type fill, const std::tm* t,
               const CharT* fmtbeg, const CharT* fmtend ) const;
}}
{{dcl | num=2 | 1=
public:
iter_type put( iter_type out, std::ios_base&amp; str,
               char_type fill, const std::tm* t,
               char format, char modifier = 0 ) const;
}}
{{dcl | num=3 | 1=
protected:
virtual iter_type do_put( iter_type out, std::ios_base&amp; str,
                          char_type fill, const std::tm* t,
                          char format, char modifier ) const;
}}
{{dcl end}}

Converts the calendar date and time stored in the {{lc|std::tm}} object pointed to by {{tt|t}} into a character string, according to the format string {{tt|[fmtbeg, fmtend)}}. The format string is the same as used by {{c|std::srtftime}}, but each format specifier is processed by an individual call to {{tt|do_put()}}, which can be customized by extending this facet.

@1@ Steps through the character sequence {{tt|[fmtbeg, fmtend)}}, examining the characters. Every character that is not a part of a format sequence is written to the output iterator {{tt|out}} immediately. To identify format sequences, this function narrows the next character {{tt|c}} in {{tt|[fmtbeg, fmtend)}} as if by {{c|std::ctype&lt;char_type&gt;(str.getloc()).narrow(c,0)}} and if it equals {{c|'%'}}, the next one or two characters are compared to the list of format sequences recognized by {{lc|std::strftime}} plus any additional implementation-defined formats supported by this locale. For each valid format sequence, a call to {{c|do_put(out, str, fill, t, format, modifier)}} is made, where {{tt|format}} is the format sequence character, and {{tt|modifier}} is the optional format sequence modifier ({{c|'E'}} or {{c|'O'}}). A value of {{c|'\0'}} is used if the modifier is absent.
@2@ Calls the {{tt|do_put}} member function of the most derived class.
@3@ Converts the calendar date and time stored in the {{lc|std::tm}} object pointed to by {{tt|t}} into a character string, according to the format conversion sequence formed by concatenating {{c|'%'}}, the value of {{tt|modifier}} if not {{c|'\0'}}, and the value of {{tt|format}}. The format is interpreted the same way as the function {{lc|std::strftime}}, except that the formats that are described as locale-dependent are defined by this locale, and additional format specifiers may be supported (the {{tt|fill}} argument is provided for these implementation-defined format specifiers to use). The string is written to the output iterator {{tt|out}}.

===Parameters===
{{par begin}}
{{par | out | output iterator where the result of the conversion is written}}
{{par | str | a stream object that this function uses to obtain locale facets when needed, e.g. {{lc|std::ctype}} to narrow characters}}
{{par | t | pointer to the {{lc|std::tm}} object from which the date/time values are obtained}}
{{par | fmtbeg | pointer to the first character of a sequence of char_type characters specifying the conversion format
{{cpp/chrono/c/strftime format}}
}}
{{par | fmtend | pointer one past the last character of a sequence of char_type characters specifying the conversion format}}
{{par | fill | fill character (usually space)}}
{{par | format | the character that names a conversion specifier}}
{{par | modifier | the optional modifier that may appear between {{tt|%}} and the conversion specifier}}
{{par end}}

===Return value===
Iterator pointing one past the last character that was produced .

===Notes===
No error handling is provided.

The {{tt|fill}} character is provided for those implementation-defined format specifiers and for the user-defined overrides of {{tt|do_put()}} that use padding and filling logic. Such implementations typically make use of the formatting flags from {{tt|str}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;iomanip&gt;
#include &lt;ctime&gt;

void try_time_put(const std::tm* t, const std::string&amp; fmt)
{
        std::cout.imbue(std::locale());
        std::cout &lt;&lt; &quot;In the locale '&quot; &lt;&lt; std::cout.getloc().name() &lt;&lt; &quot;' : '&quot;;

        std::use_facet&lt;std::time_put&lt;char&gt;&gt;(std::cout.getloc()).put(
                    std::ostreambuf_iterator&lt;char&gt;(std::cout),
                    std::cout, ' ', t, &amp;fmt[0], &amp;fmt[0] + fmt.size());

        std::cout &lt;&lt; &quot;'\n&quot;;
}

int main()
{
    std::time_t t = std::time(NULL);
    std::tm tm = *std::localtime(&amp;t);

    std::string fmt = &quot;%c&quot;;
    std::cout &lt;&lt; &quot;Using the format string '&quot; &lt;&lt; fmt
              &lt;&lt; &quot;' to format the time: &quot; &lt;&lt; std::ctime(&amp;t) &lt;&lt; '\n';

    std::locale::global(std::locale(&quot;de_DE.utf8&quot;));
    try_time_put(&amp;tm, fmt);

    std::locale::global(std::locale(&quot;el_GR.utf8&quot;));
    try_time_put(&amp;tm, fmt);

    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    try_time_put(&amp;tm, fmt);
}
 | output=
Using the format string '%c' to format the time: Mon Feb 11 22:58:50 2013

In the locale 'de_DE.utf8' : 'Mo 11 Feb 2013 23:02:38 EST'
In the locale 'el_GR.utf8' : 'Δευ 11 Φεβ 2013 11:02:38 μμ EST'
In the locale 'ja_JP.utf8' : '2013年02月11日 23時02分38秒'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/manip/dsc put_time}}
{{dsc inc | cpp/locale/time_get/dsc do_get}}
{{dsc end}}</text>
      <sha1>p5831fp98xflc13zaae0qt46fvn42he</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time put/time put</title>
    <ns>0</ns>
    <id>4413</id>
    <revision>
      <id>43134</id>
      <parentid>15771</parentid>
      <timestamp>2012-11-03T01:46:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="330">{{cpp/locale/facet/constructor|time_put}}

[[de:cpp/locale/time put/time put]]
[[es:cpp/locale/time put/time put]]
[[fr:cpp/locale/time put/time put]]
[[it:cpp/locale/time put/time put]]
[[ja:cpp/locale/time put/time put]]
[[pt:cpp/locale/time put/time put]]
[[ru:cpp/locale/time put/time put]]
[[zh:cpp/locale/time put/time put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/time put/~time put</title>
    <ns>0</ns>
    <id>4445</id>
    <revision>
      <id>43127</id>
      <parentid>15818</parentid>
      <timestamp>2012-11-03T01:44:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="337">{{cpp/locale/facet/destructor|time_put}}

[[de:cpp/locale/time put/~time put]]
[[es:cpp/locale/time put/~time put]]
[[fr:cpp/locale/time put/~time put]]
[[it:cpp/locale/time put/~time put]]
[[ja:cpp/locale/time put/~time put]]
[[pt:cpp/locale/time put/~time put]]
[[ru:cpp/locale/time put/~time put]]
[[zh:cpp/locale/time put/~time put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/tolower</title>
    <ns>0</ns>
    <id>2960</id>
    <revision>
      <id>65551</id>
      <parentid>58227</parentid>
      <timestamp>2013-09-18T15:14:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>reused towlower example</comment>
      <text xml:space="preserve" bytes="1979">{{cpp/title | tolower{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
charT tolower( charT ch, const locale&amp; loc );
}}

Converts the character {{tt|ch}} to lowercase if possible, using the conversion rules specified by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===
Returns the lowercase form of {{tt|ch}} if one is listed in the locale, otherwise return {{tt|ch}} unchanged.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the Greek uppercase letter 'Σ' has two lowercase forms, depending on the position in a word: 'σ' and 'ς'. A call to {{lc|std::tolower}} cannot be used to obtain the correct lowercase form in this case.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
charT tolower( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).tolower(ch);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;locale&gt;

int main()
{
    wchar_t c = L'\u0190'; // Latin capital open E ('Ɛ')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;

    std::cout &lt;&lt; &quot;in the default locale, tolower(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::tolower(c, std::locale()) &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;in Unicode locale, tolower(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::tolower(c, std::locale(&quot;en_US.utf8&quot;)) &lt;&lt; '\n';
}
 | output=
in the default locale, tolower(0x190) = 0x190
in Unicode locale, tolower(0x190) = 0x25b
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc toupper}}
{{dsc inc | cpp/string/byte/dsc tolower}}
{{dsc inc | cpp/string/wide/dsc towlower}}
{{dsc end}}

[[de:cpp/locale/tolower]]
[[es:cpp/locale/tolower]]
[[fr:cpp/locale/tolower]]
[[it:cpp/locale/tolower]]
[[ja:cpp/locale/tolower]]
[[pt:cpp/locale/tolower]]
[[ru:cpp/locale/tolower]]
[[zh:cpp/locale/tolower]]</text>
      <sha1>oz6en1hg2o8ha1l3i1w56rpv9i29rko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/toupper</title>
    <ns>0</ns>
    <id>2959</id>
    <revision>
      <id>87177</id>
      <parentid>65550</parentid>
      <timestamp>2016-08-01T07:12:32Z</timestamp>
      <contributor>
        <ip>72.37.140.38</ip>
      </contributor>
      <comment>Fixed typo</comment>
      <text xml:space="preserve" bytes="1912">{{cpp/title | toupper{{small|(std::locale)}}}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class charT &gt;
charT toupper( charT ch, const locale&amp; loc );
}}

Converts the character {{tt|ch}} to uppercase if possible, using the conversion rules specified by the given locale's {{lc|std::ctype}} facet.

===Parameters===
{{par begin}}
{{par | ch | character}}
{{par | loc | locale }}
{{par end}}

===Return value===
Returns the uppercase form of {{tt|ch}} if one is listed in the locale, otherwise returns {{tt|ch}} unchanged.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the uppercase form of 'ß' is (with some exceptions) the two-character string &quot;SS&quot;, which cannot be obtained by {{lc|std::toupper}}.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class charT &gt;
charT toupper( charT ch, const std::locale&amp; loc ) {
    return std::use_facet&lt;std::ctype&lt;charT&gt;&gt;(loc).toupper(ch);
}
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;locale&gt;

int main()
{
    wchar_t c = L'\u017f'; // Latin small letter Long S ('ſ')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;

    std::cout &lt;&lt; &quot;in the default locale, toupper(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::toupper(c, std::locale()) &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;in Unicode locale, toupper(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::toupper(c, std::locale(&quot;en_US.utf8&quot;)) &lt;&lt; '\n';
}
 | output=
in the default locale, toupper(0x17f) = 0x17f
in Unicode locale, toupper(0x17f) = 0x53
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc tolower}}
{{dsc inc | cpp/string/byte/dsc toupper}}
{{dsc inc | cpp/string/wide/dsc towupper}}
{{dsc end}}

[[de:cpp/locale/toupper]]
[[es:cpp/locale/toupper]]
[[fr:cpp/locale/toupper]]
[[it:cpp/locale/toupper]]
[[ja:cpp/locale/toupper]]
[[pt:cpp/locale/toupper]]
[[ru:cpp/locale/toupper]]
[[zh:cpp/locale/toupper]]</text>
      <sha1>2hg7qc557689bi86m2ywg02ovz50z6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/use facet</title>
    <ns>0</ns>
    <id>2835</id>
    <revision>
      <id>75055</id>
      <parentid>58231</parentid>
      <timestamp>2015-01-05T13:12:27Z</timestamp>
      <contributor>
        <ip>91.223.202.5</ip>
      </contributor>
      <text xml:space="preserve" bytes="1312">{{cpp/title | use_facet}}
{{cpp/locale/navbar}}

{{ddcl | header=locale |
template&lt; class Facet &gt;
const Facet&amp; use_facet( const std::locale&amp; loc );
}}

Obtains a reference to a facet implemented by {{tt|loc}}. 

===Parameters===
{{par begin}}
{{par | loc | the locale object to query }}
{{par end}}

===Return value===

Returns a reference to the facet. The reference returned by this function is valid as long as any {{lc|std::locale}} object exists that implements {{tt|Facet}}.

===Exceptions===
{{lc|std::bad_cast}} if {{c|1=std::has_facet&lt;Facet&gt;(loc) == false}}.

===Example===
{{example
 | Display the 3-letter currency name used by the user's preferred locale
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;

int main()
{
    std::locale loc = std::locale(&quot;&quot;); // user's preferred locale
    std::cout &lt;&lt; &quot;Your currency string is &quot;
              &lt;&lt; std::use_facet&lt;std::moneypunct&lt;char, true&gt;&gt;(loc).curr_symbol() &lt;&lt; '\n';
}
 | output=
Your currency string is USD
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc locale}}
{{dsc inc | cpp/locale/dsc has_facet}}
{{dsc end}}

[[de:cpp/locale/use facet]]
[[es:cpp/locale/use facet]]
[[fr:cpp/locale/use facet]]
[[it:cpp/locale/use facet]]
[[ja:cpp/locale/use facet]]
[[pt:cpp/locale/use facet]]
[[ru:cpp/locale/use facet]]
[[zh:cpp/locale/use facet]]</text>
      <sha1>86sm5iw3zg9wtma5nkkgjw588aq7bog</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wbuffer convert</title>
    <ns>0</ns>
    <id>2957</id>
    <revision>
      <id>90618</id>
      <parentid>62760</parentid>
      <timestamp>2017-03-06T16:47:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="2111">{{cpp/title | wbuffer_convert}}
{{cpp/locale/wbuffer_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | since=c++11 | notes={{mark|deprecated in C++17}}| 1=
template&lt;class Codecvt,
         class Elem = wchar_t,
         class Tr = std::char_traits&lt;Elem&gt; &gt;
class wbuffer_convert : public std::basic_streambuf&lt;Elem, Tr&gt;
}}
{{dcl end}}

{{lc|std::wbuffer_convert}} is a wrapper over stream buffer of type {{c|std::basic_streambuf&lt;char&gt;}} which gives it the appearance of {{c|std::basic_streambuf&lt;Elem&gt;}}. All I/O performed through {{lc|std::wbuffer_convert}} undergoes character conversion as defined by the facet {{tt|Codecvt}}. {{lc|std::wbuffer_convert}} assumes ownership of the conversion facet, and cannot use a facet managed by a locale. The standard facets suitable for use with {{lc|std::wbuffer_convert}} are {{lc|std::codecvt_utf8}} for UTF-8/UCS2 and UTF-8/UCS4 conversions and {{lc|std::codecvt_utf8_utf16}} for UTF-8/UTF-16 conversions.

This class template makes the implicit character conversion functionality of {{lc|std::basic_filebuf}} available for any {{lc|std::basic_streambuf}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|state_type}} | {{tt|Codecvt::state_type}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/wbuffer_convert/dsc wbuffer_convert}}
{{dsc mem fun | nolink=true | operator{{=}} | the copy assignment operator is deleted }}
{{dsc inc | cpp/locale/wbuffer_convert/dsc ~wbuffer_convert}}
{{dsc inc | cpp/locale/wbuffer_convert/dsc rdbuf}}
{{dsc inc | cpp/locale/wbuffer_convert/dsc state}}
{{dsc end}}

===See also===
{{cpp/locale/unicode string conversions}}
{{dsc begin}}
{{dsc inc | cpp/locale/dsc wstring_convert}}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc end}}

[[de:cpp/locale/wbuffer convert]]
[[es:cpp/locale/wbuffer convert]]
[[fr:cpp/locale/wbuffer convert]]
[[it:cpp/locale/wbuffer convert]]
[[ja:cpp/locale/wbuffer convert]]
[[pt:cpp/locale/wbuffer convert]]
[[ru:cpp/locale/wbuffer convert]]
[[zh:cpp/locale/wbuffer convert]]</text>
      <sha1>84azw6mqigl9kyywlzsax702inmo0m8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wbuffer convert/rdbuf</title>
    <ns>0</ns>
    <id>5299</id>
    <revision>
      <id>58235</id>
      <parentid>50079</parentid>
      <timestamp>2013-06-01T06:11:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1861">{{cpp/wbuffer_convert/title|rdbuf}}
{{cpp/locale/wbuffer_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1| 1=
std::streambuf* rdbuf() const;
}}
{{dcl | num=2|1=
std::streambuf* rdbuf( std::streambuf* bytebuf );
}}
{{dcl end}}

1) returns the pointer to the underlying byte stream

2) replaces the associated byte stream with {{tt|bytebuf}}
.

===Return value===
1) the current underlying byte stream

2) the previous byte stream

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;
int main()
{
    // convert UTF-8 to UCS4
    std::stringbuf utf8buf(u8&quot;z\u00df\u6c34\U0001d10b&quot;);  // or u8&quot;zß水𝄋&quot;
                       // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;
    std::wbuffer_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; conv(&amp;utf8buf);
    std::wistream ucsbuf(&amp;conv);
    std::cout &lt;&lt; &quot;Reading from a UTF-8 stringbuf via wbuffer_convert:\n&quot;;
    for(wchar_t c; ucsbuf.get(c); )
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';
 
    // reuse the same wbuffer_convert to handle UCS4 to UTF-8 output
    conv.rdbuf(std::cout.rdbuf());
    std::wostream out(&amp;conv);
    std::cout &lt;&lt; &quot;Sending UCS4 data to std::cout via wbuffer_convert:\n&quot;;
    out &lt;&lt; L&quot;z\u00df\u6c34\U0001d10b\n&quot;;
}
 | output=
Reading from a UTF-8 stringbuf via wbuffer_convert:
0x7a
0xdf
0x6c34
0x1d10b
Sending UCS4 data to std::cout via wbuffer_convert:
zß水𝄋
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/wbuffer_convert/dsc wbuffer_convert}}
{{dsc end}}

[[de:cpp/locale/wbuffer convert/rdbuf]]
[[es:cpp/locale/wbuffer convert/rdbuf]]
[[fr:cpp/locale/wbuffer convert/rdbuf]]
[[it:cpp/locale/wbuffer convert/rdbuf]]
[[ja:cpp/locale/wbuffer convert/rdbuf]]
[[pt:cpp/locale/wbuffer convert/rdbuf]]
[[ru:cpp/locale/wbuffer convert/rdbuf]]
[[zh:cpp/locale/wbuffer convert/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wbuffer convert/state</title>
    <ns>0</ns>
    <id>5200</id>
    <revision>
      <id>58236</id>
      <parentid>50080</parentid>
      <timestamp>2013-06-01T06:11:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="941">{{cpp/wbuffer_convert/title|state}}
{{cpp/locale/wbuffer_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
state_type state() const;
}}
{{dcl end}}

Returns the current value of the conversion state, which is stored in this {{tt|wbuffer_convert}} object. The conversion state may be explicitly set in the constructor and is updated by all conversion operations.

===Return value===
The current conversion state.

===Example===

{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/wstring_convert/dsc state}}
{{dsc inc | cpp/string/multibyte/dsc mbsinit}}
{{dsc end}}

[[de:cpp/locale/wbuffer convert/state]]
[[es:cpp/locale/wbuffer convert/state]]
[[fr:cpp/locale/wbuffer convert/state]]
[[it:cpp/locale/wbuffer convert/state]]
[[ja:cpp/locale/wbuffer convert/state]]
[[pt:cpp/locale/wbuffer convert/state]]
[[ru:cpp/locale/wbuffer convert/state]]
[[zh:cpp/locale/wbuffer convert/state]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wbuffer convert/wbuffer convert</title>
    <ns>0</ns>
    <id>5198</id>
    <revision>
      <id>64465</id>
      <parentid>64464</parentid>
      <timestamp>2013-08-17T23:57:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>actually, I think 🍌 looks better than the tiny 𝄋 when illustrating post-16bit unicode chars</comment>
      <text xml:space="preserve" bytes="2528">{{cpp/wbuffer_convert/title|wbuffer_convert}}
{{cpp/locale/wbuffer_convert/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
explicit wbuffer_convert( std::streambuf* bytebuf = 0,
                          Codecvt* pcvt = new Codecvt,
                          state_type state = state_type() );
}}
{{dcl | num=2 | since=c++14 | 1=
wbuffer_convert(const std::wbuffer_convert&amp;) = delete;
}}
{{dcl end}}

@1@ Constructs the {{tt|wbuffer_convert}} object with the specified underlying byte stream, specified {{tt|codecvt}} facet, and specified initial conversion state (all parameters are optional)
@2@ The copy constructor is deleted, {{tt|wbuffer_convert}} is not {{concept|CopyConstructible}}

===Parameters===
{{par begin}}
{{par | bytebuf | pointer to std::streambuf to serve as the underlying narrow character stream }}
{{par | pcvt | pointer to a standalone (not managed by a locale) {{lc|std::codecvt}} facet. The behavior is undefined if this pointer is null.}}
{{par | state | the initial value of the character conversion state}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;
int main()
{
    // wrap a UTF-8 string stream in a UCS4 wbuffer_convert
    std::stringbuf utf8buf(u8&quot;z\u00df\u6c34\U0001f34c&quot;);  // or u8&quot;zß水🍌&quot;
                       // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c&quot;;
    std::wbuffer_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; conv_in(&amp;utf8buf);
    std::wistream ucsbuf(&amp;conv_in);
    std::cout &lt;&lt; &quot;Reading from a UTF-8 stringbuf via wbuffer_convert:\n&quot;;
    for(wchar_t c; ucsbuf.get(c); )
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';

    // wrap a UTF-8 aware std::cout in a UCS4 wbuffer_convert to output UCS4
    std::wbuffer_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; conv_out(std::cout.rdbuf());
    std::wostream out(&amp;conv_out);
    std::cout &lt;&lt; &quot;Sending UCS4 data to std::cout via wbuffer_convert:\n&quot;;
    out &lt;&lt; L&quot;z\u00df\u6c34\U0001f34c\n&quot;;
}
 | output=
Reading from a UTF-8 stringbuf via wbuffer_convert produces
0x7a
0xdf
0x6c34
0x1f34c
Sending UCS4 data to std::cout via wbuffer_convert:
zß水🍌
}}

[[de:cpp/locale/wbuffer convert/wbuffer convert]]
[[es:cpp/locale/wbuffer convert/wbuffer convert]]
[[fr:cpp/locale/wbuffer convert/wbuffer convert]]
[[it:cpp/locale/wbuffer convert/wbuffer convert]]
[[ja:cpp/locale/wbuffer convert/wbuffer convert]]
[[pt:cpp/locale/wbuffer convert/wbuffer convert]]
[[ru:cpp/locale/wbuffer convert/wbuffer convert]]
[[zh:cpp/locale/wbuffer convert/wbuffer convert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wbuffer convert/~wbuffer convert</title>
    <ns>0</ns>
    <id>5300</id>
    <revision>
      <id>58239</id>
      <parentid>50082</parentid>
      <timestamp>2013-06-01T06:11:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2183">{{cpp/wbuffer_convert/title|~wbuffer_convert}}
{{cpp/locale/wbuffer_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
~wbuffer_convert();
}}
{{dcl end}}

Destroys the wbuffer_convert object and deletes the pointer to the conversion facet.

===Notes===
Some implementations are able to delete any facet, including the locale-specific facets with protected destructors. Other implementations require the facet to have a public destructor, similar to the the locale-independent facets from {{tt|&lt;codecvt&gt;}}. 

===Example===

{{example
 | 
 | code=
#include &lt;locale&gt;
#include &lt;utility&gt;
#include &lt;iostream&gt;
#include &lt;codecvt&gt;

// utility wrapper to adapt locale-bound facets for wstring/wbuffer convert
template&lt;class Facet&gt;
struct deletable_facet : Facet
{
    template&lt;class ...Args&gt;
    deletable_facet(Args&amp;&amp; ...args) : Facet(std::forward&lt;Args&gt;(args)...) {}
    ~deletable_facet() {}
};

int main()
{
    // GB18030 / UCS4 conversion, using locale-based facet directly
    // typedef std::codecvt_byname&lt;char32_t, char, std::mbstate_t&gt; gbfacet_t;
    // Compiler error: &quot;calling a protected destructor of codecvt_byname&lt;&gt; in ~wbuffer_convert&quot;
    // std::wbuffer_convert&lt;gbfacet_t, char32_t&gt; gbto32(std::cout.rdbuf(),
    //                                        new gbfacet_t(&quot;zh_CN.gb18030&quot;));

    // GB18030 / UCS4 conversion facet using a facet with public destructor
    typedef deletable_facet&lt;std::codecvt_byname&lt;char32_t, char, std::mbstate_t&gt;&gt; gbfacet_t;
    std::wbuffer_convert&lt;gbfacet_t, char32_t&gt; gbto32(std::cout.rdbuf(),
                                           new gbfacet_t(&quot;zh_CN.gb18030&quot;));
} // destructor called here
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/wstring_convert/dsc ~wstring_convert}}
{{dsc end}}

[[de:cpp/locale/wbuffer convert/~wbuffer convert]]
[[es:cpp/locale/wbuffer convert/~wbuffer convert]]
[[fr:cpp/locale/wbuffer convert/~wbuffer convert]]
[[it:cpp/locale/wbuffer convert/~wbuffer convert]]
[[ja:cpp/locale/wbuffer convert/~wbuffer convert]]
[[pt:cpp/locale/wbuffer convert/~wbuffer convert]]
[[ru:cpp/locale/wbuffer convert/~wbuffer convert]]
[[zh:cpp/locale/wbuffer convert/~wbuffer convert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wstring convert</title>
    <ns>0</ns>
    <id>2956</id>
    <revision>
      <id>90613</id>
      <parentid>62762</parentid>
      <timestamp>2017-03-06T16:46:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>p0618r0 deprecated codecvt</comment>
      <text xml:space="preserve" bytes="2267">{{cpp/title | wstring_convert}}
{{cpp/locale/wstring_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | since=c++11 | notes={{mark|deprecated in C++17}} | 1=
template&lt; class Codecvt,
          class Elem = wchar_t,
          class Wide_alloc = std::allocator&lt;Elem&gt;,
          class Byte_alloc = std::allocator&lt;char&gt; &gt;
class wstring_convert;
}}
{{dcl end}}

Class template {{lc|std::wstring_convert}} performs conversions between byte string {{lc|std::string}} and wide string {{c|std::basic_string&lt;Elem&gt;}}, using an individual code conversion facet {{tt|Codecvt}}. {{lc|std::wstring_convert}} assumes ownership of the conversion facet, and cannot use a facet managed by a locale. The standard facets suitable for use with {{lc|std::wstring_convert}} are {{lc|std::codecvt_utf8}} for UTF-8/UCS2 and UTF-8/UCS4 conversions and {{lc|std::codecvt_utf8_utf16}} for UTF-8/UTF-16 conversions.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|byte_string}} | {{tt|std::basic_string&lt;char, char_traits&lt;char&gt;, Byte_alloc&gt;}}}}
{{dsc | {{tt|wide_string}} | {{tt|std::basic_string&lt;Elem, char_traits&lt;Elem&gt;, Wide_alloc&gt;}}}}
{{dsc | {{tt|state_type}} | {{tt|Codecvt::state_type}}}}
{{dsc | {{tt|int_type}} | {{tt|wide_string::traits_type::int_type}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/locale/wstring_convert/dsc wstring_convert}}
{{dsc mem fun | nolink=true | operator{{=}} | the copy assignment operator is deleted }}
{{dsc inc | cpp/locale/wstring_convert/dsc ~wstring_convert}}
{{dsc inc | cpp/locale/wstring_convert/dsc from_bytes}}
{{dsc inc | cpp/locale/wstring_convert/dsc to_bytes}}
{{dsc inc | cpp/locale/wstring_convert/dsc converted}}
{{dsc inc | cpp/locale/wstring_convert/dsc state}}
{{dsc end}}

===See also===
{{cpp/locale/unicode string conversions}}
{{dsc begin}}
{{dsc inc | cpp/locale/dsc wbuffer_convert}}
{{dsc inc | cpp/locale/dsc codecvt_utf8}}
{{dsc inc | cpp/locale/dsc codecvt_utf8_utf16}}
{{dsc end}}

[[de:cpp/locale/wstring convert]]
[[es:cpp/locale/wstring convert]]
[[fr:cpp/locale/wstring convert]]
[[it:cpp/locale/wstring convert]]
[[ja:cpp/locale/wstring convert]]
[[pt:cpp/locale/wstring convert]]
[[ru:cpp/locale/wstring convert]]
[[zh:cpp/locale/wstring convert]]</text>
      <sha1>igtk9lrlxgkd2dh73m1b9ibibnla1mk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wstring convert/converted</title>
    <ns>0</ns>
    <id>5189</id>
    <revision>
      <id>91438</id>
      <parentid>64834</parentid>
      <timestamp>2017-03-31T19:44:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2001">{{cpp/wstring_convert/title|converted}}
{{cpp/locale/wstring_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
std::size_t converted() const;
}}
{{dcl end}}

Returns the number of source characters that were processed by the most recent {{lc|from_bytes()}} or {{lc|to_bytes()}}.

===Return value===
The number of characters consumed by the most recent conversion operation.

===Exceptions===
{{rev begin}}
{{rev | until=c++14 | (none)}}
{{rev | since=c++14 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;
int main()
{
    std::string utf8 =  u8&quot;z\u00df\u6c34\U0001d10b&quot;; // or u8&quot;zß水𝄋&quot;
                        // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;
    std::cout &lt;&lt; &quot;original UTF-8 string size: &quot; &lt;&lt; utf8.size() &lt;&lt; '\n';

    // the UTF-8 - UTF-32 standard conversion facet
    std::wstring_convert&lt;std::codecvt_utf8&lt;char32_t&gt;, char32_t&gt; cvt;

    // UTF-8 to UTF-32
    std::u32string utf32 = cvt.from_bytes(utf8);
    std::cout &lt;&lt; &quot;UTF-32 string size: &quot; &lt;&lt; utf32.size() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;converted() == &quot; &lt;&lt; cvt.converted() &lt;&lt; '\n';
    // UTF-32 to UTF-8
    utf8 = cvt.to_bytes(utf32);
    std::cout &lt;&lt; &quot;new UTF-8 string size: &quot; &lt;&lt; utf8.size() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;converted() == &quot; &lt;&lt; cvt.converted() &lt;&lt; '\n';
}
| output=
original UTF-8 string size: 10
UTF-32 string size: 4
converted() == 10
new UTF-8 string size: 10
converted() == 4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/wstring_convert/dsc to_bytes}}
{{dsc inc | cpp/locale/wstring_convert/dsc from_bytes}}
{{dsc end}}

[[de:cpp/locale/wstring convert/converted]]
[[es:cpp/locale/wstring convert/converted]]
[[fr:cpp/locale/wstring convert/converted]]
[[it:cpp/locale/wstring convert/converted]]
[[ja:cpp/locale/wstring convert/converted]]
[[pt:cpp/locale/wstring convert/converted]]
[[ru:cpp/locale/wstring convert/converted]]
[[zh:cpp/locale/wstring convert/converted]]</text>
      <sha1>hq8515ul4absd43byg7gtup3bcilit2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wstring convert/from bytes</title>
    <ns>0</ns>
    <id>5182</id>
    <revision>
      <id>85966</id>
      <parentid>85525</parentid>
      <timestamp>2016-06-08T02:28:08Z</timestamp>
      <contributor>
        <ip>99.198.224.159</ip>
      </contributor>
      <comment>Changed &quot;code points&quot; to &quot;code units&quot; in the example because size() and length() do not return code points.</comment>
      <text xml:space="preserve" bytes="3269">{{cpp/wstring_convert/title|from_bytes}}
{{cpp/locale/wstring_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
wide_string from_bytes( char byte );
}}
{{dcl | num=2 | 1=
wide_string from_bytes( const char* ptr );
}}
{{dcl | num=3 | 1=
wide_string from_bytes( const byte_string&amp; str );
}}
{{dcl | num=4 | 1=
wide_string from_bytes( const char* first, const char* last);
}}
{{dcl end}}

Performs multibyte to wide conversion, using the codecvt facet supplied at construction.

1) Converts {{tt|byte}} as if it was a string of length {{c|1}} to wide_string

2) Converts the null-terminated multibyte character sequence beginning at the character pointed to by {{tt|ptr}} to wide_string

3) Converts the narrow string {{tt|str}} to wide_string.

4) Converts the narrow multibyte character sequence {{tt|[first, last)}} to wide_string

In all cases, the conversion begins in initial shift state, unless non-initial starting state was provided to this {{tt|wstring_convert}} constructor. The number of characters converted and the final value of the conversion state are remembered and can be accessed with {{lc|state()}} and {{lc|converted()}}

===Return value===
A {{tt|wide_string}} object containing the results of multibyte to wide conversion. If the conversion failed and there was a user-supplied wide-error string provided to the constructor of this {{tt|wstring_convert}}, returns that wide-error string.

===Exceptions===
If this {{tt|wstring_convert}} object was constructed without a user-supplied wide-error string, throws {{lc|std::range_error}} on conversion failure.

===Example===

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;

int main()
{
    std::string utf8 =  u8&quot;z\u00df\u6c34\U0001d10b&quot;; // or u8&quot;zß水𝄋&quot;
                        // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;

    // the UTF-8 / UTF-16 standard conversion facet
    std::u16string utf16 = std::wstring_convert&lt;std::codecvt_utf8_utf16&lt;char16_t&gt;, char16_t&gt;{}.from_bytes(utf8.data());
    std::cout &lt;&lt; &quot;UTF16 conversion produced &quot; &lt;&lt; utf16.size() &lt;&lt; &quot; code units:\n&quot;;
    for (char16_t c : utf16)
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';

    // the UTF-8 / UTF-32 standard conversion facet
    std::u32string utf32 = std::wstring_convert&lt;std::codecvt_utf8&lt;char32_t&gt;, char32_t&gt;{}.from_bytes(utf8);
    std::cout &lt;&lt; &quot;UTF32 conversion produced &quot; &lt;&lt; std::dec &lt;&lt; utf32.size() &lt;&lt; &quot; code units:\n&quot;;
    for (char32_t c : utf32)
        std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; c &lt;&lt; '\n';
}
 | output=
UTF16 conversion produced 5 code units:
0x7a
0xdf
0x6c34
0xd834
0xdd0b
UTF32 conversion produced 4 code units:
0x7a
0xdf
0x6c34
0x1d10b
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/wstring_convert/dsc to_bytes}}
{{dsc inc | cpp/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc end}}

[[de:cpp/locale/wstring convert/from bytes]]
[[es:cpp/locale/wstring convert/from bytes]]
[[fr:cpp/locale/wstring convert/from bytes]]
[[it:cpp/locale/wstring convert/from bytes]]
[[ja:cpp/locale/wstring convert/from bytes]]
[[pt:cpp/locale/wstring convert/from bytes]]
[[ru:cpp/locale/wstring convert/from bytes]]
[[zh:cpp/locale/wstring convert/from bytes]]</text>
      <sha1>fb5c71ci4pawuapm8rdhzmbqn7wt407</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wstring convert/state</title>
    <ns>0</ns>
    <id>5190</id>
    <revision>
      <id>58247</id>
      <parentid>50086</parentid>
      <timestamp>2013-06-01T06:11:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1000">{{cpp/wstring_convert/title|state}}
{{cpp/locale/wstring_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | 1=
state_type state() const;
}}
{{dcl end}}

Returns the current value of the conversion state, which is stored in this {{tt|wstring_convert}} object. The conversion state may be explicitly set in the constructor and is updated by all conversion operations.

===Return value===
The current conversion state.

===Example===

{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/wstring_convert/dsc to_bytes}}
{{dsc inc | cpp/locale/wstring_convert/dsc from_bytes}}
{{dsc inc | cpp/string/multibyte/dsc mbsinit}}
{{dsc end}}

[[de:cpp/locale/wstring convert/state]]
[[es:cpp/locale/wstring convert/state]]
[[fr:cpp/locale/wstring convert/state]]
[[it:cpp/locale/wstring convert/state]]
[[ja:cpp/locale/wstring convert/state]]
[[pt:cpp/locale/wstring convert/state]]
[[ru:cpp/locale/wstring convert/state]]
[[zh:cpp/locale/wstring convert/state]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wstring convert/to bytes</title>
    <ns>0</ns>
    <id>5183</id>
    <revision>
      <id>85965</id>
      <parentid>64250</parentid>
      <timestamp>2016-06-07T18:04:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>\U0001f34c displays in more fonts</comment>
      <text xml:space="preserve" bytes="3310">{{cpp/wstring_convert/title|to_bytes}}
{{cpp/locale/wstring_convert/navbar}}
{{dcl begin}}
{{dcl header | locale}}
{{dcl | num=1 | 1=
byte_string to_bytes( Elem wchar );
}}
{{dcl | num=2 | 1=
byte_string to_bytes( const Elem* wptr );
}}
{{dcl | num=3 | 1=
byte_string to_bytes( const wide_string&amp; wstr );
}}
{{dcl | num=4 | 1=
byte_string to_bytes( const Elem* first, const Elem* last);
}}
{{dcl end}}

Performs wide to multibyte conversion, using the {{tt|codecvt}} facet supplied at construction.

@1@ Converts {{tt|wchar}} as if it was a string of length {{c|1}}, to {{tt|byte_string}}.

@2@ Converts the null-terminated wide character sequence beginning at the wide character pointed to by {{tt|wptr}}, to {{tt|byte_string}}.

@3@ Converts the wide string {{tt|str}} to {{tt|byte_string}}.

@4@ Converts the wide character sequence {{tt|[first, last)}} to {{tt|byte_string}}.

In all cases, the conversion begins in initial shift state, unless non-initial starting state was provided to this {{tt|wstring_convert}} constructor. The number of characters converted and the final value of the conversion state are remembered and can be accessed with {{lc|state()}} and {{lc|converted()}}

===Return value===
A {{tt|byte_string}} object containing the results of the wide to multibyte conversion. If the conversion failed and there was a user-supplied byte-error string provided to the constructor of this {{tt|wstring_convert}}, returns that byte-error string.

===Exceptions===
If this {{tt|wstring_convert}} object was constructed without a user-supplied byte-error string, throws {{lc|std::range_error}} on conversion failure.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;locale&gt;
#include &lt;codecvt&gt;
#include &lt;iomanip&gt;

// utility function for output
void hex_print(const std::string&amp; s)
{
    std::cout &lt;&lt; std::hex &lt;&lt; std::setfill('0');
    for(unsigned char c : s)
        std::cout &lt;&lt; std::setw(2) &lt;&lt; static_cast&lt;int&gt;(c) &lt;&lt; ' ';
    std::cout &lt;&lt; std::dec &lt;&lt; '\n';
}

int main()
{
    // wide character data
    std::wstring wstr =  L&quot;z\u00df\u6c34\U0001f34c&quot;; // or L&quot;zß水🍌&quot;

    // wide to UTF-8
    std::wstring_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; conv1;
    std::string u8str = conv1.to_bytes(wstr);
    std::cout &lt;&lt; &quot;UTF-8 conversion produced &quot; &lt;&lt; u8str.size() &lt;&lt; &quot; bytes:\n&quot;;
    hex_print(u8str);

    // wide to UTF-16le
    std::wstring_convert&lt;std::codecvt_utf16&lt;wchar_t, 0x10ffff, std::little_endian&gt;&gt; conv2;
    std::string u16str = conv2.to_bytes(wstr);
    std::cout &lt;&lt; &quot;UTF-16le conversion produced &quot; &lt;&lt; u16str.size() &lt;&lt; &quot; bytes:\n&quot;;
    hex_print(u16str);
}
 | output=
UTF-8 conversion produced 10 bytes:
7a c3 9f e6 b0 b4 f0 9f 8d 8c 
UTF-16le conversion produced 10 bytes:
7a 00 df 00 34 6c 3c d8 4c df
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/wstring_convert/dsc from_bytes}}
{{dsc inc | cpp/string/multibyte/dsc wcsrtombs}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc end}}

[[de:cpp/locale/wstring convert/to bytes]]
[[es:cpp/locale/wstring convert/to bytes]]
[[fr:cpp/locale/wstring convert/to bytes]]
[[it:cpp/locale/wstring convert/to bytes]]
[[ja:cpp/locale/wstring convert/to bytes]]
[[pt:cpp/locale/wstring convert/to bytes]]
[[ru:cpp/locale/wstring convert/to bytes]]
[[zh:cpp/locale/wstring convert/to bytes]]</text>
      <sha1>r63tfoh0f5x7rfvq7v9l7jl8cuznpm5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wstring convert/wstring convert</title>
    <ns>0</ns>
    <id>4574</id>
    <revision>
      <id>69306</id>
      <parentid>68746</parentid>
      <timestamp>2014-04-02T17:30:51Z</timestamp>
      <contributor>
        <ip>146.122.40.175</ip>
      </contributor>
      <comment>simplify deletable_facet constructors</comment>
      <text xml:space="preserve" bytes="2650">{{cpp/wstring_convert/title|wstring_convert}}
{{cpp/locale/wstring_convert/navbar}}
{{dcl begin}}
{{dcl | num=1 |1=
explicit wstring_convert( Codecvt* pcvt = new Codecvt );
}}
{{dcl | num=2 |1=
wstring_convert( Codecvt* pcvt, state_type state);
}}
{{dcl | num=3 |1=
explicit wstring_convert( const byte_string&amp; byte_err,
                          const wide_string&amp; wide_err = wide_string() );
}}
{{dcl | num=4 | since=c++14 | 1=
wstring_convert(const std::wstring_convert&amp;) = delete;
}}
{{dcl end}}

@1@ Constructs the {{tt|wstring_convert}} object with a specified conversion facet, using default-constructed values for the shift state and the error strings 
@2@ Constructs the {{tt|wstring_convert}} object with a specified conversion facet and specified shift state, using default-constructed values for the error strings 
@3@ Constructs the {{tt|wstring_convert}} object with specified error strings, using {{c|new Codecvt}} as the conversion facet and the default-constructed {{tt|state_type}} as shift state.
@4@ The copy constructor is deleted, wstring_convert is not {{concept|CopyConstructible}}

===Parameters===
{{par begin}}
{{par | pcvt | pointer to the conversion facet of type {{tt|Codecvt}} (behavior is undefined if this pointer is null)}}
{{par | state | initial value of the conversion shift state}}
{{par | byte_err | narrow string to display on errors}}
{{par | wide_err | wide string to display on errors}}
{{par end}}

===Example===
{{example
 | code=
#include &lt;locale&gt;
#include &lt;utility&gt;
#include &lt;codecvt&gt;

// utility wrapper to adapt locale-bound facets for wstring/wbuffer convert
template&lt;class Facet&gt;
struct deletable_facet : Facet
{
    using Facet::Facet; // inherit constructors
    ~deletable_facet() {}
};

int main()
{
    // UTF-16le / UCS4 conversion
    std::wstring_convert&lt;
         std::codecvt_utf16&lt;char32_t, 0x10ffff, std::little_endian&gt;
    &gt; u16to32;

    // UTF-8 / wide string conversion with custom messages
    std::wstring_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; u8towide(&quot;Error!&quot;, L&quot;Error!&quot;);

    // GB18030 / wide string conversion facet
    typedef deletable_facet&lt;std::codecvt_byname&lt;wchar_t, char, std::mbstate_t&gt;&gt; F;
    std::wstring_convert&lt;F&gt; gbtowide(new F(&quot;zh_CN.gb18030&quot;));
}
 | output=
}}

[[de:cpp/locale/wstring convert/wstring convert]]
[[es:cpp/locale/wstring convert/wstring convert]]
[[fr:cpp/locale/wstring convert/wstring convert]]
[[it:cpp/locale/wstring convert/wstring convert]]
[[ja:cpp/locale/wstring convert/wstring convert]]
[[pt:cpp/locale/wstring convert/wstring convert]]
[[ru:cpp/locale/wstring convert/wstring convert]]
[[zh:cpp/locale/wstring convert/wstring convert]]</text>
      <sha1>fnw18mn4ahg1kg7w9ztklrjhulqu989</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/locale/wstring convert/~wstring convert</title>
    <ns>0</ns>
    <id>4575</id>
    <revision>
      <id>50089</id>
      <parentid>43010</parentid>
      <timestamp>2013-06-01T03:12:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1976">{{cpp/wstring_convert/title|~wstring_convert}}
{{cpp/locale/wstring_convert/navbar}}
{{dcl begin}}
{{dcl |1=
~wstring_convert();
}}
{{dcl end}}

Destroys the {{tt|wstring_convert}} object and deletes the pointer to the conversion facet.

===Notes===
Some implementations are able to delete any facet, including the locale-specific facets with protected destructors. Other implementations require the facet to have a public destructor, similar to the the locale-independent facets from {{tt|&lt;codecvt&gt;}}. This is [http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#721 LWG issue 721]

===Example===
{{example
 | code=
#include &lt;locale&gt;
#include &lt;utility&gt;
#include &lt;codecvt&gt;

// utility wrapper to adapt locale-bound facets for wstring/wbuffer convert
template&lt;class Facet&gt;
struct deletable_facet : Facet
{
    template&lt;class ...Args&gt;
    deletable_facet(Args&amp;&amp; ...args) : Facet(std::forward&lt;Args&gt;(args)...) {}
    ~deletable_facet() {}
};

int main()
{
    // GB18030 / UCS4 conversion, using locale-based facet directly
    // typedef std::codecvt_byname&lt;char32_t, char, std::mbstate_t&gt; gbfacet_t;
    // Compiler error: &quot;calling a protected destructor of codecvt_byname&lt;&gt; in ~wstring_convert&quot;
    // std::wstring_convert&lt;gbfacet_t&gt; gbto32(new gbfacet_t(&quot;zh_CN.gb18030&quot;));

    // GB18030 / UCS4 conversion facet using a facet with public destructor
    typedef deletable_facet&lt;std::codecvt_byname&lt;char32_t, char, std::mbstate_t&gt;&gt; gbfacet_t;
    std::wstring_convert&lt;gbfacet_t&gt; gbto32(new gbfacet_t(&quot;zh_CN.gb18030&quot;));
} // destructor called here
 | output=
}}

[[de:cpp/locale/wstring convert/~wstring convert]]
[[es:cpp/locale/wstring convert/~wstring convert]]
[[fr:cpp/locale/wstring convert/~wstring convert]]
[[it:cpp/locale/wstring convert/~wstring convert]]
[[ja:cpp/locale/wstring convert/~wstring convert]]
[[pt:cpp/locale/wstring convert/~wstring convert]]
[[ru:cpp/locale/wstring convert/~wstring convert]]
[[zh:cpp/locale/wstring convert/~wstring convert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory</title>
    <ns>0</ns>
    <id>719</id>
    <revision>
      <id>86796</id>
      <parentid>86790</parentid>
      <timestamp>2016-07-12T23:28:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Uninitialized storage */ +</comment>
      <text xml:space="preserve" bytes="3928">{{title|Dynamic memory management}}
{{cpp/memory/navbar}}

===Smart pointers===

Smart pointers enable automatic, exception-safe, object lifetime management.

{{dsc begin}}
{{dsc header | memory}}
{{dsc h2 | Pointer categories}}
{{dsc inc | cpp/memory/dsc unique_ptr}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc inc | cpp/memory/dsc weak_ptr}}
{{dsc inc | cpp/memory/dsc auto_ptr}}
{{dsc h2 | Helper classes}}
{{dsc inc | cpp/memory/dsc owner_less}}
{{dsc inc | cpp/memory/dsc enable_shared_from_this}}
{{dsc inc | cpp/memory/dsc bad_weak_ptr}}
{{dsc inc | cpp/memory/dsc default_delete}}
{{dsc end}}

===Allocators===

Allocators are class templates encapsulating memory allocation strategy. This allows generic containers to decouple memory management from the data itself.

{{dsc begin}}
{{dsc header | memory}}
{{dsc inc | cpp/memory/dsc allocator}}
{{dsc inc | cpp/memory/dsc allocator_traits}}
{{dsc inc | cpp/memory/dsc allocator_arg_t}}
{{dsc inc | cpp/memory/dsc allocator_arg}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc header | scoped_allocator}}
{{dsc inc | cpp/memory/dsc scoped_allocator_adaptor}}
{{dsc header | memory_resource}}
{{dsc namespace|pmr}}
{{dsc inc | cpp/memory/dsc polymorphic_allocator}}
{{dsc end}}

===Memory resources===
Memory resources implement memory allocation strategies that can be used by {{lc|std::pmr::polymorphic_allocator}}

{{dsc begin}}
{{dsc header | memory_resource}}
{{dsc namespace|pmr}}
{{dsc inc | cpp/memory/dsc memory_resource }}
{{dsc inc | cpp/memory/dsc new_delete_resource}}
{{dsc inc | cpp/memory/dsc null_memory_resource}}
{{dsc inc | cpp/memory/dsc get_default_resource}}
{{dsc inc | cpp/memory/dsc set_default_resource}}
{{dsc inc | cpp/memory/dsc pool_options}}
{{dsc inc | cpp/memory/dsc synchronized_pool_resource}}
{{dsc inc | cpp/memory/dsc unsynchronized_pool_resource}}
{{dsc inc | cpp/memory/dsc monotonic_buffer_resource }}
{{dsc end}}
===Uninitialized storage===

Several utilities are provided to create and access raw storage

{{dsc begin}}
{{dsc header | memory}}
{{dsc inc | cpp/memory/dsc uninitialized_copy}}
{{dsc inc | cpp/memory/dsc uninitialized_copy_n}}
{{dsc inc | cpp/memory/dsc uninitialized_fill}}
{{dsc inc | cpp/memory/dsc uninitialized_fill_n}}
{{dsc inc | cpp/memory/dsc uninitialized_move}}
{{dsc inc | cpp/memory/dsc uninitialized_move_n}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct_n}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct_n}}
{{dsc inc | cpp/memory/dsc destroy_at}}
{{dsc inc | cpp/memory/dsc destroy}}
{{dsc inc | cpp/memory/dsc destroy_n}}
{{dsc inc | cpp/memory/dsc raw_storage_iterator}}
{{dsc inc | cpp/memory/dsc get_temporary_buffer}}
{{dsc inc | cpp/memory/dsc return_temporary_buffer}}
{{dsc end}}

===Garbage collector support===

{{dsc begin}}
{{dsc header | memory}}
{{dsc inc | cpp/memory/gc/dsc declare_reachable}}
{{dsc inc | cpp/memory/gc/dsc undeclare_reachable}}
{{dsc inc | cpp/memory/gc/dsc declare_no_pointers}}
{{dsc inc | cpp/memory/gc/dsc undeclare_no_pointers}}
{{dsc inc | cpp/memory/gc/dsc pointer_safety}}
{{dsc inc | cpp/memory/gc/dsc get_pointer_safety}}
{{dsc end}}

===Miscellaneous===

{{dsc begin}}
{{dsc header | memory}}
{{dsc inc | cpp/memory/dsc pointer_traits}}
{{dsc inc | cpp/memory/dsc addressof}}
{{dsc inc | cpp/memory/dsc align}}
{{dsc end}}

===[[cpp/memory/c|C-style memory management]]===

Includes e.g. {{lc|std::malloc}}, {{lc|std::free}}

===[[cpp/memory/new | Low level memory management]]===

Includes e.g. [[cpp/memory/new/operator_new|{{tt|operator new}} ]], [[cpp/memory/new/operator_delete| {{tt|operator delete}} ]], {{lc|std::set_new_handler}}

[[de:cpp/memory]]
[[es:cpp/memory]]
[[fr:cpp/memory]]
[[it:cpp/memory]]
[[ja:cpp/memory]]
[[ko:cpp/memory]]
[[pt:cpp/memory]]
[[ru:cpp/memory]]
[[zh:cpp/memory]]</text>
      <sha1>dhmifgl80ypbvvjinjwh5i3e9jizbwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/addressof</title>
    <ns>0</ns>
    <id>3381</id>
    <revision>
      <id>91358</id>
      <parentid>89063</parentid>
      <timestamp>2017-03-31T19:41:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2681">{{cpp/title|addressof}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl rev begin | num = 1}}
{{dcl | since=c++11|until=c++17 |1=
template&lt; class T &gt;
T* addressof(T&amp; arg);
}}
{{dcl | since=c++17 |1=
template&lt; class T &gt;
constexpr T* addressof(T&amp; arg);
}}
{{dcl rev end}}
{{dcl | since=c++17 | num = 2 | 1=
template &lt;class T&gt;
const T* addressof(const T&amp;&amp;) = delete;
}}
{{dcl end}}

@1@ Obtains the actual address of the object or function {{tt|arg}}, even in presence of overloaded {{tt|operator&amp;}}
@2@ Rvalue overload is deleted to prevent taking the address of {{c|const}} rvalues.

{{rev begin}}
{{rev|since=c++17|
The expression {{tt|std::addressof(E)}} is a [[cpp/language/constant_expression|constant subexpression]], if {{tt|E}} is an lvalue constant subexpression.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | arg | lvalue object or function}}
{{par end}}

===Return value===
Pointer to {{tt|arg}}.

===Exceptions===
@1@ {{unreviewed noexcept}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
T* addressof(T&amp; arg) 
{
    return reinterpret_cast&lt;T*&gt;(
               &amp;const_cast&lt;char&amp;&gt;(
                  reinterpret_cast&lt;const volatile char&amp;&gt;(arg)));
}
}}
Note: the above implementation [http://stackoverflow.com/a/6495205/273767 is oversimplified] and is not {{tt|constexpr}} (which requires compiler support).

===Example===
{{example
 | operator&amp; may be overloaded for a pointer wrapper class to obtain a pointer to pointer:
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

template&lt;class T&gt;
struct Ptr {
    T* pad; // add pad to show difference between 'this' and 'data'
    T* data;
    Ptr(T* arg) : pad(nullptr), data(arg) 
    {
        std::cout &lt;&lt; &quot;Ctor this = &quot; &lt;&lt; this &lt;&lt; std::endl;
    }

    ~Ptr() { delete data; }
    T** operator&amp;() { return &amp;data; }
};

template&lt;class T&gt;
void f(Ptr&lt;T&gt;* p) 
{
    std::cout &lt;&lt; &quot;Ptr   overload called with p = &quot; &lt;&lt; p &lt;&lt; '\n';
}

void f(int** p) 
{
    std::cout &lt;&lt; &quot;int** overload called with p = &quot; &lt;&lt; p &lt;&lt; '\n';
}

int main() 
{
    Ptr&lt;int&gt; p(new int(42));
    f(&amp;p);                 // calls int** overload
    f(std::addressof(p));  // calls Ptr&lt;int&gt;* overload, (= this)
}
 | output=
Ctor this = 0x7fff59ae6e88
int** overload called with p = 0x7fff59ae6e90
Ptr   overload called with p = 0x7fff59ae6e88
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator}}
{{dsc inc | cpp/memory/pointer_traits/dsc pointer_to}}
{{dsc end}}

[[de:cpp/memory/addressof]]
[[es:cpp/memory/addressof]]
[[fr:cpp/memory/addressof]]
[[it:cpp/memory/addressof]]
[[ja:cpp/memory/addressof]]
[[pt:cpp/memory/addressof]]
[[ru:cpp/memory/addressof]]
[[zh:cpp/memory/addressof]]</text>
      <sha1>ch7y4g86rgttg95xei0fii5ei8m26go</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/align</title>
    <ns>0</ns>
    <id>3437</id>
    <revision>
      <id>81685</id>
      <parentid>81684</parentid>
      <timestamp>2015-11-03T22:07:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 81684 by [[Special:Contributions/159.153.138.99|159.153.138.99]] ([[User talk:159.153.138.99|talk]])  32 refers to bytes in this example</comment>
      <text xml:space="preserve" bytes="2956">{{cpp/title|align}}
{{cpp/memory/navbar}}
{{ddcl | since=c++11 | header=memory | 
void* align( std::size_t alignment,
             std::size_t size,
             void*&amp; ptr,
             std::size_t&amp; space );
}}

Given a pointer {{tt|ptr}} to a buffer of size {{tt|space}}, returns a pointer aligned by the specified {{tt|alignment}} for {{tt|size}} number of bytes and decreases {{tt|space}} argument by the number of bytes used for alignment. The first aligned address is returned.

The function modifies the pointer only if it would be possible to fit the wanted number of bytes aligned by the given alignment into the buffer. If the buffer is too small, the function does nothing and returns {{c|nullptr}}.

The behavior is undefined if {{spar|alignment}} is not a {{rev inl|until=c++17|fundamental or extended alignment value supported by the implementation}}{{rev inl|since=c++17|power of two}}.

===Parameters===
{{par begin}}
{{par | alignment | the desired alignment }}
{{par | size | the size of the storage to be aligned}}
{{par | ptr | pointer to contiguous storage of at least {{tt|space}} bytes}}
{{par | space | the size of the buffer in which to operate}}
{{par end}}

===Return value===
The adjusted value of {{tt|ptr}}, or null pointer value if the space provided is too small.

===Example===
{{example | demonstrates the use of std::align to place objects of different type in memory
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

template &lt;std::size_t N&gt;
struct MyAllocator
{
    char data[N];
    void* p;
    std::size_t sz;
    MyAllocator() : p(data), sz(N) {}
    template &lt;typename T&gt;
    T* aligned_alloc(std::size_t a = alignof(T))
    {
        if (std::align(a, sizeof(T), p, sz))
        {
            T* result = reinterpret_cast&lt;T*&gt;(p);
            p = (char*)p + sizeof(T);
            sz -= sizeof(T);
            return result;
        }
        return nullptr;
    }
};

int main()
{
    MyAllocator&lt;64&gt; a;

    // allocate a char
    char* p1 = a.aligned_alloc&lt;char&gt;();
    if (p1)
        *p1 = 'a';
    std::cout &lt;&lt; &quot;allocated a char at &quot; &lt;&lt; (void*)p1 &lt;&lt; '\n';

    // allocate an int
    int* p2 = a.aligned_alloc&lt;int&gt;();
    if (p2)
        *p2 = 1;
    std::cout &lt;&lt; &quot;allocated an int at &quot; &lt;&lt; (void*)p2 &lt;&lt; '\n';

    // allocate an int, aligned at 32-byte boundary
    int* p3 = a.aligned_alloc&lt;int&gt;(32);
    if (p3)
        *p3 = 2;
    std::cout &lt;&lt; &quot;allocated an int at &quot; &lt;&lt; (void*)p3 &lt;&lt; &quot; (32 byte alignment)\n&quot;;
}
 | p = true
 | output=
allocated a char at 0x2ff21a08
allocated an int at 0x2ff21a0c
allocated an int at 0x2ff21a20 (32 byte alignment)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc alignof}}
{{dsc inc | cpp/language/dsc alignas}}
{{dsc inc | cpp/types/dsc aligned_storage}}
{{dsc end}}

[[de:cpp/memory/align]]
[[es:cpp/memory/align]]
[[fr:cpp/memory/align]]
[[it:cpp/memory/align]]
[[ja:cpp/memory/align]]
[[pt:cpp/memory/align]]
[[ru:cpp/memory/align]]
[[zh:cpp/memory/align]]</text>
      <sha1>7uhcq3sebjlizmhuzd071h1dvzva9dk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator</title>
    <ns>0</ns>
    <id>3383</id>
    <revision>
      <id>86263</id>
      <parentid>79654</parentid>
      <timestamp>2016-06-27T08:20:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>{{mark|deprecated in C++17}}</comment>
      <text xml:space="preserve" bytes="4609">{{cpp/title|allocator}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl header| memory}}
{{dcl | num=1 |1=
template&lt; class T &gt;
struct allocator;
}}
{{dcl | num=2 | notes={{mark|deprecated in C++17}} |1=
template&lt;&gt;
struct allocator&lt;void&gt;;
}}
{{dcl end}}

The {{tt|std::allocator}} class template is the default {{concept|Allocator}} used by all standard library containers if no user-specified allocator is provided. The default allocator is stateless, that is, all instances of the given allocator are interchangeable, compare equal and can deallocate memory allocated by any other instance of the same allocator type.

Specialization for {{c|void}} lacks the member typedefs {{tt|reference}}, {{tt|const_reference}}, {{tt|size_type}} and {{tt|difference_type}}. This specialization declares no member functions.

{{rev begin}}
{{rev | until=c++11 | All custom allocators also must be stateless. }}
{{rev | since=c++11 | Custom allocators may contain state. Each container or another allocator-aware object stores an instance of the supplied allocator and controls allocator replacement through {{lc|std::allocator_traits}}. }}
{{rev | since=c++17 |
The default allocator satisfies [[cpp/concept/Allocator#Allocator_completeness_requirements|allocator completeness requirements]]. }}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|value_type}} | {{c|T}} }}
{{dsc | {{tt|pointer}} {{mark|deprecated in C++17}} | {{c|T*}}}}
{{dsc | {{tt|const_pointer}} {{mark|deprecated in C++17}} | {{c|const T*}} }}
{{dsc | {{tt|reference}} {{mark|deprecated in C++17}} | {{c|T&amp;}} }}
{{dsc | {{tt|const_reference}} {{mark|deprecated in C++17}} | {{c|const T&amp;}} }}
{{dsc | {{tt|size_type}} {{mark|deprecated in C++17}} | {{lc|std::size_t}} }}
{{dsc | {{tt|difference_type}} {{mark|deprecated in C++17}} | {{lc|std::ptrdiff_t}} }}
{{dsc | {{tt|propagate_on_container_move_assignment}}{{mark c++14}} | {{c|std::true_type}} }}
{{dsc | {{tt|rebind}} {{mark|deprecated in C++17}} | {{c|template&lt; class U &gt; struct rebind { typedef allocator&lt;U&gt; other; };}} }}
{{dsc | {{tt|is_always_equal}}{{mark c++17}} | {{c|std::true_type}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc allocator}}
{{dsc inc | cpp/memory/allocator/dsc ~allocator}}
{{dsc inc | cpp/memory/allocator/dsc address}}
{{dsc inc | cpp/memory/allocator/dsc allocate}}
{{dsc inc | cpp/memory/allocator/dsc deallocate}}
{{dsc inc | cpp/memory/allocator/dsc max_size}}
{{dsc inc | cpp/memory/allocator/dsc construct}}
{{dsc inc | cpp/memory/allocator/dsc destroy}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc operator_cmp}}
{{dsc end}}

===Notes===
The member template class {{tt|rebind}} provides a way to obtain an allocator for a different type. For example,

{{rev begin}}
{{rev | until=c++11 | {{tt|std::list&lt;T, A&gt;}} allocates nodes of some internal type {{tt|Node&lt;T&gt;}}, using the allocator {{c|A::rebind&lt;Node&lt;T&gt;&gt;::other}} 
}}
{{rev | since=c++11 | {{tt|std::list&lt;T, A&gt;}} allocates nodes of some internal type {{tt|Node&lt;T&gt;}}, using the allocator {{c|std::allocator_traits&lt;A&gt;::rebind_alloc&lt;Node&lt;T&gt;&gt;}}, which is implemented in terms of {{c|A::rebind&lt;Node&lt;T&gt;&gt;::other}} if A is an {{tt|std::allocator}} 
}}
{{rev end}}

===Example===
{{example | 
| code=
#include &lt;memory&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::allocator&lt;int&gt; a1; // default allocator for ints
    int* a = a1.allocate(10); // space for 10 ints

    a[9] = 7;

    std::cout &lt;&lt; a[9] &lt;&lt; '\n';

    a1.deallocate(a, 10);

    // default allocator for strings
    std::allocator&lt;std::string&gt; a2;

    // same, but obtained by rebinding from the type of a1
    decltype(a1)::rebind&lt;std::string&gt;::other a2_1;
    
    // same, but obtained by rebinding from the type of a1 via allocator_traits
    std::allocator_traits&lt;decltype(a1)&gt;::rebind_alloc&lt;std::string&gt; a2_2;
    
    std::string* s = a2.allocate(2); // space for 2 strings

    a2.construct(s, &quot;foo&quot;);
    a2.construct(s + 1, &quot;bar&quot;);

    std::cout &lt;&lt; s[0] &lt;&lt; ' ' &lt;&lt; s[1] &lt;&lt; '\n';

    a2.destroy(s);
    a2.destroy(s + 1);
    a2.deallocate(s, 2);
}   
| output=
7
foo bar
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator_traits}}
{{dsc inc | cpp/memory/dsc scoped_allocator_adaptor}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/memory/allocator]]
[[es:cpp/memory/allocator]]
[[fr:cpp/memory/allocator]]
[[it:cpp/memory/allocator]]
[[ja:cpp/memory/allocator]]
[[pt:cpp/memory/allocator]]
[[ru:cpp/memory/allocator]]
[[zh:cpp/memory/allocator]]</text>
      <sha1>32zpu1925porkinle2xg0e2qgszki1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator arg</title>
    <ns>0</ns>
    <id>3385</id>
    <revision>
      <id>90948</id>
      <parentid>62765</parentid>
      <timestamp>2017-03-14T12:53:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="995">{{cpp/title|allocator_arg}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl rev multi| since1=c++11 |dcl1=
constexpr std::allocator_arg_t allocator_arg = std::allocator_arg_t();
|since2=c++17 | dcl2=
inline constexpr std::allocator_arg_t allocator_arg = std::allocator_arg_t();
}}
{{dcl end}}

{{tt|std::allocator_arg}} is a constant of type {{lc|std::allocator_arg_t}} used to disambiguate, at call site, the overloads of the constructors and member functions of allocator-aware objects, such as {{lc|std::tuple}}, {{lc|std::function}}, {{lc|std::promise}}, and {{lc|std::packaged_task}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator_arg_t}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/memory/allocator arg]]
[[es:cpp/memory/allocator arg]]
[[fr:cpp/memory/allocator arg]]
[[it:cpp/memory/allocator arg]]
[[ja:cpp/memory/allocator arg]]
[[pt:cpp/memory/allocator arg]]
[[ru:cpp/memory/allocator arg]]
[[zh:cpp/memory/allocator arg]]</text>
      <sha1>eyt3lsp8i2g68hu8ys63kpx27ckgdbr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator arg t</title>
    <ns>0</ns>
    <id>3384</id>
    <revision>
      <id>88367</id>
      <parentid>62766</parentid>
      <timestamp>2016-11-17T05:21:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2510</comment>
      <text xml:space="preserve" bytes="920">{{cpp/title|allocator_arg_t}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++11 | until=c++17 |1=
struct allocator_arg_t {};
}}
{{dcl | since=c++17 |1=
struct allocator_arg_t { explicit allocator_arg_t() = default; };
}}
{{dcl end}}


{{tt|std::allocator_arg_t}} is an empty class type used to disambiguate the overloads of constructors and member functions of allocator-aware objects, including {{lc|std::tuple}}, {{lc|std::function}}, {{lc|std::promise}}, and {{lc|std::packaged_task}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator_arg}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/memory/allocator arg t]]
[[es:cpp/memory/allocator arg t]]
[[fr:cpp/memory/allocator arg t]]
[[it:cpp/memory/allocator arg t]]
[[ja:cpp/memory/allocator arg t]]
[[pt:cpp/memory/allocator arg t]]
[[ru:cpp/memory/allocator arg t]]
[[zh:cpp/memory/allocator arg t]]</text>
      <sha1>6oxjuevtgyyv50hkmaydorkrrzsvd31</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator traits</title>
    <ns>0</ns>
    <id>3380</id>
    <revision>
      <id>91192</id>
      <parentid>91189</parentid>
      <timestamp>2017-03-25T09:35:46Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 91189 by [[Special:Contributions/113.88.80.188|113.88.80.188]] ([[User talk:113.88.80.188|talk]])</comment>
      <text xml:space="preserve" bytes="3387">{{cpp/title|allocator_traits}}
{{cpp/memory/allocator_traits/navbar}}

{{ddcl | header=memory | since=c++11 | 
template&lt; class Alloc &gt;
struct allocator_traits;
}}

The {{tt|allocator_traits}} class template provides the standardized way to access various properties of {{concept|Allocator}}s. The standard containers and other standard library components access allocators through this template, which makes it possible to use any class type as an allocator, as long as the user-provided specialization of {{tt|allocator_traits}} implements all required functionality.

The default, non-specialized, {{tt|allocator_traits}} contains the following members:

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|allocator_type}} | {{c|Alloc}} }}
{{dsc | {{tt|value_type}} | {{c|Alloc::value_type}} }}
{{dsc | {{tt|pointer}} | {{c|Alloc::pointer}} if present, otherwise {{c|value_type*}} }}
{{dsc | {{tt|const_pointer}} | {{c|Alloc::const_pointer}} if present, otherwise {{c|std::pointer_traits&lt;pointer&gt;::rebind&lt;const value_type&gt;}} }}
{{dsc | {{tt|void_pointer}} | {{c|Alloc::void_pointer}} if present, otherwise {{c|std::pointer_traits&lt;pointer&gt;::rebind&lt;void&gt;}} }}
{{dsc | {{tt|const_void_pointer}} | {{c|Alloc::const_void_pointer}} if present, otherwise {{c|std::pointer_traits&lt;pointer&gt;::rebind&lt;const void&gt;}} }}
{{dsc | {{tt|difference_type}} | {{c|Alloc::difference_type}} if present, otherwise {{c|std::pointer_traits&lt;pointer&gt;::difference_type}} }}
{{dsc | {{tt|size_type}} | {{c|Alloc::size_type}} if present, otherwise {{c|std::make_unsigned&lt;difference_type&gt;::type}} }}
{{dsc | {{tt|propagate_on_container_copy_assignment}} | {{c|Alloc::propagate_on_container_copy_assignment}} if present, otherwise {{lc|std::false_type}} }}
{{dsc | {{tt|propagate_on_container_move_assignment}} | {{c|Alloc::propagate_on_container_move_assignment}} if present, otherwise {{lc|std::false_type}} }}
{{dsc | {{tt|propagate_on_container_swap}} | {{c|Alloc::propagate_on_container_swap}} if present, otherwise {{lc|std::false_type}} }}
{{dsc | {{tt|is_always_equal}}{{mark since c++17}} | {{c|Alloc::is_always_equal}} if present, otherwise {{c|std::is_empty&lt;Alloc&gt;::type}} }}
{{dsc end}}

===Member alias templates===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|rebind_alloc&lt;T&gt;}} | {{c|Alloc::rebind&lt;T&gt;::other}} if present, otherwise {{c|Alloc&lt;T, Args&gt;}} if this Alloc is {{c|Alloc&lt;U, Args&gt;}} }}
{{dsc | {{tt|rebind_traits&lt;T&gt;}} | {{c|std::allocator_traits&lt;rebind_alloc&lt;T&gt;&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc allocate}}
{{dsc inc | cpp/memory/allocator_traits/dsc deallocate}}
{{dsc inc | cpp/memory/allocator_traits/dsc construct}}
{{dsc inc | cpp/memory/allocator_traits/dsc destroy}}
{{dsc inc | cpp/memory/allocator_traits/dsc max_size}}
{{dsc inc | cpp/memory/allocator_traits/dsc select_on_container_copy_construction}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator}}
{{dsc inc | cpp/memory/dsc scoped_allocator_adaptor}}
{{dsc inc | cpp/memory/dsc pointer_traits}}
{{dsc end}}

[[de:cpp/memory/allocator traits]]
[[es:cpp/memory/allocator traits]]
[[fr:cpp/memory/allocator traits]]
[[it:cpp/memory/allocator traits]]
[[ja:cpp/memory/allocator traits]]
[[pt:cpp/memory/allocator traits]]
[[ru:cpp/memory/allocator traits]]
[[zh:cpp/memory/allocator traits]]</text>
      <sha1>jez7la6d2n5khsb2mg2yxs7obsmw7x5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator traits/allocate</title>
    <ns>0</ns>
    <id>5692</id>
    <revision>
      <id>62767</id>
      <parentid>62398</parentid>
      <timestamp>2013-07-01T23:39:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1373">{{cpp/memory/allocator_traits/title|allocate}}
{{cpp/memory/allocator_traits/navbar}}
{{dcl begin}}
{{dcl header|memory}}
{{dcl|num=1 | since=c++11 | 
static pointer allocate( Alloc&amp; a, size_type n );
}}
{{dcl|num=2 | since=c++11 | 
static pointer allocate( Alloc&amp; a, size_type n, const_void_pointer hint );
}}
{{dcl end}}

Uses the allocator {{tt|a}} to allocate {{c|n*sizeof(Alloc::value_type)}} bytes of uninitialized storage.

@1@ Calls {{c|a.allocate(n)}}

@2@ Additionally passes memory locality hint {{tt|hint}}. Calls {{c|a.allocate(n, hint)}} if possible. If not possible (e.g. a has no two-argument member function allocate()), calls {{c|a.allocate(n)}}

===Parameters===
{{par begin}}
{{par | a | allocator to use}}
{{par | n | the number of objects to allocate storage for }}
{{par | hint | pointer to a nearby memory location }}
{{par end}}

===Return value===
The pointer returned by the call to {{tt|a.allocate(n)}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc allocate}}
{{dsc end}}

[[de:cpp/memory/allocator traits/allocate]]
[[es:cpp/memory/allocator traits/allocate]]
[[fr:cpp/memory/allocator traits/allocate]]
[[it:cpp/memory/allocator traits/allocate]]
[[ja:cpp/memory/allocator traits/allocate]]
[[pt:cpp/memory/allocator traits/allocate]]
[[ru:cpp/memory/allocator traits/allocate]]
[[zh:cpp/memory/allocator traits/allocate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator traits/construct</title>
    <ns>0</ns>
    <id>5664</id>
    <revision>
      <id>63334</id>
      <parentid>58288</parentid>
      <timestamp>2013-07-10T01:28:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1605">{{cpp/memory/allocator_traits/title|construct}}
{{cpp/memory/allocator_traits/navbar}}
{{ddcl | header=memory | since=c++11 | 
template&lt; class T, class... Args &gt;
static void construct( Alloc&amp; a, T* p, Args&amp;&amp;... args );
}}

If possible, constructs an object of type {{tt|T}} in allocated uninitialized storage pointed to by {{tt|p}}, by calling

{{c|
a.construct(p, std::forward&lt;Args&gt;(args)...)
}}

If the above is not possible (e.g. {{tt|a}} does not have the member function {{tt|construct()}},), then calls placement-new as

{{c|
    ::new (static_cast&lt;void*&gt;(p)) T(std::forward&lt;Args&gt;(args)...)
}}

===Parameters===
{{par begin}}
{{par | a | allocator to use for construction}}
{{par | args... | the constructor arguments to pass to {{tt|a.construct()}} or to placement-new }}
{{par end}}

===Return value===
(none)

===Notes===
This function is used by the standard library containers when inserting, copying, or moving elements.

Because this function provides the automatic fall back to placement new, the member function {{tt|construct()}} is an optional {{concept|Allocator}} requirement since C++11.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/allocator/dsc construct}}
{{dsc end}}

[[de:cpp/memory/allocator traits/construct]]
[[es:cpp/memory/allocator traits/construct]]
[[fr:cpp/memory/allocator traits/construct]]
[[it:cpp/memory/allocator traits/construct]]
[[ja:cpp/memory/allocator traits/construct]]
[[pt:cpp/memory/allocator traits/construct]]
[[ru:cpp/memory/allocator traits/construct]]
[[zh:cpp/memory/allocator traits/construct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator traits/deallocate</title>
    <ns>0</ns>
    <id>5714</id>
    <revision>
      <id>62768</id>
      <parentid>58289</parentid>
      <timestamp>2013-07-01T23:39:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1080">{{cpp/memory/allocator_traits/title|deallocate}}
{{cpp/memory/allocator_traits/navbar}}
{{dcl begin}}
{{dcl header|memory}}
{{dcl| since=c++11 | 
static void deallocate( Alloc&amp; a, pointer p, size_type n );
}}
{{dcl end}}

Uses the allocator {{tt|a}} to deallocate the storage referenced by {{tt|p}}, by calling {{c|a.deallocate(p, n)}}


===Parameters===
{{par begin}}
{{par | a | allocator to use}}
{{par | p | pointer to the previously allocated storage }}
{{par | n | the number of objects the storage was allocated for }}
{{par end}}

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc allocate}}
{{dsc inc | cpp/memory/allocator/dsc deallocate}}
{{dsc end}}

[[de:cpp/memory/allocator traits/deallocate]]
[[es:cpp/memory/allocator traits/deallocate]]
[[fr:cpp/memory/allocator traits/deallocate]]
[[it:cpp/memory/allocator traits/deallocate]]
[[ja:cpp/memory/allocator traits/deallocate]]
[[pt:cpp/memory/allocator traits/deallocate]]
[[ru:cpp/memory/allocator traits/deallocate]]
[[zh:cpp/memory/allocator traits/deallocate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator traits/destroy</title>
    <ns>0</ns>
    <id>5689</id>
    <revision>
      <id>82588</id>
      <parentid>63335</parentid>
      <timestamp>2015-12-25T09:15:31Z</timestamp>
      <contributor>
        <ip>85.69.185.232</ip>
      </contributor>
      <comment>close parenthesis</comment>
      <text xml:space="preserve" bytes="1255">{{cpp/memory/allocator_traits/title|destroy}}
{{cpp/memory/allocator_traits/navbar}}
{{ddcl | header=memory | since=c++11 | 
template&lt; class T &gt;
static void destroy( Alloc&amp; a, T* p );
}}

Calls the destructor of the object pointed to by {{tt|p}}. If possible, does so by calling {{c|a.destroy(p)}}. If not possible (e.g. {{tt|a}} does not have the member function {{tt|destroy()}}), then calls the destructor of {{tt|*p}} directly, as {{c|p-&gt;~T()}}.

===Parameters===
{{par begin}}
{{par | a | allocator to use for destruction}}
{{par | p | pointer to the object being destroyed }}
{{par end}}

===Return value===
(none)

===Notes===
Because this function provides the automatic fall back to direct call to the destructor, the member function {{tt|destroy()}} is an optional {{concept|Allocator}} requirement since C++11.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc destroy}}
{{dsc end}}

[[de:cpp/memory/allocator traits/destroy]]
[[es:cpp/memory/allocator traits/destroy]]
[[fr:cpp/memory/allocator traits/destroy]]
[[it:cpp/memory/allocator traits/destroy]]
[[ja:cpp/memory/allocator traits/destroy]]
[[pt:cpp/memory/allocator traits/destroy]]
[[ru:cpp/memory/allocator traits/destroy]]
[[zh:cpp/memory/allocator traits/destroy]]</text>
      <sha1>at9tlyp7r77mm49eouxkb9uggyo1slu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator traits/max size</title>
    <ns>0</ns>
    <id>5718</id>
    <revision>
      <id>91545</id>
      <parentid>81600</parentid>
      <timestamp>2017-03-31T19:49:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1199">{{cpp/memory/allocator_traits/title|max_size}}
{{cpp/memory/allocator_traits/navbar}}
{{ddcl | header=memory | since=c++11 | 
static size_type max_size( const Alloc&amp; a );
}}

If possible, obtains the maximum theoretically possible allocation size from the allocator {{tt|a}}, by calling

{{c|
a.max_size()
}}

If the above is not possible (e.g. {{tt|a}} does not have the member function {{tt|max_size()}}), then returns {{rev inl|until=c++17| {{c|std::numeric_limits&lt;size_type&gt;::max()}}
}}{{rev inl |since=c++17|{{c|std::numeric_limits&lt;size_type&gt;::max() / sizeof(value_type)}}}}
===Parameters===
(none)

===Return value===
Theoretical maximum allocation size

===Exceptions===
{{unreviewed noexcept}} &lt;!-- added between C++11 and C++14 as defect #2162 --&gt;

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc max_size}}
{{dsc end}}

[[de:cpp/memory/allocator traits/max size]]
[[es:cpp/memory/allocator traits/max size]]
[[fr:cpp/memory/allocator traits/max size]]
[[it:cpp/memory/allocator traits/max size]]
[[ja:cpp/memory/allocator traits/max size]]
[[pt:cpp/memory/allocator traits/max size]]
[[ru:cpp/memory/allocator traits/max size]]
[[zh:cpp/memory/allocator traits/max size]]</text>
      <sha1>io6wqhprpbdyjekri4wyaycquu4i9p1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator traits/select on container copy construction</title>
    <ns>0</ns>
    <id>5734</id>
    <revision>
      <id>80271</id>
      <parentid>62769</parentid>
      <timestamp>2015-08-01T12:34:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1742">{{cpp/memory/allocator_traits/title|select_on_container_copy_construction}}
{{cpp/memory/allocator_traits/navbar}}
{{dcl begin}}
{{dcl header|memory}}
{{dcl | since=c++11 | 
static Alloc select_on_container_copy_construction( const Alloc&amp; a );
}}
{{dcl end}}

If possible, obtains the copy-constructed version of the allocator {{tt|a}}, by calling {{c|a.select_on_container_copy_construction() }}. If the above is not possible (e.g. {{tt|a}} does not have the member function {{tt|select_on_container_copy_construction()}}, then returns {{c|a}}, unmodified.

This function is called by the copy constructors of all standard library containers. It allows the allocator used by the constructor's argument to become aware that the container is being copied and modify state if necessary.

===Parameters===
{{par begin}}
{{par | a | allocator used by a standard container passed as an argument to a container copy constructor }}
{{par end}}


===Return value===
The allocator to use by the copy-constructed standard containers.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc select_on_container_copy_construction}}
{{dsc end}}

[[de:cpp/memory/allocator traits/select on container copy construction]]
[[es:cpp/memory/allocator traits/select on container copy construction]]
[[fr:cpp/memory/allocator traits/select on container copy construction]]
[[it:cpp/memory/allocator traits/select on container copy construction]]
[[ja:cpp/memory/allocator traits/select on container copy construction]]
[[pt:cpp/memory/allocator traits/select on container copy construction]]
[[ru:cpp/memory/allocator traits/select on container copy construction]]
[[zh:cpp/memory/allocator traits/select on container copy construction]]</text>
      <sha1>bsvniltoxdcvr2vngxg8v15kvgzbm67</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/address</title>
    <ns>0</ns>
    <id>8999</id>
    <revision>
      <id>91546</id>
      <parentid>86268</parentid>
      <timestamp>2017-03-31T19:49:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="937">{{cpp/memory/allocator/title|address}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl | notes= {{mark|deprecated since C++17}} | 1=
pointer address( reference x ) const;
}}
{{dcl | notes= {{mark|deprecated since C++17}} | 1=
const_pointer address( const_reference x ) const;
}}
{{dcl end}}

Returns the actual address of {{tt|x}} even in presence of overloaded {{c|operator&amp;}}.

===Parameters===
{{par begin}}
{{par | x | the object to acquire address of}}
{{par end}}

===Return value===
The actual address of {{tt|x}}.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/memory/allocator/address]]
[[es:cpp/memory/allocator/address]]
[[fr:cpp/memory/allocator/address]]
[[it:cpp/memory/allocator/address]]
[[ja:cpp/memory/allocator/address]]
[[pt:cpp/memory/allocator/address]]
[[ru:cpp/memory/allocator/address]]
[[zh:cpp/memory/allocator/address]]</text>
      <sha1>tu5a8i7q71irsbsxs7rkyayact4vozl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/allocate</title>
    <ns>0</ns>
    <id>5693</id>
    <revision>
      <id>90181</id>
      <parentid>86281</parentid>
      <timestamp>2017-02-08T23:03:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>MD5 is right, libc++ has a little hack to optimize away dynamic allocations made by allocators (since 2014 even).. I think it's worth mentioning - I can't be the only one to read &quot;the storage is obtained by calling ::operator new&quot; as a direct call reqmt</comment>
      <text xml:space="preserve" bytes="2013">{{cpp/memory/allocator/title|allocate}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl | num=1 | until=c++17 | 1=
pointer allocate( size_type n, std::allocator&lt;void&gt;::const_pointer hint = 0 );
}}
{{dcl | num=1 | since=c++17 | notes={{mark deprecated}} | 1=
T* allocate( std::size_t n, const void * hint);
}}
{{dcl | num=2 | since=c++17 | 1=
T* allocate( std::size_t n );
}}
{{dcl end}}

Allocates {{c|n * sizeof(T)}} bytes of uninitialized storage by calling {{c|::operator new(std::size_t)}}, but it is unspecified when and how this function is called. The pointer {{tt|hint}} may be used to provide locality of reference: the allocator, if supported by the implementation, will attempt to allocate the new memory block as close as possible to {{tt|hint}}.

===Parameters===
{{par begin}}
{{par | n | the number of objects to allocate storage for }}
{{par | hint | pointer to a nearby memory location }}
{{par end}}

===Return value===
Pointer to the first byte of a memory block suitably aligned and sufficient to hold an array of {{tt|n}} objects of type {{tt|T}}.

===Exceptions===
Throws {{lc|std::bad_alloc}} if allocation fails.

===Notes===
The &quot;unspecified when and how&quot; wording makes it possible to [[cpp/language/new#Allocation|combine or optimize away heap allocations]] made by the standard library containers, even though such optimizations are disallowed for direct calls to {{tt|::operator new}}. For example, this is implemented by libc++ ([https://github.com/llvm-mirror/libcxx/blob/master/include/memory#L1766-L1772] and [https://github.com/llvm-mirror/libcxx/blob/master/include/new#L211-L217])

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc allocate}}
{{dsc end}}

[[de:cpp/memory/allocator/allocate]]
[[es:cpp/memory/allocator/allocate]]
[[fr:cpp/memory/allocator/allocate]]
[[it:cpp/memory/allocator/allocate]]
[[ja:cpp/memory/allocator/allocate]]
[[pt:cpp/memory/allocator/allocate]]
[[ru:cpp/memory/allocator/allocate]]
[[zh:cpp/memory/allocator/allocate]]</text>
      <sha1>3t6yea4fr5g1vw31rl6v2xbem6cys5w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/allocator</title>
    <ns>0</ns>
    <id>8997</id>
    <revision>
      <id>91906</id>
      <parentid>73520</parentid>
      <timestamp>2017-03-31T20:01:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="918">{{cpp/memory/allocator/title|allocator}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl| num=1 | 1=
allocator();
}}
{{dcl| num=2 | 1=
allocator( const allocator&amp; other );
}}
{{dcl| num=3 | 1=
template&lt; class U &gt; 
allocator( const allocator&lt;U&gt;&amp; other );
}}
{{dcl end}}

Constructs the default allocator. Since the default allocator is stateless, the constructors have no visible effect.

===Parameters===
{{par begin}}
{{par | other | another allocator to construct with}}
{{par end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}} }}
{{rev end}}

[[de:cpp/memory/allocator/allocator]]
[[es:cpp/memory/allocator/allocator]]
[[fr:cpp/memory/allocator/allocator]]
[[it:cpp/memory/allocator/allocator]]
[[ja:cpp/memory/allocator/allocator]]
[[pt:cpp/memory/allocator/allocator]]
[[ru:cpp/memory/allocator/allocator]]
[[zh:cpp/memory/allocator/allocator]]</text>
      <sha1>fxroz14uukypflcbuydi0awggu0nduy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/construct</title>
    <ns>0</ns>
    <id>5671</id>
    <revision>
      <id>86270</id>
      <parentid>82586</parentid>
      <timestamp>2016-06-27T08:28:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>p0174r2</comment>
      <text xml:space="preserve" bytes="1308">{{cpp/memory/allocator/title|construct}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl rev begin}}
{{dcl | until=c++11 | num=1 |
void construct( pointer p, const_reference val );
}}
{{dcl | since=c++11 | num=2 | notes= {{mark|deprecated since C++17}} |
template&lt; class U, class... Args &gt;
void construct( U* p, Args&amp;&amp;... args );
}}
{{dcl rev end}}
{{dcl end}}

Constructs an object of type {{tt|T}} in allocated uninitialized storage pointed to by {{tt|p}}, using placement-new

@1@ Calls {{c|new((void *)p) T(val)}}

@2@ Calls {{c|::new((void *)p) U(std::forward&lt;Args&gt;(args)...)}}

===Parameters===
{{par begin}}
{{par | p | pointer to allocated uninitialized storage }}
{{par | val | the value to use as the copy constructor argument }}
{{par | args... | the constructor arguments to use}}
{{par end}}

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc construct}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc end}}

[[de:cpp/memory/allocator/construct]]
[[es:cpp/memory/allocator/construct]]
[[fr:cpp/memory/allocator/construct]]
[[it:cpp/memory/allocator/construct]]
[[ja:cpp/memory/allocator/construct]]
[[pt:cpp/memory/allocator/construct]]
[[ru:cpp/memory/allocator/construct]]
[[zh:cpp/memory/allocator/construct]]</text>
      <sha1>qkxhj4aekyk8xdaqt284g17c4dkjbtr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/deallocate</title>
    <ns>0</ns>
    <id>5713</id>
    <revision>
      <id>86282</id>
      <parentid>86273</parentid>
      <timestamp>2016-06-27T08:34:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>not use the now-deprecated member typedefs</comment>
      <text xml:space="preserve" bytes="1195">{{cpp/memory/allocator/title|deallocate}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl|1=
void deallocate( T* p, std::size_t n );
}}
{{dcl end}}

Deallocates the storage referenced by the pointer {{tt|p}}, which must be a pointer obtained by an earlier call to {{lc|allocate()}}. 

The argument {{tt|n}} must be equal to the first argument of the call to {{lc|allocate()}} that originally produced {{tt|p}}; otherwise, the behavior is undefined.

Calls {{c|::operator delete(void*)}}, but it is unspecified when and how it is called.

===Parameters===
{{par begin}}
{{par | p | pointer obtained from {{tt|allocate()}} }}
{{par | n | number of objects earlier passed to {{tt|allocate()}} }}
{{par end}}

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc allocate}}
{{dsc inc | cpp/memory/allocator_traits/dsc deallocate}}
{{dsc end}}

[[de:cpp/memory/allocator/deallocate]]
[[es:cpp/memory/allocator/deallocate]]
[[fr:cpp/memory/allocator/deallocate]]
[[it:cpp/memory/allocator/deallocate]]
[[ja:cpp/memory/allocator/deallocate]]
[[pt:cpp/memory/allocator/deallocate]]
[[ru:cpp/memory/allocator/deallocate]]
[[zh:cpp/memory/allocator/deallocate]]</text>
      <sha1>ar0eb0c5e8wb7mgj9rudu09i14q07qn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/destroy</title>
    <ns>0</ns>
    <id>5690</id>
    <revision>
      <id>86269</id>
      <parentid>61901</parentid>
      <timestamp>2016-06-27T08:27:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>p0174r2</comment>
      <text xml:space="preserve" bytes="949">{{cpp/memory/allocator/title|destroy}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl rev begin}}
{{dcl | until=c++11 |
void destroy( pointer p );
}}
{{dcl | since=c++11 |notes= {{mark|deprecated since C++17}}|
template&lt; class U &gt;
void destroy( U* p );
}}
{{dcl rev end}}
{{dcl end}}

Calls the destructor of the object pointed to by {{tt|p}}

@1@ Calls {{c|((T*)p)-&gt;~T()}}
@2@ Calls {{c|p-&gt;~U()}}

===Parameters===
{{par begin}}
{{par | p | pointer to the object that is going to be destroyed }}
{{par end}}

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc destroy}}
{{dsc end}}

[[de:cpp/memory/allocator/destroy]]
[[es:cpp/memory/allocator/destroy]]
[[fr:cpp/memory/allocator/destroy]]
[[it:cpp/memory/allocator/destroy]]
[[ja:cpp/memory/allocator/destroy]]
[[pt:cpp/memory/allocator/destroy]]
[[ru:cpp/memory/allocator/destroy]]
[[zh:cpp/memory/allocator/destroy]]</text>
      <sha1>kahm0g2mkkcmmv4iuq2zlj4vrr5j5an</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/max size</title>
    <ns>0</ns>
    <id>5717</id>
    <revision>
      <id>91706</id>
      <parentid>86272</parentid>
      <timestamp>2017-03-31T19:55:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1004">{{cpp/memory/allocator/title|max_size}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl | notes= {{mark|deprecated since C++17}} |1=
size_type max_size() const;
}}
{{dcl end}}

Returns the maximum theoretically possible value of {{tt|n}}, for which the call {{tt|allocate(n, 0)}} could succeed. 

In most implementations, this returns {{c|std::numeric_limits&lt;size_type&gt;::max() / sizeof(value_type)}}.

===Parameters===
(none)

===Return value===
The maximum supported allocation size

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc max_size}}
{{dsc end}}

[[de:cpp/memory/allocator/max size]]
[[es:cpp/memory/allocator/max size]]
[[fr:cpp/memory/allocator/max size]]
[[it:cpp/memory/allocator/max size]]
[[ja:cpp/memory/allocator/max size]]
[[pt:cpp/memory/allocator/max size]]
[[ru:cpp/memory/allocator/max size]]
[[zh:cpp/memory/allocator/max size]]</text>
      <sha1>ix6d3ycqfrhi851h905mqultzgpjvts</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/operator cmp</title>
    <ns>0</ns>
    <id>9000</id>
    <revision>
      <id>91866</id>
      <parentid>64876</parentid>
      <timestamp>2017-03-31T20:00:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1102">{{title|1=operator==,!={{small|(std::allocator)}}}}
{{cpp/memory/allocator/navbar}}
{{dcl begin}}
{{dcl | 1=
template&lt; class T1, class T2 &gt;
bool operator==( const allocator&lt;T1&gt;&amp; lhs, const allocator&lt;T2&gt;&amp; rhs );
}}
{{dcl | 1=
template&lt; class T1, class T2 &gt;
bool operator!=( const allocator&lt;T1&gt;&amp; lhs, const allocator&lt;T2&gt;&amp; rhs );
}}
{{dcl end}}

Compares two default allocators. Since default allocators are stateless, two default allocators are always equal.

@1@ Returns {{c|true}}
@2@ Returns {{c|false}}

===Parameters===
{{par begin}}
{{par | lhs, rhs | default allocators to compare}}
{{par end}}

===Return value===
@1@ {{c|true}}
@2@ {{c|false}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/memory/allocator/operator cmp]]
[[es:cpp/memory/allocator/operator cmp]]
[[fr:cpp/memory/allocator/operator cmp]]
[[it:cpp/memory/allocator/operator cmp]]
[[ja:cpp/memory/allocator/operator cmp]]
[[pt:cpp/memory/allocator/operator cmp]]
[[ru:cpp/memory/allocator/operator cmp]]
[[zh:cpp/memory/allocator/operator cmp]]</text>
      <sha1>d1jy1sbc1kun87frn278if6vcyb1k3t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/rebind</title>
    <ns>0</ns>
    <id>14514</id>
    <revision>
      <id>81652</id>
      <timestamp>2015-10-30T13:29:48Z</timestamp>
      <contributor>
        <ip>114.222.140.218</ip>
      </contributor>
      <comment>Created page with &quot;{{cpp/memory/allocator/title|rebind}} {{cpp/memory/allocator/navbar}} {{ddcl |1= template&lt; class U &gt;  struct rebind {   typedef allocator&lt;U&gt; other; }; }}  Provides a way to ob...&quot;</comment>
      <text xml:space="preserve" bytes="934">{{cpp/memory/allocator/title|rebind}}
{{cpp/memory/allocator/navbar}}
{{ddcl |1=
template&lt; class U &gt; 
struct rebind {
  typedef allocator&lt;U&gt; other;
};
}}

Provides a way to obtain an allocator for a different type.

Given {{tt|Alloc}} as an alias of {{c|std::allocator&lt;T&gt;}}, {{c|typename Alloc::template rebind&lt;U&gt;::other}} is equvalent to {{c|std::allocator&lt;U&gt;}}.

=== Notes ===
{{concept|AllocatorAwareContainer}} uses this to allocate storage for internal types. For example,
{{rev begin}}
{{rev | until=c++11 | {{tt|std::list&lt;T, A&gt;}} allocates nodes of some internal type {{tt|Node&lt;T&gt;}}, using the allocator {{c|A::rebind&lt;Node&lt;T&gt;&gt;::other}} 
}}
{{rev | since=c++11 | {{tt|std::list&lt;T, A&gt;}} allocates nodes of some internal type {{tt|Node&lt;T&gt;}}, using the allocator {{c|std::allocator_traits&lt;A&gt;::rebind_alloc&lt;Node&lt;T&gt;&gt;}}, which is implemented in terms of {{c|A::rebind&lt;Node&lt;T&gt;&gt;::other}} if A is an {{tt|std::allocator}} 
}}
{{rev end}}</text>
      <sha1>8if9ybu4fawyob4sxbbivkrvfwkglxu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/allocator/~allocator</title>
    <ns>0</ns>
    <id>8998</id>
    <revision>
      <id>42923</id>
      <parentid>37868</parentid>
      <timestamp>2012-11-03T00:54:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="445">{{cpp/memory/allocator/title|~allocator}}
{{cpp/memory/allocator/navbar}}
{{ddcl |
~allocator();
}}

Destroys the default allocator.

[[de:cpp/memory/allocator/~allocator]]
[[es:cpp/memory/allocator/~allocator]]
[[fr:cpp/memory/allocator/~allocator]]
[[it:cpp/memory/allocator/~allocator]]
[[ja:cpp/memory/allocator/~allocator]]
[[pt:cpp/memory/allocator/~allocator]]
[[ru:cpp/memory/allocator/~allocator]]
[[zh:cpp/memory/allocator/~allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr</title>
    <ns>0</ns>
    <id>3421</id>
    <revision>
      <id>74648</id>
      <parentid>74647</parentid>
      <timestamp>2014-12-19T12:40:09Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2409">{{cpp/title|auto_ptr}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | until=c++17 | notes={{mark|deprecated since C++11}} | num=1 | 1=
template&lt; class T &gt; class auto_ptr;
}}
{{dcl | until=c++17 | notes={{mark|deprecated since C++11}} | num=2 | 1=
template&lt;&gt; class auto_ptr&lt;void&gt;;
}}
{{dcl end}}

{{tt|auto_ptr}} is a smart pointer that manages an object obtained via [[cpp/language/new|new expression]] and deletes that object when {{tt|auto_ptr}} itself is destroyed. It may be used to provide exception safety for dynamically-allocated objects, for passing ownership of dynamically-allocated objects into functions and for returning dynamically-allocated objects from functions.

Copying an {{tt|auto_ptr}} copies the pointer and transfers ownership to the destination: both copy construction and copy assignment of {{tt|auto_ptr}} modify their right hand arguments, and the &quot;copy&quot; is not equal to the original. Because of these unusual copy semantics, {{tt|auto_ptr}} may not be placed in standard containers. {{rev inl|since=c++11|{{lc|std::unique_ptr}} is preferred for this and other uses.}}

@2@ Specialization for type {{c|void}} is provided, it declares the typedef {{tt|element_type}}, but no member functions.

An additional class template {{tt|auto_ptr_ref}} is referred to throughout the documentation. It is an implementation-defined type that holds a reference to {{tt|auto_ptr}}. The implementation is allowed to provide the template with a different name or implement the functions returning it or accepting it as parameter in other ways.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|element_type}} | {{c|T}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/auto_ptr/dsc auto_ptr}}
{{dsc inc | cpp/memory/auto_ptr/dsc ~auto_ptr}}
{{dsc inc | cpp/memory/auto_ptr/dsc operator{{=}}}}
{{dsc inc | cpp/memory/auto_ptr/dsc operator_auto_ptr}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/memory/auto_ptr/dsc get}}
{{dsc inc | cpp/memory/auto_ptr/dsc operator*}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/memory/auto_ptr/dsc reset}}
{{dsc inc | cpp/memory/auto_ptr/dsc release}}
{{dsc end}}

[[de:cpp/memory/auto ptr]]
[[es:cpp/memory/auto ptr]]
[[fr:cpp/memory/auto ptr]]
[[it:cpp/memory/auto ptr]]
[[ja:cpp/memory/auto ptr]]
[[pt:cpp/memory/auto ptr]]
[[ru:cpp/memory/auto ptr]]
[[zh:cpp/memory/auto ptr]]</text>
      <sha1>qqvzdrl4vxawhlzxx2tm6sfpw743ur3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/auto ptr</title>
    <ns>0</ns>
    <id>9574</id>
    <revision>
      <id>71665</id>
      <parentid>70031</parentid>
      <timestamp>2014-06-18T21:35:49Z</timestamp>
      <contributor>
        <ip>88.165.212.193</ip>
      </contributor>
      <comment>presumably a typo, otherwise template parameter Y is unused here</comment>
      <text xml:space="preserve" bytes="1756">{{cpp/memory/auto_ptr/title|auto_ptr}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} | num=1 | 1=
explicit auto_ptr( X* p = 0 );
}}
{{dcl | notes={{mark deprecated}} | num=2 |
auto_ptr( auto_ptr&amp; r );
}}
{{dcl | notes={{mark deprecated}} | num=3 |
template&lt; class Y &gt;
auto_ptr( auto_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | notes={{mark deprecated}} | num=4 |
template&lt; class Y &gt;
auto_ptr( auto_ptr_ref&lt;Y&gt; m );
}}
{{dcl end}}

Constructs the {{tt|auto_ptr}} from a pointer that refers to the object to manage.

@1@ Constructs the {{tt|auto_ptr}} with pointer {{tt|p}}.

@2@ Constructs the {{tt|auto_ptr}} with the pointer held in {{tt|r}}. {{c|r.release()}} is called to acquire the ownership of the object.

@3@ Same as (2). {{c|Y*}} must be implicitly convertible to {{c|T*}}.

@4@ Constructs the {{tt|auto_ptr}} with the pointer held in the {{tt|auto_ptr}} instance referred to by {{tt|m}}. {{c|p.release()}} is called for the {{tt|auto_ptr p}} that {{tt|m}} holds to acquire the ownership of the object. 

@@ {{tt|auto_ptr_ref}} is an implementation-defined type that holds a reference to {{tt|auto_ptr}}. {{lc|std::auto_ptr}} is implicitly [[cpp/memory/auto_ptr/operator_auto_ptr|convertible to]] and [[cpp/memory/auto_ptr/operator{{=}}|assignable from]] this type. The implementation is allowed to provide the template with a different name or implement equivalent functionality in other ways.

===Parameters===
{{par begin}}
{{par | p | a pointer to an object to manage}}
{{par | r | another {{tt|auto_ptr}} to transfer the ownership of the object from}}
{{par | m | an implementation-defined type that holds a reference to {{tt|auto_ptr}}}}
{{par end}}

===Exceptions===
(none)

===Notes===
{{cpp/memory/auto_ptr/auto_ptr_ref_note}}</text>
      <sha1>457arcrnm8vu0li5g51hjv2qe1wr7b8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/get</title>
    <ns>0</ns>
    <id>9578</id>
    <revision>
      <id>58298</id>
      <parentid>50113</parentid>
      <timestamp>2013-06-01T06:12:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="389">{{cpp/memory/auto_ptr/title|get}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} | 
T* get() const;
}}
{{dcl end}}

Returns the pointer that is held by {{c|*this}}.

===Parameters===
(none)

===Return value===
The pointer held by {{c|*this}}.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/auto_ptr/dsc operator*}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/operator auto ptr</title>
    <ns>0</ns>
    <id>9581</id>
    <revision>
      <id>70035</id>
      <parentid>70028</parentid>
      <timestamp>2014-05-07T16:31:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on how move semantics are implemented with auto_ptr_ref</comment>
      <text xml:space="preserve" bytes="1087">{{cpp/memory/auto_ptr/title|operator auto_ptr&lt;Y&gt;}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} | num=1 |
template&lt; class Y &gt;
operator auto_ptr_ref&lt;Y&gt;();
}}
{{dcl | notes={{mark deprecated}} | num=2 |
template&lt; class Y &gt;
operator auto_ptr&lt;Y&gt;();
}}
{{dcl end}}

Converts {{c|*this}} to an {{tt|auto_ptr}} for a different type {{tt|Y}}.

@1@ Returns an implementation-defined type that holds a reference to {{c|*this}}. {{lc|std::auto_ptr}} is [[cpp/memory/auto_ptr/auto_ptr|convertible]] and [[cpp/memory/auto_ptr/operator{{=}}|assignable]] from this template. The implementation is allowed to provide the template with a different name or implement equivalent functionality in other ways.

@2@ Constructs a new {{tt|auto_ptr}} with a pointer obtained by calling {{lc|release()}}.

===Parameters===
(none)

===Return value===
@1@ An implementation-defined type that holds a reference to {{c|*this}}

@2@ A {{tt|auto_ptr}} with a pointer obtained by calling {{lc|release()}}.

===Exceptions===
(none)

===Notes===
{{cpp/memory/auto_ptr/auto_ptr_ref_note}}</text>
      <sha1>7om1agz67mts3cdj50xhfti3tsutp1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/operator*</title>
    <ns>0</ns>
    <id>9577</id>
    <revision>
      <id>58299</id>
      <parentid>50114</parentid>
      <timestamp>2013-06-01T06:12:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="530">{{cpp/memory/auto_ptr/title|operator*|operator-&gt;}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} | num=1 |
T&amp; operator*() const;
}}
{{dcl | notes={{mark deprecated}} | num=2 |
T* operator-&gt;() const;
}}
{{dcl end}}

Dereferences a pointer to the managed object. The first version requires {{c|1=get() != 0}}.

===Parameters===
(none)

===Return value===
@1@ {{c|*get()}}.

@2@ {{c|get()}}.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/auto_ptr/dsc get}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/operator=</title>
    <ns>0</ns>
    <id>9576</id>
    <revision>
      <id>70033</id>
      <parentid>70029</parentid>
      <timestamp>2014-05-07T16:29:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note on how move semantics are implemented with auto_ptr_ref</comment>
      <text xml:space="preserve" bytes="1348">{{cpp/memory/auto_ptr/title|operator{{=}}}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} | num=1 | 1=
auto_ptr&amp; operator=( auto_ptr&amp; r );
}}
{{dcl | notes={{mark deprecated}} | num=2 | 1=
template&lt; class Y &gt;
auto_ptr&amp; operator=( auto_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | notes={{mark deprecated}} | num=3 | 1=
auto_ptr&amp; operator=( auto_ptr_ref m );
}}
{{dcl end}}
 
Replaces the managed object with the one managed by {{tt|r}}. 

@1@ Effectively calls {{c|reset(r.release())}}. 

@2@ Effectively calls {{c|reset(r.release())}}. {{c|Y*}} must be implicitly convertible to {{c|T*}}.

@3@ Effectively calls {{c|reset(m.release())}}. {{tt|auto_ptr_ref}} is an implementation-defined type that holds a reference to {{tt|auto_ptr}}. {{lc|std::auto_ptr}} is implicitly [[cpp/memory/auto_ptr/operator_auto_ptr|convertible to]] and [[cpp/memory/auto_ptr/auto_ptr|from]] this type. The implementation is allowed to provide the template with a different name or implement equivalent functionality in other ways.

===Parameters===
{{par begin}}
{{par | r | another {{tt|auto_ptr}} to transfer the ownership of the object from}}
{{par | m | an implementation-defined type that holds a reference to {{tt|auto_ptr}}}}
{{par end}}

===Return value===
{{c|*this}}.

===Exceptions===
(none)

===Notes===
{{cpp/memory/auto_ptr/auto_ptr_ref_note}}</text>
      <sha1>mrbhhnbouv3a70c1z04uakcxgus888p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/release</title>
    <ns>0</ns>
    <id>9579</id>
    <revision>
      <id>58302</id>
      <parentid>50117</parentid>
      <timestamp>2013-06-01T06:12:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="396">{{cpp/memory/auto_ptr/title|release}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} | 
T* release();
}}
{{dcl end}}

Releases the held pointer. After the call {{c|*this}} holds the null pointer.

===Parameters===
(none)

===Return value===
{{c|get()}}.

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/auto_ptr/dsc reset}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/reset</title>
    <ns>0</ns>
    <id>9580</id>
    <revision>
      <id>58303</id>
      <parentid>50118</parentid>
      <timestamp>2013-06-01T06:12:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="511">{{cpp/memory/auto_ptr/title|reset}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} | 1= 
void reset( T* p = 0 );
}}
{{dcl end}}

Replaces the held pointer by {{tt|p}}. If the currently held pointer is not null pointer, {{c|delete get()}} is called.

===Parameters===
{{par begin}}
{{par | p | a pointer to an object to manage}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/auto_ptr/dsc release}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/auto ptr/~auto ptr</title>
    <ns>0</ns>
    <id>9575</id>
    <revision>
      <id>80268</id>
      <parentid>50119</parentid>
      <timestamp>2015-08-01T12:33:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="204">{{cpp/memory/auto_ptr/title|~auto_ptr}}
{{cpp/memory/auto_ptr/navbar}}
{{dcl begin}}
{{dcl | notes={{mark deprecated}} |
~auto_ptr();
}}
{{dcl end}}

Destroys the managed object. Calls {{c|delete get()}}.</text>
      <sha1>fasfg6fyuptkpcoisyf7jp256ngsvkj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/bad weak ptr</title>
    <ns>0</ns>
    <id>3429</id>
    <revision>
      <id>62770</id>
      <parentid>58304</parentid>
      <timestamp>2013-07-01T23:40:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1332">{{cpp/title|bad_weak_ptr}}
{{cpp/memory/bad_weak_ptr/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++11 | 1=
class bad_weak_ptr;
}}
{{dcl end}}

{{tt|std::bad_weak_ptr}} is the type of the object thrown as exceptions by the constructors of {{lc|std::shared_ptr}} that take {{lc|std::weak_ptr}} as the argument, when the {{lc|std::weak_ptr}} refers to an already deleted object.

{{inheritance diagram/std-bad_weak_ptr}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/memory/bad_weak_ptr/bad_weak_ptr | constructs the {{tt|bad_weak_ptr}} object}}
{{dsc end}}

{{cpp/error/exception/inherit}}

===Example===
{{example
 |
 | code=
#include &lt;memory&gt;
#include &lt;iostream&gt;
int main()
{
    std::shared_ptr&lt;int&gt; p1(new int(42));
    std::weak_ptr&lt;int&gt; wp(p1);
    p1.reset();
    try {
        std::shared_ptr&lt;int&gt; p2(wp);
    } catch(const std::bad_weak_ptr&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
std::bad_weak_ptr
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc inc | cpp/memory/dsc weak_ptr}}
{{dsc end}}

[[de:cpp/memory/bad weak ptr]]
[[es:cpp/memory/bad weak ptr]]
[[fr:cpp/memory/bad weak ptr]]
[[it:cpp/memory/bad weak ptr]]
[[ja:cpp/memory/bad weak ptr]]
[[pt:cpp/memory/bad weak ptr]]
[[ru:cpp/memory/bad weak ptr]]
[[zh:cpp/memory/bad weak ptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/bad weak ptr/bad weak ptr</title>
    <ns>0</ns>
    <id>8987</id>
    <revision>
      <id>91517</id>
      <parentid>64874</parentid>
      <timestamp>2017-03-31T19:48:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="730">{{cpp/memory/bad_weak_ptr/title | bad_weak_ptr}}
{{cpp/memory/bad_weak_ptr/navbar}}
{{ddcl |
bad_weak_ptr();
}}

Constructs new {{tt|bad_weak_ptr}} object. {{ltf|cpp/error/exception/what}} returns {{c|&quot;bad_weak_ptr&quot;}} afterwards.

===Parameters===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/memory/bad weak ptr/bad weak ptr]]
[[es:cpp/memory/bad weak ptr/bad weak ptr]]
[[fr:cpp/memory/bad weak ptr/bad weak ptr]]
[[it:cpp/memory/bad weak ptr/bad weak ptr]]
[[ja:cpp/memory/bad weak ptr/bad weak ptr]]
[[pt:cpp/memory/bad weak ptr/bad weak ptr]]
[[ru:cpp/memory/bad weak ptr/bad weak ptr]]
[[zh:cpp/memory/bad weak ptr/bad weak ptr]]</text>
      <sha1>5fivnbqafnpm3x7gsdth9geh9j6u9gk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/c</title>
    <ns>0</ns>
    <id>2024</id>
    <revision>
      <id>86206</id>
      <parentid>84250</parentid>
      <timestamp>2016-06-24T19:45:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0063r3 (C11) adds aligned_alloc</comment>
      <text xml:space="preserve" bytes="784">{{title|C memory management library}}
{{cpp/memory/navbar}}

===Functions===
{{dsc begin}}
{{dsc header | cstdlib}}
{{dsc fun | cpp/memory/c/malloc | allocates memory}}
{{dsc fun | cpp/memory/c/aligned_alloc | allocates aligned memory|notes={{mark c++17}}}}
{{dsc fun | cpp/memory/c/calloc | allocates and zeroes memory}}
{{dsc fun | cpp/memory/c/realloc | expands previously allocated memory block}}
{{dsc fun | cpp/memory/c/free | deallocates previously allocated memory}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/memory | C memory management library}}
{{dsc end}}

[[cs:cpp/memory/c]]
[[de:cpp/memory/c]]
[[es:cpp/memory/c]]
[[fr:cpp/memory/c]]
[[it:cpp/memory/c]]
[[ja:cpp/memory/c]]
[[pl:cpp/memory/c]]
[[pt:cpp/memory/c]]
[[ru:cpp/memory/c]]
[[zh:cpp/memory/c]]</text>
      <sha1>9xe5uyci0ar924drvgjo4pyli7ql5aw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/c/aligned alloc</title>
    <ns>0</ns>
    <id>15532</id>
    <revision>
      <id>90233</id>
      <parentid>88740</parentid>
      <timestamp>2017-02-13T17:20:17Z</timestamp>
      <contributor>
        <username>Neilgroves</username>
        <id>6415</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2272">{{cpp/title|aligned_alloc}}
{{cpp/memory/navbar}}
{{ddcl | header=cstdlib | since=c++17 | 
void* aligned_alloc( std::size_t alignment, std::size_t size );
}}

Allocate {{tt|size}} bytes of uninitialized storage whose alignment is specified by {{tt|alignment}}. The {{tt|size}} parameter must be an integral multiple of {{tt|alignment}}.

{{cpp/memory/thread_safety_note}}

=== Parameters ===
{{par begin}}
{{par | alignment | specifies the alignment.  Must be a valid alignment supported by the implementation.}}
{{par | size | number of bytes to allocate.  An integral multiple of {{tt|alignment}}}}
{{par end}}

===Return value===
On success, returns the pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|free()}} or {{tt|realloc()}}.

On failure, returns a null pointer.

=== Notes ===
Passing a {{tt|size}} which is not an integral multiple of {{tt|alignment}} or a {{tt|alignment}} which is not valid or not supported by the implementation causes the function to fail and return a null pointer (C11, as published, specified undefined behavior in this case, this was corrected by DR 460).

As an example of the &quot;supported by the implementation&quot; requirement, POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html posix_memalign] accepts any {{tt|alignment}} that is a power of two and a multiple of {{tt|sizeof(void*)}}, and POSIX-based implementations of {{tt|aligned_alloc}} inherit this requirements.

Regular {{lc|std::malloc}} aligns memory suitable for any object type (which, in practice, means that it is aligned to {{c|alignof(std::max_align_t)}}). This function is useful for over-aligned allocations, such as to SSE, cache line, or VM page boundary.

===Example===
{{example|code=
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;

int main()
{
    int* p1 = std::malloc(10*sizeof *p1);
    std::printf(&quot;default-aligned addr:   %p\n&quot;, (void*)p1);
    std::free(p1);

    int* p2 = std::aligned_alloc(1024, 1024*sizeof *p2);
    std::printf(&quot;1024-byte aligned addr: %p\n&quot;, (void*)p2);
    std::free(p2);
}
|p=true
|output=
default-aligned addr:   0x2221c20
1024-byte aligned addr: 0x2222000
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc aligned_storage}}
{{dsc end}}</text>
      <sha1>370la3kqlovv95iu2zl8b8ydc53hhbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/c/calloc</title>
    <ns>0</ns>
    <id>2020</id>
    <revision>
      <id>86233</id>
      <parentid>86212</parentid>
      <timestamp>2016-06-24T21:56:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>thread safety note</comment>
      <text xml:space="preserve" bytes="2486">{{cpp/title|calloc}}
{{cpp/memory/c/navbar}}
{{ddcl | header=cstdlib |
void* calloc( std::size_t num, std::size_t size );
}}

Allocates memory for an array of {{tt|num}} objects of size {{tt|size}} and initializes it to all bits zero.

If allocation succeeds, returns a pointer to the lowest (first) byte in the allocated memory block that is suitably aligned for any object type.

If {{tt|size}} is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage)

{{cpp/memory/thread_safety_note}}

===Parameters===
{{par begin}}
{{par | num | number of objects}}
{{par | size | size of each object}}
{{par end}}

===Return value===
On success, returns the pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|std::free()}} or {{lc|std::realloc()}}.

On failure, returns a null pointer.

===Notes===
Due to the alignment requirements, the number of allocated bytes is not necessarily equal to {{tt|num*size}}.

Initialization to all bits zero does not guarantee that a floating-point or a pointer would be initialized to 0.0 and the null pointer value, respectively (although that is true on all common platforms)

Originally (in C89), support for zero size was added to accommodate code such as 
{{source|1=
OBJ *p = calloc(0, sizeof(OBJ)); // &quot;zero-length&quot; placeholder
...
while(1) { 
    p = realloc(p, c * sizeof(OBJ)); // reallocations until size settles
    ... // code that may change c or break out of loop
}
}}

===Example===
{{example| code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

int main()
{
    int* p1 = (int*)std::calloc(4, sizeof(int)); // allocate and zero out an array of 4 int
    int* p2 = (int*)std::calloc(1, sizeof(int[4])); // same, naming the array type directly
    int* p3 = (int*)std::calloc(4, sizeof *p3);   // same, without repeating the type name

    if(p2)
        for(int n=0; n&lt;4; ++n) // print the array
            std::cout &lt;&lt; &quot;p2[&quot; &lt;&lt; n &lt;&lt; &quot;] == &quot; &lt;&lt; p2[n] &lt;&lt; '\n';

    std::free(p1);
    std::free(p2);
    std::free(p3);
}
 | output=
p2[0] == 0
p2[1] == 0
p2[2] == 0
p2[3] == 0
}}

===See also===
{{dsc begin}}
{{dsc see c | c/memory/calloc}}
{{dsc end}}

[[de:cpp/memory/c/calloc]]
[[es:cpp/memory/c/calloc]]
[[fr:cpp/memory/c/calloc]]
[[it:cpp/memory/c/calloc]]
[[ja:cpp/memory/c/calloc]]
[[pl:cpp/memory/c/calloc]]
[[pt:cpp/memory/c/calloc]]
[[ru:cpp/memory/c/calloc]]
[[zh:cpp/memory/c/calloc]]</text>
      <sha1>q0c16la25jihv0v4hhyt98731qgjem8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/c/free</title>
    <ns>0</ns>
    <id>2021</id>
    <revision>
      <id>86235</id>
      <parentid>86214</parentid>
      <timestamp>2016-06-24T21:57:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>thread safety note</comment>
      <text xml:space="preserve" bytes="2111">{{cpp/title|free}}
{{cpp/memory/c/navbar}}
{{ddcl | header=cstdlib |
void free( void* ptr );
}}

Deallocates the space previously allocated by {{lc|std::malloc()}}, {{lc|std::calloc()}} or {{lc|std::realloc()}}.

If {{tt|ptr}} is a null pointer, the function does nothing.

The behavior is undefined if the value of {{tt|ptr}} does not equal a value returned earlier by {{lc|std::malloc()}}, {{lc|std::calloc()}}, or {{lc|std::realloc()}}.

The behavior is undefined if the memory area referred to by {{tt|ptr}} has already been deallocated, that is, {{tt|std::free()}} or {{lc|std::realloc()}} has already been called with {{tt|ptr}} as the argument and no calls to {{lc|std::malloc()}}, {{lc|std::calloc()}} or {{lc|std::realloc()}} resulted in a pointer equal to {{tt|ptr}} afterwards.

The behavior is undefined if after {{tt|std::free()}} returns, an access is made through the pointer {{tt|ptr}} (unless another allocation function happened to result in a pointer value equal to {{tt|ptr}})

{{cpp/memory/thread_safety_note}}

===Parameters===
{{par begin}}
{{par | ptr | pointer to the memory to deallocate}}
{{par end}}

===Return value===
(none)

===Notes===
The function accepts (and does nothing with) the null pointer to reduce the amount of special-casing. Whether allocation succeeds or not, the pointer returned by an allocation function can be passed to {{tt|free()}}

===Example===
{{example|code=
#include &lt;cstdlib&gt;

int main()
{
    int* p1 = (int*)std::malloc(10*sizeof *p1);
    std::free(p1); // every allocated pointer must be freed

    int* p2 = (int*)std::calloc(10, sizeof *p2);
    int* p3 = (int*)std::realloc(p2, 1000*sizeof *p3);
    if(p3) // p3 not null means p2 was freed by std::realloc
       std::free(p3);
    else // p3 null means p2 was not freed
       std::free(p2);
}
}}

===See also===
{{dsc begin}}
{{dsc see c | c/memory/free}}
{{dsc end}}

[[de:cpp/memory/c/free]]
[[es:cpp/memory/c/free]]
[[fr:cpp/memory/c/free]]
[[it:cpp/memory/c/free]]
[[ja:cpp/memory/c/free]]
[[pl:cpp/memory/c/free]]
[[pt:cpp/memory/c/free]]
[[ru:cpp/memory/c/free]]
[[zh:cpp/memory/c/free]]</text>
      <sha1>mv0lf29ikr1glm41wyglvvw5sp95v8c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/c/malloc</title>
    <ns>0</ns>
    <id>2023</id>
    <revision>
      <id>90061</id>
      <parentid>86231</parentid>
      <timestamp>2017-02-04T13:35:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note that the non-null pointer result of malloc(0) needs to go to free (as valgrind reminds me)</comment>
      <text xml:space="preserve" bytes="2406">{{cpp/title|malloc}}
{{cpp/memory/c/navbar}}
{{ddcl | header=cstdlib |
void* malloc( std::size_t size );
}}

Allocates {{tt|size}} bytes of uninitialized storage.

If allocation succeeds, returns a pointer to the lowest (first) byte in the allocated memory block that is suitably aligned for any scalar type.

If {{tt|size}} is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage, but has to be passed to {{lc|std::free}})

{{cpp/memory/thread_safety_note}}

===Parameters===
{{par begin}}
{{par | size | number of bytes to allocate }}
{{par end}}

===Return value===
On success, returns the pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|std::free()}} or {{tt|std::realloc()}}.

On failure, returns a null pointer.

===Notes===
This function does not call constructors or initialize memory in any way. There are no ready-to-use smart pointers that could guarantee that the matching deallocation function is called. The preferred method of memory allocation in C++ is using RAII-ready functions {{lc|std::make_unique}}, {{lc|std::make_shared}}, container constructors, etc, and, in low-level library code, [[cpp/language/new|new-expression]].

===Example===
{{example
 | code=
#include &lt;iostream&gt;   
#include &lt;cstdlib&gt; 

int main() 
{
    int* p1 = (int*)std::malloc(4*sizeof(int));  // allocates enough for an array of 4 int
    int* p2 = (int*)std::malloc(sizeof(int[4])); // same, naming the type directly
    int* p3 = (int*)std::malloc(4*sizeof *p3);   // same, without repeating the type name

    if(p1) {
        for(int n=0; n&lt;4; ++n) // populate the array
            p1[n] = n*n;
        for(int n=0; n&lt;4; ++n) // print it back out
            std::cout &lt;&lt; &quot;p1[&quot; &lt;&lt; n &lt;&lt; &quot;] == &quot; &lt;&lt; p1[n] &lt;&lt; '\n';
    }

    std::free(p1);
    std::free(p2);
    std::free(p3);
}
 | output=
p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/dsc get_temporary_buffer}}
{{dsc see c | c/memory/malloc}}
{{dsc end}}

[[de:cpp/memory/c/malloc]]
[[es:cpp/memory/c/malloc]]
[[fr:cpp/memory/c/malloc]]
[[it:cpp/memory/c/malloc]]
[[ja:cpp/memory/c/malloc]]
[[pl:cpp/memory/c/malloc]]
[[pt:cpp/memory/c/malloc]]
[[ru:cpp/memory/c/malloc]]
[[zh:cpp/memory/c/malloc]]</text>
      <sha1>8qoq8qj8y710km9oezlnh3uhhwa0p9w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/c/realloc</title>
    <ns>0</ns>
    <id>2022</id>
    <revision>
      <id>89924</id>
      <parentid>86434</parentid>
      <timestamp>2017-01-30T18:35:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>note behavior on zero size</comment>
      <text xml:space="preserve" bytes="3856">{{cpp/title|realloc}}
{{cpp/memory/c/navbar}}
{{ddcl | header=cstdlib |
void* realloc( void* ptr, std::size_t new_size );
}}

Reallocates the given area of memory. It must be previously allocated by {{lc|std::malloc()}}, {{lc|std::calloc()}} or {{tt|std::realloc()}} and not yet freed with {{lc|std::free()}}, otherwise, the results are undefined.

The reallocation is done by either:
@a@ expanding or contracting the existing area pointed to by {{tt|ptr}}, if possible. The contents of the area remain unchanged up to the lesser of the new and old sizes. If the area is expanded, the contents of the new part of the array are undefined. 
@b@ allocating a new memory block of size {{tt|new_size}} bytes, copying memory area with size equal the lesser of the new and the old sizes, and freeing the old block.

If there is not enough memory, the old memory block is not freed and null pointer is returned.

If {{tt|ptr}} is a null pointer, the behavior is the same as calling {{lc|std::malloc}}({{tt|new_size}}).

If {{tt|new_size}} is zero, the behavior is implementation defined: null pointer may be returned (in which case the old memory block may or may not be freed) or some non-null pointer may be returned that may not be used to access storage.

{{cpp/memory/thread_safety_note}}

===Parameters===
{{par begin}}
{{par | ptr | pointer to the memory area to be reallocated}}
{{par | new_size | new size of the array}}
{{par end}}

===Return value===
On success, returns a pointer to the beginning of newly allocated memory. The returned pointer must be deallocated with {{lc|std::free()}}, the original pointer {{tt|ptr}} is invalidated and any access to it is [[cpp/language/ub|undefined behavior]] (even if reallocation was in-place).

On failure, returns a null pointer. The original pointer {{tt|ptr}} remains valid and may need to be deallocated with {{lc|std::free()}}

===Notes===
Because reallocation may involve bytewise copying (regardless of whether it's to expand or to contract), only the objects of {{concept|TriviallyCopyable}} types are safe to access in the preserved part of the memory block after a call to {{tt|realloc}}.

Some non-standard libraries define a type trait &quot;BitwiseMovable&quot; or &quot;Relocatable&quot;, which describes a type that doesn't have:
* external references (e.g. nodes of a list or a tree that holds reference to another element), and
* internal references (e.g. member pointer which might hold the address of another member).

Objects of such type can be accessed after their storage is reallocated even if their copy constructors are not trivial.

===Example===
{{example
 | code= 
#include &lt;cstdlib&gt;
#include &lt;new&gt;
#include &lt;cassert&gt;

class MallocDynamicBuffer
{
    char* p;
public:
    explicit MallocDynamicBuffer(std::size_t initial = 0) : p(nullptr) {
       resize(initial);
    }
    ~MallocDynamicBuffer() { std::free(p); }
    void resize(std::size_t newSize) {
        if(newSize == 0) { // this check is not strictly needed, 
            std::free(p);  // but zero-size realloc is deprecated in C
            p = nullptr;
        } else {
            if(void* mem = std::realloc(p, newSize))
                p = static_cast&lt;char*&gt;(mem);
            else
                throw std::bad_alloc();
        }
    }
    char&amp; operator[](size_t n) { return p[n]; }
    char operator[](size_t n) const { return p[n]; }
};

int main()
{
    MallocDynamicBuffer buf1(1024);
    buf1[5] = 'f';
    buf1.resize(10); // shrink
    assert(buf1[5] == 'f');
    buf1.resize(1024); // grow
    assert(buf1[5] == 'f');
}
}}

===See also===
{{dsc begin}}
{{dsc see c | c/memory/realloc}}
{{dsc end}}

[[de:cpp/memory/c/realloc]]
[[es:cpp/memory/c/realloc]]
[[fr:cpp/memory/c/realloc]]
[[it:cpp/memory/c/realloc]]
[[ja:cpp/memory/c/realloc]]
[[pt:cpp/memory/c/realloc]]
[[ru:cpp/memory/c/realloc]]
[[zh:cpp/memory/c/realloc]]</text>
      <sha1>8yrjh8dhpt3v3tmf3bhacxsnj7hs0lx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/default delete</title>
    <ns>0</ns>
    <id>3430</id>
    <revision>
      <id>91428</id>
      <parentid>89190</parentid>
      <timestamp>2017-03-31T19:43:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4845">{{cpp/title|default_delete}}
{{cpp/memory/default_delete/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class T &gt; struct default_delete
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class T &gt; struct default_delete&lt;T[]&gt;
}}
{{dcl end}}

{{tt|std::default_delete}} is the default destruction policy used by {{lc|std::unique_ptr}} when no deleter is specified. 

1) The non-specialized {{tt|default_delete}} uses {{c|delete}} to deallocate memory for a single object.

2) A partial specialization for array types that uses {{c|delete[]}} is also provided.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/default_delete/dsc constructor}}
{{dsc inc | cpp/memory/default_delete/dsc operator()}}
{{dsc end}}

{{member | {{small|std::default_delete::}}default_delete | 2=
{{dcl begin}}
{{dcl | num=1 | 1= 
constexpr default_delete() = default;
}}
{{dcl | num=2 | notes={{mark|member only of generic {{tt|default_delete}} template}} | 1=
template &lt;class U&gt;
default_delete( const default_delete&lt;U&gt;&amp; d );
}}
{{dcl | num=3 | notes={{mark since c++17}}&lt;br&gt;{{mark|member only of the array {{tt|default_delete}} specialization}} | 1=
template&lt;class U&gt;
default_delete( const default_delete&lt;U[]&gt;&amp; d);
}}
{{dcl end}}

@1@ Constructs a {{tt|std::default_delete}} object.
@2@ Constructs a {{tt|std::default_delete}} object from another {{tt|std::default_delete}} object. This constructor will only participate in overload resolution if {{tt|U*}} is implicitly convertible to {{tt|T*}}.
@3@ Constructs a {{tt|std::default_delete&lt;U[]&lt;nowiki&gt;&gt;&lt;/nowiki&gt;}} object from another {{tt|std::default_delete&lt;U[]&lt;nowiki&gt;&gt;&lt;/nowiki&gt;}} object. This constructor will only participate in overload resolution if {{tt|U(*)[]}} is implicitly convertible to {{tt|T(*)[]}}.

===Parameters===
{{par begin}}
{{par | d | a deleter to copy from}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The [[cpp/language/converting_constructor|converting constructor]] template of {{tt|std::default_delete}} makes possible the implicit conversion from {{c|std::unique_ptr&lt;Derived&gt;}} to {{c|std::unique_ptr&lt;Base&gt;}}.
}}

{{member | {{small|std::default_delete::}}operator() | 2=
{{dcl begin}}
{{dcl | num=1 | notes = {{mark|as of C++17, no longer a member of the {{tt|default_delete&lt;T[]&gt;}} template specialization}} | 1= 
void operator()(T* ptr) const;
}}
{{dcl | num=2 | notes = {{mark|member only of {{tt|default_delete&lt;T[]&gt;}} template specialization, but defined as deleted prior to C++17}} | 1=
template &lt;class U&gt;
void operator()(U* ptr) const;
}}
{{dcl end}}

{{rev begin}}
{{rev|until=c++17|
@1@ Calls {{tt|delete}} (primary template) or {{tt|delete[]}} (array specialization) on {{tt|ptr}}
@2@ Defined as deleted
}}
{{rev|since=c++17|
@1@ Calls {{tt|delete}} on {{tt|ptr}}
@2@ Calls {{tt|delete[]}} on {{tt|ptr}}. This function will only participate in overload resolution if {{c|U(*)[]}} is implicitly convertible to {{c|T(*)[]}}. 
}}
{{rev end}}
In any case, if U is an incomplete type, the program is ill­-formed

===Parameters===
{{par begin}}
{{par | ptr | an object or array to delete}}
{{par end}}

===Exceptions===
No exception guarantees.

}}

===Invoking over Incomplete Types===
At the point in the code the operator() is called, the type must be complete. In some implementations a {{tt|static_assert}} is used to make sure this is the case. The reason for this requirement is that calling [[cpp/language/delete|delete]] on an incomplete type is undefined behavior in C++ if the complete class type has a nontrivial destructor or a deallocation function, as the compiler has no way of knowing whether such functions exist and must be invoked.

===Example===
{{example | 
| code=
#include &lt;memory&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

int main()
{
//    {
//        std::shared_ptr&lt;int&gt; shared_bad(new int[10]);
//    } // the destructor calls delete, undefined behavior

    {
        std::shared_ptr&lt;int&gt; shared_good(new int[10], std::default_delete&lt;int[]&gt;
());
    } // the destructor calls delete[], ok

    {
        std::unique_ptr&lt;int&gt; ptr(new int(5));
    } // unique_ptr&lt;int&gt; uses default_delete&lt;int&gt;

    {
        std::unique_ptr&lt;int[]&gt; ptr(new int[10]);
    } // unique_ptr&lt;int[]&gt; uses default_delete&lt;int[]&gt;

   // default_delete can be used anywhere a delete functor is needed
   std::vector&lt;int*&gt; v;
   for(int n = 0; n &lt; 100; ++n)
      v.push_back(new int(n));
   std::for_each(v.begin(), v.end(), std::default_delete&lt;int&gt;());
}
| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc unique_ptr}}
{{dsc end}}

[[de:cpp/memory/default delete]]
[[es:cpp/memory/default delete]]
[[fr:cpp/memory/default delete]]
[[it:cpp/memory/default delete]]
[[ja:cpp/memory/default delete]]
[[pt:cpp/memory/default delete]]
[[ru:cpp/memory/default delete]]
[[zh:cpp/memory/default delete]]</text>
      <sha1>1npg5ssuyw61s90iatxa2c936pqon46</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/default delete/default delete</title>
    <ns>0</ns>
    <id>9606</id>
    <redirect title="cpp/memory/default delete" />
    <revision>
      <id>47140</id>
      <parentid>44706</parentid>
      <timestamp>2013-04-25T10:52:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/memory/default delete]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/memory/default delete]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/default delete/operator()</title>
    <ns>0</ns>
    <id>9607</id>
    <redirect title="cpp/memory/default delete" />
    <revision>
      <id>47141</id>
      <parentid>44707</parentid>
      <timestamp>2013-04-25T10:53:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/memory/default delete]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/memory/default delete]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/destroy</title>
    <ns>0</ns>
    <id>15638</id>
    <revision>
      <id>86819</id>
      <timestamp>2016-07-12T23:53:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1592">{{cpp/title|destroy}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 | num= 1 |1=  
template&lt; class ForwardIt &gt;
void destroy( ForwardIt first, ForwardIt last );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt;
void destroy( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl end}}
@1@ Destroys the  objects in the range {{tt|[first, last)}}, as if by
{{source|1=
for (; first != last; ++first)
  std::destroy_at(std::addressof(*first));
}}

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements to destroy}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt; class ForwardIt &gt;
void destroy( ForwardIt first, ForwardIt last )
{
  for (; first != last; ++first)
    std::destroy_at(std::addressof(*first));
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc destroy_n}}
{{dsc inc | cpp/memory/dsc destroy_at}}
{{dsc end}}</text>
      <sha1>119ybpor672y9jz4hbdhe7n5o79fy24</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/destroy at</title>
    <ns>0</ns>
    <id>15636</id>
    <revision>
      <id>86817</id>
      <timestamp>2016-07-12T23:48:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="635">{{cpp/title|destroy_at}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 ||1=  
template&lt; class T &gt;
void destroy_at( T* p );
}}
{{dcl end}}

Calls the destructor of the object pointed to by {{tt|p}}, as if by {{tt|p-&gt;~T()}}.

===Parameters===
{{par begin}}
{{par | p | a pointer to the object to be destroyed}}
{{par end}}

===Return value===
(none)

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
void destroy_at(T* p) 
{ 
    p-&gt;~T(); 
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc destroy}}
{{dsc inc | cpp/memory/dsc destroy_n}}
{{dsc end}}</text>
      <sha1>8efgu6ga9jt41ujv6ehixcm24gqop44</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/destroy n</title>
    <ns>0</ns>
    <id>15637</id>
    <revision>
      <id>86818</id>
      <timestamp>2016-07-12T23:51:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1759">{{cpp/title|destroy_n}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 | num= 1 |1=  
template&lt; class ForwardIt, class Size &gt;
ForwardIt destroy_n( ForwardIt first, Size n );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Size &gt;
ForwardIt destroy_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, Size n );}}
{{dcl end}}
@1@ Destroys the {{tt|n}} objects in the range starting at {{tt|first}}, as if by
{{source|1=
for (; n &gt; 0; (void) ++first, --n)
  std::destroy_at(std::addressof(*first));
}}

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first | the beginning of the range of elements to destroy}}
{{par | n | the number of elements to destroy}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
The end of the range of objects that has been destroyed (i.e., {{c|std::next(first, n)}}).

===Complexity===
Linear in {{tt|n}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt, class Size&gt;
ForwardIt destroy_n( ForwardIt first, Size n )
{
  for (; n &gt; 0; (void) ++first, --n)
    std::destroy_at(std::addressof(*first));
  return first;
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc destroy}}
{{dsc inc | cpp/memory/dsc destroy_at}}
{{dsc end}}</text>
      <sha1>iholbog2t5vejxpkl21pll54644hhgf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/enable shared from this</title>
    <ns>0</ns>
    <id>3425</id>
    <revision>
      <id>89931</id>
      <parentid>89930</parentid>
      <timestamp>2017-01-30T20:57:34Z</timestamp>
      <contributor>
        <username>Pgolubev</username>
        <id>6331</id>
      </contributor>
      <comment>Undo revision 89930 by [[Special:Contributions/Pgolubev|Pgolubev]] ([[User talk:Pgolubev|talk]])</comment>
      <text xml:space="preserve" bytes="4798">{{cpp/title|enable_shared_from_this}}
{{cpp/memory/enable_shared_from_this/navbar}}
{{ddcl | header=memory | since=c++11 | 1=
template&lt; class T &gt; class enable_shared_from_this;
}}

{{tt|std::enable_shared_from_this}} allows an object {{tt|t}} that is currently managed by a {{lc|std::shared_ptr}} named {{tt|pt}} to safely generate additional {{lc|std::shared_ptr}} instances {{tt|pt1, pt2, ...}} that all share ownership of {{tt|t}} with {{tt|pt}}.

Publicly inheriting from {{tt|std::enable_shared_from_this&lt;T&gt;}} provides the type {{tt|T}} with a member function {{tt|shared_from_this}}.  If an object {{tt|t}} of type {{tt|T}} is managed by a {{c|std::shared_ptr&lt;T&gt;}} named {{tt|pt}}, then calling {{tt|T::shared_from_this}} will return a new {{c|std::shared_ptr&lt;T&gt;}} that shares ownership of {{tt|t}} with {{tt|pt}}.

===Member functions===
{{dsc begin}}
{{dsc prot mem ctor | cpp/memory/enable_shared_from_this/enable_shared_from_this | constructs an {{tt|enabled_shared_from_this}} object }}
{{dsc prot mem dtor | cpp/memory/enable_shared_from_this/~enable_shared_from_this | destroys an {{tt|enable_shared_from_this}} object }}
{{dsc prot mem fun  | cpp/memory/enable_shared_from_this/operator{{=}} | returns a reference to {{c|this}} }}
{{dsc mem fun  | cpp/memory/enable_shared_from_this/shared_from_this | returns a {{c|shared_ptr}} which shares ownership of {{c|*this}} }}
{{dsc mem fun  | cpp/memory/enable_shared_from_this/weak_from_this | returns the  {{c|weak_ptr}} which shares ownership of {{c|*this}} |notes={{mark c++17}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Definition}}
{{dsc | {{tt|weak_this}} {{mark|private}}{{mark c++17}} | {{lc|std::weak_ptr}} object tracking the control block of the first shared owner of {{c|*this}}. Exposition only }}
{{dsc end}}

===Notes===
A common implementation for {{tt|enable_shared_from_this}} is to hold a weak reference (such as {{lc|std::weak_ptr}}) to {{c|this}}. The constructors of {{lc|std::shared_ptr}} detect the presence of an {{tt|enable_shared_from_this}} base and assign the newly created {{lc|std::shared_ptr}} to the internally stored weak reference.  Constructing a {{lc|std::shared_ptr}} for an object that is already managed by another {{lc|std::shared_ptr}} will not consult the internally stored weak reference and thus will lead to undefined behavior.

It is permitted to call {{tt|shared_from_this}} only on a previously shared object, i.e. on an object managed by {{c|std::shared_ptr&lt;T&gt;}}. Otherwise {{rev inl|until=c++17|the behavior is undefined}}{{rev inl|since=c++17|{{lc|std::bad_weak_ptr}} is thrown (by the shared_ptr constructor from a default-constructed {{tt|weak_this}})}}.

{{tt|enable_shared_from_this}} provides the safe alternative to an expression like {{c|std::shared_ptr&lt;T&gt;(this)}}, which is likely to result in {{c|this}} being destructed more than once by multiple owners that are unaware of each other (see example below)

===Example===
{{example
 | 
 | code=
#include &lt;memory&gt;
#include &lt;iostream&gt;

struct Good: std::enable_shared_from_this&lt;Good&gt; // note: public inheritance
{
    std::shared_ptr&lt;Good&gt; getptr() {
        return shared_from_this();
    }
};

struct Bad
{
    std::shared_ptr&lt;Bad&gt; getptr() {
        return std::shared_ptr&lt;Bad&gt;(this);
    }
    ~Bad() { std::cout &lt;&lt; &quot;Bad::~Bad() called\n&quot;; }
};

int main()
{
    // Good: the two shared_ptr's share the same object
    std::shared_ptr&lt;Good&gt; gp1 = std::make_shared&lt;Good&gt;();
    std::shared_ptr&lt;Good&gt; gp2 = gp1-&gt;getptr();
    std::cout &lt;&lt; &quot;gp2.use_count() = &quot; &lt;&lt; gp2.use_count() &lt;&lt; '\n';

    // Bad: shared_from_this is called without having std::shared_ptr owning the caller 
    try {
        Good not_so_good;
        std::shared_ptr&lt;Good&gt; gp1 = not_so_good.getptr();
    } catch(std::bad_weak_ptr&amp; e) {
        // undefined behavior (until C++17) and std::bad_weak_ptr thrown (since C++17)
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';    
    }

    // Bad, each shared_ptr thinks it's the only owner of the object
    std::shared_ptr&lt;Bad&gt; bp1 = std::make_shared&lt;Bad&gt;();
    std::shared_ptr&lt;Bad&gt; bp2 = bp1-&gt;getptr();
    std::cout &lt;&lt; &quot;bp2.use_count() = &quot; &lt;&lt; bp2.use_count() &lt;&lt; '\n';
} // UB: double-delete of Bad
 | output=
gp2.use_count() = 2
bad_weak_ptr
bp2.use_count() = 1
Bad::~Bad() called
Bad::~Bad() called
*** glibc detected *** ./test: double free or corruption 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc end}}

[[de:cpp/memory/enable shared from this]]
[[es:cpp/memory/enable shared from this]]
[[fr:cpp/memory/enable shared from this]]
[[it:cpp/memory/enable shared from this]]
[[ja:cpp/memory/enable shared from this]]
[[pt:cpp/memory/enable shared from this]]
[[ru:cpp/memory/enable shared from this]]
[[zh:cpp/memory/enable shared from this]]</text>
      <sha1>odbhj5h09yty9oddljj24z1mfro9vox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/enable shared from this/enable shared from this</title>
    <ns>0</ns>
    <id>8457</id>
    <revision>
      <id>91870</id>
      <parentid>83934</parentid>
      <timestamp>2017-03-31T20:00:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1580">{{cpp/memory/enable_shared_from_this/title | enable_shared_from_this}}
{{cpp/memory/enable_shared_from_this/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
constexpr enable_shared_from_this();
}}
{{dcl | num=2 | since=c++11 | 1= 
enable_shared_from_this( const enable_shared_from_this&lt;T&gt;&amp;obj );
}}
{{dcl end}}

Constructs new {{tt|enable_shared_from_this}} object. The private {{lc|std::weak_ptr&lt;T&gt;}} member is value-initialized.

===Parameters===
{{par begin}}
{{par | obj | an {{tt|enable_shared_from_this}} to copy}}
{{par end}} 

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;memory&gt;

struct Foo : public std::enable_shared_from_this&lt;Foo&gt; {
    Foo() {}  // implicitly calls enable_shared_from_this constructor
    std::shared_ptr&lt;Foo&gt; getFoo() { return shared_from_this(); }
};

int main() {
    std::shared_ptr&lt;Foo&gt; pf1(new Foo);
    auto pf2 = pf1-&gt;getFoo();  // shares ownership of object with pf1
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc end}}

[[de:cpp/memory/enable shared from this/enable shared from this]]
[[es:cpp/memory/enable shared from this/enable shared from this]]
[[fr:cpp/memory/enable shared from this/enable shared from this]]
[[it:cpp/memory/enable shared from this/enable shared from this]]
[[ja:cpp/memory/enable shared from this/enable shared from this]]
[[pt:cpp/memory/enable shared from this/enable shared from this]]
[[ru:cpp/memory/enable shared from this/enable shared from this]]
[[zh:cpp/memory/enable shared from this/enable shared from this]]</text>
      <sha1>lpbzoslh0cdy281jcn5xbshwoyqdqz0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/enable shared from this/operator=</title>
    <ns>0</ns>
    <id>8459</id>
    <revision>
      <id>91429</id>
      <parentid>83935</parentid>
      <timestamp>2017-03-31T19:43:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2044">{{cpp/memory/enable_shared_from_this/title | operator{{=}} }}
{{cpp/memory/enable_shared_from_this/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1= 
enable_shared_from_this&lt;T&gt;&amp; operator=( const enable_shared_from_this&lt;T&gt; &amp;obj );
}}
{{dcl end}}

Does nothing; returns {{c|*this}}.

===Parameters===
{{par begin}}
{{par | obj | an {{tt|enable_shared_from_this}} to assign to {{c|*this}} }}
{{par end}} 

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The private {{lc|std::weak_ptr&lt;T&gt;}} member is not affected by this assignment operator.

===Example===
Note: {{c|enable_shared_from_this::operator{{=}} }} is defined as {{tt|protected}} in order to prevent accidental slicing but allow derived classes to have default assignment operators.
{{example
 | code=
#include &lt;memory&gt;
#include &lt;iostream&gt;
 
class SharedInt : public std::enable_shared_from_this&lt;SharedInt&gt;
{
public:
    explicit SharedInt(int n) : mNumber(n) {}
    SharedInt(const SharedInt&amp;) = default;
    SharedInt(SharedInt&amp;&amp;) = default;
    ~SharedInt() = default;
 
    // Both assignment operators use enable_shared_from_this::operator=
    SharedInt&amp; operator=(const SharedInt&amp;) = default;
    SharedInt&amp; operator=(SharedInt&amp;&amp;) = default;
 
    int number() const { return mNumber; }
    
private:
    int mNumber;
};
 
int main() {
    std::shared_ptr&lt;SharedInt&gt; a = std::make_shared&lt;SharedInt&gt;(2);
    std::shared_ptr&lt;SharedInt&gt; b = std::make_shared&lt;SharedInt&gt;(4);
    *a = *b;
 
    std::cout &lt;&lt; a-&gt;number() &lt;&lt; std::endl;
}
 | output=
4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc end}}

[[de:cpp/memory/enable shared from this/operator=]]
[[es:cpp/memory/enable shared from this/operator=]]
[[fr:cpp/memory/enable shared from this/operator=]]
[[it:cpp/memory/enable shared from this/operator=]]
[[ja:cpp/memory/enable shared from this/operator=]]
[[pt:cpp/memory/enable shared from this/operator=]]
[[ru:cpp/memory/enable shared from this/operator=]]
[[zh:cpp/memory/enable shared from this/operator=]]</text>
      <sha1>ouc3s1p9ny133gnrxjj5i7mta4u57ha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/enable shared from this/shared from this</title>
    <ns>0</ns>
    <id>8460</id>
    <revision>
      <id>90814</id>
      <parentid>85781</parentid>
      <timestamp>2017-03-11T02:05:29Z</timestamp>
      <contributor>
        <username>Oktal</username>
        <id>3854</id>
      </contributor>
      <comment>restored intent of my previous edit that was lost due to later edit by IP user</comment>
      <text xml:space="preserve" bytes="2145">{{cpp/memory/enable_shared_from_this/title | shared_from_this}}
{{cpp/memory/enable_shared_from_this/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1= 
shared_ptr&lt;T&gt; shared_from_this();
}}
{{dcl | num=2 | 1= 
shared_ptr&lt;T const&gt; shared_from_this() const;
}}
{{dcl end}}

Returns a {{c|std::shared_ptr&lt;T&gt;}} that shares ownership of {{c|*this}} with all existing {{c|std::shared_ptr}} that refer to {{c|*this}}.

Effectively executes {{c|std::shared_ptr&lt;T&gt;(weak_this)}}, where {{tt|weak_this}} is the private mutable {{c|std::weak_ptr&lt;T&gt;}} member of {{tt|enable_shared_from_this}}.

===Notes===
It is permitted to call {{tt|shared_from_this}} only on a previously shared object, i.e. on an object managed by {{c|std::shared_ptr}}. Otherwise {{rev inl|until=c++17|the behavior is undefined}}{{rev inl|since=c++17|{{lc|std::bad_weak_ptr}} is thrown (by the shared_ptr constructor from a default-constructed {{tt|weak_this}})}}.

===Return value===
{{c|std::shared_ptr&lt;T&gt;}} that shares ownership of {{c|*this}} with pre-existing {{c|std::shared_ptr}}s

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo : public std::enable_shared_from_this&lt;Foo&gt; {
    Foo() { std::cout &lt;&lt; &quot;Foo::Foo\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;Foo::~Foo\n&quot;; } 
    std::shared_ptr&lt;Foo&gt; getFoo() { return shared_from_this(); }
};

int main() {
    Foo *f = new Foo;
    std::shared_ptr&lt;Foo&gt; pf1;

    {
        std::shared_ptr&lt;Foo&gt; pf2(f);
        pf1 = pf2-&gt;getFoo();  // shares ownership of object with pf2
    }

    std::cout &lt;&lt; &quot;pf2 is gone\n&quot;;   
}
 | output=
Foo::Foo
pf2 is gone
Foo::~Foo
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc end}}

[[de:cpp/memory/enable shared from this/shared from this]]
[[es:cpp/memory/enable shared from this/shared from this]]
[[fr:cpp/memory/enable shared from this/shared from this]]
[[it:cpp/memory/enable shared from this/shared from this]]
[[ja:cpp/memory/enable shared from this/shared from this]]
[[pt:cpp/memory/enable shared from this/shared from this]]
[[ru:cpp/memory/enable shared from this/shared from this]]
[[zh:cpp/memory/enable shared from this/shared from this]]</text>
      <sha1>qo30567okx4yln0z4wvvbplbobf8zlf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/enable shared from this/weak from this</title>
    <ns>0</ns>
    <id>14763</id>
    <revision>
      <id>91641</id>
      <parentid>83933</parentid>
      <timestamp>2017-03-31T19:53:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1287">{{cpp/memory/enable_shared_from_this/title | weak_from_this}}
{{cpp/memory/enable_shared_from_this/navbar}}
{{dcl begin}}
{{dcl | since=c++17| num=1 | 1= 
std::weak_ptr&lt;T&gt; weak_from_this();
}}
{{dcl | since=c++17| num=2 | 1= 
std::weak_ptr&lt;T const&gt; weak_from_this() const;
}}
{{dcl end}}

Returns a {{c|std::weak_ptr&lt;T&gt;}} that tracks ownership of {{c|*this}} by all existing {{c|std::shared_ptr}} that refer to {{c|*this}}.

===Notes===
This is a copy of the the private mutable {{tt|weak_ptr}} member that is part of    {{tt|enabled_shared_from_this}}. 

===Return value===
{{c|std::weak_ptr&lt;T&gt;}} that shares ownership of {{c|*this}} with pre-existing {{c|std::shared_ptr}}s

===Exceptions===
@2@ {{unreviewed noexcept}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc end}}

[[de:cpp/memory/enable shared from this/weak from this]]
[[es:cpp/memory/enable shared from this/weak from this]]
[[fr:cpp/memory/enable shared from this/weak from this]]
[[it:cpp/memory/enable shared from this/weak from this]]
[[ja:cpp/memory/enable shared from this/weak from this]]
[[pt:cpp/memory/enable shared from this/weak from this]]
[[ru:cpp/memory/enable shared from this/weak from this]]
[[zh:cpp/memory/enable shared from this/weak from this]]</text>
      <sha1>391y57cl8ecnn2g8qac3cubo618pdtn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/enable shared from this/~enable shared from this</title>
    <ns>0</ns>
    <id>8458</id>
    <revision>
      <id>58317</id>
      <parentid>50131</parentid>
      <timestamp>2013-06-01T06:12:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="828">{{cpp/memory/enable_shared_from_this/title | ~enable_shared_from_this}}
{{cpp/memory/enable_shared_from_this/navbar}}
{{dcl begin}}
{{dcl | 1= 
~enable_shared_from_this();
}}
{{dcl end}}

Destroys {{c|*this}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc shared_ptr}}
{{dsc end}}

[[de:cpp/memory/enable shared from this/~enable shared from this]]
[[es:cpp/memory/enable shared from this/~enable shared from this]]
[[fr:cpp/memory/enable shared from this/~enable shared from this]]
[[it:cpp/memory/enable shared from this/~enable shared from this]]
[[ja:cpp/memory/enable shared from this/~enable shared from this]]
[[pt:cpp/memory/enable shared from this/~enable shared from this]]
[[ru:cpp/memory/enable shared from this/~enable shared from this]]
[[zh:cpp/memory/enable shared from this/~enable shared from this]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/gc/declare no pointers</title>
    <ns>0</ns>
    <id>3433</id>
    <revision>
      <id>80260</id>
      <parentid>63338</parentid>
      <timestamp>2015-08-01T12:30:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1103">{{cpp/title|declare_no_pointers}}
{{cpp/memory/navbar}}
{{ddcl | header=memory | since=c++11 |
void declare_no_pointers( char *p, std::size_t n );
}}

Informs the garbage collector or leak detector that the specified memory region ({{tt|n}} bytes beginning at the byte pointed to by {{tt|p}}) contains no traceable pointers. If any part of the region is within an allocated object, the entire region must be contained in the same object.

===Parameters===
{{par begin}}
{{par | p | pointer to the beginning of the range}}
{{par | n | the number of bytes in the range}}
{{par end}}

===Return value===
(none)

===Exceptions===
None

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/gc/dsc undeclare_no_pointers}}
{{dsc end}}

[[de:cpp/memory/gc/declare no pointers]]
[[es:cpp/memory/gc/declare no pointers]]
[[fr:cpp/memory/gc/declare no pointers]]
[[it:cpp/memory/gc/declare no pointers]]
[[ja:cpp/memory/gc/declare no pointers]]
[[pt:cpp/memory/gc/declare no pointers]]
[[ru:cpp/memory/gc/declare no pointers]]
[[zh:cpp/memory/gc/declare no pointers]]</text>
      <sha1>8uufb9lgjyjc4o11c4xhit5d40z1ibh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/gc/declare reachable</title>
    <ns>0</ns>
    <id>3431</id>
    <revision>
      <id>80258</id>
      <parentid>63339</parentid>
      <timestamp>2015-08-01T12:30:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1362">{{cpp/title|declare_reachable}}
{{cpp/memory/navbar}}
{{ddcl | header=memory | since=c++11 | 
void declare_reachable( void* p );
}}

Declares the object referenced by the pointer {{tt|p}} reachable. Reachable objects will not be deleted by the garbage collector or considered to be a leak by a leak detector even if all pointers to it are destroyed. An object may be declared reachable multiple times, in which case multiple calls to {{lc|std::undeclare_reachable}} would be needed to remove this property. For example, a [[enwiki:XOR linked list|XOR linked list]] needs to declare its nodes reachable if the implementation has garbage collection enabled.

===Parameters===
{{par begin}}
{{par | p | a safely-derived pointer or a null pointer}}
{{par end}}

===Return value===
(none)

===Exceptions===
May throw {{lc|std::bad_alloc}} if the system cannot allocate memory required to track reachable objects.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/gc/dsc undeclare_reachable}}
{{dsc end}}

[[de:cpp/memory/gc/declare reachable]]
[[es:cpp/memory/gc/declare reachable]]
[[fr:cpp/memory/gc/declare reachable]]
[[it:cpp/memory/gc/declare reachable]]
[[ja:cpp/memory/gc/declare reachable]]
[[pt:cpp/memory/gc/declare reachable]]
[[ru:cpp/memory/gc/declare reachable]]
[[zh:cpp/memory/gc/declare reachable]]</text>
      <sha1>egvrnjqdgp4ry2nvo75h74k18xou8ax</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/gc/get pointer safety</title>
    <ns>0</ns>
    <id>3436</id>
    <revision>
      <id>91767</id>
      <parentid>80256</parentid>
      <timestamp>2017-03-31T19:57:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="795">{{cpp/title|get_pointer_safety}}
{{cpp/memory/navbar}}
{{ddcl | since=c++11 | header=memory | 
std::pointer_safety get_pointer_safety();
}}

Obtains the implementation-defined pointer safety model, which is a value of type {{lc|std::pointer_safety}}.

===Parameters===
(none)

===Return value===
The pointer safety used by this implementation.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/gc/dsc pointer_safety}}
{{dsc end}}

[[de:cpp/memory/gc/get pointer safety]]
[[es:cpp/memory/gc/get pointer safety]]
[[fr:cpp/memory/gc/get pointer safety]]
[[it:cpp/memory/gc/get pointer safety]]
[[ja:cpp/memory/gc/get pointer safety]]
[[pt:cpp/memory/gc/get pointer safety]]
[[ru:cpp/memory/gc/get pointer safety]]
[[zh:cpp/memory/gc/get pointer safety]]</text>
      <sha1>56kdiga7ih4rmo86co68ws5f27l1oba</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/gc/pointer safety</title>
    <ns>0</ns>
    <id>3435</id>
    <revision>
      <id>62772</id>
      <parentid>58325</parentid>
      <timestamp>2013-07-01T23:40:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1203">{{cpp/title|pointer_safety}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl  | since=c++11 |1=
enum class pointer_safety {
     relaxed,
     preferred,
     strict
};
}}
{{dcl end}}

The scoped enumeration type {{tt|pointer_safety}} lists the pointer safety modes supported by C++

===Enumeration constants===
{{dsc begin}}
{{dsc | pointer_safety::strict | Only safely-derived pointers (pointers to objects allocated with new or subobjects thereof) may be dereferenced or deallocated. Garbage collector may be active.}}
{{dsc | pointer_safety::preferred | All pointers are considered valid and may be dereferenced or deallocated. A reachability-based leak detector may be active}}
{{dsc | pointer_safety::relaxed | All pointers are considered valid and may be dereferenced or deallocated}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/gc/dsc get_pointer_safety}}
{{dsc end}}

[[de:cpp/memory/gc/pointer safety]]
[[es:cpp/memory/gc/pointer safety]]
[[fr:cpp/memory/gc/pointer safety]]
[[it:cpp/memory/gc/pointer safety]]
[[ja:cpp/memory/gc/pointer safety]]
[[pt:cpp/memory/gc/pointer safety]]
[[ru:cpp/memory/gc/pointer safety]]
[[zh:cpp/memory/gc/pointer safety]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/gc/undeclare no pointers</title>
    <ns>0</ns>
    <id>3434</id>
    <revision>
      <id>80261</id>
      <parentid>63341</parentid>
      <timestamp>2015-08-01T12:30:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1039">{{cpp/title|undeclare_no_pointers}}
{{cpp/memory/navbar}}
{{ddcl | header=memory | since=c++11 |
void undeclare_no_pointers( char *p, std::size_t n );
}}

Unregisters a range earlier registered with {{c|std::declare_no_pointers()}}.

===Parameters===
{{par begin}}
{{par | p | pointer to the beginning of the range previosly registered with {{lc|std::declare_no_pointers}}}}
{{par | n | the number of bytes in the range, same value as previously used with {{lc|std::declare_no_pointers}} }}
{{par end}}

===Return value===
(none)

===Exceptions===
None

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/gc/dsc declare_no_pointers}}
{{dsc end}}

[[de:cpp/memory/gc/undeclare no pointers]]
[[es:cpp/memory/gc/undeclare no pointers]]
[[fr:cpp/memory/gc/undeclare no pointers]]
[[it:cpp/memory/gc/undeclare no pointers]]
[[ja:cpp/memory/gc/undeclare no pointers]]
[[pt:cpp/memory/gc/undeclare no pointers]]
[[ru:cpp/memory/gc/undeclare no pointers]]
[[zh:cpp/memory/gc/undeclare no pointers]]</text>
      <sha1>gpij8q8t088l71rprc0bh90oisrrw8w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/gc/undeclare reachable</title>
    <ns>0</ns>
    <id>3432</id>
    <revision>
      <id>80259</id>
      <parentid>63342</parentid>
      <timestamp>2015-08-01T12:30:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1282">{{cpp/title|undeclare_reachable}}
{{cpp/memory/navbar}}
{{ddcl | header=memory | since=c++11 |
template&lt; class T &gt;
T* undeclare_reachable( T* p );
}}

Removes the reachable status of the object, referenced by the pointer {{tt|p}}, if it was previously set by {{lc|std::declare_reachable}}. If the object was declared reachable multiple times, equal number of calls to {{tt|undeclare_reachable}} would be needed to remove this status. Once the object is not declared reachable and has no pointers referencing it, it may be reclaimed by garbage collector or reported as a leak by a leak detector.

===Parameters===
{{par begin}}
{{par | p | a pointer to an object previously declared reachable and not destructed since then}}
{{par end}}

===Return value===
A safely-derived copy of {{tt|p}}.

===Exceptions===
None

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/gc/dsc declare_reachable}}
{{dsc end}}

[[de:cpp/memory/gc/undeclare reachable]]
[[es:cpp/memory/gc/undeclare reachable]]
[[fr:cpp/memory/gc/undeclare reachable]]
[[it:cpp/memory/gc/undeclare reachable]]
[[ja:cpp/memory/gc/undeclare reachable]]
[[pt:cpp/memory/gc/undeclare reachable]]
[[ru:cpp/memory/gc/undeclare reachable]]
[[zh:cpp/memory/gc/undeclare reachable]]</text>
      <sha1>gfdshcmt5dm598zm282yac19fjnie66</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/get default resource</title>
    <ns>0</ns>
    <id>14921</id>
    <revision>
      <id>91386</id>
      <parentid>84254</parentid>
      <timestamp>2017-03-31T19:42:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="898">{{cpp/memory/pmr/title|get_default_resource}}
{{cpp/memory/navbar}}
{{ddcl|header=memory_resource | since=c++17|
std::pmr::memory_resource* get_default_resource();
}}

Gets the default memory resource pointer.

The ''default memory resource pointer'' is used by certain facilities when an explicit memory resource is not supplied. The initial default memory resource pointer is the return value of {{lc|std::pmr::new_delete_resource}}.

This function is thread-safe. Previous call to {{lc|std::pmr::set_default_resource}} ''synchronizes with'' (see {{lc|std::memory_order}}) the subsequent {{tt|std::pmr::get_default_resource}} calls.

=== Return value ===

Returns the value of the default memory resource pointer.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/dsc set_default_resource}}
{{dsc inc|cpp/memory/dsc new_delete_resource}}
{{dsc end}}</text>
      <sha1>sinwg9x2j3qudcrb3dkm1wl3sulws06</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/get temporary buffer</title>
    <ns>0</ns>
    <id>3414</id>
    <revision>
      <id>91762</id>
      <parentid>86276</parentid>
      <timestamp>2017-03-31T19:57:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1545">{{cpp/title|get_temporary_buffer}}
{{cpp/memory/navbar}}
{{ddcl | header=memory | notes={{mark|deprecated in C++17}} | 
template&lt; class T &gt;
std::pair&lt; T*, std::ptrdiff_t &gt; get_temporary_buffer( std::ptrdiff_t count );
}}

Allocates uninitialized contiguous storage, which should be sufficient to store up to {{tt|count}} adjacent objects of type {{tt|T}}. The request is non-binding and the implementation may allocate less or more than necessary to store {{tt|count}} adjacent objects.

===Parameters===
{{par begin}}
{{par | count | the desired number of objects}}
{{par end}}

===Return value===
An {{lc|std::pair}} holding a pointer to the beginning of the allocated storage and the number of objects that fit in the storage that was actually allocated.

If no memory could be allocated, or allocated storage is not enough to store a single element of type {{tt|T}}, the {{tt|first}} element of the result is a null pointer and the {{tt|second}} element is zero.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{include| cpp/memory/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc return_temporary_buffer}}
{{dsc end}}

[[de:cpp/memory/get temporary buffer]]
[[es:cpp/memory/get temporary buffer]]
[[fr:cpp/memory/get temporary buffer]]
[[it:cpp/memory/get temporary buffer]]
[[ja:cpp/memory/get temporary buffer]]
[[pt:cpp/memory/get temporary buffer]]
[[ru:cpp/memory/get temporary buffer]]
[[zh:cpp/memory/get temporary buffer]]</text>
      <sha1>sm717th9fwxgchg4ud3o5hkib8terxs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource</title>
    <ns>0</ns>
    <id>14898</id>
    <revision>
      <id>87976</id>
      <parentid>87974</parentid>
      <timestamp>2016-10-18T01:58:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 87974 by [[Special:Contributions/64.94.36.4|64.94.36.4]] ([[User talk:64.94.36.4|talk]]) they are private in [memory.resource.class] and [memory.resource.private]</comment>
      <text xml:space="preserve" bytes="1031">{{cpp/memory/pmr/title|memory_resource}}
{{cpp/memory/memory_resource/navbar}}
{{ddcl|header=memory_resource | since=c++17 |
class memory_resource;
}}

The class {{tt|std::pmr::memory_resource}} is an abstract interface to an unbounded set of classes encapsulating memory resources.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/memory_resource/dsc constructor}}
{{dsc inc | cpp/memory/memory_resource/dsc destructor}}
{{dsc inc | cpp/memory/memory_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/memory/memory_resource/dsc allocate}}
{{dsc inc | cpp/memory/memory_resource/dsc deallocate}}
{{dsc inc | cpp/memory/memory_resource/dsc is_equal}}

{{dsc h2 | Private member functions}}
{{dsc inc | cpp/memory/memory_resource/dsc do_allocate}}
{{dsc inc | cpp/memory/memory_resource/dsc do_deallocate}}
{{dsc inc | cpp/memory/memory_resource/dsc do_is_equal}}
{{dsc end}}

=== Non-member-functions ===
{{dsc begin}}
{{dsc inc | cpp/memory/memory_resource/dsc operator eq}}
{{dsc end}}</text>
      <sha1>ai1s31ashx1qy3hk14de32a2vig4rkc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/allocate</title>
    <ns>0</ns>
    <id>14917</id>
    <revision>
      <id>84248</id>
      <timestamp>2016-03-16T22:02:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="689">{{cpp/memory/memory_resource/title|allocate}}
{{cpp/memory/memory_resource/navbar}}
{{ddcl|since=c++17|1=
void* allocate(std::size_t bytes,
               std::size_t alignment = alignof(std::max_align_t));
}}

Allocates storage with a size of at least {{tt|bytes}} bytes. The returned storage is aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c| alignof(std::max_align_t)}} otherwise. 

Equivalent to {{c|return do_allocate(bytes, alignment);}}.

=== Exceptions ===
Throws an exception if storage of the requested size and alignment cannot be obtained.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>85o7vhkl28o5fdchttlyw8v9w2ui72b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/deallocate</title>
    <ns>0</ns>
    <id>14918</id>
    <revision>
      <id>85333</id>
      <parentid>84249</parentid>
      <timestamp>2016-04-18T17:27:02Z</timestamp>
      <contributor>
        <ip>195.239.66.226</ip>
      </contributor>
      <comment>return type is void, not pointer</comment>
      <text xml:space="preserve" bytes="701">{{cpp/memory/memory_resource/title|deallocate}}
{{cpp/memory/memory_resource/navbar}}
{{ddcl|since=c++17|1=
void deallocate(void* p,
                std::size_t bytes,
                std::size_t alignment = alignof(std::max_align_t));
}}

Deallocates the storage pointed to by {{tt|p}}. {{tt|p}} shall have been returned by a prior call to {{tt|allocate(bytes, alignment)}} on a {{tt|memory_resource}} that compares equal to {{tt|*this}}, and the storage it points to shall not yet have been deallocated.

Equivalent to {{c|do_deallocate(p, bytes, alignment);}}.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>kuungchys3pr3nsqtcon7j7tflpz5gr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/do allocate</title>
    <ns>0</ns>
    <id>14910</id>
    <revision>
      <id>84241</id>
      <timestamp>2016-03-16T21:55:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="644">{{cpp/memory/memory_resource/title|do_allocate}}
{{cpp/memory/memory_resource/navbar}}
{{ddcl|since=c++17|1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment) = 0;
}}

Allocates storage with a size of at least {{tt|bytes}} bytes. The returned storage is aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c| alignof(std::max_align_t)}} otherwise. 

{{tt|alignment}} shall be a power of two.

=== Exceptions ===
Throws an exception if storage of the requested size and alignment cannot be obtained.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc allocate}}
{{dsc end}}</text>
      <sha1>6kzjhgkx097wkymuf5mqdpdf8m9uooe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/do deallocate</title>
    <ns>0</ns>
    <id>14914</id>
    <revision>
      <id>85334</id>
      <parentid>84245</parentid>
      <timestamp>2016-04-18T17:28:31Z</timestamp>
      <contributor>
        <ip>195.239.66.226</ip>
      </contributor>
      <comment>return type is void, not pointer</comment>
      <text xml:space="preserve" bytes="634">{{cpp/memory/memory_resource/title|do_deallocate}}
{{cpp/memory/memory_resource/navbar}}
{{ddcl|since=c++17|1=
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment) = 0;
}}

Deallocates the storage pointed to by {{tt|p}}.

{{tt|p}} must have been returned by a prior call to {{tt|allocate(bytes, alignment)}} on a {{tt|memory_resource}} that compares equal to {{tt|*this}}, and the storage it points to must not yet have been deallocated, otherwise the behavior is undefined.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>6az4zb72z1j9glq1ac2mew1plw7itu6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/do is equal</title>
    <ns>0</ns>
    <id>14915</id>
    <revision>
      <id>91391</id>
      <parentid>84246</parentid>
      <timestamp>2017-03-31T19:42:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="857">{{cpp/memory/memory_resource/title|do_is_equal}}
{{cpp/memory/memory_resource/navbar}}
{{ddcl|since=c++17|1=
virtual bool is_equal(const std::pmr::memory_resource&amp; other) const = 0;
}}

Compares {{tt|*this}} for equality with {{tt|other}}.

Two {{tt|memory_resource}}s compare equal if and only if memory allocated from one {{tt|memory_resource}} can be deallocated from the other and vice versa.

=== Notes ===
The most-derived type of {{tt|other}} may not match the most derived type of {{tt|*this}}. A derived class implementation therefore must typically check whether the most derived types of {{tt|*this}} and {{tt|other}} match using {{lc|dynamic_cast}}, and immediately return {{tt|false}} if the cast fails.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc is_equal}}
{{dsc end}}</text>
      <sha1>4ef1rrhzwx68dhnkuaixn7a2nqp8izl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/is equal</title>
    <ns>0</ns>
    <id>14908</id>
    <revision>
      <id>91402</id>
      <parentid>84239</parentid>
      <timestamp>2017-03-31T19:42:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="561">{{cpp/memory/memory_resource/title|is_equal}}
{{cpp/memory/memory_resource/navbar}}
{{ddcl|since=c++17|
bool is_equal(const memory_resource&amp; other) const;
}}

Compares {{tt|*this}} for equality with {{tt|other}}. Two {{tt|memory_resource}}s compare equal if and only if memory allocated from one {{tt|memory_resource}} can be deallocated from the other and vice versa.

Equivalent to {{c|return do_is_equal(other);}}.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>i612prdmezbeeyaluyemz2uii6w3ct9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/memory resource</title>
    <ns>0</ns>
    <id>14907</id>
    <revision>
      <id>84238</id>
      <timestamp>2016-03-16T21:53:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="402">{{cpp/memory/memory_resource/title|memory_resource}}
{{cpp/memory/memory_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17| notes={{mark implicit}} | num= 1| 1=
memory_resource() = default;
}}
{{dcl|since=c++17| notes={{mark implicit}} | num= 2| 1=
memory_resource(const memory_resource&amp;) = default;
}}
{{dcl end}}

@1@ Implicitly declared default constructor.
@2@ Implicitly declared copy constructor.</text>
      <sha1>cl6s5s99j10uhr0ej3cd4bqw8mpjh3j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/memory resource/operator eq</title>
    <ns>0</ns>
    <id>14916</id>
    <revision>
      <id>91628</id>
      <parentid>84247</parentid>
      <timestamp>2017-03-31T19:52:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="857">{{cpp/memory/pmr/title|operator{{==}}|operator!{{=}}}}
{{cpp/memory/memory_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17|num = 1 | 1=
 bool operator==(const std::pmr::memory_resource&amp; a,
                 const std::pmr::memory_resource&amp; b);
}}
{{dcl|since=c++17|num = 2 | 1=
 bool operator!=(const std::pmr::memory_resource&amp; a,
                 const std::pmr::memory_resource&amp; b);
}}
{{dcl end}}

Compares the {{tt|memory_resource}}s {{tt|a}} and {{tt|b}} for equality. Two {{tt|memory_resource}}s compare equal if and only if memory allocated from one {{tt|memory_resource}} can be deallocated from the other and vice versa.

=== Return value ===
@1@ {{c|1=&amp;a == &amp;b {{!!}} a.is_equal(b)}}
@2@ {{c|1=!(a == b)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc is_equal}}
{{dsc end}}</text>
      <sha1>4h9m3woe6y5e3pr5pnm8ykfk4df3eg6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource</title>
    <ns>0</ns>
    <id>14968</id>
    <revision>
      <id>87877</id>
      <parentid>84318</parentid>
      <timestamp>2016-10-11T07:29:34Z</timestamp>
      <contributor>
        <ip>131.246.191.248</ip>
      </contributor>
      <text xml:space="preserve" bytes="1546">{{cpp/memory/pmr/title|monotonic_buffer_resource}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{ddcl|header=memory_resource | since=c++17|
class monotonic_buffer_resource : public std::pmr::memory_resource;
}}

The class {{tt|std::pmr::monotonic_buffer_resource}} is a special-purpose memory resource class that releases the allocated memory only when the resource is destroyed. It is intended for very fast memory allocations in situations where memory is used to build up a few objects and then is released all at once.

{{tt|monotonic_buffer_resource}} can be constructed with an initial buffer. If there is no initial buffer, or if the buffer is exhausted, additional buffers are obtained from an ''upstream memory resource'' supplied at construction. The size of buffers obtained follows a geometric progression.

{{tt|monotonic_buffer_resource}} is not thread-safe.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc constructor}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc destructor}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc release}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc upstream_resource}}

{{dsc h2 | Protected member functions}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc do_allocate}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc do_deallocate}}
{{dsc inc | cpp/memory/monotonic_buffer_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>d7igjyawm5qef9gmkpovrzbq3nlcowh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource/do allocate</title>
    <ns>0</ns>
    <id>14985</id>
    <revision>
      <id>84347</id>
      <timestamp>2016-03-17T14:30:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1339">{{cpp/memory/monotonic_buffer_resource/title|do_allocate}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
}}

Allocates storage. 

If the ''current buffer'' has sufficient unused space to fit a block with the specified size and alignment, allocates the return block from the current buffer. 

Otherwise, this function allocates a new buffer by calling {{tt|upstream_resource()-&gt;allocate(n, m)}}, where {{tt|n}} is not less than the greater of {{tt|bytes}} and the ''next buffer size'' and {{tt|m}} is not less than {{tt|alignment}}. It sets the new buffer as the ''current buffer'',  increases the ''next buffer size'' by an implementation-defined growth factor (which is not necessarily integral), and then allocates the return block from the newly allocated buffer.

=== Return value ===
A pointer to allocated storage of at least {{tt|bytes}} bytes in size, aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c|alignof(std::max_align_t)}} otherwise. 

=== Exceptions ===
Throws nothing unless calling {{tt|allocate()}} on the upstream memory resource throws.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc allocate}}
{{dsc inc| cpp/memory/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>2bfjtrs9nkatud0jy1ly018jfr5ag7i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource/do deallocate</title>
    <ns>0</ns>
    <id>14986</id>
    <revision>
      <id>84348</id>
      <timestamp>2016-03-17T14:31:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="567">{{cpp/memory/monotonic_buffer_resource/title|do_deallocate}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment);
}}

This function has no effect. Memory used by a {{tt|monotonic_buffer_resource}}, as its name indicates, increases monotonically until the resource is destroyed.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc deallocate}}
{{dsc inc| cpp/memory/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>l564gj20f7ymxuaq3d5m5jgbvj713z0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource/do is equal</title>
    <ns>0</ns>
    <id>14987</id>
    <revision>
      <id>91377</id>
      <parentid>84349</parentid>
      <timestamp>2017-03-31T19:41:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="604">{{cpp/memory/monotonic_buffer_resource/title|do_is_equal}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual bool do_is_equal(const std::pmr::memory_resource&amp; other) const;
}}

Compare {{tt|*this}} with {{tt|other}} for identity - memory allocated using a {{tt|monotonic_buffer_resource}} can only be deallocated using that same resource.

=== Return value ===
{{c|1=this == dynamic_cast&lt;const monotonic_buffer_resource*&gt;(&amp;other)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>67rd1ufqz3fmmyc9l5zj07ai4rq2gqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource/monotonic buffer resource</title>
    <ns>0</ns>
    <id>14980</id>
    <revision>
      <id>84330</id>
      <timestamp>2016-03-17T14:22:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2043">{{cpp/memory/monotonic_buffer_resource/title|monotonic_buffer_resource}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | num= 1| 1=
monotonic_buffer_resource();
}}
{{dcl|since=c++17| num= 2| 1=
explicit monotonic_buffer_resource(std::pmr::memory_resource* upstream);
}}
{{dcl|since=c++17| num= 3| 1=
explicit monotonic_buffer_resource(std::size_t initial_size);
}}
{{dcl|since=c++17| num= 4| 1=
monotonic_buffer_resource(std::size_t initial_size,
                          std::pmr::memory_resource* upstream);
}}
{{dcl|since=c++17| num= 5| 1=
monotonic_buffer_resource(void* buffer, std::size_t buffer_size);
}}
{{dcl|since=c++17| num= 6| 1=
monotonic_buffer_resource(void* buffer, std::size_t buffer_size,
                          std::pmr::memory_resource* upstream);
}}
{{dcl|since=c++17| num= 7| 1=
monotonic_buffer_resource(const monotonic_buffer_resource&amp;) = delete;
}}
{{dcl end}}

Constructs a {{tt|monotonic_buffer_resource}}. The constructors not taking a upstream memory resource pointer uses the return value of {{lc|std::pmr::get_default_resource}} as the upstream memory resource.

@1-2@ Sets the ''current buffer'' to null and the ''next buffer size'' to an implementation-defined size.
@3-4@ Sets the ''current buffer'' to null and the ''next buffer size'' to a size no smaller than {{tt|initial_size}}.
@5-6@ Sets the ''current buffer'' to {{tt|buffer}} and the ''next buffer size'' to {{tt|buffer_size}} (but not less than 1). Then increase the ''next buffer size'' by an implementation-defined growth factor (which does not have to be integral).
@7@ Copy constructor is deleted.

=== Parameters ===

{{par begin}}
{{par | upstream | the upstream memory resource to use; must point to a valid memory resource }}
{{par | initial_size | the minimum size of the first buffer to allocate; must be greater than zero }}
{{par | buffer | the initial buffer to use }}
{{par | buffer_size | the size of the initial buffer; cannot be greater than the number of bytes in {{ttb|buffer}} }}
{{par end}}</text>
      <sha1>3b31pqnbdl5mh7f6cl0bs4xn8zf7w2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource/release</title>
    <ns>0</ns>
    <id>14983</id>
    <revision>
      <id>84345</id>
      <timestamp>2016-03-17T14:29:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="517">{{cpp/memory/monotonic_buffer_resource/title|release}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | 1=
void release();
}}
{{dcl end}}

Releases all allocated memory by calling the {{tt|deallocate}} function on the upstream memory resource as necessary.

Memory is released back to the upstream resource even if {{tt|deallocate}} has not been called for some of the allocated blocks.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>ed3xesyal5w72olf5gbdnzg39yjcpaz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource/upstream resource</title>
    <ns>0</ns>
    <id>14984</id>
    <revision>
      <id>84346</id>
      <timestamp>2016-03-17T14:30:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="475">{{cpp/memory/monotonic_buffer_resource/title|upstream_resource}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17| 1=
std::pmr::memory_resource* upstream_resource() const;
}}
{{dcl end}}

Returns a pointer to the upstream memory resource. This is the same value as the {{tt|upstream}} argument passed to the constructor of this object.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/monotonic_buffer_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>f73hj46qrs3n4i2nnuuy5d90xqirg6a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/monotonic buffer resource/~monotonic buffer resource</title>
    <ns>0</ns>
    <id>14982</id>
    <revision>
      <id>84344</id>
      <timestamp>2016-03-17T14:29:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="443">{{cpp/memory/monotonic_buffer_resource/title|~monotonic_buffer_resource}}
{{cpp/memory/monotonic_buffer_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | 1=
virtual ~monotonic_buffer_resource();
}}
{{dcl end}}

Destroys a {{tt|monotonic_buffer_resource}}.

Deallocates all memory owned by this resource by calling {{c|this-&gt;release()}}.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/monotonic_buffer_resource/dsc release}}
{{dsc end}}</text>
      <sha1>dp07jaxcrq5hses2k6pr8dgizf7o5i0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new</title>
    <ns>0</ns>
    <id>1329</id>
    <revision>
      <id>87170</id>
      <parentid>58331</parentid>
      <timestamp>2016-07-31T19:48:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+align_val_t, next to nothrow_t</comment>
      <text xml:space="preserve" bytes="1408">{{title|Low level memory management}}
{{cpp/memory/new/navbar}}

The [[cpp/language/new |new-expression]] is the only way to create an object or an array of objects with dynamic storage duration, that is, with lifetime not restricted to the scope in which it is created. A new-expression obtains storage by calling an allocation function. A [[cpp/language/delete |delete-expression]] destroys a most derived object or an array created by a new-expression and calls the deallocation function. The default allocation and deallocation functions, along with related functions, types, and objects, are declared in the header {{tt|&lt;new&gt;}}. 

{{dsc begin}}
{{dsc header |new}}
{{dsc h2 | Functions}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/new/dsc operator_delete}}
{{dsc inc | cpp/memory/new/dsc get_new_handler}}
{{dsc inc | cpp/memory/new/dsc set_new_handler}}
{{dsc h2 | Classes }}
{{dsc inc | cpp/memory/new/dsc bad_alloc}}
{{dsc inc | cpp/memory/new/dsc bad_array_new_length}}
{{dsc inc | cpp/memory/new/dsc nothrow_t}}
{{dsc inc | cpp/memory/new/dsc align_val_t}}
{{dsc h2 | Types }}
{{dsc inc | cpp/memory/new/dsc new_handler}}
{{dsc h2 | Objects}}
{{dsc inc | cpp/memory/new/dsc nothrow}}
{{dsc end}}

[[de:cpp/memory/new]]
[[es:cpp/memory/new]]
[[fr:cpp/memory/new]]
[[it:cpp/memory/new]]
[[ja:cpp/memory/new]]
[[pt:cpp/memory/new]]
[[ru:cpp/memory/new]]
[[zh:cpp/memory/new]]</text>
      <sha1>7dmypow3yt46s37ym03c5tvxzw9aaf7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new delete resource</title>
    <ns>0</ns>
    <id>14919</id>
    <revision>
      <id>91547</id>
      <parentid>84253</parentid>
      <timestamp>2017-03-31T19:49:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="841">{{cpp/memory/pmr/title|new_delete_resource}}
{{cpp/memory/navbar}}
{{ddcl|header=memory_resource | since=c++17|
std::pmr::memory_resource* new_delete_resource();
}}

Returns a pointer to a {{tt|memory_resource}} that uses the global {{lc|operator new}} and {{lc|operator delete}} to allocate memory.

=== Return value ===

Returns a pointer {{tt|p}} to a static storage duration object of a type derived from {{lc|std::pmr::memory_resource}}, with the following properties:
* its {{tt|allocate()}} function uses {{tt|::operator new}} to allocate memory;
* its {{tt|deallocate()}} function uses {{tt|::operator delete}} to deallocate memory;
* for any {{tt|memory_resource}} {{tt|r}}, {{tt|p-&gt;is_equal(r)}} returns {{tt|&amp;r {{==}} p}}.

The same value is returned every time this function is called.

=== Exceptions ===
{{unreviewed noexcept}}</text>
      <sha1>gp3548e7wm9gbym15fn1vzzun6qghw2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/align val t</title>
    <ns>0</ns>
    <id>15677</id>
    <revision>
      <id>87172</id>
      <timestamp>2016-07-31T19:56:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="882">{{cpp/title|align_val_t}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | since=c++17|1=
enum class align_val_t : std::size_t {};
}}
{{dcl end}}

Both [[cpp/language/new|new-expression]] and [[cpp/language/delete|delete-expression]], when used with objects whose alignment requirement is greater than {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}, pass that alignment requirement as an argument of type {{tt|std::align_val_t}} to the selected allocation/deallocation function.

===Notes===
Alignment (as obtained by {{c|alignof}}) has the type {{lc|std::size_t}}, but placement forms of allocation and deallocation functions that take {{lc|std::size_t}} as an additional parameter are already in use, so this type is used instead.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/new/dsc operator_delete}}
{{dsc end}}</text>
      <sha1>4ljnxr6ez8cqfyuwl55sstkglo4q3mw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/bad alloc</title>
    <ns>0</ns>
    <id>3353</id>
    <revision>
      <id>91857</id>
      <parentid>80255</parentid>
      <timestamp>2017-03-31T20:00:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2604">{{cpp/title|bad_alloc}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl |1=
class bad_alloc;
}}
{{dcl end}}

{{tt|std::bad_alloc}} is the type of the object thrown as exceptions by the {{rlp|operator_new|allocation functions}} to report failure to allocate storage.

{{inheritance diagram/std-bad_alloc}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/memory/new/bad_alloc | inlinemem=true | constructs the bad_alloc object}}
{{dsc mem fun | cpp/memory/new/bad_alloc | title=operator{{=}} | inlinemem=true | replaces a bad_alloc object}}
{{dsc mem fun | cpp/memory/new/bad_alloc | title=what | inlinemem=true | returns explanatory string}}
{{dsc end}}

{{member | {{small|std::bad_alloc::}}bad_alloc |
{{ddcl |
bad_alloc();
}}

Constructs new {{tt|bad_alloc}} object with an implementation-defined null-terminated byte string which is accessible through {{ltf|cpp/error/exception/what}}.

===Parameters===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{member | {{small|std::bad_alloc::}}operator{{=}} |
{{dcl begin}}
{{dcl | 1=
bad_alloc&amp; operator=( const bad_alloc&amp; other );
}}
{{dcl end}}

Assigns the contents of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another exception object to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{member | {{small|std::bad_alloc::}}what |
{{dcl begin}}
{{dcl | 
virtual const char* what() const;
}}
{{dcl end}}

Returns the explanatory string.

===Parameters===
(none)

===Return value===
Pointer to a null-terminated string with explanatory information. 

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{cpp/error/exception/inherit}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;new&gt;

int main()
{
    try {
        while (true) {
            new int[100000000ul];
        }
    } catch (const std::bad_alloc&amp; e) {
        std::cout &lt;&lt; &quot;Allocation failed: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | p=true
 | output=
Allocation failed: std::bad_alloc
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc end}}

[[de:cpp/memory/new/bad alloc]]
[[es:cpp/memory/new/bad alloc]]
[[fr:cpp/memory/new/bad alloc]]
[[it:cpp/memory/new/bad alloc]]
[[ja:cpp/memory/new/bad alloc]]
[[pt:cpp/memory/new/bad alloc]]
[[ru:cpp/memory/new/bad alloc]]
[[zh:cpp/memory/new/bad alloc]]</text>
      <sha1>ickgxiy1hiwp9wb1aaknw5wjosqtlw8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/bad alloc/bad alloc</title>
    <ns>0</ns>
    <id>5577</id>
    <redirect title="cpp/memory/new/bad alloc" />
    <revision>
      <id>61600</id>
      <parentid>42659</parentid>
      <timestamp>2013-06-06T06:53:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/memory/new/bad alloc]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/memory/new/bad_alloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/bad alloc/what</title>
    <ns>0</ns>
    <id>8974</id>
    <redirect title="cpp/memory/new/bad alloc" />
    <revision>
      <id>61601</id>
      <parentid>42651</parentid>
      <timestamp>2013-06-06T06:53:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/memory/new/bad alloc]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/memory/new/bad_alloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/bad array new length</title>
    <ns>0</ns>
    <id>3354</id>
    <revision>
      <id>62773</id>
      <parentid>58335</parentid>
      <timestamp>2013-07-01T23:40:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="2095">{{cpp/title|bad_array_new_length}}
{{cpp/memory/new/bad_array_new_length/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | since=c++11 | 1=
class bad_array_new_length;
}}
{{dcl end}}

{{tt|std::bad_array_new_length}} is the type of the object thrown as exceptions by the [[cpp/language/new|new-expressions]] to report invalid array lengths if

1) array length is negative

2) total size of the new array would exceed implementation-defined maximum value

3) the number of initializer-clauses exceeds the number of elements to initialize

Only the first array dimension may generate this exception; dimensions other than the first are constant expressions and are checked at compile time.

{{inheritance diagram/std-bad_array_new_length}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/memory/new/bad_array_new_length/bad_array_new_length | constructs the {{tt|bad_array_new_length}} object}}
{{dsc end}}

{{cpp/memory/new/bad_alloc/inherit}}
{{cpp/error/exception/inherit}}

===Notes===
The override for the virtual member function {{tt|what()}} may by provided, but is not required.

===Example===
{{example
 | Three conditions where {{lc|std::bad_array_new_length}} should be thrown:
 | code=
#include &lt;iostream&gt;
#include &lt;new&gt;
#include &lt;climits&gt;

int main()
{
    int negative = -1;
    int small = 1;
    int large = INT_MAX;
    try {
        new int[negative];           // negative size
        new int[small]{1,2,3};       // too many initializers
        new int[large][1000000];     // too large
    } catch(const std::bad_array_new_length &amp;e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/new/dsc bad_alloc}}
{{dsc end}}

[[de:cpp/memory/new/bad array new length]]
[[es:cpp/memory/new/bad array new length]]
[[fr:cpp/memory/new/bad array new length]]
[[it:cpp/memory/new/bad array new length]]
[[ja:cpp/memory/new/bad array new length]]
[[pt:cpp/memory/new/bad array new length]]
[[ru:cpp/memory/new/bad array new length]]
[[zh:cpp/memory/new/bad array new length]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/bad array new length/bad array new length</title>
    <ns>0</ns>
    <id>5578</id>
    <revision>
      <id>91783</id>
      <parentid>64850</parentid>
      <timestamp>2017-03-31T19:57:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="917">{{cpp/memory/new/bad_array_new_length/title | bad_array_new_length}}
{{cpp/memory/new/bad_array_new_length/navbar}}
{{ddcl | since=c++11 |
bad_array_new_length();
}}

Constructs new {{tt|bad_array_new_length}} object with in implementation-defined null-terminated byte string which is accessible through {{ltf|cpp/error/exception/what}}.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/memory/new/bad array new length/bad array new length]]
[[es:cpp/memory/new/bad array new length/bad array new length]]
[[fr:cpp/memory/new/bad array new length/bad array new length]]
[[it:cpp/memory/new/bad array new length/bad array new length]]
[[ja:cpp/memory/new/bad array new length/bad array new length]]
[[pt:cpp/memory/new/bad array new length/bad array new length]]
[[ru:cpp/memory/new/bad array new length/bad array new length]]
[[zh:cpp/memory/new/bad array new length/bad array new length]]</text>
      <sha1>j32qdo9i4ojls2nufcl3w0766e5yxs6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/get new handler</title>
    <ns>0</ns>
    <id>3349</id>
    <revision>
      <id>91683</id>
      <parentid>72157</parentid>
      <timestamp>2017-03-31T19:54:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1120">{{cpp/title|get_new_handler}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | since=c++11 |1=
std::new_handler get_new_handler();
}}
{{dcl end}}

Returns the currently installed new-handler, which may be a null pointer.

{{rev begin}}
{{rev|since=c++11|
This function is thread-safe. Previous call to {{lc|std::set_new_handler}} ''synchronizes-with'' (see {{lc|std::memory_order}}) the subsequent calls to {{tt|std::get_new_handler}}.
}}
{{rev end}}

===Parameters===
(none)

===Return value===
The currently installed ''new-handler'', which may be a null pointer value.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/new/dsc set_new_handler}}
{{dsc inc | cpp/memory/new/dsc new_handler}}
{{dsc end}}

[[de:cpp/memory/new/get new handler]]
[[es:cpp/memory/new/get new handler]]
[[fr:cpp/memory/new/get new handler]]
[[it:cpp/memory/new/get new handler]]
[[ja:cpp/memory/new/get new handler]]
[[pt:cpp/memory/new/get new handler]]
[[ru:cpp/memory/new/get new handler]]
[[zh:cpp/memory/new/get new handler]]</text>
      <sha1>carkvodky9ogbq4gmsd7xji2e85hakc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/new handler</title>
    <ns>0</ns>
    <id>3350</id>
    <revision>
      <id>58337</id>
      <parentid>50143</parentid>
      <timestamp>2013-06-01T06:12:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="812">{{cpp/title|new_handler}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | |1=
typedef void (*new_handler)();
}}
{{dcl end}}

{{tt|std::new_handler}} is the function pointer type (pointer to function that takes no arguments and returns void), which is used by the functions {{lc|std::set_new_handler}} and {{lc|std::get_new_handler}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/new/dsc set_new_handler}}
{{dsc inc | cpp/memory/new/dsc get_new_handler}}
{{dsc end}}

[[de:cpp/memory/new/new handler]]
[[es:cpp/memory/new/new handler]]
[[fr:cpp/memory/new/new handler]]
[[it:cpp/memory/new/new handler]]
[[ja:cpp/memory/new/new handler]]
[[pt:cpp/memory/new/new handler]]
[[ru:cpp/memory/new/new handler]]
[[zh:cpp/memory/new/new handler]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/nothrow</title>
    <ns>0</ns>
    <id>3352</id>
    <revision>
      <id>58340</id>
      <parentid>50144</parentid>
      <timestamp>2013-06-01T06:12:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1239">{{cpp/title|nothrow}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | |1=
extern const std::nothrow_t nothrow;
}}
{{dcl end}}

{{tt|std::nothrow}} is a constant of type {{lc|std::nothrow_t}} used to disambiguate the overloads of throwing and non-throwing {{rlp|operator_new|allocation functions}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;new&gt;

int main()
{
    try {
        while (true) {
            new int[100000000ul];   // throwing overload
        }
    } catch (const std::bad_alloc&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }

    while (true) {
        int* p = new(std::nothrow) int[100000000ul]; // non-throwing overload
        if (p == nullptr) {
            std::cout &lt;&lt; &quot;Allocation returned nullptr\n&quot;;
            break;
        }
    }
}
 | output=
std::bad_alloc
Allocation returned nullptr
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc nothrow_t}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc end}}

[[de:cpp/memory/new/nothrow]]
[[es:cpp/memory/new/nothrow]]
[[fr:cpp/memory/new/nothrow]]
[[it:cpp/memory/new/nothrow]]
[[ja:cpp/memory/new/nothrow]]
[[pt:cpp/memory/new/nothrow]]
[[ru:cpp/memory/new/nothrow]]
[[zh:cpp/memory/new/nothrow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/nothrow t</title>
    <ns>0</ns>
    <id>3351</id>
    <revision>
      <id>88363</id>
      <parentid>58341</parentid>
      <timestamp>2016-11-17T05:01:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2510, treating as separate versions for now - let's see what vendors do</comment>
      <text xml:space="preserve" bytes="765">{{cpp/title|nothrow_t}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | until=c++17 |1=
struct nothrow_t {};
}}
{{dcl | since=c++17 |1=
struct nothrow_t { explicit nothrow_t() = default; };
}}
{{dcl end}}

{{tt|std::nothrow_t}} is an empty class type used to disambiguate the overloads of throwing and non-throwing {{rlp|operator_new|allocation functions}}. 

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc nothrow}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc end}}

[[de:cpp/memory/new/nothrow t]]
[[es:cpp/memory/new/nothrow t]]
[[fr:cpp/memory/new/nothrow t]]
[[it:cpp/memory/new/nothrow t]]
[[ja:cpp/memory/new/nothrow t]]
[[pt:cpp/memory/new/nothrow t]]
[[ru:cpp/memory/new/nothrow t]]
[[zh:cpp/memory/new/nothrow t]]</text>
      <sha1>acwhzlt6uwiglp6mep087l8jf2gf998</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/operator delete</title>
    <ns>0</ns>
    <id>1330</id>
    <revision>
      <id>91399</id>
      <parentid>87275</parentid>
      <timestamp>2017-03-31T19:42:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="17758">{{title|{{small|operator}} delete{{small|, operator}} delete[]}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl h | replaceable usual deallocation functions}}
{{dcl | num=1 | void operator delete  ( void* ptr ); }}
{{dcl | num=2 | void operator delete[]( void* ptr ); }}
{{dcl | num=3 | void operator delete  ( void* ptr, std::align_val_t al );|since=c++17}}
{{dcl | num=4 | void operator delete[]( void* ptr, std::align_val_t al );|since=c++17}}
{{dcl | since=c++14 | num=5 | void operator delete  ( void* ptr, std::size_t sz ); }}
{{dcl | since=c++14 | num=6 | void operator delete[]( void* ptr, std::size_t sz ); }}
{{dcl | since=c++17 | num=7 | void operator delete  ( void* ptr, std::size_t sz, std::align_val_t al ); }}
{{dcl | since=c++17 | num=8 | void operator delete[]( void* ptr, std::size_t sz, std::align_val_t al ); }}
{{dcl h | replaceable placement deallocation functions}}
{{dcl | num=9 | void operator delete  ( void* ptr, const std::nothrow_t&amp; tag ); }}
{{dcl | num=10 | void operator delete[]( void* ptr, const std::nothrow_t&amp; tag ); }}
{{dcl | num=11 | since=c++17|
void operator delete  ( void* ptr,
                        std::align_val_t al, const std::nothrow_t&amp; tag ); }}
{{dcl | num=12 | since=c++17|
void operator delete[]( void* ptr, 
                        std::align_val_t al, const std::nothrow_t&amp; tag ); }}
{{dcl h | non-allocating placement deallocation functions}}
{{dcl | num=13 | void operator delete  ( void* ptr, void* place ); }}
{{dcl | num=14 | void operator delete[]( void* ptr, void* place ); }}
{{dcl h | user-defined placement deallocation functions}}
{{dcl | num=15 | void operator delete  ( void* ptr, args... ); }}
{{dcl | num=16 | void operator delete[]( void* ptr, args... ); }}
{{dcl h | class-specific usual deallocation functions}}
{{dcl | num=17 | void T::operator delete  ( void* ptr ); }}
{{dcl | num=18 | void T::operator delete[]( void* ptr ); }}
{{dcl | num=19 | since=c++17| void T::operator delete  ( void* ptr, std::align_val_t al ); }}
{{dcl | num=20 | since=c++17| void T::operator delete[]( void* ptr, std::align_val_t al ); }}
{{dcl | num=21 | void T::operator delete  ( void* ptr, std::size_t sz ); }}
{{dcl | num=22 | void T::operator delete[]( void* ptr, std::size_t sz ); }}
{{dcl | num=23 | since=c++17| void T::operator delete  ( void* ptr, std::size_t sz, std::align_val_t al ); }}
{{dcl | num=24 | since=c++17| void T::operator delete[]( void* ptr, std::size_t sz, std::align_val_t al ); }}
{{dcl h | class-specific placement deallocation functions}}
{{dcl | num=25 | void T::operator delete  ( void* ptr, args... ); }}
{{dcl | num=26 | void T::operator delete[]( void* ptr, args... ); }}
{{dcl end}}

Deallocates storage previously allocated by a matching {{lc|operator new}}. These deallocation functions are called by [[cpp/language/delete|delete-expressions]] and by  [[cpp/language/new|new-expressions]] to deallocate memory after destructing (or failing to construct) objects with dynamic storage duration. They may also be called using regular function call syntax.

@1@ Called by [[cpp/language/delete|delete-expressions]] to deallocate storage previously allocated for a single object. The behavior of the standard library implementation of this function is undefined unless {{tt|ptr}} is a null pointer or is a pointer previously obtained from the standard library implementation of {{c|operator new(size_t)}} or {{c|operator new(size_t, std::nothrow_t)}}.
@2@ Called by [[cpp/language/delete|delete[]-expressions]] to deallocate storage previously allocated for an array of objects. The behavior of the standard library implementation of this function is undefined unless {{tt|ptr}} is a null pointer or is a pointer previously obtained from the standard library implementation of {{c|operator new[](size_t)}} or {{c|operator new[](size_t, std::nothrow_t)}}.
@3.4@ Same as {{v|1,2}}, except called if the alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}
@5-6@ Called instead of {{v|1-2}} if a user-defined replacement is provided {{rev inl|since=c++17|except that it's implementation-defined whether {{v|1-2}} or {{v|5-6}} is called when deleting objects of incomplete type and arrays of non-class and trivially-destructible class types}}. A memory allocator can use the given size to be more efficient. The standard library implementations are identical to {{v|1-2}}.
@7-8@ Same as {{v|5-6}}, except called if the alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}

@9@ Called by the non-throwing single-object [[cpp/language/new|new-expressions]] if a constructor of the object throws an exception. The standard library implementation behaves the same as {{v|1}}
@10@ Called by the non-throwing array [[cpp/language/new|new[]-expressions]] if a constructor of any object throws an exception (after executing the destructors of all objects in the array that were successfully constructed). The standard library implementation behaves the same as {{v|2}}
@11,12@ Same as {{v|9,10}}, except called if the alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}

@13@ Called by the standard single-object [[cpp/language/new|placement new]] expression if the object's constructor throws an exception. The standard library implementation of this function does nothing.
@14@ Called by the standard array form of the [[cpp/language/new|placement new]] expression if any of the objects' constructors throws an exception (after executing the destructors of all objects that were constructed successfully). The standard library implementation of this function does nothing. 

@15@ If defined, called by the custom single-object [[cpp/language/new|placement new]] expression with the matching signature if the object's constructor throws an exception. If a class-specific version {{v|25}} is defined, it is called in preference to {{v|9}}. If neither {{v|25}} nor {{v|15}} is provided by the user, no deallocation function is called. 
@16@ If defined, called by the custom array form of [[cpp/language/new|placement new[] ]] expression with the matching signature if any of the objects' constructors throws an exception (after executing the destructors for all objects that were constructed successfully). If a class-specific version {{v|16}} is defined, it is called in preference to {{v|10}}. If neither {{v|26}} nor {{v|16}} is provided by the user, no deallocation function is called

@17@ If defined, called by the usual single-object [[cpp/language/delete|delete-expressions]] if deallocating an object of type T.
@18@ If defined, called by the usual array [[cpp/language/delete|delete[]-expressions]] if deallocating an array of objects of type T.
@19,20@ If defined, called in preference to {{v|17,18}} if the alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}.

@21@ If defined, and if {{v|17}} is not defined, called by the usual single-object [[cpp/language/delete|delete-expressions]] if deallocating an object of type T.
@22@ If defined, and if {{v|18}} is not defined, called by the usual array [[cpp/language/delete|delete[]-expressions]] if deallocating an array of objects of type T.
@23,24@ If defined, and if {{v|19,20}} are not defined, called in preference to allocator-unaware members if the alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}.

@25@ If defined, called by the custom single-object [[cpp/language/new|placement new]] expression with the matching signature if the object's constructor throws an exception. If this function is not provided, and a matching {{v|15}} is not provided either, no deallocation function is called.
@26@ If defined, called by the custom array form of [[cpp/language/new|placement new[] ]] expression with the matching signature if any of the objects' constructors throws an exception (after executing the destructors for all objects that were constructed successfully). If this function is not provided, and a matching {{v|16}} is not provided either, no deallocation function is called.

{{rev begin}}
{{rev|since=c++17|
See [[cpp/language/delete|delete-expression]] for exact details on the overload resolution rules between alignment-aware and alignment-unaware overloads of usual (non-placement) deallocation functions.
}}
{{rev end}}

In all cases, if {{tt|ptr}} is a null pointer, the standard library deallocation functions do nothing. If the pointer passed to the standard library deallocation function was not obtained from the corresponding standard library allocation function, the behavior is undefined.

After the standard library deallocation function returns, all pointers referring to any part of the deallocated storage become invalid.
{{rev begin}}
{{rev|until=c++14|
Any use of a pointer that became invalid in this manner, even copying the pointer value into another variable, is undefined behavior.
}}
{{rev|since=c++14|
Indirection through a pointer that became invalid in this manner and passing it to a deallocation function (double-delete) is undefined behavior. Any other use is implementation-defined.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | ptr | pointer to a memory block to deallocate or a null pointer}}
{{par | sz | the size that was passed to the matching allocation function}}
{{par | place | pointer used as the placement parameter in the matching placement new}}
{{par | tag | overload disambiguation tag matching the tag used by non-throwing operator new}}
{{par | al | alignment of the object or array element that was allocated }}
{{par | args | arbitrary parameters matching a placement allocation function (may include {{lc|std::size_t}} and {{lc|std::align_val_t}}) }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Global replacements===
The replaceable deallocation functions {{v|1-10}} are implicitly declared in each translation unit even if the {{tt|&lt;new&gt;}} header is not included. These functions are ''replaceable'': a user-provided non-member function with the same signature defined anywhere in the program, in any source file, replaces the corresponding implicit version for the entire program. Its declaration does not need to be visible. 

The behavior is undefined if more than one replacement is provided in the program or if a replacement is defined with the {{tt|inline}} specifier, the program is ill-formed if a replacement is defined in namespace other than global namespace, or if it is defined as a static non-member function at global scope. 

{{rev begin}}
{{rev|since=c++11|
The standard library implementations of the nothrow versions {{v|9,10}} directly call the corresponding throwing versions {{v|1,2}}. The standard library implementations of the size-aware deallocation functions {{v|5-8}} directly call the corresponding size-unaware deallocation functions {{v|1-4}}. The standard library implementations of size-unaware throwing array forms {{v|2,4}} directly calls the corresponding single-object forms {{v|1,3}}.

Thus, replacing the throwing single object deallocation functions {{v|1,3}} is sufficient to handle all deallocations.
}}
{{rev end}}

{{example|code=#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
// replacement of a minimal set of functions:
void* operator new(std::size_t sz) {
    std::printf(&quot;global op new called, size = %zu\n&quot;,sz);
    return std::malloc(sz);
}
void operator delete(void* ptr) noexcept
{
    std::puts(&quot;global op delete called&quot;);
    std::free(ptr);
}
int main() {
     int* p1 = new int;
     delete p1;

     int* p2 = new int[10]; // guaranteed to call the replacement in C++11
     delete[] p2;
}
|p=true
|output=
global op new called, size = 4
global op delete called
global op new called, size = 40
global op delete called

}}

Overloads of {{tt|operator delete}} and {{tt|operator delete[]}} with additional user-defined parameters (&quot;placement forms&quot;, {{v|15,16}}) may be declared at global scope as usual, and are called by the matching placement forms of ''new-expressions'' if a constructor of the object that is being allocated throws an exception.

The standard library placement forms of operator delete {{v|13,14}} cannot be replaced and can only be customized if the placement new-expression did not use the {{tt|::new}} syntax, by providing a class-specific placement delete {{v|25,26}} with matching signature: {{tt|void T::operator delete(void*, void*)}} or {{tt|void T::operator delete[](void*, void*)}}.

{{rev begin}}
{{rev|since=c++11|
All deallocation functions are {{tt|noexcept(true)}} unless specified otherwise in the declaration.}}
{{rev end}}

===Class-specific overloads===
Deallocation functions {{v|17-24}} may be defined as static member functions of a class. These deallocation functions, if provided, are called by [[cpp/language/delete|delete-expressions]] when deleting objects {{v|17,19,21}} and arrays {{v|18,20,22}} of this class, unless the delete expression used the form {{tt|::delete}} which bypasses class-scope lookup. The keyword {{tt|static}} is optional for these function declarations: whether the keyword is used or not, the deallocation function is always a static member function.

The delete expression looks for appropriate deallocation function's name starting from the class scope (array form looks in the scope of the array element class) and proceeds to the global scope if no members are found as usual. Note, that as per [[cpp/language/lookup|name lookup rules]], any deallocation functions declared in class scope hides all global deallocation functions.

If the static type of the object that is being deleted differs from its dynamic type (such as when deleting a [[cpp/language/object|polymorphic]] object through a pointer to base), and if the destructor in the static type is virtual, the single object form of delete begins lookup of the deallocation function's name starting from the point of definition of the final overrider of its virtual destructor. Regardless of which deallocation function would be executed at run time, the statically visible version of operator delete must be accessible in order to compile. In other cases, when deleting an array through a pointer to base, or when deleting through pointer to base with non-virtual destructor, the behavior is undefined.

If the single-argument overload {{v|17,18}} is not provided, but the size-aware overload taking {{tt|std::size_t}} as the second parameter {{v|21,22}} is provided, the size-aware form is called for normal deallocation, and the C++ runtime passes the size of the object to be deallocated as the second argument. If both forms are defined, the size-unaware version is called.

{{example
|code=#include &lt;iostream&gt;
// sized class-specific deallocation functions
struct X {
    static void operator delete(void* ptr, std::size_t sz)
    {
        std::cout &lt;&lt; &quot;custom delete for size &quot; &lt;&lt; sz &lt;&lt; '\n';
        ::operator delete(ptr);
    }
    static void operator delete[](void* ptr, std::size_t sz)
    {
        std::cout &lt;&lt; &quot;custom delete for size &quot; &lt;&lt; sz &lt;&lt; '\n';
        ::operator delete(ptr);
    }
};
int main() {
     X* p1 = new X;
     delete p1;
     X* p2 = new X[10];
     delete[] p2;
}
|p=true
|output=
custom delete for size 1
custom delete for size 18
}}

Overloads of {{tt|operator delete}} and {{tt|operator delete[]}} with additional user-defined parameters (&quot;placement forms&quot;, {{v|25,26}}) may also be defined as class members. When the failed placement new expression looks for the corresponding placement delete function to call, it begins lookup at class scope before examining the global scope, and looks for the function with the signature matching the placement new:

{{example|code=
#include &lt;stdexcept&gt;
#include &lt;iostream&gt;
struct X {
    X() { throw std::runtime_error(&quot;&quot;); }
    // custom placement new
    static void* operator new(std::size_t sz, bool b) {
        std::cout &lt;&lt; &quot;custom placement new called, b = &quot; &lt;&lt; b &lt;&lt; '\n';
        return ::operator new(sz);
    }
    // custom placement delete
    static void operator delete(void* ptr, bool b)
    {
        std::cout &lt;&lt; &quot;custom placement delete called, b = &quot; &lt;&lt; b &lt;&lt; '\n';
        ::operator delete(ptr);
    }
};
int main() {
   try {
     X* p1 = new (true) X;
   } catch(const std::exception&amp;) { }
}
|output=
custom placement new called, b = 1
custom placement delete called, b = 1
}}

If class-level {{tt|operator delete}} is a template function, it must have the return type of {{tt|void}}, the first argument {{tt|void*}}, and it must have two or more parameters. In other words, only placement forms can be templates. The specialization of the template operator delete is chosen with [[cpp/language/template argument deduction|template argument deduction]].

===Notes===
The call to the class-specific {{tt|T::operator delete}} on a polymorphic class is the only case where a static member function is called through dynamic dispatch.

{{cpp/memory/thread_safety_note}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2458|std=C++14|before=overloads taking (void*,size_t,const nothrow_t&amp;) were specified, but could never be called|after=spurious overloads removed}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc fun | cpp/memory/return_temporary_buffer | releases uninitialized storage }}
{{dsc fun | cpp/memory/c/free | deallocates memory}}
{{dsc end}}

[[de:cpp/memory/new/operator delete]]
[[es:cpp/memory/new/operator delete]]
[[fr:cpp/memory/new/operator delete]]
[[it:cpp/memory/new/operator delete]]
[[ja:cpp/memory/new/operator delete]]
[[pt:cpp/memory/new/operator delete]]
[[ru:cpp/memory/new/operator delete]]
[[zh:cpp/memory/new/operator delete]]</text>
      <sha1>gdhp9z0w1yu8hejzq3bv97avr9cvp7i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/operator new</title>
    <ns>0</ns>
    <id>1331</id>
    <revision>
      <id>91390</id>
      <parentid>88089</parentid>
      <timestamp>2017-03-31T19:42:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="18108">{{title|{{small|operator}} new{{small|, operator}} new[]}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl h | replaceable allocation functions}}
{{dcl | num=1 | void* operator new  ( std::size_t count );}}
{{dcl | num=2 | void* operator new[]( std::size_t count );}}
{{dcl | num=3 | void* operator new  ( std::size_t count, std::align_val_t al); | since=c++17}}
{{dcl | num=4 | void* operator new[]( std::size_t count, std::align_val_t al); | since=c++17}}
{{dcl h | replaceable non-throwing allocation functions}}
{{dcl | num=5 | void* operator new  ( std::size_t count, const std::nothrow_t&amp; tag);}}
{{dcl | num=6 | void* operator new[]( std::size_t count, const std::nothrow_t&amp; tag);}}
{{dcl | num=7 |
void* operator new  ( std::size_t count,
                      std::align_val_t al, const std::nothrow_t&amp;); | since=c++17}}
{{dcl | num=8 |
void* operator new[]( std::size_t count,
                      std::align_val_t al, const std::nothrow_t&amp;); | since=c++17}}
{{dcl h | non-allocating placement allocation functions}}
{{dcl | num=9 | void* operator new  ( std::size_t count, void* ptr );}}
{{dcl | num=10 | void* operator new[]( std::size_t count, void* ptr );}}
{{dcl h | user-defined placement allocation functions}}
{{dcl | num=11 | void* operator new  ( std::size_t count, user-defined-args... );}}
{{dcl | num=12 | void* operator new[]( std::size_t count, user-defined-args... );}}
{{dcl | num=13 |
void* operator new  ( std::size_t count,
                      std::align_val_t al, user-defined-args... );| since=c++17}}
{{dcl | num=14 |
void* operator new[]( std::size_t count, 
                      std::align_val_t al, user-defined-args... );| since=c++17}}
{{dcl h | class-specific allocation functions}}
{{dcl | num=15 | void* T::operator new  ( std::size_t count );}}
{{dcl | num=16 | void* T::operator new[]( std::size_t count );}}
{{dcl | num=17 | void* T::operator new  ( std::size_t count, std::align_val_t al ); | since=c++17}}
{{dcl | num=18| void* T::operator new[]( std::size_t count, std::align_val_t al ); | since=c++17}}
{{dcl h | class-specific placement allocation functions}}
{{dcl | num=19 | void* T::operator new  ( std::size_t count, user-defined-args... );}}
{{dcl | num=20 | void* T::operator new[]( std::size_t count, user-defined-args... );}}
{{dcl | num=21 |
void* T::operator new  ( std::size_t count,
                         std::align_val_t al, user-defined-args... );| since=c++17}}
{{dcl | num=22 |
void* T::operator new[]( std::size_t count,
                         std::align_val_t al, user-defined-args... );| since=c++17}}
{{dcl end}}

Allocates requested number of bytes. These allocation functions are called by [[cpp/language/new|new-expressions]] to allocate memory in which new object would then be initialized. They may also be called using regular function call syntax.

@1@ Called by non-array [[cpp/language/new|new-expressions]] to allocate storage required for a single object. The standard library implementation allocates {{tt|count}} bytes from free store. In case of failure, the standard library implementation calls the function pointer returned by {{lc|std::get_new_handler}} and repeats allocation attempts until new handler does not return or becomes a null pointer, at which time it throws {{lc|std::bad_alloc}}. This function is required to return a pointer suitably aligned to hold an object of any fundamental alignment.
@2@ Called by the array form of [[cpp/language/new|new[]-expressions]] to allocate all storage required for an array (including possible ''new-expression'' overhead). The standard library implementation calls version {{v|1}}
@3@ Called by non-array [[cpp/language/new|new-expressions]] to allocate storage required for a single object whose alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}
@4@ Called by the array form of [[cpp/language/new|new[]-expressions]] to allocate all storage required for an array of objects whose alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}
@5@ Called by the non-throwing non-array [[cpp/language/new|new-expressions]]. The standard library implementation calls the version {{v|1}} and returns a null pointer on failure instead of propagating the exception.
@6@ Called by the non-throwing array form of [[cpp/language/new|new[]-expressions]]. The standard library implementation calls the version {{v|2}} and returns a null pointer on failure instead of propagating the exception.
@7@ Called by the non-throwing non-array [[cpp/language/new|new-expressions]] when the object's alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. The standard library implementation calls the version {{v|3}} and returns a null pointer on failure instead of propagating the exception.

@8@ Called by the non-throwing array form of [[cpp/language/new|new[]-expressions]] when the alignment requirement of array elements exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. The standard library implementation calls the version {{v|4}} and returns a null pointer on failure instead of propagating the exception.
@9@ Called by the standard single-object [[cpp/language/new|placement new]] expression. The standard library implementation performs no action and returns {{tt|ptr}} unmodified.
@10@ Called by the standard array form [[cpp/language/new|placement new]] expression. The standard library implementation performs no action and returns {{tt|ptr}} unmodified.

@11@ If defined, called by the custom single-object [[cpp/language/new|placement new]] expression with the matching signature. If a class-specific version {{v|19}} is defined, it is called in preference to {{v|11}}. If neither {{v|11}} nor {{v|19}} is provided by the user, the placement new expression is ill-formed.
@12@ If defined, called by the custom array form [[cpp/language/new|placement new]] expression with the matching signature. If a class-specific version {{v|20}} is defined, it is called in preference to {{v|12}}. If neither {{v|12}} nor {{v|20}} is provided by the user, the placement new expression is ill-formed.
@13@ If defined, called by the custom single-object [[cpp/language/new|placement new]] expression with the matching signature if the object's alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. If a class-specific version is defined ({{v|15}} or {{v|17}}), it is called instead. If neither class-specific nor global alignment-aware (this one) placement form is provided, alignment-unaware placement form {{v|11}} is looked up instead.
@14@ If defined, called by the custom array form [[cpp/language/new|placement new]] expression with the matching signature if the element's alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. If a class-specific version ({{v|16}} or {{v|18}}) is defined, it is called instead. If neither class-specific nor global alignment-aware (this one) placement form is provided, alignment-unaware placement form {{v|12}} is looked up instead.

@15@ If defined, called by the usual single-object [[cpp/language/new|new-expressions]] if allocating an object of type T.
@16@ If defined, called by the usual array [[cpp/language/new|new[]-expressions]] if allocating an array of objects of type T.
@17@ If defined, called by the usual single-object [[cpp/language/new|new-expressions]] if allocating an object of type T if its alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. If this overload is not provided, but allocator-unaware member form {{v|15}} is, allocator-unaware member overload is called instead.
@18@ If defined, called by the usual array [[cpp/language/new|new[]-expressions]] if allocating an array of objects of type T if its alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. If this overload is not provided, but allocator-unaware member form {{v|16}} is, allocator-unaware member overload is called instead.

@19@ If defined, called by the custom single-object [[cpp/language/new|placement new]] expression with the matching signature if allocating an object of type T.
@20@ If defined, called by the custom array form of [[cpp/language/new|placement new[] ]] expression with the matching signature if allocating an array of objects of type T.
@21@ If defined, called by the custom single-object [[cpp/language/new|placement new]] expression with the matching signature if allocating an object of type T if its alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. If this overload is not provided, but allocator-unaware member form {{v|19}} is, allocator-unaware member overload is called instead.
@22@ If defined, called by the custom array form of [[cpp/language/new|placement new[] ]] expression with the matching signature if allocating an array of objects of type T. if its alignment requirement exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}. If this overload is not provided, but allocator-unaware member form {{v|20}} is, allocator-unaware member overload is called instead.

===Parameters===
{{par begin}}
{{par | count | number of bytes to allocate}}
{{par | ptr | pointer to a memory area to initialize the object at}}
{{par | tag | disambiguation tag used to select non-throwing overloads}}
{{par | al | alignment to use. The behavior is undefined if this is not a valid alignment value}}
{{par end}}

===Return value===
non-null pointer to suitably aligned memory of size at least {{tt|size}}

===Exceptions===
@1-4,15-18@ throws {{lc|std::bad_alloc}} {{rev inl|since=c++11|or another exception derived from {{lc|std::bad_alloc}}}} on failure to allocate memory

@5-10@ {{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Global replacements===
The versions {{v|1-4}} are implicitly declared in each translation unit even if the {{tt|&lt;new&gt;}} header is not included. Versions {{v|1-8}} are ''replaceable'': a user-provided non-member function with the same signature defined anywhere in the program, in any source file, replaces the default version. Its declaration does not need to be visible.

The behavior is undefined if more than one replacement is provided in the program for any of the  replaceable allocation function, or if a replacement is defined with the {{tt|inline}} specifier. The program is ill-formed if a replacement is defined in namespace other than global namespace, or if it is defined as a static non-member function at global scope.

{{rev begin}}
{{rev|since=c++11|
The standard library implementations of the nothrow versions {{v|5-8}} directly calls the corresponding throwing versions {{v|1-4}}. The standard library implementation of the throwing array versions {{v|2,4}} directly calls the corresponding single-object version {{v|1,3}}. Thus, replacing the throwing single object allocation functions is sufficient to handle all allocations.}}&lt;!--$C2.9[diff.cpp03.language.support]--&gt;
{{rev end}}

{{example|code=#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
// replacement of a minimal set of functions:
void* operator new(std::size_t sz) {
    std::printf(&quot;global op new called, size = %zu\n&quot;,sz);
    return std::malloc(sz);
}
void operator delete(void* ptr) noexcept
{
    std::puts(&quot;global op delete called&quot;);
    std::free(ptr);
}
int main() {
     int* p1 = new int;
     delete p1;

     int* p2 = new int[10]; // guaranteed to call the replacement in C++11
     delete[] p2;
}
|p=true
|output=
global op new called, size = 4
global op delete called
global op new called, size = 40
global op delete called
}}

Overloads of {{tt|operator new}} and {{tt|operator new[]}} with additional user-defined parameters (&quot;placement forms&quot;, versions {{v|11-14}}) may be declared at global scope as usual, and are called by the matching placement forms of ''new-expressions''.

The standard library's non-allocating placement forms of operator new {{v|9-10}} cannot be replaced and can only be customized if the placement new-expression did not use the {{tt|::new}} syntax, by providing a class-specific placement new {{v|19,20}} with matching signature: {{tt|void* T::operator new(size_t, void*)}} or {{tt|void* T::operator new[](size_t, void*)}}.

{{rev begin}}
{{rev|since=c++14|
The placement form {{tt|void* operator new(std::size_t, std::size_t)}} is not allowed because the matching signature of the deallocation function, {{tt|void operator delete(void*, std::size_t)}}, is a usual (not placement) deallocation function.
}}
{{rev end}}

===Class-specific overloads===
Both single-object and array allocation functions may be defined as public static member functions of a class (versions {{v|15-18}}). If defined, these allocation functions are called by [[cpp/language/new|new-expressions]] to allocate memory for single objects and arrays of this class, unless the new expression used the form {{tt|::new}} which bypasses class-scope lookup. The keyword {{tt|static}} is optional for these functions: whether used or not, the allocation function is a static member function.

The new expression looks for appropriate allocation function's name firstly in the class scope, and after that in the global scope. Note, that as per [[cpp/language/lookup|name lookup rules]], any allocation functions declared in class scope hides all global allocation functions for the new-expressions that attempt to allocate objects of this class.

{{rev begin}}
{{rev|since=c++17|
When allocating objects and arrays of objects whose alignment exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}, overload resolution is performed twice: first, for alignment-aware function signatures, then for alignment-unaware function signatures. This means that if a class with extended alignment has an alignment-unaware class-specific allocation function, it is the function that will be called, not the global alignment-aware allocation function. This is intentional: the class member is expected to know best how to handle that class.
}}
{{rev end}}

{{example
|code=
#include &lt;iostream&gt;
// class-specific allocation functions
struct X {
    static void* operator new(std::size_t sz)
    {
        std::cout &lt;&lt; &quot;custom new for size &quot; &lt;&lt; sz &lt;&lt; '\n';
        return ::operator new(sz);
    }
    static void* operator new[](std::size_t sz)
    {
        std::cout &lt;&lt; &quot;custom new for size &quot; &lt;&lt; sz &lt;&lt; '\n';
        return ::operator new(sz);
    }
};
int main() {
     X* p1 = new X;
     delete p1;
     X* p2 = new X[10];
     delete[] p2;
}
|p=true
|output=
custom new for size 1
custom new for size 10
}}

Overloads of {{tt|operator new}} and {{tt|operator new[]}} with additional user-defined parameters (&quot;placement forms&quot;), may also be defined as class members {{v|19-22}}). When the placement new expression with the matching signature looks for the corresponding allocation function to call, it begins at class scope before examining the global scope, and if the class-specific placement new is provided, it is called.

{{rev begin}}
{{rev|since=c++17|
When allocating objects and arrays of objects whose alignment exceeds {{tt|__STDCPP_DEFAULT_NEW_ALIGNMENT__}}, overload resolution for placement forms is performed twice just as for regular forms: first, for alignment-aware function signatures, then for alignment-unaware function signatures.
}}
{{rev end}}

{{example|code=
#include &lt;stdexcept&gt;
#include &lt;iostream&gt;
struct X {
    X() { throw std::runtime_error(&quot;&quot;); }
    // custom placement new
    static void* operator new(std::size_t sz, bool b) {
        std::cout &lt;&lt; &quot;custom placement new called, b = &quot; &lt;&lt; b &lt;&lt; '\n';
        return ::operator new(sz);
    }
    // custom placement delete
    static void operator delete(void* ptr, bool b)
    {
        std::cout &lt;&lt; &quot;custom placement delete called, b = &quot; &lt;&lt; b &lt;&lt; '\n';
        ::operator delete(ptr);
    }
};
int main() {
   try {
     X* p1 = new (true) X;
   } catch(const std::exception&amp;) { }
}
|output=
custom placement new called, b = 1
custom placement delete called, b = 1
}}

If class-level {{tt|operator new}} is a template function, it must have the return type of {{tt|void*}}, the first argument {{tt|std::size_t}}, and it must have two or more parameters. In other words, only placement forms can be templates.

===Notes===
Even though the non-allocating placement new {{v|9,10}} cannot be replaced, a function with the same signature may be defined at class scope as described above. In addition, global overloads that look like placement new but take a non-void pointer type as the second argument are allowed, so the code that wants to ensure that the true placement new is called (e.g. {{lc|std::allocator::construct}}), must use {{tt|::new}} and also cast the pointer to {{tt|void*}}.

{{cpp/memory/thread_safety_note}}

It is unspecified whether library versions of {{tt|operator new}} make any calls to {{lc|std::malloc}} {{rev inl|since=c++17|or {{lc|std::aligned_alloc}}}}

===Example===
{{example | Custom placement forms of operator new can be used for any purpose, for example, to fill the allocated array
|code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

void* operator new[](std::size_t sz, char c)
{
    void* p = operator new[](sz);
    std::fill_n(reinterpret_cast&lt;char*&gt;(p), sz, c);
    return p;
}

int main()
{
    char* p = new('*') char[6];
    p[5] = '\0';
    std::cout &lt;&lt; p &lt;&lt; '\n';
    delete[] p;
}
|output=
*****
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_delete}}
{{dsc inc | cpp/memory/new/dsc get_new_handler}}
{{dsc inc | cpp/memory/new/dsc set_new_handler}}
{{dsc inc | cpp/memory/dsc get_temporary_buffer}}
{{dsc fun | cpp/memory/c/malloc | allocates memory}}
{{dsc fun | cpp/memory/c/aligned_alloc | allocates aligned memory|notes={{mark c++17}}}}
{{dsc end}}

===References===
{{ref std c++11}}
{{ref std | section=18.6 | title=Dynamic memory management | id=support.dynamic}}
{{ref std end}}

[[de:cpp/memory/new/operator new]]
[[es:cpp/memory/new/operator new]]
[[fr:cpp/memory/new/operator new]]
[[it:cpp/memory/new/operator new]]
[[ja:cpp/memory/new/operator new]]
[[pt:cpp/memory/new/operator new]]
[[ru:cpp/memory/new/operator new]]
[[zh:cpp/memory/new/operator new]]</text>
      <sha1>lqq1he9ypp92zaamehbxtzbun64w8q3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/new/set new handler</title>
    <ns>0</ns>
    <id>3348</id>
    <revision>
      <id>91613</id>
      <parentid>80254</parentid>
      <timestamp>2017-03-31T19:51:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2902">{{cpp/title|set_new_handler}}
{{cpp/memory/new/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | |1=
std::new_handler set_new_handler( std::new_handler new_p );
}}
{{dcl end}}

Makes {{tt|new_p}} the new global new-handler function and returns the previously installed new-handler.

The ''new-handler'' function is the function called by {{rlp|operator_new|allocation functions}} whenever a memory allocation attempt fails. Its intended purpose is one of three things:

@1@ make more memory available

@2@ terminate the program (e.g. by calling {{lc|std::terminate}})

@3@ throw exception of type {{lc|std::bad_alloc}} or derived from {{lc|std::bad_alloc}}.

The default implementation throws {{lc|std::bad_alloc}}. The user can install his own ''new-handler'', which may offer behavior different than the default one.

If ''new-handler'' returns, the allocation function repeats the previously-failed allocation attempt and calls the ''new-handler'' again if the allocation fails again. To end the loop, ''new-handler'' may call {{c|std::set_new_handler(nullptr)}}: if, after a failed allocation attempt, allocation function finds that  {{lc|std::get_new_handler}} returns a null pointer value, it will throw {{lc|std::bad_alloc}}.

At program startup, ''new-handler'' is a null pointer.

{{rev begin}}
{{rev|since=c++11|
This function is thread-safe. Every call to {{tt|std::set_new_handler}} ''synchronizes-with'' (see {{lc|std::memory_order}}) the subsequent {{tt|std::set_new_handler}} and {{lc|std::get_new_handler}} calls.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | new_p | pointer to function of type {{lc|std::new_handler}}, or null pointer}}
{{par end}}

===Return value===
The previously-installed new handler, or a null pointer value if none was installed.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;new&gt;

void handler()
{
    std::cout &lt;&lt; &quot;Memory allocation failed, terminating\n&quot;;
    std::set_new_handler(nullptr);
}

int main()
{
    std::set_new_handler(handler);
    try {
        while (true) {
            new int[100000000ul];
        }
    } catch (const std::bad_alloc&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
Memory allocation failed, terminating
std::bad_alloc
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/new/dsc operator_new}}
{{dsc inc | cpp/memory/new/dsc get_new_handler}}
{{dsc inc | cpp/memory/new/dsc new_handler}}
{{dsc inc | cpp/memory/new/dsc bad_alloc}}
{{dsc end}}

[[de:cpp/memory/new/set new handler]]
[[es:cpp/memory/new/set new handler]]
[[fr:cpp/memory/new/set new handler]]
[[it:cpp/memory/new/set new handler]]
[[ja:cpp/memory/new/set new handler]]
[[pt:cpp/memory/new/set new handler]]
[[ru:cpp/memory/new/set new handler]]
[[zh:cpp/memory/new/set new handler]]</text>
      <sha1>24ssz0bcrwv9ejjyedkl8hn3ibvvkwe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/null memory resource</title>
    <ns>0</ns>
    <id>14920</id>
    <revision>
      <id>91806</id>
      <parentid>85636</parentid>
      <timestamp>2017-03-31T19:58:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="745">{{cpp/memory/pmr/title|null_memory_resource}}
{{cpp/memory/navbar}}
{{ddcl|header=memory_resource | since=c++17|
std::pmr::memory_resource* null_memory_resource();
}}

Returns a pointer to a {{tt|memory_resource}} that doesn't perform any allocation.

=== Return value ===

Returns a pointer {{tt|p}} to a static storage duration object of a type derived from {{lc|std::pmr::memory_resource}}, with the following properties:
* its {{tt|allocate()}} function always throws {{lc|std::bad_alloc}};
* its {{tt|deallocate()}} function has no effect;
* for any {{tt|memory_resource}} {{tt|r}}, {{tt|p-&gt;is_equal(r)}} returns {{tt|&amp;r {{==}} p}}.

The same value is returned every time this function is called.

=== Exceptions ===
{{unreviewed noexcept}}</text>
      <sha1>3vfxjv8v50nospzzv4ngdnex7uktp9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/owner less</title>
    <ns>0</ns>
    <id>3307</id>
    <revision>
      <id>91795</id>
      <parentid>90738</parentid>
      <timestamp>2017-03-31T19:58:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4260">{{cpp/title|owner_less}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header|memory}}
{{dcl rev begin | num = 1 }}
{{dcl | since=c++11 | until=c++17 | 1=
template&lt; class T &gt;
struct owner_less; /* undefined */
}}
{{dcl | since=c++17 | 1=
template&lt; class T = void &gt;
struct owner_less; /* undefined */
}}
{{dcl rev end}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct owner_less&lt;std::shared_ptr&lt;T&gt;&gt;;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct owner_less&lt;std::weak_ptr&lt;T&gt;&gt;;
}}
{{dcl | since=c++17 | num=4 | 1=
template&lt;&gt;
struct owner_less&lt;void&gt;;
}}
{{dcl end}}

This function object provides owner-based (as opposed to value-based) mixed-type ordering of both {{lc|std::weak_ptr}} and {{lc|std::shared_ptr}}. The order is such that two smart pointers compare equivalent only if they are both empty or if they both manage the same object, even if the values of the raw pointers obtained by {{tt|get()}} are different (e.g. because they point at different subobjects within the same object)

This class template is the preferred comparison predicate when building associative containers with {{lc|std::shared_ptr}} or {{lc|std::weak_ptr}} as keys, that is, 

{{c|std::map&lt;std::shared_ptr&lt;T&gt;, U, std::owner_less&lt;std::shared_ptr&lt;T&gt;&gt;&gt;}}

or

{{c|std::map&lt;std::weak_ptr&lt;T&gt;, U, std::owner_less&lt;std::weak_ptr&lt;T&gt;&gt;&gt;}}.

The default {{c|operator&lt;}} is not defined for weak pointers, and may wrongly consider two shared pointers for the same object non-equivalent (see {{l2tt|cpp/memory/shared_ptr/owner_before}})

===Specializations===
{{rev begin}}
{{rev | since=c++17 |
The standard library provides a specialization of {{tt|std::owner_less}} when {{tt|T}} is not specified. In this case, the parameter types are deduced from the arguments (each of which must still be either a {{lc|std::shared_ptr}} or a {{lc|std::weak_ptr}}).
{{dsc begin}}
{{dsc inc | cpp/memory/dsc owner_less_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}}{{mark|deprecated in c++17}} | 2-3) {{c|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in c++17}} | 2) {{c|std::shared_ptr&lt;T&gt;}}&lt;br&gt;3) {{c|std::weak_ptr&lt;T&gt;}}}}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in c++17}} | 2) {{c|std::shared_ptr&lt;T&gt;}}&lt;br&gt;3) {{c|std::weak_ptr&lt;T&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc fun | cpp/memory/owner_less | title=operator() | inlinemem=true | compares its arguments using owner-based semantics}}
{{dsc end}}

{{member | {{small|std::owner_less::}}operator() |
{{dcl begin}}
{{dcl | since=c++11 | notes={{mark|member only of {{tt|owner_less&lt;shared_ptr&lt;T&gt;&gt;}} template specialization}} | 
bool operator()( const std::shared_ptr&lt;T&gt;&amp; lhs, 
                 const std::shared_ptr&lt;T&gt;&amp; rhs ) const;
}}
{{dcl | since=c++11 |
bool operator()( const std::shared_ptr&lt;T&gt;&amp; lhs, 
                 const std::weak_ptr&lt;T&gt;&amp; rhs ) const;
}}
{{dcl | since=c++11 |
bool operator()( const std::weak_ptr&lt;T&gt;&amp; lhs, 
                 const std::shared_ptr&lt;T&gt;&amp; rhs ) const;
}}
{{dcl | since=c++11 | notes={{mark|member only of {{tt|owner_less&lt;weak_ptr&lt;T&gt;&gt;}} template specialization}} | 
bool operator()( const std::weak_ptr&lt;T&gt;&amp; lhs, 
                 const std::weak_ptr&lt;T&gt;&amp; rhs ) const;
}}
{{dcl end}}

Compares {{tt|lhs}} and {{tt|rhs}} using owner-based semantics. Effectively calls {{c|lhs.owner_before(rhs)}}.

The ordering is strict weak ordering relation.

{{tt|lhs}} and {{tt|rhs}} are equivalent only if they are both empty or share ownership.

===Parameters===
{{par begin}}
{{par | lhs, rhs | shared-ownership pointers to compare}}
{{par end}}

===Return value===
{{c|true}} if {{tt|lhs}} is ''less than'' {{tt|rhs}} as determined by the owner-based ordering.

=== Exceptions ===
{{rev begin}}
{{rev | until=c++17 | (none)}}
{{rev | since=c++17 | {{unreviewed noexcept}}}}
{{rev end}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc owner_before}}
{{dsc inc | cpp/memory/weak_ptr/dsc owner_before}}
{{dsc end}}

[[de:cpp/memory/owner less]]
[[es:cpp/memory/owner less]]
[[fr:cpp/memory/owner less]]
[[it:cpp/memory/owner less]]
[[ja:cpp/memory/owner less]]
[[pt:cpp/memory/owner less]]
[[ru:cpp/memory/owner less]]
[[zh:cpp/memory/owner less]]</text>
      <sha1>oyak8f3h2kja2vh4np1f63bc6mfw1tk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/owner less void</title>
    <ns>0</ns>
    <id>14488</id>
    <revision>
      <id>91724</id>
      <parentid>90739</parentid>
      <timestamp>2017-03-31T19:55:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1979">{{cpp/title|owner_less}}
{{cpp/memory/navbar}}
{{ddcl | header = memory | since=c++17 | 1=
template&lt;&gt;
struct owner_less&lt;void&gt;;
}}

{{c|std::owner_less&lt;&gt;}} is a specialization of {{lc|std::owner_less}} with parameter types deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */ }}
{{dsc end}}

=== Notes ===
{{cpp/utility/functional/is_transparent_note}}

===Member functions===
{{dsc begin}}
{{dsc fun | cpp/memory/owner_less_void | title=operator() | inlinemem=true | compares its arguments using owner-based semantics}}
{{dsc end}}

{{member | {{small|std::owner_less&lt;void&gt;::}}operator() |
{{dcl begin}}
{{dcl | since=c++17 | 
template&lt;class T, class U&gt;
bool operator()( const std::shared_ptr&lt;T&gt;&amp; lhs, 
                 const std::shared_ptr&lt;U&gt;&amp; rhs ) const;
}}
{{dcl | since=c++17 |
template&lt;class T, class U&gt;
bool operator()( const std::shared_ptr&lt;T&gt;&amp; lhs, 
                 const std::weak_ptr&lt;U&gt;&amp; rhs ) const;
}}
{{dcl | since=c++17 | 
template&lt;class T, class U&gt;
bool operator()( const std::weak_ptr&lt;T&gt;&amp; lhs, 
                 const std::shared_ptr&lt;U&gt;&amp; rhs ) const;
}}
{{dcl | since=c++17 |
template&lt;class T, class U&gt;
bool operator()( const std::weak_ptr&lt;T&gt;&amp; lhs, 
                 const std::weak_ptr&lt;U&gt;&amp; rhs ) const;
}}
{{dcl end}}

Compares {{tt|lhs}} and {{tt|rhs}} using owner-based semantics. Effectively calls {{c|lhs.owner_before(rhs)}}.

The ordering is strict weak ordering relation.

{{tt|lhs}} and {{tt|rhs}} are equivalent only if they are both empty or share ownership.

===Parameters===
{{par begin}}
{{par | lhs, rhs | shared-ownership pointers to compare}}
{{par end}}

===Return value===
{{c|true}} if {{tt|lhs}} is ''less than'' {{tt|rhs}} as determined by the owner-based ordering.

=== Exceptions ===
{{unreviewed noexcept}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc owner_before}}
{{dsc inc | cpp/memory/weak_ptr/dsc owner_before}}
{{dsc end}}</text>
      <sha1>ofo5nme2y8stsynpwc44noej39rs5zc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/pointer traits</title>
    <ns>0</ns>
    <id>3438</id>
    <revision>
      <id>89326</id>
      <parentid>89071</parentid>
      <timestamp>2017-01-18T13:40:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>maybe this way it's easier to read</comment>
      <text xml:space="preserve" bytes="3782">{{cpp/title|pointer_traits}}
{{cpp/memory/navbar}}

{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++11 | num=1 | 1= 
template&lt; class Ptr &gt; struct pointer_traits;
}}
{{dcl | since=c++11 | num=2 | 1= 
template&lt; class T &gt; struct pointer_traits&lt;T*&gt;;
}}
{{dcl end}}

The {{tt|pointer_traits}} class template provides the standardized way to access certain properties of pointer-like types ([[cpp/concept/Allocator#Fancy_pointers|fancy pointers]], such as [http://www.boost.org/doc/libs/release/doc/html/interprocess/offset_ptr.html boost::interprocess::offset_ptr]). The standard template {{lc|std::allocator_traits}} relies on {{tt|pointer_traits}} to determine the defaults for various typedefs required by {{concept|Allocator}}.

1) The non-specialized {{tt|pointer_traits}} declares the following types:
&lt;div class=&quot;t-member&quot;&gt;
===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|pointer}} | {{c|Ptr}} }}
{{dsc | {{tt|element_type}} | {{c|Ptr::element_type}} if present. Otherwise {{tt|T}} if {{tt|Ptr}} is a template instantiation {{c|Template&lt;T, Args...&gt;}}  }}
{{dsc | {{tt|difference_type}} | {{c|Ptr::difference_type}} if present, otherwise {{lc|std::ptrdiff_t}} }}
{{dsc end}}

===Member alias templates===
{{dsc begin}}
{{dsc hitem | Template  | Definition }}
{{dsc | template &lt;class U&gt; using rebind | {{c|Ptr::rebind&lt;U&gt;}} if exists, otherwise {{c|Template&lt;U, Args...&gt;}} if {{tt|Ptr}} is a template instantiation {{c|Template&lt;T, Args...&gt;}}  }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/pointer_traits/dsc pointer_to}}
{{dsc end}}
&lt;/div&gt;

2) A specialization is provided for pointer types, {{tt|T*}}, which declares the following types
&lt;div class=&quot;t-member&quot;&gt;
===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|pointer}} | {{c|T*}} }}
{{dsc | {{tt|element_type}} | {{c|T}} }}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
{{dsc end}}

===Member alias templates===
{{dsc begin}}
{{dsc hitem | Template | Definition }}
{{dsc | template&lt; class U &gt; using rebind | {{c|U*}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/pointer_traits/dsc pointer_to}}
{{dsc end}}
&lt;/div&gt;

===Notes===
The rebind member template alias makes it possible, given a pointer-like type that points to T, to obtain the same pointer-like type that points to U. For example, 

{{source|
typedef std::pointer_traits&lt;std::shared_ptr&lt;int&gt;&gt;::rebind&lt;double&gt; another_pointer;
static_assert(std::is_same&lt;another_pointer, std::shared_ptr&lt;double&gt;&gt;::value, &quot;&quot;);
}}

===Example===
{{example|
| code= 
#include &lt;memory&gt;
#include &lt;iostream&gt;

template &lt;class Ptr&gt;
struct BlockList
{
   // Predefine a memory block 
   struct block;
   
   // Define a pointer to a memory block from the kind of pointer Ptr s
   // If Ptr is any kind of T*, block_ptr_t is block*
   // If Ptr is smart_ptr&lt;T&gt;, block_ptr_t is smart_ptr&lt;block&gt;
   typedef typename std::pointer_traits&lt;Ptr&gt;::template rebind&lt;block&gt; block_ptr_t;
            
   struct block
   {
      std::size_t size;
      block_ptr_t next_block;
   }; 
   
   block_ptr_t free_blocks;
}; 

int main()
{
    BlockList&lt;int*&gt; bl1;
    // The type of bl1.free_blocks is block*

    BlockList&lt;std::shared_ptr&lt;char&gt;&gt; bl2;
    // The type of bl2.free_blocks is std::shared_ptr&lt;block&gt;
    std::cout &lt;&lt; bl2.free_blocks.use_count() &lt;&lt; '\n';
}
| output=
0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator_traits}}
{{dsc inc | cpp/memory/dsc addressof}}
{{dsc end}}

[[de:cpp/memory/pointer traits]]
[[es:cpp/memory/pointer traits]]
[[fr:cpp/memory/pointer traits]]
[[it:cpp/memory/pointer traits]]
[[ja:cpp/memory/pointer traits]]
[[pt:cpp/memory/pointer traits]]
[[ru:cpp/memory/pointer traits]]
[[zh:cpp/memory/pointer traits]]</text>
      <sha1>5yt1gyhm7v3q0qkjjel220sl2qxicd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/pointer traits/pointer to</title>
    <ns>0</ns>
    <id>9322</id>
    <revision>
      <id>91712</id>
      <parentid>89065</parentid>
      <timestamp>2017-03-31T19:55:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2018">{{cpp/memory/pointer_traits/title|pointer_to}}
{{cpp/memory/pointer_traits/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++11 | num=1 | notes={{mark|member of {{tt|pointer_traits&lt;Ptr&gt;}} specialization}} |
static pointer pointer_to( element_type&amp; r );
}}
{{dcl | since=c++11 | num=2 | notes={{mark|member of {{tt|pointer_traits&lt;T*&gt;}} specialization}} |
static pointer pointer_to( element_type&amp; r );
}}
{{dcl end}}

Constructs a dereferenceable pointer or pointer-like object (&quot;fancy pointer&quot;) to its argument.

@1@ The version of this function in the non-specialized {{lc|std::pointer_traits}} template simply calls {{c|Ptr::pointer_to(r)}}, and if Ptr does not provide a static member function {{tt|pointer_to}}, instantiation of this function is a compile-time error.
@2@ The version of this function in the specialization of {{lc|std::pointer_traits}} for pointer types returns {{c|std::addressof(r)}}

===Parameters===
{{par begin}}
{{par | r | reference to an object of type {{c|element_type&amp;}}, except if element_type is {{c|void}}, in which case the type of {{tt|r}} is unspecified }}
{{par end}}

===Return value===
A dereferenceable pointer to {{tt|r}}, of the type pointer_traits&lt;&gt;::pointer.

===Exceptions===
@1@ Unspecified (typically same as {{c|Ptr::pointer_to}})
@2@ {{unreviewed noexcept}}

===Notes===
The [http://www.boost.org/doc/libs/release/doc/html/boost/intrusive/pointer_traits.html boost library version] of this function returns {{c|pointer(std::addressof(r))}} if Ptr::pointer_to does not exist.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc addressof}}
{{dsc inc | cpp/memory/allocator/dsc address}}
{{dsc end}}

[[de:cpp/memory/pointer traits/pointer to]]
[[es:cpp/memory/pointer traits/pointer to]]
[[fr:cpp/memory/pointer traits/pointer to]]
[[it:cpp/memory/pointer traits/pointer to]]
[[ja:cpp/memory/pointer traits/pointer to]]
[[pt:cpp/memory/pointer traits/pointer to]]
[[ru:cpp/memory/pointer traits/pointer to]]
[[zh:cpp/memory/pointer traits/pointer to]]</text>
      <sha1>fv30vhgbnv906g1ythr4va812wtig7c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator</title>
    <ns>0</ns>
    <id>14864</id>
    <revision>
      <id>86042</id>
      <parentid>85335</parentid>
      <timestamp>2016-06-13T22:30:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>spell out some potential caveats</comment>
      <text xml:space="preserve" bytes="1993">{{cpp/memory/pmr/title|polymorphic_allocator}}
{{cpp/memory/polymorphic_allocator/navbar}}
{{ddcl|header=memory_resource | since=c++17 |
template&lt; class T &gt;
class polymorphic_allocator;
}}

The class template {{tt|std::pmr::polymorphic_allocator}} is an {{concept|Allocator}} whose allocation behavior depends on the memory resource it is constructed with. Thus, different instances of {{tt|polymorphic_allocator}} can exhibit entirely different allocation behavior. This runtime polymorphism allows objects using {{tt|polymorphic_allocator}} to behave as if they used different allocator types at run time despite the identical static allocator type.

=== Member types ===
{{dsc begin}}
{{dsc hitem| Member type | definition}}
{{dsc |{{tt|value_type}} | {{tt|T}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc constructor}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc destructor}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc allocate}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc deallocate}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc construct}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc destroy}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc select_on_container_copy_construction}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc resource}}
{{dsc end}}

=== Non-member functions ===
{{dsc begin}}
{{dsc inc | cpp/memory/polymorphic_allocator/dsc operator eq}}
{{dsc end}}

=== Notes ===
{{tt|polymorphic_allocator}} does not propagate on container copy assignment, move assignment, or swap. As a result, move assignment of a {{tt|polymorphic_allocator}}-using container can throw, and swapping two {{tt|polymorphic_allocator}}-using containers whose allocators do not compare equal results in undefined behavior.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc memory_resource}}
{{dsc end}}</text>
      <sha1>9cyxqkez31p0i2nf3cn73b2ueh9d47f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/allocate</title>
    <ns>0</ns>
    <id>14881</id>
    <revision>
      <id>84209</id>
      <parentid>84204</parentid>
      <timestamp>2016-03-16T16:19:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo in the original</comment>
      <text xml:space="preserve" bytes="660">{{cpp/memory/polymorphic_allocator/title|allocate}}
{{cpp/memory/polymorphic_allocator/navbar}}

{{ddcl | since=c++17 | 
T* allocate( std::size_t n );
}}

Allocates storage for {{tt|n}} objects of type {{tt|T}} using the underlying memory resource. Equivalent to {{tt|return static_cast&lt;T*&gt;(this-&gt;resource()-&gt;allocate(n * sizeof(T), alignof(T)));}}

===Parameters===
{{par begin}}
{{par | n | the number of objects to allocate storage for }}
{{par end}}

===Return value===
A pointer to the allocated storage.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator traits/dsc allocate}}
{{dsc inc | cpp/memory/memory resource/dsc allocate}}
{{dsc end}}</text>
      <sha1>ire2ex4s7khn8exchwujgr2l7561ci7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/construct</title>
    <ns>0</ns>
    <id>14888</id>
    <revision>
      <id>84213</id>
      <parentid>84212</parentid>
      <timestamp>2016-03-16T16:22:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>pmr</comment>
      <text xml:space="preserve" bytes="5618">{{cpp/memory/polymorphic_allocator/title|construct}}
{{cpp/memory/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=c++17| num=1 |
template &lt; class U, class... Args &gt;
void construct( U* p, Args&amp;&amp;... args );
}}
{{dcl | since=c++17| num=2 |
template&lt; class T1, class T2, class... Args1, class... Args2 &gt;
void construct( std::pair&lt;T1, T2&gt;* p,
                std::piecewise_construct_t,
                std::tuple&lt;Args1...&gt; x,
                std::tuple&lt;Args2...&gt; y );
}}
{{dcl | since=c++17| num=3 |
template&lt; class T1, class T2 &gt;
void construct( std::pair&lt;T1, T2&gt;* p );
}}
{{dcl | since=c++17| num=4|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, U&amp;&amp; x, V&amp;&amp; y );
}}
{{dcl | since=c++17| num=5|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, const std::pair&lt;U, V&gt;&amp; xy );
}}
{{dcl |  since=c++17| num=6|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, std::pair&lt;U, V&gt;&amp;&amp; xy );
}}
{{dcl end}}

Constructs an object in allocated, but not initialized storage pointed to by {{tt|p}} the provided constructor arguments. If the object is of type that itself uses allocators, or if it is std::pair, passes {{tt|this-&gt;resource()}} down to the constructed object.

1) If {{c|1=std::uses_allocator&lt;U, memory_resource*&gt;::value==false}} (the type {{tt|U}} does not use allocators) and {{c|1=std::is_constructible&lt;U, Args...&gt;::value==true}}, then constructs the object as if by {{c|::new((void *) p) U(std::forward&lt;Args&gt;(args)... ); }}.

Otherwise, if {{c|1=std::uses_allocator&lt;U, memory_resource*&gt;::value==true}} (the type {{tt|U}} uses allocators, e.g. it is a container) and {{c|1=std::is_constructible&lt;U, std::allocator_arg_t, memory_resource*, Args...&gt;::value==true}}, then constructs the object as if by {{c|::new((void *) p) U(std::allocator_arg, this-&gt;resource(), std::forward&lt;Args&gt;(args)... ); }}.

Otherwise, if {{c|1=std::uses_allocator&lt;U, memory_resource*&gt;::value==true}} (the type {{tt|U}} uses allocators, e.g. it is a container) and {{c|1=std::is_constructible&lt;U, Args..., memory_resource*&gt;::value==true}}, then constructs the object as if by {{c|::new((void *) p) U(std::forward&lt;Args&gt;(args)..., this-&gt;resource()); }}.

Otherwise, the program is ill-formed.

2) First, if either {{tt|T1}} or {{tt|T2}} is allocator-aware, modifies the tuples {{tt|x}} and {{tt|y}} to include {{tt|this-&gt;resource()}}, resulting in the two new tuples {{tt|xprime}} and {{tt|yprime}}, according to the following three rules:

2a) if {{tt|T1}} is not allocator-aware ({{c|1=std::uses_allocator&lt;T1, memory_resource*&gt;::value==false}}) and {{c|1=std::is_constructible&lt;T1, Args1...&gt;::value==true}}, then {{tt|xprime}} is {{tt|x}}, unmodified.

2b) if {{tt|T1}} is allocator-aware ({{c|1=std::uses_allocator&lt;T1, memory_resource*&gt;::value==true}}), and its constructor takes an allocator tag ({{c|1=std::is_constructible&lt;T1, std::allocator_arg_t, memory_resource*, Args1...&gt;::value==true}}, then {{tt|xprime}} is
{{c|std::tuple_cat(std::make_tuple(std::allocator_arg, this-&gt;resource()), std::move(x))}}

2c) if {{tt|T1}} is allocator-aware ({{c|1=std::uses_allocator&lt;T1, memory_resource*&gt;::value==true}}), and its constructor takes the allocator as the last argument ({{c|1=std::is_constructible&lt;T1, Args1..., memory_resource*&gt;::value==true}}), then {{tt|xprime}} is  {{c|std::tuple_cat(std::move(x), std::make_tuple(this-&gt;resource()))}}.

2d) Otherwise, the program is ill-formed.

Same rules apply to {{tt|T2}} and the replacement of {{tt|y}} with {{tt|yprime}}.

Once {{tt|xprime}} and {{tt|yprime}} are constructed, constructs the pair {{tt|p}} in allocated storage as if by {{c|::new((void *) p) pair&lt;T1, T2&gt;(std::piecewise_construct, std::move(xprime), std::move(yprime));}}

3) Equivalent to {{c|construct(p, std::piecewise_construct, std::tuple&lt;&gt;(), std::tuple&lt;&gt;())}}, that is, passes the memory resource on to the pair's member types if they accept them.

4) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward&lt;U&gt;(x)),
                                       std::forward_as_tuple(std::forward&lt;V&gt;(y)))
}}

5) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(xy.first),
                                       std::forward_as_tuple(xy.second))
}}

6) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward&lt;U&gt;(xy.first)),
                                       std::forward_as_tuple(std::forward&lt;V&gt;(xy.second)))
}}

===Parameters===
{{par begin}}
{{par | p | pointer to allocated, but not initialized storage }}
{{par | args... | the constructor arguments to pass to the constructor of {{tt|T}} }}
{{par | x | the constructor arguments to pass to the constructor of {{tt|T1}} }}
{{par | y | the constructor arguments to pass to the constructor of {{tt|T2}} }}
{{par | xy | the pair whose two members are the constructor arguments for {{tt|T1}} and {{tt|T2}} }}
{{par end}}

===Return value===
(none)

===Notes===
This function is called (through {{lc|std::allocator_traits}}) by any allocator-aware object, such as {{lc|std::pmr::vector}} (or another {{lc|std::vector}} that was given a {{tt|std::std::polymorphic_allocator}} as the allocator to use). Since {{tt|memory_resource*}} implicitly converts to {{tt|polymorphic_allocator}}, the memory resource pointer will propagate to any allocator-aware subobjects using polymorphic allocators. 

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc construct}}
{{dsc inc | cpp/memory/allocator/dsc construct}}
{{dsc end}}</text>
      <sha1>e4jj73bw353zzfpn2pmrbeloq56dt86</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/deallocate</title>
    <ns>0</ns>
    <id>14884</id>
    <revision>
      <id>84207</id>
      <timestamp>2016-03-16T16:18:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="807">{{cpp/memory/polymorphic_allocator/title|deallocate}}
{{cpp/memory/polymorphic_allocator/navbar}}

{{ddcl | since=c++17 | 
void deallocate(T* p, std::size_t n );
}}

Deallocates the storage pointed to by {{tt|p}}, which must have been allocated from a {{lc|std::pmr::memory_resource}} {{tt|x}} that compares equal to {{tt|*resource()}} using {{tt|x.allocate(n * sizeof(T), alignof(T))}}.

Equivalent to {{tt|this-&gt;resource()-&gt;deallocate(p, n * sizeof(T), alignof(T));}}

===Parameters===
{{par begin}}
{{par | p | pointer to memory to deallocate }}
{{par | n | the number of objects originally allocated }}
{{par end}}

===Exceptions===
Throws nothing.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator traits/dsc deallocate}}
{{dsc inc | cpp/memory/memory resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>lm1gdm6y1e39si0ffkumfqctikh1bhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/destroy</title>
    <ns>0</ns>
    <id>14890</id>
    <revision>
      <id>84215</id>
      <timestamp>2016-03-16T16:24:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="453">{{cpp/memory/polymorphic_allocator/title|destroy}}
{{cpp/memory/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=c++17| 
template&lt;class U&gt;
void destroy(U* p);
}}
{{dcl end}}

Destroys the object pointed to by {{tt|p}}, as if by calling {{c|p-&gt;~U()}}.

===Parameters===
{{par begin}}
{{par | p | pointer to the object being destroyed }}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc destroy}}
{{dsc end}}</text>
      <sha1>pab1k1he7kiz3ps4xv1az0bncdodgxr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/operator eq</title>
    <ns>0</ns>
    <id>14896</id>
    <revision>
      <id>91859</id>
      <parentid>84221</parentid>
      <timestamp>2017-03-31T20:00:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="933">{{cpp/memory/pmr/title|operator{{==}}|operator!{{=}}}}
{{cpp/memory/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | 1=
template&lt; class T1, class T2 &gt;
bool operator==( const std::pmr::polymorphic_allocator&lt;T1&gt;&amp; lhs,
                 const std::pmr::polymorphic_allocator&lt;T2&gt;&amp; rhs );
}}
{{dcl | 1=
template&lt; class T1, class T2 &gt;
bool operator!=( const std::pmr::polymorphic_allocator&lt;T1&gt;&amp; lhs,
                 const std::pmr::polymorphic_allocator&lt;T2&gt;&amp; rhs );
}}
{{dcl end}}

Compares two polymorphic allocators. Two polymorphic allocators compare equal if their underlying memory resource compares equal.

@1@ Returns {{c|1=*lhs.resource() == *rhs.resource()}}
@2@ Returns {{c|1=!(lhs == rhs)}}

===Parameters===
{{par begin}}
{{par | lhs, rhs | polymorphic allocators to compare}}
{{par end}}

===Return value===
@1@ {{c|1=*lhs.resource() == *rhs.resource()}}
@2@ {{c|1=!(lhs == rhs)}}

===Exceptions===
{{unreviewed noexcept}}</text>
      <sha1>qiilk4mq0ek2hht2a2ljc97vyt8409i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/polymorphic allocator</title>
    <ns>0</ns>
    <id>14875</id>
    <revision>
      <id>91459</id>
      <parentid>86041</parentid>
      <timestamp>2017-03-31T19:45:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1606">{{cpp/memory/polymorphic_allocator/title|polymorphic_allocator}}
{{cpp/memory/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl| num=1 | 1=
polymorphic_allocator();
}}
{{dcl| num=2 | 1=
polymorphic_allocator( const polymorphic_allocator&amp; other ) = default;
}}
{{dcl| num=3 | 1=
template&lt; class U &gt; 
polymorphic_allocator( const polymorphic_allocator&lt;U&gt;&amp; other );
}}
{{dcl| num=4 | 1=
polymorphic_allocator( memory_resource* r);
}}
{{dcl end}}

Constructs a new {{tt|polymorphic_allocator}}.
@1@ Constructs a {{tt|polymorphic_allocator}} using the return value of {{c|std::pmr::get_default_resource()}} as the underlying memory resource.
@2-3@  Constructs a {{tt|polymorphic_allocator}} using {{c|other.resource()}} as the underlying memory resource.
@4@ Constructs a {{tt|polymorphic_allocator}} using {{tt|r}} as the underlying memory resource. This constructor provides an implicit conversion from {{tt|memory_resource*}}.

===Parameters===
{{par begin}}
{{par| other | another {{tt|polymorphic_allocator}} to copy from}}
{{par| r | pointer to the memory resource to use. May not be null. }}
{{par end}}

===Exceptions===
@1,3@ {{unreviewed noexcept}}
@4@ Throws nothing.

=== Notes ===
Copying a container using a {{tt|polymorphic_allocator}} will not call the allocator's copy constructor. Instead, the new container will use the return value of {{tt|{{rlp|select_on_container_copy_construction}}}} (a default-constructed {{tt|polymorphic_allocator}}) as its allocator.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/polymorphic_allocator/dsc select_on_container_copy_construction}}
{{dsc end}}</text>
      <sha1>ft6payfz3utj1o8bdvi6gh62w95bvd1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/resource</title>
    <ns>0</ns>
    <id>14894</id>
    <revision>
      <id>84219</id>
      <timestamp>2016-03-16T16:26:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="364">{{cpp/memory/polymorphic_allocator/title|resource}}
{{cpp/memory/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 
memory_resource* resource() const;
}}
{{dcl end}}

Returns the memory resource pointer used by this polymorphic allocator.

===Parameters===
(none)

===Return value===
The memory resource pointer used by this polymorphic allocator.</text>
      <sha1>h5kx7gw4441un6vj4vt2kt7fevgb3zz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/polymorphic allocator/select on container copy construction</title>
    <ns>0</ns>
    <id>14893</id>
    <revision>
      <id>84218</id>
      <timestamp>2016-03-16T16:25:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="638">{{cpp/memory/polymorphic_allocator/title|select_on_container_copy_construction}}
{{cpp/memory/polymorphic_allocator/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 
polymorphic_allocator select_on_container_copy_construction() const;
}}
{{dcl end}}

Returns a default-constructed {{tt|polymorphic_allocator}} object. 

===Parameters===
(none)

===Return value===
A default-constructed {{tt|polymorphic_allocator}} object.

=== Notes ===
{{tt|polymorphic_allocator}}s do not propagate on container copy construction.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc select_on_container_copy_construction}}
{{dsc end}}</text>
      <sha1>7f8tvl49bgxmr9dhzmefypiisoo596h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/pool options</title>
    <ns>0</ns>
    <id>14988</id>
    <revision>
      <id>84350</id>
      <timestamp>2016-03-17T14:40:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>last one for pmrs</comment>
      <text xml:space="preserve" bytes="1808">{{cpp/memory/pmr/title|pool_options}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory_resource }}
{{dcl | since=c++17 |1=
struct pool_options;
}}
{{dcl end}}

{{tt|std::pmr::pool_options}} is a set of constructor options for pool resources including {{lc|std::pmr::synchronized_pool_resource}} and {{lc|std::pmr::unsynchronized_pool_resource}}.

===Data members===
{{dsc begin}}
{{dsc hitem | Member | Meaning }}
{{dsc | {{ddcl|std::size_t max_blocks_per_chunk;}} | The maximum number of blocks that will be allocated at once from the upstream {{lc|std::pmr::memory_resource}} to replenish the pool. If the value of {{tt|max_blocks_per_chunk}} is zero or is greater than an implementation-defined limit, that limit is used instead. The implementation may choose to use a smaller value than is specified in this field and may use different values for different pools. }}
{{dsc | {{ddcl|std::size_t largest_required_pool_block;}}|The largest allocation size that is required to be fulfilled using the pooling mechanism. Attempts to allocate a single block larger than this threshold will be allocated directly from the upstream {{lc|std::pmr::memory_resource}}. If {{tt|largest_required_pool_block}} is zero or is greater than an implementation-defined limit, that limit is used instead. The implementation may choose a pass-through threshold larger than specified in this field.
}}
{{dsc end}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc synchronized_pool_resource}}
{{dsc inc | cpp/memory/dsc unsynchronized_pool_resource}}
{{dsc end}}

[[de:cpp/memory/pool options]]
[[es:cpp/memory/pool options]]
[[fr:cpp/memory/pool options]]
[[it:cpp/memory/pool options]]
[[ja:cpp/memory/pool options]]
[[pt:cpp/memory/pool options]]
[[ru:cpp/memory/pool options]]
[[zh:cpp/memory/pool options]]</text>
      <sha1>pt3ipoqdp8d6uvlbhppcvfe4azojb9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/raw storage iterator</title>
    <ns>0</ns>
    <id>3406</id>
    <revision>
      <id>86275</id>
      <parentid>78521</parentid>
      <timestamp>2016-06-27T08:30:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>p0174r2</comment>
      <text xml:space="preserve" bytes="2653">{{cpp/title|raw_storage_iterator}}
{{cpp/memory/raw_storage_iterator/navbar}}
{{dcl begin}}
{{dcl header| memory}}
{{dcl rev begin}}
{{dcl |until=c++17 |1=
template&lt; class OutputIt, class T &gt;
class raw_storage_iterator
    : public std::iterator&lt;std::output_iterator_tag, void, void, void, void&gt;;
}}
{{dcl |since=c++17 | notes={{mark deprecated}} |1=
template&lt; class OutputIt, class T &gt;
class raw_storage_iterator;
}}
{{dcl rev end}}
{{dcl end}}

The output iterator {{tt|std::raw_storage_iterator}} makes it possible for standard algorithms to store results in uninitialized memory. Whenever the algorithm writes an object of type {{tt|T}} to the dereferenced iterator, the object is copy-constructed into the location in the uninitialized storage pointed to by the iterator. The template parameter {{tt|OutputIt}} is any type that meets the requirements of {{concept|OutputIterator}} and has {{c|operator*}} defined to return an object, for which {{c|operator&amp;}} returns an object of type {{tt|T*}}. Usually, the type {{tt|T*}} is used as {{tt|OutputIt}}.

===Type requirements===
{{par begin}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/raw_storage_iterator/dsc constructor}}
{{dsc inc | cpp/memory/raw_storage_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/memory/raw_storage_iterator/dsc operator*}}
{{dsc inc | cpp/memory/raw_storage_iterator/dsc operator_arith}}
{{dsc inc | cpp/memory/raw_storage_iterator/dsc base}}
{{dsc end}}

{{cpp/iterator/iterator/inherit|std::output_iterator_tag|void|void|void|void}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;memory&gt;
#include &lt;algorithm&gt;

int main()
{
    const std::string s[] = {&quot;This&quot;, &quot;is&quot;, &quot;a&quot;, &quot;test&quot;, &quot;.&quot;};
    std::string* p = std::get_temporary_buffer&lt;std::string&gt;(5).first;

    std::copy(std::begin(s), std::end(s),
              std::raw_storage_iterator&lt;std::string*, std::string&gt;(p));

    for(std::string* i = p; i!=p+5; ++i) {
        std::cout &lt;&lt; *i &lt;&lt; '\n';
        i-&gt;~basic_string&lt;char&gt;();
    }
    std::return_temporary_buffer(p);
}
 | output=
This
is
a
test
.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator_traits}}
{{dsc inc | cpp/memory/dsc scoped_allocator_adaptor}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/memory/raw storage iterator]]
[[es:cpp/memory/raw storage iterator]]
[[fr:cpp/memory/raw storage iterator]]
[[it:cpp/memory/raw storage iterator]]
[[ja:cpp/memory/raw storage iterator]]
[[pt:cpp/memory/raw storage iterator]]
[[ru:cpp/memory/raw storage iterator]]
[[zh:cpp/memory/raw storage iterator]]</text>
      <sha1>scxghpbkytbp47geu79fte8styuqa9b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/raw storage iterator/base</title>
    <ns>0</ns>
    <id>14105</id>
    <revision>
      <id>78522</id>
      <timestamp>2015-05-24T14:52:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="350">{{cpp/memory/raw_storage_iterator/title|base}}
{{cpp/memory/raw_storage_iterator/navbar}}
{{dcl begin}}
{{dcl |since=c++17|
OutputIt base() const;
}}
{{dcl end}}

Provides access to the iterator passed in the constructor of this raw_storage_iterator.

===Parameters===
(none)

===Return value===
An iterator pointing at the same object as {{c|*this}}</text>
      <sha1>g5tbsrdoc1zegdc6gued9farzzdaq8y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/raw storage iterator/operator arith</title>
    <ns>0</ns>
    <id>12664</id>
    <revision>
      <id>61440</id>
      <timestamp>2013-06-06T00:30:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="483">{{cpp/memory/raw_storage_iterator/title|operator++, operator++{{small|(int)}}}}
{{cpp/memory/raw_storage_iterator/navbar}}
{{dcl begin}}
{{dcl | 1=
raw_storage_iterator&amp; operator++();
}}
{{dcl | 1=
raw_storage_iterator operator++(int);
}}
{{dcl end}}

Advances the iterator.

@1@ Pre-increment. Returns the updated iterator. 

@2@ Post-increment. Returns the old value of the iterator. 

===Parameters===
(none)

===Return value===
@1@ {{c|*this}}

@2@ The old value of the iterator.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/raw storage iterator/operator*</title>
    <ns>0</ns>
    <id>12663</id>
    <revision>
      <id>61438</id>
      <timestamp>2013-06-06T00:28:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="251">{{cpp/memory/raw_storage_iterator/title|operator*}}
{{cpp/memory/raw_storage_iterator/navbar}}
{{dcl begin}}
{{dcl |
raw_storage_iterator&amp; operator*();
}}
{{dcl end}}

Dereferences the iterator.

===Parameters===
(none)

===Return value===
{{c|*this}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/raw storage iterator/operator=</title>
    <ns>0</ns>
    <id>12662</id>
    <revision>
      <id>81472</id>
      <parentid>81471</parentid>
      <timestamp>2015-10-27T09:58:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="559">{{cpp/memory/raw_storage_iterator/title|operator{{=}}}}
{{cpp/memory/raw_storage_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
raw_storage_iterator&amp; operator=( const T&amp; el );
}}
{{dcl | num=2 | since=c++17|1=
raw_storage_iterator&amp; operator=( T&amp;&amp; el );
}}
{{dcl end}}

@1@ Constructs a value at the location the iterator points to from {{c|el}}.
@2@ Constructs a value at the location the iterator points to from {{c|std::move(el)}}.

===Parameters===
{{par begin}}
{{par | el | the value to copy or move from}}
{{par end}}

===Return value===
{{c|*this}}</text>
      <sha1>l7ywacxyc3v6hiep1zbf1pjm4y1us5o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/raw storage iterator/raw storage iterator</title>
    <ns>0</ns>
    <id>12661</id>
    <revision>
      <id>61436</id>
      <timestamp>2013-06-06T00:25:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="342">{{cpp/memory/raw_storage_iterator/title|raw_storage_iterator}}
{{cpp/memory/raw_storage_iterator/navbar}}
{{dcl begin}}
{{dcl |
explicit raw_storage_iterator( OutputIt it );
}}
{{dcl end}}

Initializes the iterator to point to the same value as {{tt|it}} points.

===Parameters===
{{par begin}}
{{par | it | location to point to}}
{{par end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/return temporary buffer</title>
    <ns>0</ns>
    <id>3415</id>
    <revision>
      <id>86277</id>
      <parentid>81373</parentid>
      <timestamp>2016-06-27T08:31:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>p0174r2</comment>
      <text xml:space="preserve" bytes="1041">{{cpp/title|return_temporary_buffer}}
{{cpp/memory/navbar}}
{{ddcl | header=memory | notes={{mark|deprecated in C++17}} | 
template&lt; class T &gt;
void return_temporary_buffer( T* p );
}}

Deallocates storage previously allocated with {{lc|std::get_temporary_buffer}}.

===Parameters===
{{par begin}}
{{par | p | the pointer previously returned by {{lc|std::get_temporary_buffer}} and not invalidated by an earlier call to {{tt|return_temporary_buffer}} }}
{{par end}}

===Return value===
(none)

{{rev begin}}
{{rev|since=c++17|
===Exceptions===
(none)
}}
{{rev end}}

===Example===
{{include| cpp/memory/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc get_temporary_buffer}}
{{dsc end}}

[[de:cpp/memory/return temporary buffer]]
[[es:cpp/memory/return temporary buffer]]
[[fr:cpp/memory/return temporary buffer]]
[[it:cpp/memory/return temporary buffer]]
[[ja:cpp/memory/return temporary buffer]]
[[pt:cpp/memory/return temporary buffer]]
[[ru:cpp/memory/return temporary buffer]]
[[zh:cpp/memory/return temporary buffer]]</text>
      <sha1>fqwrqnu7v48qau5gfphni3myg6ahy0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor</title>
    <ns>0</ns>
    <id>3391</id>
    <revision>
      <id>90526</id>
      <parentid>90525</parentid>
      <timestamp>2017-03-01T22:20:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>..nevermind previous comment, something more complicated going on in libc++'s vector_base</comment>
      <text xml:space="preserve" bytes="6254">{{cpp/title|scoped_allocator_adaptor}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header| scoped_allocator}}
{{dcl | since=c++11 |1=
template&lt; class OuterAlloc, class... InnerAlloc &gt;
class scoped_allocator_adaptor : public OuterAlloc;
}}
{{dcl end}}

The {{tt|std::scoped_allocator_adaptor}} class template is an allocator which can be used with multilevel containers (vector of sets of lists of tuples of maps, etc). It is instantiated with one outer allocator type {{tt|OuterAlloc}} and zero or more inner allocator types {{tt|InnerAlloc...}}. A container constructed directly with a {{tt|scoped_allocator_adaptor}} uses {{tt|OuterAlloc}} to allocate its elements, but if an element is itself a container, it uses the first inner allocator. The elements of that container, if they are themselves containers, use the second inner allocator, etc. If there are more levels to the container than there are inner allocators, the last inner allocator is reused for all further nested containers.

For the purpose of {{tt|scoped_allocator_adaptor}}, if the next inner allocator is {{tt|A}}, any class {{tt|T}} for which {{c|1=std::uses_allocator&lt;T,A&gt;::value == true}} participates in the recursion as if it was a container. Additionally, {{lc|std::pair}} is treated as such a container by specific overloads of {{l2tt|cpp/memory/scoped_allocator_adaptor/construct}}.

Typical implementation holds an instance of a {{tt|std::scoped_allocator_adaptor&lt;InnerAllocs...&gt;}} as a member object.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|outer_allocator_type}} | {{c|OuterAlloc}} }}
{{dsc | {{tt|inner_allocator_type}} | {{c|scoped_allocator_adaptor&lt;InnerAllocs...&gt;}} or, if {{c|1=sizeof...(InnerAllocs) == 0}}, {{c|scoped_allocator_adaptor&lt;OuterAlloc&gt;}}}}
{{dsc | {{tt|value_type}} | {{c|std::allocator_traits&lt;OuterAlloc&gt;::value_type}} }}
{{dsc | {{tt|size_type}} | {{c|std::allocator_traits&lt;OuterAlloc&gt;::size_type}} }}
{{dsc | {{tt|difference_type}} | {{c|std::allocator_traits&lt;OuterAlloc&gt;::difference_type}} }}
{{dsc | {{tt|pointer}} | {{c|std::allocator_traits&lt;OuterAlloc&gt;::pointer}} }}
{{dsc | {{tt|const_pointer}} | {{c|std::allocator_traits&lt;OuterAlloc&gt;::const_pointer}} }}
{{dsc | {{tt|void_pointer}} | {{c|std::allocator_traits&lt;OuterAlloc&gt;::void_pointer}} }}
{{dsc | {{tt|const_void_pointer}} | {{c|std::allocator_traits&lt;OuterAlloc&gt;::const_void_pointer}} }}
{{dsc | {{tt|propagate_on_container_copy_assignment}}
::{{lc|std::true_type}} if {{c|std::allocator_traits&lt;A&gt;::propagate_on_container_copy_assignment::value}} is {{c|true}} for at least one allocator {{tt|A}} among {{tt|OuterAlloc}} and {{tt|InnerAlloc...}} }}
{{dsc | {{tt|propagate_on_container_move_assignment}}
::{{lc|std::true_type}} if {{c|std::allocator_traits&lt;A&gt;::propagate_on_container_move_assignment::value}} is {{c|true}} for at least one allocator {{tt|A}} among {{tt|OuterAlloc}} and {{tt|InnerAlloc...}} }}
{{dsc | {{tt|propagate_on_container_swap}}
::{{lc|std::true_type}} if {{c|std::allocator_traits&lt;A&gt;::propagate_on_container_swap::value}} is {{c|true}} for at least one allocator {{tt|A}} among {{tt|OuterAlloc}} and {{tt|InnerAlloc...}} }}
{{dsc | {{tt|is_always_equal}}{{mark c++17}}
::{{lc|std::true_type}} if {{c|std::allocator_traits&lt;A&gt;::is_always_equal::value}} is {{c|true}} for every allocator {{tt|A}} among {{tt|OuterAlloc}} and {{tt|InnerAlloc...}} }}
{{dsc | {{tt|rebind}}

&lt;div style{{=}}&quot;padding-left:3em; max-width: 50em; overflow: hidden;&quot;&gt;
{{source|template&lt; class T &gt;
struct rebind {
    typedef scoped_allocator_adaptor&lt;
        std::allocator_traits&lt;OuterAlloc&gt;::template rebind_alloc&lt;T&gt;, 
        InnerAllocs...
    &gt; other;
};
}} 
&lt;/div&gt;}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc scoped_allocator_adaptor}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc ~scoped_allocator_adaptor}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc operator{{=}}}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc inner_allocator}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc outer_allocator}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc allocate}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc deallocate}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc max_size}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc construct}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc destroy}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc select_on_container_copy_construction}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc operator_cmp}}
{{dsc end}}

===Example===
{{example|code=
#include &lt;vector&gt;
#include &lt;scoped_allocator&gt;
#include &lt;boost/interprocess/managed_shared_memory.hpp&gt;
#include &lt;boost/interprocess/allocators/adaptive_pool.hpp&gt;
namespace bi = boost::interprocess;
template&lt;class T&gt; using alloc = bi::adaptive_pool&lt;T,
                                    bi::managed_shared_memory::segment_manager&gt;;
using ipc_row = std::vector&lt;int, alloc&lt;int&gt;&gt;;
using ipc_matrix = std::vector&lt;ipc_row, std::scoped_allocator_adaptor&lt;alloc&lt;ipc_row&gt;&gt;&gt;;
int main ()
{
   bi::managed_shared_memory s(bi::create_only, &quot;Demo&quot;, 65536);
   alloc&lt;int&gt; a(s.get_segment_manager());

   // create vector of vectors in shared memory
   ipc_matrix v(a);   // note: rebinds alloc&lt;ipc_row&gt; from this alloc&lt;int&gt;

   // for all these additions, the inner vectors obtain their allocator arguments
   // from the outer vector's scoped_allocator_adaptor
   v.resize(1); v[0].push_back(1);
   v.emplace_back(2);
   std::vector&lt;int&gt; local_row = {1,2,3};
   v.emplace_back(local_row.begin(), local_row.end());

   bi::shared_memory_object::remove(&quot;Demo&quot;);
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator_traits}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc inc | cpp/memory/dsc allocator}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor]]
[[es:cpp/memory/scoped allocator adaptor]]
[[fr:cpp/memory/scoped allocator adaptor]]
[[it:cpp/memory/scoped allocator adaptor]]
[[ja:cpp/memory/scoped allocator adaptor]]
[[pt:cpp/memory/scoped allocator adaptor]]
[[ru:cpp/memory/scoped allocator adaptor]]
[[zh:cpp/memory/scoped allocator adaptor]]</text>
      <sha1>644rj928nohezi6col8m1ygc54tij0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/allocate</title>
    <ns>0</ns>
    <id>5694</id>
    <revision>
      <id>62778</id>
      <parentid>62399</parentid>
      <timestamp>2013-07-01T23:40:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1376">{{cpp/memory/scoped_allocator_adaptor/title|allocate}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl|num=1 | since=c++11 | 
pointer allocate( size_type n );
}}
{{dcl|num=2 | since=c++11 | 
pointer allocate( size_type n, const_void_pointer hint );
}}
{{dcl end}}

Uses the outer allocator to allocate uninitialized storage.

@1@ Calls {{c|std::allocator_traits&lt;OuterAlloc&gt;::allocate(outer_allocator(), n) }}

@2@ Additionally provides memory locality hint, by calling {{c|std::allocator_traits&lt;OuterAlloc&gt;::allocate(outer_allocator(), n, hint) }}

===Parameters===
{{par begin}}
{{par | n | the number of objects to allocate storage for }}
{{par | hint | pointer to a nearby memory location }}
{{par end}}

===Return value===
The pointer to the allocated storage

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc allocate}}
{{dsc inc | cpp/memory/allocator_traits/dsc allocate}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/allocate]]
[[es:cpp/memory/scoped allocator adaptor/allocate]]
[[fr:cpp/memory/scoped allocator adaptor/allocate]]
[[it:cpp/memory/scoped allocator adaptor/allocate]]
[[ja:cpp/memory/scoped allocator adaptor/allocate]]
[[pt:cpp/memory/scoped allocator adaptor/allocate]]
[[ru:cpp/memory/scoped allocator adaptor/allocate]]
[[zh:cpp/memory/scoped allocator adaptor/allocate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/construct</title>
    <ns>0</ns>
    <id>5678</id>
    <revision>
      <id>83751</id>
      <parentid>80245</parentid>
      <timestamp>2016-03-08T02:22:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2586</comment>
      <text xml:space="preserve" bytes="7565">{{cpp/memory/scoped_allocator_adaptor/title|construct}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header | scoped_allocator}}
{{dcl | num=1 |
template &lt; class T, class... Args &gt;
void construct( T* p, Args&amp;&amp;... args );
}}
{{dcl | num=2 |
template&lt; class T1, class T2, class... Args1, class... Args2 &gt;
void construct( std::pair&lt;T1, T2&gt;* p,
                std::piecewise_construct_t,
                std::tuple&lt;Args1...&gt; x,
                std::tuple&lt;Args2...&gt; y );
}}
{{dcl | num=3 |
template&lt; class T1, class T2 &gt;
void construct( std::pair&lt;T1, T2&gt;* p );
}}
{{dcl | num=4|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, U&amp;&amp; x, V&amp;&amp; y );
}}
{{dcl | num=5|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, const std::pair&lt;U, V&gt;&amp; xy );
}}
{{dcl | num=6|
template&lt; class T1, class T2, class U, class V &gt;
void construct( std::pair&lt;T1, T2&gt;* p, std::pair&lt;U, V&gt;&amp;&amp; xy );
}}
{{dcl end}}

Constructs an object in allocated, but not initialized storage pointed to by {{tt|p}} using OuterAllocator and the provided constructor arguments. If the object is of type that itself uses allocators, or if it is std::pair, passes InnerAllocator down to the constructed object.

First, determines the outermost allocator type {{tt|OUTERMOST}}: it is the type that would be returned by calling {{c|this-&gt;outer_allocator()}}, and then calling the {{tt|outer_allocator()}} member function recursively on the result of this call until reaching the type that has no such member function. That type is the outermost allocator.

Then:

1) If {{c|1=std::uses_allocator&lt;T, inner_allocator_type&gt;::value==false}} (the type {{tt|T}} does not use allocators) and if {{c|1=std::is_constructible&lt;T, Args...&gt;::value==true}}, then calls

{{c|
std::allocator_traits&lt;OUTERMOST&gt;::construct( OUTERMOST(*this),
                                             p,
                                             std::forward&lt;Args&gt;(args)... );
}}

Otherwise, if {{c|1=std::uses_allocator&lt;T, inner_allocator_type&gt;::value==true}} (the type {{tt|T}} uses allocators, e.g. it is a container) and if {{c|1=std::is_constructible&lt;T, std::allocator_arg_t, inner_allocator_type&amp;, Args...&gt;::value==true}}, then calls 

{{c|
std::allocator_traits&lt;OUTERMOST&gt;::construct( OUTERMOST(*this),
                                             p,
                                             std::allocator_arg,
                                             inner_allocator(),
                                             std::forward&lt;Args&gt;(args)... );
}}

Otherwise, {{c|1=std::uses_allocator&lt;T, inner_allocator_type&gt;::value==true}} (the type {{tt|T}} uses allocators, e.g. it is a container) and if {{c|1=std::is_constructible&lt;T, Args..., inner_allocator_type&amp;&gt;::value==true}}, then calls

{{c|
std::allocator_traits&lt;OUTERMOST&gt;::construct( OUTERMOST(*this),
                                             p,
                                             std::forward&lt;Args&gt;(args)...,
                                             inner_allocator());
}}

Otherwise, compilation error is issued because although {{tt|std::uses_allocator&lt;T&gt;}} claimed that {{tt|T}} is allocator-aware, it lacks either form of allocator-accepting constructors.

2) First, if either {{tt|T1}} or {{tt|T2}} is allocator-aware, modifies the tuples {{tt|x}} and {{tt|y}} to include the appropriate inner allocator, resulting in the two new tuples {{tt|xprime}} and {{tt|yprime}}, according to the following three rules:

2a) if {{tt|T1}} is not allocator-aware ({{c|1=std::uses_allocator&lt;T1, inner_allocator_type&gt;::value==false}}, then {{tt|xprime}} is {{tt|x}}, unmodified. (it is also required that {{c|1=std::is_constructible&lt;T1, Args1...&gt;::value==true}})

2b) if {{tt|T1}} is allocator-aware ({{c|1=std::uses_allocator&lt;T1, inner_allocator_type&gt;::value==true}}), and its constructor takes an allocator tag ({{c|1=std::is_constructible&lt;T1, std::allocator_arg_t, inner_allocator_type&amp;, Args1...&gt;::value==true}}, then {{tt|xprime}} is
{{c|std::tuple_cat( std::tuple&lt;std::allocator_arg_t, inner_allocator_type&amp;&gt;( std::allocator_arg,
                                                                         inner_allocator()
                                                                       ), std::move(x))}}

2c) if {{tt|T1}} is allocator-aware ({{c|1=std::uses_allocator&lt;T1, inner_allocator_type&gt;::value==true}}), and its constructor takes the allocator as the last argument ({{c|1=std::is_constructible&lt;T1, Args1..., inner_allocator_type&amp;&gt;::value==true}}), then {{tt|xprime}} is  {{c|std::tuple_cat(std::move(x), std::tuple&lt;inner_allocator_type&amp;&gt;(inner_allocator()))}}.

Same rules apply to {{tt|T2}} and the replacement of {{tt|y}} with {{tt|yprime}}

Once {{tt|xprime}} and {{tt|yprime}} are constructed (this also requires that all types in Args1... and Args2... are {{concept|CopyConstructible}}), constructs the pair {{tt|p}} in allocated storage by calling

{{c|
std::allocator_traits&lt;OUTERMOST&gt;::construct( OUTERMOST(*this),
                                             p,
                                             std::piecewise_construct,
                                             std::move(xprime),
                                             std::move(yprime));
}}


3) Equivalent to {{c|construct(p, std::piecewise_construct, std::tuple&lt;&gt;(), std::tuple&lt;&gt;())}}, that is, passes the inner allocator on to the pair's member types if they accept them.

4) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward&lt;U&gt;(x)),
                                           std::forward_as_tuple(std::forward&lt;V&gt;(y)))
}}

5) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(xy.first),
                                           std::forward_as_tuple(xy.second))
}}

6) Equivalent to

{{c|
    construct(p, std::piecewise_construct, std::forward_as_tuple(std::forward&lt;U&gt;(xy.first)),
                                           std::forward_as_tuple(std::forward&lt;V&gt;(xy.second)))
}}

===Parameters===
{{par begin}}
{{par | p | pointer to allocated, but not initialized storage }}
{{par | args... | the constructor arguments to pass to the constructor of {{tt|T}} }}
{{par | x | the constructor arguments to pass to the constructor of {{tt|T1}} }}
{{par | y | the constructor arguments to pass to the constructor of {{tt|T2}} }}
{{par | xy | the pair whose two members are the constructor arguments for {{tt|T1}} and {{tt|T2}} }}
{{par end}}

===Return value===
(none)

===Notes===
This function is called (through {{lc|std::allocator_traits}}) by any allocator-aware object, such as {{lc|std::vector}}, that was given a {{lc|std::scoped_allocator_adaptor}} as the allocator to use. Since {{tt|inner_allocator}} is itself an instance of {{lc|std::scoped_allocator_adaptor}}, this function will also be called when the allocator-aware objects constructed through this function start constructing their own members.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc construct}}
{{dsc inc | cpp/memory/allocator/dsc construct}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/construct]]
[[es:cpp/memory/scoped allocator adaptor/construct]]
[[fr:cpp/memory/scoped allocator adaptor/construct]]
[[it:cpp/memory/scoped allocator adaptor/construct]]
[[ja:cpp/memory/scoped allocator adaptor/construct]]
[[pt:cpp/memory/scoped allocator adaptor/construct]]
[[ru:cpp/memory/scoped allocator adaptor/construct]]
[[zh:cpp/memory/scoped allocator adaptor/construct]]</text>
      <sha1>pnx6z3zvntgh3v09s44hkntnms8s8q4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/deallocate</title>
    <ns>0</ns>
    <id>5715</id>
    <revision>
      <id>91503</id>
      <parentid>80247</parentid>
      <timestamp>2017-03-31T19:48:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1220">{{cpp/memory/scoped_allocator_adaptor/title|deallocate}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl | since=c++11 | 
void deallocate( pointer p, size_type n );
}}
{{dcl end}}

Uses the outer allocator to deallocate the storage referenced by {{tt|p}}, by calling {{c|std::allocator_traits&lt;OuterAlloc&gt;::deallocate(outer_allocator(), p, n) }}

===Parameters===
{{par begin}}
{{par | p | pointer to the previously allocated memory }}
{{par | n | the number of objects for which the memory was allocated }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc deallocate}}
{{dsc inc | cpp/memory/allocator_traits/dsc deallocate}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/deallocate]]
[[es:cpp/memory/scoped allocator adaptor/deallocate]]
[[fr:cpp/memory/scoped allocator adaptor/deallocate]]
[[it:cpp/memory/scoped allocator adaptor/deallocate]]
[[ja:cpp/memory/scoped allocator adaptor/deallocate]]
[[pt:cpp/memory/scoped allocator adaptor/deallocate]]
[[ru:cpp/memory/scoped allocator adaptor/deallocate]]
[[zh:cpp/memory/scoped allocator adaptor/deallocate]]</text>
      <sha1>5jmqcqt5gnh9b1uut3q10jr8jimqhv5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/destroy</title>
    <ns>0</ns>
    <id>5691</id>
    <revision>
      <id>62780</id>
      <parentid>58368</parentid>
      <timestamp>2013-07-01T23:40:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1342">{{cpp/memory/scoped_allocator_adaptor/title|destroy}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header | scoped_allocator }}
{{dcl | since=c++11 | 
template&lt; class T &gt;
void destroy( T* p );
}}
{{dcl end}}

Uses the outer allocator to call the destructor of the object pointed to by {{tt|p}}, by calling

{{c|
std::allocator_traits&lt;OUTERMOST&gt;::destroy(OUTERMOST(*this), p)
}}

where OUTERMOST is the type that would be returned by calling {{c|this-&gt;outer_allocator()}}, and then calling the {{tt|outer_allocator()}} member function recursively on the result of this call until reaching the type that has no such member function.

===Parameters===
{{par begin}}
{{par | p | pointer to the object that is going to be destroyed }}
{{par end}}

===Return value===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc destroy}}
{{dsc inc | cpp/memory/allocator/dsc destroy}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/destroy]]
[[es:cpp/memory/scoped allocator adaptor/destroy]]
[[fr:cpp/memory/scoped allocator adaptor/destroy]]
[[it:cpp/memory/scoped allocator adaptor/destroy]]
[[ja:cpp/memory/scoped allocator adaptor/destroy]]
[[pt:cpp/memory/scoped allocator adaptor/destroy]]
[[ru:cpp/memory/scoped allocator adaptor/destroy]]
[[zh:cpp/memory/scoped allocator adaptor/destroy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/inner allocator</title>
    <ns>0</ns>
    <id>5731</id>
    <revision>
      <id>91916</id>
      <parentid>80243</parentid>
      <timestamp>2017-03-31T20:01:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1525">{{cpp/memory/scoped_allocator_adaptor/title|inner_allocator}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl | num=1 | since=c++11 | 
inner_allocator_type&amp; inner_allocator();
}}
{{dcl | num=2 | since=c++11 | 
const inner_allocator_type&amp; inner_allocator() const;
}}
{{dcl end}}

Obtains a reference to the inner allocator used to declare this {{tt|scoped_allocator_adaptor}}.

If {{c|1=sizeof...(InnerAllocs) == 0}}, that is, no inner allocators were declared, returns {{c|*this}}. Otherwise returns a reference to {{c|std::scoped_allocator_adaptor&lt;InnerAllocs...&gt;}}, that is, a scoped allocator composed of all inner allocators of {{c|*this}}, with the first inner allocator becoming the outer allocator.

===Parameters===
(none)

===Return value===
A reference to the inner allocator, which is itself a {{tt|std::scoped_allocator_adaptor}}.

===Exceptions===
1-2) {{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc outer_allocator}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/inner allocator]]
[[es:cpp/memory/scoped allocator adaptor/inner allocator]]
[[fr:cpp/memory/scoped allocator adaptor/inner allocator]]
[[it:cpp/memory/scoped allocator adaptor/inner allocator]]
[[ja:cpp/memory/scoped allocator adaptor/inner allocator]]
[[pt:cpp/memory/scoped allocator adaptor/inner allocator]]
[[ru:cpp/memory/scoped allocator adaptor/inner allocator]]
[[zh:cpp/memory/scoped allocator adaptor/inner allocator]]</text>
      <sha1>ky51hpw6fbqsi0y474if67srxblpzon</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/max size</title>
    <ns>0</ns>
    <id>5716</id>
    <revision>
      <id>80246</id>
      <parentid>62782</parentid>
      <timestamp>2015-08-01T12:25:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1016">{{cpp/memory/scoped_allocator_adaptor/title|max_size}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl | since=c++11 | 
size_type max_size() const;
}}
{{dcl end}}

Reports the maximum allocation size supported by the outer allocator, by calling {{c|std::allocator_traits&lt;OuterAlloc&gt;::max_size(outer_allocator()) }}

===Parameters===
(none)

===Return value===
The maximum allocation size for OuterAlloc.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator/dsc max_size}}
{{dsc inc | cpp/memory/allocator_traits/dsc max_size}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/max size]]
[[es:cpp/memory/scoped allocator adaptor/max size]]
[[fr:cpp/memory/scoped allocator adaptor/max size]]
[[it:cpp/memory/scoped allocator adaptor/max size]]
[[ja:cpp/memory/scoped allocator adaptor/max size]]
[[pt:cpp/memory/scoped allocator adaptor/max size]]
[[ru:cpp/memory/scoped allocator adaptor/max size]]
[[zh:cpp/memory/scoped allocator adaptor/max size]]</text>
      <sha1>namgcutnqsnut93oy4cbh63b6j1174e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/operator cmp</title>
    <ns>0</ns>
    <id>9239</id>
    <revision>
      <id>91656</id>
      <parentid>62783</parentid>
      <timestamp>2017-03-31T19:53:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1701">{{title|1=operator==,!={{small|(std::scoped_allocator_adaptor)}}}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt; class OuterAlloc1, class OuterAlloc2, class... InnerAllocs &gt;
bool operator==( const scoped_allocator_adaptor&lt;OuterAlloc1, InnerAllocs...&gt;&amp; lhs, 
                 const scoped_allocator_adaptor&lt;OuterAlloc2, InnerAllocs...&gt;&amp; rhs );
}}
{{dcl | since=c++11 | 1=
template&lt; class OuterAlloc1, class OuterAlloc2, class... InnerAllocs &gt;
bool operator!=( const scoped_allocator_adaptor&lt;OuterAlloc1, InnerAllocs...&gt;&amp; lhs, 
                 const scoped_allocator_adaptor&lt;OuterAlloc2, InnerAllocs...&gt;&amp; rhs );
}}
{{dcl end}}

Compares two scoped allocator adaptors. Two such allocators are equal if:

* {{c|lhs.outer_allocator() {{==}} rhs.outer_allocator()}}, and
* if {{c|sizeof...(InnerAllocs) &gt; 0}}, {{c|lhs.inner_allocator() {{==}} rhs.inner_allocator()}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | scoped allocator adaptors to compare}}
{{par end}}

===Return value===
@1@ Returns {{c|true}} if {{tt|lhs}} and {{tt|rhs}} are equal, {{c|false}} otherwise.
@2@ Returns {{c|true}} if {{tt|lhs}} and {{tt|rhs}} are not equal, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/memory/scoped allocator adaptor/operator cmp]]
[[es:cpp/memory/scoped allocator adaptor/operator cmp]]
[[fr:cpp/memory/scoped allocator adaptor/operator cmp]]
[[it:cpp/memory/scoped allocator adaptor/operator cmp]]
[[ja:cpp/memory/scoped allocator adaptor/operator cmp]]
[[pt:cpp/memory/scoped allocator adaptor/operator cmp]]
[[ru:cpp/memory/scoped allocator adaptor/operator cmp]]
[[zh:cpp/memory/scoped allocator adaptor/operator cmp]]</text>
      <sha1>pm0sypts9gpuhjyyl9t1zm0yiqn8odb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/operator=</title>
    <ns>0</ns>
    <id>14504</id>
    <revision>
      <id>81558</id>
      <parentid>81557</parentid>
      <timestamp>2015-10-27T21:55:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>tweak</comment>
      <text xml:space="preserve" bytes="776">{{cpp/memory/scoped_allocator_adaptor/title|operator{{=}}}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl|num=1 |1=
scoped_allocator_adaptor&amp; operator=(const scoped_allocator_adaptor&amp; other) = default;
}}
{{dcl|num=2 |1=
scoped_allocator_adaptor&amp; operator=(scoped_allocator_adaptor&amp;&amp; other) = default;
}}
{{dcl end}}

1) Explicitly defaulted copy assignment operator that copy assigns the base class ({{tt|OuterAlloc}}, the outer allocator) and all inner allocators.

2) Explicitly defaulted move assignment operator that move assigns the base class ({{tt|OuterAlloc}}, the outer allocator) and all inner allocators.

===Parameters===
{{par begin}}
{{par | other | another {{tt|std::scoped_allocator_adaptor}}}}
{{par end}}</text>
      <sha1>03x43sn13oicqs0e71m5x05i4s29wp5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/outer allocator</title>
    <ns>0</ns>
    <id>5730</id>
    <revision>
      <id>91436</id>
      <parentid>80248</parentid>
      <timestamp>2017-03-31T19:44:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1216">{{cpp/memory/scoped_allocator_adaptor/title|outer_allocator}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl | num=1 | since=c++11 | 
outer_allocator_type&amp; outer_allocator();
}}
{{dcl | num=2 | since=c++11 | 
const outer_allocator_type&amp; outer_allocator() const;
}}
{{dcl end}}

Obtains a reference to the outer allocator used to declare this class.

1) returns {{c|static_cast&lt;OuterAlloc&amp;&gt;(*this)}}

2) returns {{c|static_cast&lt;const OuterAlloc&amp;&gt;(*this)}}

===Parameters===
(none)

===Return value===
A reference to {{tt|OuterAlloc}}

===Exceptions===
1-2) {{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc inner_allocator}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/outer allocator]]
[[es:cpp/memory/scoped allocator adaptor/outer allocator]]
[[fr:cpp/memory/scoped allocator adaptor/outer allocator]]
[[it:cpp/memory/scoped allocator adaptor/outer allocator]]
[[ja:cpp/memory/scoped allocator adaptor/outer allocator]]
[[pt:cpp/memory/scoped allocator adaptor/outer allocator]]
[[ru:cpp/memory/scoped allocator adaptor/outer allocator]]
[[zh:cpp/memory/scoped allocator adaptor/outer allocator]]</text>
      <sha1>d7ruku3vc9d304jkig0h8yqfmynoqsf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/scoped allocator adaptor</title>
    <ns>0</ns>
    <id>5732</id>
    <revision>
      <id>91422</id>
      <parentid>91260</parentid>
      <timestamp>2017-03-31T19:43:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3103">{{cpp/memory/scoped_allocator_adaptor/title|scoped_allocator_adaptor}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl|num=1 | since=c++11 | 
scoped_allocator_adaptor();
}}
{{dcl|num=2 | since=c++11 | 
template&lt; class OuterA2 &gt;
scoped_allocator_adaptor( OuterA2&amp;&amp; outerAlloc, const InnerAllocs&amp;... innerAllocs) noexcept;
}}
{{dcl|num=3 | since=c++11 | 
scoped_allocator_adaptor( const scoped_allocator_adaptor&amp; other ) noexcept;
}}
{{dcl|num=4 | since=c++11 | 
scoped_allocator_adaptor( scoped_allocator_adaptor&amp;&amp; other ) noexcept;
}}
{{dcl|num=5 | since=c++11 | 
template&lt; class OuterA2 &gt;
scoped_allocator_adaptor( const scoped_allocator_adaptor&lt;OuterA2, InnerAllocs...&gt;&amp; other )  noexcept;
}}
{{dcl|num=6 | since=c++11 | 
template&lt; class OuterA2 &gt;
scoped_allocator_adaptor( scoped_allocator_adaptor&lt;OuterA2, InnerAllocs...&gt;&amp;&amp; other ) noexcept;
}}
{{dcl end}}

1) Default constructor: value-initializes the {{tt|OuterAlloc}} base class and the inner allocator member object, if used by the implementation.

2) Constructs the base class {{tt|OuterAlloc}} from {{c|std::forward&lt;OuterA2&gt;(outerAlloc)}}, and the inner allocators with {{tt|innerAllocs...}}. {{cpp/enable_if| {{c|std::is_constructible&lt;OuterAlloc, OuterA2&gt;::value}} is {{c|true}}}}.

3) Copy-constructor: initializes each allocator from the corresponding allocator of {{tt|other}}

4) Move-constructor: moves each allocator from the corresponding allocator of {{tt|other}} into {{tt|*this}}

5) Initializes each allocator from the corresponding allocator of {{tt|other}}. {{cpp/enable_if| {{c|std::is_constructible&lt;OuterAlloc, const OuterA2&amp;&gt;::value}} is {{c|true}}}}.

6) Initializes each allocator from the corresponding allocator of {{tt|other}}, using move semantics. {{cpp/enable_if| {{c|std::is_constructible&lt;OuterAlloc, OuterA2&gt;::value}} is {{c|true}}}}.

===Parameters===
{{par begin}}
{{par | outerAlloc | constructor argument for the outer allocator}}
{{par | innerAllocs... | constructor arguments for the inner allocators }}
{{par | other | another {{tt|std::scoped_allocator_adaptor}}}}
{{par end}}

===Exceptions===
2-6) {{unreviewed noexcept}}

=== Defect reports ===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2782|std=C++11|before=constructors taking {{tt|OuterA2}} weren't constrained, interfering with metaprogramming|after=constraint added}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc allocate}}
{{dsc inc | cpp/memory/scoped_allocator_adaptor/dsc construct}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]
[[es:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]
[[fr:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]
[[it:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]
[[ja:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]
[[pt:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]
[[ru:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]
[[zh:cpp/memory/scoped allocator adaptor/scoped allocator adaptor]]</text>
      <sha1>6n0wastfrhyvv1pzekukvuloc3xhcu7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/select on container copy construction</title>
    <ns>0</ns>
    <id>5733</id>
    <revision>
      <id>80244</id>
      <parentid>62786</parentid>
      <timestamp>2015-08-01T12:24:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1437">{{cpp/memory/scoped_allocator_adaptor/title|select_on_container_copy_construction}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{dcl begin}}
{{dcl header|scoped_allocator}}
{{dcl | since=c++11 | 
scoped_allocator_adaptor select_on_container_copy_construction() const;
}}
{{dcl end}}

Creates a new instance of {{tt|std::scoped_allocator_adaptor}}, where the outer allocator base class and each inner allocator subobject are obtained by calling {{c|std::allocator_traits&lt;A&gt;::select_on_container_copy_construction()}}.

===Parameters===
(none)

===Return value===
A new {{tt|std::scoped_allocator_adaptor}} object, constructed from correctly copied allocators.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/allocator_traits/dsc select_on_container_copy_construction}}
{{dsc end}}

[[de:cpp/memory/scoped allocator adaptor/select on container copy construction]]
[[es:cpp/memory/scoped allocator adaptor/select on container copy construction]]
[[fr:cpp/memory/scoped allocator adaptor/select on container copy construction]]
[[it:cpp/memory/scoped allocator adaptor/select on container copy construction]]
[[ja:cpp/memory/scoped allocator adaptor/select on container copy construction]]
[[pt:cpp/memory/scoped allocator adaptor/select on container copy construction]]
[[ru:cpp/memory/scoped allocator adaptor/select on container copy construction]]
[[zh:cpp/memory/scoped allocator adaptor/select on container copy construction]]</text>
      <sha1>kr5k5v70bnjzpkej8nwhjwk5663m3jx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/scoped allocator adaptor/~scoped allocator adaptor</title>
    <ns>0</ns>
    <id>9240</id>
    <revision>
      <id>63344</id>
      <parentid>42422</parentid>
      <timestamp>2013-07-10T01:29:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="767">{{cpp/memory/scoped_allocator_adaptor/title|~scoped_allocator_adaptor}}
{{cpp/memory/scoped_allocator_adaptor/navbar}}
{{ddcl | since=c++11 | 
~scoped_allocator_adaptor();
}}

Destroys the scoped allocator adaptor.

[[de:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]
[[es:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]
[[fr:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]
[[it:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]
[[ja:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]
[[pt:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]
[[ru:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]
[[zh:cpp/memory/scoped allocator adaptor/~scoped allocator adaptor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/set default resource</title>
    <ns>0</ns>
    <id>14922</id>
    <revision>
      <id>91652</id>
      <parentid>84256</parentid>
      <timestamp>2017-03-31T19:53:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1104">{{cpp/memory/pmr/title|set_default_resource}}
{{cpp/memory/navbar}}
{{ddcl|header=memory_resource | since=c++17|
std::pmr::memory_resource* set_default_resource(std::pmr::memory_resource* r);
}}

If {{tt|r}} is not null, sets the default memory resource pointer to {{tt|r}}; otherwise, sets the default memory resource pointer to {{lc|std::pmr::new_delete_resource}}.

The ''default memory resource pointer'' is used by certain facilities when an explicit memory resource is not supplied. The initial default memory resource pointer is the return value of {{lc|std::pmr::new_delete_resource}}.

This function is thread-safe. Every call to {{tt|std::pmr::set_default_resource}} ''synchronizes with'' (see {{lc|std::memory_order}}) the subsequent {{tt|std::pmr::set_default_resource}} and {{lc|std::pmr::get_default_resource}} calls.

=== Return value ===

Returns the previous value of the default memory resource pointer.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/dsc get_default_resource}}
{{dsc inc|cpp/memory/dsc new_delete_resource}}
{{dsc end}}</text>
      <sha1>p1ibx9ljtrq2v19y68e2lny1giv0i4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr</title>
    <ns>0</ns>
    <id>2177</id>
    <revision>
      <id>87675</id>
      <parentid>86333</parentid>
      <timestamp>2016-09-21T23:40:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>made the note on atomic ordering of decrement less specific - it appears people use relaxed followed by a fence instead of just ackrel</comment>
      <text xml:space="preserve" bytes="8867">{{cpp/title|shared_ptr}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl | header=memory | since=c++11 | 1=
template&lt; class T &gt; class shared_ptr;
}}

{{tt|std::shared_ptr}} is a smart pointer that retains shared ownership of an object through a pointer. Several {{tt|shared_ptr}} objects may own the same object. The object is destroyed and its memory deallocated when either of the following happens:
* the last remaining {{tt|shared_ptr}} owning the object is destroyed;
* the last remaining {{tt|shared_ptr}} owning the object is assigned another pointer via {{lc|operator{{=}}}} or {{lc|reset()}}. 

The object is destroyed using {{ltt|cpp/language/delete|delete-expression}} or a custom deleter that is supplied to {{tt|shared_ptr}} during construction.

A {{tt|shared_ptr}} can share ownership of an object while storing a pointer to another object. This feature can be used to point to member objects while owning the object they belong to. The stored pointer is the one accessed by {{c|get()}}, the dereference and the comparison operators. The managed pointer is the one passed to the deleter when use count reaches zero.

A {{tt|shared_ptr}} may also own no objects, in which case it is called ''empty'' (an empty shared_ptr may have a non-null stored pointer if the aliasing constructor was used to create it).

All specializations of {{tt|shared_ptr}} meet the requirements of {{concept|CopyConstructible}}, {{concept|CopyAssignable}}, and {{concept|LessThanComparable}} and are [[cpp/language/implicit_cast|contextually convertible]] to {{tt|bool}}.

All member functions (including copy constructor and copy assignment) can be called by multiple threads on different instances of {{tt|shared_ptr}} without additional synchronization even if these instances are copies and share ownership of the same object. If multiple threads of execution access the same {{tt|shared_ptr}} without synchronization and any of those accesses uses a non-const member function of {{tt|shared_ptr}} then a data race will occur; the [[cpp/memory/shared_ptr/atomic|shared_ptr overloads of atomic functions]] can be used to prevent the data race.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|element_type}} | {{rev begin}}
{{rev|until=c++17|{{c|T}}}}
{{rev|since=c++17|{{c|std::remove_extent_t&lt;T&gt;}}}}
{{rev end}}
}}
{{dsc | {{c|weak_type}} {{mark since c++17}} | {{c|std::weak_ptr&lt;T&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc constructor}}
{{dsc inc | cpp/memory/shared_ptr/dsc destructor}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator{{=}}}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/memory/shared_ptr/dsc reset}}
{{dsc inc | cpp/memory/shared_ptr/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/memory/shared_ptr/dsc get}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator*}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_at}}
{{dsc inc | cpp/memory/shared_ptr/dsc use_count}}
{{dsc inc | cpp/memory/shared_ptr/dsc unique}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator bool}}
{{dsc inc | cpp/memory/shared_ptr/dsc owner_before}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc make_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc allocate_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc pointer_cast}}
{{dsc inc | cpp/memory/shared_ptr/dsc get_deleter}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_cmp}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator_ltlt}}
{{dsc inc | cpp/memory/shared_ptr/dsc swap2}}
{{dsc break}}
{{dsc inc | cpp/memory/shared_ptr/dsc atomic}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc hash}}
{{dsc end}}

===Notes===
The ownership of an object can only be shared with another {{tt|shared_ptr}} by copy constructing or copy assigning its value to another {{tt|shared_ptr}}. Constructing a new {{tt|shared_ptr}} using the raw underlying pointer owned by another {{tt|shared_ptr}} leads to undefined behavior.

{{tt|std::shared_ptr}} may be used with an [[cpp/language/incomplete_type|incomplete type]] {{tt|T}}. However, the constructor from a raw pointer ({{c|template&lt;class Y&gt; shared_ptr(Y*)}}) and the {{c|template&lt;class Y&gt; void reset(Y*)}} member function may only be called with a pointer to a complete type (note that {{lc|std::unique_ptr}} may be constructed from a raw pointer to an incomplete type).

===Implementation notes===
In a typical implementation, {{lc|std::shared_ptr}} holds only two pointers:
* the stored pointer (one returned by {{c|get()}});
* a pointer to ''control block''.

The control block is a dynamically-allocated object that holds:
* either a pointer to the managed object or the managed object itself;
* the deleter (type-erased);
* the allocator (type-erased);
* the number of {{tt|shared_ptr}}s that own the managed object;
* the number of {{tt|weak_ptr}}s that refer to the managed object.

When {{tt|shared_ptr}} is created by calling {{lc|std::make_shared}} or {{lc|std::allocate_shared}}, the memory for both the control block and the managed object is created with a single allocation. The managed object is constructed in-place in a data member of the control block. When {{tt|shared_ptr}} is created via one of the {{tt|shared_ptr}} constructors, the managed object and the control block must be allocated separately.  In this case, the control block stores a pointer to the managed object.

The pointer held by the {{tt|shared_ptr}} directly is the one returned by {{lc|get()}}, while the pointer/object held by the control block is the one that will be deleted when the number of shared owners reaches zero.  These pointers are not necessarily equal.

The destructor of {{tt|shared_ptr}} decrements the number of shared owners of the control block. If that counter reaches zero, the control block calls the destructor of the managed object. The control block does not deallocate itself until the {{lc|std::weak_ptr}} counter reaches zero as well. 

In practical implementations, the number of weak pointers [https://www.reddit.com/r/cpp/comments/3eia29/stdshared_ptrs_secret_constructor/ctfeh1p may be incremented] if there is a shared pointer to the same control block.

To satisfy thread safety requirements, the reference counters are typically incremented using an equivalent of {{lc|std::atomic::fetch_add}} with {{lc|std::memory_order_relaxed}} (decrementing requires stronger ordering to safely destroy the control block).

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
#include &lt;mutex&gt;

struct Base
{
    Base() { std::cout &lt;&lt; &quot;  Base::Base()\n&quot;; }
    // Note: non-virtual destructor is OK here
    ~Base() { std::cout &lt;&lt; &quot;  Base::~Base()\n&quot;; }
};

struct Derived: public Base
{
    Derived() { std::cout &lt;&lt; &quot;  Derived::Derived()\n&quot;; }
    ~Derived() { std::cout &lt;&lt; &quot;  Derived::~Derived()\n&quot;; }
};

void thr(std::shared_ptr&lt;Base&gt; p)
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::shared_ptr&lt;Base&gt; lp = p; // thread-safe, even though the
                                  // shared use_count is incremented
    {
        static std::mutex io_mutex;
        std::lock_guard&lt;std::mutex&gt; lk(io_mutex);
        std::cout &lt;&lt; &quot;local pointer in a thread:\n&quot;
                  &lt;&lt; &quot;  lp.get() = &quot; &lt;&lt; lp.get()
                  &lt;&lt; &quot;, lp.use_count() = &quot; &lt;&lt; lp.use_count() &lt;&lt; '\n';
    }
}

int main()
{
    std::shared_ptr&lt;Base&gt; p = std::make_shared&lt;Derived&gt;();

    std::cout &lt;&lt; &quot;Created a shared Derived (as a pointer to Base)\n&quot;
              &lt;&lt; &quot;  p.get() = &quot; &lt;&lt; p.get()
              &lt;&lt; &quot;, p.use_count() = &quot; &lt;&lt; p.use_count() &lt;&lt; '\n';
    std::thread t1(thr, p), t2(thr, p), t3(thr, p);
    p.reset(); // release ownership from main
    std::cout &lt;&lt; &quot;Shared ownership between 3 threads and released\n&quot;
              &lt;&lt; &quot;ownership from main:\n&quot;
              &lt;&lt; &quot;  p.get() = &quot; &lt;&lt; p.get()
              &lt;&lt; &quot;, p.use_count() = &quot; &lt;&lt; p.use_count() &lt;&lt; '\n';
    t1.join(); t2.join(); t3.join();
    std::cout &lt;&lt; &quot;All threads completed, the last one deleted Derived\n&quot;;
}
 | p=true
 | output=
  Base::Base()
  Derived::Derived()
Created a shared Derived (as a pointer to Base)
  p.get() = 0xc99028, p.use_count() = 1
Shared ownership between 3 threads and released
ownership from main:
  p.get() = (nil), p.use_count() = 0
local pointer in a thread:
  lp.get() = 0xc99028, lp.use_count() = 3
local pointer in a thread:
  lp.get() = 0xc99028, lp.use_count() = 4
local pointer in a thread:
  lp.get() = 0xc99028, lp.use_count() = 2
  Derived::~Derived()
  Base::~Base()
All threads completed, the last one deleted Derived
}}

[[de:cpp/memory/shared ptr]]
[[es:cpp/memory/shared ptr]]
[[fr:cpp/memory/shared ptr]]
[[it:cpp/memory/shared ptr]]
[[ja:cpp/memory/shared ptr]]
[[pt:cpp/memory/shared ptr]]
[[ru:cpp/memory/shared ptr]]
[[zh:cpp/memory/shared ptr]]</text>
      <sha1>1kvmc3oi2dyag9hzc12o0w3xb39lfd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/allocate shared</title>
    <ns>0</ns>
    <id>5307</id>
    <revision>
      <id>91072</id>
      <parentid>91044</parentid>
      <timestamp>2017-03-17T11:24:09Z</timestamp>
      <contributor>
        <ip>91.82.100.59</ip>
      </contributor>
      <text xml:space="preserve" bytes="2948">{{cpp/title|allocate_shared}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl | header=memory | since=c++11 |
template&lt; class T, class Alloc, class... Args &gt;
shared_ptr&lt;T&gt; allocate_shared( const Alloc&amp; alloc, Args&amp;&amp;... args );
}}

Constructs an object of type {{tt|T}} and wraps it in a {{lc|std::shared_ptr}} using {{tt|args}} as the parameter list for the constructor of {{tt|T}}. The object is constructed as if by the expression {{c|::new (pv) T(std::forward&lt;Args&gt;(args)...)}}, where {{tt|pv}} is an internal {{tt|void*}} pointer to storage suitable to hold an object of type {{tt|T}}. The storage is typically larger than {{tt|sizeof(T)}} in order to use one allocation for both the control block of the shared pointer and the {{tt|T}} object.

All memory allocation is done using a copy of {{c|alloc}}, which must satisfy the {{concept|Allocator}} requirements.

The {{tt|std::shared_ptr}} constructor called by this function enables {{tt|shared_from_this}} with a pointer to the newly constructed object of type {{tt|T}}.

===Parameters===
{{par begin}}
{{par | alloc | The {{concept|Allocator}} to use.}}
{{par | args... | list of arguments with which an instance of {{tt|T}} will be constructed.}}
{{par end}}

===Return value===
{{lc|std::shared_ptr}} of an instance of type {{tt|T}}.

===Exceptions===
Can throw the exceptions thrown from {{c|Alloc::allocate()}} or from the constructor of {{tt|T}}. If an exception is thrown, this function has no effect.

===Notes===
Like {{lc|std::make_shared}}, this function typically performs only one allocation, and places both the {{tt|T}} object and the control block in the allocated memory block (the standard recommends, but does not require this, all known implementations do this). A copy of {{tt|alloc}} is stored as part of the control block so that it can be used to deallocate it once both shared and weak reference counts reach zero.

Unlike the std::shared_ptr constructors, std::allocate_shared does not accept a separate custom deleter: the supplied allocator is used for destruction of the control block and the {{tt|T}} object, and for deallocation of their shared memory block.

{{lc|std::shared_ptr}} supports array types (as of C++17), but {{tt|std::allocate_shared}} does not. This functionality is supported by [http://www.boost.org/doc/libs/release/libs/smart_ptr/make_shared_array.html boost::allocate_shared]

{{cpp/memory/shared ptr/enabling shared from this|plural=yes}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc constructor}}
{{dsc inc | cpp/memory/shared_ptr/dsc make_shared}}
{{dsc end}}

[[de:cpp/memory/shared ptr/allocate shared]]
[[es:cpp/memory/shared ptr/allocate shared]]
[[fr:cpp/memory/shared ptr/allocate shared]]
[[it:cpp/memory/shared ptr/allocate shared]]
[[ja:cpp/memory/shared ptr/allocate shared]]
[[pt:cpp/memory/shared ptr/allocate shared]]
[[ru:cpp/memory/shared ptr/allocate shared]]
[[zh:cpp/memory/shared ptr/allocate shared]]</text>
      <sha1>m6a64o07qgzpuyy9ttdk5dk2mcxqzhs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/atomic</title>
    <ns>0</ns>
    <id>9323</id>
    <revision>
      <id>83267</id>
      <parentid>78857</parentid>
      <timestamp>2016-01-29T03:13:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>as http://stackoverflow.com/questions/35073200 points out, saying that store and exchange &quot;swap&quot; anything is confusing</comment>
      <text xml:space="preserve" bytes="6741">{{cpp/title | atomic_...{{dsc small|&lt;std::shared_ptr&gt;}}}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
template&lt; class T &gt;
bool atomic_is_lock_free( const std::shared_ptr&lt;T&gt;* p );
}}
{{dcl | num=2 | since=c++11 | 1= 
template&lt; class T &gt;
std::shared_ptr&lt;T&gt; atomic_load( const std::shared_ptr&lt;T&gt;* p );
}}
{{dcl | num=3 | since=c++11 | 1= 
template&lt; class T &gt;
std::shared_ptr&lt;T&gt; atomic_load_explicit( const std::shared_ptr&lt;T&gt;* p,
                                         std::memory_order mo );
}}
{{dcl | num=4 | since=c++11 | 1= 
template&lt; class T &gt;
void atomic_store( std::shared_ptr&lt;T&gt;* p,
                   std::shared_ptr&lt;T&gt; r );
}}
{{dcl | num=5 | since=c++11 | 1= 
template&lt; class T &gt;
void atomic_store_explicit( std::shared_ptr&lt;T&gt;* p,
                            std::shared_ptr&lt;T&gt; r,
                            std::memory_order mo);
}}
{{dcl | num=6 | since=c++11 | 1= 
template&lt; class T &gt;
std::shared_ptr&lt;T&gt; atomic_exchange( std::shared_ptr&lt;T&gt;* p,
                                    std::shared_ptr&lt;T&gt; r);
}}
{{dcl | num=7 | since=c++11 | 1= 
template&lt;class T&gt;
std::shared_ptr&lt;T&gt; atomic_exchange_explicit( std::shared_ptr&lt;T&gt;* p,
                                             std::shared_ptr&lt;T&gt; r,
                                             std::memory_order mo);
}}
{{dcl | num=8 | since=c++11 | 1= 
template&lt; class T &gt;
bool atomic_compare_exchange_weak( std::shared_ptr&lt;T&gt;* p,
                                   std::shared_ptr&lt;T&gt;* expected,
                                   std::shared_ptr&lt;T&gt; desired);
}}
{{dcl | num=9 | since=c++11 | 1= 
template&lt;class T&gt;
bool atomic_compare_exchange_strong( std::shared_ptr&lt;T&gt;* p,
                                     std::shared_ptr&lt;T&gt;* expected,
                                     std::shared_ptr&lt;T&gt; desired);
}}
{{dcl | num=10 | since=c++11 | 1= 
template&lt; class T &gt;
bool atomic_compare_exchange_strong_explicit( std::shared_ptr&lt;T&gt;* p,
                                              std::shared_ptr&lt;T&gt;* expected,
                                              std::shared_ptr&lt;T&gt; desired,
                                              std::memory_order success,
                                              std::memory_order failure);
}}
{{dcl | num=11 | since=c++11 | 1= 
template&lt; class T &gt;
bool atomic_compare_exchange_weak_explicit( std::shared_ptr&lt;T&gt;* p,
                                            std::shared_ptr&lt;T&gt;* expected,
                                            std::shared_ptr&lt;T&gt; desired,
                                            std::memory_order success,
                                            std::memory_order failure);
}}
{{dcl end}}

If multiple threads of execution access the same {{lc|std::shared_ptr}} object without synchronization and any of those accesses uses a non-const member function of {{lc|shared_ptr}} then a data race will occur unless all such access is performed through these functions, which are overloads of the corresponding atomic access functions ({{lc|std::atomic_load}}, {{lc|std::atomic_store}}, etc.)

Note that the control block of a shared_ptr is thread-safe: different {{lc|std::shared_ptr}} objects can be accessed using mutable operations, such as operator= or reset, simultaneously by multiple threads, even when these instances are copies, and share the same control block internally.

@1@ Determines whether atomic access to the shared pointer pointed-to by {{tt|p}} is lock-free.
@2@ Equivalent to {{c|atomic_load_explicit(p, std::memory_order_seq_cst)}}
@3@ Returns the shared pointer pointed-to by {{tt|p}}. As with the non-specialized {{lc|std::atomic_load_explicit}}, {{tt|mo}} cannot be {{lc|std::memory_order_release}} or {{lc|std::memory_order_acq_rel}}
@4@ Equivalent to {{c|atomic_store_explicit(p, r, memory_order_seq_cst)}}
@5@ Stores the shared pointer {{tt|r}} in the shared pointer pointed-to by {{tt|p}} atomically, effectively executing {{c|p-&gt;swap(r)}}. As with the non-specialized {{lc|std::atomic_store_explicit}}, {{tt|mo}} cannot be {{lc|std::memory_order_acquire}} or {{lc|std::memory_order_acq_rel}}.
@6@ Equivalent to {{c|atomic_exchange_explicit(p, r, memory_order_seq_cst)}}
@7@ Stores the shared pointer {{tt|r}} in the shared pointer pointed to by {{tt|p}} and returns the value formerly pointed-to by {{tt|p}}, atomically. Effectively executes {{c|p-&gt;swap(r)}} and returns a copy of {{tt|r}} after the swap.
@8@ Equivalent to {{c|atomic_compare_exchange_weak_explicit(p, expected, desired, std::memory_order_seq_cst, std::memory_order_seq_cst)}}
@9@ Equivalent to {{c|atomic_compare_exchange_strong_explicit(p, expected, desired, std::memory_order_seq_cst, std::memory_order_seq_cst)}}
@10@ Compares the shared pointers pointed-to by {{tt|p}} and {{tt|expected}}. If they are equivalent (share ownership of the same pointer and refer to the same pointer), assigns {{tt|desired}} into {{tt|*p}} using the memory ordering constraints specified by {{tt|success}} and returns {{c|true}}. If they are not equivalent, assigns {{tt|*p}} into {{tt|*expected}} using the memory ordering constraints specified by {{tt|failure}} and returns {{c|false}}.
@11@ Same as 10), but may fail spuriously.

All these functions invoke undefined behavior if {{tt|p}} is a null pointer.

===Parameters===
{{par begin}}
{{par | p, expected | a pointer to a {{lc|std::shared_ptr}} }}
{{par | r, desired | a {{lc|std::shared_ptr}} }}
{{par | mo, success, failure | memory ordering selectors of type {{lc|std::memory_order}} }}
{{par end}}

===Exceptions===
These functions do not throw exceptions.

===Return value===
@1@ {{c|true}} if atomic access is implemented using lock-free instructions
@2,3@ A copy of the pointed-to shared pointer.
@4,5@ (none)
@6,7@ A copy of the formerly pointed-to shared pointer
@8,9,10,11@ {{c|true}} if the shared pointers were equivalent and the exchange was performed, {{c|false}} otherwise.

===Notes===
The [[cpp/experimental/concurrency|Concurrency TS]] offers atomic smart pointer classes {{tt|atomic_shared_ptr}} and {{tt|atomic_weak_ptr}} as a replacement for the use of these functions.
===Example===
{{example}} &lt;!-- adapt from http://stackoverflow.com/a/16617935/273767 --&gt;

===See also===
{{dsc begin}}
{{dsc inc | cpp/atomic/dsc atomic_is_lock_free}}
{{dsc inc | cpp/atomic/dsc atomic_store}}
{{dsc inc | cpp/atomic/dsc atomic_load}}
{{dsc inc | cpp/atomic/dsc atomic_exchange}}
{{dsc inc | cpp/atomic/dsc atomic_compare_exchange}}
{{dsc end}}

[[de:cpp/memory/shared ptr/atomic]]
[[es:cpp/memory/shared ptr/atomic]]
[[fr:cpp/memory/shared ptr/atomic]]
[[it:cpp/memory/shared ptr/atomic]]
[[ja:cpp/memory/shared ptr/atomic]]
[[pt:cpp/memory/shared ptr/atomic]]
[[ru:cpp/memory/shared ptr/atomic]]
[[zh:cpp/memory/shared ptr/atomic]]</text>
      <sha1>pkqufwgg6p6rzx4c3tcumxjs203q5qe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/get</title>
    <ns>0</ns>
    <id>2206</id>
    <revision>
      <id>91823</id>
      <parentid>84026</parentid>
      <timestamp>2017-03-31T19:58:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1422">{{cpp/memory/shared_ptr/title | get}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17 |
T* get() const;
}}
{{dcl | since=c++17 |
element_type* get() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the stored pointer.

===Parameters===
(none)

===Return value===
The stored pointer.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
A {{tt|shared_ptr}} may share ownership of an object while storing a pointer to another object. {{tt|get()}} returns the stored pointer, not the managed pointer.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;string&gt;

typedef std::shared_ptr&lt;int&gt; IntPtr;

void output(const std::string&amp; msg, int* pInt)
{
    std::cout &lt;&lt; msg &lt;&lt; *pInt &lt;&lt; &quot;\n&quot;;
}

int main()
{
    int* pInt = new int(42);
    IntPtr pShared(new int(42));

    output(&quot;Naked pointer &quot;, pInt);
    // output(&quot;Shared pointer &quot;, pShared); // compiler error
    output(&quot;Shared pointer with get() &quot;, pShared.get());

    delete pInt;
}
 | output=
Naked pointer 42
Shared pointer with get() 42
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc operator*}}
{{dsc end}}

[[de:cpp/memory/shared ptr/get]]
[[es:cpp/memory/shared ptr/get]]
[[fr:cpp/memory/shared ptr/get]]
[[it:cpp/memory/shared ptr/get]]
[[ja:cpp/memory/shared ptr/get]]
[[pt:cpp/memory/shared ptr/get]]
[[ru:cpp/memory/shared ptr/get]]
[[zh:cpp/memory/shared ptr/get]]</text>
      <sha1>igr8yey3ah1kgerclflrwzg3wj16cbo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/get deleter</title>
    <ns>0</ns>
    <id>5313</id>
    <revision>
      <id>91918</id>
      <parentid>80264</parentid>
      <timestamp>2017-03-31T20:01:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2556">{{cpp/title | get_deleter}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl | since=c++11 |
template&lt; class Deleter, class T &gt;
Deleter* get_deleter( const std::shared_ptr&lt;T&gt;&amp; p );
}}

Access to the {{tt|p}}'s deleter. If the shared pointer {{tt|p}} owns a deleter of type cv-unqualified {{tt|Deleter}} (e.g. if it was created with one of the constructors that take a deleter as a parameter), then returns a pointer to the deleter. Otherwise, returns a null pointer.

===Parameters===
{{par begin}}
{{par | p | a shared pointer whose deleter needs to be accessed}}
{{par end}}

===Return value===
A pointer to the owned deleter or {{tt|nullptr}}. The returned pointer is valid at least as long as there remains at least one {{tt|shared_ptr}} instance that owns it.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The returned pointer may outlive the last {{tt|shared_ptr}} if, for example, {{lc|std::weak_ptr}}s remain and the implementation doesn't destroy the deleter until the entire control block is destroyed.

===Example===
{{example|demonstrates that shared_ptr deleter is independent of the shared_ptr's type
|code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo { int i; };
void foo_deleter(Foo * p)
{
    std::cout &lt;&lt; &quot;foo_deleter called!\n&quot;;
    delete p;
}

int main()
{
    std::shared_ptr&lt;int&gt; aptr;

    {
        // create a shared_ptr that owns a Foo and a deleter
        auto foo_p = new Foo;
        std::shared_ptr&lt;Foo&gt; r(foo_p, foo_deleter);
        aptr = std::shared_ptr&lt;int&gt;(r, &amp;r-&gt;i); // aliasing ctor
        // aptr is now pointing to an int, but managing the whole Foo
    } // r gets destroyed (deleter not called)

    // obtain pointer to the deleter:
    if(auto del_p = std::get_deleter&lt;void(*)(Foo*)&gt;(aptr))
    {
        std::cout &lt;&lt; &quot;shared_ptr&lt;int&gt; owns a deleter\n&quot;;
        if(*del_p == foo_deleter)
            std::cout &lt;&lt; &quot;...and it equals &amp;foo_deleter\n&quot;;
    } else
        std::cout &lt;&lt; &quot;The deleter of shared_ptr&lt;int&gt; is null!\n&quot;;
} // deleter called here
|output=
shared_ptr&lt;int&gt; owns a deleter
...and it equals &amp;foo_deleter
foo_deleter called!
}}
===See also===

{{dsc begin}}
{{dsc mem ctor| cpp/memory/shared_ptr/shared_ptr | {{lc|std::shared_ptr}} constructors }}
{{dsc end}}

[[de:cpp/memory/shared ptr/get deleter]]
[[es:cpp/memory/shared ptr/get deleter]]
[[fr:cpp/memory/shared ptr/get deleter]]
[[it:cpp/memory/shared ptr/get deleter]]
[[ja:cpp/memory/shared ptr/get deleter]]
[[pt:cpp/memory/shared ptr/get deleter]]
[[ru:cpp/memory/shared ptr/get deleter]]
[[zh:cpp/memory/shared ptr/get deleter]]</text>
      <sha1>h42a0ys9blvhg0r78p6nqpdkiropyht</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/hash</title>
    <ns>0</ns>
    <id>5314</id>
    <revision>
      <id>90833</id>
      <parentid>88402</parentid>
      <timestamp>2017-03-11T20:16:45Z</timestamp>
      <contributor>
        <ip>172.56.39.118</ip>
      </contributor>
      <comment>fix cut-and-pasteo in C++17 definition</comment>
      <text xml:space="preserve" bytes="1067">{{cpp/title | hash&lt;small&gt;(std::shared_ptr)&lt;/small&gt;}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt;class T&gt; struct hash&lt;shared_ptr&lt;T&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for {{c|std::shared_ptr&lt;T&gt;}} allows users to obtain hashes of objects of type {{c|std::shared_ptr&lt;T&gt;}}.

For a given {{c|1=std::shared_ptr&lt;T&gt; p}}, this specialization ensures that
{{rev begin}}
{{rev|until=c++17|
{{c|1=std::hash&lt;std::shared_ptr&lt;T&gt;&gt;()(p) == std::hash&lt;T*&gt;()(p.get())}}.
}}
{{rev|since=c++17|
{{c|1=std::hash&lt;std::shared_ptr&lt;T&gt;&gt;()(p) == std::hash&lt;typename std::shared_ptr&lt;T&gt;::element_type*&gt;()(p.get())}}.
}}
{{rev end}}

===Example===
{{example
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[de:cpp/memory/shared ptr/hash]]
[[es:cpp/memory/shared ptr/hash]]
[[fr:cpp/memory/shared ptr/hash]]
[[it:cpp/memory/shared ptr/hash]]
[[ja:cpp/memory/shared ptr/hash]]
[[pt:cpp/memory/shared ptr/hash]]
[[ru:cpp/memory/shared ptr/hash]]
[[zh:cpp/memory/shared ptr/hash]]</text>
      <sha1>35v2nnsdlqiykydpxvbtstjcg8kbbbu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/make shared</title>
    <ns>0</ns>
    <id>4940</id>
    <revision>
      <id>91088</id>
      <parentid>91045</parentid>
      <timestamp>2017-03-17T22:08:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ remove hack</comment>
      <text xml:space="preserve" bytes="3658">{{cpp/title|make_shared}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl | header=memory | since=c++11|
template&lt; class T, class... Args &gt;
shared_ptr&lt;T&gt; make_shared( Args&amp;&amp;... args );
}}

Constructs an object of type {{tt|T}} and wraps it in a {{lc|std::shared_ptr}} using {{tt|args}} as the parameter list for the constructor of {{tt|T}}. The object is constructed as if by the expression {{c|::new (pv) T(std::forward&lt;Args&gt;(args)...)}}, where {{tt|pv}} is an internal {{tt|void*}} pointer to storage suitable to hold an object of type {{tt|T}}. The storage is typically larger than {{tt|sizeof(T)}} in order to use one allocation for both the control block of the shared pointer and the {{tt|T}} object.

The {{tt|std::shared_ptr}} constructor called by this function enables {{tt|shared_from_this}} with a pointer to the newly constructed object of type {{tt|T}}.

===Parameters===
{{par begin}}
{{par | args | list of arguments with which an instance of {{tt|T}} will be constructed.}}
{{par end}}

===Return value===
{{lc|std::shared_ptr}} of an instance of type {{tt|T}}.

===Exceptions===
May throw {{lc|std::bad_alloc}} or any exception thrown by the constructor of {{tt|T}}. If an exception is thrown, this function has no effect.

===Notes===
This function may be used as an alternative to {{c|std::shared_ptr&lt;T&gt;(new T(args...))}}. The trade-offs are:
* {{c|std::shared_ptr&lt;T&gt;(new T(args...))}} performs at least two allocations (one for the object {{tt|T}} and one for the control block of the shared pointer), while {{c|std::make_shared&lt;T&gt;}} typically performs only one allocation (the standard recommends, but does not require this, all known implementations do this)
* If any {{lc|std::weak_ptr}} references the control block created by {{tt|std::make_shared}} after the lifetime of all shared owners ended, the memory occupied by {{tt|T}} persists until all weak owners get destroyed as well, which may be undesirable if {{tt|sizeof(T)}} is large.
* {{c|std::shared_ptr&lt;T&gt;(new T(args...))}} may call a non-public constructor of {{tt|T}} if executed in context where it is accessible, while {{tt|std::make_shared}} requires public access to the selected constructor.
* Unlike the {{lc|std::shared_ptr}} constructors, {{tt|std::make_shared}} does not allow a custom deleter.
* {{lc|std::shared_ptr}} supports array types (as of C++17), but {{tt|std::make_shared}} does not. This functionality is supported by [http://www.boost.org/doc/libs/release/libs/smart_ptr/make_shared_array.html boost::make_shared]
{{rrev|until=c++17|* code such as {{c|f(std::shared_ptr&lt;int&gt;(new int(42)), g())}} can cause a memory leak if {{tt|g}} gets called after {{tt|new int(42)}} and throws an exception, while {{c|f(std::make_shared&lt;int&gt;(42), g())}} is safe, since two function calls are [[cpp/language/eval_order|never interleaved]].}}
{{cpp/memory/shared_ptr/enabling shared_from_this}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

void foo(const std::shared_ptr&lt;int&gt;&amp; i)
{
    (*i)++;
}

int main()
{
    auto sp = std::make_shared&lt;int&gt;(12);
    foo(sp);
    std::cout &lt;&lt; *sp &lt;&lt; std::endl;
}
 | output=
13
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc constructor}}
{{dsc inc | cpp/memory/shared_ptr/dsc allocate_shared}}
{{dsc inc | cpp/memory/unique_ptr/dsc make_unique}}
{{dsc end}}

[[de:cpp/memory/shared ptr/make shared]]
[[es:cpp/memory/shared ptr/make shared]]
[[fr:cpp/memory/shared ptr/make shared]]
[[it:cpp/memory/shared ptr/make shared]]
[[ja:cpp/memory/shared ptr/make shared]]
[[pt:cpp/memory/shared ptr/make shared]]
[[ru:cpp/memory/shared ptr/make shared]]
[[zh:cpp/memory/shared ptr/make shared]]</text>
      <sha1>dkxe5tcvjaw0pxfjma5fu5smpqj9e82</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/operator at</title>
    <ns>0</ns>
    <id>14802</id>
    <revision>
      <id>88400</id>
      <parentid>84030</parentid>
      <timestamp>2016-11-17T19:48:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0414r2 wording says Throws: Nothing.</comment>
      <text xml:space="preserve" bytes="1430">{{cpp/memory/shared_ptr/title | operator[]}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1= 
element_type&amp; operator[]( std::ptrdiff_t idx ) 
}}
{{dcl end}}

Index into the array pointed to by the stored pointer. 

The behavior is undefined if the stored pointer is null or if {{tt|idx}} is negative. 

If {{tt|T}} (the template parameter of {{tt|shared_ptr}}) is an array type {{tt|U[N]}}, {{tt|idx}} must be less than {{tt|N}}, otherwise the behavior is undefined.

===Parameters===
{{par begin}}
{{par | idx | the array index }}
{{par end}}

===Return value===
A reference to the {{tt|idx}}-th element of the array , i.e., {{c|get()[i]}}

===Exceptions===
(none)

===Remarks===
When {{tt|T}} is not an array type, it is unspecified whether this function is declared. If the function is declared, it is unspecified what its return type is, except that the declaration (although not necessarily the definition) of the function is guaranteed to be legal.

===Example===
{{example
 | code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/shared ptr/operator_at]]
[[es:cpp/memory/shared ptr/operator_at]]
[[fr:cpp/memory/shared ptr/operator_at]]
[[it:cpp/memory/shared ptr/operator_at]]
[[ja:cpp/memory/shared ptr/operator_at]]
[[pt:cpp/memory/shared ptr/operator_at]]
[[ru:cpp/memory/shared ptr/operator_at]]
[[zh:cpp/memory/shared ptr/operator_at]]</text>
      <sha1>pwwhd9ntgpit1si0rflb0cmemq2xq7b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/operator bool</title>
    <ns>0</ns>
    <id>2210</id>
    <revision>
      <id>91774</id>
      <parentid>72680</parentid>
      <timestamp>2017-03-31T19:57:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1398">{{cpp/memory/shared_ptr/title | operator bool}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl |
explicit operator bool() const;
}}

Checks if {{c|*this}} stores a non-null pointer, i.e. whether {{c|1=get() != nullptr}}.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} stores a pointer, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
An empty shared_ptr (where {{c|1=use_count() == 0}}) may store a non-null pointer accessible by {{tt|get()}}, e.g. if it were created using the aliasing constructor.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

typedef std::shared_ptr&lt;int&gt; IntPtr;

void report(IntPtr ptr) 
{
    if (ptr) {
        std::cout &lt;&lt; &quot;*ptr=&quot; &lt;&lt; *ptr &lt;&lt; &quot;\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;ptr is not a valid pointer.\n&quot;;
    }
}

int main()
{
    IntPtr ptr;
    report(ptr);

    ptr = IntPtr(new int(7));
    report(ptr);
}
 | output=
ptr is not a valid pointer.
*ptr=7
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/shared ptr/operator bool]]
[[es:cpp/memory/shared ptr/operator bool]]
[[fr:cpp/memory/shared ptr/operator bool]]
[[it:cpp/memory/shared ptr/operator bool]]
[[ja:cpp/memory/shared ptr/operator bool]]
[[pt:cpp/memory/shared ptr/operator bool]]
[[ru:cpp/memory/shared ptr/operator bool]]
[[zh:cpp/memory/shared ptr/operator bool]]</text>
      <sha1>8etwcevu0banq015bfsj6b134rxttls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/operator cmp</title>
    <ns>0</ns>
    <id>5738</id>
    <revision>
      <id>91578</id>
      <parentid>88735</parentid>
      <timestamp>2017-03-31T19:50:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4724">{{cpp/memory/shared_ptr/title | operator{{==}}, !{{=}}, &amp;lt;, &amp;lt;{{=}}, &amp;gt;, &amp;gt;{{=}} }}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl h | Compare two {{tt|shared_ptr}} objects}}
{{dcl | num=1 | since=c++11 | 1= 
template &lt; class T, class U &gt; 
bool operator==( const shared_ptr&lt;T&gt;&amp; lhs, const shared_ptr&lt;U&gt;&amp; rhs );
}}
{{dcl | num=2 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
bool operator!=( const shared_ptr&lt;T&gt;&amp; lhs, const shared_ptr&lt;U&gt;&amp; rhs );
}}
{{dcl | num=3 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
bool operator&lt;( const shared_ptr&lt;T&gt;&amp; lhs, const shared_ptr&lt;U&gt;&amp; rhs );
}}
{{dcl | num=4 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
bool operator&gt;( const shared_ptr&lt;T&gt;&amp; lhs, const shared_ptr&lt;U&gt;&amp; rhs );
}}
{{dcl | num=5 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
bool operator&lt;=( const shared_ptr&lt;T&gt;&amp; lhs, const shared_ptr&lt;U&gt;&amp; rhs );
}}
{{dcl | num=6 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
bool operator&gt;=( const shared_ptr&lt;T&gt;&amp; lhs, const shared_ptr&lt;U&gt;&amp; rhs );
}}

{{dcl h | Compare a {{tt|shared_ptr}} with a null pointer }}
{{dcl | num=7 | since=c++11 | 1= 
template&lt; class T &gt; 
bool operator==( const shared_ptr&lt;T&gt;&amp; lhs, std::nullptr_t rhs );
}}
{{dcl | num=8 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator==( std::nullptr_t lhs, const shared_ptr&lt;T&gt;&amp; rhs );
}}
{{dcl | num=9 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator!=( const shared_ptr&lt;T&gt;&amp; lhs, std::nullptr_t rhs );
}}
{{dcl | num=10 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator!=( std::nullptr_t lhs, const shared_ptr&lt;T&gt;&amp; rhs );
}}
{{dcl | num=11 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&lt;( const shared_ptr&lt;T&gt;&amp; lhs, std::nullptr_t rhs );
}}
{{dcl | num=12 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&lt;( std::nullptr_t lhs, const shared_ptr&lt;T&gt;&amp; rhs );
}}
{{dcl | num=13 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&gt;( const shared_ptr&lt;T&gt;&amp; lhs, std::nullptr_t rhs );
}}
{{dcl | num=14 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&gt;( std::nullptr_t lhs, const shared_ptr&lt;T&gt;&amp; rhs );
}}
{{dcl | num=15 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&lt;=( const shared_ptr&lt;T&gt;&amp; lhs, std::nullptr_t rhs );
}}
{{dcl | num=16 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&lt;=( std::nullptr_t lhs, const shared_ptr&lt;T&gt;&amp; rhs );
}}
{{dcl | num=17 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&gt;=( const shared_ptr&lt;T&gt;&amp; lhs, std::nullptr_t rhs );
}}
{{dcl | num=18 | since=c++11 | 1= 
template&lt; class T &gt;
bool operator&gt;=( std::nullptr_t lhs, const shared_ptr&lt;T&gt;&amp; rhs );
}}

{{dcl end}}

Compares two {{tt|shared_ptr&lt;T&gt;}} objects or compares {{tt|shared_ptr&lt;T&gt;}} with a null pointer.

Note that the comparison operators for {{tt|shared_ptr}} simply compare pointer values; the actual objects pointed to are ''not'' compared.  Having {{tt|operator&lt;}} defined for {{tt|shared_ptr}} allows {{tt|shared_ptr}}s to be used as keys in associative containers, like {{lc|std::map}} and {{lc|std::set}}.

===Parameters===
{{par begin}}
{{par | lhs | the left-hand {{tt|shared_ptr}} to compare }}
{{par | rhs | the right-hand {{tt|shared_ptr}} to compare }}
{{par end}} 

===Return value===
@1@ {{tt|lhs.get() {{==}} rhs.get()}}

@2@ {{c|1=!(lhs == rhs)}}

@3@ {{c|std::less&lt;V&gt;()(lhs.get(), rhs.get())}}, where V is the [[cpp/language/operator_comparison#Pointer comparison operators|composite pointer type]] of {{c|std::shared_ptr&lt;T&gt;::element_type*}} and {{c|std::shared_ptr&lt;U&gt;::element_type*}}

@4@ {{c|rhs &lt; lhs}}

@5@ {{c|!(rhs &lt; lhs)}}

@6@ {{c|!(lhs &lt; rhs)}}

@7@ {{c|!lhs}}

@8@ {{c|!rhs}}

@9@ {{c|(bool)lhs}}

@10@ {{c|(bool)rhs}} 

@11@ {{c|std::less&lt;std::shared_ptr&lt;T&gt;::element_type*&gt;()(lhs.get(), nullptr)}}

@12@ {{c|std::less&lt;std::shared_ptr&lt;T&gt;::element_type*&gt;()(nullptr, rhs.get())}}

@13@ {{c|nullptr &lt; lhs}}

@14@ {{c|rhs &lt; nullptr}}

@15@ {{c|!(nullptr &lt; lhs)}}

@16@ {{c|!(rhs &lt; nullptr)}}

@17@ {{c|!(lhs &lt; nullptr)}}

@18@ {{c|!(nullptr &lt; rhs)}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
In all cases, it is the stored pointer (the one returned by {{lc|get()}}) that is compared, rather than the managed pointer (the one passed to the deleter when use_count goes to zero). The two pointers may differ in a shared_ptr created using the aliasing constructor.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/shared ptr/operator cmp]]
[[es:cpp/memory/shared ptr/operator cmp]]
[[fr:cpp/memory/shared ptr/operator cmp]]
[[it:cpp/memory/shared ptr/operator cmp]]
[[ja:cpp/memory/shared ptr/operator cmp]]
[[pt:cpp/memory/shared ptr/operator cmp]]
[[ru:cpp/memory/shared ptr/operator cmp]]
[[zh:cpp/memory/shared ptr/operator cmp]]</text>
      <sha1>lhprtt2dv86geg0xa0ccwcubu941p4d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/operator ltlt</title>
    <ns>0</ns>
    <id>5739</id>
    <revision>
      <id>58400</id>
      <parentid>50176</parentid>
      <timestamp>2013-06-01T06:14:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1245">{{cpp/memory/shared_ptr/title | operator&amp;lt;&amp;lt;}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | 1= 
template &lt;class T, class U, class V&gt;
    basic_ostream&lt;U, V&gt;&amp; operator&lt;&lt;(basic_ostream&lt;U, V&gt;&amp; os, const shared_ptr&lt;T&gt;&amp; ptr);
}}
{{dcl end}}

Inserts a {{tt|shared_ptr&lt;T&gt;}} into a {{lc|std::basic_ostream}}.

Equivalent to {{tt|os &lt;&lt; ptr.get()}}.

===Parameters===
{{par begin}}
{{par | os | a {{lc|std::basic_ostream}} to insert {{tt|ptr}} into }}
{{par | ptr | the data to be inserted into {{tt|os}} }}
{{par end}} 

===Return value===
{{tt|os}}

===Example===
{{example
 | p=true 
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

class Foo {};

int main()
{
    auto sp = std::make_shared&lt;Foo&gt;();
    std::cout &lt;&lt; sp &lt;&lt; std::endl;
    std::cout &lt;&lt; sp.get() &lt;&lt; std::endl;
}
 | output=
0x6d9028
0x6d9028
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/shared ptr/operator ltlt]]
[[es:cpp/memory/shared ptr/operator ltlt]]
[[fr:cpp/memory/shared ptr/operator ltlt]]
[[it:cpp/memory/shared ptr/operator ltlt]]
[[ja:cpp/memory/shared ptr/operator ltlt]]
[[pt:cpp/memory/shared ptr/operator ltlt]]
[[ru:cpp/memory/shared ptr/operator ltlt]]
[[zh:cpp/memory/shared ptr/operator ltlt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/operator*</title>
    <ns>0</ns>
    <id>2207</id>
    <revision>
      <id>91341</id>
      <parentid>88401</parentid>
      <timestamp>2017-03-31T19:40:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1936">{{cpp/memory/shared_ptr/title | operator* | operator-&amp;gt;}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
T&amp; operator*() const;
}}
{{dcl | num=2 | since=c++11 | 1=
T* operator-&gt;() const;
}}
{{dcl end}}

Dereferences the stored pointer. The behavior is undefined if the stored pointer is null.

===Parameters===
(none)

===Return value===
@1@ The result of dereferencing the stored pointer, i.e., {{c|*get()}}
@2@ The stored pointer, i.e., {{c|get()}}

===Exceptions===
{{unreviewed noexcept}}

===Remarks===
When {{tt|T}} is a (possibly cv-qualified) {{tt|void}}, it is unspecified whether function {{v|1}} is declared.

{{rev begin}}
{{rev|since=c++17|
When {{tt|T}} is an array type, it is unspecified whether these member functions are declared, and if they are, what their return type is, except that the declaration (not necessarily the definition) of these functions is well-formed.}}
{{rev end}}

If either function is declared despite being unspecified, it is unspecified what its return type is, except that the declaration (although not necessarily the definition) of the function is guaranteed to be legal. This makes it possible to instantiate {{c|std::shared_ptr&lt;void&gt;}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo
{
   Foo(int in) : a(in) {}
   void print() const
   {
      std::cout &lt;&lt; &quot;a = &quot; &lt;&lt; a &lt;&lt; '\n';
   }
   int a;
};

int main()
{
   auto ptr = std::make_shared&lt;Foo&gt;(10);
   ptr-&gt;print();
   (*ptr).print();
}
 | output=
a = 10
a = 10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/shared ptr/operator*]]
[[es:cpp/memory/shared ptr/operator*]]
[[fr:cpp/memory/shared ptr/operator*]]
[[it:cpp/memory/shared ptr/operator*]]
[[ja:cpp/memory/shared ptr/operator*]]
[[pt:cpp/memory/shared ptr/operator*]]
[[ru:cpp/memory/shared ptr/operator*]]
[[zh:cpp/memory/shared ptr/operator*]]</text>
      <sha1>9fdw13yig2om32euhwy83g78y02pr7k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/operator=</title>
    <ns>0</ns>
    <id>2203</id>
    <revision>
      <id>91516</id>
      <parentid>91251</parentid>
      <timestamp>2017-03-31T19:48:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2683">{{cpp/memory/shared_ptr/title | operator{{=}}}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1= 
shared_ptr&amp; operator=( const shared_ptr&amp; r );
}}
{{dcl | num=1 | 1= 
template&lt; class Y &gt; 
shared_ptr&amp; operator=( const shared_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=2 | 1= 
shared_ptr&amp; operator=( shared_ptr&amp;&amp; r );
}}
{{dcl | num=2 | 1= 
template&lt; class Y &gt; 
shared_ptr&amp; operator=( shared_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl | num=3 | 1= 
template&lt; class Y &gt; 
shared_ptr&amp; operator=( std::auto_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl | num=4 | 1= 
template&lt; class Y, class Deleter &gt; 
shared_ptr&amp; operator=( std::unique_ptr&lt;Y,Deleter&gt;&amp;&amp; r );
}}
{{dcl end}}

Replaces the managed object with the one managed by {{tt|r}}.

If {{tt|*this}} already owns an object and it is the last {{tt|shared_ptr}} owning it, and {{tt|r}} is not the same as {{tt|*this}}, the object is destroyed through the owned deleter.

1) Shares ownership of the object managed by {{tt|r}}. If {{tt|r}} manages no object, {{tt|*this}} manages no object too. Equivalent to {{c|shared_ptr&lt;T&gt;(r).swap(*this)}}.

2) Move-assigns a {{tt|shared_ptr}} from {{tt|r}}. After the assignment, {{c|*this}} contains a copy of the previous state of {{tt|r}}, {{tt|r}} is empty. Equivalent to {{c|shared_ptr&lt;T&gt;(std::move(r)).swap(*this)}}.

3) Transfers the ownership of the object managed by {{tt|r}} to {{tt|*this}}. If {{tt|r}} manages no object, {{tt|*this}} manages no object too. After the assignment, {{tt|*this}} contains the pointer previously held by {{tt|r}}, and {{c|use_count(){{==}}1}}; also {{tt|r}} is empty. Equivalent to {{c|shared_ptr&lt;T&gt;(r).swap(*this)}}.

4) Transfers the ownership of the object managed by {{tt|r}} to {{c|*this}}. The deleter associated to {{tt|r}} is stored for future deletion of the managed object. {{tt|r}} manages no object after the call. Equivalent to {{c|shared_ptr&lt;T&gt;(std::move(r)).swap(*this)}}.

===Parameters===
{{par begin}}
{{par | r | another smart pointer to share the ownership to or acquire the ownership from}}
{{par end}} 

===Return value===
{{c|*this}}

===Notes===
The implementation may meet the requirements without creating a temporary {{tt|shared_ptr}} object.

===Exceptions===
1-2) {{unreviewed noexcept}}

3) (none)

4) may throw exception

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc reset}}
{{dsc end}}

[[de:cpp/memory/shared ptr/operator=]]
[[es:cpp/memory/shared ptr/operator=]]
[[fr:cpp/memory/shared ptr/operator=]]
[[it:cpp/memory/shared ptr/operator=]]
[[ja:cpp/memory/shared ptr/operator=]]
[[pt:cpp/memory/shared ptr/operator=]]
[[ru:cpp/memory/shared ptr/operator=]]
[[zh:cpp/memory/shared ptr/operator=]]</text>
      <sha1>7rwozftu76m083r3avqp7zu39o7umew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/owner before</title>
    <ns>0</ns>
    <id>2211</id>
    <revision>
      <id>42299</id>
      <parentid>20929</parentid>
      <timestamp>2012-11-02T22:47:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="375">{{cpp/memory/owner_before|shared_ptr}}

[[de:cpp/memory/shared ptr/owner before]]
[[es:cpp/memory/shared ptr/owner before]]
[[fr:cpp/memory/shared ptr/owner before]]
[[it:cpp/memory/shared ptr/owner before]]
[[ja:cpp/memory/shared ptr/owner before]]
[[pt:cpp/memory/shared ptr/owner before]]
[[ru:cpp/memory/shared ptr/owner before]]
[[zh:cpp/memory/shared ptr/owner before]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/pointer cast</title>
    <ns>0</ns>
    <id>5308</id>
    <revision>
      <id>91808</id>
      <parentid>89005</parentid>
      <timestamp>2017-03-31T19:58:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4578">{{cpp/title | static_pointer_cast | dynamic_pointer_cast | const_pointer_cast | reinterpret_pointer_cast}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | num=1 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
std::shared_ptr&lt;T&gt; static_pointer_cast( const std::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl | num=2 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
std::shared_ptr&lt;T&gt; dynamic_pointer_cast( const std::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl | num=3 | since=c++11 | 1= 
template&lt; class T, class U &gt; 
std::shared_ptr&lt;T&gt; const_pointer_cast( const std::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl | num=4 | since=c++17 | 1= 
template&lt; class T, class U &gt; 
std::shared_ptr&lt;T&gt; reinterpret_pointer_cast( const std::shared_ptr&lt;U&gt;&amp; r );
}}
{{dcl end}}
Creates a new instance of {{lc|std::shared_ptr}} whose stored pointer is obtained from {{tt|r}}'s stored pointer using a cast expression. If {{tt|r}} is empty, so is the new {{tt|shared_ptr}} (but its stored pointer is not necessarily null).

Otherwise, the new {{tt|shared_ptr}} will share ownership with {{tt|r}}, except that it is empty if the {{tt|dynamic_cast}} performed by {{tt|dynamic_pointer_cast}} returns a null pointer.

Let {{tt|Y}} be {{c|typename std::shared_ptr&lt;T&gt;::element_type}}, then the resulting {{lc|std::shared_ptr}}'s stored pointer will be obtained by calling (in respective order):

@1@ {{c|static_cast&lt;Y*&gt;(r.get())}}.
@2@ {{c|dynamic_cast&lt;Y*&gt;(r.get())}} (If the result of the {{tt|dynamic_cast}} is a null pointer value, the returned {{tt|shared_ptr}} will be empty).
@3@ {{c|const_cast&lt;Y*&gt;(r.get())}}.
@4@ {{c|reinterpret_cast&lt;Y*&gt;(r.get())}}

The behavior of these functions is undefined unless the corresponding cast from {{tt|U*}} to {{tt|T*}} is well formed:

@1@ The behavior is undefined unless {{c|static_cast&lt;T*&gt;((U*)nullptr)}} is well formed.
@2@ The behavior is undefined unless {{c|dynamic_cast&lt;T*&gt;((U*)nullptr)}} is well formed.
@3@ The behavior is undefined unless {{c|const_cast&lt;T*&gt;((U*)nullptr)}} is well formed.
@4@ The behavior is undefined unless {{c|reinterpret_cast&lt;T*&gt;((U*)nullptr)}} is well formed.

===Parameters===
{{par begin}}
{{par | r | The pointer to convert}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The expressions {{c|std::shared_ptr&lt;T&gt;(static_cast&lt;T*&gt;(r.get()))}}, {{c|std::shared_ptr&lt;T&gt;(dynamic_cast&lt;T*&gt;(r.get()))}} and {{c|std::shared_ptr&lt;T&gt;(const_cast&lt;T*&gt;(r.get()))}} might seem to have the same effect, but they all will likely result in undefined behavior, attempting to delete the same object twice!

===Possible implementation===
{{eq fun|1=
template&lt; class T, class U &gt; 
std::shared_ptr&lt;T&gt; static_pointer_cast( const std::shared_ptr&lt;U&gt;&amp; r ) noexcept
{
    auto p = static_cast&lt;typename std::shared_ptr&lt;T&gt;::element_type*&gt;(r.get());
    return std::shared_ptr&lt;T&gt;(r, p);
}
|2=
template&lt; class T, class U &gt; 
std::shared_ptr&lt;T&gt; dynamic_pointer_cast( const std::shared_ptr&lt;U&gt;&amp; r ) noexcept
{
    if (auto p = dynamic_cast&lt;typename std::shared_ptr&lt;T&gt;::element_type*&gt;(r.get())) {
        return std::shared_ptr&lt;T&gt;(r, p);
    } else {
        return std::shared_ptr&lt;T&gt;();
    }
}
|3=
template&lt; class T, class U &gt; 
std::shared_ptr&lt;T&gt; const_pointer_cast( const std::shared_ptr&lt;U&gt;&amp; r ) noexcept
{
    auto p = const_cast&lt;typename std::shared_ptr&lt;T&gt;::element_type*&gt;(r.get());
    return std::shared_ptr&lt;T&gt;(r, p);
}
}}

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
 
struct BaseClass {};
 
struct DerivedClass : BaseClass
{
    void f() const
    {
        std::cout &lt;&lt; &quot;Hello World!\n&quot;;
    }
    ~DerivedClass(){ // note, it's not virtual
        std::cout &lt;&lt; &quot;~DerivedClass\n&quot;;
    }
};
 
int main()
{
    std::shared_ptr&lt;BaseClass&gt; ptr_to_base(std::make_shared&lt;DerivedClass&gt;());
 
    // ptr_to_base-&gt;f(); // Error won't compile: BaseClass has no member named 'f'
 
    std::static_pointer_cast&lt;DerivedClass&gt;(ptr_to_base)-&gt;f(); // OK
    // (constructs a temporary shared_ptr, then calls operator-&gt;)
 
    static_cast&lt;DerivedClass*&gt;(ptr_to_base.get())-&gt;f(); // also OK
    // (direct cast, does not construct a temporary shared_ptr)
}
 |output=
Hello World!
Hello World!
~DerivedClass
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc constructor}}
{{dsc end}}

[[de:cpp/memory/shared ptr/pointer cast]]
[[es:cpp/memory/shared ptr/pointer cast]]
[[fr:cpp/memory/shared ptr/pointer cast]]
[[it:cpp/memory/shared ptr/pointer cast]]
[[ja:cpp/memory/shared ptr/pointer cast]]
[[pt:cpp/memory/shared ptr/pointer cast]]
[[ru:cpp/memory/shared ptr/pointer cast]]
[[zh:cpp/memory/shared ptr/pointer cast]]</text>
      <sha1>2t0ukozl4ggt1m9a7y8eqjm9zmzz8xg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/reset</title>
    <ns>0</ns>
    <id>2204</id>
    <revision>
      <id>91688</id>
      <parentid>81898</parentid>
      <timestamp>2017-03-31T19:55:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4344">{{cpp/memory/shared_ptr/title | reset}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
void reset();
}}
{{dcl | num=2 | since=c++11 | 1= 
template&lt; class Y &gt; 
void reset( Y* ptr );
}}
{{dcl | num=3 | since=c++11 | 1= 
template&lt; class Y, class Deleter &gt; 
void reset( Y* ptr, Deleter d );
}}
{{dcl | num=4 | since=c++11 | 1= 
template&lt; class Y, class Deleter, class Alloc &gt; 
void reset( Y* ptr, Deleter d, Alloc alloc );
}}
{{dcl end}}

Replaces the managed object with an object pointed to by {{tt|ptr}}. Optional deleter {{tt|d}} can be supplied, which is later used to destroy the new object when no {{tt|shared_ptr}} objects own it. By default, {{ltt|cpp/language/delete}} expression is used as deleter. Proper {{ltt|cpp/language/delete}} expression corresponding to the supplied type is always selected, this is the reason why the function is implemented as template using a separate parameter {{tt|Y}}.

If {{tt|*this}} already owns an object and it is the last {{tt|shared_ptr}} owning it, the object is destroyed through the owned deleter.

If the object pointed to by {{tt|ptr}} is already owned, the function results in undefined behavior.

@1@ Releases the ownership of the managed object, if any. After the call, {{c|*this}} manages no object. Equivalent to {{c|shared_ptr().swap(*this);}}

@2-4@ Replaces the managed object with an object pointed to by {{tt|ptr}}. {{tt|Y}} must be a complete type and implicitly convertible to {{tt|T}}. Additionally:

:@2@ Uses the delete expression as the deleter. A valid delete expression must be available, i.e. {{c|delete ptr}} must be well formed, have well-defined behavior and not throw any exceptions. Equivalent to {{c|shared_ptr&lt;T&gt;(ptr).swap(*this);}}.

:@3@ Uses the specified deleter {{tt|d}} as the deleter. {{tt|Deleter}} must be callable for the type {{tt|T}}, i.e. {{c|d(ptr)}} must be well formed, have well-defined behavior and not throw any exceptions. {{tt|Deleter}} must be {{concept|CopyConstructible}}, and its copy constructor and destructor must not throw exceptions. Equivalent to {{c|shared_ptr&lt;T&gt;(ptr, d).swap(*this);}}.

:@4@ Same as {{v|3}}, but additionally uses a copy of {{tt|alloc}} for allocation of data for internal use. {{tt|Alloc}} must be a {{concept|Allocator}}. The copy constructor and destructor must not throw exceptions. Equivalent to {{c|shared_ptr&lt;T&gt;(ptr, d, alloc).swap(*this);}}.

===Parameters===
{{par begin}}
{{par | ptr | pointer to an object to acquire ownership of}}
{{par | d | deleter to store for deletion of the object}}
{{par | alloc | allocator to use for internal allocations}}
{{par end}} 

===Return value===
(none)

===Exceptions===
@1@ {{unreviewed noexcept}}

@2@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. {{c|delete ptr}} is called if an exception occurs.

@3-4@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. {{c|d(ptr)}} is called if an exception occurs.

===Example===
{{example
 | code=
#include &lt;memory&gt;
#include &lt;iostream&gt;

struct Foo {
    Foo(int n = 0) noexcept : bar(n) {
        std::cout &lt;&lt; &quot;Foo: constructor, bar = &quot; &lt;&lt; bar &lt;&lt; '\n';
    }
    ~Foo() {
         std::cout &lt;&lt; &quot;Foo: destructor, bar = &quot; &lt;&lt; bar &lt;&lt; '\n';
    }
    int getBar() const noexcept { return bar; }
private:
    int bar;
};

int main()
{
    std::shared_ptr&lt;Foo&gt; sptr = std::make_shared&lt;Foo&gt;(1);
    std::cout &lt;&lt; &quot;The first Foo's bar is &quot; &lt;&lt; sptr-&gt;getBar() &lt;&lt; &quot;\n&quot;;

    // reset the shared_ptr, hand it a fresh instance of Foo
    // (the old instance will be destroyed after this call)
    sptr.reset(new Foo);
    std::cout &lt;&lt; &quot;The second Foo's bar is &quot; &lt;&lt; sptr-&gt;getBar() &lt;&lt; &quot;\n&quot;;
}
 | output=
Foo: constructor, bar = 1
The first Foo's bar is 1
Foo: constructor, bar = 0
Foo: destructor, bar = 1
The second Foo's bar is 0
Foo: destructor, bar = 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc constructor}}
{{dsc end}}

[[de:cpp/memory/shared ptr/reset]]
[[es:cpp/memory/shared ptr/reset]]
[[fr:cpp/memory/shared ptr/reset]]
[[it:cpp/memory/shared ptr/reset]]
[[ja:cpp/memory/shared ptr/reset]]
[[pt:cpp/memory/shared ptr/reset]]
[[ru:cpp/memory/shared ptr/reset]]
[[zh:cpp/memory/shared ptr/reset]]</text>
      <sha1>1y1q0o60xb47ro19hzjjkcai5zmz9bl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/shared ptr</title>
    <ns>0</ns>
    <id>2200</id>
    <revision>
      <id>91970</id>
      <parentid>91400</parentid>
      <timestamp>2017-03-31T21:33:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2802, 2874, 2875, 2876</comment>
      <text xml:space="preserve" bytes="10869">{{cpp/memory/shared_ptr/title | shared_ptr}}
{{cpp/memory/shared_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1= 
constexpr shared_ptr();
}}
{{dcl | num=2 | 1= 
constexpr shared_ptr( std::nullptr_t );
}}
{{dcl | num=3 | 1= 
template&lt; class Y &gt; 
explicit shared_ptr( Y* ptr );
}}
{{dcl | num=4 | 1= 
template&lt; class Y, class Deleter &gt; 
shared_ptr( Y* ptr, Deleter d );
}}
{{dcl | num=5 | 1= 
template&lt; class Deleter &gt; 
shared_ptr( std::nullptr_t ptr, Deleter d );
}}
{{dcl | num=6 | 1= 
template&lt; class Y, class Deleter, class Alloc &gt; 
shared_ptr( Y* ptr, Deleter d, Alloc alloc );
}}
{{dcl | num=7 | 1= 
template&lt; class Deleter, class Alloc &gt; 
shared_ptr( std::nullptr_t ptr, Deleter d, Alloc alloc );
}}
{{dcl | num=8 | 1= &lt;!--
This is the correct signature. Please do not change it! element_type is the member typedef of std::shared_ptr.
--&gt;
template&lt; class Y &gt; 
shared_ptr( const shared_ptr&lt;Y&gt;&amp; r, element_type *ptr );
}}
{{dcl | num=9 | 1= 
shared_ptr( const shared_ptr&amp; r );
}}
{{dcl | num=9 | 1= 
template&lt; class Y &gt; 
shared_ptr( const shared_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=10 | 1= 
shared_ptr( shared_ptr&amp;&amp; r );
}}
{{dcl | num=10 | 1= 
template&lt; class Y &gt; 
shared_ptr( shared_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl | num=11 | 1= 
template&lt; class Y &gt; 
explicit shared_ptr( const std::weak_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=12 | until=c++17 | 1= 
template&lt; class Y &gt; 
shared_ptr( std::auto_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl | num=13 | 1= 
template&lt; class Y, class Deleter &gt; 
shared_ptr( std::unique_ptr&lt;Y,Deleter&gt;&amp;&amp; r );
}}
{{dcl end}}

Constructs new {{tt|shared_ptr}} from a variety of pointer types that refer to an object to manage. 

{{rev begin}}
{{rev|since=c++17|
For the purposes of the description below, a pointer type {{tt|Y*}} is said to be ''compatible with'' a pointer type {{tt|T*}} if either {{tt|Y*}} is convertible to {{tt|T*}} or {{tt|Y}} is the array type {{tt|U[N]}} and {{tt|T}} is {{tt|U cv []}} (where cv is some set of cv-qualifiers).
}}
{{rev end}}

@1-2@ Constructs a {{tt|shared_ptr}} with no managed object, i.e. empty {{tt|shared_ptr}}

@3-7@ Constructs a {{tt|shared_ptr}} with {{tt|ptr}} as the pointer to the managed object.
{{rrev multi|until1=c++17|rev1={{tt|Y*}} must be convertible to {{tt|T*}}.|rev2=If {{tt|T}} is an array type {{tt|U[N]}}, these constructors do not participate in overload resolution if {{tt|Y(*)[N]}} is not convertible to {{tt|T*}}. If {{tt|T}} is an array type {{tt|U[]}}, these constructors do not participate in overload resolution if {{tt|Y(*)[]}} is not convertible to {{tt|T*}}. Otherwise, these constructors do not participate in overload resolution if {{tt|Y*}} is not convertible to {{tt|T*}}.}} Additionally:

:@3@ Uses the [[cpp/language/delete|delete-expression]] {{c|delete ptr}} {{rev inl|since=c++17| if {{tt|T}} is not an array type; {{c|delete[] ptr}} if {{tt|T}} is an array type}} as the deleter. {{tt|Y}} must be a complete type. The delete expression must be well-formed, have well-defined behavior and not throw any exceptions. {{rev inl|since=c++17|This constructor additionally does not participate in overload resolution if the delete expression is not well-formed.}}

:@4-5@ Uses the specified deleter {{tt|d}} as the deleter. The expression {{c|d(ptr)}} must be well formed, have well-defined behavior and not throw any exceptions. The construction of {{tt|d}} and of the stored deleter from {{tt|d}} must not throw exceptions.
{{rrev multi|until1=c++17|rev1={{tt|Deleter}} must be {{concept|CopyConstructible}}.
|rev2=These constructors additionally do not participate in overload resolution if the expression {{c|d(ptr)}} is not well-formed, or if {{c|std::is_move_constructible&lt;D&gt;::value}} is {{c|false}}.}}

:@6-7@  Same as {{v|4-5}}, but additionally uses a copy of {{tt|alloc}} for allocation of data for internal use. {{tt|Alloc}} must be a {{concept|Allocator}}.

@8@ The ''aliasing constructor'': constructs a {{tt|shared_ptr}} which shares ownership information with {{tt|r}}, but holds an unrelated and unmanaged pointer {{tt|ptr}}. Even if this {{tt|shared_ptr}} is the last of the group to go out of scope, it will call the destructor for the object originally managed by {{tt|r}}. However, calling {{tt|get()}} on this will always return a copy of {{tt|ptr}}. It is the responsibility of the programmer to make sure that this {{tt|ptr}} remains valid as long as this shared_ptr exists, such as in the typical use cases where {{tt|ptr}} is a member of the object managed by {{tt|r}} or is an alias (e.g., downcast) of {{tt|r.get()}}

@9@ Constructs a {{tt|shared_ptr}} which shares ownership of the object managed by {{tt|r}}. If {{tt|r}} manages no object, {{tt|*this}} manages no object too. The template overload doesn't participate in overload resolution if {{tt|Y*}} is not {{rev inl|until=c++17|implicitly convertible to}}{{rev inl|since=c++17|''compatible with''}} {{tt|T*}}.

@10@ Move-constructs a {{tt|shared_ptr}} from {{tt|r}}. After the construction, {{c|*this}} contains a copy of the previous state of {{tt|r}}, {{tt|r}} is empty and its stored pointer is null. The template overload doesn't participate in overload resolution if {{tt|Y*}} is not {{rev inl|until=c++17|implicitly convertible to}}{{rev inl|since=c++17|''compatible with''}} {{tt|T*}}.

@11@ Constructs a {{tt|shared_ptr}} which shares ownership of the object managed by {{tt|r}}. {{rev inl|until=c++17|{{tt|Y*}} must be implicitly convertible to {{tt|T*}}.}}{{rev inl|since=c++17|{{cpp/enable_if|{{tt|Y*}} is compatible with {{tt|T*}}}}.}} Note that {{c|r.lock()}} may be used for the same purpose: the difference is that this constructor throws an exception if the argument is empty, while {{c|std::weak_ptr&lt;T&gt;::lock()}} constructs an empty {{tt|std::shared_ptr}} in that case.

@12@ Constructs a {{tt|shared_ptr}} that stores and owns the object formerly owned by {{tt|r}}. {{tt|Y*}} must be convertible to {{tt|T*}}. After construction, {{tt|r}} is empty.

@13@ Constructs a {{tt|shared_ptr}} which manages the object currently managed by {{tt|r}}. The deleter associated with {{tt|r}} is stored for future deletion of the managed object. {{tt|r}} manages no object after the call. {{rev begin}}{{rev|since=c++17|This overload doesn't participate in overload resolution if {{tt|std::unique_ptr&lt;Y, Deleter&gt;::pointer}} is not ''compatible with'' {{tt|T*}}.
If {{c|r.get()}} is a null pointer, this overload is equivalent to the default constructor {{v|1}}.}}{{rev end}} If {{tt|Deleter}} is a reference type, equivalent to {{c|shared_ptr(r.release(), std::ref(r.get_deleter())}}. Otherwise, equivalent to {{c|shared_ptr(r.release(), r.get_deleter())}} 

===Notes===
The overloads {{v|3}}, {{v|4}}, and {{v|6}} enable shared_from_this with {{tt|ptr}}, and the overload {{v|13}} enables shared_from_this with the pointer returned by {{c|r.release()}}. 

{{cpp/memory/shared ptr/enabling shared from this}}

The raw pointer overloads assume ownership of the pointed-to object. Therefore, constructing a {{tt|shared_ptr}} using the raw pointer overload for an object that is already managed by a {{tt|shared_ptr}}, such as by {{c|shared_ptr(ptr.get())}} is likely to lead to undefined behavior, even if the object is of a type derived from {{lc|std::enable_shared_from_this}}.

Because the default constructor is {{tt|constexpr}}, static shared_ptrs are initialized as part of [[cpp/language/initialization#Non-local_variables|static non-local initialization]], before any dynamic non-local initialization begins. This makes it safe to use a shared_ptr in a constructor of any static object.

In C++11 and C++14 it is valid to construct a {{c|std::shared_ptr&lt;T&gt;}} from a {{c|std::unique_ptr&lt;T[]&gt;}}:

{{source|1=
std::unique_ptr&lt;int[]&gt; arr(new int[1]);
std::shared_ptr&lt;int&gt; ptr(std::move(arr)); 
}}

Since the {{tt|shared_ptr}} obtains its deleter (a {{c|std::default_delete&lt;T[]&gt;}} object) from the {{tt|unique_ptr}}, the array will be correctly deallocated.

This is no longer allowed in C++17. Instead the array form {{c|std::shared_ptr&lt;T[]&gt;}} should be used.

===Parameters===
{{par begin}}
{{par | ptr | a pointer to an object to manage}}
{{par | d | a deleter to use to destroy the object}}
{{par | alloc | an allocator to use for allocations of data for internal use}}
{{par | r | another smart pointer to share the ownership to or acquire the ownership from}}
{{par end}} 

===Exceptions===
@1-2@ {{unreviewed noexcept}}

@3@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. {{c|delete ptr}}{{rev inl|since=c++17| if {{tt|T}} is not an array type, {{c|delete[] ptr}} otherwise)}} is called if an exception occurs.

@4-7@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. {{c|d(ptr)}} is called if an exception occurs.

@8-10@ {{unreviewed noexcept}}

@11@ {{lc|std::bad_weak_ptr}} if {{c|r.expired() {{==}} true}}. The constructor has no effect in this case.

@12@ {{lc|std::bad_alloc}} if required additional memory could not be obtained. May throw implementation-defined exception for other errors. This constructor has no effect if an exception occurs.

@13@ If an exception is thrown, the constructor has no effects.

===Example===
{{example
 | code=
#include &lt;memory&gt;
#include &lt;iostream&gt;

struct Foo {
    Foo() { std::cout &lt;&lt; &quot;Foo...\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo...\n&quot;; }
};

struct D { 
    void operator()(Foo* p) const {
        std::cout &lt;&lt; &quot;Call delete from function object...\n&quot;;
        delete p;
    }
};

int main()
{
    {
        std::cout &lt;&lt; &quot;constructor with no managed object\n&quot;;
        std::shared_ptr&lt;Foo&gt; sh1;
    }

    {
        std::cout &lt;&lt; &quot;constructor with object\n&quot;;
        std::shared_ptr&lt;Foo&gt; sh2(new Foo);
        std::shared_ptr&lt;Foo&gt; sh3(sh2);
        std::cout &lt;&lt; sh2.use_count() &lt;&lt; '\n';
        std::cout &lt;&lt; sh3.use_count() &lt;&lt; '\n';
    }

    {
        std::cout &lt;&lt; &quot;constructor with object and deleter\n&quot;;
        std::shared_ptr&lt;Foo&gt; sh4(new Foo, D());
        std::shared_ptr&lt;Foo&gt; sh5(new Foo, [](auto p) {
           std::cout &lt;&lt; &quot;Call delete from lambda...\n&quot;;
           delete p;
        });
    }
}
 | output=
constructor with no managed object
constructor with object
Foo...
2
2
~Foo...
constructor with object and deleter
Foo...
Foo...
Call delete from lambda...
~Foo...
Call delete from function object...
~Foo..
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc make_shared}}
{{dsc inc | cpp/memory/shared_ptr/dsc allocate_shared}}
{{dsc end}}

[[de:cpp/memory/shared ptr/shared ptr]]
[[es:cpp/memory/shared ptr/shared ptr]]
[[fr:cpp/memory/shared ptr/shared ptr]]
[[it:cpp/memory/shared ptr/shared ptr]]
[[ja:cpp/memory/shared ptr/shared ptr]]
[[pt:cpp/memory/shared ptr/shared ptr]]
[[ru:cpp/memory/shared ptr/shared ptr]]
[[zh:cpp/memory/shared ptr/shared ptr]]</text>
      <sha1>f7gz47aqhzch4yjcm7c46x6jpju8iol</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/swap</title>
    <ns>0</ns>
    <id>2205</id>
    <revision>
      <id>91840</id>
      <parentid>80266</parentid>
      <timestamp>2017-03-31T19:59:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="622">{{cpp/memory/shared_ptr/title | swap}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl | since=c++11 |
void swap( shared_ptr&amp; r );
}}

Exchanges the contents of {{c|*this}} and {{tt|r}}

===Parameters===
{{par begin}}
{{par | r | smart pointer to exchange the contents with}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/memory/shared ptr/swap]]
[[es:cpp/memory/shared ptr/swap]]
[[fr:cpp/memory/shared ptr/swap]]
[[it:cpp/memory/shared ptr/swap]]
[[ja:cpp/memory/shared ptr/swap]]
[[pt:cpp/memory/shared ptr/swap]]
[[ru:cpp/memory/shared ptr/swap]]
[[zh:cpp/memory/shared ptr/swap]]</text>
      <sha1>dm73pdnrsmrlljo9zq3wagyyuxiahz2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/swap2</title>
    <ns>0</ns>
    <id>5305</id>
    <revision>
      <id>42258</id>
      <parentid>19313</parentid>
      <timestamp>2012-11-02T22:39:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="312">{{cpp/memory/swap2|shared_ptr}}

[[de:cpp/memory/shared ptr/swap2]]
[[es:cpp/memory/shared ptr/swap2]]
[[fr:cpp/memory/shared ptr/swap2]]
[[it:cpp/memory/shared ptr/swap2]]
[[ja:cpp/memory/shared ptr/swap2]]
[[pt:cpp/memory/shared ptr/swap2]]
[[ru:cpp/memory/shared ptr/swap2]]
[[zh:cpp/memory/shared ptr/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/unique</title>
    <ns>0</ns>
    <id>2209</id>
    <revision>
      <id>91909</id>
      <parentid>88223</parentid>
      <timestamp>2017-03-31T20:01:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1378">{{cpp/memory/shared_ptr/title | unique}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl |notes={{mark deprecated}}|
bool unique() const noexcept;
}}

Checks if {{c|*this}} is the only {{tt|shared_ptr}} instance managing the current object, i.e. whether {{c|1=use_count() == 1}}.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} is the only {{tt|shared_ptr}} instance managing the current object, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
This function is deprecated as of C++17 because {{lc|use_count}} is only an approximation in multithreaded environment. 

===Example===
{{example
 | code=
#include &lt;memory&gt; 
#include &lt;iostream&gt; 
  
int main() 
{ 
    auto sp1 = std::make_shared&lt;int&gt;(5);
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;sp1.unique() == &quot; &lt;&lt; sp1.unique() &lt;&lt; '\n'; 

    std::shared_ptr&lt;int&gt; sp2 = sp1; 
    std::cout &lt;&lt; &quot;sp1.unique() == &quot; &lt;&lt; sp1.unique() &lt;&lt; '\n'; 
} 
 | output=
sp1.unique() == true
sp1.unique() == false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc use_count}}
{{dsc end}}

[[de:cpp/memory/shared ptr/unique]]
[[es:cpp/memory/shared ptr/unique]]
[[fr:cpp/memory/shared ptr/unique]]
[[it:cpp/memory/shared ptr/unique]]
[[ja:cpp/memory/shared ptr/unique]]
[[pt:cpp/memory/shared ptr/unique]]
[[ru:cpp/memory/shared ptr/unique]]
[[zh:cpp/memory/shared ptr/unique]]</text>
      <sha1>5yn6q2z2hctwc5vfie59x0svtzmvex7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/use count</title>
    <ns>0</ns>
    <id>2208</id>
    <revision>
      <id>91447</id>
      <parentid>88221</parentid>
      <timestamp>2017-03-31T19:44:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1968">{{cpp/memory/shared_ptr/title | use_count}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl |
long use_count() const;
}}

Returns the number of different {{tt|shared_ptr}} instances ({{c|this}} included) managing the current object. If there is no managed object, {{c|0}} is returned.

In multithreaded environment, the value returned by use_count is approximate (typical implementations use a [[cpp/atomic/memory_order|memory_order_relaxed]] load)

===Parameters===
(none)

===Return value===
the number of {{tt|shared_ptr}} instances managing the current object or {{c|0}} if there is no managed object.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Common use cases include
* comparison with {{c|0}}. If {{tt|use_count}} returns zero, the shared pointer is ''empty'' and manages no objects (whether or not its stored pointer is null). However, this is not guaranteed in multithreaded environment.
* comparison with {{c|1}}. If {{tt|use_count}} returns 1, there are no other owners, which may indicate that the managed object is safe to modify. The member function {{lc|unique()}} is provided for this use case. However, this is not guaranteed in multithreaded environment.

===Example===
{{example
 | code=
#include &lt;memory&gt; 
#include &lt;iostream&gt; 
  
void fun(std::shared_ptr&lt;int&gt; sp)
{
    std::cout &lt;&lt; &quot;fun: sp.use_count() == &quot; &lt;&lt; sp.use_count() &lt;&lt; '\n'; 
}

int main() 
{ 
    auto sp1 = std::make_shared&lt;int&gt;(5);
    std::cout &lt;&lt; &quot;sp1.use_count() == &quot; &lt;&lt; sp1.use_count() &lt;&lt; '\n'; 

    fun(sp1);
} 
 | output=
sp1.use_count() == 1
fun: sp.use_count() == 2
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/memory/shared_ptr/dsc unique}}
{{dsc end}}

[[de:cpp/memory/shared ptr/use count]]
[[es:cpp/memory/shared ptr/use count]]
[[fr:cpp/memory/shared ptr/use count]]
[[it:cpp/memory/shared ptr/use count]]
[[ja:cpp/memory/shared ptr/use count]]
[[pt:cpp/memory/shared ptr/use count]]
[[ru:cpp/memory/shared ptr/use count]]
[[zh:cpp/memory/shared ptr/use count]]</text>
      <sha1>bjfhpd5wotnq27fng110wvm67jya3tm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/shared ptr/~shared ptr</title>
    <ns>0</ns>
    <id>2202</id>
    <revision>
      <id>90105</id>
      <parentid>77580</parentid>
      <timestamp>2017-02-06T14:58:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note the null pointer issue</comment>
      <text xml:space="preserve" bytes="1001">{{cpp/memory/shared_ptr/title | ~shared_ptr}}
{{cpp/memory/shared_ptr/navbar}}
{{ddcl |
~shared_ptr();
}}

If {{tt|*this}} owns an object and it is the last {{tt|shared_ptr}} owning it, the object is destroyed through the owned deleter. 

After the destruction, the smart pointers that shared ownership with {{tt|*this}}, if any, will report a {{lc|use_count()}} that is one less than its previous value.

===Notes===
Unlike {{lc|std::unique_ptr}}, the deleter of {{lc|std::shared_ptr}} is invoked even if the managed pointer is null.

===Example===
{{example
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc|cpp/memory/weak_ptr/dsc destructor}}
{{dsc end}}

[[de:cpp/memory/shared ptr/~shared ptr]]
[[es:cpp/memory/shared ptr/~shared ptr]]
[[fr:cpp/memory/shared ptr/~shared ptr]]
[[it:cpp/memory/shared ptr/~shared ptr]]
[[ja:cpp/memory/shared ptr/~shared ptr]]
[[pt:cpp/memory/shared ptr/~shared ptr]]
[[ru:cpp/memory/shared ptr/~shared ptr]]
[[zh:cpp/memory/shared ptr/~shared ptr]]</text>
      <sha1>0q8jhypjrl2wozjve1dtmacgaswlwik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource</title>
    <ns>0</ns>
    <id>14925</id>
    <revision>
      <id>84269</id>
      <timestamp>2016-03-17T13:27:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2341">{{cpp/memory/pmr/title|synchronized_pool_resource}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{ddcl|header=memory_resource | since=c++17|
class synchronized_pool_resource : public std::pmr::memory_resource;
}}

The class {{tt|std::pmr::synchronized_pool_resource}} is a general-purpose memory resource class with the following properties:
* It owns the allocated memory and frees it on destruction, even if {{tt|deallocate}} has not been called for some of the allocated blocks.
* It consists of a collection of ''pools'' that serves request for different block sizes. Each pool manages a collection of ''chunks'' that are then divided into blocks of uniform size. 
* Calls to {{ltt|cpp/memory/synchronized_pool_resource/do_allocate}} are dispatched to the pool serving the smallest blocks accommodating the requested size.
* Exhausting memory in the pool causes the next allocation request for that pool to allocate an additional chunk of memory from the ''upstream allocator'' to replenish the pool. The chunk size obtained increases geometrically.
* Allocations requests that exceed the largest block size are served from the ''upstream allocator'' directly.
* The largest block size and maximum chunk size may be tuned by passing a {{lc|std::pmr::pool_options}} struct to its constructor.

{{tt|synchronized_pool_resource}} may be accessed from multiple threads without external synchronization, and may have thread-specific pools to reduce synchronization costs. If the memory resource is only accessed from one thread, {{ltt|cpp/memory/unsynchronized_pool_resource}} is more efficient.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc constructor}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc destructor}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc release}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc upstream_resource}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc options}}

{{dsc h2 | Protected member functions}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc do_allocate}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc do_deallocate}}
{{dsc inc | cpp/memory/synchronized_pool_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>4yswhiltedklyynnwps9v2seylu3yi3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/do allocate</title>
    <ns>0</ns>
    <id>14943</id>
    <revision>
      <id>84292</id>
      <timestamp>2016-03-17T13:44:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1054">{{cpp/memory/synchronized_pool_resource/title|do_allocate}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
}}

Allocates storage. 

If the pool selected for a block of size {{tt|bytes}} is unable to satisfy the request from its internal data structures, calls {{tt|allocate()}} on the upstream memory resource to obtain memory.

If the size requested is larger than what the largest pool can handle, memory is allocated by calling {{tt|allocate()}} on the upstream memory resource.

=== Return value ===
A pointer to allocated storage of at least {{tt|bytes}} bytes in size, aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c|alignof(std::max_align_t)}} otherwise. 

=== Exceptions ===
Throws nothing unless calling {{tt|allocate()}} on the upstream memory resource throws.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc allocate}}
{{dsc inc| cpp/memory/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>kwbyxalfmmgz0zlv8xoefin1qur3qja</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/do deallocate</title>
    <ns>0</ns>
    <id>14944</id>
    <revision>
      <id>84293</id>
      <timestamp>2016-03-17T13:45:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="595">{{cpp/memory/synchronized_pool_resource/title|do_deallocate}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment);
}}

Returns the memory at {{tt|p}} to the pool. It is unspecified if or under what circumstances this operation will result in a call to {{tt|deallocate()}} on the upstream memory resource.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc deallocate}}
{{dsc inc| cpp/memory/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>l6kajadr10p2bnpf4dh3zp0f3bqirqz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/do is equal</title>
    <ns>0</ns>
    <id>14945</id>
    <revision>
      <id>91413</id>
      <parentid>84294</parentid>
      <timestamp>2017-03-31T19:43:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="608">{{cpp/memory/synchronized_pool_resource/title|do_is_equal}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual bool do_is_equal(const std::pmr::memory_resource&amp; other) const;
}}

Compare {{tt|*this}} with {{tt|other}} for identity - memory allocated using a {{tt|synchronized_pool_resource}} can only be deallocated using that same resource.

=== Return value ===
{{c|1=this == dynamic_cast&lt;const synchronized_pool_resource*&gt;(&amp;other)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>n159rapf5orhw87rgrsmbkoqf9hvb32</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/options</title>
    <ns>0</ns>
    <id>14942</id>
    <revision>
      <id>84291</id>
      <timestamp>2016-03-17T13:43:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="616">{{cpp/memory/synchronized_pool_resource/title|options}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | 1=
std::pmr::pool_options options() const;
}}
{{dcl end}}

Returns the options that controls the pooling behavior of this resource.

The values in the returned struct may differ from those supplied to the constructor in the following ways:
* Values of zero will be replaced with implementation-specified defaults;
* Sizes may be rounded to an unspecified granularity.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/synchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>jnql2im97lt5d2c6or9t9w8k98lka8g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/release</title>
    <ns>0</ns>
    <id>14940</id>
    <revision>
      <id>84289</id>
      <timestamp>2016-03-17T13:41:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="528">{{cpp/memory/synchronized_pool_resource/title|release}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17| 1=
void release();
}}
{{dcl end}}

Releases all memory owned by this resource by calling the {{tt|deallocate}} function of the upstream memory resource as needed.

Memory is released back to the upstream resource even if {{tt|deallocate}} has not been called for some of the allocated blocks.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>h6ppkwoh6cyjc2z37xbhvktzi0hpyfx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/synchronized pool resource</title>
    <ns>0</ns>
    <id>14938</id>
    <revision>
      <id>84308</id>
      <parentid>84286</parentid>
      <timestamp>2016-03-17T14:05:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="1714">{{cpp/memory/synchronized_pool_resource/title|synchronized_pool_resource}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17| num= 1| 1=
synchronized_pool_resource();
}}
{{dcl|since=c++17| num= 2| 1=
explicit synchronized_pool_resource(std::pmr::memory_resource* upstream);
}}
{{dcl|since=c++17| num= 3| 1=
explicit synchronized_pool_resource(const std::pmr::pool_options&amp; opts);
}}
{{dcl|since=c++17| num= 4| 1=
synchronized_pool_resource(const std::pmr::pool_options&amp; opts,
                           std::pmr::memory_resource* upstream);
}}
{{dcl|since=c++17| num= 5| 1=
synchronized_pool_resource(const synchronized_pool_resource&amp;) = delete;
}}
{{dcl end}}

Constructs a {{tt|synchronized_pool_resource}}.

@1-4@ Constructs a {{tt|synchronized_pool_resource}} using the specified upstream memory resource and tuned according to the specified options. The resulting object holds a copy of {{tt|upstream}} but does not own the resource to which {{tt|upstream}} points.&lt;br&gt;
The overloads not taking {{tt|opts}} as a parameter uses a default constructed instance of {{ltt|cpp/memory/pool_options}} as the options. The overloads not taking {{tt|upstream}} as a parameter uses the return value of {{lc|std::pmr::get_default_resource}} as the upstream memory resource.

@5@ Copy constructor is deleted.

=== Parameters ===

{{par begin}}
{{par | opts | a {{lc|std::pmr::pool_options}} struct containing the constructor options }}
{{par | upstream | the upstream memory resource to use }}
{{par end}}

=== Exceptions ===

@1-4@ Throws only if a call to the {{tt|allocate()}} function of the upstream resource throws. It is unspecified if or under what conditions such a call takes place.</text>
      <sha1>3qwqya018fehlh1uluv7zmh8fujbmte</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/upstream resource</title>
    <ns>0</ns>
    <id>14941</id>
    <revision>
      <id>84290</id>
      <timestamp>2016-03-17T13:42:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="479">{{cpp/memory/synchronized_pool_resource/title|upstream_resource}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | 1=
std::pmr::memory_resource* upstream_resource() const;
}}
{{dcl end}}

Returns a pointer to the upstream memory resource. This is the same value as the {{tt|upstream}} argument passed to the constructor of this object.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/synchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>iajfiyokqkk30y7oi72lw52apuw6n1f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/synchronized pool resource/~synchronized pool resource</title>
    <ns>0</ns>
    <id>14939</id>
    <revision>
      <id>84288</id>
      <parentid>84283</parentid>
      <timestamp>2016-03-17T13:41:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="449">{{cpp/memory/synchronized_pool_resource/title|~synchronized_pool_resource}}
{{cpp/memory/synchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | 1=
virtual ~synchronized_pool_resource();
}}
{{dcl end}}

Destroys a {{tt|synchronized_pool_resource}}.

Deallocates all memory owned by this resource by calling {{c|this-&gt;release()}}.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/synchronized_pool_resource/dsc release}}
{{dsc end}}</text>
      <sha1>0qzy22wau7h8ey767n0ohynnwaqcugc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized copy</title>
    <ns>0</ns>
    <id>2442</id>
    <revision>
      <id>90328</id>
      <parentid>89868</parentid>
      <timestamp>2017-02-21T09:36:15Z</timestamp>
      <contributor>
        <username>TBBle</username>
        <id>4878</id>
      </contributor>
      <minor/>
      <comment>Missing &quot;std::&quot; on iterator_traits</comment>
      <text xml:space="preserve" bytes="3331">{{cpp/title|uninitialized_copy}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since= | num= 1 |1=  
template&lt; class InputIt, class ForwardIt &gt;
ForwardIt uninitialized_copy( InputIt first, InputIt last, ForwardIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class InputIt, class ForwardIt &gt;
ForwardIt uninitialized_copy( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last, ForwardIt d_first );}}
{{dcl end}}

@1@ Copies elements from the range {{tt|[first, last)}} to an uninitialized memory area beginning at {{tt|d_first}} as if by 
{{source|1=
for (; first != last; ++d_first, (void) ++first)
   ::new (static_cast&lt;void*&gt;(std::addressof(*d_first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type(*first);
}}

@@If an exception is thrown during the initialization, the function has no effects. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of the elements to copy}}
{{par | d_first | the beginning of the destination range}}
{{par exec pol}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
Iterator to the element past the last element copied.

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class ForwardIt&gt;
ForwardIt uninitialized_copy(InputIt first, InputIt last, ForwardIt d_first)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = d_first;
    try {
        for (; first != last; ++first, (void) ++current) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value(*first);
        }
        return current;
    } catch (...) {
        for (; d_first != current; ++d_first) {
            d_first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;string&gt;
#include &lt;tuple&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;std::string&gt; v = {&quot;This&quot;, &quot;is&quot;, &quot;an&quot;, &quot;example&quot;};

    std::string* p;
    std::size_t sz;
    std::tie(p, sz)  = std::get_temporary_buffer&lt;std::string&gt;(v.size());
    sz = std::min(sz, v.size());

    std::uninitialized_copy(v.begin(), v.begin() + sz, p);

    for (std::string* i = p; i != p+sz; ++i) {
        std::cout &lt;&lt; *i &lt;&lt; ' ';
        i-&gt;~basic_string&lt;char&gt;();
    }
    std::return_temporary_buffer(p);
}
 | output=
This is an example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_copy_n}}

{{dsc end}}

[[de:cpp/memory/uninitialized copy]]
[[es:cpp/memory/uninitialized copy]]
[[fr:cpp/memory/uninitialized copy]]
[[it:cpp/memory/uninitialized copy]]
[[ja:cpp/memory/uninitialized copy]]
[[pt:cpp/memory/uninitialized copy]]
[[ru:cpp/memory/uninitialized copy]]
[[zh:cpp/memory/uninitialized copy]]</text>
      <sha1>m5tzfx98yg0gjshayuav9acgjfvj6v5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized copy n</title>
    <ns>0</ns>
    <id>2443</id>
    <revision>
      <id>90329</id>
      <parentid>89869</parentid>
      <timestamp>2017-02-21T09:36:17Z</timestamp>
      <contributor>
        <username>TBBle</username>
        <id>4878</id>
      </contributor>
      <minor/>
      <comment>Missing &quot;std::&quot; on iterator_traits</comment>
      <text xml:space="preserve" bytes="3402">{{cpp/title|uninitialized_copy_n}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory }}
{{dcl | since=c++11 | num= 1 |1= 
template&lt; class InputIt, class Size, class ForwardIt &gt;
ForwardIt uninitialized_copy_n( InputIt first, Size count, ForwardIt d_first);
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class InputIt, class Size, class ForwardIt &gt;
ForwardIt uninitialized_copy_n( ExecutionPolicy&amp;&amp; policy, InputIt first, Size count, ForwardIt d_first);}}
{{dcl end}}
                                    
@1@ Copies {{tt|count}} elements from a range beginning at {{tt|first}} to an uninitialized memory area beginning at {{tt|d_first}} as if by
{{source|1=
for ( ; n &gt; 0; ++d_first, (void) ++first, --n)
   ::new (static_cast&lt;void*&gt;(std::addressof(*d_first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type(*first);
}}

@@ If an exception is thrown during the initialization, the function has no effects. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first | the beginning of the range of the elements to copy}}
{{par | d_first | the beginning of the destination range}}
{{par exec pol}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
Iterator to the element past the last element copied.

===Complexity===
Linear in {{tt|count}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class Size, class ForwardIt&gt;
ForwardIt uninitialized_copy_n(InputIt first, Size count, ForwardIt d_first)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = d_first;
    try {
        for (; count &gt; 0; ++first, (void) ++current, --count) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value(*first);
        }
    } catch (...) {
        for (; d_first != current; ++d_first) {
            d_first-&gt;~Value();
        }
        throw;
    }
    return current;
}
}}

===Example===
{{example
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;string&gt;
#include &lt;tuple&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;std::string&gt; v = {&quot;This&quot;, &quot;is&quot;, &quot;an&quot;, &quot;example&quot;};

    std::string* p;
    std::size_t sz;
    std::tie(p, sz)  = std::get_temporary_buffer&lt;std::string&gt;(v.size());
    sz = std::min(sz, v.size());

    std::uninitialized_copy_n(v.begin(), sz, p);

    for (std::string* i = p; i != p+sz; ++i) {
        std::cout &lt;&lt; *i &lt;&lt; ' ';
        i-&gt;~basic_string&lt;char&gt;();
    }
    std::return_temporary_buffer(p);
}
 | output=
This is an example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_copy}}

{{dsc end}}

[[de:cpp/memory/uninitialized copy n]]
[[es:cpp/memory/uninitialized copy n]]
[[fr:cpp/memory/uninitialized copy n]]
[[it:cpp/memory/uninitialized copy n]]
[[ja:cpp/memory/uninitialized copy n]]
[[pt:cpp/memory/uninitialized copy n]]
[[ru:cpp/memory/uninitialized copy n]]
[[zh:cpp/memory/uninitialized copy n]]</text>
      <sha1>84gstd167h3pp4w62xdby6n4dor4wbp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized default construct</title>
    <ns>0</ns>
    <id>15632</id>
    <revision>
      <id>90332</id>
      <parentid>86810</parentid>
      <timestamp>2017-02-21T09:36:23Z</timestamp>
      <contributor>
        <username>TBBle</username>
        <id>4878</id>
      </contributor>
      <minor/>
      <comment>Missing &quot;std::&quot; on iterator_traits</comment>
      <text xml:space="preserve" bytes="2338">{{cpp/title|uninitialized_default_construct}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 | num= 1 |1=  
template&lt; class ForwardIt &gt;
void uninitialized_default_construct( ForwardIt first, ForwardIt last);
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt;
void uninitialized_default_construct( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl end}}
@1@ Constructs objects of type {{tt|typename iterator_traits&lt;ForwardIt&gt;::value_type}} in the uninitialized storage designated by the range {{tt|[first, last)}} by [[cpp/language/default_initialization|default-initialization]], as if by
{{source|1=
for (; first != last; ++first)
  ::new (static_cast&lt;void*&gt;(std::addressof(*first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type;
}}

@@If an exception is thrown during the initialization, the function has no effects. 
@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of the elements to initialize}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt&gt;
void uninitialized_default_construct(ForwardIt first, ForwardIt last)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = first;
    try {
        for (; current != last; ++current) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value;
        }
    }  catch (...) {
        for (; first != current; ++first) {
            first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct_n}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct}}
{{dsc end}}</text>
      <sha1>nepkbtlok5gizurpshpudbxvjhvzvv3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized default construct n</title>
    <ns>0</ns>
    <id>15633</id>
    <revision>
      <id>90333</id>
      <parentid>86816</parentid>
      <timestamp>2017-02-21T09:36:25Z</timestamp>
      <contributor>
        <username>TBBle</username>
        <id>4878</id>
      </contributor>
      <minor/>
      <comment>Missing &quot;std::&quot; on iterator_traits</comment>
      <text xml:space="preserve" bytes="2474">{{cpp/title|uninitialized_default_construct_n}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 | num= 1 |1=  
template&lt; class ForwardIt, class Size &gt;
ForwardIt uninitialized_default_construct_n( ForwardIt first, Size n );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Size &gt;
ForwardIt uninitialized_default_construct_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, Size n );}}
{{dcl end}}
@1@ Constructs {{tt|n}} objects of type {{tt|typename iterator_traits&lt;ForwardIt&gt;::value_type}} in the uninitialized storage starting at {{tt|first}} by [[cpp/language/default_initialization|default-initialization]], as if by
{{source|1=
for (; n &gt; 0; (void) ++first, --n)
  ::new (static_cast&lt;void*&gt;(std::addressof(*first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type;
}}

@@If an exception is thrown during the initialization, the function has no effects. 
@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first | the beginning of the range of elements to initialize}}
{{par | n | the number of elements to initialize}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
The end of the range of objects (i.e., {{c|std::next(first, n)}}).

===Complexity===
Linear in {{tt|n}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt, class Size&gt;
ForwardIt uninitialized_default_construct_n( ForwardIt first, Size n )
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = first;
    try {
        for (; n &gt; 0 ; (void) ++current, --n) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value;
        }
        return current;
    }  catch (...) {
        for (; first != current; ++first) {
            first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct_n}}
{{dsc end}}</text>
      <sha1>7uzv87f7839iaih3pn5mpk13kw3b7k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized fill</title>
    <ns>0</ns>
    <id>2444</id>
    <revision>
      <id>90330</id>
      <parentid>89867</parentid>
      <timestamp>2017-02-21T09:36:19Z</timestamp>
      <contributor>
        <username>TBBle</username>
        <id>4878</id>
      </contributor>
      <minor/>
      <comment>Missing &quot;std::&quot; on iterator_traits</comment>
      <text xml:space="preserve" bytes="3009">{{cpp/title|uninitialized_fill}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since= | num= 1 |1=  
template&lt; class ForwardIt, class T &gt;
void uninitialized_fill( ForwardIt first, ForwardIt last, const T&amp; value );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class T &gt;
void uninitialized_fill( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last, const T&amp; value );}}
{{dcl end}}
@1@ Copies the given {{tt|value}} to an uninitialized memory area, defined by the range {{tt|[first, last)}} as if by
{{source|1=
for (; first != last; ++first)
  ::new (static_cast&lt;void*&gt;(std::addressof(*first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type(x);
}}

@@If an exception is thrown during the initialization, the function has no effects. 
@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of the elements to initialize}}
{{par | value | the value to construct the elements with}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt, class T&gt;
void uninitialized_fill(ForwardIt first, ForwardIt last, const T&amp; value)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = first;
    try {
        for (; current != last; ++current) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value(value);
        }
    }  catch (...) {
        for (; first != current; ++first) {
            first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;string&gt;
#include &lt;tuple&gt;

int main()
{
    std::string* p;
    std::size_t sz;
    std::tie(p, sz) = std::get_temporary_buffer&lt;std::string&gt;(4);

    std::uninitialized_fill(p, p+sz, &quot;Example&quot;);

    for (std::string* i = p; i != p+sz; ++i) {
        std::cout &lt;&lt; *i &lt;&lt; '\n';
        i-&gt;~basic_string&lt;char&gt;();
    }
    std::return_temporary_buffer(p);
}
 | output=
Example
Example
Example
Example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_fill_n}}

{{dsc end}}

[[de:cpp/memory/uninitialized fill]]
[[es:cpp/memory/uninitialized fill]]
[[fr:cpp/memory/uninitialized fill]]
[[it:cpp/memory/uninitialized fill]]
[[ja:cpp/memory/uninitialized fill]]
[[pt:cpp/memory/uninitialized fill]]
[[ru:cpp/memory/uninitialized fill]]
[[zh:cpp/memory/uninitialized fill]]</text>
      <sha1>i29b5ok034twjbtivxpc2cbbi3tfjpq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized fill n</title>
    <ns>0</ns>
    <id>2445</id>
    <revision>
      <id>90331</id>
      <parentid>89870</parentid>
      <timestamp>2017-02-21T09:36:21Z</timestamp>
      <contributor>
        <username>TBBle</username>
        <id>4878</id>
      </contributor>
      <minor/>
      <comment>Missing &quot;std::&quot; on iterator_traits</comment>
      <text xml:space="preserve" bytes="3444">{{cpp/title|uninitialized_fill_n}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl rev begin | num =1}}
{{dcl | until=c++11 | 
template&lt; class ForwardIt, class Size, class T &gt;
void uninitialized_fill_n( ForwardIt first, Size count, const T&amp; value );
}}
{{dcl | since=c++11 | 1=  
template&lt; class ForwardIt, class Size, class T &gt;
ForwardIt uninitialized_fill_n( ForwardIt first, Size count, const T&amp; value );
}}
{{dcl rev end}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Size, class T &gt;
ForwardIt uninitialized_fill_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, Size count, const T&amp; value );}}
{{dcl end}}

@1@ Copies the given value {{tt|value}} to the first {{tt|count}} elements in an uninitialized memory area beginning at {{tt|first}} as if by
{{source|1=
for (; n--; ++first)
  ::new (static_cast&lt;void*&gt;(std::addressof(*first)))
     typename std::iterator_traits&lt;ForwardIt&gt;::value_type(x);
}}

@@If an exception is thrown during the initialization, the function has no effects. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first | the beginning of the range of the elements to initialize}}
{{par | count | number of elements to construct}}
{{par | value | the value to construct the elements with}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
{{rev begin}}
{{rev | until=c++11 |(none)}}
{{rev | since=c++11 |
Iterator to the element past the last element copied.
}}
{{rev end}}

===Complexity===
Linear in {{tt|count}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt; class ForwardIt, class Size, class T &gt;
ForwardIt uninitialized_fill_n(ForwardIt first, Size count, const T&amp; value)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = first;
    try {
        for (; count &gt; 0; ++current, (void) --count) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value(value);
        }
        return current;
    } catch (...) {
        for (; first != current; ++first) {
            first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
 | code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;string&gt;
#include &lt;tuple&gt;

int main()
{
    std::string* p;
    std::size_t sz;
    std::tie(p, sz) = std::get_temporary_buffer&lt;std::string&gt;(4);
    std::uninitialized_fill_n(p, sz, &quot;Example&quot;);

    for (std::string* i = p; i != p+sz; ++i) {
        std::cout &lt;&lt; *i &lt;&lt; '\n';
        i-&gt;~basic_string&lt;char&gt;();
    }
    std::return_temporary_buffer(p);
}
 | output=
Example
Example
Example
Example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_fill}}

{{dsc end}}

[[de:cpp/memory/uninitialized fill n]]
[[es:cpp/memory/uninitialized fill n]]
[[fr:cpp/memory/uninitialized fill n]]
[[it:cpp/memory/uninitialized fill n]]
[[ja:cpp/memory/uninitialized fill n]]
[[pt:cpp/memory/uninitialized fill n]]
[[ru:cpp/memory/uninitialized fill n]]
[[zh:cpp/memory/uninitialized fill n]]</text>
      <sha1>nncigey91vjk1nqk4ztvdroffx2k8tk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized move</title>
    <ns>0</ns>
    <id>15639</id>
    <revision>
      <id>86922</id>
      <parentid>86823</parentid>
      <timestamp>2016-07-15T15:16:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="2559">{{cpp/title|uninitialized_move}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 | num= 1 |1=  
template&lt; class InputIt, class ForwardIt &gt;
ForwardIt uninitialized_move( InputIt first, InputIt last, ForwardIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class InputIt, class ForwardIt &gt;
ForwardIt uninitialized_move( ExecutionPolicy&amp;&amp; policy, InputIt first, InputIt last, ForwardIt d_first );}}
{{dcl end}}

@1@ Moves elements from the range {{tt|[first, last)}} to an uninitialized memory area beginning at {{tt|d_first}} as if by 
{{source|1=
for (; first != last; ++d_first, (void) ++first)
   ::new (static_cast&lt;void*&gt;(std::addressof(*d_first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type(std::move(*first));
}}

@@If an exception is thrown during the initialization, some objects in {{tt|[first, last)}} are left in a valid but unspecified state.

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first, last | the range of the elements to move}}
{{par | d_first | the beginning of the destination range}}
{{par exec pol}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
Iterator to the element past the last element moved.

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class ForwardIt&gt;
ForwardIt uninitialized_move(InputIt first, InputIt last, ForwardIt d_first)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = d_first;
    try {
        for (; first != last; ++first, (void) ++current) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value(std::move(*first));
        }
        return current;
    } catch (...) {
        for (; d_first != current; ++d_first) {
            d_first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_copy}}
{{dsc inc | cpp/memory/dsc uninitialized_move_n}}
{{dsc end}}</text>
      <sha1>1qdkd96tqxlyc10uis5t612dgnmefin</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized move n</title>
    <ns>0</ns>
    <id>15640</id>
    <revision>
      <id>86921</id>
      <parentid>86825</parentid>
      <timestamp>2016-07-15T15:16:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="3005">{{cpp/title|uninitialized_move_n}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory }}
{{dcl | since=c++17 | num= 1 |1= 
template&lt; class InputIt, class Size, class ForwardIt &gt;
std::pair&lt;InputIt, ForwardIt&gt; uninitialized_move_n( InputIt first, Size count,
                                                    ForwardIt d_first );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class InputIt, class Size, class ForwardIt &gt;
std::pair&lt;InputIt, ForwardIt&gt; uninitialized_move_n( ExecutionPolicy&amp;&amp; policy,
                                                    InputIt first, Size count,
                                                    ForwardIt d_first );}}
{{dcl end}}
                                    
@1@ Moves {{tt|count}} elements from a range beginning at {{tt|first}} to an uninitialized memory area beginning at {{tt|d_first}} as if by
{{source|1=
for ( ; n &gt; 0; ++d_first, (void) ++first, --n)
   ::new (static_cast&lt;void*&gt;(std::addressof(*d_first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type(std::move(*first));
}}

@@ If an exception is thrown during the initialization, some objects in the source range are left in a valid but unspecified state. 

@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true

===Parameters===
{{par begin}}
{{par | first | the beginning of the range of the elements to move}}
{{par | d_first | the beginning of the destination range}}
{{par exec pol}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
A pair whose first element is an iterator to the element past the last element moved in the source range, and whose second element is an iterator to the element past the last element moved in the destination range.

===Complexity===
Linear in {{tt|count}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class InputIt, class Size, class ForwardIt&gt;
std::pair&lt;InputIt, ForwardIt&gt; uninitialized_move_n(InputIt first, Size count, ForwardIt d_first)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = d_first;
    try {
        for (; count &gt; 0; ++first, (void) ++current, --count) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value(*first);
        }
    } catch (...) {
        for (; d_first != current; ++d_first) {
            d_first-&gt;~Value();
        }
        throw;
    }
    return {first, current};
}
}}

===Example===
{{example
 | code=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_move}}
{{dsc inc | cpp/memory/dsc uninitialized_copy_n}}
{{dsc end}}</text>
      <sha1>1eak70g1ogm1wo7ls5hgre70pmi505o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized value construct</title>
    <ns>0</ns>
    <id>15634</id>
    <revision>
      <id>86923</id>
      <parentid>86808</parentid>
      <timestamp>2016-07-15T15:17:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="2330">{{cpp/title|uninitialized_value_construct}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 | num= 1 |1=  
template&lt; class ForwardIt &gt;
void uninitialized_value_construct( ForwardIt first, ForwardIt last);
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt &gt;
void uninitialized_value_construct( ExecutionPolicy&amp;&amp; policy, ForwardIt first, ForwardIt last );}}
{{dcl end}}
@1@ Constructs objects of type {{tt|typename iterator_traits&lt;ForwardIt&gt;::value_type}} in the uninitialized storage designated by the range {{tt|[first, last)}} by [[cpp/language/value_initialization|value-initialization]], as if by
{{source|1=
for (; first != last; ++first)
  ::new (static_cast&lt;void*&gt;(std::addressof(*first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type();
}}

@@If an exception is thrown during the initialization, the function has no effects. 
@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first, last | the range of the elements to initialize}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
(none)

===Complexity===
Linear in the distance between {{tt|first}} and {{tt|last}}

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt&gt;
void uninitialized_value_construct(ForwardIt first, ForwardIt last)
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = first;
    try {
        for (; current != last; ++current) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value();
        }
    }  catch (...) {
        for (; first != current; ++first) {
            first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct_n}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct}}
{{dsc end}}</text>
      <sha1>ltjw24esim4kujmkc5ym8cieqz30n8h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uninitialized value construct n</title>
    <ns>0</ns>
    <id>15635</id>
    <revision>
      <id>86924</id>
      <parentid>86815</parentid>
      <timestamp>2016-07-15T15:17:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="2466">{{cpp/title|uninitialized_value_construct_n}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++17 | num= 1 |1=  
template&lt; class ForwardIt, class Size &gt;
ForwardIt uninitialized_value_construct_n( ForwardIt first, Size n );
}}
{{dcl | since=c++17 | num= 2 |1=
template&lt; class ExecutionPolicy, class ForwardIt, class Size &gt;
ForwardIt uninitialized_value_construct_n( ExecutionPolicy&amp;&amp; policy, ForwardIt first, Size n );}}
{{dcl end}}
@1@ Constructs {{tt|n}} objects of type {{tt|typename iterator_traits&lt;ForwardIt&gt;::value_type}} in the uninitialized storage starting at {{tt|first}} by [[cpp/language/value_initialization|value-initialization]], as if by
{{source|1=
for (; n &gt; 0; (void) ++first, --n)
  ::new (static_cast&lt;void*&gt;(std::addressof(*first)))
      typename std::iterator_traits&lt;ForwardIt&gt;::value_type();
}}

@@If an exception is thrown during the initialization, the function has no effects. 
@2@ Same as {{v|1}}, but executed according to {{tt|policy}}. This overload does not participate in overload resolution unless {{c|std::is_execution_policy_v&lt;std::decay_t&lt;ExecutionPolicy&gt;&gt;}} is true
===Parameters===
{{par begin}}
{{par | first | the beginning of the range of elements to initialize}}
{{par | n | the number of elements to initialize}}
{{par exec pol}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par req | No increment, assignment, comparison, or indirection through valid instances of {{tt|ForwardIt}} may throw exceptions.}}
{{par end}}

===Return value===
The end of the range of objects (i.e., {{c|std::next(first, n)}}).

===Complexity===
Linear in {{tt|n}}.

===Exceptions===
{{cpp/algorithm/parallel_exceptions_reporting_behavior|singular=yes}}

===Possible implementation===
{{eq fun | 1=
template&lt;class ForwardIt, class Size&gt;
ForwardIt uninitialized_value_construct_n( ForwardIt first, Size n )
{
    typedef typename std::iterator_traits&lt;ForwardIt&gt;::value_type Value;
    ForwardIt current = first;
    try {
        for (; n &gt; 0 ; (void) ++current, --n) {
            ::new (static_cast&lt;void*&gt;(std::addressof(*current))) Value();
        }
        return current;
    }  catch (...) {
        for (; first != current; ++first) {
            first-&gt;~Value();
        }
        throw;
    }
}
}}

===Example===
{{example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uninitialized_value_construct}}
{{dsc inc | cpp/memory/dsc uninitialized_default_construct_n}}
{{dsc end}}</text>
      <sha1>dvfkj1jopbg9yxsn8457lvpyyt8pofe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr</title>
    <ns>0</ns>
    <id>2156</id>
    <revision>
      <id>91141</id>
      <parentid>91140</parentid>
      <timestamp>2017-03-22T01:39:01Z</timestamp>
      <contributor>
        <ip>68.113.163.43</ip>
      </contributor>
      <comment>delete ptr;</comment>
      <text xml:space="preserve" bytes="9060">{{cpp/title|unique_ptr}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl header|memory}}
{{dcl | since=c++11 | num=1 | 1=
template&lt;
    class T,
    class Deleter = std::default_delete&lt;T&gt;
&gt; class unique_ptr;
}}
{{dcl | since=c++11 | num=2 | 1=
template &lt;
    class T,
    class Deleter
&gt; class unique_ptr&lt;T[], Deleter&gt;;
}}
{{dcl end}}

{{tt|std::unique_ptr}} is a smart pointer that owns and manages another object through a pointer and disposes of that object when the {{tt|unique_ptr}} goes out of scope.

The object is disposed of using the associated deleter when either of the following happens:
* the managing {{tt|unique_ptr}} object is destroyed 
* the managing {{tt|unique_ptr}} object is assigned another pointer via {{lc|operator{{=}}}} or {{lc|reset()}}.

The object is disposed of using a potentially user-supplied deleter by calling {{c|get_deleter()(ptr)}}. The default deleter uses the {{c|delete}} operator, which destroys the object and deallocates the memory.

A {{tt|unique_ptr}} may alternatively own no object, in which case it is called ''empty''.

There are two versions of {{tt|std::unique_ptr}}:

@1@ Manages a single object (e.g. allocated with {{c|new}})

@2@ Manages a dynamically-allocated array of objects (e.g. allocated with {{c|new[]}})

The class satisfies the requirements of {{concept|MoveConstructible}} and {{concept|MoveAssignable}}, but not the requirements of either {{concept|CopyConstructible}} or {{concept|CopyAssignable}}.

{{par begin}}
{{par hreq}}
{{par req | {{tt|Deleter}} must be {{concept|FunctionObject}} or lvalue reference to a {{concept|FunctionObject}} or lvalue reference to function, callable with an argument of type {{tt|unique_ptr&lt;T, Deleter&gt;::pointer}}}}
{{par end}}

===Notes===
Only non-const {{tt|unique_ptr}} can transfer the ownership of the managed object to another {{tt|unique_ptr}}. If an object's lifetime is managed by a {{c|const std::unique_ptr}}, it is limited to the scope in which the pointer was created.

{{tt|std::unique_ptr}} is commonly used to manage the lifetime of objects, including:

* providing exception safety to classes and functions that handle objects with dynamic lifetime, by guaranteeing deletion on both normal exit and exit through exception

* passing ownership of uniquely-owned objects with dynamic lifetime into functions

* acquiring ownership of uniquely-owned objects with dynamic lifetime from functions

* as the element type in move-aware containers, such as {{lc|std::vector}}, which hold pointers to dynamically-allocated objects (e.g. if polymorphic behavior is desired)

{{tt|std::unique_ptr}} may be constructed for an [[cpp/language/incomplete_type|incomplete type]] {{tt|T}}, such as to facilitate the use as a handle in the [[cpp/language/pimpl|pImpl idiom]]. If the default deleter is used, {{tt|T}} must be complete at the point in code where the deleter is invoked, which happens in the destructor, move assignment operator, and {{tt|reset}} member function of {{tt|std::unique_ptr}}. (Conversely,  {{lc|std::shared_ptr}} can't be constructed from a raw pointer to incomplete type, but can be destroyed where {{tt|T}} is incomplete). Note that if {{tt|T}} is a class template specialization, use of {{tt|unique_ptr}} as an operand, e.g. {{c|!p}} requires {{tt|T}}'s parameters to be complete due to [[cpp/language/adl|ADL]].

If {{tt|T}} is a [[cpp/language/derived_class|derived class]] of some base {{tt|B}}, then {{c|std::unique_ptr&lt;T&gt;}} is [[cpp/memory/unique_ptr/unique_ptr|implicitly convertible]] to {{c|std::unique_ptr&lt;B&gt;}}. The default deleter of the resulting {{c|std::unique_ptr&lt;B&gt;}} will use [[cpp/memory/new/operator_delete|operator delete]] for {{tt|B}}, leading to [[cpp/language/destructor#Virtual_destructors|undefined behavior]] unless the destructor of {{tt|B}} is [[cpp/language/virtual|virtual]]. Note that {{lc|std::shared_ptr}} behaves differently: {{c|std::shared_ptr&lt;B&gt;}} will use the [[cpp/memory/new/operator_delete|operator delete]] for the type {{tt|T}} and the owned object will be deleted correctly even if the destructor of {{tt|B}} is not [[cpp/language/virtual|virtual]].

Unlike {{lc|std::shared_ptr}}, {{tt|std::unique_ptr}} may manage an object through any custom handle type that satisfies {{concept|NullablePointer}}. This allows, for example, managing objects located in shared memory, by supplying a {{tt|Deleter}} that defines {{tt|typedef [http://www.boost.org/doc/libs/release/doc/html/boost/interprocess/offset_ptr.html boost::offset_ptr] pointer;}} or another [[cpp/concept/Allocator#Fancy_pointers|fancy pointer]].

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|pointer}}      | {{c|std::remove_reference&lt;Deleter&gt;::type::pointer}} if that type exists, otherwise {{tt|T*}}. Must satisfy {{concept|NullablePointer}}}}
{{dsc | {{c|element_type}} | {{tt|T}}, the type of the object managed by this {{tt|unique_ptr}}}}
{{dsc | {{c|deleter_type}} | {{tt|Deleter}}, the function object or lvalue reference to function or to function object, to be called from the destructor}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc constructor}}
{{dsc inc | cpp/memory/unique_ptr/dsc destructor}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator{{=}}}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/memory/unique_ptr/dsc release}}
{{dsc inc | cpp/memory/unique_ptr/dsc reset}}
{{dsc inc | cpp/memory/unique_ptr/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/memory/unique_ptr/dsc get}}
{{dsc inc | cpp/memory/unique_ptr/dsc get_deleter}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator bool}}

{{dsc h2 | Single-object version, {{tt|unique_ptr&lt;T&gt;}}}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator*}}

{{dsc h2 | Array version, {{tt|unique_ptr&lt;T[]&gt;}}}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator_at}}

{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc make_unique}}
{{dsc inc | cpp/memory/unique_ptr/dsc operator_cmp}}
{{dsc inc | cpp/memory/unique_ptr/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc hash}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;memory&gt;
#include &lt;cstdio&gt;
#include &lt;fstream&gt;
#include &lt;cassert&gt;

struct B {
  virtual void bar() { std::cout &lt;&lt; &quot;B::bar\n&quot;; }
  virtual ~B() = default;
};
struct D : B
{
    D() { std::cout &lt;&lt; &quot;D::D\n&quot;;  }
    ~D() { std::cout &lt;&lt; &quot;D::~D\n&quot;;  }
    void bar() override { std::cout &lt;&lt; &quot;D::bar\n&quot;;  }
};

// a function consuming a unique_ptr can take it by value or by rvalue reference
std::unique_ptr&lt;D&gt; pass_through(std::unique_ptr&lt;D&gt; p)
{
    p-&gt;bar();
    return p;
}

int main()
{
  std::cout &lt;&lt; &quot;unique ownership semantics demo\n&quot;;
  {
      auto p = std::make_unique&lt;D&gt;(); // p is a unique_ptr that owns a D
      auto q = pass_through(std::move(p)); 
      assert(!p); // now p owns nothing and holds a null pointer
      q-&gt;bar();   // and q owns the D object
  } // ~D called here
    
  std::cout &lt;&lt; &quot;Runtime polymorphism demo\n&quot;;
  {
    std::unique_ptr&lt;B&gt; p = std::make_unique&lt;D&gt;(); // p is a unique_ptr that owns a D
                                                  // as a pointer to base
    p-&gt;bar(); // virtual dispatch
    
    std::vector&lt;std::unique_ptr&lt;B&gt;&gt; v;  // unique_ptr can be stored in a container
    v.push_back(std::make_unique&lt;D&gt;());
    v.push_back(std::move(p));
    v.emplace_back(new D);
    for(auto&amp; p: v) p-&gt;bar(); // virtual dispatch
  } // ~D called 3 times
  
  std::cout &lt;&lt; &quot;Custom deleter demo\n&quot;;
  std::ofstream(&quot;demo.txt&quot;) &lt;&lt; 'x'; // prepare the file to read
  {
      std::unique_ptr&lt;std::FILE, decltype(&amp;std::fclose)&gt; fp(std::fopen(&quot;demo.txt&quot;, &quot;r&quot;),
                                                            &amp;std::fclose);
      if(fp) // fopen could have failed; in which case fp holds a null pointer
        std::cout &lt;&lt; (char)std::fgetc(fp.get()) &lt;&lt; '\n';
  } // fclose() called here, but only if FILE* is not a null pointer
    // (that is, if fopen succeeded)

  std::cout &lt;&lt; &quot;Custom lambda-expression deleter demo\n&quot;;
  {
    std::unique_ptr&lt;D, std::function&lt;void(D*)&gt;&gt; p(new D, [](D* ptr)
        {
            std::cout &lt;&lt; &quot;destroying from a custom deleter...\n&quot;;
            delete ptr;
        });  // p owns D
    p-&gt;bar();
  } // the lambda above is called and D is destroyed

  std::cout &lt;&lt; &quot;Array form of unique_ptr demo\n&quot;;
  {
      std::unique_ptr&lt;D[]&gt; p{new D[3]};
  } // calls ~D 3 times
}
 | output=
unique ownership semantics demo
D::D
D::bar
D::bar
D::~D
Runtime polymorphism demo
D::D
D::bar
D::D
D::D
D::bar
D::bar
D::bar
D::~D
D::~D
D::~D
Custom deleter demo
x
Custom lambda-expression deleter demo
D::D
D::bar
destroying from a custom deleter...
D::~D
Array form of unique_ptr demo
D::D
D::D
D::D
D::~D
D::~D
D::~D
}}

[[de:cpp/memory/unique ptr]]
[[es:cpp/memory/unique ptr]]
[[fr:cpp/memory/unique ptr]]
[[it:cpp/memory/unique ptr]]
[[ja:cpp/memory/unique ptr]]
[[pt:cpp/memory/unique ptr]]
[[ru:cpp/memory/unique ptr]]
[[zh:cpp/memory/unique ptr]]</text>
      <sha1>k4e4aiqpibsj3aylk22gt11lqp0npa8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/get</title>
    <ns>0</ns>
    <id>4861</id>
    <revision>
      <id>91742</id>
      <parentid>63347</parentid>
      <timestamp>2017-03-31T19:56:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="980">{{cpp/memory/unique_ptr/title|get}}
{{cpp/memory/unique_ptr/navbar}}
{{ddcl | since=c++11 | 1=
pointer get() const;
}}

Returns a pointer to the managed object or {{c|nullptr}} if no object is owned.

===Parameters===
(none)

===Return value===
Pointer to the managed object or {{c|nullptr}} if no object is owned.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;memory&gt;

int main()
{
    std::unique_ptr&lt;std::string&gt; s_p(new std::string(&quot;Hello, world!&quot;));
    std::string *s = s_p.get();
    std::cout &lt;&lt; *s &lt;&lt; '\n';
}
 | output=
Hello, world!
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc release}}
{{dsc end}}

[[de:cpp/memory/unique ptr/get]]
[[es:cpp/memory/unique ptr/get]]
[[fr:cpp/memory/unique ptr/get]]
[[it:cpp/memory/unique ptr/get]]
[[ja:cpp/memory/unique ptr/get]]
[[pt:cpp/memory/unique ptr/get]]
[[ru:cpp/memory/unique ptr/get]]
[[zh:cpp/memory/unique ptr/get]]</text>
      <sha1>l0kikibmduc01wsm3u3yxole929os1l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/get deleter</title>
    <ns>0</ns>
    <id>4863</id>
    <revision>
      <id>91846</id>
      <parentid>62792</parentid>
      <timestamp>2017-03-31T19:59:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1318">{{cpp/memory/unique_ptr/title|get_deleter}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
      Deleter&amp; get_deleter();
}}
{{dcl | since=c++11 | 1=
const Deleter&amp; get_deleter() const;
}}
{{dcl end}}

Returns the deleter object which would be used for destruction of the managed object.

===Parameters===
(none)

===Return value===
The stored deleter object.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo
{
    Foo() { std::cout &lt;&lt; &quot;Foo...\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo...\n&quot;; }
};
 
struct D
{
    void bar() { std::cout &lt;&lt; &quot;Call deleter D::bar()...\n&quot;; }
    void operator()(Foo* p) const
    {
        std::cout &lt;&lt; &quot;Call delete for Foo object...\n&quot;;
        delete p;
    }
};

int main()
{
    std::unique_ptr&lt;Foo, D&gt; up(new Foo(), D());
    D&amp; del = up.get_deleter();
    del.bar();
}
 | output=
Foo...
Call deleter D::bar()...
Call delete for Foo object...
~Foo...
}}

[[de:cpp/memory/unique ptr/get deleter]]
[[es:cpp/memory/unique ptr/get deleter]]
[[fr:cpp/memory/unique ptr/get deleter]]
[[it:cpp/memory/unique ptr/get deleter]]
[[ja:cpp/memory/unique ptr/get deleter]]
[[pt:cpp/memory/unique ptr/get deleter]]
[[ru:cpp/memory/unique ptr/get deleter]]
[[zh:cpp/memory/unique ptr/get deleter]]</text>
      <sha1>i4xuyu12k46kbgfiyhf3l2okxai9o53</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/hash</title>
    <ns>0</ns>
    <id>5315</id>
    <revision>
      <id>91127</id>
      <parentid>91126</parentid>
      <timestamp>2017-03-20T21:58:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>title  was missing a mention of unique_ptr</comment>
      <text xml:space="preserve" bytes="1839">{{cpp/title|hash &lt;small&gt;&lt;std::unique_ptr&gt;&lt;/small&gt;}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt;class T, class Deleter&gt; struct hash&lt;unique_ptr&lt;T, Deleter&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for {{c|std::unique_ptr&lt;T, Deleter&gt;}} allows users to obtain hashes of objects of type {{c|std::unique_ptr&lt;T, Deleter&gt;}}.

{{rev begin}}
{{rev|since=c++17|
The specialization {{lc|std::hash&lt;std::unique_ptr&lt;T,D&gt;&gt;}} is enabled (see {{lc|std::hash}}) if {{lc|std::hash&lt;typename std::unique_ptr&lt;T,D&gt;::pointer&gt;}} is enabled, and is disabled otherwise.
}}
{{rev end}}

{{rev inl|since=c++17|When enabled,}} for a given {{c|1=std::unique_ptr&lt;T, D&gt; p}}, this specialization ensures that  {{c|1=std::hash&lt;std::unique_ptr&lt;T, D&gt;&gt;()(p) == std::hash&lt;typename std::unique_ptr&lt;T, D&gt;::pointer&gt;()(p.get())}}.

The member functions of this specialization are not guaranteed to be noexcept because the pointer may be a fancy pointer and its hash might throw.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;functional&gt;

struct Foo {
    Foo() { std::cout &lt;&lt; &quot;Foo...\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo...\n\n&quot;; }
};
 
int main()
{
    Foo* foo = new Foo();
    std::unique_ptr&lt;Foo&gt; up(foo);

    std::cout &lt;&lt; &quot;hash(up):  &quot; &lt;&lt; std::hash&lt;std::unique_ptr&lt;Foo&gt;&gt;()(up) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;hash(foo): &quot; &lt;&lt; std::hash&lt;Foo*&gt;()(foo) &lt;&lt; '\n';
}
 | output=
Foo...
hash(up):  3686401041
hash(foo): 3686401041
~Foo...
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[de:cpp/memory/unique ptr/hash]]
[[es:cpp/memory/unique ptr/hash]]
[[fr:cpp/memory/unique ptr/hash]]
[[it:cpp/memory/unique ptr/hash]]
[[ja:cpp/memory/unique ptr/hash]]
[[pt:cpp/memory/unique ptr/hash]]
[[ru:cpp/memory/unique ptr/hash]]
[[zh:cpp/memory/unique ptr/hash]]</text>
      <sha1>167p0g8pe5sbtdmei6w0521aydqrw13</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/make unique</title>
    <ns>0</ns>
    <id>10006</id>
    <revision>
      <id>89175</id>
      <parentid>86950</parentid>
      <timestamp>2017-01-06T14:02:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+Note on what allocate_unique could be like</comment>
      <text xml:space="preserve" bytes="3678">{{cpp/title|make_unique}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | num=1 | notes={{mark since c++14}}&lt;br/&gt;{{mark|only for non-array types}} |
template&lt; class T, class... Args &gt;
unique_ptr&lt;T&gt; make_unique( Args&amp;&amp;... args );
}}
{{dcl | num=2 | notes={{mark since c++14}}&lt;br/&gt;{{mark|only for array types with unknown bound}} |
template&lt; class T &gt;
unique_ptr&lt;T&gt; make_unique( std::size_t size );
}}
{{dcl | num=3 
 | notes={{mark since c++14}}&lt;br/&gt;{{mark|only for array types with known bound}} | 1=
template&lt; class T, class... Args &gt;
/* unspecified */ make_unique( Args&amp;&amp;... args ) = delete;
}}
{{dcl end}}

Constructs an object of type {{tt|T}} and wraps it in a {{lc|std::unique_ptr}}.

@1@ Constructs a non-array type {{tt|T}}. The arguments {{tt|args}} are passed to the constructor of {{tt|T}}. {{cpp/enable_if|{{tt|T}} is not an array type}}. The function is equivalent to:
{{source|unique_ptr&lt;T&gt;(new T(std::forward&lt;Args&gt;(args)...))}}

@2@ Constructs an array of unknown bound {{tt|T}}. {{cpp/enable_if|{{tt|T}} is an array of unknown bound}}. The function is equivalent to:
{{source|unique_ptr&lt;T&gt;(new typename std::remove_extent&lt;T&gt;::type[size]())}}

@3@ Construction of arrays of known bound is disallowed.

===Parameters===
{{par begin}}
{{par | args | list of arguments with which an instance of {{tt|T}} will be constructed.}}
{{par | size | the size of the array to construct}}
{{par end}}

===Return value===
{{lc|std::unique_ptr}} of an instance of type {{tt|T}}.

===Exceptions===
May throw {{lc|std::bad_alloc}} or any exception thrown by the constructor of {{tt|T}}. If an exception is thrown, this function has no effect.

===Possible Implementation===
{{eq fun
 | 1=
// note: this implementation does not disable this overload for array types
template&lt;typename T, typename... Args&gt;
std::unique_ptr&lt;T&gt; make_unique(Args&amp;&amp;... args)
{
    return std::unique_ptr&lt;T&gt;(new T(std::forward&lt;Args&gt;(args)...));
}
}}

===Notes===
Unlike {{lc|std::make_shared}} (which has {{lc|std::allocate_shared}}), {{tt|std::make_unique}} does not have an allocator-aware counterpart. A hypothetical {{tt|allocate_unique}} would be required to invent the deleter type {{tt|D}} for the {{tt|unique_ptr&lt;T,D&gt;}} it returns which would contain an allocator object and invoke both {{tt|destroy}} and {{tt|deallocate}} in its {{tt|operator()}}.

===Example===
{{example
|
| code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Vec3
{
    int x, y, z;
    Vec3() : x(0), y(0), z(0) { }
    Vec3(int x, int y, int z) :x(x), y(y), z(z) { }
    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Vec3&amp; v) {
        return os &lt;&lt; '{' &lt;&lt; &quot;x:&quot; &lt;&lt; v.x &lt;&lt; &quot; y:&quot; &lt;&lt; v.y &lt;&lt; &quot; z:&quot; &lt;&lt; v.z  &lt;&lt; '}';
    }
};

int main()
{
    // Use the default constructor.
    std::unique_ptr&lt;Vec3&gt; v1 = std::make_unique&lt;Vec3&gt;();
    // Use the constructor that matches these arguments
    std::unique_ptr&lt;Vec3&gt; v2 = std::make_unique&lt;Vec3&gt;(0, 1, 2);
    // Create a unique_ptr to an array of 5 elements
    std::unique_ptr&lt;Vec3[]&gt; v3 = std::make_unique&lt;Vec3[]&gt;(5);

    std::cout &lt;&lt; &quot;make_unique&lt;Vec3&gt;():      &quot; &lt;&lt; *v1 &lt;&lt; '\n'
              &lt;&lt; &quot;make_unique&lt;Vec3&gt;(0,1,2): &quot; &lt;&lt; *v2 &lt;&lt; '\n'
              &lt;&lt; &quot;make_unique&lt;Vec3[]&gt;(5):   &quot; &lt;&lt; '\n';
    for (int i = 0; i &lt; 5; i++) {
        std::cout &lt;&lt; &quot;     &quot; &lt;&lt; v3[i] &lt;&lt; '\n';
    }
}
 | output=
make_unique&lt;Vec3&gt;():      {x:0 y:0 z:0}
make_unique&lt;Vec3&gt;(0,1,2): {x:0 y:1 z:2}
make_unique&lt;Vec3[]&gt;(5):   
     {x:0 y:0 z:0}
     {x:0 y:0 z:0}
     {x:0 y:0 z:0}
     {x:0 y:0 z:0}
     {x:0 y:0 z:0}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc constructor}}
{{dsc inc | cpp/memory/shared_ptr/dsc make_shared}}
{{dsc end}}</text>
      <sha1>kbi93pfcgkn0zek1etfevifzoa4vpuo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/operator at</title>
    <ns>0</ns>
    <id>8591</id>
    <revision>
      <id>85336</id>
      <parentid>62796</parentid>
      <timestamp>2016-04-18T20:24:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>define &quot;valid&quot;</comment>
      <text xml:space="preserve" bytes="1396">{{cpp/memory/unique_ptr/title|operator[]}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
T&amp; operator[](size_t i) const;
}}
{{dcl end}}

{{tt|operator[]}} provides access to elements of an array managed by a {{tt|unique_ptr}}.

The parameter {{tt|i}} shall be less than the number of elements in the array; otherwise, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | i | the index of the element to be returned}}
{{par end}} 

===Return value===
Returns the element at index {{tt|i}}, i.e. {{c|get()[i]}}.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

int main() 
{
    const int size = 10; 
    std::unique_ptr&lt;int[]&gt; fact(new int[size]);

    for (int i = 0; i &lt; size; ++i) {
        fact[i] = (i == 0) ? 1 : i * fact[i-1];
    }

    for (int i = 0; i &lt; size; ++i) {
        std::cout &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; fact[i] &lt;&lt; '\n';
    }
}
 | output=
0: 1
1: 1
2: 2
3: 6
4: 24
5: 120
6: 720
7: 5040
8: 40320
9: 362880
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/unique ptr/operator at]]
[[es:cpp/memory/unique ptr/operator at]]
[[fr:cpp/memory/unique ptr/operator at]]
[[it:cpp/memory/unique ptr/operator at]]
[[ja:cpp/memory/unique ptr/operator at]]
[[pt:cpp/memory/unique ptr/operator at]]
[[ru:cpp/memory/unique ptr/operator at]]
[[zh:cpp/memory/unique ptr/operator at]]</text>
      <sha1>mnxgmcojmkrddvm2omq4fzf82hqacwg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/operator bool</title>
    <ns>0</ns>
    <id>4862</id>
    <revision>
      <id>91558</id>
      <parentid>63348</parentid>
      <timestamp>2017-03-31T19:49:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1133">{{cpp/memory/unique_ptr/title|operator bool}}
{{cpp/memory/unique_ptr/navbar}}
{{ddcl | since=c++11 | 1=
explicit operator bool() const;
}}

Checks whether {{c|*this}} owns an object, i.e. whether {{c|1=get() != nullptr}}.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} owns an object, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

int main()
{
    std::unique_ptr&lt;int&gt; ptr(new int(42));
  
    if (ptr) std::cout &lt;&lt; &quot;before reset, ptr is: &quot; &lt;&lt; *ptr &lt;&lt; '\n';
    ptr.reset();
    if (ptr) std::cout &lt;&lt; &quot;after reset, ptr is: &quot; &lt;&lt; *ptr &lt;&lt; '\n';
}

 | output=
before reset, ptr is: 42
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/unique ptr/operator bool]]
[[es:cpp/memory/unique ptr/operator bool]]
[[fr:cpp/memory/unique ptr/operator bool]]
[[it:cpp/memory/unique ptr/operator bool]]
[[ja:cpp/memory/unique ptr/operator bool]]
[[pt:cpp/memory/unique ptr/operator bool]]
[[ru:cpp/memory/unique ptr/operator bool]]
[[zh:cpp/memory/unique ptr/operator bool]]</text>
      <sha1>a6wjqwlrivzu9d0esajjv10ad2dbbg7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/operator cmp</title>
    <ns>0</ns>
    <id>8592</id>
    <revision>
      <id>62797</id>
      <parentid>58430</parentid>
      <timestamp>2013-07-01T23:41:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="4264">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::unique_ptr)&lt;/small&gt;}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
template&lt;class T1, class D1, class T2, class D2&gt;
bool operator==(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt;class T1, class D1, class T2, class D2&gt;
bool operator!=(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt;class T1, class D1, class T2, class D2&gt;
bool operator&lt;(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
}}
{{dcl | since=c++11 | num=4 | 1=
template&lt;class T1, class D1, class T2, class D2&gt;
bool operator&lt;=(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
}}
{{dcl | since=c++11 | num=5 | 1=
template&lt;class T1, class D1, class T2, class D2&gt;
bool operator&gt;(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
}}
{{dcl | since=c++11 | num=6 | 1=
template&lt;class T1, class D1, class T2, class D2&gt;
bool operator&gt;=(const unique_ptr&lt;T1, D1&gt;&amp; x, const unique_ptr&lt;T2, D2&gt;&amp; y);
}}

{{dcl | since=c++11 | num=7 | 1=
template &lt;class T, class D&gt;
bool operator==(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t) noexcept;
}}
{{dcl | since=c++11 | num=8 | 1=
template &lt;class T, class D&gt;
bool operator==(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; x) noexcept;
}}
{{dcl | since=c++11 | num=9 | 1=
template &lt;class T, class D&gt;
bool operator!=(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t) noexcept;
}}
{{dcl | since=c++11 | num=10 | 1=
template &lt;class T, class D&gt;
bool operator!=(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; x) noexcept;
}}
{{dcl | since=c++11 | num=11 | 1=
template &lt;class T, class D&gt;
bool operator&lt;(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
}}
{{dcl | since=c++11 | num=12 | 1=
template &lt;class T, class D&gt;
bool operator&lt;(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
}}
{{dcl | since=c++11 | num=13 | 1=
template &lt;class T, class D&gt;
bool operator&lt;=(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
}}
{{dcl | since=c++11 | num=14 | 1=
template &lt;class T, class D&gt;
bool operator&lt;=(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
}}
{{dcl | since=c++11 | num=15 | 1=
template &lt;class T, class D&gt;
bool operator&gt;(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
}}
{{dcl | since=c++11 | num=16 | 1=
template &lt;class T, class D&gt;
bool operator&gt;(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
}}
{{dcl | since=c++11 | num=17 | 1=
template &lt;class T, class D&gt;
bool operator&gt;=(const unique_ptr&lt;T, D&gt;&amp; x, nullptr_t);
}}
{{dcl | since=c++11 | num=18 | 1=
template &lt;class T, class D&gt;
bool operator&gt;=(nullptr_t, const unique_ptr&lt;T, D&gt;&amp; y);
}}
{{dcl end}}

Compares the pointer values of two {{tt|unique_ptr}}s, or a {{tt|unique_ptr}} and {{c|nullptr}}.

@1-6@ Compares two {{tt|unique_ptr}}s

@7-18@ Compares a {{tt|unique_ptr}} and {{c|nullptr}}.

===Parameters===
{{par begin}}
{{par | x, y | {{tt|unique_ptr}}s to compare }}
{{par end}} 

===Return value===
1) {{c|x.get() {{==}} y.get()}}

2) {{c|x.get() !{{=}} y.get()}}

3) {{c|std::less&lt;CT&gt;()(x.get(), y.get())}}, where {{tt|CT}} is {{c|std::common_type&lt;unique_ptr&lt;T1, D1&gt;::pointer, unique_ptr&lt;T2, D2&gt;::pointer&gt;::type}}

4) {{c|!(y &lt; x)}}

5) {{c|y &lt; x}}

6) {{c|!(x &lt; y)}}

7-8) {{c|!x}}

9-10) {{c|(bool)x}}

11) {{c|std::less&lt;unique_ptr&lt;T,D&gt;::pointer&gt;()(x.get(), nullptr)}} 

12) {{c|std::less&lt;unique_ptr&lt;T,D&gt;::pointer&gt;()(nullptr, y.get())}} 

13) {{c|nullptr &lt; x}}

14) {{c|y &lt; nullptr}}

15) {{c|!(nullptr &lt; x)}}

16) {{c|!(y &lt; nullptr)}}

17) {{c|!(x &lt; nullptr)}}

18) {{c|!(nullptr &lt; y)}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

int main() 
{
    std::unique_ptr&lt;int&gt; p1(new int(42));
    std::unique_ptr&lt;int&gt; p2(new int(42));

    std::cout &lt;&lt; &quot;p1 == p1: &quot; &lt;&lt; (p1 == p1) &lt;&lt; '\n';

    // p1 and p2 point to different memory locations, so p1 != p2
    std::cout &lt;&lt; &quot;p1 == p2: &quot; &lt;&lt; (p1 == p2) &lt;&lt; '\n';
}
 | output=
p1 == p1: 1
p1 == p2: 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/unique ptr/operator cmp]]
[[es:cpp/memory/unique ptr/operator cmp]]
[[fr:cpp/memory/unique ptr/operator cmp]]
[[it:cpp/memory/unique ptr/operator cmp]]
[[ja:cpp/memory/unique ptr/operator cmp]]
[[pt:cpp/memory/unique ptr/operator cmp]]
[[ru:cpp/memory/unique ptr/operator cmp]]
[[zh:cpp/memory/unique ptr/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/operator*</title>
    <ns>0</ns>
    <id>8590</id>
    <revision>
      <id>91435</id>
      <parentid>72439</parentid>
      <timestamp>2017-03-31T19:44:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1447">{{cpp/memory/unique_ptr/title|operator*}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
typename std::add_lvalue_reference&lt;T&gt;::type operator*() const;
}}
{{dcl | since=c++11 | num=2 | 1=
pointer operator-&gt;() const;
}}
{{dcl end}}

{{tt|operator*}} and {{tt|operator-&gt;}} provide access to the object owned by {{c|*this}}.

The behavior is undefined if {{c|get() {{==}} nullptr}}

===Parameters===
(none)

===Return value===
1) Returns the object owned by {{c|*this}}, equivalent to {{c|*get()}}.

2) Returns a pointer to the object owned by {{c|*this}}, i.e. {{c|get()}}.

===Exceptions===
1) may throw, e.g. if {{tt|pointer}} defines a throwing {{tt|operator*}}

2) {{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo {
    void bar() { std::cout &lt;&lt; &quot;Foo::bar\n&quot;; }
};

void f(const Foo&amp; foo) 
{
    std::cout &lt;&lt; &quot;f(const Foo&amp;)\n&quot;;
}

int main() 
{
    std::unique_ptr&lt;Foo&gt; ptr(new Foo);

    ptr-&gt;bar();
    f(*ptr);
}
 | output=
Foo::bar
f(const Foo&amp;)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc get}}
{{dsc end}}

[[de:cpp/memory/unique ptr/operator*]]
[[es:cpp/memory/unique ptr/operator*]]
[[fr:cpp/memory/unique ptr/operator*]]
[[it:cpp/memory/unique ptr/operator*]]
[[ja:cpp/memory/unique ptr/operator*]]
[[pt:cpp/memory/unique ptr/operator*]]
[[ru:cpp/memory/unique ptr/operator*]]
[[zh:cpp/memory/unique ptr/operator*]]</text>
      <sha1>snfs4m1hnhnz1j8jzlcojpj872sjjvx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/operator=</title>
    <ns>0</ns>
    <id>3114</id>
    <revision>
      <id>91990</id>
      <parentid>91500</parentid>
      <timestamp>2017-04-01T05:38:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="3858">{{cpp/memory/unique_ptr/title | operator{{=}}}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl h | members of the primary template, unique_ptr&lt;T&gt;}}
{{dcl | num=1 | 1= 
unique_ptr&amp; operator=( unique_ptr&amp;&amp; r );
}}
{{dcl | num=1 | 1= 
template&lt; class U, class E &gt;
unique_ptr&amp; operator=( unique_ptr&lt;U,E&gt;&amp;&amp; r );
}}
{{dcl | num=2 | 1= 
unique_ptr&amp; operator=( nullptr_t );
}}
{{dcl h | members of the specialization for arrays, unique_ptr&lt;T[]&gt;}}
{{dcl | num=1 | 1= 
unique_ptr&amp; operator=( unique_ptr&amp;&amp; r );
}}
{{dcl | num=1 | notes={{mark since c++17}} | 1= 
template&lt; class U, class E &gt;
unique_ptr&amp; operator=( unique_ptr&lt;U,E&gt;&amp;&amp; r );
}}
{{dcl | num=2 | 1= 
unique_ptr&amp; operator=( nullptr_t );
}}
{{dcl end}}

@1@ Transfers ownership from {{tt|r}} to {{c|*this}} as if by calling {{c|reset(r.release())}} followed by an assignment of {{lc|get_deleter()}} from {{c|std::forward&lt;E&gt;(r.get_deleter())}}. {{mark unreviewed dr|lwg}}&lt;!-- The C++11 standard says &quot;forward&lt;D&gt;&quot;, that was a typo: http://lwg.github.com/issues/lwg-active.html#2047 --&gt; 
@@If {{tt|Deleter}} is not a reference type, requires that it is nothrow-{{concept|MoveAssignable}}. 
@@If {{tt|Deleter}} is a reference type, requires that {{tt|std::remove_reference&lt;Deleter&gt;::type}} is nothrow-{{concept|CopyAssignable}}. 
@@The template version of this assignment operator only participates in overload resolution if {{tt|U}} is not an array type and {{c|unique_ptr&lt;U,E&gt;::pointer}} is implicitly convertible to {{tt|pointer}} {{rev inl|since=c++17|and {{c|std::is_assignable&lt;Deleter&amp;, E&amp;&amp;&gt;::value}} is {{c|true}}&lt;!--n4366--&gt;}}.

{{rev begin}}
{{rev|since=c++17|
@@The template version of this assignment operator in the specialization for arrays, {{tt|std::unique_ptr&lt;T[]&lt;nowiki&gt;&gt;&lt;/nowiki&gt;}} behaves the same as in the primary template, except that will only participate in overload resolution if all of the following is true: 
@@* {{tt|U}} is an array type
@@* {{tt|pointer}} is the same type as {{tt|element_type*}}
@@* {{tt|unique_ptr&lt;U,E&lt;nowiki&gt;&gt;&lt;/nowiki&gt;::pointer}} is the same type as {{tt|unique_ptr&lt;U,E&lt;nowiki&gt;&gt;&lt;/nowiki&gt;::element_type*}}
@@* {{tt|unique_ptr&lt;U,E&lt;nowiki&gt;&gt;&lt;/nowiki&gt;::element_type(*)[]}} is convertible to {{tt|element_type(*)[]}}
@@* {{c|std::is_assignable&lt;Deleter&amp;, E&amp;&amp;&gt;::value}} is {{c|true}}
}}
{{rev end}}
@2@ Effectively the same as calling {{c|reset()}}.

Note that {{tt|unique_ptr}}'s assignment operator only accepts [[cpp/language/value_category|rvalues]], which are typically generated by {{lc|std::move}}.  (The {{tt|unique_ptr}} class explicitly deletes its [[cpp/language/value_category|lvalue]] copy constructor and [[cpp/language/value_category|lvalue]] assignment operator.)

===Parameters===
{{par begin}}
{{par | r | smart pointer from which ownership will be transfered}}
{{par end}} 

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
 
struct Foo {
    Foo() { std::cout &lt;&lt; &quot;Foo\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo\n&quot;; }
};

int main() 
{
    std::unique_ptr&lt;Foo&gt; p1;

    {
        std::cout &lt;&lt; &quot;Creating new Foo...\n&quot;;
        std::unique_ptr&lt;Foo&gt; p2(new Foo);
        // p1 = p2; // Error ! can't copy unique_ptr
        p1 = std::move(p2);
        std::cout &lt;&lt; &quot;About to leave inner block...\n&quot;;

        // Foo instance will continue to live, 
        // despite p2 going out of scope
    }
  
    std::cout &lt;&lt; &quot;About to leave program...\n&quot;;
}
 | output=
Creating new Foo...
Foo
About to leave inner block...
About to leave program...
~Foo
}}

[[de:cpp/memory/unique ptr/operator=]]
[[es:cpp/memory/unique ptr/operator=]]
[[fr:cpp/memory/unique ptr/operator=]]
[[it:cpp/memory/unique ptr/operator=]]
[[ja:cpp/memory/unique ptr/operator=]]
[[pt:cpp/memory/unique ptr/operator=]]
[[ru:cpp/memory/unique ptr/operator=]]
[[zh:cpp/memory/unique ptr/operator=]]</text>
      <sha1>614ww8x86cufhgujoqed1dpmkov0umn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/release</title>
    <ns>0</ns>
    <id>4860</id>
    <revision>
      <id>91464</id>
      <parentid>72862</parentid>
      <timestamp>2017-03-31T19:45:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1470">{{cpp/memory/unique_ptr/title|release}}
{{cpp/memory/unique_ptr/navbar}}
{{ddcl | since=c++11 | 1=
pointer release();
}}

Releases the ownership of the managed object if any. {{lc|get()}} returns {{c|nullptr}} after the call.

===Parameters===
(none)

===Return value===
Pointer to the managed object or {{c|nullptr}} if there was no managed object, i.e. the value which would be returned by {{lc|get()}} before the call.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;memory&gt;
#include &lt;iostream&gt;
#include &lt;cassert&gt;

struct Foo {
    Foo() { std::cout &lt;&lt; &quot;Foo\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo\n&quot;; }
};

int main()
{
    std::cout &lt;&lt; &quot;Creating new Foo...\n&quot;;
    std::unique_ptr&lt;Foo&gt; up(new Foo());

    std::cout &lt;&lt; &quot;About to release Foo...\n&quot;;
    Foo* fp = up.release();

    assert (up.get() == nullptr);
    std::cout &lt;&lt; &quot;Foo is no longer owned by unique_ptr...\n&quot;;

    delete fp;
}

 | output=
Creating new Foo...
Foo
About to release Foo...
Foo is no longer owned by unique_ptr...
~Foo
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc get}}
{{dsc inc | cpp/memory/unique_ptr/dsc reset}}
{{dsc end}}

[[de:cpp/memory/unique ptr/release]]
[[es:cpp/memory/unique ptr/release]]
[[fr:cpp/memory/unique ptr/release]]
[[it:cpp/memory/unique ptr/release]]
[[ja:cpp/memory/unique ptr/release]]
[[pt:cpp/memory/unique ptr/release]]
[[ru:cpp/memory/unique ptr/release]]
[[zh:cpp/memory/unique ptr/release]]</text>
      <sha1>kdeov457omxb818091gdn1vj0sxjfhn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/reset</title>
    <ns>0</ns>
    <id>2422</id>
    <revision>
      <id>91565</id>
      <parentid>74857</parentid>
      <timestamp>2017-03-31T19:50:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3938">{{cpp/memory/unique_ptr/title|reset}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl h | members of the primary template, unique_ptr&lt;T&gt;}}
{{dcl | num=1 | 1=
void reset( pointer ptr = pointer() );
}}
{{dcl h | members of the specialization unique_ptr&lt;T[]&gt;}}
{{dcl | num=2 | until=c++17 | 1=
void reset( pointer ptr = pointer() );
}}
{{dcl rev begin | num=3 }}
{{dcl | until=c++17 | 1=
template&lt; class U &gt; 
void reset( U ) = delete;
}}
{{dcl  | since=c++17 | 1=
template&lt; class U &gt; 
void reset( U );
}}
{{dcl rev end}}
{{dcl rev begin | num=4 }}
{{dcl | until=c++17 | 1=
void reset( std::nullptr_t p );
}}
{{dcl | since=c++17 | 1=
void reset( std::nullptr_t p = nullptr );
}}
{{dcl rev end}}
{{dcl end}}

Replaces the managed object.

@1@ Given {{tt|current_ptr}}, the pointer that was managed by {{tt|*this}}, performs the following actions, in this order:
# Saves a copy of the current pointer {{c|1=old_ptr = current_ptr}} 
# Overwrites the current pointer with the argument {{c|1=current_ptr = ptr}}
# If the old pointer was non-empty, deletes the previously managed object {{c|1=if(old_ptr != nullptr) get_deleter()(old_ptr)}}.

{{rev begin}}
{{rev|until=c++17|
@2@ Behaves the same as the reset member of the primary template.
@3@ In the specialization for dynamic arrays, {{c|std::unique_ptr&lt;T[]&gt;}}, this template member is provided to prevent using reset() with a pointer to derived (which would result in undefined behavior with arrays).
@4@ In the specialization for dynamic arrays, {{c|std::unique_ptr&lt;T[]&gt;}}, this overload is necessary to allow reset to {{c|nullptr}} (which would otherwise be prohibited by the template overload). Equivalent to {{c|reset(pointer())}}
}}
{{rev|since=c++17|
@3@ Behaves the same as the reset member of the primary template, except that it will only participate in overload resolution if either
# {{tt|U}} is the same type as {{tt|pointer}}, or
# {{tt|pointer}} is the same type as {{tt|element_type*}} and {{tt|U}} is a pointer type {{tt|V*}} such that {{tt|V(*)[]}} is convertible to {{tt|element_type(*)[]}}.
@4@ Equivalent to {{c|reset(pointer())}}
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | ptr | pointer to a new object to manage}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Notes===
To replace the managed object while supplying a new deleter as well, move assignment operator may be used.

A test for self-reset, i.e. whether {{tt|ptr}} points to an object already managed by {{tt|*this}}, is not performed, except where provided as a compiler extension or as a debugging assert. Note that code such as {{c|p.reset(p.release())}} does not involve self-reset, only code like {{c|p.reset(p.get())}} does. 

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo {
    Foo() { std::cout &lt;&lt; &quot;Foo...\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo...\n&quot;; }
};

struct D {
    void operator() (Foo* p) {
        std::cout &lt;&lt; &quot;Calling delete for Foo object... \n&quot;;
        delete p;
    }
};

int main()
{
    std::cout &lt;&lt; &quot;Creating new Foo...\n&quot;;
    std::unique_ptr&lt;Foo, D&gt; up(new Foo(), D());  // up owns the Foo pointer (deleter D)

    std::cout &lt;&lt; &quot;Replace owned Foo with a new Foo...\n&quot;;
    up.reset(new Foo());  // calls deleter for the old one

    std::cout &lt;&lt; &quot;Release and delete the owned Foo...\n&quot;;
    up.reset(nullptr);      
}
 | output=
Creating new Foo...
Foo...
Replace owned Foo with a new Foo...
Foo...
Calling delete for Foo object...
~Foo...
Release and delete the owned Foo...
Calling delete for Foo object...
~Foo...
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/memory/unique_ptr/dsc release}}
{{dsc end}}

[[de:cpp/memory/unique ptr/reset]]
[[es:cpp/memory/unique ptr/reset]]
[[fr:cpp/memory/unique ptr/reset]]
[[it:cpp/memory/unique ptr/reset]]
[[ja:cpp/memory/unique ptr/reset]]
[[pt:cpp/memory/unique ptr/reset]]
[[ru:cpp/memory/unique ptr/reset]]
[[zh:cpp/memory/unique ptr/reset]]</text>
      <sha1>8ksd1wvxgwsgxwtbbk85bdlj75zcfbk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/swap</title>
    <ns>0</ns>
    <id>4864</id>
    <revision>
      <id>91496</id>
      <parentid>72569</parentid>
      <timestamp>2017-03-31T19:47:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1230">{{cpp/memory/unique_ptr/title|swap}}
{{cpp/memory/unique_ptr/navbar}}
{{ddcl | since=c++11 | 1=
void swap(unique_ptr&amp; other);
}}

Swaps the managed objects and associated deleters of {{tt|*this}} and another {{c|unique_ptr}} object {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another {{c|unique_ptr}} object to swap the managed object and the deleter with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo {
    Foo(int _val) : val(_val) { std::cout &lt;&lt; &quot;Foo...\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo...\n&quot;; }
    int val;
};

int main()
{
    std::unique_ptr&lt;Foo&gt; up1(new Foo(1));
    std::unique_ptr&lt;Foo&gt; up2(new Foo(2));

    up1.swap(up2);

    std::cout &lt;&lt; &quot;up1-&gt;val:&quot; &lt;&lt; up1-&gt;val &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;up2-&gt;val:&quot; &lt;&lt; up2-&gt;val &lt;&lt; std::endl;
}
 | output=
Foo...
Foo...
up1-&gt;val:2
up2-&gt;val:1
~Foo...
~Foo...
}}

[[de:cpp/memory/unique ptr/swap]]
[[es:cpp/memory/unique ptr/swap]]
[[fr:cpp/memory/unique ptr/swap]]
[[it:cpp/memory/unique ptr/swap]]
[[ja:cpp/memory/unique ptr/swap]]
[[pt:cpp/memory/unique ptr/swap]]
[[ru:cpp/memory/unique ptr/swap]]
[[zh:cpp/memory/unique ptr/swap]]</text>
      <sha1>ljm6yuy8jq5nh10mwzc1ltj0wqgc811</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/swap2</title>
    <ns>0</ns>
    <id>5306</id>
    <revision>
      <id>42071</id>
      <parentid>19314</parentid>
      <timestamp>2012-11-02T21:59:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="312">{{cpp/memory/swap2|unique_ptr}}

[[de:cpp/memory/unique ptr/swap2]]
[[es:cpp/memory/unique ptr/swap2]]
[[fr:cpp/memory/unique ptr/swap2]]
[[it:cpp/memory/unique ptr/swap2]]
[[ja:cpp/memory/unique ptr/swap2]]
[[pt:cpp/memory/unique ptr/swap2]]
[[ru:cpp/memory/unique ptr/swap2]]
[[zh:cpp/memory/unique ptr/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/unique ptr</title>
    <ns>0</ns>
    <id>3112</id>
    <revision>
      <id>91969</id>
      <parentid>91469</parentid>
      <timestamp>2017-03-31T21:08:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2801, 2905</comment>
      <text xml:space="preserve" bytes="10508">{{cpp/memory/unique_ptr/title | unique_ptr}}
{{cpp/memory/unique_ptr/navbar}}
{{dcl begin}}
{{dcl h | members of the primary template, unique_ptr&lt;T&gt;}}
{{dcl | num=1 | 1= 
constexpr unique_ptr();
constexpr unique_ptr( nullptr_t );
}}
{{dcl | num=2 | 1= 
explicit unique_ptr( pointer p );
}}
{{dcl | num=3 | 1= 
unique_ptr( pointer p, /* see below */ d1 );
}}
{{dcl | num=4 | 1= 
unique_ptr( pointer p, /* see below */ d2 );
}}
{{dcl | num=5 | 1= 
unique_ptr( unique_ptr&amp;&amp; u );
}}
{{dcl | num=6 | 1= 
template&lt; class U, class E &gt;
unique_ptr( unique_ptr&lt;U, E&gt;&amp;&amp; u );
}}
{{dcl | num=7 | notes={{mark until c++17}} | 1= 
template&lt; class U &gt;
unique_ptr( auto_ptr&lt;U&gt;&amp;&amp; u );
}}
{{dcl h | members of the specialization for arrays, unique_ptr&lt;T[]&gt;}}
{{dcl | num=1 | 1= 
constexpr unique_ptr();
constexpr unique_ptr( nullptr_t );
}}
{{dcl | num=2 | notes={{mark until c++17}} | 1= 
explicit unique_ptr( pointer p );
}}
{{dcl | num=2 | notes={{mark since c++17}} | 1= 
template&lt;class U&gt; explicit unique_ptr( U p );
}}
{{dcl | num=3 | notes={{mark until c++17}} | 1= 
unique_ptr( pointer p, /* see below */ d1 );
}}
{{dcl | num=3 | notes={{mark since c++17}} | 1= 
template&lt;class U&gt; unique_ptr( U p, /* see below */ d1 );
}}
{{dcl | num=4 | notes={{mark until c++17}} | 1= 
unique_ptr( pointer p, /* see below */ d2 );
}}
{{dcl | num=4 | notes={{mark since c++17}} | 1= 
template&lt;class U&gt; unique_ptr( U p, /* see below */ d2 );
}}
{{dcl | num=5 | 1= 
unique_ptr( unique_ptr&amp;&amp; u );
}}
{{dcl | num=6 | notes={{mark since c++17}} | 1= 
template&lt; class U, class E &gt;
unique_ptr( unique_ptr&lt;U, E&gt;&amp;&amp; u );
}}
{{dcl end}}

@1@ Constructs a {{tt|std::unique_ptr}} that owns nothing. Value-initializes the stored pointer and the stored deleter. Requires that {{tt|Deleter}} is {{concept|DefaultConstructible}} and that construction does not throw an exception. {{rrev multi|until1=c++17|rev1=This constructor is ill-formed if {{tt|Deleter}} is of pointer or reference type.|rev2={{cpp/enable if|plural=yes|{{c|std::is_default_constructible&lt;Deleter&gt;::value}} is {{c|true}} and {{c|Deleter}} is not a pointer type}}.}}

@2@ Constructs a {{tt|std::unique_ptr}} which owns p, initializing the stored pointer with p and value-initializing the stored deleter. Requires that {{tt|Deleter}} is {{concept|DefaultConstructible}} and that construction does not throw an exception.  {{rrev multi|until1=c++17|rev1=This constructor is ill-formed if {{tt|Deleter}} is of pointer or reference type.|rev2={{cpp/enable if|{{c|std::is_default_constructible&lt;Deleter&gt;::value}} is {{c|true}} and {{c|Deleter}} is not a pointer type}}.}}

@3-4@ Constructs a {{tt|std::unique_ptr}} object which owns {{tt|p}}, initializing the stored pointer with {{tt|p}} and initializing a deleter {{tt|D}} as below (depends upon whether {{tt|D}} is a reference type)
:
:@a@ If {{tt|D}} is non-reference type {{c|A}}, then the signatures are:
: {{tt|unique_ptr(pointer p, const A&amp; d);}} (requires that {{tt|Deleter}} is nothrow-{{concept|CopyConstructible}})
: {{tt|unique_ptr(pointer p, A&amp;&amp; d);}} (requires that {{tt|Deleter}} is nothrow-{{concept|MoveConstructible}})
:
:@b@ If {{tt|D}} is an lvalue-reference type {{c|A&amp;}}, then the signatures are:
: {{tt|unique_ptr(pointer p, A&amp; d);}}
: {{tt|unique_ptr(pointer p, A&amp;&amp; d);}}
:
:@c@ If {{tt|D}} is an lvalue-reference type {{c|const A&amp;}}, then the signatures are:
: {{tt|unique_ptr(pointer p, const A&amp; d);}}
: {{tt|unique_ptr(pointer p, const A&amp;&amp; d);}}
@@ In all cases the deleter is initialized from {{c|std::forward&lt;decltype(d)&gt;(d)}}.
{{rrev multi|until1=c++17|rev1=If {{tt|D}} is a reference type and the second overload is chosen, the program is ill-formed.|rev2=If {{tt|D}} is a reference type, the second overload is defined as deleted. {{cpp/enable if|plural=yes|{{c|std::is_constructible&lt;D, decltype(d)&gt;::value}} is {{c|true}}}}.}}

{{rev begin}}
{{rev|since=c++17|
@2-4@ in the specialization for arrays behave the same as the constructors that take a pointer parameter in the primary template except that they additionally do not participate in overload resolution unless one of the following is true:
: {{tt|U}} is the same type as {{tt|pointer}}, or
: {{tt|U}} is {{lc|std::nullptr_t}}, or
: {{tt|pointer}} is the same type as {{tt|element_type*}} and {{tt|U}} is some pointer type {{tt|V*}} such that {{tt|V(*)[]}} is implicitly convertible to {{tt|element_type(*)[]}}. 
}}
{{rev end}}
@5@ Constructs a {{tt|unique_ptr}} by transferring ownership from {{tt|u}} to {{c|*this}}. If {{tt|Deleter}} is not a reference type, requires that it is nothrow-{{concept|MoveConstructible}} (if {{tt|Deleter}} is a reference, {{tt|get_deleter()}} and {{tt|u.get_deleter()}} after move construction reference the same value)

@6@ Constructs a {{tt|unique_ptr}} by transferring ownership from {{tt|u}} to {{c|*this}}, where {{tt|u}} is constructed with a specified deleter ({{tt|E}}). It depends upon whether {{tt|E}} is a reference type, as following:
:
:@a@ if {{tt|E}} is a reference type, this deleter is copy constructed from {{tt|u}}'s deleter (requires that this construction does not throw)
:@b@ if {{tt|E}} is a non-reference type, this deleter is move constructed from {{tt|u}}'s deleter (requires that this construction does not throw)
@@ This constructor only participates in overload resolution if all of the following is true:
:@a@ {{tt|unique_ptr&lt;U, E&amp;gt;::pointer}} is implicitly convertible to {{tt|pointer}}
:@b@ U is not an array type
:@c@ Either {{tt|Deleter}} is a reference type and {{tt|E}} is the same type as {{tt|D}}, or {{tt|Deleter is not a reference type}} and {{tt|E}} is implicitly convertible to {{tt|D}}

{{rev begin}}
{{rev|since=c++17|
@6@ in the specialization for arrays behaves the same as in the primary template, except that it will only participate in overload resolution if all of the following is true
: {{tt|U}} is an array type
: {{tt|pointer}} is the same type as {{tt|element_type*}}
: {{tt|unique_ptr&lt;U,E&lt;nowiki&gt;&gt;&lt;/nowiki&gt;::pointer}} is the same type as {{tt|unique_ptr&lt;U,E&lt;nowiki&gt;&gt;&lt;/nowiki&gt;::element_type*}}
: {{tt|unique_ptr&lt;U,E&lt;nowiki&gt;&gt;&lt;/nowiki&gt;::element_type(*)[]}} is convertible to {{tt|element_type(*)[]}}
: either {{tt|Deleter}} is a reference type and {{tt|E}} is the same type as {{tt|Deleter}}, or {{tt|Deleter}} is not a reference type and {{tt|E}} is implicitly convertible to {{tt|Deleter}}.
}}
{{rev end}}
@7@ Constructs a {{tt|unique_ptr}} where the stored pointer is initialized with {{tt|u.release()}} and the stored deleter is value-initialized. This constructor only participates in overload resolution if {{tt|U*}} is implicitly convertible to {{tt|T*}} and {{tt|Deleter}} is the same type as {{tt|std::default_delete&lt;T&gt;}}.

===Parameters===
{{par begin}}
{{par | p | a pointer to an object to manage}}
{{par | d1,d2 | a deleter to use to destroy the object}}
{{par | u | another smart pointer to acquire the ownership from}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Instead of using the overload {{v|2}} together with new, it is often a better idea to use {{lc|std::make_unique|std::make_unique&lt;T&gt;}}.

{{c|std::unique_ptr&lt;Derived&gt;}} is implicitly convertible to {{c|std::unique_ptr&lt;Base&gt;}} through the overload {{v|6}} (because both the managed pointer and {{lc|std::default_delete}} are implicitly convertible)

Because the default constructor is {{tt|constexpr}}, static unique_ptrs are initialized as part of [[cpp/language/initialization#Non-local_variables|static non-local initialization]], before any dynamic non-local initialization begins. This makes it safe to use a unique_ptr in a constructor of any static object.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

struct Foo { // object to manage
    Foo() { std::cout &lt;&lt; &quot;Foo ctor\n&quot;; }
    Foo(const Foo&amp;) { std::cout &lt;&lt; &quot;Foo copy ctor\n&quot;; }
    Foo(Foo&amp;&amp;) { std::cout &lt;&lt; &quot;Foo move ctor\n&quot;; }
    ~Foo() { std::cout &lt;&lt; &quot;~Foo dtor\n&quot;; }
};

struct D { // deleter
    D() {};
    D(const D&amp;) { std::cout &lt;&lt; &quot;D copy ctor\n&quot;; }
    D(D&amp;) { std::cout &lt;&lt; &quot;D non-const copy ctor\n&quot;;}
    D(D&amp;&amp;) { std::cout &lt;&lt; &quot;D move ctor \n&quot;; }
    void operator()(Foo* p) const {
        std::cout &lt;&lt; &quot;D is deleting a Foo\n&quot;;
        delete p;
    };
};

int main()
{
    std::cout &lt;&lt; &quot;Example constructor(1)...\n&quot;;
    std::unique_ptr&lt;Foo&gt; up1;  // up1 is empty
    std::unique_ptr&lt;Foo&gt; up1b(nullptr);  // up1b is empty

    std::cout &lt;&lt; &quot;Example constructor(2)...\n&quot;;
    {
        std::unique_ptr&lt;Foo&gt; up2(new Foo); //up2 now owns a Foo
    } // Foo deleted

    std::cout &lt;&lt; &quot;Example constructor(3)...\n&quot;;
    D d;
    {  // deleter type is not a reference
       std::unique_ptr&lt;Foo, D&gt; up3(new Foo, d); // deleter copied
    }
    {  // deleter type is a reference 
       std::unique_ptr&lt;Foo, D&amp;&gt; up3b(new Foo, d); // up3b holds a reference to d
    }

    std::cout &lt;&lt; &quot;Example constructor(4)...\n&quot;;
    {  // deleter is not a reference 
       std::unique_ptr&lt;Foo, D&gt; up4(new Foo, D()); // deleter moved
    }

    std::cout &lt;&lt; &quot;Example constructor(5)...\n&quot;;
    {
       std::unique_ptr&lt;Foo&gt; up5a(new Foo);
       std::unique_ptr&lt;Foo&gt; up5b(std::move(up5a)); // ownership transfer
    }

    std::cout &lt;&lt; &quot;Example constructor(6)...\n&quot;;
    {
        std::unique_ptr&lt;Foo, D&gt; up6a(new Foo, d); // D is copied
        std::unique_ptr&lt;Foo, D&gt; up6b(std::move(up6a)); // D is moved

        std::unique_ptr&lt;Foo, D&amp;&gt; up6c(new Foo, d); // D is a reference
        std::unique_ptr&lt;Foo, D&gt; up6d(std::move(up6c)); // D is copied
    }

    std::cout &lt;&lt; &quot;Example constructor(7)...\n&quot;;
    {
        std::auto_ptr&lt;Foo&gt; up7a(new Foo);
        std::unique_ptr&lt;Foo&gt; up7b(std::move(up7a)); // ownership transfer
    }
}
 | output=
Example constructor(1)...
Example constructor(2)...
Foo ctor
~Foo dtor
Example constructor(3)...
Foo ctor
D copy ctor
D is deleting a Foo
~Foo dtor
Foo ctor
D is deleting a Foo
~Foo dtor
Example constructor(4)...
Foo ctor
D move ctor 
D is deleting a Foo
~Foo dtor
Example constructor(5)...
Foo ctor
~Foo dtor
Example constructor(6)...
Foo ctor
D copy ctor
D move ctor 
Foo ctor
D non-const copy ctor
D is deleting a Foo
~Foo dtor
D is deleting a Foo
~Foo dtor
Example constructor(7)...
Foo ctor
~Foo dtor
}}


[[de:cpp/memory/unique ptr/unique ptr]]
[[es:cpp/memory/unique ptr/unique ptr]]
[[fr:cpp/memory/unique ptr/unique ptr]]
[[it:cpp/memory/unique ptr/unique ptr]]
[[ja:cpp/memory/unique ptr/unique ptr]]
[[pt:cpp/memory/unique ptr/unique ptr]]
[[ru:cpp/memory/unique ptr/unique ptr]]
[[zh:cpp/memory/unique ptr/unique ptr]]</text>
      <sha1>6xbmgmjopptvkm4hlulvak2bjir7dys</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unique ptr/~unique ptr</title>
    <ns>0</ns>
    <id>3113</id>
    <revision>
      <id>69644</id>
      <parentid>66609</parentid>
      <timestamp>2014-04-16T22:36:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>requirements and note on incomplete type</comment>
      <text xml:space="preserve" bytes="1459">{{cpp/memory/unique_ptr/title | ~unique_ptr}}
{{cpp/memory/unique_ptr/navbar}}
{{ddcl | since=c++11 |
~unique_ptr();
}}
If {{tt|get() {{==}} nullptr}} there are no effects. Otherwise, the owned object is destroyed via [[cpp/memory/unique_ptr/get_deleter|{{c|get_deleter()}}]][[cpp/memory/unique_ptr/get|{{c|(get())}}]].

Requires that {{tt|get_deleter()(get())}} does not throw exceptions.


===Notes===
Although {{tt|std::unique_ptr&lt;T&gt;}} with the default deleter may be constructed with [[cpp/language/incomplete_type|incomplete type]] {{tt|T}}, the type {{tt|T}} must be complete at the point of code where the destructor is called.

===Example===
{{example | The following program demonstrates usage of a custom deleter.
| code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
 
int main () 
{
    auto deleter = [](int* ptr){
        std::cout &lt;&lt; &quot;[deleter called]\n&quot;;
        delete ptr;
    };
 
    std::unique_ptr&lt;int,decltype(deleter)&gt; uniq(new int, deleter);
    std::cout &lt;&lt; (uniq ? &quot;not empty\n&quot; : &quot;empty\n&quot;);
    uniq.reset();
    std::cout &lt;&lt; (uniq ? &quot;not empty\n&quot; : &quot;empty\n&quot;);
}
| output=
not empty
[deleter called]
empty
}}

[[de:cpp/memory/unique ptr/~unique ptr]]
[[es:cpp/memory/unique ptr/~unique ptr]]
[[fr:cpp/memory/unique ptr/~unique ptr]]
[[it:cpp/memory/unique ptr/~unique ptr]]
[[ja:cpp/memory/unique ptr/~unique ptr]]
[[pt:cpp/memory/unique ptr/~unique ptr]]
[[ru:cpp/memory/unique ptr/~unique ptr]]
[[zh:cpp/memory/unique ptr/~unique ptr]]</text>
      <sha1>ki8rrcc2xdl0ireybice8aus9o3j2dv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource</title>
    <ns>0</ns>
    <id>14949</id>
    <revision>
      <id>84298</id>
      <timestamp>2016-03-17T13:50:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2283">{{cpp/memory/pmr/title|unsynchronized_pool_resource}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{ddcl|header=memory_resource | since=c++17|
class unsynchronized_pool_resource : public std::pmr::memory_resource;
}}

The class {{tt|std::pmr::unsynchronized_pool_resource}} is a general-purpose memory resource class with the following properties:
* It owns the allocated memory and frees it on destruction, even if {{tt|deallocate}} has not been called for some of the allocated blocks.
* It consists of a collection of ''pools'' that serves request for different block sizes. Each pool manages a collection of ''chunks'' that are then divided into blocks of uniform size. 
* Calls to {{ltt|cpp/memory/unsynchronized_pool_resource/do_allocate}} are dispatched to the pool serving the smallest blocks accommodating the requested size.
* Exhausting memory in the pool causes the next allocation request for that pool to allocate an additional chunk of memory from the ''upstream allocator'' to replenish the pool. The chunk size obtained increases geometrically.
* Allocations requests that exceed the largest block size are served from the ''upstream allocator'' directly.
* The largest block size and maximum chunk size may be tuned by passing a {{lc|std::pmr::pool_options}} struct to its constructor.

{{tt|unsynchronized_pool_resource}} is not thread-safe, and cannot be accessed from multiple threads simultaneously; use {{ltt|cpp/memory/synchronized_pool_resource}} if access from multiple threads is required.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc constructor}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc destructor}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc operator{{=}}}}

{{dsc h2 | Public member functions}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc release}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc upstream_resource}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc options}}

{{dsc h2 | Protected member functions}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc do_allocate}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc do_deallocate}}
{{dsc inc | cpp/memory/unsynchronized_pool_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>2xb4ajtejl3dhnpobwoduxrnfr1a2vo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/do allocate</title>
    <ns>0</ns>
    <id>14965</id>
    <revision>
      <id>84315</id>
      <timestamp>2016-03-17T14:09:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1058">{{cpp/memory/unsynchronized_pool_resource/title|do_allocate}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual void* do_allocate(std::size_t bytes, std::size_t alignment);
}}

Allocates storage. 

If the pool selected for a block of size {{tt|bytes}} is unable to satisfy the request from its internal data structures, calls {{tt|allocate()}} on the upstream memory resource to obtain memory.

If the size requested is larger than what the largest pool can handle, memory is allocated by calling {{tt|allocate()}} on the upstream memory resource.

=== Return value ===
A pointer to allocated storage of at least {{tt|bytes}} bytes in size, aligned to the specified {{tt|alignment}} if such alignment is supported, and to {{c|alignof(std::max_align_t)}} otherwise. 

=== Exceptions ===
Throws nothing unless calling {{tt|allocate()}} on the upstream memory resource throws.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc allocate}}
{{dsc inc| cpp/memory/memory_resource/dsc do_allocate}}
{{dsc end}}</text>
      <sha1>n1x0ngq02xt0nly059cwoif8ht229r8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/do deallocate</title>
    <ns>0</ns>
    <id>14966</id>
    <revision>
      <id>84316</id>
      <timestamp>2016-03-17T14:10:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="599">{{cpp/memory/unsynchronized_pool_resource/title|do_deallocate}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{ddcl|since=c++17 |1=
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment);
}}

Returns the memory at {{tt|p}} to the pool. It is unspecified if or under what circumstances this operation will result in a call to {{tt|deallocate()}} on the upstream memory resource.

=== Exceptions ===
Throws nothing.

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc deallocate}}
{{dsc inc| cpp/memory/memory_resource/dsc do_deallocate}}
{{dsc end}}</text>
      <sha1>j2yyd1qr8eirg71wl75ztm9u4elijxx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/do is equal</title>
    <ns>0</ns>
    <id>14967</id>
    <revision>
      <id>91914</id>
      <parentid>84317</parentid>
      <timestamp>2017-03-31T20:01:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="615">{{cpp/memory/unsynchronized_pool_resource/title|do_is_equal}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{ddcl|since=c++17|1=
virtual bool do_is_equal(const std::pmr::memory_resource&amp; other) const;
}}

Compare {{tt|*this}} with {{tt|other}} for identity - memory allocated using a {{tt|unsynchronized_pool_resource}} can only be deallocated using that same resource.

=== Return value ===
{{c|1=this == dynamic_cast&lt;const unsynchronized_pool_resource*&gt;(&amp;other)}}

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc| cpp/memory/memory_resource/dsc do_is_equal}}
{{dsc end}}</text>
      <sha1>n2zlmsz8niambj9gn8v0t41rytwwo2x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/options</title>
    <ns>0</ns>
    <id>14964</id>
    <revision>
      <id>84314</id>
      <timestamp>2016-03-17T14:09:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="622">{{cpp/memory/unsynchronized_pool_resource/title|options}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | 1=
std::pmr::pool_options options() const;
}}
{{dcl end}}

Returns the options that controls the pooling behavior of this resource.

The values in the returned struct may differ from those supplied to the constructor in the following ways:
* Values of zero will be replaced with implementation-specified defaults;
* Sizes may be rounded to an unspecified granularity.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/unsynchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>qba5f9opslq9fsmn2vzg0kqajfr3zbk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/release</title>
    <ns>0</ns>
    <id>14962</id>
    <revision>
      <id>84312</id>
      <timestamp>2016-03-17T14:07:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="532">{{cpp/memory/unsynchronized_pool_resource/title|release}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17| 1=
void release();
}}
{{dcl end}}

Releases all memory owned by this resource by calling the {{tt|deallocate}} function of the upstream memory resource as needed.

Memory is released back to the upstream resource even if {{tt|deallocate}} has not been called for some of the allocated blocks.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/memory_resource/dsc deallocate}}
{{dsc end}}</text>
      <sha1>3vb8d95oq9q0gfzvhari839mwbr3os4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/unsynchronized pool resource</title>
    <ns>0</ns>
    <id>14960</id>
    <revision>
      <id>84310</id>
      <timestamp>2016-03-17T14:06:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1745">{{cpp/memory/unsynchronized_pool_resource/title|unsynchronized_pool_resource}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | num= 1| 1=
unsynchronized_pool_resource();
}}
{{dcl|since=c++17 | num= 2| 1=
explicit unsynchronized_pool_resource(std::pmr::memory_resource* upstream);
}}
{{dcl|since=c++17 | num= 3| 1=
explicit unsynchronized_pool_resource(const std::pmr::pool_options&amp; opts);
}}
{{dcl|since=c++17 | num= 4| 1=
unsynchronized_pool_resource(const std::pmr::pool_options&amp; opts,
                           std::pmr::memory_resource* upstream);
}}
{{dcl|since=c++17 | num= 5| 1=
unsynchronized_pool_resource(const unsynchronized_pool_resource&amp;) = delete;
}}
{{dcl end}}

Constructs a {{tt|unsynchronized_pool_resource}}.

@1-4@ Constructs a {{tt|unsynchronized_pool_resource}} using the specified upstream memory resource and tuned according to the specified options. The resulting object holds a copy of {{tt|upstream}} but does not own the resource to which {{tt|upstream}} points.
&lt;br /&gt; The overloads not taking {{tt|opts}} as a parameter uses a default constructed instance of {{ltt|cpp/memory/pool_options}} as the options. The overloads not taking {{tt|upstream}} as a parameter uses the return value of {{c|std::pmr::get_default_resource()}} as the upstream memory resource.

@5@ Copy constructor is deleted.

=== Parameters ===

{{par begin}}
{{par | opts | a {{lc|std::pmr::pool_options}} struct containing the constructor options }}
{{par | upstream | the upstream memory resource to use }}
{{par end}}

=== Exceptions ===

@1-4@ Throws only if a call to the {{tt|allocate()}} function of the upstream resource throws. It is unspecified if or under what conditions such a call takes place.</text>
      <sha1>4q913sx1eu6e4xxkm07uw4r5eqw4tdw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/upstream resource</title>
    <ns>0</ns>
    <id>14963</id>
    <revision>
      <id>84313</id>
      <timestamp>2016-03-17T14:08:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="485">{{cpp/memory/unsynchronized_pool_resource/title|upstream_resource}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17 | 1=
std::pmr::memory_resource* upstream_resource() const;
}}
{{dcl end}}

Returns a pointer to the upstream memory resource. This is the same value as the {{tt|upstream}} argument passed to the constructor of this object.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/unsynchronized_pool_resource/dsc constructor}}
{{dsc end}}</text>
      <sha1>5u2foosozsjt5oygpeiibrnr2qm1jse</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/unsynchronized pool resource/~unsynchronized pool resource</title>
    <ns>0</ns>
    <id>14961</id>
    <revision>
      <id>84311</id>
      <timestamp>2016-03-17T14:07:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="460">{{cpp/memory/unsynchronized_pool_resource/title|~unsynchronized_pool_resource}}
{{cpp/memory/unsynchronized_pool_resource/navbar}}
{{dcl begin}}
{{dcl|since=c++17| 1=
virtual ~unsynchronized_pool_resource();
}}
{{dcl end}}

Destroys a {{tt|unsynchronized_pool_resource}}.

Deallocates all memory owned by this resource by calling {{c|this-&gt;release()}}.

=== See also ===
{{dsc begin}}
{{dsc inc|cpp/memory/unsynchronized_pool_resource/dsc release}}
{{dsc end}}</text>
      <sha1>gp52ddg8njhjgaos8g92l02ipjf140w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/uses allocator</title>
    <ns>0</ns>
    <id>3390</id>
    <revision>
      <id>90947</id>
      <parentid>90052</parentid>
      <timestamp>2017-03-14T12:53:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Helper variable template */ inline</comment>
      <text xml:space="preserve" bytes="2740">{{cpp/title|uses_allocator}}
{{cpp/memory/navbar}}
{{dcl begin}}
{{dcl header | memory}}
{{dcl | since=c++11 | 1=
template&lt; class T, class Alloc &gt; struct uses_allocator;
}}
{{dcl end}}

If {{tt|T}} has a member typedef {{tt|allocator_type}} which is convertible from {{tt|Alloc}} {{rev inl|since=libfund_ts|or is an alias of {{lc|std::experimental::erased_type}}}}, the member constant {{tt|value}} is {{c|true}}. Otherwise {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T, class Alloc &gt;
inline constexpr bool uses_allocator_v = uses_allocator&lt;T, Alloc&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} uses allocator {{tt|Alloc}}}}

===Specializations===

Custom specializations of the type trait {{lc|std::uses_allocator}} are allowed for types that do not have the member typedef {{tt|allocator_type}} but satisfy one of the following two requirements:

@1@{{tt|T}} has a constructor which takes {{lc|std::allocator_arg_t}} as the first argument, and {{tt|Alloc}} as the second argument.
@2@{{tt|T}} has a constructor which takes {{tt|Alloc}} as the last argument.

In the above, {{tt|Alloc}} is a type that satisfies {{concept|Allocator}} {{rev inl|since=libfund_ts|or is a pointer type convertible to {{lc|std::experimental::pmr::memory_resource*}}}}.

The following specializations are already provided by the standard library:

{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc uses_allocator}}
{{dsc inc | cpp/utility/variant/dsc uses_allocator}}
{{dsc inc | cpp/container/dsc uses_allocator | queue}}
{{dsc inc | cpp/container/dsc uses_allocator | priority_queue}}
{{dsc inc | cpp/container/dsc uses_allocator | stack}}
{{dsc inc | cpp/utility/functional/function/dsc uses_allocator}}
{{dsc inc | cpp/thread/promise/dsc uses_allocator}}
{{dsc inc | cpp/thread/packaged_task/dsc uses_allocator}}
{{dsc end}}

===Notes===

This type trait is used by {{lc|std::scoped_allocator_adaptor}}, {{lc|std::tuple}}, {{lc|std::variant}}, and {{lc|std::pmr::polymorphic_allocator}}. It may also be used by custom allocators or wrapper types to determine whether the object or member being constructed is itself capable of using an allocator (e.g. is a container), in which case an allocator should be passed to its constructor.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator_arg}}
{{dsc inc | cpp/memory/dsc allocator_arg_t}}
{{dsc inc | cpp/memory/dsc scoped_allocator_adaptor}}
{{dsc end}}

[[de:cpp/memory/uses allocator]]
[[es:cpp/memory/uses allocator]]
[[fr:cpp/memory/uses allocator]]
[[it:cpp/memory/uses allocator]]
[[ja:cpp/memory/uses allocator]]
[[pt:cpp/memory/uses allocator]]
[[ru:cpp/memory/uses allocator]]
[[zh:cpp/memory/uses allocator]]</text>
      <sha1>liw2qegbeafbetxube5mtwsh12kfbxz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr</title>
    <ns>0</ns>
    <id>3417</id>
    <revision>
      <id>88112</id>
      <parentid>88111</parentid>
      <timestamp>2016-11-02T16:52:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>updated output to match example</comment>
      <text xml:space="preserve" bytes="2547">{{cpp/title|weak_ptr}}
{{cpp/memory/weak_ptr/navbar}}
{{ddcl | header=memory | since=c++11 | 1=
template&lt; class T &gt; class weak_ptr;
}}

{{tt|std::weak_ptr}} is a smart pointer that holds a non-owning (&quot;weak&quot;) reference to an object that is managed by {{lc|std::shared_ptr}}. It must be converted to {{lc|std::shared_ptr}} in order to access the referenced object.

{{lc|std::weak_ptr}} models temporary ownership: when an object needs to be accessed only if it exists, and it may be deleted at any time by someone else, {{lc|std::weak_ptr}} is used to track the object, and it is converted to {{lc|std::shared_ptr}} to assume temporary ownership. If the original {{lc|std::shared_ptr}} is destroyed at this time, the object's lifetime is extended until the temporary {{lc|std::shared_ptr}} is destroyed as well.

In addition, {{lc|std::weak_ptr}} is used to break circular references of {{lc|std::shared_ptr}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{c|element_type}} | {{rev begin}}
{{rev|until=c++17|{{c|T}}}}
{{rev|since=c++17|{{c|std::remove_extent_t&lt;T&gt;}}}}
{{rev end}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc constructor}}
{{dsc inc | cpp/memory/weak_ptr/dsc destructor}}
{{dsc inc | cpp/memory/weak_ptr/dsc operator{{=}}}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/memory/weak_ptr/dsc reset}}
{{dsc inc | cpp/memory/weak_ptr/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/memory/weak_ptr/dsc use_count}}
{{dsc inc | cpp/memory/weak_ptr/dsc expired}}
{{dsc inc | cpp/memory/weak_ptr/dsc lock}}
{{dsc inc | cpp/memory/weak_ptr/dsc owner_before}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc swap2}}
{{dsc end}}

===Example===
{{example
 | Demonstrates how lock is used to ensure validity of the pointer.
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

std::weak_ptr&lt;int&gt; gw;

void f()
{
    std::cout &lt;&lt; &quot;use_count == &quot; &lt;&lt; gw.use_count() &lt;&lt; &quot;: &quot;;
    if (auto spt = gw.lock()) { // Has to be copied into a shared_ptr before usage
	std::cout &lt;&lt; *spt &lt;&lt; &quot;\n&quot;;
    }
    else {
        std::cout &lt;&lt; &quot;gw is expired\n&quot;;
    }
}
 
int main()
{
    {
        auto sp = std::make_shared&lt;int&gt;(42);
	gw = sp;

	f();
    }

    f();
}
 | output=
use_count == 1: 42
use_count == 0: gw is expired
}}

[[de:cpp/memory/weak ptr]]
[[es:cpp/memory/weak ptr]]
[[fr:cpp/memory/weak ptr]]
[[it:cpp/memory/weak ptr]]
[[ja:cpp/memory/weak ptr]]
[[pt:cpp/memory/weak ptr]]
[[ru:cpp/memory/weak ptr]]
[[zh:cpp/memory/weak ptr]]</text>
      <sha1>pvw7dgs8j9z4o322i3ossbz9i2wzm7p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/expired</title>
    <ns>0</ns>
    <id>5699</id>
    <revision>
      <id>91474</id>
      <parentid>90249</parentid>
      <timestamp>2017-03-31T19:46:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1435">{{cpp/memory/weak_ptr/title | expired}}
{{cpp/memory/weak_ptr/navbar}}
{{ddcl | since=c++11 |
bool expired() const;
}}

Checks whether the managed object has already been deleted. Equivalent to {{c|1=use_count() == 0}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the managed object has already been deleted, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
This function is inherently racy if the managed object is shared among threads.  In particular, a false result may become stale before it can be used. A true result is reliable.

===Example===
{{example
 | Demonstrates how expired is used to check validity of the pointer.
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

std::weak_ptr&lt;int&gt; gw;

void f()
{
    if (!gw.expired()) {
	std::cout &lt;&lt; &quot;gw is valid\n&quot;;
    }
    else {
        std::cout &lt;&lt; &quot;gw is expired\n&quot;;
    }
}
 
int main()
{
    {
        auto sp = std::make_shared&lt;int&gt;(42);
	gw = sp;

	f();
    }

    f();
}
 | output=
gw is valid
gw is expired
}}



===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc lock}}
{{dsc inc | cpp/memory/weak_ptr/dsc use_count}}
{{dsc end}}

[[de:cpp/memory/weak ptr/expired]]
[[es:cpp/memory/weak ptr/expired]]
[[fr:cpp/memory/weak ptr/expired]]
[[it:cpp/memory/weak ptr/expired]]
[[ja:cpp/memory/weak ptr/expired]]
[[pt:cpp/memory/weak ptr/expired]]
[[ru:cpp/memory/weak ptr/expired]]
[[zh:cpp/memory/weak ptr/expired]]</text>
      <sha1>dgfkk7fi9qklbz57yoow0k0vpcg49op</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/lock</title>
    <ns>0</ns>
    <id>5698</id>
    <revision>
      <id>91863</id>
      <parentid>85831</parentid>
      <timestamp>2017-03-31T20:00:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2653">{{cpp/memory/weak_ptr/title | lock}}
{{cpp/memory/weak_ptr/navbar}}
{{ddcl | since=c++11 |
std::shared_ptr&lt;T&gt; lock() const;
}}

Creates a new {{lc|std::shared_ptr}} that shares ownership of the managed object. If there is no managed object, i.e. {{c|*this}} is empty, then the returned {{tt|shared_ptr}} also is empty.

Effectively returns {{c|expired() ? shared_ptr&lt;T&gt;() : shared_ptr&lt;T&gt;(*this)}}, executed atomically.

===Parameters===
(none)

===Return value===
A {{tt|shared_ptr}} which shares ownership of the owned object if {{lc|std::weak_ptr::expired}} returns {{tt|false}}. Else returns default-constructed {{tt|shared_ptr}} of type T.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Both this function and the constructor of {{lc|std::shared_ptr}} may be used to acquire temporary ownership of the managed object referred to by a {{tt|std::weak_ptr}}. The difference is that the constructor of {{lc|std::shared_ptr}} throws an exception when its {{tt|std::weak_ptr}} argument is empty, while {{lc|std::weak_ptr&lt;T&gt;::lock()}} constructs an empty {{lc|std::shared_ptr&lt;T&gt;}}.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;

void observe(std::weak_ptr&lt;int&gt; weak) 
{
    if (auto observe = weak.lock()) {
        std::cout &lt;&lt; &quot;\tobserve() able to lock weak_ptr&lt;&gt;, value=&quot; &lt;&lt; *observe &lt;&lt; &quot;\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;\tobserve() unable to lock weak_ptr&lt;&gt;\n&quot;;
    }
}

int main()
{
    std::weak_ptr&lt;int&gt; weak;
    std::cout &lt;&lt; &quot;weak_ptr&lt;&gt; not yet initialized\n&quot;;
    observe(weak);
    
    {
        auto shared = std::make_shared&lt;int&gt;(42);
        weak = shared;
        std::cout &lt;&lt; &quot;weak_ptr&lt;&gt; initialized with shared_ptr.\n&quot;;
        observe(weak);
    }

    std::cout &lt;&lt; &quot;shared_ptr&lt;&gt; has been destructed due to scope exit.\n&quot;;
    observe(weak);
}
 | output=
weak_ptr&lt;&gt; not yet initialized
        observe() unable to lock weak_ptr&lt;&gt;
weak_ptr&lt;&gt; initialized with shared_ptr.
        observe() able to lock weak_ptr&lt;&gt;, value=42
shared_ptr&lt;&gt; has been destructed due to scope exit.
        observe() unable to lock weak_ptr&lt;&gt;
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2316|std=C++11|before=lock() was not required to be atomic, but required to be noexcept, which led to a contradiction|after=specified to be atomic}}
{{dr list end}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc expired}}
{{dsc end}}

[[de:cpp/memory/weak ptr/lock]]
[[es:cpp/memory/weak ptr/lock]]
[[fr:cpp/memory/weak ptr/lock]]
[[it:cpp/memory/weak ptr/lock]]
[[ja:cpp/memory/weak ptr/lock]]
[[pt:cpp/memory/weak ptr/lock]]
[[ru:cpp/memory/weak ptr/lock]]
[[zh:cpp/memory/weak ptr/lock]]</text>
      <sha1>kjgocq5jfwqn32qxdha3r87p3bx217o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/operator=</title>
    <ns>0</ns>
    <id>5703</id>
    <revision>
      <id>91702</id>
      <parentid>83947</parentid>
      <timestamp>2017-03-31T19:55:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1559">{{cpp/memory/weak_ptr/title | operator{{=}}}}
{{cpp/memory/weak_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |1=
weak_ptr&amp; operator=( const weak_ptr&amp; r );
}}
{{dcl | num=2 | since=c++11 |1=
template&lt; class Y &gt; 
weak_ptr&amp; operator=( const weak_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=3 | since=c++11 |1=
template&lt; class Y &gt; 
weak_ptr&amp; operator=( const shared_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=4 | since=c++14 |1=
weak_ptr&amp; operator=( weak_ptr&amp;&amp; r );
}}
{{dcl | num=5 | since=c++14 |1=
template&lt; class Y &gt; 
weak_ptr&amp; operator=( weak_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl end}}

Replaces the managed object with the one managed by {{tt|r}}. The object is shared with {{tt|r}}. If {{tt|r}} manages no object, {{c|*this}} manages no object too. 

@1-3@ Equivalent to {{c|std::weak_ptr&lt;T&gt;(r).swap(*this)}}.
@4,5@ Equivalent to {{c|std::weak_ptr&lt;T&gt;(std::move(r)).swap(*this)}}.

===Parameters===
{{par begin}}
{{par | r | smart pointer to share an object with}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The implementation may meet the requirements without creating a temporary {{tt|weak_ptr}} object.

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc constructor}}
{{dsc inc | cpp/memory/weak_ptr/dsc swap}}
{{dsc end}}
[[de:cpp/memory/weak ptr/operator=]]
[[es:cpp/memory/weak ptr/operator=]]
[[fr:cpp/memory/weak ptr/operator=]]
[[it:cpp/memory/weak ptr/operator=]]
[[ja:cpp/memory/weak ptr/operator=]]
[[pt:cpp/memory/weak ptr/operator=]]
[[ru:cpp/memory/weak ptr/operator=]]
[[zh:cpp/memory/weak ptr/operator=]]</text>
      <sha1>0rqj5ipm6zg4j6duq6bte16ld8a9e9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/owner before</title>
    <ns>0</ns>
    <id>5696</id>
    <revision>
      <id>41996</id>
      <parentid>20930</parentid>
      <timestamp>2012-11-02T21:41:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="357">{{cpp/memory/owner_before|weak_ptr}}

[[de:cpp/memory/weak ptr/owner before]]
[[es:cpp/memory/weak ptr/owner before]]
[[fr:cpp/memory/weak ptr/owner before]]
[[it:cpp/memory/weak ptr/owner before]]
[[ja:cpp/memory/weak ptr/owner before]]
[[pt:cpp/memory/weak ptr/owner before]]
[[ru:cpp/memory/weak ptr/owner before]]
[[zh:cpp/memory/weak ptr/owner before]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/reset</title>
    <ns>0</ns>
    <id>5702</id>
    <revision>
      <id>91457</id>
      <parentid>63356</parentid>
      <timestamp>2017-03-31T19:45:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="564">{{cpp/memory/weak_ptr/title | reset}}
{{cpp/memory/weak_ptr/navbar}}
{{ddcl | since=c++11 | 1= 
void reset();
}}

Releases the reference to the managed object. After the call {{c|*this}} manages no object.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/memory/weak ptr/reset]]
[[es:cpp/memory/weak ptr/reset]]
[[fr:cpp/memory/weak ptr/reset]]
[[it:cpp/memory/weak ptr/reset]]
[[ja:cpp/memory/weak ptr/reset]]
[[pt:cpp/memory/weak ptr/reset]]
[[ru:cpp/memory/weak ptr/reset]]
[[zh:cpp/memory/weak ptr/reset]]</text>
      <sha1>o8vbaj6frzxreo52mu9fa8oehc8an85</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/swap</title>
    <ns>0</ns>
    <id>5701</id>
    <revision>
      <id>91449</id>
      <parentid>64851</parentid>
      <timestamp>2017-03-31T19:44:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="600">{{cpp/memory/weak_ptr/title | swap}}
{{cpp/memory/weak_ptr/navbar}}
{{ddcl | since=c++11 |
void swap( weak_ptr&amp; r );
}}

Exchanges the contents of {{c|*this}} and {{tt|r}}

===Parameters===
{{par begin}}
{{par | r | smart pointer to exchange the contents with}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/memory/weak ptr/swap]]
[[es:cpp/memory/weak ptr/swap]]
[[fr:cpp/memory/weak ptr/swap]]
[[it:cpp/memory/weak ptr/swap]]
[[ja:cpp/memory/weak ptr/swap]]
[[pt:cpp/memory/weak ptr/swap]]
[[ru:cpp/memory/weak ptr/swap]]
[[zh:cpp/memory/weak ptr/swap]]</text>
      <sha1>kccpe3oa4h8eyunraxwx9mahw89e6rs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/swap2</title>
    <ns>0</ns>
    <id>5304</id>
    <revision>
      <id>41975</id>
      <parentid>19312</parentid>
      <timestamp>2012-11-02T21:36:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="294">{{cpp/memory/swap2|weak_ptr}}

[[de:cpp/memory/weak ptr/swap2]]
[[es:cpp/memory/weak ptr/swap2]]
[[fr:cpp/memory/weak ptr/swap2]]
[[it:cpp/memory/weak ptr/swap2]]
[[ja:cpp/memory/weak ptr/swap2]]
[[pt:cpp/memory/weak ptr/swap2]]
[[ru:cpp/memory/weak ptr/swap2]]
[[zh:cpp/memory/weak ptr/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/use count</title>
    <ns>0</ns>
    <id>5700</id>
    <revision>
      <id>91904</id>
      <parentid>90250</parentid>
      <timestamp>2017-03-31T20:01:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1332">{{cpp/memory/weak_ptr/title | use_count}}
{{cpp/memory/weak_ptr/navbar}}
{{ddcl | since=c++11 |
long use_count() const;
}}

Returns the number of {{tt|shared_ptr}} instances that share ownership of the managed object, or {{c|0}} if the managed object has already been deleted, i.e. {{c|*this}} is empty.

===Parameters===
(none)

===Return value===
The number of {{tt|shared_ptr}} instances sharing the ownership of the managed object at the instant of the call.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
{{lc|expired()}} may be faster than {{tt|use_count()}}.  This function is inherently racy, if the managed object is shared among threads that might be creating and destroying copies of the {{tt|shared_ptr}}: then, the result is reliable only if it matches the number of copies uniquely owned by the calling thread, or zero; any other value may become stale before it can be used.

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc expired}}
{{dsc end}}

[[de:cpp/memory/weak ptr/use count]]
[[es:cpp/memory/weak ptr/use count]]
[[fr:cpp/memory/weak ptr/use count]]
[[it:cpp/memory/weak ptr/use count]]
[[ja:cpp/memory/weak ptr/use count]]
[[pt:cpp/memory/weak ptr/use count]]
[[ru:cpp/memory/weak ptr/use count]]
[[zh:cpp/memory/weak ptr/use count]]</text>
      <sha1>pjxycyb61uyzev392fwbh88kkzx6y5j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/weak ptr</title>
    <ns>0</ns>
    <id>5659</id>
    <revision>
      <id>91539</id>
      <parentid>86083</parentid>
      <timestamp>2017-03-31T19:49:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2947">{{cpp/memory/weak_ptr/title | weak_ptr}}
{{cpp/memory/weak_ptr/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
constexpr weak_ptr();
}}
{{dcl | num=2 | since=c++11 | 1= 
weak_ptr( const weak_ptr&amp; r );
}}
{{dcl | num=2 | since=c++11 | 1= 
template&lt; class Y &gt; 
weak_ptr( const weak_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=2 | since=c++11 | 1= 
template&lt; class Y &gt; 
weak_ptr( const std::shared_ptr&lt;Y&gt;&amp; r );
}}
{{dcl | num=3 | since=c++14 | 1= 
weak_ptr( weak_ptr&amp;&amp; r );
}}
{{dcl | num=3 | since=c++14 | 1= 
template&lt; class Y &gt; 
weak_ptr( weak_ptr&lt;Y&gt;&amp;&amp; r );
}}
{{dcl end}}

Constructs new {{tt|weak_ptr}} that potentially shares an object with {{tt|r}}.

@1@ Default constructor. Constructs empty {{tt|weak_ptr}}.
@2@ Constructs new {{tt|weak_ptr}} which shares an object managed by {{tt|r}}. If {{tt|r}} manages no object, {{c|*this}} manages no object too. The templated overloads don't participate in the overload resolution unless {{tt|Y*}} is implicitly convertible to {{tt|T*}} {{rev inl|since=c++17|, or {{tt|Y}} is the type &quot;array of {{tt|N}} {{tt|U}}&quot; for some type {{tt|U}} and some number {{tt|N}}, and {{tt|T}} is the type &quot;array of unknown bound of (possibly cv-qualified) {{tt|U}}&quot;.}}
@3@ Move constructors. Moves a weak_ptr instance from {{tt|r}} into {{tt|*this}}. After this, {{tt|r}} is empty and {{c|1=r.use_count()==0}}. The templated overload doesn't participate in the overload resolution unless {{tt|Y*}} is implicitly convertible to {{tt|T*}}

===Parameters===
{{par begin}}
{{par | r | a {{lc|std::shared_ptr}} or {{lc|std::weak_ptr}} that will be viewed by this {{lc|std::weak_ptr}}}}
{{par end}} 

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Because the default constructor is {{tt|constexpr}}, static weak_ptrs are initialized as part of [[cpp/language/initialization#Non-local_variables|static non-local initialization]], before any dynamic non-local initialization begins. This makes it safe to use a weak_ptr in a constructor of any static object.

===Example===
{{example
 | code=
#include &lt;memory&gt;
#include &lt;iostream&gt;

struct Foo {};

int main()
{
   std::weak_ptr&lt;Foo&gt; w_ptr;

   {
      auto ptr = std::make_shared&lt;Foo&gt;();
      w_ptr = ptr;
      std::cout &lt;&lt; &quot;w_ptr.use_count() inside scope: &quot; &lt;&lt; w_ptr.use_count() &lt;&lt; '\n';
   }

   std::cout &lt;&lt; &quot;w_ptr.use_count() out of scope: &quot; &lt;&lt; w_ptr.use_count() &lt;&lt; '\n';
   std::cout &lt;&lt; &quot;w_ptr.expired() out of scope: &quot; &lt;&lt; std::boolalpha &lt;&lt; w_ptr.expired() &lt;&lt; '\n';
}
 | output=
w_ptr.use_count() inside scope: 1
w_ptr.use_count() out of scope: 0
w_ptr.expired() out of scope: true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/weak_ptr/dsc operator{{=}}}}
{{dsc end}}

[[de:cpp/memory/weak ptr/weak ptr]]
[[es:cpp/memory/weak ptr/weak ptr]]
[[fr:cpp/memory/weak ptr/weak ptr]]
[[it:cpp/memory/weak ptr/weak ptr]]
[[ja:cpp/memory/weak ptr/weak ptr]]
[[pt:cpp/memory/weak ptr/weak ptr]]
[[ru:cpp/memory/weak ptr/weak ptr]]
[[zh:cpp/memory/weak ptr/weak ptr]]</text>
      <sha1>2gk59xa7b9437tl2jl8s8dkz7rgevt5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/memory/weak ptr/~weak ptr</title>
    <ns>0</ns>
    <id>5695</id>
    <revision>
      <id>63358</id>
      <parentid>41961</parentid>
      <timestamp>2013-07-10T01:29:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="490">{{cpp/memory/weak_ptr/title | ~weak_ptr}}
{{cpp/memory/weak_ptr/navbar}}
{{ddcl | since=c++11 |
~weak_ptr();
}}

Destroys the {{tt|weak_ptr}} object. Results in no effect to the managed object.

[[de:cpp/memory/weak ptr/~weak ptr]]
[[es:cpp/memory/weak ptr/~weak ptr]]
[[fr:cpp/memory/weak ptr/~weak ptr]]
[[it:cpp/memory/weak ptr/~weak ptr]]
[[ja:cpp/memory/weak ptr/~weak ptr]]
[[pt:cpp/memory/weak ptr/~weak ptr]]
[[ru:cpp/memory/weak ptr/~weak ptr]]
[[zh:cpp/memory/weak ptr/~weak ptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric</title>
    <ns>0</ns>
    <id>1332</id>
    <revision>
      <id>90467</id>
      <parentid>90025</parentid>
      <timestamp>2017-02-24T08:50:06Z</timestamp>
      <contributor>
        <ip>113.88.80.118</ip>
      </contributor>
      <text xml:space="preserve" bytes="2874">{{title|Numerics library}}
{{cpp/numeric/navbar}}

The C++ numerics library includes common mathematical functions and types, as well as optimized numeric arrays and support for random number generation.

==Mathematical functions and types==

===[[cpp/numeric/math|Common mathematical functions]]===

The header {{tt|cmath}} provides [[cpp/numeric/math|standard C library mathematical functions]] such as {{lc|std::fabs}}, {{lc|std::sqrt}}, and {{lc|std::sin}}.

{{rev begin}}
{{rev|since=c++17|
===[[cpp/numeric/special_math|Mathematical special functions]]===

The header {{tt|cmath}} also provides several mathematical special functions such as {{lc|std::beta}}, {{lc|std::hermite}}, and {{lc|std::cyl_bessel_i}}.
}}
{{rev end}}

===Complex number arithmetic===

{{dsc begin}}
{{dsc header | complex}}
{{dsc tclass | cpp/numeric/complex | a complex number type }}
{{dsc end}}

===Numeric arrays===

{{dsc begin}}
{{dsc header | valarray}}
{{dsc tclass | cpp/numeric/valarray | numeric arrays, array masks and array slices }}
{{dsc end}}

==Numeric algorithms==

The header {{tt|numeric}} provides numeric algorithms below:

===Factor operations===

{{dsc begin}}
{{dsc header | numeric}}
{{dsc inc | cpp/numeric/dsc gcd}}
{{dsc inc | cpp/numeric/dsc lcm}}
{{dsc end}}

===Numeric operations===

{{dsc begin}}
{{dsc header | numeric}}
{{dsc inc | cpp/algorithm/dsc iota}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc inc | cpp/algorithm/dsc reduce}}
{{dsc inc | cpp/algorithm/dsc transform_reduce}}
{{dsc inc | cpp/algorithm/dsc inner_product}}
{{dsc inc | cpp/algorithm/dsc adjacent_difference}}
{{dsc inc | cpp/algorithm/dsc partial_sum}}
{{dsc inc | cpp/algorithm/dsc inclusive_scan}}
{{dsc inc | cpp/algorithm/dsc exclusive_scan}}
{{dsc inc | cpp/algorithm/dsc transform_inclusive_scan}}
{{dsc inc | cpp/algorithm/dsc transform_exclusive_scan}}
{{dsc end}}

==Miscellanous==

===[[cpp/numeric/random|Pseudo-random number generation]]===

The header {{tt|random}} defines [[cpp/numeric/random|pseudo-random number generators and numerical distributions]]. The header {{tt|cstdlib}} also includes C-style random number generation via {{lc|std::srand}} and {{lc|std::rand}}.

===[[cpp/numeric/ratio|Compile time rational arithmetic]] {{mark since c++11}}===

The header {{tt|ratio}} provides [[cpp/numeric/ratio|types and functions for manipulating and storing compile-time ratios]].

===[[cpp/numeric/fenv|Floating-point environment]]{{mark since c++11}}===

The header {{tt|cfenv}} defines [[cpp/numeric/fenv|flags and functions related to exceptional floating-point state]], such as overflow and division by zero.

===See also===
{{dsc begin}}
{{dsc see c | c/numeric | Numerics}}
{{dsc end}}

[[ar:cpp/numeric]]
[[de:cpp/numeric]]
[[es:cpp/numeric]]
[[fr:cpp/numeric]]
[[it:cpp/numeric]]
[[ja:cpp/numeric]]
[[pt:cpp/numeric]]
[[ru:cpp/numeric]]
[[zh:cpp/numeric]]</text>
      <sha1>hh882vp1mp7hm9dif6rrw5aq0vit1s4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex</title>
    <ns>0</ns>
    <id>2707</id>
    <revision>
      <id>86904</id>
      <parentid>85087</parentid>
      <timestamp>2016-07-14T15:50:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>extended binary layout note to mention C</comment>
      <text xml:space="preserve" bytes="4974">{{cpp/title|complex}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | num=1 | 1=
template&lt; class T &gt;
class complex;
}}
{{dcl | num=2| 1=
template&lt;&gt; class complex&lt;float&gt;;
}}
{{dcl | num=3| 1=
template&lt;&gt; class complex&lt;double&gt;;
}}
{{dcl | num=4| 1=
template&lt;&gt; class complex&lt;long double&gt;;
}}
{{dcl end}}

The specializations {{c|std::complex&lt;float&gt;}}, {{c|std::complex&lt;double&gt;}}, and {{c|std::complex&lt;long double&gt;}} are {{concept|LiteralType}}s for representing and manipulating [[enwiki:Complex_number|complex numbers]]. 

The effect of instantiating the template {{tt|complex}} for any other type is unspecified.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc complex}}
{{dsc inc | cpp/numeric/complex/dsc operator{{=}}}}
{{dsc inc | cpp/numeric/complex/dsc real}}
{{dsc inc | cpp/numeric/complex/dsc imag}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith2}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith3}}
{{dsc inc | cpp/numeric/complex/dsc operator_cmp}}
{{dsc inc | cpp/numeric/complex/dsc operator_ltltgtgt}}
{{dsc inc | cpp/numeric/complex/dsc real2}}
{{dsc inc | cpp/numeric/complex/dsc imag2}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/complex/dsc arg}}
{{dsc inc | cpp/numeric/complex/dsc norm}}
{{dsc inc | cpp/numeric/complex/dsc conj}}
{{dsc inc | cpp/numeric/complex/dsc proj}}
{{dsc inc | cpp/numeric/complex/dsc polar}}

{{dsc h2 | Exponential functions}}
{{dsc inc | cpp/numeric/complex/dsc exp}}
{{dsc inc | cpp/numeric/complex/dsc log}}
{{dsc inc | cpp/numeric/complex/dsc log10}}

{{dsc h2 | Power functions}}
{{dsc inc | cpp/numeric/complex/dsc pow}}
{{dsc inc | cpp/numeric/complex/dsc sqrt}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | cpp/numeric/complex/dsc sin}}
{{dsc inc | cpp/numeric/complex/dsc cos}}
{{dsc inc | cpp/numeric/complex/dsc tan}}
{{dsc inc | cpp/numeric/complex/dsc asin}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc inc | cpp/numeric/complex/dsc atan}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | cpp/numeric/complex/dsc sinh}}
{{dsc inc | cpp/numeric/complex/dsc cosh}}
{{dsc inc | cpp/numeric/complex/dsc tanh}}
{{dsc inc | cpp/numeric/complex/dsc asinh}}
{{dsc inc | cpp/numeric/complex/dsc acosh}}
{{dsc inc | cpp/numeric/complex/dsc atanh}}
{{dsc end}}

===Non-static data members===
{{rev begin}}
{{rev|since=c++11|
For any object {{tt|z}} of type {{tt|complex&lt;T&gt;}}, {{c|reinterpret_cast&lt;T(&amp;)[2]&gt;(z)[0]}} is the real part of z and {{c|reinterpret_cast&lt;T(&amp;)[2]&gt;(z)[1]}} is the imaginary part of z.

For any pointer to an element of an array of {{tt|complex&lt;T&gt;}} named {{tt|p}} and any valid array index {{c|i}}, {{c|reinterpret_cast&lt;T*&gt;(p)[2*i]}} is the real part of the complex number {{c|p[i]}}, and {{c|reinterpret_cast&lt;T*&gt;(p)[2*i + 1]}} is the imaginary part of the complex number {{c|p[i]}}

These requirements essentially limit implementation of each of the three specializations of {{lc|std::complex}} to declaring two and only two non-static data members, of type {{tt|value_type}}, with the same member access, which hold the real and the imaginary components, respectively.

The intent of this requirement is to preserve binary compatibility between the C++ library complex number types and the [[c/language/arithmetic_types#Complex_floating_types|C language complex number types]] (and arrays thereof), which have an identical object representation requirement.
}}
{{rev end}}

===Literals===
{{dsc begin}}
{{dsc namespace | std::literals::complex_literals | inline=true }}
{{dsc inc | cpp/numeric/dsc operator&quot;&quot;i}}
{{dsc end}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;complex&gt;
#include &lt;cmath&gt;

int main()
{
    using namespace std::complex_literals;
    std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(1);
    
    std::complex&lt;double&gt; z1 = 1i * 1i;     // imaginary unit squared
    std::cout &lt;&lt; &quot;i * i = &quot; &lt;&lt; z1 &lt;&lt; '\n';

    std::complex&lt;double&gt; z2 = std::pow(1i, 2); // imaginary unit squared
    std::cout &lt;&lt; &quot;pow(i, 2) = &quot; &lt;&lt; z2 &lt;&lt; '\n';

    double PI = std::acos(-1);
    std::complex&lt;double&gt; z3 = std::exp(1i * PI); // Euler's formula
    std::cout &lt;&lt; &quot;exp(i * pi) = &quot; &lt;&lt; z3 &lt;&lt; '\n';

    std::complex&lt;double&gt; z4 = 1. + 2i, z5 = 1. - 2i; // conjugates
    std::cout &lt;&lt; &quot;(1+2i)*(1-2i) = &quot; &lt;&lt; z4*z5 &lt;&lt; '\n';
}
|output=
i * i = (-1.0,0.0)
pow(i, 2) = (-1.0,0.0)
exp(i * pi) = (-1.0,0.0)
(1+2i)*(1-2i) = (5.0,0.0)
}}
===See also===
{{dsc begin}}
{{dsc see c | c/numeric/complex | Complex number arithmetic}}
{{dsc end}}

[[de:cpp/numeric/complex]]
[[es:cpp/numeric/complex]]
[[fr:cpp/numeric/complex]]
[[it:cpp/numeric/complex]]
[[ja:cpp/numeric/complex]]
[[pt:cpp/numeric/complex]]
[[ru:cpp/numeric/complex]]
[[zh:cpp/numeric/complex]]</text>
      <sha1>119xjpf6f31nxlsdh1x20huvr53eiuh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/abs</title>
    <ns>0</ns>
    <id>8523</id>
    <revision>
      <id>73564</id>
      <parentid>71278</parentid>
      <timestamp>2014-11-05T20:04:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail,example</comment>
      <text xml:space="preserve" bytes="1415">{{cpp/title|abs{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
T abs( const complex&lt;T&gt;&amp; z );
}}

Returns the magnitude of the complex number {{tt|z}}.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
If no errors occur, returns the absolute value (also known as norm, modulus, or magnitude) of {{tt|z}}.

Errors and special cases are handled as if the function is implemented as {{c|std::hypot(std::real(z), std::imag(z))}}

===Examples===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::complex&lt;double&gt; z(1, 1);
    std::cout &lt;&lt; z &lt;&lt; &quot; cartesian is rho = &quot; &lt;&lt; std::abs(z)
              &lt;&lt; &quot; theta = &quot; &lt;&lt; std::arg(z) &lt;&lt; &quot; polar\n&quot;;
}
|output=
(1,1) cartesian is rho = 1.41421 theta = 0.785398 polar
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc arg}}
{{dsc inc | cpp/numeric/complex/dsc polar}}
{{dsc inc | cpp/numeric/math/dsc abs}}
{{dsc inc | cpp/numeric/math/dsc fabs}}
{{dsc inc | cpp/numeric/math/dsc hypot}}
{{dsc inc | cpp/numeric/valarray/dsc abs}}
{{dsc see c | c/numeric/complex/cabs}}
{{dsc end}}

[[de:cpp/numeric/complex/abs]]
[[es:cpp/numeric/complex/abs]]
[[fr:cpp/numeric/complex/abs]]
[[it:cpp/numeric/complex/abs]]
[[ja:cpp/numeric/complex/abs]]
[[pt:cpp/numeric/complex/abs]]
[[ru:cpp/numeric/complex/abs]]
[[zh:cpp/numeric/complex/abs]]</text>
      <sha1>3guvxvj3wk4x2vul07cv96iyq61ux6c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/acos</title>
    <ns>0</ns>
    <id>4072</id>
    <revision>
      <id>87705</id>
      <parentid>73364</parentid>
      <timestamp>2016-09-26T23:01:00Z</timestamp>
      <contributor>
        <ip>104.132.0.67</ip>
      </contributor>
      <comment>Fix description of acos(+/-inf + iy) to match C11 G.6.1.1</comment>
      <text xml:space="preserve" bytes="3649">{{cpp/title|acos{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; acos( const complex&lt;T&gt;&amp; z );
}}

Computes complex arc cosine of a complex value {{tt|z}}. Branch cuts exist outside the interval {{math|[−1 ; +1]}} along the real axis.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
If no errors occur, complex arc cosine of {{tt|z}} is returned, in the range {{math|[0 ; &amp;infin;)}} along the real axis and in the range {{math|[−''i''&amp;pi; ; ''i''&amp;pi;]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::acos(std::conj(z)) {{==}} std::conj(std::acos(z))}}
* If {{tt|z}} is {{tt|(±0,+0)}}, the result is {{tt|(π/2,-0)}}
* If {{tt|z}} is {{tt|(±0,NaN)}}, the result is {{tt|(π/2,NaN)}}
* If {{tt|z}} is {{tt|(x,+∞)}} (for any finite x), the result is {{tt|(π/2,-∞)}}
* If {{tt|z}} is {{tt|(x,NaN)}} (for any nonzero finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|(-∞,y)}} (for any positive finite y), the result is {{tt|(π,-∞)}}
* If {{tt|z}} is {{tt|(+∞,y)}} (for any positive finite y), the result is {{tt|(+0,-∞)}}
* If {{tt|z}} is {{tt|(-∞,+∞)}}, the result is {{tt|(3π/4,-∞)}}
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(π/4,-∞)}}
* If {{tt|z}} is {{tt|(±∞,NaN)}}, the result is {{tt|(NaN,±∞)}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|(NaN,y)}} (for any finite y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,+∞)}}, the result is {{tt|(NaN,-∞)}}
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

===Notes===
Inverse cosine (or arc cosine) is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments {{math|(-∞,-1)}} and {{math|(1,∞)}} of the real axis.

The mathematical definition of the principal value of arc cosine is {{math|acos z {{=}} {{mfrac|1|2}}π + ''i''ln(''i''z + {{mrad|1-z{{su|p=2}}}})}}

For any z, {{math|acos(z) {{=}} π - acos(-z)}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z1(-2, 0);
    std::cout &lt;&lt; &quot;acos&quot; &lt;&lt; z1 &lt;&lt; &quot; = &quot; &lt;&lt; std::acos(z1) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(-2, -0.0);
    std::cout &lt;&lt; &quot;acos&quot; &lt;&lt; z2 &lt;&lt; &quot; (the other side of the cut) = &quot;
              &lt;&lt; std::acos(z2) &lt;&lt; '\n';

    // for any z, acos(z) = pi - acos(-z)
    const double pi = std::acos(-1);
    std::complex&lt;double&gt; z3 = pi - std::acos(z2);
    std::cout &lt;&lt; &quot;cos(pi - acos&quot; &lt;&lt; z2 &lt;&lt; &quot;) = &quot; &lt;&lt; std::cos(z3) &lt;&lt; '\n';
}
|output=
acos(-2.000000,0.000000) = (3.141593,-1.316958)
acos(-2.000000,-0.000000) (the other side of the cut) = (3.141593,1.316958)
cos(pi - acos(-2.000000,-0.000000)) = (2.000000,0.000000)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc asin}}
{{dsc inc | cpp/numeric/complex/dsc atan}}
{{dsc inc | cpp/numeric/complex/dsc cos}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc see c | c/numeric/complex/cacos}}
{{dsc end}}

[[de:cpp/numeric/complex/acos]]
[[es:cpp/numeric/complex/acos]]
[[fr:cpp/numeric/complex/acos]]
[[it:cpp/numeric/complex/acos]]
[[ja:cpp/numeric/complex/acos]]
[[pt:cpp/numeric/complex/acos]]
[[ru:cpp/numeric/complex/acos]]
[[zh:cpp/numeric/complex/acos]]</text>
      <sha1>3utxpc6gvrtw4bprmy9c6hbhidituwx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/acosh</title>
    <ns>0</ns>
    <id>8519</id>
    <revision>
      <id>90166</id>
      <parentid>75458</parentid>
      <timestamp>2017-02-07T18:35:17Z</timestamp>
      <contributor>
        <ip>195.95.139.225</ip>
      </contributor>
      <text xml:space="preserve" bytes="4128">{{cpp/title|acosh{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; acosh( const complex&lt;T&gt;&amp; z );
}}

Computes complex arc hyperbolic cosine of a complex value {{tt|z}} with branch cut at values less than 1 along the real axis.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
If no errors occur, the complex arc hyperbolic cosine of {{tt|z}} is returned, in the range of a half-strip of nonnegative values along the real axis and in the interval {{math|[−iπ; +iπ]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::acosh(std::conj(z)) {{==}} std::conj(std::acosh(z))}}
* If {{tt|z}} is {{tt|(±0,+0)}}, the result is {{tt|(+0,π/2)}}
* If {{tt|z}} is {{tt|(x,+∞)}} (for any finite x), the result is {{tt|(+∞,π/2)}}
* If {{tt|z}} is {{tt|(x,NaN)}} (for any&lt;ref&gt;per [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1892.htm#dr_471 C11 DR471], this holds for non-zero x only. If {{tt|z}} is {{tt|(0,NaN)}}, the result should be {{tt|(NaN,π/2)}}&lt;/ref&gt; finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|(-∞,y)}} (for any positive finite y), the result is {{tt|(+∞,π)}}
* If {{tt|z}} is {{tt|(+∞,y)}} (for any positive finite y), the result is {{tt|(+∞,+0)}}
* If {{tt|z}} is {{tt|(-∞,+∞)}}, the result is {{tt|(+∞,3π/4)}}
* If {{tt|z}} is {{tt|(±∞,NaN)}}, the result is {{tt|(+∞,NaN)}}
* If {{tt|z}} is {{tt|(NaN,y)}} (for any finite y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|(NaN,+∞)}}, the result is {{tt|(+∞,NaN)}}
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}
&lt;references/&gt;
===Notes===
Although the C++ standard names this function &quot;complex arc hyperbolic cosine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;complex inverse hyperbolic cosine&quot;, and, less common, &quot;complex area hyperbolic cosine&quot;.

Inverse hyperbolic cosine is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segment {{math|(-∞,+1)}} of the real axis.

The mathematical definition of the principal value of the inverse hyperbolic sine is {{math|acosh z {{=}} ln(z + {{mrad|z+1}} {{mrad|z-1}})}}

For any z, {{math|acosh(z) {{=}} {{mfrac|{{mrad|z-1}}|{{mrad|1-z}}}} acos(z) }}, or simply {{math|i acos(z)}} in the upper half of the complex plane.

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z1(0.5, 0);
    std::cout &lt;&lt; &quot;acosh&quot; &lt;&lt; z1 &lt;&lt; &quot; = &quot; &lt;&lt; std::acosh(z1) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(0.5, -0.0);
    std::cout &lt;&lt; &quot;acosh&quot; &lt;&lt; z2 &lt;&lt; &quot; (the other side of the cut) = &quot;
              &lt;&lt; std::acosh(z2) &lt;&lt; '\n';

    // in upper half-plane, acosh = i acos 
    std::complex&lt;double&gt; z3(1, 1), i(0, 1);
    std::cout &lt;&lt; &quot;acosh&quot; &lt;&lt; z3 &lt;&lt; &quot; = &quot; &lt;&lt; std::acosh(z3) &lt;&lt; '\n'
              &lt;&lt; &quot;i*acos&quot; &lt;&lt; z3 &lt;&lt; &quot; = &quot; &lt;&lt; i*std::acos(z3) &lt;&lt; '\n';
}
|output=
acosh(0.500000,0.000000) = (0.000000,-1.047198)
acosh(0.500000,-0.000000) (the other side of the cut) = (0.000000,1.047198)
acosh(1.000000,1.000000) = (1.061275,0.904557)
i*acos(1.000000,1.000000) = (1.061275,0.904557)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc inc | cpp/numeric/complex/dsc asinh}}
{{dsc inc | cpp/numeric/complex/dsc atanh}}
{{dsc inc | cpp/numeric/complex/dsc cosh}}
{{dsc inc | cpp/numeric/math/dsc acosh}}
{{dsc see c | c/numeric/complex/cacosh}}
{{dsc end}}

[[de:cpp/numeric/complex/acosh]]
[[es:cpp/numeric/complex/acosh]]
[[fr:cpp/numeric/complex/acosh]]
[[it:cpp/numeric/complex/acosh]]
[[ja:cpp/numeric/complex/acosh]]
[[pt:cpp/numeric/complex/acosh]]
[[ru:cpp/numeric/complex/acosh]]
[[zh:cpp/numeric/complex/acosh]]</text>
      <sha1>og9ecwv1chy841tk9vfx051lmh9k975</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/arg</title>
    <ns>0</ns>
    <id>8524</id>
    <revision>
      <id>83671</id>
      <parentid>73545</parentid>
      <timestamp>2016-03-06T17:25:26Z</timestamp>
      <contributor>
        <ip>77.206.224.37</ip>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2255">{{cpp/title|arg{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | num=1 | 1=
template&lt; class T &gt; 
T arg( const complex&lt;T&gt;&amp; z );
}}
{{dcl | num=2| since=c++11 | 1=
long double arg( long double z );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class DoubleOrInteger &gt;
double arg( DoubleOrInteger z );
}}
{{dcl | num=4 | since=c++11 | 1=
float arg( float z );
}}
{{dcl end}}

Calculates the phase angle (in radians) of the complex number {{tt|z}}

{{mark since c++11}}Additional overloads are provided for {{c|float}}, {{c|double}}, {{c|long double}}, and all integer types, which are treated as complex numbers with zero imaginary component.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
If no errors occur, returns the phase angle of {{tt|z}} in the interval {{math|(−π; π)}}.

Errors and special cases are handled as if the function is implemented as {{c|std::atan2(std::imag(z), std::real(z))}}.

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main() 
{
    std::complex&lt;double&gt; z1(1, 0); 
    std::cout &lt;&lt; &quot;phase angle of &quot; &lt;&lt; z1 &lt;&lt; &quot; is &quot; &lt;&lt; std::arg(z1) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(0, 1); 
    std::cout &lt;&lt; &quot;phase angle of &quot; &lt;&lt; z2 &lt;&lt; &quot; is &quot; &lt;&lt; std::arg(z2) &lt;&lt; '\n';

    std::complex&lt;double&gt; z3(-1, 0); 
    std::cout &lt;&lt; &quot;phase angle of &quot; &lt;&lt; z3 &lt;&lt; &quot; is &quot; &lt;&lt; std::arg(z3) &lt;&lt; '\n';

    std::complex&lt;double&gt; z4(-1, -0.0); 
    std::cout &lt;&lt; &quot;phase angle of &quot; &lt;&lt; z4 &lt;&lt; &quot; (the other side of the cut) is &quot;
              &lt;&lt; std::arg(z4) &lt;&lt; '\n';
}
|output=
phase angle of (1,0) is 0
phase angle of (0,1) is 1.5708
phase angle of (-1,0) is 3.14159
phase angle of (-1,-0) (the other side of the cut) is -3.14159
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/complex/dsc polar}}
{{dsc inc | cpp/numeric/math/dsc atan2}}
{{dsc inc | cpp/numeric/valarray/dsc atan2}}
{{dsc see c | c/numeric/complex/carg}}
{{dsc end}}

[[de:cpp/numeric/complex/arg]]
[[es:cpp/numeric/complex/arg]]
[[fr:cpp/numeric/complex/arg]]
[[it:cpp/numeric/complex/arg]]
[[ja:cpp/numeric/complex/arg]]
[[pt:cpp/numeric/complex/arg]]
[[ru:cpp/numeric/complex/arg]]
[[zh:cpp/numeric/complex/arg]]</text>
      <sha1>c4y0gz61fsit6mnda0c7kcjq5phwz1y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/asin</title>
    <ns>0</ns>
    <id>4071</id>
    <revision>
      <id>73365</id>
      <parentid>73359</parentid>
      <timestamp>2014-10-24T20:50:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>incomplete sentence</comment>
      <text xml:space="preserve" bytes="2533">{{cpp/title|asin{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; asin( const complex&lt;T&gt;&amp; z );
}}

Computes complex arc sine of a complex value {{tt|z}}. Branch cut exists outside the interval {{math|[−1 ; +1]}} along the real axis.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
If no errors occur, complex arc sine of {{tt|z}} is returned, in the range of a strip unbounded along the imaginary axis and in the interval {{math|[−π/2; +π/2]}} along the real axis.

Errors and special cases are handled as if the operation is implemented by {{tt|-i * [[cpp/numeric/complex/asinh|std::asinh]](i*z)}}, where {{tt|i}} is the imaginary unit.

===Notes===
Inverse sine (or arc sine) is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments {{math|(-∞,-1)}} and {{math|(1,∞)}} of the real axis.

The mathematical definition of the principal value of arc sine is {{math|asin z {{=}} -''i''ln(''i''z + {{mrad|1-z{{su|p=2}}}})}}

For any z, {{math|asin(z) {{=}} acos(-z) - {{mfrac|π|2}} }}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z1(-2, 0);
    std::cout &lt;&lt; &quot;acos&quot; &lt;&lt; z1 &lt;&lt; &quot; = &quot; &lt;&lt; std::acos(z1) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(-2, -0.0);
    std::cout &lt;&lt; &quot;acos&quot; &lt;&lt; z2 &lt;&lt; &quot; (the other side of the cut) = &quot;
              &lt;&lt; std::acos(z2) &lt;&lt; '\n';

    // for any z, acos(z) = pi - acos(-z)
    const double pi = std::acos(-1);
    std::complex&lt;double&gt; z3 = pi - std::acos(z2);
    std::cout &lt;&lt; &quot;cos(pi - acos&quot; &lt;&lt; z2 &lt;&lt; &quot;) = &quot; &lt;&lt; std::cos(z3) &lt;&lt; '\n';
}
|output=
asin(-2.000000,0.000000) = (-1.570796,1.316958)
asin(-2.000000,-0.000000) (the other side of the cut) = (-1.570796,-1.316958)
sin(acos(-2.000000,-0.000000) - pi/2) = (-2.000000,-0.000000)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc inc | cpp/numeric/complex/dsc atan}}
{{dsc inc | cpp/numeric/complex/dsc sin}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc see c | c/numeric/complex/casin}}
{{dsc end}}

[[de:cpp/numeric/complex/asin]]
[[es:cpp/numeric/complex/asin]]
[[fr:cpp/numeric/complex/asin]]
[[it:cpp/numeric/complex/asin]]
[[ja:cpp/numeric/complex/asin]]
[[pt:cpp/numeric/complex/asin]]
[[ru:cpp/numeric/complex/asin]]
[[zh:cpp/numeric/complex/asin]]</text>
      <sha1>f7587nao2ngviui4g1q60tne4dvo63i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/asinh</title>
    <ns>0</ns>
    <id>8518</id>
    <revision>
      <id>73433</id>
      <parentid>73425</parentid>
      <timestamp>2014-10-28T13:24:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo in comment</comment>
      <text xml:space="preserve" bytes="3938">{{cpp/title|asinh{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; asinh( const complex&lt;T&gt;&amp; z );
}}

Computes complex arc hyperbolic sine of a complex value {{tt|z}} with branch cuts outside the interval {{math|[−i; +i]}} along the imaginary axis.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
If no errors occur, the complex arc hyperbolic sine of {{tt|z}} is returned, in the range of a strip mathematically unbounded along the real axis and in the interval {{math|[−iπ/2; +iπ/2]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::asinh(std::conj(z)) {{==}} std::conj(std::asinh(z))}}
* {{c|std::asinh(-z) {{==}} -std::asinh(z)}}
* If {{tt|z}} is {{tt|(+0,+0)}}, the result is {{tt|(+0,+0)}}
* If {{tt|z}} is {{tt|(x,+∞)}} (for any positive finite x), the result is {{tt|(+∞,π/2)}}
* If {{tt|z}} is {{tt|(x,NaN)}} (for any finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(+∞,y)}} (for any positive finite y), the result is {{tt|(+∞,+0)}}
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(+∞,π/4)}}
* If {{tt|z}} is {{tt|(+∞,NaN)}}, the result is {{tt|(+∞,NaN)}}
* If {{tt|z}} is {{tt|(NaN,+0)}}, the result is {{tt|(NaN,+0)}}
* If {{tt|z}} is {{tt|(NaN,y)}} (for any finite nonzero y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,+∞)}}, the result is {{tt|(±∞,NaN)}} (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

===Notes===
Although the C++ standard names this function &quot;complex arc hyperbolic sine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;complex inverse hyperbolic sine&quot;, and, less common, &quot;complex area hyperbolic sine&quot;.

Inverse hyperbolic sine is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments {{math|(-''i''∞,-''i'')}} and {{math|(''i'',''i''∞)}} of the imaginary axis.

The mathematical definition of the principal value of the inverse hyperbolic sine is {{math|asinh z {{=}} ln(z + {{mrad|1+z{{su|p=2}}}})}}

For any z, {{math|asinh(z) {{=}} {{mfrac|asin(iz)|i}} }}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z1(0, -2);
    std::cout &lt;&lt; &quot;asinh&quot; &lt;&lt; z1 &lt;&lt; &quot; = &quot; &lt;&lt; std::asinh(z1) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(-0.0, -2);
    std::cout &lt;&lt; &quot;asinh&quot; &lt;&lt; z2 &lt;&lt; &quot; (the other side of the cut) = &quot;
              &lt;&lt; std::asinh(z2) &lt;&lt; '\n';

    // for any z, asinh(z) = asin(iz)/i
    std::complex&lt;double&gt; z3(1,2);
    std::complex&lt;double&gt; i(0,1);
    std::cout &lt;&lt; &quot;asinh&quot; &lt;&lt; z3 &lt;&lt; &quot; = &quot; &lt;&lt; std::asinh(z3) &lt;&lt; '\n'
              &lt;&lt; &quot;asin&quot; &lt;&lt; z3*i &lt;&lt; &quot;/i = &quot; &lt;&lt; std::asin(z3*i)/i &lt;&lt; '\n';
}
|output=
asinh(0.000000,-2.000000) = (1.316958,-1.570796)
asinh(-0.000000,-2.000000) (the other side of the cut) = (-1.316958,-1.570796)
asinh(1.000000,2.000000) = (1.469352,1.063440)
asin(-2.000000,1.000000)/i = (1.469352,1.063440)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc acosh}}
{{dsc inc | cpp/numeric/complex/dsc atanh}}
{{dsc inc | cpp/numeric/complex/dsc sinh}}
{{dsc inc | cpp/numeric/math/dsc asinh}}
{{dsc see c | c/numeric/complex/casinh}}
{{dsc end}}

[[de:cpp/numeric/complex/asinh]]
[[es:cpp/numeric/complex/asinh]]
[[fr:cpp/numeric/complex/asinh]]
[[it:cpp/numeric/complex/asinh]]
[[ja:cpp/numeric/complex/asinh]]
[[pt:cpp/numeric/complex/asinh]]
[[ru:cpp/numeric/complex/asinh]]
[[zh:cpp/numeric/complex/asinh]]</text>
      <sha1>lndka5quw2tbs3zlma9turfhualope3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/atan</title>
    <ns>0</ns>
    <id>4073</id>
    <revision>
      <id>73451</id>
      <parentid>70891</parentid>
      <timestamp>2014-10-29T15:19:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>details</comment>
      <text xml:space="preserve" bytes="2521">{{cpp/title|atan{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; atan( const complex&lt;T&gt;&amp; z );
}}

Computes complex arc tangent of a complex value {{tt|z}}. Branch cut exists outside the interval {{math|[−i ; +i]}} along the imaginary axis.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
Complex arc tangent of {{tt|z}} in the range {{math|[−''i''&amp;pi;/2 ; +''i''&amp;pi;/2]}} along the imaginary axis.

===Return value===
If no errors occur, complex arc tangent of {{tt|z}} is returned, in the range of a strip unbounded along the imaginary axis and in the interval {{math|[−π/2; +π/2]}} along the real axis.

Errors and special cases are handled as if the operation is implemented by {{tt|-i * [[cpp/numeric/complex/atanh|std::atanh]](i*z)}}, where {{tt|i}} is the imaginary unit.

===Notes===
Inverse tangent (or arc tangent) is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segments {{math|(-∞i,-i)}} and {{math|(+i,+∞i)}} of the imaginary axis.

The mathematical definition of the principal value of inverse tangent is {{math|atan z {{=}} -{{mfrac|1|2}} i [ln(1 - iz) - ln (1 + iz]}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;
#include &lt;cmath&gt;
int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z1(0, 2);
    std::cout &lt;&lt; &quot;atan&quot; &lt;&lt; z1 &lt;&lt; &quot; = &quot; &lt;&lt; std::atan(z1) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(-0.0, 2);
    std::cout &lt;&lt; &quot;atan&quot; &lt;&lt; z2 &lt;&lt; &quot; (the other side of the cut) = &quot;
              &lt;&lt; std::atan(z2) &lt;&lt; '\n';

    std::complex&lt;double&gt; z3(0, INFINITY);
    std::cout &lt;&lt; &quot;2*atan&quot; &lt;&lt; z3 &lt;&lt; &quot; = &quot; &lt;&lt; 2.0*std::atan(z3) &lt;&lt; '\n';
}
|output=
atan(0.000000,2.000000) = (1.570796,0.549306)
atan(-0.000000,2.000000) (the other side of the cut) = (-1.570796,0.549306)
2*atan(0.000000,inf) = (3.141593,0.000000)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc asin}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc inc | cpp/numeric/complex/dsc tan}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc see c | c/numeric/complex/catan}}
{{dsc end}}

[[de:cpp/numeric/complex/atan]]
[[es:cpp/numeric/complex/atan]]
[[fr:cpp/numeric/complex/atan]]
[[it:cpp/numeric/complex/atan]]
[[ja:cpp/numeric/complex/atan]]
[[pt:cpp/numeric/complex/atan]]
[[ru:cpp/numeric/complex/atan]]
[[zh:cpp/numeric/complex/atan]]</text>
      <sha1>bwxrbms19xy2o0kmtop2ip02qbqbs1p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/atanh</title>
    <ns>0</ns>
    <id>8520</id>
    <revision>
      <id>75457</id>
      <parentid>73434</parentid>
      <timestamp>2015-01-18T04:03:13Z</timestamp>
      <contributor>
        <ip>70.51.243.67</ip>
      </contributor>
      <comment>Correct mathematical atanh definition</comment>
      <text xml:space="preserve" bytes="4009">{{cpp/title|atanh{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; atanh( const complex&lt;T&gt;&amp; z );
}}

Computes the complex arc hyperbolic tangent of {{tt|z}} with branch cuts outside the interval {{math|[−1; +1]}} along the real axis.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===
If no errors occur, the complex arc hyperbolic tangent of {{tt|z}} is returned, in the range of a half-strip mathematically unbounded along the real axis and in the interval {{math|[−iπ/2; +iπ/2]}} along the imaginary axis.

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::atanh(std::conj(z)) {{==}} std::conj(std::atanh(z))}}
* {{c|std::atanh(-z) {{==}} -std::atanh(z)}}
* If {{tt|z}} is {{tt|(+0,+0)}}, the result is {{tt|(+0,+0)}}
* If {{tt|z}} is {{tt|(+0,NaN)}}, the result is {{tt|(+0,NaN)}}
* If {{tt|z}} is {{tt|(+1,+0)}}, the result is {{tt|(+∞,+0)}} and {{lc|FE_DIVBYZERO}} is raised
* If {{tt|z}} is {{tt|(x,+∞)}} (for any finite positive x), the result is {{tt|(+0,π/2)}}
* If {{tt|z}} is {{tt|(x,NaN)}} (for any finite nonzero x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(+∞,y)}} (for any finite positive y), the result is {{tt|(+0,π/2)}}
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(+0,π/2)}}
* If {{tt|z}} is {{tt|(+∞,NaN)}}, the result is {{tt|(+0,NaN)}}
* If {{tt|z}} is {{tt|(NaN,y)}} (for any finite y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,+∞)}}, the result is {{tt|(±0,π/2)}} (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

===Notes===
Although the C++ standard names this function &quot;complex arc hyperbolic tangent&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;complex inverse hyperbolic tangent&quot;, and, less common, &quot;complex area hyperbolic tangent&quot;.

Inverse hyperbolic tangent is a multivalued function and requires a branch cut on the complex plane. The branch cut is conventionally placed at the line segmentd {{math|(-∞,-1]}} and {{math|[+1,+∞)}} of the real axis.

The mathematical definition of the principal value of the inverse hyperbolic sine is {{math|atanh z {{=}} {{mfrac|ln(1+z)-ln(1-z)|2}} }}.


For any z, {{math|atanh(z) {{=}} {{mfrac|atan(iz)|i}} }}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z1(2, 0);
    std::cout &lt;&lt; &quot;atanh&quot; &lt;&lt; z1 &lt;&lt; &quot; = &quot; &lt;&lt; std::atanh(z1) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(2, -0.0);
    std::cout &lt;&lt; &quot;atanh&quot; &lt;&lt; z2 &lt;&lt; &quot; (the other side of the cut) = &quot;
              &lt;&lt; std::atanh(z2) &lt;&lt; '\n';

    // for any z, atanh(z) = atanh(iz)/i
    std::complex&lt;double&gt; z3(1,2);
    std::complex&lt;double&gt; i(0,1);
    std::cout &lt;&lt; &quot;atanh&quot; &lt;&lt; z3 &lt;&lt; &quot; = &quot; &lt;&lt; std::atanh(z3) &lt;&lt; '\n'
              &lt;&lt; &quot;atan&quot; &lt;&lt; z3*i &lt;&lt; &quot;/i = &quot; &lt;&lt; std::atan(z3*i)/i &lt;&lt; '\n';
}
|output=
atanh(2.000000,0.000000) = (0.549306,1.570796)
atanh(2.000000,-0.000000) (the other side of the cut) = (0.549306,-1.570796)
atanh(1.000000,2.000000) = (0.173287,1.178097)
atan(-2.000000,1.000000)/i = (0.173287,1.178097)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc asinh}}
{{dsc inc | cpp/numeric/complex/dsc acosh}}
{{dsc inc | cpp/numeric/complex/dsc tanh}}
{{dsc inc | cpp/numeric/math/dsc atanh}}
{{dsc see c | c/numeric/complex/catanh}}
{{dsc end}}

[[de:cpp/numeric/complex/atanh]]
[[es:cpp/numeric/complex/atanh]]
[[fr:cpp/numeric/complex/atanh]]
[[it:cpp/numeric/complex/atanh]]
[[ja:cpp/numeric/complex/atanh]]
[[pt:cpp/numeric/complex/atanh]]
[[ru:cpp/numeric/complex/atanh]]
[[zh:cpp/numeric/complex/atanh]]</text>
      <sha1>pzar97qbfw5mhtcys0pfiuzyef9twwk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/complex</title>
    <ns>0</ns>
    <id>3540</id>
    <revision>
      <id>87431</id>
      <parentid>87429</parentid>
      <timestamp>2016-08-24T09:39:05Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rv</comment>
      <text xml:space="preserve" bytes="3381">{{cpp/numeric/complex/title|complex}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl h|primary template complex&lt;T&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++14 | 1=
complex( const T&amp; re = T(), const T&amp; im = T() );
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr complex( const T&amp; re = T(), const T&amp; im = T() );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=2 | until=c++14 | 
complex( const complex&amp; other );
}}
{{dcl | num=2 | since=c++14 |
constexpr complex( const complex&amp; other );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=3 | until=c++14 | 
template&lt; class X &gt;
complex( const complex&lt;X&gt;&amp; other);
}}
{{dcl | num=3 | since=c++14 |
template&lt; class X &gt;
constexpr complex( const complex&lt;X&gt;&amp;  other);
}}
{{dcl rev end}}
{{dcl h|specialization complex&lt;float&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 |1=
complex(float re = 0.0f, float im = 0.0f);
}}
{{dcl | num=1 | since=c++11 |1=
constexpr complex(float re = 0.0f, float im = 0.0f);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=3 | until=c++11 |
explicit complex(const complex&lt;double&gt;&amp; other);
explicit complex(const complex&lt;long double&gt;&amp; other);
}}
{{dcl | num=3 | since=c++11 |
explicit constexpr complex(const complex&lt;double&gt;&amp; other);
explicit constexpr complex(const complex&lt;long double&gt;&amp; other);
}}
{{dcl rev end}}

{{dcl h|specialization complex&lt;double&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 |1=
complex(double re = 0.0, double im = 0.0);
}}
{{dcl | num=1 | since=c++11 |1=
constexpr complex(double re = 0.0, double im = 0.0);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=3 | until=c++11 |
complex(const complex&lt;float&gt;&amp; other);
explicit complex(const complex&lt;long double&gt;&amp; other);
}}
{{dcl | num=3 | since=c++11 |
constexpr complex(const complex&lt;float&gt;&amp; other);
explicit constexpr complex(const complex&lt;long double&gt;&amp; other);
}}

{{dcl h|specialization complex&lt;long double&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 |1=
complex(long double re = 0.0L, long double im = 0.0L);
}}
{{dcl | num=1 | since=c++11 |1=
constexpr complex(long double re = 0.0L, long double im = 0.0L);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=3 | until=c++11 |
complex(const complex&lt;float&gt;&amp; other);
complex(const complex&lt;double&gt;&amp; other);
}}
{{dcl | num=3 | since=c++11 |
constexpr complex(const complex&lt;float&gt;&amp; other);
constexpr complex(const complex&lt;double&gt;&amp; other);
}}


{{dcl end}}

Constructs the {{lc|std::complex}} object.

@1@ Constructs the complex number from real and imaginary parts.
@2@ Copy constructor. Constructs the object with the copy of the contents of {{tt|other}}. The copy constructor is implicit in the standard specializations.
@3@ [[cpp/language/converting_constructor|Converting constructor]]. Constructs the object from a complex number of a different type.

===Parameters===
{{par begin}}
{{par | re | the real part}}
{{par | im | the imaginary part}}
{{par | other | another complex to use as source}}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc operator{{=}}}}
{{dsc inc | cpp/numeric/dsc operator&quot;&quot;i}}
{{dsc see c | c/numeric/complex/CMPLX}}
{{dsc end}}

[[de:cpp/numeric/complex/complex]]
[[es:cpp/numeric/complex/complex]]
[[fr:cpp/numeric/complex/complex]]
[[it:cpp/numeric/complex/complex]]
[[ja:cpp/numeric/complex/complex]]
[[pt:cpp/numeric/complex/complex]]
[[ru:cpp/numeric/complex/complex]]
[[zh:cpp/numeric/complex/complex]]</text>
      <sha1>317tnlf1b8otq61slerif8wq5jrka6e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/conj</title>
    <ns>0</ns>
    <id>8526</id>
    <revision>
      <id>83672</id>
      <parentid>73565</parentid>
      <timestamp>2016-03-07T08:55:32Z</timestamp>
      <contributor>
        <ip>223.104.4.55</ip>
      </contributor>
      <text xml:space="preserve" bytes="1720">{{cpp/title|conj{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | num=1 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; conj( const complex&lt;T&gt;&amp; z );
}}
{{dcl | num=2 | since=c++11 | 1=
std::complex&lt;long double&gt; conj( long double z );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class DoubleOrInteger &gt;
std::complex&lt;double&gt; conj( DoubleOrInteger z );
}}
{{dcl | num=4 | since=c++11 | 1=
std::complex&lt;float&gt; conj( float z );
}}
{{dcl end}}

Computes the [[enwiki:Complex_conjugate|complex conjugate]] of {{tt|z}} by reversing the sign of the imaginary part.

{{mark since c++11}}Additional overloads are provided for {{c|float}}, {{c|double}}, {{c|long double}}, and all integer types, which are treated as complex numbers with zero imaginary component.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

The complex conjugate of {{tt|z}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::complex&lt;double&gt; z(1,2);
    std::cout &lt;&lt; &quot;The conjugate of &quot; &lt;&lt; z &lt;&lt; &quot; is &quot; &lt;&lt; std::conj(z) &lt;&lt; '\n'
              &lt;&lt; &quot;Their product is &quot; &lt;&lt; z*std::conj(z) &lt;&lt; '\n';
}
|output=
The conjugate of (1,2) is (1,-2)
Their product is (5,0)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/complex/dsc norm}}
{{dsc inc | cpp/numeric/complex/dsc polar}}
{{dsc see c | c/numeric/complex/conj}}
{{dsc end}}

[[de:cpp/numeric/complex/conj]]
[[es:cpp/numeric/complex/conj]]
[[fr:cpp/numeric/complex/conj]]
[[it:cpp/numeric/complex/conj]]
[[ja:cpp/numeric/complex/conj]]
[[pt:cpp/numeric/complex/conj]]
[[ru:cpp/numeric/complex/conj]]
[[zh:cpp/numeric/complex/conj]]</text>
      <sha1>4zhit34h7uisb01brspkyyk5oi6wceo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/cos</title>
    <ns>0</ns>
    <id>4075</id>
    <revision>
      <id>73210</id>
      <parentid>73209</parentid>
      <timestamp>2014-10-18T01:23:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to the right cosh</comment>
      <text xml:space="preserve" bytes="1948">{{cpp/title|cos{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
complex&lt;T&gt; cos( const complex&lt;T&gt;&amp; z );
}}

Computes complex cosine of a complex value {{tt|z}}.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, the complex cosine of {{tt|z}} is returned.

Errors and special cases are handled as if the operation is implemented by {{tt|[[cpp/numeric/complex/cosh|std::cosh]](i*z)}}, where {{tt|i}} is the imaginary unit.

===Notes===
The cosine is an entire function on the complex plane, and has no branch cuts.

Mathematical definition of the cosine is {{math|cos z {{=}} {{mfrac|e{{su|p=iz}}+e{{su|p=-iz}}|2}}}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z(1, 0); // behaves like real cosine along the real line
    std::cout &lt;&lt; &quot;cos&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; std::cos(z)
              &lt;&lt; &quot; ( cos(1) = &quot; &lt;&lt; std::cos(1) &lt;&lt; &quot;)\n&quot;;

    std::complex&lt;double&gt; z2(0, 1); // behaves like real cosh along the imaginary line
    std::cout &lt;&lt; &quot;cos&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; std::cos(z2)
              &lt;&lt; &quot; (cosh(1) = &quot; &lt;&lt; std::cosh(1) &lt;&lt; &quot;)\n&quot;;
}
 | output=
cos(1.000000,0.000000) = (0.540302,-0.000000) ( cos(1) = 0.540302)
cos(0.000000,1.000000) = (1.543081,-0.000000) (cosh(1) = 1.543081)
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc sin}}
{{dsc inc | cpp/numeric/complex/dsc tan}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc inc | cpp/numeric/math/dsc cos}}
{{dsc inc | cpp/numeric/valarray/dsc cos}}
{{dsc see c | c/numeric/complex/ccos}}
{{dsc end}}

[[de:cpp/numeric/complex/cos]]
[[es:cpp/numeric/complex/cos]]
[[fr:cpp/numeric/complex/cos]]
[[it:cpp/numeric/complex/cos]]
[[ja:cpp/numeric/complex/cos]]
[[pt:cpp/numeric/complex/cos]]
[[ru:cpp/numeric/complex/cos]]
[[zh:cpp/numeric/complex/cos]]</text>
      <sha1>pkhdnniwohr0gsxocvtpmnfperj0g8t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/cosh</title>
    <ns>0</ns>
    <id>8516</id>
    <revision>
      <id>73213</id>
      <parentid>70884</parentid>
      <timestamp>2014-10-18T01:59:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>details</comment>
      <text xml:space="preserve" bytes="3504">{{cpp/title|cosh{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; cosh( const complex&lt;T&gt;&amp; z );
}}

Computes complex hyperbolic cosine of a complex value {{tt|z}}. 

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, complex hyperbolic cosine of {{tt|z}} is returned

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::cosh(std::conj(z)) {{==}} std::conj(std::cosh(z))}}
* {{c|std::cosh(z) {{==}} std::cosh(-z)}}
* If {{tt|z}} is {{tt|(+0,+0)}}, the result is {{tt|(1,+0)}}
* If {{tt|z}} is {{tt|(+0,+∞)}}, the result is {{tt|(NaN,±0)}} (the sign of the imaginary part is unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|(+0,NaN)}}, the result is {{tt|(NaN,±0)}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|(x,+∞)}} (for any finite non-zero x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|(x,NaN)}} (for any finite non-zero x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(+∞,+0)}}, the result is {{tt|(+∞,+0)}}
* If {{tt|z}} is {{tt|(+∞,y)}} (for any finite non-zero y), the result is {{tt|(+∞,cis(y))}}
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(±∞,NaN)}} (the sign of the real part is unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|(+∞,NaN)}}, the result is {{tt|(+∞,NaN)}}
* If {{tt|z}} is {{tt|(NaN,+0)}}, the result is {{tt|(NaN,±0)}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|(NaN,+y)}} (for any finite non-zero y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

where {{math|cis(y)}} is {{math|cos(y) + i sin(y)}}

===Notes===
Mathematical definition of hyperbolic cosine is {{math|cosh z {{=}} {{mfrac|e{{su|p=z}}+e{{su|p=-z}}|2}}}}

Hyperbolic cosine is an entire function in the complex plane and has no branch cuts. It is periodic with respect to the imaginary component, with period 2&amp;pi;i 

===Examples===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{   
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z(1, 0); // behaves like real cosh along the real line
    std::cout &lt;&lt; &quot;cosh&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; std::cosh(z)
              &lt;&lt; &quot; (cosh(1) = &quot; &lt;&lt; std::cosh(1) &lt;&lt; &quot;)\n&quot;;

    std::complex&lt;double&gt; z2(0, 1); // behaves like real cosine along the imaginary line
    std::cout &lt;&lt; &quot;cosh&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; std::cosh(z2)
              &lt;&lt; &quot; ( cos(1) = &quot; &lt;&lt; std::cos(1) &lt;&lt; &quot;)\n&quot;;
}  
|output=
cosh(1.000000,0.000000) = (1.543081,0.000000) (cosh(1) = 1.543081)
cosh(0.000000,1.000000) = (0.540302,0.000000) ( cos(1) = 0.540302)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc sinh}}
{{dsc inc | cpp/numeric/complex/dsc tanh}}
{{dsc inc | cpp/numeric/complex/dsc acosh}}
{{dsc inc | cpp/numeric/math/dsc cosh}}
{{dsc inc | cpp/numeric/valarray/dsc cosh}}
{{dsc see c | c/numeric/complex/ccosh}}
{{dsc end}}

[[de:cpp/numeric/complex/cosh]]
[[es:cpp/numeric/complex/cosh]]
[[fr:cpp/numeric/complex/cosh]]
[[it:cpp/numeric/complex/cosh]]
[[ja:cpp/numeric/complex/cosh]]
[[pt:cpp/numeric/complex/cosh]]
[[ru:cpp/numeric/complex/cosh]]
[[zh:cpp/numeric/complex/cosh]]</text>
      <sha1>ir7om8jhiccqo7c5rgf79hy1l0fn0wr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/exp</title>
    <ns>0</ns>
    <id>4067</id>
    <revision>
      <id>84257</id>
      <parentid>73166</parentid>
      <timestamp>2016-03-17T02:31:05Z</timestamp>
      <contributor>
        <username>Jlebar</username>
        <id>3201</id>
      </contributor>
      <comment>grammar nit</comment>
      <text xml:space="preserve" bytes="2994">{{cpp/title|exp{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
complex&lt;T&gt; exp( const complex&lt;T&gt;&amp; z );
}}

Compute base-e exponential of {{tt|z}}, that is ''e'' (Euler's number, {{tt|2.7182818}}) raised to the {{tt|z}} power.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, ''e'' raised to the power of {{tt|z}}, {{math|e{{su|p=z}}}}, is returned.

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::exp(std::conj(z)) {{==}} std::conj(std::exp(z))}}
* If {{tt|z}} is {{tt|(±0,+0)}}, the result is {{tt|(1,+0)}}
* If {{tt|z}} is {{tt|(x,+∞)}} (for any finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} is raised.
* If {{tt|z}} is {{tt|(x,NaN)}} (for any finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised.
* If {{tt|z}} is {{tt|(+∞,+0)}}, the result is {{tt|(+∞,+0)}}
* If {{tt|z}} is {{tt|(-∞,y)}} (for any finite y), the result is {{tt|(+0,cis(y))}}
* If {{tt|z}} is {{tt|(+∞,y)}} (for any finite nonzero y), the result is {{tt|(+∞,cis(y))}}
* If {{tt|z}} is {{tt|(-∞,+∞)}}, the result is {{tt|(±0,±0)}} (signs are unspecified)
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(±∞,NaN)}} and {{lc|FE_INVALID}} is raised (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|(-∞,NaN)}}, the result is {{tt|(±0,±0)}} (signs are unspecified)
* If {{tt|z}} is {{tt|(+∞,NaN)}}, the result is {{tt|(±∞,NaN)}} (the sign of the real part is unspecified)
* If {{tt|z}} is {{tt|(NaN,+0)}}, the result is {{tt|(NaN,+0)}}
* If {{tt|z}} is {{tt|(NaN,y)}} (for any nonzero y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

where {{math|cis(y)}} is {{math|cos(y) + i sin(y)}}

===Notes===
The complex exponential function {{math|e{{su|p=z}}}} for {{math|z {{=}} x+iy}} equals {{math|e{{su|p=x}} cis(y)}}, or, {{math|e{{su|p=x}} (cos(y) + i sin(y))}}

The exponential function is an ''entire function'' in the complex plane and has no branch cuts.

===Example===
{{example|code=
#include &lt;complex&gt;
#include &lt;iostream&gt;

int main()
{
   const double pi = std::acos(-1);
   const std::complex&lt;double&gt; i(0, 1);

   std::cout &lt;&lt; std::fixed &lt;&lt; &quot; exp(i*pi) = &quot; &lt;&lt; std::exp(i * pi) &lt;&lt; '\n';
}
|output=
exp(i*pi) = (-1.000000,0.000000)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc log}}
{{dsc inc | cpp/numeric/math/dsc exp}}
{{dsc inc | cpp/numeric/valarray/dsc exp}}
{{dsc see c | c/numeric/complex/cexp}}
{{dsc end}}

[[de:cpp/numeric/complex/exp]]
[[es:cpp/numeric/complex/exp]]
[[fr:cpp/numeric/complex/exp]]
[[it:cpp/numeric/complex/exp]]
[[ja:cpp/numeric/complex/exp]]
[[pt:cpp/numeric/complex/exp]]
[[ru:cpp/numeric/complex/exp]]
[[zh:cpp/numeric/complex/exp]]</text>
      <sha1>mcw1pohglhq4tdiwn14dd3v8kfwmeax</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/imag</title>
    <ns>0</ns>
    <id>3545</id>
    <revision>
      <id>71600</id>
      <parentid>64695</parentid>
      <timestamp>2014-06-14T22:02:02Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+link to imag2</comment>
      <text xml:space="preserve" bytes="1931">{{cpp/numeric/complex/title|imag}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl h|primary template complex&lt;T&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++14 | 1=
T imag() const;
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr T imag() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void imag( T value );
}}
{{dcl h|specialization complex&lt;float&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 | 1=
float imag() const;
}}
{{dcl | num=1 | since=c++11 | until=c++14 | 1=
constexpr float imag();
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr float imag() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void imag( float value );
}}

{{dcl h|specialization complex&lt;double&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 | 1=
double imag() const;
}}
{{dcl | num=1 | since=c++11 | until=c++14 | 1=
constexpr double imag();
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr double imag() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void imag( double value );
}}

{{dcl h|specialization complex&lt;long double&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 | 1=
long double imag() const;
}}
{{dcl | num=1 | since=c++11 | until=c++14 | 1=
constexpr long double imag();
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr long double imag() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void imag( long double value );
}}

{{dcl end}}

Accesses the imaginary part of the complex number. 

@1@ Returns the imaginary part.
@2@ Sets the imaginary part to {{tt|value}}.

===Parameters===
{{par begin}}
{{par | value | the value to set the imaginary part to}}
{{par end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc imag2}}
{{dsc inc | cpp/numeric/complex/dsc real}}
{{dsc end}}

[[de:cpp/numeric/complex/imag]]
[[es:cpp/numeric/complex/imag]]
[[fr:cpp/numeric/complex/imag]]
[[it:cpp/numeric/complex/imag]]
[[ja:cpp/numeric/complex/imag]]
[[pt:cpp/numeric/complex/imag]]
[[ru:cpp/numeric/complex/imag]]
[[zh:cpp/numeric/complex/imag]]</text>
      <sha1>mzquttty9dai4b7kxubrcm8tm6pr6no</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/imag2</title>
    <ns>0</ns>
    <id>8522</id>
    <revision>
      <id>83674</id>
      <parentid>71602</parentid>
      <timestamp>2016-03-07T08:59:07Z</timestamp>
      <contributor>
        <ip>223.104.4.55</ip>
      </contributor>
      <text xml:space="preserve" bytes="1427">{{cpp/title|imag{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++14 | 1=
template&lt; class T &gt; 
T imag( const complex&lt;T&gt;&amp; z );
}}
{{dcl | num=1 | since=c++14 | 1=
template&lt; class T &gt; 
constexpr T imag( const complex&lt;T&gt;&amp; z );
}}
{{dcl rev end}}
{{dcl | num=2 | since=c++11 | 1=
long double imag( long double z );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class DoubleOrInteger &gt;
double imag( DoubleOrInteger z );
}}
{{dcl | num=4 | since=c++11 | 1=
float imag( float z );
}}
{{dcl end}}

Returns the imaginary component of the complex number {{tt|z}}, i.e. {{c|z.imag()}}.

{{rev inl|since=c++11|Additional overloads are provided for {{c|float}}, {{c|double}}, {{c|long double}}, and all integer types, which are treated as complex numbers with zero imaginary component.}}

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

the imaginary component of {{tt|z}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc imag}}
{{dsc inc | cpp/numeric/complex/dsc real2}}
{{dsc see c | c/numeric/complex/cimag}}
{{dsc end}}

[[de:cpp/numeric/complex/imag2]]
[[es:cpp/numeric/complex/imag2]]
[[fr:cpp/numeric/complex/imag2]]
[[it:cpp/numeric/complex/imag2]]
[[ja:cpp/numeric/complex/imag2]]
[[pt:cpp/numeric/complex/imag2]]
[[ru:cpp/numeric/complex/imag2]]
[[zh:cpp/numeric/complex/imag2]]</text>
      <sha1>oshbmpzfl7ewz1d85tcvi2zafua1hyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/log</title>
    <ns>0</ns>
    <id>4068</id>
    <revision>
      <id>73186</id>
      <parentid>73180</parentid>
      <timestamp>2014-10-16T18:40:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="3576">{{cpp/title|log{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
complex&lt;T&gt; log( const complex&lt;T&gt;&amp; z );
}}

Computes complex natural (base ''e'') logarithm of a complex value {{tt|z}} with a branch cut along the negative real axis.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, the complex natural logarithm of {{tt|z}} is returned, in the range of a strip in the interval {{math|[−iπ, +iπ]}} along the imaginary axis and mathematically unbounded along the real axis.

If {{tt|z}} is a negative real number, {{c|std::imag(std::log(x))}} equals {{tt|pi}}.

===Error handling and special values===
Errors are reported consistent with [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic,
* The function is continuous onto the branch cut taking into account the sign of imaginary part
* {{c|std::log(std::conj(z)) {{==}} std::conj(std::log(z))}}
* If {{tt|z}} is {{tt|(-0,+0)}}, the result is {{tt|(-∞,π)}} and {{lc|FE_DIVBYZERO}} is raised
* If {{tt|z}} is {{tt|(+0,+0)}}, the result is {{tt|(-∞,+0)}} and {{lc|FE_DIVBYZERO}} is raised
* If {{tt|z}} is {{tt|(x,+∞)}} (for any finite x), the result is {{tt|(+∞,π/2)}}
* If {{tt|z}} is {{tt|(x,NaN)}} (for any finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(-∞,y)}} (for any finite positive y), the result is {{tt|(-∞,π)}}
* If {{tt|z}} is {{tt|(+∞,y)}} (for any finite positive y), the result is {{tt|(-∞,+0)}}
* If {{tt|z}} is {{tt|(-∞,+∞)}}, the result is {{tt|(+∞,3π/4)}}
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(+∞,π/4)}}
* If {{tt|z}} is {{tt|(±∞,NaN)}}, the result is {{tt|(+∞,NaN)}}
* If {{tt|z}} is {{tt|(NaN,y)}} (for any finite y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,+∞)}}, the result is {{tt|(+∞,NaN)}}
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

===Notes===
The natural logarithm of a complex number {{math|z}} with polar coordinate components {{math|(r,θ)}} equals {{math|ln r + i(θ+2nπ)}}, with the principal value {{math|ln r + iθ}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::complex&lt;double&gt; z(0, 1); // // r = 1, θ = pi/2
    std::cout &lt;&lt; &quot;2*log&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; 2.*std::log(z) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(sqrt(2)/2, sqrt(2)/2); // r = 1, θ = pi/4
    std::cout &lt;&lt; &quot;4*log&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; 4.*std::log(z2) &lt;&lt; '\n';

    std::complex&lt;double&gt; z3(-1, 0); // r = 1, θ = pi
    std::cout &lt;&lt; &quot;log&quot; &lt;&lt; z3 &lt;&lt; &quot; = &quot; &lt;&lt; std::log(z3) &lt;&lt; '\n';
    std::complex&lt;double&gt; z4(-1, -0.0); // the other side of the cut
    std::cout &lt;&lt; &quot;log&quot; &lt;&lt; z4 &lt;&lt; &quot; (the other side of the cut) = &quot; &lt;&lt; std::log(z4) &lt;&lt; '\n';
}
|output=
2*log(0,1) = (0,3.14159)
4*log(0.707107,0.707107) = (0,3.14159)
log(-1,0) = (0,3.14159)
log(-1,-0) (the other side of the cut) = (0,-3.14159)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc log10}}
{{dsc inc | cpp/numeric/complex/dsc exp}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/valarray/dsc log}}
{{dsc see c | c/numeric/complex/clog}}
{{dsc end}}

[[de:cpp/numeric/complex/log]]
[[es:cpp/numeric/complex/log]]
[[fr:cpp/numeric/complex/log]]
[[it:cpp/numeric/complex/log]]
[[ja:cpp/numeric/complex/log]]
[[pt:cpp/numeric/complex/log]]
[[ru:cpp/numeric/complex/log]]
[[zh:cpp/numeric/complex/log]]</text>
      <sha1>c35h2zqtjexleltsf1lgkyw9kq38hto</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/log10</title>
    <ns>0</ns>
    <id>4069</id>
    <revision>
      <id>73198</id>
      <parentid>73189</parentid>
      <timestamp>2014-10-16T20:08:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/log/log10 in the output</comment>
      <text xml:space="preserve" bytes="1892">{{cpp/title|log10{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
complex&lt;T&gt; log10( const complex&lt;T&gt;&amp; z );
}}

Computes complex common (base {{c|10}}) logarithm of a complex value {{tt|z}} with a branch cut along the negative real axis.

The behavior of this function is equivalent to {{tt|{{rlp|log|std::log}}(z)/std::log(10)}}

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

Complex common logarithm of {{tt|z}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::complex&lt;double&gt; z(0, 1); // // r = 0,  = pi/2
    std::cout &lt;&lt; &quot;2*log10&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; 2.*std::log10(z) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(sqrt(2)/2, sqrt(2)/2); // r = 1, # = pi/4
    std::cout &lt;&lt; &quot;4*log10&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; 4.*std::log10(z2) &lt;&lt; '\n';

    std::complex&lt;double&gt; z3(-100, 0); // r = 100, # = pi
    std::cout &lt;&lt; &quot;log10&quot; &lt;&lt; z3 &lt;&lt; &quot; = &quot; &lt;&lt; std::log10(z3) &lt;&lt; '\n';
    std::complex&lt;double&gt; z4(-100, -0.0); // the other side of the cut
    std::cout &lt;&lt; &quot;log10&quot; &lt;&lt; z4 &lt;&lt; &quot; (the other side of the cut) = &quot;
              &lt;&lt; std::log10(z4) &lt;&lt; '\n'
              &lt;&lt; &quot;(note: pi/log(10) = &quot; &lt;&lt; acos(-1)/log(10) &lt;&lt; &quot;)\n&quot;;
}
|output=
2*log10(0,1) = (0,1.36438)
4*log10(0.707107,0.707107) = (0,1.36438)
log10(-100,0) = (2,1.36438)
log10(-100,-0) (the other side of the cut) = (2,-1.36438)
(note: pi/log(10) = 1.36438)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc log}}
{{dsc inc | cpp/numeric/math/dsc log10}}
{{dsc inc | cpp/numeric/valarray/dsc log10}}
{{dsc end}}

[[de:cpp/numeric/complex/log10]]
[[es:cpp/numeric/complex/log10]]
[[fr:cpp/numeric/complex/log10]]
[[it:cpp/numeric/complex/log10]]
[[ja:cpp/numeric/complex/log10]]
[[pt:cpp/numeric/complex/log10]]
[[ru:cpp/numeric/complex/log10]]
[[zh:cpp/numeric/complex/log10]]</text>
      <sha1>opiu856ifuszqig6j8d1o3ojdpys8fe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/norm</title>
    <ns>0</ns>
    <id>8525</id>
    <revision>
      <id>77281</id>
      <parentid>69895</parentid>
      <timestamp>2015-03-20T22:01:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on the naming</comment>
      <text xml:space="preserve" bytes="1683">{{cpp/title|norm{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | num=1 | 1=
template&lt; class T &gt; 
T norm( const complex&lt;T&gt;&amp; z );
}}
{{dcl | num=2 | since=c++11 | 1=
long double norm( long double z );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class DoubleOrInteger &gt;
double norm( DoubleOrInteger z );
}}
{{dcl | num=4 | since=c++11 | 1=
float norm( float z );
}}
{{dcl end}}

Returns the squared magnitude of the complex number {{tt|z}}.

{{mark since c++11}}Additional overloads are provided for {{c|float}}, {{c|double}}, {{c|long double}}, and all integer types, which are treated as complex numbers with zero imaginary component.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

the squared magnitude of {{tt|z}}

===Notes===
The norm calculated by this function is also known as [[enwiki:Field norm|field norm]] or [http://mathworld.wolfram.com/AbsoluteSquare.html absolute square].

The ''Euclidean norm'' of a complex number is provided by {{ltt|cpp/numeric/complex/abs|std::abs}}, which is more costly to compute. In some situations, it may be replaced by {{tt|std::norm}}, for example, if {{c|abs(z1) &gt; abs(z2)}} then {{c|norm(z1) &gt; norm(z2)}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/complex/dsc conj}}
{{dsc inc | cpp/numeric/complex/dsc polar}}
{{dsc end}}

[[de:cpp/numeric/complex/norm]]
[[es:cpp/numeric/complex/norm]]
[[fr:cpp/numeric/complex/norm]]
[[it:cpp/numeric/complex/norm]]
[[ja:cpp/numeric/complex/norm]]
[[pt:cpp/numeric/complex/norm]]
[[ru:cpp/numeric/complex/norm]]
[[zh:cpp/numeric/complex/norm]]</text>
      <sha1>h11voft8o4n0i8j7ve3t75f484jiuva</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/operator arith</title>
    <ns>0</ns>
    <id>9940</id>
    <revision>
      <id>77765</id>
      <parentid>67491</parentid>
      <timestamp>2015-04-07T15:07:52Z</timestamp>
      <contributor>
        <username>Bear</username>
        <id>408</id>
      </contributor>
      <comment>Template function according to the standard.</comment>
      <text xml:space="preserve" bytes="1482">{{cpp/numeric/complex/title|1=operator+=,-=,*=,/=}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
complex&lt;T&gt;&amp; operator+=( const T&amp; other );
}}
{{dcl | num=2 | 1=
template&lt; class X &gt;
complex&lt;T&gt;&amp; operator+=( const complex&lt;X&gt;&amp; other );
}}
{{dcl | num=3 | 1=
complex&lt;T&gt;&amp; operator-=( const T&amp; other );
}}
{{dcl | num=4 | 1=
template&lt; class X &gt;
complex&lt;T&gt;&amp; operator-=( const complex&lt;X&gt;&amp; other );
}}
{{dcl | num=5 | 1=
complex&lt;T&gt;&amp; operator*=( const T&amp; other );
}}
{{dcl | num=6 | 1=
template&lt; class X &gt;
complex&lt;T&gt;&amp; operator*=( const complex&lt;X&gt;&amp; other );
}}
{{dcl | num=7 | 1=
complex&lt;T&gt;&amp; operator/=( const T&amp; other );
}}
{{dcl | num=8 | 1=
template&lt; class X &gt;
complex&lt;T&gt;&amp; operator/=( const complex&lt;X&gt;&amp; other );
}}
{{dcl end}}

Implements the compound assignment operators for complex arithmetic and for mixed complex/scalar arithmetic. Scalar arguments are treated as complex numbers with the real part equal to the argument and the imaginary part set to zero.

@1-2@ Adds {{tt|other}} to {{c|*this}}.
@3-4@ Subtracts {{tt|other}} from {{c|*this}}.
@5-6@ Multiplies {{c|*this}} by {{tt|other}}.
@7-8@ Divides {{c|*this}} by {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | a complex or scalar value of matching type ({{c|float}}, {{c|double}}, {{c|long double}})}}
{{par end}}

===Return value===
{{c|*this}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith2}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith3}}
{{dsc end}}</text>
      <sha1>2xkysmxwrmvuwmwtyemdda353qigjgg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/operator arith2</title>
    <ns>0</ns>
    <id>5301</id>
    <revision>
      <id>58484</id>
      <parentid>50232</parentid>
      <timestamp>2013-06-01T06:15:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1133">{{cpp/numeric/complex/title|operator+{{dsc small|(unary)}}, operator-{{dsc small|(unary)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator+( const complex&lt;T&gt;&amp; val );
}}
{{dcl | num=2 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator-( const complex&lt;T&gt;&amp; val );
}}
{{dcl end}}

Implements the analogs of the unary arithmetic operators for complex numbers.
@1@ Returns the value of its argument
@2@ Negates the argument

===Parameters===
{{par begin}}
{{par | val | the complex number argument}}
{{par end}}

===Return value===
@1@ a copy of the argument, {{c|complex&lt;T&gt;(val)}}
@2@ negated argument, {{c|complex&lt;T&gt;(-val.real(), -val.imag())}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith3}}
{{dsc end}}

[[de:cpp/numeric/complex/operator arith2]]
[[es:cpp/numeric/complex/operator arith2]]
[[fr:cpp/numeric/complex/operator arith2]]
[[it:cpp/numeric/complex/operator arith2]]
[[ja:cpp/numeric/complex/operator arith2]]
[[pt:cpp/numeric/complex/operator arith2]]
[[ru:cpp/numeric/complex/operator arith2]]
[[zh:cpp/numeric/complex/operator arith2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/operator arith3</title>
    <ns>0</ns>
    <id>9265</id>
    <revision>
      <id>81213</id>
      <parentid>67490</parentid>
      <timestamp>2015-10-06T21:29:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on integer-complex arithmetic (http://stackoverflow.com/questions/32969970)</comment>
      <text xml:space="preserve" bytes="3565">{{title|operator+,-,*,/ {{small|(std::complex)}} }}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator+( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=2 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator+( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl | num=3 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator+( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=4 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator-( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=5 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator-( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl | num=6 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator-( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=7 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator*( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=8 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator*( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl | num=9 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator*( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=10 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator/( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=11 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator/( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl | num=12 | 1=
template&lt; class T &gt;
complex&lt;T&gt; operator/( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl end}}

Implements the binary operators for complex arithmetic and for mixed complex/scalar arithmetic. Scalar arguments are treated as complex numbers with the real part equal to the argument and the imaginary part set to zero.

@1-3@ Returns the sum of its arguments
@4-6@ Returns the result of subtracting {{tt|rhs}} from {{tt|lhs}}
@7-9@ Multiplies its arguments
@10-12@ Divides {{tt|lhs}} by {{tt|rhs}}

===Parameters===
{{par begin}}
{{par | lhs, rhs | the arguments: either both complex numbers or one complex and one scalar of matching type ({{c|float}}, {{c|double}}, {{c|long double}})}}
{{par end}}

===Return value===
@1-3@ {{c|1= complex&lt;T&gt;(lhs) += rhs }}
@4-6@ {{c|1= complex&lt;T&gt;(lhs) -= rhs }}
@7-9@ {{c|1= complex&lt;T&gt;(lhs) *= rhs }}
@10-12@ {{c|1= complex&lt;T&gt;(lhs) /= rhs }}

===Notes===
Because [[cpp/language/template_argument_deduction|template argument deduction]] does not consider implicit conversions, these operators cannot be used for mixed integer/complex arithmetic. In all cases, the scalar must have the same type as the underlying type of the complex number.

===Example===
{{example | 
 | code=
#include &lt;iostream&gt;
#include &lt;complex&gt;
int main()
{
    std::complex&lt;double&gt; c2(2, 0);
    std::complex&lt;double&gt; ci(0, 1);

    std::cout &lt;&lt; ci &lt;&lt; &quot; + &quot; &lt;&lt; c2 &lt;&lt; &quot; = &quot; &lt;&lt; ci+c2 &lt;&lt; '\n'
              &lt;&lt; ci &lt;&lt; &quot; * &quot; &lt;&lt; ci &lt;&lt; &quot; = &quot; &lt;&lt; ci*ci &lt;&lt; '\n'
              &lt;&lt; ci &lt;&lt; &quot; + &quot; &lt;&lt; c2 &lt;&lt; &quot; / &quot; &lt;&lt; ci &lt;&lt; &quot; = &quot; &lt;&lt; ci+c2/ci &lt;&lt; '\n'
              &lt;&lt; 1  &lt;&lt; &quot; / &quot; &lt;&lt; ci &lt;&lt; &quot; = &quot; &lt;&lt; 1./ci &lt;&lt; '\n';

//    std::cout &lt;&lt; 1.f/ci; // compile error
//    std::cout &lt;&lt; 1/ci; // compile error
}
 | output=
(0,1) + (2,0) = (2,1)
(0,1) * (0,1) = (-1,0)
(0,1) + (2,0) / (0,1) = (0,-1)
1 / (0,1) = (0,-1)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith}}
{{dsc inc | cpp/numeric/complex/dsc operator_arith2}}
{{dsc end}}

[[de:cpp/numeric/complex/operator arith3]]
[[es:cpp/numeric/complex/operator arith3]]
[[fr:cpp/numeric/complex/operator arith3]]
[[it:cpp/numeric/complex/operator arith3]]
[[ja:cpp/numeric/complex/operator arith3]]
[[pt:cpp/numeric/complex/operator arith3]]
[[ru:cpp/numeric/complex/operator arith3]]
[[zh:cpp/numeric/complex/operator arith3]]</text>
      <sha1>nfbeg90gtikrghbem2r88743x6ef9s3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/operator cmp</title>
    <ns>0</ns>
    <id>9941</id>
    <revision>
      <id>64642</id>
      <parentid>64641</parentid>
      <timestamp>2013-08-24T13:18:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>-note</comment>
      <text xml:space="preserve" bytes="2423">{{title|1=operator==,!={{dsc small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++14 | 1=
template&lt; class T &gt;
bool operator==( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=1 | since=c++14 | 1=
template&lt; class T &gt;
constexpr bool operator==( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=2 | until=c++14 | 1=
template&lt; class T &gt;
bool operator==( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl | num=2 | since=c++14 | 1=
template&lt; class T &gt;
constexpr bool operator==( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=3 | until=c++14 | 1=
template&lt; class T &gt;
bool operator==( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=3 | since=c++14 | 1=
template&lt; class T &gt;
constexpr bool operator==( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=4 | until=c++14 | 1=
template&lt; class T &gt;
bool operator!=( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=4 | since=c++14 | 1=
template&lt; class T &gt;
constexpr bool operator!=( const complex&lt;T&gt;&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=5 | until=c++14 | 1=
template&lt; class T &gt;
bool operator!=( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl | num=5 | since=c++14 | 1=
template&lt; class T &gt;
constexpr bool operator!=( const complex&lt;T&gt;&amp; lhs, const T&amp; rhs);
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=6 | until=c++14 | 1=
template&lt; class T &gt;
bool operator!=( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl | num=6 | since=c++14 | 1=
template&lt; class T &gt;
constexpr bool operator!=( const T&amp; lhs, const complex&lt;T&gt;&amp; rhs);
}}
{{dcl rev end}}
{{dcl end}}
Compares two complex numbers. Scalar arguments are treated as complex numbers with the real part equal to the argument and the imaginary part set to zero.

@1-3@ Compares {{tt|lhs}} and {{tt|rhs}} for equality.
@4-6@ Compares {{tt|lhs}} and {{tt|rhs}} for inequality.

===Parameters===
{{par begin}}
{{par | lhs, rhs | the arguments to compare: either both complex numbers or one complex and one scalar of matching type ({{c|float}}, {{c|double}}, {{c|long double}})}}
{{par end}}

===Return value===
@1-3@ {{c|true}} if respective parts of {{tt|lhs}} are equal to {{tt|rhs}}, {{tt|false}} otherwise.
@4-6@ {{c|1=!(lhs == rhs)}}

===Example===
{{example}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/operator ltltgtgt</title>
    <ns>0</ns>
    <id>9616</id>
    <revision>
      <id>63730</id>
      <parentid>50235</parentid>
      <timestamp>2013-07-23T18:14:26Z</timestamp>
      <contributor>
        <ip>79.210.59.110</ip>
      </contributor>
      <comment>corrected os to is in description of 2)</comment>
      <text xml:space="preserve" bytes="1911">{{title|operator&lt;&lt;,&gt;&gt;{{dsc small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | num=1 |
template &lt;class T, class CharT, class Traits&gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp; 
    operator&lt;&lt;(std::basic_ostream&lt;CharT, Traits&gt;&amp; os, 
               const std::complex&lt;T&gt;&amp; x);
}}
{{dcl | num=2 |
template &lt;class T, class CharT, class Traits&gt;
std::basic_istream&lt;CharT, Traits&gt;&amp; 
    operator&gt;&gt;(std::basic_istream&lt;CharT, Traits&gt;&amp; is, 
               std::complex&lt;T&gt;&amp; x);
}}
{{dcl end}}

@1@ Writes to {{c|os}} the complex number in the form {{c|(real,imaginary)}}.
@2@ Reads a complex number from {{c|is}}. The supported formats are 
*{{c|real}}
*{{c|(real)}}
*{{c|(real,imaginary)}}
Where the input for {{c|real}} and {{c|imaginary}} must be convertible to {{c|T}}.
If an error occurs calls {{c|is.setstate(ios_base::failbit)}}

===Exceptions===
May throw {{lc|std::ios_base::failure}} on stream errors.

===Parameters===
{{par begin}}
{{par | os | a character output stream}}
{{par | is | a character input stream}}
{{par | x | the complex number to be inserted or extracted}}
{{par end}}

===Return value===
@1@ {{c|os}}

@2@ {{c|is}}

===Notes===
@1@ As the comma may be used in the current locale as decimal separator, the output may be ambiguous. This can be solved with {{lc|std::showpoint}} which forces the decimal separator to be visible.
@2@ The input is performed as a series of simple formatted extractions. Whitespace skipping is the same for each of them.

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T, class charT, class traits&gt;
basic_ostream&lt;charT, traits&gt;&amp; 
operator&lt;&lt;(basic_ostream&lt;charT, traits&gt;&amp; o, const complex&lt;T&gt;&amp; x) {
    basic_ostringstream&lt;charT, traits&gt; s;
    s.flags(o.flags());
    s.imbue(o.getloc());
    s.precision(o.precision());
    s &lt;&lt; ’(’ &lt;&lt; x.real() &lt;&lt; &quot;,&quot; &lt;&lt; x.imag() &lt;&lt; ’)’;
    return o &lt;&lt; s.str();
}

}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/operator&quot;&quot;i</title>
    <ns>0</ns>
    <id>13555</id>
    <revision>
      <id>87500</id>
      <parentid>87499</parentid>
      <timestamp>2016-08-30T03:09:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 87499 by [[Special:Contributions/113.102.165.87|113.102.165.87]] ([[User talk:113.102.165.87|talk]]) back to standard (26.5.10[complex.literals])</comment>
      <text xml:space="preserve" bytes="3475">{{cpp/title|n=literals::complex_literals::|operator&quot;&quot;i, operator&quot;&quot;if, operator&quot;&quot;il }}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | num=1 | since=c++14 | 1=
constexpr complex&lt;double&gt; operator&quot;&quot;i(long double arg);
constexpr complex&lt;double&gt; operator&quot;&quot;i(unsigned long long arg);
}}
{{dcl | num=2 | since=c++14 | 1=
constexpr complex&lt;float&gt; operator&quot;&quot;if(long double arg);
constexpr complex&lt;float&gt; operator&quot;&quot;if(unsigned long long arg);
}}
{{dcl | num=3 | since=c++14 | 1=
constexpr complex&lt;long double&gt; operator&quot;&quot;il(long double arg);
constexpr complex&lt;long double&gt; operator&quot;&quot;il(unsigned long long arg);
}}
{{dcl end}}

Forms a {{lc|std::complex}} literal representing an imaginary number.

@1@ forms a literal {{c|std::complex&lt;double&gt;}} with the real part zero and imaginary part {{tt|arg}}
@2@ forms a literal {{c|std::complex&lt;float&gt;}} with the real part zero and imaginary part {{tt|arg}}
@3@ forms a literal {{c|std::complex&lt;long double&gt;}} with the real part zero and imaginary part {{tt|arg}}

===Parameters===
{{par begin}}
{{par | arg | the value of the imaginary number}}
{{par end}}

===Return value===
The {{lc|std::complex}} literal with the real part zero and imaginary part {{tt|arg}}

===Notes===
These operators are declared in the namespace {{c|std::literals::complex_literals}}, where both {{tt|literals}} and {{tt|complex_literals}} are inline namespaces. Access to these operators can be gained with {{c|using namespace std::literals}}, {{c|using namespace std::complex_literals}}, and {{c|using namespace std::literals::complex_literals}}.

Even though {{c|if}} is a [[cpp/keywords/if|keyword]] in C++, it is a {{spar|ud-suffix}} of the [[cpp/language/user_literal|literal operator]] of the form {{c|operator &quot;&quot;if}} and in the literal expressions such as {{c|1if}} or {{c|1.0if}} because it is not separated by whitespace and is not a standalone token.

===Possible implementation===
{{eq fun
 | 1=
constexpr std::complex&lt;double&gt; operator&quot;&quot;i(unsigned long long d)
{
    return std::complex&lt;double&gt;{0.0, static_cast&lt;double&gt;(d)};
}
constexpr std::complex&lt;double&gt; operator&quot;&quot;i(long double d)
{
    return std::complex&lt;double&gt;{0.0, static_cast&lt;double&gt;(d)};
}
 |2=
constexpr std::complex&lt;float&gt; operator&quot;&quot;if(unsigned long long d)
{
    return std::complex&lt;float&gt;{0.0f, static_cast&lt;float&gt;(d)};
}
constexpr std::complex&lt;float&gt; operator&quot;&quot;if(long double d)
{
    return std::complex&lt;float&gt;{0.0f, static_cast&lt;float&gt;(d)};
}
 |3=
constexpr std::complex&lt;long double&gt; operator&quot;&quot;il(unsigned long long d)
{
    return std::complex&lt;long double&gt;{0.0L, static_cast&lt;long double&gt;(d)};
}
constexpr std::complex&lt;long double&gt; operator&quot;&quot;il(long double d)
{
    return std::complex&lt;long double&gt;{0.0L, d};
}
}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    using namespace std::complex_literals;
    std::complex&lt;double&gt; c = 1.0 + 1i;
    std::cout &lt;&lt; &quot;abs&quot; &lt;&lt; c &lt;&lt; &quot; = &quot; &lt;&lt; abs(c) &lt;&lt; '\n';
}
| output=
abs(1,1) = 1.41421
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc complex}}
{{dsc inc | cpp/numeric/complex/dsc operator{{=}}}}
{{dsc see c | c/numeric/complex/I}}
{{dsc end}}

[[de:cpp/numeric/complex/operator&quot;&quot;i]]
[[es:cpp/numeric/complex/operator&quot;&quot;i]]
[[fr:cpp/numeric/complex/operator&quot;&quot;i]]
[[it:cpp/numeric/complex/operator&quot;&quot;i]]
[[ja:cpp/numeric/complex/operator&quot;&quot;i]]
[[pt:cpp/numeric/complex/operator&quot;&quot;i]]
[[ru:cpp/numeric/complex/operator&quot;&quot;i]]
[[zh:cpp/numeric/complex/operator&quot;&quot;i]]</text>
      <sha1>lcwai8tuf9yo6436cm3dua8veu6p2ci</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/operator=</title>
    <ns>0</ns>
    <id>9939</id>
    <revision>
      <id>77764</id>
      <parentid>71290</parentid>
      <timestamp>2015-04-07T15:06:10Z</timestamp>
      <contributor>
        <username>Bear</username>
        <id>408</id>
      </contributor>
      <comment>Template function according to the standard.</comment>
      <text xml:space="preserve" bytes="776">{{cpp/numeric/complex/title|operator{{=}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
complex&lt;T&gt;&amp; operator=( const T&amp; x );
}}
{{dcl | num=2 | 1=
template&lt; class X &gt;
complex&lt;T&gt;&amp; operator=( const complex&lt;X&gt;&amp; cx );
}}
{{dcl end}}

Assigns new values to the contents.

@1@ Assigns {{tt|x}} to the real part of the complex number. Imaginary part is set to zero.

@2@ Assigns {{tt|cx.real()}} and {{tt|cx.imag()}} to the real and the imaginary parts of the complex number respectively.

===Parameters===
{{par begin}}
{{par | x | value to assign}}
{{par | cx | complex value to assign}}
{{par end}}

===Return value===
{{c|*this}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc complex}}
{{dsc inc | cpp/numeric/dsc operator&quot;&quot;i}}
{{dsc end}}</text>
      <sha1>sqwnofjazqscbnmz1b4dko80vw8efv7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/polar</title>
    <ns>0</ns>
    <id>8528</id>
    <revision>
      <id>78529</id>
      <parentid>78528</parentid>
      <timestamp>2015-05-24T15:11:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>stray }</comment>
      <text xml:space="preserve" bytes="963">{{cpp/title|polar{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
complex&lt;T&gt; polar( const T&amp; r, const T&amp; theta = 0 );
}}

Returns a complex number with magnitude {{tt|r}} and phase angle {{tt|theta}}.

{{rev begin}}
{{rev|since=c++17|
The behavior is undefined if {{tt|r}} is negative or NaN, or if {{tt|theta}} is infinite}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | r | magnitude}}
{{par | theta | phase angle}}
{{par end}}

===Return value===

a complex number determined by {{tt|r}} and {{tt|theta}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/complex/dsc arg}}
{{dsc end}}

[[de:cpp/numeric/complex/polar]]
[[es:cpp/numeric/complex/polar]]
[[fr:cpp/numeric/complex/polar]]
[[it:cpp/numeric/complex/polar]]
[[ja:cpp/numeric/complex/polar]]
[[pt:cpp/numeric/complex/polar]]
[[ru:cpp/numeric/complex/polar]]
[[zh:cpp/numeric/complex/polar]]</text>
      <sha1>trqsfso1pdqzwujclhc76rddpbhdzb5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/pow</title>
    <ns>0</ns>
    <id>4070</id>
    <revision>
      <id>73203</id>
      <parentid>70893</parentid>
      <timestamp>2014-10-17T03:52:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>detail, example</comment>
      <text xml:space="preserve" bytes="2956">{{cpp/title|pow{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | 1=
template&lt; class T &gt; 
complex&lt;T&gt; pow( const complex&lt;T&gt;&amp; x, const complex&lt;T&gt;&amp; y);
}}
{{dcl | 1=
template&lt; class T &gt; 
complex&lt;T&gt; pow( const complex&lt;T&gt;&amp; x, const T&amp; y);
}}
{{dcl | 1=
template&lt; class T &gt; 
complex&lt;T&gt; pow( const T&amp; x, const complex&lt;T&gt;&amp; y);
}}
{{dcl | since=c++11 | 1=
template&lt; class T, class U &gt; 
complex&lt;/*Promoted*/&gt; pow( const complex&lt;T&gt;&amp; x, const complex&lt;U&gt;&amp; y);
}}
{{dcl | since=c++11 | 1=
template&lt; class T, class U &gt; 
complex&lt;/*Promoted*/&gt; pow( const complex&lt;T&gt;&amp; x, const U&amp; y);
}}
{{dcl | since=c++11 | 1=
template&lt; class T, class U &gt; 
complex&lt;/*Promoted*/&gt; pow( const T&amp; x, const complex&lt;U&gt;&amp; y);
}}
{{dcl end}}

Computes complex {{tt|x}} raised to a complex power {{tt|y}} with a branch cut along the negative real axis for the first argument.

{{mark since c++11}}Additional overloads are provided for all arithmetic types, such that
:1. If either argument is {{c|long double}} or {{c|std::complex&lt;long double&gt;}}, then both arguments are cast to {{c|std::complex&lt;long double&gt;}} 
:2. Otherwise, if either argument is {{c|double}}, {{c|std::complex&lt;double&gt;}} or integer type, then both arguments are cast to {{c|std::complex&lt;double&gt;}} 
:3. Otherwise, if either argument is {{c|float}} or {{c|std::complex&lt;float&gt;}}, then both arguments are cast to {{c|std::complex&lt;float&gt;}} 

===Parameters===
{{par begin}}
{{par | x | base as a complex value}}
{{par | y | exponent as a complex value}}
{{par end}}

===Return value===
If no errors occur, the complex power {{math|x{{su|p=y}}}}, is returned.

Errors and special cases are handled as if the operation is implemented by {{c|std::exp(y*std::log(x))}}

The result of {{c|std::pow(0, 0)}} is implementation-defined.

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;

    std::complex&lt;double&gt; z(1, 2);
    std::cout &lt;&lt; &quot;(1,2)^2 = &quot; &lt;&lt; std::pow(z, 2) &lt;&lt; '\n';

    std::complex&lt;double&gt; z2(-1, 0);  // square root of -1
    std::cout &lt;&lt; &quot;-1^0.5 = &quot; &lt;&lt; std::pow(z2, 0.5) &lt;&lt; '\n';

    std::complex&lt;double&gt; z3(-1, -0.0);  // other side of the cut
    std::cout &lt;&lt; &quot;(-1, -0)^0.5 = &quot; &lt;&lt; std::pow(z3, 0.5) &lt;&lt; '\n';

    std::complex&lt;double&gt; i(0, 1); // i^i = exp(-pi/2)
    std::cout &lt;&lt; &quot;i^i = &quot; &lt;&lt; std::pow(i, i) &lt;&lt; '\n';
}
|output=
(1,2)^2 = (-3.000000,4.000000)
-1^0.5 = (0.000000,1.000000)
(-1, -0)^0.5 = (0.000000,-1.000000)
i^i = (0.207880,0.000000)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc sqrt}}
{{dsc inc | cpp/numeric/math/dsc pow}}
{{dsc inc | cpp/numeric/valarray/dsc pow}}
{{dsc see c | c/numeric/complex/cpow}}
{{dsc end}}

[[de:cpp/numeric/complex/pow]]
[[es:cpp/numeric/complex/pow]]
[[fr:cpp/numeric/complex/pow]]
[[it:cpp/numeric/complex/pow]]
[[ja:cpp/numeric/complex/pow]]
[[pt:cpp/numeric/complex/pow]]
[[ru:cpp/numeric/complex/pow]]
[[zh:cpp/numeric/complex/pow]]</text>
      <sha1>58ybiinveygn872odwcklicq08w1hmz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/proj</title>
    <ns>0</ns>
    <id>8527</id>
    <revision>
      <id>83673</id>
      <parentid>73540</parentid>
      <timestamp>2016-03-07T08:57:09Z</timestamp>
      <contributor>
        <ip>223.104.4.55</ip>
      </contributor>
      <text xml:space="preserve" bytes="2439">{{cpp/title|proj{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; proj( const complex&lt;T&gt;&amp; z );
}}
{{dcl | num=2 | since=c++11 | 1=
std::complex&lt;long double&gt; proj( long double z );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class DoubleOrInteger &gt;
std::complex&lt;double&gt; proj( DoubleOrInteger z );
}}
{{dcl | num=4 | since=c++11 | 1=
std::complex&lt;float&gt; proj( float z );
}}
{{dcl end}}

Returns the projection of the complex number {{tt|z}} onto the Riemann sphere.

For most {{tt|z}}, {{c|1=std::proj(z)==z}}, but all complex infinities, even the numbers where one component is infinite and the other is NaN, become positive real infinity, {{c|(INFINITY, 0)}} or {{c|(INFINITY, -0)}}. The sign of the imaginary (zero) component is the sign of {{c|std::imag(z)}}. 

Additional overloads are provided for {{c|float}}, {{c|double}}, {{c|long double}}, and all integer types, which are treated as complex numbers with zero imaginary component.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

the projection of {{tt|z}} onto the Riemann sphere

===Notes===
The {{lc|proj}} function helps model the Riemann sphere by mapping all infinities to one (give or take the sign of the imaginary zero), and should be used just before any operation, especially comparisons, that might give spurious results for any of the other infinities.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::complex&lt;double&gt; c1(1, 2);
    std::cout &lt;&lt; &quot;proj&quot; &lt;&lt; c1 &lt;&lt; &quot; = &quot; &lt;&lt; std::proj(c1) &lt;&lt; '\n';

    std::complex&lt;double&gt; c2(INFINITY, -1);
    std::cout &lt;&lt; &quot;proj&quot; &lt;&lt; c2 &lt;&lt; &quot; = &quot; &lt;&lt; std::proj(c2) &lt;&lt; '\n';

    std::complex&lt;double&gt; c3(0, -INFINITY);
    std::cout &lt;&lt; &quot;proj&quot; &lt;&lt; c3 &lt;&lt; &quot; = &quot; &lt;&lt; std::proj(c3) &lt;&lt; '\n';
}
 | output=
proj(1,2) = (1,2)
proj(inf,-1) = (inf,-0)
proj(0,-inf) = (inf,-0)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/complex/dsc norm}}
{{dsc inc | cpp/numeric/complex/dsc polar}}
{{dsc see c | c/numeric/complex/cproj}}
{{dsc end}}

[[de:cpp/numeric/complex/proj]]
[[es:cpp/numeric/complex/proj]]
[[fr:cpp/numeric/complex/proj]]
[[it:cpp/numeric/complex/proj]]
[[ja:cpp/numeric/complex/proj]]
[[pt:cpp/numeric/complex/proj]]
[[ru:cpp/numeric/complex/proj]]
[[zh:cpp/numeric/complex/proj]]</text>
      <sha1>risyda94tiu6kw5x8gcbcj6mvpxw4xh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/real</title>
    <ns>0</ns>
    <id>3546</id>
    <revision>
      <id>71599</id>
      <parentid>64693</parentid>
      <timestamp>2014-06-14T22:01:08Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+link to real2</comment>
      <text xml:space="preserve" bytes="1963">{{cpp/numeric/complex/title|real}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl h|primary template complex&lt;T&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++14 | 1=
T real() const;
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr T real() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void real( T value );
}}
{{dcl h|specialization complex&lt;float&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 | 1=
float real() const;
}}
{{dcl | num=1 | since=c++11 | until=c++14 | 1=
constexpr float real();
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr float real() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void real( float value );
}}

{{dcl h|specialization complex&lt;double&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 | 1=
double real() const;
}}
{{dcl | num=1 | since=c++11 | until=c++14 | 1=
constexpr double real();
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr double real() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void real( double value );
}}

{{dcl h|specialization complex&lt;long double&gt;}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++11 | 1=
long double real() const;
}}
{{dcl | num=1 | since=c++11 | until=c++14 | 1=
constexpr long double real();
}}
{{dcl | num=1 | since=c++14 | 1=
constexpr long double real() const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
void real( long double value );
}}

{{dcl end}}

Accesses the real part of the complex number. 

@1@ Returns the real part.

@2@ Sets the real part to {{tt|value}}.

===Parameters===
{{par begin}}
{{par | value | the value to set the real part to}}
{{par end}}

===Return value===
@1@ The real part.

@2@ (none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc real2}}
{{dsc inc | cpp/numeric/complex/dsc imag}}
{{dsc end}}

[[de:cpp/numeric/complex/real]]
[[es:cpp/numeric/complex/real]]
[[fr:cpp/numeric/complex/real]]
[[it:cpp/numeric/complex/real]]
[[ja:cpp/numeric/complex/real]]
[[pt:cpp/numeric/complex/real]]
[[ru:cpp/numeric/complex/real]]
[[zh:cpp/numeric/complex/real]]</text>
      <sha1>r20ttdkcf4wvzffd9os4z2j3t8krkxn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/real2</title>
    <ns>0</ns>
    <id>8521</id>
    <revision>
      <id>79224</id>
      <parentid>71601</parentid>
      <timestamp>2015-06-29T08:10:53Z</timestamp>
      <contributor>
        <ip>128.93.44.83</ip>
      </contributor>
      <comment>Typo</comment>
      <text xml:space="preserve" bytes="1417">{{cpp/title|real{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++14 | 1=
template&lt; class T &gt; 
T real( const complex&lt;T&gt;&amp; z );
}}
{{dcl | num=1 | since=c++14 | 1=
template&lt; class T &gt; 
constexpr T real( const complex&lt;T&gt;&amp; z );
}}
{{dcl rev end}}
{{dcl | num=2 | since=c++11 | 1=
long double real( long double z );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class DoubleOrInteger &gt;
double real( DoubleOrInteger z );
}}
{{dcl | num=4 | since=c++11 | 1=
float real( float z );
}}
{{dcl end}}

Returns the real component of the complex number {{tt|z}}, i.e. {{c|z.real()}}.

{{rev inl|since=c++11|Additional overloads are provided for {{c|float}}, {{c|double}}, {{c|long double}}, and all integer types, which are treated as complex numbers with zero imaginary component.}}

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

the real component of {{tt|z}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc real}}
{{dsc inc | cpp/numeric/complex/dsc imag2}}
{{dsc see c | c/numeric/complex/creal}}
{{dsc end}}

[[de:cpp/numeric/complex/real2]]
[[es:cpp/numeric/complex/real2]]
[[fr:cpp/numeric/complex/real2]]
[[it:cpp/numeric/complex/real2]]
[[ja:cpp/numeric/complex/real2]]
[[pt:cpp/numeric/complex/real2]]
[[ru:cpp/numeric/complex/real2]]
[[zh:cpp/numeric/complex/real2]]</text>
      <sha1>5pdb58eklzrlg7vkwi6740rjwwkjxfj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/sin</title>
    <ns>0</ns>
    <id>4074</id>
    <revision>
      <id>73211</id>
      <parentid>73206</parentid>
      <timestamp>2014-10-18T01:24:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to sinh</comment>
      <text xml:space="preserve" bytes="1933">{{cpp/title|sin{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
complex&lt;T&gt; sin( const complex&lt;T&gt;&amp; z );
}}

Computes complex sine of a complex value {{tt|z}}.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, the complex sine of {{tt|z}} is returned.

Errors and special cases are handled as if the operation is implemented by {{tt|-i * [[cpp/numeric/complex/sinh|std::sinh]](i*z)}}, where {{tt|i}} is the imaginary unit.

===Notes===
The sine is an entire function on the complex plane, and has no branch cuts.

Mathematical definition of the sine is {{math|sin z {{=}} {{mfrac|e{{su|p=iz}}-e{{su|p=-iz}}|2i}}}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z(1, 0); // behaves like real sine along the real line
    std::cout &lt;&lt; &quot;sin&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; std::sin(z)
              &lt;&lt; &quot; ( sin(1) = &quot; &lt;&lt; std::sin(1) &lt;&lt; &quot;)\n&quot;;

    std::complex&lt;double&gt; z2(0, 1); // behaves like sinh along the imaginary line
    std::cout &lt;&lt; &quot;sin&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; std::sin(z2)
              &lt;&lt; &quot; (sinh(1) = &quot; &lt;&lt; std::sinh(1) &lt;&lt; &quot;)\n&quot;;
}
|output=
sin(1.000000,0.000000) = (0.841471,0.000000) ( sin(1) = 0.841471)
sin(0.000000,1.000000) = (0.000000,1.175201) (sinh(1) = 1.175201)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc cos}}
{{dsc inc | cpp/numeric/complex/dsc tan}}
{{dsc inc | cpp/numeric/complex/dsc asin}}
{{dsc inc | cpp/numeric/math/dsc sin}}
{{dsc inc | cpp/numeric/valarray/dsc sin}}
{{dsc see c | c/numeric/complex/csin}}
{{dsc end}}

[[de:cpp/numeric/complex/sin]]
[[es:cpp/numeric/complex/sin]]
[[fr:cpp/numeric/complex/sin]]
[[it:cpp/numeric/complex/sin]]
[[ja:cpp/numeric/complex/sin]]
[[pt:cpp/numeric/complex/sin]]
[[ru:cpp/numeric/complex/sin]]
[[zh:cpp/numeric/complex/sin]]</text>
      <sha1>pjeg3v7axyhx02ckuwi763oilecyjs4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/sinh</title>
    <ns>0</ns>
    <id>8515</id>
    <revision>
      <id>73247</id>
      <parentid>70883</parentid>
      <timestamp>2014-10-20T00:03:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>details, example</comment>
      <text xml:space="preserve" bytes="3427">{{cpp/title|sinh{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; sinh( const complex&lt;T&gt;&amp; z );
}}

Computes complex hyperbolic sine of a complex value {{tt|z}}. 

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, complex hyperbolic sine of {{tt|z}} is returned

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::sinh(std::conj(z)) {{==}} std::conj(std::sinh(z))}}
* {{c|std::sinh(z) {{==}} -std::sinh(-z)}}
* If {{tt|z}} is {{tt|(+0,+0)}}, the result is {{tt|(+0,+0)}}
* If {{tt|z}} is {{tt|(+0,+∞)}}, the result is {{tt|(±0,NaN)}} (the sign of the real part is unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|(+0,NaN)}}, the result is {{tt|(±0,NaN)}}
* If {{tt|z}} is {{tt|(x,+∞)}} (for any positive finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|(x,NaN)}} (for any positive finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(+∞,+0)}}, the result is {{tt|(+∞,+0)}}
* If {{tt|z}} is {{tt|(+∞,y)}} (for any positive finite y), the result is {{tt|(+∞,cis(y))}}
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(±∞,NaN)}} (the sign of the real part is  unspecified) and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|(+∞,NaN)}}, the result is {{tt|(±∞,NaN)}} (the sign of the real part is  unspecified)
* If {{tt|z}} is {{tt|(NaN,+0)}}, the result is {{tt|(NaN,+0)}}
* If {{tt|z}} is {{tt|(NaN,y)}} (for any finite nonzero y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

where {{math|cis(y)}} is {{math|cos(y) + i sin(y)}}

===Notes===
Mathematical definition of hyperbolic sine is {{math|sinh z {{=}} {{mfrac|e{{su|p=z}}-e{{su|p=-z}}|2}}}}

Hyperbolic sine is an entire function in the complex plane and has no branch cuts. It is periodic with respect to the imaginary component, with period 2&amp;pi;i 

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z(1, 0); // behaves like real sinh along the real line
    std::cout &lt;&lt; &quot;sinh&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; std::sinh(z)
              &lt;&lt; &quot; (sinh(1) = &quot; &lt;&lt; std::sinh(1) &lt;&lt; &quot;)\n&quot;;

    std::complex&lt;double&gt; z2(0, 1); // behaves like sine along the imaginary line
    std::cout &lt;&lt; &quot;sinh&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; std::sinh(z2)
              &lt;&lt; &quot; ( sin(1) = &quot; &lt;&lt; std::sin(1) &lt;&lt; &quot;)\n&quot;;
}
|output=
sinh(1.000000,0.000000) = (1.175201,0.000000) (sinh(1) = 1.175201)
sinh(0.000000,1.000000) = (0.000000,0.841471) ( sin(1) = 0.841471)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc cosh}}
{{dsc inc | cpp/numeric/complex/dsc tanh}}
{{dsc inc | cpp/numeric/complex/dsc asinh}}
{{dsc inc | cpp/numeric/math/dsc sinh}}
{{dsc inc | cpp/numeric/valarray/dsc sinh}}
{{dsc see c | c/numeric/complex/csinh}}
{{dsc end}}

[[de:cpp/numeric/complex/sinh]]
[[es:cpp/numeric/complex/sinh]]
[[fr:cpp/numeric/complex/sinh]]
[[it:cpp/numeric/complex/sinh]]
[[ja:cpp/numeric/complex/sinh]]
[[pt:cpp/numeric/complex/sinh]]
[[ru:cpp/numeric/complex/sinh]]
[[zh:cpp/numeric/complex/sinh]]</text>
      <sha1>2qj8gvfrv5oilcv1zsrmmn56f7k683j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/sqrt</title>
    <ns>0</ns>
    <id>8514</id>
    <revision>
      <id>73155</id>
      <parentid>73147</parentid>
      <timestamp>2014-10-15T21:27:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention the default side of the cut since it's in normative C++</comment>
      <text xml:space="preserve" bytes="2739">{{cpp/title|sqrt{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{dcl begin}}
{{dcl header | complex}}
{{dcl | 1=
template&lt; class T &gt; 
complex&lt;T&gt; sqrt( const complex&lt;T&gt;&amp; z );
}}
{{dcl end}}

Computes the square root of the complex number {{tt|z}} with a branch cut along the negative real axis. 

===Parameters===
{{par begin}}
{{par | z | complex number to take the square root of}}
{{par end}}

===Return value===
If no errors occur, returns the square root of {{tt|z}}, in the range of the right half-plane, including the imaginary axis ({{math|[0; +∞)}} along the real axis and {{math|(−∞; +∞)}} along the imaginary axis.)

If the argument is a negative real number, the result lies on the positive imaginary axis.

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* The function is continuous onto the branch cut taking into account the sign of imaginary part
* {{c|std::sqrt(std::conj(z)) {{==}} std::conj(std::sqrt(z))}}
* If {{tt|z}} is {{tt|(±0,+0)}}, the result is {{tt|(+0,+0)}}
* If {{tt|z}} is {{tt|(x,+∞)}}, the result is {{tt|(+∞,+∞)}} even if x is NaN
* If {{tt|z}} is {{tt|(x,NaN)}}, the result is {{tt|(NaN,NaN)}} (unless x is ±∞) and  {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(-∞,y)}}, the result is {{tt|(+0,+∞)}} for finite positive y
* If {{tt|z}} is {{tt|(+∞,y)}}, the result is {{tt|(+∞,+0)}} for finite positive y
* If {{tt|z}} is {{tt|(-∞,NaN)}}, the result is {{tt|(NaN,∞)}} (sign of imaginary part unspecified)
* If {{tt|z}} is {{tt|(+∞,NaN)}}, the result is {{tt|(+∞,NaN)}}
* If {{tt|z}} is {{tt|(NaN,y)}}, the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; &quot;Square root of -4 is &quot;
              &lt;&lt; std::sqrt(std::complex&lt;double&gt;(-4, 0)) &lt;&lt; '\n'
              &lt;&lt; &quot;Square root of (-4,-0), the other side of the cut, is &quot;
              &lt;&lt; std::sqrt(std::complex&lt;double&gt;(-4, -0.0)) &lt;&lt; '\n';
}
|output=
Square root of -4 is (0,2)
Square root of (-4,-0), the other side of the cut, is (0,-2)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc pow}}
{{dsc inc | cpp/numeric/math/dsc sqrt}}
{{dsc inc | cpp/numeric/valarray/dsc sqrt}}
{{dsc see c | c/numeric/complex/csqrt}}
{{dsc end}}

[[de:cpp/numeric/complex/sqrt]]
[[es:cpp/numeric/complex/sqrt]]
[[fr:cpp/numeric/complex/sqrt]]
[[it:cpp/numeric/complex/sqrt]]
[[ja:cpp/numeric/complex/sqrt]]
[[pt:cpp/numeric/complex/sqrt]]
[[ru:cpp/numeric/complex/sqrt]]
[[zh:cpp/numeric/complex/sqrt]]</text>
      <sha1>lltwnsqa6lk2zv7z3ggyeq66jhlvc6q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/tan</title>
    <ns>0</ns>
    <id>4076</id>
    <revision>
      <id>73260</id>
      <parentid>70888</parentid>
      <timestamp>2014-10-20T17:06:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>details</comment>
      <text xml:space="preserve" bytes="2293">{{cpp/title|tan{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | 1=
template&lt; class T &gt; 
complex&lt;T&gt; tan( const complex&lt;T&gt;&amp; z );
}}

Computes complex tangent of a complex value {{tt|z}}.

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, the complex tangent of {{tt|z}} is returned.

Errors and special cases are handled as if the operation is implemented by {{tt|-i * [[cpp/numeric/complex/tanh|std::tanh]](i*z)}}, where {{tt|i}} is the imaginary unit.

===Notes===
Tangent is an analytical function on the complex plain and has no branch cuts. It is periodic with respect to the real component, with period &amp;pi;i, and has poles of the first order along the real line, at coordinates {{math|(π(1/2 + n), 0)}}. However no common floating-point representation is able to represent π/2 exactly, thus there is no value of the argument for which a pole error occurs.

Mathematical definition of the tangent is {{math|tan z {{=}} {{mfrac|i(e{{su|p=-iz}}-e{{su|p=iz}})|e{{su|p=-iz}}+e{{su|p=iz}}}}}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z(1, 0); // behaves like real tangent along the real line
    std::cout &lt;&lt; &quot;tan&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; std::tan(z)
              &lt;&lt; &quot; ( tan(1) = &quot; &lt;&lt; std::tan(1) &lt;&lt; &quot;)\n&quot;;

    std::complex&lt;double&gt; z2(0, 1); // behaves like tanh along the imaginary line
    std::cout &lt;&lt; &quot;tan&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; std::tan(z2)
              &lt;&lt; &quot; (tanh(1) = &quot; &lt;&lt; std::tanh(1) &lt;&lt; &quot;)\n&quot;;
}
|output=
tan(1.000000,0.000000) = (1.557408,0.000000) ( tan(1) = 1.557408)
tan(0.000000,1.000000) = (0.000000,0.761594) (tanh(1) = 0.761594)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc sin}}
{{dsc inc | cpp/numeric/complex/dsc cos}}
{{dsc inc | cpp/numeric/complex/dsc atan}}
{{dsc inc | cpp/numeric/math/dsc tan}}
{{dsc inc | cpp/numeric/valarray/dsc tan}}
{{dsc see c | c/numeric/complex/ctan}}
{{dsc end}}

[[de:cpp/numeric/complex/tan]]
[[es:cpp/numeric/complex/tan]]
[[fr:cpp/numeric/complex/tan]]
[[it:cpp/numeric/complex/tan]]
[[ja:cpp/numeric/complex/tan]]
[[pt:cpp/numeric/complex/tan]]
[[ru:cpp/numeric/complex/tan]]
[[zh:cpp/numeric/complex/tan]]</text>
      <sha1>bg0sqndazjxxa4ndy6fheyi7dx1phkn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/complex/tanh</title>
    <ns>0</ns>
    <id>8517</id>
    <revision>
      <id>75346</id>
      <parentid>74692</parentid>
      <timestamp>2015-01-14T22:07:25Z</timestamp>
      <contributor>
        <ip>107.6.61.163</ip>
      </contributor>
      <comment>Correct typo</comment>
      <text xml:space="preserve" bytes="3729">{{cpp/title|tanh{{small|(std::complex)}}}}
{{cpp/numeric/complex/navbar}}
{{ddcl | header=complex | since=c++11 | 1=
template&lt; class T &gt; 
complex&lt;T&gt; tanh( const complex&lt;T&gt;&amp; z );
}}

Computes complex hyperbolic tangent of a complex value {{tt|z}}. 

===Parameters===
{{par begin}}
{{par | z | complex value}}
{{par end}}

===Return value===

If no errors occur, complex hyperbolic tangent of {{tt|z}} is returned

===Error handling and special values===
Errors are reported consistent with {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic,
* {{c|std::tanh(std::conj(z)) {{==}} std::conj(std::tanh(z))}}
* {{c|std::tanh(-z) {{==}} -std::tanh(z)}}
* If {{tt|z}} is {{tt|(+0,+0)}}, the result is {{tt|(+0,+0)}}
* If {{tt|z}} is {{tt|(x,+∞)}} (for any&lt;ref&gt;per [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1892.htm#dr_471 C11 DR471], this only holds for non-zero x. If {{tt|z}} is {{tt|(0,∞)}}, the result should be {{tt|(0,NaN)}}&lt;/ref&gt; finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} is raised
* If {{tt|z}} is {{tt|(x,NaN)}} (for any&lt;ref&gt;per [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1892.htm#dr_471 C11 DR471], this only holds for non-zero x. If {{tt|z}} is {{tt|(0,NaN)}}, the result should be {{tt|(0,NaN)}}&lt;/ref&gt; finite x), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(+∞,y)}} (for any finite positive y), the result is {{tt|(1,+0)}}
* If {{tt|z}} is {{tt|(+∞,+∞)}}, the result is {{tt|(1,±0)}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|(+∞,NaN)}}, the result is {{tt|(1,±0)}} (the sign of the imaginary part is unspecified)
* If {{tt|z}} is {{tt|(NaN,+0)}}, the result is {{tt|(NaN,+0)}}
* If {{tt|z}} is {{tt|(NaN,y)}} (for any non-zero y), the result is {{tt|(NaN,NaN)}} and {{lc|FE_INVALID}} may be raised
* If {{tt|z}} is {{tt|(NaN,NaN)}}, the result is {{tt|(NaN,NaN)}}
&lt;references/&gt;
===Notes===
Mathematical definition of hyperbolic tangent is {{math|tanh z {{=}} {{mfrac|e{{su|p=z}}-e{{su|p=-z}}|e{{su|p=z}}+e{{su|p=-z}}}}}}

Hyperbolic tangent is an analytical function on the complex plain and has no branch cuts. It is periodic with respect to the imaginary component, with period &amp;pi;i, and has poles of the first order along the imaginary line, at coordinates {{math|(0, π(1/2 + n))}}. However no common floating-point representation is able to represent π/2 exactly, thus there is no value of the argument for which a pole error occurs.

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;complex&gt;

int main()
{
    std::cout &lt;&lt; std::fixed;
    std::complex&lt;double&gt; z(1, 0); // behaves like real tanh along the real line
    std::cout &lt;&lt; &quot;tanh&quot; &lt;&lt; z &lt;&lt; &quot; = &quot; &lt;&lt; std::tanh(z)
              &lt;&lt; &quot; (tanh(1) = &quot; &lt;&lt; std::tanh(1) &lt;&lt; &quot;)\n&quot;;

    std::complex&lt;double&gt; z2(0, 1); // behaves like tangent along the imaginary line
    std::cout &lt;&lt; &quot;tanh&quot; &lt;&lt; z2 &lt;&lt; &quot; = &quot; &lt;&lt; std::tanh(z2)
              &lt;&lt; &quot; ( tan(1) = &quot; &lt;&lt; std::tan(1) &lt;&lt; &quot;)\n&quot;;
}
|output=
tanh(1.000000,0.000000) = (0.761594,0.000000) (tanh(1) = 0.761594)
tanh(0.000000,1.000000) = (0.000000,1.557408) ( tan(1) = 1.557408)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/complex/dsc sinh}}
{{dsc inc | cpp/numeric/complex/dsc cosh}}
{{dsc inc | cpp/numeric/complex/dsc atanh}}
{{dsc inc | cpp/numeric/math/dsc tanh}}
{{dsc inc | cpp/numeric/valarray/dsc tanh}}
{{dsc see c | c/numeric/complex/ctanh}}
{{dsc end}}

[[de:cpp/numeric/complex/tanh]]
[[es:cpp/numeric/complex/tanh]]
[[fr:cpp/numeric/complex/tanh]]
[[it:cpp/numeric/complex/tanh]]
[[ja:cpp/numeric/complex/tanh]]
[[pt:cpp/numeric/complex/tanh]]
[[ru:cpp/numeric/complex/tanh]]
[[zh:cpp/numeric/complex/tanh]]</text>
      <sha1>abyilwoay17q4i4gac2togs0a0hz61u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv</title>
    <ns>0</ns>
    <id>2710</id>
    <revision>
      <id>90259</id>
      <parentid>78203</parentid>
      <timestamp>2017-02-16T19:57:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>inserted &quot;if .. is supported&quot; for the pragma, since it's not required to be supported in C++</comment>
      <text xml:space="preserve" bytes="3326">{{title|Floating-point environment}}
{{cpp/numeric/fenv/navbar}}

The floating-point environment is the set of floating-point status flags and control modes supported by the implementation. It is thread-local, each thread inherits the initial state of its floating-point environment from the parent thread. Floating-point operations modify the floating-point status flags to indicate abnormal results or auxiliary information. The state of floating-point control modes affects the outcomes of some floating-point operations.

The floating-point environment access and modification is only meaningful when {{ltt|cpp/preprocessor/impl|#pragma STDC FENV_ACCESS}} is supported and is set to {{tt|ON}}. Otherwise the implementation is free to assume that floating-point control modes are always the default ones and that floating-point status flags are never tested or modified. In practice, few current compilers, such as HP aCC, Oracle Studio, or IBM XL, support the {{tt|#pragma}} explicitly, but most compilers allow meaningful access to the floating-point environment anyway.

===Types===
{{dsc begin}}
{{dsc header | cfenv}}
{{dsc | {{c|fenv_t}}  | The type representing the entire floating-point environment }}
{{dsc | {{c|fexcept_t}} | The type representing all floating-point status flags collectively }}
{{dsc end}}

===Functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feclearexcept}}
{{dsc inc | cpp/numeric/fenv/dsc fetestexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feraiseexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feexceptflag}}
{{dsc inc | cpp/numeric/fenv/dsc feround}}
{{dsc inc | cpp/numeric/fenv/dsc feenv}}
{{dsc inc | cpp/numeric/fenv/dsc feholdexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feupdateenv}}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc FE_exceptions}}
{{dsc inc | cpp/numeric/fenv/dsc FE_round}}
{{dsc inc | cpp/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc end}}

===Notes===
The floating-point exceptions are not related to the C++ exceptions. When a floating-point operation raises a floating-point exception, the status of the floating-point environment changes, which can be tested with {{lc|std::fetestexcept}}, but the execution of a C++ program on most implementations continues uninterrupted.

There are compiler extensions that may be used to generate C++ exceptions automatically whenever a floating-point exception is raised:

* GNU libc function {{tt|[http://www.gnu.org/s/hello/manual/libc/Control-Functions.html feenableexcept()]}} enables trapping of the floating-point exceptions, which generates the signal {{tt|SIGFPE}}. If the compiler option {{tt|-fnon-call-exceptions}} was used, the handler for that signal may throw a user-defined C++ exception.
* MSVC function {{tt|[http://msdn.microsoft.com/en-us/library/e9b52ceh.aspx _control87()]}} enables trapping of the floating-point exceptions, which generates a hardware exception, which can be converted to C++ exceptions with {{tt|[http://msdn.microsoft.com/en-us/library/5z4bw5h5.aspx _set_se_translator]}}.

===See also===
{{dsc begin}}
{{dsc see c | c/numeric/fenv | Floating-point environment}}
{{dsc end}}

[[de:cpp/numeric/fenv]]
[[es:cpp/numeric/fenv]]
[[fr:cpp/numeric/fenv]]
[[it:cpp/numeric/fenv]]
[[ja:cpp/numeric/fenv]]
[[pt:cpp/numeric/fenv]]
[[ru:cpp/numeric/fenv]]
[[zh:cpp/numeric/fenv]]</text>
      <sha1>01wcofesbsip6jjn2jayfefci2o0l52</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE ALL EXCEPT</title>
    <ns>0</ns>
    <id>4314</id>
    <redirect title="cpp/numeric/fenv/FE exceptions" />
    <revision>
      <id>15577</id>
      <parentid>15576</parentid>
      <timestamp>2011-12-13T18:03:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE exceptions]]</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/numeric/fenv/FE_exceptions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE DFL ENV</title>
    <ns>0</ns>
    <id>5260</id>
    <revision>
      <id>62809</id>
      <parentid>58507</parentid>
      <timestamp>2013-07-01T23:41:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="2258">{{title|FE_DFL_ENV}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header|cfenv}}
{{dcl | since=c++11 |
#define FE_DFL_ENV  /*implementation defined*/
}}
{{dcl end}}

The macro constant {{lc|FE_DFL_ENV}} expands to an expression of type {{c|const std::fenv_t*}}, which points to a full copy of the default floating-point environment, that is, the environment as loaded at program startup.

Additional macros that begin with {{tt|FE_}} followed by uppercase letters, and have the type {{c|const std::fenv_t*}}, may be supported by an implementation.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON

void show_env()
{
    int e = std::fetestexcept(FE_ALL_EXCEPT);
    if(e &amp; FE_DIVBYZERO) std::cout &lt;&lt; &quot;division by zero is raised\n&quot;;
    if(e &amp; FE_INEXACT)   std::cout &lt;&lt; &quot;inexact is raised\n&quot;;
    if(e &amp; FE_INVALID)   std::cout &lt;&lt; &quot;invalid is raised\n&quot;;
    if(e &amp; FE_UNDERFLOW) std::cout &lt;&lt; &quot;underflow is raised\n&quot;;
    if(e &amp; FE_OVERFLOW)  std::cout &lt;&lt; &quot;overflow is raised\n&quot;;
    int r = std::fegetround();
    switch(r)
    {  
        case FE_DOWNWARD: std::cout &lt;&lt; &quot;rounding down\n&quot;; break;
        case FE_TONEAREST: std::cout &lt;&lt; &quot;rounding to nearest\n&quot;; break;
        case FE_TOWARDZERO: std::cout &lt;&lt; &quot;rounding to zero\n&quot;; break;
        case FE_UPWARD: std::cout &lt;&lt; &quot;rounding up\n&quot;; break;
    }
}

int main()
{
    std::cout &lt;&lt; &quot;On startup: \n&quot;;
    show_env();

    std::feraiseexcept(FE_UNDERFLOW {{!}} FE_OVERFLOW);
    std::fesetround(FE_UPWARD);

    std::cout &lt;&lt; &quot;\nBefore restoration: \n&quot;;
    show_env();

    std::fesetenv(FE_DFL_ENV);

    std::cout &lt;&lt; &quot;\nAfter reset to default: \n&quot;;
    show_env();
}
 | output=
On startup: 
rounding to nearest

Before restoration: 
underflow is raised
overflow is raised
rounding up

After reset to default: 
rounding to nearest
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feenv}}
{{dsc inc | cpp/numeric/fenv/dsc feupdateenv}}
{{dsc end}}

[[de:cpp/numeric/fenv/FE DFL ENV]]
[[es:cpp/numeric/fenv/FE DFL ENV]]
[[fr:cpp/numeric/fenv/FE DFL ENV]]
[[it:cpp/numeric/fenv/FE DFL ENV]]
[[ja:cpp/numeric/fenv/FE DFL ENV]]
[[pt:cpp/numeric/fenv/FE DFL ENV]]
[[ru:cpp/numeric/fenv/FE DFL ENV]]
[[zh:cpp/numeric/fenv/FE DFL ENV]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE DIVBYZERO</title>
    <ns>0</ns>
    <id>4305</id>
    <redirect title="cpp/numeric/fenv/FE exceptions" />
    <revision>
      <id>15567</id>
      <timestamp>2011-12-13T18:03:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE exceptions]]</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/numeric/fenv/FE_exceptions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE DOWNWARD</title>
    <ns>0</ns>
    <id>4310</id>
    <redirect title="cpp/numeric/fenv/FE round" />
    <revision>
      <id>15572</id>
      <timestamp>2011-12-13T18:03:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE round]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/fenv/FE_round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE INEXACT</title>
    <ns>0</ns>
    <id>4306</id>
    <redirect title="cpp/numeric/fenv/FE exceptions" />
    <revision>
      <id>15568</id>
      <timestamp>2011-12-13T18:03:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE exceptions]]</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/numeric/fenv/FE_exceptions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE INVALID</title>
    <ns>0</ns>
    <id>4307</id>
    <redirect title="cpp/numeric/fenv/FE exceptions" />
    <revision>
      <id>15569</id>
      <timestamp>2011-12-13T18:03:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE exceptions]]</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/numeric/fenv/FE_exceptions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE OVERFLOW</title>
    <ns>0</ns>
    <id>4308</id>
    <redirect title="cpp/numeric/fenv/FE exceptions" />
    <revision>
      <id>15570</id>
      <timestamp>2011-12-13T18:03:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE exceptions]]</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/numeric/fenv/FE_exceptions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE TONEAREST</title>
    <ns>0</ns>
    <id>4311</id>
    <redirect title="cpp/numeric/fenv/FE round" />
    <revision>
      <id>15573</id>
      <timestamp>2011-12-13T18:03:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE round]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/fenv/FE_round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE TOWARDZERO</title>
    <ns>0</ns>
    <id>4312</id>
    <redirect title="cpp/numeric/fenv/FE round" />
    <revision>
      <id>15574</id>
      <timestamp>2011-12-13T18:03:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE round]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/fenv/FE_round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE UNDERFLOW</title>
    <ns>0</ns>
    <id>4309</id>
    <redirect title="cpp/numeric/fenv/FE exceptions" />
    <revision>
      <id>15571</id>
      <timestamp>2011-12-13T18:03:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE exceptions]]</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/numeric/fenv/FE_exceptions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE UPWARD</title>
    <ns>0</ns>
    <id>4313</id>
    <redirect title="cpp/numeric/fenv/FE round" />
    <revision>
      <id>15575</id>
      <timestamp>2011-12-13T18:03:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/FE round]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/fenv/FE_round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE exceptions</title>
    <ns>0</ns>
    <id>4319</id>
    <revision>
      <id>70180</id>
      <parentid>70179</parentid>
      <timestamp>2014-05-11T15:57:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to c</comment>
      <text xml:space="preserve" bytes="2748">{{title|&lt;small&gt;FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW, FE_ALL_EXCEPT&lt;/small&gt;}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header|cfenv}}
{{dcl | since=c++11 |
#define FE_DIVBYZERO    /*implementation defined power of 2*/
}}
{{dcl | since=c++11 |
#define FE_INEXACT      /*implementation defined power of 2*/
}}
{{dcl | since=c++11 |
#define FE_INVALID      /*implementation defined power of 2*/
}}
{{dcl | since=c++11 |
#define FE_OVERFLOW     /*implementation defined power of 2*/
}}
{{dcl | since=c++11 |
#define FE_UNDERFLOW    /*implementation defined power of 2*/
}}
{{dcl | since=c++11 |
#define FE_ALL_EXCEPT  FE_DIVBYZERO {{!}} FE_INEXACT {{!}} \
                       FE_INVALID {{!}} FE_OVERFLOW {{!}}  \
                       FE_UNDERFLOW
}}
{{dcl end}}

All these macro constants (except {{lc|FE_ALL_EXCEPT}}) expand to integer constant expressions that are distinct powers of 2, which uniquely identify all supported floating-point exceptions. Each macro is only defined if it is supported. 

The macro constant {{lc|FE_ALL_EXCEPT}}, which expands to the bitwise OR of all other {{tt|FE_*}}, is always defined and is zero if floating-point exceptions are not supported by the implementation.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|FE_DIVBYZERO}} | pole error occurred in an earlier floating-point operation}}
{{dsc | {{tt|FE_INEXACT}}   | inexact result: rounding was necessary to store the result of an earlier floating-point operation}}
{{dsc | {{tt|FE_INVALID}}   | domain error occurred in an earlier floating-point operation}}
{{dsc | {{tt|FE_OVERFLOW}}  | the result of the earlier floating-point operation was too large to be representable}}
{{dsc | {{tt|FE_UNDERFLOW}} | the result of the earlier floating-point operation was subnormal with a loss of precision}}
{{dsc | {{tt|FE_ALL_EXCEPT}} | bitwise OR of all supported floating-point exceptions}}
{{dsc end}}

The implementation may define additional macro constants in {{tt|&lt;cfenv&gt;}} to identify additional floating-point exceptions. All such constants begin with {{tt|FE_}} followed by at least one uppercase letter.

See {{lc|math_errhandling}} for further details.

===Example===
{{include| cpp/numeric/fenv/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc math_errhandling}}
{{dsc see c | c/numeric/fenv/FE_exceptions | floating point exception macros | nomono=true}}
{{dsc end}}

[[de:cpp/numeric/fenv/FE exceptions]]
[[es:cpp/numeric/fenv/FE exceptions]]
[[fr:cpp/numeric/fenv/FE exceptions]]
[[it:cpp/numeric/fenv/FE exceptions]]
[[ja:cpp/numeric/fenv/FE exceptions]]
[[pt:cpp/numeric/fenv/FE exceptions]]
[[ru:cpp/numeric/fenv/FE exceptions]]
[[zh:cpp/numeric/fenv/FE exceptions]]</text>
      <sha1>nthtxq2h1vb4pys96c5vrtonus6totx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/FE round</title>
    <ns>0</ns>
    <id>5602</id>
    <revision>
      <id>80864</id>
      <parentid>72046</parentid>
      <timestamp>2015-09-11T08:06:33Z</timestamp>
      <contributor>
        <username>Glynn</username>
        <id>4448</id>
      </contributor>
      <comment>change nearest integer to nearest representable value</comment>
      <text xml:space="preserve" bytes="4463">{{title|&lt;small&gt;FE_DOWNWARD, FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD&lt;/small&gt;}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header|cfenv}}
{{dcl | since=c++11 |
#define FE_DOWNWARD     /*implementation defined*/
}} 
{{dcl | since=c++11 |
#define FE_TONEAREST    /*implementation defined*/
}}
{{dcl | since=c++11 |
#define FE_TOWARDZERO   /*implementation defined*/
}}
{{dcl | since=c++11 |
#define FE_UPWARD       /*implementation defined*/
}}
{{dcl end}}

Each of these macro constants expands to a nonnegative integer constant expression, which can be used with {{lc|std::fesetround}} and {{lc|std::fegetround}} to indicate one of the supported floating-point rounding modes. The implementation may define additional rounding mode constants in {{tt|&lt;cfenv&gt;}}, which should all begin with {{tt|FE_}} followed by at least one uppercase letter. Each macro is only defined if it is supported.

On most implementations, these macro constants expand to the values equal to the values of {{lc|FLT_ROUNDS}} and {{lc|std::float_round_style}}

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|FE_DOWNWARD}}  | rounding towards negative infinity}}
{{dsc | {{tt|FE_TONEAREST}} | rounding towards nearest representable value}}
{{dsc | {{tt|FE_TOWARDZERO}} | rounding towards zero}}
{{dsc | {{tt|FE_UPWARD}}  | rounding towards positive infinity}}
{{dsc end}}

Additional rounding modes may be supported by an implementation.

The current rounding mode affects the following:
* results of floating-point [[cpp/language/operator_arithmetic|arithmetic operators]] outside of constant expressions
{{source|1=
double x = 1;
x/10; // 0.09999999999999999167332731531132594682276248931884765625
   // or 0.1000000000000000055511151231257827021181583404541015625
}}
* results of standard library [[cpp/numeric/math|mathematical functions]]
{{source|1=
std::sqrt(2); // 1.41421356237309492343001693370752036571502685546875
           // or 1.4142135623730951454746218587388284504413604736328125
}}
* floating-point to floating-point implicit conversion and casts
{{source|1=
double d = 1 + std::numeric_limits&lt;double&gt;::epsilon();
float f = d; //  1.00000000000000000000000
           // or 1.00000011920928955078125
}}
* string conversions such as {{lc|std::strtod}} or {{lc|std::printf}}
{{source|1=
std::stof(&quot;0.1&quot;); // 0.0999999940395355224609375
               // or 0.100000001490116119384765625
}}
* the library rounding functions {{lc|std::nearbyint}}, {{lc|std::rint}}, {{lc|std::lrint}}
{{source|1=
std::lrint(2.1); // 2 or 3
}}
The current rounding mode does NOT affect the following:
* floating-point to integer implicit conversion and casts (always towards zero)
* results of floating-point arithmetic operators in constant expressions (always to nearest)
* the library functions {{lc|std::round}}, {{lc|std::lround}}, {{lc|std::ceil}}, {{lc|std::floor}}, {{lc|std::trunc}}

As with any [[cpp/numeric/fenv|floating-point environment]] functionality, rounding is only guaranteed if {{tt|#pragma STDC FENV_ACCESS ON}} is set.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;cfenv&gt;
#include &lt;cmath&gt;
int main()
{
#pragma STDC FENV_ACCESS ON
    std::fesetround(FE_DOWNWARD);
    std::cout &lt;&lt; &quot;rounding down: \n&quot; &lt;&lt; std::setprecision(50)
              &lt;&lt; &quot;         pi = &quot; &lt;&lt; std::acos(-1.f) &lt;&lt; '\n'
              &lt;&lt; &quot;stof(\&quot;1.1\&quot;) = &quot; &lt;&lt; std::stof(&quot;1.1&quot;) &lt;&lt; '\n'
              &lt;&lt; &quot;  rint(2.1) = &quot; &lt;&lt; std::rint(2.3) &lt;&lt; &quot;\n\n&quot;;
    std::fesetround(FE_UPWARD);
    std::cout &lt;&lt; &quot;rounding up: \n&quot;
              &lt;&lt; &quot;         pi = &quot; &lt;&lt; std::acos(-1.f) &lt;&lt; '\n'
              &lt;&lt; &quot;stof(\&quot;1.1\&quot;) = &quot; &lt;&lt; std::stof(&quot;1.1&quot;) &lt;&lt; '\n'
              &lt;&lt; &quot;  rint(2.1) = &quot; &lt;&lt; std::rint(2.3) &lt;&lt; '\n';
}
|output=
rounding down: 
         pi = 3.141592502593994140625
stof(&quot;1.1&quot;) = 1.099999904632568359375
  rint(2.1) = 2

rounding up: 
         pi = 3.1415927410125732421875
stof(&quot;1.1&quot;) = 1.10000002384185791015625
  rint(2.1) = 3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc float_round_style}}
{{dsc inc | cpp/numeric/fenv/dsc feround}}
{{dsc see c | c/numeric/fenv/FE_round | floating-point rounding macros | nomono=true}}
{{dsc end}}

[[de:cpp/numeric/fenv/FE round]]
[[es:cpp/numeric/fenv/FE round]]
[[fr:cpp/numeric/fenv/FE round]]
[[it:cpp/numeric/fenv/FE round]]
[[ja:cpp/numeric/fenv/FE round]]
[[pt:cpp/numeric/fenv/FE round]]
[[ru:cpp/numeric/fenv/FE round]]
[[zh:cpp/numeric/fenv/FE round]]</text>
      <sha1>8bzugfzycjt3nn30be8mkel73o9f4oj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/feclearexcept</title>
    <ns>0</ns>
    <id>5252</id>
    <revision>
      <id>62812</id>
      <parentid>58512</parentid>
      <timestamp>2013-07-01T23:41:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1070">{{cpp/title|feclearexcept}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 |
int feclearexcept( int excepts );
}}
{{dcl end}}

Attempts to clear the floating-point exceptions that are listed in the bitmask argument {{tt|excepts}}, which is a bitwise OR of the [[cpp/numeric/fenv/FE_exceptions|floating point exception macros]].

===Parameters===
{{par begin}}
{{par | excepts | bitmask listing the exception flags to clear}}
{{par end}}

===Return value===
{{c|0}} if all indicated exceptions were successfully cleared or if {{tt|excepts}} is zero. Returns a non-zero value on error.

===Example===
{{include| cpp/numeric/fenv/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc fetestexcept}}
{{dsc end}}

[[de:cpp/numeric/fenv/feclearexcept]]
[[es:cpp/numeric/fenv/feclearexcept]]
[[fr:cpp/numeric/fenv/feclearexcept]]
[[it:cpp/numeric/fenv/feclearexcept]]
[[ja:cpp/numeric/fenv/feclearexcept]]
[[pt:cpp/numeric/fenv/feclearexcept]]
[[ru:cpp/numeric/fenv/feclearexcept]]
[[zh:cpp/numeric/fenv/feclearexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/feenv</title>
    <ns>0</ns>
    <id>5604</id>
    <revision>
      <id>62813</id>
      <parentid>62401</parentid>
      <timestamp>2013-07-01T23:41:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1571">{{cpp/title|fegetenv|fesetenv}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 | num=1|
int fegetenv( std::fenv_t* envp )
}}
{{dcl | since=c++11 | num=2|
int fesetenv( const std::fenv_t* envp );
}}
{{dcl end}}

Manages the status of the floating-point environment.

@1@ Attempts to store the status of the floating-point environment in the object pointed to by {{tt|envp}}.

@2@ Attempts to establish the floating-point environment from the object pointed to by {{tt|envp}}. The value of that object must be previously obtained by a call to {{lc|std::feholdexcept}} or {{tt|std::fegetenv}} or be a floating-point macro constant. If any of the floating-point status flags are set in {{tt|envp}}, they become set in the environment (and are then testable with {{lc|std::fetestexcept}}), but the corresponding floating-point exceptions are not raised (execution continues uninterrupted)

===Parameters===
{{par begin}}
{{par | envp | pointer to the object of type {{c|std::fenv_t}} which holds the status of the floating-point environment}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feholdexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feupdateenv}}
{{dsc inc | cpp/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc end}}

[[de:cpp/numeric/fenv/feenv]]
[[es:cpp/numeric/fenv/feenv]]
[[fr:cpp/numeric/fenv/feenv]]
[[it:cpp/numeric/fenv/feenv]]
[[ja:cpp/numeric/fenv/feenv]]
[[pt:cpp/numeric/fenv/feenv]]
[[ru:cpp/numeric/fenv/feenv]]
[[zh:cpp/numeric/fenv/feenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/feexceptflag</title>
    <ns>0</ns>
    <id>5253</id>
    <revision>
      <id>62814</id>
      <parentid>50252</parentid>
      <timestamp>2013-07-01T23:41:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1715">{{cpp/title|fegetexceptflag|fesetexceptflag}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 | num=1|
int fegetexceptflag( std::fexcept_t* flagp, int excepts );
}}
{{dcl | since=c++11 | num=2|
int fesetexceptflag( const std::fexcept_t* flagp, int excepts );
}}
{{dcl end}}

1) Attempts to obtain the full contents of the floating-point exception flags that are listed in the bitmask argument {{tt|excepts}}, which is a bitwise OR of the [[cpp/numeric/fenv/FE_exceptions|floating point exception macros]]. 

2) Attempts to copy the full contents of the floating-point exception flags that are listed in {{tt|excepts}} from {{tt|flagp}} into the floating-point environment. Does not raise any exceptions, only modifies the flags.

The full contents of a floating-point exception flag is not necessarily a boolean value indicating whether the exception is raised or cleared. For example, it may be a struct which includes the boolean status and the address of the code that triggered the exception. These functions obtain all such content and obtain/store it in {{tt|flagp}} in implementation-defined format.

===Parameters===
{{par begin}}
{{par | flagp | pointer to an {{c|std::fexcept_t}} object where the flags will be stored or read from}}
{{par | excepts | bitmask listing the exception flags to get/set}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

[[de:cpp/numeric/fenv/feexceptflag]]
[[es:cpp/numeric/fenv/feexceptflag]]
[[fr:cpp/numeric/fenv/feexceptflag]]
[[it:cpp/numeric/fenv/feexceptflag]]
[[ja:cpp/numeric/fenv/feexceptflag]]
[[pt:cpp/numeric/fenv/feexceptflag]]
[[ru:cpp/numeric/fenv/feexceptflag]]
[[zh:cpp/numeric/fenv/feexceptflag]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/fegetenv</title>
    <ns>0</ns>
    <id>5595</id>
    <redirect title="cpp/numeric/fenv/feenv" />
    <revision>
      <id>20627</id>
      <timestamp>2012-03-28T17:37:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/feenv]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/fenv/feenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/fegetexceptflag</title>
    <ns>0</ns>
    <id>5590</id>
    <redirect title="cpp/numeric/fenv/feexceptflag" />
    <revision>
      <id>20621</id>
      <timestamp>2012-03-28T17:35:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/numeric/fenv/fegetexceptflag]] to [[cpp/numeric/fenv/feexceptflag]]: better title</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/numeric/fenv/feexceptflag]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/fegetround</title>
    <ns>0</ns>
    <id>5593</id>
    <redirect title="cpp/numeric/fenv/feround" />
    <revision>
      <id>20625</id>
      <timestamp>2012-03-28T17:37:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/feround]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/fenv/feround]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/feholdexcept</title>
    <ns>0</ns>
    <id>5606</id>
    <revision>
      <id>62815</id>
      <parentid>58516</parentid>
      <timestamp>2013-07-01T23:41:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1574">{{cpp/title|feholdexcept}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 |
int feholdexcept( std::fenv_t* envp )
}}
{{dcl end}}

First, saves the current floating-point environment to the object pointed to by {{tt|envp}} (similar to {{lc|std::fegetenv}}), then clears all floating-point status flags, and then installs the non-stop mode: future floating-point exceptions will not interrupt execution (will not trap), until the floating-point environment is restored by {{lc|std::feupdateenv}} or {{lc|std::fesetenv}}.

This function may be used in the beginning of a subroutine that must hide the floating-point exceptions it may raise from the caller. If only some exceptions must be suppressed, while others must be reported, the non-stop mode is usually ended with a call to {{lc|std::feupdateenv}} after clearing the unwanted exceptions.

===Parameters===
{{par begin}}
{{par | envp | pointer to the object of type {{c|std::fenv_t}} where the floating-point environment will be stored}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feupdateenv}}
{{dsc inc | cpp/numeric/fenv/dsc feenv}}
{{dsc inc | cpp/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc end}}

[[de:cpp/numeric/fenv/feholdexcept]]
[[es:cpp/numeric/fenv/feholdexcept]]
[[fr:cpp/numeric/fenv/feholdexcept]]
[[it:cpp/numeric/fenv/feholdexcept]]
[[ja:cpp/numeric/fenv/feholdexcept]]
[[pt:cpp/numeric/fenv/feholdexcept]]
[[ru:cpp/numeric/fenv/feholdexcept]]
[[zh:cpp/numeric/fenv/feholdexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/feraiseexcept</title>
    <ns>0</ns>
    <id>5259</id>
    <revision>
      <id>62816</id>
      <parentid>58519</parentid>
      <timestamp>2013-07-01T23:41:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="2118">{{cpp/title|feraiseexcept}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 |
int feraiseexcept( int excepts );
}}
{{dcl end}}

Attempts to raise all floating point exceptions listed in {{tt|excepts}} (a bitwise OR of the [[cpp/numeric/fenv/FE_exceptions|floating point exception macros]]). If one of the exceptions is {{lc|FE_OVERFLOW}} or {{c|FE_UNDERFLOW}}, this function may additionally raise {{lc|FE_INEXACT}}. The order in which the exceptions are raised is unspecified, except that {{lc|FE_OVERFLOW}} and {{c|FE_UNDERFLOW}} are always raised before {{lc|FE_INEXACT}}.

===Parameters===
{{par begin}}
{{par | excepts | bitmask listing the exception flags to raise}}
{{par end}}

===Return value===
{{c|0}} if all listed exceptions were raised, non-zero value otherwise.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON

int main()
{
    std::feclearexcept(FE_ALL_EXCEPT);
    int r = std::feraiseexcept(FE_UNDERFLOW {{!}} FE_DIVBYZERO);
    std::cout &lt;&lt;  &quot;Raising divbyzero and underflow simultaneously &quot;
              &lt;&lt; (r?&quot;fails&quot;:&quot;succeeds&quot;) &lt;&lt; &quot; and results in\n&quot;;
    int e = std::fetestexcept(FE_ALL_EXCEPT);
    if (e &amp; FE_DIVBYZERO) {
        std::cout &lt;&lt; &quot;division by zero\n&quot;;
    }
    if (e &amp; FE_INEXACT) {
        std::cout &lt;&lt; &quot;inexact\n&quot;;
    }
    if (e &amp; FE_INVALID) {
        std::cout &lt;&lt; &quot;invalid\n&quot;;
    }
    if (e &amp; FE_UNDERFLOW) {
        std::cout &lt;&lt; &quot;underflow\n&quot;;
    }
    if (e &amp; FE_OVERFLOW) {
        std::cout &lt;&lt; &quot;overflow\n&quot;;
    }
}
 | output=
Raising divbyzero and underflow simultaneously succeeds and results in
division by zero
underflow
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feclearexcept}}
{{dsc inc | cpp/numeric/fenv/dsc fetestexcept}}
{{dsc end}}

[[de:cpp/numeric/fenv/feraiseexcept]]
[[es:cpp/numeric/fenv/feraiseexcept]]
[[fr:cpp/numeric/fenv/feraiseexcept]]
[[it:cpp/numeric/fenv/feraiseexcept]]
[[ja:cpp/numeric/fenv/feraiseexcept]]
[[pt:cpp/numeric/fenv/feraiseexcept]]
[[ru:cpp/numeric/fenv/feraiseexcept]]
[[zh:cpp/numeric/fenv/feraiseexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/feround</title>
    <ns>0</ns>
    <id>5601</id>
    <revision>
      <id>72048</id>
      <parentid>71775</parentid>
      <timestamp>2014-07-10T03:10:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to FE_round</comment>
      <text xml:space="preserve" bytes="1679">{{cpp/title|fegetround|fesetround}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 | num=1|
int fesetround( int round )
}}
{{dcl | since=c++11 | num=2|
int fegetround()
}}
{{dcl end}}

Manages the floating-point rounding direction. 

@1@ Attempts to establish the floating-point rounding direction equal to the argument {{tt|round}}, which is expected to be one of the [[cpp/numeric/fenv/FE_round|floating point rounding macros]]. 

@2@ Returns the value of the [[cpp/numeric/fenv/FE_round|floating point rounding macro]] that corresponds to the current rounding direction. 

===Parameters===
{{par begin}}
{{par | round | rounding direction, one of [[cpp/numeric/fenv/FE_round|floating point rounding macros]]}}
{{par end}}

===Return value===
1) {{c|0}} on success, non-zero otherwise.

2) the [[cpp/numeric/fenv/FE_round|floating point rounding macro]] describing the current rounding direction or a negative value if the direction cannot be determined

===Notes===
The current rounding mode, reflecting the effects of the most recent {{tt|fesetround}}, can also be queried with {{lc|FLT_ROUNDS}}

See [[cpp/numeric/fenv/FE_round|floating-point rounding macros]] for the effects of rounding.

===Example===
{{include| cpp/numeric/math/example_nearbyint}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc nearbyint}}
{{dsc inc | cpp/numeric/math/dsc rint}}
{{dsc end}}

[[de:cpp/numeric/fenv/feround]]
[[es:cpp/numeric/fenv/feround]]
[[fr:cpp/numeric/fenv/feround]]
[[it:cpp/numeric/fenv/feround]]
[[ja:cpp/numeric/fenv/feround]]
[[pt:cpp/numeric/fenv/feround]]
[[ru:cpp/numeric/fenv/feround]]
[[zh:cpp/numeric/fenv/feround]]</text>
      <sha1>q6l9l35y1aczs9x8rkgmaafbjbyq94p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/fesetenv</title>
    <ns>0</ns>
    <id>5594</id>
    <redirect title="cpp/numeric/fenv/feenv" />
    <revision>
      <id>20626</id>
      <timestamp>2012-03-28T17:37:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/feenv]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/fenv/feenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/fesetexceptflag</title>
    <ns>0</ns>
    <id>5591</id>
    <redirect title="cpp/numeric/fenv/feexceptflag" />
    <revision>
      <id>20623</id>
      <parentid>20622</parentid>
      <timestamp>2012-03-28T17:36:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/feexceptflag]]</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/numeric/fenv/feexceptflag]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/fesetround</title>
    <ns>0</ns>
    <id>5592</id>
    <redirect title="cpp/numeric/fenv/feround" />
    <revision>
      <id>20624</id>
      <timestamp>2012-03-28T17:37:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/fenv/feround]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/fenv/feround]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/fetestexcept</title>
    <ns>0</ns>
    <id>5251</id>
    <revision>
      <id>62818</id>
      <parentid>58523</parentid>
      <timestamp>2013-07-01T23:42:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1094">{{cpp/title|fetestexcept}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 |
int fetestexcept( int excepts );
}}
{{dcl end}}

Determines which of the specified subset of the floating point exceptions are currently set. The argument {{tt|excepts}} is a bitwise OR of the [[cpp/numeric/fenv/FE_exceptions|floating point exception macros]].

===Parameters===
{{par begin}}
{{par | excepts | bitmask listing the exception flags to test}}
{{par end}}

===Return value===
Bitwise OR of the floating-point exception macros that are both included in {{tt|excepts}} and correspond to floating-point exceptions currently set.

===Example===
{{include| cpp/numeric/fenv/example1}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feclearexcept}}
{{dsc end}}

[[de:cpp/numeric/fenv/fetestexcept]]
[[es:cpp/numeric/fenv/fetestexcept]]
[[fr:cpp/numeric/fenv/fetestexcept]]
[[it:cpp/numeric/fenv/fetestexcept]]
[[ja:cpp/numeric/fenv/fetestexcept]]
[[pt:cpp/numeric/fenv/fetestexcept]]
[[ru:cpp/numeric/fenv/fetestexcept]]
[[zh:cpp/numeric/fenv/fetestexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/fenv/feupdateenv</title>
    <ns>0</ns>
    <id>5605</id>
    <revision>
      <id>83210</id>
      <parentid>62819</parentid>
      <timestamp>2016-01-24T16:22:06Z</timestamp>
      <contributor>
        <username>Ngo</username>
        <id>4912</id>
      </contributor>
      <minor/>
      <comment>removed extraneous 'd'</comment>
      <text xml:space="preserve" bytes="1269">{{cpp/title|feupdateenv}}
{{cpp/numeric/fenv/navbar}}
{{dcl begin}}
{{dcl header | cfenv}}
{{dcl | since=c++11 |
int feupdateenv( const std::fenv_t* envp )
}}
{{dcl end}}

First, remembers the currently raised floating-point exceptions, then restores the floating-point environment from the object pointed to by {{tt|envp}} (similar to {{lc|std::fesetenv}}), then raises the floating-point exceptions that were saved.

This function may be used to end the non-stop mode established by an earlier call to {{lc|std::feholdexcept}}.

===Parameters===
{{par begin}}
{{par | envp | pointer to the object of type {{c|std::fenv_t}} set by an earlier call to {{lc|std::feholdexcept}} or {{tt|std::fegetenv}} or equal to {{lc|FE_DFL_ENV}}}}
{{par end}}

===Return value===
{{c|0}} on success, non-zero otherwise.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc feholdexcept}}
{{dsc inc | cpp/numeric/fenv/dsc feenv}}
{{dsc inc | cpp/numeric/fenv/dsc FE_DFL_ENV}}
{{dsc end}}

[[de:cpp/numeric/fenv/feupdateenv]]
[[es:cpp/numeric/fenv/feupdateenv]]
[[fr:cpp/numeric/fenv/feupdateenv]]
[[it:cpp/numeric/fenv/feupdateenv]]
[[ja:cpp/numeric/fenv/feupdateenv]]
[[pt:cpp/numeric/fenv/feupdateenv]]
[[ru:cpp/numeric/fenv/feupdateenv]]
[[zh:cpp/numeric/fenv/feupdateenv]]</text>
      <sha1>mhuy0zypb65u8r2kobql12dt2lroh53</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/gcd</title>
    <ns>0</ns>
    <id>15540</id>
    <revision>
      <id>91282</id>
      <parentid>91202</parentid>
      <timestamp>2017-03-30T21:18:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Remarks */ LWG 2837</comment>
      <text xml:space="preserve" bytes="964">{{cpp/title|gcd}}
{{cpp/numeric/navbar}}
{{dcl begin}}
{{dcl header | numeric }}
{{dcl | since=c++17 |
template&lt; class M, class N&gt;
constexpr std::common_type_t&lt;M, N&gt; gcd(M m, N n);
}}
{{dcl end}}

Computes the greatest common divisor of the integers {{tt|m}} and {{tt|n}}.

=== Parameters ===
{{par begin}}
{{par | m, n | integer values}}
{{par end}}

===Return value===
If both {{tt|m}} and {{tt|n}} are zero, returns zero. Otherwise, returns the greatest common divisor of {{tt|{{!}}m{{!}}}} and {{tt|{{!}}n{{!}}}}.

=== Remarks ===
If either {{tt|M}} or {{tt|N}} is not an integer type, or if either is (possibly cv-qualified) {{c|bool}}, the program is ill-formed.

If either {{tt|{{!}}m{{!}}}} or {{tt|{{!}}n{{!}}}} is not representable as a value of type {{c|std::common_type_t&lt;M, N&gt;}}, the behavior is undefined.

=== Exceptions ===
Throws no exceptions.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/numeric/dsc lcm}}
{{dsc end }}

[[zh:cpp/numeric/gcd]]</text>
      <sha1>me7frn93s7m47dx36aco3c23fzkgu9h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/lcm</title>
    <ns>0</ns>
    <id>15541</id>
    <revision>
      <id>91283</id>
      <parentid>91203</parentid>
      <timestamp>2017-03-30T21:19:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Remarks */ LWG 2837</comment>
      <text xml:space="preserve" bytes="1024">{{cpp/title|lcm}}
{{cpp/numeric/navbar}}
{{dcl begin}}
{{dcl header | numeric }}
{{dcl | since=c++17 |
template&lt; class M, class N&gt;
constexpr std::common_type_t&lt;M, N&gt; lcm(M m, N n);
}}
{{dcl end}}

Computes the least common multiple of the integers {{tt|m}} and {{tt|n}}.

=== Parameters ===
{{par begin}}
{{par | m, n | integer values}}
{{par end}}

===Return value===
If either {{tt|m}} or {{tt|n}} is zero, returns zero. Otherwise, return the least common multiple of {{tt|{{!}}m{{!}}}} and {{tt|{{!}}n{{!}}}}.

=== Remarks ===
If either {{tt|M}} or {{tt|N}} is not an integer type, or if either is (possibly cv-qualified) {{c|bool}}, the program is ill-formed.

The behavior is undefined if {{tt|{{!}}m{{!}}}}, {{tt|{{!}}n{{!}}}}, or the least common multiple of {{tt|{{!}}m{{!}}}} and {{tt|{{!}}n{{!}}}} is not representable as a value of type {{c|std::common_type_t&lt;M, N&gt;}}.

=== Exceptions ===
Throws no exceptions.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/numeric/dsc gcd}}
{{dsc end }}

[[zh:cpp/numeric/lcm]]</text>
      <sha1>l9w205jymckchdd2nndkiezcdnx65ll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math</title>
    <ns>0</ns>
    <id>1333</id>
    <revision>
      <id>87555</id>
      <parentid>83374</parentid>
      <timestamp>2016-09-09T00:17:27Z</timestamp>
      <contributor>
        <ip>75.5.73.73</ip>
      </contributor>
      <comment>Nothing about the math is special; the functions are known as &quot;special functions&quot;</comment>
      <text xml:space="preserve" bytes="4506">{{title|Common mathematical functions}}
{{cpp/numeric/math/navbar}}

===Functions===
{{dsc begin}}
{{dsc header | cstdlib}}
{{dsc inc | cpp/numeric/math/dsc abs}}
{{dsc inc | cpp/numeric/math/dsc div}}

{{dsc header | cinttypes}}
{{dsc inc | cpp/numeric/math/dsc imaxabs}}
{{dsc inc | cpp/numeric/math/dsc imaxdiv}}

{{dsc header | cmath}}
{{dsc h2 | Basic operations}}
{{dsc inc | cpp/numeric/math/dsc fabs}}
{{dsc inc | cpp/numeric/math/dsc fmod}}
{{dsc inc | cpp/numeric/math/dsc remainder}}
{{dsc inc | cpp/numeric/math/dsc remquo}}
{{dsc inc | cpp/numeric/math/dsc fma}}
{{dsc inc | cpp/numeric/math/dsc fmax}}
{{dsc inc | cpp/numeric/math/dsc fmin}}
{{dsc inc | cpp/numeric/math/dsc fdim}}
{{dsc inc | cpp/numeric/math/dsc fnan}}

{{dsc h2 | Exponential functions}}
{{dsc inc | cpp/numeric/math/dsc exp}}
{{dsc inc | cpp/numeric/math/dsc exp2}}
{{dsc inc | cpp/numeric/math/dsc expm1}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/math/dsc log10}}
{{dsc inc | cpp/numeric/math/dsc log2}}
{{dsc inc | cpp/numeric/math/dsc log1p}}

{{dsc h2 | Power functions}}
{{dsc inc | cpp/numeric/math/dsc pow}}
{{dsc inc | cpp/numeric/math/dsc sqrt}}
{{dsc inc | cpp/numeric/math/dsc cbrt}}
{{dsc inc | cpp/numeric/math/dsc hypot}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | cpp/numeric/math/dsc sin}}
{{dsc inc | cpp/numeric/math/dsc cos}}
{{dsc inc | cpp/numeric/math/dsc tan}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/math/dsc atan2}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | cpp/numeric/math/dsc sinh}}
{{dsc inc | cpp/numeric/math/dsc cosh}}
{{dsc inc | cpp/numeric/math/dsc tanh}}
{{dsc inc | cpp/numeric/math/dsc asinh}}
{{dsc inc | cpp/numeric/math/dsc acosh}}
{{dsc inc | cpp/numeric/math/dsc atanh}}

{{dsc h2 | Error and gamma functions}}
{{dsc inc | cpp/numeric/math/dsc erf}}
{{dsc inc | cpp/numeric/math/dsc erfc}}
{{dsc inc | cpp/numeric/math/dsc tgamma}}
{{dsc inc | cpp/numeric/math/dsc lgamma}}

{{dsc h2 | Nearest integer floating point operations}}
{{dsc inc | cpp/numeric/math/dsc ceil}}
{{dsc inc | cpp/numeric/math/dsc floor}}
{{dsc inc | cpp/numeric/math/dsc trunc}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc inc | cpp/numeric/math/dsc nearbyint}}
{{dsc inc | cpp/numeric/math/dsc rint}}

{{dsc h2 | Floating point manipulation functions}}
{{dsc inc | cpp/numeric/math/dsc frexp}}
{{dsc inc | cpp/numeric/math/dsc ldexp}}
{{dsc inc | cpp/numeric/math/dsc modf}}
{{dsc inc | cpp/numeric/math/dsc scalbn}}
{{dsc inc | cpp/numeric/math/dsc ilogb}}
{{dsc inc | cpp/numeric/math/dsc logb}}
{{dsc inc | cpp/numeric/math/dsc nextafter}}
{{dsc inc | cpp/numeric/math/dsc copysign}}

{{dsc h2 | Classification and comparison}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc inc | cpp/numeric/math/dsc isfinite}}
{{dsc inc | cpp/numeric/math/dsc isinf}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc inc | cpp/numeric/math/dsc isnormal}}
{{dsc inc | cpp/numeric/math/dsc signbit}}

{{dsc inc | cpp/numeric/math/dsc isgreater}}
{{dsc inc | cpp/numeric/math/dsc isgreaterequal}}
{{dsc inc | cpp/numeric/math/dsc isless}}
{{dsc inc | cpp/numeric/math/dsc islessequal}}
{{dsc inc | cpp/numeric/math/dsc islessgreater}}
{{dsc inc | cpp/numeric/math/dsc isunordered}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | cstdlib }}
{{dsc inc | cpp/numeric/math/dsc div_t}}
{{dsc inc | cpp/numeric/math/dsc ldiv_t}}
{{dsc inc | cpp/numeric/math/dsc lldiv_t}}
{{dsc header | cinttypes }}
{{dsc inc | cpp/numeric/math/dsc imaxdiv_t}}
{{dsc header | cmath }}
{{dsc inc | cpp/numeric/math/dsc float_t}}
{{dsc inc | cpp/numeric/math/dsc double_t}}
{{dsc end}}

===Macro constants===
{{dsc begin}}
{{dsc header | cmath}}
{{dsc inc | cpp/numeric/math/dsc HUGE_VAL}}}
{{dsc inc | cpp/numeric/math/dsc INFINITY}}}
{{dsc inc | cpp/numeric/math/dsc NAN}}}
{{dsc inc | cpp/numeric/math/dsc math_errhandling}}
{{dsc h2 | Classification}}
{{dsc inc | cpp/numeric/math/dsc FP_categories}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc|'''[[cpp/experimental/special_math|Special math TR]]'''|for '''Mathematical special functions'''}}
{{dsc see c | c/numeric/math | Common mathematical functions}}
{{dsc end}}

[[cs:cpp/numeric/math]]
[[de:cpp/numeric/math]]
[[es:cpp/numeric/math]]
[[fr:cpp/numeric/math]]
[[it:cpp/numeric/math]]
[[ja:cpp/numeric/math]]
[[pl:cpp/numeric/math]]
[[pt:cpp/numeric/math]]
[[ru:cpp/numeric/math]]
[[tr:cpp/numeric/math]]
[[zh:cpp/numeric/math]]</text>
      <sha1>ibzu1t41xqwtkouul3c4ftgmsl8svt9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FLT EVAL METHOD</title>
    <ns>0</ns>
    <id>9517</id>
    <redirect title="cpp/types/climits/FLT EVAL METHOD" />
    <revision>
      <id>40403</id>
      <timestamp>2012-10-13T08:20:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/numeric/math/FLT EVAL METHOD]] to [[cpp/types/climits/FLT EVAL METHOD]]: already declared there</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/types/climits/FLT EVAL METHOD]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FLT ROUNDS</title>
    <ns>0</ns>
    <id>9519</id>
    <redirect title="cpp/types/climits/FLT ROUNDS" />
    <revision>
      <id>40407</id>
      <timestamp>2012-10-13T08:22:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/numeric/math/FLT ROUNDS]] to [[cpp/types/climits/FLT ROUNDS]]: already declared there</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/types/climits/FLT ROUNDS]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FP INFINITE</title>
    <ns>0</ns>
    <id>1334</id>
    <redirect title="cpp/numeric/math/FP categories" />
    <revision>
      <id>13795</id>
      <parentid>8060</parentid>
      <timestamp>2011-11-12T14:53:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/FP categories]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/numeric/math/FP_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FP NAN</title>
    <ns>0</ns>
    <id>1335</id>
    <redirect title="cpp/numeric/math/FP categories" />
    <revision>
      <id>13796</id>
      <parentid>8059</parentid>
      <timestamp>2011-11-12T14:53:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/FP categories]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/numeric/math/FP_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FP NORMAL</title>
    <ns>0</ns>
    <id>1336</id>
    <redirect title="cpp/numeric/math/FP categories" />
    <revision>
      <id>13799</id>
      <parentid>8061</parentid>
      <timestamp>2011-11-12T14:53:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/FP categories]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/numeric/math/FP_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FP SUBNORMAL</title>
    <ns>0</ns>
    <id>1337</id>
    <redirect title="cpp/numeric/math/FP categories" />
    <revision>
      <id>13797</id>
      <parentid>8062</parentid>
      <timestamp>2011-11-12T14:53:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/FP categories]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/numeric/math/FP_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FP ZERO</title>
    <ns>0</ns>
    <id>1338</id>
    <redirect title="cpp/numeric/math/FP categories" />
    <revision>
      <id>13798</id>
      <parentid>8063</parentid>
      <timestamp>2011-11-12T14:53:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/FP categories]]</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/numeric/math/FP_categories]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/FP categories</title>
    <ns>0</ns>
    <id>3688</id>
    <revision>
      <id>73105</id>
      <parentid>70413</parentid>
      <timestamp>2014-10-14T14:50:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>reusing fpclassify example</comment>
      <text xml:space="preserve" bytes="2638">{{title|FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |
#define FP_NORMAL    /*implementation defined*/
}}
{{dcl | since=c++11 |
#define FP_SUBNORMAL /*implementation defined*/
}}
{{dcl | since=c++11 |
#define FP_ZERO      /*implementation defined*/
}}
{{dcl | since=c++11 |
#define FP_INFINITE  /*implementation defined*/
}}
{{dcl | since=c++11 |
#define FP_NAN       /*implementation defined*/
}}
{{dcl end}}

The {{tt|FP_NORMAL}}, {{tt|FP_SUBNORMAL}}, {{tt|FP_ZERO}}, {{tt|FP_INFINITE}}, {{tt|FP_NAN}} macros each represent a distinct category of floating-point numbers. They all expand to an integer constant expression.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|FP_NORMAL}} | indicates that the value is ''normal'', i.e. not an infinity, subnormal, not-a-number or zero}}
{{dsc | {{tt|FP_SUBNORMAL}} | indicates that the value is ''subnormal''}}
{{dsc | {{tt|FP_ZERO}} | indicates that the value is positive or negative zero}}
{{dsc | {{tt|FP_INFINITE}} | indicates that the value is not representable by the underlying type (positive or negative infinity)}}
{{dsc | {{tt|FP_NAN}} | indicates that the value is not-a-number (NaN)}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;

const char* show_classification(double x) {
    switch(std::fpclassify(x)) {
        case FP_INFINITE:  return &quot;Inf&quot;;
        case FP_NAN:       return &quot;NaN&quot;;
        case FP_NORMAL:    return &quot;normal&quot;;
        case FP_SUBNORMAL: return &quot;subnormal&quot;;
        case FP_ZERO:      return &quot;zero&quot;;
        default:           return &quot;unknown&quot;;
    }
}
int main()
{
    std::cout &lt;&lt; &quot;1.0/0.0 is &quot; &lt;&lt; show_classification(1/0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;0.0/0.0 is &quot; &lt;&lt; show_classification(0.0/0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;DBL_MIN/2 is &quot; &lt;&lt; show_classification(DBL_MIN/2) &lt;&lt; '\n'
              &lt;&lt; &quot;-0.0 is &quot; &lt;&lt; show_classification(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;1.0 is &quot; &lt;&lt; show_classification(1.0) &lt;&lt; '\n';
}
 | output=
1.0/0.0 is Inf
0.0/0.0 is NaN
DBL_MIN/2 is subnormal
-0.0 is zero
1.0 is normal
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc see c | c/numeric/math/FP_categories | ntitle=floating point number categories}}
{{dsc end}}

[[de:cpp/numeric/math/FP categories]]
[[es:cpp/numeric/math/FP categories]]
[[fr:cpp/numeric/math/FP categories]]
[[it:cpp/numeric/math/FP categories]]
[[ja:cpp/numeric/math/FP categories]]
[[pt:cpp/numeric/math/FP categories]]
[[ru:cpp/numeric/math/FP categories]]
[[zh:cpp/numeric/math/FP categories]]</text>
      <sha1>15svopq41d5qbbeco86kik22vk9ea91</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/HUGE VAL</title>
    <ns>0</ns>
    <id>1339</id>
    <revision>
      <id>81095</id>
      <parentid>70382</parentid>
      <timestamp>2015-09-28T13:39:46Z</timestamp>
      <contributor>
        <ip>180.109.136.81</ip>
      </contributor>
      <comment>change page title</comment>
      <text xml:space="preserve" bytes="1615">{{ctitle|HUGE_VALF|HUGE_VAL|HUGE_VALL}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |
#define HUGE_VALF /*implementation defined*/
}}
{{dcl |
#define HUGE_VAL  /*implementation defined*/
}}
{{dcl | since=c++11 |
#define HUGE_VALL /*implementation defined*/
}}
{{dcl end}}

The {{tt|HUGE_VALF}}, {{tt|HUGE_VAL}} and {{tt|HUGE_VALL}} macros expand to positive floating point constant expressions which compare equal to the values returned by floating-point functions and operators in case of overflow (see {{lc|math_errhandling}}).

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|HUGE_VALF}} | Expands to positive {{c|float}} expression that indicates overflow}}
{{dsc | {{tt|HUGE_VAL}} | Expands to positive {{c|double}} expression that indicates overflow, not necessarily representable as a {{c|float}}}}
{{dsc | {{tt|HUGE_VALL}} | Expands to positive {{c|long double}} expression that indicates overflow, not necessarily representable as a {{c|float}} or {{c|double}}}}
{{dsc end}}

On implementations that support floating-point infinities, these macros always expand to the positive infinities of {{c|float}}, {{c|double}}, and {{c|long double}}, respectively.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc INFINITY}}}
{{dsc see c | c/numeric/math/HUGE_VAL}}
{{dsc end}}

[[de:cpp/numeric/math/HUGE VAL]]
[[es:cpp/numeric/math/HUGE VAL]]
[[fr:cpp/numeric/math/HUGE VAL]]
[[it:cpp/numeric/math/HUGE VAL]]
[[ja:cpp/numeric/math/HUGE VAL]]
[[pt:cpp/numeric/math/HUGE VAL]]
[[ru:cpp/numeric/math/HUGE VAL]]
[[zh:cpp/numeric/math/HUGE VAL]]</text>
      <sha1>m3uuu7uj3xq5rt890s3j9zxapaypkyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/HUGE VALF</title>
    <ns>0</ns>
    <id>1340</id>
    <redirect title="cpp/numeric/math/HUGE VAL" />
    <revision>
      <id>13785</id>
      <parentid>12091</parentid>
      <timestamp>2011-11-12T12:44:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/HUGE VAL]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/numeric/math/HUGE_VAL]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/HUGE VALL</title>
    <ns>0</ns>
    <id>1341</id>
    <redirect title="cpp/numeric/math/HUGE VAL" />
    <revision>
      <id>13786</id>
      <parentid>12092</parentid>
      <timestamp>2011-11-12T12:45:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/HUGE VAL]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/numeric/math/HUGE_VAL]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/INFINITY</title>
    <ns>0</ns>
    <id>8463</id>
    <revision>
      <id>70544</id>
      <parentid>70384</parentid>
      <timestamp>2014-05-24T22:48:20Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ link to has_infinity</comment>
      <text xml:space="preserve" bytes="1130">{{title|INFINITY}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |
#define INFINITY /*implementation defined*/
}}
{{dcl end}}

If the implementation supports floating-point infinities, the macro {{tt|INFINITY}} expands to constant expression of type {{c|float}} which evaluates to positive or unsigned infinity.

If the implementation does not support floating-point infinities, the macro {{tt|INFINITY}} expands to a positive value that is guaranteed to overflow a {{c|float}} at compile time, and the use of this macro generates a compiler warning.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc isinf}}
{{dsc inc | cpp/numeric/math/dsc HUGE_VAL}}}
{{dsc inc | cpp/types/numeric_limits/dsc has_infinity}}
{{dsc inc | cpp/types/numeric_limits/dsc infinity}}
{{dsc see c | c/numeric/math/INFINITY}}
{{dsc end}}

[[de:cpp/numeric/math/INFINITY]]
[[es:cpp/numeric/math/INFINITY]]
[[fr:cpp/numeric/math/INFINITY]]
[[it:cpp/numeric/math/INFINITY]]
[[ja:cpp/numeric/math/INFINITY]]
[[pt:cpp/numeric/math/INFINITY]]
[[ru:cpp/numeric/math/INFINITY]]
[[zh:cpp/numeric/math/INFINITY]]</text>
      <sha1>2cnfjt8ydrfk9a8t0h0mbn99tq8afhq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/NAN</title>
    <ns>0</ns>
    <id>8464</id>
    <revision>
      <id>73102</id>
      <parentid>70542</parentid>
      <timestamp>2014-10-14T14:43:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note that it's only one of many nans</comment>
      <text xml:space="preserve" bytes="1198">{{title|NAN}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |
#define NAN /*implementation defined*/
}}
{{dcl end}}

The macro {{tt|NAN}} expands to constant expression of type {{c|float}} which evaluates to a quiet not-a-number (QNaN) value. If the implementation does not support QNaNs, this macro constant is not defined. 

===Notes===
There are many different NaN values, differentiated by their payloads and their sign bits. The contents of the payload and the sign bit of the NaN generated by the macro {{tt|NAN}} are implementation-defined.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fnan}}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc inc | cpp/types/numeric_limits/dsc has_quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_signaling_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc signaling_NaN}}
{{dsc see c | c/numeric/math/NAN}}
{{dsc end}}

[[de:cpp/numeric/math/NAN]]
[[es:cpp/numeric/math/NAN]]
[[fr:cpp/numeric/math/NAN]]
[[it:cpp/numeric/math/NAN]]
[[ja:cpp/numeric/math/NAN]]
[[pt:cpp/numeric/math/NAN]]
[[ru:cpp/numeric/math/NAN]]
[[zh:cpp/numeric/math/NAN]]</text>
      <sha1>godn564mthkbguttjyrj9bcqg35251g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/abs</title>
    <ns>0</ns>
    <id>1342</id>
    <revision>
      <id>86503</id>
      <parentid>86478</parentid>
      <timestamp>2016-07-05T02:34:38Z</timestamp>
      <contributor>
        <ip>223.3.109.210</ip>
      </contributor>
      <comment>Undo revision 86478 by [[Special:Contributions/59.40.123.77|59.40.123.77]] ([[User talk:59.40.123.77|talk]])</comment>
      <text xml:space="preserve" bytes="1982">{{cpp/title|abs{{small|(int)}}|labs|llabs|imaxabs}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl header | cmath | notes={{mark since c++17}}}}
{{dcl |
int       abs( int n );
}}
{{dcl |
long      abs( long n );
}}
{{dcl | since=c++11 |
long long abs( long long n );
}}
{{dcl header | cstdlib}}
{{dcl |
long       labs( long n );
}}
{{dcl | since=c++11 |
long long llabs( long long n );
}}
{{dcl header | cinttypes}}
{{dcl | since=c++11 |
std::intmax_t abs( std::intmax_t n );
}}
{{dcl | since=c++11 |
std::intmax_t imaxabs( std::intmax_t n );
}}
{{dcl end}}

Computes the absolute value of an integer number. The behavior is undefined if the result cannot be represented by the return type.

===Parameters===
{{par begin}}
{{par | n | integer value}}
{{par end}}

===Return value===
The absolute value of {{tt|n}} (i.e. {{tt|{{!}}n{{!}}}}), if it is representable.

===Notes===
In 2's complement systems, the absolute value of the most-negative value is out of range, e.g. for 32-bit 2's complement type int, INT_MIN is -2147483648, but the would-be result 2147483648 is greater than INT_MAX, which is 2147483647.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;climits&gt;

int main()
{
    std::cout &lt;&lt; &quot;abs(+3) = &quot; &lt;&lt; std::abs(3) &lt;&lt; '\n'
              &lt;&lt; &quot;abs(-3) = &quot; &lt;&lt; std::abs(-3) &lt;&lt; '\n';

//  std::cout &lt;&lt; abs(INT_MIN)); // undefined behavior on 2's complement systems
}
 | output=
abs(+3) = 3
abs(-3) = 3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fabs}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/valarray/dsc abs}}
{{dsc see c | c/numeric/math/abs | abs | labs | llabs}}
{{dsc end}}

[[de:cpp/numeric/math/abs]]
[[es:cpp/numeric/math/abs]]
[[fr:cpp/numeric/math/abs]]
[[it:cpp/numeric/math/abs]]
[[ja:cpp/numeric/math/abs]]
[[pl:cpp/numeric/math/abs]]
[[pt:cpp/numeric/math/abs]]
[[ru:cpp/numeric/math/abs]]
[[tr:cpp/numeric/math/abs]]
[[zh:cpp/numeric/math/abs]]</text>
      <sha1>rmqqbi9v17cbn79yym8121pupu5cp4d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/acos</title>
    <ns>0</ns>
    <id>1343</id>
    <revision>
      <id>70519</id>
      <parentid>68805</parentid>
      <timestamp>2014-05-24T20:53:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+details</comment>
      <text xml:space="preserve" bytes="3013">{{cpp/title|acos}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       acos( float arg );
}}
{{dcl |num=2|
double      acos( double arg );
}}
{{dcl |num=3|
long double acos( long double arg );
}}
{{dcl |num=4|since=c++11 |
double      acos( Integral arg );
}}
{{dcl end}}

Computes the principal value of the arc cosine of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the arc cosine of {{tt|arg}} ({{math|arccos(arg)}}) in the range {{math|[0 ; &amp;pi;]}}, is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]]

Domain error occurs if {{tt|arg}} is outside the range {{tt|[-1.0; 1.0]}}

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is {{math|+1}}, the value {{tt|+0}} is returned.
* If {{math|{{!}}arg{{!}} &gt; 1}}, a domain error occurs and NaN is returned.
* if the argument is NaN, NaN is returned

===Example===
{{example
 | code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;
#include &lt;cstring&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;acos(-1) = &quot; &lt;&lt; acos(-1) &lt;&lt; '\n'
              &lt;&lt; &quot;acos(0.0) = &quot; &lt;&lt; acos(0.0) &lt;&lt; &quot; 2*acos(0.0) = &quot; &lt;&lt; 2*acos(0) &lt;&lt; '\n'
              &lt;&lt; &quot;acos(0.5) = &quot; &lt;&lt; acos(0.5) &lt;&lt; &quot; 3*acos(0.5) = &quot; &lt;&lt; 3*acos(0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;acos(1) = &quot; &lt;&lt; acos(1) &lt;&lt; '\n';
    // error handling 
    errno = 0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;acos(1.1) = &quot; &lt;&lt; acos(1.1) &lt;&lt; '\n';
    if(errno == EDOM)
        std::cout &lt;&lt; &quot;    errno == EDOM: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised&quot; &lt;&lt; '\n';
}
 | output=
acos(-1) = 3.14159
acos(0.0) = 1.5708 2*acos(0.0) = 3.14159
acos(0.5) = 1.0472 3*acos(0.5) = 3.14159
acos(1) = 0
acos(1.1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/math/dsc atan2}}
{{dsc inc | cpp/numeric/math/dsc cos}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc see c | c/numeric/math/acos}}
{{dsc end}}

[[de:cpp/numeric/math/acos]]
[[es:cpp/numeric/math/acos]]
[[fr:cpp/numeric/math/acos]]
[[it:cpp/numeric/math/acos]]
[[ja:cpp/numeric/math/acos]]
[[pl:cpp/numeric/math/acos]]
[[pt:cpp/numeric/math/acos]]
[[ru:cpp/numeric/math/acos]]
[[zh:cpp/numeric/math/acos]]</text>
      <sha1>5hm6rgv2wzkhwsn4wr8wi9gj4x04fmg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/acosh</title>
    <ns>0</ns>
    <id>1344</id>
    <revision>
      <id>70597</id>
      <parentid>67144</parentid>
      <timestamp>2014-05-26T06:02:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+return, example, naming note</comment>
      <text xml:space="preserve" bytes="3406">{{cpp/title|acosh}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
float       acosh( float arg );
}}
{{dcl | since=c++11 | num=2|
double      acosh( double arg );
}}
{{dcl | since=c++11 | num=3|
long double acosh( long double arg );
}}
{{dcl | since=c++11 | num=4|
double      acosh( Integral arg );
}}
{{dcl end}}

Computes the inverse hyperbolic cosine of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the inverse hyperbolic cosine of {{tt|arg}} ({{math|cosh{{su|p=-1}}(arg)}}, or {{math|arcosh(arg)}}) on the interval {{math|[0, +∞]}}, is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the argument is less than 1, a domain error occurs.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is less than 1, {{lc|FE_INVALID}} is raised an NaN is returned
* if the argument is 1, +0 is returned
* if the argument is +∞, +∞ is returned
* if the argument is NaN, NaN is returned

===Notes===
Although the C standard (to which C++ refers for this function) names this function &quot;arc hyperbolic cosine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;inverse hyperbolic cosine&quot; (used by POSIX) or &quot;area hyperbolic cosine&quot;.

===Examples===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;
#include &lt;cstring&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;acosh(1) = &quot; &lt;&lt; std::acosh(1) &lt;&lt; '\n'
              &lt;&lt; &quot;acosh(10) = &quot; &lt;&lt; std::acosh(10) &lt;&lt; '\n'
              &lt;&lt; &quot;acosh(DBL_MAX) = &quot; &lt;&lt; std::acosh(DBL_MAX) &lt;&lt; '\n'
              &lt;&lt; &quot;acosh(Inf) = &quot; &lt;&lt;  std::acosh(INFINITY) &lt;&lt; '\n';
     // error handling 
     errno = 0; std::feclearexcept(FE_ALL_EXCEPT);
     std::cout &lt;&lt; &quot;acosh(0.5) = &quot; &lt;&lt; std::acosh(0.5) &lt;&lt; '\n';
     if(errno == EDOM)
         std::cout &lt;&lt; &quot;    errno == EDOM: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
     if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
acosh(1) = 0
acosh(10) = 2.99322
acosh(DBL_MAX) = 710.476
acosh(Inf) = inf
acosh(0.5) = -nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc asinh}}
{{dsc inc | cpp/numeric/math/dsc atanh}}
{{dsc inc | cpp/numeric/math/dsc cosh}}
{{dsc inc | cpp/numeric/complex/dsc acosh}}
{{dsc see c | c/numeric/math/acosh}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/InverseHyperbolicCosine.html Weisstein, Eric W. &quot;Inverse Hyperbolic Cosine.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/math/acosh]]
[[es:cpp/numeric/math/acosh]]
[[fr:cpp/numeric/math/acosh]]
[[it:cpp/numeric/math/acosh]]
[[ja:cpp/numeric/math/acosh]]
[[pt:cpp/numeric/math/acosh]]
[[ru:cpp/numeric/math/acosh]]
[[zh:cpp/numeric/math/acosh]]</text>
      <sha1>n36z6070vr0rei3hpd0axu7urh61k1m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/asin</title>
    <ns>0</ns>
    <id>1345</id>
    <revision>
      <id>72665</id>
      <parentid>71098</parentid>
      <timestamp>2014-09-17T11:11:08Z</timestamp>
      <contributor>
        <ip>137.226.115.28</ip>
      </contributor>
      <comment>minus sign was not visible</comment>
      <text xml:space="preserve" bytes="3080">{{cpp/title|asin}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       asin( float arg );
}}
{{dcl |num=2|
double      asin( double arg );
}}
{{dcl |num=3|
long double asin( long double arg );
}}
{{dcl |num=4| since=c++11 |
double      asin( Integral arg );
}}
{{dcl end}}

Computes the principal value of the arc sine of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the arc sine of {{tt|arg}} ({{math|arcsin(arg)}}) in the range {{math|[- {{mfrac|&amp;pi;|2}} ; +{{mfrac|&amp;pi;|2}}]}}, is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]]

Domain error occurs if {{tt|arg}} is outside the range {{tt|[-1.0; 1.0]}}

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned unmodified
* If {{math|{{!}}arg{{!}} &gt; 1}}, a domain error occurs and NaN is returned.
* if the argument is NaN, NaN is returned

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;
#include &lt;cstring&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;asin(1.0) = &quot; &lt;&lt; asin(1) &lt;&lt; '\n'
              &lt;&lt; &quot;2*asin(1.0) = &quot; &lt;&lt; 2*asin(1) &lt;&lt; '\n'
              &lt;&lt; &quot;asin(-0.5) = &quot; &lt;&lt; asin(-0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;6*asin(-0.5) =&quot; &lt;&lt; 6*asin(-0.5) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;asin(0.0) = &quot; &lt;&lt; asin(0) &lt;&lt; &quot; asin(-0.0)=&quot; &lt;&lt; asin(-0.0) &lt;&lt; '\n';
    // error handling 
    errno = 0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;asin(1.1) = &quot; &lt;&lt; asin(1.1) &lt;&lt; '\n';
    if(errno == EDOM)
        std::cout &lt;&lt; &quot;    errno == EDOM: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised&quot; &lt;&lt; '\n';
}
|p=true
|output=
asin(1.0) = 1.5708
2*asin(1.0) = 3.14159
asin(-0.5) = -0.523599
6*asin(-0.5) = -3.14159
asin(0.0) = 0 asin(-0.0)=-0
asin(1.1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/math/dsc atan2}}
{{dsc inc | cpp/numeric/math/dsc sin}}
{{dsc inc | cpp/numeric/complex/dsc asin}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc see c | c/numeric/math/asin}}
{{dsc end}}

[[de:cpp/numeric/math/asin]]
[[es:cpp/numeric/math/asin]]
[[fr:cpp/numeric/math/asin]]
[[it:cpp/numeric/math/asin]]
[[ja:cpp/numeric/math/asin]]
[[pl:cpp/numeric/math/asin]]
[[pt:cpp/numeric/math/asin]]
[[ru:cpp/numeric/math/asin]]
[[zh:cpp/numeric/math/asin]]</text>
      <sha1>4qingovssblrj6cbqyw6oo1vp5lmomb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/asinh</title>
    <ns>0</ns>
    <id>1346</id>
    <revision>
      <id>70595</id>
      <parentid>70568</parentid>
      <timestamp>2014-05-26T05:47:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2684">{{cpp/title|asinh}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
float       asinh( float arg );
}}
{{dcl | since=c++11 | num=2 |
double      asinh( double arg );
}}
{{dcl | since=c++11 | num=3 |
long double asinh( long double arg );
}}
{{dcl | since=c++11 | num=4 |
double      asinh( Integral arg );
}}
{{dcl end}}

Computes the inverse hyperbolic sine of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the inverse hyperbolic sine of {{tt|arg}} ({{math|sinh{{su|p=-1}}(arg)}}, or {{math|arsinh(arg)}}), is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0 or ±∞, it is returned unmodified
* if the argument is NaN, NaN is returned

===Notes===
Although the C standard (to which C++ refers for this function) names this function &quot;arc hyperbolic sine&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;inverse hyperbolic sine&quot; (used by POSIX) or &quot;area hyperbolic sine&quot;.

===Examples===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; &quot;asinh(1) = &quot; &lt;&lt; std::asinh(1) &lt;&lt; '\n'
              &lt;&lt; &quot;asinh(-1) = &quot; &lt;&lt; std::asinh(-1) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;asinh(+0) = &quot; &lt;&lt; std::asinh(+0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;asinh(-0) = &quot; &lt;&lt;  std::asinh(-0.0) &lt;&lt; '\n';
}
|output=
asinh(1) = 0.881374
asinh(-1) = -0.881374
asinh(+0) = 0
asinh(-0) = -0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc acosh}}
{{dsc inc | cpp/numeric/math/dsc atanh}}
{{dsc inc | cpp/numeric/math/dsc sinh}}
{{dsc inc | cpp/numeric/complex/dsc asinh}}
{{dsc see c | c/numeric/math/asinh}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/InverseHyperbolicSine.html Weisstein, Eric W. &quot;Inverse Hyperbolic Sine.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/math/asinh]]
[[es:cpp/numeric/math/asinh]]
[[fr:cpp/numeric/math/asinh]]
[[it:cpp/numeric/math/asinh]]
[[ja:cpp/numeric/math/asinh]]
[[pt:cpp/numeric/math/asinh]]
[[ru:cpp/numeric/math/asinh]]
[[zh:cpp/numeric/math/asinh]]</text>
      <sha1>tdb3d5jtxvqhxd8egmtzppupst6iawq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/atan</title>
    <ns>0</ns>
    <id>1347</id>
    <revision>
      <id>72664</id>
      <parentid>71593</parentid>
      <timestamp>2014-09-17T11:08:42Z</timestamp>
      <contributor>
        <ip>137.226.115.28</ip>
      </contributor>
      <comment>minus sign was not visible</comment>
      <text xml:space="preserve" bytes="2726">{{cpp/title|atan}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       atan( float arg );
}}
{{dcl |num=2|
double      atan( double arg );
}}
{{dcl |num=3|
long double atan( long double arg );
}}
{{dcl |num=4|since=c++11 |
double      atan( Integral arg );
}}
{{dcl end}}

Computes the principal value of the arc tangent of {{tt|arg}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the arc tangent of {{tt|arg}} ({{math|arctan(arg)}}) in the range {{math|[- {{mfrac|&amp;pi;|2}} ; +{{mfrac|&amp;pi;|2}}]}} radians, is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned unmodified
* If the argument is +∞, +&amp;pi;/2 is returned
* If the argument is -∞, -&amp;pi;/2 is returned
* if the argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/atan.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, and implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Examples===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; &quot;atan(1) = &quot; &lt;&lt; atan(1) &lt;&lt; &quot; 4*atan(1) = &quot; &lt;&lt; 4*atan(1) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;atan(Inf) = &quot; &lt;&lt; atan(INFINITY)
              &lt;&lt; &quot; 2*atan(Inf) = &quot; &lt;&lt; 2*atan(INFINITY) &lt;&lt; '\n'
              &lt;&lt; &quot;atan(-0.0) = &quot; &lt;&lt; atan(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;atan(+0.0) = &quot; &lt;&lt; atan(0) &lt;&lt; '\n';
}
|output=
atan(1) = 0.785398 4*atan(1) = 3.14159
atan(Inf) = 1.5708 2*atan(Inf) = 3.14159
atan(-0.0) = -0
atan(+0.0) = 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/math/dsc atan2}}
{{dsc inc | cpp/numeric/math/dsc tan}}
{{dsc inc | cpp/numeric/complex/dsc atan}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc see c | c/numeric/math/atan}}
{{dsc end}}

[[de:cpp/numeric/math/atan]]
[[es:cpp/numeric/math/atan]]
[[fr:cpp/numeric/math/atan]]
[[it:cpp/numeric/math/atan]]
[[ja:cpp/numeric/math/atan]]
[[pl:cpp/numeric/math/atan]]
[[pt:cpp/numeric/math/atan]]
[[ru:cpp/numeric/math/atan]]
[[zh:cpp/numeric/math/atan]]</text>
      <sha1>dbpa7ezywcival2hucl98j3uo9t3ti7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/atan2</title>
    <ns>0</ns>
    <id>1348</id>
    <revision>
      <id>90027</id>
      <parentid>79630</parentid>
      <timestamp>2017-02-01T22:47:52Z</timestamp>
      <contributor>
        <ip>139.130.103.234</ip>
      </contributor>
      <text xml:space="preserve" bytes="5068">{{cpp/title|atan2}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | num = 1 |
float       atan2( float y, float x );
}}
{{dcl | num = 2 |
double      atan2( double y, double x );
}}
{{dcl | num = 3 |
long double atan2( long double y, long double x );
}}
{{dcl | num = 4 | since=c++11 |
Promoted    atan2( Arithmetic1 y, Arithmetic2 x );
}}
{{dcl end}}

Computes the arc tangent of {{tt|y/x}} using the signs of arguments to determine the correct quadrant.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by 1-3). If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | x, y | values of floating-point or [[cpp/types/is_integral|integral types]]}}
{{par end}}

===Return value===
If no errors occur, the arc tangent of {{tt|y/x}} ({{math|arctan({{mfrac|y|x}})}}) in the range {{math|[-&amp;pi; ; +&amp;pi;]}} radians, is returned.

{{plot | math-atan2.png | left=Y argument | bottom=X argument | right=Return value | size=x240px}}

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error may occur if {{tt|x}} and {{tt|y}} are both zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|x}} and {{tt|y}} are both zero, domain error ''does not'' occur
* If {{tt|x}} and {{tt|y}} are both zero, range error does not occur either
* If {{tt|y}} is zero, pole error does not occur
* If {{tt|y}} is {{tt|±0}} and {{tt|x}} is negative or {{tt|-0}}, {{tt|±&amp;pi;}} is returned
* If {{tt|y}} is {{tt|±0}} and {{tt|x}} is positive or {{tt|+0}}, {{tt|±0}} is returned
* If {{tt|y}} is {{tt|±∞}} and {{tt|x}} is finite, {{tt|±&amp;pi;/2}} is returned
* If {{tt|y}} is {{tt|±∞}} and {{tt|x}} is {{tt|-∞}}, {{tt|±3&amp;pi;/4}} is returned
* If {{tt|y}} is {{tt|±∞}} and {{tt|x}} is {{tt|+∞}}, {{tt|±&amp;pi;/4}} is returned
* If {{tt|x}} is {{tt|±0}} and {{tt|y}} is negative, {{tt|-&amp;pi;/2}} is returned
* If {{tt|x}} is {{tt|±0}} and {{tt|y}} is positive, {{tt|+&amp;pi;/2}} is returned
* If {{tt|x}} is {{tt|-∞}} and {{tt|y}} is finite and positive, {{tt|+&amp;pi;}} is returned
* If {{tt|x}} is {{tt|-∞}} and {{tt|y}} is finite and negative, {{tt|-&amp;pi;}} is returned
* If {{tt|x}} is {{tt|+∞}} and {{tt|y}} is finite and positive, {{tt|+0}} is returned
* If {{tt|x}} is {{tt|+∞}} and {{tt|y}} is finite and negative, {{tt|-0}} is returned
* If either {{tt|x}} is NaN or {{tt|y}} is NaN, NaN is returned

===Notes===
{{c|std::atan2(y, x)}} is equivalent to {{c|std::arg(std::complex&lt;double&gt;(x,y))}}

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/atan2.html POSIX specifies] that in case of underflow, {{tt|y/x}} is the value returned, and if that is not supported, and implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    // normal usage: the signs of the two arguments determine the quadrant
    std::cout &lt;&lt; &quot;(+1,+1) cartesian is (&quot; &lt;&lt; hypot(1,1)
              &lt;&lt; ',' &lt;&lt; atan2(1,1) &lt;&lt; &quot;) polar\n&quot;  // atan2(1,1) = +pi/4, Quad I
              &lt;&lt; &quot;(+1,-1) cartesian is (&quot; &lt;&lt; hypot(1,-1)
              &lt;&lt; ',' &lt;&lt; atan2(1,-1) &lt;&lt; &quot;) polar\n&quot; // atan2(1, -1) = +3pi/4, Quad II
              &lt;&lt; &quot;(-1,-1) cartesian is (&quot; &lt;&lt; hypot(-1,-1)
              &lt;&lt; ',' &lt;&lt; atan2(-1,-1) &lt;&lt; &quot;) polar\n&quot; // atan2(-1,-1) = -3pi/4, Quad III
              &lt;&lt; &quot;(-1,+1) cartesian is (&quot; &lt;&lt; hypot(-1,1)
              &lt;&lt; ',' &lt;&lt; atan2(-1,1) &lt;&lt; &quot;) polar\n&quot;; // atan2(-1,-1) = -pi/4, Quad IV
    // special values
    std::cout &lt;&lt; &quot;atan2(0, 0) = &quot; &lt;&lt; atan2(0,0)
              &lt;&lt; &quot; atan2(0,-0) = &quot; &lt;&lt; atan2(0,-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;atan2(7, 0) = &quot; &lt;&lt; atan2(7,0)
              &lt;&lt; &quot; atan2(7,-0) = &quot; &lt;&lt; atan2(7,-0.0) &lt;&lt; '\n';
}
 | output=
(+1,+1) cartesian is (1.41421,0.785398) polar
(+1,-1) cartesian is (1.41421,2.35619) polar
(-1,-1) cartesian is (1.41421,-2.35619) polar
(-1,+1) cartesian is (1.41421,-0.785398) polar
atan2(0, 0) = 0 atan2(0,-0) = 3.14159
atan2(7, 0) = 1.5708 atan2(7,-0) = 1.5708
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/complex/dsc arg}}
{{dsc inc | cpp/numeric/valarray/dsc atan2}}
{{dsc see c | c/numeric/math/atan2}}
{{dsc end}}

[[de:cpp/numeric/math/atan2]]
[[es:cpp/numeric/math/atan2]]
[[fr:cpp/numeric/math/atan2]]
[[it:cpp/numeric/math/atan2]]
[[ja:cpp/numeric/math/atan2]]
[[pl:cpp/numeric/math/atan2]]
[[pt:cpp/numeric/math/atan2]]
[[ru:cpp/numeric/math/atan2]]
[[zh:cpp/numeric/math/atan2]]</text>
      <sha1>5of6id3ni1umyzfelit5ygssb3cxwwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/atanh</title>
    <ns>0</ns>
    <id>1349</id>
    <revision>
      <id>70604</id>
      <parentid>67145</parentid>
      <timestamp>2014-05-26T06:22:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail</comment>
      <text xml:space="preserve" bytes="3886">{{cpp/title|atanh}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       atanh( float arg );
}}
{{dcl | since=c++11 |num=2|
double      atanh( double arg );
}}
{{dcl | since=c++11 |num=3|
long double atanh( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      atanh( Integral arg );
}}
{{dcl end}}

Computes the inverse hyperbolic tangent of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the inverse hyperbolic tangent of {{tt|arg}} ({{math|tanh{{su|p=-1}}(arg)}}, or {{math|artanh(arg)}}), is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a pole error occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned (with the correct sign).

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the argument is not on the interval {{math|[-1, +1]}}, a range error occurs.

If the argument is ±1, a pole error occurs.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, it is returned unmodified
* if the argument is ±1, ±∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* if {{math|{{!}}arg{{!}}&gt;1}}, NaN is returned and {{lc|FE_INVALID}} is raised.
* if the argument is NaN, NaN is returned

===Notes===
Although the C standard (to which C++ refers for this function) names this function &quot;arc hyperbolic tangent&quot;, the inverse functions of the hyperbolic functions are the area functions. Their argument is the area of a hyperbolic sector, not an arc. The correct name is &quot;inverse hyperbolic tangent&quot; (used by POSIX) or &quot;area hyperbolic tangent&quot;.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/atanh.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;
#include &lt;cstring&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;atanh(0) = &quot; &lt;&lt; std::atanh(0) &lt;&lt; '\n'
              &lt;&lt; &quot;atanh(-0) = &quot; &lt;&lt; std::atanh(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;atanh(0.9) = &quot; &lt;&lt; std::atanh(0.9) &lt;&lt; '\n';
     // error handling 
     errno = 0; std::feclearexcept(FE_ALL_EXCEPT);
     std::cout &lt;&lt; &quot;atanh(-1) = &quot; &lt;&lt; std::atanh(-1) &lt;&lt; '\n';
     if(errno == ERANGE)
         std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
     if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
|p=true
|output=
atanh(0) = 0
atanh(-0) = -0
atanh(0.9) = 1.47222
atanh(-1) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc asinh}}
{{dsc inc | cpp/numeric/math/dsc acosh}}
{{dsc inc | cpp/numeric/math/dsc tanh}}
{{dsc inc | cpp/numeric/complex/dsc atanh}}
{{dsc see c | c/numeric/math/atanh}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/InverseHyperbolicTangent.html Weisstein, Eric W. &quot;Inverse Hyperbolic Tangent.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/math/atanh]]
[[es:cpp/numeric/math/atanh]]
[[fr:cpp/numeric/math/atanh]]
[[it:cpp/numeric/math/atanh]]
[[ja:cpp/numeric/math/atanh]]
[[pt:cpp/numeric/math/atanh]]
[[ru:cpp/numeric/math/atanh]]
[[zh:cpp/numeric/math/atanh]]</text>
      <sha1>qa4jy6u0c0366fu4v8ksm9lrwycgq3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/cbrt</title>
    <ns>0</ns>
    <id>1350</id>
    <revision>
      <id>70629</id>
      <parentid>70459</parentid>
      <timestamp>2014-05-27T03:53:43Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ link to hypot</comment>
      <text xml:space="preserve" bytes="2207">{{cpp/title|cbrt}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | num=1 | since=c++11 |
float       cbrt( float arg );
}}
{{dcl | num=2 |since=c++11 |
double      cbrt( double arg );
}}
{{dcl | num=3 |since=c++11 |
long double cbrt( long double arg );
}}
{{dcl | num=4 |since=c++11 |
double      cbrt( Integral arg );
}}
{{dcl end}}

Computes the cubic root of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the cubic root of {{tt|arg}} ({{math|{{mrad|arg|3}}}}), is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0 or ±∞, it is returned, unchanged
* if the argument is NaN, NaN is returned.

===Notes===
{{c|std::cbrt(arg)}} is not equivalent to {{c|std::pow(arg, 1.0/3)}} because {{lc|std::pow}} cannot raise a negative base to a fractional exponent.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    // normal use
    std::cout &lt;&lt; &quot;cbrt(729) = &quot; &lt;&lt; std::cbrt(729) &lt;&lt; '\n'
              &lt;&lt; &quot;cbrt(-0.125) = &quot; &lt;&lt; std::cbrt(-0.125) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;cbrt(-0) = &quot; &lt;&lt; std::cbrt(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;cbrt(+inf) = &quot; &lt;&lt; std::cbrt(INFINITY) &lt;&lt; '\n';
}
 | output=
cbrt(729) = 9
cbrt(-0.125) = -0.5
cbrt(-0) = -0
cbrt(+inf) = inf
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc pow}}
{{dsc inc | cpp/numeric/math/dsc sqrt}}
{{dsc inc | cpp/numeric/math/dsc hypot}}
{{dsc see c | c/numeric/math/cbrt}}
{{dsc end}}

[[de:cpp/numeric/math/cbrt]]
[[es:cpp/numeric/math/cbrt]]
[[fr:cpp/numeric/math/cbrt]]
[[it:cpp/numeric/math/cbrt]]
[[ja:cpp/numeric/math/cbrt]]
[[pt:cpp/numeric/math/cbrt]]
[[ru:cpp/numeric/math/cbrt]]
[[zh:cpp/numeric/math/cbrt]]</text>
      <sha1>jj7b1qlstb1vvzjvwib3x7gj54tdvc3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/ceil</title>
    <ns>0</ns>
    <id>1351</id>
    <revision>
      <id>84366</id>
      <parentid>84365</parentid>
      <timestamp>2016-03-17T20:32:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 84365 by [[Special:Contributions/86.247.85.155|86.247.85.155]] ([[User talk:86.247.85.155|talk]]) C (and POSIX) says &quot;the smallest integer value not less than x.&quot;</comment>
      <text xml:space="preserve" bytes="3050">{{cpp/title|ceil}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | num=1 |
float       ceil( float arg );
}}
{{dcl | num=2 |
double      ceil( double arg );
}}
{{dcl | num=3 |
long double ceil( long double arg );
}}
{{dcl | since=c++11 | num=4 |
double      ceil( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the smallest integer value not less than {{tt|arg}}. 
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the smallest integer value not less than {{tt|arg}}, that is {{math|⌈arg⌉}}, is returned.

{{plot | left=Return value | bottom=Argument | math-ceil.svg}}

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If arg is NaN, NaN is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised when rounding a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so this function never overflows on its own; however the result may overflow any integer type (including {{lc|std::intmax_t}}), when stored in an integer variable.

This function (for double argument) behaves as if (except for the freedom to not raise {{lc|FE_INEXACT}}) implemented by

{{source|1=#include &lt;cmath&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
double ceil(double x)
{
    double result;
    int save_round = std::fegetround();
    std::fesetround(FE_UPWARD);
    result = std::rint(x); // or std::nearbyint 
    std::fesetround(save_round);
    return result;
}
}}

===Example===
{{example
 | code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; std::fixed
              &lt;&lt; &quot;ceil(+2.4) = &quot; &lt;&lt; std::ceil(+2.4) &lt;&lt; '\n'
              &lt;&lt; &quot;ceil(-2.4) = &quot; &lt;&lt; std::ceil(-2.4) &lt;&lt; '\n'
              &lt;&lt; &quot;ceil(-0.0) = &quot; &lt;&lt; std::ceil(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;ceil(-Inf) = &quot; &lt;&lt; std::ceil(-INFINITY) &lt;&lt; '\n';
}
 | output=
ceil(+2.4) = 3.000000
ceil(-2.4) = -2.000000
ceil(-0.0) = -0.000000
ceil(-Inf) = -INF
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc floor}}
{{dsc inc | cpp/numeric/math/dsc trunc}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc inc | cpp/numeric/math/dsc nearbyint}}
{{dsc inc | cpp/numeric/math/dsc rint}}
{{dsc see c | c/numeric/math/ceil}}
{{dsc end}}

[[de:cpp/numeric/math/ceil]]
[[es:cpp/numeric/math/ceil]]
[[fr:cpp/numeric/math/ceil]]
[[it:cpp/numeric/math/ceil]]
[[ja:cpp/numeric/math/ceil]]
[[pl:cpp/numeric/math/ceil]]
[[pt:cpp/numeric/math/ceil]]
[[ru:cpp/numeric/math/ceil]]
[[zh:cpp/numeric/math/ceil]]</text>
      <sha1>1danazuew583s3n8jni3olsysdujpct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/copysign</title>
    <ns>0</ns>
    <id>1352</id>
    <revision>
      <id>73020</id>
      <parentid>70500</parentid>
      <timestamp>2014-10-08T13:35:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail</comment>
      <text xml:space="preserve" bytes="2765">{{cpp/title|copysign}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num = 1|
float       copysign( float x, float y );
}}
{{dcl | since=c++11 | num = 2|
double      copysign( double x, double y );
}}
{{dcl | since=c++11 | num = 3|
long double copysign( long double x, long double y );
}}
{{dcl | since=c++11 | num = 4|
Promoted    copysign( Arithmetic1 x, Arithmetic2 y );
}}
{{dcl end}}

@1-3@ Composes a floating point value with the magnitude of {{tt|x}} and the sign of {{tt|y}}. 
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par end}}

===Return value===
If no errors occur, the floating point value with the magnitude of {{tt|x}} and the sign of {{tt|y}} is returned.

If {{tt|x}} is NaN, then NaN with the sign of {{tt|y}} is returned.

If {{tt|y}} is -0, the result is only negative if the implementation supports the signed zero consistently in arithmetic operations.

===Error handling===
This function is not subject to any errors specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The returned value is exact ({{lc|FE_INEXACT}} is never raised) and independent of the current [[cpp/numeric/fenv/FE_round|rounding mode]].

===Notes===
{{tt|std::copysign}} is the only portable way to manipulate the sign of a NaN value (to examine the sign of a NaN, {{lc|signbit}} may also be used)

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main(void)
{
    std::cout &lt;&lt; &quot;copysign(1.0,+2.0) = &quot; &lt;&lt; std::copysign(1.0,+2.0) &lt;&lt; '\n'
              &lt;&lt; &quot;copysign(1.0,-2.0) = &quot; &lt;&lt; std::copysign(1.0,-2.0) &lt;&lt; '\n'
              &lt;&lt; &quot;copysign(inf,-2.0) = &quot; &lt;&lt; std::copysign(INFINITY,-2.0) &lt;&lt; '\n'
              &lt;&lt; &quot;copysign(NaN,-2.0) = &quot; &lt;&lt; std::copysign(NAN,-2.0) &lt;&lt; '\n';
}
|output=
copysign(1.0,+2.0) = 1
copysign(1.0,-2.0) = -1
copysign(inf,-2.0) = -inf
copysign(NaN,-2.0) = -nan
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fabs}}
{{dsc inc | cpp/numeric/math/dsc signbit}}
{{dsc see c | c/numeric/math/copysign}}
{{dsc end}}

[[de:cpp/numeric/math/copysign]]
[[es:cpp/numeric/math/copysign]]
[[fr:cpp/numeric/math/copysign]]
[[it:cpp/numeric/math/copysign]]
[[ja:cpp/numeric/math/copysign]]
[[pt:cpp/numeric/math/copysign]]
[[ru:cpp/numeric/math/copysign]]
[[zh:cpp/numeric/math/copysign]]</text>
      <sha1>6s2tg78rx83faixkvgj9kuardryhejb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/cos</title>
    <ns>0</ns>
    <id>1353</id>
    <revision>
      <id>70511</id>
      <parentid>70210</parentid>
      <timestamp>2014-05-24T19:55:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>return values, details for overload 4</comment>
      <text xml:space="preserve" bytes="3120">{{cpp/title|cos}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | num=1|
float       cos( float arg );
}}
{{dcl |num=2|
double      cos( double arg );
}}
{{dcl |num=3|
long double cos( long double arg );
}}
{{dcl | num=4| since=c++11 |
double      cos( Integral arg );
}}
{{dcl end}}

Computes the cosine of {{tt|arg}} (measured in radians).
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value representing angle in radians, of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the cosine of {{tt|arg}} ({{math|cos(arg)}}) in the range {{math|[-1 ; +1]}}, is returned.

{{rev begin}}
{{rev|until=c++11|
The result may have little or no significance if the magnitude of {{tt|arg}} is large
}}
{{rev end}}

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, the result is 1.0
* if the argument is ±∞, NaN is returned and {{lc|FE_INVALID}} is raised
* if the argument is NaN, NaN is returned

===Notes===
The case where the argument is infinite is not specified to be a domain error in C, but it is defined as a [http://pubs.opengroup.org/onlinepubs/9699919799/functions/cos.html domain error in POSIX]

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
const double pi = std::acos(-1);
int main()
{
    // typical usage
    std::cout &lt;&lt; &quot;cos(pi/3) = &quot; &lt;&lt; std::cos(pi/3) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi/2) = &quot; &lt;&lt; std::cos(pi/2) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(-3*pi/4) = &quot; &lt;&lt; std::cos(-3*pi/4) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;cos(+0) = &quot; &lt;&lt; std::cos(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(-0) = &quot; &lt;&lt; std::cos(-0.0) &lt;&lt; '\n';
    // error handling 
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;cos(INFINITY) = &quot; &lt;&lt; std::cos(INFINITY) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID)) std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
| p=true
| output=
cos(pi/3) = 0.5
cos(pi/2) = 6.12323e-17
cos(-3*pi/4) = -0.707107
cos(+0) = 1
cos(-0) = 1
cos(INFINITY) = -nan
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc sin}}
{{dsc inc | cpp/numeric/math/dsc tan}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/complex/dsc cos}}
{{dsc inc | cpp/numeric/valarray/dsc cos}}
{{dsc see c | c/numeric/math/cos}}
{{dsc end}}

[[de:cpp/numeric/math/cos]]
[[es:cpp/numeric/math/cos]]
[[fr:cpp/numeric/math/cos]]
[[it:cpp/numeric/math/cos]]
[[ja:cpp/numeric/math/cos]]
[[pl:cpp/numeric/math/cos]]
[[pt:cpp/numeric/math/cos]]
[[ru:cpp/numeric/math/cos]]
[[zh:cpp/numeric/math/cos]]</text>
      <sha1>9xvjs4padkvtjqky9p84m9kk4phxgpd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/cosh</title>
    <ns>0</ns>
    <id>1354</id>
    <revision>
      <id>70556</id>
      <parentid>67141</parentid>
      <timestamp>2014-05-25T01:27:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>return values, other details, example</comment>
      <text xml:space="preserve" bytes="2954">{{cpp/title|cosh}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | num=1 |
float       cosh( float arg );
}}
{{dcl | num=2 |
double      cosh( double arg );
}}
{{dcl | num=3 |
long double cosh( long double arg );
}}
{{dcl | since=c++11 | num=4 |
double      cosh( Integral arg );
}}
{{dcl end}}

Computes the hyperbolic cosine of {{tt|arg}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the hyperbolic cosine of {{tt|arg}} ({{math|cosh(arg)}}, or {{math|{{mfrac|e{{su|p=arg}}+e{{su|p=-arg}}|2}}}}) is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, 1 is returned
* If the argument is ±∞, +∞ is returned
* if the argument is NaN, NaN is returned

===Notes===
For the IEEE-compatible type {{c|double}}, if {{math|{{!}}arg{{!}} &gt; 710.5}}, then {{tt|cosh(arg)}} overflows.

===Example===
{{source|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;cosh(1) = &quot; &lt;&lt; std::cosh(1) &lt;&lt; '\n'
              &lt;&lt; &quot;cosh(-1) = &quot; &lt;&lt; std::cosh(-1) &lt;&lt; '\n'
              &lt;&lt; &quot;log(sinh(1)+cosh(1)=&quot; &lt;&lt; std::log(std::sinh(1)+std::cosh(1)) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;cosh(+0) = &quot; &lt;&lt; std::cosh(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;cosh(-0) = &quot; &lt;&lt; std::cosh(-0.0) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;cosh(710.5) = &quot; &lt;&lt; std::cosh(710.5) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
|p=true
|output=
cosh(1) = 1.54308
cosh(-1) = 1.54308
log(sinh(1)+cosh(1)=1
cosh(+0) = 1
cosh(-0) = 1
cosh(710.5) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc sinh}}
{{dsc inc | cpp/numeric/math/dsc tanh}}
{{dsc inc | cpp/numeric/math/dsc acosh}}
{{dsc inc | cpp/numeric/complex/dsc cosh}}
{{dsc inc | cpp/numeric/valarray/dsc cosh}}
{{dsc see c | c/numeric/math/cosh}}
{{dsc end}}

[[de:cpp/numeric/math/cosh]]
[[es:cpp/numeric/math/cosh]]
[[fr:cpp/numeric/math/cosh]]
[[it:cpp/numeric/math/cosh]]
[[ja:cpp/numeric/math/cosh]]
[[pl:cpp/numeric/math/cosh]]
[[pt:cpp/numeric/math/cosh]]
[[ru:cpp/numeric/math/cosh]]
[[zh:cpp/numeric/math/cosh]]</text>
      <sha1>8i4x5uic5cwyg9qcie4q63sjbbbea82</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/div</title>
    <ns>0</ns>
    <id>1355</id>
    <revision>
      <id>74698</id>
      <parentid>73361</parentid>
      <timestamp>2014-12-22T23:57:15Z</timestamp>
      <contributor>
        <ip>78.45.129.19</ip>
      </contributor>
      <text xml:space="preserve" bytes="3789">{{cpp/title|div|ldiv|lldiv}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl |num=1|
std::div_t     div( int x, int y );
}}
{{dcl |num=2|
std::ldiv_t    div( long x, long y );
}}
{{dcl | since=c++11 |num=3|
std::lldiv_t   div( long long x, long long y );
}}
{{dcl |num=4|
std::ldiv_t   ldiv( long x, long y );
}}
{{dcl | since=c++11 |num=5|
std::lldiv_t lldiv( long long x, long long y );
}}
{{dcl header | cinttypes}}
{{dcl | since=c++11 |num=6|
std::imaxdiv_t div( std::intmax_t x, std::intmax_t y );
}}
{{dcl | since=c++11 |num=7|
std::imaxdiv_t imaxdiv( std::intmax_t x, std::intmax_t y );
}}
{{dcl end}}

Computes both the quotient and the remainder of the division of the numerator {{tt|x}} by the denominator {{tt|y}}
{{rev begin}}
{{rev | until=c++11 |
The quotient is the algebraic quotient with any fractional part discarded (truncated towards zero). The remainder is such that {{c|1=quot * y + rem == x}}.
}}
{{rev | since=c++11 |
The quotient is the result of the expression {{c|x/y}}. The remainder is the result of the expression {{c|x%y}}.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | x, y | integer values}}
{{par end}}

===Return value===
If both the remainder and the quotient can be represented as objects of the corresponding type (int, long, long long, std::imaxdiv_t, respectively), returns both as an object of type {{tt|std::div_t}}, {{tt|std::ldiv_t}}, {{tt|std::lldiv_t}}, {{tt|std::imaxdiv_t}} defined as follows:

{{member | {{small|std::}}div_t | 2=
{{source|1=
struct div_t { int quot; int rem; };
}}
or
{{source|1=
struct div_t { int rem; int quot; };
}}
}}

{{member | {{small|std::}}ldiv_t | 2=
{{source|1=
struct ldiv_t { long quot; long rem; };
}}
or
{{source|1=
struct ldiv_t { long rem; long quot; };
}}
}}

{{member | {{small|std::}}lldiv_t | 2=
{{source|1=
struct lldiv_t { long long quot; long long rem; };
}}
or
{{source|1=
struct lldiv_t { long long rem; long long quot; };
}}
}}

{{member | {{small|std::}}imaxdiv_t | 2=
{{source|1=
struct imaxdiv_t { std::intmax_t quot; std::intmax_t rem; };
}}
or
{{source|1=
struct imaxdiv_t { std::intmax_t rem; std::intmax_t quot; };
}}
}}


If either the remainder or the quotient cannot be represented, the behavior is undefined.

===Notes===
Until C++11, the rounding direction of the quotient and the sign of the remainder in the [[cpp/language/operator_arithmetic|built-in division and remainder operators]] was implementation-defined if either of the operands was negative, but it was well-defined in {{lc|std::div}}.

On many platforms, a single CPU instruction obtains both the quotient and the remainder, and this function may leverage that, although compilers are generally able to merge nearby / and % where suitable.

===Example===
{{example
|code=
#include &lt;string&gt;
#include &lt;cmath&gt;
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

std::string itoa(int n, int base)
{
    std::string buf;
    std::div_t dv{}; dv.quot = n;
    do {
        dv = std::div(dv.quot, base);
        buf += &quot;0123456789abcdef&quot;[std::abs(dv.rem)];  // string literals are arrays
    } while(dv.quot);
    if(n&lt;0) buf += '-';
    return {buf.rbegin(), buf.rend()};
}

int main()
{
    std::cout &lt;&lt; itoa(12345, 10) &lt;&lt; '\n'
              &lt;&lt; itoa(-12345, 10) &lt;&lt; '\n'
              &lt;&lt; itoa(65535, 16) &lt;&lt; '\n';
}
|output=
12345
-12345
ffff
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fmod}}
{{dsc inc | cpp/numeric/math/dsc remainder}}
{{dsc inc | cpp/numeric/math/dsc remquo}}
{{dsc see c | c/numeric/math/div}}
{{dsc end}}

[[de:cpp/numeric/math/div]]
[[es:cpp/numeric/math/div]]
[[fr:cpp/numeric/math/div]]
[[it:cpp/numeric/math/div]]
[[ja:cpp/numeric/math/div]]
[[pl:cpp/numeric/math/div]]
[[pt:cpp/numeric/math/div]]
[[ru:cpp/numeric/math/div]]
[[zh:cpp/numeric/math/div]]</text>
      <sha1>98d9jcafdtbcwnt0s00egdidsmv3wgv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/erf</title>
    <ns>0</ns>
    <id>2951</id>
    <revision>
      <id>71164</id>
      <parentid>71159</parentid>
      <timestamp>2014-06-07T06:03:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="3114">{{cpp/title|erf}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       erf( float arg );
}}
{{dcl | since=c++11 |num=2|
double      erf( double arg );
}}
{{dcl | since=c++11 |num=3|
long double erf( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      erf( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the [[enwiki:Error function|error function]] of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, value of the error function of {{tt|arg}}, that is {{math|{{mfrac|2|{{mrad|&amp;pi;}}}}{{minteg|0|arg|{{mexp|-t{{su|p=2}}}}d''t''}}}}, is returned.


If a range error occurs due to underflow, the correct result (after rounding), that is {{math|{{mfrac|2*arg|{{mrad|&amp;pi;}}}}}} is returned

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, ±0 is returned
* If the argument is ±∞, ±1 is returned
* If the argument is NaN, NaN is returned

===Notes===
Underflow is guaranteed if {{c|{{!}}arg{{!}} &lt; DBL_MIN*(sqrt(π)/2)}}

{{math|erf({{mfrac|x|&amp;sigma;{{mrad|2}}}})}} is the probability that a measurement whose errors are subject to a normal distribution with standard deviation {{math|&amp;sigma;}} is less than {{math|x}} away from the mean value.

===Example===
{{example
 | The following example calculates the probability that a normal variate is on the interval (x1, x2)
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;iomanip&gt;
double phi(double x1, double x2)
{
    return (std::erf(x2/std::sqrt(2)) - std::erf(x1/std::sqrt(2)))/2;
}
int main()
{
    std::cout &lt;&lt; &quot;normal variate probabilities:\n&quot;
              &lt;&lt; std::fixed &lt;&lt; std::setprecision(2);
    for(int n=-4; n&lt;4; ++n)
        std::cout &lt;&lt; &quot;[&quot; &lt;&lt; std::setw(2) &lt;&lt; n &lt;&lt; &quot;:&quot; &lt;&lt; std::setw(2) &lt;&lt; n+1 &lt;&lt; &quot;]: &quot;
                  &lt;&lt; std::setw(5) &lt;&lt; 100*phi(n, n+1) &lt;&lt; &quot;%\n&quot;;

    std::cout &lt;&lt; &quot;special values:\n&quot;
              &lt;&lt; &quot;erf(-0) = &quot; &lt;&lt; std::erf(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;erf(Inf) = &quot; &lt;&lt; std::erf(INFINITY) &lt;&lt; '\n';
}
 | output=
normal variate probabilities:
[-4:-3]:  0.13%
[-3:-2]:  2.14%
[-2:-1]: 13.59%
[-1: 0]: 34.13%
[ 0: 1]: 34.13%
[ 1: 2]: 13.59%
[ 2: 3]:  2.14%
[ 3: 4]:  0.13%
special values:
erf(-0) = -0.00
erf(Inf) = 1.00
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc erfc}}
{{dsc see c | c/numeric/math/erf}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/Erf.html Weisstein, Eric W. &quot;Erf.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/math/erf]]
[[es:cpp/numeric/math/erf]]
[[fr:cpp/numeric/math/erf]]
[[it:cpp/numeric/math/erf]]
[[ja:cpp/numeric/math/erf]]
[[pt:cpp/numeric/math/erf]]
[[ru:cpp/numeric/math/erf]]
[[zh:cpp/numeric/math/erf]]</text>
      <sha1>izd6q9prnthtn40dfu0icb3yrgvf8kc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/erfc</title>
    <ns>0</ns>
    <id>2952</id>
    <revision>
      <id>73571</id>
      <parentid>73569</parentid>
      <timestamp>2014-11-05T21:39:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>anonymous editor is totally right, adjusting example output to match</comment>
      <text xml:space="preserve" bytes="2999">{{cpp/title|erfc}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       erfc( float arg );
}}
{{dcl | since=c++11 |num=2|
double      erfc( double arg );
}}
{{dcl | since=c++11 |num=3|
long double erfc( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      erfc( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the [[enwiki:Complementary error function|complementary error function]] of {{tt|arg}}, that is {{tt|1.0-erf(arg)}}, but without loss of precision for large {{tt|arg}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, value of the complementary error function of {{tt|arg}}, that is {{math|{{mfrac|2|{{mrad|&amp;pi;}}}}{{minteg|arg|∞|{{mexp|-t{{su|p=2}}}}d''t''}}}} or {{math|1-erf(arg)}}, is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is +∞, +0 is returned
* If the argument is -∞, 2 is returned
* If the argument is NaN, NaN is returned

===Notes===
For the IEEE-compatible type {{tt|double}}, underflow is guaranteed if {{tt|arg}} &gt; 26.55.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;iomanip&gt;
double normalCDF(double x) // Phi(-∞, x) aka N(x)
{
    return std::erfc(-x/std::sqrt(2))/2;
}
int main()
{
    std::cout &lt;&lt; &quot;normal cumulative distribution function:\n&quot;
              &lt;&lt; std::fixed &lt;&lt; std::setprecision(2);
    for(double n=0; n&lt;1; n+=0.1)
        std::cout &lt;&lt; &quot;normalCDF(&quot; &lt;&lt; n &lt;&lt; &quot;) &quot; &lt;&lt; 100*normalCDF(n) &lt;&lt; &quot;%\n&quot;;

    std::cout &lt;&lt; &quot;special values:\n&quot;
              &lt;&lt; &quot;erfc(-Inf) = &quot; &lt;&lt; std::erfc(-INFINITY) &lt;&lt; '\n'
              &lt;&lt; &quot;erfc(Inf) = &quot; &lt;&lt; std::erfc(INFINITY) &lt;&lt; '\n';
}
|output=
normal cumulative distribution function:
normalCDF(0.00) 50.00%
normalCDF(0.10) 53.98%
normalCDF(0.20) 57.93%
normalCDF(0.30) 61.79%
normalCDF(0.40) 65.54%
normalCDF(0.50) 69.15%
normalCDF(0.60) 72.57%
normalCDF(0.70) 75.80%
normalCDF(0.80) 78.81%
normalCDF(0.90) 81.59%
normalCDF(1.00) 84.13%
special values:
erfc(-Inf) = 2.00
erfc(Inf) = 0.00
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc erf}}
{{dsc see c | c/numeric/math/erfc}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/Erfc.html Weisstein, Eric W. &quot;Erfc.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/math/erfc]]
[[es:cpp/numeric/math/erfc]]
[[fr:cpp/numeric/math/erfc]]
[[it:cpp/numeric/math/erfc]]
[[ja:cpp/numeric/math/erfc]]
[[pt:cpp/numeric/math/erfc]]
[[ru:cpp/numeric/math/erfc]]
[[zh:cpp/numeric/math/erfc]]</text>
      <sha1>7r0ut514dlgwfsv4cbzl7r6q7ukge71</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/exp</title>
    <ns>0</ns>
    <id>1356</id>
    <revision>
      <id>70674</id>
      <parentid>70616</parentid>
      <timestamp>2014-05-28T04:25:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>tgmath, return values, error handling, posix note, example</comment>
      <text xml:space="preserve" bytes="3080">{{cpp/title|exp}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       exp( float arg );
}}
{{dcl |num=2|
double      exp( double arg );
}}
{{dcl |num=3|
long double exp( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      exp( Integral arg );
}}
{{dcl end}}

Computes the ''e'' (Euler's number, {{tt|2.7182818}}) raised to the given power {{tt|arg}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the base-''e'' exponential of {{tt|arg}} ({{math|e{{su|p=arg}}}}) is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, 1 is returned
* If the argument is -∞, +0 is returned
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
For IEEE-compatible type {{c|double}}, overflow is guaranteed if {{math|709.8 &lt; arg}}, and underflow is guaranteed if {{math|arg &lt; -708.4}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;exp(1) = &quot; &lt;&lt; std::exp(1) &lt;&lt; '\n'
              &lt;&lt; &quot;FV of $100, continuously compounded at 3% for 1 year = &quot;
              &lt;&lt; 100*std::exp(0.03) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;exp(-0) = &quot; &lt;&lt; std::exp(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;exp(-Inf) = &quot; &lt;&lt; std::exp(-INFINITY) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;exp(710) = &quot; &lt;&lt; std::exp(710) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
|p=true
|output=
exp(1) = 2.71828
FV of $100, continuously compounded at 3% for 1 year = 103.045
exp(-0) = 1
exp(-Inf) = 0
exp(710) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc exp2}}
{{dsc inc | cpp/numeric/math/dsc expm1}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/complex/dsc exp}}
{{dsc inc | cpp/numeric/valarray/dsc exp}}
{{dsc see c | c/numeric/math/exp}}
{{dsc end}}

[[de:cpp/numeric/math/exp]]
[[es:cpp/numeric/math/exp]]
[[fr:cpp/numeric/math/exp]]
[[it:cpp/numeric/math/exp]]
[[ja:cpp/numeric/math/exp]]
[[pl:cpp/numeric/math/exp]]
[[pt:cpp/numeric/math/exp]]
[[ru:cpp/numeric/math/exp]]
[[zh:cpp/numeric/math/exp]]</text>
      <sha1>93fq66ep2mnc3k38ytt1swck3dtt5j2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/exp2</title>
    <ns>0</ns>
    <id>3293</id>
    <revision>
      <id>87655</id>
      <parentid>70836</parentid>
      <timestamp>2016-09-18T16:08:12Z</timestamp>
      <contributor>
        <ip>24.190.116.30</ip>
      </contributor>
      <comment>Correct which overload the Integral one is equivalent to.</comment>
      <text xml:space="preserve" bytes="2798">{{cpp/title|exp2}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
double      exp2( double n );
}}
{{dcl | since=c++11 |num=2|
float       exp2( float n );
}}
{{dcl | since=c++11 |num=3|
long double exp2( long double n );
}}
{{dcl | since=c++11 |num=4|
double      exp2( Integral n );
}}
{{dcl end}}

@1-3@ Computes 2 raised to the given power {{tt|n}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to (1) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | n | value of floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the base-''2'' exponential of {{tt|n}} ({{math|2{{su|p=n}}}}) is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, 1 is returned
* If the argument is -∞, +0 is returned
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;exp2(4) = &quot; &lt;&lt; std::exp2(4) &lt;&lt; '\n'
              &lt;&lt; &quot;exp2(0.5) = &quot; &lt;&lt; std::exp2(0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;exp2(-4) = &quot; &lt;&lt; std::exp2(-4) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;exp2(-0) = &quot; &lt;&lt; std::exp2(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;exp2(-Inf) = &quot; &lt;&lt; std::exp2(-INFINITY) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;exp2(1024) = &quot; &lt;&lt; std::exp2(1024) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
|p=true
|output=
exp2(4) = 16
exp2(0.5) = 1.41421
exp2(-4) = 0.0625
exp2(-0) = 1
exp2(-Inf) = 0
exp2(1024) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc exp}}
{{dsc inc | cpp/numeric/math/dsc expm1}}
{{dsc inc | cpp/numeric/math/dsc log2}}
{{dsc see c | c/numeric/math/exp2}}
{{dsc end}}

[[de:cpp/numeric/math/exp2]]
[[es:cpp/numeric/math/exp2]]
[[fr:cpp/numeric/math/exp2]]
[[it:cpp/numeric/math/exp2]]
[[ja:cpp/numeric/math/exp2]]
[[pt:cpp/numeric/math/exp2]]
[[ru:cpp/numeric/math/exp2]]
[[zh:cpp/numeric/math/exp2]]</text>
      <sha1>mn35cut4wk0n6hsv6q3syi66ulvezqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/expm1</title>
    <ns>0</ns>
    <id>3661</id>
    <revision>
      <id>70924</id>
      <parentid>70918</parentid>
      <timestamp>2014-06-03T15:08:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="3690">{{cpp/title|expm1}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1 |
float       expm1( float arg );
}}
{{dcl | since=c++11 |num=2 |
double      expm1( double arg );
}}
{{dcl | since=c++11 |num=3 |
long double expm1( long double arg );
}}
{{dcl | since=c++11 |num=4 |
double      expm1( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the ''e'' (Euler's number, {{tt|2.7182818}}) raised to the given power {{tt|arg}}, minus {{c|1.0}}. This function is more accurate than the expression {{c|std::exp(arg)-1.0}} if {{tt|arg}} is close to zero.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur {{math|e{{su|p=arg}}-1}} is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned, unmodified
* If the argument is -∞, -1 is returned
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
The functions {{tt|std::expm1}} and {{lc|std::log1p}} are useful for financial calculations, for example, when calculating small daily interest rates: {{math|(1+x){{su|p=n}}-1}} can be expressed as {{c|std::expm1(n * std::log1p(x))}}. These functions also simplify writing accurate inverse hyperbolic functions.

For IEEE-compatible type {{c|double}}, overflow is guaranteed if {{math|709.8 &lt; arg}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;expm1(1) = &quot; &lt;&lt; std::expm1(1) &lt;&lt; '\n'
              &lt;&lt; &quot;Interest earned in 2 days on on $100, compounded daily at 1%\n&quot;
              &lt;&lt; &quot; on a 30/360 calendar = &quot;
              &lt;&lt; 100*std::expm1(2*std::log1p(0.01/360)) &lt;&lt; '\n'
              &lt;&lt; &quot;exp(1e-16)-1 = &quot; &lt;&lt; std::exp(1e-16)-1
              &lt;&lt; &quot;, but expm1(1e-16) = &quot; &lt;&lt; std::expm1(1e-16) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;expm1(-0) = &quot; &lt;&lt; std::expm1(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;expm1(-Inf) = &quot; &lt;&lt; std::expm1(-INFINITY) &lt;&lt; '\n';
    // error handling
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;expm1(710) = &quot; &lt;&lt; std::expm1(710) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
 | p=true
 | output=
expm1(1) = 1.71828
Interest earned in 2 days on on $100, compounded daily at 1%
 on a 30/360 calendar = 0.00555563
exp(1e-16)-1 = 0 expm1(1e-16) = 1e-16
expm1(-0) = -0
expm1(-Inf) = -1
expm1(710) = inf
    errno == ERANGE: Result too large
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc exp}}
{{dsc inc | cpp/numeric/math/dsc exp2}}
{{dsc inc | cpp/numeric/math/dsc log1p}}
{{dsc see c | c/numeric/math/expm1}}
{{dsc end}}

[[de:cpp/numeric/math/expm1]]
[[es:cpp/numeric/math/expm1]]
[[fr:cpp/numeric/math/expm1]]
[[it:cpp/numeric/math/expm1]]
[[ja:cpp/numeric/math/expm1]]
[[pt:cpp/numeric/math/expm1]]
[[ru:cpp/numeric/math/expm1]]
[[zh:cpp/numeric/math/expm1]]</text>
      <sha1>flupnw0kl60bmv7lw2ino7k4fdey6dr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/fabs</title>
    <ns>0</ns>
    <id>1357</id>
    <revision>
      <id>88521</id>
      <parentid>88520</parentid>
      <timestamp>2016-11-23T04:50:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>2735, I mean</comment>
      <text xml:space="preserve" bytes="3291">{{cpp/title|abs{{small|(float)}}|fabs}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl header | cstdlib | notes={{mark since c++17}}}}
{{dcl |num=1|
float       abs( float arg );
}}
{{dcl |num=2|
double      abs( double arg );
}}
{{dcl |num=3|
long double abs( long double arg );
}}
{{dcl header | cmath}}
{{dcl |num=4|
float       fabs( float arg ); 
}}
{{dcl |num=5|
double      fabs( double arg );
}}
{{dcl |num=6|
long double fabs( long double arg );
}}
{{dcl | since=c++11 |num=7|
double      fabs( Integral arg );
}}
{{dcl end}}

@1-6@ Computes the absolute value of a floating point value {{tt|arg}}.
@7@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by {{v|4-6}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.

{{rev begin}}
{{rev | since=c++17 | For integral arguments, [[cpp/numeric/math/abs|the integral overloads of {{tt|std::abs}}]] are likely better matches. If {{tt|std::abs}} is called with an argument of type {{tt|X}} such that {{c|std::is_unsigned&lt;X&gt;::value}} is {{tt|true}} and {{tt|X}} cannot be converted to {{c|int}} by [[cpp/language/implicit_cast#Integral promotion|integral promotion]], the program is ill-formed.}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | arg | Value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If successful, returns the absolute value of {{tt|arg}} ({{tt|{{!}}arg{{!}}}}). The value returned is exact and does not depend on any rounding modes.

===Error handling===
This function is not subject to any of the error conditions specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, +0 is returned
* If the argument is ±∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
Between C++11 and C++14, the standard erroneously required {{tt|std::abs}} to have overloads for integer types returning {{c|double}}. This requirement was removed in C++17 by [http://wg21.link/lwg2735 defect report 2735].

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; &quot;abs(+3.0) = &quot; &lt;&lt; std::abs(+3.0) &lt;&lt; '\n'
              &lt;&lt; &quot;abs(-3.0) = &quot; &lt;&lt; std::abs(-3.0) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;abs(-0.0) = &quot; &lt;&lt; std::abs(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;abs(-Inf) = &quot; &lt;&lt; std::abs(-INFINITY) &lt;&lt; '\n';
}
|p=true
|output=
abs(+3.0) = 3
abs(-3.0) = 3
abs(-0.0) = 0
abs(-Inf) = inf
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc abs}}
{{dsc inc | cpp/numeric/math/dsc copysign}}
{{dsc inc | cpp/numeric/math/dsc signbit}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc inc | cpp/numeric/valarray/dsc abs}}
{{dsc see c | c/numeric/math/fabs}}
{{dsc end}}

[[de:cpp/numeric/math/fabs]]
[[es:cpp/numeric/math/fabs]]
[[fr:cpp/numeric/math/fabs]]
[[it:cpp/numeric/math/fabs]]
[[ja:cpp/numeric/math/fabs]]
[[pl:cpp/numeric/math/fabs]]
[[pt:cpp/numeric/math/fabs]]
[[ru:cpp/numeric/math/fabs]]
[[zh:cpp/numeric/math/fabs]]</text>
      <sha1>dev0hv9l653ip5afxyaj8mq7qgg927x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/fdim</title>
    <ns>0</ns>
    <id>2661</id>
    <revision>
      <id>71200</id>
      <parentid>71198</parentid>
      <timestamp>2014-06-08T01:53:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-stray tt</comment>
      <text xml:space="preserve" bytes="2986">{{cpp/title|fdim}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
float       fdim( float x, float y );
}}
{{dcl | since=c++11 | num=2 |
double      fdim( double x, double y );
}}
{{dcl | since=c++11 | num=3 |
long double fdim( long double x, long double y );
}}
{{dcl | since=c++11 | num=4 |
Promoted    fdim( Arithmetic1 x, Arithmetic2 y );
}}
{{dcl end}}

@1-3@ Returns the positive difference between {{c|x}} and {{c|y}}, that is, if {{c|x&gt;y}}, returns {{c|x-y}}, otherwise (if {{c|x≤y}}), returns +0.
@4@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by 1-3). If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | x, y | values of floating-point or [[cpp/types/is_integral|integral types]]}}
{{par end}}

===Return value===
If successful, returns the positive difference between x and y.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct value (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If either argument is NaN, NaN is returned

===Notes===
Equivalent to {{c|std::fmax(x-y, 0)}},  except for the NaN handling requirements

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;fdim(4, 1) = &quot; &lt;&lt; std::fdim(4, 1)
              &lt;&lt; &quot; fdim(1, 4) = &quot; &lt;&lt; std::fdim(1, 4) &lt;&lt; '\n'
              &lt;&lt; &quot;fdim(4,-1) = &quot; &lt;&lt; std::fdim(4, -1)
              &lt;&lt; &quot; fdim(1,-4) = &quot; &lt;&lt; std::fdim(1, -4) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;fdim(1e308, -1e308) = &quot; &lt;&lt; std::fdim(1e308, -1e308) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
|output=
fdim(4, 1) = 3 fdim(1, 4) = 0
fdim(4,-1) = 5 fdim(1,-4) = 5
fdim(1e308, -1e308) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc abs}}
{{dsc inc | cpp/numeric/math/dsc fmax}}
{{dsc see c | c/numeric/math/fdim}}
{{dsc end}}

[[de:cpp/numeric/math/fdim]]
[[es:cpp/numeric/math/fdim]]
[[fr:cpp/numeric/math/fdim]]
[[it:cpp/numeric/math/fdim]]
[[ja:cpp/numeric/math/fdim]]
[[pt:cpp/numeric/math/fdim]]
[[ru:cpp/numeric/math/fdim]]
[[zh:cpp/numeric/math/fdim]]</text>
      <sha1>hwhxyjgywu5e4bvutquu1t291pzwdt7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/floor</title>
    <ns>0</ns>
    <id>1358</id>
    <revision>
      <id>71874</id>
      <parentid>70503</parentid>
      <timestamp>2014-06-30T17:03:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail, more example</comment>
      <text xml:space="preserve" bytes="2573">{{cpp/title|floor}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       floor( float arg );
}}
{{dcl |num=2|
double      floor( double arg );
}}
{{dcl |num=3|
long double floor( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      floor( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the largest integer value not greater than {{tt|arg}}. 
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the largest integer value not greater than {{tt|arg}}, that is {{math|⌊arg⌋}}, is returned.

{{plot | left=Return value | bottom=Argument | math-floor.svg}}

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If arg is NaN, NaN is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised when rounding a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so this function never overflows on its own; however the result may overflow any integer type (including {{lc|std::intmax_t}}), when stored in an integer variable.

===Example===
{{example
 | code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; std::fixed
              &lt;&lt; &quot;floor(+2.7) = &quot; &lt;&lt; std::floor(+2.7) &lt;&lt; '\n'
              &lt;&lt; &quot;floor(-2.7) = &quot; &lt;&lt; std::floor(-2.7) &lt;&lt; '\n'
              &lt;&lt; &quot;floor(-0.0) = &quot; &lt;&lt; std::floor(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;floor(-Inf) = &quot; &lt;&lt; std::floor(-INFINITY) &lt;&lt; '\n';
}
 | output=
floor(+2.7) = 2.000000
floor(-2.7) = -3.000000
floor(-0.0) = -0.000000
floor(-Inf) = -inf
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc ceil}}
{{dsc inc | cpp/numeric/math/dsc trunc}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc see c | c/numeric/math/floor}}
{{dsc end}}

[[de:cpp/numeric/math/floor]]
[[es:cpp/numeric/math/floor]]
[[fr:cpp/numeric/math/floor]]
[[it:cpp/numeric/math/floor]]
[[ja:cpp/numeric/math/floor]]
[[pl:cpp/numeric/math/floor]]
[[pt:cpp/numeric/math/floor]]
[[ru:cpp/numeric/math/floor]]
[[zh:cpp/numeric/math/floor]]</text>
      <sha1>t3a2e53qjv5p2lk5av56htl7a9j6gsf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/fma</title>
    <ns>0</ns>
    <id>2653</id>
    <revision>
      <id>81358</id>
      <parentid>76868</parentid>
      <timestamp>2015-10-25T21:20:15Z</timestamp>
      <contributor>
        <ip>31.208.1.147</ip>
      </contributor>
      <comment>Fixed typo</comment>
      <text xml:space="preserve" bytes="5855">{{cpp/title|fma}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
float       fma( float x, float y, float z );
}}
{{dcl | since=c++11 | num=2 |
double      fma( double x, double y, double z );
}}
{{dcl | since=c++11 | num=3 |
long double fma( long double x, long double y, long double z );
}}
{{dcl | since=c++11 | num=4 |
Promoted    fma( Arithmetic1 x, Arithmetic2 y, Arithmetic3 z );
}}
{{dcl | since=c++11 | num=5 |
#define FP_FAST_FMA  /* implementation-defined */
}}
{{dcl | since=c++11 | num=6 |
#define FP_FAST_FMAF /* implementation-defined */
}}
{{dcl | since=c++11 | num=7 |
#define FP_FAST_FMAL /* implementation-defined */
}}
{{dcl end}}

@1-3@ Computes {{c|(x*y) + z}} as if to infinite precision and rounded only once to fit the result type.
@4@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by 1-3). If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.
@5-7@ If the macro constants {{tt|FP_FAST_FMAF}}, {{tt|FP_FAST_FMA}}, or {{tt|FP_FAST_FMAL}} are defined, the function {{tt|std::fma}} evaluates faster (in addition to being more precise) than the expression {{c|x*y+z}} for {{c|float}}, {{c|double}}, and {{c|long double}} arguments, respectively. If defined, these macros evaluate to integer {{c|1}}.

===Parameters===
{{par begin}}
{{par | x, y, z | values of floating-point or [[cpp/types/is_integral|integral types]]}}
{{par end}}

===Return value===
If successful, returns the value of {{c|(x*y) + z}} as if calculated to infinite precision and rounded once to fit the result type (or, alternatively, calculated as a single ternary floating-point operation)

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct value (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If x is zero and y is infinite or if x is infinite and y is zero, and z is not a NaN, then NaN is returned and {{lc|FE_INVALID}} is raised
* If x is zero and y is infinite or if x is infinite and y is zero, and z is a NaN, then NaN is returned and {{lc|FE_INVALID}} may be raised
* If x*y is an exact infinity and z is an infinity with the opposite sign, NaN is returned and {{lc|FE_INVALID}} is raised
* If x or y are NaN, NaN is returned
* If z is NaN, and x*y aren't 0*Inf or Inf*0, then NaN is returned (without FE_INVALID)

===Notes===
This operation is commonly implemented in hardware as [[enwiki:Multiply%E2%80%93accumulate_operation|fused multiply-add]] CPU instruction. If supported by hardware, the appropriate {{tt|FP_FAST_FMA*}} macros are expected to be defined, but many implementations make use of the CPU instruction even when the macros are not defined.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/fma.html POSIX additionally specifies] that the situations specified to return {{lc|FE_INVALID}} are domain errors.

Due to its infinite intermediate precision, {{tt|fma}} is a common building block of other correctly-rounded mathematical operations, such as {{lc|std::sqrt}} or even the division (where not provided by the CPU, e.g. Itanium)

As with all floating-point expressions, the expression {{c|(x*y) + z}} may be compiled as a fused multiply-add unless the [[cpp/preprocessor/impl|#pragma]] {{c|STDC FP_CONTRACT}} is off.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    // demo the difference between fma and built-in operators
    double in = 0.1;
    std::cout &lt;&lt; &quot;0.1 double is &quot; &lt;&lt; std::setprecision(23) &lt;&lt; in
              &lt;&lt; &quot; (&quot; &lt;&lt; std::hexfloat &lt;&lt; in &lt;&lt; std::defaultfloat &lt;&lt; &quot;)\n&quot;
              &lt;&lt; &quot;0.1*10 is 1.0000000000000000555112 (0x8.0000000000002p-3), &quot;
              &lt;&lt; &quot;or 1.0 if rounded to double\n&quot;;
    double expr_result = 0.1 * 10 - 1;
    double fma_result = fma(0.1, 10, -1);
    std::cout &lt;&lt; &quot;0.1 * 10 - 1 = &quot; &lt;&lt; expr_result
              &lt;&lt; &quot; : 1 subtracted after intermediate rounding\n&quot;
              &lt;&lt; &quot;fma(0.1, 10, -1) = &quot; &lt;&lt; std::setprecision(6) &lt;&lt; fma_result &lt;&lt; &quot; (&quot;
              &lt;&lt; std::hexfloat &lt;&lt; fma_result &lt;&lt; std::defaultfloat &lt;&lt; &quot;)\n\n&quot;;

    // fma is used in double-double arithmetic
    double high = 0.1 * 10;
    double low = fma(0.1, 10, -high);
    std::cout &lt;&lt; &quot;in double-double arithmetic, 0.1 * 10 is representable as &quot;
              &lt;&lt; high &lt;&lt; &quot; + &quot; &lt;&lt; low &lt;&lt; &quot;\n\n&quot;;

    // error handling 
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;fma(+Inf, 10, -Inf) = &quot; &lt;&lt; std::fma(INFINITY, 10, -INFINITY) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
0.1 double is 0.10000000000000000555112 (0x1.999999999999ap-4)
0.1*10 is 1.0000000000000000555112 (0x8.0000000000002p-3), or 1.0 if rounded to double
0.1 * 10 - 1 = 0 : 1 subtracted after intermediate rounding
fma(0.1, 10, -1) = 5.55112e-17 (0x1p-54)

in double-double arithmetic, 0.1 * 10 is representable as 1 + 5.55112e-17

fma(+Inf, 10, -Inf) = -nan
    FE_INVALID raised

}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc remainder}}
{{dsc inc | cpp/numeric/math/dsc remquo}}
{{dsc see c | c/numeric/math/fma}}
{{dsc end}}

[[de:cpp/numeric/math/fma]]
[[es:cpp/numeric/math/fma]]
[[fr:cpp/numeric/math/fma]]
[[it:cpp/numeric/math/fma]]
[[ja:cpp/numeric/math/fma]]
[[pt:cpp/numeric/math/fma]]
[[ru:cpp/numeric/math/fma]]
[[zh:cpp/numeric/math/fma]]</text>
      <sha1>akm5tq4n6c4lmkg862keuktubgfiadu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/fmax</title>
    <ns>0</ns>
    <id>2659</id>
    <revision>
      <id>71700</id>
      <parentid>71699</parentid>
      <timestamp>2014-06-20T20:34:47Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2654">{{cpp/title|fmax}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       fmax( float x, float y );
}}
{{dcl | since=c++11 |num=2|
double      fmax( double x, double y );
}}
{{dcl | since=c++11 |num=3|
long double fmax( long double x, long double y );
}}
{{dcl | since=c++11 |num=4|
Promoted    fmax( Arithmetic1 x, Arithmetic2 y );
}}
{{dcl end}}

@1-3@ Returns the larger of two floating point arguments, treating NaNs as missing data (between a NaN and a numeric value, the numeric value is chosen)
@4@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by 1-3). If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.

===Parameters===
{{par begin}}
{{par | x, y | values of floating-point or [[cpp/types/is_integral|integral types]]}}
{{par end}}

===Return value===
If successful, returns the larger of two floating point values. The value returned is exact and does not depend on any rounding modes.

===Error handling===
This function is not subject to any of the error conditions specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If one of the two arguments is NaN, the value of the other argument is returned
* Only if both arguments are NaN, NaN is returned

===Notes===
This function is not required to be sensitive to the sign of zero, although some implementations additionally enforce that if one argument is +0 and the other is -0, then +0 is returned.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; &quot;fmax(2,1)    = &quot; &lt;&lt; std::fmax(2,1) &lt;&lt; '\n'
              &lt;&lt; &quot;fmax(-Inf,0) = &quot; &lt;&lt; std::fmax(-INFINITY,0) &lt;&lt; '\n'
              &lt;&lt; &quot;fmax(NaN,-1) = &quot; &lt;&lt; std::fmax(NAN,-1) &lt;&lt; '\n';
}
|output=
fmax(2,1)    = 2
fmax(-Inf,0) = 0
fmax(NaN,-1) = -1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc isgreater}}
{{dsc inc | cpp/numeric/math/dsc fmin}}
{{dsc inc | cpp/algorithm/dsc max}}
{{dsc inc | cpp/algorithm/dsc max_element}}
{{dsc inc | cpp/algorithm/dsc minmax}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc see c | c/numeric/math/fmax}}
{{dsc end}}

[[de:cpp/numeric/math/fmax]]
[[es:cpp/numeric/math/fmax]]
[[fr:cpp/numeric/math/fmax]]
[[it:cpp/numeric/math/fmax]]
[[ja:cpp/numeric/math/fmax]]
[[pt:cpp/numeric/math/fmax]]
[[ru:cpp/numeric/math/fmax]]
[[zh:cpp/numeric/math/fmax]]</text>
      <sha1>eo19rg0x3k5oqh4djr1lx4h7nssjh16</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/fmin</title>
    <ns>0</ns>
    <id>2660</id>
    <revision>
      <id>71701</id>
      <parentid>71215</parentid>
      <timestamp>2014-06-20T20:36:59Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+link to min, min_element, minmax and minmax_element</comment>
      <text xml:space="preserve" bytes="2666">{{cpp/title|fmin}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
float       fmin( float x, float y );
}}
{{dcl | since=c++11 | num=2|
double      fmin( double x, double y );
}}
{{dcl | since=c++11 | num=3|
long double fmin( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
Promoted    fmin( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1-3@ Returns the smaller of two floating point arguments, treating NaNs as missing data (between a NaN and a numeric value, the numeric value is chosen)
@4@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by 1-3). If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.

===Parameters===
{{par begin}}
{{par | x, y | values of floating-point or [[cpp/types/is_integral|integral types]]}}
{{par end}}

===Return value===
If successful, returns the smaller of two floating point values. The value returned is exact and does not depend on any rounding modes.

===Error handling===
This function is not subject to any of the error conditions specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If one of the two arguments is NaN, the value of the other argument is returned
* Only if both arguments are NaN, NaN is returned

===Notes===
This function is not required to be sensitive to the sign of zero, although some implementations additionally enforce that if one argument is +0 and the other is -0, then -0 is returned.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; &quot;fmin(2,1)    = &quot; &lt;&lt; std::fmin(2,1) &lt;&lt; '\n'
              &lt;&lt; &quot;fmin(-Inf,0) = &quot; &lt;&lt; std::fmin(-INFINITY,0) &lt;&lt; '\n'
              &lt;&lt; &quot;fmin(NaN,-1) = &quot; &lt;&lt; std::fmin(NAN,-1) &lt;&lt; '\n';
}
|p=true
|output=
fmin(2,1)    = 1
fmin(-Inf,0) = -inf
fmin(NaN,-1) = -1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc isless}}
{{dsc inc | cpp/numeric/math/dsc fmax}}
{{dsc inc | cpp/algorithm/dsc min}}
{{dsc inc | cpp/algorithm/dsc min_element}}
{{dsc inc | cpp/algorithm/dsc minmax}}
{{dsc inc | cpp/algorithm/dsc minmax_element}}
{{dsc see c | c/numeric/math/fmin}}
{{dsc end}}

[[de:cpp/numeric/math/fmin]]
[[es:cpp/numeric/math/fmin]]
[[fr:cpp/numeric/math/fmin]]
[[it:cpp/numeric/math/fmin]]
[[ja:cpp/numeric/math/fmin]]
[[pt:cpp/numeric/math/fmin]]
[[ru:cpp/numeric/math/fmin]]
[[zh:cpp/numeric/math/fmin]]</text>
      <sha1>50vufzh171idz279vo18xwah1xhbkrt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/fmod</title>
    <ns>0</ns>
    <id>1359</id>
    <revision>
      <id>81676</id>
      <parentid>79656</parentid>
      <timestamp>2015-11-02T21:14:05Z</timestamp>
      <contributor>
        <ip>216.136.118.65</ip>
      </contributor>
      <comment>Result is less than y, not less than or equal.</comment>
      <text xml:space="preserve" bytes="4528">{{cpp/title|fmod}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       fmod( float x, float y );
}}
{{dcl |num=2|
double      fmod( double x, double y );
}}
{{dcl |num=3|
long double fmod( long double x, long double y );
}}
{{dcl | since=c++11 |num=4|
Promoted    fmod( Arithmetic1 x, Arithmetic2 y );
}}
{{dcl end}}

@1-3@ Computes the floating-point remainder of the division operation {{c|x/y}}.
@4@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by 1-3. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.

The floating-point remainder of the division operation {{c|x/y}} calculated by this function is exactly the value {{c|x - n*y}}, where {{tt|n}} is {{c|x/y}} with its fractional part truncated.

The returned value has the same sign as {{tt|x}} and is less than {{tt|y}} in magnitude.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par end}}

===Return value===
If successful, returns the floating-point remainder of the division {{c|x/y}} as defined above.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error may occur if {{tt|y}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|x}} is ±0 and {{tt|y}} is not zero, ±0 is returned
* If {{tt|x}} is ±∞ and {{tt|y}} is not NaN, NaN is returned and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±0 and {{tt|x}} is not NaN, NaN is returned  and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±∞ and {{tt|x}} is finite, {{tt|x}} is returned. 
* If either argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmod.html  POSIX requires] that a domain error occurs if {{tt|x}} is infinite or {{tt|y}} is zero.

{{tt|std::fmod}}, but not {{lc|std::remainder}} is useful for doing silent wrapping of floating-point types to unsigned integer types: {{c|1=(0.0 &lt;= (y = std::fmod( std::rint(x), 65536.0 )) ? y : 65536.0 + y)}} is in the range {{tt|[-0.0 .. 65535.0]}}, which corresponds to {{c|unsigned short}}, but {{c|std::remainder(std::rint(x), 65536.0}} is in the range {{tt|[-32767.0, +32768.0]}}, which is outside of the range of {{c|signed short}}.

The double version of fmod behaves as if implemented as follows
{{source|1=
double fmod(double x, double y)
{
#pragma STDC FENV_ACCESS ON
    double result = std::remainder(std::fabs(x), (y = std::fabs(y)));
    if (std::signbit(result)) result += y;
    return std::copysign(result, x);
}
}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;fmod(+5.1, +3.0) = &quot; &lt;&lt; std::fmod(5.1,3) &lt;&lt; '\n'
              &lt;&lt; &quot;fmod(-5.1, +3.0) = &quot; &lt;&lt; std::fmod(-5.1,3) &lt;&lt; '\n'
              &lt;&lt; &quot;fmod(+5.1, -3.0) = &quot; &lt;&lt; std::fmod(5.1,-3) &lt;&lt; '\n'
              &lt;&lt; &quot;fmod(-5.1, -3.0) = &quot; &lt;&lt; std::fmod(-5.1,-3) &lt;&lt; '\n';

    // special values
    std::cout &lt;&lt; &quot;fmod(+0.0, 1.0) = &quot; &lt;&lt; std::fmod(0, 1) &lt;&lt; '\n'
              &lt;&lt; &quot;fmod(-0.0, 1.0) = &quot; &lt;&lt; std::fmod(-0.0, 1) &lt;&lt; '\n'
              &lt;&lt; &quot;fmod(5.1, Inf) = &quot; &lt;&lt; std::fmod(5.1, INFINITY) &lt;&lt; '\n';

    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;fmod(+5.1, 0) = &quot; &lt;&lt; std::fmod(5.1, 0) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
fmod(+5.1, +3.0) = 2.1
fmod(-5.1, +3.0) = -2.1
fmod(+5.1, -3.0) = 2.1
fmod(-5.1, -3.0) = -2.1
fmod(+0.0, 1.0) = 0
fmod(-0.0, 1.0) = -0
fmod(5.1, Inf) = 5.1
fmod(+5.1, 0) = -nan
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc div}}
{{dsc inc | cpp/numeric/math/dsc remainder}}
{{dsc inc | cpp/numeric/math/dsc remquo}}
{{dsc see c | c/numeric/math/fmod}}
{{dsc end}}

[[de:cpp/numeric/math/fmod]]
[[es:cpp/numeric/math/fmod]]
[[fr:cpp/numeric/math/fmod]]
[[it:cpp/numeric/math/fmod]]
[[ja:cpp/numeric/math/fmod]]
[[ko:cpp/numeric/math/fmod]]
[[pl:cpp/numeric/math/fmod]]
[[pt:cpp/numeric/math/fmod]]
[[ru:cpp/numeric/math/fmod]]
[[zh:cpp/numeric/math/fmod]]</text>
      <sha1>7ay1hajuzhkc22qzlipp1ndbpc9neqe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/fpclassify</title>
    <ns>0</ns>
    <id>1360</id>
    <revision>
      <id>73049</id>
      <parentid>73025</parentid>
      <timestamp>2014-10-10T13:41:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+integral type overloads</comment>
      <text xml:space="preserve" bytes="2447">{{cpp/title|fpclassify}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
int fpclassify( float arg );
}}
{{dcl | since=c++11 | num=2 |
int fpclassify( double arg );
}}
{{dcl | since=c++11 | num=3 |
int fpclassify( long double arg );
}}
{{dcl | since=c++11 | num=4 |
int fpclassify( Integral arg );
}}
{{dcl end}}

@1-3@ Categorizes floating point value {{tt|arg}} into the following categories: zero, subnormal, normal, infinite, NAN, or implementation-defined category. 
@4@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===

one of {{lc|FP_INFINITE}}, {{lc|FP_NAN}}, {{lc|FP_NORMAL}}, {{lc|FP_SUBNORMAL}}, {{lc|FP_ZERO}} or implementation-defined type, specifying the category of {{tt|arg}}.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;

const char* show_classification(double x) {
    switch(std::fpclassify(x)) {
        case FP_INFINITE:  return &quot;Inf&quot;;
        case FP_NAN:       return &quot;NaN&quot;;
        case FP_NORMAL:    return &quot;normal&quot;;
        case FP_SUBNORMAL: return &quot;subnormal&quot;;
        case FP_ZERO:      return &quot;zero&quot;;
        default:           return &quot;unknown&quot;;
    }
}
int main()
{
    std::cout &lt;&lt; &quot;1.0/0.0 is &quot; &lt;&lt; show_classification(1/0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;0.0/0.0 is &quot; &lt;&lt; show_classification(0.0/0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;DBL_MIN/2 is &quot; &lt;&lt; show_classification(DBL_MIN/2) &lt;&lt; '\n'
              &lt;&lt; &quot;-0.0 is &quot; &lt;&lt; show_classification(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;1.0 is &quot; &lt;&lt; show_classification(1.0) &lt;&lt; '\n';
}
 | output=
1.0/0.0 is Inf
0.0/0.0 is NaN
DBL_MIN/2 is subnormal
-0.0 is zero
1.0 is normal
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc isfinite}}
{{dsc inc | cpp/numeric/math/dsc isinf}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc inc | cpp/numeric/math/dsc isnormal}}
{{dsc inc | cpp/types/dsc numeric_limits}}
{{dsc see c | c/numeric/math/fpclassify}}
{{dsc end}}

[[de:cpp/numeric/math/fpclassify]]
[[es:cpp/numeric/math/fpclassify]]
[[fr:cpp/numeric/math/fpclassify]]
[[it:cpp/numeric/math/fpclassify]]
[[ja:cpp/numeric/math/fpclassify]]
[[pt:cpp/numeric/math/fpclassify]]
[[ru:cpp/numeric/math/fpclassify]]
[[zh:cpp/numeric/math/fpclassify]]</text>
      <sha1>0rv4kplfymbdypqwj3sg7yu4kmzp7n1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/frexp</title>
    <ns>0</ns>
    <id>1361</id>
    <revision>
      <id>74651</id>
      <parentid>72655</parentid>
      <timestamp>2014-12-19T14:59:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix range</comment>
      <text xml:space="preserve" bytes="3770">{{cpp/title|frexp}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       frexp( float arg, int* exp );
}}
{{dcl |num=2|
double      frexp( double arg, int* exp );
}}
{{dcl |num=3|
long double frexp( long double arg, int* exp );
}}
{{dcl | since=c++11 |num=4|
double      frexp( Integral arg, int* exp );
}}
{{dcl end}}

@1-3@ Decomposes given floating point value {{tt|arg}} into a normalized fraction and an integral power of two. 
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par | exp | pointer to integer value to store the exponent to}}
{{par end}}

===Return value===
If {{tt|arg}} is zero, returns zero and stores zero in {{tt|*exp}}.

Otherwise (if {{tt|arg}} is not zero), if no errors occur, returns the value {{tt|x}} in the range {{tt|(-1;-0.5], [0.5; 1)}} and stores an integer value in {{c|*exp}} such that {{math|x&amp;times;2{{su|p=(*exp)}}{{=}}arg}}

If the value to be stored in {{tt|*exp}} is outside the range of {{c|int}}, the behavior is unspecified.

If {{tt|arg}} is not a floating-point number, the behavior is unspecified.

===Error handling===
This function is not subject to any errors specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|arg}} is ±0, it is returned, unmodified, and {{tt|0}} is stored in {{c|*exp}}.
* If {{tt|arg}} is ±∞, it is returned, and an unspecified value is stored in {{c|*exp}}.
* If {{tt|arg}} is NaN, NaN is returned, and an unspecified value is stored in {{c|*exp}}.
* No floating-point exceptions are raised.
* If {{lc|FLT_RADIX}} is 2 (or a power of 2), the returned value is exact, [[cpp/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
On a binary system (where {{lc|FLT_RADIX}} is {{tt|2}}), {{tt|frexp}} may be implemented as 
{{source|1={
    *exp = (value == 0) ? 0 : (int)(1 + std::logb(value));
    return std::scalbn(value, -(*exp));
}
}}

The function {{tt|std::frexp}}, together with its dual, {{lc|std::ldexp}}, can be used to manipulate the representation of a floating-point number without direct bit manipulations.

===Example===
{{example
 | Compares different floating-point decomposition functions
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;limits&gt;

int main()
{
    double f = 123.45;
    std::cout &lt;&lt; &quot;Given the number &quot; &lt;&lt; f &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat
              &lt;&lt; f &lt;&lt; std::defaultfloat &lt;&lt; &quot; in hex,\n&quot;;

    double f3;
    double f2 = std::modf(f, &amp;f3);
    std::cout &lt;&lt; &quot;modf() makes &quot; &lt;&lt; f3 &lt;&lt; &quot; + &quot; &lt;&lt; f2 &lt;&lt; '\n';

    int i;
    f2 = std::frexp(f, &amp;i);
    std::cout &lt;&lt; &quot;frexp() makes &quot; &lt;&lt; f2 &lt;&lt; &quot; * 2^&quot; &lt;&lt; i &lt;&lt; '\n';

    i = std::ilogb(f);
    std::cout &lt;&lt; &quot;logb()/ilogb() make &quot; &lt;&lt; f/std::scalbn(1.0, i) &lt;&lt; &quot; * &quot;
              &lt;&lt; std::numeric_limits&lt;double&gt;::radix
              &lt;&lt; &quot;^&quot; &lt;&lt; std::ilogb(f) &lt;&lt; '\n';
}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
}}


===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc ldexp}}
{{dsc inc | cpp/numeric/math/dsc logb}}
{{dsc inc | cpp/numeric/math/dsc ilogb}}
{{dsc inc | cpp/numeric/math/dsc modf}}
{{dsc see c | c/numeric/math/frexp}}
{{dsc end}}

[[de:cpp/numeric/math/frexp]]
[[es:cpp/numeric/math/frexp]]
[[fr:cpp/numeric/math/frexp]]
[[it:cpp/numeric/math/frexp]]
[[ja:cpp/numeric/math/frexp]]
[[pt:cpp/numeric/math/frexp]]
[[ru:cpp/numeric/math/frexp]]
[[tr:cpp/numeric/math/frexp]]
[[zh:cpp/numeric/math/frexp]]</text>
      <sha1>cczzi564rip01use7t3dttdbjxqj1x2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/hypot</title>
    <ns>0</ns>
    <id>2949</id>
    <revision>
      <id>83730</id>
      <parentid>83727</parentid>
      <timestamp>2016-03-07T15:51:50Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Return value */ cr numbering</comment>
      <text xml:space="preserve" bytes="5578">{{cpp/title|hypot}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       hypot( float x, float y );
}}
{{dcl | since=c++11 |num=2|
double      hypot( double x, double y );
}}
{{dcl | since=c++11 |num=3|
long double hypot( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
Promoted    hypot( Arithmetic1 x, Arithmetic2 y );
}}
{{dcl | since=c++17 |num=5|
float       hypot( float x, float y, float z );
}}
{{dcl | since=c++17 |num=6|
double      hypot( double x, double y, double z );
}}
{{dcl | since=c++17 |num=7|
long double hypot( long double x, long double y, long double z );
}}
{{dcl | since=c++17 | num=8|
Promoted    hypot( Arithmetic1 x, Arithmetic2 y, Arithmetic3 z );
}}
{{dcl end}}

@1-3@ Computes the square root of the sum of the squares of {{tt|x}} and {{tt|y}}, without undue overflow or underflow at intermediate stages of the computation.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.
@5-7@ Computes the square root of the sum of the squares of {{tt|x}}, {{tt|y}}, and {{tt|z}}, without undue overflow or underflow at intermediate stages of the computation.
@8@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|5-7}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.

The value computed by the two-argument version of this function is the length of the hypotenuse of a right-angled triangle with sides of length {{tt|x}} and {{tt|y}}, or the distance of the point {{tt|(x,y)}} from the origin {{tt|(0,0)}}, or the magnitude of a complex number {{tt|x+''i''y}}

The value computed by the three-argument version of this function is the distance of the point {{tt|(x,y,z)}} from the origin {{tt|(0,0,0)}}.

===Parameters===
{{par begin}}
{{par | x, y, z | values of floating-point or [[cpp/types/is_integral|integral types]]}}
{{par end}}

===Return value===
@1-4@ If no errors occur, the hypotenuse of a right-angled triangle, {{math|{{mrad|x{{su|p=2}}+y{{su|p=2}}}}}}, is returned.
@5-8@ If no errors occur, the distance from origin in 3D space, {{math|{{mrad|x{{su|p=2}}+y{{su|p=2}}+z{{su|p=2}}}}}}, is returned.

If a range error due to overflow occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in {{lc|math_errhandling}}

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* {{c|hypot(x, y)}}, {{c|hypot(y, x)}}, and {{c|hypot(x, -y)}} are equivalent
* if one of the arguments is ±0, {{tt|hypot(x,y)}} is equivalent to {{c|fabs}} called with the non-zero argument
* if one of the arguments is ±∞, {{tt|hypot(x,y)}} returns +∞ even if the other argument is NaN
* otherwise, if any of the arguments is NaN, NaN is returned

===Notes===
Implementations usually guarantee precision of less than 1 ulp (units in the last place): [http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=sysdeps/ieee754/dbl-64/e_hypot.c GNU], [http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/msun/src/e_hypot.c?rev=1.13.4.2;content-type=text%2Fplain BSD], [http://www.open64.net/doc/d5/d3f/hypot_8c-source.html Open64]

{{c|std::hypot(x, y)}} is equivalent to {{c|std::abs(std::complex&lt;double&gt;(x,y))}}

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/hypot.html POSIX specifies] that underflow may only occur when both arguments are subnormal and the correct result is also subnormal (this forbids naive implementations)

Distance between two points {{tt|(x1,y1,z1)}} and {{tt|(x2,y2,z2)}}on 3D space can be calculated as {{c|std::hypot(x2-x1, y2-y1, z2-z1)}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;
#include &lt;cfloat&gt;
#include &lt;cstring&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    // typical usage
    std::cout &lt;&lt; &quot;(1,1) cartesian is (&quot; &lt;&lt; std::hypot(1,1)
              &lt;&lt; ',' &lt;&lt; std::atan2(1,1) &lt;&lt; &quot;) polar\n&quot;;
    // special values
    std::cout &lt;&lt; &quot;hypot(NAN,INFINITY) = &quot; &lt;&lt; std::hypot(NAN,INFINITY) &lt;&lt; '\n';
    // error handling 
    errno = 0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;hypot(DBL_MAX,DBL_MAX) = &quot; &lt;&lt; std::hypot(DBL_MAX,DBL_MAX) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno = ERANGE &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
 | output=
(1,1) cartesian is (1.41421,0.785398) polar
hypot(NAN,INFINITY) = inf
hypot(DBL_MAX,DBL_MAX) = inf
    errno = ERANGE Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc pow}}
{{dsc inc | cpp/numeric/math/dsc sqrt}}
{{dsc inc | cpp/numeric/math/dsc cbrt}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc see c | c/numeric/math/hypot}}
{{dsc end}}

[[de:cpp/numeric/math/hypot]]
[[es:cpp/numeric/math/hypot]]
[[fr:cpp/numeric/math/hypot]]
[[it:cpp/numeric/math/hypot]]
[[ja:cpp/numeric/math/hypot]]
[[pt:cpp/numeric/math/hypot]]
[[ru:cpp/numeric/math/hypot]]
[[zh:cpp/numeric/math/hypot]]</text>
      <sha1>pr1looir5zfh2eiwd5quxedyqkjfvoy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/ilogb</title>
    <ns>0</ns>
    <id>3663</id>
    <revision>
      <id>74685</id>
      <parentid>72290</parentid>
      <timestamp>2014-12-22T16:11:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>C dr410</comment>
      <text xml:space="preserve" bytes="5549">{{cpp/title|ilogb}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
int         ilogb( float arg );
}}
{{dcl | since=c++11 | num=2 |
int         ilogb( double arg );
}}
{{dcl | since=c++11 | num=3 |
int         ilogb( long double arg );
}}
{{dcl | since=c++11 | num=4 |
int         ilogb( Integral arg );
}}
{{dcl | since=c++11 | num=5 |
#define FP_ILOGB0 /*implementation-defined*/
}}
{{dcl | since=c++11 | num=6 |
#define FP_ILOGBNAN /*implementation-defined*/
}}
{{dcl end}}

@1-3@ Extracts the value of the unbiased exponent from the floating-point argument {{tt|arg}}, and returns it as a signed integer value. 
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}).
@5@ Expands to integer constant expression whose value is either {{lc|INT_MIN}} or {{c|-INT_MAX}}.
@6@ Expands to integer constant expression whose value is either {{lc|INT_MIN}} or {{c|+INT_MAX}}.

Formally, the unbiased exponent is the integral part of {{math|log{{su|b=r}}{{!}}arg{{!}}}} as a signed integral value, for non-zero {{tt|arg}}, where {{tt|r}} is {{c|std::numeric_limits&lt;T&gt;::radix}} and {{tt|T}} is the floating-point type of {{tt|arg}}.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the unbiased exponent of {{tt|arg}} is returned as a signed int value.

If {{tt|arg}} is zero, {{lc|FP_ILOGB0}} is returned.

If {{tt|arg}} is infinite, {{lc|INT_MAX}} is returned.

If {{tt|arg}} is a NaN, {{lc|FP_ILOGBNAN}} is returned.

If the correct result is greater than {{lc|INT_MAX}} or smaller than {{lc|INT_MIN}}, the return value is unspecified.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

A domain error or range error may occur if {{tt|arg}} is zero, infinite, or NaN.

If the correct result is greater than {{lc|INT_MAX}} or smaller than {{lc|INT_MIN}}, a domain error or a range error may occur &lt;!-- this is DR 410 against C11, which makes the wording match lrint and lround --&gt;

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the correct result is greater than {{lc|INT_MAX}} or smaller than {{lc|INT_MIN}}, {{lc|FE_INVALID}} is raised.
* If {{tt|arg}} is ±0, ±∞, or NaN, {{lc|FE_INVALID}} is raised.
* In all other cases, the result is exact ({{lc|FE_INEXACT}} is never raised) and [[cpp/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
If {{tt|arg}} is not zero, infinite, or NaN, the value returned is exactly equivalent to {{c|static_cast&lt;int&gt;(std::logb(arg))}}

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/ilogb.html POSIX requires] that a domain error occurs if {{tt|arg}} is zero, infinite, NaN, or if the correct result is outside of the range of {{c|int}}.

POSIX also requires that, on XSI-conformant systems, the value returned when the correct result is greater than {{lc|INT_MAX}} is {{lc|INT_MAX}} and the value returned when the correct result is less than {{lc|INT_MIN}} is {{lc|INT_MIN}}.

The correct result can be represented as {{c|int}} on all known implementations. For overflow to occur, {{lc|INT_MAX}} must be less than {{c|LDBL_MAX_EXP*log2(FLT_RADIX)}} or {{lc|INT_MIN}} must be greater than {{c|LDBL_MIN_EXP-LDBL_MANT_DIG)*log2(FLT_RADIX)}}.

The value of the exponent returned by {{tt|std::ilogb}} is always 1 less than the exponent retuned by {{lc|std::frexp}} because of the different normalization requirements: for the exponent {{tt|e}} returned by {{tt|std::ilogb}}, {{math|{{!}}arg*r{{su|p=-e}}{{!}}}} is between 1 and {{tt|r}} (typically between {{c|1}} and {{c|2}}), but for the exponent {{tt|e}} returned by {{lc|std::frexp}}, {{math|{{!}}arg*2{{su|p=-e}}{{!}}}} is between {{c|0.5}} and {{c|1}}.

===Example===
{{example
 | Compares different floating-point decomposition functions
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;limits&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    double f = 123.45;
    std::cout &lt;&lt; &quot;Given the number &quot; &lt;&lt; f &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat
              &lt;&lt; f &lt;&lt; std::defaultfloat &lt;&lt; &quot; in hex,\n&quot;;

    double f3;
    double f2 = std::modf(f, &amp;f3);
    std::cout &lt;&lt; &quot;modf() makes &quot; &lt;&lt; f3 &lt;&lt; &quot; + &quot; &lt;&lt; f2 &lt;&lt; '\n';

    int i;
    f2 = std::frexp(f, &amp;i);
    std::cout &lt;&lt; &quot;frexp() makes &quot; &lt;&lt; f2 &lt;&lt; &quot; * 2^&quot; &lt;&lt; i &lt;&lt; '\n';

    i = std::ilogb(f);
    std::cout &lt;&lt; &quot;logb()/ilogb() make &quot; &lt;&lt; f/std::scalbn(1.0, i) &lt;&lt; &quot; * &quot;
              &lt;&lt; std::numeric_limits&lt;double&gt;::radix
              &lt;&lt; &quot;^&quot; &lt;&lt; std::ilogb(f) &lt;&lt; '\n';

    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;ilogb(0) = &quot; &lt;&lt; std::ilogb(0) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
ilogb(0) = -2147483648
    FE_INVALID raised
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc frexp}}
{{dsc inc | cpp/numeric/math/dsc logb}}
{{dsc inc | cpp/numeric/math/dsc scalbn}}
{{dsc see c | c/numeric/math/ilogb}}
{{dsc end}}

[[de:cpp/numeric/math/ilogb]]
[[es:cpp/numeric/math/ilogb]]
[[fr:cpp/numeric/math/ilogb]]
[[it:cpp/numeric/math/ilogb]]
[[ja:cpp/numeric/math/ilogb]]
[[pt:cpp/numeric/math/ilogb]]
[[ru:cpp/numeric/math/ilogb]]
[[zh:cpp/numeric/math/ilogb]]</text>
      <sha1>l9qlzxyn3dw9txtvtzs5tegovqu9n7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isfinite</title>
    <ns>0</ns>
    <id>1362</id>
    <revision>
      <id>73056</id>
      <parentid>73052</parentid>
      <timestamp>2014-10-10T13:58:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix return type on int overload</comment>
      <text xml:space="preserve" bytes="2041">{{cpp/title|isfinite}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool isfinite( float arg );
}}
{{dcl | since=c++11 | num=2 |
bool isfinite( double arg );
}}
{{dcl | since=c++11 | num=3 |
bool isfinite( long double arg );
}}
{{dcl | since=c++11 | num=4 |
bool isfinite( Integral arg );
}}
{{dcl end}}

@1-3@ Determines if the given floating point number {{tt|arg}} has finite value i.e. it is normal, subnormal or zero, but not infinite or NaN.
@4@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}). 

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===

{{c|true}} value if {{tt|arg}} has finite value, {{c|false}} if {{tt|arg}} is infinite or NaN

===Examples===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;isfinite(NaN) = &quot; &lt;&lt; std::isfinite(NAN) &lt;&lt; '\n'
              &lt;&lt; &quot;isfinite(Inf) = &quot; &lt;&lt; std::isfinite(INFINITY) &lt;&lt; '\n'
              &lt;&lt; &quot;isfinite(0.0) = &quot; &lt;&lt; std::isfinite(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;isfinite(exp(800)) = &quot; &lt;&lt; std::isfinite(std::exp(800)) &lt;&lt; '\n'
              &lt;&lt; &quot;isfinite(DBL_MIN/2.0) = &quot; &lt;&lt; std::isfinite(DBL_MIN/2.0) &lt;&lt; '\n';
}
|output=
isfinite(NaN) = false
isfinite(Inf) = false
isfinite(0.0) = true
isfinite(exp(800)) = false
isfinite(DBL_MIN/2.0) = true
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc inc | cpp/numeric/math/dsc isinf}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc inc | cpp/numeric/math/dsc isnormal}}
{{dsc see c | c/numeric/math/isfinite}}
{{dsc end}}

[[de:cpp/numeric/math/isfinite]]
[[es:cpp/numeric/math/isfinite]]
[[fr:cpp/numeric/math/isfinite]]
[[it:cpp/numeric/math/isfinite]]
[[ja:cpp/numeric/math/isfinite]]
[[pt:cpp/numeric/math/isfinite]]
[[ru:cpp/numeric/math/isfinite]]
[[zh:cpp/numeric/math/isfinite]]</text>
      <sha1>7lq52xz0613vrfp5okcraux5oaiomgc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isgreater</title>
    <ns>0</ns>
    <id>9214</id>
    <revision>
      <id>73096</id>
      <parentid>73094</parentid>
      <timestamp>2014-10-13T17:42:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1588">{{cpp/title|isgreater}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool isgreater( float x, float y );
}}
{{dcl | since=c++11 | num=2 |
bool isgreater( double x, double y );
}}
{{dcl | since=c++11 | num=3 |
bool isgreater( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
bool isgreater( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1-3@ Determines if the floating point number {{tt|x}} is greater than the floating-point number ({{tt|y}}), without setting floating-point exceptions.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{c|x &gt; y}}, {{c|false}} otherwise

===Notes===
The built-in {{c|operator&gt;}} for floating-point numbers may set {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|operator&gt;}}.

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc greater}}
{{dsc inc | cpp/numeric/math/dsc isless}}
{{dsc see c | c/numeric/math/isgreater}}
{{dsc end}}

[[de:cpp/numeric/math/isgreater]]
[[es:cpp/numeric/math/isgreater]]
[[fr:cpp/numeric/math/isgreater]]
[[it:cpp/numeric/math/isgreater]]
[[ja:cpp/numeric/math/isgreater]]
[[pt:cpp/numeric/math/isgreater]]
[[ru:cpp/numeric/math/isgreater]]
[[zh:cpp/numeric/math/isgreater]]</text>
      <sha1>cbnd2x520n5n75cv034ussfjdotu6uh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isgreaterequal</title>
    <ns>0</ns>
    <id>9215</id>
    <revision>
      <id>73097</id>
      <parentid>73095</parentid>
      <timestamp>2014-10-13T17:42:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1687">{{cpp/title|isgreaterequal}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
bool isgreaterequal( float x, float y );
}}
{{dcl | since=c++11 | num=2|
bool isgreaterequal( double x, double y );
}}
{{dcl | since=c++11 | num=3|
bool isgreaterequal( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
bool isgreaterequal( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1-3@ Determines if the floating point number {{tt|x}} is greater than or equal to the floating-point number {{tt|y}}, without setting floating-point exceptions.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{c|1=x &gt;= y}}, {{c|false}} otherwise

===Notes===
The built-in {{c|1=operator&gt;=}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|1=operator&gt;=}}.

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc greater_equal}}
{{dsc inc | cpp/numeric/math/dsc islessequal}}
{{dsc see c | c/numeric/math/isgreaterequal}}
{{dsc end}}

[[de:cpp/numeric/math/isgreaterequal]]
[[es:cpp/numeric/math/isgreaterequal]]
[[fr:cpp/numeric/math/isgreaterequal]]
[[it:cpp/numeric/math/isgreaterequal]]
[[ja:cpp/numeric/math/isgreaterequal]]
[[pt:cpp/numeric/math/isgreaterequal]]
[[ru:cpp/numeric/math/isgreaterequal]]
[[zh:cpp/numeric/math/isgreaterequal]]</text>
      <sha1>50jo36crrxe4slz61de33nipz0xl25p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isinf</title>
    <ns>0</ns>
    <id>1363</id>
    <revision>
      <id>73057</id>
      <parentid>73055</parentid>
      <timestamp>2014-10-10T14:20:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+desc for @4@</comment>
      <text xml:space="preserve" bytes="1879">{{cpp/title|isinf}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool isinf( float arg );
}}
{{dcl | since=c++11 | num=2 |
bool isinf( double arg );
}}
{{dcl | since=c++11 | num=3 |
bool isinf( long double arg );
}}
{{dcl | since=c++11 | num=4 |
bool isinf( Integral arg );
}}
{{dcl end}}

@1-3@ Determines if the given floating point number {{tt|arg}} is a positive or negative infinity. 
@4@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}). 

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{tt|arg}} is infinite, {{c|false}} otherwise

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;isinf(NaN) = &quot; &lt;&lt; std::isinf(NAN) &lt;&lt; '\n'
              &lt;&lt; &quot;isinf(Inf) = &quot; &lt;&lt; std::isinf(INFINITY) &lt;&lt; '\n'
              &lt;&lt; &quot;isinf(0.0) = &quot; &lt;&lt; std::isinf(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;isinf(exp(800)) = &quot; &lt;&lt; std::isinf(std::exp(800)) &lt;&lt; '\n'
              &lt;&lt; &quot;isinf(DBL_MIN/2.0) = &quot; &lt;&lt; std::isinf(DBL_MIN/2.0) &lt;&lt; '\n';
}
|output=
isinf(NaN) = false
isinf(Inf) = true
isinf(0.0) = false
isinf(exp(800)) = true
isinf(DBL_MIN/2.0) = false
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc inc | cpp/numeric/math/dsc isfinite}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc inc | cpp/numeric/math/dsc isnormal}}
{{dsc see c | c/numeric/math/isinf}}
{{dsc end}}

[[de:cpp/numeric/math/isinf]]
[[es:cpp/numeric/math/isinf]]
[[fr:cpp/numeric/math/isinf]]
[[it:cpp/numeric/math/isinf]]
[[ja:cpp/numeric/math/isinf]]
[[pt:cpp/numeric/math/isinf]]
[[ru:cpp/numeric/math/isinf]]
[[zh:cpp/numeric/math/isinf]]</text>
      <sha1>qsiu3jqpt3led0riyuy7rrjv8rj02v5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isless</title>
    <ns>0</ns>
    <id>9216</id>
    <revision>
      <id>73098</id>
      <parentid>70474</parentid>
      <timestamp>2014-10-13T17:43:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+integer overloads</comment>
      <text xml:space="preserve" bytes="1543">{{cpp/title|isless}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool isless( float x, float y );
}}
{{dcl | since=c++11 | num=2 |
bool isless( double x, double y );
}}
{{dcl | since=c++11 | num=3 |
bool isless( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
bool isless( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1-3@ Determines if the floating point number {{tt|x}} is less than the floating-point number {{tt|y}}, without setting floating-point exceptions.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{c|x &lt; y}}, {{c|false}} otherwise

===Notes===
The built-in {{c|operator&lt;}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|operator&lt;}}.

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc less}}
{{dsc inc | cpp/numeric/math/dsc isgreater}}
{{dsc see c | c/numeric/math/isless}}
{{dsc end}}

[[de:cpp/numeric/math/isless]]
[[es:cpp/numeric/math/isless]]
[[fr:cpp/numeric/math/isless]]
[[it:cpp/numeric/math/isless]]
[[ja:cpp/numeric/math/isless]]
[[pt:cpp/numeric/math/isless]]
[[ru:cpp/numeric/math/isless]]
[[zh:cpp/numeric/math/isless]]</text>
      <sha1>o8zvqubqc5r05egnf8yvjkuv2zsdgyx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/islessequal</title>
    <ns>0</ns>
    <id>9217</id>
    <revision>
      <id>73099</id>
      <parentid>70475</parentid>
      <timestamp>2014-10-13T17:45:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+integer overloads</comment>
      <text xml:space="preserve" bytes="1645">{{cpp/title|islessequal}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool islessequal( float x, float y );
}}
{{dcl | since=c++11 | num=2 |
bool islessequal( double x, double y );
}}
{{dcl | since=c++11 | num=3 |
bool islessequal( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
bool islessequal( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1-3@ Determines if the floating point number {{tt|x}} is less than or equal to the floating-point number {{tt|y}}, without setting floating-point exceptions.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{c|1=x &lt;= y}}, {{c|false}} otherwise

===Notes===
The built-in {{c|1=operator&lt;=}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of {{c|1=operator&lt;=}}.

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc less_equal}}
{{dsc inc | cpp/numeric/math/dsc isgreaterequal}}
{{dsc see c | c/numeric/math/islessequal}}
{{dsc end}}

[[de:cpp/numeric/math/islessequal]]
[[es:cpp/numeric/math/islessequal]]
[[fr:cpp/numeric/math/islessequal]]
[[it:cpp/numeric/math/islessequal]]
[[ja:cpp/numeric/math/islessequal]]
[[pt:cpp/numeric/math/islessequal]]
[[ru:cpp/numeric/math/islessequal]]
[[zh:cpp/numeric/math/islessequal]]</text>
      <sha1>r7k3g4brb7qnixmjnf9zc5r8nd7xkhy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/islessgreater</title>
    <ns>0</ns>
    <id>9218</id>
    <revision>
      <id>73100</id>
      <parentid>70476</parentid>
      <timestamp>2014-10-13T17:46:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+integer overloads</comment>
      <text xml:space="preserve" bytes="1704">{{cpp/title|islessgreater}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
bool islessgreater( float x, float y );
}}
{{dcl | since=c++11 |num=2|
bool islessgreater( double x, double y );
}}
{{dcl | since=c++11 |num=3|
bool islessgreater( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
bool islessgreater( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1-3@ Determines if the floating point number {{tt|x}} is less than or greater than the floating-point number {{tt|y}}, without setting floating-point exceptions.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{c|x &lt; y {{!!}} x &gt; y}}, {{c|false}} otherwise

===Notes===
The built-in {{c|operator&lt;}} and {{c|operator&gt;}} for floating-point numbers may raise {{lc|FE_INVALID}} if one or both of the arguments is NaN. This function is a &quot;quiet&quot; version of the expression {{c|x &lt; y {{!!}} x &gt; y}}.

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc isless}}
{{dsc inc | cpp/numeric/math/dsc isgreater}}
{{dsc see c | c/numeric/math/islessgreater}}
{{dsc end}}

[[de:cpp/numeric/math/islessgreater]]
[[es:cpp/numeric/math/islessgreater]]
[[fr:cpp/numeric/math/islessgreater]]
[[it:cpp/numeric/math/islessgreater]]
[[ja:cpp/numeric/math/islessgreater]]
[[pt:cpp/numeric/math/islessgreater]]
[[ru:cpp/numeric/math/islessgreater]]
[[zh:cpp/numeric/math/islessgreater]]</text>
      <sha1>5kfmya8t1ul07drys0uvrwtguul4igf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isnan</title>
    <ns>0</ns>
    <id>1364</id>
    <revision>
      <id>92083</id>
      <parentid>73063</parentid>
      <timestamp>2017-04-04T16:05:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>redo the blurb about not preserving payload, with a link to std::nan for defining payload)</comment>
      <text xml:space="preserve" bytes="2579">{{cpp/title|isnan}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool isnan( float arg );
}}
{{dcl | since=c++11 | num=2 |
bool isnan( double arg );
}}
{{dcl | since=c++11 | num=3 |
bool isnan( long double arg );
}}
{{dcl | since=c++11 | num=4 |
bool isnan( Integral arg );
}}
{{dcl end}}

@1-3@ Determines if the given floating point number {{tt|arg}} is a not-a-number (NaN) value.
@4@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}). 

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{tt|arg}} is a NaN, {{c|false}} otherwise

===Notes===
There are many different NaN values with different sign bits and payloads, see {{lc|std::nan}} and {{lc|std::numeric_limits::quiet_NaN}}.

NaN values never compare equal to themselves or to other NaN values. Copying a NaN is not required, by IEEE-754, to preserve its bit representation (sign and [[cpp/numeric/math/nan|payload]]), though most implementation do.

Another way to test if a floating-point value is NaN is to compare it with itself: {{c|bool is_nan(double x) { return x !{{=}} x; } }}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;isnan(NaN) = &quot; &lt;&lt; std::isnan(NAN) &lt;&lt; '\n'
              &lt;&lt; &quot;isnan(Inf) = &quot; &lt;&lt; std::isnan(INFINITY) &lt;&lt; '\n'
              &lt;&lt; &quot;isnan(0.0) = &quot; &lt;&lt; std::isnan(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;isnan(DBL_MIN/2.0) = &quot; &lt;&lt; std::isnan(DBL_MIN/2.0) &lt;&lt; '\n'
              &lt;&lt; &quot;isnan(0.0 / 0.0)   = &quot; &lt;&lt; std::isnan(0.0/0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;isnan(Inf - Inf)   = &quot; &lt;&lt; std::isnan(INFINITY - INFINITY) &lt;&lt; '\n';
}
|output=
isnan(NaN) = true
isnan(Inf) = false
isnan(0.0) = false
isnan(DBL_MIN/2.0) = false
isnan(0.0 / 0.0)   = true
isnan(Inf - Inf)   = true
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fnan}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc inc | cpp/numeric/math/dsc isfinite}}
{{dsc inc | cpp/numeric/math/dsc isinf}}
{{dsc inc | cpp/numeric/math/dsc isnormal}}
{{dsc inc | cpp/numeric/math/dsc isunordered}}
{{dsc see c | c/numeric/math/isnan}}
{{dsc end}}

[[de:cpp/numeric/math/isnan]]
[[es:cpp/numeric/math/isnan]]
[[fr:cpp/numeric/math/isnan]]
[[it:cpp/numeric/math/isnan]]
[[ja:cpp/numeric/math/isnan]]
[[pt:cpp/numeric/math/isnan]]
[[ru:cpp/numeric/math/isnan]]
[[zh:cpp/numeric/math/isnan]]</text>
      <sha1>7d4gvx3t41b3gq7mrxmm41b92zvy548</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isnormal</title>
    <ns>0</ns>
    <id>1365</id>
    <revision>
      <id>73068</id>
      <parentid>70470</parentid>
      <timestamp>2014-10-10T22:10:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>example, int overload</comment>
      <text xml:space="preserve" bytes="1968">{{cpp/title|isnormal}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool isnormal( float arg );
}}
{{dcl | since=c++11 | num=2 |
bool isnormal( double arg );
}}
{{dcl | since=c++11 | num=3 |
bool isnormal( long double arg );
}}
{{dcl | since=c++11 | num=4 |
bool isnormal( Integral arg );
}}
{{dcl end}}

@1-3@ Determines if the given floating point number {{tt|arg}} is normal, i.e. is neither zero, subnormal, infinite, nor NaN.
@4@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}). 

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{tt|arg}} is normal, {{c|false}} otherwise

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfloat&gt;

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;isnormal(NaN) = &quot; &lt;&lt; std::isnormal(NAN) &lt;&lt; '\n'
              &lt;&lt; &quot;isnormal(Inf) = &quot; &lt;&lt; std::isnormal(INFINITY) &lt;&lt; '\n'
              &lt;&lt; &quot;isnormal(0.0) = &quot; &lt;&lt; std::isnormal(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;isnormal(DBL_MIN/2.0) = &quot; &lt;&lt; std::isnormal(DBL_MIN/2.0) &lt;&lt; '\n'
              &lt;&lt; &quot;isnormal(1.0) = &quot; &lt;&lt; std::isnormal(1.0) &lt;&lt; '\n';
}
|output=
isnormal(NaN) = false
isnormal(Inf) = false
isnormal(0.0) = false
isnormal(DBL_MIN/2.0) = false
isnormal(1.0) = true
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc inc | cpp/numeric/math/dsc isfinite}}
{{dsc inc | cpp/numeric/math/dsc isinf}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc see c | c/numeric/math/isnormal}}
{{dsc end}}

[[de:cpp/numeric/math/isnormal]]
[[es:cpp/numeric/math/isnormal]]
[[fr:cpp/numeric/math/isnormal]]
[[it:cpp/numeric/math/isnormal]]
[[ja:cpp/numeric/math/isnormal]]
[[pt:cpp/numeric/math/isnormal]]
[[ru:cpp/numeric/math/isnormal]]
[[zh:cpp/numeric/math/isnormal]]</text>
      <sha1>qilg8pxif7b4cpdq6zs977y5k9s3sfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/isunordered</title>
    <ns>0</ns>
    <id>9219</id>
    <revision>
      <id>73101</id>
      <parentid>70477</parentid>
      <timestamp>2014-10-13T17:48:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+integer overloads</comment>
      <text xml:space="preserve" bytes="1461">{{cpp/title|isunordered}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
bool isunordered( float x, float y );
}}
{{dcl | since=c++11 | num=2|
bool isunordered( double x, double y );
}}
{{dcl | since=c++11 | num=3|
bool isunordered( long double x, long double y );
}}
{{dcl | since=c++11 | num=4|
bool isunordered( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1-3@ Determines if the floating point numbers {{tt|x}} and {{tt|y}} are unordered, that is, one or both are NaN and thus cannot be meaningfully compared with each other.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | y | floating point value}}
{{par end}}

===Return value===

{{c|true}} if either {{tt|x}} or {{tt|y}} is NaN, {{c|false}} otherwise

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fpclassify}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc see c | c/numeric/math/isunordered}}
{{dsc end}}

[[de:cpp/numeric/math/isunordered]]
[[es:cpp/numeric/math/isunordered]]
[[fr:cpp/numeric/math/isunordered]]
[[it:cpp/numeric/math/isunordered]]
[[ja:cpp/numeric/math/isunordered]]
[[pt:cpp/numeric/math/isunordered]]
[[ru:cpp/numeric/math/isunordered]]
[[zh:cpp/numeric/math/isunordered]]</text>
      <sha1>h21j2ct1h3l1dh5g2icmv6h8y65e861</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/labs</title>
    <ns>0</ns>
    <id>4037</id>
    <redirect title="cpp/numeric/math/abs" />
    <revision>
      <id>14893</id>
      <timestamp>2011-12-01T14:39:21Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/abs]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/ldexp</title>
    <ns>0</ns>
    <id>1366</id>
    <revision>
      <id>72168</id>
      <parentid>72072</parentid>
      <timestamp>2014-07-19T22:14:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="3824">{{cpp/title|ldexp}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       ldexp( float x, int exp );
}}
{{dcl |num=2|
double      ldexp( double x, int exp );
}}
{{dcl |num=3|
long double ldexp( long double x, int exp );
}}
{{dcl | since=c++11 |num=4|
double      ldexp( Integral x, int exp );
}}
{{dcl end}}

@1-3@ Multiplies a floating point value {{tt|x}} by the number {{tt|2}} raised to the {{tt|exp}} power.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | exp | integer value}}
{{par end}}

===Return value===
If no errors occur, {{tt|x}} multiplied by 2 to the power of {{tt|exp}} ({{math|x&amp;times;2{{su|p=exp}}}}) is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* Unless a range error occurs, {{lc|FE_INEXACT}} is never raised (the result is exact)
* Unless a range error occurs, [[cpp/numeric/fenv/FE_round|the current rounding mode]] is ignored
* If {{tt|x}} is ±0, it is returned, unmodified
* If {{tt|x}} is ±∞, it is returned, unmodified
* If {{tt|exp}} is 0, then {{tt|x}} is returned, unmodified
* If {{tt|x}} is NaN, NaN is returned

===Notes===
On binary systems (where {{lc|FLT_RADIX}} is {{tt|2}}), {{tt|std::ldexp}} is equivalent to {{lc|std::scalbn}}.

The function {{tt|std::ldexp}} (&quot;load exponent&quot;), together with its dual, {{lc|std::frexp}}, can be used to manipulate the representation of a floating-point number without direct bit manipulations.

On many implementations, {{tt|std::ldexp}} is less efficient than multiplication or division by a power of two using arithmetic operators.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;ldexp(7, -4) = &quot; &lt;&lt; std::ldexp(7, -4) &lt;&lt; '\n'
              &lt;&lt; &quot;ldexp(1, -1074) = &quot; &lt;&lt; std::ldexp(1, -1074)
              &lt;&lt; &quot; (minimum positive subnormal double)\n&quot;
              &lt;&lt; &quot;ldexp(nextafter(1,0), 1024) = &quot;
              &lt;&lt; std::ldexp(std::nextafter(1,0), 1024)
              &lt;&lt; &quot; (largest finite double)\n&quot;;
    // special values
    std::cout &lt;&lt; &quot;ldexp(-0, 10) = &quot; &lt;&lt; std::ldexp(-0.0, 10) &lt;&lt; '\n'
              &lt;&lt; &quot;ldexp(-Inf, -1) = &quot; &lt;&lt; std::ldexp(-INFINITY, -1) &lt;&lt; '\n';
    // error handling
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;ldexp(1, 1024) = &quot; &lt;&lt; std::ldexp(1, 1024) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
|output=
ldexp(7, -4) = 0.4375
ldexp(1, -1074) = 4.94066e-324 (minimum positive subnormal double)
ldexp(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)
ldexp(-0, 10) = -0
ldexp(-Inf, -1) = -inf
ldexp(1, 1024) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc frexp}}
{{dsc inc | cpp/numeric/math/dsc scalbn}}
{{dsc see c | c/numeric/math/ldexp}}
{{dsc end}}

[[de:cpp/numeric/math/ldexp]]
[[es:cpp/numeric/math/ldexp]]
[[fr:cpp/numeric/math/ldexp]]
[[it:cpp/numeric/math/ldexp]]
[[ja:cpp/numeric/math/ldexp]]
[[pt:cpp/numeric/math/ldexp]]
[[ru:cpp/numeric/math/ldexp]]
[[zh:cpp/numeric/math/ldexp]]</text>
      <sha1>ec1iz8itpzklohgbby39yzte2gt0cfd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/ldiv</title>
    <ns>0</ns>
    <id>4039</id>
    <redirect title="cpp/numeric/math/div" />
    <revision>
      <id>14895</id>
      <timestamp>2011-12-01T14:39:32Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/div]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/lgamma</title>
    <ns>0</ns>
    <id>2948</id>
    <revision>
      <id>71181</id>
      <parentid>67148</parentid>
      <timestamp>2014-06-07T20:20:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail, +example</comment>
      <text xml:space="preserve" bytes="4271">{{cpp/title|lgamma}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       lgamma( float arg );
}}
{{dcl | since=c++11 |num=2|
double      lgamma( double arg );
}}
{{dcl | since=c++11 |num=3|
long double lgamma( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      lgamma( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the natural logarithm of the absolute value of the [[enwiki:Gamma function|gamma function]] of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the value of the logarithm of the gamma function of {{tt|arg}}, that is {{math|log{{su|b=e}}{{!}}{{minteg|0|∞|''t''{{su|p=arg-1}} {{mexp|-t}} d''t''}}{{!}}}}, is returned.

If a pole error occurs, {{tt|+HUGE_VAL}}, {{tt|+HUGE_VALF}}, or {{tt|+HUGE_VALL}} is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If {{tt|arg}} is zero or is an integer less than zero, a pole error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is 1, +0 is returned
* If the argument is 2, +0 is returned
* If the argument is ±0, +∞ is returned and {{lc|FE_DIVBYZERO}} is raised
* If the argument is a negative integer, +∞ is returned and {{lc|FE_DIVBYZERO}} is raised
* If the argument is ±∞, +∞ is returned.
* If the argument is NaN, NaN is returned

===Notes===
If {{tt|arg}} is a natural number, {{c|std::lgamma(arg)}} is the logarithm of the factorial of {{tt|arg-1}}.

The [http://pubs.opengroup.org/onlinepubs/9699919799/functions/lgamma.html POSIX version of lgamma] is not thread-safe: each execution of the function stores the sign of the gamma function of {{tt|arg}} in the static external variable {{tt|signgam}}. Some implementations provide {{tt|lgamma_r}}, which takes a pointer to user-provided storage for singgam as the second parameter, and is thread-safe.

There is a non-standard function named {{tt|gamma}} in various implementations, but its definition is inconsistent. For example, glibc and 4.2BSD version of {{tt|gamma}} executes {{tt|lgamma}}, but 4.4BSD version of {{tt|gamma}} executes {{tt|tgamma}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
const double pi = std::acos(-1);
int main()
{
    std::cout &lt;&lt; &quot;lgamma(10) = &quot; &lt;&lt; std::lgamma(10)
              &lt;&lt; &quot;,  log(9!) = &quot; &lt;&lt; std::log(2*3*4*5*6*7*8*9) &lt;&lt; '\n'
              &lt;&lt; &quot;lgamma(0.5) = &quot; &lt;&lt; std::lgamma(0.5)
              &lt;&lt; &quot; , log(sqrt(pi)) = &quot; &lt;&lt; std::log(std::sqrt(pi)) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;lgamma(1) = &quot; &lt;&lt; std::lgamma(1) &lt;&lt; '\n'
              &lt;&lt; &quot;lgamma(+Inf) = &quot; &lt;&lt; std::lgamma(INFINITY) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;lgamma(0) = &quot; &lt;&lt; std::lgamma(0) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
| output=
lgamma(10) = 12.8018,  log(9!) = 12.8018
lgamma(0.5) = 0.572365 , log(sqrt(pi)) = 0.572365
lgamma(1) = 0
lgamma(+Inf) = inf
lgamma(0) = inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc tgamma}}
{{dsc see c | c/numeric/math/lgamma}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/LogGammaFunction.html Weisstein, Eric W. &quot;Log Gamma Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/math/lgamma]]
[[es:cpp/numeric/math/lgamma]]
[[fr:cpp/numeric/math/lgamma]]
[[it:cpp/numeric/math/lgamma]]
[[ja:cpp/numeric/math/lgamma]]
[[pt:cpp/numeric/math/lgamma]]
[[ru:cpp/numeric/math/lgamma]]
[[zh:cpp/numeric/math/lgamma]]</text>
      <sha1>c60ndigf7i9q2tsymsr8a8q6dcfdutr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/llabs</title>
    <ns>0</ns>
    <id>4038</id>
    <redirect title="cpp/numeric/math/abs" />
    <revision>
      <id>14894</id>
      <timestamp>2011-12-01T14:39:26Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/abs]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/lldiv</title>
    <ns>0</ns>
    <id>4040</id>
    <redirect title="cpp/numeric/math/div" />
    <revision>
      <id>14896</id>
      <timestamp>2011-12-01T14:39:39Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/div]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/llrint</title>
    <ns>0</ns>
    <id>4033</id>
    <redirect title="cpp/numeric/math/rint" />
    <revision>
      <id>14889</id>
      <timestamp>2011-12-01T14:37:37Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/rint]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/rint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/llround</title>
    <ns>0</ns>
    <id>4035</id>
    <redirect title="cpp/numeric/math/round" />
    <revision>
      <id>14891</id>
      <timestamp>2011-12-01T14:38:25Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/round]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/log</title>
    <ns>0</ns>
    <id>1367</id>
    <revision>
      <id>70701</id>
      <parentid>70621</parentid>
      <timestamp>2014-05-29T01:40:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>detail, longer example</comment>
      <text xml:space="preserve" bytes="3099">{{cpp/title|log}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       log( float arg );
}}
{{dcl |num=2|
double      log( double arg );
}}
{{dcl |num=3|
long double log( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      log( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the the natural (base ''e'') logarithm of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the natural (base-''e'') logarithm of {{tt|arg}} ({{math|ln(arg)}} or {{math|log{{su|b=e}}(arg)}}) is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error occurs if {{tt|arg}} is less than zero.

Pole error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is 1, +0 is returned
* If the argument is negative, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Example===
{{example | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;log(1) = &quot; &lt;&lt; std::log(1) &lt;&lt; '\n'
              &lt;&lt; &quot;base-5 logarithm of 125 = &quot; &lt;&lt; std::log(125)/std::log(5) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;log(1) = &quot; &lt;&lt; std::log(1) &lt;&lt; '\n'
              &lt;&lt; &quot;log(+Inf) = &quot; &lt;&lt; std::log(INFINITY) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;log(0) = &quot; &lt;&lt; std::log(0) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
 | p=true
 | output=
log(1) = 0
base-5 logarithm of 125 = 3
log(1) = 0
log(+Inf) = inf
log(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc log10}}
{{dsc inc | cpp/numeric/math/dsc log2}}
{{dsc inc | cpp/numeric/math/dsc log1p}}
{{dsc inc | cpp/numeric/math/dsc exp}}
{{dsc inc | cpp/numeric/complex/dsc log}}
{{dsc inc | cpp/numeric/valarray/dsc log}}
{{dsc see c | c/numeric/math/log}}
{{dsc end}}

[[de:cpp/numeric/math/log]]
[[es:cpp/numeric/math/log]]
[[fr:cpp/numeric/math/log]]
[[it:cpp/numeric/math/log]]
[[ja:cpp/numeric/math/log]]
[[pl:cpp/numeric/math/log]]
[[pt:cpp/numeric/math/log]]
[[ru:cpp/numeric/math/log]]
[[zh:cpp/numeric/math/log]]</text>
      <sha1>7j09t4vqf2l9xlqxb39ikxfvqh7dguq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/log10</title>
    <ns>0</ns>
    <id>1368</id>
    <revision>
      <id>71148</id>
      <parentid>70633</parentid>
      <timestamp>2014-06-07T04:16:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail, example</comment>
      <text xml:space="preserve" bytes="3202">{{cpp/title|log10}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       log10( float arg );
}}
{{dcl |num=2|
double      log10( double arg );
}}
{{dcl |num=3|
long double log10( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      log10( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the common (base-''10'') logarithm of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the common (base-''10'') logarithm of {{tt|arg}} ({{math|log{{su|b=10}}(arg)}} or {{math|lg(arg)}}) is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error occurs if {{tt|arg}} is less than zero.

Pole error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is 1, +0 is returned
* If the argument is negative, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;log10(1000) = &quot; &lt;&lt; std::log10(1000) &lt;&lt; '\n'
              &lt;&lt; &quot;log10(0.001) = &quot; &lt;&lt; std::log10(0.001) &lt;&lt; '\n'
              &lt;&lt; &quot;base-5 logarithm of 125 = &quot; &lt;&lt; std::log10(125)/std::log10(5) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;log10(1) = &quot; &lt;&lt; std::log10(1) &lt;&lt; '\n'
              &lt;&lt; &quot;log10(+Inf) = &quot; &lt;&lt; std::log10(INFINITY) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;log10(0) = &quot; &lt;&lt; std::log10(0) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
|p=true
|output=
log10(1000) = 3
log10(0.001) = -3
base-5 logarithm of 125 = 3
log10(1) = 0
log10(+Inf) = inf
log10(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/math/dsc log2}}
{{dsc inc | cpp/numeric/math/dsc log1p}}
{{dsc inc | cpp/numeric/complex/dsc log10}}
{{dsc inc | cpp/numeric/valarray/dsc log10}}
{{dsc see c | c/numeric/math/log10}}
{{dsc end}}

[[de:cpp/numeric/math/log10]]
[[es:cpp/numeric/math/log10]]
[[fr:cpp/numeric/math/log10]]
[[it:cpp/numeric/math/log10]]
[[ja:cpp/numeric/math/log10]]
[[pl:cpp/numeric/math/log10]]
[[pt:cpp/numeric/math/log10]]
[[ru:cpp/numeric/math/log10]]
[[zh:cpp/numeric/math/log10]]</text>
      <sha1>125i93yllf9kx1a35idh94pxfc9mj1s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/log1p</title>
    <ns>0</ns>
    <id>3662</id>
    <revision>
      <id>70938</id>
      <parentid>70937</parentid>
      <timestamp>2014-06-03T19:40:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>more self-fix</comment>
      <text xml:space="preserve" bytes="3859">{{cpp/title|log1p}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       log1p( float arg );
}}
{{dcl | since=c++11 |num=2|
double      log1p( double arg );
}}
{{dcl | since=c++11 |num=3|
long double log1p( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      log1p( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the natural (base {{c|e}}) logarithm of {{c|1+arg}}. This function is more precise than the expression {{c|std::log(1+arg)}} if {{tt|arg}} is close to zero.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur {{math|ln(1+arg)}} is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error occurs if {{tt|arg}} is less than {{math|-1}}.

Pole error may occur if {{tt|arg}} is {{math|-1}}.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, it is returned unmodified
* If the argument is -1, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is less than -1, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
The functions {{lc|std::expm1}} and {{tt|std::log1p}} are useful for financial calculations, for example, when calculating small daily interest rates: {{math|(1+x){{su|p=n}}-1}} can be expressed as {{c|std::expm1(n * std::log1p(x))}}. These functions also simplify writing accurate inverse hyperbolic functions.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cfenv&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;log1p(0) = &quot; &lt;&lt; log1p(0) &lt;&lt; '\n'
              &lt;&lt; &quot;Interest earned in 2 days on on $100, compounded daily at 1%\n&quot;
              &lt;&lt; &quot; on a 30/360 calendar = &quot;
              &lt;&lt; 100*expm1(2*log1p(0.01/360)) &lt;&lt; '\n'
              &lt;&lt; &quot;log(1+1e-16) = &quot; &lt;&lt; std::log(1+1e-16)
              &lt;&lt; &quot; log1p(1e-16) = &quot; &lt;&lt; std::log1p(1e-16) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;log1p(-0) = &quot; &lt;&lt; std::log1p(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;log1p(+Inf) = &quot; &lt;&lt; std::log1p(INFINITY) &lt;&lt; '\n';
    // error handling
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;log1p(-1) = &quot; &lt;&lt; std::log1p(-1) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
|p=true
|output=
log1p(0) = 0
Interest earned in 2 days on on $100, compounded daily at 1%
 on a 30/360 calendar = 0.00555563
log(1+1e-16) = 0 log1p(1e-16) = 1e-16
log1p(-0) = -0
log1p(+Inf) = inf
log1p(-1) = -inf
    errno == ERANGE: Result too large
    FE_DIVBYZERO raised
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/math/dsc log10}}
{{dsc inc | cpp/numeric/math/dsc log2}}
{{dsc inc | cpp/numeric/math/dsc expm1}}
{{dsc see c | c/numeric/math/log1p}}
{{dsc end}}

[[de:cpp/numeric/math/log1p]]
[[es:cpp/numeric/math/log1p]]
[[fr:cpp/numeric/math/log1p]]
[[it:cpp/numeric/math/log1p]]
[[ja:cpp/numeric/math/log1p]]
[[pt:cpp/numeric/math/log1p]]
[[ru:cpp/numeric/math/log1p]]
[[zh:cpp/numeric/math/log1p]]</text>
      <sha1>sfxhjqjn5i38eocauwoxnureuyynjhe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/log2</title>
    <ns>0</ns>
    <id>4902</id>
    <revision>
      <id>71151</id>
      <parentid>70623</parentid>
      <timestamp>2014-06-07T04:33:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail, +example</comment>
      <text xml:space="preserve" bytes="3441">{{cpp/title|log2}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       log2( float arg );
}}
{{dcl | since=c++11 |num=2|
double      log2( double arg );
}}
{{dcl | since=c++11 |num=3|
long double log2( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      log2( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the binary (base-''2'') logarithm of {{c|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the base-''2'' logarithm of {{tt|arg}} ({{math|log{{su|b=2}}(arg)}} or {{math|lb(arg)}}) is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error occurs if {{tt|arg}} is less than zero.

Pole error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If the argument is 1, +0 is returned
* If the argument is negative, NaN is returned and {{lc|FE_INVALID}} is raised.
* If the argument is +∞, +∞ is returned
* If the argument is NaN, NaN is returned

===Notes===
For integer {{tt|arg}}, the binary logarithm can be interpreted as the zero-based index of the most significant 1 bit in the input.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;log2(65536) = &quot; &lt;&lt; std::log2(65536) &lt;&lt; '\n'
              &lt;&lt; &quot;log2(0.125) = &quot; &lt;&lt; std::log2(0.125) &lt;&lt; '\n'
              &lt;&lt; &quot;log2(0x020f) = &quot; &lt;&lt; std::log2(0x020f)
              &lt;&lt; &quot; (highest set bit is in position 9)\n&quot;
              &lt;&lt; &quot;base-5 logarithm of 125 = &quot; &lt;&lt; std::log2(125)/std::log2(5) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;log2(1) = &quot; &lt;&lt; std::log2(1) &lt;&lt; '\n'
              &lt;&lt; &quot;log2(+Inf) = &quot; &lt;&lt; std::log2(INFINITY) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;log2(0) = &quot; &lt;&lt; std::log2(0) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
|p=true
|output=
log2(65536) = 16
log2(0.125) = -3
log2(0x020f) = 9.04166 (highest set bit is in position 9)
base-5 logarithm of 125 = 3
log2(1) = 0
log2(+Inf) = inf
log2(0) = -inf
    errno == ERANGE: Numerical result out of range
    FE_DIVBYZERO raised
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/math/dsc log10}}
{{dsc inc | cpp/numeric/math/dsc log1p}}
{{dsc inc | cpp/numeric/math/dsc exp2}}
{{dsc see c | c/numeric/math/log2}}
{{dsc end}}

[[de:cpp/numeric/math/log2]]
[[es:cpp/numeric/math/log2]]
[[fr:cpp/numeric/math/log2]]
[[it:cpp/numeric/math/log2]]
[[ja:cpp/numeric/math/log2]]
[[pt:cpp/numeric/math/log2]]
[[ru:cpp/numeric/math/log2]]
[[zh:cpp/numeric/math/log2]]</text>
      <sha1>1uczfastgrsrj0d4rufxncv1vtq6vjx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/logb</title>
    <ns>0</ns>
    <id>3664</id>
    <revision>
      <id>73671</id>
      <parentid>72316</parentid>
      <timestamp>2014-11-10T09:51:17Z</timestamp>
      <contributor>
        <ip>80.69.207.106</ip>
      </contributor>
      <comment>Fix typo</comment>
      <text xml:space="preserve" bytes="4200">{{cpp/title|logb}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
float       logb( float arg );
}}
{{dcl | since=c++11 | num=2|
double      logb( double arg );
}}
{{dcl | since=c++11 | num=3|
long double logb( long double arg );
}}
{{dcl | since=c++11 | num=4|
double      logb( Integral arg );
}}
{{dcl end}}

@1-3@ Extracts the value of the unbiased radix-independent exponent from the floating-point argument {{tt|arg}}, and returns it as a floating-point value.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}).

Formally, the unbiased exponent is the signed integral part of {{math|log{{su|b=r}}{{!}}arg{{!}}}} (returned by this function as a floating-point value), for non-zero arg, where {{tt|r}} is {{c|std::numeric_limits&lt;T&gt;::radix}} and {{tt|T}} is the floating-point type of {{tt|arg}}. If {{tt|arg}} is subnormal, it is treated as though it was normalized.

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the unbiased exponent of {{tt|arg}} is returned as a signed floating-point value.

If a domain error occurs, an implementation-defined value is returned

If a pole error occurs, {{tt|-HUGE_VAL}}, {{tt|-HUGE_VALF}}, or {{tt|-HUGE_VALL}} is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain or range error may occur if {{tt|arg}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|arg}} is ±0, -∞ is returned and {{lc|FE_DIVBYZERO}} is raised.
* If {{tt|arg}} is ±∞, +∞ is returned
* If {{tt|arg}} is NaN, NaN is returned.
* In all other cases, the result is exact ({{lc|FE_INEXACT}} is never raised) and [[cpp/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/logb.html POSIX requires] that a pole error occurs if {{tt|arg}} is ±0.

The value of the exponent returned by {{tt|std::logb}} is always 1 less than the exponent retuned by {{lc|std::frexp}} because of the different normalization requirements: for the exponent {{tt|e}} returned by {{tt|std::logb}}, {{math|{{!}}arg*r{{su|p=-e}}{{!}}}} is between 1 and {{tt|r}} (typically between {{c|1}} and {{c|2}}), but for the exponent {{tt|e}} returned by {{lc|std::frexp}}, {{math|{{!}}arg*2{{su|p=-e}}{{!}}}} is between {{c|0.5}} and {{c|1}}.

===Example===
{{example
 | Compares different floating-point decomposition functions
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;limits&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    double f = 123.45;
    std::cout &lt;&lt; &quot;Given the number &quot; &lt;&lt; f &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat
              &lt;&lt; f &lt;&lt; std::defaultfloat &lt;&lt; &quot; in hex,\n&quot;;

    double f3;
    double f2 = std::modf(f, &amp;f3);
    std::cout &lt;&lt; &quot;modf() makes &quot; &lt;&lt; f3 &lt;&lt; &quot; + &quot; &lt;&lt; f2 &lt;&lt; '\n';

    int i;
    f2 = std::frexp(f, &amp;i);
    std::cout &lt;&lt; &quot;frexp() makes &quot; &lt;&lt; f2 &lt;&lt; &quot; * 2^&quot; &lt;&lt; i &lt;&lt; '\n';

    i = std::ilogb(f);
    std::cout &lt;&lt; &quot;logb()/ilogb() make &quot; &lt;&lt; f/std::scalbn(1.0, i) &lt;&lt; &quot; * &quot;
              &lt;&lt; std::numeric_limits&lt;double&gt;::radix
              &lt;&lt; &quot;^&quot; &lt;&lt; std::ilogb(f) &lt;&lt; '\n';

    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;logb(0) = &quot; &lt;&lt; std::logb(0) &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
logb(0) = -Inf
    FE_DIVBYZERO raised
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc frexp}}
{{dsc inc | cpp/numeric/math/dsc ilogb}}
{{dsc inc | cpp/numeric/math/dsc scalbn}}
{{dsc see c | c/numeric/math/logb}}
{{dsc end}}

[[de:cpp/numeric/math/logb]]
[[es:cpp/numeric/math/logb]]
[[fr:cpp/numeric/math/logb]]
[[it:cpp/numeric/math/logb]]
[[ja:cpp/numeric/math/logb]]
[[pt:cpp/numeric/math/logb]]
[[ru:cpp/numeric/math/logb]]
[[zh:cpp/numeric/math/logb]]</text>
      <sha1>jt6ak0h7fdre9fbp1qo2shnumm5t8g5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/lrint</title>
    <ns>0</ns>
    <id>4034</id>
    <redirect title="cpp/numeric/math/rint" />
    <revision>
      <id>14890</id>
      <timestamp>2011-12-01T14:38:02Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/rint]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/rint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/lround</title>
    <ns>0</ns>
    <id>4036</id>
    <redirect title="cpp/numeric/math/round" />
    <revision>
      <id>14892</id>
      <timestamp>2011-12-01T14:38:53Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/round]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/numeric/math/round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/math errhandling</title>
    <ns>0</ns>
    <id>9220</id>
    <revision>
      <id>70432</id>
      <parentid>70194</parentid>
      <timestamp>2014-05-22T15:23:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>inexact result isn't technically a range error</comment>
      <text xml:space="preserve" bytes="4258">{{title|MATH_ERRNO, MATH_ERREXCEPT, math_errhandling}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |
#define MATH_ERRNO        1
}}
{{dcl | since=c++11 |
#define MATH_ERREXCEPT    2
}}
{{dcl | since=c++11 |
#define math_errhandling  /*implementation defined*/
}}
{{dcl end}}

The macro constant {{tt|math_errhandling}} expands to an expression of type {{c|int}} that is either equal to {{tt|MATH_ERRNO}}, or equal to {{tt|MATH_ERREXCEPT}}, or equal to their bitwise OR ({{c|MATH_ERRNO {{!}} MATH_ERREXCEPT}}).

The value of {{tt|math_errhandling}} indicates the type of error handling that is performed by the floating-point operators and [[cpp/numeric/math|functions]]:

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|MATH_ERREXCEPT}} | indicates that floating-point exceptions are used: at least {{lc|FE_DIVBYZERO}}, {{lc|FE_INVALID}}, and {{lc|FE_OVERFLOW}} are defined in {{c|&lt;cfenv&gt;}}.}}
{{dsc | {{tt|MATH_ERRNO}} | indicates that floating-point operations use the variable {{lc|errno}} to report errors.}}
{{dsc end}}

If the implementation supports IEEE floating-point arithmetic (IEC 60559), {{c|math_errhandling &amp; MATH_ERREXCEPT}} is required to be non-zero.

The following floating-point error conditions are recognized:

{|table class=wikitable
|-
!Condition||Explanation||errno||floating-point exception||Example
|-
|Domain error
|the argument is outside the range in which the operation is mathematically defined (the description of [[cpp/numeric/math|each function]] lists the required domain errors)
|{{lc|EDOM}}
|{{lc|FE_INVALID}}
|{{c|std::acos(2)}}
|-
|Pole error
|the mathematical result of the function is exactly infinite or undefined
|{{lc|ERANGE}}
|{{lc|FE_DIVBYZERO}}
|{{c|std::log(0.0)}}, {{c|1.0/0.0}}
|-
|Range error due to overflow
|the mathematical result is finite, but becomes infinite after rounding, or becomes the largest representable finite value after rounding down
|{{lc|ERANGE}}
|{{lc|FE_OVERFLOW}}
|{{c|std::pow(DBL_MAX,2)}}
|-
|Range error due to underflow
|the result is non-zero, but becomes zero after rounding, or becomes subnormal with a loss of precision
|{{lc|ERANGE}} or unchanged (implementation-defined)
|{{lc|FE_UNDERFLOW}} or nothing (implementation-defined)
|{{c|DBL_MIN/2}}
|-
|Inexact result
|the result has to be rounded to fit in the destination type
|unchanged
|{{lc|FE_INEXACT}} or nothing (unspecified)
|{{c|std::sqrt(2)}}, {{c|1.0/10.0}}
|}

===Notes===
Whether {{lc|FE_INEXACT}} is raised by the mathematical library functions is unspecified in general, but may be explicitly specified in the description of the function (e.g. {{lc|std::rint}} vs {{lc|std::nearbyint}})

Before C++11, floating-point exceptions were not specified, {{c|EDOM}} was required for any domain error, {{c|ERANGE}} was required for overflows and implementation-defined for underflows.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cfenv&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;MATH_ERRNO is &quot;
              &lt;&lt; (math_errhandling &amp; MATH_ERRNO ? &quot;set&quot; : &quot;not set&quot;) &lt;&lt; '\n'
              &lt;&lt; &quot;MATH_ERREXCEPT is &quot;
              &lt;&lt; (math_errhandling &amp; MATH_ERREXCEPT ? &quot;set&quot; : &quot;not set&quot;) &lt;&lt; '\n';
    std::feclearexcept(FE_ALL_EXCEPT);
    errno = 0;
    std::cout &lt;&lt;  &quot;log(0) = &quot; &lt;&lt; std::log(0) &lt;&lt; '\n';
    if(errno == ERANGE)
            std::cout &lt;&lt; &quot;errno = ERANGE (&quot; &lt;&lt; std::strerror(errno) &lt;&lt; &quot;)\n&quot;;
    if(std::fetestexcept(FE_DIVBYZERO))
        std::cout &lt;&lt; &quot;FE_DIVBYZERO (pole error) reported\n&quot;;
}
 | p=true
 | output=
MATH_ERRNO is set
MATH_ERREXCEPT is set
log(0) = -inf
errno = ERANGE (Numerical result out of range)
FE_DIVBYZERO (pole error) reported
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/fenv/dsc FE_exceptions}}
{{dsc inc | cpp/error/dsc errno}}
{{dsc see c | c/numeric/math/math_errhandling}}
{{dsc end}}

[[de:cpp/numeric/math/math errhandling]]
[[es:cpp/numeric/math/math errhandling]]
[[fr:cpp/numeric/math/math errhandling]]
[[it:cpp/numeric/math/math errhandling]]
[[ja:cpp/numeric/math/math errhandling]]
[[pt:cpp/numeric/math/math errhandling]]
[[ru:cpp/numeric/math/math errhandling]]
[[zh:cpp/numeric/math/math errhandling]]</text>
      <sha1>mwmpb25di328jg461koiatjzch8drqx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/modf</title>
    <ns>0</ns>
    <id>3665</id>
    <revision>
      <id>85859</id>
      <parentid>73464</parentid>
      <timestamp>2016-05-24T21:11:14Z</timestamp>
      <contributor>
        <username>Cpprf acount</username>
        <id>4938</id>
      </contributor>
      <minor/>
      <comment>Within possible implementation code, in line '*iptr = std::nearbyint(value);' - corrected name of variable (from 'value' to 'x').</comment>
      <text xml:space="preserve" bytes="3399">{{cpp/title|modf}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       modf( float x, float* iptr );
}}
{{dcl |num=2|
double      modf( double x, double* iptr );
}}
{{dcl |num=3|
long double modf( long double x, long double* iptr );
}}
{{dcl end}}

@1-3@ Decomposes given floating point value {{tt|x}} into integral and fractional parts, each having the same type and sign as {{tt|x}}. The integral part (in floating-point format) is stored in the object pointed to by {{tt|iptr}}.

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | iptr | pointer to floating point value to store the integral part to}}
{{par end}}

===Return value===

If no errors occur, returns the fractional part of {{tt|x}} with the same sign as {{tt|x}}. The integral part is put into the value pointed to by {{tt|iptr}}.

The sum of the returned value and the value stored in {{tt|*iptr}} gives {{tt|x}} (allowing for rounding)

===Error handling===
This function is not subject to any errors specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If {{tt|x}} is ±0, ±0 is returned, and ±0 is stored in {{c|*iptr}}.
* If {{tt|x}} is ±∞, ±0 is returned, and ±∞ is stored in {{c|*iptr}}.
* If {{tt|x}} is NaN, NaN is returned, and NaN is stored in {{c|*iptr}}.
* The returned value is exact, [[cpp/numeric/fenv/FE_round|the current rounding mode]] is ignored

===Notes===
This function behaves as if implemented as follows:
{{source|1=
double modf(double x, double* iptr)
{
#pragma STDC FENV_ACCESS ON
    int save_round = std::fegetround();
    std::fesetround(FE_TOWARDZERO);
    *iptr = std::nearbyint(x);
    std::fesetround(save_round);
    return std::copysign(std::isinf(x) ? 0.0 : x - (*iptr), x);
}
}}

===Example===
{{example
 | Compares different floating-point decomposition functions
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;limits&gt;

int main()
{
    double f = 123.45;
    std::cout &lt;&lt; &quot;Given the number &quot; &lt;&lt; f &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat
              &lt;&lt; f &lt;&lt; std::defaultfloat &lt;&lt; &quot; in hex,\n&quot;;

    double f3;
    double f2 = std::modf(f, &amp;f3);
    std::cout &lt;&lt; &quot;modf() makes &quot; &lt;&lt; f3 &lt;&lt; &quot; + &quot; &lt;&lt; f2 &lt;&lt; '\n';

    int i;
    f2 = std::frexp(f, &amp;i);
    std::cout &lt;&lt; &quot;frexp() makes &quot; &lt;&lt; f2 &lt;&lt; &quot; * 2^&quot; &lt;&lt; i &lt;&lt; '\n';

    i = std::ilogb(f);
    std::cout &lt;&lt; &quot;logb()/ilogb() make &quot; &lt;&lt; f/std::scalbn(1.0, i) &lt;&lt; &quot; * &quot;
              &lt;&lt; std::numeric_limits&lt;double&gt;::radix
              &lt;&lt; &quot;^&quot; &lt;&lt; std::ilogb(f) &lt;&lt; '\n';

    // special values
    f2 = std::modf(-0.0, &amp;f3);
    std::cout &lt;&lt; &quot;modf(-0) makes &quot; &lt;&lt; f3 &lt;&lt; &quot; + &quot; &lt;&lt; f2 &lt;&lt; '\n';
    f2 = std::modf(-INFINITY, &amp;f3);
    std::cout &lt;&lt; &quot;modf(-Inf) makes &quot; &lt;&lt; f3 &lt;&lt; &quot; + &quot; &lt;&lt; f2 &lt;&lt; '\n';

}
 | p=true
 | output=
Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,
modf() makes 123 + 0.45
frexp() makes 0.964453 * 2^7
logb()/ilogb() make 1.92891 * 2^6
modf(-0) makes -0 + -0
modf(-Inf) makes -INF + -0
}}
===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc trunc}}
{{dsc see c | c/numeric/math/modf}}
{{dsc end}}

[[de:cpp/numeric/math/modf]]
[[es:cpp/numeric/math/modf]]
[[fr:cpp/numeric/math/modf]]
[[it:cpp/numeric/math/modf]]
[[ja:cpp/numeric/math/modf]]
[[pt:cpp/numeric/math/modf]]
[[ru:cpp/numeric/math/modf]]
[[tr:cpp/numeric/math/modf]]
[[zh:cpp/numeric/math/modf]]</text>
      <sha1>9866vadxx9u082h1mg1q636i0a6d2qi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/nan</title>
    <ns>0</ns>
    <id>3740</id>
    <revision>
      <id>87181</id>
      <parentid>86496</parentid>
      <timestamp>2016-08-01T21:18:13Z</timestamp>
      <contributor>
        <ip>209.37.218.67</ip>
      </contributor>
      <comment>formatting declarations</comment>
      <text xml:space="preserve" bytes="2263">{{cpp/title|nan|nanf|nanl}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |
float       nanf( const char* arg );
}}
{{dcl | since=c++11 |
double      nan( const char* arg );
}}
{{dcl | since=c++11 |
long double nanl( const char* arg );
}}
{{dcl end}}

Converts the implementation-defined character string {{tt|arg}} into the corresponding quiet NaN value, as if by calling {{lc|std::strtod}}, {{lc|std::strtof}}, or {{lc|std::strtold}}, respectively, as follows:

The call {{c|std::nan(&quot;string&quot;)}} is equivalent to the call {{c|std::strtod(&quot;NAN(string)&quot;, (char**)nullptr);}}.

The call {{c|std::nan(&quot;&quot;)}} is equivalent to the call {{c|std::strtod(&quot;NAN()&quot;, (char**)nullptr);}}.

The call {{c|std::nan(nullptr)}} is equivalent to the call {{c|std::strtod(&quot;NAN&quot;, (char**)nullptr);}}.

===Parameters===
{{par begin}}
{{par | arg | narrow character string identifying the contents of a NaN}}
{{par end}}

===Return value===
The quiet NaN value that corresponds to the identifying string {{tt|arg}} or zero if the implementation does not support quiet NaNs. 

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstdint&gt;
#include &lt;cstring&gt;

int main()
{
    double f1 = std::nan(&quot;1&quot;);
    std::uint64_t f1n; std::memcpy(&amp;f1n, &amp;f1, sizeof f1);
    std::cout &lt;&lt; &quot;nan(\&quot;1\&quot;) = &quot; &lt;&lt; f1 &lt;&lt; &quot; (&quot; &lt;&lt; std::hex &lt;&lt; f1n &lt;&lt; &quot;)\n&quot;;

    double f2 = std::nan(&quot;2&quot;);
    std::uint64_t f2n; std::memcpy(&amp;f2n, &amp;f2, sizeof f2);
    std::cout &lt;&lt; &quot;nan(\&quot;2\&quot;) = &quot; &lt;&lt; f2 &lt;&lt; &quot; (&quot; &lt;&lt; std::hex &lt;&lt; f2n &lt;&lt; &quot;)\n&quot;;
}
|p=true
|output=
nan(&quot;1&quot;) = nan (7ff0000000000001)
nan(&quot;2&quot;) = nan (7ff0000000000002)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc inc | cpp/numeric/math/dsc NAN}}}
{{dsc inc | cpp/types/numeric_limits/dsc has_quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_signaling_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc signaling_NaN}}
{{dsc see c | c/numeric/math/nan | nanf | nan | nanl}}
{{dsc end}}

[[de:cpp/numeric/math/nan]]
[[es:cpp/numeric/math/nan]]
[[fr:cpp/numeric/math/nan]]
[[it:cpp/numeric/math/nan]]
[[ja:cpp/numeric/math/nan]]
[[pt:cpp/numeric/math/nan]]
[[ru:cpp/numeric/math/nan]]
[[zh:cpp/numeric/math/nan]]</text>
      <sha1>4uyal7kitk28usdy4910rmkum453rdj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/nanf</title>
    <ns>0</ns>
    <id>4041</id>
    <redirect title="cpp/numeric/math/nan" />
    <revision>
      <id>14897</id>
      <timestamp>2011-12-01T14:39:48Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/nan]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/nan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/nanl</title>
    <ns>0</ns>
    <id>4042</id>
    <redirect title="cpp/numeric/math/nan" />
    <revision>
      <id>14898</id>
      <timestamp>2011-12-01T14:39:56Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/nan]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/nan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/nearbyint</title>
    <ns>0</ns>
    <id>3741</id>
    <revision>
      <id>72063</id>
      <parentid>70506</parentid>
      <timestamp>2014-07-11T04:38:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail, more varied example</comment>
      <text xml:space="preserve" bytes="3958">{{cpp/title|nearbyint}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
float       nearbyint( float arg );
}}
{{dcl | since=c++11 |num=2 |
double      nearbyint( double arg );
}}
{{dcl | since=c++11 |num=3 |
long double nearbyint( long double arg );
}}
{{dcl | since=c++11 |num=4 |
double      nearbyint( Integral arg );
}}
{{dcl end}}

@1-3@ Rounds the floating-point argument {{tt|arg}} to an integer value in floating-point format, using the [[cpp/numeric/fenv/FE_round|current rounding mode]].
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
The nearest integer value to {{tt|arg}}, according to the [[cpp/numeric/fenv/FE_round|current rounding mode]], is returned.

===Error handling===
This function is not subject to any of the errors specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* {{lc|FE_INEXACT}} is never raised
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned

===Notes===
The only difference between {{tt|std::nearbyint}} and {{lc|std::rint}} is that {{tt|std::nearbyint}} never raises {{lc|FE_INEXACT}}.

The largest representable floating-point values are exact integers in all standard floating-point formats, so {{tt|std::nearbyint}} never overflows on its own; however the result may overflow any integer type (including {{lc|std::intmax_t}}), when stored in an integer variable.

If the current rounding mode is {{lc|FE_TONEAREST}}, this function rounds to even in halfway cases (like {{lc|rint}}, but unlike {{lc|round}}).

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;

int main()
{
#pragma STDC FENV_ACCESS ON
    std::fesetround(FE_TONEAREST);
    std::cout &lt;&lt; &quot;rounding to nearest: \n&quot;
              &lt;&lt; &quot;nearbyint(+2.3) = &quot; &lt;&lt; std::nearbyint(2.3)
              &lt;&lt; &quot;  nearbyint(+2.5) = &quot; &lt;&lt; std::nearbyint(2.5)
              &lt;&lt; &quot;  nearbyint(+3.5) = &quot; &lt;&lt; std::nearbyint(3.5) &lt;&lt; '\n'
              &lt;&lt; &quot;nearbyint(-2.3) = &quot; &lt;&lt; std::nearbyint(-2.3)
              &lt;&lt; &quot;  nearbyint(-2.5) = &quot; &lt;&lt; std::nearbyint(-2.5)
              &lt;&lt; &quot;  nearbyint(-3.5) = &quot; &lt;&lt; std::nearbyint(-3.5) &lt;&lt; '\n';

    std::fesetround(FE_DOWNWARD);
    std::cout &lt;&lt; &quot;rounding down:\n&quot;
              &lt;&lt; &quot;nearbyint(+2.3) = &quot; &lt;&lt; std::nearbyint(2.3)
              &lt;&lt; &quot;  nearbyint(+2.5) = &quot; &lt;&lt; std::nearbyint(2.5)
              &lt;&lt; &quot;  nearbyint(+3.5) = &quot; &lt;&lt; std::nearbyint(3.5) &lt;&lt; '\n'
              &lt;&lt; &quot;nearbyint(-2.3) = &quot; &lt;&lt; std::nearbyint(-2.3)
              &lt;&lt; &quot;  nearbyint(-2.5) = &quot; &lt;&lt; std::nearbyint(-2.5)
              &lt;&lt; &quot;  nearbyint(-3.5) = &quot; &lt;&lt; std::nearbyint(-3.5) &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;nearbyint(-0.0) = &quot; &lt;&lt; std::nearbyint(-0.0)  &lt;&lt; '\n'
              &lt;&lt; &quot;nearbyint(-Inf) = &quot; &lt;&lt; std::nearbyint(-INFINITY) &lt;&lt; '\n';
}
|output=
rounding to nearest: 
nearbyint(+2.3) = 2  nearbyint(+2.5) = 2  nearbyint(+3.5) = 4
nearbyint(-2.3) = -2  nearbyint(-2.5) = -2  nearbyint(-3.5) = -4
rounding down:
nearbyint(+2.3) = 2  nearbyint(+2.5) = 2  nearbyint(+3.5) = 3
nearbyint(-2.3) = -3  nearbyint(-2.5) = -3  nearbyint(-3.5) = -4
nearbyint(-0.0) = -0
nearbyint(-Inf) = -inf
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc rint}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc inc | cpp/numeric/fenv/dsc feround}}
{{dsc see c | c/numeric/math/nearbyint}}
{{dsc end}}

[[de:cpp/numeric/math/nearbyint]]
[[es:cpp/numeric/math/nearbyint]]
[[fr:cpp/numeric/math/nearbyint]]
[[it:cpp/numeric/math/nearbyint]]
[[ja:cpp/numeric/math/nearbyint]]
[[pt:cpp/numeric/math/nearbyint]]
[[ru:cpp/numeric/math/nearbyint]]
[[zh:cpp/numeric/math/nearbyint]]</text>
      <sha1>9luml5qwsohs3kf5rghbr618sw7h7zp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/nextafter</title>
    <ns>0</ns>
    <id>2374</id>
    <revision>
      <id>74385</id>
      <parentid>72822</parentid>
      <timestamp>2014-12-15T18:46:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note about the break from 60559</comment>
      <text xml:space="preserve" bytes="6479">{{cpp/title|nextafter|nexttoward}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
float       nextafter( float from, float to );
}}
{{dcl | since=c++11 | num=2|
double      nextafter( double from, double to );
}}
{{dcl | since=c++11 | num=3|
long double nextafter( long double from, long double to );
}}
{{dcl | since=c++11 | num=4|
Promoted    nextafter( Arithmetic from, Arithmetic to );
}}
{{dcl | since=c++11 | num=5|
float       nexttoward( float from, long double to );
}}
{{dcl | since=c++11 | num=6|
double      nexttoward( double from, long double to );
}}
{{dcl | since=c++11 | num=7|
long double nexttoward( long double from, long double to );
}}
{{dcl | since=c++11 | num=8|
double      nexttoward( Integral from, long double to );
}}
{{dcl end}}

Returns the next representable value of {{tt|from}} in the direction of {{tt|to}}.

@1-3@ If {{tt|from}} equals to {{tt|to}}, {{tt|to}} is returned.
@5-7@ If {{tt|from}} equals to {{tt|to}}, {{tt|to}} is returned, converted from {{c|long double}} to the return type of the function without loss of range or precision.
@4@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1-3}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.
@8@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|6}} (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | from, to | floating point values}}
{{par end}}

===Return value===
If no errors occur, the next representable value of {{tt|from}} in the direction of {{tt|to}}. is returned. If {{tt|from}} equals {{tt|to}}, then {{tt|to}} is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned (with the same sign as {{tt|from}})

If a range error occurs due to underflow, the correct result is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if {{tt|from}} is finite, but the expected result is an infinity, raises {{lc|FE_INEXACT}} and {{lc|FE_OVERFLOW}}
* if {{tt|from}} does not equal {{tt|to}} and the result is subnormal or zero, raises {{lc|FE_INEXACT}} and {{lc|FE_UNDERFLOW}}
* in any case, the returned value is independent of the current rounding mode
* if either {{tt|from}} or {{tt|to}} is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/nextafter.html POSIX specifies] that the overflow and the underflow conditions are range errors (errno may be set)

IEC 60559 recommends that {{tt|from}} is returned whenever {{tt|from{{==}}to}}. These functions return {{tt|to}} instead, which makes the behavior around zero consistent: {{tt|std::nextafter(-0.0, +0.0)}} returns {{tt|+0.0}} and {{tt|std::nextafter(+0.0, -0.0)}} returns {{tt|–0.0}}.

===Example===
{{example|
 | code=
#include &lt;cmath&gt;
#include &lt;iomanip&gt;
#include &lt;iostream&gt;
#include &lt;cfloat&gt;
#include &lt;cfenv&gt;

int main()
{
    float from1 = 0, to1 = std::nextafter(from1, 1.f);
    std::cout &lt;&lt; &quot;The next representable float after &quot; &lt;&lt; std::setprecision(20) &lt;&lt; from1
              &lt;&lt; &quot; is &quot; &lt;&lt; to1
              &lt;&lt; std::hexfloat &lt;&lt; &quot; (&quot; &lt;&lt; to1 &lt;&lt; &quot;)\n&quot; &lt;&lt; std::defaultfloat;

    float from2 = 1, to2 = std::nextafter(from2, 2.f);
    std::cout &lt;&lt; &quot;The next representable float after &quot; &lt;&lt; from2 &lt;&lt; &quot; is &quot; &lt;&lt; to2
              &lt;&lt; std::hexfloat &lt;&lt; &quot; (&quot; &lt;&lt; to2 &lt;&lt; &quot;)\n&quot; &lt;&lt; std::defaultfloat;

    double from3 = std::nextafter(0.1, 0), to3 = 0.1;
    std::cout &lt;&lt; &quot;The number 0.1 lies between two valid doubles:\n&quot;
              &lt;&lt; std::setprecision(56) &lt;&lt; &quot;    &quot; &lt;&lt; from3
              &lt;&lt; std::hexfloat &lt;&lt; &quot; (&quot; &lt;&lt; from3 &lt;&lt; ')' &lt;&lt; std::defaultfloat
              &lt;&lt; &quot;\nand &quot; &lt;&lt; to3 &lt;&lt; std::hexfloat &lt;&lt; &quot; (&quot; &lt;&lt; to3 &lt;&lt; &quot;)\n&quot;
              &lt;&lt; std::defaultfloat &lt;&lt; std::setprecision(20);

    // difference between nextafter and nexttoward:
    long double dir = std::nextafter(from1, 1.0L); // first subnormal long double
    float x = nextafter(from1, dir); // first converts dir to float, giving 0
    std::cout &lt;&lt; &quot;With nextafter, next float after &quot; &lt;&lt; from1 &lt;&lt; &quot; is &quot; &lt;&lt; x &lt;&lt; '\n';
    x = std::nexttoward(from1, dir);
    std::cout &lt;&lt; &quot;With nexttoward, next float after &quot; &lt;&lt; from1 &lt;&lt; &quot; is &quot; &lt;&lt; x &lt;&lt; '\n';

    // special values
    {
        #pragma STDC FENV_ACCESS ON
        std::feclearexcept(FE_ALL_EXCEPT);
        double from4 = DBL_MAX, to4 = std::nextafter(from4, INFINITY);
        std::cout &lt;&lt; &quot;The next representable double after &quot; &lt;&lt; std::setprecision(6)
                  &lt;&lt; from4 &lt;&lt; std::hexfloat &lt;&lt; &quot; (&quot; &lt;&lt; from4 &lt;&lt; ')'
                  &lt;&lt; std::defaultfloat &lt;&lt; &quot; is &quot; &lt;&lt; to4
                  &lt;&lt; std::hexfloat &lt;&lt; &quot; (&quot; &lt;&lt; to4 &lt;&lt; &quot;)\n&quot; &lt;&lt; std::defaultfloat;
        if(std::fetestexcept(FE_OVERFLOW)) std::cout &lt;&lt; &quot;   raised FE_OVERFLOW\n&quot;;
        if(std::fetestexcept(FE_INEXACT)) std::cout &lt;&lt; &quot;   raised FE_INEXACT\n&quot;;
    } // end FENV_ACCESS block

    float from5 = 0.0, to5 = std::nextafter(from5, -0.0);
    std::cout &lt;&lt; &quot;std::nextafter(+0.0, -0.0) gives &quot; &lt;&lt; std::fixed &lt;&lt; to5 &lt;&lt; '\n';
}
 | output=
The next representable float after 0 is 1.4012984643248170709e-45 (0x1p-149)
The next representable float after 1 is 1.0000001192092895508 (0x1.000002p+0)
The number 0.1 lies between two valid doubles:
    0.09999999999999999167332731531132594682276248931884765625 (0x1.9999999999999p-4)
and 0.1000000000000000055511151231257827021181583404541015625 (0x1.999999999999ap-4)
With nextafter, next float after 0 is 0
With nexttoward, next float after 0 is 1.4012984643248170709e-45
The next representable double after 1.79769e+308 (0x1.fffffffffffffp+1023) is inf (inf)
   raised FE_OVERFLOW
   raised FE_INEXACT
std::nextafter(+0.0, -0.0) gives -0.000000
}}

===See also===
{{dsc begin}}
{{dsc see c | c/numeric/math/nextafter}}
{{dsc end}}

[[de:cpp/numeric/math/nextafter]]
[[es:cpp/numeric/math/nextafter]]
[[fr:cpp/numeric/math/nextafter]]
[[it:cpp/numeric/math/nextafter]]
[[ja:cpp/numeric/math/nextafter]]
[[pt:cpp/numeric/math/nextafter]]
[[ru:cpp/numeric/math/nextafter]]
[[zh:cpp/numeric/math/nextafter]]</text>
      <sha1>oqufi3tovpvc0pn0jpx0e6m0neiywle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/nexttoward</title>
    <ns>0</ns>
    <id>2375</id>
    <redirect title="cpp/numeric/math/nextafter" />
    <revision>
      <id>5394</id>
      <timestamp>2011-07-27T11:43:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/numeric/math/nextafter]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/pow</title>
    <ns>0</ns>
    <id>1369</id>
    <revision>
      <id>71859</id>
      <parentid>71100</parentid>
      <timestamp>2014-06-28T17:33:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>label 1-6</comment>
      <text xml:space="preserve" bytes="6468">{{cpp/title|pow}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | num = 1 |
float       pow( float base, float exp );
}}
{{dcl | num = 2 |
double      pow( double base, double exp );
}}
{{dcl | num = 3 |
long double pow( long double base, long double exp );
}}
{{dcl rev begin}}
{{dcl | until=c++11 | num=4 |
float       pow( float base, int iexp );
}}
{{dcl | until=c++11 | num=5 |
double      pow( double base, int iexp );
}}
{{dcl | until=c++11 | num=6 |
long double pow( long double base, int iexp );
}}
{{dcl | since=c++11 | num=7 |
Promoted    pow( Arithmetic1 base, Arithmetic2 exp );
}}
{{dcl end}}

@1-6@ Computes the value of {{tt|base}} raised to the power {{tt|exp}} or {{tt|iexp}}.
@7@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by 1-3). If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | base | base as a value of floating-point or [[cpp/types/is_integral|integral type]]}}
{{par | exp | exponent as a value of floating-point or [[cpp/types/is_integral|integral type]]}}
{{par | iexp | exponent as integer value}}
{{par end}}

===Return value===
If no errors occur, {{tt|base}} raised to the power of {{tt|exp}} (or {{tt|iexp}}) ({{math|base{{su|p=exp}}}}), is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a pole error or a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]]

If {{tt|base}} is finite and negative and {{tt|exp}} is finite and non-integer, a domain error occurs and a range error may occur.

If {{tt|base}} is zero and {{tt|exp}} is zero, a domain error may occur.

If {{tt|base}} is zero and {{tt|exp}} is negative, a domain error or a pole error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* {{c|pow(+0, exp)}}, where {{tt|exp}} is a negative odd integer, returns +∞ and raises {{lc|FE_DIVBYZERO}}
* {{c|pow(-0, exp)}}, where {{tt|exp}} is a negative odd integer, returns -∞ and raises {{lc|FE_DIVBYZERO}}
* {{c|pow(±0, exp)}}, where {{tt|exp}} is negative, finite, and is an even integer or a non-integer, returns +∞ and raises {{lc|FE_DIVBYZERO}}
* {{c|pow(±0, -∞)}} returns +∞ and may raise {{lc|FE_DIVBYZERO}}
* {{c|pow(+0, exp)}}, where {{tt|exp}} is a positive odd integer, returns +0
* {{c|pow(-0, exp)}}, where {{tt|exp}} is a positive odd integer, returns -0
* {{c|pow(±0, exp)}}, where {{tt|exp}} is positive non-integer or a positive even integer, returns +0
* {{c|pow(-1, ±∞)}} returns {{tt|1}}
* {{c|pow(+1, exp)}} returns {{tt|1}} for any {{tt|exp}}, even when {{tt|exp}} is {{tt|NaN}}
* {{c|pow(base, ±0)}} returns {{tt|1}} for any {{tt|base}}, even when {{tt|base}} is {{tt|NaN}}
* {{c|pow(base, exp)}} returns {{tt|NaN}} and raises {{lc|FE_INVALID}} if {{tt|base}} is finite and negative and {{tt|exp}} is finite and non-integer.
* {{c|pow(base, -∞)}} returns +∞ for any {{tt|{{!}}base{{!}}&lt;1}}
* {{c|pow(base, -∞)}} returns +0 for any {{tt|{{!}}base{{!}}&gt;1}}
* {{c|pow(base, +∞)}} returns +0 for any {{tt|{{!}}base{{!}}&lt;1}}
* {{c|pow(base, +∞)}} returns +∞ for any {{tt|{{!}}base{{!}}&gt;1}}
* {{c|pow(-∞, exp)}} returns -0 if {{tt|exp}} is a negative odd integer
* {{c|pow(-∞, exp)}} returns +0 if {{tt|exp}} is a negative non-integer or even integer
* {{c|pow(-∞, exp)}} returns -∞ if {{tt|exp}} is a positive odd integer
* {{c|pow(-∞, exp)}} returns +∞ if {{tt|exp}} is a positive non-integer or even integer
* {{c|pow(+∞, exp)}} returns +0 for any negative {{tt|exp}}
* {{c|pow(+∞, exp)}} returns +∞ for any positive {{tt|exp}}
* except where specified above, if any argument is NaN, NaN is returned

===Notes===
{{tt|pow(float, int)}} returns {{c|float}} until C++11 (per overload 4) but returns {{tt|double}} since C++11 (per overload 7)

Although {{tt|std::pow}} cannot be used to obtain a root of a negative number, {{lc|std::cbrt}} is provided for the common case where {{tt|exp}} is 1/3

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;
#include &lt;cstring&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    // typical usage
    std::cout &lt;&lt; &quot;pow(2, 10) = &quot; &lt;&lt; std::pow(2,10) &lt;&lt; '\n'
              &lt;&lt; &quot;pow(2, 0.5) = &quot; &lt;&lt; std::pow(2,0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;pow(-2, -3) = &quot; &lt;&lt; std::pow(-2,-3) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;pow(-1, NAN) = &quot; &lt;&lt; std::pow(-1,NAN) &lt;&lt; '\n'
              &lt;&lt; &quot;pow(+1, NAN) = &quot; &lt;&lt; std::pow(+1,NAN) &lt;&lt; '\n'
              &lt;&lt; &quot;pow(INFINITY, 2) = &quot; &lt;&lt; std::pow(INFINITY, 2) &lt;&lt; '\n'
              &lt;&lt; &quot;pow(INFINITY, -1) = &quot; &lt;&lt; std::pow(INFINITY, -1) &lt;&lt; '\n';
    // error handling 
    errno = 0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;pow(-1, 1/3) = &quot; &lt;&lt; std::pow(-1, 1.0/3) &lt;&lt; '\n';
    if(errno == EDOM) std::cout &lt;&lt; &quot;    errno == EDOM &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID)) std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;

    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;pow(-0, -3) = &quot; &lt;&lt; std::pow(-0.0, -3) &lt;&lt; '\n';
    if(std::fetestexcept(FE_DIVBYZERO)) std::cout &lt;&lt; &quot;    FE_DIVBYZERO raised\n&quot;;
}
|p=true
|output=
pow(2, 10) = 1024
pow(2, 0.5) = 1.41421
pow(-2, -3) = -0.125
pow(-1, NAN) = nan
pow(+1, NAN) = 1
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0
pow(-1, 1/3) = -nan
    errno == EDOM Numerical argument out of domain
    FE_INVALID raised
pow(-0, -3) = -inf
    FE_DIVBYZERO raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc sqrt}}
{{dsc inc | cpp/numeric/math/dsc cbrt}}
{{dsc inc | cpp/numeric/math/dsc hypot}}
{{dsc inc | cpp/numeric/complex/dsc pow}}
{{dsc inc | cpp/numeric/valarray/dsc pow}}
{{dsc see c | c/numeric/math/pow}}
{{dsc end}}

[[de:cpp/numeric/math/pow]]
[[es:cpp/numeric/math/pow]]
[[fr:cpp/numeric/math/pow]]
[[it:cpp/numeric/math/pow]]
[[ja:cpp/numeric/math/pow]]
[[pl:cpp/numeric/math/pow]]
[[pt:cpp/numeric/math/pow]]
[[ru:cpp/numeric/math/pow]]
[[zh:cpp/numeric/math/pow]]</text>
      <sha1>dt6qf2vfc995hnztcfh9md632ef6hr2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/remainder</title>
    <ns>0</ns>
    <id>2645</id>
    <revision>
      <id>87674</id>
      <parentid>71792</parentid>
      <timestamp>2016-09-21T17:46:39Z</timestamp>
      <contributor>
        <ip>152.2.130.155</ip>
      </contributor>
      <comment>added missing )</comment>
      <text xml:space="preserve" bytes="4657">{{cpp/title|remainder}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       remainder( float x, float y );
}}
{{dcl | since=c++11 |num=2|
double      remainder( double x, double y );
}}
{{dcl | since=c++11 |num=3|
long double remainder( long double x, long double y );
}}
{{dcl | since=c++11 |num=4|
Promoted    remainder( Arithmetic1 x, Arithmetic2 y );
}}
{{dcl end}}

@1-3@ Computes the IEEE remainder of the floating point division operation {{c|x/y}}.
@4@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by 1-3. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.

The IEEE floating-point remainder of the division operation {{c|x/y}} calculated by this function is exactly the value {{c|x - n*y}}, where the value {{tt|n}} is the integral value nearest the exact value {{c|x/y}}. When {{math|{{!}}n-x/y{{!}} {{=}} ½}}, the value {{tt|n}} is chosen to be even.

In contrast to {{lc|std::fmod()}}, the returned value is not guaranteed to have the same sign as {{tt|x}}.

If the returned value is {{tt|0}}, it will have the same sign as {{tt|x}}.

===Parameters===
{{par begin}}
{{par | x, y | values of floating-point or [[cpp/types/is_integral|integral types]]}}
{{par end}}

===Return value===
If successful, returns the IEEE floating-point remainder of the division {{c|x/y}} as defined above.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result is returned.

If {{tt|y}} is zero, but the domain error does not occur, zero is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error may occur if {{tt|y}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* {{lc|FE_INEXACT}} is never raised, the result is always exact.
* If {{tt|x}} is ±∞ and {{tt|y}} is not NaN, NaN is returned and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±0 and {{tt|x}} is not NaN, NaN is returned  and {{lc|FE_INVALID}} is raised
* If either argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/remainder.html POSIX requires] that a domain error occurs if {{tt|x}} is infinite or {{tt|y}} is zero.

{{lc|std::fmod}}, but not {{tt|std::remainder}} is useful for doing silent wrapping of floating-point types to unsigned integer types: {{c|1=(0.0 &lt;= (y = std::fmod( std::rint(x), 65536.0 )) ? y : 65536.0 + y)}} is in the range {{tt|[-0.0 .. 65535.0]}}, which corresponds to {{c|unsigned short}}, but {{c|std::remainder(std::rint(x), 65536.0)}} is in the range {{tt|[-32767.0, +32768.0]}}, which is outside of the range of {{c|signed short}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;remainder(+5.1, +3.0) = &quot; &lt;&lt; std::remainder(5.1,3) &lt;&lt; '\n'
              &lt;&lt; &quot;remainder(-5.1, +3.0) = &quot; &lt;&lt; std::remainder(-5.1,3) &lt;&lt; '\n'
              &lt;&lt; &quot;remainder(+5.1, -3.0) = &quot; &lt;&lt; std::remainder(5.1,-3) &lt;&lt; '\n'
              &lt;&lt; &quot;remainder(-5.1, -3.0) = &quot; &lt;&lt; std::remainder(-5.1,-3) &lt;&lt; '\n';

    // special values
    std::cout &lt;&lt; &quot;remainder(-0.0, 1.0) = &quot; &lt;&lt; std::remainder(-0.0, 1) &lt;&lt; '\n'
              &lt;&lt; &quot;remainder(5.1, Inf) = &quot; &lt;&lt; std::remainder(5.1, INFINITY) &lt;&lt; '\n';

    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;remainder(+5.1, 0) = &quot; &lt;&lt; std::remainder(5.1, 0) &lt;&lt; '\n';
    if(fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
remainder(+5.1, +3.0) = -0.9
remainder(-5.1, +3.0) = 0.9
remainder(+5.1, -3.0) = -0.9
remainder(-5.1, -3.0) = 0.9
remainder(-0.0, 1.0) = -0
remainder(5.1, Inf) = 5.1
remainder(+5.1, 0) = -nan
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc div}}
{{dsc inc | cpp/numeric/math/dsc fmod}}
{{dsc inc | cpp/numeric/math/dsc remquo}}
{{dsc see c | c/numeric/math/remainder}}
{{dsc end}}

[[de:cpp/numeric/math/remainder]]
[[es:cpp/numeric/math/remainder]]
[[fr:cpp/numeric/math/remainder]]
[[it:cpp/numeric/math/remainder]]
[[ja:cpp/numeric/math/remainder]]
[[ko:cpp/numeric/math/remainder]]
[[pt:cpp/numeric/math/remainder]]
[[ru:cpp/numeric/math/remainder]]
[[zh:cpp/numeric/math/remainder]]</text>
      <sha1>izdfkc5ymo4u0hca6cgho4y0vrp31x1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/remquo</title>
    <ns>0</ns>
    <id>2652</id>
    <revision>
      <id>89353</id>
      <parentid>82899</parentid>
      <timestamp>2017-01-19T17:21:15Z</timestamp>
      <contributor>
        <ip>155.56.68.218</ip>
      </contributor>
      <comment>Correction in example: The implementation of cos_pi_x_smart was wrong.</comment>
      <text xml:space="preserve" bytes="6297">{{cpp/title|remquo}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       remquo( float x, float y, int* quo );
}}
{{dcl | since=c++11 |num=2|
double      remquo( double x, double y, int* quo );
}}
{{dcl | since=c++11 |num=3|
long double remquo( long double x, long double y, int* quo );
}}
{{dcl | since=c++11 | num=4|
Promoted    remquo( Arithmetic1 x, Arithmetic2 y, int* quo );
}}
{{dcl end}}

@1-3@ Computes the floating-point remainder of the division operation {{c|x/y}} as the {{lc|std::remainder()}} function does.  Additionally, the sign and at least the three of the last bits of {{c|x/y}} will be stored in {{c|quo}}, sufficient to determine the octant of the result within a period.
@4@ A set of overloads or a function template for all combinations of arguments of [[cpp/types/is_arithmetic|arithmetic type]] not covered by 1-3. If any non-pointer argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any other non-pointer argument is {{c|long double}}, then the return type is {{c|long double}}, otherwise it is {{c|double}}.

===Parameters===
{{par begin}}
{{par | x, y | floating point values}}
{{par | quo | pointer to an integer value to store the sign and some bits of {{c|x/y}} }}
{{par end}}

===Return value===
If successful, returns the floating-point remainder of the division {{c|x/y}} as defined in {{lc|std::remainder}}, and stores, in {{c|*quo}}, the sign and at least three of the least significant bits of {{c|x/y}} (formally, stores a value whose sign is the sign of {{c|x/y}} and whose magnitude is congruent {{math|modulo 2{{su|p=n}}}} to the magnitude of the integral quotient of {{c|x/y}}, where {{math|n}} is an implementation-defined integer greater than or equal to {{math|3}}).

If {{tt|y}} is zero, the value stored in {{c|*quo}} is unspecified.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result is returned if subnormals are supported.

If {{tt|y}} is zero, but the domain error does not occur, zero is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

Domain error may occur if {{tt|y}} is zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* {{lc|FE_INEXACT}} is never raised
* If {{tt|x}} is ±∞ and {{tt|y}} is not NaN, NaN is returned and {{lc|FE_INVALID}} is raised
* If {{tt|y}} is ±0 and {{tt|x}} is not NaN, NaN is returned  and {{lc|FE_INVALID}} is raised
* If either {{tt|x}} or {{tt|y}} is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/remquo.html POSIX requires] that a domain error occurs if {{tt|x}} is infinite or {{tt|y}} is zero.

This function is useful when implementing periodic functions with the period exactly representable as a floating-point value: when calculating {{math|sin(πx)}} for a very large {{tt|x}}, calling {{lc|std::sin}} directly may result in a large error, but if the function argument is first reduced with {{tt|std::remquo}}, the low-order bits of the quotient may be used to determine the sign and the octant of the result within the period, while the remainder may be used to calculate the value with high precision. 

On some platforms this operation is supported by hardware (and, for example, on Intel CPUs, {{tt|FPREM1}} leaves exactly 3 bits of precision in the quotient when complete).

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
const double pi = std::acos(-1);
double cos_pi_x_naive(double x) { return std::cos(pi * x); }
// the period is 2, values are (0;0.5) positive, (0.5;1.5) negative, (1.5,2) positive
double cos_pi_x_smart(double x)
{
    int quadrant;
    double rem = std::remquo(x, 1, &amp;quadrant);
    quadrant = (unsigned)quadrant % 2;  // The period is 2.
    switch(quadrant) {
        case 0: return std::cos(pi * rem);
        case 1: return -std::cos(pi * rem);
    };
}
int main()
{
    std::cout &lt;&lt; &quot;cos(pi * 0.25) = &quot; &lt;&lt; cos_pi_x_naive(0.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 1.25) = &quot; &lt;&lt; cos_pi_x_naive(1.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 2.25) = &quot; &lt;&lt; cos_pi_x_naive(2.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 0.25) = &quot; &lt;&lt; cos_pi_x_smart(0.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 1.25) = &quot; &lt;&lt; cos_pi_x_smart(1.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 2.25) = &quot; &lt;&lt; cos_pi_x_smart(2.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 1000000000000.25) = &quot;
              &lt;&lt; cos_pi_x_naive(1000000000000.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 1000000000001.25) = &quot;
              &lt;&lt; cos_pi_x_naive(1000000000001.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 1000000000000.25) = &quot;
              &lt;&lt; cos_pi_x_smart(1000000000000.25) &lt;&lt; '\n'
              &lt;&lt; &quot;cos(pi * 1000000000001.25) = &quot;
              &lt;&lt; cos_pi_x_smart(1000000000001.25) &lt;&lt; '\n';
    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
    int quo;
    std::cout &lt;&lt; &quot;remquo(+Inf, 1) = &quot; &lt;&lt; std::remquo(INFINITY, 1, &amp;quo) &lt;&lt; '\n';
    if(fetestexcept(FE_INVALID)) std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
cos(pi * 0.25) = 0.707107
cos(pi * 1.25) = -0.707107
cos(pi * 2.25) = 0.707107
cos(pi * 0.25) = 0.707107
cos(pi * 1.25) = -0.707107
cos(pi * 2.25) = 0.707107
cos(pi * 1000000000000.25) = 0.707123
cos(pi * 1000000000001.25) = -0.707117
cos(pi * 1000000000000.25) = 0.707107
cos(pi * 1000000000001.25) = -0.707107 &lt;!-- note: this is exact output from Intel C++ on Linux, Oracle and GNU C++ on sparc, and IBM and GNU C++ compilers on a power platform. Do not replace with the incorrect output obtained from GNU C++ on Linux --&gt;
remquo(+Inf, 1) = -nan
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc div}}
{{dsc inc | cpp/numeric/math/dsc fmod}}
{{dsc inc | cpp/numeric/math/dsc remainder}}
{{dsc see c | c/numeric/math/remquo}}
{{dsc end}}

[[de:cpp/numeric/math/remquo]]
[[es:cpp/numeric/math/remquo]]
[[fr:cpp/numeric/math/remquo]]
[[it:cpp/numeric/math/remquo]]
[[ja:cpp/numeric/math/remquo]]
[[pt:cpp/numeric/math/remquo]]
[[ru:cpp/numeric/math/remquo]]
[[zh:cpp/numeric/math/remquo]]</text>
      <sha1>nkw1znaxeh63ujv3cn1hda68snf1pym</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/rint</title>
    <ns>0</ns>
    <id>3743</id>
    <revision>
      <id>86481</id>
      <parentid>86480</parentid>
      <timestamp>2016-07-03T05:13:38Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>rvv</comment>
      <text xml:space="preserve" bytes="6817">{{cpp/title|rint | lrint | llrint }}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
float rint( float arg );
}}
{{dcl | since=c++11 | num=2|
double rint( double arg );
}}
{{dcl | since=c++11 | num=3|
long double rint( long double arg );
}}
{{dcl | since=c++11 | num=4|
double rint( Integral arg );
}}
{{dcl | since=c++11 | num=5|
long lrint( float arg );
}}
{{dcl | since=c++11 | num=6|
long lrint( double arg );
}}
{{dcl | since=c++11 | num=7|
long lrint( long double arg );
}}
{{dcl | since=c++11 | num=8|
long lrint( Integral arg );
}}
{{dcl | since=c++11 | num=9|
long long llrint( float arg );
}}
{{dcl | since=c++11 | num=10|
long long llrint( double arg );
}}
{{dcl | since=c++11 | num=11|
long long llrint( long double arg );
}}
{{dcl | since=c++11 | num=12|
long long llrint( Integral arg );
}}
{{dcl end}}

@1-3@ Rounds the floating-point argument {{tt|arg}} to an integer value (in floating-point format), using the [[cpp/numeric/fenv/FE_round|current rounding mode]].
@5-7, 9-11@ Rounds the floating-point argument {{tt|arg}} to an integer value, using the [[cpp/numeric/fenv/FE_round|current rounding mode]]. 
@4,8,12@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2,6,10}}, respectively (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the nearest integer value to {{tt|arg}}, according to the [[cpp/numeric/fenv/FE_round|current rounding mode]], is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the result of {{tt|std::lrint}} or {{tt|std::llrint}} is outside the range representable by the return type, a domain error or a range error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
: For the {{tt|std::rint}} function:
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned
: For {{tt|std::lrint}} and {{tt|std::llrint}} functions:
* If {{tt|arg}} is ±∞, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If the result of the rounding is outside the range of the return type, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If {{tt|arg}} is NaN, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/lrint.html POSIX specifies] that all cases where {{tt|std::lrint}} or {{tt|std::llrint}} raise {{lc|FE_INEXACT}} are domain errors.

As specified in [[cpp/numeric/math/math_errhandling|math_errhandling]], {{lc|FE_INEXACT}} may be (but isn't required to be on non-IEEE floating-point platforms) raised by {{tt|std::rint}} when rounding a non-integer finite value.

The only difference between {{tt|std::rint}} and {{lc|std::nearbyint}} is that {{lc|std::nearbyint}} never raises {{lc|FE_INEXACT}}.

The largest representable floating-point values are exact integers in all standard floating-point formats, so {{tt|std::rint}} never overflows on its own; however the result may overflow any integer type (including {{lc|std::intmax_t}}), when stored in an integer variable.

If the current rounding mode is...
* {{lc|FE_DOWNWARD}}, then {{tt|std::rint}} is equivalent to {{lc|std::floor}}.
* {{lc|FE_UPWARD}}, then {{tt|std::rint}} is equivalent to {{lc|std::ceil}}.
* {{lc|FE_TOWARDZERO}}, then {{tt|std::rint}} is equivalent to {{lc|std::trunc}}
* {{lc|FE_TONEAREST}}, then {{tt|std::rint}} differs from {{lc|std::round}} in that halfway cases are rounded to even rather than away from zero.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;
#include &lt;climits&gt;
 
int main()
{
#pragma STDC FENV_ACCESS ON
    std::fesetround(FE_TONEAREST);
    std::cout &lt;&lt; &quot;rounding to nearest (halfway cases to even):\n&quot;
              &lt;&lt; &quot;rint(+2.3) = &quot; &lt;&lt; std::rint(2.3)
              &lt;&lt; &quot;  rint(+2.5) = &quot; &lt;&lt; std::rint(2.5)
              &lt;&lt; &quot;  rint(+3.5) = &quot; &lt;&lt; std::rint(3.5) &lt;&lt; '\n'
              &lt;&lt; &quot;rint(-2.3) = &quot; &lt;&lt; std::rint(-2.3)
              &lt;&lt; &quot;  rint(-2.5) = &quot; &lt;&lt; std::rint(-2.5)
              &lt;&lt; &quot;  rint(-3.5) = &quot; &lt;&lt; std::rint(-3.5) &lt;&lt; '\n';

    std::fesetround(FE_DOWNWARD);
    std::cout &lt;&lt; &quot;rounding down:\n&quot; 
              &lt;&lt; &quot;rint(+2.3) = &quot; &lt;&lt; std::rint(2.3)
              &lt;&lt; &quot;  rint(+2.5) = &quot; &lt;&lt; std::rint(2.5)
              &lt;&lt; &quot;  rint(+3.5) = &quot; &lt;&lt; std::rint(3.5) &lt;&lt; '\n'
              &lt;&lt; &quot;rint(-2.3) = &quot; &lt;&lt; std::rint(-2.3)
              &lt;&lt; &quot;  rint(-2.5) = &quot; &lt;&lt; std::rint(-2.5)
              &lt;&lt; &quot;  rint(-3.5) = &quot; &lt;&lt; std::rint(-3.5) &lt;&lt; '\n'
              &lt;&lt; &quot;rounding down with lrint\n&quot; 
              &lt;&lt; &quot;lrint(+2.3) = &quot; &lt;&lt; std::lrint(2.3)
              &lt;&lt; &quot;  lrint(+2.5) = &quot; &lt;&lt; std::lrint(2.5)
              &lt;&lt; &quot;  lrint(+3.5) = &quot; &lt;&lt; std::lrint(3.5) &lt;&lt; '\n'
              &lt;&lt; &quot;lrint(-2.3) = &quot; &lt;&lt; std::lrint(-2.3)
              &lt;&lt; &quot;  lrint(-2.5) = &quot; &lt;&lt; std::lrint(-2.5)
              &lt;&lt; &quot;  lrint(-3.5) = &quot; &lt;&lt; std::lrint(-3.5) &lt;&lt; '\n';
 
    std::cout &lt;&lt; &quot;lrint(-0.0) = &quot; &lt;&lt; std::lrint(-0.0)  &lt;&lt; '\n'
              &lt;&lt; &quot;lrint(-Inf) = &quot; &lt;&lt; std::lrint(-INFINITY) &lt;&lt; '\n';
 
    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;std::rint(0.1) = &quot; &lt;&lt; std::rint(.1) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INEXACT))
              std::cout &lt;&lt; &quot;    FE_INEXACT was raised\n&quot;;

    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;std::lrint(LONG_MIN-2048.0) = &quot;
              &lt;&lt; std::lrint(LONG_MIN-2048.0) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
              std::cout &lt;&lt; &quot;    FE_INVALID was raised\n&quot;;
}
 | p=true
 | output =
rounding to nearest (halfway cases to even): 
rint(+2.3) = 2  rint(+2.5) = 2  rint(+3.5) = 4
rint(-2.3) = -2  rint(-2.5) = -2  rint(-3.5) = -4
rounding down:
rint(+2.3) = 2  rint(+2.5) = 2  rint(+3.5) = 3
rint(-2.3) = -3  rint(-2.5) = -3  rint(-3.5) = -4
rounding down with lrint
lrint(+2.3) = 2  lrint(+2.5) = 2  lrint(+3.5) = 3
lrint(-2.3) = -3  lrint(-2.5) = -3  lrint(-3.5) = -4
lrint(-0.0) = 0
lrint(-Inf) = -9223372036854775808
std::rint(0.1) = 0
    FE_INEXACT was raised
std::lrint(LONG_MIN-2048.0) = -9223372036854775808
    FE_INVALID was raised
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc trunc}}
{{dsc inc | cpp/numeric/math/dsc nearbyint}}
{{dsc inc | cpp/numeric/fenv/dsc feround}}
{{dsc see c | c/numeric/math/rint}}
{{dsc end}}

[[de:cpp/numeric/math/rint]]
[[es:cpp/numeric/math/rint]]
[[fr:cpp/numeric/math/rint]]
[[it:cpp/numeric/math/rint]]
[[ja:cpp/numeric/math/rint]]
[[pt:cpp/numeric/math/rint]]
[[ru:cpp/numeric/math/rint]]
[[zh:cpp/numeric/math/rint]]</text>
      <sha1>f8zr24eqix7hrrpcdvh2o2bvytv2kpp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/round</title>
    <ns>0</ns>
    <id>1370</id>
    <revision>
      <id>88841</id>
      <parentid>71880</parentid>
      <timestamp>2016-12-15T09:35:25Z</timestamp>
      <contributor>
        <ip>178.3.57.147</ip>
      </contributor>
      <text xml:space="preserve" bytes="6315">{{cpp/title|round | lround | llround}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
float round( float arg );
}}
{{dcl | since=c++11 | num=2|
double round( double arg );
}}
{{dcl | since=c++11 | num=3|
long double round( long double arg );
}}
{{dcl | since=c++11 | num=4|
double round( Integral arg );
}}
{{dcl | since=c++11 | num=5|
long lround( float arg );
}}
{{dcl | since=c++11 | num=6|
long lround( double arg );
}}
{{dcl | since=c++11 | num=7|
long lround( long double arg );
}}
{{dcl | since=c++11 | num=8|
long lround( Integral arg );
}}
{{dcl | since=c++11 | num=9|
long long llround( float arg );
}}
{{dcl | since=c++11 | num=10|
long long llround( double arg );
}}
{{dcl | since=c++11 | num=11|
long long llround( long double arg );
}}
{{dcl | since=c++11 | num=12|
long long llround( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the nearest integer value to {{tt|arg}} (in floating-point format), rounding halfway cases away from zero, regardless of the current rounding mode.
@5-7, 9-11@ Computes the nearest integer value to {{tt|arg}} (in integer format), rounding halfway cases away from zero, regardless of the current rounding mode.
@4,8,12@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2), 6), or 10), respectively (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the nearest integer value to {{tt|arg}}, rounding halfway cases away from zero, is returned.

{{plot | left=Return value | bottom=Argument | math-round_away_zero.svg}}

If a domain error occurs, an implementation-defined value is returned

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the result of {{tt|std::lround}} or {{tt|std::llround}} is outside the range representable by the return type, a domain error or a range error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
: For the {{tt|std::round}} function:
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If {{tt|arg}} is NaN, NaN is returned
: For {{tt|std::lround}} and {{tt|std::llround}} functions:
* {{lc|FE_INEXACT}} is never raised
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If the result of the rounding is outside the range of the return type, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned
* If {{tt|arg}} is NaN, {{lc|FE_INVALID}} is raised and an implementation-defined value is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised by {{tt|std::round}} when rounding a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so {{tt|std::round}} never overflows on its own; however the result may overflow any integer type (including {{lc|std::intmax_t}}), when stored in an integer variable.

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/lround.html POSIX specifies] that all cases where {{tt|std::lround}} or {{tt|std::llround}} raise {{lc|FE_INEXACT}} are domain errors.

The {{c|double}} version of {{tt|std::round}} behaves as if implemented as follows:
{{source|1=
#include &lt;cmath&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
double round(double x)
{
    std::fenv_t save_env;
    std::feholdexcept(&amp;save_env);
    double result = std::rint(x);
    if (std::fetestexcept(FE_INEXACT)) {
        auto const save_round = std::fegetround();
        std::fesetround(FE_TOWARDZERO);
        result = std::rint(std::copysign(0.5 + std::fabs(x), x));
        std::fesetround(save_round);
    }
    std::feupdateenv(&amp;save_env);
    return result;
}
}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;
#include &lt;climits&gt;

#pragma STDC FENV_ACCESS ON

int main()
{
    // round
    std::cout &lt;&lt; &quot;round(+2.3) = &quot; &lt;&lt; std::round(2.3)
              &lt;&lt; &quot;  round(+2.5) = &quot; &lt;&lt; std::round(2.5)
              &lt;&lt; &quot;  round(+2.7) = &quot; &lt;&lt; std::round(2.7) &lt;&lt; '\n'
              &lt;&lt; &quot;round(-2.3) = &quot; &lt;&lt; std::round(-2.3)
              &lt;&lt; &quot;  round(-2.5) = &quot; &lt;&lt; std::round(-2.5)
              &lt;&lt; &quot;  round(-2.7) = &quot; &lt;&lt; std::round(-2.7) &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;round(-0.0) = &quot; &lt;&lt; std::round(-0.0)  &lt;&lt; '\n'
              &lt;&lt; &quot;round(-Inf) = &quot; &lt;&lt; std::round(-INFINITY) &lt;&lt; '\n';

    // lround
    std::cout &lt;&lt; &quot;lround(+2.3) = &quot; &lt;&lt; std::lround(2.3)
              &lt;&lt; &quot;  lround(+2.5) = &quot; &lt;&lt; std::lround(2.5)
              &lt;&lt; &quot;  lround(+2.7) = &quot; &lt;&lt; std::lround(2.7) &lt;&lt; '\n'
              &lt;&lt; &quot;lround(-2.3) = &quot; &lt;&lt; std::lround(-2.3)
              &lt;&lt; &quot;  lround(-2.5) = &quot; &lt;&lt; std::lround(-2.5)
              &lt;&lt; &quot;  lround(-2.7) = &quot; &lt;&lt; std::lround(-2.7) &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;lround(-0.0) = &quot; &lt;&lt; std::lround(-0.0)  &lt;&lt; '\n'
              &lt;&lt; &quot;lround(-Inf) = &quot; &lt;&lt; std::lround(-INFINITY) &lt;&lt; '\n';

    // error handling
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;std::lround(LONG_MAX+1.5) = &quot;
              &lt;&lt; std::lround(LONG_MAX+1.5) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
              std::cout &lt;&lt; &quot;    FE_INVALID was raised\n&quot;;
}
|p=true
|output=
round(+2.3) = 2  round(+2.5) = 3  round(+2.7) = 3
round(-2.3) = -2  round(-2.5) = -3  round(-2.7) = -3
round(-0.0) = -0
round(-Inf) = -inf
lround(+2.3) = 2  lround(+2.5) = 3  lround(+2.7) = 3
lround(-2.3) = -2  lround(-2.5) = -3  lround(-2.7) = -3
lround(-0.0) = 0
lround(-Inf) = -9223372036854775808
std::lround(LONG_MAX+1.5) = -9223372036854775808
    FE_INVALID was raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc floor}}
{{dsc inc | cpp/numeric/math/dsc ceil}}
{{dsc inc | cpp/numeric/math/dsc trunc}}
{{dsc see c | c/numeric/math/round}}
{{dsc end}}

[[de:cpp/numeric/math/round]]
[[es:cpp/numeric/math/round]]
[[fr:cpp/numeric/math/round]]
[[it:cpp/numeric/math/round]]
[[ja:cpp/numeric/math/round]]
[[pt:cpp/numeric/math/round]]
[[ru:cpp/numeric/math/round]]
[[zh:cpp/numeric/math/round]]</text>
      <sha1>f9fo8nq6dw0iikseuf57t62byo8kdtc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/scalbln</title>
    <ns>0</ns>
    <id>4043</id>
    <redirect title="cpp/numeric/math/scalbn" />
    <revision>
      <id>14899</id>
      <timestamp>2011-12-01T14:40:25Z</timestamp>
      <contributor>
        <username>1exec1</username>
        <id>305</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math/scalbn]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/numeric/math/scalbn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/scalbn</title>
    <ns>0</ns>
    <id>1371</id>
    <revision>
      <id>72169</id>
      <parentid>70496</parentid>
      <timestamp>2014-07-19T22:56:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail, example</comment>
      <text xml:space="preserve" bytes="4681">{{cpp/title|scalbn | scalbln}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
float       scalbn( float x, int exp );
}}
{{dcl | since=c++11 | num=2 |
double      scalbn( double x, int exp );
}}
{{dcl | since=c++11 | num=3 |
long double scalbn( long double x, int exp );
}}
{{dcl | since=c++11 |  num=4 |
double      scalbn( Integral x, int exp );
}}
{{dcl | since=c++11 |  num=5 |
float       scalbln( float x, long exp );
}}
{{dcl | since=c++11 | num=6 |
double      scalbln( double x, long exp );
}}
{{dcl | since=c++11 | num=7 |
long double scalbln( long double x, long exp );
}}
{{dcl | since=c++11 |  num=8 |
double      scalbln( Integral x, long exp );
}}
{{dcl end}}

@1-3,5-7@ Multiplies a floating point value {{tt|x}} by {{lc|FLT_RADIX}} raised to power {{tt|exp}}.
@4,8@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} or {{v|6}} (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | x | floating point value}}
{{par | exp | integer value}}
{{par end}}

===Return value===
If no errors occur, {{tt|x}} multiplied by {{lc|FLT_RADIX}} to the power of {{tt|arg}} ({{math|x&amp;times;FLT_RADIX{{su|p=exp}}}}) is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* Unless a range error occurs, {{lc|FE_INEXACT}} is never raised (the result is exact)
* Unless a range error occurs, [[cpp/numeric/fenv/FE_round|the current rounding mode]] is ignored
* If {{tt|x}} is ±0, it is returned, unmodified
* If {{tt|x}} is ±∞, it is returned, unmodified
* If {{tt|exp}} is 0, then {{tt|x}} is returned, unmodified
* If {{tt|x}} is NaN, NaN is returned

===Notes===
On binary systems (where {{lc|FLT_RADIX}} is {{tt|2}}), {{tt|std::scalbn}} is equivalent to {{lc|std::ldexp}}.

Although {{tt|std::scalbn}} and {{tt|std::scalbln}} are specified to perform the operation efficiently, on many implementations they are less efficient than multiplication or division by a power of two using arithmetic operators.

The function name stands for &quot;new scalb&quot;, where {{tt|scalb}} was an older non-standard function whose second argument had floating-point type.

The {{tt|scalbln}} function is provided because the factor required to scale from the smallest positive floating-point value to the largest finite one may be greater than 32767, the standard-guaranteed {{lc|INT_MAX}}. In particular, for the 80-bit {{tt|long double}}, the factor is 32828.

The GNU implementation does not set {{tt|errno}} regardless of {{tt|math_errhandling}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;scalbn(7, -4) = &quot; &lt;&lt; std::scalbn(7, -4) &lt;&lt; '\n'
              &lt;&lt; &quot;scalbn(1, -1074) = &quot; &lt;&lt; std::scalbn(1, -1074)
              &lt;&lt; &quot; (minimum positive subnormal double)\n&quot;
              &lt;&lt; &quot;scalbn(nextafter(1,0), 1024) = &quot;
              &lt;&lt; std::scalbn(std::nextafter(1,0), 1024)
              &lt;&lt; &quot; (largest finite double)\n&quot;;
    // special values
    std::cout &lt;&lt; &quot;scalbn(-0, 10) = &quot; &lt;&lt; std::scalbn(-0.0, 10) &lt;&lt; '\n'
              &lt;&lt; &quot;scalbn(-Inf, -1) = &quot; &lt;&lt; std::scalbn(-INFINITY, -1) &lt;&lt; '\n';
    // error handling
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;scalbn(1, 1024) = &quot; &lt;&lt; std::scalbn(1, 1024) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
|p=true
|output=
scalbn(7, -4) = 0.4375
scalbn(1, -1074) = 4.94066e-324 (minimum positive subnormal double)
scalbn(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)
scalbn(-0, 10) = -0
scalbn(-Inf, -1) = -inf
scalbn(1, 1024) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc frexp}}
{{dsc inc | cpp/numeric/math/dsc ldexp}}
{{dsc see c | c/numeric/math/scalbn}}
{{dsc end}}

[[de:cpp/numeric/math/scalbn]]
[[es:cpp/numeric/math/scalbn]]
[[fr:cpp/numeric/math/scalbn]]
[[it:cpp/numeric/math/scalbn]]
[[ja:cpp/numeric/math/scalbn]]
[[pt:cpp/numeric/math/scalbn]]
[[ru:cpp/numeric/math/scalbn]]
[[zh:cpp/numeric/math/scalbn]]</text>
      <sha1>07kzgglz7tlj3pby6yvamov2iaa9m4t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/signbit</title>
    <ns>0</ns>
    <id>1372</id>
    <revision>
      <id>87517</id>
      <parentid>73069</parentid>
      <timestamp>2016-09-02T13:08:28Z</timestamp>
      <contributor>
        <ip>72.37.140.38</ip>
      </contributor>
      <comment>signbit is not a macro in C++</comment>
      <text xml:space="preserve" bytes="1702">{{cpp/title|signbit}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1 |
bool signbit( float arg );
}}
{{dcl | since=c++11 | num=2 |
bool signbit( double arg );
}}
{{dcl | since=c++11 | num=3 |
bool signbit( long double arg );
}}
{{dcl | since=c++11 | num=4 |
bool signbit( Integral arg );
}}
{{dcl end}}

@1-3@ Determines if the given floating point number {{tt|arg}} is negative.
@4@ A set of overloads or a function template accepting the {{tt|from}} argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|2}} (the argument is cast to {{c|double}}). 

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===

{{c|true}} if {{tt|arg}} is negative, {{c|false}} otherwise

===Notes===
This function detects the sign bit of zeroes, infinities, and NaNs. Along with {{lc|std::copysign}}, std::signbit is one of the only two portable ways to examine the sign of a NaN.

===Examples===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;signbit(+0.0) = &quot; &lt;&lt; std::signbit(+0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;signbit(-0.0) = &quot; &lt;&lt; std::signbit(-0.0) &lt;&lt; '\n';
}
|output=
signbit(+0.0) = false
signbit(-0.0) = true
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fabs}}
{{dsc inc | cpp/numeric/math/dsc copysign}}
{{dsc see c | c/numeric/math/signbit}}
{{dsc end}}

[[de:cpp/numeric/math/signbit]]
[[es:cpp/numeric/math/signbit]]
[[fr:cpp/numeric/math/signbit]]
[[it:cpp/numeric/math/signbit]]
[[ja:cpp/numeric/math/signbit]]
[[pt:cpp/numeric/math/signbit]]
[[ru:cpp/numeric/math/signbit]]
[[zh:cpp/numeric/math/signbit]]</text>
      <sha1>3mh79p3avgkf5xw2301tz6d79goytz7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/sin</title>
    <ns>0</ns>
    <id>1373</id>
    <revision>
      <id>73089</id>
      <parentid>70458</parentid>
      <timestamp>2014-10-12T11:24:56Z</timestamp>
      <contributor>
        <ip>84.183.238.31</ip>
      </contributor>
      <text xml:space="preserve" bytes="3435">{{cpp/title|sin}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       sin( float arg );
}}
{{dcl |num=2|
double      sin( double arg );
}}
{{dcl |num=3|
long double sin( long double arg );
}}
{{dcl |num=4| since=c++11 |
double      sin( Integral arg );
}}
{{dcl end}}

Computes the sine of {{tt|arg}} (measured in radians).
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value representing angle in radians, of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the sine of {{tt|arg}} ({{math|sin(arg)}}) in the range {{math|[-1 ; +1]}}, is returned.

{{rev begin}}
{{rev|until=c++11|
The result may have little or no significance if the magnitude of {{tt|arg}} is large
}}
{{rev end}}

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, it is returned unmodified
* if the argument is ±∞, NaN is returned and {{lc|FE_INVALID}} is raised &lt;!-- not defined as a domain error in C or C++, although defined as a domain error in POSIX --&gt;
* if the argument is NaN, NaN is returned

===Notes===
The case where the argument is infinite is not specified to be a domain error in C (to which C++ defers), but it is defined as a [http://pubs.opengroup.org/onlinepubs/9699919799/functions/sin.html domain error in POSIX]

POSIX also specifies that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, an implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
const double pi = std::acos(-1);
int main()
{
    // typical usage
    std::cout &lt;&lt; &quot;sin(pi/6) = &quot; &lt;&lt; std::sin(pi/6) &lt;&lt; '\n'
              &lt;&lt; &quot;sin(pi/2) = &quot; &lt;&lt; std::sin(pi/2) &lt;&lt; '\n'
              &lt;&lt; &quot;sin(-3*pi/4) = &quot; &lt;&lt; std::sin(-3*pi/4) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;sin(+0) = &quot; &lt;&lt; std::sin(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;sin(-0) = &quot; &lt;&lt; std::sin(-0.0) &lt;&lt; '\n';
    // error handling 
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;sin(INFINITY) = &quot; &lt;&lt; std::sin(INFINITY) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID)) std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
sin(pi/6) = 0.5
sin(pi/2) = 1
sin(-3*pi/4) = -0.707107
sin(+0) = 0
sin(-0) = -0
sin(INFINITY) = -nan
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc cos}}
{{dsc inc | cpp/numeric/math/dsc tan}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/complex/dsc sin}}
{{dsc inc | cpp/numeric/valarray/dsc sin}}
{{dsc see c | c/numeric/math/sin}}
{{dsc end}}

[[de:cpp/numeric/math/sin]]
[[es:cpp/numeric/math/sin]]
[[fr:cpp/numeric/math/sin]]
[[it:cpp/numeric/math/sin]]
[[ja:cpp/numeric/math/sin]]
[[pl:cpp/numeric/math/sin]]
[[pt:cpp/numeric/math/sin]]
[[ru:cpp/numeric/math/sin]]
[[zh:cpp/numeric/math/sin]]</text>
      <sha1>dzkrxbu6o30t9ppnlct6yc98fg73hl4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/sinh</title>
    <ns>0</ns>
    <id>1374</id>
    <revision>
      <id>70554</id>
      <parentid>70553</parentid>
      <timestamp>2014-05-25T01:21:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/DBL_MAX/710.5</comment>
      <text xml:space="preserve" bytes="3186">{{cpp/title|sinh}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       sinh( float arg );
}}
{{dcl |num=2|
double      sinh( double arg );
}}
{{dcl |num=3|
long double sinh( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      sinh( Integral arg );
}}
{{dcl end}}

Computes the hyperbolic sine of {{tt|arg}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the hyperbolic sine of {{tt|arg}} ({{math|sinh(arg)}}, or {{math|{{mfrac|e{{su|p=arg}}-e{{su|p=-arg}}|2}}}}) is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0 or ±∞, it is returned unmodified
* if the argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/sinh.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, and implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;sinh(1) = &quot; &lt;&lt; std::sinh(1) &lt;&lt; '\n'
              &lt;&lt; &quot;sinh(-1) = &quot; &lt;&lt; std::sinh(-1) &lt;&lt; '\n'
              &lt;&lt; &quot;log(sinh(1)+cosh(1)) = &quot;
              &lt;&lt; std::log(std::sinh(1)+std::cosh(1)) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;sinh(+0) = &quot; &lt;&lt; std::sinh(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;sinh(-0) = &quot; &lt;&lt; std::sinh(-0.0) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;sinh(710.5) = &quot; &lt;&lt; std::sinh(710.5) &lt;&lt; '\n';
    if(errno == ERANGE)
        std::cout &lt;&lt; &quot;    errno == ERANGE: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_OVERFLOW))
        std::cout &lt;&lt; &quot;    FE_OVERFLOW raised\n&quot;;
}
|output=
sinh(1) = 1.1752
sinh(-1) = -1.1752
log(sinh(1)+cosh(1)) = 1
sinh(+0) = 0
sinh(-0) = -0
sinh(710.5) = inf
    errno == ERANGE: Numerical result out of range
    FE_OVERFLOW raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc cosh}}
{{dsc inc | cpp/numeric/math/dsc tanh}}
{{dsc inc | cpp/numeric/math/dsc asinh}}
{{dsc inc | cpp/numeric/complex/dsc sinh}}
{{dsc inc | cpp/numeric/valarray/dsc sinh}}
{{dsc see c | c/numeric/math/sinh}}
{{dsc end}}

[[de:cpp/numeric/math/sinh]]
[[es:cpp/numeric/math/sinh]]
[[fr:cpp/numeric/math/sinh]]
[[it:cpp/numeric/math/sinh]]
[[ja:cpp/numeric/math/sinh]]
[[pl:cpp/numeric/math/sinh]]
[[pt:cpp/numeric/math/sinh]]
[[ru:cpp/numeric/math/sinh]]
[[zh:cpp/numeric/math/sinh]]</text>
      <sha1>1vyijdiljc654zd4oum2cq9lqhlqq03</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/sqrt</title>
    <ns>0</ns>
    <id>1375</id>
    <revision>
      <id>90516</id>
      <parentid>82011</parentid>
      <timestamp>2017-02-28T16:51:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo pointed out by http://stackoverflow.com/a/42066517</comment>
      <text xml:space="preserve" bytes="3329">{{cpp/title|sqrt}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       sqrt( float arg );
}}
{{dcl |num=2|
double      sqrt( double arg );
}}
{{dcl |num=3|
long double sqrt( long double arg );
}}
{{dcl |num=4| since=c++11 |
double      sqrt( Integral arg );
}}
{{dcl end}}

Computes the square root of {{tt|arg}}.

@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | Value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, square root of {{tt|arg}} ({{math|{{mrad|arg}}}}), is returned.

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in {{lc|math_errhandling}}

Domain error occurs if {{tt|arg}} is less than zero.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is less than -0, {{lc|FE_INVALID}} is raised and NaN is returned.
* If the argument is +∞ or ±0, it is returned, unmodified.
* If the argument is NaN, NaN is returned

===Notes===
{{tt|std::sqrt}} is required by the IEEE standard to be exact. The only other operations required to be exact are the [[cpp/language/operator_arithmetic|arithmetic operators]] and the function {{lc|std::fma}}. After rounding to the return type (using default rounding mode), the result of {{tt|std::sqrt}} is indistinguishable from the infinitely precise result. In other words, the error is less than 0.5 ulp. Other functions, including {{lc|std::pow}}, are not so constrained.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;
#include &lt;cstring&gt;

#pragma STDC FENV_ACCESS ON

int main()
{
    // normal use
    std::cout &lt;&lt; &quot;sqrt(100) = &quot; &lt;&lt; std::sqrt(100) &lt;&lt; '\n'
              &lt;&lt; &quot;sqrt(2) = &quot; &lt;&lt; std::sqrt(2) &lt;&lt; '\n'
              &lt;&lt; &quot;golden ratio = &quot; &lt;&lt; (1+std::sqrt(5))/2 &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;sqrt(-0) = &quot; &lt;&lt; std::sqrt(-0.0) &lt;&lt; '\n';
    // error handling
    errno = 0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;sqrt(-1.0) = &quot; &lt;&lt; std::sqrt(-1) &lt;&lt; '\n';
    if(errno == EDOM)
        std::cout &lt;&lt; &quot;    errno = EDOM &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
 | p=true
 | output=
sqrt(100) = 10
sqrt(2) = 1.41421
golden ratio = 1.61803
sqrt(-0) = -0
sqrt(-1.0) = -nan
    errno = EDOM Numerical argument out of domain
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc pow}}
{{dsc inc | cpp/numeric/math/dsc cbrt}}
{{dsc inc | cpp/numeric/math/dsc hypot}}
{{dsc inc | cpp/numeric/complex/dsc sqrt}}
{{dsc inc | cpp/numeric/valarray/dsc sqrt}}
{{dsc see c | c/numeric/math/sqrt}}
{{dsc end}}

[[de:cpp/numeric/math/sqrt]]
[[es:cpp/numeric/math/sqrt]]
[[fr:cpp/numeric/math/sqrt]]
[[it:cpp/numeric/math/sqrt]]
[[ja:cpp/numeric/math/sqrt]]
[[pl:cpp/numeric/math/sqrt]]
[[pt:cpp/numeric/math/sqrt]]
[[ru:cpp/numeric/math/sqrt]]
[[zh:cpp/numeric/math/sqrt]]</text>
      <sha1>tgwgqqfbic4i6wgqqwbvi620g62ni3g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/tan</title>
    <ns>0</ns>
    <id>1376</id>
    <revision>
      <id>73248</id>
      <parentid>70512</parentid>
      <timestamp>2014-10-20T02:41:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on the impossibility of the poles</comment>
      <text xml:space="preserve" bytes="3445">{{cpp/title|tan}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       tan( float arg );
}}
{{dcl |num=2|
double      tan( double arg );
}}
{{dcl |num=3|
long double tan( long double arg );
}}
{{dcl |num=4| since=c++11 |
double      tan( Integral arg );
}}
{{dcl end}}

Computes the tangent of {{tt|arg}} (measured in radians).
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value representing angle in radians, of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the tangent of {{tt|arg}} ({{math|tan(arg)}}) is returned.

{{rev begin}}
{{rev|until=c++11|
The result may have little or no significance if the magnitude of {{tt|arg}} is large
}}
{{rev end}}

If a domain error occurs, an implementation-defined value is returned (NaN where supported)

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[c/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, it is returned unmodified
* if the argument is ±∞, NaN is returned and {{lc|FE_INVALID}} is raised
* if the argument is NaN, NaN is returned

===Notes===
The case where the argument is infinite is not specified to be a domain error in C (to which C++ defers), but it is defined as a [http://pubs.opengroup.org/onlinepubs/9699919799/functions/tan.html domain error in POSIX]

The function has mathematical poles at {{math|π(1/2 + n)}}; however no common floating-point representation is able to represent π/2 exactly, thus there is no value of the argument for which a pole error occurs.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cfenv&gt;

#pragma STDC FENV_ACCESS ON
const double pi = std::acos(-1);
int main()
{
    // typical usage
    std::cout &lt;&lt; &quot;tan  (pi/4) = &quot; &lt;&lt; std::tan(  pi/4) &lt;&lt; '\n' // 45 deg.
              &lt;&lt; &quot;tan(3*pi/4) = &quot; &lt;&lt; std::tan(3*pi/4) &lt;&lt; '\n' // 135 deg
              &lt;&lt; &quot;tan(5*pi/4) = &quot; &lt;&lt; std::tan(5*pi/4) &lt;&lt; '\n' // -135 deg
              &lt;&lt; &quot;tan(7*pi/4) = &quot; &lt;&lt; std::tan(7*pi/4) &lt;&lt; '\n'; // -45 deg
    // special values
    std::cout &lt;&lt; &quot;tan(+0) = &quot; &lt;&lt; std::tan(0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;tan(-0) = &quot; &lt;&lt; std::tan(-0.0) &lt;&lt; '\n';
    // error handling 
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;tan(INFINITY) = &quot; &lt;&lt; std::tan(INFINITY) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID)) std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
tan  (pi/4) = 1
tan(3*pi/4) = -1
tan(5*pi/4) = 1
tan(7*pi/4) = -1
tan(+0) = 0
tan(-0) = -0
tan(INFINITY) = -nan
    FE_INVALID raised
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc sin}}
{{dsc inc | cpp/numeric/math/dsc cos}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/complex/dsc tan}}
{{dsc inc | cpp/numeric/valarray/dsc tan}}
{{dsc see c | c/numeric/math/tan}}
{{dsc end}}

[[de:cpp/numeric/math/tan]]
[[es:cpp/numeric/math/tan]]
[[fr:cpp/numeric/math/tan]]
[[it:cpp/numeric/math/tan]]
[[ja:cpp/numeric/math/tan]]
[[pl:cpp/numeric/math/tan]]
[[pt:cpp/numeric/math/tan]]
[[ru:cpp/numeric/math/tan]]
[[zh:cpp/numeric/math/tan]]</text>
      <sha1>tkt27s27yzpg0vp5xwxl93a16w46lqm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/tanh</title>
    <ns>0</ns>
    <id>1377</id>
    <revision>
      <id>70566</id>
      <parentid>70564</parentid>
      <timestamp>2014-05-25T02:57:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="2670">{{cpp/title|tanh}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl |num=1|
float       tanh( float arg );
}}
{{dcl |num=2|
double      tanh( double arg );
}}
{{dcl |num=3|
long double tanh( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      tanh( Integral arg );
}}
{{dcl end}}

Computes the hyperbolic tangent of {{tt|arg}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the hyperbolic tangent of {{tt|arg}} ({{math|tanh(arg)}}, or {{math|{{mfrac|e{{su|p=arg}}-e{{su|p=-arg}}|e{{su|p=arg}}+e{{su|p=-arg}}}}}}) is returned.

If a range error occurs due to underflow, the correct result (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* if the argument is ±0, ±0 is returned
* If the argument is ±∞, ±1 is returned
* if the argument is NaN, NaN is returned

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/tanh.html POSIX specifies] that in case of underflow, {{tt|arg}} is returned unmodified, and if that is not supported, and implementation-defined value no greater than DBL_MIN, FLT_MIN, and LDBL_MIN is returned.

===Examples===
{{example|
|code=#include &lt;iostream&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; &quot;tanh(1) = &quot; &lt;&lt; std::tanh(1) &lt;&lt; '\n'
              &lt;&lt; &quot;tanh(-1) = &quot; &lt;&lt; std::tanh(-1) &lt;&lt; '\n'
              &lt;&lt; &quot;tanh(0.1)*sinh(0.2)-cosh(0.2) = &quot;
              &lt;&lt; std::tanh(0.1) * std::sinh(0.2) - std::cosh(0.2) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;tanh(+0) = &quot; &lt;&lt; std::tanh(+0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;tanh(-0) = &quot; &lt;&lt;  std::tanh(-0.0) &lt;&lt; '\n';
}
|output=
tanh(1) = 0.761594
tanh(-1) = -0.761594
tanh(0.1)*sinh(0.2)-cosh(0.2) = -1
tanh(+0) = 0
tanh(-0) = -0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc sinh}}
{{dsc inc | cpp/numeric/math/dsc cosh}}
{{dsc inc | cpp/numeric/math/dsc atanh}}
{{dsc inc | cpp/numeric/complex/dsc tanh}}
{{dsc inc | cpp/numeric/valarray/dsc tanh}}
{{dsc see c | c/numeric/math/tanh}}
{{dsc end}}

[[de:cpp/numeric/math/tanh]]
[[es:cpp/numeric/math/tanh]]
[[fr:cpp/numeric/math/tanh]]
[[it:cpp/numeric/math/tanh]]
[[ja:cpp/numeric/math/tanh]]
[[pl:cpp/numeric/math/tanh]]
[[pt:cpp/numeric/math/tanh]]
[[ru:cpp/numeric/math/tanh]]
[[zh:cpp/numeric/math/tanh]]</text>
      <sha1>cpsbk2uy1724wwc388fi7ncu1p5iqwi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/tgamma</title>
    <ns>0</ns>
    <id>2901</id>
    <revision>
      <id>83322</id>
      <parentid>71183</parentid>
      <timestamp>2016-01-31T16:51:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>seealso beta</comment>
      <text xml:space="preserve" bytes="4565">{{cpp/title|tgamma}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 |num=1|
float       tgamma( float arg );
}}
{{dcl | since=c++11 |num=2|
double      tgamma( double arg );
}}
{{dcl | since=c++11 |num=3|
long double tgamma( long double arg );
}}
{{dcl | since=c++11 |num=4|
double      tgamma( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the [[enwiki:Gamma function|gamma function]] of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, the value of the gamma function of {{tt|arg}}, that is {{math|{{minteg|0|∞|''t''{{su|p=arg-1}} {{mexp|-t}} d''t''}}}}, is returned

If a domain error occurs, an implementation-defined value (NaN where supported) is returned.

If a pole error occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to overflow occurs, {{tt|±HUGE_VAL}}, {{tt|±HUGE_VALF}}, or {{tt|±HUGE_VALL}} is returned.

If a range error due to underflow occurs, the correct value (after rounding) is returned.

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If {{tt|arg}} is zero or is an integer less than zero, a pole error or a domain error may occur.

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* If the argument is ±0, ±∞ is returned and {{lc|FE_DIVBYZERO}} is raised
* If the argument is a negative integer, NaN is returned and {{lc|FE_INVALID}} is raised
* If the argument is -∞, NaN is returned and {{lc|FE_INVALID}} is raised
* If the argument is +∞, +∞ is returned.
* If the argument is NaN, NaN is returned

===Notes===
If {{tt|arg}} is a natural number, {{c|std::tgamma(arg)}} is the factorial of {{tt|arg-1}}. Many implementations calculate the exact integer-domain factorial if the argument is a sufficiently small integer.

For IEEE-compatible type {{c|double}}, overflow happens if {{tt|0 &lt; x &lt; 1/DBL_MAX}} or if {{tt|x &gt; 171.7}}

[http://pubs.opengroup.org/onlinepubs/9699919799/functions/tgamma.html POSIX requires] that a pole error occurs if the argument is zero, but a domain error occurs when the argument is a negative integer. It also specifies that in future, domain errors may be replaced by pole errors for negative integer arguments (in which case the return value in those cases would change from NaN to ±∞).

There is a non-standard function named {{tt|gamma}} in various implementations, but its definition is inconsistent. For example, glibc and 4.2BSD version of {{tt|gamma}} executes {{tt|lgamma}}, but 4.4BSD version of {{tt|gamma}} executes {{tt|tgamma}}.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cerrno&gt;
#include &lt;cstring&gt;
#include &lt;cfenv&gt;
#pragma STDC FENV_ACCESS ON
int main()
{
    std::cout &lt;&lt; &quot;tgamma(10) = &quot; &lt;&lt; std::tgamma(10)
              &lt;&lt; &quot;, 9! = &quot; &lt;&lt; 2*3*4*5*6*7*8*9 &lt;&lt; '\n'
              &lt;&lt; &quot;tgamma(0.5) = &quot; &lt;&lt; std::tgamma(0.5)
              &lt;&lt; &quot;, sqrt(pi) = &quot; &lt;&lt; std::sqrt(std::acos(-1)) &lt;&lt; '\n';
    // special values
    std::cout &lt;&lt; &quot;tgamma(1) = &quot; &lt;&lt; std::tgamma(1) &lt;&lt; '\n'
              &lt;&lt; &quot;tgamma(+Inf) = &quot; &lt;&lt; std::tgamma(INFINITY) &lt;&lt; '\n';
    // error handling 
    errno=0; std::feclearexcept(FE_ALL_EXCEPT);
    std::cout &lt;&lt; &quot;tgamma(-1) = &quot; &lt;&lt; std::tgamma(-1) &lt;&lt; '\n';
    if(errno == EDOM)
        std::cout &lt;&lt; &quot;    errno == EDOM: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    if(std::fetestexcept(FE_INVALID))
        std::cout &lt;&lt; &quot;    FE_INVALID raised\n&quot;;
}
|p=true
|output=
tgamma(10) = 362880, 9! = 362880
tgamma(0.5) = 1.77245, sqrt(pi) = 1.77245
tgamma(1) = 1
tgamma(+Inf) = inf
tgamma(-1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc lgamma}}
{{dsc inc | cpp/experimental/special_math/dsc beta}}
{{dsc see c | c/numeric/math/tgamma}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/GammaFunction.html Weisstein, Eric W. &quot;Gamma Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/math/tgamma]]
[[es:cpp/numeric/math/tgamma]]
[[fr:cpp/numeric/math/tgamma]]
[[it:cpp/numeric/math/tgamma]]
[[ja:cpp/numeric/math/tgamma]]
[[pt:cpp/numeric/math/tgamma]]
[[ru:cpp/numeric/math/tgamma]]
[[zh:cpp/numeric/math/tgamma]]</text>
      <sha1>mhjlxyai90iffbt4y1rv9dqf5vw1c8u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/math/trunc</title>
    <ns>0</ns>
    <id>1378</id>
    <revision>
      <id>71877</id>
      <parentid>70504</parentid>
      <timestamp>2014-06-30T18:08:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+details, +example</comment>
      <text xml:space="preserve" bytes="2834">{{cpp/title|trunc}}
{{cpp/numeric/math/navbar}}
{{dcl begin}}
{{dcl header | cmath}}
{{dcl | since=c++11 | num=1|
float       trunc( float arg );
}}
{{dcl | since=c++11 | num=2|
double      trunc( double arg );
}}
{{dcl | since=c++11 | num=3|
long double trunc( long double arg );
}}
{{dcl | since=c++11 | num=4|
double      trunc( Integral arg );
}}
{{dcl end}}

@1-3@ Computes the nearest integer not greater in magnitude than {{tt|arg}}. 
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to 2) (the argument is cast to {{c|double}}).

===Parameters===
{{par begin}}
{{par | arg | floating point value}}
{{par end}}

===Return value===
If no errors occur, the nearest integer value not greater in magnitude than {{tt|arg}} (in other words, {{tt|arg}} rounded towards zero), is returned.

{{plot | left=Return value | bottom=Argument | math-trunc.svg}}

===Error handling===
Errors are reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

If the implementation supports IEEE floating-point arithmetic (IEC 60559),
* The current [[cpp/numeric/fenv/FE_round|rounding mode]] has no effect.
* If {{tt|arg}} is ±∞, it is returned, unmodified
* If {{tt|arg}} is ±0, it is returned, unmodified
* If arg is NaN, NaN is returned

===Notes===
{{lc|FE_INEXACT}} may be (but isn't required to be) raised when truncating a non-integer finite value.

The largest representable floating-point values are exact integers in all standard floating-point formats, so this function never overflows on its own; however the result may overflow any integer type (including {{lc|std::intmax_t}}), when stored in an integer variable.

The [[cpp/language/implicit_cast|implicit conversion]] from floating-point to integral types also rounds towards zero, but is limited to the values that can be represented by the target type.

===Example===
{{example
 | code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; std::fixed
              &lt;&lt; &quot;trunc(+2.7) = &quot; &lt;&lt; std::trunc(+2.7) &lt;&lt; '\n'
              &lt;&lt; &quot;trunc(-2.9) = &quot; &lt;&lt; std::trunc(-2.9) &lt;&lt; '\n'
              &lt;&lt; &quot;trunc(-0.0) = &quot; &lt;&lt; std::trunc(-0.0) &lt;&lt; '\n'
              &lt;&lt; &quot;trunc(-Inf) = &quot; &lt;&lt; std::trunc(-INFINITY) &lt;&lt; '\n';
}
 | p=true
 | output=
trunc(+2.7) = 2.000000
trunc(-2.9) = -2.000000
trunc(-0.0) = -0.000000
trunc(-Inf) = -inf
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc floor}}
{{dsc inc | cpp/numeric/math/dsc ceil}}
{{dsc inc | cpp/numeric/math/dsc round}}
{{dsc see c | c/numeric/math/trunc}}
{{dsc end}}

[[de:cpp/numeric/math/trunc]]
[[es:cpp/numeric/math/trunc]]
[[fr:cpp/numeric/math/trunc]]
[[it:cpp/numeric/math/trunc]]
[[ja:cpp/numeric/math/trunc]]
[[pt:cpp/numeric/math/trunc]]
[[ru:cpp/numeric/math/trunc]]
[[zh:cpp/numeric/math/trunc]]</text>
      <sha1>ghqgsja6czx765mx7hgeu6omccyunaf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random</title>
    <ns>0</ns>
    <id>2063</id>
    <revision>
      <id>86199</id>
      <parentid>85300</parentid>
      <timestamp>2016-06-24T18:26:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to RandomNumberBitGenerator and RandomNumberDistribution</comment>
      <text xml:space="preserve" bytes="10069">{{title|Pseudo-random number generation}}
{{cpp/numeric/random/navbar}}

The random number library provides classes that generate random and pseudo-random numbers.  These classes include:

* Random number engines (both pseudo-random number generators, which generate integer sequences with a uniform distribution, and true random number generators if available) 
* Random number distributions (e.g. [[cpp/numeric/random/uniform_int_distribution|uniform]], [[cpp/numeric/random/normal_distribution|normal]], or [[cpp/numeric/random/poisson_distribution|poisson distributions]]) which convert the output of random number engines into various statistical distributions 

Engines and distributions are designed to be used together to produce random values. All of the engines may be specifically seeded, serialized, and deserialized for use with repeatable simulators.

===Random number engines===

Random number engines generate pseudo-random numbers using seed data as entropy source. Several different classes of pseudo-random number generation algorithms are implemented as templates that can be customized.

The choice of which engine to use involves a number of tradeoffs:  the linear congruential engine is moderately fast and has a very small storage requirement for state.  The lagged Fibonacci generators are very fast even on processors without advanced arithmetic instruction sets, at the expense of greater state storage and sometimes less desirable spectral characteristics.  The Mersenne twister is slower and has greater state storage requirements but with the right parameters has the longest non-repeating sequence with the most desirable spectral characteristics (for a given definition of desirable).

Random number engines satisfy {{concept|UniformRandomBitGenerator}}

{{dsc begin}}
{{dsc header | random}}
{{dsc tclass | cpp/numeric/random/linear_congruential_engine | implements [[enwiki:Linear_congruential_generator | linear congruential]] algorithm | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/mersenne_twister_engine | implements [[enwiki:Mersenne_twister | Mersenne twister]] algorithm | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/subtract_with_carry_engine | implements subtract with carry (a [[enwiki:Lagged_Fibonacci_generator | lagged Fibonacci]]) algorithm | notes={{mark c++11}}}}
{{dsc end}}

====Random number engine adaptors====

Random number engine adaptors generate pseudo-random numbers using another random number engine as entropy source.  They are generally used to alter the spectral characteristics of the underlying engine.

{{dsc begin}}
{{dsc header | random}}
{{dsc tclass | cpp/numeric/random/discard_block_engine | discards some output of a random number engine | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/independent_bits_engine | packs the output of a random number engine into blocks of specified number of bits | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/shuffle_order_engine | delivers the output of a random number engine in different order | notes={{mark c++11}}}}
{{dsc end}}

====Predefined random number generators====

Several specific popular algorithms are predefined.

{{dsc begin}}
{{dsc header | random}}
{{dsc hitem | Type | Definition}}
{{dsc inc | cpp/numeric/random/dsc minstd_rand0}}
{{dsc inc | cpp/numeric/random/dsc minstd_rand}}
{{dsc inc | cpp/numeric/random/dsc mt19937}}
{{dsc inc | cpp/numeric/random/dsc mt19937_64}}
{{dsc inc | cpp/numeric/random/dsc ranlux24_base}}
{{dsc inc | cpp/numeric/random/dsc ranlux48_base}}
{{dsc inc | cpp/numeric/random/dsc ranlux24}}
{{dsc inc | cpp/numeric/random/dsc ranlux48}}
{{dsc inc | cpp/numeric/random/dsc knuth_b}}
{{dsc | {{tt|default_random_engine}} | ''implementation-defined''}}
{{dsc end}}

====Non-deterministic random numbers====

{{lc|std::random_device}} is a non-deterministic uniform random number generator, although implementations are allowed to implement {{lc|std::random_device}} using a pseudo-random number engine if there is no support for non-deterministic random number generation.

{{dsc begin}}
{{dsc inc | cpp/numeric/random/dsc random_device}}
{{dsc end}}

===Random number distributions===

A random number distribution post-processes the output of an random number engine in such a way that resulting output is distributed according to a defined statistical probability density function.

Random number distributions satisfy {{concept|RandomNumberDistribution}}

{{dsc begin}}
{{dsc header | random}}
{{dsc sep}}
{{dsc h2 | Uniform distributions}}
{{dsc inc | cpp/numeric/random/dsc uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/dsc uniform_real_distribution}}

{{dsc h2 | Bernoulli distributions}}
{{dsc class | cpp/numeric/random/bernoulli_distribution | produces {{c|bool}} values on a [[enwiki:Bernoulli_distribution | Bernoulli distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/binomial_distribution | produces integer values on a  [[enwiki:Binomial_distribution | binomial distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/negative_binomial_distribution | produces integer values on a  [[enwiki:Negative_binomial_distribution | negative binomial distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/geometric_distribution | produces integer values on a  [[enwiki:Geometric_distribution | geometric distribution]].  | notes={{mark c++11}}}}

{{dsc h2 | Poisson distributions}}
{{dsc tclass | cpp/numeric/random/poisson_distribution | produces integer values on a  [[enwiki:Poisson_distribution | poisson distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/exponential_distribution | produces real values on an  [[enwiki:Exponential_distribution | exponential distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/gamma_distribution | produces real values on an  [[enwiki:Gamma_distribution | gamma distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/weibull_distribution |produces real values on a  [[enwiki:Weibull_distribution | Weibull distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/extreme_value_distribution | produces real values on an  [[enwiki:Generalized_extreme_value_distribution | extreme value distribution]]. | notes={{mark c++11}}}}

{{dsc h2 | Normal distributions}}
{{dsc tclass | cpp/numeric/random/normal_distribution | produces real values on a  [[enwiki:Normal_distribution | standard normal (Gaussian) distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/lognormal_distribution | produces real values on a  [[enwiki:Lognormal_distribution | lognormal distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/chi_squared_distribution | produces real values on a  [[enwiki:Chi-squared_distribution | chi-squared distribution]].  | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/cauchy_distribution | produces real values on a  [[enwiki:Cauchy_distribution | Cauchy distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/fisher_f_distribution | produces real values on a  [[enwiki:F-distribution | Fisher's F-distribution]]. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/student_t_distribution | produces real values on a  [[enwiki:Student's t-distribution | Student's t-distribution]]. | notes={{mark c++11}}}}

{{dsc h2 | Sampling distributions}}
{{dsc tclass | cpp/numeric/random/discrete_distribution | produces random integers on a discrete distribution. | notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/piecewise_constant_distribution | produces real values distributed on constant subintervals.| notes={{mark c++11}}}}
{{dsc tclass | cpp/numeric/random/piecewise_linear_distribution | produces real values distributed on defined subintervals. | notes={{mark c++11}}}}
{{dsc end}}

===Utilities===

{{dsc begin}}
{{dsc header | random}}
{{dsc inc | cpp/numeric/random/dsc generate_canonical}}
{{dsc class | cpp/numeric/random/seed_seq | general-purpose bias-eliminating scrambled seed sequence generator | notes={{mark c++11}}}}
{{dsc end}}

===C random library===

In addition to the engines and distributions described above, the functions and constants from the C random library are also available though not recommended:

{{dsc begin}}
{{dsc header | cstdlib}}
{{dsc inc | cpp/numeric/random/dsc rand}}
{{dsc inc | cpp/numeric/random/dsc srand}}
{{dsc inc | cpp/numeric/random/dsc RAND_MAX}}
{{dsc end}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;
#include &lt;cmath&gt;

int main()
{
    // Seed with a real random value, if available
    std::random_device r;

    // Choose a random mean between 1 and 6
    std::default_random_engine e1(r());
    std::uniform_int_distribution&lt;int&gt; uniform_dist(1, 6);
    int mean = uniform_dist(e1);
    std::cout &lt;&lt; &quot;Randomly-chosen mean: &quot; &lt;&lt; mean &lt;&lt; '\n';
   
    // Generate a normal distribution around that mean
    std::seed_seq seed2{r(), r(), r(), r(), r(), r(), r(), r()}; 
    std::mt19937 e2(seed2);
    std::normal_distribution&lt;&gt; normal_dist(mean, 2);
 
    std::map&lt;int, int&gt; hist;
    for (int n = 0; n &lt; 10000; ++n) {
        ++hist[std::round(normal_dist(e2))];
    }
    std::cout &lt;&lt; &quot;Normal distribution around &quot; &lt;&lt; mean &lt;&lt; &quot;:\n&quot;;
    for (auto p : hist) {
        std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(1) &lt;&lt; std::setw(2)
                  &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; std::string(p.second/200, '*') &lt;&lt; '\n';
    }
}
 | output=
Randomly-chosen mean: 4
Normal distribution around 4:
-4 
-3 
-2 
-1 
 0 *
 1 ***
 2 ******
 3 ********
 4 *********
 5 ********
 6 ******
 7 ***
 8 *
 9 
10 
11 
12 
}}

===See also===
{{dsc begin}}
{{dsc see c | c/numeric/random | Pseudo-random number generation}}
{{dsc end}}

[[de:cpp/numeric/random]]
[[es:cpp/numeric/random]]
[[fr:cpp/numeric/random]]
[[it:cpp/numeric/random]]
[[ja:cpp/numeric/random]]
[[pt:cpp/numeric/random]]
[[ru:cpp/numeric/random]]
[[zh:cpp/numeric/random]]</text>
      <sha1>j7tmw5e990n9ag1kribatygt6izxbfj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/RAND MAX</title>
    <ns>0</ns>
    <id>3320</id>
    <revision>
      <id>58660</id>
      <parentid>50331</parentid>
      <timestamp>2013-06-01T06:19:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="781">{{title|RAND_MAX}}
{{cpp/numeric/random/navbar}}
{{ddcl | header=cstdlib |
#define RAND_MAX /*implementation defined*/
}}

Expands to an integer constant expression equal to the maximum value returned by the function {{lc|std::rand}}. This value is implementation dependent. It's guaranteed that this value is at least {{c|32767}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/dsc rand}}
{{dsc inc | cpp/numeric/random/dsc srand}}
{{dsc see c | c/numeric/random/RAND_MAX}}
{{dsc end}}

[[de:cpp/numeric/random/RAND MAX]]
[[es:cpp/numeric/random/RAND MAX]]
[[fr:cpp/numeric/random/RAND MAX]]
[[it:cpp/numeric/random/RAND MAX]]
[[ja:cpp/numeric/random/RAND MAX]]
[[pt:cpp/numeric/random/RAND MAX]]
[[ru:cpp/numeric/random/RAND MAX]]
[[zh:cpp/numeric/random/RAND MAX]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution</title>
    <ns>0</ns>
    <id>3911</id>
    <revision>
      <id>77816</id>
      <parentid>77815</parentid>
      <timestamp>2015-04-10T13:17:34Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2743">{{cpp/title|bernoulli_distribution}}
{{cpp/numeric/random/bernoulli_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
class bernoulli_distribution;
}}

Produces random boolean values, according to the discrete probability function. The probability of {{c|true}} is 

:{{math|P(b{{!}}p) {{=}}}}{{mparen|{||{{math|p}} if {{c|b {{==}} true }} | {{math|1 − p}} if {{c|b {{==}} false}}|style=text-align:right}}

{{tt|std::bernoulli_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|bool}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | bernoulli_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | bernoulli_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | bernoulli_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/bernoulli_distribution/dsc p}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | bernoulli_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | bernoulli_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | bernoulli_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | bernoulli_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | bernoulli_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // give &quot;true&quot; 1/4 of the time
    // give &quot;false&quot; 3/4 of the time
    std::bernoulli_distribution d(0.25);
 
    std::map&lt;bool, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[d(gen)];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; std::boolalpha &lt;&lt; std::setw(5) &lt;&lt; p.first
                  &lt;&lt; ' ' &lt;&lt; std::string(p.second/500, '*') &lt;&lt; '\n';
    }
}
 | p=true
 | output=
false ***************
 true ****
}}

===External links===
[http://mathworld.wolfram.com/BernoulliDistribution.html Weisstein, Eric W. &quot;Bernoulli Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/bernoulli distribution]]
[[es:cpp/numeric/random/bernoulli distribution]]
[[fr:cpp/numeric/random/bernoulli distribution]]
[[it:cpp/numeric/random/bernoulli distribution]]
[[ja:cpp/numeric/random/bernoulli distribution]]
[[pt:cpp/numeric/random/bernoulli distribution]]
[[ru:cpp/numeric/random/bernoulli distribution]]
[[zh:cpp/numeric/random/bernoulli distribution]]</text>
      <sha1>k9f630iaekp5h72cjrlkotkp8d7yosh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/bernoulli distribution</title>
    <ns>0</ns>
    <id>4919</id>
    <revision>
      <id>65146</id>
      <parentid>62888</parentid>
      <timestamp>2013-09-02T08:35:28Z</timestamp>
      <contributor>
        <ip>216.170.11.13</ip>
      </contributor>
      <comment>Per Standard 26.5.8.3.1 the default parameter is 0.5</comment>
      <text xml:space="preserve" bytes="1263">{{cpp/numeric/random/bernoulli_distribution/title|bernoulli_distribution}}
{{cpp/numeric/random/bernoulli_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit bernoulli_distribution( double p = 0.5 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit bernoulli_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs new distribution object. The first version uses {{tt|p}} as the distribution parameter, the second version uses {{tt|params}} as the distribution parameter.

===Parameters===
{{par begin}}
{{par | p | the ''p'' distribution parameter (probability of generating {{c|true}})}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]
[[es:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]
[[fr:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]
[[it:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]
[[ja:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]
[[pt:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]
[[ru:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]
[[zh:cpp/numeric/random/bernoulli distribution/bernoulli distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/max</title>
    <ns>0</ns>
    <id>4002</id>
    <revision>
      <id>50891</id>
      <parentid>44149</parentid>
      <timestamp>2013-06-01T03:44:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/max|bernoulli_distribution}}

[[de:cpp/numeric/random/bernoulli distribution/max]]
[[es:cpp/numeric/random/bernoulli distribution/max]]
[[fr:cpp/numeric/random/bernoulli distribution/max]]
[[it:cpp/numeric/random/bernoulli distribution/max]]
[[ja:cpp/numeric/random/bernoulli distribution/max]]
[[pt:cpp/numeric/random/bernoulli distribution/max]]
[[ru:cpp/numeric/random/bernoulli distribution/max]]
[[zh:cpp/numeric/random/bernoulli distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/min</title>
    <ns>0</ns>
    <id>3983</id>
    <revision>
      <id>50892</id>
      <parentid>44146</parentid>
      <timestamp>2013-06-01T03:44:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/min|bernoulli_distribution}}

[[de:cpp/numeric/random/bernoulli distribution/min]]
[[es:cpp/numeric/random/bernoulli distribution/min]]
[[fr:cpp/numeric/random/bernoulli distribution/min]]
[[it:cpp/numeric/random/bernoulli distribution/min]]
[[ja:cpp/numeric/random/bernoulli distribution/min]]
[[pt:cpp/numeric/random/bernoulli distribution/min]]
[[ru:cpp/numeric/random/bernoulli distribution/min]]
[[zh:cpp/numeric/random/bernoulli distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/operator cmp</title>
    <ns>0</ns>
    <id>4142</id>
    <revision>
      <id>79640</id>
      <parentid>50893</parentid>
      <timestamp>2015-07-16T05:11:45Z</timestamp>
      <contributor>
        <username>Cbadger</username>
        <id>4265</id>
      </contributor>
      <comment>The bernoulli_distribution class is not a template.</comment>
      <text xml:space="preserve" bytes="594">{{include page|cpp/numeric/random/non_template_distribution/operator_cmp|bernoulli_distribution}}

[[de:cpp/numeric/random/bernoulli distribution/operator cmp]]
[[es:cpp/numeric/random/bernoulli distribution/operator cmp]]
[[fr:cpp/numeric/random/bernoulli distribution/operator cmp]]
[[it:cpp/numeric/random/bernoulli distribution/operator cmp]]
[[ja:cpp/numeric/random/bernoulli distribution/operator cmp]]
[[pt:cpp/numeric/random/bernoulli distribution/operator cmp]]
[[ru:cpp/numeric/random/bernoulli distribution/operator cmp]]
[[zh:cpp/numeric/random/bernoulli distribution/operator cmp]]</text>
      <sha1>kx127ao9isx4uriot3kllv2s3ksfany</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4537</id>
    <revision>
      <id>79642</id>
      <parentid>50894</parentid>
      <timestamp>2015-07-16T05:16:07Z</timestamp>
      <contributor>
        <username>Cbadger</username>
        <id>4265</id>
      </contributor>
      <comment>The bernoulli_distribution class is not a template.</comment>
      <text xml:space="preserve" bytes="639">{{include page|cpp/numeric/random/non_template_distribution/operator_ltltgtgt|bernoulli_distribution}}

[[de:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/bernoulli distribution/operator ltltgtgt]]</text>
      <sha1>kvo2jj5g4rx974ne8bwb7h3avxxn4cw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/operator()</title>
    <ns>0</ns>
    <id>4100</id>
    <revision>
      <id>44141</id>
      <parentid>15049</parentid>
      <timestamp>2012-11-03T05:07:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="550">{{cpp/numeric/random/distribution/operator()|bernoulli_distribution}}

[[de:cpp/numeric/random/bernoulli distribution/operator()]]
[[es:cpp/numeric/random/bernoulli distribution/operator()]]
[[fr:cpp/numeric/random/bernoulli distribution/operator()]]
[[it:cpp/numeric/random/bernoulli distribution/operator()]]
[[ja:cpp/numeric/random/bernoulli distribution/operator()]]
[[pt:cpp/numeric/random/bernoulli distribution/operator()]]
[[ru:cpp/numeric/random/bernoulli distribution/operator()]]
[[zh:cpp/numeric/random/bernoulli distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/p</title>
    <ns>0</ns>
    <id>5005</id>
    <revision>
      <id>65147</id>
      <parentid>63369</parentid>
      <timestamp>2013-09-02T08:37:53Z</timestamp>
      <contributor>
        <ip>216.170.11.13</ip>
      </contributor>
      <comment>Per Standard 26.5.8.3.1 the default parameter is 0.5</comment>
      <text xml:space="preserve" bytes="960">{{cpp/numeric/random/bernoulli_distribution/title|p}}
{{cpp/numeric/random/bernoulli_distribution/navbar}}
{{ddcl | since=c++11 | 1=
double p() const;
}}

Returns the {{math|p}} parameter the distribution was constructed with. It defines the probability of generating {{c|true}}. The default value is {{c|0.5}}.

===Parameters===
(none)

===Return value===
Floating point value identifying the {{math|p}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | bernoulli_distribution}}
{{dsc end}}

[[de:cpp/numeric/random/bernoulli distribution/p]]
[[es:cpp/numeric/random/bernoulli distribution/p]]
[[fr:cpp/numeric/random/bernoulli distribution/p]]
[[it:cpp/numeric/random/bernoulli distribution/p]]
[[ja:cpp/numeric/random/bernoulli distribution/p]]
[[pt:cpp/numeric/random/bernoulli distribution/p]]
[[ru:cpp/numeric/random/bernoulli distribution/p]]
[[zh:cpp/numeric/random/bernoulli distribution/p]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/param</title>
    <ns>0</ns>
    <id>4123</id>
    <revision>
      <id>50895</id>
      <parentid>44118</parentid>
      <timestamp>2013-06-01T03:44:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/param|bernoulli_distribution}}

[[de:cpp/numeric/random/bernoulli distribution/param]]
[[es:cpp/numeric/random/bernoulli distribution/param]]
[[fr:cpp/numeric/random/bernoulli distribution/param]]
[[it:cpp/numeric/random/bernoulli distribution/param]]
[[ja:cpp/numeric/random/bernoulli distribution/param]]
[[pt:cpp/numeric/random/bernoulli distribution/param]]
[[ru:cpp/numeric/random/bernoulli distribution/param]]
[[zh:cpp/numeric/random/bernoulli distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/bernoulli distribution/reset</title>
    <ns>0</ns>
    <id>4095</id>
    <revision>
      <id>50896</id>
      <parentid>44113</parentid>
      <timestamp>2013-06-01T03:44:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/reset|bernoulli_distribution}}

[[de:cpp/numeric/random/bernoulli distribution/reset]]
[[es:cpp/numeric/random/bernoulli distribution/reset]]
[[fr:cpp/numeric/random/bernoulli distribution/reset]]
[[it:cpp/numeric/random/bernoulli distribution/reset]]
[[ja:cpp/numeric/random/bernoulli distribution/reset]]
[[pt:cpp/numeric/random/bernoulli distribution/reset]]
[[ru:cpp/numeric/random/bernoulli distribution/reset]]
[[zh:cpp/numeric/random/bernoulli distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution</title>
    <ns>0</ns>
    <id>3912</id>
    <revision>
      <id>75933</id>
      <parentid>75924</parentid>
      <timestamp>2015-02-05T03:02:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>concept link</comment>
      <text xml:space="preserve" bytes="3253">{{cpp/title|binomial_distribution}}
{{cpp/numeric/random/binomial_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class IntType = int &gt;
class binomial_distribution;
}}

Produces random non-negative integer values {{math|i}}, distributed according to discrete probability function:

:{{math|P(i{{!}}t,p) {{=}}{{mparen|(|)|t|i}} · p{{su|p=i}} · (1 − p){{su|p=t−i}}}}

The value obtained is the number of successes in a sequence of {{math|t}} yes/no experiments, each of which succeeds with probability {{math|p}}.

{{tt|std::binomial_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|IntType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|IntType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | binomial_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | binomial_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | binomial_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | binomial_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | binomial_distribution}}
{{dsc end}}

===Example===
{{example
 | Plot of binomial distribution with probability of success of each trial exactly 0.5, illustrating the relationship with the pascal triangle (the probabilities that none, 1, 2, 3, or all four of the 4 trials will be successful in this case are 1:4:6:4:1)
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // perform 4 trials, each succeeds 1 in 2 times
    std::binomial_distribution&lt;&gt; d(4, 0.5);

    std::map&lt;int, int&gt; hist;
    for (int n = 0; n &lt; 10000; ++n) {
        ++hist[d(gen)];
    }
    for (auto p : hist) {
        std::cout &lt;&lt; p.first &lt;&lt; ' '
                  &lt;&lt; std::string(p.second/100, '*') &lt;&lt; '\n';
    }
}
 | output=
0 ******
1 ************************
2 *************************************
3 *************************
4 ******
}}

===External links===
[http://mathworld.wolfram.com/BinomialDistribution.html Weisstein, Eric W. &quot;Binomial Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/binomial distribution]]
[[es:cpp/numeric/random/binomial distribution]]
[[fr:cpp/numeric/random/binomial distribution]]
[[it:cpp/numeric/random/binomial distribution]]
[[ja:cpp/numeric/random/binomial distribution]]
[[pt:cpp/numeric/random/binomial distribution]]
[[ru:cpp/numeric/random/binomial distribution]]
[[zh:cpp/numeric/random/binomial distribution]]</text>
      <sha1>l0abxvp6uphy9ulquci1jdcrsa1rnx4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/binomial distribution</title>
    <ns>0</ns>
    <id>4920</id>
    <revision>
      <id>62889</id>
      <parentid>50336</parentid>
      <timestamp>2013-07-01T23:45:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1418">{{cpp/numeric/random/binomial_distribution/title|binomial_distribution}}
{{cpp/numeric/random/binomial_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit binomial_distribution( IntType t = 1, double p = 0.5 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit binomial_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs new distribution object. The first version uses {{tt|t}} and {{tt|p}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | t | the ''t'' distribution parameter (number of trials)}}
{{par | p | the ''p'' distribution parameter (probability of a trial generating {{c|true}})}}
{{par | params | the distribution parameter set}}
{{par end}}

===Notes===
Requires that {{math|0 ≤ p ≤ 1}} and {{math|0 ≤ t}}.

[[de:cpp/numeric/random/binomial distribution/binomial distribution]]
[[es:cpp/numeric/random/binomial distribution/binomial distribution]]
[[fr:cpp/numeric/random/binomial distribution/binomial distribution]]
[[it:cpp/numeric/random/binomial distribution/binomial distribution]]
[[ja:cpp/numeric/random/binomial distribution/binomial distribution]]
[[pt:cpp/numeric/random/binomial distribution/binomial distribution]]
[[ru:cpp/numeric/random/binomial distribution/binomial distribution]]
[[zh:cpp/numeric/random/binomial distribution/binomial distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/max</title>
    <ns>0</ns>
    <id>4003</id>
    <revision>
      <id>50897</id>
      <parentid>44100</parentid>
      <timestamp>2013-06-01T03:44:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/max|binomial_distribution}}

[[de:cpp/numeric/random/binomial distribution/max]]
[[es:cpp/numeric/random/binomial distribution/max]]
[[fr:cpp/numeric/random/binomial distribution/max]]
[[it:cpp/numeric/random/binomial distribution/max]]
[[ja:cpp/numeric/random/binomial distribution/max]]
[[pt:cpp/numeric/random/binomial distribution/max]]
[[ru:cpp/numeric/random/binomial distribution/max]]
[[zh:cpp/numeric/random/binomial distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/min</title>
    <ns>0</ns>
    <id>3982</id>
    <revision>
      <id>50898</id>
      <parentid>44096</parentid>
      <timestamp>2013-06-01T03:44:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/min|binomial_distribution}}

[[de:cpp/numeric/random/binomial distribution/min]]
[[es:cpp/numeric/random/binomial distribution/min]]
[[fr:cpp/numeric/random/binomial distribution/min]]
[[it:cpp/numeric/random/binomial distribution/min]]
[[ja:cpp/numeric/random/binomial distribution/min]]
[[pt:cpp/numeric/random/binomial distribution/min]]
[[ru:cpp/numeric/random/binomial distribution/min]]
[[zh:cpp/numeric/random/binomial distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/operator cmp</title>
    <ns>0</ns>
    <id>4143</id>
    <revision>
      <id>50899</id>
      <parentid>44086</parentid>
      <timestamp>2013-06-01T03:44:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="572">{{include page|cpp/numeric/random/distribution/operator_cmp|binomial_distribution}}

[[de:cpp/numeric/random/binomial distribution/operator cmp]]
[[es:cpp/numeric/random/binomial distribution/operator cmp]]
[[fr:cpp/numeric/random/binomial distribution/operator cmp]]
[[it:cpp/numeric/random/binomial distribution/operator cmp]]
[[ja:cpp/numeric/random/binomial distribution/operator cmp]]
[[pt:cpp/numeric/random/binomial distribution/operator cmp]]
[[ru:cpp/numeric/random/binomial distribution/operator cmp]]
[[zh:cpp/numeric/random/binomial distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4536</id>
    <revision>
      <id>50900</id>
      <parentid>44081</parentid>
      <timestamp>2013-06-01T03:44:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="617">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|binomial_distribution}}

[[de:cpp/numeric/random/binomial distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/binomial distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/binomial distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/binomial distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/binomial distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/binomial distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/binomial distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/binomial distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/operator()</title>
    <ns>0</ns>
    <id>4101</id>
    <revision>
      <id>44091</id>
      <parentid>15050</parentid>
      <timestamp>2012-11-03T04:57:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="541">{{cpp/numeric/random/distribution/operator()|binomial_distribution}}

[[de:cpp/numeric/random/binomial distribution/operator()]]
[[es:cpp/numeric/random/binomial distribution/operator()]]
[[fr:cpp/numeric/random/binomial distribution/operator()]]
[[it:cpp/numeric/random/binomial distribution/operator()]]
[[ja:cpp/numeric/random/binomial distribution/operator()]]
[[pt:cpp/numeric/random/binomial distribution/operator()]]
[[ru:cpp/numeric/random/binomial distribution/operator()]]
[[zh:cpp/numeric/random/binomial distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/p</title>
    <ns>0</ns>
    <id>5012</id>
    <redirect title="cpp/numeric/random/binomial distribution/params" />
    <revision>
      <id>61191</id>
      <parentid>58668</parentid>
      <timestamp>2013-06-05T12:27:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/binomial distribution/params]]</comment>
      <text xml:space="preserve" bytes="61">#redirect [[cpp/numeric/random/binomial_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/param</title>
    <ns>0</ns>
    <id>4124</id>
    <revision>
      <id>67889</id>
      <parentid>50901</parentid>
      <timestamp>2014-03-04T14:27:27Z</timestamp>
      <contributor>
        <username>Wanttoknow</username>
        <id>2904</id>
      </contributor>
      <text xml:space="preserve" bytes="1085">{{include page|cpp/numeric/random/distribution/param|binomial_distribution}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    using BinomialDist = std::binomial_distribution&lt;&gt;;
    BinomialDist bino_dis(1, 0.5);
    
    std::cout &lt;&lt; &quot;A sample of Binomial(  1, 0.5): &quot; &lt;&lt; bino_dis(gen) &lt;&lt; '\n';

    // Use another parameter set
    bino_dis.param(BinomialDist::param_type(100,0.9));
    std::cout &lt;&lt; &quot;A sample of Binomial(100, 0.9): &quot; &lt;&lt; bino_dis(gen) &lt;&lt; '\n';
}
 | output=
A sample of Binomial(  1, 0.5): 0
A sample of Binomial(100, 0.9): 94
}}

[[de:cpp/numeric/random/binomial distribution/param]]
[[es:cpp/numeric/random/binomial distribution/param]]
[[fr:cpp/numeric/random/binomial distribution/param]]
[[it:cpp/numeric/random/binomial distribution/param]]
[[ja:cpp/numeric/random/binomial distribution/param]]
[[pt:cpp/numeric/random/binomial distribution/param]]
[[ru:cpp/numeric/random/binomial distribution/param]]
[[zh:cpp/numeric/random/binomial distribution/param]]</text>
      <sha1>bvjtjbcjuhz5lzfhkhkd0jexowyosm2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/params</title>
    <ns>0</ns>
    <id>12600</id>
    <revision>
      <id>61266</id>
      <parentid>61242</parentid>
      <timestamp>2013-06-05T13:14:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ce, default value</comment>
      <text xml:space="preserve" bytes="816">{{cpp/numeric/random/binomial_distribution/title|p, t}}
{{cpp/numeric/random/binomial_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
double p() const;
}}
{{dcl | since=c++11 | num=2 |
IntType t() const;
}}
{{dcl end}}

Returns the parameters the distribution was constructed with.

@1@ Returns the {{math|p}} distribution parameter. It defines the probability of a trial generating {{c|true}}. The default value is {{c|0.5}}.

@2@ Returns the {{math|t}} distribution parameter. It identifies the number of trials. The default value is {{c|1}}.

===Parameters===
(none)

===Return value===
@1@ The {{math|p}} distribution parameter.

@2@ The {{math|t}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | binomial_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/reset</title>
    <ns>0</ns>
    <id>4078</id>
    <revision>
      <id>50902</id>
      <parentid>44065</parentid>
      <timestamp>2013-06-01T03:44:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="509">{{include page|cpp/numeric/random/distribution/reset|binomial_distribution}}

[[de:cpp/numeric/random/binomial distribution/reset]]
[[es:cpp/numeric/random/binomial distribution/reset]]
[[fr:cpp/numeric/random/binomial distribution/reset]]
[[it:cpp/numeric/random/binomial distribution/reset]]
[[ja:cpp/numeric/random/binomial distribution/reset]]
[[pt:cpp/numeric/random/binomial distribution/reset]]
[[ru:cpp/numeric/random/binomial distribution/reset]]
[[zh:cpp/numeric/random/binomial distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/binomial distribution/t</title>
    <ns>0</ns>
    <id>5013</id>
    <redirect title="cpp/numeric/random/binomial distribution/params" />
    <revision>
      <id>61192</id>
      <parentid>58669</parentid>
      <timestamp>2013-06-05T12:27:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/binomial distribution/params]]</comment>
      <text xml:space="preserve" bytes="61">#redirect [[cpp/numeric/random/binomial_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution</title>
    <ns>0</ns>
    <id>3923</id>
    <revision>
      <id>75943</id>
      <parentid>73231</parentid>
      <timestamp>2015-02-05T03:13:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="2325">{{cpp/title|cauchy_distribution}}
{{cpp/numeric/random/cauchy_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class cauchy_distribution;
}}

Produces random numbers according to a Cauchy distribution (also called Lorentz distribution):

:{{math|f(x; a,b) {{=}} {{mparen|(|)|bπ {{mparen|[|]|1 + {{mparen|(|)|{{mfrac| |x - a|b}}}}{{su|p=2}}}}}}{{su|p=-1}} }}

{{tt|std::cauchy_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | cauchy_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | cauchy_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | cauchy_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | cauchy_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | cauchy_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | cauchy_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | cauchy_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | cauchy_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | cauchy_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===External links===
[http://mathworld.wolfram.com/CauchyDistribution.html Weisstein, Eric W. &quot;Cauchy Distribution.&quot;] From MathWorld--A Wolfram Web Resource.
[https://en.wikipedia.org/wiki/Cauchy_distribution Cauchy Distribution.] From Wikipedia.

[[de:cpp/numeric/random/cauchy distribution]]
[[es:cpp/numeric/random/cauchy distribution]]
[[fr:cpp/numeric/random/cauchy distribution]]
[[it:cpp/numeric/random/cauchy distribution]]
[[ja:cpp/numeric/random/cauchy distribution]]
[[pt:cpp/numeric/random/cauchy distribution]]
[[ru:cpp/numeric/random/cauchy distribution]]
[[zh:cpp/numeric/random/cauchy distribution]]</text>
      <sha1>f5ntg7lt1q8syzcpk3anfs0hydsz7wy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/a</title>
    <ns>0</ns>
    <id>8875</id>
    <redirect title="cpp/numeric/random/cauchy distribution/params" />
    <revision>
      <id>61126</id>
      <parentid>58673</parentid>
      <timestamp>2013-06-05T11:57:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/cauchy distribution/params]]</comment>
      <text xml:space="preserve" bytes="59">#redirect [[cpp/numeric/random/cauchy_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/b</title>
    <ns>0</ns>
    <id>8876</id>
    <redirect title="cpp/numeric/random/cauchy distribution/params" />
    <revision>
      <id>61125</id>
      <parentid>58676</parentid>
      <timestamp>2013-06-05T11:57:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/cauchy distribution/params]]</comment>
      <text xml:space="preserve" bytes="59">#redirect [[cpp/numeric/random/cauchy_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/cauchy distribution</title>
    <ns>0</ns>
    <id>4962</id>
    <revision>
      <id>62890</id>
      <parentid>50342</parentid>
      <timestamp>2013-07-01T23:45:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1264">{{cpp/numeric/random/cauchy_distribution/title|cauchy_distribution}}
{{cpp/numeric/random/cauchy_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit cauchy_distribution( RealType a = 0.0, RealType b = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit cauchy_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|a}} and {{tt|b}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | a | the ''a'' distribution parameter (location)}}
{{par | b | the ''b'' distribution parameter (scale)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/cauchy distribution/cauchy distribution]]
[[es:cpp/numeric/random/cauchy distribution/cauchy distribution]]
[[fr:cpp/numeric/random/cauchy distribution/cauchy distribution]]
[[it:cpp/numeric/random/cauchy distribution/cauchy distribution]]
[[ja:cpp/numeric/random/cauchy distribution/cauchy distribution]]
[[pt:cpp/numeric/random/cauchy distribution/cauchy distribution]]
[[ru:cpp/numeric/random/cauchy distribution/cauchy distribution]]
[[zh:cpp/numeric/random/cauchy distribution/cauchy distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/max</title>
    <ns>0</ns>
    <id>4019</id>
    <revision>
      <id>50903</id>
      <parentid>44035</parentid>
      <timestamp>2013-06-01T03:44:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="473">{{include page|cpp/numeric/random/distribution/max|cauchy_distribution}}

[[de:cpp/numeric/random/cauchy distribution/max]]
[[es:cpp/numeric/random/cauchy distribution/max]]
[[fr:cpp/numeric/random/cauchy distribution/max]]
[[it:cpp/numeric/random/cauchy distribution/max]]
[[ja:cpp/numeric/random/cauchy distribution/max]]
[[pt:cpp/numeric/random/cauchy distribution/max]]
[[ru:cpp/numeric/random/cauchy distribution/max]]
[[zh:cpp/numeric/random/cauchy distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/min</title>
    <ns>0</ns>
    <id>3972</id>
    <revision>
      <id>50904</id>
      <parentid>44031</parentid>
      <timestamp>2013-06-01T03:44:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="473">{{include page|cpp/numeric/random/distribution/min|cauchy_distribution}}

[[de:cpp/numeric/random/cauchy distribution/min]]
[[es:cpp/numeric/random/cauchy distribution/min]]
[[fr:cpp/numeric/random/cauchy distribution/min]]
[[it:cpp/numeric/random/cauchy distribution/min]]
[[ja:cpp/numeric/random/cauchy distribution/min]]
[[pt:cpp/numeric/random/cauchy distribution/min]]
[[ru:cpp/numeric/random/cauchy distribution/min]]
[[zh:cpp/numeric/random/cauchy distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/operator cmp</title>
    <ns>0</ns>
    <id>4154</id>
    <revision>
      <id>50905</id>
      <parentid>44020</parentid>
      <timestamp>2013-06-01T03:44:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="554">{{include page|cpp/numeric/random/distribution/operator_cmp|cauchy_distribution}}

[[de:cpp/numeric/random/cauchy distribution/operator cmp]]
[[es:cpp/numeric/random/cauchy distribution/operator cmp]]
[[fr:cpp/numeric/random/cauchy distribution/operator cmp]]
[[it:cpp/numeric/random/cauchy distribution/operator cmp]]
[[ja:cpp/numeric/random/cauchy distribution/operator cmp]]
[[pt:cpp/numeric/random/cauchy distribution/operator cmp]]
[[ru:cpp/numeric/random/cauchy distribution/operator cmp]]
[[zh:cpp/numeric/random/cauchy distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4525</id>
    <revision>
      <id>50906</id>
      <parentid>44015</parentid>
      <timestamp>2013-06-01T03:44:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="599">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|cauchy_distribution}}

[[de:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/cauchy distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/operator()</title>
    <ns>0</ns>
    <id>4116</id>
    <revision>
      <id>44026</id>
      <parentid>15065</parentid>
      <timestamp>2012-11-03T04:37:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="523">{{cpp/numeric/random/distribution/operator()|cauchy_distribution}}

[[de:cpp/numeric/random/cauchy distribution/operator()]]
[[es:cpp/numeric/random/cauchy distribution/operator()]]
[[fr:cpp/numeric/random/cauchy distribution/operator()]]
[[it:cpp/numeric/random/cauchy distribution/operator()]]
[[ja:cpp/numeric/random/cauchy distribution/operator()]]
[[pt:cpp/numeric/random/cauchy distribution/operator()]]
[[ru:cpp/numeric/random/cauchy distribution/operator()]]
[[zh:cpp/numeric/random/cauchy distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/param</title>
    <ns>0</ns>
    <id>4136</id>
    <revision>
      <id>50907</id>
      <parentid>44011</parentid>
      <timestamp>2013-06-01T03:44:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/param|cauchy_distribution}}

[[de:cpp/numeric/random/cauchy distribution/param]]
[[es:cpp/numeric/random/cauchy distribution/param]]
[[fr:cpp/numeric/random/cauchy distribution/param]]
[[it:cpp/numeric/random/cauchy distribution/param]]
[[ja:cpp/numeric/random/cauchy distribution/param]]
[[pt:cpp/numeric/random/cauchy distribution/param]]
[[ru:cpp/numeric/random/cauchy distribution/param]]
[[zh:cpp/numeric/random/cauchy distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/params</title>
    <ns>0</ns>
    <id>12597</id>
    <revision>
      <id>61255</id>
      <parentid>61254</parentid>
      <timestamp>2013-06-05T13:02:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1052">{{cpp/numeric/random/cauchy_distribution/title|a, b}}
{{cpp/numeric/random/cauchy_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 
RealType a() const;
}}
{{dcl | since=c++11 | num=2 | 
RealType b() const;
}}
{{dcl end}}

Returns the distribution parameters with which the distribution was constructed.

@1@ Returns the ''a'' parameter. It specifies the location of the peak and is also called location parameter. The default value is {{c|0.0}}.

@2@ Returns the ''b'' parameter. It represents the half-width at half-maximum (HWHM) and is also called scale parameter. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
@1@ The value of the ''a'' parameter.

@2@ The value of the ''b'' parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | cauchy_distribution}}
{{dsc end}}

===External links===
* [https://en.wikipedia.org/wiki/Scale_parameter Scale parameter.] From Wikipedia.
* [https://en.wikipedia.org/wiki/Location_parameter Location parameter.] From Wikipedia.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/cauchy distribution/reset</title>
    <ns>0</ns>
    <id>4089</id>
    <revision>
      <id>50908</id>
      <parentid>44006</parentid>
      <timestamp>2013-06-01T03:44:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/reset|cauchy_distribution}}

[[de:cpp/numeric/random/cauchy distribution/reset]]
[[es:cpp/numeric/random/cauchy distribution/reset]]
[[fr:cpp/numeric/random/cauchy distribution/reset]]
[[it:cpp/numeric/random/cauchy distribution/reset]]
[[ja:cpp/numeric/random/cauchy distribution/reset]]
[[pt:cpp/numeric/random/cauchy distribution/reset]]
[[ru:cpp/numeric/random/cauchy distribution/reset]]
[[zh:cpp/numeric/random/cauchy distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution</title>
    <ns>0</ns>
    <id>3922</id>
    <revision>
      <id>75942</id>
      <parentid>73230</parentid>
      <timestamp>2015-02-05T03:12:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="2632">{{cpp/title|chi_squared_distribution}}
{{cpp/numeric/random/chi_squared_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class chi_squared_distribution;
}}

The {{tt|chi_squared_distribution}} produces random numbers {{math|x&gt;0}} according to the [[enwiki:Chi-squared_distribution|Chi-squared distribution]]:

:{{math|f(x;n) {{=}} {{mfrac||x{{su|p=(n/2)-1}}  {{mexp|-x/2}} | Γ(n/2) 2{{su|p=n/2}} }} }}

{{math|Γ}} is the [[enwiki:Gamma_function|Gamma function]] (See also {{lc|std::tgamma}}) and {{math|n}} are the [[enwiki:Degrees_of_freedom_(statistics)|degrees of freedom]] (default 1).

{{tt|std::chi_squared_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | chi_squared_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | chi_squared_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | chi_squared_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/chi_squared_distribution/dsc n}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | chi_squared_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | chi_squared_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | chi_squared_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | chi_squared_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | chi_squared_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===External links===
* [http://mathworld.wolfram.com/Chi-SquaredDistribution.html Weisstein, Eric W. &quot;Chi-Squared Distribution.&quot;] From MathWorld--A Wolfram Web Resource.
* [[enwiki:Chi-squared_distribution|Chi-squared distribution.]] From Wikipedia.

[[de:cpp/numeric/random/chi squared distribution]]
[[es:cpp/numeric/random/chi squared distribution]]
[[fr:cpp/numeric/random/chi squared distribution]]
[[it:cpp/numeric/random/chi squared distribution]]
[[ja:cpp/numeric/random/chi squared distribution]]
[[pt:cpp/numeric/random/chi squared distribution]]
[[ru:cpp/numeric/random/chi squared distribution]]
[[zh:cpp/numeric/random/chi squared distribution]]</text>
      <sha1>oeb14kzez3thq26lrogbo4eidlbd0r0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/chi squared distribution</title>
    <ns>0</ns>
    <id>4961</id>
    <revision>
      <id>62891</id>
      <parentid>50344</parentid>
      <timestamp>2013-07-01T23:45:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1289">{{cpp/numeric/random/chi_squared_distribution/title|chi_squared_distribution}}
{{cpp/numeric/random/chi_squared_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit chi_squared_distribution( RealType n = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit chi_squared_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs new distribution object. The first version uses {{tt|n}} as the distribution parameter, the second version uses {{tt|params}} as the distribution parameter.

===Parameters===
{{par begin}}
{{par | n | the ''n'' distribution parameter (degrees of freedom)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/chi squared distribution/chi squared distribution]]
[[es:cpp/numeric/random/chi squared distribution/chi squared distribution]]
[[fr:cpp/numeric/random/chi squared distribution/chi squared distribution]]
[[it:cpp/numeric/random/chi squared distribution/chi squared distribution]]
[[ja:cpp/numeric/random/chi squared distribution/chi squared distribution]]
[[pt:cpp/numeric/random/chi squared distribution/chi squared distribution]]
[[ru:cpp/numeric/random/chi squared distribution/chi squared distribution]]
[[zh:cpp/numeric/random/chi squared distribution/chi squared distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/max</title>
    <ns>0</ns>
    <id>4014</id>
    <revision>
      <id>50909</id>
      <parentid>43990</parentid>
      <timestamp>2013-06-01T03:44:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/max|chi_squared_distribution}}

[[de:cpp/numeric/random/chi squared distribution/max]]
[[es:cpp/numeric/random/chi squared distribution/max]]
[[fr:cpp/numeric/random/chi squared distribution/max]]
[[it:cpp/numeric/random/chi squared distribution/max]]
[[ja:cpp/numeric/random/chi squared distribution/max]]
[[pt:cpp/numeric/random/chi squared distribution/max]]
[[ru:cpp/numeric/random/chi squared distribution/max]]
[[zh:cpp/numeric/random/chi squared distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/min</title>
    <ns>0</ns>
    <id>3971</id>
    <revision>
      <id>50910</id>
      <parentid>43986</parentid>
      <timestamp>2013-06-01T03:44:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/min|chi_squared_distribution}}

[[de:cpp/numeric/random/chi squared distribution/min]]
[[es:cpp/numeric/random/chi squared distribution/min]]
[[fr:cpp/numeric/random/chi squared distribution/min]]
[[it:cpp/numeric/random/chi squared distribution/min]]
[[ja:cpp/numeric/random/chi squared distribution/min]]
[[pt:cpp/numeric/random/chi squared distribution/min]]
[[ru:cpp/numeric/random/chi squared distribution/min]]
[[zh:cpp/numeric/random/chi squared distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/n</title>
    <ns>0</ns>
    <id>8892</id>
    <revision>
      <id>63373</id>
      <parentid>61256</parentid>
      <timestamp>2013-07-10T01:30:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="998">{{cpp/numeric/random/chi_squared_distribution/title|n}}
{{cpp/numeric/random/chi_squared_distribution/navbar}}
{{ddcl | since=c++11 | 1=
RealType n() const;
}}

Returns the {{math|n}} parameter the distribution was constructed with. It specifies the [[enwiki:Degrees of freedom (statistics)|degrees of freedom]] of the distribution. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
The {{math|n}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | chi_squared_distribution}}
{{dsc end}}

[[de:cpp/numeric/random/chi squared distribution/n]]
[[es:cpp/numeric/random/chi squared distribution/n]]
[[fr:cpp/numeric/random/chi squared distribution/n]]
[[it:cpp/numeric/random/chi squared distribution/n]]
[[ja:cpp/numeric/random/chi squared distribution/n]]
[[pt:cpp/numeric/random/chi squared distribution/n]]
[[ru:cpp/numeric/random/chi squared distribution/n]]
[[zh:cpp/numeric/random/chi squared distribution/n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/operator cmp</title>
    <ns>0</ns>
    <id>4153</id>
    <revision>
      <id>50911</id>
      <parentid>43967</parentid>
      <timestamp>2013-06-01T03:45:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="599">{{include page|cpp/numeric/random/distribution/operator_cmp|chi_squared_distribution}}

[[de:cpp/numeric/random/chi squared distribution/operator cmp]]
[[es:cpp/numeric/random/chi squared distribution/operator cmp]]
[[fr:cpp/numeric/random/chi squared distribution/operator cmp]]
[[it:cpp/numeric/random/chi squared distribution/operator cmp]]
[[ja:cpp/numeric/random/chi squared distribution/operator cmp]]
[[pt:cpp/numeric/random/chi squared distribution/operator cmp]]
[[ru:cpp/numeric/random/chi squared distribution/operator cmp]]
[[zh:cpp/numeric/random/chi squared distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4526</id>
    <revision>
      <id>50912</id>
      <parentid>43961</parentid>
      <timestamp>2013-06-01T03:45:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="644">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|chi_squared_distribution}}

[[de:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/chi squared distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/operator()</title>
    <ns>0</ns>
    <id>4112</id>
    <revision>
      <id>43972</id>
      <parentid>15061</parentid>
      <timestamp>2012-11-03T04:25:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="568">{{cpp/numeric/random/distribution/operator()|chi_squared_distribution}}

[[de:cpp/numeric/random/chi squared distribution/operator()]]
[[es:cpp/numeric/random/chi squared distribution/operator()]]
[[fr:cpp/numeric/random/chi squared distribution/operator()]]
[[it:cpp/numeric/random/chi squared distribution/operator()]]
[[ja:cpp/numeric/random/chi squared distribution/operator()]]
[[pt:cpp/numeric/random/chi squared distribution/operator()]]
[[ru:cpp/numeric/random/chi squared distribution/operator()]]
[[zh:cpp/numeric/random/chi squared distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/param</title>
    <ns>0</ns>
    <id>4132</id>
    <revision>
      <id>50913</id>
      <parentid>43955</parentid>
      <timestamp>2013-06-01T03:45:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/param|chi_squared_distribution}}

[[de:cpp/numeric/random/chi squared distribution/param]]
[[es:cpp/numeric/random/chi squared distribution/param]]
[[fr:cpp/numeric/random/chi squared distribution/param]]
[[it:cpp/numeric/random/chi squared distribution/param]]
[[ja:cpp/numeric/random/chi squared distribution/param]]
[[pt:cpp/numeric/random/chi squared distribution/param]]
[[ru:cpp/numeric/random/chi squared distribution/param]]
[[zh:cpp/numeric/random/chi squared distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/chi squared distribution/reset</title>
    <ns>0</ns>
    <id>4088</id>
    <revision>
      <id>50914</id>
      <parentid>43949</parentid>
      <timestamp>2013-06-01T03:45:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/reset|chi_squared_distribution}}

[[de:cpp/numeric/random/chi squared distribution/reset]]
[[es:cpp/numeric/random/chi squared distribution/reset]]
[[fr:cpp/numeric/random/chi squared distribution/reset]]
[[it:cpp/numeric/random/chi squared distribution/reset]]
[[ja:cpp/numeric/random/chi squared distribution/reset]]
[[pt:cpp/numeric/random/chi squared distribution/reset]]
[[ru:cpp/numeric/random/chi squared distribution/reset]]
[[zh:cpp/numeric/random/chi squared distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine</title>
    <ns>0</ns>
    <id>3700</id>
    <revision>
      <id>85860</id>
      <parentid>72709</parentid>
      <timestamp>2016-05-24T22:35:10Z</timestamp>
      <contributor>
        <username>Ashish20</username>
        <id>519</id>
      </contributor>
      <minor/>
      <comment>Spelling change: adapter -&gt; adaptor</comment>
      <text xml:space="preserve" bytes="2513">{{cpp/title|discard_block_engine}}
{{cpp/numeric/random/discard_block_engine/navbar}}
{{dcl begin}}
{{dcl header | random}}
{{dcl | since=c++11 | 1=
template&lt;
    class Engine, 
    size_t P, size_t R
&gt; class discard_block_engine;
}}
{{dcl end}}

{{tt|discard_block_engine}} is a pseudo-random number generator adaptor that discards a certain amount of data produced by the base engine. From each block of size {{tt|P}} generated by the base engine, the adaptor keeps only {{tt|R}} numbers, discarding the rest.

===Template parameters===
{{par begin}}
{{par | Engine | the type of the wrapped engine }}
{{par | P | the size of a block. Must be greater than {{math|0}}. }}
{{par | R | the number of used numbers per block. Must be greater than {{math|0}} and not greater than {{tt|P}} }}
{{par hreq}}
{{par req concept | Engine | RandomNumberEngine}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{tt|Engine::result_type}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc constructor |discard_block_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc seed |discard_block_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc base |discard_block_engine}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator() |discard_block_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc discard |discard_block_engine}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/adaptor/dsc min |discard_block_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc max |discard_block_engine}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator_cmp |discard_block_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator_ltltgtgt |discard_block_engine}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} block_size | the size of the block, {{tt|P}} }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} used_size | the number of used numbers per block, {{tt|R}} }}
{{dsc end}}

[[de:cpp/numeric/random/discard block engine]]
[[es:cpp/numeric/random/discard block engine]]
[[fr:cpp/numeric/random/discard block engine]]
[[it:cpp/numeric/random/discard block engine]]
[[ja:cpp/numeric/random/discard block engine]]
[[pt:cpp/numeric/random/discard block engine]]
[[ru:cpp/numeric/random/discard block engine]]
[[zh:cpp/numeric/random/discard block engine]]</text>
      <sha1>t7xn23yy7lqmdjvw6ykctm33yr7teme</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/base</title>
    <ns>0</ns>
    <id>8787</id>
    <revision>
      <id>50915</id>
      <parentid>43936</parentid>
      <timestamp>2013-06-01T03:45:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="486">{{include page|cpp/numeric/random/adaptor/base|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/base]]
[[es:cpp/numeric/random/discard block engine/base]]
[[fr:cpp/numeric/random/discard block engine/base]]
[[it:cpp/numeric/random/discard block engine/base]]
[[ja:cpp/numeric/random/discard block engine/base]]
[[pt:cpp/numeric/random/discard block engine/base]]
[[ru:cpp/numeric/random/discard block engine/base]]
[[zh:cpp/numeric/random/discard block engine/base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/discard</title>
    <ns>0</ns>
    <id>8788</id>
    <revision>
      <id>50916</id>
      <parentid>43931</parentid>
      <timestamp>2013-06-01T03:45:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="513">{{include page|cpp/numeric/random/adaptor/discard|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/discard]]
[[es:cpp/numeric/random/discard block engine/discard]]
[[fr:cpp/numeric/random/discard block engine/discard]]
[[it:cpp/numeric/random/discard block engine/discard]]
[[ja:cpp/numeric/random/discard block engine/discard]]
[[pt:cpp/numeric/random/discard block engine/discard]]
[[ru:cpp/numeric/random/discard block engine/discard]]
[[zh:cpp/numeric/random/discard block engine/discard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/discard block engine</title>
    <ns>0</ns>
    <id>8784</id>
    <revision>
      <id>50917</id>
      <parentid>43926</parentid>
      <timestamp>2013-06-01T03:45:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="621">{{include page|cpp/numeric/random/adaptor/constructor|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/discard block engine]]
[[es:cpp/numeric/random/discard block engine/discard block engine]]
[[fr:cpp/numeric/random/discard block engine/discard block engine]]
[[it:cpp/numeric/random/discard block engine/discard block engine]]
[[ja:cpp/numeric/random/discard block engine/discard block engine]]
[[pt:cpp/numeric/random/discard block engine/discard block engine]]
[[ru:cpp/numeric/random/discard block engine/discard block engine]]
[[zh:cpp/numeric/random/discard block engine/discard block engine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/max</title>
    <ns>0</ns>
    <id>8790</id>
    <revision>
      <id>50918</id>
      <parentid>43919</parentid>
      <timestamp>2013-06-01T03:45:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="477">{{include page|cpp/numeric/random/adaptor/max|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/max]]
[[es:cpp/numeric/random/discard block engine/max]]
[[fr:cpp/numeric/random/discard block engine/max]]
[[it:cpp/numeric/random/discard block engine/max]]
[[ja:cpp/numeric/random/discard block engine/max]]
[[pt:cpp/numeric/random/discard block engine/max]]
[[ru:cpp/numeric/random/discard block engine/max]]
[[zh:cpp/numeric/random/discard block engine/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/min</title>
    <ns>0</ns>
    <id>8789</id>
    <revision>
      <id>50919</id>
      <parentid>43913</parentid>
      <timestamp>2013-06-01T03:45:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="477">{{include page|cpp/numeric/random/adaptor/min|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/min]]
[[es:cpp/numeric/random/discard block engine/min]]
[[fr:cpp/numeric/random/discard block engine/min]]
[[it:cpp/numeric/random/discard block engine/min]]
[[ja:cpp/numeric/random/discard block engine/min]]
[[pt:cpp/numeric/random/discard block engine/min]]
[[ru:cpp/numeric/random/discard block engine/min]]
[[zh:cpp/numeric/random/discard block engine/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/operator cmp</title>
    <ns>0</ns>
    <id>8791</id>
    <revision>
      <id>50920</id>
      <parentid>43901</parentid>
      <timestamp>2013-06-01T03:45:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="558">{{include page|cpp/numeric/random/adaptor/operator cmp|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/operator cmp]]
[[es:cpp/numeric/random/discard block engine/operator cmp]]
[[fr:cpp/numeric/random/discard block engine/operator cmp]]
[[it:cpp/numeric/random/discard block engine/operator cmp]]
[[ja:cpp/numeric/random/discard block engine/operator cmp]]
[[pt:cpp/numeric/random/discard block engine/operator cmp]]
[[ru:cpp/numeric/random/discard block engine/operator cmp]]
[[zh:cpp/numeric/random/discard block engine/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/operator ltltgtgt</title>
    <ns>0</ns>
    <id>8792</id>
    <revision>
      <id>50921</id>
      <parentid>43895</parentid>
      <timestamp>2013-06-01T03:45:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="603">{{include page|cpp/numeric/random/adaptor/operator ltltgtgt|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/operator ltltgtgt]]
[[es:cpp/numeric/random/discard block engine/operator ltltgtgt]]
[[fr:cpp/numeric/random/discard block engine/operator ltltgtgt]]
[[it:cpp/numeric/random/discard block engine/operator ltltgtgt]]
[[ja:cpp/numeric/random/discard block engine/operator ltltgtgt]]
[[pt:cpp/numeric/random/discard block engine/operator ltltgtgt]]
[[ru:cpp/numeric/random/discard block engine/operator ltltgtgt]]
[[zh:cpp/numeric/random/discard block engine/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/operator()</title>
    <ns>0</ns>
    <id>8786</id>
    <revision>
      <id>43907</id>
      <parentid>37157</parentid>
      <timestamp>2012-11-03T04:14:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="527">{{cpp/numeric/random/adaptor/operator()|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/operator()]]
[[es:cpp/numeric/random/discard block engine/operator()]]
[[fr:cpp/numeric/random/discard block engine/operator()]]
[[it:cpp/numeric/random/discard block engine/operator()]]
[[ja:cpp/numeric/random/discard block engine/operator()]]
[[pt:cpp/numeric/random/discard block engine/operator()]]
[[ru:cpp/numeric/random/discard block engine/operator()]]
[[zh:cpp/numeric/random/discard block engine/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discard block engine/seed</title>
    <ns>0</ns>
    <id>8785</id>
    <revision>
      <id>50922</id>
      <parentid>43890</parentid>
      <timestamp>2013-06-01T03:45:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="486">{{include page|cpp/numeric/random/adaptor/seed|discard_block_engine}}

[[de:cpp/numeric/random/discard block engine/seed]]
[[es:cpp/numeric/random/discard block engine/seed]]
[[fr:cpp/numeric/random/discard block engine/seed]]
[[it:cpp/numeric/random/discard block engine/seed]]
[[ja:cpp/numeric/random/discard block engine/seed]]
[[pt:cpp/numeric/random/discard block engine/seed]]
[[ru:cpp/numeric/random/discard block engine/seed]]
[[zh:cpp/numeric/random/discard block engine/seed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution</title>
    <ns>0</ns>
    <id>3926</id>
    <revision>
      <id>75946</id>
      <parentid>73234</parentid>
      <timestamp>2015-02-05T03:14:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="2624">{{cpp/title|discrete_distribution}}
{{cpp/numeric/random/discrete_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class IntType = int &gt;
class discrete_distribution;
}}

{{tt|std::discrete_distribution}} produces random integers on the interval {{tt|[0, n)}}, where the probability of each individual integer {{tt|i}} is defined as {{math|w{{su|b=i}}/S}}, that is the ''weight'' of the {{tt|i}}th integer divided by the sum of all {{tt|n}} weights. 

{{tt|std::discrete_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|IntType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|IntType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | discrete_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | discrete_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | discrete_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/discrete_distribution/dsc probabilities}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | discrete_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | discrete_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | discrete_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | discrete_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | discrete_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::discrete_distribution&lt;&gt; d({40, 10, 10, 40});
    std::map&lt;int, int&gt; m;
    for(int n=0; n&lt;10000; ++n) {
        ++m[d(gen)];
    }
    for(auto p : m) {
        std::cout &lt;&lt; p.first &lt;&lt; &quot; generated &quot; &lt;&lt; p.second &lt;&lt; &quot; times\n&quot;;
    }
}
 | output=
0 generated 4028 times
1 generated 978 times
2 generated 1012 times
3 generated 3982 times
}}

[[de:cpp/numeric/random/discrete distribution]]
[[es:cpp/numeric/random/discrete distribution]]
[[fr:cpp/numeric/random/discrete distribution]]
[[it:cpp/numeric/random/discrete distribution]]
[[ja:cpp/numeric/random/discrete distribution]]
[[pt:cpp/numeric/random/discrete distribution]]
[[ru:cpp/numeric/random/discrete distribution]]
[[zh:cpp/numeric/random/discrete distribution]]</text>
      <sha1>h5961lu9sabcggoouxezxpc09be2qca</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/discrete distribution</title>
    <ns>0</ns>
    <id>4964</id>
    <revision>
      <id>77678</id>
      <parentid>76321</parentid>
      <timestamp>2015-04-03T02:34:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>= in temlpate</comment>
      <text xml:space="preserve" bytes="2725">{{cpp/numeric/random/discrete_distribution/title|discrete_distribution}}
{{cpp/numeric/random/discrete_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
discrete_distribution();
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class InputIt &gt;
discrete_distribution( InputIt first, InputIt last );
}}
{{dcl | num=3 | since=c++11 | 1=
discrete_distribution( std::initializer_list&lt;double&gt; weights );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class UnaryOperation &gt;
discrete_distribution( std::size_t count, double xmin, double xmax,
                       UnaryOperation unary_op );
}}
{{dcl | num=5 | since=c++11 | 1=
explicit discrete_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. 

1) Default constructor. Constructs the distribution with a single weight {{math|p{{=}}{1} }}. This distribution will always generate {{c|0}}.

2) Constructs the distribution with weights in the range {{tt|[first, last)}}. If {{c|first {{==}} last}}, the effects are the same as of the default constructor.

3) Constructs the distribution with weights in {{tt|weights}}. Effectively calls {{c|discrete_distribution(weights.begin(), weights.end())}}.

4) Constructs the distribution with {{tt|count}} weights that are generated using function {{tt|unary_op}}. Each of the weights is equal to {{math|w{{su|b=i}} {{=}} unary_op(xmin + δ/2 + i · δ)}}, where {{math|δ {{=}} {{mfrac|(xmax − xmin)|count}}}} and {{math|i ∈ {0, ..., count−1} }}. {{tt|xmin}} and {{tt|xmax}} must be such that {{math|δ &gt; 0}}. If {{c|count {{==}} 0}} the effects are the same as of the default constructor.

5) Constructs the distribution with {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | first, last | the range of elements defining the numbers to use as weights. The type of the elements referred by {{tt|InputIterator}} must be convertible to {{c|double}}}}
{{par | weights | initializer list containing the weights}}
{{par op1 | unary_op | rp=double | p1=double}}
{{par | params | the distribution parameter set}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

[[de:cpp/numeric/random/discrete distribution/discrete distribution]]
[[es:cpp/numeric/random/discrete distribution/discrete distribution]]
[[fr:cpp/numeric/random/discrete distribution/discrete distribution]]
[[it:cpp/numeric/random/discrete distribution/discrete distribution]]
[[ja:cpp/numeric/random/discrete distribution/discrete distribution]]
[[pt:cpp/numeric/random/discrete distribution/discrete distribution]]
[[ru:cpp/numeric/random/discrete distribution/discrete distribution]]
[[zh:cpp/numeric/random/discrete distribution/discrete distribution]]</text>
      <sha1>pt6diy8ie6yixofarr7adlidw9xrpwd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/max</title>
    <ns>0</ns>
    <id>4016</id>
    <revision>
      <id>50923</id>
      <parentid>43874</parentid>
      <timestamp>2013-06-01T03:45:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/max|discrete_distribution}}

[[de:cpp/numeric/random/discrete distribution/max]]
[[es:cpp/numeric/random/discrete distribution/max]]
[[fr:cpp/numeric/random/discrete distribution/max]]
[[it:cpp/numeric/random/discrete distribution/max]]
[[ja:cpp/numeric/random/discrete distribution/max]]
[[pt:cpp/numeric/random/discrete distribution/max]]
[[ru:cpp/numeric/random/discrete distribution/max]]
[[zh:cpp/numeric/random/discrete distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/min</title>
    <ns>0</ns>
    <id>3968</id>
    <revision>
      <id>50924</id>
      <parentid>43868</parentid>
      <timestamp>2013-06-01T03:45:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/min|discrete_distribution}}

[[de:cpp/numeric/random/discrete distribution/min]]
[[es:cpp/numeric/random/discrete distribution/min]]
[[fr:cpp/numeric/random/discrete distribution/min]]
[[it:cpp/numeric/random/discrete distribution/min]]
[[ja:cpp/numeric/random/discrete distribution/min]]
[[pt:cpp/numeric/random/discrete distribution/min]]
[[ru:cpp/numeric/random/discrete distribution/min]]
[[zh:cpp/numeric/random/discrete distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/operator cmp</title>
    <ns>0</ns>
    <id>4157</id>
    <revision>
      <id>50925</id>
      <parentid>43853</parentid>
      <timestamp>2013-06-01T03:45:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="572">{{include page|cpp/numeric/random/distribution/operator_cmp|discrete_distribution}}

[[de:cpp/numeric/random/discrete distribution/operator cmp]]
[[es:cpp/numeric/random/discrete distribution/operator cmp]]
[[fr:cpp/numeric/random/discrete distribution/operator cmp]]
[[it:cpp/numeric/random/discrete distribution/operator cmp]]
[[ja:cpp/numeric/random/discrete distribution/operator cmp]]
[[pt:cpp/numeric/random/discrete distribution/operator cmp]]
[[ru:cpp/numeric/random/discrete distribution/operator cmp]]
[[zh:cpp/numeric/random/discrete distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4522</id>
    <revision>
      <id>50926</id>
      <parentid>43847</parentid>
      <timestamp>2013-06-01T03:45:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="617">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|discrete_distribution}}

[[de:cpp/numeric/random/discrete distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/discrete distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/discrete distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/discrete distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/discrete distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/discrete distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/discrete distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/discrete distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/operator()</title>
    <ns>0</ns>
    <id>4115</id>
    <revision>
      <id>43860</id>
      <parentid>15064</parentid>
      <timestamp>2012-11-03T04:04:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="541">{{cpp/numeric/random/distribution/operator()|discrete_distribution}}

[[de:cpp/numeric/random/discrete distribution/operator()]]
[[es:cpp/numeric/random/discrete distribution/operator()]]
[[fr:cpp/numeric/random/discrete distribution/operator()]]
[[it:cpp/numeric/random/discrete distribution/operator()]]
[[ja:cpp/numeric/random/discrete distribution/operator()]]
[[pt:cpp/numeric/random/discrete distribution/operator()]]
[[ru:cpp/numeric/random/discrete distribution/operator()]]
[[zh:cpp/numeric/random/discrete distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/param</title>
    <ns>0</ns>
    <id>4137</id>
    <revision>
      <id>50927</id>
      <parentid>43842</parentid>
      <timestamp>2013-06-01T03:45:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="509">{{include page|cpp/numeric/random/distribution/param|discrete_distribution}}

[[de:cpp/numeric/random/discrete distribution/param]]
[[es:cpp/numeric/random/discrete distribution/param]]
[[fr:cpp/numeric/random/discrete distribution/param]]
[[it:cpp/numeric/random/discrete distribution/param]]
[[ja:cpp/numeric/random/discrete distribution/param]]
[[pt:cpp/numeric/random/discrete distribution/param]]
[[ru:cpp/numeric/random/discrete distribution/param]]
[[zh:cpp/numeric/random/discrete distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/probabilities</title>
    <ns>0</ns>
    <id>4967</id>
    <revision>
      <id>62893</id>
      <parentid>50349</parentid>
      <timestamp>2013-07-01T23:45:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1243">{{cpp/numeric/random/discrete_distribution/title | probabilities}}
{{cpp/numeric/random/discrete_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |1=
std::vector&lt;double&gt; probabilities() const;
}}
{{dcl end}}

Obtains a {{c|std::vector&lt;double&gt;}} containing the individual probabilities of each integer that is generated by this distribution.

===Parameters===
(none)

===Return value===
An object of type {{c|std::vector&lt;double&gt;}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;random&gt;
int main()
{
    std::discrete_distribution&lt;&gt; d({40, 10, 10, 40});
    std::vector&lt;double&gt; p = d.probabilities();
    for(auto n : p)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
0.4 0.1 0.1 0.4
}}

[[de:cpp/numeric/random/discrete distribution/probabilities]]
[[es:cpp/numeric/random/discrete distribution/probabilities]]
[[fr:cpp/numeric/random/discrete distribution/probabilities]]
[[it:cpp/numeric/random/discrete distribution/probabilities]]
[[ja:cpp/numeric/random/discrete distribution/probabilities]]
[[pt:cpp/numeric/random/discrete distribution/probabilities]]
[[ru:cpp/numeric/random/discrete distribution/probabilities]]
[[zh:cpp/numeric/random/discrete distribution/probabilities]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/discrete distribution/reset</title>
    <ns>0</ns>
    <id>4092</id>
    <revision>
      <id>50928</id>
      <parentid>43831</parentid>
      <timestamp>2013-06-01T03:45:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="509">{{include page|cpp/numeric/random/distribution/reset|discrete_distribution}}

[[de:cpp/numeric/random/discrete distribution/reset]]
[[es:cpp/numeric/random/discrete distribution/reset]]
[[fr:cpp/numeric/random/discrete distribution/reset]]
[[it:cpp/numeric/random/discrete distribution/reset]]
[[ja:cpp/numeric/random/discrete distribution/reset]]
[[pt:cpp/numeric/random/discrete distribution/reset]]
[[ru:cpp/numeric/random/discrete distribution/reset]]
[[zh:cpp/numeric/random/discrete distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution</title>
    <ns>0</ns>
    <id>3916</id>
    <revision>
      <id>81704</id>
      <parentid>75936</parentid>
      <timestamp>2015-11-04T23:24:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link the LWG issue here too, since this is what it was actually about</comment>
      <text xml:space="preserve" bytes="3566">{{cpp/title|exponential_distribution}}
{{cpp/numeric/random/exponential_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class exponential_distribution;
}}

Produces random non-negative floating-point values {{math|x}}, distributed according to probability density function:

:{{math|P(x{{!}}λ) {{=}} λe{{su|p=-λx}}}}

The value obtained is the time/distance until the next random event if random events occur at constant rate {{math|λ}} per unit of time/distance. For example, this distribution describes the time between the clicks of a Geiger counter or the distance between point mutations in a DNA strand.

This is the continuous counterpart of {{lc|std::geometric_distribution}}

{{tt|std::exponential_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | exponential_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | exponential_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | exponential_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/exponential_distribution/dsc lambda}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | exponential_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | exponential_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | exponential_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | exponential_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | exponential_distribution}}
{{dsc end}}

===Notes===
Some implementations may occasionally return infinity if {{tt|RealType}} is {{c|float}}. This is [http://open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#2524 LWG issue 2524]

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());

    // if particles decay once per second on average,
    // how much time, in seconds, until the next one?
    std::exponential_distribution&lt;&gt; d(1);
 
    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[2*d(gen)];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(1) 
                  &lt;&lt; p.first/2.0 &lt;&lt; '-' &lt;&lt; (p.first+1)/2.0 &lt;&lt;
                ' ' &lt;&lt; std::string(p.second/200, '*') &lt;&lt; '\n';
    }
}
 | p=true
 | output=
0.0-0.5 *******************
0.5-1.0 ***********
1.0-1.5 *******
1.5-2.0 ****
2.0-2.5 **
2.5-3.0 *
3.0-3.5 
3.5-4.0 
}}

===External links===
[http://mathworld.wolfram.com/ExponentialDistribution.html Weisstein, Eric W. &quot;Exponential Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/exponential distribution]]
[[es:cpp/numeric/random/exponential distribution]]
[[fr:cpp/numeric/random/exponential distribution]]
[[it:cpp/numeric/random/exponential distribution]]
[[ja:cpp/numeric/random/exponential distribution]]
[[pt:cpp/numeric/random/exponential distribution]]
[[ru:cpp/numeric/random/exponential distribution]]
[[zh:cpp/numeric/random/exponential distribution]]</text>
      <sha1>eeyi65dcwtddu014tc3swajwr3xe0jf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/exponential distribution</title>
    <ns>0</ns>
    <id>4924</id>
    <revision>
      <id>62894</id>
      <parentid>50351</parentid>
      <timestamp>2013-07-01T23:45:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1355">{{cpp/numeric/random/exponential_distribution/title|exponential_distribution}}
{{cpp/numeric/random/exponential_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit exponential_distribution( RealType lambda = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit exponential_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|lambda}} as the distribution parameter, the second version uses {{tt|params}} as the distribution parameter.

===Parameters===
{{par begin}}
{{par | lambda | the ''λ'' distribution parameter (the rate parameter)}}
{{par | params | the distribution parameter set}}
{{par end}}

===Notes===
Requires that {{math|0 &lt; lambda}}.

[[de:cpp/numeric/random/exponential distribution/exponential distribution]]
[[es:cpp/numeric/random/exponential distribution/exponential distribution]]
[[fr:cpp/numeric/random/exponential distribution/exponential distribution]]
[[it:cpp/numeric/random/exponential distribution/exponential distribution]]
[[ja:cpp/numeric/random/exponential distribution/exponential distribution]]
[[pt:cpp/numeric/random/exponential distribution/exponential distribution]]
[[ru:cpp/numeric/random/exponential distribution/exponential distribution]]
[[zh:cpp/numeric/random/exponential distribution/exponential distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/lambda</title>
    <ns>0</ns>
    <id>5153</id>
    <revision>
      <id>63376</id>
      <parentid>61260</parentid>
      <timestamp>2013-07-10T01:30:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1036">{{cpp/numeric/random/exponential_distribution/title|lambda}}
{{cpp/numeric/random/exponential_distribution/navbar}}
{{ddcl | since=c++11 | 1=
RealType lambda() const;
}}

Returns the {{math|λ}} distribution parameter the distribution was constructed with. The parameter defines the rate of events, per unit. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
Floating point value identifying the rate of events per unit

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | exponential_distribution}}
{{dsc end}}

[[de:cpp/numeric/random/exponential distribution/lambda]]
[[es:cpp/numeric/random/exponential distribution/lambda]]
[[fr:cpp/numeric/random/exponential distribution/lambda]]
[[it:cpp/numeric/random/exponential distribution/lambda]]
[[ja:cpp/numeric/random/exponential distribution/lambda]]
[[pt:cpp/numeric/random/exponential distribution/lambda]]
[[ru:cpp/numeric/random/exponential distribution/lambda]]
[[zh:cpp/numeric/random/exponential distribution/lambda]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/max</title>
    <ns>0</ns>
    <id>4007</id>
    <revision>
      <id>50930</id>
      <parentid>43799</parentid>
      <timestamp>2013-06-01T03:45:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/max|exponential_distribution}}

[[de:cpp/numeric/random/exponential distribution/max]]
[[es:cpp/numeric/random/exponential distribution/max]]
[[fr:cpp/numeric/random/exponential distribution/max]]
[[it:cpp/numeric/random/exponential distribution/max]]
[[ja:cpp/numeric/random/exponential distribution/max]]
[[pt:cpp/numeric/random/exponential distribution/max]]
[[ru:cpp/numeric/random/exponential distribution/max]]
[[zh:cpp/numeric/random/exponential distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/min</title>
    <ns>0</ns>
    <id>3981</id>
    <revision>
      <id>50931</id>
      <parentid>43792</parentid>
      <timestamp>2013-06-01T03:45:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/min|exponential_distribution}}

[[de:cpp/numeric/random/exponential distribution/min]]
[[es:cpp/numeric/random/exponential distribution/min]]
[[fr:cpp/numeric/random/exponential distribution/min]]
[[it:cpp/numeric/random/exponential distribution/min]]
[[ja:cpp/numeric/random/exponential distribution/min]]
[[pt:cpp/numeric/random/exponential distribution/min]]
[[ru:cpp/numeric/random/exponential distribution/min]]
[[zh:cpp/numeric/random/exponential distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/operator cmp</title>
    <ns>0</ns>
    <id>4147</id>
    <revision>
      <id>50932</id>
      <parentid>43779</parentid>
      <timestamp>2013-06-01T03:45:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="599">{{include page|cpp/numeric/random/distribution/operator_cmp|exponential_distribution}}

[[de:cpp/numeric/random/exponential distribution/operator cmp]]
[[es:cpp/numeric/random/exponential distribution/operator cmp]]
[[fr:cpp/numeric/random/exponential distribution/operator cmp]]
[[it:cpp/numeric/random/exponential distribution/operator cmp]]
[[ja:cpp/numeric/random/exponential distribution/operator cmp]]
[[pt:cpp/numeric/random/exponential distribution/operator cmp]]
[[ru:cpp/numeric/random/exponential distribution/operator cmp]]
[[zh:cpp/numeric/random/exponential distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4532</id>
    <revision>
      <id>50933</id>
      <parentid>43773</parentid>
      <timestamp>2013-06-01T03:45:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="644">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|exponential_distribution}}

[[de:cpp/numeric/random/exponential distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/exponential distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/exponential distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/exponential distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/exponential distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/exponential distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/exponential distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/exponential distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/operator()</title>
    <ns>0</ns>
    <id>4105</id>
    <revision>
      <id>43787</id>
      <parentid>15054</parentid>
      <timestamp>2012-11-03T03:50:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="568">{{cpp/numeric/random/distribution/operator()|exponential_distribution}}

[[de:cpp/numeric/random/exponential distribution/operator()]]
[[es:cpp/numeric/random/exponential distribution/operator()]]
[[fr:cpp/numeric/random/exponential distribution/operator()]]
[[it:cpp/numeric/random/exponential distribution/operator()]]
[[ja:cpp/numeric/random/exponential distribution/operator()]]
[[pt:cpp/numeric/random/exponential distribution/operator()]]
[[ru:cpp/numeric/random/exponential distribution/operator()]]
[[zh:cpp/numeric/random/exponential distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/param</title>
    <ns>0</ns>
    <id>4127</id>
    <revision>
      <id>50934</id>
      <parentid>43768</parentid>
      <timestamp>2013-06-01T03:45:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/param|exponential_distribution}}

[[de:cpp/numeric/random/exponential distribution/param]]
[[es:cpp/numeric/random/exponential distribution/param]]
[[fr:cpp/numeric/random/exponential distribution/param]]
[[it:cpp/numeric/random/exponential distribution/param]]
[[ja:cpp/numeric/random/exponential distribution/param]]
[[pt:cpp/numeric/random/exponential distribution/param]]
[[ru:cpp/numeric/random/exponential distribution/param]]
[[zh:cpp/numeric/random/exponential distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/exponential distribution/reset</title>
    <ns>0</ns>
    <id>4082</id>
    <revision>
      <id>50935</id>
      <parentid>43763</parentid>
      <timestamp>2013-06-01T03:45:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/reset|exponential_distribution}}

[[de:cpp/numeric/random/exponential distribution/reset]]
[[es:cpp/numeric/random/exponential distribution/reset]]
[[fr:cpp/numeric/random/exponential distribution/reset]]
[[it:cpp/numeric/random/exponential distribution/reset]]
[[ja:cpp/numeric/random/exponential distribution/reset]]
[[pt:cpp/numeric/random/exponential distribution/reset]]
[[ru:cpp/numeric/random/exponential distribution/reset]]
[[zh:cpp/numeric/random/exponential distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution</title>
    <ns>0</ns>
    <id>3919</id>
    <revision>
      <id>75939</id>
      <parentid>73227</parentid>
      <timestamp>2015-02-05T03:10:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="2489">{{cpp/title|extreme_value_distribution}}
{{cpp/numeric/random/extreme_value_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class extreme_value_distribution;
}}

Produces random numbers according to the [[enwiki:Generalized extreme value distribution|extreme value distribution]] (it is also known as Gumbel Type I, log-Weibull, Fisher-Tippett Type I):

:{{math|p(x;a,b) {{=}} {{mfrac||1|b}} exp{{mparen|(|)| {{mfrac||a-x|b}} - exp{{mparen|(|)| {{mfrac||a-x|b}} }} }} }}

{{tt|std::extreme_value_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | extreme_value_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | extreme_value_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | extreme_value_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | extreme_value_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | extreme_value_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | extreme_value_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | extreme_value_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | extreme_value_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | extreme_value_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===External links===
[http://mathworld.wolfram.com/ExtremeValueDistribution.html Weisstein, Eric W. &quot;Extreme Value Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/extreme value distribution]]
[[es:cpp/numeric/random/extreme value distribution]]
[[fr:cpp/numeric/random/extreme value distribution]]
[[it:cpp/numeric/random/extreme value distribution]]
[[ja:cpp/numeric/random/extreme value distribution]]
[[pt:cpp/numeric/random/extreme value distribution]]
[[ru:cpp/numeric/random/extreme value distribution]]
[[zh:cpp/numeric/random/extreme value distribution]]</text>
      <sha1>k3bmaifmnjy4k55kkqlqeoh3g5z48ta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/a</title>
    <ns>0</ns>
    <id>8903</id>
    <redirect title="cpp/numeric/random/extreme value distribution/params" />
    <revision>
      <id>61227</id>
      <parentid>58692</parentid>
      <timestamp>2013-06-05T12:31:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/extreme value distribution/params]]</comment>
      <text xml:space="preserve" bytes="66">#redirect [[cpp/numeric/random/extreme_value_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/b</title>
    <ns>0</ns>
    <id>8904</id>
    <redirect title="cpp/numeric/random/extreme value distribution/params" />
    <revision>
      <id>61229</id>
      <parentid>58693</parentid>
      <timestamp>2013-06-05T12:31:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/extreme value distribution/params]]</comment>
      <text xml:space="preserve" bytes="66">#redirect [[cpp/numeric/random/extreme_value_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/extreme value distribution</title>
    <ns>0</ns>
    <id>4927</id>
    <revision>
      <id>62895</id>
      <parentid>50356</parentid>
      <timestamp>2013-07-01T23:45:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1411">{{cpp/numeric/random/extreme_value_distribution/title|extreme_value_distribution}}
{{cpp/numeric/random/extreme_value_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit extreme_value_distribution( RealType a = 0.0, RealType b = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit extreme_value_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|a}} and {{tt|b}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | a | the ''a'' distribution parameter (location)}}
{{par | b | the ''b'' distribution parameter (scale)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/extreme value distribution/extreme value distribution]]
[[es:cpp/numeric/random/extreme value distribution/extreme value distribution]]
[[fr:cpp/numeric/random/extreme value distribution/extreme value distribution]]
[[it:cpp/numeric/random/extreme value distribution/extreme value distribution]]
[[ja:cpp/numeric/random/extreme value distribution/extreme value distribution]]
[[pt:cpp/numeric/random/extreme value distribution/extreme value distribution]]
[[ru:cpp/numeric/random/extreme value distribution/extreme value distribution]]
[[zh:cpp/numeric/random/extreme value distribution/extreme value distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/max</title>
    <ns>0</ns>
    <id>4010</id>
    <revision>
      <id>50936</id>
      <parentid>43730</parentid>
      <timestamp>2013-06-01T03:45:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/max|extreme_value_distribution}}

[[de:cpp/numeric/random/extreme value distribution/max]]
[[es:cpp/numeric/random/extreme value distribution/max]]
[[fr:cpp/numeric/random/extreme value distribution/max]]
[[it:cpp/numeric/random/extreme value distribution/max]]
[[ja:cpp/numeric/random/extreme value distribution/max]]
[[pt:cpp/numeric/random/extreme value distribution/max]]
[[ru:cpp/numeric/random/extreme value distribution/max]]
[[zh:cpp/numeric/random/extreme value distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/min</title>
    <ns>0</ns>
    <id>3975</id>
    <revision>
      <id>50937</id>
      <parentid>43724</parentid>
      <timestamp>2013-06-01T03:45:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/min|extreme_value_distribution}}

[[de:cpp/numeric/random/extreme value distribution/min]]
[[es:cpp/numeric/random/extreme value distribution/min]]
[[fr:cpp/numeric/random/extreme value distribution/min]]
[[it:cpp/numeric/random/extreme value distribution/min]]
[[ja:cpp/numeric/random/extreme value distribution/min]]
[[pt:cpp/numeric/random/extreme value distribution/min]]
[[ru:cpp/numeric/random/extreme value distribution/min]]
[[zh:cpp/numeric/random/extreme value distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/operator cmp</title>
    <ns>0</ns>
    <id>4150</id>
    <revision>
      <id>50938</id>
      <parentid>43712</parentid>
      <timestamp>2013-06-01T03:45:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="617">{{include page|cpp/numeric/random/distribution/operator_cmp|extreme_value_distribution}}

[[de:cpp/numeric/random/extreme value distribution/operator cmp]]
[[es:cpp/numeric/random/extreme value distribution/operator cmp]]
[[fr:cpp/numeric/random/extreme value distribution/operator cmp]]
[[it:cpp/numeric/random/extreme value distribution/operator cmp]]
[[ja:cpp/numeric/random/extreme value distribution/operator cmp]]
[[pt:cpp/numeric/random/extreme value distribution/operator cmp]]
[[ru:cpp/numeric/random/extreme value distribution/operator cmp]]
[[zh:cpp/numeric/random/extreme value distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4529</id>
    <revision>
      <id>50939</id>
      <parentid>43706</parentid>
      <timestamp>2013-06-01T03:45:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="662">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|extreme_value_distribution}}

[[de:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/extreme value distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/operator()</title>
    <ns>0</ns>
    <id>4108</id>
    <revision>
      <id>43718</id>
      <parentid>15057</parentid>
      <timestamp>2012-11-03T03:36:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="586">{{cpp/numeric/random/distribution/operator()|extreme_value_distribution}}

[[de:cpp/numeric/random/extreme value distribution/operator()]]
[[es:cpp/numeric/random/extreme value distribution/operator()]]
[[fr:cpp/numeric/random/extreme value distribution/operator()]]
[[it:cpp/numeric/random/extreme value distribution/operator()]]
[[ja:cpp/numeric/random/extreme value distribution/operator()]]
[[pt:cpp/numeric/random/extreme value distribution/operator()]]
[[ru:cpp/numeric/random/extreme value distribution/operator()]]
[[zh:cpp/numeric/random/extreme value distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/param</title>
    <ns>0</ns>
    <id>4129</id>
    <revision>
      <id>50940</id>
      <parentid>43700</parentid>
      <timestamp>2013-06-01T03:45:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="554">{{include page|cpp/numeric/random/distribution/param|extreme_value_distribution}}

[[de:cpp/numeric/random/extreme value distribution/param]]
[[es:cpp/numeric/random/extreme value distribution/param]]
[[fr:cpp/numeric/random/extreme value distribution/param]]
[[it:cpp/numeric/random/extreme value distribution/param]]
[[ja:cpp/numeric/random/extreme value distribution/param]]
[[pt:cpp/numeric/random/extreme value distribution/param]]
[[ru:cpp/numeric/random/extreme value distribution/param]]
[[zh:cpp/numeric/random/extreme value distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/params</title>
    <ns>0</ns>
    <id>12603</id>
    <revision>
      <id>61245</id>
      <timestamp>2013-06-05T12:49:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="774">{{cpp/numeric/random/extreme_value_distribution/title|a, b}}
{{cpp/numeric/random/extreme_value_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
RealType a() const;
}}
{{dcl | since=c++11 | num=2 |
RealType b() const;
}}
{{dcl end}}

Returns the parameters the distribution was constructed with.

@1@ Returns the {{math|a}} distribution parameter (scale). The default value is {{c|1.0}}.

@2@ Returns the {{math|b}} distribution parameter (location). The default value is {{c|0.0}}.

===Parameters===
(none)

===Return value===
@1@ The {{math|a}} distribution parameter (scale).

@2@ The {{math|b}} distribution parameter (scale).

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | extreme_value_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/extreme value distribution/reset</title>
    <ns>0</ns>
    <id>4085</id>
    <revision>
      <id>50941</id>
      <parentid>43695</parentid>
      <timestamp>2013-06-01T03:45:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="554">{{include page|cpp/numeric/random/distribution/reset|extreme_value_distribution}}

[[de:cpp/numeric/random/extreme value distribution/reset]]
[[es:cpp/numeric/random/extreme value distribution/reset]]
[[fr:cpp/numeric/random/extreme value distribution/reset]]
[[it:cpp/numeric/random/extreme value distribution/reset]]
[[ja:cpp/numeric/random/extreme value distribution/reset]]
[[pt:cpp/numeric/random/extreme value distribution/reset]]
[[ru:cpp/numeric/random/extreme value distribution/reset]]
[[zh:cpp/numeric/random/extreme value distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution</title>
    <ns>0</ns>
    <id>3924</id>
    <revision>
      <id>75944</id>
      <parentid>73232</parentid>
      <timestamp>2015-02-05T03:13:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="2374">{{cpp/title|fisher_f_distribution}}
{{cpp/numeric/random/fisher_f_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class fisher_f_distribution;
}}

Produces random numbers according to the [[enwiki:F-distribution|f-distribution]]:

:{{math|p(x;m,n) {{=}} {{mfrac|| Γ((m+n)/2) | Γ(m/2) Γ(n/2) }} (m/n){{su|p=m/2}} x{{su|p=(m/2)-1}} (1+{{mfrac||mx|n}}){{su|p=-(m+n)/2}}}}

{{math|m}} and {{math|n}} are the [[enwiki:degrees of freedom (statistics)|degrees of freedom]].

{{tt|std::fisher_f_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}
===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | fisher_f_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | fisher_f_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | fisher_f_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | fisher_f_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | fisher_f_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | fisher_f_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | fisher_f_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | fisher_f_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | fisher_f_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===External links===
[http://mathworld.wolfram.com/F-Distribution.html Weisstein, Eric W. &quot;F-Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/fisher f distribution]]
[[es:cpp/numeric/random/fisher f distribution]]
[[fr:cpp/numeric/random/fisher f distribution]]
[[it:cpp/numeric/random/fisher f distribution]]
[[ja:cpp/numeric/random/fisher f distribution]]
[[pt:cpp/numeric/random/fisher f distribution]]
[[ru:cpp/numeric/random/fisher f distribution]]
[[zh:cpp/numeric/random/fisher f distribution]]</text>
      <sha1>6k05370ny7u27196mpsbwkd1n5i845p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/fisher f distribution</title>
    <ns>0</ns>
    <id>4963</id>
    <revision>
      <id>62896</id>
      <parentid>50358</parentid>
      <timestamp>2013-07-01T23:45:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1329">{{cpp/numeric/random/fisher_f_distribution/title|fisher_f_distribution}}
{{cpp/numeric/random/fisher_f_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit fisher_f_distribution( RealType m = 1.0, RealType n = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit fisher_f_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|m}} and {{tt|n}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | m | the ''m'' distribution parameter (degrees of freedom)}}
{{par | n | the ''n'' distribution parameter (degrees of freedom)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/fisher f distribution/fisher f distribution]]
[[es:cpp/numeric/random/fisher f distribution/fisher f distribution]]
[[fr:cpp/numeric/random/fisher f distribution/fisher f distribution]]
[[it:cpp/numeric/random/fisher f distribution/fisher f distribution]]
[[ja:cpp/numeric/random/fisher f distribution/fisher f distribution]]
[[pt:cpp/numeric/random/fisher f distribution/fisher f distribution]]
[[ru:cpp/numeric/random/fisher f distribution/fisher f distribution]]
[[zh:cpp/numeric/random/fisher f distribution/fisher f distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/m</title>
    <ns>0</ns>
    <id>12587</id>
    <redirect title="cpp/numeric/random/fisher f distribution/params" />
    <revision>
      <id>61121</id>
      <parentid>61093</parentid>
      <timestamp>2013-06-05T11:50:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/fisher f distribution/params]]</comment>
      <text xml:space="preserve" bytes="61">#redirect [[cpp/numeric/random/fisher_f_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/max</title>
    <ns>0</ns>
    <id>4015</id>
    <revision>
      <id>50942</id>
      <parentid>43679</parentid>
      <timestamp>2013-06-01T03:45:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/max|fisher_f_distribution}}

[[de:cpp/numeric/random/fisher f distribution/max]]
[[es:cpp/numeric/random/fisher f distribution/max]]
[[fr:cpp/numeric/random/fisher f distribution/max]]
[[it:cpp/numeric/random/fisher f distribution/max]]
[[ja:cpp/numeric/random/fisher f distribution/max]]
[[pt:cpp/numeric/random/fisher f distribution/max]]
[[ru:cpp/numeric/random/fisher f distribution/max]]
[[zh:cpp/numeric/random/fisher f distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/min</title>
    <ns>0</ns>
    <id>3970</id>
    <revision>
      <id>50943</id>
      <parentid>43673</parentid>
      <timestamp>2013-06-01T03:45:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/min|fisher_f_distribution}}

[[de:cpp/numeric/random/fisher f distribution/min]]
[[es:cpp/numeric/random/fisher f distribution/min]]
[[fr:cpp/numeric/random/fisher f distribution/min]]
[[it:cpp/numeric/random/fisher f distribution/min]]
[[ja:cpp/numeric/random/fisher f distribution/min]]
[[pt:cpp/numeric/random/fisher f distribution/min]]
[[ru:cpp/numeric/random/fisher f distribution/min]]
[[zh:cpp/numeric/random/fisher f distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/n</title>
    <ns>0</ns>
    <id>12586</id>
    <redirect title="cpp/numeric/random/fisher f distribution/params" />
    <revision>
      <id>61119</id>
      <parentid>61089</parentid>
      <timestamp>2013-06-05T11:48:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/fisher f distribution/params]]</comment>
      <text xml:space="preserve" bytes="61">#redirect [[cpp/numeric/random/fisher_f_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/operator cmp</title>
    <ns>0</ns>
    <id>4155</id>
    <revision>
      <id>50944</id>
      <parentid>43661</parentid>
      <timestamp>2013-06-01T03:45:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="572">{{include page|cpp/numeric/random/distribution/operator_cmp|fisher_f_distribution}}

[[de:cpp/numeric/random/fisher f distribution/operator cmp]]
[[es:cpp/numeric/random/fisher f distribution/operator cmp]]
[[fr:cpp/numeric/random/fisher f distribution/operator cmp]]
[[it:cpp/numeric/random/fisher f distribution/operator cmp]]
[[ja:cpp/numeric/random/fisher f distribution/operator cmp]]
[[pt:cpp/numeric/random/fisher f distribution/operator cmp]]
[[ru:cpp/numeric/random/fisher f distribution/operator cmp]]
[[zh:cpp/numeric/random/fisher f distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4524</id>
    <revision>
      <id>50945</id>
      <parentid>43655</parentid>
      <timestamp>2013-06-01T03:45:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="617">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|fisher_f_distribution}}

[[de:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/fisher f distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/operator()</title>
    <ns>0</ns>
    <id>4110</id>
    <revision>
      <id>43667</id>
      <parentid>15059</parentid>
      <timestamp>2012-11-03T03:27:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="541">{{cpp/numeric/random/distribution/operator()|fisher_f_distribution}}

[[de:cpp/numeric/random/fisher f distribution/operator()]]
[[es:cpp/numeric/random/fisher f distribution/operator()]]
[[fr:cpp/numeric/random/fisher f distribution/operator()]]
[[it:cpp/numeric/random/fisher f distribution/operator()]]
[[ja:cpp/numeric/random/fisher f distribution/operator()]]
[[pt:cpp/numeric/random/fisher f distribution/operator()]]
[[ru:cpp/numeric/random/fisher f distribution/operator()]]
[[zh:cpp/numeric/random/fisher f distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/param</title>
    <ns>0</ns>
    <id>4133</id>
    <revision>
      <id>50946</id>
      <parentid>43650</parentid>
      <timestamp>2013-06-01T03:46:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="509">{{include page|cpp/numeric/random/distribution/param|fisher_f_distribution}}

[[de:cpp/numeric/random/fisher f distribution/param]]
[[es:cpp/numeric/random/fisher f distribution/param]]
[[fr:cpp/numeric/random/fisher f distribution/param]]
[[it:cpp/numeric/random/fisher f distribution/param]]
[[ja:cpp/numeric/random/fisher f distribution/param]]
[[pt:cpp/numeric/random/fisher f distribution/param]]
[[ru:cpp/numeric/random/fisher f distribution/param]]
[[zh:cpp/numeric/random/fisher f distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/params</title>
    <ns>0</ns>
    <id>12596</id>
    <revision>
      <id>61253</id>
      <parentid>61120</parentid>
      <timestamp>2013-06-05T13:01:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ce</comment>
      <text xml:space="preserve" bytes="877">{{cpp/numeric/random/fisher_f_distribution/title | m, n}}
{{cpp/numeric/random/fisher_f_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
RealType m() const;
}}
{{dcl | since=c++11 | num=2 |
RealType n() const;
}}
{{dcl end}}

Returns the parameters the distribution was constructed with.

@1@ Returns the {{math|m}} (the first degree of freedom) distribution parameter. The default value is {{c|1.0}}.

@2@ Returns the {{math|n}} (the second degree of freedom) distribution parameter. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
@1@ The {{math|m}} (the first degree of freedom) distribution parameter.

@2@ The {{math|n}} (the second degree of freedom) distribution parameter. 

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | fisher_f_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/fisher f distribution/reset</title>
    <ns>0</ns>
    <id>4090</id>
    <revision>
      <id>50947</id>
      <parentid>43644</parentid>
      <timestamp>2013-06-01T03:46:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="509">{{include page|cpp/numeric/random/distribution/reset|fisher_f_distribution}}

[[de:cpp/numeric/random/fisher f distribution/reset]]
[[es:cpp/numeric/random/fisher f distribution/reset]]
[[fr:cpp/numeric/random/fisher f distribution/reset]]
[[it:cpp/numeric/random/fisher f distribution/reset]]
[[ja:cpp/numeric/random/fisher f distribution/reset]]
[[pt:cpp/numeric/random/fisher f distribution/reset]]
[[ru:cpp/numeric/random/fisher f distribution/reset]]
[[zh:cpp/numeric/random/fisher f distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution</title>
    <ns>0</ns>
    <id>3917</id>
    <revision>
      <id>85842</id>
      <parentid>75937</parentid>
      <timestamp>2016-05-23T13:31:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Mentioned the k,θ notation</comment>
      <text xml:space="preserve" bytes="2611">{{cpp/title|gamma_distribution}}
{{cpp/numeric/random/gamma_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class gamma_distribution;
}}

Produces random positive floating-point values {{math|x}}, distributed according to probability density function:

:{{math|P(x{{!}}α,β) {{=}} {{mfrac|e{{su|p=-x/β}}|β{{su|p=α}} · Γ(α)}} · x{{su|p=α-1}}}}

where {{math|α}} is known as the ''shape'' parameter and {{math|β}} is known as the ''scale'' parameter. The shape parameter is sometimes denoted by the letter {{math|k}} and the scale parameter is sometimes denoted by the letter {{math|θ}}.

For floating-point {{math|α}}, the value obtained is the sum of {{math|α}} independent exponentially distributed random variables, each of which has a mean of {{math|β}}

{{tt|std::gamma_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | gamma_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | gamma_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | gamma_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | gamma_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | gamma_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | gamma_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | gamma_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | gamma_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | gamma_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===External links===
[http://mathworld.wolfram.com/GammaDistribution.html Weisstein, Eric W. &quot;Gamma Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/gamma distribution]]
[[es:cpp/numeric/random/gamma distribution]]
[[fr:cpp/numeric/random/gamma distribution]]
[[it:cpp/numeric/random/gamma distribution]]
[[ja:cpp/numeric/random/gamma distribution]]
[[pt:cpp/numeric/random/gamma distribution]]
[[ru:cpp/numeric/random/gamma distribution]]
[[zh:cpp/numeric/random/gamma distribution]]</text>
      <sha1>fj1hs1mf5vt2d3hps2smbj15usfj4ah</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/alpha</title>
    <ns>0</ns>
    <id>5173</id>
    <redirect title="cpp/numeric/random/gamma distribution/params" />
    <revision>
      <id>61111</id>
      <parentid>61110</parentid>
      <timestamp>2013-06-05T11:42:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/gamma distribution/params]]</comment>
      <text xml:space="preserve" bytes="58">#redirect [[cpp/numeric/random/gamma_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/beta</title>
    <ns>0</ns>
    <id>5174</id>
    <redirect title="cpp/numeric/random/gamma distribution/params" />
    <revision>
      <id>61114</id>
      <parentid>58701</parentid>
      <timestamp>2013-06-05T11:42:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/gamma distribution/params]]</comment>
      <text xml:space="preserve" bytes="58">#redirect [[cpp/numeric/random/gamma_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/gamma distribution</title>
    <ns>0</ns>
    <id>4925</id>
    <revision>
      <id>69663</id>
      <parentid>62897</parentid>
      <timestamp>2014-04-17T22:48:21Z</timestamp>
      <contributor>
        <username>Jagerman</username>
        <id>2857</id>
      </contributor>
      <comment>&quot;scale&quot; and &quot;shape&quot; parenthetical text was reversed.  Fixed it, so that it now agrees with the class description.</comment>
      <text xml:space="preserve" bytes="1263">{{cpp/numeric/random/gamma_distribution/title|gamma_distribution}}
{{cpp/numeric/random/gamma_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit gamma_distribution( RealType alpha = 1.0, RealType beta = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit gamma_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|alpha}} and {{tt|beta}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | alpha | the ''α'' distribution parameter (shape)}}
{{par | beta | the ''β'' distribution parameter (scale)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/gamma distribution/gamma distribution]]
[[es:cpp/numeric/random/gamma distribution/gamma distribution]]
[[fr:cpp/numeric/random/gamma distribution/gamma distribution]]
[[it:cpp/numeric/random/gamma distribution/gamma distribution]]
[[ja:cpp/numeric/random/gamma distribution/gamma distribution]]
[[pt:cpp/numeric/random/gamma distribution/gamma distribution]]
[[ru:cpp/numeric/random/gamma distribution/gamma distribution]]
[[zh:cpp/numeric/random/gamma distribution/gamma distribution]]</text>
      <sha1>3juq28qcm1mk5n40defrw9vxlibpu1o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/max</title>
    <ns>0</ns>
    <id>4008</id>
    <revision>
      <id>50948</id>
      <parentid>43618</parentid>
      <timestamp>2013-06-01T03:46:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="464">{{include page|cpp/numeric/random/distribution/max|gamma_distribution}}

[[de:cpp/numeric/random/gamma distribution/max]]
[[es:cpp/numeric/random/gamma distribution/max]]
[[fr:cpp/numeric/random/gamma distribution/max]]
[[it:cpp/numeric/random/gamma distribution/max]]
[[ja:cpp/numeric/random/gamma distribution/max]]
[[pt:cpp/numeric/random/gamma distribution/max]]
[[ru:cpp/numeric/random/gamma distribution/max]]
[[zh:cpp/numeric/random/gamma distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/min</title>
    <ns>0</ns>
    <id>3977</id>
    <revision>
      <id>50949</id>
      <parentid>43613</parentid>
      <timestamp>2013-06-01T03:46:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="464">{{include page|cpp/numeric/random/distribution/min|gamma_distribution}}

[[de:cpp/numeric/random/gamma distribution/min]]
[[es:cpp/numeric/random/gamma distribution/min]]
[[fr:cpp/numeric/random/gamma distribution/min]]
[[it:cpp/numeric/random/gamma distribution/min]]
[[ja:cpp/numeric/random/gamma distribution/min]]
[[pt:cpp/numeric/random/gamma distribution/min]]
[[ru:cpp/numeric/random/gamma distribution/min]]
[[zh:cpp/numeric/random/gamma distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/operator cmp</title>
    <ns>0</ns>
    <id>4148</id>
    <revision>
      <id>50950</id>
      <parentid>43601</parentid>
      <timestamp>2013-06-01T03:46:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="545">{{include page|cpp/numeric/random/distribution/operator_cmp|gamma_distribution}}

[[de:cpp/numeric/random/gamma distribution/operator cmp]]
[[es:cpp/numeric/random/gamma distribution/operator cmp]]
[[fr:cpp/numeric/random/gamma distribution/operator cmp]]
[[it:cpp/numeric/random/gamma distribution/operator cmp]]
[[ja:cpp/numeric/random/gamma distribution/operator cmp]]
[[pt:cpp/numeric/random/gamma distribution/operator cmp]]
[[ru:cpp/numeric/random/gamma distribution/operator cmp]]
[[zh:cpp/numeric/random/gamma distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4531</id>
    <revision>
      <id>50951</id>
      <parentid>43595</parentid>
      <timestamp>2013-06-01T03:46:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="590">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|gamma_distribution}}

[[de:cpp/numeric/random/gamma distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/gamma distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/gamma distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/gamma distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/gamma distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/gamma distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/gamma distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/gamma distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/operator()</title>
    <ns>0</ns>
    <id>4106</id>
    <revision>
      <id>43607</id>
      <parentid>15055</parentid>
      <timestamp>2012-11-03T03:16:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="514">{{cpp/numeric/random/distribution/operator()|gamma_distribution}}

[[de:cpp/numeric/random/gamma distribution/operator()]]
[[es:cpp/numeric/random/gamma distribution/operator()]]
[[fr:cpp/numeric/random/gamma distribution/operator()]]
[[it:cpp/numeric/random/gamma distribution/operator()]]
[[ja:cpp/numeric/random/gamma distribution/operator()]]
[[pt:cpp/numeric/random/gamma distribution/operator()]]
[[ru:cpp/numeric/random/gamma distribution/operator()]]
[[zh:cpp/numeric/random/gamma distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/param</title>
    <ns>0</ns>
    <id>4128</id>
    <revision>
      <id>50952</id>
      <parentid>43589</parentid>
      <timestamp>2013-06-01T03:46:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="482">{{include page|cpp/numeric/random/distribution/param|gamma_distribution}}

[[de:cpp/numeric/random/gamma distribution/param]]
[[es:cpp/numeric/random/gamma distribution/param]]
[[fr:cpp/numeric/random/gamma distribution/param]]
[[it:cpp/numeric/random/gamma distribution/param]]
[[ja:cpp/numeric/random/gamma distribution/param]]
[[pt:cpp/numeric/random/gamma distribution/param]]
[[ru:cpp/numeric/random/gamma distribution/param]]
[[zh:cpp/numeric/random/gamma distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/params</title>
    <ns>0</ns>
    <id>12594</id>
    <revision>
      <id>61259</id>
      <parentid>61141</parentid>
      <timestamp>2013-06-05T13:07:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+default value</comment>
      <text xml:space="preserve" bytes="877">{{cpp/numeric/random/gamma_distribution/title|alpha, beta}}
{{cpp/numeric/random/gamma_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 1=
RealType alpha() const;
}}
{{dcl | since=c++11 | num=2 | 1=
RealType beta() const;
}}
{{dcl end}}

Returns the distribution parameters the distribution has been constructed with.

@1@ Returns the {{math|α}} distribution parameter. It is also known as the shape parameter. The default value is {{c|1.0}}.

@2@ Returns the {{math|β}} distribution parameter. It is also known as the scale parameter. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
@1@ Floating point value identifying the {{math|α}} parameter

@2@ Floating point value identifying the {{math|β}} parameter

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | gamma_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/gamma distribution/reset</title>
    <ns>0</ns>
    <id>4083</id>
    <revision>
      <id>50953</id>
      <parentid>43583</parentid>
      <timestamp>2013-06-01T03:46:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="482">{{include page|cpp/numeric/random/distribution/reset|gamma_distribution}}

[[de:cpp/numeric/random/gamma distribution/reset]]
[[es:cpp/numeric/random/gamma distribution/reset]]
[[fr:cpp/numeric/random/gamma distribution/reset]]
[[it:cpp/numeric/random/gamma distribution/reset]]
[[ja:cpp/numeric/random/gamma distribution/reset]]
[[pt:cpp/numeric/random/gamma distribution/reset]]
[[ru:cpp/numeric/random/gamma distribution/reset]]
[[zh:cpp/numeric/random/gamma distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/generate canonical</title>
    <ns>0</ns>
    <id>4748</id>
    <revision>
      <id>83449</id>
      <parentid>81702</parentid>
      <timestamp>2016-02-11T08:10:49Z</timestamp>
      <contributor>
        <ip>194.254.61.161</ip>
      </contributor>
      <comment>Add header to include</comment>
      <text xml:space="preserve" bytes="2152">{{cpp/title|generate_canonical}}
{{cpp/numeric/random/navbar}}
{{dcl begin}}
{{dcl header | random}}
{{dcl | since=c++11 | 
template&lt; class RealType, size_t bits, class Generator &gt;
RealType generate_canonical( Generator&amp; g );
}}
{{dcl end}}

Generates a random floating point number in range {{math|[0; 1)}}. 

To generate enough entropy, {{c|generate_canonical()}} will call {{c|g()}} exactly k times, where {{math|k {{=}} max(1, ⌈ b / log{{su|b=2}} R ⌉)}} and

* {{c|b {{=}} std::min&lt;std::size_t&gt;(bits, std::numeric_limits&lt;RealType&gt;::digits)}}
* {{c|R {{=}} g.max() - g.min() + 1}}.

===Parameters===
{{par begin}}
{{par | g | generator to use to acquire entropy}}
{{par end}}

===Return value===
Floating point value in range {{math|[0; 1)}}.

===Exceptions===
None except from those thrown by {{tt|g}}

===Notes===
Some existing implementations have a bug where they may occasionally return {{c|1.0}} if {{tt|RealType}} is {{c|float}}  [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63176 GCC #63176] [http://llvm.org/bugs/show_bug.cgi?id=18767 LLVM #18767]. This is [http://open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#2524 LWG issue 2524 ] &lt;!--  
http://stackoverflow.com/questions/25668600/is-1-0-a-valid-random-number --&gt;

===Example===
{{example
| produce random numbers with 10 bits of randomness: this may produce only k*R distinct values
| code=
#include &lt;random&gt;
#include &lt;iostream&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    for(int n=0; n&lt;10; ++n) {
        std::cout &lt;&lt; std::generate_canonical&lt;double, 10&gt;(gen) &lt;&lt; ' ';
    }
}
| output=
0.208143 0.824147 0.0278604 0.343183 0.0173263 0.864057 0.647037 0.539467 0.0583497 0.609219 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/dsc uniform_real_distribution}}
{{dsc end}}

[[de:cpp/numeric/random/generate canonical]]
[[es:cpp/numeric/random/generate canonical]]
[[fr:cpp/numeric/random/generate canonical]]
[[it:cpp/numeric/random/generate canonical]]
[[ja:cpp/numeric/random/generate canonical]]
[[pt:cpp/numeric/random/generate canonical]]
[[ru:cpp/numeric/random/generate canonical]]
[[zh:cpp/numeric/random/generate canonical]]</text>
      <sha1>3za5bp83c7oz1njaf1h6c9z4fwgtg14</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution</title>
    <ns>0</ns>
    <id>3929</id>
    <revision>
      <id>75928</id>
      <parentid>75926</parentid>
      <timestamp>2015-02-05T02:59:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>oops, we have a concept for these</comment>
      <text xml:space="preserve" bytes="3275">{{cpp/title|geometric_distribution}}
{{cpp/numeric/random/geometric_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class IntType = int &gt;
class geometric_distribution;
}}

Produces random non-negative integer values {{math|i}}, distributed according to discrete probability function:

:{{math|P(i{{!}}p) {{=}} p · (1 − p){{su|p=i}}}}

The value represents the number of yes/no trials (each succeeding with probability {{math|p}}) which are necessary to obtain a single success.

{{tt|std::geometric_distribution&lt;&gt;(p)}} is exactly equivalent to {{c|std::negative_binomial_distribution&lt;&gt;(1, p)}}. It is also the discrete counterpart of {{lc|std::exponential_distribution}}.

{{tt|std::geometric_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|IntType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|IntType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | geometric_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | geometric_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | geometric_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/geometric_distribution/dsc p}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | geometric_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | geometric_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | geometric_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | geometric_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | geometric_distribution}}
{{dsc end}}

===Example===
{{example
 | geometric_distribution&lt;&gt;(0.5) is the default and represents the number of coin tosses that are required to get heads
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());

    std::geometric_distribution&lt;&gt; d; // same as std::negative_binomial_distribution&lt;&gt; d(1, 0.5);

    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[d(gen)];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; p.first &lt;&lt;
                ' ' &lt;&lt; std::string(p.second/100, '*') &lt;&lt; '\n';
    }
}
 | output=
0 *************************************************
1 *************************
2 ************
3 ******
4 **
5 *
6 
7 
8 
9 
10 
11 
}}

===External links===
[http://mathworld.wolfram.com/GeometricDistribution.html Weisstein, Eric W. &quot;Geometric Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/geometric distribution]]
[[es:cpp/numeric/random/geometric distribution]]
[[fr:cpp/numeric/random/geometric distribution]]
[[it:cpp/numeric/random/geometric distribution]]
[[ja:cpp/numeric/random/geometric distribution]]
[[pt:cpp/numeric/random/geometric distribution]]
[[ru:cpp/numeric/random/geometric distribution]]
[[zh:cpp/numeric/random/geometric distribution]]</text>
      <sha1>ti1fgavt4guy0he5w1oy2epplp76f84</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/geometric distribution</title>
    <ns>0</ns>
    <id>4922</id>
    <revision>
      <id>62898</id>
      <parentid>50365</parentid>
      <timestamp>2013-07-01T23:45:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1317">{{cpp/numeric/random/geometric_distribution/title|geometric_distribution}}
{{cpp/numeric/random/geometric_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit geometric_distribution( double p = 0.5 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit geometric_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs new distribution object. The first version uses {{tt|p}} as the distribution parameter, the second version uses {{tt|params}} as the distribution parameter.

===Parameters===
{{par begin}}
{{par | p | the ''p'' distribution parameter (probability of a trial generating {{c|true}})}}
{{par | params | the distribution parameter set}}
{{par end}}

===Notes===
Requires that {{math|0 &lt; p &lt; 1}}

[[de:cpp/numeric/random/geometric distribution/geometric distribution]]
[[es:cpp/numeric/random/geometric distribution/geometric distribution]]
[[fr:cpp/numeric/random/geometric distribution/geometric distribution]]
[[it:cpp/numeric/random/geometric distribution/geometric distribution]]
[[ja:cpp/numeric/random/geometric distribution/geometric distribution]]
[[pt:cpp/numeric/random/geometric distribution/geometric distribution]]
[[ru:cpp/numeric/random/geometric distribution/geometric distribution]]
[[zh:cpp/numeric/random/geometric distribution/geometric distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/max</title>
    <ns>0</ns>
    <id>4005</id>
    <revision>
      <id>50954</id>
      <parentid>43557</parentid>
      <timestamp>2013-06-01T03:46:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/max|geometric_distribution}}

[[de:cpp/numeric/random/geometric distribution/max]]
[[es:cpp/numeric/random/geometric distribution/max]]
[[fr:cpp/numeric/random/geometric distribution/max]]
[[it:cpp/numeric/random/geometric distribution/max]]
[[ja:cpp/numeric/random/geometric distribution/max]]
[[pt:cpp/numeric/random/geometric distribution/max]]
[[ru:cpp/numeric/random/geometric distribution/max]]
[[zh:cpp/numeric/random/geometric distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/min</title>
    <ns>0</ns>
    <id>3979</id>
    <revision>
      <id>50955</id>
      <parentid>43550</parentid>
      <timestamp>2013-06-01T03:46:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/min|geometric_distribution}}

[[de:cpp/numeric/random/geometric distribution/min]]
[[es:cpp/numeric/random/geometric distribution/min]]
[[fr:cpp/numeric/random/geometric distribution/min]]
[[it:cpp/numeric/random/geometric distribution/min]]
[[ja:cpp/numeric/random/geometric distribution/min]]
[[pt:cpp/numeric/random/geometric distribution/min]]
[[ru:cpp/numeric/random/geometric distribution/min]]
[[zh:cpp/numeric/random/geometric distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/operator cmp</title>
    <ns>0</ns>
    <id>4145</id>
    <revision>
      <id>50956</id>
      <parentid>43539</parentid>
      <timestamp>2013-06-01T03:46:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/operator_cmp|geometric_distribution}}

[[de:cpp/numeric/random/geometric distribution/operator cmp]]
[[es:cpp/numeric/random/geometric distribution/operator cmp]]
[[fr:cpp/numeric/random/geometric distribution/operator cmp]]
[[it:cpp/numeric/random/geometric distribution/operator cmp]]
[[ja:cpp/numeric/random/geometric distribution/operator cmp]]
[[pt:cpp/numeric/random/geometric distribution/operator cmp]]
[[ru:cpp/numeric/random/geometric distribution/operator cmp]]
[[zh:cpp/numeric/random/geometric distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4534</id>
    <revision>
      <id>50957</id>
      <parentid>43533</parentid>
      <timestamp>2013-06-01T03:46:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="626">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|geometric_distribution}}

[[de:cpp/numeric/random/geometric distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/geometric distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/geometric distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/geometric distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/geometric distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/geometric distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/geometric distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/geometric distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/operator()</title>
    <ns>0</ns>
    <id>4103</id>
    <revision>
      <id>43544</id>
      <parentid>15052</parentid>
      <timestamp>2012-11-03T03:06:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="550">{{cpp/numeric/random/distribution/operator()|geometric_distribution}}

[[de:cpp/numeric/random/geometric distribution/operator()]]
[[es:cpp/numeric/random/geometric distribution/operator()]]
[[fr:cpp/numeric/random/geometric distribution/operator()]]
[[it:cpp/numeric/random/geometric distribution/operator()]]
[[ja:cpp/numeric/random/geometric distribution/operator()]]
[[pt:cpp/numeric/random/geometric distribution/operator()]]
[[ru:cpp/numeric/random/geometric distribution/operator()]]
[[zh:cpp/numeric/random/geometric distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/p</title>
    <ns>0</ns>
    <id>5147</id>
    <revision>
      <id>63382</id>
      <parentid>61262</parentid>
      <timestamp>2013-07-10T01:30:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="992">{{cpp/numeric/random/geometric_distribution/title|p}}
{{cpp/numeric/random/geometric_distribution/navbar}}
{{ddcl | since=c++11 | 1=
double p() const;
}}

Returns the {{math|p}} distribution parameter the distribution was constructed with. The parameter defines the probability of a trial generating {{c|true}}. The default value is {{c|0.5}}.

===Parameters===
(none)

===Return value===
Floating point value identifying the {{math|p}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | geometric_distribution}}
{{dsc end}}

[[de:cpp/numeric/random/geometric distribution/p]]
[[es:cpp/numeric/random/geometric distribution/p]]
[[fr:cpp/numeric/random/geometric distribution/p]]
[[it:cpp/numeric/random/geometric distribution/p]]
[[ja:cpp/numeric/random/geometric distribution/p]]
[[pt:cpp/numeric/random/geometric distribution/p]]
[[ru:cpp/numeric/random/geometric distribution/p]]
[[zh:cpp/numeric/random/geometric distribution/p]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/param</title>
    <ns>0</ns>
    <id>4125</id>
    <revision>
      <id>50958</id>
      <parentid>43521</parentid>
      <timestamp>2013-06-01T03:46:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/param|geometric_distribution}}

[[de:cpp/numeric/random/geometric distribution/param]]
[[es:cpp/numeric/random/geometric distribution/param]]
[[fr:cpp/numeric/random/geometric distribution/param]]
[[it:cpp/numeric/random/geometric distribution/param]]
[[ja:cpp/numeric/random/geometric distribution/param]]
[[pt:cpp/numeric/random/geometric distribution/param]]
[[ru:cpp/numeric/random/geometric distribution/param]]
[[zh:cpp/numeric/random/geometric distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/geometric distribution/reset</title>
    <ns>0</ns>
    <id>4080</id>
    <revision>
      <id>50959</id>
      <parentid>43514</parentid>
      <timestamp>2013-06-01T03:46:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/reset|geometric_distribution}}

[[de:cpp/numeric/random/geometric distribution/reset]]
[[es:cpp/numeric/random/geometric distribution/reset]]
[[fr:cpp/numeric/random/geometric distribution/reset]]
[[it:cpp/numeric/random/geometric distribution/reset]]
[[ja:cpp/numeric/random/geometric distribution/reset]]
[[pt:cpp/numeric/random/geometric distribution/reset]]
[[ru:cpp/numeric/random/geometric distribution/reset]]
[[zh:cpp/numeric/random/geometric distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine</title>
    <ns>0</ns>
    <id>3702</id>
    <revision>
      <id>86105</id>
      <parentid>80875</parentid>
      <timestamp>2016-06-20T17:05:42Z</timestamp>
      <contributor>
        <username>Chortos-2</username>
        <id>5355</id>
      </contributor>
      <minor/>
      <comment>/* Template parameters */ digits is a variable, not a function</comment>
      <text xml:space="preserve" bytes="2285">{{cpp/title|independent_bits_engine}}
{{cpp/numeric/random/independent_bits_engine/navbar}}
{{dcl begin}}
{{dcl header | random}}
{{dcl | since=c++11 |
template&lt;
    class Engine, 
    std::size_t W, 
    class UIntType
&gt; class independent_bits_engine;
}}
{{dcl end}}

{{tt|independent_bits_engine}} is a random number engine adaptor that produces random numbers with different number of bits than that of the wrapped engine.

===Template parameters===
{{par begin}}
{{par | Engine | the type of the wrapped engine }}
{{par | W | the number of bits the generated numbers should have }}
{{par | UIntType | the type of the generated random numbers. The type must be unsigned integral type. }}
{{par hreq}}
{{par req concept | Engine | RandomNumberEngine}}
{{par req | {{tt|W}} must be greater than zero, and no greater than {{c|std::numeric_limits&lt;UIntType&gt;::digits}}. }}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|UIntType}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc constructor |independent_bits_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc seed |independent_bits_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc base |independent_bits_engine}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator() |independent_bits_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc discard |independent_bits_engine}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/adaptor/dsc min |independent_bits_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc max |independent_bits_engine}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator_cmp |independent_bits_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator_ltltgtgt |independent_bits_engine}}
{{dsc end}}

[[de:cpp/numeric/random/independent bits engine]]
[[es:cpp/numeric/random/independent bits engine]]
[[fr:cpp/numeric/random/independent bits engine]]
[[it:cpp/numeric/random/independent bits engine]]
[[ja:cpp/numeric/random/independent bits engine]]
[[pt:cpp/numeric/random/independent bits engine]]
[[ru:cpp/numeric/random/independent bits engine]]
[[zh:cpp/numeric/random/independent bits engine]]</text>
      <sha1>ao37a78z04tzo61ivxs8jz9obvtavyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/base</title>
    <ns>0</ns>
    <id>8795</id>
    <revision>
      <id>50960</id>
      <parentid>43497</parentid>
      <timestamp>2013-06-01T03:46:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="513">{{include page|cpp/numeric/random/adaptor/base|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/base]]
[[es:cpp/numeric/random/independent bits engine/base]]
[[fr:cpp/numeric/random/independent bits engine/base]]
[[it:cpp/numeric/random/independent bits engine/base]]
[[ja:cpp/numeric/random/independent bits engine/base]]
[[pt:cpp/numeric/random/independent bits engine/base]]
[[ru:cpp/numeric/random/independent bits engine/base]]
[[zh:cpp/numeric/random/independent bits engine/base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/discard</title>
    <ns>0</ns>
    <id>8797</id>
    <revision>
      <id>50961</id>
      <parentid>43490</parentid>
      <timestamp>2013-06-01T03:46:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="540">{{include page|cpp/numeric/random/adaptor/discard|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/discard]]
[[es:cpp/numeric/random/independent bits engine/discard]]
[[fr:cpp/numeric/random/independent bits engine/discard]]
[[it:cpp/numeric/random/independent bits engine/discard]]
[[ja:cpp/numeric/random/independent bits engine/discard]]
[[pt:cpp/numeric/random/independent bits engine/discard]]
[[ru:cpp/numeric/random/independent bits engine/discard]]
[[zh:cpp/numeric/random/independent bits engine/discard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/independent bits engine</title>
    <ns>0</ns>
    <id>8793</id>
    <revision>
      <id>50962</id>
      <parentid>43484</parentid>
      <timestamp>2013-06-01T03:46:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="672">{{include page|cpp/numeric/random/adaptor/constructor|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/independent bits engine]]
[[es:cpp/numeric/random/independent bits engine/independent bits engine]]
[[fr:cpp/numeric/random/independent bits engine/independent bits engine]]
[[it:cpp/numeric/random/independent bits engine/independent bits engine]]
[[ja:cpp/numeric/random/independent bits engine/independent bits engine]]
[[pt:cpp/numeric/random/independent bits engine/independent bits engine]]
[[ru:cpp/numeric/random/independent bits engine/independent bits engine]]
[[zh:cpp/numeric/random/independent bits engine/independent bits engine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/max</title>
    <ns>0</ns>
    <id>8799</id>
    <revision>
      <id>50963</id>
      <parentid>43478</parentid>
      <timestamp>2013-06-01T03:46:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="504">{{include page|cpp/numeric/random/adaptor/max|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/max]]
[[es:cpp/numeric/random/independent bits engine/max]]
[[fr:cpp/numeric/random/independent bits engine/max]]
[[it:cpp/numeric/random/independent bits engine/max]]
[[ja:cpp/numeric/random/independent bits engine/max]]
[[pt:cpp/numeric/random/independent bits engine/max]]
[[ru:cpp/numeric/random/independent bits engine/max]]
[[zh:cpp/numeric/random/independent bits engine/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/min</title>
    <ns>0</ns>
    <id>8798</id>
    <revision>
      <id>50964</id>
      <parentid>43470</parentid>
      <timestamp>2013-06-01T03:46:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="504">{{include page|cpp/numeric/random/adaptor/min|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/min]]
[[es:cpp/numeric/random/independent bits engine/min]]
[[fr:cpp/numeric/random/independent bits engine/min]]
[[it:cpp/numeric/random/independent bits engine/min]]
[[ja:cpp/numeric/random/independent bits engine/min]]
[[pt:cpp/numeric/random/independent bits engine/min]]
[[ru:cpp/numeric/random/independent bits engine/min]]
[[zh:cpp/numeric/random/independent bits engine/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/operator cmp</title>
    <ns>0</ns>
    <id>8800</id>
    <revision>
      <id>50965</id>
      <parentid>43458</parentid>
      <timestamp>2013-06-01T03:46:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="585">{{include page|cpp/numeric/random/adaptor/operator cmp|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/operator cmp]]
[[es:cpp/numeric/random/independent bits engine/operator cmp]]
[[fr:cpp/numeric/random/independent bits engine/operator cmp]]
[[it:cpp/numeric/random/independent bits engine/operator cmp]]
[[ja:cpp/numeric/random/independent bits engine/operator cmp]]
[[pt:cpp/numeric/random/independent bits engine/operator cmp]]
[[ru:cpp/numeric/random/independent bits engine/operator cmp]]
[[zh:cpp/numeric/random/independent bits engine/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/operator ltltgtgt</title>
    <ns>0</ns>
    <id>8801</id>
    <revision>
      <id>50966</id>
      <parentid>43451</parentid>
      <timestamp>2013-06-01T03:46:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="630">{{include page|cpp/numeric/random/adaptor/operator ltltgtgt|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/operator ltltgtgt]]
[[es:cpp/numeric/random/independent bits engine/operator ltltgtgt]]
[[fr:cpp/numeric/random/independent bits engine/operator ltltgtgt]]
[[it:cpp/numeric/random/independent bits engine/operator ltltgtgt]]
[[ja:cpp/numeric/random/independent bits engine/operator ltltgtgt]]
[[pt:cpp/numeric/random/independent bits engine/operator ltltgtgt]]
[[ru:cpp/numeric/random/independent bits engine/operator ltltgtgt]]
[[zh:cpp/numeric/random/independent bits engine/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/operator()</title>
    <ns>0</ns>
    <id>8796</id>
    <revision>
      <id>43463</id>
      <parentid>37167</parentid>
      <timestamp>2012-11-03T02:51:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="554">{{cpp/numeric/random/adaptor/operator()|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/operator()]]
[[es:cpp/numeric/random/independent bits engine/operator()]]
[[fr:cpp/numeric/random/independent bits engine/operator()]]
[[it:cpp/numeric/random/independent bits engine/operator()]]
[[ja:cpp/numeric/random/independent bits engine/operator()]]
[[pt:cpp/numeric/random/independent bits engine/operator()]]
[[ru:cpp/numeric/random/independent bits engine/operator()]]
[[zh:cpp/numeric/random/independent bits engine/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/independent bits engine/seed</title>
    <ns>0</ns>
    <id>8794</id>
    <revision>
      <id>50967</id>
      <parentid>43446</parentid>
      <timestamp>2013-06-01T03:46:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="513">{{include page|cpp/numeric/random/adaptor/seed|independent_bits_engine}}

[[de:cpp/numeric/random/independent bits engine/seed]]
[[es:cpp/numeric/random/independent bits engine/seed]]
[[fr:cpp/numeric/random/independent bits engine/seed]]
[[it:cpp/numeric/random/independent bits engine/seed]]
[[ja:cpp/numeric/random/independent bits engine/seed]]
[[pt:cpp/numeric/random/independent bits engine/seed]]
[[ru:cpp/numeric/random/independent bits engine/seed]]
[[zh:cpp/numeric/random/independent bits engine/seed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine</title>
    <ns>0</ns>
    <id>3115</id>
    <revision>
      <id>87992</id>
      <parentid>63195</parentid>
      <timestamp>2016-10-20T01:06:29Z</timestamp>
      <contributor>
        <ip>104.132.1.69</ip>
      </contributor>
      <text xml:space="preserve" bytes="2842">{{cpp/title|linear_congruential_engine}}
{{cpp/numeric/random/linear_congruential_engine/navbar}}
{{dcl begin}}
{{dcl header | random}}
{{dcl | since=c++11 | 1=
template&lt;
    class UIntType, 
    UIntType a, 
    UIntType c, 
    UIntType m
&gt; class linear_congruential_engine;
}}
{{dcl end}}

{{tt|linear_congruential_engine}} is a random number engine based on [[enwiki:Linear congruential generator|Linear congruential generator (LCG)]]. A LCG has a state that consists of a single integer.

The transition algorithm of the LCG function is {{math|x{{su|b=i+1}} ← (ax{{su|b=i}}+c) mod m}}.

The following typedefs define the random number engine with two commonly used parameter sets:
{{dsc begin}}
{{dsc header | random}}
{{dsc hitem | Type | Definition}}
{{dsc inc | cpp/numeric/random/dsc minstd_rand0}}
{{dsc inc | cpp/numeric/random/dsc minstd_rand}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | The integral type generated by the engine.  Results are undefined if this is not an unsigned integral type.}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc h2 | Construction and Seeding}}
{{dsc inc | cpp/numeric/random/engine/dsc constructor |linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc seed |linear_congruential_engine}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/engine/dsc operator() |linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc discard |linear_congruential_engine}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/engine/dsc min |linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc max |linear_congruential_engine}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_cmp |linear_congruential_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_ltltgtgt |linear_congruential_engine}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} multiplier | the multiplier term (a). }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} increment | the increment term (c). }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} modulus | the modulus term (m). }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} default_seed | the default seed ({{c|1}}). }}
{{dsc end}}

[[de:cpp/numeric/random/linear congruential engine]]
[[es:cpp/numeric/random/linear congruential engine]]
[[fr:cpp/numeric/random/linear congruential engine]]
[[it:cpp/numeric/random/linear congruential engine]]
[[ja:cpp/numeric/random/linear congruential engine]]
[[pt:cpp/numeric/random/linear congruential engine]]
[[ru:cpp/numeric/random/linear congruential engine]]
[[zh:cpp/numeric/random/linear congruential engine]]</text>
      <sha1>i9hqcsj0ivdgth34j028695il29kjjt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/discard</title>
    <ns>0</ns>
    <id>3719</id>
    <revision>
      <id>50968</id>
      <parentid>43436</parentid>
      <timestamp>2013-06-01T03:46:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="566">{{include page|cpp/numeric/random/engine/discard|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/discard]]
[[es:cpp/numeric/random/linear congruential engine/discard]]
[[fr:cpp/numeric/random/linear congruential engine/discard]]
[[it:cpp/numeric/random/linear congruential engine/discard]]
[[ja:cpp/numeric/random/linear congruential engine/discard]]
[[pt:cpp/numeric/random/linear congruential engine/discard]]
[[ru:cpp/numeric/random/linear congruential engine/discard]]
[[zh:cpp/numeric/random/linear congruential engine/discard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/linear congruential engine</title>
    <ns>0</ns>
    <id>3716</id>
    <revision>
      <id>50969</id>
      <parentid>43430</parentid>
      <timestamp>2013-06-01T03:46:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="722">{{include page|cpp/numeric/random/engine/constructor|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/linear congruential engine]]
[[es:cpp/numeric/random/linear congruential engine/linear congruential engine]]
[[fr:cpp/numeric/random/linear congruential engine/linear congruential engine]]
[[it:cpp/numeric/random/linear congruential engine/linear congruential engine]]
[[ja:cpp/numeric/random/linear congruential engine/linear congruential engine]]
[[pt:cpp/numeric/random/linear congruential engine/linear congruential engine]]
[[ru:cpp/numeric/random/linear congruential engine/linear congruential engine]]
[[zh:cpp/numeric/random/linear congruential engine/linear congruential engine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/max</title>
    <ns>0</ns>
    <id>3721</id>
    <revision>
      <id>50970</id>
      <parentid>43423</parentid>
      <timestamp>2013-06-01T03:46:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="530">{{include page|cpp/numeric/random/engine/max|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/max]]
[[es:cpp/numeric/random/linear congruential engine/max]]
[[fr:cpp/numeric/random/linear congruential engine/max]]
[[it:cpp/numeric/random/linear congruential engine/max]]
[[ja:cpp/numeric/random/linear congruential engine/max]]
[[pt:cpp/numeric/random/linear congruential engine/max]]
[[ru:cpp/numeric/random/linear congruential engine/max]]
[[zh:cpp/numeric/random/linear congruential engine/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/min</title>
    <ns>0</ns>
    <id>3720</id>
    <revision>
      <id>50971</id>
      <parentid>43417</parentid>
      <timestamp>2013-06-01T03:46:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="530">{{include page|cpp/numeric/random/engine/min|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/min]]
[[es:cpp/numeric/random/linear congruential engine/min]]
[[fr:cpp/numeric/random/linear congruential engine/min]]
[[it:cpp/numeric/random/linear congruential engine/min]]
[[ja:cpp/numeric/random/linear congruential engine/min]]
[[pt:cpp/numeric/random/linear congruential engine/min]]
[[ru:cpp/numeric/random/linear congruential engine/min]]
[[zh:cpp/numeric/random/linear congruential engine/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/operator cmp</title>
    <ns>0</ns>
    <id>8821</id>
    <revision>
      <id>50972</id>
      <parentid>43402</parentid>
      <timestamp>2013-06-01T03:46:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="611">{{include page|cpp/numeric/random/engine/operator cmp|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/operator cmp]]
[[es:cpp/numeric/random/linear congruential engine/operator cmp]]
[[fr:cpp/numeric/random/linear congruential engine/operator cmp]]
[[it:cpp/numeric/random/linear congruential engine/operator cmp]]
[[ja:cpp/numeric/random/linear congruential engine/operator cmp]]
[[pt:cpp/numeric/random/linear congruential engine/operator cmp]]
[[ru:cpp/numeric/random/linear congruential engine/operator cmp]]
[[zh:cpp/numeric/random/linear congruential engine/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/operator ltltgtgt</title>
    <ns>0</ns>
    <id>3723</id>
    <revision>
      <id>50973</id>
      <parentid>43394</parentid>
      <timestamp>2013-06-01T03:46:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="656">{{include page|cpp/numeric/random/engine/operator_ltltgtgt|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]
[[es:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]
[[fr:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]
[[it:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]
[[ja:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]
[[pt:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]
[[ru:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]
[[zh:cpp/numeric/random/linear congruential engine/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/operator()</title>
    <ns>0</ns>
    <id>3718</id>
    <revision>
      <id>43409</id>
      <parentid>13901</parentid>
      <timestamp>2012-11-03T02:40:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="580">{{cpp/numeric/random/engine/operator()|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/operator()]]
[[es:cpp/numeric/random/linear congruential engine/operator()]]
[[fr:cpp/numeric/random/linear congruential engine/operator()]]
[[it:cpp/numeric/random/linear congruential engine/operator()]]
[[ja:cpp/numeric/random/linear congruential engine/operator()]]
[[pt:cpp/numeric/random/linear congruential engine/operator()]]
[[ru:cpp/numeric/random/linear congruential engine/operator()]]
[[zh:cpp/numeric/random/linear congruential engine/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/linear congruential engine/seed</title>
    <ns>0</ns>
    <id>3717</id>
    <revision>
      <id>50974</id>
      <parentid>43389</parentid>
      <timestamp>2013-06-01T03:46:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="539">{{include page|cpp/numeric/random/engine/seed|linear_congruential_engine}}

[[de:cpp/numeric/random/linear congruential engine/seed]]
[[es:cpp/numeric/random/linear congruential engine/seed]]
[[fr:cpp/numeric/random/linear congruential engine/seed]]
[[it:cpp/numeric/random/linear congruential engine/seed]]
[[ja:cpp/numeric/random/linear congruential engine/seed]]
[[pt:cpp/numeric/random/linear congruential engine/seed]]
[[ru:cpp/numeric/random/linear congruential engine/seed]]
[[zh:cpp/numeric/random/linear congruential engine/seed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution</title>
    <ns>0</ns>
    <id>3921</id>
    <revision>
      <id>75941</id>
      <parentid>73229</parentid>
      <timestamp>2015-02-05T03:11:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="3142">{{cpp/title|lognormal_distribution}}
{{cpp/numeric/random/lognormal_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class lognormal_distribution;
}}

The lognormal_distribution random number distribution produces random numbers {{math|x &gt; 0}} according to a log-normal distribution:

:{{math|f(x; m,s) {{=}} {{mfrac||1|sx{{mrad|2 π}} }} exp{{mparen|(|)|- {{mfrac||(ln x - m){{su|p=2}}| 2s{{su|p=2}}}} }} }}

The parameter {{math|m}} is the mean and the parameter {{math|s}} the standard deviation.

{{tt|std::lognormal_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | lognormal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | lognormal_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | lognormal_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | lognormal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | lognormal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | lognormal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | lognormal_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | lognormal_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | lognormal_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;
#include &lt;cmath&gt;
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());

    std::lognormal_distribution&lt;&gt; d(1.6, 0.25);
 
    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[std::round(d(gen))];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(1) &lt;&lt; std::setw(2)
                  &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; std::string(p.second/200, '*') &lt;&lt; '\n';
    }
}
 | output=
 2 
 3 ***
 4 *************
 5 ***************
 6 *********
 7 ****
 8 *
 9 
10 
11 
12
}}

===External links===
* [http://mathworld.wolfram.com/LogNormalDistribution.html Weisstein, Eric W. &quot;Log Normal Distribution.&quot;] From MathWorld--A Wolfram Web Resource.
* [https://en.wikipedia.org/wiki/Log-normal_distribution Log-normal distribution.] From Wikipedia.

[[de:cpp/numeric/random/lognormal distribution]]
[[es:cpp/numeric/random/lognormal distribution]]
[[fr:cpp/numeric/random/lognormal distribution]]
[[it:cpp/numeric/random/lognormal distribution]]
[[ja:cpp/numeric/random/lognormal distribution]]
[[pt:cpp/numeric/random/lognormal distribution]]
[[ru:cpp/numeric/random/lognormal distribution]]
[[zh:cpp/numeric/random/lognormal distribution]]</text>
      <sha1>pohayozze1j9he5eah1q383ofpu7j8j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/lognormal distribution</title>
    <ns>0</ns>
    <id>4929</id>
    <revision>
      <id>62899</id>
      <parentid>50370</parentid>
      <timestamp>2013-07-01T23:45:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1328">{{cpp/numeric/random/lognormal_distribution/title|lognormal_distribution}}
{{cpp/numeric/random/lognormal_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit lognormal_distribution( RealType m = 0.0, RealType s = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit lognormal_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|m}} and {{tt|s}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | m | the ''m'' distribution parameter (log-scale)}}
{{par | s | the ''s'' distribution parameter (shape)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/lognormal distribution/lognormal distribution]]
[[es:cpp/numeric/random/lognormal distribution/lognormal distribution]]
[[fr:cpp/numeric/random/lognormal distribution/lognormal distribution]]
[[it:cpp/numeric/random/lognormal distribution/lognormal distribution]]
[[ja:cpp/numeric/random/lognormal distribution/lognormal distribution]]
[[pt:cpp/numeric/random/lognormal distribution/lognormal distribution]]
[[ru:cpp/numeric/random/lognormal distribution/lognormal distribution]]
[[zh:cpp/numeric/random/lognormal distribution/lognormal distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/m</title>
    <ns>0</ns>
    <id>8889</id>
    <redirect title="cpp/numeric/random/lognormal distribution/params" />
    <revision>
      <id>61130</id>
      <parentid>58714</parentid>
      <timestamp>2013-06-05T12:13:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/lognormal distribution/params]]</comment>
      <text xml:space="preserve" bytes="62">#redirect [[cpp/numeric/random/lognormal_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/max</title>
    <ns>0</ns>
    <id>4011</id>
    <revision>
      <id>50975</id>
      <parentid>43359</parentid>
      <timestamp>2013-06-01T03:46:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/max|lognormal_distribution}}

[[de:cpp/numeric/random/lognormal distribution/max]]
[[es:cpp/numeric/random/lognormal distribution/max]]
[[fr:cpp/numeric/random/lognormal distribution/max]]
[[it:cpp/numeric/random/lognormal distribution/max]]
[[ja:cpp/numeric/random/lognormal distribution/max]]
[[pt:cpp/numeric/random/lognormal distribution/max]]
[[ru:cpp/numeric/random/lognormal distribution/max]]
[[zh:cpp/numeric/random/lognormal distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/min</title>
    <ns>0</ns>
    <id>3973</id>
    <revision>
      <id>50976</id>
      <parentid>43353</parentid>
      <timestamp>2013-06-01T03:46:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/min|lognormal_distribution}}

[[de:cpp/numeric/random/lognormal distribution/min]]
[[es:cpp/numeric/random/lognormal distribution/min]]
[[fr:cpp/numeric/random/lognormal distribution/min]]
[[it:cpp/numeric/random/lognormal distribution/min]]
[[ja:cpp/numeric/random/lognormal distribution/min]]
[[pt:cpp/numeric/random/lognormal distribution/min]]
[[ru:cpp/numeric/random/lognormal distribution/min]]
[[zh:cpp/numeric/random/lognormal distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/operator cmp</title>
    <ns>0</ns>
    <id>4152</id>
    <revision>
      <id>50977</id>
      <parentid>43340</parentid>
      <timestamp>2013-06-01T03:46:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/operator_cmp|lognormal_distribution}}

[[de:cpp/numeric/random/lognormal distribution/operator cmp]]
[[es:cpp/numeric/random/lognormal distribution/operator cmp]]
[[fr:cpp/numeric/random/lognormal distribution/operator cmp]]
[[it:cpp/numeric/random/lognormal distribution/operator cmp]]
[[ja:cpp/numeric/random/lognormal distribution/operator cmp]]
[[pt:cpp/numeric/random/lognormal distribution/operator cmp]]
[[ru:cpp/numeric/random/lognormal distribution/operator cmp]]
[[zh:cpp/numeric/random/lognormal distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4527</id>
    <revision>
      <id>50978</id>
      <parentid>43333</parentid>
      <timestamp>2013-06-01T03:46:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="626">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|lognormal_distribution}}

[[de:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/lognormal distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/operator()</title>
    <ns>0</ns>
    <id>4111</id>
    <revision>
      <id>43347</id>
      <parentid>15060</parentid>
      <timestamp>2012-11-03T02:28:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="550">{{cpp/numeric/random/distribution/operator()|lognormal_distribution}}

[[de:cpp/numeric/random/lognormal distribution/operator()]]
[[es:cpp/numeric/random/lognormal distribution/operator()]]
[[fr:cpp/numeric/random/lognormal distribution/operator()]]
[[it:cpp/numeric/random/lognormal distribution/operator()]]
[[ja:cpp/numeric/random/lognormal distribution/operator()]]
[[pt:cpp/numeric/random/lognormal distribution/operator()]]
[[ru:cpp/numeric/random/lognormal distribution/operator()]]
[[zh:cpp/numeric/random/lognormal distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/param</title>
    <ns>0</ns>
    <id>4131</id>
    <revision>
      <id>50979</id>
      <parentid>43327</parentid>
      <timestamp>2013-06-01T03:47:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/param|lognormal_distribution}}

[[de:cpp/numeric/random/lognormal distribution/param]]
[[es:cpp/numeric/random/lognormal distribution/param]]
[[fr:cpp/numeric/random/lognormal distribution/param]]
[[it:cpp/numeric/random/lognormal distribution/param]]
[[ja:cpp/numeric/random/lognormal distribution/param]]
[[pt:cpp/numeric/random/lognormal distribution/param]]
[[ru:cpp/numeric/random/lognormal distribution/param]]
[[zh:cpp/numeric/random/lognormal distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/params</title>
    <ns>0</ns>
    <id>12605</id>
    <revision>
      <id>61247</id>
      <timestamp>2013-06-05T12:53:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="795">{{cpp/numeric/random/lognormal_distribution/title|m, s}}
{{cpp/numeric/random/lognormal_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
RealType m() const;
}}
{{dcl | since=c++11 | num=2 |
RealType s() const;
}}
{{dcl end}}

Returns the parameters the distribution was constructed with.

@1@ Returns the mean {{math|m}} distribution parameter. It defines the location of the peak. The default value is {{c|0.0}}.

@2@ Returns the deviation {{math|s}} distribution parameter. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
@1@ The mean {{math|m}} distribution parameter. 

@2@ The deviation {{math|s}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | lognormal_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/reset</title>
    <ns>0</ns>
    <id>4087</id>
    <revision>
      <id>50980</id>
      <parentid>43320</parentid>
      <timestamp>2013-06-01T03:47:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/reset|lognormal_distribution}}

[[de:cpp/numeric/random/lognormal distribution/reset]]
[[es:cpp/numeric/random/lognormal distribution/reset]]
[[fr:cpp/numeric/random/lognormal distribution/reset]]
[[it:cpp/numeric/random/lognormal distribution/reset]]
[[ja:cpp/numeric/random/lognormal distribution/reset]]
[[pt:cpp/numeric/random/lognormal distribution/reset]]
[[ru:cpp/numeric/random/lognormal distribution/reset]]
[[zh:cpp/numeric/random/lognormal distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/lognormal distribution/s</title>
    <ns>0</ns>
    <id>8890</id>
    <redirect title="cpp/numeric/random/lognormal distribution/params" />
    <revision>
      <id>61129</id>
      <parentid>58717</parentid>
      <timestamp>2013-06-05T12:13:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/lognormal distribution/params]]</comment>
      <text xml:space="preserve" bytes="62">#redirect [[cpp/numeric/random/lognormal_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine</title>
    <ns>0</ns>
    <id>3698</id>
    <revision>
      <id>87653</id>
      <parentid>83147</parentid>
      <timestamp>2016-09-17T11:42:04Z</timestamp>
      <contributor>
        <username>Emlai</username>
        <id>5140</id>
      </contributor>
      <minor/>
      <comment>typedef → type alias</comment>
      <text xml:space="preserve" bytes="4880">{{cpp/title|mersenne_twister_engine}}
{{cpp/numeric/random/mersenne_twister_engine/navbar}}
{{dcl begin}}
{{dcl header | random}}
{{dcl | since=c++11 | 1=
template&lt;
    class UIntType, 
    size_t w, size_t n, size_t m, size_t r,
    UIntType a, size_t u, UIntType d, size_t s,
    UIntType b, size_t t,
    UIntType c, size_t l, UIntType f
&gt; class mersenne_twister_engine;
}}
{{dcl end}}

{{tt|mersenne_twister_engine}} is a random number engine based on [[enwiki:Mersenne_twister|Mersenne Twister]] algorithm. It produces high quality unsigned integer random numbers of type {{tt|UIntType}} on the interval {{math|[0, 2{{su|p=w}}-1]}}.

The following type aliases define the random number engine with two commonly used parameter sets:
{{dsc begin}}
{{dsc header | random}}
{{dsc hitem | Type | Definition}}
{{dsc inc | cpp/numeric/random/dsc mt19937}}
{{dsc inc | cpp/numeric/random/dsc mt19937_64}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | The integral type generated by the engine.  Results are undefined if this is not an unsigned integral type.}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc h2 | Construction and Seeding}}
{{dsc inc | cpp/numeric/random/engine/dsc constructor |mersenne_twister_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc seed |mersenne_twister_engine}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/engine/dsc operator() |mersenne_twister_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc discard |mersenne_twister_engine}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/engine/dsc min |mersenne_twister_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc max |mersenne_twister_engine}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_cmp |mersenne_twister_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_ltltgtgt |mersenne_twister_engine}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} word_size | the template parameter {{tt|w}}, determines the range of values generated by the engine. }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} state_size | the template parameter {{tt|n}}. The engine state is {{tt|n}} values of {{tt|UIntType}} }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} shift_size | the template parameter {{tt|m}} }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} mask_bits | the template parameter {{tt|r}}, also known as the twist value. }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} xor_mask | the template parameter {{tt|a}}, the conditional xor-mask. }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} tempering_u | the template parameter {{tt|u}}, first component of the bit-scrambling (tempering) matrix }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} tempering_d | the template parameter {{tt|d}}, second component of the bit-scrambling (tempering) matrix }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} tempering_s | the template parameter {{tt|s}}, third component of the bit-scrambling (tempering) matrix }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} tempering_b | the template parameter {{tt|b}}, fourth component of the bit-scrambling (tempering) matrix }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} tempering_t | the template parameter {{tt|t}}, fifth component of the bit-scrambling (tempering) matrix }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} tempering_c | the template parameter {{tt|c}}, sixth component of the bit-scrambling (tempering) matrix }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} tempering_l | the template parameter {{tt|l}}, seventh component of the bit-scrambling (tempering) matrix }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} initialization_multiplier | the template parameter {{tt|f}}  }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} default_seed | the constant value {{c|5489u}} }}
{{dsc end}}

===Notes===
The 10000th consecutive invocation of a default-contructed {{tt|std::mt19937}} is required to produce the value {{c|4123659995}}. 

The 10000th consecutive invocation of a default-contructed {{tt|std::mt19937_64}} is required to produce the value {{c|9981545732273789042}}

[[de:cpp/numeric/random/mersenne twister engine]]
[[es:cpp/numeric/random/mersenne twister engine]]
[[fr:cpp/numeric/random/mersenne twister engine]]
[[it:cpp/numeric/random/mersenne twister engine]]
[[ja:cpp/numeric/random/mersenne twister engine]]
[[pt:cpp/numeric/random/mersenne twister engine]]
[[ru:cpp/numeric/random/mersenne twister engine]]
[[zh:cpp/numeric/random/mersenne twister engine]]</text>
      <sha1>5w14wymhd9ttlv4d1hd929mak7xkckp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/discard</title>
    <ns>0</ns>
    <id>3728</id>
    <revision>
      <id>50981</id>
      <parentid>43299</parentid>
      <timestamp>2013-06-01T03:47:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="539">{{include page|cpp/numeric/random/engine/discard|mersenne_twister_engine}}

[[de:cpp/numeric/random/mersenne twister engine/discard]]
[[es:cpp/numeric/random/mersenne twister engine/discard]]
[[fr:cpp/numeric/random/mersenne twister engine/discard]]
[[it:cpp/numeric/random/mersenne twister engine/discard]]
[[ja:cpp/numeric/random/mersenne twister engine/discard]]
[[pt:cpp/numeric/random/mersenne twister engine/discard]]
[[ru:cpp/numeric/random/mersenne twister engine/discard]]
[[zh:cpp/numeric/random/mersenne twister engine/discard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/max</title>
    <ns>0</ns>
    <id>3726</id>
    <revision>
      <id>50982</id>
      <parentid>43294</parentid>
      <timestamp>2013-06-01T03:47:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="503">{{include page|cpp/numeric/random/engine/max|mersenne_twister_engine}}

[[de:cpp/numeric/random/mersenne twister engine/max]]
[[es:cpp/numeric/random/mersenne twister engine/max]]
[[fr:cpp/numeric/random/mersenne twister engine/max]]
[[it:cpp/numeric/random/mersenne twister engine/max]]
[[ja:cpp/numeric/random/mersenne twister engine/max]]
[[pt:cpp/numeric/random/mersenne twister engine/max]]
[[ru:cpp/numeric/random/mersenne twister engine/max]]
[[zh:cpp/numeric/random/mersenne twister engine/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/mersenne twister engine</title>
    <ns>0</ns>
    <id>3731</id>
    <revision>
      <id>50983</id>
      <parentid>43286</parentid>
      <timestamp>2013-06-01T03:47:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="671">{{include page|cpp/numeric/random/engine/constructor|mersenne_twister_engine}}

[[de:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]
[[es:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]
[[fr:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]
[[it:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]
[[ja:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]
[[pt:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]
[[ru:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]
[[zh:cpp/numeric/random/mersenne twister engine/mersenne twister engine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/min</title>
    <ns>0</ns>
    <id>3727</id>
    <revision>
      <id>50984</id>
      <parentid>43281</parentid>
      <timestamp>2013-06-01T03:47:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="503">{{include page|cpp/numeric/random/engine/min|mersenne_twister_engine}}

[[de:cpp/numeric/random/mersenne twister engine/min]]
[[es:cpp/numeric/random/mersenne twister engine/min]]
[[fr:cpp/numeric/random/mersenne twister engine/min]]
[[it:cpp/numeric/random/mersenne twister engine/min]]
[[ja:cpp/numeric/random/mersenne twister engine/min]]
[[pt:cpp/numeric/random/mersenne twister engine/min]]
[[ru:cpp/numeric/random/mersenne twister engine/min]]
[[zh:cpp/numeric/random/mersenne twister engine/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/operator cmp</title>
    <ns>0</ns>
    <id>8820</id>
    <revision>
      <id>50985</id>
      <parentid>43264</parentid>
      <timestamp>2013-06-01T03:47:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="584">{{include page|cpp/numeric/random/engine/operator cmp|mersenne_twister_engine}}

[[de:cpp/numeric/random/mersenne twister engine/operator cmp]]
[[es:cpp/numeric/random/mersenne twister engine/operator cmp]]
[[fr:cpp/numeric/random/mersenne twister engine/operator cmp]]
[[it:cpp/numeric/random/mersenne twister engine/operator cmp]]
[[ja:cpp/numeric/random/mersenne twister engine/operator cmp]]
[[pt:cpp/numeric/random/mersenne twister engine/operator cmp]]
[[ru:cpp/numeric/random/mersenne twister engine/operator cmp]]
[[zh:cpp/numeric/random/mersenne twister engine/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/operator ltltgtgt</title>
    <ns>0</ns>
    <id>3724</id>
    <revision>
      <id>50986</id>
      <parentid>43257</parentid>
      <timestamp>2013-06-01T03:47:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="629">{{include page|cpp/numeric/random/engine/operator_ltltgtgt|mersenne_twister_engine}}

[[de:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]
[[es:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]
[[fr:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]
[[it:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]
[[ja:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]
[[pt:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]
[[ru:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]
[[zh:cpp/numeric/random/mersenne twister engine/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/operator()</title>
    <ns>0</ns>
    <id>3729</id>
    <revision>
      <id>43274</id>
      <parentid>13910</parentid>
      <timestamp>2012-11-03T02:15:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="553">{{cpp/numeric/random/engine/operator()|mersenne_twister_engine}}

[[de:cpp/numeric/random/mersenne twister engine/operator()]]
[[es:cpp/numeric/random/mersenne twister engine/operator()]]
[[fr:cpp/numeric/random/mersenne twister engine/operator()]]
[[it:cpp/numeric/random/mersenne twister engine/operator()]]
[[ja:cpp/numeric/random/mersenne twister engine/operator()]]
[[pt:cpp/numeric/random/mersenne twister engine/operator()]]
[[ru:cpp/numeric/random/mersenne twister engine/operator()]]
[[zh:cpp/numeric/random/mersenne twister engine/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/mersenne twister engine/seed</title>
    <ns>0</ns>
    <id>3730</id>
    <revision>
      <id>67887</id>
      <parentid>50987</parentid>
      <timestamp>2014-03-04T13:55:17Z</timestamp>
      <contributor>
        <username>Wanttoknow</username>
        <id>2904</id>
      </contributor>
      <text xml:space="preserve" bytes="979">{{include page|cpp/numeric/random/engine/seed|mersenne_twister_engine}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;random&gt;

int main()
{
    std::mt19937 gen;

    // Seed the engine with an unsigned int
    gen.seed(1);
    std::cout &lt;&lt; &quot;after seed by 1: &quot; &lt;&lt; gen() &lt;&lt; '\n';

    // Seed the engine with two unsigned ints
    std::seed_seq sseq{1, 2};
    gen.seed(sseq);
    std::cout &lt;&lt; &quot;after seed by {1,2}: &quot; &lt;&lt; gen() &lt;&lt; '\n';
}
 | output=
after seed by 1: 1791095845
after seed by {1,2}: 3127717181
}}

[[de:cpp/numeric/random/mersenne twister engine/seed]]
[[es:cpp/numeric/random/mersenne twister engine/seed]]
[[fr:cpp/numeric/random/mersenne twister engine/seed]]
[[it:cpp/numeric/random/mersenne twister engine/seed]]
[[ja:cpp/numeric/random/mersenne twister engine/seed]]
[[pt:cpp/numeric/random/mersenne twister engine/seed]]
[[ru:cpp/numeric/random/mersenne twister engine/seed]]
[[zh:cpp/numeric/random/mersenne twister engine/seed]]</text>
      <sha1>5qchp4kolll2lctxdwze862z4ozjlab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution</title>
    <ns>0</ns>
    <id>3913</id>
    <revision>
      <id>75934</id>
      <parentid>75925</parentid>
      <timestamp>2015-02-05T03:03:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>concept link</comment>
      <text xml:space="preserve" bytes="3364">{{cpp/title|negative_binomial_distribution}}
{{cpp/numeric/random/negative_binomial_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class IntType = int &gt;
class negative_binomial_distribution;
}}

Produces random non-negative integer values {{math|i}}, distributed according to discrete probability function:

:{{math|P(i{{!}}k,p) {{=}}{{mparen|(|)|k + i − 1|i}} · p{{su|p=k}} · (1 − p){{su|p=i}}}}

The value represents the number of failures in a series of independent yes/no trials (each succeeds with probability {{math|p}}), before exactly {{math|k}} successes occur.

{{tt|std::negative_binomial_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|IntType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|IntType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | negative_binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | negative_binomial_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | negative_binomial_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | negative_binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | negative_binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | negative_binomial_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | negative_binomial_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | negative_binomial_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | negative_binomial_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // Pat goes door-to-door selling cookies
    // At each house, there's a 75% chance that she sells one box
    // how many times will she be turned away before selling 5 boxes?
    std::negative_binomial_distribution&lt;&gt; d(5, 0.75);
 
    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[d(gen)];
    }
    for(auto p : hist) {
        std::cout  &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; std::string(p.second/100, '*') &lt;&lt; '\n';
    }
}
 | output=
0 ***********************
1 *****************************
2 **********************
3 *************
4 ******
5 ***
6 *
7 
8 
9 
10 
11 
}}

===External links===
[http://mathworld.wolfram.com/NegativeBinomialDistribution.html Weisstein, Eric W. &quot;Negative Binomial Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/negative binomial distribution]]
[[es:cpp/numeric/random/negative binomial distribution]]
[[fr:cpp/numeric/random/negative binomial distribution]]
[[it:cpp/numeric/random/negative binomial distribution]]
[[ja:cpp/numeric/random/negative binomial distribution]]
[[pt:cpp/numeric/random/negative binomial distribution]]
[[ru:cpp/numeric/random/negative binomial distribution]]
[[zh:cpp/numeric/random/negative binomial distribution]]</text>
      <sha1>5c78jtdnaaganadqejt42iuy9amd9ej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/k</title>
    <ns>0</ns>
    <id>5149</id>
    <redirect title="cpp/numeric/random/negative binomial distribution/params" />
    <revision>
      <id>61185</id>
      <parentid>58722</parentid>
      <timestamp>2013-06-05T12:26:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/negative binomial distribution/params]]</comment>
      <text xml:space="preserve" bytes="70">#redirect [[cpp/numeric/random/negative_binomial_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/max</title>
    <ns>0</ns>
    <id>4004</id>
    <revision>
      <id>50988</id>
      <parentid>43230</parentid>
      <timestamp>2013-06-01T03:47:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="572">{{include page|cpp/numeric/random/distribution/max|negative_binomial_distribution}}

[[de:cpp/numeric/random/negative binomial distribution/max]]
[[es:cpp/numeric/random/negative binomial distribution/max]]
[[fr:cpp/numeric/random/negative binomial distribution/max]]
[[it:cpp/numeric/random/negative binomial distribution/max]]
[[ja:cpp/numeric/random/negative binomial distribution/max]]
[[pt:cpp/numeric/random/negative binomial distribution/max]]
[[ru:cpp/numeric/random/negative binomial distribution/max]]
[[zh:cpp/numeric/random/negative binomial distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/min</title>
    <ns>0</ns>
    <id>3980</id>
    <revision>
      <id>50989</id>
      <parentid>43223</parentid>
      <timestamp>2013-06-01T03:47:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="572">{{include page|cpp/numeric/random/distribution/min|negative_binomial_distribution}}

[[de:cpp/numeric/random/negative binomial distribution/min]]
[[es:cpp/numeric/random/negative binomial distribution/min]]
[[fr:cpp/numeric/random/negative binomial distribution/min]]
[[it:cpp/numeric/random/negative binomial distribution/min]]
[[ja:cpp/numeric/random/negative binomial distribution/min]]
[[pt:cpp/numeric/random/negative binomial distribution/min]]
[[ru:cpp/numeric/random/negative binomial distribution/min]]
[[zh:cpp/numeric/random/negative binomial distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/negative binomial distribution</title>
    <ns>0</ns>
    <id>4921</id>
    <revision>
      <id>78538</id>
      <parentid>78493</parentid>
      <timestamp>2015-05-25T04:04:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>ditto</comment>
      <text xml:space="preserve" bytes="1971">{{cpp/numeric/random/negative_binomial_distribution/title|negative_binomial_distribution}}
{{cpp/numeric/random/negative_binomial_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit negative_binomial_distribution( IntType k = 1, double p = 0.5 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit negative_binomial_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|k}} and {{tt|p}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | k | the ''k'' distribution parameter (number of trial failures)}}
{{par | p | the ''p'' distribution parameter (probability of a trial generating {{c|true}})}}
{{par | params | the distribution parameter set}}
{{par end}}

===Notes===
Requires that {{math|0 &lt; p ≤ 1}} and {{math|0 &lt; k}}.

If {{tt|1=p == 1}}, subsequent calls to the {{ltt|cpp/numeric/random/negative_binomial_distribution/operator()|operator()}} overload that does not accept a {{tt|param_type}} object will cause undefined behavior.

The default-constructed {{tt|std::negative_binomial_distribution}} is equivalent to the default-constructed {{lc|std::geometric_distribution}}.

[[de:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]
[[es:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]
[[fr:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]
[[it:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]
[[ja:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]
[[pt:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]
[[ru:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]
[[zh:cpp/numeric/random/negative binomial distribution/negative binomial distribution]]</text>
      <sha1>rsq55sa6arjcufemnf5zk0ry4z0ix6h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/operator cmp</title>
    <ns>0</ns>
    <id>4144</id>
    <revision>
      <id>50990</id>
      <parentid>43201</parentid>
      <timestamp>2013-06-01T03:47:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="653">{{include page|cpp/numeric/random/distribution/operator_cmp|negative_binomial_distribution}}

[[de:cpp/numeric/random/negative binomial distribution/operator cmp]]
[[es:cpp/numeric/random/negative binomial distribution/operator cmp]]
[[fr:cpp/numeric/random/negative binomial distribution/operator cmp]]
[[it:cpp/numeric/random/negative binomial distribution/operator cmp]]
[[ja:cpp/numeric/random/negative binomial distribution/operator cmp]]
[[pt:cpp/numeric/random/negative binomial distribution/operator cmp]]
[[ru:cpp/numeric/random/negative binomial distribution/operator cmp]]
[[zh:cpp/numeric/random/negative binomial distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4535</id>
    <revision>
      <id>50991</id>
      <parentid>43194</parentid>
      <timestamp>2013-06-01T03:47:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="698">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|negative_binomial_distribution}}

[[de:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/negative binomial distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/operator()</title>
    <ns>0</ns>
    <id>4102</id>
    <revision>
      <id>43209</id>
      <parentid>15051</parentid>
      <timestamp>2012-11-03T02:01:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="622">{{cpp/numeric/random/distribution/operator()|negative_binomial_distribution}}

[[de:cpp/numeric/random/negative binomial distribution/operator()]]
[[es:cpp/numeric/random/negative binomial distribution/operator()]]
[[fr:cpp/numeric/random/negative binomial distribution/operator()]]
[[it:cpp/numeric/random/negative binomial distribution/operator()]]
[[ja:cpp/numeric/random/negative binomial distribution/operator()]]
[[pt:cpp/numeric/random/negative binomial distribution/operator()]]
[[ru:cpp/numeric/random/negative binomial distribution/operator()]]
[[zh:cpp/numeric/random/negative binomial distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/p</title>
    <ns>0</ns>
    <id>5148</id>
    <redirect title="cpp/numeric/random/negative binomial distribution/params" />
    <revision>
      <id>61184</id>
      <parentid>58725</parentid>
      <timestamp>2013-06-05T12:26:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/negative binomial distribution/params]]</comment>
      <text xml:space="preserve" bytes="70">#redirect [[cpp/numeric/random/negative_binomial_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/param</title>
    <ns>0</ns>
    <id>4077</id>
    <revision>
      <id>50992</id>
      <parentid>43179</parentid>
      <timestamp>2013-06-01T03:47:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="590">{{include page|cpp/numeric/random/distribution/param|negative_binomial_distribution}}

[[de:cpp/numeric/random/negative binomial distribution/param]]
[[es:cpp/numeric/random/negative binomial distribution/param]]
[[fr:cpp/numeric/random/negative binomial distribution/param]]
[[it:cpp/numeric/random/negative binomial distribution/param]]
[[ja:cpp/numeric/random/negative binomial distribution/param]]
[[pt:cpp/numeric/random/negative binomial distribution/param]]
[[ru:cpp/numeric/random/negative binomial distribution/param]]
[[zh:cpp/numeric/random/negative binomial distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/params</title>
    <ns>0</ns>
    <id>12601</id>
    <revision>
      <id>61265</id>
      <parentid>61243</parentid>
      <timestamp>2013-06-05T13:13:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>ce, default value</comment>
      <text xml:space="preserve" bytes="850">{{cpp/numeric/random/negative_binomial_distribution/title|p, k}}
{{cpp/numeric/random/negative_binomial_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
double p() const;
}}
{{dcl | since=c++11 | num=2 |
IntType k() const;
}}
{{dcl end}}

Returns the parameters the distribution was constructed with.

@1@ Returns the {{math|p}} distribution parameter. It defines the probability of a trial generating {{c|true}}. The default value is {{c|0.5}}.

@2@ Returns the {{math|k}} distribution parameter. It defines the number of desired outcomes. The default value is {{c|1}}.

===Parameters===
(none)

===Return value===
@1@ The {{math|p}} distribution parameter.

@2@ The {{math|k}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | negative_binomial_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/negative binomial distribution/reset</title>
    <ns>0</ns>
    <id>4079</id>
    <revision>
      <id>50993</id>
      <parentid>43172</parentid>
      <timestamp>2013-06-01T03:47:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="590">{{include page|cpp/numeric/random/distribution/reset|negative_binomial_distribution}}

[[de:cpp/numeric/random/negative binomial distribution/reset]]
[[es:cpp/numeric/random/negative binomial distribution/reset]]
[[fr:cpp/numeric/random/negative binomial distribution/reset]]
[[it:cpp/numeric/random/negative binomial distribution/reset]]
[[ja:cpp/numeric/random/negative binomial distribution/reset]]
[[pt:cpp/numeric/random/negative binomial distribution/reset]]
[[ru:cpp/numeric/random/negative binomial distribution/reset]]
[[zh:cpp/numeric/random/negative binomial distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution</title>
    <ns>0</ns>
    <id>3920</id>
    <revision>
      <id>86078</id>
      <parentid>75940</parentid>
      <timestamp>2016-06-16T12:28:40Z</timestamp>
      <contributor>
        <ip>130.120.96.252</ip>
      </contributor>
      <text xml:space="preserve" bytes="3242">{{cpp/title|normal_distribution}}
{{cpp/numeric/random/normal_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class normal_distribution;
}}

Generates random numbers according to the [[enwiki:Normal distribution|Normal (or Gaussian) random number distribution]]. It is defined as:

: {{math|f(x; μ,σ) {{=}} {{mfrac||1|σ{{mrad|2π}}}} exp{{mparen|(|)| {{mfrac|-1|2}} {{mparen|(|)|{{mfrac|x-μ|σ}} }}{{su|p=2}} }} }}

Here {{math|μ}} is the [[enwiki:Mean|mean]] and {{math|σ}} is the [[enwiki:Standard deviation|standard deviation]] (''stddev'').

{{tt|std::normal_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | normal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | normal_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | normal_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | normal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | normal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | normal_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | normal_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | normal_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | normal_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;
#include &lt;cmath&gt;
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());

    // values near the mean are the most likely
    // standard deviation affects the dispersion of generated values from the mean
    std::normal_distribution&lt;&gt; d(5,2);

    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[std::round(d(gen))];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(1) &lt;&lt; std::setw(2)
                  &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; std::string(p.second/200, '*') &lt;&lt; '\n';
    }
}
 | output=
-2 
-1 
 0 
 1 *
 2 ***
 3 ******
 4 ********
 5 **********
 6 ********
 7 *****
 8 ***
 9 *
10 
11 
12 
}}

===External links===
* [http://mathworld.wolfram.com/NormalDistribution.html Weisstein, Eric W. &quot;Normal Distribution.&quot;] From MathWorld--A Wolfram Web Resource.
* [[enwiki:Normal_distribution|Normal Distribution.]] From Wikipedia.

[[de:cpp/numeric/random/normal distribution]]
[[es:cpp/numeric/random/normal distribution]]
[[fr:cpp/numeric/random/normal distribution]]
[[it:cpp/numeric/random/normal distribution]]
[[ja:cpp/numeric/random/normal distribution]]
[[pt:cpp/numeric/random/normal distribution]]
[[ru:cpp/numeric/random/normal distribution]]
[[zh:cpp/numeric/random/normal distribution]]</text>
      <sha1>lnzr1j03mtez6du30q45xaxuuuvm8r1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/max</title>
    <ns>0</ns>
    <id>4009</id>
    <revision>
      <id>50994</id>
      <parentid>43158</parentid>
      <timestamp>2013-06-01T03:47:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="473">{{include page|cpp/numeric/random/distribution/max|normal_distribution}}

[[de:cpp/numeric/random/normal distribution/max]]
[[es:cpp/numeric/random/normal distribution/max]]
[[fr:cpp/numeric/random/normal distribution/max]]
[[it:cpp/numeric/random/normal distribution/max]]
[[ja:cpp/numeric/random/normal distribution/max]]
[[pt:cpp/numeric/random/normal distribution/max]]
[[ru:cpp/numeric/random/normal distribution/max]]
[[zh:cpp/numeric/random/normal distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/mean</title>
    <ns>0</ns>
    <id>8884</id>
    <redirect title="cpp/numeric/random/normal distribution/params" />
    <revision>
      <id>61133</id>
      <parentid>58729</parentid>
      <timestamp>2013-06-05T12:14:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/normal distribution/params]]</comment>
      <text xml:space="preserve" bytes="59">#redirect [[cpp/numeric/random/normal_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/min</title>
    <ns>0</ns>
    <id>3974</id>
    <revision>
      <id>50995</id>
      <parentid>43143</parentid>
      <timestamp>2013-06-01T03:47:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="473">{{include page|cpp/numeric/random/distribution/min|normal_distribution}}

[[de:cpp/numeric/random/normal distribution/min]]
[[es:cpp/numeric/random/normal distribution/min]]
[[fr:cpp/numeric/random/normal distribution/min]]
[[it:cpp/numeric/random/normal distribution/min]]
[[ja:cpp/numeric/random/normal distribution/min]]
[[pt:cpp/numeric/random/normal distribution/min]]
[[ru:cpp/numeric/random/normal distribution/min]]
[[zh:cpp/numeric/random/normal distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/normal distribution</title>
    <ns>0</ns>
    <id>4928</id>
    <revision>
      <id>62901</id>
      <parentid>50380</parentid>
      <timestamp>2013-07-01T23:45:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1299">{{cpp/numeric/random/normal_distribution/title|normal_distribution}}
{{cpp/numeric/random/normal_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit normal_distribution( RealType mean = 0.0, RealType stddev = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit normal_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|mean}} and {{tt|stddev}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | mean | the ''μ'' distribution parameter (mean)}}
{{par | stddev | the ''σ'' distribution parameter (standard deviation)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/normal distribution/normal distribution]]
[[es:cpp/numeric/random/normal distribution/normal distribution]]
[[fr:cpp/numeric/random/normal distribution/normal distribution]]
[[it:cpp/numeric/random/normal distribution/normal distribution]]
[[ja:cpp/numeric/random/normal distribution/normal distribution]]
[[pt:cpp/numeric/random/normal distribution/normal distribution]]
[[ru:cpp/numeric/random/normal distribution/normal distribution]]
[[zh:cpp/numeric/random/normal distribution/normal distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/operator cmp</title>
    <ns>0</ns>
    <id>4151</id>
    <revision>
      <id>50996</id>
      <parentid>43122</parentid>
      <timestamp>2013-06-01T03:47:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="554">{{include page|cpp/numeric/random/distribution/operator_cmp|normal_distribution}}

[[de:cpp/numeric/random/normal distribution/operator cmp]]
[[es:cpp/numeric/random/normal distribution/operator cmp]]
[[fr:cpp/numeric/random/normal distribution/operator cmp]]
[[it:cpp/numeric/random/normal distribution/operator cmp]]
[[ja:cpp/numeric/random/normal distribution/operator cmp]]
[[pt:cpp/numeric/random/normal distribution/operator cmp]]
[[ru:cpp/numeric/random/normal distribution/operator cmp]]
[[zh:cpp/numeric/random/normal distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4528</id>
    <revision>
      <id>50997</id>
      <parentid>43114</parentid>
      <timestamp>2013-06-01T03:47:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="599">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|normal_distribution}}

[[de:cpp/numeric/random/normal distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/normal distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/normal distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/normal distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/normal distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/normal distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/normal distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/normal distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/operator()</title>
    <ns>0</ns>
    <id>4109</id>
    <revision>
      <id>43129</id>
      <parentid>15058</parentid>
      <timestamp>2012-11-03T01:44:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="523">{{cpp/numeric/random/distribution/operator()|normal_distribution}}

[[de:cpp/numeric/random/normal distribution/operator()]]
[[es:cpp/numeric/random/normal distribution/operator()]]
[[fr:cpp/numeric/random/normal distribution/operator()]]
[[it:cpp/numeric/random/normal distribution/operator()]]
[[ja:cpp/numeric/random/normal distribution/operator()]]
[[pt:cpp/numeric/random/normal distribution/operator()]]
[[ru:cpp/numeric/random/normal distribution/operator()]]
[[zh:cpp/numeric/random/normal distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/param</title>
    <ns>0</ns>
    <id>4130</id>
    <revision>
      <id>50998</id>
      <parentid>43106</parentid>
      <timestamp>2013-06-01T03:47:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/param|normal_distribution}}

[[de:cpp/numeric/random/normal distribution/param]]
[[es:cpp/numeric/random/normal distribution/param]]
[[fr:cpp/numeric/random/normal distribution/param]]
[[it:cpp/numeric/random/normal distribution/param]]
[[ja:cpp/numeric/random/normal distribution/param]]
[[pt:cpp/numeric/random/normal distribution/param]]
[[ru:cpp/numeric/random/normal distribution/param]]
[[zh:cpp/numeric/random/normal distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/params</title>
    <ns>0</ns>
    <id>12604</id>
    <revision>
      <id>61246</id>
      <timestamp>2013-06-05T12:51:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="813">{{cpp/numeric/random/normal_distribution/title|mean, stddev}}
{{cpp/numeric/random/normal_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
RealType mean() const;
}}
{{dcl | since=c++11 | num=2 |
RealType stddev() const;
}}
{{dcl end}}

Returns the parameters the distribution was constructed with.

@1@ Returns the mean {{math|μ}} distribution parameter. The mean specifies the location of the peak. The default value is {{c|0.0}}.

@2@ Returns the deviation {{math|σ}} distribution parameter. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
@1@ The mean {{math|μ}} distribution parameter.

@2@ The deviation {{math|σ}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | normal_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/reset</title>
    <ns>0</ns>
    <id>4086</id>
    <revision>
      <id>50999</id>
      <parentid>43099</parentid>
      <timestamp>2013-06-01T03:47:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="491">{{include page|cpp/numeric/random/distribution/reset|normal_distribution}}

[[de:cpp/numeric/random/normal distribution/reset]]
[[es:cpp/numeric/random/normal distribution/reset]]
[[fr:cpp/numeric/random/normal distribution/reset]]
[[it:cpp/numeric/random/normal distribution/reset]]
[[ja:cpp/numeric/random/normal distribution/reset]]
[[pt:cpp/numeric/random/normal distribution/reset]]
[[ru:cpp/numeric/random/normal distribution/reset]]
[[zh:cpp/numeric/random/normal distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/normal distribution/stddev</title>
    <ns>0</ns>
    <id>8885</id>
    <redirect title="cpp/numeric/random/normal distribution/params" />
    <revision>
      <id>61134</id>
      <parentid>58730</parentid>
      <timestamp>2013-06-05T12:15:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/normal distribution/params]]</comment>
      <text xml:space="preserve" bytes="59">#redirect [[cpp/numeric/random/normal_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution</title>
    <ns>0</ns>
    <id>3927</id>
    <revision>
      <id>75947</id>
      <parentid>73235</parentid>
      <timestamp>2015-02-05T03:15:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="3379">{{cpp/title|piecewise_constant_distribution}}
{{cpp/numeric/random/piecewise_constant_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class piecewise_constant_distribution;
}}

{{tt|std::piecewise_constant_distribution}} produces random floating-point numbers, which are uniformly distributed within each of the several subintervals {{math|[b{{su|b=i}}, b{{su|b=i+1}})}}, each with its own weight {{math|w{{su|b=i}}}}. The set of interval boundaries and the set of weights are the parameters of this distribution.

The probability density for any {{math|b{{su|b=i}}≤x&lt;b{{su|b=i+1}}}} is {{math|{{mfrac||w{{su|b=k}} | S (b{{su|b=i+1}} - b{{su|b=i}}) }} }}. where {{math|S}} is the sum of all weights.

{{tt|std::piecewise_constant_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | piecewise_constant_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | piecewise_constant_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | piecewise_constant_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/piecewise_constant_distribution/dsc params}}

{{dsc inc | cpp/numeric/random/distribution/dsc param | piecewise_constant_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | piecewise_constant_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | piecewise_constant_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | piecewise_constant_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | piecewise_constant_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // 50% of the time, generate a random number between 0 and 1
    // 50% of the time, generate a random number between 10 and 15
    std::vector&lt;double&gt; i{0,  1, 10, 15};
    std::vector&lt;double&gt; w{  1,  0,  1};
    std::piecewise_constant_distribution&lt;&gt; d(i.begin(), i.end(), w.begin());

    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[d(gen)];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; std::string(p.second/100, '*') &lt;&lt; '\n';
    }
}
 | output=
0 **************************************************
10 **********
11 *********
12 *********
13 **********
14 *********
}}

[[de:cpp/numeric/random/piecewise constant distribution]]
[[es:cpp/numeric/random/piecewise constant distribution]]
[[fr:cpp/numeric/random/piecewise constant distribution]]
[[it:cpp/numeric/random/piecewise constant distribution]]
[[ja:cpp/numeric/random/piecewise constant distribution]]
[[pt:cpp/numeric/random/piecewise constant distribution]]
[[ru:cpp/numeric/random/piecewise constant distribution]]
[[zh:cpp/numeric/random/piecewise constant distribution]]</text>
      <sha1>tg7z72e8sxt2lqxz7s9gd1q3lxunkvf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/densities</title>
    <ns>0</ns>
    <id>12589</id>
    <redirect title="cpp/numeric/random/piecewise constant distribution/params" />
    <revision>
      <id>61100</id>
      <timestamp>2013-06-05T11:20:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/piecewise constant distribution/params]]</comment>
      <text xml:space="preserve" bytes="71">#redirect [[cpp/numeric/random/piecewise_constant_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/intervals</title>
    <ns>0</ns>
    <id>12588</id>
    <redirect title="cpp/numeric/random/piecewise constant distribution/params" />
    <revision>
      <id>61099</id>
      <timestamp>2013-06-05T11:20:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/piecewise constant distribution/params]]</comment>
      <text xml:space="preserve" bytes="71">#redirect [[cpp/numeric/random/piecewise_constant_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/max</title>
    <ns>0</ns>
    <id>4013</id>
    <revision>
      <id>51000</id>
      <parentid>43079</parentid>
      <timestamp>2013-06-01T03:47:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/max|piecewise_constant_distribution}}

[[de:cpp/numeric/random/piecewise constant distribution/max]]
[[es:cpp/numeric/random/piecewise constant distribution/max]]
[[fr:cpp/numeric/random/piecewise constant distribution/max]]
[[it:cpp/numeric/random/piecewise constant distribution/max]]
[[ja:cpp/numeric/random/piecewise constant distribution/max]]
[[pt:cpp/numeric/random/piecewise constant distribution/max]]
[[ru:cpp/numeric/random/piecewise constant distribution/max]]
[[zh:cpp/numeric/random/piecewise constant distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/min</title>
    <ns>0</ns>
    <id>3967</id>
    <revision>
      <id>51001</id>
      <parentid>43073</parentid>
      <timestamp>2013-06-01T03:47:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/min|piecewise_constant_distribution}}

[[de:cpp/numeric/random/piecewise constant distribution/min]]
[[es:cpp/numeric/random/piecewise constant distribution/min]]
[[fr:cpp/numeric/random/piecewise constant distribution/min]]
[[it:cpp/numeric/random/piecewise constant distribution/min]]
[[ja:cpp/numeric/random/piecewise constant distribution/min]]
[[pt:cpp/numeric/random/piecewise constant distribution/min]]
[[ru:cpp/numeric/random/piecewise constant distribution/min]]
[[zh:cpp/numeric/random/piecewise constant distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/operator cmp</title>
    <ns>0</ns>
    <id>4158</id>
    <revision>
      <id>51002</id>
      <parentid>43061</parentid>
      <timestamp>2013-06-01T03:47:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="662">{{include page|cpp/numeric/random/distribution/operator_cmp|piecewise_constant_distribution}}

[[de:cpp/numeric/random/piecewise constant distribution/operator cmp]]
[[es:cpp/numeric/random/piecewise constant distribution/operator cmp]]
[[fr:cpp/numeric/random/piecewise constant distribution/operator cmp]]
[[it:cpp/numeric/random/piecewise constant distribution/operator cmp]]
[[ja:cpp/numeric/random/piecewise constant distribution/operator cmp]]
[[pt:cpp/numeric/random/piecewise constant distribution/operator cmp]]
[[ru:cpp/numeric/random/piecewise constant distribution/operator cmp]]
[[zh:cpp/numeric/random/piecewise constant distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4521</id>
    <revision>
      <id>51003</id>
      <parentid>43052</parentid>
      <timestamp>2013-06-01T03:47:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="707">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|piecewise_constant_distribution}}

[[de:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/piecewise constant distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/operator()</title>
    <ns>0</ns>
    <id>4114</id>
    <revision>
      <id>43068</id>
      <parentid>15063</parentid>
      <timestamp>2012-11-03T01:32:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="631">{{cpp/numeric/random/distribution/operator()|piecewise_constant_distribution}}

[[de:cpp/numeric/random/piecewise constant distribution/operator()]]
[[es:cpp/numeric/random/piecewise constant distribution/operator()]]
[[fr:cpp/numeric/random/piecewise constant distribution/operator()]]
[[it:cpp/numeric/random/piecewise constant distribution/operator()]]
[[ja:cpp/numeric/random/piecewise constant distribution/operator()]]
[[pt:cpp/numeric/random/piecewise constant distribution/operator()]]
[[ru:cpp/numeric/random/piecewise constant distribution/operator()]]
[[zh:cpp/numeric/random/piecewise constant distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/param</title>
    <ns>0</ns>
    <id>4138</id>
    <revision>
      <id>51004</id>
      <parentid>43047</parentid>
      <timestamp>2013-06-01T03:47:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="599">{{include page|cpp/numeric/random/distribution/param|piecewise_constant_distribution}}

[[de:cpp/numeric/random/piecewise constant distribution/param]]
[[es:cpp/numeric/random/piecewise constant distribution/param]]
[[fr:cpp/numeric/random/piecewise constant distribution/param]]
[[it:cpp/numeric/random/piecewise constant distribution/param]]
[[ja:cpp/numeric/random/piecewise constant distribution/param]]
[[pt:cpp/numeric/random/piecewise constant distribution/param]]
[[ru:cpp/numeric/random/piecewise constant distribution/param]]
[[zh:cpp/numeric/random/piecewise constant distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/params</title>
    <ns>0</ns>
    <id>12590</id>
    <revision>
      <id>61102</id>
      <parentid>61101</parentid>
      <timestamp>2013-06-05T11:22:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>simplier title</comment>
      <text xml:space="preserve" bytes="681">{{cpp/numeric/random/piecewise_constant_distribution/title | intervals, densities}}
{{cpp/numeric/random/piecewise_constant_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
std::vector&lt;RealType&gt; intervals() const;
}}
{{dcl | since=c++11 | num=2 |
std::vector&lt;RealType&gt; densities() const;
}}
{{dcl end}}

Returns the distribution parameters.

@1@ Returns the list of boundaries of the intervals.

@2@ Returns the list of probability densities of the intervals.

===Parameters===
(none)

===Return value===
The distribution parameters:

@1@ The list of boundaries of the intervals.

@2@ The list of probability densities of the intervals.

===Complexity===
Constant.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/piecewise constant distribution</title>
    <ns>0</ns>
    <id>9841</id>
    <revision>
      <id>70979</id>
      <parentid>70978</parentid>
      <timestamp>2014-06-04T18:06:15Z</timestamp>
      <contributor>
        <username>Mamos</username>
        <id>3136</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2377">{{cpp/numeric/random/piecewise_constant_distribution/title|piecewise_constant_distribution}}
{{cpp/numeric/random/piecewise_constant_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
piecewise_constant_distribution();
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class InputIt1, class InputIt2 &gt;
piecewise_constant_distribution( InputIt1 first_i, InputIt1 last_i,
                                 InputIt2 first_w );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class UnaryOperation &gt;
piecewise_constant_distribution( std::initializer_list&lt;RealType&gt; bl, 
                                 UnaryOperation fw );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class UnaryOperation &gt;
piecewise_constant_distribution( std::size_t nw, 
                                 RealType xmin, RealType xmax,
                                 UnaryOperation fw );
}}
{{dcl | num=5 | since=c++11 | 1=
explicit piecewise_constant_distribution( const param_type&amp; parm );
}}
{{dcl end}}

Constructs new piecewise constant distribution object.

@1@ Constructs a distribution object with {{math|1=n = 1}}, {{math|1=ρ0 = 1}}, {{math|1=b0 = 0}}, and {{math|1=b1 = 1}}.

@2@ Constructs a distribution object from iterators over the interval sequence {{tt|[first_i, last_i)}} and a matching weight sequence starting at {{tt|first_w}}.

@3@ Constructs a distribution object where the intervals are taken from the initializer list {{tt|bl}} and the weights generated by the function {{tt|fw}}.

@4@ Constructs a distribution object with the {{tt|nw}} intervals distributed uniformly over {{tt|[xmin, xmax]}} and the weights generated by the function {{tt|fw}}.

@5@ Constructs a distribution object initialized with the parameters {{tt|param}}.

===Parameters===
{{par begin}}
{{par | first_i | iterator initialized to the start of the interval sequence}}
{{par | last_i  | iterator initialized to one-past-the-end of the interval sequence}}
{{par | first_w | iterator initialized to the start of the density (weight) sequence}}
{{par | ilist_i | initializer_list yielding the interval sequnce}}
{{par | fw     | double(double) function yielding the densities}}
{{par | nw     | the number of densities}}
{{par | xmin   | the lower bound of the interval sequence}}
{{par | xmax   | the upper bound of the interval sequence}}
{{par | parm   | the distribution parameter set}}
{{par end}}</text>
      <sha1>rqxnqo0w55mpcpfocepk1qa5wbx5aka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise constant distribution/reset</title>
    <ns>0</ns>
    <id>4093</id>
    <revision>
      <id>51005</id>
      <parentid>43040</parentid>
      <timestamp>2013-06-01T03:47:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="599">{{include page|cpp/numeric/random/distribution/reset|piecewise_constant_distribution}}

[[de:cpp/numeric/random/piecewise constant distribution/reset]]
[[es:cpp/numeric/random/piecewise constant distribution/reset]]
[[fr:cpp/numeric/random/piecewise constant distribution/reset]]
[[it:cpp/numeric/random/piecewise constant distribution/reset]]
[[ja:cpp/numeric/random/piecewise constant distribution/reset]]
[[pt:cpp/numeric/random/piecewise constant distribution/reset]]
[[ru:cpp/numeric/random/piecewise constant distribution/reset]]
[[zh:cpp/numeric/random/piecewise constant distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution</title>
    <ns>0</ns>
    <id>3928</id>
    <revision>
      <id>75948</id>
      <parentid>73236</parentid>
      <timestamp>2015-02-05T03:15:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="3879">{{cpp/title|piecewise_linear_distribution}}
{{cpp/numeric/random/piecewise_linear_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class piecewise_linear_distribution;
}}

{{tt|std::piecewise_linear_distribution}} produces random floating-point numbers, which are distributed according to a linear probability density function within each of the several subintervals {{math|[b{{su|b=i}}, b{{su|b=i+1}})}}. The distribution is such that the probability density at each interval boundary is exactly the predefined value {{math|p{{su|b=i}}}}. 

The probability density for any {{math|b{{su|b=i}}≤x&lt;b{{su|b=i+1}}}} is {{math|{{mfrac|p{{su|b=i}}|b{{su|b=i+1}}-x|b{{su|b=i+1}}-b{{su|b=i}} }} + {{mfrac|p{{su|b=i+1}}|x-b{{su|b=i}}|b{{su|b=i+1}}-b{{su|b=i}} }} }}, where probability densities at interval boundaries {{math|p{{su|b=k}}}} are calculated as {{math|w{{su|b=k}}/S}} where {{math|S}} is the sum of all {{math|{{mfrac||1|2}}(w{{su|b=k}}+w{{su|b=k+1}})(b{{su|b=k+1}}−b{{su|b=k}})}}.

The set of interval boundaries {{math|b{{su|b=i}}}} and the set of weights at boundaries {{math|w{{su|b=i}}}} are the parameters of this distribution.

{{tt|std::piecewise_linear_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | piecewise_linear_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | piecewise_linear_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | piecewise_linear_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/piecewise_linear_distribution/dsc params}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | piecewise_linear_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | piecewise_linear_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | piecewise_linear_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | piecewise_linear_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | piecewise_linear_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    // increase the probability from 0 to 5
    // remain flat from 5 to 10
    // decrease from 10 to 15 at the same rate
    std::vector&lt;double&gt; i{0, 5, 10, 15};
    std::vector&lt;double&gt; w{0, 1,   1, 0};
    std::piecewise_linear_distribution&lt;&gt; d(i.begin(), i.end(), w.begin());

    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[d(gen)];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; std::setw(2) &lt;&lt; std::setfill('0') &lt;&lt; p.first &lt;&lt; ' '
            &lt;&lt; std::string(p.second/100,'*') &lt;&lt; '\n';
    }
}
 | p=true
 | output=
00 *
01 ***
02 ****
03 ******
04 *********
05 *********
06 *********
07 **********
08 *********
09 **********
10 *********
11 *******
12 ****
13 ***
14 *
}}

[[de:cpp/numeric/random/piecewise linear distribution]]
[[es:cpp/numeric/random/piecewise linear distribution]]
[[fr:cpp/numeric/random/piecewise linear distribution]]
[[it:cpp/numeric/random/piecewise linear distribution]]
[[ja:cpp/numeric/random/piecewise linear distribution]]
[[pt:cpp/numeric/random/piecewise linear distribution]]
[[ru:cpp/numeric/random/piecewise linear distribution]]
[[zh:cpp/numeric/random/piecewise linear distribution]]</text>
      <sha1>8h7grfd12ibq1zce3bip1euu2hchgzr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/densities</title>
    <ns>0</ns>
    <id>12593</id>
    <redirect title="cpp/numeric/random/piecewise linear distribution/params" />
    <revision>
      <id>61105</id>
      <timestamp>2013-06-05T11:26:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">#redirect [[cpp/numeric/random/piecewise_linear_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/intervals</title>
    <ns>0</ns>
    <id>12592</id>
    <redirect title="cpp/numeric/random/piecewise linear distribution/params" />
    <revision>
      <id>61104</id>
      <timestamp>2013-06-05T11:26:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/piecewise linear distribution/params]]</comment>
      <text xml:space="preserve" bytes="69">#redirect [[cpp/numeric/random/piecewise_linear_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/max</title>
    <ns>0</ns>
    <id>4018</id>
    <revision>
      <id>51006</id>
      <parentid>43027</parentid>
      <timestamp>2013-06-01T03:47:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="563">{{include page|cpp/numeric/random/distribution/max|piecewise_linear_distribution}}

[[de:cpp/numeric/random/piecewise linear distribution/max]]
[[es:cpp/numeric/random/piecewise linear distribution/max]]
[[fr:cpp/numeric/random/piecewise linear distribution/max]]
[[it:cpp/numeric/random/piecewise linear distribution/max]]
[[ja:cpp/numeric/random/piecewise linear distribution/max]]
[[pt:cpp/numeric/random/piecewise linear distribution/max]]
[[ru:cpp/numeric/random/piecewise linear distribution/max]]
[[zh:cpp/numeric/random/piecewise linear distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/min</title>
    <ns>0</ns>
    <id>3966</id>
    <revision>
      <id>51007</id>
      <parentid>43020</parentid>
      <timestamp>2013-06-01T03:47:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="563">{{include page|cpp/numeric/random/distribution/min|piecewise_linear_distribution}}

[[de:cpp/numeric/random/piecewise linear distribution/min]]
[[es:cpp/numeric/random/piecewise linear distribution/min]]
[[fr:cpp/numeric/random/piecewise linear distribution/min]]
[[it:cpp/numeric/random/piecewise linear distribution/min]]
[[ja:cpp/numeric/random/piecewise linear distribution/min]]
[[pt:cpp/numeric/random/piecewise linear distribution/min]]
[[ru:cpp/numeric/random/piecewise linear distribution/min]]
[[zh:cpp/numeric/random/piecewise linear distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/operator cmp</title>
    <ns>0</ns>
    <id>4159</id>
    <revision>
      <id>51008</id>
      <parentid>43006</parentid>
      <timestamp>2013-06-01T03:47:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="644">{{include page|cpp/numeric/random/distribution/operator_cmp|piecewise_linear_distribution}}

[[de:cpp/numeric/random/piecewise linear distribution/operator cmp]]
[[es:cpp/numeric/random/piecewise linear distribution/operator cmp]]
[[fr:cpp/numeric/random/piecewise linear distribution/operator cmp]]
[[it:cpp/numeric/random/piecewise linear distribution/operator cmp]]
[[ja:cpp/numeric/random/piecewise linear distribution/operator cmp]]
[[pt:cpp/numeric/random/piecewise linear distribution/operator cmp]]
[[ru:cpp/numeric/random/piecewise linear distribution/operator cmp]]
[[zh:cpp/numeric/random/piecewise linear distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4520</id>
    <revision>
      <id>51009</id>
      <parentid>43001</parentid>
      <timestamp>2013-06-01T03:47:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="689">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|piecewise_linear_distribution}}

[[de:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/piecewise linear distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/operator()</title>
    <ns>0</ns>
    <id>4117</id>
    <revision>
      <id>43013</id>
      <parentid>15066</parentid>
      <timestamp>2012-11-03T01:21:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="613">{{cpp/numeric/random/distribution/operator()|piecewise_linear_distribution}}

[[de:cpp/numeric/random/piecewise linear distribution/operator()]]
[[es:cpp/numeric/random/piecewise linear distribution/operator()]]
[[fr:cpp/numeric/random/piecewise linear distribution/operator()]]
[[it:cpp/numeric/random/piecewise linear distribution/operator()]]
[[ja:cpp/numeric/random/piecewise linear distribution/operator()]]
[[pt:cpp/numeric/random/piecewise linear distribution/operator()]]
[[ru:cpp/numeric/random/piecewise linear distribution/operator()]]
[[zh:cpp/numeric/random/piecewise linear distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/param</title>
    <ns>0</ns>
    <id>4134</id>
    <revision>
      <id>51010</id>
      <parentid>42992</parentid>
      <timestamp>2013-06-01T03:47:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/param|piecewise_linear_distribution}}

[[de:cpp/numeric/random/piecewise linear distribution/param]]
[[es:cpp/numeric/random/piecewise linear distribution/param]]
[[fr:cpp/numeric/random/piecewise linear distribution/param]]
[[it:cpp/numeric/random/piecewise linear distribution/param]]
[[ja:cpp/numeric/random/piecewise linear distribution/param]]
[[pt:cpp/numeric/random/piecewise linear distribution/param]]
[[ru:cpp/numeric/random/piecewise linear distribution/param]]
[[zh:cpp/numeric/random/piecewise linear distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/params</title>
    <ns>0</ns>
    <id>12591</id>
    <revision>
      <id>61103</id>
      <timestamp>2013-06-05T11:25:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="713">{{cpp/numeric/random/piecewise_linear_distribution/title | intervals, densities}}
{{cpp/numeric/random/piecewise_linear_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
std::vector&lt;RealType&gt; intervals() const;
}}
{{dcl | since=c++11 | num=2 |
std::vector&lt;RealType&gt; densities() const;
}}
{{dcl end}}

Returns the distribution parameters.

@1@ Returns the list of boundaries of the intervals.

@2@ Returns the list of probability densities at the boundaries of the intervals.

===Parameters===
(none)

===Return value===
The distribution parameters:

@1@ The list of boundaries of the intervals.

@2@ The list of probability densities at the boundaries of the intervals.

===Complexity===
Constant.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/piecewise linear distribution</title>
    <ns>0</ns>
    <id>12775</id>
    <revision>
      <id>62903</id>
      <parentid>61767</parentid>
      <timestamp>2013-07-01T23:45:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="2281">{{cpp/numeric/random/piecewise_linear_distribution/title|piecewise_linear_distribution}}
{{cpp/numeric/random/piecewise_linear_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
piecewise_linear_distribution();
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class InputIt1, class InputIt2 &gt;
piecewise_linear_distribution( InputIt1 first_i, InputIt1 last_i,
                               InputIt2 first_w );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class UnaryOperation &gt;
piecewise_linear_distribution( std::initializer_list&lt;RealType&gt; ilist, 
                               UnaryOperation fw );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class UnaryOperation &gt;
piecewise_linear_distribution( std::size_t nw, 
                               RealType xmin, RealType xmax,
                               UnaryOperation fw );
}}
{{dcl | num=5 | since=c++11 | 1=
explicit piecewise_linear_distribution( const param_type&amp; parm );
}}
{{dcl end}}

Constructs new piecewise linear distribution object.

@1@ Constructs a distribution object with ''n'' = 1, ''ρ0'' = 1, ''b0'' = 0, and ''b1'' = 1.

@2@ Constructs a distribution object from iterators over the and interval sequence {{tt|[first_i, last_i)}} and a matching weight sequence starting at {{tt|first_w}}.

@3@ Constructs a distribution object where the intervals are taken from the initializer list {{tt|ilist}} and the weights generated by the function {{tt|fw}}.

@4@ Constructs a distribution object with the {{tt|fw}} intervals distributed uniformly over {{tt|[xmin, xmax]}}

@5@ Constructs a distribution object initialized with the parameters {{tt|param}}.

===Parameters===
{{par begin}}
{{par | first_i | iterator initialized to the start of the interval sequence}}
{{par | last_i  | iterator initialized to one-past-the-end of the interval sequence}}
{{par | first_w | iterator initialized to the start of the density (weight) sequence}}
{{par | ilist_i | initializer_list yielding the interval sequence}}
{{par | fw     | double(double) function yielding the densities}}
{{par | nw     | the number of densities}}
{{par | xmin   | the lower bound of the interval sequence}}
{{par | xmax   | the upper bound of the interval sequence}}
{{par | parm   | the distribution parameter set}}
{{par end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/piecewise linear distribution/reset</title>
    <ns>0</ns>
    <id>4094</id>
    <revision>
      <id>51011</id>
      <parentid>42986</parentid>
      <timestamp>2013-06-01T03:47:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/reset|piecewise_linear_distribution}}

[[de:cpp/numeric/random/piecewise linear distribution/reset]]
[[es:cpp/numeric/random/piecewise linear distribution/reset]]
[[fr:cpp/numeric/random/piecewise linear distribution/reset]]
[[it:cpp/numeric/random/piecewise linear distribution/reset]]
[[ja:cpp/numeric/random/piecewise linear distribution/reset]]
[[pt:cpp/numeric/random/piecewise linear distribution/reset]]
[[ru:cpp/numeric/random/piecewise linear distribution/reset]]
[[zh:cpp/numeric/random/piecewise linear distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution</title>
    <ns>0</ns>
    <id>3915</id>
    <revision>
      <id>75935</id>
      <parentid>73223</parentid>
      <timestamp>2015-02-05T03:04:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="3072">{{cpp/title|poisson_distribution}}
{{cpp/numeric/random/poisson_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class IntType = int &gt;
class poisson_distribution;
}}

Produces random non-negative integer values {{math|i}}, distributed according to discrete probability function:

:{{math|P(i{{!}}μ) {{=}} {{mfrac|e{{su|p=-μ}}·μ{{su|p=i}}|i!}}}}

The value obtained is the probability of exactly {{math|i}} occurrences of a random event if the expected, ''mean'' number of its occurrence under the same conditions (on the same time/space interval) is {{math|μ}}.

{{tt|std::poisson_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|IntType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|IntType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | poisson_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | poisson_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | poisson_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/poisson_distribution/dsc mean}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | poisson_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | poisson_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | poisson_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | poisson_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | poisson_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());

    // if an event occurs 4 times a minute on average
    // how often is it that it occurs n times in one minute?
    std::poisson_distribution&lt;&gt; d(4);

    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[d(gen)];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; p.first &lt;&lt;
                ' ' &lt;&lt; std::string(p.second/100, '*') &lt;&lt; '\n';
    }
}
 | output=
0 *
1 *******
2 **************
3 *******************
4 *******************
5 ***************
6 **********
7 *****
8 **
9 *
10 
11 
12 
13 
}}

===External links===
[http://mathworld.wolfram.com/PoissonDistribution.html Weisstein, Eric W. &quot;Poisson Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/poisson distribution]]
[[es:cpp/numeric/random/poisson distribution]]
[[fr:cpp/numeric/random/poisson distribution]]
[[it:cpp/numeric/random/poisson distribution]]
[[ja:cpp/numeric/random/poisson distribution]]
[[pt:cpp/numeric/random/poisson distribution]]
[[ru:cpp/numeric/random/poisson distribution]]
[[zh:cpp/numeric/random/poisson distribution]]</text>
      <sha1>7cw2dqz9c2q8qfvclzz1t6dbsly67gh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/max</title>
    <ns>0</ns>
    <id>4006</id>
    <revision>
      <id>51012</id>
      <parentid>42975</parentid>
      <timestamp>2013-06-01T03:47:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="482">{{include page|cpp/numeric/random/distribution/max|poisson_distribution}}

[[de:cpp/numeric/random/poisson distribution/max]]
[[es:cpp/numeric/random/poisson distribution/max]]
[[fr:cpp/numeric/random/poisson distribution/max]]
[[it:cpp/numeric/random/poisson distribution/max]]
[[ja:cpp/numeric/random/poisson distribution/max]]
[[pt:cpp/numeric/random/poisson distribution/max]]
[[ru:cpp/numeric/random/poisson distribution/max]]
[[zh:cpp/numeric/random/poisson distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/mean</title>
    <ns>0</ns>
    <id>5151</id>
    <revision>
      <id>63389</id>
      <parentid>61261</parentid>
      <timestamp>2013-07-10T01:30:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="980">{{cpp/numeric/random/poisson_distribution/title|mean}}
{{cpp/numeric/random/poisson_distribution/navbar}}
{{ddcl | since=c++11 | 1=
double mean() const;
}}

Returns the {{math|μ}} parameter the distribution was constructed with. The parameter defines mean number of occurrences of the event. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
Floating point value identifying the {{math|μ}} distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | poisson_distribution}}
{{dsc end}}

[[de:cpp/numeric/random/poisson distribution/mean]]
[[es:cpp/numeric/random/poisson distribution/mean]]
[[fr:cpp/numeric/random/poisson distribution/mean]]
[[it:cpp/numeric/random/poisson distribution/mean]]
[[ja:cpp/numeric/random/poisson distribution/mean]]
[[pt:cpp/numeric/random/poisson distribution/mean]]
[[ru:cpp/numeric/random/poisson distribution/mean]]
[[zh:cpp/numeric/random/poisson distribution/mean]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/min</title>
    <ns>0</ns>
    <id>3978</id>
    <revision>
      <id>51013</id>
      <parentid>42960</parentid>
      <timestamp>2013-06-01T03:47:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="482">{{include page|cpp/numeric/random/distribution/min|poisson_distribution}}

[[de:cpp/numeric/random/poisson distribution/min]]
[[es:cpp/numeric/random/poisson distribution/min]]
[[fr:cpp/numeric/random/poisson distribution/min]]
[[it:cpp/numeric/random/poisson distribution/min]]
[[ja:cpp/numeric/random/poisson distribution/min]]
[[pt:cpp/numeric/random/poisson distribution/min]]
[[ru:cpp/numeric/random/poisson distribution/min]]
[[zh:cpp/numeric/random/poisson distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/operator cmp</title>
    <ns>0</ns>
    <id>4146</id>
    <revision>
      <id>51014</id>
      <parentid>42945</parentid>
      <timestamp>2013-06-01T03:47:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="563">{{include page|cpp/numeric/random/distribution/operator_cmp|poisson_distribution}}

[[de:cpp/numeric/random/poisson distribution/operator cmp]]
[[es:cpp/numeric/random/poisson distribution/operator cmp]]
[[fr:cpp/numeric/random/poisson distribution/operator cmp]]
[[it:cpp/numeric/random/poisson distribution/operator cmp]]
[[ja:cpp/numeric/random/poisson distribution/operator cmp]]
[[pt:cpp/numeric/random/poisson distribution/operator cmp]]
[[ru:cpp/numeric/random/poisson distribution/operator cmp]]
[[zh:cpp/numeric/random/poisson distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4533</id>
    <revision>
      <id>51015</id>
      <parentid>42941</parentid>
      <timestamp>2013-06-01T03:48:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="608">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|poisson_distribution}}

[[de:cpp/numeric/random/poisson distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/poisson distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/poisson distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/poisson distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/poisson distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/poisson distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/poisson distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/poisson distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/operator()</title>
    <ns>0</ns>
    <id>4104</id>
    <revision>
      <id>42953</id>
      <parentid>15053</parentid>
      <timestamp>2012-11-03T01:08:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="532">{{cpp/numeric/random/distribution/operator()|poisson_distribution}}

[[de:cpp/numeric/random/poisson distribution/operator()]]
[[es:cpp/numeric/random/poisson distribution/operator()]]
[[fr:cpp/numeric/random/poisson distribution/operator()]]
[[it:cpp/numeric/random/poisson distribution/operator()]]
[[ja:cpp/numeric/random/poisson distribution/operator()]]
[[pt:cpp/numeric/random/poisson distribution/operator()]]
[[ru:cpp/numeric/random/poisson distribution/operator()]]
[[zh:cpp/numeric/random/poisson distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/param</title>
    <ns>0</ns>
    <id>4126</id>
    <revision>
      <id>51016</id>
      <parentid>42933</parentid>
      <timestamp>2013-06-01T03:48:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/param|poisson_distribution}}

[[de:cpp/numeric/random/poisson distribution/param]]
[[es:cpp/numeric/random/poisson distribution/param]]
[[fr:cpp/numeric/random/poisson distribution/param]]
[[it:cpp/numeric/random/poisson distribution/param]]
[[ja:cpp/numeric/random/poisson distribution/param]]
[[pt:cpp/numeric/random/poisson distribution/param]]
[[ru:cpp/numeric/random/poisson distribution/param]]
[[zh:cpp/numeric/random/poisson distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/poisson distribution</title>
    <ns>0</ns>
    <id>4923</id>
    <revision>
      <id>62904</id>
      <parentid>50387</parentid>
      <timestamp>2013-07-01T23:45:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1271">{{cpp/numeric/random/poisson_distribution/title|poisson_distribution}}
{{cpp/numeric/random/poisson_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit poisson_distribution( double mean = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit poisson_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|mean}} as the distribution parameter, the second version uses {{tt|params}} as the distribution parameter.

===Parameters===
{{par begin}}
{{par | mean | the ''μ'' distribution parameter (the mean of the distribution)}}
{{par | params | the distribution parameter set}}
{{par end}}

===Notes===
Requires that {{math|0 &lt; mean}}.

[[de:cpp/numeric/random/poisson distribution/poisson distribution]]
[[es:cpp/numeric/random/poisson distribution/poisson distribution]]
[[fr:cpp/numeric/random/poisson distribution/poisson distribution]]
[[it:cpp/numeric/random/poisson distribution/poisson distribution]]
[[ja:cpp/numeric/random/poisson distribution/poisson distribution]]
[[pt:cpp/numeric/random/poisson distribution/poisson distribution]]
[[ru:cpp/numeric/random/poisson distribution/poisson distribution]]
[[zh:cpp/numeric/random/poisson distribution/poisson distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/poisson distribution/reset</title>
    <ns>0</ns>
    <id>4081</id>
    <revision>
      <id>51017</id>
      <parentid>42920</parentid>
      <timestamp>2013-06-01T03:48:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/reset|poisson_distribution}}

[[de:cpp/numeric/random/poisson distribution/reset]]
[[es:cpp/numeric/random/poisson distribution/reset]]
[[fr:cpp/numeric/random/poisson distribution/reset]]
[[it:cpp/numeric/random/poisson distribution/reset]]
[[ja:cpp/numeric/random/poisson distribution/reset]]
[[pt:cpp/numeric/random/poisson distribution/reset]]
[[ru:cpp/numeric/random/poisson distribution/reset]]
[[zh:cpp/numeric/random/poisson distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/rand</title>
    <ns>0</ns>
    <id>2033</id>
    <revision>
      <id>82569</id>
      <parentid>71061</parentid>
      <timestamp>2015-12-23T14:07:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso randint</comment>
      <text xml:space="preserve" bytes="2321">{{cpp/title|rand}}
{{cpp/numeric/random/navbar}}
{{ddcl | header=cstdlib | 
int rand();
}}

Returns a pseudo-random integral value between {{c|0}} and {{lc|RAND_MAX}} (0 and {{tt|RAND_MAX}} included).

{{lc|std::srand()}} seeds the pseudo-random number generator used by {{tt|rand()}}.
If {{tt|rand()}} is used before any calls to {{tt|srand()}}, {{tt|rand()}} behaves as if it was seeded with {{tt|srand(1)}}.

Each time {{tt|rand()}} is seeded with {{tt|srand()}}, it must produce the same sequence of values on successive calls. Other functions in the standard library may call {{tt|rand}}, it is implementation-defined which functions do so.

It is implementation-defined whether {{tt|rand()}} is thread-safe.

===Parameters===
(none)

===Return value===
Pseudo-random integral value between {{c|0}} and {{lc|RAND_MAX}}.

===Notes===
There are no guarantees as to the quality of the random sequence produced.
In the past, some implementations of {{tt|rand()}} have had serious shortcomings in the randomness, distribution and period of the sequence produced (in one well-known example, the low-order bit simply alternated between {{tt|1}} and {{tt|0}} between calls).

{{tt|rand()}} is not recommended for serious random-number generation needs, like cryptography.
{{rev inl|since=c++11|It is recommended to use C++11's [[cpp/numeric/random|random number generation]] facilities to replace rand().}}
===Example===
{{example
 | p=true
 | code=
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;ctime&gt;

int main() 
{
    std::srand(std::time(0)); // use current time as seed for random generator
    int random_variable = std::rand();
    std::cout &lt;&lt; &quot;Random value on [0 &quot; &lt;&lt; RAND_MAX &lt;&lt; &quot;]: &quot; 
              &lt;&lt; random_variable &lt;&lt; '\n';
}
 | output=
Random value on [0 2147483647]: 1373858591
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/dsc uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/dsc srand}}
{{dsc inc | cpp/numeric/random/dsc RAND_MAX}}
{{dsc inc | cpp/experimental/dsc randint }}
{{dsc see c | c/numeric/random/rand}}
{{dsc end}}

[[de:cpp/numeric/random/rand]]
[[es:cpp/numeric/random/rand]]
[[fr:cpp/numeric/random/rand]]
[[it:cpp/numeric/random/rand]]
[[ja:cpp/numeric/random/rand]]
[[pt:cpp/numeric/random/rand]]
[[ru:cpp/numeric/random/rand]]
[[zh:cpp/numeric/random/rand]]</text>
      <sha1>6mpzahyhsm9gy39jwmg1wyrlx6yk5mt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/random device</title>
    <ns>0</ns>
    <id>4974</id>
    <revision>
      <id>74081</id>
      <parentid>74071</parentid>
      <timestamp>2014-12-01T16:40:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>reworded note from talk about PRNG-ized random_device</comment>
      <text xml:space="preserve" bytes="2608">{{cpp/title|random_device}}
{{cpp/numeric/random/random_device/navbar}}
{{ddcl | header=random | since=c++11 | 1=
class random_device;
}}

{{tt|std::random_device}} is a uniformly-distributed integer random number generator that produces non-deterministic random numbers.

{{tt|std::random_device}} may be implemented in terms of an implementation-defined pseudo-random number engine if a non-deterministic source (e.g. a hardware device) is not available to the implementation. In this case each {{tt|std::random_device}} object may generate the same number sequence.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|unsigned int}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc h2 | Construction}}
{{dsc inc | cpp/numeric/random/engine/dsc constructor |random_device}}
{{dsc mem fun | nolink=true | operator{{=}} | notes={{mark|deleted}} | the assignment operator is deleted}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/engine/dsc operator() | random_device}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/random_device/dsc entropy}}
{{dsc inc | cpp/numeric/random/engine/dsc min |random_device}}
{{dsc inc | cpp/numeric/random/engine/dsc max |random_device}}
{{dsc end}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::map&lt;int, int&gt; hist;
    std::uniform_int_distribution&lt;int&gt; dist(0, 9);
    for (int n = 0; n &lt; 20000; ++n) {
        ++hist[dist(rd)]; // note: demo only: the performance of many 
                          // implementations of random_device degrades sharply
                          // once the entropy pool is exhausted. For practical use
                          // random_device is generally only used to seed 
                          // a PRNG such as mt19937
    }
    for (auto p : hist) {
        std::cout &lt;&lt; p.first &lt;&lt; &quot; : &quot; &lt;&lt; std::string(p.second/100, '*') &lt;&lt; '\n';
    }
}
 | output=
0 : ********************
1 : *******************
2 : ********************
3 : ********************
4 : ********************
5 : *******************
6 : ********************
7 : ********************
8 : *******************
9 : ********************
}}

[[de:cpp/numeric/random/random device]]
[[es:cpp/numeric/random/random device]]
[[fr:cpp/numeric/random/random device]]
[[it:cpp/numeric/random/random device]]
[[ja:cpp/numeric/random/random device]]
[[pt:cpp/numeric/random/random device]]
[[ru:cpp/numeric/random/random device]]
[[zh:cpp/numeric/random/random device]]</text>
      <sha1>c0lgodzv4e8wged4lnh3vmz25gbrx9x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/random device/entropy</title>
    <ns>0</ns>
    <id>9613</id>
    <revision>
      <id>91765</id>
      <parentid>90195</parentid>
      <timestamp>2017-03-31T19:57:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1651">{{cpp/numeric/random/random_device/title|entropy}}
{{cpp/numeric/random/random_device/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
double entropy() const;
}}
{{dcl end}}

Obtains an estimate of the random number device entropy, which is a floating-point value between 0 and {{math|log{{su|b=2}}(max()+1)}} (which is equal to {{c|std::numeric_limits&lt;unsigned int&gt;::digits}}). If the device has {{math|n}} states whose individual probabilities are {{math|P{{su|b=0}},...,P{{su|b=n-1}}}}, the device entropy {{math|S}} is defined as

{{math|S {{=}} -Σ{{su|b=i{{=}}0|p=n-1}}P{{su|b=i}}log(P{{su|b=i}})}}

A deterministic random number generator (e.g. a pseudo-random engine) has entropy zero.

===Exceptions===
{{unreviewed noexcept}}

===Return value===
The value of the device entropy, or zero if not applicable.

===Notes===
This function is not fully implemented in some standard libraries. For example, [https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/bits/random.h#L1605 GNU libstdc++] and [https://github.com/llvm-mirror/libcxx/blob/master/src/random.cpp#L147 LLVM libc++] always return zero even though the device is non-deterministic (for libstdc++, see  [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67578 bug 67578]). In comparison, Microsoft Visual C++ implementation always returns 32, and [https://github.com/boostorg/random/blob/master/src/random_device.cpp#L242 boost.random] returns 10.

===Example===
{{example
 | Example output on one of the implementations
 | code=
#include &lt;iostream&gt;
#include &lt;random&gt;

int main()
{
    std::random_device rd;
    std::cout &lt;&lt; rd.entropy() &lt;&lt; '\n';
}
 | p=true
 | output=
32
}}</text>
      <sha1>s66evovq0z9wbipsflwj801d7v5l87f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/random device/max</title>
    <ns>0</ns>
    <id>4980</id>
    <revision>
      <id>51018</id>
      <parentid>42898</parentid>
      <timestamp>2013-06-01T03:48:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="413">{{include page|cpp/numeric/random/engine/max|random_device}}

[[de:cpp/numeric/random/random device/max]]
[[es:cpp/numeric/random/random device/max]]
[[fr:cpp/numeric/random/random device/max]]
[[it:cpp/numeric/random/random device/max]]
[[ja:cpp/numeric/random/random device/max]]
[[pt:cpp/numeric/random/random device/max]]
[[ru:cpp/numeric/random/random device/max]]
[[zh:cpp/numeric/random/random device/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/random device/min</title>
    <ns>0</ns>
    <id>4978</id>
    <revision>
      <id>51019</id>
      <parentid>42891</parentid>
      <timestamp>2013-06-01T03:48:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="413">{{include page|cpp/numeric/random/engine/min|random_device}}

[[de:cpp/numeric/random/random device/min]]
[[es:cpp/numeric/random/random device/min]]
[[fr:cpp/numeric/random/random device/min]]
[[it:cpp/numeric/random/random device/min]]
[[ja:cpp/numeric/random/random device/min]]
[[pt:cpp/numeric/random/random device/min]]
[[ru:cpp/numeric/random/random device/min]]
[[zh:cpp/numeric/random/random device/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/random device/operator()</title>
    <ns>0</ns>
    <id>9879</id>
    <revision>
      <id>63391</id>
      <parentid>58745</parentid>
      <timestamp>2013-07-10T01:30:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="641">{{cpp/numeric/random/random_device/title|operator()}}
{{cpp/numeric/random/random_device/navbar}}
{{ddcl | since=c++11 | 1=
result_type operator()();
}}

Generates a non-deterministic uniformly-distributed random value. 

===Parameters===
(none)

===Return value===
A random number uniformly distributed in [{{c|min()}}, {{c|max()}}].

===Exceptions===
Throws an implementation-defined exception derived from {{lc|std::exception}} if a random number could not be generated.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc min |random_device}}
{{dsc inc | cpp/numeric/random/engine/dsc max |random_device}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/random device/random device</title>
    <ns>0</ns>
    <id>6321</id>
    <revision>
      <id>87186</id>
      <parentid>67759</parentid>
      <timestamp>2016-08-02T12:49:59Z</timestamp>
      <contributor>
        <ip>104.132.25.67</ip>
      </contributor>
      <comment>CPUs don't have commands, they have instructions.</comment>
      <text xml:space="preserve" bytes="2148">{{cpp/numeric/random/random_device/title|random_device}}
{{cpp/numeric/random/random_device/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit random_device(const std::string&amp; token = /*implementation-defined*/ );
}}
{{dcl | num=2 | since=c++11 | 1=
random_device(const random_device&amp; ) = delete;
}}
{{dcl end}}

@1@ Constructs a new {{lc|std::random_device}} object, making use of the argument {{tt|token}}, if provided, in implementation-defined manner. 
@2@ The copy constructor is deleted: {{tt|std::random_device}} is not copyable.

===Exceptions===
Throws an implementation-defined exceptions derived from {{lc|std::exception}} on failure.

===Notes===
The implementations in [http://llvm.org/svn/llvm-project/libcxx/trunk/src/random.cpp libc++] and [http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/src/c%2B%2B11/random.cc?view=markup#l77 libstdc++] expect {{tt|token}} to be the name of a character device that produces random numbers when read from, with the default value {{c|&quot;/dev/urandom&quot;}}, although where the CPU instruction RDRND is available, libstdc++ uses that as the default.

===Example===
{{example
 | Demonstrates the two commonly available types of {{tt|std::random_device}} on Linux
 | code=
#include &lt;iostream&gt;
#include &lt;random&gt;

int main()
{

    std::uniform_int_distribution&lt;int&gt; d(0, 10);

    std::random_device rd1; // uses RDRND or /dev/urandom
    for(int n = 0; n &lt; 10; ++n)
        std::cout &lt;&lt; d(rd1) &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    std::random_device rd2(&quot;/dev/random&quot;); // much slower on Linux
    for(int n = 0; n &lt; 10; ++n)
        std::cout &lt;&lt; d(rd2) &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | p=true
 | output=
7 10 7 0 4 4 6 9 4 7 
2 4 10 6 3 2 0 6 3 7 
}}

[[de:cpp/numeric/random/random device/random device]]
[[es:cpp/numeric/random/random device/random device]]
[[fr:cpp/numeric/random/random device/random device]]
[[it:cpp/numeric/random/random device/random device]]
[[ja:cpp/numeric/random/random device/random device]]
[[pt:cpp/numeric/random/random device/random device]]
[[ru:cpp/numeric/random/random device/random device]]
[[zh:cpp/numeric/random/random device/random device]]</text>
      <sha1>epniwqv7nubgl6ss4bl6o7ap6d32u5g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/seed seq</title>
    <ns>0</ns>
    <id>5144</id>
    <revision>
      <id>63782</id>
      <parentid>63762</parentid>
      <timestamp>2013-07-24T22:30:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Partial undo: we don't use tabs</comment>
      <text xml:space="preserve" bytes="2125">{{cpp/title|seed_seq}}
{{cpp/numeric/random/seed_seq/navbar}}
{{ddcl | header=random | since=c++11 | 1=
class seed_seq;
}}

{{tt|std::seed_seq}} consumes a sequence of integer-valued data and produces a requested number of unsigned integer values {{tt|i}}, {{math|0 ≤ i &lt; 2{{su|p=32}}}}, based on the consumed data. The produced values are distributed over the entire 32-bit range even if the consumed values are close.

It provides a way to seed a large number of random number engines or to seed a generator that requires a lot of entropy, given a small seed or a poorly distributed initial seed sequence.

{{tt|std::seed_seq}} meets the requirements of {{concept|SeedSequence}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{lc|std::uint_least32_t}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/numeric/random/seed_seq/seed_seq | constructs and seeds the std::seed_seq object}}
{{dsc mem fun | nolink=true | operator{{=}} | not copy-assignable | notes={{mark|deleted}}}}
{{dsc mem fun | cpp/numeric/random/seed_seq/generate | calculates the bias-eliminated, evenly distributed 32-bit values}}
{{dsc mem fun | cpp/numeric/random/seed_seq/size | obtains the number of 32-bit values stored in std::seed_seq }}
{{dsc mem fun | cpp/numeric/random/seed_seq/param | obtains the 32-bit values stored in std::seed_seq}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;random&gt;
#include &lt;cstdint&gt;
#include &lt;iostream&gt;

int main()
{
    std::seed_seq seq{1,2,3,4,5};
    std::vector&lt;std::uint32_t&gt; seeds(10);
    seq.generate(seeds.begin(), seeds.end());
    for (std::uint32_t n : seeds) {
        std::cout &lt;&lt; n &lt;&lt; '\n';
    }
}
 | output=
4204997637
4246533866
1856049002
1129615051
690460811
1075771511
46783058
3904109078
1534123438
1495905678 
}}

[[de:cpp/numeric/random/seed seq]]
[[es:cpp/numeric/random/seed seq]]
[[fr:cpp/numeric/random/seed seq]]
[[it:cpp/numeric/random/seed seq]]
[[ja:cpp/numeric/random/seed seq]]
[[pt:cpp/numeric/random/seed seq]]
[[ru:cpp/numeric/random/seed seq]]
[[zh:cpp/numeric/random/seed seq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/seed seq/generate</title>
    <ns>0</ns>
    <id>8938</id>
    <revision>
      <id>66201</id>
      <parentid>62907</parentid>
      <timestamp>2013-11-09T22:17:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++14 (exceptions)</comment>
      <text xml:space="preserve" bytes="5079">{{cpp/numeric/random/seed_seq/title | generate}}
{{cpp/numeric/random/seed_seq/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt; class RandomIt &gt;
void generate( RandomIt begin, RandomIt end );
}}
{{dcl end}}

Fills the range {{c|[begin, end)}} with unsigned integer values {{tt|i}}, {{math|0 ≤ i &lt; 2{{su|p=32}}}}, based on the data originally provided in the constructor of this {{tt|seed_seq}}. The produced values are distributed over the entire 32-bit range even if the initial values were strongly biased.

The following algorithm is used (adapted from the initialization sequence of the Mersenne Twister generator by [http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html Makoto Matsumoto and Takuji Nishimura], incorporating the improvements made by [http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/M062821.pdf Mutsuo Saito in 2007])

* If {{c|1=begin == end}}, do nothing. Otherwise,

* First, set each element of the output range to the value {{c|0x8b8b8b8b}}

* Transform the elements of the output range according to the following algorithm:

For {{c|1=k = 0,..., m-1}}&lt;br&gt;

where {{c|1=m=max(s+1, n)}}&lt;br&gt;
and {{c|1=n=end-begin}}&lt;br&gt;
and {{c|1=s=v.size()}}&lt;br&gt;
and {{c|v}} is the private container holding the values originally provided by the constructor of this {{tt|seed_seq}} object,
# {{c|1=begin[k+p] += r1}}
# {{c|1=begin[k+q] += r2}}
# {{c|1=begin[k] = r2}},
where {{c|1=p=(n-t)/2}}&lt;br&gt;
and {{c|1=q=p+t}}&lt;br&gt;
and {{c|1=t=(n &gt;= 623) ? 11 : (n &gt;= 68) ? 7 : (n &gt;= 39) ? 5 : (n &gt;= 7) ? 3 : (n - 1) / 2 }}&lt;br&gt;
and {{c|1=r1=1664525 * T(begin[k]^begin[k+p]^begin[k−1])}}&lt;br&gt;
and {{c|1=T(x) = x ^ (x &gt;&gt; 27)}}&lt;br&gt;
and {{c|1=r2=r1+s}} if {{c|1=k==0}}, {{c|1=r2=r1 + k%n + v[k-1]}} if {{c|1=0&lt;k&lt;=s}}, {{c|1=r2=r1 + k%n}} if {{c|1=k&gt;s}}.

For {{c|1=k = m,..., m+n-1}}, 
# {{c|1=begin[k+p] ^= r3}}
# {{c|1=begin[k+q] ^= r4}}
# {{c|1=begin[k]=r4}}
where {{c|1=r3 = 1566083941 * T(begin[k]+begin[k+p]+begin[k-1])}}&lt;br&gt;
and {{c|1=r4=r3 - k%n}}

where all calculations are performed {{math|modulo 2{{su|p=32}}}} and where the indexing of the output range ({{c|begin[x]}}) is taken {{math|modulo n}}.

===Parameters===
{{par begin}}
{{par | begin, end | mutable random-access iterators whose {{c|std::iterator_traits&lt;&gt;::value_type}} is an unsigned integer type suitable for storing 32-bit values}}
{{par hreq}}
{{par req concept | RandomIt | RandomAccessIterator}}
{{par end}}

===Return value===
none, the results are written to the {{c|[begin, end)}} range.

===Exceptions===
Only throws if the operations on {{tt|begin}} and {{tt|end}} throw.

===Example===

{{example
 |
 | code=
#include &lt;random&gt;
#include &lt;iostream&gt;

int main()
{
    std::seed_seq seq({1,2,3,4,5});
    std::vector&lt;std::uint32_t&gt; seeds(10);
    seq.generate(seeds.begin(), seeds.end());
// Step 1: fill with 0x8b8b8b8b
// seeds = {2341178251, 2341178251, 2341178251, 2341178251, 2341178251,
//          2341178251, 2341178251, 2341178251, 2341178251, 2341178251 }
//
// Step 2: 
// n = 10, s = 5, t = 3, p = 3, q = 6, m = 10
//
// First iteration, k = 0; r1 = 1371501266, r2 = 1371501271
//
// seeds = {1371501271, 2341178251, 2341178251, 3712679517, 2341178251,
//          2341178251, 3712679522, 2341178251, 2341178251, 2341178251 }
//
// Iterations from k = 1 to k = 5 (r2 = r1 + k%n + v[k-1])
//
// r1 = 2786190137, 3204727651, 4173325571, 1979226628, 401983366
// r2 = 2786190139, 3204727655, 4173325577, 1979226636, 401983376
//
// seeds = {3350727907, 3188173515, 3204727655, 4173325577, 1979226636,
//           401983376, 3591037797, 2811627722, 1652921976, 2219536532 } 
//
// Iterations from k = 6 to k = 9 (r2 = r1 + k%n)
//
// r1 = 2718637909, 1378394210, 2297813071, 1608643617
// r2 = 2718637915, 1378394217, 2297813079, 1608643626
//
// seeds = { 434154821, 1191019290, 3237041891, 1256752498, 4277039715,
//          2010627002, 2718637915, 1378394217, 2297813079, 1608643626 } 
//
// Step 3
// iterations from k = 10 to k = 19, using ^= to modify the output
//
// r1 = 1615303485, 3210438310, 893477041, 2884072672, 1918321961,
// r2 = 1615303485, 3210438309, 893477039, 2884072669, 1918321957
//
// seeds = { 303093272, 3210438309,  893477039, 2884072669, 1918321957,
//          1117182731, 1772877958, 2669970405, 3182737656, 4094066935 }
//
// r1 =  423054846, 46783064, 3904109085, 1534123446, 1495905687
// r2 =  423054841, 46783058, 3904109078, 1534123438, 1495905678
//
// seeds = { 4204997637, 4246533866, 1856049002, 1129615051, 690460811,
//           1075771511,   46783058, 3904109078, 1534123438, 1495905678 }

    for(std::uint32_t n : seeds)
        std::cout &lt;&lt; n &lt;&lt; '\n';
}
 | output=
4204997637
4246533866
1856049002
1129615051
690460811
1075771511
46783058
3904109078
1534123438
1495905678 
}}

[[de:cpp/numeric/random/seed seq/generate]]
[[es:cpp/numeric/random/seed seq/generate]]
[[fr:cpp/numeric/random/seed seq/generate]]
[[it:cpp/numeric/random/seed seq/generate]]
[[ja:cpp/numeric/random/seed seq/generate]]
[[pt:cpp/numeric/random/seed seq/generate]]
[[ru:cpp/numeric/random/seed seq/generate]]
[[zh:cpp/numeric/random/seed seq/generate]]</text>
      <sha1>nzxv2xcl2jcs0r9bd4qziwc3rw4x3aq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/seed seq/param</title>
    <ns>0</ns>
    <id>8941</id>
    <revision>
      <id>66203</id>
      <parentid>62908</parentid>
      <timestamp>2013-11-09T22:18:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++14 (exceptions)</comment>
      <text xml:space="preserve" bytes="1167">{{cpp/numeric/random/seed_seq/title | param}}
{{cpp/numeric/random/seed_seq/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt; class OutputIt &gt;
void param( OutputIt dest ) const;
}}
{{dcl end}}

Outputs the initial seed sequence that's stored in the {{tt|std::seed_seq}} object.

===Parameters===
{{par begin}}
{{par | dest | output iterator such that the expression {{c|1=*dest=rt}} is valid for a value {{tt|rt}} of {{tt|result_type}}}}
{{par hreq}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Return value===
(none)

===Exceptions===
Throws only if an operation on {{tt|dest}} throws.

===Example===
{{example
 |
 | code=
#include &lt;random&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
int main()
{
    std::seed_seq s1 = {-1, 0, 1};
    s1.param(std::ostream_iterator&lt;int&gt;(std::cout, &quot; &quot;));
}
 | output=
-1 0 1
}}

[[de:cpp/numeric/random/seed seq/param]]
[[es:cpp/numeric/random/seed seq/param]]
[[fr:cpp/numeric/random/seed seq/param]]
[[it:cpp/numeric/random/seed seq/param]]
[[ja:cpp/numeric/random/seed seq/param]]
[[pt:cpp/numeric/random/seed seq/param]]
[[ru:cpp/numeric/random/seed seq/param]]
[[zh:cpp/numeric/random/seed seq/param]]</text>
      <sha1>g13y0moy8f8k7jumtymzif82vpd5n1x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/seed seq/seed seq</title>
    <ns>0</ns>
    <id>8940</id>
    <revision>
      <id>66200</id>
      <parentid>62909</parentid>
      <timestamp>2013-11-09T22:16:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++14 (exceptions)</comment>
      <text xml:space="preserve" bytes="2335">{{cpp/numeric/random/seed_seq/title | seed_seq}}
{{cpp/numeric/random/seed_seq/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
seed_seq();
}}
{{dcl | num=2 | since=c++11 | 1=
seed_seq( const seed_seq&amp; ) = delete;
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class InputIt &gt;
seed_seq( InputIt begin, InputIt end );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class T &gt;
seed_seq( std::initializer_list&lt;T&gt; il );
}}
{{dcl end}}

@1@ The default constructor creates a {{tt|std::seed_seq}} object with an initial seed sequence of length zero.
@2@ The copy constructor is deleted: {{tt|std::seed_seq}} is not copyable.
@3@ Constructs a {{tt|std::seed_seq}} with the initial seed sequence obtained by iterating over the range {{tt|[begin, end)}} and copying the values obtained by dereferencing the iterator, {{math|modulo 2{{su|p=32}}}} (that is, the lower 32 bits are copied)
@4@ Equivalent to {{c|seed_seq(il.begin(), il.end())}}. This constructor enables [[cpp/language/list_initialization|list-initialization]].

===Parameters===
{{par begin}}
{{par | begin, end | the initial seed sequence represented as a pair of input iterators whose {{c|std::iterator_traits&lt;&gt;::value_type}} is an integer type}}
{{par | il | {{lc|std::initializer_list}} of objects of integer type, providing the iniial seed sequence}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Exceptions===
@1@ Does not throw

===Example===
{{example
 |
 | code=
#include &lt;random&gt;
#include &lt;sstream&gt;
#include &lt;iterator&gt;
int main()
{
    std::seed_seq s1; // default-constructible
    std::seed_seq s2{1, 2, 3}; // can use list-initialization
    std::seed_seq s3 = {-1, 0, 1}; // another form of list-initialization
    int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::seed_seq s4(a, a + 10); // can use iterators
    std::istringstream buf(&quot;1 2 3 4 5&quot;); 
    std::istream_iterator&lt;int&gt; beg(buf), end;
    std::seed_seq s5(beg, end); // even stream input iterators
}
 | output=
}}

[[de:cpp/numeric/random/seed seq/seed seq]]
[[es:cpp/numeric/random/seed seq/seed seq]]
[[fr:cpp/numeric/random/seed seq/seed seq]]
[[it:cpp/numeric/random/seed seq/seed seq]]
[[ja:cpp/numeric/random/seed seq/seed seq]]
[[pt:cpp/numeric/random/seed seq/seed seq]]
[[ru:cpp/numeric/random/seed seq/seed seq]]
[[zh:cpp/numeric/random/seed seq/seed seq]]</text>
      <sha1>nb4klruzuhgn2o4aljyp3p5wxlojvh7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/seed seq/size</title>
    <ns>0</ns>
    <id>8942</id>
    <revision>
      <id>91434</id>
      <parentid>78447</parentid>
      <timestamp>2017-03-31T19:43:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="984">{{cpp/numeric/random/seed_seq/title | size}}
{{cpp/numeric/random/seed_seq/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
std::size_t size() const;
}}
{{dcl end}}

Returns the size of the stored initial seed sequence.

===Parameters===
(none)

===Return value===
The size of the private container that was populated at construction time.

===Complexity===
Constant time.

===Exeptions===
{{rev begin}}
{{rev|until=c++17|(none)}}
{{rev|since=c++17|{{unreviewed noexcept}}}}
{{rev end}}

===Example===

{{example
 |
 | code=
#include &lt;random&gt;
#include &lt;iostream&gt;
int main()
{
    std::seed_seq s1 = {-1, 0, 1};
    std::cout &lt;&lt; s1.size() &lt;&lt; '\n';
}
 | output=
3
}}

[[de:cpp/numeric/random/seed seq/size]]
[[es:cpp/numeric/random/seed seq/size]]
[[fr:cpp/numeric/random/seed seq/size]]
[[it:cpp/numeric/random/seed seq/size]]
[[ja:cpp/numeric/random/seed seq/size]]
[[pt:cpp/numeric/random/seed seq/size]]
[[ru:cpp/numeric/random/seed seq/size]]
[[zh:cpp/numeric/random/seed seq/size]]</text>
      <sha1>qsxbys95hw65lopgz64onjk9zw8sk1k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine</title>
    <ns>0</ns>
    <id>3703</id>
    <revision>
      <id>72708</id>
      <parentid>63198</parentid>
      <timestamp>2014-09-20T04:14:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Member types */ format</comment>
      <text xml:space="preserve" bytes="2534">{{cpp/title|shuffle_order_engine}}
{{cpp/numeric/random/shuffle_order_engine/navbar}}
{{dcl begin}}
{{dcl header | random}}
{{dcl | since=c++11 | 
template&lt;
    class Engine, 
    std::size_t K
&gt; class shuffle_order_engine;
}}
{{dcl end}}

{{tt|shuffle_order_engine}} is a random number engine adaptor that shuffles the random numbers generated by the base engine. It maintains a table of size {{tt|K}} and delivers a randomly selected number from that table when requested, replacing it with a number generated by the base engine.

The following typedef defines the random number engine with one commonly used parameter set:
{{dsc begin}}
{{dsc header | random}}
{{dsc hitem | Type | Definition}}
{{dsc inc | cpp/numeric/random/dsc knuth_b}}
{{dsc end}}

===Template parameters===
{{par begin}}
{{par | Engine | the type of the wrapped engine }}
{{par | K | the size of the internal table. Must be greater than {{math|0}} }}
{{par hreq}}
{{par req concept | Engine | RandomNumberEngine}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{tt|Engine::result_type}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc constructor |shuffle_order_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc seed |shuffle_order_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc base |shuffle_order_engine}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator() |shuffle_order_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc discard |shuffle_order_engine}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/adaptor/dsc min |shuffle_order_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc max |shuffle_order_engine}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator_cmp |shuffle_order_engine}}
{{dsc inc | cpp/numeric/random/adaptor/dsc operator_ltltgtgt |shuffle_order_engine}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} table_size | the size of the internal table, {{tt|K}} }}
{{dsc end}}

[[de:cpp/numeric/random/shuffle order engine]]
[[es:cpp/numeric/random/shuffle order engine]]
[[fr:cpp/numeric/random/shuffle order engine]]
[[it:cpp/numeric/random/shuffle order engine]]
[[ja:cpp/numeric/random/shuffle order engine]]
[[pt:cpp/numeric/random/shuffle order engine]]
[[ru:cpp/numeric/random/shuffle order engine]]
[[zh:cpp/numeric/random/shuffle order engine]]</text>
      <sha1>1kpzz6rd7jfejtpop51hv51gg9awmsa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/base</title>
    <ns>0</ns>
    <id>8804</id>
    <revision>
      <id>51020</id>
      <parentid>42832</parentid>
      <timestamp>2013-06-01T03:48:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="486">{{include page|cpp/numeric/random/adaptor/base|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/base]]
[[es:cpp/numeric/random/shuffle order engine/base]]
[[fr:cpp/numeric/random/shuffle order engine/base]]
[[it:cpp/numeric/random/shuffle order engine/base]]
[[ja:cpp/numeric/random/shuffle order engine/base]]
[[pt:cpp/numeric/random/shuffle order engine/base]]
[[ru:cpp/numeric/random/shuffle order engine/base]]
[[zh:cpp/numeric/random/shuffle order engine/base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/discard</title>
    <ns>0</ns>
    <id>8806</id>
    <revision>
      <id>51021</id>
      <parentid>42824</parentid>
      <timestamp>2013-06-01T03:48:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="513">{{include page|cpp/numeric/random/adaptor/discard|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/discard]]
[[es:cpp/numeric/random/shuffle order engine/discard]]
[[fr:cpp/numeric/random/shuffle order engine/discard]]
[[it:cpp/numeric/random/shuffle order engine/discard]]
[[ja:cpp/numeric/random/shuffle order engine/discard]]
[[pt:cpp/numeric/random/shuffle order engine/discard]]
[[ru:cpp/numeric/random/shuffle order engine/discard]]
[[zh:cpp/numeric/random/shuffle order engine/discard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/max</title>
    <ns>0</ns>
    <id>8808</id>
    <revision>
      <id>51022</id>
      <parentid>42818</parentid>
      <timestamp>2013-06-01T03:48:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="477">{{include page|cpp/numeric/random/adaptor/max|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/max]]
[[es:cpp/numeric/random/shuffle order engine/max]]
[[fr:cpp/numeric/random/shuffle order engine/max]]
[[it:cpp/numeric/random/shuffle order engine/max]]
[[ja:cpp/numeric/random/shuffle order engine/max]]
[[pt:cpp/numeric/random/shuffle order engine/max]]
[[ru:cpp/numeric/random/shuffle order engine/max]]
[[zh:cpp/numeric/random/shuffle order engine/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/min</title>
    <ns>0</ns>
    <id>8807</id>
    <revision>
      <id>51023</id>
      <parentid>42812</parentid>
      <timestamp>2013-06-01T03:48:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="477">{{include page|cpp/numeric/random/adaptor/min|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/min]]
[[es:cpp/numeric/random/shuffle order engine/min]]
[[fr:cpp/numeric/random/shuffle order engine/min]]
[[it:cpp/numeric/random/shuffle order engine/min]]
[[ja:cpp/numeric/random/shuffle order engine/min]]
[[pt:cpp/numeric/random/shuffle order engine/min]]
[[ru:cpp/numeric/random/shuffle order engine/min]]
[[zh:cpp/numeric/random/shuffle order engine/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/operator cmp</title>
    <ns>0</ns>
    <id>8809</id>
    <revision>
      <id>51024</id>
      <parentid>42796</parentid>
      <timestamp>2013-06-01T03:48:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="558">{{include page|cpp/numeric/random/adaptor/operator cmp|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/operator cmp]]
[[es:cpp/numeric/random/shuffle order engine/operator cmp]]
[[fr:cpp/numeric/random/shuffle order engine/operator cmp]]
[[it:cpp/numeric/random/shuffle order engine/operator cmp]]
[[ja:cpp/numeric/random/shuffle order engine/operator cmp]]
[[pt:cpp/numeric/random/shuffle order engine/operator cmp]]
[[ru:cpp/numeric/random/shuffle order engine/operator cmp]]
[[zh:cpp/numeric/random/shuffle order engine/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/operator ltltgtgt</title>
    <ns>0</ns>
    <id>8810</id>
    <revision>
      <id>51025</id>
      <parentid>42788</parentid>
      <timestamp>2013-06-01T03:48:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="603">{{include page|cpp/numeric/random/adaptor/operator ltltgtgt|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]
[[es:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]
[[fr:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]
[[it:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]
[[ja:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]
[[pt:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]
[[ru:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]
[[zh:cpp/numeric/random/shuffle order engine/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/operator()</title>
    <ns>0</ns>
    <id>8805</id>
    <revision>
      <id>42804</id>
      <parentid>37176</parentid>
      <timestamp>2012-11-03T00:30:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="527">{{cpp/numeric/random/adaptor/operator()|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/operator()]]
[[es:cpp/numeric/random/shuffle order engine/operator()]]
[[fr:cpp/numeric/random/shuffle order engine/operator()]]
[[it:cpp/numeric/random/shuffle order engine/operator()]]
[[ja:cpp/numeric/random/shuffle order engine/operator()]]
[[pt:cpp/numeric/random/shuffle order engine/operator()]]
[[ru:cpp/numeric/random/shuffle order engine/operator()]]
[[zh:cpp/numeric/random/shuffle order engine/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/seed</title>
    <ns>0</ns>
    <id>8803</id>
    <revision>
      <id>51026</id>
      <parentid>42780</parentid>
      <timestamp>2013-06-01T03:48:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="486">{{include page|cpp/numeric/random/adaptor/seed|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/seed]]
[[es:cpp/numeric/random/shuffle order engine/seed]]
[[fr:cpp/numeric/random/shuffle order engine/seed]]
[[it:cpp/numeric/random/shuffle order engine/seed]]
[[ja:cpp/numeric/random/shuffle order engine/seed]]
[[pt:cpp/numeric/random/shuffle order engine/seed]]
[[ru:cpp/numeric/random/shuffle order engine/seed]]
[[zh:cpp/numeric/random/shuffle order engine/seed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/shuffle order engine/shuffle order engine</title>
    <ns>0</ns>
    <id>8802</id>
    <revision>
      <id>51027</id>
      <parentid>42774</parentid>
      <timestamp>2013-06-01T03:48:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="621">{{include page|cpp/numeric/random/adaptor/constructor|shuffle_order_engine}}

[[de:cpp/numeric/random/shuffle order engine/shuffle order engine]]
[[es:cpp/numeric/random/shuffle order engine/shuffle order engine]]
[[fr:cpp/numeric/random/shuffle order engine/shuffle order engine]]
[[it:cpp/numeric/random/shuffle order engine/shuffle order engine]]
[[ja:cpp/numeric/random/shuffle order engine/shuffle order engine]]
[[pt:cpp/numeric/random/shuffle order engine/shuffle order engine]]
[[ru:cpp/numeric/random/shuffle order engine/shuffle order engine]]
[[zh:cpp/numeric/random/shuffle order engine/shuffle order engine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/srand</title>
    <ns>0</ns>
    <id>2038</id>
    <revision>
      <id>91228</id>
      <parentid>82570</parentid>
      <timestamp>2017-03-28T12:13:57Z</timestamp>
      <contributor>
        <ip>104.132.45.70</ip>
      </contributor>
      <text xml:space="preserve" bytes="2061">{{cpp/title|srand}}
{{cpp/numeric/random/navbar}}
{{ddcl | header=cstdlib | 
void srand( unsigned seed );
}}

Seeds the pseudo-random number generator used by {{lc|std::rand()}} with the value {{tt|seed}}.

If {{tt|rand()}} is used before any calls to {{tt|srand()}}, {{tt|rand()}} behaves as if it was seeded with {{tt|srand(1)}}.

Each time {{tt|rand()}} is seeded with the same {{tt|seed}}, it must produce the same sequence of values.

{{tt|srand()}} is not guaranteed to be thread-safe.

===Parameters===
{{par begin}}
{{par | seed | the seed value}}
{{par end}}

===Return value===
(none)

===Notes===
Generally speaking, the pseudo-random number generator should only be seeded once, before any calls to {{tt|rand()}}, at the start of the program.
It should not be repeatedly seeded, or reseeded every time you wish to generate a new batch of pseudo-random numbers.

Standard practice is to use the result of a call to {{c|time(0)}} as the seed.
However, {{tt|time()}} returns a {{c|time_t}} value, and {{tt|time_t}} is not guaranteed to be an integral type.
In practice, though, every major implementation defines {{tt|time_t}} to be an integral type, and this is also what POSIX requires.

===Example===
{{example
 | p=true
 | code=
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;ctime&gt;

int main() 
{
    std::srand(std::time(0)); //use current time as seed for random generator
    int random_variable = std::rand();
    std::cout &lt;&lt; &quot;Random value on [0 &quot; &lt;&lt; RAND_MAX &lt;&lt; &quot;]: &quot; 
              &lt;&lt; random_variable &lt;&lt; '\n';
}
 | output=
Random value on [0 2147483647]: 1373858591
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/numeric/random/dsc rand}}
{{dsc inc | cpp/numeric/random/dsc RAND_MAX}}
{{dsc inc | cpp/experimental/dsc reseed }}
{{dsc see c | c/numeric/random/srand}}
{{dsc end}}

[[de:cpp/numeric/random/srand]]
[[es:cpp/numeric/random/srand]]
[[fr:cpp/numeric/random/srand]]
[[it:cpp/numeric/random/srand]]
[[ja:cpp/numeric/random/srand]]
[[pt:cpp/numeric/random/srand]]
[[ru:cpp/numeric/random/srand]]
[[zh:cpp/numeric/random/srand]]</text>
      <sha1>dtgw1ppglvvjbsgpn2o1t7hzom2yq4x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution</title>
    <ns>0</ns>
    <id>3925</id>
    <revision>
      <id>75945</id>
      <parentid>73233</parentid>
      <timestamp>2015-02-05T03:14:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="2792">{{cpp/title|student_t_distribution}}
{{cpp/numeric/random/student_t_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class student_t_distribution;
}}

Produces random floating-point values {{math|x}}, distributed according to probability density function:

:{{math|P(x{{!}}n) {{=}} {{mfrac|1|{{mrad|n&amp;pi;}}}} · {{mfrac|Γ({{mfrac|n+1|2}})|Γ({{mfrac|n|2}})}} · {{mparen|(|)|1+{{mfrac|x{{su|p=2}}|n}}|rows=3}} {{su|p=-{{mfrac|n+1|2}}}}}}

where {{math|n}} is known as the number of ''degrees of freedom''. This distribution is used when estimating the ''mean'' of an unknown normally distributed value given {{math|n+1}} independent measurements, each with additive errors of unknown standard deviation, as in physical measurements. Or, alternatively, when estimating the unknown mean of a normal distribution with unknown standard deviation, given {{math|n+1}} samples.

{{tt|std::student_t_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | student_t_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | student_t_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | student_t_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/student_t_distribution/dsc n}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | student_t_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | student_t_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | student_t_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | student_t_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | student_t_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===External links===
[http://mathworld.wolfram.com/Studentst-Distribution.html Weisstein, Eric W. &quot;Student's t-Distribution.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/random/student t distribution]]
[[es:cpp/numeric/random/student t distribution]]
[[fr:cpp/numeric/random/student t distribution]]
[[it:cpp/numeric/random/student t distribution]]
[[ja:cpp/numeric/random/student t distribution]]
[[pt:cpp/numeric/random/student t distribution]]
[[ru:cpp/numeric/random/student t distribution]]
[[zh:cpp/numeric/random/student t distribution]]</text>
      <sha1>as4lr84jmacyweizytj20u8d3qmhf12</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/max</title>
    <ns>0</ns>
    <id>4017</id>
    <revision>
      <id>51028</id>
      <parentid>42752</parentid>
      <timestamp>2013-06-01T03:48:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/max|student_t_distribution}}

[[de:cpp/numeric/random/student t distribution/max]]
[[es:cpp/numeric/random/student t distribution/max]]
[[fr:cpp/numeric/random/student t distribution/max]]
[[it:cpp/numeric/random/student t distribution/max]]
[[ja:cpp/numeric/random/student t distribution/max]]
[[pt:cpp/numeric/random/student t distribution/max]]
[[ru:cpp/numeric/random/student t distribution/max]]
[[zh:cpp/numeric/random/student t distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/min</title>
    <ns>0</ns>
    <id>3969</id>
    <revision>
      <id>51029</id>
      <parentid>42744</parentid>
      <timestamp>2013-06-01T03:48:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/min|student_t_distribution}}

[[de:cpp/numeric/random/student t distribution/min]]
[[es:cpp/numeric/random/student t distribution/min]]
[[fr:cpp/numeric/random/student t distribution/min]]
[[it:cpp/numeric/random/student t distribution/min]]
[[ja:cpp/numeric/random/student t distribution/min]]
[[pt:cpp/numeric/random/student t distribution/min]]
[[ru:cpp/numeric/random/student t distribution/min]]
[[zh:cpp/numeric/random/student t distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/n</title>
    <ns>0</ns>
    <id>5158</id>
    <revision>
      <id>63394</id>
      <parentid>61252</parentid>
      <timestamp>2013-07-10T01:30:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="961">{{cpp/numeric/random/student_t_distribution/title|n}}
{{cpp/numeric/random/student_t_distribution/navbar}}
{{ddcl | since=c++11 | 1=
RealType n() const;
}}

Returns the {{math|n}} distribution parameter (number of the degrees of freedom) the distribution was constructed with. The default value is {{c|1.0}}.

===Parameters===
(none)

===Return value===
Floating point value identifying the degrees of freedom of the distribution

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | student_t_distribution}}
{{dsc end}}

[[de:cpp/numeric/random/student t distribution/n]]
[[es:cpp/numeric/random/student t distribution/n]]
[[fr:cpp/numeric/random/student t distribution/n]]
[[it:cpp/numeric/random/student t distribution/n]]
[[ja:cpp/numeric/random/student t distribution/n]]
[[pt:cpp/numeric/random/student t distribution/n]]
[[ru:cpp/numeric/random/student t distribution/n]]
[[zh:cpp/numeric/random/student t distribution/n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/operator cmp</title>
    <ns>0</ns>
    <id>4156</id>
    <revision>
      <id>51030</id>
      <parentid>42725</parentid>
      <timestamp>2013-06-01T03:48:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/operator_cmp|student_t_distribution}}

[[de:cpp/numeric/random/student t distribution/operator cmp]]
[[es:cpp/numeric/random/student t distribution/operator cmp]]
[[fr:cpp/numeric/random/student t distribution/operator cmp]]
[[it:cpp/numeric/random/student t distribution/operator cmp]]
[[ja:cpp/numeric/random/student t distribution/operator cmp]]
[[pt:cpp/numeric/random/student t distribution/operator cmp]]
[[ru:cpp/numeric/random/student t distribution/operator cmp]]
[[zh:cpp/numeric/random/student t distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4523</id>
    <revision>
      <id>51031</id>
      <parentid>42718</parentid>
      <timestamp>2013-06-01T03:48:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="626">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|student_t_distribution}}

[[de:cpp/numeric/random/student t distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/student t distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/student t distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/student t distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/student t distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/student t distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/student t distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/student t distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/operator()</title>
    <ns>0</ns>
    <id>4113</id>
    <revision>
      <id>42730</id>
      <parentid>15062</parentid>
      <timestamp>2012-11-03T00:17:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="550">{{cpp/numeric/random/distribution/operator()|student_t_distribution}}

[[de:cpp/numeric/random/student t distribution/operator()]]
[[es:cpp/numeric/random/student t distribution/operator()]]
[[fr:cpp/numeric/random/student t distribution/operator()]]
[[it:cpp/numeric/random/student t distribution/operator()]]
[[ja:cpp/numeric/random/student t distribution/operator()]]
[[pt:cpp/numeric/random/student t distribution/operator()]]
[[ru:cpp/numeric/random/student t distribution/operator()]]
[[zh:cpp/numeric/random/student t distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/param</title>
    <ns>0</ns>
    <id>4135</id>
    <revision>
      <id>51032</id>
      <parentid>42709</parentid>
      <timestamp>2013-06-01T03:48:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/param|student_t_distribution}}

[[de:cpp/numeric/random/student t distribution/param]]
[[es:cpp/numeric/random/student t distribution/param]]
[[fr:cpp/numeric/random/student t distribution/param]]
[[it:cpp/numeric/random/student t distribution/param]]
[[ja:cpp/numeric/random/student t distribution/param]]
[[pt:cpp/numeric/random/student t distribution/param]]
[[ru:cpp/numeric/random/student t distribution/param]]
[[zh:cpp/numeric/random/student t distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/reset</title>
    <ns>0</ns>
    <id>4091</id>
    <revision>
      <id>51033</id>
      <parentid>42702</parentid>
      <timestamp>2013-06-01T03:48:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/reset|student_t_distribution}}

[[de:cpp/numeric/random/student t distribution/reset]]
[[es:cpp/numeric/random/student t distribution/reset]]
[[fr:cpp/numeric/random/student t distribution/reset]]
[[it:cpp/numeric/random/student t distribution/reset]]
[[ja:cpp/numeric/random/student t distribution/reset]]
[[pt:cpp/numeric/random/student t distribution/reset]]
[[ru:cpp/numeric/random/student t distribution/reset]]
[[zh:cpp/numeric/random/student t distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/student t distribution/student t distribution</title>
    <ns>0</ns>
    <id>4918</id>
    <revision>
      <id>62911</id>
      <parentid>50402</parentid>
      <timestamp>2013-07-01T23:45:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1245">{{cpp/numeric/random/student_t_distribution/title|student_t_distribution}}
{{cpp/numeric/random/student_t_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit student_t_distribution( RealType n = 1 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit student_t_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs new distribution object. The first version uses {{tt|n}} as the distribution parameter, the second version uses {{tt|params}} as the distribution parameter.

===Parameters===
{{par begin}}
{{par | n | the ''n'' distribution parameter (degrees of freedom)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/student t distribution/student t distribution]]
[[es:cpp/numeric/random/student t distribution/student t distribution]]
[[fr:cpp/numeric/random/student t distribution/student t distribution]]
[[it:cpp/numeric/random/student t distribution/student t distribution]]
[[ja:cpp/numeric/random/student t distribution/student t distribution]]
[[pt:cpp/numeric/random/student t distribution/student t distribution]]
[[ru:cpp/numeric/random/student t distribution/student t distribution]]
[[zh:cpp/numeric/random/student t distribution/student t distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine</title>
    <ns>0</ns>
    <id>3699</id>
    <revision>
      <id>63193</id>
      <parentid>62166</parentid>
      <timestamp>2013-07-05T16:02:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+typedefs</comment>
      <text xml:space="preserve" bytes="2600">{{cpp/title|subtract_with_carry_engine}}
{{cpp/numeric/random/subtract_with_carry_engine/navbar}}
{{dcl begin}}
{{dcl header | random}}
{{dcl | since=c++11 |
template&lt;
    class UIntType, 
    size_t w, size_t s, size_t r
&gt; class subtract_with_carry_engine;
}}
{{dcl end}}

{{tt|subtract_with_carry_engine}} is a random number engine that uses [[enwiki:subtract with carry|subtract with carry]] algorithm. 

{{todo}}

The following typedefs define the random number engine with two commonly used parameter sets:
{{dsc begin}}
{{dsc header | random}}
{{dsc hitem | Type | Definition}}
{{dsc inc | cpp/numeric/random/dsc ranlux24_base}}
{{dsc inc | cpp/numeric/random/dsc ranlux48_base}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | The integral type generated by the engine.  Results are undefined if this is not an unsigned integral type.}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc h2 | Construction and Seeding}}
{{dsc inc | cpp/numeric/random/engine/dsc constructor |subtract_with_carry_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc seed |subtract_with_carry_engine}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/engine/dsc operator() |subtract_with_carry_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc discard |subtract_with_carry_engine}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/engine/dsc min |subtract_with_carry_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc max |subtract_with_carry_engine}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_cmp |subtract_with_carry_engine}}
{{dsc inc | cpp/numeric/random/engine/dsc operator_ltltgtgt |subtract_with_carry_engine}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} word_size | {{todo}} }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} short_lag | {{todo}} }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr size_t}} long_lag | {{todo}} }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr UIntType}} default_seed | {{todo}} }}
{{dsc end}}

[[de:cpp/numeric/random/subtract with carry engine]]
[[es:cpp/numeric/random/subtract with carry engine]]
[[fr:cpp/numeric/random/subtract with carry engine]]
[[it:cpp/numeric/random/subtract with carry engine]]
[[ja:cpp/numeric/random/subtract with carry engine]]
[[pt:cpp/numeric/random/subtract with carry engine]]
[[ru:cpp/numeric/random/subtract with carry engine]]
[[zh:cpp/numeric/random/subtract with carry engine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/discard</title>
    <ns>0</ns>
    <id>3735</id>
    <revision>
      <id>51034</id>
      <parentid>42677</parentid>
      <timestamp>2013-06-01T03:48:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="566">{{include page|cpp/numeric/random/engine/discard|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/discard]]
[[es:cpp/numeric/random/subtract with carry engine/discard]]
[[fr:cpp/numeric/random/subtract with carry engine/discard]]
[[it:cpp/numeric/random/subtract with carry engine/discard]]
[[ja:cpp/numeric/random/subtract with carry engine/discard]]
[[pt:cpp/numeric/random/subtract with carry engine/discard]]
[[ru:cpp/numeric/random/subtract with carry engine/discard]]
[[zh:cpp/numeric/random/subtract with carry engine/discard]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/max</title>
    <ns>0</ns>
    <id>3739</id>
    <revision>
      <id>51035</id>
      <parentid>42669</parentid>
      <timestamp>2013-06-01T03:48:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="530">{{include page|cpp/numeric/random/engine/max|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/max]]
[[es:cpp/numeric/random/subtract with carry engine/max]]
[[fr:cpp/numeric/random/subtract with carry engine/max]]
[[it:cpp/numeric/random/subtract with carry engine/max]]
[[ja:cpp/numeric/random/subtract with carry engine/max]]
[[pt:cpp/numeric/random/subtract with carry engine/max]]
[[ru:cpp/numeric/random/subtract with carry engine/max]]
[[zh:cpp/numeric/random/subtract with carry engine/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/min</title>
    <ns>0</ns>
    <id>3736</id>
    <revision>
      <id>51036</id>
      <parentid>42663</parentid>
      <timestamp>2013-06-01T03:48:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="530">{{include page|cpp/numeric/random/engine/min|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/min]]
[[es:cpp/numeric/random/subtract with carry engine/min]]
[[fr:cpp/numeric/random/subtract with carry engine/min]]
[[it:cpp/numeric/random/subtract with carry engine/min]]
[[ja:cpp/numeric/random/subtract with carry engine/min]]
[[pt:cpp/numeric/random/subtract with carry engine/min]]
[[ru:cpp/numeric/random/subtract with carry engine/min]]
[[zh:cpp/numeric/random/subtract with carry engine/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/operator cmp</title>
    <ns>0</ns>
    <id>8819</id>
    <revision>
      <id>51037</id>
      <parentid>42647</parentid>
      <timestamp>2013-06-01T03:48:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="611">{{include page|cpp/numeric/random/engine/operator cmp|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/operator cmp]]
[[es:cpp/numeric/random/subtract with carry engine/operator cmp]]
[[fr:cpp/numeric/random/subtract with carry engine/operator cmp]]
[[it:cpp/numeric/random/subtract with carry engine/operator cmp]]
[[ja:cpp/numeric/random/subtract with carry engine/operator cmp]]
[[pt:cpp/numeric/random/subtract with carry engine/operator cmp]]
[[ru:cpp/numeric/random/subtract with carry engine/operator cmp]]
[[zh:cpp/numeric/random/subtract with carry engine/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/operator ltltgtgt</title>
    <ns>0</ns>
    <id>3737</id>
    <revision>
      <id>51038</id>
      <parentid>42641</parentid>
      <timestamp>2013-06-01T03:48:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="656">{{include page|cpp/numeric/random/engine/operator_ltltgtgt|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]
[[es:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]
[[fr:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]
[[it:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]
[[ja:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]
[[pt:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]
[[ru:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]
[[zh:cpp/numeric/random/subtract with carry engine/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/operator()</title>
    <ns>0</ns>
    <id>3734</id>
    <revision>
      <id>42655</id>
      <parentid>13915</parentid>
      <timestamp>2012-11-03T00:03:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="580">{{cpp/numeric/random/engine/operator()|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/operator()]]
[[es:cpp/numeric/random/subtract with carry engine/operator()]]
[[fr:cpp/numeric/random/subtract with carry engine/operator()]]
[[it:cpp/numeric/random/subtract with carry engine/operator()]]
[[ja:cpp/numeric/random/subtract with carry engine/operator()]]
[[pt:cpp/numeric/random/subtract with carry engine/operator()]]
[[ru:cpp/numeric/random/subtract with carry engine/operator()]]
[[zh:cpp/numeric/random/subtract with carry engine/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/seed</title>
    <ns>0</ns>
    <id>3733</id>
    <revision>
      <id>51039</id>
      <parentid>42634</parentid>
      <timestamp>2013-06-01T03:48:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="539">{{include page|cpp/numeric/random/engine/seed|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/seed]]
[[es:cpp/numeric/random/subtract with carry engine/seed]]
[[fr:cpp/numeric/random/subtract with carry engine/seed]]
[[it:cpp/numeric/random/subtract with carry engine/seed]]
[[ja:cpp/numeric/random/subtract with carry engine/seed]]
[[pt:cpp/numeric/random/subtract with carry engine/seed]]
[[ru:cpp/numeric/random/subtract with carry engine/seed]]
[[zh:cpp/numeric/random/subtract with carry engine/seed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/subtract with carry engine/subtract with carry engine</title>
    <ns>0</ns>
    <id>3732</id>
    <revision>
      <id>51040</id>
      <parentid>42627</parentid>
      <timestamp>2013-06-01T03:48:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="722">{{include page|cpp/numeric/random/engine/constructor|subtract_with_carry_engine}}

[[de:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]
[[es:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]
[[fr:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]
[[it:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]
[[ja:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]
[[pt:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]
[[ru:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]
[[zh:cpp/numeric/random/subtract with carry engine/subtract with carry engine]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution</title>
    <ns>0</ns>
    <id>2701</id>
    <revision>
      <id>90279</id>
      <parentid>90277</parentid>
      <timestamp>2017-02-18T23:24:02Z</timestamp>
      <contributor>
        <username>Mgkrupa</username>
        <id>6350</id>
      </contributor>
      <minor/>
      <comment>Changed comments</comment>
      <text xml:space="preserve" bytes="2732">{{cpp/title|uniform_int_distribution}}
{{cpp/numeric/random/uniform_int_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class IntType = int &gt;
class uniform_int_distribution;
}}

Produces random integer values {{math|i}}, uniformly distributed on the closed interval {{tt|[a, b]}}, that is, distributed according to the discrete probability function 

:{{math|P(i{{!}}a,b) {{=}} {{mfrac|1|b − a + 1}}}}.

{{tt|std::uniform_int_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|IntType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|IntType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | uniform_int_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | uniform_int_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | uniform_int_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | uniform_int_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | uniform_int_distribution | IntType }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | uniform_int_distribution}}
{{dsc end}}

===Example===

{{example
 | This program simulates throwing 6-sided dice.
 | code=
#include &lt;random&gt;
#include &lt;iostream&gt;

int main()
{
    std::random_device rd;  //Will be used to obtain a seed for the random number engine
    std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
    std::uniform_int_distribution&lt;&gt; dis(1, 6);

    for (int n=0; n&lt;10; ++n)
        //Use dis to transform the random unsigned int generated by gen into an int in [1, 6]
        std::cout &lt;&lt; dis(gen) &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | p=true
 | output=
1 1 6 5 2 2 5 5 6 2
}}

[[de:cpp/numeric/random/uniform int distribution]]
[[es:cpp/numeric/random/uniform int distribution]]
[[fr:cpp/numeric/random/uniform int distribution]]
[[it:cpp/numeric/random/uniform int distribution]]
[[ja:cpp/numeric/random/uniform int distribution]]
[[pt:cpp/numeric/random/uniform int distribution]]
[[ru:cpp/numeric/random/uniform int distribution]]
[[zh:cpp/numeric/random/uniform int distribution]]</text>
      <sha1>js0lp16eed7pazfsm4mvqioi09fcax8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/a</title>
    <ns>0</ns>
    <id>4593</id>
    <redirect title="cpp/numeric/random/uniform int distribution/params" />
    <revision>
      <id>61201</id>
      <parentid>58760</parentid>
      <timestamp>2013-06-05T12:28:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/uniform int distribution/params]]</comment>
      <text xml:space="preserve" bytes="64">#redirect [[cpp/numeric/random/uniform_int_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/b</title>
    <ns>0</ns>
    <id>4594</id>
    <redirect title="cpp/numeric/random/uniform int distribution/params" />
    <revision>
      <id>61209</id>
      <parentid>58761</parentid>
      <timestamp>2013-06-05T12:29:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/uniform int distribution/params]]</comment>
      <text xml:space="preserve" bytes="64">#redirect [[cpp/numeric/random/uniform_int_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/max</title>
    <ns>0</ns>
    <id>3318</id>
    <revision>
      <id>51041</id>
      <parentid>42601</parentid>
      <timestamp>2013-06-01T03:48:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/max|uniform_int_distribution}}

[[de:cpp/numeric/random/uniform int distribution/max]]
[[es:cpp/numeric/random/uniform int distribution/max]]
[[fr:cpp/numeric/random/uniform int distribution/max]]
[[it:cpp/numeric/random/uniform int distribution/max]]
[[ja:cpp/numeric/random/uniform int distribution/max]]
[[pt:cpp/numeric/random/uniform int distribution/max]]
[[ru:cpp/numeric/random/uniform int distribution/max]]
[[zh:cpp/numeric/random/uniform int distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/min</title>
    <ns>0</ns>
    <id>3313</id>
    <revision>
      <id>51042</id>
      <parentid>42593</parentid>
      <timestamp>2013-06-01T03:48:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="518">{{include page|cpp/numeric/random/distribution/min|uniform_int_distribution}}

[[de:cpp/numeric/random/uniform int distribution/min]]
[[es:cpp/numeric/random/uniform int distribution/min]]
[[fr:cpp/numeric/random/uniform int distribution/min]]
[[it:cpp/numeric/random/uniform int distribution/min]]
[[ja:cpp/numeric/random/uniform int distribution/min]]
[[pt:cpp/numeric/random/uniform int distribution/min]]
[[ru:cpp/numeric/random/uniform int distribution/min]]
[[zh:cpp/numeric/random/uniform int distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/operator cmp</title>
    <ns>0</ns>
    <id>4141</id>
    <revision>
      <id>51043</id>
      <parentid>42578</parentid>
      <timestamp>2013-06-01T03:48:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="599">{{include page|cpp/numeric/random/distribution/operator_cmp|uniform_int_distribution}}

[[de:cpp/numeric/random/uniform int distribution/operator cmp]]
[[es:cpp/numeric/random/uniform int distribution/operator cmp]]
[[fr:cpp/numeric/random/uniform int distribution/operator cmp]]
[[it:cpp/numeric/random/uniform int distribution/operator cmp]]
[[ja:cpp/numeric/random/uniform int distribution/operator cmp]]
[[pt:cpp/numeric/random/uniform int distribution/operator cmp]]
[[ru:cpp/numeric/random/uniform int distribution/operator cmp]]
[[zh:cpp/numeric/random/uniform int distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4539</id>
    <revision>
      <id>51044</id>
      <parentid>42573</parentid>
      <timestamp>2013-06-01T03:48:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="644">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|uniform_int_distribution}}

[[de:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/uniform int distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/operator()</title>
    <ns>0</ns>
    <id>4097</id>
    <revision>
      <id>63156</id>
      <parentid>42585</parentid>
      <timestamp>2013-07-03T15:10:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+include page</comment>
      <text xml:space="preserve" bytes="581">{{include page|cpp/numeric/random/distribution/operator()|uniform_int_distribution}}

[[de:cpp/numeric/random/uniform int distribution/operator()]]
[[es:cpp/numeric/random/uniform int distribution/operator()]]
[[fr:cpp/numeric/random/uniform int distribution/operator()]]
[[it:cpp/numeric/random/uniform int distribution/operator()]]
[[ja:cpp/numeric/random/uniform int distribution/operator()]]
[[pt:cpp/numeric/random/uniform int distribution/operator()]]
[[ru:cpp/numeric/random/uniform int distribution/operator()]]
[[zh:cpp/numeric/random/uniform int distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/param</title>
    <ns>0</ns>
    <id>4119</id>
    <revision>
      <id>51045</id>
      <parentid>42565</parentid>
      <timestamp>2013-06-01T03:48:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/param|uniform_int_distribution}}

[[de:cpp/numeric/random/uniform int distribution/param]]
[[es:cpp/numeric/random/uniform int distribution/param]]
[[fr:cpp/numeric/random/uniform int distribution/param]]
[[it:cpp/numeric/random/uniform int distribution/param]]
[[ja:cpp/numeric/random/uniform int distribution/param]]
[[pt:cpp/numeric/random/uniform int distribution/param]]
[[ru:cpp/numeric/random/uniform int distribution/param]]
[[zh:cpp/numeric/random/uniform int distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/params</title>
    <ns>0</ns>
    <id>12598</id>
    <revision>
      <id>65744</id>
      <parentid>61263</parentid>
      <timestamp>2013-10-03T20:50:51Z</timestamp>
      <contributor>
        <ip>5.28.71.244</ip>
      </contributor>
      <text xml:space="preserve" bytes="851">{{cpp/numeric/random/uniform_int_distribution/title|a, b}}
{{cpp/numeric/random/uniform_int_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
result_type a() const;
}}
{{dcl | since=c++11 | num=2 |
result_type b() const;
}}
{{dcl end}}

Returns the parameters the distribution has been constructed with.

@1@ Returns the ''a'' distribution parameter. It defines the minimum possibly generated value. The default value is {{c|0}}.

@2@ Returns the ''b'' distribution parameter. It defines the maximum possibly generated value. The default value is {{c|std::numeric_limits&lt;IntType&gt;::max()}}

===Parameters===
(none)

===Return value===
@1@ The ''a'' distribution parameter.

@2@ The ''b'' distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | uniform_int_distribution}}
{{dsc end}}</text>
      <sha1>d8jqt675nme24d4va3b8og15ghuq7k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/reset</title>
    <ns>0</ns>
    <id>3342</id>
    <revision>
      <id>76198</id>
      <parentid>51046</parentid>
      <timestamp>2015-02-11T19:53:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>typo s/real/int</comment>
      <text xml:space="preserve" bytes="536">{{include page|cpp/numeric/random/distribution/reset|uniform_int_distribution}}

[[de:cpp/numeric/random/uniform int distribution/reset]]
[[es:cpp/numeric/random/uniform int distribution/reset]]
[[fr:cpp/numeric/random/uniform int distribution/reset]]
[[it:cpp/numeric/random/uniform int distribution/reset]]
[[ja:cpp/numeric/random/uniform int distribution/reset]]
[[pt:cpp/numeric/random/uniform int distribution/reset]]
[[ru:cpp/numeric/random/uniform int distribution/reset]]
[[zh:cpp/numeric/random/uniform int distribution/reset]]</text>
      <sha1>ir6rbypridw2rj5e3k3w5pkcnms9kt3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform int distribution/uniform int distribution</title>
    <ns>0</ns>
    <id>4595</id>
    <revision>
      <id>63159</id>
      <parentid>62912</parentid>
      <timestamp>2013-07-03T16:15:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>this is part of the spec</comment>
      <text xml:space="preserve" bytes="1485">{{cpp/numeric/random/uniform_int_distribution/title|uniform_int_distribution}}
{{cpp/numeric/random/uniform_int_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit uniform_int_distribution( IntType a = 0, 
                                   IntType b = std::numeric_limits&lt;IntType&gt;::max() );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit uniform_int_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs new distribution object. The first version uses {{tt|a}} and {{tt|b}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

The behavior is undefined if {{c|a&gt;b}}.

===Parameters===
{{par begin}}
{{par | a | the ''a'' distribution parameter (minimum value)}}
{{par | b | the ''b'' distribution parameter (maximum value)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/uniform int distribution/uniform int distribution]]
[[es:cpp/numeric/random/uniform int distribution/uniform int distribution]]
[[fr:cpp/numeric/random/uniform int distribution/uniform int distribution]]
[[it:cpp/numeric/random/uniform int distribution/uniform int distribution]]
[[ja:cpp/numeric/random/uniform int distribution/uniform int distribution]]
[[pt:cpp/numeric/random/uniform int distribution/uniform int distribution]]
[[ru:cpp/numeric/random/uniform int distribution/uniform int distribution]]
[[zh:cpp/numeric/random/uniform int distribution/uniform int distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution</title>
    <ns>0</ns>
    <id>3327</id>
    <revision>
      <id>90278</id>
      <parentid>90276</parentid>
      <timestamp>2017-02-18T23:23:21Z</timestamp>
      <contributor>
        <username>Mgkrupa</username>
        <id>6350</id>
      </contributor>
      <minor/>
      <comment>Changed comments</comment>
      <text xml:space="preserve" bytes="3296">{{cpp/title|uniform_real_distribution}}
{{cpp/numeric/random/uniform_real_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class uniform_real_distribution;
}}

Produces random floating-point values {{math|i}}, uniformly distributed on the interval {{tt|[a, b)}}, that is, distributed according to the probability function:

:{{math|P(i{{!}}a,b) {{=}} {{mfrac|1|b − a}}}}.

{{tt|std::uniform_real_distribution}} satisfies all requirements of {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | uniform_real_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | uniform_real_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | uniform_real_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | uniform_real_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | uniform_real_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | uniform_real_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | uniform_real_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | uniform_real_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | uniform_real_distribution}}
{{dsc end}}

===Notes===
Some existing implementations have a bug where they may occasionally return {{math|b}} if {{tt|RealType}} is {{c|float}}  [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63176 GCC #63176] [http://llvm.org/bugs/show_bug.cgi?id=18767 LLVM #18767]. This is caused by [http://open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#2524 LWG issue 2524 ] &lt;!--  
http://stackoverflow.com/questions/25668600/is-1-0-a-valid-random-number --&gt;

===Example===

{{example
 | print 10 random numbers between 1 and 2
 | code=
#include &lt;random&gt;
#include &lt;iostream&gt;

int main()
{
    std::random_device rd;  //Will be used to obtain a seed for the random number engine
    std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
    std::uniform_real_distribution&lt;&gt; dis(1, 2);
    for (int n = 0; n &lt; 10; ++n) {
        //Use dis to transform the random unsigned int generated by gen into a double in [1, 2)
        std::cout &lt;&lt; dis(gen) &lt;&lt; ' '; //Each call to dis(gen) generates a new random double
    }
    std::cout &lt;&lt; '\n';
}
 | p=true
 | output=
1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326 
}}

[[de:cpp/numeric/random/uniform real distribution]]
[[es:cpp/numeric/random/uniform real distribution]]
[[fr:cpp/numeric/random/uniform real distribution]]
[[it:cpp/numeric/random/uniform real distribution]]
[[ja:cpp/numeric/random/uniform real distribution]]
[[pt:cpp/numeric/random/uniform real distribution]]
[[ru:cpp/numeric/random/uniform real distribution]]
[[zh:cpp/numeric/random/uniform real distribution]]</text>
      <sha1>qm05kr7im4es7mh5iysfcifprrwougg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/a</title>
    <ns>0</ns>
    <id>4591</id>
    <redirect title="cpp/numeric/random/uniform real distribution/params" />
    <revision>
      <id>61203</id>
      <parentid>58765</parentid>
      <timestamp>2013-06-05T12:29:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/uniform real distribution/params]]</comment>
      <text xml:space="preserve" bytes="65">#redirect [[cpp/numeric/random/uniform_real_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/b</title>
    <ns>0</ns>
    <id>4592</id>
    <redirect title="cpp/numeric/random/uniform real distribution/params" />
    <revision>
      <id>61212</id>
      <parentid>58766</parentid>
      <timestamp>2013-06-05T12:30:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/uniform real distribution/params]]</comment>
      <text xml:space="preserve" bytes="65">#redirect [[cpp/numeric/random/uniform_real_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/max</title>
    <ns>0</ns>
    <id>3341</id>
    <revision>
      <id>51047</id>
      <parentid>42517</parentid>
      <timestamp>2013-06-01T03:48:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="527">{{include page|cpp/numeric/random/distribution/max|uniform_real_distribution}}

[[de:cpp/numeric/random/uniform real distribution/max]]
[[es:cpp/numeric/random/uniform real distribution/max]]
[[fr:cpp/numeric/random/uniform real distribution/max]]
[[it:cpp/numeric/random/uniform real distribution/max]]
[[ja:cpp/numeric/random/uniform real distribution/max]]
[[pt:cpp/numeric/random/uniform real distribution/max]]
[[ru:cpp/numeric/random/uniform real distribution/max]]
[[zh:cpp/numeric/random/uniform real distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/min</title>
    <ns>0</ns>
    <id>3340</id>
    <revision>
      <id>51048</id>
      <parentid>42509</parentid>
      <timestamp>2013-06-01T03:48:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="527">{{include page|cpp/numeric/random/distribution/min|uniform_real_distribution}}

[[de:cpp/numeric/random/uniform real distribution/min]]
[[es:cpp/numeric/random/uniform real distribution/min]]
[[fr:cpp/numeric/random/uniform real distribution/min]]
[[it:cpp/numeric/random/uniform real distribution/min]]
[[ja:cpp/numeric/random/uniform real distribution/min]]
[[pt:cpp/numeric/random/uniform real distribution/min]]
[[ru:cpp/numeric/random/uniform real distribution/min]]
[[zh:cpp/numeric/random/uniform real distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/operator cmp</title>
    <ns>0</ns>
    <id>4160</id>
    <revision>
      <id>51049</id>
      <parentid>42492</parentid>
      <timestamp>2013-06-01T03:48:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="608">{{include page|cpp/numeric/random/distribution/operator_cmp|uniform_real_distribution}}

[[de:cpp/numeric/random/uniform real distribution/operator cmp]]
[[es:cpp/numeric/random/uniform real distribution/operator cmp]]
[[fr:cpp/numeric/random/uniform real distribution/operator cmp]]
[[it:cpp/numeric/random/uniform real distribution/operator cmp]]
[[ja:cpp/numeric/random/uniform real distribution/operator cmp]]
[[pt:cpp/numeric/random/uniform real distribution/operator cmp]]
[[ru:cpp/numeric/random/uniform real distribution/operator cmp]]
[[zh:cpp/numeric/random/uniform real distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4538</id>
    <revision>
      <id>51050</id>
      <parentid>42482</parentid>
      <timestamp>2013-06-01T03:48:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="653">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|uniform_real_distribution}}

[[de:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/uniform real distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/operator()</title>
    <ns>0</ns>
    <id>4098</id>
    <revision>
      <id>42500</id>
      <parentid>15045</parentid>
      <timestamp>2012-11-02T23:31:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="577">{{cpp/numeric/random/distribution/operator()|uniform_real_distribution}}

[[de:cpp/numeric/random/uniform real distribution/operator()]]
[[es:cpp/numeric/random/uniform real distribution/operator()]]
[[fr:cpp/numeric/random/uniform real distribution/operator()]]
[[it:cpp/numeric/random/uniform real distribution/operator()]]
[[ja:cpp/numeric/random/uniform real distribution/operator()]]
[[pt:cpp/numeric/random/uniform real distribution/operator()]]
[[ru:cpp/numeric/random/uniform real distribution/operator()]]
[[zh:cpp/numeric/random/uniform real distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/param</title>
    <ns>0</ns>
    <id>4120</id>
    <revision>
      <id>51051</id>
      <parentid>42472</parentid>
      <timestamp>2013-06-01T03:49:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="545">{{include page|cpp/numeric/random/distribution/param|uniform_real_distribution}}

[[de:cpp/numeric/random/uniform real distribution/param]]
[[es:cpp/numeric/random/uniform real distribution/param]]
[[fr:cpp/numeric/random/uniform real distribution/param]]
[[it:cpp/numeric/random/uniform real distribution/param]]
[[ja:cpp/numeric/random/uniform real distribution/param]]
[[pt:cpp/numeric/random/uniform real distribution/param]]
[[ru:cpp/numeric/random/uniform real distribution/param]]
[[zh:cpp/numeric/random/uniform real distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/params</title>
    <ns>0</ns>
    <id>12599</id>
    <revision>
      <id>65368</id>
      <parentid>61264</parentid>
      <timestamp>2013-09-10T17:41:26Z</timestamp>
      <contributor>
        <ip>50.136.177.227</ip>
      </contributor>
      <text xml:space="preserve" bytes="826">{{cpp/numeric/random/uniform_real_distribution/title|a, b}}
{{cpp/numeric/random/uniform_real_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 | 
result_type a() const;
}}
{{dcl | since=c++11 | num=2 | 
result_type b() const;
}}
{{dcl end}}

Returns the parameters the distribution has been constructed with.

@1@ Returns the ''a'' distribution parameter. It defines the minimum possibly generated value. The default value is {{c|0.0}}.

@2@ Returns the ''b'' distribution parameter. It defines the maximum possibly generated value. The default value is {{c|1.0}}

===Parameters===
(none)

===Return value===
@1@ The ''a'' distribution parameter.

@2@ The ''b'' distribution parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | uniform_real_distribution}}
{{dsc end}}</text>
      <sha1>i2s0r8eqpxtxhqv28jlhydcb804fbnt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/reset</title>
    <ns>0</ns>
    <id>3329</id>
    <revision>
      <id>51052</id>
      <parentid>42464</parentid>
      <timestamp>2013-06-01T03:49:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="545">{{include page|cpp/numeric/random/distribution/reset|uniform_real_distribution}}

[[de:cpp/numeric/random/uniform real distribution/reset]]
[[es:cpp/numeric/random/uniform real distribution/reset]]
[[fr:cpp/numeric/random/uniform real distribution/reset]]
[[it:cpp/numeric/random/uniform real distribution/reset]]
[[ja:cpp/numeric/random/uniform real distribution/reset]]
[[pt:cpp/numeric/random/uniform real distribution/reset]]
[[ru:cpp/numeric/random/uniform real distribution/reset]]
[[zh:cpp/numeric/random/uniform real distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/uniform real distribution/uniform real distribution</title>
    <ns>0</ns>
    <id>4596</id>
    <revision>
      <id>78539</id>
      <parentid>78537</parentid>
      <timestamp>2015-05-25T04:04:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>grammar</comment>
      <text xml:space="preserve" bytes="1879">{{cpp/numeric/random/uniform_real_distribution/title|uniform_real_distribution}}
{{cpp/numeric/random/uniform_real_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit uniform_real_distribution( RealType a = 0.0, RealType b = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit uniform_real_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs new distribution object. The first version uses {{tt|a}} and {{tt|b}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | a | the ''a'' distribution parameter (minimum value)}}
{{par | b | the ''b'' distribution parameter (maximum value)}}
{{par | params | the distribution parameter set}}
{{par end}}

===Notes===
Requires that {{math|a ≤ b}} and {{math| b-a ≤ std::numeric_limits&lt;RealType&gt;::max() }}

If {{tt|1=a == b}}, subsequent calls to the {{ltt|cpp/numeric/random/uniform_real_distribution/operator()|operator()}} overload that does not accept a {{tt|param_type}} object will cause undefined behavior.

To create a distribution over the closed interval {{math|[a,b]}}, {{c|std::nextafter(b, std::numeric_limits&lt;RealType&gt;::max())}} may be used as the second parameter.

[[de:cpp/numeric/random/uniform real distribution/uniform real distribution]]
[[es:cpp/numeric/random/uniform real distribution/uniform real distribution]]
[[fr:cpp/numeric/random/uniform real distribution/uniform real distribution]]
[[it:cpp/numeric/random/uniform real distribution/uniform real distribution]]
[[ja:cpp/numeric/random/uniform real distribution/uniform real distribution]]
[[pt:cpp/numeric/random/uniform real distribution/uniform real distribution]]
[[ru:cpp/numeric/random/uniform real distribution/uniform real distribution]]
[[zh:cpp/numeric/random/uniform real distribution/uniform real distribution]]</text>
      <sha1>ja44q9xj6hbhbs218f9zriojvqx1yvc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution</title>
    <ns>0</ns>
    <id>3918</id>
    <revision>
      <id>75938</id>
      <parentid>73226</parentid>
      <timestamp>2015-02-05T03:09:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reqs</comment>
      <text xml:space="preserve" bytes="3145">{{cpp/title|weibull_distribution}}
{{cpp/numeric/random/weibull_distribution/navbar}}
{{ddcl | header=random | since=c++11 | 1=
template&lt; class RealType = double &gt;
class weibull_distribution;
}}

The {{tt|weibull_distribution}} meets the requirements of a {{concept|RandomNumberDistribution}} and produces random numbers according to the [[enwiki:Weibull distribution|Weibull distribution]]:

:{{math|f(x;a,b) {{=}} {{mfrac||a|b}} {{mparen|(|)|{{mfrac||x|b}}}}{{su|p=a-1}} exp{{mparen|(|)|-{{mparen|(|)|{{mfrac||x|b}}}}{{su|p=a}} }} }}

{{math|a}} is the [[enwiki:shape parameter|shape parameter]] and {{math|b}} the [[enwiki:scale parameter|scale parameter]].

{{tt|std::weibull_distribution}} satisfies {{concept|RandomNumberDistribution}}

===Template parameters===
{{par begin}}
{{cpp/numeric/random/param_list|RealType}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|result_type}} | {{c|RealType}}}}
{{cpp/numeric/random/param_type}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc constructor | weibull_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc reset | weibull_distribution}}

{{dsc h2 | Generation}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator() | weibull_distribution}}

{{dsc h2 | Characteristics}}
{{dsc inc | cpp/numeric/random/distribution/dsc params | weibull_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | weibull_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc min | weibull_distribution}}
{{dsc inc | cpp/numeric/random/distribution/dsc max | weibull_distribution}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_cmp | weibull_distribution }}
{{dsc inc | cpp/numeric/random/distribution/dsc operator_ltltgtgt | weibull_distribution}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;random&gt;
#include &lt;cmath&gt;
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
 
    std::weibull_distribution&lt;&gt; d;
 
    std::map&lt;int, int&gt; hist;
    for(int n=0; n&lt;10000; ++n) {
        ++hist[std::round(d(gen))];
    }
    for(auto p : hist) {
        std::cout &lt;&lt; std::fixed &lt;&lt; std::setprecision(1) &lt;&lt; std::setw(2)
                  &lt;&lt; p.first &lt;&lt; ' ' &lt;&lt; std::string(p.second/200, '*') &lt;&lt; '\n';
    }
}
 | output=
 0 *******************
 1 *******************
 2 ******
 3 **
 4 
 5 
 6 
 7 
 8
}}

===External links===
* [http://mathworld.wolfram.com/WeibullDistribution.html Weisstein, Eric W. &quot;Weibull Distribution.&quot;] From MathWorld--A Wolfram Web Resource.
* [[enwiki:Weibull distribution|Weibull distribution.]] From Wikipedia.

[[de:cpp/numeric/random/weibull distribution]]
[[es:cpp/numeric/random/weibull distribution]]
[[fr:cpp/numeric/random/weibull distribution]]
[[it:cpp/numeric/random/weibull distribution]]
[[ja:cpp/numeric/random/weibull distribution]]
[[pt:cpp/numeric/random/weibull distribution]]
[[ru:cpp/numeric/random/weibull distribution]]
[[zh:cpp/numeric/random/weibull distribution]]</text>
      <sha1>474gvjqfm9uyl0lzkp15l7zn2qi1nwi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/a</title>
    <ns>0</ns>
    <id>12584</id>
    <redirect title="cpp/numeric/random/weibull distribution/params" />
    <revision>
      <id>61222</id>
      <parentid>61087</parentid>
      <timestamp>2013-06-05T12:31:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/weibull distribution/params]]</comment>
      <text xml:space="preserve" bytes="60">#redirect [[cpp/numeric/random/weibull_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/b</title>
    <ns>0</ns>
    <id>12585</id>
    <redirect title="cpp/numeric/random/weibull distribution/params" />
    <revision>
      <id>61225</id>
      <parentid>61086</parentid>
      <timestamp>2013-06-05T12:31:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/weibull distribution/params]]</comment>
      <text xml:space="preserve" bytes="60">#redirect [[cpp/numeric/random/weibull_distribution/params]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/max</title>
    <ns>0</ns>
    <id>4012</id>
    <revision>
      <id>51053</id>
      <parentid>42444</parentid>
      <timestamp>2013-06-01T03:49:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="482">{{include page|cpp/numeric/random/distribution/max|weibull_distribution}}

[[de:cpp/numeric/random/weibull distribution/max]]
[[es:cpp/numeric/random/weibull distribution/max]]
[[fr:cpp/numeric/random/weibull distribution/max]]
[[it:cpp/numeric/random/weibull distribution/max]]
[[ja:cpp/numeric/random/weibull distribution/max]]
[[pt:cpp/numeric/random/weibull distribution/max]]
[[ru:cpp/numeric/random/weibull distribution/max]]
[[zh:cpp/numeric/random/weibull distribution/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/min</title>
    <ns>0</ns>
    <id>3976</id>
    <revision>
      <id>51054</id>
      <parentid>42430</parentid>
      <timestamp>2013-06-01T03:49:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="482">{{include page|cpp/numeric/random/distribution/min|weibull_distribution}}

[[de:cpp/numeric/random/weibull distribution/min]]
[[es:cpp/numeric/random/weibull distribution/min]]
[[fr:cpp/numeric/random/weibull distribution/min]]
[[it:cpp/numeric/random/weibull distribution/min]]
[[ja:cpp/numeric/random/weibull distribution/min]]
[[pt:cpp/numeric/random/weibull distribution/min]]
[[ru:cpp/numeric/random/weibull distribution/min]]
[[zh:cpp/numeric/random/weibull distribution/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/operator cmp</title>
    <ns>0</ns>
    <id>4149</id>
    <revision>
      <id>51055</id>
      <parentid>42411</parentid>
      <timestamp>2013-06-01T03:49:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="563">{{include page|cpp/numeric/random/distribution/operator_cmp|weibull_distribution}}

[[de:cpp/numeric/random/weibull distribution/operator cmp]]
[[es:cpp/numeric/random/weibull distribution/operator cmp]]
[[fr:cpp/numeric/random/weibull distribution/operator cmp]]
[[it:cpp/numeric/random/weibull distribution/operator cmp]]
[[ja:cpp/numeric/random/weibull distribution/operator cmp]]
[[pt:cpp/numeric/random/weibull distribution/operator cmp]]
[[ru:cpp/numeric/random/weibull distribution/operator cmp]]
[[zh:cpp/numeric/random/weibull distribution/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/operator ltltgtgt</title>
    <ns>0</ns>
    <id>4530</id>
    <revision>
      <id>51056</id>
      <parentid>42403</parentid>
      <timestamp>2013-06-01T03:49:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="608">{{include page|cpp/numeric/random/distribution/operator_ltltgtgt|weibull_distribution}}

[[de:cpp/numeric/random/weibull distribution/operator ltltgtgt]]
[[es:cpp/numeric/random/weibull distribution/operator ltltgtgt]]
[[fr:cpp/numeric/random/weibull distribution/operator ltltgtgt]]
[[it:cpp/numeric/random/weibull distribution/operator ltltgtgt]]
[[ja:cpp/numeric/random/weibull distribution/operator ltltgtgt]]
[[pt:cpp/numeric/random/weibull distribution/operator ltltgtgt]]
[[ru:cpp/numeric/random/weibull distribution/operator ltltgtgt]]
[[zh:cpp/numeric/random/weibull distribution/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/operator()</title>
    <ns>0</ns>
    <id>4107</id>
    <revision>
      <id>42420</id>
      <parentid>15056</parentid>
      <timestamp>2012-11-02T23:14:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="532">{{cpp/numeric/random/distribution/operator()|weibull_distribution}}

[[de:cpp/numeric/random/weibull distribution/operator()]]
[[es:cpp/numeric/random/weibull distribution/operator()]]
[[fr:cpp/numeric/random/weibull distribution/operator()]]
[[it:cpp/numeric/random/weibull distribution/operator()]]
[[ja:cpp/numeric/random/weibull distribution/operator()]]
[[pt:cpp/numeric/random/weibull distribution/operator()]]
[[ru:cpp/numeric/random/weibull distribution/operator()]]
[[zh:cpp/numeric/random/weibull distribution/operator()]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/param</title>
    <ns>0</ns>
    <id>4118</id>
    <revision>
      <id>51057</id>
      <parentid>42396</parentid>
      <timestamp>2013-06-01T03:49:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/param|weibull_distribution}}

[[de:cpp/numeric/random/weibull distribution/param]]
[[es:cpp/numeric/random/weibull distribution/param]]
[[fr:cpp/numeric/random/weibull distribution/param]]
[[it:cpp/numeric/random/weibull distribution/param]]
[[ja:cpp/numeric/random/weibull distribution/param]]
[[pt:cpp/numeric/random/weibull distribution/param]]
[[ru:cpp/numeric/random/weibull distribution/param]]
[[zh:cpp/numeric/random/weibull distribution/param]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/params</title>
    <ns>0</ns>
    <id>12602</id>
    <revision>
      <id>61258</id>
      <parentid>61257</parentid>
      <timestamp>2013-06-05T13:06:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+default value</comment>
      <text xml:space="preserve" bytes="810">{{cpp/numeric/random/weibull_distribution/title | a, b}}
{{cpp/numeric/random/weibull_distribution/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
RealType a() const;
}}
{{dcl | since=c++11 | num=2 |
RealType b() const;
}}
{{dcl end}}

Returns the parameters the distribution was constructed with.

@1@ Returns the {{math|a}} parameter. It defines the shape of the distribution. The default value is {{c|1.0}}.

@2@ Returns the {{math|b}} parameter. It defines the scale of the distribution. The default value is {{c|1.0}}. 

===Parameters===
(none)

===Return value===
@1@ The value of the {{math|a}} parameter.

@2@ The value of the {{math|b}} parameter.

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/random/distribution/dsc param | weibull_distribution}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/reset</title>
    <ns>0</ns>
    <id>4084</id>
    <revision>
      <id>51058</id>
      <parentid>42387</parentid>
      <timestamp>2013-06-01T03:49:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="500">{{include page|cpp/numeric/random/distribution/reset|weibull_distribution}}

[[de:cpp/numeric/random/weibull distribution/reset]]
[[es:cpp/numeric/random/weibull distribution/reset]]
[[fr:cpp/numeric/random/weibull distribution/reset]]
[[it:cpp/numeric/random/weibull distribution/reset]]
[[ja:cpp/numeric/random/weibull distribution/reset]]
[[pt:cpp/numeric/random/weibull distribution/reset]]
[[ru:cpp/numeric/random/weibull distribution/reset]]
[[zh:cpp/numeric/random/weibull distribution/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/random/weibull distribution/weibull distribution</title>
    <ns>0</ns>
    <id>4926</id>
    <revision>
      <id>62914</id>
      <parentid>50413</parentid>
      <timestamp>2013-07-01T23:45:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1282">{{cpp/numeric/random/weibull_distribution/title|weibull_distribution}}
{{cpp/numeric/random/weibull_distribution/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
explicit weibull_distribution( RealType a = 1.0, RealType b = 1.0 );
}}
{{dcl | num=2 | since=c++11 | 1=
explicit weibull_distribution( const param_type&amp; params );
}}
{{dcl end}}

Constructs a new distribution object. The first version uses {{tt|a}} and {{tt|b}} as the distribution parameters, the second version uses {{tt|params}} as the distribution parameters.

===Parameters===
{{par begin}}
{{par | a | the ''a'' distribution parameter (shape)}}
{{par | b | the ''b'' distribution parameter (scale)}}
{{par | params | the distribution parameter set}}
{{par end}}

[[de:cpp/numeric/random/weibull distribution/weibull distribution]]
[[es:cpp/numeric/random/weibull distribution/weibull distribution]]
[[fr:cpp/numeric/random/weibull distribution/weibull distribution]]
[[it:cpp/numeric/random/weibull distribution/weibull distribution]]
[[ja:cpp/numeric/random/weibull distribution/weibull distribution]]
[[pt:cpp/numeric/random/weibull distribution/weibull distribution]]
[[ru:cpp/numeric/random/weibull distribution/weibull distribution]]
[[zh:cpp/numeric/random/weibull distribution/weibull distribution]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio</title>
    <ns>0</ns>
    <id>2483</id>
    <revision>
      <id>78431</id>
      <parentid>58772</parentid>
      <timestamp>2015-05-23T08:29:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>They are alias templates.</comment>
      <text xml:space="preserve" bytes="3120">{{title|Compile-time rational arithmetic}}
{{cpp/numeric/ratio/navbar}}

The class template {{tt|std::ratio}} and associated templates provide compile-time rational arithmetic support. Each instantiation of this template exactly represents any finite rational number.

===Compile-time fractions===
{{dsc begin}}
{{dsc header | ratio}}
{{dsc tclass | cpp/numeric/ratio/ratio | represents exact rational fraction}}
{{dsc end}}

Several convenience typedefs that correspond to the SI ratios are provided by the standard library:
{{dsc begin}}
{{dsc header | ratio}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|yocto}} | {{c|std::ratio&lt;1, 1000000000000000000000000&gt;}}, if {{lc|std::intmax_t}} can represent the denominator}}
{{dsc | {{tt|zepto}} | {{c|std::ratio&lt;1, 1000000000000000000000&gt;}}, if {{lc|std::intmax_t}} can represent the denominator}}
{{dsc | {{tt|atto}}  | {{c|std::ratio&lt;1, 1000000000000000000&gt;}}}}
{{dsc | {{tt|femto}} | {{c|std::ratio&lt;1, 1000000000000000&gt;}}}}
{{dsc | {{tt|pico}}  | {{c|std::ratio&lt;1, 1000000000000&gt;}}}}
{{dsc | {{tt|nano}}  | {{c|std::ratio&lt;1, 1000000000&gt;}}}}
{{dsc | {{tt|micro}} | {{c|std::ratio&lt;1, 1000000&gt;}}}}
{{dsc | {{tt|milli}} | {{c|std::ratio&lt;1, 1000&gt;}}}}
{{dsc | {{tt|centi}} | {{c|std::ratio&lt;1, 100&gt;}}}}
{{dsc | {{tt|deci}}  | {{c|std::ratio&lt;1, 10&gt;}}}}
{{dsc | {{tt|deca}}  | {{c|std::ratio&lt;10, 1&gt;}}}}
{{dsc | {{tt|hecto}} | {{c|std::ratio&lt;100, 1&gt;}}}}
{{dsc | {{tt|kilo}}  | {{c|std::ratio&lt;1000, 1&gt;}}}}
{{dsc | {{tt|mega}}  | {{c|std::ratio&lt;1000000, 1&gt;}}}}
{{dsc | {{tt|giga}}  | {{c|std::ratio&lt;1000000000, 1&gt;}}}}
{{dsc | {{tt|tera}}  | {{c|std::ratio&lt;1000000000000, 1&gt;}}}}
{{dsc | {{tt|peta}}  | {{c|std::ratio&lt;1000000000000000, 1&gt;}}}}
{{dsc | {{tt|exa}}   | {{c|std::ratio&lt;1000000000000000000, 1&gt;}}}}
{{dsc | {{tt|zetta}} | {{c|std::ratio&lt;1000000000000000000000, 1&gt;}}, if {{lc|std::intmax_t}} can represent the numerator}}
{{dsc | {{tt|yotta}} | {{c|std::ratio&lt;1000000000000000000000000, 1&gt;}}, if {{lc|std::intmax_t}} can represent the numerator}}
{{dsc end}}

===Compile-time rational arithmetic===

Several alias templates, that perform arithmetic operations on {{tt|ratio}} objects at compile-time are provided.

{{dsc begin}}
{{dsc header | ratio}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_add}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_subtract}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_multiply}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_divide}}
{{dsc end}}

===Compile-time rational comparison===

Several class templates, that perform comparison operations on {{tt|ratio}} objects at compile-time are provided.

{{dsc begin}}
{{dsc header | ratio}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_equal}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_not_equal}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_less}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_less_equal}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_greater}}
{{dsc inc | cpp/numeric/ratio/dsc ratio_greater_equal}}
{{dsc end}}

[[de:cpp/numeric/ratio]]
[[es:cpp/numeric/ratio]]
[[fr:cpp/numeric/ratio]]
[[it:cpp/numeric/ratio]]
[[ja:cpp/numeric/ratio]]
[[pt:cpp/numeric/ratio]]
[[ru:cpp/numeric/ratio]]
[[zh:cpp/numeric/ratio]]</text>
      <sha1>1axtcddbkdtn1eorysbq0qyi0sebnbb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio</title>
    <ns>0</ns>
    <id>2489</id>
    <revision>
      <id>68699</id>
      <parentid>68697</parentid>
      <timestamp>2014-03-19T15:57:42Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 68697 by [[Special:Contributions/123.124.22.67|123.124.22.67]] ([[User talk:123.124.22.67|talk]]) renaming the template parameter is not necessary and introduces error</comment>
      <text xml:space="preserve" bytes="3033">{{cpp/title|ratio}}
{{cpp/numeric/ratio/navbar}}
{{ddcl | header=ratio | since=c++11 | 1=
template&lt; 
    std::intmax_t Num, 
    std::intmax_t Denom = 1 
&gt; class ratio;
}}

The class template {{tt|std::ratio}} provides compile-time rational arithmetic support. Each instantiation of this template exactly represents any finite rational number as long as its numerator {{tt|Num}} and denominator {{tt|Denom}} are representable as compile-time constants of type {{lc|std::intmax_t}}. In addition, {{tt|Denom}} may not be zero and may not be equal to the most negative value. Both numerator and denominator are automatically reduced to the lowest terms.

Several convenience typedefs that correspond to the SI ratios are provided by the standard library:
{{dsc begin}}
{{dsc header | ratio}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|yocto}} | {{c|std::ratio&lt;1, 1000000000000000000000000&gt;}}, if {{lc|std::intmax_t}} can represent the denominator}}
{{dsc | {{tt|zepto}} | {{c|std::ratio&lt;1, 1000000000000000000000&gt;}}, if {{lc|std::intmax_t}} can represent the denominator}}
{{dsc | {{tt|atto}}  | {{c|std::ratio&lt;1, 1000000000000000000&gt;}}}}
{{dsc | {{tt|femto}} | {{c|std::ratio&lt;1, 1000000000000000&gt;}}}}
{{dsc | {{tt|pico}}  | {{c|std::ratio&lt;1, 1000000000000&gt;}}}}
{{dsc | {{tt|nano}}  | {{c|std::ratio&lt;1, 1000000000&gt;}}}}
{{dsc | {{tt|micro}} | {{c|std::ratio&lt;1, 1000000&gt;}}}}
{{dsc | {{tt|milli}} | {{c|std::ratio&lt;1, 1000&gt;}}}}
{{dsc | {{tt|centi}} | {{c|std::ratio&lt;1, 100&gt;}}}}
{{dsc | {{tt|deci}}  | {{c|std::ratio&lt;1, 10&gt;}}}}
{{dsc | {{tt|deca}}  | {{c|std::ratio&lt;10, 1&gt;}}}}
{{dsc | {{tt|hecto}} | {{c|std::ratio&lt;100, 1&gt;}}}}
{{dsc | {{tt|kilo}}  | {{c|std::ratio&lt;1000, 1&gt;}}}}
{{dsc | {{tt|mega}}  | {{c|std::ratio&lt;1000000, 1&gt;}}}}
{{dsc | {{tt|giga}}  | {{c|std::ratio&lt;1000000000, 1&gt;}}}}
{{dsc | {{tt|tera}}  | {{c|std::ratio&lt;1000000000000, 1&gt;}}}}
{{dsc | {{tt|peta}}  | {{c|std::ratio&lt;1000000000000000, 1&gt;}}}}
{{dsc | {{tt|exa}}   | {{c|std::ratio&lt;1000000000000000000, 1&gt;}}}}
{{dsc | {{tt|zetta}} | {{c|std::ratio&lt;1000000000000000000000, 1&gt;}}, if {{lc|std::intmax_t}} can represent the numerator}}
{{dsc | {{tt|yotta}} | {{c|std::ratio&lt;1000000000000000000000000, 1&gt;}}, if {{lc|std::intmax_t}} can represent the numerator}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|type}} | {{c|std::ratio&lt;num, den&gt;}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr intmax_t}} num | {{c|constexpr}} value of type {{lc|std::intmax_t}} equal to {{tt|sign(Num) * sign(Denom) * abs(Num) / gcd(Num, Denom)}} }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr intmax_t}} den | {{c|constexpr}} value of type {{lc|std::intmax_t}} equal to {{tt|abs(Denom) / gcd(Num, Denom)}} }}
{{dsc end}}

[[de:cpp/numeric/ratio/ratio]]
[[es:cpp/numeric/ratio/ratio]]
[[fr:cpp/numeric/ratio/ratio]]
[[it:cpp/numeric/ratio/ratio]]
[[ja:cpp/numeric/ratio/ratio]]
[[pt:cpp/numeric/ratio/ratio]]
[[ru:cpp/numeric/ratio/ratio]]
[[zh:cpp/numeric/ratio/ratio]]</text>
      <sha1>gq65pli3m1fylei4tfxwvxlvu0ou3p5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio add</title>
    <ns>0</ns>
    <id>4983</id>
    <revision>
      <id>78479</id>
      <parentid>78477</parentid>
      <timestamp>2015-05-23T23:23:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>tweak</comment>
      <text xml:space="preserve" bytes="1804">{{cpp/title | ratio_add}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
using ratio_add = /* see below */;
}}
{{dcl end}}

The alias template {{tt|std::ratio_add}} denotes the result of adding two exact rational fractions represented by the {{lc|std::ratio}} specializations {{tt|R1}} and {{tt|R2}}.

The result is a {{lc|std::ratio}} specialization {{c|std::ratio&lt;U, V&gt;}}, such that given {{c|1=Num == R1::num * R2::den + R2::num * R1::den}} and {{c|1=Denom == R1::den * R2::den}} (computed without arithmetic overflow), {{tt|U}} is {{c|std::ratio&lt;Num, Denom&gt;::num}} and {{tt|V}} is {{c|std::ratio&lt;Num, Denom&gt;::den}}.

===Notes===
If {{tt|U}} or {{tt|V}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed. If {{tt|Num}} or {{tt|Denom}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed unless the implementation yields correct values for {{tt|U}} and {{tt|V}}.

The above definition requires that the result of {{c|std::ratio_add&lt;R1, R2&gt;}} be already reduced to lowest terms; for example, {{c|std::ratio_add&lt;std::ratio&lt;1, 3&gt;, std::ratio&lt;1, 6&gt;&gt;}} is the same type as {{c|std::ratio&lt;1, 2&gt;}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ratio&gt;

int main()
{
    typedef std::ratio&lt;2, 3&gt; two_third;
    typedef std::ratio&lt;1, 6&gt; one_sixth;

    typedef std::ratio_add&lt;two_third, one_sixth&gt; sum;
    std::cout &lt;&lt; &quot;2/3 + 1/6 = &quot; &lt;&lt; sum::num &lt;&lt; '/' &lt;&lt; sum::den &lt;&lt; '\n';
}
 | output=
2/3 + 1/6 = 5/6
}}

[[de:cpp/numeric/ratio/ratio add]]
[[es:cpp/numeric/ratio/ratio add]]
[[fr:cpp/numeric/ratio/ratio add]]
[[it:cpp/numeric/ratio/ratio add]]
[[ja:cpp/numeric/ratio/ratio add]]
[[pt:cpp/numeric/ratio/ratio add]]
[[ru:cpp/numeric/ratio/ratio add]]
[[zh:cpp/numeric/ratio/ratio add]]</text>
      <sha1>fpkglssu6fm8gve5mtm4v69ttq3zxzk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio divide</title>
    <ns>0</ns>
    <id>4996</id>
    <revision>
      <id>78481</id>
      <parentid>78480</parentid>
      <timestamp>2015-05-23T23:27:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>m</comment>
      <text xml:space="preserve" bytes="1822">{{cpp/title | ratio_divide}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
using ratio_divide = /* see below */;
}}
{{dcl end}}

The alias template {{tt|std::ratio_divide}} denotes the result of dividing two exact rational fractions represented by the {{lc|std::ratio}} specializations {{tt|R1}} and {{tt|R2}}.

The result is a {{lc|std::ratio}} specialization {{c|std::ratio&lt;U, V&gt;}}, such that given {{c|1=Num == R1::num * R2::den}} and {{c|1=Denom == R1::den * R2::num}} (computed without arithmetic overflow), {{tt|U}} is {{c|std::ratio&lt;Num, Denom&gt;::num}} and {{tt|V}} is {{c|std::ratio&lt;Num, Denom&gt;::den}}.

===Notes===
If {{tt|U}} or {{tt|V}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed. If {{tt|Num}} or {{tt|Denom}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed unless the implementation yields correct values for {{tt|U}} and {{tt|V}}.

The above definition requires that the result of {{c|std::ratio_divide&lt;R1, R2&gt;}} be already reduced to lowest terms; for example, {{c|std::ratio_divide&lt;std::ratio&lt;1, 12&gt;, std::ratio&lt;1, 6&gt;&gt;}} is the same type as {{c|std::ratio&lt;1, 2&gt;}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ratio&gt;

int main()
{
    typedef std::ratio&lt;2, 3&gt; two_third;
    typedef std::ratio&lt;1, 6&gt; one_sixth;
    typedef std::ratio_divide&lt;two_third, one_sixth&gt; r;
    std::cout &lt;&lt; &quot;2/3 / 1/6 = &quot; &lt;&lt; r::num &lt;&lt; '/' &lt;&lt; r::den &lt;&lt; '\n';
}
 | output=
2/3 / 1/6 = 4/1
}}

[[de:cpp/numeric/ratio/ratio divide]]
[[es:cpp/numeric/ratio/ratio divide]]
[[fr:cpp/numeric/ratio/ratio divide]]
[[it:cpp/numeric/ratio/ratio divide]]
[[ja:cpp/numeric/ratio/ratio divide]]
[[pt:cpp/numeric/ratio/ratio divide]]
[[ru:cpp/numeric/ratio/ratio divide]]
[[zh:cpp/numeric/ratio/ratio divide]]</text>
      <sha1>evryqqixqoxdmjfuihk884bfxfsg635</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio equal</title>
    <ns>0</ns>
    <id>4997</id>
    <revision>
      <id>90983</id>
      <parentid>90921</parentid>
      <timestamp>2017-03-14T12:58:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1480">{{cpp/title | ratio_equal}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
struct ratio_equal : std::integral_constant;
}}
{{dcl end}}

If the ratios R1 and R2 are equal, provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class R1, class R2 &gt;
inline constexpr bool ratio_equal_v = ratio_equal&lt;R1, R2&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{c|1=R1::num == R2::num &amp;&amp; R1::den == R2::den}} }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class R1, class R2 &gt;
struct ratio_equal : public std::integral_constant &lt;
                                 bool,
                                 R1::num == R2::num &amp;&amp; R1::den == R2::den
                            &gt; {};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ratio&gt;

int main()
{
    if(std::ratio_equal&lt;std::ratio&lt;2,3&gt;, std::ratio&lt;4,6&gt;&gt;::value) {
        std::cout &lt;&lt; &quot;2/3 == 4/6\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;2/3 != 4/6\n&quot;;
    }
}
 | output=
2/3 == 4/6
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/numeric/ratio/ratio equal]]
[[es:cpp/numeric/ratio/ratio equal]]
[[fr:cpp/numeric/ratio/ratio equal]]
[[it:cpp/numeric/ratio/ratio equal]]
[[ja:cpp/numeric/ratio/ratio equal]]
[[pt:cpp/numeric/ratio/ratio equal]]
[[ru:cpp/numeric/ratio/ratio equal]]
[[zh:cpp/numeric/ratio/ratio equal]]</text>
      <sha1>i3uaptzze4yum2lnfgkv8s8e8czupit</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio greater</title>
    <ns>0</ns>
    <id>5472</id>
    <revision>
      <id>91000</id>
      <parentid>90926</parentid>
      <timestamp>2017-03-14T12:58:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1072">{{cpp/title | ratio_greater}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
struct ratio_greater : std::integral_constant;
}}
{{dcl end}}

If the ratio {{tt|R1}} is greater than than the ratio {{tt|R2}}, provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class R1, class R2 &gt;
inline constexpr bool ratio_greater_v = ratio_greater&lt;R1, R2&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{c|1=R1::num * R2::den &gt; R2::num * R1::den}}, or equivalent expression that avoids overflow }}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/numeric/ratio/ratio greater]]
[[es:cpp/numeric/ratio/ratio greater]]
[[fr:cpp/numeric/ratio/ratio greater]]
[[it:cpp/numeric/ratio/ratio greater]]
[[ja:cpp/numeric/ratio/ratio greater]]
[[pt:cpp/numeric/ratio/ratio greater]]
[[ru:cpp/numeric/ratio/ratio greater]]
[[zh:cpp/numeric/ratio/ratio greater]]</text>
      <sha1>o4p7fhvotbp36h8qa1hsjr2yt5v8y52</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio greater equal</title>
    <ns>0</ns>
    <id>5474</id>
    <revision>
      <id>90988</id>
      <parentid>90922</parentid>
      <timestamp>2017-03-14T12:58:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1153">{{cpp/title | ratio_greater_equal}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
struct ratio_greater_equal : std::integral_constant;
}}
{{dcl end}}

If the ratio {{tt|R1}} is greater than or equal to the ratio {{tt|R2}}, provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class R1, class R2 &gt;
inline constexpr bool ratio_greater_equal_v = ratio_greater_equal&lt;R1, R2&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{c|1=R1::num * R2::den &gt;= R2::num * R1::den}}, or equivalent expression that avoids overflow }}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}

{{dsc end}}


[[de:cpp/numeric/ratio/ratio greater equal]]
[[es:cpp/numeric/ratio/ratio greater equal]]
[[fr:cpp/numeric/ratio/ratio greater equal]]
[[it:cpp/numeric/ratio/ratio greater equal]]
[[ja:cpp/numeric/ratio/ratio greater equal]]
[[pt:cpp/numeric/ratio/ratio greater equal]]
[[ru:cpp/numeric/ratio/ratio greater equal]]
[[zh:cpp/numeric/ratio/ratio greater equal]]</text>
      <sha1>3gt6op5t7gaky6q0gl3r2r6flb08ory</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio less</title>
    <ns>0</ns>
    <id>4999</id>
    <revision>
      <id>90994</id>
      <parentid>90925</parentid>
      <timestamp>2017-03-14T12:58:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1200">{{cpp/title | ratio_less}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
struct ratio_less : std::integral_constant;
}}
{{dcl end}}

If the ratio R1 is less than the ratio R2, provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class R1, class R2 &gt;
inline constexpr bool ratio_less_v = ratio_less&lt;R1, R2&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{c|1=R1::num * R2::den &lt; R2::num * R1::den}}, or equivalent expression that avoids overflow }}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ratio&gt;

int main()
{
    if (std::ratio_less&lt;std::ratio&lt;23,37&gt;, std::ratio&lt;57,90&gt;&gt;::value) {
        std::cout &lt;&lt; &quot;23/37 &lt; 57/90\n&quot;;
    }
}
 | output=
23/37 &lt; 57/90
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/numeric/ratio/ratio less]]
[[es:cpp/numeric/ratio/ratio less]]
[[fr:cpp/numeric/ratio/ratio less]]
[[it:cpp/numeric/ratio/ratio less]]
[[ja:cpp/numeric/ratio/ratio less]]
[[pt:cpp/numeric/ratio/ratio less]]
[[ru:cpp/numeric/ratio/ratio less]]
[[zh:cpp/numeric/ratio/ratio less]]</text>
      <sha1>t83417waldx1czylfhmyfgrf4w6v1yc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio less equal</title>
    <ns>0</ns>
    <id>5473</id>
    <revision>
      <id>90968</id>
      <parentid>90923</parentid>
      <timestamp>2017-03-14T12:57:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1113">{{cpp/title | ratio_less_equal}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
struct ratio_less_equal : std::integral_constant;
}}
{{dcl end}}

If the ratio {{tt|R1}} is less than or equal to the ratio {{tt|R2}}, provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class R1, class R2 &gt;
inline constexpr bool ratio_less_equal_v = ratio_less_equal&lt;R1, R2&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{c|1=R1::num * R2::den &lt;= R2::num * R1::den}}, or equivalent expression that avoids overflow }}

===Example===
{{example |
 | code=
 | output=
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/numeric/ratio/ratio less equal]]
[[es:cpp/numeric/ratio/ratio less equal]]
[[fr:cpp/numeric/ratio/ratio less equal]]
[[it:cpp/numeric/ratio/ratio less equal]]
[[ja:cpp/numeric/ratio/ratio less equal]]
[[pt:cpp/numeric/ratio/ratio less equal]]
[[ru:cpp/numeric/ratio/ratio less equal]]
[[zh:cpp/numeric/ratio/ratio less equal]]</text>
      <sha1>f5494tnfd6yxtd4tlqfx6rtiko60ffn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio multiply</title>
    <ns>0</ns>
    <id>4995</id>
    <revision>
      <id>78482</id>
      <parentid>51059</parentid>
      <timestamp>2015-05-23T23:28:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Fix wording</comment>
      <text xml:space="preserve" bytes="1855">{{cpp/title | ratio_multiply}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
using ratio_multiply = /* see below */;
}}
{{dcl end}}


The alias template {{tt|std::ratio_multiply}} denotes the result of multiplying two exact rational fractions represented by the {{lc|std::ratio}} specializations {{tt|R1}} and {{tt|R2}}.

The result is a {{lc|std::ratio}} specialization {{c|std::ratio&lt;U, V&gt;}}, such that given  {{c|1=Num == R1::num * R2::num}} and {{c|1=Denom == R1::den * R2::den}} (computed without arithmetic overflow), {{tt|U}} is {{c|std::ratio&lt;Num, Denom&gt;::num}} and {{tt|V}} is {{c|std::ratio&lt;Num, Denom&gt;::den}}.

===Notes===
If {{tt|U}} or {{tt|V}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed. If {{tt|Num}} or {{tt|Denom}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed unless the implementation yields correct values for {{tt|U}} and {{tt|V}}.

The above definition requires that the result of {{c|std::ratio_multiply&lt;R1, R2&gt;}} be already reduced to lowest terms; for example, {{c|std::ratio_multiply&lt;std::ratio&lt;1, 6&gt;, std::ratio&lt;4, 5&gt;&gt;}} is the same type as {{c|std::ratio&lt;2, 15&gt;}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ratio&gt;

int main()
{
    typedef std::ratio&lt;2, 3&gt; two_third;
    typedef std::ratio&lt;1, 6&gt; one_sixth;
    typedef std::ratio_multiply&lt;two_third, one_sixth&gt; r;
    std::cout &lt;&lt; &quot;2/3 * 1/6 = &quot; &lt;&lt; r::num &lt;&lt; '/' &lt;&lt; r::den &lt;&lt; '\n';
}
 | output=
2/3 * 1/6 = 1/9
}}

[[de:cpp/numeric/ratio/ratio multiply]]
[[es:cpp/numeric/ratio/ratio multiply]]
[[fr:cpp/numeric/ratio/ratio multiply]]
[[it:cpp/numeric/ratio/ratio multiply]]
[[ja:cpp/numeric/ratio/ratio multiply]]
[[pt:cpp/numeric/ratio/ratio multiply]]
[[ru:cpp/numeric/ratio/ratio multiply]]
[[zh:cpp/numeric/ratio/ratio multiply]]</text>
      <sha1>d5hb4ftytbjz19o07hak9fjmcl1f8od</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio not equal</title>
    <ns>0</ns>
    <id>4998</id>
    <revision>
      <id>90973</id>
      <parentid>90924</parentid>
      <timestamp>2017-03-14T12:58:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1513">{{cpp/title | ratio_not_equal}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
struct ratio_not_equal : std::integral_constant;
}}
{{dcl end}}

If the ratios R1 and R2 are not equal, provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class R1, class R2 &gt;
inline constexpr bool ratio_not_equal_v = ratio_not_equal&lt;R1, R2&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{c|1=R1::num != R2::num {{!!}} R1::den != R2::den}} }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class R1, class R2 &gt;
struct ratio_not_equal : std::integral_constant &lt;
                              bool,
                              !std::ratio_equal&lt;R1, R2&gt;
                         &gt; {};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ratio&gt;

int main()
{
    if(std::ratio_not_equal&lt;std::ratio&lt;2,3&gt;, std::ratio&lt;1,3&gt;&gt;::value) {
        std::cout &lt;&lt; &quot;2/3 != 1/3\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;2/3 == 1/3\n&quot;;
    }
}
 | output=
2/3 != 1/3
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/numeric/ratio/ratio not equal]]
[[es:cpp/numeric/ratio/ratio not equal]]
[[fr:cpp/numeric/ratio/ratio not equal]]
[[it:cpp/numeric/ratio/ratio not equal]]
[[ja:cpp/numeric/ratio/ratio not equal]]
[[pt:cpp/numeric/ratio/ratio not equal]]
[[ru:cpp/numeric/ratio/ratio not equal]]
[[zh:cpp/numeric/ratio/ratio not equal]]</text>
      <sha1>9tjan6mtxlm3bsjmbfxoia76mvqpyre</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/ratio/ratio subtract</title>
    <ns>0</ns>
    <id>4994</id>
    <revision>
      <id>78478</id>
      <parentid>51061</parentid>
      <timestamp>2015-05-23T23:22:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Fix wording</comment>
      <text xml:space="preserve" bytes="1882">{{cpp/title | ratio_subtract}}
{{cpp/numeric/ratio/navbar}}
{{dcl begin}}
{{dcl header | ratio}}
{{dcl | 1=
template&lt; class R1, class R2 &gt;
using ratio_subtract = /* see below */;
}}
{{dcl end}}

The alias template {{tt|std::ratio_subtract}} denotes the result of subtracting two exact rational fractions represented by the {{lc|std::ratio}} specializations {{tt|R1}} and {{tt|R2}}.

The result is a {{lc|std::ratio}} specialization {{c|std::ratio&lt;U, V&gt;}}, such that given {{c|1=Num == R1::num * R2::den - R2::num * R1::den}} and {{c|1=Denom == R1::den * R2::den}} (computed without arithmetic overflow), {{tt|U}} is {{c|std::ratio&lt;Num, Denom&gt;::num}} and {{tt|V}} is {{c|std::ratio&lt;Num, Denom&gt;::den}}.

===Notes===
If {{tt|U}} or {{tt|V}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed. If {{tt|Num}} or {{tt|Denom}} is not representable in {{tt|std::intmax_t}}, the program is ill-formed unless the implementation yields correct values for {{tt|U}} and {{tt|V}}.

The above definition requires that the result of {{c|std::ratio_subtract&lt;R1, R2&gt;}} be already reduced to lowest terms; for example, {{c|std::ratio_subtract&lt;std::ratio&lt;1, 2&gt;, std::ratio&lt;1, 6&gt;&gt;}} is the same type as {{c|std::ratio&lt;1, 3&gt;}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;ratio&gt;

int main()
{
    typedef std::ratio&lt;2, 3&gt; two_third;
    typedef std::ratio&lt;1, 6&gt; one_sixth;

    typedef std::ratio_subtract&lt;two_third, one_sixth&gt; diff;
    std::cout &lt;&lt; &quot;2/3 - 1/6 = &quot; &lt;&lt; diff::num &lt;&lt; '/' &lt;&lt; diff::den &lt;&lt; '\n';
}
 | output=
2/3 - 1/6 = 1/2
}}

[[de:cpp/numeric/ratio/ratio subtract]]
[[es:cpp/numeric/ratio/ratio subtract]]
[[fr:cpp/numeric/ratio/ratio subtract]]
[[it:cpp/numeric/ratio/ratio subtract]]
[[ja:cpp/numeric/ratio/ratio subtract]]
[[pt:cpp/numeric/ratio/ratio subtract]]
[[ru:cpp/numeric/ratio/ratio subtract]]
[[zh:cpp/numeric/ratio/ratio subtract]]</text>
      <sha1>qj1t909zabw348622ockvj03ki0yd4k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math</title>
    <ns>0</ns>
    <id>14764</id>
    <revision>
      <id>91200</id>
      <parentid>90220</parentid>
      <timestamp>2017-03-26T08:03:40Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1739">{{title|Mathematical special functions}}
{{cpp/numeric/special_math/navbar}}

The Mathematical Special Functions library was originally part of Library TR1 ISO/IEC TR 19768:2007, then published as an independent ISO standard, ISO/IEC 29124:2010, and finally merged to ISO C++ as of C++17.

See [[cpp/experimental/special_math|Mathematical special functions]] for the ISO/IEC 29124:2010 version of this library.

===Functions===
{{dsc begin}}
{{dsc header|cmath}}
{{dsc inc | cpp/numeric/special_math/dsc assoc_laguerre}}
{{dsc inc | cpp/numeric/special_math/dsc assoc_legendre}}
{{dsc inc | cpp/numeric/special_math/dsc beta}}
{{dsc inc | cpp/numeric/special_math/dsc comp_ellint_1}}
{{dsc inc | cpp/numeric/special_math/dsc comp_ellint_2}}
{{dsc inc | cpp/numeric/special_math/dsc comp_ellint_3}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_i}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_j}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_k}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_neumann}}
{{dsc inc | cpp/numeric/special_math/dsc ellint_1}}
{{dsc inc | cpp/numeric/special_math/dsc ellint_2}}
{{dsc inc | cpp/numeric/special_math/dsc ellint_3}}
{{dsc inc | cpp/numeric/special_math/dsc expint}}
{{dsc inc | cpp/numeric/special_math/dsc hermite}}
{{dsc inc | cpp/numeric/special_math/dsc legendre}}
{{dsc inc | cpp/numeric/special_math/dsc laguerre}}
{{dsc inc | cpp/numeric/special_math/dsc riemann_zeta}}
{{dsc inc | cpp/numeric/special_math/dsc sph_bessel}}
{{dsc inc | cpp/numeric/special_math/dsc sph_legendre}}
{{dsc inc | cpp/numeric/special_math/dsc sph_neumann}}
{{dsc end}}

&lt;!-- ===See also===
{{dsc begin}}
{{dsc inc | c/numeric/dsc special_math}}
{{dsc end}}
--&gt;

[[zh:cpp/numeric/special_math]]</text>
      <sha1>36vvcc1rzfrpe85wkikxpya5xdyd2e9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/assoc laguerre</title>
    <ns>0</ns>
    <id>14790</id>
    <revision>
      <id>84002</id>
      <timestamp>2016-03-14T14:39:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3630">{{cpp/title|assoc_laguerre|assoc_laguerref|assoc_laguerrel}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      assoc_laguerre( unsigned int n, unsigned int m, double x );
double      assoc_laguerre( unsigned int n, unsigned int m, float x );
double      assoc_laguerre( unsigned int n, unsigned int m, long double x );
float       assoc_laguerref( unsigned int n, unsigned int m, float x );
long double assoc_laguerrel( unsigned int n, unsigned int m, long double x );
}}
{{dcl |num=2|since=c++17|
double      assoc_laguerre( unsigned int n, unsigned int m, Integral x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Laguerre_polynomials#Generalized_Laguerre_polynomials|associated Laguerre polynomials]] of the degree {{tt|n}}, order {{tt|m}}, and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | n | the degree of the polymonial, a value of unsigned integer type}}
{{par | m | the order of the polynomial, a value of unsigned integer type}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the associated Laguerre polynomial of {{tt|x}}, that is {{math|(-1){{su|p=m}}{{mfrac|d{{su|p=m}}|dx{{su|p=m}}}}L{{su|b=n+m}}(x)}}, is returned (where {{math|L{{su|b=n+m}}(x)}} is the unassociated Laguerre polynomial, {{c|std::laguerre(n+m, x)}}).

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{tt|x}} is negative, a domain error may occur
* If {{tt|n}} or {{tt|m}} is greater or equal to 128, the behavior is implementation-defined.

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/laguerre.html available in boost.math]

The associated Laguerre polynomials are the polynomial solutions of the equation {{math|xy{{su|p=,,}}+(m+1-x)y{{su|p=,}}+ny {{=}} 0}}

The first few are:
* assoc_laguerre(0, m, x) {{=}} 1
* assoc_laguerre(1, m, x) {{=}} {{math|-x + m + 1}}
* assoc_laguerre(2, m, x) {{=}} {{math|{{mfrac|1|2}}[x{{su|p=2}}-2(m+2)x+(m+1)(m+2)]}}
* assoc_laguerre(3, m, x) {{=}} {{math|{{mfrac|1|6}}[-x{{su|p=3}}-3(m+3)x{{su|p=2}}-3(m+2)(m+3)x+(m+1)(m+2)(m+3)]}}

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double L1(unsigned m, double x) { return -x + m + 1; }
double L2(unsigned m, double x) { return 0.5*(x*x-2*(m+2)*x+(m+1)*(m+2)); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::assoc_laguerre(1, 10, 0.5) &lt;&lt; '=' &lt;&lt; L1(10, 0.5) &lt;&lt; '\n'
              &lt;&lt; std::assoc_laguerre(2, 10, 0.5) &lt;&lt; '=' &lt;&lt; L2(10, 0.5) &lt;&lt; '\n';
}
|output=
10.5=10.5
60.125=60.125
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc laguerre}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/AssociatedLaguerrePolynomial.html Weisstein, Eric W. &quot;Associated Laguerre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/assoc_laguerre]]
[[es:cpp/numeric/special_math/assoc_laguerre]]
[[fr:cpp/numeric/special_math/assoc_laguerre]]
[[it:cpp/numeric/special_math/assoc_laguerre]]
[[ja:cpp/numeric/special_math/assoc_laguerre]]
[[pt:cpp/numeric/special_math/assoc_laguerre]]
[[ru:cpp/numeric/special_math/assoc_laguerre]]
[[zh:cpp/numeric/special_math/assoc_laguerre]]</text>
      <sha1>lvhmqufjrgw8vl8iwyvlix9tl3scu3g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/assoc legendre</title>
    <ns>0</ns>
    <id>14791</id>
    <revision>
      <id>87801</id>
      <parentid>87798</parentid>
      <timestamp>2016-10-03T21:25:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+mathworld link for that term</comment>
      <text xml:space="preserve" bytes="3961">{{cpp/title|assoc_legendre|assoc_legendref|assoc_legendrel}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      assoc_legendre( unsigned int n, unsigned int m, double x );
double      assoc_legendre( unsigned int n, unsigned int m, float x );
double      assoc_legendre( unsigned int n, unsigned int m, long double x );
float       assoc_legendref( unsigned int n, unsigned int m, float x );
long double assoc_legendrel( unsigned int n, unsigned int m, long double x );
}}
{{dcl |num=2|since=c++17|
double      assoc_legendre( unsigned int n, unsigned int m, Integral x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Associated_Legendre_polynomials|associated Legendre polynomials]] of the degree {{tt|n}}, order {{tt|m}}, and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | n | the degree of the polynomial, a value of unsigned integer type}}
{{par | m | the order of the polynomial, a value of unsigned integer type}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the associated Legendre polynomial {{math|P{{su|p=m|b=n}}}} of {{tt|x}}, that is {{math|(1-x{{su|p=2}}){{su|p=m/2}} {{mfrac|d{{su|p=m}}|dx{{su|p=m}}}}P{{su|b=n}}(x)}}, is returned (where {{math|P{{su|b=n}}(x)}} is the unassociated Legendre polynomial, {{c|std::legendre(n, x)}}).

Note that the [http://mathworld.wolfram.com/Condon-ShortleyPhase.html Condon-Shortley phase term ] {{math|(-1){{su|p=m}}}} is omitted from this definition.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}x{{!}} &gt; 1}}, a domain error may occur
* If {{tt|n}} is greater or equal to 128, the behavior is implementation-defined.

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/legendre.html available in boost.math] as {{tt|boost::math::legendre_p}}, except that the boost.math definition includes the Condon-Shortley phase term.

The first few associated Legendre polynomials are:
* assoc_legendre(0, 0, x) {{=}} 1
* assoc_legendre(1, 0, x) {{=}} {{math|x}}
* assoc_legendre(1, 1, x) {{=}} {{math|-(1-x{{su|p=2}}){{su|p=1/2}}}}
* assoc_legendre(2, 0, x) {{=}} {{math|{{mfrac|1|2}}(3x{{su|p=2}}-1)}}
* assoc_legendre(2, 1, x) {{=}} {{math|-3x(1-x{{su|p=2}}){{su|p=1/2}}}}
* assoc_legendre(2, 2, x) {{=}} {{math|3(1-x{{su|p=2}})}}

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double P20(double x) { return 0.5*(3*x*x-1); }
double P21(double x) { return -3.0*x*std::sqrt(1-x*x); }
double P22(double x) { return 3*(1-x*x); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::assoc_legendre(2, 0, 0.5) &lt;&lt; '=' &lt;&lt; P20(0.5) &lt;&lt; '\n'
              &lt;&lt; std::assoc_legendre(2, 1, 0.5) &lt;&lt; '=' &lt;&lt; P21(0.5) &lt;&lt; '\n'
              &lt;&lt; std::assoc_legendre(2, 2, 0.5) &lt;&lt; '=' &lt;&lt; P22(0.5) &lt;&lt; '\n';
}
|output=
-0.125=-0.125
-1.29904=-1.29904
2.25=2.25
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc legendre}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/AssociatedLegendrePolynomial.html Weisstein, Eric W. &quot;Associated Legendre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/assoc_legendre]]
[[es:cpp/numeric/special_math/assoc_legendre]]
[[fr:cpp/numeric/special_math/assoc_legendre]]
[[it:cpp/numeric/special_math/assoc_legendre]]
[[ja:cpp/numeric/special_math/assoc_legendre]]
[[pt:cpp/numeric/special_math/assoc_legendre]]
[[ru:cpp/numeric/special_math/assoc_legendre]]
[[zh:cpp/numeric/special_math/assoc_legendre]]</text>
      <sha1>orsyf37u5qfkc0qb10w23bmgghbpj8h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/beta</title>
    <ns>0</ns>
    <id>14792</id>
    <revision>
      <id>84004</id>
      <timestamp>2016-03-14T14:43:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3211">{{cpp/title|beta|betaf|betal}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      beta( double x, double y );
float       betaf( float x, float y );
long double betal( long double x, long double y );
}}
{{dcl |num=2|since=c++17|
Promoted    beta( Arithmetic x, Arithmetic y );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Beta_function|beta function]] of {{tt|x}} and {{tt|y}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | x, y | values of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the beta function of {{tt|x}} and {{tt|y}}, that is {{math|{{minteg|0|1|t{{su|p=x-1}}(1-t){{su|p=(y-1)}}d''t''}}}}, or, equivalently, {{math|{{mfrac|Γ(x)Γ(y)|Γ(x+y)}}}} is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If any argument is NaN, NaN is returned and domain error is not reported
* The function is only required to be defined where both {{tt|x}} and {{tt|y}} are greater than zero, and is allowed to report a domain error otherwise.

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_beta/beta_function.html available in boost.math]

{{c|beta(x, y)}} equals {{c|beta(y, x)}}

When {{tt|x}} and {{tt|y}} are positive integers, beta(x,y) equals {{math|{{mfrac|(x-1)!(y-1)!|(x+y-1)!}}}}


Binomial coefficients can be expressed in terms of the beta function: {{math|{{mparen|(|)|n|k}}{{=}}{{mfrac|1|(n+1)Β(n-k+1,k+1)}}}}

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
double binom(int n, int k) { return 1/((n+1)*std::beta(n-k+1,k+1)); }
int main()
{
    std::cout &lt;&lt; &quot;Pascal's triangle:\n&quot;;
    for(int n = 1; n &lt; 10; ++n) {
        std::cout &lt;&lt; std::string(20-n*2, ' ');
        for(int k = 1; k &lt; n; ++k)
            std::cout &lt;&lt; std::setw(3) &lt;&lt; binom(n,k) &lt;&lt; ' ';
        std::cout &lt;&lt; '\n';
    }
}
|output=
Pascal's triangle:
                 
                  2 
                3   3 
              4   6   4 
            5  10  10   5 
          6  15  20  15   6 
        7  21  35  35  21   7 
      8  28  56  70  56  28   8 
    9  36  84 126 126  84  36   9 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc tgamma}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/BetaFunction.html Weisstein, Eric W. &quot;Beta Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/beta]]
[[es:cpp/numeric/special_math/beta]]
[[fr:cpp/numeric/special_math/beta]]
[[it:cpp/numeric/special_math/beta]]
[[ja:cpp/numeric/special_math/beta]]
[[pt:cpp/numeric/special_math/beta]]
[[ru:cpp/numeric/special_math/beta]]
[[zh:cpp/numeric/special_math/beta]]</text>
      <sha1>b2s3iwx3im0nva4oc2uhzye7mzyuwos</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/comp ellint 1</title>
    <ns>0</ns>
    <id>14793</id>
    <revision>
      <id>85557</id>
      <parentid>85556</parentid>
      <timestamp>2016-04-25T19:05:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="3136">{{cpp/title|comp_ellint_1|comp_ellint_1f|comp_ellint_1l}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      comp_ellint_1( double k );
double      comp_ellint_1( float k );
double      comp_ellint_1( long double k );
float       comp_ellint_1f( float k );
long double comp_ellint_1l( long double k );
}}
{{dcl |num=2|since=c++17|
double      comp_ellint_1( Integral k );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Elliptic_integral#Complete_elliptic_integral_of_the_first_kind|complete elliptic integral of the first kind]] of {{tt|k}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | k | elliptic modulus or eccentricity (a value of a floating-point or integral type)}}
{{par end}}

===Return value===
If no errors occur, value of the complete elliptic integral of the first kind of {{tt|k}}, that is {{lc|ellint_1(k,π/2)}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}k{{!}}&gt;1}}, a domain error may occur

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/math_toolkit/ellint/ellint_1.html available in boost.math]

The [[enwiki:Pendulum_(mathematics)|period of a pendulum]] of length {{math|l}}, given acceleration due to gravity {{math|g}}, and initial angle θ equals {{math|4{{mrad|l/g}}K(sin{{su|p=2}}(θ/2))}}, where {{math|K}} is {{tt|std::comp_ellint_1}}.

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double hpi = std::acos(-1)/2;
    std::cout &lt;&lt; &quot;K(0) = &quot; &lt;&lt; std::comp_ellint_1(0) &lt;&lt; '\n'
              &lt;&lt; &quot;π/2 = &quot; &lt;&lt; hpi &lt;&lt; '\n'
              &lt;&lt; &quot;K(0.5) = &quot; &lt;&lt; std::comp_ellint_1(0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;F(0.5, π/2) = &quot; &lt;&lt; std::ellint_1(0.5, hpi) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;Period of a pendulum length 1 m at 90 degree initial angle is &quot;
              &lt;&lt; 4*std::sqrt(1/9.80665)*
                 std::comp_ellint_1(std::pow(std::sin(hpi/2),2)) &lt;&lt; &quot; s\n&quot;;
}
|output=
K(0) = 1.5708
π/2 = 1.5708
K(0.5) = 1.68575
F(0.5, π/2) = 1.68575
Period of a pendulum length 1 m at 90 degree initial angle is 2.15324 s
}}

===External links===
[http://mathworld.wolfram.com/CompleteEllipticIntegraloftheFirstKind.html Weisstein, Eric W. &quot;Complete Elliptic Integral of the First Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc  ellint_1}}
{{dsc end}}

[[de:cpp/numeric/special_math/comp_ellint_1]]
[[es:cpp/numeric/special_math/comp_ellint_1]]
[[fr:cpp/numeric/special_math/comp_ellint_1]]
[[it:cpp/numeric/special_math/comp_ellint_1]]
[[ja:cpp/numeric/special_math/comp_ellint_1]]
[[pt:cpp/numeric/special_math/comp_ellint_1]]
[[ru:cpp/numeric/special_math/comp_ellint_1]]
[[zh:cpp/numeric/special_math/comp_ellint_1]]</text>
      <sha1>ioqh7ikz2mif6iom3myb33yewddk70x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/comp ellint 2</title>
    <ns>0</ns>
    <id>15428</id>
    <revision>
      <id>85555</id>
      <parentid>85551</parentid>
      <timestamp>2016-04-25T18:25:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+relationship to the ellipse perimeter and explanation of the special values (also fix wrong output)</comment>
      <text xml:space="preserve" bytes="3062">{{cpp/title|comp_ellint_2|comp_ellint_2f|comp_ellint_2l}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      comp_ellint_2( double k);
double      comp_ellint_2( float k );
double      comp_ellint_2( long double k );
float       comp_ellint_2f( float k );
long double comp_ellint_2l( long double k );
}}
{{dcl |num=2|since=c++17|
double      comp_ellint_2( Integral k );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Elliptic_integral#Complete_elliptic_integral_of_the_second_kind|complete elliptic integral of the second kind]] of {{tt|k}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | k | elliptic modulus or eccentricity (a value of a floating-point or integral type)}}
{{par end}}

===Return value===
If no errors occur, value of the complete elliptic integral of the second kind of {{tt|k}}, that is {{lc|ellint_2(k,π/2)}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}k{{!}}&gt;1}}, a domain error may occur

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/ellint/ellint_2.html available in boost.math]

The perimeter of an ellipse with eccentricity {{tt|k}} and semimajor axis {{math|a}} equals  {{math|4aE(k)}}, where {{math|E}} is {{tt|std::comp_ellint_2}}. When eccentricity equals {{math|0}}, the ellipse degenerates to a circle with radius {{math|a}} and the perimeter equals {{math|2πa}}, so {{math|E(0) {{=}} π/2}}. When eccentricity equals {{math|1}}, the ellipse degenerates to a line of length 2a, whose perimeter is {{math|4a}}, so {{math|E(1) {{=}} 1}}

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double hpi = std::acos(-1)/2;
    std::cout &lt;&lt; &quot;E(0) = &quot; &lt;&lt; std::comp_ellint_2(0) &lt;&lt; '\n'
              &lt;&lt; &quot;π/2 = &quot; &lt;&lt; hpi &lt;&lt; '\n'
              &lt;&lt; &quot;E(1) = &quot; &lt;&lt; std::comp_ellint_2(1) &lt;&lt; '\n'
              &lt;&lt; &quot;E(1, π/2) = &quot; &lt;&lt; std::ellint_2(1, hpi) &lt;&lt; '\n';
}
|output=
E(0) = 1.5708
π/2 = 1.5708
E(1) = 1
E(1, π/2) = 1
}}

===External links===
[http://mathworld.wolfram.com/CompleteEllipticIntegraloftheSecondKind.html Weisstein, Eric W. &quot;Complete Elliptic Integral of the Second Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc  ellint_2}}
{{dsc end}}

[[de:cpp/numeric/special_math/comp_ellint_2]]
[[es:cpp/numeric/special_math/comp_ellint_2]]
[[fr:cpp/numeric/special_math/comp_ellint_2]]
[[it:cpp/numeric/special_math/comp_ellint_2]]
[[ja:cpp/numeric/special_math/comp_ellint_2]]
[[pt:cpp/numeric/special_math/comp_ellint_2]]
[[ru:cpp/numeric/special_math/comp_ellint_2]]
[[zh:cpp/numeric/special_math/comp_ellint_2]]</text>
      <sha1>rebaosxrjlrorhkuxqzfzi85tqhgpc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/comp ellint 3</title>
    <ns>0</ns>
    <id>15429</id>
    <revision>
      <id>85549</id>
      <parentid>85544</parentid>
      <timestamp>2016-04-25T15:45:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>give parameters their proper names</comment>
      <text xml:space="preserve" bytes="2980">{{cpp/title|comp_ellint_3|comp_ellint_3f|comp_ellint_3l}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      comp_ellint_3( double k, double ν );
float       comp_ellint_3f( float k, float ν );
long double comp_ellint_3l( long double k, long double ν );
}}
{{dcl |num=2|since=c++17|
Promoted    comp_ellint_3( Arithmetic k, Arithmetic ν );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Elliptic_integral#Complete_elliptic_integral_of_the_third_kind|complete elliptic integral of the third kind]] of the arguments {{tt|k}} and {{tt|ν}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | k | elliptic modulus or eccentricity (a value of a floating-point or integral type)}}
{{par | ν | elliptic characteristic (a value of floating-point or integral type)}}
{{par end}}

===Return value===
If no errors occur, value of the complete elliptic integral of the third kind of {{tt|k}} and {{tt|ν}}, that is {{lc|std::ellint_3(k,ν,π/2)}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}k{{!}}&gt;1}}, a domain error may occur

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/ellint/ellint_3.html available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double hpi = std::acos(-1)/2;
    std::cout &lt;&lt; &quot;Π(0.5,0) = &quot; &lt;&lt; std::comp_ellint_3(0.5, 0) &lt;&lt; '\n'
              &lt;&lt; &quot;K(0.5) = &quot; &lt;&lt; std::comp_ellint_1(0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;Π(0,0) = &quot; &lt;&lt; std::comp_ellint_3(0, 0) &lt;&lt; '\n'
              &lt;&lt; &quot;π/2 = &quot; &lt;&lt; hpi &lt;&lt; '\n'
              &lt;&lt; &quot;Π(0.5,1) = &quot; &lt;&lt; std::comp_ellint_3(0.5, 1) &lt;&lt; '\n';
}
|output=
Π(0.5,0) = 1.68575
K(0.5) = 1.68575
Π(0,0) = 1.5708
π/2 = 1.5708
Π(0.5,1) = inf
}}

===External links===
[http://mathworld.wolfram.com/EllipticIntegraloftheThirdKind.html Weisstein, Eric W. &quot;Elliptic Integral of the Second Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc ellint_3}}
{{dsc end}}

[[de:cpp/numeric/special_math/comp_ellint_3]]
[[es:cpp/numeric/special_math/comp_ellint_3]]
[[fr:cpp/numeric/special_math/comp_ellint_3]]
[[it:cpp/numeric/special_math/comp_ellint_3]]
[[ja:cpp/numeric/special_math/comp_ellint_3]]
[[pt:cpp/numeric/special_math/comp_ellint_3]]
[[ru:cpp/numeric/special_math/comp_ellint_3]]
[[zh:cpp/numeric/special_math/comp_ellint_3]]</text>
      <sha1>eijkqtp80cho2b7knw91c81cvvcfhtp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/cyl bessel i</title>
    <ns>0</ns>
    <id>15702</id>
    <revision>
      <id>87771</id>
      <parentid>87769</parentid>
      <timestamp>2016-09-30T20:05:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>x≥0</comment>
      <text xml:space="preserve" bytes="2614">{{cpp/title|cyl_bessel_i|cyl_bessel_if|cyl_bessel_il}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      cyl_bessel_i( double ν, double x );
float       cyl_bessel_if( float ν, float x  );
long double cyl_bessel_il( long double ν, long double x );
}}
{{dcl |num=2|since=c++17|
Promoted    cyl_bessel_i( Arithmetic ν, Arithmetic x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Bessel_function#Modified_Bessel_functions:_I.CE.B1_.2C_K.CE.B1|regular modified cylindrical Bessel function]] of {{tt|ν}} and {{tt|x}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | ν | the order of the function}}
{{par | x | the argument of the function)}}
{{par end}}

===Return value===
If no errors occur, value of the regular modified cylindrical Bessel function of {{tt|ν}} and {{tt|x}}, that is {{math|I{{su|b=ν}}(x) {{=}} Σ{{su|p=∞|b=k=0}}{{mfrac|(x/2){{su|p=ν+2k}}|k!Γ(ν+k+1)}}}} (for {{math|x≥0}}), is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|ν&gt;{{=}}128}}, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_62_0/libs/math/doc/html/math_toolkit/bessel/mbessel.html  available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    // spot check for ν == 0
    double x = 1.2345;
    std::cout &lt;&lt; &quot;I_0(&quot; &lt;&lt; x &lt;&lt; &quot;) = &quot; &lt;&lt; std::cyl_bessel_i(0, x) &lt;&lt; '\n';

    // series expansion for I_0
    double fct = 1;
    double sum = 0;
    for(int k = 0; k &lt; 5; fct*=++k) {
        sum += std::pow((x/2),2*k) / std::pow(fct,2);
        std::cout &lt;&lt; &quot;sum = &quot; &lt;&lt; sum &lt;&lt; '\n';
    }        
}
|output=
I_0(1.2345) = 1.41886
sum = 1
sum = 1.381
sum = 1.41729
sum = 1.41882
sum = 1.41886
}}

===External links===
[http://mathworld.wolfram.com/ModifiedBesselFunctionoftheFirstKind.html Weisstein, Eric W. &quot;Modified Bessel Function of the First Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_j}}
{{dsc end}}</text>
      <sha1>pwuryjh2f0pv3h29szak4h8nsseyago</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/cyl bessel j</title>
    <ns>0</ns>
    <id>15703</id>
    <revision>
      <id>87770</id>
      <timestamp>2016-09-30T20:04:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2654">{{cpp/title|cyl_bessel_j|cyl_bessel_jf|cyl_bessel_jl}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      cyl_bessel_j( double ν, double x );
float       cyl_bessel_jf( float ν, float x  );
long double cyl_bessel_jl( long double ν, long double x );
}}
{{dcl |num=2|since=c++17|
Promoted    cyl_bessel_j( Arithmetic ν, Arithmetic x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Bessel_function#Bessel_functions_of_the_first_kind:_J.CE.B1|cylindrical Bessel function of the first kind]] of {{tt|ν}} and {{tt|x}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | ν | the order of the function}}
{{par | x | the argument of the function)}}
{{par end}}

===Return value===
If no errors occur, value of the cylindrical Bessel function of the first kind of {{tt|ν}} and {{tt|x}}, that is {{math|J{{su|b=ν}}(x) {{=}} Σ{{su|p=∞|b=k=0}}{{mfrac|(-1){{su|p=k}}(x/2){{su|p=ν+2k}}|k!Γ(ν+k+1)}}}} (for {{math|x≥0}}), is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|ν&gt;{{=}}128}}, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_62_0/libs/math/doc/html/math_toolkit/bessel/bessel_first.html   available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    // spot check for ν == 0
    double x = 1.2345;
    std::cout &lt;&lt; &quot;J_0(&quot; &lt;&lt; x &lt;&lt; &quot;) = &quot; &lt;&lt; std::cyl_bessel_j(0, x) &lt;&lt; '\n';

    // series expansion for J_0
    double fct = 1;
    double sum = 0;
    for(int k = 0; k &lt; 6; fct*=++k) {
        sum += std::pow(-1, k)*std::pow((x/2),2*k) / std::pow(fct,2);
        std::cout &lt;&lt; &quot;sum = &quot; &lt;&lt; sum &lt;&lt; '\n';
    }        
}
|output=
J_0(1.2345) = 0.653792
sum = 1
sum = 0.619002
sum = 0.655292
sum = 0.653756
sum = 0.653793
sum = 0.653792
}}

===External links===
[http://mathworld.wolfram.com/BesselFunctionoftheFirstKind.html Weisstein, Eric W. &quot;Bessel Function of the First Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_i}}
{{dsc end}}</text>
      <sha1>7m70gshitptn02ntmavji4ibbkdd746</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/cyl bessel k</title>
    <ns>0</ns>
    <id>15704</id>
    <revision>
      <id>87772</id>
      <timestamp>2016-09-30T20:24:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2842">{{cpp/title|cyl_bessel_k|cyl_bessel_kf|cyl_bessel_kl}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      cyl_bessel_k( double ν, double x );
float       cyl_bessel_kf( float ν, float x  );
long double cyl_bessel_kl( long double ν, long double x );
}}
{{dcl |num=2|since=c++17|
Promoted    cyl_bessel_k( Arithmetic ν, Arithmetic x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Bessel_function#Modified_Bessel_functions:_I.CE.B1_.2C_K.CE.B1|irregular modified cylindrical Bessel function]] (also known as modified Bessel function of the second kind) of {{tt|ν}} and {{tt|x}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | ν | the order of the function}}
{{par | x | the argument of the function)}}
{{par end}}

===Return value===
If no errors occur, value of the irregular modified cylindrical Bessel function (modified Bessel function of the second kind) of {{tt|ν}} and {{tt|x}}, is returned, that is {{math|K{{su|b=ν}}(x) {{=}} {{mfrac|π|2}}{{mfrac|I{{su|b=-ν}}(x)-I{{su|b=ν}}(x)|sin(νπ)}}}} (where {{math|I{{su|b=ν}}(x)}} is {{lc|std::cyl_bessel_i(ν,x))}} for {{math|x≥0}} and non-integer ν; for integer ν a limit is used.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|ν&gt;{{=}}128}}, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_62_0/libs/math/doc/html/math_toolkit/bessel/mbessel.html   available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double pi = std::acos(-1);
    double x = 1.2345;

    // spot check for ν == 0.5
    std::cout &lt;&lt; &quot;K_.5(&quot; &lt;&lt; x &lt;&lt; &quot;) = &quot; &lt;&lt; std::cyl_bessel_k( .5, x) &lt;&lt; '\n'
              &lt;&lt; &quot;calculated via I = &quot; &lt;&lt; 
              (pi/2)*(std::cyl_bessel_i(-.5,x)
                     -std::cyl_bessel_i(.5,x))/std::sin(.5*pi) &lt;&lt; '\n';
}
|output=
K_.5(1.2345) = 0.32823
calculated via I = 0.32823
}}

===External links===
[http://mathworld.wolfram.com/ModifiedBesselFunctionoftheSecondKind.html Weisstein, Eric W. &quot;Modified Bessel Function of the Second Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_i}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_j}}
{{dsc end}}</text>
      <sha1>ambi5a9dy36g3008niot80pe9qathyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/cyl neumann</title>
    <ns>0</ns>
    <id>15705</id>
    <revision>
      <id>87773</id>
      <timestamp>2016-09-30T21:30:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2840">{{cpp/title|cyl_neumann|cyl_neumannf|cyl_neumannl}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      cyl_neumann( double ν, double x );
float       cyl_neumannf( float ν, float x  );
long double cyl_neumannl( long double ν, long double x );
}}
{{dcl |num=2|since=c++17|
Promoted    cyl_neumann( Arithmetic ν, Arithmetic x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Bessel_function#Bessel_functions_of_the_second_kind:_Y.CE.B1|cylindrical Neumann function]] (also known as Bessel function of the second kind or Weber function) of {{tt|ν}} and {{tt|x}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | ν | the order of the function}}
{{par | x | the argument of the function)}}
{{par end}}

===Return value===
If no errors occur, value of the cylindrical Neumann function (Bessel function of the second kind) of {{tt|ν}} and {{tt|x}}, is returned, that is {{math|N{{su|b=ν}}(x) {{=}} {{mfrac|J{{su|b=ν}}(x)cos(νπ)-J{{su|b=-ν}}(x)|sin(νπ)}}}} (where {{math|J{{su|b=ν}}(x)}} is {{lc|std::cyl_bessel_j(ν,x))}} for {{math|x≥0}} and non-integer ν; for integer ν a limit is used.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|ν&gt;{{=}}128}}, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_62_0/libs/math/doc/html/math_toolkit/bessel/bessel_first.html   available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double pi = std::acos(-1);
    double x = 1.2345;

    // spot check for ν == 0.5
    std::cout &lt;&lt; &quot;N_.5(&quot; &lt;&lt; x &lt;&lt; &quot;) = &quot; &lt;&lt; std::cyl_neumann(.5, x) &lt;&lt; '\n'
              &lt;&lt; &quot;calculated via J = &quot; &lt;&lt; 
              (std::cyl_bessel_j(.5,x)*std::cos(.5*pi)
             - std::cyl_bessel_j(-.5,x))/std::sin(.5*pi) &lt;&lt; '\n';
}
|output=
N_.5(1.2345) = -0.236973
calculated via J = -0.236973
}}

===External links===
[http://mathworld.wolfram.com/BesselFunctionoftheSecondKind.html Weisstein, Eric W. &quot;Bessel Function of the Second Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_i}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_j}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_k}}
{{dsc end}}</text>
      <sha1>jehkf7a6k4ar3g1hmupz45e3jwxtb43</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/ellint 1</title>
    <ns>0</ns>
    <id>15467</id>
    <revision>
      <id>85547</id>
      <timestamp>2016-04-25T15:31:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2858">{{cpp/title|ellint_1|ellint_1f|ellint_1l}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      ellint_1( double k, double φ );
float       ellint_1f( float k, float φ  );
long double ellint_1l( long double k, long double φ );
}}
{{dcl |num=2|since=c++17|
Promoted    ellint_1( Arithmetic k, Arithmetic φ );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Elliptic_integral#Elliptic_integral_of_the_first_kind|incomplete elliptic integral of the first kind]] of {{tt|k}} and {{tt|φ}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | k | elliptic modulus or eccentricity (a value of a floating-point or integral type)}}
{{par | φ | Jacobi amplitude (a value of floating-point or integral type, measured in radians)}}
{{par end}}

===Return value===
If no errors occur, value of the incomplete elliptic integral of the first kind of {{tt|k}} and {{tt|φ}}, that is {{math|{{minteg|0|φ|{{mfrac|dθ|{{mrad|1-k{{su|p=2}}sin{{su|p=2}}θ}}}}}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}k{{!}}&gt;1}}, a domain error may occur

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/math_toolkit/ellint/ellint_1.html available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double hpi = std::acos(-1)/2;
    std::cout &lt;&lt; &quot;F(0,π/2) = &quot; &lt;&lt; std::ellint_1(0, hpi) &lt;&lt; '\n'
              &lt;&lt; &quot;F(0,-π/2) = &quot; &lt;&lt; std::ellint_1(0, -hpi) &lt;&lt; '\n'
              &lt;&lt; &quot;π/2 = &quot; &lt;&lt; hpi &lt;&lt; '\n'
              &lt;&lt; &quot;F(0.7,0) = &quot; &lt;&lt; std::ellint_1(0.7, 0) &lt;&lt; '\n';
}
|output=
F(0,π/2) = 1.5708
F(0,-π/2) = -1.5708
π/2 = 1.5708
F(0.7,0) = 0
}}

===External links===
[http://mathworld.wolfram.com/EllipticIntegraloftheFirstKind.html Weisstein, Eric W. &quot;Elliptic Integral of the First Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc comp_ellint_1}}
{{dsc end}}

[[de:cpp/numeric/special_math/ellint_1]]
[[es:cpp/numeric/special_math/ellint_1]]
[[fr:cpp/numeric/special_math/ellint_1]]
[[it:cpp/numeric/special_math/ellint_1]]
[[ja:cpp/numeric/special_math/ellint_1]]
[[pt:cpp/numeric/special_math/ellint_1]]
[[ru:cpp/numeric/special_math/ellint_1]]
[[zh:cpp/numeric/special_math/ellint_1]]</text>
      <sha1>m4wzf6t53rdkuwa4fe010nym7qgwp0n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/ellint 2</title>
    <ns>0</ns>
    <id>15468</id>
    <revision>
      <id>85548</id>
      <timestamp>2016-04-25T15:40:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2942">{{cpp/title|ellint_2|ellint_2f|ellint_2l}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      ellint_2( double k, double φ );
float       ellint_2f( float k, float φ  );
long double ellint_2l( long double k, long double φ );
}}
{{dcl |num=2|since=c++17|
Promoted    ellint_2( Arithmetic k, Arithmetic φ );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Elliptic_integral#Incomplete_elliptic_integral_of_the_second_kind|incomplete elliptic integral of the second kind]] of {{tt|k}} and {{tt|φ}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | k | elliptic modulus or eccentricity (a value of a floating-point or integral type)}}
{{par | φ | Jacobi amplitude (a value of floating-point or integral type, measured in radians)}}
{{par end}}

===Return value===
If no errors occur, value of the incomplete elliptic integral of the second kind of {{tt|k}} and {{tt|φ}}, that is {{math|{{minteg|0|φ|{{mrad|1-k{{su|p=2}}sin{{su|p=2}}θ}}dθ}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}k{{!}}&gt;1}}, a domain error may occur

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/math_toolkit/ellint/ellint_2.html available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double hpi = std::acos(-1)/2;
    std::cout &lt;&lt; &quot;E(0,π/2) = &quot; &lt;&lt; std::ellint_2(0, hpi) &lt;&lt; '\n'
              &lt;&lt; &quot;E(0,-π/2) = &quot; &lt;&lt; std::ellint_2(0, -hpi) &lt;&lt; '\n'
              &lt;&lt; &quot;π/2 = &quot; &lt;&lt; hpi &lt;&lt; '\n'
              &lt;&lt; &quot;E(0.7,0) = &quot; &lt;&lt; std::ellint_2(0.7, 0) &lt;&lt; '\n'
              &lt;&lt; &quot;E(1,π/2) = &quot; &lt;&lt; std::ellint_2(1, hpi) &lt;&lt; '\n';
}
|output=
F(0,π/2) = 1.5708
F(0,-π/2) = -1.5708
π/2 = 1.5708
F(0.7,0) = 0
E(1,π/2) = 1
}}

===External links===
[http://mathworld.wolfram.com/EllipticIntegraloftheSecondKind.html Weisstein, Eric W. &quot;Elliptic Integral of the Second Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc comp_ellint_2}}
{{dsc end}}

[[de:cpp/numeric/special_math/ellint_2]]
[[es:cpp/numeric/special_math/ellint_2]]
[[fr:cpp/numeric/special_math/ellint_2]]
[[it:cpp/numeric/special_math/ellint_2]]
[[ja:cpp/numeric/special_math/ellint_2]]
[[pt:cpp/numeric/special_math/ellint_2]]
[[ru:cpp/numeric/special_math/ellint_2]]
[[zh:cpp/numeric/special_math/ellint_2]]</text>
      <sha1>p4dc1emlnchp3dipug6zsodcqy54ijf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/ellint 3</title>
    <ns>0</ns>
    <id>15469</id>
    <revision>
      <id>85550</id>
      <timestamp>2016-04-25T15:50:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3002">{{cpp/title|ellint_3|ellint_3f|ellint_3l}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      ellint_3( double k, double ν, double φ );
float       ellint_3f( float k, float ν, float φ  );
long double ellint_3l( long double k, long double ν, long double φ );
}}
{{dcl |num=2|since=c++17|
Promoted    ellint_3( Arithmetic k, Arithmetic ν, Arithmetic φ );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Elliptic_integral#Incomplete_elliptic_integral_of_the_third_kind|incomplete elliptic integral of the third kind]] of {{tt|k}}, {{tt|ν}}, and {{tt|φ}}.
@2@ A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by {{v|1}}. If any argument has [[cpp/types/is_integral|integral type]], it is cast to {{c|double}}. If any argument is {{c|long double}}, then the return type {{tt|Promoted}} is also {{c|long double}}, otherwise the return type is always {{c|double}}.

===Parameters===
{{par begin}}
{{par | k | elliptic modulus or eccentricity (a value of a floating-point or integral type)}}
{{par | ν | elliptic characteristic (a value of floating-point or integral type)}}
{{par | φ | Jacobi amplitude (a value of floating-point or integral type, measured in radians)}}
{{par end}}

===Return value===
If no errors occur, value of the incomplete elliptic integral of the third kind of {{tt|k}}, {{tt|ν}}, and {{tt|φ}}, that is {{math|{{minteg|0|φ|{{mfrac|dθ|(1-νsin{{su|p=2}}θ){{mrad|1-k{{su|p=2}}sin{{su|p=2}}θ}}}}}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|{{!}}k{{!}}&gt;1}}, a domain error may occur

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/math_toolkit/ellint/ellint_3.html available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    double hpi = std::acos(-1)/2;
    std::cout &lt;&lt; &quot;Π(0,0,π/2) = &quot; &lt;&lt; std::ellint_3(0, 0, hpi) &lt;&lt; '\n'
              &lt;&lt; &quot;π/2 = &quot; &lt;&lt; hpi &lt;&lt; '\n';
}
|output=
Π(0,0,π/2) = 1.5708
π/2 = 1.5708
}}
{{todo|this and other elliptic integrals deserve better examples.. perhaps calculate elliptic arc length?}}

===External links===
[http://mathworld.wolfram.com/EllipticIntegraloftheThirdKind.html Weisstein, Eric W. &quot;Elliptic Integral of the Third Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc comp_ellint_3}}
{{dsc end}}

[[de:cpp/numeric/special_math/ellint_3]]
[[es:cpp/numeric/special_math/ellint_3]]
[[fr:cpp/numeric/special_math/ellint_3]]
[[it:cpp/numeric/special_math/ellint_3]]
[[ja:cpp/numeric/special_math/ellint_3]]
[[pt:cpp/numeric/special_math/ellint_3]]
[[ru:cpp/numeric/special_math/ellint_3]]
[[zh:cpp/numeric/special_math/ellint_3]]</text>
      <sha1>oq2fw9cuacmsdx3e3ggudkniug0nfxj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/expint</title>
    <ns>0</ns>
    <id>14794</id>
    <revision>
      <id>84006</id>
      <timestamp>2016-03-14T14:46:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="2208">{{cpp/title|expint|expintf|expintl}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      expint( double arg );
double      expint( float arg );
double      expint( long double arg );
float       expintf( float arg );
long double expintl( long double arg );
}}
{{dcl |num=2|since=c++17|
double      expint( Integral arg );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Exponential integral|exponential integral]] of {{tt|arg}}.
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or [[cpp/types/is_integral|Integral type]]}}
{{par end}}

===Return value===
If no errors occur, value of the exponential integral of {{tt|arg}}, that is {{math|-{{minteg|-arg|∞|{{mfrac|{{mexp|-t}}|t}}d''t''}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If the argument is ±0, -∞ is returned

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/expint/expint_i.html available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;Ei(0) = &quot; &lt;&lt; std::expint(0) &lt;&lt; '\n'
              &lt;&lt; &quot;Ei(1) = &quot; &lt;&lt; std::expint(1) &lt;&lt; '\n'
              &lt;&lt; &quot;Gompetz constant = &quot; &lt;&lt; -std::exp(1)*std::expint(-1) &lt;&lt; '\n';
}
|output=
Ei(0) = -inf
Ei(1) = 1.89512
Gompetz constant = 0.596347
}}

===External links===
[http://mathworld.wolfram.com/ExponentialIntegral.html Weisstein, Eric W. &quot;Exponential Integral.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/expint]]
[[es:cpp/numeric/special_math/expint]]
[[fr:cpp/numeric/special_math/expint]]
[[it:cpp/numeric/special_math/expint]]
[[ja:cpp/numeric/special_math/expint]]
[[pt:cpp/numeric/special_math/expint]]
[[ru:cpp/numeric/special_math/expint]]
[[zh:cpp/numeric/special_math/expint]]</text>
      <sha1>liwd2zjipeh25vy029ksy94a3qxc5bd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/hermite</title>
    <ns>0</ns>
    <id>14795</id>
    <revision>
      <id>84007</id>
      <timestamp>2016-03-14T14:48:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="3012">{{cpp/title|hermite|hermitef|hermitel}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      hermite( unsigned int n, double x );
double      hermite( unsigned int n, float x );
double      hermite( unsigned int n, long double x );
float       hermitef( unsigned int n, float x );
long double hermitel( unsigned int n, long double x );
}}
{{dcl |num=2|since=c++17|
double      hermite( unsigned int n, Integral x );
}}
{{dcl end}}

@1@ Computes the (physicist's) [[enwiki:Hermite_polynomials|Hermite polynomials]] of the degree {{tt|n}} and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | n | the degree of the polynomial}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the order-{{tt|n}}Hermite polynomial of {{tt|x}}, that is {{math|(-1){{su|p=n}}{{mexp|x{{su|p=2}}}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}{{mexp|-x{{su|p=2}}}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{tt|n}} is greater or equal than 128, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/hermite.html available in boost.math]

The Hermite polynomials are the polynomial solutions of the equation 
{{math|u{{su|p=,,}}-2xu{{su|p=,}} {{=}} -2nu}}

The first few are:
* hermite(0, x) {{=}} {{math|1}}
* hermite(1, x) {{=}} {{math|2x}}
* hermite(2, x) {{=}} {{math|4x{{su|p=2}}-2}}
* hermite(3, x) {{=}} {{math|8x{{su|p=3}}-12x}}
* hermite(4, x) {{=}} {{math|16x{{su|p=4}}-48x{{su|p=2}}+12}}

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double H3(double x) { return 8*std::pow(x,3) - 12*x; }
double H4(double x) { return 16*std::pow(x,4)-48*x*x+12; }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::hermite(3, 10) &lt;&lt; '=' &lt;&lt; H3(10) &lt;&lt; '\n'
              &lt;&lt; std::hermite(4, 10) &lt;&lt; '=' &lt;&lt; H4(10) &lt;&lt; '\n';
}
|output=
7880=7880
155212=155212
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc laguerre}}
{{dsc inc | cpp/numeric/special_math/dsc legendre}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/HermitePolynomial.html Weisstein, Eric W. &quot;&quot;Hermite Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/hermite]]
[[es:cpp/numeric/special_math/hermite]]
[[fr:cpp/numeric/special_math/hermite]]
[[it:cpp/numeric/special_math/hermite]]
[[ja:cpp/numeric/special_math/hermite]]
[[pt:cpp/numeric/special_math/hermite]]
[[ru:cpp/numeric/special_math/hermite]]
[[zh:cpp/numeric/special_math/hermite]]</text>
      <sha1>3bx47rwtx261d39mq1r8dn2fqjaj22f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/laguerre</title>
    <ns>0</ns>
    <id>14797</id>
    <revision>
      <id>86482</id>
      <parentid>84009</parentid>
      <timestamp>2016-07-03T10:50:09Z</timestamp>
      <contributor>
        <ip>183.39.214.3</ip>
      </contributor>
      <text xml:space="preserve" bytes="3072">{{cpp/title|laguerre|laguerref|laguerrel}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      laguerre( unsigned int n, double x );
double      laguerre( unsigned int n, float x );
double      laguerre( unsigned int n, long double x );
float       laguerref( unsigned int n, float x );
long double laguerrel( unsigned int n, long double x );
}}
{{dcl |num=2|since=c++17|
double      laguerre( unsigned int n, Integral x );
}}
{{dcl end}}

@1@ Computes the non-associated [[enwiki:Laguerre_polynomials|Laguerre polynomials]] of the degree {{tt|n}} and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | n | the degree of the polymonial, a value of unsigned integer type}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the nonassociated Laguerre polynomial of {{tt|x}}, that is {{math|{{mfrac|{{mexp|x}}|n!}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}(x{{su|p=n}}{{mexp|-x}})}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{tt|x}} is negative, a domain error may occur
* If {{tt|n}} is greater or equal than 128, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/laguerre.html available in boost.math]

The Laguerre polynomials are the polynomial solutions of the equation {{math|xy{{su|p=,,}}+(1-x)y{{su|p=,}}+ny {{=}} 0}}

The first few are:
* laguerre(0, x) {{=}} 1
* laguerre(1, x) {{=}} {{math|-x + 1}}
* laguerre(2, x) {{=}} {{math|{{mfrac|1|2}}[x{{su|p=2}}-4x+2]}}
* laguerre(3, x) {{=}} {{math|{{mfrac|1|6}}[-x{{su|p=3}}-9x{{su|p=2}}-18x+6]}}

===Example===
{{example|code=
#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double L1(double x) { return -x + 1; }
double L2(double x) { return 0.5*(x*x-4*x+2); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::laguerre(1, 0.5) &lt;&lt; '=' &lt;&lt; L1(0.5) &lt;&lt; '\n'
              &lt;&lt; std::laguerre(2, 0.5) &lt;&lt; '=' &lt;&lt; L2(0.5) &lt;&lt; '\n';
}
|output=
0.5=0.5
0.125=0.125
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc assoc_laguerre}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/LaguerrePolynomial.html Weisstein, Eric W. &quot;Laguerre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/laguerre]]
[[es:cpp/numeric/special_math/laguerre]]
[[fr:cpp/numeric/special_math/laguerre]]
[[it:cpp/numeric/special_math/laguerre]]
[[ja:cpp/numeric/special_math/laguerre]]
[[pt:cpp/numeric/special_math/laguerre]]
[[ru:cpp/numeric/special_math/laguerre]]
[[zh:cpp/numeric/special_math/laguerre]]</text>
      <sha1>3wc94ym3gzu5zy5w8bz1umkeoemybmp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/legendre</title>
    <ns>0</ns>
    <id>14796</id>
    <revision>
      <id>86483</id>
      <parentid>84008</parentid>
      <timestamp>2016-07-03T12:51:30Z</timestamp>
      <contributor>
        <ip>183.39.214.3</ip>
      </contributor>
      <text xml:space="preserve" bytes="3079">{{cpp/title|legendre|legendref|legendrel}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      legendre( unsigned int n, double x );
double      legendre( unsigned int n, float x );
double      legendre( unsigned int n, long double x );
float       legendref( unsigned int n, float x );
long double legendrel( unsigned int n, long double x );
}}
{{dcl |num=2|since=c++17|
double      legendre( unsigned int n, Integral x );
}}
{{dcl end}}

@1@ Computes the unassociated [[enwiki:Legendre_polynomials|Legendre polynomials]] of the degree {{tt|n}} and argument {{tt|x}}
@4@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | n | the degree of the polynomial}}
{{par | x | the argument, a value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the order-{{tt|n}} unassociated Legendre polynomial of {{tt|x}}, that is {{math|{{mfrac|1|2{{su|p=n}}n!}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}(x{{su|p=2}}-1){{su|p=n}}}}, is returned.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* The function is not required to be defined for {{math|{{!}}x{{!}}&gt;1}}
* If {{tt|n}} is greater or equal than 128, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/legendre.html available in boost.math]

The first few Legendre polynomials are:
* legendre(0, x) = {{math|1}}
* legendre(1, x) = {{math|x}}
* legendre(2, x) = {{math|{{mfrac|1|2}}(3x{{su|p=2}}-1)}}
* legendre(3, x) = {{math|{{mfrac|1|2}}(5x{{su|p=3}}-3x)}}
* legendre(4, x) = {{math|{{mfrac|1|8}}(35x{{su|p=4}}-30x{{su|p=2}}+3)}}

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
double P3(double x) { return 0.5*(5*std::pow(x,3) - 3*x); }
double P4(double x) { return 0.125*(35*std::pow(x,4)-30*x*x+3); }
int main()
{
    // spot-checks
    std::cout &lt;&lt; std::legendre(3, 0.25) &lt;&lt; '=' &lt;&lt; P3(0.25) &lt;&lt; '\n'
              &lt;&lt; std::legendre(4, 0.25) &lt;&lt; '=' &lt;&lt; P4(0.25) &lt;&lt; '\n';
}
|output=
-0.335938=-0.335938
0.157715=0.157715
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc laguerre}}
{{dsc inc | cpp/numeric/special_math/dsc hermite}}
{{dsc end}}

===External links===
[http://mathworld.wolfram.com/LegendrePolynomial.html Weisstein, Eric W. &quot;Legendre Polynomial.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/legendre]]
[[es:cpp/numeric/special_math/legendre]]
[[fr:cpp/numeric/special_math/legendre]]
[[it:cpp/numeric/special_math/legendre]]
[[ja:cpp/numeric/special_math/legendre]]
[[pt:cpp/numeric/special_math/legendre]]
[[ru:cpp/numeric/special_math/legendre]]
[[zh:cpp/numeric/special_math/legendre]]</text>
      <sha1>kcw4s9wsyps20a2t15b1q20bjujwa4o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/riemann zeta</title>
    <ns>0</ns>
    <id>14798</id>
    <revision>
      <id>88895</id>
      <parentid>84010</parentid>
      <timestamp>2016-12-17T09:43:17Z</timestamp>
      <contributor>
        <ip>95.114.103.215</ip>
      </contributor>
      <text xml:space="preserve" bytes="2776">{{cpp/title|riemann_zeta|riemann_zetaf|riemann_zetal}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      riemann_zeta( double arg );
double      riemann_zeta( float arg );
double      riemann_zeta( long double arg );
float       riemann_zetaf( float arg );
long double riemann_zetal( long double arg );
}}
{{dcl |num=2|since=c++17|
double      riemann_zeta( Integral arg );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Riemann_zeta_function|Riemann zeta function]] of {{tt|arg}}.
@2@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | arg | value of a floating-point or integral type}}
{{par end}}

===Return value===
If no errors occur, value of the Riemann zeta function of {{tt|arg}}, {{math|ζ(arg)}}, defined for the entire real axis:
* For {{math|arg&gt;1}}, {{math|Σ{{su|b=n{{=}}1|p=∞}}n{{su|p=-arg}}}}
* For {{math|0≤arg≤1}}, {{math|{{mfrac|1|1-2{{su|p=1-arg}}}}Σ{{su|b=n{{=}}1|p=∞}}(-1){{su|p=n-1}}n{{su|p=-arg}}}}
* For {{math|arg&lt;0}}, {{math|2{{su|p=arg}}π{{su|p=arg-1}}sin({{mfrac|πarg|2}})Γ(1−arg)ζ(1−arg)}}

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_60_0/libs/math/doc/html/math_toolkit/zetas/zeta.html available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    // spot checks for well-known values
    std::cout &lt;&lt; &quot;ζ(-1) = &quot; &lt;&lt; std::riemann_zeta(-1) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(0) = &quot; &lt;&lt; std::riemann_zeta(0) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(1) = &quot; &lt;&lt; std::riemann_zeta(1) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(0.5) = &quot; &lt;&lt; std::riemann_zeta(0.5) &lt;&lt; '\n'
              &lt;&lt; &quot;ζ(2) = &quot; &lt;&lt; std::riemann_zeta(2) &lt;&lt; ' '
              &lt;&lt; &quot;(π²/6 = &quot; &lt;&lt; std::pow(std::acos(-1),2)/6 &lt;&lt; &quot;)\n&quot;;
}
|output=
ζ(-1) = -0.0833333
ζ(0) = -0.5
ζ(1) = inf
ζ(0.5) = -1.46035
ζ(2) = 1.64493 (π²/6 = 1.64493)
}}

===External links===
[http://mathworld.wolfram.com/RiemannZetaFunction.html Weisstein, Eric W. &quot;Riemann Zeta Function.&quot;] From MathWorld--A Wolfram Web Resource.

[[de:cpp/numeric/special_math/riemann_zeta]]
[[es:cpp/numeric/special_math/riemann_zeta]]
[[fr:cpp/numeric/special_math/riemann_zeta]]
[[it:cpp/numeric/special_math/riemann_zeta]]
[[ja:cpp/numeric/special_math/riemann_zeta]]
[[pt:cpp/numeric/special_math/riemann_zeta]]
[[ru:cpp/numeric/special_math/riemann_zeta]]
[[zh:cpp/numeric/special_math/riemann_zeta]]</text>
      <sha1>323wox9s5yfv63p56bdlff40hephot4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/sph bessel</title>
    <ns>0</ns>
    <id>15707</id>
    <revision>
      <id>87804</id>
      <parentid>87794</parentid>
      <timestamp>2016-10-03T21:47:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+additional overloads 26.9.1[cmath.syn]p2 pp1 and 3</comment>
      <text xml:space="preserve" bytes="2461">{{cpp/title|sph_bessel|sph_besself|sph_bessell}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      sph_bessel ( unsigned n, double x );
double      sph_bessel ( unsigned n, float x );
double      sph_bessel ( unsigned n, long double x );
float       sph_besself( unsigned n, float x  );
long double sph_bessell( unsigned n, long double x );
}}
{{dcl |num=2|since=c++17|
double       sph_bessel( unsigned n, Integral x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Bessel_function#Spherical_Bessel_functions:_jn.2C_yn|spherical Bessel function of the first kind]] of {{tt|n}} and {{tt|x}}.
@2@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | n | the order of the function}}
{{par | x | the argument of the function}}
{{par end}}

===Return value===
If no errors occur, returns the value of the spherical Bessel function of the first kind of {{tt|n}} and {{tt|x}}, that is {{math|j{{su|b=n}}(x) {{=}} (π/2x){{su|p=1/2}}J{{su|b=n+1/2}}(x)}} where {{math|J{{su|b=n}}(x)}} is {{c|std::cyl_bessel_j(n,x)}}) and {{math|x≥0}}

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|n&gt;{{=}}128}}, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_62_0/libs/math/doc/html/math_toolkit/bessel/sph_bessel.html  available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    // spot check for n == 1
    double x = 1.2345;
    std::cout &lt;&lt; &quot;j_1(&quot; &lt;&lt; x &lt;&lt; &quot;) = &quot; &lt;&lt; std::sph_bessel(1, x) &lt;&lt; '\n';

    // exact solution for j_1
    std::cout &lt;&lt; &quot;(sin x)/x^2 - (cos x)/x = &quot; &lt;&lt; std::sin(x)/(x*x) - std::cos(x)/x &lt;&lt; '\n';
}
|output=
j_1(1.2345) = 0.352106
(sin x)/x^2 - (cos x)/x = 0.352106
}}

===External links===
[http://mathworld.wolfram.com/SphericalBesselFunctionoftheFirstKind.html Weisstein, Eric W. &quot;Spherical Bessel Function of the First Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_bessel_j}}
{{dsc inc | cpp/numeric/special_math/dsc sph_neumann}}
{{dsc end}}</text>
      <sha1>qahod2h77dhfijyu3qba4wns4o5g7u7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/sph legendre</title>
    <ns>0</ns>
    <id>15709</id>
    <revision>
      <id>87803</id>
      <parentid>87800</parentid>
      <timestamp>2016-10-03T21:47:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+additional overloads 26.9.1[cmath.syn]p2 pp1 and 3</comment>
      <text xml:space="preserve" bytes="3034">{{cpp/title|sph_legendre|sph_legendref|sph_legendrel}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      sph_legendre ( unsigned l, unsigned m, double θ );
double      sph_legendre ( unsigned l, unsigned m, float θ );
double      sph_legendre ( unsigned l, unsigned m, long double θ );
float       sph_legendref( unsigned l, unsigned m, float θ  );
long double sph_legendrel( unsigned l, unsigned m, long double θ );
}}
{{dcl |num=2|since=c++17|
double      sph_legendre ( unsigned l, unsigned m, Integral θ );
}}
{{dcl end}}

@1@ Computes the spherical associated Legendre function of degree {{tt|l}}, order {{tt|m}}, and polar angle {{tt|θ}}.
@2@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | l | degree }}
{{par | m | order }}
{{par | θ | polar angle, measured in radians}}
{{par end}}

===Return value===
If no errors occur, returns the value of the spherical associated Legendre function (that is, spherical harmonic with ϕ = 0) of {{tt|l}}, {{tt|m}}, and {{tt|θ}}, where the spherical harmonic function is defined as {{math|Y{{su|b=l|p=m}}(θ,ϕ) {{=}} (-1){{su|p=m}}[{{mfrac|(2l+1)(l-m)!|4π(l+m)!}}]{{su|p=1/2}}P{{su|b=l|p=m}}(cosθ)e{{su|p=imϕ}}}} where {{math|P{{su|b=l|p=m}}(x)}} is {{c|std::assoc_legendre(l,m,x)}}) and {{math|{{!}}m{{!}}≤l}}

Note that the [http://mathworld.wolfram.com/Condon-ShortleyPhase.html Condon-Shortley phase term ] {{math|(-1){{su|p=m}}}}is included in this definition because it is omitted from the definition of {{math|P{{su|b=l|p=m}}}} in {{lc|std::assoc_legendre}}.

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|l≥128}}, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of the spherical harmonic function is  [http://www.boost.org/doc/libs/1_62_0/libs/math/doc/html/math_toolkit/sf_poly/sph_harm.html  available in boost.math], and it reduces to this function when called with the parameter phi set to zero.

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    // spot check for l=3, m=0
    double x = 1.2345;
    std::cout &lt;&lt; &quot;Y_3^0(&quot; &lt;&lt; x &lt;&lt; &quot;) = &quot; &lt;&lt; std::sph_legendre(3, 0, x) &lt;&lt; '\n';

    // exact solution
    double pi = std::acos(-1);
    std::cout &lt;&lt; &quot;exact solution = &quot;
              &lt;&lt; 0.25*std::sqrt(7/pi)*(5*std::pow(std::cos(x),3)-3*std::cos(x))
              &lt;&lt; '\n';
}
|output=
Y_3^0(1.2345) = -0.302387
exact solution = -0.302387
}}

===External links===
[http://mathworld.wolfram.com/SphericalHarmonic.html Weisstein, Eric W. &quot;Spherical Harmonic.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc assoc_legendre}}
{{dsc end}}</text>
      <sha1>4gfgwddwmpl7ryajtl739jb7vzbuwc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/special math/sph neumann</title>
    <ns>0</ns>
    <id>15708</id>
    <revision>
      <id>87802</id>
      <parentid>87795</parentid>
      <timestamp>2016-10-03T21:46:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+additional overloads 26.9.1[cmath.syn]p2 pp1 and 3</comment>
      <text xml:space="preserve" bytes="2567">{{cpp/title|sph_neumann|sph_neumannf|sph_neumannl}}
{{cpp/numeric/special_math/navbar}}
{{dcl begin}}
{{dcl |num=1|since=c++17|
double      sph_neumann ( unsigned n, double x );
double      sph_neumann ( unsigned n, float x );
double      sph_neumann ( unsigned n, long double x );
float       sph_neumannf( unsigned n, float x  );
long double sph_neumannl( unsigned n, long double x );
}}
{{dcl |num=2|since=c++17|
double       sph_neumann( unsigned n, Integral x );
}}
{{dcl end}}

@1@ Computes the [[enwiki:Bessel_function#Spherical_Bessel_functions:_jn.2C_yn|spherical Bessel function of the second kind]], also known as the spherical Neumann function, of {{tt|n}} and {{tt|x}}.
@2@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.

===Parameters===
{{par begin}}
{{par | n | the order of the function}}
{{par | x | the argument of the function}}
{{par end}}

===Return value===
If no errors occur, returns the value of the spherical Bessel function of the second kind (spherical Neumann function) of {{tt|n}} and {{tt|x}}, that is {{math|n{{su|b=n}}(x) {{=}} (π/2x){{su|p=1/2}}N{{su|b=n+1/2}}(x)}} where {{math|N{{su|b=n}}(x)}} is {{c|std::cyl_neumann(n,x)}}) and {{math|x≥0}}

===Error handling===
Errors may be reported as specified in [[cpp/numeric/math/math_errhandling|math_errhandling]]

* If the argument is NaN, NaN is returned and domain error is not reported
* If {{math|n&gt;{{=}}128}}, the behavior is implementation-defined

===Notes===
{{cpp/numeric/special_math/older_impl_note}}

An implementation of this function is also [http://www.boost.org/doc/libs/1_62_0/libs/math/doc/html/math_toolkit/bessel/sph_bessel.html  available in boost.math]

===Example===
{{example|code=
#include &lt;cmath&gt;
#include &lt;iostream&gt;
int main()
{
    // spot check for n == 1
    double x = 1.2345;
    std::cout &lt;&lt; &quot;n_1(&quot; &lt;&lt; x &lt;&lt; &quot;) = &quot; &lt;&lt; std::sph_neumann(1, x) &lt;&lt; '\n';

    // exact solution for n_1
    std::cout &lt;&lt; &quot;-(cos x)/x^2 - (sin x)/x = &quot;
              &lt;&lt; -std::cos(x)/(x*x) - std::sin(x)/x &lt;&lt; '\n';
}
|output=
n_1(1.2345) = -0.981201
-(cos x)/x^2 - (sin x)/x = -0.981201
}}

===External links===
[http://mathworld.wolfram.com/SphericalBesselFunctionoftheSecondKind.html Weisstein, Eric W. &quot;Spherical Bessel Function of the Second Kind.&quot;] From MathWorld--A Wolfram Web Resource.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/special_math/dsc cyl_neumann}}
{{dsc inc | cpp/numeric/special_math/dsc sph_bessel}}
{{dsc end}}</text>
      <sha1>pjqtshynytfo4bk7u47xnxorz8nc1wp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray</title>
    <ns>0</ns>
    <id>2704</id>
    <revision>
      <id>78165</id>
      <parentid>72322</parentid>
      <timestamp>2015-05-07T21:37:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link restrict</comment>
      <text xml:space="preserve" bytes="4272">{{cpp/title|valarray}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray |
template&lt; class T &gt;
class valarray;
}}

{{lc|std::valarray}} is the class for representing and manipulating arrays of values. It supports element-wise mathematical operations and various forms of generalized subscript operators, slicing and indirect access.

===Notes===
{{lc|std::valarray}} and helper classes are defined to be free of certain forms of aliasing, thus allowing operations on these classes to be optimized similar to the effect of the keyword [[c/language/restrict|restrict]] in the C programming language. In addition, functions and operators that take {{tt|valarray}} arguments are allowed to return proxy objects to make it possible for the compiler to optimize an expression such as {{c|1=v1 = a*v2 + v3;}} as a single loop that executes {{c|1=v1[i] = a*v2[i] + v3[i];}} avoiding any temporaries or multiple passes. However, [[enwiki::Expression templates|expression templates]] make the same optimization technique available for any C++ container, and the majority of numeric libraries prefer expression templates to valarrays for flexibility. Some C++ standard library implementations use expression templates to implement efficient operations on {{tt|std::valarray}} (e.g. GNU libstdc++ and LLVM libc++). Only rarely are valarrays optimized any further, as in e.g. [http://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-A2AEF527-422D-4B7C-A411-6B9CE4D0DBC7.htm Intel Parallel Studio].

===Template parameters===
{{par begin}}
{{par | T |  the type of the elements. The type must meet the {{concept|NumericType}} requirements}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc valarray}}
{{dsc inc | cpp/numeric/valarray/dsc ~valarray}}
{{dsc inc | cpp/numeric/valarray/dsc operator{{=}}}}
{{dsc inc | cpp/numeric/valarray/dsc operator_at}}
{{dsc inc | cpp/numeric/valarray/dsc operator_arith}}
{{dsc inc | cpp/numeric/valarray/dsc operator_arith2}}
{{dsc inc | cpp/numeric/valarray/dsc swap}}
{{dsc inc | cpp/numeric/valarray/dsc size}}
{{dsc inc | cpp/numeric/valarray/dsc resize}}
{{dsc inc | cpp/numeric/valarray/dsc sum}}
{{dsc inc | cpp/numeric/valarray/dsc min}}
{{dsc inc | cpp/numeric/valarray/dsc max}}
{{dsc inc | cpp/numeric/valarray/dsc shift}}
{{dsc inc | cpp/numeric/valarray/dsc cshift}}
{{dsc inc | cpp/numeric/valarray/dsc apply}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc swap2}}
{{dsc inc | cpp/numeric/valarray/dsc begin2}}
{{dsc inc | cpp/numeric/valarray/dsc end2}}
{{dsc inc | cpp/numeric/valarray/dsc operator_arith3}}
{{dsc inc | cpp/numeric/valarray/dsc operator_cmp}}
{{dsc inc | cpp/numeric/valarray/dsc abs}}

{{dsc h2 | Exponential functions}}
{{dsc inc | cpp/numeric/valarray/dsc exp}}
{{dsc inc | cpp/numeric/valarray/dsc log}}
{{dsc inc | cpp/numeric/valarray/dsc log10}}

{{dsc h2 | Power functions}}
{{dsc inc | cpp/numeric/valarray/dsc pow}}
{{dsc inc | cpp/numeric/valarray/dsc sqrt}}

{{dsc h2 | Trigonometric functions}}
{{dsc inc | cpp/numeric/valarray/dsc sin}}
{{dsc inc | cpp/numeric/valarray/dsc cos}}
{{dsc inc | cpp/numeric/valarray/dsc tan}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc inc | cpp/numeric/valarray/dsc atan2}}

{{dsc h2 | Hyperbolic functions}}
{{dsc inc | cpp/numeric/valarray/dsc sinh}}
{{dsc inc | cpp/numeric/valarray/dsc cosh}}
{{dsc inc | cpp/numeric/valarray/dsc tanh}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc slice}}
{{dsc inc | cpp/numeric/valarray/dsc slice_array}}
{{dsc inc | cpp/numeric/valarray/dsc gslice}}
{{dsc inc | cpp/numeric/valarray/dsc gslice_array}}
{{dsc inc | cpp/numeric/valarray/dsc mask_array}}
{{dsc inc | cpp/numeric/valarray/dsc indirect_array}}
{{dsc end}}

[[de:cpp/numeric/valarray]]
[[es:cpp/numeric/valarray]]
[[fr:cpp/numeric/valarray]]
[[it:cpp/numeric/valarray]]
[[ja:cpp/numeric/valarray]]
[[pt:cpp/numeric/valarray]]
[[ru:cpp/numeric/valarray]]
[[zh:cpp/numeric/valarray]]</text>
      <sha1>ft7u6srbfbk0trpkj6mt1pw6uldo6ok</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/abs</title>
    <ns>0</ns>
    <id>4316</id>
    <revision>
      <id>71268</id>
      <parentid>58776</parentid>
      <timestamp>2014-06-09T03:28:25Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>use templates</comment>
      <text xml:space="preserve" bytes="1462">{{cpp/title|abs{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; abs( const valarray&lt;T&gt;&amp; va );
}}

Computes absolute value of each element in the value array.

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing absolute values of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|abs}}

{{cpp/numeric/valarray/notes ret|abs}}

===Possible implementation===
{{eq fun | 1=
template&lt; class T &gt;
valarray&lt;T&gt; abs( const valarray&lt;T&gt;&amp; va )
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = abs(i);
    }
    return other; // proxy object may be returned
}
}}

===Example===
{{example
|code=
#include &lt;valarray&gt;
#include &lt;iostream&gt;

int main()
{
    std::valarray&lt;int&gt; v{1, -2, 3, -4, 5, -6, 7, -8};
    std::valarray&lt;int&gt; v2 = std::abs(v);
    for(auto n : v2) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';
}
|output=
1 2 3 4 5 6 7 8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc abs}}
{{dsc inc | cpp/numeric/math/dsc fabs}}
{{dsc inc | cpp/numeric/complex/dsc abs}}
{{dsc end}}

[[de:cpp/numeric/valarray/abs]]
[[es:cpp/numeric/valarray/abs]]
[[fr:cpp/numeric/valarray/abs]]
[[it:cpp/numeric/valarray/abs]]
[[ja:cpp/numeric/valarray/abs]]
[[pt:cpp/numeric/valarray/abs]]
[[ru:cpp/numeric/valarray/abs]]
[[zh:cpp/numeric/valarray/abs]]</text>
      <sha1>22e8tjpji6apfy2r7evlpz85oo5ugwu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/acos</title>
    <ns>0</ns>
    <id>4327</id>
    <revision>
      <id>71091</id>
      <parentid>51064</parentid>
      <timestamp>2014-06-05T20:31:33Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1325">{{cpp/title|acos{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; acos( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes arc cosine of the value of the element.

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing arc cosines of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|acos}}

{{cpp/numeric/valarray/notes ret|acos}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; acos(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = acos(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc inc | cpp/numeric/valarray/dsc atan2}}
{{dsc inc | cpp/numeric/valarray/dsc cos}}
{{dsc inc | cpp/numeric/math/dsc acos}}
{{dsc inc | cpp/numeric/complex/dsc acos}}
{{dsc end}}

[[de:cpp/numeric/valarray/acos]]
[[es:cpp/numeric/valarray/acos]]
[[fr:cpp/numeric/valarray/acos]]
[[it:cpp/numeric/valarray/acos]]
[[ja:cpp/numeric/valarray/acos]]
[[pt:cpp/numeric/valarray/acos]]
[[ru:cpp/numeric/valarray/acos]]
[[zh:cpp/numeric/valarray/acos]]</text>
      <sha1>5ng4cf7tx9e73ro7e5vvciw3sc7kzvt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/apply</title>
    <ns>0</ns>
    <id>4559</id>
    <revision>
      <id>58777</id>
      <parentid>51065</parentid>
      <timestamp>2013-06-01T06:21:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1394">{{cpp/numeric/valarray/title|apply}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | 
valarray&lt;T&gt; apply( T func(T) ) const;
}}
{{dcl |
valarray&lt;T&gt; apply( T func(const T&amp;) ) const;
}}
{{dcl end}}

Returns a new valarray of the same size with values which are acquired by applying function {{tt|func}} to the previous values of the elements.

===Parameters===
{{par begin}}
{{par | func | function to apply to the values}}
{{par end}}

===Return value===
The resulting valarray with values acquired by applying function {{tt|func}}.

===Notes===
{{cpp/numeric/valarray/notes_ret}}

===Example===
{{example| calculates and prints the first 10 factorials
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;
#include &lt;cmath&gt;

int main()
{
    std::valarray&lt;int&gt; v = {1,2,3,4,5,6,7,8,9,10};
    v = v.apply([](int n)-&gt;int {
                    return std::round(std::tgamma(n+1));
                });
    for(auto n : v) {
        std::cout &lt;&lt; n &lt;&lt; ' ';
    }
    std::cout &lt;&lt; '\n';
}
 | output=
1 2 6 24 120 720 5040 40320 362880 3628800
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc for_each}}
{{dsc end}}

[[de:cpp/numeric/valarray/apply]]
[[es:cpp/numeric/valarray/apply]]
[[fr:cpp/numeric/valarray/apply]]
[[it:cpp/numeric/valarray/apply]]
[[ja:cpp/numeric/valarray/apply]]
[[pt:cpp/numeric/valarray/apply]]
[[ru:cpp/numeric/valarray/apply]]
[[zh:cpp/numeric/valarray/apply]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/asin</title>
    <ns>0</ns>
    <id>4325</id>
    <revision>
      <id>71097</id>
      <parentid>71090</parentid>
      <timestamp>2014-06-05T20:49:27Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>-</comment>
      <text xml:space="preserve" bytes="1322">{{cpp/title|asin{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; asin( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes arc sine of the value of the element. 

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing arc sines of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|asin}}

{{cpp/numeric/valarray/notes ret|asin}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; asin(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = asin(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc inc | cpp/numeric/valarray/dsc atan2}}
{{dsc inc | cpp/numeric/valarray/dsc sin}}
{{dsc inc | cpp/numeric/math/dsc asin}}
{{dsc inc | cpp/numeric/complex/dsc asin}}
{{dsc end}}

[[de:cpp/numeric/valarray/asin]]
[[es:cpp/numeric/valarray/asin]]
[[fr:cpp/numeric/valarray/asin]]
[[it:cpp/numeric/valarray/asin]]
[[ja:cpp/numeric/valarray/asin]]
[[pt:cpp/numeric/valarray/asin]]
[[ru:cpp/numeric/valarray/asin]]
[[zh:cpp/numeric/valarray/asin]]</text>
      <sha1>0n8pn9hez1lx61m2v6x6o9j3z8k8mrv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/atan</title>
    <ns>0</ns>
    <id>4326</id>
    <revision>
      <id>71092</id>
      <parentid>51067</parentid>
      <timestamp>2014-06-05T20:34:05Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1328">{{cpp/title|atan{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; atan( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes arc tangent of the value of the element. 

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing arc tangents of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|atan}}

{{cpp/numeric/valarray/notes ret|atan}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; atan(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = atan(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc inc | cpp/numeric/valarray/dsc atan2}}
{{dsc inc | cpp/numeric/valarray/dsc tan}}
{{dsc inc | cpp/numeric/math/dsc atan}}
{{dsc inc | cpp/numeric/complex/dsc atan}}
{{dsc end}}

[[de:cpp/numeric/valarray/atan]]
[[es:cpp/numeric/valarray/atan]]
[[fr:cpp/numeric/valarray/atan]]
[[it:cpp/numeric/valarray/atan]]
[[ja:cpp/numeric/valarray/atan]]
[[pt:cpp/numeric/valarray/atan]]
[[ru:cpp/numeric/valarray/atan]]
[[zh:cpp/numeric/valarray/atan]]</text>
      <sha1>gz3xoa6bpijf0en9pwyi1g2u2buytna</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/atan2</title>
    <ns>0</ns>
    <id>9037</id>
    <revision>
      <id>71266</id>
      <parentid>71093</parentid>
      <timestamp>2014-06-09T03:13:49Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+link to arg</comment>
      <text xml:space="preserve" bytes="1800">{{cpp/title|atan2{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl header | valarray}}
{{dcl | num=1 |
template&lt; class T &gt; 
valarray&lt;T&gt; atan2( const valarray&lt;T&gt;&amp; y, const valarray&lt;T&gt;&amp; x );
}}
{{dcl | num=2 |
template&lt; class T &gt; 
valarray&lt;T&gt; atan2( const valarray&lt;T&gt;&amp; y, const T&amp; vx );
}}
{{dcl | num=3 |
template&lt; class T &gt; 
valarray&lt;T&gt; atan2( const T&amp; vy, const valarray&lt;T&gt;&amp; x );
}}
{{dcl end}}

Computes the inverse tangent of {{tt|y/x}} using the signs of arguments to correctly determine quadrant.

@1@ Computes the inverse tangent of each pair of corresponding values from {{tt|y}} and {{tt|x}}.

The behavior is undefined if {{c|1=x.size() != y.size()}}.
@2@ Computes the inverse tangent of {{tt|vx}} and each value in the numeric array {{tt|y}}.
@3@ Computes the inverse tangent of {{tt|vy}} and each value in the numeric array {{tt|x}}.

===Parameters===
{{par begin}}
{{par | x, y | numeric arrays to compute inverse tangent of}}
{{par | vy, vx | values to compute inverse tangent of}}
{{par end}}

===Return value===
A numeric array containing the results of computation of inverse tangent.

===Notes===
{{cpp/numeric/valarray/notes unq|atan2}}

{{cpp/numeric/valarray/notes ret|atan2}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc inc | cpp/numeric/math/dsc atan2}}
{{dsc inc | cpp/numeric/complex/dsc arg}}
{{dsc end}}

[[de:cpp/numeric/valarray/atan2]]
[[es:cpp/numeric/valarray/atan2]]
[[fr:cpp/numeric/valarray/atan2]]
[[it:cpp/numeric/valarray/atan2]]
[[ja:cpp/numeric/valarray/atan2]]
[[pt:cpp/numeric/valarray/atan2]]
[[ru:cpp/numeric/valarray/atan2]]
[[zh:cpp/numeric/valarray/atan2]]</text>
      <sha1>p3c55usvmzm9ktbdamh5hxnn6xyduem</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/begin2</title>
    <ns>0</ns>
    <id>9026</id>
    <revision>
      <id>71047</id>
      <parentid>64403</parentid>
      <timestamp>2014-06-05T01:12:10Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/specialization/overload</comment>
      <text xml:space="preserve" bytes="1910">{{cpp/title | begin&lt;small&gt;(std::valarray)&lt;/small&gt;}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
template&lt; class T &gt; 
/*unspecified1*/ begin( valarray&lt;T&gt;&amp; v );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class T &gt; 
/*unspecified2*/ begin( const valarray&lt;T&gt;&amp; v );
}}
{{dcl end}}

The overload of {{lc|std::begin}} for {{tt|valarray}} returns an iterator of unspecified type referring to the first element in the numeric array. 

@1@ The return type meets the requirements of mutable {{concept|RandomAccessIterator}}.
@2@ The return type meets the requirements of constant {{concept|RandomAccessIterator}}.

The iterator obtained from this function is invalidated when the member function {{lc|resize()}} is called on the array {{tt|v}} or when the lifetime of {{tt|v}} ends, whichever comes first.

===Parameters===
{{par begin}}
{{par | v | a numeric array}}
{{par end}} 

===Return value===
Iterator to the first value in the numeric array.

===Exceptions===
(none)

===Notes===
Unlike other functions that take {{tt|std::valarray}} arguments, {{tt|begin()}} cannot accept the replacement types (such as the types produced by expression templates) that may be returned from expressions involving valarrays: {{c|std::begin(v1 + v2)}} is not portable, {{c|std::begin(std::valarray&lt;T&gt;(v1 + v2))}} has to be used instead.

The intent of this function is to allow [[cpp/language/range-for|range for loops]] to work with valarrays, not to provide container semantics.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc end2}}
{{dsc end}}

[[de:cpp/numeric/valarray/begin2]]
[[es:cpp/numeric/valarray/begin2]]
[[fr:cpp/numeric/valarray/begin2]]
[[it:cpp/numeric/valarray/begin2]]
[[ja:cpp/numeric/valarray/begin2]]
[[pt:cpp/numeric/valarray/begin2]]
[[ru:cpp/numeric/valarray/begin2]]
[[zh:cpp/numeric/valarray/begin2]]</text>
      <sha1>kdzq7j3ge82doisnzu0170k1mso3733</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/cos</title>
    <ns>0</ns>
    <id>4323</id>
    <revision>
      <id>71088</id>
      <parentid>51070</parentid>
      <timestamp>2014-06-05T20:24:12Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1256">{{cpp/title|cos{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; cos( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes cosine of the value of the element. 

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing cosines of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|cos}}

{{cpp/numeric/valarray/notes ret|cos}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; cos(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = cos(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc sin}}
{{dsc inc | cpp/numeric/valarray/dsc tan}}
{{dsc inc | cpp/numeric/valarray/dsc acos}}
{{dsc inc | cpp/numeric/math/dsc cos}}
{{dsc inc | cpp/numeric/complex/dsc cos}}
{{dsc end}}

[[de:cpp/numeric/valarray/cos]]
[[es:cpp/numeric/valarray/cos]]
[[fr:cpp/numeric/valarray/cos]]
[[it:cpp/numeric/valarray/cos]]
[[ja:cpp/numeric/valarray/cos]]
[[pt:cpp/numeric/valarray/cos]]
[[ru:cpp/numeric/valarray/cos]]
[[zh:cpp/numeric/valarray/cos]]</text>
      <sha1>7g7gfap6omg2kixgqo0ovf9qfgv1oea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/cosh</title>
    <ns>0</ns>
    <id>9039</id>
    <revision>
      <id>71095</id>
      <parentid>58782</parentid>
      <timestamp>2014-06-05T20:43:39Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1250">{{cpp/title|cosh{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; cosh( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes hyperbolic cosine of the value of the element.

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing hyperbolic cosine of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|cosh}}

{{cpp/numeric/valarray/notes ret|cosh}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; cosh(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = cosh(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc sinh}}
{{dsc inc | cpp/numeric/valarray/dsc tanh}}
{{dsc inc | cpp/numeric/math/dsc cosh}}
{{dsc inc | cpp/numeric/complex/dsc cosh}}
{{dsc end}}

[[de:cpp/numeric/valarray/cosh]]
[[es:cpp/numeric/valarray/cosh]]
[[fr:cpp/numeric/valarray/cosh]]
[[it:cpp/numeric/valarray/cosh]]
[[ja:cpp/numeric/valarray/cosh]]
[[pt:cpp/numeric/valarray/cosh]]
[[ru:cpp/numeric/valarray/cosh]]
[[zh:cpp/numeric/valarray/cosh]]</text>
      <sha1>mq89mi80h0q12l2c51mhqkg09xrszqk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/cshift</title>
    <ns>0</ns>
    <id>4558</id>
    <revision>
      <id>58783</id>
      <parentid>51072</parentid>
      <timestamp>2013-06-01T06:21:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1027">{{cpp/numeric/valarray/title|cshift}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
valarray&lt;T&gt; cshift( int count ) const;
}}

Returns a new valarray of the same size with elements whose positions are shifted circularly by {{tt|count}} elements. The new position of each element is {{math|(i−count) mod s}} where {{math|i}} is the previous position and {{math|s}} is {{c|size()}}.

===Parameters===
{{par begin}}
{{par | count | number of positions to shift the elements by}}
{{par end}}

===Return value===
The resulting valarray with circularly shifted elements.

===Notes===
{{cpp/numeric/valarray/notes_ret}}

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc shift}}
{{dsc end}}

[[de:cpp/numeric/valarray/cshift]]
[[es:cpp/numeric/valarray/cshift]]
[[fr:cpp/numeric/valarray/cshift]]
[[it:cpp/numeric/valarray/cshift]]
[[ja:cpp/numeric/valarray/cshift]]
[[pt:cpp/numeric/valarray/cshift]]
[[ru:cpp/numeric/valarray/cshift]]
[[zh:cpp/numeric/valarray/cshift]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/end2</title>
    <ns>0</ns>
    <id>9027</id>
    <revision>
      <id>75649</id>
      <parentid>71052</parentid>
      <timestamp>2015-01-25T13:08:16Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fix typo ({{lc|std::begin}} should be {{lc|std::end}})</comment>
      <text xml:space="preserve" bytes="1931">{{cpp/title | end&lt;small&gt;(std::valarray)&lt;/small&gt;}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
template&lt; class T &gt; 
/*unspecified1*/ end( valarray&lt;T&gt;&amp; v );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class T &gt; 
/*unspecified2*/ end( const valarray&lt;T&gt;&amp; v );
}}
{{dcl end}}

The overload of {{lc|std::end}} for {{tt|valarray}} returns an iterator of unspecified type referring to the one past the last element in the numeric array. 

@1@ The return type meets the requirements of mutable {{concept|RandomAccessIterator}}.
@2@ The return type meets the requirements of constant {{concept|RandomAccessIterator}}.

The iterator obtained from this function template is invalidated when the member function {{ltf|cpp/numeric/valarray/resize}} is called on the array {{tt|v}} or when the lifetime of {{tt|v}} ends, whichever comes first.

===Parameters===
{{par begin}}
{{par | v | a numeric array}}
{{par end}} 

===Return value===
Iterator to one past the last value in the numeric array.

===Exceptions===
(none)

===Notes===
Unlike other functions that take {{tt|std::valarray}} arguments, {{tt|end()}} cannot accept the replacement types (such as the types produced by expression templates) that may be returned from expressions involving valarrays: {{c|std::end(v1 + v2)}} is not portable, {{c|std::end(std::valarray&lt;T&gt;(v1 + v2))}} has to be used instead.

The intent of this function is to allow [[cpp/language/range-for|range for loops]] to work with valarrays, not to provide container semantics.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc begin2}}
{{dsc end}}

[[de:cpp/numeric/valarray/end2]]
[[es:cpp/numeric/valarray/end2]]
[[fr:cpp/numeric/valarray/end2]]
[[it:cpp/numeric/valarray/end2]]
[[ja:cpp/numeric/valarray/end2]]
[[pt:cpp/numeric/valarray/end2]]
[[ru:cpp/numeric/valarray/end2]]
[[zh:cpp/numeric/valarray/end2]]</text>
      <sha1>grny1f0w5lsfeftadk5ndpp2tm2aozd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/exp</title>
    <ns>0</ns>
    <id>4317</id>
    <revision>
      <id>71103</id>
      <parentid>71102</parentid>
      <timestamp>2014-06-05T21:03:14Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>-</comment>
      <text xml:space="preserve" bytes="1823">{{cpp/title|exp{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; exp( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes ''e'' raised to the power equal to the value of the element.

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing ''e'' raised by the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|exp}}

{{cpp/numeric/valarray/notes ret|exp}}

===Possible implementation===
{{eq fun | 1=
template&lt; class T &gt;
valarray&lt;T&gt; exp( const valarray&lt;T&gt;&amp; va )
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = exp(i);
    }
    return other; // proxy object may be returned
}
}}

===Example===
{{example
| This example demonstrates the Euler's identity {{math|e{{su|p=i&amp;pi;}} {{=}} -1}} and the related exponents.
|code=
#include &lt;iostream&gt;
#include &lt;complex&gt;
#include &lt;valarray&gt;

int main()
{
    const double pi = std::acos(-1);
    std::valarray&lt;std::complex&lt;double&gt;&gt; v = {
        {0, 0}, {0, pi/2}, {0, pi}, {0, 3*pi/2}, {0, 2*pi}
    };
    std::valarray&lt;std::complex&lt;double&gt;&gt; v2 = std::exp(v);
    for(auto n : v2) {
        std::cout &lt;&lt; std::fixed &lt;&lt; n &lt;&lt; '\n';
    }
}
|output=
(1.000000,0.000000)
(0.000000,1.000000)
(-1.000000,0.000000)
(-0.000000,-1.000000)
(1.000000,-0.000000)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc log}}
{{dsc inc | cpp/numeric/math/dsc exp}}
{{dsc inc | cpp/numeric/complex/dsc exp}}
{{dsc end}}

[[de:cpp/numeric/valarray/exp]]
[[es:cpp/numeric/valarray/exp]]
[[fr:cpp/numeric/valarray/exp]]
[[it:cpp/numeric/valarray/exp]]
[[ja:cpp/numeric/valarray/exp]]
[[pt:cpp/numeric/valarray/exp]]
[[ru:cpp/numeric/valarray/exp]]
[[zh:cpp/numeric/valarray/exp]]</text>
      <sha1>kin5jypg8r3176e7vayq5lvd53diex5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/gslice</title>
    <ns>0</ns>
    <id>5020</id>
    <revision>
      <id>61590</id>
      <parentid>61585</parentid>
      <timestamp>2013-06-06T06:25:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="5040">{{cpp/title|gslice}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray |
class gslice;
}}

{{tt|std::gslice}} is the selector class that identifies a subset of {{lc|std::valarray}} indices defined by a multi-level set of strides and sizes. Objects of type {{tt|std::gslice}} can be used as indices with valarray's {{tt|operator[]}} to select, for example, columns of a multidimensional array represented as a {{tt|valarray}}.

Given the starting value {{math|s}}, a list of strides {{math|i{{su|b=j}}}} and a list of sizes {{math|d{{su|b=j}}}}, a {{tt|std::gslice}} constructed from these values selects the set of indices {{math|k{{su|b=j}}{{=}}s+Σ{{su|b=j}}(i{{su|b=j}}d{{su|b=j}})}}.

For example, a gslice with starting index {{tt|3}}, strides {{tt|{19,4,1}}} and lengths {{tt|{2,4,3} }} generates the following set of indices:

{{cc|1=
3 + 0*19 + 0*4 + 0*1 = 3,
3 + 0*19 + 0*4 + 1*1 = 4,
3 + 0*19 + 0*4 + 2*1 = 5,
3 + 0*19 + 1*4 + 0*1 = 7,
3 + 0*19 + 1*4 + 1*1 = 8,
...
3 + 1*19 + 3*4 + 2*1 = 36}} 

It is possible to construct {{tt|std::gslice}} objects that select some indices more than once: if the above example used the strides {{tt|{1,1,1} }}, the indices would have been {{tt|{3, 4, 5, 4, 5, 6, ...} }}. Such gslices may only be used as arguments to the const version of {{tt|std::valarray::operator[]}}, otherwise the behavior is undefined.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/numeric/valarray/gslice | inlinemem=true | constructs a generic slice}}
{{dsc mem fun | cpp/numeric/valarray/gslice | title=start&lt;br/&gt;size&lt;br/&gt;stride | inlinemem=true | returns the parameters of the slice}}
{{dsc end}}

{{member | {{small|std::gslice::}}gslice |
{{dcl begin}}
{{dcl | 
gslice()
}}
{{dcl |
gslice( std::size_t start, const std::valarray&lt;std::size_t&gt;&amp; sizes,
                           const std::valarray&lt;std::size_t&gt;&amp; strides );
}}
{{dcl |
gslice( const gslice&amp; other );
}}
{{dcl end}}

Constructs a new generic slice.

@1@ Default constructor. Equivalent to {{c|gslice(0, std::valarray&lt;std::size_t&gt;(), std::valarray&lt;std::size_t&gt;())}}. This constructor exists only to allow construction of arrays of slices.

@2@ Constructs a new slice with parameters {{tt|start}}, {{tt|sizes}}, {{tt|strides}}.

@3@ Constructs a copy of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | start | the position of the first element}}
{{par | sizes | an array that defines the number of elements in each dimension}}
{{par | strides | an array that defines the number of positions between successive elements in each dimension}}
{{par | other | another slice to copy}}
{{par end}}
}}


{{member | {{small|std::slice::}}start, size, stride |
{{dcl begin}}
{{dcl | num=1 |
std::size_t start() const;
}}
{{dcl | num=2 |
std::valarray&lt;std::size_t&gt; size() const;
}}
{{dcl | num=3 |
std::valarray&lt;std::size_t&gt; stride() const;
}}
{{dcl end}}

Returns the parameters passed to the slice on construction - start, sizes and strides respectively.

===Parameters===
(none)

===Return value===
The parameters of the slice -- start, sizes and strides respectively.

===Complexity===
Constant.
}}

===Example===
{{example
 | demonstrates the use of gslices to address columns of a 3D array
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;
void test_print(std::valarray&lt;int&gt;&amp; v, int rows, int cols, int planes)
{
    for(int r=0; r&lt;rows; ++r) {
        for(int c=0; c&lt;cols; ++c) {
            for(int z=0; z&lt;planes; ++z)
                std::cout &lt;&lt; v[r*cols*planes + c*planes + z] &lt;&lt; ' ';
            std::cout &lt;&lt; '\n';
        }
        std::cout &lt;&lt; '\n';
    }
}
int main()
{
    std::valarray&lt;int&gt; v = // 3d array: 2 x 4 x 3 elements
    { 111,112,113 , 121,122,123 , 131,132,133 , 141,142,143,
      211,212,213 , 221,222,223 , 231,232,233 , 241,242,243};
    // int ar3d[2][4][3]
    std::cout &lt;&lt; &quot;Initial 2x4x3 array:\n&quot;;
    test_print(v, 2, 4, 3);

    // update every value in the first columns of both planes
    v[std::gslice(0, {2, 4}, {4*3, 3})] = 1; // two level one strides of 12 elements
                                             // then four level two strides of 3 elements

    // subtract the third column from the second column in the 1st plane
    v[std::gslice(1, {1, 4}, {4*3, 3})] -= v[std::gslice(2, {1, 4}, {4*3, 3})];

    std::cout &lt;&lt; &quot;After column operations: \n&quot;;
    test_print(v, 2, 4, 3);
}
 | output=
Initial 2x4x3 array:
111 112 113
121 122 123
131 132 133
141 142 143

211 212 213
221 222 223
231 232 233
241 242 243

After column operations:
1 -1 113
1 -1 123
1 -1 133
1 -1 143

1 212 213
1 222 223
1 232 233
1 242 243
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc operator_at}}
{{dsc inc | cpp/numeric/valarray/dsc slice}}
{{dsc inc | cpp/numeric/valarray/dsc gslice_array}}
{{dsc end}}

[[de:cpp/numeric/valarray/gslice]]
[[es:cpp/numeric/valarray/gslice]]
[[fr:cpp/numeric/valarray/gslice]]
[[it:cpp/numeric/valarray/gslice]]
[[ja:cpp/numeric/valarray/gslice]]
[[pt:cpp/numeric/valarray/gslice]]
[[ru:cpp/numeric/valarray/gslice]]
[[zh:cpp/numeric/valarray/gslice]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/gslice array</title>
    <ns>0</ns>
    <id>12709</id>
    <revision>
      <id>61530</id>
      <parentid>61528</parentid>
      <timestamp>2013-06-06T03:12:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="966">{{cpp/title|gslice_array}}
{{cpp/numeric/valarray/gslice_array/navbar}}
{{dcl begin}}
{{dcl header | valarray}}
{{dcl |
template&lt; class T &gt; class gslice_array;
}}
{{dcl end}}

{{tt|std::gslice_array}} is a helper template used by {{c|std::gslice}} subscript operator. It has reference semantics to a subset of the array specified by the {{tt|std::gslice}} object.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/array/dsc constructor | gslice_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc destructor | gslice_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator{{=}} | gslice_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator_arith | gslice_array}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc slice_array}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/gslice array/gslice array</title>
    <ns>0</ns>
    <id>12731</id>
    <revision>
      <id>61553</id>
      <timestamp>2013-06-06T03:21:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="68">{{include page|cpp/numeric/valarray/array/constructor|gslice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/gslice array/operator arith</title>
    <ns>0</ns>
    <id>12737</id>
    <revision>
      <id>61559</id>
      <timestamp>2013-06-06T03:22:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="71">{{include page|cpp/numeric/valarray/array/operator_arith|gslice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/gslice array/operator=</title>
    <ns>0</ns>
    <id>12733</id>
    <revision>
      <id>61555</id>
      <timestamp>2013-06-06T03:22:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="70">{{include page|cpp/numeric/valarray/array/operator{{=}}|gslice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/gslice array/~gslice array</title>
    <ns>0</ns>
    <id>12732</id>
    <revision>
      <id>61554</id>
      <timestamp>2013-06-06T03:21:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="67">{{include page|cpp/numeric/valarray/array/destructor|gslice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/indirect array</title>
    <ns>0</ns>
    <id>12710</id>
    <revision>
      <id>64115</id>
      <parentid>61524</parentid>
      <timestamp>2013-08-13T13:28:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+example</comment>
      <text xml:space="preserve" bytes="1528">{{cpp/title|indirect_array}}
{{cpp/numeric/valarray/indirect_array/navbar}}
{{dcl begin}}
{{dcl header | valarray}}
{{dcl |
template&lt; class T &gt; class indirect_array;
}}
{{dcl end}}

{{tt|std::gslice_array}} is a helper template used by {{c|std::indirect_array}} subscript operator. It has reference semantics to a subset of the array specified by an indirect array ({{c|std::valarray&lt;std::size_t&gt;}} object).

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/array/dsc constructor | indirect_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc destructor | indirect_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator{{=}} | indirect_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator_arith | indirect_array}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;

int main()
{
    std::valarray&lt;int&gt; data = {0,1,2,3,4,5,6,7,8,9};

    std::valarray&lt;std::size_t&gt; idx = {0,2,4,6,8};

    std::cout &lt;&lt; &quot;Original valarray: &quot;;
    for(int n: data) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    data[idx] += data[idx]; // double the values at indexes 'idx'

    // the type of data[idx] is std::indirect_array&lt;int&gt;

    std::cout &lt;&lt; &quot;After indirect modification: &quot;;
    for(int n: data) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
Original valarray: 0 1 2 3 4 5 6 7 8 9 
After indirect modification: 0 1 4 3 8 5 12 7 16 9 
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/indirect array/indirect array</title>
    <ns>0</ns>
    <id>12725</id>
    <revision>
      <id>61547</id>
      <timestamp>2013-06-06T03:20:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Created page with &quot;{{include page|cpp/numeric/valarray/array/constructor|indirect_array}}&quot;</comment>
      <text xml:space="preserve" bytes="70">{{include page|cpp/numeric/valarray/array/constructor|indirect_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/indirect array/operator arith</title>
    <ns>0</ns>
    <id>12738</id>
    <revision>
      <id>61560</id>
      <timestamp>2013-06-06T03:22:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="73">{{include page|cpp/numeric/valarray/array/operator_arith|indirect_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/indirect array/operator=</title>
    <ns>0</ns>
    <id>12734</id>
    <revision>
      <id>61556</id>
      <timestamp>2013-06-06T03:22:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="72">{{include page|cpp/numeric/valarray/array/operator{{=}}|indirect_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/indirect array/~indirect array</title>
    <ns>0</ns>
    <id>12724</id>
    <revision>
      <id>61546</id>
      <timestamp>2013-06-06T03:20:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{include page|cpp/numeric/valarray/array/destructor|indirect_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/log</title>
    <ns>0</ns>
    <id>4318</id>
    <revision>
      <id>72130</id>
      <parentid>71104</parentid>
      <timestamp>2014-07-17T07:34:26Z</timestamp>
      <contributor>
        <ip>212.104.65.77</ip>
      </contributor>
      <comment>no return value provided</comment>
      <text xml:space="preserve" bytes="1247">{{cpp/title|log{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; log( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes natural logarithm of the value of the element. 

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array natural logarithms of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|log}}

{{cpp/numeric/valarray/notes ret|log}}

===Possible implementation===
{{eq fun | 1=
template&lt; class T &gt;
valarray&lt;T&gt; log( const valarray&lt;T&gt;&amp; va )
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = log(i);
    }
    return other;
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc log10}}
{{dsc inc | cpp/numeric/valarray/dsc exp}}
{{dsc inc | cpp/numeric/math/dsc log}}
{{dsc inc | cpp/numeric/complex/dsc log}}
{{dsc end}}

[[de:cpp/numeric/valarray/log]]
[[es:cpp/numeric/valarray/log]]
[[fr:cpp/numeric/valarray/log]]
[[it:cpp/numeric/valarray/log]]
[[ja:cpp/numeric/valarray/log]]
[[pt:cpp/numeric/valarray/log]]
[[ru:cpp/numeric/valarray/log]]
[[zh:cpp/numeric/valarray/log]]</text>
      <sha1>q0t5duzxh88kca6ynbfj9wpgt0s8c06</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/log10</title>
    <ns>0</ns>
    <id>4320</id>
    <revision>
      <id>71105</id>
      <parentid>51077</parentid>
      <timestamp>2014-06-05T21:10:11Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1224">{{cpp/title|log10{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; log10( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes common (base 10) logarithm of the value of the element. 

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array common logarithms of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|log10}}

{{cpp/numeric/valarray/notes ret|log10}}

===Possible implementation===
{{eq fun | 1=
template&lt; class T &gt;
valarray&lt;T&gt; log10( const valarray&lt;T&gt;&amp; va )
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = log10(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc log}}
{{dsc inc | cpp/numeric/math/dsc log10}}
{{dsc inc | cpp/numeric/complex/dsc log10}}
{{dsc end}}

[[de:cpp/numeric/valarray/log10]]
[[es:cpp/numeric/valarray/log10]]
[[fr:cpp/numeric/valarray/log10]]
[[it:cpp/numeric/valarray/log10]]
[[ja:cpp/numeric/valarray/log10]]
[[pt:cpp/numeric/valarray/log10]]
[[ru:cpp/numeric/valarray/log10]]
[[zh:cpp/numeric/valarray/log10]]</text>
      <sha1>pxxgbf5qn9veosmein58ld1ynthvh4t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/mask array</title>
    <ns>0</ns>
    <id>12711</id>
    <revision>
      <id>87903</id>
      <parentid>64116</parentid>
      <timestamp>2016-10-12T15:10:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fixed old copypaste typo and rephrased the intro</comment>
      <text xml:space="preserve" bytes="1561">{{cpp/title|mask_array}}
{{cpp/numeric/valarray/mask_array/navbar}}
{{dcl begin}}
{{dcl header | valarray}}
{{dcl |
template&lt; class T &gt; class mask_array;
}}
{{dcl end}}

{{tt|std::mask_array}} is a helper template used by the [[cpp/numeric/valarray/operator_at|valarray subscript operator]] with {{lc|std::valarray&lt;bool&gt;}} argument. It has reference semantics and provides access to the subset of the valarray consisting of the elements whose indices correspond to {{tt|true}} values in the {{c|std::valarray&lt;bool&gt;}} mask.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/array/dsc constructor | mask_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc destructor | mask_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator{{=}} | mask_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator_arith | mask_array}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;

int main() 
{
    std::valarray&lt;int&gt; data = {0,1,2,3,4,5,6,7,8,9};

    std::cout &lt;&lt; &quot;Initial valarray: &quot;;
    for(int n: data) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    data[data &gt; 5] = -1;
    // the type of data&gt;5 is std::valarray&lt;bool&gt;
    // the type of data[data&gt;5] is std::mask_array&lt;int&gt;

    std::cout &lt;&lt; &quot;After v[v&gt;5]=-1:  &quot;;
    for(int n: data) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
Initial valarray: 0 1 2 3 4 5 6 7 8 9 
After v[v&gt;5]=-1:  0 1 2 3 4 5 -1 -1 -1 -1 
}}</text>
      <sha1>7gb8tddldngymr95r58espxc7selu1j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/mask array/mask array</title>
    <ns>0</ns>
    <id>12727</id>
    <revision>
      <id>61549</id>
      <timestamp>2013-06-06T03:21:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="66">{{include page|cpp/numeric/valarray/array/constructor|mask_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/mask array/operator arith</title>
    <ns>0</ns>
    <id>12739</id>
    <revision>
      <id>61561</id>
      <timestamp>2013-06-06T03:22:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{include page|cpp/numeric/valarray/array/operator_arith|mask_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/mask array/operator=</title>
    <ns>0</ns>
    <id>12735</id>
    <revision>
      <id>61557</id>
      <timestamp>2013-06-06T03:22:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="68">{{include page|cpp/numeric/valarray/array/operator{{=}}|mask_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/mask array/~mask array</title>
    <ns>0</ns>
    <id>12726</id>
    <revision>
      <id>61548</id>
      <timestamp>2013-06-06T03:21:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="65">{{include page|cpp/numeric/valarray/array/destructor|mask_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/max</title>
    <ns>0</ns>
    <id>4556</id>
    <revision>
      <id>58791</id>
      <parentid>51078</parentid>
      <timestamp>2013-06-01T06:21:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="740">{{cpp/numeric/valarray/title|max}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
T max() const;
}}

Computes the maximum value of the elements. 

If there are no elements, the behavior is undefined. 

The function can be used only if {{c|operator&lt;}} is defined for type {{tt|T}}.

===Parameters===
(none)

===Return value===
The maximum of the elements.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc min}}
{{dsc end}}

[[de:cpp/numeric/valarray/max]]
[[es:cpp/numeric/valarray/max]]
[[fr:cpp/numeric/valarray/max]]
[[it:cpp/numeric/valarray/max]]
[[ja:cpp/numeric/valarray/max]]
[[pt:cpp/numeric/valarray/max]]
[[ru:cpp/numeric/valarray/max]]
[[zh:cpp/numeric/valarray/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/min</title>
    <ns>0</ns>
    <id>4555</id>
    <revision>
      <id>58794</id>
      <parentid>51079</parentid>
      <timestamp>2013-06-01T06:21:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="740">{{cpp/numeric/valarray/title|min}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
T min() const;
}}

Computes the minimum value of the elements. 

If there are no elements, the behavior is undefined. 

The function can be used only if {{c|operator&lt;}} is defined for type {{tt|T}}.

===Parameters===
(none)

===Return value===
The minimum of the elements.

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc max}}
{{dsc end}}

[[de:cpp/numeric/valarray/min]]
[[es:cpp/numeric/valarray/min]]
[[fr:cpp/numeric/valarray/min]]
[[it:cpp/numeric/valarray/min]]
[[ja:cpp/numeric/valarray/min]]
[[pt:cpp/numeric/valarray/min]]
[[ru:cpp/numeric/valarray/min]]
[[zh:cpp/numeric/valarray/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/operator arith</title>
    <ns>0</ns>
    <id>9033</id>
    <revision>
      <id>51081</id>
      <parentid>42084</parentid>
      <timestamp>2013-06-01T03:50:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1197">{{cpp/numeric/valarray/title|operator+,-,~,!}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | num=1 |
valarray&lt;T&gt; operator+() const;
}}
{{dcl | num=2 | 1=
valarray&lt;T&gt; operator-() const;
}}
{{dcl | num=3 | 1=
valarray&lt;T&gt; operator~() const;
}}
{{dcl | num=4 | 1=
valarray&lt;bool&gt; operator!() const;
}}
{{dcl end}}

Applies unary operators to each element in the numeric array.

===Parameters===
(none)

===Return value===
A numeric array containing elements with values obtained by applying corresponding operator to the values in {{c|*this}}.

===Exceptions===
(none)

===Notes===
Each of the operators can only be instantiated if the following requirements are met:
:* The indicated operator can be applied to type {{tt|T}}
:* The result value can be unambiguously converted to {{tt|T}} (1-3) or {{c|bool}} (4).

{{cpp/numeric/valarray/notes_ret}}

[[de:cpp/numeric/valarray/operator arith]]
[[es:cpp/numeric/valarray/operator arith]]
[[fr:cpp/numeric/valarray/operator arith]]
[[it:cpp/numeric/valarray/operator arith]]
[[ja:cpp/numeric/valarray/operator arith]]
[[pt:cpp/numeric/valarray/operator arith]]
[[ru:cpp/numeric/valarray/operator arith]]
[[zh:cpp/numeric/valarray/operator arith]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/operator arith2</title>
    <ns>0</ns>
    <id>9034</id>
    <revision>
      <id>51082</id>
      <parentid>42074</parentid>
      <timestamp>2013-06-01T03:50:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="2569">{{cpp/numeric/valarray/title|1=operator+=,-=,*=,/=,%=,&amp;=,{{!}}=,&lt;&lt;=,&gt;&gt;=}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
valarray&lt;T&gt; operator+=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator-=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator*=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator/=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator%=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator&amp;=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator{{!}}=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator^=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator&lt;&lt;=( const valarray&lt;T&gt;&amp; v );
valarray&lt;T&gt; operator&gt;&gt;=( const valarray&lt;T&gt;&amp; v );
}}
{{dcl | num=2 | 1=
valarray&lt;T&gt; operator+=( const T&amp; val );
valarray&lt;T&gt; operator-=( const T&amp; val );
valarray&lt;T&gt; operator*=( const T&amp; val );
valarray&lt;T&gt; operator/=( const T&amp; val );
valarray&lt;T&gt; operator%=( const T&amp; val );
valarray&lt;T&gt; operator&amp;=( const T&amp; val );
valarray&lt;T&gt; operator{{!}}=( const T&amp; val );
valarray&lt;T&gt; operator^=( const T&amp; val );
valarray&lt;T&gt; operator&lt;&lt;=( const T&amp; val );
valarray&lt;T&gt; operator&gt;&gt;=( const T&amp; val );
}}
{{dcl end}}

Applies compound assignment operators to each element in the numeric array. 

@1@ Each element is assigned value obtained by applying the corresponding operator to the previous value of the element and corresponding element from {{tt|v}}.

The behavior is undefined if {{c|1=size() != v.size()}}

The behavior is undefined if any of the values in {{tt|v}} is computed during the assignment and depends on any of the values in {{c|*this}}, that is, the expression on the right side of the assignment refers to a variable in the left side of the assignment.

@2@ Each element is assigned value obtained by applying the corresponding operator to the previous value of the element and the value of {{tt|val}}.

===Parameters===
{{par begin}}
{{par | v | another numeric array}}
{{par | val | a value}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
(none)

===Notes===
Each of the operators can only be instantiated if the following requirements are met:
:* The indicated operator can be applied to type {{tt|T}}
:* The result value can be unambiguously converted to {{tt|T}} (1-3) or {{c|bool}} (4).

{{cpp/numeric/valarray/notes_ret}}

[[de:cpp/numeric/valarray/operator arith2]]
[[es:cpp/numeric/valarray/operator arith2]]
[[fr:cpp/numeric/valarray/operator arith2]]
[[it:cpp/numeric/valarray/operator arith2]]
[[ja:cpp/numeric/valarray/operator arith2]]
[[pt:cpp/numeric/valarray/operator arith2]]
[[ru:cpp/numeric/valarray/operator arith2]]
[[zh:cpp/numeric/valarray/operator arith2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/operator arith3</title>
    <ns>0</ns>
    <id>9646</id>
    <revision>
      <id>78167</id>
      <parentid>76100</parentid>
      <timestamp>2015-05-08T04:55:56Z</timestamp>
      <contributor>
        <ip>124.163.209.101</ip>
      </contributor>
      <comment>+operator&amp;&amp;,||</comment>
      <text xml:space="preserve" bytes="5548">{{title|1=operator+,-,*,/,%,&amp;,{{!}},^,&lt;&lt;,&gt;&gt;,&amp;&amp;,{{!!}} {{small|std::valarray}}}}
{{cpp/numeric/valarray/navbar}}

{{dcl begin}}
{{dcl header | valarray }}
{{dcl | num=1 | 1=
template &lt;class T&gt; std::valarray&lt;T&gt; operator+ (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator- (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator* (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator/ (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator% (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&amp; (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator{{!}} (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator^ (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&lt;&lt; (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&gt;&gt; (const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;bool&gt; operator&amp;&amp;(const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;bool&gt; operator{{!!}}(const std::valarray&lt;T&gt;&amp; lhs, const std::valarray&lt;T&gt;&amp; rhs);
}}
{{dcl | num=2 | 1=
template &lt;class T&gt; std::valarray&lt;T&gt; operator+ (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator- (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator* (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator/ (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator% (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&amp; (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator{{!}} (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator^ (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&lt;&lt; (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&gt;&gt; (const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;bool&gt; operator&amp;&amp;(const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
template &lt;class T&gt; std::valarray&lt;bool&gt; operator{{!!}}(const T&amp; val, const std::valarray&lt;T&gt;&amp; rhs);
}}
{{dcl | num=3 | 1=
template &lt;class T&gt; std::valarray&lt;T&gt; operator+ (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; rhs);
template &lt;class T&gt; std::valarray&lt;T&gt; operator- (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator* (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator/ (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator% (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&amp; (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator{{!}} (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator^ (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&lt;&lt; (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;T&gt; operator&gt;&gt; (const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;bool&gt; operator&amp;&amp;(const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
template &lt;class T&gt; std::valarray&lt;bool&gt; operator{{!!}}(const std::valarray&lt;T&gt;&amp; lhs, const T&amp; val);
}}
{{dcl end}}

Apply binary operators to each element of two valarrays, or a valarray and a value.

@1@ The operators works on valarrays of the same size and returns a valarray with the same size as the parameters with the operation applied to every elements of the two arguments.

@2,3@ Applies the operator between each element of the valarray and the scalar.

===Parameters===
{{par begin}}
{{par | rhs | a numeric array}}
{{par | lhs | a numeric array}}
{{par | val | a value of type {{ttb|T}} }}
{{par end}}

===Return value===
A valarray with the same size as the parameter.

===Note===
The behaviour is undefined when the two arguments are valarrays with different sizes.

{{cpp/numeric/valarray/notes ret}}

===Example===
{{example
|Finds real roots of multiple quadratic equations.
|code=
#include &lt;valarray&gt;
#include &lt;iostream&gt;

int main()
{
    std::valarray&lt;double&gt; a(1, 8);
    std::valarray&lt;double&gt; b{1, 2, 3, 4, 5, 6, 7, 8};
    std::valarray&lt;double&gt; c = -b;
    // literals must also be of type T (double in this case)
    std::valarray&lt;double&gt; d = std::sqrt((b * b - 4.0 * a * c));
    std::valarray&lt;double&gt; x1 = (-b - d) / (2.0 * a);
    std::valarray&lt;double&gt; x2 = (-b + d) / (2.0 * a);
    std::cout &lt;&lt; &quot;quadratic equation    root 1,  root 2&quot; &lt;&lt; &quot;\n&quot;;
    for (size_t i = 0; i &lt; a.size(); ++i) {
        std::cout &lt;&lt; a[i] &lt;&lt; &quot;x\u00B2 + &quot; &lt;&lt; b[i] &lt;&lt; &quot;x + &quot; &lt;&lt; c[i] &lt;&lt; &quot; = 0   &quot;;
        std::cout &lt;&lt; x1[i] &lt;&lt; &quot;, &quot; &lt;&lt; x2[i] &lt;&lt; &quot;\n&quot;;
    }
}
|output=
quadratic equation    root 1,  root 2
1x² + 1x + -1 = 0   -1.61803, 0.618034
1x² + 2x + -2 = 0   -2.73205, 0.732051
1x² + 3x + -3 = 0   -3.79129, 0.791288
1x² + 4x + -4 = 0   -4.82843, 0.828427
1x² + 5x + -5 = 0   -5.8541, 0.854102
1x² + 6x + -6 = 0   -6.87298, 0.872983
1x² + 7x + -7 = 0   -7.88748, 0.887482
1x² + 8x + -8 = 0   -8.89898, 0.898979
}}</text>
      <sha1>69u2ljmsipzndoeeomu26y0yw582rri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/operator at</title>
    <ns>0</ns>
    <id>9032</id>
    <revision>
      <id>87904</id>
      <parentid>76056</parentid>
      <timestamp>2016-10-12T15:20:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>copy example from mask_array. Note on non-chaining of the []'s</comment>
      <text xml:space="preserve" bytes="3622">{{cpp/numeric/valarray/title|operator[]}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1 }}
{{dcl | until=c++11 | 1=
T                      operator[]( std::size_t pos ) const;
}}
{{dcl | since=c++11 | 1=
const T&amp;               operator[]( std::size_t pos ) const;
}}
{{dcl rev end}}
{{dcl | num=2 | 1=
T&amp;                     operator[]( std::size_t pos );
}}
{{dcl | num=3 | 1=
std::valarray&lt;T&gt;       operator[]( std::slice slicearr ) const;
}}
{{dcl | num=4 | 1=
std::slice_array&lt;T&gt;    operator[]( std::slice slicearr );
}}
{{dcl | num=5 | 1=
std::valarray&lt;T&gt;       operator[]( const std::gslice&amp; gslicearr ) const;
}}
{{dcl | num=6 | 1=
std::gslice_array&lt;T&gt;   operator[]( const std::gslice&amp; gslicearr );
}}
{{dcl | num=7 | 1=
std::valarray&lt;T&gt;       operator[]( const valarray&lt;bool&gt;&amp; boolarr ) const;
}}
{{dcl | num=8 | 1=
std::mask_array&lt;T&gt;     operator[]( const valarray&lt;bool&gt;&amp; boolarr );
}}
{{dcl | num=9 | 1=
std::valarray&lt;T&gt;       operator[]( const valarray&lt;std::size_t&gt;&amp; indarr ) const;
}}
{{dcl | num=10 | 1=
std::indirect_array&lt;T&gt; operator[]( const valarray&lt;std::size_t&gt;&amp; indarr );
}}
{{dcl end}}

Retrieve single elements or portions of the array.

The {{c|const}} overloads that return element sequences create a new {{lc|std::valarray}} object.
The non-{{c|const}} overloads return classes holding references to the array elements.

===Parameters===
{{todo|Explain the parameters}}

===Return value===
@1,2@ A reference to the corresponding element
@3,5,7,9@ A {{lc|std::valarray}} object containing copies of the selected items
@4,6,8,10@ The corresponding data structure containing references to the selected items 

===Exceptions===
(none)

===Precondition===
The selected elements must exist.

===Notes===
* For proper values of {{ttb|i}} and {{ttb|j}}, the following properties are true:
@1@ {{c|(a[i] {{=}} q, a[i]) {{==}} q}}
: For a non-const {{ttb|a}}.
@2@ {{c|&amp;a[i+j] {{==}} &amp;a[i] + j}} 
:This means that valarray elements are adjacent in memory.
@3@ {{c|&amp;a[i] !{{=}} &amp;b[j]}}
:This holds for every objects {{ttb|a}} and {{ttb|b}} that are not aliases of one another.
:This means that there are no aliases in the elements and this property can be used to perform some kinds of optimization.

* References become invalid on [[cpp/numeric/valarray/resize|resize]] or when the array is destructed.

For overloads {{v|3,5,7,9}}, {{cpp/numeric/valarray/notes_ret}}

===Notes===
Slice/mask/indirect index accesses do not chain: {{c|1=v[v==n][std::slice(0,5,2] = x;}} is an error because {{lc|std::mask_array}} (the type of {{c|1=v[v==n]}}) does not have {{tt|operator[]}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;

int main() 
{
    std::valarray&lt;int&gt; data = {0,1,2,3,4,5,6,7,8,9};

    std::cout &lt;&lt; &quot;Initial valarray: &quot;;
    for(int n: data) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    data[data &gt; 5] = -1; // valarray&lt;bool&gt; overload of operator[]
    // the type of data&gt;5 is std::valarray&lt;bool&gt;
    // the type of data[data&gt;5] is std::mask_array&lt;int&gt;

    std::cout &lt;&lt; &quot;After v[v&gt;5]=-1:  &quot;;
    for(std::size_t n = 0; n &lt; data.size(); ++n) 
      std::cout &lt;&lt; data[n] &lt;&lt; ' ';  // regular operator[]
    std::cout &lt;&lt; '\n';
}
 | output=
Initial valarray: 0 1 2 3 4 5 6 7 8 9 
After v[v&gt;5]=-1:  0 1 2 3 4 5 -1 -1 -1 -1 
}}

[[de:cpp/numeric/valarray/operator at]]
[[es:cpp/numeric/valarray/operator at]]
[[fr:cpp/numeric/valarray/operator at]]
[[it:cpp/numeric/valarray/operator at]]
[[ja:cpp/numeric/valarray/operator at]]
[[pt:cpp/numeric/valarray/operator at]]
[[ru:cpp/numeric/valarray/operator at]]
[[zh:cpp/numeric/valarray/operator at]]</text>
      <sha1>0fxzknlkissum2fxeydfe7d90770cdm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/operator cmp</title>
    <ns>0</ns>
    <id>9035</id>
    <revision>
      <id>79268</id>
      <parentid>79267</parentid>
      <timestamp>2015-06-29T21:46:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+less weird example</comment>
      <text xml:space="preserve" bytes="4114">{{title|1=operator==,!=,&lt;,&lt;=,&gt;,&gt;={{small|std::valarray}}}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class T &gt; 
valarray&lt;bool&gt; operator==( const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator!=( const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&lt;( const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&lt;=( const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&gt;( const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&gt;=( const valarray&lt;T&gt;&amp; lhs, const valarray&lt;T&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; class T &gt; 
valarray&lt;bool&gt; operator==( const T&amp; lhsv, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator!=( const T&amp; lhsv, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&lt;( const T&amp; lhsv, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&lt;=( const T&amp; lhsv, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&gt;( const T&amp; lhsv, const valarray&lt;T&gt;&amp; rhs );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&gt;=( const T&amp; lhsv, const valarray&lt;T&gt;&amp; rhs );
}}
{{dcl | num=3 | 1=
template&lt; class T &gt; 
valarray&lt;bool&gt; operator==( const valarray&lt;T&gt;&amp; lhs, const T&amp; rhsv );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator!=( const valarray&lt;T&gt;&amp; lhs, const T&amp; rhsv );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&lt;( const valarray&lt;T&gt;&amp; lhs, const T&amp; rhsv );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&lt;=( const valarray&lt;T&gt;&amp; lhs, const T&amp; rhsv );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&gt;( const valarray&lt;T&gt;&amp; lhs, const T&amp; rhsv );
template&lt; class T &gt; 
valarray&lt;bool&gt; operator&gt;=( const valarray&lt;T&gt;&amp; lhs, const T&amp; rhsv );
}}
{{dcl end}}

Compares each value within the numeric array with another value.

@1@ Returns a numeric array of {{c|bool}} containing elements each of which is obtained by applying the indicated comparison operator to the corresponding values of {{tt|lhs}} and {{tt|rhs}}

The behavior is undefined if {{c|1=size() != v.size()}}

@2@ Returns a numeric array of {{c|bool}} containing elements each of which is obtained by applying the indicated comparison operator to {{tt|lhsv}} and the corresponding value of {{tt|rhs}} .

@3@ Returns a numeric array of {{c|bool}} containing elements each of which is obtained by applying the indicated comparison operator to the corresponding value of {{tt|lhs}} and {{tt|rhsv}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | numeric arrays to compare}}
{{par | lhsv, rhsv | values to compare to each element within a numeric array}}
{{par end}}

===Return value===
A numeric array of {{c|bool}} containing comparison results of corresponding elements.

===Exceptions===
(none)

===Notes===
Each of the operators can only be instantiated if the following requirements are met:
:* The indicated operator can be applied to type {{tt|T}}
:* The result value can be unambiguously converted to {{tt|bool}}.

{{cpp/numeric/valarray/notes_ret}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;

int main()
{
    // zero all negatives in a valarray
    std::valarray&lt;int&gt; v = {1, -1, 0, -3, 10, -1, -2};
    std::cout &lt;&lt; &quot;Before: &quot;;
    for(auto n: v) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';
    v[v &lt; 0] = 0;
    std::cout &lt;&lt; &quot;After: &quot;;
    for(auto n: v) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';

    // convert the vector&lt;bool&gt; result of == to a single bool
    std::valarray&lt;int&gt; a = {1,2,3};
    std::valarray&lt;int&gt; b = {2,4,6};

    std::cout &lt;&lt; &quot;2*a == b is &quot; &lt;&lt; std::boolalpha
              &lt;&lt; (2*a == b).min() &lt;&lt; '\n';

}
|output=
Before: 1 -1 0 -3 10 -1 -2
After: 1 0 0 0 10 0 0
2*a == b is true
}}

[[de:cpp/numeric/valarray/operator cmp]]
[[es:cpp/numeric/valarray/operator cmp]]
[[fr:cpp/numeric/valarray/operator cmp]]
[[it:cpp/numeric/valarray/operator cmp]]
[[ja:cpp/numeric/valarray/operator cmp]]
[[pt:cpp/numeric/valarray/operator cmp]]
[[ru:cpp/numeric/valarray/operator cmp]]
[[zh:cpp/numeric/valarray/operator cmp]]</text>
      <sha1>8v79pd18yrzj6vkfps3hof0ojil0vq4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/operator=</title>
    <ns>0</ns>
    <id>9030</id>
    <revision>
      <id>91919</id>
      <parentid>80352</parentid>
      <timestamp>2017-03-31T20:01:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3797">{{cpp/numeric/valarray/title|operator{{=}}}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
valarray&lt;T&gt;&amp; operator=( const valarray&lt;T&gt;&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
valarray&lt;T&gt;&amp; operator=( valarray&lt;T&gt;&amp;&amp; other );
}}
{{dcl | num=3 | 1=
valarray&lt;T&gt;&amp; operator=( const T&amp; val );
}}
{{dcl | num=4 | 1=
valarray&lt;T&gt;&amp; operator=( const std::slice_array&lt;T&gt;&amp; other);
}}
{{dcl | num=5 | 1=
valarray&lt;T&gt;&amp; operator=( const std::gslice_array&lt;T&gt;&amp; other);
}}
{{dcl | num=6 | 1=
valarray&lt;T&gt;&amp; operator=( const std::mask_array&lt;T&gt;&amp; other );
}}
{{dcl | num=7 | 1=
valarray&lt;T&gt;&amp; operator=( const std::indirect_array&lt;T&gt;&amp; other );
}}
{{dcl | num=8 | since=c++11 | 1=
valarray&lt;T&gt;&amp; operator=( std::initializer_list&lt;T&gt; il );
}}
{{dcl end}}

Replaces the contents of the numeric array.

@1@ Copy assignment operator. Each element of {{tt|*this}} is assigned the value of the corresponding element of {{tt|other}}. If the length of {{tt|other}} does not equal the length of {{tt|*this}}, {{rev inl | until=c++11 | the behavior is undefined}}{{rev inl | since=c++11 | first resizes as if by {{c|resize(other.size())}}}}.
@2@ Move assignment operator. Replaces the contents of {{tt|*this}} with those of {{tt|other}}. The value of {{tt|other}} is unspecified after this operation. The complexity of this operation may be linear if T has non-trivial destructors, but is usually constant otherwise.
@3@ Replaces each value in {{tt|*this}} with a copy of {{tt|val}}.
@4-7@ Replaces the contents of {{tt|*this}} with the result of a generalized subscripting operation. The behavior is undefined if the length of the argument does not equal the length of {{tt|*this}} or if any value on the left depends on the value on the right (e.g {{c|v{{=}}v[v&gt;2]}}).
@8@ Assigns the contents of initializer list {{tt|il}}. Equivalent to {{c|1=*this = valarray(il)}}.

===Parameters===
{{par begin}}
{{par | other | another numeric array (or a mask) to assign}}
{{par | val | the value to initialize each element with}}
{{par | il | initializer list to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ (none)
@2@ {{unreviewed noexcept}}
@3-8@ (none)

===Example===
{{example
|code=
#include &lt;valarray&gt;
#include &lt;iostream&gt;

int main()
{
    std::valarray&lt;int&gt; v1(3);
    v1 = -1; // from a scalar 
    std::cout &lt;&lt; &quot;assigned from scalar: &quot;;
    for(int n: v1) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';

    v1 = {1, 2, 3, 4, 5, 6}; // from initializer list of different size
    std::cout &lt;&lt; &quot;assigned from initializer_list:      &quot;;
    for(int n: v1) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';

    std::valarray&lt;int&gt; v2(3);
    v2 = v1[std::slice(0,3,2)]; // from slice array
    std::cout &lt;&lt; &quot;every 2nd element starting at pos 0: &quot;;
    for(int n: v2) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';

    v2 = v1[v1 % 2 == 0]; // from mask array
    std::cout &lt;&lt; &quot;values that are even          :      &quot;;
    for(int n: v2) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';

    std::valarray&lt;std::size_t&gt; idx = {0,1,2,4}; // index array
    v2.resize(4); // sizes must match when assigning from gen subscript
    v2 = v1[idx]; // from indirect array
    std::cout &lt;&lt; &quot;values at positions 0,1,2,4:         &quot;;
    for(int n: v2) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';
}
|output=
assigned from scalar: -1 -1 -1 
assigned from initializer_list:      1 2 3 4 5 6 
every 2nd element starting at pos 0: 1 3 5 
values that are even          :      2 4 6 
values at positions 0,1,2,4:         1 2 3 5 
}}

[[de:cpp/numeric/valarray/operator=]]
[[es:cpp/numeric/valarray/operator=]]
[[fr:cpp/numeric/valarray/operator=]]
[[it:cpp/numeric/valarray/operator=]]
[[ja:cpp/numeric/valarray/operator=]]
[[pt:cpp/numeric/valarray/operator=]]
[[ru:cpp/numeric/valarray/operator=]]
[[zh:cpp/numeric/valarray/operator=]]</text>
      <sha1>pbxpietbdmjigh8hbsie19z39vj49fp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/pow</title>
    <ns>0</ns>
    <id>9036</id>
    <revision>
      <id>71099</id>
      <parentid>58795</parentid>
      <timestamp>2014-06-05T20:54:46Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1822">{{cpp/title|pow{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl header | valarray}}
{{dcl | num=1 |
template&lt; class T &gt; 
valarray&lt;T&gt; pow( const valarray&lt;T&gt;&amp; base, const valarray&lt;T&gt;&amp; exp );
}}
{{dcl | num=2 |
template&lt; class T &gt; 
valarray&lt;T&gt; pow( const valarray&lt;T&gt;&amp; base, const T&amp; vexp );
}}
{{dcl | num=3 |
template&lt; class T &gt; 
valarray&lt;T&gt; pow( const T&amp; vbase, const valarray&lt;T&gt;&amp; exp );
}}
{{dcl end}}

Raises a value to a power.

@1@ Computes the values of each element in the numeric array {{tt|base}} raised to the power specified by the corresponding element from the numeric array {{tt|exp}}.

The behavior is undefined if {{c|1=base.size() != exp.size()}}.
@2@ Computes the values of each element in the numeric array {{tt|base}} raised to the power {{tt|vexp}}.
@3@ Computes the values of {{tt|vbase}} raised to the power defined by the elements in the numeric array {{tt|exp}}.

===Parameters===
{{par begin}}
{{par | base | numeric array containing the values of the base}}
{{par | exp | numeric array containing the values of the exponent}}
{{par | vbase | a value defining the base}}
{{par | vexp | a value defining the exponent}}
{{par end}}

===Return value===
A numeric array containing the results of exponentiation.

===Notes===
{{cpp/numeric/valarray/notes unq|pow}}

{{cpp/numeric/valarray/notes ret|pow}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc sqrt}}
{{dsc inc | cpp/numeric/math/dsc pow}}
{{dsc inc | cpp/numeric/complex/dsc pow}}
{{dsc end}}

[[de:cpp/numeric/valarray/pow]]
[[es:cpp/numeric/valarray/pow]]
[[fr:cpp/numeric/valarray/pow]]
[[it:cpp/numeric/valarray/pow]]
[[ja:cpp/numeric/valarray/pow]]
[[pt:cpp/numeric/valarray/pow]]
[[ru:cpp/numeric/valarray/pow]]
[[zh:cpp/numeric/valarray/pow]]</text>
      <sha1>ac6exfgb8b77u9fpumn609l0kbhxtc4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/resize</title>
    <ns>0</ns>
    <id>4553</id>
    <revision>
      <id>66620</id>
      <parentid>66617</parentid>
      <timestamp>2013-12-15T18:37:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>that deserves an example to reiterate the difference from other resizes</comment>
      <text xml:space="preserve" bytes="1099">{{cpp/numeric/valarray/title|resize}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 1=
void resize( std::size_t count, T value = T() );
}}

Resizes the valarray to contain {{tt|count}} elements and assigns {{tt|value}} to each element.

This functions invalidates all pointers and references to elements in the array.

===Parameters===
{{par begin}}
{{par | count | new size of the container}}
{{par | value | the value to initialize the new elements with }}
{{par end}}

===Return value===
(none)

===Example===
{{example|
 | code=
#include &lt;valarray&gt;
#include &lt;iostream&gt;
int main()
{
    std::valarray&lt;int&gt; v{1,2,3};
    v.resize(10);
    for(int n: v) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
0 0 0 0 0 0 0 0 0 0 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc size}}
{{dsc end}}

[[de:cpp/numeric/valarray/resize]]
[[es:cpp/numeric/valarray/resize]]
[[fr:cpp/numeric/valarray/resize]]
[[it:cpp/numeric/valarray/resize]]
[[ja:cpp/numeric/valarray/resize]]
[[pt:cpp/numeric/valarray/resize]]
[[ru:cpp/numeric/valarray/resize]]
[[zh:cpp/numeric/valarray/resize]]</text>
      <sha1>9sdogpyafrcufnzx4o4fg2q30kt5gj8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/shift</title>
    <ns>0</ns>
    <id>4557</id>
    <revision>
      <id>58799</id>
      <parentid>51088</parentid>
      <timestamp>2013-06-01T06:21:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1004">{{cpp/numeric/valarray/title|shift}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
valarray&lt;T&gt; shift( int count ) const;
}}

Returns a new valarray of the same size with elements whose positions are shifted by {{tt|count}} elements. The new position of each element is {{math|i−count}} where {{math|i}} is the previous position. The value of shifted in elements is {{c|T()}}.

===Parameters===
{{par begin}}
{{par | count | number of positions to shift the elements by}}
{{par end}}

===Return value===
The resulting valarray with shifted elements.

===Notes===
{{cpp/numeric/valarray/notes_ret}}

===Example===
{{example|
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc cshift}}
{{dsc end}}

[[de:cpp/numeric/valarray/shift]]
[[es:cpp/numeric/valarray/shift]]
[[fr:cpp/numeric/valarray/shift]]
[[it:cpp/numeric/valarray/shift]]
[[ja:cpp/numeric/valarray/shift]]
[[pt:cpp/numeric/valarray/shift]]
[[ru:cpp/numeric/valarray/shift]]
[[zh:cpp/numeric/valarray/shift]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/sin</title>
    <ns>0</ns>
    <id>4322</id>
    <revision>
      <id>85787</id>
      <parentid>71087</parentid>
      <timestamp>2016-05-17T04:48:12Z</timestamp>
      <contributor>
        <ip>85.64.145.138</ip>
      </contributor>
      <comment>added missing return in possible impl.</comment>
      <text xml:space="preserve" bytes="1618">{{cpp/title|sin{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; sin( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes sine of the value of the element.

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing sine of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|sin}}

{{cpp/numeric/valarray/notes ret|sin}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; sin(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = sin(i);
    }
    return other;
}
}}

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;
#include &lt;cmath&gt;

const double pi = std::acos(-1);
int main()
{
    std::valarray&lt;double&gt; v1 = {0, 0.25, 0.5, 0.75, 1};
    std::valarray&lt;double&gt; v2 = std::sin(v1 * pi);

    for(double n : v2)
        std::cout &lt;&lt; std::fixed &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
|output=
0.000000 0.707107 1.000000 0.707107 0.000000 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc cos}}
{{dsc inc | cpp/numeric/valarray/dsc tan}}
{{dsc inc | cpp/numeric/valarray/dsc asin}}
{{dsc inc | cpp/numeric/math/dsc sin}}
{{dsc inc | cpp/numeric/complex/dsc sin}}
{{dsc end}}

[[de:cpp/numeric/valarray/sin]]
[[es:cpp/numeric/valarray/sin]]
[[fr:cpp/numeric/valarray/sin]]
[[it:cpp/numeric/valarray/sin]]
[[ja:cpp/numeric/valarray/sin]]
[[pt:cpp/numeric/valarray/sin]]
[[ru:cpp/numeric/valarray/sin]]
[[zh:cpp/numeric/valarray/sin]]</text>
      <sha1>cieqj749vi7fcd9a1hn88199v9zrdx8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/sinh</title>
    <ns>0</ns>
    <id>9038</id>
    <revision>
      <id>71094</id>
      <parentid>58800</parentid>
      <timestamp>2014-06-05T20:42:12Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1246">{{cpp/title|sinh{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; sinh( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes hyperbolic sine of the value of the element.

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing hyperbolic sine of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|sinh}}

{{cpp/numeric/valarray/notes ret|sinh}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; sinh(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = sinh(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc cosh}}
{{dsc inc | cpp/numeric/valarray/dsc tanh}}
{{dsc inc | cpp/numeric/math/dsc sinh}}
{{dsc inc | cpp/numeric/complex/dsc sinh}}
{{dsc end}}

[[de:cpp/numeric/valarray/sinh]]
[[es:cpp/numeric/valarray/sinh]]
[[fr:cpp/numeric/valarray/sinh]]
[[it:cpp/numeric/valarray/sinh]]
[[ja:cpp/numeric/valarray/sinh]]
[[pt:cpp/numeric/valarray/sinh]]
[[ru:cpp/numeric/valarray/sinh]]
[[zh:cpp/numeric/valarray/sinh]]</text>
      <sha1>cevllgiustfp7vxrc4m1cgylkxrkpcx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/size</title>
    <ns>0</ns>
    <id>4552</id>
    <revision>
      <id>84534</id>
      <parentid>58803</parentid>
      <timestamp>2016-03-19T02:22:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+example</comment>
      <text xml:space="preserve" bytes="827">{{cpp/numeric/valarray/title|size}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
std::size_t size() const;
}}

Returns the number of elements in the valarray.

===Parameters===
(none)

===Return value===
Number of elements in the valarray.

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;

int main()
{
    std::valarray&lt;double&gt; a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::cout &lt;&lt; &quot;Average: &quot; &lt;&lt; a.sum()/a.size() &lt;&lt; '\n';
}
 | output=
Average: 5.5
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc resize}}
{{dsc end}}

[[de:cpp/numeric/valarray/size]]
[[es:cpp/numeric/valarray/size]]
[[fr:cpp/numeric/valarray/size]]
[[it:cpp/numeric/valarray/size]]
[[ja:cpp/numeric/valarray/size]]
[[pt:cpp/numeric/valarray/size]]
[[ru:cpp/numeric/valarray/size]]
[[zh:cpp/numeric/valarray/size]]</text>
      <sha1>t8zm9ze1e9ezfbv29s1g85mve3depyj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/slice</title>
    <ns>0</ns>
    <id>5019</id>
    <revision>
      <id>61589</id>
      <parentid>61588</parentid>
      <timestamp>2013-06-06T06:19:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>update navbar</comment>
      <text xml:space="preserve" bytes="3337">{{cpp/title|slice}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray |
class slice;
}}

{{tt|std::slice}} is the selector class that identifies a subset of {{lc|std::valarray}} similar to [[enwiki:BLAS|BLAS]] slice. An object of type {{tt|std::slice}} holds three values: the starting index, the stride, and the total number of values in the subset. Objects of type {{tt|std::slice}} can be used as indexes with valarray's {{tt|operator[]}}.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/numeric/valarray/slice | inlinemem=true | constructs a slice}}
{{dsc mem fun | cpp/numeric/valarray/slice | title=start&lt;br/&gt;size&lt;br/&gt;stride | inlinemem=true | returns the parameters of the slice}}
{{dsc end}}

{{member | {{small|std::slice::}}slice |
{{dcl begin}}
{{dcl | 
slice()
}}
{{dcl |
slice( std::size_t start, std::size_t size, std::size_t stride );
}}
{{dcl |
slice( const slice&amp; other );
}}
{{dcl end}}

Constructs a new slice.

@1@ Default constructor. Equivalent to {{c|slice(0, 0, 0)}}. This constructor exists only to allow construction of arrays of slices.

@2@ Constructs a new slice with parameters {{tt|start}}, {{tt|size}}, {{tt|stride}}. This slice will refer to {{tt|size}} number of elements, each with the position:

:@@ {{math|start + 0*stride}}
:@@ {{math|start + 1*stride}}
:@@ {{math|...}}
:@@ {{math|start + (size-1)*stride}}

@3@ Constructs a copy of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | start | the position of the first element}}
{{par | size | the number of elements in the slice}}
{{par | stride | the number of positions between successive elements in the slice}}
{{par | other | another slice to copy}}
{{par end}}
}}


{{member | {{small|std::slice::}}start, size, stride |
{{dcl begin}}
{{dcl | num=1 |
std::size_t start() const;
}}
{{dcl | num=2 |
std::size_t size() const;
}}
{{dcl | num=3 |
std::size_t stride() const;
}}
{{dcl end}}

Returns the parameters passed to the slice on construction - start, size and stride respectively.

===Parameters===
(none)

===Return value===
The parameters of the slice -- start, size and stride respectively.

===Complexity===
Constant.
}}

===Example===
{{example
 | Barebones valarray-backed Matrix class with a [[enwiki:Trace (linear algebra)|trace]] calculating function.
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;
class Matrix {
    std::valarray&lt;int&gt; data;
    int dim;
 public:
    Matrix(int r, int c) : data(r*c), dim(c) {}
    int&amp; operator()(int r, int c) {return data[r*dim + c];}
    int trace() const {
        return data[std::slice(0, dim, dim+1)].sum();
    }
};
int main()
{
    Matrix m(3,3);
    int n = 0;
    for(int r=0; r&lt;3; ++r)
       for(int c=0; c&lt;3; ++c)
           m(r, c) = ++n;
    std::cout &lt;&lt; &quot;Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is &quot; &lt;&lt; m.trace() &lt;&lt; '\n';
}
 | output=
Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is 15
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc operator_at}}
{{dsc inc | cpp/numeric/valarray/dsc gslice}}
{{dsc inc | cpp/numeric/valarray/dsc slice_array}}
{{dsc end}}

[[de:cpp/numeric/valarray/slice]]
[[es:cpp/numeric/valarray/slice]]
[[fr:cpp/numeric/valarray/slice]]
[[it:cpp/numeric/valarray/slice]]
[[ja:cpp/numeric/valarray/slice]]
[[pt:cpp/numeric/valarray/slice]]
[[ru:cpp/numeric/valarray/slice]]
[[zh:cpp/numeric/valarray/slice]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/slice array</title>
    <ns>0</ns>
    <id>12704</id>
    <revision>
      <id>61529</id>
      <parentid>61522</parentid>
      <timestamp>2013-06-06T03:12:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>separate navbar</comment>
      <text xml:space="preserve" bytes="958">{{cpp/title|slice_array}}
{{cpp/numeric/valarray/slice_array/navbar}}
{{dcl begin}}
{{dcl header | valarray}}
{{dcl | 
template&lt; class T &gt; class slice_array;
}}
{{dcl end}}

{{tt|std::slice_array}} is a helper template used by {{c|std::slice}} subscript operator. It has reference semantics to a subset of the array specified by the {{tt|std::slice}} object.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/array/dsc constructor | slice_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc destructor | slice_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator{{=}} | slice_array}}
{{dsc inc | cpp/numeric/valarray/array/dsc operator_arith | slice_array}}
{{dsc end}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc gslice_array}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/slice array/operator arith</title>
    <ns>0</ns>
    <id>12736</id>
    <revision>
      <id>61558</id>
      <timestamp>2013-06-06T03:22:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="70">{{include page|cpp/numeric/valarray/array/operator_arith|slice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/slice array/operator=</title>
    <ns>0</ns>
    <id>12730</id>
    <revision>
      <id>61552</id>
      <timestamp>2013-06-06T03:21:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="69">{{include page|cpp/numeric/valarray/array/operator{{=}}|slice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/slice array/slice array</title>
    <ns>0</ns>
    <id>12728</id>
    <revision>
      <id>61550</id>
      <timestamp>2013-06-06T03:21:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="67">{{include page|cpp/numeric/valarray/array/constructor|slice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/slice array/~slice array</title>
    <ns>0</ns>
    <id>12729</id>
    <revision>
      <id>61551</id>
      <timestamp>2013-06-06T03:21:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="66">{{include page|cpp/numeric/valarray/array/destructor|slice_array}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/sqrt</title>
    <ns>0</ns>
    <id>4321</id>
    <revision>
      <id>71101</id>
      <parentid>67448</parentid>
      <timestamp>2014-06-05T20:57:18Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="2284">{{cpp/title|sqrt{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; sqrt( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes the square root of the value of the element.

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing square roots of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|sqrt}}

{{cpp/numeric/valarray/notes ret|sqrt}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; sqrt(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = sqrt(i);
    }
    return other;
}
}}

===Example===
{{example
|Finds real roots of multiple quadratic equations.
|code=
#include &lt;valarray&gt;
#include &lt;iostream&gt;

int main()
{
    std::valarray&lt;double&gt; a(1, 8);
    std::valarray&lt;double&gt; b{1, 2, 3, 4, 5, 6, 7, 8};
    std::valarray&lt;double&gt; c = -b;
    // literals must also be of type T (double in this case)
    std::valarray&lt;double&gt; d = std::sqrt((b * b - 4.0 * a * c));
    std::valarray&lt;double&gt; x1 = (-b - d) / (2.0 * a);
    std::valarray&lt;double&gt; x2 = (-b + d) / (2.0 * a);
    std::cout &lt;&lt; &quot;quadratic equation    root 1,  root 2&quot; &lt;&lt; &quot;\n&quot;;
    for (size_t i = 0; i &lt; a.size(); ++i) {
        std::cout &lt;&lt; a[i] &lt;&lt; &quot;x\u00B2 + &quot; &lt;&lt; b[i] &lt;&lt; &quot;x + &quot; &lt;&lt; c[i] &lt;&lt; &quot; = 0   &quot;;
        std::cout &lt;&lt; x1[i] &lt;&lt; &quot;, &quot; &lt;&lt; x2[i] &lt;&lt; &quot;\n&quot;;
    }
}
|output=
quadratic equation    root 1,  root 2
1x² + 1x + -1 = 0   -1.61803, 0.618034
1x² + 2x + -2 = 0   -2.73205, 0.732051
1x² + 3x + -3 = 0   -3.79129, 0.791288
1x² + 4x + -4 = 0   -4.82843, 0.828427
1x² + 5x + -5 = 0   -5.8541, 0.854102
1x² + 6x + -6 = 0   -6.87298, 0.872983
1x² + 7x + -7 = 0   -7.88748, 0.887482
1x² + 8x + -8 = 0   -8.89898, 0.898979
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc pow}}
{{dsc inc | cpp/numeric/math/dsc sqrt}}
{{dsc inc | cpp/numeric/complex/dsc sqrt}}
{{dsc end}}

[[de:cpp/numeric/valarray/sqrt]]
[[es:cpp/numeric/valarray/sqrt]]
[[fr:cpp/numeric/valarray/sqrt]]
[[it:cpp/numeric/valarray/sqrt]]
[[ja:cpp/numeric/valarray/sqrt]]
[[pt:cpp/numeric/valarray/sqrt]]
[[ru:cpp/numeric/valarray/sqrt]]
[[zh:cpp/numeric/valarray/sqrt]]</text>
      <sha1>s6vjd2uyihpoddkyje3nf1hfgt0jg2i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/sum</title>
    <ns>0</ns>
    <id>4554</id>
    <revision>
      <id>58807</id>
      <parentid>51094</parentid>
      <timestamp>2013-06-01T06:21:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1018">{{cpp/numeric/valarray/title|sum}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
T sum() const;
}}

Computes the sum of the elements. 

The function can be used only if {{c|operator+{{=}}}} is defined for type {{tt|T}}. If the {{tt|std::valarray}} is empty, the behavior is undefined. The order in which the elements are processed by this function is unspecified.

===Parameters===
(none)

===Return value===
The sum of the elements.

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;valarray&gt;

int main()
{
    std::valarray&lt;int&gt; a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::cout &lt;&lt; a.sum() &lt;&lt; '\n';
}
 | output=
55
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc apply}}
{{dsc inc | cpp/algorithm/dsc accumulate}}
{{dsc end}}

[[de:cpp/numeric/valarray/sum]]
[[es:cpp/numeric/valarray/sum]]
[[fr:cpp/numeric/valarray/sum]]
[[it:cpp/numeric/valarray/sum]]
[[ja:cpp/numeric/valarray/sum]]
[[pt:cpp/numeric/valarray/sum]]
[[ru:cpp/numeric/valarray/sum]]
[[zh:cpp/numeric/valarray/sum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/swap</title>
    <ns>0</ns>
    <id>4550</id>
    <revision>
      <id>91448</id>
      <parentid>64843</parentid>
      <timestamp>2017-03-31T19:44:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="678">{{cpp/numeric/valarray/title|swap}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
void swap( valarray&amp; other );
}}

Swaps the contents with those of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another valarray to swap the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/numeric/valarray/swap]]
[[es:cpp/numeric/valarray/swap]]
[[fr:cpp/numeric/valarray/swap]]
[[it:cpp/numeric/valarray/swap]]
[[ja:cpp/numeric/valarray/swap]]
[[pt:cpp/numeric/valarray/swap]]
[[ru:cpp/numeric/valarray/swap]]
[[zh:cpp/numeric/valarray/swap]]</text>
      <sha1>7264dh5b9tsbw5x3od5podtva1ke4vn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/swap2</title>
    <ns>0</ns>
    <id>5487</id>
    <revision>
      <id>58808</id>
      <parentid>51096</parentid>
      <timestamp>2013-06-01T06:21:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="847">{{cpp/title | swap&lt;small&gt;(std::valarray)&lt;/small&gt;}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class T &gt;
void swap( valarray&lt;T&gt; &amp;lhs, valarray&lt;T&gt; &amp;rhs );
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{lc|std::valarray}}. Swaps the contents of {{tt|lhs}} and {{tt|rhs}}. Calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | valarrays whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc swap}}
{{dsc end}}

[[de:cpp/numeric/valarray/swap2]]
[[es:cpp/numeric/valarray/swap2]]
[[fr:cpp/numeric/valarray/swap2]]
[[it:cpp/numeric/valarray/swap2]]
[[ja:cpp/numeric/valarray/swap2]]
[[pt:cpp/numeric/valarray/swap2]]
[[ru:cpp/numeric/valarray/swap2]]
[[zh:cpp/numeric/valarray/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/tan</title>
    <ns>0</ns>
    <id>4324</id>
    <revision>
      <id>71089</id>
      <parentid>51097</parentid>
      <timestamp>2014-06-05T20:26:06Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1258">{{cpp/title|tan{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; tan( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes tangent of the value of the element. 

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing tangents of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|tan}}

{{cpp/numeric/valarray/notes ret|tan}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; tan(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = tan(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc sin}}
{{dsc inc | cpp/numeric/valarray/dsc cos}}
{{dsc inc | cpp/numeric/valarray/dsc atan}}
{{dsc inc | cpp/numeric/math/dsc tan}}
{{dsc inc | cpp/numeric/complex/dsc tan}}
{{dsc end}}

[[de:cpp/numeric/valarray/tan]]
[[es:cpp/numeric/valarray/tan]]
[[fr:cpp/numeric/valarray/tan]]
[[it:cpp/numeric/valarray/tan]]
[[ja:cpp/numeric/valarray/tan]]
[[pt:cpp/numeric/valarray/tan]]
[[ru:cpp/numeric/valarray/tan]]
[[zh:cpp/numeric/valarray/tan]]</text>
      <sha1>1txo6budh0a7bl5rf316523rbvq24u1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/tanh</title>
    <ns>0</ns>
    <id>9040</id>
    <revision>
      <id>71096</id>
      <parentid>58809</parentid>
      <timestamp>2014-06-05T20:47:36Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>+ links</comment>
      <text xml:space="preserve" bytes="1253">{{cpp/title|tanh{{small|(std::valarray)}}}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray | 1=
template&lt; class T &gt;
valarray&lt;T&gt; tanh( const valarray&lt;T&gt;&amp; va );
}}

For each element in {{tt|va}} computes hyperbolic tangent of the value of the element. 

===Parameters===
{{par begin}}
{{par | va | value array to apply the operation to}}
{{par end}}

===Return value===
Value array containing hyperbolic tangent of the values in {{tt|va}}.

===Notes===
{{cpp/numeric/valarray/notes unq|tanh}}

{{cpp/numeric/valarray/notes ret|tanh}}

===Possible implementation===
{{eq fun | 1=
template&lt;class T&gt;
valarray&lt;T&gt; tanh(const valarray&lt;T&gt;&amp; va)
{
    valarray&lt;T&gt; other = va;
    for (T &amp;i : other) {
        i = tanh(i);
    }
}
}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/valarray/dsc sinh}}
{{dsc inc | cpp/numeric/valarray/dsc cosh}}
{{dsc inc | cpp/numeric/math/dsc tanh}}
{{dsc inc | cpp/numeric/complex/dsc tanh}}
{{dsc end}}

[[de:cpp/numeric/valarray/tanh]]
[[es:cpp/numeric/valarray/tanh]]
[[fr:cpp/numeric/valarray/tanh]]
[[it:cpp/numeric/valarray/tanh]]
[[ja:cpp/numeric/valarray/tanh]]
[[pt:cpp/numeric/valarray/tanh]]
[[ru:cpp/numeric/valarray/tanh]]
[[zh:cpp/numeric/valarray/tanh]]</text>
      <sha1>186rhktw7y9hspfgm32dqr44s9aqze9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/valarray</title>
    <ns>0</ns>
    <id>9028</id>
    <revision>
      <id>91915</id>
      <parentid>72808</parentid>
      <timestamp>2017-03-31T20:01:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2445">{{cpp/numeric/valarray/title|valarray}}
{{cpp/numeric/valarray/navbar}}
{{dcl begin}}
{{dcl | num=1 | 
valarray();
}}
{{dcl | num=2 | 
explicit valarray( std::size_t count );
}}
{{dcl | num=3 | 
valarray( const T&amp; val, std::size_t count );
}}
{{dcl | num=4 | 
valarray( const T* vals, std::size_t count );
}}
{{dcl | num=5 | 
valarray( const valarray&amp; other );
}}
{{dcl | num=6 | since=c++11 | 
valarray( valarray&amp;&amp; other );
}}
{{dcl | num=7 | 
valarray( const std::slice_array&lt;T&gt;&amp; );
}}
{{dcl | num=8 | 
valarray( const std::gslice_array&lt;T&gt;&amp; );
}}
{{dcl | num=9 | 
valarray( const std::mask_array&lt;T&gt;&amp; );
}}
{{dcl | num=10 | 
valarray( const std::indirect_array&lt;T&gt;&amp; );
}}
{{dcl | num=11 | since=c++11 | 
valarray( std::initializer_list&lt;T&gt; il );
}}
{{dcl end}}

Constructs new numeric array from various sources.
@1@ Default constructor. Constructs an empty numeric array.
@2@ Constructs a numeric array with {{tt|count}} copies of value-initialized elements.
@3@ Constructs a numeric array with {{tt|count}} copies of {{tt|val}}.
@4@ Constructs a numeric array with copies of {{tt|count}} values from an array pointed to by {{tt|vals}}. If this array contains less than {{tt|count}} values, the behavior is undefined.
@5@ Copy constructor. Constructs the numeric array with the copy of the contents of {{tt|other}}.
@6@ Move constructor. Constructs the container with the contents of {{tt|other}} using move semantics.
@7-10@ [[cpp/language/converting constructor|Converting constructor]]. Convert the corresponding data structure to a {{tt|valarray}}.
@11@ Constructs the numeric array with the contents of the initializer list {{tt|il}}. 

===Parameters===
{{par begin}}
{{par | count | the number of elements to construct}}
{{par | val | the value to initialize the elements with}}
{{par | vals | pointer to a C array to use as source to initialize the contents}}
{{par | other | another numeric array to use as source to initialize the contents}}
{{todo| name the parameters for overloads 7-10}}
{{par | il | initializer list to initialize the elements with}}
{{par end}}

===Exceptions===
@1-5@ (none)
@6@ {{unreviewed noexcept}}
@7-11@ (none)

[[de:cpp/numeric/valarray/valarray]]
[[es:cpp/numeric/valarray/valarray]]
[[fr:cpp/numeric/valarray/valarray]]
[[it:cpp/numeric/valarray/valarray]]
[[ja:cpp/numeric/valarray/valarray]]
[[pt:cpp/numeric/valarray/valarray]]
[[ru:cpp/numeric/valarray/valarray]]
[[zh:cpp/numeric/valarray/valarray]]</text>
      <sha1>k8ngwz5jairp2kgyqdjtwcvwk7blt1u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/numeric/valarray/~valarray</title>
    <ns>0</ns>
    <id>9029</id>
    <revision>
      <id>41935</id>
      <parentid>37938</parentid>
      <timestamp>2012-11-02T21:11:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="572">{{cpp/numeric/valarray/title|~valarray}}
{{cpp/numeric/valarray/navbar}}
{{ddcl | 
~valarray()
}}

Destructs the numeric array. The destructors of the elements are called and the used storage is deallocated. 

===Complexity===
Linear in the size of the numeric array.

[[de:cpp/numeric/valarray/~valarray]]
[[es:cpp/numeric/valarray/~valarray]]
[[fr:cpp/numeric/valarray/~valarray]]
[[it:cpp/numeric/valarray/~valarray]]
[[ja:cpp/numeric/valarray/~valarray]]
[[pt:cpp/numeric/valarray/~valarray]]
[[ru:cpp/numeric/valarray/~valarray]]
[[zh:cpp/numeric/valarray/~valarray]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/preprocessor</title>
    <ns>0</ns>
    <id>1379</id>
    <revision>
      <id>81491</id>
      <parentid>74939</parentid>
      <timestamp>2015-10-27T14:02:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>__has_include</comment>
      <text xml:space="preserve" bytes="2611">{{title|Preprocessor}}
{{cpp/preprocessor/navbar}}
The preprocessor is executed at [[cpp/language/translation_phases|translation phase 4]], before the compilation. The result of preprocessing is a single file which is then passed to the actual compiler.

===Directives===

The preprocessing directives control the behavior of the preprocessor. Each directive occupies one line and has the following format:

* {{tt|#}} character
* preprocessing instruction (one of {{tt|define}}, {{tt|undef}}, {{tt|include}}, {{tt|if}}, {{tt|ifdef}}, {{tt|ifndef}}, {{tt|else}}, {{tt|elif}}, {{tt|endif}}, {{tt|line}}, {{tt|error}}, {{tt|pragma}}) &lt;ref&gt;These are the directives defined by the standard. The standard does not define behavior for other directives: they might be ignored, have some useful meaning, or  cause a compile-time error. Even if otherwise ignored, they are removed from the source code when the preprocessor is done. A common non-standard extension is the directive {{tt|#warning}} which emits a user-defined message during compilation.&lt;/ref&gt;
* arguments (depends on the instruction)
* line break

The null directive ({{tt|#}} followed by a line break) is allowed and has no effect.

===Capabilities===

The preprocessor has the source file translation capabilities:

* '''{{rl | conditional | conditionally}}''' compile of parts of source file (controlled by directive {{tt|#if}}, {{tt|#ifdef}}, {{tt|#ifndef}}, {{tt|#else}}, {{tt|#elif}} and {{tt|#endif}}).
* '''{{rl | replace}}''' text macros while possibly concatenating or quoting identifiers (controlled by directives {{tt|#define}} and {{tt|#undef}}, and operators {{tt|#}} and {{tt|##}})
* '''{{rl|include}}''' other files (controlled by directive {{tt|#include}} {{rev inl|since=c++17|and checked with {{tt|__has_include}}}})
* cause an '''{{rl|error}}''' (controlled by directive {{tt|#error}})

The following aspects of the preprocessor can be controlled:
* '''{{rl|impl | implementation defined}}''' behavior (controlled by directive {{tt|#pragma}}{{rev inl|since=c++11| and operator {{tt|_Pragma}}}})
* '''{{rl|line | file name and line information}}''' available to the preprocessor (controlled by directives {{tt|#line}})

===Footnotes===
&lt;references/&gt;

===See also===
{{dsc begin}}
{{dsc see c | c/preprocessor}}
{{dsc end}}

[[ar:cpp/preprocessor]]
[[cs:cpp/preprocessor]]
[[de:cpp/preprocessor]]
[[es:cpp/preprocessor]]
[[fr:cpp/preprocessor]]
[[it:cpp/preprocessor]]
[[ja:cpp/preprocessor]]
[[ko:cpp/preprocessor]]
[[pl:cpp/preprocessor]]
[[pt:cpp/preprocessor]]
[[ru:cpp/preprocessor]]
[[tr:cpp/preprocessor]]
[[zh:cpp/preprocessor]]</text>
      <sha1>cygxonnzsm0bpn1y48145ip1g2m5o86</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/preprocessor/conditional</title>
    <ns>0</ns>
    <id>1380</id>
    <revision>
      <id>91937</id>
      <parentid>91887</parentid>
      <timestamp>2017-03-31T20:13:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;(since|until)=(c\+\+1[147])[[:space:]]*{{mark unreviewed dr\|(CWG|LWG)\|([0-9]*)}}\|&quot; to &quot;$1=$2|{{mark unreviewed dr|$3|$4}}&quot;</comment>
      <text xml:space="preserve" bytes="4629">{{title|Conditional inclusion}}
{{cpp/preprocessor/navbar}}
The preprocessor supports conditional compilation of parts of source file. This behavior is controlled by {{tt|#if}}, {{tt|#else}}, {{tt|#elif}}, {{tt|#ifdef}}, {{tt|#ifndef}} and {{tt|#endif}} directives.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|#if}} {{spar|expression}} }}
{{sdsc | {{ttb|#ifdef}} {{spar|expression}} }}
{{sdsc | {{ttb|#ifndef}} {{spar|expression}} }}
{{sdsc | {{ttb|#elif}} {{spar|expression}} }}
{{sdsc | {{ttb|#else}} }}
{{sdsc | {{ttb|#endif}} }}
{{sdsc end}}

===Explanation===

The conditional preprocessing block starts with {{tt|#if}}, {{tt|#ifdef}} or {{tt|#ifndef}} directive, then optionally includes any number of {{tt|#elif}} directives, then optionally includes at most one {{tt|#else}} directive and is terminated with {{tt|#endif}} directive. Any inner conditional preprocessing blocks are processed separately.

Each of {{tt|#if}}, {{tt|#elif}}, {{tt|#else}}, {{tt|#ifdef}} and {{tt|#ifndef}} directives control code block until first {{tt|#elif}}, {{tt|#else}}, {{tt|#endif}} directive not belonging to any inner conditional preprocessing blocks. 

{{tt|#if}}, {{tt|#ifdef}} and {{tt|#ifndef}}  directives test the specified condition (see below) and if it evaluates to true, compiles the controlled code block. In that case subsequent {{tt|#else}} and {{tt|#elif}} directives are ignored. Otherwise, if the specified condition evaluates false, the controlled code block is skipped and the subsequent {{tt|#else}} or {{tt|#elif}} directive (if any) is processed. In the former case, the code block controlled by the {{tt|#else}} directive is unconditionally compiled. In the latter case, the {{tt|#elif}} directive acts as if it was {{tt|#if}} directive: checks for condition, compiles or skips the controlled code block based on the result, and in the latter case processes subsequent {{tt|#elif}} and {{tt|#else}} directives. The conditional preprocessing block is terminated by {{tt|#endif}} directive.

===Condition evaluation===

===={{tt|#if, #elif}}====
The {{spar|expression}} is a constant expression. 

If the expression contains unary operators in form {{ttb|defined}}&amp;nbsp;{{spar|identifier}} or  {{ttb|defined (}}{{spar|identifier}}{{ttb|)}}, it is evaluated first. The result is {{c|1}} if the {{spar|identifier}} was [[cpp/preprocessor/replace|defined as a macro name]]{{rev inl|since=c++17| or the {{spar|identifier}} is {{ltt|cpp/preprocessor/include|__has_include}}}}, otherwise the result is {{c|0}}.

After macro expansion and evaluation of the {{tt|defined}} operator, any identifier which is not a [[cpp/language/bool_literal|boolean literal]], nor currently defined as a macro name, are replaced with the number {{c|0}}. 

If the {{spar|expression}} evaluates to nonzero value, the controlled code block is included and skipped otherwise.

{{rev begin}}
{{rev|until=c++14|{{mark unreviewed dr|CWG|1955}}
Note: {{tt|#if cond1}} ... {{tt|#elif cond2}} is different from {{tt|#if cond1}} ... {{tt|#else}} followed by {{tt|#if cond3}} because if {{tt|cond1}} is true, the second {{tt|#if}} is skipped and {{tt|cond3}} does not need to be well-formed, while #elif's {{tt|cond2}} must be a valid expression.
}}
{{rev end}}

===={{tt|#ifdef, #ifndef}}====

Checks if the identifier was [[cpp/preprocessor/replace|defined as a macro name]]. 

{{tt|#ifdef}}&amp;nbsp;{{spar|identifier}} is essentially equivalent to {{tt|#if defined(}}&amp;nbsp;{{spar|identifier}}{{tt|)}}.

{{tt|#ifndef}}&amp;nbsp;{{spar|identifier}} is essentially equivalent to {{tt|#if !defined(}}&amp;nbsp;{{spar|identifier}}{{tt|)}}.

===Example===
{{example|
|code=
#define ABCD 2
#include &lt;iostream&gt;

int main()
{

#ifdef ABCD
    std::cout &lt;&lt; &quot;1: yes\n&quot;;
#else
    std::cout &lt;&lt; &quot;1: no\n&quot;;
#endif

#ifndef ABCD
    std::cout &lt;&lt; &quot;2: no1\n&quot;;
#elif ABCD == 2
    std::cout &lt;&lt; &quot;2: yes\n&quot;;
#else
    std::cout &lt;&lt; &quot;2: no2\n&quot;;
#endif

#if !defined(DCBA) &amp;&amp; (ABCD &lt; 2*4-3)
    std::cout &lt;&lt; &quot;3: yes\n&quot;;
#endif
}
|output=
1: yes
2: yes
3: yes
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=1955 |std=C++14|before=failed #elif's expression was required to be valid|after=failed elif is skipped}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc see c | c/preprocessor/conditional | Conditional inclusion}}
{{dsc end}}

[[ar:cpp/preprocessor/conditional]]
[[de:cpp/preprocessor/conditional]]
[[es:cpp/preprocessor/conditional]]
[[fr:cpp/preprocessor/conditional]]
[[it:cpp/preprocessor/conditional]]
[[ja:cpp/preprocessor/conditional]]
[[pt:cpp/preprocessor/conditional]]
[[ru:cpp/preprocessor/conditional]]
[[zh:cpp/preprocessor/conditional]]</text>
      <sha1>6ogxq6sq3omekn07y2ommcto2zviwfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/preprocessor/error</title>
    <ns>0</ns>
    <id>1381</id>
    <revision>
      <id>90551</id>
      <parentid>78346</parentid>
      <timestamp>2017-03-04T06:16:20Z</timestamp>
      <contributor>
        <ip>113.88.81.74</ip>
      </contributor>
      <text xml:space="preserve" bytes="917">{{title|Error directive}}
{{cpp/preprocessor/navbar}}
Shows the given error message and renders the program ill-formed.

===Syntax===

{{sdsc begin}}
{{sdsc | {{ttb|#error}} {{spar|error_message}} }}
{{sdsc end}}

===Explanation===

After encountering the {{tt|#error}} directive, an implementation displays the diagnostic message {{spar|error_message}} and renders the program ill-formed (the compilation stops). 

''error_message'' can consist of several words not necessarily in quotes.

===See also===
{{dsc begin}}
{{dsc see c | c/preprocessor/error | Error directive}}
{{dsc end}}

[[ar:cpp/preprocessor/error]]
[[cs:cpp/preprocessor/error]]
[[de:cpp/preprocessor/error]]
[[es:cpp/preprocessor/error]]
[[fr:cpp/preprocessor/error]]
[[it:cpp/preprocessor/error]]
[[ja:cpp/preprocessor/error]]
[[pl:cpp/preprocessor/error]]
[[pt:cpp/preprocessor/error]]
[[ru:cpp/preprocessor/error]]
[[zh:cpp/preprocessor/error]]</text>
      <sha1>10u4vl2rkxk4aa8qn4muk848tpgsxgp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/preprocessor/impl</title>
    <ns>0</ns>
    <id>1382</id>
    <revision>
      <id>91982</id>
      <parentid>87610</parentid>
      <timestamp>2017-04-01T05:37:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="4644">{{title|Implementation defined behavior control}}
{{cpp/preprocessor/navbar}}
Implementation defined behavior is controlled by {{tt|#pragma}} directive.

===Syntax===

{{sdsc begin}}
{{sdsc |num=1| {{ttb|#pragma}} {{spar|pragma_params}} }}
{{sdsc |num=2|notes={{mark since c++11}}| {{ttb|_Pragma}} {{ttb|(}} {{spar|string-literal}} {{ttb|)}} }}
{{sdsc end}}
@1@ Behaves in implementation-defined manner
@2@ Removes the {{tt|L}} prefix (if any){{mark unreviewed dr|CWG}}&lt;!-- see CWG 897 --&gt;, the outer quotes, and leading/trailing whitespace from {{spar|string-literal}}, replaces each {{tt|\&quot;}} with {{tt|&quot;}} and each {{tt|\\}} with {{tt|\}}, then tokenizes the result (as in [[cpp/language/translation_phases|translation stage 3]]), and then uses the result as if the input to {{tt|#pragma}} in {{v|1}}

===Explanation===

Pragma directive controls implementation-specific behavior of the compiler, such as disabling compiler warnings or changing alignment requirements. Any pragma that is not recognized is ignored.

===Non-standard pragmas===

The ISO C++ language standard does not require the compilers to support any pragmas. However, several non-standard pragmas are supported by multiple implementations:

====#pragma STDC====
ISO C language standard requires that C compilers support the following three pragmas, and some C++ compiler vendors support them, to varying degrees, in their C++ frontends:

{{sdsc begin}}
{{sdsc | num = 1 | {{ttb|#pragma STDC FENV_ACCESS }}{{spar|arg}}}}
{{sdsc | num = 2 | {{ttb|#pragma STDC FP_CONTRACT }}{{spar|arg}}}}
{{sdsc | num = 3 | {{ttb|#pragma STDC CX_LIMITED_RANGE }}{{spar|arg}}}}
{{sdsc end}}

where {{spar|arg}} is either {{ttb|ON}} or {{ttb|OFF}} or {{ttb|DEFAULT}}. 

@1@ If set to {{ttb|ON}}, informs the compiler that the program will access or modify [[cpp/numeric/fenv|floating-point environment]], which means that optimizations that could subvert flag tests and mode changes (e.g., global common subexpression elimination, code motion, and constant folding) are prohibited. The default value is implementation-defined, usually {{ttb|OFF}}.
@2@ Allows ''contracting'' of floating-point expressions, that is optimizations that omit rounding errors and floating-point exceptions that would be observed if the expression was evaluated exactly as written. For example, allows the implementation of {{c|(x*y) + z}} with a single fused multiply-add CPU instruction. The default value is implementation-defined, usually {{ttb|ON}}.
@3@ Informs the compiler that multiplication, division, and absolute value of complex numbers may use simplified mathematical formulas {{math|(x+iy)×(u+iv) {{=}} (xu-yv)+i(yu+xv)}}, {{math|(x+iy)/(u+iv) {{=}} [(xu+yv)+i(yu-xv)]/(u{{su|p=2}}+v{{su|p=2}})}}, and {{math|{{!}}x+iy{{!}} {{=}} {{mrad|x{{su|p=2}}+y{{su|p=2}}}}}}, despite the possibility of intermediate overflow. In other words, the programmer guarantees that the range of the values that will be passed to those function is limited. The default value is {{ttb|OFF}}

The behavior of the program is undefined if any of the three pragmas above appear in any context other than outside all external declarations or preceding all explicit declarations and statements inside a compound statement.

====#pragma once====
{{cpp/preprocessor/pragma_once}}

====#pragma pack====
{{todo}}

===See also===
{{dsc begin}}
{{dsc see c | c/preprocessor/impl | Implementation defined behavior control}}
{{dsc end}}

===External links===

* [https://msdn.microsoft.com/en-us/library/d9x1s805.aspx C++ pragmas in Visual Studio 2015]
* [https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Pragmas.html#Pragmas Pragmas] accepted by GCC 4.9.2
* [http://www-01.ibm.com/support/knowledgecenter/SSGH2K_13.1.0/com.ibm.xlc131.aix.doc/compiler_ref/pragma_descriptions.html?lang=en-us Individual pragma descriptions] and [http://www-01.ibm.com/support/knowledgecenter/SSGH2K_13.1.0/com.ibm.xlc131.aix.doc/language_ref/std_pragmas.html?lang=en-us Standard pragmas] in IBM AIX XL C 13.1
* [http://download.oracle.com/docs/cd/E19422-01/819-3690/Pragmas_App.html#73499 Appendix B. Pragmas] in Sun Studio 11 C++ User's Guide
* [http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/cref_cls/common/cppref_pragma_ovrvw.htm Intel C++ compiler pragmas]
* [http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/Online_Help/pragmas.htm HP aCC compiler pragmas]

[[de:cpp/preprocessor/impl]]
[[es:cpp/preprocessor/impl]]
[[fr:cpp/preprocessor/impl]]
[[it:cpp/preprocessor/impl]]
[[ja:cpp/preprocessor/impl]]
[[pt:cpp/preprocessor/impl]]
[[ru:cpp/preprocessor/impl]]
[[zh:cpp/preprocessor/impl]]</text>
      <sha1>ew8p54j20soiza1oodpi5r9b57owukd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/preprocessor/include</title>
    <ns>0</ns>
    <id>1383</id>
    <revision>
      <id>91249</id>
      <parentid>88183</parentid>
      <timestamp>2017-03-30T05:52:42Z</timestamp>
      <contributor>
        <ip>192.42.116.16</ip>
      </contributor>
      <comment>Fixed typo</comment>
      <text xml:space="preserve" bytes="3857">{{title|Source file inclusion}}
{{cpp/preprocessor/navbar}}
Includes other source file into current source file at the line immediately after the directive.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|#include &amp;lt;}}{{spar|filename}}{{ttb|&amp;gt;}} }}
{{sdsc | num=2 | {{ttb|#include &quot;}}{{spar|filename}}{{ttb|&quot;}} }}
{{sdsc | num=3 | notes={{mark since c++17}} | {{ttb|__has_include}} {{ttb|(}} {{ttb|&quot;}} {{spar|filename}} {{ttb|&quot;}} {{ttb|)}}&lt;br&gt;{{ttb|__has_include}} {{ttb|(}} {{ttb|&amp;lt;}} {{spar|filename}} {{ttb|&amp;gt;}} {{ttb|)}}
}}
{{sdsc end}}

Any preprocessing tokens (macro constants or expressions) are permitted as arguments to {{tt|#include}} {{rev inl|since=c++17|and {{tt|__has_include}} }} as long as they expand to a sequence of characters surrounded by {{ttb|&lt;}} {{ttb|&gt;}} or {{ttb|&quot;}} {{ttb|&quot;}}.

===Explanation===

@1,2@ Includes source file, identified by {{spar|filename}} into the current source file at the line immediately after the directive. In the case the file is not found, program is ill-formed.
:@1@ Searches for the file in implementation-defined manner. The intent of this syntax is to search for the files under control of the implementation. Typical implementations search only standard include directories. The standard C++ library and the standard C library are implicitly included in these standard include directories. The standard include directories usually can be controlled by the user through compiler options. 
:@2@ Searches for the file in implementation-defined manner. The intent of this syntax is to search for the files that are not controlled by the implementation. Typical implementations first search the directory where the current file resides and, only if the file is not found, search the standard include directories as with {{v|1}}.
@3@ Preprocessor constant expression that evaluates to {{c|1}} if the file name is found and {{c|0}} if not. The program is ill-formed if the argument would not be a valid argument to the {{tt|#include}} directive.

===Notes===
When a file is included, it is processed by [[cpp/language/translation phases|translation phases]] 1-4, which may include, recursively, expansion of the nested {{tt|#include}} directives. To avoid repeated inclusion of the same file and endless recursion when a file includes itself, perhaps transitively, ''header guards'' are commonly used: the entire header is wrapped in 
{{source|1=
#ifndef FOO_H_INCLUDED /* any name uniquely mapped to file name */
#define FOO_H_INCLUDED
// contents of the file are here
#endif
}}
Many compilers also implement the non-standard {{ltt|cpp/preprocessor/impl|pragma}} {{c|#pragma once}} with similar effects: it disables processing of a file if the same file (where file identity is determined in OS-specific way) has already been included.

===Example===
{{example|code=
#if __has_include(&lt;optional&gt;)
#  include &lt;optional&gt;
#  define have_optional 1
#elif __has_include(&lt;experimental/optional&gt;)
#  include &lt;experimental/optional&gt;
#  define have_optional 1
#  define experimental_optional 1
#else
#  define have_optional 0
#endif

#ifndef TEXT
    #include &lt;iostream&gt;

    int main()
    {
    #define TEXT &quot;Hello, world!&quot;
    #include __FILE__
    #define TEXT &quot;Hello again!&quot;
    #include __FILE__

    }
#else
    std::cout &lt;&lt; TEXT &lt;&lt; '\n';
    #undef TEXT
#endif
|output=
Hello, world!
Hello again!
}}

===See also===
{{dsc begin}}
{{dsc|[[cpp/header]]|a list of C++ Standard Library header files}}
{{dsc see c | c/preprocessor/include | Source file inclusion}}
{{dsc end}}

[[ar:cpp/preprocessor/include]]
[[de:cpp/preprocessor/include]]
[[es:cpp/preprocessor/include]]
[[fr:cpp/preprocessor/include]]
[[it:cpp/preprocessor/include]]
[[ja:cpp/preprocessor/include]]
[[pl:cpp/preprocessor/include]]
[[pt:cpp/preprocessor/include]]
[[ru:cpp/preprocessor/include]]
[[zh:cpp/preprocessor/include]]</text>
      <sha1>tvkgm9egl0s4dn1ofbwv8rs1m43zulc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/preprocessor/line</title>
    <ns>0</ns>
    <id>1384</id>
    <revision>
      <id>78345</id>
      <parentid>65854</parentid>
      <timestamp>2015-05-17T19:27:06Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="1804">{{title|Filename and line information}}
{{cpp/preprocessor/navbar}}

Changes the current file name and number in the preprocessor.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|#line}} {{spar|lineno}}}}
{{sdsc | num=2 |  {{ttb|#line}} {{spar|lineno}} {{ttb|&quot;}}{{spar|filename}}{{ttb|&quot;}} }}
{{sdsc end}}

===Explanation===

1) Changes the current preprocessor line number to {{spar|lineno}}. Expansions of the macro {{c|__LINE__}} beyond this point will expand to {{spar|lineno}} plus the number of actual source code lines encountered since.

2) Also changes the current preprocessor file name to {{spar|filename}}. Expansions of the macro {{c|__FILE__}} from this point will produce {{spar|filename}}.

Any preprocessing tokens (macro constants or expressions) are permitted as arguments to {{tt|#line}} as long as they expand to a valid decimal integer optionally following a valid character string.

===Notes===
This directive is used by some automatic code generation tools which produce C++ source files from a file written in another language. In that case, {{tt|#line}} directives may be inserted in the generated C++ file referencing line numbers and the file name of the original (human-editable) source file.

===Example===
{{example | code=
#include &lt;cassert&gt;
#define FNAME &quot;test.cc&quot;
int main()
{
#line 777 FNAME
        assert(2+2 == 5);
}
 | output=
test: test.cc:777: int main(): Assertion `2+2 == 5' failed.
}}

===See also===
{{dsc begin}}
{{dsc see c | c/preprocessor/line | Filename and line information}}
{{dsc end}}

[[cs:cpp/preprocessor/line]]
[[de:cpp/preprocessor/line]]
[[es:cpp/preprocessor/line]]
[[fr:cpp/preprocessor/line]]
[[it:cpp/preprocessor/line]]
[[ja:cpp/preprocessor/line]]
[[pt:cpp/preprocessor/line]]
[[ru:cpp/preprocessor/line]]
[[zh:cpp/preprocessor/line]]</text>
      <sha1>p8khklraisg8hl7xdn90v1buduge57x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/preprocessor/replace</title>
    <ns>0</ns>
    <id>1385</id>
    <revision>
      <id>92039</id>
      <parentid>91048</parentid>
      <timestamp>2017-04-03T20:20:48Z</timestamp>
      <contributor>
        <username>Oktal</username>
        <id>3854</id>
      </contributor>
      <comment>crucial bit of info about __DATE__</comment>
      <text xml:space="preserve" bytes="9991">{{title|Replacing text macros}}
{{cpp/preprocessor/navbar}}
The preprocessor supports text macro replacement. Function-like text macro replacement is also supported.

===Syntax===

{{sdsc begin}}
{{sdsc | num=1 | {{ttb|#define}} {{spar|identifier}} {{spar|replacement-list}}{{mark optional}} }}
{{sdsc | num=2 | {{ttb|#define}} {{spar|identifier}}{{ttb|(}} {{spar|parameters}} {{ttb|)}} {{spar|replacement-list}} }}
{{sdsc | num=3 | {{ttb|#define}} {{spar|identifier}}{{ttb|(}} {{spar|parameters}}{{ttb|, ... )}} {{spar|replacement-list}} | notes = {{mark since c++11}} }}
{{sdsc | num=4 | {{ttb|#define}} {{spar|identifier}}{{ttb|( ... )}} {{spar|replacement-list}} | notes = {{mark since c++11}} }}
{{sdsc | num=5 | {{ttb|#undef }} {{spar|identifier}} }}
{{sdsc end}}

===Explanation===

===={{tt|#define}} directives====

The {{tt|#define}} directives define the {{spar|identifier}} as macro, that is instruct the compiler to replace all successive occurrences of {{spar|identifier}} with {{spar|replacement-list}}, which can be optionally additionally processed. If the identifier is already defined as any type of macro, the program is ill-formed unless the definitions are identical. 

=====Object-like macros=====

Object-like macros replace every occurrence of defined {{spar|identifier}} with {{spar|replacement-list}}. Version (1) of the {{tt|#define}} directive behaves exactly like that.

=====Function-like macros=====

Function-like macros replace each occurrence of defined {{spar|identifier}} with {{spar|replacement-list}}, additionally taking a number of arguments, which then replace corresponding occurrences of any of the {{spar|parameters}} in the {{spar|replacement-list}}.

The syntax of a function-like macro invocation is similar to the syntax of a function call: each instance of the macro name followed by a {{c|(}} as the next preprocessing token introduces the sequence of tokens that is replaced by the {{spar|replacement-list}}. The sequence is terminated by the matching {{c|)}} token, skipping intervening matched pairs of left and right parentheses.

The number of arguments must be the same as the number of arguments in macro definition ({{spar|parameters}}) or the program is ill-formed. If the identifier is not in functional-notation, i.e. does not have parentheses after itself, it is not replaced at all.

Version (2) of the {{tt|#define}} directive defines a simple function-like macro.

Version (3) of the {{tt|#define}} directive defines a function-like macro with variable number of arguments. The additional arguments can be accessed using {{tt|__VA_ARGS__}} identifier, which is then replaced with arguments, supplied with the identifier to be replaced.

Version (4) of the {{tt|#define}} directive defines a function-like macro with variable number of arguments, but no regular arguments. The arguments can be accessed only with {{tt|__VA_ARGS__}} identifier, which is then replaced with arguments, supplied with identifier to be replaced.

Note: if an argument of a function-like macro includes commas that are not protected by matched pairs of left and right parentheses (most commonly found in type names, as in {{c|assert(std::is_same_v&lt;int, int&gt;);}} or {{c|BOOST_FOREACH(std::pair&lt;int,int&gt; p, m)}}), the comma is interpreted as macro argument separator, causing a compilation failure due to argument count mismatch.

===={{tt|#}} and {{tt|##}} operators====

In function-like macros, a {{tt|#}} operator before an identifier in the {{spar|replacement-list}} runs the identifier through parameter replacement and encloses the result in quotes, effectively creating a string literal. In addition, the preprocessor adds backslashes to escape the quotes surrounding embedded string literals, if any, and doubles the backslashes within the string as necessary. All leading and trailing whitespace is removed, and any sequence of whitespace in the middle of the text (but not inside embedded string literals) is collapsed to a single space. This operation is called &quot;stringification&quot;. If the result of stringification is not a valid string literal, the behavior is undefined.

{{rev begin}}
{{rev|since=c++11|
When {{tt|#}} appears before {{tt|__VA_ARGS__}}, the entire expanded __VA_ARGS__ is enclosed in quotes:
{{source|1=
#define showlist(...) puts(#__VA_ARGS__)
showlist();            // expands to puts(&quot;&quot;)
showlist(1, &quot;x&quot;, int); // expands to puts(&quot;1, \&quot;x\&quot;, int&quot;)
}}
}}
{{rev end}}

A {{tt|##}} operator between any two successive identifiers in the {{spar|replacement-list}} runs parameter replacement on the two identifiers (which are not macro-expanded first) and then concatenates the result. This operation is called &quot;concatenation&quot; or &quot;token pasting&quot;. Only tokens that form a valid token together may be pasted: identifiers that form a longer identifier, digits that form a number, or operators {{tt|+}} and {{tt|{{=}}}} that form a {{tt|+{{=}}}}. A comment cannot be created by pasting {{tt|/}} and {{tt|*}} because comments are removed from text before macro substitution is considered. If the result of concatenation is not a valid token, the behavior is undefined.

Note: some compilers offer an extension that allows ## to appear after a comma and before __VA_ARGS__, in which case the ## does nothing when __VA_ARGS__ is non-empty, but removes the comma when __VA_ARGS__ is empty: this makes it possible to define macros such as {{tt|fprintf (stderr, format, ##__VA_ARGS__)}}

===={{tt|#undef}} directive====

The {{tt|#undef}} directive undefines the {{spar|identifier}}, that is cancels previous definition of the {{spar|identifier}} by {{tt|#define}} directive. If the identifier does not have associated macro, the directive is ignored.

===Predefined macros===
The following macro names are predefined in any translation unit.
{{dsc begin}}
{{dsc macro const | __cplusplus | nolink=true | denotes the version of C++ standard that is being used, expands to value 199711L{{mark until c++11}}, 201103L{{mark c++11}}, 201402L{{mark c++14}}, or 201703L{{mark c++17}}}}
{{dsc macro const | __STDC_HOSTED__ | nolink=true | expands to the integer constant {{c|1}} if the implementation is hosted (runs under an OS), {{c|0}} if freestanding (runs without an OS) | notes={{mark c++11}}}}
{{dsc macro const | __FILE__ | nolink=true | expands to the name of the current file, as a character string literal, can be changed by the {{rlp|line|#line}} directive}}
{{dsc macro const | __LINE__ | nolink=true | expands to the source file line number, an integer constant, can be changed by the {{rlp|line|#line}} directive}}
{{dsc macro const | __DATE__ | nolink=true | expands to the date of translation, a character string literal of the form &quot;Mmm dd yyyy&quot;. The first character of &quot;dd&quot; is a space if the day of the month is less than 10. The name of the month is as if generated by {{c|std::asctime()}}}}
{{dsc macro const | __TIME__ | nolink=true | expands to the time of translation, a character string literal of the form &quot;hh:mm:ss&quot;}}
{{dsc macro const | __STDCPP_DEFAULT_NEW_ALIGNMENT__ | nolink=true | expands to an {{lc|std::size_t}} literal whose value is the alignment guaranteed by a call to alignment-unaware [[cpp/memory/new/operator_new|operator new]] (larger alignments will be passed to alignment-aware overload, such as {{c|operator new(std::size_t, std::align_val_t)}}|notes={{mark c++17}}}}
{{dsc end}}

The following additional macro names may be predefined by the implementations.
{{dsc begin}}
{{dsc macro const | __STDC__ | nolink=true | implementation-defined value, if present, typically used to indicate C conformance}}
{{dsc macro const | __STDC_VERSION__ | nolink=true | implementation-defined value, if present| notes={{mark c++11}}}}
{{dsc macro const | __STDC_ISO_10646__ | nolink=true | expands to an integer constant of the form {{tt|yyyymmL}}, if {{c|wchar_t}} uses Unicode, the date indicates the latest revision of Unicode supported| notes={{mark c++11}}}}
{{dsc macro const | __STDC_MB_MIGHT_NEQ_WC__ | nolink=true | expands to {{c|1}} if wide character encoding of the basic character set may not equal their narrow encoding| notes={{mark c++11}}}}
{{dsc macro const | __STDCPP_STRICT_POINTER_SAFETY__ | nolink=true | expands to {{c|1}} if the implementation has strict {{lc|std::pointer_safety}}| notes={{mark c++11}}}}
{{dsc macro const | __STDCPP_THREADS__ | nolink=true | expands to {{c|1}} if the program can have more than one thread of execution| notes={{mark c++11}}}}
{{dsc end}}

The values of these macros (except for {{tt|__FILE__}} and {{tt|__LINE__}}) remain constant throughout the translation unit. Attempts to redefine or undefine these macros result in undefined behavior.

Note: in the scope of every function body, there is a special function-local predefined variable named {{c|__func__}}{{mark since c++11}}, defined as a static character array holding the name of the function in implementation-defined format. It is not a preprocessor macro, but it is used together with {{tt|__FILE__}} and {{tt|__LINE__}}, e.g. by {{lc|assert}}.

===Example===
{{example | code=
#include &lt;iostream&gt;

//make function factory and use it
#define FUNCTION(name, a) int fun_##name() { return a;}

FUNCTION(abcd, 12)
FUNCTION(fff, 2)
FUNCTION(qqq, 23)

#undef FUNCTION
#define FUNCTION 34
#define OUTPUT(a) std::cout &lt;&lt; #a &lt;&lt; '\n'

int main()
{
    std::cout &lt;&lt; &quot;abcd: &quot; &lt;&lt; fun_abcd() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;fff: &quot; &lt;&lt; fun_fff() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;qqq: &quot; &lt;&lt; fun_qqq() &lt;&lt; '\n';
    std::cout &lt;&lt; FUNCTION &lt;&lt; '\n';
    OUTPUT(million);               //note the lack of quotes
}
| output=
abcd: 12
fff: 2
qqq: 23
34
million
}}

===See also===
{{dsc begin}}
{{dsc see c | c/preprocessor/replace | Replacing text macros}}
{{dsc end}}

[[de:cpp/preprocessor/replace]]
[[es:cpp/preprocessor/replace]]
[[fr:cpp/preprocessor/replace]]
[[it:cpp/preprocessor/replace]]
[[ja:cpp/preprocessor/replace]]
[[pt:cpp/preprocessor/replace]]
[[ru:cpp/preprocessor/replace]]
[[zh:cpp/preprocessor/replace]]</text>
      <sha1>ctyjxntmmrp3ceoidfb17hf0g3f0xsh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex</title>
    <ns>0</ns>
    <id>1387</id>
    <revision>
      <id>83529</id>
      <parentid>73404</parentid>
      <timestamp>2016-02-21T15:42:47Z</timestamp>
      <contributor>
        <ip>81.2.98.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="4444">{{title|Regular expressions library}}
{{cpp/regex/navbar}}

{{dsc begin}}
{{dsc header | regex }}
{{dsc end}}

The regular expressions library provides a class that represents [[enwiki:Regular expression|regular expressions]], which are a kind of mini-language used to perform pattern matching within strings. Almost all operations with regexes can be characterized by operating on several of the following objects:

* '''Target sequence'''. The character sequence that is searched for a pattern. This may be a range specified by two iterators, a null-terminated character string or a {{lc|std::string}}.

* '''Pattern'''. This is the regular expression itself. It determines what constitutes a match. It is an object of type {{lc|std::basic_regex}}, constructed from a string with special syntax. See [[cpp/regex/syntax_option_type | syntax_option_type]] for the description of supported syntax variations.

* '''Matched array'''. The information about matches may be retrieved as an object of type {{lc|std::match_results}}.

* '''Replacement string'''. This is a string that determines how to replace the matches, see [[cpp/regex/match_flag_type | match_flag_type]] for the description of supported syntax variations. 

===Main classes===

These classes encapsulate a regular expression and the results of matching a regular expression within a target sequence of characters.

{{dsc begin}}
{{dsc inc | cpp/regex/dsc basic_regex }}
{{dsc inc | cpp/regex/dsc sub_match }}
{{dsc inc | cpp/regex/dsc match_results }}
{{dsc end}}

===Algorithms===

These functions are used to apply the regular expression encapsulated in a regex to a target sequence of characters.

{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_match }}
{{dsc inc | cpp/regex/dsc regex_search }}
{{dsc inc | cpp/regex/dsc regex_replace }}
{{dsc end}}

===Iterators===

The regex iterators are used to traverse the entire set of regular expression matches found within a sequence.

{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_iterator }}
{{dsc inc | cpp/regex/dsc regex_token_iterator }}
{{dsc end}}

===Exceptions===

This class defines the type of objects thrown as exceptions to report errors from the regular expressions library.

{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_error }}
{{dsc end}}

===Traits===

The regex traits class is used to encapsulate the localizable aspects of a regex.

{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_traits }}
{{dsc end}}

===Constants===

{{dsc begin}}
{{dsc namespace | std::regex_constants }}
{{dsc inc | cpp/regex/dsc syntax_option_type}}
{{dsc inc | cpp/regex/dsc match_flag_type}}
{{dsc inc | cpp/regex/dsc error_type}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
#include &lt;regex&gt;

int main()
{
    std::string s = &quot;Some people, when confronted with a problem, think &quot;
        &quot;\&quot;I know, I'll use regular expressions.\&quot; &quot;
        &quot;Now they have two problems.&quot;;

    std::regex self_regex(&quot;REGULAR EXPRESSIONS&quot;,
            std::regex_constants::ECMAScript {{!}} std::regex_constants::icase);
    if (std::regex_search(s, self_regex)) {
        std::cout &lt;&lt; &quot;Text contains the phrase 'regular expressions'\n&quot;;
    }

    std::regex word_regex(&quot;(\\S+)&quot;);
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), word_regex);
    auto words_end = std::sregex_iterator();

    std::cout &lt;&lt; &quot;Found &quot;
              &lt;&lt; std::distance(words_begin, words_end)
              &lt;&lt; &quot; words\n&quot;;

    const int N = 6;
    std::cout &lt;&lt; &quot;Words longer than &quot; &lt;&lt; N &lt;&lt; &quot; characters:\n&quot;;
    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;
        std::string match_str = match.str();
        if (match_str.size() &gt; N) {
            std::cout &lt;&lt; &quot;  &quot; &lt;&lt; match_str &lt;&lt; '\n';
        }
    }

    std::regex long_word_regex(&quot;(\\w{7,})&quot;);
    std::string new_s = std::regex_replace(s, long_word_regex, &quot;[$&amp;]&quot;);
    std::cout &lt;&lt; new_s &lt;&lt; '\n';
}
 | output=
Text contains the phrase 'regular expressions'
Found 19 words
Words longer than 6 characters:
  people,
  confronted
  problem,
  regular
  expressions.&quot;
  problems.
Some people, when [confronted] with a [problem], think 
&quot;I know, I'll use [regular] [expressions].&quot; Now they have two [problems].
}}

[[ar:cpp/regex]]
[[de:cpp/regex]]
[[es:cpp/regex]]
[[fr:cpp/regex]]
[[it:cpp/regex]]
[[ja:cpp/regex]]
[[ko:cpp/regex]]
[[pt:cpp/regex]]
[[ru:cpp/regex]]
[[zh:cpp/regex]]</text>
      <sha1>npqk4n617l8xc1v3pslam5o3myc61n8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex</title>
    <ns>0</ns>
    <id>2279</id>
    <revision>
      <id>72320</id>
      <parentid>67151</parentid>
      <timestamp>2014-08-08T14:09:10Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2048">{{cpp/title|basic_regex}}
{{cpp/regex/basic_regex/navbar}}
{{ddcl | header=regex | since=c++11 | 1=
template &lt;
    class CharT,
    class Traits = std::regex_traits&lt;CharT&gt;
&gt; class basic_regex;
}}

The class template {{tt|basic_regex}} provides a general framework for holding regular expressions. 

Several specializations for common character types are provided:
{{dsc begin}}
{{dsc header | regex}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|regex}} | {{c|basic_regex&lt;char&gt;}}}}
{{dsc | {{tt|wregex}} | {{c|basic_regex&lt;wchar_t&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{c|CharT}}}}
{{dsc | {{tt|traits_type}} | {{c|Traits}}}}
{{dsc | {{tt|string_type}} | {{c|Traits::string_type}}}}
{{dsc | {{tt|locale_type}} | {{c|Traits::locale_type}}}}
{{dsc | {{tt|flag_type}} | {{lc|std::regex_constants::syntax_option_type}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc constructor}}
{{dsc inc | cpp/regex/basic_regex/dsc destructor}}
{{dsc inc | cpp/regex/basic_regex/dsc operator{{=}}}}
{{dsc inc | cpp/regex/basic_regex/dsc assign}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/regex/basic_regex/dsc mark_count}}
{{dsc inc | cpp/regex/basic_regex/dsc flags}}

{{dsc h2 | Locale}}
{{dsc inc | cpp/regex/basic_regex/dsc getloc}}
{{dsc inc | cpp/regex/basic_regex/dsc imbue}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/regex/basic_regex/dsc swap}}

{{dsc h1 | Constants}}
{{cpp/regex/syntax option type consts}}
{{dsc end}}
The member constants in {{tt|basic_regex}} are duplicates of the [[cpp/regex/syntax_option_type|syntax_option_type]] constants defined in the namespace {{tt|std::regex_constants}}.

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc swap2}}
{{dsc end}}

[[de:cpp/regex/basic regex]]
[[es:cpp/regex/basic regex]]
[[fr:cpp/regex/basic regex]]
[[it:cpp/regex/basic regex]]
[[ja:cpp/regex/basic regex]]
[[pt:cpp/regex/basic regex]]
[[ru:cpp/regex/basic regex]]
[[zh:cpp/regex/basic regex]]</text>
      <sha1>rnkch7oegbd973y8n3atfr6krtsa8em</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/assign</title>
    <ns>0</ns>
    <id>6394</id>
    <revision>
      <id>91602</id>
      <parentid>78125</parentid>
      <timestamp>2017-03-31T19:51:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3150">{{cpp/regex/basic_regex/title|assign}}
{{cpp/regex/basic_regex/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
basic_regex&amp; assign( const basic_regex&amp; other );
}}
{{dcl | num=2 | since=c++11 |
basic_regex&amp; assign( basic_regex&amp;&amp; that );
}}
{{dcl | num=3 | since=c++11 | 1=
basic_regex&amp; assign( const CharT* s, 
                     flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=4 | since=c++11 | 1=
basic_regex&amp; assign( const charT* ptr, size_t count,
                     flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class ST, class SA &gt;
basic_regex&amp; assign( const std::basic_string&lt;CharT,ST,SA&gt;&amp; str,
                     flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class InputIt &gt;
basic_regex&amp; assign( InputIt first, InputIt last,
                     flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=7 | since=c++11 | 1=
basic_regex&amp; assign( std::initializer_list&lt;CharT&gt; ilist,
                     flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl end}}

Assigns the contents to the regular expression. 

@1@ Assigns the contents of {{tt|other}}. {{lc|flags()}} and {{lc|mark_count()}} are equivalent to the values of {{c|other.flags()}} and {{c|other.mark_count()}} after the call.

@2@ Assigns the contents of {{tt|other}} using move semantics. {{lc|flags()}} and {{lc|mark_count()}} are equivalent to the values of {{c|other.flags()}} and {{c|other.mark_count()}} before the assignment. After the call, {{tt|other}} is in a valid, but unspecified state.

@3-7@ Assigns a sequence of characters to the regular expression. The syntax flags are set to {{tt|f}}. {{lc|mark_count()}} returns the number of marked subexpressions within the resulting subexpression after the call.

:@3@ Assigns a null-terminated string pointed to by {{tt|s}}.
:@4@ Assigns a sequence of {{tt|count}} characters, pointed to by {{tt|s}}.
:@5@ Assigns the string {{tt|str}}.
:@6@ Assigns the characters in the range {{tt|[first, last)}}.
:@7@ Assigns the characters in the initializer list {{tt|ilist}}.

===Parameters===
{{par begin}}
{{par | other | another regular expression to assign}}
{{par | s | pointer to a character sequence to assign}}
{{par | str | string to assign}}
{{par | first, last | the range of characters to assign}}
{{par | ilist | initializer list containing characters to assign}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ (none)
@2@ {{unreviewed noexcept}}
@3-7@ {{lc|std::regex_error}} if the supplied regular expression is not valid. The object is not modified in that case.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc operator{{=}}}}
{{dsc end}}

[[de:cpp/regex/basic regex/assign]]
[[es:cpp/regex/basic regex/assign]]
[[fr:cpp/regex/basic regex/assign]]
[[it:cpp/regex/basic regex/assign]]
[[ja:cpp/regex/basic regex/assign]]
[[pt:cpp/regex/basic regex/assign]]
[[ru:cpp/regex/basic regex/assign]]
[[zh:cpp/regex/basic regex/assign]]</text>
      <sha1>6vqay8bxsbb7s9o3tac4cnewoikbdrd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/basic regex</title>
    <ns>0</ns>
    <id>3098</id>
    <revision>
      <id>91479</id>
      <parentid>62920</parentid>
      <timestamp>2017-03-31T19:46:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3120">{{cpp/regex/basic_regex/title | basic_regex}}
{{cpp/regex/basic_regex/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
basic_regex();
}}
{{dcl | num=2 | since=c++11 | 1= 
explicit basic_regex( const CharT* s, 
                      flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=3 | since=c++11 | 1= 
basic_regex( const CharT* s, std::size_t count,
             flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=4 | since=c++11 | 1= 
basic_regex( const basic_regex&amp; other );
}}
{{dcl | num=5 | since=c++11 | 1= 
basic_regex( basic_regex&amp;&amp; other );
}}
{{dcl | num=6 | since=c++11 | 1= 
template&lt; class ST, class SA &gt;
explicit basic_regex( const std::basic_string&lt;CharT,ST,SA&gt;&amp; str, 
                      flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=7 | since=c++11 | 1= 
template&lt; class ForwardIt &gt;
basic_regex( ForwardIt first, ForwardIt last, 
             flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl | num=8 | since=c++11 | 1= 
basic_regex( std::initializer_list&lt;CharT&gt; init, 
             flag_type f = std::regex_constants::ECMAScript );
}}
{{dcl end}}

Constructs a new regular expression from a sequence of characters interpreted according to the flags {{tt|f}}.

@1@ Default constructor.  Constructs an empty regular expression which will match nothing.

@2@ Constructs a regex from a null-terminated string {{tt|s}}.

@3@ Constructs a regex from a sequence of {{tt|count}} characters, pointed to by {{tt|s}}.

@4@ Copy constructor.  Constructs a regex by copying {{tt|other}}

@5@ Move constructor.  Constructs a regex by with the contents of {{tt|other}} using move semantics.

@6@ Constructs a regex from a string {{tt|str}}.

@7@ Range constructor.  Constructs the string  with the contents of the range {{tt|[first, last)}}.

@8@ Initializer list constructor.  Constructs the string with the contents of the initializer list {{tt|init}}.

===Parameters===
{{par begin}}
{{par | s | pointer to a null-terminated string}}
{{par | count | length of a character sequence used to initialize the regex}}
{{par | first, last | range of a character sequence used to initialize the regex}}
{{par | str | a basic_string used as a source used to initialize the regex}}
{{par | other | another regex to use as source to initialize the regex}}
{{par | init | initializer list used to initialize the regex}}
{{par | f | flags used to guide the interpretation of the character sequence as a regular expression }}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Exceptions===
@1@ (none)

@2-3@ {{lc|std::regex_error}} if the supplied regular expression is not valid.

@4@ (none)

@5@ {{unreviewed noexcept}}

@5-8@ {{lc|std::regex_error}} if the supplied regular expression is not valid.

[[de:cpp/regex/basic regex/basic regex]]
[[es:cpp/regex/basic regex/basic regex]]
[[fr:cpp/regex/basic regex/basic regex]]
[[it:cpp/regex/basic regex/basic regex]]
[[ja:cpp/regex/basic regex/basic regex]]
[[pt:cpp/regex/basic regex/basic regex]]
[[ru:cpp/regex/basic regex/basic regex]]
[[zh:cpp/regex/basic regex/basic regex]]</text>
      <sha1>43hd0nqdcwfd3gi55tjcy17iorgx3x4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/constants</title>
    <ns>0</ns>
    <id>8451</id>
    <revision>
      <id>58819</id>
      <parentid>51111</parentid>
      <timestamp>2013-06-01T06:21:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1748">{{cpp/title | basic_regex constants}}
{{cpp/regex/basic_regex/navbar}}

{{dcl begin}}
{{dcl header | regex}}
{{dcl | 1=
static constexpr std::regex_constants::syntax_option_type icase =
    std::regex_constants::icase;
static constexpr std::regex_constants::syntax_option_type nosubs =
    std::regex_constants::nosubs;
static constexpr std::regex_constants::syntax_option_type optimize =
    std::regex_constants::optimize;
static constexpr std::regex_constants::syntax_option_type collate =
    std::regex_constants::collate;
static constexpr std::regex_constants::syntax_option_type ECMAScript =
    std::regex_constants::ECMAScript;
static constexpr std::regex_constants::syntax_option_type basic =
    std::regex_constants::basic;
static constexpr std::regex_constants::syntax_option_type extended =
    std::regex_constants::extended;
static constexpr std::regex_constants::syntax_option_type awk =
    std::regex_constants::awk;
static constexpr std::regex_constants::syntax_option_type grep =
    std::regex_constants::grep;
static constexpr std::regex_constants::syntax_option_type egrep =
    std::regex_constants::egrep;
}}
{{dcl end}}

{{lc|std::basic_regex}} defines several constants that govern general regex matching syntax.

These constants are duplicated from {{c|std::regex_constants}}:

{{cpp/regex/syntax option type consts}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc syntax_option_type}}
{{dsc end}}

[[de:cpp/regex/basic regex/constants]]
[[es:cpp/regex/basic regex/constants]]
[[fr:cpp/regex/basic regex/constants]]
[[it:cpp/regex/basic regex/constants]]
[[ja:cpp/regex/basic regex/constants]]
[[pt:cpp/regex/basic regex/constants]]
[[ru:cpp/regex/basic regex/constants]]
[[zh:cpp/regex/basic regex/constants]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/flags</title>
    <ns>0</ns>
    <id>6372</id>
    <revision>
      <id>64287</id>
      <parentid>63400</parentid>
      <timestamp>2013-08-15T16:21:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="669">{{cpp/regex/basic_regex/title|flags}}
{{cpp/regex/basic_regex/navbar}}
{{ddcl | since=c++11 |
flag_type flags() const;
}}

Returns the regular expression syntax flags as set in the constructor or the last call to {{lc|assign()}}.

===Parameters===
(none)

===Return value===
Current regular expression syntax flags.

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/regex/basic regex/flags]]
[[es:cpp/regex/basic regex/flags]]
[[fr:cpp/regex/basic regex/flags]]
[[it:cpp/regex/basic regex/flags]]
[[ja:cpp/regex/basic regex/flags]]
[[pt:cpp/regex/basic regex/flags]]
[[ru:cpp/regex/basic regex/flags]]
[[zh:cpp/regex/basic regex/flags]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/getloc</title>
    <ns>0</ns>
    <id>6371</id>
    <revision>
      <id>63401</id>
      <parentid>58820</parentid>
      <timestamp>2013-07-10T01:31:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="918">{{cpp/regex/basic_regex/title|getloc}}
{{cpp/regex/basic_regex/navbar}}
{{ddcl | since=c++11 |
locale_type getloc() const;
}}

Returns the current locale associated with the regular expression.

Effectively calls {{c|traits_i.getloc()}} where {{tt|traits_i}} is a default initialized instance of the type {{tt|Traits}}, stored within the regular expression object.

===Parameters===
(none)

===Return value===
The current locale associated with the regular expression.

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc imbue}}
{{dsc end}}

[[de:cpp/regex/basic regex/getloc]]
[[es:cpp/regex/basic regex/getloc]]
[[fr:cpp/regex/basic regex/getloc]]
[[it:cpp/regex/basic regex/getloc]]
[[ja:cpp/regex/basic regex/getloc]]
[[pt:cpp/regex/basic regex/getloc]]
[[ru:cpp/regex/basic regex/getloc]]
[[zh:cpp/regex/basic regex/getloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/imbue</title>
    <ns>0</ns>
    <id>6370</id>
    <revision>
      <id>63402</id>
      <parentid>58821</parentid>
      <timestamp>2013-07-10T01:31:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1087">{{cpp/regex/basic_regex/title|imbue}}
{{cpp/regex/basic_regex/navbar}}
{{ddcl | since=c++11 |
locale_type imbue( locale_type loc );
}}

Replaces the current locale with {{tt|loc}}. The regular expression does not match any character sequence after the call.

Effectively calls {{c|traits_i.imbue(loc)}} where {{tt|traits_i}} is a default initialized instance of the type {{tt|Traits}} stored within the regular expression object.

===Parameters===
{{par begin}}
{{par | loc | new locale to use}}
{{par end}}

===Return value===
The locale before the call to this function. Effectively returns the result of expression {{c|traits_i.imbue(loc)}}.

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc getloc}}
{{dsc end}}

[[de:cpp/regex/basic regex/imbue]]
[[es:cpp/regex/basic regex/imbue]]
[[fr:cpp/regex/basic regex/imbue]]
[[it:cpp/regex/basic regex/imbue]]
[[ja:cpp/regex/basic regex/imbue]]
[[pt:cpp/regex/basic regex/imbue]]
[[ru:cpp/regex/basic regex/imbue]]
[[zh:cpp/regex/basic regex/imbue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/mark count</title>
    <ns>0</ns>
    <id>6373</id>
    <revision>
      <id>63403</id>
      <parentid>41886</parentid>
      <timestamp>2013-07-10T01:31:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="714">{{cpp/regex/basic_regex/title|mark_count}}
{{cpp/regex/basic_regex/navbar}}
{{ddcl | since=c++11 |
unsigned mark_count() const;
}}

Returns the number of marked sub-expressions within the regular expression.

===Parameters===
(none)

===Return value===
The number of marked sub-expressions within the regular expression.

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/regex/basic regex/mark count]]
[[es:cpp/regex/basic regex/mark count]]
[[fr:cpp/regex/basic regex/mark count]]
[[it:cpp/regex/basic regex/mark count]]
[[ja:cpp/regex/basic regex/mark count]]
[[pt:cpp/regex/basic regex/mark count]]
[[ru:cpp/regex/basic regex/mark count]]
[[zh:cpp/regex/basic regex/mark count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/operator=</title>
    <ns>0</ns>
    <id>6330</id>
    <revision>
      <id>91756</id>
      <parentid>62921</parentid>
      <timestamp>2017-03-31T19:56:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1989">{{cpp/regex/basic_regex/title | operator{{=}}}}
{{cpp/regex/basic_regex/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl | num=1 | since=c++11 | 1=
basic_regex&amp; operator=( const basic_regex&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
basic_regex&amp; operator=( basic_regex&amp;&amp; other );
}}
{{dcl | num=3 | since=c++11 | 1=
basic_regex&amp; operator=( const CharT* ptr );
}}
{{dcl | num=4 | since=c++11 | 1=
basic_regex&amp; operator=( std::initializer_list&lt;CharT&gt; il );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class ST, class SA &gt;
basic_regex&amp; operator=( const std::basic_string&lt;CharT,ST,SA&gt;&amp; p );
}}
{{dcl end}}

Assigns the contents.

@1@ Copy assignment operator. Assigns the contents of {{tt|other}}. Equivalent to {{c|assign(other);}}.

@2@ Move assignment operator. Assigns the contents of {{tt|other}} using move semantics. {{tt|other}} is in valid, but unspecified state after the operation. Equivalent to {{c|assign(other);}}.

@3@ Assigns a null-terminated character string pointed to by {{tt|ptr}}. Equivalent to {{c|assign(ptr);}}.

@4@ Assigns characters contained in initializer list {{tt|il}}. Equivalent to {{c|assign(il);}}.

@5@ Assigns the contents of the string {{tt|p}}. Equivalent to {{c|assign(p);}}.

===Parameters===
{{par begin}}
{{par | other | another regex object}}
{{par | ptr | pointer to a null-terminated character string}}
{{par | il | initializer list containing characters to assign}}
{{par | p | string containing characters to assign}}
{{par end}}

===Return value===
{{c|*this}}.

===Exceptions===
@1@ (none)

@2@ {{unreviewed noexcept}}

@3-5@ (none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc assign}}
{{dsc end}}

[[de:cpp/regex/basic regex/operator=]]
[[es:cpp/regex/basic regex/operator=]]
[[fr:cpp/regex/basic regex/operator=]]
[[it:cpp/regex/basic regex/operator=]]
[[ja:cpp/regex/basic regex/operator=]]
[[pt:cpp/regex/basic regex/operator=]]
[[ru:cpp/regex/basic regex/operator=]]
[[zh:cpp/regex/basic regex/operator=]]</text>
      <sha1>ohwfmdmjbeg8jyysdxzswmshysadajh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/swap</title>
    <ns>0</ns>
    <id>6367</id>
    <revision>
      <id>91420</id>
      <parentid>63404</parentid>
      <timestamp>2017-03-31T19:43:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="759">{{cpp/regex/basic_regex/title|swap}}
{{cpp/regex/basic_regex/navbar}}
{{ddcl | since=c++11 |
void swap( basic_regex&amp; other );
}}

Exchanges the contents of two regular expressions.

===Parameters===
{{par begin}}
{{par | other | the regular expression to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc swap2}}
{{dsc end}}

[[de:cpp/regex/basic regex/swap]]
[[es:cpp/regex/basic regex/swap]]
[[fr:cpp/regex/basic regex/swap]]
[[it:cpp/regex/basic regex/swap]]
[[ja:cpp/regex/basic regex/swap]]
[[pt:cpp/regex/basic regex/swap]]
[[ru:cpp/regex/basic regex/swap]]
[[zh:cpp/regex/basic regex/swap]]</text>
      <sha1>9slmik032dch5ytg90xug684xh7zbc4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/swap2</title>
    <ns>0</ns>
    <id>6369</id>
    <revision>
      <id>91475</id>
      <parentid>64854</parentid>
      <timestamp>2017-03-31T19:46:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="999">{{cpp/title | swap&lt;small&gt;(std::basic_regex)&lt;/small&gt;}}
{{cpp/regex/basic_regex/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class CharT, class Traits &gt;
void swap( basic_regex&lt;CharT,Traits&gt; &amp;lhs, basic_regex&lt;CharT,Traits&gt; &amp;rhs );
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::basic_regex}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | regular expressions to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/basic_regex/dsc swap}}
{{dsc end}}

[[de:cpp/regex/basic regex/swap2]]
[[es:cpp/regex/basic regex/swap2]]
[[fr:cpp/regex/basic regex/swap2]]
[[it:cpp/regex/basic regex/swap2]]
[[ja:cpp/regex/basic regex/swap2]]
[[pt:cpp/regex/basic regex/swap2]]
[[ru:cpp/regex/basic regex/swap2]]
[[zh:cpp/regex/basic regex/swap2]]</text>
      <sha1>1j9tuqwy8t1e24pzy48obebmsybswn8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/basic regex/~basic regex</title>
    <ns>0</ns>
    <id>6374</id>
    <revision>
      <id>63405</id>
      <parentid>41874</parentid>
      <timestamp>2013-07-10T01:31:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="497">{{cpp/regex/basic_regex/title|~basic_regex}}
{{cpp/regex/basic_regex/navbar}}
{{ddcl | since=c++11 |
~basic_regex();
}}

Destroys the regular expression object.

[[de:cpp/regex/basic regex/~basic regex]]
[[es:cpp/regex/basic regex/~basic regex]]
[[fr:cpp/regex/basic regex/~basic regex]]
[[it:cpp/regex/basic regex/~basic regex]]
[[ja:cpp/regex/basic regex/~basic regex]]
[[pt:cpp/regex/basic regex/~basic regex]]
[[ru:cpp/regex/basic regex/~basic regex]]
[[zh:cpp/regex/basic regex/~basic regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/ecmascript</title>
    <ns>0</ns>
    <id>13030</id>
    <revision>
      <id>88388</id>
      <parentid>87677</parentid>
      <timestamp>2016-11-17T13:41:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg2503 also resolved lwg2343 (also, did they forget to update [re.regex.const]?)</comment>
      <text xml:space="preserve" bytes="27478">{{title|Modified ECMAScript regular expression grammar}}
{{cpp/regex/basic_regex/navbar}}
This page describes the regular expression grammar that is used when {{lc|std::basic_regex}} is constructed with [[cpp/regex/syntax_option_type | syntax_option_type]] set to {{tt|ECMAScript}} (the default). See [[cpp/regex/syntax_option_type | syntax_option_type]] for the other supported regular expression grammars.

The {{tt|ECMAScript}} regular expression grammar in C++ is [http://ecma-international.org/ecma-262/5.1/#sec-15.10 ECMA-262 grammar] with modifications marked with {{mark|C++ only}} below.

===Alternatives===
A regular expression pattern is sequence of one or more ''Alternative''s, separated by the disjunction operator {{ttb|{{!}}}} (in other words, the disjunction operator has the lowest precedence)

''Pattern'' ::
:''Disjunction''

''Disjunction'' ::
:''Alternative''
:''Alternative'' {{ttb|{{!}}}} ''Disjunction''

The pattern first tries to skip the ''Disjunction'' and match the left ''Alternative'' followed by the rest of the regular expression (after the Disjunction).

If it fails, it tries to skip the left ''Alternative'' and match the right ''Disjunction'' (followed by the rest of the regular expression).

If the left ''Alternative'', the right ''Disjunction'', and the remainder of the regular expression all have choice points, all choices in the remainder of the expression are tried before moving on to the next choice in the left ''Alternative''. If choices in the left ''Alternative'' are exhausted, the right ''Disjunction'' is tried instead of the left ''Alternative''.

Any capturing parentheses inside a skipped ''Alternative'' produce empty submatches.

{{example|code=
#include &lt;iostream&gt;
#include &lt;regex&gt;

void show_matches(const std::string&amp; in, const std::string&amp; re)
{
    std::smatch m;
    std::regex_search(in, m, std::regex(re));
    if(m.empty()) {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: NO MATCH\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: &quot;;
        std::cout &lt;&lt; &quot;prefix=[&quot; &lt;&lt; m.prefix() &lt;&lt; &quot;] &quot;;
        for(std::size_t n = 0; n &lt; m.size(); ++n)
            std::cout &lt;&lt; &quot; m[&quot; &lt;&lt; n &lt;&lt; &quot;]=[&quot; &lt;&lt; m[n] &lt;&lt; &quot;] &quot;;
        std::cout &lt;&lt; &quot;suffix=[&quot; &lt;&lt; m.suffix() &lt;&lt; &quot;]\n&quot;;
    }
}
int main()
{
    show_matches(&quot;abcdef&quot;, &quot;abc{{!}}def&quot;);
    show_matches(&quot;abc&quot;, &quot;ab{{!}}abc&quot;); // left Alernative matched first

    // Match of the input against the left Alternative (a) followed
    // by the remained of the regex (c{{!}}bc) succeeds, which results
    // in m[1]=&quot;a&quot; and m[4]=&quot;bc&quot;.
    // The skipped Alternatives (ab) and (c) leave their submatches
    // m[3] and m[5] empty.
    show_matches(&quot;abc&quot;, &quot;((a){{!}}(ab))((c){{!}}(bc))&quot;);
}
| output=
input=[abcdef], regex=[abc{{!}}def]: prefix=[]  m[0]=[abc] suffix=[def]
input=[abc], regex=[ab{{!}}abc]: prefix=[]  m[0]=[ab] suffix=[c]
input=[abc], regex=[((a){{!}}(ab))((c){{!}}(bc))]: prefix=[]  m[0]=[abc]
m[1]=[a]  m[2]=[a]  m[3]=[] m[4]=[bc]  m[5]=[]  m[6]=[bc] suffix=[]
}}

===Terms===
Each ''Alternative'' is either empty or is a sequence of ''Term''s (with no separators between the ''Term''s)

''Alternative'' ::
: ''[empty]''
: ''Alternative'' ''Term''

Empty ''Alternative'' always matches and does not consume any input.

Consecutive ''Term''s try to simultaneously match consecutive portions of the input.

If the left ''Alternative'', the right ''Term'', and the remainder of the regular expression all have choice points, all choices in the remained of the expression are tried before moving on to the next choice in the right ''Term'', and all choices in the right ''Term'' are tried before moving on to the next choice in the left ''Alternative''.

{{example|code=
#include &lt;iostream&gt;
#include &lt;regex&gt;

void show_matches(const std::string&amp; in, const std::string&amp; re)
{
    std::smatch m;
    std::regex_search(in, m, std::regex(re));
    if(m.empty()) {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: NO MATCH\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: &quot;;
        std::cout &lt;&lt; &quot;prefix=[&quot; &lt;&lt; m.prefix() &lt;&lt; &quot;] &quot;;
        for(std::size_t n = 0; n &lt; m.size(); ++n)
            std::cout &lt;&lt; &quot; m[&quot; &lt;&lt; n &lt;&lt; &quot;]=[&quot; &lt;&lt; m[n] &lt;&lt; &quot;] &quot;;
        std::cout &lt;&lt; &quot;suffix=[&quot; &lt;&lt; m.suffix() &lt;&lt; &quot;]\n&quot;;
    }
}
int main()
{
    show_matches(&quot;abcdef&quot;, &quot;&quot;); // empty regex is a single empty Alternative
    show_matches(&quot;abc&quot;, &quot;abc{{!}}&quot;); // left Alernative matched first
    show_matches(&quot;abc&quot;, &quot;{{!}}abc&quot;); // left Alernative matched first, leaving abc unmatched
}
|output=
input=[abcdef], regex=[]: prefix=[]  m[0]=[] suffix=[abcdef]
input=[abc], regex=[abc{{!}}]: prefix=[]  m[0]=[abc] suffix=[]
input=[abc], regex=[{{!}}abc]: prefix=[]  m[0]=[] suffix=[abc]
}}

===Quantifiers===
* Each ''Term'' is either an ''Assertion'' (see below), or an ''Atom'' (see below), or an ''Atom'' immediately followed by a ''Quantifier''

''Term'' ::
: ''Assertion''
: ''Atom''
: ''Atom'' ''Quantifier''

Each ''Quantifier'' is either a ''greedy'' quantifier (which consists of just one ''QuantifierPrefix'') or a ''non-greedy'' quantifier (which consists of one ''QuantifierPrefix'' followed by the question mark {{ttb|?}}).

''Quantifier'' ::
: ''QuantifierPrefix''
: ''QuantifierPrefix'' {{ttb|?}}

Each ''QuantifierPrefix'' determines two numbers: the minimum number of repetitions and the maximum number of repetitions, as follows:
{|table class=wikitable
|-
!QuantifierPrefix||Minimum||Maximum
|-
| {{ttb|*}}
| zero
| infinity
|-
| {{ttb|+}}
| one
| infinity
|-
| {{ttb|?}}
| zero
| one
|-
| {{ttb|{ }} ''DecimalDigits'' {{ttb|} }}
| value of DecimalDigits
| value of DecimalDigits
|-
| {{ttb|{}} ''DecimalDigits'' {{ttb|,}} {{ttb|} }}
| value of DecimalDigits
| infinity
|-
| {{ttb|{}} ''DecimalDigits'' {{ttb|,}} ''DecimalDigits'' {{ttb|} }}
| value of DecimalDigits before the comma
| value of DecimalDigits after the comma
|}

The values of the individual ''DecimalDigits'' are obtained by calling {{lc|std::regex_traits::value}}{{mark|C++ only}} on each of the digits.

An ''Atom'' followed by a ''Quantifier'' is repeated the number of times specified by the ''Quantifier''. A ''Quantifier'' can be ''non-greedy'', in which case the ''Atom'' pattern is repeated as few times as possible while still matching the remainder of the regular expression, or it can be ''greedy'', in which case the ''Atom'' pattern is repeated as many times as possible while still matching the remainder of the regular expression.

The ''Atom'' pattern is what is repeated, not the input that it matches, so different repetitions of the ''Atom'' can match different input substrings.

If the ''Atom'' and the remainder of the regular expression all have choice points, the ''Atom'' is first matched as many (or as few, if ''non-greedy'') times as possible. All choices in the remainder of the regular expression are tried before moving on to the next choice in the last repetition of ''Atom''. All choices in the last (nth) repetition of ''Atom'' are tried before moving on to the next choice in the next-to-last (n–1)st repetition of ''Atom''; at which point it may turn out that more or fewer repetitions of ''Atom'' are now possible; these are exhausted (again, starting with either as few or as many as possible) before moving on to the next choice in the (n-1)st repetition of ''Atom'' and so on.

The ''Atom'''s captures are cleared each time it is repeated (see the {{c|&quot;(z)((a+)?(b+)?(c))*&quot;}} example below)

{{example|code=
#include &lt;iostream&gt;
#include &lt;regex&gt;

void show_matches(const std::string&amp; in, const std::string&amp; re)
{
    std::smatch m;
    std::regex_search(in, m, std::regex(re));
    if(m.empty()) {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: NO MATCH\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: &quot;;
        std::cout &lt;&lt; &quot;prefix=[&quot; &lt;&lt; m.prefix() &lt;&lt; &quot;] &quot;;
        for(std::size_t n = 0; n &lt; m.size(); ++n)
            std::cout &lt;&lt; &quot; m[&quot; &lt;&lt; n &lt;&lt; &quot;]=[&quot; &lt;&lt; m[n] &lt;&lt; &quot;] &quot;;
        std::cout &lt;&lt; &quot;suffix=[&quot; &lt;&lt; m.suffix() &lt;&lt; &quot;]\n&quot;;
    }
}
int main()
{
    // greedy match, repeats [a-z] 4 times
    show_matches(&quot;abcdefghi&quot;, &quot;a[a-z]{2,4}&quot;);
    // non-greedy match, repeats [a-z] 2 times
    show_matches(&quot;abcdefghi&quot;, &quot;a[a-z]{2,4}?&quot;);

    // Choice point ordering for quantifiers results in a match
    // with two repetitions, first matching the substring &quot;aa&quot;,
    // second matching the substring &quot;ba&quot;, leaving &quot;ac&quot; not matched
    // (&quot;ba&quot; appears in the capture clause m[1])
    show_matches(&quot;aabaac&quot;, &quot;(aa{{!}}aabaac{{!}}ba{{!}}b{{!}}c)*&quot;);

    // Choice point ordering for quantifiers makes this regex 
    // calculate the greatest common divisor between 10 and 15
    // (the answer is 5, and it populates m[1] with &quot;aaaaa&quot;)
    show_matches(&quot;aaaaaaaaaa,aaaaaaaaaaaaaaa&quot;, &quot;^(a+)\\1*,\\1+$&quot;);

    // the substring &quot;bbb&quot; does not appear in the capture clause m[4]
    // because it is cleared when the second repetition of the atom
    // (a+)?(b+)?(c) is matching the substring &quot;ac&quot;
    show_matches(&quot;zaacbbbcac&quot;, &quot;(z)((a+)?(b+)?(c))*&quot;);
}
|output=
input=[abcdefghi], regex=[a[a-z]{2,4}]: prefix=[]  m[0]=[abcde] suffix=[fghi]
input=[abcdefghi], regex=[a[a-z]{2,4}?]: prefix=[]  m[0]=[abc] suffix=[defghi]
input=[aabaac], regex=[(aa{{!}}aabaac{{!}}ba{{!}}b{{!}}c)*]:
 prefix=[]  m[0]=[aaba]  m[1]=[ba] suffix=[ac]
input=[aaaaaaaaaa,aaaaaaaaaaaaaaa], regex=[^(a+)\1*,\1+$]:
 prefix=[]  m[0]=[aaaaaaaaaa,aaaaaaaaaaaaaaa]  m[1]=[aaaaa] suffix=[]
input=[zaacbbbcac], regex=[(z)((a+)?(b+)?(c))*]:
prefix=[]  m[0]=[zaacbbbcac]  m[1]=[z]  m[2]=[ac]  m[3]=[a]  m[4]=[]  m[5]=[c] suffix=[]
}}

===Assertions===
''Assertion''s match conditions, rather than substrings of the input string. They never consume any characters from the input. Each ''Assertion'' is one of the following

''Assertion'' ::
: {{ttb|^}}
: {{ttb|$}}
: {{ttb|\}} {{ttb|b}}
: {{ttb|\}} {{ttb|B}}
: {{ttb|(}} {{ttb|?}} {{ttb|{{=}}}} ''Disjunction'' {{ttb|)}}
: {{ttb|(}} {{ttb|?}} {{ttb|!}} ''Disjunction'' {{ttb|)}}

The assertion {{ttb|^}} (beginning of line) matches 
@1@ The position that immediately follows a ''LineTerminator'' character {{rev inl|until=c++17|(this may not be supported)}}{{rev inl|since=c++17| (this is only guaranteed if {{ltt|cpp/regex/syntax_option_type|std::regex_constants::multiline}}{{mark|C++ only}} is enabled)}}
@2@ The beginning of the input (unless {{lc|std::regex_constants::match_not_bol}}{{mark|C++ only}} is enabled)

The assertion {{ttb|$}} (end of line) matches
@1@ The position of a ''LineTerminator'' character {{rev inl|until=c++17|(this may not be supported)}}{{rev inl|since=c++17|(this is only guaranteed if {{ltt|cpp/regex/syntax_option_type|std::regex_constants::multiline}}{{mark|C++ only}} is enabled)}}
@2@ The end of the input (unless {{lc|std::regex_constants::match_not_eol}}{{mark|C++ only}} is enabled)

In the two assertions above and in the Atom {{ttb|.}} below, ''LineTerminator'' is one of the following four charactes: {{tt|U+000A}} ({{tt|\n}} or line feed), {{tt|U+000D}} ({{tt|\r}} or carriage return), {{tt|U+2028}} (line separator), or {{tt|U+2029}} (paragraph separator)

The assertion {{ttb|\b}} (word boundary) matches 
@1@ The beginning of a word (current character is a letter, digit, or underscore, and the previous character is not)
@2@ The end of a word (current character is not a letter, digit, or underscore, and the previous character is one of those)
@3@ The beginning of input if the first character is a letter, digit, or underscore (unless {{lc|std::regex_constants::match_not_bow}}{{mark|C++ only}} is enabled)
@4@ The end of input if the last character is a letter, digit, or underscore (unless {{lc|std::regex_constants::match_not_eow}}{{mark|C++ only}} is enabled)

The assertion {{ttb|\B}} (negative word boundary) matches everything EXCEPT the following
@1@ The beginning of a word (current character is a letter, digit, or underscore, and the previous character is not one of those or does not exist)
@2@ The end of a word (current character is not a letter, digit, or underscore (or the matcher is at the end of input), and the previous character is one of those)

The assertion {{ttb|(}} {{ttb|?}} {{ttb|{{=}}}} ''Disjunction'' {{ttb|)}} (zero-width positive lookahead) matches if ''Disjunction'' would match the input at the current position

The assertion {{ttb|(}} {{ttb|?}} {{ttb|!}} ''Disjunction'' {{ttb|)}} (zero-width negative lookahead) matches if ''Disjunction'' would NOT match the input at the current position.

For both Lookahead assertions, when matching the ''Disjunction'', the position is not advanced before matching the remainder of the regular expression. Also, if ''Disjunction'' can match at the current position in several ways, only the first one is tried.

ECMAScript forbids backtracking into the lookahead Disjunctions, which affects the behavior of backreferences into a positive lookahead from the remainder of the regular expression (see example below). Backreferences into the negative lookahead from the rest of the regular expression are always undefined (since the lookahead Disjunction must fail to proceed).

Note: Lookahead assertions may be used to create logical AND between multiple regular expressions (see example below)

{{example|code=
#include &lt;iostream&gt;
#include &lt;regex&gt;

void show_matches(const std::string&amp; in, const std::string&amp; re)
{
    std::smatch m;
    std::regex_search(in, m, std::regex(re));
    if(m.empty()) {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: NO MATCH\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;input=[&quot; &lt;&lt; in &lt;&lt; &quot;], regex=[&quot; &lt;&lt; re &lt;&lt; &quot;]: &quot;;
        std::cout &lt;&lt; &quot;prefix=[&quot; &lt;&lt; m.prefix() &lt;&lt; &quot;] &quot;;
        for(std::size_t n = 0; n &lt; m.size(); ++n)
            std::cout &lt;&lt; &quot; m[&quot; &lt;&lt; n &lt;&lt; &quot;]=[&quot; &lt;&lt; m[n] &lt;&lt; &quot;] &quot;;
        std::cout &lt;&lt; &quot;suffix=[&quot; &lt;&lt; m.suffix() &lt;&lt; &quot;]\n&quot;;
    }
}
int main()
{
    // matches the a at the end of input
    show_matches(&quot;aaa&quot;, &quot;a$&quot;);

    // matches the o at the end of the first word
    show_matches(&quot;moo goo gai pan&quot;, &quot;o\\b&quot;);

    // the lookahead matches the empty string immediately after the first b
    // this populates m[1] with &quot;aaa&quot; although m[0] is empty
    show_matches(&quot;baaabac&quot;, &quot;(?=(a+))&quot;);

    // because backtracking into lookaheads is prohibited, 
    // this matches aba rather than aaaba
    show_matches(&quot;baaabac&quot;, &quot;(?=(a+))a*b\\1&quot;);

    // logical AND via lookahead: this password matches IF it contains
    // at least one lowercase letter
    // AND at least one uppercase letter
    // AND at least one punctuation character
    // AND be at least 6 characters long
    show_matches(&quot;abcdef&quot;, &quot;(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}&quot;);
    show_matches(&quot;aB,def&quot;, &quot;(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}&quot;);
}
| output=
input=[aaa], regex=[a$]: prefix=[aa]  m[0]=[a] suffix=[]
input=[moo goo gai pan], regex=[o\b]: prefix=[mo]  m[0]=[o] suffix=[ goo gai pan]
input=[baaabac], regex=[(?=(a+))]: prefix=[b]  m[0]=[]  m[1]=[aaa] suffix=[aaabac]
input=[baaabac], regex=[(?=(a+))a*b\1]: prefix=[baa]  m[0]=[aba]  m[1]=[a] suffix=[c]
input=[abcdef], regex=[(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}]:
 NO MATCH
input=[aB,def], regex=[(?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,}]:
 prefix=[]  m[0]=[aB,def] suffix=[]
}}

===Atoms===
An ''Atom'' can be one of the following:

''Atom'' ::
: ''PatternCharacter''
: {{ttb|.}}
: {{ttb|\}} ''AtomEscape''
: ''CharacterClass''
: {{ttb|(}} ''Disjunction'' {{ttb|)}}
: {{ttb|(}} {{ttb|?}} {{ttb|:}} ''Disjunction'' {{ttb|)}}

where
''AtomEscape'' ::
: ''DecimalEscape''
: ''CharacterEscape''
: ''CharacterClassEscape''

Different kinds of atoms evaluate differently.

===Sub-expressions===
The ''Atom'' {{ttb|(}} ''Disjunction'' {{ttb|)}} is marked subexpression: it executes the ''Disjunction'' and stores the copy of the input substring that was consumed by ''Disjunction'' in the submatch array at the index that corresponds to the number of times the left open parenthesis {{ttb|(}} of marked subexpressions has been encountered in the entire regular expression at this point.

Besides being returned in the {{lc|std::match_results}}, the captured submatches are accessible as back-references ({{tt|\1}}, {{tt|\2}}, ...) and can be referenced in {{lc|std::regex_replace}})

The ''Atom'' {{ttb|(}} {{ttb|?}} {{ttb|:}} ''Disjunction'' {{ttb|)}} (non-marking subexpression) simply evaluates the ''Disjunction'' and does not store its results in the submatch. This is a purely lexical grouping.

{{example}}

===Backreferences===
''DecimalEscape'' ::
: ''DecimalIntegerLiteral'' [''lookahead'' ∉ ''DecimalDigit'']

If {{ttb|\}} is followed by a decimal number {{tt|N}} whose first digit is not {{tt|0}}, then the escape sequence is considered to be a ''backreference''. The values {{tt|N}} is obtained by calling {{lc|std::regex_traits::value}}{{mark|C++ only}} on each of the digits and combining their results using base-10 arithmetic. It is an error if {{tt|N}} is greater than the total number of left capturing parentheses in the entire regular expression.

When a backreference {{tt|\N}} appears as an Atom, it matches the same substring as what is currently stored in the N'th element of the submatch array.

The decimal escape {{tt|\0}} is NOT a backreference: it is a character escape that represents the nul character. It cannot be followed by a decimal digit.

{{example}}

===Single character matches===
The ''Atom'' {{ttb|.}} matches and consumes any one character from the input string except for ''LineTerminator'' ({{tt|U+000D}}, {{tt|U+000A}}, {{tt|U+2029}}, or {{tt|U+2028}})

The ''Atom'' ''PatternCharacter'', where ''PatternCharacter'' is any ''SourceCharacter'' EXCEPT the characters {{ttb|^ $ \ . * + ? ( ) [ ] { } {{!}}}}, matches and consumes one character from the input if it is equal to this ''PatternCharacter''.

The equality for this and all other single character matches is defined as follows:
@1@ If {{lc|std::regex_constants::icase}} is set, the characters are equal if the return values of {{lc|std::regex_traits::translate_nocase}} are equal.{{mark|C++ only}}
@2@ otherwise, if {{lc|std::regex_constants::collate}} is set, the characters are equal if the return values of {{lc|std::regex_traits::translate}} are equal.{{mark|C++ only}}
@3@ otherwise, the characters are equal if operator== returns true.

Each ''Atom'' that consists of the escape character {{ttb|\}} followed by ''CharacterEscape'' as well as the special DecimalEscape {{ttb|\0}}, matches and consumes one character from the input if it is equal to the character represented by the ''CharacterEscape''. The following character escape sequences are recognized:

''CharacterEscape'' ::
: ''ControlEscape''
: {{ttb|c}} ''ControlLetter''
: ''HexEscapeSequence''
: ''UnicodeEscapeSequence''
: ''IdentityEscape''

Here, ''ControlEscape'' is one of the following five characters: {{ttb|f n r t v}}

{|table class=wikitable
|-
!ControlEscape||Code Unit||Name
|-
| {{ttb|f}}
| U+000C
| form feed
|-
| {{ttb|n}}
| U+000A
| new line
|-
| {{ttb|r}}
| U+000D
| carriage return
|-
| {{ttb|t}}
| U+0009
| horizontal tab
|-
| {{ttb|v}}
| U+000B
| vertical tab
|}

''ControlLetter'' is any lowercase or uppercase ASCII letters and this character escape matches the character whose code unit equals the remainder of dividing the value of the code unit of ''ControlLetter'' by {{c|32}}, for example, {{ttb|\cD}} and {{ttb|\cd}} both match code unit {{tt|U+0004}} (EOT) because 'D' is {{tt|U+0044}}, and {{tt|0x44 % 32 {{==}} 4}} and 'd' is {{tt|U+0064}} and {{tt|0x64 % 32 {{==}} 4}}.

''HexEscapeSequence'' is the letter {{ttb|x}} followed by exactly two ''HexDigit''s (where ''HexDigit'' is one of {{ttb|0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F}}). This character escape matches the character whose code unit equals the numeric value of the two-digit hexadecimal number

''UnicodeEscapeSequence'' is the letter {{ttb|u}} followed by exactly four ''HexDigit''s. This character escape matches the character whose code unit equals the numeric value of this four-digit hexadecimal number. If the value does not fit in this {{lc|std::basic_regex}}'s CharT, {{lc|std::regex_error}} is thrown{{mark|C++ only}}.

''IdentityEscape'' can be any non-alphanumeric character: for example, another backslash. It matches the character as-is.

{{example}}

===Character classes===
An Atom can represent a character class, that is, it will match and consume one character if it belongs to one of the predefined groups of characters.

A character class can be introduced through a character class escape:

''Atom'' ::
: {{ttb|\}} ''CharacterClassEscape''

or directly

''Atom'' ::
: ''CharacterClass''

The character class escapes are shorthands for some of the common characters classes, as follows:

{|table class=wikitable
|-
!CharacterClassEscape||ClassName expression{{mark|C++ only}}||Meaning
|-
| {{ttb|d}}
| {{ttb|&lt;nowiki&gt;[[&lt;/nowiki&gt;:digit:]]}}
| digits
|-
| {{ttb|D}}
| {{ttb|[^[:digit:]]}}
| non-digits
|-
| {{ttb|s}}
| {{ttb|&lt;nowiki&gt;[[&lt;/nowiki&gt;:space:]]}}
| whitespace characters
|-
| {{ttb|S}}
| {{ttb|[^[:space:]]}}
| non-whitespace characters
|-
| {{ttb|w}}
| {{ttb|[_[:alnum:]]}}
| alphanumeric characters and the character {{ttb|_}}
|-
| {{ttb|W}}
| {{ttb|[^_[:alnum:]]}}
| characters other than alphanumeric or {{ttb|_}}
|}{{small|The exact meaning of each of these character class escapes in C++ is defined in terms of the locale-dependent named character classes, and not by explicitly listing the acceptable characters as in ECMAScript.}}

A ''CharacterClass'' is a bracket-enclosed sequence of ''ClassRanges'', optionally beginning with the negation operator {{ttb|^}}. If it begins with {{ttb|^}}, this ''Atom'' matches any character that is NOT in the set of characters represented by the union of all ''ClassRanges''. Otherwise, this ''Atom'' matches any character that IS in the set of the characters represented by the union of all ''ClassRanges''.

''CharacterClass'' ::
: {{ttb|[}} {{ttb|[}} ''lookahead ∉ {''{{ttb|^}}''}]'' ''ClassRanges'' {{ttb|]}}
: {{ttb|[}} {{ttb|^}} ''ClassRanges'' {{ttb|]}}

ClassRanges ::
: [empty]
: ''NonemptyClassRanges''

''NonemptyClassRanges'' ::
: ''ClassAtom''
: ''ClassAtom'' ''NonemptyClassRangesNoDash''
: ''ClassAtom'' - ''ClassAtom'' ''ClassRanges''

If non-empty class range has the form {{ttb|''ClassAtom'' - ''ClassAtom''}}, it matches any character from a range defined as follows: {{mark|C++ only}}

The first ''ClassAtom'' must match a single collating element {{tt|c1}} and the second ''ClassAtom'' must match a single collating element {{tt|c2}}. To test if the input character {{tt|c}} is matched by this range, the following steps are taken:
@1@ If {{lc|std::regex_constants::collate}} is not on, the character is matched by direct comparison of code points: {{tt|c}} is matched if {{tt|c1 &lt;{{=}} c &amp;&amp; c &lt;{{=}} c2}}
@1@ Otherwise (if {{lc|std::regex_constants::collate}} is enabled):
:@1@ If {{lc|std::regex_constants::icase}} is enabled, all three characters ({{tt|c}}, {{tt|c1}}, and {{tt|c2}}) are passed {{lc|std::regex_traits::translate_nocase}}
:@2@ Otherwise (if {{lc|std::regex_constants::icase}} is not set), all three characters ({{tt|c}}, {{tt|c1}}, and {{tt|c2}}) are passed {{lc|std::regex_traits::translate}}
@2@ The resulting strings are compared using {{lc|std::regex_traits::transform}} and the character {{tt|c}} is matched if {{tt|transformed c1 &lt;{{=}} transformed c &amp;&amp; transformed c &lt;{{=}} transformed c2}}

The character {{ttb|-}} is treated literally if it is
* the first or last character of ''ClassRanges''
* the beginning or end ClassAtom of a dash-separated range specification
* immediately follows a dash-separated range specification.
* escaped with a backslash as a ''CharacterEscape''

NonemptyClassRangesNoDash ::
: ''ClassAtom''
: ''ClassAtomNoDash'' ''NonemptyClassRangesNoDash''
: ''ClassAtomNoDash'' - ''ClassAtom'' ''ClassRanges''

''ClassAtom'' ::
: {{ttb|-}}
: ''ClassAtomNoDash''
: ''ClassAtomExClass''{{mark|C++ only}}
: ''ClassAtomCollatingElement''{{mark|C++ only}}
: ''ClassAtomEquivalence''{{mark|C++ only}}

ClassAtomNoDash ::
: ''SourceCharacter'' but not one of {{ttb|\ or ] or -}}
: {{ttb|\}} ''ClassEscape''

Each ''ClassAtomNoDash'' represents a single character -- either ''SourceCharacter'' as-is or escaped as follows:

ClassEscape ::
: ''DecimalEscape''
: {{ttb|b}}
: ''CharacterEscape''
: ''CharacterClassEscape''

The special ''ClassEscape'' {{ttb|\b}} produces a character set that matches the code unit U+0008 (backspace). Outside of ''CharacterClass'', it is the word-boundary ''Assertion''.

The use of {{ttb|\B}} and the use of any backreference (''DecimalEscape'' other than zero) inside a ''CharacterClass'' is an error.

The characters {{ttb|-}} and {{ttb|]}} may need to be escaped in some situations in order to be treated as atoms. Other characters that have special meaning outside of ''CharacterClass'', such as {{ttb|*}} or {{ttb|?}}, do not need to be escaped.

{{example}}

===POSIX-based character classes===
These character classes are an extension to the ECMAScript grammar, and are equivalent to character classes found in the the POSIX regular expressions.

ClassAtomExClass{{mark|C++ only}} ::
: {{ttb|[:}} ''ClassName'' {{ttb|:]}}

Represents all characters that are members of the named character class ''ClassName''. The name is valid only if {{lc|std::regex_traits::lookup_classname}} returns non-zero for this name. As described in {{lc|std::regex_traits::lookup_classname}}, the following names are guaranteed to be recognized: {{ttb|alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper, xdigit, d, s, w}}. Additional names may be provided by system-supplied locales (such as {{ttb|jdigit}} or {{ttb|jkanji}} in Japanese) or implemented as a user-defined extension.

ClassAtomCollatingElement{{mark|C++ only}} ::
: {{ttb|[.}} ''ClassName'' {{ttb|.]}}

Represents the named collating element, which may represent a single character or a sequence of characters that collates as a single unit under the imbued locale, such as {{tt|[.tilde.]}} or {{tt|[.ch.]}} in Czech. The name is valid only if {{lc|std::regex_traits::lookup_collatename}} is not an empty string.

When using {{lc|std::regex_constants::collate}}, collating elements can always be used as ends points of a range (e.g. {{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;.dz.]-g]}} in Hungarian).

ClassAtomEquivalence{{mark|C++ only}} ::
: {{ttb|[{{=}}}} ''ClassName'' {{ttb|{{=}}]}}

Represents all characters that are members of the same equivalence class as the named collating element, that is, all characters whose whose primary collation key is the same as that for collating element ''ClassName''. The name is valid only if {{lc|std::regex_traits::lookup_collatename}} for that name is not an empty string and if the value returned by {{lc|std::regex_traits::transform_primary}} for the result of the call to {{lc|std::regex_traits::lookup_collatename}} is not an empty string.

A primary sort key is one that ignores case, accentation, or locale-specific tailorings; so for example {{tt|&lt;nowiki&gt;[[&lt;/nowiki&gt;{{=}}a{{=}}]]}} matches any of the characters: {{tt|a, À, Á, Â, Ã, Ä, Å, A, à, á, â, ã, ä and å. }}

ClassName{{mark|C++ only}} ::
: ClassNameCharacter
: ClassNameCharacter ClassName

ClassNameCharacter{{mark|C++ only}} ::
: ''SourceCharacter'' but not one of {{ttb|. {{=}} :}}

{{example}}</text>
      <sha1>0ixr4m0r1zwu54jko46e15nbkc5rhgn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/error type</title>
    <ns>0</ns>
    <id>2322</id>
    <revision>
      <id>90929</id>
      <parentid>64140</parentid>
      <timestamp>2017-03-14T12:40:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="3652">{{cpp/title|n=regex_constants::|error_type}}
{{cpp/regex/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl | since=c++11 | 1=
typedef /*implementation defined*/ error_type;
}}
{{dcl rev multi| since1=c++11 | dcl1=
constexpr error_type error_collate = /*unspecified*/;
constexpr error_type error_ctype = /*unspecified*/;
constexpr error_type error_escape = /*unspecified*/;
constexpr error_type error_backref = /*unspecified*/;
constexpr error_type error_brack = /*unspecified*/;
constexpr error_type error_paren = /*unspecified*/;
constexpr error_type error_brace = /*unspecified*/;
constexpr error_type error_badbrace = /*unspecified*/;
constexpr error_type error_range = /*unspecified*/;
constexpr error_type error_space = /*unspecified*/;
constexpr error_type error_badrepeat = /*unspecified*/;
constexpr error_type error_complexity = /*unspecified*/;
constexpr error_type error_stack = /*unspecified*/;
|since2=c++17|dcl2=
inline constexpr error_type error_collate = /*unspecified*/;
inline constexpr error_type error_ctype = /*unspecified*/;
inline constexpr error_type error_escape = /*unspecified*/;
inline constexpr error_type error_backref = /*unspecified*/;
inline constexpr error_type error_brack = /*unspecified*/;
inline constexpr error_type error_paren = /*unspecified*/;
inline constexpr error_type error_brace = /*unspecified*/;
inline constexpr error_type error_badbrace = /*unspecified*/;
inline constexpr error_type error_range = /*unspecified*/;
inline constexpr error_type error_space = /*unspecified*/;
inline constexpr error_type error_badrepeat = /*unspecified*/;
inline constexpr error_type error_complexity = /*unspecified*/;
inline constexpr error_type error_stack = /*unspecified*/;
}}
{{dcl end}}

The {{tt|error_type}} is a type that describes errors that may occur during regular expression parsing.

===Constants===

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|error_collate}} | the expression contains an invalid collating element name}}
{{dsc | {{tt|error_ctype}} | the expression contains an invalid character class name}}
{{dsc | {{tt|error_escape}} | the expression contains an invalid escaped character or a trailing escape}}
{{dsc | {{tt|error_backref}} | the expression contains an invalid back reference}}
{{dsc | {{tt|error_brack}} | the expression contains mismatched square brackets ('[' and ']')}}
{{dsc | {{tt|error_paren}} | the expression contains mismatched parentheses ('(' and ')')}}
{{dsc | {{tt|error_brace}} | the expression contains mismatched curly braces ('{' and '}')}}
{{dsc | {{tt|error_badbrace}} | the expression contains an invalid range in a {} expression}}
{{dsc | {{tt|error_range}} | the expression contains an invalid character range (e.g. [b-a])}}
{{dsc | {{tt|error_space}} | there was not enough memory to convert the expression into a finite state machine}}
{{dsc | {{tt|error_badrepeat}} | one of *?+{ was not preceded by a valid regular expression}}
{{dsc | {{tt|error_complexity}} | the complexity of an attempted match exceeded a predefined level}}
{{dsc | {{tt|error_stack}} | there was not enough memory to perform a match}}
{{dsc end}}

===Notes===
In C++11, these constants were specified with redundant keyword {{tt|static}}, which was removed by C++14 via [http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2053 LWG issue 2053]

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_error }}
{{dsc end}}

[[de:cpp/regex/error type]]
[[es:cpp/regex/error type]]
[[fr:cpp/regex/error type]]
[[it:cpp/regex/error type]]
[[ja:cpp/regex/error type]]
[[pt:cpp/regex/error type]]
[[ru:cpp/regex/error type]]
[[zh:cpp/regex/error type]]</text>
      <sha1>dx1azt4ouvhmq1jstyp0rpexvjg29xo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match flag type</title>
    <ns>0</ns>
    <id>2321</id>
    <revision>
      <id>90931</id>
      <parentid>68862</parentid>
      <timestamp>2017-03-14T12:43:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="4424">{{cpp/title|n=regex_constants::|match_flag_type}}
{{cpp/regex/navbar}}
{{dcl begin}}
{{dcl header | regex }}
{{dcl | since=c++11 | 1=
typedef /*unspecified*/ match_flag_type;
}}
{{dcl rev multi | since1=c++11 | dcl1=
constexpr match_flag_type match_default = 0;
constexpr match_flag_type match_not_bol = /*unspecified*/;
constexpr match_flag_type match_not_eol = /*unspecified*/;
constexpr match_flag_type match_not_bow = /*unspecified*/;
constexpr match_flag_type match_not_eow = /*unspecified*/;
constexpr match_flag_type match_any = /*unspecified*/;
constexpr match_flag_type match_not_null = /*unspecified*/;
constexpr match_flag_type match_continuous = /*unspecified*/;
constexpr match_flag_type match_prev_avail = /*unspecified*/;
constexpr match_flag_type format_default = 0;
constexpr match_flag_type format_sed = /*unspecified*/;
constexpr match_flag_type format_no_copy = /*unspecified*/;
constexpr match_flag_type format_first_only = /*unspecified*/;
|since2=c++17|dcl2=
inline constexpr match_flag_type match_default = 0;
inline constexpr match_flag_type match_not_bol = /*unspecified*/;
inline constexpr match_flag_type match_not_eol = /*unspecified*/;
inline constexpr match_flag_type match_not_bow = /*unspecified*/;
inline constexpr match_flag_type match_not_eow = /*unspecified*/;
inline constexpr match_flag_type match_any = /*unspecified*/;
inline constexpr match_flag_type match_not_null = /*unspecified*/;
inline constexpr match_flag_type match_continuous = /*unspecified*/;
inline constexpr match_flag_type match_prev_avail = /*unspecified*/;
inline constexpr match_flag_type format_default = 0;
inline constexpr match_flag_type format_sed = /*unspecified*/;
inline constexpr match_flag_type format_no_copy = /*unspecified*/;
inline constexpr match_flag_type format_first_only = /*unspecified*/;

}}
{{dcl end}}

{{tt|match_flag_type}} is a {{concept|BitmaskType}} that specifies additional regular expression matching options. 

===Constants===

Note: {{tt|[first, last)}} refers to the character sequence being matched.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|match_not_bol}} | The first character in ''[first,last)'' will be treated as if it is '''not''' at the beginning of a line (i.e. ''^'' will not match ''[first,first)''}}
{{dsc | {{tt|match_not_eol}} | The last character in ''[first,last)'' will be treated as if it is '''not''' at the end of a line (i.e. ''$'' will not match ''[last,last)}}
{{dsc | {{tt|match_not_bow}} | ''&quot;\b&quot;'' will not match ''[first,first)''}}
{{dsc | {{tt|match_not_eow}} | ''&quot;\b&quot;'' will not match ''[last,last)''}}
{{dsc | {{tt|match_any}} | If more than one match is possible, then any match is an acceptable result}}
{{dsc | {{tt|match_not_null}} | Do not match empty sequences}}
{{dsc | {{tt|match_continuous}} | Only match a sub-sequence that begins at ''first''}}
{{dsc | {{tt|match_prev_avail}} | ''--first'' is a valid iterator position.  When set, causes ''match_not_bol'' and ''match_not_bow'' to be ignored}}
{{dsc | {{tt|format_default}} | Use ECMAScript rules to construct strings in {{lc|std::regex_replace}} ([http://ecma-international.org/ecma-262/5.1/#sec-15.5.4.11 syntax documentation])}}
{{dsc | {{tt|format_sed}} | Use POSIX ''sed'' utility rules in {{lc|std::regex_replace}}. ([http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html#tag_20_116_13_03 syntax documentation])}}
{{dsc | {{tt|format_no_copy}} | Do not copy un-matched strings to the output in {{lc|std::regex_replace}}}}
{{dsc | {{tt|format_first_only}} | Only replace the first match in {{lc|std::regex_replace}}}}
{{dsc end}}

All constants, except for {{tt|match_default}} and {{tt|format_default}}, are bitmask elements. The {{tt|match_default}} and {{tt|format_default}} constants are empty bitmasks

===Notes===
In C++11, these constants were specified with redundant keyword {{tt|static}}, which was removed by C++14 via [http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2053 LWG issue 2053]

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_match}}
{{dsc inc | cpp/regex/dsc syntax_option_type}}
{{dsc inc | cpp/regex/dsc error_type}}
{{dsc end}}

[[de:cpp/regex/match flag type]]
[[es:cpp/regex/match flag type]]
[[fr:cpp/regex/match flag type]]
[[it:cpp/regex/match flag type]]
[[ja:cpp/regex/match flag type]]
[[pt:cpp/regex/match flag type]]
[[ru:cpp/regex/match flag type]]
[[zh:cpp/regex/match flag type]]</text>
      <sha1>b54wl656q2vz581yvoiw9ax3gjl9z1p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results</title>
    <ns>0</ns>
    <id>2281</id>
    <revision>
      <id>89878</id>
      <parentid>89877</parentid>
      <timestamp>2017-01-27T21:18:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>patrial undo: back to std::pmr, but accepting BidirIt since that's whats listed under type requirements lower</comment>
      <text xml:space="preserve" bytes="5101">{{cpp/title|match_results}}
{{cpp/regex/match_results/navbar}}
{{dcl begin}}
{{dcl header|regex}}
{{dcl | num=1| since=c++11 | 1=
template&lt;
    class BidirIt,
    class Alloc = std::allocator&lt;std::sub_match&lt;BidirIt&gt;&gt;
&gt; class match_results;
}}
{{dcl|num=2|since=c++17|1=
namespace pmr {
    template &lt;class BidirIt&gt;
    using match_results = std::match_results&lt;BidirIt,
                              std::pmr::polymorphic_allocator&lt;
                                  std::sub_match&lt;BidirIt&gt;&gt;&gt;;
}
}}
{{dcl end}}

The class template {{lc|std::match_results}} holds a collection of character sequences that represent the result of a regular expression match.

This is a specialized allocator-aware container.  It can only be default created, obtained from {{lc|std::regex_iterator}}, or modified by {{lc|std::regex_search}} or {{lc|std::regex_match}}. Because {{tt|std::match_results}} holds {{lc|std::sub_match}}es, each of which is a pair of iterators into the original character sequence that was matched, it's undefined behavior to examine {{tt|std::match_results}} if the original character sequence was destroyed or iterators to it were invalidated for other reasons.

The first {{tt|sub_match}} (index 0) contained in a {{tt|match_result}} always represents the full match within a target sequence made by a regex, and subsequent {{tt|sub_match}}es represent sub-expression matches corresponding in sequence to the left parenthesis delimiting the sub-expression in the regex.

{{tt|std::match_results}} meets the requirements of a constant {{concept|AllocatorAwareContainer}} and of a constant {{concept|SequenceContainer}}, except that the semantics of comparison functions are different from those required for a container.

===Type requirements===
{{par begin}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par req concept | Alloc | Allocator}}
{{par end}}

===Specializations===
Several specializations for common character sequence types are provided: 

{{dsc begin}}
{{dsc header | regex}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|std::cmatch}} | {{c|std::match_results&lt;const char*&gt;}}}}
{{dsc | {{tt|std::wcmatch}} | {{c|std::match_results&lt;const wchar_t*&gt;}}}}
{{dsc | {{tt|std::smatch}} | {{c|std::match_results&lt;std::string::const_iterator&gt;}}}}
{{dsc | {{tt|std::wsmatch}} | {{c|std::match_results&lt;std::wstring::const_iterator&gt;}}}}
{{dsc | {{tt|std::pmr::cmatch}} {{mark c++17}} | {{c|std::pmr::match_results&lt;const char*&gt;}}}}
{{dsc | {{tt|std::pmr::wcmatch}} {{mark c++17}}| {{c|std::pmr::match_results&lt;const wchar_t*&gt;}}}}
{{dsc | {{tt|std::pmr::smatch}} {{mark c++17}}| {{c|std::pmr::match_results&lt;std::string::const_iterator&gt;}}}}
{{dsc | {{tt|std::pmr::wsmatch}} {{mark c++17}}| {{c|std::pmr::match_results&lt;std::wstring::const_iterator&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|allocator_type}} | {{c|Allocator}}}}
{{dsc | {{tt|value_type}} | {{c|std::sub_match&lt;BidirIt&gt;}}}}
{{dsc | {{tt|const_reference}} | {{c|const value_type&amp;}}}}
{{dsc | {{tt|reference}} | {{c|value_type&amp;}}}}
{{dsc | {{tt|const_iterator}} | ''implementation defined'' (depends on the underlying container)}}
{{dsc | {{tt|iterator}} | {{c|const_iterator}}}}
{{dsc | {{tt|difference_type}} | {{c|std::iterator_traits&lt;BidirIt&gt;::difference_type}}}}
{{dsc | {{tt|size_type}} | {{c|std::allocator_traits&lt;Alloc&gt;::size_type}}}}
{{dsc | {{tt|char_type}} | {{c|std::iterator_traits&lt;BidirIt&gt;::value_type}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;char_type&gt;}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc constructor}}
{{dsc inc | cpp/regex/match_results/dsc destructor}}
{{dsc inc | cpp/regex/match_results/dsc operator{{=}}}}
{{dsc inc | cpp/regex/match_results/dsc get_allocator}}

{{dsc h2 | State}}
{{dsc mem fun | cpp/regex/match_results/ready | checks if the results are available}}

{{dsc h2 | Size}}
{{dsc inc | cpp/regex/match_results/dsc empty}}
{{dsc inc | cpp/regex/match_results/dsc size}}
{{dsc inc | cpp/regex/match_results/dsc max_size}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/regex/match_results/dsc length}}
{{dsc inc | cpp/regex/match_results/dsc position}}
{{dsc inc | cpp/regex/match_results/dsc str}}
{{dsc inc | cpp/regex/match_results/dsc operator_at}}
{{dsc inc | cpp/regex/match_results/dsc prefix}}
{{dsc inc | cpp/regex/match_results/dsc suffix}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/regex/match_results/dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc end}}

{{dsc h2 | Format}}
{{dsc inc | cpp/regex/match_results/dsc format}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/regex/match_results/dsc swap}}

{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc operator_cmp}}
{{dsc inc | cpp/regex/match_results/dsc swap2}}
{{dsc end}}

[[de:cpp/regex/match results]]
[[es:cpp/regex/match results]]
[[fr:cpp/regex/match results]]
[[it:cpp/regex/match results]]
[[ja:cpp/regex/match results]]
[[ko:cpp/regex/match results]]
[[pt:cpp/regex/match results]]
[[ru:cpp/regex/match results]]
[[zh:cpp/regex/match results]]</text>
      <sha1>j1znh9o7kjtduex01jozaum4k37e49k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/begin</title>
    <ns>0</ns>
    <id>3121</id>
    <revision>
      <id>91485</id>
      <parentid>62923</parentid>
      <timestamp>2017-03-31T19:47:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="947">{{cpp/regex/match_results/title | begin | cbegin}}
{{cpp/regex/match_results/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
iterator begin();
}}
{{dcl | since=c++11 |
const_iterator begin() const;
}}
{{dcl | since=c++11 |
const_iterator cbegin() const;
}}
{{dcl end}}

Returns an iterator to the beginning of the list of sub-matches. If match was successful, the iterator will point to the entire matched expression.

===Parameters===
(none)

===Return value===
Iterator to the first sub-match.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc end}}
{{dsc end}}

[[de:cpp/regex/match results/begin]]
[[es:cpp/regex/match results/begin]]
[[fr:cpp/regex/match results/begin]]
[[it:cpp/regex/match results/begin]]
[[ja:cpp/regex/match results/begin]]
[[pt:cpp/regex/match results/begin]]
[[ru:cpp/regex/match results/begin]]
[[zh:cpp/regex/match results/begin]]</text>
      <sha1>7tterbelp02ts3im0ynncffk24gb90q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/empty</title>
    <ns>0</ns>
    <id>3118</id>
    <revision>
      <id>83735</id>
      <parentid>63407</parentid>
      <timestamp>2016-03-07T17:20:36Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="764">{{cpp/regex/match_results/title | empty}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
bool empty() const;
}}
Checks whether the match was successful.

===Parameters===
(none)

===Return value===
{{c|1= size() == 0}} ({{c|false}} if {{tt|*this}} represents the result of a successful match, {{c|true}} otherwise)

===Exceptions===
(none)

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc size}}
{{dsc end}}

[[de:cpp/regex/match results/empty]]
[[es:cpp/regex/match results/empty]]
[[fr:cpp/regex/match results/empty]]
[[it:cpp/regex/match results/empty]]
[[ja:cpp/regex/match results/empty]]
[[pt:cpp/regex/match results/empty]]
[[ru:cpp/regex/match results/empty]]
[[zh:cpp/regex/match results/empty]]</text>
      <sha1>3pgbb51rh3rv88797ru5oagqwk3z8jt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/end</title>
    <ns>0</ns>
    <id>3123</id>
    <revision>
      <id>91574</id>
      <parentid>62924</parentid>
      <timestamp>2017-03-31T19:50:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="850">{{cpp/regex/match_results/title | end | cend}}
{{cpp/regex/match_results/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
iterator end();
}}
{{dcl | since=c++11 |
const_iterator end() const;
}}
{{dcl | since=c++11 |
const_iterator cend() const;
}}
{{dcl end}}

Returns an iterator to the end of the list of sub-matches.

===Parameters===
(none)

===Return value===
Iterator to the element past the last sub-match.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc begin}}
{{dsc end}}

[[de:cpp/regex/match results/end]]
[[es:cpp/regex/match results/end]]
[[fr:cpp/regex/match results/end]]
[[it:cpp/regex/match results/end]]
[[ja:cpp/regex/match results/end]]
[[pt:cpp/regex/match results/end]]
[[ru:cpp/regex/match results/end]]
[[zh:cpp/regex/match results/end]]</text>
      <sha1>96r8eje4rldg17p3ucc8amgw7p7g1k5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/format</title>
    <ns>0</ns>
    <id>9046</id>
    <revision>
      <id>62925</id>
      <parentid>58841</parentid>
      <timestamp>2013-07-01T23:46:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="3823">{{cpp/regex/match_results/title|format}}
{{cpp/regex/match_results/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class OutputIt &gt;
OutputIter format( OutputIt out,
                   const char_type* fmt_first, const char_type* fmt_last,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::format_default ) const;
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class OutputIt, class ST, class SA &gt;
OutputIter format( OutputIt out,
                   const basic_string&lt;char_type,ST,SA&gt;&amp; fmt,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::format_default ) const;
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class ST, class SA &gt;
std::basic_string&lt;char_type,ST,SA&gt; 
    format( const std::basic_string&lt;char_type,ST,SA&gt;&amp; fmt,
            std::regex_constants::match_flag_type flags =
                std::regex_constants::format_default ) const;
}}
{{dcl | num=4 | since=c++11 | 1=
string_type format( const char_type* fmt_s,
                    std::regex_constants::match_flag_type flags =
                        std::regex_constants::format_default ) const;
}}
{{dcl end}}

{{tt|format}} outputs a format string, replacing any format specifiers or escape sequences in that string with match data from {{c|*this}}.

@1@ The format character sequence is defined by the range {{tt|[fmt_first, fmt_last)}}. The resulting character sequence is copied to {{tt|out}}.
@2@ The format character sequence is defined by the characters in {{tt|fmt}}. The resulting character sequence is copied to {{tt|out}}.
@3-4@ The format character sequence is defined by the characters in {{tt|fmt}} and {{tt|fmt_s}} respectively. The resulting character sequence is copied to a newly constructed {{lc|std::basic_string}}, which is returned.

The {{tt|flags}} bitmask determines which format specifiers and escape sequences are recognized.

The behavior of {{tt|format}} is undefined if {{c|1=ready() != true}}.

===Parameters===
{{par begin}}
{{par | fmt_begin, fmt_end | pointers to a range of characters defining the format character sequence}}
{{par | fmt | {{lc|std::basic_string}} defining the format character sequence}}
{{par | fmt_s | pointer to a null-terminated character string defining the format character sequence}}
{{par | out | iterator that the resulting character sequence is copied to}}
{{par | flags | {{lc|std::regex_constants::match_flag_type}} bitmask specifying which format specifiers and escape sequences are recognized}}
{{par hreq}}
{{par req concept | OutputIt | OutputIterator}}
{{par end}}

===Return value===
@1-2@ {{tt|out}}
@3-4@ The newly constructed string containing resulting character sequence.

===Exceptions===
(none)

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;regex&gt;

int main()
{
    std::string s = &quot;for a good time, call 867-5309&quot;;
    std::regex phone_regex(&quot;\\d{3}-\\d{4}&quot;);
    std::smatch phone_match;

    if (std::regex_search(s, phone_match, phone_regex)) {
        std::string fmt_s = phone_match.format(
            &quot;$`&quot;    // $` means characters before the match
            &quot;[$&amp;]&quot;  // $&amp; means the matched characters
            &quot;$'&quot;);  // $' means characters following the match
        std::cout &lt;&lt; fmt_s &lt;&lt; '\n';
    }   
}
 | output=
for a good time, call [867-5309]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_replace }}
{{dsc inc | cpp/regex/dsc match_flag_type}}
{{dsc end}}

[[de:cpp/regex/match results/format]]
[[es:cpp/regex/match results/format]]
[[fr:cpp/regex/match results/format]]
[[it:cpp/regex/match results/format]]
[[ja:cpp/regex/match results/format]]
[[pt:cpp/regex/match results/format]]
[[ru:cpp/regex/match results/format]]
[[zh:cpp/regex/match results/format]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/get allocator</title>
    <ns>0</ns>
    <id>3117</id>
    <revision>
      <id>63408</id>
      <parentid>41849</parentid>
      <timestamp>2013-07-10T01:31:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="659">{{cpp/regex/match_results/title | get_allocator}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
allocator_type get_allocator() const;
}}

Returns the allocator associated with the object.

===Parameters===
(none)

===Return value===
The associated allocator.

===Complexity===
Constant.

[[de:cpp/regex/match results/get allocator]]
[[es:cpp/regex/match results/get allocator]]
[[fr:cpp/regex/match results/get allocator]]
[[it:cpp/regex/match results/get allocator]]
[[ja:cpp/regex/match results/get allocator]]
[[pt:cpp/regex/match results/get allocator]]
[[ru:cpp/regex/match results/get allocator]]
[[zh:cpp/regex/match results/get allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/length</title>
    <ns>0</ns>
    <id>3214</id>
    <revision>
      <id>63409</id>
      <parentid>58842</parentid>
      <timestamp>2013-07-10T01:31:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1103">{{cpp/regex/match_results/title | length}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
difference_type length( size_type n {{=}} 0 ) const;
}}

Returns the length of the specified sub-match.

If {{c|1=n == 0}}, the length of the entire matched expression is returned.

If {{c|n &gt; 0 &amp;&amp; n &lt; size()}}, the length of ''n''th sub-match is returned.

if {{c|1=n &gt;= size()}}, a length of the unmatched match is returned.

The call is equivalent to {{c|(*this)[n].length()}}.

===Parameters===
{{par begin}}
{{par | n | integral number specifying which match to examine}}
{{par end}}

===Return value===
The length of the specified match or sub-match.

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc operator_at}}
{{dsc inc | cpp/regex/sub_match/dsc length}}
{{dsc end}}

[[de:cpp/regex/match results/length]]
[[es:cpp/regex/match results/length]]
[[fr:cpp/regex/match results/length]]
[[it:cpp/regex/match results/length]]
[[ja:cpp/regex/match results/length]]
[[pt:cpp/regex/match results/length]]
[[ru:cpp/regex/match results/length]]
[[zh:cpp/regex/match results/length]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/match results</title>
    <ns>0</ns>
    <id>3218</id>
    <revision>
      <id>91446</id>
      <parentid>62926</parentid>
      <timestamp>2017-03-31T19:44:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1345">{{cpp/regex/match_results/title | match_results}}
{{cpp/regex/match_results/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
explicit match_results( const Allocator&amp; a = Allocator() );
}}
{{dcl | num=2 | since=c++11 | 1= 
match_results( const match_results&amp; rhs );
}}
{{dcl | num=3 | since=c++11 | 1= 
match_results( match_results&amp;&amp; rhs );
}}
{{dcl end}}

@1@ Default-constructor. Constructs a match result with no established result state ({{c|1=ready() != true}}).

@2@ Copy-constructor. Constructs a match result with a copy of {{tt|rhs}}.

@3@ Move-constructor. Constructs a match result with the contents of {{tt|rhs}} using move semantics. {{tt|rhs}} is in valid, but unspecified state after the call.

===Parameters===
{{par begin}}
{{par | a | allocator to use for all memory allocations of this container}}
{{par | rhs | another match_result to use as source to initialize the match_result with}}
{{par end}}

===Exceptions===
@1-2@ (none)
@3@ {{unreviewed noexcept}}

[[de:cpp/regex/match results/match results]]
[[es:cpp/regex/match results/match results]]
[[fr:cpp/regex/match results/match results]]
[[it:cpp/regex/match results/match results]]
[[ja:cpp/regex/match results/match results]]
[[pt:cpp/regex/match results/match results]]
[[ru:cpp/regex/match results/match results]]
[[zh:cpp/regex/match results/match results]]</text>
      <sha1>pjb0hw87tj02jjp00w2jqbrma01kjab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/max size</title>
    <ns>0</ns>
    <id>3120</id>
    <revision>
      <id>91651</id>
      <parentid>63410</parentid>
      <timestamp>2017-03-31T19:53:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="818">{{cpp/regex/match_results/title | max_size}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
size_type max_size() const;
}}

Returns the maximum number of submatches the {{tt|match_results}} type is able to hold due to system or library implementation limitations, i.e. {{c|std::distance(begin(), end())}} for the largest number of submatches.

===Parameters===
(none)

===Return value===
Maximum number of submatches

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

[[de:cpp/regex/match results/max size]]
[[es:cpp/regex/match results/max size]]
[[fr:cpp/regex/match results/max size]]
[[it:cpp/regex/match results/max size]]
[[ja:cpp/regex/match results/max size]]
[[pt:cpp/regex/match results/max size]]
[[ru:cpp/regex/match results/max size]]
[[zh:cpp/regex/match results/max size]]</text>
      <sha1>sg078bakuw9j4uvx43drpvkibztzm8q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/operator at</title>
    <ns>0</ns>
    <id>3261</id>
    <revision>
      <id>89264</id>
      <parentid>74269</parentid>
      <timestamp>2017-01-14T20:28:09Z</timestamp>
      <contributor>
        <ip>173.34.98.172</ip>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2035">{{cpp/regex/match_results/title | operator[]}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
const_reference operator[]( size_type n ) const;
}}

If {{c|n &gt; 0}} and {{c|n &lt; size()}}, returns a reference to the {{lc|std::sub_match}} representing the part of the target sequence that was matched by the ''n''th captured  [[cpp/regex/ecmascript#Sub-expressions|marked subexpression]]).

If {{c|1=n == 0}}, returns a reference to the {{lc|std::sub_match}} representing the part of the target sequence matched by the entire matched regular expression.

if {{c|1=n &gt;= size()}}, returns a reference to a {{lc|std::sub_match}} representing an unmatched sub-expression (an empty subrange of the target sequence).

The behavior is undefined unless {{c|ready() {{==}} true}}

===Parameters===
{{par begin}}
{{par | n | integral number specifying which match to return}}
{{par end}}

===Return value===
Reference to the {{lc|std::sub_match}} representing the specified matched subrange within the target sequence.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;

int main()
{
    std::string target(&quot;baaaby&quot;);
    std::smatch sm;

    std::regex re1(&quot;a(a)*b&quot;);
    std::regex_search(target, sm, re1);
    std::cout &lt;&lt; &quot;entire match: &quot; &lt;&lt; sm[0] &lt;&lt; '\n'
              &lt;&lt; &quot;submatch #1: &quot; &lt;&lt; sm[1] &lt;&lt; '\n';

    std::regex re2(&quot;a(a*)b&quot;);
    std::regex_search(target, sm, re2);
    std::cout &lt;&lt; &quot;entire match: &quot; &lt;&lt; sm[0] &lt;&lt; '\n'
              &lt;&lt; &quot;submatch #1: &quot; &lt;&lt; sm[1] &lt;&lt; '\n';

}
 | output=
entire match: aaab
submatch #1: a
entire match: aaab
submatch #1: aa
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc str}}
{{dsc end}}

[[de:cpp/regex/match results/operator at]]
[[es:cpp/regex/match results/operator at]]
[[fr:cpp/regex/match results/operator at]]
[[it:cpp/regex/match results/operator at]]
[[ja:cpp/regex/match results/operator at]]
[[pt:cpp/regex/match results/operator at]]
[[ru:cpp/regex/match results/operator at]]
[[zh:cpp/regex/match results/operator at]]</text>
      <sha1>9iueuq4ka5e4zr1poeuh1ga4vpkm3oi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/operator cmp</title>
    <ns>0</ns>
    <id>9044</id>
    <revision>
      <id>83213</id>
      <parentid>83212</parentid>
      <timestamp>2016-01-24T16:28:30Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1952">{{title | 1=operator==,!={{small|(std::match_results)}}}}
{{cpp/regex/match_results/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class BidirIt, class Alloc &gt;
bool operator==( match_results&lt;BidirIt,Alloc&gt;&amp; lhs,
                 match_results&lt;BidirIt,Alloc&gt;&amp; rhs );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class BidirIt, class Alloc &gt;
bool operator!=( match_results&lt;BidirIt,Alloc&gt;&amp; lhs,
                 match_results&lt;BidirIt,Alloc&gt;&amp; rhs );
}}
{{dcl end}}

Compares two {{tt|match_results}} objects.

Two {{tt|match_results}} are equal if the following conditions are met:
* neither of the objects is ''ready'', ''or''
* both match results are ''ready'' and the following conditions are met: 
:* {{c|lhs.empty()}} and {{c|rhs.empty()}}, ''or''
:* {{c|!lhs.empty()}} and {{c|!rhs.empty()}} and the following conditions are met:
::* {{c|1=lhs.prefix() == rhs.prefix()}}
::* {{c|1=lhs.size() == rhs.size() &amp;&amp; std::equal(lhs.begin(), lhs.end(), rhs.begin())}}
::* {{c|1=lhs.suffix() == rhs.suffix()}}

@1@ Checks if {{tt|lhs}} and {{c|rhs}} are equal.
@2@ Checks if {{tt|lhs}} and {{c|rhs}} are not equal.

===Parameters===
{{par begin}}
{{par | lhs, rhs | match results to compare}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par req concept | Alloc | Allocator}}
{{par end}}

===Return value===
@1@ {{c|true}} if {{tt|lhs}} and {{tt|rhs}} are equal, {{c|false}} otherwise.
@2@ {{c|true}} if {{tt|lhs}} and {{tt|rhs}} are not equal, {{c|false}} otherwise.

===Exceptions===
(none)

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/regex/match results/operator cmp]]
[[es:cpp/regex/match results/operator cmp]]
[[fr:cpp/regex/match results/operator cmp]]
[[it:cpp/regex/match results/operator cmp]]
[[ja:cpp/regex/match results/operator cmp]]
[[pt:cpp/regex/match results/operator cmp]]
[[ru:cpp/regex/match results/operator cmp]]
[[zh:cpp/regex/match results/operator cmp]]</text>
      <sha1>4fhw860iz3m9vb801vnsmzux3deaz32</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/operator=</title>
    <ns>0</ns>
    <id>9045</id>
    <revision>
      <id>91589</id>
      <parentid>62927</parentid>
      <timestamp>2017-03-31T19:50:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1075">{{cpp/regex/match_results/title | operator{{=}}}}
{{cpp/regex/match_results/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl | num=1 | since=c++11 | 1=
match_results&amp; operator=( const match_results&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
match_results&amp; operator=( match_results&amp;&amp; other );
}}
{{dcl end}}

Assigns the contents.

@1@ Copy assignment operator. Assigns the contents of {{tt|other}}. 

@2@ Move assignment operator. Assigns the contents of {{tt|other}} using move semantics. {{tt|other}} is in valid, but unspecified state after the operation. 

===Parameters===
{{par begin}}
{{par | other | another match results object}}
{{par end}}

===Return value===
{{c|*this}}.

===Exceptions===
@1@ (none)
@2@ {{unreviewed noexcept}}

[[de:cpp/regex/match results/operator=]]
[[es:cpp/regex/match results/operator=]]
[[fr:cpp/regex/match results/operator=]]
[[it:cpp/regex/match results/operator=]]
[[ja:cpp/regex/match results/operator=]]
[[pt:cpp/regex/match results/operator=]]
[[ru:cpp/regex/match results/operator=]]
[[zh:cpp/regex/match results/operator=]]</text>
      <sha1>7v6l5g7r5eiiwyw041sh047s07vsfow</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/position</title>
    <ns>0</ns>
    <id>3253</id>
    <revision>
      <id>80542</id>
      <parentid>79308</parentid>
      <timestamp>2015-08-19T21:49:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>match name of the parameter to the rest of the page</comment>
      <text xml:space="preserve" bytes="1435">{{cpp/regex/match_results/title | position}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
difference_type position( size_type n {{=}} 0 ) const;
}}

Returns the position of the first character of the specified sub-match.

If {{c|1=n == 0}}, the position of the first character of the entire matched expression is returned.

If {{c|n &gt; 0 &amp;&amp; n &lt; size()}}, the position of the first character of the ''n''th sub-match is returned.

if {{c|1=n &gt;= size()}}, a position of the first character of the unmatched match is returned.

===Parameters===
{{par begin}}
{{par | n | integral number specifying which match to examine}}
{{par end}}

===Return value===
The position of the first character of the specified match or sub-match.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;

int main()
{
    std::regex re(&quot;a(a)*b&quot;);
    std::string target(&quot;aaab&quot;);
    std::smatch sm;

    std::regex_match(target, sm, re);
    std::cout &lt;&lt; sm.position(1) &lt;&lt; '\n';
}
 | output=
1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc operator_at}}
{{dsc end}}

[[de:cpp/regex/match results/position]]
[[es:cpp/regex/match results/position]]
[[fr:cpp/regex/match results/position]]
[[it:cpp/regex/match results/position]]
[[ja:cpp/regex/match results/position]]
[[pt:cpp/regex/match results/position]]
[[ru:cpp/regex/match results/position]]
[[zh:cpp/regex/match results/position]]</text>
      <sha1>mt6r10iej6p5yqplioxaf01k5rcn01k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/prefix</title>
    <ns>0</ns>
    <id>3259</id>
    <revision>
      <id>74267</id>
      <parentid>63413</parentid>
      <timestamp>2014-12-10T21:54:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reword to match suffix</comment>
      <text xml:space="preserve" bytes="1067">{{cpp/regex/match_results/title | prefix}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
const_reference prefix() const;
}}

Obtains a reference to the {{lc|std::sub_match}} object representing the target sequence between the start of the beginning of the target sequence and the start of the entire match of the regular expression.

The behavior is undefined unless {{c|ready() {{==}} true}}

===Parameters===
(none)

===Return value===
Reference to the unmatched prefix.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;

int main()
{
  std::regex re(&quot;a(a)*b&quot;);
  std::string target(&quot;baaaby&quot;);
  std::smatch sm;

  std::regex_search(target, sm, re);
  std::cout &lt;&lt; sm.prefix().str() &lt;&lt; '\n';
}
 | output=
b
}}

[[de:cpp/regex/match results/prefix]]
[[es:cpp/regex/match results/prefix]]
[[fr:cpp/regex/match results/prefix]]
[[it:cpp/regex/match results/prefix]]
[[ja:cpp/regex/match results/prefix]]
[[pt:cpp/regex/match results/prefix]]
[[ru:cpp/regex/match results/prefix]]
[[zh:cpp/regex/match results/prefix]]</text>
      <sha1>k5n1pdfep9gbbl734lf1geq2vlxjler</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/ready</title>
    <ns>0</ns>
    <id>3217</id>
    <revision>
      <id>66576</id>
      <parentid>66575</parentid>
      <timestamp>2013-12-08T16:56:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1417">{{cpp/regex/match_results/title | ready}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
bool ready() const;
}}

Indicates if the match results are ready (valid) or not.

A default-constructed match result has no result state (is not ''ready''), and can only be made ready by one of the regex algorithms.  The ''ready'' state implies that all match results have been fully established.

The result of calling most member functions of the match_results object that is not ''ready'' is undefined.

===Return value===

{{c|true}} if the match results are ready, {{c|false}} otherwise.

===Example===
{{example|
code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;

int main()
{
    std::string target(&quot;pattern&quot;);
    std::smatch sm;
    std::cout &lt;&lt; &quot;default constructed smatch is &quot;
              &lt;&lt; (sm.ready() ? &quot; ready\n&quot; : &quot; not ready\n&quot;);

    std::regex re1(&quot;tte&quot;);
    std::regex_search(target, sm, re1);

    std::cout &lt;&lt; &quot;after search, smatch is &quot;
              &lt;&lt; (sm.ready() ? &quot; ready\n&quot; : &quot; not ready\n&quot;);
}
|output=
default constructed smatch is  not ready
after search, smatch is  ready
}}


[[de:cpp/regex/match results/ready]]
[[es:cpp/regex/match results/ready]]
[[fr:cpp/regex/match results/ready]]
[[it:cpp/regex/match results/ready]]
[[ja:cpp/regex/match results/ready]]
[[pt:cpp/regex/match results/ready]]
[[ru:cpp/regex/match results/ready]]
[[zh:cpp/regex/match results/ready]]</text>
      <sha1>7kvvjduc4ednqayoc17lo1xp8ldxys1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/size</title>
    <ns>0</ns>
    <id>3119</id>
    <revision>
      <id>91529</id>
      <parentid>83734</parentid>
      <timestamp>2017-03-31T19:49:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1169">{{cpp/regex/match_results/title | size}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
size_type size() const;
}}

Returns the number of submatches, i.e. {{c|std::distance(begin(), end())}}.

Returns {{tt|0}} if {{tt|*this}} does not represent the result of a successful match.

===Parameters===
(none)

===Return value===
The number of submatches

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;

int main()
{
    std::regex re(&quot;a(a)*b&quot;);
    std::string target(&quot;aaab&quot;);
    std::smatch sm;

    std::cout &lt;&lt; sm.size() &lt;&lt; '\n';

    std::regex_match(target, sm, re);
    std::cout &lt;&lt; sm.size() &lt;&lt; '\n';
}
 | output=
0
2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc end}}
{{dsc end}}

[[de:cpp/regex/match results/size]]
[[es:cpp/regex/match results/size]]
[[fr:cpp/regex/match results/size]]
[[it:cpp/regex/match results/size]]
[[ja:cpp/regex/match results/size]]
[[pt:cpp/regex/match results/size]]
[[ru:cpp/regex/match results/size]]
[[zh:cpp/regex/match results/size]]</text>
      <sha1>000dhgmuyhr1oobfjmevzf96drw6604</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/str</title>
    <ns>0</ns>
    <id>3254</id>
    <revision>
      <id>66573</id>
      <parentid>66569</parentid>
      <timestamp>2013-12-08T16:48:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>same as operator[]</comment>
      <text xml:space="preserve" bytes="1681">{{cpp/regex/match_results/title | str}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 | 1=
string_type str( size_type n = 0 ) const;
}}

Returns a string representing the indicated sub-match.  

If {{c|1=n == 0}}, a string representing entire matched expression is returned.

If {{c|n &gt; 0 &amp;&amp; n &lt; size()}}, a string representing ''n''th sub-match is returned.

if {{c|1=n &gt;= size()}}, a string representing the unmatched match is returned.

The call is equivalent to {{c|string_type((*this)[n])}};

===Parameters===
{{par begin}}
{{par | n | integral number specifying which match to return}}
{{par end}}

===Return value===
Returns a string representing the specified match or sub match.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;
 
int main()
{
    std::string target(&quot;baaaby&quot;);
    std::smatch sm;
 
    std::regex re1(&quot;a(a)*b&quot;);
    std::regex_search(target, sm, re1);
    std::cout &lt;&lt; &quot;entire match: &quot; &lt;&lt; sm.str(0) &lt;&lt; '\n'
              &lt;&lt; &quot;submatch #1: &quot; &lt;&lt; sm.str(1) &lt;&lt; '\n';

    std::regex re2(&quot;a(a*)b&quot;);
    std::regex_search(target, sm, re2);
    std::cout &lt;&lt; &quot;entire match: &quot; &lt;&lt; sm.str(0) &lt;&lt; '\n'
              &lt;&lt; &quot;submatch #1: &quot; &lt;&lt; sm.str(1) &lt;&lt; '\n';

}
 | output=
entire match: aaab
submatch #1: a
entire match: aaab
submatch #1: aa
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc operator_at}}
{{dsc end}}

[[de:cpp/regex/match results/str]]
[[es:cpp/regex/match results/str]]
[[fr:cpp/regex/match results/str]]
[[it:cpp/regex/match results/str]]
[[ja:cpp/regex/match results/str]]
[[pt:cpp/regex/match results/str]]
[[ru:cpp/regex/match results/str]]
[[zh:cpp/regex/match results/str]]</text>
      <sha1>kcpmms5dywg73ks3km6tfxl438bq4cg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/suffix</title>
    <ns>0</ns>
    <id>3260</id>
    <revision>
      <id>74266</id>
      <parentid>63417</parentid>
      <timestamp>2014-12-10T21:54:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>reword/address minor todo</comment>
      <text xml:space="preserve" bytes="1055">{{cpp/regex/match_results/title | suffix}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
const_reference suffix() const;
}}

Obtains a reference to the {{lc|std::sub_match}} object representing the target sequence between the end of the entire match of the regular expression and the end of the target sequence

The behavior is undefined unless {{c|ready() {{==}} true}}

===Parameters===
(none)

===Return value===
Reference to the unmatched suffix.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;

int main()
{
    std::regex re(&quot;a(a)*b&quot;);
    std::string target(&quot;baaaby&quot;);
    std::smatch sm;

    std::regex_search(target, sm, re);
    std::cout &lt;&lt; sm.suffix().str() &lt;&lt; '\n';
}
 | output=
y
}}

[[de:cpp/regex/match results/suffix]]
[[es:cpp/regex/match results/suffix]]
[[fr:cpp/regex/match results/suffix]]
[[it:cpp/regex/match results/suffix]]
[[ja:cpp/regex/match results/suffix]]
[[pt:cpp/regex/match results/suffix]]
[[ru:cpp/regex/match results/suffix]]
[[zh:cpp/regex/match results/suffix]]</text>
      <sha1>8ttx87doqx6fs3hbodom77dmq9oyq7d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/swap</title>
    <ns>0</ns>
    <id>9042</id>
    <revision>
      <id>91586</id>
      <parentid>63418</parentid>
      <timestamp>2017-03-31T19:50:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="799">{{cpp/regex/match_results/title|swap}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
void swap( match_results&amp; other );
}}

Exchanges the shared states of two {{tt|match_results}} objects.

===Parameters===
{{par begin}}
{{par | other | the {{tt|match_results}} to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc swap2}}
{{dsc end}}

[[de:cpp/regex/match results/swap]]
[[es:cpp/regex/match results/swap]]
[[fr:cpp/regex/match results/swap]]
[[it:cpp/regex/match results/swap]]
[[ja:cpp/regex/match results/swap]]
[[pt:cpp/regex/match results/swap]]
[[ru:cpp/regex/match results/swap]]
[[zh:cpp/regex/match results/swap]]</text>
      <sha1>tmjlk350pj6fmmb85e9s8hxf9b3toew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/swap2</title>
    <ns>0</ns>
    <id>9043</id>
    <revision>
      <id>91625</id>
      <parentid>63419</parentid>
      <timestamp>2017-03-31T19:52:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1160">{{cpp/title | swap{{small|(std::match_results)}}}}
{{cpp/regex/match_results/navbar}}
{{ddcl | header=regex | since=c++11 |
template&lt; class BidirIt, class Alloc &gt;
void swap( match_results&lt;BidirIt,Alloc&gt;&amp; x1,
           match_results&lt;BidirIt,Alloc&gt;&amp; x2 );
}}

Specializes the {{lc|std::swap}} algorithm for {{lc|std::match_results}}. Exchanges the contents of {{tt|x1}} with those of {{tt|x2}}. Effectively calls {{c|x1.swap(x2)}}.

===Parameters===
{{par begin}}
{{par | x1, x2 | the match_results objects whose contents will be swapped}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par req concept | Alloc | Allocator}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/match_results/dsc swap}}
{{dsc end}}

[[de:cpp/regex/match results/swap2]]
[[es:cpp/regex/match results/swap2]]
[[fr:cpp/regex/match results/swap2]]
[[it:cpp/regex/match results/swap2]]
[[ja:cpp/regex/match results/swap2]]
[[pt:cpp/regex/match results/swap2]]
[[ru:cpp/regex/match results/swap2]]
[[zh:cpp/regex/match results/swap2]]</text>
      <sha1>oe3lxh2dwsobz27hctdidgdse23rd6b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/match results/~match results</title>
    <ns>0</ns>
    <id>3219</id>
    <revision>
      <id>63420</id>
      <parentid>41806</parentid>
      <timestamp>2013-07-10T01:31:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="628">{{cpp/regex/match_results/title | ~match_results}}
{{cpp/regex/match_results/navbar}}
{{ddcl | since=c++11 |
~match_results();
}}

Destructs the {{tt|match_results}} object and the associated sub-matches.

===Complexity===
Linear in the number of sub-matches.

[[de:cpp/regex/match results/~match results]]
[[es:cpp/regex/match results/~match results]]
[[fr:cpp/regex/match results/~match results]]
[[it:cpp/regex/match results/~match results]]
[[ja:cpp/regex/match results/~match results]]
[[pt:cpp/regex/match results/~match results]]
[[ru:cpp/regex/match results/~match results]]
[[zh:cpp/regex/match results/~match results]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex error</title>
    <ns>0</ns>
    <id>3109</id>
    <revision>
      <id>80251</id>
      <parentid>63421</parentid>
      <timestamp>2015-08-01T12:26:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fixed declaration</comment>
      <text xml:space="preserve" bytes="1154">{{cpp/title|regex_error}}
{{cpp/regex/regex_error/navbar}}
{{ddcl | header=regex | since=c++11 | 1=
class regex_error;
}}

Defines the type of exception object thrown to report errors in the regular expressions library.

{{inheritance_diagram/std-regex_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/regex_error/dsc regex_error}}
{{dsc inc | cpp/regex/regex_error/dsc code}}
{{dsc end}}

{{cpp/error/exception/inherit}}

===Example===
{{example|
  |code=
#include &lt;regex&gt;
#include &lt;iostream&gt;

int main()
{
    try {
        std::regex re(&quot;[a-b][a&quot;);
    } 

    catch (const std::regex_error&amp; e) {
        std::cout &lt;&lt; &quot;regex_error caught: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
        if (e.code() == std::regex_constants::error_brack) {
            std::cout &lt;&lt; &quot;The code was error_brack\n&quot;;
        }
    }
}
  |output=
regex_error caught: The expression contained mismatched [ and ].
The code was error_brack
}}

[[de:cpp/regex/regex error]]
[[es:cpp/regex/regex error]]
[[fr:cpp/regex/regex error]]
[[it:cpp/regex/regex error]]
[[ja:cpp/regex/regex error]]
[[pt:cpp/regex/regex error]]
[[ru:cpp/regex/regex error]]
[[zh:cpp/regex/regex error]]</text>
      <sha1>0my6omnzt7rcy9qbtjutzdzfjvrb4ts</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex error/code</title>
    <ns>0</ns>
    <id>8444</id>
    <revision>
      <id>65358</id>
      <parentid>62929</parentid>
      <timestamp>2013-09-10T13:20:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix header</comment>
      <text xml:space="preserve" bytes="717">{{cpp/regex/regex_error/title | code}}
{{cpp/regex/regex_error/navbar}}

{{dcl begin}}
{{dcl header | regex }}
{{dcl | since=c++11 | 1=
std::regex_constants::error_type code() const;
}}
{{dcl end}}

Returns the {{lc|std::regex_constants::error_type}} that was passed to the {{lc|std::regex_error}} constructor.

===See Also===

{{dsc begin}}
{{dsc inc | cpp/regex/dsc error_type}}
{{dsc inc | cpp/regex/regex_error/dsc regex_error}}
{{dsc end}}

[[de:cpp/regex/regex error/code]]
[[es:cpp/regex/regex error/code]]
[[fr:cpp/regex/regex error/code]]
[[it:cpp/regex/regex error/code]]
[[ja:cpp/regex/regex error/code]]
[[pt:cpp/regex/regex error/code]]
[[ru:cpp/regex/regex error/code]]
[[zh:cpp/regex/regex error/code]]</text>
      <sha1>29zf3rzs9vjkqta3v24vsgwiobczpkk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex error/regex error</title>
    <ns>0</ns>
    <id>3107</id>
    <revision>
      <id>65357</id>
      <parentid>62930</parentid>
      <timestamp>2013-09-10T13:19:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix header</comment>
      <text xml:space="preserve" bytes="730">{{cpp/regex/regex_error/title | regex_error}}
{{cpp/regex/regex_error/navbar}}

{{dcl begin}}
{{dcl header | regex }}
{{dcl | since=c++11 | 1=
regex_error(std::regex_constants::error_type ecode);
}}
{{dcl end}}

Constructs a {{tt|regex_error}} with a given {{tt|ecode}} of type {{lc|std::regex_constants::error_type}} .

===See Also===

{{dsc begin}}
{{dsc inc | cpp/regex/dsc error_type}}
{{dsc end}}

[[de:cpp/regex/regex error/regex error]]
[[es:cpp/regex/regex error/regex error]]
[[fr:cpp/regex/regex error/regex error]]
[[it:cpp/regex/regex error/regex error]]
[[ja:cpp/regex/regex error/regex error]]
[[pt:cpp/regex/regex error/regex error]]
[[ru:cpp/regex/regex error/regex error]]
[[zh:cpp/regex/regex error/regex error]]</text>
      <sha1>3jqacdkc3kf6e1gwd60buyywlra6y5r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex iterator</title>
    <ns>0</ns>
    <id>2289</id>
    <revision>
      <id>81109</id>
      <parentid>63422</parentid>
      <timestamp>2015-09-29T18:17:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/and/, ; wikilink assertions</comment>
      <text xml:space="preserve" bytes="4685">{{cpp/title|regex_iterator}}
{{cpp/regex/regex_iterator/navbar}}
{{ddcl | since=c++11 | 1=
template&lt;
    class BidirIt,
    class CharT = typename std::iterator_traits&lt;BidirIt&gt;::value_type,
    class Traits = std::regex_traits&lt;CharT&gt;
&gt; class regex_iterator
}}

{{tt|std::regex_iterator}} is a read-only {{concept|ForwardIterator}} that accesses the individual matches of a regular expression within the underlying character sequence.

On construction, and on every increment, it calls {{lc|std::regex_search}} and remembers the result (that is, saves a copy of the value {{c|std::match_results&lt;BidirIt&gt;}}). The first object may be read when the iterator is constructed or when the first dereferencing is done. Otherwise, dereferencing only returns a copy of the most recently obtained regex match.

The default-constructed {{tt|std::regex_iterator}} is the end-of-sequence iterator. When a valid {{tt|std::regex_iterator}} is incremented after reaching the last match ({{lc|std::regex_search}} returns {{c|false}}), it becomes equal to the end-of-sequence iterator. Dereferencing or incrementing it further invokes undefined behavior.

A typical implementation of {{tt|std::regex_iterator}} holds the begin and the end iterators for the underlying sequence (two instances of BidirIt), a pointer to the regular expression ({{c|const regex_type*}}), the match flags ({{lc|std::regex_constants::match_flag_type}}), and the current match ({{c|std::match_results&lt;BidirIt&gt;}}).

===Type requirements===
{{par begin}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par end}}

===Specializations===
Several specializations for common character sequence types are defined:

{{dsc begin}}
{{dsc header | regex}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|cregex_iterator}} | {{c|regex_iterator&lt;const char*&gt;}}}}
{{dsc | {{tt|wcregex_iterator}} | {{c|regex_iterator&lt;const wchar_t*&gt;}}}}
{{dsc | {{tt|sregex_iterator}} | {{c|regex_iterator&lt;std::string::const_iterator&gt;}}}}
{{dsc | {{tt|wsregex_iterator}} | {{c|regex_iterator&lt;std::wstring::const_iterator&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{c|std::match_results&lt;BidirIt&gt;}} }}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
{{dsc | {{tt|pointer}} | {{c|const value_type*}} }}
{{dsc | {{tt|reference}} | {{c|const value_type&amp;}} }}
{{dsc | {{tt|iterator_category}} | {{lc|std::forward_iterator_tag}} }}
{{dsc | {{tt|regex_type}} | {{c|basic_regex&lt;CharT, Traits&gt;}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/regex_iterator/dsc constructor}}
{{dsc inc | cpp/regex/regex_iterator/dsc destructor}}
{{dsc inc | cpp/regex/regex_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/regex/regex_iterator/dsc operator_cmp}}
{{dsc inc | cpp/regex/regex_iterator/dsc operator*}}
{{dsc inc | cpp/regex/regex_iterator/dsc operator_arith}}
{{dsc end}}

===Notes===
It is the programmer's responsibility to ensure that the {{lc|std::basic_regex}} object passed to the iterator's constructor outlives the iterator. Because the iterator stores a pointer to the regex, incrementing the iterator after the regex was destroyed accesses a dangling pointer.

If the part of the regular expression that matched is just an [[cpp/regex/ecmascript#Assertions|assertion]] ({{tt|^}}, {{tt|$}}, {{tt|\b}}, {{tt|\B}}), the match stored in the iterator is a zero-length match, that is, {{c|1=match[0].first == match[0].second}}.

===Example===
{{example
 | 
 | code=
#include &lt;regex&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    const std::string s = &quot;Quick brown fox.&quot;;

    std::regex words_regex(&quot;[^\\s]+&quot;);
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), words_regex);
    auto words_end = std::sregex_iterator();

    std::cout &lt;&lt; &quot;Found &quot; 
              &lt;&lt; std::distance(words_begin, words_end) 
              &lt;&lt; &quot; words:\n&quot;;

    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;                                                 
        std::string match_str = match.str(); 
        std::cout &lt;&lt; match_str &lt;&lt; '\n';
    }   
}
| output=
Found 3 words:
Quick
brown
fox.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc match_results }}
{{dsc tfun | cpp/regex/regex_search | check if a regular expression occurs anywhere within a string | notes={{mark c++11}}}}
{{dsc begin}}

[[de:cpp/regex/regex iterator]]
[[es:cpp/regex/regex iterator]]
[[fr:cpp/regex/regex iterator]]
[[it:cpp/regex/regex iterator]]
[[ja:cpp/regex/regex iterator]]
[[pt:cpp/regex/regex iterator]]
[[ru:cpp/regex/regex iterator]]
[[zh:cpp/regex/regex iterator]]</text>
      <sha1>lxqw6k90jc06kqagx1m62o8lewwueus</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex iterator/operator arith</title>
    <ns>0</ns>
    <id>12683</id>
    <revision>
      <id>61480</id>
      <parentid>61479</parentid>
      <timestamp>2013-06-06T02:21:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="2334">{{cpp/regex/regex_iterator/title | operator++, operator++{{small|(int)}}}}
{{cpp/regex/regex_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
regex_iterator&amp; operator++();
}}
{{dcl | since=c++11 | 1=
regex_iterator operator++(int);
}}
{{dcl end}}

Advances the iterator on the next match.

{{todo|explain better}}

At first, a local variable of type {{tt|BidirIt}} is constructed with the value of {{c|match[0].second}}. 

If the iterator holds a zero-length match and {{c|start {{==}} end}}, {{c|*this}} is set to end-of-sequence iterator and the function returns.

Otherwise, if the iterator holds a zero-length match the operator invokes the following:

{{cc|regex_search(start, end, match, *pregex, 
                  flags {{!}} regex_constants::match_not_null {{!}} 
                          regex_constants::match_continuous);}} 

If the call returns {{c|true}}, the function returns.

Otherwise the operator increments {{tt|start}} and continues as if the most recent match was not a zero-length match.

If the most recent match was not a zero-length match, the operator sets {{tt|flags}} to {{c|flags {{!}} regex_constants::match_prev_avail}} and invokes the following: 

{{cc|regex_search(start, end, match, *pregex, flags);}}

If the call returns {{c|false}}, the iterator sets {{c|*this}} to the end-of-sequence iterator, the function returns.

In all cases in which the call to {{c|regex_search}} returns {{c|true}}, {{c|match.prefix().first}} will be equal to the previous value of {{c|match[0].second}} and for each index ''i'' in the range ''[0, ''{{cc|match.size()}}'')''
for which {{c|match[i].matched}} is {{c|true}}, {{c|match[i].position()}} will return {{c|distance(begin, match[i].first)}}.

This means that {{c|match[i].position()}} gives the offset from the beginning of the target sequence, which is often not the same as the offset from the sequence passed in the call to {{c|regex_search}}.

It is unspecified how the implementation makes these adjustments. This means that a compiler may call an implementation-specific search function, in which case a user-defined specialization of {{c|regex_search}} will not be called.

The behavior is undefined if the iterator is end-of-sequence iterator.

===Parameters===
(none)

===Return value===
@1@ {{c|*this}}

@2@ The previous value of the iterator.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex iterator/operator cmp</title>
    <ns>0</ns>
    <id>9818</id>
    <revision>
      <id>63946</id>
      <parentid>61019</parentid>
      <timestamp>2013-08-01T15:46:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.4) (Robot: Removing de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="1102">{{cpp/regex/regex_iterator/title | operator{{==}},operator!{{=}} }}
{{cpp/regex/regex_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
bool operator{{==}}(const regex_iterator&amp; rhs) const;
}}
{{dcl | num=2 | since=c++11 | 1=
bool operator!{{=}}(const regex_iterator&amp; rhs) const;
}}
{{dcl end}}

Compares two {{tt|regex_iterator}}s.

For the sake of exposition, assume that {{tt|regex_iterator}} contains the following members:
* {{tt|BidirIt begin}};
* {{tt|BidirIt end}};
* {{c|const regex_type *pregex;}}
* {{c|std::regex_constants::match_flag_type flags;}}
* {{c|std::match_results&lt;BidirIt&gt; match;}}

@1@ Returns {{c|true}} if {{c|*this}} and {{tt|rhs}} are both end-of-sequence iterators, or if all of the following conditions are true:
* {{c|begin {{==}} rhs.begin}}
* {{c|end {{==}} rhs.end}}
* {{c|pregex {{==}} rhs.pregex}}
* {{c|flags {{==}} rhs.flags}}
* {{c|match[0] {{==}} rhs.match[0]}}
 
@2@ Returns {{c|!(*this {{==}} rhs)}}

===Parameters===
{{par begin}}
{{par | rhs | a {{tt|regex_iterator}} to compare to}}
{{par end}}

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex iterator/operator comp</title>
    <ns>0</ns>
    <id>10135</id>
    <redirect title="cpp/regex/regex iterator/operator cmp" />
    <revision>
      <id>48362</id>
      <timestamp>2013-05-27T17:31:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/regex/regex iterator/operator comp]] to [[cpp/regex/regex iterator/operator cmp]]: move to the correct title</comment>
      <text xml:space="preserve" bytes="51">#REDIRECT [[cpp/regex/regex iterator/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex iterator/operator*</title>
    <ns>0</ns>
    <id>9819</id>
    <revision>
      <id>80591</id>
      <parentid>63947</parentid>
      <timestamp>2015-08-21T22:29:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>not regex_match (which is a function), but match_results (which is the value_type)</comment>
      <text xml:space="preserve" bytes="526">{{cpp/regex/regex_iterator/title | operator*,operator-&gt; }}
{{cpp/regex/regex_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
const value_type&amp; operator*() const;
}}
{{dcl | num=2 | since=c++11 | 1=
const value_type* operator-&gt;() const;
}}
{{dcl end}}

Extracts the current {{lc|std::match_results}} from a {{tt|regex_iterator}}:

@1@ Returns a reference to the current {{lc|std::match_results}}.

@2@ Returns a pointer to the current {{lc|std::match_results}}.

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1>n1rxuukivyp8a6uuuq9qmultggzv5h1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex iterator/operator=</title>
    <ns>0</ns>
    <id>12682</id>
    <revision>
      <id>61477</id>
      <timestamp>2013-06-06T02:11:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="357">{{cpp/regex/regex_iterator/title | operator{{=}}}}
{{cpp/regex/regex_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
regex_iterator&amp; operator=( const regex_iterator&amp; other );
}}
{{dcl end}}

Assigns the contents of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | regex iterator to assign}}
{{par end}}

===Return value===
{{c|*this}}.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex iterator/regex iterator</title>
    <ns>0</ns>
    <id>9813</id>
    <revision>
      <id>68869</id>
      <parentid>63945</parentid>
      <timestamp>2014-03-22T20:17:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg 2332</comment>
      <text xml:space="preserve" bytes="1718">{{cpp/regex/regex_iterator/title | regex_iterator}}
{{cpp/regex/regex_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
regex_iterator();
}}
{{dcl | num=2 | since=c++11 | 1= 
regex_iterator(BidirIt a, BidirIt b,
               const regex_type&amp; re,
               std::regex_constants::match_flag_type m =
                   std::regex_constants::match_default);
}}
{{dcl | num=3 | since=c++11 | 1= 
regex_iterator(const regex_iterator&amp;);
}}
{{dcl | num=4 | since=c++14 | 1= 
regex_iterator(BidirIt, BidirIt,
               const regex_type&amp;&amp;,
               std::regex_constants::match_flag_type =
                   std::regex_constants::match_default) = delete;
}}
{{dcl end}}

Constructs a new {{tt|regex_iterator}}:

@1@ Default constructor.  Constructs an end-of-sequence iterator.

@2@ Constructs a {{tt|regex_iterator}} from the sequence of characters {{tt|[a, b)}}, the regular expression {{tt|re}}, and a flag {{tt|m}} that governs matching behavior.  This constructor performs an initial call to {{lc|std::regex_search}} with this data.  If the result of this initial call is {{c|false}}, {{c|*this}} is set to an end-of-sequence iterator.

@3@ Copies a {{tt|regex_iterator}}.

@4@ The overload 2 is not allowed to be called with a temporary regex, since the returned iterator would be immediately invalidated.

===Parameters===
{{par begin}}
{{par | a | {{tt|BidirIt}} to the beginning of the target character sequence}}
{{par | b | {{tt|BidirIt}} to the end of the targe character sequence}}
{{par | re | regular expression used to search the target character sequence}}
{{par | m | flags that govern the behavior of {{tt|re}} }}
{{par end}}

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1>9r58qjisq3axp8n678cajrmhcevwrfz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex match</title>
    <ns>0</ns>
    <id>2288</id>
    <revision>
      <id>88165</id>
      <parentid>88163</parentid>
      <timestamp>2016-11-10T21:03:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>escape |</comment>
      <text xml:space="preserve" bytes="9148">{{cpp/title|regex_match}}
{{cpp/regex/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class BidirIt, 
          class Alloc, class CharT, class Traits &gt;
bool regex_match( BidirIt first, BidirIt last,
                  std::match_results&lt;BidirIt,Alloc&gt;&amp; m,
                  const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                  std::regex_constants::match_flag_type flags = 
                      std::regex_constants::match_default );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class BidirIt, 
          class CharT, class Traits &gt;
bool regex_match( BidirIt first, BidirIt last,
                  const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                  std::regex_constants::match_flag_type flags = 
                      std::regex_constants::match_default );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class CharT, class Alloc, class Traits &gt;
bool regex_match( const CharT* str,
                  std::match_results&lt;const CharT*,Alloc&gt;&amp; m,
                  const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                  std::regex_constants::match_flag_type flags = 
                      std::regex_constants::match_default );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class STraits, class SAlloc, 
          class Alloc, class CharT, class Traits &gt;
bool regex_match( const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp; s,
                  std::match_results&lt;
                      typename std::basic_string&lt;CharT,STraits,SAlloc&gt;::const_iterator,
                      Alloc
                  &gt;&amp; m,
                  const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                  std::regex_constants::match_flag_type flags = 
                      std::regex_constants::match_default );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class CharT, class Traits &gt;
bool regex_match( const CharT* str,
                  const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                  std::regex_constants::match_flag_type flags = 
                      std::regex_constants::match_default );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class STraits, class SAlloc, 
          class CharT, class Traits &gt;
bool regex_match( const std::basic_string&lt;CharT, STraits, SAlloc&gt;&amp; s,
                  const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                  std::regex_constants::match_flag_type flags = 
                      std::regex_constants::match_default );
}}
{{dcl | num=7 | since=c++14 | 1=
template&lt; class STraits, class SAlloc, 
          class Alloc, class CharT, class Traits &gt;
bool regex_match( const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp;&amp;,
                  std::match_results&lt;
                      typename std::basic_string&lt;CharT,STraits,SAlloc&gt;::const_iterator,
                      Alloc
                  &gt;&amp;,
                  const std::basic_regex&lt;CharT,Traits&gt;&amp;,
                  std::regex_constants::match_flag_type flags = 
                      std::regex_constants::match_default ) = delete;
}}
{{dcl end}}

Determines if the regular expression {{tt|el}} matches the entire target character sequence, which may be specified as {{lc|std::string}}, a C-string, or an iterator pair.

@1@ Determines if there is a match between the regular expression {{tt|e}} and the entire target character sequence {{tt|[first,last)}}, taking into account the effect of {{tt|flags}}. When determining if there is a match, only potential matches that match the entire character sequence are considered. Match results are returned in {{tt|m}}.

@2@ Behaves as (1) above, omitting the match results.

@3@ Returns {{c|std::regex_match(str, str + std::char_traits&lt;charT&gt;::length(str), m, e, flags)}}.

@4@ Returns {{c|std::regex_match(s.begin(), s.end(), m, e, flags)}}.

@5@ Returns {{c|std::regex_match(str, str + std::char_traits&lt;charT&gt;::length(str), e, flags)}}.

@6@ Returns {{c|std::regex_match(s.begin(), s.end(), e, flags)}}.

@7@ The overload 4 is prohibited from accepting temporary strings, otherwise this function populates match_results m with string iterators that become invalid immediately.

Note that {{tt|regex_match}} will only successfully match a regular expression to an ''entire'' character sequence, whereas {{lc|std::regex_search}} will successfully match subsequences.

===Parameters===
{{par begin}}
{{par | first, last | the target character range to apply the regex to, given as iterators}}
{{par | m | the match results}}
{{par | str | the target string, given as a null-terminated C-style string}}
{{par | s | the target string, given as a {{lc|std::basic_string}} }}
{{par | e | the regular expression}}
{{par | flags | flags used to determine how the match will be performed}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par end}}

===Return value===
Returns {{c|true}} if a match exists, {{c|false}} otherwise. In either case, the object {{tt|m}} is updated, as follows:

If the match does not exist:
{{dsc begin}}
{{dsc | {{c|1=m.ready() == true}} }}
{{dsc | {{c|1=m.empty() == true}} }}
{{dsc | {{c|1=m.size() == 0}} }}
{{dsc end}}

If the match exists:
{{dsc begin}}
{{dsc | {{c|m.ready()}} | {{c|true}} }}
{{dsc | {{c|m.empty()}} | {{c|false}} }}
{{dsc | {{c|m.size()}}  | [[cpp/regex/ecmascript#Sub-expressions|number of marked subexpressions]] plus 1, that is, {{c|1+e.mark_count()}}}}
{{dsc | {{c|m.prefix().first}} | {{tt|first}} }}
{{dsc | {{c|m.prefix().second}} | {{tt|first}} }}
{{dsc | {{c|m.prefix().matched}} | {{c|false}} (the match prefix is empty) }}
{{dsc | {{c|m.suffix().first}} | {{tt|last}}}}
{{dsc | {{c|m.suffix().second}} | {{tt|last}}}}
{{dsc | {{c|m.suffix().matched}} | {{c|false}} (the match suffix is empty) }}
{{dsc | {{c|m[0].first}} | {{tt|first}} }}
{{dsc | {{c|m[0].second}} | {{tt|last}} }}
{{dsc | {{c|m[0].matched}} | {{c|true}} (the entire sequence is matched)}}
{{dsc | {{c|1=m[n].first}} | the start of the sequence that matched [[cpp/regex/ecmascript#Sub-expressions|marked sub-expression]] n, or {{tt|last}} if the subexpression did not participate in the match}}
{{dsc | {{c|1=m[n].second}} | the end of the sequence that matched [[cpp/regex/ecmascript#Sub-expressions|marked sub-expression]] n, or {{tt|last}} if the subexpression did not participate in the match}}
{{dsc | {{c|1=m[n].matched}} | {{c|true}} if sub-expression n participated in the match, {{c|false}} otherwise}}
{{dsc end}}

===Notes===
Because {{tt|regex_match}} only considers full matches, the same regex may give different matches between {{tt|regex_match}} and {{lc|std::regex_search}}:
{{source|1=
std::regex re(&quot;Get{{!}}GetValue&quot;);
std::cmatch m;
std::regex_search(&quot;GetValue&quot;, m, re);  // returns true, and m[0] contains &quot;Get&quot;
std::regex_match (&quot;GetValue&quot;, m, re);  // returns true, and m[0] contains &quot;GetValue&quot;
std::regex_search(&quot;GetValues&quot;, m, re); // returns true, and m[0] contains &quot;Get&quot;
std::regex_match (&quot;GetValues&quot;, m, re); // returns false
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;regex&gt;

int main()
{
    // Simple regular expression matching
    std::string fnames[] = {&quot;foo.txt&quot;, &quot;bar.txt&quot;, &quot;baz.dat&quot;, &quot;zoidberg&quot;};
    std::regex txt_regex(&quot;[a-z]+\\.txt&quot;);

    for (const auto &amp;fname : fnames) {
        std::cout &lt;&lt; fname &lt;&lt; &quot;: &quot; &lt;&lt; std::regex_match(fname, txt_regex) &lt;&lt; '\n';
    }   

    // Extraction of a sub-match
    std::regex base_regex(&quot;([a-z]+)\\.txt&quot;);
    std::smatch base_match;

    for (const auto &amp;fname : fnames) {
        if (std::regex_match(fname, base_match, base_regex)) {
            // The first sub_match is the whole string; the next
            // sub_match is the first parenthesized expression.
            if (base_match.size() == 2) {
                std::ssub_match base_sub_match = base_match[1];
                std::string base = base_sub_match.str();
                std::cout &lt;&lt; fname &lt;&lt; &quot; has a base of &quot; &lt;&lt; base &lt;&lt; '\n';
            }
        }
    }

    // Extraction of several sub-matches
    std::regex pieces_regex(&quot;([a-z]+)\\.([a-z]+)&quot;);
    std::smatch pieces_match;

    for (const auto &amp;fname : fnames) {
        if (std::regex_match(fname, pieces_match, pieces_regex)) {
            std::cout &lt;&lt; fname &lt;&lt; '\n';
            for (size_t i = 0; i &lt; pieces_match.size(); ++i) {
                std::ssub_match sub_match = pieces_match[i];
                std::string piece = sub_match.str();
                std::cout &lt;&lt; &quot;  submatch &quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; piece &lt;&lt; '\n';
            }   
        }   
    }   
}
 | output=
foo.txt: 1
bar.txt: 1
baz.dat: 0
zoidberg: 0
foo.txt has a base of foo
bar.txt has a base of bar
foo.txt
  submatch 0: foo.txt
  submatch 1: foo
  submatch 2: txt
bar.txt
  submatch 0: bar.txt
  submatch 1: bar
  submatch 2: txt
baz.dat
  submatch 0: baz.dat
  submatch 1: baz
  submatch 2: dat
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc basic_regex}}
{{dsc inc | cpp/regex/dsc match_results}}
{{dsc inc | cpp/regex/dsc regex_search}}
{{dsc end}}

[[de:cpp/regex/regex match]]
[[es:cpp/regex/regex match]]
[[fr:cpp/regex/regex match]]
[[it:cpp/regex/regex match]]
[[ja:cpp/regex/regex match]]
[[pt:cpp/regex/regex match]]
[[ru:cpp/regex/regex match]]
[[zh:cpp/regex/regex match]]</text>
      <sha1>djo7tdcth5c4j0df1t1of7zpgpfwu2w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex replace</title>
    <ns>0</ns>
    <id>3270</id>
    <revision>
      <id>68868</id>
      <parentid>68867</parentid>
      <timestamp>2014-03-22T20:15:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>clarify ret val, too</comment>
      <text xml:space="preserve" bytes="6862">{{cpp/title|regex_replace}}
{{cpp/regex/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class OutputIt, class BidirIt,
          class Traits, class CharT,
          class STraits, class SAlloc &gt;
OutputIt regex_replace( OutputIt out, BidirIt first, BidirIt last,
                        const std::basic_regex&lt;CharT,Traits&gt;&amp; re,
                        const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp; fmt,
                        std::regex_constants::match_flag_type flags {{=}} 
                            std::regex_constants::match_default );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class OutputIt, class BidirIt,
          class Traits, class CharT &gt;
OutputIt regex_replace( OutputIt out, BidirIt first, BidirIt last,
                        const std::basic_regex&lt;CharT,Traits&gt;&amp; re,
                        const CharT* fmt,
                        std::regex_constants::match_flag_type flags {{=}} 
                            std::regex_constants::match_default );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class Traits, class CharT,
          class STraits, class SAlloc,
          class FTraits, class FAlloc &gt;
std::basic_string&lt;CharT,STraits,SAlloc&gt; 
    regex_replace( const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp; s,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; re,
                   const std::basic_string&lt;CharT,FTraits,FAlloc&gt;&amp; fmt,
                   std::regex_constants::match_flag_type flags {{=}} 
                       std::regex_constants::match_default );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class Traits, class CharT,
          class STraits, class SAlloc &gt;
std::basic_string&lt;CharT,STraits,SAlloc&gt; 
    regex_replace( const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp; s,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; re,
                   const CharT* fmt,
                   std::regex_constants::match_flag_type flags {{=}} 
                       std::regex_constants::match_default );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class Traits, class CharT,
          class STraits, class SAlloc &gt;
std::basic_string&lt;CharT&gt; 
    regex_replace( const CharT* s,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; re,
                   const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp; fmt,
                   std::regex_constants::match_flag_type flags {{=}} 
                       std::regex_constants::match_default );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class Traits, class CharT &gt;
std::basic_string&lt;CharT&gt; 
    regex_replace( const CharT* s,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; re,
                   const CharT* fmt,
                   std::regex_constants::match_flag_type flags {{=}} 
                       std::regex_constants::match_default );
}}
{{dcl end}}

{{tt|regex_replace}} uses a regular expression to perform substitution on a sequence of characters:

@1@ Copies characters in the range {{tt|[first,last)}} to {{tt|out}}, replacing any sequences that match {{tt|re}} with characters formatted by {{tt|fmt}}.  In other words:

::* Constructs a {{lc|std::regex_iterator}} object {{tt|i}} as if by {{c|std::regex_iterator&lt;BidirIt, CharT, traits&gt; i(first, last, re, flags)}}, and uses it to step through every match of {{tt|re}} within the sequence {{tt|[first,last)}}. 
::* For each such match {{tt|m}}, copies the non-matched subsequence ([[cpp/regex/match_results/prefix|{{tt|m.prefix()}}]]) into {{tt|out}} as if by {{c|out {{=}} std::copy(m.prefix().first, m.prefix().second, out)}} and then replaces the matched subsequence with the formatted replacement string as if by calling [[cpp/regex/match_results/format|{{c|out {{=}} m.format(out, fmt, flags)}}]]. 
::* When no more matches are found, copies the remaining non-matched characters to {{tt|out}} as if by {{c|out {{=}} std::copy(last_m.suffix().first, last_m.suffix().second, out)}} where {{tt|last_m}} is a copy of the last match found. 
::* If there are no matches, copies the entire sequence into {{tt|out}} as-is, by {{c|out {{=}} std::copy(first, last, out)}}
::* If {{tt|flags}} contains {{lc|std::regex_constants::format_no_copy}}, the non-matched subsequences are not copied into {{tt|out}}.
::* If {{tt|flags}} contains {{lc|std::regex_constants::format_first_only}}, only the first match is replaced.

@2@ same as 1), but the formatted replacement is performed as if by calling [[cpp/regex/match_results/format|{{c|out {{=}} m.format(out, fmt, fmt + char_traits&lt;charT&gt;::length(fmt), flags)}}]]

@3-4@ Constructs an empty string {{tt|result}} of type {{c|std::basic_string&lt;CharT, ST, SA&gt;}} and calls {{c|std::regex_replace(std::back_inserter(result), s.begin(), s.end(), re, fmt, flags)}}.

@5-6@Constructs an empty string {{tt|result}} of type {{c|std::basic_string&lt;CharT&gt;}} and calls {{c|std::regex_replace(std::back_inserter(result), s, s + std::char_traits&lt;CharT&gt;::length(s), re, fmt, flags)}}.

===Parameters===
{{par begin}}
{{par | first, last | the input character sequence, represented as a pair of iterators}}
{{par | s | the input character sequence, represented as {{lc|std::basic_string}} or character array}}
{{par | re | the {{lc|std::basic_regex}} that will be matched against the input sequence}}
{{par | flags | the match flags of type {{lc|std::regex_constants::match_flag_type}} }}
{{par | fmt | the regex replacement format string, exact syntax depends on the value of {{tt|flags}} }}
{{par | out | output iterator to store the result of the replacement }}
{{par hreq}}
{{par req concept | OutputIt | OutputIterator}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par end}}

===Return value===
@1-2@ Returns a copy of the output iterator {{tt|out}} after all the insertions.
@3-6@ Returns the string {{tt|result}} which contains the output.

===Exceptions===
May throw {{lc|std::regex_error}} to indicate an [[cpp/regex/error_type|error condition]].

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;regex&gt;
#include &lt;string&gt;

int main()
{
   std::string text = &quot;Quick brown fox&quot;;
   std::regex vowel_re(&quot;a{{!}}e{{!}}i{{!}}o{{!}}u&quot;);

   // write the results to an output iterator
   std::regex_replace(std::ostreambuf_iterator&lt;char&gt;(std::cout),
                      text.begin(), text.end(), vowel_re, &quot;*&quot;);

   // construct a string holding the results
   std::cout &lt;&lt; '\n' &lt;&lt; std::regex_replace(text, vowel_re, &quot;[$&amp;]&quot;) &lt;&lt; '\n';
}
 | output=
Q**ck br*wn f*x
Q[u][i]ck br[o]wn f[o]x
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc regex_search }}
{{dsc inc | cpp/regex/dsc match_flag_type}}
{{dsc end}}

[[de:cpp/regex/regex replace]]
[[es:cpp/regex/regex replace]]
[[fr:cpp/regex/regex replace]]
[[it:cpp/regex/regex replace]]
[[ja:cpp/regex/regex replace]]
[[pt:cpp/regex/regex replace]]
[[ru:cpp/regex/regex replace]]
[[zh:cpp/regex/regex replace]]</text>
      <sha1>k56qze26wa9mrz1qk7somb9xsrjylo3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex search</title>
    <ns>0</ns>
    <id>3268</id>
    <revision>
      <id>90018</id>
      <parentid>90016</parentid>
      <timestamp>2017-02-01T19:59:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>undo, salvaging the C string demo (with compilation errors fixed)</comment>
      <text xml:space="preserve" bytes="8793">{{cpp/title|regex_search}}
{{cpp/regex/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class BidirIt, 
          class Alloc, class CharT, class Traits &gt;
bool regex_search( BidirIt first, BidirIt last,
                   std::match_results&lt;BidirIt,Alloc&gt;&amp; m,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                   std::regex_constants::match_flag_type flags = 
                       std::regex_constants::match_default );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class CharT, class Alloc, class Traits &gt;
bool regex_search( const CharT* str,
                   std::match_results&lt;const CharT*,Alloc&gt;&amp; m,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                   std::regex_constants::match_flag_type flags = 
                       std::regex_constants::match_default );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class STraits, class SAlloc,
          class Alloc, class CharT, class Traits &gt;
bool regex_search( const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp; s,
                   std::match_results&lt;
                       typename std::basic_string&lt;CharT,STraits,SAlloc&gt;::const_iterator, 
                       Alloc
                   &gt;&amp; m,
                   const std::basic_regex&lt;CharT, Traits&gt;&amp; e,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::match_default );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class BidirIt,
          class CharT, class Traits &gt;
bool regex_search( BidirIt first, BidirIt last,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                   std::regex_constants::match_flag_type flags = 
                       std::regex_constants::match_default );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class CharT, class Traits &gt;
bool regex_search( const CharT* str,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                   std::regex_constants::match_flag_type flags = 
                       std::regex_constants::match_default );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class STraits, class SAlloc,
          class CharT, class Traits &gt;
bool regex_search( const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp; s,
                   const std::basic_regex&lt;CharT,Traits&gt;&amp; e,
                   std::regex_constants::match_flag_type flags = 
                       std::regex_constants::match_default );
}}
{{dcl | num=7 | since=c++14 | 1=
template&lt; class STraits, class SAlloc,
          class Alloc, class CharT, class Traits &gt;
bool regex_search( const std::basic_string&lt;CharT,STraits,SAlloc&gt;&amp;&amp;,
                   std::match_results&lt;
                       typename std::basic_string&lt;CharT,STraits,SAlloc&gt;::const_iterator, 
                       Alloc
                   &gt;&amp;,
                   const std::basic_regex&lt;CharT, Traits&gt;&amp;,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::match_default ) = delete;
}}
{{dcl end}}

Determines if there is a match between the regular expression {{tt|e}} and some subsequence in the target character sequence.

@1@ Analyzes generic range {{tt|[first,last)}}. Match results are returned in {{tt|m}}.

@2@ Analyzes a null-terminated string pointed to by {{tt|str}}. Match results are returned in {{tt|m}}.

@3@ Analyzes a string {{tt|s}}. Match results are returned in {{tt|m}}.

@4-6@ Equivalent to (1-3), just omits the match results.

@7@ The overload 3 is prohibited from accepting temporary strings, otherwise this function populates match_results m with string iterators that become invalid immediately.

{{tt|regex_search}} will successfully match any subsequence of the given sequence, whereas {{lc|std::regex_match}} will only return {{c|true}} if the regular expression matches the ''entire'' sequence.

===Parameters===
{{par begin}}
{{par | first, last | a range identifying the target character sequence}}
{{par | str | a pointer to a null-terminated target character sequence}}
{{par | s | a string identifying target character sequence}}
{{par | e | the {{lc|std::regex}} that should be applied to the target character sequence}}
{{par | m | the match results}}
{{par | flags | {{lc|std::regex_constants::match_flag_type}} governing search behavior}}
{{par hreq}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par req concept | Alloc | Allocator}}
{{par end}}

===Return value===
Returns {{c|true}} if a match exists, {{c|false}} otherwise. In either case, the object {{tt|m}} is updated, as follows:

If the match does not exist:
{{dsc begin}}
{{dsc | {{c|1=m.ready() == true}} }}
{{dsc | {{c|1=m.empty() == true}} }}
{{dsc | {{c|1=m.size() == 0}} }}
{{dsc end}}

If the match exists:
{{dsc begin}}
{{dsc | {{c|m.ready()}} | {{c|true}} }}
{{dsc | {{c|m.empty()}} | {{c|false}} }}
{{dsc | {{c|m.size()}}  | number of [[cpp/regex/ecmascript#Sub-expressions|marked subexpressions]] plus 1, that is, {{c|1+e.mark_count()}} }}
{{dsc | {{c|m.prefix().first}} | {{tt|first}} }}
{{dsc | {{c|m.prefix().second}} | {{c|m[0].first}} }}
{{dsc | {{c|m.prefix().matched}} | {{c|m.prefix().first !{{=}} m.prefix().second}} }}
{{dsc | {{c|m.suffix().first}} | {{c|m[0].second}}}}
{{dsc | {{c|m.suffix().second}} | {{tt|last}}}}
{{dsc | {{c|m.suffix().matched}} | {{c|m.suffix().first !{{=}} m.suffix().second}} }}
{{dsc | {{c|m[0].first}} | the start of the matching sequence }}
{{dsc | {{c|m[0].second}} | the end of the matching sequence }}
{{dsc | {{c|m[0].matched}} | {{c|true}}}}
{{dsc | {{c|1=m[n].first}} | the start of the sequence that matched [[cpp/regex/ecmascript#Sub-expressions|marked sub-expression]] n, or {{tt|last}} if the subexpression did not participate in the match}}
{{dsc | {{c|1=m[n].second}} | the end of the sequence that matched [[cpp/regex/ecmascript#Sub-expressions|marked sub-expression]] n, or {{tt|last}} if the subexpression did not participate in the match}}
{{dsc | {{c|1=m[n].matched}} | {{c|true}} if sub-expression n participated in the match, {{c|false}} otherwise}}
{{dsc end}}

===Notes===
In order to examine all matches within the target sequence, {{tt|std::regex_search}} may be called in a loop, restarting each time from {{tt|m[0].second}} of the previous call. {{lc|std::regex_iterator}} offers an easy interface to this iteration.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;regex&gt;

int main()
{
    std::string lines[] = {&quot;Roses are #ff0000&quot;,
                           &quot;violets are #0000ff&quot;,
                           &quot;all of my base are belong to you&quot;};

    std::regex color_regex(&quot;#([a-f0-9]{2})&quot;
                            &quot;([a-f0-9]{2})&quot;
                            &quot;([a-f0-9]{2})&quot;);

    // simple match
    for (const auto &amp;line : lines) {
        std::cout &lt;&lt; line &lt;&lt; &quot;: &quot; &lt;&lt; std::boolalpha
                  &lt;&lt; std::regex_search(line, color_regex) &lt;&lt; '\n';
    }   
    std::cout &lt;&lt; '\n';
 
    // show contents of marked subexpressions within each match
    std::smatch color_match;
    for (const auto&amp; line : lines) {
        if(std::regex_search(line, color_match, color_regex)) {
            std::cout &lt;&lt; &quot;matches for '&quot; &lt;&lt; line &lt;&lt; &quot;'\n&quot;;
            std::cout &lt;&lt; &quot;Prefix: '&quot; &lt;&lt; color_match.prefix() &lt;&lt; &quot;'\n&quot;;
            for (size_t i = 0; i &lt; color_match.size(); ++i) 
                std::cout &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; color_match[i] &lt;&lt; '\n';
            std::cout &lt;&lt; &quot;Suffix: '&quot; &lt;&lt; color_match.suffix() &lt;&lt; &quot;\'\n\n&quot;;
        }
    }

    // repeated search (see also std::regex_iterator)
    std::string log(R&quot;(
        Speed:	366
        Mass:	35
        Speed:	378
        Mass:	32
        Speed:	400
	Mass:	30)&quot;);
    std::regex r(R&quot;(Speed:\t\d*)&quot;);
    std::smatch sm;
    while(regex_search(log, sm, r))
    {
        std::cout &lt;&lt; sm.str() &lt;&lt; '\n';
        log = sm.suffix();
    }

    // C-style string demo
    std::cmatch cm;
    if(std::regex_search(&quot;this is a test&quot;, cm, std::regex(&quot;test&quot;))) 
        std::cout &lt;&lt; &quot;\nFound &quot; &lt;&lt; cm[0] &lt;&lt; &quot; at position &quot; &lt;&lt; cm.prefix().length();
}
 | output=
Roses are #ff0000: true
violets are #0000ff: true
all of my base are belong to you: false

matches for 'Roses are #ff0000'
Prefix: 'Roses are '
0: #ff0000
1: ff
2: 00
3: 00
Suffix: ''

matches for 'violets are #0000ff'
Prefix: 'violets are '
0: #0000ff
1: 00
2: 00
3: ff
Suffix: ''

Speed:	366
Speed:	378
Speed:	400

Found test at position 10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc basic_regex}}
{{dsc inc | cpp/regex/dsc match_results}}
{{dsc inc | cpp/regex/dsc regex_match}}
{{dsc end}}

[[de:cpp/regex/regex search]]
[[es:cpp/regex/regex search]]
[[fr:cpp/regex/regex search]]
[[it:cpp/regex/regex search]]
[[ja:cpp/regex/regex search]]
[[pt:cpp/regex/regex search]]
[[ru:cpp/regex/regex search]]
[[zh:cpp/regex/regex search]]</text>
      <sha1>h1oirlt1c5r12x0nqlgn2uxhuoqakci</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex token iterator</title>
    <ns>0</ns>
    <id>2290</id>
    <revision>
      <id>66757</id>
      <parentid>63423</parentid>
      <timestamp>2013-12-28T21:23:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>member pointer is pointing to sub_match, not match_results</comment>
      <text xml:space="preserve" bytes="5319">{{cpp/title|regex_token_iterator}}
{{cpp/regex/regex_token_iterator/navbar}}
{{ddcl | header=regex | since=c++11 | 1=
template&lt;
    class BidirIt,
    class CharT = typename std::iterator_traits&lt;BidirIt&gt;::value_type,
    class Traits = std::regex_traits&lt;CharT&gt;
&gt; class regex_token_iterator
}}

{{tt|std::regex_token_iterator}} is a read-only {{concept|ForwardIterator}} that accesses the individual sub-matches of every match of a regular expression within the underlying character sequence. It can also be used to access the parts of the sequence that were not matched by the given regular expression (e.g. as a tokenizer).

On construction, it constructs an {{lc|std::regex_iterator}} and on every increment it steps through the requested sub-matches from the current match_results, incrementing the underlying {{tt|regex_iterator}} when incrementing away from the last submatch.

The default-constructed {{tt|std::regex_token_iterator}} is the end-of-sequence iterator. When a valid {{tt|std::regex_token_iterator}} is incremented after reaching the last submatch of the last match, it becomes equal to the end-of-sequence iterator. Dereferencing or incrementing it further invokes undefined behavior.

Just before becoming the end-of-sequence iterator, a {{lc|std::regex_token_iterator}} may become a ''suffix iterator'', if the index {{c|-1}} (non-matched fragment) appears in the list of the requested submatch indexes. Such iterator, if dereferenced, returns a match_results corresponding to the sequence of characters between the last match and the end of sequence.

A typical implementation of {{tt|std::regex_token_iterator}} holds the underlying {{lc|std::regex_iterator}}, a container (e.g. {{c|std::vector&lt;int&gt;}}) of the requested submatch indexes, the internal counter equal to the index of the submatch, a pointer to {{lc|std::sub_match}}, pointing at the current submatch of the current match, and a {{lc|std::match_results}} object containing the last non-matched character sequence (used in tokenizer mode).

===Type requirements===
{{par begin}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par end}}

===Specializations===
Several specializations for common character sequence types are defined:

{{dsc begin}}
{{dsc header | regex}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|cregex_token_iterator}} | {{c|regex_token_iterator&lt;const char*&gt;}}}}
{{dsc | {{tt|wcregex_token_iterator}} | {{c|regex_token_iterator&lt;const wchar_t*&gt;}}}}
{{dsc | {{tt|sregex_token_iterator}} | {{c|regex_token_iterator&lt;std::string::const_iterator&gt;}}}}
{{dsc | {{tt|wsregex_token_iterator}} | {{c|regex_token_iterator&lt;std::wstring::const_iterator&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{c|std::sub_match&lt;BidirIt&gt;}} }}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
{{dsc | {{tt|pointer}} | {{c|const value_type*}} }}
{{dsc | {{tt|reference}} | {{c|const value_type&amp;}} }}
{{dsc | {{tt|iterator_category}} | {{lc|std::forward_iterator_tag}} }}
{{dsc | {{tt|regex_type}} | {{c|basic_regex&lt;CharT, Traits&gt;}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc constructor}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc destructor}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc operator{{=}}}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc operator_cmp}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc operator*}}
{{dsc inc | cpp/regex/regex_token_iterator/dsc operator_arith}}
{{dsc end}}

===Notes===
It is the programmer's responsibility to ensure that the {{lc|std::basic_regex}} object passed to the iterator's constructor outlives the iterator. Because the iterator stores a {{lc|std::regex_iterator}} which stores a pointer to the regex, incrementing the iterator after the regex was destroyed results in undefined behavior.

===Example===
{{example
 | 
 | code=

#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;regex&gt;

int main()
{
   std::string text = &quot;Quick brown fox.&quot;;
   // tokenization (non-matched fragments)
   // Note that regex is matched only two times: when the third value is obtained
   // the iterator is a suffix iterator.
   std::regex ws_re(&quot;\\s+&quot;); // whitespace
   std::copy( std::sregex_token_iterator(text.begin(), text.end(), ws_re, -1),
              std::sregex_token_iterator(),
              std::ostream_iterator&lt;std::string&gt;(std::cout, &quot;\n&quot;));

   // iterating the first submatches
   std::string html = &quot;&lt;p&gt;&lt;a href=\&quot;http://google.com\&quot;&gt;google&lt;/a&gt; &quot;
                      &quot;&lt; a HREF =\&quot;http://cppreference.com\&quot;&gt;cppreference&lt;/a&gt;\n&lt;/p&gt;&quot;;
   std::regex url_re(&quot;&lt;\\s*A\\s+[^&gt;]*href\\s*=\\s*\&quot;([^\&quot;]*)\&quot;&quot;, std::regex::icase);
   std::copy( std::sregex_token_iterator(html.begin(), html.end(), url_re, 1),
              std::sregex_token_iterator(),
              std::ostream_iterator&lt;std::string&gt;(std::cout, &quot;\n&quot;));
}
|output=
Quick
brown
fox.
http://google.com
http://cppreference.com
}}

[[de:cpp/regex/regex token iterator]]
[[es:cpp/regex/regex token iterator]]
[[fr:cpp/regex/regex token iterator]]
[[it:cpp/regex/regex token iterator]]
[[ja:cpp/regex/regex token iterator]]
[[pt:cpp/regex/regex token iterator]]
[[ru:cpp/regex/regex token iterator]]
[[zh:cpp/regex/regex token iterator]]</text>
      <sha1>8kgzb8uku7l9e2i2lzhufi9czhy5r3n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex token iterator/operator arith</title>
    <ns>0</ns>
    <id>12679</id>
    <revision>
      <id>61472</id>
      <timestamp>2013-06-06T01:26:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1219">{{cpp/regex/regex_token_iterator/title | operator++, operator++{{small|(int)}}}}
{{cpp/regex/regex_token_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
regex_token_iterator&amp; operator++();
}}
{{dcl | since=c++11 | 1=
regex_token_iterator operator++(int);
}}
{{dcl end}}

Advances the iterator on the next sub match.

{{todo|explain better}}

If {{c|*this}} is a suffix iterator, sets {{c|*this}} to an end-of-sequence iterator.

Otherwise, if {{c|N + 1 &lt; subs.size()}}, increments N and sets result to the address of the current match.

Otherwise, sets {{tt|N}} to {{c|0}} and increments {{tt|position}}. If {{tt|position}} is not an end-of-sequence iterator the operator sets result to the address of the current match.

Otherwise, if any of the values stored in subs is equal to {{c|-1}} and {{cc|prev-&gt;suffix().length()}} is not {{c|0}} the operator sets {{tt|*this}} to a suffix iterator that points to the range [{{c|prev-&gt;suffix().first}}, {{c|prev-&gt;suffix().second}}).

Otherwise, sets {{c|*this}} to an end-of-sequence iterator.

The behavior is undefined if the iterator is end-of-sequence iterator.

===Parameters===
(none)

===Return value===
@1@ {{c|*this}}

@2@ The previous value of the iterator.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex token iterator/operator cmp</title>
    <ns>0</ns>
    <id>12677</id>
    <revision>
      <id>61470</id>
      <parentid>61469</parentid>
      <timestamp>2013-06-06T01:19:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>1=</comment>
      <text xml:space="preserve" bytes="1111">{{title | operator==, operator!={{small|(std::regex_token_iterator)}}}}
{{cpp/regex/regex_token_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
bool operator==( const regex_token_iterator&amp; other ) const;
}}
{{dcl | since=c++11 | 1=
bool operator!=( const regex_token_iterator&amp; other ) const;
}}
{{dcl end}}

Checks whether {{c|*this}} and {{tt|other}} are equivalent.

Two regex token iterators are equal if:

@a@ They are both end-of-sequence iterators

@b@ They are both suffix iterators and the suffixes are equal.

@c@ Neither of them is end-of-sequence or suffix iterator and:

::* {{c|1=position == other.position}}
::* {{c|1=N == other.N}}
::* {{c|1=subs == other.subs}}


@1@ Checks whether {{c|*this}} is ''equal to'' {{tt|other}}.

@2@ Checks whether {{c|*this}} is ''not equal to'' {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | another regex token iterator to compare to}}
{{par end}}

===Return value===
@1@ {{c|true}} if {{c|*this}} is ''equal to'' {{tt|other}}, {{c|false}} otherwise.

@2@ {{c|true}} if {{c|*this}} is ''not equal to'' {{tt|other}}, {{c|false}} otherwise.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex token iterator/operator*</title>
    <ns>0</ns>
    <id>12678</id>
    <revision>
      <id>86440</id>
      <parentid>61471</parentid>
      <timestamp>2016-06-30T10:30:46Z</timestamp>
      <contributor>
        <ip>109.184.44.42</ip>
      </contributor>
      <comment>Removed &quot;Parameters&quot;</comment>
      <text xml:space="preserve" bytes="454">{{cpp/regex/regex_token_iterator/title | operator*, operator-&gt;}}
{{cpp/regex/regex_token_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
const value_type&amp; operator*() const;
}}
{{dcl | since=c++11 | 1=
const value_type* operator-&gt;() const;
}}
{{dcl end}}

Returns a pointer or reference to the current match.

The behavior is undefined if the iterator is end-of-sequence iterator.

===Return value===
A pointer or reference to the current match.</text>
      <sha1>p7k38b5im4mmrnmrswx1znuk8v3gmvp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex token iterator/operator=</title>
    <ns>0</ns>
    <id>12676</id>
    <revision>
      <id>61467</id>
      <parentid>61466</parentid>
      <timestamp>2013-06-06T01:12:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="381">{{cpp/regex/regex_token_iterator/title | operator{{=}}}}
{{cpp/regex/regex_token_iterator/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
regex_token_iterator&amp; operator=( const regex_token_iterator&amp; other );
}}
{{dcl end}}

Assigns the contents of {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | regex iterator to assign}}
{{par end}}

===Return value===
{{c|*this}}.</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex token iterator/regex token iterator</title>
    <ns>0</ns>
    <id>9814</id>
    <revision>
      <id>68870</id>
      <parentid>66760</parentid>
      <timestamp>2014-03-22T20:20:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg 2332</comment>
      <text xml:space="preserve" bytes="5668">{{cpp/regex/regex_token_iterator/title | regex_token_iterator}}
{{cpp/regex/regex_token_iterator/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1= 
regex_token_iterator();
}}
{{dcl | num=2 | since=c++11 | 1= 
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp; re,
                      int submatch = 0,
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default );
}}
{{dcl | num=3 | since=c++11 | 1= 
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp; re,
                      const std::vector&lt;int&gt;&amp; submatches,
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default );
}}
{{dcl | num=4 | since=c++11 | 1= 
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp; re,
                      std::initializer_list&lt;int&gt; submatches,
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default );
}}
{{dcl | num=5 | since=c++11 | 1= 
template &lt;std::size_t N&gt;
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp; re,
                      const int (&amp;submatches)[N],
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default );
}}
{{dcl | num=6 | since=c++11 | 1= 
regex_token_iterator( const regex_token_iterator&amp; other );
}}
{{dcl | num=7 | since=c++14 | 1= 
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp;&amp; re,
                      int submatch = 0,
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default ) = delete;
}}
{{dcl | num=8 | since=c++14 | 1= 
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp;&amp; re,
                      const std::vector&lt;int&gt;&amp; submatches,
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default ) = delete;
}}
{{dcl | num=9 | since=c++14 | 1= 
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp;&amp; re,
                      std::initializer_list&lt;int&gt; submatches,
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default ) = delete;
}}
{{dcl | num=10 | since=c++14 | 1= 
template &lt;std::size_t N&gt;
regex_token_iterator( BidirectionalIterator a, BidirectionalIterator b,
                      const regex_type&amp;&amp; re,
                      const int (&amp;submatches)[N],
                      std::regex_constants::match_flag_type m =
                          std::regex_constants::match_default ) = delete;
}}
{{dcl end}}

Constructs a new {{tt|regex_token_iterator}}:

@1@ Default constructor. Constructs the end-of-sequence iterator.

@2-5@ First, copies the list of the requested submatch out of the {{tt|submatches}} or {{tt|submatch}} argument into the member list stored in the iterator and constructs the member {{lc|std::regex_iterator}} by passing {{tt|a}}, {{tt|b}}, {{tt|re}}, and {{tt|m}} to its four-argument constructor (that constructor performs the initial call to {{lc|std::regex_search}}) and sets the internal counter of submatches to zero.
* If, after construction, the member {{tt|regex_iterator}} is not an end-of-sequence iterator, sets the member pointer to the address of the current {{lc|std::sub_match}}.
* Otherwise (if the member {{tt|regex_iterator}} is an end-of-sequence iterator), but the value {{c|-1}} is one of the values in {{tt|submatches}}/{{tt|submatch}}, turns {{tt|*this}} into a ''suffix iterator'' pointing at the range {{tt|[a,b)}} (the entire string is the non-matched suffix)
* Otherwise (if -1 is not in the list of submatches), turns {{tt|*this}} into the end-of-sequence iterator.

The behavior is undefined if any value in {{tt|submatches}} is less than {{c|-1}}.

@6@ Copy constructor: performs member-wise copy (including making a copy of the member {{tt|regex_iterator}} and the member pointer to current {{lc|sub_match}}).

@7-10@ The overloads 2-5 are prohibited from being called with a temporary regex since otherwise the returned iterator would be immediately invalidated

===Parameters===
{{par begin}}
{{par | a | {{concept|BidirectionalIterator}} to the beginning of the target character sequence}}
{{par | b | {{concept|BidirectionalIterator}} to the end of the target character sequence}}
{{par | re | regular expression used to search the target character sequence}}
{{par | submatch | the index of the submatch that should be returned. &quot;0&quot; represents the entire match, and &quot;-1&quot; represents the parts that are not matched (e.g, the stuff between matches).}}
{{par | submatches | the sequence of submatch indices that should be iterated over within each match, may include the special value -1 for the non-matched fragments}}
{{par | m | flags that govern the behavior of {{tt|re}} }}
{{par end}}

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/regex/basic regex/basic regex]]
[[es:cpp/regex/basic regex/basic regex]]
[[fr:cpp/regex/basic regex/basic regex]]
[[it:cpp/regex/basic regex/basic regex]]
[[ja:cpp/regex/basic regex/basic regex]]
[[pt:cpp/regex/basic regex/basic regex]]
[[ru:cpp/regex/basic regex/basic regex]]
[[zh:cpp/regex/basic regex/basic regex]]</text>
      <sha1>g67shwjr46b2jfa4zp8k5sslqckw4gy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits</title>
    <ns>0</ns>
    <id>3267</id>
    <revision>
      <id>85699</id>
      <parentid>85698</parentid>
      <timestamp>2016-05-04T07:42:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2476">{{cpp/title|regex_traits}}
{{cpp/regex/regex_traits/navbar}}
{{ddcl | header=regex | since=c++11 | 1=
template&lt; class CharT &gt;
class regex_traits;
}}

The type trait template {{tt|regex_traits}} supplies {{lc|std::basic_regex}} with the set of types and functions necessary to operate on the type {{tt|CharT}}.

Since many of regex operations are locale-sensitive (when {{lc|std::regex_constants::collate}} flag is set), the regex_traits class typically holds an instance of a {{lc|std::locale}} as a private member.

===Standard specializations===
Two specializations of {{tt|std::regex_traits}} are defined by the standard library:
{{dsc begin}}
{{dsc | {{tt|std::regex_traits&lt;char&gt;}}}}
{{dsc | {{tt|std::regex_traits&lt;wchar_t&gt;}}}}
{{dsc end}}
These specializations make it possible to use {{c|std::basic_regex&lt;char&gt;}} (aka {{lc|std::regex}}) and {{c|std::basic_regex&lt;wchar_t&gt;}} (aka {{lc|std::wregex}}). To use {{lc|std::basic_regex}} with other character types (for example, {{c|char32_t}}), a user-provided trait class must be used.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;CharT&gt;}}}}
{{dsc | {{tt|locale_type}} | The locale used for localized behavior in the regular expression. Must be {{concept|CopyConstructible}}}}
{{dsc | {{tt|char_class_type}} | Represents a character classification and is capable of holding an implementation specific set returned by {{tt|lookup_classname}}. Must be a {{concept|BitmaskType}}.}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/regex_traits/dsc constructor}}
{{dsc inc | cpp/regex/regex_traits/dsc length}}
{{dsc inc | cpp/regex/regex_traits/dsc translate}}
{{dsc inc | cpp/regex/regex_traits/dsc translate_nocase}}
{{dsc inc | cpp/regex/regex_traits/dsc transform}}
{{dsc inc | cpp/regex/regex_traits/dsc transform_primary}}
{{dsc inc | cpp/regex/regex_traits/dsc lookup_collatename}}
{{dsc inc | cpp/regex/regex_traits/dsc lookup_classname}}
{{dsc inc | cpp/regex/regex_traits/dsc isctype}}
{{dsc inc | cpp/regex/regex_traits/dsc value}}
{{dsc inc | cpp/regex/regex_traits/dsc imbue}}
{{dsc inc | cpp/regex/regex_traits/dsc getloc}}
{{dsc end}}

[[de:cpp/regex/regex traits]]
[[es:cpp/regex/regex traits]]
[[fr:cpp/regex/regex traits]]
[[it:cpp/regex/regex traits]]
[[ja:cpp/regex/regex traits]]
[[pt:cpp/regex/regex traits]]
[[ru:cpp/regex/regex traits]]
[[zh:cpp/regex/regex traits]]</text>
      <sha1>3bvmybukydl3np90dweco0m78z0q4gp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/getloc</title>
    <ns>0</ns>
    <id>12623</id>
    <revision>
      <id>61327</id>
      <timestamp>2013-06-05T21:33:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="624">{{cpp/regex/regex_traits/title|getloc}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
locale_type getloc() const;
}}
{{dcl end}}

Returns the current locale of the traits object. 

If {{lc|imbue()}} has been never called for this object, then the global locale at the time of the call is returned. Otherwise, the locale passed to the last call to {{lc|imbue()}} is returned.

===Parameters===
(none)

===Return value===
The current locale of the traits object.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/regex_traits/dsc imbue}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/imbue</title>
    <ns>0</ns>
    <id>12610</id>
    <revision>
      <id>61313</id>
      <parentid>61312</parentid>
      <timestamp>2013-06-05T21:29:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+since</comment>
      <text xml:space="preserve" bytes="824">{{cpp/regex/regex_traits/title|imbue}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
locale_type imbue( locale_type loc );
}}
{{dcl end}}

Replaces the current locale with a copy of {{tt|loc}}. If {{tt|loc}} is different than the current locale, then all cached data is invalidated.

After the call {{c|1=getloc() == loc}}.

===Parameters===
{{par begin}}
{{par | loc | the locale to imbue}}
{{par end}}

===Return value===
The current locale of the traits object.

If {{tt|imbue()}} has been never called for this object, then the global locale at the time of the call is returned. Otherwise, the locale passed to the last call to {{tt|imbue()}} is returned.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/regex_traits/dsc getloc}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/isctype</title>
    <ns>0</ns>
    <id>8945</id>
    <revision>
      <id>67008</id>
      <parentid>66917</parentid>
      <timestamp>2014-01-16T05:26:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+custom traits example</comment>
      <text xml:space="preserve" bytes="2753">{{cpp/regex/regex_traits/title|isctype}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
bool isctype( CharT c, char_class_type f ) const;
}}
{{dcl end}}

Determines whether the character {{tt|c}} belongs to the character class identified by {{tt|f}}, which, in turn, is a value returned by {{lc|lookup_classname()}} or a bitwise OR of several such values.

The version of this function provided in the standard library specializations of {{lc|std::regex_traits}} does the following:

@1@ First converts {{tt|f}} to some temporary value {{tt|m}} of type {{lc|std::ctype_base::mask}} in implementation-defined manner

@2@ Then attempts to classify the character in the imbued locale by calling {{c|std::use_facet&lt;std::ctype&lt;CharT&gt;&gt;(getloc()).is(m, c)}}. If that returned {{c|true}}, {{c|true}} is returned by {{tt|isctype()}}.

@3@ Otherwise, checks whether {{tt|c}} equals {{tt|'_'}} and the bitmask {{tt|f}} includes  the result of calling {{lc|lookup_classname()}} for the character class {{tt|[:w:]}}, in which case {{c|true}} is returned.

@4@ Otherwise, {{tt|false}} is returned.

===Parameters===
{{par begin}}
{{par | c | the character to classify}}
{{par | f | the bitmask obtained from one or several calls to lookup_classname()}}
{{par end}}

===Return value===
{{c|true}} if {{tt|c}} is classified by {{tt|f}}, {{c|false}} otherwise.

===Notes===
The description above summarizes C++14; the C++11 phrasing required this function to return true for {{tt|'_'}} in all cases ([http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2018 LWG issue 2018])

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;regex&gt;

int main()
{
    std::regex_traits&lt;char&gt; t;
    std::string str_alnum = &quot;alnum&quot;;
    auto a = t.lookup_classname(str_alnum.begin(), str_alnum.end());
    std::string str_w = &quot;w&quot;; // [:w:] is [:alnum:] plus '_'
    auto w = t.lookup_classname(str_w.begin(), str_w.end());
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; t.isctype('A', w) &lt;&lt; ' ' &lt;&lt; t.isctype('A', a) &lt;&lt; '\n'
              &lt;&lt; t.isctype('_', w) &lt;&lt; ' ' &lt;&lt; t.isctype('_', a) &lt;&lt; '\n'
              &lt;&lt; t.isctype(' ', w) &lt;&lt; ' ' &lt;&lt; t.isctype(' ', a) &lt;&lt; '\n';
}
 | output=
true true
true false
false false
}}

{{cpp/regex/isctype_example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/regex_traits/dsc lookup_classname}}
{{dsc inc | cpp/locale/ctype/dsc do_is}}
{{dsc inc | cpp/string/wide/dsc iswctype}}
{{dsc end}}

[[de:cpp/regex/regex traits/isctype]]
[[es:cpp/regex/regex traits/isctype]]
[[fr:cpp/regex/regex traits/isctype]]
[[it:cpp/regex/regex traits/isctype]]
[[ja:cpp/regex/regex traits/isctype]]
[[pt:cpp/regex/regex traits/isctype]]
[[ru:cpp/regex/regex traits/isctype]]
[[zh:cpp/regex/regex traits/isctype]]</text>
      <sha1>50ehcxltx73qk682bo84vzou9voamlr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/length</title>
    <ns>0</ns>
    <id>8856</id>
    <revision>
      <id>51147</id>
      <parentid>41769</parentid>
      <timestamp>2013-06-01T03:52:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1147">{{cpp/regex/regex_traits/title|length}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
static std::size_t length(const char_type* p);
}}
{{dcl end}}

Calculates the length of a null-terminated character sequence, that is, the smallest {{tt|i}} such that {{c|1=p[i]==0}}.

Standard library specializations of {{lc|std::regex_traits}} execute {{c|std::char_traits&lt;CharT&gt;::length(p);}}

===Parameters===
{{par begin}}
{{par | p | pointer to the first element of the null-terminated character sequence}}
{{par end}}

===Return value===
The length of the null-terminated character string.

===Example===
{{example
 | code=
#include &lt;regex&gt;
#include &lt;iostream&gt;

int main()
{
    std::cout &lt;&lt; std::regex_traits&lt;char&gt;::length(u8&quot;Кошка&quot;) &lt;&lt; '\n'
              &lt;&lt; std::regex_traits&lt;wchar_t&gt;::length(L&quot;Кошка&quot;) &lt;&lt; '\n';
}
 | output=
10
5
}}

[[de:cpp/regex/regex traits/length]]
[[es:cpp/regex/regex traits/length]]
[[fr:cpp/regex/regex traits/length]]
[[it:cpp/regex/regex traits/length]]
[[ja:cpp/regex/regex traits/length]]
[[pt:cpp/regex/regex traits/length]]
[[ru:cpp/regex/regex traits/length]]
[[zh:cpp/regex/regex traits/length]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/lookup classname</title>
    <ns>0</ns>
    <id>8944</id>
    <revision>
      <id>68864</id>
      <parentid>67007</parentid>
      <timestamp>2014-03-22T20:02:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>lwg 2271</comment>
      <text xml:space="preserve" bytes="3726">{{cpp/regex/regex_traits/title|lookup_classname}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
template&lt; class ForwardIt &gt;
char_class_type lookup_classname( ForwardIt first,
                                  ForwardIt last,
                                  bool icase = false ) const;
}}
{{dcl end}}

If the character sequence {{tt|[first, last)}} represents the name of a valid character class in the currently imbued locale (that is, the string between {{tt|[:}} and {{tt|:]}} in regular expressions), returns the implementation-defined value representing this character class. Otherwise, returns zero.

If the parameter {{tt|icase}} is {{c|true}}, the character class ignores character case, e.g. the regex {{tt|[:lower:]}} with {{lc|std::regex_constants::icase}} generates a call to {{tt|regex_traits&lt;&gt;::lookup_classname()}} with {{tt|[first, last)}} indicating the string {{c|&quot;lower&quot;}} and {{c|1=icase == true}}. This call returns the same bitmask as the call generated by the regex {{tt|[:alpha:]}} with {{c|1=icase == false}}.

The following character classes are always recognized, in both narrow and wide character forms, and the classifications returned (with {{c|1=icase == false}}) correspond to the matching classifications obtained by the {{lc|std::ctype}} facet of the imbued locale, as follows:

{{dsc begin}}
{{dsc hitem | character class | {{lc|std::ctype}} classification }}
{{dsc | {{c|&quot;alnum&quot;}} | {{lc|std::ctype_base::alnum}} }}
{{dsc | {{c|&quot;alpha&quot;}} | {{lc|std::ctype_base::alpha}} }}
{{dsc | {{c|&quot;blank&quot;}} | {{lc|std::ctype_base::blank}} }}
{{dsc | {{c|&quot;cntrl&quot;}} | {{lc|std::ctype_base::cntrl}} }}
{{dsc | {{c|&quot;digit&quot;}} | {{lc|std::ctype_base::digit}} }}
{{dsc | {{c|&quot;graph&quot;}} | {{lc|std::ctype_base::graph}} }}
{{dsc | {{c|&quot;lower&quot;}} | {{lc|std::ctype_base::lower}} }}
{{dsc | {{c|&quot;print&quot;}} | {{lc|std::ctype_base::print}} }}
{{dsc | {{c|&quot;punct&quot;}} | {{lc|std::ctype_base::punct}} }}
{{dsc | {{c|&quot;space&quot;}} | {{lc|std::ctype_base::space}} }}
{{dsc | {{c|&quot;upper&quot;}} | {{lc|std::ctype_base::upper}} }}
{{dsc | {{c|&quot;xdigit&quot;}} | {{lc|std::ctype_base::xdigit}} }}
{{dsc | {{c|&quot;d&quot;}} | {{lc|std::ctype_base::digit}} }}
{{dsc | {{c|&quot;s&quot;}} | {{lc|std::ctype_base::space}} }}
{{dsc | {{c|&quot;w&quot;}} | {{lc|std::ctype_base::alnum}} with '_' optionally added }}
{{dsc end}}

The classification returned for the string {{c|&quot;w&quot;}} may be exactly the same as {{c|&quot;alnum&quot;}}, in which case {{lc|isctype()}} adds '_' explicitly.

Additional classifications such as {{lc|&quot;jdigit&quot;}} or {{lc|&quot;jkanji&quot;}} may be provided by system-supplied locales (in which case they are also accessible through {{lc|std::wctype}})

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators which determines the sequence of characters that represents a name of a character class}}
{{par | icase | if true, ignores the upper/lower case distinction in the character classification}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
The bitmask representing the character classification determined by the given character class, or {{tt|char_class_type()}} if the class is unknown.

===Example===
{{cpp/regex/isctype_example}}

===See also===
{{dsc begin}}
{{dsc mem fun | cpp/regex/regex_traits/isctype |indicates membership in a character class }}
{{dsc inc | cpp/string/wide/dsc wctype}}
{{dsc end}}

[[de:cpp/regex/regex traits/lookup classname]]
[[es:cpp/regex/regex traits/lookup classname]]
[[fr:cpp/regex/regex traits/lookup classname]]
[[it:cpp/regex/regex traits/lookup classname]]
[[ja:cpp/regex/regex traits/lookup classname]]
[[pt:cpp/regex/regex traits/lookup classname]]
[[ru:cpp/regex/regex traits/lookup classname]]
[[zh:cpp/regex/regex traits/lookup classname]]</text>
      <sha1>q3y82k5um7qh5hmjftj2ghivnoda4po</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/lookup collatename</title>
    <ns>0</ns>
    <id>8943</id>
    <revision>
      <id>51149</id>
      <parentid>41762</parentid>
      <timestamp>2013-06-01T03:52:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="2422">{{cpp/regex/regex_traits/title|lookup_collatename}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
template&lt; class ForwardIt &gt;
string_type lookup_collatename( ForwardIt first, ForwardIt last ) const;
}}
{{dcl end}}

If the character sequence {{tt|[first, last)}} represents the name of a valid collating element in the currently imbued locale, returns the name of that collating element. Otherwise, returns an empty string.

Collating elements are the symbols found in POSIX regular expressions between {{tt|[.}} and {{tt|.]}}. For example, {{tt|[.a.]}} matches the character {{tt|a}} in the C locale. {{tt|[.tilde.]}} matches the character {{tt|~}} in the C locale as well. {{tt|[.ch.]}} matches the digraph {{tt|ch}} in Czech locale, but generates {{lc|std::regex_error}} with error code {{lc|std::regex_constants::error_collate}} in most other locales.

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators which determines the sequence of characters that represents a collating element name}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
The representation of the named collating element as a character string.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;regex&gt;

struct noisy_traits : std::regex_traits&lt;char&gt; {

    template&lt; class Iter &gt;
    string_type lookup_collatename( Iter first, Iter last ) const {
        string_type result = regex_traits::lookup_collatename(first, last);
        std::cout &lt;&lt; &quot;regex_traits&lt;&gt;::lookup_collatename(\&quot;&quot;
                  &lt;&lt; string_type(first, last)
                  &lt;&lt; &quot;\&quot;) returns \&quot;&quot; &lt;&lt; result &lt;&lt; &quot;\&quot;\n&quot;;
        return result;
    }
};

int main()
{
    std::string str = &quot;z{{!}}}a&quot;; // C locale collation order: x,y,z,{,{{!}},},~
    std::basic_regex&lt;char, noisy_traits&gt; re(&quot;[x-[.tilde.]]*a&quot;, std::regex::basic);
    std::cout &lt;&lt; std::boolalpha &lt;&lt; std::regex_match(str, re) &lt;&lt; '\n';
}
 | output=
regex_traits&lt;&gt;::lookup_collatename(&quot;tilde&quot;) returns &quot;~&quot;
true
}}

[[de:cpp/regex/regex traits/lookup collatename]]
[[es:cpp/regex/regex traits/lookup collatename]]
[[fr:cpp/regex/regex traits/lookup collatename]]
[[it:cpp/regex/regex traits/lookup collatename]]
[[ja:cpp/regex/regex traits/lookup collatename]]
[[pt:cpp/regex/regex traits/lookup collatename]]
[[ru:cpp/regex/regex traits/lookup collatename]]
[[zh:cpp/regex/regex traits/lookup collatename]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/regex traits</title>
    <ns>0</ns>
    <id>8859</id>
    <revision>
      <id>51150</id>
      <parentid>41760</parentid>
      <timestamp>2013-06-01T03:52:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1022">{{cpp/regex/regex_traits/title|regex_traits}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
regex_traits();
}}
{{dcl end}}

Default-constructs the {{lc|std::regex_traits}} object, including default-constructing the private {{lc|std::locale}} member or any other internal state as necessary.

===Parameters===
(none)

===Return value===
(none)

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;

int main()
{
    std::locale::global(std::locale(&quot;en_US.utf8&quot;));
    std::regex_traits&lt;char&gt; r1;
    std::regex_traits&lt;wchar_t&gt; r2;
    std::cout &lt;&lt; &quot;The regex locale is &quot; &lt;&lt; r1.getloc().name() &lt;&lt; '\n';
}
 | output=
The regex locale is en_US.utf8
}}

[[de:cpp/regex/regex traits/regex traits]]
[[es:cpp/regex/regex traits/regex traits]]
[[fr:cpp/regex/regex traits/regex traits]]
[[it:cpp/regex/regex traits/regex traits]]
[[ja:cpp/regex/regex traits/regex traits]]
[[pt:cpp/regex/regex traits/regex traits]]
[[ru:cpp/regex/regex traits/regex traits]]
[[zh:cpp/regex/regex traits/regex traits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/transform</title>
    <ns>0</ns>
    <id>8861</id>
    <revision>
      <id>80250</id>
      <parentid>51151</parentid>
      <timestamp>2015-08-01T12:26:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="1879">{{cpp/regex/regex_traits/title|transform}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
template&lt; class ForwardIt &gt;
string_type transform( ForwardIt first, ForwardIt last) const;
}}
{{dcl end}}

Obtains the sort key for the character sequence {{tt|[first, last)}}, such that if a sort key compares less than another sort key with {{c|operator&lt;}}, then the character sequence that produced the first sort key comes before the character sequence that produced the second sort key, in the currently imbued locale's collation order.

For example when the regex flag {{lc|std::regex_constants::collate}} is set, then the sequence {{tt|[a-b]}} would match some character {{tt|c1}} if {{c|1=traits.transform(&quot;a&quot;) &lt;= traits.transform(c1) &lt;= traits.transform(&quot;b&quot;)}}. Note that this function takes a character sequence as the argument to accomodate to the ranges defined like {{c|[}}{{c|[.ae.]-d]}}.

Standard library specializations of {{lc|std::regex_traits}} return {{c|std::use_facet&lt;std::collate&lt;CharT&gt;&gt;(getloc()).transform(&amp;*str.begin(), &amp;*str.begin() + str.length())}} for some temporary string {{tt|str}} constructed as {{c|string_type str(first, last)}}.

===Parameters===
{{par begin}}
{{par | first, last | a pair of {{concept|ForwardIterator}}s which determines the sequence of characters to compare}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
The collation key for the character sequence {{tt|[first, last)}} in the currently imbued locale.

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/regex/regex traits/transform]]
[[es:cpp/regex/regex traits/transform]]
[[fr:cpp/regex/regex traits/transform]]
[[it:cpp/regex/regex traits/transform]]
[[ja:cpp/regex/regex traits/transform]]
[[pt:cpp/regex/regex traits/transform]]
[[ru:cpp/regex/regex traits/transform]]
[[zh:cpp/regex/regex traits/transform]]</text>
      <sha1>oeavvkv5jdx6oauanxlit6dx9ogzws3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/transform primary</title>
    <ns>0</ns>
    <id>8862</id>
    <revision>
      <id>80249</id>
      <parentid>62068</parentid>
      <timestamp>2015-08-01T12:26:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>missing ;</comment>
      <text xml:space="preserve" bytes="3400">{{cpp/regex/regex_traits/title|transform_primary}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
template&lt; class ForwardIt &gt;
string_type transform_primary( ForwardIt first, ForwardIt last ) const;
}}
{{dcl end}}

For the character sequence {{tt|[first, last)}}, obtains the primary sort key in the imbued locale's collating order, that is, the sort key that is based on the positions of the letters and collation units in the national alphabet, ignoring case, diacritics, variants, etc. If a primary sort key compares less than another primary sort key with {{c|operator&lt;}}, then the character sequence that produced the first sort key comes before the character sequence that produced the second sort key, in the currently imbued locale's primary collation order.

The regex library uses this trait to match characters against equivalence classes. For example, the regex {{c|1=[[=a=]]}} is equivalent to the character {{tt|c1}} if {{c|traits.transform_primary(c1)}} is equivalent to {{c|traits.transform_primary(&quot;a&quot;)}} (which is true for any {{tt|c1}} from {{c|&quot;AÀÁÂÃÄÅaàáâãäå&quot;}} in the U.S. English locale). Note that {{tt|transform_primary()}} takes a character sequence argument because equivalence classes may be multicharacter, such as {{c|1=[[=ch=]]}} in Czech or {{c|1=[[=dzs=]]}} in Hungarian.
 
There is no portable way to define primary sort key in terms of {{lc|std::locale}} since the conversion from the collation key returned by {{c|std::collate::transform()}} to the primary equivalence key is locale-specific, and if the user replaces the {{lc|std::collate}} facet, that conversion is no longer known to the standard library's {{lc|std::regex_traits}}. Standard library specializations of {{lc|std::regex_traits}} return an empty string unless the {{lc|std::collate}} facet of the currently-imbued locale was not replaced by the user, and still matches the system-supplied {{lc|std::collate}} facet), in which case {{c|std::collate_byname&lt;charT&gt;::transform(first, last)}} is executed and the sort key it produces is converted to the expected primary sort key using a locale-specific conversion.

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators which determines the sequence of characters to compare}}
{{par hreq}}
{{par req concept | ForwardIt | ForwardIterator}}
{{par end}}

===Return value===
The primary sort key for the character sequence {{tt|[first, last)}} in the currently imbued locale, ignoring case, variant, diacritics, etc. 

===Example===
{{example
 | Demonstrates the regex feature that works through transform_primary()
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;

int main()
{
    std::locale::global(std::locale(&quot;en_US.UTF-8&quot;));
    std::wstring str = L&quot;AÀÁÂÃÄÅaàáâãäå&quot;;
    std::wregex re(L&quot;[[=a=]]*&quot;, std::regex::basic);
    std::cout &lt;&lt; std::boolalpha &lt;&lt; std::regex_match(str, re) &lt;&lt; '\n';
}
 | output=
true
}}
{{todo|could use an example with user-defined regex_traits supplying user-defined transform_primary}}

[[de:cpp/regex/regex traits/transform primary]]
[[es:cpp/regex/regex traits/transform primary]]
[[fr:cpp/regex/regex traits/transform primary]]
[[it:cpp/regex/regex traits/transform primary]]
[[ja:cpp/regex/regex traits/transform primary]]
[[pt:cpp/regex/regex traits/transform primary]]
[[ru:cpp/regex/regex traits/transform primary]]
[[zh:cpp/regex/regex traits/transform primary]]</text>
      <sha1>996u3l1h9jnpcqo3mtu8r74tim04nje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/translate</title>
    <ns>0</ns>
    <id>8858</id>
    <revision>
      <id>51153</id>
      <parentid>41752</parentid>
      <timestamp>2013-06-01T03:52:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1191">{{cpp/regex/regex_traits/title|translate}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
CharT translate(CharT c) const;
}}
{{dcl end}}

Obtains the comparison key for the character {{tt|c}}, such that all characters that are equivalent to this character in the imbued locale produce the same key.

When the regex library needs to match two characters {{tt|c1}} and {{tt|c2}} and the flag  {{lc|std::regex_constants::collate}} is {{c|true}}, it executes {{c|1=regex_traits&lt;&gt;::translate(c1) == regex_traits&lt;&gt;::translate(c2)}}.

Standard library specializations of {{lc|std::regex_traits}} return {{tt|c}} unmodified.

===Parameters===
{{par begin}}
{{par | c | character that needs to be examined for equivalence}}
{{par end}}

===Return value===
The comparison key for {{tt|c}} in the currently imbued locale.

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/regex/regex traits/translate]]
[[es:cpp/regex/regex traits/translate]]
[[fr:cpp/regex/regex traits/translate]]
[[it:cpp/regex/regex traits/translate]]
[[ja:cpp/regex/regex traits/translate]]
[[pt:cpp/regex/regex traits/translate]]
[[ru:cpp/regex/regex traits/translate]]
[[zh:cpp/regex/regex traits/translate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/translate nocase</title>
    <ns>0</ns>
    <id>8860</id>
    <revision>
      <id>51154</id>
      <parentid>41750</parentid>
      <timestamp>2013-06-01T03:52:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1461">{{cpp/regex/regex_traits/title|translate_nocase}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | 1=
CharT translate_nocase(CharT c) const;
}}
{{dcl end}}

Obtains the comparison key for the character {{tt|c}}, such that all characters that are equivalent to this character in the imbued locale, ignoring the case differences, if any, produce the same key.

When the regex library needs to match two characters {{tt|c1}} and {{tt|c2}} and the flag  {{lc|std::regex_constants::icase}} is {{c|true}}, it executes {{c|1=regex_traits&lt;&gt;::translate_nocase(c1) == regex_traits&lt;&gt;::translate_nocase(c2)}}.

Standard library specializations of {{lc|std::regex_traits}} return {{c|std::use_facet&lt;std::ctype&lt;CharT&gt;&gt;(getloc()).tolower(c)}}, that is, convert {{tt|c}} to lowercase, using the currently imbued locale.

===Parameters===
{{par begin}}
{{par | c | character that needs to be examined for equivalence, ignoring case}}
{{par end}}

===Return value===
The case-insensitive comparison key for {{tt|c}} in the currently imbued locale.

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/regex/regex traits/translate nocase]]
[[es:cpp/regex/regex traits/translate nocase]]
[[fr:cpp/regex/regex traits/translate nocase]]
[[it:cpp/regex/regex traits/translate nocase]]
[[ja:cpp/regex/regex traits/translate nocase]]
[[pt:cpp/regex/regex traits/translate nocase]]
[[ru:cpp/regex/regex traits/translate nocase]]
[[zh:cpp/regex/regex traits/translate nocase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/regex traits/value</title>
    <ns>0</ns>
    <id>8946</id>
    <revision>
      <id>67016</id>
      <parentid>67015</parentid>
      <timestamp>2014-01-17T00:27:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix copypasted comment</comment>
      <text xml:space="preserve" bytes="2600">{{cpp/regex/regex_traits/title|value}}
{{cpp/regex/regex_traits/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
int value( CharT ch, int radix ) const;
}}
{{dcl end}}

Determines the value represented by the digit {{tt|ch}} in the numeric base {{tt|radix}}, given the currently imbued locale. This function is called by {{lc|std::regex}} when processing [[cpp/regex/ecmascript#Quantifiers|Quantifiers]] such as {{tt|{1}}} or {{tt|{2,5}}}, [[cpp/regex/ecmascript#Backreferences|Backreferences]] such as {{tt|\1}}, and hexadecimal and Unicode character escapes.

===Parameters===
{{par begin}}
{{par | ch | the character that may represent a digit}}
{{par | radix | either 8, 10, or 16 }}
{{par end}}

===Return value===
The numeric value if {{tt|ch}} indeed represents a digit in the currently imbued locale that is valid for the numeric base {{tt|radix}}, or {{c|-1}} on error.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;locale&gt;
#include &lt;regex&gt;
#include &lt;map&gt;

// This custom regex traits allows japanese numerals
struct jnum_traits : std::regex_traits&lt;wchar_t&gt;
{   
    static std::map&lt;wchar_t, int&gt; data;
    int value(wchar_t ch, int radix ) const {
        wchar_t up = std::toupper(ch, getloc());
        return data.count(up) ? data[up] : regex_traits::value(ch, radix);
    }
};
std::map&lt;wchar_t, int&gt; jnum_traits::data = {{L'〇',0}, {L'一',1}, {L'二',2},
                                            {L'三',3}, {L'四',4}, {L'五',5},
                                            {L'六',6}, {L'七',7}, {L'八',8},
                                            {L'九',9}, {L'Ａ',10}, {L'Ｂ',11},
                                            {L'Ｃ',12}, {L'Ｄ',13}, {L'Ｅ',14},
                                            {L'Ｆ',15}};
int main()
{   
    std::locale::global(std::locale(&quot;ja_JP.utf8&quot;));
    std::wcout.sync_with_stdio(false);
    std::wcout.imbue(std::locale());

    std::wstring in = L&quot;風&quot;;

    if(std::regex_match(in, std::wregex(L&quot;\\u98a8&quot;)))
        std::wcout &lt;&lt; &quot;\\u98a8 matched &quot; &lt;&lt; in &lt;&lt; '\n';

    if(std::regex_match(in, std::basic_regex&lt;wchar_t, jnum_traits&gt;(L&quot;\\u九八ａ八&quot;)))
        std::wcout &lt;&lt; L&quot;\\u九八ａ八 with custom traits matched &quot; &lt;&lt; in &lt;&lt; '\n';
}
 | output=
\u98a8 matched 風
\u九八ａ八 with custom traits matched 風
}}

[[de:cpp/regex/regex traits/value]]
[[es:cpp/regex/regex traits/value]]
[[fr:cpp/regex/regex traits/value]]
[[it:cpp/regex/regex traits/value]]
[[ja:cpp/regex/regex traits/value]]
[[pt:cpp/regex/regex traits/value]]
[[ru:cpp/regex/regex traits/value]]
[[zh:cpp/regex/regex traits/value]]</text>
      <sha1>d6dqatb7js2plv9rkljdoma4e30j4yg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/sub match</title>
    <ns>0</ns>
    <id>2280</id>
    <revision>
      <id>72796</id>
      <parentid>63425</parentid>
      <timestamp>2014-09-26T12:35:37Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Member objects */ use {{dsc mem obj}}</comment>
      <text xml:space="preserve" bytes="3181">{{cpp/title|sub_match}}
{{cpp/regex/sub_match/navbar}}
{{ddcl | header=regex | since=c++11 | 1=
template&lt;
    class BidirIt
&gt; class sub_match;
}}

The class template {{tt|sub_match}} is used by the regular expression engine to denote sequences of characters matched by marked sub-expressions.
A match is a {{tt|[begin, end)}} pair within the target range matched by the regular expression, but with additional observer functions to enhance code clarity.

Only the default constructor is publicly accessible.  Instances of {{tt|sub_match}} are normally constructed and populated as a part of a {{lc|std::match_results}} container during the processing of one of the regex algorithms.

The member functions return defined default values unless the {{c|matched}} member is {{tt|true}}.

{{tt|sub_match}} inherits from {{c|std::pair&lt;BidirIt, BidirIt&gt;}}, although it cannot be treated as a {{lc|std::pair}} object because member functions such as swap and assignment will not work as expected.

===Type requirements===
{{par begin}}
{{par req concept | BidirIt | BidirectionalIterator}}
{{par end}}

===Specializations===
Several specializations for common character sequence types are provided: 

{{dsc begin}}
{{dsc header | regex}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|csub_match}} | {{c|sub_match&lt;const char*&gt;}}}}
{{dsc | {{tt|wcsub_match}} | {{c|sub_match&lt;const wchar_t*&gt;}}}}
{{dsc | {{tt|ssub_match}} | {{c|sub_match&lt;std::string::const_iterator&gt;}}}}
{{dsc | {{tt|wssub_match}} | {{c|sub_match&lt;std::wstring::const_iterator&gt;}}}}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|iterator}} | {{c|BidirIt}}}}
{{dsc | {{tt|value_type}} | {{c|std::iterator_traits&lt;BidirIt&gt;::value_type}}}}
{{dsc | {{tt|difference_type}} | {{c|std::iterator_traits&lt;BidirIt&gt;::difference_type}}}}
{{dsc | {{tt|string_type}} | {{c|std::basic_string&lt;value_type&gt;}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|bool}} matched | Indicates if this match was successful}}
{{dsc end}}
{{inherited | [[cpp/utility/pair | {{small|std::}}pair]] |
{{dsc begin}}
{{dsc mem obj | nolink=true | {{dsc small|BidirIt}} first | Start of the match sequence.}}
{{dsc mem obj | nolink=true | {{dsc small|BidirIt}} second | One-past-the-end of the match sequence.}}
{{dsc end}}
}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/sub_match/dsc constructor}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/regex/sub_match/dsc length}}
{{dsc inc | cpp/regex/sub_match/dsc str}}
{{dsc inc | cpp/regex/sub_match/dsc compare}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/regex/sub_match/dsc operator_cmp}}
{{dsc tfun | cpp/regex/sub_match/operator_ltlt | title=operator&lt;&lt; | outputs the matched character subsequence}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/regex/regex_token_iterator | iterates through regex submatches | notes={{mark c++11}}}}
{{dsc end}}

[[de:cpp/regex/sub match]]
[[es:cpp/regex/sub match]]
[[fr:cpp/regex/sub match]]
[[it:cpp/regex/sub match]]
[[ja:cpp/regex/sub match]]
[[pt:cpp/regex/sub match]]
[[ru:cpp/regex/sub match]]
[[zh:cpp/regex/sub match]]</text>
      <sha1>ixb8xwtaypklq2zw4yfcg102hoihywy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/sub match/compare</title>
    <ns>0</ns>
    <id>3132</id>
    <revision>
      <id>84544</id>
      <parentid>83174</parentid>
      <timestamp>2016-03-20T03:31:41Z</timestamp>
      <contributor>
        <ip>223.3.8.120</ip>
      </contributor>
      <text xml:space="preserve" bytes="1872">{{cpp/regex/sub_match/title | compare}}
{{cpp/regex/sub_match/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
int compare( const sub_match&amp; m ) const;
}}
{{dcl | num=2 | since=c++11 |
int compare( const string_type&amp; s ) const;
}}
{{dcl | num=3 | since=c++11 |
int compare( const value_type* c ) const;
}}
{{dcl end}}

@1@ Compares two {{c|sub_match}} directly by comparing their underlying character sequences. Equivalent to {{c|str().compare(m.str())}}.

@2@ Compares a {{c|sub_match}} with a {{lc|std::basic_string}}. Equivalent to {{c|str().compare(s)}}.

@3@ Compares a {{c|sub_match}} with a null-terminated sequence of the underlying character type pointed to by {{tt|s}}. Equivalent to {{c|str().compare(c)}}.

This function is infrequently used directly by application code.  Instead, one of the non-member comparison operators are used.

===Parameters===
{{par begin}}
{{par | m | a pointer to another sub_match}}
{{par | s | a pointer to a string to compare to}}
{{par | c | a pointer to a null-terminated character sequence of the underlying {{c|value_type}} to compare to}}
{{par end}}

===Return value===
A value less than zero if this sub_match is ''less'' than the other character sequence, zero if the both underlyinging character sequences are equal, greater than zero if this sub_match is ''greater'' than the other character sequence.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc compare}}
{{dsc inc | cpp/regex/sub_match/dsc str}}
{{dsc inc | cpp/regex/sub_match/dsc operator_cmp}}
{{dsc end}}

[[de:cpp/regex/sub match/compare]]
[[es:cpp/regex/sub match/compare]]
[[fr:cpp/regex/sub match/compare]]
[[it:cpp/regex/sub match/compare]]
[[ja:cpp/regex/sub match/compare]]
[[pt:cpp/regex/sub match/compare]]
[[ru:cpp/regex/sub match/compare]]
[[zh:cpp/regex/sub match/compare]]</text>
      <sha1>n0xtaolov1r146wgb7ok5fb9y7mz3up</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/sub match/length</title>
    <ns>0</ns>
    <id>3130</id>
    <revision>
      <id>41739</id>
      <parentid>34594</parentid>
      <timestamp>2012-11-02T19:21:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh</comment>
      <text xml:space="preserve" bytes="583">{{cpp/regex/sub_match/title | length}}
{{cpp/regex/sub_match/navbar}}
{{ddcl |
difference_type length() const;
}}

===Parameters===
(none)

===Return value===

Returns the number of characters in the match, i.e. {{c|std::distance(first, second)}} if the match is valid, 0 otherwise.

===Complexity===

Constant

[[de:cpp/regex/sub match/length]]
[[es:cpp/regex/sub match/length]]
[[fr:cpp/regex/sub match/length]]
[[it:cpp/regex/sub match/length]]
[[ja:cpp/regex/sub match/length]]
[[pt:cpp/regex/sub match/length]]
[[ru:cpp/regex/sub match/length]]
[[zh:cpp/regex/sub match/length]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/sub match/operator cmp</title>
    <ns>0</ns>
    <id>12681</id>
    <revision>
      <id>83206</id>
      <parentid>83178</parentid>
      <timestamp>2016-01-24T15:19:52Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>correct signature (42 overloads is horrible and still do not support string_view, maybe we should report a LWG issue)</comment>
      <text xml:space="preserve" bytes="11178">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::sub_match)&lt;/small&gt;}}
{{cpp/regex/sub_match/navbar}}
{{dcl begin}}
{{dcl header | regex}}
{{dcl h | Direct comparison}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator==( const sub_match&lt;BidirIt&gt;&amp; lhs, 
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator!=( const sub_match&lt;BidirIt&gt;&amp; lhs, 
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;( const sub_match&lt;BidirIt&gt;&amp; lhs, 
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;=( const sub_match&lt;BidirIt&gt;&amp; lhs, 
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;( const sub_match&lt;BidirIt&gt;&amp; lhs, 
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;=( const sub_match&lt;BidirIt&gt;&amp; lhs, 
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}

{{dcl h | {{tt|std::basic_string}} and {{tt|std::sub_match}} }}
{{dcl | num=7 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator==( const std::basic_string&lt;
                     typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                     Traits,Alloc&gt;&amp; lhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=8 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator!=( const std::basic_string&lt;
                     typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                     Traits,Alloc&gt;&amp; lhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=9 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&lt;( const std::basic_string&lt;
                    typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                    Traits,Alloc&gt;&amp; lhs,
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=10 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&lt;=( const std::basic_string&lt;
                    typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                    Traits,Alloc&gt;&amp; lhs,
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=11 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&gt;( const std::basic_string&lt;
                    typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                    Traits,Alloc&gt;&amp; lhs,
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=12 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&gt;=( const std::basic_string&lt;
                     typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                     Traits,Alloc&gt;&amp; lhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}

{{dcl h | {{tt|std::sub_match}} and {{tt|std::basic_string}} }}
{{dcl | num=13 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator==( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const std::basic_string&lt;
                     typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                     Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=14 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator!=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const std::basic_string&lt;
                     typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                     Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=15 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&lt;( const sub_match&lt;BidirIt&gt;&amp; lhs,
                const std::basic_string&lt;
                    typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                    Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=16 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&lt;=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const std::basic_string&lt;
                     typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                     Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=17 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&gt;( const sub_match&lt;BidirIt&gt;&amp; lhs,
                const std::basic_string&lt;
                    typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                    Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=18 | since=c++11 | 1=
template&lt; class BidirIt, class Traits, class Alloc &gt;
bool operator&gt;=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const std::basic_string&lt;
                     typename std::iterator_traits&lt;BidirIt&gt;::value_type,
                     Traits,Alloc&gt;&amp; rhs );
}}

{{dcl h | {{tt|std::iterator_traits&lt;BidirIt&gt;::value_type*}} and {{tt|std::sub_match}} }}
{{dcl | num=19 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator==( const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=20 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator!=( const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=21 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;( const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs,
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=22 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;=( const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=23 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;( const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs,
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=24 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;=( const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}

{{dcl h | {{tt|std::sub_match}} and {{tt|std::iterator_traits&lt;BidirIt&gt;::value_type*}} }}
{{dcl | num=25 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator==( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs );
}}
{{dcl | num=26 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator!=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs );
}}
{{dcl | num=27 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;( const sub_match&lt;BidirIt&gt;&amp; lhs,
                const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs );
}}
{{dcl | num=28 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs );
}}
{{dcl | num=29 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;( const sub_match&lt;BidirIt&gt;&amp; lhs,
                const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs );
}}
{{dcl | num=30 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type* rhs );
}}

{{dcl h | {{tt|std::iterator_traits&lt;BidirIt&gt;::value_type&amp;}} and {{tt|std::sub_match}} }}
{{dcl | num=31 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator==( const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=32 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator!=( const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=33 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;( const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs,
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=34 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;=( const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=35 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;( const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs,
                const sub_match&lt;BidirIt&gt;&amp; rhs );
}}
{{dcl | num=36 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;=( const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs,
                 const sub_match&lt;BidirIt&gt;&amp; rhs );
}}

{{dcl h | {{tt|std::sub_match}} and {{tt|std::iterator_traits&lt;BidirIt&gt;::value_type&amp;}} }}
{{dcl | num=37 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator==( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs );
}}
{{dcl | num=38 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator!=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs );
}}
{{dcl | num=39 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;( const sub_match&lt;BidirIt&gt;&amp; lhs,
                const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs );
}}
{{dcl | num=40 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&lt;=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs );
}}
{{dcl | num=41 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;( const sub_match&lt;BidirIt&gt;&amp; lhs,
                const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs );
}}
{{dcl | num=42 | since=c++11 | 1=
template&lt; class BidirIt &gt;
bool operator&gt;=( const sub_match&lt;BidirIt&gt;&amp; lhs,
                 const typename std::iterator_traits&lt;BidirIt&gt;::value_type&amp; rhs );
}}

{{dcl end}}

Compares a {{tt|sub_match}} to another {{tt|sub_match}}, a string, a null-terminated character sequence or a character.

@1-6@ Compares two {{c|sub_match}} directly by comparing their underlying character sequences. Implemented as if by {{c|lhs.compare(rhs)}}

@7-18@ Compares a {{c|sub_match}} with a {{lc|std::basic_string}}. Implemented as if by {{c|sm.compare(typename sub_match&lt;BidirIt&gt;::string_type(st.data(), st.size())}}, where {{tt|sm}} is the {{tt|sub_match}} argument and {{tt|st}} is the {{tt|basic_string}} argument.

@19-30@ Compares a {{c|sub_match}} with a null-terminated string. Implemented as if by {{c|sm.compare(s)}}, where {{tt|sm}} is the {{tt|sub_match}} and {{tt|s}} is the pointer to a null-terminated character string.

@31-42@ Compares a {{c|sub_match}} with a character. Implemented as if by {{c|sm.compare(typename sub_match&lt;BidirIt&gt;::string_type(1, ch))}}, where {{tt|sm}} is a {{tt|sub_match}} and {{tt|ch}} is a character.

===Parameters===
{{par begin}}
{{par | lhs, rhs | a {{tt|sub_match}}, {{tt|basic_string}}, pointer to a null-terminated string or a character to compare}}
{{par end}}

===Return value===
{{c|true}} if the corresponding comparison holds as defined by {{lc|std::sub_match::compare()}}, {{c|false}} otherwise.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/sub_match/dsc compare}}
{{dsc end}}</text>
      <sha1>o48zcf26omm6bcbbpmgyra0tejlim96</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/sub match/operator ltlt</title>
    <ns>0</ns>
    <id>12680</id>
    <revision>
      <id>71240</id>
      <parentid>61474</parentid>
      <timestamp>2014-06-08T22:50:44Z</timestamp>
      <contributor>
        <username>Roysc</username>
        <id>2387</id>
      </contributor>
      <minor/>
      <comment>title</comment>
      <text xml:space="preserve" bytes="677">{{title | operator&lt;&lt;{{small|(std::sub_match)}} }}
{{cpp/regex/sub_match/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class CharT, class Traits, class BidirIt &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp;
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; os, 
                const sub_match&lt;BidirIt&gt;&amp; m );
}}
{{dcl end}}

Writes the representation of the matched subsequence {{tt|m}} to the output stream {{tt|os}}.

Equivalent to {{c|os &lt;&lt; m.str()}}.

===Parameters===
{{par begin}}
{{par | os | output stream to write the representation to}}
{{par | m | a sub-match object to output}}
{{par end}}

===Return value===
{{tt|os}}.

===Example===
{{example
 | code=
 | output=
}}</text>
      <sha1>m5r3x2gee215wzgc391dw84hdygygmg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/sub match/str</title>
    <ns>0</ns>
    <id>3133</id>
    <revision>
      <id>69166</id>
      <parentid>62375</parentid>
      <timestamp>2014-03-28T18:12:42Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1133">{{cpp/regex/sub_match/title | operator string_type | str}}
{{cpp/regex/sub_match/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
operator string_type() const;
}}
{{dcl | num=2 | 1=
string_type str() const;
}}
{{dcl end}}

Converts to an object of the underlying {{lc|std::basic_string}} type.

The first version is an implicit conversion, the second one is explicit.

===Parameters===
(none)

===Return value===
Returns the matched character sequence as an object of the underlying {{lc|std::basic_string}} type.  If the {{tt|matched}} member is ''false'' then the empty string is returned.

===Complexity===
Linear in the length of the underlying character sequence.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;regex&gt;
#include &lt;string&gt;
int main()
{
  std::ssub_match sm;
  std::string s = sm;  // implicit conversion
  std::cout &lt;&lt; s.length() &lt;&lt; '\n';
}
 | output=
0
}}

[[de:cpp/regex/sub match/str]]
[[es:cpp/regex/sub match/str]]
[[fr:cpp/regex/sub match/str]]
[[it:cpp/regex/sub match/str]]
[[ja:cpp/regex/sub match/str]]
[[pt:cpp/regex/sub match/str]]
[[ru:cpp/regex/sub match/str]]
[[zh:cpp/regex/sub match/str]]</text>
      <sha1>aahbatug92bb95hjmvmk55zkw4dsk0u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/sub match/sub match</title>
    <ns>0</ns>
    <id>3134</id>
    <revision>
      <id>51159</id>
      <parentid>47504</parentid>
      <timestamp>2013-06-01T03:53:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="653">{{cpp/regex/sub_match/title | sub_match}}
{{cpp/regex/sub_match/navbar}}
{{dcl begin}}
{{dcl| constexpr sub_match();}}
{{dcl end}}

Default constructs a {{lc|std::sub_match}}.  The {{c|1=matched}} member is set to ''false'' and the value of other members is undefined.

This is the only publicly accessible and defined constructor.

===Parameters===
(none)

[[de:cpp/regex/sub match/sub match]]
[[es:cpp/regex/sub match/sub match]]
[[fr:cpp/regex/sub match/sub match]]
[[it:cpp/regex/sub match/sub match]]
[[ja:cpp/regex/sub match/sub match]]
[[pt:cpp/regex/sub match/sub match]]
[[ru:cpp/regex/sub match/sub match]]
[[zh:cpp/regex/sub match/sub match]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/regex/syntax option type</title>
    <ns>0</ns>
    <id>2320</id>
    <revision>
      <id>90930</id>
      <parentid>88360</parentid>
      <timestamp>2017-03-14T12:41:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="3779">{{cpp/title|n=regex_constants::|syntax_option_type}}
{{cpp/regex/navbar}}

{{dcl begin}}
{{dcl header | regex}}
{{dcl | since=c++11 | 1=
typedef /*unspecified*/ syntax_option_type;
}}
{{dcl rev multi | since1=c++11 | dcl1=
constexpr syntax_option_type icase = /*unspecified*/;
constexpr syntax_option_type nosubs = /*unspecified*/;
constexpr syntax_option_type optimize = /*unspecified*/;
constexpr syntax_option_type collate = /*unspecified*/;
constexpr syntax_option_type ECMAScript = /*unspecified*/;
constexpr syntax_option_type basic = /*unspecified*/;
constexpr syntax_option_type extended = /*unspecified*/;
constexpr syntax_option_type awk = /*unspecified*/;
constexpr syntax_option_type grep = /*unspecified*/;
constexpr syntax_option_type egrep = /*unspecified*/;
| since2=c++17 |dcl2=
inline constexpr syntax_option_type icase = /*unspecified*/;
inline constexpr syntax_option_type nosubs = /*unspecified*/;
inline constexpr syntax_option_type optimize = /*unspecified*/;
inline constexpr syntax_option_type collate = /*unspecified*/;
inline constexpr syntax_option_type ECMAScript = /*unspecified*/;
inline constexpr syntax_option_type basic = /*unspecified*/;
inline constexpr syntax_option_type extended = /*unspecified*/;
inline constexpr syntax_option_type awk = /*unspecified*/;
inline constexpr syntax_option_type grep = /*unspecified*/;
inline constexpr syntax_option_type egrep = /*unspecified*/;

inline constexpr syntax_option_type multiline = /*unspecified*/;
}}
{{dcl end}}

The {{tt|syntax_option_type}} is a {{concept|BitmaskType}} that contains options that govern how regular expressions behave.

The possible values for this type ({{tt|icase}}, {{tt|optimize}}, etc.) are duplicated inside [[cpp/regex/basic_regex/constants|std::basic_regex]].

===Constants===

{{cpp/regex/syntax option type consts}}

===Notes===
Because POSIX uses &quot;leftmost longest&quot; matching rule (the longest matching subsequence is matched, and if there are several such subsequences, the first one is matched), it is not suitable, for example, for parsing markup languages: a POSIX regex such as {{c|&quot;&lt;tag[^&gt;]*&gt;.*&lt;/tag&gt;&quot;}} would match everything from the first {{c|&quot;&lt;tag&quot;}} to the last {{c|&quot;&lt;/tag&gt;&quot;}}, including every {{c|&quot;&lt;/tag&gt;&quot;}} and {{c|&quot;&lt;tag&gt;&quot;}} inbetween. On the other hand, ECMAScript supports non-greedy matches, and the ECMAScript regex {{c|&quot;&lt;tag[^&gt;]*&gt;.*?&lt;/tag&gt;&quot;}} would match only until the first closing tag.

In C++11, these constants were specified with redundant keyword {{tt|static}}, which was removed by C++14 via [http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2053 LWG issue 2053]

===Example===
{{example
 | Illustrates the difference in the matching algorithm between ECMAScript and POSIX regular expressions
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;regex&gt;

int main()
{
    std::string str = &quot;zzxayyzz&quot;;
    std::regex re1(&quot;.*(a{{!}}xayy)&quot;); // ECMA
    std::regex re2(&quot;.*(a{{!}}xayy)&quot;, std::regex::extended); // POSIX

    std::cout &lt;&lt; &quot;Searching for .*(a{{!}}xayy) in zzxayyzz:\n&quot;;
    std::smatch m;
    std::regex_search(str, m, re1);
    std::cout &lt;&lt; &quot; ECMA (depth first search) match: &quot; &lt;&lt; m[0] &lt;&lt; '\n';
    std::regex_search(str, m, re2);
    std::cout &lt;&lt; &quot; POSIX (leftmost longest)  match: &quot; &lt;&lt; m[0] &lt;&lt; '\n';
}
 | output=
Searching for .*(a{{!}}xayy) in zzxayyzz:
 ECMA (depth first search) match: zzxa
 POSIX (leftmost longest)  match: zzxayy
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/regex/dsc basic_regex}}
{{dsc end}}

[[de:cpp/regex/syntax option type]]
[[es:cpp/regex/syntax option type]]
[[fr:cpp/regex/syntax option type]]
[[it:cpp/regex/syntax option type]]
[[ja:cpp/regex/syntax option type]]
[[pt:cpp/regex/syntax option type]]
[[ru:cpp/regex/syntax option type]]
[[zh:cpp/regex/syntax option type]]</text>
      <sha1>t9b5rzs75xcdvd6e9u6u5rgv0dswbvr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/resources</title>
    <ns>0</ns>
    <id>6601</id>
    <redirect title="cpp/links" />
    <revision>
      <id>25912</id>
      <timestamp>2012-04-28T19:36:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/resources]] to [[cpp/links]]: reflects the content better</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/links]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string</title>
    <ns>0</ns>
    <id>1388</id>
    <revision>
      <id>89282</id>
      <parentid>89281</parentid>
      <timestamp>2017-01-15T20:27:22Z</timestamp>
      <contributor>
        <ip>149.62.8.193</ip>
      </contributor>
      <comment>add space before 'c++17'</comment>
      <text xml:space="preserve" bytes="3652">{{title|Strings library}}
{{cpp/string/navbar}}

The C++ strings library includes support for three general types of strings:

* {{lc|std::basic_string}} - a templated class designed to manipulate strings of any character type.
* {{lc|std::basic_string_view}} {{mark c++17}} - a lightweight non-owning read-only view into a subsequence of a string.
* Null-terminated strings - arrays of characters terminated by a special ''null'' character.

=== {{lc|std::basic_string}} ===

The templated class {{lc|std::basic_string}} generalizes how sequences of characters are manipulated and stored.  String creation, manipulation, and destruction are all handled by a convenient set of class methods and related functions.

Several specializations of {{lc|std::basic_string}} are provided for commonly-used types:

{{dsc begin}}
{{dsc header | string}}
{{dsc hitem | Type | Definition}}
{{dsc | {{lc|std::string}} | {{c|std::basic_string&lt;char&gt;}}}}
{{dsc | {{lc|std::wstring}} | {{c|std::basic_string&lt;wchar_t&gt;}}}}
{{dsc | {{lc|std::u16string}} | {{c|std::basic_string&lt;char16_t&gt;}} | notes={{mark since c++11}}}}
{{dsc | {{lc|std::u32string}} | {{c|std::basic_string&lt;char32_t&gt;}} | notes={{mark since c++11}}}}
{{dsc end}}

{{rev begin}}
{{rev|since=c++17|
=== {{ltt|cpp/string/basic_string_view|std::basic_string_view}} ===

The templated class {{lc|std::basic_string_view}} provides a lightweight object that offers read-only access to a string or a part of a string using an interface similar to the interface of {{lc|std::basic_string}}.

Several specializations of {{lc|std::basic_string_view}} are provided for commonly-used types:

{{dsc begin}}
{{dsc header | string}}
{{dsc hitem | Type | Definition}}
{{dsc | {{lc|std::string_view}} | {{c|std::basic_string_view&lt;char&gt;}} | notes={{mark since c++17}}}}
{{dsc | {{lc|std::wstring_view}} | {{c|std::basic_string_view&lt;wchar_t&gt;}} | notes={{mark since c++17}}}}
{{dsc | {{lc|std::u16string_view}} | {{c|std::basic_string_view&lt;char16_t&gt;}} | notes={{mark since c++17}}}}
{{dsc | {{lc|std::u32string_view}} | {{c|std::basic_string_view&lt;char32_t&gt;}} | notes={{mark since c++17}}}}
{{dsc end}}
}}
{{rev end}}
=== Null-terminated strings ===

Null-terminated strings are arrays of characters that are terminated by a special ''null'' character.  C++ provides functions to create, inspect, and modify null-terminated strings.

There are three types of null-terminated strings:

* {{rl | byte | null-terminated byte strings}}
* {{rl | multibyte | null-terminated multibyte strings}}
* {{rl | wide | null-terminated wide strings}}

=== Additional support ===

===={{lc|std::char_traits}}====

The string library also provides class template {{lc|std::char_traits}} that defines types and functions for {{lc|std::basic_string}}. The following specializations are defined:

{{dcl begin}}
{{dcl header | string}}
{{dcl | notes=&lt;br&gt;&lt;br&gt;{{mark since c++11}}&lt;br&gt;{{mark since c++11}} |
template&lt;&gt; class char_traits&lt;char&gt;;
template&lt;&gt; class char_traits&lt;wchar_t&gt;;
template&lt;&gt; class char_traits&lt;char16_t&gt;;
template&lt;&gt; class char_traits&lt;char32_t&gt;;
}}
{{dcl end}}

====Conversions and classification====

The [[cpp/locale|localizations library]] provides support for string conversions (e.g. {{c|std::wstring_convert}} or {{c|std::toupper}}) as well as functions that classify characters (e.g. {{c|std::isspace}} or {{c|std::isdigit}}).

===See also===
{{dsc begin}}
{{dsc see cpp | cpp/locale | Localizations library}}
{{dsc see c | c/string | Strings library}}
{{dsc end}}

[[ar:cpp/string]]
[[de:cpp/string]]
[[es:cpp/string]]
[[fr:cpp/string]]
[[it:cpp/string]]
[[ja:cpp/string]]
[[pt:cpp/string]]
[[ru:cpp/string]]
[[zh:cpp/string]]</text>
      <sha1>2za7zxcodfzap93qz0cw7jp0xvzfj5j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string</title>
    <ns>0</ns>
    <id>1389</id>
    <revision>
      <id>91875</id>
      <parentid>91288</parentid>
      <timestamp>2017-03-31T20:00:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="7110">{{cpp/title|basic_string}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header|string}}
{{dcl |num=1|
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt;, 
    class Allocator {{=}} std::allocator&lt;CharT&gt;
&gt; class basic_string;
}}
{{dcl|since=c++17|num=2|1=
namespace pmr {
    template &lt;class CharT, class Traits = std::char_traits&lt;CharT&gt;&gt;
    using basic_string = std::basic_string&lt; CharT, Traits,
                                            std::polymorphic_allocator&lt;CharT&gt;&gt;
}
}}
{{dcl end}}

The class template {{tt|basic_string}} stores and manipulates sequences of {{ltt|cpp/language/types#Character_types|{{c|char}}}}-like objects. The class is dependent neither on the character type nor on the nature of operations on that type. The definitions of the operations are supplied via the {{tt|Traits}} template parameter - a specialization of {{lc|std::char_traits}} or a compatible traits class. {{tt|Traits::char_type}} and {{tt|CharT}} must name the same type; otherwise the behavior is undefined.{{mark unreviewed dr|LWG|2861}}

{{rev begin}}
{{rev | since=c++11 |
The elements of a {{tt|basic_string}} are stored contiguously, that is, for a basic_string {{tt|s}}, {{c|1=&amp;*(s.begin() + n) == &amp;*s.begin() + n}} for any n in {{tt|[0, s.size())}}, or, equivalently, a pointer to {{tt|s[0]}} can be passed to functions that expect a pointer to the first element of a {{tt|CharT[]}} array.
}}
{{rev end}}

{{tt|std::basic_string}} satisfies the requirements of {{concept|AllocatorAwareContainer}}, {{concept|SequenceContainer}} {{rev inl|since=c++17|and {{concept|ContiguousContainer}}}}

Several typedefs for common character types are provided:
{{dsc begin}}
{{dsc header | string}}
{{dsc hitem | Type | Definition}}
{{dsc | {{lc|std::string}} | {{c|std::basic_string&lt;char&gt;}}}}
{{dsc | {{lc|std::wstring}} | {{c|std::basic_string&lt;wchar_t&gt;}}}}
{{dsc | {{lc|std::u16string}} {{mark c++11}}| {{c|std::basic_string&lt;char16_t&gt;}} }}
{{dsc | {{lc|std::u32string}} {{mark c++11}}| {{c|std::basic_string&lt;char32_t&gt;}} }}
{{dsc | {{lc|std::pmr::string}} {{mark c++17}} | {{c|std::pmr::basic_string&lt;char&gt;}}}}
{{dsc | {{lc|std::pmr::wstring}} {{mark c++17}} | {{c|std::pmr::basic_string&lt;wchar_t&gt;}}}}
{{dsc | {{lc|std::pmr::u16string}} {{mark c++17}}| {{c|std::pmr::basic_string&lt;char16_t&gt;}} }}
{{dsc | {{lc|std::pmr::u32string}} {{mark c++17}}| {{c|std::pmr::basic_string&lt;char32_t&gt;}} }}
{{dsc end}}

===Template parameters===
{{par begin}}
{{par | CharT | character type}}
{{par | Traits | traits class specifying the operations on the character type}}
{{par | Allocator | {{concept|Allocator}} type used to allocate internal storage}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}} }}
{{dsc | {{tt|value_type}} | {{tt|CharT}}{{mark unreviewed dr|LWG|2861}} }}
{{dsc inc | cpp/container/dsc allocator_type | basic_string}}
{{dsc inc | cpp/container/dsc size_type | basic_string}}
{{dsc inc | cpp/container/dsc difference_type | basic_string}}
{{dsc inc | cpp/container/dsc reference | basic_string}}
{{dsc inc | cpp/container/dsc const_reference | basic_string}}
{{dsc inc | cpp/container/dsc pointer | basic_string}}
{{dsc inc | cpp/container/dsc const_pointer | basic_string}}
{{dsc inc | cpp/container/dsc iterator | basic_string}}
{{dsc inc | cpp/container/dsc const_iterator | basic_string}}
{{dsc inc | cpp/container/dsc reverse_iterator | basic_string}}
{{dsc inc | cpp/container/dsc const_reverse_iterator | basic_string}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc constructor}}
{{dsc mem dtor | nolink=true| destroys the string, deallocating internal storage if used }}
{{dsc inc | cpp/string/basic_string/dsc operator{{=}}}}
{{dsc inc | cpp/string/basic_string/dsc assign}}
{{dsc inc | cpp/string/basic_string/dsc get_allocator}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/string/basic_string/dsc at}}
{{dsc inc | cpp/string/basic_string/dsc operator_at}}
{{dsc inc | cpp/string/basic_string/dsc front}}
{{dsc inc | cpp/string/basic_string/dsc back}}
{{dsc inc | cpp/string/basic_string/dsc data}}
{{dsc inc | cpp/string/basic_string/dsc c_str}}
{{dsc inc | cpp/string/basic_string/dsc operator_string_view}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/string/basic_string/dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc end}}
{{dsc inc | cpp/string/basic_string/dsc rbegin}}
{{dsc inc | cpp/string/basic_string/dsc rend}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/string/basic_string/dsc empty}}
{{dsc inc | cpp/string/basic_string/dsc size}}
{{dsc inc | cpp/string/basic_string/dsc max_size}}
{{dsc inc | cpp/string/basic_string/dsc reserve}}
{{dsc inc | cpp/string/basic_string/dsc capacity}}
{{dsc inc | cpp/string/basic_string/dsc shrink_to_fit}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/string/basic_string/dsc clear}}
{{dsc inc | cpp/string/basic_string/dsc insert}}
{{dsc inc | cpp/string/basic_string/dsc erase}}
{{dsc inc | cpp/string/basic_string/dsc push_back}}
{{dsc inc | cpp/string/basic_string/dsc pop_back}}
{{dsc inc | cpp/string/basic_string/dsc append}}
{{dsc inc | cpp/string/basic_string/dsc operator+{{=}}}}
{{dsc inc | cpp/string/basic_string/dsc compare}}
{{dsc inc | cpp/string/basic_string/dsc replace}}
{{dsc inc | cpp/string/basic_string/dsc substr}}
{{dsc inc | cpp/string/basic_string/dsc copy}}
{{dsc inc | cpp/string/basic_string/dsc resize}}
{{dsc inc | cpp/string/basic_string/dsc swap}}

{{dsc h2 | Search}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc inc | cpp/string/basic_string/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_not_of}}

{{dsc h1 | Constants}}
{{dsc inc | cpp/string/basic_string/dsc npos}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc operator+}}
{{dsc inc | cpp/string/basic_string/dsc operator_cmp}}
{{dsc inc | cpp/string/basic_string/dsc swap2}}

{{dsc h2 | Input/output}}
{{dsc inc | cpp/string/basic_string/dsc operator_ltltgtgt}}
{{dsc inc | cpp/string/basic_string/dsc getline}}

{{dsc h2 | Numeric conversions}}
{{dsc inc | cpp/string/basic_string/dsc stol}}
{{dsc inc | cpp/string/basic_string/dsc stoul}}
{{dsc inc | cpp/string/basic_string/dsc stof}}
{{dsc inc | cpp/string/basic_string/dsc to_string}}
{{dsc inc | cpp/string/basic_string/dsc to_wstring}}
{{dsc end}}

===Literals===
{{dsc begin}}
{{dsc namespace | std::literals::string_literals | inline=true }}
{{dsc inc | cpp/string/basic_string/dsc operator&quot;&quot;s}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc hash}}
{{dsc end}}

[[de:cpp/string/basic string]]
[[es:cpp/string/basic string]]
[[fr:cpp/string/basic string]]
[[it:cpp/string/basic string]]
[[ja:cpp/string/basic string]]
[[pl:cpp/string/basic string]]
[[pt:cpp/string/basic string]]
[[ru:cpp/string/basic string]]
[[tr:cpp/string/basic string]]
[[zh:cpp/string/basic string]]</text>
      <sha1>lgwfhz1etjattnle23gqw32k4vqjuvo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view</title>
    <ns>0</ns>
    <id>15000</id>
    <revision>
      <id>91279</id>
      <parentid>90083</parentid>
      <timestamp>2017-03-30T21:12:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Member types */ adjust per LWG 2826</comment>
      <text xml:space="preserve" bytes="4422">{{cpp/title|basic_string_view}}
{{cpp/string/basic_string_view/navbar}}
{{ddcl | header=string_view | since=c++17 |
template&lt; 
    class CharT, 
    class Traits {{=}} std::char_traits&lt;CharT&gt; 
&gt; class basic_string_view;
}}

The class template {{tt|basic_string_view}} describes an object that can refer to a constant contiguous sequence of {{c|char}}-like objects with the first element of the sequence at position zero. 

A typical implementation holds only two members: a pointer to constant {{tt|CharT}} and a size.

Several typedefs for common character types are provided:
{{dsc begin}}
{{dsc header | string_view}}
{{dsc hitem | Type | Definition}}
{{dsc | {{lc|std::string_view}} | {{c|std::basic_string_view&lt;char&gt;}} }}
{{dsc | {{lc|std::wstring_view}} | {{c|std::basic_string_view&lt;wchar_t&gt;}} }}
{{dsc | {{lc|std::u16string_view}} | {{c|std::basic_string_view&lt;char16_t&gt;}} }}
{{dsc | {{lc|std::u32string_view}} | {{c|std::basic_string_view&lt;char32_t&gt;}} }}
{{dsc end}}

===Template parameters===
{{par begin}}
{{par | CharT | character type}}
{{par | Traits | {{concept|CharTraits}} class specifying the operations on the character type. {{c|Traits::char_type}} must name the same type as {{c|CharT}}. }}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|traits_type}} | {{tt|Traits}} }}
{{dsc | {{tt|value_type}} | {{tt|CharT}} }}
{{dsc | {{tt|pointer}} | {{tt|CharT*}} }}
{{dsc | {{tt|const_pointer}} | {{tt|const CharT*}} }}
{{dsc | {{tt|reference}} | {{tt|CharT&amp;}} }}
{{dsc | {{tt|const_reference}} | {{tt|const CharT&amp;}} }}
{{dsc | {{tt|const_iterator}} | implementation-defined constant {{concept|RandomAccessIterator}} and {{concept|ContiguousIterator}} whose {{tt|value_type}} is {{tt|CharT}} }}
{{dsc | {{tt|iterator}} | {{tt|const_iterator}} }}
{{dsc | {{tt|reverse_iterator}} | {{tt|const_reverse_iterator}} }}
{{dsc | {{tt|const_reverse_iterator}} | {{c|std::reverse_iterator&lt;const_iterator&gt;}} }}
{{dsc | {{tt|size_type}} | {{lc|std::size_t}} }}
{{dsc | {{tt|difference_type}} | {{lc|std::ptrdiff_t}} }}
{{dsc end}}

Note: {{tt|iterator}} and {{tt|const_iterator}} are the same type because string views are views into constant character sequences.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc constructor}}
{{dsc inc | cpp/string/basic_string_view/dsc operator{{=}}}}

{{dsc h2 | Iterators}}
{{dsc inc | cpp/string/basic_string_view/dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc end}}
{{dsc inc | cpp/string/basic_string_view/dsc rbegin}}
{{dsc inc | cpp/string/basic_string_view/dsc rend}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/string/basic_string_view/dsc operator_at}}
{{dsc inc | cpp/string/basic_string_view/dsc at}}
{{dsc inc | cpp/string/basic_string_view/dsc front}}
{{dsc inc | cpp/string/basic_string_view/dsc back}}
{{dsc inc | cpp/string/basic_string_view/dsc data}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/string/basic_string_view/dsc size}}
{{dsc inc | cpp/string/basic_string_view/dsc max_size}}
{{dsc inc | cpp/string/basic_string_view/dsc empty}}

{{dsc h2 | Modifers}}
{{dsc inc | cpp/string/basic_string_view/dsc remove_prefix}}
{{dsc inc | cpp/string/basic_string_view/dsc remove_suffix}}
{{dsc inc | cpp/string/basic_string_view/dsc swap}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/string/basic_string_view/dsc copy}}
{{dsc inc | cpp/string/basic_string_view/dsc substr}}
{{dsc inc | cpp/string/basic_string_view/dsc compare}}
{{dsc inc | cpp/string/basic_string_view/dsc find}}
{{dsc inc | cpp/string/basic_string_view/dsc rfind}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_not_of}}

{{dsc h1 | Constants}}
{{dsc inc | cpp/string/basic_string_view/dsc npos}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc operator_cmp}}

{{dsc h2 | Input/output}}
{{dsc inc | cpp/string/basic_string_view/dsc operator_ltlt}}
{{dsc end}}

===Literals===
{{dsc begin}}
{{dsc namespace | std::literals::string_view_literals | inline=true }}
{{dsc inc | cpp/string/basic_string_view/dsc operator&quot;&quot;sv}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc hash}}
{{dsc end}}

[[zh:cpp/string/basic_string_view]]</text>
      <sha1>nwv5hsyxk1gb8mbef1yn7xlb4z35rn0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/at</title>
    <ns>0</ns>
    <id>15043</id>
    <revision>
      <id>90116</id>
      <parentid>84447</parentid>
      <timestamp>2017-02-06T16:54:44Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="764">{{cpp/string/basic_string_view/title | at}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17|
constexpr const_reference at(size_type pos) const;
}}
{{dcl end}}

Returns a reference to the character at specified location {{tt|pos}}. Bounds checking is performed, exception of type {{lc|std::out_of_range}} will be thrown on invalid access.

===Parameters===
{{par begin}}
{{par | pos | position of the character to return}}
{{par end}}

===Return value===
Reference to the requested character.

===Exceptions===
Throws {{lc|std::out_of_range}} if {{c|1=pos &gt;= size()}}.

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc operator_at }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/at]]</text>
      <sha1>3b73olvp888kmal671lltfrra3qyhsd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/back</title>
    <ns>0</ns>
    <id>15045</id>
    <revision>
      <id>90120</id>
      <parentid>85294</parentid>
      <timestamp>2017-02-06T17:35:16Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="629">{{cpp/string/basic_string_view/title | back}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr const_reference back() const;
}}
{{dcl end}}

Returns reference to the last character in the view. The behavior is undefined if {{c|empty() {{==}} true}}.

===Parameters===
(none)

===Return value===
Reference to the last character, equivalent to {{c|operator[](size() - 1)}}.

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc front }}
{{dsc inc | cpp/string/basic_string_view/dsc empty }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/back]]</text>
      <sha1>t778jxgyny44yl8iarc1rpci967rsca</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/basic string view</title>
    <ns>0</ns>
    <id>15036</id>
    <revision>
      <id>91480</id>
      <parentid>90107</parentid>
      <timestamp>2017-03-31T19:46:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2634">{{cpp/string/basic_string_view/title|basic_string_view}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 
constexpr basic_string_view();
}}
{{dcl | num=2 | since=c++17| 
constexpr basic_string_view(const basic_string_view&amp; other) {{=}} default;
}}
{{dcl | num=3 | since=c++17 |
constexpr basic_string_view(const CharT* s, size_type count);
}}
{{dcl | num=4 | since=c++17|
constexpr basic_string_view(const CharT* s);
}}
{{dcl end}}

@1@ Default constructor. Constructs an empty {{tt|basic_string_view}}. After construction, {{lc|data()}} is equal to {{tt|nullptr}}, and {{lc|size()}} is equal to {{tt|0}}.
@2@ Copy constructor. Constructs a view of the same content as {{tt|other}}. After construction, {{lc|data()}} is equal to {{tt|other.data()}}, and {{lc|size()}} is equal to {{tt|other.size()}}.
@3@ Constructs a view of the first {{tt|count}} characters of the character array starting with the element pointed by {{tt|s}}. {{tt|s}} can contain null characters. The behavior is undefined if {{c|[s, s+count)}} is not a valid range (even though the constructor may not access any of the elements of this range). After construction, {{lc|data()}} is equal to {{tt|s}}, and {{lc|size()}} is equal to {{tt|count}}.
@4@ Constructs a view of the null-terminated character string pointed to by {{tt|s}}, not including the terminating null character. The length of the view is determined as if by {{c|Traits::length(s)}}. The behavior is undefined if {{c|[s, s+Traits::length(s))}} is not a valid range. After construction, {{lc|data()}} is equal to {{tt|s}}, and {{lc|size()}} is equal to {{tt|Traits::length(s)}}.

===Parameters===
{{par begin}}
{{par | other | another view to initialize the view with}}
{{par | s | pointer to a character array or a C string to initialize the view with}}
{{par | count | number of characters to include in the view}}
{{par end}} 

===Exceptions===
@1-3@ {{unreviewed noexcept}}

===Complexity===
@1-3@ constant
@4@ linear in length of {{tt|s}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;string_view&gt;
int main()
{
    std::wstring_view wcstr_v = L&quot;xyzzy&quot;;

    char array[3] = {'B', 'a', 'r'};
    std::string_view array_v(array, sizeof array);

    std::string cppstr = &quot;Foo&quot;;
    std::string_view cppstr_v(&amp;cppstr[0], cppstr.size()); 

    std::cout &lt;&lt; cppstr_v &lt;&lt; '\n'
              &lt;&lt; array_v &lt;&lt; '\n'
              &lt;&lt; wcstr_v.size() &lt;&lt; '\n';
}
|output=
Foo
Bar
5
}}
===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc operator{{=}} }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/basic_string_view]]</text>
      <sha1>r9ysvul4iry71ekw2o26ipi14ma8vz1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/begin</title>
    <ns>0</ns>
    <id>15038</id>
    <revision>
      <id>91682</id>
      <parentid>90109</parentid>
      <timestamp>2017-03-31T19:54:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="637">{{cpp/string/basic_string_view/title | begin | cbegin}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr const_iterator begin() const;
}}
{{dcl | since=c++17 |
constexpr const_iterator cbegin() const;
}}
{{dcl end}}

Returns an iterator to the first character of the view. 

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_iterator}} to the first character

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc end}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/begin]]</text>
      <sha1>t4qvxbqo1dbqai8spd8urksvaa39euc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/compare</title>
    <ns>0</ns>
    <id>15056</id>
    <revision>
      <id>91650</id>
      <parentid>90205</parentid>
      <timestamp>2017-03-31T19:53:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3149">{{cpp/string/basic_string_view/title | compare }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr int compare(basic_string_view v) const;
}}
{{dcl | num=2 | since=c++17|
constexpr int compare(size_type pos1, size_type count1,
                      basic_string_view v) const;
}}
{{dcl | num=3 | since=c++17|
constexpr int compare(size_type pos1, size_type count1, basic_string_view v,
                      size_type pos2, size_type count2) const;
}}
{{dcl | num=4 | since=c++17|
constexpr int compare(const CharT* s) const;
}}
{{dcl | num=5 | since=c++17|
constexpr int compare(size_type pos1, size_type count1,
                      const CharT* s) const;
}}
{{dcl | num=6 | since=c++17|
constexpr int compare(size_type pos1, size_type count1,
                      const CharT* s, size_type count2) const;
}}
{{dcl end}}

Compares two character sequences.

@1@The length {{tt|rlen}} of the sequences to compare is the smaller of {{c|size()}} and {{c|v.size()}}. The function compares the two views by calling {{c|traits::compare(data(), v.data(), rlen)}}, and returns a value according to the following table:

{| class=&quot;wikitable&quot; style=&quot;text-align:center;&quot;
! colspan=2 | Condition
! Result
! Return value
|-
| colspan=2 style=&quot;text-align:left;&quot; | {{tt|Traits::compare(data(), v.data(), {{spar|rlen}}) &lt; 0}}
| {{tt|this}} is ''less'' than {{tt|v}}
| {{c|&lt;0}}
|-
| rowspan=3 | {{tt|Traits::compare(data(), v.data(), {{spar|rlen}}) {{==}} 0}}
| {{tt|size() &lt; v.size()}}
| {{tt|this}} is ''less'' than {{tt|v}}
| {{c|&lt;0}}
|-
&lt;!-- --&gt;
| {{tt|size() {{==}} v.size()}}
| {{tt|this}} is ''equal'' to {{tt|v}}
| {{c|0}}
|-
&lt;!-- --&gt;
| {{tt|size() &gt; v.size()}}
| {{tt|this}} is ''greater'' than {{tt|v}}
| {{c|&gt;0}}
|-
| colspan=2 style=&quot;text-align:left;&quot; | {{tt|Traits::compare(data(), v.data(), {{spar|rlen}}) &gt; 0}}
| {{tt|this}} is ''greater'' than {{tt|v}}
| {{c|&gt;0}}
|}

@2@Equivalent to {{c|substr(pos1, count1).compare(v)}}.
@3@Equivalent to {{c|substr(pos1, count1).compare(v.substr(pos2, count2))}}.
@4@Equivalent to {{c|compare(basic_string_view(s))}}.
@5@Equivalent to {{c|substr(pos1, count1).compare(basic_string_view(s))}}.
@6@Equivalent to {{c|substr(pos1, count1).compare(basic_string_view(s, count2))}}.

===Parameters===
{{par begin}}
{{par | v | view to compare}}
{{par | s | pointer to the character string to compare to}}
{{par | count1 | number of characters of this view to compare}}
{{par | pos1 | position of the first character in this view to compare}}
{{par | count2 | number of characters of the given view to compare}}
{{par | pos2 | position of the first character of the given view to compare}}
{{par end}} 

===Return value===
negative value if this view is less than the other character sequence, zero if the both character sequences are equal, positive value if this view is greater than the other character sequence.

===Exceptions===
1) {{unreviewed noexcept}}

===Complexity===
1) Linear in the number of characters compared.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc operator_cmp}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/compare]]</text>
      <sha1>r6migqx023bf9tpnoqlakdwr5urccb0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/copy</title>
    <ns>0</ns>
    <id>15054</id>
    <revision>
      <id>90125</id>
      <parentid>89051</parentid>
      <timestamp>2017-02-06T18:53:56Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="916">{{cpp/string/basic_string_view/title | copy }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
size_type copy( CharT* dest,
                size_type count,
                size_type pos {{=}} 0) const;
}}
{{dcl end}}

Copies the substring {{tt|[pos, pos + rcount)}} to the character string pointed to by {{tt|dest}}, where {{tt|rcount}} is the smaller of {{tt|count}} and {{c|size() - pos}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the destination character string}}
{{par | pos | position of the first character}}
{{par | count | requested substring length}}
{{par end}} 

===Return value===
Number of characters copied

===Exceptions===
{{lc|std::out_of_range}} if {{c|1=pos &gt; size()}}.

===Complexity===
Linear in {{tt|rcount}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc substr}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/copy]]</text>
      <sha1>2xfqbhdf36pbk4v4ku3ml00w79tccq0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/data</title>
    <ns>0</ns>
    <id>15046</id>
    <revision>
      <id>91661</id>
      <parentid>90121</parentid>
      <timestamp>2017-03-31T19:53:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1735">{{cpp/string/basic_string_view/title | data}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr const_pointer data() const;
}}
{{dcl end}}

Returns a pointer to the underlying character array. The pointer is such that the range [data(); data() + size()) is valid and the values in it correspond to the values of the view. 

===Parameters===
(none)

===Return value===
A pointer to the underlying character array.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===Notes===
Unlike {{lc|std::basic_string::data()}} and string literals, {{tt|data()}} may return a pointer to a buffer that is not null-terminated. Therefore it is typically a mistake to pass {{tt|data()}} to a routine that takes just a {{tt|const CharT*}} and expects a null-terminated string.

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;cwchar&gt;
#include &lt;string&gt;
#include &lt;string_view&gt;
int main()
{
    std::wstring_view wcstr_v = L&quot;xyzzy&quot;;
    std::cout &lt;&lt; std::wcslen(wcstr_v.data()) &lt;&lt; '\n';
    // OK: the underlying character array is null-terminated

    char array[3] = {'B', 'a', 'r'};
    std::string_view array_v(array, sizeof array);
    // std::cout &lt;&lt; std::strlen(array_v.data()) &lt;&lt; '\n';
    // error: the underlying character array is not null-terminated

    std::string str(array_v.data(), array_v.size()); // OK
    std::cout &lt;&lt; std::strlen(str.data()) &lt;&lt; '\n';
    // OK: the underlying character array of a std::string is always null-terminated
}
| output=
5
3
}}
===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc front }}
{{dsc inc | cpp/string/basic_string_view/dsc back }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/data]]</text>
      <sha1>3yrbo9vc0lg5ea87rfftk7i1kocwdwr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/empty</title>
    <ns>0</ns>
    <id>15049</id>
    <revision>
      <id>91685</id>
      <parentid>90112</parentid>
      <timestamp>2017-03-31T19:54:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="610">{{cpp/string/basic_string_view/title | empty }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr bool empty() const;
}}
{{dcl end}}

Checks if the view has no characters, i.e. whether {{tt|size() {{==}} 0}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the view is empty, {{c|false}} otherwise

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc size }}
{{dsc inc | cpp/string/basic_string_view/dsc max_size }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/empty]]</text>
      <sha1>f9i0drx2b50wrcleaidxk9ejgwipsoj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/end</title>
    <ns>0</ns>
    <id>15039</id>
    <revision>
      <id>91507</id>
      <parentid>90113</parentid>
      <timestamp>2017-03-31T19:48:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="766">{{cpp/string/basic_string_view/title | end | cend}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17|
constexpr const_iterator end() const;
}}
{{dcl | since=c++17|
constexpr const_iterator cend() const;
}}
{{dcl end}}

Returns an iterator to the character following the last character of the view. This character acts as a placeholder, attempting to access it results in undefined behavior.

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_iterator}} to the character following the last character.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc begin}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/end]]</text>
      <sha1>oupdv0ldw9k4tdq1n44k44d8arszwhe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/find</title>
    <ns>0</ns>
    <id>15057</id>
    <revision>
      <id>91514</id>
      <parentid>90137</parentid>
      <timestamp>2017-03-31T19:48:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1767">{{cpp/string/basic_string_view/title | find }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr size_type find(basic_string_view v, size_type pos {{=}} 0) const;
}}
{{dcl | num=2 | since=c++17|
constexpr size_type find(CharT c, size_type pos {{=}} 0) const;
}}
{{dcl | num=3 | since=c++17|
constexpr size_type find(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=c++17|
constexpr size_type find(const CharT* s, size_type pos {{=}} 0) const;
}}
{{dcl end}}

Finds the first substring equal to the given character sequence.

@1@Finds the first occurence of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of substring to search for}}
{{par | s | pointer to a character string to search for}}
{{par | ch | character to search for}}
{{par end}} 


===Return value===
Position of the first character of the found substring, or {{lc|npos}} if no such substring is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc rfind}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_not_of}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/find]]</text>
      <sha1>a647kh9su0u3m4c3nfoov965oau4sc9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/find first not of</title>
    <ns>0</ns>
    <id>15061</id>
    <revision>
      <id>91531</id>
      <parentid>90141</parentid>
      <timestamp>2017-03-31T19:49:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1996">{{cpp/string/basic_string_view/title | find_first_not_of }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr size_type 
    find_first_not_of(basic_string_view v, size_type pos {{=}} 0) const;
}}
{{dcl | num=2 | since=c++17 |
constexpr size_type
    find_first_not_of(CharT c, size_type pos {{=}} 0) const;
}}
{{dcl | num=3 | since=c++17 |
constexpr size_type
    find_first_not_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=c++17 |
constexpr size_type
    find_first_not_of(const CharT* s, size_type pos {{=}} 0) const;
}}
{{dcl end}}

Finds the first character not equal to any of the characters in the given character sequence.

@1@Finds the first character not equal to any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_first_not_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_first_not_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_first_not_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to compare}}
{{par | s | pointer to a string of characters to compare}}
{{par | ch | character to compare}}
{{par end}} 

===Return value===
Position of the first character not equal to any of the characters in the given string, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc find}}
{{dsc inc | cpp/string/basic_string_view/dsc rfind}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_not_of}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/find_first_not_of]]</text>
      <sha1>33946r0v3aqvxy0six5mj5aemebw1a4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/find first of</title>
    <ns>0</ns>
    <id>15059</id>
    <revision>
      <id>91590</id>
      <parentid>90139</parentid>
      <timestamp>2017-03-31T19:50:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1922">{{cpp/string/basic_string_view/title | find_first_of }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr size_type find_first_of(basic_string_view v, size_type pos {{=}} 0) const;
}}
{{dcl | num=2 | since=c++17 |
constexpr size_type find_first_of(CharT c, size_type pos {{=}} 0) const;
}}
{{dcl | num=3 | since=c++17 |
constexpr size_type find_first_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=c++17 |
constexpr size_type find_first_of(const CharT* s, size_type pos {{=}} 0) const;
}}
{{dcl end}}

Finds the first character equal to any of the characters in the given character sequence.

@1@Finds the first occurence of any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_first_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_first_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_first_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to search for}}
{{par | s | pointer to a string of characters to search for}}
{{par | ch | character to search for}}
{{par end}} 

===Return value===
Position of the first occurrence of any character of the substring, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc find}}
{{dsc inc | cpp/string/basic_string_view/dsc rfind}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_not_of}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/find_first_of]]</text>
      <sha1>23kktfmqji4qr4wv9jlqyml2vizy6qn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/find last not of</title>
    <ns>0</ns>
    <id>15062</id>
    <revision>
      <id>91703</id>
      <parentid>90142</parentid>
      <timestamp>2017-03-31T19:55:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1995">{{cpp/string/basic_string_view/title | find_last_not_of }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr size_type 
    find_last_not_of(basic_string_view v, size_type pos {{=}} npos) const;
}}
{{dcl | num=2 | since=c++17 |
constexpr size_type
    find_last_not_of(CharT c, size_type pos {{=}} npos) const;
}}
{{dcl | num=3 | since=c++17 |
constexpr size_type
    find_last_not_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=c++17  |
constexpr size_type
    find_last_not_of(const CharT* s, size_type pos {{=}} npos) const;
}}
{{dcl end}}

Finds the last character not equal to any of the characters in the given character sequence.

@1@Finds the last character not equal to any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_last_not_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_last_not_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_last_not_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to compare}}
{{par | s | pointer to a string of characters to compare}}
{{par | ch | character to compare}}
{{par end}} 

===Return value===
Position of the last character not equal to any of the characters in the given string, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc find}}
{{dsc inc | cpp/string/basic_string_view/dsc rfind}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_not_of}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/find_last_not_of]]</text>
      <sha1>8v2gowtlgaplyv6bcftb4uf5m3aj171</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/find last of</title>
    <ns>0</ns>
    <id>15060</id>
    <revision>
      <id>91622</id>
      <parentid>90140</parentid>
      <timestamp>2017-03-31T19:52:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1920">{{cpp/string/basic_string_view/title | find_last_of }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr size_type find_last_of(basic_string_view v, size_type pos {{=}} npos) const;
}}
{{dcl | num=2 | since=c++17 |
constexpr size_type find_last_of(CharT c, size_type pos {{=}} npos) const;
}}
{{dcl | num=3 | since=c++17 |
constexpr size_type find_last_of(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=c++17 |
constexpr size_type find_last_of(const CharT* s, size_type pos {{=}} npos) const;
}}
{{dcl end}}

Finds the last character equal to any of the characters in the given character sequence.

@1@Finds the last occurence of any of the characters of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|find_last_of(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|find_last_of(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|find_last_of(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of the string of characters to search for}}
{{par | s | pointer to a string of characters to search for}}
{{par | ch | character to search for}}
{{par end}} 

===Return value===
Position of the last occurrence of any character of the substring, or {{lc|npos}} if no such character is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc find}}
{{dsc inc | cpp/string/basic_string_view/dsc rfind}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_not_of}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/find_last_of]]</text>
      <sha1>885f2awjq2eey1qxe8ssi35s4r9vduf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/front</title>
    <ns>0</ns>
    <id>15044</id>
    <revision>
      <id>90117</id>
      <parentid>85293</parentid>
      <timestamp>2017-02-06T17:23:15Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="623">{{cpp/string/basic_string_view/title | front}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr const_reference front() const;
}}
{{dcl end}}

Returns reference to the first character in the view. The behavior is undefined if {{c|empty() {{==}} true}}.

===Parameters===
(none)

===Return value===
reference to the first character, equivalent to {{c|operator[](0)}}.

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc back }}
{{dsc inc | cpp/string/basic_string_view/dsc empty}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/front]]</text>
      <sha1>mx25eezr87vag3vvfbizbsbk3qmvhvp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/hash</title>
    <ns>0</ns>
    <id>15066</id>
    <revision>
      <id>90091</id>
      <parentid>88419</parentid>
      <timestamp>2017-02-06T06:52:20Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="935">{{cpp/title|hash &lt;small&gt;(std::string_view, std::wstring_view, std::u16string_view, std::u32string_view)&lt;/small&gt;}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl header | string_view}}
{{dcl | since=c++17 | 1=
template&lt;&gt; struct hash&lt;std::string_view&gt;;
template&lt;&gt; struct hash&lt;std::wstring_view&gt;;
template&lt;&gt; struct hash&lt;std::u16string_view&gt;;
template&lt;&gt; struct hash&lt;std::u32string_view&gt;;
}}
{{dcl end}}

Template specializations of {{lc|std::hash}} for the various view classes for hashing views.

{{rev begin}}
{{rev|since=c++17|
These hashes equal the hashes of corresponding {{lc|std::basic_string}} classes: If S is one of the standard basic_string types, SV is the corresponding string view type, and s is an object of type S, then {{c|std::hash&lt;S&gt;()(s) {{==}} std::hash&lt;SV&gt;()(SV(s))}}.
}}
{{rev end}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/hash]]</text>
      <sha1>jlhe33olxb9uyrudosr63j0bodgcws1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/max size</title>
    <ns>0</ns>
    <id>15048</id>
    <revision>
      <id>91787</id>
      <parentid>90110</parentid>
      <timestamp>2017-03-31T19:58:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="625">{{cpp/string/basic_string_view/title | max_size }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr size_type max_size() const;
}}
{{dcl end}}

The largest possible number of char-like objects that can be referred to by a {{tt|basic_string_view}}.

===Parameters===
(none)

===Return value===
Maximum number of characters.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc size }}
{{dsc inc | cpp/string/basic_string_view/dsc empty }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/max_size]]</text>
      <sha1>afma8pnv63z5pspzx83665xnrcla8sl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/npos</title>
    <ns>0</ns>
    <id>15063</id>
    <revision>
      <id>90106</id>
      <parentid>84468</parentid>
      <timestamp>2017-02-06T15:54:11Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="507">{{cpp/string/basic_string_view/title | npos}}
{{cpp/string/basic_string_view/navbar}}
{{ddcl | since=c++17 | 1=
static constexpr size_type npos = size_type(-1);
}}

This is a special value equal to the maximum value representable by the type {{tt|size_type}}. The exact meaning depends on context, but it is generally used either as end of view indicator by the functions that expect a view index or as the error indicator by the functions that return a view index.

[[zh:cpp/string/basic_string_view/npos]]</text>
      <sha1>2jiobkaiwsbw8gm56pld5mf775qqhkh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/operator at</title>
    <ns>0</ns>
    <id>15042</id>
    <revision>
      <id>90118</id>
      <parentid>84446</parentid>
      <timestamp>2017-02-06T17:29:13Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1210">{{cpp/string/basic_string_view/title | operator[]}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr const_reference operator[](size_type pos) const;
}}
{{dcl end}}

Returns a const reference to the character at specified location {{tt|pos}}.

No bounds checking is performed: the behavior is undefined if {{c|pos &gt;{{=}} size()}}. 

===Parameters===
{{par begin}}
{{par | pos | position of the character to return}}
{{par end}}

===Return value===
Const reference to the requested character

===Exceptions===
Does not throw

===Complexity===
Constant.

===Notes===
Unlike {{lc|std::basic_string::operator[]}}, {{tt|std::basic_string_view::operator[](size())}} has undefined behavior instead of returning {{tt|CharT()}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;string_view&gt;
int main()
{
    std::string str = &quot;Exemplar&quot;;
    std::string_view v = str;
    std::cout &lt;&lt; v[2] &lt;&lt; '\n';
//  v[2] = 'y'; // Error: cannot modify through a string view
    str[2] = 'y';
    std::cout &lt;&lt; v[2] &lt;&lt; '\n';
}
|output=
e
y
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc at }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/operator_at]]</text>
      <sha1>2axliurx5w0kxgs5eo4339bsn5u2jee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/operator cmp</title>
    <ns>0</ns>
    <id>15064</id>
    <revision>
      <id>91758</id>
      <parentid>90092</parentid>
      <timestamp>2017-03-31T19:57:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2605">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::basic_string_view)&lt;/small&gt;}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl header | string_view}}
{{dcl | num=1 | since=c++17 | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator==( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=2 | since=c++17 | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator!=( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=3 | since=c++17 | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&lt;( basic_string_view &lt;CharT,Traits&gt; lhs, 
                          basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=4 | since=c++17  | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&lt;=( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=5 | since=c++17 | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&gt;( basic_string_view &lt;CharT,Traits&gt; lhs, 
                          basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl | num=6 | since=c++17 | 1=
template&lt; class CharT, class Traits &gt;
constexpr bool operator&gt;=( basic_string_view &lt;CharT,Traits&gt; lhs, 
                           basic_string_view &lt;CharT,Traits&gt; rhs );
}}
{{dcl end}}

Compares two views.

All comparisons are done via the {{lc|compare()}} member function (which itself is defined in terms of {{tt|Traits::compare()}}):

* Two views are equal if both the size of {{tt|lhs}} and {{tt|rhs}} are equal and each character in {{tt|lhs}} has an equivalent character in {{tt|rhs}} at the same position.

* The ordering comparisons are done lexicographically -- the comparison is performed by a function equivalent to {{lc|std::lexicographical_compare}}.

The implementation shall provide sufficient additional {{tt|constexpr}} and {{tt|noexcept}} overloads of these functions so that a {{tt|basic_string_view&lt;CharT,Traits&gt;}} object {{tt|sv}} may be compared to another object {{tt|t}} with an implicit conversion to {{tt|basic_string_view&lt;CharT,Traits&gt;}}, with semantics identical to comparing {{tt|sv}} and {{tt|basic_string_view&lt;CharT,Traits&gt;(t)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | views to compare}}
{{par end}} 

===Return value===
{{c|true}} if the corresponding comparison holds, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Linear in the size of the views.

[[zh:cpp/string/basic_string_view/operator_cmp]]</text>
      <sha1>gvk41h1jt2t3u058qonr1gyws7o61tn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/operator ltlt</title>
    <ns>0</ns>
    <id>15065</id>
    <revision>
      <id>90101</id>
      <parentid>88308</parentid>
      <timestamp>2017-02-06T14:29:25Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1644">{{title|operator&lt;&lt;{{small|(std::basic_string_view)}}}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl header | string_view}}
{{dcl | since=c++17 |
template &lt;class CharT, class Traits&gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp;
    operator&lt;&lt;(std::basic_ostream&lt;CharT, Traits&gt;&amp; os, 
               std::basic_string_view &lt;CharT, Traits&gt; v);
}}
{{dcl end}}

Behaves as a {{concept|FormattedOutputFunction}}. After constructing and checking the sentry object, determines the output format padding as follows:
:a) If {{tt|v.size()}} is not less than {{tt|os.width()}}, uses the range {{tt|[v.begin(), v.end())}} as-is
:b) Otherwise, if {{c|(os.flags() &amp; ios_base::adjustfield) {{==}} ios_base::left}}, places {{tt|os.width()-v.size()}} copies of the {{tt|os.fill()}} character after the character sequence
:c) Otherwise, places {{tt|os.width()-v.size()}} copies of the {{tt|os.fill()}} character before the character sequence

Then stores each character from the resulting sequence (the contents of {{tt|v}} plus padding) to the output stream {{tt|os}} as if by calling {{c|os.rdbuf()-&gt;sputn(seq, n)}}, where {{c|1=n=std::max(os.width(), str.size())}}

Finally, calls {{c|os.width(0)}} to cancel the effects of {{lc|std::setw}}, if any.

===Exceptions===
May throw {{lc|std::ios_base::failure}} if an exception is thrown during output.

===Parameters===
{{par begin}}
{{par | os | a character output stream}}
{{par | v | the view to be inserted}}
{{par end}}

===Return value===
{{tt|os}}

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc operator_ltltgtgt}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/operator_ltlt]]</text>
      <sha1>2oilwfw7c64zpz2d4ny10eczs61ygbe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/operator&quot;&quot;sv</title>
    <ns>0</ns>
    <id>15724</id>
    <revision>
      <id>90102</id>
      <parentid>89158</parentid>
      <timestamp>2017-02-06T14:38:13Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="2005">{{cpp/title|n=literals::string_view_literals::|operator&quot;&quot;sv }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl header | string_view}}
{{dcl | num=1 | since=c++17 | 1=
constexpr string_view operator &quot;&quot; sv(const char* str, size_t len) noexcept;
}}
{{dcl | num=2 | since=c++17 | 1=
constexpr u16string_view operator &quot;&quot; sv(const char16_t* str, size_t len) noexcept;
}}
{{dcl | num=3 | since=c++17 | 1=
constexpr u32string_view operator &quot;&quot; sv(const char32_t* str, size_t len) noexcept;
}}
{{dcl | num=4 | since=c++17 | 1=
constexpr wstring_view   operator &quot;&quot; sv(const wchar_t* str, size_t len) noexcept;
}}
{{dcl end}}

Forms a string view of a character literal.

@1@ returns {{c|std::string_view{str, len} }}
@2@ returns {{c|std::u16string_view{str, len} }}
@3@ returns {{c|std::u32string_view{str, len} }}
@4@ returns {{c|std::wstring_view{str, len} }}

===Parameters===
{{par begin}}
{{par | str | pointer to the beginning of the raw character array literal}}
{{par | len | length of the raw character array literal}}
{{par end}}

===Return value===
The string_view literal.

===Notes===
These operators are declared in the namespace {{tt|std::literals::string_view_literals}}, where both {{tt|literals}} and {{tt|string_view_literals}} are inline namespaces. Access to these operators can be gained with {{c|using namespace std::literals}}, {{c|using namespace std::string_view_literals}}, and {{c|using namespace std::literals::string_view_literals}}.

===Example===
{{example
| code=
#include &lt;string_view&gt;
#include &lt;iostream&gt;

int main()
{
    using namespace std::literals;

    std::string_view s1 = &quot;abc\0\0def&quot;;
    std::string_view s2 = &quot;abc\0\0def&quot;sv;
    std::cout &lt;&lt; &quot;s1: &quot; &lt;&lt; s1.size() &lt;&lt; &quot; \&quot;&quot; &lt;&lt; s1 &lt;&lt; &quot;\&quot;\n&quot;;
    std::cout &lt;&lt; &quot;s2: &quot; &lt;&lt; s2.size() &lt;&lt; &quot; \&quot;&quot; &lt;&lt; s2 &lt;&lt; &quot;\&quot;\n&quot;;
}
| p=true
| output= 
s1: 3 &quot;abc&quot;
s2: 8 &quot;abc^@^@def&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc constructor}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/operator&quot;&quot;sv]]</text>
      <sha1>12ehcnr1zdx80d8kncqz9himz8zraw5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/operator=</title>
    <ns>0</ns>
    <id>15037</id>
    <revision>
      <id>91597</id>
      <parentid>90108</parentid>
      <timestamp>2017-03-31T19:51:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="798">{{cpp/string/basic_string_view/title | operator{{=}}}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |1=
constexpr basic_string_view&amp; operator=( const basic_string_view&amp; view ) = default;
}}
{{dcl end}}

Replaces the view with that of {{tt|view}}.

===Parameters===
{{par begin}}
{{par | view | view to copy}}
{{par end}} 

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;string_view&gt;
int main()
{
    std::string_view v = &quot;Hello, world&quot;;
    v = v.substr(7);
    std::cout &lt;&lt; v &lt;&lt; '\n';
}
|output=
world
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc constructor}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/operator=]]</text>
      <sha1>ivere2kbjgi0mi5xhwlcfk20mofjjs3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/rbegin</title>
    <ns>0</ns>
    <id>15040</id>
    <revision>
      <id>91717</id>
      <parentid>90114</parentid>
      <timestamp>2017-03-31T19:55:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="745">{{cpp/string/basic_string_view/title | rbegin | crbegin}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17|
constexpr const_reverse_iterator rbegin() const;
}}
{{dcl | since=c++17|
constexpr const_reverse_iterator crbegin() const;
}}
{{dcl end}}

Returns a reverse iterator to the first character of the reversed view. It corresponds to the last character of the non-reversed view.

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_reverse_iterator}} to the first character

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc rend}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/rbegin]]</text>
      <sha1>89dxvippjfz7agxtl9188jlo78ts2li</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/remove prefix</title>
    <ns>0</ns>
    <id>15050</id>
    <revision>
      <id>90122</id>
      <parentid>84454</parentid>
      <timestamp>2017-02-06T17:44:21Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="987">{{cpp/string/basic_string_view/title | remove_prefix }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr void remove_prefix(size_type n);
}}
{{dcl end}}

Moves the start of the view forward by {{tt|n}} characters.

The behavior is undefined if {{c|n &gt; size()}}.

===Parameters===
{{par begin}}
{{par | n | number of characters to remove from the start of the view}}
{{par end}}

===Return value===
(none)

===Complexity===
Constant.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;string_view&gt;
int main()
{
    std::string str = &quot;   trim me&quot;;
    std::string_view v = str;
    v.remove_prefix(std::min(v.find_first_not_of(&quot; &quot;), v.size()));
    std::cout &lt;&lt; &quot;String: '&quot; &lt;&lt; str &lt;&lt; &quot;'\n&quot;
              &lt;&lt; &quot;View  : '&quot; &lt;&lt; v &lt;&lt; &quot;'\n&quot;;
}
|output=
String: '   trim me'
View  : 'trim me'
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc remove_suffix }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/remove_prefix]]</text>
      <sha1>fzjk6b735d1kxrh12fekmq8zhns90ff</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/remove suffix</title>
    <ns>0</ns>
    <id>15051</id>
    <revision>
      <id>90123</id>
      <parentid>84455</parentid>
      <timestamp>2017-02-06T17:49:52Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1107">{{cpp/string/basic_string_view/title | remove_suffix }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr void remove_suffix(size_type n);
}}
{{dcl end}}

Moves the end of the view back by {{tt|n}} characters.

The behavior is undefined if {{c|n &gt; size()}}.

===Parameters===
{{par begin}}
{{par | n | number of characters to remove from the end of the view}}
{{par end}}

===Return value===
(none)

===Complexity===
Constant.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;string_view&gt;
int main()
{
    char arr[] = {'a', 'b', 'c', 'd', '\0', '\0', '\0'};
    std::string_view v(arr, sizeof arr);
    auto trim_pos = v.find('\0');
    if(trim_pos != v.npos)
        v.remove_suffix(v.size() - trim_pos);
    std::cout &lt;&lt; &quot;Array: '&quot; &lt;&lt; arr &lt;&lt; &quot;', size=&quot; &lt;&lt; sizeof arr &lt;&lt; '\n'
              &lt;&lt; &quot;View : '&quot; &lt;&lt; v &lt;&lt; &quot;', size=&quot; &lt;&lt; v.size() &lt;&lt; '\n';
}
|output=
Array: 'abcd', size=7
View : 'abcd', size=4
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc remove_prefix }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/remove_suffix]]</text>
      <sha1>jmg2ybxqif2qb1jgjffzs0jdilimqqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/rend</title>
    <ns>0</ns>
    <id>15041</id>
    <revision>
      <id>91616</id>
      <parentid>90115</parentid>
      <timestamp>2017-03-31T19:52:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="903">{{cpp/string/basic_string_view/title | rend | crend}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr const_reverse_iterator rend() const;
}}
{{dcl | since=c++17|
constexpr const_reverse_iterator crend() const;
}}
{{dcl end}}

Returns a reverse iterator to the character following the last character of the reversed view. It corresponds to the character preceding the first character of the non-reversed view. This character acts as a placeholder, attempting to access it results in undefined behavior.

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
{{tt|const_reverse_iterator}} to the character following the last character.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc rbegin}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/rend]]</text>
      <sha1>mzbtzuybhv3ex0f7zs8ca80zkl732lm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/rfind</title>
    <ns>0</ns>
    <id>15058</id>
    <revision>
      <id>91725</id>
      <parentid>90138</parentid>
      <timestamp>2017-03-31T19:55:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1784">{{cpp/string/basic_string_view/title | rfind }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr size_type rfind(basic_string_view v, size_type pos {{=}} npos) const;
}}
{{dcl | num=2 | since=c++17 |
constexpr size_type rfind(CharT c, size_type pos {{=}} npos) const;
}}
{{dcl | num=3 | since=c++17 |
constexpr size_type rfind(const CharT* s, size_type pos, size_type count) const;
}}
{{dcl | num=4 | since=c++17 |
constexpr size_type rfind(const CharT* s, size_type pos {{=}} npos) const;
}}
{{dcl end}}

Finds the last substring equal to the given character sequence.

@1@Finds the last occurence of {{tt|v}} in this view, starting at position {{tt|pos}}.
@2@Equivalent to {{c|rfind(basic_string_view(&amp;c, 1), pos)}}.
@3@Equivalent to {{c|rfind(basic_string_view(s, count), pos)}}.
@4@Equivalent to {{c|rfind(basic_string_view(s), pos)}}.

===Parameters===
{{par begin}}
{{par | v | view to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of substring to search for}}
{{par | s | pointer to a character string to search for}}
{{par | ch | character to search for}}
{{par end}} 


===Return value===
Position of the first character of the found substring or {{lc|npos}} if no such substring is found.

===Exceptions===
1-2) {{unreviewed noexcept}}

===Complexity===
O({{tt|size()}} * {{tt|v.size()}}) at worst.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc find}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string_view/dsc find_last_not_of}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/rfind]]</text>
      <sha1>mm4hbome4i7o0fbk3a9nebngq11i91a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/size</title>
    <ns>0</ns>
    <id>15047</id>
    <revision>
      <id>91839</id>
      <parentid>90111</parentid>
      <timestamp>2017-03-31T19:59:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="701">{{cpp/string/basic_string_view/title | size | length}}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr size_type size() const;
}}
{{dcl | since=c++17 |
constexpr size_type length() const;
}}
{{dcl end}}

Returns the number of {{tt|CharT}} elements in the view, i.e. {{c|std::distance(begin(), end())}}. 

===Parameters===
(none)

===Return value===
The number of {{tt|CharT}} elements in the view.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc empty }}
{{dsc inc | cpp/string/basic_string_view/dsc max_size }}
{{dsc end}}

[[zh:cpp/string/basic_string_view/size]]</text>
      <sha1>6lzf2a7rtzmcv58x1ctnhkxoqp8ney4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/substr</title>
    <ns>0</ns>
    <id>15055</id>
    <revision>
      <id>90126</id>
      <parentid>85786</parentid>
      <timestamp>2017-02-06T18:56:50Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="823">{{cpp/string/basic_string_view/title | substr}}
{{cpp/string/basic_string_view/navbar}}
{{ddcl | since=c++17 | 1=
constexpr basic_string_view
    substr(size_type pos = 0, size_type count = npos ) const;
}}

Returns a view of the substring {{tt|[pos, pos + rcount)}}, where {{tt|rcount}} is the smaller of {{tt|count}} and {{c|size() - pos}}.

===Parameters===
{{par begin}}
{{par | pos | position of the first character}}
{{par | count | requested length}}
{{par end}} 

===Return value===
View of the substring {{tt|[pos, pos + rcount)}}.

===Exceptions===
{{lc|std::out_of_range}} if {{c|pos &gt; size()}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc copy}}
{{dsc inc | cpp/string/basic_string_view/dsc find}}
{{dsc end}}

[[zh:cpp/string/basic_string_view/substr]]</text>
      <sha1>magewkje80nk24hs47tk3x1pscjp3cu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string view/swap</title>
    <ns>0</ns>
    <id>15052</id>
    <revision>
      <id>91860</id>
      <parentid>90124</parentid>
      <timestamp>2017-03-31T20:00:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="438">{{cpp/string/basic_string_view/title | swap }}
{{cpp/string/basic_string_view/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
constexpr void swap(basic_string_view&amp; v);
}}
{{dcl end}}

Exchanges the view with that of {{tt|v}}.

===Parameters===
{{par begin}}
{{par | v | view to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

[[zh:cpp/string/basic_string_view/swap]]</text>
      <sha1>0zv2birny7yky5q0aik6gb4e9m8tj34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/append</title>
    <ns>0</ns>
    <id>1390</id>
    <revision>
      <id>88881</id>
      <parentid>88869</parentid>
      <timestamp>2016-12-16T22:42:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>&gt;</comment>
      <text xml:space="preserve" bytes="5715">{{cpp/string/basic_string/title | append}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_string&amp; append( size_type count, CharT ch );
}}
{{dcl | num=2 | 
basic_string&amp; append( const basic_string&amp; str );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++14 | 
basic_string&amp; append( const basic_string&amp; str,
                      size_type pos,
                      size_type count );
}}
{{dcl | since=c++14 | 
basic_string&amp; append( const basic_string&amp; str,
                      size_type pos,
                      size_type count {{=}} npos );
}}
{{dcl rev end}}
{{dcl | num=4 |
basic_string&amp; append( const CharT* s, size_type count );
}}
{{dcl | num=5 |
basic_string&amp; append( const CharT* s );
}}
{{dcl | num=6 | 1=
template&lt; class InputIt &gt;
basic_string&amp; append( InputIt first, InputIt last );
}}
{{dcl | num=7 | since=c++11 | 1=
basic_string&amp; append( std::initializer_list&lt;CharT&gt; ilist );
}}
{{dcl | num=8 | since=c++17 | 1=
basic_string&amp; append( std::basic_string_view&lt;CharT, Traits&gt; sv );
}}
{{dcl | num=9 | since=c++17 | 1=
template &lt; class T &gt;
basic_string&amp; append( const T&amp; t, size_type pos,
                      size_type count = npos );
}}
{{dcl end}}

Appends additional characters to the string.

@1@ Appends {{tt|count}} copies of character {{tt|ch}}
@2@ Appends string {{tt|str}}
@3@ Appends a substring {{tt|[pos, pos+count)}} of {{tt|str}}. If the requested substring lasts past the end of the string, or if {{c|1=count == npos}}, the appended substring is {{tt|[pos, size())}}.  If {{c|1=pos &gt;= str.size()}}, {{lc|std::out_of_range}} is thrown. 
@4@ Appends the first {{tt|count}} characters of character string pointed to by {{tt|s}}. {{tt|s}} can contain null characters.
@5@ Appends the null-terminated character string pointed to by {{tt|s}}. The length of the string is determined by the first null character. 
@6@ Appends characters in the range {{tt|[first, last)}}. This overload has the same effect as overload {{v|1}} if {{tt|InputIt}} is an integral type.
@7@ Appends characters from the initializer list {{tt|ilist}}.
@8@ Appends all characters from the string view {{tt|sv}} as if by {{c|append(sv.data(), sv.size())}}
@9@ Converts {{tt|t}} to a string view {{tt|sv}} as if by {{c|1=std::basic_string_view&lt;charT, traits&gt; sv = t;}}, then appends the characters from the subview {{tt|[pos, pos+count)}} of {{tt|sv}}. If the requested subview extends past the end of {{tt|sv}}, or if {{c|1=count == npos}}, the appended subview is {{tt|[pos, sv.size())}}.  If {{c|1=pos &gt;= sv.size()}}, {{lc|std::out_of_range}} is thrown.  {{cpp/enable_if|{{c|std::is_convertible_v&lt;const T&amp;, std::basic_string_view&lt;CharT, Traits&gt;&gt;}} is {{c|true}} and {{c|std::is_convertible_v&lt;const T&amp;, const CharT*&gt;}} is {{c|false}}}}.

===Parameters===
{{par begin}}
{{par | count | number of characters to append}}
{{par | pos | the index of the first character to append}}
{{par | ch | character value to append}}
{{par | first, last | range of characters to append}}
{{par | str | string to append}}
{{par | s | pointer to the character string to append}}
{{par | ilist | initializer list with the characters to append}}
{{par | sv | {{lc|std::basic_string_view}} with the characters to append}}
{{par | t | object convertible to {{lc|std::basic_string_view}} with the characters to append}}
{{par end}} 

===Return value===
{{c|*this}}

===Complexity===

There are no standard complexity guarantees, typical implementations behave similar to [[cpp/container/vector/insert|std::vector::insert]].

===Exceptions===
{{rev inl|since=c++11|
If an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}

If the operation would result in {{tt|size() &gt; max_size()}}, throws {{lc|std::length_error}}.

===Example===
{{example
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;

int main() {
    std::basic_string&lt;char&gt; str = &quot;string&quot;;
    const char* cptr = &quot;C-string&quot;;
    const char carr[] = &quot;Two and one&quot;;

    std::string output;

    // 1) Append a char 3 times. 
    // Notice, this is the only overload accepting chars.
    output.append(3, '*');
    std::cout &lt;&lt; &quot;1) &quot; &lt;&lt; output &lt;&lt; &quot;\n&quot;;

    //  2) Append a whole string
    output.append(str);
    std::cout &lt;&lt; &quot;2) &quot; &lt;&lt; output &lt;&lt; &quot;\n&quot;;

    // 3) Append part of a string (last 3 letters, in this case)
    output.append(str, 3, 3);
    std::cout &lt;&lt; &quot;3) &quot; &lt;&lt; output &lt;&lt; &quot;\n&quot;;
    
    // 4) Append part of a C-string
    // Notice, because `append` returns *this, we can chain calls together
    output.append(1, ' ').append(carr, 4);
    std::cout &lt;&lt; &quot;4) &quot; &lt;&lt; output &lt;&lt; &quot;\n&quot;;

    // 5) Append a whole C-string
    output.append(cptr);
    std::cout &lt;&lt; &quot;5) &quot; &lt;&lt; output &lt;&lt; &quot;\n&quot;;

    // 6) Append range
    output.append(&amp;carr[3], std::end(carr));
    std::cout &lt;&lt; &quot;6) &quot; &lt;&lt; output &lt;&lt; &quot;\n&quot;;

    // 7) Append initializer list
    output.append({ ' ', 'l', 'i', 's', 't' });
    std::cout &lt;&lt; &quot;7) &quot; &lt;&lt; output &lt;&lt; &quot;\n&quot;;
}

 | output=
1) ***
2) ***string
3) ***stringing
4) ***stringing Two 
5) ***stringing Two C-string
6) ***stringing Two C-string and one
7) ***stringing Two C-string and one list
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc operator+{{=}}}}
{{dsc inc | cpp/string/byte/dsc strcat}}
{{dsc inc | cpp/string/byte/dsc strncat}}
{{dsc inc | cpp/string/wide/dsc wcscat}}
{{dsc inc | cpp/string/wide/dsc wcsncat}}
{{dsc end}}

[[de:cpp/string/basic string/append]]
[[es:cpp/string/basic string/append]]
[[fr:cpp/string/basic string/append]]
[[it:cpp/string/basic string/append]]
[[ja:cpp/string/basic string/append]]
[[pl:cpp/string/basic string/append]]
[[pt:cpp/string/basic string/append]]
[[ru:cpp/string/basic string/append]]
[[zh:cpp/string/basic string/append]]</text>
      <sha1>5edysy4v1kn3lrr50ghgvvvctom37q5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/assign</title>
    <ns>0</ns>
    <id>1391</id>
    <revision>
      <id>91505</id>
      <parentid>88878</parentid>
      <timestamp>2017-03-31T19:48:18Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="6960">{{cpp/string/basic_string/title | assign}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_string&amp; assign( size_type count, CharT ch );
}}
{{dcl | num=2 | 
basic_string&amp; assign( const basic_string&amp; str );
}}
{{dcl rev begin | num=3}}
{{dcl | until=c++14 | 
basic_string&amp; assign( const basic_string&amp; str,
                      size_type pos,
                      size_type count );
}}
{{dcl | since=c++14 | 
basic_string&amp; assign( const basic_string&amp; str,
                      size_type pos,
                      size_type count {{=}} npos);
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++11 |
basic_string&amp; assign( basic_string&amp;&amp; str );
}}
{{dcl | num=5 |
basic_string&amp; assign( const CharT* s,
                      size_type count );
}}
{{dcl | num=6 |
basic_string&amp; assign( const CharT* s );
}}
{{dcl | num=7 | 1=
template&lt; class InputIt &gt;
basic_string&amp; assign( InputIt first, InputIt last );
}}
{{dcl | num=8 | since=c++11 | 1=
basic_string&amp; assign( std::initializer_list&lt;CharT&gt; ilist );
}}
{{dcl | num=9 | since=c++17| 1=
basic_string&amp; assign( std::basic_string_view&lt;CharT, Traits&gt; sv);
}}
{{dcl | num=10 | since=c++17| 1=
template &lt; class T &gt;
basic_string&amp; assign( const T&amp; t,
                      size_type pos,
                      size_type count = npos);
}}
{{dcl end}}

Replaces the contents of the string.

@1@ Replaces the contents with {{tt|count}} copies of character {{tt|ch}}.

@2@ Replaces the contents with a copy of {{tt|str}}.

@3@ Replaces the contents with a substring {{tt|[pos, pos+count)}} of {{tt|str}}. If the requested substring lasts past the end of the string, or if {{c|1=count == npos}}, the resulting substring is {{tt|[pos, str.size())}}. If {{c|1=pos &gt; str.size()}}, {{lc|std::out_of_range}} is thrown. 

@4@ Replaces the contents with those of {{tt|str}} using move semantics. Equivalent to {{c|1=*this = std::move(str)}}.

@5@ Replaces the contents with the first {{tt|count}} characters of character string pointed to by {{tt|s}}. {{tt|s}} can contain null characters.

@6@ Replaces the contents with those of null-terminated character string pointed to by {{tt|s}}. The length of the string is determined by the first null character. 

@7@ Replaces the contents with copies of the characters in the range {{tt|[first, last)}}. {{rev inl|since=c++11|This overload does not participate in overload resolution if {{tt|InputIt}} does not satisfy {{concept|InputIterator}}.}}

@8@ Replaces the contents with those of the initializer list {{tt|ilist}}.

@9@ Replaces the contents with those of the string view {{tt|sv}}, as if by {{c|assign(sv.data(), sv.size())}}

@10@ Converts {{tt|t}} to a string view {{tt|sv}} as if by {{c|1=std::basic_string_view&lt;CharT, Traits&gt; sv = t;}}, then replaces the contents with the characters from the subview {{tt|[pos, pos+count)}} of {{tt|sv}}. If the requested subview lasts past the end of {{tt|sv}}, or if {{c|1=count == npos}}, the resulting subview is {{tt|[pos, sv.size())}}. If {{c|1=pos &gt; sv.size()}}, {{lc|std::out_of_range}} is thrown. {{cpp/enable_if|{{c|std::is_convertible_v&lt;const T&amp;, std::basic_string_view&lt;CharT, Traits&gt;&gt;}} is {{c|true}} and {{c|std::is_convertible_v&lt;const T&amp;, const CharT*&gt;}} is {{c|false}}}}.

===Parameters===
{{par begin}}
{{par | count | size of the resulting string}}
{{par | pos | index of the first character to take }}
{{par | ch | value to initialize characters of the string with}}
{{par | first, last | range to copy the characters from}}
{{par | str | string to be used as source to initialize the characters with}}
{{par | s | pointer to a character string to use as source to initialize the string with}}
{{par | init | {{lc|std::initializer_list}} to initialize the characters of the string with}}
{{par | sv| {{lc|std::basic_string_view}} to initialize the characters of the string with}}
{{par | t | object (convertible to {{lc|std::basic_string_view}}) to initialize the characters of the string with}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}} 

===Return value===
{{c|*this}}

===Complexity===

@1@ linear in {{tt|count}}

@2@ linear in size of {{tt|str}}

@3@ linear in {{tt|count}}

@4@ constant. If {{tt|alloc}} is given and {{c|alloc !{{=}} other.get_allocator()}}, then linear.

@5@ linear in {{tt|count}}

@6@ linear in size of {{tt|s}}

@7@ linear in distance between {{tt|first}} and {{tt|last}}

@8@ linear in size of {{tt|init}}

===Exceptions===
{{rev inl|since=c++11|
If an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}

If the operation would result in {{tt|size() &gt; max_size()}}, throws {{lc|std::length_error}}.

{{rev begin}}
{{rev|since=c++11|until=c++17|
@4@ {{unreviewed noexcept}}
}}
{{rev|since=c++17|
@4@ {{unreviewed noexcept|std::allocator_traits&lt;Allocator&gt;::propagate_on_container_move_assignment::value
 {{!!}} std::allocator_traits&lt;Allocator&gt;::is_always_equal::value}}
}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;

int main()
{
  std::string s;
  // assign(size_type count, CharT ch)
  s.assign(4, '=');
  std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;====&quot;
  
  std::string const c(&quot;Exemplary&quot;);
  // assign(basic_string const&amp; str)
  s.assign(c);
  std::cout &lt;&lt; c &lt;&lt; &quot;==&quot; &lt;&lt; s &lt;&lt;'\n'; // &quot;Exemplary == Exemplary&quot;

  // assign(basic_string const&amp; str, size_type pos, size_type count)
  s.assign(c, 0, c.length()-1);
  std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;Exemplar&quot;;

  // assign(basic_string&amp;&amp; str)
  s.assign(std::string(&quot;C++ by &quot;) + &quot;example&quot;);
  std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C++ by example&quot;

  // assign(charT const* s, size_type count)
  s.assign(&quot;C-style string&quot;, 7);
  std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style&quot;

  // assign(charT const* s)
  s.assign(&quot;C-style\0string&quot;);
  std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style&quot;

  char mutable_c_str[] = &quot;C-style string&quot;;
  // assign(InputIt first, InputIt last)
  s.assign(std::begin(mutable_c_str), std::end(mutable_c_str)-1);
  std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style string&quot;

  // assign(std::initializer_list&lt;charT&gt; ilist)
  s.assign({ 'C', '-', 's', 't', 'y', 'l', 'e' });
  std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style&quot;
}
 | output=
====
Exemplary==Exemplary
Exemplar
C++ by example
C-style
C-style
C-style string
C-style
}}


===Defect reports===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2063|std=C++11|before=non-normative note stated that swap is a valid implementation of move-assign|after=corrected to require move assignment}}
{{dr list end}}
===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc constructor}}
{{dsc inc | cpp/string/basic_string/dsc operator{{=}}}}
{{dsc end}}

[[de:cpp/string/basic string/assign]]
[[es:cpp/string/basic string/assign]]
[[fr:cpp/string/basic string/assign]]
[[it:cpp/string/basic string/assign]]
[[ja:cpp/string/basic string/assign]]
[[pl:cpp/string/basic string/assign]]
[[pt:cpp/string/basic string/assign]]
[[ru:cpp/string/basic string/assign]]
[[zh:cpp/string/basic string/assign]]</text>
      <sha1>p5ct6twd8xeyugktho18zktysz48t1v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/at</title>
    <ns>0</ns>
    <id>1392</id>
    <revision>
      <id>70312</id>
      <parentid>69167</parentid>
      <timestamp>2014-05-18T20:12:24Z</timestamp>
      <contributor>
        <username>Legalize</username>
        <id>3097</id>
      </contributor>
      <minor/>
      <comment>Catch exceptions by const reference</comment>
      <text xml:space="preserve" bytes="1649">{{cpp/string/basic_string/title | at}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | 
reference       at( size_type pos );
}}
{{dcl | 
const_reference at( size_type pos ) const;
}}
{{dcl end}}

Returns a reference to the character at specified location {{tt|pos}}. Bounds checking is performed, exception of type {{lc|std::out_of_range}} will be thrown on invalid access.

===Parameters===
{{par begin}}
{{par | pos | position of the character to return}}
{{par end}}

===Return value===
Reference to the requested character.

===Exceptions===
Throws {{lc|std::out_of_range}} if {{c|1=pos &gt;= size()}}.

===Complexity===
Constant.

===Example===
{{
example
| code=
#include &lt;stdexcept&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s(&quot;message&quot;); // for capacity

    s = &quot;abc&quot;;
    s.at(2) = 'x'; // ok
    std::cout &lt;&lt; s &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;string size = &quot; &lt;&lt; s.size() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;string capacity = &quot; &lt;&lt; s.capacity() &lt;&lt; '\n';

    try {
        // throw, even if capacity allowed to access element
        s.at(3) = 'x';
    }
    catch (std::out_of_range const&amp; exc) {
        std::cout &lt;&lt; exc.what() &lt;&lt; '\n';
    }
}
| output=
abx
string size = 3
string capacity = 7
basic_string::at
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc operator_at }}
{{dsc end}}

[[de:cpp/string/basic string/at]]
[[es:cpp/string/basic string/at]]
[[fr:cpp/string/basic string/at]]
[[it:cpp/string/basic string/at]]
[[ja:cpp/string/basic string/at]]
[[pl:cpp/string/basic string/at]]
[[pt:cpp/string/basic string/at]]
[[ru:cpp/string/basic string/at]]
[[zh:cpp/string/basic string/at]]</text>
      <sha1>q1mcr0b7nrxi5r499nehvjzd39ijyux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/back</title>
    <ns>0</ns>
    <id>1393</id>
    <revision>
      <id>80835</id>
      <parentid>77437</parentid>
      <timestamp>2015-09-02T08:46:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Likewise</comment>
      <text xml:space="preserve" bytes="1191">{{cpp/string/basic_string/title | back}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
CharT&amp; back();
}}
{{dcl | since=c++11 |
const CharT&amp; back() const;
}}
{{dcl end}}

Returns reference to the last character in the string. The behavior is undefined if {{c|empty() {{==}} true}}.

===Parameters===
(none)

===Return value===
reference to the last character, equivalent to {{c|operator[](size() - 1)}}.

===Complexity===
Constant

===Example===
{{
example
| code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
  {
    std::string s(&quot;Exemplary&quot;);
    char&amp; back = s.back();
    back = 's';
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;Exemplars&quot;
  }

  {
    std::string const c(&quot;Exemplary&quot;);
    char const&amp; back = c.back();
    std::cout &lt;&lt; back &lt;&lt; '\n'; // 'y'
  }
}
| output=
Exemplars
y
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc front}}
{{dsc end}}

[[de:cpp/string/basic string/back]]
[[es:cpp/string/basic string/back]]
[[fr:cpp/string/basic string/back]]
[[it:cpp/string/basic string/back]]
[[ja:cpp/string/basic string/back]]
[[pt:cpp/string/basic string/back]]
[[ru:cpp/string/basic string/back]]
[[zh:cpp/string/basic string/back]]</text>
      <sha1>pxrna7k49j0iiw137zhc6x6imew4xw3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/basic string</title>
    <ns>0</ns>
    <id>1394</id>
    <revision>
      <id>92063</id>
      <parentid>92062</parentid>
      <timestamp>2017-04-03T22:11:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>-</comment>
      <text xml:space="preserve" bytes="8923">{{cpp/string/basic_string/title | basic_string}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl rev multi|num=1| until1=c++14 | dcl1= 
explicit basic_string( const Allocator&amp; alloc = Allocator() );
|until2=c++17 | dcl2= 
basic_string() : basic_string( Allocator() ) {}
explicit basic_string( const Allocator&amp; alloc );
|dcl3=
basic_string() noexcept(noexcept( Allocator() )): basic_string( Allocator() ) {}
explicit basic_string( const Allocator&amp; alloc ) noexcept;
}}
{{dcl | num=2 | 1=
basic_string( size_type count, 
              CharT ch, 
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl rev begin|num=3}}
{{dcl | until=c++17 | 1=
basic_string( const basic_string&amp; other, 
              size_type pos, 
              size_type count = std::basic_string::npos,
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl | since=c++17 | 1=
basic_string( const basic_string&amp; other,
              size_type pos,
              const Allocator&amp; a = Allocator());
}}
{{dcl | since=c++17| 1=
basic_string( const basic_string&amp; other, 
              size_type pos, 
              size_type count,
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl rev end}}
{{dcl | num=4 | 1=
basic_string( const CharT* s,
              size_type count, 
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=5 | 1=
basic_string( const CharT* s,
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=6 | 1=
template&lt; class InputIt &gt;
basic_string( InputIt first, InputIt last, 
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=7 | 
basic_string( const basic_string&amp; other );
}}
{{dcl | num=7 | since=c++11 |
basic_string( const basic_string&amp; other, const Allocator&amp; alloc );
}}
{{dcl | num=8 | since=c++11 |
basic_string( basic_string&amp;&amp; other ) noexcept;
}}
{{dcl | num=8 | since=c++11 |
basic_string( basic_string&amp;&amp; other, const Allocator&amp; alloc );
}}
{{dcl | num=9 | since=c++11 | 1=
basic_string( std::initializer_list&lt;CharT&gt; init, 
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=10 | since=c++17 | 1=
explicit basic_string( std::basic_string_view&lt;CharT, Traits&gt; sv,
                       const Allocator&amp; alloc = Allocator() );
}}
{{dcl | num=11 | since=c++17 | 1=
template &lt; class T &gt;
basic_string( const T&amp; t, size_type pos, size_type n,
              const Allocator&amp; alloc = Allocator() );
}}
{{dcl end}}

Constructs new string from a variety of data sources and optionally using user supplied allocator {{tt|alloc}}.

@1@ Default constructor. Constructs empty string (zero size and unspecified capacity).
@2@ Constructs the string with {{tt|count}} copies of character {{tt|ch}}. The behavior is undefined if {{tt|count &gt;{{=}} npos}}.
@3@ Constructs the string with a substring {{tt|[pos, pos+count)}} of {{tt|other}}. If {{c|1=count == npos}}, if {{tt|count}} is not specified, or if the requested substring lasts past the end of the string, the resulting substring is {{tt|[pos, size())}}.
@4@ Constructs the string with the first {{tt|count}} characters of character string pointed to by {{tt|s}}. {{tt|s}} can contain null characters. The length of the string is {{tt|count}}. The behavior is undefined if {{tt|s}} does not point at an array of at least {{tt|count}} elements of {{tt|CharT}}, including the case when {{tt|s}} is a null pointer.
@5@ Constructs the string with the contents initialized with a copy of the null-terminated character string pointed to by {{tt|s}}. The length of the string is determined by the first null character. The behavior is undefined if {{tt|s}} does not point at an array of at least {{c|Traits::length(s)+1}} elements of {{tt|CharT}}, including the case when {{tt|s}} is a null pointer.
@6@ Constructs the string  with the contents of the range {{tt|[first, last)}}. If {{tt|InputIt}} is an integral type, equivalent to {{tt|basic_string(static_cast&lt;size_type&gt;(first), static_cast&lt;value_type&gt;(last), a)}}.
@7@ Copy constructor. Constructs the string with the copy of the contents of {{tt|other}}.
@8@ Move constructor. Constructs the string with the contents of {{tt|other}} using move semantics. {{tt|other}} is left in valid, but unspecified state.
@9@ Constructs the string with the contents of the initializer list {{tt|init}}. 
@10@ Constructs the string with the contents of the string view {{tt|sv}}, as if by   {{c|basic_string(sv.data(), sv.size(), alloc)}}
@11@ Implicitly converts {{tt|t}} to a string view {{tt|sv}} as if by {{c|1=std::basic_string_view&lt;CharT, Traits&gt; sv = t;}}, then initializes the string with the subrange {{tt|[pos, pos + n)}} of {{tt|sv}} as if by {{c|basic_string(sv.substr(pos, n), a)}}. {{cpp/enable_if|{{c|std::is_convertible_v&lt;const T&amp;, std::basic_string_view&lt;CharT, Traits&gt;&gt;}} is {{c|true}}}}.

===Parameters===
{{par begin}}
{{par | alloc | allocator to use for all memory allocations of this string}}
{{par | count | size of the resulting string}}
{{par | ch | value to initialize the string with}}
{{par | pos | position of the first character to include}}
{{par | first, last | range to copy the characters from}}
{{par | s | pointer to an array of characters to use as source to initialize the string with}}
{{par | other | another string to use as source to initialize the string with}}
{{par | init | {{lc|std::initializer_list}} to initialize the string with}}
{{par | sv | {{lc|std::basic_string_view}} to initialize the string with}}
{{par | t |  object (convertible to {{lc|std::basic_string_view}}) to initialize the string with}}
{{par end}}

===Complexity===
@1@ constant
@2-4@ linear in {{tt|count}}
@5@ linear in length of {{tt|s}}
@6@ linear in distance between {{tt|first}} and {{tt|last}}
@7@ linear in size of {{tt|other}}
@8@ constant. If {{tt|alloc}} is given and {{c|alloc !{{=}} other.get_allocator()}}, then linear
@9@ linear in size of {{tt|init}}

===Exceptions===
@3@ {{lc|std::out_of_range}} if {{c|pos &gt; other.size()}}
@8@ Throws nothing if {{c|alloc {{==}} str.get_allocator()}}

===Notes===
Initialization with a [[cpp/language/string_literal|string literal]] that contains embedded {{c|'\0'}} characters uses the overload {{v|5}}, which stops at the first null character. This can be avoided by specifying a different constructor or by using {{ltt|cpp/string/basic_string/operator&quot;&quot;s|operator&quot;&quot;s}}:
{{source|1=
std::string s1 = &quot;ab\0\0cd&quot;;   // s1 contains &quot;ab&quot;
std::string s2{&quot;ab\0\0cd&quot;, 6}; // s2 contains &quot;ab\0\0cd&quot;
std::string s3 = &quot;ab\0\0cd&quot;s;  // s3 contains &quot;ab\0\0cd&quot;
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cassert&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
#include &lt;cctype&gt;

int main()
{
  {
    // string::string()
    std::string s;
    assert(s.empty() &amp;&amp; (s.length() == 0) &amp;&amp; (s.size() == 0));
  }

  {
    // string::string(size_type count, charT ch)
    std::string s(4, '=');
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;====&quot;
  }

  {
    std::string const other(&quot;Exemplary&quot;);
    // string::string(string const&amp; other, size_type pos, size_type count)
    std::string s(other, 0, other.length()-1);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;Exemplar&quot;
  }

  {
    // string::string(charT const* s, size_type count)
    std::string s(&quot;C-style string&quot;, 7);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style&quot;
  }

  {
    // string::string(charT const* s)
    std::string s(&quot;C-style\0string&quot;);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style&quot;
  }

  {
    char mutable_c_str[] = &quot;another C-style string&quot;;
    // string::string(InputIt first, InputIt last)
    std::string s(std::begin(mutable_c_str)+8, std::end(mutable_c_str)-1);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style string&quot;
  }

  {
    std::string const other(&quot;Exemplar&quot;);
    std::string s(other);
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;Exemplar&quot;
  }

  {
    // string::string(string&amp;&amp; str)
    std::string s(std::string(&quot;C++ by &quot;) + std::string(&quot;example&quot;));
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C++ by example&quot;
  }

  {
    // string(std::initializer_list&lt;charT&gt; ilist)
    std::string s({ 'C', '-', 's', 't', 'y', 'l', 'e' });
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;C-style&quot;
  }

  {
    // overload resolution selects string(InputIt first, InputIt last) [with InputIt = int]
    // which behaves as if string(size_type count, charT ch) is called
    std::string s(3, std::toupper('a'));
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;AAA&quot;
  }
}
 | output=
====
Exemplar
C-style
C-style
C-style string
Exemplar
C++ by example
C-style
AAA
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc assign}}
{{dsc inc | cpp/string/basic_string/dsc operator{{=}} }}
{{dsc end}}

[[de:cpp/string/basic string/basic string]]
[[es:cpp/string/basic string/basic string]]
[[fr:cpp/string/basic string/basic string]]
[[it:cpp/string/basic string/basic string]]
[[ja:cpp/string/basic string/basic string]]
[[pl:cpp/string/basic string/basic string]]
[[pt:cpp/string/basic string/basic string]]
[[ru:cpp/string/basic string/basic string]]
[[zh:cpp/string/basic string/basic string]]</text>
      <sha1>lq06bo5gn1dgwafnv8mqupeqou8b8na</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/begin</title>
    <ns>0</ns>
    <id>1395</id>
    <revision>
      <id>91638</id>
      <parentid>77762</parentid>
      <timestamp>2017-03-31T19:52:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1544">{{cpp/string/basic_string/title | begin | cbegin}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | 
iterator begin();
}}
{{dcl | 
const_iterator begin() const;
}}
{{dcl | since=c++11 |
const_iterator cbegin() const;
}}
{{dcl end}}

Returns an iterator to the first character of the string. 

{{tt|begin()}} returns a [[cpp/iterator|mutable]] or [[cpp/iterator|constant]] iterator, depending on the constness of {{c|*this}}. 

{{tt|cbegin()}} always returns a [[cpp/iterator|constant]] iterator. It is equivalent to {{c|const_cast&lt;const basic_string&amp;&gt;(*this).begin()}}. 

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
iterator to the first character

===Exceptions===
{{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant

===Example===
{{example
|code=
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    std::string s(&quot;Exemplar&quot;);
    *s.begin() = 'e';
    std::cout &lt;&lt; s &lt;&lt;'\n';

    auto i = s.cbegin();
    std::cout &lt;&lt; *i &lt;&lt; '\n';
//  *i = 'E'; // error: i is a constant iterator
}
|output=
exemplar
e
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc end}}
{{dsc end}}

[[de:cpp/string/basic string/begin]]
[[es:cpp/string/basic string/begin]]
[[fr:cpp/string/basic string/begin]]
[[it:cpp/string/basic string/begin]]
[[ja:cpp/string/basic string/begin]]
[[pl:cpp/string/basic string/begin]]
[[pt:cpp/string/basic string/begin]]
[[ru:cpp/string/basic string/begin]]
[[zh:cpp/string/basic string/begin]]</text>
      <sha1>rswgj8ewvc14tiu6rzs7owy01r9hpll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/c str</title>
    <ns>0</ns>
    <id>1396</id>
    <revision>
      <id>91560</id>
      <parentid>70318</parentid>
      <timestamp>2017-03-31T19:49:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2547">{{cpp/string/basic_string/title | c_str}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl |
const CharT* c_str() const;
}}
{{dcl end}}

Returns a pointer to a null-terminated character array with data equivalent to those stored in the string. 

The pointer is such that the range {{tt|[c_str(); c_str() + size()]}} is valid and the values in it correspond to the values stored in the string with an additional null character after the last position.

The pointer obtained from {{tt|c_str()}} may be invalidated by:
* Passing a non-const reference to the string to any standard library function, or
* Calling non-const member functions on the string, excluding {{lc|operator[]}}, {{lc|at()}}, {{lc|front()}}, {{lc|back()}}, {{lc|begin()}}, {{lc|rbegin()}}, {{lc|end()}} and {{lc|rend()}}.

Writing to the character array accessed through {{tt|c_str()}} is undefined behavior.

{{rev begin}}
{{rev | since=c++11 | {{tt|c_str()}} and {{lc|data()}} perform the same function.}}
{{rev end}}

===Parameters===
(none)

===Return value===
Pointer to the underlying character storage.

{{rev begin}}
{{rev | until=c++11 | {{c|1=data()[i] == operator[](i)}} for every {{tt|i}} in {{tt|[0, size())}}. }}
{{rev | since=c++11 | {{c|1=data() + i == &amp;operator[](i)}} for every {{tt|i}} in {{tt|[0, size()]}}. }}
{{rev end}}

===Complexity===
Constant.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Notes===
The pointer obtained from {{tt|c_str()}} may only be treated as a pointer to a null-terminated character string if the string object does not contain other null characters.

===Example===
{{example
| code=
#include &lt;algorithm&gt;
#include &lt;cassert&gt;
#include &lt;cstring&gt;
#include &lt;string&gt;

int main()
{
  std::string const s(&quot;Emplary&quot;);
  assert(s.size() == std::strlen(s.c_str()));
  assert(std::equal(s.begin(), s.end(), s.c_str()));
  assert(std::equal(s.c_str(), s.c_str() + s.size(), s.begin()));
  assert(0 == *(s.c_str() + s.size()));
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc front}}
{{dsc inc | cpp/string/basic_string/dsc back}}
{{dsc inc | cpp/string/basic_string/dsc data}}
{{dsc end}}

[[de:cpp/string/basic string/c str]]
[[es:cpp/string/basic string/c str]]
[[fr:cpp/string/basic string/c str]]
[[it:cpp/string/basic string/c str]]
[[ja:cpp/string/basic string/c str]]
[[pl:cpp/string/basic string/c str]]
[[pt:cpp/string/basic string/c str]]
[[ru:cpp/string/basic string/c str]]
[[zh:cpp/string/basic string/c str]]</text>
      <sha1>auaen45352yus8u6e4qhfh3vtcts2ej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/capacity</title>
    <ns>0</ns>
    <id>1397</id>
    <revision>
      <id>91910</id>
      <parentid>70483</parentid>
      <timestamp>2017-03-31T20:01:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1386">{{cpp/string/basic_string/title | capacity}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | 
size_type capacity() const;
}}
{{dcl end}}

Returns the number of characters that the string has currently allocated space for. 

===Parameters===
(none)

===Return value===

capacity of the currently allocated storage

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}} }}
{{rev end}}

===Complexity===
Constant

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;string&gt;

void show_capacity(std::string const&amp; s)
{
    std::cout &lt;&lt; &quot;'&quot; &lt;&lt; s &lt;&lt; &quot;' has capacity &quot; &lt;&lt; s.capacity() &lt;&lt; &quot;.\n&quot;;
}

int main()
{
    std::string s{&quot;Exemplar&quot;};
    show_capacity(s);

    s += &quot; is an example string.&quot;;
    show_capacity(s);
}
|p=true
|output=
'Exemplar' has capacity 8.
'Exemplar is an example string.' has capacity 30.
}}
===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc size}}
{{dsc inc | cpp/string/basic_string/dsc reserve}}
{{dsc end}}

[[de:cpp/string/basic string/capacity]]
[[es:cpp/string/basic string/capacity]]
[[fr:cpp/string/basic string/capacity]]
[[it:cpp/string/basic string/capacity]]
[[ja:cpp/string/basic string/capacity]]
[[pl:cpp/string/basic string/capacity]]
[[pt:cpp/string/basic string/capacity]]
[[ru:cpp/string/basic string/capacity]]
[[zh:cpp/string/basic string/capacity]]</text>
      <sha1>lmjf026tk5ild69ggyqjtfkvtemx9zl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/clear</title>
    <ns>0</ns>
    <id>1398</id>
    <revision>
      <id>91343</id>
      <parentid>78602</parentid>
      <timestamp>2017-03-31T19:40:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1528">{{cpp/string/basic_string/title | clear}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | 
void clear();
}}
{{dcl end}}

Removes all characters from the string as if by executing {{c|erase(begin(), end())}}. The allocated memory will not be released, effectively leaving the {{lc|capacity}} of the string unchanged.

All pointers, references, and iterators are invalidated.

===Parameters===
(none)

===Return value===
(none)

===Notes===
Unlike for {{lc|std::vector::clear}}, the C++ standard does not explicitly require that {{lc|capacity}} is unchanged by this function, but existing implementations do not change capacity.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}} }}
{{rev end}}

===Complexity===
Linear in the size of the string.

===Example===
{{example
|code=
#include &lt;cassert&gt;
#include &lt;string&gt;

int main()
{
    std::string s{ &quot;Exemplar&quot; };
    std::string::size_type const capacity = s.capacity();

    s.clear();
    assert(capacity == s.capacity());
    assert(s.empty());
    assert(0 == s.size());
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc erase}}
{{dsc end}}

[[de:cpp/string/basic string/clear]]
[[es:cpp/string/basic string/clear]]
[[fr:cpp/string/basic string/clear]]
[[it:cpp/string/basic string/clear]]
[[ja:cpp/string/basic string/clear]]
[[pl:cpp/string/basic string/clear]]
[[pt:cpp/string/basic string/clear]]
[[ru:cpp/string/basic string/clear]]
[[zh:cpp/string/basic string/clear]]</text>
      <sha1>jvteq8dntqyor269x3ossc6f3kv1mwr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/compare</title>
    <ns>0</ns>
    <id>1399</id>
    <revision>
      <id>91660</id>
      <parentid>88879</parentid>
      <timestamp>2017-03-31T19:53:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="7707">{{cpp/string/basic_string/title | compare}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
int compare( const basic_string&amp; str ) const;
}}
{{dcl | num=2 |
int compare( size_type pos1, size_type count1,
             const basic_string&amp; str ) const;
}}
{{dcl rev begin|num=3}}
{{dcl | until=c++14 |
int compare( size_type pos1, size_type count1,
             const basic_string&amp; str,
             size_type pos2, size_type count2 ) const;
}}
{{dcl | since=c++14 |
int compare( size_type pos1, size_type count1,
             const basic_string&amp; str,
             size_type pos2, size_type count2 {{=}} npos ) const;
}}
{{dcl rev end}}
{{dcl | num=4 |
int compare( const CharT* s ) const;
}}
{{dcl | num=5 |
int compare( size_type pos1, size_type count1,
             const CharT* s ) const;
}}
{{dcl | num=6 |
int compare( size_type pos1, size_type count1,
             const CharT* s, size_type count2 ) const;
}}
{{dcl | num=7 |since=c++17|1=
int compare( std::basic_string_view&lt;CharT, Traits&gt; sv) const;
}}
{{dcl | num=8 |since=c++17|1=
int compare( size_type pos1, size_type count1,
             std::basic_string_view&lt;CharT, Traits&gt; sv) const;
}}
{{dcl | num=9 |since=c++17|1=
template &lt; class T &gt;
int compare( size_type pos1, size_type count1,
             const T&amp; t,
             size_type pos2, size_type count2 = npos) const;
}}
{{dcl end}}

Compares two character sequences. 

@1@ Compares this string to ''str''. First, calculates the number of characters to compare, as if by {{c|1=size_type rlen = std::min(size(), str.size())}}. Then compares by calling {{c|Traits::compare(data(), str.data(), rlen)}}. For standard strings this function performs character-by-character lexicographical comparison. If the result is zero (the strings are equal so far), then their sizes are compared as follows:

{| class=&quot;wikitable&quot; style=&quot;text-align:center;&quot;
! colspan=2 | Condition
! Result
! Return value
|-
| colspan=2 style=&quot;text-align:left;&quot; | {{tt|Traits::compare({{spar|data}}, {{spar|arg}}, {{spar|rlen}}) &lt; 0}}
| {{spar|data}} is ''less'' than {{spar|arg}}
| {{c|&lt;0}}
|-
| rowspan=3 | {{tt|Traits::compare({{spar|data}}, {{spar|arg}}, {{spar|rlen}}) {{==}} 0}}
| {{tt|size({{spar|data}}) &lt; size({{spar|arg}})}}
| {{spar|data}} is ''less'' than {{spar|arg}}
| {{c|&lt;0}}
|-
&lt;!-- --&gt;
| {{tt|size({{spar|data}}) {{==}} size({{spar|arg}})}}
| {{spar|data}} is ''equal'' to {{spar|arg}}
| {{c|0}}
|-
&lt;!-- --&gt;
| {{tt|size({{spar|data}}) &gt; size({{spar|arg}})}}
| {{spar|data}} is ''greater'' than {{spar|arg}}
| {{c|&gt;0}}
|-
| colspan=2 style=&quot;text-align:left;&quot; | {{tt|Traits::compare({{spar|data}}, {{spar|arg}}, {{spar|rlen}}) &gt; 0}}
| {{spar|data}} is ''greater'' than {{spar|arg}}
| {{c|&gt;0}}
|}

@2@ Compares a {{tt|[pos1, pos1+count1)}} substring of this string to ''str'' as if by {{rev inl|until=c++17|{{c|basic_string(*this, pos1, count1).compare(str)}}}}{{rev inl|since=c++17|{{c|compare(pos1, count1, std::basic_string_view&lt;CharT, Traits&gt;(str))}}}}

@3@ Compares a {{tt|[pos1, pos1+count1)}} substring of this string to a substring {{tt|[pos2, pos2+count2)}} of ''str''  as if by {{rev inl|until=c++17|{{c|basic_string(*this, pos1, count1).compare(basic_string(str, pos2, count2))}}}}{{rev inl|since=c++17|{{c|compare(pos1, count1, std::basic_string_view&lt;CharT, Traits&gt;(str), pos2, count2)}}}}

@4@ Compares this string to the null-terminated character sequence beginning at the character pointed to by ''s'', as if by {{c|compare(basic_string(s))}}

@5@ Compares a {{tt|[pos1, pos1+count1)}} substring of this string to the null-terminated character sequence beginning at the character pointed to by ''s'', as if by {{c|basic_string(*this, pos, count1).compare(basic_string(s))}}

@6@ Compares a {{tt|[pos1, pos1+count1)}} substring of this string to the first {{tt|count2}} characters of the character array whose first character is pointed to by ''s'', as if by {{c|basic_string(*this, pos, count1).compare(basic_string(s, count2)).}} (Note: the characters from {{tt|s}} to {{tt|s+count2}} may include null characters))

@7@ Compares this string to {{tt|sv}}, similar to {{v|1}} except for using {{c|sv.size()}} and {{c|sv.data()}} instead of {{c|str.size()}} and {{c|str.data()}}

@8@ Compares a {{tt|[pos1, pos1+count1)}} substring of this string to {{tt|sv}}, as if by {{c|std::basic_string_view&lt;CharT, Traits&gt;(data(), size()).substr(pos1, count1).compare(sv)}}

@9@ Converts {{tt|t}} to a string view {{tt|sv}} as if by {{c|1=std::basic_string_view&lt;CharT, Traits&gt; sv = t;}}, then compares a {{tt|[pos1, pos1+count1)}} substring of this string to a substring {{tt|[pos2, pos2+count2)}} of {{tt|sv}} as if by {{c|std::basic_string_view&lt;CharT, Traits&gt;(data(), size()).substr(pos1, count1).compare(sv.substr(pos2, count2));}}. {{cpp/enable_if|{{c|std::is_convertible_v&lt;const T&amp;, std::basic_string_view&lt;CharT, Traits&gt;&gt;}} is {{c|true}} and {{c|std::is_convertible_v&lt;const T&amp;, const CharT*&gt;}} is {{c|false}}}}.

===Parameters===
{{par begin}}
{{par | str | other string to compare to}}
{{par | s | pointer to the character string to compare to}}
{{par | count1 | number of characters of this string to compare}}
{{par | pos1 | position of the first character in this string to compare}}
{{par | count2 | number of characters of the given string to compare}}
{{par | pos2 | position of the first character of the given string to compare}}
{{par | sv | {{lc|std::basic_string_view}} to compare to}}
{{par | t | object (convertible to {{lc|std::basic_string_view}}) to compare to}}
{{par end}} 

===Return value===
negative value if {{c|*this}} appears before the character sequence specified by the arguments, in lexicographical order

zero if both character sequences compare equivalent

positive value if {{c|*this}} appears after the character sequence specified by the arguments, in lexicographical order

===Exceptions===
@1@ {{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}} }}
{{rev end}}

@2-6@ May throw the exceptions thrown by the corresponding {{tt|basic_string}} constructors.

{{rev begin}}
{{rev|since=c++17|
@7@ {{unreviewed noexcept}}
}}{{rev end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class CharT, class Traits, class Alloc&gt;
int basic_string&lt;CharT, Traits, Alloc&gt;::compare(const std::basic_string&amp; s) const noexcept
{
    size_type lhs_sz = size();
    size_type rhs_sz = s.size();
    int result = traits_type::compare(data(), s.data(), std::min(lhs_sz, rhs_sz));
    if (result != 0)
        return result;
    if (lhs_sz &lt; rhs_sz)
        return -1;
    if (lhs_sz &gt; rhs_sz)
        return 1;
    return 0;
}
}}

===Notes===
For the situations when three-way comparison is not required, {{lc|std::basic_string}} provides the usual [[cpp/string/basic_string/operator_cmp|relational operators]] ({{tt|&lt;}}, {{tt|&lt;{{=}}}}, {{tt|{{==}}}}, {{tt|&gt;}}, etc).

By default (with the default {{lc|std::char_traits}}), this function is not locale-sensitive. See {{lc|std::collate::compare}} for locale-aware three-way string comparison.

===Example===
{{example
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc operator_cmp}}
{{dsc inc | cpp/string/basic_string/dsc substr}}
{{dsc inc | cpp/locale/dsc collate}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc inc | cpp/algorithm/dsc lexicographical_compare}}
{{dsc end}}

[[de:cpp/string/basic string/compare]]
[[es:cpp/string/basic string/compare]]
[[fr:cpp/string/basic string/compare]]
[[it:cpp/string/basic string/compare]]
[[ja:cpp/string/basic string/compare]]
[[pl:cpp/string/basic string/compare]]
[[pt:cpp/string/basic string/compare]]
[[ru:cpp/string/basic string/compare]]
[[zh:cpp/string/basic string/compare]]</text>
      <sha1>ck6paaaser92bm8uh0btc3k2f9axhqt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/copy</title>
    <ns>0</ns>
    <id>1400</id>
    <revision>
      <id>82584</id>
      <parentid>82583</parentid>
      <timestamp>2015-12-24T04:53:28Z</timestamp>
      <contributor>
        <ip>84.115.130.40</ip>
      </contributor>
      <comment>21.4.6.7: Throws: out_of_range if pos &gt; size().</comment>
      <text xml:space="preserve" bytes="1547">{{cpp/string/basic_string/title | copy}}
{{cpp/string/basic_string/navbar}}
{{ddcl | 1=
size_type copy( CharT* dest,
                size_type count,
                size_type pos = 0) const;
}}

Copies a substring {{tt|[pos, pos+count)}} to character string pointed to by {{tt|dest}}. If the requested substring lasts past the end of the string, or if {{c|1=count == npos}}, the copied substring is {{tt|[pos, size())}}.  The resulting character string is not null-terminated.

If {{c|1=pos &gt; size()}}, {{lc|std::out_of_range}} is thrown. 

===Parameters===
{{par begin}}
{{par | dest | pointer to the destination character string}}
{{par | pos | position of the first character to include}}
{{par | count | length of the substring}}
{{par end}} 

===Return value===
number of characters copied

===Exceptions===

{{lc|std::out_of_range}} if {{c|1=pos &gt; size()}}.

===Complexity===
linear in {{tt|count}}

===Example===
{{example
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
  std::string foo(&quot;quuuux&quot;);
  char bar[7];
  foo.copy(bar, sizeof bar);
  bar[6] = '\0';
  std::cout &lt;&lt; bar &lt;&lt; '\n';
}
| output=
quuuux
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc substr}}
{{dsc end}}

[[de:cpp/string/basic string/copy]]
[[es:cpp/string/basic string/copy]]
[[fr:cpp/string/basic string/copy]]
[[it:cpp/string/basic string/copy]]
[[ja:cpp/string/basic string/copy]]
[[pl:cpp/string/basic string/copy]]
[[pt:cpp/string/basic string/copy]]
[[ru:cpp/string/basic string/copy]]
[[zh:cpp/string/basic string/copy]]</text>
      <sha1>4uzrjgrsw0tk7aqqcds4hi47x9d6y0i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/data</title>
    <ns>0</ns>
    <id>1401</id>
    <revision>
      <id>91659</id>
      <parentid>88072</parentid>
      <timestamp>2017-03-31T19:53:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2789">{{cpp/string/basic_string/title | data}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl |num=1|
const CharT* data() const;
}}
{{dcl |num=2|since=c++17|
CharT* data();
}}
{{dcl end}}

Returns a pointer to the underlying array serving as character storage. The pointer is such that the range {{tt|[data(); data() + size())}} is valid and the values in it correspond to the values stored in the string.  

{{rev begin}}
{{rev | until=c++11 |
The returned array is not required to be null-terminated.

If {{lc|empty()}} returns {{c|true}}, the pointer is a non-null pointer that should not be dereferenced. }}
{{rev | since=c++11 | 
The returned array is null-terminated, that is, {{tt|data()}} and {{lc|c_str()}} perform the same function.

If {{lc|empty()}} returns {{c|true}}, the pointer points to a single null character. | {{mark since c++11}} }}
{{rev end}}

The pointer obtained from {{tt|data()}} may be invalidated by:
* Passing a non-const reference to the string to any standard library function, or
* Calling non-const member functions on the string, excluding {{ltt|cpp/string/basic_string/operator_at|operator[]()}}, {{lc|at()}}, {{lc|front()}}, {{lc|back()}}, {{lc|begin()}}, {{lc|end()}}, {{lc|rbegin()}}, {{lc|rend()}}.

@1@ Modifying the character array accessed through {{tt|data}} has undefined behavior.
@2@ Modifying the past-the-end null terminator stored at {{tt|data()+size()}} has undefined behavior.

===Parameters===
(none)

===Return value===
A pointer to the underlying character storage.

{{rev begin}}
{{rev | until=c++11 | {{c|1=data()[i] == operator[](i)}} for every {{tt|i}} in {{tt|[0, size())}}. }}
{{rev | since=c++11 | {{c|1=data() + i == &amp;operator[](i)}} for every {{tt|i}} in {{tt|[0, size()]}}. }}
{{rev end}}

===Complexity===
Constant.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
| code=
#include &lt;algorithm&gt;
#include &lt;cassert&gt;
#include &lt;cstring&gt;
#include &lt;string&gt;

int main()
{
  std::string const s(&quot;Emplary&quot;);
  assert(s.size() == std::strlen(s.data()));
  assert(std::equal(s.begin(), s.end(), s.data()));
  assert(std::equal(s.data(), s.data() + s.size(), s.begin()));
  assert(0 == *(s.data() + s.size()));
}
| output=
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc front}}
{{dsc inc | cpp/string/basic_string/dsc back}}
{{dsc inc | cpp/string/basic_string/dsc c_str}}
{{dsc end}}

[[de:cpp/string/basic string/data]]
[[es:cpp/string/basic string/data]]
[[fr:cpp/string/basic string/data]]
[[it:cpp/string/basic string/data]]
[[ja:cpp/string/basic string/data]]
[[pl:cpp/string/basic string/data]]
[[pt:cpp/string/basic string/data]]
[[ru:cpp/string/basic string/data]]
[[zh:cpp/string/basic string/data]]</text>
      <sha1>8vzqbp4rbfeu9e8h5rtvk9ly175pt3m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/empty</title>
    <ns>0</ns>
    <id>1402</id>
    <revision>
      <id>91684</id>
      <parentid>70485</parentid>
      <timestamp>2017-03-31T19:54:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1359">{{cpp/string/basic_string/title | empty}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl |
bool empty() const;
}}
{{dcl end}}

Checks if the string has no characters, i.e. whether {{c|begin() {{==}} end()}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the string is empty, {{c|false}} otherwise

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}} }}
{{rev end}}

===Complexity===
Constant.

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s;
    std::boolalpha(std::cout);
    std::cout &lt;&lt; &quot;s.empty():&quot; &lt;&lt; s.empty() &lt;&lt; &quot;\t s:'&quot; &lt;&lt; s &lt;&lt; &quot;'\n&quot;;

    s = &quot;Exemplar&quot;;
    std::cout &lt;&lt; &quot;s.empty():&quot; &lt;&lt; s.empty() &lt;&lt; &quot;\t s:'&quot; &lt;&lt; s &lt;&lt; &quot;'\n&quot;;

    s = &quot;&quot;;
    std::cout &lt;&lt; &quot;s.empty():&quot; &lt;&lt; s.empty() &lt;&lt; &quot;\t s:'&quot; &lt;&lt; s &lt;&lt; &quot;'\n&quot;;
}
| output=
s.empty():true	 s:''
s.empty():false	 s:'Exemplar'
s.empty():true	 s:''
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc size}}
{{dsc end}}

[[de:cpp/string/basic string/empty]]
[[es:cpp/string/basic string/empty]]
[[fr:cpp/string/basic string/empty]]
[[it:cpp/string/basic string/empty]]
[[ja:cpp/string/basic string/empty]]
[[pl:cpp/string/basic string/empty]]
[[pt:cpp/string/basic string/empty]]
[[ru:cpp/string/basic string/empty]]
[[zh:cpp/string/basic string/empty]]</text>
      <sha1>ajwcq0865hxzjfgmt1nbf1z27i1gex5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/end</title>
    <ns>0</ns>
    <id>1403</id>
    <revision>
      <id>91678</id>
      <parentid>70810</parentid>
      <timestamp>2017-03-31T19:54:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1434">{{cpp/string/basic_string/title | end | cend}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | 
iterator end();
}}
{{dcl | 
const_iterator end() const;
}}
{{dcl | since=c++11 |
const_iterator cend() const;
}}
{{dcl end}}

Returns an iterator to the character following the last character of the string. This character acts as a placeholder, attempting to access it results in undefined behavior. 

{{image|range-begin-end.svg}}

===Parameters===
(none)

===Return value===
iterator to the character following the last character

===Exceptions===
{{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;

int main()
{
    std::string s(&quot;Exemparl&quot;);
    std::next_permutation(s.begin(), s.end());

    std::string c;
    std::copy(s.cbegin(), s.cend(), std::back_inserter(c));
    std::cout &lt;&lt; c &lt;&lt;'\n'; // &quot;Exemplar&quot;
}
| output=
Exemplar
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc begin}}
{{dsc end}}

[[de:cpp/string/basic string/end]]
[[es:cpp/string/basic string/end]]
[[fr:cpp/string/basic string/end]]
[[it:cpp/string/basic string/end]]
[[ja:cpp/string/basic string/end]]
[[pl:cpp/string/basic string/end]]
[[pt:cpp/string/basic string/end]]
[[ru:cpp/string/basic string/end]]
[[zh:cpp/string/basic string/end]]</text>
      <sha1>jdlvlb2iil8ovycpegdkekgqu9cw8fq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/erase</title>
    <ns>0</ns>
    <id>1404</id>
    <revision>
      <id>87216</id>
      <parentid>87215</parentid>
      <timestamp>2016-08-03T19:22:40Z</timestamp>
      <contributor>
        <ip>173.174.78.191</ip>
      </contributor>
      <comment>Undo revision 87215 by [[Special:Contributions/173.174.78.191|173.174.78.191]] ([[User talk:173.174.78.191|talk]]) My mistake</comment>
      <text xml:space="preserve" bytes="2519">{{cpp/string/basic_string/title | erase}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_string&amp; erase( size_type index {{=}} 0, size_type count {{=}} npos );
}}
{{dcl rev begin | num=2}}
{{dcl | until=c++11 |
iterator erase( iterator position );
}}
{{dcl | since=c++11 |
iterator erase( const_iterator position );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 |
iterator erase( iterator first, iterator last );
}}
{{dcl | since=c++11 |
iterator erase( const_iterator first, const_iterator last );
}}
{{dcl rev end}}
{{dcl end}}

Removes specified characters from the string. 

@1@ Removes ''min(''{{tt|count}}, {{lc|size()}}{{tt| - index}}'')'' characters starting at {{tt|index}}.

@2@ Removes the character at {{tt|position}}.

@3@ Removes the characters in the range {{tt|[first, last)}}.

===Parameters===
{{par begin}}
{{par | index | first character to remove}}
{{par | count | number of characters to remove}}
{{par | position | iterator to the character to remove}}
{{par | first, last | range of the characters to remove}}
{{par end}} 

===Return value===
@1@ {{c|*this}}

@2@ iterator pointing to the character immediately following the character erased, or {{tt|end()}} if no such character exists

@3@ iterator pointing to the character {{tt|last}} pointed to before the erase, or {{tt|end()}} if no such character exists

===Exceptions===
@1@ {{lc|std::out_of_range}} if {{c|index &gt; size()}}.
@2-3@ (none)

{{rev inl|since=c++11|
In any case, if an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;string&gt;
int main ()
{
    std::string s = &quot;This is an example&quot;;
    std::cout &lt;&lt; s &lt;&lt; '\n';

    s.erase(0, 5); // Erase &quot;This &quot;
    std::cout &lt;&lt; s &lt;&lt; '\n';

    s.erase(std::find(s.begin(), s.end(), ' ')); // Erase ' '
    std::cout &lt;&lt; s &lt;&lt; '\n';

    s.erase(s.find(' ')); // Trim from ' ' to the end of the string
    std::cout &lt;&lt; s &lt;&lt; '\n';
}
|output=
This is an example
is an example
isan example
isan
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc clear}}
{{dsc end}}

[[de:cpp/string/basic string/erase]]
[[es:cpp/string/basic string/erase]]
[[fr:cpp/string/basic string/erase]]
[[it:cpp/string/basic string/erase]]
[[ja:cpp/string/basic string/erase]]
[[pl:cpp/string/basic string/erase]]
[[pt:cpp/string/basic string/erase]]
[[ru:cpp/string/basic string/erase]]
[[zh:cpp/string/basic string/erase]]</text>
      <sha1>ds5phrc1u9njj0tobkol8mi1ajr9uft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/find</title>
    <ns>0</ns>
    <id>1405</id>
    <revision>
      <id>92130</id>
      <parentid>92128</parentid>
      <timestamp>2017-04-06T04:38:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 92128 by [[Special:Contributions/128.206.19.149|128.206.19.149]] ([[User talk:128.206.19.149|talk]]) in C++98, basic_string::find returns size_type</comment>
      <text xml:space="preserve" bytes="4135">{{cpp/string/basic_string/title | find}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
size_type find( const basic_string&amp; str, size_type pos = 0 ) const
}}
{{dcl | num=2 | 1=
size_type find( const CharT* s, size_type pos, size_type count ) const;
}}
{{dcl | num=3 | 1=
size_type find( const CharT* s, size_type pos = 0 ) const;
}}
{{dcl | num=4 | 1=
size_type find( CharT ch, size_type pos = 0 ) const;
}}
{{dcl | num=5 |since=c++17|1=
size_type find( std::basic_string_view&lt;CharT, Traits&gt; sv,
                size_type pos = 0) const
}}
{{dcl end}}

Finds the first substring equal to the given character sequence. Search begins at {{tt|pos}}, i.e. the found substring must not begin in a position preceding {{tt|pos}}.

@1@ Finds the first substring equal to {{tt|str}}.

@2@ Finds the first substring equal to the first {{tt|count}} characters of the character string pointed to by {{tt|s}}. {{tt|s}} can include null characters.

@3@ Finds the first substring equal to the character string pointed to by {{tt|s}}. The length of the string is determined by the first null character. 

@4@ Finds the first character {{tt|ch}} (treated as a single-character substring by the formal rules below).

@5@ Finds the first substring equal to the string view {{tt|sv}}.

Formally, a substring {{tt|str}} is said to be ''found'' at position {{tt|xpos}} if all of the following is true:
* {{c|xpos &gt;{{=}} pos}} 
* {{c|xpos + str.size() &lt;{{=}} size()}}
* for all positions {{tt|n}} in {{tt|str}}, {{c|Traits::eq(at(xpos+n), str.at(n))}}

In particular, this implies that
* a substring can be found only if {{c|1=pos &lt;= size() - str.size()}}
* an empty substring is found at {{tt|pos}} if and only if {{c|1=pos &lt;= size()}}
* for a non-empty substring, if {{c|1=pos &gt;= size()}}, the function always returns {{lc|npos}}.

===Parameters===
{{par begin}}
{{par | str | string to search for}}
{{par | pos | position at which to start the search}}
{{par | count | length of substring to search for}}
{{par | s | pointer to a character string to search for}}
{{par | ch | character to search for}}
{{par | sv | {{lc|std::basic_string_view}} to search for}}
{{par end}} 

===Return value===
Position of the first character of the found substring or {{lc|npos}} if no such substring is found.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 |
@1-4@ (none)
}}
{{rev | since=c++11 | until=c++14 |
@1,4@ {{unreviewed noexcept}}
@2,3@ (none)
}}
{{rev | since=c++14 |
@1@ {{unreviewed noexcept}}
@2,3,4@ (none)
}}
{{rev|since=c++17|
@5@ {{unreviewed noexcept}}
}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;

void print(std::string::size_type n, std::string const &amp;s)
{
    if (n == std::string::npos) {
        std::cout &lt;&lt; &quot;not found\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;found: &quot; &lt;&lt; s.substr(n) &lt;&lt; '\n';
    }
}

int main()
{
    std::string::size_type n;
    std::string const s = &quot;This is a string&quot;;

    // search from beginning of string
    n = s.find(&quot;is&quot;);
    print(n, s);

    // search from position 5
    n = s.find(&quot;is&quot;, 5);
    print(n, s);

    // find a single character
    n = s.find('a');
    print(n, s);

    // find a single character
    n = s.find('q');
    print(n, s);
}
 | output=
found: is is a string
found: is a string
found: a string
not found
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strstr}}
{{dsc inc | cpp/string/wide/dsc wcsstr}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc inc | cpp/string/basic_string/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_not_of}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}

[[de:cpp/string/basic string/find]]
[[es:cpp/string/basic string/find]]
[[fr:cpp/string/basic string/find]]
[[it:cpp/string/basic string/find]]
[[ja:cpp/string/basic string/find]]
[[pt:cpp/string/basic string/find]]
[[ru:cpp/string/basic string/find]]
[[zh:cpp/string/basic string/find]]</text>
      <sha1>jvo8s1muiwc7qs38kwv81vqckvkjeab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/find first not of</title>
    <ns>0</ns>
    <id>1406</id>
    <revision>
      <id>91339</id>
      <parentid>90161</parentid>
      <timestamp>2017-03-31T19:40:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3987">{{cpp/string/basic_string/title | find_first_not_of}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
size_type find_first_not_of( const basic_string&amp; str, size_type pos = 0 ) const;
}}
{{dcl | num=2 | 1=
size_type find_first_not_of( const CharT* s, size_type pos, size_type count ) const;
}}
{{dcl | num=3 | 1=
size_type find_first_not_of( const CharT* s, size_type pos = 0 ) const;
}}
{{dcl | num=4 | 1=
size_type find_first_not_of( CharT ch, size_type pos = 0 ) const;
}}
{{dcl | num=5 |since=c++17|1=
size_type find_first_not_of( std::basic_string_view&lt;CharT, Traits&gt; sv,
                             size_type pos = 0) const
}}
{{dcl end}}

Finds the first character equal to none of the characters in the given character sequence. The search considers only the interval [{{tt|pos}}, {{lc|size()}}). If the character is not present in the interval, {{lc|npos}} will be returned.

@1@ Finds the first character equal to none of characters in {{tt|str}}. 

@2@ Finds the first character equal to none of characters in the first {{tt|count}} characters of the character string pointed to by {{tt|s}}. {{tt|s}} can include null characters.

@3@ Finds the first character equal to none of characters in character string pointed to by {{tt|s}}. The length of the string is determined by the first null character.

@4@ Finds the first character not equal to {{tt|ch}}.

@5@ Finds the first character equal to none of characters in {{tt|sv}}. 

In all cases, equality is checked by calling {{ltt|cpp/string/char_traits/cmp|Traits::eq}}.

===Parameters===
{{par begin}}
{{par | str | string identifying characters to search for}}
{{par | pos | position for the seach to start from}}
{{par | count | length of character string identifying characters to search for}}
{{par | s | pointer to a character string identifying characters to search for}}
{{par | ch | character identifying characters to search for}}
{{par | sv | {{lc|std::basic_string_view}} identifying the characters to search for}}
{{par end}} 

===Return value===
Position of the found character or {{lc|npos}} if no such character is found.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 |
@1-4@ (none)
}}
{{rev | since=c++11 | until=c++14 |
@1,4@ {{unreviewed noexcept}}
@2,3@ (none)
}}
{{rev | since=c++14 |
@1@ {{unreviewed noexcept}}
@2,3,4@ (none)
}}
{{rev|since=c++17|
@5@ {{unreviewed noexcept}}
}}
{{rev end}}

===Example===
{{example
 | code=#include &lt;string&gt;
#include &lt;iostream&gt;

int main() {
    std::string to_search = &quot;Some data with %MACROS to substitute&quot;;

    std::cout &lt;&lt; &quot;Before: &quot; &lt;&lt; to_search &lt;&lt; '\n';

    auto pos = std::string::npos;
    while ((pos = to_search.find('%')) != std::string::npos) {
        // Permit uppercase letters, lowercase letters and numbers in macro names
        const auto after = to_search.find_first_not_of(&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&quot;, pos + 1);

        // Now to_search[pos] == '%' and to_search[after] == ' ' (after the 'S')

        if(after != std::string::npos)
            to_search.replace(pos, after - pos, &quot;some very nice macros&quot;);
    }

    std::cout &lt;&lt; &quot;After: &quot; &lt;&lt; to_search &lt;&lt; '\n';
}
 | output=Before: Some data with %MACROS to substitute
After: Some data with some very nice macros to substitute
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc inc | cpp/string/basic_string/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_not_of}}
{{dsc end}}

[[de:cpp/string/basic string/find first not of]]
[[es:cpp/string/basic string/find first not of]]
[[fr:cpp/string/basic string/find first not of]]
[[it:cpp/string/basic string/find first not of]]
[[ja:cpp/string/basic string/find first not of]]
[[pt:cpp/string/basic string/find first not of]]
[[ru:cpp/string/basic string/find first not of]]
[[zh:cpp/string/basic string/find first not of]]</text>
      <sha1>80hyuc7wl8pqc4p8nbju2igomg7ds98</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/find first of</title>
    <ns>0</ns>
    <id>1407</id>
    <revision>
      <id>91619</id>
      <parentid>86853</parentid>
      <timestamp>2017-03-31T19:52:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4172">{{cpp/string/basic_string/title | find_first_of}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
size_type find_first_of( const basic_string&amp; str, size_type pos = 0 ) const;
}}
{{dcl | num=2 | 1=
size_type find_first_of( const CharT* s, size_type pos, size_type count ) const;
}}
{{dcl | num=3 | 1=
size_type find_first_of( const CharT* s, size_type pos = 0 ) const;
}}
{{dcl | num=4 | 1=
size_type find_first_of( CharT ch, size_type pos = 0 ) const;
}}
{{dcl | num=5 | since=c++17 |1=
size_type find_first_of( std::basic_string_view&lt;CharT, Traits&gt; sv,
                         size_type pos = 0 ) const
}}
{{dcl end}}

Finds the first character equal to one of the characters in the given character sequence. The search considers only the interval [{{tt|pos}}, {{lc|size()}}). If the character is not present in the interval, {{lc|npos}} will be returned.

@1@ Finds the first character equal to one of the characters in {{tt|str}}{{rev inl|since=c++17|as if by {{c|find_first_of(std::basic_string_view&lt;CharT, Traits&gt;(str), pos)}}}}

@2@ Finds the first character equal to one of the characters in the first {{tt|count}} characters of the character string pointed to by {{tt|s}}. {{tt|s}} can include null characters. Equivalent to {{rev inl|until=c++17|{{c|find_first_of(basic_string(s, count), pos)}}}}{{rev inl|since=c++17|{{c|find_first_of(std::basic_string_view&lt;CharT, Traits&gt;(s, count), pos)}}}}

@3@ Finds the first character equal to one of the characters in character string pointed to by {{tt|s}}. The length of the string is determined by the first null character. Equivalent to {{rev inl|until=c++17|{{c|find_first_of(basic_string(s), pos)}}}}{{rev inl|since=c++17|{{c|find_first_of(std::basic_string_view&lt;CharT,Traits&gt;(s), pos)}}}}

@4@ Finds the first character equal to {{tt|ch}}.

@5@ Finds the first character equal to one of the characters in {{tt|sv}}

===Parameters===
{{par begin}}
{{par | str | string identifying characters to search for}}
{{par | pos | position at which to begin searching}}
{{par | count | length of character string identifying characters to search for}}
{{par | s | pointer to a character string identifying characters to search for}}
{{par | ch | character to search for}}
{{par | sv | {{lc|std::basic_string_view}} to search for}}
{{par end}} 

===Return value===
Position of the found character or {{lc|npos}} if no such character is found.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 |
@1-4@ (none)
}}
{{rev | since=c++11 | until=c++14 |
@1,4@ {{unreviewed noexcept}}
@2,3@ (none)
}}
{{rev | since=c++14 |
@1@ {{unreviewed noexcept}}
@2-4@ (none)
}}
{{rev|since=c++17|
@5@ {{unreviewed noexcept}}
}}
{{rev end}}

===Notes===
{{c|traits::eq()}} is used to perform the comparison.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    // the test string
    std::string str = std::string(&quot;Hello World!&quot;);

    // strings and chars to search for
    std::string search_str = std::string(&quot;o&quot;);
    const char* search_cstr = &quot;Good Bye!&quot;;

    std::cout &lt;&lt; str.find_first_of(search_str) &lt;&lt; '\n';
    std::cout &lt;&lt; str.find_first_of(search_str, 5) &lt;&lt; '\n';
    std::cout &lt;&lt; str.find_first_of(search_cstr) &lt;&lt; '\n';
    std::cout &lt;&lt; str.find_first_of(search_cstr, 0, 4) &lt;&lt; '\n';
    // 'x' is not in &quot;Hello World', thus it will return std::string::npos
    std::cout &lt;&lt; str.find_first_of('x') &lt;&lt; '\n';
}
 | p=true
 | output=4
7
1
4
18446744073709551615
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc inc | cpp/string/basic_string/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_not_of}}
{{dsc inc | cpp/string/byte/dsc strspn}}
{{dsc end}}

[[de:cpp/string/basic string/find first of]]
[[es:cpp/string/basic string/find first of]]
[[fr:cpp/string/basic string/find first of]]
[[it:cpp/string/basic string/find first of]]
[[ja:cpp/string/basic string/find first of]]
[[pt:cpp/string/basic string/find first of]]
[[ru:cpp/string/basic string/find first of]]
[[zh:cpp/string/basic string/find first of]]</text>
      <sha1>rk2yjnj60r8y5qq93txaztpq508scy6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/find last not of</title>
    <ns>0</ns>
    <id>1408</id>
    <revision>
      <id>91562</id>
      <parentid>86856</parentid>
      <timestamp>2017-03-31T19:50:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3134">{{cpp/string/basic_string/title | find_last_not_of}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
size_type find_last_not_of( const basic_string&amp; str, size_type pos = npos ) const;
}}
{{dcl | num=2 | 1=
size_type find_last_not_of( const CharT* s, size_type pos, size_type count ) const;
}}
{{dcl | num=3 | 1=
size_type find_last_not_of( const CharT* s, size_type pos = npos ) const;
}}
{{dcl | num=4 | 1=
size_type find_last_not_of( CharT ch, size_type pos = npos ) const;
}}
{{dcl | num=5 | since=c++17 | 1=
size_type find_last_not_of( std::basic_string_view&lt;CharT, Traits&gt; sv,
                            size_type pos = npos) const
}}
{{dcl end}}

Finds the last character equal to none of the characters in the given character sequence. The search considers only the interval {{math|[0; pos]}}. If the character is not present in the interval, {{lc|npos}} will be returned.

@1@ Finds the last character equal to none of characters in {{tt|str}}. 

@2@ Finds the last character equal to none of characters in the first {{tt|count}} characters of the character string pointed to by {{tt|s}}. {{tt|s}} can include null characters.

@3@ Finds the last character equal to none of characters in character string pointed to by {{tt|s}}. The length of the string is determined by the first null character.

@4@ Finds the last character not equal to {{tt|ch}}.

@5@ Finds the last character equal to none of characters in {{tt|sv}}. 

In all cases, equality is checked by calling {{ltt|cpp/string/char_traits/cmp|Traits::eq}}.

===Parameters===
{{par begin}}
{{par | str | string identifying characters to search for}}
{{par | pos | position at which to begin searching}}
{{par | count | length of character string identifying characters to search for}}
{{par | s | pointer to a character string identifying characters to search fo}}
{{par | ch | character identifying characters to search for}}
{{par | sv | {{lc|std::basic_string_view}} identifying the characters to search for}}
{{par end}} 

===Return value===
Position of the found character or {{lc|npos}} if no such character is found.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 |
@1-4@ (none)
}}
{{rev | since=c++11 | until=c++14 |
@1,4@ {{unreviewed noexcept}}
@2,3@ (none)
}}
{{rev | since=c++14 |
@1@ {{unreviewed noexcept}}
@2,3,4@ (none)
}}
{{rev|since=c++17|
@5@ {{unreviewed noexcept}}
}}
{{rev end}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc inc | cpp/string/basic_string/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_of}}
{{dsc end}}

[[de:cpp/string/basic string/find last not of]]
[[es:cpp/string/basic string/find last not of]]
[[fr:cpp/string/basic string/find last not of]]
[[it:cpp/string/basic string/find last not of]]
[[ja:cpp/string/basic string/find last not of]]
[[pt:cpp/string/basic string/find last not of]]
[[ru:cpp/string/basic string/find last not of]]
[[zh:cpp/string/basic string/find last not of]]</text>
      <sha1>fczzkkbisd2oqse7mruislr6ue2ccxc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/find last of</title>
    <ns>0</ns>
    <id>1409</id>
    <revision>
      <id>91885</id>
      <parentid>88634</parentid>
      <timestamp>2017-03-31T20:00:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3300">{{cpp/string/basic_string/title | find_last_of}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
size_type find_last_of( const basic_string&amp; str, size_type pos = npos ) const;
}}
{{dcl | num=2 | 1=
size_type find_last_of( const CharT* s, size_type pos, size_type count ) const;
}}
{{dcl | num=3 | 1=
size_type find_last_of( const CharT* s, size_type pos = npos ) const;
}}
{{dcl | num=4 | 1=
size_type find_last_of( CharT ch, size_type pos = npos ) const;
}}
{{dcl | num=5 |since=c++17|1=
size_type find_last_of( std::basic_string_view&lt;CharT, Traits&gt; sv,
                        size_type pos = npos) const
}}
{{dcl end}}

Finds the last character equal to one of characters in the given character sequence. Exact search algorithm is not specified. The search considers only the interval {{math|[0; pos]}}. If the character is not present in the interval, {{lc|npos}} will be returned.

@1@ Finds the last character equal to one of characters in {{tt|str}}.

@2@ Finds the last character equal to one of characters in the first {{tt|count}} characters of the character string pointed to by {{tt|s}}. {{tt|s}} can include null characters.

@3@ Finds the last character equal to one of characters in character string pointed to by {{tt|s}}. The length of the string is determined by the first null character.

@4@ Finds the last character equal to {{tt|ch}}.

@5@ Finds the last character equal to one of characters in {{tt|sv}}.

In all cases, equality is checked by calling [[cpp/string/char_traits/cmp|Traits::eq]].

===Parameters===
{{par begin}}
{{par | str | string identifying characters to search for}}
{{par | pos | position at which the search is to finish}}
{{par | count | length of character string identifying characters to search for}}
{{par | s | pointer to a character string identifying characters to search for}}
{{par | ch | character to search for}}
{{par | sv | {{lc|std::basic_string_view}} identifying the characters to search for}}
{{par end}} 

===Return value===
Position of the found character or {{lc|npos}} if no such character is found.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 |
@1-4@ (none)
}}
{{rev | since=c++11 | until=c++14 |
@1,4@ {{unreviewed noexcept}}
@2,3@ (none)
}}
{{rev | since=c++14 |
@1@ {{unreviewed noexcept}}
@2,3,4@ (none)
}}
{{rev|since=c++17|
@5@ {{unreviewed noexcept}}
}}
{{rev end}}

===Example===
{{example
 | code=
#include&lt;string&gt;
#include&lt;iostream&gt;
int main()
{
    const std::string path=&quot;/root/config&quot;;
    auto const pos=path.find_last_of('/');
    const auto leaf=path.substr(pos+1);

    std::cout &lt;&lt; leaf &lt;&lt; '\n';
}
 | output=
    config
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc inc | cpp/string/basic_string/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_not_of}}
{{dsc end}}

[[de:cpp/string/basic string/find last of]]
[[es:cpp/string/basic string/find last of]]
[[fr:cpp/string/basic string/find last of]]
[[it:cpp/string/basic string/find last of]]
[[ja:cpp/string/basic string/find last of]]
[[pt:cpp/string/basic string/find last of]]
[[ru:cpp/string/basic string/find last of]]
[[zh:cpp/string/basic string/find last of]]</text>
      <sha1>q91lcrzf8l3x0trf4c7l06s054mwhpn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/front</title>
    <ns>0</ns>
    <id>1410</id>
    <revision>
      <id>80834</id>
      <parentid>77482</parentid>
      <timestamp>2015-09-02T08:45:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>move</comment>
      <text xml:space="preserve" bytes="1202">{{cpp/string/basic_string/title | front}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
CharT&amp; front();
}}
{{dcl | since=c++11 |
const CharT&amp; front() const;
}}
{{dcl end}}

Returns reference to the first character in the string. The behavior is undefined if {{c|empty() {{==}} true}}.

===Parameters===
(none)

===Return value===
reference to the first character, equivalent to {{c|operator[](0)}}.

===Complexity===
Constant

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;string&gt;
 
int main()
{
  {
    std::string s(&quot;Exemplary&quot;);
    char&amp; f = s.front();
    f = 'e';
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;exemplary&quot;
  }
 
  {
    std::string const c(&quot;Exemplary&quot;);
    char const&amp; f = c.front();
    std::cout &lt;&lt; &amp;f &lt;&lt; '\n'; // &quot;Exemplary&quot;
  }
}
| output=
exemplary
Exemplary
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc back}}
{{dsc end}}

[[de:cpp/string/basic string/front]]
[[es:cpp/string/basic string/front]]
[[fr:cpp/string/basic string/front]]
[[it:cpp/string/basic string/front]]
[[ja:cpp/string/basic string/front]]
[[pt:cpp/string/basic string/front]]
[[ru:cpp/string/basic string/front]]
[[zh:cpp/string/basic string/front]]</text>
      <sha1>556x3jvblydtbk00ibk761ojuu0apax</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/get allocator</title>
    <ns>0</ns>
    <id>1411</id>
    <revision>
      <id>70120</id>
      <parentid>41657</parentid>
      <timestamp>2014-05-10T12:29:13Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="815">{{cpp/string/basic_string/title | get_allocator}}
{{cpp/string/basic_string/navbar}}
{{ddcl | 
allocator_type get_allocator() const;
}}

Returns the allocator associated with the string.

===Parameters===
(none)

===Return value===
the associated allocator

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc allocator}}
{{dsc inc | cpp/memory/dsc allocator_traits}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/string/basic string/get allocator]]
[[es:cpp/string/basic string/get allocator]]
[[fr:cpp/string/basic string/get allocator]]
[[it:cpp/string/basic string/get allocator]]
[[ja:cpp/string/basic string/get allocator]]
[[pt:cpp/string/basic string/get allocator]]
[[ru:cpp/string/basic string/get allocator]]
[[zh:cpp/string/basic string/get allocator]]</text>
      <sha1>m22rqpd8q4j12ih23j41ynbytc0mkt9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/getline</title>
    <ns>0</ns>
    <id>2134</id>
    <revision>
      <id>81258</id>
      <parentid>81257</parentid>
      <timestamp>2015-10-09T17:44:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 81257 by [[Special:Contributions/103.25.181.238|103.25.181.238]] ([[User talk:103.25.181.238|talk]]) \n was used correctly</comment>
      <text xml:space="preserve" bytes="4304">{{cpp/title|getline}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 |
template&lt; class CharT, class Traits, class Allocator &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; getline( std::basic_istream&lt;CharT,Traits&gt;&amp; input,
                                           std::basic_string&lt;CharT,Traits,Allocator&gt;&amp; str,
                                           CharT delim );
}}
{{dcl | num=1 | since=c++11 |
template&lt; class CharT, class Traits, class Allocator &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; getline( std::basic_istream&lt;CharT,Traits&gt;&amp;&amp; input,
                                           std::basic_string&lt;CharT,Traits,Allocator&gt;&amp; str,
                                           CharT delim );
}}
{{dcl | num=2 |
template&lt; class CharT, class Traits, class Allocator &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; getline( std::basic_istream&lt;CharT,Traits&gt;&amp; input,
                                           std::basic_string&lt;CharT,Traits,Allocator&gt;&amp; str );
}}
{{dcl | num=2 | since=c++11 |
template&lt; class CharT, class Traits, class Allocator &gt;
std::basic_istream&lt;CharT,Traits&gt;&amp; getline( std::basic_istream&lt;CharT,Traits&gt;&amp;&amp; input,
                                           std::basic_string&lt;CharT,Traits,Allocator&gt;&amp; str );
}}
{{dcl end}}

{{tt|getline}} reads characters from an input stream and places them into a string:

@1@ Behaves as {{concept|UnformattedInputFunction}}, except that {{tt|input.gcount()}} is not affected. After constructing and checking the sentry object, performs the following:
:@1@ Calls {{c|str.erase()}}
:@2@ Extracts characters from {{tt|input}} and appends them to {{tt|str}} until one of the following occurs (checked in the order listed)
::@a@ end-of-file condition on {{tt|input}}, in which case, {{tt|getline}} sets {{ltt|cpp/io/ios_base/iostate|eofbit}}.
::@b@ the next available input character is {{tt|delim}}, as tested by {{c|Traits::eq(c, delim)}}, in which case the delimiter character is extracted from {{tt|input}}, but is not appended to {{tt|str}}.
::@c@ {{c|str.max_size()}} characters have been stored, in which case {{tt|getline}} sets {{ltt|cpp/io/ios_base/iostate|failbit}} and returns.
:@3@ If no characters were extracted for whatever reason (not even the discarded delimiter), {{tt|getline}} sets {{ltt|cpp/io/ios_base/iostate|failbit}} and returns.

@2@ Same as {{c|getline(input, str, input.widen('\n'))}}, that is, the default delimiter is the endline character.

===Parameters===
{{par begin}}
{{par | input | the stream to get data from}}
{{par | str | the string to put the data into}}
{{par | delim | the delimiter character}}
{{par end}}

===Return value===
{{tt|input}}

===Notes===
When used immediately after whitespace-delimited input, e.g. after {{c|int n; std::cin &gt;&gt; n;}}, {{tt|getline}} consumes the endline character left on the input stream by [[cpp/io/basic_istream/operator_gtgt|operator&gt;&gt;]], and returns immediately. A common solution is to ignore all leftover characters on the line of input with {{c|cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n');}} before switching to line-oriented input.

===Example===
{{example
 | p=true
 | The following example demonstrates how to use {{tt|getline}} function to read user's input and how to process file line by line.
 | code=#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;sstream&gt;
 
int main()
{
    // greet the user
    std::string name;
    std::cout &lt;&lt; &quot;What is your name? &quot;;
    std::getline(std::cin, name);
    std::cout &lt;&lt; &quot;Hello &quot; &lt;&lt; name &lt;&lt; &quot;, nice to meet you.\n&quot;;
 
    // read file line by line
    std::istringstream input;
    input.str(&quot;1\n2\n3\n4\n5\n6\n7\n&quot;);
    int sum = 0;
    for (std::string line; std::getline(input, line); ) {
        sum += std::stoi(line);
    }
    std::cout &lt;&lt; &quot;\nThe sum is: &quot; &lt;&lt; sum &lt;&lt; &quot;\n&quot;;
}
 | p=true | output=
What is your name? John Q. Public
Hello John Q. Public, nice to meet you.

The sum is 28
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/basic_istream/dsc getline}}
{{dsc end}}

[[de:cpp/string/basic string/getline]]
[[es:cpp/string/basic string/getline]]
[[fr:cpp/string/basic string/getline]]
[[it:cpp/string/basic string/getline]]
[[ja:cpp/string/basic string/getline]]
[[pt:cpp/string/basic string/getline]]
[[ru:cpp/string/basic string/getline]]
[[zh:cpp/string/basic string/getline]]</text>
      <sha1>8yqjwzjdfjprbxv0wqgrmp42hvispwq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/hash</title>
    <ns>0</ns>
    <id>5521</id>
    <revision>
      <id>88418</id>
      <parentid>62945</parentid>
      <timestamp>2016-11-17T22:10:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0513R0 note that hashes of stirngs equal hashes of string views</comment>
      <text xml:space="preserve" bytes="1524">{{cpp/title|hash &lt;small&gt;(std::string, std::wstring, std::u16string, std::u32string)&lt;/small&gt;}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | since=c++11 | 1=
template&lt;&gt; struct hash&lt;std::string&gt;;
template&lt;&gt; struct hash&lt;std::wstring&gt;;
template&lt;&gt; struct hash&lt;std::u16string&gt;;
template&lt;&gt; struct hash&lt;std::u32string&gt;;
}}
{{dcl end}}

The template specializations of {{lc|std::hash}} for the various string classes allow users to obtain hashes of strings.

{{rev begin}}
{{rev|since=c++17|
These hashes equal the hashes of corresponding {{lc|std::basic_string_view}} classes: If S is one of these string types, SV is the corresponding string view type, and s is an object of type S, then {{c|std::hash&lt;S&gt;()(s) {{==}} std::hash&lt;SV&gt;()(SV(s))}}.
}}
{{rev end}}

===Example===
{{example
 | The following code shows one possible output of a hash function used on a string:
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;functional&gt;
 
int main()
{
    std::string s = &quot;Stand back! I've got jimmies!&quot;;
    std::hash&lt;std::string&gt; hash_fn;

    size_t hash = hash_fn(s);

    std::cout &lt;&lt; hash &lt;&lt; '\n';
}
 | output=
325378910
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[de:cpp/string/basic string/hash]]
[[es:cpp/string/basic string/hash]]
[[fr:cpp/string/basic string/hash]]
[[it:cpp/string/basic string/hash]]
[[ja:cpp/string/basic string/hash]]
[[pt:cpp/string/basic string/hash]]
[[ru:cpp/string/basic string/hash]]
[[zh:cpp/string/basic string/hash]]</text>
      <sha1>2hhylc0gwo853muzbxbv8nhm5hxmitz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/insert</title>
    <ns>0</ns>
    <id>1412</id>
    <revision>
      <id>91206</id>
      <parentid>91205</parentid>
      <timestamp>2017-03-27T10:34:43Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>Undo revision 91205 by [[Special:Contributions/Ssarpal|Ssarpal]] ([[User talk:Ssarpal|talk]])</comment>
      <text xml:space="preserve" bytes="8275">{{cpp/string/basic_string/title | insert}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_string&amp; insert( size_type index, size_type count, CharT ch );
}}
{{dcl | num=2 |
basic_string&amp; insert( size_type index, const CharT* s );
}}
{{dcl | num=3 |
basic_string&amp; insert( size_type index, const CharT* s, size_type count );
}}
{{dcl | num=4 |
basic_string&amp; insert( size_type index, const basic_string&amp; str );
}}
{{dcl rev begin | num=5 }}
{{dcl | until=c++14 |
basic_string&amp; insert( size_type index, const basic_string&amp; str,
                      size_type index_str, size_type count );
}}
{{dcl | since=c++14 |
basic_string&amp; insert( size_type index, const basic_string&amp; str,
                      size_type index_str, size_type count {{=}} npos);
}}
{{dcl rev end}}
{{dcl rev begin | num=6 }}
{{dcl | until=c++11 |
iterator insert( iterator pos, CharT ch );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator pos, CharT ch );
}}
{{dcl rev end}}
{{dcl rev begin | num=7 }}
{{dcl | until=c++11 |
void insert( iterator pos, size_type count, CharT ch );
}}
{{dcl | since=c++11 |
iterator insert( const_iterator pos, size_type count, CharT ch );
}}
{{dcl rev end}}
{{dcl rev begin | num=8}}
{{dcl | until=c++11 |
template&lt; class InputIt &gt;
void insert( iterator pos, InputIt first, InputIt last );
}}
{{dcl | since=c++11 |
template&lt; class InputIt &gt;
iterator insert( const_iterator pos, InputIt first, InputIt last );
}}
{{dcl rev end}}
{{dcl | num=9 | since=c++11 |
iterator insert( const_iterator pos, std::initializer_list&lt;CharT&gt; ilist );
}}
{{dcl rev end}}
{{dcl | num=10 | since=c++17 |
basic_string&amp; insert( size_type pos, basic_string_view&lt;CharT, Traits&gt; sv );
}}
{{dcl | num=11 | since=c++17 |1=
template &lt; class T &gt;
basic_string&amp; insert( size_type index, const T&amp; t,
                      size_type index_str, size_type count = npos);
}}
{{dcl end}}

Inserts characters into the string.

@1@ Inserts {{tt|count}} copies of character {{tt|ch}} at the position {{tt|index}}

@2@ Inserts null-terminated character string pointed to by {{tt|s}} at the position {{tt|index}}. The length of the string is determined by the first null character (effectively calls {{c|Traits::length(s)}}. 

@3@ Inserts the first {{tt|count}} characters from the character string pointed to by {{tt|s}} at the position {{tt|index}}. {{tt|s}} can contain null characters.

@4@ Inserts string {{tt|str}} at the position {{tt|index}}

@5@ Inserts a string, obtained by {{c|str.substr(index_str, count)}} at the position {{tt|index}}

@6@ Inserts character {{tt|ch}} before the character pointed by {{tt|pos}}

@7@ Inserts {{tt|count}} copies of character {{tt|ch}} before the element pointed by {{tt|pos}}

@8@ Inserts characters from the range {{tt|[first, last)}} before the element pointed by {{tt|pos}}. {{rev inl|since=c++11|This overload does not participate in overload resolution if {{tt|InputIt}} does not satisfy {{concept|InputIterator}}.}}

@9@ Inserts elements from initializer list {{tt|ilist}} before the element pointed by {{tt|pos}}

@10@ Inserts the elements from the string view {{tt|sv}} before the element pointed by {{tt|pos}}, as if by {{c|insert(pos, sv.data(), sv.size())}}

@11@ Converts {{tt|t}} to a string view {{tt|sv}} as if by {{c|1=std::basic_string_view&lt;CharT, Traits&gt; sv = t;}}, then inserts, before the element pointed by {{tt|pos}}, the characters from the subview {{tt|[index_str, index_str+count)}} of {{tt|sv}}. If the requested subview lasts past the end of {{tt|sv}}, or if {{c|1=count == npos}}, the resulting subview is {{tt|[index_str, sv.size())}}. If {{c|1=index_str &gt; sv.size()}}, or if {{c|index &gt; size()}}, {{lc|std::out_of_range}} is thrown. {{cpp/enable_if|{{c|std::is_convertible_v&lt;const T&amp;, std::basic_string_view&lt;CharT, Traits&gt;&gt;}} is {{c|true}} and {{c|std::is_convertible_v&lt;const T&amp;, const CharT*&gt;}} is {{c|false}}}}.

===Parameters===
{{par begin}}
{{par | index | position at which the content will be inserted}}
{{par | pos | iterator before which the characters will be inserted}}
{{par | ch | character to insert}}
{{par | count | number of characters to insert}}
{{par | s | pointer to the character string to insert}}
{{par | str | string to insert}}
{{par | first, last | range defining characters to insert}}
{{par | index_str | position of the first character in the string {{tt|str}} to insert}}
{{par | ilist | {{lc|std::initializer_list}} to insert the characters from}}
{{par | sv | {{lc|std::basic_string_view}} to insert the characters from}}
{{par | t | object (convertible to {{lc|std::basic_string_view}}) to insert the characters from}}
{{par hreq}}
{{par req concept | InputIt | InputIterator}}
{{par end}}

===Return value===
@1-5,10-11@ {{c|*this}}

@6-9@ An iterator which refers to the copy of the first inserted character or {{tt|pos}} if no characters were inserted ({{tt|count{{==}}0}} or {{tt|first{{==}}last}} or {{tt|ilist.size(){{==}}0}})

===Exceptions===
@1@ {{lc|std::out_of_range}} if {{c|index &gt; size()}} and {{lc|std::length_error}} if {{c|size() + count &gt; max_size()}}.

@2@ {{lc|std::out_of_range}} if {{c|index &gt; size()}} and {{lc|std::length_error}} if {{c|size() + Traits::length(s) &gt; max_size()}}.

@3@ {{lc|std::out_of_range}} if {{c|index &gt; size()}} and {{lc|std::length_error}} if {{c|size() + count &gt; max_size()}}.

@4@ {{lc|std::out_of_range}} if {{c|index &gt; size()}} and {{lc|std::length_error}} if {{c|size() + str.size() &gt; max_size()}}.

@5@ Throws exceptions on the following conditions:
:@a@ {{lc|std::out_of_range}} if {{c|index &gt; size()}}.
:@b@ {{lc|std::out_of_range}} if {{c|index_str &gt; str.size()}}.
:@c@ {{lc|std::length_error}} if {{c|size() + ins_count &gt; max_size()}} where {{tt|ins_count}} is the number of characters that will be inserted.

@6-9@ (none)

@10@ {{lc|std::out_of_range}} if {{c|index &gt; size()}} and {{lc|std::length_error}} if {{c|size() + sv.size() &gt; max_size()}}.

@11@ Throws exceptions on the following conditions:
:@a@ {{lc|std::out_of_range}} if {{c|index &gt; size()}}.
:@b@ {{lc|std::out_of_range}} if {{c|index_str &gt; sv.size()}}.
:@c@ {{lc|std::length_error}} if {{c|size() + ins_count &gt; max_size()}} where {{tt|ins_count}} is the number of characters that will be inserted.

{{rev begin}}
{{rev|since=c++11|
In any case, if an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}
{{rev end}}

===Example===
{{example|code=
#include &lt;cassert&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;
using namespace std::string_literals;
int main()
{
    std::string s = &quot;xmplr&quot;;

    // insert(size_type index, size_type count, char ch)
    s.insert(0, 1, 'E');
    assert(&quot;Exmplr&quot; == s);

    // insert(size_type index, const char* s)
    s.insert(2, &quot;e&quot;);
    assert(&quot;Exemplr&quot; == s);

    // insert(size_type index, string const&amp; str)
    s.insert(6, &quot;a&quot;s);
    assert(&quot;Exemplar&quot; == s);

    // insert(size_type index, string const&amp; str,
    //     size_type index_str, size_type count)
    s.insert(8, &quot; is an example string.&quot;s, 0, 14);
    assert(&quot;Exemplar is an example&quot; == s);

    // insert(const_iterator pos, char ch)
    s.insert(s.cbegin() + s.find_first_of('n') + 1, ':');
    assert(&quot;Exemplar is an: example&quot; == s);

    // insert(const_iterator pos, size_type count, char ch)
    s.insert(s.cbegin() + s.find_first_of(':') + 1, 2, '=');
    assert(&quot;Exemplar is an:== example&quot; == s);

    // insert(const_iterator pos, InputIt first, InputIt last)
    {
        std::string seq = &quot; string&quot;;
        s.insert(s.begin() + s.find_last_of('e') + 1,
            std::begin(seq), std::end(seq));
        assert(&quot;Exemplar is an:== example string&quot; == s);
    }

    // insert(const_iterator pos, std::initializer_list&lt;char&gt;)
    s.insert(s.cbegin() + s.find_first_of('g') + 1, { '.' });
    assert(&quot;Exemplar is an:== example string.&quot; == s);
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc append}}
{{dsc inc | cpp/string/basic_string/dsc push_back}}
{{dsc end}}

[[de:cpp/string/basic string/insert]]
[[es:cpp/string/basic string/insert]]
[[fr:cpp/string/basic string/insert]]
[[it:cpp/string/basic string/insert]]
[[ja:cpp/string/basic string/insert]]
[[pt:cpp/string/basic string/insert]]
[[ru:cpp/string/basic string/insert]]
[[zh:cpp/string/basic string/insert]]</text>
      <sha1>lq9uykqumchl6ncabfug9ze7vudyptk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/length</title>
    <ns>0</ns>
    <id>1413</id>
    <redirect title="cpp/string/basic string/size" />
    <revision>
      <id>39665</id>
      <parentid>34633</parentid>
      <timestamp>2012-09-21T12:21:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/basic string/size]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/max size</title>
    <ns>0</ns>
    <id>1414</id>
    <revision>
      <id>91861</id>
      <parentid>70484</parentid>
      <timestamp>2017-03-31T20:00:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1210">{{cpp/string/basic_string/title | max_size}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | 
size_type max_size() const;
}}
{{dcl end}}

Returns the maximum number of elements the string is able to hold due to system or library implementation limitations, i.e. ​{{c|std::distance(begin(), end())}}​ for the largest string. 

===Parameters===
(none)

===Return value===
Maximum number of characters

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}} }}
{{rev end}}

===Complexity===
Constant.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s;
    std::cout &lt;&lt; &quot;Maximum size of a string is &quot; &lt;&lt; s.max_size() &lt;&lt; &quot;\n&quot;;
}
|p=true
|output=Maximum size of a string is 4294967294
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc size}}
{{dsc end}}

[[de:cpp/string/basic string/max size]]
[[es:cpp/string/basic string/max size]]
[[fr:cpp/string/basic string/max size]]
[[it:cpp/string/basic string/max size]]
[[ja:cpp/string/basic string/max size]]
[[pt:cpp/string/basic string/max size]]
[[ru:cpp/string/basic string/max size]]
[[zh:cpp/string/basic string/max size]]</text>
      <sha1>sz2dsq6b6ewi0w80tvgbo4we628yz7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/npos</title>
    <ns>0</ns>
    <id>1415</id>
    <revision>
      <id>88125</id>
      <parentid>88124</parentid>
      <timestamp>2016-11-04T13:38:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="1694">{{cpp/string/basic_string/title | npos}}
{{cpp/string/basic_string/navbar}}
{{ddcl | 1=
static const size_type npos = -1;
}}

This is a special value equal to the maximum value representable by the type {{tt|size_type}}. The exact meaning depends on context, but it is generally used either as end of string indicator by the functions that expect a string index or as the error indicator by the functions that return a string index.

===Note===
Although the definition uses {{c|-1}}, {{ltt|cpp/string/basic_string|size_type}} is an unsigned integer type, and the value of {{tt|npos}} is the largest positive value it can hold, due to [[cpp/language/implicit conversion#Integral conversions|signed-to-unsigned implicit conversion]]. This is a portable way to specify the largest value of any unsigned type.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;
#include &lt;string&gt;

int main()
{
    // string search functions return npos if nothing is found
    std::string s = &quot;test&quot;;
    if(s.find('a') == std::string::npos)
        std::cout &lt;&lt; &quot;no 'a' in 'test'\n&quot;;

    // functions that take string subsets as arguments 
    // use npos as the &quot;all the way to the end&quot; indicator
    std::string s2(s, 2, std::string::npos);
    std::cout &lt;&lt; s2 &lt;&lt; '\n';

    std::bitset&lt;5&gt; b(&quot;aaabb&quot;, std::string::npos, 'a', 'b');
    std::cout &lt;&lt; b &lt;&lt; '\n';
}
 | output =
no 'a' in 'test'
st
00011
}}

[[de:cpp/string/basic string/npos]]
[[es:cpp/string/basic string/npos]]
[[fr:cpp/string/basic string/npos]]
[[it:cpp/string/basic string/npos]]
[[ja:cpp/string/basic string/npos]]
[[pt:cpp/string/basic string/npos]]
[[ru:cpp/string/basic string/npos]]
[[zh:cpp/string/basic string/npos]]</text>
      <sha1>iq487dshv129ygwafmo4057d7h1s1ay</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator at</title>
    <ns>0</ns>
    <id>1418</id>
    <revision>
      <id>91932</id>
      <parentid>90450</parentid>
      <timestamp>2017-03-31T20:02:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!---*[[:space:]]*(LWG|lwg)[[:space:]]*([0-9]*)[[:space:]]*-*--&gt;&quot; to &quot;{{mark unreviewed dr|LWG|$2}}&quot;</comment>
      <text xml:space="preserve" bytes="1971">{{cpp/string/basic_string/title | operator[]}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
reference       operator[]( size_type pos );
}}
{{dcl | num=2 |
const_reference operator[]( size_type pos ) const;
}}
{{dcl end}}

Returns a reference to the character at specified location {{tt|pos}}. No bounds checking is performed.

{{rev begin}}
{{rev | until=c++11 |
@1@ If {{c|1=pos == size()}}, the behavior is undefined.
@2@ If {{c|1=pos == size()}}, a reference to the character with value {{c|CharT()}} (the null character) is returned.
}}
{{rev | since=c++11 |
If {{c|1=pos == size()}}, a reference to the character with value {{c|CharT()}} (the null character) is returned. 

For the first (non-const) version, the behavior is undefined if this character is modified to any value other than {{c|charT()}}{{mark unreviewed dr|LWG|2475}}.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | pos | position of the character to return}}
{{par end}}

===Return value===
Reference to the requested character.

===Complexity===
Constant.

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;string&gt;
 
int main()
{
    std::string const e(&quot;Exemplar&quot;);
    for (unsigned i = e.length() - 1; i != 0; i /= 2)
        std::cout &lt;&lt; e[i];
    std::cout &lt;&lt; '\n';
    
    const char* c = &amp;e[0];
    std::cout &lt;&lt; c &lt;&lt; '\n'; // print as a C string

    //Change the last character of s into a 'y'
    std::string s(&quot;Exemplar &quot;);
    s[s.size()-1] = 'y';
    std::cout &lt;&lt; s &lt;&lt; '\n';
}
| output=
rmx
Exemplar
Exemplary
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc at}}
{{dsc end}}

[[de:cpp/string/basic string/operator at]]
[[es:cpp/string/basic string/operator at]]
[[fr:cpp/string/basic string/operator at]]
[[it:cpp/string/basic string/operator at]]
[[ja:cpp/string/basic string/operator at]]
[[pt:cpp/string/basic string/operator at]]
[[ru:cpp/string/basic string/operator at]]
[[zh:cpp/string/basic string/operator at]]</text>
      <sha1>dl5cuqyp7osmunj81nki23hun2eeeyb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator basic string view</title>
    <ns>0</ns>
    <id>15622</id>
    <revision>
      <id>91786</id>
      <parentid>90143</parentid>
      <timestamp>2017-03-31T19:57:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="649">{{cpp/string/basic_string/title | operator basic_string_view}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl |
operator std::basic_string_view&lt;CharT, Traits&gt;() const;
}}
{{dcl end}}

Returns a {{lc|std::basic_string_view}}, constructed as if by {{c|std::basic_string_view&lt;CharT, Traits&gt;(data(), size())}}

===Parameters===
(none)

===Return value===
A string view representing the entire contents of the string.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string_view/dsc constructor}}
{{dsc end}}

[[zh:cpp/string/basic_string/operator_basic_string_view]]</text>
      <sha1>2384s4ikjhuyhmcqa77myts6xozk4it</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator cmp</title>
    <ns>0</ns>
    <id>5485</id>
    <revision>
      <id>91487</id>
      <parentid>77071</parentid>
      <timestamp>2017-03-31T19:47:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4813">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::basic_string)&lt;/small&gt;}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl h | Compare two {{tt|basic_string}} objects}}
{{dcl | num=1 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator==( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, 
                 const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator!=( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, 
                 const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=3 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&lt;( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, 
                const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=4 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&lt;=( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, 
                 const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=5 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&gt;( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, 
                const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=6 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&gt;=( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, 
                 const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl h | Compare a {{tt|basic_string}} object and null-terminated array of {{tt|T}}}}
{{dcl | num=7 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator==( const CharT* lhs, const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=7 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator==( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, const CharT* rhs );
}}
{{dcl | num=8 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator!=( const CharT* lhs, const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=8 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator!=( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, const CharT* rhs );
}}
{{dcl | num=9 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&lt;( const CharT* lhs, const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=9 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&lt;( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs,  const CharT* rhs );
}}
{{dcl | num=10 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&lt;=( const CharT* lhs, const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=10 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&lt;=( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, const CharT* rhs );
}}
{{dcl | num=11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&gt;( const CharT* lhs, const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&gt;( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, const CharT* rhs );
}}
{{dcl | num=12 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&gt;=( const CharT* lhs, const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=12 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
bool operator&gt;=( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs, const CharT* rhs );
}}
{{dcl end}}

Compares the contents of a string with another string or a null-terminated array of {{tt|CharT}}.

All comparisons are done via the {{lc|compare()}} member function (which itself is defined in terms of {{tt|Traits::compare()}}):

* Two strings are equal if both the size of {{tt|lhs}} and {{tt|rhs}} are equal and each character in {{tt|lhs}} has equivalent character in {{tt|rhs}} at the same position.

* The ordering comparisons are done lexicographically -- the comparison is performed by a function equivalent to {{lc|std::lexicographical_compare}}.

@1-6@ Compares two {{tt|basic_string}} objects.

@7-12@ Compares a {{tt|basic_string}} object and a null-terminated array of {{tt|CharT}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | strings whose contents to compare}}
{{par end}} 

===Return value===
{{c|true}} if the corresponding comparison holds, {{c|false}} otherwise.

===Exceptions===
@1-6@ {{rev begin}}
{{rev | until=c++14 | (none)}}
{{rev | since=c++14 | {{unreviewed noexcept}}}}
{{rev end}}

@7-12@ (none)

===Complexity===
Linear in the size of the strings.

[[de:cpp/string/basic string/operator cmp]]
[[es:cpp/string/basic string/operator cmp]]
[[fr:cpp/string/basic string/operator cmp]]
[[it:cpp/string/basic string/operator cmp]]
[[ja:cpp/string/basic string/operator cmp]]
[[pl:cpp/string/basic string/operator cmp]]
[[pt:cpp/string/basic string/operator cmp]]
[[ru:cpp/string/basic string/operator cmp]]
[[zh:cpp/string/basic string/operator cmp]]</text>
      <sha1>qkm9bfpk836oe9sw5t5acaybl2lg34q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator ltltgtgt</title>
    <ns>0</ns>
    <id>5523</id>
    <revision>
      <id>85604</id>
      <parentid>72359</parentid>
      <timestamp>2016-04-26T16:08:16Z</timestamp>
      <contributor>
        <username>Pezo</username>
        <id>5261</id>
      </contributor>
      <minor/>
      <comment>Fix grammar</comment>
      <text xml:space="preserve" bytes="3656">{{title|operator&lt;&lt;,&gt;&gt;{{small|(std::basic_string)}}}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 |
template &lt;class CharT, class Traits, class Allocator&gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp; 
    operator&lt;&lt;(std::basic_ostream&lt;CharT, Traits&gt;&amp; os, 
               const std::basic_string&lt;CharT, Traits, Allocator&gt;&amp; str);
}}
{{dcl | num=2 |
template &lt;class CharT, class Traits, class Allocator&gt;
std::basic_istream&lt;CharT, Traits&gt;&amp; 
    operator&gt;&gt;(std::basic_istream&lt;CharT, Traits&gt;&amp; is, 
               std::basic_string&lt;CharT, Traits, Allocator&gt;&amp; str);
}}
{{dcl end}}

1) Behaves as a {{concept|FormattedOutputFunction}}. After constructing and checking the sentry object, determines the output format padding as follows:
:a) If {{tt|str.size()}} is not less than {{tt|os.width()}}, uses the range {{tt|[str.begin(), str.end())}} as-is
:b) Otherwise, if {{c|(os.flags() &amp; ios_base::adjustfield) {{==}} ios_base::left}}, places {{tt|os.width()-str.size()}} copies of the {{tt|os.fill()}} character after the character sequence
:c) Otherwise, places {{tt|os.width()-str.size()}} copies of the {{tt|os.fill()}} character before the character sequence

Then stores each character from the resulting sequence (the contents of {{tt|str}} plus padding) to the output stream {{tt|os}} as if by calling {{c|os.rdbuf()-&gt;sputn(seq, n)}}, where {{c|1=n=std::max(os.width(), str.size())}}

Finally, calls {{c|os.width(0)}} to cancel the effects of {{lc|std::setw}}, if any.

2) Behaves as a {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, first clears {{tt|str}} with {{c|str.erase()}}, then reads characters from {{tt|is}} and appends them to {{tt|str}} as if by {{c|str.append(1, c)}}, until one of the following conditions becomes true:

* {{tt|N}} characters are read, where {{tt|N}} is {{tt|is.width()}} if {{tt|is.width() &gt; 0}}, otherwise {{tt|N}} is {{tt|str.max_size()}}
* the end-of-file condition occurs in the stream {{tt|is}}
* {{c|std::isspace(c,is.getloc())}} is true for the next character {{tt|c}} in {{tt|is}} (this whitespace character remains in the input stream).

If no characters are extracted then {{c|std::ios::failbit}} is set on {{tt|is}}, which may throw {{lc|std::ios_base::failure}}.

Finally, calls {{c|os.width(0)}} to cancel the effects of {{lc|std::setw}}, if any. 

===Exceptions===
1) may throw {{lc|std::ios_base::failure}} if an exception is thrown during output.

2) may throw {{lc|std::ios_base::failure}} if no characters are extracted from {{tt|is}} (e.g the stream is at end of file, or consists of whitespace only), or if an exception is thrown during input.

===Parameters===
{{par begin}}
{{par | os | a character output stream}}
{{par | is | a character input stream}}
{{par | str | the string to be inserted or extracted}}
{{par end}}

===Return value===
1) {{tt|os}}

2) {{tt|is}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
 
int main()
{
    std::string greeting = &quot;Hello, whirled!&quot;;
    std::istringstream is(greeting);
    std::string hello_comma;
    is &gt;&gt; hello_comma;
    std::cout &lt;&lt; greeting &lt;&lt; '\n' &lt;&lt; hello_comma &lt;&lt; '\n';
}
 | output=
Hello, whirled!
Hello,
}}

[[de:cpp/string/basic string/operator ltltgtgt]]
[[es:cpp/string/basic string/operator ltltgtgt]]
[[fr:cpp/string/basic string/operator ltltgtgt]]
[[it:cpp/string/basic string/operator ltltgtgt]]
[[ja:cpp/string/basic string/operator ltltgtgt]]
[[pt:cpp/string/basic string/operator ltltgtgt]]
[[ru:cpp/string/basic string/operator ltltgtgt]]
[[zh:cpp/string/basic string/operator ltltgtgt]]</text>
      <sha1>g6udube8pm3f0jtzcqxnbedc3zgqpjk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator&quot;&quot;s</title>
    <ns>0</ns>
    <id>12914</id>
    <revision>
      <id>87203</id>
      <parentid>87145</parentid>
      <timestamp>2016-08-02T20:33:02Z</timestamp>
      <contributor>
        <ip>82.37.147.120</ip>
      </contributor>
      <text xml:space="preserve" bytes="2340">{{cpp/title|n=literals::string_literals::|operator&quot;&quot;s }}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 | since=c++14 | 1=
string operator &quot;&quot; s(const char *str, std::size_t len);
}}
{{dcl | num=2 | since=c++14 | 1=
u16string operator &quot;&quot; s(const char16_t *str, std::size_t len);
}}
{{dcl | num=3 | since=c++14 | 1=
u32string operator &quot;&quot; s(const char32_t *str, std::size_t len);
}}
{{dcl | num=4 | since=c++14 | 1=
wstring operator &quot;&quot; s(const wchar_t *str, std::size_t len);
}}
{{dcl end}}

Forms a string literal of the desired type.

@1@ returns {{c|std::string{str, len} }}
@2@ returns {{c|std::u16string{str, len} }}
@3@ returns {{c|std::u32string{str, len} }}
@4@ returns {{c|std::wstring{str, len} }}

===Parameters===
{{par begin}}
{{par | str | pointer to the beginning of the raw character array literal}}
{{par | len | length of the raw character array literal}}
{{par end}}

===Return value===
The string literal.

===Notes===
These operators are declared in the namespace {{tt|std::literals::string_literals}}, where both {{tt|literals}} and {{tt|string_literals}} are inline namespaces. Access to these operators can be gained with {{c|using namespace std::literals}}, {{c|using namespace std::string_literals}}, and {{c|using namespace std::literals::string_literals}}.

{{lc|std::chrono::duration}} also defines {{tt|operator&quot;&quot;s}}, to represent literal seconds, but it is an arithmetic literal: {{c|10.0s}} and {{c|10s}} is ten seconds, but {{c|&quot;10&quot;s}} is a string.

===Example===
{{example
| code=
#include &lt;string&gt;
#include &lt;iostream&gt;

int main()
{
    using namespace std::string_literals;

    std::string s1 = &quot;abc\0\0def&quot;;
    std::string s2 = &quot;abc\0\0def&quot;s;
    std::cout &lt;&lt; &quot;s1: &quot; &lt;&lt; s1.size() &lt;&lt; &quot; \&quot;&quot; &lt;&lt; s1 &lt;&lt; &quot;\&quot;\n&quot;;
    std::cout &lt;&lt; &quot;s2: &quot; &lt;&lt; s2.size() &lt;&lt; &quot; \&quot;&quot; &lt;&lt; s2 &lt;&lt; &quot;\&quot;\n&quot;;
}
| p=true
| output= 
s1: 3 &quot;abc&quot;
s2: 8 &quot;abc^@^@def&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc constructor}}
{{dsc end}}

[[de:cpp/string/basic string/operator&quot;&quot;s]]
[[es:cpp/string/basic string/operator&quot;&quot;s]]
[[fr:cpp/string/basic string/operator&quot;&quot;s]]
[[it:cpp/string/basic string/operator&quot;&quot;s]]
[[ja:cpp/string/basic string/operator&quot;&quot;s]]
[[pt:cpp/string/basic string/operator&quot;&quot;s]]
[[ru:cpp/string/basic string/operator&quot;&quot;s]]
[[zh:cpp/string/basic string/operator&quot;&quot;s]]</text>
      <sha1>liuo95btslw7sc7j0n3o176c1oydarn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator+</title>
    <ns>0</ns>
    <id>5077</id>
    <revision>
      <id>62946</id>
      <parentid>58927</parentid>
      <timestamp>2013-07-01T23:47:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="4512">{{cpp/title | operator+{{dsc small|(std::basic_string)}}}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs,
                   const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( const CharT* lhs,
                   const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=3 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( CharT lhs,
                   const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=4 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs,
                   const CharT* rhs );
}}
{{dcl | num=5 | 1=
template&lt;class CharT, class Traits, class Alloc&gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs,
                   CharT rhs );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; lhs,
                   const basic_string&lt;CharT,Traits,Alloc&gt;&amp; rhs );
}}
{{dcl | num=7 | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( const basic_string&lt;CharT,Traits,Alloc&gt;&amp; lhs,
                   basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; rhs );
}}
{{dcl | num=8 | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; lhs,
                   basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; rhs );
}}
{{dcl | num=9 | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+(const CharT* lhs,
                  basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; rhs );
}}
{{dcl | num=10 | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( CharT lhs,
                   basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; rhs );
}}
{{dcl | num=11 | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; lhs,
                   const CharT* rhs );
}}
{{dcl | num=12 | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
    basic_string&lt;CharT,Traits,Alloc&gt;
        operator+( basic_string&lt;CharT,Traits,Alloc&gt;&amp;&amp; lhs,
                   CharT rhs );
}}
{{dcl end}}

Returns a string containing characters from {{tt|lhs}} followed by the characters from {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs | string, character, or pointer to the first character in a null-terminated array }}
{{par | rhs | string, character, or pointer to the first character in a null-terminated array }}
{{par end}} 

===Return value===

1) {{c|basic_string&lt;CharT,Traits,Alloc&gt;(lhs).append(rhs)}}

2) {{c|basic_string&lt;CharT,Traits,Alloc&gt;(lhs) + rhs}}

3) {{c|basic_string&lt;CharT,Traits,Alloc&gt;(1,lhs) + rhs}}

4) {{c|lhs + basic_string&lt;CharT,Traits,Alloc&gt;(rhs)}}

5) {{c|lhs + basic_string&lt;CharT,Traits,Alloc&gt;(1,rhs)}}

6) {{c|std::move(lhs.append(rhs))}}

7) {{c|std::move(rhs.insert(0, lhs))}}

8) {{c|std::move(lhs.append(rhs))}} or {{c|std::move(rhs.insert(0, lhs))}}

9) {{c|std::move(rhs.insert(0, lhs))}}

10) {{c|std::move(rhs.insert(0, 1, lhs))}}

11) {{c|std::move(lhs.append(rhs))}}

12) {{c|std::move(lhs.append(1, rhs))}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s1 = &quot;Hello&quot;;
    std::string s2 = &quot;world&quot;;
    std::cout &lt;&lt; s1 + ' ' + s2 + &quot;!\n&quot;;
}
 | output=
Hello world!
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc operator+{{=}}}}
{{dsc inc | cpp/string/basic_string/dsc append}}
{{dsc inc | cpp/string/basic_string/dsc insert}}
{{dsc end}}

[[de:cpp/string/basic string/operator+]]
[[es:cpp/string/basic string/operator+]]
[[fr:cpp/string/basic string/operator+]]
[[it:cpp/string/basic string/operator+]]
[[ja:cpp/string/basic string/operator+]]
[[pt:cpp/string/basic string/operator+]]
[[ru:cpp/string/basic string/operator+]]
[[zh:cpp/string/basic string/operator+]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator+=</title>
    <ns>0</ns>
    <id>1416</id>
    <revision>
      <id>86770</id>
      <parentid>83557</parentid>
      <timestamp>2016-07-12T21:46:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0254r2 (string_view overload)</comment>
      <text xml:space="preserve" bytes="2922">{{cpp/string/basic_string/title | operator+{{=}}}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
basic_string&amp; operator+=( const basic_string&amp; str );
}}
{{dcl | num=2 | 1=
basic_string&amp; operator+=( CharT ch );
}}
{{dcl | num=3 | 1=
basic_string&amp; operator+=( const CharT* s );
}}
{{dcl | num=4 | since=c++11 | 1=
basic_string&amp; operator+=( std::initializer_list&lt;CharT&gt; ilist );
}}
{{dcl | num=5 | since=c++17 | 1=
basic_string&amp; operator+=( std::basic_string_view&lt;CharT, Traits&gt; sv);
}}
{{dcl end}}

Appends additional characters to the string.

@1@ Appends string {{tt|str}}

@2@ Appends character {{tt|ch}}

@3@ Appends the null-terminated character string pointed to by {{tt|s}}. 

@4@ Appends characters in the initializer list {{tt|ilist}}.

@5@ Appends characters in the string view {{tt|sv}} as if by {{c|append(sv)}}

===Parameters===
{{par begin}}
{{par | str | string to append}}
{{par | ch | character value to append}}
{{par | s | pointer to a null-terminated character string to append}}
{{par | ilist | {{lc|std::initializer_list}} with the characters to append}}
{{par | sv | {{lc|std::basic_string_view}} with the characters to append}}
{{par end}} 

===Return value===
{{c|*this}}

===Complexity===
@1@ linear in size of {{tt|str}}

@2@ constant

@3@ linear in size of {{tt|s}}

@4@ linear in size of {{tt|ilist}}

===Exceptions===
{{rev inl|since=c++11|
If an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}

If the operation would result in {{tt|size() &gt; max_size()}}, throws {{lc|std::length_error}}.

===Notes===
Owing to [[cpp/language/implicit_cast|Implicit conversions]], {{c|1=operator+=}} might accept values of unwanted types.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;

int main()
{
   std::string str;
   str.reserve(50); //reserves sufficient storage space to avoid memory reallocation
   std::cout &lt;&lt; std::quoted(str) &lt;&lt; '\n'; //empty string

   str += &quot;This&quot;;
   std::cout &lt;&lt; std::quoted(str) &lt;&lt; '\n';

   str += std::string(&quot; is &quot;);
   std::cout &lt;&lt; std::quoted(str) &lt;&lt; '\n';

   str += 'a';
   std::cout &lt;&lt; std::quoted(str) &lt;&lt; '\n';

   str += {' ','s','t','r','i','n','g','.'};
   std::cout &lt;&lt; std::quoted(str) &lt;&lt; '\n';

   str += 76.85; // equivalent to str += static_cast&lt;char&gt;(76.85), might not be the intent
   std::cout &lt;&lt; std::quoted(str) &lt;&lt; '\n';
}

 | output=
&quot;&quot;
&quot;This&quot;
&quot;This is &quot;
&quot;This is a&quot;
&quot;This is a string.&quot;
&quot;This is a string.L&quot;
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc assign}}
{{dsc end}}

[[de:cpp/string/basic string/operator+=]]
[[es:cpp/string/basic string/operator+=]]
[[fr:cpp/string/basic string/operator+=]]
[[it:cpp/string/basic string/operator+=]]
[[ja:cpp/string/basic string/operator+=]]
[[pt:cpp/string/basic string/operator+=]]
[[ru:cpp/string/basic string/operator+=]]
[[zh:cpp/string/basic string/operator+=]]</text>
      <sha1>q85ipa4so6rk7uxpnxl92e09v87nycw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/operator=</title>
    <ns>0</ns>
    <id>1417</id>
    <revision>
      <id>91747</id>
      <parentid>86764</parentid>
      <timestamp>2017-03-31T19:56:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4299">{{cpp/string/basic_string/title | operator{{=}}}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
basic_string&amp; operator=( const basic_string&amp; str );
}}
{{dcl | num=2 | since=c++11 | 1=
basic_string&amp; operator=( basic_string&amp;&amp; str );
}}
{{dcl | num=3 | 1=
basic_string&amp; operator=( const CharT* s );
}}
{{dcl | num=4 | 1=
basic_string&amp; operator=( CharT ch );
}}
{{dcl | num=5 | since=c++11 | 1=
basic_string&amp; operator=( std::initializer_list&lt;CharT&gt; ilist );
}}
{{dcl | num=6 | since=c++17 | 1=
basic_string&amp; operator=( std::basic_string_view&lt;CharT, Traits&gt; sv);
}}
{{dcl end}}

Replaces the contents of the string.

@1@ Replaces the contents with a copy of {{tt|str}}. If {{tt|*this}} and {{tt|str}} are the same object, this function has no effect.

{{rev begin}}
{{rev|until=c++17|
@2@ Replaces the contents with those of {{tt|str}} using move semantics. Leaves {{tt|str}} in valid, but unspecified state. If {{tt|*this}} and {{tt|str}} are the same object, the function has no effect.
}}
{{rev|since=c++17|
@2@ Replaces the contents with those of {{tt|str}} using move semantics. {{tt|str}} is in a valid but unspecified state afterwards. If {{lc|std::allocator_traits&lt;Allocator&gt;::propagate_on_container_move_assignment()}} is {{c|true}}, the target allocator is replaced by a copy of the source allocator. If it is {{c|false}} and the source and the target allocators do not compare equal, the target cannot take ownership of the source memory and must assign each character individually, allocating additional memory using its own allocator as needed. Unlike other container move assignments, references, pointers, and iterators to {{tt|str}} may be invalidated.}}
{{rev end}}
@3@ Replaces the contents with those of null-terminated character string pointed to by {{tt|s}} as if by {{c|*this {{=}} basic_string(s)}}, which involves a call to {{c|Traits::length(s)}}.
@4@ Replaces the contents with character {{tt|ch}} as if by {{c|*this {{=}} basic_string(1,c)}}
@5@ Replaces the contents with those of the initializer list {{tt|ilist}} as if by {{c|*this {{=}} basic_string(ilist)}}
@6@ Replaces the contents with those of the string view {{tt|sv}} as if by {{c|assign(sv)}}

===Parameters===
{{par begin}}
{{par | ch | value to initialize characters of the string with}}
{{par | str | string to be used as source to initialize the string with}}
{{par | s | pointer to a null-terminated character string &lt;br&gt;to use as source to initialize the string with}}
{{par | init | {{lc|std::initializer_list}} to initialize the string with}}
{{par | sv | {{lc|std::basic_string_view}} to initialize the string with}}
{{par end}} 

===Return value===
{{c|*this}}

===Complexity===

1) linear in size of {{tt|str}}

2) linear in the size of {{tt|this}} (formally, each CharT has to be destroyed). If allocators do not compare equal and do not propagate, then also linear in the size of {{tt|str}} (copy must be made)

3) linear in size of {{tt|s}}

4) constant.

5) linear in size of {{tt|init}}

===Exceptions===
{{rev begin}}
{{rev|since=c++11|until=c++17|
@2@ {{unreviewed noexcept}}
}}
{{rev|since=c++17|
@2@ {{unreviewed noexcept|std::allocator_traits&lt;Allocator&gt;::propagate_on_container_move_assignment::value
 {{!!}} std::allocator_traits&lt;Allocator&gt;::is_always_equal::value}}
}}
{{rev end}}

If the operation would result in {{tt|size() &gt; max_size()}}, throws {{lc|std::length_error}}.
{{rev begin}}
{{rev|since=c++11|
If an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}
{{rev end}}
 
===Example===
{{example
 | code=
 | output=
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2063|std=C++11|before=non-normative note stated that swap is a valid implementation of move assignment|after=corrected to support allocators}}
{{dr list end}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc constructor}}
{{dsc inc | cpp/string/basic_string/dsc assign}}
{{dsc end}}

[[de:cpp/string/basic string/operator=]]
[[es:cpp/string/basic string/operator=]]
[[fr:cpp/string/basic string/operator=]]
[[it:cpp/string/basic string/operator=]]
[[ja:cpp/string/basic string/operator=]]
[[pt:cpp/string/basic string/operator=]]
[[ru:cpp/string/basic string/operator=]]
[[zh:cpp/string/basic string/operator=]]</text>
      <sha1>a4bpg3vtu1muuqnb5n4wof2uw9tplj9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/pop back</title>
    <ns>0</ns>
    <id>1419</id>
    <revision>
      <id>75326</id>
      <parentid>75325</parentid>
      <timestamp>2015-01-14T03:33:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>okay, gcc is working on it in PR 58338</comment>
      <text xml:space="preserve" bytes="842">{{cpp/string/basic_string/title | pop_back}}
{{cpp/string/basic_string/navbar}}
{{ddcl | since=c++11 |
void pop_back();
}}

Removes the last character from the string.

Equivalent to {{c|erase(size()-1, 1)}}, except the behavior is undefined if the string is empty.

===Parameters===
(none)

===Return value===
(none)

===Complexity===
Constant.

===Exceptions===
Does not throw

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc push_back}}
{{dsc inc | cpp/string/basic_string/dsc erase}}
{{dsc end}}

[[de:cpp/string/basic string/pop back]]
[[es:cpp/string/basic string/pop back]]
[[fr:cpp/string/basic string/pop back]]
[[it:cpp/string/basic string/pop back]]
[[ja:cpp/string/basic string/pop back]]
[[pt:cpp/string/basic string/pop back]]
[[ru:cpp/string/basic string/pop back]]
[[zh:cpp/string/basic string/pop back]]</text>
      <sha1>kwmeg7pu2f2x2vxek0qergov9kukwly</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/push back</title>
    <ns>0</ns>
    <id>1420</id>
    <revision>
      <id>66404</id>
      <parentid>58938</parentid>
      <timestamp>2013-11-19T19:57:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>exception guarantees per 21.4.1[string.require]</comment>
      <text xml:space="preserve" bytes="995">{{cpp/string/basic_string/title | push_back}}
{{cpp/string/basic_string/navbar}}
{{ddcl |
void push_back( CharT ch );
}}

Appends the given character {{tt|ch}} to the end of the string.

===Parameters===
{{par begin}}
{{par | ch | the character to append}}
{{par end}} 

===Return value===
(none)

===Complexity===
Amortized constant.

===Exceptions===
{{rev inl|since=c++11|
If an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}

If the operation would result in {{tt|size() &gt; max_size()}}, throws {{lc|std::length_error}}.

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc pop_back}}
{{dsc end}}

[[de:cpp/string/basic string/push back]]
[[es:cpp/string/basic string/push back]]
[[fr:cpp/string/basic string/push back]]
[[it:cpp/string/basic string/push back]]
[[ja:cpp/string/basic string/push back]]
[[pt:cpp/string/basic string/push back]]
[[ru:cpp/string/basic string/push back]]
[[zh:cpp/string/basic string/push back]]</text>
      <sha1>jg6e8hguccfavfrcfzuu6x507cbh4n8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/rbegin</title>
    <ns>0</ns>
    <id>1421</id>
    <revision>
      <id>91781</id>
      <parentid>85643</parentid>
      <timestamp>2017-03-31T19:57:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1447">{{cpp/string/basic_string/title | rbegin | crbegin}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl |
reverse_iterator rbegin();
}}
{{dcl |
const_reverse_iterator rbegin() const;
}}
{{dcl | since=c++11 |
const_reverse_iterator crbegin() const;
}}
{{dcl end}}

Returns a reverse iterator to the first character of the reversed string. It corresponds to the last character of the non-reversed string. 

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
reverse iterator to the first character

===Exceptions===
{{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;

int main()
{
    std::string s(&quot;Exemplar!&quot;);
    *s.rbegin() = 'y';
    std::cout &lt;&lt; s &lt;&lt; '\n'; // &quot;Exemplary&quot;
 
    std::string c;
    std::copy(s.crbegin(), s.crend(), std::back_inserter(c));
    std::cout &lt;&lt; c &lt;&lt; '\n'; // &quot;yralpmexE&quot;
}
| output=
Exemplary
yralpmexE
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc rend}}
{{dsc end}}

[[de:cpp/string/basic string/rbegin]]
[[es:cpp/string/basic string/rbegin]]
[[fr:cpp/string/basic string/rbegin]]
[[it:cpp/string/basic string/rbegin]]
[[ja:cpp/string/basic string/rbegin]]
[[pt:cpp/string/basic string/rbegin]]
[[ru:cpp/string/basic string/rbegin]]
[[zh:cpp/string/basic string/rbegin]]</text>
      <sha1>4zwcj99qcqasphdv5xykxtm2ccxuazd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/rend</title>
    <ns>0</ns>
    <id>1422</id>
    <revision>
      <id>91482</id>
      <parentid>85644</parentid>
      <timestamp>2017-03-31T19:46:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1760">{{cpp/string/basic_string/title | rend | crend}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | 
reverse_iterator rend();
}}
{{dcl |
const_reverse_iterator rend() const;
}}
{{dcl | since=c++11 |
const_reverse_iterator crend() const;
}}
{{dcl end}}

Returns a reverse iterator to the character following the last character of the reversed string. It corresponds to the character preceding the first character of the non-reversed string. This character acts as a placeholder, attempting to access it results in undefined behavior. 

{{image|range-rbegin-rend.svg}}

===Parameters===
(none)

===Return value===
reverse iterator to the character following the last character

===Exceptions===
{{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant

===Example===
{{example
| code=
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;

int main()
{
  std::string s(&quot;A man, a plan, a canal: Panama&quot;);
  {
    std::string c;
    std::copy(s.rbegin(), s.rend(), std::back_inserter(c));
    std::cout &lt;&lt; c &lt;&lt;'\n'; // &quot;amanaP :lanac a ,nalp a ,nam A&quot;
  }

  {
    std::string c;
    std::copy(s.crbegin(), s.crend(), std::back_inserter(c));
    std::cout &lt;&lt; c &lt;&lt;'\n'; // &quot;amanaP :lanac a ,nalp a ,nam A&quot;
  }
}
| output=
amanaP :lanac a ,nalp a ,nam A
amanaP :lanac a ,nalp a ,nam A
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc rbegin}}
{{dsc end}}

[[de:cpp/string/basic string/rend]]
[[es:cpp/string/basic string/rend]]
[[fr:cpp/string/basic string/rend]]
[[it:cpp/string/basic string/rend]]
[[ja:cpp/string/basic string/rend]]
[[pt:cpp/string/basic string/rend]]
[[ru:cpp/string/basic string/rend]]
[[zh:cpp/string/basic string/rend]]</text>
      <sha1>27jf29h21mq2a7tars1a9gyxvyz62gj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/replace</title>
    <ns>0</ns>
    <id>2713</id>
    <revision>
      <id>88880</id>
      <parentid>88871</parentid>
      <timestamp>2016-12-16T22:42:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>&gt;</comment>
      <text xml:space="preserve" bytes="5790">{{cpp/string/basic_string/title|replace}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
basic_string&amp; replace( size_type pos, size_type count,
                       const basic_string&amp; str );
}}
{{dcl | num=1 |
basic_string&amp; replace( const_iterator first, const_iterator last,
                       const basic_string&amp; str );
}}
{{dcl rev begin|num=2}}
{{dcl | until=c++14 |
basic_string&amp; replace( size_type pos, size_type count,
                       const basic_string&amp; str,
                       size_type pos2, size_type count2 );
}}
{{dcl | since=c++14 |
basic_string&amp; replace( size_type pos, size_type count,
                       const basic_string&amp; str,
                       size_type pos2, size_type count2 {{=}} npos );
}}
{{dcl rev end}}
{{dcl | num=3 |
template&lt; class InputIt &gt;
basic_string&amp; replace( const_iterator first, const_iterator last,
                       InputIt first2, InputIt last2 );
}}
{{dcl | num=4 |
basic_string&amp; replace( size_type pos, size_type count,
                       const CharT* cstr, size_type count2 );
}}
{{dcl | num=4 |
basic_string&amp; replace( const_iterator first, const_iterator last,
                       const CharT* cstr, size_type count2 );
}}
{{dcl | num=5 |
basic_string&amp; replace( size_type pos, size_type count,
                       const CharT* cstr );
}}
{{dcl | num=5 |
basic_string&amp; replace( const_iterator first, const_iterator last,
                       const CharT* cstr );
}}
{{dcl | num=6 |
basic_string&amp; replace( size_type pos, size_type count,
                       size_type count2, CharT ch );
}}
{{dcl | num=6 |
basic_string&amp; replace( const_iterator first, const_iterator last,
                       size_type count2, CharT ch );
}}
{{dcl | num=7 | since=c++11 |
basic_string&amp; replace( const_iterator first, const_iterator last, 
                       std::initializer_list&lt;CharT&gt; ilist );
}}
{{dcl | num=8 | since=c++17 |
basic_string&amp; replace( size_type pos, size_type count,
                       std::basic_string_view&lt;CharT, Traits&gt; sv );
}}
{{dcl | num=9 | since=c++17 |
basic_string&amp; replace( const_iterator first, const_iterator last,
                       std::basic_string_view&lt;CharT, Traits&gt; sv );
}}
{{dcl | num=10 | since=c++17 |1=
template &lt; class T &gt;
basic_string&amp; replace( size_type pos, size_type count, const T&amp; t,
                       size_type pos2, size_type count2 = npos );
}}
{{dcl end}}

Replaces the part of the string indicated by either {{tt|[pos, pos + count)}} or {{tt|[first, last)}} with a new string.

The new string can be one of:

@1@ string {{tt|str}};

@2@ substring {{tt|[pos2, pos2 + count2)}} of {{tt|str}}, except if {{c|1=count2==npos}} or if would extend past {{c|str.size()}}, {{tt|[pos2, str.size())}} is used.

@3@ characters in the range {{tt|[first2, last2)}}. This overload has the same effect as overload {{v|6}} if {{tt|InputIt}} is an integral type.

@4@ first {{tt|count2}} characters of the character string pointed to by {{tt|cstr}};

@5@ null-terminated character string pointed to by {{tt|cstr}};

@6@ {{tt|count2}} copies of character {{tt|ch}};

@7@ characters in the initializer list {{tt|ilist}};

@8@ characters in the string view {{tt|sv}} (equivalent to {{c|replace(pos, count, sv.data(), sv.size())}})

@9@ characters in the string view {{tt|sv}} (equivalent to {{c|replace(first - begin(), last - first, sv)}})

@10@ subview {{tt|[pos2, pos2 + count2)}} of a string view {{tt|sv}}, converted from {{tt|t}} as if by {{c|1=std::basic_string_view&lt;CharT, Traits&gt; sv = t;}}, except if {{c|1=count2==npos}} or if it would extend past {{c|sv.size()}}, {{tt|[pos2, sv.size())}} is used. {{cpp/enable_if|{{c|std::is_convertible_v&lt;const T&amp;, std::basic_string_view&lt;CharT, Traits&gt;&gt;}} is {{c|true}} and {{c|std::is_convertible_v&lt;const T&amp;, const CharT*&gt;}} is {{c|false}}}}.

===Parameters===
{{par begin}}
{{par | pos | start of the substring that is going to be replaced}}
{{par | count | length of the substring that is going to be replaced}}
{{par | first, last | range of characters that is going to be replaced}}
{{par | str | string to use for replacement}}
{{par | pos2 | start of the substring to replace with}}
{{par | count2 | number of characters to replace with}}
{{par | cstr | pointer to the character string to use for replacement}}
{{par | ch | character value to use for replacement}}
{{par | first2, last2 | range of characters to use for replacement}}
{{par | ilist | initializer list with the characters to use for replacement}}
{{par | sv | {{lc|std::basic_string_view}} with the characters to use for replacement}}
{{par | t | object (convertible to {{lc|std::basic_string_view}}) with the characters to use for replacement}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{lc|std::out_of_range}} if {{tt|pos &gt; length()}} or {{tt|pos2 &gt; str.length()}}

{{lc|std::length_error}} if the resulting string will exceed maximum possible string length ({{tt|{{lc|std::string::npos}} - 1}})

{{rev inl|since=c++11|
In any case, if an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string str(&quot;The quick brown fox jumps over the lazy dog.&quot;);
    
    str.replace(10, 5, &quot;red&quot;); // (5)
    
    str.replace(str.begin(), str.begin() + 3, 1, 'A'); // (6)
    
    std::cout &lt;&lt; str &lt;&lt; '\n';
}
 | output=
A quick red fox jumps over the lazy dog.
}}

[[de:cpp/string/basic string/replace]]
[[es:cpp/string/basic string/replace]]
[[fr:cpp/string/basic string/replace]]
[[it:cpp/string/basic string/replace]]
[[ja:cpp/string/basic string/replace]]
[[pt:cpp/string/basic string/replace]]
[[ru:cpp/string/basic string/replace]]
[[zh:cpp/string/basic string/replace]]</text>
      <sha1>awg0llqy8xys1xvoqf20f7k7t8oy7gs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/reserve</title>
    <ns>0</ns>
    <id>1423</id>
    <revision>
      <id>72361</id>
      <parentid>72358</parentid>
      <timestamp>2014-08-14T18:59:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+detail. this looked like it was written about vectors..</comment>
      <text xml:space="preserve" bytes="1910">{{cpp/string/basic_string/title | reserve}}
{{cpp/string/basic_string/navbar}}
{{ddcl | 
void reserve( size_type new_cap {{=}} 0 );
}}

Informs a {{tt|std::basic_string}} object of a planned change in size, so that it can manage the storage allocation appropriately.

* If {{tt|new_cap}} is greater than the current {{lc|capacity()}}, new storage is allocated, and {{lc|capacity()}} is made equal or greater than {{tt|new_cap}}.

* If {{tt|new_cap}} is less than the current {{lc|capacity()}}, this is a non-binding shrink request.

* If {{tt|new_cap}} is less than the current {{lc|size()}}, this is a non-binding shrink-to-fit request {{rev inl|since=c++11|equivalent to {{lc|shrink_to_fit()}}}}.

If a capacity change takes place, all iterators and references, including the past-the-end iterator, are invalidated. 

===Parameters===
{{par begin}}
{{par | new_cap | new capacity of the string }}
{{par end}}

===Return value===
(none)

===Exceptions===
Throws {{lc|std::length_error}} if {{tt|new_cap}} is greater than {{lc|max_size()}}

May throw any exceptions thrown by {{c|std::allocator_traits&lt;Allocator&gt;::allocate()}}, such as {{lc|std::bad_alloc}}.

===Complexity===
At most linear in the {{lc|size()}} of the string

===Example===
{{example
|code=
#include &lt;cassert&gt;
#include &lt;string&gt;

int main()
{
    std::string s;
    std::string::size_type new_capacity{ 100u };
    assert(new_capacity &gt; s.capacity());

    s.reserve(new_capacity);
    assert(new_capacity &lt;= s.capacity());
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc capacity}}
{{dsc end}}

[[de:cpp/string/basic string/reserve]]
[[es:cpp/string/basic string/reserve]]
[[fr:cpp/string/basic string/reserve]]
[[it:cpp/string/basic string/reserve]]
[[ja:cpp/string/basic string/reserve]]
[[pt:cpp/string/basic string/reserve]]
[[ru:cpp/string/basic string/reserve]]
[[zh:cpp/string/basic string/reserve]]</text>
      <sha1>kafn52ysun4hpa3923tmji47mp90tl9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/resize</title>
    <ns>0</ns>
    <id>1424</id>
    <revision>
      <id>72581</id>
      <parentid>72580</parentid>
      <timestamp>2014-09-05T01:04:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-endl +const</comment>
      <text xml:space="preserve" bytes="3033">{{cpp/string/basic_string/title | resize}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 |
void resize( size_type count );
}}
{{dcl | num=2 |
void resize( size_type count, CharT ch );
}}
{{dcl end}}

Resizes the string to contain {{tt|count}} characters.

If the current size is less than {{tt|count}}, additional characters are appended.

If the current size is greater than {{tt|count}}, the string is reduced to its first {{tt|count}} elements.

The first version initializes new characters to {{c|CharT()}}, the second version initializes new characters to {{tt|ch}}.

===Parameters===

{{par begin}}
{{par | count | new size of the string}}
{{par | ch | character to initialize the new characters with }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{lc|std::length_error}} if {{c|count &gt; max_size()}}.
Any exceptions thrown by corresponding {{tt|Allocator}}.

{{rev inl|since=c++11|
If an exception is thrown for any reason, this function has no effect (strong exception guarantee).}}

===Example===
{{example
| p=true
| code =
#include &lt;iostream&gt;
#include &lt;stdexcept&gt;
 
int main()
{
    std::cout &lt;&lt; &quot;Basic functionality:\n&quot;;
    const unsigned  desired_length(8);
    std::string     long_string( &quot;Where is the end?&quot; );
    std::string     short_string( &quot;Ha&quot; );
    
    // Shorten
    std::cout &lt;&lt; &quot;Before: \&quot;&quot; &lt;&lt; long_string &lt;&lt; &quot;\&quot;\n&quot;;
    long_string.resize( desired_length );
    std::cout &lt;&lt; &quot;After: \&quot;&quot; &lt;&lt; long_string &lt;&lt;  &quot;\&quot;\n&quot;;
    
    // Lengthen
    std::cout &lt;&lt; &quot;Before: \&quot;&quot; &lt;&lt; short_string &lt;&lt;  &quot;\&quot;\n&quot;;
    short_string.resize( desired_length, 'a' );
    std::cout &lt;&lt; &quot;After: \&quot;&quot; &lt;&lt; short_string &lt;&lt;  &quot;\&quot;\n&quot;;
    
    std::cout  &lt;&lt; &quot;\nErrors:\n&quot;;
    {
        std::string s;    

        try {
            // size is OK, no length_error
            // (may throw bad_alloc)
            s.resize(s.max_size() - 1, 'x');
        } catch (const std::bad_alloc&amp;) {
            std::cout &lt;&lt; &quot;1. bad alloc\n&quot;;
        }
     
        try {
            // size is OK, no length_error
            // (may throw bad_alloc)
            s.resize(s.max_size(), 'x');
        } catch (const std::bad_alloc&amp; exc) {
            std::cout &lt;&lt; &quot;2. bad alloc\n&quot;;
        }
     
        try {
            // size is BAD, throw length_error
            s.resize(s.max_size() + 1, 'x');
        } catch (const std::length_error&amp;) {
            std::cout &lt;&lt; &quot;3. length error\n&quot;;
        }
     }
}
| output=
Basic functionality:
Before: &quot;Where is the end?&quot;
After: &quot;Where is&quot;
Before: &quot;Ha&quot;
After: &quot;Haaaaaaa&quot;

Errors:
1. bad alloc
2. bad alloc
3. length error
}}

===Complexity===
Linear in the size of the string.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc size}}
{{dsc end}}

[[de:cpp/string/basic string/resize]]
[[es:cpp/string/basic string/resize]]
[[fr:cpp/string/basic string/resize]]
[[it:cpp/string/basic string/resize]]
[[ja:cpp/string/basic string/resize]]
[[pt:cpp/string/basic string/resize]]
[[ru:cpp/string/basic string/resize]]
[[zh:cpp/string/basic string/resize]]</text>
      <sha1>3lqb8eubwlxmenwmbbt49p72omthpc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/rfind</title>
    <ns>0</ns>
    <id>1425</id>
    <revision>
      <id>91673</id>
      <parentid>86851</parentid>
      <timestamp>2017-03-31T19:54:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4415">{{cpp/string/basic_string/title | rfind}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
size_type rfind( const basic_string&amp; str, size_type pos = npos ) const;
}}
{{dcl | num=2 | 1=
size_type rfind( const CharT* s, size_type pos, size_type count ) const;
}}
{{dcl | num=3 | 1=
size_type rfind( const CharT* s, size_type pos = npos ) const;
}}
{{dcl | num=4 | 1=
size_type rfind( CharT ch, size_type pos = npos ) const;
}}
{{dcl | num=5 |since=c++17 | 1=
size_type rfind( std::basic_string_view&lt;CharT, Traits&gt; sv,
                 size_type pos = npos) const;
}}
{{dcl end}}

Finds the last substring equal to the given character sequence. Search begins at {{tt|pos}}, i.e. the found substring must not begin in a position following {{tt|pos}}. If {{lc|npos}} or any value not smaller than {{lc|size()}}-1 is passed as {{tt|pos}}, whole string will be searched.

@1@ Finds the last substring equal to {{tt|str}} (equality is checked by calling [[cpp/string/char_traits/cmp|Traits::eq]]){{rev inl|since=c++17|, as if by {{c|rfind(std::basic_string_view&lt;CharT, Traits&gt;(str), pos)}}}}

@2@ Finds the last substring equal to the first {{tt|count}} characters of the character string pointed to by {{tt|s}}. {{tt|s}} can include null characters. Equivalent to {{rev inl|until=c++17|{{c|rfind(std::basic_string(s, count), pos)}}}}{{rev inl|since=c++17|{{c|rfind(std::basic_string_view&lt;CharT, Traits&gt;(s, count), pos)}}}}

@3@ Finds the last substring equal to the character string pointed to by {{tt|s}}. The length of the string is determined by the first null character. Equivalent to {{rev inl|until=c++17|{{c|rfind(std::basic_string(s), pos)}}}}{{rev inl|since=c++17|{{c|rfind(std::basic_string_view&lt;CharT, Traits&gt;(s), pos)}}}}

@4@ Finds the last character {{tt|ch}}. Equivalent to {{c|rfind(std::basic_string(1,c),pos)}}

@5@ Finds the last substring equal to the contents of {{tt|sv}}

===Parameters===
{{par begin}}
{{par | str | string to search for}}
{{par | pos | position at which to begin searching}}
{{par | count | length of substring to search for}}
{{par | s | pointer to a character string to search for}}
{{par | ch | character to search for}}
{{par | sv | {{lc|std::basic_string_view}} to search for}}
{{par end}} 

===Return value===
Position of the first character of the found substring or {{lc|npos}} if no such substring is found. Note that this is an offset from the start of the string, not the end.

If {{lc|size()}} is zero, {{lc|npos}} is always returned.

If searching for an empty string ({{c|str.size()}}, {{c|count}}, or {{c|strlen(s)}} is zero) returns {{tt|pos}} (the empty string is found immediately) unless {{c|pos {{==}} npos}}, in which case returns {{c|size()}}.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 |
@1-4@ (none)
}}
{{rev | since=c++11 | until=c++14 |
@1,4@ {{unreviewed noexcept}}
@2,3@ (none)
}}
{{rev | since=c++14 |
@1@ {{unreviewed noexcept}}
@2,3,4@ (none)
}}
{{rev|since=c++17|
@5@ {{unreviewed noexcept}}
}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;

void print(std::string::size_type n, std::string const &amp;s)
{
    if (n == std::string::npos) {
        std::cout &lt;&lt; &quot;not found\n&quot;;
    } else {
        std::cout &lt;&lt; &quot;found: \&quot;&quot; &lt;&lt; s.substr(n) &lt;&lt; &quot;\&quot; at &quot; &lt;&lt; n &lt;&lt; '\n';
    }
}

int main()
{
    std::string::size_type n;
    std::string const s = &quot;This is a string&quot;;

    // search backwards from end of string
    n = s.rfind(&quot;is&quot;);
    print(n, s);
    // search backwards from position 4
    n = s.rfind(&quot;is&quot;, 4);
    print(n, s);
    // find a single character
    n = s.rfind('s');
    print(n, s);
    // find a single character
    n = s.rfind('q');
    print(n, s);
}
 | output=
found: &quot;is a string&quot; at 5
found: &quot;is is a string&quot; at 2
found: &quot;string&quot; at 10
not found
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/basic_string/dsc find_first_of}}
{{dsc inc | cpp/string/basic_string/dsc find_first_not_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_of}}
{{dsc inc | cpp/string/basic_string/dsc find_last_not_of}}
{{dsc end}}

[[de:cpp/string/basic string/rfind]]
[[es:cpp/string/basic string/rfind]]
[[fr:cpp/string/basic string/rfind]]
[[it:cpp/string/basic string/rfind]]
[[ja:cpp/string/basic string/rfind]]
[[pt:cpp/string/basic string/rfind]]
[[ru:cpp/string/basic string/rfind]]
[[zh:cpp/string/basic string/rfind]]</text>
      <sha1>or0fyzhetbout6gt1ucbaraaoscalh0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/shrink to fit</title>
    <ns>0</ns>
    <id>1426</id>
    <revision>
      <id>88357</id>
      <parentid>63427</parentid>
      <timestamp>2016-11-17T04:49:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1607">{{cpp/string/basic_string/title | shrink_to_fit}}
{{cpp/string/basic_string/navbar}}
{{ddcl | since=c++11 |
void shrink_to_fit();
}}
Requests the removal of unused capacity.

It is a non-binding request to reduce {{lc|capacity()}} to {{lc|size()}}. It depends on the implementation if the request is fulfilled. 

If reallocation takes place, all pointers, references, and iterators are invalidated.

===Parameters===
(none)

===Return value===
(none)

===Complexity===
Constant

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    std::string s;
    std::cout &lt;&lt; &quot;Default-constructed capacity is &quot; &lt;&lt; s.capacity() &lt;&lt; '\n';
    s.resize(100);
    std::cout &lt;&lt; &quot;Capacity of a 100-element string is &quot; &lt;&lt; s.capacity() &lt;&lt; '\n';
    s.clear();
    std::cout &lt;&lt; &quot;Capacity after clear() is &quot; &lt;&lt; s.capacity() &lt;&lt; '\n';
    s.shrink_to_fit();
    std::cout &lt;&lt; &quot;Capacity after shrink_to_fit() is &quot; &lt;&lt; s.capacity() &lt;&lt; '\n';
}
| output=
Default-constructed capacity is 0
Capacity of a 100-element string is 100
Capacity after clear() is 100
Capacity after shrink_to_fit() is 0
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc size}}
{{dsc inc | cpp/string/basic_string/dsc capacity}}
{{dsc end}}

[[de:cpp/string/basic string/shrink to fit]]
[[es:cpp/string/basic string/shrink to fit]]
[[fr:cpp/string/basic string/shrink to fit]]
[[it:cpp/string/basic string/shrink to fit]]
[[ja:cpp/string/basic string/shrink to fit]]
[[pt:cpp/string/basic string/shrink to fit]]
[[ru:cpp/string/basic string/shrink to fit]]
[[zh:cpp/string/basic string/shrink to fit]]</text>
      <sha1>g5x39h9iv5anu0j4xa8rbbkwr3bcrot</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/size</title>
    <ns>0</ns>
    <id>1427</id>
    <revision>
      <id>91810</id>
      <parentid>70325</parentid>
      <timestamp>2017-03-31T19:58:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1450">{{cpp/string/basic_string/title | size | length}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl |
size_type size() const;
}}
{{dcl |
size_type length() const;
}}
{{dcl end}}

Returns the number of {{tt|CharT}} elements in the string, i.e. {{c|std::distance(begin(), end())}}. 

===Parameters===
(none)

===Return value===
The number of {{tt|CharT}} elements in the string.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}} }}
{{rev end}}

===Complexity===
Constant

===Notes===
For {{lc|std::string}}, the elements are bytes (objects of type char), which are not the same as  characters if a multibyte encoding such as UTF-8 is used.

===Example===
{{example
| code=
#include &lt;cassert&gt;
#include &lt;iterator&gt;
#include &lt;string&gt;

int main()
{
    std::string s(&quot;Exemplar&quot;);
    assert(8 == s.size());
    assert(s.size() == s.length());
    assert(s.size() == static_cast&lt;std::string::size_type&gt;(
        std::distance(s.begin(), s.end())));
}
| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc empty}}
{{dsc inc | cpp/string/basic_string/dsc max_size}}
{{dsc end}}

[[de:cpp/string/basic string/size]]
[[es:cpp/string/basic string/size]]
[[fr:cpp/string/basic string/size]]
[[it:cpp/string/basic string/size]]
[[ja:cpp/string/basic string/size]]
[[pt:cpp/string/basic string/size]]
[[ru:cpp/string/basic string/size]]
[[zh:cpp/string/basic string/size]]</text>
      <sha1>eal4biiw9d1fvghv85ib0af0bs0zm8o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/stof</title>
    <ns>0</ns>
    <id>2149</id>
    <revision>
      <id>88274</id>
      <parentid>81251</parentid>
      <timestamp>2016-11-15T15:50:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso from_chars</comment>
      <text xml:space="preserve" bytes="2501">{{cpp/title| stof | stod | stold}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 | since=c++11 | 1=
float       stof( const std::string&amp; str, std::size_t* pos = 0 );
float       stof( const std::wstring&amp; str, std::size_t* pos = 0 );
}}
{{dcl | num=2 | since=c++11 | 1=
double      stod( const std::string&amp; str, std::size_t* pos = 0 );
double      stod( const std::wstring&amp; str, std::size_t* pos = 0 );
}}
{{dcl | num=3 | since=c++11 | 1=
long double stold( const std::string&amp; str, std::size_t* pos = 0 );
long double stold( const std::wstring&amp; str, std::size_t* pos = 0 );
}}
{{dcl end}}

Interprets a floating point value in a string {{tt|str}}. 

{{rev begin}}
{{rev|until=c++17|
@1@ calls {{c|std::strtod(str.c_str(), &amp;ptr)}} or {{c|std::wcstod(str.c_str(), &amp;ptr)}}
}}
{{rev|since=c++17|
@1@ calls {{c|std::strtof(str.c_str(), &amp;ptr)}} or {{c|std::wcstof(str.c_str(), &amp;ptr)}}
}}
{{rev end}}
@2@ calls {{c|std::strtod(str.c_str(), &amp;ptr)}} or {{c|std::wcstod(str.c_str(), &amp;ptr)}}
@3@ calls {{c|std::strtold(str.c_str(), &amp;ptr)}} or {{c|std::wcstold(str.c_str(), &amp;ptr)}}

{{cpp/string/cvt str2float}}

If {{tt|pos}} is not a null pointer, then a pointer {{tt|ptr}}, internal to the conversion functions, will receive the address of the first unconverted character in {{c|str.c_str()}}, and the index of that character will be calculated and stored in {{tt|*pos}}, giving the number of characters that were processed by the conversion.

===Parameters===
{{par begin}}
{{par | str | the string to convert}}
{{par | pos | address of an integer to store the number of characters processed }}
{{par end}}

===Return value===
The string converted to the specified floating point type.

===Exceptions===
{{lc|std::invalid_argument}} if no conversion could be performed

{{lc|std::out_of_range}} if the converted value would fall out of the range of the result type or if the underlying function ({{rev inl|since=c++17|{{tt|strtof}}, }}{{tt|strtod}} or {{tt|strtold}}) sets {{c|errno}} to {{c|ERANGE}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc stol}}
{{dsc inc | cpp/string/basic_string/dsc stoul}}
{{dsc inc | cpp/utility/dsc from_chars}} 
{{dsc end}}

[[de:cpp/string/basic string/stof]]
[[es:cpp/string/basic string/stof]]
[[fr:cpp/string/basic string/stof]]
[[it:cpp/string/basic string/stof]]
[[ja:cpp/string/basic string/stof]]
[[pt:cpp/string/basic string/stof]]
[[ru:cpp/string/basic string/stof]]
[[zh:cpp/string/basic string/stof]]</text>
      <sha1>laaystak4j8hl746hf263tad7nbqfer</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/stol</title>
    <ns>0</ns>
    <id>2148</id>
    <revision>
      <id>88273</id>
      <parentid>81250</parentid>
      <timestamp>2016-11-15T15:50:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso from_chars</comment>
      <text xml:space="preserve" bytes="3373">{{cpp/title| stoi | stol | stoll}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 | since=c++11 | 1=
int       stoi( const std::string&amp; str, std::size_t* pos = 0, int base = 10 );
int       stoi( const std::wstring&amp; str, std::size_t* pos = 0, int base = 10 );
}}
{{dcl | num=2 | since=c++11 | 1=
long      stol( const std::string&amp; str, std::size_t* pos = 0, int base = 10 );
long      stol( const std::wstring&amp; str, std::size_t* pos = 0, int base = 10 );
}}
{{dcl | num=3 | since=c++11 | 1=
long long stoll( const std::string&amp; str, std::size_t* pos = 0, int base = 10 );
long long stoll( const std::wstring&amp; str, std::size_t* pos = 0, int base = 10 );
}}
{{dcl end}}

Interprets a signed integer value in the string {{tt|str}}.

@1@ calls {{c|std::strtol(str.c_str(), &amp;ptr, base)}} or {{c|std::wcstol(str.c_str(), &amp;ptr, base)}}
@2@ calls {{c|std::strtol(str.c_str(), &amp;ptr, base)}} or {{c|std::wcstol(str.c_str(), &amp;ptr, base)}}
@3@ calls {{c|std::strtoll(str.c_str(), &amp;ptr, base)}} or {{c|std::wcstoll(str.c_str(), &amp;ptr, base)}}

{{cpp/string/cvt str2int base | base=base}}

If {{tt|pos}} is not a null pointer, then a pointer {{tt|ptr}} - internal to the conversion functions - will receive the address of the first unconverted character in {{c|str.c_str()}}, and the index of that character will be calculated and stored in {{tt|*pos}}, giving the number of characters that were processed by the conversion.

===Parameters===
{{par begin}}
{{par | str | the string to convert}}
{{par | pos | address of an integer to store the number of characters processed}}
{{par | base | the number base}}
{{par end}}

===Return value===
The string converted to the specified signed integer type. 

===Exceptions===
* {{lc|std::invalid_argument}} if no conversion could be performed
* {{lc|std::out_of_range}} if the converted value would fall out of the range of the result type or if the underlying function (std::strtol or std::strtoll) sets {{c|errno}} to {{c|ERANGE}}.

===Example===
{{example|
 | code= 
#include &lt;iostream&gt;
#include &lt;string&gt;
 
int main()
{
    std::string str1 = &quot;45&quot;;
    std::string str2 = &quot;3.14159&quot;;
    std::string str3 = &quot;31337 with words&quot;;
    std::string str4 = &quot;words and 2&quot;;
    
    int myint1 = std::stoi(str1);
    int myint2 = std::stoi(str2);
    int myint3 = std::stoi(str3);
    // error: 'std::invalid_argument'
    // int myint4 = std::stoi(str4);
    
    std::cout &lt;&lt; &quot;std::stoi(\&quot;&quot; &lt;&lt; str1 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; myint1 &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;std::stoi(\&quot;&quot; &lt;&lt; str2 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; myint2 &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;std::stoi(\&quot;&quot; &lt;&lt; str3 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; myint3 &lt;&lt; '\n';
    //std::cout &lt;&lt; &quot;std::stoi(\&quot;&quot; &lt;&lt; str4 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; myint4 &lt;&lt; '\n';
}
 | output=
std::stoi(&quot;45&quot;) is 45
std::stoi(&quot;3.14159&quot;) is 3
std::stoi(&quot;31337 with words&quot;) is 31337
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc atoi}}
{{dsc inc | cpp/string/basic_string/dsc stoul}}
{{dsc inc | cpp/string/basic_string/dsc stof}}
{{dsc inc | cpp/string/basic_string/dsc to_string}}
{{dsc inc | cpp/utility/dsc from_chars}} 
{{dsc end}}

[[de:cpp/string/basic string/stol]]
[[es:cpp/string/basic string/stol]]
[[fr:cpp/string/basic string/stol]]
[[it:cpp/string/basic string/stol]]
[[ja:cpp/string/basic string/stol]]
[[pt:cpp/string/basic string/stol]]
[[ru:cpp/string/basic string/stol]]
[[zh:cpp/string/basic string/stol]]</text>
      <sha1>jpikdrwrnv7eh3qexql37pkbyqkfdu4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/stoul</title>
    <ns>0</ns>
    <id>2468</id>
    <revision>
      <id>81249</id>
      <parentid>81248</parentid>
      <timestamp>2015-10-08T13:46:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2193">{{cpp/title| stoul | stoull }}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 | since=c++11 | 1=
unsigned long      stoul( const std::string&amp; str, std::size_t* pos = 0, int base = 10 );
unsigned long      stoul( const std::wstring&amp; str, std::size_t* pos = 0, int base = 10 );
}}
{{dcl | num=2 | since=c++11 | 1=
unsigned long long stoull( const std::string&amp; str, std::size_t* pos = 0, int base = 10 );
unsigned long long stoull( const std::wstring&amp; str, std::size_t* pos = 0, int base = 10 );
}}
{{dcl end}}

Interprets an unsigned integer value in the string {{tt|str}}.

@1@ calls {{c|std::strtoul(str.c_str(), &amp;ptr, base)}} or {{c|std::wcstoul(str.c_str(), &amp;ptr, base)}}
@2@ calls {{c|std::strtoull(str.c_str(), &amp;ptr, base)}} or {{c|std::wcstoull(str.c_str(), &amp;ptr, base)}}

{{cpp/string/cvt str2int base | base=base | u=true}}

If {{tt|pos}} is not a null pointer, then a pointer {{tt|ptr}}, internal to the conversion functions, will receive the address of the first unconverted character in {{c|str.c_str()}}, and the index of that character will be calculated and stored in {{tt|*pos}}, giving the number of characters that were processed by the conversion.

===Parameters===
{{par begin}}
{{par | str | the string to convert}}
{{par | pos | address of an integer to store the number of characters processed}}
{{par | base | the number base}}
{{par end}}

===Return value===
The string converted to the specified unsigned integer type.

===Exceptions===
* {{lc|std::invalid_argument}} if no conversion could be performed
* {{lc|std::out_of_range}} if the converted value would fall out of the range of the result type or if the underlying function (std::strtoul or std::strtoull) sets {{c|errno}} to {{c|ERANGE}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc stol}}
{{dsc inc | cpp/string/basic_string/dsc stof}}
{{dsc end}}

[[de:cpp/string/basic string/stoul]]
[[es:cpp/string/basic string/stoul]]
[[fr:cpp/string/basic string/stoul]]
[[it:cpp/string/basic string/stoul]]
[[ja:cpp/string/basic string/stoul]]
[[pt:cpp/string/basic string/stoul]]
[[ru:cpp/string/basic string/stoul]]
[[zh:cpp/string/basic string/stoul]]</text>
      <sha1>pvkxlf8uxgpsgwue7ceny01x77d2ogj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/substr</title>
    <ns>0</ns>
    <id>1428</id>
    <revision>
      <id>92076</id>
      <parentid>92074</parentid>
      <timestamp>2017-04-04T12:38:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+comments in the example for the substr's decision tree. dropped one redundant line</comment>
      <text xml:space="preserve" bytes="2114">{{cpp/string/basic_string/title | substr}}
{{cpp/string/basic_string/navbar}}
{{ddcl | 1=
basic_string substr( size_type pos = 0,
                     size_type count = npos ) const;
}}

Returns a substring {{tt|[pos, pos+count)}}. If the requested substring extends past the end of the string, or if {{c|1=count == npos}}, the returned substring is {{tt|[pos, }}[[cpp/string/basic_string/size|{{tt|size()}}]]{{tt|)}}. 

===Parameters===
{{par begin}}
{{par | pos | position of the first character to include}}
{{par | count | length of the substring}}
{{par end}} 

===Return value===
String containing the substring {{tt|[pos, pos+count)}}.

===Exceptions===
{{lc|std::out_of_range}} if {{c|pos &gt;}}[[cpp/string/basic_string/size|{{tt| size()}}]]

===Complexity===
Linear in {{tt|count}}

===Example===
{{example
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::string a = &quot;0123456789abcdefghij&quot;;
 
    // count is npos, returns [pos, size())
    std::string sub1 = a.substr(10);
    std::cout &lt;&lt; sub1 &lt;&lt; '\n';
 
    // both pos and pos+count are within bounds, returns [pos, pos+count)
    std::string sub2 = a.substr(5, 3);
    std::cout &lt;&lt; sub2 &lt;&lt; '\n';

    // pos is within bounds, pos+count is not, returns [pos, size()) 
    std::string sub4 = a.substr(a.size()-3, 50);
    std::cout &lt;&lt; sub4 &lt;&lt; '\n';

    try {
        // pos is out of bounds, throws
        std::string sub5 = a.substr(a.size()+3, 50);
        std::cout &lt;&lt; sub5 &lt;&lt; '\n';
    } catch(const std::out_of_range&amp; e) {
        std::cout &lt;&lt; &quot;pos exceeds string size\n&quot;;
    }
}
 | output=
abcdefghij
567
hij
pos exceeds string size
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc copy}}
{{dsc inc | cpp/string/basic_string/dsc size}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc end}}

[[de:cpp/string/basic string/substr]]
[[es:cpp/string/basic string/substr]]
[[fr:cpp/string/basic string/substr]]
[[it:cpp/string/basic string/substr]]
[[ja:cpp/string/basic string/substr]]
[[pt:cpp/string/basic string/substr]]
[[ru:cpp/string/basic string/substr]]
[[zh:cpp/string/basic string/substr]]</text>
      <sha1>liuax5sr0pzf5x0wt0njjkk6tsb8byg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/swap</title>
    <ns>0</ns>
    <id>1429</id>
    <revision>
      <id>92123</id>
      <parentid>91513</parentid>
      <timestamp>2017-04-05T22:34:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="1471">{{cpp/string/basic_string/title | swap}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | until=c++17 | 
void swap( basic_string&amp; other );
}}
{{dcl | since=c++17 | 
void swap( basic_string&amp; other ) noexcept(/* see below */);
}}
{{dcl end}}

Exchanges the contents of the string with those of {{tt|other}}. All iterators and references may be invalidated.

===Parameters===
{{par begin}}
{{par | other | string to exchange the contents with}}
{{par end}}

===Return value===
(none)

{{rev begin}}
{{rev|since=c++17|
===Exceptions===
{{noexcept|std::allocator_traits&lt;Allocator&gt;::propagate_on_container_swap::value
{{!!}} std::allocator_traits&lt;Allocator&gt;::is_always_equal::value}}
}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;

int main() 
{
    std::string a = &quot;AAA&quot;;
    std::string b = &quot;BBB&quot;;

    std::cout &lt;&lt; &quot;before swap&quot; &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;a: &quot; &lt;&lt; a &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b: &quot; &lt;&lt; b &lt;&lt; '\n';

    a.swap(b);

    std::cout &lt;&lt; &quot;after swap&quot; &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;a: &quot; &lt;&lt; a &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b: &quot; &lt;&lt; b &lt;&lt; '\n';
}

 | output=
before swap
a: AAA
b: BBB
after swap
a: BBB
b: AAA
}}

===Complexity===
Constant.

[[de:cpp/string/basic string/swap]]
[[es:cpp/string/basic string/swap]]
[[fr:cpp/string/basic string/swap]]
[[it:cpp/string/basic string/swap]]
[[ja:cpp/string/basic string/swap]]
[[pt:cpp/string/basic string/swap]]
[[ru:cpp/string/basic string/swap]]
[[zh:cpp/string/basic string/swap]]</text>
      <sha1>ipbui81vhu3opkh4tnzkvseth96fwa9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/swap2</title>
    <ns>0</ns>
    <id>5486</id>
    <revision>
      <id>92122</id>
      <parentid>91655</parentid>
      <timestamp>2017-04-05T22:25:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="1325">{{cpp/title | swap&lt;small&gt;(std::basic_string)&lt;/small&gt;}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl | until=c++17 |
template&lt; class CharT, class Traits, class Alloc &gt;
void swap( std::basic_string&lt;CharT, Traits, Alloc&gt; &amp;lhs,
           std::basic_string&lt;CharT, Traits, Alloc&gt; &amp;rhs );
}}
{{dcl | since=c++17 |
template&lt; class CharT, class Traits, class Alloc &gt;
void swap( std::basic_string&lt;CharT, Traits, Alloc&gt; &amp;lhs,
           std::basic_string&lt;CharT, Traits, Alloc&gt; &amp;rhs ) noexcept(/* see below */);
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{lc|std::basic_string}}. Swaps the contents of {{tt|lhs}} and {{tt|rhs}}. Equivalent to {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | strings whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Complexity===
Constant.

{{rev begin}}
{{rev |since=c++17|
===Exceptions===
{{noexcept|noexcept(lhs.swap(rhs))}}
}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc swap}}
{{dsc end}}

[[de:cpp/string/basic string/swap2]]
[[es:cpp/string/basic string/swap2]]
[[fr:cpp/string/basic string/swap2]]
[[it:cpp/string/basic string/swap2]]
[[ja:cpp/string/basic string/swap2]]
[[pt:cpp/string/basic string/swap2]]
[[ru:cpp/string/basic string/swap2]]
[[zh:cpp/string/basic string/swap2]]</text>
      <sha1>i89s28vwbd92day6pffj45krhuau0ao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/to string</title>
    <ns>0</ns>
    <id>2477</id>
    <revision>
      <id>88271</id>
      <parentid>86093</parentid>
      <timestamp>2016-11-15T15:48:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso to_chars</comment>
      <text xml:space="preserve" bytes="4477">{{cpp/title|to_string}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 | since=c++11 |
std::string to_string( int value );
}}
{{dcl | num=2 | since=c++11 |
std::string to_string( long value );
}}
{{dcl | num=3 | since=c++11 |
std::string to_string( long long value );
}}
{{dcl | num=4 | since=c++11 |
std::string to_string( unsigned value );
}}
{{dcl | num=5 | since=c++11 |
std::string to_string( unsigned long value );
}}
{{dcl | num=6 | since=c++11 |
std::string to_string( unsigned long long value );
}}
{{dcl | num=7 | since=c++11 |
std::string to_string( float value );
}}
{{dcl | num=8 | since=c++11 |
std::string to_string( double value );
}}
{{dcl | num=9 | since=c++11 |
std::string to_string( long double value );
}}
{{dcl end}}

Converts a numeric value to {{lc|std::string}}.

@1@ Converts a signed decimal integer to a string with the same content as what  {{c|std::sprintf(buf, &quot;%d&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@2@ Converts a signed decimal integer to a string with the same content as what  {{c|std::sprintf(buf, &quot;%ld&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@3@ Converts a signed decimal integer to a string with the same content as what  {{c|std::sprintf(buf, &quot;%lld&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@4@ Converts an unsigned decimal integer to a string with the same content as what  {{c|std::sprintf(buf, &quot;%u&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@5@ Converts an unsigned decimal integer to a string with the same content as what  {{c|std::sprintf(buf, &quot;%lu&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@6@ Converts an unsigned decimal integer to a string with the same content as what  {{c|std::sprintf(buf, &quot;%llu&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@7,8@ Converts a floating point value to a string with the same content as what  {{c|std::sprintf(buf, &quot;%f&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@9@ Converts a floating point value to a string with the same content as what  {{c|std::sprintf(buf, &quot;%Lf&quot;, value)}} would produce for sufficiently large {{tt|buf}}.

===Parameters===
{{par begin}}
{{par | value | a numeric value to convert}}
{{par end}}

===Return value===
a string holding the converted value

===Notes===

* With floating point types {{tt|std::to_string}} may yield unexpected results as the number of significant digits in the returned string can be zero, see the example.
* The return value may differ significantly from what {{tt|std::cout}} prints by default, see the example.

===Example===
{{example|
 | code= 
#include &lt;iostream&gt;
#include &lt;string&gt;
 
int main() 
{
    double f = 23.43;
    double f2 = 1e-9;
    double f3 = 1e40;
    double f4 = 1e-40;
    double f5 = 123456789;
    std::string f_str = std::to_string(f);
    std::string f_str2 = std::to_string(f2); // Note: returns &quot;0.000000&quot;
    std::string f_str3 = std::to_string(f3); // Note: Does not return &quot;1e+40&quot;.
    std::string f_str4 = std::to_string(f4); // Note: returns &quot;0.000000&quot;
    std::string f_str5 = std::to_string(f5);
    std::cout &lt;&lt; &quot;std::cout: &quot; &lt;&lt; f &lt;&lt; '\n'
              &lt;&lt; &quot;to_string: &quot; &lt;&lt; f_str  &lt;&lt; &quot;\n\n&quot;
              &lt;&lt; &quot;std::cout: &quot; &lt;&lt; f2 &lt;&lt; '\n'
              &lt;&lt; &quot;to_string: &quot; &lt;&lt; f_str2 &lt;&lt; &quot;\n\n&quot;
              &lt;&lt; &quot;std::cout: &quot; &lt;&lt; f3 &lt;&lt; '\n'
              &lt;&lt; &quot;to_string: &quot; &lt;&lt; f_str3 &lt;&lt; &quot;\n\n&quot;
              &lt;&lt; &quot;std::cout: &quot; &lt;&lt; f4 &lt;&lt; '\n'
              &lt;&lt; &quot;to_string: &quot; &lt;&lt; f_str4 &lt;&lt; &quot;\n\n&quot;
              &lt;&lt; &quot;std::cout: &quot; &lt;&lt; f5 &lt;&lt; '\n'
              &lt;&lt; &quot;to_string: &quot; &lt;&lt; f_str5 &lt;&lt; '\n';
}
 | output=
std::cout: 23.43
to_string: 23.430000

std::cout: 1e-09
to_string: 0.000000

std::cout: 1e+40
to_string: 10000000000000000303786028427003666890752.000000

std::cout: 1e-40
to_string: 0.000000

std::cout: 1.23457e+08
to_string: 123456789.000000
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc to_wstring}}
{{dsc inc | cpp/string/basic_string/dsc stoul}}
{{dsc inc | cpp/string/basic_string/dsc stol}}
{{dsc inc | cpp/string/basic_string/dsc stof}}
{{dsc inc | cpp/utility/dsc to_chars}} 
{{dsc end}}

[[de:cpp/string/basic string/to string]]
[[es:cpp/string/basic string/to string]]
[[fr:cpp/string/basic string/to string]]
[[it:cpp/string/basic string/to string]]
[[ja:cpp/string/basic string/to string]]
[[pt:cpp/string/basic string/to string]]
[[ru:cpp/string/basic string/to string]]
[[zh:cpp/string/basic string/to string]]</text>
      <sha1>m4ohoc4dv6hc0475lu7plqa823bkcjn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/basic string/to wstring</title>
    <ns>0</ns>
    <id>2476</id>
    <revision>
      <id>65857</id>
      <parentid>63273</parentid>
      <timestamp>2013-10-11T05:07:13Z</timestamp>
      <contributor>
        <username>Rapptz</username>
        <id>1465</id>
      </contributor>
      <text xml:space="preserve" bytes="3077">{{cpp/title|to_wstring}}
{{cpp/string/basic_string/navbar}}
{{dcl begin}}
{{dcl header | string}}
{{dcl | num=1 | since=c++11 |
std::wstring to_wstring( int value );
}}
{{dcl | num=2 | since=c++11 |
std::wstring to_wstring( long value );
}}
{{dcl | num=3 | since=c++11 |
std::wstring to_wstring( long long value );
}}
{{dcl | num=4 | since=c++11 |
std::wstring to_wstring( unsigned value );
}}
{{dcl | num=5 | since=c++11 |
std::wstring to_wstring( unsigned long value );
}}
{{dcl | num=6 | since=c++11 |
std::wstring to_wstring( unsigned long long value );
}}
{{dcl | num=7 | since=c++11 |
std::wstring to_wstring( float value );
}}
{{dcl | num=8 | since=c++11 |
std::wstring to_wstring( double value );
}}
{{dcl | num=9 | since=c++11 |
std::wstring to_wstring( long double value );
}}
{{dcl end}}

Converts a numeric value to {{lc|std::wstring}}.

@1@ Converts a signed decimal integer to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%d&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@2@ Converts a signed decimal integer to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%ld&quot;, value)}} would produce for sufficiently large {{tt|buf}}..
@3@ Converts a signed decimal integer to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%lld&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@4@ Converts an unsigned decimal integer to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%u&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@5@ Converts an unsigned decimal integer to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%lu&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@6@ Converts an unsigned decimal integer to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%llu&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@7,8@ Converts a floating point value to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%f&quot;, value)}} would produce for sufficiently large {{tt|buf}}.
@9@ Converts a floating point value to a wide string with the same content as what  {{c|std::swprintf(buf, sz, L&quot;%Lf&quot;, value)}} would produce for sufficiently large {{tt|buf}}.

===Parameters===
{{par begin}}
{{par | value | a numeric value to convert}}
{{par end}}

===Return value===
a wide string holding the converted value

===Example===
{{example|
 | code= 
#include &lt;string&gt;
#include &lt;iostream&gt;

int main() {
    double f = 23.43;	
    std::wstring f_str = std::to_wstring(f);
    std::wcout &lt;&lt; f_str;
}
 | output= 23.430000
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc to_string}}
{{dsc end}}

[[de:cpp/string/basic string/to wstring]]
[[es:cpp/string/basic string/to wstring]]
[[fr:cpp/string/basic string/to wstring]]
[[it:cpp/string/basic string/to wstring]]
[[ja:cpp/string/basic string/to wstring]]
[[pt:cpp/string/basic string/to wstring]]
[[ru:cpp/string/basic string/to wstring]]
[[zh:cpp/string/basic string/to wstring]]</text>
      <sha1>27yyizr1wel76f9ysqk801n5l828ckk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte</title>
    <ns>0</ns>
    <id>1430</id>
    <revision>
      <id>83217</id>
      <parentid>71107</parentid>
      <timestamp>2016-01-25T08:45:57Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3026">{{title|Null-terminated byte strings}}
{{cpp/string/byte/navbar}}

A null-terminated byte string (NTBS) is a sequence of nonzero bytes followed by a byte with value zero (the terminating null character). Each byte in a byte string encodes one character of some character set. For example, the character array {{c|{'\x63', '\x61', '\x74', '\0'} }} is an NTBS holding the string {{c|&quot;cat&quot;}} in ASCII encoding.

===Functions===
{{dsc begin}}
{{dsc h2 | Character classification}}
{{dsc header | cctype}}
{{dsc inc | cpp/string/byte/dsc isalnum}}
{{dsc inc | cpp/string/byte/dsc isalpha}}
{{dsc inc | cpp/string/byte/dsc islower}}
{{dsc inc | cpp/string/byte/dsc isupper}}
{{dsc inc | cpp/string/byte/dsc isdigit}}
{{dsc inc | cpp/string/byte/dsc isxdigit}}
{{dsc inc | cpp/string/byte/dsc iscntrl}}
{{dsc inc | cpp/string/byte/dsc isgraph}}
{{dsc inc | cpp/string/byte/dsc isspace}}
{{dsc inc | cpp/string/byte/dsc isblank}}
{{dsc inc | cpp/string/byte/dsc isprint}}
{{dsc inc | cpp/string/byte/dsc ispunct}}

{{dsc h2 | Character manipulation}}
{{dsc inc | cpp/string/byte/dsc tolower}}
{{dsc inc | cpp/string/byte/dsc toupper}}
{{dsc end}}
{{cpp/string/character classes}}
{{dsc begin}}

{{dsc h2 | Conversions to numeric formats}}
{{dsc header | cstdlib}}
{{dsc inc | cpp/string/byte/dsc atof}}
{{dsc inc | cpp/string/byte/dsc atoi}}
{{dsc inc | cpp/string/byte/dsc strtol}}
{{dsc inc | cpp/string/byte/dsc strtoul}}
{{dsc inc | cpp/string/byte/dsc strtof}}
{{dsc header  | cinttypes}}
{{dsc inc | cpp/string/byte/dsc strtoimax}}

{{dsc h2 | String manipulation}}
{{dsc header | cstring}}
{{dsc inc | cpp/string/byte/dsc strcpy}}
{{dsc inc | cpp/string/byte/dsc strncpy}}
{{dsc inc | cpp/string/byte/dsc strcat}}
{{dsc inc | cpp/string/byte/dsc strncat}}
{{dsc inc | cpp/string/byte/dsc strxfrm}}

{{dsc h2 | String examination}}
{{dsc header | cstring}}
{{dsc inc | cpp/string/byte/dsc strlen}}
{{dsc inc | cpp/string/byte/dsc strcmp}}
{{dsc inc | cpp/string/byte/dsc strncmp}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/string/byte/dsc strrchr}}
{{dsc inc | cpp/string/byte/dsc strspn}}
{{dsc inc | cpp/string/byte/dsc strcspn}}
{{dsc inc | cpp/string/byte/dsc strpbrk}}
{{dsc inc | cpp/string/byte/dsc strstr}}
{{dsc inc | cpp/string/byte/dsc strtok}}

{{dsc h2 | Character array manipulation}}
{{dsc header | cstring}}
{{dsc inc | cpp/string/byte/dsc memchr}}
{{dsc inc | cpp/string/byte/dsc memcmp}}
{{dsc inc | cpp/string/byte/dsc memset}}
{{dsc inc | cpp/string/byte/dsc memcpy}}
{{dsc inc | cpp/string/byte/dsc memmove}}

{{dsc h2 | Miscellaneous}}
{{dsc header | cstring}}
{{dsc inc | cpp/string/byte/dsc strerror}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/string/byte | Null-terminated byte strings}}
{{dsc end}}

[[cs:cpp/string/byte]]
[[de:cpp/string/byte]]
[[es:cpp/string/byte]]
[[fr:cpp/string/byte]]
[[it:cpp/string/byte]]
[[ja:cpp/string/byte]]
[[pl:cpp/string/byte]]
[[pt:cpp/string/byte]]
[[ru:cpp/string/byte]]
[[zh:cpp/string/byte]]</text>
      <sha1>rhwiz433unei1ecvjgx0080asrivld1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/atof</title>
    <ns>0</ns>
    <id>1431</id>
    <revision>
      <id>88484</id>
      <parentid>58966</parentid>
      <timestamp>2016-11-21T22:37:44Z</timestamp>
      <contributor>
        <username>Automata</username>
        <id>6081</id>
      </contributor>
      <text xml:space="preserve" bytes="1344">{{cpp/title| atof}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstdlib |
double atof( const char *str );
}}

Interprets a floating point value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2float}}

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par end}}

===Return value===
{{c|double}} value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of the return type, the return value is undefined. If no conversion can be performed, {{c|0.0}} is returned.

===Example===
{{example
 | 
 | code=
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::cout &lt;&lt; std::atof(&quot;0.0000000123&quot;) &lt;&lt; &quot;\n&quot;
              &lt;&lt; std::atof(&quot;0.012&quot;) &lt;&lt; &quot;\n&quot;
              &lt;&lt; std::atof(&quot;15e16&quot;) &lt;&lt; &quot;\n&quot;
              &lt;&lt; std::atof(&quot;-0x1afp-2&quot;) &lt;&lt; &quot;\n&quot;
              &lt;&lt; std::atof(&quot;inF&quot;) &lt;&lt; &quot;\n&quot;
              &lt;&lt; std::atof(&quot;Nan&quot;) &lt;&lt; &quot;\n&quot;;
}
 | output=
1.23e-08
0.012
1.5e+17
-107.75
inf
nan
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strtof}}
{{dsc see c | c/string/byte/atof}}
{{dsc end}}

[[de:cpp/string/byte/atof]]
[[es:cpp/string/byte/atof]]
[[fr:cpp/string/byte/atof]]
[[it:cpp/string/byte/atof]]
[[ja:cpp/string/byte/atof]]
[[pt:cpp/string/byte/atof]]
[[ru:cpp/string/byte/atof]]
[[zh:cpp/string/byte/atof]]</text>
      <sha1>sh7kwi03zkhkp9y5c51sjse4lxebabi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/atoi</title>
    <ns>0</ns>
    <id>1432</id>
    <revision>
      <id>83869</id>
      <parentid>83867</parentid>
      <timestamp>2016-03-11T15:05:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 83867 by [[Special:Contributions/Superlokkus|Superlokkus]] ([[User talk:Superlokkus|talk]])</comment>
      <text xml:space="preserve" bytes="1968">{{cpp/title| atoi | atol | atoll}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl | 
int       atoi( const char *str );
}}
{{dcl |
long      atol( const char *str );
}}
{{dcl | since=c++11 |
long long atoll( const char *str );
}}
{{dcl end}}

Interprets an integer value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int}}

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par end}}

===Return value===

Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, the return value is undefined. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

int main()
{
    const char *str1 = &quot;42&quot;;
    const char *str2 = &quot;3.14159&quot;;
    const char *str3 = &quot;31337 with words&quot;;
    const char *str4 = &quot;words and 2&quot;;

    int num1 = std::atoi(str1);
    int num2 = std::atoi(str2);
    int num3 = std::atoi(str3);
    int num4 = std::atoi(str4);

    std::cout &lt;&lt; &quot;std::atoi(\&quot;&quot; &lt;&lt; str1 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; num1 &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;std::atoi(\&quot;&quot; &lt;&lt; str2 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; num2 &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;std::atoi(\&quot;&quot; &lt;&lt; str3 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; num3 &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;std::atoi(\&quot;&quot; &lt;&lt; str4 &lt;&lt; &quot;\&quot;) is &quot; &lt;&lt; num4 &lt;&lt; '\n';
}
 | output=
std::atoi(&quot;42&quot;) is 42
std::atoi(&quot;3.14159&quot;) is 3
std::atoi(&quot;31337 with words&quot;) is 31337
std::atoi(&quot;words and 2&quot;) is 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc stol}}
{{dsc inc | cpp/string/byte/dsc strtol}}
{{dsc inc | cpp/string/byte/dsc strtoul}}
{{dsc see c | c/string/byte/atoi | atoi | atol | atoll}}
{{dsc end}}

[[de:cpp/string/byte/atoi]]
[[es:cpp/string/byte/atoi]]
[[fr:cpp/string/byte/atoi]]
[[it:cpp/string/byte/atoi]]
[[ja:cpp/string/byte/atoi]]
[[pt:cpp/string/byte/atoi]]
[[ru:cpp/string/byte/atoi]]
[[zh:cpp/string/byte/atoi]]</text>
      <sha1>qc4t3gyvsjv0v5x8x19hk52bs849a49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/atol</title>
    <ns>0</ns>
    <id>3683</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>14488</id>
      <parentid>14288</parentid>
      <timestamp>2011-11-27T01:22:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/string/narrow&quot; to &quot;cpp/string/byte&quot;</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/atoll</title>
    <ns>0</ns>
    <id>3684</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>14490</id>
      <parentid>14290</parentid>
      <timestamp>2011-11-27T01:24:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/string/narrow&quot; to &quot;cpp/string/byte&quot;</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isalnum</title>
    <ns>0</ns>
    <id>1433</id>
    <revision>
      <id>83502</id>
      <parentid>69595</parentid>
      <timestamp>2016-02-17T17:04:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>since coliru is missing that locale, it will be less confusing for the users if the example handles it</comment>
      <text xml:space="preserve" bytes="1851">{{cpp/title|isalnum}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isalnum( int ch );
}}

Checks if the given character is an alphanumeric character as classified by the current C locale. In the default locale, the following characters are alphanumeric:

* digits ({{tt|0123456789}})
* uppercase letters ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}})
* lowercase letters ({{tt|abcdefghijklmnopqrstuvwxyz}})

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an alphanumeric character, {{tt|0}} otherwise.

===Example===
{{example
 | Demonstrates the use of isalnum() with different locales (OS-specific).
 | code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;

int main()
{
    unsigned char c = '\xdf'; // German letter ß in ISO-8859-1

    std::cout &lt;&lt; &quot;isalnum(\'\\xdf\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isalnum(c) &lt;&lt; '\n';

    if(std::setlocale(LC_ALL, &quot;de_DE.iso88591&quot;))
        std::cout &lt;&lt; &quot;isalnum(\'\\xdf\', ISO-8859-1 locale) returned &quot;
                  &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isalnum(c) &lt;&lt; '\n';

}
|p=true
 | output=
isalnum('\xdf', default C locale) returned false
isalnum('\xdf', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isalnum}}
{{dsc inc | cpp/string/wide/dsc iswalnum}}
{{dsc see c | c/string/byte/isalnum}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/byte/isalnum]]
[[es:cpp/string/byte/isalnum]]
[[fr:cpp/string/byte/isalnum]]
[[it:cpp/string/byte/isalnum]]
[[ja:cpp/string/byte/isalnum]]
[[pt:cpp/string/byte/isalnum]]
[[ru:cpp/string/byte/isalnum]]
[[zh:cpp/string/byte/isalnum]]</text>
      <sha1>kdu98dpms5ukcnurh68h11wrvgbkbrc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isalpha</title>
    <ns>0</ns>
    <id>1434</id>
    <revision>
      <id>90037</id>
      <parentid>81175</parentid>
      <timestamp>2017-02-02T13:49:41Z</timestamp>
      <contributor>
        <username>Chris.sharpe.99</username>
        <id>6373</id>
      </contributor>
      <text xml:space="preserve" bytes="2201">{{cpp/title|isalpha}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isalpha( int ch );
}}

Checks if the given character is an alphabetic character as classified by the currently installed C locale. In the default locale, the following characters are alphabetic:
* uppercase letters {{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}
* lowercase letters {{tt|abcdefghijklmnopqrstuvwxyz}}

In locales other than {{c|&quot;C&quot;}}, an alphabetic character is a character for which {{lc|std::isupper()}} or {{lc|std::islower()}} returns non-zero or any other character considered alphabetic by the locale. In any case, {{lc|std::iscntrl()}}, {{lc|std::isdigit()}}, {{lc|std::ispunct()}} and {{lc|std::isspace()}} will return zero for this character.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} or is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an alphabetic character, zero otherwise.

===Example===
{{example
| Demonstrates the use of isalpha() with different locales (OS-specific).
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt; 
#include &lt;clocale&gt;
         
int main()
{        
    unsigned char c = '\xdf'; // German letter ß in ISO-8859-1
 
    std::cout &lt;&lt; &quot;isalpha(\'\\xdf\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isalpha(c) &lt;&lt; '\n';

    std::setlocale(LC_ALL, &quot;de_DE.iso88591&quot;);
    std::cout &lt;&lt; &quot;isalpha(\'\\xdf\', ISO-8859-1 locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isalpha(c) &lt;&lt; '\n';
    
}
| output=
isalpha('\xdf', default C locale) returned false
isalpha('\xdf', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isalpha}}
{{dsc inc | cpp/string/wide/dsc iswalpha}}
{{dsc see c | c/string/byte/isalpha}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/byte/isalpha]]
[[es:cpp/string/byte/isalpha]]
[[fr:cpp/string/byte/isalpha]]
[[it:cpp/string/byte/isalpha]]
[[ja:cpp/string/byte/isalpha]]
[[pt:cpp/string/byte/isalpha]]
[[ru:cpp/string/byte/isalpha]]
[[tr:cpp/string/byte/isalpha]]
[[zh:cpp/string/byte/isalpha]]</text>
      <sha1>edioqbud2yr84fxrt93anzuk2zx5x0s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isblank</title>
    <ns>0</ns>
    <id>2931</id>
    <revision>
      <id>75990</id>
      <parentid>66327</parentid>
      <timestamp>2015-02-06T02:10:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1162">{{cpp/title|isblank}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype | since=c++11 |
int isblank( int ch );
}}

Checks if the given character is a blank character as classified by the currently installed C locale. Blank characters are whitespace characters used to separate words within a sentence. In the default C locale, only space ({{tt|0x20}}) and horizontal tab ({{tt|0x09}}) are classified as blank characters.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a blank character, zero otherwise.

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isblank}}
{{dsc inc | cpp/string/wide/dsc iswblank}}
{{dsc see c | c/string/byte/isblank}}
{{dsc end}}

{{cpp/string/character classes}}

[[de:cpp/string/byte/isblank]]
[[es:cpp/string/byte/isblank]]
[[fr:cpp/string/byte/isblank]]
[[it:cpp/string/byte/isblank]]
[[ja:cpp/string/byte/isblank]]
[[pt:cpp/string/byte/isblank]]
[[ru:cpp/string/byte/isblank]]
[[zh:cpp/string/byte/isblank]]</text>
      <sha1>ml52ybzai73w835myujmxdkc1avbgsb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/iscntrl</title>
    <ns>0</ns>
    <id>1435</id>
    <revision>
      <id>75991</id>
      <parentid>66323</parentid>
      <timestamp>2015-02-06T02:10:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1669">{{cpp/title|iscntrl}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int iscntrl( int ch );
}}

Checks if the given character is a control character as classified by the currently installed C locale. In the default, &quot;C&quot; locale, the control characters are the characters with the codes {{tt|0x00-0x1F}} and {{tt|0x7F}}.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a control character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;

int main()
{
    unsigned char c = '\x94'; // the control code CCH in ISO-8859-1

    std::cout &lt;&lt; &quot;iscntrl(\'\\x94\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::iscntrl(c) &lt;&lt; '\n';

    std::setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    std::cout &lt;&lt; &quot;iscntrl(\'\\x94\', ISO-8859-1 locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; (bool)std::iscntrl(c) &lt;&lt; '\n';

}
| output=
iscntrl('\x94', default C locale) returned false
iscntrl('\x94', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc iscntrl}}
{{dsc inc | cpp/string/wide/dsc iswcntrl}}
{{dsc see c | c/string/byte/iscntrl}}
{{dsc end}}

{{cpp/string/character classes}}

[[de:cpp/string/byte/iscntrl]]
[[es:cpp/string/byte/iscntrl]]
[[fr:cpp/string/byte/iscntrl]]
[[it:cpp/string/byte/iscntrl]]
[[ja:cpp/string/byte/iscntrl]]
[[pt:cpp/string/byte/iscntrl]]
[[ru:cpp/string/byte/iscntrl]]
[[zh:cpp/string/byte/iscntrl]]</text>
      <sha1>i6u5foxn2z9fw5124obfjsx0raswnkm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isdigit</title>
    <ns>0</ns>
    <id>1436</id>
    <revision>
      <id>75988</id>
      <parentid>66325</parentid>
      <timestamp>2015-02-06T02:09:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1298">{{cpp/title|isdigit}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isdigit( int ch );
}}

Checks if the given character is one of the 10 decimal digits: {{tt|0123456789}}.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a numeric character, zero otherwise.

===Notes===
{{tt|isdigit}} and {{tt|isxdigit}} are the only standard narrow character classification functions that are not affected by the currently installed C locale. although some implementations (e.g. Microsoft in 1252 codepage) may classify additional single-byte characters as digits. 
&lt;!-- ref: C standard, note 224 in $7.11.1.1 --&gt;

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isdigit}}
{{dsc inc | cpp/string/wide/dsc iswdigit}}
{{dsc see c | c/string/byte/isdigit}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/byte/isdigit]]
[[es:cpp/string/byte/isdigit]]
[[fr:cpp/string/byte/isdigit]]
[[it:cpp/string/byte/isdigit]]
[[ja:cpp/string/byte/isdigit]]
[[pl:cpp/string/byte/isdigit]]
[[pt:cpp/string/byte/isdigit]]
[[ru:cpp/string/byte/isdigit]]
[[zh:cpp/string/byte/isdigit]]</text>
      <sha1>hf1hvszwbgqysqyr1yqggqy5cvpj101</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isgraph</title>
    <ns>0</ns>
    <id>1437</id>
    <revision>
      <id>75992</id>
      <parentid>66328</parentid>
      <timestamp>2015-02-06T02:11:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1897">{{cpp/title|isgraph}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isgraph( int ch );
}}

Checks if the given character is graphic (has a graphical representation) as classified by the currently installed C locale. In the default C locale, the following characters are graphic:

* digits ({{tt|0123456789}})
* uppercase letters ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}})
* lowercase letters ({{tt|abcdefghijklmnopqrstuvwxyz}})
* punctuation characters ({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}})

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character has a graphical representation character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;

int main()
{
    unsigned char c = '\xb6'; // the character ¶ in ISO-8859-1

    std::cout &lt;&lt; &quot;isgraph(\'\\xb6\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isgraph(c) &lt;&lt; '\n';

    std::setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    std::cout &lt;&lt; &quot;isgraph(\'\\xb6\', ISO-8859-1 locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isgraph(c) &lt;&lt; '\n';
}
| output=
isgraph('\xb6', default C locale) returned false
isgraph('\xb6', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isgraph}}
{{dsc inc | cpp/string/wide/dsc iswgraph}}
{{dsc see c | c/string/byte/isgraph}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/byte/isgraph]]
[[es:cpp/string/byte/isgraph]]
[[fr:cpp/string/byte/isgraph]]
[[it:cpp/string/byte/isgraph]]
[[ja:cpp/string/byte/isgraph]]
[[pt:cpp/string/byte/isgraph]]
[[ru:cpp/string/byte/isgraph]]
[[zh:cpp/string/byte/isgraph]]</text>
      <sha1>rytyk7yfsqjy3rh7uhnzriri6djg9yl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/islower</title>
    <ns>0</ns>
    <id>1438</id>
    <revision>
      <id>89262</id>
      <parentid>75986</parentid>
      <timestamp>2017-01-14T12:51:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>likewise</comment>
      <text xml:space="preserve" bytes="1892">{{cpp/title|islower}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int islower( int ch );
}}

Checks if the given character is classified as a lowercase character according to the current C locale. In the default &quot;C&quot; locale, {{tt|islower}} returns a nonzero value only for the lowercase letters ({{tt|abcdefghijklmnopqrstuvwxyz}}).

If {{tt|islower}} returns a nonzero value, it is guaranteed that {{c|iscntrl}}, {{c|isdigit}}, {{c|ispunct}}, and {{c|isspace}} return zero for the same character in the same C locale.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a lowercase letter, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;
 
int main()
{
    unsigned char c = '\xe5'; // letter å in ISO-8859-1
 
    std::cout &lt;&lt; &quot;islower(\'\\xe5\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::islower(c) &lt;&lt; '\n';
 
    std::setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    std::cout &lt;&lt; &quot;islower(\'\\xe5\', ISO-8859-1 locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; (bool)std::islower(c) &lt;&lt; '\n';

}
| output=
islower('\xe5', default C locale) returned false
islower('\xe5', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc islower}}
{{dsc inc | cpp/string/wide/dsc iswlower}}
{{dsc see c | c/string/byte/islower}}
{{dsc end}}

{{cpp/string/character classes}}

[[de:cpp/string/byte/islower]]
[[es:cpp/string/byte/islower]]
[[fr:cpp/string/byte/islower]]
[[it:cpp/string/byte/islower]]
[[ja:cpp/string/byte/islower]]
[[pl:cpp/string/byte/islower]]
[[pt:cpp/string/byte/islower]]
[[ru:cpp/string/byte/islower]]
[[zh:cpp/string/byte/islower]]</text>
      <sha1>7vt3s7iwao95urv4bi7kc8a5fvbr7jr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isprint</title>
    <ns>0</ns>
    <id>1439</id>
    <revision>
      <id>86725</id>
      <parentid>75993</parentid>
      <timestamp>2016-07-11T21:12:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>s/Checks if is a printable character/Checks if ch is a printable character/</comment>
      <text xml:space="preserve" bytes="1875">{{cpp/title|isprint}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isprint( int ch );
}}

Checks if {{tt|ch}} is a printable character as classified by the currently installed C locale. In the default, &quot;C&quot; locale, the following characters are printable:

* digits ({{tt|0123456789}})
* uppercase letters ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}})
* lowercase letters ({{tt|abcdefghijklmnopqrstuvwxyz}})
* punctuation characters ({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}})
* space ({{tt| }})

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character can be printed, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;
 
int main()
{
    unsigned char c = '\xa0'; // the non-breaking space in ISO-8859-1
 
    std::cout &lt;&lt; &quot;isprint(\'\\xa0\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isprint(c) &lt;&lt; '\n';
 
    std::setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    std::cout &lt;&lt; &quot;isprint(\'\\xa0\', ISO-8859-1 locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isprint(c) &lt;&lt; '\n';
}
| output=
isprint('\xa0', default C locale) returned false
isprint('\xa0', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isprint}}
{{dsc inc | cpp/string/wide/dsc iswprint}}
{{dsc see c | c/string/byte/isprint}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/byte/isprint]]
[[es:cpp/string/byte/isprint]]
[[fr:cpp/string/byte/isprint]]
[[it:cpp/string/byte/isprint]]
[[ja:cpp/string/byte/isprint]]
[[pt:cpp/string/byte/isprint]]
[[ru:cpp/string/byte/isprint]]
[[zh:cpp/string/byte/isprint]]</text>
      <sha1>q1rro01x1s82nduv3iy0xz49wmt7wuj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/ispunct</title>
    <ns>0</ns>
    <id>1440</id>
    <revision>
      <id>75994</id>
      <parentid>66309</parentid>
      <timestamp>2015-02-06T02:12:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1704">{{cpp/title|ispunct}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int ispunct( int ch );
}}

Checks if the given character is a punctuation character as classified by the current C locale. The default C locale classifies the characters {{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}} as punctuation.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a punctuation character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;

int main()
{
    unsigned char c = '\xd7'; // the character × (multiplication sign) in ISO-8859-1

    std::cout &lt;&lt; &quot;ispunct(\'\\xd7\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::ispunct(c) &lt;&lt; '\n';

    std::setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    std::cout &lt;&lt; &quot;ispunct(\'\\xd7\', ISO-8859-1 locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; (bool)std::ispunct(c) &lt;&lt; '\n';
}
| output=
ispunct('\xd7', default C locale) returned false
ispunct('\xd7', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc ispunct}}
{{dsc inc | cpp/string/wide/dsc iswpunct}}
{{dsc see c | c/string/byte/ispunct}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/byte/ispunct]]
[[es:cpp/string/byte/ispunct]]
[[fr:cpp/string/byte/ispunct]]
[[it:cpp/string/byte/ispunct]]
[[ja:cpp/string/byte/ispunct]]
[[pt:cpp/string/byte/ispunct]]
[[ru:cpp/string/byte/ispunct]]
[[zh:cpp/string/byte/ispunct]]</text>
      <sha1>h33rav3ticvrydmm4nllwsexkse0kt7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isspace</title>
    <ns>0</ns>
    <id>1441</id>
    <revision>
      <id>75984</id>
      <parentid>66329</parentid>
      <timestamp>2015-02-06T02:07:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>using keywords {{c|true}} and {{c|false}} is misleading here</comment>
      <text xml:space="preserve" bytes="1259">{{cpp/title|isspace}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isspace( int ch );
}}

Checks if the given character is whitespace character as classified by the currently installed C locale. In the default locale, the whitespace characters are the following:

* space ({{tt|0x20}}, {{c|' '}})
* form feed ({{tt|0x0c}}, {{c|'\f'}})
* line feed ({{tt|0x0a}}, {{c|'\n'}})
* carriage return ({{tt|0x0d}}, {{c|'\r'}})
* horizontal tab ({{tt|0x09}}, {{c|'\t'}}) 
* vertical tab ({{tt|0x0b}}, {{c|'\v'}})

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is a whitespace character, zero otherwise.

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isspace}}
{{dsc inc | cpp/string/wide/dsc iswspace}}
{{dsc see c | c/string/byte/isspace}}
{{dsc end}}

{{cpp/string/character classes}}

[[de:cpp/string/byte/isspace]]
[[es:cpp/string/byte/isspace]]
[[fr:cpp/string/byte/isspace]]
[[it:cpp/string/byte/isspace]]
[[ja:cpp/string/byte/isspace]]
[[pt:cpp/string/byte/isspace]]
[[ru:cpp/string/byte/isspace]]
[[zh:cpp/string/byte/isspace]]</text>
      <sha1>kcuj3n9of7zssw4tvjptlqegfa5u79e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isupper</title>
    <ns>0</ns>
    <id>1442</id>
    <revision>
      <id>89261</id>
      <parentid>89260</parentid>
      <timestamp>2017-01-14T12:50:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>adjust, not &quot;true&quot;</comment>
      <text xml:space="preserve" bytes="1896">{{cpp/title|isupper}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isupper( int ch );
}}

Checks if the given character is an uppercase character as classified by the currently installed C locale. In the default &quot;C&quot; locale, {{tt|isupper}} returns a nonzero value only for the uppercase letters ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}).

If {{tt|isupper}} returns a nonzero value, it is guaranteed that {{c|iscntrl}}, {{c|isdigit}}, {{c|ispunct}}, and {{c|isspace}} return zero for the same character in the same C locale.

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an uppercase letter, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;
 
int main()
{
    unsigned char c = '\xc6'; // letter Æ in ISO-8859-1
 
    std::cout &lt;&lt; &quot;isupper(\'\\xc6\', default C locale) returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isupper(c) &lt;&lt; '\n';
 
    std::setlocale(LC_ALL, &quot;en_GB.iso88591&quot;);
    std::cout &lt;&lt; &quot;isupper(\'\\xc6\', ISO-8859-1 locale) returned &quot;
              &lt;&lt; std::boolalpha &lt;&lt; (bool)std::isupper(c) &lt;&lt; '\n';

}
| output=
isupper('\xc6', default C locale) returned false
isupper('\xc6', ISO-8859-1 locale) returned true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isupper}}
{{dsc inc | cpp/string/wide/dsc iswupper}}
{{dsc see c | c/string/byte/isupper}}
{{dsc end}}

{{cpp/string/character classes}}

[[de:cpp/string/byte/isupper]]
[[es:cpp/string/byte/isupper]]
[[fr:cpp/string/byte/isupper]]
[[it:cpp/string/byte/isupper]]
[[ja:cpp/string/byte/isupper]]
[[pl:cpp/string/byte/isupper]]
[[pt:cpp/string/byte/isupper]]
[[ru:cpp/string/byte/isupper]]
[[zh:cpp/string/byte/isupper]]</text>
      <sha1>1jxoi23j8tejfyp08swmxqtdy4lpmo2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/isxdigit</title>
    <ns>0</ns>
    <id>1443</id>
    <revision>
      <id>87589</id>
      <parentid>75989</parentid>
      <timestamp>2016-09-12T14:06:36Z</timestamp>
      <contributor>
        <ip>213.209.119.98</ip>
      </contributor>
      <comment>isxdigit is not for wide characters.</comment>
      <text xml:space="preserve" bytes="1309">{{cpp/title|isxdigit}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int isxdigit( int ch );
}}

Checks if the given character is a hexadecimal numeric character ({{tt|0123456789abcdefABCDEF}}).

The behavior is undefined if the value of {{tt|ch}} is not representable as {{c|unsigned char}} and is not equal to {{c|EOF}}.

===Parameters===
{{par begin}}
{{par | ch | character to classify}}
{{par end}}

===Return value===
Non-zero value if the character is an hexadecimal numeric character, zero otherwise.

===Notes===
{{tt|isdigit}} and {{tt|isxdigit}} are the only standard narrow character classification functions that are not affected by the currently installed C locale. although some implementations (e.g. Microsoft in 1252 codepage) may classify additional single-byte characters as digits. 
&lt;!-- ref: C standard, note 224 in $7.11.1.1 --&gt;

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isxdigit}}
{{dsc inc | cpp/string/wide/dsc iswxdigit}}
{{dsc see c | c/string/byte/isxdigit}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/byte/isxdigit]]
[[es:cpp/string/byte/isxdigit]]
[[fr:cpp/string/byte/isxdigit]]
[[it:cpp/string/byte/isxdigit]]
[[ja:cpp/string/byte/isxdigit]]
[[pt:cpp/string/byte/isxdigit]]
[[ru:cpp/string/byte/isxdigit]]
[[zh:cpp/string/byte/isxdigit]]</text>
      <sha1>qwp28x353kz1brd0h1me8p1g88sixje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/memchr</title>
    <ns>0</ns>
    <id>1444</id>
    <revision>
      <id>79661</id>
      <parentid>58988</parentid>
      <timestamp>2015-07-19T11:32:20Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>+example</comment>
      <text xml:space="preserve" bytes="1560">{{cpp/title| memchr}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstring}}
{{dcl |
const void* memchr( const void* ptr, int ch, std::size_t count );
}}
{{dcl | 1=
      void* memchr(       void* ptr, int ch, std::size_t count );
}}
{{dcl end}}

Converts {{tt|ch}} to {{c|unsigned char}} and locates the first occurrence of that value in the initial {{tt|count}} characters (each interpreted as {{c|unsigned char}}) of the object pointed to by {{tt|ptr}}. 

===Parameters===
{{par begin}}
{{par | ptr | pointer to the object to be examined}}
{{par | ch | character to search for}}
{{par | count | number of characters to examine}}
{{par end}}

===Return value===
Pointer to the location of the character, or {{lc|NULL}} if no such character is found.

===Example===
Search an array of characters.
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
    char arr[] = {'a','\0','a','A','a','a','A','a'};
    char *pc = (char*)std::memchr(arr,'A',sizeof arr);
    if (pc != NULL)
       std::cout &lt;&lt; &quot;search character found\n&quot;;
    else
       std::cout &lt;&lt; &quot;search character not found\n&quot;;
}
 | output=
search character found
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc see c | c/string/byte/memchr}}
{{dsc end}}

[[de:cpp/string/byte/memchr]]
[[es:cpp/string/byte/memchr]]
[[fr:cpp/string/byte/memchr]]
[[it:cpp/string/byte/memchr]]
[[ja:cpp/string/byte/memchr]]
[[pt:cpp/string/byte/memchr]]
[[ru:cpp/string/byte/memchr]]
[[zh:cpp/string/byte/memchr]]</text>
      <sha1>mlv44stmxignmdvqdav75gnnh8rttsb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/memcmp</title>
    <ns>0</ns>
    <id>1445</id>
    <revision>
      <id>87835</id>
      <parentid>87834</parentid>
      <timestamp>2016-10-05T16:32:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>adj last note to show an example</comment>
      <text xml:space="preserve" bytes="2729">{{cpp/title| memcmp}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
int memcmp( const void* lhs, const void* rhs, std::size_t count );
}}

Reinterprets the objects pointed to by {{tt|lhs}} and {{tt|rhs}} as arrays of {{c|unsigned char}} and compares the first {{tt|count}} characters of these arrays. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of bytes (both interpreted as {{c|unsigned char}}) that differ in the objects being compared.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the memory buffers to compare}}
{{par | count | number of bytes to examine}}
{{par end}}

===Return value===
Negative value if the first differing byte (reinterpreted as {{c|unsigned char}}) in {{tt|lhs}} is less than the corresponding byte in {{tt|rhs}}.

{{c|0}} if all {{tt|count}} bytes of {{tt|lhs}} and {{tt|rhs}} are equal.

Positive value if the first differing byte in {{tt|lhs}} is greater than the corresponding byte in {{tt|rhs}}.

===Notes===
This function reads [[cpp/language/object|object representations]], not the object values, and is typically only meaningful for trivially-copyable objects with no padding. For example, {{tt|memcmp()}} between two objects of type {{lc|std::string}} or {{lc|std::vector}} will not compare their contents, and {{tt|memcmp()}} between two objects of type {{c|struct{char c; int n;}}} will compare the padding bytes whose values may differ when the values of {{c|c}} and {{c|n}} are the same.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

void demo(const char* lhs, const char* rhs, std::size_t sz)
{
    std::cout &lt;&lt; std::string(lhs, sz);
    int rc = std::memcmp(lhs, rhs, sz);
    if(rc == 0)
        std::cout &lt;&lt; &quot; compares equal to &quot;;
    else if(rc &lt; 0)
        std::cout &lt;&lt; &quot; precedes &quot;;
    else if(rc &gt; 0)
        std::cout &lt;&lt; &quot; follows &quot;;
    std::cout &lt;&lt; std::string(rhs, sz) &lt;&lt; &quot; in lexicographical order\n&quot;;
}

int main()
{
    char a1[] = {'a','b','c'};
    char a2[sizeof a1] = {'a','b','d'};

    demo(a1, a2, sizeof a1);
    demo(a2, a1, sizeof a1);
    demo(a1, a1, sizeof a1);
}
 | output=
abc precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcmp}}
{{dsc inc | cpp/string/byte/dsc strncmp}}
{{dsc see c | c/string/byte/memcmp}}
{{dsc end}}

[[de:cpp/string/byte/memcmp]]
[[es:cpp/string/byte/memcmp]]
[[fr:cpp/string/byte/memcmp]]
[[it:cpp/string/byte/memcmp]]
[[ja:cpp/string/byte/memcmp]]
[[pt:cpp/string/byte/memcmp]]
[[ru:cpp/string/byte/memcmp]]
[[zh:cpp/string/byte/memcmp]]</text>
      <sha1>7wefedobomgtatbl4lg74ukba704l8e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/memcpy</title>
    <ns>0</ns>
    <id>1446</id>
    <revision>
      <id>87272</id>
      <parentid>87270</parentid>
      <timestamp>2016-08-06T16:50:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>partial revert (keeping s/is/is meant to be) - citation needed</comment>
      <text xml:space="preserve" bytes="2684">{{cpp/title|memcpy}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
void* memcpy( void* dest, const void* src, std::size_t count );
}}

Copies {{tt|count}} bytes from the object pointed to by {{tt|src}} to the object pointed to by {{tt|dest}}.  Both objects are reinterpreted as arrays of {{c|unsigned char}}.

If the objects overlap, the behavior is undefined.

If either {{tt|dest}} or {{tt|src}} is a null pointer, the behavior is undefined, even if {{tt|count}} is zero.

If the objects are not {{concept|TriviallyCopyable}}, the behavior of {{tt|memcpy}} is not specified and [http://stackoverflow.com/questions/29777492 may be undefined].

===Parameters===
{{par begin}}
{{par | dest | pointer to the memory location to copy to}}
{{par | src | pointer to the memory location to copy from}}
{{par | count | number of bytes to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Notes===
{{tt|std::memcpy}} is meant to be the fastest library routine for memory-to-memory copy. It is usually more efficient than {{lc|std::strcpy}}, which must scan the data it copies or {{lc|std::memmove}}, which must take precautions to handle overlapping inputs.

Several C++ compilers transform suitable memory-copying loops to {{tt|std::memcpy}} calls.

Where [[cpp/language/object#Strict_aliasing|strict aliasing]] prohibits examining the same memory as values of two different types, {{tt|std::memcpy}} may be used to convert the values.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdint&gt;
#include &lt;cstring&gt;

int main()
{
    // simple usage
    char source[] = &quot;once upon a midnight dreary...&quot;, dest[4];
    std::memcpy(dest, source, sizeof dest);
    for (char c : dest)
        std::cout &lt;&lt; c &lt;&lt; '\n';

    // reinterpreting
    double d = 0.1;
//  std::int64_t n = *reinterpret_cast&lt;std::int64_t*&gt;(&amp;d); // aliasing violation
    std::int64_t n;
    std::memcpy(&amp;n, &amp;d, sizeof d); // OK

    std::cout &lt;&lt; std::hexfloat &lt;&lt; d &lt;&lt; &quot; is &quot; &lt;&lt; std::hex &lt;&lt; n
              &lt;&lt; &quot; as an std::int64_t\n&quot;;
}
 | output=
o
n
c
e
0x1.999999999999ap-4 is 3fb999999999999a as an std::int64_t
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc memmove}}
{{dsc inc | cpp/string/byte/dsc memset}}
{{dsc inc | cpp/string/wide/dsc wmemcpy}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc inc | cpp/algorithm/dsc copy_backward}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}
{{dsc see c | c/string/byte/memcpy}}
{{dsc end}}

[[de:cpp/string/byte/memcpy]]
[[es:cpp/string/byte/memcpy]]
[[fr:cpp/string/byte/memcpy]]
[[it:cpp/string/byte/memcpy]]
[[ja:cpp/string/byte/memcpy]]
[[pt:cpp/string/byte/memcpy]]
[[ru:cpp/string/byte/memcpy]]
[[zh:cpp/string/byte/memcpy]]</text>
      <sha1>5jdathoysg3qm3ja1mbhikbp337ohw4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/memmove</title>
    <ns>0</ns>
    <id>1447</id>
    <revision>
      <id>87271</id>
      <parentid>82522</parentid>
      <timestamp>2016-08-06T15:20:26Z</timestamp>
      <contributor>
        <ip>68.196.122.73</ip>
      </contributor>
      <comment>refine note to reflect actual practice</comment>
      <text xml:space="preserve" bytes="2331">{{cpp/title| memmove}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
void* memmove( void* dest, const void* src, std::size_t count );
}}

Copies {{tt|count}} characters from the object pointed to by {{tt|src}} to the object pointed to by {{tt|dest}}. Both objects are reinterpreted as arrays of {{c|unsigned char}}.

The objects may overlap: copying takes place as if the characters were copied to a temporary character array and then the characters were copied from the array to {{tt|dest}}.

If the objects are not {{concept|TriviallyCopyable}}, the behavior of {{tt|memmove}} is not specified and [http://stackoverflow.com/questions/29777492 may be undefined].

===Parameters===
{{par begin}}
{{par | dest | pointer to the memory location to copy to}}
{{par | src | pointer to the memory location to copy from}}
{{par | count | number of bytes to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Notes===
Despite being specified &quot;as if&quot; a temporary buffer is used, actual implementations of this function do not incur the overhead of double copying or extra memory. For small {{lc|count}}, it may load up and write out registers; for larger blocks, a common approach (glibc and bsd libc) is to copy bytes forwards from the beginning of the buffer if the destination starts before the source, and backwards from the end otherwise, with a fall back to {{lc|std::memcpy}} when there is no overlap at all.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
    char str[] = &quot;1234567890&quot;;
    std::cout &lt;&lt; str &lt;&lt; '\n';
    std::memmove(str + 4, str + 3, 3); // copies from [4, 5, 6] to [5, 6, 7]
    std::cout &lt;&lt; str &lt;&lt; '\n';
}
 | output=
1234567890
1234456890
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc memcpy}}
{{dsc inc | cpp/string/byte/dsc memset}}
{{dsc inc | cpp/string/wide/dsc wmemmove}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc inc | cpp/algorithm/dsc copy_backward}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}
{{dsc see c | c/string/byte/memmove}}
{{dsc end}}

[[de:cpp/string/byte/memmove]]
[[es:cpp/string/byte/memmove]]
[[fr:cpp/string/byte/memmove]]
[[it:cpp/string/byte/memmove]]
[[ja:cpp/string/byte/memmove]]
[[pl:cpp/string/byte/memmove]]
[[pt:cpp/string/byte/memmove]]
[[ru:cpp/string/byte/memmove]]
[[zh:cpp/string/byte/memmove]]</text>
      <sha1>mjpsptkezxrpncdusi936y46kuychon</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/memset</title>
    <ns>0</ns>
    <id>1448</id>
    <revision>
      <id>89227</id>
      <parentid>89215</parentid>
      <timestamp>2017-01-11T14:27:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+bugzilla reference for gcc dropping memset</comment>
      <text xml:space="preserve" bytes="2129">{{cpp/title| memset}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
void* memset( void* dest, int ch, std::size_t count );
}}

Converts the value {{tt|ch}} to {{c|unsigned char}} and copies it into each of the first {{tt|count}} characters of the object pointed to by {{tt|dest}}. If the object is not trivially-copyable (e.g., scalar, array, or a C-compatible struct), the behavior is undefined. If {{tt|count}} is greater than the size of the object pointed to by {{tt|dest}}, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | dest | pointer to the object to fill}}
{{par | ch | fill byte}}
{{par | count | number of bytes to fill}}
{{par end}}

===Return value===
{{tt|dest}}

===Notes===
{{tt|std::memset}} may be optimized away (under the [[cpp/language/as if|as-if]] rules) if the object modified by this function is not accessed again for the rest of its lifetime (e.g. [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=8537 gcc bug 8537]). For that reason, this function cannot be used to scrub memory (e.g. to fill an array that stored a password with zeroes). Solutions for that include C11 {{ltt|c/string/byte/memset|memset_s}}, FreeBSD [https://www.freebsd.org/cgi/man.cgi?query=explicit_bzero explicit_bzero] or Microsoft [https://msdn.microsoft.com/en-us/library/windows/desktop/aa366877.aspx SecureZeroMemory].

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
    int a[20];
    std::memset(a, 0, sizeof a);
    for (int ai : a) std::cout &lt;&lt; ai;
}
 | output=
00000000000000000000
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc memcpy}}
{{dsc inc | cpp/string/byte/dsc memmove}}
{{dsc inc | cpp/string/wide/dsc wmemset}}
{{dsc inc | cpp/algorithm/dsc fill}}
{{dsc inc | cpp/algorithm/dsc fill_n}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}
{{dsc see c | c/string/byte/memset}}
{{dsc end}}

[[de:cpp/string/byte/memset]]
[[es:cpp/string/byte/memset]]
[[fr:cpp/string/byte/memset]]
[[it:cpp/string/byte/memset]]
[[ja:cpp/string/byte/memset]]
[[pt:cpp/string/byte/memset]]
[[ru:cpp/string/byte/memset]]
[[zh:cpp/string/byte/memset]]</text>
      <sha1>oa7od5krkh2ecqjo58rzqq8xlvrxuxa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strcat</title>
    <ns>0</ns>
    <id>1449</id>
    <revision>
      <id>79460</id>
      <parentid>75875</parentid>
      <timestamp>2015-07-07T14:46:02Z</timestamp>
      <contributor>
        <ip>209.49.233.137</ip>
      </contributor>
      <text xml:space="preserve" bytes="1526">{{cpp/title| strcat}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
char *strcat( char *dest, const char *src );
}}

Appends a copy of the character string pointed to by {{tt|src}} to the end of the character string pointed to by {{tt|dest}}. The character {{tt|src[0]}} replaces the null terminator at the end of {{tt|dest}}. The resulting byte string is null-terminated.

The behavior is undefined if the destination array is not large enough for the contents of both {{tt|src}} and {{tt|dest}} and the terminating null character.

The behavior is undefined if the strings overlap.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to append to}}
{{par | src | pointer to the null-terminated byte string to copy from}}
{{par end}}

===Return value===
{{tt|dest}}

===Example===
{{example
 |
 | code=
#include &lt;cstring&gt;
#include &lt;cstdio&gt;
 
int main() 
{
    char str[50] = &quot;Hello &quot;;
    char str2[50] = &quot;World!&quot;;
    std::strcat(str, str2);
    std::strcat(str, &quot; Goodbye World!&quot;);
    std::puts(str);
}
 | output=
Hello World! Goodbye World!
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strncat}}
{{dsc inc | cpp/string/byte/dsc strcpy}}
{{dsc see c | c/string/byte/strcat}}
{{dsc end}}

[[de:cpp/string/byte/strcat]]
[[es:cpp/string/byte/strcat]]
[[fr:cpp/string/byte/strcat]]
[[it:cpp/string/byte/strcat]]
[[ja:cpp/string/byte/strcat]]
[[pt:cpp/string/byte/strcat]]
[[ru:cpp/string/byte/strcat]]
[[tr:cpp/string/byte/strcat]]
[[zh:cpp/string/byte/strcat]]</text>
      <sha1>98hcym688l8dfzc4b41ja58x3qie04j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strchr</title>
    <ns>0</ns>
    <id>1450</id>
    <revision>
      <id>75907</id>
      <parentid>69846</parentid>
      <timestamp>2015-02-04T18:11:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention that the arg is first cast to char</comment>
      <text xml:space="preserve" bytes="1806">{{cpp/title| strchr}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstring}}
{{dcl |
const char* strchr( const char* str, int ch );
}}
{{dcl | 1=
      char* strchr(       char* str, int ch );
}}
{{dcl end}}

Finds the first occurrence of the character {{c|static_cast&lt;char&gt;(ch)}} in the byte string pointed to by {{tt|str}}. 

The terminating null character is considered to be a part of the string.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be analyzed}}
{{par | ch | character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or a null pointer if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
  const char *str = &quot;Try not. Do, or do not. There is no try.&quot;;
  char target = 'T';
  const char *result = str;

  while ((result = std::strchr(result, target)) != NULL) {
    std::cout &lt;&lt; &quot;Found '&quot; &lt;&lt; target
              &lt;&lt; &quot;' starting at '&quot; &lt;&lt; result &lt;&lt; &quot;'\n&quot;;

    // Increment result, otherwise we'll find target at the same location
    ++result;
  }
}
 | output=
Found 'T' starting at 'Try not. Do, or do not. There is no try.'
Found 'T' starting at 'There is no try.'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc inc | cpp/string/byte/dsc strrchr}}
{{dsc inc | cpp/string/byte/dsc strpbrk}}
{{dsc see c | c/string/byte/strchr}}
{{dsc end}}

[[de:cpp/string/byte/strchr]]
[[es:cpp/string/byte/strchr]]
[[fr:cpp/string/byte/strchr]]
[[it:cpp/string/byte/strchr]]
[[ja:cpp/string/byte/strchr]]
[[pl:cpp/string/byte/strchr]]
[[pt:cpp/string/byte/strchr]]
[[ru:cpp/string/byte/strchr]]
[[tr:cpp/string/byte/strchr]]
[[zh:cpp/string/byte/strchr]]</text>
      <sha1>97tn585sjuit7i8t6qv9ol88z76r89t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strcmp</title>
    <ns>0</ns>
    <id>1451</id>
    <revision>
      <id>75901</id>
      <parentid>75897</parentid>
      <timestamp>2015-02-04T16:51:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso wcscmp</comment>
      <text xml:space="preserve" bytes="1798">{{cpp/title| strcmp}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
int strcmp( const char *lhs, const char *rhs );
}}

Compares two null-terminated byte strings lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of characters (both interpreted as {{c|unsigned char}}) that differ in the strings being compared.

The behavior is undefined if {{tt|lhs}} or {{tt|rhs}} are not pointers to null-terminated strings.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated byte strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Example===
{{example
 |
 | code=
#include &lt;vector&gt;
#include &lt;cstring&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;

int main() 
{
    std::vector&lt;const char*&gt; cats {&quot;Heathcliff&quot;, &quot;Snagglepuss&quot;, &quot;Hobbes&quot;, &quot;Garfield&quot;};
    std::sort(cats.begin(), cats.end(), [](const char *strA, const char *strB) {
        return std::strcmp(strA, strB) &lt; 0;
    }); 

    for (const char *cat : cats) {
        std::cout &lt;&lt; cat &lt;&lt; '\n';
    }
}
 | output=
Garfield
Heathcliff
Hobbes
Snagglepuss
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strncmp}}
{{dsc inc | cpp/string/wide/dsc wcscmp}}
{{dsc inc | cpp/string/byte/dsc memcmp}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc see c | c/string/byte/strcmp}}
{{dsc end}}

[[de:cpp/string/byte/strcmp]]
[[es:cpp/string/byte/strcmp]]
[[fr:cpp/string/byte/strcmp]]
[[it:cpp/string/byte/strcmp]]
[[ja:cpp/string/byte/strcmp]]
[[pt:cpp/string/byte/strcmp]]
[[ru:cpp/string/byte/strcmp]]
[[zh:cpp/string/byte/strcmp]]</text>
      <sha1>dtljkjw440hce6fday0x21ufl1vebwz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strcoll</title>
    <ns>0</ns>
    <id>4584</id>
    <revision>
      <id>59004</id>
      <parentid>51235</parentid>
      <timestamp>2013-06-01T06:25:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1820">{{cpp/title| strcoll}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
int strcoll( const char* lhs, const char* rhs );
}}

Compares two null-terminated byte strings according to the current locale as defined by the {{lc|LC_COLLATE}} category.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated byte strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} is ''less than'' (precedes) {{tt|rhs}}.

{{c|0}} if {{tt|lhs}} is ''equal to'' {{tt|rhs}}.

Positive value if {{tt|lhs}} is ''greater than'' (follows) {{tt|rhs}}.

===Notes===
{{cpp/locale/collate/collation_note}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;clocale&gt;
 
int main()
{
    std::setlocale(LC_COLLATE, &quot;cs_CZ.iso88592&quot;);
    
    const char* s1 = &quot;hrnec&quot;;
    const char* s2 = &quot;chrt&quot;;
    
    std::cout &lt;&lt; &quot;In the Czech locale: &quot;;
    if(std::strcoll(s1, s2) &lt; 0)
         std::cout &lt;&lt; s1 &lt;&lt; &quot; before &quot; &lt;&lt; s2 &lt;&lt; '\n';
    else
         std::cout &lt;&lt; s2 &lt;&lt; &quot; before &quot; &lt;&lt; s1 &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;In lexicographical comparison: &quot;;
    if(std::strcmp(s1, s2) &lt; 0)
         std::cout &lt;&lt; s1 &lt;&lt; &quot; before &quot; &lt;&lt; s2 &lt;&lt; '\n';
    else
         std::cout &lt;&lt; s2 &lt;&lt; &quot; before &quot; &lt;&lt; s1 &lt;&lt; '\n';
}
 | output=
In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc inc | cpp/locale/collate/dsc do_compare}}
{{dsc inc | cpp/string/byte/dsc strxfrm}}
{{dsc see c | c/string/byte/strcoll}}
{{dsc end}}

[[de:cpp/string/byte/strcoll]]
[[es:cpp/string/byte/strcoll]]
[[fr:cpp/string/byte/strcoll]]
[[it:cpp/string/byte/strcoll]]
[[ja:cpp/string/byte/strcoll]]
[[pt:cpp/string/byte/strcoll]]
[[ru:cpp/string/byte/strcoll]]
[[zh:cpp/string/byte/strcoll]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strcpy</title>
    <ns>0</ns>
    <id>1452</id>
    <revision>
      <id>83465</id>
      <parentid>83464</parentid>
      <timestamp>2016-02-14T11:23:47Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>revert</comment>
      <text xml:space="preserve" bytes="1481">{{cpp/title| strcpy}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
char* strcpy( char* dest, const char* src );
}}

Copies the character string pointed to by {{tt|src}}, including the null terminator, to the character array whose first element is pointed to by {{tt|dest}}.

The behavior is undefined if the {{tt|dest}} array is not large enough. The behavior is undefined if the strings overlap.

===Parameters===
{{par begin}}
{{par | dest | pointer to the character array to write to}}
{{par | src | pointer to the null-terminated byte string to copy from}}
{{par end}}

===Return value===
{{tt|dest}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;memory&gt;

int main()
{
    const char* src = &quot;Take the test.&quot;;
//  src[0] = 'M'; // can't modify string literal
    auto dst = std::make_unique&lt;char[]&gt;(std::strlen(src)+1); // +1 for the null terminator
    std::strcpy(dst.get(), src);
    dst[0] = 'M';
    std::cout &lt;&lt; src &lt;&lt; '\n' &lt;&lt; dst.get() &lt;&lt; '\n';
}
 | output=
Take the test.
Make the test.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strncpy}}
{{dsc inc | cpp/string/byte/dsc memcpy}}
{{dsc see c | c/string/byte/strcpy}}
{{dsc end}}

[[de:cpp/string/byte/strcpy]]
[[es:cpp/string/byte/strcpy]]
[[fr:cpp/string/byte/strcpy]]
[[it:cpp/string/byte/strcpy]]
[[ja:cpp/string/byte/strcpy]]
[[pt:cpp/string/byte/strcpy]]
[[ru:cpp/string/byte/strcpy]]
[[tr:cpp/string/byte/strcpy]]
[[zh:cpp/string/byte/strcpy]]</text>
      <sha1>tr4m4vp2e2efl5nfe5os31q1yfs2j49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strcspn</title>
    <ns>0</ns>
    <id>1749</id>
    <revision>
      <id>85092</id>
      <parentid>82526</parentid>
      <timestamp>2016-03-30T14:03:43Z</timestamp>
      <contributor>
        <ip>64.72.88.238</ip>
      </contributor>
      <text xml:space="preserve" bytes="1704">{{cpp/title| strcspn}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
size_t strcspn( const char *dest, const char *src );
}}

Returns the length of the maximum initial segment of the byte string pointed to by {{tt|dest}}, that consists of only the characters ''not'' found in byte string pointed to by {{tt|src}}.

The function name stands for &quot;complementary span&quot;

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to be analyzed}}
{{par | src | pointer to the null-terminated byte string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters not found in the byte string pointed to by {{tt|src}}

===Example===
{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;iostream&gt;

const char* invalid = &quot;*$#&quot;;
int main()
{
    std::string s = &quot;abcde312$#@&quot;;

    size_t valid_len = std::strcspn(s.c_str(), invalid);
    if(valid_len != s.size())
       std::cout &lt;&lt; &quot;'&quot; &lt;&lt; s &lt;&lt; &quot;' contains invalid chars starting at position &quot;
                 &lt;&lt; valid_len &lt;&lt; '\n';
}
 | output=
'abcde312$#@' contains invalid chars starting at position 8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strspn}}
{{dsc inc | cpp/string/wide/dsc wcscspn}}
{{dsc inc | cpp/string/byte/dsc strpbrk}}
{{dsc inc | cpp/string/basic_string/dsc find_first_of}}
{{dsc see c | c/string/byte/strcspn}}
{{dsc end}}

[[de:cpp/string/byte/strcspn]]
[[es:cpp/string/byte/strcspn]]
[[fr:cpp/string/byte/strcspn]]
[[it:cpp/string/byte/strcspn]]
[[ja:cpp/string/byte/strcspn]]
[[pt:cpp/string/byte/strcspn]]
[[ru:cpp/string/byte/strcspn]]
[[zh:cpp/string/byte/strcspn]]</text>
      <sha1>b8js0pktgsz9l6d5mee5joal5tqli6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strerror</title>
    <ns>0</ns>
    <id>4586</id>
    <revision>
      <id>76273</id>
      <parentid>59009</parentid>
      <timestamp>2015-02-13T20:07:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>notes from C</comment>
      <text xml:space="preserve" bytes="1860">{{cpp/title| strerror}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
char* strerror( int errnum );
}}

Returns a pointer to the textual description of the system error code {{tt|errnum}}, identical to the description that would be printed by {{lc|perror()}}.

{{tt|errnum}} is usually acquired from the {{tt|errno}} variable, however the function accepts any value of type {{c|int}}. The contents of the string are locale-specific.

The returned string must not be modified by the program, but may be overwritten by a subsequent call to the {{tt|strerror}} function. {{tt|strerror}} is not required to be thread-safe. Implementations may be returning different pointers to static read-only string literals or may be returning the same pointer over and over, pointing at a static buffer in which strerror places the string.

===Parameters===
{{par begin}}
{{par | errnum | integral value referring to a error code}}
{{par end}}

===Return value===
Pointer to a null-terminated byte string corresponding to the {{lc|errno}} error code {{tt|errnum}}.

===Notes===
[http://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror.html POSIX] allows subsequent calls to {{tt|strerror}} to invalidate the pointer value returned by an earlier call. It also specifies that it is the {{ltt|c/locale/LC_categories|LC_MESSAGES}} locale facet that controls the contents of these messages.

===Example===
{{example template|cpp/error/example_errno}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/io/c/dsc perror}}
{{dsc inc | cpp/error/dsc errno_macros}}
{{dsc see c | c/string/byte/strerror}}
{{dsc end}}

[[de:cpp/string/byte/strerror]]
[[es:cpp/string/byte/strerror]]
[[fr:cpp/string/byte/strerror]]
[[it:cpp/string/byte/strerror]]
[[ja:cpp/string/byte/strerror]]
[[pt:cpp/string/byte/strerror]]
[[ru:cpp/string/byte/strerror]]
[[zh:cpp/string/byte/strerror]]</text>
      <sha1>h5pxnq7kak3eeznlx79e158a077yk4o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strlen</title>
    <ns>0</ns>
    <id>1750</id>
    <revision>
      <id>82817</id>
      <parentid>82814</parentid>
      <timestamp>2016-01-06T11:37:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 82814 by [[Special:Contributions/Alexez|Alexez]] ([[User talk:Alexez|talk]]) sizeof is not a function</comment>
      <text xml:space="preserve" bytes="1411">{{cpp/title| strlen}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
std::size_t strlen( const char* str );
}}

Returns the length of the given byte string, that is, the number of characters in a character array whose first element is pointed to by {{tt|str}} up to and not including the first null character. The behavior is undefined if there is no null character in the character array pointed to by {{tt|str}}.

===Parameters===
{{par begin}}
{{par |str | pointer to the null-terminated byte string to be examined}}
{{par end}}

===Return value===
The length of the null-terminated string {{tt|str}}.

===Example===
{{example
 |
 | code=
#include &lt;cstring&gt;
#include &lt;iostream&gt;
 
int main()
{
   const char str[] = &quot;How many characters does this string contain?&quot;;
 
   std::cout &lt;&lt; &quot;without null character: &quot; &lt;&lt; std::strlen(str) &lt;&lt; '\n'
             &lt;&lt; &quot;with null character: &quot; &lt;&lt; sizeof str &lt;&lt; '\n';
}
 | output=
without null character: 45
with null character: 46
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcslen}}
{{dsc inc | cpp/string/multibyte/dsc mblen}}
{{dsc see c | c/string/byte/strlen}}
{{dsc end}}

[[de:cpp/string/byte/strlen]]
[[es:cpp/string/byte/strlen]]
[[fr:cpp/string/byte/strlen]]
[[it:cpp/string/byte/strlen]]
[[ja:cpp/string/byte/strlen]]
[[pl:cpp/string/byte/strlen]]
[[pt:cpp/string/byte/strlen]]
[[ru:cpp/string/byte/strlen]]
[[zh:cpp/string/byte/strlen]]</text>
      <sha1>29vig97kadqrsny3iijywr7a4fcn6wv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strncat</title>
    <ns>0</ns>
    <id>1751</id>
    <revision>
      <id>59010</id>
      <parentid>51240</parentid>
      <timestamp>2013-06-01T06:25:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1542">{{cpp/title| strncat}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
char *strncat( char *dest, const char *src, std::size_t count );
}}

Appends a byte string pointed to by {{tt|src}} to a byte string pointed to by {{tt|dest}}. At most {{tt|count}} characters are copied. The resulting byte string is null-terminated. 

The destination byte string must have enough space for the contents of both {{tt|dest}} and {{tt|src}} plus the terminating null character, except that the size of {{tt|src}} is limited to {{tt|count}}.

The behavior is undefined if the strings overlap.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to append to}}
{{par | src | pointer to the null-terminated byte string to copy from}}
{{par | count | maximum number of characters to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Example===
{{example
 |
 | code=
#include &lt;cstring&gt;
#include &lt;cstdio&gt;
 
int main() 
{
    char str[50] = &quot;Hello &quot;;
    char str2[50] = &quot;World!&quot;;
    std::strcat(str, str2);
    std::strncat(str, &quot; Goodbye World!&quot;, 3);
    std::puts(str);
}
 | output=
Hello World! Go
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcat}}
{{dsc inc | cpp/string/byte/dsc strcpy}}
{{dsc see c | c/string/byte/strncat}}
{{dsc end}}

[[de:cpp/string/byte/strncat]]
[[es:cpp/string/byte/strncat]]
[[fr:cpp/string/byte/strncat]]
[[it:cpp/string/byte/strncat]]
[[ja:cpp/string/byte/strncat]]
[[pt:cpp/string/byte/strncat]]
[[ru:cpp/string/byte/strncat]]
[[zh:cpp/string/byte/strncat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strncmp</title>
    <ns>0</ns>
    <id>1752</id>
    <revision>
      <id>88191</id>
      <parentid>75902</parentid>
      <timestamp>2016-11-14T15:39:28Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>it won't overrun the null character during comparisons</comment>
      <text xml:space="preserve" bytes="2580">{{cpp/title| strncmp}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
int strncmp( const char* lhs, const char* rhs, size_t count );
}}

Compares at most {{tt|count}} characters of two null-terminated byte strings. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of characters (both interpreted as {{c|unsigned char}}) that differ in the strings being compared.

The behavior is undefined if {{tt|lhs}} or {{tt|rhs}} are not pointers to null-terminated strings.

Characters following the null character are not compared.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated byte strings to compare}}
{{par | count | maximum number of characters to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Example===
{{example
 |
 | code=
#include &lt;cstring&gt;
#include &lt;iostream&gt;

void demo(const char* lhs, const char* rhs, int sz)
{
    int rc = std::strncmp(lhs, rhs, sz);
    if(rc == 0)
        std::cout &lt;&lt; &quot;First &quot; &lt;&lt; sz &lt;&lt; &quot; chars of [&quot;
                  &lt;&lt; lhs &lt;&lt; &quot;] equal [&quot; &lt;&lt; rhs &lt;&lt; &quot;]\n&quot;;
    else if(rc &lt; 0)
        std::cout &lt;&lt; &quot;First &quot; &lt;&lt; sz &lt;&lt; &quot; chars of [&quot;
                  &lt;&lt; lhs &lt;&lt; &quot;] precede [&quot; &lt;&lt; rhs &lt;&lt; &quot;]\n&quot;;
    else if(rc &gt; 0)
        std::cout &lt;&lt; &quot;First &quot; &lt;&lt; sz &lt;&lt; &quot; chars of [&quot;
                  &lt;&lt; lhs &lt;&lt; &quot;] follow [&quot; &lt;&lt; rhs &lt;&lt; &quot;]\n&quot;;
}
int main()
{
    demo(&quot;Hello, world!&quot;, &quot;Hello, everybody!&quot;, 13);
    demo(&quot;Hello, everybody!&quot;, &quot;Hello, world!&quot;, 13);
    demo(&quot;Hello, everybody!&quot;, &quot;Hello, world!&quot;, 7);
    demo(&quot;Hello, everybody!&quot; + 12, &quot;Hello, somebody!&quot; + 11, 5);
}
 | output=
First 13 chars of [Hello, world!] follow [Hello, everybody!]
First 13 chars of [Hello, everybody!] precede [Hello, world!]
First 7 chars of [Hello, everybody!] equal [Hello, world!]
First 5 chars of [body!] equal [body!]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcmp}}
{{dsc inc | cpp/string/wide/dsc wcsncmp}}
{{dsc inc | cpp/string/byte/dsc memcmp}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc see c | c/string/byte/strncmp}}
{{dsc end}}

[[de:cpp/string/byte/strncmp]]
[[es:cpp/string/byte/strncmp]]
[[fr:cpp/string/byte/strncmp]]
[[it:cpp/string/byte/strncmp]]
[[ja:cpp/string/byte/strncmp]]
[[pl:cpp/string/byte/strncmp]]
[[pt:cpp/string/byte/strncmp]]
[[ru:cpp/string/byte/strncmp]]
[[zh:cpp/string/byte/strncmp]]</text>
      <sha1>pohockbcu6ffgvw7ejj0okik0fuilv1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strncpy</title>
    <ns>0</ns>
    <id>1753</id>
    <revision>
      <id>77587</id>
      <parentid>59014</parentid>
      <timestamp>2015-03-30T20:38:31Z</timestamp>
      <contributor>
        <ip>209.49.233.137</ip>
      </contributor>
      <text xml:space="preserve" bytes="1848">{{cpp/title| strncpy}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
char *strncpy( char *dest, const char *src, std::size_t count );
}}

Copies at most {{tt|count}} characters of the byte string pointed to by {{tt|src}} (including the terminating null character) to character array pointed to by {{tt|dest}}. 

If {{tt|count}} is reached before the entire string {{tt|src}} was copied, the resulting character array is not null-terminated.

If, after copying the terminating null character from {{tt|src}}, {{tt|count}} is not reached, additional null characters are written to {{tt|dest}} until the total of {{tt|count}} characters have been written.

If the strings overlap, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | dest | pointer to the character array to copy to}}
{{par | src | pointer to the byte string to copy from}}
{{par | count | maximum number of characters to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
    const char* src = &quot;hi&quot;;
    char dest[6] = {'a', 'b', 'c', 'd', 'e', 'f'};
    std::strncpy(dest, src, 5);

    std::cout &lt;&lt; &quot;The contents of dest are: &quot;;
    for (char c : dest) {
        if (c) {
            std::cout &lt;&lt; c &lt;&lt; ' ';
        } else {
            std::cout &lt;&lt; &quot;\\0&quot; &lt;&lt; ' ';
        }
    }
    std::cout &lt;&lt; '\n';
}
 | output=
The contents of dest are: h i \0 \0 \0 f 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcpy}}
{{dsc inc | cpp/string/byte/dsc memcpy}}
{{dsc see c | c/string/byte/strncpy}}
{{dsc end}}

[[de:cpp/string/byte/strncpy]]
[[es:cpp/string/byte/strncpy]]
[[fr:cpp/string/byte/strncpy]]
[[it:cpp/string/byte/strncpy]]
[[ja:cpp/string/byte/strncpy]]
[[pt:cpp/string/byte/strncpy]]
[[ru:cpp/string/byte/strncpy]]
[[zh:cpp/string/byte/strncpy]]</text>
      <sha1>cnwgc9l6zudg9udgrhti7wbsdzh8txf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strpbrk</title>
    <ns>0</ns>
    <id>1754</id>
    <revision>
      <id>87495</id>
      <parentid>87477</parentid>
      <timestamp>2016-08-29T13:14:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>updated output to match new code in the example</comment>
      <text xml:space="preserve" bytes="1974">{{cpp/title| strpbrk}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstring}}
{{dcl |
const char* strpbrk( const char* dest, const char* breakset );
}}
{{dcl |
      char* strpbrk(       char* dest, const char* breakset );
}}
{{dcl end}}

Scans the null-terminated byte string pointed to by {{tt|dest}} for any character from the null-terminated byte string pointed to by {{tt|breakset}}, and returns a pointer to that character.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to be analyzed}}
{{par | breakset | pointer to the null-terminated byte string that contains the characters to search for}}
{{par end}}

===Return value===
Pointer to the first character in {{tt|dest}}, that is also in {{tt|breakset}}, or null pointer if no such character exists.

===Notes===
The name stands for &quot;string pointer break&quot;, because it returns a pointer to the first of the separator (&quot;break&quot;) characters

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
    const char* str = &quot;hello world, friend of mine!&quot;;
    const char* sep = &quot; ,!&quot;;

    unsigned int cnt = 0;
    do {
       str = std::strpbrk(str, sep); // find separator
       std::cout &lt;&lt; str &lt;&lt; '\n';
       if(str) str += std::strspn(str, sep); // skip separator
       ++cnt; // increment word count
    } while(str &amp;&amp; *str);

    std::cout &lt;&lt; &quot;There are &quot; &lt;&lt; cnt &lt;&lt; &quot; words\n&quot;;
}
 | output=
 world, friend of mine!
, friend of mine!
 of mine!
 mine!
!
There are 5 words
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcspn}}
{{dsc inc | cpp/string/byte/dsc strtok}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc see c | c/string/byte/strpbrk}}
{{dsc end}}

[[de:cpp/string/byte/strpbrk]]
[[es:cpp/string/byte/strpbrk]]
[[fr:cpp/string/byte/strpbrk]]
[[it:cpp/string/byte/strpbrk]]
[[ja:cpp/string/byte/strpbrk]]
[[pt:cpp/string/byte/strpbrk]]
[[ru:cpp/string/byte/strpbrk]]
[[zh:cpp/string/byte/strpbrk]]</text>
      <sha1>jy45m76xpsoyvimb4w1inonrrjtewgs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strrchr</title>
    <ns>0</ns>
    <id>1755</id>
    <revision>
      <id>59018</id>
      <parentid>51244</parentid>
      <timestamp>2013-06-01T06:25:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1442">{{cpp/title| strrchr}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstring}}
{{dcl |
const char* strrchr( const char* str, int ch );
}}
{{dcl | 1=
      char* strrchr(       char* str, int ch );
}}
{{dcl end}}

Finds the last occurrence of {{tt|ch}} (after conversion to {{c|char}}) in the byte string pointed to by {{tt|str}}. The terminating null character is considered to be a part of the string and can be found if searching for {{c|'\0'}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be analyzed}}
{{par | ch | character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or null pointer if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
    char input[] = &quot;/home/user/hello.c&quot;;
    char* output = std::strrchr(input, '/');
    if(output)
        std::cout &lt;&lt; output+1 &lt;&lt; '\n';
}
 | output=
hello.c
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/string/wide/dsc wcsrchr}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc see c | c/string/byte/strrchr}}
{{dsc end}}

[[de:cpp/string/byte/strrchr]]
[[es:cpp/string/byte/strrchr]]
[[fr:cpp/string/byte/strrchr]]
[[it:cpp/string/byte/strrchr]]
[[ja:cpp/string/byte/strrchr]]
[[pt:cpp/string/byte/strrchr]]
[[ru:cpp/string/byte/strrchr]]
[[zh:cpp/string/byte/strrchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strspn</title>
    <ns>0</ns>
    <id>1756</id>
    <revision>
      <id>75913</id>
      <parentid>75910</parentid>
      <timestamp>2015-02-04T18:45:59Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seaelso wcs</comment>
      <text xml:space="preserve" bytes="1618">{{cpp/title| strspn}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cstring |
size_t strspn( const char* dest, const char* src );
}}

Returns the length of the maximum initial segment (span) of the byte string pointed to by {{tt|dest}}, that consists of only the characters found in byte string pointed to by {{tt|src}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated byte string to be analyzed}}
{{par | src | pointer to the null-terminated byte string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters from byte string pointed to by {{tt|src}}

===Example===
{{example
 |
 | code=
#include &lt;cstring&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

const char *low_alpha = &quot;qwertyuiopasdfghjklzxcvbnm&quot;;
int main()
{
    std::string s = &quot;abcde312$#@&quot;;

    std::size_t spnsz = std::strspn(s.c_str(), low_alpha);
    std::cout &lt;&lt; &quot;After skipping initial lowercase letters from '&quot; &lt;&lt; s
              &lt;&lt; &quot;'\nThe remainder is '&quot; &lt;&lt; s.substr(spnsz) &lt;&lt; &quot;'\n&quot;;
}
 | output=
After skipping initial lowercase letters from 'abcde312$#@'
The remainder is '312$#@'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcspn}}
{{dsc inc | cpp/string/wide/dsc wcsspn}}
{{dsc inc | cpp/string/byte/dsc strpbrk}}
{{dsc see c | c/string/byte/strspn}}
{{dsc end}}

[[de:cpp/string/byte/strspn]]
[[es:cpp/string/byte/strspn]]
[[fr:cpp/string/byte/strspn]]
[[it:cpp/string/byte/strspn]]
[[ja:cpp/string/byte/strspn]]
[[pt:cpp/string/byte/strspn]]
[[ru:cpp/string/byte/strspn]]
[[zh:cpp/string/byte/strspn]]</text>
      <sha1>4d9o38kftuc32q84maatbikhcwzz5cg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strstr</title>
    <ns>0</ns>
    <id>1757</id>
    <revision>
      <id>65944</id>
      <parentid>59022</parentid>
      <timestamp>2013-10-16T12:13:19Z</timestamp>
      <contributor>
        <username>Eendy</username>
        <id>539</id>
      </contributor>
      <text xml:space="preserve" bytes="1927">{{cpp/title| strstr}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstring}}
{{dcl |
const char* strstr( const char* str, const char* target );
}}
{{dcl | 1=
      char* strstr(       char* str, const char* target );
}}
{{dcl end}}

Finds the first occurrence of the byte string {{tt|target}} in the byte string pointed to by {{tt|str}}. The terminating null characters are not compared.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to examine}}
{{par | target | pointer to the null-terminated byte string to search for}}
{{par end}}

===Return value===
Pointer to the first character of the found substring in {{tt|str}}, or {{lc|NULL}} if no such character is found. If {{tt|target}} points to an empty string, {{tt|str}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstring&gt;

int main()
{
    const char *str = &quot;Try not. Do, or do not. There is no try.&quot;;
    const char *target = &quot;not&quot;;
    const char *result = str;

    while ((result = std::strstr(result, target)) != NULL) {
        std::cout &lt;&lt; &quot;Found '&quot; &lt;&lt; target 
                  &lt;&lt; &quot;' starting at '&quot; &lt;&lt; result &lt;&lt; &quot;'\n&quot;;

        // Increment result, otherwise we'll find target at the same location
        ++result;
    }   
}
 | output=
Found 'not' starting at 'not. Do, or do not. There is no try.'
Found 'not' starting at 'not. There is no try.'
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/wide/dsc wcsstr}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/string/byte/dsc strrchr}}
{{dsc see c | c/string/byte/strstr}}
{{dsc end}}

[[de:cpp/string/byte/strstr]]
[[es:cpp/string/byte/strstr]]
[[fr:cpp/string/byte/strstr]]
[[it:cpp/string/byte/strstr]]
[[ja:cpp/string/byte/strstr]]
[[pt:cpp/string/byte/strstr]]
[[ru:cpp/string/byte/strstr]]
[[tr:cpp/string/byte/strstr]]
[[zh:cpp/string/byte/strstr]]</text>
      <sha1>j5mgw7bpptl1lahhmg0orxrsmf26we3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtod</title>
    <ns>0</ns>
    <id>2119</id>
    <redirect title="cpp/string/byte/strtof" />
    <revision>
      <id>14531</id>
      <parentid>14352</parentid>
      <timestamp>2011-11-27T01:41:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/string/narrow&quot; to &quot;cpp/string/byte&quot;</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtof</title>
    <ns>0</ns>
    <id>1758</id>
    <revision>
      <id>88276</id>
      <parentid>76838</parentid>
      <timestamp>2016-11-15T15:50:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso from_chars</comment>
      <text xml:space="preserve" bytes="2392">{{cpp/title| strtof | strtod | strtold}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl | since=c++11 |
float       strtof( const char* str, char** str_end );           
}}
{{dcl | 
double      strtod( const char* str, char** str_end );
}}
{{dcl | since=c++11 |
long double strtold( const char* str, char** str_end );
}}
{{dcl end}}

Interprets a floating point value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2float}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par | str_end | pointer to a pointer to character.}}
{{par end}}

===Return value===
Floating point value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|HUGE_VAL}}, {{lc|HUGE_VALF}} or {{lc|HUGE_VALL}} is returned. If no conversion can be performed, {{c|0}} is returned and *str_end is set to str.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cerrno&gt;
#include &lt;cstdlib&gt;

int main()
{
    const char* p = &quot;111.11 -2.22 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz&quot;;
    char* end;
    std::cout &lt;&lt; &quot;Parsing \&quot;&quot; &lt;&lt; p &lt;&lt; &quot;\&quot;:\n&quot;;
    for (double f = std::strtod(p, &amp;end); p != end; f = std::strtod(p, &amp;end))
    {
        std::cout &lt;&lt; &quot;'&quot; &lt;&lt; std::string(p, end-p) &lt;&lt; &quot;' -&gt; &quot;;
        p = end;
        if (errno == ERANGE){
            std::cout &lt;&lt; &quot;range error, got &quot;;
            errno = 0;
        }
        std::cout &lt;&lt; f &lt;&lt; '\n';
    }
}
 | output=
Parsing &quot;111.11 -2.22 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz&quot;:
'111.11' -&gt; 111.11
' -2.22' -&gt; -2.22
' 0X1.BC70A3D70A3D7P+6' -&gt; 111.11
'  1.18973e+4932' -&gt; range error, got inf
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc atof}}
{{dsc inc | cpp/string/wide/dsc wcstof}}
{{dsc inc | cpp/utility/dsc from_chars}} 
{{dsc see c | c/string/byte/strtof | strtof | strtod | strtold}}
{{dsc end}}

[[de:cpp/string/byte/strtof]]
[[es:cpp/string/byte/strtof]]
[[fr:cpp/string/byte/strtof]]
[[it:cpp/string/byte/strtof]]
[[ja:cpp/string/byte/strtof]]
[[pt:cpp/string/byte/strtof]]
[[ru:cpp/string/byte/strtof]]
[[zh:cpp/string/byte/strtof]]</text>
      <sha1>d1fzcl2bhw70okgfo656fwcv84r2hkf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtoimax</title>
    <ns>0</ns>
    <id>9530</id>
    <revision>
      <id>66729</id>
      <parentid>62959</parentid>
      <timestamp>2013-12-28T14:10:44Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2588">{{cpp/title| strtoimax| strtoumax}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cinttypes}}
{{dcl | since=c++11 | 
std::intmax_t strtoimax( const char* nptr, char** endptr, int base );
}}
{{dcl | since=c++11 |
std::uintmax_t strtoumax( const char* nptr, char** endptr, int base );
}}
{{dcl end}}

Interprets an integer value in a byte string pointed to by {{tt|nptr}}.

{{cpp/string/cvt str2int base | base=base}}

The functions sets the pointer pointed to by {{tt|endptr}} to point to the character past the last character interpreted. If {{tt|endptr}} is {{lc|NULL}}, it is ignored.

If the {{tt|nptr}} is empty or does not have the expected form, no conversion is performed, and (if {{tt|enptr}} is not {{lc|NULL}}) the value of {{tt|nptr}} is stored in the object pointed to by {{tt|endptr}}.

===Parameters===
{{par begin}}
{{par | nptr | pointer to the null-terminated byte string to be interpreted}}
{{par | endptr | pointer to a pointer to character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===

* If successful, an integer value corresponding to the contents of {{tt|str}} is returned.
* If the converted value falls out of range of corresponding return type, a range error occurs (setting {{lc|errno}} to {{lc|ERANGE}}) and {{lc|INTMAX_MAX}}, {{lc|INTMAX_MIN}}, {{lc|UINTMAX_MAX}} or {{c|0}} is returned, as appropriate.
* If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cinttypes&gt;

int main()
{
    std::string str = &quot;helloworld&quot;;
    std::intmax_t val = std::strtoimax(str.c_str(), nullptr, 36);
    std::cout &lt;&lt; str &lt;&lt; &quot; in base 36 is &quot; &lt;&lt; val &lt;&lt; &quot; in base 10\n&quot;;

    char* nptr;
    val = std::strtoimax(str.c_str(), &amp;nptr, 30);
    if(nptr != &amp;str[0] + str.size())
        std::cout &lt;&lt; str &lt;&lt; &quot; in base 30 is invalid.&quot;
                  &lt;&lt; &quot; The first invalid digit is &quot; &lt;&lt; *nptr &lt;&lt; '\n';
}
 | output=
helloworld in base 36 is 1767707668033969 in base 10
helloworld in base 30 is invalid. The first invalid digit is w
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcstoimax}}
{{dsc inc | cpp/string/byte/dsc strtol}}
{{dsc inc | cpp/string/byte/dsc strtoul}}
{{dsc see c | c/string/byte/strtoimax | strtoimax | strtoumax}}
{{dsc end}}

[[de:cpp/string/byte/strtoimax]]
[[es:cpp/string/byte/strtoimax]]
[[fr:cpp/string/byte/strtoimax]]
[[it:cpp/string/byte/strtoimax]]
[[ja:cpp/string/byte/strtoimax]]
[[pt:cpp/string/byte/strtoimax]]
[[ru:cpp/string/byte/strtoimax]]
[[zh:cpp/string/byte/strtoimax]]</text>
      <sha1>cmemb8t4x5gydyijb77l65ngzbnknuv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtok</title>
    <ns>0</ns>
    <id>5515</id>
    <revision>
      <id>75174</id>
      <parentid>51249</parentid>
      <timestamp>2015-01-09T02:12:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso pbrk/cspn/spn (non-destructive analog)</comment>
      <text xml:space="preserve" bytes="3146">{{cpp/title| strtok}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstring}}
{{dcl | 1=
char* strtok( char* str, const char* delim );
}}
{{dcl end}}

Finds the next token in a null-terminated byte string pointed to by {{tt|str}}. The separator characters are identified by null-terminated byte string pointed to by {{tt|delim}}.

This function is designed to be called multiples times to obtain successive tokens from the same string.

* If {{c|str !{{=}} NULL}}, the call is treated as the first call to {{tt|strtok}} for this particular string. The function searches for the first character which is ''not'' contained in {{tt|delim}}.
:* If no such character was found, there are no tokens in {{tt|str}} at all, and the function returns a null pointer. 
:* If such character was found, is it the ''beginning of the token''. The function then searches from that point on for the first character that ''is'' contained in {{tt|delim}}. 
::* If no such character was found, {{tt|str}} has only one token, and the future calls to {{tt|strtok}} will return a null pointer
::* If such character was found, it is ''replaced'' by the null character {{c|'\0'}} and the pointer to the following character is stored in a static location for subsequent invocations.
:* The function then returns the pointer to the beginning of the token
* If {{c|str {{==}} NULL}}, the call is treated as a subsequent calls to {{tt|strtok}}: the function continues from where it left in previous invocation. The behavior is the same as if the previously stored pointer is passed as {{c|str}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to tokenize}}
{{par | delim | pointer to the null-terminated byte string identifying delimiters}}
{{par end}}

===Return value===
Pointer to the beginning of the next token or {{lc|NULL}} if there are no more tokens.

===Notes===
This function is destructive: it writes the {{c|'\0'}} characters in the elements of the string {{tt|str}}. In particular, a [[cpp/language/string_literal|string literal]] cannot be used as the first argument of {{tt|strtok}}.

Each call to this function modifies a static variable: is not thread safe.

Unlike most other tokenizers, the delimiters in {{tt|strtok}} can be different for each subsequent token, and can even depend on the contents of the previous tokens.

===Example===
{{example
 |
 | code=
#include &lt;cstring&gt;
#include &lt;iostream&gt;

int main() 
{
    char input[100] = &quot;A bird came down the walk&quot;;
    char *token = std::strtok(input, &quot; &quot;);
    while (token != NULL) {
        std::cout &lt;&lt; token &lt;&lt; '\n';
        token = std::strtok(NULL, &quot; &quot;);
    }
}
 | output=
A
bird
came
down
the
walk
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strpbrk}}
{{dsc inc | cpp/string/byte/dsc strcspn}}
{{dsc inc | cpp/string/byte/dsc strspn}}
{{dsc see c | c/string/byte/strtok}}
{{dsc end}}

[[de:cpp/string/byte/strtok]]
[[es:cpp/string/byte/strtok]]
[[fr:cpp/string/byte/strtok]]
[[it:cpp/string/byte/strtok]]
[[ja:cpp/string/byte/strtok]]
[[pt:cpp/string/byte/strtok]]
[[ru:cpp/string/byte/strtok]]
[[zh:cpp/string/byte/strtok]]</text>
      <sha1>emae5dwhp5s690ps34sei3n2qn55962</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtol</title>
    <ns>0</ns>
    <id>1759</id>
    <revision>
      <id>90680</id>
      <parentid>88275</parentid>
      <timestamp>2017-03-07T18:03:20Z</timestamp>
      <contributor>
        <username>Tr00per</username>
        <id>6507</id>
      </contributor>
      <comment>Changed header errno.h -&gt; cerrno</comment>
      <text xml:space="preserve" bytes="2712">{{cpp/title| strtol | strtoll}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl | 
long      strtol( const char *str, char **str_end, int base );
}}
{{dcl | since=c++11 |
long long strtoll( const char *str, char **str_end, int base );
}}
{{dcl end}}

Interprets an integer value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

If the {{tt|str}} is empty or does not have the expected form, no conversion is performed, and (if {{tt|str_end}} is not {{lc|NULL}}) the value of {{tt|str}} is stored in the object pointed to by {{tt|str_end}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par | str_end | pointer to a pointer to character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===

* If successful, an integer value corresponding to the contents of {{tt|str}} is returned.
* If the converted value falls out of range of corresponding return type, a range error occurs (setting {{lc|errno}} to {{lc|ERANGE}}) and {{lc|LONG_MAX}}, {{lc|LONG_MIN}}, {{lc|LLONG_MAX}} or {{lc|LLONG_MIN}} is returned. 
* If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cerrno&gt;
#include &lt;cstdlib&gt;

int main()
{
    const char* p = &quot;10 200000000000000000000000000000 30 -40&quot;;
    char *end;
    std::cout &lt;&lt; &quot;Parsing '&quot; &lt;&lt; p &lt;&lt; &quot;':\n&quot;;
    for (long i = std::strtol(p, &amp;end, 10);
         p != end;
         i = std::strtol(p, &amp;end, 10))
    {
        std::cout &lt;&lt; &quot;'&quot; &lt;&lt; std::string(p, end-p) &lt;&lt; &quot;' -&gt; &quot;;
        p = end;
        if (errno == ERANGE){
            std::cout &lt;&lt; &quot;range error, got &quot;;
            errno = 0;
        }
        std::cout &lt;&lt; i &lt;&lt; '\n';
    }
}
 | output=
Parsing '10 200000000000000000000000000000 30 -40':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 9223372036854775807
' 30' -&gt; 30
' -40' -&gt; -40
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc atoi}}
{{dsc inc | cpp/string/byte/dsc strtoul}}
{{dsc inc | cpp/string/wide/dsc wcstol}}
{{dsc inc | cpp/string/byte/dsc strtof}}
{{dsc inc | cpp/utility/dsc from_chars}} 
{{dsc see c | c/string/byte/strtol | strtol | strtoll}}
{{dsc end}}

[[de:cpp/string/byte/strtol]]
[[es:cpp/string/byte/strtol]]
[[fr:cpp/string/byte/strtol]]
[[it:cpp/string/byte/strtol]]
[[ja:cpp/string/byte/strtol]]
[[pt:cpp/string/byte/strtol]]
[[ru:cpp/string/byte/strtol]]
[[zh:cpp/string/byte/strtol]]</text>
      <sha1>l5i7222a2bjqeqzrc2zye7huedvtg09</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtold</title>
    <ns>0</ns>
    <id>3687</id>
    <redirect title="cpp/string/byte/strtof" />
    <revision>
      <id>15838</id>
      <parentid>14534</parentid>
      <timestamp>2011-12-17T02:22:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix infinite redirect</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtoll</title>
    <ns>0</ns>
    <id>3685</id>
    <redirect title="cpp/string/byte/strtol" />
    <revision>
      <id>14535</id>
      <parentid>14360</parentid>
      <timestamp>2011-11-27T01:42:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/string/narrow&quot; to &quot;cpp/string/byte&quot;</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtoul</title>
    <ns>0</ns>
    <id>1760</id>
    <revision>
      <id>82738</id>
      <parentid>76500</parentid>
      <timestamp>2016-01-01T02:19:59Z</timestamp>
      <contributor>
        <ip>117.136.66.139</ip>
      </contributor>
      <text xml:space="preserve" bytes="2404">{{cpp/title| strtoul | strtoull}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl | 
unsigned long      strtoul( const char *str, char **str_end, int base );
}}
{{dcl | since=c++11 |
unsigned long long strtoull( const char *str, char **str_end, int base );
}}
{{dcl end}}

Interprets an unsigned integer value in a byte string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base | u=true}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated byte string to be interpreted}}
{{par | str_end | pointer to a pointer to character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|ULONG_MAX}} or {{lc|ULLONG_MAX}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;errno.h&gt;
#include &lt;cstdlib&gt;

int main()
{
    const char* p = &quot;10 200000000000000000000000000000 30 -40&quot;;
    char *end;
    std::cout &lt;&lt; &quot;Parsing '&quot; &lt;&lt; p &lt;&lt; &quot;':\n&quot;;
    for (unsigned long i = std::strtoul(p, &amp;end, 10);
         p != end;
         i = std::strtoul(p, &amp;end, 10))
    {
        std::cout &lt;&lt; &quot;'&quot; &lt;&lt; std::string(p, end-p) &lt;&lt; &quot;' -&gt; &quot;;
        p = end;
        if (errno == ERANGE){
            std::cout &lt;&lt; &quot;range error, got &quot;;
            errno = 0;
        }
        std::cout &lt;&lt; i &lt;&lt; '\n';
    }
}
 |p=true
 | output=
Parsing '10 200000000000000000000000000000 30 -40':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 18446744073709551615
' 30' -&gt; 30
' -40' -&gt; 18446744073709551576
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcstoul}}
{{dsc inc | cpp/string/byte/dsc atoi}}
{{dsc inc | cpp/string/byte/dsc strtol}}
{{dsc see c | c/string/byte/strtoul | strtoul | strtoull}}
{{dsc end}}

[[de:cpp/string/byte/strtoul]]
[[es:cpp/string/byte/strtoul]]
[[fr:cpp/string/byte/strtoul]]
[[it:cpp/string/byte/strtoul]]
[[ja:cpp/string/byte/strtoul]]
[[pt:cpp/string/byte/strtoul]]
[[ru:cpp/string/byte/strtoul]]
[[zh:cpp/string/byte/strtoul]]</text>
      <sha1>bcnhj1lda31troilrbo5urvwqp50te8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strtoull</title>
    <ns>0</ns>
    <id>3686</id>
    <redirect title="cpp/string/byte/strtoul" />
    <revision>
      <id>14537</id>
      <parentid>14364</parentid>
      <timestamp>2011-11-27T01:44:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/string/narrow&quot; to &quot;cpp/string/byte&quot;</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strtoul]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/strxfrm</title>
    <ns>0</ns>
    <id>2124</id>
    <revision>
      <id>85321</id>
      <parentid>85317</parentid>
      <timestamp>2016-04-17T12:16:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+ub</comment>
      <text xml:space="preserve" bytes="3207">{{cpp/title|strxfrm}}
{{cpp/string/byte/navbar}}
{{dcl begin}}
{{dcl header | cstring}}
{{dcl |
std::size_t strxfrm( char* dest, const char* src, std::size_t count );
}}
{{dcl end}}

Transforms the null-terminated byte string pointed to by {{tt|src}} into the implementation-defined form such that comparing two transformed strings with {{lc|std::strcmp}} gives the same result as comparing the original strings with {{lc|std::strcoll}}, in the current C locale.

The first {{tt|count}} characters of the transformed string are written to destination, including the terminating null character, and the length of the full transformed string is returned, excluding the terminating null character.

The behavior is undefined if the {{tt|dest}} array is not large enough. The behavior is undefined if {{tt|dest}} and {{tt|src}} overlap.

If {{tt|count}} is {{c|0}}, then {{tt|dest}} is allowed to be a null pointer.

===Notes===
The correct length of the buffer that can receive the entire transformed string is {{c|1+std::strxfrm(nullptr, src, 0)}}

This function is used when making multiple locale-dependent comparisons using the same string or set of strings, because it is more efficient to use {{lc|std::strxfrm}} to transform all the strings just once, and subsequently compare the transformed strings with {{lc|std::strcmp}}.

===Parameters===
{{par begin}}
{{par| dest | pointer to the first element of the array where the transformed string will be written }}
{{par| src | pointer to the first character of a null-terminated byte string to transform}}
{{par| count | maximum number of characters to be written }}
{{par end}}

===Return value===
The length of the transformed string, not including the terminating null-character.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;cstring&gt;
#include &lt;string&gt;
#include &lt;cassert&gt;

int main()
{
    char* loc = std::setlocale(LC_COLLATE, &quot;cs_CZ.iso88592&quot;);
    assert(loc);

    std::string in1 = &quot;hrnec&quot;;
    std::string out1(1+std::strxfrm(nullptr, in1.c_str(), 0), ' ');
    std::string in2 = &quot;chrt&quot;;
    std::string out2(1+std::strxfrm(nullptr, in2.c_str(), 0), ' ');

    std::strxfrm(&amp;out1[0], in1.c_str(), out1.size());
    std::strxfrm(&amp;out2[0], in2.c_str(), out2.size());

    std::cout &lt;&lt; &quot;In the Czech locale: &quot;;
    if(out1 &lt; out2)
         std::cout &lt;&lt; in1 &lt;&lt; &quot; before &quot; &lt;&lt; in2 &lt;&lt; '\n';
    else
         std::cout &lt;&lt; in2 &lt;&lt; &quot; before &quot; &lt;&lt; in1 &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;In lexicographical comparison: &quot;;
    if(in1 &lt; in2)
         std::cout &lt;&lt; in1 &lt;&lt; &quot; before &quot; &lt;&lt; in2 &lt;&lt; '\n';
    else
         std::cout &lt;&lt; in2 &lt;&lt; &quot; before &quot; &lt;&lt; in1 &lt;&lt; '\n';

}
 | output=
In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcsxfrm}}
{{dsc inc | cpp/locale/collate/dsc do_transform}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc see c | c/string/byte/strxfrm}}
{{dsc end}}

[[de:cpp/string/byte/strxfrm]]
[[es:cpp/string/byte/strxfrm]]
[[fr:cpp/string/byte/strxfrm]]
[[it:cpp/string/byte/strxfrm]]
[[ja:cpp/string/byte/strxfrm]]
[[pt:cpp/string/byte/strxfrm]]
[[ru:cpp/string/byte/strxfrm]]
[[zh:cpp/string/byte/strxfrm]]</text>
      <sha1>lpihvthxy896udha521ts8qopssldgu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/tolower</title>
    <ns>0</ns>
    <id>1761</id>
    <revision>
      <id>75034</id>
      <parentid>75026</parentid>
      <timestamp>2015-01-03T17:19:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 75026 by [[Special:Contributions/85.177.234.244|85.177.234.244]] ([[User talk:85.177.234.244|talk]]) that could be a useful addition to the C side of the wiki, but doesn't help here (and also isn't a complete program)</comment>
      <text xml:space="preserve" bytes="1909">{{cpp/title|tolower}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int tolower( int ch );
}}

Converts the given character to lowercase according to the character conversion rules defined by the currently installed C locale.

In the default &quot;C&quot; locale, the following uppercase letters {{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}} are replaced with respective lowercase letters {{tt|abcdefghijklmnopqrstuvwxyz}}.

===Parameters===
{{par begin}}
{{par | ch | character to be converted. If the value of {{tt|ch}} is not representable as {{c|unsigned char}} and does not equal {{c|EOF}}, the behavior is undefined}}
{{par end}}

===Return value===
Lowercase version of {{tt|ch}} or unmodified {{tt|ch}} if no lowercase version is listed in the current C locale.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;

int main()
{
    unsigned char c = '\xb4'; // the character Ž in ISO-8859-15
                              // but ´ (acute accent) in ISO-8859-1 

    std::setlocale(LC_ALL, &quot;en_US.iso88591&quot;);
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;
    std::cout &lt;&lt; &quot;in iso8859-1, tolower('0xb4') gives &quot;
              &lt;&lt; std::tolower(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.iso885915&quot;);
    std::cout &lt;&lt; &quot;in iso8859-15, tolower('0xb4') gives &quot;
              &lt;&lt; std::tolower(c) &lt;&lt; '\n';
}
| output=
in iso8859-1, tolower('0xb4') gives 0xb4
in iso8859-15, tolower('0xb4') gives 0xb8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc toupper}}
{{dsc inc | cpp/locale/dsc tolower}}
{{dsc inc | cpp/string/wide/dsc towlower}}
{{dsc see c | c/string/byte/tolower}}
{{dsc end}}

[[de:cpp/string/byte/tolower]]
[[es:cpp/string/byte/tolower]]
[[fr:cpp/string/byte/tolower]]
[[it:cpp/string/byte/tolower]]
[[ja:cpp/string/byte/tolower]]
[[pl:cpp/string/byte/tolower]]
[[pt:cpp/string/byte/tolower]]
[[ru:cpp/string/byte/tolower]]
[[zh:cpp/string/byte/tolower]]</text>
      <sha1>p2pcu2mdaqhufzyrles8cyl61rjr57t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/byte/toupper</title>
    <ns>0</ns>
    <id>1762</id>
    <revision>
      <id>83257</id>
      <parentid>83253</parentid>
      <timestamp>2016-01-28T15:24:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 83253 by [[Special:Contributions/95.49.48.134|95.49.48.134]] ([[User talk:95.49.48.134|talk]]) it is UB</comment>
      <text xml:space="preserve" bytes="1887">{{cpp/title|toupper}}
{{cpp/string/byte/navbar}}
{{ddcl | header=cctype |
int toupper( int ch );
}}

Converts the given character to uppercase according to the character conversion rules defined by the currently installed C locale.

In the default &quot;C&quot; locale, the following lowercase letters {{tt|abcdefghijklmnopqrstuvwxyz}} are replaced with respective uppercase letters {{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}.

===Parameters===
{{par begin}}
{{par | ch | character to be converted. If the value of {{tt|ch}} is not representable as {{c|unsigned char}} and does not equal {{c|EOF}}, the behavior is undefined.}}
{{par end}}

===Return value===
Converted character or {{tt|ch}} if no uppercase version is defined by the current C locale.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cctype&gt;
#include &lt;clocale&gt;

int main()
{
    unsigned char c = '\xb8'; // the character ž in ISO-8859-15
                              // but ¸ (cedilla) in ISO-8859-1 

    std::setlocale(LC_ALL, &quot;en_US.iso88591&quot;);
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;
    std::cout &lt;&lt; &quot;in iso8859-1, toupper('0xb8') gives &quot; &lt;&lt; std::toupper(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.iso885915&quot;);
    std::cout &lt;&lt; &quot;in iso8859-15, toupper('0xb8') gives &quot; &lt;&lt; std::toupper(c) &lt;&lt; '\n';
}
| output=
in iso8859-1, toupper('0xb8') gives 0xb8
in iso8859-15, toupper('0xb8') gives 0xb4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc tolower}}
{{dsc inc | cpp/locale/dsc toupper}}
{{dsc inc | cpp/string/wide/dsc towupper}}
{{dsc see c | c/string/byte/toupper}}
{{dsc end}}

[[de:cpp/string/byte/toupper]]
[[es:cpp/string/byte/toupper]]
[[fr:cpp/string/byte/toupper]]
[[it:cpp/string/byte/toupper]]
[[ja:cpp/string/byte/toupper]]
[[ko:cpp/string/byte/toupper]]
[[pl:cpp/string/byte/toupper]]
[[pt:cpp/string/byte/toupper]]
[[ru:cpp/string/byte/toupper]]
[[zh:cpp/string/byte/toupper]]</text>
      <sha1>fyoixi2frg617vccr64rq632dge6ckt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits</title>
    <ns>0</ns>
    <id>2238</id>
    <revision>
      <id>91132</id>
      <parentid>90309</parentid>
      <timestamp>2017-03-21T03:33:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Example */ convert to unsigned char before passing to std::toupper</comment>
      <text xml:space="preserve" bytes="4554">{{cpp/title|char_traits}}
{{cpp/string/char_traits/navbar}}
{{ddcl | header=string | 1=
template&lt;
    class CharT 
&gt; class char_traits;
}}

The {{tt|char_traits}} class is a traits class template that abstracts basic character and string operations for a given character type. The defined operation set is such that generic algorithms almost always can be implemented in terms of it. It is thus possible to use such algorithms with almost any possible character or string type, just by supplying customized {{tt|char_traits}} class.

The {{tt|char_traits}} class template serves as a basis for explicit instantiations. The user can [[cpp/language/extending_std|provide a specialization]] for any custom character types. Several specializations are defined for the standard character types. The values of the member typedefs are as follows.

{| class=&quot;wikitable&quot;
|-
! Instantiation 
! {{tt|char_type}}
! {{tt|int_type}}
! {{tt|off_type}}
! {{tt|pos_type}}
! {{tt|state_type}}
|-
| {{c|char_traits&lt;char&gt;}} 
| {{c|char}}
| {{c|int}}
| {{lc|std::streamoff}}
| {{lc|std::streampos}}
| {{lc|std::mbstate_t}}
|-
| {{c|char_traits&lt;wchar_t&gt;}}
| {{c|wchar_t}}
| {{lc|std::wint_t}}
| {{lc|std::wstreamoff}}
| {{lc|std::wstreampos}}
| {{lc|std::mbstate_t}}
|-
| {{c|char_traits&lt;char16_t&gt;}} {{mark c++11}}
| {{c|char16_t}}
| {{lc|std::uint_least16_t}}
| {{lc|std::streamoff}} 
| {{lc|std::u16streampos}}
| {{lc|std::mbstate_t}}
|-
| {{c|char_traits&lt;char32_t&gt;}} {{mark c++11}}
| {{c|char32_t}}
| {{lc|std::uint_least32_t}}
| {{lc|std::streamoff}} 
| {{lc|std::u32streampos}}
| {{lc|std::mbstate_t}}
|}

The {{tt|char_traits}} class template satisfies the requirements of {{concept|CharTraits}}.

{{todo|reason=simplify the description, emphasize that char_traits can be user defined}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|char_type}} | {{tt|CharT}}}}
{{dsc | {{tt|int_type}} | an integer type that can hold all values of {{tt|char_type}} plus {{tt|EOF}}}}
{{dsc | {{tt|off_type}} | ''implementation-defined''}}
{{dsc | {{tt|pos_type}} | ''implementation-defined''}}
{{dsc | {{tt|state_type}} | ''implementation-defined''}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/string/char_traits/dsc assign}}
{{dsc inc | cpp/string/char_traits/dsc cmp}}
{{dsc inc | cpp/string/char_traits/dsc move}}
{{dsc inc | cpp/string/char_traits/dsc copy}}
{{dsc inc | cpp/string/char_traits/dsc compare}}
{{dsc inc | cpp/string/char_traits/dsc length}}
{{dsc inc | cpp/string/char_traits/dsc find}}
{{dsc inc | cpp/string/char_traits/dsc to_char_type}}
{{dsc inc | cpp/string/char_traits/dsc to_int_type}}
{{dsc inc | cpp/string/char_traits/dsc eq_int_type}}
{{dsc inc | cpp/string/char_traits/dsc eof}}
{{dsc inc | cpp/string/char_traits/dsc not_eof}}
{{dsc end}}

===Example===
{{example
 | User-defined character traits may be used to provide [http://www.gotw.ca/gotw/029.htm case-insensitive comparison]
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;cctype&gt;

struct ci_char_traits : public std::char_traits&lt;char&gt; {
    static char to_upper(char ch) {
        return std::toupper((unsigned char) ch);
    }
    static bool eq(char c1, char c2) {
         return to_upper(c1) == to_upper(c2);
     }
    static bool lt(char c1, char c2) {
         return to_upper(c1) &lt;  to_upper(c2);
    }
    static int compare(const char* s1, const char* s2, size_t n) {
        while ( n-- != 0 ) {
            if ( to_upper(*s1) &lt; to_upper(*s2) ) return -1;
            if ( to_upper(*s1) &gt; to_upper(*s2) ) return 1;
            ++s1; ++s2;
        }
        return 0;
    }
    static const char* find(const char* s, int n, char a) {
        auto const ua (to_upper(a));
        while ( n-- != 0 ) 
        {
            if (to_upper(*s) == ua)
                return s;
            s++;
        }
        return nullptr;
    }
};

using ci_string = std::basic_string&lt;char, ci_char_traits&gt;;

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const ci_string&amp; str) {
    return os.write(str.data(), str.size());
}

int main()
{
    ci_string s1 = &quot;Hello&quot;;
    ci_string s2 = &quot;heLLo&quot;;
    if (s1 == s2)
        std::cout &lt;&lt; s1 &lt;&lt; &quot; and &quot; &lt;&lt; s2 &lt;&lt; &quot; are equal\n&quot;;
}
| output=
Hello and heLLo are equal
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/dsc basic_string}}
{{dsc end}}

[[de:cpp/string/char traits]]
[[es:cpp/string/char traits]]
[[fr:cpp/string/char traits]]
[[it:cpp/string/char traits]]
[[ja:cpp/string/char traits]]
[[pt:cpp/string/char traits]]
[[ru:cpp/string/char traits]]
[[zh:cpp/string/char traits]]</text>
      <sha1>rykzsju4hajm067s4edodterxuun3d1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/assign</title>
    <ns>0</ns>
    <id>9105</id>
    <revision>
      <id>91820</id>
      <parentid>88210</parentid>
      <timestamp>2017-03-31T19:58:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1376">{{cpp/string/char_traits/title|assign}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin|num=1}}
{{dcl |until=c++17|
static void assign( char_type&amp; r, const char_type&amp; a );
}}
{{dcl |since=c++17|
static constexpr void assign( char_type&amp; r, const char_type&amp; a );
}}
{{dcl rev end}}
{{dcl | num=2 |
static char_type* assign( char_type* p, std::size_t count, char_type a );
}}
{{dcl end}}

Assigns a character.

@1@ Assigns character {{tt|a}} to character {{tt|r}}.
@2@ Assigns character {{tt|a}} to each character in {{tt|count}} characters in the character sequence pointed to by {{tt|p}}.

===Parameters===
{{par begin}}
{{par | a | character value to assign}}
{{par | r | character to assign to}}
{{par | p | pointer to a character sequence to assign to}}
{{par | count | the length of the character sequence}}
{{par end}}

===Return value===
@1@ (none)
@2@ {{tt|p}}

===Exceptions===
@1@ {{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
@2@ (none)

===Complexity===
@1@ Constant.
@2@ Linear in {{tt|count}}

[[de:cpp/string/char traits/assign]]
[[es:cpp/string/char traits/assign]]
[[fr:cpp/string/char traits/assign]]
[[it:cpp/string/char traits/assign]]
[[ja:cpp/string/char traits/assign]]
[[pt:cpp/string/char traits/assign]]
[[ru:cpp/string/char traits/assign]]
[[zh:cpp/string/char traits/assign]]</text>
      <sha1>anhttr6fx7d9vkneccbevq37197kb7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/cmp</title>
    <ns>0</ns>
    <id>9106</id>
    <revision>
      <id>91495</id>
      <parentid>66135</parentid>
      <timestamp>2017-03-31T19:47:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1563">{{cpp/string/char_traits/title|eq|lt}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
static bool eq( char_type a, char_type b );
}}
{{dcl | since=c++11 |
static constexpr bool eq( char_type a, char_type b );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c++11 |
static bool lt( char_type a, char_type b );
}}
{{dcl | since=c++11 |
static constexpr bool lt( char_type a, char_type b );
}}
{{dcl rev end}}
{{dcl end}}

Compares two characters.

@1@ Compares {{tt|a}} and {{tt|b}} for equality.
@2@ Compares {{tt|a}} and {{tt|b}} in such a way that they are totally ordered.

{{rev begin}}
{{rev | since=c++11 |
For the {{tt|char}} specialization, {{tt|eq}} and {{tt|lt}} are defined identically to the built-in operators {{tt|{{==}}}} and {{tt|&amp;lt;}} for type {{tt|unsigned char}} (''not'' {{tt|char}}).
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | a, b | character values to compare}}
{{par end}}

===Return value===
@1@ {{c|true}} if {{tt|a}} and {{tt|b}} are equal, {{c|false}} otherwise.
@2@ {{c|true}} if {{tt|a}} is ''less'' than {{tt|b}}, {{c|false}} otherwise.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant.

[[de:cpp/string/char traits/cmp]]
[[es:cpp/string/char traits/cmp]]
[[fr:cpp/string/char traits/cmp]]
[[it:cpp/string/char traits/cmp]]
[[ja:cpp/string/char traits/cmp]]
[[pt:cpp/string/char traits/cmp]]
[[ru:cpp/string/char traits/cmp]]
[[zh:cpp/string/char traits/cmp]]</text>
      <sha1>jz37momnkko82ia5v2pfrctul8vvwbk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/compare</title>
    <ns>0</ns>
    <id>9117</id>
    <revision>
      <id>88212</id>
      <parentid>62046</parentid>
      <timestamp>2016-11-14T17:02:15Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0426r1 constexpr</comment>
      <text xml:space="preserve" bytes="1288">{{cpp/string/char_traits/title|compare}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl|until=c++17|
static int compare( const char_type* s1, const char_type* s2, std::size_t count );
}}
{{dcl|since=c++17|
static constexpr int compare( const char_type* s1, const char_type* s2, std::size_t count );
}}
{{dcl rev end}}
{{dcl end}}

Compares the first {{tt|count}} characters of the character strings {{tt|s1}} and {{tt|s2}}. The comparison is done lexicographically.

If {{tt|count}} is zero, strings are considered equal.

===Parameters===
{{par begin}}
{{par | s1, s2 | pointers to character strings to compare}}
{{par | count | the number of characters to compare from each character string}}
{{par end}}

===Return value===
Negative value if {{tt|s1}} is ''less than'' {{tt|s2}}.

{{c|0}} if {{tt|s1}} is ''equal to'' {{tt|s2}}.

Positive value if {{tt|s1}} is ''greater than'' {{tt|s2}}.

===Exceptions===
(none)

===Complexity===
Linear in {{tt|count}}.

[[de:cpp/string/char traits/compare]]
[[es:cpp/string/char traits/compare]]
[[fr:cpp/string/char traits/compare]]
[[it:cpp/string/char traits/compare]]
[[ja:cpp/string/char traits/compare]]
[[pt:cpp/string/char traits/compare]]
[[ru:cpp/string/char traits/compare]]
[[zh:cpp/string/char traits/compare]]</text>
      <sha1>btv6d4eud30g0auqih7q58zgzma88b7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/copy</title>
    <ns>0</ns>
    <id>9116</id>
    <revision>
      <id>51259</id>
      <parentid>46297</parentid>
      <timestamp>2013-06-01T03:56:54Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1015">{{cpp/string/char_traits/title|copy}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl | 
static char_type* copy( char_type* dest, const char_type* src, std::size_t count );
}}
{{dcl end}}

Copies {{tt|count}} character from character string pointed to by {{tt|src}} to character string pointed to by {{tt|dest}}.

The behavior is undefined if copied character ranges overlap, i.e. {{tt|src}} is in [{{tt|dest}}, {{tt|dest + count}}).

===Parameters===
{{par begin}}
{{par | dest | pointer to a character string to copy to}}
{{par | src | pointer to a character string to copy from}}
{{par | count | the number of characters to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Exceptions===
(none)

===Complexity===
Linear.

[[de:cpp/string/char traits/copy]]
[[es:cpp/string/char traits/copy]]
[[fr:cpp/string/char traits/copy]]
[[it:cpp/string/char traits/copy]]
[[ja:cpp/string/char traits/copy]]
[[pt:cpp/string/char traits/copy]]
[[ru:cpp/string/char traits/copy]]
[[zh:cpp/string/char traits/copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/eof</title>
    <ns>0</ns>
    <id>9107</id>
    <revision>
      <id>91704</id>
      <parentid>64881</parentid>
      <timestamp>2017-03-31T19:55:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="929">{{cpp/string/char_traits/title|eof}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
static int_type eof();
}}
{{dcl | since=c++11 |
static constexpr int_type eof();
}}
{{dcl rev end}}
{{dcl end}}

Returns a value not equivalent to any value of type {{tt|char_type}}.

===Parameters===
(none)

===Return value===
A value not equivalent to any value of type {{tt|char_type}}.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/char_traits/dsc not_eof}}
{{dsc end}}

[[de:cpp/string/char traits/eof]]
[[es:cpp/string/char traits/eof]]
[[fr:cpp/string/char traits/eof]]
[[it:cpp/string/char traits/eof]]
[[ja:cpp/string/char traits/eof]]
[[pt:cpp/string/char traits/eof]]
[[ru:cpp/string/char traits/eof]]
[[zh:cpp/string/char traits/eof]]</text>
      <sha1>gu050flnzo3xs4mv60u7703gvfv3ilt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/eq int type</title>
    <ns>0</ns>
    <id>9109</id>
    <revision>
      <id>91913</id>
      <parentid>64883</parentid>
      <timestamp>2017-03-31T20:01:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1025">{{cpp/string/char_traits/title|eq_int_type}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
static bool eq_int_type( int_type c1, int_type c2 );
}}
{{dcl | since=c++11 |
static constexpr bool eq_int_type( int_type c1, int_type c2 );
}}
{{dcl rev end}}
{{dcl end}}

Checks whether two values of type {{tt|int_type}} are equal.

===Parameters===
{{par begin}}
{{par | c1, c2 | values to compare}}
{{par end}}

===Return value===
{{c|true}} if {{tt|c1}} is equal to {{tt|c2}}, {{c|false}} otherwise.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant.

[[de:cpp/string/char traits/eq int type]]
[[es:cpp/string/char traits/eq int type]]
[[fr:cpp/string/char traits/eq int type]]
[[it:cpp/string/char traits/eq int type]]
[[ja:cpp/string/char traits/eq int type]]
[[pt:cpp/string/char traits/eq int type]]
[[ru:cpp/string/char traits/eq int type]]
[[zh:cpp/string/char traits/eq int type]]</text>
      <sha1>2337rgn19lf0keayo1mbaukp4nnyjx6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/find</title>
    <ns>0</ns>
    <id>9111</id>
    <revision>
      <id>88213</id>
      <parentid>62040</parentid>
      <timestamp>2016-11-14T17:03:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0426r1 constexpr</comment>
      <text xml:space="preserve" bytes="1197">{{cpp/string/char_traits/title|find}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17| 
static const char_type* find( const char_type* p, std::size_t count, const char_type&amp; ch );
}}
{{dcl | since=c++17| 
static constexpr const char_type* find( const char_type* p, std::size_t count, const char_type&amp; ch );
}}
{{dcl rev end}}
{{dcl end}}

Searches for character {{tt|ch}} within the first {{tt|count}} characters of the sequence pointed to by {{tt|p}}.

===Parameters===
{{par begin}}
{{par | p | pointer to a character string to search}}
{{par | count | the number of characters to analyze}}
{{par | ch | the character to search for}}
{{par end}}

===Return value===
A pointer to the first character in the range specified by {{tt|[p, p + count)}} that compares equal to {{tt|ch}}, or {{lc|NULL}} if not found.

===Exceptions===
(none)

===Complexity===
Linear in {{tt|count}}.

[[de:cpp/string/char traits/find]]
[[es:cpp/string/char traits/find]]
[[fr:cpp/string/char traits/find]]
[[it:cpp/string/char traits/find]]
[[ja:cpp/string/char traits/find]]
[[pt:cpp/string/char traits/find]]
[[ru:cpp/string/char traits/find]]
[[zh:cpp/string/char traits/find]]</text>
      <sha1>50u5h8zzmvj0sy9moc1yn0qgcg9hf7l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/length</title>
    <ns>0</ns>
    <id>9110</id>
    <revision>
      <id>88211</id>
      <parentid>88209</parentid>
      <timestamp>2016-11-14T17:01:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>dcl rev template</comment>
      <text xml:space="preserve" bytes="1311">{{cpp/string/char_traits/title|length}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++17| 
static std::size_t length( const char_type* s );
}}
{{dcl |since=c++17| 
static constexpr std::size_t length( const char_type* s );
}}
{{dcl rev end}}
{{dcl end}}

Returns the length of the character sequence pointed to by {{tt|s}}, that is, the position of the terminating null character ({{c|CharT()}}).

===Parameters===
{{par begin}}
{{par | s | pointer to a character sequence to return length of}}
{{par end}}

===Return value===
The length of character sequence pointed to by {{tt|s}}.

===Exceptions===
(none)

===Complexity===
Linear.

===Example===
{{
example
| code=
#include &lt;iostream&gt;

void print(const char* str)
{
  std::cout &lt;&lt; &quot;string '&quot; &lt;&lt; str &lt;&lt; &quot;' &quot;;
  std::cout &lt;&lt; &quot;length = &quot; &lt;&lt; std::char_traits&lt;char&gt;::length(str) &lt;&lt; '\n';
}

int main()
{
  print(&quot;foo&quot;);

  std::string s(&quot;booo&quot;);
  print(s.c_str());
}
| output=
string 'foo' length = 3
string 'booo' length = 4
}}

[[de:cpp/string/char traits/length]]
[[es:cpp/string/char traits/length]]
[[fr:cpp/string/char traits/length]]
[[it:cpp/string/char traits/length]]
[[ja:cpp/string/char traits/length]]
[[pt:cpp/string/char traits/length]]
[[ru:cpp/string/char traits/length]]
[[zh:cpp/string/char traits/length]]</text>
      <sha1>sp078xtw0yliovc51zwjibi8bf66vsu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/move</title>
    <ns>0</ns>
    <id>9115</id>
    <revision>
      <id>51264</id>
      <parentid>46298</parentid>
      <timestamp>2013-06-01T03:57:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="1017">{{cpp/string/char_traits/title|move}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl | 
static char_type* move( char_type* dest, const char_type* src, std::size_t count );
}}
{{dcl end}}

Copies {{tt|count}} character from character string pointed to by {{tt|src}} to character string pointed to by {{tt|dest}}.

Performs correctly even if the copied character ranges overlap, i.e. {{tt|src}} is in [{{tt|dest}}, {{tt|dest + count}}).

===Parameters===
{{par begin}}
{{par | dest | pointer to a character string to copy to}}
{{par | src | pointer to a character string to copy from}}
{{par | count | the number of characters to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Exceptions===
(none)

===Complexity===
Linear.

[[de:cpp/string/char traits/move]]
[[es:cpp/string/char traits/move]]
[[fr:cpp/string/char traits/move]]
[[it:cpp/string/char traits/move]]
[[ja:cpp/string/char traits/move]]
[[pt:cpp/string/char traits/move]]
[[ru:cpp/string/char traits/move]]
[[zh:cpp/string/char traits/move]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/not eof</title>
    <ns>0</ns>
    <id>9108</id>
    <revision>
      <id>91601</id>
      <parentid>64882</parentid>
      <timestamp>2017-03-31T19:51:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1058">{{cpp/string/char_traits/title|not_eof}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
static int_type not_eof( int_type e );
}}
{{dcl | since=c++11 |
static constexpr int_type not_eof( int_type e );
}}
{{dcl rev end}}
{{dcl end}}

Checks whether {{tt|e}} is not equivalent to ''eof'' value.

===Parameters===
{{par begin}}
{{par | e | value to analyze}}
{{par end}}

===Return value===
{{tt|e}} if {{tt|e}} and ''eof'' value are not equivalent, some other value otherwise.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/char_traits/dsc eof}}
{{dsc end}}

[[de:cpp/string/char traits/not eof]]
[[es:cpp/string/char traits/not eof]]
[[fr:cpp/string/char traits/not eof]]
[[it:cpp/string/char traits/not eof]]
[[ja:cpp/string/char traits/not eof]]
[[pt:cpp/string/char traits/not eof]]
[[ru:cpp/string/char traits/not eof]]
[[zh:cpp/string/char traits/not eof]]</text>
      <sha1>5mno7p2n6ghgvujrm1n1be0whhv4r9z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/to char type</title>
    <ns>0</ns>
    <id>9112</id>
    <revision>
      <id>91567</id>
      <parentid>64884</parentid>
      <timestamp>2017-03-31T19:50:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1034">{{cpp/string/char_traits/title|to_char_type}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
static char_type to_char_type( int_type c );
}}
{{dcl | since=c++11 | 
static constexpr char_type to_char_type( int_type c );
}}
{{dcl rev end}}
{{dcl end}}

Converts a value of {{tt|int_type}} to {{tt|char_type}}. If there are no equivalent value, the results are unspecified.

===Parameters===
{{par begin}}
{{par | c | value to convert}}
{{par end}}

===Return value===
A value equivalent to {{tt|c}}.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant.

[[de:cpp/string/char traits/to char type]]
[[es:cpp/string/char traits/to char type]]
[[fr:cpp/string/char traits/to char type]]
[[it:cpp/string/char traits/to char type]]
[[ja:cpp/string/char traits/to char type]]
[[pt:cpp/string/char traits/to char type]]
[[ru:cpp/string/char traits/to char type]]
[[zh:cpp/string/char traits/to char type]]</text>
      <sha1>fz30rtyomuxqmd49nu4r6qfqaqgmd4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/char traits/to int type</title>
    <ns>0</ns>
    <id>9113</id>
    <revision>
      <id>91555</id>
      <parentid>64885</parentid>
      <timestamp>2017-03-31T19:49:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="960">{{cpp/string/char_traits/title|to_int_type}}
{{cpp/string/char_traits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
static int_type to_int_type( char_type c );
}}
{{dcl | since=c++11 | 
static constexpr int_type to_int_type( char_type c );
}}
{{dcl rev end}}
{{dcl end}}

Converts a value of {{tt|char_type}} to {{tt|int_type}}.

===Parameters===
{{par begin}}
{{par | c | value to convert}}
{{par end}}

===Return value===
A value equivalent to {{tt|c}}.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Complexity===
Constant.

[[de:cpp/string/char traits/to int type]]
[[es:cpp/string/char traits/to int type]]
[[fr:cpp/string/char traits/to int type]]
[[it:cpp/string/char traits/to int type]]
[[ja:cpp/string/char traits/to int type]]
[[pt:cpp/string/char traits/to int type]]
[[ru:cpp/string/char traits/to int type]]
[[zh:cpp/string/char traits/to int type]]</text>
      <sha1>8at38cf6y5tzig9m48tyu2wvxmkkipf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/getline</title>
    <ns>0</ns>
    <id>2749</id>
    <redirect title="cpp/string/basic string/getline" />
    <revision>
      <id>10410</id>
      <timestamp>2011-09-12T18:41:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/getline]] to [[cpp/string/basic string/getline]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/string/basic string/getline]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte</title>
    <ns>0</ns>
    <id>3899</id>
    <revision>
      <id>89928</id>
      <parentid>83218</parentid>
      <timestamp>2017-01-30T20:38:19Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link SCSU</comment>
      <text xml:space="preserve" bytes="3801">{{title|Null-terminated multibyte strings}}
{{cpp/string/multibyte/navbar}}

A null-terminated multibyte string (NTMBS), or &quot;multibyte string&quot;, is a sequence of nonzero bytes followed by a byte with value zero (the terminating null character).

Each character stored in the string may occupy more than one byte. The encoding used to represent characters in a multibyte character string is locale-specific: it may be UTF-8, GB18030, EUC-JP, Shift-JIS, etc. For example, the char array {{c|{'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} }} is an NTMBS holding the string {{c|&quot;你好&quot;}} in UTF-8 multibyte encoding: the first three bytes encode the character 你, the next three bytes encode the character 好. The same string encoded in GB18030 is the char array {{c|{'\xc4', '\xe3', '\xba', '\xc3', '\0'} }}, where each of the two characters is encoded as a two-byte sequence.

In some multibyte encodings, any given multibyte character sequence may represent different characters depending on the previous byte sequences, known as &quot;shift sequences&quot;. Such encodings are known as state-dependent: knowledge of the current shift state is required to interpret each character. An NTMBS is only valid if it begins and ends in the initial shift state: if a shift sequence was used, the corresponding unshift sequence has to be present before the terminating null character. Examples of such encodings are the 7-bit JIS, BOCU-1 and [http://www.unicode.org/reports/tr6 SCSU].

A multibyte character string is layout-compatible with null-terminated byte string (NTBS), that is, can be stored, copied, and examined using the same facilities, except for calculating the number of characters. If the correct locale is in effect, I/O functions also handle multibyte strings. Multibyte strings can be converted to and from wide strings using the {{lc|std::codecvt}} member functions, {{lc|std::wstring_convert}}, or the following locale-dependent conversion functions:

===Multibyte/wide character conversions===
{{dsc begin}}
{{dsc header | cstdlib}}
{{dsc inc | cpp/string/multibyte/dsc mblen}}
{{dsc inc | cpp/string/multibyte/dsc mbtowc}}
{{dsc inc | cpp/string/multibyte/dsc wctomb}}
{{dsc inc | cpp/string/multibyte/dsc mbstowcs}}
{{dsc inc | cpp/string/multibyte/dsc wcstombs}}
{{dsc header | cwchar}}
{{dsc inc | cpp/string/multibyte/dsc mbsinit}}
{{dsc inc | cpp/string/multibyte/dsc btowc}}
{{dsc inc | cpp/string/multibyte/dsc wctob}}
{{dsc inc | cpp/string/multibyte/dsc mbrlen}}
{{dsc inc | cpp/string/multibyte/dsc mbrtowc}}
{{dsc inc | cpp/string/multibyte/dsc wcrtomb}}
{{dsc inc | cpp/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | cpp/string/multibyte/dsc wcsrtombs}}
{{dsc header | cuchar}}
{{dsc inc | cpp/string/multibyte/dsc mbrtoc16}}
{{dsc inc | cpp/string/multibyte/dsc c16rtomb}}
{{dsc inc | cpp/string/multibyte/dsc mbrtoc32}}
{{dsc inc | cpp/string/multibyte/dsc c32rtomb}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | cwchar}}
{{dsc inc | cpp/string/multibyte/dsc mbstate_t}}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc header | climits}}
{{dsc inc | cpp/string/multibyte/dsc MB_LEN_MAX}}
{{dsc header | cstdlib}}
{{dsc inc | cpp/string/multibyte/dsc MB_CUR_MAX}}
{{dsc header | cuchar}}
{{dsc macro const | __STDC_UTF_16__ |  nolink=true | indicates that UTF-16 encoding is used by mbrtoc16 and c16rtomb}}
{{dsc macro const | __STDC_UTF_32__ |  nolink=true | indicates that UTF-32 encoding is used by mbrtoc32 and c32rtomb}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/string/multibyte | Null-terminated multibyte strings}}
{{dsc end}}

[[de:cpp/string/multibyte]]
[[es:cpp/string/multibyte]]
[[fr:cpp/string/multibyte]]
[[it:cpp/string/multibyte]]
[[ja:cpp/string/multibyte]]
[[pt:cpp/string/multibyte]]
[[ru:cpp/string/multibyte]]
[[zh:cpp/string/multibyte]]</text>
      <sha1>6w0hmvsj8z57m7anpubst8ksgy0dhny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/btowc</title>
    <ns>0</ns>
    <id>4632</id>
    <revision>
      <id>59044</id>
      <parentid>51269</parentid>
      <timestamp>2013-06-01T06:26:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2349">{{cpp/title|btowc}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
std::wint_t btowc( int c );
}}

Widens a single-byte character {{tt|c}} to its wide character equivalent.

Most multibyte character encodings use single-byte codes to represent the characters from the ASCII character set. This function may be used to convert such characters to {{c|wchar_t}}.

===Parameters===
{{par begin}}
{{par | c | single-byte character to widen}}
{{par end}}

===Return value===
{{c|WEOF}} if {{tt|c}} is {{lc|EOF}}. 

Wide character representation of {{tt|c}} if {{c|(unsigned char)c}} is a valid single-byte character in the initial shift state, {{c|WEOF}} otherwise.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;clocale&gt;

void try_widen(char c)
{
    std::wint_t w = std::btowc(c);
    if(w != WEOF)
        std::cout &lt;&lt; &quot;The single-byte character &quot; &lt;&lt; +(unsigned char)c
                  &lt;&lt; &quot; widens to &quot; &lt;&lt; +w &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The single-byte character &quot; &lt;&lt; +(unsigned char)c
                  &lt;&lt; &quot; failed to widen\n&quot;;
}

int main()
{
    std::setlocale(LC_ALL, &quot;lt_LT.iso88594&quot;);
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; &quot;In Lithuanian ISO-8859-4 locale:\n&quot;;
    try_widen('A');
    try_widen('\xdf'); // German letter ß (U+00df) in ISO-8859-4
    try_widen('\xf9'); // Lithuanian letter ų (U+0173) in ISO-8859-4

    std::setlocale(LC_ALL, &quot;lt_LT.utf8&quot;);
    std::cout &lt;&lt; &quot;In Lithuanian UTF-8 locale:\n&quot;;
    try_widen('A');
    try_widen('\xdf');
    try_widen('\xf9');
}
 | output=
In Lithuanian ISO-8859-4 locale:
The single-byte character 0x41 widens to 0x41
The single-byte character 0xdf widens to 0xdf
The single-byte character 0xf9 widens to 0x173
In Lithuanian UTF-8 locale:
The single-byte character 0x41 widens to 0x41
The single-byte character 0xdf failed to widen
The single-byte character 0xf9 failed to widen
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc wctob}}
{{dsc inc | cpp/locale/ctype/dsc do_widen}}
{{dsc see c | c/string/multibyte/btowc}}
{{dsc end}}

[[de:cpp/string/multibyte/btowc]]
[[es:cpp/string/multibyte/btowc]]
[[fr:cpp/string/multibyte/btowc]]
[[it:cpp/string/multibyte/btowc]]
[[ja:cpp/string/multibyte/btowc]]
[[pt:cpp/string/multibyte/btowc]]
[[ru:cpp/string/multibyte/btowc]]
[[zh:cpp/string/multibyte/btowc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/c16rtomb</title>
    <ns>0</ns>
    <id>4222</id>
    <revision>
      <id>89337</id>
      <parentid>89335</parentid>
      <timestamp>2017-01-18T16:32:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+explain what C11 has to do with it</comment>
      <text xml:space="preserve" bytes="4204">{{cpp/title|c16rtomb}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cuchar | since=c++11 |
std::size_t c16rtomb( char* s, char16_t c16, std::mbstate_t* ps );
}}

Converts a single code point from variable-length 16-bit character representation (typically, UTF-16) to a narrow multibyte character representation.

If {{tt|s}} is not a null pointer and {{tt|c16}} is the last 16-bit code unit in a valid variable-length encoding of a code point, the function determines the number of bytes necessary to store the multibyte character representation of that code point (including any shift sequences), and stores the multibyte character representation in the character array whose first element is pointed to by {{tt|s}}. At most {{lc|MB_CUR_MAX}} bytes can be written by this function.

If {{tt|s}} is a null pointer, the call is equivalent to {{c|std::c16rtomb(buf, u'\0', ps)}} for some internal buffer {{tt|buf}}.

If {{tt|c16}} is not the final code unit in a 16-bit representation of a wide character, it does not write to the array pointed to by {{tt|s}}, only {{c|*ps}} is updated.

If c16 is the null wide character {{c|u'\0'}}, a null byte is stored, preceded by any shift sequence necessary to restore the initial shift state and the conversion state parameter {{c|*ps}} is updated to represent the initial shift state.

The multibyte encoding used by this function is specified by the currently active C locale.

===Parameters===
{{par begin}}
{{par | s | pointer to narrow character array where the multibyte character will be stored}}
{{par | c16 | the 16-bit character to convert}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===
On success, returns the number of bytes (including any shift sequences) written to the character array whose first element is pointed to by {{tt|s}}. This value may be {{c|0}}, e.g. when processing the first {{c|char16_t}} in a surrogate pair.

On failure (if {{c|c16}} is not a valid 16-bit character), returns {{c|-1}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.

===Notes===
The C++ standard defers to the C standard for the semantics of this function. In C11 as published, unlike {{lc|std::mbrtoc16}}, which converts variable-width multibyte (such as UTF-8) to variable-width 16-bit (such as UTF-16) encoding, this function can only convert single-unit 16-bit encoding, meaning it cannot convert UTF-16 to UTF-8 despite that being the original intent of this function. This was corrected by the post-C11 defect report [http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2059.htm#dr_488 DR488]. 

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;clocale&gt;
#include &lt;cuchar&gt;
#include &lt;cstdlib&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::u16string str = u&quot;zß水🍌&quot;; // or z\u00df\u6c34\U0001F34C
    std::cout &lt;&lt; &quot;Processing &quot; &lt;&lt; str.size() &lt;&lt; &quot; UTF-16 code units: [ &quot;;
    for(char16_t c : str) std::cout &lt;&lt; std::showbase &lt;&lt; std::hex &lt;&lt; c &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;]\n&quot;;

    std::mbstate_t state{};
    std::string out(MB_CUR_MAX, '\0');
    for(size_t n = 0; n &lt; str.size(); ++n)
    {   
        int rc = std::c16rtomb(&amp;out[0], str[n], &amp;state);
        std::cout &lt;&lt; str[n] &lt;&lt; &quot; converted to [ &quot;;
        for(int x = 0; x &lt; rc; ++x) std::cout &lt;&lt; +(unsigned char)out[x] &lt;&lt; ' ';
        std::cout &lt;&lt; &quot;]\n&quot;;
    }
}
|output=
Processing 5 UTF-16 code units: [ 0x7a 0xdf 0x6c34 0xd83c 0xdf4c ]
0x7a converted to [ 0x7a ]
0xdf converted to [ 0xc3 0x9f ]
0x6c34 converted to [ 0xe6 0xb0 0xb4 ]
0xd83c converted to [ ]
0xdf4c converted to [ 0xf0 0x9f 0x8d 0x8c ]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbrtoc16}}
{{dsc inc | cpp/locale/codecvt/dsc do_out | mem=std::codecvt&lt;char16_t, char, std::mbstate_t&gt;}}
{{dsc see c | c/string/multibyte/c16rtomb}}
{{dsc end}}

[[de:cpp/string/multibyte/c16rtomb]]
[[es:cpp/string/multibyte/c16rtomb]]
[[fr:cpp/string/multibyte/c16rtomb]]
[[it:cpp/string/multibyte/c16rtomb]]
[[ja:cpp/string/multibyte/c16rtomb]]
[[pt:cpp/string/multibyte/c16rtomb]]
[[ru:cpp/string/multibyte/c16rtomb]]
[[zh:cpp/string/multibyte/c16rtomb]]</text>
      <sha1>dc3ms8i4whztjahysa5pz6g92evjy1t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/c32rtomb</title>
    <ns>0</ns>
    <id>4638</id>
    <revision>
      <id>76472</id>
      <parentid>69453</parentid>
      <timestamp>2015-02-19T03:11:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>example</comment>
      <text xml:space="preserve" bytes="3336">{{cpp/title|c32rtomb}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cuchar | since=c++11 |
std::size_t c32rtomb( char* s, char32_t c32, std::mbstate_t* ps );
}}

Converts a UTF-32 character to its narrow multibyte representation.

If {{tt|s}} is not a null pointer, the function determines the number of bytes necessary to store the multibyte character representation of {{tt|c32}} (including any shift sequences), and stores the multibyte character representation in the character array whose first element is pointed to by {{tt|s}}. At most {{c|MB_CUR_MAX}} bytes can be written by this function.

If {{tt|s}} is a null pointer, the call is equivalent to {{c|std::c32rtomb(buf, U'\0', ps)}} for some internal buffer {{tt|buf}}.

If c32 is the null wide character {{c|U'\0'}}, a null byte is stored, preceded by any shift sequence necessary to restore the initial shift state and the conversion state parameter {{c|*ps}} is updated to represent the initial shift state.

The multibyte encoding used by this function is specified by the currently active C locale.

===Parameters===
{{par begin}}
{{par | s | pointer to narrow character array where the multibyte character will be stored}}
{{par | c32 | the 32-bit character to convert}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===
On success, returns the number of bytes (including any shift sequences) written to the character array whose first element is pointed to by {{tt|s}}. This value may be {{c|0}}, e.g. when processing the first {{c|char32_t}} in multi-{{c|char32_t}}-character sequence (does not occur in UTF-32).

On failure (if {{c|c32}} is not a valid 32-bit character), returns {{c|-1}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.

===Example===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;clocale&gt;
#include &lt;cuchar&gt;
#include &lt;cstdlib&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::u32string str = U&quot;zß水🍌&quot;; // or z\u00df\u6c34\U0001F34C
    std::cout &lt;&lt; &quot;Processing &quot; &lt;&lt; str.size() &lt;&lt; &quot; UTF-32 code units: [ &quot;;
    for(char32_t c : str) std::cout &lt;&lt; std::showbase &lt;&lt; std::hex &lt;&lt; c &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;]\n&quot;;

    std::mbstate_t state{};
    std::string out(MB_CUR_MAX, '\0');
    for(size_t n = 0; n &lt; str.size(); ++n)
    {
        int rc = std::c32rtomb(&amp;out[0], str[n], &amp;state);
        std::cout &lt;&lt; str[n] &lt;&lt; &quot; converted to [ &quot;;
        for(int x = 0; x &lt; rc; ++x) std::cout &lt;&lt; +(unsigned char)out[x] &lt;&lt; ' ';
        std::cout &lt;&lt; &quot;]\n&quot;;
    }
}
|output=
Processing 4 UTF-32 code units: [ 0x7a 0xdf 0x6c34 0x1f34c ]
0x7a converted to [ 0x7a ]
0xdf converted to [ 0xc3 0x9f ]
0x6c34 converted to [ 0xe6 0xb0 0xb4 ]
0x1f34c converted to [ 0xf0 0x9f 0x8d 0x8c ]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbrtoc32}}
{{dsc inc | cpp/locale/codecvt/dsc do_out | mem=std::codecvt&lt;char32_t, char, std::mbstate_t&gt;}}
{{dsc see c | c/string/multibyte/c32rtomb}}
{{dsc end}}

[[de:cpp/string/multibyte/c32rtomb]]
[[es:cpp/string/multibyte/c32rtomb]]
[[fr:cpp/string/multibyte/c32rtomb]]
[[it:cpp/string/multibyte/c32rtomb]]
[[ja:cpp/string/multibyte/c32rtomb]]
[[pt:cpp/string/multibyte/c32rtomb]]
[[ru:cpp/string/multibyte/c32rtomb]]
[[zh:cpp/string/multibyte/c32rtomb]]</text>
      <sha1>iunfalvepzj4aoptzldir5uulls5ljp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mblen</title>
    <ns>0</ns>
    <id>4582</id>
    <revision>
      <id>87750</id>
      <parentid>87749</parentid>
      <timestamp>2016-09-29T00:41:20Z</timestamp>
      <contributor>
        <ip>213.97.163.155</ip>
      </contributor>
      <text xml:space="preserve" bytes="3224">{{cpp/title|mblen}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cstdlib |
int mblen( const char* s, std::size_t n );
}}

Determines the size, in bytes, of the multibyte character whose first byte is pointed to by {{tt|s}}. 

If {{tt|s}} is a null pointer, resets the global conversion state and determined whether shift sequences are used.

This function is equivalent to the call {{c|std::mbtowc((wchar_t*)0, s, n)}}, except that conversion state of {{lc|std::mbtowc}} is unaffected.

===Notes===
Each call to {{tt|mblen}} updates the internal global conversion state (a static object of type {{lc|std::mbstate_t}}, only known to this function). If the multibyte encoding uses shift states, care must be taken to avoid backtracking or multiple scans. In any case, multiple threads should not call {{tt|mblen}} without synchronization: {{lc|std::mbrlen}} may be used instead.

===Parameters===
{{par begin}}
{{par | s | pointer to the multibyte character}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par end}}

===Return value===
If {{tt|s}} is not a null pointer, returns the number of bytes that are contained in the multibyte character or {{c|-1}} if the first bytes pointed to by {{tt|s}} do not form a valid multibyte character or {{c|0}} if {{tt|s}} is pointing at the null charcter {{c|'\0'}}.

If {{tt|s}} is a null pointer, resets its internal conversion state to represent the initial shift state and returns {{c|0}} if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).

===Example===
{{example
 | 
 | code=
#include &lt;clocale&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;stdexcept&gt;

// the number of characters in a multibyte string is the sum of mblen()'s
// note: the simpler approach is std::mbstowcs(NULL, s.c_str(), s.size())
std::size_t strlen_mb(const std::string&amp; s)
{
    std::size_t result = 0;
    const char* ptr = s.data();
    const char* end = ptr + s.size();
    std::mblen(NULL, 0); // reset the conversion state
    while (ptr &lt; end) {
        int next = std::mblen(ptr, end-ptr);
        if (next == -1) {
            throw std::runtime_error(&quot;strlen_mb(): conversion error&quot;);
        }
        ptr += next;
        ++result;
    }
    return result;
}

int main()
{
    // allow mblen() to work with UTF-8 multibyte encoding
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    std::string str = u8&quot;z\u00df\u6c34\U0001f34c&quot;; // or u8&quot;zß水🍌&quot;
    std::cout &lt;&lt; str &lt;&lt; &quot; is &quot; &lt;&lt; str.size() &lt;&lt; &quot; bytes, but only &quot;
              &lt;&lt; strlen_mb(str) &lt;&lt; &quot; characters\n&quot;;
}
 | output=
zß水🍌 is 10 bytes, but only 4 characters
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbtowc}}
{{dsc inc | cpp/string/multibyte/dsc mbrlen}}
{{dsc see c | c/string/multibyte/mblen}}
{{dsc end}}

[[de:cpp/string/multibyte/mblen]]
[[es:cpp/string/multibyte/mblen]]
[[fr:cpp/string/multibyte/mblen]]
[[it:cpp/string/multibyte/mblen]]
[[ja:cpp/string/multibyte/mblen]]
[[pt:cpp/string/multibyte/mblen]]
[[ru:cpp/string/multibyte/mblen]]
[[zh:cpp/string/multibyte/mblen]]</text>
      <sha1>59wu7m786k1yxr7p8he5gvex8r3xt3n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbrlen</title>
    <ns>0</ns>
    <id>4583</id>
    <revision>
      <id>59052</id>
      <parentid>51273</parentid>
      <timestamp>2013-06-01T06:26:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2906">{{cpp/title|mbrlen}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
std::size_t mbrlen( const char* s, std::size_t n, std::mbstate_t* ps);
}}

Determines the size, in bytes, of the remainder of the multibyte character whose first byte is pointed to by {{tt|s}}, given the current conversion state {{tt|ps}}.

This function is equivalent to the call {{c|std::mbrtowc(nullptr, s, n, ps?ps:&amp;internal)}} for some hidden object {{tt|internal}} of type {{lc|std::mbstate_t}}, except that the expression {{tt|ps}} is evaluated only once.

===Parameters===
{{par begin}}
{{par | s | pointer to an element of a multibyte character string}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the variable holding the conversion state}}
{{par end}}

===Return value===
{{c|0}} if the next {{tt|n}} or fewer bytes complete the null character.

The number of bytes (between {{c|1}} and {{c|n}}) that complete a valid multibyte character

{{c|(size_t)-1}} if encoding error occurs

{{c|(size_t)-2}} if the next {{tt|n}} bytes are part of a possibly valid multibyte character, which is still incomplete after examining all {{tt|n}} bytes

===Example===
{{example
 | 
 | code=
#include &lt;clocale&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;cwchar&gt;

int main()
{
    // allow mbrlen() to work with UTF-8 multibyte encoding
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    std::string str = u8&quot;水&quot;; // or u8&quot;\u6c34&quot; or &quot;\xe6\xb0\xb4&quot;
    std::mbstate_t mb = std::mbstate_t();
    int len1 = std::mbrlen(&amp;str[0], 1, &amp;mb);
    if(len1 == -2) {
        std::cout &lt;&lt; &quot;The first 1 byte of &quot; &lt;&lt; str
                  &lt;&lt; &quot; is an incomplete multibyte char (mbrlen returns -2)\n&quot;;
    }
    int len2 = std::mbrlen(&amp;str[1], str.size()-1, &amp;mb);
    std::cout &lt;&lt; &quot;The remaining &quot; &lt;&lt; str.size()-1 &lt;&lt; &quot; bytes of &quot; &lt;&lt; str
              &lt;&lt; &quot; hold &quot; &lt;&lt; len2 &lt;&lt; &quot; bytes of the multibyte character\n&quot;;
    std::cout &lt;&lt; &quot;Attempting to call mbrlen() in the middle of &quot; &lt;&lt; str
              &lt;&lt; &quot; while in initial shift state returns &quot;
              &lt;&lt; (int)mbrlen(&amp;str[1], str.size(), &amp;mb) &lt;&lt; '\n';

}
 | output=
The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2)
The remaining 2 bytes of 水 hold 2 bytes of the multibyte character
Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbrtowc}}
{{dsc inc | cpp/string/multibyte/dsc mblen}}
{{dsc inc | cpp/locale/codecvt/dsc do_length}}
{{dsc see c | c/string/multibyte/mbrlen}}
{{dsc end}}

[[de:cpp/string/multibyte/mbrlen]]
[[es:cpp/string/multibyte/mbrlen]]
[[fr:cpp/string/multibyte/mbrlen]]
[[it:cpp/string/multibyte/mbrlen]]
[[ja:cpp/string/multibyte/mbrlen]]
[[pt:cpp/string/multibyte/mbrlen]]
[[ru:cpp/string/multibyte/mbrlen]]
[[zh:cpp/string/multibyte/mbrlen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbrtoc16</title>
    <ns>0</ns>
    <id>4221</id>
    <revision>
      <id>92102</id>
      <parentid>87323</parentid>
      <timestamp>2017-04-05T12:04:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>break out on errors, otherwise it's an endless loop</comment>
      <text xml:space="preserve" bytes="4637">{{cpp/title|mbrtoc16}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cuchar | since=c++11 |
std::size_t mbrtoc16( char16_t* pc16,
                      const char* s,
                      std::size_t n,
                      std::mbstate_t* ps );
}}

Converts a narrow multibyte character to UTF-16 character representation.

If {{tt|s}} is not a null pointer, inspects at most {{tt|n}} bytes of the multibyte character string, beginning with the byte pointed to by {{tt|s}} to determine the number of bytes necessary to complete the next multibyte character (including any shift sequences). If the function determines that the next multibyte character in {{tt|s}} is complete and valid, converts it to the corresponding 16-bit character and stores it in {{c|*pc16}} (if {{tt|pc16}} is not null).

If the multibyte character in {{tt|*s}} corresponds to a multi-char16_t sequence (e.g. a surrogate pair in UTF-16), then after the first call to this function, {{tt|*ps}} is updated in such a way that the next call to {{tt|mbrtoc16}} will write out the additional char16_t, without considering {{tt|*s}}.

If {{tt|s}} is a null pointer, the values of {{tt|n}} and {{tt|pc16}} are ignored and the call is equivalent to {{c|std::mbrtoc16(NULL, &quot;&quot;, 1, ps)}}.

If the wide character produced is the null character, the conversion state {{c|*ps}} represents the initial shift state.

The multibyte encoding used by this function is specified by the currently active C locale.

===Parameters===
{{par begin}}
{{par | pc16 | pointer to the location where the resulting 16-bit character will be written}}
{{par | s | pointer to the multibyte character string used as input}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===

The first of the following that applies:
* {{c|0}} if the character converted from {{tt|s}} (and stored in {{c|*pc16}} if non-null) was the null character
* the number of bytes {{c|[1...n]}} of the multibyte character successfully converted from {{tt|s}}
* {{c|-3}} if the next {{c|char16_t}} from a multi-{{c|char16_t}} character (e.g. a surrogate pair) has now been written to {{c|*pc16}}. No bytes are processed from the input in this case.
* {{c|-2}} if the next {{tt|n}} bytes constitute an incomplete, but so far valid, multibyte character. Nothing is written to {{c|*pc16}}.
* {{c|-1}} if encoding error occurs. Nothing is written to {{tt|*pc16}}, the value {{lc|EILSEQ}} is stored in {{lc|errno}} and the value of {{c|*ps}} is unspecified.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;clocale&gt;
#include &lt;cstring&gt;
#include &lt;cwchar&gt;
#include &lt;cuchar&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);

    std::string str = u8&quot;z\u00df\u6c34\U0001F34C&quot;; // or u8&quot;zß水🍌&quot;

    std::cout &lt;&lt; &quot;Processing &quot; &lt;&lt; str.size() &lt;&lt; &quot; bytes: [ &quot; &lt;&lt; std::showbase;
    for(unsigned char c: str) std::cout &lt;&lt; std::hex &lt;&lt; +c &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;]\n&quot;;

    std::mbstate_t state{}; // zero-initialized to initial state
    char16_t c16;
    const char *ptr = &amp;str[0], *end = &amp;str[0] + str.size();

    while(int rc = std::mbrtoc16(&amp;c16, ptr, end - ptr, &amp;state))
    {   
        std::cout &lt;&lt; &quot;Next UTF-16 char: &quot; &lt;&lt; std::hex &lt;&lt; c16 &lt;&lt; &quot; obtained from &quot;;
        if(rc == -3)
            std::cout &lt;&lt; &quot;earlier surrogate pair\n&quot;;
        else if(rc &gt; 0) {
            std::cout &lt;&lt; std::dec &lt;&lt; rc &lt;&lt; &quot; bytes [ &quot;;
            for(int n = 0; n &lt; rc; ++n)
                std::cout &lt;&lt; std::hex &lt;&lt; +(unsigned char)ptr[n] &lt;&lt; ' ';
            std::cout &lt;&lt; &quot;]\n&quot;;
            ptr += rc;
        } else break;
    }
}
|output=
Processing 10 bytes: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c ]
Next UTF-16 char: 0x7a obtained from 1 bytes [ 0x7a ]
Next UTF-16 char: 0xdf obtained from 2 bytes [ 0xc3 0x9f ]
Next UTF-16 char: 0x6c34 obtained from 3 bytes [ 0xe6 0xb0 0xb4 ]
Next UTF-16 char: 0xd83c obtained from 4 bytes [ 0xf0 0x9f 0x8d 0x8c ]
Next UTF-16 char: 0xdf4c obtained from earlier surrogate pair
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc c16rtomb}}
{{dsc inc | cpp/locale/codecvt/dsc do_in | mem=std::codecvt&lt;char16_t, char, std::mbstate_t&gt;}}
{{dsc see c | c/string/multibyte/mbrtoc16}}
{{dsc end}}

[[de:cpp/string/multibyte/mbrtoc16]]
[[es:cpp/string/multibyte/mbrtoc16]]
[[fr:cpp/string/multibyte/mbrtoc16]]
[[it:cpp/string/multibyte/mbrtoc16]]
[[ja:cpp/string/multibyte/mbrtoc16]]
[[pt:cpp/string/multibyte/mbrtoc16]]
[[ru:cpp/string/multibyte/mbrtoc16]]
[[zh:cpp/string/multibyte/mbrtoc16]]</text>
      <sha1>lvck46zp7zae5lspy9irfjhnme60ng7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbrtoc32</title>
    <ns>0</ns>
    <id>4637</id>
    <revision>
      <id>92103</id>
      <parentid>89292</parentid>
      <timestamp>2017-04-05T12:06:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>break out on errors</comment>
      <text xml:space="preserve" bytes="4558">{{cpp/title|mbrtoc32}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cuchar | since=c++11 |
std::size_t mbrtoc32( char32_t* pc32,
                      const char* s,
                      std::size_t n,
                      std::mbstate_t* ps );
}}

Converts a narrow multibyte character to its UTF-32 character representation.

If {{tt|s}} is not a null pointer, inspects at most {{tt|n}} bytes of the multibyte character string, beginning with the byte pointed to by {{tt|s}} to determine the number of bytes necessary to complete the next multibyte character (including any shift sequences). If the function determines that the next multibyte character in {{tt|s}} is complete and valid, converts it to the corresponding 32-bit character and stores it in {{c|*pc32}} (if {{tt|pc32}} is not null).

If the multibyte character in {{tt|*s}} corresponds to a multi-char32_t sequence (not possible with UTF-32), then after the first call to this function, {{tt|*ps}} is updated in such a way that the next calls to {{tt|mbrtoc32}} will write out the additional char32_t, without considering {{tt|*s}}.

If {{tt|s}} is a null pointer, the values of {{tt|n}} and {{tt|pc32}} are ignored and the call is equivalent to {{c|std::mbrtoc32(NULL, &quot;&quot;, 1, ps)}}.

If the wide character produced is the null character, the conversion state {{c|*ps}} represents the initial shift state.

The multibyte encoding used by this function is specified by the currently active C locale.

===Parameters===
{{par begin}}
{{par | pc32 | pointer to the location where the resulting 32-bit character will be written}}
{{par | s | pointer to the multibyte character string used as input}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===

The first of the following that applies:
* {{c|0}} if the character converted from {{tt|s}} (and stored in {{c|*pc32}} if non-null) was the null character
* the number of bytes {{c|[1...n]}} of the multibyte character successfully converted from {{tt|s}}
* {{c|-3}} if the next {{c|char32_t}} from a multi-{{c|char32_t}} character has now been written to {{c|*pc32}}. No bytes are processed from the input in this case.
* {{c|-2}} if the next {{tt|n}} bytes constitute an incomplete, but so far valid, multibyte character. Nothing is written to {{c|*pc32}}.
* {{c|-1}} if encoding error occurs. Nothing is written to {{tt|*pc32}}, the value {{lc|EILSEQ}} is stored in {{lc|errno}} and the value if {{c|*ps}} is unspecified.

===Examples===
{{example|
|code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;clocale&gt;
#include &lt;cstring&gt;
#include &lt;cwchar&gt;
#include &lt;cuchar&gt;
#include &lt;cassert&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);

    std::string str = u8&quot;z\u00df\u6c34\U0001F34C&quot;; // or u8&quot;zß水🍌&quot;

    std::cout &lt;&lt; &quot;Processing &quot; &lt;&lt; str.size() &lt;&lt; &quot; bytes: [ &quot; &lt;&lt; std::showbase;
    for(unsigned char c: str) std::cout &lt;&lt; std::hex &lt;&lt; +c &lt;&lt; ' ';
    std::cout &lt;&lt; &quot;]\n&quot;;

    std::mbstate_t state{}; // zero-initialized to initial state
    char32_t c32;
    const char *ptr = str.c_str(), *end = str.c_str() + str.size() + 1;

    while(int rc = std::mbrtoc32(&amp;c32, ptr, end - ptr, &amp;state))
    {   
        std::cout &lt;&lt; &quot;Next UTF-32 char: &quot; &lt;&lt; std::hex &lt;&lt; c32 &lt;&lt; &quot; obtained from &quot;;
        assert(rc != -3); // no surrogates in UTF-32
        if(rc &gt; 0) {
            std::cout &lt;&lt; std::dec &lt;&lt; rc &lt;&lt; &quot; bytes [ &quot;;
            for(int n = 0; n &lt; rc; ++n)
                std::cout &lt;&lt; std::hex &lt;&lt; +(unsigned char)ptr[n] &lt;&lt; ' ';
            std::cout &lt;&lt; &quot;]\n&quot;;
            ptr += rc;
        } else break;
    }
}
|output=
Processing 10 bytes: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c ]
Next UTF-32 char: 0x7a obtained from 1 bytes [ 0x7a ]
Next UTF-32 char: 0xdf obtained from 2 bytes [ 0xc3 0x9f ]
Next UTF-32 char: 0x6c34 obtained from 3 bytes [ 0xe6 0xb0 0xb4 ]
Next UTF-32 char: 0x1f34c obtained from 4 bytes [ 0xf0 0x9f 0x8d 0x8c ]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc c32rtomb}}
{{dsc inc | cpp/locale/codecvt/dsc do_in | mem=std::codecvt&lt;char32_t, char, std::mbstate_t&gt;}}
{{dsc see c | c/string/multibyte/mbrtoc32}}
{{dsc end}}

[[de:cpp/string/multibyte/mbrtoc32]]
[[es:cpp/string/multibyte/mbrtoc32]]
[[fr:cpp/string/multibyte/mbrtoc32]]
[[it:cpp/string/multibyte/mbrtoc32]]
[[ja:cpp/string/multibyte/mbrtoc32]]
[[pt:cpp/string/multibyte/mbrtoc32]]
[[ru:cpp/string/multibyte/mbrtoc32]]
[[zh:cpp/string/multibyte/mbrtoc32]]</text>
      <sha1>fli26cnbm7a3r1t1tenno1uj6balzko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbrtowc</title>
    <ns>0</ns>
    <id>4636</id>
    <revision>
      <id>59057</id>
      <parentid>51276</parentid>
      <timestamp>2013-06-01T06:26:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="3410">{{cpp/title|mbrtowc}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
std::size_t mbrtowc( wchar_t* pwc,
                     const char* s,
                     std::size_t n,
                     std::mbstate_t* ps );
}}

Converts a narrow multibyte character to a wide character.

If {{tt|s}} is not a null pointer, inspects at most {{tt|n}} bytes of the multibyte character string, beginning with the byte pointed to by {{tt|s}} to determine the number of bytes necessary to complete the next multibyte character (including any shift sequences). If the function determines that the next multibyte character in {{tt|s}} is complete and valid, converts it to the corresponding wide character and stores it in {{c|*pwc}} (if {{tt|pwc}} is not null).

If {{tt|s}} is a null pointer, the values of {{tt|n}} and {{tt|pwc}} are ignored and call is equivalent to {{c|std::mbrtowc(NULL, &quot;&quot;, 1, ps)}}.

If the wide character produced is the null character, the conversion state stored in {{c|*ps}} is the initial shift state.

===Parameters===
{{par begin}}
{{par | pwc | pointer to the location where the resulting wide character will be written}}
{{par | s | pointer to the multibyte character string used as input}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | ps | pointer to the conversion state used when interpreting the multibyte string }}
{{par end}}

===Return value===
The first of the following that applies:
* {{c|0}} if the character converted from {{tt|s}} (and stored in {{c|pwc}} if non-null) was the null character
* the number of bytes {{c|[1...n]}} of the multibyte character successfully converted from {{tt|s}}
* {{c|static_cast&lt;std::size_t&gt;(-2)}} if the next {{tt|n}} bytes constitute an incomplete, but so far valid, multibyte character. Nothing is written to {{c|*pwc}}.
* {{c|static_cast&lt;std::size_t&gt;(-1)}} if encoding error occurs. Nothing is written to {{tt|*pwc}}, the value {{lc|EILSEQ}} is stored in {{lc|errno}} and the value of {{c|*ps}} is left unspecified.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;cstring&gt;
#include &lt;cwchar&gt;
 
void print_mb(const char* ptr)
{
    std::mbstate_t state = std::mbstate_t(); // initial state
    const char* end = ptr + std::strlen(ptr);
    int len;
    wchar_t wc;
    while((len = std::mbrtowc(&amp;wc, ptr, end-ptr, &amp;state)) &gt; 0) {
        std::wcout &lt;&lt; &quot;Next &quot; &lt;&lt; len &lt;&lt; &quot; bytes are the character &quot; &lt;&lt; wc &lt;&lt; '\n';
        ptr += len;
    }
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    const char* str = u8&quot;z\u00df\u6c34\U0001d10b&quot;; // or u8&quot;zß水𝄋&quot;
                      // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;
    print_mb(str);
}
 | output=
Next 1 bytes are the character z
Next 2 bytes are the character ß
Next 3 bytes are the character 水
Next 4 bytes are the character 𝄋
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbtowc}}
{{dsc inc | cpp/string/multibyte/dsc wcrtomb}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc see c | c/string/multibyte/mbrtowc}}
{{dsc end}}

[[de:cpp/string/multibyte/mbrtowc]]
[[es:cpp/string/multibyte/mbrtowc]]
[[fr:cpp/string/multibyte/mbrtowc]]
[[it:cpp/string/multibyte/mbrtowc]]
[[ja:cpp/string/multibyte/mbrtowc]]
[[pt:cpp/string/multibyte/mbrtowc]]
[[ru:cpp/string/multibyte/mbrtowc]]
[[zh:cpp/string/multibyte/mbrtowc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbsinit</title>
    <ns>0</ns>
    <id>4623</id>
    <revision>
      <id>59060</id>
      <parentid>51277</parentid>
      <timestamp>2013-06-01T06:26:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2183">{{cpp/title|mbsinit}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
int mbsinit( const std::mbstate_t* ps);
}}

If {{tt|ps}} is not a null pointer, the {{tt|mbsinit}} function determines whether the pointed-to {{lc|std::mbstate_t}} object describes the initial conversion state. 

===Notes===
Although a zero-initialized {{lc|std::mbstate_t}} always represents the initial conversion state, there may be other values of {{lc|std::mbstate_t}} that also represent the initial conversion state.

===Parameters===
{{par begin}}
{{par | ps | pointer to the std::mbstate_t object to examine}}
{{par end}}

===Return value===
{{c|0}} if {{tt|ps}} is not a null pointer and does not reporesent the initial conversion state, nonzero value otherwise.

===Example===
{{example
 | 
 | code=
#include &lt;clocale&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;cwchar&gt;

int main()
{
    // allow mbrlen() to work with UTF-8 multibyte encoding
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    std::string str = u8&quot;水&quot;; // or u8&quot;\u6c34&quot; or &quot;\xe6\xb0\xb4&quot;
    std::mbstate_t mb = std::mbstate_t();
    (void)std::mbrlen(&amp;str[0], 1, &amp;mb);
    if (!std::mbsinit(&amp;mb)) {
        std::cout &lt;&lt; &quot;After processing the first 1 byte of &quot; &lt;&lt; str
                  &lt;&lt; &quot; the conversion state is not initial\n&quot;;
    }

    (void)std::mbrlen(&amp;str[1], str.size()-1, &amp;mb);
    if (std::mbsinit(&amp;mb)) {
        std::cout &lt;&lt; &quot;After processing the remaining 2 bytes of &quot; &lt;&lt; str
                  &lt;&lt; &quot;, the conversion state is initial conversion state\n&quot;;
    }
}
 | output=
After processing the first 1 byte of 水 the conversion state is not initial
After processing the remaining 2 bytes of 水, the conversion state is initial conversion state
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbstate_t}}
{{dsc see c | c/string/multibyte/mbsinit}}
{{dsc end}}

[[de:cpp/string/multibyte/mbsinit]]
[[es:cpp/string/multibyte/mbsinit]]
[[fr:cpp/string/multibyte/mbsinit]]
[[it:cpp/string/multibyte/mbsinit]]
[[ja:cpp/string/multibyte/mbsinit]]
[[pt:cpp/string/multibyte/mbsinit]]
[[ru:cpp/string/multibyte/mbsinit]]
[[zh:cpp/string/multibyte/mbsinit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbsrtowcs</title>
    <ns>0</ns>
    <id>4643</id>
    <revision>
      <id>85896</id>
      <parentid>75027</parentid>
      <timestamp>2016-06-01T14:30:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>\U0001f34c displays in more fonts</comment>
      <text xml:space="preserve" bytes="3500">{{cpp/title|mbsrtowcs}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
std::size_t mbsrtowcs( wchar_t* dst,
                       const char** src,
                       std::size_t len,
                       std::mbstate_t* ps );
}}

Converts a null-terminated multibyte character sequence, which begins in the conversion state described by {{tt|*ps}}, from the array whose first element is pointed to by {{tt|*src}} to its wide character representation. If {{tt|dst}} is not null, converted characters are stored in the successive elements of the wchar_t array pointed to by {{tt|dst}}. No more than {{tt|len}} wide characters are written to the destination array.

Each multibyte character is converted as if by a call to {{lc|std::mbrtowc}}. The conversion stops if:

* The multibyte null character was converted and stored. {{tt|src}} is set to {{lc|NULL}} and {{tt|*ps}} represents the initial shift state.
* An invalid multibyte character (according to the current C locale) was encountered. {{tt|src}} is set to point at the beginning  of the first unconverted multibyte character.
* the next wide character to be stored would exceed {{tt|len}}. {{tt|src}} is set to point at the beginning of the first unconverted multibyte character. This condition is not checked if {{c|1=dst==NULL}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to wide character array where the results will be stored}}
{{par | src | pointer to pointer to the first element of a null-terminated multibyte string}}
{{par | len | number of wide characters available in the array pointed to by dst}}
{{par | ps | pointer to the conversion state object}}
{{par end}}

===Return value===
On success, returns the number of wide characters, excluding the terminating {{c|L'\0'}}, written to the character array.. If {{c|1=dst==NULL}}, returns the number of wide characters that would have been written given unlimited length.

On conversion error (if invalid multibyte character was encountered), returns {{c|static_cast&lt;std::size_t&gt;(-1)}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.

===Notes===
This function moves the {{tt|src}} pointer to the end of the converted multibyte string. This doesn't happen if {{c|1=dst==NULL}}.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;clocale&gt;
#include &lt;cwchar&gt;

void print_as_wide(const char* mbstr)
{
    std::mbstate_t state = std::mbstate_t();
    int len = 1 + std::mbsrtowcs(NULL, &amp;mbstr, 0, &amp;state);
    std::vector&lt;wchar_t&gt; wstr(len);
    std::mbsrtowcs(&amp;wstr[0], &amp;mbstr, wstr.size(), &amp;state);
    std::wcout &lt;&lt; &quot;Wide string: &quot; &lt;&lt; &amp;wstr[0] &lt;&lt; '\n'
               &lt;&lt; &quot;The length, including '\\0': &quot; &lt;&lt; wstr.size() &lt;&lt; '\n';
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    const char* mbstr = u8&quot;z\u00df\u6c34\U0001f34c&quot;; // or u8&quot;zß水🍌&quot;
    print_as_wide(mbstr);
}
 | output=
Wide string: zß水🍌
The length, including '\0': 5
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbrtowc}}
{{dsc inc | cpp/string/multibyte/dsc wcsrtombs}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc see c | c/string/multibyte/mbsrtowcs}}
{{dsc end}}

[[de:cpp/string/multibyte/mbsrtowcs]]
[[es:cpp/string/multibyte/mbsrtowcs]]
[[fr:cpp/string/multibyte/mbsrtowcs]]
[[it:cpp/string/multibyte/mbsrtowcs]]
[[ja:cpp/string/multibyte/mbsrtowcs]]
[[pt:cpp/string/multibyte/mbsrtowcs]]
[[ru:cpp/string/multibyte/mbsrtowcs]]
[[zh:cpp/string/multibyte/mbsrtowcs]]</text>
      <sha1>f1xa96e7exx37agsk0jhc58b3j6clmd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbstate t</title>
    <ns>0</ns>
    <id>4624</id>
    <revision>
      <id>74667</id>
      <parentid>59064</parentid>
      <timestamp>2014-12-21T17:18:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix typos in function names here too</comment>
      <text xml:space="preserve" bytes="1462">{{cpp/title|mbstate_t}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
struct mbstate_t;
}}

The type mbstate_t is a trivial non-array type that can represent any of the conversion states that can occur in an implementation-defined set of supported multibyte character encoding rules. Zero-initialized value of {{tt|mbstate_t}} represents the initial conversion state, although other values of {{tt|mbstate_t}} may exist that also represent the initial conversion state.

Possible implementation of {{tt|mbstate_t}} is a struct type holding an array representing the incomplete multibyte character, an integer counter indicating the number of bytes in the array that have been processed, and a representation of the current shift state.

The following functions should not be called from multiple threads without synchronization with the {{c|std::mbstate_t*}} argument of {{tt|NULL}} due to possible data races: {{lc|std::mbrlen}}, {{lc|std::mbrtowc}}, {{c|std::mbsrtowcs}}, {{lc|std::mbtowc}}, {{lc|std::wcrtomb}}, {{c|std::wcsrtombs}}, {{lc|std::wctomb}}. 

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbsinit}}
{{dsc end}}

[[de:cpp/string/multibyte/mbstate t]]
[[es:cpp/string/multibyte/mbstate t]]
[[fr:cpp/string/multibyte/mbstate t]]
[[it:cpp/string/multibyte/mbstate t]]
[[ja:cpp/string/multibyte/mbstate t]]
[[pt:cpp/string/multibyte/mbstate t]]
[[ru:cpp/string/multibyte/mbstate t]]
[[zh:cpp/string/multibyte/mbstate t]]</text>
      <sha1>f38hag8eul4v1p7qlesyc31qd9xpdz8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbstowcs</title>
    <ns>0</ns>
    <id>4642</id>
    <revision>
      <id>80014</id>
      <parentid>80012</parentid>
      <timestamp>2015-07-28T17:26:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix example to work with clang too, +more common char</comment>
      <text xml:space="preserve" bytes="2856">{{cpp/title|mbstowcs}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cstdlib |
std::size_t mbstowcs( wchar_t* dst, const char* src, std::size_t len);
}}

Converts a multibyte character string from the array whose first element is pointed to by {{tt|src}} to its wide character  representation. Converted characters are stored in the successive elements of the array pointed to by {{tt|dst}}. No more than {{tt|len}} wide characters are written to the destination array.

Each character is converted as if by a call to {{lc|std::mbtowc}}, except that the mbtowc conversion state is unaffected. The conversion stops if:

* The multibyte null character was converted and stored.
* An invalid (in the current C locale) multibyte character was encountered.
* The next wide character to be stored would exceed {{tt|len}}.

===Notes===
In most implementations, this function updates a global static object of type {{lc|std::mbstate_t}} as it processes through the string, and cannot be called simultaneously by two threads, {{lc|std::mbsrtowcs}} should be used in such cases.

POSIX specifies a common extension: if {{tt|dst}} is a null pointer, this function returns the number of wide characters that would be written to {{tt|dst}}, if converted. Similar behavior is standard for {{lc|std::mbsrtowcs}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to wide character array where the wide string will be stored}}
{{par | src | pointer to the first element of a null-terminated multibyte string to convert}}
{{par | len | number of wide characters available in the array pointed to by dst}}
{{par end}}

===Return value===
On success, returns the number of wide characters, excluding the terminating {{c|L'\0'}}, written to the destination array.

On conversion error (if invalid multibyte character was encountered), returns {{c|-1}}.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;cstdlib&gt;
int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    const char* mbstr = u8&quot;z\u00df\u6c34\U0001f34c&quot;; // or u8&quot;zß水🍌&quot;
                        // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c&quot;;
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout &lt;&lt; &quot;wide string: &quot; &lt;&lt; wstr &lt;&lt; '\n';
}
 | output=
wide string: zß水🍌
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | cpp/string/multibyte/dsc wcstombs}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc see c | c/string/multibyte/mbstowcs}}
{{dsc end}}

[[de:cpp/string/multibyte/mbstowcs]]
[[es:cpp/string/multibyte/mbstowcs]]
[[fr:cpp/string/multibyte/mbstowcs]]
[[it:cpp/string/multibyte/mbstowcs]]
[[ja:cpp/string/multibyte/mbstowcs]]
[[pt:cpp/string/multibyte/mbstowcs]]
[[ru:cpp/string/multibyte/mbstowcs]]
[[zh:cpp/string/multibyte/mbstowcs]]</text>
      <sha1>i93cpuje8dh9pv9l3l77204j4b40ul5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/mbtowc</title>
    <ns>0</ns>
    <id>4634</id>
    <revision>
      <id>80011</id>
      <parentid>59068</parentid>
      <timestamp>2015-07-28T17:18:41Z</timestamp>
      <contributor>
        <ip>2.125.108.101</ip>
      </contributor>
      <text xml:space="preserve" bytes="2819">{{cpp/title|mbtowc}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cstdlib |
int mbtowc( wchar_t* pwc, const char* s, std::size_t n );
}}

Converts a multibyte character whose first byte is pointed to by {{tt|s}} to a wide character, written to {{tt|*pwc}} if {{tt|pwc}} is not null.

If {{tt|s}} is a null pointer, resets the global conversion state and determines whether shift sequences are used.

===Parameters===
{{par begin}}
{{par | s | pointer to the multibyte character}}
{{par | n | limit on the number of bytes in s that can be examined}}
{{par | pwc | pointer to the wide character for output }}
{{par end}}

===Return value===
If {{tt|s}} is not a null pointer, returns the number of bytes that are contained in the multibyte character or {{c|-1}} if the first bytes pointed to by {{tt|s}} do not form a valid multibyte character or {{c|0}} if {{tt|s}} is pointing at the null charcter {{c|'\0'}}.

If {{tt|s}} is a null pointer, resets its internal conversion state to represent the initial shift state and returns {{c|0}} if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).

===Notes===
Each call to {{tt|mbtowc}} updates the internal global conversion state (a static object of type {{lc|std::mbstate_t}}, only known to this function). If the multibyte encoding uses shift states, care must be taken to avoid backtracking or multiple scans. In any case, multiple threads should not call {{tt|mbtowc}} without synchronization: {{lc|std::mbrtowc}} may be used instead.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;cstring&gt;
#include &lt;cstdlib&gt;

int print_mb(const char* ptr)
{
    std::mbtowc(NULL, 0, 0); // reset the conversion state
    const char* end = ptr + std::strlen(ptr);
    int ret;
    for (wchar_t wc; (ret = std::mbtowc(&amp;wc, ptr, end-ptr)) &gt; 0; ptr+=ret) {
        std::wcout &lt;&lt; wc;
    }
    std::wcout &lt;&lt; '\n';
    return ret;
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    const char* str = u8&quot;z\u00df\u6c34\U0001d10b&quot;; // or u8&quot;zß水𝄋&quot;
                      // or &quot;\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b&quot;;
    print_mb(str);
}
 | output=
zß水𝄋
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbrtowc}}
{{dsc inc | cpp/string/multibyte/dsc mblen}}
{{dsc inc | cpp/locale/codecvt/dsc do_in}}
{{dsc see c | c/string/multibyte/mbtowc}}
{{dsc end}}

[[de:cpp/string/multibyte/mbtowc]]
[[es:cpp/string/multibyte/mbtowc]]
[[fr:cpp/string/multibyte/mbtowc]]
[[it:cpp/string/multibyte/mbtowc]]
[[ja:cpp/string/multibyte/mbtowc]]
[[pt:cpp/string/multibyte/mbtowc]]
[[ru:cpp/string/multibyte/mbtowc]]
[[zh:cpp/string/multibyte/mbtowc]]</text>
      <sha1>ep257diwnvv0obiqqjrh8nbz61820uq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/wcrtomb</title>
    <ns>0</ns>
    <id>4639</id>
    <revision>
      <id>80726</id>
      <parentid>59069</parentid>
      <timestamp>2015-08-26T19:58:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>wrong comment, also use c++11 initialization for mbstate (and also the more printable char)</comment>
      <text xml:space="preserve" bytes="2774">{{cpp/title|wcrtomb}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
std::size_t wcrtomb( char* s, wchar_t wc, std::mbstate_t* ps );
}}

Converts a wide character to its narrow multibyte representation.

If {{tt|s}} is not a null pointer, the function determines the number of bytes necessary to store the multibyte character representation of {{tt|wc}} (including any shift sequences), and stores the multibyte character representation in the character array whose first element is pointed to by {{tt|s}}. At most {{c|MB_CUR_MAX}} bytes can be written by this function.

If {{tt|s}} is a null pointer, the call is equivalent to {{c|std::wcrtomb(buf, L'\0', ps)}} for some internal buffer {{tt|buf}}.

If wc is the null wide character {{c|L'\0'}}, a null byte is stored, preceded by any shift sequence necessary to restore the initial shift state and the conversion state parameter {{c|*ps}} is updated to represent the initial shift state.

===Parameters===
{{par begin}}
{{par | s | pointer to narrow character array where the multibyte character will be stored}}
{{par | wc | the wide character to convert}}
{{par | ps | pointer to the conversion state object used when interpreting the multibyte string }}
{{par end}}

===Return value===
On success, returns the number of bytes (including any shift sequences) written to the character array whose first element is pointed to by {{tt|s}}. 

On failure (if {{c|wc}} is not a valid wide character), returns {{c|static_cast&lt;std::size_t&gt;(-1)}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;string&gt;
#include &lt;cwchar&gt;

void print_wide(const std::wstring&amp; wstr)
{
    std::mbstate_t state {};
    for(wchar_t wc : wstr) {
        std::string mb(MB_CUR_MAX, '\0');
        int ret = std::wcrtomb(&amp;mb[0], wc, &amp;state);
        std::cout &lt;&lt; &quot;multibyte char &quot; &lt;&lt; mb &lt;&lt; &quot; is &quot; &lt;&lt; ret &lt;&lt; &quot; bytes\n&quot;;
    }
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wstring wstr = L&quot;z\u00df\u6c34\U0001f34c&quot;; // or L&quot;zß水🍌&quot;
    print_wide(wstr);
}
 | output=
multibyte char z is 1 bytes
multibyte char ß is 2 bytes
multibyte char 水 is 3 bytes
multibyte char 🍌 is 4 bytes
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc wctomb}}
{{dsc inc | cpp/string/multibyte/dsc mbrtowc}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc see c | c/string/multibyte/wcrtomb}}
{{dsc end}}

[[de:cpp/string/multibyte/wcrtomb]]
[[es:cpp/string/multibyte/wcrtomb]]
[[fr:cpp/string/multibyte/wcrtomb]]
[[it:cpp/string/multibyte/wcrtomb]]
[[ja:cpp/string/multibyte/wcrtomb]]
[[pt:cpp/string/multibyte/wcrtomb]]
[[ru:cpp/string/multibyte/wcrtomb]]
[[zh:cpp/string/multibyte/wcrtomb]]</text>
      <sha1>69luebjk6gcnkhz131gjipwyilj77xp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/wcsrtombs</title>
    <ns>0</ns>
    <id>4640</id>
    <revision>
      <id>77504</id>
      <parentid>77503</parentid>
      <timestamp>2015-03-28T02:11:55Z</timestamp>
      <contributor>
        <username>Lingxi</username>
        <id>3179</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3429">{{cpp/title|wcsrtombs}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
std::size_t wcsrtombs( char* dst,
                       const wchar_t** src,
                       std::size_t len,
                       std::mbstate_t* ps );
}}

Converts a sequence of wide characters from the array whose first element is pointed to by {{tt|*src}} to its narrow multibyte representation that begins in the conversion state described by {{tt|*ps}}. If {{tt|dst}} is not null, converted characters are stored in the successive elements of the char array pointed to by {{tt|dst}}. No more than {{tt|len}} bytes are written to the destination array.

Each character is converted as if by a call to {{lc|std::wcrtomb}}. The conversion stops if:

* The null character was converted and stored. {{tt|src}} is set to {{lc|NULL}} and {{tt|*ps}} represents the initial shift state.
* A {{c|wchar_t}} was found that does not correspond to a valid character in the current C locale. {{tt|src}} is set to point at the first unconverted wide character.
* the next multibyte character to be stored would exceed {{tt|len}}. {{tt|src}} is set to point at the first unconverted wide character. This condition is not checked if {{c|1=dst==NULL}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to narrow character array where the multibyte characters will be stored}}
{{par | src | pointer to pointer to the first element of a null-terminated wide string}}
{{par | len | number of bytes available in the array pointed to by dst}}
{{par | ps | pointer to the conversion state object}}
{{par end}}

===Return value===
On success, returns the number of bytes (including any shift sequences, but excluding the terminating {{c|'\0'}}) written to the character array whose first element is pointed to by {{tt|dst}}. If {{c|1=dst==NULL}}, returns the number of bytes that would have been written (again, excluding the terminating null character {{c|'\0'}}).

On conversion error (if invalid wide character was encountered), returns {{c|static_cast&lt;std::size_t&gt;(-1)}}, stores {{lc|EILSEQ}} in {{lc|errno}}, and leaves {{c|*ps}} in unspecified state.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;clocale&gt;
#include &lt;string&gt;
#include &lt;cwchar&gt;

void print_wide(const wchar_t* wstr)
{
    std::mbstate_t state = std::mbstate_t();
    int len = 1 + std::wcsrtombs(nullptr, &amp;wstr, 0, &amp;state);
    std::vector&lt;char&gt; mbstr(len);
    std::wcsrtombs(&amp;mbstr[0], &amp;wstr, mbstr.size(), &amp;state);
    std::cout &lt;&lt; &quot;multibyte string: &quot; &lt;&lt; &amp;mbstr[0] &lt;&lt; '\n'
              &lt;&lt; &quot;Length, including '\\0': &quot; &lt;&lt; mbstr.size() &lt;&lt; '\n';
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L&quot;z\u00df\u6c34\U0001d10b&quot;; // or L&quot;zß水𝄋&quot;
    print_wide(wstr);
}
 | output=
multibyte string: zß水𝄋
Length, including '\0': 11
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc wcrtomb}}
{{dsc inc | cpp/string/multibyte/dsc mbsrtowcs}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc see c | c/string/multibyte/wcsrtombs}}
{{dsc end}}

[[de:cpp/string/multibyte/wcsrtombs]]
[[es:cpp/string/multibyte/wcsrtombs]]
[[fr:cpp/string/multibyte/wcsrtombs]]
[[it:cpp/string/multibyte/wcsrtombs]]
[[ja:cpp/string/multibyte/wcsrtombs]]
[[pt:cpp/string/multibyte/wcsrtombs]]
[[ru:cpp/string/multibyte/wcsrtombs]]
[[zh:cpp/string/multibyte/wcsrtombs]]</text>
      <sha1>3riopicunemirfsdweqekczo0bkaq1s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/wcstombs</title>
    <ns>0</ns>
    <id>4641</id>
    <revision>
      <id>80013</id>
      <parentid>59073</parentid>
      <timestamp>2015-07-28T17:23:02Z</timestamp>
      <contributor>
        <ip>2.125.108.101</ip>
      </contributor>
      <text xml:space="preserve" bytes="2913">{{cpp/title|wcstombs}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cstdlib |
std::size_t wcstombs( char* dst, const wchar_t* src, std::size_t len);
}}

Converts a sequence of wide characters from the array whose first element is pointed to by {{tt|src}} to its narrow multibyte representation that begins in the initial shift state. Converted characters are stored in the successive elements of the char array pointed to by {{tt|dst}}. No more than {{tt|len}} bytes are written to the destination array.

Each character is converted as if by a call to {{lc|std::wctomb}}, except that the wctomb's conversion state is unaffected. The conversion stops if:

* The null character was converted and stored.
* A {{c|wchar_t}} was found that does not correspond to a valid character in the current C locale.
* The next multibyte character to be stored would exceed {{tt|len}}.

===Notes===
In most implementations, this function updates a global static object of type {{lc|std::mbstate_t}} as it processes through the string, and cannot be called simultaneously by two threads, {{c|std::wcsrtombs}} should be used in such cases.

POSIX specifies a common extension: if {{tt|dst}} is a null pointer, this function returns the number of bytes that would be written to {{tt|dst}}, if converted. Similar behavior is standard for {{c|std::wcsrtombs}}.

===Parameters===
{{par begin}}
{{par | dst | pointer to narrow character array where the multibyte character will be stored}}
{{par | src | pointer to the first element of a null-terminated wide string to convert}}
{{par | len | number of byte available in the array pointed to by dst}}
{{par end}}

===Return value===
On success, returns the number of bytes (including any shift sequences, but excluding the terminating {{c|'\0'}}) written to the character array whose first element is pointed to by {{tt|dst}}.

On conversion error (if invalid wide character was encountered), returns {{c|static_cast&lt;std::size_t&gt;(-1)}}.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;cstdlib&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L&quot;z\u00df\u6c34\U0001d10b&quot;; // or L&quot;zß水𝄋&quot;
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout &lt;&lt; &quot;multibyte string: &quot; &lt;&lt; mbstr &lt;&lt; '\n';
}
 | output=
multibyte string: zß水𝄋
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc wcsrtombs}}
{{dsc inc | cpp/string/multibyte/dsc mbstowcs}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc see c | c/string/multibyte/wcstombs}}
{{dsc end}}

[[de:cpp/string/multibyte/wcstombs]]
[[es:cpp/string/multibyte/wcstombs]]
[[fr:cpp/string/multibyte/wcstombs]]
[[it:cpp/string/multibyte/wcstombs]]
[[ja:cpp/string/multibyte/wcstombs]]
[[pt:cpp/string/multibyte/wcstombs]]
[[ru:cpp/string/multibyte/wcstombs]]
[[zh:cpp/string/multibyte/wcstombs]]</text>
      <sha1>r8sqfh6lmncfcfgzbeqv98rf8lcx64u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/wctob</title>
    <ns>0</ns>
    <id>4633</id>
    <revision>
      <id>59076</id>
      <parentid>51285</parentid>
      <timestamp>2013-06-01T06:26:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1996">{{cpp/title|wctob}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cwchar |
int wctob( std::wint_t c );
}}

Narrows a wide character {{tt|c}} if its multibyte character equivalent in the initial shift state is a single byte.

This is typically possible for the characters from the ASCII character set, since most multibyte encodings (such as UTF-8) use single bytes to encode those characters.

===Parameters===
{{par begin}}
{{par | c | wide character to narrow}}
{{par end}}

===Return value===
{{lc|EOF}} if {{tt|c}} does not represent a multibyte character with length {{c|1}} in initial shift state.

Otherwise, the single-byte representation of {{tt|c}} as {{c|unsigned char}} converted to {{c|int}}

===Example===
{{example
 | 
 | code=
#include &lt;clocale&gt;
#include &lt;cwchar&gt;
#include &lt;iostream&gt;

void try_narrowing(wchar_t c)
{
    int cn = std::wctob(c);
    if(cn != EOF)
        std::cout &lt;&lt; '\'' &lt;&lt; c &lt;&lt; &quot;' narrowed to &quot; &lt;&lt; +cn &lt;&lt; '\n';
    else
        std::cout &lt;&lt; '\'' &lt;&lt; c &lt;&lt; &quot;' could not be narrowed\n&quot;;
}
 
int main()
{
    std::setlocale(LC_ALL, &quot;th_TH.utf8&quot;);
    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; &quot;In Thai UTF-8 locale:\n&quot;;
    try_narrowing(L'a');
    try_narrowing(L'๛');

    std::setlocale(LC_ALL, &quot;th_TH.tis620&quot;);
    std::cout &lt;&lt; &quot;In Thai TIS-620 locale:\n&quot;;
    try_narrowing(L'a');
    try_narrowing(L'๛');
}
 | output=
In Thai UTF-8 locale:
'0x61' narrowed to 0x61
'0xe5b' could not be narrowed
In Thai TIS-620 locale:
'0x61' narrowed to 0x61
'0xe5b' narrowed to 0xfb
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc btowc}}
{{dsc inc | cpp/io/basic_ios/dsc narrow}}
{{dsc inc | cpp/locale/ctype/dsc narrow}}
{{dsc see c | c/string/multibyte/wctob}}
{{dsc end}}

[[de:cpp/string/multibyte/wctob]]
[[es:cpp/string/multibyte/wctob]]
[[fr:cpp/string/multibyte/wctob]]
[[it:cpp/string/multibyte/wctob]]
[[ja:cpp/string/multibyte/wctob]]
[[pt:cpp/string/multibyte/wctob]]
[[ru:cpp/string/multibyte/wctob]]
[[zh:cpp/string/multibyte/wctob]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/multibyte/wctomb</title>
    <ns>0</ns>
    <id>4635</id>
    <revision>
      <id>59077</id>
      <parentid>51286</parentid>
      <timestamp>2013-06-01T06:26:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2984">{{cpp/title|wctomb}}
{{cpp/string/multibyte/navbar}}
{{ddcl | header=cstdlib |
int wctomb( char *s, wchar_t wc );
}}

Converts a wide character {{tt|wc}} to multibyte encoding and stores it (including any shift sequences) in the char array whose first element is pointed to by {{tt|s}}. No more than {{c|MB_CUR_MAX}} characters are stored.

If {{tt|wc}} is the null character, the null byte is written to {{tt|s}}, preceded by any shift sequences necessary to restore the initial shift state.

If {{tt|s}} is a null pointer, resets the global conversion state and determines whether shift sequences are used.

===Parameters===
{{par begin}}
{{par | s | pointer to the character array for output}}
{{par | wc | wide character to convert}}
{{par end}}

===Return value===
If {{tt|s}} is not a null pointer, returns the number of bytes that are contained in the multibyte representation of {{tt|wc}} or  {{c|-1}} if {{tt|wc}} is not a valid character. 

If {{tt|s}} is a null pointer, resets its internal conversion state to represent the initial shift state and returns {{c|0}} if the current multibyte encoding is not state-dependent (does not use shift sequences) or a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).

===Notes===
Each call to {{tt|wctomb}} updates the internal global conversion state (a static object of type {{lc|std::mbstate_t}}, only known to this function). If the multibyte encoding uses shift states, this function is not reentrant. In any case, multiple threads should not call {{tt|wctomb}} without synchronization: {{lc|std::wcrtomb}} may be used instead.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;string&gt;
#include &lt;cstdlib&gt;

void print_wide(const std::wstring&amp; wstr)
{
    bool shifts = std::wctomb(NULL, 0); // reset the conversion state
    std::cout &lt;&lt; &quot;shift sequences &quot; &lt;&lt; (shifts ? &quot;are&quot; : &quot;not&quot; ) &lt;&lt; &quot; used\n&quot;;
    for (wchar_t wc : wstr) {
        std::string mb(MB_CUR_MAX, '\0');
        int ret = std::wctomb(&amp;mb[0], wc);
        std::cout &lt;&lt; &quot;multibyte char &quot; &lt;&lt; mb &lt;&lt; &quot; is &quot; &lt;&lt; ret &lt;&lt; &quot; bytes\n&quot;;
    }
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    // UTF-8 narrow multibyte encoding
    std::wstring wstr = L&quot;z\u00df\u6c34\U0001d10b&quot;; // or L&quot;zß水𝄋&quot;
    print_wide(wstr);
}
 | output=
shift sequences not used
multibyte char z is 1 bytes
multibyte char ß is 2 bytes
multibyte char 水 is 3 bytes
multibyte char 𝄋 is 4 bytes
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/multibyte/dsc mbtowc}}
{{dsc inc | cpp/string/multibyte/dsc wcrtomb}}
{{dsc inc | cpp/locale/codecvt/dsc do_out}}
{{dsc see c | c/string/multibyte/wctomb}}
{{dsc end}}

[[de:cpp/string/multibyte/wctomb]]
[[es:cpp/string/multibyte/wctomb]]
[[fr:cpp/string/multibyte/wctomb]]
[[it:cpp/string/multibyte/wctomb]]
[[ja:cpp/string/multibyte/wctomb]]
[[pt:cpp/string/multibyte/wctomb]]
[[ru:cpp/string/multibyte/wctomb]]
[[zh:cpp/string/multibyte/wctomb]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow</title>
    <ns>0</ns>
    <id>3807</id>
    <redirect title="cpp/string/byte" />
    <revision>
      <id>14283</id>
      <timestamp>2011-11-27T01:11:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow]] to [[cpp/string/byte]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/string/byte]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/atof</title>
    <ns>0</ns>
    <id>3808</id>
    <redirect title="cpp/string/byte/atof" />
    <revision>
      <id>14285</id>
      <timestamp>2011-11-27T01:11:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/atof]] to [[cpp/string/byte/atof]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/string/byte/atof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/atoi</title>
    <ns>0</ns>
    <id>3809</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>14287</id>
      <timestamp>2011-11-27T01:11:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/atoi]] to [[cpp/string/byte/atoi]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/atol</title>
    <ns>0</ns>
    <id>3810</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>15841</id>
      <parentid>14289</parentid>
      <timestamp>2011-12-17T02:23:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/atoll</title>
    <ns>0</ns>
    <id>3811</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>15840</id>
      <parentid>14291</parentid>
      <timestamp>2011-12-17T02:23:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isalnum</title>
    <ns>0</ns>
    <id>3812</id>
    <redirect title="cpp/string/byte/isalnum" />
    <revision>
      <id>14293</id>
      <timestamp>2011-11-27T01:11:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isalnum]] to [[cpp/string/byte/isalnum]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isalnum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isalpha</title>
    <ns>0</ns>
    <id>3813</id>
    <redirect title="cpp/string/byte/isalpha" />
    <revision>
      <id>14295</id>
      <timestamp>2011-11-27T01:11:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isalpha]] to [[cpp/string/byte/isalpha]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isalpha]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isblank</title>
    <ns>0</ns>
    <id>3814</id>
    <redirect title="cpp/string/byte/isblank" />
    <revision>
      <id>14297</id>
      <timestamp>2011-11-27T01:11:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isblank]] to [[cpp/string/byte/isblank]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isblank]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/iscntrl</title>
    <ns>0</ns>
    <id>3815</id>
    <redirect title="cpp/string/byte/iscntrl" />
    <revision>
      <id>14299</id>
      <timestamp>2011-11-27T01:11:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/iscntrl]] to [[cpp/string/byte/iscntrl]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/iscntrl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isdigit</title>
    <ns>0</ns>
    <id>3816</id>
    <redirect title="cpp/string/byte/isdigit" />
    <revision>
      <id>14301</id>
      <timestamp>2011-11-27T01:11:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isdigit]] to [[cpp/string/byte/isdigit]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isgraph</title>
    <ns>0</ns>
    <id>3817</id>
    <redirect title="cpp/string/byte/isgraph" />
    <revision>
      <id>14303</id>
      <timestamp>2011-11-27T01:11:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isgraph]] to [[cpp/string/byte/isgraph]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isgraph]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/islower</title>
    <ns>0</ns>
    <id>3818</id>
    <redirect title="cpp/string/byte/islower" />
    <revision>
      <id>14305</id>
      <timestamp>2011-11-27T01:11:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/islower]] to [[cpp/string/byte/islower]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/islower]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isprint</title>
    <ns>0</ns>
    <id>3819</id>
    <redirect title="cpp/string/byte/isprint" />
    <revision>
      <id>14307</id>
      <timestamp>2011-11-27T01:11:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isprint]] to [[cpp/string/byte/isprint]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isprint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/ispunct</title>
    <ns>0</ns>
    <id>3820</id>
    <redirect title="cpp/string/byte/ispunct" />
    <revision>
      <id>14309</id>
      <timestamp>2011-11-27T01:11:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/ispunct]] to [[cpp/string/byte/ispunct]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/ispunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isspace</title>
    <ns>0</ns>
    <id>3821</id>
    <redirect title="cpp/string/byte/isspace" />
    <revision>
      <id>14311</id>
      <timestamp>2011-11-27T01:11:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isspace]] to [[cpp/string/byte/isspace]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isspace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isupper</title>
    <ns>0</ns>
    <id>3822</id>
    <redirect title="cpp/string/byte/isupper" />
    <revision>
      <id>14313</id>
      <timestamp>2011-11-27T01:11:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isupper]] to [[cpp/string/byte/isupper]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/isupper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/isxdigit</title>
    <ns>0</ns>
    <id>3823</id>
    <redirect title="cpp/string/byte/isxdigit" />
    <revision>
      <id>14315</id>
      <timestamp>2011-11-27T01:11:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/isxdigit]] to [[cpp/string/byte/isxdigit]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/string/byte/isxdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/memchr</title>
    <ns>0</ns>
    <id>3824</id>
    <redirect title="cpp/string/byte/memchr" />
    <revision>
      <id>14317</id>
      <timestamp>2011-11-27T01:11:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/memchr]] to [[cpp/string/byte/memchr]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/memchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/memcmp</title>
    <ns>0</ns>
    <id>3825</id>
    <redirect title="cpp/string/byte/memcmp" />
    <revision>
      <id>14319</id>
      <timestamp>2011-11-27T01:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/memcmp]] to [[cpp/string/byte/memcmp]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/memcmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/memcpy</title>
    <ns>0</ns>
    <id>3826</id>
    <redirect title="cpp/string/byte/memcpy" />
    <revision>
      <id>14321</id>
      <timestamp>2011-11-27T01:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/memcpy]] to [[cpp/string/byte/memcpy]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/memcpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/memmove</title>
    <ns>0</ns>
    <id>3827</id>
    <redirect title="cpp/string/byte/memmove" />
    <revision>
      <id>14323</id>
      <timestamp>2011-11-27T01:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/memmove]] to [[cpp/string/byte/memmove]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/memmove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/memset</title>
    <ns>0</ns>
    <id>3828</id>
    <redirect title="cpp/string/byte/memset" />
    <revision>
      <id>14325</id>
      <timestamp>2011-11-27T01:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/memset]] to [[cpp/string/byte/memset]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/memset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strcat</title>
    <ns>0</ns>
    <id>3829</id>
    <redirect title="cpp/string/byte/strcat" />
    <revision>
      <id>14327</id>
      <timestamp>2011-11-27T01:11:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strcat]] to [[cpp/string/byte/strcat]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strcat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strchr</title>
    <ns>0</ns>
    <id>3830</id>
    <redirect title="cpp/string/byte/strchr" />
    <revision>
      <id>14329</id>
      <timestamp>2011-11-27T01:11:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strchr]] to [[cpp/string/byte/strchr]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strcmp</title>
    <ns>0</ns>
    <id>3831</id>
    <redirect title="cpp/string/byte/strcmp" />
    <revision>
      <id>14331</id>
      <timestamp>2011-11-27T01:11:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strcmp]] to [[cpp/string/byte/strcmp]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strcmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strcpy</title>
    <ns>0</ns>
    <id>3832</id>
    <redirect title="cpp/string/byte/strcpy" />
    <revision>
      <id>14333</id>
      <timestamp>2011-11-27T01:11:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strcpy]] to [[cpp/string/byte/strcpy]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strcpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strcspn</title>
    <ns>0</ns>
    <id>3833</id>
    <redirect title="cpp/string/byte/strcspn" />
    <revision>
      <id>14335</id>
      <timestamp>2011-11-27T01:11:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strcspn]] to [[cpp/string/byte/strcspn]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strcspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strlen</title>
    <ns>0</ns>
    <id>3834</id>
    <redirect title="cpp/string/byte/strlen" />
    <revision>
      <id>14337</id>
      <timestamp>2011-11-27T01:11:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strlen]] to [[cpp/string/byte/strlen]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strlen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strncat</title>
    <ns>0</ns>
    <id>3835</id>
    <redirect title="cpp/string/byte/strncat" />
    <revision>
      <id>14339</id>
      <timestamp>2011-11-27T01:11:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strncat]] to [[cpp/string/byte/strncat]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strncat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strncmp</title>
    <ns>0</ns>
    <id>3836</id>
    <redirect title="cpp/string/byte/strncmp" />
    <revision>
      <id>14341</id>
      <timestamp>2011-11-27T01:11:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strncmp]] to [[cpp/string/byte/strncmp]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strncmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strncpy</title>
    <ns>0</ns>
    <id>3837</id>
    <redirect title="cpp/string/byte/strncpy" />
    <revision>
      <id>14343</id>
      <timestamp>2011-11-27T01:11:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strncpy]] to [[cpp/string/byte/strncpy]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strncpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strpbrk</title>
    <ns>0</ns>
    <id>3838</id>
    <redirect title="cpp/string/byte/strpbrk" />
    <revision>
      <id>14345</id>
      <timestamp>2011-11-27T01:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strpbrk]] to [[cpp/string/byte/strpbrk]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strpbrk]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strrchr</title>
    <ns>0</ns>
    <id>3839</id>
    <redirect title="cpp/string/byte/strrchr" />
    <revision>
      <id>14347</id>
      <timestamp>2011-11-27T01:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strrchr]] to [[cpp/string/byte/strrchr]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strrchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strspn</title>
    <ns>0</ns>
    <id>3840</id>
    <redirect title="cpp/string/byte/strspn" />
    <revision>
      <id>14349</id>
      <timestamp>2011-11-27T01:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strspn]] to [[cpp/string/byte/strspn]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strstr</title>
    <ns>0</ns>
    <id>3841</id>
    <redirect title="cpp/string/byte/strstr" />
    <revision>
      <id>14351</id>
      <timestamp>2011-11-27T01:11:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strstr]] to [[cpp/string/byte/strstr]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strstr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strtod</title>
    <ns>0</ns>
    <id>3842</id>
    <redirect title="cpp/string/byte/strtof" />
    <revision>
      <id>15839</id>
      <parentid>14353</parentid>
      <timestamp>2011-12-17T02:22:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strtof</title>
    <ns>0</ns>
    <id>3843</id>
    <redirect title="cpp/string/byte/strtof" />
    <revision>
      <id>14355</id>
      <timestamp>2011-11-27T01:11:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strtof]] to [[cpp/string/byte/strtof]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strtol</title>
    <ns>0</ns>
    <id>3844</id>
    <redirect title="cpp/string/byte/strtol" />
    <revision>
      <id>14357</id>
      <timestamp>2011-11-27T01:11:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strtol]] to [[cpp/string/byte/strtol]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strtold</title>
    <ns>0</ns>
    <id>3845</id>
    <redirect title="cpp/string/byte/strtof" />
    <revision>
      <id>15837</id>
      <parentid>14359</parentid>
      <timestamp>2011-12-17T02:22:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix infinite redirect</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strtoll</title>
    <ns>0</ns>
    <id>3846</id>
    <redirect title="cpp/string/byte/strtol" />
    <revision>
      <id>15836</id>
      <parentid>14361</parentid>
      <timestamp>2011-12-17T02:21:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/string/byte/strtol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strtoul</title>
    <ns>0</ns>
    <id>3847</id>
    <redirect title="cpp/string/byte/strtoul" />
    <revision>
      <id>14363</id>
      <timestamp>2011-11-27T01:11:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strtoul]] to [[cpp/string/byte/strtoul]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strtoul]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strtoull</title>
    <ns>0</ns>
    <id>3848</id>
    <redirect title="cpp/string/byte/strtoul" />
    <revision>
      <id>15835</id>
      <parentid>14365</parentid>
      <timestamp>2011-12-17T02:21:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strtoul]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/strxfrm</title>
    <ns>0</ns>
    <id>3849</id>
    <redirect title="cpp/string/byte/strxfrm" />
    <revision>
      <id>14367</id>
      <timestamp>2011-11-27T01:11:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/strxfrm]] to [[cpp/string/byte/strxfrm]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/strxfrm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/tolower</title>
    <ns>0</ns>
    <id>3850</id>
    <redirect title="cpp/string/byte/tolower" />
    <revision>
      <id>14369</id>
      <timestamp>2011-11-27T01:11:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/tolower]] to [[cpp/string/byte/tolower]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/tolower]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/narrow/toupper</title>
    <ns>0</ns>
    <id>3851</id>
    <redirect title="cpp/string/byte/toupper" />
    <revision>
      <id>14371</id>
      <timestamp>2011-11-27T01:11:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/narrow/toupper]] to [[cpp/string/byte/toupper]]: narrow -&gt; byte</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/string/byte/toupper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/stof</title>
    <ns>0</ns>
    <id>2752</id>
    <redirect title="cpp/string/basic string/stof" />
    <revision>
      <id>10416</id>
      <timestamp>2011-09-12T18:42:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/stof]] to [[cpp/string/basic string/stof]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/string/basic string/stof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/stoi</title>
    <ns>0</ns>
    <id>2467</id>
    <redirect title="cpp/string/basic string/stol" />
    <revision>
      <id>15834</id>
      <parentid>8767</parentid>
      <timestamp>2011-12-17T02:20:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/string/basic_string/stol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/stol</title>
    <ns>0</ns>
    <id>2750</id>
    <redirect title="cpp/string/basic string/stol" />
    <revision>
      <id>10412</id>
      <timestamp>2011-09-12T18:41:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/stol]] to [[cpp/string/basic string/stol]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/string/basic string/stol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/stoll</title>
    <ns>0</ns>
    <id>2471</id>
    <redirect title="cpp/string/basic string/stol" />
    <revision>
      <id>15833</id>
      <parentid>8790</parentid>
      <timestamp>2011-12-17T02:20:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/string/basic_string/stol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/stoul</title>
    <ns>0</ns>
    <id>2751</id>
    <redirect title="cpp/string/basic string/stoul" />
    <revision>
      <id>10414</id>
      <timestamp>2011-09-12T18:42:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/stoul]] to [[cpp/string/basic string/stoul]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/string/basic string/stoul]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/stoull</title>
    <ns>0</ns>
    <id>2472</id>
    <redirect title="cpp/string/basic string/stoul" />
    <revision>
      <id>15832</id>
      <parentid>8791</parentid>
      <timestamp>2011-12-17T02:20:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix double redirect</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/string/basic_string/stoul]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/to string</title>
    <ns>0</ns>
    <id>2753</id>
    <redirect title="cpp/string/basic string/to string" />
    <revision>
      <id>10418</id>
      <timestamp>2011-09-12T18:42:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/to string]] to [[cpp/string/basic string/to string]]</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/string/basic string/to string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/to wstring</title>
    <ns>0</ns>
    <id>2754</id>
    <redirect title="cpp/string/basic string/to wstring" />
    <revision>
      <id>10420</id>
      <timestamp>2011-09-12T18:42:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/string/to wstring]] to [[cpp/string/basic string/to wstring]]</comment>
      <text xml:space="preserve" bytes="48">#REDIRECT [[cpp/string/basic string/to wstring]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide</title>
    <ns>0</ns>
    <id>2597</id>
    <revision>
      <id>71111</id>
      <parentid>59080</parentid>
      <timestamp>2014-06-06T12:12:03Z</timestamp>
      <contributor>
        <username>Newatthis</username>
        <id>2723</id>
      </contributor>
      <minor/>
      <comment>see also C</comment>
      <text xml:space="preserve" bytes="3521">{{title|Null-terminated wide strings}}
{{cpp/string/wide/navbar}}

A null-terminated wide string is a sequence of valid wide characters, ending with a null character.

===Functions===
{{dsc begin}}
{{dsc h2 | Character classification}}
{{dsc header | cwctype}}
{{dsc inc | cpp/string/wide/dsc iswalnum}}
{{dsc inc | cpp/string/wide/dsc iswalpha}}
{{dsc inc | cpp/string/wide/dsc iswlower}}
{{dsc inc | cpp/string/wide/dsc iswupper}}
{{dsc inc | cpp/string/wide/dsc iswdigit}}
{{dsc inc | cpp/string/wide/dsc iswxdigit}}
{{dsc inc | cpp/string/wide/dsc iswcntrl}}
{{dsc inc | cpp/string/wide/dsc iswgraph}}
{{dsc inc | cpp/string/wide/dsc iswspace}}
{{dsc inc | cpp/string/wide/dsc iswblank}}
{{dsc inc | cpp/string/wide/dsc iswprint}}
{{dsc inc | cpp/string/wide/dsc iswpunct}}
{{dsc inc | cpp/string/wide/dsc iswctype}}
{{dsc inc | cpp/string/wide/dsc wctype}}
{{dsc h2 | Character manipulation}}
{{dsc header | cwctype}}
{{dsc inc | cpp/string/wide/dsc towlower}}
{{dsc inc | cpp/string/wide/dsc towupper}}
{{dsc inc | cpp/string/wide/dsc towctrans}}
{{dsc inc | cpp/string/wide/dsc wctrans}}
{{dsc end}}
{{cpp/string/character classes}}
{{dsc begin}}
{{dsc h2 | Conversions to numeric formats}}
{{dsc header | cwchar}}
{{dsc inc | cpp/string/wide/dsc wcstol}}
{{dsc inc | cpp/string/wide/dsc wcstoul}}
{{dsc inc | cpp/string/wide/dsc wcstof}}
{{dsc header | cinttypes}}
{{dsc inc | cpp/string/wide/dsc wcstoimax}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | String manipulation}}
{{dsc header | cwchar}}
{{dsc inc | cpp/string/wide/dsc wcscpy}}
{{dsc inc | cpp/string/wide/dsc wcsncpy}}
{{dsc inc | cpp/string/wide/dsc wcscat}}
{{dsc inc | cpp/string/wide/dsc wcsncat}}
{{dsc inc | cpp/string/wide/dsc wcsxfrm}}

{{dsc h2 | String examination}}
{{dsc header | cwchar}}
{{dsc inc | cpp/string/wide/dsc wcslen}}
{{dsc inc | cpp/string/wide/dsc wcscmp}}
{{dsc inc | cpp/string/wide/dsc wcsncmp}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc inc | cpp/string/wide/dsc wcsrchr}}
{{dsc inc | cpp/string/wide/dsc wcsspn}}
{{dsc inc | cpp/string/wide/dsc wcscspn}}
{{dsc inc | cpp/string/wide/dsc wcspbrk}}
{{dsc inc | cpp/string/wide/dsc wcsstr}}
{{dsc inc | cpp/string/wide/dsc wcstok}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Wide character array manipulation}}
{{dsc header | cwchar}}
{{dsc inc | cpp/string/wide/dsc wmemcpy}}
{{dsc inc | cpp/string/wide/dsc wmemmove}}
{{dsc inc | cpp/string/wide/dsc wmemcmp}}
{{dsc inc | cpp/string/wide/dsc wmemchr}}
{{dsc inc | cpp/string/wide/dsc wmemset}}
{{dsc end}}

===Types===
{{dsc begin}}
{{dsc header | cwctype}}
{{dsc | {{tt|wctrans_t}} | scalar type that holds locale-specific character mapping }}
{{dsc | {{tt|wctype_t}} | scalar type that holds locale-specific character classification }}
{{dsc | {{tt|wint_t}} | integer type that can hold any valid wide character and at least one more value }}
{{dsc end}}

===Macros===
{{dsc begin}}
{{dsc header | cwchar}}
{{dsc macro const | WEOF |  nolink=true | a non-character value of type wint_t used to indicate errors}}
{{dsc macro const | WCHAR_MIN |  nolink=true | the smallest valid value of wchar_t }}
{{dsc macro const | WCHAR_MAX |  nolink=true | the largest valid value of wchar_t }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/string/wide | Null-terminated wide strings}}
{{dsc end}}

[[de:cpp/string/wide]]
[[es:cpp/string/wide]]
[[fr:cpp/string/wide]]
[[it:cpp/string/wide]]
[[ja:cpp/string/wide]]
[[pt:cpp/string/wide]]
[[ru:cpp/string/wide]]
[[zh:cpp/string/wide]]</text>
      <sha1>l26w96frg0zf8n2nn3qxssljw6yg1cr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswalnum</title>
    <ns>0</ns>
    <id>1763</id>
    <revision>
      <id>75995</id>
      <parentid>59081</parentid>
      <timestamp>2015-02-06T02:13:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1651">{{cpp/title|iswalnum}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswalnum( std::wint_t ch );
}}

Checks if the given wide character is an alphanumeric character, i.e. either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}) or any alphanumeric character specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a alphanumeric character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u13ad'; // the Cherokee letter HA ('Ꭽ')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswalnum(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswalnum(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswalnum(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswalnum(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswalnum(0x13ad) = false
in Unicode locale, iswalnum(0x13ad) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isalnum}}
{{dsc inc | cpp/string/byte/dsc isalnum}}
{{dsc see c | c/string/wide/iswalnum}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswalnum]]
[[es:cpp/string/wide/iswalnum]]
[[fr:cpp/string/wide/iswalnum]]
[[it:cpp/string/wide/iswalnum]]
[[ja:cpp/string/wide/iswalnum]]
[[pt:cpp/string/wide/iswalnum]]
[[ru:cpp/string/wide/iswalnum]]
[[zh:cpp/string/wide/iswalnum]]</text>
      <sha1>brxvx7h59dxbrpaaqx3wdhmr5di10m9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswalpha</title>
    <ns>0</ns>
    <id>1764</id>
    <revision>
      <id>59084</id>
      <parentid>51289</parentid>
      <timestamp>2013-06-01T06:26:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1614">{{cpp/title|iswalpha}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswalpha( std::wint_t ch );
}}

Checks if the given wide character is an alphabetic character, i.e. either an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}) or any alphabetic character specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a alphabetic character, {{tt|0}} otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u0b83'; // Tamil sign Visarga ('ஃ')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswalpha(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswalpha(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswalpha(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswalpha(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswalpha(0xb83) = false
in Unicode locale, iswalpha(0xb83) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isalpha}}
{{dsc inc | cpp/string/byte/dsc isalpha}}
{{dsc see c | c/string/wide/iswalpha}}
{{dsc end}}

{{cpp/string/character classes}}

[[de:cpp/string/wide/iswalpha]]
[[es:cpp/string/wide/iswalpha]]
[[fr:cpp/string/wide/iswalpha]]
[[it:cpp/string/wide/iswalpha]]
[[ja:cpp/string/wide/iswalpha]]
[[pt:cpp/string/wide/iswalpha]]
[[ru:cpp/string/wide/iswalpha]]
[[zh:cpp/string/wide/iswalpha]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswblank</title>
    <ns>0</ns>
    <id>2932</id>
    <revision>
      <id>76000</id>
      <parentid>63433</parentid>
      <timestamp>2015-02-06T02:14:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1641">{{cpp/title|iswblank}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype | since=c++11 |
int iswblank( std::wint_t ch );
}}

Checks if the given wide character is classified as blank character (that is, a whitespace character used to separate words in a sentence) by the current C locale. In the default C locale, only space ({{tt|0x20}}) and horizontal tab ({{tt|0x09}}) are blank characters.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a blank character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u3000'; // Ideographic space ('　')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswblank(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswblank(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswblank(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswblank(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswblank(0x3000) = false
in Unicode locale, iswblank(0x3000) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isblank}}
{{dsc inc | cpp/string/byte/dsc isblank}}
{{dsc see c | c/string/wide/iswblank}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswblank]]
[[es:cpp/string/wide/iswblank]]
[[fr:cpp/string/wide/iswblank]]
[[it:cpp/string/wide/iswblank]]
[[ja:cpp/string/wide/iswblank]]
[[pt:cpp/string/wide/iswblank]]
[[ru:cpp/string/wide/iswblank]]
[[zh:cpp/string/wide/iswblank]]</text>
      <sha1>d5fwj4c2jt2rxe28cgeryfxcluah9xs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswcntrl</title>
    <ns>0</ns>
    <id>1765</id>
    <revision>
      <id>76001</id>
      <parentid>59086</parentid>
      <timestamp>2015-02-06T02:15:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1537">{{cpp/title|iswcntrl}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswcntrl( std::wint_t ch );
}}

Checks if the given wide character is a control character, i.e. codes {{tt|0x00-0x1F}} and {{tt|0x7F}} and any control characters specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a control character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u2028'; // the Unicode character &quot;line separator&quot; 

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswcntrl(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswcntrl(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswcntrl(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswcntrl(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswcntrl(0x2028) = false
in Unicode locale, iswcntrl(0x2028) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc iscntrl}}
{{dsc inc | cpp/string/byte/dsc iscntrl}}
{{dsc see c | c/string/wide/iswcntrl}}
{{dsc end}}

{{cpp/string/character classes}}

[[de:cpp/string/wide/iswcntrl]]
[[es:cpp/string/wide/iswcntrl]]
[[fr:cpp/string/wide/iswcntrl]]
[[it:cpp/string/wide/iswcntrl]]
[[ja:cpp/string/wide/iswcntrl]]
[[pt:cpp/string/wide/iswcntrl]]
[[ru:cpp/string/wide/iswcntrl]]
[[zh:cpp/string/wide/iswcntrl]]</text>
      <sha1>6jbofj226tqaxrkpmnlk7tqzosce0t7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswctype</title>
    <ns>0</ns>
    <id>2968</id>
    <revision>
      <id>76840</id>
      <parentid>76006</parentid>
      <timestamp>2015-03-03T14:51:43Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>ch =&gt; wc; see c</comment>
      <text xml:space="preserve" bytes="1525">{{cpp/title|iswctype}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswctype( std::wint_t wc, std::wctype_t desc );
}}

Classifies the wide character {{tt|wc}} using the current C locale's LC_CTYPE category identified by {{tt|desc}}.

===Parameters===
{{par begin}}
{{par | wc | the wide character to classify}}
{{par | desc | the LC_CTYPE category, obtained from a call to {{lc|std::wctype}}}}
{{par end}}

===Return value===
Non-zero if the character {{tt|ch}} has the property identified by {{tt|desc}} in LC_CTYPE facet of the current C locale, zero otherwise.

===Example===
{{example
 |
 | code=
#include &lt;clocale&gt;
#include &lt;cwctype&gt;
#include &lt;iostream&gt;
bool classify(wchar_t wc, const std::string&amp; cat)
{
    return std::iswctype(wc, std::wctype(cat.c_str()));
}
int main()
{
    std::setlocale(LC_ALL, &quot;ja_JP.UTF-8&quot;);
    std::cout &lt;&lt; &quot;The character \u6c34 is...\n&quot;;
    for(std::string s : {&quot;digit&quot;, &quot;alpha&quot;, &quot;space&quot;, &quot;cntrl&quot;, &quot;jkanji&quot;})
        std::cout &lt;&lt; s &lt;&lt; &quot;? &quot; &lt;&lt; std::boolalpha &lt;&lt; classify(L'\u6c34', s) &lt;&lt; '\n';
}
 | output=
The character 水 is...
digit? false
alpha? true
space? false
cntrl? false
jkanji? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wctype}}
{{dsc see c | c/string/wide/iswctype}}
{{dsc end}}

[[de:cpp/string/wide/iswctype]]
[[es:cpp/string/wide/iswctype]]
[[fr:cpp/string/wide/iswctype]]
[[it:cpp/string/wide/iswctype]]
[[ja:cpp/string/wide/iswctype]]
[[pt:cpp/string/wide/iswctype]]
[[ru:cpp/string/wide/iswctype]]
[[zh:cpp/string/wide/iswctype]]</text>
      <sha1>gj76wtmfokzh0gxytqbeboti7twk3tu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswdigit</title>
    <ns>0</ns>
    <id>1766</id>
    <revision>
      <id>76481</id>
      <parentid>75998</parentid>
      <timestamp>2015-02-19T16:32:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="2386">{{cpp/title|iswdigit}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswdigit( wint_t ch );
}}

Checks if the given wide character corresponds (if narrowed) to one of the ten decimal digit characters {{tt|0123456789}}.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is an numeric character, zero otherwise.

===Notes===
{{tt|std::iswdigit}} and {{lc|std::iswxdigit}} are the only standard wide character classification functions that are not affected by the currently installed C locale.

===Example===
{{example | Some locales offer additional character classes that detect non-ASCII digits
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;
void test(wchar_t a3, wchar_t u3, wchar_t j3)
{
    std::wcout &lt;&lt; std::boolalpha
               &lt;&lt; &quot;          '&quot; &lt;&lt; a3 &lt;&lt; &quot;'   '&quot; &lt;&lt; u3 &lt;&lt; &quot;'  '&quot; &lt;&lt; j3  &lt;&lt; &quot;'\n&quot;
               &lt;&lt; &quot;iswdigit &quot;
               &lt;&lt; (bool)std::iswdigit(a3) &lt;&lt; &quot;  &quot;
               &lt;&lt; (bool)std::iswdigit(u3) &lt;&lt; &quot; &quot;
               &lt;&lt; (bool)std::iswdigit(j3) &lt;&lt; '\n'
               &lt;&lt; &quot;jdigit:  &quot;
               &lt;&lt; (bool)std::iswctype(a3, std::wctype(&quot;jdigit&quot;)) &lt;&lt; ' '
               &lt;&lt; (bool)std::iswctype(u3, std::wctype(&quot;jdigit&quot;)) &lt;&lt; ' '
               &lt;&lt; (bool)std::iswctype(j3, std::wctype(&quot;jdigit&quot;)) &lt;&lt; '\n';
}
int main()
{
    wchar_t a3 = L'3';  // the ASCII digit 3
    wchar_t u3 = L'三'; // the CJK numeral 3
    wchar_t j3 = L'３'; // the fullwidth digit 3

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout &lt;&lt; &quot;In american locale:\n&quot;;
    test(a3, u3, j3);

    std::wcout &lt;&lt; &quot;\nIn japanese locale:\n&quot;;
    std::setlocale(LC_ALL, &quot;ja_JP.utf8&quot;);
    test(a3, u3, j3);
}
| output=
In american locale:
          '3'   '三'  '３'
iswdigit true  false false
jdigit:  false false false

In japanese locale:
          '3'   '三'  '３'
iswdigit true  false false
jdigit:  false false true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isdigit}}
{{dsc inc | cpp/string/byte/dsc isdigit}}
{{dsc see c | c/string/wide/iswdigit}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswdigit]]
[[es:cpp/string/wide/iswdigit]]
[[fr:cpp/string/wide/iswdigit]]
[[it:cpp/string/wide/iswdigit]]
[[ja:cpp/string/wide/iswdigit]]
[[pt:cpp/string/wide/iswdigit]]
[[ru:cpp/string/wide/iswdigit]]
[[zh:cpp/string/wide/iswdigit]]</text>
      <sha1>cokprtyr3wb0zn590ypya6y5dhphxkg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswgraph</title>
    <ns>0</ns>
    <id>1767</id>
    <revision>
      <id>76002</id>
      <parentid>62279</parentid>
      <timestamp>2015-02-06T02:15:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1787">{{cpp/title|iswgraph}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswgraph( std::wint_t ch );
}}

Checks if the given wide character has a graphical representation, i.e. it is either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}), a punctuation character({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}}) or any graphical character specific to the current C locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character has a graphical representation character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u2602'; // the Unicode character Umbrella ('☂')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswgraph(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswgraph(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswgraph(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswgraph(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswgraph(0x2602) = false
in Unicode locale, iswgraph(0x2602) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isgraph}}
{{dsc inc | cpp/string/byte/dsc isgraph}}
{{dsc see c | c/string/wide/iswgraph}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswgraph]]
[[es:cpp/string/wide/iswgraph]]
[[fr:cpp/string/wide/iswgraph]]
[[it:cpp/string/wide/iswgraph]]
[[ja:cpp/string/wide/iswgraph]]
[[pt:cpp/string/wide/iswgraph]]
[[ru:cpp/string/wide/iswgraph]]
[[zh:cpp/string/wide/iswgraph]]</text>
      <sha1>8b1gv43sfhsuic1ok08i3smkvvgi9ud</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswlower</title>
    <ns>0</ns>
    <id>1768</id>
    <revision>
      <id>75996</id>
      <parentid>59094</parentid>
      <timestamp>2015-02-06T02:13:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1524">{{cpp/title|iswlower}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswlower( std::wint_t ch );
}}

Checks if the given wide character is a lowercase letter, i.e. one of {{tt|abcdefghijklmnopqrstuvwxyz}} or any lowercase letter specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is an lowercase letter, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u0444'; // Cyrillic small letter ef ('ф')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswlower(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswlower(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswlower(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswlower(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswlower(0x444) = false
in Unicode locale, iswlower(0x444) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc islower}}
{{dsc inc | cpp/string/byte/dsc islower}}
{{dsc see c | c/string/wide/iswlower}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswlower]]
[[es:cpp/string/wide/iswlower]]
[[fr:cpp/string/wide/iswlower]]
[[it:cpp/string/wide/iswlower]]
[[ja:cpp/string/wide/iswlower]]
[[pt:cpp/string/wide/iswlower]]
[[ru:cpp/string/wide/iswlower]]
[[zh:cpp/string/wide/iswlower]]</text>
      <sha1>kyp2x9abci2toh8d60vvlopyzb5m9ai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswprint</title>
    <ns>0</ns>
    <id>1769</id>
    <revision>
      <id>76004</id>
      <parentid>62284</parentid>
      <timestamp>2015-02-06T02:16:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1710">{{cpp/title|iswprint}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswprint( std::wint_t ch );
}}

Checks if the given wide character can be printed, i.e. it is either a number ({{tt|0123456789}}), an uppercase letter ({{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}}), a lowercase letter ({{tt|abcdefghijklmnopqrstuvwxyz}}), a punctuation character({{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}}), space or any printable character specific to the current C locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character can be printed, zero otherwise.

===Example===
{{example
|code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u2002'; // en-space
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; std::boolalpha &lt;&lt; std::hex &lt;&lt; std::showbase
              &lt;&lt; &quot;in Unicode locale,\n&quot;
              &lt;&lt; &quot;iswprint('&quot; &lt;&lt; c &lt;&lt; &quot;') = &quot;
              &lt;&lt; (bool)std::iswprint(c) &lt;&lt; '\n';

    c = L'\u0082'; // break permitted
    std::cout &lt;&lt; &quot;iswprint('&quot; &lt;&lt; c &lt;&lt; &quot;') = &quot;
              &lt;&lt; (bool)std::iswprint(c) &lt;&lt; '\n';
}
|output=
in Unicode locale,
iswprint('0x2002') = true
iswprint('0x82') = false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isprint}}
{{dsc inc | cpp/string/byte/dsc isprint}}
{{dsc see c | c/string/wide/iswprint}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswprint]]
[[es:cpp/string/wide/iswprint]]
[[fr:cpp/string/wide/iswprint]]
[[it:cpp/string/wide/iswprint]]
[[ja:cpp/string/wide/iswprint]]
[[pt:cpp/string/wide/iswprint]]
[[ru:cpp/string/wide/iswprint]]
[[zh:cpp/string/wide/iswprint]]</text>
      <sha1>a1eqsikg57wa7qmw8liybykn8365815</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswpunct</title>
    <ns>0</ns>
    <id>1770</id>
    <revision>
      <id>76005</id>
      <parentid>59096</parentid>
      <timestamp>2015-02-06T02:16:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1584">{{cpp/title|iswpunct}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswpunct( std::wint_t ch );
}}

Checks if the given wide character is a punctuation character, i.e. it is one of {{tt|!&quot;#$%&amp;'()*+,-./:;&lt;{{=}}&gt;?@[\]^_`{&lt;nowiki&gt;&lt;/nowiki&gt;{{!}}&lt;nowiki&gt;&lt;/nowiki&gt;}~}} or any punctuation character specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a punctuation character, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u2051'; // Two asterisks ('⁑')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswpunct(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswpunct(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswpunct(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswpunct(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswpunct(0x2051) = false
in Unicode locale, iswpunct(0x2051) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc ispunct}}
{{dsc inc | cpp/string/byte/dsc ispunct}}
{{dsc see c | c/string/wide/iswpunct}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswpunct]]
[[es:cpp/string/wide/iswpunct]]
[[fr:cpp/string/wide/iswpunct]]
[[it:cpp/string/wide/iswpunct]]
[[ja:cpp/string/wide/iswpunct]]
[[pt:cpp/string/wide/iswpunct]]
[[ru:cpp/string/wide/iswpunct]]
[[zh:cpp/string/wide/iswpunct]]</text>
      <sha1>nb0enawilo9xfpomjz9e7wo7dkxjud8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswspace</title>
    <ns>0</ns>
    <id>1771</id>
    <revision>
      <id>76003</id>
      <parentid>63242</parentid>
      <timestamp>2015-02-06T02:15:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1788">{{cpp/title|iswspace}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswspace( wint_t ch );
}}

Checks if the given wide character is a wide whitespace character as classified by the currently installed C locale. In the default locale, the whitespace characters are the following:

* space ({{tt|0x20}}, {{c|' '}})
* form feed ({{tt|0x0c}}, {{c|'\f'}})
* line feed ({{tt|0x0a}}, {{c|'\n'}})
* carriage return ({{tt|0x0d}}, {{c|'\r'}})
* horizontal tab ({{tt|0x09}}, {{c|'\t'}}) 
* vertical tab ({{tt|0x0b}}, {{c|'\v'}})

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a whitespace character, zero otherwise.

===Example===
{{example
 | Demonstrates the use of {{c|iswspace()}} with different locales
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;
#include &lt;cwctype&gt;
void try_with(wchar_t c, const char* loc)
{
    std::setlocale(LC_ALL, loc);
    std::wcout &lt;&lt; &quot;isspace('&quot; &lt;&lt; c &lt;&lt; &quot;') in &quot; &lt;&lt; loc &lt;&lt; &quot; locale returned &quot;
               &lt;&lt; std::boolalpha &lt;&lt; (bool)std::iswspace(c) &lt;&lt; '\n';
}
int main()
{
    wchar_t EM_SPACE = L'\u2003'; // Unicode character 'EM SPACE'
    try_with(EM_SPACE, &quot;C&quot;);
    try_with(EM_SPACE, &quot;en_US.UTF8&quot;);
}
 | output=
isspace(' ') in C locale returned false
isspace(' ') in en_US.UTF8 locale returned true
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isspace}}
{{dsc inc | cpp/string/byte/dsc isspace}}
{{dsc see c | c/string/wide/iswspace}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswspace]]
[[es:cpp/string/wide/iswspace]]
[[fr:cpp/string/wide/iswspace]]
[[it:cpp/string/wide/iswspace]]
[[ja:cpp/string/wide/iswspace]]
[[pt:cpp/string/wide/iswspace]]
[[ru:cpp/string/wide/iswspace]]
[[zh:cpp/string/wide/iswspace]]</text>
      <sha1>qj6omfyu68eo4lwbz4ennopxq4z934g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswupper</title>
    <ns>0</ns>
    <id>1772</id>
    <revision>
      <id>75997</id>
      <parentid>59100</parentid>
      <timestamp>2015-02-06T02:13:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>using keywords {{c|true}}/{{c|false}} is misleading</comment>
      <text xml:space="preserve" bytes="1528">{{cpp/title|iswupper}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswupper( std::wint_t ch );
}}

Checks if the given wide character is an uppercase letter, i.e. one of {{tt|ABCDEFGHIJKLMNOPQRSTUVWXYZ}} or any uppercase letter specific to the current locale.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is an uppercase letter, zero otherwise.

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u053d'; // Armenian capital letter xeh ('Խ')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;in the default locale, iswupper(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswupper(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, iswupper(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; (bool)std::iswupper(c) &lt;&lt; '\n';
}
| output=
in the default locale, iswupper(0x53d) = false
in Unicode locale, iswupper(0x53d) = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isupper}}
{{dsc inc | cpp/string/byte/dsc isupper}}
{{dsc see c | c/string/wide/iswupper}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswupper]]
[[es:cpp/string/wide/iswupper]]
[[fr:cpp/string/wide/iswupper]]
[[it:cpp/string/wide/iswupper]]
[[ja:cpp/string/wide/iswupper]]
[[pt:cpp/string/wide/iswupper]]
[[ru:cpp/string/wide/iswupper]]
[[zh:cpp/string/wide/iswupper]]</text>
      <sha1>o93uoazng9eybhd9usjnln3072qfkzn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/iswxdigit</title>
    <ns>0</ns>
    <id>1773</id>
    <revision>
      <id>76484</id>
      <parentid>75999</parentid>
      <timestamp>2015-02-19T16:39:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="1073">{{cpp/title|iswxdigit}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
int iswxdigit( wint_t ch );
}}

Checks if the given wide character corresponds (if narrowed) to a hexadecimal numeric character, i.e. one of {{tt|0123456789abcdefABCDEF}}.

===Parameters===
{{par begin}}
{{par | ch | wide character}}
{{par end}}

===Return value===
Non-zero value if the wide character is a hexadecimal numeric character, zero otherwise.

===Notes===
{{lc|std::iswdigit}} and {{tt|std::iswxdigit}} are the only standard wide character classification functions that are not affected by the currently installed C locale.

===See also===
{{dsc begin}}
{{dsc inc | cpp/locale/dsc isxdigit}}
{{dsc inc | cpp/string/byte/dsc isxdigit}}
{{dsc see c | c/string/wide/iswxdigit}}
{{dsc end}}
{{cpp/string/character classes}}

[[de:cpp/string/wide/iswxdigit]]
[[es:cpp/string/wide/iswxdigit]]
[[fr:cpp/string/wide/iswxdigit]]
[[it:cpp/string/wide/iswxdigit]]
[[ja:cpp/string/wide/iswxdigit]]
[[pt:cpp/string/wide/iswxdigit]]
[[ru:cpp/string/wide/iswxdigit]]
[[zh:cpp/string/wide/iswxdigit]]</text>
      <sha1>9dss3m10r3p7sy7zev2g8985ehkkbty</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/towctrans</title>
    <ns>0</ns>
    <id>2972</id>
    <revision>
      <id>59104</id>
      <parentid>51301</parentid>
      <timestamp>2013-06-01T06:27:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1629">{{cpp/title|towctrans}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
std::wint_t towctrans( std::wint_t wc, std::wctrans_t desc );
}}

Maps the wide character {{tt|wc}} using the current C locale's LC_CTYPE mapping category identified by {{tt|desc}}.

===Parameters===
{{par begin}}
{{par | ch | the wide character to map}}
{{par | desc | the LC_CTYPE mapping, obtained from a call to {{lc|std::wctrans}}}}
{{par end}}

===Return value===
The mapped value of {{tt|ch}} using the mapping identified by {{tt|desc}} in LC_CTYPE facet of the current C locale.

===Example===
{{example
 | The following example demonstrates katakana to hiragana character mapping
 | code=
#include &lt;clocale&gt;
#include &lt;cwctype&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

std::wstring tohira(std::wstring str)
{
    std::transform(str.begin(), str.end(), str.begin(), [](wchar_t c) {
         return std::towctrans(c, std::wctrans(&quot;tojhira&quot;));
    });
    return str;
}

int main()
{
    std::setlocale(LC_ALL, &quot;ja_JP.UTF-8&quot;);
    std::wstring kana = L&quot;ヒラガナ&quot;;
    std::wcout &lt;&lt; &quot;katakana characters &quot; &lt;&lt; kana
               &lt;&lt; &quot; are &quot; &lt;&lt; tohira(kana) &lt;&lt; &quot; in hiragana\n&quot;;
}
 | output=
katakana characters ヒラガナ are ひらがな in hiragana
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wctrans}}
{{dsc see c | c/string/wide/towctrans}}
{{dsc end}}

[[de:cpp/string/wide/towctrans]]
[[es:cpp/string/wide/towctrans]]
[[fr:cpp/string/wide/towctrans]]
[[it:cpp/string/wide/towctrans]]
[[ja:cpp/string/wide/towctrans]]
[[pt:cpp/string/wide/towctrans]]
[[ru:cpp/string/wide/towctrans]]
[[zh:cpp/string/wide/towctrans]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/towlower</title>
    <ns>0</ns>
    <id>2961</id>
    <revision>
      <id>59107</id>
      <parentid>51302</parentid>
      <timestamp>2013-06-01T06:27:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1749">{{cpp/title|towlower}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
std::wint_t towlower( std::wint_t ch );
}}
Converts the given wide character to lowercase, if possible.

===Parameters===
{{par begin}}
{{par | ch | wide character to be converted}}
{{par end}}

===Return value===
Lowercase version of {{tt|ch}} or unmodified {{tt|ch}} if no lowercase version is listed in the current C locale.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the Greek uppercase letter 'Σ' has two lowercase forms, depending on the position in a word: 'σ' and 'ς'. A call to {{lc|std::towlower}} cannot be used to obtain the correct lowercase form in this case. 

===Example===
{{example |
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u0190'; // Latin capital open E ('Ɛ')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;
    std::cout &lt;&lt; &quot;in the default locale, towlower(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::towlower(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, towlower(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::towlower(c) &lt;&lt; '\n';
}
| output=
in the default locale, towlower(0x190) = 0x190
in Unicode locale, towlower(0x190) = 0x25b
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc towupper}}
{{dsc inc | cpp/locale/dsc tolower}}
{{dsc inc | cpp/string/byte/dsc tolower}}
{{dsc see c | c/string/wide/towlower}}
{{dsc end}}

[[de:cpp/string/wide/towlower]]
[[es:cpp/string/wide/towlower]]
[[fr:cpp/string/wide/towlower]]
[[it:cpp/string/wide/towlower]]
[[ja:cpp/string/wide/towlower]]
[[pt:cpp/string/wide/towlower]]
[[ru:cpp/string/wide/towlower]]
[[zh:cpp/string/wide/towlower]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/towupper</title>
    <ns>0</ns>
    <id>2962</id>
    <revision>
      <id>59108</id>
      <parentid>51303</parentid>
      <timestamp>2013-06-01T06:27:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1779">{{cpp/title|towupper}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
std::wint_t towupper( std::wint_t ch );
}}
Converts the given wide character to uppercase, if possible.

===Parameters===
{{par begin}}
{{par | ch | wide character to be converted}}
{{par end}}

===Return value===
Uppercase version of {{tt|ch}} or unmodified {{tt|ch}} if no uppercase version is listed in the current C locale.

===Notes===
Only 1:1 character mapping can be performed by this function, e.g. the uppercase form of 'ß' is (with some exceptions) the two-character string &quot;SS&quot;, which cannot be obtained by {{lc|std::towupper}}.

===Example===
{{example | The latin [[enwiki:Long s|letter 'ſ' (U+017F)]] is the alternative lowercase form of 'S' (U+0053)
| code=
#include &lt;iostream&gt;
#include &lt;cwctype&gt;
#include &lt;clocale&gt;

int main()
{
    wchar_t c = L'\u017f'; // Latin small letter Long S ('ſ')

    std::cout &lt;&lt; std::hex &lt;&lt; std::showbase;
    std::cout &lt;&lt; &quot;in the default locale, towupper(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::towupper(c) &lt;&lt; '\n';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout &lt;&lt; &quot;in Unicode locale, towupper(&quot; &lt;&lt; (std::wint_t)c &lt;&lt; &quot;) = &quot;
              &lt;&lt; std::towupper(c) &lt;&lt; '\n';
}
| output=
in the default locale, towupper(0x17f) = 0x17f
in Unicode locale, towupper(0x17f) = 0x53
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc towlower}}
{{dsc inc | cpp/locale/dsc toupper}}
{{dsc inc | cpp/string/byte/dsc toupper}}
{{dsc see c | c/string/wide/towupper}}
{{dsc end}}

[[de:cpp/string/wide/towupper]]
[[es:cpp/string/wide/towupper]]
[[fr:cpp/string/wide/towupper]]
[[it:cpp/string/wide/towupper]]
[[ja:cpp/string/wide/towupper]]
[[pt:cpp/string/wide/towupper]]
[[ru:cpp/string/wide/towupper]]
[[zh:cpp/string/wide/towupper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcscat</title>
    <ns>0</ns>
    <id>3790</id>
    <revision>
      <id>76633</id>
      <parentid>59111</parentid>
      <timestamp>2015-02-23T19:08:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>port example, seealso to narrow</comment>
      <text xml:space="preserve" bytes="1730">{{cpp/title| wcscat}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
wchar_t *wcscat( wchar_t *dest, const wchar_t *src );
}}

Appends a copy of the wide string pointed to by {{tt|src}} to the end of the wide string pointed to by {{tt|dest}}. The wide character {{tt|src[0]}} replaces the null terminator at the end of {{tt|dest}}. The resulting wide string is null-terminated.

The behavior is undefined if the destination array is not large enough for the contents of both {{tt|str}} and {{tt|dest}} and the terminating null wide character.

The behavior is undefined if the strings overlap. 

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to append to}}
{{par | src | pointer to the null-terminated wide string to copy from}}
{{par end}}

===Return value===
Returns a copy of {{tt|dest}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt; 
#include &lt;clocale&gt;

int main(void) 
{
    wchar_t str[50] = L&quot;Земля, прощай.&quot;;
    std::wcscat(str, L&quot; &quot;);
    std::wcscat(str, L&quot;В добрый путь.&quot;);
    
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::wcout &lt;&lt; str &lt;&lt; '\n';
}
|p=true
| output=
Земля, прощай. В добрый путь.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcsncat}}
{{dsc inc | cpp/string/byte/dsc strcat}}
{{dsc inc | cpp/string/wide/dsc wcscpy}}
{{dsc see c | c/string/wide/wcscat}}
{{dsc end}}

[[de:cpp/string/wide/wcscat]]
[[es:cpp/string/wide/wcscat]]
[[fr:cpp/string/wide/wcscat]]
[[it:cpp/string/wide/wcscat]]
[[ja:cpp/string/wide/wcscat]]
[[pt:cpp/string/wide/wcscat]]
[[ru:cpp/string/wide/wcscat]]
[[zh:cpp/string/wide/wcscat]]</text>
      <sha1>atvspf97ce6afxvah7jce69r67n4v5t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcschr</title>
    <ns>0</ns>
    <id>3796</id>
    <revision>
      <id>59112</id>
      <parentid>51305</parentid>
      <timestamp>2013-06-01T06:27:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1811">{{cpp/title| wcschr}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl |
const wchar_t* wcschr( const wchar_t* str, wchar_t ch );
}}
{{dcl | 1=
      wchar_t* wcschr(       wchar_t* str, wchar_t ch );
}}
{{dcl end}}

Finds the first occurrence of the wide character {{tt|ch}} in the wide string pointed to by {{tt|str}}. 

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be analyzed}}
{{par | ch | wide character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or {{lc|NULL}} if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;locale&gt;

int main()
{
    wchar_t arr[] = L&quot;招き猫 кошка&quot;;
    const wchar_t* cat = std::wcschr(arr, L'猫');
    const wchar_t* dog = std::wcschr(arr, L'犬');

    std::cout.imbue(std::locale(&quot;en_US.utf8&quot;));

    if(cat)
        std::cout &lt;&lt; &quot;The character 猫 found at position &quot; &lt;&lt; cat - arr &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The character 猫 not found\n&quot;;

    if(dog)
        std::cout &lt;&lt; &quot;The character 犬 found at position &quot; &lt;&lt; dog - arr &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The character 犬 not found\n&quot;;
}
 | output=
The character 猫 found at position 2
The character 犬 not found
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/string/wide/dsc wcsrchr}}
{{dsc inc | cpp/string/wide/dsc wcspbrk}}
{{dsc see c | c/string/wide/wcschr}}
{{dsc end}}

[[de:cpp/string/wide/wcschr]]
[[es:cpp/string/wide/wcschr]]
[[fr:cpp/string/wide/wcschr]]
[[it:cpp/string/wide/wcschr]]
[[ja:cpp/string/wide/wcschr]]
[[pt:cpp/string/wide/wcschr]]
[[ru:cpp/string/wide/wcschr]]
[[zh:cpp/string/wide/wcschr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcscmp</title>
    <ns>0</ns>
    <id>3794</id>
    <revision>
      <id>76643</id>
      <parentid>59115</parentid>
      <timestamp>2015-02-24T22:17:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>upd desc, example, seealso narrow</comment>
      <text xml:space="preserve" bytes="2295">{{cpp/title| wcscmp}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
int wcscmp( const wchar_t* lhs, const wchar_t* rhs );
}}

Compares two null-terminated wide strings lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of wide characters that differ in the strings being compared.

The behavior is undefined if {{tt|lhs}} or {{tt|rhs}} are not pointers to null-terminated wide strings.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated wide strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Notes===
This function is not locale-sensitive, unlike {{lc|std::wcscoll}}, and the order may not be meaningful when characters from different Unicode blocks are used together or when the order of code units does not match collation order.

===Example===
{{example
 |
 | code=
#include &lt;vector&gt;
#include &lt;cwchar&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;const wchar_t*&gt; leaders{L&quot;Ленин&quot;, L&quot;Сталин&quot;, L&quot;Маленков&quot;,
        L&quot;Хрущёв&quot;, L&quot;Брежнев&quot;, L&quot;Андропов&quot;, L&quot;Черненко&quot;, L&quot;Горбачёв&quot;};

    std::sort(leaders.begin(), leaders.end(), [](auto strA, auto strB) {
        return std::wcscmp(strA, strB) &lt; 0;
    });

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    for (auto leader : leaders)
        std::wcout &lt;&lt; leader &lt;&lt; '\n';
}
|p=true
 | output=
Андропов
Брежнев
Горбачёв
Ленин
Маленков
Сталин
Хрущёв
Черненко
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcsncmp}}
{{dsc inc | cpp/string/wide/dsc wmemcmp}}
{{dsc inc | cpp/string/byte/dsc strcmp}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc see c | c/string/wide/wcscmp}}
{{dsc end}}

[[de:cpp/string/wide/wcscmp]]
[[es:cpp/string/wide/wcscmp]]
[[fr:cpp/string/wide/wcscmp]]
[[it:cpp/string/wide/wcscmp]]
[[ja:cpp/string/wide/wcscmp]]
[[pt:cpp/string/wide/wcscmp]]
[[ru:cpp/string/wide/wcscmp]]
[[zh:cpp/string/wide/wcscmp]]</text>
      <sha1>0n8ce35756ep3c032ghjritp9dy78mh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcscoll</title>
    <ns>0</ns>
    <id>4585</id>
    <revision>
      <id>59116</id>
      <parentid>51307</parentid>
      <timestamp>2013-06-01T06:27:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2129">{{cpp/title| wcscoll}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
int wcscoll( const wchar_t* lhs, const wchar_t* rhs );
}}

Compares two null-terminated wide strings according to the locale most recently installed by {{lc|std::setlocale}}, as defined by the {{lc|LC_COLLATE}} category.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated wide strings to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} is ''less than'' (precedes) {{tt|rhs}}.

{{c|0}} if {{tt|lhs}} is ''equal to'' {{tt|rhs}}.

Positive value if {{tt|lhs}} is ''greater than'' (follows) {{tt|rhs}}.

===Notes===
{{cpp/locale/collate/collation_note}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;clocale&gt;

void try_compare(const wchar_t* p1, const wchar_t* p2)
{
    if(std::wcscoll(p1, p2) &lt; 0)
         std::wcout &lt;&lt; p1 &lt;&lt; &quot; before &quot; &lt;&lt; p2 &lt;&lt; '\n';
    else
         std::wcout &lt;&lt; p2 &lt;&lt; &quot; before &quot; &lt;&lt; p1 &lt;&lt; '\n';
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout &lt;&lt; &quot;In the American locale: &quot;;
    try_compare(L&quot;hrnec&quot;, L&quot;chrt&quot;);

    std::setlocale(LC_COLLATE, &quot;cs_CZ.utf8&quot;);
    std::wcout &lt;&lt; &quot;In the Czech locale: &quot;;
    try_compare(L&quot;hrnec&quot;, L&quot;chrt&quot;);

    std::setlocale(LC_COLLATE, &quot;en_US.utf8&quot;);
    std::wcout &lt;&lt; &quot;In the American locale: &quot;;
    try_compare(L&quot;år&quot;, L&quot;ängel&quot;);

    std::setlocale(LC_COLLATE, &quot;sv_SE.utf8&quot;);
    std::wcout &lt;&lt; &quot;In the Swedish locale: &quot;;
    try_compare(L&quot;år&quot;, L&quot;ängel&quot;);
}
 | output=
In the American locale: chrt before hrnec
In the Czech locale: hrnec before chrt
In the American locale: ängel before år
In the Swedish locale: år before ängel
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strcoll}}
{{dsc inc | cpp/locale/collate/dsc do_compare}}
{{dsc inc | cpp/string/wide/dsc wcsxfrm}}
{{dsc see c | c/string/wide/wcscoll}}
{{dsc end}}

[[de:cpp/string/wide/wcscoll]]
[[es:cpp/string/wide/wcscoll]]
[[fr:cpp/string/wide/wcscoll]]
[[it:cpp/string/wide/wcscoll]]
[[ja:cpp/string/wide/wcscoll]]
[[pt:cpp/string/wide/wcscoll]]
[[ru:cpp/string/wide/wcscoll]]
[[zh:cpp/string/wide/wcscoll]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcscpy</title>
    <ns>0</ns>
    <id>3788</id>
    <revision>
      <id>76626</id>
      <parentid>76624</parentid>
      <timestamp>2015-02-23T16:45:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>犬/狗 makes it a bit more like the strcpy counterpart</comment>
      <text xml:space="preserve" bytes="1523">{{cpp/title| wcscpy}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
wchar_t *wcscpy( wchar_t *dest, const wchar_t *src );
}}

Copies the wide string pointed to by {{tt|src}} (including the terminating null wide character) to wide character array pointed to by {{tt|dest}}.

If the strings overlap, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the null-terminated wide string to copy from}}
{{par end}}

===Return value===
{{tt|dest}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;memory&gt;
#include &lt;clocale&gt;
 
int main()
{
    const wchar_t* src = L&quot;犬 means dog&quot;;
//  src[0] = L'狗'; // can't modify string literal
    auto dst = std::make_unique&lt;wchar_t[]&gt;(std::wcslen(src)+1); // +1 for the null
    std::wcscpy(dst.get(), src);
    dst[0] = L'狗';
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;&quot;));
    std::wcout &lt;&lt; src &lt;&lt; '\n' &lt;&lt; dst.get() &lt;&lt; '\n';
}
 | output=
犬 means dog
狗 means dog
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcsncpy}}
{{dsc inc | cpp/string/wide/dsc wmemcpy}}
{{dsc inc | cpp/string/byte/dsc strcpy}}
{{dsc see c | c/string/wide/wcscpy}}
{{dsc end}}

[[de:cpp/string/wide/wcscpy]]
[[es:cpp/string/wide/wcscpy]]
[[fr:cpp/string/wide/wcscpy]]
[[it:cpp/string/wide/wcscpy]]
[[ja:cpp/string/wide/wcscpy]]
[[pt:cpp/string/wide/wcscpy]]
[[ru:cpp/string/wide/wcscpy]]
[[zh:cpp/string/wide/wcscpy]]</text>
      <sha1>2qmdbnrymugzwcggqn4pybv6ly8ystg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcscspn</title>
    <ns>0</ns>
    <id>3799</id>
    <revision>
      <id>59120</id>
      <parentid>51309</parentid>
      <timestamp>2013-06-01T06:27:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1165">{{cpp/title| wcscspn}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
std::size_t wcscspn( const wchar_t* dest, const wchar_t* src );
}}

Returns the length of the maximum initial segment of the wide string pointed to by {{tt|dest}}, that consists of only the characters ''not'' found in wide string pointed to by {{tt|src}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to be analyzed}}
{{par | src | pointer to the null-terminated wide string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters not found in the character string pointed to by {{tt|src}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcsspn}}
{{dsc inc | cpp/string/wide/dsc wcspbrk}}
{{dsc see c | c/string/wide/wcscspn}}
{{dsc end}}

[[de:cpp/string/wide/wcscspn]]
[[es:cpp/string/wide/wcscspn]]
[[fr:cpp/string/wide/wcscspn]]
[[it:cpp/string/wide/wcscspn]]
[[ja:cpp/string/wide/wcscspn]]
[[pt:cpp/string/wide/wcscspn]]
[[ru:cpp/string/wide/wcscspn]]
[[zh:cpp/string/wide/wcscspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcslen</title>
    <ns>0</ns>
    <id>3793</id>
    <revision>
      <id>76724</id>
      <parentid>51310</parentid>
      <timestamp>2015-02-27T13:50:18Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>see also</comment>
      <text xml:space="preserve" bytes="1513">{{cpp/title| wcslen}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
std::size_t wcslen( const wchar_t* str );
}}

Returns the length of a wide string, that is the number of non-null wide characters that precede the terminating null wide character. 

The behavior is undefined if there is no null character in the wide character array pointed to by {{tt|str}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be examined}}
{{par end}}

===Return value===
The length of the null-terminated wide string {{tt|str}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;clocale&gt;

int main()
{
    const wchar_t* str = L&quot;爆ぜろリアル！弾けろシナプス！パニッシュメントディス、ワールド！&quot;;

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::wcout &lt;&lt; &quot;The length of \&quot;&quot; &lt;&lt; str &lt;&lt; &quot;\&quot; is &quot; &lt;&lt; std::wcslen(str) &lt;&lt; '\n';
}
 | output=
The length of &quot;爆ぜろリアル！弾けろシナプス！パニッシュメントディス、ワールド！&quot; is 32
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strlen}}
{{dsc inc | cpp/string/multibyte/dsc mblen}}
{{dsc see c | c/string/wide/wcslen}}
{{dsc end}}

[[de:cpp/string/wide/wcslen]]
[[es:cpp/string/wide/wcslen]]
[[fr:cpp/string/wide/wcslen]]
[[it:cpp/string/wide/wcslen]]
[[ja:cpp/string/wide/wcslen]]
[[pt:cpp/string/wide/wcslen]]
[[ru:cpp/string/wide/wcslen]]
[[zh:cpp/string/wide/wcslen]]</text>
      <sha1>ar7qzhi9lxt6rph7cjwgablqv1p0zx9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcsncat</title>
    <ns>0</ns>
    <id>3791</id>
    <revision>
      <id>76635</id>
      <parentid>59121</parentid>
      <timestamp>2015-02-23T20:15:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>example link to byte, upd wording</comment>
      <text xml:space="preserve" bytes="2001">{{cpp/title| wcsncat}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
wchar_t *wcsncat( wchar_t *dest, const wchar_t *src, std::size_t count );
}}

Appends at most {{tt|count}} wide characters from the wide string pointed to by {{tt|src}} to the end of the character string pointed to by {{tt|dest}}, stopping if the null terminator is copied. The wide character {{c|src[0]}} replaces the null terminator at the end of {{tt|dest}}. The null terminator is always appended in the end (so the maximum number of wide characters the function may write is {{c|count+1}}).

The behavior is undefined if the destination array is not large enough for the contents of both {{tt|str}} and {{tt|dest}} and the terminating null wide character.

The behavior is undefined if the strings overlap. 

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to append to}}
{{par | src | pointer to the null-terminated wide string to copy from}}
{{par | count | maximum number of wide characters to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Example===
{{example
 |
 | code=
#include &lt;cwchar&gt; 
#include &lt;iostream&gt;
#include &lt;clocale&gt;
 
int main(void) 
{
    wchar_t str[50] = L&quot;Земля, прощай.&quot;;
    std::wcsncat(str, L&quot; &quot;, 1);
    std::wcsncat(str, L&quot;В добрый путь.&quot;, 8); // only append the first 8 wide chars

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::wcout &lt;&lt; str &lt;&lt; '\n';
}
|p=true
|output=
Земля, прощай. В добрый
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcscat}}
{{dsc inc | cpp/string/byte/dsc strncat}}
{{dsc inc | cpp/string/wide/dsc wcscpy}}
{{dsc see c | c/string/wide/wcsncat}}
{{dsc end}}

[[de:cpp/string/wide/wcsncat]]
[[es:cpp/string/wide/wcsncat]]
[[fr:cpp/string/wide/wcsncat]]
[[it:cpp/string/wide/wcsncat]]
[[ja:cpp/string/wide/wcsncat]]
[[pt:cpp/string/wide/wcsncat]]
[[ru:cpp/string/wide/wcsncat]]
[[zh:cpp/string/wide/wcsncat]]</text>
      <sha1>a0kgcmb88stzhcmvamldzekz7mq76he</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcsncmp</title>
    <ns>0</ns>
    <id>3795</id>
    <revision>
      <id>76748</id>
      <parentid>59124</parentid>
      <timestamp>2015-02-28T13:55:50Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>example;wording</comment>
      <text xml:space="preserve" bytes="2574">{{cpp/title| wcsncmp}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
int wcsncmp( const wchar_t* lhs, const wchar_t* rhs, std::size_t count );
}}

Compares at most {{tt|count}} wide characters of two null-terminated wide strings. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of wide characters that differ in the strings being compared.

The behavior is undefined if {{tt|lhs}} or {{tt|rhs}} are not pointers to null-terminated strings.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the null-terminated wide strings to compare}}
{{par | count | maximum number of characters to compare}}
{{par end}}

===Return value===
Negative value if {{tt|lhs}} appears before {{tt|rhs}} in lexicographical order.

Zero if {{tt|lhs}} and {{tt|rhs}} compare equal.

Positive value if {{tt|lhs}} appears after {{tt|rhs}} in lexicographical order.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;clocale&gt;
#include &lt;locale&gt;

void demo(const wchar_t* lhs, const wchar_t* rhs, int sz)
{
    int rc = std::wcsncmp(lhs, rhs, sz);
    if(rc == 0)
        std::wcout &lt;&lt; &quot;First &quot; &lt;&lt; sz &lt;&lt; &quot; characters of [&quot;
                  &lt;&lt; lhs &lt;&lt; &quot;] equal [&quot; &lt;&lt; rhs &lt;&lt; &quot;]\n&quot;;
    else if(rc &lt; 0)
        std::wcout &lt;&lt; &quot;First &quot; &lt;&lt; sz &lt;&lt; &quot; characters of [&quot;
                  &lt;&lt; lhs &lt;&lt; &quot;] precede [&quot; &lt;&lt; rhs &lt;&lt; &quot;]\n&quot;;
    else if(rc &gt; 0)
        std::wcout &lt;&lt; &quot;First &quot; &lt;&lt; sz &lt;&lt; &quot; characters of [&quot;
                  &lt;&lt; lhs &lt;&lt; &quot;] follow [&quot; &lt;&lt; rhs &lt;&lt; &quot;]\n&quot;;
}

int main()
{
    const wchar_t str1[] = L&quot;안녕하세요&quot;;
    const wchar_t str2[] = L&quot;안녕히 가십시오&quot;;

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    demo(str1, str2, 5);
    demo(str2, str1, 8);
    demo(str1, str2, 2);
}
 | output=
First 5 characters of [안녕하세요] precede [안녕히 가십시오]
First 8 characters of [안녕히 가십시오] follow [안녕하세요]
First 2 characters of [안녕하세요] equal [안녕히 가십시오]
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strncmp}}
{{dsc inc | cpp/string/wide/dsc wcscmp}}
{{dsc inc | cpp/string/wide/dsc wmemcmp}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc see c | c/string/wide/wcsncmp}}
{{dsc end}}

[[de:cpp/string/wide/wcsncmp]]
[[es:cpp/string/wide/wcsncmp]]
[[fr:cpp/string/wide/wcsncmp]]
[[it:cpp/string/wide/wcsncmp]]
[[ja:cpp/string/wide/wcsncmp]]
[[pt:cpp/string/wide/wcsncmp]]
[[ru:cpp/string/wide/wcsncmp]]
[[zh:cpp/string/wide/wcsncmp]]</text>
      <sha1>m7gro0xny09ycrszp77a5jczsf1j7fj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcsncpy</title>
    <ns>0</ns>
    <id>3789</id>
    <revision>
      <id>76630</id>
      <parentid>70355</parentid>
      <timestamp>2015-02-23T17:05:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso</comment>
      <text xml:space="preserve" bytes="2060">{{cpp/title| wcsncpy}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
wchar_t *wcsncpy( wchar_t *dest, const wchar_t *src, std::size_t count );
}}

Copies at most {{tt|count}} characters of the wide string pointed to by {{tt|src}} (including the terminating null wide character) to wide character array pointed to by {{tt|dest}}. 

If {{tt|count}} is reached before the entire string {{tt|src}} was copied, the resulting wide character array is not null-terminated.

If, after copying the terminating null wide character from {{tt|src}}, {{tt|count}} is not reached, additional null wide characters are written to {{tt|dest}} until the total of {{tt|count}} characters have been written.

If the strings overlap, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the wide string to copy from}}
{{par | count | maximum number of wide characters to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Notes===
In typical usage, {{tt|count}} is the size of the destination array.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;

int main()
{
    wchar_t src[] = L&quot;hi&quot;;
    wchar_t dest[6] = {L'a', L'b', L'c', L'd', L'e', L'f'};

    std::wcsncpy(dest, src, 5); // this will copy hi and repeat \0 three times

    std::wcout &lt;&lt; &quot;The contents of dest are: &quot;;
    for(wchar_t c : dest) {
        if(c)
            std::wcout &lt;&lt; c &lt;&lt; ' ';
        else
            std::wcout &lt;&lt; &quot;\\0&quot; &lt;&lt; ' ';
    }
    std::wcout &lt;&lt; '\n';
}
 | output=
The contents of dest are: h i \0 \0 \0 f 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcscpy}}
{{dsc inc | cpp/string/wide/dsc wmemcpy}}
{{dsc inc | cpp/string/byte/dsc strncpy}}
{{dsc see c | c/string/wide/wcsncpy}}
{{dsc end}}

[[de:cpp/string/wide/wcsncpy]]
[[es:cpp/string/wide/wcsncpy]]
[[fr:cpp/string/wide/wcsncpy]]
[[it:cpp/string/wide/wcsncpy]]
[[ja:cpp/string/wide/wcsncpy]]
[[pt:cpp/string/wide/wcsncpy]]
[[ru:cpp/string/wide/wcsncpy]]
[[zh:cpp/string/wide/wcsncpy]]</text>
      <sha1>c352he323ir1sh92be86nkbyqnya63e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcspbrk</title>
    <ns>0</ns>
    <id>3800</id>
    <revision>
      <id>59126</id>
      <parentid>51314</parentid>
      <timestamp>2013-06-01T06:27:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1202">{{cpp/title| wcspbrk}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl |
const wchar_t* wcspbrk( const wchar_t* dest, const wchar_t* str );
}}
{{dcl |
      wchar_t* wcspbrk(       wchar_t* dest, const wchar_t* str );
}}
{{dcl end}}

Finds the first character in wide string pointed to by {{tt|dest}}, that is also in wide string pointed to by {{tt|str}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to be analyzed}}
{{par | src | pointer to the null-terminated wide string that contains the characters to search for}}
{{par end}}

===Return value===
Pointer to the first character in {{tt|dest}}, that is also in {{tt|str}}, or {{lc|NULL}} if no such character exists.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcscspn}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc see c | c/string/wide/wcspbrk}}
{{dsc end}}

[[de:cpp/string/wide/wcspbrk]]
[[es:cpp/string/wide/wcspbrk]]
[[fr:cpp/string/wide/wcspbrk]]
[[it:cpp/string/wide/wcspbrk]]
[[ja:cpp/string/wide/wcspbrk]]
[[pt:cpp/string/wide/wcspbrk]]
[[ru:cpp/string/wide/wcspbrk]]
[[zh:cpp/string/wide/wcspbrk]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcsrchr</title>
    <ns>0</ns>
    <id>3797</id>
    <revision>
      <id>59129</id>
      <parentid>51315</parentid>
      <timestamp>2013-06-01T06:27:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1131">{{cpp/title| wcsrchr}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl |
const wchar_t* wcsrchr( const wchar_t* str, wchar_t ch );
}}
{{dcl | 1=
      wchar_t* wcsrchr(       wchar_t* str, wchar_t ch );
}}
{{dcl end}}

Finds the last occurrence of the wide character {{tt|ch}} in the wide string pointed to by {{tt|str}}. 

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be analyzed}}
{{par | ch | wide character to search for}}
{{par end}}

===Return value===
Pointer to the found character in {{tt|str}}, or {{lc|NULL}} if no such character is found.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc inc | cpp/string/byte/dsc strrchr}}
{{dsc inc | cpp/string/basic_string/dsc rfind}}
{{dsc see c | c/string/wide/wcsrchr}}
{{dsc end}}

[[de:cpp/string/wide/wcsrchr]]
[[es:cpp/string/wide/wcsrchr]]
[[fr:cpp/string/wide/wcsrchr]]
[[it:cpp/string/wide/wcsrchr]]
[[ja:cpp/string/wide/wcsrchr]]
[[pt:cpp/string/wide/wcsrchr]]
[[ru:cpp/string/wide/wcsrchr]]
[[zh:cpp/string/wide/wcsrchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcsspn</title>
    <ns>0</ns>
    <id>3798</id>
    <revision>
      <id>59130</id>
      <parentid>51316</parentid>
      <timestamp>2013-06-01T06:27:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1125">{{cpp/title| wcsspn}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
size_t wcsspn( const wchar_t* dest, const wchar_t* src );
}}

Returns the length of the maximum initial segment of the wide string pointed to by {{tt|dest}}, that consists of only the characters found in wide string pointed to by {{tt|src}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to be analyzed}}
{{par | src | pointer to the null-terminated wide string that contains the characters to search for}}
{{par end}}

===Return value===
The length of the maximum initial segment that contains only characters from wide string pointed to by {{tt|src}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcscspn}}
{{dsc inc | cpp/string/wide/dsc wcspbrk}}
{{dsc see c | c/string/wide/wcsspn}}
{{dsc end}}

[[de:cpp/string/wide/wcsspn]]
[[es:cpp/string/wide/wcsspn]]
[[fr:cpp/string/wide/wcsspn]]
[[it:cpp/string/wide/wcsspn]]
[[ja:cpp/string/wide/wcsspn]]
[[pt:cpp/string/wide/wcsspn]]
[[ru:cpp/string/wide/wcsspn]]
[[zh:cpp/string/wide/wcsspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcsstr</title>
    <ns>0</ns>
    <id>3801</id>
    <revision>
      <id>65945</id>
      <parentid>59131</parentid>
      <timestamp>2013-10-16T12:13:38Z</timestamp>
      <contributor>
        <username>Eendy</username>
        <id>539</id>
      </contributor>
      <text xml:space="preserve" bytes="1342">{{cpp/title| wcsstr}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl |
const wchar_t* wcsstr( const wchar_t* dest, const wchar_t* src );
}}
{{dcl | 1=
      wchar_t* wcsstr(       wchar_t* dest, const wchar_t* src );
}}
{{dcl end}}

Finds the first occurrence of the wide string {{tt|src}} in the wide string pointed to by {{tt|dest}}. The terminating null characters are not compared.

===Parameters===
{{par begin}}
{{par | dest | pointer to the null-terminated wide string to examine}}
{{par | src | pointer to the null-terminated wide string to search for}}
{{par end}}

===Return value===
Pointer to the first character of the found substring in {{tt|dest}}, or {{lc|NULL}} if no such substring is found. If {{tt|src}} points to an empty string, {{tt|dest}} is returned.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc find}}
{{dsc inc | cpp/string/byte/dsc strstr}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc inc | cpp/string/wide/dsc wcsrchr}}
{{dsc see c | c/string/wide/wcsstr}}
{{dsc end}}

[[de:cpp/string/wide/wcsstr]]
[[es:cpp/string/wide/wcsstr]]
[[fr:cpp/string/wide/wcsstr]]
[[it:cpp/string/wide/wcsstr]]
[[ja:cpp/string/wide/wcsstr]]
[[pt:cpp/string/wide/wcsstr]]
[[ru:cpp/string/wide/wcsstr]]
[[zh:cpp/string/wide/wcsstr]]</text>
      <sha1>bzos4lp0zldg69mjl5fk56vavzjdqa6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcstod</title>
    <ns>0</ns>
    <id>4741</id>
    <redirect title="cpp/string/wide/wcstof" />
    <revision>
      <id>17214</id>
      <timestamp>2012-01-06T18:34:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/wide/wcstof]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/wide/wcstof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcstof</title>
    <ns>0</ns>
    <id>4740</id>
    <revision>
      <id>76513</id>
      <parentid>76512</parentid>
      <timestamp>2015-02-19T20:49:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2302">{{cpp/title| wcstof | wcstod | wcstold}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | since=c++11 |
float       wcstof( const wchar_t* str, wchar_t** str_end );           
}}
{{dcl | 
double      wcstod( const wchar_t* str, wchar_t** str_end );
}}
{{dcl | since=c++11 |
long double wcstold( const wchar_t* str, wchar_t** str_end );
}}
{{dcl end}}

Interprets a floating point value in a wide string pointed to by {{tt|str}}.

{{cpp/string/cvt str2float|wide}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the wide character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be interpreted}}
{{par | str_end | pointer to a pointer to a wide character.}}
{{par end}}

===Return value===
Floating point value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|HUGE_VAL}}, {{lc|HUGE_VALF}} or {{lc|HUGE_VALL}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cerrno&gt;
#include &lt;cwchar&gt;

int main()
{
    const wchar_t* p = L&quot;111.11 -2.22 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz&quot;;
    wchar_t* end;
    std::wcout &lt;&lt; &quot;Parsing L\&quot;&quot; &lt;&lt; p &lt;&lt; &quot;\&quot;:\n&quot;;
    for (double f = std::wcstod(p, &amp;end); p != end; f = std::wcstod(p, &amp;end))
    {
        std::wcout &lt;&lt; &quot;'&quot; &lt;&lt; std::wstring(p, end-p) &lt;&lt; &quot;' -&gt; &quot;;
        p = end;
        if (errno == ERANGE){
            std::wcout &lt;&lt; &quot;range error, got &quot;;
            errno = 0;
        }
        std::wcout &lt;&lt; f &lt;&lt; '\n';
    }
}
 | output=
Parsing L&quot;111.11 -2.22 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz&quot;:
'111.11' -&gt; 111.11
' -2.22' -&gt; -2.22
' 0X1.BC70A3D70A3D7P+6' -&gt; 111.11
'  1.18973e+4932' -&gt; range error, got inf
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strtof}}
{{dsc see c | c/string/wide/wcstof}}
{{dsc end}}

[[de:cpp/string/wide/wcstof]]
[[es:cpp/string/wide/wcstof]]
[[fr:cpp/string/wide/wcstof]]
[[it:cpp/string/wide/wcstof]]
[[ja:cpp/string/wide/wcstof]]
[[pt:cpp/string/wide/wcstof]]
[[ru:cpp/string/wide/wcstof]]
[[zh:cpp/string/wide/wcstof]]</text>
      <sha1>2i28e9dpdqtvwlotyayeec04sp21e4c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcstoimax</title>
    <ns>0</ns>
    <id>9531</id>
    <revision>
      <id>62963</id>
      <parentid>59134</parentid>
      <timestamp>2013-07-01T23:48:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="2359">{{cpp/title| wcstoimax | wcstoumax}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cinttypes}}
{{dcl | since=c++11 | 
std::intmax_t wcstoimax( const wchar_t* nptr, wchar_t** endptr, int base );
}}
{{dcl | since=c++11 |
std::uintmax_t wcstoumax( const wchar_t* nptr, wchar_t** endptr, int base );
}}
{{dcl end}}

Interprets an unsigned integer value in a wide string pointed to by {{tt|nptr}}.

{{cpp/string/cvt str2int base | base=base | u=true}}

The functions sets the pointer pointed to by {{tt|endptr}} to point to the wide character past the last character interpreted. If {{tt|endptr}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | nptr | pointer to the null-terminated wide string to be interpreted}}
{{par | endptr | pointer to a pointer to a wide character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|INTMAX_MAX}}, {{lc|INTMAX_MIN}}, {{lc|UINTMAX_MAX}}, or {{c|0}} is returned, as appropriate. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cinttypes&gt;

int main()
{
    std::wstring str = L&quot;helloworld&quot;;
    std::intmax_t val = std::wcstoimax(str.c_str(), nullptr, 36);
    std::wcout &lt;&lt; str &lt;&lt; &quot; in base 36 is &quot; &lt;&lt; val &lt;&lt; &quot; in base 10\n&quot;;

    wchar_t* nptr;
    val = std::wcstoimax(str.c_str(), &amp;nptr, 30);
    if(nptr != &amp;str[0] + str.size())
        std::wcout &lt;&lt; str &lt;&lt; &quot; in base 30 is invalid.&quot;
                  &lt;&lt; &quot; The first invalid digit is &quot; &lt;&lt; *nptr &lt;&lt; '\n';
}
 | output=
helloworld in base 36 is 1767707668033969 in base 10
helloworld in base 30 is invalid. The first invalid digit is w
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strtoimax}}
{{dsc inc | cpp/string/wide/dsc wcstol}}
{{dsc inc | cpp/string/wide/dsc wcstoul}}
{{dsc see c | c/string/wide/wcstoimax | wcstoimax | wcstoumax}}
{{dsc end}}

[[de:cpp/string/wide/wcstoimax]]
[[es:cpp/string/wide/wcstoimax]]
[[fr:cpp/string/wide/wcstoimax]]
[[it:cpp/string/wide/wcstoimax]]
[[ja:cpp/string/wide/wcstoimax]]
[[pt:cpp/string/wide/wcstoimax]]
[[ru:cpp/string/wide/wcstoimax]]
[[zh:cpp/string/wide/wcstoimax]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcstok</title>
    <ns>0</ns>
    <id>5516</id>
    <revision>
      <id>76646</id>
      <parentid>76645</parentid>
      <timestamp>2015-02-24T22:39:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="3432">{{cpp/title| wcstok}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | 1=
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t ** ptr);
}}
{{dcl end}}

Finds the next token in a null-terminated wide string pointed to by {{tt|str}}. The separator characters are identified by null-terminated wide string pointed to by {{tt|delim}}.

@@This function is designed to be called multiples times to obtain successive tokens from the same string.

:* If {{c|str !{{=}} NULL}}, the call is treated as the first call to {{tt|std::wcstok}} for this particular wide string. The function searches for the first wide character which is ''not'' contained in {{tt|delim}}.
::* If no such wide character was found, there are no tokens in {{tt|str}} at all, and the function returns a null pointer. 
::* If such wide character was found, it is the ''beginning of the token''. The function then searches from that point on for the first wide character that ''is'' contained in {{tt|delim}}. 
:::* If no such wide character was found, {{tt|str}} has only one token, and future calls to {{tt|std::wcstok}} will return a null pointer
:::* If such wide character was found, it is ''replaced'' by the null wide character {{c|L'\0'}} and the parser state (typically a pointer to the following wide character) is stored in the user-provided location {{c|*ptr}}.
::* The function then returns the pointer to the beginning of the token
:* If {{c|str {{==}} NULL}}, the call is treated as a subsequent calls to {{tt|std::wcstok}}: the function continues from where it left in previous invocation with the same {{c|*ptr}}. The behavior is the same as if the pointer to the wide character that follows the last detected token is passed as {{c|str}}.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to tokenize}}
{{par | delim | pointer to the null-terminated wide string identifying delimiters}}
{{par | ptr | pointer to an object of type {{c|wchar_t*}}, which is used by wcstok to store its internal state}}
{{par end}}

===Return value===
Pointer to the beginning of the next token or null pointer if there are no more tokens.

===Note===
This function is destructive: it writes the {{c|L'\0'}} characters in the elements of the string {{tt|str}}. In particular, a wide string literal cannot be used as the first argument of {{tt|std::wcstok}}.

Unlike {{lc|std::strtok}}, this function does not update static storage: it stores the parser state in the user-provided location.

Unlike most other tokenizers, the delimiters in {{tt|std::wcstok}} can be different for each subsequent token, and can even depend on the contents of the previous tokens.

===Example===
{{example
 |
 | code=
#include &lt;cwchar&gt;
#include &lt;iostream&gt;

int main()
{
    wchar_t input[100] = L&quot;A bird came down the walk&quot;;
    wchar_t* buffer;
    wchar_t* token = std::wcstok(input, L&quot; &quot;, &amp;buffer);
    while (token) {
        std::wcout &lt;&lt; token &lt;&lt; '\n';
        token = std::wcstok(nullptr, L&quot; &quot;, &amp;buffer);
    }
}
 | output=
A
bird
came
down
the
walk
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strtok}}
{{dsc see c | c/string/wide/wcstok}}
{{dsc end}}

[[de:cpp/string/wide/wcstok]]
[[es:cpp/string/wide/wcstok]]
[[fr:cpp/string/wide/wcstok]]
[[it:cpp/string/wide/wcstok]]
[[ja:cpp/string/wide/wcstok]]
[[pt:cpp/string/wide/wcstok]]
[[ru:cpp/string/wide/wcstok]]
[[zh:cpp/string/wide/wcstok]]</text>
      <sha1>qo0sn9xxwqaz5u01kwz3zqi6tm1n83v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcstol</title>
    <ns>0</ns>
    <id>5128</id>
    <revision>
      <id>76506</id>
      <parentid>76503</parentid>
      <timestamp>2015-02-19T20:09:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso</comment>
      <text xml:space="preserve" bytes="2352">{{cpp/title| wcstol | wcstoll}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | 
long      wcstol( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl | since=c++11 |
long long wcstoll( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl end}}

Interprets an integer value in a wide string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the wide character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be interpreted}}
{{par | str_end | pointer to a pointer to wide character}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|LONG_MAX}}, {{lc|LONG_MIN}}, {{lc|LLONG_MAX}} or {{lc|LLONG_MIN}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;errno.h&gt;
#include &lt;cwchar&gt;

int main()
{
    const wchar_t* p = L&quot;10 200000000000000000000000000000 30 -40&quot;;
    wchar_t *end;
    std::wcout &lt;&lt; &quot;Parsing L'&quot; &lt;&lt; p &lt;&lt; &quot;':\n&quot;;
    for (long i = std::wcstol(p, &amp;end, 10);
         p != end;
         i = std::wcstol(p, &amp;end, 10))
    {
        std::wcout &lt;&lt; &quot;'&quot; &lt;&lt; std::wstring(p, end-p) &lt;&lt; &quot;' -&gt; &quot;;
        p = end;
        if (errno == ERANGE){
            std::wcout &lt;&lt; &quot;range error, got &quot;;
            errno = 0;
        }
        std::wcout &lt;&lt; i &lt;&lt; '\n';
    }
}
 | p=true
 | output=
Parsing L'10 200000000000000000000000000000 30 -40':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 9223372036854775807
' 30' -&gt; 30
' -40' -&gt; -40
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strtol}}
{{dsc inc | cpp/string/wide/dsc wcstoul}}
{{dsc see c | c/string/wide/wcstol | wcstol | wcstoll}}
{{dsc end}}

[[de:cpp/string/wide/wcstol]]
[[es:cpp/string/wide/wcstol]]
[[fr:cpp/string/wide/wcstol]]
[[it:cpp/string/wide/wcstol]]
[[ja:cpp/string/wide/wcstol]]
[[pt:cpp/string/wide/wcstol]]
[[ru:cpp/string/wide/wcstol]]
[[zh:cpp/string/wide/wcstol]]</text>
      <sha1>2nz5dz8t14hbc3qk4ohsv3bogq243iy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcstold</title>
    <ns>0</ns>
    <id>4742</id>
    <redirect title="cpp/string/wide/wcstof" />
    <revision>
      <id>17215</id>
      <timestamp>2012-01-06T18:34:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/wide/wcstof]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/wide/wcstof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcstoul</title>
    <ns>0</ns>
    <id>5129</id>
    <revision>
      <id>76501</id>
      <parentid>62965</parentid>
      <timestamp>2015-02-19T20:04:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>reuse example</comment>
      <text xml:space="preserve" bytes="2381">{{cpp/title| wcstoul | wcstoull}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl | 
unsigned long      wcstoul( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl | since=c++11 |
unsigned long long wcstoull( const wchar_t* str, wchar_t** str_end, int base );
}}
{{dcl end}}

Interprets an unsigned integer value in a wide string pointed to by {{tt|str}}.

{{cpp/string/cvt str2int base | base=base | u=true}}

The functions sets the pointer pointed to by {{tt|str_end}} to point to the wide character past the last character interpreted. If {{tt|str_end}} is {{lc|NULL}}, it is ignored.

===Parameters===
{{par begin}}
{{par | str | pointer to the null-terminated wide string to be interpreted}}
{{par | str_end | pointer to a pointer to a wide character.}}
{{par | base | ''base'' of the interpreted integer value}}
{{par end}}

===Return value===
Integer value corresponding to the contents of {{tt|str}} on success. If the converted value falls out of range of corresponding return type, range error occurs and {{lc|ULONG_MAX}} or {{lc|ULLONG_MAX}} is returned. If no conversion can be performed, {{c|0}} is returned.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;errno.h&gt;
#include &lt;cwchar&gt;

int main()
{
    const wchar_t* p = L&quot;10 200000000000000000000000000000 30 40&quot;;
    wchar_t *end;
    std::wcout &lt;&lt; &quot;Parsing L'&quot; &lt;&lt; p &lt;&lt; &quot;':\n&quot;;
    for (unsigned long i = std::wcstoul(p, &amp;end, 10);
         p != end;
         i = std::wcstoul(p, &amp;end, 10))
    {
        std::wcout &lt;&lt; &quot;'&quot; &lt;&lt; std::wstring(p, end-p) &lt;&lt; &quot;' -&gt; &quot;;
        p = end;
        if (errno == ERANGE){
            std::wcout &lt;&lt; &quot;range error, got &quot;;
            errno = 0;
        }
        std::wcout &lt;&lt; i &lt;&lt; '\n';
    }
}
 | p=true
 | output=
Parsing L'10 200000000000000000000000000000 30 40':
'10' -&gt; 10
' 200000000000000000000000000000' -&gt; range error, got 18446744073709551615
' 30' -&gt; 30
' 40' -&gt; 40
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strtoul}}
{{dsc inc | cpp/string/wide/dsc wcstol}}
{{dsc see c | c/string/wide/wcstoul | wcstoul | wcstoull}}
{{dsc end}}

[[de:cpp/string/wide/wcstoul]]
[[es:cpp/string/wide/wcstoul]]
[[fr:cpp/string/wide/wcstoul]]
[[it:cpp/string/wide/wcstoul]]
[[ja:cpp/string/wide/wcstoul]]
[[pt:cpp/string/wide/wcstoul]]
[[ru:cpp/string/wide/wcstoul]]
[[zh:cpp/string/wide/wcstoul]]</text>
      <sha1>p7a5m073lxjb2ok4faucxx9d4fz0ovy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wcsxfrm</title>
    <ns>0</ns>
    <id>3792</id>
    <revision>
      <id>85319</id>
      <parentid>85318</parentid>
      <timestamp>2016-04-17T12:13:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>~</comment>
      <text xml:space="preserve" bytes="3015">{{cpp/title|wcsxfrm}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl |
std::size_t strxfrm( wchar_t* dest, const wchar_t* src, std::size_t count );
}}
{{dcl end}}

Transforms the null-terminated wide string pointed to by {{tt|src}} into the implementation-defined form such that comparing two transformed strings with {{lc|std::wcscmp}} gives the same result as comparing the original strings with {{lc|std::wcscoll}}, in the current C locale.

The first {{tt|count}} characters of the transformed string are written to destination, including the terminating null character, and the length of the full transformed string is returned, excluding the terminating null character.

If {{tt|count}} is {{c|0}}, then {{tt|dest}} is allowed to be a null pointer.

===Notes===
The correct length of the buffer that can receive the entire transformed string is {{c|1+std::wcsxfrm(NULL, src, 0)}}

This function is used when making multiple locale-dependent comparisons using the same wide string or set of wide strings, because it is more efficient to use {{tt|std::wcsxfrm}} to transform all the strings just once, and subsequently compare the transformed wide strings with {{lc|std::wcscmp}}.

===Parameters===
{{par begin}}
{{par| dest | pointer to the first element of a wide null-terminated string to write the transformed string to}}
{{par| src| pointer to the null-terminated wide character string to transform}}
{{par| count | maximum number of characters to output}}
{{par end}}

===Return value===
The length of the transformed wide string, not including the terminating null-character.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;sv_SE.utf8&quot;);

    std::wstring in1 = L&quot;\u00e5r&quot;;
    std::wstring out1(1+std::wcsxfrm(nullptr, in1.c_str(), 0), L' ');
    std::wstring in2 = L&quot;\u00e4ngel&quot;;
    std::wstring out2(1+std::wcsxfrm(nullptr, in2.c_str(), 0), L' ');

    std::wcsxfrm(&amp;out1[0], in1.c_str(), out1.size());
    std::wcsxfrm(&amp;out2[0], in2.c_str(), out2.size());

    std::wcout &lt;&lt; &quot;In the Swedish locale: &quot;;
    if(out1 &lt; out2)
         std::wcout &lt;&lt; in1 &lt;&lt; &quot; before &quot; &lt;&lt; in2 &lt;&lt; '\n';
    else
         std::wcout &lt;&lt; in2 &lt;&lt; &quot; before &quot; &lt;&lt; in1 &lt;&lt; '\n';

    std::wcout &lt;&lt; &quot;In lexicographical comparison: &quot;;
    if(in1 &lt; in2)
         std::wcout &lt;&lt; in1 &lt;&lt; &quot; before &quot; &lt;&lt; in2 &lt;&lt; '\n';
    else
         std::wcout &lt;&lt; in2 &lt;&lt; &quot; before &quot; &lt;&lt; in1 &lt;&lt; '\n';

}
 | output=
In the Swedish locale: år before ängel
In lexicographical comparison: ängel before år
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strxfrm}}
{{dsc inc | cpp/locale/collate/dsc do_transform}}
{{dsc inc | cpp/string/wide/dsc wcscoll}}
{{dsc see c | c/string/wide/wcsxfrm}}
{{dsc end}}

[[de:cpp/string/wide/wcsxfrm]]
[[es:cpp/string/wide/wcsxfrm]]
[[fr:cpp/string/wide/wcsxfrm]]
[[it:cpp/string/wide/wcsxfrm]]
[[ja:cpp/string/wide/wcsxfrm]]
[[pt:cpp/string/wide/wcsxfrm]]
[[ru:cpp/string/wide/wcsxfrm]]
[[zh:cpp/string/wide/wcsxfrm]]</text>
      <sha1>7ebyv99ia5vjziujzp9n7mo6qdd17im</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wctrans</title>
    <ns>0</ns>
    <id>2971</id>
    <revision>
      <id>59142</id>
      <parentid>51324</parentid>
      <timestamp>2013-06-01T06:27:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1376">{{cpp/title|wctrans}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
std::wctrans_t wctrans( const char* str );
}}

Constructs a value of type {{c|std::wctrans_t}} that describes a LC_CTYPE category of wide character mapping. It may be one of the standard mappings, or a locale-specific mapping, such as {{tt|&quot;tojhira&quot;}} or {{tt|&quot;tojkana&quot;}}.

===Parameters===
{{par begin}}
{{par | str | C string holding the name of the desired mapping.
The following values of {{tt|str}} are supported in all C locales:
{{dsc begin}}
{{dsc hitem | Value of {{tt|str}}  | Effect  }}
{{dsc | {{tt|&quot;toupper&quot;}} | identifies the mapping used by {{c|towupper}} }}
{{dsc | {{tt|&quot;tolower&quot;}} | identifies the mapping used by {{c|towlower}} }}
{{dsc end}}
}}
{{dsc end}}

===Return value===

{{c|std::wctrans_t}} object suitable for use with {{lc|std::towctrans}} to map wide characters according to the named mapping of the current C locale or zero if {{tt|str}} does not name a mapping supported by the current C locale.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc towctrans}}
{{dsc see c | c/string/wide/wctrans}}
{{dsc end}}

[[de:cpp/string/wide/wctrans]]
[[es:cpp/string/wide/wctrans]]
[[fr:cpp/string/wide/wctrans]]
[[it:cpp/string/wide/wctrans]]
[[ja:cpp/string/wide/wctrans]]
[[pt:cpp/string/wide/wctrans]]
[[ru:cpp/string/wide/wctrans]]
[[zh:cpp/string/wide/wctrans]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wctype</title>
    <ns>0</ns>
    <id>2967</id>
    <revision>
      <id>59143</id>
      <parentid>51325</parentid>
      <timestamp>2013-06-01T06:27:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2125">{{cpp/title|wctype}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwctype |
std::wctype_t wctype( const char* str );
}}

Constructs a value of type {{c|std::wctype_t}} that describes a LC_CTYPE category of wide character classification. It may be one of the standard classification categories, or a locale-specific category, such as {{tt|&quot;jkanji&quot;}}.

===Parameters===
{{par begin}}
{{par | str | C string holding the name of the desired category}}
{{par end}}

The following values of {{tt|str}} are supported in all C locales:
{{dsc begin}}
{{dsc hitem | value of {{tt|str}}  | effect  }}
{{dsc | {{tt|&quot;alnum&quot;}} | identifies the category used by {{lc|std::iswalnum}} }}
{{dsc | {{tt|&quot;alpha&quot;}} | identifies the category used by {{lc|std::iswalpha}} }}
{{dsc | {{tt|&quot;blank&quot;}} | identifies the category used by {{lc|std::iswblank}} {{mark c++11}}}}
{{dsc | {{tt|&quot;cntrl&quot;}} | identifies the category used by {{lc|std::iswcntrl}} }}
{{dsc | {{tt|&quot;digit&quot;}} | identifies the category used by {{lc|std::iswdigit}} }}
{{dsc | {{tt|&quot;graph&quot;}} | identifies the category used by {{lc|std::iswgraph}} }}
{{dsc | {{tt|&quot;lower&quot;}} | identifies the category used by {{lc|std::iswlower}} }}
{{dsc | {{tt|&quot;print&quot;}} | identifies the category used by {{lc|std::iswprint}} }}
{{dsc | {{tt|&quot;space&quot;}} | identifies the category used by {{lc|std::iswspace}} }}
{{dsc | {{tt|&quot;upper&quot;}} | identifies the category used by {{lc|std::iswupper}} }}
{{dsc | {{tt|&quot;xdigit&quot;}} | identifies the category used by {{lc|std::iswxdigit}} }}
{{dsc end}}

===Return value===
{{c|std::wctype_t}} object suitable for use with {{lc|std::iswctype}} to classify wide characters according to the named category of the current C locale or zero if {{tt|str}} does not name a category supported by the current C locale.

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc iswctype}}
{{dsc see c | c/string/wide/wctype}}
{{dsc end}}

[[de:cpp/string/wide/wctype]]
[[es:cpp/string/wide/wctype]]
[[fr:cpp/string/wide/wctype]]
[[it:cpp/string/wide/wctype]]
[[ja:cpp/string/wide/wctype]]
[[pt:cpp/string/wide/wctype]]
[[ru:cpp/string/wide/wctype]]
[[zh:cpp/string/wide/wctype]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wmemchr</title>
    <ns>0</ns>
    <id>3805</id>
    <revision>
      <id>76725</id>
      <parentid>76722</parentid>
      <timestamp>2015-02-27T14:02:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>re-word in terms of wchar arrays (C uses 'objects' but explains that it means 'integer arrays compatible with wchar_t'). Thanks for non-English example</comment>
      <text xml:space="preserve" bytes="1948">{{cpp/title|wmemchr}}
{{cpp/string/wide/navbar}}
{{dcl begin}}
{{dcl header | cwchar}}
{{dcl |
const wchar_t* wmemchr( const wchar_t* ptr, wchar_t ch, std::size_t count );
}}
{{dcl | 1=
      wchar_t* wmemchr(       wchar_t* ptr, wchar_t ch, std::size_t count );
}}
{{dcl end}}

Locates the first occurrence of wide character {{tt|ch}} in the initial {{tt|count}} wide characters of the wide character array pointed to by {{tt|ptr}}. 

If {{tt|count}} is zero, the function returns a null pointer.

===Parameters===
{{par begin}}
{{par | ptr | pointer to the wide character array to be examined}}
{{par | ch | wide character to search for}}
{{par | count | number of wide characters to examine}}
{{par end}}

===Return value===
Pointer to the location of the wide character, or a null pointer if no such character is found.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;clocale&gt;
#include &lt;locale&gt;

int main()
{
    const wchar_t str[] = L&quot;诺不轻信，故人不负我\0诺不轻许，故我不负人。&quot;;
    wchar_t target = L'许';
    const std::size_t sz = sizeof str / sizeof *str;
    if (const wchar_t* result = std::wmemchr(str, target, sz)) {
        std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
        std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
        std::wcout &lt;&lt; &quot;Found '&quot; &lt;&lt; target
                   &lt;&lt; &quot;' at position &quot; &lt;&lt; result - str &lt;&lt; &quot;\n&quot;;
    }
}
|p=true
| output=
Found '许' at position 14
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc memchr}}
{{dsc inc | cpp/string/byte/dsc strchr}}
{{dsc inc | cpp/string/wide/dsc wcschr}}
{{dsc inc | cpp/algorithm/dsc find}}
{{dsc see c | c/string/wide/wmemchr}}
{{dsc end}}

[[de:cpp/string/wide/wmemchr]]
[[es:cpp/string/wide/wmemchr]]
[[fr:cpp/string/wide/wmemchr]]
[[it:cpp/string/wide/wmemchr]]
[[ja:cpp/string/wide/wmemchr]]
[[pt:cpp/string/wide/wmemchr]]
[[ru:cpp/string/wide/wmemchr]]
[[zh:cpp/string/wide/wmemchr]]</text>
      <sha1>p6onr23zl3cqktov87dolo92qf290o8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wmemcmp</title>
    <ns>0</ns>
    <id>3804</id>
    <revision>
      <id>76718</id>
      <parentid>76716</parentid>
      <timestamp>2015-02-26T21:31:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2871">{{cpp/title|wmemcmp}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
int wmemcmp( const wchar_t* lhs, const wchar_t* rhs, std::size_t count );
}}

Compares the first {{tt|count}} wide characters of the wide character arrays pointed to by {{tt|lhs}} and {{tt|rhs}}. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of wide characters that differ in the arrays being compared.

If {{tt|count}} is zero, the function does nothing.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pointers to the wide character arrays to compare}}
{{par | count | number of wide characters to examine}}
{{par end}}

===Return value===
Negative value if the value of the first differing wide character in {{tt|lhs}} is less than the value of the corresponding wide character in {{tt|rhs}}: {{tt|lhs}} precedes {{tt|rhs}} in lexicographical order.

{{c|0}} if all {{tt|count}} wide characters of {{tt|lhs}} and {{tt|rhs}} are equal.

Positive value if the value of the first differing wide character in {{tt|lhs}} is greater than the value of the corresponding wide character in {{tt|rhs}}: {{tt|rhs}} precedes {{tt|lhs}} in lexicographical order.

===Notes===
This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it examines: nulls as well as invalid wide characters are compared too.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cwchar&gt;
#include &lt;locale&gt;
#include &lt;clocale&gt;

void demo(const wchar_t* lhs, const wchar_t* rhs, std::size_t sz)
{
    std::wcout &lt;&lt; std::wstring(lhs, sz);
    int rc = std::wmemcmp(lhs, rhs, sz);
    if(rc == 0)
        std::wcout &lt;&lt; &quot; compares equal to &quot;;
    else if(rc &lt; 0)
        std::wcout &lt;&lt; &quot; precedes &quot;;
    else if(rc &gt; 0)
        std::wcout &lt;&lt; &quot; follows &quot;;
    std::wcout &lt;&lt; std::wstring(rhs, sz) &lt;&lt; &quot; in lexicographical order\n&quot;;
}

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));

    wchar_t a1[] = {L'α',L'β',L'γ'};
    constexpr std::size_t sz = sizeof a1 / sizeof *a1;
    wchar_t a2[sz] = {L'α',L'β',L'δ'};

    demo(a1, a2, sz);
    demo(a2, a1, sz);
    demo(a1, a1, sz);
}
|p=true
| output=
αβγ precedes αβδ in lexicographical order
αβδ follows αβγ in lexicographical order
αβγ compares equal to αβγ in lexicographical order
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wcscmp}}
{{dsc inc | cpp/string/byte/dsc memcmp}}
{{dsc inc | cpp/string/wide/dsc wcsncmp}}
{{dsc see c | c/string/wide/wmemcmp}}
{{dsc end}}

[[de:cpp/string/wide/wmemcmp]]
[[es:cpp/string/wide/wmemcmp]]
[[fr:cpp/string/wide/wmemcmp]]
[[it:cpp/string/wide/wmemcmp]]
[[ja:cpp/string/wide/wmemcmp]]
[[pt:cpp/string/wide/wmemcmp]]
[[ru:cpp/string/wide/wmemcmp]]
[[zh:cpp/string/wide/wmemcmp]]</text>
      <sha1>g1scv9e7qmajra4gaels9iu7vnyetgn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wmemcpy</title>
    <ns>0</ns>
    <id>3802</id>
    <revision>
      <id>76664</id>
      <parentid>76662</parentid>
      <timestamp>2015-02-25T16:51:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>mention the zero count rule</comment>
      <text xml:space="preserve" bytes="2256">{{cpp/title|wmemcpy}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, std::size_t count );
}}

Copies exactly {{tt|count}} successive wide characters from the wide character array pointed to by {{tt|src}} to the wide character array pointed to by {{tt|dest}}. If the objects overlap, the behavior is undefined. If {{tt|count}} is zero, the function does nothing.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the wide character array to copy from}}
{{par | count | number of wide characters to copy}}
{{par end}}

===Return value===
{{tt|dest}}

===Notes===
This function's analog for byte strings is {{lc|std::strncpy}}, not {{lc|std::strcpy}}.

This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it copies: nulls as well as invalid characters are copied too.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;clocale&gt;
#include &lt;locale&gt;

int main(void)
{
    wchar_t from1[] = L&quot;नमस्ते&quot;;
    const size_t sz1 = sizeof from1 / sizeof *from1;
    wchar_t from2[] = L&quot;Բարև&quot;;
    const size_t sz2 = sizeof from2 / sizeof *from2;
    wchar_t to[sz1 + sz2];

    std::wmemcpy(to, from1, sz1); // copy from1, along with its null terminator
    std::wmemcpy(to + sz1, from2, sz2); // append from2, along with its null terminator

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::cout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::wcout &lt;&lt; &quot;Wide array contains: &quot;;
    for(size_t n = 0; n &lt; sizeof to / sizeof *to; ++n)
        if(to[n])
            std::wcout &lt;&lt; to[n];
        else
            std::wcout &lt;&lt; &quot;\\0&quot;;
    std::wcout &lt;&lt; '\n';
}
|p=true
 | output=
Wide array contains: नमस्ते\0Բարև\0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc strncpy}}
{{dsc inc | cpp/string/wide/dsc wmemmove}}
{{dsc see c | c/string/wide/wmemcpy}}
{{dsc end}}

[[de:cpp/string/wide/wmemcpy]]
[[es:cpp/string/wide/wmemcpy]]
[[fr:cpp/string/wide/wmemcpy]]
[[it:cpp/string/wide/wmemcpy]]
[[ja:cpp/string/wide/wmemcpy]]
[[pt:cpp/string/wide/wmemcpy]]
[[ru:cpp/string/wide/wmemcpy]]
[[zh:cpp/string/wide/wmemcpy]]</text>
      <sha1>aal4l3lxqusqqbzywu9t062az0n5pob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wmemmove</title>
    <ns>0</ns>
    <id>3803</id>
    <revision>
      <id>76680</id>
      <parentid>59151</parentid>
      <timestamp>2015-02-26T14:51:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fix wording (these are for arrays of wide chars, not any objects)</comment>
      <text xml:space="preserve" bytes="2050">{{cpp/title|wmemmove}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
wchar_t* wmemmove( wchar_t* dest, const wchar_t* src, std::size_t count );
}}

Copies exactly {{tt|count}} successive wide characters from the wide character array pointed to by {{tt|src}} to the wide character array pointed to by {{tt|dest}}.

If {{tt|count}} is zero, the function does nothing.

The arrays may overlap: copying takes place as if the wide characters were copied to a temporary wide character array and then copied from the temporary array to {{tt|dest}}.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to copy to}}
{{par | src | pointer to the wide character array to copy from}}
{{par | count | number of wide characters to copy}}
{{par end}}

===Return value===
Returns a copy of {{tt|dest}}

===Notes===
This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it copies: nulls as well as invalid characters are copied too.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;locale&gt;
#include &lt;clocale&gt;

int main()
{
    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));

    wchar_t str[] = L&quot;αβγδεζηθικλμνξοπρστυφχψω&quot;;
    std::wcout &lt;&lt; str &lt;&lt; '\n';
    std::wmemmove(str+4, str+3, 3); // copy from [δεζ] to [εζη]
    std::wcout &lt;&lt; str &lt;&lt; '\n';
}
|p=true
| output=
αβγδεζηθικλμνξοπρστυφχψω
αβγδδεζθικλμνξοπρστυφχψω
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/wide/dsc wmemcpy}}
{{dsc inc | cpp/string/byte/dsc memmove}}
{{dsc inc | cpp/algorithm/dsc copy}}
{{dsc inc | cpp/algorithm/dsc copy_backward}}
{{dsc see c | c/string/wide/wmemmove}}
{{dsc end}}

[[de:cpp/string/wide/wmemmove]]
[[es:cpp/string/wide/wmemmove]]
[[fr:cpp/string/wide/wmemmove]]
[[it:cpp/string/wide/wmemmove]]
[[ja:cpp/string/wide/wmemmove]]
[[pt:cpp/string/wide/wmemmove]]
[[ru:cpp/string/wide/wmemmove]]
[[zh:cpp/string/wide/wmemmove]]</text>
      <sha1>85ij0pxdal0sdal61nloyxp7v6kl5t7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/string/wide/wmemset</title>
    <ns>0</ns>
    <id>3806</id>
    <revision>
      <id>76732</id>
      <parentid>76731</parentid>
      <timestamp>2015-02-27T17:10:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>no compatible types in cpp</comment>
      <text xml:space="preserve" bytes="1767">{{cpp/title|wmemset}}
{{cpp/string/wide/navbar}}
{{ddcl | header=cwchar |
wchar_t* wmemset( wchar_t* dest, wchar_t ch, std::size_t count );
}}

Copies the wide character {{tt|ch}} into each of the first {{tt|count}} wide characters of the wide character array pointed to by {{tt|dest}}.

If overflow occurs, the behavior is undefined.

If {{tt|count}} is zero, the function does nothing.

===Parameters===
{{par begin}}
{{par | dest | pointer to the wide character array to fill}}
{{par | ch | fill wide character }}
{{par | count | number of wide characters to fill}}
{{par end}}

===Return value===
Returns a copy of {{tt|dest}}

===Notes===
This function is not locale-sensitive and pays no attention to the values of the {{c|wchar_t}} objects it writes: nulls as well as invalid wide characters are written too.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cwchar&gt;
#include &lt;clocale&gt;
#include &lt;locale&gt;

int main()
{
    wchar_t ar[4] = {L'1', L'2', L'3', L'4'};
    std::wmemset(ar, L'\U0001f34c', 2); // replaces [12] with the 🍌 bananas
    std::wmemset(ar+2, L'蕉', 2); // replaces [34] with the 蕉 bananas

    std::setlocale(LC_ALL, &quot;en_US.utf8&quot;);
    std::wcout.imbue(std::locale(&quot;en_US.utf8&quot;));
    std::wcout &lt;&lt; std::wstring(ar, 4) &lt;&lt; '\n';
}
|p=true
| output=
🍌🍌蕉蕉
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/byte/dsc memset}}
{{dsc inc | cpp/string/wide/dsc wmemcpy}}
{{dsc inc | cpp/algorithm/dsc fill_n}}
{{dsc see c | c/string/wide/wmemset}}
{{dsc end}}

[[de:cpp/string/wide/wmemset]]
[[es:cpp/string/wide/wmemset]]
[[fr:cpp/string/wide/wmemset]]
[[it:cpp/string/wide/wmemset]]
[[ja:cpp/string/wide/wmemset]]
[[pt:cpp/string/wide/wmemset]]
[[ru:cpp/string/wide/wmemset]]
[[zh:cpp/string/wide/wmemset]]</text>
      <sha1>h5vpfajuwbc3827bmw0l9ibsxpsy7ih</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/symbol index</title>
    <ns>0</ns>
    <id>15682</id>
    <revision>
      <id>90856</id>
      <parentid>90855</parentid>
      <timestamp>2017-03-14T01:30:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Replace {{c}} with {{tt}} throughout. That syntax highlighting kills performance</comment>
      <text xml:space="preserve" bytes="92233">{{title|std Symbol Index}}
{{cpp/navbar}}

&lt;br/&gt;

This page tries to list all the symbols that are available from the ''Standard Library'' in the namespace ''std::''. The symbols are written as follows:
&lt;ul&gt;
&lt;li&gt;Function names with ''()''.&lt;/li&gt;
&lt;li&gt;Templates with ''&lt;&gt;''.&lt;/li&gt;
&lt;/ul&gt;
Symbols that also exist in C and have been imported into the ''std::'' namespace for C++ are not listed here.

Symbols from std::'s sub-namespaces (e.g. {{tt|chrono}}) are not listed here, but the namespace names are the links to the corresponding pages.

==&lt;blockquote&gt;&lt;tt&gt;[[cpp/symbol_index#A| A]]  [[cpp/symbol_index#B| B]]  [[cpp/symbol_index#C| C]]  [[cpp/symbol_index#D| D]]  [[cpp/symbol_index#E| E]]  [[cpp/symbol_index#F| F]]  [[cpp/symbol_index#G| G]]  [[cpp/symbol_index#H| H]]  [[cpp/symbol_index#I| I]]  [[cpp/symbol_index#J| J]]  [[cpp/symbol_index#K| K]]  [[cpp/symbol_index#L| L]]  [[cpp/symbol_index#M| M]]  [[cpp/symbol_index#N| N]]  [[cpp/symbol_index#O| O]]  [[cpp/symbol_index#P| P]]  [[cpp/symbol_index#Q| Q]]  [[cpp/symbol_index#R| R]]  [[cpp/symbol_index#S| S]]  [[cpp/symbol_index#T| T]]  [[cpp/symbol_index#U| U]]  [[cpp/symbol_index#V| V]]  [[cpp/symbol_index#W| W]]  [[cpp/symbol_index#X| X]]  [[cpp/symbol_index#Y| Y]]  [[cpp/symbol_index#Z| Z]] &lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=A=
[[cpp/numeric/math/abs | {{tt|abs()}}]] (int) &lt;br/&gt;
[[cpp/numeric/math/fabs | {{tt|abs()}}]] (float) &lt;br/&gt;
[[cpp/numeric/complex/abs | {{tt|abs&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/abs | {{tt|abs&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/acos | {{tt|acos()}}]] &lt;br/&gt;
[[cpp/numeric/complex/acos | {{tt|acos&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/acos | {{tt|acos&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/acosh | {{tt|acosh()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/complex/acosh | {{tt|acosh&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/algorithm/accumulate | {{tt|accumulate()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/types/add_cv | {{tt|add_const&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/as_const | {{tt|add_const&lt;&gt;()}}]]  {{mark since c++17}} &lt;br/&gt;
[[cpp/types/add_cv | {{tt|add_const_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/add_cv | {{tt|add_cv&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/add_cv | {{tt|add_cv_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/add_pointer | {{tt|add_pointer&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/add_pointer | {{tt|add_pointer_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/add_reference | {{tt|add_lvalue_reference&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/add_reference | {{tt|add_lvalue_reference_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/memory/addressof | {{tt|addressof&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/add_reference | {{tt|add_rvalue_reference&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/add_reference | {{tt|add_rvalue_reference_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/add_cv | {{tt|add_volatile&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/add_cv | {{tt|add_volatile_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/algorithm/adjacent_difference | {{tt|adjacent_difference()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/adjacent_find | {{tt|adjacent_find()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/thread/lock_tag | {{tt|adopt_lock}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/lock_tag_t | {{tt|adopt_lock_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/advance | {{tt|advance&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/memory/align | {{tt|align()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/aligned_storage | {{tt|aligned_storage&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/aligned_storage | {{tt|aligned_storage_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/aligned_union | {{tt|aligned_union&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/aligned_union | {{tt|aligned_union_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/alignment_of | {{tt|alignment_of&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/alignment_of | {{tt|alignment_of_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/new/align_val_t | {{tt|align_val_t}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/all_any_none_of | {{tt|all_of()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/allocate_shared | {{tt|allocate_shared&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/allocator | {{tt|allocator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/memory/allocator_arg | {{tt|allocator_arg}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/allocator_arg_t | {{tt|allocator_arg_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/allocator_traits | {{tt|allocator_traits&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/any | {{tt|any}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/any/any_cast | {{tt|any_cast&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/all_any_none_of | {{tt|any_of()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/apply | {{tt|apply&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/complex/arg | {{tt|arg&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/container/array | {{tt|array&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/as_const | {{tt|as_const&lt;&gt;()}}]]  {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/asin | {{tt|asin()}}]] &lt;br/&gt;
[[cpp/numeric/complex/asin | {{tt|asin&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/asin | {{tt|asin&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/asinh | {{tt|asinh()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/complex/asinh | {{tt|asinh&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/special_math/assoc_laguerre | {{tt|assoc_laguerre()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/assoc_laguerre | {{tt|assoc_laguerref()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/assoc_laguerre | {{tt|assoc_laguerrel()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/assoc_legendre | {{tt|assoc_legendre()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/assoc_legendre | {{tt|assoc_legendref()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/assoc_legendre | {{tt|assoc_legendrel()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/thread/async | {{tt|async&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/atan | {{tt|atan()}}]] &lt;br/&gt;
[[cpp/numeric/complex/atan | {{tt|atan&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/atan | {{tt|atan&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/atan2 | {{tt|atan2()}}]] &lt;br/&gt;
[[cpp/numeric/valarray/atan2 | {{tt|atan2&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/atanh | {{tt|atanh()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/complex/atanh | {{tt|atanh&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
&lt;div class=&quot;toccolours mw-collapsible mw-collapsed&quot;&gt;
[[cpp/atomic/atomic | {{tt|atomic&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
&lt;div class=&quot;mw-collapsible-content&quot;&gt;
atomic&lt;&gt; full specializations and typedefs: &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_bool}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_char}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_char16_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_char32_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int8_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int16_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int32_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int64_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast8_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast16_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast32_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast64_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast8_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast16_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast32_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_int_fast64_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_intmax_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_intptr_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_llong}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_long}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_ptrdiff_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_schar}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_short}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_size_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uchar}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint8_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint16_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint32_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint64_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_fast8_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_fast16_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_fast32_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_fast64_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_least8_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_least16_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_least32_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uint_least64_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uintmax_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_uintptr_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_ullong}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_ulong}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_ushort}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic | {{tt|atomic_wchar_t}}]] {{mark since c++11}} &lt;br/&gt;
&lt;/div&gt;
&lt;/div&gt;
[[cpp/atomic/atomic_compare_exchange | {{tt|atomic_compare_exchange_strong&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_compare_exchange_strong&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_compare_exchange | {{tt|atomic_compare_exchange_strong_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_compare_exchange_strong_explicit&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_compare_exchange | {{tt|atomic_compare_exchange_weak&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_compare_exchange_weak&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_compare_exchange | {{tt|atomic_compare_exchange_weak_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_compare_exchange_weak_explicit&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_exchange | {{tt|atomic_exchange&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_exchange&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_exchange | {{tt|atomic_exchange_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_exchange_explicit&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_add | {{tt|atomic_fetch_add&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_add | {{tt|atomic_fetch_add_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_and | {{tt|atomic_fetch_and&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_and | {{tt|atomic_fetch_and_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_or | {{tt|atomic_fetch_or&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_or | {{tt|atomic_fetch_or_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_sub | {{tt|atomic_fetch_sub&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_sub | {{tt|atomic_fetch_sub_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_xor | {{tt|atomic_fetch_xor&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_fetch_xor | {{tt|atomic_fetch_xor_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_flag | {{tt|atomic_flag}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_flag_clear | {{tt|atomic_flag_clear()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_flag_clear | {{tt|atomic_flag_clear_explicit()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_flag_test_and_set | {{tt|atomic_flag_test_and_set()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_flag_test_and_set | {{tt|atomic_flag_test_and_set_explicit()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/ATOMIC_FLAG_INIT | {{tt|ATOMIC_FLAG_INIT()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_init | {{tt|atomic_init&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
&lt;div class=&quot;toccolours mw-collapsible mw-collapsed&quot;&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|atomic_is_lockfree&lt;&gt;()}}]] {{mark since c++11}}
&lt;div class=&quot;mw-collapsible-content&quot;&gt;
defines for atomic_is_lock_free: &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_BOOL_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_CHAR_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_CHAR16_T_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_CHAR32_T_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_INT_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_LLONG_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_LONG_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_POINTER_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_SHORT_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_is_lock_free | {{tt|ATOMIC_WCHAR_T_LOCK_FREE&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
&lt;/div&gt;
&lt;/div&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_is_lockfree&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_load | {{tt|atomic_load&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_load&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_load | {{tt|atomic_load_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_load_explicit&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_signal_fence | {{tt|atomic_signal_fence()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_store | {{tt|atomic_store&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_store&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_store | {{tt|atomic_store_explicit&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/atomic | {{tt|atomic_store_explicit&lt;&gt;()}}]] (std::shared_ptr) {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/atomic_thread_fence | {{tt|atomic_thread_fence()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/ATOMIC_VAR_INIT | {{tt|ATOMIC_VAR_INIT()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|atto}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/auto_ptr | {{tt|auto_ptr&lt;&gt;}}]] {{mark until c++17}} &lt;br/&gt;

=B=
[[cpp/iterator/back_inserter | {{tt|back_inserter&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/iterator/back_insert_iterator | {{tt|back_insert_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/memory/new/bad_alloc | {{tt|bad_alloc}}]] &lt;br/&gt;
[[cpp/utility/any/bad_any_cast | {{tt|bad_any_cast}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/new/bad_array_new_length | {{tt|bad_array_new_length}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/bad_cast | {{tt|bad_cast}}]] &lt;br/&gt;
[[cpp/error/bad_exception | {{tt|bad_exception}}]] &lt;br/&gt;
[[cpp/utility/functional/bad_function_call | {{tt|bad_function_call}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/optional/bad_optional_access | {{tt|bad_optional_access}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/bad_typeid | {{tt|bad_typeid}}]] &lt;br/&gt;
[[cpp/utility/variant/bad_variant_access | {{tt|bad_variant_access}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/bad_weak_ptr | {{tt|bad_weak_ptr}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/basic_filebuf | {{tt|basic_filebuf&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_fstream | {{tt|basic_fstream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_ifstream | {{tt|basic_ifstream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_istream | {{tt|basic_istream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_ios | {{tt|basic_ios&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_iostream | {{tt|basic_iostream}}]] &lt;br/&gt;
[[cpp/io/basic_istringstream | {{tt|basic_istringstream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_ofstream | {{tt|basic_ofstream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_ostream | {{tt|basic_ostream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_ostringstream | {{tt|basic_ostringstream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/regex/basic_regex | {{tt|basic_regex&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/basic_streambuf | {{tt|basic_streambuf&lt;&gt;}}]] &lt;br/&gt;
[[cpp/string/basic_string | {{tt|basic_string&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_stringbuf | {{tt|basic_stringbuf&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/basic_stringstream | {{tt|basic_stringstream&lt;&gt;}}]] &lt;br/&gt;
[[cpp/string/basic_string_view | {{tt|basic_string_view&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/iterator/begin | {{tt|begin&lt;&gt;()}}]] {{mark since c++11}} (iterator)&lt;br/&gt;
[[cpp/numeric/random/bernoulli_distribution | {{tt|bernoulli_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/special_math/beta | {{tt|beta()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/beta | {{tt|betaf()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/beta | {{tt|betal()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/iterator/iterator_tags | {{tt|bidirectional_iterator_tag}}]] &lt;br/&gt;
[[cpp/algorithm/binary_search | {{tt|binary_search()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/bind | {{tt|bind&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/binomial_distribution | {{tt|binomial_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/bit_and | {{tt|bit_and&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/bit_or | {{tt|bit_or&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/bit_not | {{tt|bit_not&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/utility/bitset | {{tt|bitset&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/bit_xor | {{tt|bit_xor&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/boolalpha | {{tt|boolalpha()}}]] &lt;br/&gt;
[[cpp/types/integral_constant | {{tt|bool_constant&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/functional/boyer_moore_horspool_searcher | {{tt|boyer_moore_horspool_searcher&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/functional/boyer_moore_searcher | {{tt|boyer_moore_searcher&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/byte | {{tt|byte}}]] {{mark since c++17}} &lt;br/&gt;

=C=
[[cpp/thread/call_once | {{tt|call_once&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/cauchy_distribution | {{tt|cauchy_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/begin | {{tt|cbegin&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/numeric/math/cbrt | {{tt|cbrt()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/ceil | {{tt|ceil()}}]] &lt;br/&gt;
[[cpp/iterator/end | {{tt|cend&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|centi}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/cerr | {{tt|cerr}}]] &lt;br/&gt;
[[cpp/string/char_traits | {{tt|char_traits&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/random/chi_squared_distribution | {{tt|chi_squared_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
&amp;#x25B6; [[cpp/symbol_index/chrono | {{tt|chrono}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/cin | {{tt|cin}}]] &lt;br/&gt;
[[cpp/algorithm/clamp | {{tt|clamp()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io/clog | {{tt|clog}}]] &lt;br/&gt;
[[cpp/regex/match_results | {{tt|cmatch}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/codecvt | {{tt|codecvt&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/codecvt_base | {{tt|codecvt_base}}]] &lt;br/&gt;
[[cpp/locale/codecvt_byname | {{tt|codecvt_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/codecvt_mode | {{tt|codecvt_mode}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/codecvt_utf16 | {{tt|codecvt_utf16&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/codecvt_utf8 | {{tt|codecvt_utf8&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/codecvt_utf8_utf16 | {{tt|codecvt_utf8_utf16&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/collate | {{tt|collate&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/collate_byname | {{tt|collate_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/complex | {{tt|complex&lt;&gt;}}]] &lt;br/&gt;
[[cpp/types/common_type | {{tt|common_type&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/common_type | {{tt|common_type_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_1 | {{tt|comp_ellint_1()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_1 | {{tt|comp_ellint_1f()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_1 | {{tt|comp_ellint_1l()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_2 | {{tt|comp_ellint_2()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_2 | {{tt|comp_ellint_2f()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_2 | {{tt|comp_ellint_2l()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_3 | {{tt|comp_ellint_3()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_3 | {{tt|comp_ellint_3f()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/comp_ellint_3 | {{tt|comp_ellint_3l()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/conditional | {{tt|conditional&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/conditional | {{tt|conditional_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/thread/condition_variable | {{tt|condition_variable}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/condition_variable_any | {{tt|condition_variable_any}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/conjunction | {{tt|conjunction&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/conjunction | {{tt|conjunction_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/complex/conj | {{tt|conj&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/locale/codecvt_mode | {{tt|consume_header}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/copy | {{tt|copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/copy_backward | {{tt|copy_backward()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/copy | {{tt|copy_if()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/copy_n | {{tt|copy_n()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/copysign | {{tt|copysign()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/pointer_cast | {{tt|const_pointer_cast&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/cos | {{tt|cos()}}]] &lt;br/&gt;
[[cpp/numeric/complex/cos | {{tt|cos&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/cos | {{tt|cos&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/cosh | {{tt|cosh()}}]] &lt;br/&gt;
[[cpp/numeric/complex/cosh | {{tt|cosh&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/cosh | {{tt|cosh&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/algorithm/count | {{tt|count()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/count_if | {{tt|count_if()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/cout | {{tt|cout}}]] &lt;br/&gt;
[[cpp/iterator/rbegin | {{tt|crbegin&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/utility/functional/ref | {{tt|cref&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_iterator | {{tt|cregex_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_token_iterator | {{tt|cregex_token_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/rend | {{tt|crend&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/regex/sub_match | {{tt|csub_match}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/ctype | {{tt|ctype&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/ctype | {{tt|ctype&lt;&gt;}}]] (char) &lt;br/&gt;
[[cpp/locale/ctype_base | {{tt|ctype_base}}]] &lt;br/&gt;
[[cpp/locale/ctype_byname | {{tt|ctype_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/error/current_exception | {{tt|current_exception()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/cv_status | {{tt|cv_status}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_i | {{tt|cyl_bessel_i()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_i | {{tt|cyl_bessel_if()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_i | {{tt|cyl_bessel_il()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_j | {{tt|cyl_bessel_j()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_j | {{tt|cyl_bessel_jf()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_j | {{tt|cyl_bessel_jl()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_k | {{tt|cyl_bessel_k()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_k | {{tt|cyl_bessel_kf()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_bessel_k | {{tt|cyl_bessel_kl()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_neumann | {{tt|cyl_neumann()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_neumann | {{tt|cyl_neumannf()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/cyl_neumann | {{tt|cyl_neumannl()}}]] {{mark since c++17}} &lt;br/&gt;

=D=
[[cpp/iterator/data | {{tt|data&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io/manip/hex | {{tt|dec()}}]] &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|deca}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/decay | {{tt|decay&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/decay | {{tt|decay_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|deci}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/gc/declare_no_pointers | {{tt|declare_no_pointers()}}]]  {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/gc/declare_reachable | {{tt|declare_reachable()}}]]  {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/declval | {{tt|declval&lt;&gt;()}}]]  {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/default_delete | {{tt|default_delete}}]]  {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/fixed | {{tt|defaultfloat()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|default_random_engine}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/default_searcher | {{tt|default_searcher&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/thread/lock_tag | {{tt|defer_lock}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/lock_tag_t | {{tt|defer_lock_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/numeric_limits/float_denorm_style | {{tt|denorm_absent}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_denorm_style | {{tt|denorm_indeterminate}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_denorm_style | {{tt|denorm_present}}]] &lt;br/&gt;
[[cpp/container/deque | {{tt|deque&lt;&gt;}}]] &lt;br/&gt;
[[cpp/memory/destroy | {{tt|destroy&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/destroy_at | {{tt|destroy_at&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/destroy_n | {{tt|destroy_n&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/random/discrete_distribution | {{tt|discrete_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/discard_block_engine | {{tt|discard_block_engine&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/disjunction | {{tt|disjunction&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/disjunction | {{tt|disjunction_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/iterator/distance | {{tt|distance&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|div()}}]] &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|div_t}}]] &lt;br/&gt;
[[cpp/utility/functional/divides | {{tt|divides&lt;&gt;}}]] &lt;br/&gt;
[[cpp/error/domain_error | {{tt|domain_error}}]] &lt;br/&gt;
[[cpp/numeric/math | {{tt|double_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/pointer_cast | {{tt|dynamic_pointer_cast&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;

=E=
[[cpp/numeric/special_math/ellint_1 | {{tt|ellint_1()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_1 | {{tt|ellint_1f()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_1 | {{tt|ellint_1l()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_2 | {{tt|ellint_2()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_2 | {{tt|ellint_2f()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_2 | {{tt|ellint_2l()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_3 | {{tt|ellint_3()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_3 | {{tt|ellint_3f()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/ellint_3 | {{tt|ellint_3l()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/iterator/empty | {{tt|empty&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/enable_if | {{tt|enable_if&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/enable_if | {{tt|enable_if_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/memory/enable_shared_from_this | {{tt|enable_shared_from_this&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/end | {{tt|end&lt;&gt;()}}]] {{mark since c++11}} (iterator) &lt;br/&gt;
[[cpp/io/manip/endl | {{tt|endl()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/ends | {{tt|ends()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/equal | {{tt|equal()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/equal_range | {{tt|equal_range()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/equal_to | {{tt|equal_to&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/erf | {{tt|erf()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/erfc | {{tt|erfc()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/errc | {{tt|errc}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/error_category | {{tt|error_category}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/error_code | {{tt|error_code}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/error_condition | {{tt|error_condition}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|exa}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/exception | {{tt|exception}}]] &lt;br/&gt;
[[cpp/error/exception_ptr | {{tt|exception_ptr}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/exchange | {{tt|exchange&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/algorithm/exclusive_scan | {{tt|exclusive_scan()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/exp | {{tt|exp()}}]] &lt;br/&gt;
[[cpp/numeric/complex/exp | {{tt|exp&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/exp | {{tt|exp&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/exp2 | {{tt|exp2()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/special_math/expint | {{tt|expint()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/expint | {{tt|expintf()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/expint | {{tt|expintl()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/expm1 | {{tt|expm1()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/exponential_distribution | {{tt|exponential_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/extent | {{tt|extent&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/extent | {{tt|extent_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/random/extreme_value_distribution | {{tt|extreme_value_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;

=F=
[[cpp/numeric/math/fabs | {{tt|fabs()}}]] (float) &lt;br/&gt;
[[cpp/types/integral_constant | {{tt|false_type}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fdim | {{tt|fdim()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/fenv/FE_round | {{tt|FE_DOWNWARD}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|femto}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/fenv/feround | {{tt|fegetround()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/fenv/feround | {{tt|fesetround()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/fenv/FE_round | {{tt|FE_TONEAREST}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/fenv/FE_round | {{tt|FE_TOWARDZERO}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/fenv/FE_round | {{tt|FE_UPWARD}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io | {{tt|filebuf}}]] &lt;br/&gt;
&amp;#x25B6; [[cpp/symbol_index/filesystem | {{tt|filesystem}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/fill | {{tt|fill()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/fill_n | {{tt|fill_n()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/find | {{tt|find()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/find_end | {{tt|find_end()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/find_first_of | {{tt|find_first_of()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/find_if | {{tt|find_if()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/find_if_not | {{tt|find_if_not()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/random/fisher_f_distribution | {{tt|fisher_f_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/fixed | {{tt|fixed()}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_denorm_style | {{tt|float_denorm_style}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_round_style | {{tt|float_round_style}}]] &lt;br/&gt;
[[cpp/numeric/math/floor | {{tt|floor()}}]] &lt;br/&gt;
[[cpp/io/manip/flush | {{tt|flush()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/fma | {{tt|fma()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fmax | {{tt|fmax()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fmin | {{tt|fmin()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fmod | {{tt|fmod()}}]] &lt;br/&gt;
[[cpp/numeric/math | {{tt|float_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/for_each | {{tt|for_each()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/for_each_n | {{tt|for_each_n()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/forward | {{tt|forward&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple/forward_as_tuple | {{tt|forward_as_tuple&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/iterator_tags | {{tt|forward_iterator_tag}}]] &lt;br/&gt;
[[cpp/container/forward_list | {{tt|forward_list&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fpclassify | {{tt|fpclassify()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fma | {{tt|FP_FAST_FMA}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fma | {{tt|FP_FAST_FMAF}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/fma | {{tt|FP_FAST_FMAL}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/FP_categories | {{tt|FP_INFINITE}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/FP_categories | {{tt|FP_NAN}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/FP_categories | {{tt|FP_NORMAL}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/fpos | {{tt|fpos&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/FP_categories | {{tt|FP_SUBNORMAL}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/FP_categories | {{tt|FP_ZERO}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/frexp | {{tt|frexp()}}]] &lt;br/&gt;
[[cpp/iterator/front_inserter | {{tt|front_inserter&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/iterator/front_insert_iterator | {{tt|front_insert_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io | {{tt|fstream}}]] &lt;br/&gt;
[[cpp/utility/functional/function | {{tt|function&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/future | {{tt|future&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/future_category | {{tt|future_category()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/future_errc | {{tt|future_errc}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/future_error | {{tt|future_error}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/future_status | {{tt|future_status}}]] {{mark since c++11}} &lt;br/&gt;

=G=
[[cpp/numeric/random/gamma_distribution | {{tt|gamma_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/gcd | {{tt|gcd&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/generate | {{tt|generate()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/random/generate_canonical | {{tt|generate_canonical&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/codecvt_mode | {{tt|generate_header}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/generate_n | {{tt|generate_n()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/error/generic_category | {{tt|generic_category()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/geometric_distribution | {{tt|geometric_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/array/get | {{tt|get&lt;&gt;()}}]] (std::array) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/pair/get | {{tt|get&lt;&gt;()}}]] (std::pair) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple/get | {{tt|get&lt;&gt;()}}]] (std::tuple) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/variant/get | {{tt|get&lt;&gt;()}}]] (std::variant) {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/shared_ptr/get_deleter | {{tt|get_deleter&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/variant/get_if | {{tt|get_if&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io/manip/get_money | {{tt|get_money()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/new/get_new_handler | {{tt|get_new_handler()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/gc/get_pointer_safety | {{tt|get_pointer_safety()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/get_terminate | {{tt|get_terminate()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/get_time | {{tt|get_time()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|giga}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/greater | {{tt|greater&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/greater_equal | {{tt|greater_equal&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/valarray/gslice | {{tt|gslice}}]] &lt;br/&gt;
[[cpp/numeric/valarray/gslice_array | {{tt|gslice_array&lt;&gt;}}]] &lt;br/&gt;

=H=
[[cpp/thread/hardware_destructive_interference_size | {{tt|hardware_constructive_interference_size}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/hardware_destructive_interference_size | {{tt|hardware_destructive_interference_size}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/has_facet | {{tt|has_facet&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/utility/hash | {{tt|hash&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/has_unique_object_representations | {{tt|has_unique_object_representations&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/has_unique_object_representations | {{tt|has_unique_object_representations_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/has_virtual_destructor | {{tt|has_virtual_destructor&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/has_virtual_destructor | {{tt|has_virtual_destructor_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|hecto}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/special_math/hermite | {{tt|hermite()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/hermite | {{tt|hermitef()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/hermite | {{tt|hermitel()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io/manip/hex | {{tt|hex()}}]] &lt;br/&gt;
[[cpp/io/manip/fixed | {{tt|hexfloat()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/variant/holds_alternative | {{tt|holds_alternative&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/HUGE_VAL | {{tt|HUGE_VAL}}]] &lt;br/&gt;
[[cpp/numeric/math/HUGE_VAL | {{tt|HUGE_VALF}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/HUGE_VAL | {{tt|HUGE_VALL}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/hypot | {{tt|hypot()}}]] {{mark since c++11}} &lt;br/&gt;

=I=
[[cpp/io | {{tt|ifstream}}]] &lt;br/&gt;
[[cpp/utility/tuple/ignore | {{tt|ignore}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/ilogb | {{tt|ilogb()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/complex/imag2 | {{tt|imag&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/numeric/math/abs | {{tt|imaxabs()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|imaxdiv()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|imaxdiv_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/includes | {{tt|includes()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/inclusive_scan | {{tt|inclusive_scan()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/random/independent_bits_engine | {{tt|independent_bits_engine&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/valarray/indirect_array | {{tt|indirect_array&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/INFINITY | {{tt|INFINITY}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/initializer_list | {{tt|initializer_list&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/inner_product | {{tt|inner_product()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/in_place | {{tt|in_place}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/in_place | {{tt|in_place_index}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/in_place | {{tt|in_place_index_t}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/in_place | {{tt|in_place_t}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/inplace_merge | {{tt|inplace_merge()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/in_place | {{tt|in_place_type}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/in_place | {{tt|in_place_type_t}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/iterator/iterator_tags | {{tt|input_iterator_tag}}]] &lt;br/&gt;
[[cpp/iterator/inserter | {{tt|inserter&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/iterator/insert_iterator | {{tt|insert_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/integer_sequence | {{tt|integer_sequence&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/integral_constant | {{tt|integral_constant&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/left | {{tt|internal()}}]] &lt;br/&gt;
[[cpp/error/invalid_argument | {{tt|invalid_argument}}]] &lt;br/&gt;
[[cpp/utility/functional/invoke | {{tt|invoke&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/result_of | {{tt|invoke_result&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/result_of | {{tt|invoke_result_t&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io | {{tt|ios}}]] &lt;br/&gt;
[[cpp/io/io_errc | {{tt|io_errc}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/ios_base | {{tt|ios_base}}]] &lt;br/&gt;
[[cpp/io | {{tt|iostream}}]] &lt;br/&gt;
[[cpp/io/iostream_category | {{tt|iostream_category}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/iota | {{tt|iota()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_abstract | {{tt|is_abstract&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_abstract | {{tt|is_abstract_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_aggregate | {{tt|is_aggregate&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_aggregate | {{tt|is_aggregate_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/isalnum | {{tt|isalnum&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/locale/isalpha | {{tt|isalpha&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/types/is_arithmetic | {{tt|is_arithmetic&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_arithmetic | {{tt|is_arithmetic_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_array | {{tt|is_array&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_array | {{tt|is_array_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_assignable | {{tt|is_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_assignable | {{tt|is_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_base_of | {{tt|is_base_of&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_base_of | {{tt|is_base_of_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/functional/is_bind_expression | {{tt|is_bind_expression&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/is_bind_expression | {{tt|is_bind_expression_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/isblank | {{tt|isblank&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_class | {{tt|is_class&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_class | {{tt|is_class_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/iscntrl | {{tt|iscntrl&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/types/is_compound | {{tt|is_compound&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_compound | {{tt|is_compound_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_const | {{tt|is_const&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_constructible | {{tt|is_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_constructible | {{tt|is_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_const | {{tt|is_const_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_convertible | {{tt|is_convertible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_convertible | {{tt|is_convertible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_copy_assignable | {{tt|is_copy_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_copy_assignable | {{tt|is_copy_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_copy_constructible | {{tt|is_copy_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_copy_constructible | {{tt|is_copy_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_default_constructible | {{tt|is_default_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_default_constructible | {{tt|is_default_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_destructible | {{tt|is_destructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_destructible | {{tt|is_destructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/isdigit | {{tt|isdigit&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/types/is_empty | {{tt|is_empty&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_empty | {{tt|is_empty_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_enum | {{tt|is_enum&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_enum | {{tt|is_enum_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/error/error_code/is_error_code_enum | {{tt|is_error_code_enum()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/error_condition/is_error_condition_enum | {{tt|is_error_condition_enum}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/error_condition/is_error_condition_enum | {{tt|is_error_condition_enum_v}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/is_execution_policy | {{tt|is_execution_policy&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/is_execution_policy | {{tt|is_execution_policy_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_final | {{tt|is_final&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/is_final | {{tt|is_final_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/isfinite | {{tt|isfinite()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_floating_point | {{tt|is_floating_point&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_floating_point | {{tt|is_floating_point_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_function | {{tt|is_function&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_function | {{tt|is_function_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_fundamental | {{tt|is_fundamental&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_fundamental | {{tt|is_fundamental_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/isgraph | {{tt|isgraph&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/numeric/math/isgreater | {{tt|isgreater()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/isgreaterequal | {{tt|isgreaterequal()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/is_heap | {{tt|is_heap()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/is_heap_until | {{tt|is_heap_until()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/isinf | {{tt|isinf()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_integral | {{tt|is_integral&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_integral | {{tt|is_integral_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_invocable&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_invocable_r&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_invocable_r_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_invocable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/isless | {{tt|isless()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/islessequal | {{tt|islessequal()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/islessgreater | {{tt|islessgreater()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/islower | {{tt|islower&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/types/is_lvalue_reference | {{tt|is_lvalue_reference&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_lvalue_reference | {{tt|is_lvalue_reference_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_member_function_pointer | {{tt|is_member_function_pointer&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_member_function_pointer | {{tt|is_member_function_pointer_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_member_object_pointer | {{tt|is_member_object_pointer&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_member_object_pointer | {{tt|is_member_object_pointer_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_member_pointer | {{tt|is_member_pointer&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_member_pointer | {{tt|is_member_pointer_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_move_assignable | {{tt|is_move_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_move_assignable | {{tt|is_move_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_move_constructible | {{tt|is_move_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_move_constructible | {{tt|is_move_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/isnan | {{tt|isnan()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/isnormal | {{tt|isnormal()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_assignable | {{tt|is_nothrow_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_assignable | {{tt|is_nothrow_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_constructible | {{tt|is_nothrow_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_constructible | {{tt|is_nothrow_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_copy_assignable | {{tt|is_nothrow_copy_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_copy_assignable | {{tt|is_nothrow_copy_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_copy_constructible | {{tt|is_nothrow_copy_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_copy_constructible | {{tt|is_nothrow_copy_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_default_constructible | {{tt|is_nothrow_default_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_default_constructible | {{tt|is_nothrow_default_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_destructible | {{tt|is_nothrow_destructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_destructible | {{tt|is_nothrow_destructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_nothrow_invocable&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_nothrow_invocable_r&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_nothrow_invocable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_invocable | {{tt|is_nothrow_invocable_r_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_move_assignable | {{tt|is_nothrow_move_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_move_assignable | {{tt|is_nothrow_move_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_move_constructible | {{tt|is_nothrow_move_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_move_constructible | {{tt|is_nothrow_move_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_nothrow_swappable&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_nothrow_swappable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_nothrow_swappable_with&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_nothrow_swappable_with_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_null_pointer | {{tt|is_null_pointer&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_null_pointer | {{tt|is_null_pointer_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_object | {{tt|is_object&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_object | {{tt|is_object_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/is_partitioned | {{tt|is_partitioned()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/is_permutation | {{tt|is_permutation()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/is_placeholder | {{tt|is_placeholder&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/is_placeholder | {{tt|is_placeholder_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_pod | {{tt|is_pod&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_pod | {{tt|is_pod_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_pointer | {{tt|is_pointer&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_pointer | {{tt|is_pointer_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_polymorphic | {{tt|is_polymorphic&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_polymorphic | {{tt|is_polymorphic_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/isprint | {{tt|isprint&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/locale/ispunct | {{tt|ispunct&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/types/is_reference | {{tt|is_reference&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_reference | {{tt|is_reference_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_rvalue_reference | {{tt|is_rvalue_reference&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_rvalue_reference | {{tt|is_rvalue_reference_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_same | {{tt|is_same&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_same | {{tt|is_same_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_scalar | {{tt|is_scalar&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_scalar | {{tt|is_scalar_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_signed | {{tt|is_signed&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_signed | {{tt|is_signed_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/is_sorted | {{tt|is_sorted()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/is_sorted_until | {{tt|is_sorted_until()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/isspace | {{tt|isspace&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/types/is_standard_layout | {{tt|is_standard_layout&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_standard_layout | {{tt|is_standard_layout_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_swappable&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_swappable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_swappable_with&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_swappable | {{tt|is_swappable_with_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io | {{tt|istream}}]] &lt;br/&gt;
[[cpp/iterator/istreambuf_iterator | {{tt|istreambuf_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/iterator/istream_iterator | {{tt|istream_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io | {{tt|istringstream}}]] &lt;br/&gt;
[[cpp/types/is_trivial | {{tt|is_trivial&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_assignable | {{tt|is_trivially_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_assignable | {{tt|is_trivially_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_constructible | {{tt|is_trivially_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_constructible | {{tt|is_trivially_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_trivially_copyable | {{tt|is_trivially_copyable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_trivially_copyable | {{tt|is_trivially_copyable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_copy_assignable | {{tt|is_trivially_copy_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_copy_assignable | {{tt|is_trivially_copy_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_copy_constructible | {{tt|is_trivially_copy_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_copy_constructible | {{tt|is_trivially_copy_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_default_constructible | {{tt|is_trivially_default_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_default_constructible | {{tt|is_trivially_default_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_destructible | {{tt|is_trivially_destructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_destructible | {{tt|is_trivially_destructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_move_assignable | {{tt|is_trivially_move_assignable&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_move_assignable | {{tt|is_trivially_move_assignable_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_move_constructible | {{tt|is_trivially_move_constructible&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_move_constructible | {{tt|is_trivially_move_constructible_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_trivial | {{tt|is_trivial_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_union | {{tt|is_union&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_union | {{tt|is_union_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/isunordered | {{tt|isunordered()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_unsigned | {{tt|is_unsigned&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_unsigned | {{tt|is_unsigned_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/isupper | {{tt|isupper&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/types/is_void | {{tt|is_void&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_void | {{tt|is_void_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/is_volatile | {{tt|is_volatile&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/is_volatile | {{tt|is_volatile_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/isxdigit | {{tt|isxdigit&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/iterator/iterator | {{tt|iterator&lt;&gt;}}]] {{mark|deprecated in C++17}} &lt;br/&gt;
[[cpp/iterator/iterator_traits | {{tt|iterator_traits&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/iter_swap | {{tt|iter_swap()&lt;&gt;}}]] &lt;br/&gt;

=J=

=K=
[[cpp/atomic/kill_dependency | {{tt|kill_dependency&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|kilo}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|knuth_b}}]] {{mark since c++11}} &lt;br/&gt;

=L=
[[cpp/numeric/math/abs | {{tt|labs()}}]] &lt;br/&gt;
[[cpp/numeric/special_math/laguerre | {{tt|laguerre()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/laguerre | {{tt|laguerref()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/laguerre | {{tt|laguerrel()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/thread/launch | {{tt|launch}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/launder | {{tt|launder&lt;&gt;()}}]]  {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/LC_categories | {{tt|LC_ALL}}]] &lt;br/&gt;
[[cpp/locale/LC_categories | {{tt|LC_COLLATE}}]] &lt;br/&gt;
[[cpp/locale/LC_categories | {{tt|LC_CTYPE}}]] &lt;br/&gt;
[[cpp/numeric/lcm | {{tt|lcm&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/LC_categories | {{tt|LC_MONETARY}}]] &lt;br/&gt;
[[cpp/locale/LC_categories | {{tt|LC_NUMERIC}}]] &lt;br/&gt;
[[cpp/locale/lconv | {{tt|lconv}}]] &lt;br/&gt;
[[cpp/locale/LC_categories | {{tt|LC_TIME}}]] &lt;br/&gt;
[[cpp/numeric/math/ldexp | {{tt|ldexp()}}]] &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|ldiv()}}]] &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|ldiv_t}}]] &lt;br/&gt;
[[cpp/io/manip/left | {{tt|left()}}]] &lt;br/&gt;
[[cpp/numeric/special_math/legendre | {{tt|legendre()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/legendre | {{tt|legendref()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/legendre | {{tt|legendrel()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/error/length_error | {{tt|length_error}}]] &lt;br/&gt;
[[cpp/utility/functional/less | {{tt|less&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/less_equal | {{tt|less_equal&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/lexicographical_compare | {{tt|lexicographical_compare()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/lgamma | {{tt|lgamma()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/linear_congruential_engine | {{tt|linear_congruential_engine&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/list | {{tt|list&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/codecvt_mode | {{tt|little_endian}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/abs | {{tt|llabs()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|lldiv()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/div | {{tt|lldiv_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/rint | {{tt|llrint()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/round | {{tt|llround()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/locale | {{tt|locale}}]] &lt;br/&gt;
[[cpp/locale/localeconv | {{tt|localeconv()}}]] &lt;br/&gt;
[[cpp/thread/lock | {{tt|lock&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/lock_guard | {{tt|lock_guard&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/log | {{tt|log()}}]] &lt;br/&gt;
[[cpp/numeric/complex/log | {{tt|log&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/log | {{tt|log&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/log10 | {{tt|log10()}}]] &lt;br/&gt;
[[cpp/numeric/complex/log10 | {{tt|log10&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/log10 | {{tt|log10&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/logb | {{tt|logb()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/log1p | {{tt|log1p()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/log2 | {{tt|log2()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/logical_and | {{tt|logical_and&lt;&gt;}}]] &lt;br/&gt;
[[cpp/error/logic_error | {{tt|logic_error}}]] &lt;br/&gt;
[[cpp/numeric/random/lognormal_distribution | {{tt|lognormal_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/logical_not | {{tt|logical_not&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/logical_or | {{tt|logical_or&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/lower_bound | {{tt|lower_bound()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/rint | {{tt|lrint()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/round | {{tt|lround()}}]] {{mark since c++11}} &lt;br/&gt;

=M=
[[cpp/utility/any/make_any | {{tt|make_any&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/error/errc/make_error_code | {{tt|make_error_code( errc)}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/io_errc/make_error_code | {{tt|make_error_code( io_errc)}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/errc/make_error_condition | {{tt|make_error_condition( errc)}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/io_errc/make_error_condition | {{tt|make_error_condition( io_errc)}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/make_exception_ptr | {{tt|make_exception_ptr&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/make_from_tuple | {{tt|make_from_tuple&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/make_heap | {{tt|make_heap()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/iterator/make_move_iterator | {{tt|make_move_iterator&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/optional/make_optional | {{tt|make_optional&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/pair/make_pair | {{tt|make_pair&lt;&gt;}}]] &lt;br/&gt;
[[cpp/iterator/make_reverse_iterator | {{tt|make_reverse_iterator&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/memory/shared_ptr/make_shared | {{tt|make_shared&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/make_signed | {{tt|make_signed&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/make_signed | {{tt|make_signed_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/utility/tuple/make_tuple | {{tt|make_tuple&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/unique_ptr/make_unique | {{tt|make_unique&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/make_unsigned | {{tt|make_unsigned&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/make_unsigned | {{tt|make_unsigned_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/container/map | {{tt|map&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/valarray/mask_array | {{tt|mask_array&lt;&gt;}}]] &lt;br/&gt;
[[cpp/regex/match_results | {{tt|match_results&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/math_errhandling | {{tt|MATH_ERREXCEPT}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/math_errhandling | {{tt|MATH_ERRNO}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/math_errhandling | {{tt|math_errhandling}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/max | {{tt|max()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/types/max_align_t | {{tt|max_align_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/max_element | {{tt|max_element()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|mega}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/mem_fn | {{tt|mem_fn&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/atomic/memory_order | {{tt|memory_order}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/memory_resource | {{tt|memory_resource}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/merge | {{tt|merge()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/random/mersenne_twister_engine | {{tt|mersenne_twister_engine&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/messages | {{tt|messages&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/messages_base | {{tt|messages_base}}]] &lt;br/&gt;
[[cpp/locale/messages_byname | {{tt|messages_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|micro}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|milli}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/min | {{tt|min()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/min_element | {{tt|min_element()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/minmax | {{tt|minmax()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/minmax_element | {{tt|minmax_element()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|minstd_rand}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|minstd_rand0}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/minus | {{tt|minus&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/mismatch | {{tt|mismatch()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/modf | {{tt|modf()}}]] &lt;br/&gt;
[[cpp/utility/functional/modulus | {{tt|modulus&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/money_base | {{tt|money_base}}]] &lt;br/&gt;
[[cpp/locale/money_get | {{tt|money_get&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/moneypunct | {{tt|moneypunct&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/moneypunct_byname | {{tt|moneypunct_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/money_put | {{tt|money_put&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/variant/monostate | {{tt|monostate}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/move | {{tt|move()&lt;&gt;}}]] (algorithm) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/move | {{tt|move()&lt;&gt;}}]] (utility) {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/move_backward | {{tt|move_backward()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/move_if_noexcept | {{tt|move_if_noexcept&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/move_iterator | {{tt|move_iterator&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|mt19937}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|mt19937_64}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/multimap | {{tt|multimap&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/multiplies | {{tt|multiplies&lt;&gt;}}]] &lt;br/&gt;
[[cpp/container/multiset | {{tt|multiset&lt;&gt;}}]] &lt;br/&gt;
[[cpp/thread/mutex | {{tt|mutex}}]] {{mark since c++11}} &lt;br/&gt;

=N=
[[cpp/numeric/math/NAN | {{tt|NAN}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/nan | {{tt|nan()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/nan | {{tt|nanf()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/nan | {{tt|nanl()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|nano}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/nearbyint | {{tt|nearbyint()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/negate | {{tt|negate&lt;&gt;}}]] &lt;br/&gt;
[[cpp/types/negation | {{tt|negation&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/negation | {{tt|negation_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/random/negative_binomial_distribution | {{tt|negative_binomial_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/nested_exception | {{tt|nested_exception}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/new/new_handler | {{tt|new_handler}}]] &lt;br/&gt;
[[cpp/iterator/next | {{tt|next&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/nextafter | {{tt|nextafter()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/next_permutation | {{tt|next_permutation()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/nextafter | {{tt|nexttoward()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/boolalpha | {{tt|noboolalpha()}}]] &lt;br/&gt;
[[cpp/algorithm/all_any_none_of | {{tt|none_of()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/complex/norm | {{tt|norm&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/numeric/random/normal_distribution | {{tt|normal_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/showbase | {{tt|noshowbase()}}]] &lt;br/&gt;
[[cpp/io/manip/showpoint | {{tt|noshowpoint()}}]] &lt;br/&gt;
[[cpp/io/manip/showpos | {{tt|noshowpos()}}]] &lt;br/&gt;
[[cpp/io/manip/skipws | {{tt|noskipws()}}]] &lt;br/&gt;
[[cpp/utility/functional/not_equal_to | {{tt|not_equal_to&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/functional/not_fn | {{tt|not_fn&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/new/nothrow | {{tt|nothrow}}]] &lt;br/&gt;
[[cpp/memory/new/nothrow_t | {{tt|nothrow_t}}]] &lt;br/&gt;
[[cpp/thread/notify_all_at_thread_exit | {{tt|notify_all_at_thread_exit()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/unitbuf | {{tt|nounitbuf()}}]] &lt;br/&gt;
[[cpp/io/manip/uppercase | {{tt|nouppercase()}}]] &lt;br/&gt;
[[cpp/algorithm/nth_element | {{tt|nth_element()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/optional/nullopt | {{tt|nullopt}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/optional/nullopt_t | {{tt|nullopt_t}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/nullptr_t | {{tt|nullptr_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/numeric_limits | {{tt|numeric_limits&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/num_get | {{tt|num_get&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/numpunct | {{tt|numpunct&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/numpunct_byname | {{tt|numpunct_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/num_put | {{tt|num_put&lt;&gt;}}]] &lt;br/&gt;

=O=
[[cpp/io/manip/hex | {{tt|oct()}}]] &lt;br/&gt;
[[cpp/thread/once_flag | {{tt|once_flag}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io | {{tt|ofstream}}]] &lt;br/&gt;
[[cpp/utility/optional | {{tt|optional&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io | {{tt|ostream}}]] &lt;br/&gt;
[[cpp/iterator/ostreambuf_iterator | {{tt|ostreambuf_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/iterator/ostream_iterator | {{tt|ostream_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io | {{tt|ostringstream}}]] &lt;br/&gt;
[[cpp/error/out_of_range | {{tt|out_of_range}}]] &lt;br/&gt;
[[cpp/iterator/iterator_tags | {{tt|output_iterator_tag}}]] &lt;br/&gt;
[[cpp/error/overflow_error | {{tt|overflow_error}}]] &lt;br/&gt;
[[cpp/memory/owner_less | {{tt|owner_less&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;

=P=
[[cpp/thread/packaged_task | {{tt|packaged_task&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/pair | {{tt|pair&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/partial_sort | {{tt|partial_sort()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/partial_sort_copy | {{tt|partial_sort_copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/partial_sum | {{tt|partial_sum()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/partition | {{tt|partition()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/partition_copy | {{tt|partition_copy()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/partition_point | {{tt|partition_point()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|peta}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|pico}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/piecewise_constant_distribution | {{tt|piecewise_constant_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/piecewise_construct | {{tt|piecewise_construct}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/piecewise_construct_t | {{tt|piecewise_construct_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/piecewise_linear_distribution | {{tt|piecewise_linear_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
&amp;#x25B6; [[cpp/symbol_index/placeholders | {{tt|placeholders}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/plus | {{tt|plus&lt;&gt;}}]] &lt;br/&gt;
&amp;#x25B6; [[cpp/symbol_index/pmr | {{tt|pmr}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/gc/pointer_safety | {{tt|pointer_safety}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/pointer_traits | {{tt|pointer_traits&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/poisson_distribution | {{tt|poisson_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/polymorphic_allocator | {{tt|polymorphic_allocator&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/complex/polar | {{tt|polar&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/algorithm/pop_heap | {{tt|pop_heap()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/pow | {{tt|pow()}}]] &lt;br/&gt;
[[cpp/numeric/complex/pow | {{tt|pow&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/pow | {{tt|pow&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/iterator/prev | {{tt|prev&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/prev_permutation | {{tt|prev_permutation()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/container/priority_queue | {{tt|priority_queue&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/complex/proj | {{tt|proj&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/promise | {{tt|promise&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/ptrdiff_t | {{tt|ptrdiff_t}}]] &lt;br/&gt;
[[cpp/algorithm/push_heap | {{tt|push_heap()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/put_money | {{tt|put_money()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/put_time | {{tt|put_time()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;

=Q=
[[cpp/container/queue | {{tt|queue&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/quoted | {{tt|quoted()&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;

=R=
[[cpp/iterator/iterator_tags | {{tt|random_access_iterator_tag}}]] &lt;br/&gt;
[[cpp/numeric/random/random_device | {{tt|random_device}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/random_shuffle | {{tt|random_shuffle()&lt;&gt;}}]] {{mark until c++17}} &lt;br/&gt;
[[cpp/error/range_error | {{tt|range_error}}]] &lt;br/&gt;
[[cpp/numeric/random | {{tt|ranlux24}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|ranlux24_base}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|ranlux48}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random | {{tt|ranlux48_base}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/rank | {{tt|rank&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/rank | {{tt|rank_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|ratio}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_add | {{tt|ratio_add&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_divide | {{tt|ratio_divide&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_equal | {{tt|ratio_equal&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_equal | {{tt|ratio_equal_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_greater | {{tt|ratio_greater&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_greater_equal | {{tt|ratio_greater_equal&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_greater_equal | {{tt|ratio_greater_equal_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_greater | {{tt|ratio_greater_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_less | {{tt|ratio_less&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_less_equal | {{tt|ratio_less_equal&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_less_equal | {{tt|ratio_less_equal_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_less | {{tt|ratio_less_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_multiply | {{tt|ratio_multiply&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_not_equal | {{tt|ratio_not_equal&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_not_equal | {{tt|ratio_not_equal_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/ratio/ratio_subtract | {{tt|ratio_subtract&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/rbegin | {{tt|rbegin&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/numeric/complex/real2 | {{tt|real&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/thread/recursive_mutex | {{tt|recursive_mutex}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/recursive_timed_mutex | {{tt|recursive_timed_mutex}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/reduce | {{tt|reduce()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/functional/ref | {{tt|ref&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/functional/reference_wrapper | {{tt|reference_wrapper&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/basic_regex | {{tt|regex}}]] {{mark since c++11}} &lt;br/&gt;
&amp;#x25B6; [[cpp/symbol_index/regex_constants | {{tt|regex_constants}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_error | {{tt|regex_error}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_iterator | {{tt|regex_iterator&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_match | {{tt|regex_match&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_replace | {{tt|regex_replace&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_search | {{tt|regex_search&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_token_iterator | {{tt|regex_token_iterator&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_traits | {{tt|regex_traits&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/pointer_cast | {{tt|reinterpret_pointer_cast&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/remainder | {{tt|remainder()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/remove | {{tt|remove()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/types/remove_all_extents | {{tt|remove_all_extents&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/remove_all_extents | {{tt|remove_all_extents_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/remove_cv | {{tt|remove_const&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/remove_cv | {{tt|remove_const_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/algorithm/remove_copy | {{tt|remove_copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/remove_copy | {{tt|remove_copy_if()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/types/remove_cv | {{tt|remove_cv&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/remove_cv | {{tt|remove_cv_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/remove_extent | {{tt|remove_extent&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/remove_extent | {{tt|remove_extent_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/remove_pointer | {{tt|remove_pointer&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/remove_pointer | {{tt|remove_pointer_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/remove_reference | {{tt|remove_reference&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/remove_reference | {{tt|remove_reference_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/types/remove_cv | {{tt|remove_volatile&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/remove_cv | {{tt|remove_volatile_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/numeric/math/remquo | {{tt|remquo()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/iterator/rend | {{tt|rend&lt;&gt;()}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/algorithm/replace | {{tt|replace()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/replace_copy | {{tt|replace_copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/replace_copy_if | {{tt|replace_copy_if()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/replace | {{tt|replace_if()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/resetiosflags | {{tt|resetiosflags()}}]] &lt;br/&gt;
[[cpp/types/result_of | {{tt|result_of&lt;&gt;}}]] {{mark since c++11}} {{mark|deprecated since C++17}} &lt;br/&gt;
[[cpp/types/result_of | {{tt|result_of_t&lt;&gt;}}]] {{mark since c++14}} {{mark|deprecated since C++17}} &lt;br/&gt;
[[cpp/error/rethrow_exception | {{tt|rethrow_exception}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/rethrow_if_nested | {{tt|rethrow_if_nested&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/reverse | {{tt|reverse()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/reverse_copy | {{tt|reverse_copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/iterator/reverse_iterator | {{tt|reverse_iterator&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/special_math/riemann_zeta | {{tt|riemann_zeta()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/riemann_zeta | {{tt|riemann_zetaf()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/riemann_zeta | {{tt|riemann_zetal()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io/manip/left | {{tt|right()}}]] &lt;br/&gt;
[[cpp/numeric/math/rint | {{tt|rint()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/rotate | {{tt|rotate()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/rotate_copy | {{tt|rotate_copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/math/round | {{tt|round()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/numeric_limits/float_round_style | {{tt|round_indeterminate}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_round_style | {{tt|round_to_nearest}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_round_style | {{tt|round_toward_infinity}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_round_style | {{tt|round_toward_neg_infinity}}]] &lt;br/&gt;
[[cpp/types/numeric_limits/float_round_style | {{tt|round_toward_zero}}]] &lt;br/&gt;
[[cpp/error/runtime_error | {{tt|runtime_error}}]] &lt;br/&gt;

=S=
[[cpp/algorithm/sample | {{tt|sample()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/scalbn | {{tt|scalbln()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/scalbn | {{tt|scalbn()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/fixed | {{tt|scientific()}}]] &lt;br/&gt;
[[cpp/memory/scoped_allocator_adaptor | {{tt|scoped_allocator_adaptor&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/search | {{tt|search()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/search_n | {{tt|search_n()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/random/seed_seq | {{tt|seed_seq}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/set | {{tt|set&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/setbase | {{tt|setbase()}}]] &lt;br/&gt;
[[cpp/algorithm/set_difference | {{tt|set_difference()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/setfill | {{tt|setfill()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/set_intersection | {{tt|set_intersection()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/setiosflags | {{tt|setiosflags()}}]] &lt;br/&gt;
[[cpp/locale/setlocale | {{tt|setlocale()}}]] &lt;br/&gt;
[[cpp/memory/new/set_new_handler | {{tt|set_new_handler()}}]] &lt;br/&gt;
[[cpp/io/manip/setprecision | {{tt|setprecision()}}]] &lt;br/&gt;
[[cpp/algorithm/set_symmetric_difference | {{tt|set_symmetric_difference()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/error/set_terminate | {{tt|set_terminate()}}]] &lt;br/&gt;
[[cpp/algorithm/set_union | {{tt|set_union()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/setw | {{tt|setw()}}]] &lt;br/&gt;
[[cpp/thread/shared_future | {{tt|shared_future&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/shared_lock | {{tt|shared_lock&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/thread/shared_mutex | {{tt|shared_mutex}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/shared_ptr | {{tt|shared_ptr&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/shared_timed_mutex | {{tt|shared_timed_mutex}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/io/manip/showbase | {{tt|showbase()}}]] &lt;br/&gt;
[[cpp/io/manip/showpoint | {{tt|showpoint()}}]] &lt;br/&gt;
[[cpp/io/manip/showpos | {{tt|showpos()}}]] &lt;br/&gt;
[[cpp/algorithm/random_shuffle | {{tt|shuffle()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/shuffle_order_engine | {{tt|shuffle_order_engine&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/signbit | {{tt|signbit()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/sin | {{tt|sin()}}]] &lt;br/&gt;
[[cpp/numeric/complex/sin | {{tt|sin&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/sin | {{tt|sin&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/sinh | {{tt|sinh()}}]] &lt;br/&gt;
[[cpp/numeric/complex/sinh | {{tt|sinh&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/sinh | {{tt|sinh&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/iterator/size | {{tt|size&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/size_t | {{tt|size_t}}]] &lt;br/&gt;
[[cpp/io/manip/skipws | {{tt|skipws()}}]] &lt;br/&gt;
[[cpp/numeric/valarray/slice | {{tt|slice}}]] &lt;br/&gt;
[[cpp/numeric/valarray/slice_array | {{tt|slice_array&lt;&gt;}}]] &lt;br/&gt;
[[cpp/regex/match_results | {{tt|smatch}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/sort | {{tt|sort()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/sort_heap | {{tt|sort_heap()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/numeric/special_math/sph_bessel | {{tt|sph_bessel()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_bessel | {{tt|sph_besself()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_bessel | {{tt|sph_bessell()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_legendre | {{tt|sph_legendre()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_legendre | {{tt|sph_legendref()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_legendre | {{tt|sph_legendrel()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_neumann | {{tt|sph_neumann()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_neumann | {{tt|sph_neumannf()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/special_math/sph_neumann | {{tt|sph_neumannl()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/math/sqrt | {{tt|sqrt()}}]] &lt;br/&gt;
[[cpp/numeric/complex/sqrt | {{tt|sqrt&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/sqrt | {{tt|sqrt&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/regex/regex_iterator | {{tt|sregex_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_token_iterator | {{tt|sregex_token_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/sub_match | {{tt|ssub_match}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/stable_partition | {{tt|stable_partition()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/stable_sort | {{tt|stable_sort()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/container/stack | {{tt|stack&lt;&gt;}}]] &lt;br/&gt;
[[cpp/language/static_assert | {{tt|static_assert()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/shared_ptr/pointer_cast | {{tt|static_pointer_cast&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io | {{tt|streambuf}}]] &lt;br/&gt;
[[cpp/io/streamoff | {{tt|streamoff}}]] &lt;br/&gt;
[[cpp/io/fpos | {{tt|streampos}}]] &lt;br/&gt;
[[cpp/io/streamsize | {{tt|streamsize}}]] &lt;br/&gt;
[[cpp/string/basic_string | {{tt|string}}]] &lt;br/&gt;
[[cpp/io | {{tt|stringbuf}}]] &lt;br/&gt;
[[cpp/io | {{tt|stringstream}}]] &lt;br/&gt;
[[cpp/string/basic_string_view | {{tt|string_view}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/numeric/random/student_t_distribution | {{tt|student_t_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/sub_match | {{tt|sub_match&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/subtract_with_carry_engine | {{tt|subtract_with_carry_engine&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/swap | {{tt|swap()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/swap_ranges | {{tt|swap_ranges()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/error/system_category | {{tt|system_category}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/system_error | {{tt|system_error}}]] {{mark since c++11}} &lt;br/&gt;

=T=
[[cpp/numeric/math/tan | {{tt|tan()}}]] &lt;br/&gt;
[[cpp/numeric/complex/tan | {{tt|tan&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/tan | {{tt|tan&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/math/tanh | {{tt|tanh()}}]] &lt;br/&gt;
[[cpp/numeric/complex/tanh | {{tt|tanh&lt;&gt;()}}]] (std::complex) &lt;br/&gt;
[[cpp/numeric/valarray/tanh | {{tt|tanh&lt;&gt;}}]] (std::valarray) &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|tera}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/terminate | {{tt|terminate()}}]] &lt;br/&gt;
[[cpp/error/terminate_handler | {{tt|terminate_handler}}]] &lt;br/&gt;
[[cpp/numeric/math/tgamma | {{tt|tgamma()}}]] {{mark since c++11}} &lt;br/&gt;
&amp;#x25B6; [[cpp/symbol_index/this_thread | {{tt|this_thread}}]] &lt;br/&gt;
[[cpp/thread/thread | {{tt|thread}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/throw_with_nested | {{tt|throw_with_nested&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple/tie | {{tt|tie&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/time_base | {{tt|time_base}}]] &lt;br/&gt;
[[cpp/thread/timed_mutex | {{tt|timed_mutex}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/locale/time_get | {{tt|time_get&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/time_get_byname | {{tt|time_get_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/time_put | {{tt|time_put&lt;&gt;}}]] &lt;br/&gt;
[[cpp/locale/time_put_byname | {{tt|time_put_byname&lt;&gt;}}]] &lt;br/&gt;
[[cpp/types/byte | {{tt|to_integer()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/locale/tolower | {{tt|tolower&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/locale/toupper | {{tt|toupper&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/algorithm/transform | {{tt|transform()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/transform_exclusive_scan | {{tt|transform_exclusive_scan()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/transform_inclusive_scan | {{tt|transform_inclusive_scan()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/transform_reduce | {{tt|transform_reduce()&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/integral_constant | {{tt|true_type}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/math/trunc | {{tt|trunc()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/try_lock | {{tt|try_lock&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/lock_tag | {{tt|try_to_lock}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/lock_tag_t | {{tt|try_to_lock_t}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple | {{tt|tuple&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple/tuple_cat | {{tt|tuple_cat&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/array/tuple_element | {{tt|tuple_element&lt;&gt;}}]] (std::array) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/pair/tuple_element | {{tt|tuple_element&lt;&gt;}}]] (std::pair) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple/tuple_element | {{tt|tuple_element&lt;&gt;}}]] (std::tuple) {{mark since c++11}} &lt;br/&gt;
[[cpp/container/array/tuple_size | {{tt|tuple_size&lt;&gt;()}}]] (std::array) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/pair/tuple_size | {{tt|tuple_size&lt;&gt;()}}]] (std::pair) {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple/tuple_size | {{tt|tuple_size&lt;&gt;()}}]] (std::tuple) {{mark since c++11}} &lt;br/&gt;
[[cpp/types/type_index | {{tt|type_index}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/type_info | {{tt|type_info}}]] &lt;br/&gt;

=U=
[[cpp/io/fpos | {{tt|u16streampos&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/string/basic_string | {{tt|u16string}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/string/basic_string_view | {{tt|u16string_view}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/io/fpos | {{tt|u32streampos&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/string/basic_string | {{tt|u32string}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/string/basic_string_view | {{tt|u32string_view}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/error/uncaught_exception | {{tt|uncaught_exceptions}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/gc/undeclare_no_pointers | {{tt|undeclare_no_pointers()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/gc/undeclare_reachable | {{tt|undeclare_reachable&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/error/underflow_error | {{tt|underflow_error}}]] &lt;br/&gt;
[[cpp/types/underlying_type | {{tt|underlying_type&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/types/underlying_type | {{tt|underlying_type_t&lt;&gt;}}]] {{mark since c++14}} &lt;br/&gt;
[[cpp/numeric/random/uniform_int_distribution | {{tt|uniform_int_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/uniform_real_distribution | {{tt|uniform_real_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/uninitialized_copy | {{tt|uninitialized_copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/memory/uninitialized_copy_n | {{tt|uninitialized_copy_n()&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/uninitialized_default_construct | {{tt|uninitialized_default_construct&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/uninitialized_default_construct_n | {{tt|uninitialized_default_construct_n&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/uninitialized_fill | {{tt|uninitialized_fill()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/memory/uninitialized_fill_n | {{tt|uninitialized_fill_n()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/memory/uninitialized_move | {{tt|uninitialized_move&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/uninitialized_move_n | {{tt|uninitialized_move_n&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/uninitialized_value_construct | {{tt|uninitialized_value_construct&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/uninitialized_value_construct_n | {{tt|uninitialized_value_construct_n&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/algorithm/unique | {{tt|unique()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/algorithm/unique_copy | {{tt|unique_copy()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/thread/unique_lock | {{tt|unique_lock&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/unique_ptr | {{tt|unique_ptr&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/manip/unitbuf | {{tt|unitbuf()}}]] &lt;br/&gt;
[[cpp/container/unordered_map | {{tt|unordered_map&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/unordered_multimap | {{tt|unordered_multimap&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/unordered_multiset | {{tt|unordered_multiset&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/container/unordered_set | {{tt|unordered_set&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/algorithm/upper_bound | {{tt|upper_bound()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/manip/uppercase | {{tt|uppercase()}}]] &lt;br/&gt;
[[cpp/locale/use_facet | {{tt|use_facet&lt;&gt;()}}]] &lt;br/&gt;
[[cpp/memory/uses_allocator | {{tt|uses_allocator&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/utility/tuple/uses_allocator | {{tt|uses_allocator&lt;&gt;}}]] (std::tuple) {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/uses_allocator | {{tt|uses_allocator_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=V=
[[cpp/numeric/valarray | {{tt|valarray&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/variant | {{tt|variant&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/variant/variant_alternative | {{tt|variant_alternative&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/variant/variant_alternative | {{tt|variant_alternative_t&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/variant/variant_npos | {{tt|variant_npos}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/variant/variant_size | {{tt|variant_size&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/utility/variant/variant_size | {{tt|variant_size_v&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/container/vector | {{tt|vector&lt;&gt;}}]] &lt;br/&gt;
[[cpp/utility/variant/visit | {{tt|visit&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/types/void_t | {{tt|void_t}}]] {{mark since c++17}} &lt;br/&gt;

=W=
[[cpp/locale/wbuffer_convert | {{tt|wbuffer_convert&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/cerr | {{tt|wcerr}}]] &lt;br/&gt;
[[cpp/io/cin | {{tt|wcin}}]] &lt;br/&gt;
[[cpp/io/clog | {{tt|wclog}}]] &lt;br/&gt;
[[cpp/regex/match_results | {{tt|wcmatch}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io/cout | {{tt|wcout}}]] &lt;br/&gt;
[[cpp/regex/regex_iterator | {{tt|wcregex_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_token_iterator | {{tt|wcregex_token_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/sub_match | {{tt|wcsub_match}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/memory/weak_ptr | {{tt|weak_ptr&lt;&gt;}}]]  {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/random/weibull_distribution | {{tt|weibull_distribution&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io | {{tt|wfilebuf}}]] &lt;br/&gt;
[[cpp/io | {{tt|wfstream}}]] &lt;br/&gt;
[[cpp/io | {{tt|wifstream}}]] &lt;br/&gt;
[[cpp/io | {{tt|wios}}]] &lt;br/&gt;
[[cpp/io | {{tt|wiostream}}]] &lt;br/&gt;
[[cpp/io | {{tt|wistream}}]] &lt;br/&gt;
[[cpp/io | {{tt|wistringstream}}]] &lt;br/&gt;
[[cpp/io | {{tt|wofstream}}]] &lt;br/&gt;
[[cpp/io | {{tt|wostream}}]] &lt;br/&gt;
[[cpp/io | {{tt|wstreambuf}}]] &lt;br/&gt;
[[cpp/io/manip/ws | {{tt|ws()&lt;&gt;}}]] &lt;br/&gt;
[[cpp/io/fpos | {{tt|wstreampos}}]] &lt;br/&gt;
[[cpp/io | {{tt|wostringstream}}]] &lt;br/&gt;
[[cpp/regex/basic_regex | {{tt|wregex}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_results | {{tt|wsmatch}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_iterator | {{tt|wsregex_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/regex_token_iterator | {{tt|wsregex_token_iterator}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/sub_match | {{tt|wssub_match}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/string/basic_string | {{tt|wstring}}]] &lt;br/&gt;
[[cpp/io | {{tt|wstringbuf}}]] &lt;br/&gt;
[[cpp/locale/wstring_convert | {{tt|wstring_convert&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/io | {{tt|wstringstream}}]] &lt;br/&gt;
[[cpp/string/basic_string_view | {{tt|wstring_view&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=X=

=Y=
[[cpp/numeric/ratio | {{tt|yocto}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|yotta}}]] {{mark since c++11}} &lt;br/&gt;

=Z=
[[cpp/numeric/ratio | {{tt|zepto}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/numeric/ratio | {{tt|zetta}}]] {{mark since c++11}} &lt;br/&gt;

[[zh:cpp/symbol_index]]</text>
      <sha1>jw5j5kepwacvz4qqc97hgldgosh9mx5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/symbol index/chrono</title>
    <ns>0</ns>
    <id>15693</id>
    <revision>
      <id>91029</id>
      <parentid>87985</parentid>
      <timestamp>2017-03-15T00:00:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{c|&quot; to &quot;{{tt|&quot;</comment>
      <text xml:space="preserve" bytes="2562">{{title|std::chrono Symbol Index}}
{{cpp/navbar}}


&lt;table class=&quot;plainlinks fmbox fmbox-system&quot; style=&quot;font-size: 0.8em; background-color:#ffffbb&quot;&gt;
&lt;tr&gt;
&lt;td class=&quot;mbox-image&quot;&gt;
  &lt;/td&gt;
&lt;td class=&quot;mbox-text&quot; style=&quot;&quot;&gt; This is work in progress, there may be inaccuracies &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

This page tries to list all the symbols that are available from the ''Standard Library'' in the namespace ''std::chrono:''. The symbols are written as follows:
&lt;ul&gt;
&lt;li&gt;Function names with ''()''.&lt;/li&gt;
&lt;li&gt;Templates with ''&lt;&gt;''.&lt;/li&gt;
&lt;/ul&gt;

==&lt;blockquote&gt;&lt;tt&gt;[[cpp/symbol_index/chrono#A| A]]  [[cpp/symbol_index/chrono#C| C]]  [[cpp/symbol_index/chrono#D| D]]  [[cpp/symbol_index/chrono#F| F]]  [[cpp/symbol_index/chrono#H| H]]  [[cpp/symbol_index/chrono#M| M]]  [[cpp/symbol_index/chrono#N| N]]  [[cpp/symbol_index/chrono#R| R]]  [[cpp/symbol_index/chrono#S| S]]  [[cpp/symbol_index/chrono#T| T]] &lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=A=
[[cpp/chrono/duration/abs | {{tt|abs&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;

=C=
[[cpp/chrono/duration/ceil | {{tt|ceil&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;

=D=
[[cpp/chrono/duration | {{tt|duration&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/duration/duration_cast | {{tt|duration_cast&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/duration_values | {{tt|duration_values&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;

=F=
[[cpp/chrono/duration/floor | {{tt|floor&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;

=H=
[[cpp/chrono/high_resolution_clock | {{tt|high_resolution_clock}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/duration | {{tt|hours}}]] {{mark since c++11}} &lt;br/&gt;

=M=
[[cpp/chrono/duration | {{tt|microseconds}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/duration | {{tt|milliseconds}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/duration | {{tt|minutes}}]] {{mark since c++11}} &lt;br/&gt;

=N=
[[cpp/chrono/duration | {{tt|nanoseconds}}]] {{mark since c++11}} &lt;br/&gt;

=R=
[[cpp/chrono/duration/round | {{tt|round&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;

=S=
[[cpp/chrono/duration | {{tt|seconds}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/steady_clock | {{tt|steady_clock}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/system_clock | {{tt|system_clock}}]] {{mark since c++11}} &lt;br/&gt;

=T=
[[cpp/chrono/time_point | {{tt|time_point&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/time_point/time_point_cast | {{tt|time_point_cast&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/treat_as_floating_point | {{tt|treat_as_floating_point&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/chrono/treat_as_floating_point | {{tt|treat_as_floating_point_v&lt;&gt;}}]] {{mark since c++11}} &lt;br/&gt;</text>
      <sha1>ceepblb7sw0bfly78ldjp43goy269ev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/symbol index/filesystem</title>
    <ns>0</ns>
    <id>15694</id>
    <revision>
      <id>91025</id>
      <parentid>87485</parentid>
      <timestamp>2017-03-14T23:58:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>{{c}} -&gt; {{tt}}</comment>
      <text xml:space="preserve" bytes="5354">{{title|std::filesystem Symbol Index}}
{{cpp/navbar}}


&lt;table class=&quot;plainlinks fmbox fmbox-system&quot; style=&quot;font-size: 0.8em; background-color:#ffffbb&quot;&gt;
&lt;tr&gt;
&lt;td class=&quot;mbox-image&quot;&gt;
  &lt;/td&gt;
&lt;td class=&quot;mbox-text&quot; style=&quot;&quot;&gt; This is work in progress, there may be inaccuracies &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

This page tries to list all the symbols that are available from the ''Standard Library'' in the namespace ''std::filesystem::''. The symbols are written as follows:
&lt;ul&gt;
&lt;li&gt;Function names with ''()''.&lt;/li&gt;
&lt;li&gt;Templates with ''&lt;&gt;''.&lt;/li&gt;
&lt;/ul&gt;

==&lt;blockquote&gt;&lt;tt&gt;[[cpp/symbol_index#A| A]]  [[cpp/symbol_index#C| C]]  [[cpp/symbol_index#D| D]]  [[cpp/symbol_index#E| E]]  [[cpp/symbol_index#F| F]]  [[cpp/symbol_index#H| H]]  [[cpp/symbol_index#I| I]]  [[cpp/symbol_index#L| L]]  [[cpp/symbol_index#P| P]]  [[cpp/symbol_index#R| R]]  [[cpp/symbol_index#S| S]]  [[cpp/symbol_index#T| T]]  [[cpp/symbol_index#U| U]]  [[cpp/symbol_index#W| W]] &lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=A=
[[cpp/filesystem/absolute | {{tt|absolute()}}]] {{mark since c++17}} &lt;br/&gt;

=C=
[[cpp/filesystem/canonical | {{tt|canonical()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/copy | {{tt|copy()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/copy_file | {{tt|copy_file()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/copy_options | {{tt|copy_options}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/copy_symlink | {{tt|copy_symlink()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/create_directory | {{tt|create_directory()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/create_symlink | {{tt|create_directory_symlink()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/create_directory | {{tt|create_directories()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/create_hard_link | {{tt|create_hard_link()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/create_symlink | {{tt|create_symlink()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/current_path | {{tt|current_path()}}]] {{mark since c++17}} &lt;br/&gt;

=D=
[[cpp/filesystem/directory_entry | {{tt|directory_entry}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/directory_iterator | {{tt|directory_iterator}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/directory_options | {{tt|directory_options}}]] {{mark since c++17}} &lt;br/&gt;

=E=
[[cpp/filesystem/equivalent | {{tt|equivalent()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/exists | {{tt|exists()}}]] {{mark since c++17}} &lt;br/&gt;

=F=
[[cpp/filesystem/file_size | {{tt|file_size()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/file_status | {{tt|file_status}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/filesystem_error | {{tt|filesystem_error}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/file_time_type | {{tt|file_time_type}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/file_type | {{tt|file_type}}]] {{mark since c++17}} &lt;br/&gt;

=H=
[[cpp/filesystem/hard_link_count | {{tt|hard_link_count()}}]] {{mark since c++17}} &lt;br/&gt;

=I=
[[cpp/filesystem/is_block_file | {{tt|is_block_file()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_character_file | {{tt|is_character_file()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_directory | {{tt|is_directory()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_empty | {{tt|is_empty()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_fifo | {{tt|is_fifo()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_other | {{tt|is_other()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_regular_file | {{tt|is_regular_file()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_socket | {{tt|is_socket()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/is_symlink | {{tt|is_symlink()}}]] {{mark since c++17}} &lt;br/&gt;

=L=
[[cpp/filesystem/last_write_time | {{tt|last_write_time()}}]] {{mark since c++17}} &lt;br/&gt;

=P=
[[cpp/filesystem/path | {{tt|path}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/permissions | {{tt|permissions()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/perms | {{tt|perms}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/relative | {{tt|proximate()}}]] {{mark since c++17}} &lt;br/&gt;

=R=
[[cpp/filesystem/read_symlink | {{tt|read_symlink()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/recursive_directory_iterator | {{tt|recursive_directory_iterator}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/relative | {{tt|relative()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/remove | {{tt|remove()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/remove | {{tt|remove_all()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/rename | {{tt|rename()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/resize_file | {{tt|resize_file()}}]] {{mark since c++17}} &lt;br/&gt;

=S=
[[cpp/filesystem/space | {{tt|space()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/space_info | {{tt|space_info}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/absolute | {{tt|system_complete()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/status | {{tt|status()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/status_known | {{tt|status_known()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/filesystem/status | {{tt|symlink_status()}}]] {{mark since c++17}} &lt;br/&gt;

=T=
[[cpp/filesystem/temp_directory_path | {{tt|temp_directory_path()}}]] {{mark since c++17}} &lt;br/&gt;

=U=
[[cpp/filesystem/path/u8path | {{tt|u8path&lt;&gt;()}}]] {{mark since c++17}} &lt;br/&gt;

=W=
[[cpp/filesystem/canonical | {{tt|weakly_canonical()}}]] {{mark since c++17}} &lt;br/&gt;</text>
      <sha1>c04yjq2m69infoccqfxt4yr48i5bva9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/symbol index/placeholders</title>
    <ns>0</ns>
    <id>15700</id>
    <revision>
      <id>91028</id>
      <parentid>87603</parentid>
      <timestamp>2017-03-15T00:00:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{c|&quot; to &quot;{{tt|&quot;</comment>
      <text xml:space="preserve" bytes="757">{{title|std::placeholders Symbol Index}}
{{cpp/navbar}}


&lt;table class=&quot;plainlinks fmbox fmbox-system&quot; style=&quot;font-size: 0.8em; background-color:#ffffbb&quot;&gt;
&lt;tr&gt;
&lt;td class=&quot;mbox-image&quot;&gt;
  &lt;/td&gt;
&lt;td class=&quot;mbox-text&quot; style=&quot;&quot;&gt; This is work in progress, there may be inaccuracies &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

This page tries to list all the symbols that are available from the ''Standard Library'' in the namespace ''std::placeholders:''. The symbols are written as follows:
&lt;ul&gt;
&lt;li&gt;Function names with ''()''.&lt;/li&gt;
&lt;li&gt;Templates with ''&lt;&gt;''.&lt;/li&gt;
&lt;/ul&gt;

==&lt;blockquote&gt;&lt;tt&gt;[[cpp/symbol_index/placeholders#_ (underline)| _]] &lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=_ (underline)=
[[cpp/utility/functional/placeholders | {{tt|_1, _2, ..., _N}}]] {{mark since c++11}} &lt;br/&gt;</text>
      <sha1>k5jbxv5g4nmncr0580p5kc1s7yecuqw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/symbol index/pmr</title>
    <ns>0</ns>
    <id>15715</id>
    <revision>
      <id>91027</id>
      <parentid>89054</parentid>
      <timestamp>2017-03-15T00:00:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{c|&quot; to &quot;{{tt|&quot;</comment>
      <text xml:space="preserve" bytes="3014">{{title|std::pmr Symbol Index}}
{{cpp/navbar}}

&lt;br/&gt;

This page tries to list all the symbols that are available from the ''Standard Library'' in the namespace ''std::pmr::''. The symbols are written as follows:
&lt;ul&gt;
&lt;li&gt;Function names with ''()''.&lt;/li&gt;
&lt;li&gt;Templates with ''&lt;&gt;''.&lt;/li&gt;
&lt;/ul&gt;

==&lt;blockquote&gt;&lt;tt&gt;[[cpp/symbol_index/pmr#B| B]]  [[cpp/symbol_index/pmr#D| D]]  [[cpp/symbol_index/pmr#F| F]]  [[cpp/symbol_index/pmr#G| G]]  [[cpp/symbol_index/pmr#L| L]]  [[cpp/symbol_index/pmr#M| M]]  [[cpp/symbol_index/pmr#N| N]]  [[cpp/symbol_index/pmr#P| P]]  [[cpp/symbol_index/pmr#S| S]]  [[cpp/symbol_index/pmr#U| U]]  [[cpp/symbol_index/pmr#V| V]]  [[cpp/symbol_index/pmr#W| W]] &lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=B=
[[cpp/string/basic_string | {{tt|basic_string&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=D=
[[cpp/container/deque | {{tt|deque&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=F=
[[cpp/container/forward_list | {{tt|forward_list&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=G=
[[cpp/memory/get_default_resource | {{tt|get_default_resource()}}]] {{mark since c++17}} &lt;br/&gt;

=L=
[[cpp/container/list | {{tt|list&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=M=
[[cpp/container/map | {{tt|map&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/memory_resource | {{tt|memory_resource}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/monotonic_buffer_resource | {{tt|monotonic_buffer_resource}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/container/multimap | {{tt|multimap&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/container/multiset | {{tt|multiset&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=N=
[[cpp/memory/new_delete_resource | {{tt|new_delete_resource()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/null_memory_resource | {{tt|null_memory_resource()}}]] {{mark since c++17}} &lt;br/&gt;

=P=
[[cpp/memory/polymorphic_allocator | {{tt|polymorphic_allocator&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/pool_options | {{tt|pool_options}}]] {{mark since c++17}} &lt;br/&gt;

=S=
[[cpp/container/set | {{tt|set&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/set_default_resource | {{tt|set_default_resource()}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/string/basic_string | {{tt|string}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/synchronized_pool_resource | {{tt|synchronized_pool_resource}}]] {{mark since c++17}} &lt;br/&gt;

=U=
[[cpp/string/basic_string | {{tt|u16string&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/string/basic_string | {{tt|u32string&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/container/unordered_map | {{tt|unordered_map&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/container/unordered_multimap | {{tt|unordered_multimap&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/container/unordered_multiset | {{tt|unordered_multiset&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/container/unordered_set | {{tt|unordered_set&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;
[[cpp/memory/unsynchronized_pool_resource | {{tt|unsynchronized_pool_resource}}]] {{mark since c++17}} &lt;br/&gt;

=V=
[[cpp/container/vector | {{tt|vector&lt;&gt;}}]] {{mark since c++17}} &lt;br/&gt;

=W=
[[cpp/string/basic_string | {{tt|wstring}}]] {{mark since c++17}} &lt;br/&gt;</text>
      <sha1>sy3xks3jk49qpbcf3miqx3aypcdu8ur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/symbol index/regex constants</title>
    <ns>0</ns>
    <id>15714</id>
    <revision>
      <id>91026</id>
      <parentid>87982</parentid>
      <timestamp>2017-03-15T00:00:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{c|&quot; to &quot;{{tt|&quot;</comment>
      <text xml:space="preserve" bytes="4144">{{title|std::regex_constants Symbol Index}}
{{cpp/navbar}}


&lt;table class=&quot;plainlinks fmbox fmbox-system&quot; style=&quot;font-size: 0.8em; background-color:#ffffbb&quot;&gt;
&lt;tr&gt;
&lt;td class=&quot;mbox-image&quot;&gt;
  &lt;/td&gt;
&lt;td class=&quot;mbox-text&quot; style=&quot;&quot;&gt; This is work in progress, there may be inaccuracies &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

This page tries to list all the symbols that are available from the ''Standard Library'' in the namespace ''std::regex_constants''. The symbols are written as follows:
&lt;ul&gt;
&lt;li&gt;Function names with ''()''.&lt;/li&gt;
&lt;li&gt;Templates with ''&lt;&gt;''.&lt;/li&gt;
&lt;/ul&gt;

==&lt;blockquote&gt;&lt;tt&gt;[[cpp/symbol_index/regex_constants#A| A]]  [[cpp/symbol_index/regex_constants#B| B]]  [[cpp/symbol_index/regex_constants#C| C]]  [[cpp/symbol_index/regex_constants#E| E]]  [[cpp/symbol_index/regex_constants#F| F]]  [[cpp/symbol_index/regex_constants#G| G]]  [[cpp/symbol_index/regex_constants#I| I]]  [[cpp/symbol_index/regex_constants#M| M]]  [[cpp/symbol_index/regex_constants#N| N]]  [[cpp/symbol_index/regex_constants#O| O]]  [[cpp/symbol_index/regex_constants#S| S]] &lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=A=
[[cpp/regex/syntax_option_type | {{tt|awk}}]] {{mark since c++11}} &lt;br/&gt;

=B=
[[cpp/regex/syntax_option_type | {{tt|basic}}]] {{mark since c++11}} &lt;br/&gt;

=C=
[[cpp/regex/syntax_option_type | {{tt|collate}}]] {{mark since c++11}} &lt;br/&gt;

=E=
[[cpp/regex/syntax_option_type | {{tt|ECMAScript}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/syntax_option_type | {{tt|egrep}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_backref}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_badbrace}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_badrepeat}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_brace}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_brack}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_collate}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_complexity}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_ctype}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_escape}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_paren}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_range}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_space}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_stack}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/error_type | {{tt|error_type}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/syntax_option_type | {{tt|extended}}]] {{mark since c++11}} &lt;br/&gt;

=F=
[[cpp/regex/match_flag_type | {{tt|format_default}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|format_first_only}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|format_no_copy}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|format_sed}}]] {{mark since c++11}} &lt;br/&gt;

=G=
[[cpp/regex/syntax_option_type | {{tt|grep}}]] {{mark since c++11}} &lt;br/&gt;

=I=
[[cpp/regex/syntax_option_type | {{tt|icase}}]] {{mark since c++11}} &lt;br/&gt;

=M=
[[cpp/regex/match_flag_type | {{tt|match_any}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_continuous}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_default}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_flag_type}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_not_bol}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_not_bow}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_not_eol}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_not_eow}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_not_null}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/regex/match_flag_type | {{tt|match_prev_avail}}]] {{mark since c++11}} &lt;br/&gt;

=N=
[[cpp/regex/syntax_option_type | {{tt|nosubs}}]] {{mark since c++11}} &lt;br/&gt;

=O=
[[cpp/regex/syntax_option_type | {{tt|optimize}}]] {{mark since c++11}} &lt;br/&gt;

=S=
[[cpp/regex/syntax_option_type | {{tt|syntax_option_type}}]] {{mark since c++11}} &lt;br/&gt;</text>
      <sha1>gq6wutewbb85zoq8do05hd3zhn2m1tu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/symbol index/this thread</title>
    <ns>0</ns>
    <id>15692</id>
    <revision>
      <id>91030</id>
      <parentid>87479</parentid>
      <timestamp>2017-03-15T00:00:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{c|&quot; to &quot;{{tt|&quot;</comment>
      <text xml:space="preserve" bytes="1008">{{title|std::this_thread Symbol Index}}
{{cpp/navbar}}


&lt;table class=&quot;plainlinks fmbox fmbox-system&quot; style=&quot;font-size: 0.8em; background-color:#ffffbb&quot;&gt;
&lt;tr&gt;
&lt;td class=&quot;mbox-image&quot;&gt;
  &lt;/td&gt;
&lt;td class=&quot;mbox-text&quot; style=&quot;&quot;&gt; This is work in progress, there may be inaccuracies &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

This page tries to list all the symbols that are available from the ''Standard Library'' in the namespace ''std::this_thread::''. The symbols are written as follows:
&lt;ul&gt;
&lt;li&gt;Function names with ''()''.&lt;/li&gt;
&lt;li&gt;Templates with ''&lt;&gt;''.&lt;/li&gt;
&lt;/ul&gt;

==&lt;blockquote&gt;&lt;tt&gt;[[cpp/symbol_index/this_thread#G| G]] [[cpp/symbol_index/this_thread#S| S]] [[cpp/symbol_index/this_thread#Y| Y]]&lt;/tt&gt;&lt;/blockquote&gt;== 
&lt;br/&gt;

=G=
[[cpp/thread/get_id | {{tt|get_id()}}]] {{mark since c++11}} &lt;br/&gt;

=S=
[[cpp/thread/sleep_for | {{tt|sleep_for()}}]] {{mark since c++11}} &lt;br/&gt;
[[cpp/thread/sleep_until | {{tt|sleep_until&lt;&gt;()}}]] {{mark since c++11}} &lt;br/&gt;

=Y=
[[cpp/thread/yield | {{tt|yield()}}]] {{mark since c++11}} &lt;br/&gt;</text>
      <sha1>dl1mf6lo0fd8mktsm5cex9k3iy8bw5u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread</title>
    <ns>0</ns>
    <id>1774</id>
    <revision>
      <id>89035</id>
      <parentid>89031</parentid>
      <timestamp>2016-12-22T21:54:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+scoped_lock entry</comment>
      <text xml:space="preserve" bytes="4001">{{title|Thread support library}}
{{cpp/thread/navbar}}

C++ includes built-in support for threads, mutual exclusion, condition variables, and futures.

===Threads===

Threads enable programs to execute across several processor cores.

{{dsc begin}}
{{dsc header | thread}}
{{dsc inc | cpp/thread/dsc thread}}
{{dsc h2 | Functions managing the current thread}}
{{dsc namespace | this_thread}}
{{dsc inc | cpp/thread/dsc yield}}
{{dsc inc | cpp/thread/dsc get_id}}
{{dsc inc | cpp/thread/dsc sleep_for}}
{{dsc inc | cpp/thread/dsc sleep_until}}
{{dsc end}}

===Cache size access===
{{dsc begin}}
{{dsc header | new}}
{{dsc inc | cpp/thread/dsc hardware_destructive_interference_size}}
{{dsc end}}

===Mutual exclusion===

Mutual exclusion algorithms prevent multiple threads from simultaneously accessing shared resources. This prevents data races and provides support for synchronization between threads.

{{dsc begin}}
{{dsc header | mutex}}
{{dsc inc | cpp/thread/dsc mutex}}
{{dsc inc | cpp/thread/dsc timed_mutex}}
{{dsc inc | cpp/thread/dsc recursive_mutex}}
{{dsc inc | cpp/thread/dsc recursive_timed_mutex}}
{{dsc header | shared_mutex}}
{{dsc inc | cpp/thread/dsc shared_mutex}}
{{dsc inc | cpp/thread/dsc shared_timed_mutex}}

{{dsc h2 | Generic mutex management}}
{{dsc header | mutex}}
{{dsc inc | cpp/thread/dsc lock_guard}}
{{dsc inc | cpp/thread/dsc scoped_lock}}
{{dsc inc | cpp/thread/dsc unique_lock}}
{{dsc inc | cpp/thread/dsc shared_lock}}
{{dsc inc | cpp/thread/dsc lock_tag_t}}
{{dsc inc | cpp/thread/dsc lock_tag}}

{{dsc h2 | Generic locking algorithms}}
{{dsc inc | cpp/thread/dsc try_lock}}
{{dsc inc | cpp/thread/dsc lock}}

{{dsc h2 | Call once}}
{{dsc inc | cpp/thread/dsc once_flag}}
{{dsc inc | cpp/thread/dsc call_once}}
{{dsc end}}

===Condition variables===

A condition variable is a synchronization primitive that allows multiple threads to communicate with each other.  It allows some number of threads to wait (possibly with a timeout) for notification from another thread that they may proceed. A condition variable is always associated with a mutex. 

{{dsc begin}}
{{dsc header | condition_variable}}
{{dsc class | cpp/thread/condition_variable | provides a condition variable associated with a {{lc|std::unique_lock}} | notes={{mark c++11}}}}
{{dsc class | cpp/thread/condition_variable_any | provides a condition variable associated with any lock type | notes={{mark c++11}}}}
{{dsc fun   | cpp/thread/notify_all_at_thread_exit | schedules a call to {{tt|notify_all}} to be invoked when this thread is completely finished | notes={{mark c++11}}}}
{{dsc enum | cpp/thread/cv_status | lists the possible results of timed waits on condition variables | notes={{mark c++11}}}}
{{dsc end}}

===Futures===

The standard library provides facilities to obtain values that are returned and to catch exceptions that are thrown by asynchronous tasks (i.e. functions launched in separate threads). These values are communicated in a ''shared state'', in which the asynchronous task may write its return value or store an exception, and which may be examined, waited for, and otherwise manipulated by other threads that hold instances of {{lc|std::future}} or {{lc|std::shared_future}} that reference that shared state.

{{dsc begin}}
{{dsc header | future}}
{{dsc inc | cpp/thread/dsc promise}}
{{dsc inc | cpp/thread/dsc packaged_task}}
{{dsc inc | cpp/thread/dsc future}}
{{dsc inc | cpp/thread/dsc shared_future}}
{{dsc inc | cpp/thread/dsc async}}
{{dsc inc | cpp/thread/dsc launch}}
{{dsc inc | cpp/thread/dsc future_status}}

{{dsc h2 | Future errors}}
{{dsc inc | cpp/thread/dsc future_error}}
{{dsc inc | cpp/thread/dsc future_category}}
{{dsc inc | cpp/thread/dsc future_errc}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/thread | Thread support library}}
{{dsc end}}

[[ar:cpp/thread]]
[[cs:cpp/thread]]
[[de:cpp/thread]]
[[es:cpp/thread]]
[[fr:cpp/thread]]
[[it:cpp/thread]]
[[ja:cpp/thread]]
[[pt:cpp/thread]]
[[ru:cpp/thread]]
[[zh:cpp/thread]]</text>
      <sha1>fsiv55kos3ss15t7g6agdblp47pqzuo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/async</title>
    <ns>0</ns>
    <id>2516</id>
    <revision>
      <id>90862</id>
      <parentid>90861</parentid>
      <timestamp>2017-03-14T01:56:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6895">{{cpp/title|async}}
{{cpp/thread/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl rev multi| num=1|since1=c++11 |dcl1=
template&lt; class Function, class... Args&gt;
std::future&lt;std::result_of_t&lt;std::decay_t&lt;Function&gt;(std::decay_t&lt;Args&gt;...)&gt;&gt;
    async( Function&amp;&amp; f, Args&amp;&amp;... args );
|since2=c++17|dcl2=
template&lt; class Function, class... Args&gt;
std::future&lt;std::invoke_result_t&lt;std::decay_t&lt;Function&gt;, std::decay_t&lt;Args&gt;...&gt;&gt;
    async( Function&amp;&amp; f, Args&amp;&amp;... args );

}}

{{dcl rev multi| num=2|since1=c++11 |dcl1=
template&lt; class Function, class... Args &gt;
std::future&lt;std::result_of_t&lt;std::decay_t&lt;Function&gt;(std::decay_t&lt;Args&gt;...)&gt;&gt;
    async( std::launch policy, Function&amp;&amp; f, Args&amp;&amp;... args );
|since2=c++17|dcl2=
template&lt; class Function, class... Args &gt;
std::future&lt;std::invoke_result_t&lt;std::decay_t&lt;Function&gt;, std::decay_t&lt;Args&gt;...&gt;&gt;
    async( std::launch policy, Function&amp;&amp; f, Args&amp;&amp;... args );
}}
{{dcl rev end}}
{{dcl end}}

The template function {{tt|async}} runs the function {{tt|f}} asynchronously (potentially in a separate thread which may be part of a thread pool) and returns a {{lc|std::future}} that will eventually hold the result of that function call.
@1@ Behaves the same as {{c|async(std::launch::async {{!}} std::launch::deferred, f, args...)}}.  In other words, {{tt|f}} may be executed in another thread or it may be run synchronously when the resulting {{lc|std::future}} is queried for a value.
@2@ Calls a function {{tt|f}} with arguments {{tt|args}} according to a specific launch policy {{tt|policy}}: 
:* If the ''async'' flag is set (i.e. {{c|1=policy &amp; std::launch::async != 0}}), then {{tt|async}} executes the callable object {{tt|f}} on a new thread of execution (with all thread-locals initialized) as if spawned by {{c|std::thread(std::forward&lt;F&gt;(f), std::forward&lt;Args&gt;(args)...)}}, except that if the function {{tt|f}} returns a value or throws an exception, it is stored in the shared state accessible through the {{lc|std::future}} that {{tt|async}} returns to the caller.
:* If the ''deferred'' flag is set (i.e. {{c|1=policy &amp; std::launch::deferred != 0}}), then {{tt|async}} converts {{tt|f}} and {{tt|args...}} the same way as by {{lc|std::thread}} constructor, but does not spawn a new thread of execution. Instead, ''lazy evaluation'' is performed: the first call to a non-timed wait function on the {{lc|std::future}} that {{tt|async}} returned to the caller will cause the copy of {{tt|f}} to be invoked (as an rvalue) with the copies of {{tt|args...}} (also passed as rvalues) in the current thread (which does not have to be the thread that originally called {{tt|std::async}}). The result or exception is placed in the shared state associated with the future and only then it is made ready. All further accesses to the same {{lc|std::future}} will return the result immediately. 
:* If both the {{lc|std::launch::async}} and {{lc|std::launch::deferred}} flags are set in {{tt|policy}}, it is up to the implementation whether to perform asynchronous execution or lazy evaluation.
{{rev begin}}
{{rev|since=c++14|
:* If neither {{lc|std::launch::async}} nor {{lc|std::launch::deferred}}, nor any implementation-defined policy flag is set in {{tt|policy}}, the behavior is undefined.
}}
{{rev end}}

In any case, the call to {{tt|std::async}} ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) the call to {{tt|f}}, and the completion of {{tt|f}} is ''sequenced-before'' making the shared state ready. If the {{tt|async}} policy is chosen, the associated thread completion ''synchronizes-with'' the successful return from the first function that is waiting on the shared state, or with the return of the last function that releases the shared state, whichever comes first.

===Parameters===
{{par begin}}
{{par | f | {{concept|Callable}} object to call}}
{{par | args... | parameters to pass to {{tt|f}}}}
{{par | policy | bitmask value, where individual bits control the allowed methods of execution
 {{dsc begin}}
 {{dsc hitem | Bit | Explanation}}
 {{dsc | {{lc|std::launch::async}} | enable asynchronous evaluation }}
 {{dsc | {{lc|std::launch::deferred}} | enable lazy evaluation }}
 {{dsc end}}
}}
{{par hreq}}
{{par req concept | Function, Args | MoveConstructible}}
{{par end}}

===Return value===
{{lc|std::future}} referring to the shared state created by this call to {{tt|std::async}}. 

===Exceptions===
Throws {{lc|std::system_error}} with error condition {{lc|std::errc::resource_unavailable_try_again}} if the launch policy equals {{lc|std::launch::async}} and the implementation is unable to start a new thread (if the policy is {{tt|async{{!}}deferred}} or has additional bits set, it will fall back to deferred or the implementation-defined policies in this case), or {{lc|std::bad_alloc}} if memory for the internal data structures could not be allocated.

===Notes===
The implementation may extend the behavior of the first overload of {{lc|std::async}} by enabling additional (implementation-defined) bits in the default launch policy.

Examples of implementation-defined launch policies are the sync policy (execute immediately, within the async call) and the task policy (similar to async, but thread-locals are not cleared)

If the {{tt|std::future}} obtained from  {{tt|std::async}} is not moved from or bound to a reference, the destructor of the {{lc|std::future}} will block at the end of the full expression until the asynchronous operation completes, essentially making code such as the following synchronous:
{{source|
std::async(std::launch::async, []{ f(); }); // temporary's dtor waits for f()
std::async(std::launch::async, []{ g(); }); // does not start until f() completes
}}
(note that the destructors of std::futures obtained by means other than a call to std::async never block)

=== Defect reports ===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2021|std=C++11|before=return type incorrect and value category of arguments unclear in the deferred case|after=corrected return type and clarified that rvalues are used}}
{{dr list end}}

===Example===
{{example|
 | code= 
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;numeric&gt;
#include &lt;future&gt;

template &lt;typename RAIter&gt;
int parallel_sum(RAIter beg, RAIter end)
{
    auto len = end - beg;
    if(len &lt; 1000)
        return std::accumulate(beg, end, 0);

    RAIter mid = beg + len/2;
    auto handle = std::async(std::launch::async,
                             parallel_sum&lt;RAIter&gt;, mid, end);
    int sum = parallel_sum(beg, mid);
    return sum + handle.get();
}

int main()
{
    std::vector&lt;int&gt; v(10000, 1);
    std::cout &lt;&lt; &quot;The sum is &quot; &lt;&lt; parallel_sum(v.begin(), v.end()) &lt;&lt; '\n';
}
 | output=
The sum is 10000
}}

[[de:cpp/thread/async]]
[[es:cpp/thread/async]]
[[fr:cpp/thread/async]]
[[it:cpp/thread/async]]
[[ja:cpp/thread/async]]
[[pt:cpp/thread/async]]
[[ru:cpp/thread/async]]
[[zh:cpp/thread/async]]</text>
      <sha1>onunwcx4m3fdonv0o58fr2rm3bobp7h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/call once</title>
    <ns>0</ns>
    <id>2505</id>
    <revision>
      <id>91212</id>
      <parentid>79126</parentid>
      <timestamp>2017-03-27T19:31:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3930">{{cpp/title|call_once}}
{{cpp/thread/navbar}}
{{ddcl | header=mutex | since=c++11 |
template&lt; class Callable, class... Args &gt;
void call_once( std::once_flag&amp; flag, Callable&amp;&amp; f, Args&amp;&amp;... args );
}}

Executes the {{concept|Callable}} object {{tt|f}} exactly once, even if called from several threads. 

Each group of {{tt|call_once}} invocations that receives the same {{lc|std::once_flag}} object will meet the following requirements:
 
* Exactly one execution of exactly one of the functions (passed as {{tt|f}} to the invocations in the group) is performed. It is undefined which function will be selected for execution. The selected function runs in the same thread as the {{tt|call_once}} invocation it was passed to.

* No invocation in the group returns before the above-mentioned execution of the selected function is completed successfully, that is, doesn't exit via an exception.

* If the selected function exits via exception, it is propagated to the caller. Another function is then selected and executed.

===Parameters===
{{par begin}}
{{par | flag | an object, for which exactly one function gets executed }}
{{par | f | {{concept|Callable}} object to invoke}}
{{par | args... | arguments to pass to the function}}
{{par end}}

===Return value===
(none)

===Exceptions===
* {{lc|std::system_error}} if any condition prevents calls to {{tt|call_once}} from executing as specified
* any exception thrown by {{tt|f}}

===Notes===
{{rev begin}}
{{rev|until=c++17|
The arguments to the {{concept|Callable}} object are moved or copied by value. If a reference argument needs to be passed to the {{concept|Callable}} object, it has to be wrapped (e.g. with {{lc|std::ref}} or {{lc|std::cref}}).
}}
{{rev|since=c++17|
The arguments to the {{concept|Callable}} object are perfect forwarded (as if by {{c|std::forward&lt;Callable&gt;(f)}} and {{c|std::forward&lt;Args&gt;(args))...}}), which is different from  the uses of {{concept|Callable}}s in the thread constructor or {{lc|std::async}}, because {{tt|call_once}} does not have to transfer its arguments to another thread of execution, and therefore does not need to move or copy.
}}
{{rev end}}

Initialization of [[cpp/language/storage_duration#Static_local_variables|function-local statics]] is guaranteed to occur only once even when called from multiple threads, and may be more efficient than the equivalent code using {{tt|std::call_once}}.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;mutex&gt;

std::once_flag flag1, flag2;

void simple_do_once()
{
    std::call_once(flag1, [](){ std::cout &lt;&lt; &quot;Simple example: called once\n&quot;; });
}

void may_throw_function(bool do_throw)
{
  if (do_throw) {
    std::cout &lt;&lt; &quot;throw: call_once will retry\n&quot;; // this may appear more than once
    throw std::exception();
  }
  std::cout &lt;&lt; &quot;Didn't throw, call_once will not attempt again\n&quot;; // guaranteed once
}

void do_once(bool do_throw)
{
  try {
    std::call_once(flag2, may_throw_function, do_throw);
  }
  catch (...) {
  }
}

int main()
{
    std::thread st1(simple_do_once);
    std::thread st2(simple_do_once);
    std::thread st3(simple_do_once);
    std::thread st4(simple_do_once);
    st1.join();
    st2.join();
    st3.join();
    st4.join();

    std::thread t1(do_once, true);
    std::thread t2(do_once, true);
    std::thread t3(do_once, false);
    std::thread t4(do_once, true);
    t1.join();
    t2.join();
    t3.join();
    t4.join();
}
 |p=true
 |output=
Simple example: called once
throw: call_once will retry
throw: call_once will retry
Didn't throw, call_once will not attempt again
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc once_flag}}
{{dsc see c | c/thread/call_once}}
{{dsc end}}

[[de:cpp/thread/call once]]
[[es:cpp/thread/call once]]
[[fr:cpp/thread/call once]]
[[it:cpp/thread/call once]]
[[ja:cpp/thread/call once]]
[[pt:cpp/thread/call once]]
[[ru:cpp/thread/call once]]
[[zh:cpp/thread/call once]]</text>
      <sha1>5xwpecgfk1zaxjp9evzzv08di0jt38f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable</title>
    <ns>0</ns>
    <id>2387</id>
    <revision>
      <id>85954</id>
      <parentid>83301</parentid>
      <timestamp>2016-06-06T21:19:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>+mention shared_lock when justifying condition_variable_any here</comment>
      <text xml:space="preserve" bytes="5066">{{cpp/title|condition_variable}}
{{cpp/thread/condition_variable/navbar}}
{{ddcl | header=condition_variable | since=c++11 | 1=
class condition_variable;
}}

The {{tt|condition_variable}} class is a synchronization primitive that can be used to block a thread, or multiple threads at the same time, until another thread both modifies a shared variable (the ''condition''), and notifies the {{tt|condition_variable}}.

The thread that intends to modify the variable has to
# acquire a {{tt|std::mutex}} (typically via {{lc|std::lock_guard}})
# perform the modification while the lock is held
# execute {{lc|notify_one}} or {{lc|notify_all}} on the {{tt|std::condition_variable}} (the lock does not need to be held for notification)
Even if the shared variable is atomic, it must be modified under the mutex in order to correctly publish the modification to the waiting thread.

Any thread that intends to wait on {{tt|std::condition_variable}} has to
# acquire a {{c|std::unique_lock&lt;std::mutex&gt;}}, on the same mutex as used to protect the shared variable
# execute {{lc|wait}}, {{lc|wait_for}}, or {{lc|wait_until}}. The wait operations atomically release the mutex and suspend the execution of the thread.
# When the condition variable is notified, a timeout expires, or a [[enwiki:Spurious_wakeup|spurious wakeup]] occurs, the thread is awakened, and the mutex is atomically reacquired. The thread should then check the condition and resume waiting if the wake up was spurious.

{{tt|std::condition_variable}} works only with {{c|std::unique_lock&lt;std::mutex&gt;}}; this restriction allows for maximal efficiency on some platforms. {{lc|std::condition_variable_any}} provides a condition variable that works with any {{concept|BasicLockable}} object, such as  {{lc|std::shared_lock}}.

Condition variables permit concurrent invocation of the {{lc|wait}}, {{lc|wait_for}}, {{lc|wait_until}}, {{lc|notify_one}} and {{lc|notify_all}} member functions.

The class {{tt|std::condition_variable}} is a {{concept|StandardLayoutType}}. It is not {{concept|CopyConstructible}}, {{concept|MoveConstructible}}, {{concept|CopyAssignable}}, {{concept|MoveAssignable}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|native_handle_type}} | ''implementation-defined''}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc constructor | condition_variable}}
{{dsc inc | cpp/thread/condition_variable/dsc destructor | condition_variable}}
{{dsc inc | cpp/thread/condition_variable/dsc operator{{=}} | condition_variable}}

{{dsc h2 | Notification}}
{{dsc inc | cpp/thread/condition_variable/dsc notify_one | condition_variable}}
{{dsc inc | cpp/thread/condition_variable/dsc notify_all | condition_variable}}

{{dsc h2 | Waiting}}
{{dsc inc | cpp/thread/condition_variable/dsc wait | condition_variable}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_for | condition_variable}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_until | condition_variable}}

{{dsc h2 | Native handle}}
{{dsc inc | cpp/thread/condition_variable/dsc native handle | condition_variable}}
{{dsc end}}

===Example===
{{example| {{tt|condition_variable}} is used in combination with a {{lc|std::mutex}} to facilitate inter-thread communication.
|code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;thread&gt;
#include &lt;mutex&gt;
#include &lt;condition_variable&gt;

std::mutex m;
std::condition_variable cv;
std::string data;
bool ready = false;
bool processed = false;

void worker_thread()
{
    // Wait until main() sends data
    std::unique_lock&lt;std::mutex&gt; lk(m);
    cv.wait(lk, []{return ready;});

    // after the wait, we own the lock.
    std::cout &lt;&lt; &quot;Worker thread is processing data\n&quot;;
    data += &quot; after processing&quot;;

    // Send data back to main()
    processed = true;
    std::cout &lt;&lt; &quot;Worker thread signals data processing completed\n&quot;;
    
    // Manual unlocking is done before notifying, to avoid waking up
    // the waiting thread only to block again (see notify_one for details)
    lk.unlock();
    cv.notify_one();
}

int main()
{
    std::thread worker(worker_thread);

    data = &quot;Example data&quot;;
    // send data to the worker thread
    {
        std::lock_guard&lt;std::mutex&gt; lk(m);
        ready = true;
        std::cout &lt;&lt; &quot;main() signals data ready for processing\n&quot;;
    }
    cv.notify_one();

    // wait for the worker
    {
        std::unique_lock&lt;std::mutex&gt; lk(m);
        cv.wait(lk, []{return processed;});
    }
    std::cout &lt;&lt; &quot;Back in main(), data = &quot; &lt;&lt; data &lt;&lt; '\n';

    worker.join();
}
| output=
main() signals data ready for processing
Worker thread is processing data
Worker thread signals data processing completed
Back in main(), data = Example data after processing
}}

[[de:cpp/thread/condition variable]]
[[es:cpp/thread/condition variable]]
[[fr:cpp/thread/condition variable]]
[[it:cpp/thread/condition variable]]
[[ja:cpp/thread/condition variable]]
[[pt:cpp/thread/condition variable]]
[[ru:cpp/thread/condition variable]]
[[zh:cpp/thread/condition variable]]</text>
      <sha1>pasp5bbaj5dm5hpou5l4lw8a450zw2f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any</title>
    <ns>0</ns>
    <id>2388</id>
    <revision>
      <id>85952</id>
      <parentid>81212</parentid>
      <timestamp>2016-06-06T20:39:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+note that this is useful for shared_mutex</comment>
      <text xml:space="preserve" bytes="2694">{{cpp/title|condition_variable_any}}
{{cpp/thread/condition_variable_any/navbar}}
{{ddcl | header=condition_variable | since=c++11 | 1=
class condition_variable_any;
}}

The {{tt|condition_variable_any}} class is a generalization of {{lc|std::condition_variable}}.  Whereas {{lc|std::condition_variable}} works only on {{c|std::unique_lock&lt;std::mutex&gt;}}, {{tt|condition_variable_any}} can operate on any lock that meets the {{concept|BasicLockable}} requirements.

See {{lc|std::condition_variable}} for the description of the semantics of condition variables.

The class {{tt|std::condition_variable_any}} is a standard-layout class. It is not copy-constructible, move-constructible, copy-assignable, or move-assignable.

If the lock is {{lc|std::unique_lock}}, {{lc|std::condition_variable}} may provide better performance.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc constructor | condition_variable_any}}
{{dsc inc | cpp/thread/condition_variable/dsc destructor | condition_variable_any}}
{{dsc inc | cpp/thread/condition_variable/dsc operator{{=}} | condition_variable_any}}

{{dsc h2 | Notification}}
{{dsc inc | cpp/thread/condition_variable/dsc notify_one | condition_variable_any}}
{{dsc inc | cpp/thread/condition_variable/dsc notify_all | condition_variable_any}}

{{dsc h2 | Waiting}}
{{dsc inc | cpp/thread/condition_variable/dsc wait | condition_variable_any}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_for | condition_variable_any}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_until | condition_variable_any}}
{{dsc end}}

===Notes===
{{tt|std::condition_variable_any}} can be used with {{lc|std::shared_lock}} in order to wait on a {{lc|std::shared_mutex}} in shared ownership mode.

A possible use for {{tt|std::condition_variable_any}} with custom {{concept|Lockable}} types is to provide convenient interruptible waits: the custom lock operation would both lock the associated mutex as expected, and also perform the necessary setup to notify this condition variable when the interrupting signal is received.&lt;ref&gt;A. Williams (2012), &quot;C++ concurrency in action&quot; 9.2.4 Interupting a wait on std::condition_variable_any&lt;/ref&gt; &lt;!-- would be nice to come up with an example that's not as big as in the book, or maybe come up with some other plausible use case --&gt;

===References===
&lt;references/&gt;

[[de:cpp/thread/condition variable any]]
[[es:cpp/thread/condition variable any]]
[[fr:cpp/thread/condition variable any]]
[[it:cpp/thread/condition variable any]]
[[ja:cpp/thread/condition variable any]]
[[pt:cpp/thread/condition variable any]]
[[ru:cpp/thread/condition variable any]]
[[zh:cpp/thread/condition variable any]]</text>
      <sha1>t1mg78yv4bgykgq8vfnppk3th68wm88</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/condition variable any</title>
    <ns>0</ns>
    <id>5110</id>
    <revision>
      <id>90347</id>
      <parentid>90310</parentid>
      <timestamp>2017-02-21T21:42:11Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>C documentation moved to template</comment>
      <text xml:space="preserve" bytes="594">{{include page|cpp/thread/condition_variable/constructor|condition_variable_any}}

[[de:cpp/thread/condition variable any/condition variable any]]
[[es:cpp/thread/condition variable any/condition variable any]]
[[fr:cpp/thread/condition variable any/condition variable any]]
[[it:cpp/thread/condition variable any/condition variable any]]
[[ja:cpp/thread/condition variable any/condition variable any]]
[[pt:cpp/thread/condition variable any/condition variable any]]
[[ru:cpp/thread/condition variable any/condition variable any]]
[[zh:cpp/thread/condition variable any/condition variable any]]</text>
      <sha1>n204di434lfqktxnd6xwztntf7hcyea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/native handle</title>
    <ns>0</ns>
    <id>5124</id>
    <revision>
      <id>51345</id>
      <parentid>43927</parentid>
      <timestamp>2013-06-01T03:59:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="524">{{include page|cpp/thread/condition_variable/native_handle|condition_variable_any}}

[[de:cpp/thread/condition variable any/native handle]]
[[es:cpp/thread/condition variable any/native handle]]
[[fr:cpp/thread/condition variable any/native handle]]
[[it:cpp/thread/condition variable any/native handle]]
[[ja:cpp/thread/condition variable any/native handle]]
[[pt:cpp/thread/condition variable any/native handle]]
[[ru:cpp/thread/condition variable any/native handle]]
[[zh:cpp/thread/condition variable any/native handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/notify all</title>
    <ns>0</ns>
    <id>5116</id>
    <revision>
      <id>90353</id>
      <parentid>90314</parentid>
      <timestamp>2017-02-21T21:50:25Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>C documentation moved to template</comment>
      <text xml:space="preserve" bytes="497">{{include page|cpp/thread/condition_variable/notify_all|condition_variable_any}}

[[de:cpp/thread/condition variable any/notify all]]
[[es:cpp/thread/condition variable any/notify all]]
[[fr:cpp/thread/condition variable any/notify all]]
[[it:cpp/thread/condition variable any/notify all]]
[[ja:cpp/thread/condition variable any/notify all]]
[[pt:cpp/thread/condition variable any/notify all]]
[[ru:cpp/thread/condition variable any/notify all]]
[[zh:cpp/thread/condition variable any/notify all]]</text>
      <sha1>kwaql9qzhm0srywgkugem5j383li6x5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/notify one</title>
    <ns>0</ns>
    <id>5114</id>
    <revision>
      <id>90351</id>
      <parentid>90312</parentid>
      <timestamp>2017-02-21T21:48:53Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>C documentation moved to template</comment>
      <text xml:space="preserve" bytes="497">{{include page|cpp/thread/condition_variable/notify_one|condition_variable_any}}

[[de:cpp/thread/condition variable any/notify one]]
[[es:cpp/thread/condition variable any/notify one]]
[[fr:cpp/thread/condition variable any/notify one]]
[[it:cpp/thread/condition variable any/notify one]]
[[ja:cpp/thread/condition variable any/notify one]]
[[pt:cpp/thread/condition variable any/notify one]]
[[ru:cpp/thread/condition variable any/notify one]]
[[zh:cpp/thread/condition variable any/notify one]]</text>
      <sha1>91wnhyewjuhhqb8xzqio7w1sdwzcf3k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/wait</title>
    <ns>0</ns>
    <id>5118</id>
    <revision>
      <id>90355</id>
      <parentid>90316</parentid>
      <timestamp>2017-02-21T21:51:46Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>C documentation moved to template</comment>
      <text xml:space="preserve" bytes="443">{{include page|cpp/thread/condition_variable/wait|condition_variable_any}}

[[de:cpp/thread/condition variable any/wait]]
[[es:cpp/thread/condition variable any/wait]]
[[fr:cpp/thread/condition variable any/wait]]
[[it:cpp/thread/condition variable any/wait]]
[[ja:cpp/thread/condition variable any/wait]]
[[pt:cpp/thread/condition variable any/wait]]
[[ru:cpp/thread/condition variable any/wait]]
[[zh:cpp/thread/condition variable any/wait]]</text>
      <sha1>afffxsbp9jwodfk592kvpnndscq5kr3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/wait for</title>
    <ns>0</ns>
    <id>5120</id>
    <revision>
      <id>51349</id>
      <parentid>43902</parentid>
      <timestamp>2013-06-01T04:00:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="479">{{include page|cpp/thread/condition_variable/wait_for|condition_variable_any}}

[[de:cpp/thread/condition variable any/wait for]]
[[es:cpp/thread/condition variable any/wait for]]
[[fr:cpp/thread/condition variable any/wait for]]
[[it:cpp/thread/condition variable any/wait for]]
[[ja:cpp/thread/condition variable any/wait for]]
[[pt:cpp/thread/condition variable any/wait for]]
[[ru:cpp/thread/condition variable any/wait for]]
[[zh:cpp/thread/condition variable any/wait for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/wait until</title>
    <ns>0</ns>
    <id>5122</id>
    <revision>
      <id>90359</id>
      <parentid>90318</parentid>
      <timestamp>2017-02-21T21:53:36Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>C documentation moved to template</comment>
      <text xml:space="preserve" bytes="497">{{include page|cpp/thread/condition_variable/wait_until|condition_variable_any}}

[[de:cpp/thread/condition variable any/wait until]]
[[es:cpp/thread/condition variable any/wait until]]
[[fr:cpp/thread/condition variable any/wait until]]
[[it:cpp/thread/condition variable any/wait until]]
[[ja:cpp/thread/condition variable any/wait until]]
[[pt:cpp/thread/condition variable any/wait until]]
[[ru:cpp/thread/condition variable any/wait until]]
[[zh:cpp/thread/condition variable any/wait until]]</text>
      <sha1>7y4fdefhc7od9ghkvf725hpvz3dwayc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable any/~condition variable any</title>
    <ns>0</ns>
    <id>5112</id>
    <revision>
      <id>90349</id>
      <parentid>90320</parentid>
      <timestamp>2017-02-21T21:45:34Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>C documentation moved to template</comment>
      <text xml:space="preserve" bytes="601">{{include page|cpp/thread/condition_variable/destructor|condition_variable_any}}

[[de:cpp/thread/condition variable any/~condition variable any]]
[[es:cpp/thread/condition variable any/~condition variable any]]
[[fr:cpp/thread/condition variable any/~condition variable any]]
[[it:cpp/thread/condition variable any/~condition variable any]]
[[ja:cpp/thread/condition variable any/~condition variable any]]
[[pt:cpp/thread/condition variable any/~condition variable any]]
[[ru:cpp/thread/condition variable any/~condition variable any]]
[[zh:cpp/thread/condition variable any/~condition variable any]]</text>
      <sha1>ij98v6yvrppfq3tm7qln8axozq4fexu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/condition variable</title>
    <ns>0</ns>
    <id>5024</id>
    <revision>
      <id>51335</id>
      <parentid>43989</parentid>
      <timestamp>2013-06-01T03:59:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="526">{{include page|cpp/thread/condition_variable/constructor|condition_variable}}

[[de:cpp/thread/condition variable/condition variable]]
[[es:cpp/thread/condition variable/condition variable]]
[[fr:cpp/thread/condition variable/condition variable]]
[[it:cpp/thread/condition variable/condition variable]]
[[ja:cpp/thread/condition variable/condition variable]]
[[pt:cpp/thread/condition variable/condition variable]]
[[ru:cpp/thread/condition variable/condition variable]]
[[zh:cpp/thread/condition variable/condition variable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/native handle</title>
    <ns>0</ns>
    <id>5030</id>
    <revision>
      <id>51336</id>
      <parentid>43982</parentid>
      <timestamp>2013-06-01T03:59:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="488">{{include page|cpp/thread/condition_variable/native_handle|condition_variable}}

[[de:cpp/thread/condition variable/native handle]]
[[es:cpp/thread/condition variable/native handle]]
[[fr:cpp/thread/condition variable/native handle]]
[[it:cpp/thread/condition variable/native handle]]
[[ja:cpp/thread/condition variable/native handle]]
[[pt:cpp/thread/condition variable/native handle]]
[[ru:cpp/thread/condition variable/native handle]]
[[zh:cpp/thread/condition variable/native handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/notify all</title>
    <ns>0</ns>
    <id>5027</id>
    <revision>
      <id>51337</id>
      <parentid>43976</parentid>
      <timestamp>2013-06-01T03:59:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="461">{{include page|cpp/thread/condition_variable/notify_all|condition_variable}}

[[de:cpp/thread/condition variable/notify all]]
[[es:cpp/thread/condition variable/notify all]]
[[fr:cpp/thread/condition variable/notify all]]
[[it:cpp/thread/condition variable/notify all]]
[[ja:cpp/thread/condition variable/notify all]]
[[pt:cpp/thread/condition variable/notify all]]
[[ru:cpp/thread/condition variable/notify all]]
[[zh:cpp/thread/condition variable/notify all]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/notify one</title>
    <ns>0</ns>
    <id>5026</id>
    <revision>
      <id>51338</id>
      <parentid>43971</parentid>
      <timestamp>2013-06-01T03:59:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="461">{{include page|cpp/thread/condition_variable/notify_one|condition_variable}}

[[de:cpp/thread/condition variable/notify one]]
[[es:cpp/thread/condition variable/notify one]]
[[fr:cpp/thread/condition variable/notify one]]
[[it:cpp/thread/condition variable/notify one]]
[[ja:cpp/thread/condition variable/notify one]]
[[pt:cpp/thread/condition variable/notify one]]
[[ru:cpp/thread/condition variable/notify one]]
[[zh:cpp/thread/condition variable/notify one]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/wait</title>
    <ns>0</ns>
    <id>5029</id>
    <revision>
      <id>51339</id>
      <parentid>43965</parentid>
      <timestamp>2013-06-01T03:59:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="407">{{include page|cpp/thread/condition_variable/wait|condition_variable}}

[[de:cpp/thread/condition variable/wait]]
[[es:cpp/thread/condition variable/wait]]
[[fr:cpp/thread/condition variable/wait]]
[[it:cpp/thread/condition variable/wait]]
[[ja:cpp/thread/condition variable/wait]]
[[pt:cpp/thread/condition variable/wait]]
[[ru:cpp/thread/condition variable/wait]]
[[zh:cpp/thread/condition variable/wait]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/wait for</title>
    <ns>0</ns>
    <id>5062</id>
    <revision>
      <id>51340</id>
      <parentid>43959</parentid>
      <timestamp>2013-06-01T03:59:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="443">{{include page|cpp/thread/condition_variable/wait_for|condition_variable}}

[[de:cpp/thread/condition variable/wait for]]
[[es:cpp/thread/condition variable/wait for]]
[[fr:cpp/thread/condition variable/wait for]]
[[it:cpp/thread/condition variable/wait for]]
[[ja:cpp/thread/condition variable/wait for]]
[[pt:cpp/thread/condition variable/wait for]]
[[ru:cpp/thread/condition variable/wait for]]
[[zh:cpp/thread/condition variable/wait for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/wait until</title>
    <ns>0</ns>
    <id>5071</id>
    <revision>
      <id>51341</id>
      <parentid>43953</parentid>
      <timestamp>2013-06-01T03:59:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="461">{{include page|cpp/thread/condition_variable/wait_until|condition_variable}}

[[de:cpp/thread/condition variable/wait until]]
[[es:cpp/thread/condition variable/wait until]]
[[fr:cpp/thread/condition variable/wait until]]
[[it:cpp/thread/condition variable/wait until]]
[[ja:cpp/thread/condition variable/wait until]]
[[pt:cpp/thread/condition variable/wait until]]
[[ru:cpp/thread/condition variable/wait until]]
[[zh:cpp/thread/condition variable/wait until]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/condition variable/~condition variable</title>
    <ns>0</ns>
    <id>5025</id>
    <revision>
      <id>51342</id>
      <parentid>43947</parentid>
      <timestamp>2013-06-01T03:59:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="533">{{include page|cpp/thread/condition_variable/destructor|condition_variable}}

[[de:cpp/thread/condition variable/~condition variable]]
[[es:cpp/thread/condition variable/~condition variable]]
[[fr:cpp/thread/condition variable/~condition variable]]
[[it:cpp/thread/condition variable/~condition variable]]
[[ja:cpp/thread/condition variable/~condition variable]]
[[pt:cpp/thread/condition variable/~condition variable]]
[[ru:cpp/thread/condition variable/~condition variable]]
[[zh:cpp/thread/condition variable/~condition variable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/cv status</title>
    <ns>0</ns>
    <id>5126</id>
    <revision>
      <id>62967</id>
      <parentid>59163</parentid>
      <timestamp>2013-07-01T23:48:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1310">{{cpp/title|cv_status}}
{{cpp/thread/navbar}}
{{dcl begin}}
{{dcl header | condition_variable}}
{{dcl | since=c++11 | 1=
enum class cv_status;
}}
{{dcl end}}

The scoped enumeration {{tt|std::cv_status}} describes whether a timed wait returned because of timeout or not.

{{tt|std::cv_status}} is used by the {{tt|wait_for}} and {{tt|wait_until}} methods of {{lc|std::condition_variable}} and {{lc|std::condition_variable_any}}.

===Member constants===
{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|no_timeout}} | the condition variable was awakened with {{tt|notify_all}}, {{tt|notify_one}}, or spuriously }}
{{dsc | {{tt|timeout}} | the condition variable was awakened by timeout expiration }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_for|condition_variable}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_for|condition_variable_any}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_until|condition_variable}}
{{dsc inc | cpp/thread/condition_variable/dsc wait_until|condition_variable_any}}
{{dsc end}}

[[de:cpp/thread/cv status]]
[[es:cpp/thread/cv status]]
[[fr:cpp/thread/cv status]]
[[it:cpp/thread/cv status]]
[[ja:cpp/thread/cv status]]
[[pt:cpp/thread/cv status]]
[[ru:cpp/thread/cv status]]
[[zh:cpp/thread/cv status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/cv status/no timeout</title>
    <ns>0</ns>
    <id>12874</id>
    <redirect title="cpp/thread/cv status" />
    <revision>
      <id>64064</id>
      <timestamp>2013-08-07T22:42:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>6 redlinks</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/thread/cv status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/cv status/timeout</title>
    <ns>0</ns>
    <id>12873</id>
    <redirect title="cpp/thread/cv status" />
    <revision>
      <id>64063</id>
      <timestamp>2013-08-07T22:42:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>6 redlinks</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/thread/cv status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future</title>
    <ns>0</ns>
    <id>2518</id>
    <revision>
      <id>87971</id>
      <parentid>87970</parentid>
      <timestamp>2016-10-17T21:27:10Z</timestamp>
      <contributor>
        <ip>87.69.194.76</ip>
      </contributor>
      <comment>reverted the previous change as it's wrong</comment>
      <text xml:space="preserve" bytes="2968">{{cpp/title|future}}
{{cpp/thread/future/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | num=1 | since=c++11 |
template&lt; class T &gt; class future;
}}
{{dcl | num=2 | since=c++11 |
template&lt; class T &gt; class future&lt;T&amp;&gt;;
}}
{{dcl | num=3 | since=c++11 |
template&lt;&gt;          class future&lt;void&gt;;
}}
{{dcl end}}

The class template {{tt|std::future}} provides a mechanism to access the result of asynchronous operations:

* An asynchronous operation (created via {{lc|std::async}}, {{lc|std::packaged_task}}, or {{lc|std::promise}}) can provide a {{tt|std::future}} object to the creator of that asynchronous operation.

* The creator of the asynchronous operation can then use a variety of methods to query, wait for, or extract a value from the {{tt|std::future}}.  These methods may block if the asynchronous operation has not yet provided a value.

* When the asynchronous operation is ready to send a result to the creator, it can do so by modifying ''shared state'' (e.g. {{lc|std::promise::set_value}}) that is linked to the creator's  {{tt|std::future}}.

Note that {{tt|std::future}} references shared state that is not shared with any other asynchronous return objects (as opposed to {{lc|std::shared_future}}). 

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc constructor | future}}
{{dsc inc | cpp/thread/future/dsc destructor}}
{{dsc inc | cpp/thread/future/dsc operator{{=}}}}
{{dsc inc | cpp/thread/future/dsc share}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/future/dsc get | future}}

{{dsc h2 | State}}
{{dsc inc | cpp/thread/future/dsc valid | future}}
{{dsc inc | cpp/thread/future/dsc wait | future}}
{{dsc inc | cpp/thread/future/dsc wait_for | future}}
{{dsc inc | cpp/thread/future/dsc wait_until | future}}
{{dsc end}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;future&gt;
#include &lt;thread&gt;

int main()
{
    // future from a packaged_task
    std::packaged_task&lt;int()&gt; task([](){ return 7; }); // wrap the function
    std::future&lt;int&gt; f1 = task.get_future();  // get a future
    std::thread(std::move(task)).detach(); // launch on a thread

    // future from an async()
    std::future&lt;int&gt; f2 = std::async(std::launch::async, [](){ return 8; });

    // future from a promise
    std::promise&lt;int&gt; p;
    std::future&lt;int&gt; f3 = p.get_future();
    std::thread( [&amp;p]{ p.set_value_at_thread_exit(9); }).detach();

    std::cout &lt;&lt; &quot;Waiting...&quot; &lt;&lt; std::flush;
    f1.wait();
    f2.wait();
    f3.wait();
    std::cout &lt;&lt; &quot;Done!\nResults are: &quot;
              &lt;&lt; f1.get() &lt;&lt; ' ' &lt;&lt; f2.get() &lt;&lt; ' ' &lt;&lt; f3.get() &lt;&lt; '\n';
}
| output=
Waiting...Done!
Results are: 7 8 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc async}}
{{dsc inc | cpp/thread/dsc shared_future}}
{{dsc end}}

[[de:cpp/thread/future]]
[[es:cpp/thread/future]]
[[fr:cpp/thread/future]]
[[it:cpp/thread/future]]
[[ja:cpp/thread/future]]
[[pt:cpp/thread/future]]
[[ru:cpp/thread/future]]
[[zh:cpp/thread/future]]</text>
      <sha1>0teru4cbcje3jgp2httaom3kb8kh2r9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future category</title>
    <ns>0</ns>
    <id>8546</id>
    <revision>
      <id>91802</id>
      <parentid>63439</parentid>
      <timestamp>2017-03-31T19:58:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1158">{{cpp/title|future_category}}
{{cpp/thread/navbar}}
{{ddcl | header=future | since=c++11 |
const std::error_category&amp; future_category();
}}

Obtains a reference to the static error category object for the errors related to futures and promises. The object is required to override the virtual function {{c|error_category::name()}} to return a pointer to the string {{c|&quot;future&quot;}}. It is used to identify error codes provided in the exceptions of type {{lc|std::future_error}}.

===Parameters===
(none)

===Return value===
A reference to the static object of unspecified runtime type, derived from {{lc|std::error_category}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc future_errc}}
{{dsc inc | cpp/thread/dsc future_error}}
{{dsc inc | cpp/error/dsc error_category}}
{{dsc end}}

[[de:cpp/thread/future category]]
[[es:cpp/thread/future category]]
[[fr:cpp/thread/future category]]
[[it:cpp/thread/future category]]
[[ja:cpp/thread/future category]]
[[pt:cpp/thread/future category]]
[[ru:cpp/thread/future category]]
[[zh:cpp/thread/future category]]</text>
      <sha1>bcy7lq4m3m1nji11oz9hweydnat877r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future errc</title>
    <ns>0</ns>
    <id>8543</id>
    <revision>
      <id>68884</id>
      <parentid>65804</parentid>
      <timestamp>2014-03-22T21:34:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>distinct non-zero was a c++14 line</comment>
      <text xml:space="preserve" bytes="2362">{{cpp/title|future_errc}}
{{cpp/thread/future_errc/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | since=c++11 | 1=
enum class future_errc {
    broken_promise             = /* implementation-defined */,
    future_already_retrieved   = /* implementation-defined */,
    promise_already_satisfied  = /* implementation-defined */,
    no_state                   = /* implementation-defined */
};
}}
{{dcl end}}

The scoped enumeration {{tt|std::future_errc}} defines the error codes reported by {{lc|std::future}} and related classes in {{lc|std::future_error}} exception objects. Only four error codes are required, although the implementation may define additional error codes. Because the appropriate specialization of {{lc|std::is_error_code_enum}} is provided, values of type {{tt|std::future_errc}} are implicitly convertible to {{lc|std::error_code}}. 

{{rev begin}}
{{rev|since=c++14|
All error codes are distinct and non-zero.}}
{{rev end}}

===Member constants===
{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|broken_promise}} |  the asynchronous task abandoned its shared state }}
{{dsc | {{tt|future_already_retrieved}} | the contents of shared state were already accessed through {{lc|std::future}} }}
{{dsc | {{tt|promise_already_satisfied}} |  attempt to store a value in the shared state twice }}
{{dsc | {{tt|no_state}} | attempt to access {{lc|std::promise}} or {{lc|std::future}} without an associated shared state }}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/future_errc/dsc make_error_code}}
{{dsc inc | cpp/thread/future_errc/dsc make_error_condition}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/thread/future_errc/dsc is_error_code_enum}}
{{dsc end}}

===Notes===
In C++11, {{tt|broken_promise}} was specified to equal zero despite {{lc|std::error_code}}/{{lc|std::error_condition}} using zero to mean &quot;no error&quot;. This was fixed in C++14.

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc end}}

[[de:cpp/thread/future errc]]
[[es:cpp/thread/future errc]]
[[fr:cpp/thread/future errc]]
[[it:cpp/thread/future errc]]
[[ja:cpp/thread/future errc]]
[[pt:cpp/thread/future errc]]
[[ru:cpp/thread/future errc]]
[[zh:cpp/thread/future errc]]</text>
      <sha1>i6ykqnwadz5mszp0gv0tcz4u6xqdbb1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future errc/is error code enum</title>
    <ns>0</ns>
    <id>12628</id>
    <revision>
      <id>85536</id>
      <parentid>61339</parentid>
      <timestamp>2016-04-25T03:20:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>error code, not error condition</comment>
      <text xml:space="preserve" bytes="456">{{cpp/title|is_error_code_enum{{dsc small|&lt;std::future_errc&gt;}}}}
{{cpp/error/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | since=c++11 | 
template&lt;&gt;
struct is_error_code_enum&lt;std::future_errc&gt; : std::true_type;
}}
{{dcl end}}

Specifies that {{lc|std::future_errc}} is an error code enum. This enables {{lc|std::error_code}} automatic conversions.

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/error code/dsc is_error_code_enum}}
{{dsc end}}</text>
      <sha1>2gd4n03r2fuoc7oubn5mmje9ps24lav</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future errc/make error code</title>
    <ns>0</ns>
    <id>12643</id>
    <revision>
      <id>61386</id>
      <parentid>61385</parentid>
      <timestamp>2013-06-05T22:37:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="922">{{cpp/title|make_error_code{{dsc small|(std::future_errc)}}}}
{{cpp/thread/future_errc/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | since=c++11 |
std::error_code make_error_code( std::future_errc e );
}}
{{dcl end}}

Constructs an {{lc|std::error_code}} object from a value of type {{lc|std::future_errc}} as if by: 

{{cc|std::error_code(static_cast&lt;int&gt;(e), std::future_category())}}. 

This function is called by the constructor of {{lc|std::error_code}} when given an {{lc|std::future_errc}} argument.

===Parameters===
{{par begin}}
{{par | e | error code number}}
{{par end}}

===Return value===
A value of type {{lc|std::error_code}} that holds the error code number from {{tt|e}} associated with the error category {{c|&quot;future&quot;}}.

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_code}}
{{dsc inc | cpp/thread/dsc future_errc}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future errc/make error condition</title>
    <ns>0</ns>
    <id>12644</id>
    <revision>
      <id>63636</id>
      <parentid>61388</parentid>
      <timestamp>2013-07-13T06:41:39Z</timestamp>
      <contributor>
        <username>Dieram3</username>
        <id>1346</id>
      </contributor>
      <minor/>
      <comment>fixed iostream_category -&gt; future_category</comment>
      <text xml:space="preserve" bytes="837">{{cpp/title|make_error_condition{{dsc small|(std::future_errc)}}}}
{{cpp/thread/future_errc/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | since=c++11 |
std::error_condition make_error_condition( std::future_errc e );
}}
{{dcl end}}

Constructs an {{lc|std::error_condition}} object from a value of type {{lc|std::future_errc}} as if by:

{{cc|std::error_condition(static_cast&lt;int&gt;(e), std::future_category())}}.

===Parameters===
{{par begin}}
{{par | e | error code number}}
{{par end}}

===Return value===
A value of type {{lc|std::error_condition}} that holds the error code number from {{tt|e}} associated with the error category {{c|&quot;future&quot;}}.

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/error/dsc error_condition}}
{{dsc inc | cpp/thread/dsc future_errc}}
{{dsc end}}</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future error</title>
    <ns>0</ns>
    <id>8550</id>
    <revision>
      <id>80819</id>
      <parentid>80817</parentid>
      <timestamp>2015-09-01T02:10:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>and a comment to stress it's UB</comment>
      <text xml:space="preserve" bytes="1729">{{cpp/title | future_error}}
{{cpp/thread/future_error/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | since=c++11 |
class future_error;
}}
{{dcl end}}

The class {{lc|std::future_error}} defines an exception object that is thrown on failure by the functions in the thread library that deal with asynchronous execution and shared states ({{lc|std::future}}, {{lc|std::promise}}, etc). Similar to {{lc|std::system_error}}, this exception carries an error code compatible with {{lc|std::error_code}}.

{{inheritance diagram/std-future_error}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/future_error/dsc constructor}}
{{dsc inc | cpp/thread/future_error/dsc code}}
{{dsc inc | cpp/thread/future_error/dsc what}}
{{dsc end}}

{{inherited | [[cpp/error/logic_error | {{small|std::}}logic_error]] }}
{{cpp/error/exception/inherit}}

===Example===
{{example
 | 
 | code=
#include &lt;future&gt;
#include &lt;iostream&gt;

int main()
{
    std::future&lt;int&gt; empty;
    try {
        int n = empty.get(); // The behavior is undefined, but
                             // some implementations throw std::future_error
    } catch (const std::future_error&amp; e) {
        std::cout &lt;&lt; &quot;Caught a future_error with code \&quot;&quot; &lt;&lt; e.code()
                  &lt;&lt; &quot;\&quot;\nMessage: \&quot;&quot; &lt;&lt; e.what() &lt;&lt; &quot;\&quot;\n&quot;;
    }
}
|p=true
 | output=
Caught a future_error with code &quot;future:3&quot;
Message: &quot;No associated state&quot;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc future_errc}}
{{dsc end}}

[[de:cpp/thread/future error]]
[[es:cpp/thread/future error]]
[[fr:cpp/thread/future error]]
[[it:cpp/thread/future error]]
[[ja:cpp/thread/future error]]
[[pt:cpp/thread/future error]]
[[ru:cpp/thread/future error]]
[[zh:cpp/thread/future error]]</text>
      <sha1>dilmgyr60u8kq13h6dvjyfnaevt7bx9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future error/code</title>
    <ns>0</ns>
    <id>8976</id>
    <revision>
      <id>91609</id>
      <parentid>63440</parentid>
      <timestamp>2017-03-31T19:51:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="656">{{cpp/thread/future_error/title|code}}
{{cpp/thread/future_error/navbar}}
{{ddcl | since=c++11 |
const std::error_code&amp; code() const;
}}

Returns the stored error code.

===Parameters===
(none)

===Return value===
The stored error code.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future_error/dsc what}}
{{dsc end}}

[[de:cpp/thread/future error/code]]
[[es:cpp/thread/future error/code]]
[[fr:cpp/thread/future error/code]]
[[it:cpp/thread/future error/code]]
[[ja:cpp/thread/future error/code]]
[[pt:cpp/thread/future error/code]]
[[ru:cpp/thread/future error/code]]
[[zh:cpp/thread/future error/code]]</text>
      <sha1>lll6flmrj7hf8vvxuht91a2xqhakc8n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future error/future error</title>
    <ns>0</ns>
    <id>8982</id>
    <revision>
      <id>88398</id>
      <parentid>63441</parentid>
      <timestamp>2016-11-17T19:33:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>P0517r0 (new constructor) and also marked the old constructor exposition-only</comment>
      <text xml:space="preserve" bytes="858">{{cpp/thread/future_error/title|future_error}}
{{cpp/thread/future_error/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++17 |
future_error( std::error_code ec ); // exposition only
}}
{{dcl | since=c++17 |
explicit future_error( std::future_errc ec );
}}
{{dcl rev end}}
{{dcl end}}

Constructs a new future error object containing error code {{rev inl|until=c++17|{{tt|ec}}}}{{rev inl|since=c++17|std::make_error_code(ec)}}.

===Parameters===
{{par begin}}
{{par | ec | error code}}
{{par end}}

[[de:cpp/thread/future error/future error]]
[[es:cpp/thread/future error/future error]]
[[fr:cpp/thread/future error/future error]]
[[it:cpp/thread/future error/future error]]
[[ja:cpp/thread/future error/future error]]
[[pt:cpp/thread/future error/future error]]
[[ru:cpp/thread/future error/future error]]
[[zh:cpp/thread/future error/future error]]</text>
      <sha1>3duzv89eecg8szho7gn34ba6iqqsi61</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future error/what</title>
    <ns>0</ns>
    <id>8975</id>
    <revision>
      <id>91598</id>
      <parentid>63442</parentid>
      <timestamp>2017-03-31T19:51:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="698">{{cpp/thread/future_error/title|what}}
{{cpp/thread/future_error/navbar}}
{{ddcl | since=c++11 |
virtual const char* what() const;
}}

Returns the explanatory string.

===Parameters===
(none)

===Return value===
Pointer to a null-terminated string with explanatory information. 

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future_error/dsc code}}
{{dsc end}}

[[de:cpp/thread/future error/what]]
[[es:cpp/thread/future error/what]]
[[fr:cpp/thread/future error/what]]
[[it:cpp/thread/future error/what]]
[[ja:cpp/thread/future error/what]]
[[pt:cpp/thread/future error/what]]
[[ru:cpp/thread/future error/what]]
[[zh:cpp/thread/future error/what]]</text>
      <sha1>qhy1hxc4b7oq96t4vmpxi9x5bskpq1u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future status</title>
    <ns>0</ns>
    <id>8673</id>
    <revision>
      <id>63443</id>
      <parentid>59182</parentid>
      <timestamp>2013-07-10T01:32:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1195">{{cpp/title|future_status}}
{{cpp/thread/navbar}}
{{ddcl | header=future | since=c++11 | 1=
enum class future_status {
    ready,
    timeout,
    deferred
};
}}

Specifies state of a future as returned by {{tt|wait_for}} and {{tt|wait_until}} functions of {{lc|std::future}} and {{lc|std::shared_future}}.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|deferred}} | the shared state contains a deferred function, so the result will be computed only when explicitly requested}}
{{dsc | {{tt|ready}} | the shared state is ready}}
{{dsc | {{tt|timeout}} | the shared state did not become ready before specified timeout duration has passed}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc wait_for|future}}
{{dsc inc | cpp/thread/future/dsc wait_for|shared_future}}
{{dsc inc | cpp/thread/future/dsc wait_until|future}}
{{dsc inc | cpp/thread/future/dsc wait_until|shared_future}}
{{dsc end}}

[[de:cpp/thread/future status]]
[[es:cpp/thread/future status]]
[[fr:cpp/thread/future status]]
[[it:cpp/thread/future status]]
[[ja:cpp/thread/future status]]
[[pt:cpp/thread/future status]]
[[ru:cpp/thread/future status]]
[[zh:cpp/thread/future status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/future</title>
    <ns>0</ns>
    <id>6452</id>
    <revision>
      <id>91899</id>
      <parentid>62969</parentid>
      <timestamp>2017-03-31T20:01:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1126">{{cpp/thread/future/title|future}}
{{cpp/thread/future/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
future();
}}
{{dcl | num=2 | since=c++11 |
future( future&amp;&amp; other );
}}
{{dcl | num=3 | since=c++11 |
future( const future&amp; other ) {{=}} delete;
}}
{{dcl end}}

Constructs a {{tt|std::future}} object.

@1@ Default constructor. Constructs a {{tt|std::future}} with no shared state.  After construction, [[cpp/thread/future/valid|{{c|valid()}}]] {{c|{{==}} false}}.

@2@ Move constructor. Constructs a {{tt|std::future}} with the shared state of {{tt|other}} using move semantics. After construction, {{c|other.valid() {{==}} false}}.

@3@ {{tt|std::future}} is not {{concept|CopyConstructible}}.

===Parameters===
{{par begin}}
{{par | other | another {{tt|std::future}} to acquire shared state from}}
{{par end}}

===Exceptions===
@1-2@ {{unreviewed noexcept}}

[[de:cpp/thread/future/future]]
[[es:cpp/thread/future/future]]
[[fr:cpp/thread/future/future]]
[[it:cpp/thread/future/future]]
[[ja:cpp/thread/future/future]]
[[pt:cpp/thread/future/future]]
[[ru:cpp/thread/future/future]]
[[zh:cpp/thread/future/future]]</text>
      <sha1>769ktqx4gpdoxx9shanddapwyavh7wu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/future category</title>
    <ns>0</ns>
    <id>8909</id>
    <revision>
      <id>91648</id>
      <parentid>63437</parentid>
      <timestamp>2017-03-31T19:53:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1156">{{cpp/title|future_category}}
{{cpp/thread/future/navbar}}
{{ddcl | header=future | since=c++11 |
const std::error_category&amp; future_category();
}}

Obtains a reference to the static error category object for future object errors. The object is required to override the virtual function {{c|error_category::name()}} to return a pointer to the string {{c|&quot;future&quot;}}. It is used to identify error codes provided in the exceptions of type {{lc|std::future_error}}.

===Parameters===
(none)

===Return value===
A reference to the static object of unspecified runtime type, derived from {{lc|std::error_category}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | 
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc future_error}}
{{dsc inc | cpp/thread/dsc future_errc}}
{{dsc end}}

[[de:cpp/thread/future/future category]]
[[es:cpp/thread/future/future category]]
[[fr:cpp/thread/future/future category]]
[[it:cpp/thread/future/future category]]
[[ja:cpp/thread/future/future category]]
[[pt:cpp/thread/future/future category]]
[[ru:cpp/thread/future/future category]]
[[zh:cpp/thread/future/future category]]</text>
      <sha1>c9gckqlhnbw1i3zclusokpibg58b08q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/get</title>
    <ns>0</ns>
    <id>5032</id>
    <revision>
      <id>51356</id>
      <parentid>43862</parentid>
      <timestamp>2013-06-01T04:00:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="278">{{include page|cpp/thread/future/get|future}}

[[de:cpp/thread/future/get]]
[[es:cpp/thread/future/get]]
[[fr:cpp/thread/future/get]]
[[it:cpp/thread/future/get]]
[[ja:cpp/thread/future/get]]
[[pt:cpp/thread/future/get]]
[[ru:cpp/thread/future/get]]
[[zh:cpp/thread/future/get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/operator=</title>
    <ns>0</ns>
    <id>8680</id>
    <revision>
      <id>91624</id>
      <parentid>62970</parentid>
      <timestamp>2017-03-31T19:52:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1114">{{cpp/thread/future/title | operator{{=}}}}
{{cpp/thread/future/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
future&amp; operator=( future&amp;&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
future&amp; operator=( const future&amp; other ) = delete;
}}
{{dcl end}}

Assigns the contents of another future object.

1) Releases any shared state and move-assigns the contents of {{tt|other}} to {{c|*this}}. After the assignment, {{c|other.valid() {{==}} false}} and [[cpp/thread/future/valid|{{c|this-&gt;valid()}}]] will yield the same value as {{c|other.valid()}} before the assignment.

2) {{lc|std::future}} is not {{concept|CopyAssignable}}.

===Parameters===
{{par begin}}
{{par | other | a {{tt|std::future}} that will transfer state to {{c|*this}} }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/thread/future/operator=]]
[[es:cpp/thread/future/operator=]]
[[fr:cpp/thread/future/operator=]]
[[it:cpp/thread/future/operator=]]
[[ja:cpp/thread/future/operator=]]
[[pt:cpp/thread/future/operator=]]
[[ru:cpp/thread/future/operator=]]
[[zh:cpp/thread/future/operator=]]</text>
      <sha1>sv5dq9elpz7ln1e6y6jkgjl99kbzo7z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/share</title>
    <ns>0</ns>
    <id>8681</id>
    <revision>
      <id>91556</id>
      <parentid>88376</parentid>
      <timestamp>2017-03-31T19:49:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1325">{{cpp/thread/future/title | share}}
{{cpp/thread/future/navbar}}
{{ddcl | note={{mark since c++11}} |
std::shared_future&lt;T&gt; share();
}}

Transfers the shared state of {{c|*this}}, if any, to a {{lc|std::shared_future}} object.  Multiple {{lc|std::shared_future}} objects may reference the same shared state, which is not possible with {{lc|std::future}}.

After calling {{tt|share}} on a {{lc|std::future}}, [[cpp/thread/future/valid|{{c|valid()}}]] {{c| {{==}} false}}.

===Parameters===
(none)

===Return value===
A {{lc|std::shared_future}} object containing the shared state previously held by {{c|*this}}, if any, constructed as if by {{c|std::shared_future&lt;T&gt;(std:move(*this))}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|
 | code=
 | output=
}}

=== Defect reports ===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2556|std=C++11|before={{tt|share()}} requires {{tt|valid()}} to be {{tt|true}}|after=requirement removed and made {{tt|noexcept}}}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc shared_future}}
{{dsc end}}

[[de:cpp/thread/future/share]]
[[es:cpp/thread/future/share]]
[[fr:cpp/thread/future/share]]
[[it:cpp/thread/future/share]]
[[ja:cpp/thread/future/share]]
[[pt:cpp/thread/future/share]]
[[ru:cpp/thread/future/share]]
[[zh:cpp/thread/future/share]]</text>
      <sha1>m9ed8qc7ds0bjpc6kpgpv5bz035obw1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/valid</title>
    <ns>0</ns>
    <id>5042</id>
    <revision>
      <id>51359</id>
      <parentid>43843</parentid>
      <timestamp>2013-06-01T04:00:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="296">{{include page|cpp/thread/future/valid|future}}

[[de:cpp/thread/future/valid]]
[[es:cpp/thread/future/valid]]
[[fr:cpp/thread/future/valid]]
[[it:cpp/thread/future/valid]]
[[ja:cpp/thread/future/valid]]
[[pt:cpp/thread/future/valid]]
[[ru:cpp/thread/future/valid]]
[[zh:cpp/thread/future/valid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/wait</title>
    <ns>0</ns>
    <id>5043</id>
    <revision>
      <id>51360</id>
      <parentid>43836</parentid>
      <timestamp>2013-06-01T04:00:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="287">{{include page|cpp/thread/future/wait|future}}

[[de:cpp/thread/future/wait]]
[[es:cpp/thread/future/wait]]
[[fr:cpp/thread/future/wait]]
[[it:cpp/thread/future/wait]]
[[ja:cpp/thread/future/wait]]
[[pt:cpp/thread/future/wait]]
[[ru:cpp/thread/future/wait]]
[[zh:cpp/thread/future/wait]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/wait for</title>
    <ns>0</ns>
    <id>5046</id>
    <revision>
      <id>51361</id>
      <parentid>43830</parentid>
      <timestamp>2013-06-01T04:00:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="323">{{include page|cpp/thread/future/wait_for|future}}

[[de:cpp/thread/future/wait for]]
[[es:cpp/thread/future/wait for]]
[[fr:cpp/thread/future/wait for]]
[[it:cpp/thread/future/wait for]]
[[ja:cpp/thread/future/wait for]]
[[pt:cpp/thread/future/wait for]]
[[ru:cpp/thread/future/wait for]]
[[zh:cpp/thread/future/wait for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/wait until</title>
    <ns>0</ns>
    <id>5044</id>
    <revision>
      <id>82871</id>
      <parentid>82870</parentid>
      <timestamp>2016-01-11T19:00:33Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>relocating the newly added example (‎70.198.47.129, you could have used a Talk page)</comment>
      <text xml:space="preserve" bytes="341">{{include page|cpp/thread/future/wait_until|future}}

[[de:cpp/thread/future/wait until]]
[[es:cpp/thread/future/wait until]]
[[fr:cpp/thread/future/wait until]]
[[it:cpp/thread/future/wait until]]
[[ja:cpp/thread/future/wait until]]
[[pt:cpp/thread/future/wait until]]
[[ru:cpp/thread/future/wait until]]
[[zh:cpp/thread/future/wait until]]</text>
      <sha1>pnwqoafth19lpkziroceifhdp4hhy29</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/future/~future</title>
    <ns>0</ns>
    <id>6453</id>
    <revision>
      <id>82924</id>
      <parentid>72333</parentid>
      <timestamp>2016-01-15T05:48:55Z</timestamp>
      <contributor>
        <username>TBBle</username>
        <id>4878</id>
      </contributor>
      <comment>Marked third aspect of releasing shared state as being specified for C++14 only</comment>
      <text xml:space="preserve" bytes="908">{{cpp/thread/future/title | ~future}}
{{cpp/thread/future/navbar}}
{{ddcl | since=c++11 |
~future();
}}

Releases any shared state. This means
* if the return object or provider holds the last reference to its shared state, the shared state is destroyed; and
* the return object or provider gives up its reference to its shared state; and
{{rev begin}}
{{rev|since=c++14|
* these actions will not block for the shared state to become ready, except that it may block if all of the following are true: the shared state was created by a call to std::async, the shared state is not yet ready, and this was the last reference to the shared state.
}}
[[de:cpp/thread/future/~future]]
[[es:cpp/thread/future/~future]]
[[fr:cpp/thread/future/~future]]
[[it:cpp/thread/future/~future]]
[[ja:cpp/thread/future/~future]]
[[pt:cpp/thread/future/~future]]
[[ru:cpp/thread/future/~future]]
[[zh:cpp/thread/future/~future]]</text>
      <sha1>b60upcsq8xgicgwv0uceq27gucetf1k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/get id</title>
    <ns>0</ns>
    <id>2298</id>
    <revision>
      <id>91523</id>
      <parentid>90297</parentid>
      <timestamp>2017-03-31T19:48:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1199">{{cpp/title|n=this_thread::|get_id}}
{{cpp/thread/navbar}}
{{ddcl | header=thread | since=c++11 | 1=
std::thread::id get_id();
}} 

Returns the ''id'' of the current thread.

===Parameters===
(none)

===Return value===
''id'' of the current thread

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
#include &lt;mutex&gt;

std::mutex g_display_mutex;

void foo()
{
    std::thread::id this_id = std::this_thread::get_id();

    g_display_mutex.lock();
    std::cout &lt;&lt; &quot;thread &quot; &lt;&lt; this_id &lt;&lt; &quot; sleeping...\n&quot;;
    g_display_mutex.unlock();

    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    std::thread t1(foo);
    std::thread t2(foo);

    t1.join();
    t2.join();
}
 | output=
thread 0x2384b312 sleeping...
thread 0x228a10fc sleeping...
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc get_id | mem=std::thread}}
{{dsc see c | c/thread/thrd_current}}
{{dsc end}}

[[de:cpp/thread/get id]]
[[es:cpp/thread/get id]]
[[fr:cpp/thread/get id]]
[[it:cpp/thread/get id]]
[[ja:cpp/thread/get id]]
[[pt:cpp/thread/get id]]
[[ru:cpp/thread/get id]]
[[zh:cpp/thread/get id]]</text>
      <sha1>ss69opcrmdptvepitvwj8yemiyz1bjj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/hardware destructive interference size</title>
    <ns>0</ns>
    <id>14758</id>
    <revision>
      <id>90721</id>
      <parentid>88250</parentid>
      <timestamp>2017-03-08T18:32:54Z</timestamp>
      <contributor>
        <ip>223.3.175.127</ip>
      </contributor>
      <text xml:space="preserve" bytes="1823">{{cpp/title | hardware_destructive_interference_size|hardware_constructive_interference_size}}
{{cpp/thread/navbar}}
{{dcl begin}}
{{dcl header|new}}
{{dcl | since=c++17 |num=1|1=
inline constexpr std::size_t
    hardware_destructive_interference_size = /*implementation-defined*/;
}}
{{dcl | since=c++17 |num=2|1=
inline constexpr std::size_t
    hardware_constructive_interference_size = /*implementation-defined*/;
}}
{{dcl end}}

@1@ Minimum offset between two objects to avoid false sharing. Guaranteed to be at least {{c|alignof(std::max_align_t)}}
{{source|1=
struct keep_apart {
  alignas(std::hardware_destructive_interference_size) std::atomic&lt;int&gt; cat;
  alignas(std::hardware_destructive_interference_size) std::atomic&lt;int&gt; dog;
};
}}
@2@ Maximum size of contiguous memory to promote true sharing. Guaranteed to be at least {{c|alignof(std::max_align_t)}}
{{source|1=
struct together {
  atomic&lt;int&gt; dog;
  int puppy;
};
struct kennel {
  // Other data members...
  alignas(sizeof(together)) together pack;
  // Other data members...
};
static_assert(sizeof(together) &lt;= std::hardware_constructive_interference_size);
}}

===Notes===
These constants provide a portable way to access the L1 data cache line size.

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc hardware_concurrency}}
{{dsc end}}

[[de:cpp/thread/hardware_destructive_interference_size]]
[[es:cpp/thread/hardware_destructive_interference_size]]
[[fr:cpp/thread/hardware_destructive_interference_size]]
[[it:cpp/thread/hardware_destructive_interference_size]]
[[ja:cpp/thread/hardware_destructive_interference_size]]
[[pt:cpp/thread/hardware_destructive_interference_size]]
[[ru:cpp/thread/hardware_destructive_interference_size]]
[[zh:cpp/thread/hardware_destructive_interference_size]]</text>
      <sha1>465f793q9zul5klj0xwdzsfbfe734sd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/launch</title>
    <ns>0</ns>
    <id>8672</id>
    <revision>
      <id>64151</id>
      <parentid>63445</parentid>
      <timestamp>2013-08-15T04:08:50Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>c++14 (issue 2102)</comment>
      <text xml:space="preserve" bytes="1324">{{cpp/title|launch}}
{{cpp/thread/navbar}}
{{ddcl | header=future | since=c++11 | 1=
enum class launch : /* unspecified */ {
    async =    /* unspecified */,
    deferred = /* unspecified */,
    /* implementation-defined */
};
}}

Specifies the launch policy for a task executed by the {{lc|std::async}} function. {{tt|std::launch}} is an enumeration used as {{concept|BitmaskType}}.

The following constants denoting individual bits are defined by the standard library:

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|std::launch::async}} | a new thread is launched to execute the task asynchronously }}
{{dsc | {{tt|std::launch::deferred}} | the task is executed on the calling thread the first time its result is requested (lazy evaluation) }}
{{dsc end}}

In addition, implementations are allowed to:

* define additional bits and bitmasks to specify restrictions on task interactions applicable to a subset of launch policies, and
* enable those additional bitmasks for the first (default) overload of {{lc|std::async}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc async}}
{{dsc end}}

[[de:cpp/thread/launch]]
[[es:cpp/thread/launch]]
[[fr:cpp/thread/launch]]
[[it:cpp/thread/launch]]
[[ja:cpp/thread/launch]]
[[pt:cpp/thread/launch]]
[[ru:cpp/thread/launch]]
[[zh:cpp/thread/launch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/lock</title>
    <ns>0</ns>
    <id>2503</id>
    <revision>
      <id>87851</id>
      <parentid>85710</parentid>
      <timestamp>2016-10-06T19:56:34Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/'s is/s are/</comment>
      <text xml:space="preserve" bytes="4366">{{cpp/title|lock}}
{{cpp/thread/navbar}}
{{ddcl | header=mutex | since=c++11 |
template&lt; class Lockable1, class Lockable2, class... LockableN &gt;
void lock( Lockable1&amp; lock1, Lockable2&amp; lock2, LockableN&amp;... lockn );
}}

Locks the given {{concept|Lockable}} objects {{tt|lock1}}, {{tt|lock2}}, {{tt|...}}, {{tt|lockn}} using a deadlock avoidance algorithm to avoid deadlock.

The objects are locked by an unspecified series of calls to {{tt|lock}}, {{tt|try_lock}}, {{tt|unlock}}.  If a call to {{tt|lock}} or {{tt|unlock}} results in an exception, {{tt|unlock}} is called for any locked objects before rethrowing.

===Parameters===
{{par begin}}
{{par | lock1, lock2, ... , lockn | the {{concept|Lockable}} objects to lock}}
{{par end}}

===Return value===
(none)

===Notes===
[http://www.boost.org/doc/libs/release/doc/html/thread/synchronization.html#thread.synchronization.lock_functions.lock_range Boost provides a version of this function] that takes a sequence of {{concept|Lockable}} objects defined by a pair of iterators.

===Example===
{{example|The following example uses {{tt|std::lock}} to lock pairs of mutexes without deadlock.
 | code=
#include &lt;mutex&gt;
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;functional&gt;
#include &lt;chrono&gt;
#include &lt;string&gt;
 
struct Employee {
    Employee(std::string id) : id(id) {}
    std::string id;
    std::vector&lt;std::string&gt; lunch_partners;
    std::mutex m;
    std::string output() const
    {
        std::string ret = &quot;Employee &quot; + id + &quot; has lunch partners: &quot;;
        for( const auto&amp; partner : lunch_partners )
            ret += partner + &quot; &quot;;
        return ret;
    }
};
 
void send_mail(Employee &amp;, Employee &amp;)
{
    // simulate a time-consuming messaging operation
    std::this_thread::sleep_for(std::chrono::seconds(1));
}
 
void assign_lunch_partner(Employee &amp;e1, Employee &amp;e2)
{
    static std::mutex io_mutex;
    {
        std::lock_guard&lt;std::mutex&gt; lk(io_mutex);
        std::cout &lt;&lt; e1.id &lt;&lt; &quot; and &quot; &lt;&lt; e2.id &lt;&lt; &quot; are waiting for locks&quot; &lt;&lt; std::endl;
    }

    // use std::lock to acquire two locks without worrying about 
    // other calls to assign_lunch_partner deadlocking us
    {
        std::lock(e1.m, e2.m);
        std::lock_guard&lt;std::mutex&gt; lk1(e1.m, std::adopt_lock);
        std::lock_guard&lt;std::mutex&gt; lk2(e2.m, std::adopt_lock);
// Equivalent code (if unique_locks are needed, e.g. for condition variables)
//        std::unique_lock&lt;std::mutex&gt; lk1(e1.m, std::defer_lock);
//        std::unique_lock&lt;std::mutex&gt; lk2(e2.m, std::defer_lock);
//        std::lock(lk1, lk2);
        {
            std::lock_guard&lt;std::mutex&gt; lk(io_mutex);
            std::cout &lt;&lt; e1.id &lt;&lt; &quot; and &quot; &lt;&lt; e2.id &lt;&lt; &quot; got locks&quot; &lt;&lt; std::endl;
        }
        e1.lunch_partners.push_back(e2.id);
        e2.lunch_partners.push_back(e1.id);
    }
    send_mail(e1, e2);
    send_mail(e2, e1);
}
 
int main()
{
    Employee alice(&quot;alice&quot;), bob(&quot;bob&quot;), christina(&quot;christina&quot;), dave(&quot;dave&quot;);
 
    // assign in parallel threads because mailing users about lunch assignments
    // takes a long time
    std::vector&lt;std::thread&gt; threads;
    threads.emplace_back(assign_lunch_partner, std::ref(alice), std::ref(bob));
    threads.emplace_back(assign_lunch_partner, std::ref(christina), std::ref(bob));
    threads.emplace_back(assign_lunch_partner, std::ref(christina), std::ref(alice));
    threads.emplace_back(assign_lunch_partner, std::ref(dave), std::ref(bob));
 
    for (auto &amp;thread : threads) thread.join();
    std::cout &lt;&lt; alice.output() &lt;&lt; '\n'  &lt;&lt; bob.output() &lt;&lt; '\n'
              &lt;&lt; christina.output() &lt;&lt; '\n' &lt;&lt; dave.output() &lt;&lt; '\n';
}
|p=true
| output=
alice and bob are waiting for locks
alice and bob got locks
christina and bob are waiting for locks
christina and bob got locks
christina and alice are waiting for locks
christina and alice got locks
dave and bob are waiting for locks
dave and bob got locks
Employee alice has lunch partners: bob christina 
Employee bob has lunch partners: alice christina dave 
Employee christina has lunch partners: bob alice 
Employee dave has lunch partners: bob 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc try_lock}}
{{dsc end}}

[[de:cpp/thread/lock]]
[[es:cpp/thread/lock]]
[[fr:cpp/thread/lock]]
[[it:cpp/thread/lock]]
[[ja:cpp/thread/lock]]
[[pt:cpp/thread/lock]]
[[ru:cpp/thread/lock]]
[[zh:cpp/thread/lock]]</text>
      <sha1>dnwrbipetpqw87cnrlkdx6dyuvhng78</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/lock guard</title>
    <ns>0</ns>
    <id>2615</id>
    <revision>
      <id>89045</id>
      <parentid>89030</parentid>
      <timestamp>2016-12-22T22:05:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso scoped_lock</comment>
      <text xml:space="preserve" bytes="2179">{{cpp/title|lock_guard}}
{{cpp/thread/lock_guard/navbar}}
{{dcl begin}}
{{dcl header|mutex}}
{{dcl |
template&lt; class Mutex &gt;
class lock_guard;
}}
{{dcl end}}

The class {{tt|lock_guard}} is a mutex wrapper that provides a convenient [[enwiki:Resource_Acquisition_Is_Initialization|RAII-style]] mechanism for owning a mutex for the duration of a scoped block.  

When a {{tt|lock_guard}} object is created, it attempts to take ownership of the mutex it is given. When control leaves the scope in which the {{tt|lock_guard}} object was created, the {{tt|lock_guard}} is destructed and the mutex is released.

The {{tt|lock_guard}} class is non-copyable.

===Template parameters===
{{par begin}}
{{par | Mutex | the type of the mutex to lock. The type must meet the {{concept|BasicLockable}} requirements}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|mutex_type}} | Mutex}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/lock_guard/dsc constructor}}
{{dsc inc | cpp/thread/lock_guard/dsc destructor}}
{{dsc inc | cpp/thread/lock_guard/dsc operator{{=}}}}
{{dsc end}}

===Example===
{{example|
 | code=
#include &lt;thread&gt;
#include &lt;mutex&gt;
#include &lt;iostream&gt;

int g_i = 0;
std::mutex g_i_mutex;  // protects g_i

void safe_increment()
{
    std::lock_guard&lt;std::mutex&gt; lock(g_i_mutex);
    ++g_i;

    std::cout &lt;&lt; std::this_thread::get_id() &lt;&lt; &quot;: &quot; &lt;&lt; g_i &lt;&lt; '\n';

    // g_i_mutex is automatically released when lock
    // goes out of scope
}

int main()
{
    std::cout &lt;&lt; __func__ &lt;&lt; &quot;: &quot; &lt;&lt; g_i &lt;&lt; '\n';

    std::thread t1(safe_increment);
    std::thread t2(safe_increment);

    t1.join();
    t2.join();

    std::cout &lt;&lt; __func__ &lt;&lt; &quot;: &quot; &lt;&lt; g_i &lt;&lt; '\n';
}
 | p=true
 | output=
main: 0
140641306900224: 1
140641298507520: 2
main: 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc unique_lock}}
{{dsc inc | cpp/thread/dsc scoped_lock}}
{{dsc end}}

[[de:cpp/thread/lock guard]]
[[es:cpp/thread/lock guard]]
[[fr:cpp/thread/lock guard]]
[[it:cpp/thread/lock guard]]
[[ja:cpp/thread/lock guard]]
[[pt:cpp/thread/lock guard]]
[[ru:cpp/thread/lock guard]]
[[zh:cpp/thread/lock guard]]</text>
      <sha1>g5ew4pon17h2sx5ysm97c6ovykm37br</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/lock guard/lock guard</title>
    <ns>0</ns>
    <id>4451</id>
    <revision>
      <id>90544</id>
      <parentid>90543</parentid>
      <timestamp>2017-03-04T04:22:58Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>since c++11</comment>
      <text xml:space="preserve" bytes="1377">{{cpp/thread/lock_guard/title|lock_guard}}
{{cpp/thread/lock_guard/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
explicit lock_guard( mutex_type&amp; m );
}}
{{dcl | num=2 |since=c++11 |
lock_guard( mutex_type&amp; m, std::adopt_lock_t t );
}}
{{dcl | num=3 | since=c++11 |1=
lock_guard( const lock_guard&amp; ) = delete;
}}
{{dcl end}}

Acquires ownership of the given mutex {{tt|m}}.

@1@ Effectively calls {{c|m.lock()}}. The behavior is undefined if {{tt|m}} is not a recursive mutex and the current thread already owns {{tt|m}}.
@2@ Acquires ownership of the mutex {{c|m}} without attempting to lock it. The behavior is undefined if the current thread does not own {{tt|m}}.
@3@ Copy constructor is deleted.

The behavior is undefined if {{tt|m}} is destroyed before the {{tt|lock_guard}} object is.

===Parameters===
{{par begin}}
{{par | m | mutex to acquire ownership of}}
{{par | t | tag parameter used to select non-locking version of the constructor}}
{{par end}}

===Exceptions===
1) Throws any exceptions thrown by {{c|m.lock()}}

2) Throws nothing

[[de:cpp/thread/lock guard/lock guard]]
[[es:cpp/thread/lock guard/lock guard]]
[[fr:cpp/thread/lock guard/lock guard]]
[[it:cpp/thread/lock guard/lock guard]]
[[ja:cpp/thread/lock guard/lock guard]]
[[pt:cpp/thread/lock guard/lock guard]]
[[ru:cpp/thread/lock guard/lock guard]]
[[zh:cpp/thread/lock guard/lock guard]]</text>
      <sha1>67zps24f2i1n6ielhbx7u574ztpdkqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/lock guard/~lock guard</title>
    <ns>0</ns>
    <id>4453</id>
    <revision>
      <id>90548</id>
      <parentid>81574</parentid>
      <timestamp>2017-03-04T04:28:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>undo variadic lock_guard per P0156R2 / lwg motion 17</comment>
      <text xml:space="preserve" bytes="601">{{cpp/thread/lock_guard/title|~lock_guard}}
{{cpp/thread/lock_guard/navbar}}
{{ddcl | since=c++11 |
~lock_guard();
}}

Releases the ownership of the owned mutex.

Effectively calls {{c|m.unlock()}} where {{tt|m}} is the mutex passed to the {{tt|lock_guard}}'s constructor.

[[de:cpp/thread/lock guard/~lock guard]]
[[es:cpp/thread/lock guard/~lock guard]]
[[fr:cpp/thread/lock guard/~lock guard]]
[[it:cpp/thread/lock guard/~lock guard]]
[[ja:cpp/thread/lock guard/~lock guard]]
[[pt:cpp/thread/lock guard/~lock guard]]
[[ru:cpp/thread/lock guard/~lock guard]]
[[zh:cpp/thread/lock guard/~lock guard]]</text>
      <sha1>h5e4kb3mmm2qvknhnc945vr7gd8tt9e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/lock tag</title>
    <ns>0</ns>
    <id>4472</id>
    <revision>
      <id>90932</id>
      <parentid>83566</parentid>
      <timestamp>2017-03-14T12:45:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="1414">{{cpp/title|defer_lock|try_to_lock|adopt_lock}}
{{cpp/thread/navbar}}
{{dcl begin}}
{{dcl header | mutex}}
{{dcl rev multi| since1=c++11 | dcl1=
constexpr std::defer_lock_t defer_lock {};
|since2=c++17|dcl2=
inline constexpr std::defer_lock_t defer_lock {};
}}
{{dcl rev multi| since1=c++11 | dcl1=
constexpr std::try_to_lock_t try_to_lock {};
|since2=c++17|dcl2=
inline constexpr std::try_to_lock_t try_to_lock {};
}}
{{dcl rev multi| since1=c++11 | dcl1=
constexpr std::adopt_lock_t adopt_lock {};
|since2=c++17|dcl2=
inline constexpr std::adopt_lock_t adopt_lock {};
}}
{{dcl end}}

{{tt|std::defer_lock}}, {{tt|std::try_to_lock}} and {{tt|std::adopt_lock}} are instances of empty struct tag types {{lc|std::defer_lock_t}}, {{lc|std::try_to_lock_t}} and {{lc|std::adopt_lock_t}} respectively. 

They are used to specify locking strategies for {{lc|std::lock_guard}}, {{lc|std::unique_lock}}  and {{lc|std::shared_lock}}.

{{cpp/thread/lock_tag_types}}

===Example===
{{include| cpp/thread/example_lock_tag}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc lock_tag_t}}
{{dsc inc | cpp/thread/lock_guard/dsc constructor}}
{{dsc inc | cpp/thread/unique_lock/dsc constructor}}
{{dsc end}}

[[de:cpp/thread/lock tag]]
[[es:cpp/thread/lock tag]]
[[fr:cpp/thread/lock tag]]
[[it:cpp/thread/lock tag]]
[[ja:cpp/thread/lock tag]]
[[pt:cpp/thread/lock tag]]
[[ru:cpp/thread/lock tag]]
[[zh:cpp/thread/lock tag]]</text>
      <sha1>noftrf76fc0kpx3vv2o1c01sqyyjt2d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/lock tag t</title>
    <ns>0</ns>
    <id>4471</id>
    <revision>
      <id>92033</id>
      <parentid>88368</parentid>
      <timestamp>2017-04-03T09:34:52Z</timestamp>
      <contributor>
        <ip>97.113.7.148</ip>
      </contributor>
      <text xml:space="preserve" bytes="1204">{{cpp/title|defer_lock_t|try_to_lock_t|adopt_lock_t}}
{{cpp/thread/navbar}}
{{dcl begin}}
{{dcl header | mutex}}
{{dcl | since=c++11 | until=c++17 |
struct defer_lock_t { };
struct try_to_lock_t { };
struct adopt_lock_t { };
}}
{{dcl | since=c++17 |1=
struct defer_lock_t { explicit defer_lock_t() = default; };
struct try_to_lock_t { explicit try_to_lock_t() = default; };
struct adopt_lock_t { explicit adopt_lock_t() = default; };
}}

{{dcl end}}

{{tt|std::defer_lock_t}}, {{tt|std::try_to_lock_t}} and {{tt|std::adopt_lock_t}} are empty struct tag types used to specify locking strategy for {{lc|std::lock_guard}}, {{lc|std::scoped_lock}}, {{lc|std::unique_lock}}, and {{lc|std::shared_lock}}.


{{cpp/thread/lock_tag_types}}

===Example===
{{include| cpp/thread/example_lock_tag}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc lock_tag}}
{{dsc inc | cpp/thread/lock_guard/dsc constructor}}
{{dsc inc | cpp/thread/unique_lock/dsc constructor}}
{{dsc end}}

[[de:cpp/thread/lock tag t]]
[[es:cpp/thread/lock tag t]]
[[fr:cpp/thread/lock tag t]]
[[it:cpp/thread/lock tag t]]
[[ja:cpp/thread/lock tag t]]
[[pt:cpp/thread/lock tag t]]
[[ru:cpp/thread/lock tag t]]
[[zh:cpp/thread/lock tag t]]</text>
      <sha1>2pqulkszb6ensz9rej63r8kzzvlb8w0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/mutex</title>
    <ns>0</ns>
    <id>2291</id>
    <revision>
      <id>89024</id>
      <parentid>85222</parentid>
      <timestamp>2016-12-22T21:06:05Z</timestamp>
      <contributor>
        <ip>74.113.166.198</ip>
      </contributor>
      <comment>mention vararg scoped_lock, Issaquah 2016</comment>
      <text xml:space="preserve" bytes="3308">{{cpp/title|mutex}}
{{cpp/thread/mutex/navbar}}
{{ddcl | header=mutex | since=c++11 | 1=
class mutex;
}}

The {{tt|mutex}} class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads.

{{tt|mutex}} offers exclusive, non-recursive ownership semantics:

* A calling thread ''owns'' a {{tt|mutex}} from the time that it successfully calls either [[cpp/thread/mutex/lock|{{tt|lock}}]] or [[cpp/thread/mutex/try_lock|{{tt|try_lock}}]] until it calls [[cpp/thread/mutex/unlock|{{tt|unlock}}]].
* When a thread owns a {{tt|mutex}}, all other threads will block (for calls to [[cpp/thread/mutex/lock|{{tt|lock}}]]) or receive a {{c|false}} return value (for [[cpp/thread/mutex/try_lock|{{tt|try_lock}}]]) if they attempt to claim ownership of the {{tt|mutex}}.
* A calling thread must not own the {{tt|mutex}} prior to calling [[cpp/thread/mutex/lock|{{tt|lock}}]] or [[cpp/thread/mutex/try_lock|{{tt|try_lock}}]].

The behavior of a program is undefined if a {{tt|mutex}} is destroyed while still owned by any threads, or a thread terminates while owning a {{tt|mutex}}.  The {{tt|mutex}} class satisfies all requirements of {{concept|Mutex}} and {{concept|StandardLayoutType}}.

{{tt|std::mutex}} is neither copyable nor movable.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|native_handle_type}}{{mark optional}} | ''implementation-defined''}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc constructor | mutex}}
{{dsc inc | cpp/thread/mutex/dsc destructor | mutex}}
{{dsc inc | cpp/thread/mutex/dsc operator{{=}}}}

{{dsc h2 | Locking}}
{{dsc inc | cpp/thread/mutex/dsc lock | mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | mutex}}

{{dsc h2 | Native handle}}
{{dsc inc | cpp/thread/mutex/dsc native_handle | mutex}}
{{dsc end}}

===Notes===
{{tt|std::mutex}} is usually not accessed directly: {{lc|std::unique_lock}}, {{lc|std::lock_guard}}, {{rev inl|since=c++17| or {{lc|std::scoped_lock}} }} manage locking in a more exception-safe manner.

===Example===
{{example
 | This example shows how a {{tt|mutex}} can be used to protect a {{lc|std::map}} shared between two threads.
 | code=
#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;string&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;
#include &lt;mutex&gt;

std::map&lt;std::string, std::string&gt; g_pages;
std::mutex g_pages_mutex;

void save_page(const std::string &amp;url)
{
    // simulate a long page fetch
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::string result = &quot;fake content&quot;;

    std::lock_guard&lt;std::mutex&gt; guard(g_pages_mutex);
    g_pages[url] = result;
}

int main() 
{
    std::thread t1(save_page, &quot;http://foo&quot;);
    std::thread t2(save_page, &quot;http://bar&quot;);
    t1.join();
    t2.join();

    // safe to access g_pages without lock now, as the threads are joined
    for (const auto &amp;pair : g_pages) {
        std::cout &lt;&lt; pair.first &lt;&lt; &quot; =&gt; &quot; &lt;&lt; pair.second &lt;&lt; '\n';
    }
}
 | output=
http://bar =&gt; fake content
http://foo =&gt; fake content
}}

[[de:cpp/thread/mutex]]
[[es:cpp/thread/mutex]]
[[fr:cpp/thread/mutex]]
[[it:cpp/thread/mutex]]
[[ja:cpp/thread/mutex]]
[[pt:cpp/thread/mutex]]
[[ru:cpp/thread/mutex]]
[[zh:cpp/thread/mutex]]</text>
      <sha1>i8r07649m3am4rqxxs0c3m7ozcn43qs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/mutex/lock</title>
    <ns>0</ns>
    <id>2329</id>
    <revision>
      <id>51378</id>
      <parentid>43727</parentid>
      <timestamp>2013-06-01T04:01:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="277">{{include page|cpp/thread/mutex/lock|mutex}}

[[de:cpp/thread/mutex/lock]]
[[es:cpp/thread/mutex/lock]]
[[fr:cpp/thread/mutex/lock]]
[[it:cpp/thread/mutex/lock]]
[[ja:cpp/thread/mutex/lock]]
[[pt:cpp/thread/mutex/lock]]
[[ru:cpp/thread/mutex/lock]]
[[zh:cpp/thread/mutex/lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/mutex/mutex</title>
    <ns>0</ns>
    <id>4488</id>
    <revision>
      <id>91599</id>
      <parentid>90380</parentid>
      <timestamp>2017-03-31T19:51:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1031">{{cpp/thread/mutex/title|mutex}}
{{cpp/thread/mutex/navbar}}
{{dcl begin}}
{{dcl | num=1 |since=c++11 |
constexpr mutex();
}}
{{dcl | num=2 |since=c++11 |1=
mutex( const mutex&amp; ) = delete;
}}
{{dcl end}}

@1@ Constructs the mutex. The mutex is in unlocked state after the constructor completes.

@2@ Copy constructor is deleted.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Notes===
Because the default constructor is {{tt|constexpr}}, static mutexes are initialized as part of [[cpp/language/initialization#Non-local_variables|static non-local initialization]], before any dynamic non-local initialization begins. This makes it safe to lock a mutex in a constructor of any static object.

===See also===
{{dsc begin}}
{{dsc see c | c/thread/mtx_init}}
{{dsc end}}

[[de:cpp/thread/mutex/mutex]]
[[es:cpp/thread/mutex/mutex]]
[[fr:cpp/thread/mutex/mutex]]
[[it:cpp/thread/mutex/mutex]]
[[ja:cpp/thread/mutex/mutex]]
[[pt:cpp/thread/mutex/mutex]]
[[ru:cpp/thread/mutex/mutex]]
[[zh:cpp/thread/mutex/mutex]]</text>
      <sha1>he3x013nf4exfs5od4ir22h5at89xde</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/mutex/native handle</title>
    <ns>0</ns>
    <id>2332</id>
    <revision>
      <id>51380</id>
      <parentid>43717</parentid>
      <timestamp>2013-06-01T04:01:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="358">{{include page|cpp/thread/mutex/native_handle|mutex}}

[[de:cpp/thread/mutex/native handle]]
[[es:cpp/thread/mutex/native handle]]
[[fr:cpp/thread/mutex/native handle]]
[[it:cpp/thread/mutex/native handle]]
[[ja:cpp/thread/mutex/native handle]]
[[pt:cpp/thread/mutex/native handle]]
[[ru:cpp/thread/mutex/native handle]]
[[zh:cpp/thread/mutex/native handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/mutex/try lock</title>
    <ns>0</ns>
    <id>2330</id>
    <revision>
      <id>51381</id>
      <parentid>43711</parentid>
      <timestamp>2013-06-01T04:01:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="313">{{include page|cpp/thread/mutex/try_lock|mutex}}

[[de:cpp/thread/mutex/try lock]]
[[es:cpp/thread/mutex/try lock]]
[[fr:cpp/thread/mutex/try lock]]
[[it:cpp/thread/mutex/try lock]]
[[ja:cpp/thread/mutex/try lock]]
[[pt:cpp/thread/mutex/try lock]]
[[ru:cpp/thread/mutex/try lock]]
[[zh:cpp/thread/mutex/try lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/mutex/unlock</title>
    <ns>0</ns>
    <id>2331</id>
    <revision>
      <id>51382</id>
      <parentid>43705</parentid>
      <timestamp>2013-06-01T04:01:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="295">{{include page|cpp/thread/mutex/unlock|mutex}}

[[de:cpp/thread/mutex/unlock]]
[[es:cpp/thread/mutex/unlock]]
[[fr:cpp/thread/mutex/unlock]]
[[it:cpp/thread/mutex/unlock]]
[[ja:cpp/thread/mutex/unlock]]
[[pt:cpp/thread/mutex/unlock]]
[[ru:cpp/thread/mutex/unlock]]
[[zh:cpp/thread/mutex/unlock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/mutex/~mutex</title>
    <ns>0</ns>
    <id>13124</id>
    <revision>
      <id>67048</id>
      <parentid>67029</parentid>
      <timestamp>2014-01-18T14:02:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fwd to template</comment>
      <text xml:space="preserve" bytes="50">{{include page|cpp/thread/mutex/destructor|mutex}}</text>
      <sha1>f5zpwhw39t7qcio1ly3qbw77m6jqgqk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/notify all at thread exit</title>
    <ns>0</ns>
    <id>5086</id>
    <revision>
      <id>73802</id>
      <parentid>68877</parentid>
      <timestamp>2014-11-17T19:33:00Z</timestamp>
      <contributor>
        <username>Bubbafat</username>
        <id>3572</id>
      </contributor>
      <minor/>
      <comment>Typo in name of header file &lt;condition_variable&gt;</comment>
      <text xml:space="preserve" bytes="3560">{{cpp/title|notify_all_at_thread_exit}}
{{cpp/thread/navbar}}
{{ddcl | header=condition_variable | since=c++11 |
void notify_all_at_thread_exit( std::condition_variable&amp; cond,
                                std::unique_lock&lt;std::mutex&gt; lk );
}}

{{tt|notify_all_at_thread_exit}} provides a mechanism to notify other threads that a given thread has completely finished, including destroying all [[cpp/keyword/thread_local|thread_local]] objects.  It operates as follows:

* Ownership of the previously acquired lock {{tt|lk}} is transferred to internal storage.

* The execution environment is modified such that when the current thread exits, the condition variable {{tt|cond}} is notified as if by:

{{c|
lk.unlock();
cond.notify_all();
}}

The implied {{tt|lk.unlock}} is ''sequenced after'' (as defined in {{lc|std::memory_order}})  the destruction of all objects with [[cpp/keyword/thread_local|thread local storage duration]] associated with the current thread.

An equivalent effect may be achieved with the facilities provided by {{lc|std::promise}} or {{lc|std::packaged_task}}.

===Notes===
Calling this function if {{tt|lock.mutex()}} is not locked by the current thread is undefined behavior.

Calling this function if {{tt|lock.mutex()}} is not the same mutex as the one used by all other threads that are currently waiting on the same condition variable is undefined behavior.

The supplied lock {{tt|lk}} is held until the thread exits. Once this function has been called, no more threads may acquire the same lock in order to wait on {{tt|cond}}. If some thread is waiting on this condition variable, it should not attempt to release and reacquire the lock when it wakes up spuriously.

In typical use cases, this function is the last thing called by a detached thread.

===Parameters===
{{par begin}}
{{par | cond | the condition variable to notify at thread exit}}
{{par | lk | the lock associated with the condition variable {{tt|cond}} }}
{{par end}}

===Return value===
(none)

===Example===
{{example
 | This partial code fragment illustrates how {{tt|notify_all_at_thread_exit}} can be used to avoid accessing data that depends on thread locals while those thread locals are in the process of being destructed:
 | code=
#include &lt;mutex&gt;
#include &lt;thread&gt;
#include &lt;condition_variable&gt;

std::mutex m;
std::condition_variable cv;

bool ready = false;
ComplexType result;  // some arbitrary type

void thread_func()
{
    std::unique_lock&lt;std::mutex&gt; lk(m);
    // assign a value to result using thread_local data
    result = function_that_uses_thread_locals();
    ready = true;
    std::notify_all_at_thread_exit(cv, std::move(lk));
} // 1. destroy thread_locals, 2. unlock mutex, 3. notify cv

int main()
{
    std::thread t(thread_func);
    t.detach();

    // do other work
    // ...

    // wait for the detached thread
    std::unique_lock&lt;std::mutex&gt; lk(m);
    while(!ready) {
        cv.wait(lk);
    }
    process(result); // result is ready and thread_local destructors have finished
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc set_value_at_thread_exit}}
{{dsc inc | cpp/thread/packaged_task/dsc make_ready_at_thread_exit}}
{{dsc end}}

[[de:cpp/thread/notify all at thread exit]]
[[es:cpp/thread/notify all at thread exit]]
[[fr:cpp/thread/notify all at thread exit]]
[[it:cpp/thread/notify all at thread exit]]
[[ja:cpp/thread/notify all at thread exit]]
[[pt:cpp/thread/notify all at thread exit]]
[[ru:cpp/thread/notify all at thread exit]]
[[zh:cpp/thread/notify all at thread exit]]</text>
      <sha1>h3c31l7cb4cxemqgsy1yl5fmjh2c2uc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/once flag</title>
    <ns>0</ns>
    <id>2508</id>
    <revision>
      <id>91540</id>
      <parentid>75068</parentid>
      <timestamp>2017-03-31T19:49:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1054">{{cpp/title|once_flag}}
{{cpp/thread/navbar}}
{{ddcl | header=mutex | since=c++11 |
class once_flag;
}}

The class {{tt|std::once_flag}} is a helper structure for {{lc|std::call_once}}.

An object of type {{tt|std::once_flag}} that is passed to multiple calls to {{lc|std::call_once}} allows those calls to coordinate with each other such that only one of the calls will actually run to completion.

{{tt|std::once_flag}} is neither copyable nor movable.

===Member functions===
{{member | {{small|std::once_flag::}}once_flag |
{{ddcl |
constexpr once_flag();
}}

Constructs an {{tt|once_flag}} object. The internal state is set to indicate that no function has been called yet.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc call_once}}
{{dsc end}}

[[de:cpp/thread/once flag]]
[[es:cpp/thread/once flag]]
[[fr:cpp/thread/once flag]]
[[it:cpp/thread/once flag]]
[[ja:cpp/thread/once flag]]
[[pt:cpp/thread/once flag]]
[[ru:cpp/thread/once flag]]
[[zh:cpp/thread/once flag]]</text>
      <sha1>jfxrbp14b4gobf4di9kusnsj29rtqhc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task</title>
    <ns>0</ns>
    <id>2560</id>
    <revision>
      <id>67883</id>
      <parentid>66580</parentid>
      <timestamp>2014-03-04T04:44:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link Callable</comment>
      <text xml:space="preserve" bytes="3035">{{cpp/title|packaged_task}}
{{cpp/thread/packaged_task/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | num=1 | since=c++11 |
template&lt; class &gt; class packaged_task; //not defined
}}
{{dcl | num=2 | since=c++11 |
template&lt; class R, class ...Args &gt; 
class packaged_task&lt;R(Args...)&gt;;
}}
{{dcl end}}

The class template {{tt|std::packaged_task}} wraps any {{concept|Callable}} target (function, lambda expression, bind expression, or another function object) so that it can be invoked asynchronously.  Its return value or exception thrown is stored in a shared state which can be accessed through {{lc|std::future}} objects.

Just like {{lc|std::function}}, {{tt|std::packaged_task}} is a polymorphic, allocator-aware container: the stored callable target may be allocated on heap or with a provided allocator.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc constructor}}
{{dsc inc | cpp/thread/packaged_task/dsc destructor}}
{{dsc inc | cpp/thread/packaged_task/dsc operator{{=}}}}
{{dsc inc | cpp/thread/packaged_task/dsc valid}}
{{dsc inc | cpp/thread/packaged_task/dsc swap}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/packaged_task/dsc get_future}}

{{dsc h2 | Execution}}
{{dsc inc | cpp/thread/packaged_task/dsc operator()}}
{{dsc inc | cpp/thread/packaged_task/dsc make_ready_at_thread_exit}}
{{dsc inc | cpp/thread/packaged_task/dsc reset}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc uses_allocator}}
{{dsc end}}

===Example===
{{example
| code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;thread&gt;
#include &lt;future&gt;
#include &lt;functional&gt;

// unique function to avoid disambiguating the std::pow overload set
int f(int x, int y) { return std::pow(x,y); }

void task_lambda()
{
    std::packaged_task&lt;int(int,int)&gt; task([](int a, int b) {
        return std::pow(a, b); 
    });
    std::future&lt;int&gt; result = task.get_future();
	
    task(2, 9);

    std::cout &lt;&lt; &quot;task_lambda:\t&quot; &lt;&lt; result.get() &lt;&lt; '\n';
}

void task_bind()
{
    std::packaged_task&lt;int()&gt; task(std::bind(f, 2, 11));
    std::future&lt;int&gt; result = task.get_future();
	
    task();

    std::cout &lt;&lt; &quot;task_bind:\t&quot; &lt;&lt; result.get() &lt;&lt; '\n';
}

void task_thread()
{
    std::packaged_task&lt;int(int,int)&gt; task(f);
    std::future&lt;int&gt; result = task.get_future();
	
    std::thread task_td(std::move(task), 2, 10);
    task_td.join();

    std::cout &lt;&lt; &quot;task_thread:\t&quot; &lt;&lt; result.get() &lt;&lt; '\n';
}

int main()
{
    task_lambda();
    task_bind();
    task_thread();
}
| output=
task_lambda: 512
task_bind:   2048
task_thread: 1024
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc future}}
{{dsc end}}

[[de:cpp/thread/packaged task]]
[[es:cpp/thread/packaged task]]
[[fr:cpp/thread/packaged task]]
[[it:cpp/thread/packaged task]]
[[ja:cpp/thread/packaged task]]
[[pt:cpp/thread/packaged task]]
[[ru:cpp/thread/packaged task]]
[[zh:cpp/thread/packaged task]]</text>
      <sha1>49i4wt8zrhsucsspudaen95v7x8n59l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/get future</title>
    <ns>0</ns>
    <id>8676</id>
    <revision>
      <id>63452</id>
      <parentid>51386</parentid>
      <timestamp>2013-07-10T01:32:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="1087">{{cpp/thread/packaged_task/title | get_future}}
{{cpp/thread/packaged_task/navbar}}
{{ddcl | since=c++11 |
std::future&lt;R&gt; get_future();
}}

Returns a {{tt|future}} which shares the same shared state as {{c|*this}}.

{{tt|get_future}} can be called only once for each {{tt|packaged_task}}.

===Parameters===
(none)

===Return value===
A future which shares the same shared state as {{c|*this}}.

===Exceptions===
{{lc|std::future_error}} on the following error conditions:

* The shared state has already been retrieved via a call to {{tt|get_future}}. The error category is set to {{ltt|cpp/thread/future_errc|future_already_retrieved}}.
* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

[[de:cpp/thread/packaged task/get future]]
[[es:cpp/thread/packaged task/get future]]
[[fr:cpp/thread/packaged task/get future]]
[[it:cpp/thread/packaged task/get future]]
[[ja:cpp/thread/packaged task/get future]]
[[pt:cpp/thread/packaged task/get future]]
[[ru:cpp/thread/packaged task/get future]]
[[zh:cpp/thread/packaged task/get future]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/make ready at thread exit</title>
    <ns>0</ns>
    <id>8679</id>
    <revision>
      <id>77409</id>
      <parentid>77067</parentid>
      <timestamp>2015-03-25T03:19:50Z</timestamp>
      <contributor>
        <username>DanielKO</username>
        <id>3746</id>
      </contributor>
      <comment>Added example.</comment>
      <text xml:space="preserve" bytes="2529">{{cpp/thread/packaged_task/title|make_ready_at_thread_exit}}
{{cpp/thread/packaged_task/navbar}}
{{ddcl | since=c++11 |
void make_ready_at_thread_exit( ArgTypes... args );
}}

Calls the stored task with forwarded {{tt|args}} as the arguments. The return value of the task or any exception thrown by it is stored in the shared state of {{c|*this}}.

The shared state is only made ready after the current thread exits and all objects of ''thread local'' storage duration are destroyed.

===Parameters===
{{par begin}}
{{par | args | the parameters to pass on invocation of the stored task}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{lc|std::future_error}} on the following error conditions:

* The stored task has already been invoked. The error category is set to {{tt|promise_already_satisfied}}.
* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

===Example===
{{example
 | code=
#include &lt;future&gt;
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;
#include &lt;functional&gt;
#include &lt;utility&gt;

void worker(std::future&lt;void&gt;&amp; output)
{
    std::packaged_task&lt;void(bool&amp;)&gt; my_task{ [](bool&amp; done) { done=true; } };
 
    auto result = my_task.get_future();
 
    bool done = false;
 
    my_task.make_ready_at_thread_exit(done); // execute task right away
 
    std::cout &lt;&lt; &quot;worker: done = &quot; &lt;&lt; std::boolalpha &lt;&lt; done &lt;&lt; std::endl;

    auto status = result.wait_for(std::chrono::seconds(0));
    if (status == std::future_status::timeout)
        std::cout &lt;&lt; &quot;worker: result is not ready yet&quot; &lt;&lt; std::endl;

    output = std::move(result);
}


int main()
{
    std::future&lt;void&gt; result;

    std::thread{worker, std::ref(result)}.join();

    auto status = result.wait_for(std::chrono::seconds(0));
    if (status == std::future_status::ready)
        std::cout &lt;&lt; &quot;main: result is ready&quot; &lt;&lt; std::endl;
}
 | output=
worker: done = true
worker: result is not ready yet
main: result is ready
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc operator()}}
{{dsc end}}

[[de:cpp/thread/packaged task/make ready at thread exit]]
[[es:cpp/thread/packaged task/make ready at thread exit]]
[[fr:cpp/thread/packaged task/make ready at thread exit]]
[[it:cpp/thread/packaged task/make ready at thread exit]]
[[ja:cpp/thread/packaged task/make ready at thread exit]]
[[pt:cpp/thread/packaged task/make ready at thread exit]]
[[ru:cpp/thread/packaged task/make ready at thread exit]]
[[zh:cpp/thread/packaged task/make ready at thread exit]]</text>
      <sha1>ee5qiow0gtrmxwiypx9lbwoh0xpr5y3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/operator()</title>
    <ns>0</ns>
    <id>8678</id>
    <revision>
      <id>88118</id>
      <parentid>68890</parentid>
      <timestamp>2016-11-03T21:03:50Z</timestamp>
      <contributor>
        <username>Dima</username>
        <id>5120</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1696">{{cpp/thread/packaged_task/title | operator()}}
{{cpp/thread/packaged_task/navbar}}
{{ddcl | since=c++11 |
void operator()( ArgTypes... args );
}}

Calls the stored task with {{tt|args}} as the arguments. The return value of the task or any exceptions thrown are stored in the shared state. The shared state is made ready and any threads waiting for this are unblocked.

===Parameters===
{{par begin}}
{{par | args | the parameters to pass on invocation of the stored task}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{lc|std::future_error}} on the following error conditions:

* The stored task has already been invoked. The error category is set to {{ltt|cpp/thread/future_errc|promise_already_satisfied}}.
* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

===Notes===
{{rev begin}}
{{rev|until=c++14|
A successful call to {{tt|operator()}} synchronizes with a call to any member function of a {{lc|std::future}} or {{lc|std::shared_future}} that share their shared state with {{c|*this}}.
}}
{{rev|since=c++14|
No additional synchronization guarantees other than what's already provided by shared state.
}}
{{rev end}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc make_ready_at_thread_exit}}
{{dsc end}}

[[de:cpp/thread/packaged task/operator()]]
[[es:cpp/thread/packaged task/operator()]]
[[fr:cpp/thread/packaged task/operator()]]
[[it:cpp/thread/packaged task/operator()]]
[[ja:cpp/thread/packaged task/operator()]]
[[pt:cpp/thread/packaged task/operator()]]
[[ru:cpp/thread/packaged task/operator()]]
[[zh:cpp/thread/packaged task/operator()]]</text>
      <sha1>ac32ehgfmvibdrm1r6sy805glbcxbrx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/operator=</title>
    <ns>0</ns>
    <id>8586</id>
    <revision>
      <id>91645</id>
      <parentid>91217</parentid>
      <timestamp>2017-03-31T19:53:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1332">{{cpp/thread/packaged_task/title | operator{{=}}}}
{{cpp/thread/packaged_task/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
packaged_task&amp; operator=( const packaged_task&amp; ) = delete;
}}
{{dcl | num=2 | since=c++11 | 1=
packaged_task&amp; operator=( packaged_task&amp;&amp; rhs );
}}
{{dcl end}}

@1@ Copy assignment operator is deleted, {{tt|std::packaged_task}} is move-only.
@2@ Releases the shared state, if any, destroys the previously-held task, and moves the shared state and the task owned by {{tt|rhs}} into {{c|*this}}. {{tt|rhs}} is left without a shared state and with a moved-from task.

===Parameters===
{{par begin}}
{{par | rhs | the {{tt|std::packaged_task}} to move from}}
{{par end}}

===Exceptions===
@1@ (none)

@2@ {{unreviewed noexcept}}

=== Defect reports ===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2067|std=C++11|before=the deleted copy assignment operator took reference to non-const | after=made const}}
{{dr list end}}

===Example===
{{example
 | code=
| output=
}}

[[de:cpp/thread/packaged task/operator=]]
[[es:cpp/thread/packaged task/operator=]]
[[fr:cpp/thread/packaged task/operator=]]
[[it:cpp/thread/packaged task/operator=]]
[[ja:cpp/thread/packaged task/operator=]]
[[pt:cpp/thread/packaged task/operator=]]
[[ru:cpp/thread/packaged task/operator=]]
[[zh:cpp/thread/packaged task/operator=]]</text>
      <sha1>1hsnuoiiis467ut5frki2vtoo5pe06g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/packaged task</title>
    <ns>0</ns>
    <id>8585</id>
    <revision>
      <id>91689</id>
      <parentid>91216</parentid>
      <timestamp>2017-03-31T19:55:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3358">{{cpp/thread/packaged_task/title | packaged_task}}
{{cpp/thread/packaged_task/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
packaged_task();
}}
{{dcl | num=2 | since=c++11 | 1=
template &lt;class F&gt;
explicit packaged_task( F&amp;&amp; f );
}}
{{dcl | since=c++11 | until=c++17 | num = 3 | 1=
template &lt;class F, class Allocator&gt;
explicit packaged_task( std::allocator_arg_t, const Allocator&amp; a, F&amp;&amp; f );
}}
{{dcl | since=c++11 | num=4 | 1=
packaged_task( const packaged_task&amp; ) = delete;
}}
{{dcl | num=5 | since=c++11 | 1=
packaged_task( packaged_task&amp;&amp; rhs );
}}
{{dcl end}}

Constructs a new {{tt|std::packaged_task}} object.

@1@ Constructs a {{tt|std::packaged_task}} object with no task and no shared state.
@2@ Constructs a {{tt|std::packaged_task}} object with a shared state and a copy of the task, initialized with {{c|std::forward&lt;F&gt;(f)}}. This constructor does not participate in overload resolution if {{c|std::decay&lt;F&gt;::type}} is the same type as {{c|std::packaged_task&lt;R(ArgTypes...)&gt;}}.
@3@ Constructs a {{tt|std::packaged_task}} object with a shared state and a copy of the task, initialized with {{c|std::forward&lt;F&gt;(f)}}. Uses the provided allocator to allocate memory necessary to store the task. This constructor does not participate in overload resolution if {{c|std::decay&lt;F&gt;::type}} is the same type as {{c|std::packaged_task&lt;R(ArgTypes...)&gt;}}.
@4@ The copy constructor is deleted, {{tt|std::packaged_task}} is move-only.
@5@ Constructs a {{tt|std::packaged_task}} with the shared state and task formerly owned by {{tt|rhs}}, leaving {{tt|rhs}} with no shared state and a moved-from task.

===Parameters===
{{par begin}}
{{par | f | the callable target (function, member function, lambda-expression, functor) to execute}}
{{par | a | the allocator to use when storing the task}}
{{par | rhs | the {{tt|std::packaged_task}} to move from}}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

@2@ Any exceptions thrown by copy/move constructor of {{tt|f}} and possiblly {{lc|std::bad_alloc}} if the allocation fails.

@3@ Any exceptions thrown by copy/move constructor of {{tt|f}} and by the allocator's {{tt|allocate}} function if memory allocation fails.

@4@ (none)

@5@ {{unreviewed noexcept}}

=== Defect reports ===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2067|std=C++11|before=the deleted copy constructor took reference to non-const | after=made const}}
{{dr list end}}

===Example===
{{example
 | code=
#include &lt;future&gt;
#include &lt;iostream&gt;
#include &lt;thread&gt;

int fib(int n)
{
    if (n &lt; 3) return 1;
    else return fib(n-1) + fib(n-2);
}

int main()
{
    std::packaged_task&lt;int(int)&gt; fib_task(&amp;fib); 

    std::cout &lt;&lt; &quot;starting task\n&quot;;
    auto result = fib_task.get_future();
    std::thread t(std::move(fib_task), 40);

    std::cout &lt;&lt; &quot;waiting for task to finish...\n&quot;;
    std::cout &lt;&lt; result.get() &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;task complete\n&quot;;
    t.join();
}
| output=
starting task
waiting for task to finish...
102334155
task complete
}}

[[de:cpp/thread/packaged task/packaged task]]
[[es:cpp/thread/packaged task/packaged task]]
[[fr:cpp/thread/packaged task/packaged task]]
[[it:cpp/thread/packaged task/packaged task]]
[[ja:cpp/thread/packaged task/packaged task]]
[[pt:cpp/thread/packaged task/packaged task]]
[[ru:cpp/thread/packaged task/packaged task]]
[[zh:cpp/thread/packaged task/packaged task]]</text>
      <sha1>tgy6n1sxpuwg0kudzix1r3dlc37sqmb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/reset</title>
    <ns>0</ns>
    <id>8677</id>
    <revision>
      <id>69985</id>
      <parentid>63455</parentid>
      <timestamp>2014-05-04T22:17:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>example</comment>
      <text xml:space="preserve" bytes="1565">{{cpp/thread/packaged_task/title | reset}}
{{cpp/thread/packaged_task/navbar}}
{{ddcl | since=c++11 |
void reset();
}}

Resets the state abandoning the results of previous executions. New shared state is constructed.

Equivalent to {{c|1=*this = packaged_task(std::move(f))}}, where {{tt|f}} is the stored task.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
* {{lc|std::future_error}} if {{c|*this}} has no shared state. The error condition is set to {{ltt|cpp/thread/future_errc|no_state}}.
* {{lc|std::bad_alloc}} if there was not enough memory for a new shared state.
* any exception thrown by the [[cpp/thread/packaged_task/packaged_task | move constructor]] of the new {{tt|packaged_task}}

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;thread&gt;
#include &lt;future&gt;

int main()
{
    std::packaged_task&lt;int(int,int)&gt; task([](int a, int b) {
        return std::pow(a, b);
    });
    std::future&lt;int&gt; result = task.get_future();
    task(2, 9);
    std::cout &lt;&lt; &quot;2^9 = &quot; &lt;&lt; result.get() &lt;&lt; '\n';

    task.reset();
    result = task.get_future();
    std::thread task_td(std::move(task), 2, 10);
    task_td.join();
    std::cout &lt;&lt; &quot;2^10 = &quot; &lt;&lt; result.get() &lt;&lt; '\n';
}
|output=
2^9 = 512
2^10 = 1024
}}

[[de:cpp/thread/packaged task/reset]]
[[es:cpp/thread/packaged task/reset]]
[[fr:cpp/thread/packaged task/reset]]
[[it:cpp/thread/packaged task/reset]]
[[ja:cpp/thread/packaged task/reset]]
[[pt:cpp/thread/packaged task/reset]]
[[ru:cpp/thread/packaged task/reset]]
[[zh:cpp/thread/packaged task/reset]]</text>
      <sha1>pzpd9o6c3uxpcu6e4m6o6qyf7olie2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/swap</title>
    <ns>0</ns>
    <id>8674</id>
    <revision>
      <id>91676</id>
      <parentid>63456</parentid>
      <timestamp>2017-03-31T19:54:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="775">{{cpp/thread/packaged_task/title | swap}}
{{cpp/thread/packaged_task/navbar}}
{{ddcl | since=c++11 |
void swap( packaged_task&amp; other );
}}

Exchanges the shared states and stored tasks of {{c|*this}} and {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | packaged task whose state to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc swap2}}
{{dsc end}}

[[de:cpp/thread/packaged task/swap]]
[[es:cpp/thread/packaged task/swap]]
[[fr:cpp/thread/packaged task/swap]]
[[it:cpp/thread/packaged task/swap]]
[[ja:cpp/thread/packaged task/swap]]
[[pt:cpp/thread/packaged task/swap]]
[[ru:cpp/thread/packaged task/swap]]
[[zh:cpp/thread/packaged task/swap]]</text>
      <sha1>j1bwxvf7h4a76iwugeb3y5csrroipwy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/swap2</title>
    <ns>0</ns>
    <id>5510</id>
    <revision>
      <id>91417</id>
      <parentid>80093</parentid>
      <timestamp>2017-03-31T19:43:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1073">{{cpp/title | swap&lt;small&gt;(std::packaged_task)&lt;/small&gt;}}
{{cpp/thread/packaged_task/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class Function, class... Args &gt;
void swap( packaged_task&lt;Function(Args...)&gt; &amp;lhs, 
           packaged_task&lt;Function(Args...)&gt; &amp;rhs );
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{lc|std::packaged_task}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | packaged tasks whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/packaged_task/dsc swap}}
{{dsc end}}

[[de:cpp/thread/packaged task/swap2]]
[[es:cpp/thread/packaged task/swap2]]
[[fr:cpp/thread/packaged task/swap2]]
[[it:cpp/thread/packaged task/swap2]]
[[ja:cpp/thread/packaged task/swap2]]
[[pt:cpp/thread/packaged task/swap2]]
[[ru:cpp/thread/packaged task/swap2]]
[[zh:cpp/thread/packaged task/swap2]]</text>
      <sha1>l8kykarav24cef554p1peesvuveb6yj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/uses allocator</title>
    <ns>0</ns>
    <id>6423</id>
    <revision>
      <id>91214</id>
      <parentid>63457</parentid>
      <timestamp>2017-03-27T20:38:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>I don't care what the DIS says, this needs to go with the allocator support.</comment>
      <text xml:space="preserve" bytes="860">{{cpp/title|uses_allocator{{small|&lt;std::packaged_task&gt;}}}}
{{cpp/thread/packaged_task/navbar}}
{{ddcl | since=c++11 | until=c++17|
template&lt; class R, class Alloc &gt;
struct uses_allocator&lt;std::packaged_task&lt;R&gt;, Alloc&gt; : true_type { };
}}

Provides a specialization of the {{lc|std::uses_allocator}} type trait for {{lc|std::packaged_task}}.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses allocator}}
{{dsc end}}

[[de:cpp/thread/packaged task/uses allocator]]
[[es:cpp/thread/packaged task/uses allocator]]
[[fr:cpp/thread/packaged task/uses allocator]]
[[it:cpp/thread/packaged task/uses allocator]]
[[ja:cpp/thread/packaged task/uses allocator]]
[[pt:cpp/thread/packaged task/uses allocator]]
[[ru:cpp/thread/packaged task/uses allocator]]
[[zh:cpp/thread/packaged task/uses allocator]]</text>
      <sha1>5mkzw9ck6ni6v0bv6vurfopuykl879i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/valid</title>
    <ns>0</ns>
    <id>8675</id>
    <revision>
      <id>91670</id>
      <parentid>63458</parentid>
      <timestamp>2017-03-31T19:54:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="633">{{cpp/thread/packaged_task/title | valid}}
{{cpp/thread/packaged_task/navbar}}
{{ddcl | since=c++11 |
bool valid() const;
}}

Checks whether {{c|*this}} has a shared state.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} has a shared state, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/thread/packaged task/valid]]
[[es:cpp/thread/packaged task/valid]]
[[fr:cpp/thread/packaged task/valid]]
[[it:cpp/thread/packaged task/valid]]
[[ja:cpp/thread/packaged task/valid]]
[[pt:cpp/thread/packaged task/valid]]
[[ru:cpp/thread/packaged task/valid]]
[[zh:cpp/thread/packaged task/valid]]</text>
      <sha1>81exc00zw6zw7n1rpkncv5j37yydahk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/packaged task/~packaged task</title>
    <ns>0</ns>
    <id>8587</id>
    <revision>
      <id>80091</id>
      <parentid>63835</parentid>
      <timestamp>2015-07-29T10:56:33Z</timestamp>
      <contributor>
        <username>Cppguy</username>
        <id>4311</id>
      </contributor>
      <text xml:space="preserve" bytes="866">{{cpp/thread/packaged_task/title | ~packaged_task}}
{{cpp/thread/packaged_task/navbar}}
{{dcl begin}}
{{dcl |1=
~packaged_task();
}}
{{dcl end}}

Abandons the shared state and destroys the stored task object.

As with {{lc|std::promise::~promise}}, if the shared state is abandoned before it was made ready, an {{lc|std::future_error}} exception is stored with the error code {{lc|std::future_errc::broken_promise}}).

===Parameters===
(none)

===Example===
{{example
 | code=
| output=
}}

[[de:cpp/thread/packaged task/~packaged task]]
[[es:cpp/thread/packaged task/~packaged task]]
[[fr:cpp/thread/packaged task/~packaged task]]
[[it:cpp/thread/packaged task/~packaged task]]
[[ja:cpp/thread/packaged task/~packaged task]]
[[pt:cpp/thread/packaged task/~packaged task]]
[[ru:cpp/thread/packaged task/~packaged task]]
[[zh:cpp/thread/packaged task/~packaged task]]</text>
      <sha1>nbjvhxlkjage6buo790ch5btjauw9su</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise</title>
    <ns>0</ns>
    <id>2517</id>
    <revision>
      <id>87661</id>
      <parentid>87659</parentid>
      <timestamp>2016-09-19T19:14:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>std::</comment>
      <text xml:space="preserve" bytes="4553">{{cpp/title|promise}}
{{cpp/thread/promise/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | num=1 | since=c++11 |
template&lt; class R &gt; class promise;
}}
{{dcl | num=2 | since=c++11 |
template&lt; class R &gt; class promise&lt;R&amp;&gt;;
}}
{{dcl | num=3 | since=c++11 |
template&lt;&gt;          class promise&lt;void&gt;;
}}
{{dcl end}}

@1@ base template
@2@ non-void specialization, used to communicate objects between threads
@3@ void specialization, used to communicate stateless events

The class template {{tt|std::promise}} provides a facility to store a value or an exception that is later acquired asynchronously via a {{lc|std::future}} object created by the {{tt|std::promise}} object.

Each promise is associated with a ''shared state'', which contains some state information and a ''result'' which may be not yet evaluated, evaluated to a value (possibly void) or evaluated to an exception. A promise may do three things with the shared state:
* ''make ready'': the promise stores the result or the exception in the shared state. Marks the state ready and unblocks any thread waiting on a future associated with the shared state.
* ''release'': the promise gives up its reference to the shared state. If this was the last such reference, the shared state is destroyed. Unless this was a shared state created by {{c|std::async}} which is not yet ready, this operation does not block.
* ''abandon'': the promise stores the exception of type {{lc|std::future_error}} with error code {{lc|std::future_errc::broken_promise}}, makes the shared state ''ready'', and then ''releases'' it.

The promise is the &quot;push&quot; end of the promise-future communication channel: the operation that stores a value in the shared state ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) the successful return from any function that is waiting on the shared state (such as {{lc|std::future::get}}). Concurrent access to the same shared state may conflict otherwise: for example multiple callers of {{lc|std::shared_future::get}} must either all be read-only or provide external synchronization.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc constructor}}
{{dsc inc | cpp/thread/promise/dsc destructor}}
{{dsc inc | cpp/thread/promise/dsc operator{{=}}}}
{{dsc inc | cpp/thread/promise/dsc swap}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/promise/dsc get_future}}

{{dsc h2 | Setting the result}}
{{dsc inc | cpp/thread/promise/dsc set_value}}
{{dsc inc | cpp/thread/promise/dsc set_value_at_thread_exit}}
{{dsc inc | cpp/thread/promise/dsc set_exception}}
{{dsc inc | cpp/thread/promise/dsc set_exception_at_thread_exit}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/thread/promise]]
[[es:cpp/thread/promise]]
[[fr:cpp/thread/promise]]
[[it:cpp/thread/promise]]
[[ja:cpp/thread/promise]]
[[pt:cpp/thread/promise]]
[[ru:cpp/thread/promise]]
[[zh:cpp/thread/promise]]

===Example===
{{example |
This example shows how {{tt|promise&lt;int&gt;}} can be used as signals between threads.
 | code=
#include &lt;vector&gt;
#include &lt;thread&gt;
#include &lt;future&gt;
#include &lt;numeric&gt;
#include &lt;iostream&gt;
#include &lt;chrono&gt;
 
void accumulate(std::vector&lt;int&gt;::iterator first,
                std::vector&lt;int&gt;::iterator last,
                std::promise&lt;int&gt; accumulate_promise)
{
    int sum = std::accumulate(first, last, 0);
    accumulate_promise.set_value(sum);  // Notify future
}

void do_work(std::promise&lt;void&gt; barrier)
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    barrier.set_value();
}
 
int main()
{
    // Demonstrate using promise&lt;int&gt; to transmit a result between threads.
    std::vector&lt;int&gt; numbers = { 1, 2, 3, 4, 5, 6 };
    std::promise&lt;int&gt; accumulate_promise;
    std::future&lt;int&gt; accumulate_future = accumulate_promise.get_future();
    std::thread work_thread(accumulate, numbers.begin(), numbers.end(),
                            std::move(accumulate_promise));
    accumulate_future.wait();  // wait for result
    std::cout &lt;&lt; &quot;result=&quot; &lt;&lt; accumulate_future.get() &lt;&lt; '\n';
    work_thread.join();  // wait for thread completion
    
    // Demonstrate using promise&lt;void&gt; to signal state between threads.
    std::promise&lt;void&gt; barrier;
    std::future&lt;void&gt; barrier_future = barrier.get_future();
    std::thread new_work_thread(do_work, std::move(barrier));
    barrier_future.wait();
    new_work_thread.join();
}
 | output=
result=21
}}</text>
      <sha1>k9eygkmyrnyp9sby20u14sdfine6flu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/get future</title>
    <ns>0</ns>
    <id>6447</id>
    <revision>
      <id>80086</id>
      <parentid>78179</parentid>
      <timestamp>2015-07-29T10:44:54Z</timestamp>
      <contributor>
        <username>Cppguy</username>
        <id>4311</id>
      </contributor>
      <text xml:space="preserve" bytes="1174">{{cpp/thread/promise/title | get_future}}
{{cpp/thread/promise/navbar}}
{{ddcl | since=c++11 |
std::future&lt;T&gt; get_future();
}}

Returns a future object associated with the same shared state as {{c|*this}}. 

Exception is thrown if {{c|*this}} has no shared state or {{tt|get_future}} has already been called. To get multiple &quot;pop&quot; ends of the promise-future communication channel, use {{lc|std::future::share}}.

===Parameters===
(none)

===Return value===
A future referring to the shared state of {{c|*this}}

===Exceptions===
{{lc|std::future_error}} on the following conditions:

* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

* {{tt|get_future()}} has already been called on a promise with the same shared state as {{c|*this}}. The error category is set to {{ltt|cpp/thread/future_errc|future_already_retrieved}}.

[[de:cpp/thread/promise/get future]]
[[es:cpp/thread/promise/get future]]
[[fr:cpp/thread/promise/get future]]
[[it:cpp/thread/promise/get future]]
[[ja:cpp/thread/promise/get future]]
[[pt:cpp/thread/promise/get future]]
[[ru:cpp/thread/promise/get future]]
[[zh:cpp/thread/promise/get future]]</text>
      <sha1>qiid22lt3u7kh99zxpk9nsl8ton8wa3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/operator=</title>
    <ns>0</ns>
    <id>6427</id>
    <revision>
      <id>91692</id>
      <parentid>64294</parentid>
      <timestamp>2017-03-31T19:55:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1013">{{cpp/thread/promise/title | operator{{=}}}}
{{cpp/thread/promise/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
promise&amp; operator=( promise&amp;&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
promise&amp; operator=( const promise&amp; rhs ) = delete;
}}
{{dcl end}}

Assigns the contents.

@1@ Move assignment operator. First, abandons the shared state (as in {{lc|~promise()}}), then assigns the shared state of {{tt|other}} as if by executing {{c|std::promise(std::move(other)).swap(*this)}}.

@2@ {{tt|promise}} is not copy-assignable.

===Parameters===
{{par begin}}
{{par | other | another {{tt|promise}} to acquire the state from}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{unreviewed noexcept}}

[[de:cpp/thread/promise/operator=]]
[[es:cpp/thread/promise/operator=]]
[[fr:cpp/thread/promise/operator=]]
[[it:cpp/thread/promise/operator=]]
[[ja:cpp/thread/promise/operator=]]
[[pt:cpp/thread/promise/operator=]]
[[ru:cpp/thread/promise/operator=]]
[[zh:cpp/thread/promise/operator=]]</text>
      <sha1>pjhczog3r9ljn5ye8kwz1gbnck4k1qn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/promise</title>
    <ns>0</ns>
    <id>6425</id>
    <revision>
      <id>91809</id>
      <parentid>78106</parentid>
      <timestamp>2017-03-31T19:58:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1377">{{cpp/thread/promise/title | promise}}
{{cpp/thread/promise/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
promise();
}}
{{dcl | num=2 | since=c++11 |
template&lt; class Alloc &gt;
promise( std::allocator_arg_t, const Alloc&amp; alloc );
}}
{{dcl | num=3 | since=c++11 |
promise( promise&amp;&amp; other );
}}
{{dcl | num=4 | since=c++11 | 1=
promise( const promise&amp; other ) = delete;
}}
{{dcl end}}

Constructs a {{tt|promise}} object.

@1@ Default constructor. Constructs the promise with an empty shared state.

@2@ Constructs the promise with an empty shared state. The shared state is allocated using {{tt|alloc}}. {{tt|Alloc}} must meet the requirements of {{concept|Allocator}}.

@3@ Move constructor. Constructs the promise with the shared state of {{tt|other}} using move semantics. After construction, {{tt|other}} has no shared state.

@4@ {{tt|promise}} is not copyable.

===Parameters===
{{par begin}}
{{par | alloc | allocator to use to allocate the shared state}}
{{par | other | another {{tt|promise}} to acquire the state from}}
{{par end}}

===Exceptions===
@1-2@ (none)
@3@ {{unreviewed noexcept}}

[[de:cpp/thread/promise/promise]]
[[es:cpp/thread/promise/promise]]
[[fr:cpp/thread/promise/promise]]
[[it:cpp/thread/promise/promise]]
[[ja:cpp/thread/promise/promise]]
[[pt:cpp/thread/promise/promise]]
[[ru:cpp/thread/promise/promise]]
[[zh:cpp/thread/promise/promise]]</text>
      <sha1>66qdmlwlg5tslgmp9h585vg9r6lajwm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/set exception</title>
    <ns>0</ns>
    <id>6450</id>
    <revision>
      <id>88076</id>
      <parentid>87058</parentid>
      <timestamp>2016-10-27T13:39:19Z</timestamp>
      <contributor>
        <username>Rostislav</username>
        <id>5973</id>
      </contributor>
      <minor/>
      <comment>Removed race condition (see http://wg21.cmeerw.net/lwg/issue2412).</comment>
      <text xml:space="preserve" bytes="2255">{{cpp/thread/promise/title | set_exception}}
{{cpp/thread/promise/navbar}}
{{ddcl | since=c++11 |
void set_exception( std::exception_ptr p );
}}

Atomically stores the exception pointer {{tt|p}} into the shared state and makes the state ready. 

The operation behaves as though {{lc|set_value}}, {{tt|set_exception}}, {{lc|set_value_at_thread_exit}}, and {{lc|set_exception_at_thread_exit}} acquire a single mutex associated with the promise object while updating the promise object.

An exception is thrown if there is no shared state or the shared state already stores a value or exception.

===Parameters===
{{par begin}}
{{par | p | exception pointer to store. The behavior is undefined if {{tt|p}} is null. }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{lc|std::future_error}} on the following conditions:

* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

* The shared state already stores a value or exception. The error category is set to {{ltt|cpp/thread/future_errc|promise_already_satisfied}}.

===Example===
{{example
 | code=
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;future&gt;

int main()
{
    std::promise&lt;int&gt; p;
    std::future&lt;int&gt; f = p.get_future();

    std::thread t([&amp;p]{
        try {
            // code that may throw
            throw std::runtime_error(&quot;Example&quot;);
        } catch(...) {
            try {
                // store anything thrown in the promise
                p.set_exception(std::current_exception());
            } catch(...) {} // set_exception() may throw too
        }
    });

    try {
        std::cout &lt;&lt; f.get();
    } catch(const std::exception&amp; e) {
        std::cout &lt;&lt; &quot;Exception from the thread: &quot; &lt;&lt; e.what() &lt;&lt; '\n';
    }
    t.join();
}
 | output=
Exception from the thread: Example
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc set_exception_at_thread_exit}}
{{dsc end}}

[[de:cpp/thread/promise/set exception]]
[[es:cpp/thread/promise/set exception]]
[[fr:cpp/thread/promise/set exception]]
[[it:cpp/thread/promise/set exception]]
[[ja:cpp/thread/promise/set exception]]
[[pt:cpp/thread/promise/set exception]]
[[ru:cpp/thread/promise/set exception]]
[[zh:cpp/thread/promise/set exception]]</text>
      <sha1>9xh45hgo0sglc573ttk2tz4jzap7zdh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/set exception at thread exit</title>
    <ns>0</ns>
    <id>6451</id>
    <revision>
      <id>83658</id>
      <parentid>82236</parentid>
      <timestamp>2016-03-06T05:45:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Parameters */ LWG2276</comment>
      <text xml:space="preserve" bytes="1825">{{cpp/thread/promise/title | set_exception_at_thread_exit}}
{{cpp/thread/promise/navbar}}
{{ddcl | since=c++11 |
void set_exception_at_thread_exit( std::exception_ptr p );
}}

Stores the exception pointer {{tt|p}} into the shared state without making the state ready immediately. The state is made ready when the current thread exits, after all variables with thread-local storage duration have been destroyed.  

The operation behaves as though {{lc|set_value}}, {{lc|set_exception}}, {{lc|set_value_at_thread_exit}}, and {{tt|set_exception_at_thread_exit}} acquire a single mutex associated with the promise object while updating the promise object.

An exception is thrown if there is no shared state or the shared state already stores a value or exception.

===Parameters===
{{par begin}}
{{par | p | exception pointer to store. The behavior is undefined if {{tt|p}} is null. }}
{{par end}}

===Return value===
(none)

===Exceptions===
{{lc|std::future_error}} on the following conditions:

* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

* The shared state already stores a value or exception. The error category is set to {{ltt|cpp/thread/future_errc|promise_already_satisfied}}.

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc set_exception}}
{{dsc end}}

[[de:cpp/thread/promise/set exception at thread exit]]
[[es:cpp/thread/promise/set exception at thread exit]]
[[fr:cpp/thread/promise/set exception at thread exit]]
[[it:cpp/thread/promise/set exception at thread exit]]
[[ja:cpp/thread/promise/set exception at thread exit]]
[[pt:cpp/thread/promise/set exception at thread exit]]
[[ru:cpp/thread/promise/set exception at thread exit]]
[[zh:cpp/thread/promise/set exception at thread exit]]</text>
      <sha1>na8q1loeb51143uy6xjf6qg727n4tx8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/set value</title>
    <ns>0</ns>
    <id>6448</id>
    <revision>
      <id>88130</id>
      <parentid>87553</parentid>
      <timestamp>2016-11-07T10:42:30Z</timestamp>
      <contributor>
        <ip>91.82.97.158</ip>
      </contributor>
      <text xml:space="preserve" bytes="4043">{{cpp/thread/promise/title | set_value}}
{{cpp/thread/promise/navbar}}
{{dcl begin}}
{{dcl | num=1 | notes={{mark|member only of generic {{tt|promise}} template}}&lt;br&gt;{{mark since c++11}} |
void set_value( const R&amp; value );
}}
{{dcl | num=2 | notes={{mark|member only of generic {{tt|promise}} template}}&lt;br&gt;{{mark since c++11}} |
void set_value( R&amp;&amp; value );
}}
{{dcl | num=3 | notes={{mark|member only of {{tt|promise&lt;R&amp;&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
void set_value( R&amp; value );
}}
{{dcl | num=4 | notes={{mark|member only of {{tt|promise&lt;void&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
void set_value();
}}
{{dcl end}}

Atomically stores the {{tt|value}} into the shared state and makes the state ready. 

The operation behaves as though {{tt|set_value}}, {{lc|set_exception}}, {{lc|set_value_at_thread_exit}}, and {{lc|set_exception_at_thread_exit}} acquire a single mutex associated with the promise object while updating the promise object.

An exception is thrown if there is no shared state or the shared state already stores a value or exception.

===Parameters===
{{par begin}}
{{par | value | value to store in the shared state}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{lc|std::future_error}} on the following conditions:

* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

* The shared state already stores a value or exception. The error category is set to {{ltt|cpp/thread/future_errc|promise_already_satisfied}}.

Additionally:

@1, 3@ Any exception thrown by the copy constructor of {{tt|value}}
@2@ Any exception thrown by the move constructor of {{tt|value}}

===Example===
{{example |
This example shows how {{tt|promise&lt;void&gt;}} can be used as signals between threads.
 | code=
#include &lt;thread&gt;
#include &lt;future&gt;
#include &lt;cctype&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::istringstream iss_numbers{&quot;3 4 1 42 23 -23 93 2 -289 93&quot;};
    std::istringstream iss_letters{&quot; a 23 b,e a2 k k?a;si,ksa c&quot;};

    std::vector&lt;int&gt; numbers;
    std::vector&lt;char&gt; letters;
    std::promise&lt;void&gt; numbers_promise, letters_promise;

    auto numbers_ready = numbers_promise.get_future();
    auto letter_ready = letters_promise.get_future();

    std::thread value_reader([&amp;]
    {
        // I/O operations.
        std::copy(std::istream_iterator&lt;int&gt;{iss_numbers},
                  std::istream_iterator&lt;int&gt;{},
                  std::back_inserter(numbers));

        //Notify for numbers.
        numbers_promise.set_value();

        std::copy_if(std::istreambuf_iterator&lt;char&gt;{iss_letters},
                     std::istreambuf_iterator&lt;char&gt;{},
                     std::back_inserter(letters),
                     ::isalpha);

        //Notify for letters.
        letters_promise.set_value();
    });


    numbers_ready.wait();

    std::sort(numbers.begin(), numbers.end());

    if (letter_ready.wait_for(std::chrono::seconds(1)) ==
            std::future_status::timeout)
    {
        //output the numbers while letters are being obtained.
        for (int num : numbers) std::cout &lt;&lt; num &lt;&lt; ' ';
        numbers.clear(); //Numbers were already printed.
    }

    letter_ready.wait();
    std::sort(letters.begin(), letters.end());

    //If numbers were already printed, it does nothing.
    for (int num : numbers) std::cout &lt;&lt; num &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    for (char let : letters) std::cout &lt;&lt; let &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';

    value_reader.join();
}
 | output=
-289 -23 1 2 3 4 23 42 93 93 
a a a a b c e i k k k s s 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc set_exception}}
{{dsc end}}

[[de:cpp/thread/promise/set value]]
[[es:cpp/thread/promise/set value]]
[[fr:cpp/thread/promise/set value]]
[[it:cpp/thread/promise/set value]]
[[ja:cpp/thread/promise/set value]]
[[pt:cpp/thread/promise/set value]]
[[ru:cpp/thread/promise/set value]]
[[zh:cpp/thread/promise/set value]]</text>
      <sha1>aze1r6rl4sqybkuguymofs5bm5ma9mi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/set value at thread exit</title>
    <ns>0</ns>
    <id>6449</id>
    <revision>
      <id>85535</id>
      <parentid>85099</parentid>
      <timestamp>2016-04-25T01:04:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Example */ capture by reference for now; see talk</comment>
      <text xml:space="preserve" bytes="2898">{{cpp/thread/promise/title | set_value_at_thread_exit}}
{{cpp/thread/promise/navbar}}
{{dcl begin}}
{{dcl | num=1 | notes={{mark|member only of generic {{tt|promise}} template}}&lt;br&gt;{{mark since c++11}} |
void set_value_at_thread_exit( const R&amp; value );
}}
{{dcl | num=2 | notes={{mark|member only of generic {{tt|promise}} template}}&lt;br&gt;{{mark since c++11}} |
void set_value_at_thread_exit( R&amp;&amp; value );
}}
{{dcl | num=3 | notes={{mark|member only of {{tt|promise&lt;R&amp;&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
void set_value_at_thread_exit( R&amp; value );
}}
{{dcl | num=4 | notes={{mark|member only of {{tt|promise&lt;void&gt;}} template specialization}}&lt;br&gt;{{mark since c++11}} | 1=
void set_value_at_thread_exit()
}}
{{dcl end}}

Stores the {{tt|value}} into the shared state without making the state ready immediately. The state is made ready when the current thread exits, after all variables with thread-local storage duration have been destroyed.

The operation behaves as though {{lc|set_value}}, {{lc|set_exception}}, {{tt|set_value_at_thread_exit}}, and {{lc|set_exception_at_thread_exit}} acquire a single mutex associated with the promise object while updating the promise object.

An exception is thrown if there is no shared state or the shared state already stores a value or exception.

===Parameters===
{{par begin}}
{{par | value | value to store in the shared state}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{lc|std::future_error}} on the following conditions:

* {{c|*this}} has no shared state. The error category is set to {{ltt|cpp/thread/future_errc|no_state}}.

* The shared state already stores a value or exception. The error category is set to {{ltt|cpp/thread/future_errc|promise_already_satisfied}}.

Additionally:

@1-2@ Any exception thrown by the copy constructor of {{tt|value}}
@3@ Any exception thrown by the move constructor of {{tt|value}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;future&gt;
#include &lt;thread&gt;

int main()
{
    using namespace std::chrono_literals;
    std::promise&lt;int&gt; p;
    std::future&lt;int&gt; f = p.get_future();
    std::thread([&amp;p] {
          std::this_thread::sleep_for(1s);
          p.set_value_at_thread_exit(9);
    }).detach();

    std::cout &lt;&lt; &quot;Waiting...&quot; &lt;&lt; std::flush;
    f.wait();
    std::cout &lt;&lt; &quot;Done!\nResult is: &quot; &lt;&lt; f.get() &lt;&lt; '\n';
}
 | output=
Waiting...Done!
Result is: 9
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc set_value}}
{{dsc end}}

[[de:cpp/thread/promise/set value at thread exit]]
[[es:cpp/thread/promise/set value at thread exit]]
[[fr:cpp/thread/promise/set value at thread exit]]
[[it:cpp/thread/promise/set value at thread exit]]
[[ja:cpp/thread/promise/set value at thread exit]]
[[pt:cpp/thread/promise/set value at thread exit]]
[[ru:cpp/thread/promise/set value at thread exit]]
[[zh:cpp/thread/promise/set value at thread exit]]</text>
      <sha1>fx2b8t4zyuauw86m95pc17aar5lshgf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/swap</title>
    <ns>0</ns>
    <id>6428</id>
    <revision>
      <id>91568</id>
      <parentid>63462</parentid>
      <timestamp>2017-03-31T19:50:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="712">{{cpp/thread/promise/title|swap}}
{{cpp/thread/promise/navbar}}
{{ddcl | since=c++11 |
void swap( promise&amp; other );
}}

Exchanges the shared states of two promise objects.

===Parameters===
{{par begin}}
{{par | other | the promise to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc swap2}}
{{dsc end}}

[[de:cpp/thread/promise/swap]]
[[es:cpp/thread/promise/swap]]
[[fr:cpp/thread/promise/swap]]
[[it:cpp/thread/promise/swap]]
[[ja:cpp/thread/promise/swap]]
[[pt:cpp/thread/promise/swap]]
[[ru:cpp/thread/promise/swap]]
[[zh:cpp/thread/promise/swap]]</text>
      <sha1>6fed0z5rd8pn0ku11r3z8vxsrme18l9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/swap2</title>
    <ns>0</ns>
    <id>5511</id>
    <revision>
      <id>91646</id>
      <parentid>63463</parentid>
      <timestamp>2017-03-31T19:53:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="915">{{cpp/title | swap&lt;small&gt;(std::promise)&lt;/small&gt;}}
{{cpp/thread/promise/navbar}}
{{ddcl | header=future | since=c++11 |
template&lt; class R &gt;
void swap( promise&lt;R&gt; &amp;lhs, promise&lt;R&gt; &amp;rhs );
}}

Specializes the {{lc|std::swap}} algorithm for {{lc|std::promise}}. Exchanges the shared state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | promises whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/promise/dsc swap}}
{{dsc end}}

[[de:cpp/thread/promise/swap2]]
[[es:cpp/thread/promise/swap2]]
[[fr:cpp/thread/promise/swap2]]
[[it:cpp/thread/promise/swap2]]
[[ja:cpp/thread/promise/swap2]]
[[pt:cpp/thread/promise/swap2]]
[[ru:cpp/thread/promise/swap2]]
[[zh:cpp/thread/promise/swap2]]</text>
      <sha1>s3pzkans4hkdmxo0hxgj6636myjcmmh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/uses allocator</title>
    <ns>0</ns>
    <id>6424</id>
    <revision>
      <id>63464</id>
      <parentid>61348</parentid>
      <timestamp>2013-07-10T01:33:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="780">{{cpp/title|uses_allocator{{small|&lt;std::promise&gt;}}}}
{{cpp/thread/promise/navbar}}
{{ddcl | since=c++11 |
template&lt; class R, class Alloc &gt;
struct uses_allocator&lt;std::promise&lt;R&gt;, Alloc&gt; : std::true_type { };
}}

Provides a specialization of the {{lc|std::uses_allocator}} type trait for {{lc|std::promise}}.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses allocator}}
{{dsc end}}

[[de:cpp/thread/promise/uses allocator]]
[[es:cpp/thread/promise/uses allocator]]
[[fr:cpp/thread/promise/uses allocator]]
[[it:cpp/thread/promise/uses allocator]]
[[ja:cpp/thread/promise/uses allocator]]
[[pt:cpp/thread/promise/uses allocator]]
[[ru:cpp/thread/promise/uses allocator]]
[[zh:cpp/thread/promise/uses allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/promise/~promise</title>
    <ns>0</ns>
    <id>6426</id>
    <revision>
      <id>63836</id>
      <parentid>63833</parentid>
      <timestamp>2013-07-29T13:02:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to broken_promise and fmt</comment>
      <text xml:space="preserve" bytes="669">{{cpp/thread/promise/title | ~promise}}
{{cpp/thread/promise/navbar}}
{{ddcl | since=c++11 |
~promise();
}}

Abandons the shared state:
* if the shared state is ready, releases it.
* if the shared state is not ready, stores an exception object of type {{lc|std::future_error}} with an error condition {{lc|std::future_errc::broken_promise}}, makes the shared state ready and releases it.


[[de:cpp/thread/promise/~promise]]
[[es:cpp/thread/promise/~promise]]
[[fr:cpp/thread/promise/~promise]]
[[it:cpp/thread/promise/~promise]]
[[ja:cpp/thread/promise/~promise]]
[[pt:cpp/thread/promise/~promise]]
[[ru:cpp/thread/promise/~promise]]
[[zh:cpp/thread/promise/~promise]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive mutex</title>
    <ns>0</ns>
    <id>2301</id>
    <revision>
      <id>83593</id>
      <parentid>79717</parentid>
      <timestamp>2016-03-02T09:02:55Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Member types */</comment>
      <text xml:space="preserve" bytes="2697">{{cpp/title|recursive_mutex}}
{{cpp/thread/recursive_mutex/navbar}}
{{ddcl | header=mutex | since=c++11 | 1=
class recursive_mutex;
}}

The {{tt|recursive_mutex}} class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads.

{{tt|recursive_mutex}} offers exclusive, recursive ownership semantics:

* A calling thread ''owns'' a {{tt|recursive_mutex}} for a period of time that starts when it successfully calls either [[cpp/thread/recursive_mutex/lock|{{tt|lock}}]] or [[cpp/thread/mutex/try_lock|{{tt|try_lock}}]].  During this period, the thread may make additional calls to [[cpp/thread/recursive_mutex/lock|{{tt|lock}}]] or [[cpp/thread/recursive_mutex/try_lock|{{tt|try_lock}}]].  The period of ownership ends when the thread makes a matching number of calls to [[cpp/thread/recursive_mutex/unlock|{{tt|unlock}}]].
* When a thread owns a {{tt|recursive_mutex}}, all other threads will block (for calls to [[cpp/thread/recursive_mutex/lock|{{tt|lock}}]]) or receive a {{c|false}} return value (for [[cpp/thread/recursive_mutex/try_lock|{{tt|try_lock}}]]) if they attempt to claim ownership of the {{tt|recursive_mutex}}.
* The maximum number of times that a {{tt|recursive_mutex}} may be locked is unspecified, but after that number is reached, calls to [[cpp/thread/recursive_mutex/lock|{{tt|lock}}]] will throw {{lc|std::system_error}} and calls to [[cpp/thread/mutex/try_lock|{{tt|try_lock}}]] will return {{c|false}}.

The behavior of a program is undefined if a {{tt|recursive_mutex}} is destroyed while still owned by some thread.  The {{tt|recursive_mutex}} class satisfies all requirements of {{concept|Mutex}} and {{concept|StandardLayoutType}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|native_handle_type}}{{mark optional}} | ''implementation-defined''}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc constructor | recursive_mutex}}
{{dsc inc | cpp/thread/mutex/dsc destructor | recursive_mutex}}
{{dsc inc | cpp/thread/mutex/dsc operator{{=}}}}

{{dsc h2 | Locking}}
{{dsc inc | cpp/thread/mutex/dsc lock | recursive_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | recursive_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | recursive_mutex}}

{{dsc h2 | Native handle}}
{{dsc inc | cpp/thread/mutex/dsc native_handle | recursive_mutex}}
{{dsc end}}

[[de:cpp/thread/recursive mutex]]
[[es:cpp/thread/recursive mutex]]
[[fr:cpp/thread/recursive mutex]]
[[it:cpp/thread/recursive mutex]]
[[ja:cpp/thread/recursive mutex]]
[[pt:cpp/thread/recursive mutex]]
[[ru:cpp/thread/recursive mutex]]
[[zh:cpp/thread/recursive mutex]]</text>
      <sha1>q3699ot4c62stgftbj54nutkp91lg98</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive mutex/lock</title>
    <ns>0</ns>
    <id>2333</id>
    <revision>
      <id>51408</id>
      <parentid>43532</parentid>
      <timestamp>2013-06-01T04:01:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="367">{{include page|cpp/thread/mutex/lock|recursive_mutex}}

[[de:cpp/thread/recursive mutex/lock]]
[[es:cpp/thread/recursive mutex/lock]]
[[fr:cpp/thread/recursive mutex/lock]]
[[it:cpp/thread/recursive mutex/lock]]
[[ja:cpp/thread/recursive mutex/lock]]
[[pt:cpp/thread/recursive mutex/lock]]
[[ru:cpp/thread/recursive mutex/lock]]
[[zh:cpp/thread/recursive mutex/lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive mutex/native handle</title>
    <ns>0</ns>
    <id>2336</id>
    <revision>
      <id>51409</id>
      <parentid>43525</parentid>
      <timestamp>2013-06-01T04:01:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="448">{{include page|cpp/thread/mutex/native_handle|recursive_mutex}}

[[de:cpp/thread/recursive mutex/native handle]]
[[es:cpp/thread/recursive mutex/native handle]]
[[fr:cpp/thread/recursive mutex/native handle]]
[[it:cpp/thread/recursive mutex/native handle]]
[[ja:cpp/thread/recursive mutex/native handle]]
[[pt:cpp/thread/recursive mutex/native handle]]
[[ru:cpp/thread/recursive mutex/native handle]]
[[zh:cpp/thread/recursive mutex/native handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive mutex/recursive mutex</title>
    <ns>0</ns>
    <id>4490</id>
    <revision>
      <id>51410</id>
      <parentid>43519</parentid>
      <timestamp>2013-06-01T04:01:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="462">{{include page|cpp/thread/mutex/constructor|recursive_mutex}}

[[de:cpp/thread/recursive mutex/recursive mutex]]
[[es:cpp/thread/recursive mutex/recursive mutex]]
[[fr:cpp/thread/recursive mutex/recursive mutex]]
[[it:cpp/thread/recursive mutex/recursive mutex]]
[[ja:cpp/thread/recursive mutex/recursive mutex]]
[[pt:cpp/thread/recursive mutex/recursive mutex]]
[[ru:cpp/thread/recursive mutex/recursive mutex]]
[[zh:cpp/thread/recursive mutex/recursive mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive mutex/try lock</title>
    <ns>0</ns>
    <id>2334</id>
    <revision>
      <id>51411</id>
      <parentid>43512</parentid>
      <timestamp>2013-06-01T04:02:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="403">{{include page|cpp/thread/mutex/try_lock|recursive_mutex}}

[[de:cpp/thread/recursive mutex/try lock]]
[[es:cpp/thread/recursive mutex/try lock]]
[[fr:cpp/thread/recursive mutex/try lock]]
[[it:cpp/thread/recursive mutex/try lock]]
[[ja:cpp/thread/recursive mutex/try lock]]
[[pt:cpp/thread/recursive mutex/try lock]]
[[ru:cpp/thread/recursive mutex/try lock]]
[[zh:cpp/thread/recursive mutex/try lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive mutex/unlock</title>
    <ns>0</ns>
    <id>2335</id>
    <revision>
      <id>51412</id>
      <parentid>43504</parentid>
      <timestamp>2013-06-01T04:02:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="385">{{include page|cpp/thread/mutex/unlock|recursive_mutex}}

[[de:cpp/thread/recursive mutex/unlock]]
[[es:cpp/thread/recursive mutex/unlock]]
[[fr:cpp/thread/recursive mutex/unlock]]
[[it:cpp/thread/recursive mutex/unlock]]
[[ja:cpp/thread/recursive mutex/unlock]]
[[pt:cpp/thread/recursive mutex/unlock]]
[[ru:cpp/thread/recursive mutex/unlock]]
[[zh:cpp/thread/recursive mutex/unlock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive mutex/~recursive mutex</title>
    <ns>0</ns>
    <id>13125</id>
    <revision>
      <id>67043</id>
      <timestamp>2014-01-18T14:00:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fwd to template</comment>
      <text xml:space="preserve" bytes="60">{{include page|cpp/thread/mutex/destructor|recursive_mutex}}</text>
      <sha1>9waigs7jrkaa5yskafgo27ep3eq7ifc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex</title>
    <ns>0</ns>
    <id>2303</id>
    <revision>
      <id>83594</id>
      <parentid>78107</parentid>
      <timestamp>2016-03-02T09:06:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Member types */</comment>
      <text xml:space="preserve" bytes="2086">{{cpp/title|recursive_timed_mutex}}
{{cpp/thread/recursive_timed_mutex/navbar}}
{{ddcl | header=mutex | since=c++11 | 1=
class recursive_timed_mutex;
}}

The {{tt|recursive_timed_mutex}} class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads.

In a manner similar to {{lc|std::recursive_mutex}}, {{tt|recursive_timed_mutex}} provides exclusive, recursive ownership semantics.  In addition, {{tt|recursive_timed_mutex}} provides the ability to attempt to claim ownership of a {{tt|recursive_timed_mutex}} with a timeout via the [[cpp/thread/recursive_timed_mutex/try_lock_for|{{tt|try_lock_for}}]] and [[cpp/thread/recursive_timed_mutex/try_lock_until|{{tt|try_lock_until}}]] methods.

The {{tt|recursive_timed_mutex}} class satisfies all requirements of {{concept|TimedMutex}} and {{concept|StandardLayoutType}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|native_handle_type}}{{mark optional}} | ''implementation-defined''}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc constructor | recursive_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc destructor | recursive_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc operator{{=}}}}

{{dsc h2 | Locking}}
{{dsc inc | cpp/thread/mutex/dsc lock | recursive_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | recursive_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | recursive_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | recursive_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | recursive_timed_mutex}}

{{dsc h2 | Native handle}}
{{dsc inc | cpp/thread/mutex/dsc native_handle | recursive_timed_mutex}}
{{dsc end}}

[[de:cpp/thread/recursive timed mutex]]
[[es:cpp/thread/recursive timed mutex]]
[[fr:cpp/thread/recursive timed mutex]]
[[it:cpp/thread/recursive timed mutex]]
[[ja:cpp/thread/recursive timed mutex]]
[[pt:cpp/thread/recursive timed mutex]]
[[ru:cpp/thread/recursive timed mutex]]
[[zh:cpp/thread/recursive timed mutex]]</text>
      <sha1>l9yl64n0tb8w0gy9ok2qf4qp0lc78w6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/lock</title>
    <ns>0</ns>
    <id>2323</id>
    <revision>
      <id>51414</id>
      <parentid>43493</parentid>
      <timestamp>2013-06-01T04:02:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="421">{{include page|cpp/thread/mutex/lock|recursive_timed_mutex}}

[[de:cpp/thread/recursive timed mutex/lock]]
[[es:cpp/thread/recursive timed mutex/lock]]
[[fr:cpp/thread/recursive timed mutex/lock]]
[[it:cpp/thread/recursive timed mutex/lock]]
[[ja:cpp/thread/recursive timed mutex/lock]]
[[pt:cpp/thread/recursive timed mutex/lock]]
[[ru:cpp/thread/recursive timed mutex/lock]]
[[zh:cpp/thread/recursive timed mutex/lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/native handle</title>
    <ns>0</ns>
    <id>2328</id>
    <revision>
      <id>51415</id>
      <parentid>43486</parentid>
      <timestamp>2013-06-01T04:02:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="502">{{include page|cpp/thread/mutex/native_handle|recursive_timed_mutex}}

[[de:cpp/thread/recursive timed mutex/native handle]]
[[es:cpp/thread/recursive timed mutex/native handle]]
[[fr:cpp/thread/recursive timed mutex/native handle]]
[[it:cpp/thread/recursive timed mutex/native handle]]
[[ja:cpp/thread/recursive timed mutex/native handle]]
[[pt:cpp/thread/recursive timed mutex/native handle]]
[[ru:cpp/thread/recursive timed mutex/native handle]]
[[zh:cpp/thread/recursive timed mutex/native handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/recursive timed mutex</title>
    <ns>0</ns>
    <id>4491</id>
    <revision>
      <id>51416</id>
      <parentid>43479</parentid>
      <timestamp>2013-06-01T04:02:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="564">{{include page|cpp/thread/mutex/constructor|recursive_timed_mutex}}

[[de:cpp/thread/recursive timed mutex/recursive timed mutex]]
[[es:cpp/thread/recursive timed mutex/recursive timed mutex]]
[[fr:cpp/thread/recursive timed mutex/recursive timed mutex]]
[[it:cpp/thread/recursive timed mutex/recursive timed mutex]]
[[ja:cpp/thread/recursive timed mutex/recursive timed mutex]]
[[pt:cpp/thread/recursive timed mutex/recursive timed mutex]]
[[ru:cpp/thread/recursive timed mutex/recursive timed mutex]]
[[zh:cpp/thread/recursive timed mutex/recursive timed mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/try lock</title>
    <ns>0</ns>
    <id>2324</id>
    <revision>
      <id>51417</id>
      <parentid>43472</parentid>
      <timestamp>2013-06-01T04:02:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="457">{{include page|cpp/thread/mutex/try_lock|recursive_timed_mutex}}

[[de:cpp/thread/recursive timed mutex/try lock]]
[[es:cpp/thread/recursive timed mutex/try lock]]
[[fr:cpp/thread/recursive timed mutex/try lock]]
[[it:cpp/thread/recursive timed mutex/try lock]]
[[ja:cpp/thread/recursive timed mutex/try lock]]
[[pt:cpp/thread/recursive timed mutex/try lock]]
[[ru:cpp/thread/recursive timed mutex/try lock]]
[[zh:cpp/thread/recursive timed mutex/try lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/try lock for</title>
    <ns>0</ns>
    <id>2325</id>
    <revision>
      <id>51418</id>
      <parentid>43465</parentid>
      <timestamp>2013-06-01T04:02:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="493">{{include page|cpp/thread/mutex/try_lock_for|recursive_timed_mutex}}

[[de:cpp/thread/recursive timed mutex/try lock for]]
[[es:cpp/thread/recursive timed mutex/try lock for]]
[[fr:cpp/thread/recursive timed mutex/try lock for]]
[[it:cpp/thread/recursive timed mutex/try lock for]]
[[ja:cpp/thread/recursive timed mutex/try lock for]]
[[pt:cpp/thread/recursive timed mutex/try lock for]]
[[ru:cpp/thread/recursive timed mutex/try lock for]]
[[zh:cpp/thread/recursive timed mutex/try lock for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/try lock until</title>
    <ns>0</ns>
    <id>2326</id>
    <revision>
      <id>51419</id>
      <parentid>43457</parentid>
      <timestamp>2013-06-01T04:02:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="511">{{include page|cpp/thread/mutex/try_lock_until|recursive_timed_mutex}}

[[de:cpp/thread/recursive timed mutex/try lock until]]
[[es:cpp/thread/recursive timed mutex/try lock until]]
[[fr:cpp/thread/recursive timed mutex/try lock until]]
[[it:cpp/thread/recursive timed mutex/try lock until]]
[[ja:cpp/thread/recursive timed mutex/try lock until]]
[[pt:cpp/thread/recursive timed mutex/try lock until]]
[[ru:cpp/thread/recursive timed mutex/try lock until]]
[[zh:cpp/thread/recursive timed mutex/try lock until]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/unlock</title>
    <ns>0</ns>
    <id>2327</id>
    <revision>
      <id>51420</id>
      <parentid>43450</parentid>
      <timestamp>2013-06-01T04:02:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="439">{{include page|cpp/thread/mutex/unlock|recursive_timed_mutex}}

[[de:cpp/thread/recursive timed mutex/unlock]]
[[es:cpp/thread/recursive timed mutex/unlock]]
[[fr:cpp/thread/recursive timed mutex/unlock]]
[[it:cpp/thread/recursive timed mutex/unlock]]
[[ja:cpp/thread/recursive timed mutex/unlock]]
[[pt:cpp/thread/recursive timed mutex/unlock]]
[[ru:cpp/thread/recursive timed mutex/unlock]]
[[zh:cpp/thread/recursive timed mutex/unlock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/recursive timed mutex/~recursive timed mutex</title>
    <ns>0</ns>
    <id>13127</id>
    <revision>
      <id>67045</id>
      <timestamp>2014-01-18T14:01:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fwd to template</comment>
      <text xml:space="preserve" bytes="66">{{include page|cpp/thread/mutex/destructor|recursive_timed_mutex}}</text>
      <sha1>lgn81npk2in5hq5f20iyvhks18fcoxj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/scoped lock</title>
    <ns>0</ns>
    <id>15847</id>
    <revision>
      <id>89043</id>
      <parentid>89036</parentid>
      <timestamp>2016-12-22T22:03:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>s/lock_guard/scoped_lock</comment>
      <text xml:space="preserve" bytes="2509">{{cpp/title|scoped_lock}}
{{cpp/thread/scoped_lock/navbar}}
{{dcl begin}}
{{dcl header|mutex}}
{{dcl | since=c++17|
template&lt; class... MutexTypes &gt;
class scoped_lock;
}}
{{dcl end}}

The class {{tt|scoped_lock}} is a mutex wrapper that provides a convenient [[enwiki:Resource_Acquisition_Is_Initialization|RAII-style]] mechanism for owning one or more mutexes for the duration of a scoped block.  

When a {{tt|scoped_lock}} object is created, it attempts to take ownership of the mutexes it is given. When control leaves the scope in which the {{tt|scoped_lock}} object was created, the {{tt|scoped_lock}} is destructed and the mutexes are released, in reverse order. If several mutexes are given, deadlock avoidance algorithm is used as if by {{lc|std::lock}}.

The {{tt|scoped_lock}} class is non-copyable.

===Template parameters===
{{par begin}}
{{par | MutexTypes | the types of the mutexes to lock. The types must meet the {{concept|Lockable}} requirements unless {{c|1=sizeof...(MutexTypes)==1}}, in which case the only type must meet {{concept|BasicLockable}}}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|mutex_type}} | Mutex}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/scoped_lock/dsc constructor}}
{{dsc inc | cpp/thread/scoped_lock/dsc destructor}}
{{dsc inc | cpp/thread/scoped_lock/dsc operator{{=}}}}
{{dsc end}}

===Example===
{{todo|should show multiple mutexes}}
{{example|
 | code=
#include &lt;thread&gt;
#include &lt;mutex&gt;
#include &lt;iostream&gt;

int g_i = 0;
std::mutex g_i_mutex;  // protects g_i

void safe_increment()
{
    std::scoped_lock lock{g_i_mutex};
    ++g_i;

    std::cout &lt;&lt; std::this_thread::get_id() &lt;&lt; &quot;: &quot; &lt;&lt; g_i &lt;&lt; '\n';

    // g_i_mutex is automatically released when lock
    // goes out of scope
}

int main()
{
    std::cout &lt;&lt; __func__ &lt;&lt; &quot;: &quot; &lt;&lt; g_i &lt;&lt; '\n';

    std::thread t1(safe_increment);
    std::thread t2(safe_increment);

    t1.join();
    t2.join();

    std::cout &lt;&lt; __func__ &lt;&lt; &quot;: &quot; &lt;&lt; g_i &lt;&lt; '\n';
}
 | p=true
 | output=
main: 0
140641306900224: 1
140641298507520: 2
main: 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc unique_lock}}
{{dsc end}}
{{dsc begin}}
{{dsc inc | cpp/thread/dsc lock_guard}}
{{dsc end}}

[[de:cpp/thread/scoped_lock]]
[[es:cpp/thread/scoped_lock]]
[[fr:cpp/thread/scoped_lock]]
[[it:cpp/thread/scoped_lock]]
[[ja:cpp/thread/scoped_lock]]
[[pt:cpp/thread/scoped_lock]]
[[ru:cpp/thread/scoped_lock]]
[[zh:cpp/thread/scoped_lock]]</text>
      <sha1>99u3wpsuf3kb4i46ld61blsjsizqc44</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/scoped lock/scoped lock</title>
    <ns>0</ns>
    <id>16192</id>
    <revision>
      <id>91197</id>
      <parentid>91196</parentid>
      <timestamp>2017-03-26T05:59:13Z</timestamp>
      <contributor>
        <ip>50.125.67.193</ip>
      </contributor>
      <comment>fix reference to this class (probably copy/paste gone awry)</comment>
      <text xml:space="preserve" bytes="1651">{{cpp/thread/scoped_lock/title|scoped_lock}}
{{cpp/thread/scoped_lock/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
explicit scoped_lock( MutexTypes&amp;... m );
}}
{{dcl | num=2 | since=c++17 |
scoped_lock( MutexTypes&amp;... m, std::adopt_lock_t t );
}}
{{dcl | num=3 | since=c++17 |1=
scoped_lock( const scoped_lock&amp; ) = delete;
}}
{{dcl end}}

Acquires ownership of the given mutexes {{tt|m}}.

@1@ If {{c|1=sizeof...(MutexTypes) == 0}}, does nothing. Otherwise, If {{c|1=sizeof...(MutexTypes) == 1}}, effectively calls {{c|m.lock()}}. Otherwise, effectively calls {{c|std::lock(m...)}}. The behavior is undefined if one of {{tt|MutexTypes}} is not a recursive mutex and the current thread already owns the corresponding argument in {{c|m...}}.
@2@ Acquires ownership of the mutexes {{c|m...}} without attempting to lock any of them. The behavior is undefined unless the current thread owns all of the mutexes in {{tt|m...}}.
@3@ Copy constructor is deleted.

The behavior is undefined if {{tt|m}} is destroyed before the {{tt|scoped_lock}} object is.

===Parameters===
{{par begin}}
{{par | m | mutexes to acquire ownership of}}
{{par | t | tag parameter used to select non-locking version of the constructor}}
{{par end}}

===Exceptions===
@1@ Throws any exceptions thrown by {{c|m.lock()}}
@2@ Throws nothing

[[de:cpp/thread/scoped lock/scoped lock]]
[[es:cpp/thread/scoped lock/scoped lock]]
[[fr:cpp/thread/scoped lock/scoped lock]]
[[it:cpp/thread/scoped lock/scoped lock]]
[[ja:cpp/thread/scoped lock/scoped lock]]
[[pt:cpp/thread/scoped lock/scoped lock]]
[[ru:cpp/thread/scoped lock/scoped lock]]
[[zh:cpp/thread/scoped lock/scoped lock]]</text>
      <sha1>7ds2ihfmwjaecz8tkgbbld57yuphpmo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/scoped lock/~scoped lock</title>
    <ns>0</ns>
    <id>16194</id>
    <revision>
      <id>90549</id>
      <timestamp>2017-03-04T04:30:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="633">{{cpp/thread/scoped_lock/title|~scoped_lock}}
{{cpp/thread/scoped_lock/navbar}}
{{ddcl | since=c++17 |
~scoped_lock();
}}

Releases the ownership of the owned mutexes.

Effectively calls {{c|unlock()}} on every mutex from the pack of mutexes passed to the {{tt|lock_guard}}'s constructor.

[[de:cpp/thread/scoped lock/~scoped lock]]
[[es:cpp/thread/scoped lock/~scoped lock]]
[[fr:cpp/thread/scoped lock/~scoped lock]]
[[it:cpp/thread/scoped lock/~scoped lock]]
[[ja:cpp/thread/scoped lock/~scoped lock]]
[[pt:cpp/thread/scoped lock/~scoped lock]]
[[ru:cpp/thread/scoped lock/~scoped lock]]
[[zh:cpp/thread/scoped lock/~scoped lock]]</text>
      <sha1>o66wssapvxwgxw3eqfz2j4rm2zytxz8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future</title>
    <ns>0</ns>
    <id>2519</id>
    <revision>
      <id>85482</id>
      <parentid>74015</parentid>
      <timestamp>2016-04-21T21:27:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Member functions */ likewise</comment>
      <text xml:space="preserve" bytes="3571">{{cpp/title|shared_future}}
{{cpp/thread/shared_future/navbar}}
{{dcl begin}}
{{dcl header | future}}
{{dcl | num=1 | since=c++11 |
template&lt; class T &gt; class shared_future;
}}
{{dcl | num=2 | since=c++11 |
template&lt; class T &gt; class shared_future&lt;T&amp;&gt;;
}}
{{dcl | num=3 | since=c++11 |
template&lt;&gt;          class shared_future&lt;void&gt;;
}}
{{dcl end}}

The class template {{tt|std::shared_future}} provides a mechanism to access the result of asynchronous operations, similar to {{lc|std::future}}, except that multiple threads are allowed to wait for the same shared state. Unlike {{lc|std::future}}, which is only moveable (so only one instance can refer to any particular asynchronous result), {{tt|std::shared_future}} is copyable and multiple shared future objects may refer to the same shared state.

Access to the same shared state from multiple threads is safe if each thread does it through its own copy of a {{tt|shared_future}} object.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/future/dsc constructor | shared_future}}
{{dsc mem dtor | cpp/thread/shared_future/~shared_future | destructs the future object}}
{{dsc mem fun | cpp/thread/shared_future/operator{{=}} | assigns the contents}}

{{dsc h2 | Getting the result}}
{{dsc inc | cpp/thread/future/dsc get | shared_future}}

{{dsc h2 | State}}
{{dsc inc | cpp/thread/future/dsc valid | shared_future}}
{{dsc inc | cpp/thread/future/dsc wait | shared_future}}
{{dsc inc | cpp/thread/future/dsc wait_for | shared_future}}
{{dsc inc | cpp/thread/future/dsc wait_until | shared_future}}
{{dsc end}}

===Example===
{{example|A {{tt|shared_future}} may be used to signal multiple threads simultaneously, similar to {{lc|std::condition_variable::notify_all()}}
|code=
#include &lt;iostream&gt;
#include &lt;future&gt;
#include &lt;chrono&gt;

int main()
{   
    std::promise&lt;void&gt; ready_promise, t1_ready_promise, t2_ready_promise;
    std::shared_future&lt;void&gt; ready_future(ready_promise.get_future());

    std::chrono::time_point&lt;std::chrono::high_resolution_clock&gt; start;

    auto fun1 = [&amp;, ready_future]() -&gt; std::chrono::duration&lt;double, std::milli&gt; 
    {
        t1_ready_promise.set_value();
        ready_future.wait(); // waits for the signal from main()
        return std::chrono::high_resolution_clock::now() - start;
    };


    auto fun2 = [&amp;, ready_future]() -&gt; std::chrono::duration&lt;double, std::milli&gt; 
    {
        t2_ready_promise.set_value();
        ready_future.wait(); // waits for the signal from main()
        return std::chrono::high_resolution_clock::now() - start;
    };

    auto result1 = std::async(std::launch::async, fun1);
    auto result2 = std::async(std::launch::async, fun2);

    // wait for the threads to become ready
    t1_ready_promise.get_future().wait();
    t2_ready_promise.get_future().wait();

    // the threads are ready, start the clock
    start = std::chrono::high_resolution_clock::now();

    // signal the threads to go
    ready_promise.set_value();

    std::cout &lt;&lt; &quot;Thread 1 received the signal &quot;
              &lt;&lt; result1.get().count() &lt;&lt; &quot; ms after start\n&quot;
              &lt;&lt; &quot;Thread 2 received the signal &quot;
              &lt;&lt; result2.get().count() &lt;&lt; &quot; ms after start\n&quot;;
}
|p=true
|output=
Thread 1 received the signal 0.072 ms after start
Thread 2 received the signal 0.041 ms after start
}}

[[de:cpp/thread/shared future]]
[[es:cpp/thread/shared future]]
[[fr:cpp/thread/shared future]]
[[it:cpp/thread/shared future]]
[[ja:cpp/thread/shared future]]
[[pt:cpp/thread/shared future]]
[[ru:cpp/thread/shared future]]
[[zh:cpp/thread/shared future]]</text>
      <sha1>npkqs2tvdin28s1lnryo3uzpuvsnyyv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/get</title>
    <ns>0</ns>
    <id>6459</id>
    <revision>
      <id>51422</id>
      <parentid>43440</parentid>
      <timestamp>2013-06-01T04:02:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="341">{{include page|cpp/thread/future/get|shared_future}}

[[de:cpp/thread/shared future/get]]
[[es:cpp/thread/shared future/get]]
[[fr:cpp/thread/shared future/get]]
[[it:cpp/thread/shared future/get]]
[[ja:cpp/thread/shared future/get]]
[[pt:cpp/thread/shared future/get]]
[[ru:cpp/thread/shared future/get]]
[[zh:cpp/thread/shared future/get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/operator=</title>
    <ns>0</ns>
    <id>8702</id>
    <revision>
      <id>91644</id>
      <parentid>88395</parentid>
      <timestamp>2017-03-31T19:53:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1401">{{cpp/thread/shared_future/title | operator{{=}}}}
{{cpp/thread/shared_future/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
shared_future&amp; operator=( const shared_future&amp; other );
}}
{{dcl | num=2 | since=c++11 |1=
shared_future&amp; operator=( shared_future&amp;&amp; other );
}}
{{dcl end}}

Assigns the contents of another {{tt|shared_future}}.
@1@ Releases any shared state and assigns the contents of {{tt|other}} to {{c|*this}}. After the assignment, {{c|this-&gt;valid() {{==}} other.valid()}}.
@2@ Releases any shared state and move-assigns the contents of {{tt|other}} to {{c|*this}}. After the assignment, {{c|other.valid() {{==}} false}} and {{lc|valid|this-&gt;valid()}} will yield the same value as {{c|other.valid()}} before the assignment.

===Parameters===
{{par begin}}
{{par | other | a {{tt|std::shared_future}} that will transfer state to {{c|*this}} }}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{rev begin}}
{{rev|until=c++17|
@1@ (none)
}}
{{rev|since=c++17|
@1@ {{unreviewed noexcept}}
}}
{{rev end}}
@2@ {{unreviewed noexcept}}

[[de:cpp/thread/shared future/operator=]]
[[es:cpp/thread/shared future/operator=]]
[[fr:cpp/thread/shared future/operator=]]
[[it:cpp/thread/shared future/operator=]]
[[ja:cpp/thread/shared future/operator=]]
[[pt:cpp/thread/shared future/operator=]]
[[ru:cpp/thread/shared future/operator=]]
[[zh:cpp/thread/shared future/operator=]]</text>
      <sha1>5xxxalqjdwh6rvzmfvewlom55wf4uee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/shared future</title>
    <ns>0</ns>
    <id>8698</id>
    <revision>
      <id>91627</id>
      <parentid>88394</parentid>
      <timestamp>2017-03-31T19:52:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1557">{{cpp/thread/shared_future/title | shared_future}}
{{cpp/thread/shared_future/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
shared_future();
}}
{{dcl | num=2 | since=c++11 |
shared_future( const shared_future&amp; other );
}}
{{dcl | num=3 | since=c++11 |
shared_future( std::future&lt;T&gt;&amp;&amp; other );
}}
{{dcl | num=4 | since=c++11 |
shared_future( shared_future&amp;&amp; other );
}}
{{dcl end}}

Constructs a new {{tt|shared_future}}.

@1@ Default constructor. Constructs an empty shared future, that doesn't refer to a shared state, that is {{c|1=valid() == false}}.
@2@ Constructs a shared future that refers to the same shared state, as {{tt|other}}, if there's any.
@3-4@ Transfers the shared state held by {{tt|other}} to {{c|*this}}. After the construction, {{c|1=other-&gt;valid() == false}}, also {{c|valid()}} returns the same value as {{c|other.valid()}} would have returned before the construction.

===Parameters===
{{par begin}}
{{par | other | another future object to initialize with}}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

{{rev begin}}
{{rev|until=c++17|
@2@ (none)
}}
{{rev|since=c++17|
@2@ {{unreviewed noexcept}}
}}
{{rev end}}
@3-4@ {{unreviewed noexcept}}

[[de:cpp/thread/shared future/shared future]]
[[es:cpp/thread/shared future/shared future]]
[[fr:cpp/thread/shared future/shared future]]
[[it:cpp/thread/shared future/shared future]]
[[ja:cpp/thread/shared future/shared future]]
[[pt:cpp/thread/shared future/shared future]]
[[ru:cpp/thread/shared future/shared future]]
[[zh:cpp/thread/shared future/shared future]]</text>
      <sha1>eaoe82mi9g4bxvg7z8sdmv8ac10ye5e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/valid</title>
    <ns>0</ns>
    <id>6460</id>
    <revision>
      <id>51425</id>
      <parentid>43422</parentid>
      <timestamp>2013-06-01T04:02:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="359">{{include page|cpp/thread/future/valid|shared_future}}

[[de:cpp/thread/shared future/valid]]
[[es:cpp/thread/shared future/valid]]
[[fr:cpp/thread/shared future/valid]]
[[it:cpp/thread/shared future/valid]]
[[ja:cpp/thread/shared future/valid]]
[[pt:cpp/thread/shared future/valid]]
[[ru:cpp/thread/shared future/valid]]
[[zh:cpp/thread/shared future/valid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/wait</title>
    <ns>0</ns>
    <id>6461</id>
    <revision>
      <id>51426</id>
      <parentid>43419</parentid>
      <timestamp>2013-06-01T04:02:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="350">{{include page|cpp/thread/future/wait|shared_future}}

[[de:cpp/thread/shared future/wait]]
[[es:cpp/thread/shared future/wait]]
[[fr:cpp/thread/shared future/wait]]
[[it:cpp/thread/shared future/wait]]
[[ja:cpp/thread/shared future/wait]]
[[pt:cpp/thread/shared future/wait]]
[[ru:cpp/thread/shared future/wait]]
[[zh:cpp/thread/shared future/wait]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/wait for</title>
    <ns>0</ns>
    <id>6462</id>
    <revision>
      <id>51427</id>
      <parentid>43412</parentid>
      <timestamp>2013-06-01T04:02:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="386">{{include page|cpp/thread/future/wait_for|shared_future}}

[[de:cpp/thread/shared future/wait for]]
[[es:cpp/thread/shared future/wait for]]
[[fr:cpp/thread/shared future/wait for]]
[[it:cpp/thread/shared future/wait for]]
[[ja:cpp/thread/shared future/wait for]]
[[pt:cpp/thread/shared future/wait for]]
[[ru:cpp/thread/shared future/wait for]]
[[zh:cpp/thread/shared future/wait for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/wait until</title>
    <ns>0</ns>
    <id>6463</id>
    <revision>
      <id>51428</id>
      <parentid>43404</parentid>
      <timestamp>2013-06-01T04:02:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="404">{{include page|cpp/thread/future/wait_until|shared_future}}

[[de:cpp/thread/shared future/wait until]]
[[es:cpp/thread/shared future/wait until]]
[[fr:cpp/thread/shared future/wait until]]
[[it:cpp/thread/shared future/wait until]]
[[ja:cpp/thread/shared future/wait until]]
[[pt:cpp/thread/shared future/wait until]]
[[ru:cpp/thread/shared future/wait until]]
[[zh:cpp/thread/shared future/wait until]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared future/~shared future</title>
    <ns>0</ns>
    <id>8699</id>
    <revision>
      <id>63468</id>
      <parentid>43399</parentid>
      <timestamp>2013-07-10T01:33:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="625">{{cpp/thread/shared_future/title | ~shared_future}}
{{cpp/thread/shared_future/navbar}}
{{ddcl | since=c++11 |
~shared_future();
}}

If {{c|*this}} is the last object referring to the shared state, destroys the shared state. Otherwise does nothing.

[[de:cpp/thread/shared future/~shared future]]
[[es:cpp/thread/shared future/~shared future]]
[[fr:cpp/thread/shared future/~shared future]]
[[it:cpp/thread/shared future/~shared future]]
[[ja:cpp/thread/shared future/~shared future]]
[[pt:cpp/thread/shared future/~shared future]]
[[ru:cpp/thread/shared future/~shared future]]
[[zh:cpp/thread/shared future/~shared future]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock</title>
    <ns>0</ns>
    <id>10112</id>
    <revision>
      <id>85953</id>
      <parentid>76813</parentid>
      <timestamp>2016-06-06T20:41:17Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention condition_variable_any</comment>
      <text xml:space="preserve" bytes="4429">{{cpp/title|shared_lock}}
{{cpp/thread/shared_lock/navbar}}
{{ddcl | header=shared_mutex | since=c++14 | 1=
template&lt; class Mutex &gt;
class shared_lock;
}}

The class {{tt|shared_lock}} is a general-purpose shared mutex ownership wrapper allowing deferred locking, timed locking and transfer of lock ownership. Locking a {{tt|shared_lock}} locks the associated shared mutex in shared mode (to lock it in exclusive mode, {{lc|std::unique_lock}} can be used)

The {{tt|shared_lock}} class is movable, but not copyable -- it meets the requirements of {{concept|MoveConstructible}} and {{concept|MoveAssignable}} but not of {{concept|CopyConstructible}} or {{concept|CopyAssignable}}.

In order to wait in a shared mutex in shared ownership mode, {{lc|std::condition_variable_any}} can be used ({{lc|std::condition_variable}} requires {{lc|std::unique_lock}} and so can only wait in unique ownership mode)

===Template parameters===
{{par begin}}
{{par | Mutex | the type of the shared mutex to lock. The type must meet the {{concept|SharedMutex}} requirements}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|mutex_type}} | {{c|Mutex}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc constructor}}
{{dsc inc | cpp/thread/shared_lock/dsc destructor}}
{{dsc inc | cpp/thread/shared_lock/dsc operator{{=}}}}

{{dsc h2 | Shared locking}}
{{dsc inc | cpp/thread/shared_lock/dsc lock}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock_for}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock_until}}
{{dsc inc | cpp/thread/shared_lock/dsc unlock}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/thread/shared_lock/dsc swap}}
{{dsc inc | cpp/thread/shared_lock/dsc release}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/thread/shared_lock/dsc mutex}}
{{dsc inc | cpp/thread/shared_lock/dsc owns_lock}}
{{dsc inc | cpp/thread/shared_lock/dsc operator bool}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc swap2}}
{{dsc end}}
&lt;!--
===Possible implementation===
(from n2406)
{{source| 1=
class shared_mutex ;
{
    mutex    mut_;
    cond_var gate1_;
    cond_var gate2_;
    unsigned state_;

    static const unsigned write_entered_ = 1U &lt;&lt; (sizeof(unsigned)*CHAR_BIT - 1);
    static const unsigned n_readers_ = ~write_entered_;

public:

    shared_mutex() : state_(0) {}

// Exclusive ownership

    void lock();
    bool try_lock();
    bool timed_lock(nanoseconds rel_time);
    void unlock();

// Shared ownership

    void lock_shared();
    bool try_lock_shared();
    bool timed_lock_shared(nanoseconds rel_time);
    void unlock_shared();
};
// Exclusive ownership

void
shared_mutex::lock()
{
    std::this_thread::disable_interruption _;
    unique_lock&lt;mutex&gt; lk(mut_);
    while (state_ &amp; write_entered_)
        gate1_.wait(lk);
    state_ {{!}} = write_entered_;
    while (state_ &amp; n_readers_)
        gate2_.wait(lk);
}
bool
shared_mutex::try_lock()
{
    unique_lock&lt;mutex&gt; lk(mut_, try_to_lock);
    if (lk.owns_lock() &amp;&amp; state_ == 0)
    {
        state_ = write_entered_;
        return true;
    }
    return false;
}
void
shared_mutex::unlock()
{
    {
    scoped_lock&lt;mutex&gt; _(mut_);
    state_ = 0;
    }
    gate1_.notify_all();
}
// Shared ownership
void
shared_mutex::lock_shared()
{
    std::this_thread::disable_interruption _;
    unique_lock&lt;mutex&gt; lk(mut_);
    while ((state_ &amp; write_entered_) {{!!}} (state_ &amp; n_readers_) == n_readers_)
        gate1_.wait(lk);
    unsigned num_readers = (state_ &amp; n_readers_) + 1;
    state_ &amp;= ~n_readers_;
    state_ {{!}} = num_readers;
}
bool
shared_mutex::try_lock_shared()
{
    unique_lock&lt;mutex&gt; lk(mut_, try_to_lock);
    unsigned num_readers = state_ &amp; n_readers_;
    if (lk.owns_lock() &amp;&amp; !(state_ &amp; write_entered_) &amp;&amp; num_readers != n_readers_)
    {
        ++num_readers;
        state_ &amp;= ~n_readers_;
        state_ {{!}}= num_readers;
        return true;
    }
    return false;
}
void
shared_mutex::unlock_shared()
{
    scoped_lock&lt;mutex&gt; _(mut_);
    unsigned num_readers = (state_ &amp; n_readers_) - 1;
    state_ &amp;= ~n_readers_;
    state_ {{!=}} num_readers;
    if (state_ &amp; write_entered_)
    {
        if (num_readers {{==}} 0)
            gate2_.notify_one();
    }
    else
    {
        if (num_readers {{==}} n_readers_ - 1)
            gate1_.notify_one();
    }
}
}}
--&gt;</text>
      <sha1>077mpx2rxzoj73tcl461vt8g39u9zg2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/lock</title>
    <ns>0</ns>
    <id>12980</id>
    <revision>
      <id>79453</id>
      <parentid>79451</parentid>
      <timestamp>2015-07-06T20:22:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>what T.C. said</comment>
      <text xml:space="preserve" bytes="1146">{{cpp/thread/shared_lock/title|lock}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
void lock();
}}
{{dcl end}}

Locks the associated mutex in shared mode. Effectively calls {{c|mutex()-&gt;lock_shared()}}.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;lock_shared()}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the associated mutex is already locked by this {{tt|shared_lock}} (that is, {{rlp|owns_lock}} returns {{tt|true}}), {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock}}
{{dsc inc | cpp/thread/shared_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/shared lock/lock]]
[[es:cpp/thread/shared lock/lock]]
[[fr:cpp/thread/shared lock/lock]]
[[it:cpp/thread/shared lock/lock]]
[[ja:cpp/thread/shared lock/lock]]
[[pt:cpp/thread/shared lock/lock]]
[[ru:cpp/thread/shared lock/lock]]
[[zh:cpp/thread/shared lock/lock]]</text>
      <sha1>g65ktnfjehyp2akiytoftqzmhcmgv2s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/mutex</title>
    <ns>0</ns>
    <id>12987</id>
    <revision>
      <id>91535</id>
      <parentid>65464</parentid>
      <timestamp>2017-03-31T19:49:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="754">{{cpp/thread/shared_lock/title|mutex}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
mutex_type* mutex() const;
}}
{{dcl end}}

Returns a pointer to the associated mutex, or a null pointer if there is no associated mutex.

===Parameters===
(none)

===Return value===
Pointer to the associated mutex or a null pointer if there is no associated mutex.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|
 |code=
 |output=
}}

[[de:cpp/thread/shared lock/mutex]]
[[es:cpp/thread/shared lock/mutex]]
[[fr:cpp/thread/shared lock/mutex]]
[[it:cpp/thread/shared lock/mutex]]
[[ja:cpp/thread/shared lock/mutex]]
[[pt:cpp/thread/shared lock/mutex]]
[[ru:cpp/thread/shared lock/mutex]]
[[zh:cpp/thread/shared lock/mutex]]</text>
      <sha1>kqopy24d37ss51jpq2sk7xd99aa7yba</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/operator bool</title>
    <ns>0</ns>
    <id>12989</id>
    <revision>
      <id>91766</id>
      <parentid>65466</parentid>
      <timestamp>2017-03-31T19:57:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="907">{{cpp/thread/shared_lock/title|operator bool}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
explicit operator bool() const;
}}
{{dcl end}}

Checks whether {{c|*this}} owns a locked mutex or not. Effectively calls {{lc|owns_lock()}}.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} has an associated mutex and has acquired shared ownership of it, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc owns_lock}}
{{dsc end}}

[[de:cpp/thread/shared lock/operator bool]]
[[es:cpp/thread/shared lock/operator bool]]
[[fr:cpp/thread/shared lock/operator bool]]
[[it:cpp/thread/shared lock/operator bool]]
[[ja:cpp/thread/shared lock/operator bool]]
[[pt:cpp/thread/shared lock/operator bool]]
[[ru:cpp/thread/shared lock/operator bool]]
[[zh:cpp/thread/shared lock/operator bool]]</text>
      <sha1>9znxmxrb6h792a314daizud7vv67n03</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/operator=</title>
    <ns>0</ns>
    <id>12978</id>
    <revision>
      <id>91864</id>
      <parentid>65420</parentid>
      <timestamp>2017-03-31T20:00:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1112">{{cpp/thread/shared_lock/title|operator{{=}}}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
shared_lock&amp; operator=( shared_lock&amp;&amp; other );
}}
{{dcl end}}

Move assignment operator. Replaces the contents with those of {{tt|other}} using move semantics. 

If, prior to this call, {{c|*this}} has an associated mutex (({{lc|mutex()}} returns a non-null pointer) and has acquired ownership of it ({{lc|owns()}} returns {{c|true}}), the mutex is unlocked by calling {{lc|std::shared_mutex::unlock_shared|unlock_shared()}}.

After this call, {{tt|other}} has no associated mutex.


===Parameters===
{{par begin}}
{{par | other | another {{tt|shared_lock}} to replace the state with}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/thread/shared lock/operator=]]
[[es:cpp/thread/shared lock/operator=]]
[[fr:cpp/thread/shared lock/operator=]]
[[it:cpp/thread/shared lock/operator=]]
[[ja:cpp/thread/shared lock/operator=]]
[[pt:cpp/thread/shared lock/operator=]]
[[ru:cpp/thread/shared lock/operator=]]
[[zh:cpp/thread/shared lock/operator=]]</text>
      <sha1>tk53l2o564r73iu5x8if9mplzyaj95p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/owns lock</title>
    <ns>0</ns>
    <id>12988</id>
    <revision>
      <id>91534</id>
      <parentid>65465</parentid>
      <timestamp>2017-03-31T19:49:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="829">{{cpp/thread/shared_lock/title|owns_lock}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
bool owns_lock() const;
}}
{{dcl end}}

Checks whether {{c|*this}} owns a locked mutex or not.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} has an associated mutex and has acquired shared ownership of it, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc operator_bool}}
{{dsc end}}

[[de:cpp/thread/shared lock/owns lock]]
[[es:cpp/thread/shared lock/owns lock]]
[[fr:cpp/thread/shared lock/owns lock]]
[[it:cpp/thread/shared lock/owns lock]]
[[ja:cpp/thread/shared lock/owns lock]]
[[pt:cpp/thread/shared lock/owns lock]]
[[ru:cpp/thread/shared lock/owns lock]]
[[zh:cpp/thread/shared lock/owns lock]]</text>
      <sha1>qy8ok16i2hakhwfl298rin794tx11xm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/release</title>
    <ns>0</ns>
    <id>12986</id>
    <revision>
      <id>91583</id>
      <parentid>65455</parentid>
      <timestamp>2017-03-31T19:50:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1037">{{cpp/thread/shared_lock/title|release}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
mutex_type* release();
}}
{{dcl end}}

Breaks the association of the associated mutex, if any, and {{c|*this}}. 

No locks are unlocked. If the {{c|*this}} held ownership of the associated mutex prior to the call, the caller is now responsible to unlock the mutex.

===Parameters===
(none)

===Return value===
Pointer to the associated mutex or {{lc|NULL}} if there was no associated mutex.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc unlock}}
{{dsc inc | cpp/thread/unique_lock/dsc release}}
{{dsc end}}

[[de:cpp/thread/shared lock/release]]
[[es:cpp/thread/shared lock/release]]
[[fr:cpp/thread/shared lock/release]]
[[it:cpp/thread/shared lock/release]]
[[ja:cpp/thread/shared lock/release]]
[[pt:cpp/thread/shared lock/release]]
[[ru:cpp/thread/shared lock/release]]
[[zh:cpp/thread/shared lock/release]]</text>
      <sha1>ra5mju1rpg86301o2kvpveh6s15fwg1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/shared lock</title>
    <ns>0</ns>
    <id>12975</id>
    <revision>
      <id>91867</id>
      <parentid>88104</parentid>
      <timestamp>2017-03-31T20:00:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3828">{{cpp/thread/shared_lock/title|shared_lock}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++14 | 1=
shared_lock();
}}
{{dcl | num=2 | since=c++14 | 1=
shared_lock( shared_lock&amp;&amp; other );
}}
{{dcl | num=3 | since=c++14 | 1=
explicit shared_lock( mutex_type&amp; m );
}}
{{dcl | num=4 | since=c++14 | 1=
shared_lock( mutex_type&amp; m, std::defer_lock_t t );
}}
{{dcl | num=5 | since=c++14 | 1=
shared_lock( mutex_type&amp; m, std::try_to_lock_t t );
}}
{{dcl | num=6 | since=c++14 | 1=
shared_lock( mutex_type&amp; m, std::adopt_lock_t t );
}}
{{dcl | num=7 | since=c++14 | 1=
template&lt; class Rep, class Period &gt;
shared_lock( mutex_type&amp; m, 
             const std::chrono::duration&lt;Rep,Period&gt;&amp; timeout_duration );
}}
{{dcl | num=8 | since=c++14 | 1=
template&lt; class Clock, class Duration &gt;
shared_lock( mutex_type&amp; m, 
             const std::chrono::time_point&lt;Clock,Duration&gt;&amp; timeout_time );
}}
{{dcl end}}

Constructs a {{tt|shared_lock}}, optionally locking the supplied mutex.

@1@ Constructs a {{tt|shared_lock}} with no associated mutex.
@2@ Move constructor. Initializes the {{tt|shared_lock}} with the contents of {{tt|other}}. Leaves {{tt|other}} with no associated mutex.
@3-8@ Constructs a {{tt|shared_lock}} with {{tt|m}} as the associated mutex. Additionally:
:@3@ Locks the associated mutex in shared mode by calling {{c|m.lock_shared()}}. The behavior is undefined if this thread already owns the mutex in any mode.
:@4@ Does not lock the associated mutex.
:@5@ Tries to lock the associated mutex in shared mode without blocking by calling {{c|m.try_lock_shared()}}. The behavior is undefined if this thread already owns the mutex in any mode.
:@6@ Assumes the calling thread already owns {{tt|m}} in shared mode.
@7@ Tries to lock the associated mutex in shared mode by calling {{c|m.try_lock_shared_until(timeout_duration)}}, which blocks until specified {{tt|timeout_duration}} has elapsed or the lock is acquired, whichever comes first. May block for longer than {{tt|timeout_duration}}. The behavior is undefined if this thread already owns the mutex in any mode.
@8@ Tries to lock the associated mutex in shared mode by calling {{c|m.try_lock_shared_for(timeout_time)}}, which blocks until specified {{tt|timeout_time}} has been reached or the lock is acquired, whichever comes first. May block for longer than until {{tt|timeout_time}} has been reached. The behavior is undefined if this thread already owns the mutex in any mode.

===Parameters===
{{par begin}}
{{par | other | another {{tt|shared_lock}} to initialize the state with}}
{{par | m | mutex to associate with the lock and optionally acquire ownership of}}
{{par | t | tag parameter used to select constructors with different locking strategies}}
{{par | timeout_duration | maximum duration to block for}}
{{par | timeout_time | maximum time point to block until}}
{{par end}}

===Exceptions===
@1,2,4@ {{unreviewed noexcept}}

===Example===
{{example|
 | code=
#include &lt;shared_mutex&gt;
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

std::shared_timed_mutex m;
int i = 10;

void read()
{
   // both the threads get access to the integer i
   std::shared_lock&lt;std::shared_timed_mutex&gt; slk(m);
   std::cout &lt;&lt; &quot;read i as &quot; &lt;&lt; i &lt;&lt; &quot;...\n&quot;; // this is not synchronized
   std::this_thread::sleep_for(std::chrono::milliseconds(10));
   std::cout &lt;&lt; &quot;woke up...\n&quot;;
}

int main()
{
   std::thread r1(read);
   std::thread r2(read);

   r1.join();
   r2.join();
   return 0;
}
 | output=
}}

[[de:cpp/thread/shared lock/shared lock]]
[[es:cpp/thread/shared lock/shared lock]]
[[fr:cpp/thread/shared lock/shared lock]]
[[it:cpp/thread/shared lock/shared lock]]
[[ja:cpp/thread/shared lock/shared lock]]
[[pt:cpp/thread/shared lock/shared lock]]
[[ru:cpp/thread/shared lock/shared lock]]
[[zh:cpp/thread/shared lock/shared lock]]</text>
      <sha1>7mjmvjhat08zn2p5vyh0l89fh2gecag</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/swap</title>
    <ns>0</ns>
    <id>12985</id>
    <revision>
      <id>91851</id>
      <parentid>65454</parentid>
      <timestamp>2017-03-31T19:59:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="797">{{cpp/thread/shared_lock/title|swap}}
{{cpp/thread/shared_lock/navbar}}
{{ddcl | since=c++14 |
template&lt; class Mutex &gt;
void swap( shared_lock&lt;Mutex&gt;&amp; other );
}}

Exchanges the internal states of the lock objects.

===Parameters===
{{par begin}}
{{par | other | the lock to swap the state with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc swap2}}
{{dsc end}}

[[de:cpp/thread/shared lock/swap]]
[[es:cpp/thread/shared lock/swap]]
[[fr:cpp/thread/shared lock/swap]]
[[it:cpp/thread/shared lock/swap]]
[[ja:cpp/thread/shared lock/swap]]
[[pt:cpp/thread/shared lock/swap]]
[[ru:cpp/thread/shared lock/swap]]
[[zh:cpp/thread/shared lock/swap]]</text>
      <sha1>42wy20wfphg8vvefc6tx8nkk65ktab5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/swap2</title>
    <ns>0</ns>
    <id>12803</id>
    <revision>
      <id>91923</id>
      <parentid>64870</parentid>
      <timestamp>2017-03-31T20:01:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="713">{{cpp/title | swap&lt;small&gt;(std::shared_lock)&lt;/small&gt;}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 |
template&lt; class Mutex &gt;
void swap( shared_lock&lt;Mutex&gt;&amp; lhs, 
           shared_lock&lt;Mutex&gt;&amp; rhs );
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{lc|std::shared_lock}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | lock wrappers whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc swap}}
{{dsc end}}</text>
      <sha1>e53yfs0zda1q48k3ytzjm7qbbjge15q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/try lock</title>
    <ns>0</ns>
    <id>12981</id>
    <revision>
      <id>65453</id>
      <parentid>65443</parentid>
      <timestamp>2013-09-15T15:23:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1500">{{cpp/thread/shared_lock/title|try_lock}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
bool try_lock();
}}
{{dcl end}}

Tries to lock the associated mutex in shared mode without blocking. Effectively calls {{c|mutex()-&gt;try_lock_shared()}}.

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is already locked.

===Parameters===
(none)

===Return value===
{{c|true}} if the ownership of the mutex has been acquired successfully, {{c|false}} otherwise.

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;try_lock_shared()}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the mutex is already locked, {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock}}
{{dsc inc | cpp/thread/shared_lock/dsc lock}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock_for}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock_until}}
{{dsc inc | cpp/thread/shared_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/shared lock/try lock]]
[[es:cpp/thread/shared lock/try lock]]
[[fr:cpp/thread/shared lock/try lock]]
[[it:cpp/thread/shared lock/try lock]]
[[ja:cpp/thread/shared lock/try lock]]
[[pt:cpp/thread/shared lock/try lock]]
[[ru:cpp/thread/shared lock/try lock]]
[[zh:cpp/thread/shared lock/try lock]]</text>
      <sha1>1n3pjfizagj9vkqs1fhwlq8f54wk1y5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/try lock for</title>
    <ns>0</ns>
    <id>12982</id>
    <revision>
      <id>65452</id>
      <parentid>65447</parentid>
      <timestamp>2013-09-15T15:22:57Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2088">{{cpp/thread/shared_lock/title|try_lock_for}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class Rep, class Period &gt;
bool try_lock_for( const std::chrono::duration&lt;Rep,Period&gt;&amp; timeout_duration );
}}
{{dcl end}}

Tries to lock the associated mutex in shared mode. Blocks until specified {{tt|timeout_duration}} has elapsed or the lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}. Effectively calls {{c|mutex()-&gt;try_lock_shared_for(timeout_duration)}}.

A steady clock is used to measure the duration. This function may block for longer than {{tt|timeout_duration}} due to scheduling or resource contention delays. 

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is already locked.

===Parameters===
{{par begin}}
{{par | timeout_duration | maximum duration to block for}}
{{par end}}

===Return value===
{{c|true}} if the ownership of the mutex has been acquired successfully, {{c|false}} otherwise.

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;try_lock_shared_for(timeout_duration)}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the mutex is already locked, {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_for}}
{{dsc inc | cpp/thread/shared_lock/dsc lock}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock_until}}
{{dsc inc | cpp/thread/shared_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/shared lock/try lock for]]
[[es:cpp/thread/shared lock/try lock for]]
[[fr:cpp/thread/shared lock/try lock for]]
[[it:cpp/thread/shared lock/try lock for]]
[[ja:cpp/thread/shared lock/try lock for]]
[[pt:cpp/thread/shared lock/try lock for]]
[[ru:cpp/thread/shared lock/try lock for]]
[[zh:cpp/thread/shared lock/try lock for]]</text>
      <sha1>4i7b0o37p9g96xicge0n3oiomwav7ux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/try lock until</title>
    <ns>0</ns>
    <id>12983</id>
    <revision>
      <id>65451</id>
      <parentid>65446</parentid>
      <timestamp>2013-09-15T15:22:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>copypaste typo</comment>
      <text xml:space="preserve" bytes="2016">{{cpp/thread/shared_lock/title|try_lock_until}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class Clock, class Duration &gt;
bool try_lock_until( const std::chrono::time_point&lt;Clock,Duration&gt;&amp; timeout_time );
}}
{{dcl end}}

Tries to lock the associated mutex in shared mode. Blocks until specified {{tt|timeout_time}} has been reached or the lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}. May block for longer than until {{tt|timeout_time}} has been reached.

Effectively calls {{c|mutex()-&gt;try_lock_shared_until(timeout_time)}}

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is already locked.

===Parameters===
{{par begin}}
{{par | timeout_time | maximum time point to block until}}
{{par end}}

===Return value===
{{c|true}} if the ownership of the mutex has been acquired successfully, {{c|false}} otherwise.

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;try_lock_shared_for(timeout_time)}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the mutex is already locked, {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc lock}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock}}
{{dsc inc | cpp/thread/shared_lock/dsc try_lock_for}}
{{dsc inc | cpp/thread/shared_lock/dsc unlock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_until}}
{{dsc end}}

[[de:cpp/thread/shared lock/try lock until]]
[[es:cpp/thread/shared lock/try lock until]]
[[fr:cpp/thread/shared lock/try lock until]]
[[it:cpp/thread/shared lock/try lock until]]
[[ja:cpp/thread/shared lock/try lock until]]
[[pt:cpp/thread/shared lock/try lock until]]
[[ru:cpp/thread/shared lock/try lock until]]
[[zh:cpp/thread/shared lock/try lock until]]</text>
      <sha1>dc1f8guk1h9tduwv9dy2pemjqrtt10a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/unlock</title>
    <ns>0</ns>
    <id>12984</id>
    <revision>
      <id>65450</id>
      <parentid>65449</parentid>
      <timestamp>2013-09-15T15:22:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1072">{{cpp/thread/shared_lock/title|unlock}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
void unlock();
}}
{{dcl end}}

Unlocks the associated mutex from shared mode. Effectively calls {{c|mutex()-&gt;unlock_shared()}}

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is not locked.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;unlock_shared()}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/shared_lock/dsc lock}}
{{dsc inc | cpp/thread/shared_lock/dsc release}}
{{dsc end}}

[[de:cpp/thread/shared lock/unlock]]
[[es:cpp/thread/shared lock/unlock]]
[[fr:cpp/thread/shared lock/unlock]]
[[it:cpp/thread/shared lock/unlock]]
[[ja:cpp/thread/shared lock/unlock]]
[[pt:cpp/thread/shared lock/unlock]]
[[ru:cpp/thread/shared lock/unlock]]
[[zh:cpp/thread/shared lock/unlock]]</text>
      <sha1>3ajnkoywoxbp9x9d5qknei6lo6g13qo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared lock/~shared lock</title>
    <ns>0</ns>
    <id>12977</id>
    <revision>
      <id>65373</id>
      <timestamp>2013-09-10T19:04:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="758">{{cpp/thread/shared_lock/title|~shared_lock}}
{{cpp/thread/shared_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++14 | 1=
~shared_lock();
}}
{{dcl end}}

Destroys the lock.

If {{c|*this}} has an associated mutex (({{lc|mutex()}} returns a non-null pointer) and has acquired ownership of it ({{lc|owns()}} returns {{c|true}}), the mutex is unlocked by calling {{lc|std::shared_mutex::unlock_shared|unlock_shared()}}.

[[de:cpp/thread/shared lock/~shared lock]]
[[es:cpp/thread/shared lock/~shared lock]]
[[fr:cpp/thread/shared lock/~shared lock]]
[[it:cpp/thread/shared lock/~shared lock]]
[[ja:cpp/thread/shared lock/~shared lock]]
[[pt:cpp/thread/shared lock/~shared lock]]
[[ru:cpp/thread/shared lock/~shared lock]]
[[zh:cpp/thread/shared lock/~shared lock]]</text>
      <sha1>siot8ytmppg69ttpy1s3dxho4p4dlfg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex</title>
    <ns>0</ns>
    <id>13468</id>
    <revision>
      <id>85033</id>
      <parentid>84796</parentid>
      <timestamp>2016-03-23T19:17:54Z</timestamp>
      <contributor>
        <username>I7achi</username>
        <id>4591</id>
      </contributor>
      <minor/>
      <comment>Typo</comment>
      <text xml:space="preserve" bytes="3957">{{cpp/title|shared_mutex}}
{{cpp/thread/shared_mutex/navbar}}
{{ddcl | header=shared_mutex | since=c++17 | 1=
class shared_mutex;
}}

The {{tt|shared_mutex}} class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads. In contrast to other mutex types which facilitate exclusive access, a shared_mutex has two levels of access:

* ''shared'' - several threads can share ownership of the same mutex.

* ''exclusive'' - only one thread can own the mutex.

Shared mutexes are usually used in situations when multiple readers can access the same resource at the same time without causing data races, but only one writer can do so.

The {{tt|shared_mutex}} class satisfies all requirements of {{concept|SharedMutex}} and {{concept|StandardLayoutType}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|native_handle_type}}{{mark optional}} | ''implementation-defined''}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc constructor | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc destructor | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc operator{{=}}}}

{{dsc h2 | Exclusive locking}}
{{dsc inc | cpp/thread/mutex/dsc lock | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | shared_mutex}}

{{dsc h2 | Shared locking}}
{{dsc inc | cpp/thread/mutex/dsc lock_shared | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock_shared | shared_mutex}}

{{dsc h2 | Native handle}}
{{dsc inc | cpp/thread/mutex/dsc native_handle | shared_mutex}}
{{dsc end}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;mutex&gt;  // For std::unique_lock
#include &lt;shared_mutex&gt;
#include &lt;thread&gt;

class ThreadSafeCounter {
 public:
  ThreadSafeCounter() = default;

  // Multiple threads/readers can read the counter's value at the same time.
  unsigned int get() const {
    std::shared_lock&lt;std::shared_mutex&gt; lock(mutex_);
    return value_;
  }

  // Only one thread/writer can increment/write the counter's value.
  void increment() {
    std::unique_lock&lt;std::shared_mutex&gt; lock(mutex_);
    value_++;
  }

  // Only one thread/writer can reset/write the counter's value.
  void reset() {
    std::unique_lock&lt;std::shared_mutex&gt; lock(mutex_);
    value_ = 0;
  }

 private:
  mutable std::shared_mutex mutex_;
  unsigned int value_ = 0;
};

int main() {
  ThreadSafeCounter counter;

  auto increment_and_print = [&amp;counter]() {
    for (int i = 0; i &lt; 3; i++) {
      counter.increment();
      std::cout &lt;&lt; std::this_thread::get_id() &lt;&lt; ' ' &lt;&lt; counter.get() &lt;&lt; '\n';

      // Note: Writing to std::cout actually needs to be synchronized as well
      // by another std::mutex. This has been omitted to keep the example small.
    }
  };

  std::thread thread1(increment_and_print);
  std::thread thread2(increment_and_print);

  thread1.join();
  thread2.join();
}

// Explanation: The output below was generated on a single-core machine. When
// thread1 starts, it enters the loop for the first time and calls increment()
// followed by get(). However, before it can print the returned value to
// std::cout, the scheduler puts thread1 to sleep and wakes up thread2, which
// obviously has time enough to run all three loop iterations at once. Back to
// thread1, still in the first loop iteration, it finally prints its local copy
// of the counter's value, which is 1, to std::cout and then runs the remaining
// two loop iterations. On a multi-core maschine, none of the threads is put to
// sleep and the output is more likely to be in ascending order.

 | output=
123084176803584 2
123084176803584 3
123084176803584 4
123084185655040 1
123084185655040 5
123084185655040 6
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc shared_timed_mutex}}
{{dsc end}}</text>
      <sha1>j5fxw8r8i3klmiw1quh3z6ervprun8d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/lock</title>
    <ns>0</ns>
    <id>13478</id>
    <revision>
      <id>78652</id>
      <parentid>68933</parentid>
      <timestamp>2015-06-02T20:36:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="51">{{include page|cpp/thread/mutex/lock|shared_mutex}}</text>
      <sha1>edoi3mdra9xowr71y4sb3wy7xdj40kr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/lock shared</title>
    <ns>0</ns>
    <id>13482</id>
    <revision>
      <id>78665</id>
      <parentid>78663</parentid>
      <timestamp>2015-06-02T20:53:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-timed</comment>
      <text xml:space="preserve" bytes="1926">{{cpp/thread/shared_mutex/title|lock_shared}}
{{cpp/thread/shared_mutex/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|shared_mutex}} |
void lock_shared();
}}
{{dcl end}}

Acquires shared ownership of the mutex. If another thread is holding the mutex in exclusive ownership, a call to {{tt|lock_shared}} will block execution until shared ownership can be acquired.

If {{tt|lock_shared}} is called by a thread that already owns the {{tt|mutex}} in any mode (exclusive or shared), the behavior is undefined.

If more than the implementation-defined maximum number of shared owners already locked the mutex in shared mode, {{tt|lock_shared}} blocks execution until the number of shared owners is reduced. The maximum number of owners is guaranteed to be at least 10000.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
Throws {{lc|std::system_error}} when errors occur, including errors from the underlying operating system that would prevent {{tt|lock}} from meeting its specifications. The mutex is not locked in the case of any exception being thrown.

===Notes===
{{tt|lock_shared()}} is usually not called directly: {{lc|std::shared_lock}} is used to manage shared locking.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock_shared | shared_mutex}}
{{dsc end}}

[[de:cpp/thread/shared mutex/lock_shared]]
[[es:cpp/thread/shared mutex/lock_shared]]
[[fr:cpp/thread/shared mutex/lock_shared]]
[[it:cpp/thread/shared mutex/lock_shared]]
[[ja:cpp/thread/shared mutex/lock_shared]]
[[pt:cpp/thread/shared mutex/lock_shared]]
[[ru:cpp/thread/shared mutex/lock_shared]]
[[zh:cpp/thread/shared mutex/lock_shared]]</text>
      <sha1>3bzibzp1jqb11dlukav2doa7quk9h9s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/native handle</title>
    <ns>0</ns>
    <id>14118</id>
    <revision>
      <id>78651</id>
      <timestamp>2015-06-02T20:34:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="60">{{include page|cpp/thread/mutex/native_handle|shared_mutex}}</text>
      <sha1>nis5quh3cene3vxyc2932o3jc7t9uq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/shared mutex</title>
    <ns>0</ns>
    <id>13473</id>
    <revision>
      <id>78655</id>
      <parentid>68911</parentid>
      <timestamp>2015-06-02T20:40:48Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="58">{{include page|cpp/thread/mutex/constructor|shared_mutex}}</text>
      <sha1>r0epuyxcpofva1kvnx7bs2zvv0v7i75</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/try lock</title>
    <ns>0</ns>
    <id>13479</id>
    <revision>
      <id>78658</id>
      <parentid>68937</parentid>
      <timestamp>2015-06-02T20:47:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="55">{{include page|cpp/thread/mutex/try_lock|shared_mutex}}</text>
      <sha1>hhf4iuagw9ishoxpr2cdw3ayhvw55st</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/try lock for</title>
    <ns>0</ns>
    <id>13470</id>
    <redirect title="cpp/thread/shared timed mutex/try lock for" />
    <revision>
      <id>68902</id>
      <timestamp>2014-03-22T22:30:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/thread/shared mutex/try lock for]] to [[cpp/thread/shared timed mutex/try lock for]]</comment>
      <text xml:space="preserve" bytes="56">#REDIRECT [[cpp/thread/shared timed mutex/try lock for]]</text>
      <sha1>0iyg5u1bf67qxsmupjxzgy9xf61fq67</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/try lock shared</title>
    <ns>0</ns>
    <id>13483</id>
    <revision>
      <id>79108</id>
      <parentid>78667</parentid>
      <timestamp>2015-06-23T23:50:17Z</timestamp>
      <contributor>
        <username>Coasterfan</username>
        <id>4215</id>
      </contributor>
      <comment>try_lock_shared returns bool, not void</comment>
      <text xml:space="preserve" bytes="1459">{{cpp/thread/shared_mutex/title|try_lock_shared}}
{{cpp/thread/shared_mutex/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
bool try_lock_shared();
}}
{{dcl end}}

Tries to lock the mutex in shared mode. Returns immediately. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}.

This function is allowed to fail spuriously and return {{c|false}} even if the mutex is not currenly exclusively locked by any other thread.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation if it returns {{c|true}}.

The behavior is undefined if the calling thread already owns the mutex in any mode.

===Parameters===
(none)

===Return value===
{{c|true}} if the lock was acquired successfully, otherwise {{c|false}}.

===Exceptions===
(none)

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock_shared | shared_mutex}}
{{dsc end}}

[[de:cpp/thread/shared mutex/try_lock_shared]]
[[es:cpp/thread/shared mutex/try_lock_shared]]
[[fr:cpp/thread/shared mutex/try_lock_shared]]
[[it:cpp/thread/shared mutex/try_lock_shared]]
[[ja:cpp/thread/shared mutex/try_lock_shared]]
[[pt:cpp/thread/shared mutex/try_lock_shared]]
[[ru:cpp/thread/shared mutex/try_lock_shared]]
[[zh:cpp/thread/shared mutex/try_lock_shared]]</text>
      <sha1>p8milv86rcva03jkpnum2sgj54zhgbi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/try lock shared for</title>
    <ns>0</ns>
    <id>13484</id>
    <redirect title="cpp/thread/shared timed mutex/try lock shared for" />
    <revision>
      <id>68954</id>
      <timestamp>2014-03-22T22:51:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/thread/shared mutex/try lock shared for]] to [[cpp/thread/shared timed mutex/try lock shared for]]</comment>
      <text xml:space="preserve" bytes="63">#REDIRECT [[cpp/thread/shared timed mutex/try lock shared for]]</text>
      <sha1>tbaspfignk2os46ea59rekpncxlohwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/try lock shared until</title>
    <ns>0</ns>
    <id>13485</id>
    <redirect title="cpp/thread/shared timed mutex/try lock shared until" />
    <revision>
      <id>68957</id>
      <timestamp>2014-03-22T22:52:43Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/thread/shared mutex/try lock shared until]] to [[cpp/thread/shared timed mutex/try lock shared until]]</comment>
      <text xml:space="preserve" bytes="65">#REDIRECT [[cpp/thread/shared timed mutex/try lock shared until]]</text>
      <sha1>bguqkcdvn6m7253unua2p7uv62duirv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/try lock until</title>
    <ns>0</ns>
    <id>13477</id>
    <redirect title="cpp/thread/shared timed mutex/try lock until" />
    <revision>
      <id>68925</id>
      <timestamp>2014-03-22T22:39:52Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/thread/shared mutex/try lock until]] to [[cpp/thread/shared timed mutex/try lock until]]</comment>
      <text xml:space="preserve" bytes="58">#REDIRECT [[cpp/thread/shared timed mutex/try lock until]]</text>
      <sha1>h0nhp67d2lfygz8aachixyiqp8kho7r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/unlock</title>
    <ns>0</ns>
    <id>13481</id>
    <revision>
      <id>78661</id>
      <parentid>68944</parentid>
      <timestamp>2015-06-02T20:49:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="53">{{include page|cpp/thread/mutex/unlock|shared_mutex}}</text>
      <sha1>8583db8teis1xzpuyqf1so4ij5igmtb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/unlock shared</title>
    <ns>0</ns>
    <id>13486</id>
    <revision>
      <id>78666</id>
      <parentid>68960</parentid>
      <timestamp>2015-06-02T20:54:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+(copy and edit from timed)</comment>
      <text xml:space="preserve" bytes="1251">{{cpp/thread/shared_mutex/title|unlock_shared}}
{{cpp/thread/shared_mutex/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
void unlock_shared();
}}
{{dcl end}}

Releases the mutex from shared ownership by the calling thread.
.
The mutex must be locked by the current thread of execution in shared mode, otherwise, the behavior is undefined.

This operation ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) any subsequent {{lc|lock()}} operation that obtains ownership of the same mutex.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
(none)

===Notes===
{{tt|unlock_shared()}} is usually not called directly: {{lc|std::shared_lock}} is used to manage exclusive locking.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock_shared | shared_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | shared_mutex}}
{{dsc end}}

[[de:cpp/thread/shared mutex/unlock_shared]]
[[es:cpp/thread/shared mutex/unlock_shared]]
[[fr:cpp/thread/shared mutex/unlock_shared]]
[[it:cpp/thread/shared mutex/unlock_shared]]
[[ja:cpp/thread/shared mutex/unlock_shared]]
[[pt:cpp/thread/shared mutex/unlock_shared]]
[[ru:cpp/thread/shared mutex/unlock_shared]]
[[zh:cpp/thread/shared mutex/unlock_shared]]</text>
      <sha1>hru6t7z1ihk31wr5xqwbp2zmow7nn2m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared mutex/~shared mutex</title>
    <ns>0</ns>
    <id>13480</id>
    <revision>
      <id>90428</id>
      <parentid>68941</parentid>
      <timestamp>2017-02-23T01:51:08Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="57">{{include page|cpp/thread/mutex/destructor|shared_mutex}}</text>
      <sha1>ha95i290s52hocb7hrce1azh3fthvfn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex</title>
    <ns>0</ns>
    <id>10109</id>
    <revision>
      <id>87415</id>
      <parentid>80424</parentid>
      <timestamp>2016-08-23T15:18:52Z</timestamp>
      <contributor>
        <ip>64.187.189.226</ip>
      </contributor>
      <text xml:space="preserve" bytes="2981">{{cpp/title|shared_timed_mutex}}
{{cpp/thread/shared_timed_mutex/navbar}}
{{ddcl | header=shared_mutex | since=c++14 | 1=
class shared_timed_mutex;
}}

The {{tt|shared_timed_mutex}} class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads. In contrast to other mutex types which facilitate exclusive access, a shared_timed_mutex has two levels of access:

* ''shared'' - several threads can share ownership of the same mutex.

* ''exclusive'' - only one thread can own the mutex.

Shared mutexes are usually used in situations when multiple readers can access the same resource at the same time without causing data races, but only one writer can do so.

In a manner similar to {{ltt|cpp/thread/timed_mutex}}, {{tt|shared_timed_mutex}} provides the ability to attempt to claim ownership of a {{tt|shared_timed_mutex}} with a timeout via the {{ltf|cpp/thread/shared_timed_mutex/try_lock_for}}, {{ltf|cpp/thread/shared_timed_mutex/try_lock_until}}, {{ltf|cpp/thread/shared_timed_mutex/try_lock_shared_for}}, {{ltf|cpp/thread/shared_timed_mutex/try_lock_shared_until}} methods.

The {{tt|shared_timed_mutex}} class satisfies all requirements of {{concept|SharedTimedMutex}} and {{concept|StandardLayoutType}}.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc constructor | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc destructor | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc operator{{=}}}}

{{dsc h2 | Exclusive locking}}
{{dsc inc | cpp/thread/mutex/dsc lock | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | shared_timed_mutex}}

{{dsc h2 | Shared locking}}
{{dsc inc | cpp/thread/mutex/dsc lock_shared | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared_for | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared_until | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock_shared | shared_timed_mutex}}
{{dsc end}}


{{todo|build a motivating example}}
{{example|A copy assignment operator for a class that holds resources that can handle multiple readers, but only one writer
|code= #include &lt;mutex&gt;
#include &lt;shared_mutex&gt;

class R
{
    mutable std::shared_timed_mutex mut;
    /* data */
public:
    R&amp; operator=(const R&amp; other)
    {
        // requires exclusive ownership to write to *this
        std::unique_lock&lt;std::shared_timed_mutex&gt; lhs(mut, std::defer_lock);
        // requires shared ownership to read from other
        std::shared_lock&lt;std::shared_timed_mutex&gt; rhs(other.mut, std::defer_lock);
        std::lock(lhs, rhs);
        /* assign data */
        return *this;
    }
};

int main() {
    R r;
}
}}</text>
      <sha1>e2b7ma0dpblszng843wjvod8zk7pf4l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/lock</title>
    <ns>0</ns>
    <id>12993</id>
    <revision>
      <id>68934</id>
      <parentid>68932</parentid>
      <timestamp>2014-03-22T22:43:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="394">{{include page|cpp/thread/mutex/lock|shared_timed_mutex}}

[[de:cpp/thread/shared timed mutex/lock]]
[[es:cpp/thread/shared timed mutex/lock]]
[[fr:cpp/thread/shared timed mutex/lock]]
[[it:cpp/thread/shared timed mutex/lock]]
[[ja:cpp/thread/shared timed mutex/lock]]
[[pt:cpp/thread/shared timed mutex/lock]]
[[ru:cpp/thread/shared timed mutex/lock]]
[[zh:cpp/thread/shared timed mutex/lock]]</text>
      <sha1>aez9wwiww88nzugtooqopl0gpvwi729</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/lock shared</title>
    <ns>0</ns>
    <id>12998</id>
    <revision>
      <id>68949</id>
      <parentid>68947</parentid>
      <timestamp>2014-03-22T22:50:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="2010">{{cpp/thread/shared_timed_mutex/title|lock_shared}}
{{cpp/thread/shared_timed_mutex/navbar}}
{{dcl begin}}
{{dcl | since={{cpp/std|shared_timed_mutex}} |
void lock_shared();
}}
{{dcl end}}

Acquires shared ownership of the mutex. If another thread is holding the mutex in exclusive ownership, a call to {{tt|lock_shared}} will block execution until shared ownership can be acquired.

If {{tt|lock_shared}} is called by a thread that already owns the {{tt|mutex}} in any mode (exclusive or shared), the behavior is undefined.

If more than the implementation-defined maximum number of shared owners already locked the mutex in shared mode, {{tt|lock_shared}} blocks execution until the number of shared owners is reduced. The maximum number of owners is guaranteed to be at least 10000.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
Throws {{lc|std::system_error}} when errors occur, including errors from the underlying operating system that would prevent {{tt|lock}} from meeting its specifications. The mutex is not locked in the case of any exception being thrown.

===Notes===
{{tt|lock_shared()}} is usually not called directly: {{lc|std::shared_lock}} is used to manage shared locking.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock_shared | shared_timed_mutex}}
{{dsc end}}

[[de:cpp/thread/shared timed mutex/lock_shared]]
[[es:cpp/thread/shared timed mutex/lock_shared]]
[[fr:cpp/thread/shared timed mutex/lock_shared]]
[[it:cpp/thread/shared timed mutex/lock_shared]]
[[ja:cpp/thread/shared timed mutex/lock_shared]]
[[pt:cpp/thread/shared timed mutex/lock_shared]]
[[ru:cpp/thread/shared timed mutex/lock_shared]]
[[zh:cpp/thread/shared timed mutex/lock_shared]]</text>
      <sha1>p6dfxbo50onwqjs70s05fcq5x58olje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/shared mutex</title>
    <ns>0</ns>
    <id>13475</id>
    <redirect title="cpp/thread/shared timed mutex/shared timed mutex" />
    <revision>
      <id>68917</id>
      <timestamp>2014-03-22T22:35:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/thread/shared timed mutex/shared mutex]] to [[cpp/thread/shared timed mutex/shared timed mutex]]</comment>
      <text xml:space="preserve" bytes="62">#REDIRECT [[cpp/thread/shared timed mutex/shared timed mutex]]</text>
      <sha1>mld8a7atehrfya4d0a5xr0627pihwdi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/shared timed mutex</title>
    <ns>0</ns>
    <id>12990</id>
    <revision>
      <id>68916</id>
      <parentid>68912</parentid>
      <timestamp>2014-03-22T22:35:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Cubbi moved page [[cpp/thread/shared timed mutex/shared mutex]] to [[cpp/thread/shared timed mutex/shared timed mutex]]</comment>
      <text xml:space="preserve" bytes="457">{{include page|cpp/thread/mutex/constructor|shared_timed_mutex}}

[[de:cpp/thread/timed mutex/shared timed mutex]]
[[es:cpp/thread/timed mutex/shared timed mutex]]
[[fr:cpp/thread/timed mutex/shared timed mutex]]
[[it:cpp/thread/timed mutex/shared timed mutex]]
[[ja:cpp/thread/timed mutex/shared timed mutex]]
[[pt:cpp/thread/timed mutex/shared timed mutex]]
[[ru:cpp/thread/timed mutex/shared timed mutex]]
[[zh:cpp/thread/timed mutex/shared timed mutex]]</text>
      <sha1>namoapv1pv7znnttp7f32zkwdde0wpq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/try lock</title>
    <ns>0</ns>
    <id>12994</id>
    <revision>
      <id>68938</id>
      <parentid>68936</parentid>
      <timestamp>2014-03-22T22:45:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="430">{{include page|cpp/thread/mutex/try_lock|shared_timed_mutex}}

[[de:cpp/thread/shared timed mutex/try lock]]
[[es:cpp/thread/shared timed mutex/try lock]]
[[fr:cpp/thread/shared timed mutex/try lock]]
[[it:cpp/thread/shared timed mutex/try lock]]
[[ja:cpp/thread/shared timed mutex/try lock]]
[[pt:cpp/thread/shared timed mutex/try lock]]
[[ru:cpp/thread/shared timed mutex/try lock]]
[[zh:cpp/thread/shared timed mutex/try lock]]</text>
      <sha1>rw4mjl4jmyovlri7agqr0jlrddjr9h8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/try lock for</title>
    <ns>0</ns>
    <id>12995</id>
    <revision>
      <id>68927</id>
      <parentid>68901</parentid>
      <timestamp>2014-03-22T22:40:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="418">{{include page|cpp/thread/mutex/try_lock_for|shared_timed_mutex}}

[[de:cpp/thread/shared mutex/try lock for]]
[[es:cpp/thread/shared mutex/try lock for]]
[[fr:cpp/thread/shared mutex/try lock for]]
[[it:cpp/thread/shared mutex/try lock for]]
[[ja:cpp/thread/shared mutex/try lock for]]
[[pt:cpp/thread/shared mutex/try lock for]]
[[ru:cpp/thread/shared mutex/try lock for]]
[[zh:cpp/thread/shared mutex/try lock for]]</text>
      <sha1>77uvxhgg1ae93djceswnjvzj24q6fwy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/try lock shared</title>
    <ns>0</ns>
    <id>13000</id>
    <revision>
      <id>79109</id>
      <parentid>68952</parentid>
      <timestamp>2015-06-23T23:51:15Z</timestamp>
      <contributor>
        <username>Coasterfan</username>
        <id>4215</id>
      </contributor>
      <comment>try_lock_shared returns bool, not void</comment>
      <text xml:space="preserve" bytes="1537">{{cpp/thread/shared_timed_mutex/title|try_lock_shared}}
{{cpp/thread/shared_timed_mutex/navbar}}
{{dcl begin}}
{{dcl | since=c++14 |
bool try_lock_shared();
}}
{{dcl end}}

Tries to lock the mutex in shared mode. Returns immediately. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}.

This function is allowed to fail spuriously and return {{c|false}} even if the mutex is not currenly exclusively locked by any other thread.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation if it returns {{c|true}}.

The behavior is undefined if the calling thread already owns the mutex in any mode.

===Parameters===
(none)

===Return value===
{{c|true}} if the lock was acquired successfully, otherwise {{c|false}}.

===Exceptions===
(none)

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock_shared | shared_timed_mutex}}
{{dsc end}}

[[de:cpp/thread/shared timed mutex/try_lock_shared]]
[[es:cpp/thread/shared timed mutex/try_lock_shared]]
[[fr:cpp/thread/shared timed mutex/try_lock_shared]]
[[it:cpp/thread/shared timed mutex/try_lock_shared]]
[[ja:cpp/thread/shared timed mutex/try_lock_shared]]
[[pt:cpp/thread/shared timed mutex/try_lock_shared]]
[[ru:cpp/thread/shared timed mutex/try_lock_shared]]
[[zh:cpp/thread/shared timed mutex/try_lock_shared]]</text>
      <sha1>rrgy0hp6gx8tvaibpo8gryb5pwobhtl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/try lock shared for</title>
    <ns>0</ns>
    <id>13001</id>
    <revision>
      <id>68955</id>
      <parentid>68953</parentid>
      <timestamp>2014-03-22T22:52:21Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="2422">{{cpp/thread/shared_timed_mutex/title|try_lock_shared_for}}
{{cpp/thread/shared_timed_mutex/navbar}}
{{dcl begin}}
{{dcl | since=c++14 |
template&lt; class Rep, class Period &gt;
bool try_lock_shared_for( const std::chrono::duration&lt;Rep,Period&gt;&amp; timeout_duration );
}}
{{dcl end}}

Tries to lock the mutex in shared mode. Blocks until specified {{tt|timeout_duration}} has elapsed or the shared lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}. 

If {{tt|timeout_duration}} is less or equal {{tt|timeout_duration.zero()}}, the function behaves like {{lc|try_lock_shared()}}.

A steady clock is used to measure the duration. This function may block for longer than {{tt|timeout_duration}} due to scheduling or resource contention delays. 

As with {{lc|try_lock_shared()}}, this function is allowed to fail spuriously and return {{c|false}} even if the mutex was not locked by any other thread at some point during {{tt|timeout_duration}}.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation if it returns {{c|true}}.

If {{tt|try_lock_shared_for}} is called by a thread that already owns the {{tt|mutex}} in any mode (shared or exclusive), the behavior is undefined.

===Parameters===
{{par begin}}
{{par | timeout_duration | maximum duration to block for}}
{{par end}}

===Return value===
{{c|true}} if the lock was acquired successfully, otherwise {{c|false}}.

===Exceptions===
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared_until | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | shared_timed_mutex}}
{{dsc end}}


[[de:cpp/thread/shared timed mutex/try_lock_shared_for]]
[[es:cpp/thread/shared timed mutex/try_lock_shared_for]]
[[fr:cpp/thread/shared timed mutex/try_lock_shared_for]]
[[it:cpp/thread/shared timed mutex/try_lock_shared_for]]
[[ja:cpp/thread/shared timed mutex/try_lock_shared_for]]
[[pt:cpp/thread/shared timed mutex/try_lock_shared_for]]
[[ru:cpp/thread/shared timed mutex/try_lock_shared_for]]
[[zh:cpp/thread/shared mutex/try_lock_shared_for]]</text>
      <sha1>n6ic9w3hv3infzy2epqs60ncvof7exv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/try lock shared until</title>
    <ns>0</ns>
    <id>13002</id>
    <revision>
      <id>68958</id>
      <parentid>68956</parentid>
      <timestamp>2014-03-22T22:53:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="2238">{{cpp/thread/shared_timed_mutex/title|try_lock_shared_until}}
{{cpp/thread/shared_timed_mutex/navbar}}
{{dcl begin}}
{{dcl | since=c++14 |
template&lt; class Clock, class Duration &gt;
bool try_lock_shared_until( const std::chrono::time_point&lt;Clock,Duration&gt;&amp; timeout_time );
}}
{{dcl end}}

Tries to lock the mutex in shared mode. Blocks until specified {{tt|timeout_time}} has been reached or the lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}.

If {{tt|timeout_time}} has already passed, this function behaves like {{lc|try_lock_shared()}}.

The clock tied to {{tt|timeout_time}} is used, which means that adjustments of the clock are taken into account. Thus, the maximum duration of the block might, but might not, be less or more than  {{c|timeout_time - Clock::now()}} at the time of the call, depending on the direction of the adjustment. The function also may block for longer than until after {{tt|timeout_time}} has been reached due to scheduling or resource contention delays.

As with {{lc|try_lock_shared()}}, this function is allowed to fail spuriously and return {{c|false}} even if the mutex was not locked by any other thread at some point before {{tt|timeout_time}}.

Prior {{lc|unlock()}} operation on the same mutex ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) this operation if it returns {{c|true}}.

If {{tt|try_lock_shared_until}} is called by a thread that already owns the {{tt|mutex}} in any mode (shared or exclusive), the behavior is undefined.

===Parameters===
{{par begin}}
{{par | timeout_time | maximum time point to block until}}
{{par end}}

===Return value===
{{c|true}} if the shared lock ownership was acquired successfully, otherwise {{c|false}}.

===Exceptions===
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_shared_for | shared_timed_mutex}}
{{dsc end}}</text>
      <sha1>h5vms00t3vwznzirq9py05yxoqm9osu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/try lock until</title>
    <ns>0</ns>
    <id>12996</id>
    <revision>
      <id>68926</id>
      <parentid>68924</parentid>
      <timestamp>2014-03-22T22:40:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="436">{{include page|cpp/thread/mutex/try_lock_until|shared_timed_mutex}}

[[de:cpp/thread/shared mutex/try lock until]]
[[es:cpp/thread/shared mutex/try lock until]]
[[fr:cpp/thread/shared mutex/try lock until]]
[[it:cpp/thread/shared mutex/try lock until]]
[[ja:cpp/thread/shared mutex/try lock until]]
[[pt:cpp/thread/shared mutex/try lock until]]
[[ru:cpp/thread/shared mutex/try lock until]]
[[zh:cpp/thread/shared mutex/try lock until]]</text>
      <sha1>lx7fowbqy87p29aiztctfhxrwohf5ld</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/unlock</title>
    <ns>0</ns>
    <id>12997</id>
    <revision>
      <id>68945</id>
      <parentid>68943</parentid>
      <timestamp>2014-03-22T22:48:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="412">{{include page|cpp/thread/mutex/unlock|shared_timed_mutex}}

[[de:cpp/thread/shared timed mutex/unlock]]
[[es:cpp/thread/shared timed mutex/unlock]]
[[fr:cpp/thread/shared timed mutex/unlock]]
[[it:cpp/thread/shared timed mutex/unlock]]
[[ja:cpp/thread/shared timed mutex/unlock]]
[[pt:cpp/thread/shared timed mutex/unlock]]
[[ru:cpp/thread/shared timed mutex/unlock]]
[[zh:cpp/thread/shared timed mutex/unlock]]</text>
      <sha1>7yhtyer5izgy0d1oy5bn21d4qdyiuo0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/unlock shared</title>
    <ns>0</ns>
    <id>12999</id>
    <revision>
      <id>68961</id>
      <parentid>68959</parentid>
      <timestamp>2014-03-22T22:53:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="1323">{{cpp/thread/shared_timed_mutex/title|unlock_shared}}
{{cpp/thread/shared_timed_mutex/navbar}}
{{dcl begin}}
{{dcl | since=c++14 |
void unlock_shared();
}}
{{dcl end}}

Releases the mutex from shared ownership by the calling thread.
.
The mutex must be locked by the current thread of execution in shared mode, otherwise, the behavior is undefined.

This operation ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) any subsequent {{lc|lock()}} operation that obtains ownership of the same mutex.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
(none)

===Notes===
{{tt|unlock_shared()}} is usually not called directly: {{lc|std::shared_lock}} is used to manage exclusive locking.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc lock_shared | shared_timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | shared_timed_mutex}}
{{dsc end}}

[[de:cpp/thread/shared timed mutex/unlock_shared]]
[[es:cpp/thread/shared timed mutex/unlock_shared]]
[[fr:cpp/thread/shared timed mutex/unlock_shared]]
[[it:cpp/thread/shared timed mutex/unlock_shared]]
[[ja:cpp/thread/shared timed mutex/unlock_shared]]
[[pt:cpp/thread/shared timed mutex/unlock_shared]]
[[ru:cpp/thread/shared timed mutex/unlock_shared]]
[[zh:cpp/thread/shared timed mutex/unlock_shared]]</text>
      <sha1>j3sjjhxq5pdzz2j7536ggwx3dc8b6t2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/shared timed mutex/~shared timed mutex</title>
    <ns>0</ns>
    <id>13128</id>
    <revision>
      <id>68942</id>
      <parentid>68940</parentid>
      <timestamp>2014-03-22T22:47:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move</comment>
      <text xml:space="preserve" bytes="63">{{include page|cpp/thread/mutex/destructor|shared_timed_mutex}}</text>
      <sha1>sxjcdjuei4ff2kppgul1l1sc7kccjhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/sleep for</title>
    <ns>0</ns>
    <id>2299</id>
    <revision>
      <id>86045</id>
      <parentid>86044</parentid>
      <timestamp>2016-06-14T14:36:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 86044 by [[Special:Contributions/80.15.46.74|80.15.46.74]] ([[User talk:80.15.46.74|talk]]) unnecessary revert to C++1. Target revision has been C++14 for a while.</comment>
      <text xml:space="preserve" bytes="1613">{{cpp/title|n=this_thread::|sleep_for}}
{{cpp/thread/navbar}}
{{ddcl | header=thread | since=c++11 | 1=
template&lt; class Rep, class Period &gt;
void sleep_for( const std::chrono::duration&lt;Rep, Period&gt;&amp; sleep_duration );
}}

Blocks the execution of the current thread for ''at least'' the specified {{tt|sleep_duration}}. 

A steady clock is used to measure the duration. This function may block for longer than {{tt|sleep_duration}} due to scheduling or resource contention delays. 

===Parameters===
{{par begin}}
{{par | sleep_duration | time duration to sleep}}
{{par end}}

===Return value===
(none)

===Exceptions===
Any exception thrown by clock, time_point, or duration during the execution (clocks, time points, and durations provided by the standard library never throw)

===Example===
{{example|
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;
 
int main()
{
    using namespace std::chrono_literals;
    std::cout &lt;&lt; &quot;Hello waiter&quot; &lt;&lt; std::endl;
    auto start = std::chrono::high_resolution_clock::now();
    std::this_thread::sleep_for(2s);
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration&lt;double, std::milli&gt; elapsed = end-start;
    std::cout &lt;&lt; &quot;Waited &quot; &lt;&lt; elapsed.count() &lt;&lt; &quot; ms\n&quot;;
}
 |p=true
 | output=
Hello waiter
Waited 2000.12 ms
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc sleep_until}}
{{dsc end}}

[[de:cpp/thread/sleep for]]
[[es:cpp/thread/sleep for]]
[[fr:cpp/thread/sleep for]]
[[it:cpp/thread/sleep for]]
[[ja:cpp/thread/sleep for]]
[[pt:cpp/thread/sleep for]]
[[ru:cpp/thread/sleep for]]
[[zh:cpp/thread/sleep for]]</text>
      <sha1>66cdv4392d5gb1j0l0z4zbyn7auy0qh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/sleep until</title>
    <ns>0</ns>
    <id>2300</id>
    <revision>
      <id>90293</id>
      <parentid>64405</parentid>
      <timestamp>2017-02-19T21:53:25Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="1369">{{cpp/title|n=this_thread::|sleep_until}}
{{cpp/thread/navbar}}
{{ddcl | header=thread | since=c++11 | 1=
template&lt; class Clock, class Duration &gt;
void sleep_until( const std::chrono::time_point&lt;Clock,Duration&gt;&amp; sleep_time );
}}

Blocks the execution of the current thread until specified {{tt|sleep_time}} has been reached. 

The clock tied to {{tt|sleep_time}} is used, which means that adjustments of the clock are taken into account. Thus, the duration of the block might, but might not, be less or more than  {{c|sleep_time - Clock::now()}} at the time of the call, depending on the direction of the adjustment. The function also may block for longer than until after {{tt|sleep_time}} has been reached due to scheduling or resource contention delays.

===Parameters===
{{par begin}}
{{par | sleep_time | time to block until}}
{{par end}}

===Return value===
(none)

===Exceptions===
Any exception thrown by {{tt|Clock}} or {{tt|Duration}} (clocks and durations provided by the standard library never throw)

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc sleep_for}}
{{dsc see c | c/thread/thrd_sleep}}
{{dsc end}}

[[de:cpp/thread/sleep until]]
[[es:cpp/thread/sleep until]]
[[fr:cpp/thread/sleep until]]
[[it:cpp/thread/sleep until]]
[[ja:cpp/thread/sleep until]]
[[pt:cpp/thread/sleep until]]
[[ru:cpp/thread/sleep until]]
[[zh:cpp/thread/sleep until]]</text>
      <sha1>69joebxvma9afm0147lsaqqmkgbhhfi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread</title>
    <ns>0</ns>
    <id>2253</id>
    <revision>
      <id>85331</id>
      <parentid>83066</parentid>
      <timestamp>2016-04-18T05:51:48Z</timestamp>
      <contributor>
        <ip>109.43.0.136</ip>
      </contributor>
      <text xml:space="preserve" bytes="2447">{{cpp/title|thread}}
{{cpp/thread/thread/navbar}}
{{ddcl | header=thread | since=c++11 |
class thread;
}}

The class {{tt|thread}} represents [[enwiki:Thread_(computing)|a single thread of execution]]. Threads allow multiple functions to execute concurrently. 

Threads begin execution immediately upon construction of the associated thread object (pending any OS scheduling delays), starting at the top-level function provided as a [[cpp/thread/thread/thread|constructor argument]]. The return value of the top-level function is ignored and if it terminates by throwing an exception, {{lc|std::terminate}} is called. The top-level function may communicate its return value or an exception to the caller via {{lc|std::promise}} or by modifying shared variables (which may require synchronization, see {{lc|std::mutex}} and {{lc|std::atomic}})

{{tt|std::thread}} objects may also be in the state that does not represent any thread (after default construction, move from, {{lc|detach}}, or {{lc|join}}), and a thread of execution may be not associated with any {{tt|thread}} objects (after {{lc|detach}}).

No two {{tt|std::thread}} objects may represent the same thread of execution; {{tt|std::thread}} is not {{concept|CopyConstructible}} or {{concept|CopyAssignable}}, although it is {{concept|MoveConstructible}} and {{concept|MoveAssignable}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|native_handle_type}} | ''implementation-defined''}}
{{dsc end}}

===Member classes===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc id}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc constructor}}
{{dsc inc | cpp/thread/thread/dsc destructor}}
{{dsc inc | cpp/thread/thread/dsc operator{{=}}}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/thread/thread/dsc joinable}}
{{dsc inc | cpp/thread/thread/dsc get_id}}
{{dsc inc | cpp/thread/thread/dsc native_handle}}
{{dsc inc | cpp/thread/thread/dsc hardware_concurrency}}

{{dsc h2 | Operations}}
{{dsc inc | cpp/thread/thread/dsc join}}
{{dsc inc | cpp/thread/thread/dsc detach}}
{{dsc inc | cpp/thread/thread/dsc swap}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc swap2}}
{{dsc end}}

[[de:cpp/thread/thread]]
[[es:cpp/thread/thread]]
[[fr:cpp/thread/thread]]
[[it:cpp/thread/thread]]
[[ja:cpp/thread/thread]]
[[pt:cpp/thread/thread]]
[[ru:cpp/thread/thread]]
[[zh:cpp/thread/thread]]</text>
      <sha1>1dyoxjoa31ppwjela99huxn66rdgj2a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/detach</title>
    <ns>0</ns>
    <id>2271</id>
    <revision>
      <id>90289</id>
      <parentid>81606</parentid>
      <timestamp>2017-02-19T21:41:12Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="1821">{{cpp/thread/thread/title|detach}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
void detach();
}}

Separates the thread of execution from the thread object, allowing execution to continue independently. Any allocated resources will be freed once the thread exits.

After calling {{tt|detach}} {{c|*this}} no longer owns any thread.

===Parameters===
(none)

===Return value===
(none)

===Postconditions===
{{lc|joinable}} is {{c|false}}

===Exceptions===
{{lc|std::system_error}} if {{c|joinable() {{==}} false}} or an error occurs.

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;

void independentThread() 
{
    std::cout &lt;&lt; &quot;Starting concurrent thread.\n&quot;;
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::cout &lt;&lt; &quot;Exiting concurrent thread.\n&quot;;
}

void threadCaller() 
{
    std::cout &lt;&lt; &quot;Starting thread caller.\n&quot;;
    std::thread t(independentThread);
    t.detach();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout &lt;&lt; &quot;Exiting thread caller.\n&quot;;
}

int main() 
{
    threadCaller();
    std::this_thread::sleep_for(std::chrono::seconds(5));
}
 | output=
Starting thread caller.
Starting concurrent thread.
Exiting thread caller.
Exiting concurrent thread.
}}

===References===
{{ref std c++11}}
{{ref std | section=30.3.1.5 | title=thread members | id=thread.thread.member}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc join}}
{{dsc inc | cpp/thread/thread/dsc joinable}}
{{dsc see c | c/thread/thrd_detach}}
{{dsc end}}

[[de:cpp/thread/thread/detach]]
[[es:cpp/thread/thread/detach]]
[[fr:cpp/thread/thread/detach]]
[[it:cpp/thread/thread/detach]]
[[ja:cpp/thread/thread/detach]]
[[pt:cpp/thread/thread/detach]]
[[ru:cpp/thread/thread/detach]]
[[zh:cpp/thread/thread/detach]]</text>
      <sha1>defgc5x76z113r6bl3q4daj3l7787uq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/get id</title>
    <ns>0</ns>
    <id>2276</id>
    <revision>
      <id>91566</id>
      <parentid>64312</parentid>
      <timestamp>2017-03-31T19:50:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1370">{{cpp/thread/thread/title|get_id}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
std::thread::id get_id() const;
}}

Returns a value of {{lc|std::thread::id}} identifying the thread associated with {{c|*this}}.

===Parameters===
(none)

===Return value===
A value of type {{lc|std::thread::id}} identifying the thread associated with {{c|*this}}. If there is no thread associated, default constructed {{lc|std::thread::id}} is returned.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

void foo()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    std::thread t1(foo);
    std::thread::id t1_id = t1.get_id();

    std::thread t2(foo);
    std::thread::id t2_id = t2.get_id();

    std::cout &lt;&lt; &quot;t1's id: &quot; &lt;&lt; t1_id &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;t2's id: &quot; &lt;&lt; t2_id &lt;&lt; '\n';

    t1.join();
    t2.join();
}
 | output=
t1's id: 0x35a7210f
t2's id: 0x35a311c4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc id}}
{{dsc inc | cpp/thread/thread/dsc joinable}}
{{dsc end}}

[[de:cpp/thread/thread/get id]]
[[es:cpp/thread/thread/get id]]
[[fr:cpp/thread/thread/get id]]
[[it:cpp/thread/thread/get id]]
[[ja:cpp/thread/thread/get id]]
[[pt:cpp/thread/thread/get id]]
[[ru:cpp/thread/thread/get id]]
[[zh:cpp/thread/thread/get id]]</text>
      <sha1>shq22k51p167koqelbwwgk3fv1nl8jq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/hardware concurrency</title>
    <ns>0</ns>
    <id>2275</id>
    <revision>
      <id>91735</id>
      <parentid>83894</parentid>
      <timestamp>2017-03-31T19:56:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1205">{{cpp/thread/thread/title|hardware_concurrency}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
static unsigned hardware_concurrency();
}}

Returns the number of concurrent threads supported by the implementation. The value should be considered only a hint.

===Parameters===
(none)

===Return value===
number of concurrent threads supported. If the value is not well defined or not computable, returns {{c|0}}.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;

int main() {
    unsigned int n = std::thread::hardware_concurrency();
    std::cout &lt;&lt; n &lt;&lt; &quot; concurrent threads are supported.\n&quot;;
}
 | output=
4 concurrent threads are supported.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc hardware_destructive_interference_size}}
{{dsc end}}

[[de:cpp/thread/thread/hardware concurrency]]
[[es:cpp/thread/thread/hardware concurrency]]
[[fr:cpp/thread/thread/hardware concurrency]]
[[it:cpp/thread/thread/hardware concurrency]]
[[ja:cpp/thread/thread/hardware concurrency]]
[[pt:cpp/thread/thread/hardware concurrency]]
[[ru:cpp/thread/thread/hardware concurrency]]
[[zh:cpp/thread/thread/hardware concurrency]]</text>
      <sha1>smjmyi30hn5v8mk27ta5cq43rp6ylb4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/id</title>
    <ns>0</ns>
    <id>5138</id>
    <revision>
      <id>80569</id>
      <parentid>63477</parentid>
      <timestamp>2015-08-20T21:41:33Z</timestamp>
      <contributor>
        <ip>131.107.192.194</ip>
      </contributor>
      <comment>add link to this_thread::get_id under 'See also'</comment>
      <text xml:space="preserve" bytes="1376">{{cpp/thread/thread/title|id}}
{{cpp/thread/thread/id/navbar}}
{{ddcl | header=thread | since=c++11 |
class thread::id;
}}

The class {{tt|thread::id}} is a lightweight, trivially copyable class that serves as a unique identifier of {{lc|std::thread}} objects. 

Instances of this class may also hold the special distinct value that does not represent any thread. Once a thread has finished, the value of {{tt|std::thread::id}} may be reused by another thread.

This class is designed for use as key in associative containers, both ordered and unordered.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/thread/thread/id/id | constructs an id that does not represent a thread}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/id/dsc operator_cmp}}
{{dsc inc | cpp/thread/thread/id/dsc operator_ltlt}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc ptclass | cpp/thread/thread/id/hash | title=std::hash{{dsc small|&lt;std::thread::id&gt;}} | specializes {{lc|std::hash}}}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc get_id}}
{{dsc inc | cpp/thread/dsc get_id}}
{{dsc end}}

[[de:cpp/thread/thread/id]]
[[es:cpp/thread/thread/id]]
[[fr:cpp/thread/thread/id]]
[[it:cpp/thread/thread/id]]
[[ja:cpp/thread/thread/id]]
[[pt:cpp/thread/thread/id]]
[[ru:cpp/thread/thread/id]]
[[zh:cpp/thread/thread/id]]</text>
      <sha1>2y7f3iutp6a4t7gwvwmfliy9cm0otd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/id/hash</title>
    <ns>0</ns>
    <id>8493</id>
    <revision>
      <id>85095</id>
      <parentid>77511</parentid>
      <timestamp>2016-03-30T14:23:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>no two-level inline namespace using</comment>
      <text xml:space="preserve" bytes="1463">{{cpp/title|hash{{small|&lt;std::thread::id&gt;}}}}
{{cpp/thread/thread/id/navbar}}
{{dcl begin}}
{{dcl header | thread}}
{{dcl | since=c++11 | 1=
template&lt;&gt; struct hash&lt;std::thread::id&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for the {{lc|std::thread::id}} class allows users to obtain hashes of the identifiers of threads.

===Example===
{{todo|example that uses hash meaningfully}}
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
#include &lt;vector&gt;
using namespace std::chrono_literals;
void foo()
{
    std::this_thread::sleep_for(10ms);
}
 
int main()
{
    std::vector&lt;std::thread&gt; v;
    for(int n = 0; n &lt; 4; ++n)
        v.emplace_back(foo);

    std::hash&lt;std::thread::id&gt; hasher;
    for(auto&amp; t : v) {
        std::cout &lt;&lt; &quot;thread &quot; &lt;&lt; t.get_id() &lt;&lt; &quot; hashes to &quot; &lt;&lt; hasher(t.get_id()) &lt;&lt; '\n';
        t.join();
    }
}  
 | p = true
 | output=
thread 139786440144640 hashes to 8905351942358389397
thread 139786431751936 hashes to 9222844670065909738
thread 139786423359232 hashes to 18199000599186780501
thread 139786414966528 hashes to 15386662774029264672
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[de:cpp/thread/thread/id/hash]]
[[es:cpp/thread/thread/id/hash]]
[[fr:cpp/thread/thread/id/hash]]
[[it:cpp/thread/thread/id/hash]]
[[ja:cpp/thread/thread/id/hash]]
[[pt:cpp/thread/thread/id/hash]]
[[ru:cpp/thread/thread/id/hash]]
[[zh:cpp/thread/thread/id/hash]]</text>
      <sha1>rndlm0pskmc5etlc718svuqxe0urhys</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/id/id</title>
    <ns>0</ns>
    <id>9076</id>
    <revision>
      <id>91853</id>
      <parentid>62983</parentid>
      <timestamp>2017-03-31T19:59:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="530">{{cpp/thread/thread/id/title|id}}
{{cpp/thread/thread/id/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
id();
}}
{{dcl end}}

Default-constructs a new thread identifier. The identifier does not represent a thread.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/thread/thread/id/id]]
[[es:cpp/thread/thread/id/id]]
[[fr:cpp/thread/thread/id/id]]
[[it:cpp/thread/thread/id/id]]
[[ja:cpp/thread/thread/id/id]]
[[pt:cpp/thread/thread/id/id]]
[[ru:cpp/thread/thread/id/id]]
[[zh:cpp/thread/thread/id/id]]</text>
      <sha1>9kuo87oy8pq9ijx2bchdz8oh0xnv1k0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/id/operator cmp</title>
    <ns>0</ns>
    <id>9075</id>
    <revision>
      <id>91553</id>
      <parentid>90295</parentid>
      <timestamp>2017-03-31T19:49:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1551">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;={{small|(std::thread::id)}}}}
{{cpp/thread/thread/id/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
bool operator==( thread::id lhs, thread::id rhs );
}}
{{dcl | num=2 | since=c++11 | 1=
bool operator!=( thread::id lhs, thread::id rhs );
}}
{{dcl | num=3 | since=c++11 | 1=
bool operator&lt;( thread::id lhs, thread::id rhs );
}}
{{dcl | num=4 | since=c++11 | 1=
bool operator&lt;=( thread::id lhs, thread::id rhs );
}}
{{dcl | num=5 | since=c++11 | 1=
bool operator&gt;( thread::id lhs, thread::id rhs );
}}
{{dcl | num=6 | since=c++11 | 1=
bool operator&gt;=( thread::id lhs, thread::id rhs );
}}
{{dcl end}}

Compares two thread identifiers.

@1-2@ Checks whether {{tt|lhs}} and {{tt|rhs}} represent either the same thread, or no thread.

@3-6@ Compares {{tt|lhs}} and {{tt|rhs}} in such a way, that {{tt|lhs}} and {{tt|rhs}} are totally ordered.

===Parameters===
{{par begin}}
{{par | lhs, rhs | thread identifiers to compare}}
{{par end}} 

===Return value===
{{c|true}} whether the corresponding relation holds, {{tt|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant.

===See also===
{{dsc begin}}
{{dsc see c | c/thread/thrd_equal}}
{{dsc end}}

[[de:cpp/thread/thread/id/operator cmp]]
[[es:cpp/thread/thread/id/operator cmp]]
[[fr:cpp/thread/thread/id/operator cmp]]
[[it:cpp/thread/thread/id/operator cmp]]
[[ja:cpp/thread/thread/id/operator cmp]]
[[pt:cpp/thread/thread/id/operator cmp]]
[[ru:cpp/thread/thread/id/operator cmp]]
[[zh:cpp/thread/thread/id/operator cmp]]</text>
      <sha1>hmzukq2x3a3i1lqpxyb6slnea0wvl3i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/id/operator ltlt</title>
    <ns>0</ns>
    <id>9078</id>
    <revision>
      <id>74153</id>
      <parentid>62985</parentid>
      <timestamp>2014-12-04T18:21:59Z</timestamp>
      <contributor>
        <username>SuperBoi45</username>
        <id>1156</id>
      </contributor>
      <minor/>
      <comment>Rvalue-reference corrected to lvalue-reference</comment>
      <text xml:space="preserve" bytes="1059">{{title | 1=operator&lt;&lt;{{small|(std::thread::id)}}}}
{{cpp/thread/thread/id/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt; class CharT, class Traits &gt;
std::basic_ostream&lt;CharT,Traits&gt;&amp;
    operator&lt;&lt;( std::basic_ostream&lt;CharT,Traits&gt;&amp; ost, thread::id id );
}}
{{dcl end}}

Writes a textual representation of a thread identifier {{tt|id}} to the output stream {{tt|ost}}. 

If two thread identifiers compare equal, they have identical textual representations; if they do not compare equal, their representations are distinct.

===Parameters===
{{par begin}}
{{par | ost | output stream to insert the data into}}
{{par | id | thread identifier}}
{{par end}} 

===Return value===
{{tt|ost}}

===Exceptions===
(none)

[[de:cpp/thread/thread/id/operator ltlt]]
[[es:cpp/thread/thread/id/operator ltlt]]
[[fr:cpp/thread/thread/id/operator ltlt]]
[[it:cpp/thread/thread/id/operator ltlt]]
[[ja:cpp/thread/thread/id/operator ltlt]]
[[pt:cpp/thread/thread/id/operator ltlt]]
[[ru:cpp/thread/thread/id/operator ltlt]]
[[zh:cpp/thread/thread/id/operator ltlt]]</text>
      <sha1>56xwydocgbak67gjee3gps0niz8njld</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/join</title>
    <ns>0</ns>
    <id>2272</id>
    <revision>
      <id>90287</id>
      <parentid>90210</parentid>
      <timestamp>2017-02-19T21:37:30Z</timestamp>
      <contributor>
        <username>Diego91b</username>
        <id>3102</id>
      </contributor>
      <minor/>
      <comment>See also C documentation</comment>
      <text xml:space="preserve" bytes="2044">{{cpp/thread/thread/title|join}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
void join();
}}

Blocks the current thread until the thread identified by {{c|*this}} finishes its execution.

The completion of the thread identified by {{c|*this}} ''synchronizes with'' the corresponding successful return from {{lc|join()}}. 

===Parameters===
(none)

===Return value===
(none)

===Postconditions===
{{lc|joinable}} is {{c|false}}

===Exceptions===
{{lc|std::system_error}} if an error occurs.

===Error Conditions===
* {{lc|std::errc|resource_deadlock_would_occur}} if {{c|this-&gt;get_id() {{==}} std::this_thread::get_id()}} (deadlock detected)
* {{lc|std::errc|no_such_process}} if the thread is not valid
* {{lc|std::errc|invalid_argument}} if {{lc|joinable}} is {{c|false}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

void foo()
{
    // simulate expensive operation
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

void bar()
{
    // simulate expensive operation
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    std::cout &lt;&lt; &quot;starting first helper...\n&quot;;
    std::thread helper1(foo);

    std::cout &lt;&lt; &quot;starting second helper...\n&quot;;
    std::thread helper2(bar);

    std::cout &lt;&lt; &quot;waiting for helpers to finish...&quot; &lt;&lt; std::endl;
    helper1.join();
    helper2.join();
 
    std::cout &lt;&lt; &quot;done!\n&quot;;
}
 | output=
starting first helper...
starting second helper...
waiting for helpers to finish...
done!
}}

===References===
{{ref std c++11}}
{{ref std | section=30.3.1.5 | title=thread members | id=thread.thread.member}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc detach}}
{{dsc inc | cpp/thread/thread/dsc joinable}}
{{dsc see c | c/thread/thrd_join}}
{{dsc end}}

[[de:cpp/thread/thread/join]]
[[es:cpp/thread/thread/join]]
[[fr:cpp/thread/thread/join]]
[[it:cpp/thread/thread/join]]
[[ja:cpp/thread/thread/join]]
[[pt:cpp/thread/thread/join]]
[[ru:cpp/thread/thread/join]]
[[zh:cpp/thread/thread/join]]</text>
      <sha1>liukuudka515ylce9i1p0ynv874cdqg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/joinable</title>
    <ns>0</ns>
    <id>2273</id>
    <revision>
      <id>91580</id>
      <parentid>87636</parentid>
      <timestamp>2017-03-31T19:50:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1779">{{cpp/thread/thread/title|joinable}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
bool joinable() const;
}}

Checks if the thread object identifies an active thread of execution. Specifically, returns {{c|true}} if {{c|get_id() !{{=}} std::thread::id()}}. So a default constructed {{c|thread}} is not joinable. 

A thread that has finished executing code, but has not yet been joined is still considered an active thread of execution and is therefore joinable.

===Parameters===
(none)

===Return value===
{{c|true}} if the thread object identifies an active thread of execution, {{c|false}} otherwise

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

void foo()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    std::thread t;
    std::cout &lt;&lt; &quot;before starting, joinable: &quot; &lt;&lt; t.joinable() &lt;&lt; '\n';

    t = std::thread(foo);
    std::cout &lt;&lt; &quot;after starting, joinable: &quot; &lt;&lt; t.joinable() &lt;&lt; '\n';

    t.join();
    std::cout &lt;&lt; &quot;after joining, joinable: &quot; &lt;&lt; t.joinable() &lt;&lt; '\n';
}
 | output=
before starting, joinable: 0
after starting, joinable: 1
after joining, joinable: 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc get_id}}
{{dsc inc | cpp/thread/thread/dsc join}}
{{dsc inc | cpp/thread/thread/dsc detach}}
{{dsc end}}

===References===
{{ref std c++11}}
{{ref std | section=30.3.1.5 | title=thread members | id=thread.thread.member}}
{{ref std end}}

[[de:cpp/thread/thread/joinable]]
[[es:cpp/thread/thread/joinable]]
[[fr:cpp/thread/thread/joinable]]
[[it:cpp/thread/thread/joinable]]
[[ja:cpp/thread/thread/joinable]]
[[pt:cpp/thread/thread/joinable]]
[[ru:cpp/thread/thread/joinable]]
[[zh:cpp/thread/thread/joinable]]</text>
      <sha1>mqeakcasu2n0xnxhn5d0616gb8dfnb5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/native handle</title>
    <ns>0</ns>
    <id>2277</id>
    <revision>
      <id>87090</id>
      <parentid>66956</parentid>
      <timestamp>2016-07-26T02:13:03Z</timestamp>
      <contributor>
        <ip>211.221.56.80</ip>
      </contributor>
      <comment>(Minor) Fixes inconsistent indentation and formatting of code</comment>
      <text xml:space="preserve" bytes="1677">{{cpp/thread/thread/title|native_handle}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
native_handle_type native_handle();
}}

Returns the implementation defined underlying thread handle. 

===Parameters===
(none)

===Return value===
implementation defined handle type representing the thread.

===Exceptions===
(none)

===Example===
{{example
 | Uses native_handle to enable realtime scheduling of C++ threads on a POSIX system
 | code=
#include &lt;thread&gt;
#include &lt;mutex&gt;
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;cstring&gt;
#include &lt;pthread.h&gt;

std::mutex iomutex;
void f(int num)
{
    std::this_thread::sleep_for(std::chrono::seconds(1));

    sched_param sch;
    int policy; 
    pthread_getschedparam(pthread_self(), &amp;policy, &amp;sch);
    std::lock_guard&lt;std::mutex&gt; lk(iomutex);
    std::cout &lt;&lt; &quot;Thread &quot; &lt;&lt; num &lt;&lt; &quot; is executing at priority &quot;
              &lt;&lt; sch.sched_priority &lt;&lt; '\n';
}

int main()
{
    std::thread t1(f, 1), t2(f, 2);

    sched_param sch;
    int policy; 
    pthread_getschedparam(t1.native_handle(), &amp;policy, &amp;sch);
    sch.sched_priority = 20;
    if (pthread_setschedparam(t1.native_handle(), SCHED_FIFO, &amp;sch)) {
        std::cout &lt;&lt; &quot;Failed to setschedparam: &quot; &lt;&lt; std::strerror(errno) &lt;&lt; '\n';
    }

    t1.join(); t2.join();
}
 | output=
Thread 2 is executing at priority 0
Thread 1 is executing at priority 20
}}

[[de:cpp/thread/thread/native handle]]
[[es:cpp/thread/thread/native handle]]
[[fr:cpp/thread/thread/native handle]]
[[it:cpp/thread/thread/native handle]]
[[ja:cpp/thread/thread/native handle]]
[[pt:cpp/thread/thread/native handle]]
[[ru:cpp/thread/thread/native handle]]
[[zh:cpp/thread/thread/native handle]]</text>
      <sha1>8l05khnfits047rmff0t0k2r2uihpgk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/operator=</title>
    <ns>0</ns>
    <id>2466</id>
    <revision>
      <id>91831</id>
      <parentid>80182</parentid>
      <timestamp>2017-03-31T19:59:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1008">{{cpp/thread/thread/title|operator{{=}}}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 | 1=
thread&amp; operator=( thread&amp;&amp; other );
}}

If {{c|*this}} still has an associated running thread (i.e. {{c|1=joinable() == true}}), call {{c|std::terminate()}}. Otherwise, assigns the state of {{tt|other}} to {{c|*this}} and sets {{tt|other}} to a default constructed state.

After this call, {{tt|this-&gt;get_id()}} is equal to the value of {{tt|other.get_id()}} prior to the call, and {{tt|other}} no longer represents a thread of execution.


===Parameters===
{{par begin}}
{{par | other | another thread object to assign to this thread object}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/thread/thread/operator=]]
[[es:cpp/thread/thread/operator=]]
[[fr:cpp/thread/thread/operator=]]
[[it:cpp/thread/thread/operator=]]
[[ja:cpp/thread/thread/operator=]]
[[pt:cpp/thread/thread/operator=]]
[[ru:cpp/thread/thread/operator=]]
[[zh:cpp/thread/thread/operator=]]</text>
      <sha1>9iuvpmn26j2yvs94uf7dwdf56paqal2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/swap</title>
    <ns>0</ns>
    <id>2268</id>
    <revision>
      <id>91543</id>
      <parentid>63482</parentid>
      <timestamp>2017-03-31T19:49:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1690">{{cpp/thread/thread/title|swap}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
void swap( thread&amp; other );
}}

Exchanges the underlying handles of two thread objects.

===Parameters===
{{par begin}}
{{par | other | the thread to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

void foo()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

void bar()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    std::thread t1(foo);
    std::thread t2(bar);

    std::cout &lt;&lt; &quot;thread 1 id: &quot; &lt;&lt; t1.get_id() &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 2 id: &quot; &lt;&lt; t2.get_id() &lt;&lt; std::endl;

    std::swap(t1, t2);

    std::cout &lt;&lt; &quot;after std::swap(t1, t2):&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 1 id: &quot; &lt;&lt; t1.get_id() &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 2 id: &quot; &lt;&lt; t2.get_id() &lt;&lt; std::endl;

    t1.swap(t2);

    std::cout &lt;&lt; &quot;after t1.swap(t2):&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 1 id: &quot; &lt;&lt; t1.get_id() &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 2 id: &quot; &lt;&lt; t2.get_id() &lt;&lt; std::endl;

    t1.join();
    t2.join();
}
 | output=
thread 1 id: 1892
thread 2 id: 2584
after std::swap(t1, t2):
thread 1 id: 2584
thread 2 id: 1892
after t1.swap(t2):
thread 1 id: 1892
thread 2 id: 2584
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc swap2}}
{{dsc end}}

[[de:cpp/thread/thread/swap]]
[[es:cpp/thread/thread/swap]]
[[fr:cpp/thread/thread/swap]]
[[it:cpp/thread/thread/swap]]
[[ja:cpp/thread/thread/swap]]
[[pt:cpp/thread/thread/swap]]
[[ru:cpp/thread/thread/swap]]
[[zh:cpp/thread/thread/swap]]</text>
      <sha1>d6i6osjzfxrt05xotqwhcawgpp03w3x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/swap2</title>
    <ns>0</ns>
    <id>5499</id>
    <revision>
      <id>91768</id>
      <parentid>62986</parentid>
      <timestamp>2017-03-31T19:57:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1849">{{cpp/title | swap{{small|(std::thread)}}}}
{{cpp/thread/thread/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
void swap( thread &amp;lhs, thread &amp;rhs );
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::thread}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | threads whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

void foo()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

void bar()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    std::thread t1(foo);
    std::thread t2(bar);

    std::cout &lt;&lt; &quot;thread 1 id: &quot; &lt;&lt; t1.get_id() &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 2 id: &quot; &lt;&lt; t2.get_id() &lt;&lt; std::endl;

    std::swap(t1, t2);

    std::cout &lt;&lt; &quot;after std::swap(t1, t2):&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 1 id: &quot; &lt;&lt; t1.get_id() &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 2 id: &quot; &lt;&lt; t2.get_id() &lt;&lt; std::endl;

    t1.swap(t2);

    std::cout &lt;&lt; &quot;after t1.swap(t2):&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 1 id: &quot; &lt;&lt; t1.get_id() &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;thread 2 id: &quot; &lt;&lt; t2.get_id() &lt;&lt; std::endl;

    t1.join();
    t2.join();
}
 | output=
thread 1 id: 1892
thread 2 id: 2584
after std::swap(t1, t2):
thread 1 id: 2584
thread 2 id: 1892
after t1.swap(t2):
thread 1 id: 1892
thread 2 id: 2584
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/thread/dsc swap}}
{{dsc end}}

[[de:cpp/thread/thread/swap2]]
[[es:cpp/thread/thread/swap2]]
[[fr:cpp/thread/thread/swap2]]
[[it:cpp/thread/thread/swap2]]
[[ja:cpp/thread/thread/swap2]]
[[pt:cpp/thread/thread/swap2]]
[[ru:cpp/thread/thread/swap2]]
[[zh:cpp/thread/thread/swap2]]</text>
      <sha1>s78fw3osmk1uoaubm6pdhmhovrp3tam</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/thread</title>
    <ns>0</ns>
    <id>2464</id>
    <revision>
      <id>91761</id>
      <parentid>90285</parentid>
      <timestamp>2017-03-31T19:57:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4749">{{cpp/thread/thread/title|thread}}
{{cpp/thread/thread/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
thread();
}}
{{dcl | num=2 | since=c++11 |
thread( thread&amp;&amp; other );
}}
{{dcl | num=3 | since=c++11 |
template&lt; class Function, class... Args &gt; 
explicit thread( Function&amp;&amp; f, Args&amp;&amp;... args );
}}
{{dcl | num=4 | since=c++11 |1=
thread(const thread&amp;) = delete;
}}
{{dcl end}}

Constructs new thread object.

@1@ Creates new thread object which does not represent a thread.

@2@ Move constructor. Constructs the thread object to represent the thread of execution that was represented by {{tt|other}}. After this call {{tt|other}} no longer represents a thread of execution.

@3@ Creates new {{tt|std::thread}} object and associates it with a thread of execution. The new thread of execution starts executing {{source|1=
std::invoke(decay_copy(std::forward&lt;Function&gt;(f)), decay_copy(std::forward&lt;Args&gt;(args))...);
}}
where {{tt|decay_copy}} is defined as 
{{source|1=
template &lt;class T&gt;
std::decay_t&lt;T&gt; decay_copy(T&amp;&amp; v) { return std::forward&lt;T&gt;(v); }
}}
Except that the calls to {{tt|decay_copy}} are evaluated in the context of the caller, so that any exceptions thrown during evaluation and copying/moving of the arguments are thrown in the current thread, without starting the new thread.

@@ The completion of the invocation of the constructor ''synchronizes-with'' (as defined in {{lc|std::memory_order}}) the beginning of the invocation of the copy of ''f'' on the new thread of execution.

{{rev begin}}
{{rev|since=c++14|
@@ This constructor does not participate in overload resolution if {{lc|std::decay_t&lt;Function&gt;}} is the same type as {{c|std::thread}}.
}}
{{rev end}}

@4@ The copy constructor is deleted; threads are not copyable. No two {{tt|std::thread}} objects may represent the same thread of execution.

===Parameters===
{{par begin}}
{{par | other | another thread object to construct this thread object with}}
{{par | f | {{concept|Callable}} object to execute in the new thread}}
{{par | args... | arguments to pass to the new function}}
{{par end}}

===Postconditions===
@1@ {{lc|get_id()}} equal to {{lc|std::thread::id()}} (i.e. {{lc|joinable}} is {{c|false}})
@2@ {{c|other.get_id()}} equal to {{lc|std::thread::id()}} and {{lc|get_id()}} returns the value of {{c|other.get_id()}} prior to the start of construction
@3@ {{lc|get_id()}} not equal to {{lc|std::thread::id()}} (i.e. {{lc|joinable}} is {{c|true}})

===Exceptions===
@1-2@ {{unreviewed noexcept}}

@3@ {{lc|std::system_error}} if the thread could not be started. The exception may represent the error condition {{tt|std::errc::resource_unavailable_try_again}} or another implementation-specific error condition.

===Notes===
The arguments to the thread function are moved or copied by value. If a reference argument needs to be passed to the thread function, it has to be wrapped (e.g. with {{lc|std::ref}} or {{lc|std::cref}}).

Any return value from the function is ignored. If the function throws an exception, {{lc|std::terminate}} is called. In order to pass return values or exceptions back to the calling thread, {{lc|std::promise}} or {{lc|std::async}} may be used.

===Example===
{{example
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;
#include &lt;functional&gt;
#include &lt;atomic&gt;

void f1(int n)
{
    for (int i = 0; i &lt; 5; ++i) {
        std::cout &lt;&lt; &quot;Thread 1 executing\n&quot;;
        ++n;
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}

void f2(int&amp; n)
{
    for (int i = 0; i &lt; 5; ++i) {
        std::cout &lt;&lt; &quot;Thread 2 executing\n&quot;;
        ++n;
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}

int main()
{
    int n = 0;
    std::thread t1; // t1 is not a thread
    std::thread t2(f1, n + 1); // pass by value
    std::thread t3(f2, std::ref(n)); // pass by reference
    std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread
    t2.join();
    t4.join();
    std::cout &lt;&lt; &quot;Final value of n is &quot; &lt;&lt; n &lt;&lt; '\n';
}
 |output=
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 2 executing
Thread 1 executing
Final value of n is 5
}}

===References===
{{ref std c++11}}
{{ref std | section=30.3.1.2 | title=thread constructors | id=thread.thread.constr}}
{{ref std end}}

===See also===
{{dsc begin}}
{{dsc see c | c/thread/thrd_create}}
{{dsc end}}

[[de:cpp/thread/thread/thread]]
[[es:cpp/thread/thread/thread]]
[[fr:cpp/thread/thread/thread]]
[[it:cpp/thread/thread/thread]]
[[ja:cpp/thread/thread/thread]]
[[pt:cpp/thread/thread/thread]]
[[ru:cpp/thread/thread/thread]]
[[zh:cpp/thread/thread/thread]]</text>
      <sha1>suhstn4wgja9os6vrl8nl6f6kad9coa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/thread/~thread</title>
    <ns>0</ns>
    <id>2465</id>
    <revision>
      <id>73309</id>
      <parentid>73308</parentid>
      <timestamp>2014-10-23T02:11:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>actually, +more cases when it won't terminate</comment>
      <text xml:space="preserve" bytes="710">{{cpp/thread/thread/title|~thread}}
{{cpp/thread/thread/navbar}}
{{ddcl | since=c++11 |
~thread();
}}

Destroys the thread object.

If {{c|*this}} has an associated thread ({{c|1=joinable() == true}}), {{c|std::terminate()}} is called.

===Notes===
A thread object does not have an associated thread (and is safe to destroy) after
* it was default-constructed
* it was moved from
* {{lc|join()}} has been called
* {{lc|detach()}} has been called

[[de:cpp/thread/thread/~thread]]
[[es:cpp/thread/thread/~thread]]
[[fr:cpp/thread/thread/~thread]]
[[it:cpp/thread/thread/~thread]]
[[ja:cpp/thread/thread/~thread]]
[[pt:cpp/thread/thread/~thread]]
[[ru:cpp/thread/thread/~thread]]
[[zh:cpp/thread/thread/~thread]]</text>
      <sha1>qafaorybg0ole6c69r6360vcsfns3i1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex</title>
    <ns>0</ns>
    <id>2302</id>
    <revision>
      <id>83591</id>
      <parentid>67040</parentid>
      <timestamp>2016-03-02T08:58:26Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Member types */ {{mark optional}}</comment>
      <text xml:space="preserve" bytes="1792">{{cpp/title|timed_mutex}}
{{cpp/thread/timed_mutex/navbar}}
{{ddcl | header=mutex | since=c++11 | 1=
class timed_mutex;
}}

The {{tt|timed_mutex}} class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads. 

In a manner similar to {{ltt|cpp/thread/mutex}}, {{tt|timed_mutex}} offers exclusive, non-recursive ownership semantics.  In addition, {{tt|timed_mutex}} provides the ability to attempt to claim ownership of a {{tt|timed_mutex}} with a timeout via the {{ltf|cpp/thread/timed_mutex/try_lock_for}} and {{ltf|cpp/thread/timed_mutex/try_lock_until}} methods.

The {{tt|timed_mutex}} class satisfies all requirements of {{concept|TimedMutex}} and {{concept|StandardLayoutType}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|native_handle_type}}{{mark optional}} | ''implementation-defined''}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/mutex/dsc constructor | timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc destructor | timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc operator{{=}}}}

{{dsc h2 | Locking}}
{{dsc inc | cpp/thread/mutex/dsc lock | timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock | timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_for | timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc try_lock_until | timed_mutex}}
{{dsc inc | cpp/thread/mutex/dsc unlock | timed_mutex}}

{{dsc h2 | Native handle}}
{{dsc inc | cpp/thread/mutex/dsc native_handle | timed_mutex}}
{{dsc end}}

[[de:cpp/thread/timed mutex]]
[[es:cpp/thread/timed mutex]]
[[fr:cpp/thread/timed mutex]]
[[it:cpp/thread/timed mutex]]
[[ja:cpp/thread/timed mutex]]
[[pt:cpp/thread/timed mutex]]
[[ru:cpp/thread/timed mutex]]
[[zh:cpp/thread/timed mutex]]</text>
      <sha1>sya43oqtzkeg07083wrblq6s8hni2wl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/lock</title>
    <ns>0</ns>
    <id>2337</id>
    <revision>
      <id>51448</id>
      <parentid>43255</parentid>
      <timestamp>2013-06-01T04:03:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="331">{{include page|cpp/thread/mutex/lock|timed_mutex}}

[[de:cpp/thread/timed mutex/lock]]
[[es:cpp/thread/timed mutex/lock]]
[[fr:cpp/thread/timed mutex/lock]]
[[it:cpp/thread/timed mutex/lock]]
[[ja:cpp/thread/timed mutex/lock]]
[[pt:cpp/thread/timed mutex/lock]]
[[ru:cpp/thread/timed mutex/lock]]
[[zh:cpp/thread/timed mutex/lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/native handle</title>
    <ns>0</ns>
    <id>2342</id>
    <revision>
      <id>51449</id>
      <parentid>43248</parentid>
      <timestamp>2013-06-01T04:03:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="412">{{include page|cpp/thread/mutex/native_handle|timed_mutex}}

[[de:cpp/thread/timed mutex/native handle]]
[[es:cpp/thread/timed mutex/native handle]]
[[fr:cpp/thread/timed mutex/native handle]]
[[it:cpp/thread/timed mutex/native handle]]
[[ja:cpp/thread/timed mutex/native handle]]
[[pt:cpp/thread/timed mutex/native handle]]
[[ru:cpp/thread/timed mutex/native handle]]
[[zh:cpp/thread/timed mutex/native handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/timed mutex</title>
    <ns>0</ns>
    <id>4489</id>
    <revision>
      <id>51450</id>
      <parentid>43244</parentid>
      <timestamp>2013-06-01T04:03:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="394">{{include page|cpp/thread/mutex/constructor|timed_mutex}}

[[de:cpp/thread/timed mutex/timed mutex]]
[[es:cpp/thread/timed mutex/timed mutex]]
[[fr:cpp/thread/timed mutex/timed mutex]]
[[it:cpp/thread/timed mutex/timed mutex]]
[[ja:cpp/thread/timed mutex/timed mutex]]
[[pt:cpp/thread/timed mutex/timed mutex]]
[[ru:cpp/thread/timed mutex/timed mutex]]
[[zh:cpp/thread/timed mutex/timed mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/try lock</title>
    <ns>0</ns>
    <id>2338</id>
    <revision>
      <id>51451</id>
      <parentid>43235</parentid>
      <timestamp>2013-06-01T04:03:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="367">{{include page|cpp/thread/mutex/try_lock|timed_mutex}}

[[de:cpp/thread/timed mutex/try lock]]
[[es:cpp/thread/timed mutex/try lock]]
[[fr:cpp/thread/timed mutex/try lock]]
[[it:cpp/thread/timed mutex/try lock]]
[[ja:cpp/thread/timed mutex/try lock]]
[[pt:cpp/thread/timed mutex/try lock]]
[[ru:cpp/thread/timed mutex/try lock]]
[[zh:cpp/thread/timed mutex/try lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/try lock for</title>
    <ns>0</ns>
    <id>2339</id>
    <revision>
      <id>51452</id>
      <parentid>43227</parentid>
      <timestamp>2013-06-01T04:03:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="403">{{include page|cpp/thread/mutex/try_lock_for|timed_mutex}}

[[de:cpp/thread/timed mutex/try lock for]]
[[es:cpp/thread/timed mutex/try lock for]]
[[fr:cpp/thread/timed mutex/try lock for]]
[[it:cpp/thread/timed mutex/try lock for]]
[[ja:cpp/thread/timed mutex/try lock for]]
[[pt:cpp/thread/timed mutex/try lock for]]
[[ru:cpp/thread/timed mutex/try lock for]]
[[zh:cpp/thread/timed mutex/try lock for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/try lock until</title>
    <ns>0</ns>
    <id>2340</id>
    <revision>
      <id>51453</id>
      <parentid>43220</parentid>
      <timestamp>2013-06-01T04:03:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="421">{{include page|cpp/thread/mutex/try_lock_until|timed_mutex}}

[[de:cpp/thread/timed mutex/try lock until]]
[[es:cpp/thread/timed mutex/try lock until]]
[[fr:cpp/thread/timed mutex/try lock until]]
[[it:cpp/thread/timed mutex/try lock until]]
[[ja:cpp/thread/timed mutex/try lock until]]
[[pt:cpp/thread/timed mutex/try lock until]]
[[ru:cpp/thread/timed mutex/try lock until]]
[[zh:cpp/thread/timed mutex/try lock until]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/unlock</title>
    <ns>0</ns>
    <id>2341</id>
    <revision>
      <id>51454</id>
      <parentid>43213</parentid>
      <timestamp>2013-06-01T04:03:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Shorten template names. Use {{lc}} where appropriate.</comment>
      <text xml:space="preserve" bytes="349">{{include page|cpp/thread/mutex/unlock|timed_mutex}}

[[de:cpp/thread/timed mutex/unlock]]
[[es:cpp/thread/timed mutex/unlock]]
[[fr:cpp/thread/timed mutex/unlock]]
[[it:cpp/thread/timed mutex/unlock]]
[[ja:cpp/thread/timed mutex/unlock]]
[[pt:cpp/thread/timed mutex/unlock]]
[[ru:cpp/thread/timed mutex/unlock]]
[[zh:cpp/thread/timed mutex/unlock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/timed mutex/~timed mutex</title>
    <ns>0</ns>
    <id>13126</id>
    <revision>
      <id>67044</id>
      <timestamp>2014-01-18T14:00:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fwd to template</comment>
      <text xml:space="preserve" bytes="56">{{include page|cpp/thread/mutex/destructor|timed_mutex}}</text>
      <sha1>6i5p9j13mvssmrypi7icvzrqhaidbf2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/try lock</title>
    <ns>0</ns>
    <id>2504</id>
    <revision>
      <id>77008</id>
      <parentid>63485</parentid>
      <timestamp>2015-03-12T15:38:20Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>correct signature</comment>
      <text xml:space="preserve" bytes="3489">{{cpp/title|try_lock}}
{{cpp/thread/navbar}}
{{ddcl | header=mutex | since=c++11 |
template&lt; class Lockable1, class Lockable2, class... LockableN&gt;
int try_lock( Lockable1&amp; lock1, Lockable2&amp; lock2, LockableN&amp;... lockn);
}}

Tries to lock each of the given {{concept|Lockable}} objects {{tt|lock1}}, {{tt|lock2}}, {{tt|...}}, {{tt|lockn}} by calling {{tt|try_lock}} in order beginning with the first. 

If a call to {{tt|try_lock}} fails, {{tt|unlock}} is called for any locked objects and a {{tt|0}}-based index of the object that failed to lock is returned.

If a call to {{tt|try_lock}} results in an exception, {{tt|unlock}} is called for any locked objects before rethrowing.

===Parameters===
{{par begin}}
{{par | lock1, lock2, ... , lockn | the {{concept|Lockable}} objects to lock}}
{{par end}}

===Return value===
{{tt|-1}} on success, or {{tt|0}}-based index value of the object that failed to lock.

===Example===
{{example|The following example uses {{tt|std::try_lock}} to periodically tally and reset counters running in separate threads.
 | p=true
 | code=
#include &lt;mutex&gt;
#include &lt;vector&gt;
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;functional&gt;
#include &lt;chrono&gt;

int main()
{
    int foo_count = 0;
    std::mutex foo_count_mutex;
    int bar_count = 0;
    std::mutex bar_count_mutex;
    int overall_count = 0;
    bool done = false;
    std::mutex done_mutex;

    auto increment = [](int &amp;counter, std::mutex &amp;m,  const char *desc) {
        for (int i = 0; i &lt; 10; ++i) {
            std::unique_lock&lt;std::mutex&gt; lock(m);
            ++counter;
            std::cout &lt;&lt; desc &lt;&lt; &quot;: &quot; &lt;&lt; counter &lt;&lt; '\n';
            lock.unlock();
            std::this_thread::sleep_for(std::chrono::seconds(1));
        }
    };

    std::thread increment_foo(increment, std::ref(foo_count), 
        std::ref(foo_count_mutex), &quot;foo&quot;);
    std::thread increment_bar(increment, std::ref(bar_count), 
        std::ref(bar_count_mutex), &quot;bar&quot;);

    std::thread update_overall([&amp;]() {
        done_mutex.lock();
        while (!done) {
            done_mutex.unlock();
            int result = std::try_lock(foo_count_mutex, bar_count_mutex);
            if (result == -1) {
                overall_count += foo_count + bar_count;
                foo_count = 0;
                bar_count = 0;
                std::cout &lt;&lt; &quot;overall: &quot; &lt;&lt; overall_count &lt;&lt; '\n';
                foo_count_mutex.unlock();
                bar_count_mutex.unlock();
            }
            std::this_thread::sleep_for(std::chrono::seconds(2));
            done_mutex.lock();
        }
        done_mutex.unlock();
    });

    increment_foo.join();
    increment_bar.join();
    done_mutex.lock();
    done = true;
    done_mutex.unlock();
    update_overall.join();

    std::cout &lt;&lt; &quot;Done processing\n&quot;
              &lt;&lt; &quot;foo: &quot; &lt;&lt; foo_count &lt;&lt; '\n'
              &lt;&lt; &quot;bar: &quot; &lt;&lt; bar_count &lt;&lt; '\n'
              &lt;&lt; &quot;overall: &quot; &lt;&lt; overall_count &lt;&lt; '\n';
}
 | output=
bar: 1
foo: 1
foo: 2
bar: 2
foo: 3
overall: 5
bar: 1
foo: 1
bar: 2
foo: 2
bar: 3
overall: 10
bar: 1
foo: 1
bar: 2
foo: 2
overall: 14
bar: 1
foo: 1
bar: 2
overall: 17
foo: 1
bar: 1
foo: 2
overall: 20
Done processing
foo: 0
bar: 0
overall: 20
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc lock}}
{{dsc end}}

[[de:cpp/thread/try lock]]
[[es:cpp/thread/try lock]]
[[fr:cpp/thread/try lock]]
[[it:cpp/thread/try lock]]
[[ja:cpp/thread/try lock]]
[[pt:cpp/thread/try lock]]
[[ru:cpp/thread/try lock]]
[[zh:cpp/thread/try lock]]</text>
      <sha1>klk50dym8oc7zm4zg7r0seagh1msb33</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock</title>
    <ns>0</ns>
    <id>2731</id>
    <revision>
      <id>89046</id>
      <parentid>81059</parentid>
      <timestamp>2016-12-22T22:06:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>seealso scoped_lock</comment>
      <text xml:space="preserve" bytes="3346">{{cpp/title|unique_lock}}
{{cpp/thread/unique_lock/navbar}}
{{ddcl | header=mutex | since=c++11 | 1=
template&lt; class Mutex &gt;
class unique_lock;
}}

The class {{c|unique_lock}} is a general-purpose mutex ownership wrapper allowing deferred locking, time-constrained attempts at locking, recursive locking, transfer of lock ownership, and use with condition variables. 

The class {{c|unique_lock}} is movable, but not copyable -- it meets the requirements of {{concept|MoveConstructible}} and {{concept|MoveAssignable}} but not of {{concept|CopyConstructible}} or {{concept|CopyAssignable}}.

The class {{c|unique_lock}} meets the {{concept|BasicLockable}} requirements. If '''Mutex''' meets the {{concept|Lockable}} requirements, {{c|unique_lock}} also meets the {{concept|Lockable}} requirements (ex.: can be used in {{lc|std::lock}}); if '''Mutex''' meets the {{concept|TimedLockable}} requirements, {{c|unique_lock}} also meets the {{concept|TimedLockable}} requirements.

===Template parameters===
{{par begin}}
{{par | Mutex | the type of the mutex to lock. The type must meet the {{concept|BasicLockable}} requirements}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|mutex_type}} | {{c|Mutex}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc constructor}}
{{dsc inc | cpp/thread/unique_lock/dsc destructor}}
{{dsc inc | cpp/thread/unique_lock/dsc operator{{=}}}}

{{dsc h2 | Locking}}
{{dsc inc | cpp/thread/unique_lock/dsc lock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_for}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_until}}
{{dsc inc | cpp/thread/unique_lock/dsc unlock}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/thread/unique_lock/dsc swap}}
{{dsc inc | cpp/thread/unique_lock/dsc release}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/thread/unique_lock/dsc mutex}}
{{dsc inc | cpp/thread/unique_lock/dsc owns_lock}}
{{dsc inc | cpp/thread/unique_lock/dsc operator bool}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc swap2}}
{{dsc end}}

===Example===
{{example |
 | code=
#include &lt;mutex&gt;
#include &lt;thread&gt;
#include &lt;chrono&gt;

struct Box {
    explicit Box(int num) : num_things{num} {}

    int num_things;
    std::mutex m;
};

void transfer(Box &amp;from, Box &amp;to, int num)
{
    // don't actually take the locks yet
    std::unique_lock&lt;std::mutex&gt; lock1(from.m, std::defer_lock);
    std::unique_lock&lt;std::mutex&gt; lock2(to.m, std::defer_lock);

    // lock both unique_locks without deadlock
    std::lock(lock1, lock2);

    from.num_things -= num;
    to.num_things += num;

    // 'from.m' and 'to.m' mutexes unlocked in 'unique_lock' dtors
}

int main()
{
    Box acc1(100);
    Box acc2(50);

    std::thread t1(transfer, std::ref(acc1), std::ref(acc2), 10);
    std::thread t2(transfer, std::ref(acc2), std::ref(acc1), 5);

    t1.join();
    t2.join();
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/dsc lock_guard}}
{{dsc inc | cpp/thread/dsc scoped_lock}}
{{dsc end}}

[[de:cpp/thread/unique lock]]
[[es:cpp/thread/unique lock]]
[[fr:cpp/thread/unique lock]]
[[it:cpp/thread/unique lock]]
[[ja:cpp/thread/unique lock]]
[[pt:cpp/thread/unique lock]]
[[ru:cpp/thread/unique lock]]
[[zh:cpp/thread/unique lock]]</text>
      <sha1>1rx1r0nxdyv67tkf24hzkqurzloiyce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/lock</title>
    <ns>0</ns>
    <id>4483</id>
    <revision>
      <id>79452</id>
      <parentid>79450</parentid>
      <timestamp>2015-07-06T20:01:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>That's usually UB, not a great example</comment>
      <text xml:space="preserve" bytes="2416">{{cpp/thread/unique_lock/title|lock}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
void lock();
}}
{{dcl end}}

Locks the associated mutex. Effectively calls {{c|mutex()-&gt;lock()}}.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;lock()}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the mutex is already locked by this {{tt|unique_lock}} (in other words, {{rlp|owns_lock}} is true), {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example|The following example uses {{tt|lock}} to re-acquire a mutex that was unlocked.
 |p=true
 |code=
#include &lt;mutex&gt;
#include &lt;thread&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;chrono&gt;

int main()
{
    int counter = 0;
    std::mutex counter_mutex;
    std::vector&lt;std::thread&gt; threads;
  
    auto worker_task = [&amp;](int id) {
        std::unique_lock&lt;std::mutex&gt; lock(counter_mutex);
        ++counter;
        std::cout &lt;&lt; id &lt;&lt; &quot;, initial counter: &quot; &lt;&lt; counter &lt;&lt; '\n';
        lock.unlock();

        // don't hold the lock while we simulate an expensive operation
        std::this_thread::sleep_for(std::chrono::seconds(1));

        lock.lock();
        ++counter;
        std::cout &lt;&lt; id &lt;&lt; &quot;, final counter: &quot; &lt;&lt; counter &lt;&lt; '\n';
    };

    for (int i = 0; i &lt; 10; ++i) threads.emplace_back(worker_task, i);

    for (auto &amp;thread : threads) thread.join();
}
 |output=
0, initial counter: 1
1, initial counter: 2
2, initial counter: 3
3, initial counter: 4
4, initial counter: 5
5, initial counter: 6
6, initial counter: 7
7, initial counter: 8
8, initial counter: 9
9, initial counter: 10
6, final counter: 11
3, final counter: 12
4, final counter: 13
2, final counter: 14
5, final counter: 15
0, final counter: 16
1, final counter: 17
7, final counter: 18
9, final counter: 19
8, final counter: 20
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock}}
{{dsc inc | cpp/thread/unique_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/unique lock/lock]]
[[es:cpp/thread/unique lock/lock]]
[[fr:cpp/thread/unique lock/lock]]
[[it:cpp/thread/unique lock/lock]]
[[ja:cpp/thread/unique lock/lock]]
[[pt:cpp/thread/unique lock/lock]]
[[ru:cpp/thread/unique lock/lock]]
[[zh:cpp/thread/unique lock/lock]]</text>
      <sha1>91a4zukyhcje7ib2l3ht0m4c3ebseqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/mutex</title>
    <ns>0</ns>
    <id>4480</id>
    <revision>
      <id>91740</id>
      <parentid>62989</parentid>
      <timestamp>2017-03-31T19:56:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="754">{{cpp/thread/unique_lock/title|mutex}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
mutex_type* mutex() const;
}}
{{dcl end}}

Returns a pointer to the associated mutex, or a null pointer if there is no associated mutex.

===Parameters===
(none)

===Return value===
Pointer to the associated mutex or a null pointer if there is no associated mutex.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|
 |code=
 |output=
}}

[[de:cpp/thread/unique lock/mutex]]
[[es:cpp/thread/unique lock/mutex]]
[[fr:cpp/thread/unique lock/mutex]]
[[it:cpp/thread/unique lock/mutex]]
[[ja:cpp/thread/unique lock/mutex]]
[[pt:cpp/thread/unique lock/mutex]]
[[ru:cpp/thread/unique lock/mutex]]
[[zh:cpp/thread/unique lock/mutex]]</text>
      <sha1>lnqzh9e64saganga7bfv6tal9m1yzzz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/operator bool</title>
    <ns>0</ns>
    <id>4478</id>
    <revision>
      <id>91715</id>
      <parentid>64227</parentid>
      <timestamp>2017-03-31T19:55:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="900">{{cpp/thread/unique_lock/title|operator bool}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
explicit operator bool() const;
}}
{{dcl end}}

Checks whether {{c|*this}} owns a locked mutex or not. Effectively calls {{lc|owns_lock()}}.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} has an associated mutex and has acquired ownership of it, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc owns_lock}}
{{dsc end}}

[[de:cpp/thread/unique lock/operator bool]]
[[es:cpp/thread/unique lock/operator bool]]
[[fr:cpp/thread/unique lock/operator bool]]
[[it:cpp/thread/unique lock/operator bool]]
[[ja:cpp/thread/unique lock/operator bool]]
[[pt:cpp/thread/unique lock/operator bool]]
[[ru:cpp/thread/unique lock/operator bool]]
[[zh:cpp/thread/unique lock/operator bool]]</text>
      <sha1>l6gmh1yvoqtqfz3kvhastyvvmai93w1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/operator=</title>
    <ns>0</ns>
    <id>4487</id>
    <revision>
      <id>91557</id>
      <parentid>68875</parentid>
      <timestamp>2017-03-31T19:49:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="987">{{cpp/thread/unique_lock/title|operator{{=}}}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
unique_lock&amp; operator=( unique_lock&amp;&amp; other );
}}
{{dcl end}}

Move assignment operator. Replaces the contents with those of {{tt|other}} using move semantics. 

If prior to the call {{c|*this}} has an associated mutex and has acquired ownership of it, the mutex is unlocked. 

===Parameters===
{{par begin}}
{{par | other | another {{tt|unique_lock}} to replace the state with}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{rev begin}}
{{rev|until=c++14|{{unreviewed noexcept}}}}
{{rev|since=c++14|Throws nothing}}
{{rev end}}

[[de:cpp/thread/unique lock/operator=]]
[[es:cpp/thread/unique lock/operator=]]
[[fr:cpp/thread/unique lock/operator=]]
[[it:cpp/thread/unique lock/operator=]]
[[ja:cpp/thread/unique lock/operator=]]
[[pt:cpp/thread/unique lock/operator=]]
[[ru:cpp/thread/unique lock/operator=]]
[[zh:cpp/thread/unique lock/operator=]]</text>
      <sha1>41wcqzj3qpafwvto4bwouk4ihps09tf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/owns lock</title>
    <ns>0</ns>
    <id>4479</id>
    <revision>
      <id>91550</id>
      <parentid>62992</parentid>
      <timestamp>2017-03-31T19:49:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="822">{{cpp/thread/unique_lock/title|owns_lock}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
bool owns_lock() const;
}}
{{dcl end}}

Checks whether {{c|*this}} owns a locked mutex or not.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} has an associated mutex and has acquired ownership of it, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc operator_bool}}
{{dsc end}}

[[de:cpp/thread/unique lock/owns lock]]
[[es:cpp/thread/unique lock/owns lock]]
[[fr:cpp/thread/unique lock/owns lock]]
[[it:cpp/thread/unique lock/owns lock]]
[[ja:cpp/thread/unique lock/owns lock]]
[[pt:cpp/thread/unique lock/owns lock]]
[[ru:cpp/thread/unique lock/owns lock]]
[[zh:cpp/thread/unique lock/owns lock]]</text>
      <sha1>crbmx6unwycqtu1qdw6ytbx33bcacio</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/release</title>
    <ns>0</ns>
    <id>4481</id>
    <revision>
      <id>91696</id>
      <parentid>62993</parentid>
      <timestamp>2017-03-31T19:55:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="988">{{cpp/thread/unique_lock/title|release}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
mutex_type* release();
}}
{{dcl end}}

Breaks the association of the associated mutex, if any, and {{c|*this}}. 

No locks are unlocked. If the {{c|*this}} held ownership of the associated mutex prior to the call, the caller is now responsible to unlock the mutex.

===Parameters===
(none)

===Return value===
Pointer to the associated mutex or {{lc|NULL}} if there was no associated mutex.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/unique lock/release]]
[[es:cpp/thread/unique lock/release]]
[[fr:cpp/thread/unique lock/release]]
[[it:cpp/thread/unique lock/release]]
[[ja:cpp/thread/unique lock/release]]
[[pt:cpp/thread/unique lock/release]]
[[ru:cpp/thread/unique lock/release]]
[[zh:cpp/thread/unique lock/release]]</text>
      <sha1>b3jf6ny00hmtbcau2giqggptb1evvay</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/swap</title>
    <ns>0</ns>
    <id>5513</id>
    <revision>
      <id>91772</id>
      <parentid>80239</parentid>
      <timestamp>2017-03-31T19:57:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="766">{{cpp/thread/unique_lock/title|swap}}
{{cpp/thread/unique_lock/navbar}}
{{ddcl | since=c++11 |
void swap( unique_lock&amp; other );
}}

Exchanges the internal states of the lock objects.

===Parameters===
{{par begin}}
{{par | other | the lock to swap the state with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc swap2}}
{{dsc end}}

[[de:cpp/thread/unique lock/swap]]
[[es:cpp/thread/unique lock/swap]]
[[fr:cpp/thread/unique lock/swap]]
[[it:cpp/thread/unique lock/swap]]
[[ja:cpp/thread/unique lock/swap]]
[[pt:cpp/thread/unique lock/swap]]
[[ru:cpp/thread/unique lock/swap]]
[[zh:cpp/thread/unique lock/swap]]</text>
      <sha1>30a4zgi7l1jiuhd1xh594o2pxc01l14</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/swap2</title>
    <ns>0</ns>
    <id>5512</id>
    <revision>
      <id>91837</id>
      <parentid>64860</parentid>
      <timestamp>2017-03-31T19:59:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1002">{{cpp/title | swap&lt;small&gt;(std::unique_lock)&lt;/small&gt;}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class Mutex &gt;
void swap( unique_lock&lt;Mutex&gt;&amp; lhs, 
           unique_lock&lt;Mutex&gt;&amp; rhs );
}}
{{dcl end}}

Specializes the {{lc|std::swap}} algorithm for {{lc|std::unique_lock}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | lock wrappers whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc swap}}
{{dsc end}}

[[de:cpp/thread/unique lock/swap2]]
[[es:cpp/thread/unique lock/swap2]]
[[fr:cpp/thread/unique lock/swap2]]
[[it:cpp/thread/unique lock/swap2]]
[[ja:cpp/thread/unique lock/swap2]]
[[pt:cpp/thread/unique lock/swap2]]
[[ru:cpp/thread/unique lock/swap2]]
[[zh:cpp/thread/unique lock/swap2]]</text>
      <sha1>m5wjewsioqskkm8izldtkgo0sejvy2t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/try lock</title>
    <ns>0</ns>
    <id>4484</id>
    <revision>
      <id>81243</id>
      <parentid>81240</parentid>
      <timestamp>2015-10-08T13:22:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>also mention when underlying try_lock may throw</comment>
      <text xml:space="preserve" bytes="1584">{{cpp/thread/unique_lock/title|try_lock}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
bool try_lock();
}}
{{dcl end}}

Tries to lock the associated mutex without blocking. Effectively calls {{c|mutex()-&gt;try_lock()}}.

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is already locked by this {{tt|std::unique_lock}}.

===Parameters===
(none)

===Return value===
{{c|true}} if the ownership of the mutex has been acquired successfully, {{c|false}} otherwise.

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;try_lock()}} ({{concept|Mutex}} types do not throw in {{tt|try_lock}}, but a custom {{concept|Lockable}} might)

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the mutex is already locked by this {{tt|std::unique_lock}}, {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc lock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_for}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_until}}
{{dsc inc | cpp/thread/unique_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/unique lock/try lock]]
[[es:cpp/thread/unique lock/try lock]]
[[fr:cpp/thread/unique lock/try lock]]
[[it:cpp/thread/unique lock/try lock]]
[[ja:cpp/thread/unique lock/try lock]]
[[pt:cpp/thread/unique lock/try lock]]
[[ru:cpp/thread/unique lock/try lock]]
[[zh:cpp/thread/unique lock/try lock]]</text>
      <sha1>0aasnkni55h47xqimy70dt9kd3d7ki9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/try lock for</title>
    <ns>0</ns>
    <id>4485</id>
    <revision>
      <id>62995</id>
      <parentid>59274</parentid>
      <timestamp>2013-07-01T23:49:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="2005">{{cpp/thread/unique_lock/title|try_lock_for}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt; class Rep, class Period &gt;
bool try_lock_for( const std::chrono::duration&lt;Rep,Period&gt;&amp; timeout_duration );
}}
{{dcl end}}

Tries to lock the associated mutex. Blocks until specified {{tt|timeout_duration}} has elapsed or the lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}. Effectively calls {{c|mutex()-&gt;try_lock_for(timeout_duration)}}.

A steady clock is used to measure the duration. This function may block for longer than {{tt|timeout_duration}} due to scheduling or resource contention delays. 

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is already locked.

===Parameters===
{{par begin}}
{{par | timeout_duration | maximum duration to block for}}
{{par end}}

===Return value===
{{c|true}} if the ownership of the mutex has been acquired successfully, {{c|false}} otherwise.

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;try_lock_for(timeout_duration)}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the mutex is already locked, {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc lock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_until}}
{{dsc inc | cpp/thread/unique_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/unique lock/try lock for]]
[[es:cpp/thread/unique lock/try lock for]]
[[fr:cpp/thread/unique lock/try lock for]]
[[it:cpp/thread/unique lock/try lock for]]
[[ja:cpp/thread/unique lock/try lock for]]
[[pt:cpp/thread/unique lock/try lock for]]
[[ru:cpp/thread/unique lock/try lock for]]
[[zh:cpp/thread/unique lock/try lock for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/try lock until</title>
    <ns>0</ns>
    <id>4486</id>
    <revision>
      <id>62996</id>
      <parentid>59277</parentid>
      <timestamp>2013-07-01T23:49:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1931">{{cpp/thread/unique_lock/title|try_lock_until}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt; class Clock, class Duration &gt;
bool try_lock_until( const std::chrono::time_point&lt;Clock,Duration&gt;&amp; timeout_time );
}}
{{dcl end}}

Tries to lock the associated mutex. Blocks until specified {{tt|timeout_time}} has been reached or the lock is acquired, whichever comes first. On successful lock acquisition returns {{c|true}}, otherwise returns {{c|false}}. May block for longer than until {{tt|timeout_time}} has been reached.

Effectively calls {{c|mutex()-&gt;try_lock_until(timeout_time)}}

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is already locked.

===Parameters===
{{par begin}}
{{par | timeout_time | maximum time point to block until}}
{{par end}}

===Return value===
{{c|true}} if the ownership of the mutex has been acquired successfully, {{c|false}} otherwise.

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;try_lock_for(timeout_time)}}

* If there is no associated mutex, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

* If the mutex is already locked, {{lc|std::system_error}} with an error code of {{lc|std::errc::resource_deadlock_would_occur}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc lock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock}}
{{dsc inc | cpp/thread/unique_lock/dsc try_lock_for}}
{{dsc inc | cpp/thread/unique_lock/dsc unlock}}
{{dsc end}}

[[de:cpp/thread/unique lock/try lock until]]
[[es:cpp/thread/unique lock/try lock until]]
[[fr:cpp/thread/unique lock/try lock until]]
[[it:cpp/thread/unique lock/try lock until]]
[[ja:cpp/thread/unique lock/try lock until]]
[[pt:cpp/thread/unique lock/try lock until]]
[[ru:cpp/thread/unique lock/try lock until]]
[[zh:cpp/thread/unique lock/try lock until]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/unique lock</title>
    <ns>0</ns>
    <id>4475</id>
    <revision>
      <id>91730</id>
      <parentid>65438</parentid>
      <timestamp>2017-03-31T19:56:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="5461">{{cpp/thread/unique_lock/title|unique_lock}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
unique_lock();
}}
{{dcl | num=2 | since=c++11 | 1=
unique_lock( unique_lock&amp;&amp; other );
}}
{{dcl | num=3 | since=c++11 | 1=
explicit unique_lock( mutex_type&amp; m );
}}
{{dcl | num=4 | since=c++11 | 1=
unique_lock( mutex_type&amp; m, std::defer_lock_t t );
}}
{{dcl | num=5 | since=c++11 | 1=
unique_lock( mutex_type&amp; m, std::try_to_lock_t t );
}}
{{dcl | num=6 | since=c++11 | 1=
unique_lock( mutex_type&amp; m, std::adopt_lock_t t );
}}
{{dcl | num=7 | since=c++11 | 1=
template&lt; class Rep, class Period &gt;
unique_lock( mutex_type&amp; m, 
             const std::chrono::duration&lt;Rep,Period&gt;&amp; timeout_duration );
}}
{{dcl | num=8 | since=c++11 | 1=
template&lt; class Clock, class Duration &gt;
unique_lock( mutex_type&amp; m, 
             const std::chrono::time_point&lt;Clock,Duration&gt;&amp; timeout_time );
}}
{{dcl end}}

Constructs a {{tt|unique_lock}}, optionally locking the supplied mutex.

@1@ Constructs a {{tt|unique_lock}} with no associated mutex.
@2@ Move constructor. Initializes the {{tt|unique_lock}} with the contents of {{tt|other}}. Leaves {{tt|other}} with no associated mutex.
@3-8@ Constructs a {{tt|unique_lock}} with {{tt|m}} as the associated mutex. Additionally:
:@3@ Locks the associated mutex by calling {{c|m.lock()}}. The behavior is undefined if the current thread already owns the mutex except when the mutex is recursive.
:@4@ Does not lock the associated mutex.
:@5@ Tries to lock the associated mutex without blocking by calling {{c|m.try_lock()}}. The behavior is undefined if the current thread already owns the mutex except when the mutex is recursive.
:@6@ Assumes the calling thread already owns {{tt|m}}.
:@7@ Tries to lock the associated mutex by calling {{c|m.try_lock_for(timeout_duration)}}. Blocks until specified {{tt|timeout_duration}} has elapsed or the lock is acquired, whichever comes first. May block for longer than {{tt|timeout_duration}}.
:@8@ Tries to lock the associated mutex by calling {{c|m.try_lock_until(timeout_time)}}. Blocks until specified {{tt|timeout_time}} has been reached or the lock is acquired, whichever comes first. May block for longer than until {{tt|timeout_time}} has been reached.

===Parameters===
{{par begin}}
{{par | other | another {{tt|unique_lock}} to initialize the state with}}
{{par | m | mutex to associate with the lock and optionally acquire ownership of}}
{{par | t | tag parameter used to select constructors with different locking strategies}}
{{par | timeout_duration | maximum duration to block for}}
{{par | timeout_time | maximum time point to block until}}
{{par end}}

===Exceptions===
1, 2, 4) {{unreviewed noexcept}}

===Example===
{{example|
 | code=
#include &lt;cassert&gt;
#include &lt;iostream&gt; // std::cout
#include &lt;thread&gt;
#include &lt;vector&gt;
#include &lt;mutex&gt;

class Number;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; stream, const Number&amp; number);

class Number {
 public:
  Number() : v_(1) {}

  // thread-safe update of 'a' and 'b'
  static void update(Number&amp; a, Number&amp; b, bool order) {
    // do not lock 'mutex_' of 'a' and 'b' sequentially,
    // two sequential lock may lead to deadlock,
    // that's why 'std::lock' exists (see below)
    GuardLock lock_a(a.mutex_, std::defer_lock);
    GuardLock lock_b(b.mutex_, std::defer_lock);

    // mutexes is not locked
    assert(!lock_a.owns_lock());
    assert(!lock_b.owns_lock());

    // unspecified series of calls...
    std::lock(lock_a, lock_b);

    // Result: 'a.mutex_' and 'b.mutex_' is in locked state
    // 'a' and 'b' can be modified safety
    assert(lock_a.owns_lock());
    assert(lock_b.owns_lock());

    if (order) {
      a.v_ += b.v_;
      b.v_ += a.v_;

      std::cout &lt;&lt; a &lt;&lt; b;
    }
    else {
      b.v_ += a.v_;
      a.v_ += b.v_;

      std::cout &lt;&lt; b &lt;&lt; a;
    }

    // 'lock_a' and 'lock_b' will be destroyed,
    // unlocking 'a.mutex_' and 'b.mutex_'
  }

  // not thread-safe; used before thread creation or in thread-safe 'update'
  std::ostream&amp; print(std::ostream&amp; stream) const {
    stream &lt;&lt; v_ &lt;&lt; &quot; &quot;;
    return stream;
  }

 private:
  using Mutex = std::mutex;
  using GuardLock = std::unique_lock&lt;Mutex&gt;;

  Mutex mutex_;
  int v_;
};

// not thread-safe; see 'Number::print'
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; stream, const Number&amp; number) {
  return number.print(stream);
}

int main() {
  Number a, b;
  std::cout &lt;&lt; a &lt;&lt; b;

  std::vector&lt;std::thread&gt; threads;

  for (unsigned i = 0; i &lt; 4; ++i) {
    // without 'std::lock' deadlock may occur in this situation:
    //   thread #1 lock 'a.mutex_'
    //   thread #2 lock 'b.mutex_'
    //   thread #1 try to lock 'b.mutex_' and blocked (it's locked by #2)
    //   thread #2 try to lock 'a.mutex_' and blocked (it's locked by #1)
    //   ... deadlock
    threads.emplace_back(Number::update, std::ref(a), std::ref(b), true); // #1
    threads.emplace_back(Number::update, std::ref(b), std::ref(a), false); // #2
  }

  for (auto&amp; i: threads) {
    i.join();
  }

  std::cout &lt;&lt; '\n';
}

 | output=
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584  
}}

[[de:cpp/thread/unique lock/unique lock]]
[[es:cpp/thread/unique lock/unique lock]]
[[fr:cpp/thread/unique lock/unique lock]]
[[it:cpp/thread/unique lock/unique lock]]
[[ja:cpp/thread/unique lock/unique lock]]
[[pt:cpp/thread/unique lock/unique lock]]
[[ru:cpp/thread/unique lock/unique lock]]
[[zh:cpp/thread/unique lock/unique lock]]</text>
      <sha1>qjw9kixobe034gwidr04ufaij5smqwr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/unlock</title>
    <ns>0</ns>
    <id>4482</id>
    <revision>
      <id>66986</id>
      <parentid>65448</parentid>
      <timestamp>2014-01-15T12:52:43Z</timestamp>
      <contributor>
        <username>Zkostrzewa</username>
        <id>2791</id>
      </contributor>
      <text xml:space="preserve" bytes="1049">{{cpp/thread/unique_lock/title|unlock}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
void unlock();
}}
{{dcl end}}

Unlocks the associated mutex and releases ownership.

{{lc|std::system_error}} is thrown if there is no associated mutex or if the mutex is not locked.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
* Any exceptions thrown by {{c|mutex()-&gt;unlock()}}

* If there is no associated mutex or the mutex is not locked, {{lc|std::system_error}} with an error code of {{lc|std::errc::operation_not_permitted}}

===Example===
{{example|
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/thread/unique_lock/dsc lock}}
{{dsc inc | cpp/thread/unique_lock/dsc release}}
{{dsc end}}

[[de:cpp/thread/unique lock/unlock]]
[[es:cpp/thread/unique lock/unlock]]
[[fr:cpp/thread/unique lock/unlock]]
[[it:cpp/thread/unique lock/unlock]]
[[ja:cpp/thread/unique lock/unlock]]
[[pt:cpp/thread/unique lock/unlock]]
[[ru:cpp/thread/unique lock/unlock]]
[[zh:cpp/thread/unique lock/unlock]]</text>
      <sha1>r1v7hkspms7s3js8bmz86mpuu69c6gj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/unique lock/~unique lock</title>
    <ns>0</ns>
    <id>4477</id>
    <revision>
      <id>62999</id>
      <parentid>51470</parentid>
      <timestamp>2013-07-01T23:49:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="610">{{cpp/thread/unique_lock/title|~unique_lock}}
{{cpp/thread/unique_lock/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
~unique_lock();
}}
{{dcl end}}

Destroys the lock. If {{c|*this}} has an associated mutex and has acquired ownership of it, the mutex is unlocked.

[[de:cpp/thread/unique lock/~unique lock]]
[[es:cpp/thread/unique lock/~unique lock]]
[[fr:cpp/thread/unique lock/~unique lock]]
[[it:cpp/thread/unique lock/~unique lock]]
[[ja:cpp/thread/unique lock/~unique lock]]
[[pt:cpp/thread/unique lock/~unique lock]]
[[ru:cpp/thread/unique lock/~unique lock]]
[[zh:cpp/thread/unique lock/~unique lock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/thread/yield</title>
    <ns>0</ns>
    <id>2297</id>
    <revision>
      <id>91582</id>
      <parentid>90291</parentid>
      <timestamp>2017-03-31T19:50:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1878">{{cpp/title|n=this_thread::|yield}}
{{cpp/thread/navbar}}
{{ddcl | header=thread | since=c++11 | 1=
void yield();
}}

Provides a hint to the implementation to reschedule the execution of threads, allowing other threads to run. 

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The exact behavior of this function depends on the implementation, in particular on the mechanics of the OS scheduler in use and the state of the system. For example, a first-in-first-out realtime scheduler ({{tt|SCHED_FIFO}} in Linux) would suspend the current thread and put it on the back of the queue of the same-priority threads that are ready to run (and if there are no other threads at the same priority, {{tt|yield}} has no effect).

===Example===
{{example |
 | p=true
 | code=
#include &lt;iostream&gt;
#include &lt;chrono&gt;
#include &lt;thread&gt;

// &quot;busy sleep&quot; while suggesting that other threads run 
// for a small amount of time
void little_sleep(std::chrono::microseconds us)
{
    auto start = std::chrono::high_resolution_clock::now();
    auto end = start + us;
    do {
        std::this_thread::yield();
    } while (std::chrono::high_resolution_clock::now() &lt; end);
}

int main()
{
    auto start = std::chrono::high_resolution_clock::now();

    little_sleep(std::chrono::microseconds(100));

    auto elapsed = std::chrono::high_resolution_clock::now() - start;
    std::cout &lt;&lt; &quot;waited for &quot;
              &lt;&lt; std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(elapsed).count()
              &lt;&lt; &quot; microseconds\n&quot;;
}
 | output=
waited for 128 microseconds
}}

===See also===
{{dsc begin}}
{{dsc see c | c/thread/thrd_yield}}
{{dsc end}}

[[de:cpp/thread/yield]]
[[es:cpp/thread/yield]]
[[fr:cpp/thread/yield]]
[[it:cpp/thread/yield]]
[[ja:cpp/thread/yield]]
[[pt:cpp/thread/yield]]
[[ru:cpp/thread/yield]]
[[zh:cpp/thread/yield]]</text>
      <sha1>8um5e0az2kj5ovmnm2vbirnmmub6lz4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types</title>
    <ns>0</ns>
    <id>1788</id>
    <revision>
      <id>90849</id>
      <parentid>90794</parentid>
      <timestamp>2017-03-14T01:12:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Type properties */ invocable</comment>
      <text xml:space="preserve" bytes="6868">{{title|Type support (basic types, RTTI, type traits)}}
{{cpp/types/navbar}}

&lt;small&gt;(See also {{ltt|cpp/language/type}} for type system overview)&lt;/small&gt;
===Basic types===

====[[cpp/language/types | Fundamental types defined by the language]]====

====Additional basic types and macros====
{{dsc begin}}
{{dsc header | cstddef}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc inc | cpp/types/dsc ptrdiff_t}}
{{dsc inc | cpp/types/dsc nullptr_t}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc inc | cpp/types/dsc max_align_t}}
{{dsc inc | cpp/types/dsc offsetof}}
{{dsc inc | cpp/types/dsc byte}}
{{dsc header | cstdbool}}
{{dsc macro const | __bool_true_false_are_defined | nolink=true | C compatibility macro constant, expands to integer constant {{c|1}}|notes={{mark c++11}}}}
{{dsc header | cstdalign}}
{{dsc macro const | __alignas_is_defined | nolink=true | C compatibility macro constant, expands to integer constant {{c|1}}|notes={{mark c++11}}}}
{{dsc end}}

====[[cpp/types/integer | Fixed width integer types]] {{mark since c++11}}====

===Numeric limits===

{{dsc begin}}
{{dsc header | limits}}
{{dsc inc | cpp/types/dsc numeric_limits}}
{{dsc end}}

====[[cpp/types/climits|C numeric limits interface]]====

===Runtime type identification===

{{dsc begin}}
{{dsc header | typeinfo}}
{{dsc inc | cpp/types/dsc type_info}}
{{dsc inc | cpp/types/dsc bad_typeid}}
{{dsc inc | cpp/types/dsc bad_cast}}
{{dsc header | typeindex}}
{{dsc inc | cpp/types/dsc type_index}}
{{dsc end}}

===Type traits {{mark since c++11}}===

Type traits defines a compile-time template-based interface to query or modify the properties of types.

Attempting to specialize a template defined in the {{tt|&lt;type_traits&gt;}} header results in undefined behavior, except that {{lc|std::common_type}} may be specialized [[cpp/types/common_type#Specializations|as described in its description]].

A template defined in the {{tt|&lt;type_traits&gt;}} header may be instantiated with an incomplete type unless otherwise specified, notwithstanding the general prohibition against instantiating standard library templates with incomplete types.

====Type properties====

{{dsc begin}}
{{dsc header | type_traits}}
{{dsc h2 | Primary type categories}}
{{dsc inc | cpp/types/dsc is_void}}
{{dsc inc | cpp/types/dsc is_null_pointer}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc inc | cpp/types/dsc is_floating_point}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc is_enum}}
{{dsc inc | cpp/types/dsc is_union}}
{{dsc inc | cpp/types/dsc is_class}}
{{dsc inc | cpp/types/dsc is_function}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_lvalue_reference}}
{{dsc inc | cpp/types/dsc is_rvalue_reference}}
{{dsc inc | cpp/types/dsc is_member_object_pointer}}
{{dsc inc | cpp/types/dsc is_member_function_pointer}}

{{dsc h2 | Composite type categories}}
{{dsc inc | cpp/types/dsc is_fundamental}}
{{dsc inc | cpp/types/dsc is_arithmetic}}
{{dsc inc | cpp/types/dsc is_scalar}}
{{dsc inc | cpp/types/dsc is_object}}
{{dsc inc | cpp/types/dsc is_compound}}
{{dsc inc | cpp/types/dsc is_reference}}
{{dsc inc | cpp/types/dsc is_member_pointer}}

{{dsc h2 | Type properties}}
{{dsc inc | cpp/types/dsc is_const}}
{{dsc inc | cpp/types/dsc is_volatile}}
{{dsc inc | cpp/types/dsc is_trivial}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}
{{dsc inc | cpp/types/dsc is_standard_layout}}
{{dsc inc | cpp/types/dsc is_pod}}
{{dsc inc | cpp/types/dsc is_literal_type}}
{{dsc inc | cpp/types/dsc has_unique_object_representations}}
{{dsc inc | cpp/types/dsc is_empty}}
{{dsc inc | cpp/types/dsc is_polymorphic}}
{{dsc inc | cpp/types/dsc is_abstract}}
{{dsc inc | cpp/types/dsc is_final}}
{{dsc inc | cpp/types/dsc is_aggregate}}
{{dsc inc | cpp/types/dsc is_signed}}
{{dsc inc | cpp/types/dsc is_unsigned}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Supported operations}}
{{dsc inc | cpp/types/dsc is_constructible}}
{{dsc inc | cpp/types/dsc is_default_constructible}}
{{dsc inc | cpp/types/dsc is_copy_constructible}}
{{dsc inc | cpp/types/dsc is_move_constructible}}
{{dsc inc | cpp/types/dsc is_assignable}}
{{dsc inc | cpp/types/dsc is_copy_assignable}}
{{dsc inc | cpp/types/dsc is_move_assignable}}
{{dsc inc | cpp/types/dsc is_destructible}}
{{dsc inc | cpp/types/dsc has_virtual_destructor}}
{{dsc inc | cpp/types/dsc is_swappable}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Property queries}}
{{dsc inc | cpp/types/dsc alignment_of}}
{{dsc inc | cpp/types/dsc rank}}
{{dsc inc | cpp/types/dsc extent}}
{{dsc end}}

{{dsc begin}}
{{dsc h2 | Type relationships}}
{{dsc inc | cpp/types/dsc is_same}}
{{dsc inc | cpp/types/dsc is_base_of}}
{{dsc inc | cpp/types/dsc is_convertible}}
{{dsc inc | cpp/types/dsc is_invocable}}
{{dsc end}}

====Type modifications====

Type modification templates create new type definitions by applying modifications on a template parameter. The resulting type can then be accessed through {{tt|type}} member typedef.

{{dsc begin}}
{{dsc header | type_traits}}
{{dsc h2 | Const-volatility specifiers}}
{{dsc inc | cpp/types/dsc remove_cv}}
{{dsc inc | cpp/types/dsc add_cv}}

{{dsc h2 | References}}
{{dsc inc | cpp/types/dsc remove_reference}}
{{dsc inc | cpp/types/dsc add_reference}}

{{dsc h2 | Pointers}}
{{dsc inc | cpp/types/dsc remove_pointer}}
{{dsc inc | cpp/types/dsc add_pointer}}

{{dsc h2 | Sign modifiers}}
{{dsc inc | cpp/types/dsc make_signed}}
{{dsc inc | cpp/types/dsc make_unsigned}}

{{dsc h2 | Arrays}}
{{dsc inc | cpp/types/dsc remove_extent}}
{{dsc inc | cpp/types/dsc remove_all_extents}}
{{dsc end}}

====Miscellaneous transformations====

{{dsc begin}}
{{dsc header | type_traits}}
{{dsc inc | cpp/types/dsc aligned_storage}}
{{dsc inc | cpp/types/dsc aligned_union}}
{{dsc inc | cpp/types/dsc decay}}
{{dsc inc | cpp/types/dsc enable_if}}
{{dsc inc | cpp/types/dsc conditional}}
{{dsc inc | cpp/types/dsc common_type}}
{{dsc inc | cpp/types/dsc underlying_type}}
{{dsc inc | cpp/types/dsc result_of}}
{{dsc inc | cpp/types/dsc void_t}}
{{dsc end}}

====Operations on traits====
{{dsc begin}}
{{dsc header | type_traits}}
{{dsc inc | cpp/types/dsc conjunction}}
{{dsc inc | cpp/types/dsc disjunction}}
{{dsc inc | cpp/types/dsc negation}}
{{dsc end}}

====Helper classes====

{{dsc begin}}
{{dsc header | type_traits}}
{{dsc inc | cpp/types/dsc integral_constant}}
{{dsc end}}

Two specializations of {{lc|std::integral_constant}} for the type {{c|bool}} are provided: 

{{dsc begin}}
{{dsc header | type_traits}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|true_type}} | {{c|std::integral_constant&lt;bool, true&gt;}}}}
{{dsc | {{tt|false_type}} | {{c|std::integral_constant&lt;bool, false&gt;}}}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/types | Type support library}}
{{dsc end}}

[[de:cpp/types]]
[[es:cpp/types]]
[[fr:cpp/types]]
[[it:cpp/types]]
[[ja:cpp/types]]
[[pt:cpp/types]]
[[ru:cpp/types]]
[[zh:cpp/types]]</text>
      <sha1>sb73rpkrdx6vrm41jqe9vjry4o4kz6q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/NULL</title>
    <ns>0</ns>
    <id>2772</id>
    <revision>
      <id>82696</id>
      <parentid>82431</parentid>
      <timestamp>2015-12-29T22:10:29Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>retag DR 903; clang implements it in c++11 and gcc has a bug report to do so (see http://stackoverflow.com/a/34517233 )</comment>
      <text xml:space="preserve" bytes="2358">{{title|NULL}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | cstddef}}
{{dcl header | cstring}}
{{dcl header | cwchar}}
{{dcl header | ctime}}
{{dcl header | cstdio}}
{{dcl header | clocale}}&lt;!--Missing in C++03's table 62, but &quot;The contents are the same as the Standard C library header locale.h and C89 defines NULL in locale.h ($4.4)--&gt;
{{dcl header | cstdlib}}&lt;!--Missing in all revisions of Table 33 (which is only &quot;partial&quot; (C++03)/&quot;describes some of the contents&quot; (C++11)), but &quot;The contents are the same as the Standard C library header stdlib.h&quot; and also listed in C++11's Table 149 and C.5.2.4[diff.null]/1) --&gt;
{{dcl |
#define NULL /*implementation-defined*/
}}
{{dcl end}}

The macro {{tt|NULL}} is an implementation-defined null pointer constant, which may be
{{rev begin}}
{{rev|until=c++11|
an integral [[cpp/language/constant_expression|constant expression]] [[cpp/language/value_category|rvalue]] of integer type that evaluates to zero
}}
{{rev|since=c++11|
an [[cpp/language/integer literal|integer literal]] with value zero, or a prvalue of type {{lc|std::nullptr_t}}
}}
{{rev end}}
A null pointer constant may be [[cpp/language/implicit_cast|implicitly converted]] to any pointer type; such conversion results in the null pointer value of that type. If a null pointer constant has integer type, it may be converted to a prvalue of type {{lc|std::nullptr_t}}.

===Possible implementation===
{{eq fun
 | 1=
#define NULL 0
//since C++11
#define NULL nullptr
}}

===Notes===
In C, the macro {{tt|NULL}} may have the type {{tt|void*}}, but that is not allowed in C++.

===Example===
{{example
 |
 | code=
#include &lt;cstddef&gt;
class S;
int main()
{
    int* p = NULL;
    int* p2 = static_cast&lt;std::nullptr_t&gt;(NULL);
    void(*f)(int) = NULL;
    int S::*mp = NULL;
    void(S::*mfp)(int) = NULL;
}
 | output=
}}

===Defect reports===
{{dr list begin}}
{{dr list item|wg=cwg|dr=903|std=C++11|before=constant expressions with zero value such as 1-1 were allowed|after=only the literal zero is allowed}}
{{dr list end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc nullptr}}
{{dsc inc | cpp/types/dsc nullptr_t}}
{{dsc see c | c/types/NULL}}
{{dsc end}}

[[de:cpp/types/NULL]]
[[es:cpp/types/NULL]]
[[fr:cpp/types/NULL]]
[[it:cpp/types/NULL]]
[[ja:cpp/types/NULL]]
[[pt:cpp/types/NULL]]
[[ru:cpp/types/NULL]]
[[zh:cpp/types/NULL]]</text>
      <sha1>lp6bro553b1wo8jqh2j5en6oo7q4evv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/add const</title>
    <ns>0</ns>
    <id>4242</id>
    <redirect title="cpp/types/add cv" />
    <revision>
      <id>15341</id>
      <timestamp>2011-12-08T15:35:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/add cv]]</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/types/add_cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/add cv</title>
    <ns>0</ns>
    <id>3281</id>
    <revision>
      <id>91220</id>
      <parentid>91219</parentid>
      <timestamp>2017-03-28T10:34:32Z</timestamp>
      <contributor>
        <ip>113.88.82.244</ip>
      </contributor>
      <text xml:space="preserve" bytes="2091">{{cpp/title|add_cv|add_const|add_volatile}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct add_cv;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct add_const;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct add_volatile;
}}
{{dcl end}}

Provides the member typedef {{tt|type}} which is the same as {{tt|T}}, except it has a cv-qualifier added (unless {{tt|T}} is a function, a reference, or already has this cv-qualifier)

1) adds both {{c|const}} and {{c|volatile}}

2) adds {{c|const}}

3) adds {{c|volatile}}

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the type {{tt|T}} with the cv-qualifier }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using add_cv_t       = typename add_cv&lt;T&gt;::type;
}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using add_const_t    = typename add_const&lt;T&gt;::type;
}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using add_volatile_t = typename add_volatile&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct add_cv { typedef const volatile T type; };

template&lt; class T&gt; struct add_const { typedef const T type; };

template&lt; class T&gt; struct add_volatile { typedef volatile T type; };
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct foo
{
    void m() { std::cout &lt;&lt; &quot;Non-cv\n&quot;; }
    void m() const { std::cout &lt;&lt; &quot;Const\n&quot;; }
};

template &lt;class T&gt;
void call_m()
{
    T().m();
}

int main()
{
    call_m&lt;foo&gt;();
    call_m&lt;std::add_const&lt;foo&gt;::type&gt;();
}

 | output=
Non-cv
Const
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_const}}
{{dsc inc | cpp/types/dsc is_volatile}}
{{dsc inc | cpp/types/dsc remove_cv}}
{{dsc inc | cpp/utility/dsc as_const}}
{{dsc end}}

[[de:cpp/types/add cv]]
[[es:cpp/types/add cv]]
[[fr:cpp/types/add cv]]
[[it:cpp/types/add cv]]
[[ja:cpp/types/add cv]]
[[pt:cpp/types/add cv]]
[[ru:cpp/types/add cv]]
[[zh:cpp/types/add cv]]</text>
      <sha1>hchzuhuddzo27pbsn8h0j3e0jpp4tw5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/add lvalue reference</title>
    <ns>0</ns>
    <id>4243</id>
    <redirect title="cpp/types/add reference" />
    <revision>
      <id>15342</id>
      <timestamp>2011-12-08T15:36:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/add reference]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/types/add_reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/add pointer</title>
    <ns>0</ns>
    <id>3285</id>
    <revision>
      <id>86530</id>
      <parentid>81595</parentid>
      <timestamp>2016-07-06T10:21:46Z</timestamp>
      <contributor>
        <username>Alex</username>
        <id>1705</id>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2951">{{cpp/title|add_pointer}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct add_pointer;
}}
{{dcl end}}

If {{tt|T}} is a reference type, then provides the member typedef {{tt|type}} which is a pointer to the referred type.

Otherwise, if T names an object type, a function type {{rev inl|since=c++17|that is not cv- or ref-qualified}}, or a (possibly cv-qualified) void type, provides the member typedef {{tt|type}} which is the type {{tt|T*}}. 
{{rev begin}}
{{rev|since=c++17|
Otherwise (if T is a cv- or ref-qualified function type), provides the member typedef {{tt|type}} which is the type {{tt|T}}
}}{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | pointer to {{tt|T}} or to the type referenced by {{tt|T}}}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using add_pointer_t = typename add_pointer&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
namespace detail {
template&lt; class T, bool is_function_type = false &gt;
struct add_pointer {
    using type = typename std::remove_reference&lt;T&gt;::type*;
};
 
template&lt; class T &gt;
struct add_pointer&lt;T, true&gt; {
    using type = T;
};
    
template&lt; class T, class... Args &gt;
struct add_pointer&lt;T(Args...), true&gt; {
    using type = T(*)(Args...);
};
 
template&lt; class T, class... Args &gt;
struct add_pointer&lt;T(Args..., ...), true&gt; {
    using type = T(*)(Args..., ...);
};
 
} // namespace detail
 
template&lt; class T &gt;
struct add_pointer : detail::add_pointer&lt;T, std::is_function&lt;T&gt;::value&gt; {};
}}

===Example===
{{example
 |
 | lang=cpp
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main()
{
    int i = 123;
    int&amp; ri = i;
    typedef std::add_pointer&lt;decltype(i)&gt;::type IntPtr;
    typedef std::add_pointer&lt;decltype(ri)&gt;::type IntPtr2;
    IntPtr pi = &amp;i;
    std::cout &lt;&lt; &quot;i = &quot; &lt;&lt; i &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; &quot;*pi = &quot; &lt;&lt; *pi &lt;&lt; &quot;\n&quot;;
    
    static_assert(std::is_pointer&lt;IntPtr&gt;::value, &quot;IntPtr should be a pointer&quot;);
    static_assert(std::is_same&lt;IntPtr, int*&gt;::value, &quot;IntPtr should be a pointer to int&quot;);
    static_assert(std::is_same&lt;IntPtr2, IntPtr&gt;::value, &quot;IntPtr2 should be equal to IntPtr&quot;);
    
    typedef std::remove_pointer&lt;IntPtr&gt;::type IntAgain;
    IntAgain j = i;
    std::cout &lt;&lt; &quot;j = &quot; &lt;&lt; j &lt;&lt; &quot;\n&quot;;

    static_assert(!std::is_pointer&lt;IntAgain&gt;::value, &quot;IntAgain should not be a pointer&quot;);
    static_assert(std::is_same&lt;IntAgain, int&gt;::value, &quot;IntAgain should be equal to int&quot;);
}
 | output=
i = 123
*pi = 123
j = 123
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc remove_pointer}}
{{dsc end}}

[[de:cpp/types/add pointer]]
[[es:cpp/types/add pointer]]
[[fr:cpp/types/add pointer]]
[[it:cpp/types/add pointer]]
[[ja:cpp/types/add pointer]]
[[pt:cpp/types/add pointer]]
[[ru:cpp/types/add pointer]]
[[zh:cpp/types/add pointer]]</text>
      <sha1>4pl2mlmp5oh7va0uo73n6plggmo3xyi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/add reference</title>
    <ns>0</ns>
    <id>3287</id>
    <revision>
      <id>81500</id>
      <parentid>63002</parentid>
      <timestamp>2015-10-27T15:08:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>LWG 2101 no references to cv/ref-qualified functions</comment>
      <text xml:space="preserve" bytes="2413">{{cpp/title|add_lvalue_reference|add_rvalue_reference}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1| 1=
template&lt; class T &gt;
struct add_lvalue_reference;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct add_rvalue_reference;
}}
{{dcl end}}

Creates a lvalue or rvalue reference type of {{tt|T}}.

@1@ If {{tt|T}} is an object or function {{rev inl|since=c++17|that isn't cv- or ref- qualified}}, provides a member typedef {{tt|type}} which is {{tt|T&amp;}}. If {{tt|T}} is an rvalue reference to some type {{tt|U}}, then {{tt|type}} is {{tt|U&amp;}}. Otherwise, {{tt|type}} is {{tt|T}}.

@2@ If {{tt|T}} is an object or function {{rev inl|since=c++17|that isn't cv- or ref- qualified}}, provides a member typedef {{tt|type}} which is {{tt|T&amp;&amp;}}, otherwise {{tt|type}} is {{tt|T}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | reference to {{tt|T}}, or {{tt|T}} if not allowed}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using add_lvalue_reference_t = typename add_lvalue_reference&lt;T&gt;::type;
}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using add_rvalue_reference_t = typename add_rvalue_reference&lt;T&gt;::type;
}}
{{dcl end}}

===Notes===
These type transformations honor reference collapse rules:

{{c|1=
std::add_lvalue_reference&lt;T&amp;&gt;::type is T&amp;
std::add_lvalue_reference&lt;T&amp;&amp;&gt;::type is T&amp;
std::add_rvalue_reference&lt;T&amp;&gt;::type is T&amp;
std::add_rvalue_reference&lt;T&amp;&amp;&gt;::type is T&amp;&amp;
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
   using nonref = int;
   using lref = typename std::add_lvalue_reference&lt;nonref&gt;::type;
   using rref = typename std::add_rvalue_reference&lt;nonref&gt;::type;
      
   std::cout &lt;&lt; std::boolalpha;
   std::cout &lt;&lt; std::is_lvalue_reference&lt;nonref&gt;::value &lt;&lt; '\n';
   std::cout &lt;&lt; std::is_lvalue_reference&lt;lref&gt;::value &lt;&lt; '\n';
   std::cout &lt;&lt; std::is_rvalue_reference&lt;rref&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_reference}}
{{dsc inc | cpp/types/dsc remove_reference}}
{{dsc end}}

[[de:cpp/types/add reference]]
[[es:cpp/types/add reference]]
[[fr:cpp/types/add reference]]
[[it:cpp/types/add reference]]
[[ja:cpp/types/add reference]]
[[pt:cpp/types/add reference]]
[[ru:cpp/types/add reference]]
[[zh:cpp/types/add reference]]</text>
      <sha1>gm31rpvv90uoyatlwkzdk4n76iz6949</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/add rvalue reference</title>
    <ns>0</ns>
    <id>4244</id>
    <redirect title="cpp/types/add reference" />
    <revision>
      <id>15343</id>
      <timestamp>2011-12-08T15:36:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/add reference]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/types/add_reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/add volatile</title>
    <ns>0</ns>
    <id>4241</id>
    <redirect title="cpp/types/add cv" />
    <revision>
      <id>15340</id>
      <timestamp>2011-12-08T15:35:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/add cv]]</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/types/add_cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/aligned storage</title>
    <ns>0</ns>
    <id>3190</id>
    <revision>
      <id>91151</id>
      <parentid>81781</parentid>
      <timestamp>2017-03-23T04:23:42Z</timestamp>
      <contributor>
        <ip>74.85.81.108</ip>
      </contributor>
      <comment>can't destroy through constant reference</comment>
      <text xml:space="preserve" bytes="3702">{{cpp/title|aligned_storage}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; std::size_t Len, std::size_t Align = /*default-alignment*/ &gt;
struct aligned_storage;
}}
{{dcl end}}

Provides the member typedef {{tt|type}}, which is a {{concept|PODType}} suitable for use as uninitialized storage for any object whose size is at most {{tt|Len}} and whose [[cpp/language/object#Alignment|alignment requirement]] is a divisor of {{tt|Align}}. 

The default value of {{tt|Align}} is the most stringent (the largest) alignment requirement for any object whose size is at most {{tt|Len}}. If the default value is not used, {{tt|Align}} must be the value of {{c|alignof(T)}} for some type {{tt|T}}, or the behavior is undefined.

The behavior is undefined if {{c|1=Len == 0}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the POD type of at least size {{tt|Len}} with alignment requirement {{tt|Align}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; std::size_t Len, std::size_t Align = /*default-alignment*/ &gt;
using aligned_storage_t = typename aligned_storage&lt;Len, Align&gt;::type;
}}
{{dcl end}}

===Notes===
The type defined by {{tt|std::aligned_storage&lt;&gt;::type}} can be used to create uninitialized memory blocks suitable to hold the objects of given type, optionally aligned stricter than their natural alignment requirement, for example on a cache or page boundary.

As with any other uninitialized storage, the objects are created using [[cpp/language/new|placement new]] and destroyed with explicit destructor calls.

===Possible implementation===
Except for default argument, aligned_storage is expressible in terms of alignas:
{{eq fun
 | 1=
template&lt;std::size_t Len, std::size_t Align /* default alignment not implemented */&gt;
struct aligned_storage {
    typedef struct {
        alignas(Align) unsigned char data[Len];
    } type;
};
}}

===Example===
{{example
 | A primitive static vector class, demonstrating creation, access, and destruction of objects in aligned storage
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;string&gt;

template&lt;class T, std::size_t N&gt;
class static_vector
{
    // properly aligned uninitialized storage for N T's
    typename std::aligned_storage&lt;sizeof(T), alignof(T)&gt;::type data[N];
    std::size_t m_size = 0;

public:
    // Create an object in aligned storage
    template&lt;typename ...Args&gt; void emplace_back(Args&amp;&amp;... args) 
    {
        if( m_size &gt;= N ) // possible error handling
            throw std::bad_alloc{};
        new(data+m_size) T(std::forward&lt;Args&gt;(args)...);
        ++m_size;
    }

    // Access an object in aligned storage
    const T&amp; operator[](std::size_t pos) const 
    {
        return *reinterpret_cast&lt;const T*&gt;(data+pos);
    }

    // Delete objects from aligned storage
    ~static_vector() 
    {
        for(std::size_t pos = 0; pos &lt; m_size; ++pos) {
            reinterpret_cast&lt;T*&gt;(data+pos)-&gt;~T();
        }
    }
};

int main()
{
    static_vector&lt;std::string, 10&gt; v1;
    v1.emplace_back(5, '*');
    v1.emplace_back(10, '*');
    std::cout &lt;&lt; v1[0] &lt;&lt; '\n' &lt;&lt; v1[1] &lt;&lt; '\n';
}
 | output=
*****
**********
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc alignas}}
{{dsc inc | cpp/types/dsc alignment_of}}
{{dsc inc | cpp/types/dsc aligned_union}}
{{dsc inc | cpp/types/dsc max_align_t}}
{{dsc end}}

[[de:cpp/types/aligned storage]]
[[es:cpp/types/aligned storage]]
[[fr:cpp/types/aligned storage]]
[[it:cpp/types/aligned storage]]
[[ja:cpp/types/aligned storage]]
[[pt:cpp/types/aligned storage]]
[[ru:cpp/types/aligned storage]]
[[zh:cpp/types/aligned storage]]</text>
      <sha1>tnxdiioionm7ewz4kzc16c8d044yh8l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/aligned union</title>
    <ns>0</ns>
    <id>3255</id>
    <revision>
      <id>81783</id>
      <parentid>81782</parentid>
      <timestamp>2015-11-11T16:17:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1933">{{cpp/title|aligned_union}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; std::size_t Len, class... Types &gt;
struct aligned_union;
}}
{{dcl end}}

Provides the member typedef {{tt|type}}, which is a POD type of a size and alignment suitable for use as uninitialized storage for an object of any of the types listed in {{tt|Types}}. The size of the storage is at least {{tt|Len}}. {{lc|std::aligned_union}} also determines the strictest (largest) alignment requirement among all {{tt|Types}} and makes it available as the constant {{tt|alignment_value}}.

If {{c|1=sizeof...(Types) == 0}}, the behavior is undefined.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the POD type suitable for storage of any type from {{tt|Types}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; std::size_t Len, class... Types &gt;
using aligned_union_t = typename aligned_union&lt;Len,Types...&gt;::type;
}}
{{dcl end}}

===Member constants===
{{dsc begin}}
{{dsc mem sconst | alignment_value | the strictest alignment requirement of all {{tt|Types}} | nolink=true}}
{{dsc end}}

===Possible implementation===
{{eq fun | 1=
#include &lt;algorithm&gt;
template &lt;std::size_t Len, class... Types&gt;
struct aligned_union
{
    static constexpr std::size_t alignment_value = std::max({alignof(Types)...});

    struct type
    {
      alignas(alignment_value) char _s[std::max({Len, sizeof(Types)...})];
    };
};
}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc alignment_of}}
{{dsc inc | cpp/types/dsc aligned_storage}}
{{dsc end}}

[[de:cpp/types/aligned union]]
[[es:cpp/types/aligned union]]
[[fr:cpp/types/aligned union]]
[[it:cpp/types/aligned union]]
[[ja:cpp/types/aligned union]]
[[pt:cpp/types/aligned union]]
[[ru:cpp/types/aligned union]]
[[zh:cpp/types/aligned union]]</text>
      <sha1>qv77jf4ufo0tzo7701gxbrz3spmhe12</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/alignment of</title>
    <ns>0</ns>
    <id>3189</id>
    <revision>
      <id>90977</id>
      <parentid>90945</parentid>
      <timestamp>2017-03-14T12:58:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1969">{{cpp/title|alignment_of}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct alignment_of;
}}
{{dcl end}}

Provides the member constant {{tt|value}} equal to the [[cpp/language/object#Alignment|alignment requirement]] of the type {{tt|T}}, as if obtained by an {{c|alignof}} expression. If {{tt|T}} is an array type, returns the alignment requirements of the element type. If {{tt|T}} is a reference type, returns the alignment requirements of the type referred to.

If {{c|alignof(T)}} is not a valid expression, the behavior is undefined.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr std::size_t alignment_of_v = alignment_of&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit2 |{{c|alignof(T)}}|std::size_t}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct alignment_of : std::integral_constant&lt;
                          std::size_t,
                          alignof(T)
                       &gt; {};
}}

===Notes===
This type trait predates the [[cpp/language/alignof|alignof keyword]], which can be used to obtain the same value with less verbosity.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
 
class A {};
 
int main() 
{
    std::cout &lt;&lt; std::alignment_of&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::alignment_of&lt;int&gt;() &lt;&lt; '\n'; // alt syntax
    std::cout &lt;&lt; std::alignment_of_v&lt;double&gt; &lt;&lt; '\n'; // c++17 alt syntax
}
 | output=
1
4
8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc alignof}}
{{dsc inc | cpp/types/dsc aligned_storage}}
{{dsc inc | cpp/types/dsc aligned_union}}
{{dsc inc | cpp/types/dsc max_align_t}}

{{dsc end}}

[[de:cpp/types/alignment of]]
[[es:cpp/types/alignment of]]
[[fr:cpp/types/alignment of]]
[[it:cpp/types/alignment of]]
[[ja:cpp/types/alignment of]]
[[pt:cpp/types/alignment of]]
[[ru:cpp/types/alignment of]]
[[zh:cpp/types/alignment of]]</text>
      <sha1>7nc52yclbbe50ubenl4bierbolmqwi1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/bad cast</title>
    <ns>0</ns>
    <id>3277</id>
    <revision>
      <id>70257</id>
      <parentid>69642</parentid>
      <timestamp>2014-05-13T20:04:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>also thrown by use_facet</comment>
      <text xml:space="preserve" bytes="1158">{{cpp/title | bad_cast}}
{{cpp/types/bad_cast/navbar}}
{{ddcl | header=typeinfo |
class bad_cast : public std::exception;
}}

An exception of this type is thrown when a {{ltt|cpp/language/dynamic_cast}} to a reference type fails the run-time check (e.g. because the types are not related by inheritance), and also from {{lc|std::use_facet}} if the requested facet does not exist in the locale.

{{inheritance diagram/std-bad_cast}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/types/bad_cast/bad_cast | constructs a new bad_cast object}}
{{dsc end}}

{{cpp/error/exception/inherit}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;typeinfo&gt;

struct Foo { virtual ~Foo() {} };
struct Bar { virtual ~Bar() {} };

int main()
{
    Bar b;
    try {
        Foo&amp; f = dynamic_cast&lt;Foo&amp;&gt;(b);
    } catch(const std::bad_cast&amp; e)
    {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
} 
 | p=true
 | output=
Bad dynamic cast
}}

[[de:cpp/types/bad cast]]
[[es:cpp/types/bad cast]]
[[fr:cpp/types/bad cast]]
[[it:cpp/types/bad cast]]
[[ja:cpp/types/bad cast]]
[[pt:cpp/types/bad cast]]
[[ru:cpp/types/bad cast]]
[[zh:cpp/types/bad cast]]</text>
      <sha1>ayml1ij4cnd24n0ntwowe91cj4axo4w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/bad cast/bad cast</title>
    <ns>0</ns>
    <id>4751</id>
    <revision>
      <id>91698</id>
      <parentid>64841</parentid>
      <timestamp>2017-03-31T19:55:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="671">{{cpp/types/bad_cast/title|bad_cast}}
{{cpp/types/bad_cast/navbar}}
{{ddcl | 
bad_cast();
}}

Constructs new {{lc|std::bad_cast}} object. The contents of the byte string returned by {{ltf|cpp/error/exception/what}} are implementation defined.

===Parameters===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/types/bad cast/bad cast]]
[[es:cpp/types/bad cast/bad cast]]
[[fr:cpp/types/bad cast/bad cast]]
[[it:cpp/types/bad cast/bad cast]]
[[ja:cpp/types/bad cast/bad cast]]
[[pt:cpp/types/bad cast/bad cast]]
[[ru:cpp/types/bad cast/bad cast]]
[[zh:cpp/types/bad cast/bad cast]]</text>
      <sha1>059bafmu038kzyo7fr1blvivqu9tsg8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/bad typeid</title>
    <ns>0</ns>
    <id>3276</id>
    <revision>
      <id>66458</id>
      <parentid>51481</parentid>
      <timestamp>2013-11-23T01:17:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>typo per talk</comment>
      <text xml:space="preserve" bytes="1110">{{cpp/title | bad_typeid}}
{{cpp/types/bad_typeid/navbar}}
{{ddcl | header=typeinfo |
class bad_typeid : public std::exception;
}}

An exception of this type is thrown when a {{ltt|cpp/language/typeid|typeid}} operator is applied to a dereferenced null pointer value of a polymorphic type.

{{inheritance diagram/std-bad_typeid}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/types/bad_typeid/bad_typeid | constructs a new {{tt|bad_typeid}} object}}
{{dsc end}}

{{cpp/error/exception/inherit}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;typeinfo&gt;

struct S { // The type has to be polymorphic
    virtual void f();
}; 

int main()
{
    S* p = nullptr;
    try {
        std::cout &lt;&lt; typeid(*p).name() &lt;&lt; '\n';
    } catch(const std::bad_typeid&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
 | output=
Attempted a typeid of NULL pointer!
}}

[[de:cpp/types/bad typeid]]
[[es:cpp/types/bad typeid]]
[[fr:cpp/types/bad typeid]]
[[it:cpp/types/bad typeid]]
[[ja:cpp/types/bad typeid]]
[[pt:cpp/types/bad typeid]]
[[ru:cpp/types/bad typeid]]
[[zh:cpp/types/bad typeid]]</text>
      <sha1>91ocn0t2p0eliro39j4tx7aswsp0zud</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/bad typeid/bad typeid</title>
    <ns>0</ns>
    <id>4750</id>
    <revision>
      <id>91662</id>
      <parentid>64842</parentid>
      <timestamp>2017-03-31T19:53:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="713">{{cpp/types/bad_typeid/title|bad_typeid}}
{{cpp/types/bad_typeid/navbar}}
{{ddcl | 
bad_typeid();
}}

Constructs new {{lc|std::bad_typeid}} object. The contents of the byte string returned by {{ltf|cpp/error/exception/what}} are implementation defined.

===Parameters===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

[[de:cpp/types/bad typeid/bad typeid]]
[[es:cpp/types/bad typeid/bad typeid]]
[[fr:cpp/types/bad typeid/bad typeid]]
[[it:cpp/types/bad typeid/bad typeid]]
[[ja:cpp/types/bad typeid/bad typeid]]
[[pt:cpp/types/bad typeid/bad typeid]]
[[ru:cpp/types/bad typeid/bad typeid]]
[[zh:cpp/types/bad typeid/bad typeid]]</text>
      <sha1>m5fvg8ld9iww9bomgarpyywhm92fjil</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/byte</title>
    <ns>0</ns>
    <id>16204</id>
    <revision>
      <id>91137</id>
      <parentid>90798</parentid>
      <timestamp>2017-03-21T20:54:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Non-member functions */</comment>
      <text xml:space="preserve" bytes="4424">{{cpp/title|byte}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | cstddef}}
{{dcl | since=c++17 |
enum class byte : unsigned char {} ; 
}}
{{dcl end}}

{{tt|std::byte}} is a distinct type that implements the concept of byte as specified in
the C++ language definition. 

Like the character types ({{tt|char}}, {{tt|unsigned char}}, {{tt|signed char}}) it can be used to access raw memory occupied by other objects ([[cpp/language/object|object representation]]), but unlike those types, it is not a character type and is not an arithmetic type. A byte is only a collection of bits, and only bitwise logic operators are defined for it.

===Non-member functions===
{{member | {{small|std::}}to_integer | 2=
{{dcl begin}}
{{dcl | since=c++17|
template &lt;class IntegerType&gt;
 constexpr IntegerType to_integer(std::byte b) noexcept; 
}}
{{dcl end}}
Equivalent to: {{c|return IntegerType(b);}}
{{cpp/enable_if|{{c|std::is_integral_v&lt;IntegerType&gt;}} is true.}}
}}

{{member | {{small|std::}}operator&lt;&lt;{{=}},operator&gt;&gt;{{=}} | 2=
{{dcl begin}}
{{dcl | since=c++17|num=1|
template &lt;class IntegerType&gt;
 constexpr std::byte&amp; operator&lt;&lt;{{=}}(std::byte&amp; b, IntegerType shift) noexcept; 
}}
{{dcl | since=c++17|num=2|
template &lt;class IntegerType&gt;
 constexpr std::byte&amp; operator&gt;&gt;{{=}}(std::byte&amp; b, IntegerType shift) noexcept;
}}
{{dcl end}}
@1@Equivalent to: {{c|return b {{=}} std::byte(static_cast&lt;unsigned char&gt;(b) &lt;&lt; shift);}}
{{cpp/enable_if|{{c|std::is_integral_v&lt;IntegerType&gt;}} is true}}.
@2@Equivalent to: {{c|return b {{=}} std::byte(static_cast&lt;unsigned char&gt;(b) &gt;&gt; shift);}}
{{cpp/enable_if|{{c|std::is_integral_v&lt;IntegerType&gt;}} is true}}. 
}}

{{member | {{small|std::}}operator&lt;&lt;,operator&gt;&gt; | 2=
{{dcl begin}}
{{dcl | since=c++17|num=1|
template &lt;class IntegerType&gt;
 constexpr std::byte operator &lt;&lt;(std::byte b, IntegerType shift) noexcept;  
}}
{{dcl | since=c++17|num=2|
template &lt;class IntegerType&gt;
 constexpr std::byte operator &gt;&gt;(std::byte b, IntegerType shift) noexcept; 
}}
{{dcl end}}
@1@Equivalent to: {{c|return std::byte(static_cast&lt;unsigned char&gt;(b) &lt;&lt; shift);}}
{{cpp/enable_if|{{c|std::is_integral_v&lt;IntegerType&gt;}} is true}}.
@2@Equivalent to: {{c| return std::byte(static_cast&lt;unsigned char&gt;(b) &gt;&gt; shift);}}
{{cpp/enable_if|{{c|std::is_integral_v&lt;IntegerType&gt;}} is true}}. 
}}

{{member | {{small|std::}}operator{{!}}{{=}},operator&amp;{{=}},operator^{{=}} | 2=
{{dcl begin}}
{{dcl | since=c++17|num=1|
constexpr std::byte&amp; operator{{!}}{{=}}(std::byte&amp; l, std::byte r) noexcept;  
}}
{{dcl | since=c++17|num=2|
constexpr std::byte&amp; operator&amp;{{=}}(std::byte&amp; l, std::byte r) noexcept;
}}
{{dcl | since=c++17|num=3|
constexpr std::byte&amp; operator^{{=}}(std::byte&amp; l, std::byte r) noexcept;
}}
{{dcl end}}
@1@Equivalent to: {{c|1=return l = std::byte(static_cast&lt;unsigned char&gt;(l) {{!}} static_cast&lt;unsigned char&gt;(r));}}.
@2@Equivalent to: {{c|1=return l = std::byte(static_cast&lt;unsigned char&gt;(l) &amp; static_cast&lt;unsigned char&gt;(r));}}.
@3@Equivalent to: {{c|1=return l = std::byte(static_cast&lt;unsigned char&gt;(l) ^ static_cast&lt;unsigned char&gt;(r));}}.
}}

{{member | {{small|std::}}operator{{!}},operator&amp;,operator^,operator~ | 2=
{{dcl begin}}
{{dcl | since=c++17|num=1|
constexpr std::byte operator{{!}}(std::byte l, std::byte r) noexcept;   
}}
{{dcl | since=c++17|num=2|
constexpr std::byte operator&amp;(std::byte l, std::byte r) noexcept;
}}
{{dcl | since=c++17|num=3|
constexpr std::byte operator^(std::byte l, std::byte r) noexcept;
}}
{{dcl | since=c++17|num=4|
constexpr std::byte operator~(std::byte b) noexcept; 
}}
{{dcl end}}
@1@Equivalent to: {{c|1=return std::byte(static_cast&lt;unsigned char&gt;(l) {{!}} static_cast&lt;unsigned char&gt;(r));}}.
@2@Equivalent to: {{c|1=return std::byte(static_cast&lt;unsigned char&gt;(l) &amp; static_cast&lt;unsigned char&gt;(r));}}.
@3@Equivalent to: {{c|1=return std::byte(static_cast&lt;unsigned char&gt;(l) ^ static_cast&lt;unsigned char&gt;(r));}}.
@4@Equivalent to: {{c|1=return std::byte(~static_cast&lt;unsigned char&gt;(b));}}
}}

===Notes===
A numeric value {{tt|n}} can be converted to a byte value using {{tt|std::byte{n} }}, due to C++17 relaxed enum class initialization rules.

A byte can be converted to a numeric value  (such as to produce a integer hash of an object) using {{lc|std::to_integer}}

===Example===
{{example}}

[[de:cpp/types/byte]]
[[es:cpp/types/byte]]
[[fr:cpp/types/byte]]
[[it:cpp/types/byte]]
[[ja:cpp/types/byte]]
[[pt:cpp/types/byte]]
[[ru:cpp/types/byte]]
[[zh:cpp/types/byte]]</text>
      <sha1>thmi0sdga3gm2244yljvmipuz4w2g82</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/climits</title>
    <ns>0</ns>
    <id>2027</id>
    <revision>
      <id>89306</id>
      <parentid>89305</parentid>
      <timestamp>2017-01-17T16:13:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Limits of integer types */ fix note</comment>
      <text xml:space="preserve" bytes="2464">{{title|C numeric limits interface}}
{{cpp/types/navbar}}

See also {{lc|std::numeric_limits}} interface.

{{dsc begin}}
{{dsc header | cstdint}}
{{dsc inc | cpp/types/dsc PTRDIFF_MIN }}
{{dsc inc | cpp/types/dsc PTRDIFF_MAX }}
{{dsc inc | cpp/types/dsc SIZE_MAX }}
{{dsc inc | cpp/types/dsc SIG_ATOMIC_MIN }}
{{dsc inc | cpp/types/dsc SIG_ATOMIC_MAX }}
{{dsc inc | cpp/types/dsc WCHAR_MIN }}
{{dsc inc | cpp/types/dsc WCHAR_MAX }}
{{dsc inc | cpp/types/dsc WINT_MIN }}
{{dsc inc | cpp/types/dsc WINT_MAX}}
{{dsc end}}

===Limits of integer types===
{{dsc begin}}
{{dsc header | climits}}
{{dsc inc | cpp/types/dsc CHAR_BIT }}
{{dsc inc | cpp/types/dsc MB_LEN_MAX }}
{{dsc inc | cpp/types/dsc CHAR_MIN}}
{{dsc inc | cpp/types/dsc CHAR_MAX }}
{{dsc inc | cpp/types/dsc signed_MIN}}
{{dsc inc | cpp/types/dsc signed_MAX}}
{{dsc inc | cpp/types/dsc unsigned_MAX}}
{{dsc end}}

Note: the types of these constants, other than {{tt|CHAR_BIT}} and {{tt|MB_LEN_MAX}}, are required to match the results of the [[cpp/language/implicit_conversion#Integral promotion|integral promotions]] as applied to objects of the types they describe: {{tt|CHAR_MAX}} may have type {{c|int}} or {{c|unsigned int}}, but never {{c|char}}. Similarly {{tt|USHRT_MAX}} may not be of an unsigned type: its type may be {{c|int}}.

===Limits of floating point types===
{{dsc begin}}
{{dsc header | cfloat}}
{{dsc inc | cpp/types/dsc FLT_RADIX }}
{{dsc inc | cpp/types/dsc DECIMAL_DIG }}
{{dsc inc | cpp/types/dsc fp_DECIMAL_DIG}}
{{dsc inc | cpp/types/dsc fp_MIN}}
{{dsc inc | cpp/types/dsc fp_TRUE_MIN}}
{{dsc inc | cpp/types/dsc fp_MAX}}
{{dsc inc | cpp/types/dsc fp_EPSILON}}
{{dsc inc | cpp/types/dsc fp_DIG}}
{{dsc inc | cpp/types/dsc fp_MANT_DIG}}
{{dsc inc | cpp/types/dsc fp_MIN_EXP}}
{{dsc inc | cpp/types/dsc fp_MIN_10_EXP}}
{{dsc inc | cpp/types/dsc fp_MAX_EXP}}
{{dsc inc | cpp/types/dsc fp_MAX_10_EXP}}
{{dsc inc | cpp/types/dsc FLT_ROUNDS }}
{{dsc inc | cpp/types/dsc FLT_EVAL_METHOD }}
{{dsc inc | cpp/types/dsc fp_HAS_SUBNORM }}
{{dsc end}}

===See also===
* [[cpp/types/integer    | Fixed width integer types]]
* [[cpp/language/types | Arithmetic types]]
* [[cpp/language/type  | C++ type system overview]]
* [[cpp/types          | Type support (basic types, RTTI, type traits)]]

[[de:cpp/types/climits]]
[[es:cpp/types/climits]]
[[fr:cpp/types/climits]]
[[it:cpp/types/climits]]
[[ja:cpp/types/climits]]
[[pt:cpp/types/climits]]
[[ru:cpp/types/climits]]
[[zh:cpp/types/climits]]</text>
      <sha1>4dyktnjcxe2ff6l6wjc5f5lew1e3ofi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/climits/FLT EVAL METHOD</title>
    <ns>0</ns>
    <id>8694</id>
    <revision>
      <id>76871</id>
      <parentid>73809</parentid>
      <timestamp>2015-03-04T14:07:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mention contracting</comment>
      <text xml:space="preserve" bytes="1938">{{title|FLT_EVAL_METHOD}}
{{cpp/types/climits/navbar}}
{{ddcl | header=cfloat | since=c++11 |
#define FLT_EVAL_METHOD /* implementation defined */
}}

Specifies the precision in which all floating-point arithmetic operations other than assignment and cast are done. 

{{dsc begin}}
{{dsc hitem | Value | Explanation}}
{{dsc | negative values except {{tt|-1}} | implementation-defined behavior}}
{{dsc | {{tt|-1}} | the default precision is not known}}
{{dsc | {{tt|0}} | all operations and constants evaluate in the range and precision of the type used. Additionally, {{c|float_t}} and {{c|double_t}} are equivalent to {{c|float}} and {{c|double}} respectively}}
{{dsc | {{tt|1}} | all operations and constants evaluate in the range and precision of {{c|double}}. Additionally, both {{c|float_t}} and {{c|double_t}} are equivalent to {{c|double}}}}
{{dsc | {{tt|2}} | all operations and constants evaluate in the range and precision of {{c|long double}}. Additionally, both {{c|float_t}} and {{c|double_t}} are equivalent to {{c|long double}}}}
{{dsc end}}

===Notes===
Regardless of the value of {{lc|FLT_EVAL_METHOD}}, any floating-point expression may be ''contracted'', that is, calculated as if all intermediate results have infinite range and precision (unless [[cpp/preprocessor/impl|#pragma]] {{c|STDC FP_CONTRACT}} is off)

Cast and assignment strip away any extraneous range and precision: this models the action of storing a value from an extended-precision FPU register into a standard-sized memory location.

===See also===
{{dsc begin}}
{{dsc see c | c/types/limits/FLT_EVAL_METHOD}}
{{dsc end}}

[[de:cpp/types/climits/FLT EVAL METHOD]]
[[es:cpp/types/climits/FLT EVAL METHOD]]
[[fr:cpp/types/climits/FLT EVAL METHOD]]
[[it:cpp/types/climits/FLT EVAL METHOD]]
[[ja:cpp/types/climits/FLT EVAL METHOD]]
[[pt:cpp/types/climits/FLT EVAL METHOD]]
[[ru:cpp/types/climits/FLT EVAL METHOD]]
[[zh:cpp/types/climits/FLT EVAL METHOD]]</text>
      <sha1>24o07xlw87h17it216gslo7qiiwqt2r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/climits/FLT ROUNDS</title>
    <ns>0</ns>
    <id>8696</id>
    <revision>
      <id>71778</id>
      <parentid>71772</parentid>
      <timestamp>2014-06-23T22:18:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>move round_style down to note</comment>
      <text xml:space="preserve" bytes="1395">{{title|FLT_ROUNDS}}
{{cpp/types/climits/navbar}}
{{ddcl | header=cfloat | since=c++11 |
#define FLT_ROUNDS /* implementation defined */
}}

Specifies the current rounding direction of floating-point arithmetic operations.

{{dsc begin}}
{{dsc hitem | Value | Explanation}}
{{dsc | {{tt|-1}} | the default rounding direction is not known}}
{{dsc | {{tt|0}} | toward zero, {{lc|FE_TOWARDZERO}} }}
{{dsc | {{tt|1}} | to nearest, {{lc|FE_TONEAREST}} }}
{{dsc | {{tt|2}} | towards positive infinity, {{lc|FE_UPWARD}} }}
{{dsc | {{tt|3}} | towards negative infinity, {{lc|FE_DOWNWARD}} }}
{{dsc | other values | implementation-defined behavior}}
{{dsc end}}

===Notes===
The rounding mode can be changed with {{lc|std::fesetround}} and {{lc|FLT_ROUNDS}} reflects that change.

The possible values of FLT_ROUNDS match the possible values of {{lc|std::float_round_style}}, returned by {{lc|std::numeric_limits::round_style}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc float_round_style}}
{{dsc inc | cpp/numeric/fenv/dsc feround}}
{{dsc see c | c/types/limits/FLT_ROUNDS}}
{{dsc end}}

[[de:cpp/types/climits/FLT ROUNDS]]
[[es:cpp/types/climits/FLT ROUNDS]]
[[fr:cpp/types/climits/FLT ROUNDS]]
[[it:cpp/types/climits/FLT ROUNDS]]
[[ja:cpp/types/climits/FLT ROUNDS]]
[[pt:cpp/types/climits/FLT ROUNDS]]
[[ru:cpp/types/climits/FLT ROUNDS]]
[[zh:cpp/types/climits/FLT ROUNDS]]</text>
      <sha1>17f2nbqsymxkqs19cwgmbi32rb44ruu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/common type</title>
    <ns>0</ns>
    <id>3135</id>
    <revision>
      <id>91976</id>
      <parentid>89089</parentid>
      <timestamp>2017-03-31T21:59:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0548R1, tweaks to our favorite trait to make it 100% sane</comment>
      <text xml:space="preserve" bytes="6189">{{cpp/title|common_type}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class... T &gt;
struct common_type;
}}
{{dcl end}}

Determines the common type among all types {{tt|T...}}, that is the type all {{tt|T...}} can be implicitly converted to. If such a type exists (as determined according to the rules below), the member {{tt|type}} names that type. Otherwise, there is no member {{tt|type}}.

* If {{c|sizeof...(T)}} is zero, there is no member {{tt|type}}.
* If {{c|sizeof...(T)}} is one (i.e., {{tt|T...}} contains only one type {{tt|T0}}), the member {{tt|type}} names the same type as {{c|std::common_type&lt;T0, T0&gt;::type}} if it exists; otherwise there is no member {{tt|type}}.
* If {{c|sizeof...(T)}} is two (i.e., {{tt|T...}} contains exactly two types {{tt|T1}} and {{tt|T2}}),
:* If applying {{lc|std::decay}} to at least one of {{tt|T1}} and {{tt|T2}} produces a different type, the member {{tt|type}} names the same type as {{c|std::common_type&lt;std::decay&lt;T1&gt;::type, std::decay&lt;T2&gt;::type&gt;::type}}, if it exists; if not, there is no member {{tt|type}}.
:* Otherwise, unless there is a user specialization for {{c|std::common_type&lt;T1, T2&gt;}}, the member {{tt|type}} denotes the type {{c|std::decay&lt;decltype(false ? std::declval&lt;T1&gt;() : std::declval&lt;T2&gt;())&gt;::type}}, if that conditional expression is well-formed; if not, there is no member {{tt|type}}.
* If {{c|sizeof...(T)}} is greater than two (i.e., {{tt|T...}} consists of the types {{tt|T1, T2, R...}}), then if {{c|std::common_type&lt;T1, T2&gt;::type}} exists, the member {{tt|type}} denotes {{c|std::common_type&lt;std::common_type&lt;T1, T2&gt;::type, R...&gt;::type}} if such a type exists. In all other cases, there is no member {{tt|type}}.

{{cpp/types/cvaub|pack=T|packonly=yes}}

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the common type for all {{tt|T...}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class... T &gt;
using common_type_t = typename common_type&lt;T...&gt;::type;
}}
{{dcl end}}

===Specializations===

Users may specialize {{tt|common_type}} for types {{tt|T1}} and {{tt|T2}} if
* At least one of {{tt|T1}} and {{tt|T2}} depends on a user-defined type, and
* {{lc|std::decay}} is an identity transformation for both {{tt|T1}} and {{tt|T2}}.

If such a specialization has a member named {{tt|type}}, it must be a public and unambiguous member type that names a cv-unqualified non-reference type to which both {{tt|T1}} and {{tt|T2}} are explicitly convertible. Additionally, {{c|std::common_type&lt;T1, T2&gt;::type}} and {{c|std::common_type&lt;T2, T1&gt;::type}} must denote the same type.

A program that adds {{tt|common_type}} specializations in violation of these rules has undefined behavior.

Note that the behavior of a program that adds a specialization to any other template from {{tt|&lt;type_traits&gt;}} is undefined.

The following specializations are already provided by the standard library:

{{dsc begin}}
{{dsc inc | cpp/chrono/duration/dsc common_type}}
{{dsc inc | cpp/chrono/time_point/dsc common_type}}
{{dsc end}}

===Possible implementation===
{{eq fun
 | 1=

// primary template (used for zero types)
template &lt;class ...T&gt; struct common_type { }; 

//////// one type
template &lt;class T&gt;
struct common_type&lt;T&gt; {
    using type = std::decay_t&lt;T&gt;;
};

//////// two types

// default implementation for two types
template&lt;class T1, class T2&gt;
using cond_t = decltype(false ? std::declval&lt;T1&gt;() : std::declval&lt;T2&gt;());

template&lt;class T1, class T2, class=void&gt;
struct common_type_2_default { };

template&lt;class T1, class T2&gt;
struct common_type_2_default&lt;T1, T2, std::void_t&lt;cond_t&lt;T1, T2&gt;&gt;&gt; {
    using type = std::decay_t&lt;cond_t&lt;T1, T2&gt;&gt;;
};

// dispatcher to decay the type before applying specializations
template&lt;class T1, class T2, class D1 = std::decay_t&lt;T1&gt;, class D2=std::decay_t&lt;T2&gt;&gt;
struct common_type_2_impl : common_type&lt;D1, D2&gt; {};

template&lt;class D1, class D2&gt;
struct common_type_2_impl&lt;D1, D2, D1, D2&gt; : common_type_2_default&lt;D1, D2&gt; {};

template &lt;class T1, class T2&gt;
struct common_type&lt;T1, T2&gt; : common_type_2_impl&lt;T1, T2&gt; { };

//////// 3+ types

template&lt;class AlwaysVoid, class T1, class T2, class...R&gt;
struct common_type_multi_impl { };

template&lt; class T1, class T2, class...R&gt;
struct common_type_multi_impl&lt;std::void_t&lt;common_type_t&lt;T1, T2&gt;&gt;, T1, T2, R...&gt;
    : common_type&lt;common_type_t&lt;T1, T2&gt;, R...&gt;  { };


template &lt;class T1, class T2, class... R&gt;
struct common_type&lt;T1, T2, R...&gt;
    : common_type_multi_impl&lt;void, T1, T2, R...&gt; { };
}}

===Notes===
For arithmetic types not subject to promotion, the common type may be viewed as the type of the (possibly mixed-mode) arithmetic expression such as {{c|T0() + T1() + ... + Tn()}}.

===Defect reports===
{{dr list begin}}
{{dr list item | wg=lwg | std=C++11| dr=2141 |before={{c|common_type&lt;int, int&gt;::type}} is {{c|int&amp;&amp;}} |after= decayed result type}}
{{dr list item | wg=lwg | std=C++11| dr=2408 |before={{tt|common_type}} is not SFINAE-friendly|after= made SFINAE-friendly }}
{{dr list item | wg=lwg | std=C++11| dr=2460 |before={{tt|common_type}} specializations are nearly impossible to write | after= reduced number of specializations needed}}
{{dr list end}}

===Examples===
{{example
 | Demonstrates mixed-mode arithmetic on a user-defined class
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
 
template &lt;class T&gt;
struct Number { T n; };
 
template &lt;class T, class U&gt;
Number&lt;typename std::common_type&lt;T, U&gt;::type&gt; operator+(const Number&lt;T&gt;&amp; lhs,
                                                        const Number&lt;U&gt;&amp; rhs) 
{
    return {lhs.n + rhs.n};
}
 
int main()
{
    Number&lt;int&gt; i1 = {1}, i2 = {2};
    Number&lt;double&gt; d1 = {2.3}, d2 = {3.5};
    std::cout &lt;&lt; &quot;i1i2: &quot; &lt;&lt; (i1 + i2).n &lt;&lt; &quot;\ni1d2: &quot; &lt;&lt; (i1 + d2).n &lt;&lt; '\n'
              &lt;&lt; &quot;d1i2: &quot; &lt;&lt; (d1 + i2).n &lt;&lt; &quot;\nd1d2: &quot; &lt;&lt; (d1 + d2).n &lt;&lt; '\n';
}
 | output=
i1i2: 3
i1d2: 4.5
d1i2: 4.3
d1d2: 5.8
}}

[[de:cpp/types/common type]]
[[es:cpp/types/common type]]
[[fr:cpp/types/common type]]
[[it:cpp/types/common type]]
[[ja:cpp/types/common type]]
[[pt:cpp/types/common type]]
[[ru:cpp/types/common type]]
[[zh:cpp/types/common type]]</text>
      <sha1>22p6ag96mcvkkmrnsvikfa1g8c1iobr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/conditional</title>
    <ns>0</ns>
    <id>3191</id>
    <revision>
      <id>91231</id>
      <parentid>91221</parentid>
      <timestamp>2017-03-28T20:25:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Undo revision 91221 by [[Special:Contributions/113.88.82.244|113.88.82.244]] ([[User talk:113.88.82.244|talk]])</comment>
      <text xml:space="preserve" bytes="1686">{{cpp/title|conditional}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; bool B, class T, class F &gt;
struct conditional;
}}
{{dcl end}}

Provides member typedef {{tt|type}}, which is defined as {{tt|T}} if {{tt|B}} is {{c|true}} at compile time, or as {{tt|F}} if {{tt|B}} is {{c|false}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|type}} | {{tt|T}} if {{c|1=B == true}}, {{tt|F}} if {{c|1=B == false}}}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; bool B, class T, class F &gt;
using conditional_t = typename conditional&lt;B,T,F&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;bool B, class T, class F&gt;
struct conditional { typedef T type; };

template&lt;class T, class F&gt;
struct conditional&lt;false, T, F&gt; { typedef F type; };
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;typeinfo&gt;

int main() 
{
    typedef std::conditional&lt;true, int, double&gt;::type Type1;
    typedef std::conditional&lt;false, int, double&gt;::type Type2;
    typedef std::conditional&lt;sizeof(int) &gt;= sizeof(double), int, double&gt;::type Type3;
   
    std::cout &lt;&lt; typeid(Type1).name() &lt;&lt; '\n';
    std::cout &lt;&lt; typeid(Type2).name() &lt;&lt; '\n';
    std::cout &lt;&lt; typeid(Type3).name() &lt;&lt; '\n';
}
 | output=
i
d
d
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc enable_if}}
{{dsc end}}

[[de:cpp/types/conditional]]
[[es:cpp/types/conditional]]
[[fr:cpp/types/conditional]]
[[it:cpp/types/conditional]]
[[ja:cpp/types/conditional]]
[[pt:cpp/types/conditional]]
[[ru:cpp/types/conditional]]
[[zh:cpp/types/conditional]]</text>
      <sha1>9rlobntd5z7an3fs5q9dekqsxm4bczo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/conjunction</title>
    <ns>0</ns>
    <id>14512</id>
    <revision>
      <id>91238</id>
      <parentid>91232</parentid>
      <timestamp>2017-03-28T20:36:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>note short circuiting</comment>
      <text xml:space="preserve" bytes="3571">{{cpp/title|conjunction}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++17 | num=1 | 1=
template&lt;class... B&gt;
struct conjunction;
}}
{{dcl end}}

Forms the [https://en.wikipedia.org/wiki/Logical_conjunction logical conjunction] of the type traits {{tt|B...}}, effectively performing a logical AND on the sequence of traits.

The specialization {{c|std::conjunction&lt;B1, ..., BN&gt;}} has a public and unambiguous base that is 
* if {{c|1=sizeof...(B) == 0}}, {{c|std::true_type}}; otherwise
* the first type {{tt|Bi}} in {{tt|B1, ..., BN}} for which {{c|1=bool(Bi::value) == false}}, or {{tt|BN}} if there is no such type.

The member names of the base class, other than {{tt|conjunction}} and {{tt|operator{{=}}}}, are not hidden and are unambiguously available in {{tt|conjunction}}.

Conjunction is short-circuiting: if there is a template type argument {{tt|Bi}} with {{c|1= bool(Bi::value) == false}}, then instantiating {{c|conjunction&lt;B1, ..., BN&gt;::value}} does not require the instantiation of {{c|Bj::value}} for {{tt|j &gt; i}}.

===Template parameters===
{{par begin}}
{{par | B... | every template argument {{tt|Bi}} for which {{c|Bi::value}} is instantiated must be usable as a base class and define member {{tt|value}} that is convertible to {{c|bool}} }}
{{par end}}

=== Helper variable template ===
{{dcl begin}}
{{dcl | since=c++17 | 1=
template&lt;class... B&gt;
inline constexpr bool conjunction_v = conjunction&lt;B...&gt;::value;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class...&gt; struct conjunction : std::true_type { };
template&lt;class B1&gt; struct conjunction&lt;B1&gt; : B1 { };
template&lt;class B1, class... Bn&gt;
struct conjunction&lt;B1, Bn...&gt; 
    : std::conditional_t&lt;bool(B1::value), conjunction&lt;Bn...&gt;, B1&gt; {};
}}

===Notes===
A specialization of {{tt|conjunction}} does not necessarily inherit from either {{c|std::true_type}} or {{c|std::false_type}}: it simply inherits from the first {{tt|B}} whose {{tt|::value}}, explicitly converted to bool, is false, or from the very last {{tt|B}} when all of them convert to true. For example, {{c|std::conjunction&lt;std::integral_constant&lt;int, 2&gt;, std::integral_constant&lt;int, 4&gt;&gt;::value}} is {{c|4}}.

The short-circuit instantiation differentiates {{tt|conjunction}} from fold expressions: a fold expression like {{c|(... &amp;&amp; Bs::value)}} instantiates every {{tt|B}} in {{tt|Bs}}, while {{c|std::conjunction_v&lt;Bs...&gt;}} stops instantiation once the value can be determined. This is particularly useful if the later type is expensive to instantiate or can cause a hard error when instantiated with the wrong type.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
 
// func is enabled if all Ts... have the same type as T
template&lt;typename T, typename... Ts&gt;
std::enable_if_t&lt;std::conjunction_v&lt;std::is_same&lt;T, Ts&gt;...&gt;&gt;
func(T, Ts...) {
    std::cout &lt;&lt; &quot;all types in pack are T\n&quot;;
}
 
// otherwise
template&lt;typename T, typename... Ts&gt;
std::enable_if_t&lt;!std::conjunction_v&lt;std::is_same&lt;T, Ts&gt;...&gt;&gt;
func(T, Ts...) {
    std::cout &lt;&lt; &quot;not all types in pack are T\n&quot;;
}
 
int main() {
    func(1, 2, 3);
    func(1, 2, &quot;hello!&quot;);
}
|output=
all types in pack are T
not all types in pack are T
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc negation}}
{{dsc inc | cpp/types/dsc disjunction}}
{{dsc end}}

[[de:cpp/types/conjunction]]
[[es:cpp/types/conjunction]]
[[fr:cpp/types/conjunction]]
[[it:cpp/types/conjunction]]
[[ja:cpp/types/conjunction]]
[[pt:cpp/types/conjunction]]
[[ru:cpp/types/conjunction]]
[[zh:cpp/types/conjunction]]</text>
      <sha1>1agptji56b9svshc8pukqyxxdd0lf2c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/decay</title>
    <ns>0</ns>
    <id>3251</id>
    <revision>
      <id>85775</id>
      <parentid>82772</parentid>
      <timestamp>2016-05-15T20:08:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+ formal specification</comment>
      <text xml:space="preserve" bytes="2643">{{cpp/title|decay}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct decay;
}}
{{dcl end}}

Applies lvalue-to-rvalue, array-to-pointer, and function-to-pointer implicit conversions to the type {{tt|T}}, removes cv-qualifiers, and defines the resulting type as the member typedef {{tt|type}}. Formally:

* If {{tt|T}} names the type &quot;array of {{tt|U}}&quot; or &quot;reference to array of {{tt|U}}&quot;, the member typedef {{tt|type}} is {{c|U*}}.

* Otherwise, if {{tt|T}} is a function type {{tt|F}} or a reference thereto, the member typedef {{tt|type}} is {{c|std::add_pointer&lt;F&gt;::type}}.

* Otherwise, the member typedef {{tt|type}} is {{c|std::remove_cv&lt;std::remove_reference&lt;T&gt;::type&gt;::type}}.

These conversions model the type conversion applied to all function arguments when passed by value.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the result of applying the decay type conversions to {{tt|T}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using decay_t = typename decay&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct decay {
private:
    typedef typename std::remove_reference&lt;T&gt;::type U;
public:
    typedef typename std::conditional&lt; 
        std::is_array&lt;U&gt;::value,
        typename std::remove_extent&lt;U&gt;::type*,
        typename std::conditional&lt; 
            std::is_function&lt;U&gt;::value,
            typename std::add_pointer&lt;U&gt;::type,
            typename std::remove_cv&lt;U&gt;::type
        &gt;::type
    &gt;::type type;
};
}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

template &lt;typename T, typename U&gt;
struct decay_equiv : 
    std::is_same&lt;typename std::decay&lt;T&gt;::type, U&gt;::type 
{};

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; decay_equiv&lt;int, int&gt;::value &lt;&lt; '\n'
              &lt;&lt; decay_equiv&lt;int&amp;, int&gt;::value &lt;&lt; '\n'
              &lt;&lt; decay_equiv&lt;int&amp;&amp;, int&gt;::value &lt;&lt; '\n'
              &lt;&lt; decay_equiv&lt;const int&amp;, int&gt;::value &lt;&lt; '\n'
              &lt;&lt; decay_equiv&lt;int[2], int*&gt;::value &lt;&lt; '\n'
              &lt;&lt; decay_equiv&lt;int(int), int(*)(int)&gt;::value &lt;&lt; '\n';
} 
| output=
true
true
true
true
true
true
}}

===See also===
{{dsc begin}}
{{dsc | {{ltt|cpp/language/implicit_cast|implicit conversion}} | array-to-pointer, function-to-pointer, lvalue-to-rvalue conversions }}
{{dsc end}}

[[de:cpp/types/decay]]
[[es:cpp/types/decay]]
[[fr:cpp/types/decay]]
[[it:cpp/types/decay]]
[[ja:cpp/types/decay]]
[[pt:cpp/types/decay]]
[[ru:cpp/types/decay]]
[[zh:cpp/types/decay]]</text>
      <sha1>5xfg4vocyglkr2flbvmptarl4ukes6e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/disjunction</title>
    <ns>0</ns>
    <id>14513</id>
    <revision>
      <id>91239</id>
      <parentid>91233</parentid>
      <timestamp>2017-03-28T20:38:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Notes */ +</comment>
      <text xml:space="preserve" bytes="3483">{{cpp/title|disjunction}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++17 | num=1 | 1=
template&lt;class... B&gt;
struct disjunction;
}}
{{dcl end}}

Forms the [https://en.wikipedia.org/wiki/Logical_disjunction logical disjunction] of the type traits {{tt|B...}}, effectively performing a logical or on the sequence of traits.

The specialization {{c|std::disjunction&lt;B1, ..., BN&gt;}} has a public and unambiguous base that is 
* if {{c|1=sizeof...(B) == 0}}, {{c|std::false_type}}; otherwise
* the first type {{tt|Bi}} in {{tt|B1, ..., BN}} for which {{c|1=bool(Bi::value) == true}}, or {{tt|BN}} if there is no such type.

The member names of the base class, other than {{tt|disjunction}} and {{tt|operator{{=}}}}, are not hidden and are unambiguously available in {{tt|disjunction}}.

Disjunction is short-circuiting: if there is a template type argument {{tt|Bi}} with {{c|1=bool(Bi::value) != false}}, then instantiating {{c|disjunction&lt;B1, ..., BN&gt;::value}} does not require the instantiation of {{c|Bj::value}} for {{tt|j &gt; i}}

===Template parameters===
{{par begin}}
{{par | B... | every template argument {{tt|Bi}} for which {{c|Bi::value}} is instantiated must be usable as a base class and define member {{tt|value}} that is convertible to {{c|bool}} }}
{{par end}}

=== Helper variable template ===
{{dcl begin}}
{{dcl | since=c++17 | 1=
template&lt;class... B&gt;
inline constexpr bool disjunction_v = disjunction&lt;B...&gt;::value;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class...&gt; struct disjunction : std::false_type { };
template&lt;class B1&gt; struct disjunction&lt;B1&gt; : B1 { };
template&lt;class B1, class... Bn&gt;
struct disjunction&lt;B1, Bn...&gt; 
    : std::conditional_t&lt;bool(B1::value), B1, disjunction&lt;Bn...&gt;&gt;  { };
}}

===Notes===
A specialization of {{tt|disjunction}} does not necessarily inherit from of either {{c|std::true_type}} or {{c|std::false_type}}: it simply inherits from the first {{tt|B}} whose {{tt|::value}}, explicitly converted to {{tt|bool}}, is true, or from the very last B when all of them convert to false. For example, {{c|std::disjunction&lt;std::integral_constant&lt;int, 2&gt;, std::integral_constant&lt;int, 4&gt;&gt;::value}} is {{c|2}}.

The short-circuit instantiation differentiates {{tt|disjunction}} from fold expressions: a fold expression like {{c|(... {{!!}} Bs::value)}} instantiates every {{tt|B}} in {{tt|Bs}}, while {{c|std::disjunction_v&lt;Bs...&gt;}} stops instantiation once the value can be determined. This is particularly useful if the later type is expensive to instantiate or can cause a hard error when instantiated with the wrong type.

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

using result0 =
    std::disjunction&lt;std::bool_constant&lt;false&gt;, std::bool_constant&lt;false&gt;,
                     std::bool_constant&lt;false&gt;&gt;;
using result1 =
    std::disjunction&lt;std::bool_constant&lt;true&gt;, std::bool_constant&lt;false&gt;,
                     std::bool_constant&lt;false&gt;&gt;;
 
int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; result0::value &lt;&lt; '\n';
    std::cout &lt;&lt; result1::value &lt;&lt; '\n';
}
|output=
false
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc negation}}
{{dsc inc | cpp/types/dsc conjunction}}
{{dsc end}}

[[de:cpp/types/disjunction]]
[[es:cpp/types/disjunction]]
[[fr:cpp/types/disjunction]]
[[it:cpp/types/disjunction]]
[[ja:cpp/types/disjunction]]
[[pt:cpp/types/disjunction]]
[[ru:cpp/types/disjunction]]
[[zh:cpp/types/disjunction]]</text>
      <sha1>6f9mn0dmwcm1htqsvoplzmd43pqidvv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/enable if</title>
    <ns>0</ns>
    <id>2716</id>
    <revision>
      <id>86728</id>
      <parentid>80028</parentid>
      <timestamp>2016-07-11T23:55:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Example */ can't have void* template parameters</comment>
      <text xml:space="preserve" bytes="4976">{{cpp/title|enable_if}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; bool B, class T = void &gt;
struct enable_if;
}}
{{dcl end}}

If {{tt|B}} is {{c|true}}, {{lc|std::enable_if}} has a public member typedef {{tt|type}}, equal to {{tt|T}}; otherwise, there is no member typedef. 

This metafunction is a convenient way to leverage [[cpp/language/sfinae|SFINAE]] to conditionally remove functions from [[cpp/language/overload_resolution|overload resolution]] based on type traits and to provide separate function overloads and specializations for different type traits. {{lc|std::enable_if}} can be used as an additional function argument (not applicable to operator overloads), as a return type (not applicable to constructors and destructors), or as a class template or function template parameter.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|type}} | either {{tt|T}} or no such member, depending on the value of {{tt|B}}}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; bool B, class T = void &gt;
using enable_if_t = typename enable_if&lt;B,T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;bool B, class T = void&gt;
struct enable_if {};

template&lt;class T&gt;
struct enable_if&lt;true, T&gt; { typedef T type; };
}}

===Notes===
A common mistake is to declare two function templates that differ only in their default template arguments. This is illegal because default template arguments are not part of function template's signature, and declaring two different function templates with the same signature is illegal.
{{source|1=
struct T {
    enum { int_t,float_t } m_type;
    template &lt;typename Integer,
              typename = std::enable_if_t&lt;std::is_integral&lt;Integer&gt;::value&gt;
    &gt;
    T(Integer) : m_type(int_t) {}

    template &lt;typename Floating,
              typename = std::enable_if_t&lt;std::is_floating_point&lt;Floating&gt;::value&gt;
    &gt;
    T(Floating) : m_type(float_t) {} // error: cannot overload
};
}}

===Example===
{{example
 |
 | code=
#include &lt;type_traits&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

namespace detail { struct inplace_t{}; }
void* operator new(std::size_t, void* p, detail::inplace_t) {
    return p;
}

// #1, enabled via the return type
template&lt;class T,class... Args&gt;
typename std::enable_if&lt;std::is_trivially_constructible&lt;T,Args&amp;&amp;...&gt;::value&gt;::type 
    construct(T* t,Args&amp;&amp;... args) 
{
    std::cout &lt;&lt; &quot;constructing trivially constructible T\n&quot;;
}

// #2
template&lt;class T, class... Args&gt;
std::enable_if_t&lt;!std::is_trivially_constructible&lt;T,Args&amp;&amp;...&gt;::value&gt; //Using helper type
    construct(T* t,Args&amp;&amp;... args) 
{
    std::cout &lt;&lt; &quot;constructing non-trivially constructible T\n&quot;;
    new(t, detail::inplace_t{}) T(args...);
}

// #3, enabled via a parameter
template&lt;class T&gt;
void destroy(T* t, 
             typename std::enable_if&lt;std::is_trivially_destructible&lt;T&gt;::value&gt;::type* = 0) 
{
    std::cout &lt;&lt; &quot;destroying trivially destructible T\n&quot;;
}

// #4, enabled via a template parameter
template&lt;class T,
         typename std::enable_if&lt;
             !std::is_trivially_destructible&lt;T&gt;{} &amp;&amp;
             (std::is_class&lt;T&gt;{} {{!!}} std::is_union&lt;T&gt;{}),
            int&gt;::type = 0&gt;
void destroy(T* t)
{
    std::cout &lt;&lt; &quot;destroying non-trivially destructible T\n&quot;;
    t-&gt;~T();
}

// #5, enabled via a template parameter
template&lt;class T,
	typename = std::enable_if_t&lt;std::is_array&lt;T&gt;::value&gt; &gt;
void destroy(T* t) // note, function signature is unmodified
{
    for(std::size_t i = 0; i &lt; std::extent&lt;T&gt;::value; ++i) {
        destroy((*t)[i]);
    }
}
/*
template&lt;class T,
	typename = std::enable_if_t&lt;std::is_void&lt;T&gt;::value&gt; &gt;
void destroy(T* t){} // error: has the same signature with #5
*/

// the partial specialization of A is enabled via a template parameter
template&lt;class T, class Enable = void&gt;
class A {}; // primary template

template&lt;class T&gt;
class A&lt;T, typename std::enable_if&lt;std::is_floating_point&lt;T&gt;::value&gt;::type&gt; {
}; // specialization for floating point types

int main()
{
    std::aligned_union_t&lt;0,int,std::string&gt; u;

    construct(reinterpret_cast&lt;int*&gt;(&amp;u));
    destroy(reinterpret_cast&lt;int*&gt;(&amp;u));

    construct(reinterpret_cast&lt;std::string*&gt;(&amp;u),&quot;Hello&quot;);
    destroy(reinterpret_cast&lt;std::string*&gt;(&amp;u));

    A&lt;int&gt; a1; // OK, matches the primary template
    A&lt;double&gt; a2; // OK, matches the partial specialization
}
 | output=
constructing trivially constructible T
destroying trivially destructible T
constructing non-trivially constructible T
destroying non-trivially destructible T
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc void_t}}
{{dsc end}}
* [[cpp/language/static_assert|static_assert]]
* [[cpp/language/sfinae|SFINAE]]

[[de:cpp/types/enable if]]
[[es:cpp/types/enable if]]
[[fr:cpp/types/enable if]]
[[it:cpp/types/enable if]]
[[ja:cpp/types/enable if]]
[[pt:cpp/types/enable if]]
[[ru:cpp/types/enable if]]
[[zh:cpp/types/enable if]]</text>
      <sha1>amypx4ufjtb1qh2lu6n3heqp9amp6wo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/extent</title>
    <ns>0</ns>
    <id>2719</id>
    <revision>
      <id>91236</id>
      <parentid>91218</parentid>
      <timestamp>2017-03-28T20:30:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Example */ rv, we want to illustrate the implicit conversion</comment>
      <text xml:space="preserve" bytes="2343">{{cpp/title|extent}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T, unsigned N = 0&gt;
struct extent;
}}
{{dcl end}}

If {{tt|T}} is an array type, provides the member constant {{tt|value}} equal to the number of elements along the {{tt|N}}th dimension of the array, if {{tt|N}} is in {{tt|[0, std::rank&lt;T&gt;::value)}}. For any other type, or if {{tt|T}} is array of unknown bound along its first dimension and {{tt|N}} is 0, {{tt|value}} is 0.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T, unsigned N = 0 &gt;
inline constexpr std::size_t extent_v = extent&lt;T, N&gt;::value;
}}

{{cpp/types/integral_constant/inherit2 | the number of elements along the {{tt|N}}th dimension of {{tt|T}}|std::size_t}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T, unsigned N = 0&gt;
struct extent : std::integral_constant&lt;std::size_t, 0&gt; {};

template&lt;class T&gt;
struct extent&lt;T[], 0&gt; : std::integral_constant&lt;std::size_t, 0&gt; {};

template&lt;class T, unsigned N&gt;
struct extent&lt;T[], N&gt; : std::extent&lt;T, N-1&gt; {};

template&lt;class T, std::size_t I&gt;
struct extent&lt;T[I], 0&gt; : std::integral_constant&lt;std::size_t, I&gt; {};

template&lt;class T, std::size_t I, unsigned N&gt;
struct extent&lt;T[I], N&gt; : std::extent&lt;T, N-1&gt; {};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
 
int main()
{
    std::cout &lt;&lt; std::extent&lt;int[3]&gt;::value &lt;&lt; '\n'; //&lt; default dimension is 0
    std::cout &lt;&lt; std::extent&lt;int[3][4], 0&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::extent&lt;int[3][4], 1&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::extent&lt;int[3][4], 2&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::extent&lt;int[]&gt;::value &lt;&lt; '\n';
 
    const auto ext = std::extent&lt;int[9]&gt;{};
    std::cout &lt;&lt; ext &lt;&lt; '\n'; //&lt; implicit conversion to std::size_t
 
    const int ints[] = {1,2,3,4};
    std::cout &lt;&lt; std::extent&lt;decltype(ints)&gt;::value &lt;&lt; '\n'; //&lt; array size 
}
 | output=
3
3
4
0
0
9
4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc rank}}
{{dsc inc | cpp/types/dsc remove_extent}}
{{dsc inc | cpp/types/dsc remove_all_extents}}

{{dsc end}}

[[de:cpp/types/extent]]
[[es:cpp/types/extent]]
[[fr:cpp/types/extent]]
[[it:cpp/types/extent]]
[[ja:cpp/types/extent]]
[[pt:cpp/types/extent]]
[[ru:cpp/types/extent]]
[[zh:cpp/types/extent]]</text>
      <sha1>oacqcuskimkd89xvmbft2ovcopb1mnh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/has unique object representations</title>
    <ns>0</ns>
    <id>15643</id>
    <revision>
      <id>91094</id>
      <parentid>90898</parentid>
      <timestamp>2017-03-18T18:09:19Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1834">{{cpp/title|has_unique_object_representations}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++17 | 1=
template&lt; class T &gt;
struct has_unique_object_representations;
}}
{{dcl end}}

If {{tt|T}} is {{concept|TriviallyCopyable}} and if any two objects of type {{tt|T}} with the same value have the same [[cpp/language/object|object representation]], provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

For the purpose of this trait, two arrays have the same value if their elements have the same values, two non-union classes have the same value if their direct subobjects have the same value, and two unions have the same value if they have the same active member and the value of that member are the same.

It is implementation-defined which scalar types satisfy this trait, but unsigned integer types that do not use padding bits are guaranteed to have unique object representations.

The behavior is undefined if {{tt|T}} is an incomplete type other than (possibly cv-qualified) {{c|void}} or array of unknown bound.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool has_unique_object_representations_v = has_unique_object_representations&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} has unique object representations }}

===Notes===
This trait was introduced to make it possible to determine whether a type can be correctly hashed by hashing its object representation as a byte array.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_standard_layout}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[zh:cpp/types/has_unique_object_representations]]</text>
      <sha1>1qp57toh67ml22vjwfv7gs3tkg4otwy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/has virtual destructor</title>
    <ns>0</ns>
    <id>3279</id>
    <revision>
      <id>91012</id>
      <parentid>90877</parentid>
      <timestamp>2017-03-14T12:58:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1888">{{cpp/title|has_virtual_destructor}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct has_virtual_destructor;
}}
{{dcl end}}

If {{tt|T}} is a type with a virtual destructor, provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

If {{tt|T}} is a non-union class type, {{tt|T}} shall be a complete type; otherwise, the behavior is undefined.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool has_virtual_destructor_v = has_virtual_destructor&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} has a virtual destructor }}

===Notes===
If a class has a public virtual destructor, it can be derived from, and the derived object can be safely deleted through a pointer to the base object ([http://www.gotw.ca/publications/mill18.htm  GotW #18])

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;string&gt;
#include &lt;stdexcept&gt;

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;std::string has a virtual destructor? &quot;
              &lt;&lt; std::has_virtual_destructor&lt;std::string&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;std::runtime_error has a virtual destructor? &quot;
              &lt;&lt; std::has_virtual_destructor&lt;std::runtime_error&gt;::value &lt;&lt; '\n';
}
 | output=
std::string has a virtual destructor? false
std::runtime_error has a virtual destructor? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_destructible}}

{{dsc end}}

[[de:cpp/types/has virtual destructor]]
[[es:cpp/types/has virtual destructor]]
[[fr:cpp/types/has virtual destructor]]
[[it:cpp/types/has virtual destructor]]
[[ja:cpp/types/has virtual destructor]]
[[pt:cpp/types/has virtual destructor]]
[[ru:cpp/types/has virtual destructor]]
[[zh:cpp/types/has virtual destructor]]</text>
      <sha1>lhjsaks88yxc6dwfqhb24vce5soopgg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/integer</title>
    <ns>0</ns>
    <id>2031</id>
    <revision>
      <id>89000</id>
      <parentid>87650</parentid>
      <timestamp>2016-12-20T21:27:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>templatized</comment>
      <text xml:space="preserve" bytes="6506">{{title | Fixed width integer types {{mark since c++11}}}}
{{cpp/types/navbar}}

===Types===
{{dsc begin}}
{{dsc header | cstdint}}
{{dsc inc | cpp/types/dsc intN_t}}
{{dsc inc | cpp/types/dsc int_fastN_t}}
{{dsc inc | cpp/types/dsc int_leastN_t}}
{{dsc inc | cpp/types/dsc intmax_t }}
{{dsc inc | cpp/types/dsc intptr_t }}
{{dsc inc | cpp/types/dsc uintN_t}}
{{dsc inc | cpp/types/dsc uint_fastN_t}}
{{dsc inc | cpp/types/dsc uint_leastN_t}}
{{dsc inc | cpp/types/dsc uintmax_t }}
{{dsc inc | cpp/types/dsc uintptr_t }}
{{dsc end}}

===Macro constants===
{{dsc begin}}
{{dsc header | cstdint}}
{{dsc h2 | Signed integers : minimum value}}
{{dsc inc | cpp/types/dsc INTn_MIN}}
{{dsc inc | cpp/types/dsc INT_FASTn_MIN}}
{{dsc inc | cpp/types/dsc INT_LEASTn_MIN}}
{{dsc inc | cpp/types/dsc INTPTR_MIN }}
{{dsc inc | cpp/types/dsc INTMAX_MIN }}
{{dsc h2 | Signed integers : maximum value| nolink=true }}
{{dsc inc | cpp/types/dsc INTn_MAX}}
{{dsc inc | cpp/types/dsc INT_FASTn_MAX}}
{{dsc inc | cpp/types/dsc INT_LEAST8_MAX}}
{{dsc inc | cpp/types/dsc INTPTR_MAX }}
{{dsc inc | cpp/types/dsc INTMAX_MAX }}
{{dsc h2 | Unsigned integers : maximum value| nolink=true }}
{{dsc inc | cpp/types/dsc UINTn_MAX}}
{{dsc inc | cpp/types/dsc UINT_FASTn_MAX}}
{{dsc inc | cpp/types/dsc UINT_LEASTn_MAX}}
{{dsc inc | cpp/types/dsc UINTPTR_MAX }}
{{dsc inc | cpp/types/dsc UINTMAX_MAX  }}
{{dsc end}}

===Function macros for minimum-width integer constants===

{{dsc begin}}
{{dsc inc | cpp/types/dsc INTn_C}}
{{dsc inc | cpp/types/dsc INTMAX_C }}
{{dsc inc | cpp/types/dsc UINTn_C}}
{{dsc inc | cpp/types/dsc UINTMAX_C }}
{{dsc end}}

{{source|
#include &lt;cstdint&gt;
UINT64_C(0x123) // expands to a literal of type uint64_t and value 0x123
}}

===Format macro constants===
{{dsc begin}}
{{dsc header | cinttypes}}
{{dsc end}}
====Format constants for the {{lc|std::fprintf}} family of functions====
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! rowspan=3 | Equivalent&lt;br&gt;for {{c|int}} or&lt;br&gt;{{c|unsigned int}}
! rowspan=3 | Description
! colspan=5 | Macros for data types
|-
| &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{vertical|{{lc|std::int}}'''x'''{{lc|_t}}}}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
| {{vertical|{{lc|std::int_least}}'''x'''{{lc|_t}}}}
| {{vertical|{{lc|std::int_fast}}'''x'''{{lc|_t}}}}
| rowspan=2 | {{vertical|{{lc|std::intmax_t}}}}
| rowspan=2 | {{vertical|{{lc|std::intptr_t}}}}
|-
| colspan=3 | '''x''' = 8, 16, 32 or 64
|-
! {{tt|d}}
| rowspan=2 style=&quot;text-align:left;&quot; | output of a signed decimal integer value
| PRId'''x'''
| PRIdLEAST'''x'''
| PRIdFAST'''x'''
| PRIdMAX
| PRIdPTR
|-
! {{tt|i}}
| PRIi'''x'''
| PRIiLEAST'''x'''
| PRIiFAST'''x'''
| PRIiMAX
| PRIiPTR
|-
! {{tt|u}}
| style=&quot;text-align:left;&quot; | output of an unsigned decimal integer value
| PRIu'''x'''
| PRIuLEAST'''x'''
| PRIuFAST'''x'''
| PRIuMAX
| PRIuPTR
|-
! {{tt|o}}
| style=&quot;text-align:left;&quot; | output of an unsigned octal integer value
| PRIo'''x'''
| PRIoLEAST'''x'''
| PRIoFAST'''x'''
| PRIoMAX
| PRIoPTR
|-
! {{tt|x}}
| style=&quot;text-align:left;&quot; | output of an unsigned lowercase hexadecimal integer value
| PRIx'''x'''
| PRIxLEAST'''x'''
| PRIxFAST'''x'''
| PRIxMAX
| PRIxPTR
|-
! {{tt|X}}
| style=&quot;text-align:left;&quot; | output of an unsigned uppercase hexadecimal integer value
| PRIX'''x'''
| PRIXLEAST'''x'''
| PRIXFAST'''x'''
| PRIXMAX
| PRIXPTR
|}
====Format constants for the {{lc|std::fscanf}} family of functions====
{| class=&quot;wikitable&quot; style=&quot;text-align:center; font-size:85%; max-width:90em;&quot;
|-
! rowspan=3 | Equivalent&lt;br&gt;for {{c|int}} or&lt;br&gt;{{c|unsigned int}}
! rowspan=3 | Description
! colspan=5 | Macros for data types
|-
| &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;{{vertical|{{lc|std::int}}'''x'''{{lc|_t}}}}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
| {{vertical|{{lc|std::int_least}}'''x'''{{lc|_t}}}}
| {{vertical|{{lc|std::int_fast}}'''x'''{{lc|_t}}}}
| rowspan=2 | {{vertical|{{lc|std::intmax_t}}}}
| rowspan=2 | {{vertical|{{lc|std::intptr_t}}}}
|-
| colspan=3 | '''x''' = 8, 16, 32 or 64
|-
! {{tt|d}}
| style=&quot;text-align:left;&quot; | input of a signed decimal integer value
| SCNd'''x'''
| SCNdLEAST'''x'''
| SCNdFAST'''x'''
| SCNdMAX
| SCNdPTR
|-
! {{tt|i}}
| style=&quot;text-align:left;&quot; | input of a signed integer value
| SCNi'''x'''
| SCNiLEAST'''x'''
| SCNiFAST'''x'''
| SCNiMAX
| SCNiPTR
|-
! {{tt|u}}
| style=&quot;text-align:left;&quot; | input of an unsigned decimal integer value
| SCNu'''x'''
| SCNuLEAST'''x'''
| SCNuFAST'''x'''
| SCNuMAX
| SCNuPTR
|-
! {{tt|o}}
| style=&quot;text-align:left;&quot; | input of an unsigned octal integer value
| SCNo'''x'''
| SCNoLEAST'''x'''
| SCNoFAST'''x'''
| SCNoMAX
| SCNoPTR
|-
! {{tt|x}}
| style=&quot;text-align:left;&quot; | input of an unsigned hexadecimal integer value
| SCNx'''x'''
| SCNxLEAST'''x'''
| SCNxFAST'''x'''
| SCNxMAX
| SCNxPTR
|}
&lt;!-- note: SCNX* macros listed in [c.files] of C++11 and C++14 do not exist; they were an editorial error corrected in a post-C++14 standard draft --&gt;

===Notes===
Because C++ interprets a character immediately following a string literal as a [[cpp/language/user_literal|user-defined string literal]], C code such as {{c|printf(&quot;%&quot;PRId64&quot;\n&quot;,n);}} is invalid C++ and requires a space before {{tt|PRId64}}.

The C99 standard suggests that C++ implementations should not define the above limit, constant, or format macros unless the macros {{tt|__STDC_LIMIT_MACROS}}, {{tt|__STDC_CONSTANT_MACROS}} or {{tt|__STDC_FORMAT_MACROS}} (respectively) are defined before including the relevant C header ({{tt|stdint.h}} or {{tt|inttypes.h}}). This recommendation was not adopted by any C++ standard and was removed in C11. However, some implementations (such as glibc 2.17) try to apply this rule, and it may be necessary to define the {{tt|__STDC}} macros; C++ compilers may try to work around this by automatically defining them in some circumstances.

===Example===
{{example |
 | code=
#include &lt;cstdio&gt;
#include &lt;cinttypes&gt;

int main()
{
    std::printf(&quot;%zu\n&quot;, sizeof(std::int64_t));
    std::printf(&quot;%s\n&quot;, PRId64);
    std::printf(&quot;%+&quot; PRId64 &quot;\n&quot;, INT64_MIN);
    std::printf(&quot;%+&quot; PRId64 &quot;\n&quot;, INT64_MAX);

    std::int64_t n = 7;
    std::printf(&quot;%+&quot; PRId64 &quot;\n&quot;, n);
}
 | p=true
 | output=
8
lld
-9223372036854775808
+9223372036854775807
+7
}}

===See also===
* [[cpp/language/types | Fundamental types]]
{{dsc begin}}
{{dsc see c | c/types/integer | Fixed width integer types}}
{{dsc end}}

[[de:cpp/types/integer]]
[[es:cpp/types/integer]]
[[fr:cpp/types/integer]]
[[it:cpp/types/integer]]
[[ja:cpp/types/integer]]
[[pt:cpp/types/integer]]
[[ru:cpp/types/integer]]
[[zh:cpp/types/integer]]</text>
      <sha1>mh8dlnknp107c6f4kkzgac966amnc67</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/integral constant</title>
    <ns>0</ns>
    <id>2760</id>
    <revision>
      <id>91930</id>
      <parentid>90540</parentid>
      <timestamp>2017-03-31T20:02:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3542">{{cpp/title|integral_constant}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T, T v &gt;
struct integral_constant;
}}
{{dcl end}}

{{lc|std::integral_constant}} wraps a static constant of specified type. It is the base class for the C++ type traits. 

{{rev begin}}
{{rev|since=c++17|
===Helper templates===
A helper alias template {{ttb|std::bool_constant}} is defined for the common case where {{tt|T}} is {{c|bool}}.
{{ddcl | 1=
template &lt;bool B&gt;
using bool_constant = integral_constant&lt;bool, B&gt;;
}}
}}
{{rev end}}

Two typedefs for the common case where {{tt|T}} is {{c|bool}} are provided: 

{{dsc begin}}
{{dsc header | type_traits}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|true_type}} | {{c|std::integral_constant&lt;bool, true&gt;}} }}
{{dsc | {{tt|false_type}} | {{c|std::integral_constant&lt;bool, false&gt;}} }}
{{dsc end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc | {{tt|type}} | {{c|std::integral_constant&lt;T,v&gt;}} }}
{{dsc end}}

===Member constants===
{{dsc begin}}
{{dsc hitem | Name | Value }}
{{dsc mem sconst | nolink=true | {{dsc small|constexpr T}} value | static constant of type {{tt|T}} with value {{tt|v}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/types/integral_constant/dsc operator value_type}}
{{dsc inc | cpp/types/integral_constant/dsc operator()}}
{{dsc end}}
{{member | {{small|std::integral_constant::}}operator value_type | 2=
{{ddcl|1=
constexpr operator value_type() const;
}}
Conversion function. Returns the wrapped value.

===Exceptions===
{{unreviewed noexcept}}

}}
{{member | {{small|std::integral_constant::}}operator() | 2=
{{ddcl | notes={{mark since c++14}} |1=
constexpr value_type operator()() const;
}}
Returns the wrapped value. This function enables {{c|std::integral_constant}} to serve as a source of compile-time function objects.

===Exceptions===
{{unreviewed noexcept}}

}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T, T v&gt;
struct integral_constant {
    static constexpr T value = v;
    typedef T value_type;
    typedef integral_constant type; // using injected-class-name
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; } //since c++14
};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() 
{
    typedef std::integral_constant&lt;int, 2&gt; two_t;
    typedef std::integral_constant&lt;int, 4&gt; four_t;

//  static_assert(std::is_same&lt;two_t, four_t&gt;::value,
//                &quot;two_t and four_t are not equal!&quot;); 
//  error: static assertion failed: &quot;two_t and four_t are not equal!&quot;

    static_assert(two_t::value*2 == four_t::value,
       &quot;2*2 != 4&quot;
    );

    enum class my_e {
       e1,
       e2
    };
    typedef std::integral_constant&lt;my_e, my_e::e1&gt; my_e_e1;
    typedef std::integral_constant&lt;my_e, my_e::e2&gt; my_e_e2;

//  static_assert(my_e_e1::value == my_e::e2,
//               &quot;my_e_e1::value != my_e::e2&quot;);
//  error: static assertion failed: &quot;my_e_e1::value != my_e::e2&quot;

    static_assert(std::is_same&lt;my_e_e2, my_e_e2&gt;::value,
                  &quot;my_e_e2 != my_e_e2&quot;);
}
 | output=
}}

[[de:cpp/types/integral constant]]
[[es:cpp/types/integral constant]]
[[fr:cpp/types/integral constant]]
[[it:cpp/types/integral constant]]
[[ja:cpp/types/integral constant]]
[[pt:cpp/types/integral constant]]
[[ru:cpp/types/integral constant]]
[[zh:cpp/types/integral constant]]</text>
      <sha1>i0629ngh33ldf9dxfq7deefd5hfnpjt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is abstract</title>
    <ns>0</ns>
    <id>3181</id>
    <revision>
      <id>91005</id>
      <parentid>90875</parentid>
      <timestamp>2017-03-14T12:58:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1745">{{cpp/title|is_abstract}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_abstract;
}}
{{dcl end}}

If {{tt|T}} is an [[cpp/language/abstract_class|abstract class]] (that is, a non-union class that declares or inherits at least one pure virtual function), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

If {{tt|T}} is a non-union class type, {{tt|T}} shall be a complete type; otherwise, the behavior is undefined.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_abstract_v = is_abstract&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an [[cpp/language/abstract_class|abstract class]] type }}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {
    int m;
};

struct B {
    virtual void foo();
};

struct C {
    virtual void foo() = 0;
};

struct D : C {};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_abstract&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_abstract&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_abstract&lt;C&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_abstract&lt;D&gt;::value &lt;&lt; '\n';
}
 | output=
false
false
true
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_class}}
{{dsc inc | cpp/types/dsc is_polymorphic}}

{{dsc end}}

[[de:cpp/types/is abstract]]
[[es:cpp/types/is abstract]]
[[fr:cpp/types/is abstract]]
[[it:cpp/types/is abstract]]
[[ja:cpp/types/is abstract]]
[[pt:cpp/types/is abstract]]
[[ru:cpp/types/is abstract]]
[[zh:cpp/types/is abstract]]</text>
      <sha1>1h48opglnqm6pn6dmy4xwooesj8gp4c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is aggregate</title>
    <ns>0</ns>
    <id>16197</id>
    <revision>
      <id>91229</id>
      <parentid>91095</parentid>
      <timestamp>2017-03-28T16:21:33Z</timestamp>
      <contributor>
        <ip>108.197.12.121</ip>
      </contributor>
      <comment>Double inline on is_aggregate_v</comment>
      <text xml:space="preserve" bytes="872">{{cpp/title|is_aggregate}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++17 | 1=
template&lt; class T &gt;
struct is_aggregate;
}}
{{dcl end}}

Checks if {{tt|T}} is an [[cpp/language/aggregate initialization|aggregate type]]. The member constant {{tt|value}} is equal to {{c|true}} if {{tt|T}} is an aggregate type and {{c|false}} otherwise.

The behavior is undefined if {{c|std::remove_all_extents_t&lt;T&gt;}} is an incomplete type other than (possibly cv-qualified) {{c|void}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_aggregate_v = std::is_aggregate&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an aggregate type }}


===Example===
{{example
}}

[[zh:cpp/types/is_aggregate]]</text>
      <sha1>pc64j6g363vp054yzdy7c9w9opd969m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is arithmetic</title>
    <ns>0</ns>
    <id>3173</id>
    <revision>
      <id>91009</id>
      <parentid>90896</parentid>
      <timestamp>2017-03-14T12:58:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2773">{{cpp/title|is_arithmetic}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_arithmetic;
}}
{{dcl end}}

If {{tt|T}} is an arithmetic type (that is, an integral type or a floating-point type), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_arithmetic_v = is_arithmetic&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an arithmetic type }}

===Notes===
Arithmetic types are the types for which the built-in [[cpp/language/operator_arithmetic|arithmetic operators]] (+, -, *, /) are defined (possibly in combination with the usual arithmetic conversions)

Specializations of {{lc|std::numeric_limits}} are provided for all arithmetic types.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_arithmetic : std::integral_constant&lt;bool,
                                              std::is_integral&lt;T&gt;::value {{!!}}
                                              std::is_floating_point&lt;T&gt;::value&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
 
class A {};
 
int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;A:           &quot; &lt;&lt;  std::is_arithmetic&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;bool         &quot; &lt;&lt;  std::is_arithmetic&lt;bool&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;int:         &quot; &lt;&lt;  std::is_arithmetic&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;int const:   &quot; &lt;&lt;  std::is_arithmetic&lt;int const&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;int &amp;:       &quot; &lt;&lt;  std::is_arithmetic&lt;int&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;int *:       &quot; &lt;&lt;  std::is_arithmetic&lt;int*&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;float:       &quot; &lt;&lt;  std::is_arithmetic&lt;float&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;float const: &quot; &lt;&lt;  std::is_arithmetic&lt;float const&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;float &amp;:     &quot; &lt;&lt;  std::is_arithmetic&lt;float&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;float *:     &quot; &lt;&lt;  std::is_arithmetic&lt;float*&gt;::value &lt;&lt; '\n';
}
 | output=
A:           false
bool:        true
int:         true
int const:   true
int &amp;:       false
int *:       false
float:       true
float const: true
float &amp;:     false
float *:     false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc inc | cpp/types/dsc is_floating_point}}

{{dsc end}}

[[de:cpp/types/is arithmetic]]
[[es:cpp/types/is arithmetic]]
[[fr:cpp/types/is arithmetic]]
[[it:cpp/types/is arithmetic]]
[[ja:cpp/types/is arithmetic]]
[[pt:cpp/types/is arithmetic]]
[[ru:cpp/types/is arithmetic]]
[[zh:cpp/types/is arithmetic]]</text>
      <sha1>b24i0q3uq7rj7gbejf7a18cneqrpba3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is array</title>
    <ns>0</ns>
    <id>2718</id>
    <revision>
      <id>90964</id>
      <parentid>90913</parentid>
      <timestamp>2017-03-14T12:57:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1861">{{cpp/title|is_array}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_array;
}}
{{dcl end}}

Checks whether {{tt|T}} is an array type. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is an array type. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_array_v = is_array&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is an array type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
struct is_array : std::false_type {};

template&lt;class T&gt;
struct is_array&lt;T[]&gt; : std::true_type {};

template&lt;class T, std::size_t N&gt;
struct is_array&lt;T[N]&gt; : std::true_type {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_array&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_array&lt;A[]&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_array&lt;A[3]&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_array&lt;float&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_array&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_array&lt;int[]&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_array&lt;int[3]&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
true
false
false
true
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc rank}}
{{dsc inc | cpp/types/dsc extent}}
{{dsc inc | cpp/types/dsc remove_extent}}
{{dsc inc | cpp/types/dsc remove_all_extents}}

{{dsc end}}

[[de:cpp/types/is array]]
[[es:cpp/types/is array]]
[[fr:cpp/types/is array]]
[[it:cpp/types/is array]]
[[ja:cpp/types/is array]]
[[pt:cpp/types/is array]]
[[ru:cpp/types/is array]]
[[zh:cpp/types/is array]]</text>
      <sha1>1cs1v64rmerrrhlvgf44w5upes2nb7d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is assignable</title>
    <ns>0</ns>
    <id>3262</id>
    <revision>
      <id>90956</id>
      <parentid>90906</parentid>
      <timestamp>2017-03-14T12:57:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="3720">{{cpp/title|is_assignable|is_trivially_assignable|is_nothrow_assignable}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T, class U &gt;
struct is_assignable;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T, class U &gt;
struct is_trivially_assignable;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T, class U &gt;
struct is_nothrow_assignable;
}}
{{dcl end}}

@1@ If the expression {{c|1=std::declval&lt;T&gt;() = std::declval&lt;U&gt;()}} is well-formed in unevaluated context, provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}. [[cpp/language/access|Access checks]] are performed as if from a context unrelated to either type. 
@2@ same as {{v|1}}, but the evaluation of the assignment expression will not call any operation that is not trivial. For the purposes of this check, a call to {{lc|std::declval}} is considered trivial and not considered an [[cpp/language/definition#ODR-use|odr-use]] of {{lc|std::declval}}.
@3@ same as {{v|1}}, but the evaluation of the assignment expression will not call any operation that is not noexcept.

{{cpp/types/cvaub|type2=U}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T, class U &gt;
inline constexpr bool is_assignable_v = is_assignable&lt;T, U&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T, class U &gt;
inline constexpr bool is_trivially_assignable_v = is_trivially_assignable&lt;T, U&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T, class U &gt;
inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable&lt;T, U&gt;::value;
}}
{{dcl end}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is assignable from {{tt|U}} }}

===Notes===
This trait does not check anything outside the immediate context of the assignment expression: if the use of {{tt|T}} or {{tt|U}} would trigger template specializations, generation of implicitly-defined special member functions etc, and those have errors, the actual assignment may not compile even if {{tt|std::is_assignable&lt;T,U&gt;::value}} compiles and evaluates to {{tt|true}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;type_traits&gt;
struct Ex1 { int n; };
int main() {
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;int is assignable from int? &quot;
              &lt;&lt; std::is_assignable&lt;int, int&gt;::value &lt;&lt; '\n' // 1 = 1; wouldn't compile
              &lt;&lt; &quot;int&amp; is assignable from int? &quot;
              &lt;&lt; std::is_assignable&lt;int&amp;, int&gt;::value &lt;&lt; '\n' // int a; a = 1; works
              &lt;&lt; &quot;int is assignable from double? &quot;
              &lt;&lt; std::is_assignable&lt;int, double&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;int&amp; is nothrow assignable from double? &quot;
              &lt;&lt; std::is_nothrow_assignable&lt;int&amp;, double&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;string is assignable from double? &quot;
              &lt;&lt; std::is_assignable&lt;std::string, double&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex1&amp; is trivially assignable from const Ex1&amp;? &quot;
              &lt;&lt; std::is_trivially_assignable&lt;Ex1&amp;, const Ex1&amp;&gt;::value &lt;&lt; '\n';
}
 | output=
int is assignable from int? false
int&amp; is assignable from int? true
int is assignable from double? false
int&amp; is nothrow assignable from double? true
string is assignable from double? true
Ex1&amp; is trivially assignable from const Ex1&amp;? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_copy_assignable}}
{{dsc inc | cpp/types/dsc is_move_assignable}}



{{dsc end}}

[[de:cpp/types/is assignable]]
[[es:cpp/types/is assignable]]
[[fr:cpp/types/is assignable]]
[[it:cpp/types/is assignable]]
[[ja:cpp/types/is assignable]]
[[pt:cpp/types/is assignable]]
[[ru:cpp/types/is assignable]]
[[zh:cpp/types/is assignable]]</text>
      <sha1>ldlrtn9vr9807y1whjopvl2d7ewhef4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is base of</title>
    <ns>0</ns>
    <id>3187</id>
    <revision>
      <id>90980</id>
      <parentid>90871</parentid>
      <timestamp>2017-03-14T12:58:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="3106">{{cpp/title|is_base_of}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class Base, class Derived &gt;
struct is_base_of;
}}
{{dcl end}}

If {{tt|Derived}} is derived from {{tt|Base}} or if both are the same non-union class, provides the member constant {{tt|value}} equal to {{c|true}}. Otherwise {{tt|value}} is {{c|false}}.

If both {{tt|Base}} and {{tt|Derived}} are non-union class types, and they are not the same type (ignoring cv-qualification), {{tt|Derived}} shall be a [[cpp/language/incomplete type|complete type]]; otherwise the behavior is undefined.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class Base, class Derived &gt;
inline constexpr bool is_base_of_v = is_base_of&lt;Base, Derived&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|Derived}} is derived from {{tt|Base}} }}

===Notes===
Although no class is its own base, {{c|std::is_base_of&lt;T, T&gt;::value}} is true because the intent of the trait is to model the &quot;is-a&quot; relationship, and T is a T. Despite that, {{c|std::is_base_of&lt;int, int&gt;::value}} is false because only classes participate in the relationship that this trait models.

===Possible Implementation===
{{eq fun|1=
namespace details {
    template &lt;typename Base&gt; std::true_type is_base_of_test_func(Base*);
    template &lt;typename Base&gt; std::false_type is_base_of_test_func(void*);
    template &lt;typename Base, typename Derived&gt;
    using pre_is_base_of = decltype(is_base_of_test_func&lt;Base&gt;(std::declval&lt;Derived*&gt;()));

    // with &lt;experimental/type_traits&gt;:
    // template &lt;typename Base, typename Derived&gt;
    // using pre_is_base_of2 = std::experimental::detected_or_t&lt;std::true_type, pre_is_base_of, Base, Derived&gt;;
    template &lt;typename Base, typename Derived, typename = void&gt;
    struct pre_is_base_of2 : public std::true_type { };
    // note std::void_t is a C++17 feature
    template &lt;typename Base, typename Derived&gt;
    struct pre_is_base_of2&lt;Base, Derived, std::void_t&lt;pre_is_base_of&lt;Base, Derived&gt;&gt;&gt; :
        public pre_is_base_of&lt;Base, Derived&gt; { };
}

template &lt;typename Base, typename Derived&gt;
struct is_base_of :
    public std::conditional_t&lt;
        std::is_class&lt;Base&gt;::value &amp;&amp; std::is_class&lt;Derived&gt;::value,
        details::pre_is_base_of2&lt;Base, Derived&gt;,
        std::false_type
    &gt; { };
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

class B : A {};

class C {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;a2b: &quot; &lt;&lt; std::is_base_of&lt;A, B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b2a: &quot; &lt;&lt; std::is_base_of&lt;B, A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;c2b: &quot; &lt;&lt; std::is_base_of&lt;C, B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;same type: &quot; &lt;&lt; std::is_base_of&lt;C, C&gt;::value &lt;&lt; '\n';
}
 | output=
a2b: true
b2a: false
c2b: false
same type: true
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/types/is base of]]
[[es:cpp/types/is base of]]
[[fr:cpp/types/is base of]]
[[it:cpp/types/is base of]]
[[ja:cpp/types/is base of]]
[[pt:cpp/types/is base of]]
[[ru:cpp/types/is base of]]
[[zh:cpp/types/is base of]]</text>
      <sha1>g2mnn1nye0evg5qvm47qvf6dr75ti6a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is class</title>
    <ns>0</ns>
    <id>3140</id>
    <revision>
      <id>90991</id>
      <parentid>90918</parentid>
      <timestamp>2017-03-14T12:58:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1833">{{cpp/title|is_class}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_class;
}}
{{dcl end}}

Checks whether {{tt|T}} is a class type. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is a class type (but not union). Otherwise, {{tt|value}} is equal to {{c|false}}.

Note that types declared with the {{tt|struct}} keyword are classes, so this trait is {{c|true}} for &quot;structs&quot;.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_class_v = is_class&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is a class or struct }}

===Possible implementation===
{{eq fun
 | 1=
namespace detail {
    template &lt;class T&gt; char test(int T::*);
    struct two { char c[2]; };
    template &lt;class T&gt; two test(...);
}

template &lt;class T&gt;
struct is_class : std::integral_constant&lt;bool, sizeof(detail::test&lt;T&gt;(0))==1
                                            &amp;&amp; !std::is_union&lt;T&gt;::value&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {};

class B {};

enum class C {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_class&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_class&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_class&lt;C&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_class&lt;int&gt;::value &lt;&lt; '\n';
}
 | output=
true
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_union}}

{{dsc end}}

[[de:cpp/types/is class]]
[[es:cpp/types/is class]]
[[fr:cpp/types/is class]]
[[it:cpp/types/is class]]
[[ja:cpp/types/is class]]
[[pt:cpp/types/is class]]
[[ru:cpp/types/is class]]
[[zh:cpp/types/is class]]</text>
      <sha1>cj5c784v51e12cynlwf0st6xc6uaub7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is compound</title>
    <ns>0</ns>
    <id>3144</id>
    <revision>
      <id>90979</id>
      <parentid>90899</parentid>
      <timestamp>2017-03-14T12:58:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1960">{{cpp/title|is_compound}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_compound;
}}
{{dcl end}}

If {{tt|T}} is a compound type (that is, array, function, object pointer, function pointer, member object pointer, member function pointer, reference, class, union, or enumeration, including any cv-qualified variants), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_compound_v = is_compound&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a compound type }}

===Notes===
Compound types are the types that are constructed from fundamental types. Any C++ type is either fundamental or compound.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_compound : std::integral_constant&lt;bool, !std::is_fundamental&lt;T&gt;::value&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
    class cls {};
    std::cout &lt;&lt; (std::is_compound&lt;cls&gt;::value
                     ? &quot;T is compound&quot;
                     : &quot;T is not a compound&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; (std::is_compound&lt;int&gt;::value
                     ? &quot;T is compound&quot;
                     : &quot;T is not a compound&quot;) &lt;&lt; '\n';
}

 | output=
T is compound
T is not a compound
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_fundamental}}
{{dsc inc | cpp/types/dsc is_scalar}}
{{dsc inc | cpp/types/dsc is_object}}
{{dsc inc | cpp/types/dsc is_array}}

{{dsc end}}

[[de:cpp/types/is compound]]
[[es:cpp/types/is compound]]
[[fr:cpp/types/is compound]]
[[it:cpp/types/is compound]]
[[ja:cpp/types/is compound]]
[[pt:cpp/types/is compound]]
[[ru:cpp/types/is compound]]
[[zh:cpp/types/is compound]]</text>
      <sha1>tpikdui4vguhgzap6ldpdtqkvwcwpwy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is const</title>
    <ns>0</ns>
    <id>3176</id>
    <revision>
      <id>90972</id>
      <parentid>90894</parentid>
      <timestamp>2017-03-14T12:58:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1672">{{cpp/title|is_const}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_const;
}}
{{dcl end}}

If {{tt|T}} is a const-qualified type (that is, {{c|const}}, or {{c|const volatile}}), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_const_v = is_const&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a const-qualified type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt; struct is_const          : std::false_type {};
template&lt;class T&gt; struct is_const&lt;const T&gt; : std::true_type {};
}}

===Example===
{{example
 | code=#include &lt;iostream&gt;
#include &lt;type_traits&gt;
 
int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_const&lt;int&gt;::value &lt;&lt; '\n'; // false
    std::cout &lt;&lt; std::is_const&lt;const int&gt;::value  &lt;&lt; '\n'; // true
    std::cout &lt;&lt; std::is_const&lt;const int*&gt;::value  &lt;&lt; '\n'; // false
    std::cout &lt;&lt; std::is_const&lt;int* const&gt;::value  &lt;&lt; '\n'; // true
    std::cout &lt;&lt; std::is_const&lt;const int&amp;&gt;::value  &lt;&lt; '\n'; // false
}

 | output=
false
true
false
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_volatile}}

{{dsc inc | cpp/utility/dsc as_const}}
{{dsc end}}

[[de:cpp/types/is const]]
[[es:cpp/types/is const]]
[[fr:cpp/types/is const]]
[[it:cpp/types/is const]]
[[ja:cpp/types/is const]]
[[pt:cpp/types/is const]]
[[ru:cpp/types/is const]]
[[zh:cpp/types/is const]]</text>
      <sha1>6sc0qec548h82itf70gfkqsf8n1up0z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is constructible</title>
    <ns>0</ns>
    <id>3249</id>
    <revision>
      <id>90959</id>
      <parentid>90881</parentid>
      <timestamp>2017-03-14T12:57:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="4216">{{cpp/title|is_constructible|is_trivially_constructible|is_nothrow_constructible}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T, class... Args &gt;
struct is_constructible;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T, class... Args &gt;
struct is_trivially_constructible;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T, class... Args &gt;
struct is_nothrow_constructible;
}}
{{dcl end}}

1) If {{tt|T}} is an object or reference type and the variable definition {{c|T obj(std::declval&lt;Args&gt;()...);}} is well-formed, provides the member constant {{tt|value}} equal to {{c|true}}. In all other cases, {{tt|value}} is {{c|false}}.

For the purposes of this check, the variable definition is never interpreted as a function declaration, and the use of {{lc|std::declval}} is not considered an [[cpp/language/definition#ODR-use|odr-use]]. [[cpp/language/access|Access checks]] are performed as if from a context unrelated to {{tt|T}} and any of the types in {{tt|Args}}. Only the validity of the immediate context of the variable definition is considered.

2) same as 1), but the variable definition does not call any operation that is not trivial. For the purposes of this check, the call to {{lc|std::declval}} is considered trivial.

3) same as 1), but the variable definition is {{tt|noexcept}}.

{{cpp/types/cvaub|pack=Args}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T, class... Args &gt;
inline constexpr bool is_constructible_v = is_constructible&lt;T, Args...&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T, class... Args &gt;
inline constexpr bool is_trivially_constructible_v = is_trivially_constructible&lt;T, Args...&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T, class... Args &gt;
inline constexpr bool is_nothrow_constructible_v = is_nothrow_constructible&lt;T, Args...&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is constructible from {{tt|Args...}} }}

===Notes===
In many implementations, {{tt|is_nothrow_constructible}} also checks if the destructor throws because it is effectively {{c|noexcept(T(arg))}}. Same applies to {{tt|is_trivially_constructible}}, which, in these implementations, also requires that the destructor is trivial: [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51452 GCC bug 51452] [http://cplusplus.github.io/LWG/lwg-active.html#2116 LWG issue 2116].

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class Foo {
    int v1;
    double v2;
 public:
    Foo(int n) : v1(n), v2() {}
    Foo(int n, double f) noexcept : v1(n), v2(f) {}
};

int main() {
    std::cout &lt;&lt; &quot;Foo is ...\n&quot; &lt;&lt; std::boolalpha
              &lt;&lt; &quot;\tTrivially-constructible from const Foo&amp;? &quot;
              &lt;&lt; std::is_trivially_constructible&lt;Foo, const Foo&amp;&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;\tTrivially-constructible from int? &quot;
              &lt;&lt; std::is_trivially_constructible&lt;Foo, int&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;\tConstructible from int? &quot;
              &lt;&lt; std::is_constructible&lt;Foo, int&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;\tNothrow-constructible from int? &quot;
              &lt;&lt; std::is_nothrow_constructible&lt;Foo, int&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;\tNothrow-constructible from int and double? &quot;
              &lt;&lt; std::is_nothrow_constructible&lt;Foo, int, double&gt;::value &lt;&lt; '\n';
}
 | output=
Foo is ...
        Trivially-constructible from const Foo&amp;? true
        Trivially-constructible from int? false
        Constructible from int? true
        Nothrow-constructible from int? false
        Nothrow-constructible from int and double? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_default_constructible}}
{{dsc inc | cpp/types/dsc is_copy_constructible}}
{{dsc inc | cpp/types/dsc is_move_constructible}}
{{dsc inc | cpp/memory/dsc uses_allocator}} &lt;!-- example of practical use of is_constructible --&gt;



{{dsc end}}

[[de:cpp/types/is constructible]]
[[es:cpp/types/is constructible]]
[[fr:cpp/types/is constructible]]
[[it:cpp/types/is constructible]]
[[ja:cpp/types/is constructible]]
[[pt:cpp/types/is constructible]]
[[ru:cpp/types/is constructible]]
[[zh:cpp/types/is constructible]]</text>
      <sha1>rxi30bdqwjg99kvrmmfgxh6ccc0kn3m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is convertible</title>
    <ns>0</ns>
    <id>3188</id>
    <revision>
      <id>90996</id>
      <parentid>90911</parentid>
      <timestamp>2017-03-14T12:58:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2168">{{cpp/title|is_convertible}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class From, class To &gt;
struct is_convertible;
}}
{{dcl end}}

If the imaginary function definition {{c|To test() { return std::declval&lt;From&gt;(); } }} is well-formed, (that is, either {{c|std::declval&lt;From&gt;()}} can be converted to {{tt|To}} using [[cpp/language/implicit_cast|implicit conversion]], or both {{tt|From}} and {{tt|To}} are possibly cv-qualified {{tt|void}}), provides the member constant {{tt|value}} equal to {{c|true}}. Otherwise {{tt|value}} is {{c|false}}. For the purposes of this check, the use of {{lc|std::declval}} is in the return statement is not considered an [[cpp/language/definition#ODR-use|odr-use]].

[[cpp/language/access|Access checks]] are performed as if from a context unrelated to either type. Only the validity of the immediate context of the expression in the return statement (including conversions to the return type) is considered.

{{cpp/types/cvaub|type1=From|type2=To}}

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class From, class To &gt;
inline constexpr bool is_convertible_v = is_convertible&lt;From, To&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|From}} is convertible to {{tt|To}} }}

===Notes===
Gives well-defined results for reference types, void types, array types, and function types.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() 
{
    class A {};
    class B : public A {};
    class C {};
    
    bool b2a = std::is_convertible&lt;B*, A*&gt;::value;
    bool a2b = std::is_convertible&lt;A*, B*&gt;::value;
    bool b2c = std::is_convertible&lt;B*, C*&gt;::value;
   
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; b2a &lt;&lt; '\n';
    std::cout &lt;&lt; a2b &lt;&lt; '\n';
    std::cout &lt;&lt; b2c &lt;&lt; '\n';
}
 | output=
true
false
false
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/types/is convertible]]
[[es:cpp/types/is convertible]]
[[fr:cpp/types/is convertible]]
[[it:cpp/types/is convertible]]
[[ja:cpp/types/is convertible]]
[[pt:cpp/types/is convertible]]
[[ru:cpp/types/is convertible]]
[[zh:cpp/types/is convertible]]</text>
      <sha1>34hbr6otv57sfmka4di1r0pvxjgas6p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is copy assignable</title>
    <ns>0</ns>
    <id>3272</id>
    <revision>
      <id>91003</id>
      <parentid>90920</parentid>
      <timestamp>2017-03-14T12:58:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="3704">{{cpp/title|is_copy_assignable|is_trivially_copy_assignable|is_nothrow_copy_assignable}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct is_copy_assignable;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct is_trivially_copy_assignable;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct is_nothrow_copy_assignable;
}}
{{dcl end}}

@1@ If {{tt|T}} is not a referenceable type (i.e., possibly cv-qualified {{c|void}} or a function type with a ''cv-qualifier-seq'' or a ''ref-qualifier''), provides a member constant {{tt|value}} equal to {{c|false}}. Otherwise, provides a member constant {{tt|value}} equal to {{c|std::is_assignable&lt;T&amp;, const T&amp;&gt;::value}}.
@2@ Same as 1), but uses {{c|std::is_trivially_assignable&lt;T&amp;, const T&amp;&gt;}}
@2@ Same as 1), but uses {{c|std::is_nothrow_assignable&lt;T&amp;, const T&amp;&gt;}}

{{cpp/types/cvaub}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_copy_assignable_v = is_copy_assignable&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivially_copy_assignable_v = is_trivially_copy_assignable&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable&lt;T&gt;::value;
}}
{{dcl end}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is copy-assignable}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T&gt;
struct is_copy_assignable
    : std::is_assignable&lt; typename std::add_lvalue_reference&lt;T&gt;::type,
                          typename std::add_lvalue_reference&lt;const T&gt;::type&gt; {};

template&lt; class T&gt;
struct is_trivially_copy_assignable
    : std::is_trivially_assignable&lt; typename std::add_lvalue_reference&lt;T&gt;::type,
                                    typename std::add_lvalue_reference&lt;const T&gt;::type&gt; {};

template&lt; class T&gt;
struct is_nothrow_copy_assignable
    : std::is_nothrow_assignable&lt; typename std::add_lvalue_reference&lt;T&gt;::type,
                                  typename std::add_lvalue_reference&lt;const T&gt;::type&gt; {};
}}

===Notes===
The trait {{tt|std::is_copy_assignable}} is less strict than {{concept|CopyAssignable}} because it does not check the type of the result of the assignment (which, for a {{concept|CopyAssignable}} type, must be an lvalue of type {{tt|T}}) and does not check the semantic requirement that the argument expression remains unchanged. It also does not check that {{tt|T}} satisfies {{concept|MoveAssignable}}, which is required of all {{concept|CopyAssignable}} types.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;type_traits&gt;
struct Foo { int n; };
int main() {
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;Foo is trivally copy-assignable? &quot;
              &lt;&lt; std::is_trivially_copy_assignable&lt;Foo&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;int[2] is copy-assignable? &quot;
              &lt;&lt; std::is_copy_assignable&lt;int[2]&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;int is nothrow copy-assignable? &quot;
              &lt;&lt; std::is_nothrow_copy_assignable&lt;int&gt;::value &lt;&lt; '\n';
}
 | output=
Foo is trivally copy-assignable? true
int[2] is copy-assignable? false
int is nothrow copy-assignable? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_assignable}}
{{dsc inc | cpp/types/dsc is_move_assignable}}



{{dsc end}}

[[de:cpp/types/is copy assignable]]
[[es:cpp/types/is copy assignable]]
[[fr:cpp/types/is copy assignable]]
[[it:cpp/types/is copy assignable]]
[[ja:cpp/types/is copy assignable]]
[[pt:cpp/types/is copy assignable]]
[[ru:cpp/types/is copy assignable]]
[[zh:cpp/types/is copy assignable]]</text>
      <sha1>4h0cea7uxk9lqoivzydu9alcfvsypzq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is copy constructible</title>
    <ns>0</ns>
    <id>3257</id>
    <revision>
      <id>90954</id>
      <parentid>90916</parentid>
      <timestamp>2017-03-14T12:57:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="3989">{{cpp/title|is_copy_constructible|is_trivially_copy_constructible|is_nothrow_copy_constructible}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct is_copy_constructible;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct is_trivially_copy_constructible;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct is_nothrow_copy_constructible;
}}
{{dcl end}}

1) If {{tt|T}} is not a referenceable type (i.e., possibly cv-qualified {{c|void}} or a function type with a ''cv-qualifier-seq'' or a ''ref-qualifier''), provides a member constant {{tt|value}} equal to {{c|false}}. Otherwise, provides a member constant {{tt|value}} equal to {{c|std::is_constructible&lt;T, const T&amp;&gt;::value}}.

2) Same as (1), but uses {{c|std::is_trivially_constructible&lt;T, const T&amp;&gt;}}.

3) Same as (1), but uses {{c|std::is_nothrow_constructible&lt;T, const T&amp;&gt;}}.

{{cpp/types/cvaub}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_copy_constructible_v = is_copy_constructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivially_copy_constructible_v = is_trivially_copy_constructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_nothrow_copy_constructible_v = is_nothrow_copy_constructible&lt;T&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is copy-constructible }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
struct is_copy_constructible :
    std::is_constructible&lt;T, typename std::add_lvalue_reference&lt;
        typename std::add_const&lt;T&gt;::type&gt;::type&gt;&gt; {};

template&lt;class T&gt;
struct is_trivially_copy_constructible :
    std::is_trivially_constructible&lt;T, typename std::add_lvalue_reference&lt;
        typename std::add_const&lt;T&gt;::type&gt;::type&gt;&gt; {};

template&lt;class T&gt;
struct is_nothrow_copy_constructible :
    std::is_nothrow_constructible&lt;T, typename std::add_lvalue_reference&lt;
        typename std::add_const&lt;T&gt;::type&gt;::type&gt;&gt; {};
}}

===Notes===
In many implementations, {{tt|is_nothrow_copy_constructible}} also checks if the destructor throws because it is effectively {{c|noexcept(T(arg))}}. Same applies to {{tt|is_trivially_copy_constructible}}, which, in these implementations, also requires that the destructor is trivial: [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51452 GCC bug 51452] [http://cplusplus.github.io/LWG/lwg-active.html#2116 LWG issue 2116].

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct Ex1 {
    std::string str; // member has a non-trivial copy ctor
};
struct Ex2 {
    int n;
    Ex2(const Ex2&amp;) = default; // trivial and non-throwing
};

int main() {
    std::cout &lt;&lt; std::boolalpha &lt;&lt; &quot;Ex1 is copy-constructible? &quot;
              &lt;&lt; std::is_copy_constructible&lt;Ex1&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex1 is trivially copy-constructible? &quot;
              &lt;&lt; std::is_trivially_copy_constructible&lt;Ex1&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex2 is trivially copy-constructible? &quot;
              &lt;&lt; std::is_trivially_copy_constructible&lt;Ex2&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex2 is nothrow copy-constructible? &quot;
              &lt;&lt; std::is_nothrow_copy_constructible&lt;Ex2&gt;::value &lt;&lt; '\n';
}
 | output=
Ex1 is copy-constructible? true
Ex1 is trivially copy-constructible? false
Ex2 is trivially copy-constructible? true
Ex2 is nothrow copy-constructible? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_constructible}}
{{dsc inc | cpp/types/dsc is_default_constructible}}
{{dsc inc | cpp/types/dsc is_move_constructible}}



{{dsc end}}

[[de:cpp/types/is copy constructible]]
[[es:cpp/types/is copy constructible]]
[[fr:cpp/types/is copy constructible]]
[[it:cpp/types/is copy constructible]]
[[ja:cpp/types/is copy constructible]]
[[pt:cpp/types/is copy constructible]]
[[ru:cpp/types/is copy constructible]]
[[zh:cpp/types/is copy constructible]]</text>
      <sha1>bey4blk9m576axv053zuv92f9wd08i1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is default constructible</title>
    <ns>0</ns>
    <id>3256</id>
    <revision>
      <id>91008</id>
      <parentid>90874</parentid>
      <timestamp>2017-03-14T12:58:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="3847">{{cpp/title|is_default_constructible|is_trivially_default_constructible|is_nothrow_default_constructible}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct is_default_constructible;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct is_trivially_default_constructible;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct is_nothrow_default_constructible;
}}
{{dcl end}}

1) If {{c|std::is_constructible&lt;T&gt;::value}} is {{c|true}}, provides the member constant {{tt|value}} equal to {{c|true}}, otherwise {{tt|value}} is {{c|false}}.

2) If {{c|std::is_trivially_constructible&lt;T&gt;::value}} is {{c|true}}, provides the member constant {{tt|value}} equal to {{c|true}}, otherwise {{tt|value}} is {{c|false}}.

3) If {{c|std::is_nothrow_constructible&lt;T&gt;::value}} is {{c|true}}, provides the member constant {{tt|value}} equal to {{c|true}}, otherwise {{tt|value}} is {{c|false}}.

{{cpp/types/cvaub}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_default_constructible_v = is_default_constructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivially_default_constructible_v = is_trivially_default_constructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_nothrow_default_constructible_v = is_nothrow_default_constructible&lt;T&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is default-constructible }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T&gt;
struct is_default_constructible : std::is_constructible&lt;T&gt; {};

template&lt; class T&gt;
struct is_trivially_default_constructible : std::is_trivially_constructible&lt;T&gt; {};

template&lt; class T&gt;
struct is_nothrow_default_constructible : std::is_nothrow_constructible&lt;T&gt; {};
}}

===Notes===
In many implementations, {{tt|is_nothrow_default_constructible}} also checks if the destructor throws because it is effectively {{c|noexcept(T())}}. Same applies to {{tt|is_trivially_default_constructible}}, which, in these implementations, also requires that the destructor is trivial: [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51452 GCC bug 51452] [http://cplusplus.github.io/LWG/lwg-active.html#2116 LWG issue 2116]. 

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct Ex1 {
    std::string str; // member has a non-trivial default ctor
};
struct Ex2 {
    int n;
    Ex2() = default; // trivial and non-throwing
};

int main() {
    std::cout &lt;&lt; std::boolalpha &lt;&lt; &quot;Ex1 is default-constructible? &quot;
              &lt;&lt; std::is_default_constructible&lt;Ex1&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex1 is trivially default-constructible? &quot;
              &lt;&lt; std::is_trivially_default_constructible&lt;Ex1&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex2 is trivially default-constructible? &quot;
              &lt;&lt; std::is_trivially_default_constructible&lt;Ex2&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex2 is nothrow default-constructible? &quot;
              &lt;&lt; std::is_nothrow_default_constructible&lt;Ex2&gt;::value &lt;&lt; '\n';
}
 | output=
Ex1 is default-constructible? true
Ex1 is trivially default-constructible? false
Ex2 is trivially default-constructible? true
Ex2 is nothrow default-constructible? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_constructible}}
{{dsc inc | cpp/types/dsc is_copy_constructible}}
{{dsc inc | cpp/types/dsc is_move_constructible}}



{{dsc end}}

[[de:cpp/types/is default constructible]]
[[es:cpp/types/is default constructible]]
[[fr:cpp/types/is default constructible]]
[[it:cpp/types/is default constructible]]
[[ja:cpp/types/is default constructible]]
[[pt:cpp/types/is default constructible]]
[[ru:cpp/types/is default constructible]]
[[zh:cpp/types/is default constructible]]</text>
      <sha1>7w5t78vwnrbaxcqiw2hk4k5p3cuakpw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is destructible</title>
    <ns>0</ns>
    <id>3274</id>
    <revision>
      <id>91007</id>
      <parentid>90883</parentid>
      <timestamp>2017-03-14T12:58:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="3381">{{cpp/title|is_destructible|is_trivially_destructible|is_nothrow_destructible}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct is_destructible;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct is_trivially_destructible;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct is_nothrow_destructible;
}}
{{dcl end}}

{{rev begin}}
{{rev | until=c++14|
1) If an imaginary struct containing a member object of type {{tt|T}} has a non-deleted destructor, provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}. }}
{{rev | since=c++14|
1) If {{tt|T}} is a reference type, provides the member constant {{tt|value}} equal {{c|true}}

If {{tt|T}} is an incomplete type (including void) or a function type, {{tt|value}} equals {{c|false}}.

If {{tt|T}} is an object type, then, for the type {{tt|U}} equal {{c|std::remove_all_extents&lt;T&gt;::type}}, if the expression {{c|std::declval&lt;U&amp;&gt;().~U()}} is well-formed in unevaluated context, {{tt|value}} equals {{c|true}}. Otherwise, {{tt|value}} equals {{c|false}}.
}}
{{rev end}}

2) same as 1), but the destructor does not call any operation that is not trivial.

3) same as 1), but the destructor is noexcept.

{{cpp/types/cvaub}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_destructible_v = is_destructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivially_destructible_v = is_trivially_destructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible&lt;T&gt;::value;
}}
{{dcl end}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is destructible}}

===Notes===
Because the C++ program terminates if a destructor throws an exception during stack unwinding (which usually cannot be predicted), all practical destructors are non-throwing even if they are not declared noexcept. All destructors found in the C++ standard library are non-throwing.

Storage occupied by trivially destructible objects [[cpp/language/lifetime#Storage_reuse|may be reused]] without calling the destructor.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;type_traits&gt;
struct Foo {
   std::string str;
   ~Foo() noexcept {};
};
struct Bar {
    ~Bar() = default;
};
int main() {
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;std::string is destructible? &quot;
              &lt;&lt; std::is_destructible&lt;std::string&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Foo is nothrow destructible? &quot;
              &lt;&lt; std::is_nothrow_destructible&lt;Foo&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Bar is trivally destructible? &quot;
              &lt;&lt; std::is_trivially_destructible&lt;Bar&gt;::value &lt;&lt; '\n';
}
 | output=
std::string is destructible? true
Foo is nothrow destructible? true
Bar is trivally destructible? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_constructible}}
{{dsc inc | cpp/types/dsc has_virtual_destructor}}



{{dsc end}}

[[de:cpp/types/is destructible]]
[[es:cpp/types/is destructible]]
[[fr:cpp/types/is destructible]]
[[it:cpp/types/is destructible]]
[[ja:cpp/types/is destructible]]
[[pt:cpp/types/is destructible]]
[[ru:cpp/types/is destructible]]
[[zh:cpp/types/is destructible]]</text>
      <sha1>95cbssrg081xk6bne3dlcpgo5lrav4e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is empty</title>
    <ns>0</ns>
    <id>3179</id>
    <revision>
      <id>90976</id>
      <parentid>90908</parentid>
      <timestamp>2017-03-14T12:58:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1777">{{cpp/title|is_empty}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_empty;
}}
{{dcl end}}

If {{tt|T}} is an empty type (that is, a non-union class type with no non-static data members other than bit-fields of size 0, no virtual functions, no virtual base classes, and no non-empty base classes), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

If {{tt|T}} is a non-union class type, {{tt|T}} shall be a complete type; otherwise, the behavior is undefined.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_empty_v = is_empty&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an empty class type }}

===Notes===
Inheriting from empty base classes usually does not increase the size of a class due to [[cpp/language/ebo|empty base optimization]].

{{c|std::is_empty&lt;T&gt;}} and all other type traits are empty classes.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {};

struct B {
    int m;
};

struct C {
    virtual ~C();
};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_empty&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_empty&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_empty&lt;C&gt;::value &lt;&lt; '\n';
}
 | output=
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_class}}

{{dsc end}}

[[de:cpp/types/is empty]]
[[es:cpp/types/is empty]]
[[fr:cpp/types/is empty]]
[[it:cpp/types/is empty]]
[[ja:cpp/types/is empty]]
[[pt:cpp/types/is empty]]
[[ru:cpp/types/is empty]]
[[zh:cpp/types/is empty]]</text>
      <sha1>ibgfx1oh2ezisjrnzhzhokx7dgmzi7h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is enum</title>
    <ns>0</ns>
    <id>3138</id>
    <revision>
      <id>90962</id>
      <parentid>90888</parentid>
      <timestamp>2017-03-14T12:57:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1456">{{cpp/title|is_enum}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_enum;
}}
{{dcl end}}

Checks whether {{tt|T}} is an [[cpp/language/enum|enumeration type]]. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is an enumeration type . Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_enum_v = is_enum&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is an enumeration type }}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

enum E {};

enum class Ec : int {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_enum&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_enum&lt;E&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_enum&lt;Ec&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_enum&lt;int&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_void}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_arithmetic}}

{{dsc end}}

[[de:cpp/types/is enum]]
[[es:cpp/types/is enum]]
[[fr:cpp/types/is enum]]
[[it:cpp/types/is enum]]
[[ja:cpp/types/is enum]]
[[pt:cpp/types/is enum]]
[[ru:cpp/types/is enum]]
[[zh:cpp/types/is enum]]</text>
      <sha1>gohx1a5in0mw8sy1yyas8rfh2rdsg7h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is final</title>
    <ns>0</ns>
    <id>13174</id>
    <revision>
      <id>91011</id>
      <parentid>90902</parentid>
      <timestamp>2017-03-14T12:58:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1605">{{cpp/title|is_final}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
struct is_final;
}}
{{dcl end}}

If {{tt|T}} is a final class (that is, a class declared with the [[cpp/language/final|final specifier]]), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

If {{tt|T}} is a class type, {{tt|T}} shall be a complete type; otherwise, the behavior is undefined.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_final_v = is_final&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a final class type }}

===Notes===
Final classes cannot be used as base classes.

A [[cpp/language/union|union]] can be marked {{tt|final}} (and {{tt|std::is_final}} will detect that), even though unions cannot be used as bases in any case.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};
class B final {};

int main() 
{
    std::cout
        &lt;&lt; std::boolalpha
        &lt;&lt; std::is_final&lt;A&gt;::value &lt;&lt; '\n'
        &lt;&lt; std::is_final&lt;B&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_class}}
{{dsc inc | cpp/types/dsc is_polymorphic}}

{{dsc end}}

[[de:cpp/types/is final]]
[[es:cpp/types/is final]]
[[fr:cpp/types/is final]]
[[it:cpp/types/is final]]
[[ja:cpp/types/is final]]
[[pt:cpp/types/is final]]
[[ru:cpp/types/is final]]
[[zh:cpp/types/is final]]</text>
      <sha1>53grw2071r2cjs2lmlq8plcicv1gbmc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is floating point</title>
    <ns>0</ns>
    <id>3166</id>
    <revision>
      <id>90999</id>
      <parentid>90878</parentid>
      <timestamp>2017-03-14T12:58:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1972">{{cpp/title|is_floating_point}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_floating_point;
}}
{{dcl end}}

Checks whether {{tt|T}} is a floating-point type. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is the type {{c|float}}, {{c|double}}, {{c|long double}}, including any cv-qualified variants. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_floating_point_v = is_floating_point&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is a floating-point type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_floating_point
     : std::integral_constant&lt;
         bool,
         std::is_same&lt;float, typename std::remove_cv&lt;T&gt;::type&gt;::value  {{!!}}
         std::is_same&lt;double, typename std::remove_cv&lt;T&gt;::type&gt;::value  {{!!}}
         std::is_same&lt;long double, typename std::remove_cv&lt;T&gt;::type&gt;::value
     &gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_floating_point&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_floating_point&lt;float&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_floating_point&lt;int&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc is_iec559}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc inc | cpp/types/dsc is_arithmetic}}

{{dsc end}}

[[de:cpp/types/is floating point]]
[[es:cpp/types/is floating point]]
[[fr:cpp/types/is floating point]]
[[it:cpp/types/is floating point]]
[[ja:cpp/types/is floating point]]
[[pt:cpp/types/is floating point]]
[[ru:cpp/types/is floating point]]
[[zh:cpp/types/is floating point]]</text>
      <sha1>2filc6xhit665s7j2v5hcnl01n7ofez</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is function</title>
    <ns>0</ns>
    <id>3141</id>
    <revision>
      <id>90992</id>
      <parentid>90872</parentid>
      <timestamp>2017-03-14T12:58:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="7029">{{cpp/title|is_function}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_function;
}}
{{dcl end}}

Checks whether {{tt|T}} is a function type. Types like {{c|std::function}}, lambdas, classes with overloaded {{tt|operator()}} and pointers to functions don't count as function types. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is a function type. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_function_v = is_function&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is a function type }}

===Possible implementation===
{{eq fun
 | 1=
// primary template
template&lt;class&gt;
struct is_function : std::false_type { };

// specialization for regular functions
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)&gt; : std::true_type {};

// specialization for variadic functions such as std::printf
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)&gt; : std::true_type {};

// specialization for function types that have cv-qualifiers
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)volatile&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const volatile&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)volatile&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const volatile&gt; : std::true_type {};

// specialization for function types that have ref-qualifiers
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...) &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)volatile &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const volatile &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......) &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)volatile &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const volatile &amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...) &amp;&amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const &amp;&amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)volatile &amp;&amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const volatile &amp;&amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......) &amp;&amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const &amp;&amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)volatile &amp;&amp;&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const volatile &amp;&amp;&gt; : std::true_type {};

// specializations for noexcept versions of all the above (C++17 and later)

template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...) noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......) noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)volatile noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const volatile noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)volatile noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const volatile noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...) &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)volatile &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const volatile &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......) &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)volatile &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const volatile &amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...) &amp;&amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const &amp;&amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)volatile &amp;&amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args...)const volatile &amp;&amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......) &amp;&amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const &amp;&amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)volatile &amp;&amp; noexcept&gt; : std::true_type {};
template&lt;class Ret, class... Args&gt;
struct is_function&lt;Ret(Args......)const volatile &amp;&amp; noexcept&gt; : std::true_type {};

}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {};

int f()
{
    return 1;
}

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_function&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_function&lt;int(int)&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_function&lt;decltype(f)&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_function&lt;int&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_invocable}}
{{dsc inc | cpp/types/dsc is_object}}
{{dsc inc | cpp/types/dsc is_class}}

{{dsc end}}

[[de:cpp/types/is function]]
[[es:cpp/types/is function]]
[[fr:cpp/types/is function]]
[[it:cpp/types/is function]]
[[ja:cpp/types/is function]]
[[pt:cpp/types/is function]]
[[ru:cpp/types/is function]]
[[zh:cpp/types/is function]]</text>
      <sha1>ija3f4bj4kinv89nwcr0q02cbfd50xe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is fundamental</title>
    <ns>0</ns>
    <id>3174</id>
    <revision>
      <id>90951</id>
      <parentid>90882</parentid>
      <timestamp>2017-03-14T12:57:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2012">{{cpp/title|is_fundamental}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_fundamental;
}}
{{dcl end}}

If {{tt|T}} is a fundamental type (that is, arithmetic type, {{c|void}}, or {{c|nullptr_t}}), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_fundamental_v = is_fundamental&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a fundamental type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_fundamental
  : std::integral_constant&lt;
        bool,
        std::is_arithmetic&lt;T&gt;::value {{!!}}
        std::is_void&lt;T&gt;::value  {{!!}}
        std::is_same&lt;std::nullptr_t, typename std::remove_cv&lt;T&gt;::type&gt;::value
&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_fundamental&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_fundamental&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_fundamental&lt;int&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_fundamental&lt;int*&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_fundamental&lt;float&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_fundamental&lt;float&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_fundamental&lt;float*&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
false
false
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_compound}}
{{dsc inc | cpp/types/dsc is_arithmetic}}
{{dsc inc | cpp/types/dsc is_void}}

{{dsc end}}

[[de:cpp/types/is fundamental]]
[[es:cpp/types/is fundamental]]
[[fr:cpp/types/is fundamental]]
[[it:cpp/types/is fundamental]]
[[ja:cpp/types/is fundamental]]
[[pt:cpp/types/is fundamental]]
[[ru:cpp/types/is fundamental]]
[[zh:cpp/types/is fundamental]]</text>
      <sha1>jtze506b8byjwfi7ydo53516huyty1m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is integral</title>
    <ns>0</ns>
    <id>3165</id>
    <revision>
      <id>90974</id>
      <parentid>90886</parentid>
      <timestamp>2017-03-14T12:58:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1801">{{cpp/title|is_integral}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_integral;
}}
{{dcl end}}

Checks whether {{tt|T}} is an integral type. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is the type {{c|bool}}, {{c|char}}, {{c|char16_t}}, {{c|char32_t}}, {{c|wchar_t}}, {{c|short}}, {{c|int}}, {{c|long}}, {{c|long long}}, or any implementation-defined extended integer types, including any signed, unsigned, and cv-qualified variants. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_integral_v = is_integral&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is an integral type }}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

template &lt;class T&gt;
T f(T i)
{
    static_assert(std::is_integral&lt;T&gt;::value, &quot;Integer required.&quot;);
    return i;
}

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_integral&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_integral&lt;float&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_integral&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; f(123) &lt;&lt; '\n';
}
 | output=
false
false
true
123
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc is_integer}}
{{dsc inc | cpp/types/dsc is_floating_point}}
{{dsc inc | cpp/types/dsc is_arithmetic}}

{{dsc end}}

[[de:cpp/types/is integral]]
[[es:cpp/types/is integral]]
[[fr:cpp/types/is integral]]
[[it:cpp/types/is integral]]
[[ja:cpp/types/is integral]]
[[pt:cpp/types/is integral]]
[[ru:cpp/types/is integral]]
[[zh:cpp/types/is integral]]</text>
      <sha1>4klv4xubx3ca59owuun5xcowc3yxtu9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is invocable</title>
    <ns>0</ns>
    <id>14755</id>
    <revision>
      <id>91108</id>
      <parentid>90845</parentid>
      <timestamp>2017-03-19T13:55:17Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="2771">{{cpp/title|is_invocable|is_invocable_r|is_nothrow_invocable|is_nothrow_invocable_r}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl |since=c++17 |num=1|1=
template &lt;class Fn, class... ArgTypes&gt;
struct is_invocable;
}}
{{dcl |since=c++17 |num=2|1=
template &lt;class R, class Fn, class... ArgTypes&gt;
struct is_invocable_r;
}}
{{dcl |since=c++17 |num=3|1=
template &lt;class Fn, class... ArgTypes&gt;
struct is_nothrow_invocable;
}}
{{dcl |since=c++17 |num=4|1=
template &lt;class R, class Fn, class... ArgTypes&gt;
struct is_nothrow_invocable_r;
}}
{{dcl end}}

@1@ Determines whether {{tt|Fn}} can be invoked with the arguments {{tt|ArgTypes...}}. Formally, determines whether {{tt|INVOKE(declval&lt;Fn&gt;(), declval&lt;ArgTypes&gt;()...)}} is well formed when treated as an unevaluated operand, where {{tt|INVOKE}} is the operation defined in {{concept|Callable}}.
@2@ Determines whether {{tt|Fn}} can be invoked with the arguments {{tt|ArgTypes...}} to yield a result that is convertible to {{tt|R}}. Formally, determines whether {{tt|INVOKE&lt;R&gt;(declval&lt;Fn&gt;(), declval&lt;ArgTypes&gt;()...)}} is well formed when treated as an unevaluated operand, where {{tt|INVOKE}} is the operation defined in {{concept|Callable}}
@3@ Determines whether {{tt|Fn}} is callable with the arguments {{tt|ArgTypes...}} (same as {{v|1}}), and that such call is known not to throw any exceptions.
@4@ Determines whether {{tt|Fn}} can be invoked with the arguments {{tt|ArgTypes...}} to yield a result that is convertible to {{tt|R}} (same as {{v|2}}), and that such call is known not to throw any exceptions.

{{cpp/types/cvaub|type1=Fn, R|pack=ArgTypes}}

=== Helper variable templates ===
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl|since=c++17 |num=1| 1=
template &lt;class Fn, class... ArgTypes&gt;
inline constexpr bool is_invocable_v = std::is_invocable&lt;Fn, ArgTypes...&gt;::value;
}}
{{dcl|since=c++17 |num=2| 1=
template &lt;class R, class Fn, class... ArgTypes&gt;
inline constexpr bool is_invocable_r_v = std::is_invocable_r&lt;R, Fn, ArgTypes...&gt;::value;
}}
{{dcl|since=c++17 |num=3| 1=
template &lt;class Fn, class... ArgTypes&gt;
inline constexpr bool is_nothrow_invocable_v = std::is_nothrow_invocable&lt;Fn, ArgTypes...&gt;::value;
}}
{{dcl|since=c++17 |num=4| 1=
template &lt;class R, class Fn, class... ArgTypes&gt;
inline constexpr bool is_nothrow_invocable_r_v = std::is_nothrow_invocable_r&lt;R, Fn, ArgTypes...&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit | {{tt|INVOKE&lt;R&gt;(declval&lt;Fn&gt;(), declval&lt;ArgTypes&gt;()...)}} is well formed when treated as an unevaluated operand }}

===Examples===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc invoke}}
{{dsc inc | cpp/types/dsc result_of}}
{{dsc inc | cpp/utility/dsc declval}}
{{dsc end}}

[[zh:cpp/types/is_invocable]]</text>
      <sha1>7htyf91tsd511g1f5ad0640i0gwr8sp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is literal type</title>
    <ns>0</ns>
    <id>3184</id>
    <revision>
      <id>90998</id>
      <parentid>90903</parentid>
      <timestamp>2017-03-14T12:58:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1672">{{cpp/title|is_literal_type}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | notes={{mark|deprecated in C++17}} | 1=
template&lt; class T &gt;
struct is_literal_type;
}}
{{dcl end}}

If {{tt|T}} satisfies all requirements of {{concept|LiteralType}}, provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

The behavior is undefined if {{c|std::remove_all_extents_t&lt;T&gt;}} is an incomplete type and not (possibly cv-qualified) {{c|void}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | notes={{mark deprecated}}| 1=
template&lt; class T &gt;
inline constexpr bool is_literal_type_v = is_literal_type&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit |{{tt|T}} is a literal type}}

===Notes===
Only literal types may be used as parameters to or returned from [[cpp/language/constexpr|constexpr functions]]. Only literal classes may have constexpr member functions.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {
    int m;
};

struct B {
    virtual ~B();
};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_literal_type&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_literal_type&lt;B&gt;::value &lt;&lt; '\n';
}
 | output=
true
false
}}

===See also===
{{dsc begin}}

{{dsc end}}

[[de:cpp/types/is literal type]]
[[es:cpp/types/is literal type]]
[[fr:cpp/types/is literal type]]
[[it:cpp/types/is literal type]]
[[ja:cpp/types/is literal type]]
[[pt:cpp/types/is literal type]]
[[ru:cpp/types/is literal type]]
[[zh:cpp/types/is literal type]]</text>
      <sha1>hxq4lws20fubv01v02a5dltif41g2z1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is lvalue reference</title>
    <ns>0</ns>
    <id>3168</id>
    <revision>
      <id>90955</id>
      <parentid>90879</parentid>
      <timestamp>2017-03-14T12:57:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1906">{{cpp/title|is_lvalue_reference}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_lvalue_reference;
}}
{{dcl end}}

Checks whether {{tt|T}} is a lvalue reference type. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is a lvalue reference type. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_lvalue_reference_v = is_lvalue_reference&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is an lvalue reference type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt; struct is_lvalue_reference     : std::false_type {};
template&lt;class T&gt; struct is_lvalue_reference&lt;T&amp;&gt; : std::true_type {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_lvalue_reference&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_lvalue_reference&lt;A&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_lvalue_reference&lt;A&amp;&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_lvalue_reference&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_lvalue_reference&lt;int&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_lvalue_reference&lt;int&amp;&amp;&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
false
false
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_reference}}
{{dsc inc | cpp/types/dsc is_rvalue_reference}}

{{dsc end}}

[[de:cpp/types/is lvalue reference]]
[[es:cpp/types/is lvalue reference]]
[[fr:cpp/types/is lvalue reference]]
[[it:cpp/types/is lvalue reference]]
[[ja:cpp/types/is lvalue reference]]
[[pt:cpp/types/is lvalue reference]]
[[ru:cpp/types/is lvalue reference]]
[[zh:cpp/types/is lvalue reference]]</text>
      <sha1>afq57x19426kuqvyjvzkywgb1lh9cjl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is member function pointer</title>
    <ns>0</ns>
    <id>3172</id>
    <revision>
      <id>90990</id>
      <parentid>90890</parentid>
      <timestamp>2017-03-14T12:58:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2011">{{cpp/title|is_member_function_pointer}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_member_function_pointer;
}}
{{dcl end}}

Checks whether {{tt|T}} is a non-static member function pointer. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is a non-static member function pointer type. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_member_function_pointer_v = is_member_function_pointer&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is a member function pointer type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_member_function_pointer_helper : std::false_type {};

template&lt; class T, class U&gt;
struct is_member_function_pointer_helper&lt;T U::*&gt; : std::is_function&lt;T&gt; {};

template&lt; class T &gt;
struct is_member_function_pointer : is_member_function_pointer_helper&lt; std::remove_cv_t&lt;T&gt; &gt; {};
}}

===Example===
{{example
 | code=
#include &lt;type_traits&gt;

class A {
public:
    void member() { }
};

int main()
{
    // fails at compile time if A::member is a data member and not a function
    static_assert(std::is_member_function_pointer&lt;decltype(&amp;A::member)&gt;::value,
                  &quot;A::member is not a member function.&quot;); 
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_member_object_pointer}}
{{dsc inc | cpp/types/dsc is_member_pointer}}

{{dsc end}}

[[de:cpp/types/is member function pointer]]
[[es:cpp/types/is member function pointer]]
[[fr:cpp/types/is member function pointer]]
[[it:cpp/types/is member function pointer]]
[[ja:cpp/types/is member function pointer]]
[[pt:cpp/types/is member function pointer]]
[[ru:cpp/types/is member function pointer]]
[[zh:cpp/types/is member function pointer]]</text>
      <sha1>6nbvx5sc5zoz152ucpjr1icj6xll06t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is member object pointer</title>
    <ns>0</ns>
    <id>3171</id>
    <revision>
      <id>90978</id>
      <parentid>90873</parentid>
      <timestamp>2017-03-14T12:58:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2220">{{cpp/title|is_member_object_pointer}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_member_object_pointer;
}}
{{dcl end}}

Checks whether {{tt|T}} is a non-static member object. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is a non-static member object type. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_member_object_pointer_v = is_member_object_pointer&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is a pointer to member object }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
struct is_member_object_pointer : std::integral_constant&lt;
                                      bool,
                                      std::is_member_pointer&lt;T&gt;::value &amp;&amp;
                                      !std::is_member_function_pointer&lt;T&gt;::value
                                  &gt; {};
}}

===Example===
{{todo|simplify}}
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
    class cls {};
    std::cout &lt;&lt; (std::is_member_object_pointer&lt;int(cls::*)&gt;::value
                     ? &quot;T is member object pointer&quot;
                     : &quot;T is not a member object pointer&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; (std::is_member_object_pointer&lt;int(cls::*)()&gt;::value
                     ? &quot;T is member object pointer&quot;
                     : &quot;T is not a member object pointer&quot;) &lt;&lt; '\n';
}

 | output=
T is member object pointer
T is not a member object pointer
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_member_pointer}}
{{dsc inc | cpp/types/dsc is_member_function_pointer}}

{{dsc end}}

[[de:cpp/types/is member object pointer]]
[[es:cpp/types/is member object pointer]]
[[fr:cpp/types/is member object pointer]]
[[it:cpp/types/is member object pointer]]
[[ja:cpp/types/is member object pointer]]
[[pt:cpp/types/is member object pointer]]
[[ru:cpp/types/is member object pointer]]
[[zh:cpp/types/is member object pointer]]</text>
      <sha1>16koq9224ra5by778x1h253je5fv4ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is member pointer</title>
    <ns>0</ns>
    <id>3170</id>
    <revision>
      <id>90987</id>
      <parentid>90895</parentid>
      <timestamp>2017-03-14T12:58:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2026">{{cpp/title|is_member_pointer}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_member_pointer;
}}
{{dcl end}}

If {{tt|T}} is pointer to non-static member object or a pointer to non-static member function, provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_member_pointer_v = is_member_pointer&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a member pointer type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_member_pointer_helper         : std::false_type {};

template&lt; class T, class U &gt;
struct is_member_pointer_helper&lt;T U::*&gt; : std::true_type {};

template&lt; class T &gt;
struct is_member_pointer : 
    is_member_pointer_helper&lt;typename std::remove_cv&lt;T&gt;::type&gt; {};
}}

===Example===
{{todo|simplify}}
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
    class cls {};
    std::cout &lt;&lt; (std::is_member_pointer&lt;int(cls::*)&gt;::value
                     ? &quot;T is member pointer&quot;
                     : &quot;T is not a member pointer&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; (std::is_member_pointer&lt;int&gt;::value
                     ? &quot;T is member pointer&quot;
                     : &quot;T is not a member pointer&quot;) &lt;&lt; '\n';
}
 | output=
T is member pointer
T is not a member pointer
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_member_object_pointer}}
{{dsc inc | cpp/types/dsc is_member_function_pointer}}

{{dsc end}}

[[de:cpp/types/is member pointer]]
[[es:cpp/types/is member pointer]]
[[fr:cpp/types/is member pointer]]
[[it:cpp/types/is member pointer]]
[[ja:cpp/types/is member pointer]]
[[pt:cpp/types/is member pointer]]
[[ru:cpp/types/is member pointer]]
[[zh:cpp/types/is member pointer]]</text>
      <sha1>03sdx5leqxx010a5dwnxdaq8x9iok9d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is move assignable</title>
    <ns>0</ns>
    <id>3273</id>
    <revision>
      <id>90975</id>
      <parentid>90897</parentid>
      <timestamp>2017-03-14T12:58:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="4374">{{cpp/title|is_move_assignable|is_trivially_move_assignable|is_nothrow_move_assignable}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct is_move_assignable;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct is_trivially_move_assignable;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct is_nothrow_move_assignable;
}}
{{dcl end}}

@1@ If {{tt|T}} is not a referenceable type (i.e., possibly cv-qualified {{c|void}} or a function type with a ''cv-qualifier-seq'' or a ''ref-qualifier''), provides a member constant {{tt|value}} equal to {{c|false}}. Otherwise, provides a member constant {{tt|value}} equal to {{c|std::is_assignable&lt;T&amp;, T&amp;&amp;&gt;::value}}.
@2@ Same as 1), but uses {{c|std::is_trivially_assignable&lt;T&amp;, T&amp;&amp;&gt;}}
@3@ Same as 1), but uses {{c|std::is_nothrow_assignable&lt;T&amp;, T&amp;&amp;&gt;}}

{{cpp/types/cvaub}}
=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_move_assignable_v = is_move_assignable&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivially_move_assignable_v = is_trivially_move_assignable&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable&lt;T&gt;::value;
}}
{{dcl end}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is move-assignable}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T&gt;
struct is_move_assignable
    : std::is_assignable&lt; typename std::add_lvalue_reference&lt;T&gt;::type,
                          typename std::add_rvalue_reference&lt;T&gt;::type&gt; {};

template&lt; class T&gt;
struct is_trivially_move_assignable
    : std::is_trivially_assignable&lt; typename std::add_lvalue_reference&lt;T&gt;::type,
                                    typename std::add_rvalue_reference&lt;T&gt;::type&gt; {};

template&lt; class T&gt;
struct is_nothrow_move_assignable
    : std::is_nothrow_assignable&lt; typename std::add_lvalue_reference&lt;T&gt;::type,
                                  typename std::add_rvalue_reference&lt;T&gt;::type&gt; {};
}}

===Notes===
The trait {{tt|std::is_move_assignable}} is less strict than {{concept|MoveAssignable}} because it does not check the type of the result of the assignment (which, for a {{concept|MoveAssignable}} type, must be {{tt|T&amp;}}), nor the semantic requirement that the target's value after the assignment is equivalent to the source's value before the assignment.

The type does not have to implement a [[cpp/language/move_operator|move assignment operator]] in order to satisfy this trait; see {{concept|MoveAssignable}} for details.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;type_traits&gt;
struct Foo { int n; };
struct NoMove {
    // prevents implicit declaration of default move assignment operator
    // however, the class is still move-assignable because its
    // copy assignment operator can bind to an rvalue argument
    NoMove&amp; operator=(const NoMove&amp;) { return *this; }
};
int main() {
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;std::string is nothrow move-assignable? &quot;
              &lt;&lt; std::is_nothrow_move_assignable&lt;std::string&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;int[2] is move-assignable? &quot;
              &lt;&lt; std::is_move_assignable&lt;int[2]&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Foo is trivally move-assignable? &quot;
              &lt;&lt; std::is_trivially_move_assignable&lt;Foo&gt;::value &lt;&lt; '\n';

    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;NoMove is move-assignable? &quot;
              &lt;&lt; std::is_move_assignable&lt;NoMove&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;NoMove is nothrow move-assignable? &quot;
              &lt;&lt; std::is_nothrow_move_assignable&lt;NoMove&gt;::value &lt;&lt; '\n';
}
 | output=
std::string is nothrow move-assignable? true
int[2] is move-assignable? false
Foo is trivially move-assignable? true
NoMove is move-assignable? true
NoMove is nothrow move-assignable? false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_assignable}}
{{dsc inc | cpp/types/dsc is_copy_assignable}}



{{dsc end}}

[[de:cpp/types/is move assignable]]
[[es:cpp/types/is move assignable]]
[[fr:cpp/types/is move assignable]]
[[it:cpp/types/is move assignable]]
[[ja:cpp/types/is move assignable]]
[[pt:cpp/types/is move assignable]]
[[ru:cpp/types/is move assignable]]
[[zh:cpp/types/is move assignable]]</text>
      <sha1>mxsvucij23w7qid36765whw5oxevacf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is move constructible</title>
    <ns>0</ns>
    <id>3258</id>
    <revision>
      <id>90958</id>
      <parentid>90885</parentid>
      <timestamp>2017-03-14T12:57:48Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="4951">{{cpp/title|is_move_constructible|is_trivially_move_constructible|is_nothrow_move_constructible}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct is_move_constructible;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct is_trivially_move_constructible;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct is_nothrow_move_constructible;
}}
{{dcl end}}

1) If {{tt|T}} is not a referenceable type (i.e., possibly cv-qualified {{c|void}} or a function type with a ''cv-qualifier-seq'' or a ''ref-qualifier''), provides a member constant {{tt|value}} equal to {{c|false}}. Otherwise, provides a member constant {{tt|value}} equal to {{c|std::is_constructible&lt;T, T&amp;&amp;&gt;::value}}.

2) Same as (1), but uses {{c|std::is_trivially_constructible&lt;T, T&amp;&amp;&gt;}}.

3) Same as (1), but uses {{c|std::is_nothrow_constructible&lt;T, T&amp;&amp;&gt;}}.

{{cpp/types/cvaub}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_move_constructible_v = is_move_constructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivially_move_constructible_v = is_trivially_move_constructible&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_nothrow_move_constructible_v = is_nothrow_move_constructible&lt;T&gt;::value;
}}
{{dcl end}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is move-constructible }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
struct is_move_constructible :
      std::is_constructible&lt;T, typename std::add_rvalue_reference&lt;T&gt;::type&gt; {};

template&lt;class T&gt;
struct is_trivially_move_constructible :
     std::is_trivially_constructible&lt;T, typename std::add_rvalue_reference&lt;T&gt;::type&gt; {};

template&lt;class T&gt;
struct is_nothrow_move_constructible :
     std::is_nothrow_constructible&lt;T, typename std::add_rvalue_reference&lt;T&gt;::type&gt; {};
}}

===Notes===
Types without a move constructor, but with a copy constructor that accepts {{tt|const T&amp;}} arguments, satisfy {{tt|std::is_move_constructible}}.

Move constructors are usually noexcept, since otherwise they are unusable in any code that provides strong exception guarantee.

In many implementations, {{tt|is_nothrow_move_constructible}} also checks if the destructor throws because it is effectively {{c|noexept(T(arg))}}. Same applies to {{tt|is_trivially_move_constructible}}, which, in these implementations, also requires that the destructor is trivial: [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51452 GCC bug 51452] [http://cplusplus.github.io/LWG/lwg-active.html#2116 LWG issue 2116].

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct Ex1 {
    std::string str; // member has a non-trivial but non-throwing move ctor
};
struct Ex2 {
    int n;
    Ex2(Ex2&amp;&amp;) = default; // trivial and non-throwing
};
struct NoMove {
    // prevents implicit declaration of default move constructor
    // however, the class is still move-constructible because its
    // copy constructor can bind to an rvalue argument
    NoMove(const NoMove&amp;) {}
};

int main() {
    std::cout &lt;&lt; std::boolalpha &lt;&lt; &quot;Ex1 is move-constructible? &quot;
              &lt;&lt; std::is_move_constructible&lt;Ex1&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex1 is trivially move-constructible? &quot;
              &lt;&lt; std::is_trivially_move_constructible&lt;Ex1&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex1 is nothrow move-constructible? &quot;
              &lt;&lt; std::is_nothrow_move_constructible&lt;Ex1&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex2 is trivially move-constructible? &quot;
              &lt;&lt; std::is_trivially_move_constructible&lt;Ex2&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;Ex2 is nothrow move-constructible? &quot;
              &lt;&lt; std::is_nothrow_move_constructible&lt;Ex2&gt;::value &lt;&lt; '\n';

    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;NoMove is move-constructible? &quot;
              &lt;&lt; std::is_move_constructible&lt;NoMove&gt;::value &lt;&lt; '\n'
              &lt;&lt; &quot;NoMove is nothrow move-constructible? &quot;
              &lt;&lt; std::is_nothrow_move_constructible&lt;NoMove&gt;::value &lt;&lt; '\n';
}
 | output=
Ex1 is move-constructible? true
Ex1 is trivially move-constructible? false
Ex1 is nothrow move-constructible? true
Ex2 is trivially move-constructible? true
Ex2 is nothrow move-constructible? true
NoMove is move-constructible? true
NoMove is nothrow move-constructible? false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_constructible}}
{{dsc inc | cpp/types/dsc is_default_constructible}}
{{dsc inc | cpp/types/dsc is_copy_constructible}}
{{dsc inc | cpp/utility/dsc move_if_noexcept}}



{{dsc end}}

[[de:cpp/types/is move constructible]]
[[es:cpp/types/is move constructible]]
[[fr:cpp/types/is move constructible]]
[[it:cpp/types/is move constructible]]
[[ja:cpp/types/is move constructible]]
[[pt:cpp/types/is move constructible]]
[[ru:cpp/types/is move constructible]]
[[zh:cpp/types/is move constructible]]</text>
      <sha1>d57j68z0woj7j9qxxvvxc8jb0spb7sb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow assignable</title>
    <ns>0</ns>
    <id>4236</id>
    <redirect title="cpp/types/is assignable" />
    <revision>
      <id>15335</id>
      <timestamp>2011-12-08T15:29:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is assignable]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/types/is_assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow constructible</title>
    <ns>0</ns>
    <id>4224</id>
    <redirect title="cpp/types/is constructible" />
    <revision>
      <id>15323</id>
      <timestamp>2011-12-08T15:26:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is constructible]]</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/types/is_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow copy assignable</title>
    <ns>0</ns>
    <id>4233</id>
    <redirect title="cpp/types/is copy assignable" />
    <revision>
      <id>15332</id>
      <timestamp>2011-12-08T15:29:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is copy assignable]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/types/is_copy_assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow copy constructible</title>
    <ns>0</ns>
    <id>4228</id>
    <redirect title="cpp/types/is copy constructible" />
    <revision>
      <id>15327</id>
      <timestamp>2011-12-08T15:28:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is copy constructible]]</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/types/is_copy_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow default constructible</title>
    <ns>0</ns>
    <id>4226</id>
    <redirect title="cpp/types/is default constructible" />
    <revision>
      <id>15325</id>
      <timestamp>2011-12-08T15:27:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is default constructible]]</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/types/is_default_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow destructible</title>
    <ns>0</ns>
    <id>4238</id>
    <redirect title="cpp/types/is destructible" />
    <revision>
      <id>15337</id>
      <timestamp>2011-12-08T15:31:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is destructible]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/types/is_destructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow move assignable</title>
    <ns>0</ns>
    <id>4232</id>
    <redirect title="cpp/types/is move assignable" />
    <revision>
      <id>15331</id>
      <timestamp>2011-12-08T15:28:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is move assignable]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/types/is_move_assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is nothrow move constructible</title>
    <ns>0</ns>
    <id>4229</id>
    <redirect title="cpp/types/is move constructible" />
    <revision>
      <id>15328</id>
      <timestamp>2011-12-08T15:28:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is move constructible]]</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/types/is_move_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is null pointer</title>
    <ns>0</ns>
    <id>13044</id>
    <revision>
      <id>91235</id>
      <parentid>91226</parentid>
      <timestamp>2017-03-28T20:27:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Possible implementation */ fix</comment>
      <text xml:space="preserve" bytes="2154">{{cpp/title|is_null_pointer}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
struct is_null_pointer;
}}
{{dcl end}}

Checks whether {{tt|T}} is the type {{lc|std::nullptr_t}}.

Provides the member constant {{tt|value}} that is equal to {{c|true}}, if {{tt|T}} is the type {{c|std::nullptr_t}}, {{c|const std::nullptr_t}}, {{c|volatile std::nullptr_t}}, or {{c|const volatile std::nullptr_t}}.

Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_null_pointer_v = is_null_pointer&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is the type {{lc|std::nullptr_t}} (possibly cv-qualified) }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_null_pointer : std::is_same&lt;std::nullptr_t, typename std::remove_cv&lt;T&gt;::type&gt; {};
}}

===Notes===
{{lc|std::is_pointer}} is {{c|false}} for {{lc|std::nullptr_t}} because it is not a built-in pointer type.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main()
{
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; std::is_null_pointer&lt; decltype(nullptr) &gt;::value &lt;&lt; ' '
              &lt;&lt; std::is_null_pointer&lt; int* &gt;::value &lt;&lt; '\n'
              &lt;&lt; std::is_pointer&lt; decltype(nullptr) &gt;::value &lt;&lt; ' '
              &lt;&lt; std::is_pointer&lt;int*&gt;::value &lt;&lt; '\n';
}
| output=
true false
false true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_void}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_enum}}
{{dsc inc | cpp/types/dsc is_union}}
{{dsc inc | cpp/types/dsc is_class}}
{{dsc inc | cpp/types/dsc is_function}}
{{dsc inc | cpp/types/dsc is_object}}

{{dsc end}}

[[de:cpp/types/is null pointer]]
[[es:cpp/types/is null pointer]]
[[fr:cpp/types/is null pointer]]
[[it:cpp/types/is null pointer]]
[[ja:cpp/types/is null pointer]]
[[pt:cpp/types/is null pointer]]
[[ru:cpp/types/is null pointer]]
[[zh:cpp/types/is null pointer]]</text>
      <sha1>1wujuzjt1ic0tld3nnos6ohyb9s5635</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is object</title>
    <ns>0</ns>
    <id>3142</id>
    <revision>
      <id>91002</id>
      <parentid>90887</parentid>
      <timestamp>2017-03-14T12:58:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1841">{{cpp/title|is_object}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_object;
}}
{{dcl end}}

If {{tt|T}} is an [[cpp/language/type|object type]] (that is any possibly cv-qualified type other than function, reference, or {{c|void}} types), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}

===Helper variable template===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_object_v = is_object&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an object type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T&gt;
struct is_object : std::integral_constant&lt;bool,
                     std::is_scalar&lt;T&gt;::value {{!!}}
                     std::is_array&lt;T&gt;::value  {{!!}}
                     std::is_union&lt;T&gt;::value  {{!!}}
                     std::is_class&lt;T&gt;::value&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
    class cls {};
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_object&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_object&lt;int&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_object&lt;cls&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_object&lt;cls&amp;&gt;::value &lt;&lt; '\n';
}
 | output=
true
false
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_scalar}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc is_union}}
{{dsc inc | cpp/types/dsc is_class}}

{{dsc end}}

[[de:cpp/types/is object]]
[[es:cpp/types/is object]]
[[fr:cpp/types/is object]]
[[it:cpp/types/is object]]
[[ja:cpp/types/is object]]
[[pt:cpp/types/is object]]
[[ru:cpp/types/is object]]
[[zh:cpp/types/is object]]</text>
      <sha1>dznedphia8vmbu3nd17tm2ll28fevs4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is pod</title>
    <ns>0</ns>
    <id>3178</id>
    <revision>
      <id>90989</id>
      <parentid>90905</parentid>
      <timestamp>2017-03-14T12:58:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1616">{{cpp/title|is_pod}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_pod;
}}
{{dcl end}}

If {{tt|T}} is a {{concept|PODType}} (&quot;plain old data type&quot;), that is, both trivial and standard-layout, provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

The behavior is undefined if {{c|std::remove_all_extents_t&lt;T&gt;}} is an incomplete type and not (possibly cv-qualified) {{c|void}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_pod_v = is_pod&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a POD type }}

===Notes===
Objects of POD types are fully compatible with the C programming language.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {
    int m;
};

struct B {
    int m1;
private:
    int m2;
};

struct C {
    virtual void foo();
};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_pod&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pod&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pod&lt;C&gt;::value &lt;&lt; '\n';
}
 | output=
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_standard_layout}}
{{dsc inc | cpp/types/dsc is_trivial}}

{{dsc end}}

[[de:cpp/types/is pod]]
[[es:cpp/types/is pod]]
[[fr:cpp/types/is pod]]
[[it:cpp/types/is pod]]
[[ja:cpp/types/is pod]]
[[pt:cpp/types/is pod]]
[[ru:cpp/types/is pod]]
[[zh:cpp/types/is pod]]</text>
      <sha1>oohxs16wz7oh0girmv5dyojqq3dlksz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is pointer</title>
    <ns>0</ns>
    <id>3137</id>
    <revision>
      <id>91234</id>
      <parentid>91227</parentid>
      <timestamp>2017-03-28T20:27:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>rvv</comment>
      <text xml:space="preserve" bytes="2206">{{cpp/title|is_pointer}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_pointer;
}}
{{dcl end}}

Checks whether {{tt|T}} is a [[cpp/language/pointer|pointer to object]] or a pointer to function (but not a pointer to member/member function). Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is a object/function pointer type. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_pointer_v = is_pointer&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is a pointer type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt; struct is_pointer_helper     : std::false_type {};
template&lt; class T &gt; struct is_pointer_helper&lt;T*&gt; : std::true_type {};
template&lt; class T &gt; struct is_pointer : is_pointer_helper&lt;typename std::remove_cv&lt;T&gt;::type&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_pointer&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pointer&lt;A *&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pointer&lt;A &amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pointer&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pointer&lt;int *&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pointer&lt;int **&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pointer&lt;int[10]&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_pointer&lt;std::nullptr_t&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
false
false
true
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_member_pointer}}
{{dsc inc | cpp/types/dsc is_member_object_pointer}}
{{dsc inc | cpp/types/dsc is_member_function_pointer}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc is_scalar}}

{{dsc end}}

[[de:cpp/types/is pointer]]
[[es:cpp/types/is pointer]]
[[fr:cpp/types/is pointer]]
[[it:cpp/types/is pointer]]
[[ja:cpp/types/is pointer]]
[[pt:cpp/types/is pointer]]
[[ru:cpp/types/is pointer]]
[[zh:cpp/types/is pointer]]</text>
      <sha1>okgg3rub8838b2k2snz7n8j5s34u7zo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is polymorphic</title>
    <ns>0</ns>
    <id>3180</id>
    <revision>
      <id>90986</id>
      <parentid>90880</parentid>
      <timestamp>2017-03-14T12:58:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1708">{{cpp/title|is_polymorphic}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_polymorphic;
}}
{{dcl end}}

If {{tt|T}} is a [[cpp/language/object#Polymorphic objects|polymorphic class]] (that is, a non-union class that declares or inherits at least one virtual function), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

If {{tt|T}} is a non-union class type, {{tt|T}} shall be a complete type; otherwise, the behavior is undefined.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_polymorphic_v = is_polymorphic&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a [[cpp/language/object#Polymorphic objects|polymorphic]] class type }}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {
    int m;
};

struct B {
    virtual void foo();
};

struct C : B {};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_polymorphic&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_polymorphic&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_polymorphic&lt;C&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_class}}
{{dsc inc | cpp/types/dsc is_abstract}}

{{dsc end}}

[[de:cpp/types/is polymorphic]]
[[es:cpp/types/is polymorphic]]
[[fr:cpp/types/is polymorphic]]
[[it:cpp/types/is polymorphic]]
[[ja:cpp/types/is polymorphic]]
[[pt:cpp/types/is polymorphic]]
[[ru:cpp/types/is polymorphic]]
[[zh:cpp/types/is polymorphic]]</text>
      <sha1>l1b6c21810np5cu28vtghvrqa545mgd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is reference</title>
    <ns>0</ns>
    <id>3167</id>
    <revision>
      <id>91010</id>
      <parentid>90869</parentid>
      <timestamp>2017-03-14T12:58:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1801">{{cpp/title|is_reference}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_reference;
}}
{{dcl end}}

If {{tt|T}} is a reference type (lvalue reference or rvalue reference), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_reference_v = is_reference&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a reference type }}

===Possible implementation===
{{eq fun
 | 1=
template &lt;class T&gt; struct is_reference      : std::false_type {};
template &lt;class T&gt; struct is_reference&lt;T&amp;&gt;  : std::true_type {};
template &lt;class T&gt; struct is_reference&lt;T&amp;&amp;&gt; : std::true_type {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_reference&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_reference&lt;A&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_reference&lt;A&amp;&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_reference&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_reference&lt;int&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_reference&lt;int&amp;&amp;&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
true
false
true
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_lvalue_reference}}
{{dsc inc | cpp/types/dsc is_rvalue_reference}}

{{dsc end}}

[[de:cpp/types/is reference]]
[[es:cpp/types/is reference]]
[[fr:cpp/types/is reference]]
[[it:cpp/types/is reference]]
[[ja:cpp/types/is reference]]
[[pt:cpp/types/is reference]]
[[ru:cpp/types/is reference]]
[[zh:cpp/types/is reference]]</text>
      <sha1>fe974uly3kp5vxjeuai92hr6ktm6e5d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is rvalue reference</title>
    <ns>0</ns>
    <id>3169</id>
    <revision>
      <id>90960</id>
      <parentid>90900</parentid>
      <timestamp>2017-03-14T12:57:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1910">{{cpp/title|is_rvalue_reference}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_rvalue_reference;
}}
{{dcl end}}

Checks whether {{tt|T}} is a rvalue reference type. Provides the member constant {{tt|value}} which is equal to {{c|true}}, if {{tt|T}} is a rvalue reference type. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_rvalue_reference_v = is_rvalue_reference&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is an rvalue reference type }}

===Possible implementation===
{{eq fun
 | 1=
template &lt;class T&gt; struct is_rvalue_reference      : std::false_type {};
template &lt;class T&gt; struct is_rvalue_reference&lt;T&amp;&amp;&gt; : std::true_type {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_rvalue_reference&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_rvalue_reference&lt;A&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_rvalue_reference&lt;A&amp;&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_rvalue_reference&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_rvalue_reference&lt;int&amp;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_rvalue_reference&lt;int&amp;&amp;&gt;::value &lt;&lt; '\n';
}
 | output=
false
false
true
false
false
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_lvalue_reference}}
{{dsc inc | cpp/types/dsc is_reference}}

{{dsc end}}

[[de:cpp/types/is rvalue reference]]
[[es:cpp/types/is rvalue reference]]
[[fr:cpp/types/is rvalue reference]]
[[it:cpp/types/is rvalue reference]]
[[ja:cpp/types/is rvalue reference]]
[[pt:cpp/types/is rvalue reference]]
[[ru:cpp/types/is rvalue reference]]
[[zh:cpp/types/is rvalue reference]]</text>
      <sha1>ieoooxx5wpu3o71fsdmw5tukcfe8o9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is same</title>
    <ns>0</ns>
    <id>2729</id>
    <revision>
      <id>90985</id>
      <parentid>90909</parentid>
      <timestamp>2017-03-14T12:58:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2193">{{cpp/title|is_same}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T, class U &gt;
struct is_same;
}}
{{dcl end}}

If {{tt|T}} and {{tt|U}} name the same type with the same const-volatile qualifications, provides the member constant {{tt|value}} equal to {{c|true}}. Otherwise {{tt|value}} is {{c|false}}.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T, class U &gt;
inline constexpr bool is_same_v = is_same&lt;T, U&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} and {{tt|U}} is the same type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T, class U&gt;
struct is_same : std::false_type {};

template&lt;class T&gt;
struct is_same&lt;T, T&gt; : std::true_type {};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;cstdint&gt;

void print_separator()
{
    std::cout &lt;&lt; &quot;-----\n&quot;;
}

int main()
{
    std::cout &lt;&lt; std::boolalpha;

    std::cout &lt;&lt; std::is_same&lt;int, int32_t&gt;::value &lt;&lt; '\n';   // true
    std::cout &lt;&lt; std::is_same&lt;int, int64_t&gt;::value &lt;&lt; '\n';   // false
    std::cout &lt;&lt; std::is_same&lt;float, int32_t&gt;::value &lt;&lt; '\n'; // false

    print_separator();

    std::cout &lt;&lt; std::is_same&lt;int, int&gt;::value &lt;&lt; &quot;\n&quot;;          // true
    std::cout &lt;&lt; std::is_same&lt;int, unsigned int&gt;::value &lt;&lt; &quot;\n&quot;; // false
    std::cout &lt;&lt; std::is_same&lt;int, signed int&gt;::value &lt;&lt; &quot;\n&quot;;   // true

    print_separator();

    // unlike other types 'char' is not 'unsigned' and not 'signed'
    std::cout &lt;&lt; std::is_same&lt;char, char&gt;::value &lt;&lt; &quot;\n&quot;;          // true
    std::cout &lt;&lt; std::is_same&lt;char, unsigned char&gt;::value &lt;&lt; &quot;\n&quot;; // false
    std::cout &lt;&lt; std::is_same&lt;char, signed char&gt;::value &lt;&lt; &quot;\n&quot;;   // false
}
 | output=
true
false
false
-----
true
false
true
-----
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_integral }}
{{dsc inc | cpp/types/dsc make_signed }}
{{dsc inc | cpp/types/dsc make_unsigned }}

{{dsc end}}

[[de:cpp/types/is same]]
[[es:cpp/types/is same]]
[[fr:cpp/types/is same]]
[[it:cpp/types/is same]]
[[ja:cpp/types/is same]]
[[pt:cpp/types/is same]]
[[ru:cpp/types/is same]]
[[zh:cpp/types/is same]]</text>
      <sha1>p7i4pbnnwlqc4jpv208t9e9puvmdxg2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is scalar</title>
    <ns>0</ns>
    <id>3143</id>
    <revision>
      <id>90952</id>
      <parentid>90919</parentid>
      <timestamp>2017-03-14T12:57:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2492">{{cpp/title|is_scalar}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_scalar;
}}
{{dcl end}}

If {{tt|T}} is a [[cpp/language/type|scalar type]] (that is a possibly cv-qualified [[cpp/types/is_arithmetic|arithmetic]], pointer, [[cpp/types/is_member_pointer|pointer to  member]], [[cpp/language/enum|enumeration]], or {{c|std::nullptr_t}} type), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}

===Helper variable template===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_scalar_v = is_scalar&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a scalar type }}

===Notes===
Each individual memory location in the C++ memory model, including the hidden memory locations used by language features (e.g virtual table pointer), has scalar type (or is a sequence of adjacent bit-fields of non-zero length). Sequencing of side-effects in expression evaluation, interthread synchronization, and dependency ordering are all defined in terms of individual scalar objects.

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_scalar : std::integral_constant&lt;bool,
                     std::is_arithmetic&lt;T&gt;::value     {{!!}}
                     std::is_enum&lt;T&gt;::value           {{!!}}
                     std::is_pointer&lt;T&gt;::value        {{!!}}
                     std::is_member_pointer&lt;T&gt;::value {{!!}}
                     std::is_null_pointer&lt;T&gt;::value&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
    class cls {};
    std::cout &lt;&lt; (std::is_scalar&lt;int&gt;::value
                     ? &quot;T is a scalar&quot;
                     : &quot;T is not a scalar&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; (std::is_scalar&lt;cls&gt;::value
                     ? &quot;T is a scalar&quot;
                     : &quot;T is not a scalar&quot;) &lt;&lt; '\n';
}

 | output=
T is a scalar
T is not a scalar
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_arithmetic}}
{{dsc inc | cpp/types/dsc is_enum}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_member_pointer}}

{{dsc end}}

[[de:cpp/types/is scalar]]
[[es:cpp/types/is scalar]]
[[fr:cpp/types/is scalar]]
[[it:cpp/types/is scalar]]
[[ja:cpp/types/is scalar]]
[[pt:cpp/types/is scalar]]
[[ru:cpp/types/is scalar]]
[[zh:cpp/types/is scalar]]</text>
      <sha1>9k8njqskz4734hhhc3xc9tp7x8cnq3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is signed</title>
    <ns>0</ns>
    <id>3185</id>
    <revision>
      <id>90997</id>
      <parentid>90915</parentid>
      <timestamp>2017-03-14T12:58:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2328">{{cpp/title|is_signed}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_signed;
}}
{{dcl end}}

If {{tt|T}} is an arithmetic type, provides the member constant {{tt|value}} equal {{c|true}} if {{tt|T(-1) &lt; T(0)}}: this results in {{tt|true}} for the floating-point types and the signed integer types, and in {{tt|false}} for the unsigned integer types and the type {{tt|bool}}.

For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_signed_v = is_signed&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a signed arithmetic type }}

===Possible implementation===
{{eq fun|1=
namespace detail {
template&lt;typename T,bool = std::is_arithmetic&lt;T&gt;::value&gt;
struct is_signed : std::integral_constant&lt;bool, T(-1) &lt; T(0)&gt; {};

template&lt;typename T&gt;
struct is_signed&lt;T,false&gt; : std::false_type {};
} // namespace detail

template&lt;typename T&gt;
struct is_signed : detail::is_signed&lt;T&gt;::type {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};
enum B : int {};
enum class C : int {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_signed&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_signed&lt;float&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_signed&lt;signed int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_signed&lt;unsigned int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_signed&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_signed&lt;C&gt;::value &lt;&lt; '\n';

    // shorter:
    std::cout &lt;&lt; std::is_signed&lt;signed int&gt;() &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_signed&lt;unsigned int&gt;() &lt;&lt; '\n';
}
 | output=
false
true
true
false
false
false
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_unsigned}}
{{dsc inc | cpp/types/numeric_limits/dsc is_signed}}
{{dsc inc | cpp/types/dsc is_arithmetic}}
{{dsc inc | cpp/types/dsc make_signed}}
{{dsc inc | cpp/types/dsc make_unsigned}}

{{dsc end}}

[[de:cpp/types/is signed]]
[[es:cpp/types/is signed]]
[[fr:cpp/types/is signed]]
[[it:cpp/types/is signed]]
[[ja:cpp/types/is signed]]
[[pt:cpp/types/is signed]]
[[ru:cpp/types/is signed]]
[[zh:cpp/types/is signed]]</text>
      <sha1>h7ljeo0jm9bo6dpichpocoma9jibtrc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is standard layout</title>
    <ns>0</ns>
    <id>3183</id>
    <revision>
      <id>90995</id>
      <parentid>90891</parentid>
      <timestamp>2017-03-14T12:58:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2269">{{cpp/title|is_standard_layout}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_standard_layout;
}}
{{dcl end}}

If {{tt|T}} is a standard layout type (that is, a scalar type, a standard-layout class, or an array of such type/class, possibly cv-qualified), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

A [[cpp/language/data_members|standard-layout class]] is a class that satisfies {{concept|StandardLayoutType}}.

The behavior is undefined if {{c|std::remove_all_extents_t&lt;T&gt;}} is an incomplete type and not (possibly cv-qualified) {{c|void}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_standard_layout_v = is_standard_layout&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a standard-layout type }}

===Notes===
A pointer to a standard-layout class may be converted (with reinterpret_cast) to a pointer to its first non-static data member and vice versa.

If a standard-layout union holds two or more standard-layout structs, it is permitted to inspect the common initial part of them.

The macro {{lc|offsetof}} can only be used with standard-layout classes.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {
    int m;
};

struct B {
    int m1;
private:
    int m2;
};

struct C {
    virtual void foo();
};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_standard_layout&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_standard_layout&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_standard_layout&lt;C&gt;::value &lt;&lt; '\n';
}
 | output=
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}
{{dsc inc | cpp/types/dsc is_pod}}
{{dsc inc | cpp/types/dsc offsetof}}

{{dsc end}}

[[de:cpp/types/is standard layout]]
[[es:cpp/types/is standard layout]]
[[fr:cpp/types/is standard layout]]
[[it:cpp/types/is standard layout]]
[[ja:cpp/types/is standard layout]]
[[pt:cpp/types/is standard layout]]
[[ru:cpp/types/is standard layout]]
[[zh:cpp/types/is standard layout]]</text>
      <sha1>a1btx6dm97sjeq9m9tvh0exn7brp47v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is swappable</title>
    <ns>0</ns>
    <id>14762</id>
    <revision>
      <id>90884</id>
      <parentid>85219</parentid>
      <timestamp>2017-03-14T12:35:20Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;constexpr bool&quot; to &quot;inline constexpr bool&quot;</comment>
      <text xml:space="preserve" bytes="2907">{{cpp/title|is_swappable_with|is_swappable|is_nothrow_swappable_with|is_nothrow_swappable}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++17 | num=1 | 1=
template&lt; class T, class U &gt;
struct is_swappable_with;
}}
{{dcl | since=c++17 | num=2 | 1=
template&lt; class T &gt;
struct is_swappable;
}}
{{dcl | since=c++17 | num=3 | 1=
template&lt; class T, class U &gt;
struct is_nothrow_swappable_with;
}}
{{dcl | since=c++17 | num=4 | 1=
template&lt; class T &gt;
struct is_nothrow_swappable;
}}
{{dcl end}}

@1@ If the expressions {{c|swap(std::declval&lt;T&gt;(), std::declval&lt;U&gt;())}} and
{{c|swap(std::declval&lt;U&gt;(), std::declval&lt;T&gt;())}} are both well-formed in unevaluated context after {{c|using std::swap;}} (see {{concept|Swappable}}), provides the member constant {{tt|value}} equal {{c|true}}. Otherwise, {{tt|value}} is {{c|false}}. [[cpp/language/access|Access checks]] are performed as if from a context unrelated to either type. 
@2@ If {{tt|T}} is not a referenceable type (i.e., possibly cv-qualified {{c|void}} or a function type with a ''cv-qualifier-seq'' or a ''ref-qualifier''), provides a member constant {{tt|value}} equal to {{c|false}}. Otherwise, provides a member constant {{tt|value}} equal to {{c|std::is_swappable_with&lt;T&amp;, T&amp;&gt;::value}}
@3@ Same as {{v|1}}, but evaluations of both expressions from {{v|1}} are known not to throw exceptions
@4@ Same as {{v|2}}, but uses {{c|is_nothrow_swappable_with}}.

{{cpp/types/cvaub|type2=U}}

=== Helper variable templates ===
{{dcl begin}}

{{dcl | since=c++17 | 1=
template &lt;class T, class U&gt; 
inline constexpr bool is_swappable_with_v = is_swappable_with&lt;T, U&gt;::value;
}}

{{dcl | since=c++17 | 1=
template &lt;class T&gt; 
inline constexpr bool is_swappable_v = is_swappable&lt;T&gt;::value;
}}

{{dcl | since=c++17 | 1=
template &lt;class T, class U&gt;
inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with&lt;T, U&gt;::value;
}}

{{dcl | since=c++17 | 1=
template &lt;class T&gt;
inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable&lt;T&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is swappable with {{tt|U}} }}

===Notes===
This trait does not check anything outside the immediate context of the swap expressions: if the use of {{tt|T}} or {{tt|U}} would trigger template specializations, generation of implicitly-defined special member functions etc, and those have errors, the actual swap may not compile even if {{tt|std::is_swappable_with&lt;T,U&gt;::value}} compiles and evaluates to {{tt|true}}.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/types/dsc is_move_assignable}}
{{dsc end}}

[[de:cpp/types/is swappable]]
[[es:cpp/types/is swappable]]
[[fr:cpp/types/is swappable]]
[[it:cpp/types/is swappable]]
[[ja:cpp/types/is swappable]]
[[pt:cpp/types/is swappable]]
[[ru:cpp/types/is swappable]]
[[zh:cpp/types/is swappable]]</text>
      <sha1>109k5mcmmovtdkhns5i0bbedpd1r36l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivial</title>
    <ns>0</ns>
    <id>3182</id>
    <revision>
      <id>90970</id>
      <parentid>90907</parentid>
      <timestamp>2017-03-14T12:58:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1803">{{cpp/title|is_trivial}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_trivial;
}}
{{dcl end}}

If {{tt|T}} is {{concept|TrivialType}} (that is, a scalar type, a trivially copyable class with a [[cpp/language/default_constructor#Trivial_default_constructor|trivial default constructor]], or array of such type/class, possibly cv-qualified), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

The behavior is undefined if {{c|std::remove_all_extents_t&lt;T&gt;}} is an incomplete type and not (possibly cv-qualified) {{c|void}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivial_v = is_trivial&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a trivial type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_trivial : std::integral_constant&lt; 
    bool,
    std::is_trivially_copyable&lt;T&gt;::value &amp;&amp;
    std::is_trivially_default_constructible&lt;T&gt;::value 
&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {
    int m;
};

struct B {
    B() {}
};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_trivial&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_trivial&lt;B&gt;::value &lt;&lt; '\n';
}
 | output=
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_trivially_copyable}}

{{dsc end}}

[[de:cpp/types/is trivial]]
[[es:cpp/types/is trivial]]
[[fr:cpp/types/is trivial]]
[[it:cpp/types/is trivial]]
[[ja:cpp/types/is trivial]]
[[pt:cpp/types/is trivial]]
[[ru:cpp/types/is trivial]]
[[zh:cpp/types/is trivial]]</text>
      <sha1>12cxflv4t0a8zbqf63w0y9u9tnhhwhd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially assignable</title>
    <ns>0</ns>
    <id>4235</id>
    <redirect title="cpp/types/is assignable" />
    <revision>
      <id>15334</id>
      <timestamp>2011-12-08T15:29:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is assignable]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/types/is_assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially constructible</title>
    <ns>0</ns>
    <id>4223</id>
    <redirect title="cpp/types/is constructible" />
    <revision>
      <id>15322</id>
      <timestamp>2011-12-08T15:26:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is constructible]]</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/types/is_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially copy assignable</title>
    <ns>0</ns>
    <id>4234</id>
    <redirect title="cpp/types/is copy assignable" />
    <revision>
      <id>15333</id>
      <timestamp>2011-12-08T15:29:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is copy assignable]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/types/is_copy_assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially copy constructible</title>
    <ns>0</ns>
    <id>4227</id>
    <redirect title="cpp/types/is copy constructible" />
    <revision>
      <id>15326</id>
      <timestamp>2011-12-08T15:27:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is copy constructible]]</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/types/is_copy_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially copyable</title>
    <ns>0</ns>
    <id>3175</id>
    <revision>
      <id>90971</id>
      <parentid>90912</parentid>
      <timestamp>2017-03-14T12:58:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2345">{{cpp/title|is_trivially_copyable}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_trivially_copyable;
}}
{{dcl end}}

If {{tt|T}} is a {{concept|TriviallyCopyable}} type, provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

The only trivially copyable types are scalar types, trivially copyable classes, and arrays of such types/classes (possibly const-qualified, but not volatile-qualified).

The behavior is undefined if {{c|std::remove_all_extents_t&lt;T&gt;}} is an incomplete type and not (possibly cv-qualified) {{c|void}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_trivially_copyable_v = is_trivially_copyable&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a trivially copyable type }}

===Notes===
Objects of trivially-copyable types are the only C++ objects that may be safely copied with {{lc|std::memcpy}} or serialized to/from binary files with {{l2tt|cpp/io/basic_ostream/write|write()|std::ofstream}}/{{l2tt|cpp/io/basic_istream/read|read()|std::ifstream}}. In general, a trivially copyable type is any type for which the underlying bytes can be copied to an array of char or unsigned char and into a new object of the same type, and the resulting object would have the same value as the original. 

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {
    int m;
};

struct B {
    B(const B&amp;) {}
};

struct C {
    virtual void foo();
};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_trivially_copyable&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_trivially_copyable&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_trivially_copyable&lt;C&gt;::value &lt;&lt; '\n';
}
 | output=
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_trivial}}

{{dsc end}}

[[de:cpp/types/is trivially copyable]]
[[es:cpp/types/is trivially copyable]]
[[fr:cpp/types/is trivially copyable]]
[[it:cpp/types/is trivially copyable]]
[[ja:cpp/types/is trivially copyable]]
[[pt:cpp/types/is trivially copyable]]
[[ru:cpp/types/is trivially copyable]]
[[zh:cpp/types/is trivially copyable]]</text>
      <sha1>s7ietlg5zq1gtydmc8qp7pmaotiyuqo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially default constructible</title>
    <ns>0</ns>
    <id>4225</id>
    <redirect title="cpp/types/is default constructible" />
    <revision>
      <id>15324</id>
      <timestamp>2011-12-08T15:27:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is default constructible]]</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/types/is_default_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially destructible</title>
    <ns>0</ns>
    <id>4237</id>
    <redirect title="cpp/types/is destructible" />
    <revision>
      <id>15336</id>
      <timestamp>2011-12-08T15:31:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is destructible]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/types/is_destructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially move assignable</title>
    <ns>0</ns>
    <id>4231</id>
    <redirect title="cpp/types/is move assignable" />
    <revision>
      <id>15330</id>
      <timestamp>2011-12-08T15:28:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is move assignable]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/types/is_move_assignable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is trivially move constructible</title>
    <ns>0</ns>
    <id>4230</id>
    <redirect title="cpp/types/is move constructible" />
    <revision>
      <id>15329</id>
      <timestamp>2011-12-08T15:28:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/is move constructible]]</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/types/is_move_constructible]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is union</title>
    <ns>0</ns>
    <id>3139</id>
    <revision>
      <id>90993</id>
      <parentid>90870</parentid>
      <timestamp>2017-03-14T12:58:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1383">{{cpp/title|is_union}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_union;
}}
{{dcl end}}

Checks whether {{tt|T}} is a union type. Provides the member constant {{tt|value}}, which is equal to {{c|true}} if {{tt|T}} is a union type . Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_union_v = is_union&lt;T&gt;::value;
}}
{{cpp/types/integral_constant/inherit | {{tt|T}} is a union type }}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

struct A {};

typedef union {
    int a;
    float b;
} B;

struct C {
    B d;
};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_union&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_union&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_union&lt;C&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_union&lt;int&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_class}}

{{dsc end}}

[[de:cpp/types/is union]]
[[es:cpp/types/is union]]
[[fr:cpp/types/is union]]
[[it:cpp/types/is union]]
[[ja:cpp/types/is union]]
[[pt:cpp/types/is union]]
[[ru:cpp/types/is union]]
[[zh:cpp/types/is union]]</text>
      <sha1>disf8ns1urg58hynrih1eaq90jzkjeu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is unsigned</title>
    <ns>0</ns>
    <id>3186</id>
    <revision>
      <id>90963</id>
      <parentid>90876</parentid>
      <timestamp>2017-03-14T12:57:53Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2193">{{cpp/title|is_unsigned}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_unsigned;
}}
{{dcl end}}

If {{tt|T}} is an arithmetic type, provides the member constant {{tt|value}} equal {{c|true}} if {{tt|T(0) &lt; T(-1)}}: this results in {{tt|true}} for the unsigned integer types and the type {{tt|bool}} and in {{tt|false}} for the the signed integer types and the floating-point types

For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_unsigned_v = is_unsigned&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is an unsigned arithmetic type }}

===Possible implementation===
{{eq fun|1=
namespace detail {
template&lt;typename T,bool = std::is_arithmetic&lt;T&gt;::value&gt;
struct is_unsigned : std::integral_constant&lt;bool, T(0) &lt; T(-1)&gt; {};

template&lt;typename T&gt;
struct is_unsigned&lt;T,false&gt; : std::false_type {};
} // namespace detail

template&lt;typename T&gt;
struct is_unsigned : detail::is_unsigned&lt;T&gt;::type {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

class A {};
enum B : unsigned {};
enum class C : unsigned {};

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_unsigned&lt;A&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_unsigned&lt;float&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_unsigned&lt;signed int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_unsigned&lt;unsigned int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_unsigned&lt;B&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_unsigned&lt;C&gt;::value &lt;&lt; '\n';
}
 | output=
false
false
false
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_signed}}
{{dsc inc | cpp/types/dsc is_arithmetic}}
{{dsc inc | cpp/types/dsc make_signed}}
{{dsc inc | cpp/types/dsc make_unsigned}}

{{dsc end}}

[[de:cpp/types/is unsigned]]
[[es:cpp/types/is unsigned]]
[[fr:cpp/types/is unsigned]]
[[it:cpp/types/is unsigned]]
[[ja:cpp/types/is unsigned]]
[[pt:cpp/types/is unsigned]]
[[ru:cpp/types/is unsigned]]
[[zh:cpp/types/is unsigned]]</text>
      <sha1>j4rqvvfe3dyeqqgwnz594za2ifywp6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is void</title>
    <ns>0</ns>
    <id>3136</id>
    <revision>
      <id>90967</id>
      <parentid>90901</parentid>
      <timestamp>2017-03-14T12:57:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1651">{{cpp/title|is_void}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_void;
}}
{{dcl end}}

Checks whether {{tt|T}} is a void type. Provides the member constant {{tt|value}} that is equal to {{c|true}}, if {{tt|T}} is the type {{c|void}}, {{c|const void}}, {{c|volatile void}}, or {{c|const volatile void}}. Otherwise, {{tt|value}} is equal to {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_void_v = is_void&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is the type {{c|void}} (possibly cv-qualified) }}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct is_void : std::is_same&lt;void, typename std::remove_cv&lt;T&gt;::type&gt; {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_void&lt;void&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_void&lt;int&gt;::value &lt;&lt; '\n';
} | output=
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc is_enum}}
{{dsc inc | cpp/types/dsc is_union}}
{{dsc inc | cpp/types/dsc is_class}}
{{dsc inc | cpp/types/dsc is_function}}
{{dsc inc | cpp/types/dsc is_object}}

{{dsc end}}

[[de:cpp/types/is void]]
[[es:cpp/types/is void]]
[[fr:cpp/types/is void]]
[[it:cpp/types/is void]]
[[ja:cpp/types/is void]]
[[pt:cpp/types/is void]]
[[ru:cpp/types/is void]]
[[zh:cpp/types/is void]]</text>
      <sha1>6kg9ipafn7tbfc7esht7lq3x9dp4cbt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/is volatile</title>
    <ns>0</ns>
    <id>3177</id>
    <revision>
      <id>91006</id>
      <parentid>90889</parentid>
      <timestamp>2017-03-14T12:58:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1456">{{cpp/title|is_volatile}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_volatile;
}}
{{dcl end}}

If {{tt|T}} is a volatile-qualified type (that is, {{c|volatile}}, or {{c|const volatile}}), provides the member constant {{tt|value}} equal {{c|true}}. For any other type, {{tt|value}} is {{c|false}}.

===Template parameters===
{{par begin}}
{{par | T | a type to check}}
{{par end}}
=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_volatile_v = is_volatile&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a volatile-qualified type }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt; struct is_volatile             : std::false_type {};
template&lt;class T&gt; struct is_volatile&lt;volatile T&gt; : std::true_type {};
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() 
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::is_volatile&lt;int&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::is_volatile&lt;volatile int&gt;::value  &lt;&lt; '\n';
}

 | output=
false
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_const}}

{{dsc end}}

[[de:cpp/types/is volatile]]
[[es:cpp/types/is volatile]]
[[fr:cpp/types/is volatile]]
[[it:cpp/types/is volatile]]
[[ja:cpp/types/is volatile]]
[[pt:cpp/types/is volatile]]
[[ru:cpp/types/is volatile]]
[[zh:cpp/types/is volatile]]</text>
      <sha1>f3qbjc4k274dtmcmrvd6ctqx6hiow51</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/make signed</title>
    <ns>0</ns>
    <id>3282</id>
    <revision>
      <id>81765</id>
      <parentid>63056</parentid>
      <timestamp>2015-11-11T00:03:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>likewise</comment>
      <text xml:space="preserve" bytes="1915">{{cpp/title|make_signed}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct make_signed;
}}
{{dcl end}}

If {{tt|T}} is an integral (except bool) or enumeration type, provides the member typedef {{tt|type}} which is the signed integer type corresponding to {{tt|T}}, with the same cv-qualifiers.

Otherwise, the behavior is undefined.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the signed integer type corresponding to {{tt|T}}}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using make_signed_t = typename make_signed&lt;T&gt;::type;
}}
{{dcl end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
    typedef std::make_signed&lt;char&gt;::type char_type;
    typedef std::make_signed&lt;int&gt;::type int_type;
    typedef std::make_signed&lt;volatile long&gt;::type long_type;

    bool ok1 = std::is_same&lt;char_type, signed char&gt;::value;
    bool ok2 = std::is_same&lt;int_type, signed int&gt;::value;
    bool ok3 = std::is_same&lt;long_type, volatile signed long&gt;::value;

    std::cout &lt;&lt; std::boolalpha
    &lt;&lt; &quot;char_type is 'signed char'?          : &quot; &lt;&lt; ok1 &lt;&lt; '\n'
    &lt;&lt; &quot;int_type  is 'signed int'?           : &quot; &lt;&lt; ok2 &lt;&lt; '\n'
    &lt;&lt; &quot;long_type is 'volatile signed long'? : &quot; &lt;&lt; ok3 &lt;&lt; '\n';
}
 | output=
char_type is 'signed char'?          : true
int_type  is 'signed int'?           : true
long_type is 'volatile signed long'? : true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_signed}}
{{dsc inc | cpp/types/dsc is_unsigned}}
{{dsc inc | cpp/types/dsc make_unsigned}}
{{dsc end}}

[[de:cpp/types/make signed]]
[[es:cpp/types/make signed]]
[[fr:cpp/types/make signed]]
[[it:cpp/types/make signed]]
[[ja:cpp/types/make signed]]
[[pt:cpp/types/make signed]]
[[ru:cpp/types/make signed]]
[[zh:cpp/types/make signed]]</text>
      <sha1>hp031xkx7hy9s3iglwk8xaiy3o3year</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/make unsigned</title>
    <ns>0</ns>
    <id>3283</id>
    <revision>
      <id>81764</id>
      <parentid>63057</parentid>
      <timestamp>2015-11-11T00:02:21Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>make UB explicit</comment>
      <text xml:space="preserve" bytes="1970">{{cpp/title|make_unsigned}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct make_unsigned;
}}
{{dcl end}}

If {{tt|T}} is an integral (except bool) or enumeration type, provides the member typedef {{tt|type}} which is the unsigned integer type corresponding to {{tt|T}}, with the same cv-qualifiers.

Otherwise, the behavior is undefined.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the unsigned integer type corresponding to {{tt|T}}}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using make_unsigned_t = typename make_unsigned&lt;T&gt;::type;
}}
{{dcl end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main() {
    typedef std::make_unsigned&lt;char&gt;::type char_type;
    typedef std::make_unsigned&lt;int&gt;::type int_type;
    typedef std::make_unsigned&lt;volatile long&gt;::type long_type;

    bool ok1 = std::is_same&lt;char_type, unsigned char&gt;::value; 
    bool ok2 = std::is_same&lt;int_type, unsigned int&gt;::value;
    bool ok3 = std::is_same&lt;long_type, volatile unsigned long&gt;::value;
    
    std::cout &lt;&lt; std::boolalpha
    &lt;&lt; &quot;char_type is 'unsigned char'?          : &quot; &lt;&lt; ok1 &lt;&lt; '\n'
    &lt;&lt; &quot;int_type  is 'unsigned int'?           : &quot; &lt;&lt; ok2 &lt;&lt; '\n'
    &lt;&lt; &quot;long_type is 'volatile unsigned long'? : &quot; &lt;&lt; ok3 &lt;&lt; '\n';
}
 | output=
char_type is 'unsigned char'?          : true
int_type  is 'unsigned int'?           : true
long_type is 'volatile unsigned long'? : true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_signed}}
{{dsc inc | cpp/types/dsc is_unsigned}}
{{dsc inc | cpp/types/dsc make_signed}}
{{dsc end}}

[[de:cpp/types/make unsigned]]
[[es:cpp/types/make unsigned]]
[[fr:cpp/types/make unsigned]]
[[it:cpp/types/make unsigned]]
[[ja:cpp/types/make unsigned]]
[[pt:cpp/types/make unsigned]]
[[ru:cpp/types/make unsigned]]
[[zh:cpp/types/make unsigned]]</text>
      <sha1>4yvefadcqbfst3pt4litoqjetzby6un</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/max align t</title>
    <ns>0</ns>
    <id>3269</id>
    <revision>
      <id>71412</id>
      <parentid>63058</parentid>
      <timestamp>2014-06-11T01:07:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to alignment</comment>
      <text xml:space="preserve" bytes="1330">{{cpp/title|max_align_t}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | cstddef}}
{{dcl | since=c++11 |
typedef /*implementation-defined*/ max_align_t;
}}
{{dcl end}}

{{lc|std::max_align_t}} is a POD type whose [[cpp/language/object#Alignment|alignment requirement]] is at least as strict (as large) as that of every scalar type.

===Notes===
Pointers returned by allocation functions such as {{lc|std::malloc}} are suitably aligned for any object, which means they are aligned at least as strict as {{lc|std::max_align_t}}.

{{lc|std::max_align_t}} is usually synonymous with the largest scalar type, which is {{c|long double}} on most platforms, and its alignment requirement is either 8 or 16.

===Example===
{{example
 | &lt;!-- todo: smarter example, perhaps use as aligned storage? --&gt;
 | code=
#include &lt;iostream&gt;
#include &lt;cstddef&gt;
int main()
{
    std::cout &lt;&lt; alignof(std::max_align_t) &lt;&lt; '\n';
}
 | output=
16
 | p = true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc alignof}}
{{dsc inc | cpp/types/dsc alignment_of}}
{{dsc inc | cpp/types/dsc is_scalar}}
{{dsc end}}

[[de:cpp/types/max align t]]
[[es:cpp/types/max align t]]
[[fr:cpp/types/max align t]]
[[it:cpp/types/max align t]]
[[ja:cpp/types/max align t]]
[[pt:cpp/types/max align t]]
[[ru:cpp/types/max align t]]
[[zh:cpp/types/max align t]]</text>
      <sha1>ntlf8rcfh35lwpg0jfzrxgomntwilfn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/negation</title>
    <ns>0</ns>
    <id>14511</id>
    <revision>
      <id>90917</id>
      <parentid>89899</parentid>
      <timestamp>2017-03-14T12:36:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;constexpr bool&quot; to &quot;inline constexpr bool&quot;</comment>
      <text xml:space="preserve" bytes="1894">{{cpp/title|negation}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++17 | num=1 | 1=
template&lt;class B&gt;
struct negation;
}}
{{dcl end}}

Forms the logical negation of the type trait {{tt|B}}.

The type {{c|std::negation&lt;B&gt;}} is a {{concept|UnaryTypeTrait}} with a BaseCharacteristic of {{c|std::bool_constant&lt;!bool(B::value)&gt;}}.

===Template parameters===
{{par begin}}
{{par | B | any type such that {{c|B::value}} is convertible to {{c|bool}} }}
{{par end}}

=== Helper variable template ===
{{dcl begin}}
{{dcl | since=c++17 | 1=
template&lt;class B&gt;
inline constexpr bool negation_v = negation&lt;B&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit | {{tt|B}} has a member {{tt|::value}} that is {{c|false}} when explicitly converted to {{tt|bool}} }}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class B&gt;
struct negation : std::bool_constant&lt;!B::value&gt; { };
}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

static_assert(
    std::is_same&lt;
        std::bool_constant&lt;false&gt;,
        typename std::negation&lt;std::bool_constant&lt;true&gt;&gt;::type&gt;::value,
    &quot;&quot;);
static_assert(
    std::is_same&lt;
        std::bool_constant&lt;true&gt;,
        typename std::negation&lt;std::bool_constant&lt;false&gt;&gt;::type&gt;::value,
    &quot;&quot;);

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; std::negation&lt;std::bool_constant&lt;true&gt;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::negation&lt;std::bool_constant&lt;false&gt;&gt;::value &lt;&lt; '\n';
}
 | output=
false
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc conjunction}}
{{dsc inc | cpp/types/dsc disjunction}}
{{dsc inc | cpp/types/dsc integral_constant}}
{{dsc end}}

[[de:cpp/types/negation]]
[[es:cpp/types/negation]]
[[fr:cpp/types/negation]]
[[it:cpp/types/negation]]
[[ja:cpp/types/negation]]
[[pt:cpp/types/negation]]
[[ru:cpp/types/negation]]
[[zh:cpp/types/negation]]</text>
      <sha1>3pyuhycfavdsrkllm5702jlxkddesq7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/nullptr t</title>
    <ns>0</ns>
    <id>2874</id>
    <revision>
      <id>80272</id>
      <parentid>63059</parentid>
      <timestamp>2015-08-01T13:01:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>mentino that it's not a pointer type, seealso is_null_pointer</comment>
      <text xml:space="preserve" bytes="1452">{{cpp/title|nullptr_t}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | cstddef}}
{{dcl | since=c++11 |
typedef decltype(nullptr) nullptr_t;
}}
{{dcl end}}

{{lc|std::nullptr_t}} is the type of the null pointer literal, {{ltt|cpp/language/nullptr|nullptr}}. It is a distinct type that is not itself a pointer type or a pointer to member type.

===Example===
{{example
 | If two or more overloads accept different pointer types, an overload for {{lc|std::nullptr_t}} is necessary to accept a null pointer argument.
 | code=
#include &lt;cstddef&gt;
#include &lt;iostream&gt;

void f(int* pi)
{
   std::cout &lt;&lt; &quot;Pointer to integer overload\n&quot;;
}

void f(double* pd)
{
   std::cout &lt;&lt; &quot;Pointer to double overload\n&quot;;
}

void f(std::nullptr_t nullp)
{
   std::cout &lt;&lt; &quot;null pointer overload\n&quot;;
}

int main()
{
    int* pi; double* pd;

    f(pi);
    f(pd);
    f(nullptr);  // would be ambiguous without void f(nullptr_t)
    // f(NULL);  // ambiguous overload: all three functions are candidates
}
 | output=
Pointer to integer overload
Pointer to double overload
null pointer overload
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc nullptr}}
{{dsc inc | cpp/types/dsc NULL}}
{{dsc inc | cpp/types/dsc is_null_pointer}}
{{dsc end}}

[[de:cpp/types/nullptr t]]
[[es:cpp/types/nullptr t]]
[[fr:cpp/types/nullptr t]]
[[it:cpp/types/nullptr t]]
[[ja:cpp/types/nullptr t]]
[[pt:cpp/types/nullptr t]]
[[ru:cpp/types/nullptr t]]
[[zh:cpp/types/nullptr t]]</text>
      <sha1>28esh99q1xz7lh8e4v6ea699ipoofu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits</title>
    <ns>0</ns>
    <id>2032</id>
    <revision>
      <id>85524</id>
      <parentid>85523</parentid>
      <timestamp>2016-04-24T04:22:08Z</timestamp>
      <contributor>
        <ip>1.160.21.18</ip>
      </contributor>
      <comment>Undo revision 85523 by [[Special:Contributions/1.160.21.18|1.160.21.18]] ([[User talk:1.160.21.18|talk]])</comment>
      <text xml:space="preserve" bytes="9946">{{cpp/title|numeric_limits}}
{{cpp/types/numeric_limits/navbar}}

{{ddcl | header=limits | 
template&lt; class T &gt; class numeric_limits;
}}

The {{tt|numeric_limits}} class template provides a standardized way to query various properties of arithmetic types (e.g. the largest possible value for type {{c|int}} is {{c|std::numeric_limits&lt;int&gt;::max()}}). 

This information is provided via specializations of the {{tt|numeric_limits}} template. The standard library makes available specializations for all arithmetic types:

{{dcl begin}}
{{dcl header | limits}}
{{dcl |
template&lt;&gt; class numeric_limits&lt;bool&gt;;
template&lt;&gt; class numeric_limits&lt;char&gt;;
template&lt;&gt; class numeric_limits&lt;signed char&gt;;
template&lt;&gt; class numeric_limits&lt;unsigned char&gt;;
template&lt;&gt; class numeric_limits&lt;wchar_t&gt;;
template&lt;&gt; class numeric_limits&lt;char16_t&gt;;   // C++11 feature
template&lt;&gt; class numeric_limits&lt;char32_t&gt;;   // C++11 feature
template&lt;&gt; class numeric_limits&lt;short&gt;;
template&lt;&gt; class numeric_limits&lt;unsigned short&gt;;
template&lt;&gt; class numeric_limits&lt;int&gt;;
template&lt;&gt; class numeric_limits&lt;unsigned int&gt;;
template&lt;&gt; class numeric_limits&lt;long&gt;;
template&lt;&gt; class numeric_limits&lt;unsigned long&gt;;
template&lt;&gt; class numeric_limits&lt;long long&gt;;
template&lt;&gt; class numeric_limits&lt;unsigned long long&gt;;
template&lt;&gt; class numeric_limits&lt;float&gt;;
template&lt;&gt; class numeric_limits&lt;double&gt;;
template&lt;&gt; class numeric_limits&lt;long double&gt;;
}}
{{dcl end}}

Additionally, a specialization exists for every cv-qualified version of each arithmetic type, identical to the unqualified specialization, e.g. {{tt|std::numeric_limits&lt;const int&gt;}}, {{tt|std::numeric_limits&lt;volatile int&gt;}}, and {{tt|std::numeric_limits&lt;const volatile int&gt;}} are provided and are equivalent to {{tt|std::numeric_limits&lt;int&gt;}}.

The standard library types that are aliases of arithmetic types (such as {{lc|std::size_t}} or {{lc|std::streamsize}}) may also be examined with the {{lc|std::numeric_limits}} type traits.

Non-arithmetic standard types, such as {{c|std::complex&lt;T&gt;}} or {{c|std::nullptr_t}}, do not have specializations.

Implementations may provide specializations of {{lc|std::numeric_limits}} for implementation-specific types: e.g. GCC provides {{c|std::numeric_limits&lt;__int128&gt;}}. Non-standard libraries may [[cpp/language/extending_std|add specializations]] for library-provided types, e.g. [http://openexr.com/ OpenEXR] provides {{c|std::numeric_limits&lt;half&gt;}} for a 16-bit floating-point type.

===Template parameters===
{{par begin}}
{{par | T | a type to retrieve numeric properties for}}
{{par end}}

===Member constants===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc is_specialized}}
{{dsc inc | cpp/types/numeric_limits/dsc is_signed}}
{{dsc inc | cpp/types/numeric_limits/dsc is_integer}}
{{dsc inc | cpp/types/numeric_limits/dsc is_exact}}
{{dsc inc | cpp/types/numeric_limits/dsc has_infinity}}
{{dsc inc | cpp/types/numeric_limits/dsc has_quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_signaling_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm_loss}}
{{dsc inc | cpp/types/numeric_limits/dsc round_style}}
{{dsc inc | cpp/types/numeric_limits/dsc is_iec559}}
{{dsc inc | cpp/types/numeric_limits/dsc is_bounded}}
{{dsc inc | cpp/types/numeric_limits/dsc is_modulo}}
{{dsc inc | cpp/types/numeric_limits/dsc digits}}
{{dsc inc | cpp/types/numeric_limits/dsc digits10}}
{{dsc inc | cpp/types/numeric_limits/dsc max_digits10}}
{{dsc inc | cpp/types/numeric_limits/dsc radix}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent10}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent10}}
{{dsc inc | cpp/types/numeric_limits/dsc traps}}
{{dsc inc | cpp/types/numeric_limits/dsc tinyness_before}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc min}}
{{dsc inc | cpp/types/numeric_limits/dsc lowest}}
{{dsc inc | cpp/types/numeric_limits/dsc max}}
{{dsc inc | cpp/types/numeric_limits/dsc epsilon}}
{{dsc inc | cpp/types/numeric_limits/dsc round_error}}
{{dsc inc | cpp/types/numeric_limits/dsc infinity}}
{{dsc inc | cpp/types/numeric_limits/dsc quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc signaling_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc denorm_min}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc float_round_style}}
{{dsc inc | cpp/types/numeric_limits/dsc float_denorm_style}}
{{dsc end}}

===Relationship with C library macro constants===

{| class=&quot;wikitable&quot; style=&quot;font-size:85%; white-space: nowrap;&quot;
|-
! rowspan=2 | Specialization 
! colspan=11 | Members
|-
&lt;!-- --&gt;
! {{tt|min()}}
! {{tt|lowest()}}&lt;br&gt;{{mark c++11}}
! {{tt|max()}}
! {{tt|epsilon()}}
! {{tt|digits}}
! {{tt|digits10}}
! {{tt|min_exponent}}
! {{tt|min_exponent10}}
! {{tt|max_exponent}}
! {{tt|max_exponent10}}
! {{tt|radix}}
|-
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|bool}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
|
|
|
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|char}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{lc|CHAR_MIN}}
| {{lc|CHAR_MIN}}
| {{lc|CHAR_MAX}} 
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|signed char}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{lc|SCHAR_MIN}}
| {{lc|SCHAR_MIN}}
| {{lc|SCHAR_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|unsigned char}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{c|0}}
| {{c|0}}
| {{lc|UCHAR_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|wchar_t}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{lc|WCHAR_MIN}}
| {{lc|WCHAR_MIN}}
| {{lc|WCHAR_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|char16_t}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{c|0}}
| {{c|0}}
| {{lc|UINT_LEAST16_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|char32_t}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{c|0}}
| {{c|0}}
| {{lc|UINT_LEAST32_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|short}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| rowspan=2 | {{lc|SHRT_MIN}}
| rowspan=2 | {{lc|SHRT_MIN}}
| rowspan=2 | {{lc|SHRT_MAX}}
|
|
|
|
|
|
|
| rowspan=2 | {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|signed short}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|
|
|
|
|
|
|
&lt;!-- --&gt;
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|unsigned short}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{c|0}}
| {{c|0}}
| {{lc|USHRT_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|int}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| rowspan=2 | {{lc|INT_MIN}}
| rowspan=2 | {{lc|INT_MIN}}
| rowspan=2 | {{lc|INT_MAX}}
|
|
|
|
|
|
|
| rowspan=2 | {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|signed int}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|
|
|
|
|
|
|
&lt;!-- --&gt;
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|unsigned int}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{c|0}}
| {{c|0}}
| {{lc|UINT_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|long}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| rowspan=2 | {{lc|LONG_MIN}}
| rowspan=2 | {{lc|LONG_MIN}}
| rowspan=2 | {{lc|LONG_MAX}}
|
|
|
|
|
|
|
| rowspan=2 | {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|signed long}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|
|
|
|
|
|
&lt;!-- --&gt;
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|unsigned long}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{c|0}}
| {{c|0}}
| {{lc|ULONG_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|long long}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| rowspan=2 | {{lc|LLONG_MIN}}
| rowspan=2 | {{lc|LLONG_MIN}}
| rowspan=2 | {{lc|LLONG_MAX}}
|
|
|
|
|
|
|
| rowspan=2 | {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|signed long long}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
&lt;!-- --&gt;
&lt;!-- --&gt;
&lt;!-- --&gt;
|
|
|
|
|
|
|
&lt;!-- --&gt;
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|unsigned long long}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{c|0}}
| {{c|0}}
| {{lc|ULLONG_MAX}}
|
|
|
|
|
|
|
| {{c|2}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|float}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{lc|FLT_MIN}}
| {{c|-FLT_MAX}}
| {{lc|FLT_MAX}}
| {{lc|FLT_EPSILON}}
| {{lc|FLT_MANT_DIG}}
| {{lc|FLT_DIG}}
| {{lc|FLT_MIN_EXP}}
| {{lc|FLT_MIN_10_EXP}}
| {{lc|FLT_MAX_EXP}}
| {{lc|FLT_MAX_10_EXP}}
| {{lc|FLT_RADIX}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|double}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{lc|DBL_MIN}}
| {{c|-DBL_MAX}}
| {{lc|DBL_MAX}}
| {{lc|DBL_EPSILON}}
| {{lc|DBL_MANT_DIG}}
| {{lc|DBL_DIG}}
| {{lc|DBL_MIN_EXP}}
| {{lc|DBL_MIN_10_EXP}}
| {{lc|DBL_MAX_EXP}}
| {{lc|DBL_MAX_10_EXP}}
| {{lc|FLT_RADIX}}
|-
| {{tt|&lt;sub&gt;numeric_limits&lt; &lt;/sub&gt;}}{{c|long double}}{{tt|&lt;sub&gt; &gt;&lt;/sub&gt;}}
| {{lc|LDBL_MIN}}
| {{c|-LDBL_MAX}}
| {{lc|LDBL_MAX}}
| {{lc|LDBL_EPSILON}}
| {{lc|LDBL_MANT_DIG}}
| {{lc|LDBL_DIG}}
| {{lc|LDBL_MIN_EXP}}
| {{lc|LDBL_MIN_10_EXP}}
| {{lc|LDBL_MAX_EXP}}
| {{lc|LDBL_MAX_10_EXP}}
| {{lc|FLT_RADIX}}
|}

===Example===
{{example
 | p=true
 | code=
#include &lt;limits&gt;
#include &lt;iostream&gt;

int main() 
{
    std::cout &lt;&lt; &quot;type\tlowest\thighest\n&quot;;
    std::cout &lt;&lt; &quot;int\t&quot;
              &lt;&lt; std::numeric_limits&lt;int&gt;::lowest() &lt;&lt; '\t'
              &lt;&lt; std::numeric_limits&lt;int&gt;::max() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;float\t&quot;
              &lt;&lt; std::numeric_limits&lt;float&gt;::lowest() &lt;&lt; '\t'
              &lt;&lt; std::numeric_limits&lt;float&gt;::max() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;double\t&quot;
              &lt;&lt; std::numeric_limits&lt;double&gt;::lowest() &lt;&lt; '\t'
              &lt;&lt; std::numeric_limits&lt;double&gt;::max() &lt;&lt; '\n';
}
 | output=
type    lowest         highest
int     -2147483648    2147483647
float   -3.40282e+38   3.40282e+38
double  -1.79769e+308  1.79769e+308
}}

===See also===
* [[c/types/integer    | Fixed width integer types]]
* [[cpp/language/types | Arithmetic types]]
* [[cpp/language/type  | C++ type system overview]]
* [[cpp/types          | Type support (basic types, RTTI, type traits)]]

[[de:cpp/types/numeric limits]]
[[es:cpp/types/numeric limits]]
[[fr:cpp/types/numeric limits]]
[[it:cpp/types/numeric limits]]
[[ja:cpp/types/numeric limits]]
[[pt:cpp/types/numeric limits]]
[[ru:cpp/types/numeric limits]]
[[zh:cpp/types/numeric limits]]</text>
      <sha1>d3npba9q8gym8h7qkhmo4eltsdri00f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/denorm min</title>
    <ns>0</ns>
    <id>3030</id>
    <revision>
      <id>91564</id>
      <parentid>64824</parentid>
      <timestamp>2017-03-31T19:50:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2808">{{cpp/types/numeric_limits/title | denorm_min}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T denorm_min();
}}
{{dcl | since=c++11 |1=
static constexpr T denorm_min();
}}
{{dcl rev end}}
{{dcl end}}

Returns the minimum positive [[enwiki:Denormal number|subnormal value]] of the type {{tt|T}}, if {{c|1=std::numeric_limits&lt;T&gt;::has_denorm != std::denorm_absent}}, otherwise returns {{c|std::numeric_limits&lt;T&gt;::min()}}. Only meaningful for floating-point types.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::denorm_min()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|false}}     }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{math|2{{su|p=-149}}}} if {{c|1=std::numeric_limits&lt;float&gt;::is_iec559 == true}} }}
{{dsc | {{c|double}}            | {{math|2{{su|p=-1074}}}} if {{c|1=std::numeric_limits&lt;double&gt;::is_iec559 == true}} }}
{{dsc | {{c|long double}}       | /* implementation-defined */ }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | Demonstates the underlying bit structure of the denorm_min()
 | code=
#include &lt;cstdint&gt;
#include &lt;limits&gt;
#include &lt;cassert&gt;
int main()
{
    // the smallest subnormal value has sign bit = 0, exponent = 0
    // and only the least significant bit of the fraction is 1
    uint32_t denorm_bits = 0x0001;
    float denorm_float = reinterpret_cast&lt;float&amp;&gt;(denorm_bits);
    assert(denorm_float == std::numeric_limits&lt;float&gt;::denorm_min());
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc min}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm}}
{{dsc inc | cpp/types/numeric_limits/dsc lowest}}
{{dsc end}}

[[de:cpp/types/numeric limits/denorm min]]
[[es:cpp/types/numeric limits/denorm min]]
[[fr:cpp/types/numeric limits/denorm min]]
[[it:cpp/types/numeric limits/denorm min]]
[[ja:cpp/types/numeric limits/denorm min]]
[[pt:cpp/types/numeric limits/denorm min]]
[[ru:cpp/types/numeric limits/denorm min]]
[[zh:cpp/types/numeric limits/denorm min]]</text>
      <sha1>jmqr0oi90ftazzgntcrf7780toqg0zh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/digits</title>
    <ns>0</ns>
    <id>3074</id>
    <revision>
      <id>83334</id>
      <parentid>83332</parentid>
      <timestamp>2016-02-01T07:58:04Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2506">{{cpp/types/numeric_limits/title | digits}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const int digits;
}}
{{dcl | since=c++11 |1=
static constexpr int digits;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::digits}} is the number of digits in base-{{rlp|radix}} that can be represented by the type {{tt|T}} without change. For integer types, this is the number of bits not counting the sign bit and the padding bits (if any). For floating-point types, this is the number of digits in the mantissa.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::digits}} (assuming no padding bits)}}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|1}} }}
{{dsc | {{c|char}}              | {{c|1=CHAR_BIT - std::numeric_limits&lt;char&gt;::is_signed}} }}
{{dsc | {{c|signed char}}       | {{c|CHAR_BIT-1}} }}
{{dsc | {{c|unsigned char}}     | {{lc|CHAR_BIT}} }}
{{dsc | {{c|wchar_t}}           | {{c|1=CHAR_BIT*sizeof(wchar_t) - std::numeric_limits&lt;wchar_t&gt;::is_signed}} }}
{{dsc | {{c|char16_t}}          | {{c|CHAR_BIT*sizeof(char16_t)}} }}
{{dsc | {{c|char32_t}}          | {{c|CHAR_BIT*sizeof(char32_t)}} }}
{{dsc | {{c|short}}             | {{c|CHAR_BIT*sizeof(short)-1}} }}
{{dsc | {{c|unsigned short}}    | {{c|CHAR_BIT*sizeof(short)}} }}
{{dsc | {{c|int}}               | {{c|CHAR_BIT*sizeof(int)-1}} }}
{{dsc | {{c|unsigned int}}      | {{c|CHAR_BIT*sizeof(int)}} }}
{{dsc | {{c|long}}              | {{c|CHAR_BIT*sizeof(long)-1}} }}
{{dsc | {{c|unsigned long}}     | {{c|CHAR_BIT*sizeof(long)}} }}
{{dsc | {{c|long long}}         | {{c|CHAR_BIT*sizeof(long long)-1}} }}
{{dsc | {{c|unsigned long long}}| {{c|CHAR_BIT*sizeof(long long)}} }}
{{dsc | {{c|float}}             | {{lc|FLT_MANT_DIG}} }}
{{dsc | {{c|double}}            | {{lc|DBL_MANT_DIG}} }}
{{dsc | {{c|long double}}       | {{lc|LDBL_MANT_DIG}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc radix}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc end}}

[[de:cpp/types/numeric limits/digits]]
[[es:cpp/types/numeric limits/digits]]
[[fr:cpp/types/numeric limits/digits]]
[[it:cpp/types/numeric limits/digits]]
[[ja:cpp/types/numeric limits/digits]]
[[pt:cpp/types/numeric limits/digits]]
[[ru:cpp/types/numeric limits/digits]]
[[zh:cpp/types/numeric limits/digits]]</text>
      <sha1>rpqxydjge0qo07gko8coih31qoyzcqx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/digits10</title>
    <ns>0</ns>
    <id>3075</id>
    <revision>
      <id>88279</id>
      <parentid>61863</parentid>
      <timestamp>2016-11-15T16:01:24Z</timestamp>
      <contributor>
        <ip>212.184.189.82</ip>
      </contributor>
      <comment>change singed keyword usage to unsigned for unsigned integer in table</comment>
      <text xml:space="preserve" bytes="3954">{{cpp/types/numeric_limits/title | digits10}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const int digits10;
}}
{{dcl | since=c++11 |1=
static constexpr int digits10
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::digits10}} is the number of base-10 digits that can be represented by the type {{tt|T}} without change, that is, any number with this many decimal digits can be converted to a value of type {{tt|T}} and back to decimal form, without change due to rounding or overflow. For base-{{rlp|radix}} types, it is the value of {{rlp|digits}} ({{c|digits-1}} for floating-point types) multiplied by {{math|log{{su|b=10}}(radix)}} and rounded down.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::digits10}} }}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|0}} }}
{{dsc | {{c|char}}              | {{c|std::numeric_limits&lt;char&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|signed char}}       | {{c|std::numeric_limits&lt;signed char&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|unsigned char}}     | {{c|std::numeric_limits&lt;unsigned char&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|wchar_t}}           | {{c|std::numeric_limits&lt;wchar_t&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|char16_t}}          | {{c|std::numeric_limits&lt;char16_t&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|char32_t}}          | {{c|std::numeric_limits&lt;char32_t&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|short}}             | {{c|std::numeric_limits&lt;short&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|unsigned short}}    | {{c|std::numeric_limits&lt;unsigned short&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|int}}               | {{c|std::numeric_limits&lt;int&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|unsigned int}}      | {{c|std::numeric_limits&lt;unsigned int&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|long}}              | {{c|std::numeric_limits&lt;long&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|unsigned long}}     | {{c|std::numeric_limits&lt;unsigned long&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|long long}}         | {{c|std::numeric_limits&lt;long long&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|unsigned long long}}| {{c|std::numeric_limits&lt;unsigned long long&gt;::digits * std::log10(2)}} }}
{{dsc | {{c|float}}             | {{lc|FLT_DIG}} }}
{{dsc | {{c|double}}            | {{lc|DBL_DIG}} }}
{{dsc | {{c|long double}}       | {{lc|LDBL_DIG}} }}
{{dsc end}}

===Example===
An 8-bit binary type can represent any two-digit decimal number exactly, but 3-digit decimal numbers 256..999 cannot be represented. The value of {{tt|digits10}} for an 8-bit type is 2 ({{c|1=8 * std::log10(2)}} is 2.41)

The standard 32-bit IEEE 754 floating-point type has a 24 bit fractional part (23 bits written, one implied), which may suggest that it can represent 7 digit decimals ({{c|1=24 * std::log10(2)}} is 7.22), but relative rounding errors are non-uniform and some floating-point values with 7 decimal digits do not survive conversion to 32-bit float and back: the smallest positive example is {{c|8.589973e9}}, which becomes {{c|8.589974e9}} after the roundtrip. These rounding errors cannot exceed one bit in the representation, and {{tt|digits10}} is calculated as {{c|1=(24-1)*std::log10(2)}}, which is 6.92. Rounding down results in the value 6.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc radix}}
{{dsc inc | cpp/types/numeric_limits/dsc digits}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc end}}

[[de:cpp/types/numeric limits/digits10]]
[[es:cpp/types/numeric limits/digits10]]
[[fr:cpp/types/numeric limits/digits10]]
[[it:cpp/types/numeric limits/digits10]]
[[ja:cpp/types/numeric limits/digits10]]
[[pt:cpp/types/numeric limits/digits10]]
[[ru:cpp/types/numeric limits/digits10]]
[[zh:cpp/types/numeric limits/digits10]]</text>
      <sha1>0mp6arbvbktrkktt9tclv2gg90njcqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/epsilon</title>
    <ns>0</ns>
    <id>3027</id>
    <revision>
      <id>91926</id>
      <parentid>83447</parentid>
      <timestamp>2017-03-31T20:02:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3118">{{cpp/types/numeric_limits/title | epsilon}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T epsilon();
}}
{{dcl | since=c++11 |1=
static constexpr T epsilon();
}}
{{dcl rev end}}
{{dcl end}}

Returns the machine epsilon, that is, the difference between {{c|1.0}} and the next value representable by the floating-point type {{tt|T}}. It is only meaningful if {{c|1=std::numeric_limits&lt;T&gt;::is_integer == false}}.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::epsilon()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|false}}       }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|FLT_EPSILON}}   }}
{{dsc | {{c|double}}            | {{lc|DBL_EPSILON}}   }}
{{dsc | {{c|long double}}       | {{lc|LDBL_EPSILON}}  }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | Demonstrates the use of machine epsilon to compare floating-point values for equality
 | code=
#include &lt;cmath&gt;
#include &lt;limits&gt;
#include &lt;iomanip&gt;
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;algorithm&gt;

template&lt;class T&gt;
typename std::enable_if&lt;!std::numeric_limits&lt;T&gt;::is_integer, bool&gt;::type
    almost_equal(T x, T y, int ulp)
{
    // the machine epsilon has to be scaled to the magnitude of the values used
    // and multiplied by the desired precision in ULPs (units in the last place)
    return std::abs(x-y) &lt; std::numeric_limits&lt;T&gt;::epsilon() * std::abs(x+y) * ulp
    // unless the result is subnormal
           {{!!}} std::abs(x-y) &lt; std::numeric_limits&lt;T&gt;::min();
}
int main()
{
    double d1 = 0.2;
    double d2 = 1 / std::sqrt(5) / std::sqrt(5);

    if(d1 == d2)
            std::cout &lt;&lt; &quot;d1 == d2\n&quot;;
    else
            std::cout &lt;&lt; &quot;d1 != d2\n&quot;;

    if(almost_equal(d1, d2, 2))
            std::cout &lt;&lt; &quot;d1 almost equals d2\n&quot;;
    else
            std::cout &lt;&lt; &quot;d1 does not almost equal d2\n&quot;;
}
 | output=
d1 != d2
d1 almost equals d2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc nextafter}}
{{dsc end}}

[[de:cpp/types/numeric limits/epsilon]]
[[es:cpp/types/numeric limits/epsilon]]
[[fr:cpp/types/numeric limits/epsilon]]
[[it:cpp/types/numeric limits/epsilon]]
[[ja:cpp/types/numeric limits/epsilon]]
[[pt:cpp/types/numeric limits/epsilon]]
[[ru:cpp/types/numeric limits/epsilon]]
[[zh:cpp/types/numeric limits/epsilon]]</text>
      <sha1>juw2zdwjol0u3f502rjewatn212eavs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/float denorm style</title>
    <ns>0</ns>
    <id>3093</id>
    <revision>
      <id>59399</id>
      <parentid>51546</parentid>
      <timestamp>2013-06-01T06:33:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1233">{{cpp/title | float_denorm_style}}
{{cpp/types/numeric_limits/navbar}}

{{dcl begin}}
{{dcl header | limits}}
{{dcl | 1=
enum float_denorm_style {
    denorm_indeterminate = -1,
    denorm_absent        = 0,
    denorm_present       = 1
};
}}
{{dcl end}}

Enumeration constants of type {{lc|std::float_denorm_style}} indicate support of subnormal values by floating-point types.

===Enumeration constants===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{lc|std::denorm_indeterminate}} | Support of subnormal values cannot be determined }}
{{dsc | {{lc|std::denorm_absent}}        | The type does not support subnormal values}}
{{dsc | {{lc|std::denorm_present}}       | The type allows subnormal values}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm}}
{{dsc end}}

[[de:cpp/types/numeric limits/float denorm style]]
[[es:cpp/types/numeric limits/float denorm style]]
[[fr:cpp/types/numeric limits/float denorm style]]
[[it:cpp/types/numeric limits/float denorm style]]
[[ja:cpp/types/numeric limits/float denorm style]]
[[pt:cpp/types/numeric limits/float denorm style]]
[[ru:cpp/types/numeric limits/float denorm style]]
[[zh:cpp/types/numeric limits/float denorm style]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/float round style</title>
    <ns>0</ns>
    <id>3092</id>
    <revision>
      <id>59402</id>
      <parentid>51547</parentid>
      <timestamp>2013-06-01T06:33:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1599">{{cpp/title | float_round_style}}
{{cpp/types/numeric_limits/navbar}}

{{dcl begin}}
{{dcl header | limits}}
{{dcl | 1=
enum float_round_style {
    round_indeterminate       = -1,
    round_toward_zero         = 0,
    round_to_nearest          = 1, 
    round_toward_infinity     = 2,
    round_toward_neg_infinity = 3
};
}}
{{dcl end}}

Enumeration constants of type {{lc|std::float_round_style}} indicate the rounding style used by floating-point arithmetics whenever a result of an expression is stored in an object of a floating-point type. The values are:

===Enumeration constants===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{lc|std::round_indeterminate}} | Rounding style cannot be determined }}
{{dsc | {{lc|std::round_toward_zero}}   | Rounding toward zero}}
{{dsc | {{lc|std::round_to_nearest}}    | Rounding toward nearest representable value}}
{{dsc | {{lc|std::round_toward_infinity}}    | Rounding toward positive infinity }}
{{dsc | {{lc|std::round_toward_neg_infinity}}    | Rounding toward negative infinity }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc round_style}}
{{dsc inc | cpp/numeric/fenv/dsc FE_round}}
{{dsc end}}

[[de:cpp/types/numeric limits/float round style]]
[[es:cpp/types/numeric limits/float round style]]
[[fr:cpp/types/numeric limits/float round style]]
[[it:cpp/types/numeric limits/float round style]]
[[ja:cpp/types/numeric limits/float round style]]
[[pt:cpp/types/numeric limits/float round style]]
[[ru:cpp/types/numeric limits/float round style]]
[[zh:cpp/types/numeric limits/float round style]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/has denorm</title>
    <ns>0</ns>
    <id>3094</id>
    <revision>
      <id>61852</id>
      <parentid>59403</parentid>
      <timestamp>2013-06-09T16:05:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2311">{{cpp/types/numeric_limits/title | has_denorm}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const std::float_denorm_style has_denorm
}}
{{dcl | since=c++11 |1=
static constexpr std::float_denorm_style has_denorm
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::has_denorm}} identifies the floating-point types that support [[enwiki:Denormal number|subnormal values]].

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::has_denorm}} }}
{{dsc | /* non-specialized */     | {{lc|std::denorm_absent}} }}
{{dsc | {{c|bool}}              | {{lc|std::denorm_absent}} }}
{{dsc | {{c|char}}              | {{lc|std::denorm_absent}} }}
{{dsc | {{c|signed char}}       | {{lc|std::denorm_absent}} }}
{{dsc | {{c|unsigned char}}     | {{lc|std::denorm_absent}} }}
{{dsc | {{c|wchar_t}}           | {{lc|std::denorm_absent}} }}
{{dsc | {{c|char16_t}}          | {{lc|std::denorm_absent}} }}
{{dsc | {{c|char32_t}}          | {{lc|std::denorm_absent}} }}
{{dsc | {{c|short}}             | {{lc|std::denorm_absent}} }}
{{dsc | {{c|unsigned short}}    | {{lc|std::denorm_absent}} }}
{{dsc | {{c|int}}               | {{lc|std::denorm_absent}} }}
{{dsc | {{c|unsigned int}}      | {{lc|std::denorm_absent}} }}
{{dsc | {{c|long}}              | {{lc|std::denorm_absent}} }}
{{dsc | {{c|unsigned long}}     | {{lc|std::denorm_absent}} }}
{{dsc | {{c|long long}}         | {{lc|std::denorm_absent}} }}
{{dsc | {{c|unsigned long long}}| {{lc|std::denorm_absent}} }}
{{dsc | {{c|float}}             | usually {{lc|std::denorm_present}} }}
{{dsc | {{c|double}}            | usually {{lc|std::denorm_present}} }}
{{dsc | {{c|long double}}       | usually {{lc|std::denorm_present}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc denorm_min}}
{{dsc inc | cpp/types/numeric_limits/dsc float_denorm_style}}
{{dsc end}}

[[de:cpp/types/numeric limits/has denorm]]
[[es:cpp/types/numeric limits/has denorm]]
[[fr:cpp/types/numeric limits/has denorm]]
[[it:cpp/types/numeric limits/has denorm]]
[[ja:cpp/types/numeric limits/has denorm]]
[[pt:cpp/types/numeric limits/has denorm]]
[[ru:cpp/types/numeric limits/has denorm]]
[[zh:cpp/types/numeric limits/has denorm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/has denorm loss</title>
    <ns>0</ns>
    <id>3080</id>
    <revision>
      <id>73642</id>
      <parentid>73641</parentid>
      <timestamp>2014-11-07T16:15:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>link to fe_inexact while at it</comment>
      <text xml:space="preserve" bytes="3156">{{cpp/types/numeric_limits/title | has_denorm_loss}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool has_denorm_loss;
}}
{{dcl | since=c++11 |1=
static constexpr bool has_denorm_loss;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::has_denorm_loss}} is {{c|true}} for all floating-point types {{tt|T}} that detect loss of precision when creating a subnormal number as denormalization loss rather than as inexact result (see below).

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::has_denorm_loss}} }}
{{dsc | /* non-specialized */     | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | {{c|false}} }}
{{dsc | {{c|signed char}}       | {{c|false}} }}
{{dsc | {{c|unsigned char}}     | {{c|false}} }}
{{dsc | {{c|wchar_t}}           | {{c|false}} }}
{{dsc | {{c|char16_t}}          | {{c|false}} }}
{{dsc | {{c|char32_t}}          | {{c|false}} }}
{{dsc | {{c|short}}             | {{c|false}} }}
{{dsc | {{c|unsigned short}}    | {{c|false}} }}
{{dsc | {{c|int}}               | {{c|false}} }}
{{dsc | {{c|unsigned int}}      | {{c|false}} }}
{{dsc | {{c|long}}              | {{c|false}} }}
{{dsc | {{c|unsigned long}}     | {{c|false}} }}
{{dsc | {{c|long long}}         | {{c|false}} }}
{{dsc | {{c|unsigned long long}}| {{c|false}} }}
{{dsc | {{c|float}}             | implementation-defined }}
{{dsc | {{c|double}}            | implementation-defined }}
{{dsc | {{c|long double}}       | implementation-defined }}
{{dsc end}}

===Notes===
Standard-compliant IEEE 754 floating-point implementations of subnormal numbers are required to detect the loss of accuracy associated with the creation of such number, if it occurs, and may do so in one of the two distinct ways:

@1@ Denormalization loss: the delivered result differs from what would have been computed were exponent range unbounded.
@2@ Inexact result: the delivered result differs from what would have been computed were both exponent range and precision unbounded.

No implementation of denormalization loss mechanism exists (accuracy loss is detected after rounding, as inexact result), and this option was removed in the 2008 revision of IEEE Std 754.

libstdc++, libc++, libCstd, and stlport4 define this constant as false for all floating-point types. Microsoft Visual Studio defines it as true for all floating-point types.

As with any floating-point computations, accuracy loss may raise {{lc|FE_INEXACT}}

===Example===
{{example
|code=
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc tinyness_before}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm}}
{{dsc end}}

[[de:cpp/types/numeric limits/has denorm loss]]
[[es:cpp/types/numeric limits/has denorm loss]]
[[fr:cpp/types/numeric limits/has denorm loss]]
[[it:cpp/types/numeric limits/has denorm loss]]
[[ja:cpp/types/numeric limits/has denorm loss]]
[[pt:cpp/types/numeric limits/has denorm loss]]
[[ru:cpp/types/numeric limits/has denorm loss]]
[[zh:cpp/types/numeric limits/has denorm loss]]</text>
      <sha1>lkjmdd5wdr5405le7570cegyx25zgol</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/has infinity</title>
    <ns>0</ns>
    <id>3077</id>
    <revision>
      <id>61862</id>
      <parentid>59407</parentid>
      <timestamp>2013-06-09T16:07:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2247">{{cpp/types/numeric_limits/title | has_infinity}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool has_infinity;
}}
{{dcl | since=c++11 |1=
static constexpr bool has_infinity;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::has_infinity}} is {{c|true}} for all types {{tt|T}} capable of representing the positive infinity as a distinct special value. This constant is meaningful for all floating-point types and is guaranteed to be {{c|true}} if {{c|1=std::numeric_limits&lt;T&gt;::is_iec559 == true}}.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::has_infinity}} }}
{{dsc | /* non-specialized */     | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | {{c|false}} }}
{{dsc | {{c|signed char}}       | {{c|false}} }}
{{dsc | {{c|unsigned char}}     | {{c|false}} }}
{{dsc | {{c|wchar_t}}           | {{c|false}} }}
{{dsc | {{c|char16_t}}          | {{c|false}} }}
{{dsc | {{c|char32_t}}          | {{c|false}} }}
{{dsc | {{c|short}}             | {{c|false}} }}
{{dsc | {{c|unsigned short}}    | {{c|false}} }}
{{dsc | {{c|int}}               | {{c|false}} }}
{{dsc | {{c|unsigned int}}      | {{c|false}} }}
{{dsc | {{c|long}}              | {{c|false}} }}
{{dsc | {{c|unsigned long}}     | {{c|false}} }}
{{dsc | {{c|long long}}         | {{c|false}} }}
{{dsc | {{c|unsigned long long}}| {{c|false}} }}
{{dsc | {{c|float}}             | usually {{c|true}} }}
{{dsc | {{c|double}}            | usually {{c|true}} }}
{{dsc | {{c|long double}}       | usually {{c|true}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc infinity}}
{{dsc inc | cpp/types/numeric_limits/dsc has_quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_signaling_NaN}}
{{dsc end}}

[[de:cpp/types/numeric limits/has infinity]]
[[es:cpp/types/numeric limits/has infinity]]
[[fr:cpp/types/numeric limits/has infinity]]
[[it:cpp/types/numeric limits/has infinity]]
[[ja:cpp/types/numeric limits/has infinity]]
[[pt:cpp/types/numeric limits/has infinity]]
[[ru:cpp/types/numeric limits/has infinity]]
[[zh:cpp/types/numeric limits/has infinity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/has quiet NaN</title>
    <ns>0</ns>
    <id>3078</id>
    <revision>
      <id>61861</id>
      <parentid>59410</parentid>
      <timestamp>2013-06-09T16:07:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2264">{{cpp/types/numeric_limits/title | has_quiet_NaN}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool has_quiet_NaN;
}}
{{dcl | since=c++11 |1=
static constexpr bool has_quiet_NaN;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::has_quiet_NaN}} is {{c|true}} for all types {{tt|T}} capable of representing the special value &quot;Quiet [[enwiki:NaN|Not-A-Number]]&quot;. This constant is meaningful for all floating-point types and is guaranteed to be {{c|true}} if {{c|1=std::numeric_limits&lt;T&gt;::is_iec559 == true}}.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::has_quiet_NaN}} }}
{{dsc | /* non-specialized */     | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | {{c|false}} }}
{{dsc | {{c|signed char}}       | {{c|false}} }}
{{dsc | {{c|unsigned char}}     | {{c|false}} }}
{{dsc | {{c|wchar_t}}           | {{c|false}} }}
{{dsc | {{c|char16_t}}          | {{c|false}} }}
{{dsc | {{c|char32_t}}          | {{c|false}} }}
{{dsc | {{c|short}}             | {{c|false}} }}
{{dsc | {{c|unsigned short}}    | {{c|false}} }}
{{dsc | {{c|int}}               | {{c|false}} }}
{{dsc | {{c|unsigned int}}      | {{c|false}} }}
{{dsc | {{c|long}}              | {{c|false}} }}
{{dsc | {{c|unsigned long}}     | {{c|false}} }}
{{dsc | {{c|long long}}         | {{c|false}} }}
{{dsc | {{c|unsigned long long}}| {{c|false}} }}
{{dsc | {{c|float}}             | usually {{c|true}} }}
{{dsc | {{c|double}}            | usually {{c|true}} }}
{{dsc | {{c|long double}}       | usually {{c|true}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_infinity}}
{{dsc inc | cpp/types/numeric_limits/dsc has_signaling_NaN}}
{{dsc end}}

[[de:cpp/types/numeric limits/has quiet NaN]]
[[es:cpp/types/numeric limits/has quiet NaN]]
[[fr:cpp/types/numeric limits/has quiet NaN]]
[[it:cpp/types/numeric limits/has quiet NaN]]
[[ja:cpp/types/numeric limits/has quiet NaN]]
[[pt:cpp/types/numeric limits/has quiet NaN]]
[[ru:cpp/types/numeric limits/has quiet NaN]]
[[zh:cpp/types/numeric limits/has quiet NaN]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/has signaling NaN</title>
    <ns>0</ns>
    <id>3079</id>
    <revision>
      <id>61860</id>
      <parentid>59411</parentid>
      <timestamp>2013-06-09T16:06:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2316">{{cpp/types/numeric_limits/title | has_signaling_NaN}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool has_signaling_NaN;
}}
{{dcl | since=c++11 |1=
static constexpr bool has_signaling_NaN;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::has_signaling_NaN}} is {{c|true}} for all types {{tt|T}} capable of representing the special value &quot;Signaling [[enwiki:NaN|Not-A-Number]]&quot;. This constant is meaningful for all floating-point types and is guaranteed to be {{c|true}} if {{c|1=std::numeric_limits&lt;T&gt;::is_iec559 == true}}.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::has_signaling_NaN}} }}
{{dsc | /* non-specialized */     | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | {{c|false}} }}
{{dsc | {{c|signed char}}       | {{c|false}} }}
{{dsc | {{c|unsigned char}}     | {{c|false}} }}
{{dsc | {{c|wchar_t}}           | {{c|false}} }}
{{dsc | {{c|char16_t}}          | {{c|false}} }}
{{dsc | {{c|char32_t}}          | {{c|false}} }}
{{dsc | {{c|short}}             | {{c|false}} }}
{{dsc | {{c|unsigned short}}    | {{c|false}} }}
{{dsc | {{c|int}}               | {{c|false}} }}
{{dsc | {{c|unsigned int}}      | {{c|false}} }}
{{dsc | {{c|long}}              | {{c|false}} }}
{{dsc | {{c|unsigned long}}     | {{c|false}} }}
{{dsc | {{c|long long}}         | {{c|false}} }}
{{dsc | {{c|unsigned long long}}| {{c|false}} }}
{{dsc | {{c|float}}             | usually {{c|true}} }}
{{dsc | {{c|double}}            | usually {{c|true}} }}
{{dsc | {{c|long double}}       | usually {{c|true}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_infinity}}
{{dsc inc | cpp/types/numeric_limits/dsc has_quiet_NaN}}
{{dsc end}}

[[de:cpp/types/numeric limits/has signaling NaN]]
[[es:cpp/types/numeric limits/has signaling NaN]]
[[fr:cpp/types/numeric limits/has signaling NaN]]
[[it:cpp/types/numeric limits/has signaling NaN]]
[[ja:cpp/types/numeric limits/has signaling NaN]]
[[pt:cpp/types/numeric limits/has signaling NaN]]
[[ru:cpp/types/numeric limits/has signaling NaN]]
[[zh:cpp/types/numeric limits/has signaling NaN]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/infinity</title>
    <ns>0</ns>
    <id>3032</id>
    <revision>
      <id>91736</id>
      <parentid>64825</parentid>
      <timestamp>2017-03-31T19:56:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2494">{{cpp/types/numeric_limits/title | infinity}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T infinity();
}}
{{dcl | since=c++11 |1=
static constexpr T infinity();
}}
{{dcl rev end}}
{{dcl end}}

Returns the special value &quot;positive infinity&quot;, as represented by the floating-point type {{tt|T}}. Only meaningful if {{c|1=std::numeric_limits&lt;T&gt;::has_infinity == true}}. In IEEE 754, the most common binary representation of floating-point numbers, the positive infinity is the value with all bits of the exponent set and all bits of the fraction cleared.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::infinity()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|false}}     }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|HUGE_VALF}} }}
{{dsc | {{c|double}}            | {{lc|HUGE_VAL}} }}
{{dsc | {{c|long double}}       | {{lc|HUGE_VALL}} }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;limits&gt;
int main()
{
    double max = std::numeric_limits&lt;double&gt;::max();
    double inf = std::numeric_limits&lt;double&gt;::infinity();

    if(inf &gt; max)
        std::cout &lt;&lt; inf &lt;&lt; &quot; is greater than &quot; &lt;&lt; max &lt;&lt; '\n';
}
 | output=
inf is greater than 1.79769e+308
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc has_infinity}}
{{dsc end}}

[[de:cpp/types/numeric limits/infinity]]
[[es:cpp/types/numeric limits/infinity]]
[[fr:cpp/types/numeric limits/infinity]]
[[it:cpp/types/numeric limits/infinity]]
[[ja:cpp/types/numeric limits/infinity]]
[[pt:cpp/types/numeric limits/infinity]]
[[ru:cpp/types/numeric limits/infinity]]
[[zh:cpp/types/numeric limits/infinity]]</text>
      <sha1>sncuwah1ptnd3zwly0p5t1qcx7r6vw9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/is bounded</title>
    <ns>0</ns>
    <id>3064</id>
    <revision>
      <id>61868</id>
      <parentid>59415</parentid>
      <timestamp>2013-06-09T16:08:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2182">{{cpp/types/numeric_limits/title | is_bounded}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool is_bounded;
}}
{{dcl | since=c++11 |1=
static constexpr bool is_bounded;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::is_bounded}} is {{c|true}} for all arithmetic types {{tt|T}} that represent a finite set of values. While all fundamental types are bounded, this constant would be {{c|false}} in a specialization of {{lc|std::numeric_limits}} for a library-provided arbitrary precision arithmetic type 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::is_bounded}} }}
{{dsc | /* non-specialized */ | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|true}} }}
{{dsc | {{c|char}}              | {{c|true}} }}
{{dsc | {{c|signed char}}       | {{c|true}} }}
{{dsc | {{c|unsigned char}}     | {{c|true}} }}
{{dsc | {{c|wchar_t}}           | {{c|true}} }}
{{dsc | {{c|char16_t}}          | {{c|true}} }}
{{dsc | {{c|char32_t}}          | {{c|true}} }}
{{dsc | {{c|short}}             | {{c|true}} }}
{{dsc | {{c|unsigned short}}    | {{c|true}} }}
{{dsc | {{c|int}}               | {{c|true}} }}
{{dsc | {{c|unsigned int}}      | {{c|true}} }}
{{dsc | {{c|long}}              | {{c|true}} }}
{{dsc | {{c|unsigned long}}     | {{c|true}} }}
{{dsc | {{c|long long}}         | {{c|true}} }}
{{dsc | {{c|unsigned long long}}| {{c|true}} }}
{{dsc | {{c|float}}             | {{c|true}} }}
{{dsc | {{c|double}}            | {{c|true}} }}
{{dsc | {{c|long double}}       | {{c|true}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc is_integer}}
{{dsc inc | cpp/types/numeric_limits/dsc is_signed}}
{{dsc inc | cpp/types/numeric_limits/dsc is_exact}}
{{dsc end}}

[[de:cpp/types/numeric limits/is bounded]]
[[es:cpp/types/numeric limits/is bounded]]
[[fr:cpp/types/numeric limits/is bounded]]
[[it:cpp/types/numeric limits/is bounded]]
[[ja:cpp/types/numeric limits/is bounded]]
[[pt:cpp/types/numeric limits/is bounded]]
[[ru:cpp/types/numeric limits/is bounded]]
[[zh:cpp/types/numeric limits/is bounded]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/is exact</title>
    <ns>0</ns>
    <id>3063</id>
    <revision>
      <id>61869</id>
      <parentid>59418</parentid>
      <timestamp>2013-06-09T16:08:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2206">{{cpp/types/numeric_limits/title | is_exact}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool is_exact;
}}
{{dcl | since=c++11 |1=
static constexpr bool is_exact;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::is_exact}} is {{c|true}} for all arithmetic types {{tt|T}} that use exact representation. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::is_exact}} }}
{{dsc | /* non-specialized */ | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|true}} }}
{{dsc | {{c|char}}              | {{c|true}} }}
{{dsc | {{c|signed char}}       | {{c|true}} }}
{{dsc | {{c|unsigned char}}     | {{c|true}} }}
{{dsc | {{c|wchar_t}}           | {{c|true}} }}
{{dsc | {{c|char16_t}}          | {{c|true}} }}
{{dsc | {{c|char32_t}}          | {{c|true}} }}
{{dsc | {{c|short}}             | {{c|true}} }}
{{dsc | {{c|unsigned short}}    | {{c|true}} }}
{{dsc | {{c|int}}               | {{c|true}} }}
{{dsc | {{c|unsigned int}}      | {{c|true}} }}
{{dsc | {{c|long}}              | {{c|true}} }}
{{dsc | {{c|unsigned long}}     | {{c|true}} }}
{{dsc | {{c|long long}}         | {{c|true}} }}
{{dsc | {{c|unsigned long long}}| {{c|true}} }}
{{dsc | {{c|float}}             | {{c|false}} }}
{{dsc | {{c|double}}            | {{c|false}} }}
{{dsc | {{c|long double}}       | {{c|false}} }}
{{dsc end}}

===Notes===
While all fundamental types {{tt|T}} for which {{c|1=std::numeric_limits&lt;T&gt;::is_exact==true}} are integer types, a library may define exact types that aren't integers, e.g. a rational arithmetics type representing fractions.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc is_integer}}
{{dsc inc | cpp/types/numeric_limits/dsc is_signed}}
{{dsc inc | cpp/types/numeric_limits/dsc is_bounded}}
{{dsc end}}

[[de:cpp/types/numeric limits/is exact]]
[[es:cpp/types/numeric limits/is exact]]
[[fr:cpp/types/numeric limits/is exact]]
[[it:cpp/types/numeric limits/is exact]]
[[ja:cpp/types/numeric limits/is exact]]
[[pt:cpp/types/numeric limits/is exact]]
[[ru:cpp/types/numeric limits/is exact]]
[[zh:cpp/types/numeric limits/is exact]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/is iec559</title>
    <ns>0</ns>
    <id>3086</id>
    <revision>
      <id>61857</id>
      <parentid>59419</parentid>
      <timestamp>2013-06-09T16:06:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2319">{{cpp/types/numeric_limits/title | is_iec559}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool is_iec559;
}}
{{dcl | since=c++11 |1=
static constexpr bool is_iec559;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::is_iec559}} is {{c|true}} for all floating-point types {{tt|T}} which fulfill the requirements of IEC 559 ([[enwiki:IEEE 754-2008|IEEE 754]]) standard. If {{c|std::numeric_limits&lt;T&gt;::is_iec559}} is {{c|true}}, then {{c|std::numeric_limits&lt;T&gt;::has_infinity}}, {{c|std::numeric_limits&lt;T&gt;::has_quiet_NaN}}, and {{c|std::numeric_limits&lt;T&gt;::has_signaling_NaN}} are also {{c|true}}.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::is_iec559}} }}
{{dsc | /* non-specialized */     | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | {{c|false}} }}
{{dsc | {{c|signed char}}       | {{c|false}} }}
{{dsc | {{c|unsigned char}}     | {{c|false}} }}
{{dsc | {{c|wchar_t}}           | {{c|false}} }}
{{dsc | {{c|char16_t}}          | {{c|false}} }}
{{dsc | {{c|char32_t}}          | {{c|false}} }}
{{dsc | {{c|short}}             | {{c|false}} }}
{{dsc | {{c|unsigned short}}    | {{c|false}} }}
{{dsc | {{c|int}}               | {{c|false}} }}
{{dsc | {{c|unsigned int}}      | {{c|false}} }}
{{dsc | {{c|long}}              | {{c|false}} }}
{{dsc | {{c|unsigned long}}     | {{c|false}} }}
{{dsc | {{c|long long}}         | {{c|false}} }}
{{dsc | {{c|unsigned long long}}| {{c|false}} }}
{{dsc | {{c|float}}             | usually {{c|true}} }}
{{dsc | {{c|double}}            | usually {{c|true}} }}
{{dsc | {{c|long double}}       | usually {{c|true}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc has_infinity}}
{{dsc inc | cpp/types/numeric_limits/dsc has_quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc has_signaling_NaN}}
{{dsc end}}

[[de:cpp/types/numeric limits/is iec559]]
[[es:cpp/types/numeric limits/is iec559]]
[[fr:cpp/types/numeric limits/is iec559]]
[[it:cpp/types/numeric limits/is iec559]]
[[ja:cpp/types/numeric limits/is iec559]]
[[pt:cpp/types/numeric limits/is iec559]]
[[ru:cpp/types/numeric limits/is iec559]]
[[zh:cpp/types/numeric limits/is iec559]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/is integer</title>
    <ns>0</ns>
    <id>3062</id>
    <revision>
      <id>61870</id>
      <parentid>59420</parentid>
      <timestamp>2013-06-09T16:08:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2088">{{cpp/types/numeric_limits/title | is_integer}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool is_integer;
}}
{{dcl | since=c++11 |1=
static constexpr bool is_integer;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::is_integer}} is {{c|true}} for all integer arithmetic types {{tt|T}} and {{c|false}} otherwise. This constant is meaningful for all specializations.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::is_integer}} }}
{{dsc | /* non-specialized */ | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|true}} }}
{{dsc | {{c|char}}              | {{c|true}} }}
{{dsc | {{c|signed char}}       | {{c|true}} }}
{{dsc | {{c|unsigned char}}     | {{c|true}} }}
{{dsc | {{c|wchar_t}}           | {{c|true}} }}
{{dsc | {{c|char16_t}}          | {{c|true}} }}
{{dsc | {{c|char32_t}}          | {{c|true}} }}
{{dsc | {{c|short}}             | {{c|true}} }}
{{dsc | {{c|unsigned short}}    | {{c|true}} }}
{{dsc | {{c|int}}               | {{c|true}} }}
{{dsc | {{c|unsigned int}}      | {{c|true}} }}
{{dsc | {{c|long}}              | {{c|true}} }}
{{dsc | {{c|unsigned long}}     | {{c|true}} }}
{{dsc | {{c|long long}}         | {{c|true}} }}
{{dsc | {{c|unsigned long long}}| {{c|true}} }}
{{dsc | {{c|float}}             | {{c|false}} }}
{{dsc | {{c|double}}            | {{c|false}} }}
{{dsc | {{c|long double}}       | {{c|false}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_integral}}
{{dsc inc | cpp/types/numeric_limits/dsc is_signed}}
{{dsc inc | cpp/types/numeric_limits/dsc is_exact}}
{{dsc inc | cpp/types/numeric_limits/dsc is_bounded}}
{{dsc end}}

[[de:cpp/types/numeric limits/is integer]]
[[es:cpp/types/numeric limits/is integer]]
[[fr:cpp/types/numeric limits/is integer]]
[[it:cpp/types/numeric limits/is integer]]
[[ja:cpp/types/numeric limits/is integer]]
[[pt:cpp/types/numeric limits/is integer]]
[[ru:cpp/types/numeric limits/is integer]]
[[zh:cpp/types/numeric limits/is integer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/is modulo</title>
    <ns>0</ns>
    <id>3067</id>
    <revision>
      <id>86115</id>
      <parentid>61867</parentid>
      <timestamp>2016-06-22T14:14:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note future wording from LWG 2422</comment>
      <text xml:space="preserve" bytes="4017">{{cpp/types/numeric_limits/title | is_modulo}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool is_modulo;
}}
{{dcl | since=c++11 |1=
static constexpr bool is_modulo;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::is_modulo}} is {{c|true}} for all arithmetic types {{tt|T}} that handle overflows with modulo arithmetic, that is, if the result of addition, subtraction, multiplication, or division of this type would fall outside the range {{c|[min(), max()]}}, the value returned by such operation differs from the expected value by a multiple of {{c|max()-min()+1}}. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::is_modulo}} }}
{{dsc | /* non-specialized */ | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | implementation-defined }}
{{dsc | {{c|signed char}}       | implementation-defined }}
{{dsc | {{c|unsigned char}}     | {{c|true}} }}
{{dsc | {{c|wchar_t}}           | implementation-defined }}
{{dsc | {{c|char16_t}}          | implementation-defined }}
{{dsc | {{c|char32_t}}          | implementation-defined }}
{{dsc | {{c|short}}             | implementation-defined }}
{{dsc | {{c|unsigned short}}    | {{c|true}} }}
{{dsc | {{c|int}}               | implementation-defined }}
{{dsc | {{c|unsigned int}}      | {{c|true}} }}
{{dsc | {{c|long}}              | implementation-defined }}
{{dsc | {{c|unsigned long}}     | {{c|true}} }}
{{dsc | {{c|long long}}         | implementation-defined }}
{{dsc | {{c|unsigned long long}}| {{c|true}} }}
{{dsc | {{c|float}}             | {{c|false}} }}
{{dsc | {{c|double}}            | {{c|false}} }}
{{dsc | {{c|long double}}       | {{c|false}} }}
{{dsc end}}

===Notes===
Although the C++11 standard still says &quot;On most machines, this is true for signed integers.&quot;, the exact wording changed from C++03 to C++11 in such a way that the {{c|true}} value is no longer compatible with [[cpp/language/operator_arithmetic#Overflows|undefined behavior on signed integer overflow]] (it changed from &quot;possible&quot; to a strict requirement). Because of that, the implementations that rely on signed overflow being undefined (for optimization opportunities) now set {{tt|is_modulo}} to {{tt|false}} for signed integers. See for example [http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22200 GCC PR 22200].

The standard wording is expected to change to &quot;is_modulo is false for signed integer types unless an implementation defines signed integer overflow to wrap&quot; per [http://cplusplus.github.io/LWG/lwg-active.html#2422 LWG issue 2422].

===Example===
{{example
 | Demonstrates the behavior of modulo types
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;limits&gt;

template&lt;class T&gt;
typename std::enable_if&lt;std::numeric_limits&lt;T&gt;::is_modulo&gt;::type
    check_overflow()
{
    std::cout &lt;&lt; &quot;\nmax value is &quot; &lt;&lt; std::numeric_limits&lt;T&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;min value is &quot; &lt;&lt; std::numeric_limits&lt;T&gt;::min() &lt;&lt; '\n'
              &lt;&lt; &quot;max value + 1 is &quot; &lt;&lt; std::numeric_limits&lt;T&gt;::max()+1 &lt;&lt; '\n';
}

int main()
{
    check_overflow&lt;int&gt;();
    check_overflow&lt;unsigned long&gt;();
    // check_overflow&lt;float&gt;(); // compile-time error, not a modulo type
}
 | p = true
 | output=
max value is 2147483647
min value is -2147483648
max value + 1 is -2147483648

max value is 18446744073709551615
min value is 0
max value + 1 is 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc is_integer}}
{{dsc inc | cpp/types/numeric_limits/dsc is_iec559}}
{{dsc inc | cpp/types/numeric_limits/dsc is_exact}}
{{dsc end}}

[[de:cpp/types/numeric limits/is modulo]]
[[es:cpp/types/numeric limits/is modulo]]
[[fr:cpp/types/numeric limits/is modulo]]
[[it:cpp/types/numeric limits/is modulo]]
[[ja:cpp/types/numeric limits/is modulo]]
[[pt:cpp/types/numeric limits/is modulo]]
[[ru:cpp/types/numeric limits/is modulo]]
[[zh:cpp/types/numeric limits/is modulo]]</text>
      <sha1>6vdw75ux9fzkd6m7cy2a3c4cbsk4d47</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/is signed</title>
    <ns>0</ns>
    <id>3061</id>
    <revision>
      <id>61871</id>
      <parentid>59426</parentid>
      <timestamp>2013-06-09T16:09:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2179">{{cpp/types/numeric_limits/title | is_signed}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool is_signed;
}}
{{dcl | since=c++11 |1=
static constexpr bool is_signed;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::is_signed}} is {{c|true}} for all signed arithmetic types {{tt|T}} and {{c|false}} for the unsigned types. This constant is meaningful for all specializations.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::is_signed}} }}
{{dsc | /* non-specialized */ | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | implementation-defined }}
{{dsc | {{c|signed char}}       | {{c|true}} }}
{{dsc | {{c|unsigned char}}     | {{c|false}} }}
{{dsc | {{c|wchar_t}}           | implementation-defined }}
{{dsc | {{c|char16_t}}          | {{c|false}} }}
{{dsc | {{c|char32_t}}          | {{c|false}} }}
{{dsc | {{c|short}}             | {{c|true}} }}
{{dsc | {{c|unsigned short}}    | {{c|false}} }}
{{dsc | {{c|int}}               | {{c|true}} }}
{{dsc | {{c|unsigned int}}      | {{c|false}} }}
{{dsc | {{c|long}}              | {{c|true}} }}
{{dsc | {{c|unsigned long}}     | {{c|false}} }}
{{dsc | {{c|long long}}         | {{c|true}} }}
{{dsc | {{c|unsigned long long}}| {{c|false}} }}
{{dsc | {{c|float}}             | {{c|true}} }}
{{dsc | {{c|double}}            | {{c|true}} }}
{{dsc | {{c|long double}}       | {{c|true}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc tclass | cpp/types/is_signed | checks if a type is signed integer type | notes={{mark c++11}}}}
{{dsc inc | cpp/types/numeric_limits/dsc is_integer}}
{{dsc inc | cpp/types/numeric_limits/dsc is_exact}}
{{dsc inc | cpp/types/numeric_limits/dsc is_bounded}}
{{dsc end}}

[[de:cpp/types/numeric limits/is signed]]
[[es:cpp/types/numeric limits/is signed]]
[[fr:cpp/types/numeric limits/is signed]]
[[it:cpp/types/numeric limits/is signed]]
[[ja:cpp/types/numeric limits/is signed]]
[[pt:cpp/types/numeric limits/is signed]]
[[ru:cpp/types/numeric limits/is signed]]
[[zh:cpp/types/numeric limits/is signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/is specialized</title>
    <ns>0</ns>
    <id>3059</id>
    <revision>
      <id>61872</id>
      <parentid>59427</parentid>
      <timestamp>2013-06-09T16:09:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2117">{{cpp/types/numeric_limits/title | is_specialized}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool is_specialized;
}}
{{dcl | since=c++11 |1=
static constexpr bool is_specialized;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::is_specialized}} is {{c|true}} for all {{tt|T}} for which there exists a specialization of {{lc|std::numeric_limits}}.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::is_specialized}} }}
{{dsc | /* non-specialized */ | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|true}} }}
{{dsc | {{c|char}}              | {{c|true}} }}
{{dsc | {{c|signed char}}       | {{c|true}} }}
{{dsc | {{c|unsigned char}}     | {{c|true}} }}
{{dsc | {{c|wchar_t}}           | {{c|true}} }}
{{dsc | {{c|char16_t}}          | {{c|true}} }}
{{dsc | {{c|char32_t}}          | {{c|true}} }}
{{dsc | {{c|short}}             | {{c|true}} }}
{{dsc | {{c|unsigned short}}    | {{c|true}} }}
{{dsc | {{c|int}}               | {{c|true}} }}
{{dsc | {{c|unsigned int}}      | {{c|true}} }}
{{dsc | {{c|long}}              | {{c|true}} }}
{{dsc | {{c|unsigned long}}     | {{c|true}} }}
{{dsc | {{c|long long}}         | {{c|true}} }}
{{dsc | {{c|unsigned long long}}| {{c|true}} }}
{{dsc | {{c|float}}             | {{c|true}} }}
{{dsc | {{c|double}}            | {{c|true}} }}
{{dsc | {{c|long double}}       | {{c|true}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc is_integer}}
{{dsc inc | cpp/types/numeric_limits/dsc is_iec559}}
{{dsc inc | cpp/types/numeric_limits/dsc is_exact}}
{{dsc inc | cpp/types/numeric_limits/dsc is_bounded}}
{{dsc end}}

[[de:cpp/types/numeric limits/is specialized]]
[[es:cpp/types/numeric limits/is specialized]]
[[fr:cpp/types/numeric limits/is specialized]]
[[it:cpp/types/numeric limits/is specialized]]
[[ja:cpp/types/numeric limits/is specialized]]
[[pt:cpp/types/numeric limits/is specialized]]
[[ru:cpp/types/numeric limits/is specialized]]
[[zh:cpp/types/numeric limits/is specialized]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/lowest</title>
    <ns>0</ns>
    <id>3012</id>
    <revision>
      <id>91571</id>
      <parentid>64820</parentid>
      <timestamp>2017-03-31T19:50:24Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4163">{{cpp/types/numeric_limits/title | lowest}}
{{cpp/types/numeric_limits/navbar}}

{{dcl begin}}
{{dcl | since=c++11 |1=
static constexpr T lowest() 
}}
{{dcl end}}

Returns the lowest finite value representable by the numeric type {{tt|T}}, that is, a finite value {{tt|x}} such that there is no other finite value {{tt|y}} where {{tt|y &lt; x}}. This is different from {{c|std::numeric_limits&lt;T&gt;::min()}} for floating-point types. Only meaningful for bounded types.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::lowest()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|false}}     }}
{{dsc | {{c|char}}              | {{lc|CHAR_MIN}}  }}
{{dsc | {{c|signed char}}       | {{lc|SCHAR_MIN}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}}         }}
{{dsc | {{c|wchar_t}}           | {{lc|WCHAR_MIN}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{lc|SHRT_MIN}}  }}
{{dsc | {{c|unsigned short}}    | {{c|0}}         }}
{{dsc | {{c|int}}               | {{lc|INT_MIN}}   }}
{{dsc | {{c|unsigned int}}      | {{c|0}}         }}
{{dsc | {{c|long}}              | {{lc|LONG_MIN}}  }}
{{dsc | {{c|unsigned long}}     | {{c|0}}         }}
{{dsc | {{c|long long}}         | {{lc|LLONG_MIN}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}}         }}
{{dsc | {{c|float}}             | {{c|-FLT_MAX}}   }}
{{dsc | {{c|double}}            | {{c|-DBL_MAX}}   }}
{{dsc | {{c|long double}}       | {{c|-LDBL_MAX}}  }}
{{dsc end}}

===Notes===
While it's not true for fundamental C++ floating-poing types, a third-party floating-point type {{tt|T}} may exist such that {{c|1=std::numeric_limits&lt;T&gt;::lowest() != -std::numeric_limits&lt;T&gt;::max()}}.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | Demonstrates min, max, and lowest for floating-point types
 | code=
#include &lt;limits&gt;
#include &lt;iostream&gt;
int main()
{
    
    std::cout &lt;&lt; &quot;std::numeric_limits&lt;T&gt;::min():\n&quot;
              &lt;&lt; &quot;\tfloat: &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;float&gt;::min() &lt;&lt; '\n'
              &lt;&lt; &quot;\tdouble: &quot; &lt;&lt; std::defaultfloat &lt;&lt; std::numeric_limits&lt;double&gt;::min()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;double&gt;::min() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;std::numeric_limits&lt;T&gt;::lowest():\n&quot;
              &lt;&lt; &quot;\tfloat: &quot; &lt;&lt; std::defaultfloat &lt;&lt; std::numeric_limits&lt;float&gt;::lowest()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;float&gt;::lowest() &lt;&lt; '\n'
              &lt;&lt; &quot;\tdouble: &quot; &lt;&lt; std::defaultfloat &lt;&lt; std::numeric_limits&lt;double&gt;::lowest()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;double&gt;::lowest() &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;std::numeric_limits&lt;T&gt;::max():\n&quot;
              &lt;&lt; &quot;\tfloat: &quot; &lt;&lt; std::defaultfloat &lt;&lt; std::numeric_limits&lt;float&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;float&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;\tdouble: &quot; &lt;&lt; std::defaultfloat &lt;&lt; std::numeric_limits&lt;double&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;double&gt;::max() &lt;&lt; '\n';
}
 | output=
std::numeric_limits&lt;T&gt;::min():
        float: 1.17549e-38 or 0x1p-126
        double: 2.22507e-308 or 0x1p-1022
std::numeric_limits&lt;T&gt;::lowest():
        float: -3.40282e+38 or -0x1.fffffep+127
        double: -1.79769e+308 or -0x1.fffffffffffffp+1023
std::numeric_limits&lt;T&gt;::max():
        float: 3.40282e+38 or 0x1.fffffep+127
        double: 1.79769e+308 or 0x1.fffffffffffffp+1023
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc min}}
{{dsc inc | cpp/types/numeric_limits/dsc denorm_min}}
{{dsc inc | cpp/types/numeric_limits/dsc max}}
{{dsc end}}

[[de:cpp/types/numeric limits/lowest]]
[[es:cpp/types/numeric limits/lowest]]
[[fr:cpp/types/numeric limits/lowest]]
[[it:cpp/types/numeric limits/lowest]]
[[ja:cpp/types/numeric limits/lowest]]
[[pt:cpp/types/numeric limits/lowest]]
[[ru:cpp/types/numeric limits/lowest]]
[[zh:cpp/types/numeric limits/lowest]]</text>
      <sha1>bpfbfxu2lgo9t8z11x1uongmw9xbecm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/max</title>
    <ns>0</ns>
    <id>3026</id>
    <revision>
      <id>91631</id>
      <parentid>64821</parentid>
      <timestamp>2017-03-31T19:52:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3542">{{cpp/types/numeric_limits/title | max}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T max();
}}
{{dcl | since=c++11 |1=
static constexpr T max();
}}
{{dcl rev end}}
{{dcl end}}

Returns the maximum finite value representable by the numeric type {{tt|T}}. Meaningful for all bounded types.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::max()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|true}}     }}
{{dsc | {{c|char}}              | {{lc|CHAR_MAX}}  }}
{{dsc | {{c|signed char}}       | {{lc|SCHAR_MAX}} }}
{{dsc | {{c|unsigned char}}     | {{lc|UCHAR_MAX}} }}
{{dsc | {{c|wchar_t}}           | {{lc|WCHAR_MAX}} }}
{{dsc | {{c|char16_t}}          | {{lc|UINT_LEAST16_MAX}} }}
{{dsc | {{c|char32_t}}          | {{lc|UINT_LEAST32_MAX}} }}
{{dsc | {{c|short}}             | {{lc|SHRT_MAX}}  }}
{{dsc | {{c|unsigned short}}    | {{lc|USHRT_MAX}} }}
{{dsc | {{c|int}}               | {{lc|INT_MAX}}   }}
{{dsc | {{c|unsigned int}}      | {{lc|UINT_MAX}}  }}
{{dsc | {{c|long}}              | {{lc|LONG_MAX}}  }}
{{dsc | {{c|unsigned long}}     | {{lc|ULONG_MAX}} }}
{{dsc | {{c|long long}}         | {{lc|LLONG_MAX}} }}
{{dsc | {{c|unsigned long long}}| {{lc|ULLONG_MAX}}}}
{{dsc | {{c|float}}             | {{lc|FLT_MAX}}   }}
{{dsc | {{c|double}}            | {{lc|DBL_MAX}}   }}
{{dsc | {{c|long double}}       | {{lc|LDBL_MAX}}  }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | Demonstrates the use of max() with some fundamental types and some standard library typedefs (the output is system-specific)
 | code=
#include &lt;limits&gt;
#include &lt;cstddef&gt;
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;short: &quot; &lt;&lt; std::dec &lt;&lt; std::numeric_limits&lt;short&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hex &lt;&lt; std::showbase &lt;&lt; std::numeric_limits&lt;short&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;int: &quot; &lt;&lt; std::dec &lt;&lt; std::numeric_limits&lt;int&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hex &lt;&lt; std::numeric_limits&lt;int&gt;::max() &lt;&lt; '\n' &lt;&lt; std::dec
              &lt;&lt; &quot;streamsize: &quot; &lt;&lt; std::dec &lt;&lt; std::numeric_limits&lt;std::streamsize&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hex &lt;&lt; std::numeric_limits&lt;std::streamsize&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;size_t: &quot; &lt;&lt; std::dec &lt;&lt; std::numeric_limits&lt;std::size_t&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hex &lt;&lt; std::numeric_limits&lt;std::size_t&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;float: &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;float&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;double: &quot; &lt;&lt; std::defaultfloat &lt;&lt; std::numeric_limits&lt;double&gt;::max()
              &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;double&gt;::max() &lt;&lt; '\n';
}
 | output=
short: 32767 or 0x7fff
int: 2147483647 or 0x7fffffff
size_t: 18446744073709551615 or 0xffffffffffffffff
streamsize: 9223372036854775807 or 0x7fffffffffffffff
float: 3.40282e+38 or 0x1.fffffep+127
double: 1.79769e+308 or 0x1.fffffffffffffp+1023
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc lowest}}
{{dsc inc | cpp/types/numeric_limits/dsc min}}
{{dsc end}}

[[de:cpp/types/numeric limits/max]]
[[es:cpp/types/numeric limits/max]]
[[fr:cpp/types/numeric limits/max]]
[[it:cpp/types/numeric limits/max]]
[[ja:cpp/types/numeric limits/max]]
[[pt:cpp/types/numeric limits/max]]
[[ru:cpp/types/numeric limits/max]]
[[zh:cpp/types/numeric limits/max]]</text>
      <sha1>capdzitix0z2jqmnt83ujtmvvrbq3rk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/max digits10</title>
    <ns>0</ns>
    <id>3076</id>
    <revision>
      <id>87739</id>
      <parentid>63061</parentid>
      <timestamp>2016-09-28T15:52:07Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link back to DECIMAL_DIG and fix formula to what's in the std</comment>
      <text xml:space="preserve" bytes="2883">{{cpp/types/numeric_limits/title | max_digits10}}
{{cpp/types/numeric_limits/navbar}}

{{dcl begin}}
{{dcl | since=c++11 |1=
static constexpr int max_digits10
}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::max_digits10}} is the number of base-10 digits that are necessary to uniquely represent all distinct values of the type {{tt|T}}, such as necessary for serialization/deserialization to text. This constant is meaningful for all floating-point types. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::max_digits10}} }}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|0}} }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|FLT_DECIMAL_DIG}} or  {{c|std::ceil(std::numeric_limits&lt;float&gt;::digits * std::log10(2) + 1}}) }}
{{dsc | {{c|double}}            | {{lc|DBL_DECIMAL_DIG}} or{{c|std::ceil(std::numeric_limits&lt;double&gt;::digits * std::log10(2) + 1}}) }}
{{dsc | {{c|long double}}       | {{lc|DECIMAL_DIG}} or {{lc|LDBL_DECIMAL_DIG}} or{{c|std::ceil(std::numeric_limits&lt;long double&gt;::digits * std::log10(2) + 1}}) }}
{{dsc end}}

===Notes===
Unlike most mathematical operations, the conversion of a floating-point value to text and back is ''exact'' as long as at least {{tt|max_digits10}} were used ({{c|9}} for {{c|float}}, {{c|17}} for {{c|double}}): it is guaranteed to produce the same floating-point value, even though the intermediate text representation is not exact. It may take over a hundred decimal digits to represent the precise value of a {{c|float}} in decimal notation.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc radix}}
{{dsc inc | cpp/types/numeric_limits/dsc digits}}
{{dsc inc | cpp/types/numeric_limits/dsc digits10}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc end}}

[[de:cpp/types/numeric limits/max digits10]]
[[es:cpp/types/numeric limits/max digits10]]
[[fr:cpp/types/numeric limits/max digits10]]
[[it:cpp/types/numeric limits/max digits10]]
[[ja:cpp/types/numeric limits/max digits10]]
[[pt:cpp/types/numeric limits/max digits10]]
[[ru:cpp/types/numeric limits/max digits10]]
[[zh:cpp/types/numeric limits/max digits10]]</text>
      <sha1>mytaupp1l8zc366irm568ff4qcp41uw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/max exponent</title>
    <ns>0</ns>
    <id>3091</id>
    <revision>
      <id>67851</id>
      <parentid>67850</parentid>
      <timestamp>2014-03-03T06:00:52Z</timestamp>
      <contributor>
        <ip>177.9.13.218</ip>
      </contributor>
      <text xml:space="preserve" bytes="2707">{{cpp/types/numeric_limits/title | max_exponent}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const int max_exponent;
}}
{{dcl | since=c++11 |1=
static constexpr int max_exponent;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::max_exponent}} is the largest positive number {{tt|n}} such that {{math|2{{su|p=n-1}}}} is a representable finite value of the floating-point type {{tt|T}}. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::max_exponent}} }}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|0}} }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|FLT_MAX_EXP}} }}
{{dsc | {{c|double}}            | {{lc|DBL_MAX_EXP}} }}
{{dsc | {{c|long double}}       | {{lc|LDBL_MAX_EXP}} }}
{{dsc end}}

===Example===
{{example
 | Demonstrates the relationships of max_exponent, max_exponent10, and max() for the type float:
 | code=
#include &lt;iostream&gt;
#include &lt;limits&gt;
int main()
{
    std::cout &lt;&lt; &quot;max() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;max_exponent10 = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max_exponent10 &lt;&lt; '\n'
              &lt;&lt; std::hexfloat
              &lt;&lt; &quot;max() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;max_exponent = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max_exponent &lt;&lt; '\n';
}

 | output=
max() = 3.40282e+38
max_exponent10 = 38
max() = 0x1.fffffep+127
max_exponent = 128
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent10}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent10}}
{{dsc end}}

[[de:cpp/types/numeric limits/max exponent]]
[[es:cpp/types/numeric limits/max exponent]]
[[fr:cpp/types/numeric limits/max exponent]]
[[it:cpp/types/numeric limits/max exponent]]
[[ja:cpp/types/numeric limits/max exponent]]
[[pt:cpp/types/numeric limits/max exponent]]
[[ru:cpp/types/numeric limits/max exponent]]
[[zh:cpp/types/numeric limits/max exponent]]</text>
      <sha1>9w0yurbyo0bgqtwqn65uhoms2kk0zcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/max exponent10</title>
    <ns>0</ns>
    <id>3089</id>
    <revision>
      <id>83224</id>
      <parentid>83223</parentid>
      <timestamp>2016-01-25T18:16:57Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* See also */</comment>
      <text xml:space="preserve" bytes="2721">{{cpp/types/numeric_limits/title | max_exponent10}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const int max_exponent10;
}}
{{dcl | since=c++11 |1=
static constexpr int max_exponent10;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::max_exponent10}} is the largest positive number {{tt|n}} such that {{math|10{{su|p=n}}}} is a representable finite value of the floating-point type {{tt|T}}. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::max_exponent10}} }}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|0}} }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|FLT_MAX_10_EXP}} }}
{{dsc | {{c|double}}            | {{lc|DBL_MAX_10_EXP}} }}
{{dsc | {{c|long double}}       | {{lc|LDBL_MAX_10_EXP}} }}
{{dsc end}}

===Example===
{{example
 | Demonstrates the relationships of max_exponent, max_exponent10, and max() for the type float:
 | code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;max() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;max_exponent10 = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max_exponent10 &lt;&lt; '\n'
              &lt;&lt; std::hexfloat
              &lt;&lt; &quot;max() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max() &lt;&lt; '\n'
              &lt;&lt; &quot;max_exponent = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::max_exponent &lt;&lt; '\n';
}

 | output=
max() = 3.40282e+38
max_exponent10 = 38
max() = 0x1.fffffep+127
max_exponent = 128
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent10}}
{{dsc end}}

[[de:cpp/types/numeric limits/max exponent10]]
[[es:cpp/types/numeric limits/max exponent10]]
[[fr:cpp/types/numeric limits/max exponent10]]
[[it:cpp/types/numeric limits/max exponent10]]
[[ja:cpp/types/numeric limits/max exponent10]]
[[pt:cpp/types/numeric limits/max exponent10]]
[[ru:cpp/types/numeric limits/max exponent10]]
[[zh:cpp/types/numeric limits/max exponent10]]</text>
      <sha1>qn11amw2enghamv2vhlkpai1b603cko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/min</title>
    <ns>0</ns>
    <id>3011</id>
    <revision>
      <id>91615</id>
      <parentid>63270</parentid>
      <timestamp>2017-03-31T19:51:58Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3793">{{cpp/types/numeric_limits/title | min}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T min();
}}
{{dcl | since=c++11 |1=
static constexpr T min(); 
}}
{{dcl rev end}}
{{dcl end}}

Returns the minimum finite value representable by the numeric type {{tt|T}}.  

For floating-point types with denormalization, {{tt|min}} returns the minimum positive normalized value.  ''Note that this behavior may be unexpected'', especially when compared to the behavior of {{tt|min}} for integral types. To find the value that has no values less than it, use {{l2tt|cpp/types/numeric_limits/lowest}}.

{{tt|min}} is only meaningful for bounded types and for unbounded unsigned types, that is, types that represent an infinite set of negative values have no meaningful minimum.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::min()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|false}}     }}
{{dsc | {{c|char}}              | {{lc|CHAR_MIN}}  }}
{{dsc | {{c|signed char}}       | {{lc|SCHAR_MIN}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}}         }}
{{dsc | {{c|wchar_t}}           | {{lc|WCHAR_MIN}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{lc|SHRT_MIN}}  }}
{{dsc | {{c|unsigned short}}    | {{c|0}}         }}
{{dsc | {{c|int}}               | {{lc|INT_MIN}}   }}
{{dsc | {{c|unsigned int}}      | {{c|0}}         }}
{{dsc | {{c|long}}              | {{lc|LONG_MIN}}  }}
{{dsc | {{c|unsigned long}}     | {{c|0}}         }}
{{dsc | {{c|long long}}         | {{lc|LLONG_MIN}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}}         }}
{{dsc | {{c|float}}             | {{lc|FLT_MIN}}   }}
{{dsc | {{c|double}}            | {{lc|DBL_MIN}}   }}
{{dsc | {{c|long double}}       | {{lc|LDBL_MIN}}  }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none) }}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | p=true
 | Demonstrates the use with typedef types, and the difference in the sign of the result between integer and floating-point types
 | code=
#include &lt;limits&gt;
#include &lt;cstddef&gt;
#include &lt;iostream&gt;

int main()
{
    std::cout 
        &lt;&lt; &quot;short: &quot; &lt;&lt; std::dec &lt;&lt; std::numeric_limits&lt;short&gt;::min()
        &lt;&lt; &quot; or &quot; &lt;&lt; std::hex &lt;&lt; std::showbase 
        &lt;&lt; std::numeric_limits&lt;short&gt;::min() &lt;&lt; '\n'

        &lt;&lt; &quot;int: &quot; &lt;&lt; std::dec &lt;&lt; std::numeric_limits&lt;int&gt;::min() &lt;&lt; std::showbase
        &lt;&lt; &quot; or &quot; &lt;&lt; std::hex &lt;&lt; std::numeric_limits&lt;int&gt;::min() &lt;&lt; '\n' &lt;&lt; std::dec 

        &lt;&lt; &quot;ptrdiff_t: &quot; &lt;&lt; std::numeric_limits&lt;std::ptrdiff_t&gt;::min() &lt;&lt; std::showbase
        &lt;&lt; &quot; or &quot; &lt;&lt; std::hex &lt;&lt; std::numeric_limits&lt;std::ptrdiff_t&gt;::min() &lt;&lt; '\n'

        &lt;&lt; &quot;float: &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min()
        &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;float&gt;::min() &lt;&lt; '\n'

        &lt;&lt; &quot;double: &quot; &lt;&lt; std::defaultfloat &lt;&lt; std::numeric_limits&lt;double&gt;::min()
        &lt;&lt; &quot; or &quot; &lt;&lt; std::hexfloat &lt;&lt; std::numeric_limits&lt;double&gt;::min() &lt;&lt; '\n';
}
 | output=
short: -32768 or 0x8000
int: -2147483648 or 0x80000000
ptrdiff_t: -9223372036854775808 or 0x8000000000000000
float: 1.17549e-38 or 0x1p-126
double: 2.22507e-308 or 0x1p-1022
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc lowest}}
{{dsc inc | cpp/types/numeric_limits/dsc denorm_min}}
{{dsc inc | cpp/types/numeric_limits/dsc max}}
{{dsc end}}

[[de:cpp/types/numeric limits/min]]
[[es:cpp/types/numeric limits/min]]
[[fr:cpp/types/numeric limits/min]]
[[it:cpp/types/numeric limits/min]]
[[ja:cpp/types/numeric limits/min]]
[[pt:cpp/types/numeric limits/min]]
[[ru:cpp/types/numeric limits/min]]
[[zh:cpp/types/numeric limits/min]]</text>
      <sha1>sa4pduauggtphdnnggzggd3j2v5z48s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/min exponent</title>
    <ns>0</ns>
    <id>3090</id>
    <revision>
      <id>66137</id>
      <parentid>61854</parentid>
      <timestamp>2013-11-07T01:08:30Z</timestamp>
      <contributor>
        <ip>152.2.130.155</ip>
      </contributor>
      <comment>Fixed typo erroneously referring to min_exponent10.</comment>
      <text xml:space="preserve" bytes="2787">{{cpp/types/numeric_limits/title | min_exponent}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const int min_exponent;
}}
{{dcl | since=c++11 |1=
static constexpr int min_exponent;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::min_exponent}} is the lowest negative number {{tt|n}} such that {{math|r{{su|p=n-1}}}}, where {{tt|r}} is {{c|std::numeric_limits&lt;T&gt;::radix}} is a valid normalized value of the floating-point type {{tt|T}}. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::min_exponent}} }}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|0}} }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|FLT_MIN_EXP}} }}
{{dsc | {{c|double}}            | {{lc|DBL_MIN_EXP}} }}
{{dsc | {{c|long double}}       | {{lc|LDBL_MIN_EXP}} }}
{{dsc end}}

===Example===
{{example
 | Demonstrates the relationships of min_exponent, min_exponent10, min, and radix for the type float:
 | code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;min() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min() &lt;&lt; '\n'
              &lt;&lt; &quot;min_exponent10 = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min_exponent10 &lt;&lt; '\n'
              &lt;&lt; std::hexfloat
              &lt;&lt; &quot;min() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min() &lt;&lt; '\n'
              &lt;&lt; &quot;min_exponent = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min_exponent &lt;&lt; '\n';
}
 | output=
min() = 1.17549e-38
min_exponent10 = -37
min() = 0x1p-126
min_exponent = -125
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc radix}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent10}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent10}}
{{dsc end}}

[[de:cpp/types/numeric limits/min exponent]]
[[es:cpp/types/numeric limits/min exponent]]
[[fr:cpp/types/numeric limits/min exponent]]
[[it:cpp/types/numeric limits/min exponent]]
[[ja:cpp/types/numeric limits/min exponent]]
[[pt:cpp/types/numeric limits/min exponent]]
[[ru:cpp/types/numeric limits/min exponent]]
[[zh:cpp/types/numeric limits/min exponent]]</text>
      <sha1>2oe5ggdjht2s2jvishlyhl0mctaq58v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/min exponent10</title>
    <ns>0</ns>
    <id>3088</id>
    <revision>
      <id>61856</id>
      <parentid>59447</parentid>
      <timestamp>2013-06-09T16:06:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2715">{{cpp/types/numeric_limits/title | min_exponent10}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const int min_exponent10;
}}
{{dcl | since=c++11 |1=
static constexpr int min_exponent10;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::min_exponent10}} is the lowest negative number {{tt|n}} such that {{math|10{{su|p=n}}}} is a valid normalized value of the floating-point type {{tt|T}}. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::min_exponent10}} }}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|0}} }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|FLT_MIN_10_EXP}} }}
{{dsc | {{c|double}}            | {{lc|DBL_MIN_10_EXP}} }}
{{dsc | {{c|long double}}       | {{lc|LDBL_MIN_10_EXP}} }}
{{dsc end}}

===Example===
{{example
 | Demonstrates the relationships of min_exponent, min_exponent10, min, and radix for the type float:
 | code=
#include &lt;iostream&gt;
int main()
{
    std::cout &lt;&lt; &quot;min() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min() &lt;&lt; '\n'
              &lt;&lt; &quot;min_exponent10 = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min_exponent10 &lt;&lt; '\n'
              &lt;&lt; std::hexfloat
              &lt;&lt; &quot;min() = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min() &lt;&lt; '\n'
              &lt;&lt; &quot;min_exponent = &quot; &lt;&lt; std::numeric_limits&lt;float&gt;::min_exponent &lt;&lt; '\n';
}
 | output=
min() = 1.17549e-38
min_exponent10 = -37
min() = 0x1p-126
min_exponent = -125
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent10}}
{{dsc end}}

[[de:cpp/types/numeric limits/min exponent10]]
[[es:cpp/types/numeric limits/min exponent10]]
[[fr:cpp/types/numeric limits/min exponent10]]
[[it:cpp/types/numeric limits/min exponent10]]
[[ja:cpp/types/numeric limits/min exponent10]]
[[pt:cpp/types/numeric limits/min exponent10]]
[[ru:cpp/types/numeric limits/min exponent10]]
[[zh:cpp/types/numeric limits/min exponent10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/quiet NaN</title>
    <ns>0</ns>
    <id>3057</id>
    <revision>
      <id>91344</id>
      <parentid>73059</parentid>
      <timestamp>2017-03-31T19:40:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3356">{{cpp/types/numeric_limits/title | quiet_NaN}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T quiet_NaN();
}}
{{dcl | since=c++11 |1=
static constexpr T quiet_NaN();
}}
{{dcl rev end}}
{{dcl end}}

Returns the special value &quot;quiet [[enwiki:NaN|not-a-number]]&quot;, as represented by the floating-point type {{tt|T}}. Only meaningful if {{c|1=std::numeric_limits&lt;T&gt;::has_quiet_NaN == true}}. In IEEE 754, the most common binary representation of floating-point numbers, any value with all bits of the exponent set and at least one bit of the fraction set represents a NaN. It is implementation-defined which values of the fraction represent quiet or signaling NaNs, and whether the sign bit is meaningful.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::quiet_NaN()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|false}}     }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{lc|NAN}} or another implementation-defined NaN }}
{{dsc | {{c|double}}            | implementation-defined }}
{{dsc | {{c|long double}}       | implementation-defined }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Notes===
A NaN never compares equal to itself. Copying a NaN may not preserve its bit representation.

===Example===
{{example
 | Several ways to generate a NaN (the output string is compiler-specific)
 | code=
#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;cmath&gt;

int main()
{
    std::cout &lt;&lt; std::numeric_limits&lt;double&gt;::quiet_NaN() &lt;&lt; ' '
              &lt;&lt; std::numeric_limits&lt;double&gt;::signaling_NaN() &lt;&lt; ' '
              &lt;&lt; std::acos(2) &lt;&lt; ' '
              &lt;&lt; std::tgamma(-1) &lt;&lt; ' '
              &lt;&lt; std::log(-1) &lt;&lt; ' '
              &lt;&lt; std::sqrt(-1) &lt;&lt; ' '
              &lt;&lt; 0 / 0.0 &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;NaN == NaN? &quot; &lt;&lt; std::boolalpha
              &lt;&lt; ( std::numeric_limits&lt;double&gt;::quiet_NaN()
                   == std::numeric_limits&lt;double&gt;::quiet_NaN() ) &lt;&lt; '\n';
}
 | output=
nan nan nan nan nan -nan -nan
NaN == NaN? false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc has_quiet_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc signaling_NaN}}
{{dsc inc | cpp/numeric/math/dsc fnan}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc end}}

[[de:cpp/types/numeric limits/quiet NaN]]
[[es:cpp/types/numeric limits/quiet NaN]]
[[fr:cpp/types/numeric limits/quiet NaN]]
[[it:cpp/types/numeric limits/quiet NaN]]
[[ja:cpp/types/numeric limits/quiet NaN]]
[[pt:cpp/types/numeric limits/quiet NaN]]
[[ru:cpp/types/numeric limits/quiet NaN]]
[[zh:cpp/types/numeric limits/quiet NaN]]</text>
      <sha1>mc2e14sbllx99p8fuwya5qyn7tpuw2v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/radix</title>
    <ns>0</ns>
    <id>3073</id>
    <revision>
      <id>61865</id>
      <parentid>59451</parentid>
      <timestamp>2013-06-09T16:07:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="2180">{{cpp/types/numeric_limits/title | radix}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const int radix;
}}
{{dcl | since=c++11 |1=
static constexpr int radix;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::radix}} is the base of the number system used in the representation of the type. It is 2 for all binary numeric types, but it may be, for example, 10 for IEEE 754 [[enwiki:Decimal64 floating-point format|decimal floating-point types]] or for third-party [[enwiki:Binary-coded decimal|binary-coded decimal]] integers. This constant is meaningful for all specializations.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::radix}} }}
{{dsc | /* non-specialized */     | {{c|0}} }}
{{dsc | {{c|bool}}              | {{c|2}} }}
{{dsc | {{c|char}}              | {{c|2}} }}
{{dsc | {{c|signed char}}       | {{c|2}} }}
{{dsc | {{c|unsigned char}}     | {{c|2}} }}
{{dsc | {{c|wchar_t}}           | {{c|2}} }}
{{dsc | {{c|char16_t}}          | {{c|2}} }}
{{dsc | {{c|char32_t}}          | {{c|2}} }}
{{dsc | {{c|short}}             | {{c|2}} }}
{{dsc | {{c|unsigned short}}    | {{c|2}} }}
{{dsc | {{c|int}}               | {{c|2}} }}
{{dsc | {{c|unsigned int}}      | {{c|2}} }}
{{dsc | {{c|long}}              | {{c|2}} }}
{{dsc | {{c|unsigned long}}     | {{c|2}} }}
{{dsc | {{c|long long}}         | {{c|2}} }}
{{dsc | {{c|unsigned long long}}| {{c|2}} }}
{{dsc | {{c|float}}             | {{lc|FLT_RADIX}} }}
{{dsc | {{c|double}}            | {{lc|FLT_RADIX}} }}
{{dsc | {{c|long double}}       | {{lc|FLT_RADIX}} }}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc digits}}
{{dsc inc | cpp/types/numeric_limits/dsc min_exponent}}
{{dsc inc | cpp/types/numeric_limits/dsc max_exponent}}
{{dsc end}}

[[de:cpp/types/numeric limits/radix]]
[[es:cpp/types/numeric limits/radix]]
[[fr:cpp/types/numeric limits/radix]]
[[it:cpp/types/numeric limits/radix]]
[[ja:cpp/types/numeric limits/radix]]
[[pt:cpp/types/numeric limits/radix]]
[[ru:cpp/types/numeric limits/radix]]
[[zh:cpp/types/numeric limits/radix]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/round error</title>
    <ns>0</ns>
    <id>3028</id>
    <revision>
      <id>91666</id>
      <parentid>64823</parentid>
      <timestamp>2017-03-31T19:54:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2107">{{cpp/types/numeric_limits/title | round_error}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T round_error();
}}
{{dcl | since=c++11 |1=
static constexpr T round_error();
}}
{{dcl rev end}}
{{dcl end}}

Returns the largest possible rounding error in ULPs (units in the last place) as defined by ISO 10967, which can vary from 0.5 (rounding to the nearest digit) to 1.0 (rounding to zero or to infinity). It is only meaningful if {{c|1=std::numeric_limits&lt;T&gt;::is_integer == false}}.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::round_error()}} }}
{{dsc | /* non-specialized */ | {{tt|T();}} }}
{{dsc | {{c|bool}}              | {{c|false}}       }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | {{c|0.5F}}   }}
{{dsc | {{c|double}}            | {{c|0.5}}   }}
{{dsc | {{c|long double}}       | {{c|0.5L}}  }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc round_style}}
{{dsc end}}

[[de:cpp/types/numeric limits/round error]]
[[es:cpp/types/numeric limits/round error]]
[[fr:cpp/types/numeric limits/round error]]
[[it:cpp/types/numeric limits/round error]]
[[ja:cpp/types/numeric limits/round error]]
[[pt:cpp/types/numeric limits/round error]]
[[ru:cpp/types/numeric limits/round error]]
[[zh:cpp/types/numeric limits/round error]]</text>
      <sha1>4nwujz071sy8bgp7v14swjj3b0y13tt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/round style</title>
    <ns>0</ns>
    <id>3095</id>
    <revision>
      <id>78149</id>
      <parentid>71779</parentid>
      <timestamp>2015-05-05T17:54:55Z</timestamp>
      <contributor>
        <username>Som1Lse</username>
        <id>4049</id>
      </contributor>
      <comment>Corrected &quot;std::numeric_limits&lt;T&gt;::round_stylem&quot; to &quot;std::numeric_limits&lt;T&gt;::round_style&quot;.</comment>
      <text xml:space="preserve" bytes="3717">{{cpp/types/numeric_limits/title | round_style}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const std::float_round_style round_style
}}
{{dcl | since=c++11 |1=
static constexpr std::float_round_style round_style
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::round_style}} identifies the rounding style used by the floating-point type {{tt|T}} whenever a value that is not one of the exactly repesentable values of {{tt|T}} is stored in an object of that type.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::round_style}} }}
{{dsc | /* non-specialized */     | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|bool}}              | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|char}}              | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|signed char}}       | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|unsigned char}}     | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|wchar_t}}           | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|char16_t}}          | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|char32_t}}          | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|short}}             | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|unsigned short}}    | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|int}}               | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|unsigned int}}      | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|long}}              | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|unsigned long}}     | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|long long}}         | {{lc|std::round_toward_zero}} }}
{{dsc | {{c|unsigned long long}}| {{lc|std::round_toward_zero}} }}
{{dsc | {{c|float}}             | usually {{lc|std::round_to_nearest}} }}
{{dsc | {{c|double}}            | usually {{lc|std::round_to_nearest}} }}
{{dsc | {{c|long double}}       | usually {{lc|std::round_to_nearest}} }}
{{dsc end}}

===Notes===
These values are constants, and do not reflect the changes to the rounding made by {{lc|std::fesetround}}. The changed values may be obtained from {{lc|FLT_ROUNDS}} or {{lc|std::fegetround}}.

===Example===
The decimal value {{c|0.1}} cannot be represented by a binary floating-point type. When stored in an IEEE-745 {{c|double}}, it falls between {{math|0x1.9999999999999*2{{su|p=-4}}}} and {{math|0x1.999999999999a*2{{su|p=-4}}}}. Rounding to nearest representable value results in {{math|0x1.999999999999a*2{{su|p=-4}}}}. 

Similarly, the decimal value 0.3, which is between {{math|0x1.3333333333333*2{{su|p=-2}}}} and {{math|0x1.3333333333334*2{{su|p=-2}}}} is rounded to nearest and is stored as {{math|0x1.3333333333333*2{{su|p=-2}}}}.

{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;limits&gt;
int main()
{
    std::cout &lt;&lt; std::hexfloat &lt;&lt; &quot;The decimal 0.1 is stored in a double as &quot;
              &lt;&lt; 0.1 &lt;&lt; '\n'
              &lt;&lt; &quot;The decimal 0.3 is stored in a double as &quot;
              &lt;&lt; 0.3 &lt;&lt; '\n'
              &lt;&lt; &quot;The rounding style is &quot; &lt;&lt; std::numeric_limits&lt;double&gt;::round_style &lt;&lt; '\n';
}
 | output=
The decimal 0.1 is stored in a double as 0x1.999999999999ap-4
The decimal 0.3 is stored in a double as 0x1.3333333333333p-2
The rounding style is 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc float_round_style}}
{{dsc end}}

[[de:cpp/types/numeric limits/round style]]
[[es:cpp/types/numeric limits/round style]]
[[fr:cpp/types/numeric limits/round style]]
[[it:cpp/types/numeric limits/round style]]
[[ja:cpp/types/numeric limits/round style]]
[[pt:cpp/types/numeric limits/round style]]
[[ru:cpp/types/numeric limits/round style]]
[[zh:cpp/types/numeric limits/round style]]</text>
      <sha1>tpxsab2j16bge1lxdam1d4yjd1ubst5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/signaling NaN</title>
    <ns>0</ns>
    <id>3058</id>
    <revision>
      <id>92082</id>
      <parentid>92078</parentid>
      <timestamp>2017-04-04T16:04:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>redo the blurb about not preserving payload, with a link to std::nan for defining payload</comment>
      <text xml:space="preserve" bytes="3963">{{cpp/types/numeric_limits/title | signaling_NaN}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static T signaling_NaN();
}}
{{dcl | since=c++11 |1=
static constexpr T signaling_NaN();
}}
{{dcl rev end}}
{{dcl end}}

Returns the special value &quot;signaling [[enwiki:NaN|not-a-number]]&quot;, as represented by the floating-point type {{tt|T}}. Only meaningful if {{c|1=std::numeric_limits&lt;T&gt;::has_signaling_NaN == true}}. In IEEE 754, the most common binary representation of floating-point numbers, any value with all bits of the exponent set and at least one bit of the fraction set represents a NaN. It is implementation-defined which values of the fraction represent quiet or signaling NaNs, and whether the sign bit is meaningful.

===Return value===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | {{c|std::numeric_limits&lt;T&gt;::signaling_NaN()}} }}
{{dsc | /* non-specialized */ | {{tt|T()}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | {{c|0}} }}
{{dsc | {{c|signed char}}       | {{c|0}} }}
{{dsc | {{c|unsigned char}}     | {{c|0}} }}
{{dsc | {{c|wchar_t}}           | {{c|0}} }}
{{dsc | {{c|char16_t}}          | {{c|0}} }}
{{dsc | {{c|char32_t}}          | {{c|0}} }}
{{dsc | {{c|short}}             | {{c|0}} }}
{{dsc | {{c|unsigned short}}    | {{c|0}} }}
{{dsc | {{c|int}}               | {{c|0}} }}
{{dsc | {{c|unsigned int}}      | {{c|0}} }}
{{dsc | {{c|long}}              | {{c|0}} }}
{{dsc | {{c|unsigned long}}     | {{c|0}} }}
{{dsc | {{c|long long}}         | {{c|0}} }}
{{dsc | {{c|unsigned long long}}| {{c|0}} }}
{{dsc | {{c|float}}             | implementation-defined }}
{{dsc | {{c|double}}            | implementation-defined }}
{{dsc | {{c|long double}}       | implementation-defined }}
{{dsc end}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Notes===
A NaN never compares equal to itself. Copying a NaN is not required, by IEEE-754, to preserve its bit representation (sign and [[cpp/numeric/math/nan|payload]]), though most implementation do.

When a signaling NaN is used as an argument to an arithmetic expression, the appropriate floating-point exception may be raised and the NaN is &quot;quieted&quot;, that is, the expression returns a quiet NaN.

===Example===
{{example
 | Demonstrates the use of a signaling NaN to raise a floating-point exception
 | code=
#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;cfenv&gt;
#pragma STDC_FENV_ACCESS on
void show_fe_exceptions()
{
    int n = std::fetestexcept(FE_ALL_EXCEPT);
    if(n &amp; FE_INVALID) std::cout &lt;&lt; &quot;FE_INVALID is raised\n&quot;;
    else if(n == 0)    std::cout &lt;&lt; &quot;no exceptions are raised\n&quot;;
    std::feclearexcept(FE_ALL_EXCEPT);
}
int main()
{
    double snan = std::numeric_limits&lt;double&gt;::signaling_NaN();
    std::cout &lt;&lt; &quot;After sNaN was obtained &quot;;
    show_fe_exceptions();
    double qnan = snan * 2.0;
    std::cout &lt;&lt; &quot;After sNaN was multiplied by 2 &quot;;
    show_fe_exceptions();
    double qnan2 = qnan * 2.0;
    std::cout &lt;&lt; &quot;After the quieted NaN was multiplied by 2 &quot;;
    show_fe_exceptions();
    std::cout &lt;&lt; &quot;The result is &quot; &lt;&lt; qnan2 &lt;&lt; '\n';
}
 | output=
After sNaN was obtained no exceptions are raised
After sNaN was multiplied by 2 FE_INVALID is raised
After the quieted NaN was multiplied by 2 no exceptions are raised
The result is nan
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc has_signaling_NaN}}
{{dsc inc | cpp/types/numeric_limits/dsc quiet_NaN}}
{{dsc inc | cpp/numeric/math/dsc isnan}}
{{dsc end}}

[[de:cpp/types/numeric limits/signaling NaN]]
[[es:cpp/types/numeric limits/signaling NaN]]
[[fr:cpp/types/numeric limits/signaling NaN]]
[[it:cpp/types/numeric limits/signaling NaN]]
[[ja:cpp/types/numeric limits/signaling NaN]]
[[pt:cpp/types/numeric limits/signaling NaN]]
[[ru:cpp/types/numeric limits/signaling NaN]]
[[zh:cpp/types/numeric limits/signaling NaN]]</text>
      <sha1>f5qt7nlz1jn0sdosje42lcw2janj1sa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/tinyness before</title>
    <ns>0</ns>
    <id>3081</id>
    <revision>
      <id>73639</id>
      <parentid>73637</parentid>
      <timestamp>2014-11-07T15:41:36Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>-inexact test from this example</comment>
      <text xml:space="preserve" bytes="4264">{{cpp/types/numeric_limits/title | tinyness_before}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool tinyness_before;
}}
{{dcl | since=c++11 |1=
static constexpr bool tinyness_before;
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::tinyness_before}} is {{c|true}} for all floating-point types {{tt|T}} that test results of floating-point expressions for underflow before rounding.

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::tinyness_before}} }}
{{dsc | /* non-specialized */     | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | {{c|false}} }}
{{dsc | {{c|signed char}}       | {{c|false}} }}
{{dsc | {{c|unsigned char}}     | {{c|false}} }}
{{dsc | {{c|wchar_t}}           | {{c|false}} }}
{{dsc | {{c|char16_t}}          | {{c|false}} }}
{{dsc | {{c|char32_t}}          | {{c|false}} }}
{{dsc | {{c|short}}             | {{c|false}} }}
{{dsc | {{c|unsigned short}}    | {{c|false}} }}
{{dsc | {{c|int}}               | {{c|false}} }}
{{dsc | {{c|unsigned int}}      | {{c|false}} }}
{{dsc | {{c|long}}              | {{c|false}} }}
{{dsc | {{c|unsigned long}}     | {{c|false}} }}
{{dsc | {{c|long long}}         | {{c|false}} }}
{{dsc | {{c|unsigned long long}}| {{c|false}} }}
{{dsc | {{c|float}}             | implementation-defined }}
{{dsc | {{c|double}}            | implementation-defined }}
{{dsc | {{c|long double}}       | implementation-defined }}
{{dsc end}}

===Notes===
Standard-compliant IEEE 754 floating-point implementations are required to detect the floating-point underflow, and have two alternative situations where this can be done

@1@ Underflow occurs (and {{lc|FE_UNDERFLOW}} may be raised) if a computation produces a result whose absolute value, computed as though both the exponent range and the precision were unbounded, is smaller than {{c|std::numeric_limits&lt;T&gt;::min()}}. Such implementation detects tinyness before rounding (e.g. UltraSparc, POWER).
@2@ Underflow occurs (and {{lc|FE_UNDERFLOW}} may be raised) if after the rounding of the result to the target floating-point type (that is, rounding to {{c|std::numeric_limits&lt;T&gt;::digits}} bits), the result's absolute value is smaller than {{c|std::numeric_limits&lt;T&gt;::min()}}. Formally, the absolute value of a nonzero result computed as though the exponent range were unbounded is smaller than {{c|std::numeric_limits&lt;T&gt;::min()}}. Such implementation detects tinyness after rounding (e.g. SuperSparc)

===Example===
{{example
 | Multiplication of the largest subnormal number by the number one machine epsilon greater than 1.0 gives the tiny value 0x0.fffffffffffff8p-1022 before rounding, but normal value 1p-1022 after rounding. The implementation used to execute this test (IBM Power7) detects tinyness before rounding.
 | code=
#include &lt;iostream&gt;
#include &lt;limits&gt;
#include &lt;cmath&gt;
#include &lt;cfenv&gt;
int main()
{
    std::cout &lt;&lt; &quot;Tinyness before: &quot; &lt;&lt; std::boolalpha
              &lt;&lt; std::numeric_limits&lt;double&gt;::tinyness_before &lt;&lt; '\n';

    double denorm_max = std::nextafter(std::numeric_limits&lt;double&gt;::min(), 0);
    double multiplier = 1 + std::numeric_limits&lt;double&gt;::epsilon();

    std::feclearexcept(FE_ALL_EXCEPT);

    double result = denorm_max*multiplier; // Underflow only if tinyness_before

    if(std::fetestexcept(FE_UNDERFLOW))
        std::cout &lt;&lt; &quot;Underflow detected\n&quot;;

    std::cout &lt;&lt; std::hexfloat &lt;&lt; denorm_max &lt;&lt; &quot; x &quot; &lt;&lt; multiplier  &lt;&lt;  &quot; = &quot;
              &lt;&lt; result &lt;&lt; '\n';
}
 | p=true
 | output=
Tinyness before: true
Underflow detected
0xf.ffffffffffffp-1030 x 0x1.0000000000001p+0 = 0x1p-1022
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm_loss}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm}}
{{dsc end}}

[[de:cpp/types/numeric limits/tinyness before]]
[[es:cpp/types/numeric limits/tinyness before]]
[[fr:cpp/types/numeric limits/tinyness before]]
[[it:cpp/types/numeric limits/tinyness before]]
[[ja:cpp/types/numeric limits/tinyness before]]
[[pt:cpp/types/numeric limits/tinyness before]]
[[ru:cpp/types/numeric limits/tinyness before]]
[[zh:cpp/types/numeric limits/tinyness before]]</text>
      <sha1>jgfqedx3h01z135hp3d5rus53p2r4v0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/numeric limits/traps</title>
    <ns>0</ns>
    <id>3068</id>
    <revision>
      <id>61866</id>
      <parentid>59462</parentid>
      <timestamp>2013-06-09T16:08:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+dcl rev</comment>
      <text xml:space="preserve" bytes="3051">{{cpp/types/numeric_limits/title | traps}}
{{cpp/types/numeric_limits/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |1=
static const bool traps
}}
{{dcl | since=c++11 |1=
static constexpr bool traps
}}
{{dcl rev end}}
{{dcl end}}

The value of {{c|std::numeric_limits&lt;T&gt;::traps}} is {{c|true}} for all arithmetic types {{tt|T}} that have at least one value that, if used as an argument to an arithmetic operation, will generate a [[enwiki:Trap (computing)|trap]]. 

===Standard specializations===
{{dsc begin}}
{{dsc hitem | {{tt|T}} | value of {{c|std::numeric_limits&lt;T&gt;::traps}} }}
{{dsc | /* non-specialized */ | {{c|false}} }}
{{dsc | {{c|bool}}              | {{c|false}} }}
{{dsc | {{c|char}}              | usually {{c|true}} }}
{{dsc | {{c|signed char}}       | usually {{c|true}} }}
{{dsc | {{c|unsigned char}}     | usually {{c|true}} }}
{{dsc | {{c|wchar_t}}           | usually {{c|true}} }}
{{dsc | {{c|char16_t}}          | usually {{c|true}} }}
{{dsc | {{c|char32_t}}          | usually {{c|true}} }}
{{dsc | {{c|short}}             | usually {{c|true}} }}
{{dsc | {{c|unsigned short}}    | usually {{c|true}} }}
{{dsc | {{c|int}}               | usually {{c|true}} }}
{{dsc | {{c|unsigned int}}      | usually {{c|true}} }}
{{dsc | {{c|long}}              | usually {{c|true}} }}
{{dsc | {{c|unsigned long}}     | usually {{c|true}} }}
{{dsc | {{c|long long}}         | usually {{c|true}} }}
{{dsc | {{c|unsigned long long}}| usually {{c|true}} }}
{{dsc | {{c|float}}             | usually {{c|false}} }}
{{dsc | {{c|double}}            | usually {{c|false}} }}
{{dsc | {{c|long double}}       | usually {{c|false}} }}
{{dsc end}}

===Notes===
On most platforms integer division by zero always traps, and {{c|std::numeric_limits&lt;T&gt;::traps}} is {{c|true}} for all integer types that support the value 0. The exception is the type {{c|bool}}: even though division by {{c|false}} traps due to integral promotion from {{c|bool}} to {{c|int}}, it is the zero-valued {{c|int}} that traps. Zero is not a value of type {{c|bool}}.

On most platforms, floating-point exceptions may be turned on and off at run time (e.g. {{c|feenableexcept()}} on Linux or {{c|_controlfp}} on Windows), in which case the value of {{c|std::numeric_limits&lt;T&gt;::traps}} for floating-point types reflects the state of floating-point trapping facility at the time of program startup, which is {{c|false}} on most modern systems. An exception would be a DEC Alpha program, where it is {{c|true}} if compiled without {{tt|-ieee}}.


===See also===
{{dsc begin}}
{{dsc | [[cpp/numeric/fenv|Floating-point environment]]}}
{{dsc inc | cpp/types/numeric_limits/dsc tinyness_before}}
{{dsc inc | cpp/types/numeric_limits/dsc has_denorm_loss}}
{{dsc end}}

[[de:cpp/types/numeric limits/traps]]
[[es:cpp/types/numeric limits/traps]]
[[fr:cpp/types/numeric limits/traps]]
[[it:cpp/types/numeric limits/traps]]
[[ja:cpp/types/numeric limits/traps]]
[[pt:cpp/types/numeric limits/traps]]
[[ru:cpp/types/numeric limits/traps]]
[[zh:cpp/types/numeric limits/traps]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/offsetof</title>
    <ns>0</ns>
    <id>3266</id>
    <revision>
      <id>85243</id>
      <parentid>70955</parentid>
      <timestamp>2016-04-12T10:45:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Note unary &amp;, which requires an intrinsic; drop the broken &quot;possible implementation&quot;; +exception guarantees.</comment>
      <text xml:space="preserve" bytes="1894">{{title|offsetof}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | cstddef}}
{{dcl |
#define offsetof(type, member) /*implementation-defined*/
}}
{{dcl end}}

The macro {{lc|offsetof}} expands to an integral constant expression of type {{lc|std::size_t}}, the value of which is the offset, in bytes, from the beginning of an object of specified type to its specified member, including padding if any.

If {{tt|type}} is not a [[cpp/language/data_members#Standard layout|standard layout type]], the behavior is undefined.

If {{tt|member}} is a [[cpp/language/static|static member]] or a [[cpp/language/member_functions|member function]], the behavior is undefined.

The offset of the first member of a standard-layout type is always zero ([[cpp/language/ebo|empty-base optimization]] is mandatory).

=== Exceptions ===
{{tt|offsetof}} throws no exceptions; the expression {{c|noexcept(offsetof(type, member))}} always evaluates to {{c|true}}.

=== Notes ===
{{tt|offsetof}} is required to work as specified above, even if unary {{tt|operator&amp;}} is overloaded for any of the types involved. This cannot be implemented in standard C++ and requires compiler support.

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;cstddef&gt;
struct S {
    char c;
    double d;
};
int main()
{
    std::cout &lt;&lt; &quot;the first element is at offset &quot; &lt;&lt; offsetof(S, c) &lt;&lt; '\n'
              &lt;&lt; &quot;the double is at offset &quot; &lt;&lt; offsetof(S, d) &lt;&lt; '\n';
}
 | p=true
 | output=
the first element is at offset 0
the double is at offset 8
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc inc | cpp/types/dsc is_standard_layout}}
{{dsc see c | c/types/offsetof}}
{{dsc end}}

[[de:cpp/types/offsetof]]
[[es:cpp/types/offsetof]]
[[fr:cpp/types/offsetof]]
[[it:cpp/types/offsetof]]
[[ja:cpp/types/offsetof]]
[[pt:cpp/types/offsetof]]
[[ru:cpp/types/offsetof]]
[[zh:cpp/types/offsetof]]</text>
      <sha1>tl1ci55frtg875sf7nep1jgyfv7hm0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/ptrdiff t</title>
    <ns>0</ns>
    <id>3265</id>
    <revision>
      <id>83571</id>
      <parentid>83570</parentid>
      <timestamp>2016-02-29T13:05:00Z</timestamp>
      <contributor>
        <ip>113.87.199.197</ip>
      </contributor>
      <text xml:space="preserve" bytes="2068">{{cpp/title|ptrdiff_t}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | cstddef}}
{{dcl |
typedef /*implementation-defined*/ ptrdiff_t;
}}
{{dcl end}}

{{tt|std::ptrdiff_t}} is the signed integer type of the result of subtracting two pointers.

===Notes===
{{tt|std::ptrdiff_t}} is used for [[cpp/language/operator_arithmetic#Additive_operators|pointer arithmetic]] and array indexing, if negative values are possible. Programs that use other types, such as {{c|int}}, may fail on, e.g. 64-bit systems when the index exceeds {{lc|INT_MAX}} or if it relies on 32-bit modular arithmetic.

When working with the C++ container library, the proper type for the difference between iterators is the member typedef {{c|difference_type}}, which is often synonymous with {{tt|std::ptrdiff_t}}.

Only pointers to elements of the same array (including the pointer one past the end of the array) may be subtracted from each other. 

If an array is so large (greater than {{lc|PTRDIFF_MAX}} elements, but less than {{lc|SIZE_MAX}} bytes), that the difference between two pointers may not be representable as {{tt|std::ptrdiff_t}}, the result of subtracting two such pointers is undefined.

For char arrays shorter than {{lc|PTRDIFF_MAX}}, {{tt|std::ptrdiff_t}} acts as the signed counterpart of {{lc|std::size_t}}: it can store the size of the array of any type and is, on most platforms, synonymous with {{lc|std::intptr_t}}.

===Example===
{{example
 | 
 | code=
#include &lt;cstddef&gt;
#include &lt;iostream&gt;
int main()
{
    const std::size_t N = 100;
    int* a = new int[N];
    int* end = a + N;
    for (std::ptrdiff_t i = N; i &gt; 0; --i)
        std::cout &lt;&lt; (*(end - i) = i) &lt;&lt; ' ';
    delete[] a;
}
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc size_t}}
{{dsc inc | cpp/types/dsc offsetof}}
{{dsc see c | c/types/ptrdiff_t}}
{{dsc end}}

[[de:cpp/types/ptrdiff t]]
[[es:cpp/types/ptrdiff t]]
[[fr:cpp/types/ptrdiff t]]
[[it:cpp/types/ptrdiff t]]
[[ja:cpp/types/ptrdiff t]]
[[pt:cpp/types/ptrdiff t]]
[[ru:cpp/types/ptrdiff t]]
[[zh:cpp/types/ptrdiff t]]</text>
      <sha1>9rfbweg2a5a7qh7p37ulg7nop77x7ar</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/rank</title>
    <ns>0</ns>
    <id>2717</id>
    <revision>
      <id>90981</id>
      <parentid>90944</parentid>
      <timestamp>2017-03-14T12:58:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="1570">{{cpp/title|rank}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct rank;
}}
{{dcl end}}

If {{tt|T}} is an array type, provides the member constant {{tt|value}} equal to the number of dimensions of the array. For any other type, {{tt|value}} is 0.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr std::size_t rank_v = rank&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit2 |the number of dimensions of {{tt|T}} or zero|std::size_t}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
struct rank : public std::integral_constant&lt;std::size_t, 0&gt; {};

template&lt;class T&gt;
struct rank&lt;T[]&gt; : public std::integral_constant&lt;std::size_t, rank&lt;T&gt;::value + 1&gt; {};

template&lt;class T, std::size_t N&gt;
struct rank&lt;T[N]&gt; : public std::integral_constant&lt;std::size_t, rank&lt;T&gt;::value + 1&gt; {};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

int main()
{
    std::cout &lt;&lt; std::rank&lt;int[1][2][3]&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::rank&lt;int[][2][3][4]&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; std::rank&lt;int&gt;::value &lt;&lt; '\n';
}
 | output=
3
4
0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc extent}}
{{dsc inc | cpp/types/dsc remove_extent}}
{{dsc inc | cpp/types/dsc remove_all_extents}}

{{dsc end}}

[[de:cpp/types/rank]]
[[es:cpp/types/rank]]
[[fr:cpp/types/rank]]
[[it:cpp/types/rank]]
[[ja:cpp/types/rank]]
[[pt:cpp/types/rank]]
[[ru:cpp/types/rank]]
[[zh:cpp/types/rank]]</text>
      <sha1>5un7i4xjblasvs1t2z0v2bj7pcz1vka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/remove all extents</title>
    <ns>0</ns>
    <id>2720</id>
    <revision>
      <id>73457</id>
      <parentid>63063</parentid>
      <timestamp>2014-10-30T08:21:25Z</timestamp>
      <contributor>
        <ip>80.147.26.242</ip>
      </contributor>
      <text xml:space="preserve" bytes="1992">{{cpp/title|remove_all_extents}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct remove_all_extents;
}}
{{dcl end}}

If {{tt|T}} is a multidimensional array of some type {{tt|X}}, provides the member typedef {{tt|type}} equal to {{tt|X}}, otherwise {{tt|type}} is {{tt|T}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the type of the element of {{tt|T}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using remove_all_extents_t = typename remove_all_extents&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
struct remove_all_extents { typedef T type;};

template&lt;class T&gt;
struct remove_all_extents&lt;T[]&gt; {
    typedef typename remove_all_extents&lt;T&gt;::type type;
};

template&lt;class T, std::size_t N&gt;
struct remove_all_extents&lt;T[N]&gt; {
    typedef typename remove_all_extents&lt;T&gt;::type type;
};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;typeinfo&gt;

template&lt;class A&gt;
void foo(const A&amp;)
{
    typedef typename std::remove_all_extents&lt;A&gt;::type Type;
    std::cout &lt;&lt; &quot;underlying type: &quot; &lt;&lt; typeid(Type).name() &lt;&lt; '\n';
}

int main()
{
    float a1[1][2][3];
    int a2[3][2];
    float a3[1][1][1][1][2];
    double a4[2][3];
 
    foo(a1);
    foo(a2);
    foo(a3);
    foo(a4);
}
 | output=
underlying type: f
underlying type: i
underlying type: f
underlying type: d
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc rank}}
{{dsc inc | cpp/types/dsc extent}}
{{dsc inc | cpp/types/dsc remove_extent}}
{{dsc end}}

[[de:cpp/types/remove all extents]]
[[es:cpp/types/remove all extents]]
[[fr:cpp/types/remove all extents]]
[[it:cpp/types/remove all extents]]
[[ja:cpp/types/remove all extents]]
[[pt:cpp/types/remove all extents]]
[[ru:cpp/types/remove all extents]]
[[zh:cpp/types/remove all extents]]</text>
      <sha1>tp4s0zcytjwon9d2owywjshe1bzj76j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/remove const</title>
    <ns>0</ns>
    <id>4239</id>
    <redirect title="cpp/types/remove cv" />
    <revision>
      <id>15338</id>
      <timestamp>2011-12-08T15:35:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/remove cv]]</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/types/remove_cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/remove cv</title>
    <ns>0</ns>
    <id>3280</id>
    <revision>
      <id>63064</id>
      <parentid>59471</parentid>
      <timestamp>2013-07-01T23:53:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="3096">{{cpp/title|remove_cv|remove_const|remove_volatile}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | num=1 | 1=
template&lt; class T &gt;
struct remove_cv;
}}
{{dcl | since=c++11 | num=2 | 1=
template&lt; class T &gt;
struct remove_const;
}}
{{dcl | since=c++11 | num=3 | 1=
template&lt; class T &gt;
struct remove_volatile;
}}
{{dcl end}}

Provides the member typedef {{tt|type}} which is the same as {{tt|T}}, except that its topmost cv-qualifiers are removed.

1) removes the topmost {{c|const}}, the topmost {{c|volatile}}, or both, if present.

2) removes the topmost {{c|const}}

3) removes the topmost {{c|volatile}}

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the type {{tt|T}} without cv-qualifier }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using remove_cv_t       = typename remove_cv&lt;T&gt;::type;
}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using remove_const_t    = typename remove_const&lt;T&gt;::type;
}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using remove_volatile_t = typename remove_volatile&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt;
struct remove_cv {
    typedef typename std::remove_volatile&lt;typename std::remove_const&lt;T&gt;::type&gt;::type type;
};

template&lt; class T &gt; struct remove_const          { typedef T type; };
template&lt; class T &gt; struct remove_const&lt;const T&gt; { typedef T type; };

template&lt; class T &gt; struct remove_volatile             { typedef T type; };
template&lt; class T &gt; struct remove_volatile&lt;volatile T&gt; { typedef T type; };
}}

===Example===
{{example
 | Removing const/volatile from {{c|const volatile int *}} does not modify the type, because the pointer itself is neither const nor volatile.
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
 
int main() {
    typedef std::remove_cv&lt;const int&gt;::type type1;
    typedef std::remove_cv&lt;volatile int&gt;::type type2;
    typedef std::remove_cv&lt;const volatile int&gt;::type type3;
    typedef std::remove_cv&lt;const volatile int*&gt;::type type4;
    typedef std::remove_cv&lt;int * const volatile&gt;::type type5;
 
    std::cout &lt;&lt; &quot;test1 &quot; &lt;&lt; (std::is_same&lt;int, type1&gt;::value
        ? &quot;passed&quot; : &quot;failed&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;test2 &quot; &lt;&lt; (std::is_same&lt;int, type2&gt;::value
        ? &quot;passed&quot; : &quot;failed&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;test3 &quot; &lt;&lt; (std::is_same&lt;int, type3&gt;::value
        ? &quot;passed&quot; : &quot;failed&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;test4 &quot; &lt;&lt; (std::is_same&lt;const volatile int*, type4&gt;::value
        ? &quot;passed&quot; : &quot;failed&quot;) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;test5 &quot; &lt;&lt; (std::is_same&lt;int*, type5&gt;::value
        ? &quot;passed&quot; : &quot;failed&quot;) &lt;&lt; '\n';
}
 | output=
test1 passed
test2 passed
test3 passed
test4 passed
test5 passed
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_const}}
{{dsc inc | cpp/types/dsc is_volatile}}
{{dsc end}}

[[de:cpp/types/remove cv]]
[[es:cpp/types/remove cv]]
[[fr:cpp/types/remove cv]]
[[it:cpp/types/remove cv]]
[[ja:cpp/types/remove cv]]
[[pt:cpp/types/remove cv]]
[[ru:cpp/types/remove cv]]
[[zh:cpp/types/remove cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/remove extent</title>
    <ns>0</ns>
    <id>2721</id>
    <revision>
      <id>87316</id>
      <parentid>63065</parentid>
      <timestamp>2016-08-10T17:13:57Z</timestamp>
      <contributor>
        <ip>104.132.224.81</ip>
      </contributor>
      <comment>add space after ; so that all the specializations are formatted the same way</comment>
      <text xml:space="preserve" bytes="1889">{{cpp/title|remove_extent}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct remove_extent;
}}
{{dcl end}}

If {{tt|T}} is an array of some type {{tt|X}}, provides the member typedef {{tt|type}} equal to {{tt|X}}, otherwise {{tt|type}} is {{tt|T}}. Note that if T is a multidimensional array, only the first dimension is removed.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the type of the element of {{tt|T}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using remove_extent_t = typename remove_extent&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;class T&gt;
struct remove_extent { typedef T type; };

template&lt;class T&gt;
struct remove_extent&lt;T[]&gt; { typedef T type; };

template&lt;class T, std::size_t N&gt;
struct remove_extent&lt;T[N]&gt; { typedef T type; };
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;type_traits&gt;

template&lt;class A&gt;
typename std::enable_if&lt; std::rank&lt;A&gt;::value == 1 &gt;::type
print_1d(const A&amp; a)
{
    copy(a, a+std::extent&lt;A&gt;::value,
         std::ostream_iterator&lt;typename std::remove_extent&lt;A&gt;::type&gt;(std::cout, &quot; &quot;));
    std::cout &lt;&lt; '\n';
}

int main()
{
    int a[][3] = {{1,2,3},{4,5,6}};
//  print_1d(a); // compile-time error
    print_1d(a[1]);
}
 | output=
4 5 6
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_array}}
{{dsc inc | cpp/types/dsc rank}}
{{dsc inc | cpp/types/dsc extent}}
{{dsc inc | cpp/types/dsc remove_all_extents}}
{{dsc end}}

[[de:cpp/types/remove extent]]
[[es:cpp/types/remove extent]]
[[fr:cpp/types/remove extent]]
[[it:cpp/types/remove extent]]
[[ja:cpp/types/remove extent]]
[[pt:cpp/types/remove extent]]
[[ru:cpp/types/remove extent]]
[[zh:cpp/types/remove extent]]</text>
      <sha1>gw677o12w1u2hqpgcv2u9i2qp60lxim</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/remove pointer</title>
    <ns>0</ns>
    <id>3284</id>
    <revision>
      <id>65058</id>
      <parentid>64905</parentid>
      <timestamp>2013-08-30T14:58:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>spacing, reduce clutter a bit</comment>
      <text xml:space="preserve" bytes="2477">{{cpp/title|remove_pointer}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct remove_pointer;
}}
{{dcl end}}

Provides the member typedef {{tt|type}} which is the type pointed to by {{tt|T}}, or, if {{tt|T}} is not a pointer, then {{tt|type}} is the same as {{tt|T}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the type pointed to by {{tt|T}} or {{tt|T}} if it's not a pointer}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using remove_pointer_t = typename remove_pointer&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt; struct remove_pointer                    {typedef T type;};
template&lt; class T &gt; struct remove_pointer&lt;T*&gt;                {typedef T type;};
template&lt; class T &gt; struct remove_pointer&lt;T* const&gt;          {typedef T type;};
template&lt; class T &gt; struct remove_pointer&lt;T* volatile&gt;       {typedef T type;};
template&lt; class T &gt; struct remove_pointer&lt;T* const volatile&gt; {typedef T type;};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

template&lt;class T1, class T2&gt;
void print_is_same() 
{
    std::cout &lt;&lt; std::is_same&lt;T1, T2&gt;() &lt;&lt; '\n';
}

void print_separator() 
{
    std::cout &lt;&lt; &quot;-----\n&quot;;
}

int main() 
{
    std::cout &lt;&lt; std::boolalpha;

    print_is_same&lt;int, int&gt;();   // true
    print_is_same&lt;int, int*&gt;();  // false
    print_is_same&lt;int, int**&gt;(); // false

    print_separator();

    print_is_same&lt;int, std::remove_pointer&lt;int&gt;::type&gt;();   // true
    print_is_same&lt;int, std::remove_pointer&lt;int*&gt;::type&gt;();  // true
    print_is_same&lt;int, std::remove_pointer&lt;int**&gt;::type&gt;(); // false

    print_separator();

    print_is_same&lt;int, std::remove_pointer&lt;int* const&gt;::type&gt;();          // true
    print_is_same&lt;int, std::remove_pointer&lt;int* volatile&gt;::type&gt;();       // true
    print_is_same&lt;int, std::remove_pointer&lt;int* const volatile&gt;::type&gt;(); // true
}
 | output=
true
false
false
-----
true
true
false
-----
true
true
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_pointer}}
{{dsc inc | cpp/types/dsc add_pointer}}
{{dsc end}}

[[de:cpp/types/remove pointer]]
[[es:cpp/types/remove pointer]]
[[fr:cpp/types/remove pointer]]
[[it:cpp/types/remove pointer]]
[[ja:cpp/types/remove pointer]]
[[pt:cpp/types/remove pointer]]
[[ru:cpp/types/remove pointer]]
[[zh:cpp/types/remove pointer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/remove reference</title>
    <ns>0</ns>
    <id>3286</id>
    <revision>
      <id>63625</id>
      <parentid>63620</parentid>
      <timestamp>2013-07-11T14:18:53Z</timestamp>
      <contributor>
        <username>Nate</username>
        <id>5</id>
      </contributor>
      <comment>minor formatting</comment>
      <text xml:space="preserve" bytes="1953">{{cpp/title|remove_reference}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct remove_reference;
}}
{{dcl end}}
If the type {{tt|T}} is a reference type, provides the member typedef {{tt|type}} which is the type referred to by {{tt|T}}. Otherwise {{tt|type}} is {{tt|T}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the type referred by {{tt|T}} or {{tt|T}} if it is not a reference}}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using remove_reference_t = typename remove_reference&lt;T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; class T &gt; struct remove_reference      {typedef T type;};
template&lt; class T &gt; struct remove_reference&lt;T&amp;&gt;  {typedef T type;};
template&lt; class T &gt; struct remove_reference&lt;T&amp;&amp;&gt; {typedef T type;};
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt; // std::cout
#include &lt;type_traits&gt; // std::is_same

template&lt;class T1, class T2&gt;
void print_is_same() {
  std::cout &lt;&lt; std::is_same&lt;T1, T2&gt;() &lt;&lt; '\n';
}

int main() {
  std::cout &lt;&lt; std::boolalpha;

  print_is_same&lt;int, int&gt;();    // true
  print_is_same&lt;int, int &amp;&gt;();  // false
  print_is_same&lt;int, int &amp;&amp;&gt;(); // false

  print_is_same&lt;int, std::remove_reference&lt;int&gt;::type&gt;();    // true
  print_is_same&lt;int, std::remove_reference&lt;int &amp;&gt;::type&gt;();  // true
  print_is_same&lt;int, std::remove_reference&lt;int &amp;&amp;&gt;::type&gt;(); // true
}
 | output=
true
false
false
true
true
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_reference}}
{{dsc inc | cpp/types/dsc add_reference}}
{{dsc end}}

[[de:cpp/types/remove reference]]
[[es:cpp/types/remove reference]]
[[fr:cpp/types/remove reference]]
[[it:cpp/types/remove reference]]
[[ja:cpp/types/remove reference]]
[[pt:cpp/types/remove reference]]
[[ru:cpp/types/remove reference]]
[[zh:cpp/types/remove reference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/remove volatile</title>
    <ns>0</ns>
    <id>4240</id>
    <redirect title="cpp/types/remove cv" />
    <revision>
      <id>15339</id>
      <timestamp>2011-12-08T15:35:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/types/remove cv]]</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/types/remove_cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/result of</title>
    <ns>0</ns>
    <id>2670</id>
    <revision>
      <id>90847</id>
      <parentid>89271</parentid>
      <timestamp>2017-03-14T01:11:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>+invoke_result</comment>
      <text xml:space="preserve" bytes="6497">{{cpp/title|result_of|invoke_result}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl |since=c++11 | notes={{mark|deprecated in C++17}} | num = 1|1=
template&lt; class &gt;
class result_of; // not defined

template&lt; class F, class... ArgTypes &gt;
class result_of&lt;F(ArgTypes...)&gt;;
}}
{{dcl | since=c++17 | num=2 |
template&lt; class F, class... ArgTypes&gt;
class invoke_result;
}}
{{dcl end}}

Deduces the return type of an INVOKE expression at compile time.

{{rev begin}}
{{rev |since=c++11|
{{tt|F}} must be a callable type, reference to function, or reference to callable type. Invoking {{tt|F}} with {{tt|ArgTypes...}} must be a well-formed expression }}
{{rev |since=c++14|
{{tt|F}} and all types in {{tt|ArgTypes}} can be any complete type, array of unknown bound, or (possibly cv-qualified) {{tt|void}} }}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | &lt;code&gt;type&lt;/code&gt; | the return type of the {{concept|Callable}} type &lt;code&gt;F&lt;/code&gt; if invoked with the arguments &lt;code&gt;ArgTypes...&lt;/code&gt;. {{rev inl|since=c++14|Only defined if F can be called with the arguments ArgTypes... in unevaluated context.}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | num=1 |notes={{mark|deprecated in C++17}}| 1=
template&lt; class T &gt;
using result_of_t = typename result_of&lt;T&gt;::type;
}}
{{dcl | since=c++17 | num=2 |1=
template&lt; class F, class... ArgTypes&gt;
using invoke_result_t = typename invoke_result&lt;F, ArgTypes...&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{source|1=
namespace detail {
template &lt;class F, class... Args&gt;
inline auto INVOKE(F&amp;&amp; f, Args&amp;&amp;... args) -&gt;
    decltype(forward&lt;F&gt;(f)(forward&lt;Args&gt;(args)...)) {
      return forward&lt;F&gt;(f)(forward&lt;Args&gt;(args)...);
}

template &lt;class Base, class T, class Derived&gt;
inline auto INVOKE(T Base::*pmd, Derived&amp;&amp; ref) -&gt;
    decltype(forward&lt;Derived&gt;(ref).*pmd) {
      return forward&lt;Derived&gt;(ref).*pmd;
}

template &lt;class PMD, class Pointer&gt;
inline auto INVOKE(PMD&amp;&amp; pmd, Pointer&amp;&amp; ptr) -&gt;
    decltype((*forward&lt;Pointer&gt;(ptr)).*forward&lt;PMD&gt;(pmd)) {
      return (*forward&lt;Pointer&gt;(ptr)).*forward&lt;PMD&gt;(pmd);
}

template &lt;class Base, class T, class Derived, class... Args&gt;
inline auto INVOKE(T Base::*pmf, Derived&amp;&amp; ref, Args&amp;&amp;... args) -&gt;
    decltype((forward&lt;Derived&gt;(ref).*pmf)(forward&lt;Args&gt;(args)...)) {
      return (forward&lt;Derived&gt;(ref).*pmf)(forward&lt;Args&gt;(args)...);
}

template &lt;class PMF, class Pointer, class... Args&gt;
inline auto INVOKE(PMF&amp;&amp; pmf, Pointer&amp;&amp; ptr, Args&amp;&amp;... args) -&gt;
    decltype(((*forward&lt;Pointer&gt;(ptr)).*forward&lt;PMF&gt;(pmf))(forward&lt;Args&gt;(args)...)) {
      return ((*forward&lt;Pointer&gt;(ptr)).*forward&lt;PMF&gt;(pmf))(forward&lt;Args&gt;(args)...);
}
} // namespace detail

// Minimal C++11 implementation:
template &lt;class&gt; struct result_of;
template &lt;class F, class... ArgTypes&gt;
struct result_of&lt;F(ArgTypes...)&gt; {
    using type = decltype(detail::INVOKE(std::declval&lt;F&gt;(), std::declval&lt;ArgTypes&gt;()...));
};

// Conforming C++14 implementation (is also a valid C++11 implementation):
namespace detail {
template &lt;typename AlwaysVoid, typename, typename...&gt;
struct invoke_result { };
template &lt;typename F, typename...Args&gt;
struct invoke_result&lt;decltype(void(detail::INVOKE(std::declval&lt;F&gt;(), std::declval&lt;Args&gt;()...))),
                 F, Args...&gt; {
    using type = decltype(detail::INVOKE(std::declval&lt;F&gt;(), std::declval&lt;Args&gt;()...));
};
} // namespace detail

template &lt;class&gt; struct result_of;
template &lt;class F, class... ArgTypes&gt;
struct result_of&lt;F(ArgTypes...)&gt; : detail::invoke_result&lt;void, F, ArgTypes...&gt; {};

template &lt;class F, class... ArgTypes&gt;
struct invoke_result : detail::invoke_result&lt;void, F, ArgTypes...&gt; {};
}}

===Notes===
As formulated in C++11, the behavior of {{tt|std::result_of}} is undefined when {{tt|INVOKE(std::declval&lt;F&gt;(), std::declval&lt;ArgTypes&gt;()...)}} is ill-formed (e.g. when F is not a callable type at all). C++14 changes that to a [[cpp/language/sfinae|SFINAE]] (when F is not callable, {{tt|std::result_of&lt;F(ArgTypes...)&gt;}} simply doesn't have the {{tt|type}} member).

The motivation behind {{tt|std::result_of}} is to determine the result of invoking a {{concept|Callable}}, in particular if that result type is different for different sets of arguments.

{{c|F(Args...)}} is a function type with {{tt|Args...}} being the argument types and {{tt|F}} being the return type. As such, {{tt|F}} cannot be a function type (but can be a reference to a function type).&lt;!-- and F can't be an array type (including array of unknown bound), and if one of Args has array type it will decay to pointer type, and Args can't contain void types unless it contain no other type than a non-dependent void, even though the specification might seem to suggest that arrays of unknown bound and void types are valid input.... --&gt;

===Examples===
{{example
 | code=
#include &lt;type_traits&gt;
#include &lt;iostream&gt;

struct S {
    double operator()(char, int&amp;);
    float operator()(int) { return 1.0;}
};

template&lt;class T&gt;
typename std::result_of&lt;T(int)&gt;::type f(T&amp; t)
{
    std::cout &lt;&lt; &quot;overload of f for callable T\n&quot;;
    return t(0);
}

template&lt;class T, class U&gt;
int f(U u)
{
    std::cout &lt;&lt; &quot;overload of f for non-callable T\n&quot;;
    return u;
}

int main()
{
    // the result of invoking S with char and int&amp; arguments is double
    std::result_of&lt;S(char, int&amp;)&gt;::type d = 3.14; // d has type double
    static_assert(std::is_same&lt;decltype(d), double&gt;::value, &quot;&quot;);

    // the result of invoking S with int argument is float
    std::result_of&lt;S(int)&gt;::type x = 3.14; // x has type float
    static_assert(std::is_same&lt;decltype(x), float&gt;::value, &quot;&quot;);

    // result_of can be used with a pointer to member function as follows
    struct C { double Func(char, int&amp;); };
    std::result_of&lt;decltype(&amp;C::Func)(C, char, int&amp;)&gt;::type g = 3.14;
    static_assert(std::is_same&lt;decltype(g), double&gt;::value, &quot;&quot;);

    f&lt;C&gt;(1); // may fail to compile in C++11; calls the non-callable overload in C++14
&lt;!-- TODO: make this work using argument deduction: f(C{}) and f(S{}) should both run --&gt;
}
 | output=
overload of f for non-callable T
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc invoke}}
{{dsc inc | cpp/types/dsc is_invocable}}
{{dsc inc | cpp/utility/dsc declval}}
{{dsc end}}

[[de:cpp/types/result of]]
[[es:cpp/types/result of]]
[[fr:cpp/types/result of]]
[[it:cpp/types/result of]]
[[ja:cpp/types/result of]]
[[pt:cpp/types/result of]]
[[ru:cpp/types/result of]]
[[zh:cpp/types/result of]]</text>
      <sha1>aqjpgzohaucc1mnkgde3n91je1lg3in</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/size t</title>
    <ns>0</ns>
    <id>3264</id>
    <revision>
      <id>88096</id>
      <parentid>81982</parentid>
      <timestamp>2016-10-30T19:56:39Z</timestamp>
      <contributor>
        <username>Chortos-2</username>
        <id>5355</id>
      </contributor>
      <comment>cstdlib and cwchar have always provided size_t (via C95)</comment>
      <text xml:space="preserve" bytes="2154">{{cpp/title|size_t}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | cstddef}}
{{dcl header | cstdio}}
{{dcl header | cstdlib}}
{{dcl header | cstring}}
{{dcl header | ctime}}
{{dcl header | cwchar}}
{{dcl |
typedef /*implementation-defined*/ size_t;
}}
{{dcl end}}

{{lc|std::size_t}} is the unsigned integer type of the result of the {{ltt|cpp/language/sizeof}} operator {{rev inl|since=c++11|as well as the {{ltt|cpp/language/sizeof...}} operator and the {{ltt|cpp/language/alignof}} operator}}. 

===Notes===
{{lc|std::size_t}} can store the maximum size of a theoretically possible object of any type (including array). {{rev inl|since=c++14|A type whose size cannot be represented by {{tt|std::size_t}} is ill-formed}} On many platforms (an exception is systems with segmented addressing)  {{lc|std::size_t}} can safely store the value of any non-member pointer, in which case it is synonymous with {{lc|std::uintptr_t}}.

{{lc|std::size_t}} is commonly used for array indexing and loop counting. Programs that use other types, such as {{c|unsigned int}}, for array indexing may fail on, e.g. 64-bit systems when the index exceeds {{lc|UINT_MAX}} or if it relies on 32-bit modular arithmetic.

When indexing C++ containers, such as {{lc|std::string}}, {{lc|std::vector}}, etc, the appropriate type is the member typedef {{c|size_type}} provided by such containers. It is usually defined as a synonym for {{lc|std::size_t}}.

===Example===
{{example
 | 
 | code=
#include &lt;cstddef&gt;
#include &lt;iostream&gt;
 
int main()
{
    const std::size_t N = 10;
    int* a = new int[N];
 
    for (std::size_t n = 0; n &lt; N; ++n)
        a[n] = n;
    for (std::size_t n = N; n-- &gt; 0;) // Reverse cycles are tricky for unsigned types.
        std::cout &lt;&lt; a[n] &lt;&lt; &quot; &quot;;
 
    delete[] a;
}
 | output=
9 8 7 6 5 4 3 2 1 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc ptrdiff_t}}
{{dsc inc | cpp/types/dsc offsetof}}
{{dsc see c | c/types/size_t}}
{{dsc end}}

[[de:cpp/types/size t]]
[[es:cpp/types/size t]]
[[fr:cpp/types/size t]]
[[it:cpp/types/size t]]
[[ja:cpp/types/size t]]
[[pt:cpp/types/size t]]
[[ru:cpp/types/size t]]
[[zh:cpp/types/size t]]</text>
      <sha1>fiz5urg1mtttzuw99tfrcmi9mco69v0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type index</title>
    <ns>0</ns>
    <id>1786</id>
    <revision>
      <id>75476</id>
      <parentid>63069</parentid>
      <timestamp>2015-01-18T14:53:08Z</timestamp>
      <contributor>
        <ip>124.166.231.149</ip>
      </contributor>
      <comment>mention the implicitly declared special member functions</comment>
      <text xml:space="preserve" bytes="2577">{{cpp/title|type_index}}
{{cpp/types/type_index/navbar}}

{{dcl begin}}
{{dcl header | typeindex}}
{{dcl | since=c++11 |
class type_index;
}}
{{dcl end}}

The {{tt|type_index}} class is a wrapper class around a {{lc|std::type_info}} object, that can be used as index in associative and unordered associative containers. The relationship with {{tt|type_info}} object is maintained through a pointer, therefore {{tt|type_index}} is {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/types/type_index/dsc constructor}}
{{dsc mem dtor | nolink=true | notes={{mark implicit}} | destroys the {{tt|type_index}} object}}
{{dsc mem fun | operator{{=}} | nolink=true | notes={{mark implicit}} | assigns a {{tt|type_index}} object }}
{{dsc inc | cpp/types/type_index/dsc operator_cmp}}
{{dsc inc | cpp/types/type_index/dsc hash_code}}
{{dsc inc | cpp/types/type_index/dsc name}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/types/type_index/dsc hash}}
{{dsc end}}

===Example===
{{example | The following program is an example of an efficient type-value mapping.
 | code=
#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;typeindex&gt;
#include &lt;unordered_map&gt;
#include &lt;string&gt;
#include &lt;memory&gt;

struct A {
    virtual ~A() {}
};

struct B : A {};
struct C : A {};

int main()
{
    std::unordered_map&lt;std::type_index, std::string&gt; type_names;

    type_names[std::type_index(typeid(int))] = &quot;int&quot;;
    type_names[std::type_index(typeid(double))] = &quot;double&quot;;
    type_names[std::type_index(typeid(A))] = &quot;A&quot;;
    type_names[std::type_index(typeid(B))] = &quot;B&quot;;
    type_names[std::type_index(typeid(C))] = &quot;C&quot;;

    int i;
    double d;
    A a;

    // note that we're storing pointer to type A
    std::unique_ptr&lt;A&gt; b(new B);
    std::unique_ptr&lt;A&gt; c(new C);

    std::cout &lt;&lt; &quot;i is &quot; &lt;&lt; type_names[std::type_index(typeid(i))] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;d is &quot; &lt;&lt; type_names[std::type_index(typeid(d))] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;a is &quot; &lt;&lt; type_names[std::type_index(typeid(a))] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b is &quot; &lt;&lt; type_names[std::type_index(typeid(*b))] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;c is &quot; &lt;&lt; type_names[std::type_index(typeid(*c))] &lt;&lt; '\n';
}
 | output=
i is int
d is double
a is A
b is B
c is C
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc type_info}}
{{dsc end}}

[[de:cpp/types/type index]]
[[es:cpp/types/type index]]
[[fr:cpp/types/type index]]
[[it:cpp/types/type index]]
[[ja:cpp/types/type index]]
[[pt:cpp/types/type index]]
[[ru:cpp/types/type index]]
[[zh:cpp/types/type index]]</text>
      <sha1>hwyrqfpu26ju4yxgsx0yp1y2b1x3w4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type index/hash</title>
    <ns>0</ns>
    <id>5545</id>
    <revision>
      <id>72078</id>
      <parentid>64262</parentid>
      <timestamp>2014-07-12T11:38:16Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="755">{{cpp/title | hash{{small|&lt;std::type_index&gt;}}}}
{{cpp/types/type_index/navbar}}
{{ddcl | header=typeindex | since=c++11 | 1=
template&lt;&gt; struct hash&lt;type_index&gt;;
}}

The template specialization of {{lc|std::hash}} for {{lc|std::type_index}} allows users to obtain hashes of objects of type {{lc|std::type_index}}.

The member {{c|operator()}} effectively returns the same value as {{lc|hash_code()}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/type_index/dsc hash_code}}
{{dsc end}}

[[de:cpp/types/type index/hash]]
[[es:cpp/types/type index/hash]]
[[fr:cpp/types/type index/hash]]
[[it:cpp/types/type index/hash]]
[[ja:cpp/types/type index/hash]]
[[pt:cpp/types/type index/hash]]
[[ru:cpp/types/type index/hash]]
[[zh:cpp/types/type index/hash]]</text>
      <sha1>rr0rdd3lgob2rbunxa6v5za724es0ih</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type index/hash code</title>
    <ns>0</ns>
    <id>2386</id>
    <revision>
      <id>91593</id>
      <parentid>64812</parentid>
      <timestamp>2017-03-31T19:51:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="930">{{cpp/types/type_index/title|hash_code}}
{{cpp/types/type_index/navbar}}
{{ddcl | since=c++11 | 1=
size_t hash_code() const;
}}

Returns the hash code of the associated {{lc|std::type_info}} object. Equivalent to calling {{l2tt|cpp/types/type_info/hash_code}} directly.

===Parameters===
(none)

===Return value===
The hash code of the associated {{c|type_info}} object.

===Exceptions===
{{rev begin}}
{{rev | until=c++14 | (none)}}
{{rev | since=c++14 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
| code=
| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/type_index/dsc hash}}
{{dsc end}}

[[de:cpp/types/type index/hash code]]
[[es:cpp/types/type index/hash code]]
[[fr:cpp/types/type index/hash code]]
[[it:cpp/types/type index/hash code]]
[[ja:cpp/types/type index/hash code]]
[[pt:cpp/types/type index/hash code]]
[[ru:cpp/types/type index/hash code]]
[[zh:cpp/types/type index/hash code]]</text>
      <sha1>7dtyp7p0viu2p5c0ut2g9hwlx47qi60</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type index/name</title>
    <ns>0</ns>
    <id>2385</id>
    <revision>
      <id>91421</id>
      <parentid>64811</parentid>
      <timestamp>2017-03-31T19:43:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="780">{{cpp/types/type_index/title|name}}
{{cpp/types/type_index/navbar}}
{{ddcl | since=c++11 | 1=
const char* name() const;
}}

Returns the name of the associated {{lc|std::type_info}} object. Equivalent to calling {{lc|std::type_info::name()}} directly.

===Parameters===
(none)

===Return value===
The name of the associated {{c|type_info}} object.

===Exceptions===
{{rev begin}}
{{rev | until=c++14 | (none)}}
{{rev | since=c++14 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
| code=
| output=
}}

[[de:cpp/types/type index/name]]
[[es:cpp/types/type index/name]]
[[fr:cpp/types/type index/name]]
[[it:cpp/types/type index/name]]
[[ja:cpp/types/type index/name]]
[[pt:cpp/types/type index/name]]
[[ru:cpp/types/type index/name]]
[[zh:cpp/types/type index/name]]</text>
      <sha1>9tidxx4e1h6u6fza8rjq5ugm6z3663i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type index/operator cmp</title>
    <ns>0</ns>
    <id>5575</id>
    <revision>
      <id>91610</id>
      <parentid>63070</parentid>
      <timestamp>2017-03-31T19:51:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1753">{{cpp/types/type_index/title|1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=}}
{{cpp/types/type_index/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
bool operator==( const type_index&amp; rhs ) const;
}}
{{dcl | since=c++11 | 1=
bool operator!=( const type_index&amp; rhs ) const;
}}
{{dcl | since=c++11 | 1=
bool operator&lt;( const type_index&amp; rhs ) const;
}}
{{dcl | since=c++11 | 1=
bool operator&lt;=( const type_index&amp; rhs ) const;
}}
{{dcl | since=c++11 | 1=
bool operator&gt;( const type_index&amp; rhs ) const;
}}
{{dcl | since=c++11 | 1=
bool operator&gt;=( const type_index&amp; rhs ) const;
}}
{{dcl end}}

Compares the underlying {{lc|std::type_info}} objects.

1-2) Checks whether the underlying {{lc|std::type_info}} objects refer to the same type.

3-6) Compares the underlying {{lc|std::type_info}} objects as defined by an implementation-defined ordering. The comparison is done by {{l2tt|cpp/types/type_info/before}}.

===Parameters===
{{par begin}}
{{par | rhs | another {{tt|type_index}} object to compare to}}
{{par end}} 

===Return value===
1) {{c|true}} if the underlying {{lc|std::type_info}} objects refer to the same type, {{c|false}} otherwise

2) {{c|true}} if the underlying {{lc|std::type_info}} objects refer not to the same type, {{c|false}} otherwise

3-6) {{c|true}} if the types referred by the underlying {{lc|std::type_info}} objects are ordered by corresponding order, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/types/type index/operator cmp]]
[[es:cpp/types/type index/operator cmp]]
[[fr:cpp/types/type index/operator cmp]]
[[it:cpp/types/type index/operator cmp]]
[[ja:cpp/types/type index/operator cmp]]
[[pt:cpp/types/type index/operator cmp]]
[[ru:cpp/types/type index/operator cmp]]
[[zh:cpp/types/type index/operator cmp]]</text>
      <sha1>dslhkxhmv8vhf7pw3m8vnoqzwg0i8yv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type index/type index</title>
    <ns>0</ns>
    <id>2383</id>
    <revision>
      <id>63494</id>
      <parentid>51591</parentid>
      <timestamp>2013-07-10T01:33:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{ddcl}} template.</comment>
      <text xml:space="preserve" bytes="650">{{cpp/types/type_index/title|type_index}}
{{cpp/types/type_index/navbar}}
{{ddcl | since=c++11 | 1=
type_index( const std::type_info&amp; info );
}}

Constructs the type index from {{lc|std::type_info}} object.

===Parameters===
{{par begin}}
{{par | info | type information object}}
{{par end}}

===Example===
{{example
| code=
| output=
}}

[[de:cpp/types/type index/type index]]
[[es:cpp/types/type index/type index]]
[[fr:cpp/types/type index/type index]]
[[it:cpp/types/type index/type index]]
[[ja:cpp/types/type index/type index]]
[[pt:cpp/types/type index/type index]]
[[ru:cpp/types/type index/type index]]
[[zh:cpp/types/type index/type index]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type info</title>
    <ns>0</ns>
    <id>1787</id>
    <revision>
      <id>59488</id>
      <parentid>51592</parentid>
      <timestamp>2013-06-01T06:36:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1343">{{cpp/title|type_info}}
{{cpp/types/type_info/navbar}}
{{dcl begin}}
{{dcl header | typeinfo}}
{{dcl |
class type_info;
}}
{{dcl end}}

The class {{tt|type_info}} holds implementation-specific information about a type, including the name of the type and means to compare two types for equality or collating order. This is the class returned by the {{ltt|cpp/language/typeid|typeid}} operator. 

The {{tt|type_info}} class is neither {{concept|CopyConstructible}} nor {{concept|CopyAssignable}}. 

===Member functions===
{{dsc begin}}
{{dsc mem ctor | nolink=true | notes={{cmark deleted}} | has neither default nor copy constructors}}
{{dsc mem vdtor | cpp/types/type_info/~type_info | derived objects are safe to delete through pointer-to-base }}
{{dsc mem fun | nolink=true | operator{{=}} | notes={{cmark deleted}} | can not be copy-assigned}}
{{dsc inc | cpp/types/type_info/dsc operator_cmp}}
{{dsc inc | cpp/types/type_info/dsc before}}
{{dsc inc | cpp/types/type_info/dsc hash_code}}
{{dsc inc | cpp/types/type_info/dsc name}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc type_index}}
{{dsc end}}

[[de:cpp/types/type info]]
[[es:cpp/types/type info]]
[[fr:cpp/types/type info]]
[[it:cpp/types/type info]]
[[ja:cpp/types/type info]]
[[pt:cpp/types/type info]]
[[ru:cpp/types/type info]]
[[zh:cpp/types/type info]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type info/before</title>
    <ns>0</ns>
    <id>2225</id>
    <revision>
      <id>90055</id>
      <parentid>87380</parentid>
      <timestamp>2017-02-04T08:49:34Z</timestamp>
      <contributor>
        <username>Gubbins</username>
        <id>3701</id>
      </contributor>
      <minor/>
      <comment>grammar/punctuation</comment>
      <text xml:space="preserve" bytes="1322">{{cpp/types/type_info/title | before}}
{{cpp/types/type_info/navbar}}
{{ddcl | 1=
bool before( const type_info&amp; rhs ) const;
}}

Returns {{c|true}} if the type of this {{c|type_info}} precedes the type of {{tt|rhs}} in the implementation's collation order. No guarantees are given; in particular, the collation order can change between the invocations of the same program.

===Parameters===
{{par begin}}
{{par | rhs | another type information object to compare to}}
{{par end}} 

===Return value===
{{c|true}} if the type of this {{c|type_info}} precedes the type of {{c|rhs}} in the implementation's collation order.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;typeinfo&gt;

int main()
{
  if(typeid(int).before(typeid(char)))
    std::cout &lt;&lt; &quot;int goes before char in this implementation.\n&quot;;
  else
    std::cout &lt;&lt; &quot;char goes before int in this implementation.\n&quot;;
}
 |p=true
 | output=
char goes before int in this implementation.
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/type_info/dsc operator_cmp}}
{{dsc end}}

[[de:cpp/types/type info/before]]
[[es:cpp/types/type info/before]]
[[fr:cpp/types/type info/before]]
[[it:cpp/types/type info/before]]
[[ja:cpp/types/type info/before]]
[[pt:cpp/types/type info/before]]
[[ru:cpp/types/type info/before]]
[[zh:cpp/types/type info/before]]</text>
      <sha1>budasucrz0jk2hdr4bl09t6bpxe66ce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type info/hash code</title>
    <ns>0</ns>
    <id>2226</id>
    <revision>
      <id>89250</id>
      <parentid>89249</parentid>
      <timestamp>2017-01-13T08:18:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Undo revision 89249 by [[Special:Contributions/174.61.228.93|174.61.228.93]] ([[User talk:174.61.228.93|talk]])</comment>
      <text xml:space="preserve" bytes="2368">{{cpp/types/type_info/title | hash_code}}
{{cpp/types/type_info/navbar}}
{{ddcl | since=c++11 | 1=
size_t hash_code() const;
}}

Returns an unspecified value, which is identical for the {{tt|type_info}} objects referring to the same type. No other guarantees are given. For example, the same value may be returned for different types. The value can also change between invocations of the same program.

===Parameters===
(none)

===Return value===
Some value, which is identical for the same types.

===Example===
{{example | The following program is an example of an efficient type-value mapping without using {{lc|std::type_index}}.
 | code=
#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;unordered_map&gt;
#include &lt;string&gt;
#include &lt;functional&gt;
#include &lt;memory&gt;

struct A {
    virtual ~A() {}
};

struct B : A {};
struct C : A {};

using TypeInfoRef = std::reference_wrapper&lt;const std::type_info&gt;;

struct Hasher {
    std::size_t operator()(TypeInfoRef code) const
    {
        return code.get().hash_code();
    }
};

struct EqualTo {
    bool operator()(TypeInfoRef lhs, TypeInfoRef rhs) const
    {
        return lhs.get() == rhs.get();
    }
};

int main()
{
    std::unordered_map&lt;TypeInfoRef, std::string, Hasher, EqualTo&gt; type_names;

    type_names[typeid(int)] = &quot;int&quot;;
    type_names[typeid(double)] = &quot;double&quot;;
    type_names[typeid(A)] = &quot;A&quot;;
    type_names[typeid(B)] = &quot;B&quot;;
    type_names[typeid(C)] = &quot;C&quot;;

    int i;
    double d;
    A a;

    // note that we're storing pointer to type A
    std::unique_ptr&lt;A&gt; b(new B);
    std::unique_ptr&lt;A&gt; c(new C);

    std::cout &lt;&lt; &quot;i is &quot; &lt;&lt; type_names[typeid(i)] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;d is &quot; &lt;&lt; type_names[typeid(d)] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;a is &quot; &lt;&lt; type_names[typeid(a)] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b is &quot; &lt;&lt; type_names[typeid(*b)] &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;c is &quot; &lt;&lt; type_names[typeid(*c)] &lt;&lt; '\n';
}
 | output=
i is int
d is double
a is A
b is B
c is C
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/type_info/dsc operator_cmp}}
{{dsc inc | cpp/types/type_info/dsc name}}
{{dsc end}}

[[de:cpp/types/type info/hash code]]
[[es:cpp/types/type info/hash code]]
[[fr:cpp/types/type info/hash code]]
[[it:cpp/types/type info/hash code]]
[[ja:cpp/types/type info/hash code]]
[[pt:cpp/types/type info/hash code]]
[[ru:cpp/types/type info/hash code]]
[[zh:cpp/types/type info/hash code]]</text>
      <sha1>3i2xmqu5yyqxm5gvupk8wcomdmthykn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type info/name</title>
    <ns>0</ns>
    <id>2227</id>
    <revision>
      <id>87051</id>
      <parentid>77865</parentid>
      <timestamp>2016-07-22T15:29:08Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>linked abi::__cxa_demangle and boost::core::demangle in Notes</comment>
      <text xml:space="preserve" bytes="1699">{{cpp/types/type_info/title | name}}
{{cpp/types/type_info/navbar}}
{{ddcl | 1=
const char* name() const;
}}

Returns an implementation defined null-terminated character string containing the name of the type. No guarantees are given, in particular, the returned string can be identical for several types and change between invocations of the same program.

===Parameters===
(none)

===Return value===
null-terminated character string containing the name of the type.

===Notes===
Some implementations (such as MSVC, IBM, Oracle) produce a human-readable type name. Others, most notably gcc and clang, return the mangled name. The mangled name can be converted to human-readable form using implementation-specific API such as [https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html abi::__cxa_demangle] directly or through [http://www.boost.org/doc/libs/release/libs/core/doc/html/core/demangle.html boost::core::demangle]. Then can also be piped through the commandline utility {{tt|c++filt -t}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;typeinfo&gt;

struct Base { virtual ~Base() = default; };
struct Derived : Base {};

int main() {
	Base b1;
	Derived d1;

	const Base *pb = &amp;b1;
	std::cout &lt;&lt; typeid(*pb).name() &lt;&lt; '\n';
	pb = &amp;d1;
	std::cout &lt;&lt; typeid(*pb).name() &lt;&lt; '\n';
}
 | p=true
 | output=
4Base
7Derived
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/type_info/dsc hash_code}}
{{dsc end}}

[[de:cpp/types/type info/name]]
[[es:cpp/types/type info/name]]
[[fr:cpp/types/type info/name]]
[[it:cpp/types/type info/name]]
[[ja:cpp/types/type info/name]]
[[pt:cpp/types/type info/name]]
[[ru:cpp/types/type info/name]]
[[zh:cpp/types/type info/name]]</text>
      <sha1>2ji59yxirppvi7l20bdczbh43rm615u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type info/operator cmp</title>
    <ns>0</ns>
    <id>2223</id>
    <revision>
      <id>59494</id>
      <parentid>51596</parentid>
      <timestamp>2013-06-01T06:36:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1830">{{cpp/types/type_info/title | operator{{==}} | operator!{{=}}}}
{{cpp/types/type_info/navbar}}
{{dcl begin}}
{{dcl | 1=
bool operator==( const type_info&amp; rhs ) const;
}}
{{dcl | 1=
bool operator!=( const type_info&amp; rhs ) const;
}}
{{dcl end}}

Checks if the objects refer to the same types.

===Parameters===
{{par begin}}
{{par | rhs | another type information object to compare to}}
{{par end}} 

===Return value===
{{c|true}} if the comparison operation holds true, {{c|false}} otherwise

===Example===
{{example
 | code=

#include &lt;iostream&gt;
#include &lt;typeinfo&gt;
#include &lt;string&gt;
#include &lt;utility&gt;

class person
{
  public:

   person(std::string&amp;&amp; n) : _name(n) {}
   virtual const std::string&amp; name() const{ return _name; }

  private:

    std::string _name;
};

class employee : public person
{
   public:

     employee(std::string&amp;&amp; n, std::string&amp;&amp; p) :
         person(std::move(n)), _profession(std::move(p)) {}

     const std::string&amp; profession() const { return _profession; }

   private:

     std::string _profession;
};

void somefunc(const person&amp; p)
{
   if(typeid(employee) == typeid(p))
   {
      std::cout &lt;&lt; p.name() &lt;&lt; &quot; is an employee &quot;;
      auto&amp; emp = dynamic_cast&lt;const employee&amp;&gt;(p);
      std::cout &lt;&lt; &quot;who works in &quot; &lt;&lt; emp.profession() &lt;&lt; '\n';
   }
}

int main()
{
   employee paul(&quot;Paul&quot;,&quot;Economics&quot;);
   somefunc(paul);
}
 | output= Paul is an employee who works in Economics


}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/type_info/dsc before}}
{{dsc end}}

[[de:cpp/types/type info/operator cmp]]
[[es:cpp/types/type info/operator cmp]]
[[fr:cpp/types/type info/operator cmp]]
[[it:cpp/types/type info/operator cmp]]
[[ja:cpp/types/type info/operator cmp]]
[[pt:cpp/types/type info/operator cmp]]
[[ru:cpp/types/type info/operator cmp]]
[[zh:cpp/types/type info/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type info/operator comp</title>
    <ns>0</ns>
    <id>4216</id>
    <redirect title="cpp/types/type info/operator cmp" />
    <revision>
      <id>15273</id>
      <timestamp>2011-12-08T01:21:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/types/type info/operator comp]] to [[cpp/types/type info/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="46">#REDIRECT [[cpp/types/type info/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/type info/~type info</title>
    <ns>0</ns>
    <id>3278</id>
    <revision>
      <id>87243</id>
      <parentid>87242</parentid>
      <timestamp>2016-08-04T18:18:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 87242 by [[Special:Contributions/Egortech|Egortech]] ([[User talk:Egortech|talk]]) wrong wiki and wrong member (&quot;Пол рабочий&quot;  needs a dash, btw)</comment>
      <text xml:space="preserve" bytes="642">{{cpp/types/type_info/title|~type_info}}
{{cpp/types/type_info/navbar}}
{{dcl begin}}
{{dcl | 1=
virtual ~type_info();
}}
{{dcl end}}

Destructs an object of type {{lc|std::type_info}}. This destructor is public virtual, allowing objects of classes, derived from {{lc|std::type_info}} to be safely deleted through pointers to base class.

[[de:cpp/types/type info/~type info]]
[[es:cpp/types/type info/~type info]]
[[fr:cpp/types/type info/~type info]]
[[it:cpp/types/type info/~type info]]
[[ja:cpp/types/type info/~type info]]
[[pt:cpp/types/type info/~type info]]
[[ru:cpp/types/type info/~type info]]
[[zh:cpp/types/type info/~type info]]</text>
      <sha1>lzji8bqseg5a7mdhnwjs5slr6xyg2dz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/underlying type</title>
    <ns>0</ns>
    <id>3252</id>
    <revision>
      <id>85264</id>
      <parentid>85263</parentid>
      <timestamp>2016-04-12T20:59:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Defect reports */</comment>
      <text xml:space="preserve" bytes="2054">{{cpp/title|underlying_type}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct underlying_type;
}}
{{dcl end}}

If {{tt|T}} is a complete enumeration type, provides a member typedef {{tt|type}} that names the underlying type of {{tt|T}}.

Otherwise, the behavior is undefined.

===Member types===
{{dsc begin}}
{{dsc hitem | Name | Definition}}
{{dsc | {{tt|type}} | the underlying type of {{tt|T}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template&lt; class T &gt;
using underlying_type_t = typename underlying_type&lt;T&gt;::type;
}}
{{dcl end}}

===Notes===
Each [[cpp/language/enum|enumeration type]] has an ''underlying type'', which can be

1. Specified explicitly (both scoped and unscoped enumerations)

2. Omitted, in which case it is {{c|int}} for scoped enumerations or an implementation-defined integral type capable of representing all values of the enum (for unscoped enumerations)

=== Defect reports ===
{{dr list begin}}
{{dr list item|wg=lwg|dr=2396|std=C++11|before=incomplete enumeration types were allowed|after=complete enumeration type required}}
{{dr list end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;

enum e1 {};
enum class e2: int {};

int main() {
    bool e1_type = std::is_same&lt;
        unsigned
       ,typename std::underlying_type&lt;e1&gt;::type
    &gt;::value; 

    bool e2_type = std::is_same&lt;
        int
       ,typename std::underlying_type&lt;e2&gt;::type
    &gt;::value;
   
    std::cout
    &lt;&lt; &quot;underlying type for 'e1' is &quot; &lt;&lt; (e1_type?&quot;unsigned&quot;:&quot;non-unsigned&quot;) &lt;&lt; '\n'
    &lt;&lt; &quot;underlying type for 'e2' is &quot; &lt;&lt; (e2_type?&quot;int&quot;:&quot;non-int&quot;) &lt;&lt; '\n';
}

 | output=
underlying type for 'e1' is unsigned
underlying type for 'e2' is int
}}

[[de:cpp/types/underlying type]]
[[es:cpp/types/underlying type]]
[[fr:cpp/types/underlying type]]
[[it:cpp/types/underlying type]]
[[ja:cpp/types/underlying type]]
[[pt:cpp/types/underlying type]]
[[ru:cpp/types/underlying type]]
[[zh:cpp/types/underlying type]]</text>
      <sha1>fesebp9olpel8nhbyc9hi25ijojf0hv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/types/void t</title>
    <ns>0</ns>
    <id>14120</id>
    <revision>
      <id>89901</id>
      <parentid>80445</parentid>
      <timestamp>2017-01-29T01:55:30Z</timestamp>
      <contributor>
        <username>Nilsdeppe</username>
        <id>6346</id>
      </contributor>
      <text xml:space="preserve" bytes="2591">{{cpp/title|void_t}}
{{cpp/types/navbar}}
{{dcl begin}}
{{dcl header | type_traits}}
{{dcl | since=c++17 |
template&lt; class... &gt;
using void_t {{=}} void;
}}
{{dcl end}}

Utility metafunction that maps a sequence of any types to the type {{c|void}}

===Notes===
This metafunction is used in template metaprogramming to detect ill-formed types in SFINAE context:
{{source|1=
// primary template handles types that have no nested ::type member:
template&lt; class, class = std::void_t&lt;&gt; &gt;
struct has_type_member : std::false_type { };

// specialization recognizes types that do have a nested ::type member:
template&lt; class T &gt;
struct has_type_member&lt;T, std::void_t&lt;typename T::type&gt;&gt; : std::true_type { };
}}

It can also be used to detect validity of an expression:
{{source|1=
// primary template handles types that do not support pre-increment:
template&lt; class, class = std::void_t&lt;&gt; &gt;
struct has_pre_increment_member : std::false_type { };
// specialization recognizes types that do support pre-increment:
template&lt; class T &gt;
struct has_pre_increment_member&lt;T,
           std::void_t&lt;decltype( ++std::declval&lt;T&amp;&gt;() )&gt;
       &gt; : std::true_type { };
}}

Until [http://open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1558 CWG 1558] (a C++14 defect), unused parameters in [[cpp/language/type alias|alias templates]] were not guaranteed to ensure SFINAE and could be ignored, so earlier compilers require a more complex definition of {{tt|void_t}}, such as
{{source|1=
template&lt;typename... Ts&gt; struct make_void { typedef void type;};
template&lt;typename... Ts&gt; using void_t = typename make_void&lt;Ts...&gt;::type;
}}

===Examples===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;vector&gt;
#include &lt;map&gt;

class A {};

template &lt;typename T, typename = void&gt;
struct is_iterable : std::false_type {};
template &lt;typename T&gt;
struct is_iterable&lt;T, std::void_t&lt;decltype(std::declval&lt;T&gt;().begin()),
                                  decltype(std::declval&lt;T&gt;().end())&gt;&gt;
    : std::true_type {};

int main()
{
    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; is_iterable&lt;std::vector&lt;double&gt;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; is_iterable&lt;std::map&lt;int, double&gt;&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; is_iterable&lt;double&gt;::value &lt;&lt; '\n';
    std::cout &lt;&lt; is_iterable&lt;A&gt;::value &lt;&lt; '\n';
}
 | output=
true
true
false
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc enable_if}}
{{dsc end}}

[[de:cpp/types/void_t]]
[[es:cpp/types/void_t]]
[[fr:cpp/types/void_t]]
[[it:cpp/types/void_t]]
[[ja:cpp/types/void_t]]
[[pt:cpp/types/void_t]]
[[ru:cpp/types/void_t]]
[[zh:cpp/types/void_t]]</text>
      <sha1>ee648pncvnja8w0h6xckwg4vxzlwqfi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility</title>
    <ns>0</ns>
    <id>1775</id>
    <revision>
      <id>88332</id>
      <parentid>88260</parentid>
      <timestamp>2016-11-16T17:20:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0504r0 kills in_place_tag</comment>
      <text xml:space="preserve" bytes="4482">{{title|Utility library}}
{{cpp/utility/navbar}}

C++ includes a variety of utility libraries that provide functionality ranging from [[cpp/utility/bitset|bit-counting]] to [[cpp/utility/functional/bind|partial function application]]. These libraries can be broadly divided into two groups: 

* language support libraries, and
* general-purpose libraries.

==Language support==

Language support libraries provide classes and functions that interact closely with language features and support common language idioms.

===[[cpp/types|Type support]]===

Basic types (e.g. {{lc|std::size_t}}, {{lc|std::nullptr_t}}), RTTI (e.g. {{lc|std::type_info}}), type traits (e.g. {{lc|std::is_integral}}, {{lc|std::rank}})

===[[cpp/memory|Dynamic memory management]]===

Smart pointers (e.g. {{lc|std::shared_ptr}}), allocators (e.g. {{lc|std::allocator}} or {{lc|std::memory_resource}}), C-style memory management (e.g. {{lc|std::malloc}})

===[[cpp/error|Error handling]]===

Exceptions (e.g. {{lc|std::exception}}, {{lc|std::logic_error}}), assertions (e.g. {{lc|assert}})

===Initializer lists===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc initializer_list}}
{{dsc end}}

===[[cpp/utility/variadic|Variadic functions]]===

Support for functions that take an arbitrary number of parameters (via e.g. {{lc|va_start}}, {{lc|va_arg}}, {{lc|va_end}})


==General-purpose utilities==

===[[cpp/utility/program | Program utilities]]===

Termination (e.g. {{lc|std::abort}}, {{lc|std::atexit}}), environment (e.g. {{lc|std::system}}), signals (e.g. {{lc|std::raise}})

===[[cpp/chrono|Date and time]]===

Time tracking (e.g. {{lc|std::chrono::time_point}}, {{lc|std::chrono::duration}}), C-style date and time (e.g. {{lc|std::time}}, {{lc|std::clock}})

===Bitset===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc bitset}}
{{dsc end}}

===[[cpp/utility/functional|Function objects]]===

Partial function application (e.g. {{lc|std::bind}}) and related utilities: utilities for binding such as {{lc|std::ref}}  and {{lc|std::placeholders}}, polymorphic function wrappers: {{lc|std::function}}, predefined functors (e.g. {{lc|std::plus}}, {{lc|std::equal_to}}), method to function converters {{lc|std::mem_fn}}. 

===optional, variant and any===
{{dsc begin}}
{{dsc header|optional}}
{{dsc inc | cpp/utility/dsc optional}}
{{dsc header|variant}}
{{dsc inc | cpp/utility/dsc variant}}
{{dsc header|any}}
{{dsc inc | cpp/utility/dsc any}}
{{dsc header|utility}}
{{dsc inc | cpp/utility/dsc in_place}}
{{dsc end}}

===Pairs and tuples===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc pair}}
{{dsc inc | cpp/utility/dsc tuple}}
{{dsc inc | cpp/utility/dsc apply}}
{{dsc inc | cpp/utility/dsc make_from_tuple}}
{{dsc inc | cpp/utility/dsc piecewise_construct_t}}
{{dsc inc | cpp/utility/dsc piecewise_construct}}
{{dsc inc | cpp/utility/dsc integer_sequence}}
{{dsc end}}

===Swap, forward and move===

{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/utility/dsc exchange}}
{{dsc inc | cpp/utility/dsc forward}}
{{dsc inc | cpp/utility/dsc move}}
{{dsc inc | cpp/utility/dsc move_if_noexcept}}
{{dsc end}}

===Type operations===
{{dsc begin}}
{{dsc header|utility}}
{{dsc inc | cpp/utility/dsc declval}}
{{dsc inc | cpp/utility/dsc as_const}}
{{dsc header|new}}
{{dsc inc | cpp/utility/dsc launder}}
{{dsc end}}

===Relational operators===

{{dsc begin}}
{{dsc header|utility}}
{{dsc namespace | std::rel_ops }}
{{dsc inc | cpp/utility/rel_ops/dsc operator_cmp}}
{{dsc end}}

===Elementary string conversions===
In addition to sophisticated locale-dependent parsers and formatters provided by the [[cpp/io|C++ I/O]] library, the [[cpp/io/c|C I/O]] library, [[cpp/string/basic_string#Numeric_conversions|C++ string converters]], and [[cpp/string/byte#Conversions_to_numeric_formats|C string converters]], the header {{tt|&lt;utility&gt;}} provides light-weight, locale-independent, non-allocating, non-throwing, ASCII-only parsers and formatters for arithmetic types.
{{dsc begin}}
{{dsc inc | cpp/utility/dsc to_chars}} &lt;!-- including to_chars_result  --&gt;
{{dsc inc | cpp/utility/dsc from_chars}} &lt;!-- including from_chars_result --&gt;
{{dsc inc | cpp/utility/dsc chars_format}}
{{dsc end}}

===Hash support===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[ar:cpp/utility]]
[[cs:cpp/utility]]
[[de:cpp/utility]]
[[es:cpp/utility]]
[[fr:cpp/utility]]
[[it:cpp/utility]]
[[ja:cpp/utility]]
[[ko:cpp/utility]]
[[pl:cpp/utility]]
[[pt:cpp/utility]]
[[ru:cpp/utility]]
[[zh:cpp/utility]]</text>
      <sha1>kxoei8q1wnfh27sxku9xlxum9kg7sk5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any</title>
    <ns>0</ns>
    <id>14834</id>
    <revision>
      <id>89625</id>
      <parentid>87518</parentid>
      <timestamp>2017-01-22T21:21:30Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1595">{{cpp/title|any}}
{{cpp/utility/any/navbar}}
{{ddcl | header=any | since=c++17 |
class any;
}}

The class {{tt|any}} describes a type-safe container for single values of any type.

@1@ An object of class {{tt|any}} stores an instance of any type that satisfies the constructor requirements or is empty, and this is referred to as the ''state'' of the class {{tt|any}} object. The stored instance is called the contained object. Two states are equivalent if they are either both empty or if both are not empty and if the contained objects are equivalent.

@2@ The non-member {{tt|any_cast}} functions provide type-safe access to the contained object.

Implementations are encouraged to avoid dynamic allocations for small objects, but such an optimization may only be applied to types for which {{lc|std::is_nothrow_move_constructible}} returns {{tt|true}}.

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc constructor}}
{{dsc inc | cpp/utility/any/dsc operator{{=}}}}
{{dsc inc | cpp/utility/any/dsc destructor}}

{{dsc h2 | Modifers}}
{{dsc inc | cpp/utility/any/dsc emplace}}
{{dsc inc | cpp/utility/any/dsc reset}}
{{dsc inc | cpp/utility/any/dsc swap}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/utility/any/dsc has_value}}
{{dsc inc | cpp/utility/any/dsc type}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc swap2}}
{{dsc inc | cpp/utility/any/dsc any_cast}}
{{dsc inc | cpp/utility/any/dsc make_any}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc bad_any_cast}}
{{dsc end}}

[[zh:cpp/utility/any]]</text>
      <sha1>24cbpbtd4j96844z06mnmltzfqmyvsu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/any</title>
    <ns>0</ns>
    <id>14839</id>
    <revision>
      <id>91720</id>
      <parentid>91264</parentid>
      <timestamp>2017-03-31T19:55:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3791">{{cpp/any/title|any}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
constexpr any();
}}
{{dcl | num=2 | since=c++17 |
any( const any&amp; other );
}}
{{dcl | num=3 | since=c++17 |
any( any&amp;&amp; other );
}}
{{dcl | num=4 | since=c++17 |
template&lt; class ValueType &gt;
any( ValueType&amp;&amp; value );
}}
{{dcl | num=5 | since=c++17 |
template&lt; class ValueType, class... Args &gt;
explicit any( std::in_place_type_t&lt;ValueType&gt;, Args&amp;&amp;... args );
}}
{{dcl | num=6 | since=c++17 |
template&lt; class T, class U, class... Args &gt;
explicit any( std::in_place_type_t&lt;ValueType&gt;, std::initializer_list&lt;U&gt; il,
              Args&amp;&amp;... args );
}}


{{dcl end}}

Constructs a new {{tt|any}} object.

@1@ Constructs an empty object.

@2-3@ Copies {{v|2}} or moves {{v|3}} content of {{tt|other}} into a new instance, so that any content is equivalent in both type and value to those of {{tt|other}} prior to the constructor call, or empty if {{tt|other}} is empty. Formally,
:@2@ If {{tt|other}} is empty, the constructed object is empty. Otherwise, equivalent to {{c|any(std::in_place&lt;T&gt;, std::any_cast&lt;const T&amp;&gt;(other))}}, where {{tt|T}} is the type of the object contained in {{tt|other}}. 
:@3@ If {{tt|other}} is empty, the constructed object is empty. Otherwise, the constructed object contains either the object contained in {{tt|other}}, or an object of the same type constructed from the object contained in {{tt|other}}, considering that object as an rvalue. 
@4@ Constructs an object with initial content an object of type {{c|std::decay_t&lt;ValueType&gt;}}, [[cpp/language/direct initialization|direct-initialized]] from {{c|std::forward&lt;ValueType&gt;(value)}}. If {{c|1=std::is_copy_constructible&lt;std::decay_t&lt;ValueType&gt;&gt;::value}} is {{c|false}}, the program is ill-formed. {{cpp/enable if|{{c|std::decay_t&lt;ValueType&gt;}} is not the same type as {{c|any}} nor a specialization of {{lc|std::in_place_type_t}}, and {{c|std::is_copy_constructible_v&lt;std::decay_t&lt;ValueType&gt;&gt;}} is {{c|true}}}}.

@5@ Constructs an object with initial content an object of type {{tt|std::decay_t&lt;ValueType&gt;}}, [[cpp/language/direct initialization|direct-non-list-initialized]] from {{c|std::forward&lt;Args&gt;(args)...}}. {{cpp/enable_if|{{c|1=std::is_constructible_v&lt;std::decay_t&lt;ValueType&gt;, Args...&gt;}} and {{c|std::is_copy_constructible_v&lt;std::decay_t&lt;ValueType&gt;&gt;}} are both {{c|true}}}}.

@6@ Constructs an object with initial content an object of type {{tt|std::decay_t&lt;ValueType&gt;}}, [[cpp/language/direct initialization|direct-non-list-initialized]] from {{c|il, std::forward&lt;Args&gt;(args)...}}. {{cpp/enable if|{{c|1=std::is_constructible_v&lt;std::decay_t&lt;ValueType&gt;, std::initializer_list&lt;U&gt;&amp;, Args...&gt;}} and {{c|std::is_copy_constructible_v&lt;std::decay_t&lt;ValueType&gt;&gt;}} are both {{c|true}}}}. 

===Template parameters===
{{par begin}}
{{par | ValueType | contained value type}}
{{par hreq}}
{{par req concept | std::decay_t&lt;ValueType&gt; | CopyConstructible}}
{{par end}}

===Parameters===
{{par begin}}
{{par | other | another {{tt|any}} object to copy or move from}}
{{par | value | value to initialize the contained value with}}
{{par | il, args | arguments to be passed to the constructor of the contained object}}
{{par end}}

===Exceptions===
@1,3@ {{unreviewed noexcept}}
@2,4,5,6@ Throws any exception thrown by the constructor of the contained type.

===Notes===
Because the default constructor is {{tt|constexpr}}, static {{tt|std::any}}s are initialized as part of [[cpp/language/initialization#Non-local_variables|static non-local initialization]], before any dynamic non-local initialization begins. This makes it safe to use an object of type {{tt|std::any}} in a constructor of any static object.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc operator{{=}}}}
{{dsc end}}

[[zh:cpp/utility/any/any]]</text>
      <sha1>exwpvwz7mup1ksxp42j7iark0418hui</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/any cast</title>
    <ns>0</ns>
    <id>14856</id>
    <revision>
      <id>91917</id>
      <parentid>91259</parentid>
      <timestamp>2017-03-31T20:01:44Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1707">{{cpp/title|any_cast}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 |
template&lt;class ValueType&gt;
    ValueType any_cast(const any&amp; operand);
}}
{{dcl | since=c++17 | num=2 |
template&lt;class ValueType&gt;
    ValueType any_cast(any&amp; operand);
}}
{{dcl | since=c++17 | num=3 |
template&lt;class ValueType&gt;
    ValueType any_cast(any&amp;&amp; operand);
}}
{{dcl | since=c++17 | num=4 |
template&lt;class ValueType&gt;
    const ValueType* any_cast(const any* operand);
}}
{{dcl | since=c++17 | num=5 |
template&lt;class ValueType&gt;
    ValueType* any_cast(any* operand);
}}
{{dcl end}}

Performs type-safe access to the contained object.

Let {{tt|U}} be {{c|std::remove_cv_t&lt;std::remove_reference_t&lt;ValueType&gt;&gt;}}.

@1@ The program is ill-formed if {{c|is_constructible_v&lt;ValueType, const U&amp;&gt;}} is not {{c|true}}.
@2@ The program is ill-formed if {{c|is_constructible_v&lt;ValueType, U&amp;&gt;}} is not {{c|true}}.
@3@ The program is ill-formed if {{c|is_constructible_v&lt;ValueType, U&gt;}} is not {{c|true}}.

===Parameters===
{{par begin}}
{{par | operand | target {{tt|any}} object}}
{{par end}} 

===Return value===
@1-2@ Returns {{c|static_cast&lt;ValueType&gt;(*std::any_cast&lt;U&gt;(&amp;operand))}}
@3@ Returns {{c|static_cast&lt;ValueType&gt;(std::move(*std::any_cast&lt;U&gt;(&amp;operand)))}}.
@4-5@ If {{tt|operand}} is not a null pointer, and the {{tt|typeid}} of the requested {{tt|ValueType}} matches that of the contents of {{tt|operand}}, a pointer to the value contained by operand, otherwise a null pointer.

===Exceptions===
@1-3@ Throws {{lc|std::bad_any_cast}} if the {{tt|typeid}} of the requested {{tt|ValueType}} does not match that of the contents of {{tt|operand}}.
@4-5@ {{unreviewed noexcept}}

[[zh:cpp/utility/any/any_cast]]</text>
      <sha1>2lbprvxmxl5ey3bunxhhe1441vbn6ug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/bad any cast</title>
    <ns>0</ns>
    <id>14858</id>
    <revision>
      <id>89627</id>
      <parentid>84143</parentid>
      <timestamp>2017-01-22T21:30:00Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="309">{{cpp/title|bad_any_cast}}
{{cpp/utility/any/navbar}}
{{ddcl | header=any | since=c++17 |
class bad_any_cast : public std::bad_cast;
}}

Defines a type of object to be thrown by the value-returning forms of {{lc|std::any_cast}} on failure.

{{cpp/error/exception/inherit}}

[[zh:cpp/utility/any/bad_any_cast]]</text>
      <sha1>iurzkl95tlckksi4fjm2nnubpun755h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/clear</title>
    <ns>0</ns>
    <id>15596</id>
    <redirect title="cpp/utility/any/reset" />
    <revision>
      <id>86665</id>
      <timestamp>2016-07-09T05:19:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[cpp/utility/any/clear]] to [[cpp/utility/any/reset]]: Renamed</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/utility/any/reset]]</text>
      <sha1>mvq0dac8de3pviaaakr4508rdrs8kax</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/emplace</title>
    <ns>0</ns>
    <id>15602</id>
    <revision>
      <id>91289</id>
      <parentid>89639</parentid>
      <timestamp>2017-03-30T22:18:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2857</comment>
      <text xml:space="preserve" bytes="1963">{{cpp/any/title|emplace}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template&lt; class ValueType, class... Args &gt;
std::decay_t&lt;ValueType&gt;&amp; emplace( Args&amp;&amp;... args );
}}
{{dcl | num=2 | since=c++17 |
template&lt; class ValueType, class U, class... Args &gt;
std::decay_t&lt;ValueType&gt;&amp; emplace( std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args );
}}
{{dcl end}}

Changes the contained object to one of type {{c|std::decay_t&lt;ValueType&gt;}} constructed from the arguments.

First destroys the current contained object (if any) by {{lc|reset|reset()}}, then:

@1@ constructs an object of type {{c|std::decay_t&lt;ValueType&gt;}}, [[cpp/language/direct initialization|direct-non-list-initialized]] from {{c|std::forward&lt;Args&gt;(args)...}}, as the contained object. {{cpp/enable if|{{c|1=std::is_constructible_v&lt;std::decay_t&lt;ValueType&gt;, Args...&gt;}} and {{c|std::is_copy_constructible_v&lt;std::decay_t&lt;ValueType&gt;&gt;}} are both {{c|true}}}}.

@2@ constructs an object of type {{c|std::decay_t&lt;ValueType&gt;}}, [[cpp/language/direct initialization|direct-non-list-initialized]] from {{c|il, std::forward&lt;Args&gt;(args)...}}, as the contained object. {{cpp/enable if|{{c|1=std::is_constructible_v&lt;std::decay_t&lt;ValueType&gt;, std::initializer_list&lt;U&gt;&amp;, Args...&gt;}} and {{c|std::is_copy_constructible_v&lt;std::decay_t&lt;ValueType&gt;&gt;}} are both {{c|true}}}}. 

===Template parameters===
{{par begin}}
{{par | ValueType | contained value type}}
{{par hreq}}
{{par req concept | std::decay_t&lt;ValueType&gt; | CopyConstructible}}
{{par end}}

=== Return value ===
A reference to the new contained object.

=== Exceptions ===
Throws any exception thrown by {{tt|T}}'s constructor. If an exception is thrown, the previously contained object (if any) has been destroyed, and {{tt|*this}} does not contain a value.

=== Example ===
{{example}}

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc constructor}}
{{dsc inc | cpp/utility/any/dsc reset}}
{{dsc end}}

[[zh:cpp/utility/any/emplace]]</text>
      <sha1>hvg0k1iuds4up7ut2mvvctddwwvvtvi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/empty</title>
    <ns>0</ns>
    <id>15597</id>
    <redirect title="cpp/utility/any/has value" />
    <revision>
      <id>86668</id>
      <timestamp>2016-07-09T05:20:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>T. Canens moved page [[cpp/utility/any/empty]] to [[cpp/utility/any/has value]]: renamed</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/utility/any/has value]]</text>
      <sha1>h95ylkq89iuwx1hbr3vh8nmp4p4dl7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/has value</title>
    <ns>0</ns>
    <id>14848</id>
    <revision>
      <id>91594</id>
      <parentid>89636</parentid>
      <timestamp>2017-03-31T19:51:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="359">{{cpp/any/title|has_value}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
bool has_value() const;
}}
{{dcl end}}

Checks whether the object contains a value.

===Parameters===
(none)

===Return value===
{{c|true}} if instance contains a value, otherwise {{c|false}}.

===Exceptions===
{{unreviewed noexcept}}

[[zh:cpp/utility/any/has_value]]</text>
      <sha1>jfyzk379cew6rhtg214onndnmnh1eij</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/make any</title>
    <ns>0</ns>
    <id>15603</id>
    <revision>
      <id>89638</id>
      <parentid>88330</parentid>
      <timestamp>2017-01-23T04:16:41Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="769">{{cpp/title|make_any}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 |
template&lt; class T, class... Args &gt;
std::any make_any( Args&amp;&amp;... args );
}}
{{dcl | num=2 | since=c++17 |
template&lt; class T, class U, class... Args &gt;
std::any make_any( std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args );
}}
{{dcl end}}

Constructs an {{tt|any}} object containing an object of type {{tt|T}}, passing the provided arguments to {{tt|T}}'s constructor.

@1@ Equivalent to {{c|return std::any(std::in_place_type&lt;T&gt;, std::forward&lt;Args&gt;(args)...); }}
@2@ Equivalent to {{c|return std::any(std::in_place_type&lt;T&gt;, il, std::forward&lt;Args&gt;(args)...); }}

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc constructor}}
{{dsc end}}

[[zh:cpp/utility/any/make_any]]</text>
      <sha1>k3vylfzgfjr323wd0vj3152xrokokh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/operator=</title>
    <ns>0</ns>
    <id>14841</id>
    <revision>
      <id>91721</id>
      <parentid>89635</parentid>
      <timestamp>2017-03-31T19:55:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1541">{{cpp/any/title|operator{{=}}}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
any&amp; operator=( const any&amp; rhs );
}}
{{dcl | since=c++17 | num=2 | 1=
any&amp; operator=( any&amp;&amp; rhs );
}}
{{dcl | since=c++17 | num=3 | 1=
template&lt;typename ValueType&gt;
    any&amp; operator=( ValueType&amp;&amp; rhs );
}}
{{dcl end}}

Assigns contents to the contained value. 

@1@ Assigns by copying the state of {{tt|rhs}}, as if by {{c|any(rhs).swap(*this)}}.
@2@ Assigns by moving the state of {{tt|rhs}}, as if by {{c|any(std::move(rhs)).swap(*this)}}. {{tt|rhs}} is left in a valid but unspecified state after the assignment.
@3@ Assigns the type and value of {{tt|rhs}}, as if by {{c|any(std::forward&lt;ValueType&gt;(rhs)).swap(*this)}}. {{cpp/enable if|{{c|std::decay_t&lt;ValueType&gt;}} is not the same type as {{c|any}} and {{c|std::is_copy_constructible_v&lt;std::decay_t&lt;ValueType&gt;&gt;}} is {{c|true}}. }}.

===Template parameters===
{{par begin}}
{{par | ValueType | contained value type}}
{{par hreq}}
{{par req concept | std::decay_t&lt;ValueType&gt; | CopyConstructible}}
{{par end}}

===Parameters===
{{par begin}}
{{par | rhs | object whose contained value to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@2@ {{unreviewed noexcept}}

@1,3@ Throws {{lc|bad_alloc}} or any exception thrown by the constructor of the contained type. If an exception is thrown, there are no effects (strong exception guarantee).

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc constructor}}
{{dsc end}}

[[zh:cpp/utility/any/operator=]]</text>
      <sha1>43st04xlhogp0pavd5ok042ysb4m92d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/reset</title>
    <ns>0</ns>
    <id>14846</id>
    <revision>
      <id>91697</id>
      <parentid>89634</parentid>
      <timestamp>2017-03-31T19:55:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="285">{{cpp/any/title|reset}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
void reset();
}}
{{dcl end}}

If not empty, destroys the contained object.

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[zh:cpp/utility/any/reset]]</text>
      <sha1>dvwg9p4p0qv0tmjivvt65kcklj61c3o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/swap</title>
    <ns>0</ns>
    <id>14852</id>
    <revision>
      <id>91665</id>
      <parentid>89632</parentid>
      <timestamp>2017-03-31T19:53:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="349">{{cpp/any/title|swap}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
void swap(any&amp; other);
}}
{{dcl end}}

Swaps the content of two {{tt|any}} objects.

===Parameters===
{{par begin}}
{{par | other | object to swap with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[zh:cpp/utility/any/swap]]</text>
      <sha1>4i5xyhetyp0710trww7zvcxj0l8eau0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/swap2</title>
    <ns>0</ns>
    <id>14854</id>
    <revision>
      <id>91693</id>
      <parentid>89631</parentid>
      <timestamp>2017-03-31T19:55:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="548">{{cpp/title|swap{{small|(std::any)}}}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
void swap(any&amp; lhs, any&amp; rhs);
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::any}}. Swaps the content of two {{tt|any}} objects by calling {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | objects to swap}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc swap}}
{{dsc end}}

[[zh:cpp/utility/any/swap2]]</text>
      <sha1>je2tw42wjweqi3a27b2iolnina44dvw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/type</title>
    <ns>0</ns>
    <id>14850</id>
    <revision>
      <id>91718</id>
      <parentid>89637</parentid>
      <timestamp>2017-03-31T19:55:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="373">{{cpp/any/title|type}}
{{cpp/utility/any/navbar}}
{{dcl begin}}
{{dcl | since=c++17 |
const type_info&amp; type() const;
}}
{{dcl end}}

Queries the contained type.

===Parameters===
(none)

===Return value===
The {{tt|typeid}} of the contained value if instance is non-empty, otherwise {{c|typeid(void)}}.

===Exceptions===
{{unreviewed noexcept}}

[[zh:cpp/utility/any/type]]</text>
      <sha1>dkl1gm9pp5dhty435cqjy1f9vb9j238</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/any/~any</title>
    <ns>0</ns>
    <id>14844</id>
    <revision>
      <id>89629</id>
      <parentid>87908</parentid>
      <timestamp>2017-01-22T21:55:21Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="270">{{cpp/any/title|~any}}
{{cpp/utility/any/navbar}}
{{ddcl | since=c++17 |
~any();
}}
Destroys the contained object, if any, as if by a call to {{tt|reset()}}.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/any/dsc clear}}
{{dsc end}}

[[zh:cpp/utility/any/~any]]</text>
      <sha1>o4524zwd7gq07rxhvlt0mcizmzk2tkq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/apply</title>
    <ns>0</ns>
    <id>14800</id>
    <revision>
      <id>92146</id>
      <parentid>90227</parentid>
      <timestamp>2017-04-08T04:59:37Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="2047">{{cpp/title|apply}}
{{cpp/utility/navbar}}

{{dcl begin}}
{{dcl header | tuple }}
{{dcl | since=c++17 |
template &lt;class F, class Tuple&gt;
constexpr decltype(auto) apply(F&amp;&amp; f, Tuple&amp;&amp; t);
}}
{{dcl end}}
Invoke the {{concept|Callable}} object {{tt|f}} with a tuple of arguments.

===Parameters===
{{par begin}}
{{par | f | {{concept|Callable}} object to be invoked}}
{{par | t | tuple whose elements to be used as arguments to {{tt|f}} }}
{{par end}}

===Return value===
What returned by {{tt|f}}.

=== Notes ===
The tuple need not be {{lc|std::tuple}}, and instead may be anything that supports {{lc|std::get}} and {{lc|std::tuple_size}}; in particular, {{lc|std::array}} and {{lc|std::pair}} may be used.

===Possible implementation===
{{eq fun|1=
namespace detail {
template &lt;class F, class Tuple, std::size_t... I&gt;
constexpr decltype(auto) apply_impl(F &amp;&amp;f, Tuple &amp;&amp;t, std::index_sequence&lt;I...&gt;) 
{
    return std::invoke(std::forward&lt;F&gt;(f), std::get&lt;I&gt;(std::forward&lt;Tuple&gt;(t))...);
&lt;!--Note : we actually need a constexpr counterpart of std::invoke here--&gt;}
}  // namespace detail

template &lt;class F, class Tuple&gt;
constexpr decltype(auto) apply(F &amp;&amp;f, Tuple &amp;&amp;t) 
{
    return detail::apply_impl(
        std::forward&lt;F&gt;(f), std::forward&lt;Tuple&gt;(t),
        std::make_index_sequence&lt;std::tuple_size_v&lt;std::decay_t&lt;Tuple&gt;&gt;&gt;{});
}
}}

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;

int add(int first, int second)
{
    return first + second;    
}

template&lt;typename T&gt;
T add_generic(T first, T second)
{
    return first + second;    
}

int main()
{
    std::cout &lt;&lt; std::apply(add, std::make_tuple(1,2)) &lt;&lt; '\n';

    // template argument deduction/substitution fails
    // std::cout &lt;&lt; std::apply(add_generic, std::make_tuple(2.0f,3.0f)) &lt;&lt; '\n'; 
}
 |output=3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc inc | cpp/utility/dsc make_from_tuple}}
{{dsc inc | cpp/utility/functional/dsc invoke}}
{{dsc end}}

{{langlinks|zh}}</text>
      <sha1>9hbk8wzo8u07e9n29sya4aj066o1fui</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/as const</title>
    <ns>0</ns>
    <id>14506</id>
    <revision>
      <id>81985</id>
      <parentid>81944</parentid>
      <timestamp>2015-11-23T17:03:03Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>fix typos in the example</comment>
      <text xml:space="preserve" bytes="1673">{{cpp/title|as_const}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl | since=c++17 | num=1 | 1=
template &lt;class T&gt;
constexpr std::add_const_t&lt;T&gt;&amp; as_const(T&amp; t) noexcept;
}}
{{dcl | since=c++17 | num=2 | 1=
template &lt;class T&gt;
void as_const(const T&amp;&amp;) = delete;
}}
{{dcl end}}

@1@ Forms lvalue reference to const type of {{tt|t}}
@2@ const rvalue reference overload is deleted to disallow rvalue arguments

===Possible implementation===
{{eq fun
 | 1=
template &lt;class T&gt;
constexpr std::add_const_t&lt;T&gt;&amp; as_const(T&amp; t) noexcept
{
    return t;
}
}}

===Example===
{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;cassert&gt;
#include &lt;utility&gt;
#include &lt;type_traits&gt;

int main()
{
    std::string mutableString = &quot;Hello World!&quot;;
    const std::string&amp; constView = std::as_const(mutableString);

    assert( &amp;constView == &amp;mutableString );
    assert( &amp;std::as_const( mutableString ) == &amp;mutableString );

    using WhatTypeIsIt = std::remove_reference_t&lt;decltype(std::as_const(mutableString))&gt;;

    static_assert(std::is_same&lt;std::remove_const_t&lt;WhatTypeIsIt&gt;, std::string&gt;::value,
            &quot;WhatTypeIsIt should be some kind of string.&quot; );
    static_assert(!std::is_same&lt; WhatTypeIsIt, std::string &gt;::value,
            &quot;WhatTypeIsIt shouldn't be a mutable string.&quot; );
}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/types/dsc is_const}}
{{dsc inc | cpp/types/dsc add_cv}}
{{dsc inc | cpp/types/dsc remove_cv}}
{{dsc end}}

[[de:cpp/utility/as const]]
[[es:cpp/utility/as const]]
[[fr:cpp/utility/as const]]
[[it:cpp/utility/as const]]
[[ja:cpp/utility/as const]]
[[pt:cpp/utility/as const]]
[[ru:cpp/utility/as const]]
[[zh:cpp/utility/as const]]</text>
      <sha1>0z42h5hg4w9d2pakk08vbtszk3e5kya</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bad optional access</title>
    <ns>0</ns>
    <id>15549</id>
    <redirect title="cpp/utility/optional/bad optional access" />
    <revision>
      <id>86432</id>
      <timestamp>2016-06-29T19:52:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>might as well redirect before autolinker rebuilds</comment>
      <text xml:space="preserve" bytes="54">#REDIRECT [[cpp/utility/optional/bad_optional_access]]</text>
      <sha1>07ur4x9sbi74z1358kpq58u6lqdnc1w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset</title>
    <ns>0</ns>
    <id>1776</id>
    <revision>
      <id>59501</id>
      <parentid>51601</parentid>
      <timestamp>2013-06-01T06:36:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="2206">{{cpp/title|bitset}}
{{cpp/utility/bitset/navbar}}
{{ddcl | header=bitset |
template&lt; std::size_t N &gt;
class bitset;
}}

The class template {{tt|bitset}} represents a fixed-size sequence of {{tt|N}} bits. Bitsets can be manipulated by standard logic operators and converted to and from strings and integers.

{{tt|bitset}} meets the requirements of {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

===Template parameters===
{{par begin}}
{{par | N | the number of bits to allocate storage for}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc class | cpp/utility/bitset/reference | proxy class representing a reference to a bit}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc constructor}}
{{dsc inc | cpp/utility/bitset/dsc operator_cmp}}

{{dsc h2 | Element access}}
{{dsc inc | cpp/utility/bitset/dsc operator_at}}
{{dsc inc | cpp/utility/bitset/dsc test}}
{{dsc inc | cpp/utility/bitset/dsc all_any_none}}
{{dsc inc | cpp/utility/bitset/dsc count}}

{{dsc h2 | Capacity}}
{{dsc inc | cpp/utility/bitset/dsc size}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic}}
{{dsc inc | cpp/utility/bitset/dsc operator_ltltgtgt}}
{{dsc inc | cpp/utility/bitset/dsc set}}
{{dsc inc | cpp/utility/bitset/dsc reset}}
{{dsc inc | cpp/utility/bitset/dsc flip}}

{{dsc h2 | Conversions}}
{{dsc inc | cpp/utility/bitset/dsc to_string}}
{{dsc inc | cpp/utility/bitset/dsc to_ulong}}
{{dsc inc | cpp/utility/bitset/dsc to_ullong}}

{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic2}}
{{dsc inc | cpp/utility/bitset/dsc operator_ltltgtgt2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc hash}}
{{dsc end}}

===Notes===
If the size of the bitset is not known at compile time, [[cpp/container/vector_bool|std::vector&lt;bool&gt;]] or [http://www.boost.org/doc/libs/release/libs/dynamic_bitset/dynamic_bitset.html boost::dynamic_bitset] may be used.

[[de:cpp/utility/bitset]]
[[es:cpp/utility/bitset]]
[[fr:cpp/utility/bitset]]
[[it:cpp/utility/bitset]]
[[ja:cpp/utility/bitset]]
[[pt:cpp/utility/bitset]]
[[ru:cpp/utility/bitset]]
[[zh:cpp/utility/bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/all</title>
    <ns>0</ns>
    <id>1777</id>
    <redirect title="cpp/utility/bitset/all any none" />
    <revision>
      <id>5387</id>
      <parentid>3554</parentid>
      <timestamp>2011-07-27T10:19:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/bitset/all_any_none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/all any none</title>
    <ns>0</ns>
    <id>2372</id>
    <revision>
      <id>91630</id>
      <parentid>72327</parentid>
      <timestamp>2017-03-31T19:52:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1778">{{cpp/utility/bitset/title | all|any|none}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
bool all() const;
}}
{{dcl | num=2 |
bool any() const;
}}
{{dcl | num=3 |
bool none() const;
}}
{{dcl end}}

Checks if all, any or none of the bits are set to {{c|true}}.

@1@ Checks if all bits are set to {{c|true}}

@2@ Checks if any bits are set to {{c|true}}

@3@ Checks if none of the bits are set to {{c|true}}

===Parameters===
(none)

===Return value===
@1@ {{c|true}} if all bits are set to {{c|true}}, otherwise {{c|false}}

@2@ {{c|true}} if any of the bits are set to {{c|true}}, otherwise {{c|false}}

@3@ {{c|true}} if none of the bits are set to {{c|true}}, otherwise {{c|false}}

===Exceptions===
{{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;4&gt; b1(&quot;0000&quot;);
    std::bitset&lt;4&gt; b2(&quot;0101&quot;);
    std::bitset&lt;4&gt; b3(&quot;1111&quot;);

    std::cout &lt;&lt; &quot;bitset\t&quot; &lt;&lt; &quot;all\t&quot; &lt;&lt; &quot;any\t&quot; &lt;&lt; &quot;none\n&quot;;
    std::cout &lt;&lt; b1 &lt;&lt; '\t' &lt;&lt; b1.all() &lt;&lt; '\t' &lt;&lt; b1.any() &lt;&lt; '\t' &lt;&lt; b1.none() &lt;&lt; '\n';
    std::cout &lt;&lt; b2 &lt;&lt; '\t' &lt;&lt; b2.all() &lt;&lt; '\t' &lt;&lt; b2.any() &lt;&lt; '\t' &lt;&lt; b2.none() &lt;&lt; '\n';
    std::cout &lt;&lt; b3 &lt;&lt; '\t' &lt;&lt; b3.all() &lt;&lt; '\t' &lt;&lt; b3.any() &lt;&lt; '\t' &lt;&lt; b3.none() &lt;&lt; '\n';
}
 | output=
bitset  all     any     none
0000    0       0       1
0101    0       1       0
1111    1       1       0
}}

[[de:cpp/utility/bitset/all any none]]
[[es:cpp/utility/bitset/all any none]]
[[fr:cpp/utility/bitset/all any none]]
[[it:cpp/utility/bitset/all any none]]
[[ja:cpp/utility/bitset/all any none]]
[[pt:cpp/utility/bitset/all any none]]
[[ru:cpp/utility/bitset/all any none]]
[[zh:cpp/utility/bitset/all any none]]</text>
      <sha1>7hcsqm3x62mb9166iu50xmphwccrh86</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/any</title>
    <ns>0</ns>
    <id>1778</id>
    <redirect title="cpp/utility/bitset/all any none" />
    <revision>
      <id>5385</id>
      <parentid>3556</parentid>
      <timestamp>2011-07-27T10:18:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/bitset/all any none]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/bitset/all_any_none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/bitset</title>
    <ns>0</ns>
    <id>5451</id>
    <revision>
      <id>91649</id>
      <parentid>90327</parentid>
      <timestamp>2017-03-31T19:53:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="5596">{{cpp/utility/bitset/title | bitset}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 | 1=
bitset();
}}
{{dcl | since=c++11 | 1=
constexpr bitset();
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c++11 | 1=
bitset( unsigned long val );
}}
{{dcl | since=c++11 | 1=
constexpr bitset( unsigned long long val );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | until=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
explicit bitset( const std::basic_string&lt;CharT,Traits,Alloc&gt;&amp; str,
                 typename std::basic_string&lt;CharT,Traits,Alloc&gt;::size_type pos = 0,
                 typename std::basic_string&lt;CharT,Traits,Alloc&gt;::size_type n =
                     std::basic_string&lt;CharT,Traits,Alloc&gt;::npos);
}}
{{dcl | since=c++11 | 1=
template&lt; class CharT, class Traits, class Alloc &gt;
explicit bitset( const std::basic_string&lt;CharT,Traits,Alloc&gt;&amp; str,
                 typename std::basic_string&lt;CharT,Traits,Alloc&gt;::size_type pos = 0,
                 typename std::basic_string&lt;CharT,Traits,Alloc&gt;::size_type n =
                     std::basic_string&lt;CharT,Traits,Alloc&gt;::npos,
                 CharT zero = CharT('0'), 
                 CharT one = CharT('1'));
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class CharT &gt;
explicit bitset( const CharT* str,
                 typename std::basic_string&lt;CharT&gt;::size_type n =
                     std::basic_string&lt;CharT&gt;::npos,
                 CharT zero = CharT('0'), 
                 CharT one = CharT('1'));
}}
{{dcl end}}

Constructs a new bitset from one of several optional data sources:

@1@ Default constructor.  Constructs a bitset with all bits set to zero.

@2@ Constructs a bitset, initializing the first (rightmost, least significant) {{tt|M}} bit positions to the corresponding bit values of {{tt|val}}, where {{tt|M}} is the smaller of the number of bits in an {{tt|unsigned long long}} and the number of bits {{tt|N}} in the bitset being constructed. If M is less than N (the bitset is longer than {{rev inl|until=c++11|32}}{{rev inl|since=c++11|64}} bits, for typical implementations of unsigned {{rev inl|since=c++11|long }}long), the remaining bit positions are initialized to zeroes. 

@3@ Constructs a bitset using the characters in the {{lc|std::basic_string}} {{tt|str}}.  An optional starting position {{tt|pos}} and length {{tt|n}} can be provided, as well as characters denoting alternate values for set ({{tt|one}}) and unset ({{tt|zero}}) bits. {{tt|Traits::eq()}} is used to compare the character values. 

@@The effective length of the initializing string is min({{tt|n}}, {{tt|str.size() - pos}}).

@@If {{tt|pos &gt; str.size()}}, this constructor throws {{lc|std::out_of_range}}.  If any characters examined in {{tt|str}} are not {{tt|zero}} or {{tt|one}}, it throws {{lc|std::invalid_argument}}.

@4@ Similar to (3), but uses a {{tt|CharT*}} instead of a {{lc|std::basic_string}}. Equivalent to {{c|1=bitset(n == basic_string&lt;CharT&gt;::npos ? basic_string&lt;CharT&gt;(str) : basic_string&lt;CharT&gt;(str, n), 0, n, zero, one)}}

===Parameters===
{{par begin}}
{{par | val  | number used to initialize the bitset}}
{{par | str  | string used to initialize the bitset}}
{{par | pos  | a starting offset into {{tt|str}}}}
{{par | n    | number of characters to use from {{tt|str}}}}
{{par | one  | alternate character for set bits in {{tt|str}}}}
{{par | zero | alternate character for unset bits in {{tt|str}}}}
{{par end}}

===Exceptions===
{{rev begin}}
{{rev|until=c++11|
@1@ none
@2@ none
}}
{{rev|since=c++11|
@1@{{unreviewed noexcept}}
@2@{{unreviewed noexcept}}
}}
{{rev end}}
@3@{{lc|std::out_of_range}} if {{c|pos &gt; str.size()}}, {{lc|std::invalid_argument}} if any character is not one or zero
@4@{{lc|std::invalid_argument}} if any character is not one or zero


===Example===
{{example
 | code=
#include &lt;bitset&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;climits&gt;

int main() 
{
    // empty constructor
    std::bitset&lt;8&gt; b1; // [0,0,0,0,0,0,0,0]
    
    // unsigned long long constructor
    std::bitset&lt;8&gt; b2(42);          // [0,0,1,0,1,0,1,0]
    std::bitset&lt;70&gt; bl(ULLONG_MAX); // [0,0,0,0,0,0,1,1,1,...,1,1,1] in C++11
    std::bitset&lt;8&gt; bs(0xfff0);      // [1,1,1,1,0,0,0,0]
    
    // string constructor
    std::string bit_string = &quot;110010&quot;;
    std::bitset&lt;8&gt; b3(bit_string);       // [0,0,1,1,0,0,1,0]
    std::bitset&lt;8&gt; b4(bit_string, 2);    // [0,0,0,0,0,0,1,0]
    std::bitset&lt;8&gt; b5(bit_string, 2, 3); // [0,0,0,0,0,0,0,1]

    // string constructor using custom zero/one digits
    std::string alpha_bit_string = &quot;aBaaBBaB&quot;;
    std::bitset&lt;8&gt; b6(alpha_bit_string, 0, alpha_bit_string.size(),
                      'a', 'B');         // [0,1,0,0,1,1,0,1]

    // char* constructor using custom digits
    std::bitset&lt;8&gt; b7(&quot;XXXXYYYY&quot;, 8, 'X', 'Y'); // [0,0,0,0,1,1,1,1]

    std::cout &lt;&lt; b1 &lt;&lt; '\n' &lt;&lt; b2 &lt;&lt; '\n' &lt;&lt; bl &lt;&lt; '\n' &lt;&lt; bs &lt;&lt; '\n'
              &lt;&lt; b3 &lt;&lt; '\n' &lt;&lt; b4 &lt;&lt; '\n' &lt;&lt; b5 &lt;&lt; '\n' &lt;&lt; b6 &lt;&lt; '\n'
              &lt;&lt; b7 &lt;&lt; '\n';
}
 | p=true
 | output=
00000000
00101010
0000001111111111111111111111111111111111111111111111111111111111111111
11110000
00110010
00000010
00000001
01001101
00001111
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc set}}
{{dsc inc | cpp/utility/bitset/dsc reset}}
{{dsc end}}

[[de:cpp/utility/bitset/bitset]]
[[es:cpp/utility/bitset/bitset]]
[[fr:cpp/utility/bitset/bitset]]
[[it:cpp/utility/bitset/bitset]]
[[ja:cpp/utility/bitset/bitset]]
[[pt:cpp/utility/bitset/bitset]]
[[ru:cpp/utility/bitset/bitset]]
[[zh:cpp/utility/bitset/bitset]]</text>
      <sha1>7lubkk1ybfd4rrj88a3qxhidjx7wj83</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/count</title>
    <ns>0</ns>
    <id>1779</id>
    <revision>
      <id>91759</id>
      <parentid>83500</parentid>
      <timestamp>2017-03-31T19:57:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1353">{{cpp/utility/bitset/title | count}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl |
std::size_t count() const;
}}
{{dcl end}}

Returns the number of bits that are set to {{c|true}}.

===Parameters===
(none)

===Return value===
number of bits that are set to {{c|true}}.

===Exceptions===
{{rev begin}}
{{rev|until=c++11|(none)}}
{{rev|since=c++11|{{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;8&gt; b(&quot;00010010&quot;);
    std::cout &lt;&lt; &quot;initial value: &quot; &lt;&lt; b &lt;&lt; '\n';

    // find the first unset bit
    size_t idx = 0;
    while (idx &lt; b.size() &amp;&amp; b.test(idx)) ++idx;

    // continue setting bits until half the bitset is filled
    while (idx &lt; b.size() &amp;&amp; b.count() &lt; b.size()/2) {
        b.set(idx);
        std::cout &lt;&lt; &quot;setting bit &quot; &lt;&lt; idx &lt;&lt; &quot;: &quot; &lt;&lt; b &lt;&lt; '\n';
        while (idx &lt; b.size() &amp;&amp; b.test(idx)) ++idx;
    }

}
 | output=
initial value: 00010010
setting bit 0: 00010011
setting bit 2: 00010111
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc size}}
{{dsc end}}

[[de:cpp/utility/bitset/count]]
[[es:cpp/utility/bitset/count]]
[[fr:cpp/utility/bitset/count]]
[[it:cpp/utility/bitset/count]]
[[ja:cpp/utility/bitset/count]]
[[pt:cpp/utility/bitset/count]]
[[ru:cpp/utility/bitset/count]]
[[zh:cpp/utility/bitset/count]]</text>
      <sha1>5bvep9sg7naqnyfmzktzk4tg70tvw5h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/flip</title>
    <ns>0</ns>
    <id>2368</id>
    <revision>
      <id>91681</id>
      <parentid>91074</parentid>
      <timestamp>2017-03-31T19:54:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1519">{{cpp/utility/bitset/title|flip}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 |
bitset&lt;N&gt;&amp; flip();
}}
{{dcl | num=2 |
bitset&lt;N&gt;&amp; flip( size_t pos );
}}
{{dcl end}}

Flips bits, i.e. changes {{c|true}} values to {{c|false}} and {{c|false}} values to {{c|true}}.   Equivalent to a logical NOT operation on part or all of the bitset.

@1@ Flips all bits (like {{lc|operator~}}, but in-place)

@2@ Flips the bit at the position {{tt|pos}}.

===Parameters===
{{par begin}}
{{par | pos | the position of the bit to flip}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

@2@ throws {{lc|std::out_of_range}} if {{tt|pos}} does not correspond to a valid position within the bitset.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;4&gt; b;

    std::cout &lt;&lt; b &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; b.flip(0) &lt;&lt; '\n';
    std::cout &lt;&lt; b.flip(2) &lt;&lt; '\n';
    std::cout &lt;&lt; b.flip() &lt;&lt; '\n';
}
 | output=
0000
0001
0101
1010
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc set}}
{{dsc inc | cpp/utility/bitset/dsc reset}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic}}
{{dsc end}}

[[de:cpp/utility/bitset/flip]]
[[es:cpp/utility/bitset/flip]]
[[fr:cpp/utility/bitset/flip]]
[[it:cpp/utility/bitset/flip]]
[[ja:cpp/utility/bitset/flip]]
[[pt:cpp/utility/bitset/flip]]
[[ru:cpp/utility/bitset/flip]]
[[zh:cpp/utility/bitset/flip]]</text>
      <sha1>ctwp1sj6sqhvrh5fsf76mt7xfcc1wpj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/hash</title>
    <ns>0</ns>
    <id>5518</id>
    <revision>
      <id>63075</id>
      <parentid>59509</parentid>
      <timestamp>2013-07-01T23:53:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1189">{{cpp/title | hash &lt;small&gt;(std::bitset)&lt;/small&gt;}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
template&lt;size_t N&gt; struct hash&lt;bitset&lt;N&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for {{c|std::bitset&lt;N&gt;}} allows users to obtain hashes of objects of type {{c|std::bitset&lt;N&gt;}}.

===Example===
{{example
 | The following code shows one possible output of a hash function used on several bitsets:
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;
#include &lt;functional&gt;
 
int main()
{
    std::bitset&lt;4&gt; b1(1);
    std::bitset&lt;4&gt; b2(2);
    std::bitset&lt;4&gt; b3(b2);

    std::hash&lt;std::bitset&lt;4&gt;&gt; hash_fn;

    size_t h1 = hash_fn(b1);
    size_t h2 = hash_fn(b2);
    size_t h3 = hash_fn(b3);

    std::cout &lt;&lt; h1 &lt;&lt; '\n';
    std::cout &lt;&lt; h2 &lt;&lt; '\n';
    std::cout &lt;&lt; h3 &lt;&lt; '\n';
}
 | output=
67918732
118251589
118251589
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[de:cpp/utility/bitset/hash]]
[[es:cpp/utility/bitset/hash]]
[[fr:cpp/utility/bitset/hash]]
[[it:cpp/utility/bitset/hash]]
[[ja:cpp/utility/bitset/hash]]
[[pt:cpp/utility/bitset/hash]]
[[ru:cpp/utility/bitset/hash]]
[[zh:cpp/utility/bitset/hash]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/none</title>
    <ns>0</ns>
    <id>1780</id>
    <redirect title="cpp/utility/bitset/all any none" />
    <revision>
      <id>5386</id>
      <parentid>3560</parentid>
      <timestamp>2011-07-27T10:18:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/bitset/all_any_none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator at</title>
    <ns>0</ns>
    <id>1781</id>
    <revision>
      <id>78148</id>
      <parentid>64232</parentid>
      <timestamp>2015-05-05T14:36:00Z</timestamp>
      <contributor>
        <ip>193.248.47.22</ip>
      </contributor>
      <comment>Spelling: refence =&gt; reference</comment>
      <text xml:space="preserve" bytes="1813">{{cpp/utility/bitset/title | operator[]}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
bool operator[]( std::size_t pos ) const;
}}
{{dcl | since=c++11 |
constexpr bool operator[]( std::size_t pos ) const;
}}
{{dcl rev end}}
{{dcl | num=2 |
reference operator[]( std::size_t pos );
}}
{{dcl end}}

Accesses the bit at position {{tt|pos}}. The first version returns the value of the bit, the second version returns an object of type {{lc|std::bitset::reference}} that allows modification of the value.

Unlike {{lc|test()}}, does not throw exceptions: the behavior is undefined if {{tt|pos}} is out of bounds.

===Parameters===
{{par begin}}
{{par | pos | position of the bit to return}}
{{par end}}

===Return value===
1) the value of the requested bit

2) an object of type {{lc|std::bitset::reference}}, which allows writing to the requested bit.

===Exceptions===
None

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;8&gt; b1(42);
    for (std::size_t i = 0; i &lt; b1.size(); ++i) {
        std::cout &lt;&lt; &quot;b1[&quot; &lt;&lt; i &lt;&lt; &quot;]: &quot; &lt;&lt; b1[i] &lt;&lt; '\n';
    }
    b1[0] = true; // modifies the first bit through bitset::reference
    std::cout &lt;&lt; &quot;After setting bit 0, the bitset holds &quot; &lt;&lt; b1 &lt;&lt; '\n';
}
 | output=
b1[0]: 0
b1[1]: 1
b1[2]: 0
b1[3]: 1
b1[4]: 0
b1[5]: 1
b1[6]: 0
b1[7]: 0
After setting bit 0, the bitset holds 00101011
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc test}}
{{dsc end}}

[[de:cpp/utility/bitset/operator at]]
[[es:cpp/utility/bitset/operator at]]
[[fr:cpp/utility/bitset/operator at]]
[[it:cpp/utility/bitset/operator at]]
[[ja:cpp/utility/bitset/operator at]]
[[pt:cpp/utility/bitset/operator at]]
[[ru:cpp/utility/bitset/operator at]]
[[zh:cpp/utility/bitset/operator at]]</text>
      <sha1>2fpum0fduz3qfcc7xl8ckb33yzv626o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator cmp</title>
    <ns>0</ns>
    <id>5452</id>
    <revision>
      <id>67939</id>
      <parentid>67929</parentid>
      <timestamp>2014-03-07T10:49:32Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>escape '=='</comment>
      <text xml:space="preserve" bytes="1487">{{title | 1=operator==,!=&lt;small&gt;(std::bitset&lt;/small&gt;)}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
bool operator==( const bitset&lt;N&gt;&amp; rhs ) const;
}}
{{dcl | num=2 | 1=
bool operator!=( const bitset&lt;N&gt;&amp; rhs ) const;
}}
{{dcl end}}

1) Returns true if all of the bits in {{tt|*this}} and {{tt|rhs}} are equal.

2) Returns true if any of the bits in {{tt|*this}} and {{tt|rhs}} are not equal.

===Parameters===
{{par begin}}
{{par | rhs | bitset to compare }}
{{par end}} 

===Return value===

1) {{c|true}} if the value of each bit in {{tt|*this}} equals the value of the corresponding bit in {{tt|rhs}}, otherwise {{c|false}}

2) {{c|true}} if {{tt|!(*this {{==}} rhs)}}, otherwise {{c|false}}

===Example===
{{example
 | Compare two bitsets to determine if they are identical:
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;4&gt; b1(3); // [0,0,1,1]
    std::bitset&lt;4&gt; b2(b1);
    std::bitset&lt;4&gt; b3(4); // [0,1,0,0]

    std::cout &lt;&lt; &quot;b1 == b2: &quot; &lt;&lt; (b1 == b2) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b1 == b3: &quot; &lt;&lt; (b1 == b3) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b1 != b3: &quot; &lt;&lt; (b1 != b3) &lt;&lt; '\n';
}
 | output=
b1 == b2: 1
b1 == b3: 0
b1 != b3: 1
}}

[[de:cpp/utility/bitset/operator cmp]]
[[es:cpp/utility/bitset/operator cmp]]
[[fr:cpp/utility/bitset/operator cmp]]
[[it:cpp/utility/bitset/operator cmp]]
[[ja:cpp/utility/bitset/operator cmp]]
[[pt:cpp/utility/bitset/operator cmp]]
[[ru:cpp/utility/bitset/operator cmp]]
[[zh:cpp/utility/bitset/operator cmp]]</text>
      <sha1>b4zg6967ctv3ezwloahfjzn0qogrktv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator gtgtltlt</title>
    <ns>0</ns>
    <id>3487</id>
    <redirect title="cpp/utility/bitset/operator ltltgtgt" />
    <revision>
      <id>13141</id>
      <timestamp>2011-11-03T19:48:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/bitset/operator gtgtltlt]] to [[cpp/utility/bitset/operator ltltgtgt]]: consistency</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[cpp/utility/bitset/operator ltltgtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator logic</title>
    <ns>0</ns>
    <id>2365</id>
    <revision>
      <id>91731</id>
      <parentid>76778</parentid>
      <timestamp>2017-03-31T19:56:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2047">{{cpp/utility/bitset/title|operator&amp;{{=}},{{!=}},^{{=}},~}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
bitset&lt;N&gt;&amp; operator&amp;=( const bitset&lt;N&gt;&amp; other );
}}
{{dcl | num=2 | 1=
bitset&lt;N&gt;&amp; operator{{!}}=( const bitset&lt;N&gt;&amp; other );
}}
{{dcl | num=3 | 1=
bitset&lt;N&gt;&amp; operator^=( const bitset&lt;N&gt;&amp; other );
}}
{{dcl | num=4 | 1=
bitset&lt;N&gt; operator~() const;
}}
{{dcl end}}

Performs binary AND, OR, XOR and NOT.

@1@ Sets the bits to the result of binary AND on corresponding pairs of bits of {{tt|*this}} and {{tt|other}}.

@2@ Sets the bits to the result of binary OR on corresponding pairs of bits of {{tt|*this}} and {{tt|other}}.

@3@ Sets the bits to the result of binary XOR on corresponding pairs of bits of {{tt|*this}} and {{tt|other}}.

@4@ Returns a temporary copy of {{tt|*this}} with all bits flipped (binary NOT).

Note that &amp;=, |=, and ^= are only defined for bitsets of the same size {{tt|N}}.

===Parameters===
{{par begin}}
{{par | other | another bitset}}
{{par end}}

===Return value===
@1-3@ {{c|*this}}

@4@ {{c|bitset&lt;N&gt;(*this).flip()}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;16&gt; dest;
    std::string pattern_str = &quot;1001&quot;;
    std::bitset&lt;16&gt; pattern(pattern_str);
    
    for (size_t i = 0, ie = dest.size()/pattern_str.size(); i != ie; ++i) {
        dest &lt;&lt;= pattern_str.size();
        dest {{!}}= pattern;
    }
    std::cout &lt;&lt; dest &lt;&lt; '\n';
}
 | output=
1001100110011001
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_ltltgtgt}}
{{dsc end}}

[[de:cpp/utility/bitset/operator logic]]
[[es:cpp/utility/bitset/operator logic]]
[[fr:cpp/utility/bitset/operator logic]]
[[it:cpp/utility/bitset/operator logic]]
[[ja:cpp/utility/bitset/operator logic]]
[[pt:cpp/utility/bitset/operator logic]]
[[ru:cpp/utility/bitset/operator logic]]
[[zh:cpp/utility/bitset/operator logic]]</text>
      <sha1>edwddkg12kjzaf9n3plm2pxsbbg8qb9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator logic2</title>
    <ns>0</ns>
    <id>5453</id>
    <revision>
      <id>91722</id>
      <parentid>72877</parentid>
      <timestamp>2017-03-31T19:55:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2162">{{title | 1=operator&amp;,{{!}},^&lt;small&gt;(std::bitset)&lt;/small&gt;}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template&lt; std::size_t N &gt;
bitset&lt;N&gt; operator&amp;( const bitset&lt;N&gt;&amp; lhs, const bitset&lt;N&gt;&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; std::size_t N &gt;
bitset&lt;N&gt; operator{{!}}( const bitset&lt;N&gt;&amp; lhs, const bitset&lt;N&gt;&amp; rhs );
}}
{{dcl | num=3 | 1=
template&lt; std::size_t N &gt;
bitset&lt;N&gt; operator^( const bitset&lt;N&gt;&amp; lhs, const bitset&lt;N&gt;&amp; rhs );
}}
{{dcl end}}

Performs binary AND, OR, and XOR between two bitsets, {{tt|lhs}} and {{tt|rhs}}.

@1@ Returns a {{tt|bitset&lt;N&gt;}} containing the result of binary AND on corresponding pairs of bits of {{tt|lhs}} and {{tt|rhs}}.

@2@ Returns a {{tt|bitset&lt;N&gt;}} containing the result of binary OR on corresponding pairs of bits of {{tt|lhs}} and {{tt|rhs}}.

@3@ Returns a {{tt|bitset&lt;N&gt;}} containing the result of binary XOR on corresponding pairs of bits of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs | the bitset on the left-hand side of the operator}}
{{par | rhs | the bitset on the right-hand side of the operator}}
{{par end}}

===Return value===
@1@ {{c|bitset&lt;N&gt;(lhs) &amp;{{=}} rhs}}

@2@ {{c|bitset&lt;N&gt;(lhs) {{!=}} rhs}}

@3@ {{c|bitset&lt;N&gt;(lhs) ^{{=}} rhs}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;bitset&gt;
#include &lt;iostream&gt;

int main()
{
    std::bitset&lt;4&gt; b1(&quot;0110&quot;);
    std::bitset&lt;4&gt; b2(&quot;0011&quot;);
    std::cout &lt;&lt; &quot;b1 &amp; b2: &quot; &lt;&lt; (b1 &amp; b2) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b1 {{!}} b2: &quot; &lt;&lt; (b1 {{!}} b2) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;b1 ^ b2: &quot; &lt;&lt; (b1 ^ b2) &lt;&lt; '\n';
}
 | output=
b1 &amp; b2: 0010
b1 {{!}} b2: 0111
b1 ^ b2: 0101
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic}}
{{dsc end}}

[[de:cpp/utility/bitset/operator logic2]]
[[es:cpp/utility/bitset/operator logic2]]
[[fr:cpp/utility/bitset/operator logic2]]
[[it:cpp/utility/bitset/operator logic2]]
[[ja:cpp/utility/bitset/operator logic2]]
[[pt:cpp/utility/bitset/operator logic2]]
[[ru:cpp/utility/bitset/operator logic2]]
[[zh:cpp/utility/bitset/operator logic2]]</text>
      <sha1>7nf8he4jx9tvambn4h7qjsd92tkesos</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator ltltgtgt</title>
    <ns>0</ns>
    <id>2364</id>
    <revision>
      <id>91800</id>
      <parentid>76779</parentid>
      <timestamp>2017-03-31T19:58:23Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1860">{{cpp/utility/bitset/title|operator&amp;lt;&amp;lt;,&amp;lt;&amp;lt;{{=}},&amp;gt;&amp;gt;,&amp;gt;&amp;gt;{{=}}}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
bitset&lt;N&gt; operator&lt;&lt;( std::size_t pos ) const;
}}
{{dcl | num=2 | 1=
bitset&lt;N&gt;&amp; operator&lt;&lt;=( std::size_t pos );
}}
{{dcl | num=3 | 1=
bitset&lt;N&gt; operator&gt;&gt;( std::size_t pos ) const;
}}
{{dcl | num=4 | 1=
bitset&lt;N&gt;&amp; operator&gt;&gt;=( std::size_t pos );
}}
{{dcl end}}

Performs binary shift left and binary shift right. Zeroes are shifted in.

@1-2@ Performs binary shift left. The {{v|2}} version is destructive, i.e. performs the shift to the current object.

@3-4@ Performs binary shift right. The {{v|4}} version is destructive, i.e. performs the shift to the current object.

===Parameters===
{{par begin}}
{{par | pos | number of positions to shift the bits}}
{{par end}}

===Return value===
@1,3@ new bitset object containing the shifted bits

@2,4@ {{c|*this}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;8&gt; b(&quot;01110010&quot;);
    std::cout &lt;&lt; &quot;initial value: &quot; &lt;&lt; b &lt;&lt; '\n';

    while (b.any()) {
        while (!b.test(0)) {
            b &gt;&gt;= 1;
        }
        std::cout &lt;&lt; b &lt;&lt; '\n';
        b &gt;&gt;= 1;
    }
}
 | output=
initial value: 01110010
00111001
00000111
00000011
00000001
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_logic}}
{{dsc end}}

[[de:cpp/utility/bitset/operator ltltgtgt]]
[[es:cpp/utility/bitset/operator ltltgtgt]]
[[fr:cpp/utility/bitset/operator ltltgtgt]]
[[it:cpp/utility/bitset/operator ltltgtgt]]
[[ja:cpp/utility/bitset/operator ltltgtgt]]
[[pt:cpp/utility/bitset/operator ltltgtgt]]
[[ru:cpp/utility/bitset/operator ltltgtgt]]
[[zh:cpp/utility/bitset/operator ltltgtgt]]</text>
      <sha1>t20jy4qqwup24z9s4q9f1linf1ydb8p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator ltltgtgt2</title>
    <ns>0</ns>
    <id>5454</id>
    <revision>
      <id>64269</id>
      <parentid>59518</parentid>
      <timestamp>2013-08-15T16:12:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+lc</comment>
      <text xml:space="preserve" bytes="2855">{{title | 1=operator&lt;&lt;,&gt;&gt;&lt;small&gt;(std::bitset)&lt;/small&gt;}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
template &lt;class CharT, class Traits, size_t N&gt;
std::basic_ostream&lt;CharT, Traits&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CharT, Traits&gt;&amp; os, 
                                              const bitset&lt;N&gt;&amp; x);
}}
{{dcl | num=2 | 1=
template &lt;class CharT, class Traits, size_t N&gt;
std::basic_istream&lt;CharT, Traits&gt;&amp; operator&gt;&gt;(std::basic_istream&lt;CharT, Traits&gt;&amp; is, 
                                              bitset&lt;N&gt;&amp; x);
}}
{{dcl end}}

Inserts or extracts a bitset from a character stream.

@1@ Writes the bitset {{tt|x}} to the character stream {{tt|os}} as if by first converting it to a {{tt|basic_string&lt;CharT,Traits&gt;}} using {{lc|to_string()}}, and then writing it into {{tt|os}} using the {{ltt|cpp/string/basic_string/operator_ltltgtgt|operator&lt;&lt;}} (which is a {{concept|FormattedOutputFunction}} for strings). The characters to use for ones and zeroes are obtained from the currently-imbued locale by calling {{c|std::use_facet&lt;std::ctype&lt;CharT&gt;(os.getloc()).widen()}} with {{c|'1'}} and {{c|'0'}} as arguments.

@2@ Behaves as a {{concept|FormattedInputFunction}}. After constructing and checking the sentry object, which may skip leading whitespace, extracts up to {{tt|N}} characters from {{tt|is}} and stores the characters in the bitset {{tt|x}}.

Characters are extracted until either

* {{tt|N}} characters have been read,
* end-of-file occurs in {{tt|is}}, or
* the next character is neither {{tt|is.widen('0')}} nor {{tt|is.widen('1')}}.

If no characters are extracted, {{tt|is.setstate(ios_base::failbit)}} is called.

===Parameters===
{{par begin}}
{{par | os | the character stream to write to}}
{{par | is | the character stream to read from}}
{{par | x | the bitset to be read or written}}
{{par end}}

===Return value===

The character stream that was operated on, e.g. {{tt|os}} or {{tt|is}}.

===Example===
{{example
 | code=
#include &lt;bitset&gt;
#include &lt;iostream&gt;
#include &lt;sstream&gt;

int main()
{
    std::string bit_string = &quot;001101&quot;;
    std::istringstream bit_stream(bit_string);

    std::bitset&lt;3&gt; b1;
    bit_stream &gt;&gt; b1; // reads &quot;001&quot;, stream still holds &quot;101&quot;
    std::cout &lt;&lt; b1 &lt;&lt; '\n';

    std::bitset&lt;8&gt; b2;
    bit_stream &gt;&gt; b2; // reads &quot;101&quot;, populates the 8-bit set as &quot;00000101&quot;
    std::cout &lt;&lt; b2 &lt;&lt; '\n';
}
 | output=
001
00000101
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_ltltgtgt}}
{{dsc end}}

[[de:cpp/utility/bitset/operator ltltgtgt2]]
[[es:cpp/utility/bitset/operator ltltgtgt2]]
[[fr:cpp/utility/bitset/operator ltltgtgt2]]
[[it:cpp/utility/bitset/operator ltltgtgt2]]
[[ja:cpp/utility/bitset/operator ltltgtgt2]]
[[pt:cpp/utility/bitset/operator ltltgtgt2]]
[[ru:cpp/utility/bitset/operator ltltgtgt2]]
[[zh:cpp/utility/bitset/operator ltltgtgt2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/operator mod</title>
    <ns>0</ns>
    <id>5587</id>
    <redirect title="cpp/utility/bitset/operator logic" />
    <revision>
      <id>20590</id>
      <timestamp>2012-03-28T16:28:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/bitset/operator mod]] to [[cpp/utility/bitset/operator logic]]: better title</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/utility/bitset/operator logic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/reference</title>
    <ns>0</ns>
    <id>5068</id>
    <revision>
      <id>91728</id>
      <parentid>64840</parentid>
      <timestamp>2017-03-31T19:56:02Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3195">{{cpp/utility/bitset/title | reference}}
{{cpp/utility/bitset/navbar}}
{{ddcl| 1=
class reference;
}}

The {{lc|std::bitset}} class includes {{lc|std::bitset::reference}} as a publicly-accessible nested class.  This class is used as a proxy object to allow users to interact with individual bits of a bitset, since standard C++ types (like references and pointers) are not built with enough precision to specify individual bits.

The primary use of {{lc|std::bitset::reference}} is to provide an l-value that can be returned from {{ltt|cpp/utility/bitset/operator_at|operator[]}}.

Any reads or writes to a bitset that happen via a {{lc|std::bitset::reference}} potentially read or write to the entire underlying bitset.

===Member functions===
{{dsc begin}}
{{dsc priv mem ctor | nolink=true | constructs the reference. Accessible only to {{lc|std::bitset}} itself}}
{{dsc mem dtor | ~reference | nolink=true | destroys the reference}}
{{dsc mem fun | operator{{=}} | nolink=true | assigns a {{c|bool}} to the referenced bit}}
{{dsc inc | cpp/utility/bitset/reference/dsc operator bool}}
{{dsc mem fun | operator ~ | nolink=true | returns inverted referenced bit}}
{{dsc mem fun | flip | nolink=true | flips the referenced bit}}
{{dsc end}}

{{member | {{small|std::bitset&lt;N&gt;::reference::}}~reference | 2=
{{ddcl | 1=
~reference()
}}

Destroys the reference.
}}

{{member | {{small|std::bitset&lt;N&gt;::reference::}}operator{{=}} | 2=
{{ddcl | 1=
reference&amp; operator=( bool x );
reference&amp; operator=( const reference&amp; x );
}}

Assigns a value to the referenced bit.

===Parameters===
{{par begin}}
{{par | x | value to assign}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{member | {{small|std::bitset&lt;N&gt;::reference::}}operator bool | 2=
{{ddcl | 1=        
operator bool() const;
}}

Returns the value of the referenced bit.

===Parameters===
(none)

===Return value===
The referenced bit.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{member | {{small|std::bitset&lt;N&gt;::reference::}}operator~ | 2=
{{ddcl | 1=        
bool operator~() const;
}}

Returns the inverse of the referenced bit.

===Parameters===
(none)

===Return value===
The inverse of the referenced bit.

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

{{member | {{small|std::bitset&lt;N&gt;::reference::}}flip | 2=
{{ddcl | 1=        
reference&amp; flip();
}}

Inverts the referenced bit.

===Parameters===
(none)

===Return value===
{{c|*this}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_at}}
{{dsc end}}

[[de:cpp/utility/bitset/reference]]
[[es:cpp/utility/bitset/reference]]
[[fr:cpp/utility/bitset/reference]]
[[it:cpp/utility/bitset/reference]]
[[ja:cpp/utility/bitset/reference]]
[[pt:cpp/utility/bitset/reference]]
[[ru:cpp/utility/bitset/reference]]
[[zh:cpp/utility/bitset/reference]]</text>
      <sha1>p3krwg6re9dqliby0a08sqtow0xz9sc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/reset</title>
    <ns>0</ns>
    <id>2367</id>
    <revision>
      <id>91414</id>
      <parentid>64814</parentid>
      <timestamp>2017-03-31T19:43:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1435">{{cpp/utility/bitset/title|reset}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 |
bitset&lt;N&gt;&amp; reset();
}}
{{dcl | num=2 |
bitset&lt;N&gt;&amp; reset( size_t pos );
}}
{{dcl end}}

Sets bits to {{c|false}}.

@1@ Sets all bits to {{c|false}}

@2@ Sets the bit at position {{tt|pos}} to {{c|false}}.

===Parameters===
{{par begin}}
{{par | pos | the position of the bit to set}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

@2@ Throws {{lc|std::out_of_range}} if {{tt|pos}} does not correspond to a valid position within the bitset

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;8&gt; b(42);
    std::cout &lt;&lt; &quot;Bitset is         &quot; &lt;&lt; b &lt;&lt; '\n';
    b.reset(1);
    std::cout &lt;&lt; &quot;After b.reset(1): &quot; &lt;&lt; b &lt;&lt; '\n';
    b.reset();
    std::cout &lt;&lt; &quot;After b.reset():  &quot; &lt;&lt; b &lt;&lt; '\n';
}
 | output=
Bitset is         00101010
After b.reset(1): 00101000
After b.reset():  00000000
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc set}}
{{dsc inc | cpp/utility/bitset/dsc flip}}
{{dsc end}}

[[de:cpp/utility/bitset/reset]]
[[es:cpp/utility/bitset/reset]]
[[fr:cpp/utility/bitset/reset]]
[[it:cpp/utility/bitset/reset]]
[[ja:cpp/utility/bitset/reset]]
[[pt:cpp/utility/bitset/reset]]
[[ru:cpp/utility/bitset/reset]]
[[zh:cpp/utility/bitset/reset]]</text>
      <sha1>kfq10o8kqo2eqjbc5sni5o11dgkvhiw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/set</title>
    <ns>0</ns>
    <id>2366</id>
    <revision>
      <id>91643</id>
      <parentid>88659</parentid>
      <timestamp>2017-03-31T19:53:05Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1396">{{cpp/utility/bitset/title|set}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl | num=1 |
bitset&lt;N&gt;&amp; set();
}}
{{dcl | num=2 | 1=
bitset&lt;N&gt;&amp; set( size_t pos, bool value = true );
}}
{{dcl end}}

Sets all bits to {{c|true}} or to specified value.

@1@ Sets all bits to {{c|true}}.

@2@ Sets the bit at position {{tt|pos}} to the value {{tt|value}}.

===Parameters===
{{par begin}}
{{par | pos | the position of the bit to set (least significant to most significant)}}
{{par | value | the value to set the bit to}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ {{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

@2@ Throws {{lc|std::out_of_range}} if {{tt|pos}} does not correspond to a valid position within the bitset.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    std::bitset&lt;8&gt; b;
    for (size_t i = 1; i &lt; b.size(); i += 2) {
        b.set(i);
    }
    std::cout &lt;&lt; b &lt;&lt; '\n';
}
 | output=
10101010
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc reset}}
{{dsc inc | cpp/utility/bitset/dsc flip}}
{{dsc end}}

[[de:cpp/utility/bitset/set]]
[[es:cpp/utility/bitset/set]]
[[fr:cpp/utility/bitset/set]]
[[it:cpp/utility/bitset/set]]
[[ja:cpp/utility/bitset/set]]
[[pt:cpp/utility/bitset/set]]
[[ru:cpp/utility/bitset/set]]
[[zh:cpp/utility/bitset/set]]</text>
      <sha1>bu5846939n9skkqljegrewrd8cap1of</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/size</title>
    <ns>0</ns>
    <id>1782</id>
    <revision>
      <id>91884</id>
      <parentid>64799</parentid>
      <timestamp>2017-03-31T20:00:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="940">{{cpp/utility/bitset/title | size}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
std::size_t size() const;
}}
{{dcl | since=c++11 | until=c++14 |
constexpr std::size_t size();
}}
{{dcl | since=c++14 |
constexpr std::size_t size() const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the number of bits that the bitset can hold.

===Parameters===
(none)

===Return value===
number of bits that the bitset can hold, i.e. the template parameter {{tt|N}}

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc count}}
{{dsc end}}

[[de:cpp/utility/bitset/size]]
[[es:cpp/utility/bitset/size]]
[[fr:cpp/utility/bitset/size]]
[[it:cpp/utility/bitset/size]]
[[ja:cpp/utility/bitset/size]]
[[pt:cpp/utility/bitset/size]]
[[ru:cpp/utility/bitset/size]]
[[zh:cpp/utility/bitset/size]]</text>
      <sha1>5ms4ebn9e3skahbgojjzew9rkb50h26</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/test</title>
    <ns>0</ns>
    <id>1783</id>
    <revision>
      <id>80512</id>
      <parentid>64205</parentid>
      <timestamp>2015-08-18T00:00:57Z</timestamp>
      <contributor>
        <ip>24.74.84.190</ip>
      </contributor>
      <comment>incorrect output.</comment>
      <text xml:space="preserve" bytes="1377">{{cpp/utility/bitset/title | test}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl |
bool test( size_t pos ) const;
}}
{{dcl end}}

Returns the value of the bit at the position {{tt|pos}}.

Unlike {{lc|operator[]}}, performs a bounds check and throws {{lc|std::out_of_range}} if {{tt|pos}} does not correspond to a valid position in the bitset.

===Parameters===
{{par begin}}
{{par | pos | position of the bit to return}}
{{par end}}

===Return value===
{{c|true}} if the requested bit is set, {{c|false}} otherwise.
===Exceptions===
{{lc|std::out_of_range}} if {{tt|pos}} does not correspond to a valid position within the bitset.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main() 
{
    std::bitset&lt;10&gt; b1(&quot;1111010000&quot;);

    size_t idx = 0;
    while (idx &lt; b1.size() &amp;&amp; !b1.test(idx)) {
      ++idx;
    }

    if (idx &lt; b1.size()) {
        std::cout &lt;&lt; &quot;first set bit at index &quot; &lt;&lt; idx &lt;&lt; '\n';
    } else {
        std::cout &lt;&lt; &quot;no set bits\n&quot;;
    }
}
 | output=
first set bit at index 4
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc operator_at}}
{{dsc end}}

[[de:cpp/utility/bitset/test]]
[[es:cpp/utility/bitset/test]]
[[fr:cpp/utility/bitset/test]]
[[it:cpp/utility/bitset/test]]
[[ja:cpp/utility/bitset/test]]
[[pt:cpp/utility/bitset/test]]
[[ru:cpp/utility/bitset/test]]
[[zh:cpp/utility/bitset/test]]</text>
      <sha1>p4zgnfxoqkgd8doz1erfwbb0or6a4rj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/to string</title>
    <ns>0</ns>
    <id>2369</id>
    <revision>
      <id>80010</id>
      <parentid>61890</parentid>
      <timestamp>2015-07-28T16:23:12Z</timestamp>
      <contributor>
        <ip>2.125.108.101</ip>
      </contributor>
      <comment>fix ascii</comment>
      <text xml:space="preserve" bytes="1797">{{cpp/utility/bitset/title|to_string}}
{{cpp/utility/bitset/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | until=c++11 |
template&lt;
    class CharT,
    class Traits,
    class Alloc 
&gt; std::basic_string&lt;CharT,Traits,Allocator&gt; to_string() const;
}}
{{dcl | since=c++11 | 1=
template&lt;
    class CharT = char,
    class Traits = std::char_traits&lt;CharT&gt;,
    class Allocator = std::allocator&lt;CharT&gt; 
&gt; std::basic_string&lt;CharT,Traits,Allocator&gt;
    to_string(CharT zero = CharT('0'), CharT one = CharT('1')) const;
}}
{{dcl rev end}}
{{dcl end}}

Converts the contents of the bitset to a string. Uses {{tt|zero}} to represent bits with value of {{c|false}} and {{tt|one}} to represent bits with value of {{c|true}}.

The resulting string contains {{tt|N}} characters with the first character corresponds to the last ({{tt|N-1}}th) bit and the last character corresponding to the first bit.

===Parameters===
{{par begin}}
{{par | zero | character to use to represent {{c|false}} }}
{{par | one | character to use to represent {{c|true}} }}
{{par end}}

===Return value===
the converted string

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;
int main()
{
    std::bitset&lt;8&gt; b(42);
    std::cout &lt;&lt; b.to_string() &lt;&lt; '\n'
              &lt;&lt; b.to_string('*') &lt;&lt; '\n'
              &lt;&lt; b.to_string('O', 'X') &lt;&lt; '\n';
}
 | output=
00101010
**1*1*1*
OOXOXOXO
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc to_ulong}}
{{dsc inc | cpp/utility/bitset/dsc to_ullong}}
{{dsc end}}

[[de:cpp/utility/bitset/to string]]
[[es:cpp/utility/bitset/to string]]
[[fr:cpp/utility/bitset/to string]]
[[it:cpp/utility/bitset/to string]]
[[ja:cpp/utility/bitset/to string]]
[[pt:cpp/utility/bitset/to string]]
[[ru:cpp/utility/bitset/to string]]
[[zh:cpp/utility/bitset/to string]]</text>
      <sha1>mohgycfibz96u4e7rkkt46wwuw18zjz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/to ullong</title>
    <ns>0</ns>
    <id>2371</id>
    <revision>
      <id>67192</id>
      <parentid>67191</parentid>
      <timestamp>2014-01-26T02:31:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>fmt long line in the example, and add std::hex to make the output as shown</comment>
      <text xml:space="preserve" bytes="1484">{{cpp/utility/bitset/title|to_ullong}}
{{cpp/utility/bitset/navbar}}
{{ddcl | since=c++11 | 1=
unsigned long long to_ullong() const
}}

Converts the contents of the bitset to an {{c|unsigned long long}} integer. 

The first bit of the bitset corresponds to the least significant digit of the number and the last bit corresponds to the most significant digit.

===Parameters===
(none)

===Return value===
the converted integer

===Exceptions===
{{lc|std::overflow_error}} if the value can not be represented in {{c|unsigned long long}}.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;
#include &lt;limits&gt;

int main()
{
    std::bitset&lt;std::numeric_limits&lt;unsigned long long&gt;::digits&gt; b(
        0x123456789abcdef0LL
    );

    std::cout &lt;&lt; b &lt;&lt; &quot;  &quot; &lt;&lt; std::hex &lt;&lt; b.to_ullong() &lt;&lt; '\n';
    b.flip();
    std::cout &lt;&lt; b &lt;&lt; &quot;  &quot; &lt;&lt; b.to_ullong() &lt;&lt; '\n';
}
 | output=
0001001000110100010101100111100010011010101111001101111011110000  123456789abcdef0
1110110111001011101010011000011101100101010000110010000100001111  edcba9876543210f
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc to_string}}
{{dsc inc | cpp/utility/bitset/dsc to_ulong}}
{{dsc end}}

[[de:cpp/utility/bitset/to ullong]]
[[es:cpp/utility/bitset/to ullong]]
[[fr:cpp/utility/bitset/to ullong]]
[[it:cpp/utility/bitset/to ullong]]
[[ja:cpp/utility/bitset/to ullong]]
[[pt:cpp/utility/bitset/to ullong]]
[[ru:cpp/utility/bitset/to ullong]]
[[zh:cpp/utility/bitset/to ullong]]</text>
      <sha1>cnlxliwn1lqjjemxgaan2rxikm0gr0n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/bitset/to ulong</title>
    <ns>0</ns>
    <id>2370</id>
    <revision>
      <id>59532</id>
      <parentid>51620</parentid>
      <timestamp>2013-06-01T06:37:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="1478">{{cpp/utility/bitset/title|to_ulong}}
{{cpp/utility/bitset/navbar}}
{{ddcl | 1=
unsigned long to_ulong() const
}}

Converts the contents of the bitset to an {{c|unsigned long}} integer. 

The first bit of the bitset corresponds to the least significant digit of the number and the last bit corresponds to the most significant digit.

===Parameters===
(none)

===Return value===
the converted integer

===Exceptions===
throws {{lc|std::overflow_error}} if the value can not be represented in {{c|unsigned long}}.

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;bitset&gt;

int main()
{
    for (unsigned long i = 0; i &lt; 10; ++i) {
        std::bitset&lt;5&gt; b(i);
        std::bitset&lt;5&gt; b_inverted = ~b;
        std::cout &lt;&lt; i &lt;&lt; '\t';
        std::cout &lt;&lt; b &lt;&lt; '\t';
        std::cout &lt;&lt; b_inverted &lt;&lt; '\t';
        std::cout &lt;&lt; b_inverted.to_ulong() &lt;&lt; '\n'; 
    }
}
 | output=
0	00000	11111	31
1	00001	11110	30
2	00010	11101	29
3	00011	11100	28
4	00100	11011	27
5	00101	11010	26
6	00110	11001	25
7	00111	11000	24
8	01000	10111	23
9	01001	10110	22
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/bitset/dsc to_string}}
{{dsc inc | cpp/utility/bitset/dsc to_ullong}}
{{dsc end}}

[[de:cpp/utility/bitset/to ulong]]
[[es:cpp/utility/bitset/to ulong]]
[[fr:cpp/utility/bitset/to ulong]]
[[it:cpp/utility/bitset/to ulong]]
[[ja:cpp/utility/bitset/to ulong]]
[[pt:cpp/utility/bitset/to ulong]]
[[ru:cpp/utility/bitset/to ulong]]
[[zh:cpp/utility/bitset/to ulong]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/chars format</title>
    <ns>0</ns>
    <id>15735</id>
    <revision>
      <id>92144</id>
      <parentid>88267</parentid>
      <timestamp>2017-04-08T04:33:09Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="606">{{cpp/title|chars_format}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl | since=c++17 |
enum class chars_format {
    scientific {{=}} /*unspecified*/,
    fixed {{=}} /*unspecified*/,
    hex {{=}} /*unspecified*/,
    general {{=}} fixed {{!}} scientific
};
}}
{{dcl end}}

A {{concept|BitmaskType}} used to specify floating-point formatting for {{ltt|cpp/utility/to_chars|std::to_chars}} and {{ltt|cpp/utility/from_chars|std::from_chars}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc to_chars}} 
{{dsc inc | cpp/utility/dsc from_chars}} 
{{dsc end}}

{{langlinks|zh}}</text>
      <sha1>9cx7uwc3poifv85czbgz4jzgksw6ts2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/declval</title>
    <ns>0</ns>
    <id>2669</id>
    <revision>
      <id>91785</id>
      <parentid>86111</parentid>
      <timestamp>2017-03-31T19:57:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2153">{{cpp/title|declval}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl | since=c++11 |
template&lt;class T&gt;
typename std::add_rvalue_reference&lt;T&gt;::type declval();
}}
{{dcl end}}

Converts any type {{tt|T}} to a reference type, making it possible to use member functions in {{c|decltype}} expressions without the need to go through constructors. 

{{tt|declval}} is commonly used in templates where acceptable template parameters may have no constructor in common, but have the same member function whose return type is needed.

Note that because no definition exists for {{tt|declval}}, it can only be used in [[cpp/language/expressions#Unevaluated_expressions|unevaluated contexts]]; it is an error to evaluate an expression that contains this function. Formally, the program is ill-formed if this function is [[cpp/language/definition#ODR-use|odr-used]]. 

===Parameters===
(none)

===Return value===
Cannot be called and thus never returns a value. The return type is {{tt|T&amp;&amp;}} unless {{tt|T}} is (possibly cv-qualified) {{tt|void}}, in which case the return type is {{tt|T}}.&lt;!--Note that reference collapsing may take place when determine what T&amp;&amp; refers to.--&gt;

===Exceptions===
{{unreviewed noexcept}}  

===Example===
{{example
 |
 | code=
#include &lt;utility&gt;
#include &lt;iostream&gt;

struct Default { int foo() const { return 1; } };

struct NonDefault
{
    NonDefault(const NonDefault&amp;) { }
    int foo() const { return 1; }
};

int main()
{
    decltype(Default().foo()) n1 = 1;                   // type of n1 is int
//  decltype(NonDefault().foo()) n2 = n1;               // error: no default constructor
    decltype(std::declval&lt;NonDefault&gt;().foo()) n2 = n1; // type of n2 is int
    std::cout &lt;&lt; &quot;n1 = &quot; &lt;&lt; n1 &lt;&lt; '\n'
              &lt;&lt; &quot;n2 = &quot; &lt;&lt; n2 &lt;&lt; '\n';
}
 | output=
n1 = 1
n2 = 1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/language/dsc decltype}}
{{dsc inc | cpp/types/dsc result_of}}
{{dsc end}}

[[de:cpp/utility/declval]]
[[es:cpp/utility/declval]]
[[fr:cpp/utility/declval]]
[[it:cpp/utility/declval]]
[[ja:cpp/utility/declval]]
[[pt:cpp/utility/declval]]
[[ru:cpp/utility/declval]]
[[zh:cpp/utility/declval]]</text>
      <sha1>d45uua8u7gqpwav45e1mdyhn0nnk4tz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/exchange</title>
    <ns>0</ns>
    <id>10005</id>
    <revision>
      <id>91966</id>
      <parentid>85970</parentid>
      <timestamp>2017-03-31T20:31:07Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="2660">{{cpp/title|exchange}}
{{cpp/utility/navbar}}
{{ddcl | header=utility | since=c++14 | 1=
template&lt; class T, class U = T &gt;
T exchange( T&amp; obj, U&amp;&amp; new_value );
}}

Replaces the value of {{tt|obj}} with {{tt|new_value}} and returns the old value of {{tt|obj}}.

===Parameters===
{{par begin}}
{{par | obj | object whose value to replace}}
{{par | new_value | the value to assign to {{tt|obj}} }}
{{par hreq}}
{{par req concept | T | MoveConstructible | notes=Also, it must be possible to move-assign objects of type {{tt|U}} to objects of type {{tt|T}} }}
{{par end}}

===Return value===
The old value of {{tt|obj}}

===Exceptions===
(none)

===Possible implementation===
{{eq fun| 1=
template&lt;class T, class U = T&gt;
T exchange(T&amp; obj, U&amp;&amp; new_value)
{
    T old_value = std::move(obj);
    obj = std::forward&lt;U&gt;(new_value);
    return old_value;
}
}}

===Notes===
This function can be used when implementing [[cpp/language/operators#Assignment_operator|move assignment operators]]:
{{source|1=
struct S
{
  int* p;
  int n;
  S&amp; operator=(S&amp;&amp; other) {
    p = std::exchange(other.p, nullptr); // move p, while leaving nullptr in other.p
    n = std::exchange(other.n, 0); // move n, while leaving zero in other.n
    return *this;
  }
}
}}

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;

class stream
{
  public:

   using flags_type = int;

  public:

    flags_type flags() const
    { return flags_; }

    ///Replaces flags_ by newf, and returns the old value.
    flags_type flags(flags_type newf)
    { return std::exchange(flags_, newf); }

  private:

    flags_type flags_ = 0;
};

void f() { std::cout &lt;&lt; &quot;f()&quot;; }

int main()
{
   stream s;

   std::cout &lt;&lt; s.flags() &lt;&lt; '\n';
   std::cout &lt;&lt; s.flags(12) &lt;&lt; '\n';
   std::cout &lt;&lt; s.flags() &lt;&lt; &quot;\n\n&quot;;

   std::vector&lt;int&gt; v;

   //Since the second template parameter has a default value, it is possible
   //to use a braced-init-list as second argument. The expression below
   //is equivalent to std::exchange(v, std::vector&lt;int&gt;{1,2,3,4});

   std::exchange(v, {1,2,3,4});

   std::copy(begin(v),end(v), std::ostream_iterator&lt;int&gt;(std::cout,&quot;, &quot;));

   std::cout &lt;&lt; &quot;\n\n&quot;;

   void (*fun)();

   //the default value of template parameter also makes possible to use a
   //normal function as second argument. The expression below is equivalent to
   //std::exchange(fun, std::static_cast&lt;void(*)()&gt;(f))
   std::exchange(fun,f);
   fun();
}
 | output=
0
0
12

1, 2, 3, 4, 

f()
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc swap}}
{{dsc inc | cpp/atomic/dsc atomic_exchange}}
{{dsc end}}

[[zh:cpp/utility/exchange]]</text>
      <sha1>rtikrg9nq1b96wrty5nd3f7ionrdivn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/forward</title>
    <ns>0</ns>
    <id>2666</id>
    <revision>
      <id>91406</id>
      <parentid>89268</parentid>
      <timestamp>2017-03-31T19:42:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="5144">{{cpp/title|forward}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | num=1 |
template&lt; class T &gt;
T&amp;&amp; forward( typename std::remove_reference&lt;T&gt;::type&amp; t ) noexcept;
}}
{{dcl | since=c++14 | num=1 |
template&lt; class T &gt;
constexpr T&amp;&amp; forward( typename std::remove_reference&lt;T&gt;::type&amp; t ) noexcept;
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | num=2 |
template&lt; class T &gt;
T&amp;&amp; forward( typename std::remove_reference&lt;T&gt;::type&amp;&amp; t ) noexcept;
}}
{{dcl | since=c++14 | num=2 |
template&lt; class T &gt;
constexpr T&amp;&amp; forward( typename std::remove_reference&lt;T&gt;::type&amp;&amp; t ) noexcept;
}}
{{dcl rev end}}
{{dcl end}}

@1@ Forwards lvalues as either lvalues or as rvalues, depending on T

When {{tt|t}} is a [[cpp/language/reference#Forwarding_references|forwarding reference]] (a function argument that is an rvalue reference to a cv-unqualified function template parameter), this overload forwards the argument to another function with the [[cpp/language/value_category|value category]] it had when passed to the calling function.

For example, if used in wrapper such as the following, the template behaves as described below:

{{source|1=
template&lt;class T&gt;
void wrapper(T&amp;&amp; arg) 
{
    // arg is always lvalue
    foo(std::forward&lt;T&gt;(arg)); // Forward as lvalue or as rvalue, depending on T
}
}}

* If a call to {{tt|wrapper()}} passes an rvalue {{tt|std::string}}, then {{tt|T}} is deduced to {{tt|std::string}} (not {{tt|std::string&amp;}}, {{tt|const std::string&amp;}}, or {{tt|std::string&amp;&amp;}}), and {{tt|std::forward}} ensures that an rvalue reference is passed to {{tt|foo}}.
* If a call to {{tt|wrapper()}} passes a const lvalue {{tt|std::string}}, then {{tt|T}} is deduced to {{tt|const std::string&amp;}}, and {{tt|std::forward}} ensures that a const lvalue reference is passed to {{tt|foo}}.
* If a call to {{tt|wrapper()}} passes a non-const lvalue {{tt|std::string}}, then {{tt|T}} is deduced to {{tt|std::string&amp;}}, and {{tt|std::forward}} ensures that a non-const lvalue reference is passed to {{tt|foo}}.

@2@ Forwards rvalues as rvalues and prohibits forwarding of rvalues as lvalues

This overload makes it possible to forward a result of an expression (such as function call), which may be rvalue or lvalue, as the original value category of a forwarding reference argument.

For example, if a wrapper does not just forward its argument, but calls a member function on the argument, and forwards its result:
{{source|1=
// transforming wrapper 
template&lt;class T&gt;
void wrapper(T&amp;&amp; arg)
{&lt;!-- example from http://stackoverflow.com/a/29135871 --&gt;
    foo(forward&lt;decltype(forward&lt;T&gt;(arg).get())&gt;(forward&lt;T&gt;(arg).get()));
}
}}

where the type of arg may be
{{source|1=
struct Arg
{
    int i = 1;
    int  get() &amp;&amp; { return i; } // call to this overload is rvalue
    int&amp; get() &amp;  { return i; } // call to this overload is lvalue
};
}}

Attempting to forward an rvalue as an lvalue, such as by instantiating the form {{v|2}} with lvalue reference type T, is a compile-time error.

===Notes===
See [[cpp/language/template_argument_deduction|template argument deduction]] for the special rules behind forwarding references ({{tt|T&amp;&amp;}} used as a function parameter) and [[cpp/language/reference#Forwarding_references|forwarding references]] for other detail.

===Parameters===
{{par begin}}
{{par | t | the object to be forwarded}}
{{par end}}

===Return value===
{{c|static_cast&lt;T&amp;&amp;&gt;(t)}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | This example demonstrates perfect forwarding of the parameter(s) to the argument of the constructor of class {{tt|T}}. Also, perfect forwarding of parameter packs is demonstrated.
 | code=
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;utility&gt;
#include &lt;array&gt;

struct A {
    A(int&amp;&amp; n) { std::cout &lt;&lt; &quot;rvalue overload, n=&quot; &lt;&lt; n &lt;&lt; &quot;\n&quot;; }
    A(int&amp; n)  { std::cout &lt;&lt; &quot;lvalue overload, n=&quot; &lt;&lt; n &lt;&lt; &quot;\n&quot;; }
};

class B {
public:
    template&lt;class T1, class T2, class T3&gt;
    B(T1&amp;&amp; t1, T2&amp;&amp; t2, T3&amp;&amp; t3) :
        a1_{std::forward&lt;T1&gt;(t1)},
        a2_{std::forward&lt;T2&gt;(t2)},
        a3_{std::forward&lt;T3&gt;(t3)}
    {
    }

private:
    A a1_, a2_, a3_;
};

template&lt;class T, class U&gt;
std::unique_ptr&lt;T&gt; make_unique1(U&amp;&amp; u)
{
    return std::unique_ptr&lt;T&gt;(new T(std::forward&lt;U&gt;(u)));
}

template&lt;class T, class... U&gt;
std::unique_ptr&lt;T&gt; make_unique(U&amp;&amp;... u)
{
    return std::unique_ptr&lt;T&gt;(new T(std::forward&lt;U&gt;(u)...));
}

int main()
{   
    auto p1 = make_unique1&lt;A&gt;(2); // rvalue
    int i = 1;
    auto p2 = make_unique1&lt;A&gt;(i); // lvalue

    std::cout &lt;&lt; &quot;B\n&quot;;
    auto t = make_unique&lt;B&gt;(2, i, 3);
}
 | output=
rvalue overload, n=2
lvalue overload, n=1
B
rvalue overload, n=2
lvalue overload, n=1
rvalue overload, n=3
}}

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc move}}
{{dsc inc | cpp/utility/dsc move_if_noexcept}}
{{dsc end}}

[[de:cpp/utility/forward]]
[[es:cpp/utility/forward]]
[[fr:cpp/utility/forward]]
[[it:cpp/utility/forward]]
[[ja:cpp/utility/forward]]
[[pt:cpp/utility/forward]]
[[ru:cpp/utility/forward]]
[[zh:cpp/utility/forward]]</text>
      <sha1>ftdx3izwawu2zx270e8rxrlfyiij45q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/from chars</title>
    <ns>0</ns>
    <id>15734</id>
    <revision>
      <id>92143</id>
      <parentid>89165</parentid>
      <timestamp>2017-04-08T04:30:03Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="5197">{{cpp/title|from_chars}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl | num=1 | since=c++17 |
std::from_chars_result from_chars(const char* first, const char* last,
                                  /*see below*/&amp; value, int base {{=}} 10);
}}
{{dcl | num=2 | since=c++17|
std::from_chars_result from_chars(const char* first, const char* last, float&amp; value,
                                  std::chars_format fmt {{=}} std::chars_format::general);
}}
{{dcl | num=3 | since=c++17|
std::from_chars_result from_chars(const char* first, const char* last, double&amp; value,
                                  std::chars_format fmt {{=}} std::chars_format::general);
}}
{{dcl | num=4 | since=c++17|
std::from_chars_result from_chars(const char* first, const char* last, long double&amp; value,
                                  std::chars_format fmt {{=}} std::chars_format::general);  
}}
{{dcl | num=5 | since=c++17 |
struct from_chars_result {
    const char* ptr;
    std::error_code ec;
};
}}
{{dcl end}}

Analyzes the character sequence {{tt|[first,last)}} for a pattern described below. If no characters match the pattern or if the value obtained by parsing the matched characters is not representable in the type of {{tt|value}}, {{tt|value}} is unmodified, otherwise the characters matching the pattern are interpreted as a text representation of an arithmetic value, which is stored in {{tt|value}}.

@1@ Integer parsers: Expects the pattern identical to the one used by {{lc|std::strtol}} in the default (&quot;C&quot;) locale and the given non-zero numeric base, except that &quot;0x&quot; or &quot;0X&quot; prefixes are not recognized for base 16, and that only the minus sign is recognized (not the plus sign), and only for signed integer types of {{tt|value}}. Digits in the range {{tt|10..35}} (inclusive) are represented as lowercase characters {{tt|a..z}} (uppercase digits are not recognized). The library provides overloads for all signed and unsigned integer types and {{tt|char}} as the referenced type of the parameter {{tt|value}}.

@2-4@ Floating-point parsers: Expects the pattern identical to the one used by {{lc|std::strtod}} in the default (&quot;C&quot;) locale, except that
* the plus sign is not recognized (only the minus sign is permitted)
* if {{tt|fmt}} has {{ltt|cpp/utility/chars_format|std::chars_format::scientific}} set but not {{ltt|cpp/utility/chars_format|std::chars_format::fixed}}, the exponent part is required (otherwise it is optional)
* if {{tt|fmt}} has {{ltt|cpp/utility/chars_format|std::chars_format::fixed}} set but not {{ltt|cpp/utility/chars_format|std::chars_format::scientific}}, the optional exponent is not permitted
* if {{tt|fmt}} is {{ltt|cpp/utility/chars_format|std::chars_format::hex}}, the prefix &quot;0x&quot; or &quot;0X&quot; is not permitted (the string &quot;0x123&quot; parses as the value &quot;0&quot; with unparsed remainder &quot;x123&quot;).
&lt;!----&gt;
In any case, the resulting value is one of at most two floating-point values closest to the value of the string matching the pattern.

@5@ The return type (see Return value below)

===Parameters===
{{par begin}}
{{par | first, last | valid character range to parse}}
{{par | value | the out-parameter where the parsed value is stored if successful}}
{{par | base | integer base to use: a value between 2 and 36 (inclusive).}}
{{par | fmt | floating-point formatting to use, a bitmask of type    {{ltt|cpp/utility/chars_format|std::chars_format}}}}
{{par end}}

===Return value===
On success, returns a value of type {{tt|from_chars_result}} such that {{tt|ptr}} points at the first character not matching the pattern, or has the value equal to {{tt|last}} if all characters match and {{tt|ec}} is {{tt|false}} when converted to {{tt|bool}}.

If there is no pattern match, returns a value of type {{tt|from_chars_result}} such that {{tt|ptr}} equals {{tt|first}} and {{tt|ec}} equals {{lc|std::errc::invalid_argument}}. {{tt|value}} is unmodified.

If the pattern was matched, but the parsed value is not in the range representable by the type of {{tt|value}}, returns  value of type {{tt|from_chars_result}} such that {{tt|ec}} equals {{lc|std::errc::result_out_of_range}} and {{tt|ptr}} points at the first character not matching the pattern. {{tt|value}} is unmodified.

===Exceptions===
(none)

===Notes===
Unlike other parsing functions in C++ and C libraries, {{tt|std::from_chars}} is locale-independent, non-allocating, and non-throwing. Only a small subset of parsing policies used by other libraries (such as {{lc|std::sscanf}}) is provided. This is intended to allow the fastest possible implementation that is useful in common high-throughput contexts such as text-based interchange (JSON or XML).

The guarantee that {{lc|std::from_chars}} can recover every floating-point value formatted by {{tt|to_chars}} exactly is only provided if both functions are from the same implementation.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc stol}}
{{dsc inc | cpp/string/basic_string/dsc stof}}
{{dsc inc | cpp/string/byte/dsc strtol}}
{{dsc inc | cpp/string/byte/dsc strtof}}
{{dsc inc | cpp/io/c/dsc fscanf}}
{{dsc inc | cpp/io/basic_istream/dsc operator_gtgt}}
{{dsc end}}

{{langlinks|zh}}</text>
      <sha1>m4tasskozwj3abc9m7poa0m3nolbujh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional</title>
    <ns>0</ns>
    <id>2065</id>
    <revision>
      <id>90818</id>
      <parentid>87886</parentid>
      <timestamp>2017-03-11T16:44:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Searchers */ drop make_ functions, which are gone</comment>
      <text xml:space="preserve" bytes="4404">{{title|Function objects}}
{{cpp/utility/functional/navbar}}

A ''function object'' is any object for which the function call operator is defined.  C++ provides many built-in function objects as well as support for creation and manipulation of new function objects.

===Polymorphic function wrappers===

{{lc|std::function}} provides support for storing arbitrary function objects.

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc mem_fn}}
{{dsc inc | cpp/utility/functional/dsc bad_function_call}}
{{dsc inc | cpp/utility/functional/dsc invoke}}
{{dsc end}}

===Bind===

{{lc|std::bind}} provides support for [[enwiki:Partial_application|partial function application]], i.e. binding arguments to functions to produce new functions. 

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bind}}
{{dsc inc | cpp/utility/functional/dsc is_bind_expression}}
{{dsc inc | cpp/utility/functional/dsc is_placeholder}}
{{dsc namespace | std::placeholders }}
{{dsc inc | cpp/utility/functional/dsc placeholders}}
{{dsc end}}

=== Negators ===
{{lc|std::not_fn}} creates a function object that negates the result of the callable object passed to it.

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc not_fn}}
{{dsc inc | cpp/utility/functional/dsc unary_negate}}
{{dsc inc | cpp/utility/functional/dsc binary_negate}}
{{dsc inc | cpp/utility/functional/dsc not1}}
{{dsc inc | cpp/utility/functional/dsc not2}}
{{dsc end }}

=== Searchers ===
Searchers implementing several string searching algorithms are provided and can be used either directly or with {{lc|std::search}}.

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc default_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_searcher }}
{{dsc inc | cpp/utility/functional/dsc boyer_moore_horspool_searcher }}
{{dsc end}}

===Reference wrappers===

Reference wrappers allow reference arguments to be stored in copyable function objects:

{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc reference_wrapper}}
{{dsc inc | cpp/utility/functional/dsc ref}}
{{dsc end}}

===Operator function objects===

C++ defines several function objects that represent common arithmetic and logical operations:

{{dsc begin}}
{{dsc h2 | Arithmetic operations}}
{{dsc inc | cpp/utility/functional/dsc plus}}
{{dsc inc | cpp/utility/functional/dsc minus}}
{{dsc inc | cpp/utility/functional/dsc multiplies}}
{{dsc inc | cpp/utility/functional/dsc divides}}
{{dsc inc | cpp/utility/functional/dsc modulus}}
{{dsc inc | cpp/utility/functional/dsc negate}}

{{dsc h2 | Comparisons }}
{{dsc inc | cpp/utility/functional/dsc equal_to}}
{{dsc inc | cpp/utility/functional/dsc not_equal_to}}
{{dsc inc | cpp/utility/functional/dsc greater}}
{{dsc inc | cpp/utility/functional/dsc less}}
{{dsc inc | cpp/utility/functional/dsc greater_equal}}
{{dsc inc | cpp/utility/functional/dsc less_equal}}

{{dsc h2 | Logical operations }}
{{dsc inc | cpp/utility/functional/dsc logical_and}}
{{dsc inc | cpp/utility/functional/dsc logical_or}}
{{dsc inc | cpp/utility/functional/dsc logical_not}}

{{dsc h2 | Bitwise operations }}
{{dsc inc | cpp/utility/functional/dsc bit_and}}
{{dsc inc | cpp/utility/functional/dsc bit_or}}
{{dsc inc | cpp/utility/functional/dsc bit_xor}}
{{dsc inc | cpp/utility/functional/dsc bit_not}}
{{dsc end }}

===Old binders and adaptors===

Several utilities that provided early functional support are deprecated in C++11 and removed in C++17:

{{dsc begin}}
{{dsc h2 | Base}}
{{dsc inc | cpp/utility/functional/dsc unary_function}}
{{dsc inc | cpp/utility/functional/dsc binary_function}}

{{dsc h2 | Binders}}
{{dsc inc | cpp/utility/functional/dsc binder12}}
{{dsc inc | cpp/utility/functional/dsc bind12}}

{{dsc h2 | Function adaptors}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_unary_function}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_binary_function}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_t}}
{{dsc inc | cpp/utility/functional/dsc mem_fun}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_ref_t}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_ref}}
{{dsc end}}

[[de:cpp/utility/functional]]
[[es:cpp/utility/functional]]
[[fr:cpp/utility/functional]]
[[it:cpp/utility/functional]]
[[ja:cpp/utility/functional]]
[[pt:cpp/utility/functional]]
[[ru:cpp/utility/functional]]
[[zh:cpp/utility/functional]]</text>
      <sha1>fhziu1aof6z2we8fqt5zakn6d1xebaw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bad function call</title>
    <ns>0</ns>
    <id>3451</id>
    <revision>
      <id>91745</id>
      <parentid>88914</parentid>
      <timestamp>2017-03-31T19:56:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1591">{{cpp/title|bad_function_call}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional}}
{{dcl | since=c++11 | 1=
class bad_function_call;
}}
{{dcl end}}

{{tt|std::bad_function_call}} is the type of the exception thrown by [[cpp/utility/functional/function/operator()| {{tt|std::function::operator()}} ]] if the function wrapper has no target.

{{inheritance diagram/std-bad_function_call}}
===Member functions===
{{dsc begin}}
{{dsc mem ctor | bad_function_call() | nolink=true | constructs the bad_function_call object}}
{{dsc end}}

{{member | {{small|std::bad_function_call::}}bad_function_call() | 2=
{{ddcl | 1=
bad_function_call();
}}

Constructs a new instance of {{tt|std::bad_function_call}}.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

}}

{{cpp/error/exception/inherit}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;functional&gt;

int main()
{
    std::function&lt;int()&gt; f = nullptr;
    try {
        f();
    } catch(const std::bad_function_call&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
|p=true
 | output=
bad function call
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc end}}

[[de:cpp/utility/functional/bad function call]]
[[es:cpp/utility/functional/bad function call]]
[[fr:cpp/utility/functional/bad function call]]
[[it:cpp/utility/functional/bad function call]]
[[ja:cpp/utility/functional/bad function call]]
[[pt:cpp/utility/functional/bad function call]]
[[ru:cpp/utility/functional/bad function call]]
[[zh:cpp/utility/functional/bad function call]]</text>
      <sha1>mjgng5ct5rdcubrspwuwx8a3ecw5dl5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/binary function</title>
    <ns>0</ns>
    <id>5156</id>
    <revision>
      <id>81324</id>
      <parentid>73933</parentid>
      <timestamp>2015-10-18T18:35:40Z</timestamp>
      <contributor>
        <username>Kitsu</username>
        <id>3751</id>
      </contributor>
      <minor/>
      <comment>Not full output</comment>
      <text xml:space="preserve" bytes="2782">{{cpp/title|binary_function}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since c++11}} | 1=
template&lt;
    class Arg1,
    class Arg2, 
    class Result
&gt; struct binary_function;
}}
{{dcl end}}

{{tt|binary_function}} is a base class for creating function objects with two arguments.

{{tt|binary_function}} does not define {{c|operator()}}; it is expected that derived classes will define this. {{tt|binary_function}} provides only three types - {{tt|first_argument_type}}, {{tt|second_argument_type}} and {{tt|result_type}} - defined by the template parameters.

Some standard library function object adaptors, such as {{lc|std::not2}}, require the function objects they adapt to have certain types defined; {{lc|std::not2}} requires the function object being adapted to have two types named {{tt|first_argument_type}} and {{tt|second_argument_type}}. Deriving function objects that take two arguments from {{tt|binary_function}} is an easy way to make them compatible with those adaptors.

{{tt|binary_function}} is deprecated in C++11 and removed in C++17.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|first_argument_type}} | {{tt|Arg1}} }}
{{dsc | {{tt|second_argument_type}} | {{tt|Arg2}} }}
{{dsc | {{tt|result_type}} | {{tt|Result}} }}
{{dsc end}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct same : std::binary_function&lt;int, int, bool&gt;
{
    bool operator()(int a, int b) const { return a == b; }
};

int main()
{
    std::vector&lt;int&gt; v1{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::vector&lt;int&gt; v2{10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
    std::vector&lt;bool&gt; v3(v1.size());
    
    std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), std::not2(same()));
    
    std::cout &lt;&lt; std::boolalpha;
    for (std::size_t i = 0; i &lt; v1.size(); ++i)
        std::cout &lt;&lt; v1[i] &lt;&lt; ' ' &lt;&lt; v2[i] &lt;&lt; ' ' &lt;&lt; v3[i] &lt;&lt; '\n';
}
 | output=
0 10 true
1 9 true
2 8 true
3 7 true
4 6 true
5 5 false
6 4 true
7 3 true
8 2 true
9 1 true
10 0 true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_binary_function}}
{{dsc inc | cpp/utility/functional/dsc unary_function}}
{{dsc end}}

[[de:cpp/utility/functional/binary function]]
[[es:cpp/utility/functional/binary function]]
[[fr:cpp/utility/functional/binary function]]
[[it:cpp/utility/functional/binary function]]
[[ja:cpp/utility/functional/binary function]]
[[pt:cpp/utility/functional/binary function]]
[[ru:cpp/utility/functional/binary function]]
[[zh:cpp/utility/functional/binary function]]</text>
      <sha1>6q9bi79ruxn7musp9qkpcg64lo28fmz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/binary negate</title>
    <ns>0</ns>
    <id>5162</id>
    <revision>
      <id>83680</id>
      <parentid>66308</parentid>
      <timestamp>2016-03-07T14:11:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated in 17</comment>
      <text xml:space="preserve" bytes="5037">{{cpp/title|binary_negate}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++11 |
template&lt; class Predicate &gt;
struct binary_negate :
    public std::binary_function&lt;
        Predicate::first_argument_type,
        Predicate::second_argument_type,
        bool
    &gt;;
}}
{{dcl | since=c++11 |notes={{mark|deprecated in C++17}}|
template&lt; class Predicate &gt;
struct binary_negate;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|binary_negate}} is a wrapper function object returning the complement of the binary predicate it holds.

The binary predicate type must define two member types, {{tt|first_argument_type}} and {{tt|second_argument_type}}, that are convertible to the predicate's parameter types. The function objects obtained from {{lc|std::owner_less}}, {{lc|std::ref}}, {{lc|std::cref}}, {{lc|std::plus}}, {{lc|std::minus}}, {{lc|std::multiplies}}, {{lc|std::divides}}, {{lc|std::modulus}}, {{lc|std::equal_to}}, {{lc|std::not_equal_to}}, {{lc|std::greater}}, {{lc|std::less}}, {{lc|std::greater_equal}}, {{lc|std::less_equal}}, {{lc|std::logical_not}}, {{lc|std::logical_or}}, {{lc|std::bit_and}}, {{lc|std::bit_or}}, {{lc|std::bit_xor}}, {{lc|std::mem_fn}}, {{lc|std::map::value_comp}}, {{lc|std::multimap::value_comp}}, {{lc|std::function}}, or from a call to {{lc|std::not2}} have these types defined, as are function objects derived from the deprecated {{lc|std::binary_function}}. 

{{tt|binary_negate}} objects are easily constructed with helper function {{lc|std::not2}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|first_argument_type}} | {{c|Predicate::first_argument_type}} }}
{{dsc | {{tt|second_argument_type}} | {{c|Predicate::second_argument_type}} }}
{{dsc | {{tt|result_type}} | {{c|bool}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | nolink=true | constructs a new binary_negate object with the supplied predicate}}
{{dsc mem fun | operator() | nolink=true | returns the logical complement of the result of a call to the stored predicate}}
{{dsc end}}

{{member | {{small|std::binary_negate::}}binary_negate | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
explicit binary_negate( Predicate const&amp; pred );
}}
{{dcl |since=c++14|
explicit constexpr binary_negate( Predicate const&amp; pred );
}}
{{dcl rev end}}
{{dcl end}}

Constructs a {{tt|binary_negate}} function object with the stored predicate {{tt|pred}}.

===Parameters===
{{par begin}}
{{par | pred | predicate function object}}
{{par end}}
}}

{{member | {{small|std::binary_negate::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( first_argument_type const&amp; x,
                 second_argument_type const&amp; y ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( first_argument_type const&amp; x,
                           second_argument_type const&amp; y ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the logical complement of the result of calling  {{c|pred(x, y)}}.

===Parameters===
{{par begin}}
{{par | x | first argument to pass through to predicate}}
{{par | y | second argument to pass through to predicate}}
{{par end}}

===Return value===
The logical complement of the result of calling {{c|pred(x, y)}}.

}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct same : std::binary_function&lt;int, int, bool&gt;
{
    bool operator()(int a, int b) const { return a == b; }
};

int main()
{
    std::vector&lt;int&gt; v1;
    std::vector&lt;int&gt; v2;
    for (int i = 0; i &lt; 10; ++i) v1.push_back(i);
    for (int i = 0; i &lt; 10; ++i) v2.push_back(10 - i);
    
    std::vector&lt;bool&gt; v3(v1.size());
    
    std::binary_negate&lt;same&gt; not_same((same()));
    
    std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), not_same);
    
    /* C++11 solution:
        // Use std::function&lt;bool (int, int)&gt;
        std::function&lt;bool (int, int)&gt; not_same =
            [](int x, int y)-&gt;bool{ return !same()(x, y); };
        
        std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), not_same);
    */
    
    std::cout.setf(std::ios_base::boolalpha);
    for (int i = 0; i &lt; 10; ++i)
        std::cout &lt;&lt; v1[i] &lt;&lt; ' ' &lt;&lt; v2[i] &lt;&lt; ' ' &lt;&lt; v3[i] &lt;&lt; '\n';
}
 | output=
0 10 true
1 9 true
2 8 true
3 7 true
4 6 true
5 5 false
6 4 true
7 3 true
8 2 true
9 1 true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc binary_function}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc not2}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc unary_negate}}
{{dsc end}}

[[de:cpp/utility/functional/binary negate]]
[[es:cpp/utility/functional/binary negate]]
[[fr:cpp/utility/functional/binary negate]]
[[it:cpp/utility/functional/binary negate]]
[[ja:cpp/utility/functional/binary negate]]
[[pt:cpp/utility/functional/binary negate]]
[[ru:cpp/utility/functional/binary negate]]
[[zh:cpp/utility/functional/binary negate]]</text>
      <sha1>8la8blsogzewmkqpr6d6ubiu157c85c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bind</title>
    <ns>0</ns>
    <id>4161</id>
    <revision>
      <id>87210</id>
      <parentid>87180</parentid>
      <timestamp>2016-08-03T04:26:09Z</timestamp>
      <contributor>
        <ip>104.175.206.102</ip>
      </contributor>
      <comment>Fix typo in explanation comment</comment>
      <text xml:space="preserve" bytes="8278">{{cpp/title|bind}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++11 | num=1|
template&lt; class F, class... Args &gt;
/*unspecified*/ bind( F&amp;&amp; f, Args&amp;&amp;... args );
}}
{{dcl | since=c++11 | num=2|
template&lt; class R, class F, class... Args &gt;
/*unspecified*/ bind( F&amp;&amp; f, Args&amp;&amp;... args );
}}
{{dcl end}}

The function template {{tt|bind}} generates a forwarding call wrapper for {{tt|f}}. Calling this wrapper is equivalent to invoking {{tt|f}} with some of its arguments bound to {{tt|args}}. 

===Parameters===
{{par begin}}
{{par | f | {{concept|Callable}} object (function object, pointer to function, reference to function, pointer to member function, or pointer to data member) that will be bound to some arguments}}
{{par | args | list of arguments to bind, with the unbound arguments replaced by the placeholders {{tt|_1, _2, _3...}} of namespace {{tt|std::placeholders}} }}
{{par end}}

===Return value===
A function object of unspecified type {{tt|T}}, for which {{c|1=std::is_bind_expression&lt;T&gt;::value == true}}. It has the following members:

{{member | {{small|std::bind}} ''return type'' | 2=

====Member objects====
The return type of {{tt|std::bind}} holds a member object of type {{c|std::decay&lt;F&gt;::type}} constructed from {{c|std::forward&lt;F&gt;(f)}}, and one object per each of {{tt|args...}}, of type {{c|std::decay&lt;Arg_i&gt;::type}}, similarly constructed from {{c|std::forward&lt;Arg_i&gt;(arg_i)}}.

====Constructors====
The return type of {{tt|std::bind}} is {{concept|CopyConstructible}} if all of its member objects (specified above) are CopyConstructible, and is {{concept|MoveConstructible}} otherwise. The type defines the following members:

====Member type {{tt|result_type}}====

1) {{mark|deprecated in C++17}} If {{tt|F}} is a pointer to function or a pointer to member function, {{tt|result_type}} is the return type of {{tt|F}}. If {{tt|F}} is a class type with nested typedef {{tt|result_type}}, then {{tt|result_type}} is {{tt|F::result_type}}.  Otherwise no {{tt|result_type}} is defined.

2) {{mark|deprecated in C++17}} {{tt|result_type}} is exactly {{tt|R}}.

====Member function {{tt|operator()}}====

Given an object {{tt|g}} obtained from an earlier call to {{tt|bind}}, when it is invoked in a function call expression {{c|g(u1, u2, ... uM)}}, an invocation of the stored object takes place, as if by {{c|std::invoke(fd, std::forward&lt;V1&gt;(v1), std::forward&lt;V2&gt;(v2), ..., std::forward&lt;VN&gt;(vN))}}, where {{tt|fd}} is a value of type {{c|std::decay_t&lt;F&gt;}} the values and types of the bound arguments {{tt|v1, v2, ..., vN}} are determined as specified below.

* If the stored argument {{tt|arg}} is of type {{c|std::reference_wrapper&lt;T&gt;}} (for example, {{lc|std::ref}} or {{lc|std::cref}} was used in the initial call to {{tt|bind}}), then the argument {{tt|vn}} in the {{tt|std::invoke}} call above is {{tt|arg.get()}} and the type {{tt|Vn}} in the same call is {{tt|T&amp;}}: the stored argument is passed by reference into the invoked function object.
* If the stored argument {{tt|arg}} is of type {{tt|T}} for which {{c|1=std::is_bind_expression&lt;T&gt;::value == true}} (for example, another {{tt|bind}} expression was passed directly into the initial call to {{tt|bind}}), then {{tt|bind}} performs function composition: instead of passing the function object that the bind subexpression would return, the subexpression is invoked eagerly, and its return value is passed to the outer invokable object. If the bind subexpression has any placeholder arguments, they are shared with the outer bind (picked out of {{tt|u1, u2, ...}}). Specifically, the argument {{tt|vn}} in the {{tt|std::invoke}} call above is {{tt|arg(std::forward&lt;Uj&gt;(uj)...)}} and the type {{tt|Vn}} in the same call is {{c|std::result_of_t&lt;T cv &amp;(Uj&amp;&amp;...)&gt;&amp;&amp;}} (cv qualification is the same as that of {{tt|g}}).
* If the stored argument {{tt|arg}} is of type {{tt|T}}, for which {{c|1=std::is_placeholder&lt;T&gt;::value != 0}} (meaning, a placeholder such as {{tt|std::placeholders::_1, _2, _3, ...}} was used as the argument to the initial call to {{tt|bind}}), then the argument indicated by the placeholder ({{tt|u1}} for {{tt|_1}}, {{tt|u2}} for {{tt|_2}}, etc) is passed to the invokable object: the argument {{tt|vn}} in the {{tt|std::invoke}} call above is {{c|std::forward&lt;Uj&gt;(uj)}} and the corresponding type {{tt|Vn}} in the same call is {{c|Uj&amp;&amp;}}.
* Otherwise, the ordinary stored argument {{tt|arg}} is passed to the invokable object as lvalue argument: the argument {{tt|vn}} in the {{tt|std::invoke}} call above is simply {{tt|arg}} and the corresponding type {{tt|Vn}} is {{tt|T cv &amp;}}, where cv is the same cv-qualification as that of {{tt|g}}.

If some of the arguments that are supplied in the call to {{tt|g()}} are not matched by any placeholders stored in {{tt|g}}, the unused arguments are evaluated and discarded.

If {{tt|g}} is volatile-qualified (i.e., its cv-qualifiers are either {{c|volatile}} or {{c|const volatile}}), the behavior is undefined.
}}

===Exceptions===
Only throws if construction of {{c|std::decay&lt;F&gt;::type}} from {{c|std::forward&lt;F&gt;(f)}} throws, or any of the constructors for {{c|std::decay&lt;Arg_i&gt;::type}} from the corresponding {{c|std::forward&lt;Arg_i&gt;(arg_i)}} throws where {{tt|Arg_i}} is the ith type and {{tt|arg_i}} is the ith argument in {{tt|Args... args}}.

===Notes===
As described in {{concept|Callable}}, when invoking a pointer to non-static member function or pointer to non-static data member, the first argument has to be a reference or pointer (including, possibly, smart pointer such as {{lc|std::shared_ptr}} and {{lc|std::unique_ptr}}) to an object whose member will be accessed.

The arguments to bind are copied or moved, and are never passed by reference unless wrapped in {{lc|std::ref}} or {{lc|std::cref}}.

Duplicate placeholders in the same bind expression (multiple {{tt|_1}}'s for example) are allowed, but the results are only well defined if the corresponding argument ({{tt|u1}}) is an lvalue or non-movable rvalue.

===Example===
{{example
 |
 | code=
#include &lt;random&gt;
#include &lt;iostream&gt;
#include &lt;memory&gt;
#include &lt;functional&gt;

void f(int n1, int n2, int n3, const int&amp; n4, int n5)
{
    std::cout &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; ' ' &lt;&lt; n3 &lt;&lt; ' ' &lt;&lt; n4 &lt;&lt; ' ' &lt;&lt; n5 &lt;&lt; '\n';
}

int g(int n1)
{
    return n1;
}

struct Foo {
    void print_sum(int n1, int n2)
    {
        std::cout &lt;&lt; n1+n2 &lt;&lt; '\n';
    }
    int data = 10;
};

int main()
{
    using namespace std::placeholders;  // for _1, _2, _3...

    // demonstrates argument reordering and pass-by-reference
    int n = 7;
    // (_1 and _2 are from std::placeholders, and represent future
    // arguments that will be passed to f1)
    auto f1 = std::bind(f, _2, _1, 42, std::cref(n), n);
    n = 10;
    f1(1, 2, 1001); // 1 is bound by _1, 2 is bound by _2, 1001 is unused
                    // makes a call to f(2, 1, 42, n, 7)

    // nested bind subexpressions share the placeholders
    auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5);
    f2(10, 11, 12);

    // common use case: binding a RNG with a distribution
    std::default_random_engine e;
    std::uniform_int_distribution&lt;&gt; d(0, 10);
    std::function&lt;int()&gt; rnd = std::bind(d, e); // a copy of e is stored in rnd
    for(int n=0; n&lt;10; ++n)
        std::cout &lt;&lt; rnd() &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
 
    // bind to a pointer to member function
    Foo foo;
    auto f3 = std::bind(&amp;Foo::print_sum, &amp;foo, 95, _1);
    f3(5);

    // bind to a pointer to data member
    auto f4 = std::bind(&amp;Foo::data, _1);
    std::cout &lt;&lt; f4(foo) &lt;&lt; '\n';

    // smart pointers can be used to call members of the referenced objects, too
    std::cout &lt;&lt; f4(std::make_shared&lt;Foo&gt;(foo)) &lt;&lt; '\n'
              &lt;&lt; f4(std::make_unique&lt;Foo&gt;(foo)) &lt;&lt; '\n';
}
 | output=
2 1 42 10 7
12 12 12 4 5
1 5 0 2 0 8 2 2 10 8
100
10
10
10
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc placeholders}}
{{dsc inc | cpp/utility/functional/dsc mem_fn}}
{{dsc end}}

[[de:cpp/utility/functional/bind]]
[[es:cpp/utility/functional/bind]]
[[fr:cpp/utility/functional/bind]]
[[it:cpp/utility/functional/bind]]
[[ja:cpp/utility/functional/bind]]
[[pt:cpp/utility/functional/bind]]
[[ru:cpp/utility/functional/bind]]
[[zh:cpp/utility/functional/bind]]</text>
      <sha1>7l2o2ymq0pyw64jq3l1o5omi3hqj3vr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bind12</title>
    <ns>0</ns>
    <id>5480</id>
    <revision>
      <id>85696</id>
      <parentid>79288</parentid>
      <timestamp>2016-05-03T08:09:02Z</timestamp>
      <contributor>
        <username>Choiminq</username>
        <id>5305</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2277">{{cpp/title | bind1st | bind2nd}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 |
template&lt; class F, class T &gt;
std::binder1st&lt;F&gt; bind1st( const F&amp; f, const T&amp; x );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class F, class T &gt;
std::binder2nd&lt;F&gt; bind2nd( const F&amp; f, const T&amp; x );
}}
{{dcl end}}

Binds a given argument {{tt|x}} to a first or second parameter of the given binary function object {{tt|f}}. That is, stores {{tt|x}} within the resulting wrapper, which, if called, passes {{tt|x}} as the first or the second parameter of {{tt|f}}.

1) Binds the first argument of {{tt|f}} to {{tt|x}}. Effectively calls {{c|std::binder1st&lt;F&gt;(f, typename F::first_argument_type(x))}}.

2) Binds the second argument of {{tt|f}} to {{tt|x}}. Effectively calls {{c|std::binder2nd&lt;F&gt;(f, typename F::second_argument_type(x))}}.

===Parameters===
{{par begin}}
{{par | f | pointer to a function to bind an argument to}}
{{par | x | argument to bind to {{tt|f}}}}
{{par end}}

===Return value===
A function object wrapping {{tt|f}} and {{tt|x}}.

===Exceptions===
(none)

===Example===
{{example|code=
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;cmath&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt;double&gt; a= {0, 30, 45, 60, 90, 180};
    std::vector&lt;double&gt; r(a.size());
    double pi = std::acos(-1);

    std::transform(a.begin(), a.end(), r.begin(),
        std::bind1st(std::multiplies&lt;double&gt;(), pi / 180.));
// equivalent lambda: [pi](double a){ return a*pi/180.; });

    for(size_t n = 0; n &lt; a.size(); ++n)
        std::cout &lt;&lt; a[n] &lt;&lt; &quot; deg = &quot; &lt;&lt; r[n] &lt;&lt; &quot; rad\n&quot;;
}
|output=
0 deg = 0 rad
30 deg = 0.523599 rad
45 deg = 0.785398 rad
60 deg = 1.0472 rad
90 deg = 1.5708 rad
180 deg = 3.14159 rad
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc binder12}}
{{dsc end}}

[[de:cpp/utility/functional/bind12]]
[[es:cpp/utility/functional/bind12]]
[[fr:cpp/utility/functional/bind12]]
[[it:cpp/utility/functional/bind12]]
[[ja:cpp/utility/functional/bind12]]
[[pt:cpp/utility/functional/bind12]]
[[ru:cpp/utility/functional/bind12]]
[[zh:cpp/utility/functional/bind12]]</text>
      <sha1>jdpxgmvgtzuphwg9q0lr80o6aeik7cs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/binder12</title>
    <ns>0</ns>
    <id>10176</id>
    <revision>
      <id>73944</id>
      <parentid>59552</parentid>
      <timestamp>2014-11-24T20:25:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in C++17</comment>
      <text xml:space="preserve" bytes="2029">{{cpp/title | binder1st | binder2nd}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 | 
template&lt; class Fn &gt;
class binder1st : public std::unary_function&lt;typename Fn::second_argument_type, 
                                             typename Fn::result_type&gt; {
protected:
    
    Fn op;
    typename Fn::first_argument_type value;

public:

    binder1st(const Fn&amp; fn, 
              const typename Fn::first_argument_type&amp; value);

    typename Fn::result_type 
        operator()(const typename Fn::second_argument_type&amp; x) const;

    typename Fn::result_type 
        operator()(typename Fn::second_argument_type&amp; x) const;
};
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class Fn &gt;
class binder2nd : public unary_function&lt;typename Fn::first_argument_type,
                                        typename Fn::result_type&gt; {
protected:
    Fn op;
    typename Fn::second_argument_type value;
public:
    binder2nd(const Fn&amp; fn, 
              const typename Fn::second_argument_type&amp; value);

    typename Fn::result_type 
        operator()(const typename Fn::first_argument_type&amp; x) const;

    typename Fn::result_type 
        operator()(typename Fn::first_argument_type&amp; x) const;
};
}}
{{dcl end}}

A function object that binds an argument to a binary function.

The value of the parameter is passed to the object at the construction time and stored within the object. Whenever the function object is invoked though {{c|operator()}}, the stored value is passed as one of the arguments, the other argument is passed as an argument of {{c|operator()}}. The resulting function object is an unary function.

@1@ Binds the first parameter to the value {{tt|value}} given at the construction of the object.

@2@ Binds the second parameter to the value {{tt|value}} given at the construction of the object.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bind12}}
{{dsc end}}</text>
      <sha1>eu2pmot8ijoap7lk1fmrudh5wm6kgfb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit and</title>
    <ns>0</ns>
    <id>4767</id>
    <revision>
      <id>83707</id>
      <parentid>66293</parentid>
      <timestamp>2016-03-07T14:41:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2091">{{cpp/title|bit_and}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct bit_and;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct bit_and;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing bitwise AND. Effectively calls {{c|operator&amp;}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::bit_and}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bit_and_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the result of bitwise AND of two arguments}}
{{dsc end}}

{{member | {{small|std::bit_and::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the result of bitwise AND of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute bitwise AND of}}
{{par end}}

===Return value===
The result of {{c|lhs &amp; rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs &amp; rhs;
}
}}
}}

[[de:cpp/utility/functional/bit and]]
[[es:cpp/utility/functional/bit and]]
[[fr:cpp/utility/functional/bit and]]
[[it:cpp/utility/functional/bit and]]
[[ja:cpp/utility/functional/bit and]]
[[pt:cpp/utility/functional/bit and]]
[[ru:cpp/utility/functional/bit and]]
[[zh:cpp/utility/functional/bit and]]</text>
      <sha1>qwxefmg4tno7nzca1n8mmzk8x8xmnxa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit and void</title>
    <ns>0</ns>
    <id>13080</id>
    <revision>
      <id>66304</id>
      <timestamp>2013-11-10T02:23:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1055">{{cpp/title|bit_and&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class bit_and&lt;void&gt;;
}}

{{c|std::bit_and&lt;&gt;}} is a specialization of {{lc|std::bit_and}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/bit_and_void | title=operator() | inlinemem=true | applies {{tt|operator&amp;}} to lhs and rhs}}
{{dsc end}}

{{member | {{small|std::bit_and&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) &amp; std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{tt|lhs &amp; rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute bitwise AND for}}
{{par end}}

===Return value===
The result of {{c|lhs &amp; rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>1glharrgyyzf7ejjwl8s6pfltdjfygz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit not</title>
    <ns>0</ns>
    <id>13078</id>
    <revision>
      <id>83710</id>
      <parentid>66303</parentid>
      <timestamp>2016-03-07T14:43:12Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="1732">{{cpp/title|bit_not}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct bit_not;
}}
{{dcl end}}

Function object for performing bitwise NOT. Effectively calls {{c|operator~}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::bit_not}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bit_not_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the result of bitwise NOT of its argument}}
{{dsc end}}

{{member | {{small|std::bit_not::}}operator() | 2=
{{dcl begin}}
{{dcl|
constexpr T operator()( const T&amp; arg ) const;
}}
{{dcl end}}

Returns the result of bitwise NOT of {{tt|arg}}.

===Parameters===
{{par begin}}
{{par | arg | value to compute bitwise NOT of}}
{{par end}}

===Return value===
The result of {{c|~arg}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T&amp; arg) const 
{
    return ~arg;
}
}}
}}

[[de:cpp/utility/functional/bit not]]
[[es:cpp/utility/functional/bit not]]
[[fr:cpp/utility/functional/bit not]]
[[it:cpp/utility/functional/bit not]]
[[ja:cpp/utility/functional/bit not]]
[[pt:cpp/utility/functional/bit not]]
[[ru:cpp/utility/functional/bit not]]
[[zh:cpp/utility/functional/bit not]]</text>
      <sha1>s6lnozov8ksc9h4o6d8hko443we352c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit not void</title>
    <ns>0</ns>
    <id>13079</id>
    <revision>
      <id>66302</id>
      <parentid>66301</parentid>
      <timestamp>2013-11-10T02:21:13Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>stray parentheses</comment>
      <text xml:space="preserve" bytes="998">{{cpp/title|bit_not&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class bit_not&lt;void&gt;;
}}

{{c|std::bit_not&lt;&gt;}} is a specialization of {{lc|std::bit_not}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/bit_not_void | title=operator() | inlinemem=true | applies {{tt|operator~}} to its argument}}
{{dsc end}}

{{member | {{small|std::bit_not&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T &gt;
constexpr auto operator()( T&amp;&amp; arg ) const
  -&gt; decltype(~std::forward&lt;T&gt;(lhs));
}}

Returns the result of {{tt|~arg}}.

===Parameters===
{{par begin}}
{{par | arg | value to apply bitwise NOT to}}
{{par end}}

===Return value===
The result of {{c|~arg}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>c2gff4vghfre58ms2bc463ibn2ssaf8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit or</title>
    <ns>0</ns>
    <id>4768</id>
    <revision>
      <id>83708</id>
      <parentid>66296</parentid>
      <timestamp>2016-03-07T14:42:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2085">{{cpp/title|bit_or}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct bit_or;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct bit_or;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing bitwise OR. Effectively calls {{c|operator{{!}}}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::bit_or}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bit_or_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the result of bitwise OR of two arguments}}
{{dsc end}}

{{member | {{small|std::bit_or::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the result of bitwise OR of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute bitwise OR of}}
{{par end}}

===Return value===
The result of {{c|lhs {{!}} rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs {{!}} rhs;
}
}}
}}

[[de:cpp/utility/functional/bit or]]
[[es:cpp/utility/functional/bit or]]
[[fr:cpp/utility/functional/bit or]]
[[it:cpp/utility/functional/bit or]]
[[ja:cpp/utility/functional/bit or]]
[[pt:cpp/utility/functional/bit or]]
[[ru:cpp/utility/functional/bit or]]
[[zh:cpp/utility/functional/bit or]]</text>
      <sha1>fk2dz7ceioqc0te7qx47lcfokqeesu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit or void</title>
    <ns>0</ns>
    <id>13081</id>
    <revision>
      <id>90482</id>
      <parentid>66305</parentid>
      <timestamp>2017-02-24T16:48:35Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="1152">{{cpp/title|bit_or&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class bit_or&lt;void&gt;;
}}

{{c|std::bit_or&lt;&gt;}} is a specialization of {{lc|std::bit_or}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/bit_or_void | title=operator() | inlinemem=true | applies {{tt|operator&lt;nowiki&gt;|&lt;/nowiki&gt;}} to lhs and rhs}}
{{dsc end}}

{{member | {{small|std::bit_or&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) {{!}} std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{c|std::forward&lt;T&gt;(lhs) {{!}} std::forward&lt;U&gt;(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute bitwise OR for}}
{{par end}}

===Return value===
The result of {{c|std::forward&lt;T&gt;(lhs) {{!}} std::forward&lt;U&gt;(rhs)}}.
}}

===Notes===
{{include|cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>1rx6nbocrcebfr0zljupdyqr6a5cpzk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit xor</title>
    <ns>0</ns>
    <id>4769</id>
    <revision>
      <id>83709</id>
      <parentid>66298</parentid>
      <timestamp>2016-03-07T14:42:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2091">{{cpp/title|bit_xor}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct bit_xor;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct bit_xor;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing bitwise XOR. Effectively calls {{c|operator^}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::bit_xor}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bit_xor_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the result of bitwise XOR of two arguments}}
{{dsc end}}

{{member | {{small|std::bit_xor::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the result of bitwise XOR of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute bitwise XOR of}}
{{par end}}

===Return value===
The result of {{c|lhs ^ rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs ^ rhs;
}
}}
}}

[[de:cpp/utility/functional/bit xor]]
[[es:cpp/utility/functional/bit xor]]
[[fr:cpp/utility/functional/bit xor]]
[[it:cpp/utility/functional/bit xor]]
[[ja:cpp/utility/functional/bit xor]]
[[pt:cpp/utility/functional/bit xor]]
[[ru:cpp/utility/functional/bit xor]]
[[zh:cpp/utility/functional/bit xor]]</text>
      <sha1>pwlkqk30t7ob5vlkntwc05q3b6ttqds</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/bit xor void</title>
    <ns>0</ns>
    <id>13082</id>
    <revision>
      <id>66306</id>
      <timestamp>2013-11-10T02:25:04Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1055">{{cpp/title|bit_xor&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class bit_xor&lt;void&gt;;
}}

{{c|std::bit_xor&lt;&gt;}} is a specialization of {{lc|std::bit_xor}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/bit_xor_void | title=operator() | inlinemem=true | applies {{tt|operator^}} to lhs and rhs}}
{{dsc end}}

{{member | {{small|std::bit_xor&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) ^ std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{tt|lhs ^ rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute bitwise XOR for}}
{{par end}}

===Return value===
The result of {{c|lhs ^ rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>2kwzu2lwgmpzxd6onzux49nhrs7ozr0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/boyer moore horspool searcher</title>
    <ns>0</ns>
    <id>14999</id>
    <revision>
      <id>90831</id>
      <parentid>90828</parentid>
      <timestamp>2017-03-11T17:44:46Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Example */</comment>
      <text xml:space="preserve" bytes="4219">{{cpp/title|boyer_moore_horspool_searcher}}
{{cpp/utility/functional/navbar}}

{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++17 |
template&lt; class RandomIt1,
          class Hash {{=}} std::hash&lt;typename std::iterator_traits&lt;RandomIt1&gt;::value_type&gt;,
          class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
class boyer_moore_horspool_searcher;
}}
{{dcl end}}

A searcher suitable for use with the {{concept|Searcher}} overload of {{lc|std::search}} that implements the [https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore%E2%80%93Horspool_algorithm Boyer-Moore-Horspool string searching algorithm].

{{tt|boyer_moore_horspool_searcher}} is {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

{{tt|RandomIt1}} must meet the requirements of {{concept|RandomAccessIterator}}.

===Member functions===
{{member | {{small|std::boyer_moore_horspool_searcher::}}boyer_moore_horspool_searcher | 2=
{{dcl begin}}
{{dcl | 
boyer_moore_horspool_searcher( RandomIt1 pat_first,
                               RandomIt1 pat_last,
                               Hash hf {{=}} Hash(),
                               BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}
Constructs a {{tt|boyer_moore_horspool_searcher}} by storing copies of {{tt|pat_first}}, {{tt|pat_last}}, {{tt|hf}}, and {{tt|pred}}, setting up any necessary internal data structures. 

The value type of {{tt|RandomIt1}} must be {{concept|DefaultConstructible}}, {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

For any two values {{tt|A}} and {{tt|B}} of the type {{c|std::iterator_traits&lt;RandomIt1&gt;::value_type}}, if {{c|pred(A, B) {{==}} true}}, then {{c|hf(A) {{==}} hf(B)}} shall be {{tt|true}}.

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | hf | a callable object used to hash the elements of the string }}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Exceptions===
Any exceptions thrown by 
* the copy constructor of {{tt|RandomIt1}};
* the default constructor, copy constructor, or copy assignment operator of the value type of {{tt|RandomIt1}}; or
* the copy constructor or function call operator of {{tt|BinaryPredicate}} or {{tt|Hash}}.
May also throw {{lc|std::bad_alloc}} if additional memory required for internal data structures cannot be allocated.
}}

{{member | {{small|std::boyer_moore_horspool_searcher::}}operator() | 2=
{{dcl begin}}
{{dcl |
template&lt; class RandomIt2 &gt;
std::pair&lt;RandomIt2,RandomIt2&gt; operator()( RandomIt2 first, RandomIt2 last ) const;
}}
{{dcl end}}
The member function called by the Searcher overload of {{lc|std::search}} to perform a search with this searcher. {{tt|RandomIt2}} must meet the requirements of {{concept|RandomAccessIterator}}.

{{tt|RandomIt1}} and {{tt|RandomIt2}} must have the same value type.

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators designating the string to be examined}}
{{par end}}

===Return value===
If the pattern ({{math|[pat_first, pat_last)}}) is empty, returns {{tt|make_pair(first, first)}}.

Otherwise, returns a pair of iterators to the first and one past last positions in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or {{tt|make_pair(last, last)}} otherwise.
}}

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;
 
int main()
{
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::search(in.begin(), in.end(),
                   std::boyer_moore_horspool_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}</text>
      <sha1>neis8tbd288czs2y8gsax5xf9v0ya27</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/boyer moore searcher</title>
    <ns>0</ns>
    <id>14998</id>
    <revision>
      <id>90830</id>
      <parentid>90827</parentid>
      <timestamp>2017-03-11T17:44:12Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Example */</comment>
      <text xml:space="preserve" bytes="4114">{{cpp/title|boyer_moore_searcher}}
{{cpp/utility/functional/navbar}}

{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++17 |
template&lt; class RandomIt1,
          class Hash {{=}} std::hash&lt;typename std::iterator_traits&lt;RandomIt1&gt;::value_type&gt;,
          class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
class boyer_moore_searcher;
}}
{{dcl end}}

A searcher suitable for use with the {{concept|Searcher}} overload of {{lc|std::search}} that implements the [https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm Boyer-Moore string searching algorithm].

{{tt|boyer_moore_searcher}} is {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

{{tt|RandomIt1}} must meet the requirements of {{concept|RandomAccessIterator}}.

===Member functions===
{{member | {{small|std::boyer_moore_searcher::}}boyer_moore_searcher | 2=
{{dcl begin}}
{{dcl | 
boyer_moore_searcher( RandomIt1 pat_first,
                      RandomIt1 pat_last,
                      Hash hf {{=}} Hash(),
                      BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}
Constructs a {{tt|boyer_moore_searcher}} by storing copies of {{tt|pat_first}}, {{tt|pat_last}}, {{tt|hf}}, and {{tt|pred}}, setting up any necessary internal data structures. 

The value type of {{tt|RandomIt1}} must be {{concept|DefaultConstructible}}, {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

For any two values {{tt|A}} and {{tt|B}} of the type {{c|std::iterator_traits&lt;RandomIt1&gt;::value_type}}, if {{c|pred(A, B) {{==}} true}}, then {{c|hf(A) {{==}} hf(B)}} shall be {{tt|true}}.

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | hf | a callable object used to hash the elements of the string }}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Exceptions===
Any exceptions thrown by 
* the copy constructor of {{tt|RandomIt1}};
* the default constructor, copy constructor, and copy assignment operator of the value type of {{tt|RandomIt1}}; or
* the copy constructor and function call operator of {{tt|BinaryPredicate}} or {{tt|Hash}}.
May also throw {{lc|std::bad_alloc}} if additional memory required for internal data structures cannot be allocated.
}}

{{member | {{small|std::boyer_moore_searcher::}}operator() | 2=
{{dcl begin}}
{{dcl |since=c++17| 
template&lt; class RandomIt2 &gt;
std::pair&lt;RandomIt2,RandomIt2&gt; operator()( RandomIt2 first, RandomIt2 last ) const;
}}
{{dcl end}}
The member function called by the Searcher overload of {{lc|std::search}} to perform a search with this searcher. {{tt|RandomIt2}} must meet the requirements of {{concept|RandomAccessIterator}}.

{{tt|RandomIt1}} and {{tt|RandomIt2}} must have the same value type.

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators designating the string to be examined}}
{{par end}}

===Return value===
If the pattern ({{math|[pat_first, pat_last)}}) is empty, returns {{tt|make_pair(first, first)}}.

Otherwise, returns a pair of iterators to the first and one past last positions in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or {{tt|make_pair(last, last)}} otherwise.
}}

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;
 
int main()
{
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::search(in.begin(), in.end(),
                   std::boyer_moore_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}</text>
      <sha1>l7escn43d6kjl7n2ss4t5l7971f8c48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/cref</title>
    <ns>0</ns>
    <id>8372</id>
    <redirect title="cpp/utility/functional/ref" />
    <revision>
      <id>29854</id>
      <timestamp>2012-05-03T09:53:43Z</timestamp>
      <contributor>
        <ip>62.159.77.164</ip>
      </contributor>
      <comment>Redirected page to [[cpp/utility/functional/ref]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/utility/functional/ref]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/default searcher</title>
    <ns>0</ns>
    <id>14997</id>
    <revision>
      <id>90829</id>
      <parentid>90826</parentid>
      <timestamp>2017-03-11T17:43:41Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Example */</comment>
      <text xml:space="preserve" bytes="3054">{{cpp/title|default_searcher}}
{{cpp/utility/functional/navbar}}

{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++17 |
template&lt; class ForwardIt, class BinaryPredicate {{=}} std::equal_to&lt;&gt; &gt;
class default_searcher;
}}
{{dcl end}}

A class suitable for use with {{concept|Searcher}} overload of {{lc|std::search}} that delegates the search operation to the pre-C++17 standard library's {{lc|std::search}}.

{{tt|default_searcher}} is {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

===Member functions===
{{member | {{small|std::default_searcher::}}default_searcher | 2=
{{dcl begin}}
{{dcl | 
default_searcher( ForwardIt pat_first,
                  ForwardIt pat_last,
                  BinaryPredicate pred {{=}} BinaryPredicate());
}}
{{dcl end}}
Constructs a {{tt|default_searcher}} by storing copies of {{tt|pat_first}}, {{tt|pat_last}}, and {{tt|pred}} 

===Parameters===
{{par begin}}
{{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}}
{{par | pred | a callable object used to determine equality }}
{{par end}}

===Exceptions===
Any exceptions thrown by the copy constructors of {{tt|BinaryPredicate}} or {{tt|ForwardIt}}.
}}

{{member | {{small|std::default_searcher::}}operator() | 2=
{{dcl begin}}
{{dcl | 
template&lt; class ForwardIt2 &gt;
std::pair&lt;ForwardIt2, ForwardIt2&gt;
    operator()( ForwardIt2 first, ForwardIt2 last ) const;
}}
{{dcl end}}
The member function called by the Searcher overload of {{lc|std::search}} to perform a search with this searcher.

Returns a pair of iterators {{tt|i, j}}, where {{tt|i}} is {{c|std::search(first, last, pat_first, pat_last, pred)}} and {{tt|j}} is {{c|std::next(i, std::distance(pat_first, pat_last))}} unless {{tt|std::search}} returned {{tt|last}} (no match), in which case {{tt|j}} equals {{tt|last}} as well.

===Parameters===
{{par begin}}
{{par | first, last | a pair of iterators designating the string to be examined}}
{{par end}}

===Return value===
A pair of iterators to the first and one past last positions in {{math|[first, last)}} where a subsequence that compares equal to {{math|[pat_first, pat_last)}} as defined by {{tt|pred}} is located, or a pair of copies of {{tt|last}} otherwise.
}}

===Example===
{{example
 |
 |code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;
 
int main()
{
    std::string in = &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit,&quot;
                     &quot; sed do eiusmod tempor incididunt ut labore et dolore magna aliqua&quot;;
    std::string needle = &quot;pisci&quot;;
    auto it = std::search(in.begin(), in.end(),
                   std::default_searcher(
                       needle.begin(), needle.end()));
    if(it != in.end())
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; found at offset &quot;
                  &lt;&lt; it - in.begin() &lt;&lt; '\n';
    else
        std::cout &lt;&lt; &quot;The string &quot; &lt;&lt; needle &lt;&lt; &quot; not found\n&quot;;
}
|output=
The string pisci found at offset 43
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/algorithm/dsc search}}
{{dsc end}}</text>
      <sha1>9nds5j7hxorq9x6eaygjkr1xwqfia4y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/divides</title>
    <ns>0</ns>
    <id>4053</id>
    <revision>
      <id>83695</id>
      <parentid>66245</parentid>
      <timestamp>2016-03-07T14:36:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2128">{{cpp/title|divides}}
{{cpp/utility/functional/navbar}}

{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct divides;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct divides;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing division. Effectively calls {{c|operator/}} on two instances of type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::divides}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc divides_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the result of the division of the first argument by the second argument}}
{{dsc end}}

{{member | {{small|std::divides::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the result of division of {{tt|lhs}} by {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to divide one by other}}
{{par end}}

===Return value===
The result of {{c|lhs / rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs / rhs;
}
}}
}}

[[de:cpp/utility/functional/divides]]
[[es:cpp/utility/functional/divides]]
[[fr:cpp/utility/functional/divides]]
[[it:cpp/utility/functional/divides]]
[[ja:cpp/utility/functional/divides]]
[[pt:cpp/utility/functional/divides]]
[[ru:cpp/utility/functional/divides]]
[[zh:cpp/utility/functional/divides]]</text>
      <sha1>03382lb8rd606hap040sht3kwgjacte</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/divides void</title>
    <ns>0</ns>
    <id>13052</id>
    <revision>
      <id>66275</id>
      <parentid>66236</parentid>
      <timestamp>2013-11-10T01:34:47Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template is_transparent note</comment>
      <text xml:space="preserve" bytes="1103">{{cpp/title|divides&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class divides&lt;void&gt;;
}}

{{c|std::divides&lt;&gt;}} is a specialization of {{lc|std::divides}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/divides_void | title=operator() | inlinemem=true | returns the quotient of two arguments}}
{{dsc end}}

{{member | {{small|std::divides&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) / std::forward&lt;U&gt;(rhs));
}}

Returns the result of dividing {{tt|lhs}} by {{tt|rhs}} (or whatever {{tt|operator/}} is overloaded to do)

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to divide}}
{{par end}}

===Return value===
The result of {{c|lhs / rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>29t4sbfzki7a4t2ffx26oq89s1cgiwk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/equal to</title>
    <ns>0</ns>
    <id>4058</id>
    <revision>
      <id>83697</id>
      <parentid>66248</parentid>
      <timestamp>2016-03-07T14:37:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2121">{{cpp/title|equal_to}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct equal_to;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct equal_to;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing comparisons. Unless specialised, invokes {{c|operator{{==}}}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::equal_to}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc equal_to_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | checks if the arguments are ''equal''}}
{{dsc end}}

{{member | {{small|std::equal_to::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Checks whether {{tt|lhs}} is ''equal'' to {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
{{c|true}} if {{c|1=lhs == rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs == rhs;
}
}}
}}

[[de:cpp/utility/functional/equal to]]
[[es:cpp/utility/functional/equal to]]
[[fr:cpp/utility/functional/equal to]]
[[it:cpp/utility/functional/equal to]]
[[ja:cpp/utility/functional/equal to]]
[[pt:cpp/utility/functional/equal to]]
[[ru:cpp/utility/functional/equal to]]
[[zh:cpp/utility/functional/equal to]]</text>
      <sha1>jn0czmsqw33u5fzv2wf65782wthrhl8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/equal to void</title>
    <ns>0</ns>
    <id>13061</id>
    <revision>
      <id>90480</id>
      <parentid>90479</parentid>
      <timestamp>2017-02-24T16:06:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Member functions */ forward</comment>
      <text xml:space="preserve" bytes="1123">{{cpp/title|equal_to&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class equal_to&lt;void&gt;;
}}

{{c|std::equal_to&lt;&gt;}} is a specialization of {{lc|std::equal_to}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/equal_to_void | title=operator() | inlinemem=true | tests if the two arguments compare equal}}
{{dsc end}}

{{member | {{small|std::equal_to&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) == std::forward&lt;U&gt;(rhs));
}}

Returns the result of equality comparison between {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
The result of {{c|std::forward&lt;T&gt;(lhs) {{==}} std::forward&lt;U&gt;(rhs)}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>8sjis0diffxfvyzd61hgtt4735app6f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function</title>
    <ns>0</ns>
    <id>2698</id>
    <revision>
      <id>91033</id>
      <parentid>87497</parentid>
      <timestamp>2017-03-15T14:27:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4660">{{cpp/title|function}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++11 |
template&lt; class &gt;
class function; /* undefined */
}}
{{dcl | since=c++11 |
template&lt; class R, class... Args &gt;
class function&lt;R(Args...)&gt;;
}}
{{dcl end}}

Class template {{tt|std::function}} is a general-purpose polymorphic function wrapper. Instances of {{tt|std::function}} can store, copy, and invoke any {{concept|Callable}} ''target'' -- functions, [[cpp/language/lambda|lambda expressions]], [[cpp/utility/functional/bind|bind expressions]], or other function objects, as well as pointers to member functions and pointers to data members.

The stored callable object is called the ''target'' of {{tt|std::function}}. If a {{tt|std::function}} contains no target, it is called ''empty''. Invoking the ''target'' of an ''empty'' {{tt|std::function}} results in {{lc|std::bad_function_call}} exception being thrown.

{{tt|std::function}} satisfies the requirements of {{concept|CopyConstructible}} and {{concept|CopyAssignable}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}} | {{tt|R}}}}
{{dsc | {{tt|argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} if {{c|1=sizeof...(Args)==1}} and {{tt|T}} is the first and only type in {{tt|Args...}} }}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T1}} if {{c|1=sizeof...(Args)==2}} and {{tt|T1}} is the first of the two types in {{tt|Args...}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T2}} if {{c|1=sizeof...(Args)==2}} and {{tt|T2}} is the second of the two types in {{tt|Args...}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc constructor}}
{{dsc inc | cpp/utility/functional/function/dsc destructor}}
{{dsc inc | cpp/utility/functional/function/dsc operator{{=}}}}
{{dsc inc | cpp/utility/functional/function/dsc swap}}
{{dsc inc | cpp/utility/functional/function/dsc assign}}
{{dsc inc | cpp/utility/functional/function/dsc operator_bool}}
{{dsc inc | cpp/utility/functional/function/dsc operator()}}

{{dsc h2 | Target access}}
{{dsc inc | cpp/utility/functional/function/dsc target_type}}
{{dsc inc | cpp/utility/functional/function/dsc target}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc swap2}}
{{dsc inc | cpp/utility/functional/function/dsc operator_cmp}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc uses_allocator}}
{{dsc end}}

===Example===
{{example
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;
 
struct Foo {
    Foo(int num) : num_(num) {}
    void print_add(int i) const { std::cout &lt;&lt; num_+i &lt;&lt; '\n'; }
    int num_;
};
 
void print_num(int i)
{
    std::cout &lt;&lt; i &lt;&lt; '\n';
}

struct PrintNum {
    void operator()(int i) const
    {
        std::cout &lt;&lt; i &lt;&lt; '\n';
    }
};
 
int main()
{
    // store a free function
    std::function&lt;void(int)&gt; f_display = print_num;
    f_display(-9);
 
    // store a lambda
    std::function&lt;void()&gt; f_display_42 = []() { print_num(42); };
    f_display_42();
 
    // store the result of a call to std::bind
    std::function&lt;void()&gt; f_display_31337 = std::bind(print_num, 31337);
    f_display_31337();
 
    // store a call to a member function
    std::function&lt;void(const Foo&amp;, int)&gt; f_add_display = &amp;Foo::print_add;
    const Foo foo(314159);
    f_add_display(foo, 1);
   
    // store a call to a data member accessor
    std::function&lt;int(Foo const&amp;)&gt; f_num = &amp;Foo::num_;
    std::cout &lt;&lt; &quot;num_: &quot; &lt;&lt; f_num(foo) &lt;&lt; '\n';
    
    // store a call to a member function and object
    using std::placeholders::_1;
    std::function&lt;void(int)&gt; f_add_display2 = std::bind( &amp;Foo::print_add, foo, _1 );
    f_add_display2(2);
 
    // store a call to a member function and object ptr
    std::function&lt;void(int)&gt; f_add_display3 = std::bind( &amp;Foo::print_add, &amp;foo, _1 );
    f_add_display3(3);

    // store a call to a function object
    std::function&lt;void(int)&gt; f_display_obj = PrintNum();
    f_display_obj(18);
}
 | output=
-9
42
31337
314160
num_: 314159
314161
314162
18
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bad_function_call}}
{{dsc inc | cpp/utility/functional/dsc mem_fn}}
{{dsc end}}

[[de:cpp/utility/functional/function]]
[[es:cpp/utility/functional/function]]
[[fr:cpp/utility/functional/function]]
[[it:cpp/utility/functional/function]]
[[ja:cpp/utility/functional/function]]
[[pt:cpp/utility/functional/function]]
[[ru:cpp/utility/functional/function]]
[[zh:cpp/utility/functional/function]]</text>
      <sha1>fnuzq878f42jafi47x3d61bxpbru2ig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/assign</title>
    <ns>0</ns>
    <id>5069</id>
    <revision>
      <id>81480</id>
      <parentid>61958</parentid>
      <timestamp>2015-10-27T10:20:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG2385</comment>
      <text xml:space="preserve" bytes="1194">{{cpp/utility/functional/function/title | assign}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | until=c++17 |
template&lt; class F, class Alloc &gt;
void assign( F&amp;&amp; f, const Alloc&amp; alloc );
}}
{{dcl end}}

Initializes the ''target'' with {{tt|f}}. {{tt|alloc}} is used to allocate memory for any internal data structures that the {{tt|function}} might use.

Equivalent to {{cc|function(allocator_arg, alloc, std::forward&lt;F&gt;(f)).swap(*this)}}

===Parameters===
{{par begin}}
{{par | f | callable function to initialize the ''target'' with}}
{{par | alloc | allocator to use to allocate memory for the internal data structures}}
{{par end}}

===Return value===
(none)

===Exceptions===
(none)

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc operator{{=}}}}
{{dsc end}}

[[de:cpp/utility/functional/function/assign]]
[[es:cpp/utility/functional/function/assign]]
[[fr:cpp/utility/functional/function/assign]]
[[it:cpp/utility/functional/function/assign]]
[[ja:cpp/utility/functional/function/assign]]
[[pt:cpp/utility/functional/function/assign]]
[[ru:cpp/utility/functional/function/assign]]
[[zh:cpp/utility/functional/function/assign]]</text>
      <sha1>qtl5xtjczd3hx5nwjk064lac9qw94l2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/function</title>
    <ns>0</ns>
    <id>5229</id>
    <revision>
      <id>91668</id>
      <parentid>91284</parentid>
      <timestamp>2017-03-31T19:54:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3735">{{cpp/utility/functional/function/title | function}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
function();
}}
{{dcl | num=2 | since=c++11 |
function( std::nullptr_t );
}}
{{dcl | num=3 | since=c++11 |
function( const function&amp; other );
}}
{{dcl | num=4 | since=c++11 |
function( function&amp;&amp; other );
}}
{{dcl | num=5 | since=c++11 |
template&lt; class F &gt; 
function( F f );
}}
{{dcl | num=6 | since=c++11 | until=c++17 |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc );
}}
{{dcl | num=7 | since=c++11 | until=c++17 |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, 
          std::nullptr_t );
}}
{{dcl | num=8 | since=c++11 | until=c++17 |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, 
          const function&amp; other );
}}
{{dcl | num=9 | since=c++11 | until=c++17 |
template&lt; class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, 
          function&amp;&amp; other );
}}
{{dcl | num=10 | since=c++11 | until=c++17 |
template&lt; class F, class Alloc &gt; 
function( std::allocator_arg_t, const Alloc&amp; alloc, F f );
}}
{{dcl end}}

Constructs a {{tt|std::function}} from a variety of sources.

@1-2@ Creates an ''empty'' function.

@3-4@ Copies {{v|3}} or moves {{v|4}} the ''target'' of {{tt|other}} to the ''target'' of {{c|*this}}. If {{tt|other}} is ''empty'', {{c|*this}} will be ''empty'' after the call too. For {{v|4}}, {{tt|other}} is in a valid but unspecified state after the call.

@5@ Initializes the ''target'' with a copy of {{tt|f}}. If {{tt|f}} is a null pointer to function or null pointer to member, {{c|*this}} will be ''empty'' after the call. {{rev inl|since=c++14|This constructor does not participate in overload resolution unless f is {{concept|Callable}} for argument types {{tt|Args...}} and return type {{tt|R}}.}}

@6-10@ Same as {{v|1-5}} except that {{tt|alloc}} is used to allocate memory for any internal data structures that the {{tt|function}} might use.

When the ''target'' is a function pointer or a {{lc|std::reference_wrapper}}, small object optimization is guaranteed, that is, these targets are always directly stored inside the {{lc|std::function}} object, no dynamic allocation takes place. Other large objects may be constructed in dynamic allocated storage and accessed by the {{lc|std::function}} object through a pointer.
===Parameters===
{{par begin}}
{{par | other | the function object used to initialize {{c|*this}} }}
{{par | f | a callable used to initialize {{c|*this}} }}
{{par | alloc | an {{concept|Allocator}} used for internal memory allocation }}
{{par hreq}}
{{par req concept | F | CopyConstructible | Callable }}
{{par req concept | Alloc | Allocator}}
{{par end}}

===Exceptions===
@1-2@ {{unreviewed noexcept}}

@3,4,8,9@ does not throw if {{tt|other}}'s ''target'' is a function pointer or a {{lc|std::reference_wrapper}}, otherwise may throw {{lc|std::bad_alloc}} or any exception thrown by the constructor used to copy or move the stored callable object.

@5,10@ does not throw if {{tt|f}} is a function pointer or a {{lc|std::reference_wrapper}}, otherwise may throw {{lc|std::bad_alloc}} or any exception thrown by the copy constructor of the stored callable object.

@6-7@ {{unreviewed noexcept}}

===Example===
{{example
 | code=
 | output=
}}

[[de:cpp/utility/functional/function/function]]
[[es:cpp/utility/functional/function/function]]
[[fr:cpp/utility/functional/function/function]]
[[it:cpp/utility/functional/function/function]]
[[ja:cpp/utility/functional/function/function]]
[[pt:cpp/utility/functional/function/function]]
[[ru:cpp/utility/functional/function/function]]
[[zh:cpp/utility/functional/function/function]]</text>
      <sha1>n6r6hxye7dk6z0acc5rn4qdjlpne3qh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/operator bool</title>
    <ns>0</ns>
    <id>5232</id>
    <revision>
      <id>91891</id>
      <parentid>79018</parentid>
      <timestamp>2017-03-31T20:00:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1627">{{cpp/utility/functional/function/title | operator bool}}
{{cpp/utility/functional/function/navbar}}
{{ddcl | since=c++11 |
explicit operator bool() const;
}}

Checks whether {{c|*this}} stores a callable function target, i.e. is not empty.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} stores a callable function target, {{c|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

void sampleFunction()
{
    std::cout &lt;&lt; &quot;This is the sample function!\n&quot;;
}

void checkFunc( std::function&lt;void()&gt; &amp;func )
{
    // Use operator bool to determine if callable target is available.
    if( func )  
    {
        std::cout &lt;&lt; &quot;Function is not empty! Calling function.\n&quot;;
        func();
    }
    else
    {
        std::cout &lt;&lt; &quot;Function is empty. Nothing to do.\n&quot;;
    }
}

int main()
{
    std::function&lt;void()&gt; f1;
    std::function&lt;void()&gt; f2( sampleFunction );
    
    std::cout &lt;&lt; &quot;f1: &quot;;
    checkFunc( f1 );
    
    std::cout &lt;&lt; &quot;f2: &quot;;
    checkFunc( f2 );
}
 | output=
f1: Function is empty. Nothing to do.
f2: Function is not empty! Calling function.
This is the sample function!
}}

[[de:cpp/utility/functional/function/operator bool]]
[[es:cpp/utility/functional/function/operator bool]]
[[fr:cpp/utility/functional/function/operator bool]]
[[it:cpp/utility/functional/function/operator bool]]
[[ja:cpp/utility/functional/function/operator bool]]
[[pt:cpp/utility/functional/function/operator bool]]
[[ru:cpp/utility/functional/function/operator bool]]
[[zh:cpp/utility/functional/function/operator bool]]</text>
      <sha1>gml8awqx2ti938hxgm0urpxlqyzuaaa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/operator cmp</title>
    <ns>0</ns>
    <id>8707</id>
    <revision>
      <id>91897</id>
      <parentid>80224</parentid>
      <timestamp>2017-03-31T20:01:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2156">{{title | operator{{==}},!{{=}}&lt;small&gt;(std::function)&lt;/small&gt;}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | num=1 |
template&lt; class R, class... ArgTypes &gt;
bool operator{{==}}( const std::function&lt;R(ArgTypes...)&gt;&amp; f, std::nullptr_t );
}}
{{dcl | since=c++11 | num=2 |
template&lt; class R, class... ArgTypes &gt;
bool operator{{==}}( std::nullptr_t, const std::function&lt;R(ArgTypes...)&gt;&amp; f );
}}
{{dcl | since=c++11 | num=3 |
template&lt; class R, class... ArgTypes &gt;
bool operator!{{=}}( const std::function&lt;R(ArgTypes...)&gt;&amp; f, std::nullptr_t );
}}
{{dcl | since=c++11 | num=4 |
template&lt; class R, class... ArgTypes &gt;
bool operator!{{=}}( std::nullptr_t, const std::function&lt;R(ArgTypes...)&gt;&amp; f );
}}
{{dcl end}}

Compares a {{tt|std::function}} with a null pointer. Empty functions (that is, functions without a callable target) compare equal, non-empty functions compare non-equal.

===Parameters===
{{par begin}}
{{par | f | {{tt|std::function}} to compare}}
{{par end}}

===Return value===
@1-2@ {{c|!f}}
@3-4@ {{c|(bool) f}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

using SomeVoidFunc = std::function&lt;void(int)&gt;;

class C {
public:
    C(SomeVoidFunc void_func = nullptr) : 
        void_func_(void_func)
    {
        if (void_func_ == nullptr) { // specialized compare with nullptr
            void_func_ = std::bind(&amp;C::default_func, this, std::placeholders::_1);
        }
        void_func_(7);
    }

    void default_func(int i) { std::cout &lt;&lt; i &lt;&lt; '\n'; };

private:
    SomeVoidFunc void_func_;
};

void user_func(int i)
{
    std::cout &lt;&lt; (i + 1) &lt;&lt; '\n';
}

int main()
{
    C c1;
    C c2(user_func);
}
 | output=
7
8
}}

[[de:cpp/utility/functional/function/operator cmp]]
[[es:cpp/utility/functional/function/operator cmp]]
[[fr:cpp/utility/functional/function/operator cmp]]
[[it:cpp/utility/functional/function/operator cmp]]
[[ja:cpp/utility/functional/function/operator cmp]]
[[pt:cpp/utility/functional/function/operator cmp]]
[[ru:cpp/utility/functional/function/operator cmp]]
[[zh:cpp/utility/functional/function/operator cmp]]</text>
      <sha1>o7lgyt2c9546suyds4wu4wq5bkjfkg7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/operator()</title>
    <ns>0</ns>
    <id>5231</id>
    <revision>
      <id>90843</id>
      <parentid>84543</parentid>
      <timestamp>2017-03-14T00:56:00Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>&lt;R&gt;, just stylistic so no revboxing</comment>
      <text xml:space="preserve" bytes="1984">{{cpp/utility/functional/function/title | operator()}}
{{cpp/utility/functional/function/navbar}}
{{ddcl | since=c++11 |
R operator()( Args... args ) const;
}}

Invokes the stored callable function target with the parameters {{tt|args}}.

Effectively does {{c|INVOKE&lt;R&gt;(f, std::forward&lt;Args&gt;(args)...)}}, where {{tt|f}} is the target object of {{tt|*this}} and {{tt|INVOKE}} is the operation described in {{concept|Callable}}.

===Parameters===
{{par begin}}
{{par | args | parameters to pass to the stored callable function target}}
{{par end}}

===Return value===
None if {{tt|R}} is {{c|void}}. Otherwise the return value of the invocation of the stored callable object.

===Exceptions===
* {{lc|std::bad_function_call}} if {{c|*this}} does not store a callable function target, i.e. {{c|!*this {{==}} true}}.

===Example===
{{example
 | The following example shows how {{lc|std::function}} can passed to other functions by value. Also, it shows how {{lc|std::function}} can store lambdas.
 | code=
#include &lt;iostream&gt;
#include &lt;functional&gt;

void call(std::function&lt;int()&gt; f)  // can be passed by value
{ 
    std::cout &lt;&lt; f() &lt;&lt; '\n';
}

int normal_function() 
{
    return 42;
}

int main()
{
    int n = 1;
    std::function&lt;int()&gt; f = [&amp;n](){ return n; };
    call(f);

    n = 2;
    call(f); 

    f = normal_function; 
    call(f);
}
 | output=
1
2
42
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc operator()}}
{{dsc inc | cpp/utility/functional/dsc bad_function_call}}
{{dsc inc | cpp/utility/functional/dsc invoke}}
{{dsc end}}

[[de:cpp/utility/functional/function/operator()]]
[[es:cpp/utility/functional/function/operator()]]
[[fr:cpp/utility/functional/function/operator()]]
[[it:cpp/utility/functional/function/operator()]]
[[ja:cpp/utility/functional/function/operator()]]
[[pt:cpp/utility/functional/function/operator()]]
[[ru:cpp/utility/functional/function/operator()]]
[[zh:cpp/utility/functional/function/operator()]]</text>
      <sha1>dji3vmo5k1i2z64otm4s8xxxfg390id</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/operator=</title>
    <ns>0</ns>
    <id>5235</id>
    <revision>
      <id>91844</id>
      <parentid>82118</parentid>
      <timestamp>2017-03-31T19:59:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2482">{{cpp/utility/functional/function/title | operator{{=}}}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
function&amp; operator=( const function&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
function&amp; operator=( function&amp;&amp; other );
}}
{{dcl | num=3 | since=c++11 | 1=
function&amp; operator=( std::nullptr_t );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class F &gt; 
function&amp; operator=( F&amp;&amp; f );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class F &gt; 
function&amp; operator=( std::reference_wrapper&lt;F&gt; f );
}}
{{dcl end}}

Assigns a new ''target'' to {{tt|std::function}}.

@1@ Assigns a copy of ''target'' of {{tt|other}}, as if by executing {{c|function(other).swap(*this);}}

@2@ Moves the ''target'' of {{tt|other}} to {{c|*this}}. {{tt|other}} is in a valid state with an unspecified value.

@3@ Drops the current ''target''. {{c|*this}} is ''empty'' after the call.

@4@ Sets the ''target'' of {{c|*this}} to the callable {{tt|f}}, as if by executing {{c|function(std::forward&lt;F&gt;(f)).swap(*this);}}. {{rev inl|since=c++14|This operator does not participate in overload resolution unless {{tt|f}} is {{concept|Callable}} for argument types {{tt|Args...}} and return type {{tt|R}}.}}

@5@ Sets the ''target'' of {{c|*this}} to a copy of {{tt|f}}, as if by executing {{c|function(f).swap(*this);}}

===Parameters===
{{par begin}}
{{par | other | another {{tt|std::function}} object to copy the target of}}
{{par | f | a callable to initialize the ''target'' with}}
{{par hreq}}
{{par req concept | F | Callable}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1-2@ (none)
@3@ {{rev begin}}
{{rev|until=c++17|
(none)
}}
{{rev|since=c++17|
{{unreviewed noexcept}}
}}
{{rev end}}
@4@ (none)
@5@ {{unreviewed noexcept}}

===Notes===
The move assignment operator uses the default allocator rather than the allocator of {{tt|*this}} or the allocator of {{tt|other}} ([http://open-std.org/JTC1/SC22/WG21/docs/lwg-closed.html#2386 LWG #2386])

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc assign}}
{{dsc begin}}

[[de:cpp/utility/functional/function/operator=]]
[[es:cpp/utility/functional/function/operator=]]
[[fr:cpp/utility/functional/function/operator=]]
[[it:cpp/utility/functional/function/operator=]]
[[ja:cpp/utility/functional/function/operator=]]
[[pt:cpp/utility/functional/function/operator=]]
[[ru:cpp/utility/functional/function/operator=]]
[[zh:cpp/utility/functional/function/operator=]]</text>
      <sha1>bbamzrcmn1n60zs3j2xabhyfte76zye</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/swap</title>
    <ns>0</ns>
    <id>5234</id>
    <revision>
      <id>91852</id>
      <parentid>63501</parentid>
      <timestamp>2017-03-31T19:59:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="764">{{cpp/utility/functional/function/title | swap}}
{{cpp/utility/functional/function/navbar}}
{{ddcl | since=c++11 |
void swap( function&amp; other );
}}

Exchanges the stored callable objects of {{c|*this}} and {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | function wrapper to exchange the stored callable object with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/utility/functional/function/swap]]
[[es:cpp/utility/functional/function/swap]]
[[fr:cpp/utility/functional/function/swap]]
[[it:cpp/utility/functional/function/swap]]
[[ja:cpp/utility/functional/function/swap]]
[[pt:cpp/utility/functional/function/swap]]
[[ru:cpp/utility/functional/function/swap]]
[[zh:cpp/utility/functional/function/swap]]</text>
      <sha1>o7xhsis7rxhpd1uprehqqyn4m7xdfzc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/swap2</title>
    <ns>0</ns>
    <id>5500</id>
    <revision>
      <id>91776</id>
      <parentid>88242</parentid>
      <timestamp>2017-03-31T19:57:40Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1172">{{cpp/title | swap&lt;small&gt;(std::function)&lt;/small&gt;}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl |
template&lt; class R, class... Args &gt;
void swap( function&lt;R(Args...)&gt; &amp;lhs, function&lt;R(Args...)&gt; &amp;rhs );
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::function}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | polymorphic function wrappers whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++17 | (none) }}
{{rev | since=c++17 | {{unreviewed noexcept}} }}
{{rev end}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc swap}}
{{dsc end}}

[[de:cpp/utility/functional/function/swap2]]
[[es:cpp/utility/functional/function/swap2]]
[[fr:cpp/utility/functional/function/swap2]]
[[it:cpp/utility/functional/function/swap2]]
[[ja:cpp/utility/functional/function/swap2]]
[[pt:cpp/utility/functional/function/swap2]]
[[ru:cpp/utility/functional/function/swap2]]
[[zh:cpp/utility/functional/function/swap2]]</text>
      <sha1>0654rnsf6ul44tkrxikc7mruj3xdauu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/target</title>
    <ns>0</ns>
    <id>8705</id>
    <revision>
      <id>91933</id>
      <parentid>82926</parentid>
      <timestamp>2017-03-31T20:02:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1936">{{cpp/utility/functional/function/title | target}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 |
template&lt; class T &gt; 
T* target(); 
}}
{{dcl | num=2 | since=c++11 |
template&lt; class T &gt; 
const T* target() const;
}}
{{dcl end}}

Returns a pointer to the stored callable function target.

===Parameters===
(none)

===Return value===
A pointer to the stored function if {{c|target_type() {{==}} typeid(T)}}, otherwise a null pointer.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

int f(int, int) { return 1; }
int g(int, int) { return 2; }
void test(std::function&lt;int(int, int)&gt; const&amp; arg)
{
    std::cout &lt;&lt; &quot;test function: &quot;;
    if (arg.target&lt;std::plus&lt;int&gt;&gt;())
        std::cout &lt;&lt; &quot;it is plus\n&quot;;
    if (arg.target&lt;std::minus&lt;int&gt;&gt;())
        std::cout &lt;&lt; &quot;it is minus\n&quot;;

    int (*const* ptr)(int, int) = arg.target&lt;int(*)(int, int)&gt;();
    if (ptr &amp;&amp; *ptr == f)
        std::cout &lt;&lt; &quot;it is the function f\n&quot;;
    if (ptr &amp;&amp; *ptr == g)
        std::cout &lt;&lt; &quot;it is the function g\n&quot;;
}

int main()
{
    test(std::function&lt;int(int, int)&gt;(std::plus&lt;int&gt;()));
    test(std::function&lt;int(int, int)&gt;(std::minus&lt;int&gt;()));
    test(std::function&lt;int(int, int)&gt;(f));
    test(std::function&lt;int(int, int)&gt;(g));
}
 | output=
test function: it is plus
test function: it is minus
test function: it is the function f
test function: it is the function g
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc target_type}}
{{dsc end}}

[[de:cpp/utility/functional/function/target]]
[[es:cpp/utility/functional/function/target]]
[[fr:cpp/utility/functional/function/target]]
[[it:cpp/utility/functional/function/target]]
[[ja:cpp/utility/functional/function/target]]
[[pt:cpp/utility/functional/function/target]]
[[ru:cpp/utility/functional/function/target]]
[[zh:cpp/utility/functional/function/target]]</text>
      <sha1>p7i2h3huteccv4emsqmztjx47cnnatl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/target type</title>
    <ns>0</ns>
    <id>8706</id>
    <revision>
      <id>91584</id>
      <parentid>69946</parentid>
      <timestamp>2017-03-31T19:50:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1340">{{cpp/utility/functional/function/title | target_type}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
const std::type_info&amp; target_type() const;
}}
{{dcl end}}

Returns the type of the stored function.

===Parameters===
(none)

===Return value===
{{c|typeid(T)}} if the stored function has type {{tt|T}}, otherwise {{c|typeid(void)}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

int f(int a) { return -a; }
int main()
{
    // fn1 and fn2 have the same type, but their targets do not
    std::function&lt;int(int)&gt; fn1(f),
                            fn2([](int a) {return -a;});
    std::cout &lt;&lt; fn1.target_type().name() &lt;&lt; '\n'
              &lt;&lt; fn2.target_type().name() &lt;&lt; '\n';
}
 |p=true
 | output=
int (*)(int)
main::$_0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/function/dsc target}}
{{dsc end}}

[[de:cpp/utility/functional/function/target type]]
[[es:cpp/utility/functional/function/target type]]
[[fr:cpp/utility/functional/function/target type]]
[[it:cpp/utility/functional/function/target type]]
[[ja:cpp/utility/functional/function/target type]]
[[pt:cpp/utility/functional/function/target type]]
[[ru:cpp/utility/functional/function/target type]]
[[zh:cpp/utility/functional/function/target type]]</text>
      <sha1>pwym3dyp2iau98g7ohw7mmwvsf2hwxw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/uses allocator</title>
    <ns>0</ns>
    <id>3405</id>
    <revision>
      <id>86409</id>
      <parentid>63085</parentid>
      <timestamp>2016-06-29T15:28:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>P0302R1</comment>
      <text xml:space="preserve" bytes="1139">{{cpp/title|uses_allocator&lt;small&gt;&lt;std::function&gt;&lt;/small&gt;}}
{{cpp/utility/functional/function/navbar}}
{{dcl begin}}
{{dcl header | functional}}
{{dcl | since=c++11 | until=c++17 |
template&lt; class R, class... ArgTypes, class Alloc &gt;
struct uses_allocator&lt;std::function&lt;R(ArgTypes...)&gt;, Alloc&gt; : std::true_type { };
}}
{{dcl end}}

This specialization of {{lc|std::uses_allocator}} informs other library components that all objects of type {{lc|std::function}} support ''uses-allocator construction'', even though they do not have a nested {{tt|allocator_type}}. 

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/utility/functional/function/uses allocator]]
[[es:cpp/utility/functional/function/uses allocator]]
[[fr:cpp/utility/functional/function/uses allocator]]
[[it:cpp/utility/functional/function/uses allocator]]
[[ja:cpp/utility/functional/function/uses allocator]]
[[pt:cpp/utility/functional/function/uses allocator]]
[[ru:cpp/utility/functional/function/uses allocator]]
[[zh:cpp/utility/functional/function/uses allocator]]</text>
      <sha1>jh0qxt72cpx8ddo1ym53wezr6kjv10k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/function/~function</title>
    <ns>0</ns>
    <id>5233</id>
    <revision>
      <id>91816</id>
      <parentid>63502</parentid>
      <timestamp>2017-03-31T19:58:47Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="670">{{cpp/utility/functional/function/title | ~function}}
{{cpp/utility/functional/function/navbar}}
{{ddcl | since=c++11 |
~function();
}}

Destroys the {{lc|std::function}} instance. If the stored callable is valid, it is destroyed also.

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/utility/functional/function/~function]]
[[es:cpp/utility/functional/function/~function]]
[[fr:cpp/utility/functional/function/~function]]
[[it:cpp/utility/functional/function/~function]]
[[ja:cpp/utility/functional/function/~function]]
[[pt:cpp/utility/functional/function/~function]]
[[ru:cpp/utility/functional/function/~function]]
[[zh:cpp/utility/functional/function/~function]]</text>
      <sha1>9g643yj12ckq9hzh299dfaidhglv91o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/greater</title>
    <ns>0</ns>
    <id>4762</id>
    <revision>
      <id>84266</id>
      <parentid>83703</parentid>
      <timestamp>2016-03-17T09:12:38Z</timestamp>
      <contributor>
        <ip>217.91.86.201</ip>
      </contributor>
      <comment>added less to &quot;See also&quot;</comment>
      <text xml:space="preserve" bytes="2280">{{cpp/title|greater}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct greater;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct greater;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing comparisons. Unless specialized, invokes {{c|operator&gt;}} on type {{tt|T}}.

===Specializations===
{{cpp/utility/functional/pointer_order|operator&gt;|std::greater}}

{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::greater}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc greater_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | checks if the first argument is ''greater'' than the second}}
{{dsc end}}


{{member | {{small|std::greater::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Checks whether {{tt|lhs}} is ''greater'' than {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
{{c|true}} if {{c|1=lhs &gt; rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs &gt; rhs;
}
}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc less}}
{{dsc end}}

[[de:cpp/utility/functional/greater]]
[[es:cpp/utility/functional/greater]]
[[fr:cpp/utility/functional/greater]]
[[it:cpp/utility/functional/greater]]
[[ja:cpp/utility/functional/greater]]
[[pt:cpp/utility/functional/greater]]
[[ru:cpp/utility/functional/greater]]
[[zh:cpp/utility/functional/greater]]</text>
      <sha1>kazeonpzaw9deqmr0ur8oui7x5lsgyn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/greater equal</title>
    <ns>0</ns>
    <id>4764</id>
    <revision>
      <id>83705</id>
      <parentid>66258</parentid>
      <timestamp>2016-03-07T14:41:01Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated tyepdefs</comment>
      <text xml:space="preserve" bytes="2325">{{cpp/title|greater_equal}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct greater_equal;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct greater_equal;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing comparisons. Unless specialized, invokes {{c|operator&gt;{{=}}}} on type {{tt|T}}.

===Specializations===
{{cpp/utility/functional/pointer_order|operator&lt;{{=}}|std::greater_equal}}

{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::greater_equal}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc greater_equal_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | checks if the first argument is ''greater'' than or ''equal'' to the second}}
{{dsc end}}

{{member | {{small|std::greater_equal::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Checks whether {{tt|lhs}} is ''greater'' than or ''equal'' to {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
{{c|true}} if {{c|1=lhs &gt;= rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs &gt;= rhs;
}
}}
}}

[[de:cpp/utility/functional/greater equal]]
[[es:cpp/utility/functional/greater equal]]
[[fr:cpp/utility/functional/greater equal]]
[[it:cpp/utility/functional/greater equal]]
[[ja:cpp/utility/functional/greater equal]]
[[pt:cpp/utility/functional/greater equal]]
[[ru:cpp/utility/functional/greater equal]]
[[zh:cpp/utility/functional/greater equal]]</text>
      <sha1>p8n2r9c16j0g39ncsp4nym6m02nkmic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/greater equal void</title>
    <ns>0</ns>
    <id>13066</id>
    <revision>
      <id>66470</id>
      <parentid>66280</parentid>
      <timestamp>2013-11-24T11:34:01Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1096">{{cpp/title|greater_equal&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class greater_equal&lt;void&gt;;
}}

{{c|std::greater_equal&lt;&gt;}} is a specialization of {{lc|std::greater_equal}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/greater_equal_void | title=operator() | inlinemem=true | tests if the lhs compares greater or equal than rhs}}
{{dsc end}}

{{member | {{small|std::greater_equal&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) &gt;= std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{tt|1= lhs &gt;= rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
The result of {{c|1= lhs &gt;= rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>ol9t6r7h020pmd1jim692apwzlkkgth</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/greater void</title>
    <ns>0</ns>
    <id>13063</id>
    <revision>
      <id>66271</id>
      <parentid>66267</parentid>
      <timestamp>2013-11-10T01:33:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template for is_transparent note</comment>
      <text xml:space="preserve" bytes="1042">{{cpp/title|greater&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class greater&lt;void&gt;;
}}

{{c|std::greater&lt;&gt;}} is a specialization of {{lc|std::greater}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/greater_void | title=operator() | inlinemem=true | tests if the lhs compares greater than rhs}}
{{dsc end}}

{{member | {{small|std::greater&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) &gt; std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{tt|lhs &gt; rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
The result of {{c|lhs &gt; rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>s5i2wy0ew3fvq4z7n0qcfolt69fqio2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/invoke</title>
    <ns>0</ns>
    <id>13867</id>
    <revision>
      <id>92023</id>
      <parentid>91835</parentid>
      <timestamp>2017-04-01T22:59:46Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>already merged</comment>
      <text xml:space="preserve" bytes="6279">{{cpp/title|invoke}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++17 |
template&lt; class F, class... Args&gt;
std::invoke_result_t&lt;F, Args...&gt; invoke(F&amp;&amp; f, Args&amp;&amp;... args) noexcept(/* see below */);
}}
{{dcl end}}

Invoke the {{concept|Callable}} object {{tt|f}} with the parameters {{tt|args}}. As by {{c|INVOKE(std::forward&lt;F&gt;(f), std::forward&lt;Args&gt;(args)...)}}.

where ''INVOKE(f, t1, t2, ..., tN)'' is defined as follows:
* if {{tt|f}} is a [[cpp/language/pointer#Pointers_to_member_functions|pointer to member function]] of class {{tt|T}}:
:* If {{c|1=std::is_base_of&lt;T, std::decay_t&lt;decltype(t1)&gt;&gt;::value}} is {{c|true}}, then {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|(t1.*f)(t2, ..., tN)}}
:* otherwise, if {{c|std::decay_t&lt;decltype(t1)&gt;}} is a specialization of {{lc|std::reference_wrapper}}, then {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|(t1.get().*f)(t2, ..., tN)}}
:* otherwise, if {{tt|t1}} does not satisfy the previous items, then {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|((*t1).*f)(t2, ..., tN)}}.
* otherwise, if N == 1 and {{tt|f}} is a [[cpp/language/pointer#Pointers_to_data_members|pointer to data member]] of class {{tt|T}}:
:* If {{c|1=std::is_base_of&lt;T, std::decay_t&lt;decltype(t1)&gt;&gt;::value}} is {{c|true}}, then {{c|INVOKE(f, t1)}} is equivalent to {{c|t1.*f}}
:* otherwise, if {{c|std::decay_t&lt;decltype(t1)&gt;}} is a specialization of {{lc|std::reference_wrapper}}, then {{c|INVOKE(f, t1)}} is equivalent to {{c|t1.get().*f}}
:* otherwise, if {{tt|t1}}  does not satisfy the previous items, then {{c|INVOKE(f, t1)}} is equivalent to {{c|(*t1).*f}}
* otherwise, {{c|INVOKE(f, t1, t2, ..., tN)}} is equivalent to {{c|f(t1, t2, ..., tN)}} (that is, {{tt|f}} is a {{concept|FunctionObject}})

===Parameters===
{{par begin}}
{{par | f | {{concept|Callable}} object to be invoked}}
{{par | args | arguments to pass to {{tt|f}} }}
{{par end}}

===Exceptions===
{{noexcept|std::is_nothrow_invocable_v&lt;F, Args...&gt;}}

===Possible implementation===
{{source|1=
namespace detail {
template &lt;class T&gt;
struct is_reference_wrapper : std::false_type {};
template &lt;class U&gt;
struct is_reference_wrapper&lt;std::reference_wrapper&lt;U&gt;&gt; : std::true_type {};
template &lt;class T&gt;
constexpr bool is_reference_wrapper_v = is_reference_wrapper&lt;T&gt;::value;

template &lt;class Base, class T, class Derived, class... Args&gt;
auto INVOKE(T Base::*pmf, Derived&amp;&amp; ref, Args&amp;&amp;... args)
    noexcept(noexcept((std::forward&lt;Derived&gt;(ref).*pmf)(std::forward&lt;Args&gt;(args)...)))
 -&gt; std::enable_if_t&lt;std::is_function_v&lt;T&gt; &amp;&amp;
                     std::is_base_of_v&lt;Base, std::decay_t&lt;Derived&gt;&gt;,
    decltype((std::forward&lt;Derived&gt;(ref).*pmf)(std::forward&lt;Args&gt;(args)...))&gt;
{
      return (std::forward&lt;Derived&gt;(ref).*pmf)(std::forward&lt;Args&gt;(args)...);
}

template &lt;class Base, class T, class RefWrap, class... Args&gt;
auto INVOKE(T Base::*pmf, RefWrap&amp;&amp; ref, Args&amp;&amp;... args)
    noexcept(noexcept((ref.get().*pmf)(std::forward&lt;Args&gt;(args)...)))
 -&gt; std::enable_if_t&lt;std::is_function_v&lt;T&gt; &amp;&amp;
                     is_reference_wrapper_v&lt;std::decay_t&lt;RefWrap&gt;&gt;,
    decltype((ref.get().*pmf)(std::forward&lt;Args&gt;(args)...))&gt;

{
      return (ref.get().*pmf)(std::forward&lt;Args&gt;(args)...);
}

template &lt;class Base, class T, class Pointer, class... Args&gt;
auto INVOKE(T Base::*pmf, Pointer&amp;&amp; ptr, Args&amp;&amp;... args)
    noexcept(noexcept(((*std::forward&lt;Pointer&gt;(ptr)).*pmf)(std::forward&lt;Args&gt;(args)...)))
 -&gt; std::enable_if_t&lt;std::is_function_v&lt;T&gt; &amp;&amp;
                     !is_reference_wrapper_v&lt;std::decay_t&lt;Pointer&gt;&gt; &amp;&amp;
                     !std::is_base_of_v&lt;Base, std::decay_t&lt;Pointer&gt;&gt;,
    decltype(((*std::forward&lt;Pointer&gt;(ptr)).*pmf)(std::forward&lt;Args&gt;(args)...))&gt;
{
      return ((*std::forward&lt;Pointer&gt;(ptr)).*pmf)(std::forward&lt;Args&gt;(args)...);
}

template &lt;class Base, class T, class Derived&gt;
auto INVOKE(T Base::*pmd, Derived&amp;&amp; ref)
    noexcept(noexcept(std::forward&lt;Derived&gt;(ref).*pmd))
 -&gt; std::enable_if_t&lt;!std::is_function_v&lt;T&gt; &amp;&amp;
                     std::is_base_of_v&lt;Base, std::decay_t&lt;Derived&gt;&gt;,
    decltype(std::forward&lt;Derived&gt;(ref).*pmd)&gt;
{
      return std::forward&lt;Derived&gt;(ref).*pmd;
}

template &lt;class Base, class T, class RefWrap&gt;
auto INVOKE(T Base::*pmd, RefWrap&amp;&amp; ref)
    noexcept(noexcept(ref.get().*pmd))
 -&gt; std::enable_if_t&lt;!std::is_function_v&lt;T&gt; &amp;&amp;
                     is_reference_wrapper_v&lt;std::decay_t&lt;RefWrap&gt;&gt;,
    decltype(ref.get().*pmd)&gt;
{
      return ref.get().*pmd;
}

template &lt;class Base, class T, class Pointer&gt;
auto INVOKE(T Base::*pmd, Pointer&amp;&amp; ptr)
    noexcept(noexcept((*std::forward&lt;Pointer&gt;(ptr)).*pmd))
 -&gt; std::enable_if_t&lt;!std::is_function_v&lt;T&gt; &amp;&amp;
                     !is_reference_wrapper_v&lt;std::decay_t&lt;Pointer&gt;&gt; &amp;&amp;
                     !std::is_base_of_v&lt;Base, std::decay_t&lt;Pointer&gt;&gt;,
    decltype((*std::forward&lt;Pointer&gt;(ptr)).*pmd)&gt;
{
      return (*std::forward&lt;Pointer&gt;(ptr)).*pmd;
}

template &lt;class F, class... Args&gt;
auto INVOKE(F&amp;&amp; f, Args&amp;&amp;... args)
    noexcept(noexcept(std::forward&lt;F&gt;(f)(std::forward&lt;Args&gt;(args)...)))
 -&gt; std::enable_if_t&lt;!std::is_member_pointer_v&lt;std::decay_t&lt;F&gt;&gt;,
    decltype(std::forward&lt;F&gt;(f)(std::forward&lt;Args&gt;(args)...))&gt;
{
      return std::forward&lt;F&gt;(f)(std::forward&lt;Args&gt;(args)...);
}
} // namespace detail

template&lt; class F, class... ArgTypes &gt;
auto invoke(F&amp;&amp; f, ArgTypes&amp;&amp;... args)
    // exception specification for QoI
    noexcept(noexcept(detail::INVOKE(std::forward&lt;F&gt;(f), std::forward&lt;ArgTypes&gt;(args)...)))
 -&gt; decltype(detail::INVOKE(std::forward&lt;F&gt;(f), std::forward&lt;ArgTypes&gt;(args)...))
{
    return detail::INVOKE(std::forward&lt;F&gt;(f), std::forward&lt;ArgTypes&gt;(args)...);
}
}}

===Example===
{{example
 |Implement the basic functionality of {{lc|std::mem_fn}}.
 |code=
#include &lt;functional&gt;
template&lt; class PM &gt;
class mem_fn_t {
    PM p;
public:
    mem_fn_t(PM p):p(p){}
    template&lt;class... Args&gt;
    decltype(auto) operator()(Args&amp;&amp;... args) {
        return std::invoke(p, std::forward&lt;Args&gt;(args)...);
    }
};

template&lt; class R, class T &gt;
auto mem_fn(R T::* pm){
    mem_fn_t&lt;R T::*&gt; t {pm};
    return t;
}
}}

===See also===
{{dsc begin}}
{{dsc inc|cpp/utility/functional/dsc mem_fn}}
{{dsc inc|cpp/types/dsc result_of}}
{{dsc inc | cpp/types/dsc is_invocable}}
{{dsc inc | cpp/utility/dsc apply}}
{{dsc end}}</text>
      <sha1>kymjsp2ecb2kqt50lqbduqkue0iyasn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/is bind expression</title>
    <ns>0</ns>
    <id>4220</id>
    <revision>
      <id>90966</id>
      <parentid>90941</parentid>
      <timestamp>2017-03-14T12:57:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2199">{{cpp/title|is_bind_expression}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_bind_expression;
}}
{{dcl end}}

If {{tt|T}} is the type produced by a call to {{lc|std::bind}}, this template is derived from {{lc|std::true_type}}.  For any other type, this template is derived from {{lc|std::false_type}}.

This template may be specialized for a user-defined type {{tt|T}} to implement {{concept|UnaryTypeTrait}} with ''BaseCharacteristic'' of {{lc|std::true_type}} to indicate that {{tt|T}} should be treated by {{lc|std::bind}} as if it were the type of a bind subexpression: when a bind-generated function object is invoked, a bound argument of this type will be invoked as a function object and will be given all the unbound arguments passed to the bind-generated object.

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_bind_expression_v = is_bind_expression&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit | {{tt|T}} is a function object generated by {{lc|std::bind}}}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;functional&gt;

struct MyBind {
    typedef int result_type;
    int operator()(int a, int b) const { return a + b; }
};

namespace std {
    template&lt;&gt;
    struct is_bind_expression&lt;MyBind&gt; : public true_type {};
}

int f(int n1, int n2)
{
    return n1+n2;
}

int main()
{
    // as if bind(f, bind(MyBind::operator(), _1, _2), 2)
    auto b = std::bind(f, MyBind(), 2); 

    std::cout &lt;&lt; &quot;Adding 2 to the sum of 10 and 11 gives &quot; &lt;&lt; b(10, 11) &lt;&lt; '\n';
}
 | output=
Adding 2 to the sum of 10 and 11 gives 23
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bind}}

{{dsc end}}

[[de:cpp/utility/functional/is bind expression]]
[[es:cpp/utility/functional/is bind expression]]
[[fr:cpp/utility/functional/is bind expression]]
[[it:cpp/utility/functional/is bind expression]]
[[ja:cpp/utility/functional/is bind expression]]
[[pt:cpp/utility/functional/is bind expression]]
[[ru:cpp/utility/functional/is bind expression]]
[[zh:cpp/utility/functional/is bind expression]]</text>
      <sha1>pft11fe0b9xtt6zkh0w4o3fihcu8cib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/is placeholder</title>
    <ns>0</ns>
    <id>4219</id>
    <revision>
      <id>91013</id>
      <parentid>90942</parentid>
      <timestamp>2017-03-14T12:58:55Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2454">{{cpp/title|is_placeholder}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional}}
{{dcl | since=c++11 | 1=
template&lt; class T &gt;
struct is_placeholder;
}}
{{dcl end}}

If {{tt|T}} is the type of a standard placeholder (_1, _2, _3, ...), then this template is derived from {{c|std::integral_constant&lt;int,1&gt;}}, {{c|std::integral_constant&lt;int,2&gt;}}, {{c|std::integral_constant&lt;int,3&gt;}}, respectively.

If {{tt|T}} is not a standard placeholder type, this template is derived from {{c|std::integral_constant&lt;int,0&gt;}}

The template may be specialized for any user-defined {{tt|T}} type: the specialization must satisfy {{concept|UnaryTypeTrait}} with ''BaseCharacteristic'' of {{c|std::integral_constant&lt;int, N&gt;}} with {{c|N &gt; 0}} to indicate that {{tt|T}} should be treated as N'th placeholder type.

{{lc|std::bind}} uses {{tt|std::is_placeholder}} to detect placeholders for unbound arguments. 

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr bool is_placeholder_v = is_placeholder&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit2|placeholder value or 0 for non-placeholder types|int}}
===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;functional&gt;

struct My_2 {
} my_2;

namespace std {
    template&lt;&gt;
    struct is_placeholder&lt;My_2&gt; : public integral_constant&lt;int, 2&gt; {};
}

int f(int n1, int n2)
{
    return n1+n2;
}

int main()
{
    std::cout &lt;&lt; &quot;Standard placeholder _5 is for the argument number &quot;
              &lt;&lt; std::is_placeholder&lt;decltype(std::placeholders::_5)&gt;::value
              &lt;&lt; '\n';

    auto b = std::bind(f, my_2, 2);
    std::cout &lt;&lt; &quot;Adding 2 to 11 selected with a custom placeholder gives &quot; 
              &lt;&lt; b(10, 11) // the first argument, namely 10, is ignored
              &lt;&lt; '\n';
}
 | output=
Standard placeholder _5 is for the argument number 5
Adding 2 to 11 selected with a custom placeholder gives 13
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bind}}
{{dsc inc | cpp/utility/functional/dsc placeholders}}

{{dsc end}}

[[de:cpp/utility/functional/is placeholder]]
[[es:cpp/utility/functional/is placeholder]]
[[fr:cpp/utility/functional/is placeholder]]
[[it:cpp/utility/functional/is placeholder]]
[[ja:cpp/utility/functional/is placeholder]]
[[pt:cpp/utility/functional/is placeholder]]
[[ru:cpp/utility/functional/is placeholder]]
[[zh:cpp/utility/functional/is placeholder]]</text>
      <sha1>7yd1s4yneqg09wr3fcx1241yvco1s3u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/less</title>
    <ns>0</ns>
    <id>4763</id>
    <revision>
      <id>84267</id>
      <parentid>83704</parentid>
      <timestamp>2016-03-17T09:13:26Z</timestamp>
      <contributor>
        <ip>217.91.86.201</ip>
      </contributor>
      <comment>added greater to &quot;See also&quot;</comment>
      <text xml:space="preserve" bytes="2613">{{cpp/title|less}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct less;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct less;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing comparisons. Unless specialized, invokes {{c|operator&lt;}} on type {{tt|T}}.

===Specializations===
{{cpp/utility/functional/pointer_order|operator&lt;|std::less}}

{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::less}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc less_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | checks if the first argument is ''less'' than the second}}
{{dsc end}}

{{member | {{small|std::less::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Checks whether {{tt|lhs}} is ''less'' than {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
{{c|true}} if {{c|1=lhs &lt; rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs &lt; rhs;
}
}}
}}

===Example===
{{example
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

template &lt;typename A, typename B, typename U = std::less&lt;int&gt;&gt;
bool f(A a, B b, U u = U())
{
    return u(a, b);
}

int main() 
{
    std::cout &lt;&lt; std::boolalpha;   
    std::cout &lt;&lt; f(5, 20) &lt;&lt; '\n';
    std::cout &lt;&lt; f(100, 10) &lt;&lt; '\n';
}
 | output=
true
false
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc owner_less}}
{{dsc inc | cpp/utility/functional/dsc greater}}
{{dsc end}}

[[de:cpp/utility/functional/less]]
[[es:cpp/utility/functional/less]]
[[fr:cpp/utility/functional/less]]
[[it:cpp/utility/functional/less]]
[[ja:cpp/utility/functional/less]]
[[pt:cpp/utility/functional/less]]
[[ru:cpp/utility/functional/less]]
[[zh:cpp/utility/functional/less]]</text>
      <sha1>2jolu5ddhy17wad76vx0e28bhb1t57x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/less equal</title>
    <ns>0</ns>
    <id>4765</id>
    <revision>
      <id>83706</id>
      <parentid>66261</parentid>
      <timestamp>2016-03-07T14:41:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2269">{{cpp/title|less_equal}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct less_equal;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct less_equal;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing comparisons. Unless specialized, invokes {{c|operator&lt;{{=}}}} on type {{tt|T}}.

===Specializations===
{{cpp/utility/functional/pointer_order|operator&lt;{{=}}|std::less_equal}}

{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::less_equal}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc less_equal_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | checks if the first argument is ''less'' than or ''equal'' to the second}}
{{dsc end}}

{{member | {{small|std::less_equal::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Checks if {{tt|lhs}} is ''less'' than or ''equal'' to {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
{{c|true}} if {{c|1=lhs &lt;= rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs &lt;= rhs;
}
}}
}}

[[de:cpp/utility/functional/less equal]]
[[es:cpp/utility/functional/less equal]]
[[fr:cpp/utility/functional/less equal]]
[[it:cpp/utility/functional/less equal]]
[[ja:cpp/utility/functional/less equal]]
[[pt:cpp/utility/functional/less equal]]
[[ru:cpp/utility/functional/less equal]]
[[zh:cpp/utility/functional/less equal]]</text>
      <sha1>dlu7xrsy0cq5haohr8t6rjdgxzovba9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/less equal void</title>
    <ns>0</ns>
    <id>13067</id>
    <revision>
      <id>66471</id>
      <parentid>66281</parentid>
      <timestamp>2013-11-24T11:36:21Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1075">{{cpp/title|less_equal&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class less_equal&lt;void&gt;;
}}

{{c|std::less_equal&lt;&gt;}} is a specialization of {{lc|std::less_equal}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/less_equal_void | title=operator() | inlinemem=true | tests if the lhs compares less or equal than rhs}}
{{dsc end}}

{{member | {{small|std::less_equal&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) &lt;= std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{tt|1= lhs &lt;= rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
The result of {{c|1= lhs &lt;= rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>6ou7tg9g756ezp1oc33lb785to0ipac</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/less void</title>
    <ns>0</ns>
    <id>13064</id>
    <revision>
      <id>66270</id>
      <parentid>66268</parentid>
      <timestamp>2013-11-10T01:33:02Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="1021">{{cpp/title|less&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class less&lt;void&gt;;
}}

{{c|std::less&lt;&gt;}} is a specialization of {{lc|std::less}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/less_void | title=operator() | inlinemem=true | tests if the lhs compares less than rhs}}
{{dsc end}}

{{member | {{small|std::less&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) &lt; std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{tt|lhs &lt; rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
The result of {{c|lhs &lt; rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>rxbk5m8kcl13xre5wnl80yn0yxyw395</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/logical and</title>
    <ns>0</ns>
    <id>4055</id>
    <revision>
      <id>83699</id>
      <parentid>66284</parentid>
      <timestamp>2016-03-07T14:38:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2168">{{cpp/title|logical_and}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct logical_and;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct logical_and;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing logical AND (logical conjunction). Effectively calls {{c|operator&amp;&amp;}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::logical_and}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc logical_and_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the logical AND of the two arguments}}
{{dsc end}}

{{member | {{small|std::logical_and::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the logical AND of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute logical AND of}}
{{par end}}

===Return value===
The result of {{c|lhs &amp;&amp; rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs &amp;&amp; rhs;
}
}}
}}

[[de:cpp/utility/functional/logical and]]
[[es:cpp/utility/functional/logical and]]
[[fr:cpp/utility/functional/logical and]]
[[it:cpp/utility/functional/logical and]]
[[ja:cpp/utility/functional/logical and]]
[[pt:cpp/utility/functional/logical and]]
[[ru:cpp/utility/functional/logical and]]
[[zh:cpp/utility/functional/logical and]]</text>
      <sha1>topq99mpe1nd5zswkpt9o61aebiw52g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/logical and void</title>
    <ns>0</ns>
    <id>13071</id>
    <revision>
      <id>66289</id>
      <timestamp>2013-11-10T01:58:31Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1063">{{cpp/title|logical_and&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class logical_and&lt;void&gt;;
}}

{{c|std::logical_and&lt;&gt;}} is a specialization of {{lc|std::logical_and}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/logical_and_void | title=operator() | inlinemem=true | applies {{tt|operator&amp;&amp;}} to lhs and rhs}}
{{dsc end}}

{{member | {{small|std::logical_and&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) &amp;&amp; std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{tt|lhs &amp;&amp; rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to AND}}
{{par end}}

===Return value===
The result of {{c|lhs &amp;&amp; rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>9ce43mtcxkak54m9f51dwpqdg1veonq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/logical not</title>
    <ns>0</ns>
    <id>4057</id>
    <revision>
      <id>83701</id>
      <parentid>66288</parentid>
      <timestamp>2016-03-07T14:39:22Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="1997">{{cpp/title|logical_not}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct logical_not;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct logical_not;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing logical NOT (logical negation). Effectively calls {{c|operator!}} for type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::logical_not}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc logical_not_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the logical NOT of the argument}}
{{dsc end}}

{{member | {{small|std::logical_not::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; arg ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; arg ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the logical NOT of {{tt|arg}}.

===Parameters===
{{par begin}}
{{par | arg | value to compute logical NOT of}}
{{par end}}

===Return value===
The result of {{c|!arg}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
const bool operator()(const T &amp;arg) const 
{
    return !arg;
}
}}
}}

[[de:cpp/utility/functional/logical not]]
[[es:cpp/utility/functional/logical not]]
[[fr:cpp/utility/functional/logical not]]
[[it:cpp/utility/functional/logical not]]
[[ja:cpp/utility/functional/logical not]]
[[pt:cpp/utility/functional/logical not]]
[[ru:cpp/utility/functional/logical not]]
[[zh:cpp/utility/functional/logical not]]</text>
      <sha1>sya26odwfksbhi7qwg9zyaff6440hof</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/logical not void</title>
    <ns>0</ns>
    <id>13073</id>
    <revision>
      <id>72838</id>
      <parentid>66291</parentid>
      <timestamp>2014-10-01T17:30:05Z</timestamp>
      <contributor>
        <ip>46.193.161.133</ip>
      </contributor>
      <comment>Fix inconsistent variable name</comment>
      <text xml:space="preserve" bytes="1026">{{cpp/title|logical_not&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class logical_not&lt;void&gt;;
}}

{{c|std::logical_not&lt;&gt;}} is a specialization of {{lc|std::logical_not}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/logical_not_void | title=operator() | inlinemem=true | applies {{tt|operator{{!}}}} to its argument}}
{{dsc end}}

{{member | {{small|std::logical_not&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T &gt;
constexpr auto operator()( T&amp;&amp; arg ) const
  -&gt; decltype(!std::forward&lt;T&gt;(arg));
}}

Returns the result of {{tt|!arg}}.

===Parameters===
{{par begin}}
{{par | arg | value to apply logical NOT to}}
{{par end}}

===Return value===
The result of {{c|!arg}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>dx6r7rp9lecyev1l0d5pqkqh9a8ppa6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/logical or</title>
    <ns>0</ns>
    <id>4056</id>
    <revision>
      <id>83700</id>
      <parentid>66286</parentid>
      <timestamp>2016-03-07T14:38:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2162">{{cpp/title|logical_or}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct logical_or;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct logical_or;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing logical OR (logical disjunction). Effectively calls {{c|operator{{!!}}}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::logical_or}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc logical_or_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the logical OR of the two arguments}}
{{dsc end}}

{{member | {{small|std::logical_or::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the logical OR of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compute logical OR of}}
{{par end}}

===Return value===
The result of {{c|lhs {{!!}} rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs {{!!}} rhs;
}
}}
}}

[[de:cpp/utility/functional/logical or]]
[[es:cpp/utility/functional/logical or]]
[[fr:cpp/utility/functional/logical or]]
[[it:cpp/utility/functional/logical or]]
[[ja:cpp/utility/functional/logical or]]
[[pt:cpp/utility/functional/logical or]]
[[ru:cpp/utility/functional/logical or]]
[[zh:cpp/utility/functional/logical or]]</text>
      <sha1>qyy069whvaf2wjm265lks964gk0jjhd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/logical or void</title>
    <ns>0</ns>
    <id>13072</id>
    <revision>
      <id>90481</id>
      <parentid>66290</parentid>
      <timestamp>2017-02-24T16:42:14Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="1160">{{cpp/title|logical_or&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class logical_or&lt;void&gt;;
}}

{{c|std::logical_or&lt;&gt;}} is a specialization of {{lc|std::logical_or}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/logical_or_void | title=operator() | inlinemem=true | applies {{tt|operator&lt;nowiki&gt;||&lt;/nowiki&gt;}} to lhs and rhs}}
{{dsc end}}

{{member | {{small|std::logical_or&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) {{!!}} std::forward&lt;U&gt;(rhs));
}}

Returns the result of {{c|std::forward&lt;T&gt;(lhs) {{!!}} std::forward&lt;U&gt;(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to OR}}
{{par end}}

===Return value===
The result of {{c|std::forward&lt;T&gt;(lhs) {{!!}} std::forward&lt;U&gt;(rhs)}}.
}}

===Notes===
{{include|cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>mqqjbmtwzx5t62gk2cjlwzo9hr2lqw2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/mem fn</title>
    <ns>0</ns>
    <id>3486</id>
    <revision>
      <id>91680</id>
      <parentid>83712</parentid>
      <timestamp>2017-03-31T19:54:36Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="6741">{{cpp/title|mem_fn}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++11 | num=1 |
template&lt; class R, class T &gt;
/*unspecified*/ mem_fn(R T::* pm);
}}
{{dcl | since=c++11 | until=c++14 | num=2 |
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...));
template&lt; class R, class T, class... Args &gt;
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) &amp;);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const &amp;);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile &amp;);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile &amp;);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) &amp;&amp;);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const &amp;&amp;);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile &amp;&amp;);
template&lt; class R, class T, class... Args &gt; 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile &amp;&amp;);
}}
{{dcl end}}

Function template {{tt|std::mem_fn}} generates wrapper objects for pointers to members, which can store, copy, and invoke a pointer to member. Both references and pointers (including smart pointers) to an object can be used when invoking a {{tt|std::mem_fn}}.

The overloads (2) were introduced in C++11 but removed in C++14 as [http://cplusplus.github.io/LWG/lwg-defects.html#2048 defect #2048]

===Parameters===
{{par begin}}
{{par | pm | pointer to member that will be wrapped}}
{{par end}}

===Return value===
{{tt|std::mem_fn}} returns a call wrapper of unspecified type that has the following members:

{{member | {{small|std::mem_fn}} Return type | 2=

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | the return type of {{c|pm}} if {{c|pm}} is a pointer to member function, not defined for pointer to member object }}
{{dsc | {{tt|argument_type}}{{mark|deprecated in C++17}} | {{tt|T*}}, possibly cv-qualified, if {{c|pm}} is a pointer to member function taking no arguments}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T*}} if {{c|pm}} is a pointer to member function taking one argument}}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T1}} if {{c|pm}} is a pointer to member function taking one argument of type {{tt|T1}} }}
{{dsc end}}

===Member function===
{{ddcl|
template&lt;class... Args&gt;
/* see below */ operator()(Args&amp;&amp;... args);
}}

Let {{tt|fn}} be the call wrapper returned by a call to {{tt|std::mem_fn}} with a pointer to member {{tt|pm}}. Then the expression {{c|fn(t, a2, ..., aN)}} is equivalent to {{c|INVOKE(pm, t, a2, ..., aN)}}, where ''INVOKE'' is the operation defined in {{concept|Callable}}. (Thus, the return type of {{tt|operator()}} is {{c|std::result_of&lt;decltype(pm)(Args&amp;&amp;...)&gt;::type}}.)

Each argument in {{tt|args}} is perfectly forwarded, as if by {{c|std::forward&lt;Args&gt;(args)...}}.

}}

===Exceptions===
{{rev begin}}
{{rev | until=c++17 |
(none)
}}{{rev | since=c++17 |
{{unreviewed noexcept}}
}}
{{rev end}}

===Example 1===
{{example
 | Use {{tt|mem_fn}} to store and execute a member function and a member object:
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

struct Foo {
    void display_greeting() {
        std::cout &lt;&lt; &quot;Hello, world.\n&quot;;
    }
    void display_number(int i) {
        std::cout &lt;&lt; &quot;number: &quot; &lt;&lt; i &lt;&lt; '\n';
    }
    int data = 7;
};

int main() {
    Foo f;

    auto greet = std::mem_fn(&amp;Foo::display_greeting);
    greet(f);

    auto print_num = std::mem_fn(&amp;Foo::display_number);
    print_num(f, 42);

    auto access_data = std::mem_fn(&amp;Foo::data);
    std::cout &lt;&lt; &quot;data: &quot; &lt;&lt; access_data(f) &lt;&lt; '\n';
}
 | output=
Hello, world.
number: 42
data: 7
}}
&lt;!--
According to N4296 17.6.5.5 [member.functions]p2, `&amp;std::string::size` has an unspecified type, so `std::mem_fn(&amp;std::string::size)` may not work as expected.
===Example 2===
{{example
 | Pass a member function to {{lc|std::transform}} to create a sequence of numbers: 
 | code=
#include &lt;iostream&gt;
#include &lt;functional&gt;
#include &lt;iterator&gt;
#include &lt;memory&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

int main()
{
    std::vector&lt;std::string&gt; words = {&quot;This&quot;, &quot;is&quot;, &quot;a&quot;, &quot;test&quot;};
    std::vector&lt;std::unique_ptr&lt;std::string&gt;&gt; words2;
    words2.emplace_back(new std::string(&quot;another&quot;));
    words2.emplace_back(new std::string(&quot;test&quot;));

    std::vector&lt;std::size_t&gt; lengths;
    std::transform(words.begin(),
                   words.end(),
                   std::back_inserter(lengths),
                   std::mem_fn(&amp;std::string::size)); // uses references to strings
    std::transform(words2.begin(),
                   words2.end(),
                   std::back_inserter(lengths),
                   std::mem_fn(&amp;std::string::size)); // uses unique_ptr to strings

    std::cout &lt;&lt; &quot;The string lengths are &quot;;
    for(auto n : lengths) std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
}
 | output=
The string lengths are 4 2 1 4 7 4
}}
--&gt;
===Example 2===
{{example
 | Demonstrates the effect of the C++14 changes to the specification of std::mem_fn
 | code=

#include &lt;iostream&gt;
#include &lt;functional&gt;
 
struct X {
    int x;
    
    int&amp;       easy()      {return x;}
    int&amp;       get()       {return x;}
    const int&amp; get() const {return x;}
};
 
 
int main(void)
{
    auto a = std::mem_fn        (&amp;X::easy); // no problem at all
//  auto b = std::mem_fn&lt;int&amp;  &gt;(&amp;X::get ); // no longer works in C++14
    auto c = std::mem_fn&lt;int&amp;()&gt;(&amp;X::get ); // works with both C++11 and C++14
    auto d = [] (X&amp; x) {return x.get();};   // another approach to overload resolution
    
    X x = {33};
    std::cout &lt;&lt; &quot;a() = &quot; &lt;&lt; a(x) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;c() = &quot; &lt;&lt; c(x) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;d() = &quot; &lt;&lt; d(x) &lt;&lt; '\n';
}
 | output=
a() = 33
c() = 33
d() = 33
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc bind}}
{{dsc end}}

[[de:cpp/utility/functional/mem fn]]
[[es:cpp/utility/functional/mem fn]]
[[fr:cpp/utility/functional/mem fn]]
[[it:cpp/utility/functional/mem fn]]
[[ja:cpp/utility/functional/mem fn]]
[[pt:cpp/utility/functional/mem fn]]
[[ru:cpp/utility/functional/mem fn]]
[[zh:cpp/utility/functional/mem fn]]</text>
      <sha1>ivm5udye99sz3ddf48cucpnr5r9esp4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/mem fun</title>
    <ns>0</ns>
    <id>10172</id>
    <revision>
      <id>73940</id>
      <parentid>72623</parentid>
      <timestamp>2014-11-24T20:22:32Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="2028">{{cpp/title|mem_fun}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 |
template&lt; class Res, class T &gt; 
std::mem_fun_t&lt;Res,T&gt; mem_fun( Res (T::*f)() );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 |
template&lt; class Res, class T &gt; 
std::const_mem_fun_t&lt;Res,T&gt; mem_fun( Res (T::*f)() );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class Res, class T, class Arg &gt; 
std::mem_fun1_t&lt;Res,T,Arg&gt; mem_fun( Res (T::*f)(Arg) );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class Res, class T, class Arg &gt; 
std::const_mem_fun1_t&lt;Res,T,Arg&gt; mem_fun( S (T::*f)(Arg) );
}}
{{dcl end}}

Creates a member function wrapper object, deducing the target type from the template arguments. The wrapper object expects a pointer to an object of type {{tt|T}} as the first parameter to its {{c|operator()}}.

@1@ Effectively calls {{c|std::mem_fun_t&lt;S,T&gt;(f)}} or {{c|std::const_mem_fun_t&lt;S,T&gt;(f)}}.

@2@ Effectively calls {{c|std::mem_fun1_t&lt;S,T&gt;(f)}} or {{c|std::const_mem_fun1_t&lt;S,T&gt;(f)}}.

This function and the related types were deprecated in C++11 and removed in C++17 in favor of the more general {{lc|std::mem_fn}} and {{lc|std::bind}}, both of which create callable adapter-compatible function objects from member functions.

===Parameters===
{{par begin}}
{{par | f | pointer to a member function to create a wrapper for}}
{{par end}}

===Return value===
A function object wrapping {{tt|f}}.

===Exceptions===
(none)

===Notes===
The difference between {{c|std::mem_fun}} and {{c|std::mem_fun_ref}} is that the former produces an function wrapper that expects a pointer to an object, whereas the latter -- a reference.

===Example===
{{example
 | 
 | code=
 | output=
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_ref}}
{{dsc end}}

[[es:cpp/utility/functional/mem fun]]</text>
      <sha1>5zcpgw50v9a275r6lq8z710egndkshr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/mem fun ref</title>
    <ns>0</ns>
    <id>10173</id>
    <revision>
      <id>73942</id>
      <parentid>72622</parentid>
      <timestamp>2014-11-24T20:24:09Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="2523">{{cpp/title|mem_fun_ref}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 |
template&lt; class Res, class T &gt; 
std::mem_fun_ref_t&lt;Res,T&gt; mem_fun_ref( Res (T::*f)() );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 |
template&lt; class Res, class T &gt; 
std::const_mem_fun_ref_t&lt;Res,T&gt; mem_fun_ref( Res (T::*f)() );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class Res, class T, class Arg &gt; 
std::mem_fun1_ref_t&lt;Res,T,Arg&gt; mem_fun_ref( Res (T::*f)(Arg) );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class Res, class T, class Arg &gt; 
std::const_mem_fun1_ref_t&lt;Res,T,Arg&gt; mem_fun_ref( S (T::*f)(Arg) );
}}
{{dcl end}}

Creates a member function wrapper object, deducing the target type from the template arguments. The wrapper object expects a reference to an object of type {{tt|T}} as the first parameter to its {{c|operator()}}.

1) Effectively calls {{c|std::mem_fun_ref_t&lt;S,T&gt;(f)}} or {{c|std::const_mem_fun_ref_t&lt;S,T&gt;(f)}}.

2) Effectively calls {{c|std::mem_fun1_ref_t&lt;S,T&gt;(f)}} or {{c|std::const_mem_fun1_ref_t&lt;S,T&gt;(f)}}.

This function and the related types were deprecated in C++11 and removed in C++17 in favor of the more general {{lc|std::mem_fn}} and {{lc|std::bind}}, both of which create callable adapter-compatible function objects from member functions.

===Parameters===
{{par begin}}
{{par | f | pointer to a member function to create a wrapper for}}
{{par end}}

===Return value===
A function object wrapping {{tt|f}}.

===Exceptions===
(none)

===Notes===
The difference between {{c|std::mem_fun}} and {{c|std::mem_fun_ref}} is that the former produces an function wrapper that expects a pointer to an object, whereas the latter -- a reference.

===Example===
{{example
 | uses std::mem_fun_ref to bind std::string's member function .size()
 | code=
#include &lt;functional&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;

int main()
{
    std::vector&lt;std::string&gt; v = {&quot;once&quot;, &quot;upon&quot;, &quot;a&quot;, &quot;time&quot;};
    std::transform(v.begin(), v.end(),
                   std::ostream_iterator&lt;std::size_t&gt;(std::cout, &quot; &quot;),
                   std::mem_fun_ref(&amp;std::string::size));
}
 | output=
4 4 1 4
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc mem_fun}}
{{dsc end}}

[[es:cpp/utility/functional/mem fun ref]]</text>
      <sha1>qspgnknmupekalcmxwb384axh1y4to1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/mem fun ref t</title>
    <ns>0</ns>
    <id>5482</id>
    <revision>
      <id>73943</id>
      <parentid>59575</parentid>
      <timestamp>2014-11-24T20:24:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="2105">{{cpp/title | mem_fun_ref_t | mem_fun1_ref_t | const_mem_fun_ref_t | const_mem_fun1_ref_t}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 | 
template&lt; class S, class T &gt; 
class mem_fun_ref_t : public unary_function&lt;T,S&gt; {
public:
    explicit mem_fun_ref_t(S (T::*p)());
    S operator()(T&amp; p) const;
};
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class S, class T &gt; 
class const_mem_fun_ref_t : public unary_function&lt;T,S&gt; {
public:
    explicit const_mem_fun_ref_t(S (T::*p)() const);
    S operator()(const T&amp; p) const;
};
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=3 | 
template&lt; class S, class T, class A &gt; 
class mem_fun1_ref_t : public binary_function&lt;T,A,S&gt; {
public:
    explicit mem_fun1_ref_t(S (T::*p)(A));
    S operator()(T&amp; p, A x) const;
};
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=4 |
template&lt; class S, class T, class A &gt; 
class const_mem_fun1_ref_t : public binary_function&lt;T,A,S&gt; {
public:
    explicit const_mem_fun1_ref_t(S (T::*p)(A) const);
    S operator()(const T&amp; p, A x) const;
};
}}
{{dcl end}}

Wrapper around a member function pointer. The class instance whose member function to call is passed as a reference to the {{tt|operator()}}.

@1@ Wraps a non-const member function with no parameters.

@2@ Wraps a const member function with no parameters.

@3@ Wraps a non-const member function with a single parameter.

@4@ Wraps a const member function with a single parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_ref}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_t}}
{{dsc end}}

[[de:cpp/utility/functional/mem fun ref t]]
[[es:cpp/utility/functional/mem fun ref t]]
[[fr:cpp/utility/functional/mem fun ref t]]
[[it:cpp/utility/functional/mem fun ref t]]
[[ja:cpp/utility/functional/mem fun ref t]]
[[pt:cpp/utility/functional/mem fun ref t]]
[[ru:cpp/utility/functional/mem fun ref t]]
[[zh:cpp/utility/functional/mem fun ref t]]</text>
      <sha1>p79xsddg0ci2kmej6sopgavpc0b20l4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/mem fun t</title>
    <ns>0</ns>
    <id>5481</id>
    <revision>
      <id>85894</id>
      <parentid>73941</parentid>
      <timestamp>2016-06-01T09:15:39Z</timestamp>
      <contributor>
        <ip>213.157.4.156</ip>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="2040">{{cpp/title | mem_fun_t | mem_fun1_t | const_mem_fun_t | const_mem_fun1_t}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 | 
template&lt; class S, class T &gt; 
class mem_fun_t : public unary_function&lt;T*,S&gt; {
public:
    explicit mem_fun_t(S (T::*p)());
    S operator()(T* p) const;
};
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class S, class T &gt; 
class const_mem_fun_t : public unary_function&lt;const T*,S&gt; {
public:
    explicit const_mem_fun_t(S (T::*p)() const);
    S operator()(const T* p) const;
};
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=3 |
template&lt; class S, class T, class Arg &gt; 
class mem_fun1_t : public binary_function&lt;T*,A,S&gt; {
public:
    explicit mem_fun1_t(S (T::*p)(A));
    S operator()(T* p, A x) const;
};
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=4 |
template&lt; class S, class T, class A &gt; 
class const_mem_fun1_t : public binary_function&lt;const T*,A,S&gt; {
public:
    explicit const_mem_fun1_t(S (T::*p)(A) const);
    S operator()(const T* p, A x) const;
};
}}
{{dcl end}}

Wrapper around a member function pointer. The class instance whose member function to call is passed as a pointer to the {{tt|operator()}}.

@1@ Wraps a non-const member function with no parameters.

@2@ Wraps a const member function with no parameters.

@3@ Wraps a non-const member function with a single parameter.

@4@ Wraps a const member function with a single parameter.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc mem_fun}}
{{dsc inc | cpp/utility/functional/dsc mem_fun_ref_t}}
{{dsc end}}

[[de:cpp/utility/functional/mem fun t]]
[[es:cpp/utility/functional/mem fun t]]
[[fr:cpp/utility/functional/mem fun t]]
[[it:cpp/utility/functional/mem fun t]]
[[ja:cpp/utility/functional/mem fun t]]
[[pt:cpp/utility/functional/mem fun t]]
[[ru:cpp/utility/functional/mem fun t]]
[[zh:cpp/utility/functional/mem fun t]]</text>
      <sha1>2mu6wfrgp28go0b30vxjrzjsvw69obv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/minus</title>
    <ns>0</ns>
    <id>4050</id>
    <revision>
      <id>83693</id>
      <parentid>66242</parentid>
      <timestamp>2016-03-07T14:34:23Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2071">{{cpp/title|minus}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct minus;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct minus;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing subtraction. Effectively calls {{c|operator-}} on two instances of type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::minus}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc minus_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the difference between two arguments}}
{{dsc end}}

{{member | {{small|std::minus::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the difference between {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to subtract from one another}}
{{par end}}

===Return value===
The result of {{c|lhs - rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs - rhs;
}
}}
}}

[[de:cpp/utility/functional/minus]]
[[es:cpp/utility/functional/minus]]
[[fr:cpp/utility/functional/minus]]
[[it:cpp/utility/functional/minus]]
[[ja:cpp/utility/functional/minus]]
[[pt:cpp/utility/functional/minus]]
[[ru:cpp/utility/functional/minus]]
[[zh:cpp/utility/functional/minus]]</text>
      <sha1>h5zla0y9hm1lx6c74ztt6tk85br52pj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/minus void</title>
    <ns>0</ns>
    <id>13050</id>
    <revision>
      <id>66278</id>
      <parentid>66234</parentid>
      <timestamp>2013-11-10T01:35:49Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template is_transparent note</comment>
      <text xml:space="preserve" bytes="1100">{{cpp/title|minus&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class minus&lt;void&gt;;
}}

{{c|std::minus&lt;&gt;}} is a specialization of {{lc|std::minus}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/minus_void | title=operator() | inlinemem=true | returns the difference of two arguments}}
{{dsc end}}

{{member | {{small|std::minus&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) - std::forward&lt;U&gt;(rhs));
}}

Returns the result of subtracting {{tt|rhs}} from {{tt|lhs}} (or whatever {{tt|operator-}} if overloaded to do)

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to subtract}}
{{par end}}

===Return value===
The result of {{c|lhs - rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>5jm9qyc5qjpzlsk0umgju4hp73gvfkb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/modulus</title>
    <ns>0</ns>
    <id>4054</id>
    <revision>
      <id>89200</id>
      <parentid>83696</parentid>
      <timestamp>2017-01-10T00:23:14Z</timestamp>
      <contributor>
        <ip>50.225.19.118</ip>
      </contributor>
      <comment>Added links to fmod and remainder, for people like me looking for a floating-point version.</comment>
      <text xml:space="preserve" bytes="2260">{{cpp/title|modulus}}
{{cpp/utility/functional/navbar}}

{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct modulus;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct modulus;
}}
{{dcl rev end}}
{{dcl end}}

Function object for computing remainders of divisions. Implements {{c|operator%}} for type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::modulus}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc modulus_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the remainder from the division of the first argument by the second argument}}
{{dsc end}}

{{member | {{small|std::modulus::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the remainder of the division of {{tt|lhs}} by {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to divide one by another}}
{{par end}}

===Return value===
The result of {{c|lhs % rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs % rhs;
}
}}
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/numeric/math/dsc fmod}}
{{dsc inc | cpp/numeric/math/dsc remainder}}
{{dsc end}}

[[de:cpp/utility/functional/modulus]]
[[es:cpp/utility/functional/modulus]]
[[fr:cpp/utility/functional/modulus]]
[[it:cpp/utility/functional/modulus]]
[[ja:cpp/utility/functional/modulus]]
[[pt:cpp/utility/functional/modulus]]
[[ru:cpp/utility/functional/modulus]]
[[zh:cpp/utility/functional/modulus]]</text>
      <sha1>at68k86tn2ihvy5uav7ok69wvovazmt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/modulus void</title>
    <ns>0</ns>
    <id>13053</id>
    <revision>
      <id>66274</id>
      <parentid>66237</parentid>
      <timestamp>2013-11-10T01:34:24Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template is_transparent note</comment>
      <text xml:space="preserve" bytes="1112">{{cpp/title|modulus&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class modulus&lt;void&gt;;
}}

{{c|std::modulus&lt;&gt;}} is a specialization of {{lc|std::modulus}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/modulus_void | title=operator() | inlinemem=true | returns the modulus of two arguments}}
{{dsc end}}

{{member | {{small|std::modulus&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) % std::forward&lt;U&gt;(rhs));
}}

Returns the remainder of the division of {{tt|lhs}} by {{tt|rhs}} (or whatever {{tt|operator%}} is overloaded to do)

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to divide}}
{{par end}}

===Return value===
The result of {{c|lhs % rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>6zaqmsrdf6roxbm2eas75pi4ck7lv8y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/multiplies</title>
    <ns>0</ns>
    <id>4052</id>
    <revision>
      <id>83694</id>
      <parentid>66244</parentid>
      <timestamp>2016-03-07T14:35:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2111">{{cpp/title|multiplies}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct multiplies;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct multiplies;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing multiplication. Effectively calls {{c|operator*}} on two instances of type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::multiplies}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc multiplies_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the product of two arguments}}
{{dsc end}}

{{member | {{small|std::multiplies::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the product of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to multiply}}
{{par end}}

===Return value===
The result of {{c|lhs * rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs * rhs;
}
}}
}}

[[de:cpp/utility/functional/multiplies]]
[[es:cpp/utility/functional/multiplies]]
[[fr:cpp/utility/functional/multiplies]]
[[it:cpp/utility/functional/multiplies]]
[[ja:cpp/utility/functional/multiplies]]
[[pt:cpp/utility/functional/multiplies]]
[[ru:cpp/utility/functional/multiplies]]
[[zh:cpp/utility/functional/multiplies]]</text>
      <sha1>dzqbo1ouv6uwj11d8sus9xpyfvx3yim</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/multiplies void</title>
    <ns>0</ns>
    <id>13051</id>
    <revision>
      <id>66276</id>
      <parentid>66235</parentid>
      <timestamp>2013-11-10T01:35:06Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template is_transparent note</comment>
      <text xml:space="preserve" bytes="1125">{{cpp/title|multiplies&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class multiplies&lt;void&gt;;
}}

{{c|std::multiplies&lt;&gt;}} is a specialization of {{lc|std::multiplies}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/multiplies_void | title=operator() | inlinemem=true | returns the product of two arguments}}
{{dsc end}}

{{member | {{small|std::multiplies&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) * std::forward&lt;U&gt;(rhs));
}}

Returns the result of multiplying {{tt|lhs}} by {{tt|rhs}} (or whatever {{tt|operator*}} is overloaded to do)

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to multiply}}
{{par end}}

===Return value===
The result of {{c|lhs * rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>2hsl1mpakpawngqyxgvk0tjrzqpar7c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/negate</title>
    <ns>0</ns>
    <id>4051</id>
    <revision>
      <id>83698</id>
      <parentid>66243</parentid>
      <timestamp>2016-03-07T14:37:55Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="1902">{{cpp/title|negate}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct negate;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct negate;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing negation. Effectively calls {{c|operator-}} on an instance of type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::negate}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc negate_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | returns the negation of the argument}}
{{dsc end}}

{{member | {{small|std::negate::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; arg ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; arg ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the negation of {{tt|arg}}.

===Parameters===
{{par begin}}
{{par | arg | value to compute negation of}}
{{par end}}

===Return value===
The result of {{c|-arg}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;arg) const 
{
    return -arg;
}
}}
}}

[[de:cpp/utility/functional/negate]]
[[es:cpp/utility/functional/negate]]
[[fr:cpp/utility/functional/negate]]
[[it:cpp/utility/functional/negate]]
[[ja:cpp/utility/functional/negate]]
[[pt:cpp/utility/functional/negate]]
[[ru:cpp/utility/functional/negate]]
[[zh:cpp/utility/functional/negate]]</text>
      <sha1>6n2h4djh3ex8g4541murquljd4bzmvi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/negate void</title>
    <ns>0</ns>
    <id>13054</id>
    <revision>
      <id>66277</id>
      <parentid>66238</parentid>
      <timestamp>2013-11-10T01:35:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template is_transparent note</comment>
      <text xml:space="preserve" bytes="1034">{{cpp/title|negate&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class negate&lt;void&gt;;
}}

{{c|std::negate&lt;&gt;}} is a specialization of {{lc|std::negate}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/negate_void | title=operator() | inlinemem=true | returns its negated argument}}
{{dsc end}}

{{member | {{small|std::negate&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T &gt;
constexpr auto operator()( T&amp;&amp; arg ) const
  -&gt; decltype(-std::forward&lt;T&gt;(arg));
}}

Returns the result of negating {{tt|arg}} (or whatever the unary {{tt|operator-}} is overloaded to do)

===Parameters===
{{par begin}}
{{par | arg | value to negate}}
{{par end}}

===Return value===
The result of {{c|-arg}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>riclxiba0mbhmol9bxv1hvizwqy0dki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/not equal to</title>
    <ns>0</ns>
    <id>4059</id>
    <revision>
      <id>83702</id>
      <parentid>66250</parentid>
      <timestamp>2016-03-07T14:39:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="2185">{{cpp/title|not_equal_to}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct not_equal_to;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct not_equal_to;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing comparisons. Unless specialised, invokes {{c|operator!{{=}}}} on type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::not_equal_to}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc not_equal_to_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|bool}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | operator() | nolink=true | checks if the arguments are ''not equal''}}
{{dsc end}}

{{member | {{small|std::not_equal_to::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Checks whether {{tt|lhs}} is ''not equal'' to {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
{{c|true}} if {{c|1=lhs != rhs}}, {{c|false}} otherwise.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr bool operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs != rhs;
}
}}
}}

[[de:cpp/utility/functional/not equal to]]
[[es:cpp/utility/functional/not equal to]]
[[fr:cpp/utility/functional/not equal to]]
[[it:cpp/utility/functional/not equal to]]
[[ja:cpp/utility/functional/not equal to]]
[[pt:cpp/utility/functional/not equal to]]
[[ru:cpp/utility/functional/not equal to]]
[[zh:cpp/utility/functional/not equal to]]</text>
      <sha1>rku8433l9brxlyu1z4wijy0eegj88a6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/not equal to void</title>
    <ns>0</ns>
    <id>13062</id>
    <revision>
      <id>66272</id>
      <parentid>66263</parentid>
      <timestamp>2013-11-10T01:33:45Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template for is_transparent note</comment>
      <text xml:space="preserve" bytes="1124">{{cpp/title|not_equal_to&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class not_equal_to&lt;void&gt;;
}}

{{c|std::not_equal_to&lt;&gt;}} is a specialization of {{lc|std::not_equal_to}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem fun | cpp/utility/functional/not_equal_to_void | title=operator() | inlinemem=true | tests if the two arguments do not compare equal}}
{{dsc end}}

{{member | {{small|std::not_equal_to&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) != std::forward&lt;U&gt;(rhs));
}}

Returns the result of non-equality comparison between {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to compare}}
{{par end}}

===Return value===
The result of {{c|lhs !{{=}} rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example}}</text>
      <sha1>0bov50oflzm4k7p54tebkssgdb6ifxw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/not fn</title>
    <ns>0</ns>
    <id>14749</id>
    <revision>
      <id>90860</id>
      <parentid>88305</parentid>
      <timestamp>2017-03-14T01:35:43Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>/* Return value */ invoke_result_t</comment>
      <text xml:space="preserve" bytes="4252">{{cpp/title|not_fn}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++17 |
template&lt; class F&gt;
/*unspecified*/ not_fn( F&amp;&amp; f );
}}
{{dcl end}}

Creates a forwarding call wrapper that returns the complement of the callable object it holds.

=== Parameters ===
{{par begin}}
{{par | f | the object from which the {{concept|Callable}} object held by the wrapper is constructed }}
{{par hreq}}
{{par req concept | {{c|std::decay_t&lt;F&gt;}}| MoveConstructible|Callable}}
{{par req | {{lc|std::is_constructible_v&lt;{{c|std::decay_t&lt;F&gt;}}, F&gt;}} is required to be true }}
{{par end}}

===Return value===
A function object of unspecified type T. It has the following members:

{{member | {{small|std::not_fn}} ''return type'' | 2=
====Member objects====
The return type of {{tt|std::not_fn}} holds a member object of type {{c|std::decay_t&lt;F&gt;}}.

====Constructors====
{{dcl begin}}
{{dcl | num=1 | 1=
explicit T(F&amp;&amp; f);
}}
{{dcl | num=2 | 1=
T(T&amp;&amp; f) = default;
T(const T&amp; f) = default;
}}
{{dcl end}}
@1@ The constructor initializes the member object (of type {{c|std::decay_t&lt;F&gt;}}) from {{c|std::forward&lt;F&gt;(f)}}. Throws any exception thrown by the constructor selected
@2@ Because {{c|std::decay_t&lt;F&gt;}} is required to be {{concept|MoveConstructible}}, the returned call wrapper is always {{concept|MoveConstructible}}, and is {{concept|CopyConstructible}} if {{c|std::decay_t&lt;F&gt;}} is {{concept|CopyConstructible}}.

====Member function {{tt|operator()}}====
{{dcl begin}}
{{dcl|num=1|1=
template&lt;class... Args&gt; auto operator()(Args&amp;&amp;... args) &amp;
 -&gt; decltype(!std::declval&lt;std::invoke_result_t&lt;std::decay_t&lt;F&gt;&amp;, Args...&gt;&gt;());
template&lt;class... Args&gt; auto operator()(Args&amp;&amp;... args) const&amp;
 -&gt; decltype(!std::declval&lt;std::invoke_result_t&lt;std::decay_t&lt;F&gt; const&amp;, Args...&gt;&gt;());
}}
{{dcl|num=2|1=
template&lt;class... Args&gt; auto operator()(Args&amp;&amp;... args) &amp;&amp;
-&gt; decltype(!std::declval&lt;std::invoke_result_t&lt;std::decay_t&lt;F&gt;, Args...&gt;&gt;());
template&lt;class... Args&gt; auto operator()(Args&amp;&amp;... args) const&amp;&amp;
-&gt; decltype(!std::declval&lt;std::invoke_result_t&lt;std::decay_t&lt;F&gt; const, Args...&gt;&gt;());
}}
{{dcl end}}
@1@ Equivalent to {{c|return !std::invoke(fd, std::forward&lt;Args&gt;(args)...)}}
@2@ Equivalent to {{c|return !std::invoke(std::move(fd), std::forward&lt;Args&gt;(args)...)}}
where {{tt|fd}} is the member object of type std::decay_t&lt;F&gt;
}}

=== Exceptions ===
Throws no exceptions, unless the construction of {{tt|fd}} throws.

&lt;!-- needs to be updated to new spec (or just dropped from this page) 
=== Possible implementation ===
{{eq fun|1=
namespace detail {
    template&lt;class F&gt;
    struct not_fn_t {
        F f;
        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args)
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }

        // cv-qualified overload for QoI
        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args) const
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }

        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args) volatile
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }
        template&lt;class... Args&gt;
        auto operator()(Args&amp;&amp;... args) const volatile
            noexcept(noexcept(!std::invoke(f, std::forward&lt;Args&gt;(args)...)))
            -&gt; decltype(!std::invoke(f, std::forward&lt;Args&gt;(args)...)) {
            return !std::invoke(f, std::forward&lt;Args&gt;(args)...);
        }
    };
}

template&lt;class F&gt;
detail::not_fn_t&lt;std::decay_t&lt;F&gt;&gt; not_fn(F&amp;&amp; f) { return { std::forward&lt;F&gt;(f) }; }
}}
--&gt;
=== Notes ===
{{tt|not_fn}} is intended to replace the C++03-era negators {{lc|std::not1}} and {{lc|std::not2}}.

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc not1}}
{{dsc inc | cpp/utility/functional/dsc not2}}
{{dsc end}}</text>
      <sha1>jyru6ab8xju236ymn0kewvmm9u9k91x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/not1</title>
    <ns>0</ns>
    <id>5254</id>
    <revision>
      <id>83725</id>
      <parentid>83677</parentid>
      <timestamp>2016-03-07T15:37:14Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* See also */ link to C++17 std::not_fn instead of std::experimental::not_fn</comment>
      <text xml:space="preserve" bytes="2580">{{cpp/title|not1}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14| 
template&lt; class Predicate &gt;
std::unary_negate&lt;Predicate&gt; not1(const Predicate&amp; pred);
}}
{{dcl | since=c++14|notes={{mark|deprecated in C++17}}| 
template&lt; class Predicate &gt;
constexpr std::unary_negate&lt;Predicate&gt; not1(const Predicate&amp; pred);
}}
{{dcl rev end}}
{{dcl end}}

{{tt|not1}} is a helper function to create a function object that returns the complement of the unary predicate function passed. The function object created is of type {{c|std::unary_negate&lt;Predicate&gt;}}.

The unary predicate type must define a member type, {{tt|argument_type}}, that is convertible to the predicate's parameter type. The unary function objects obtained from {{lc|std::ref}}, {{lc|std::cref}}, {{lc|std::negate}}, {{lc|std::logical_not}}, {{lc|std::mem_fn}}, {{lc|std::function}}, {{lc|std::hash}}, or from another call to {{lc|std::not1}} have this type defined, as are function objects derived from the deprecated {{lc|std::unary_function}}. 

===Parameters===
{{par begin}}
{{par | pred | unary predicate}}
{{par end}}

===Return value===
{{tt|std::not1}} returns an object of type {{c|std::unary_negate&lt;Predicate&gt;}}, constructed with {{tt|pred}}.

===Exceptions===
None.

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;numeric&gt;
#include &lt;iterator&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct LessThan7 : std::unary_function&lt;int, bool&gt;
{
    bool operator()(int i) const { return i &lt; 7; }
};

int main()
{
    std::vector&lt;int&gt; v(10);
    std::iota(begin(v), end(v), 0);
    
    std::cout &lt;&lt; std::count_if(begin(v), end(v), std::not1(LessThan7())) &lt;&lt; &quot;\n&quot;;
    
    //same as above, but use a lambda function
    std::function&lt;int(int)&gt; less_than_9 = [](int x){ return x &lt; 9; };
    std::cout &lt;&lt; std::count_if(begin(v), end(v), std::not1(less_than_9)) &lt;&lt; &quot;\n&quot;;
}

 | output=
3
1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc not_fn}}
{{dsc inc | cpp/utility/functional/dsc unary_negate}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc not2}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc unary_function}}
{{dsc end}}

[[de:cpp/utility/functional/not1]]
[[es:cpp/utility/functional/not1]]
[[fr:cpp/utility/functional/not1]]
[[it:cpp/utility/functional/not1]]
[[ja:cpp/utility/functional/not1]]
[[pt:cpp/utility/functional/not1]]
[[ru:cpp/utility/functional/not1]]
[[zh:cpp/utility/functional/not1]]</text>
      <sha1>mm08alq4od55gf554ed0hf41xva71cq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/not2</title>
    <ns>0</ns>
    <id>5255</id>
    <revision>
      <id>83726</id>
      <parentid>83678</parentid>
      <timestamp>2016-03-07T15:37:55Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* See also */ link to std::not_fn</comment>
      <text xml:space="preserve" bytes="4283">{{cpp/title|not2}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl |until=c++14| 
template&lt; class Predicate &gt;
std::binary_negate&lt;Predicate&gt; not2(const Predicate&amp; pred);
}}
{{dcl |since=c++14|notes={{mark|deprecated in C++17}}|
template&lt; class Predicate &gt;
constexpr std::binary_negate&lt;Predicate&gt; not2(const Predicate&amp; pred);
}}
{{dcl rev end}}
{{dcl end}}

{{tt|not2}} is a helper function to create a function object that returns the complement of the binary predicate function passed. The function object created is of type {{c|std::binary_negate&lt;Predicate&gt;}}.

The binary predicate type must define  two member types, {{tt|first_argument_type}} and {{tt|second_argument_type}}, that are convertible to the predicate's parameter types. The function objects obtained from {{lc|std::owner_less}}, {{lc|std::ref}}, {{lc|std::cref}}, {{lc|std::plus}}, {{lc|std::minus}}, {{lc|std::multiplies}}, {{lc|std::divides}}, {{lc|std::modulus}}, {{lc|std::equal_to}}, {{lc|std::not_equal_to}}, {{lc|std::greater}}, {{lc|std::less}}, {{lc|std::greater_equal}}, {{lc|std::less_equal}}, {{lc|std::logical_not}}, {{lc|std::logical_or}}, {{lc|std::bit_and}}, {{lc|std::bit_or}}, {{c|std::bit_xor}}, {{lc|std::mem_fn}}, {{c|std::map::value_comp}}, {{c|std::multimap::value_comp}}, {{lc|std::function}}, or from another call to {{lc|std::not2}} have these types defined, as are function objects derived from the deprecated {{lc|std::binary_function}}. 

===Parameters===
{{par begin}}
{{par | pred | binary predicate}}
{{par end}}

===Return value===
{{tt|std::not2}} returns an object of type {{c|std::binary_negate&lt;Predicate&gt;}}, constructed with {{tt|pred}}.

===Exceptions===
None.

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
 
struct old_same : std::binary_function&lt;int, int, bool&gt;
{
    bool operator()(int a, int b) const { return a == b; }
};
 
struct new_same
{
    bool operator()(int a, int b) const { return a == b; }
};

bool same_fn(int a, int b)
{
    return a == b;
}

 
int main()
{
    std::vector&lt;int&gt; v1{0, 1, 2};
    std::vector&lt;int&gt; v2{2, 1, 0};
    std::vector&lt;bool&gt; v3(v1.size());
 
    std::cout &lt;&lt; &quot;negating a binary_function:\n&quot;;
    std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(),
                   std::not2(old_same()));
 
    std::cout &lt;&lt; std::boolalpha;
    for (std::size_t i = 0; i &lt; v1.size(); ++i)
        std::cout &lt;&lt; v1[i] &lt;&lt; ' ' &lt;&lt; v2[i] &lt;&lt; ' ' &lt;&lt; v3[i] &lt;&lt; '\n';
 
    std::cout &lt;&lt; &quot;negating a standard functor:\n&quot;;
    std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(),
                   std::not2(std::equal_to&lt;int&gt;()));
 
    for (std::size_t i = 0; i &lt; v1.size(); ++i)
        std::cout &lt;&lt; v1[i] &lt;&lt; ' ' &lt;&lt; v2[i] &lt;&lt; ' ' &lt;&lt; v3[i] &lt;&lt; '\n';
 
    std::cout &lt;&lt; &quot;negating a std::function:\n&quot;;
    std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(),
                   std::not2(std::function&lt;bool(int,int)&gt;(new_same())));
 
    for (std::size_t i = 0; i &lt; v1.size(); ++i)
        std::cout &lt;&lt; v1[i] &lt;&lt; ' ' &lt;&lt; v2[i] &lt;&lt; ' ' &lt;&lt; v3[i] &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;negating a std::reference_wrapper:\n&quot;;
    std::transform(v1.begin(), v1.end(), v2.begin(), v3.begin(),
                   std::not2(std::ref(same_fn)));
 
    for (std::size_t i = 0; i &lt; v1.size(); ++i)
        std::cout &lt;&lt; v1[i] &lt;&lt; ' ' &lt;&lt; v2[i] &lt;&lt; ' ' &lt;&lt; v3[i] &lt;&lt; '\n';

}
 | output=
negating a binary_function:
0 2 true
1 1 false
2 0 true
negating a standard functor:
0 2 true
1 1 false
2 0 true
negating a std::function:
0 2 true
1 1 false
2 0 true
negating a std::reference_wrapper:
0 2 true
1 1 false
2 0 true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc not_fn}}
{{dsc inc | cpp/utility/functional/dsc binary_negate}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc not1}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc binary_function}}
{{dsc end}}

[[de:cpp/utility/functional/not2]]
[[es:cpp/utility/functional/not2]]
[[fr:cpp/utility/functional/not2]]
[[it:cpp/utility/functional/not2]]
[[ja:cpp/utility/functional/not2]]
[[pt:cpp/utility/functional/not2]]
[[ru:cpp/utility/functional/not2]]
[[zh:cpp/utility/functional/not2]]</text>
      <sha1>4st1fum9bvqzcdues1q720c1i3p5oc0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/placeholders</title>
    <ns>0</ns>
    <id>2474</id>
    <revision>
      <id>90940</id>
      <parentid>78542</parentid>
      <timestamp>2017-03-14T12:51:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;constexpr&quot; to &quot;inline constexpr&quot;</comment>
      <text xml:space="preserve" bytes="2674">{{cpp/title|n=placeholders::|_1|_2, ...|_N}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional}}
{{dcl |
/*see below*/ _1;
/*see below*/ _2;
.
.
/*see below*/ _N;
}}
{{dcl end}}

The {{lc|std::placeholders}} namespace contains the placeholder objects {{tt|[_1, . . . _N]}} where {{tt|N}} is an implementation defined maximum number.

When used as an argument in a {{lc|std::bind}} expression, the placeholder objects are stored in the generated function object, and when that function object is invoked with unbound arguments, each placeholder {{tt|_N}} is replaced by the corresponding Nth unbound argument.

{{rev begin}}
{{rev|until=c++17|
Each placeholder is declared as if by {{c|extern /*unspecified*/ _1;}}
}}
{{rev|since=c++17|
Implementations are encouraged to declare the placeholders as if by {{c|inline constexpr /*unspecified*/ _1;}}, although declaring them by {{c|extern /*unspecified*/ _1;}} is still allowed by the standard.
}}
{{rev end}}
The types of the placeholder objects are {{concept|DefaultConstructible}} and {{concept|CopyConstructible}}, their default copy/move constructors do not throw exceptions, and for any placeholder {{tt|_N}}, the type {{c|std::is_placeholder&lt;decltype(_N)&gt;}} is defined and is derived from {{c|std::integral_constant&lt;int, N&gt;}}.

===Example===
{{example
 | The following code shows the creation of function objects with a placeholder argument.
 | code=
#include &lt;functional&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

void goodbye(const std::string&amp; s)
{
    std::cout &lt;&lt; &quot;Goodbye &quot; &lt;&lt; s &lt;&lt; '\n';
}

class Object {
public:
    void hello(const std::string&amp; s)
    {
        std::cout &lt;&lt; &quot;Hello &quot; &lt;&lt; s &lt;&lt; '\n';
    }
};

int main(int argc, char* argv[])
{
    typedef std::function&lt;void(const std::string&amp;)&gt; ExampleFunction;
    Object instance;
    std::string str(&quot;World&quot;);
    ExampleFunction f = std::bind(&amp;Object::hello, &amp;instance, 
                                  std::placeholders::_1);
    
    // equivalent to instance.hello(str)
    f(str);
    f = std::bind(&amp;goodbye, std::placeholders::_1);
   
    // equivalent to goodbye(str)
    f(str);    
    return 0;
}
| output=
Hello World
Goodbye World
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc bind}}
{{dsc inc | cpp/utility/functional/dsc is_placeholder}}
{{dsc end}}

[[de:cpp/utility/functional/placeholders]]
[[es:cpp/utility/functional/placeholders]]
[[fr:cpp/utility/functional/placeholders]]
[[it:cpp/utility/functional/placeholders]]
[[ja:cpp/utility/functional/placeholders]]
[[pt:cpp/utility/functional/placeholders]]
[[ru:cpp/utility/functional/placeholders]]
[[zh:cpp/utility/functional/placeholders]]</text>
      <sha1>gvgtzvpagnlykzewlliln3n1z9hgqap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/plus</title>
    <ns>0</ns>
    <id>4049</id>
    <revision>
      <id>83692</id>
      <parentid>66221</parentid>
      <timestamp>2016-03-07T14:34:00Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated typedefs</comment>
      <text xml:space="preserve" bytes="1987">{{cpp/title|plus}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++14 |
template&lt; class T &gt;
struct plus;
}}
{{dcl | since=c++14 |
template&lt; class T {{=}} void &gt;
struct plus;
}}
{{dcl rev end}}
{{dcl end}}

Function object for performing addition. Effectively calls {{c|operator+}} on two instances of type {{tt|T}}.

===Specializations===
{{rev begin}}
{{rev | since=c++14 |
The standard library provides a specialization of {{tt|std::plus}} when {{tt|T}} is not specified, which leaves the parameter types and return type to be deduced.
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc plus_void}}
{{dsc end}}
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | {{tt|T}}}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/plus/dsc operator()}}
{{dsc end}}

{{member | {{small|std::plus::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl |since=c++14|
constexpr T operator()( const T&amp; lhs, const T&amp; rhs ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the sum of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to sum}}
{{par end}}

===Return value===
The result of {{c|lhs + rhs}}.

===Exceptions===
(none)

===Possible implementation===
{{eq fun | 1=
constexpr T operator()(const T &amp;lhs, const T &amp;rhs) const 
{
    return lhs + rhs;
}
}}
}}

[[de:cpp/utility/functional/plus]]
[[es:cpp/utility/functional/plus]]
[[fr:cpp/utility/functional/plus]]
[[it:cpp/utility/functional/plus]]
[[ja:cpp/utility/functional/plus]]
[[pt:cpp/utility/functional/plus]]
[[ru:cpp/utility/functional/plus]]
[[zh:cpp/utility/functional/plus]]</text>
      <sha1>iokfocgbi3yuhqy8e0jsr3459nspx2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/plus void</title>
    <ns>0</ns>
    <id>12865</id>
    <revision>
      <id>66279</id>
      <parentid>66232</parentid>
      <timestamp>2013-11-10T01:36:35Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>template is_transparent note, show heterogeneity in the example</comment>
      <text xml:space="preserve" bytes="1148">{{cpp/title|plus&lt;void&gt;}}
{{cpp/utility/functional/navbar}}
{{ddcl | header=functional | since=c++14 |
template&lt;&gt;
class plus&lt;void&gt;;
}}

{{c|std::plus&lt;&gt;}} is a specialization of {{lc|std::plus}} with parameter and return type deduced.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|is_transparent}} | /* unspecified */}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/plus_void/dsc operator()}}
{{dsc end}}

{{member | {{small|std::plus&lt;&gt;::}}operator() | 2=
{{ddcl | 1=
template&lt; class T, class U&gt;
constexpr auto operator()( T&amp;&amp; lhs, U&amp;&amp; rhs ) const
  -&gt; decltype(std::forward&lt;T&gt;(lhs) + std::forward&lt;U&gt;(rhs));
}}

Returns the sum of {{tt|lhs}} and {{tt|rhs}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | values to sum}}
{{par end}}

===Return value===
The result of {{c|lhs + rhs}}.
}}

===Notes===
{{cpp/utility/functional/is_transparent_note}}

===Example===
{{example
|code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

int main()
{
    std::string a = &quot;Hello &quot;;
    const char* b = &quot;world&quot;;
    std::cout &lt;&lt; std::plus&lt;&gt;{}(a, b) &lt;&lt; '\n';
}
|output=
Hello world
}}</text>
      <sha1>etfbfpzdxa22iuwmcopkcni7c2xf5u5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/pointer to binary function</title>
    <ns>0</ns>
    <id>5476</id>
    <revision>
      <id>73939</id>
      <parentid>59587</parentid>
      <timestamp>2014-11-24T20:21:38Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="1942">{{cpp/title|pointer_to_binary_function}}
{{cpp/utility/functional/navbar}}
{{ddcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} |
template&lt; 
    class Arg1, 
    class Arg2,
    class Result 
&gt; class pointer_to_binary_function : public std::binary_function&lt;Arg1, Arg2, Result&gt;;
}}

{{tt|std::pointer_to_binary_function}} is a function object that acts as a wrapper around a binary function.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | nolink=true | constructs a new {{tt|pointer_to_binary_function}} object with the supplied function}}
{{dsc mem fun | operator() | nolink=true | calls the stored function}}
{{dsc end}}

{{member | {{small|std::pointer_to_binary_function::}}pointer_to_binary_function | 2=
{{ddcl | 1=
explicit pointer_to_binary_function( Result (*f)(Arg1,Arg2) );
}}

Constructs a {{tt|pointer_to_binary_function}} function object with the stored function {{tt|f}}.

===Parameters===
{{par begin}}
{{par | f | pointer to a function to store}}
{{par end}}

}}

{{member | {{small|std::pointer_to_binary_function::}}operator() | 2=
{{ddcl | 1=
Result operator()( Arg1 x1, Arg2 x2 ) const;
}}

Calls the stored function.

===Parameters===
{{par begin}}
{{par | x1, x2 | arguments to pass to the function}}
{{par end}}

===Return value===
The value returned by the called function.

}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_unary_function}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc end}}

[[de:cpp/utility/functional/pointer to binary function]]
[[es:cpp/utility/functional/pointer to binary function]]
[[fr:cpp/utility/functional/pointer to binary function]]
[[it:cpp/utility/functional/pointer to binary function]]
[[ja:cpp/utility/functional/pointer to binary function]]
[[pt:cpp/utility/functional/pointer to binary function]]
[[ru:cpp/utility/functional/pointer to binary function]]
[[zh:cpp/utility/functional/pointer to binary function]]</text>
      <sha1>gm3smbkzrpkx4758glevsqaq0f9016m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/pointer to unary function</title>
    <ns>0</ns>
    <id>5475</id>
    <revision>
      <id>73938</id>
      <parentid>59590</parentid>
      <timestamp>2014-11-24T20:21:14Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in c++17</comment>
      <text xml:space="preserve" bytes="1877">{{cpp/title|pointer_to_unary_function}}
{{cpp/utility/functional/navbar}}
{{ddcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} |
template&lt; 
    class Arg, 
    class Result 
&gt; class pointer_to_unary_function : public std::unary_function&lt;Arg, Result&gt;;
}}

{{tt|std::pointer_to_unary_function}} is a function object that acts as a wrapper around a unary function.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | nolink=true | constructs a new {{tt|pointer_to_unary_function}} object with the supplied function}}
{{dsc mem fun | operator() | nolink=true | calls the stored function}}
{{dsc end}}

{{member | {{small|std::pointer_to_unary_function::}}pointer_to_unary_function | 2=
{{ddcl | 1=
explicit pointer_to_unary_function( Result (*f)(Arg) );
}}

Constructs a {{tt|pointer_to_unary_function}} function object with the stored function {{tt|f}}.

===Parameters===
{{par begin}}
{{par | f | pointer to a function to store}}
{{par end}}

}}

{{member | {{small|std::pointer_to_unary_function::}}operator() | 2=
{{ddcl | 1=
Result operator()( Arg x ) const;
}}

Calls the stored function.

===Parameters===
{{par begin}}
{{par | x | argument to pass to the function}}
{{par end}}

===Return value===
The value returned by the called function.

}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_binary_function}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc end}}

[[de:cpp/utility/functional/pointer to unary function]]
[[es:cpp/utility/functional/pointer to unary function]]
[[fr:cpp/utility/functional/pointer to unary function]]
[[it:cpp/utility/functional/pointer to unary function]]
[[ja:cpp/utility/functional/pointer to unary function]]
[[pt:cpp/utility/functional/pointer to unary function]]
[[ru:cpp/utility/functional/pointer to unary function]]
[[zh:cpp/utility/functional/pointer to unary function]]</text>
      <sha1>a09tjvg1h0ho9ip4j1xcqsvsedk05yf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/ptr fun</title>
    <ns>0</ns>
    <id>5477</id>
    <revision>
      <id>76279</id>
      <parentid>73937</parentid>
      <timestamp>2015-02-14T10:34:20Z</timestamp>
      <contributor>
        <username>Sarcasm</username>
        <id>630</id>
      </contributor>
      <minor/>
      <comment>Use std::cref() instead of std::ref() for C++11 alternatives example</comment>
      <text xml:space="preserve" bytes="2136">{{cpp/title|ptr_fun}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=1 |
template&lt; class Arg, class Result &gt;
std::pointer_to_unary_function&lt;Arg,Result&gt;
    ptr_fun( Result (*f)(Arg) );
}}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since C++11}} | num=2 |
template&lt; class Arg1, class Arg2, class Result &gt;
std::pointer_to_binary_function&lt;Arg1,Arg2,Result&gt;
    ptr_fun( Result (*f)(Arg1, Arg2) );
}}
{{dcl end}}

Creates a function wrapper object (either {{c|std::pointer_to_unary_function}} or {{c|std::pointer_to_binary_function}}), deducing the target type from the template arguments.

1) Effectively calls {{c|std::pointer_to_unary_function&lt;Arg,Result&gt;(f)}}.

2) Effectively calls {{c|std::pointer_to_binary_function&lt;Arg1,Arg2,Result&gt;(f)}}.

This function and the related types are deprecated as of C++11 in favor of the more general {{lc|std::function}} and {{lc|std::ref}}, both of which create callable adapter-compatible function objects from plain functions.

===Parameters===
{{par begin}}
{{par | f | pointer to a function to create a wrapper for}}
{{par end}}

===Return value===
A function object wrapping {{tt|f}}.

===Exceptions===
(none)

===Example===
{{example
 | 
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

bool isvowel(char c)
{
    return std::string(&quot;aeoiuAEIOU&quot;).find(c) != std::string::npos;
}

int main()
{
    std::string s = &quot;Hello, world!&quot;;
    std::copy_if(s.begin(), s.end(), std::ostreambuf_iterator&lt;char&gt;(std::cout),
                 std::not1(std::ptr_fun(isvowel)));
// C++11 alternatives: 
//               std::not1(std::cref(isvowel)));
//               std::not1(std::function&lt;bool(char)&gt;(isvowel)));

}
 | output=
Hll, wrld!
}}

[[de:cpp/utility/functional/ptr fun]]
[[es:cpp/utility/functional/ptr fun]]
[[fr:cpp/utility/functional/ptr fun]]
[[it:cpp/utility/functional/ptr fun]]
[[ja:cpp/utility/functional/ptr fun]]
[[pt:cpp/utility/functional/ptr fun]]
[[ru:cpp/utility/functional/ptr fun]]
[[zh:cpp/utility/functional/ptr fun]]</text>
      <sha1>g6bn9w6y1xkbs3ixytm32743fbwa2cu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/ref</title>
    <ns>0</ns>
    <id>5225</id>
    <revision>
      <id>91876</id>
      <parentid>91161</parentid>
      <timestamp>2017-03-31T20:00:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2501">{{cpp/title|ref|cref}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++11 | num=1|
template&lt; class T &gt;
std::reference_wrapper&lt;T&gt; ref(T&amp; t);
}}
{{dcl | since=c++11 | num=2|
template&lt; class T &gt;
std::reference_wrapper&lt;T&gt; ref( std::reference_wrapper&lt;T&gt; t );
}}
{{dcl | since=c++11 | num=3|
template &lt;class T&gt;
void ref(const T&amp;&amp;) {{=}} delete;
}}
{{dcl | since=c++11 | num=4|
template&lt; class T &gt;
std::reference_wrapper&lt;const T&gt; cref( const T&amp; t );
}}
{{dcl | since=c++11 | num=5|
template&lt; class T &gt;
std::reference_wrapper&lt;const T&gt; cref( std::reference_wrapper&lt;T&gt; t );
}}
{{dcl | since=c++11 | num=6|
template &lt;class T&gt;
void cref(const T&amp;&amp;) {{=}} delete;
}}
{{dcl end}}

Function templates {{tt|ref}} and {{tt|cref}} are helper functions that generate an object of type {{lc|std::reference_wrapper}}, using [[cpp/language/template_argument_deduction|template argument deduction]] to determine the template argument of the result.

===Parameters===
{{par begin}}
{{par | t | lvalue reference to object that needs to be wrapped or an instance of {{lc|std::reference_wrapper}}}}
{{par end}}

===Return value===
@1@ {{c|std::reference_wrapper&lt;T&gt;(t)}}
@2@ {{c|ref(t.get())}}
@4@ {{c|std::reference_wrapper&lt;const T&gt;(t)}}
@5@ {{c|cref(t.get())}}
@3,6@ rvalue reference wrapper is deleted.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
#include &lt;functional&gt;
#include &lt;iostream&gt;

void f(int&amp; n1, int&amp; n2, const int&amp; n3)
{
    std::cout &lt;&lt; &quot;In function: &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; ' ' &lt;&lt; n3 &lt;&lt; '\n';
    ++n1; // increments the copy of n1 stored in the function object
    ++n2; // increments the main()'s n2
    // ++n3; // compile error
}

int main()
{
    int n1 = 1, n2 = 2, n3 = 3;
    std::function&lt;void()&gt; bound_f = std::bind(f, n1, std::ref(n2), std::cref(n3));
    n1 = 10;
    n2 = 11;
    n3 = 12;
    std::cout &lt;&lt; &quot;Before function: &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; ' ' &lt;&lt; n3 &lt;&lt; '\n';
    bound_f();
    std::cout &lt;&lt; &quot;After function: &quot; &lt;&lt; n1 &lt;&lt; ' ' &lt;&lt; n2 &lt;&lt; ' ' &lt;&lt; n3 &lt;&lt; '\n';
}
 | output=
Before function: 10 11 12
In function: 1 11 12
After function: 10 12 12
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc reference_wrapper}}
{{dsc end}}

[[de:cpp/utility/functional/ref]]
[[es:cpp/utility/functional/ref]]
[[fr:cpp/utility/functional/ref]]
[[it:cpp/utility/functional/ref]]
[[ja:cpp/utility/functional/ref]]
[[pt:cpp/utility/functional/ref]]
[[ru:cpp/utility/functional/ref]]
[[zh:cpp/utility/functional/ref]]</text>
      <sha1>afjxh6vjtsirbxnbvhq2jr0uqvm1poa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/reference wrapper</title>
    <ns>0</ns>
    <id>5219</id>
    <revision>
      <id>83690</id>
      <parentid>81919</parentid>
      <timestamp>2016-03-07T14:31:40Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>deprecated typedefs in p0005r4.</comment>
      <text xml:space="preserve" bytes="6107">{{cpp/title|reference_wrapper}}
{{cpp/utility/functional/reference_wrapper/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | since=c++11 |
template&lt; class T &gt;
class reference_wrapper;
}}
{{dcl end}}

{{tt|std::reference_wrapper}} is a class template that wraps a reference in a copyable, assignable object.  It is frequently used as a mechanism to store references inside standard containers (like {{lc|std::vector}}) which cannot normally hold references.

Specifically, {{tt|std::reference_wrapper}} is a {{concept|CopyConstructible}} and {{concept|CopyAssignable}} wrapper around a reference to object or reference to function of type {{tt|T}}. Instances of {{tt|std::reference_wrapper}} are objects (they can be copied or stored in containers) but they are implicitly convertible to {{c|T&amp;}}, so that they can be used as arguments with the functions that take the underlying type by reference.

Helper functions {{lc|std::ref}} and {{lc|std::cref}} are often used to generate {{tt|std::reference_wrapper}} objects. 

{{tt|std::reference_wrapper}} is also used to pass objects to {{lc|std::bind}} or to the constructor of {{lc|std::thread}} by reference.

{{rev begin}}
{{rev|since=c++17|
{{tt|std::reference_wrapper}} is guaranteed to be {{concept|TriviallyCopyable}}.
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | type | definition }}
{{dsc | {{tt|type}} | {{tt|T}}}}
{{dsc | {{tt|result_type}}{{mark|deprecated in C++17}} | The return type of {{tt|T}} if {{tt|T}} is a function. Otherwise, not defined }}
{{dsc | {{tt|argument_type}}{{mark|deprecated in C++17}} | 1) if {{tt|T}} is a function or pointer to function that takes one argument of type {{tt|A1}},  then {{tt|argument_type}} is {{tt|A1}}.&lt;br&gt;
2) if {{tt|T}} is a pointer to member function of class {{tt|T0}} that takes no arguments, then {{tt|argument_type}} is {{tt|T0*}}, possibly cv-qualified&lt;br&gt;
3) if {{tt|T}} is a class type with a member type {{tt|T::argument_type}}, then {{tt|argument_type}} is an alias of that}}
{{dsc | {{tt|first_argument_type}}{{mark|deprecated in C++17}} | 1) if {{tt|T}} is a function or pointer to function that takes two arguments of type s {{tt|A1}} and {{tt|A2}}, then {{tt|first_argument_type}} is {{tt|A1}}.&lt;br&gt;
2) if {{tt|T}} is a pointer to member function of class {{tt|T0}} that takes one argument, then {{tt|first_argument_type}} is {{tt|T0*}}, possibly cv-qualified&lt;br&gt;
3) if {{tt|T}} is a class type with a member type {{tt|T::first_argument_type}}, then {{tt|first_argument_type}} is an alias of that
}}
{{dsc | {{tt|second_argument_type}}{{mark|deprecated in C++17}} |1) if {{tt|T}} is a function or pointer to function that takes two arguments of type s {{tt|A1}} and {{tt|A2}}, then {{tt|second_argument_type}} is {{tt|A2}}.&lt;br&gt;
2) if {{tt|T}} is a pointer to member function of class {{tt|T0}} that takes one argument {{tt|A1}}, then {{tt|second_argument_type}} is {{tt|A1}}, possibly cv-qualified&lt;br&gt;
3) if {{tt|T}} is a class type with a member type {{tt|T::second_argument_type}}, then {{tt|second_argument_type}} is an alias of that}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc constructor}}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc operator{{=}} }}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc get}}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc operator()}}
{{dsc end}}

===Possible implementation===
{{eq fun
 | 1=
template &lt;class T&gt;
class reference_wrapper {
public:
  // types
  typedef T type;
 
  // construct/copy/destroy
  reference_wrapper(T&amp; ref) noexcept : _ptr(std::addressof(ref)) {}
  reference_wrapper(T&amp;&amp;) = delete;
  reference_wrapper(const reference_wrapper&amp;) noexcept = default;
 
  // assignment
  reference_wrapper&amp; operator=(const reference_wrapper&amp; x) noexcept = default;
 
  // access
  operator T&amp; () const noexcept { return *_ptr; }
  T&amp; get() const noexcept { return *_ptr; }

  template&lt; class... ArgTypes &gt;
  typename std::result_of&lt;T&amp;(ArgTypes&amp;&amp;...)&gt;::type
    operator() ( ArgTypes&amp;&amp;... args ) const {
    return std::invoke(get(), std::forward&lt;ArgTypes&gt;(args)...);
  }
 
private:
  T* _ptr;
};
}}

===Example===
{{example
 | Demonstrates the use of reference_wrapper as a container of references, which makes it possible to access the same container using multiple indexes
 | code=
#include &lt;algorithm&gt;
#include &lt;list&gt;
#include &lt;vector&gt;
#include &lt;iostream&gt;
#include &lt;numeric&gt;
#include &lt;random&gt;
#include &lt;functional&gt;

int main()
{
    std::list&lt;int&gt; l(10);
    std::iota(l.begin(), l.end(), -4);

    std::vector&lt;std::reference_wrapper&lt;int&gt;&gt; v(l.begin(), l.end());
    // can't use shuffle on a list (requires random access), but can use it on a vector
    std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});

    std::cout &lt;&lt; &quot;Contents of the list: &quot;;
    for (int n : l) std::cout &lt;&lt; n &lt;&lt; ' '; std::cout &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;Contents of the list, as seen through a shuffled vector: &quot;;
    for (int i : v) std::cout &lt;&lt; i &lt;&lt; ' '; std::cout &lt;&lt; '\n';

    std::cout &lt;&lt; &quot;Doubling the values in the initial list...\n&quot;;
    for (int&amp; i : l) {
        i *= 2;
    }

    std::cout &lt;&lt; &quot;Contents of the list, as seen through a shuffled vector: &quot;;
    for (int i : v) std::cout &lt;&lt; i &lt;&lt; ' '; std::cout &lt;&lt; '\n';
}
|p=true
| output=
Contents of the list: -4 -3 -2 -1 0 1 2 3 4 5 
Contents of the list, as seen through a shuffled vector: -1 2 -2 1 5 0 3 -3 -4 4 
Doubling the values in the initial list...
Contents of the list, as seen through a shuffled vector: -2 4 -4 2 10 0 6 -6 -8 8 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc ref}}
{{dsc inc | cpp/utility/functional/dsc bind}}
{{dsc end}}

[[de:cpp/utility/functional/reference wrapper]]
[[es:cpp/utility/functional/reference wrapper]]
[[fr:cpp/utility/functional/reference wrapper]]
[[it:cpp/utility/functional/reference wrapper]]
[[ja:cpp/utility/functional/reference wrapper]]
[[pt:cpp/utility/functional/reference wrapper]]
[[ru:cpp/utility/functional/reference wrapper]]
[[zh:cpp/utility/functional/reference wrapper]]</text>
      <sha1>iql523a9wz4b73p1obs1d7qv91yrza3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/reference wrapper/get</title>
    <ns>0</ns>
    <id>5460</id>
    <revision>
      <id>91596</id>
      <parentid>63091</parentid>
      <timestamp>2017-03-31T19:51:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="907">{{cpp/utility/functional/reference_wrapper/title|get|operator T&amp;}}
{{cpp/utility/functional/reference_wrapper/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 
operator T&amp; () const;
}}
{{dcl | since=c++11 |
T&amp; get() const;
}}
{{dcl end}}

Returns the stored reference.

===Parameters===
(none)

===Return value===
The stored reference.

===Exceptions===
1-2) {{unreviewed noexcept}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc operator()}}
{{dsc end}}

[[de:cpp/utility/functional/reference wrapper/get]]
[[es:cpp/utility/functional/reference wrapper/get]]
[[fr:cpp/utility/functional/reference wrapper/get]]
[[it:cpp/utility/functional/reference wrapper/get]]
[[ja:cpp/utility/functional/reference wrapper/get]]
[[pt:cpp/utility/functional/reference wrapper/get]]
[[ru:cpp/utility/functional/reference wrapper/get]]
[[zh:cpp/utility/functional/reference wrapper/get]]</text>
      <sha1>og2sbxy7cpgc9jnh0ylzw6jdubbqkb8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/reference wrapper/operator()</title>
    <ns>0</ns>
    <id>5461</id>
    <revision>
      <id>90859</id>
      <parentid>90858</parentid>
      <timestamp>2017-03-14T01:34:15Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2005">{{cpp/utility/functional/reference_wrapper/title|operator()}}
{{cpp/utility/functional/reference_wrapper/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | until=c++17|1=
template&lt; class... ArgTypes &gt;
typename std::result_of&lt;T&amp;(ArgTypes&amp;&amp;...)&gt;::type
    operator() ( ArgTypes&amp;&amp;... args ) const;
}}
{{dcl | since=c++17 |1=
template&lt; class... ArgTypes &gt;
std::invoke_result_t&lt;T&amp;, ArgTypes...&gt;
    operator() ( ArgTypes&amp;&amp;... args ) const;
}}
{{dcl end}}

Calls the {{concept|Callable}} object, reference to which is stored. This function is available only if the stored reference points to a {{concept|Callable}} object.

===Parameters===
{{par begin}}
{{par | args | arguments to pass to the called function}}
{{par end}}

===Return value===
The return value of the called function.

===Exceptions===
(none)

===Example===
{{example |
|code=
#include &lt;iostream&gt;
#include &lt;functional&gt;

void f1()
{
    std::cout &lt;&lt; &quot;reference to function called\n&quot;;
}
void f2(int n)
{
    std::cout &lt;&lt; &quot;bind expression called with &quot; &lt;&lt; n &lt;&lt; &quot; as the argument\n&quot;;
}

int main()
{
    std::reference_wrapper&lt;void()&gt; ref1 = std::ref(f1);
    ref1();

    auto b = std::bind(f2, std::placeholders::_1);
    auto ref2 = std::ref(b);
    ref2(7);

    auto c = []{std::cout &lt;&lt; &quot;lambda function called\n&quot;; };
    auto ref3 = std::ref(c);
    ref3();
}
|output=
reference to function called
bind expression called with 7 as the argument
lambda function called
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/reference_wrapper/dsc get}}
{{dsc end}}

[[de:cpp/utility/functional/reference wrapper/operator()]]
[[es:cpp/utility/functional/reference wrapper/operator()]]
[[fr:cpp/utility/functional/reference wrapper/operator()]]
[[it:cpp/utility/functional/reference wrapper/operator()]]
[[ja:cpp/utility/functional/reference wrapper/operator()]]
[[pt:cpp/utility/functional/reference wrapper/operator()]]
[[ru:cpp/utility/functional/reference wrapper/operator()]]
[[zh:cpp/utility/functional/reference wrapper/operator()]]</text>
      <sha1>f3nm8l7b4tw4s4o7mmu5h95w16nlmq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/reference wrapper/operator=</title>
    <ns>0</ns>
    <id>5459</id>
    <revision>
      <id>91743</id>
      <parentid>63504</parentid>
      <timestamp>2017-03-31T19:56:37Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="941">{{cpp/utility/functional/reference_wrapper/title|operator{{=}}}}
{{cpp/utility/functional/reference_wrapper/navbar}}
{{ddcl | since=c++11 | 1=
reference_wrapper&amp; operator=( const reference_wrapper&lt;T&gt;&amp; other );
}}

Copy assignment operator. Drops the current reference and stores a reference to {{c|other.get()}}.

===Parameters===
{{par begin}}
{{par | other | reference wrapper to copy}}
{{par end}}

===Return values===
{{c|*this}}

===Exceptions=== 
{{unreviewed noexcept}}

[[de:cpp/utility/functional/reference wrapper/operator=]]
[[es:cpp/utility/functional/reference wrapper/operator=]]
[[fr:cpp/utility/functional/reference wrapper/operator=]]
[[it:cpp/utility/functional/reference wrapper/operator=]]
[[ja:cpp/utility/functional/reference wrapper/operator=]]
[[pt:cpp/utility/functional/reference wrapper/operator=]]
[[ru:cpp/utility/functional/reference wrapper/operator=]]
[[zh:cpp/utility/functional/reference wrapper/operator=]]</text>
      <sha1>mg3x6ui39bh5p9ncxe6iniy0yu2hidm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/reference wrapper/reference wrapper</title>
    <ns>0</ns>
    <id>5458</id>
    <revision>
      <id>91872</id>
      <parentid>63967</parentid>
      <timestamp>2017-03-31T20:00:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1235">{{cpp/utility/functional/reference_wrapper/title|reference_wrapper}}
{{cpp/utility/functional/reference_wrapper/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
reference_wrapper( T&amp; x );
}}
{{dcl | since=c++11 | 1=
reference_wrapper( T&amp;&amp; x ) = delete;
}}
{{dcl | since=c++11 | 1=
reference_wrapper( const reference_wrapper&lt;T&gt;&amp; other );
}}
{{dcl end}}

Constructs a new reference wrapper.

1) Stores a reference to {{tt|x}}.

2) Construction from a temporary object is not allowed.

3) Copy constructor. Stores a reference to {{tt|other.get()}}.

===Parameters===
{{par begin}}
{{par | x | an object to wrap}}
{{par | other | another reference wrapper}}
{{par end}}

===Exceptions===
{{unreviewed noexcept}}

[[de:cpp/utility/functional/reference wrapper/reference wrapper]]
[[es:cpp/utility/functional/reference wrapper/reference wrapper]]
[[fr:cpp/utility/functional/reference wrapper/reference wrapper]]
[[it:cpp/utility/functional/reference wrapper/reference wrapper]]
[[ja:cpp/utility/functional/reference wrapper/reference wrapper]]
[[pt:cpp/utility/functional/reference wrapper/reference wrapper]]
[[ru:cpp/utility/functional/reference wrapper/reference wrapper]]
[[zh:cpp/utility/functional/reference wrapper/reference wrapper]]</text>
      <sha1>72mwnxyw5z2ibf568fdnkf9017rr0xu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/unary function</title>
    <ns>0</ns>
    <id>5155</id>
    <revision>
      <id>73932</id>
      <parentid>67554</parentid>
      <timestamp>2014-11-24T20:13:27Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>gone in 17</comment>
      <text xml:space="preserve" bytes="2511">{{cpp/title|unary_function}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl | notes={{mark until c++17}}&lt;br&gt;{{mark|deprecated since c++11}} | 1=
template &lt;typename ArgumentType, typename ResultType&gt;
struct unary_function;
}}
{{dcl end}}

{{tt|unary_function}} is a base class for creating function objects with one argument.

{{tt|unary_function}} does not define {{c|operator()}}; it is expected that derived classes will define this. {{tt|unary_function}} provides only two types - {{tt|argument_type}} and {{tt|result_type}} - defined by the template parameters.

Some standard library function object adaptors, such as {{lc|std::not1}}, require the function objects they adapt to have certain types defined; {{lc|std::not1}} requires the function object being adapted to have a type named {{tt|argument_type}}. Deriving function objects that take one argument from {{tt|unary_function}} is an easy way to make them compatible with those adaptors.

{{tt|unary_function}} is deprecated in C++11.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|argument_type}} | {{tt|ArgumentType}} }}
{{dsc | {{tt|result_type}} | {{tt|ResultType}} }}
{{dsc end}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct less_than_7 : std::unary_function&lt;int, bool&gt;
{
    bool operator()(int i) const { return i &lt; 7; }
};

int main()
{
    std::vector&lt;int&gt; v;
    for (int i = 0; i &lt; 10; ++i) v.push_back(i);
    
    std::cout &lt;&lt; std::count_if(v.begin(), v.end(), std::not1(less_than_7()));
    
    /* C++11 solution:
        // Cast to std::function&lt;bool (int)&gt; somehow - even with a lambda
        std::cout &lt;&lt; std::count_if(v.begin(), v.end(),
            std::not1(std::function&lt;bool (int)&gt;([](int i){ return i &lt; 7; }))
        );
    */
}
 | output=
3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc pointer_to_unary_function}}
{{dsc inc | cpp/utility/functional/dsc binary_function}}
{{dsc end}}

[[de:cpp/utility/functional/unary function]]
[[es:cpp/utility/functional/unary function]]
[[fr:cpp/utility/functional/unary function]]
[[it:cpp/utility/functional/unary function]]
[[ja:cpp/utility/functional/unary function]]
[[pt:cpp/utility/functional/unary function]]
[[ru:cpp/utility/functional/unary function]]
[[zh:cpp/utility/functional/unary function]]</text>
      <sha1>0zxw8u1cu8yh3hsqpqtphuay6h8h51n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/functional/unary negate</title>
    <ns>0</ns>
    <id>5161</id>
    <revision>
      <id>83679</id>
      <parentid>66307</parentid>
      <timestamp>2016-03-07T14:11:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>deprecated in 17</comment>
      <text xml:space="preserve" bytes="3880">{{cpp/title|unary_negate}}
{{cpp/utility/functional/navbar}}
{{dcl begin}}
{{dcl header | functional }}
{{dcl rev begin}}
{{dcl | until=c++11 |
template&lt; class Predicate &gt;
struct unary_negate : public std::unary_function&lt;Predicate::argument_type, bool&gt;;
}}
{{dcl | since=c++11 |notes={{mark|deprecated in C++17}}| 
template&lt; class Predicate &gt;
struct unary_negate;
}}
{{dcl rev end}}
{{dcl end}}

{{tt|unary_negate}} is a wrapper function object returning the complement of the unary predicate it holds.

The unary predicate type must define a member type, {{tt|argument_type}}, that is convertible to the predicate's parameter type. The unary function objects obtained from {{lc|std::ref}}, {{lc|std::cref}}, {{lc|std::negate}}, {{lc|std::logical_not}}, {{lc|std::mem_fn}}, {{lc|std::function}}, {{lc|std::hash}}, or from another call to {{lc|std::not1}} have this type defined, as are function objects derived from the deprecated {{lc|std::unary_function}}. 

{{tt|unary_negate}} objects are easily constructed with helper function {{lc|std::not1}}.

===Member types===
{{dsc begin}}
{{dsc hitem | Type | Definition }}
{{dsc | {{tt|argument_type}} | {{c|Predicate::argument_type}} }}
{{dsc | {{tt|result_type}} | {{c|bool}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | nolink=true | constructs a new unary_negate object with the supplied predicate}}
{{dsc mem fun | operator() | nolink=true | returns the logical complement of the result of a call to the stored predicate}}
{{dsc end}}

{{member | {{small|std::unary_negate::}}unary_negate | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
explicit unary_negate( Predicate const&amp; pred );
}}
{{dcl |since=c++14|
explicit constexpr unary_negate( Predicate const&amp; pred );
}}
{{dcl rev end}}
{{dcl end}}

Constructs a {{tt|unary_negate}} function object with the stored predicate {{tt|pred}}.

===Parameters===
{{par begin}}
{{par | pred | predicate function object}}
{{par end}}

}}

{{member | {{small|std::unary_negate::}}operator() | 2=
{{dcl begin}}
{{dcl rev begin}}
{{dcl |until=c++14|
bool operator()( argument_type const&amp; x ) const;
}}
{{dcl |since=c++14|
constexpr bool operator()( argument_type const&amp; x ) const;
}}
{{dcl rev end}}
{{dcl end}}

Returns the logical complement of the result of calling  {{c|pred(x)}}.

===Parameters===
{{par begin}}
{{par | x | argument to pass through to predicate}}
{{par end}}

===Return value===
The logical complement of the result of calling {{c|pred(x)}}.

}}

===Example===
{{example
 |
 | code=
#include &lt;algorithm&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct less_than_7 : std::unary_function&lt;int, bool&gt;
{
    bool operator()(int i) const { return i &lt; 7; }
};

int main()
{
    std::vector&lt;int&gt; v;
    for (int i = 0; i &lt; 10; ++i) v.push_back(i);
    
    std::unary_negate&lt;less_than_7&gt; not_less_than_7((less_than_7()));
    
    std::cout &lt;&lt; std::count_if(v.begin(), v.end(), not_less_than_7);
    
    /* C++11 solution:
        // Use std::function&lt;bool (int)&gt;
        std::function&lt;bool (int)&gt; not_less_than_7 =
            [](int x)-&gt;bool{ return !less_than_7()(x); };
        
        std::cout &lt;&lt; std::count_if(v.begin(), v.end(), not_less_than_7);
    */
}
 | output=
3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/functional/dsc binary_negate}}
{{dsc inc | cpp/utility/functional/dsc function}}
{{dsc inc | cpp/utility/functional/dsc not1}}
{{dsc inc | cpp/utility/functional/dsc ptr_fun}}
{{dsc inc | cpp/utility/functional/dsc unary_function}}
{{dsc end}}

[[de:cpp/utility/functional/unary negate]]
[[es:cpp/utility/functional/unary negate]]
[[fr:cpp/utility/functional/unary negate]]
[[it:cpp/utility/functional/unary negate]]
[[ja:cpp/utility/functional/unary negate]]
[[pt:cpp/utility/functional/unary negate]]
[[ru:cpp/utility/functional/unary negate]]
[[zh:cpp/utility/functional/unary negate]]</text>
      <sha1>fi2cdbu507h6edago1fkjubf8asz9um</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/hash</title>
    <ns>0</ns>
    <id>2990</id>
    <revision>
      <id>91129</id>
      <parentid>90431</parentid>
      <timestamp>2017-03-20T22:10:18Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0599r1 defaults noexcept</comment>
      <text xml:space="preserve" bytes="8851">{{cpp/title | hash}}
{{cpp/utility/hash/navbar}}
{{dcl begin}}
{{dcl header | functional}}
{{dcl | since=c++11 | 1=
template&lt; class Key &gt;
struct hash;
}}
{{dcl end}}

{{rev begin}}
{{rev|since=c++17|
Each specialization of this template is either ''enabled'' (&quot;untainted&quot;) or ''disabled'' (&quot;poisoned&quot;). For every type {{tt|Key}} for which neither the library nor the user provides an enabled specialization {{tt|std::hash&lt;Key&gt;}}, that specialization exists and is disabled.  Disabled specializations do not satisfy {{concept|Hash}}, do not satisfy {{concept|FunctionObject}}, and {{lc|std::is_default_constructible_v}}, {{lc|std::is_copy_constructible_v}}, {{lc|std::is_move_constructible_v}}, {{lc|std::is_copy_assignable_v}}, {{lc|std::is_move_assignable_v}} are all {{c|false}}. In other words, they exist, but cannot be used.
}}
{{rev end}}

The {{rev inl|since=c++17|''enabled'' specializations of the}} hash template defines a function object that implements a [[enwiki:Hash function|hash function]].  Instances of this function object satisfy {{concept|Hash}}. In particular, they define an {{c|operator()}} that:

1. Accepts a single parameter of type {{tt|Key}}.

2. Returns a value of type {{c|size_t}} that represents the hash value of the parameter.

3. Does not throw exceptions when called.

4. For two parameters {{tt|k1}} and {{tt|k2}} that are equal, {{c|1=std::hash&lt;Key&gt;()(k1) == std::hash&lt;Key&gt;()(k2)}}.

5. For two different parameters {{tt|k1}} and {{tt|k2}} that are not equal, the probability that {{c|1=std::hash&lt;Key&gt;()(k1) == std::hash&lt;Key&gt;()(k2)}} should be very small, approaching {{c|1=1.0/std::numeric_limits&lt;size_t&gt;::max()}}.

All explicit and partial specializations of {{tt|hash}} provided by the standard library are {{concept|DefaultConstructible}}, {{concept|CopyAssignable}}, {{concept|Swappable}} and {{concept|Destructible}}. User-provided specializations of {{tt|hash}} also must meet those requirements.

The unordered associative containers {{lc|std::unordered_set}}, {{lc|std::unordered_multiset}}, {{lc|std::unordered_map}}, {{lc|std::unordered_multimap}} use specializations of the template {{lc|std::hash}} as the default hash function.

===Notes===
The actual hash functions are implementation-dependent and are not required to fulfill any other quality criteria except those specified above. Notably, some implementations use trivial (identity) hash functions which map an integer to itself. In other words, these hash functions are designed to work with unordered associative containers, but not as cryptographic hashes, for example.

{{rev begin}}
{{rev|since=c++14|Hash functions are only required to produce the same result for the same input within a single execution of a program; this allows salted hashes that prevent collision DoS attacks.}}
{{rev end}}

There is no specialization for C strings. {{c|std::hash&lt;const char*&gt;}} produces a hash of the value of the pointer (the memory address), it does not examine the contents of any character array.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc| {{tt|argument_type}}{{mark|deprecated in C++17}} | {{tt|Key}} }}
{{dsc| {{tt|result_type}}{{mark|deprecated in C++17}} | {{lc|std::size_t}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/utility/hash/hash | constructs a hash function object }}
{{dsc mem fun | cpp/utility/hash/operator() | calculate the hash of the argument }}
{{dsc end}}

===Standard specializations for basic types===
{{dcl begin}}
{{dcl header | functional}}
{{dcl|
template&lt;&gt; struct hash&lt;bool&gt;;
template&lt;&gt; struct hash&lt;char&gt;;
template&lt;&gt; struct hash&lt;signed char&gt;;
template&lt;&gt; struct hash&lt;unsigned char&gt;;
template&lt;&gt; struct hash&lt;char16_t&gt;;
template&lt;&gt; struct hash&lt;char32_t&gt;;
template&lt;&gt; struct hash&lt;wchar_t&gt;;
template&lt;&gt; struct hash&lt;short&gt;;
template&lt;&gt; struct hash&lt;unsigned short&gt;;
template&lt;&gt; struct hash&lt;int&gt;;
template&lt;&gt; struct hash&lt;unsigned int&gt;;
template&lt;&gt; struct hash&lt;long&gt;;
template&lt;&gt; struct hash&lt;long long&gt;;
template&lt;&gt; struct hash&lt;unsigned long&gt;;
template&lt;&gt; struct hash&lt;unsigned long long&gt;;
template&lt;&gt; struct hash&lt;float&gt;;
template&lt;&gt; struct hash&lt;double&gt;;
template&lt;&gt; struct hash&lt;long double&gt;;
template&lt; class T &gt; struct hash&lt;T*&gt;;}}
{{dcl end}}
{{rev begin}}
{{rev|since=c++14|
In addition to the above, the standard library provides specializations for all (scoped and unscoped) enumeration types. These may be (but are not required to be) implemented as {{c|std::hash&lt;std::underlying_type&lt;Enum&gt;::type&gt;}})
}}
{{rev|since=c++17|
Each standard library header that declares the template {{tt|std::hash}} provides enabled specializations of {{tt|std::hash}} for {{lc|std::nullptr t}} and all cv-unqualified arithmetic types (including any extended integer types), all enumeration types, and all pointer types.

All member functions of all standard library specializations of this template are {{c|noexcept}} except for the member functions of {{ltt|cpp/utility/optional/hash|std::hash&lt;std::optional&gt;}}, {{ltt|cpp/utility/variant/hash|std::hash&lt;std::variant&gt;}}, and {{ltt|cpp/memory/unique_ptr/hash|std::hash&lt;std::unique_ptr&gt;}}
}}
{{rev end}}

===Standard specializations for library types===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc hash}}
{{dsc inc | cpp/error/error_code/dsc hash}}
{{dsc inc | cpp/utility/bitset/dsc hash}}
{{dsc inc | cpp/memory/unique_ptr/dsc hash}}
{{dsc inc | cpp/memory/shared_ptr/dsc hash}}
{{dsc inc | cpp/types/type_index/dsc hash}}
{{dsc ptclass | cpp/container/vector bool/hash | title=std::hash{{dsc small|&lt;std::vector&lt;bool&gt;&gt;}} | hash support for {{c|std::vector&lt;bool&gt;}} | notes={{mark c++11}} }}
{{dsc ptclass | cpp/thread/thread/id/hash | title=std::hash{{dsc small|&lt;std::thread::id&gt;}} | hash support for {{lc|std::thread::id}} | notes={{mark c++11}} }}
{{dsc inc | cpp/utility/optional/dsc hash}}
{{dsc inc | cpp/utility/variant/dsc hash}}
{{dsc inc | cpp/string/basic_string_view/dsc hash}}
{{dsc inc | cpp/error/error_condition/dsc hash}}
{{dsc end}}

Note: additional specializations for {{tt|std::pair}} and the standard container types, as well as utility functions to compose hashes are available in [http://www.boost.org/doc/libs/release/doc/html/hash/reference.html boost.hash]


===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;functional&gt;
#include &lt;string&gt;
#include &lt;unordered_set&gt;

struct S {
    std::string first_name;
    std::string last_name;
};
bool operator==(const S&amp; lhs, const S&amp; rhs) {
    return lhs.first_name == rhs.first_name &amp;&amp; lhs.last_name == rhs.last_name;
}

// custom hash can be a standalone function object:
struct MyHash
{
    std::size_t operator()(S const&amp; s) const 
    {
        std::size_t h1 = std::hash&lt;std::string&gt;{}(s.first_name);
        std::size_t h2 = std::hash&lt;std::string&gt;{}(s.last_name);
        return h1 ^ (h2 &lt;&lt; 1); // or use boost::hash_combine (see Discussion)
    }
};

// custom specialization of std::hash can be injected in namespace std
namespace std
{
    template&lt;&gt; struct hash&lt;S&gt;
    {
        typedef S argument_type;
        typedef std::size_t result_type;
        result_type operator()(argument_type const&amp; s) const
        {
            result_type const h1 ( std::hash&lt;std::string&gt;{}(s.first_name) );
            result_type const h2 ( std::hash&lt;std::string&gt;{}(s.last_name) );
            return h1 ^ (h2 &lt;&lt; 1); // or use boost::hash_combine (see Discussion)
        }
    };
}

int main()
{
    
    std::string str = &quot;Meet the new boss...&quot;;
    std::size_t str_hash = std::hash&lt;std::string&gt;{}(str);
    std::cout &lt;&lt; &quot;hash(&quot; &lt;&lt; std::quoted(str) &lt;&lt; &quot;) = &quot; &lt;&lt; str_hash &lt;&lt; '\n';
    
    S obj = { &quot;Hubert&quot;, &quot;Farnsworth&quot;};
    // using the standalone function object
    std::cout &lt;&lt; &quot;hash(&quot; &lt;&lt; std::quoted(obj.first_name) &lt;&lt; ',' 
               &lt;&lt; std::quoted(obj.last_name) &lt;&lt; &quot;) = &quot;
               &lt;&lt; MyHash{}(obj) &lt;&lt; &quot; (using MyHash)\n                           or &quot;
               &lt;&lt; std::hash&lt;S&gt;{}(obj) &lt;&lt; &quot; (using std::hash) &quot; &lt;&lt; '\n';

    // custom hash makes it possible to use custom types in unordered containers
    // The example will use the injected std::hash specialization,
    // to use MyHash instead, pass it as a second template argument
    std::unordered_set&lt;S&gt; names = {obj, {&quot;Bender&quot;, &quot;Rodriguez&quot;}, {&quot;Leela&quot;, &quot;Turanga&quot;} };
    for(auto&amp; s: names)
        std::cout &lt;&lt; std::quoted(s.first_name) &lt;&lt; ' ' &lt;&lt; std::quoted(s.last_name) &lt;&lt; '\n';
}
|p=true
|output=
hash(&quot;Meet the new boss...&quot;) = 1861821886482076440
hash(&quot;Hubert&quot;,&quot;Farnsworth&quot;) = 17622465712001802105 (using MyHash)
                           or 17622465712001802105 (using std::hash) 
&quot;Leela&quot; &quot;Turanga&quot;
&quot;Bender&quot; &quot;Rodriguez&quot;
&quot;Hubert&quot; &quot;Farnsworth&quot;
}}
[[de:cpp/utility/hash]]
[[es:cpp/utility/hash]]
[[fr:cpp/utility/hash]]
[[it:cpp/utility/hash]]
[[ja:cpp/utility/hash]]
[[pt:cpp/utility/hash]]
[[ru:cpp/utility/hash]]
[[zh:cpp/utility/hash]]</text>
      <sha1>6vezs8vnic53i28qwkf54ealog4elyw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/hash/hash</title>
    <ns>0</ns>
    <id>5532</id>
    <revision>
      <id>74348</id>
      <parentid>51683</parentid>
      <timestamp>2014-12-13T11:52:41Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="442">{{cpp/title | {{dsc small|hash::}}hash}}
{{cpp/utility/hash/navbar}}

The {{lc|std::hash}} class should be {{concept|DefaultConstructible}}, {{concept|CopyConstructible}}, and {{concept|Destructible}}.
{{todo}}
[[de:cpp/utility/hash/hash]]
[[es:cpp/utility/hash/hash]]
[[fr:cpp/utility/hash/hash]]
[[it:cpp/utility/hash/hash]]
[[ja:cpp/utility/hash/hash]]
[[pt:cpp/utility/hash/hash]]
[[ru:cpp/utility/hash/hash]]
[[zh:cpp/utility/hash/hash]]</text>
      <sha1>3q2z8stfzssjpm7ql4jgaxfazfwe1o7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/hash/operator()</title>
    <ns>0</ns>
    <id>5524</id>
    <revision>
      <id>74349</id>
      <parentid>51684</parentid>
      <timestamp>2014-12-13T11:52:52Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <text xml:space="preserve" bytes="2015">{{cpp/title | {{dsc small|hash&lt;Key&gt;::}}operator()}}
{{cpp/utility/hash/navbar}}

Specializations of {{lc|std::hash}} should define an {{tt|operator()}} that:

* Takes a single argument {{tt|key}} of type {{tt|Key}}. 
* Returns a value of type {{c|std::size_t}} that represents the hash value of {{tt|key}}.
* For two parameters {{tt|k1}} and {{tt|k2}} that are equal, {{c|1=std::hash&lt;Key&gt;()(k1) == std::hash&lt;Key&gt;()(k2)}}.
* For two different parameters {{tt|k1}} and {{tt|k2}} that are not equal, the probability that {{c|1=std::hash&lt;Key&gt;()(k1) == std::hash&lt;Key&gt;()(k2)}} should be very small, approaching {{c|1.0/std::numeric_limits&lt;size_t&gt;::max()}}.

===Parameters===
{{par begin}}
{{par | key | the object to be hashed}}
{{par end}}

===Return value===
a {{c|std::size_t}} representing the hash value

===Exceptions===
Hash functions should not throw exceptions.

===Example===
{{example 
| The following code shows how to specialize the {{lc|std::hash}} template for a custom class.
| code=
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

struct Employee {
  std::string name;
  unsigned int ID;
};

namespace std {
template &lt;&gt;
class hash&lt;Employee&gt; {
 public:
  size_t operator()(const Employee &amp;employee) const
  {
    // computes the hash of an employee using a variant 
    // of the Fowler-Noll-Vo hash function
    size_t result = 2166136261;

    for (size_t i = 0, ie = employee.name.size(); i != ie; ++i) {
      result = (result * 16777619) ^ employee.name[i];
    }

    return result ^ (employee.ID &lt;&lt; 1);
  }
};
}

int main()
{
  Employee employee;
  employee.name = &quot;Zaphod Beeblebrox&quot;;
  employee.ID = 42;

  std::hash&lt;Employee&gt; hash_fn;
  std::cout &lt;&lt; hash_fn(employee) &lt;&lt; '\n';
}
| output=
177237019
}}

[[de:cpp/utility/hash/operator()]]
[[es:cpp/utility/hash/operator()]]
[[fr:cpp/utility/hash/operator()]]
[[it:cpp/utility/hash/operator()]]
[[ja:cpp/utility/hash/operator()]]
[[pt:cpp/utility/hash/operator()]]
[[ru:cpp/utility/hash/operator()]]
[[zh:cpp/utility/hash/operator()]]</text>
      <sha1>7ggizeh9nw8eg373j6da38e0n4u5xk7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/in place</title>
    <ns>0</ns>
    <id>14828</id>
    <revision>
      <id>89640</id>
      <parentid>88339</parentid>
      <timestamp>2017-01-23T06:07:29Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1420">{{cpp/title|in_place|in_place_type|in_place_index|in_place_t|in_place_type_t|in_place_index_t }}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl | since=c++17 | 1=
struct in_place_t {
    explicit in_place_t() = default;
};
inline constexpr std::in_place_t in_place{};
}}
{{dcl | since=c++17 | 1=
template &lt;class T&gt; struct in_place_type_t {
    explicit in_place_type_t() = default;
};
template &lt;class T&gt;
inline constexpr std::in_place_type_t&lt;T&gt; in_place_type{};
}}
{{dcl | since=c++17 |1=
template &lt;size_t I&gt; struct in_place_index_t {
    explicit in_place_index_t() = default;
};
template &lt;size_t I&gt;
inline constexpr in_place_index_t&lt;I&gt; in_place_index{};
}}
{{dcl end}}

{{tt|std::in_place}}, {{tt|std::in_place_type}}, and {{tt|std::in_place_index}} are disambiguation tags that can be passed to the constructors of {{lc|std::optional}}, {{lc|std::variant}}, and {{lc|std::any}} to indicate that the contained object should be constructed in-place, and (for the latter two) the type of the object to be constructed. 

The corresponding type/type templates {{tt|std::in_place_t}}, {{tt|std::in_place_type_t}} and {{tt|std::in_place_index_t}} can be used in the constructor's parameter list to match the intended tag.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc optional}}
{{dsc inc | cpp/utility/dsc variant}}
{{dsc inc | cpp/utility/dsc any}}
{{dsc end}}

[[zh:cpp/utility/in_place]]</text>
      <sha1>0x1dp6ucbl2ckx3r3afhn6lenr3kf06</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/in place t</title>
    <ns>0</ns>
    <id>14446</id>
    <redirect title="cpp/experimental/optional/in place t" />
    <revision>
      <id>80558</id>
      <timestamp>2015-08-20T20:48:15Z</timestamp>
      <contributor>
        <username>Edmundv</username>
        <id>2670</id>
      </contributor>
      <comment>Edmundv moved page [[cpp/utility/in place t]] to [[cpp/experimental/optional/in place t]]: Part of optional class, which is experimental.</comment>
      <text xml:space="preserve" bytes="50">#REDIRECT [[cpp/experimental/optional/in place t]]</text>
      <sha1>a0gmifsvszopwwyhz9a64i80e5xn6no</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list</title>
    <ns>0</ns>
    <id>2361</id>
    <revision>
      <id>90483</id>
      <parentid>88093</parentid>
      <timestamp>2017-02-24T21:22:22Z</timestamp>
      <contributor>
        <username>Mgkrupa</username>
        <id>6350</id>
      </contributor>
      <minor/>
      <comment>Added internal link</comment>
      <text xml:space="preserve" bytes="5298">{{cpp/title|initializer_list}}
{{cpp/utility/initializer_list/navbar}}
(not to be confused with [[cpp/language/initializer list|member initializer list]])
{{ddcl | header = initializer_list | since=c++11 |
template&lt; class T &gt;
class initializer_list;
}}

An object of type {{tt|std::initializer_list&lt;T&gt;}} is a lightweight proxy object that provides access to an array of objects of type {{tt|const T}}.  

A {{tt|std::initializer_list}} object is automatically constructed when:
* a ''braced-init-list'' is used in [[cpp/language/list_initialization |list-initialization]], including function-call list initialization and assignment expressions 
* a ''braced-init-list'' is bound to {{ltt|cpp/language/auto}}, including in a [[cpp/language/range-for | ranged for loop]]

Initializer lists may be implemented as a pair of pointers or pointer and length. Copying a {{tt|std::initializer_list}} does not copy the underlying objects.

{{rev begin}}
{{rev|until=c++14|The underlying array is not guaranteed to exist after the lifetime of the original initializer list object has ended.  The storage for {{tt|std::initializer_list}} is unspecified (i.e. it could be automatic, temporary, or static read-only memory, depending on the situation).}}
{{rev|since=c++14|The underlying array is {{rev inl|until=c++17|a temporary array}}{{rev inl|since=c++17|[[cpp/language/implicit_conversion#Temporary_materialization|materialized]] array prvalue}} of type {{c|const T[N]}}, in which each element is [[cpp/language/copy_initialization|copy-initialized]] (except that narrowing conversions are invalid) from the corresponding element of the original initializer list. The lifetime of the underlying array is the same as any other [[cpp/language/lifetime#Temporary_object_lifetime|temporary object]], except that initializing an initializer_list object from the array extends the lifetime of the array exactly like [[cpp/language/reference_initialization#Lifetime_of_a_temporary|binding a reference to a temporary]] (with the same exceptions, such as for initializing a non-static class member). The underlying array may be allocated in read-only memory.
}}
{{rev|since=c++17|
The program is ill-formed if an explicit or partial specialization of {{tt|std::initializer_list}} is declared.
}}
{{rev end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{c|T}}}}
{{dsc | {{tt|reference}} | {{c|const T&amp;}}}}
{{dsc | {{tt|const_reference}} | {{c|const T&amp;}}}}
{{dsc | {{tt|size_type}} | {{c|std::size_t}}}}
{{dsc | {{tt|iterator}} | {{c|const T*}}}}
{{dsc | {{tt|const_iterator}} | {{c|const T*}}}}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc constructor}}
{{dsc h2 | Capacity}}
{{dsc inc | cpp/utility/initializer_list/dsc size}}
{{dsc h2 | Iterators}}
{{dsc inc | cpp/utility/initializer_list/dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc end}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc begin2}}
{{dsc inc | cpp/utility/initializer_list/dsc end2}}
{{dsc header|iterator}}
{{dsc inc | cpp/utility/initializer_list/dsc rbegin2}}
{{dsc inc | cpp/utility/initializer_list/dsc rend2}}
{{dsc end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;initializer_list&gt;
 
template &lt;class T&gt;
struct S {
    std::vector&lt;T&gt; v;
    S(std::initializer_list&lt;T&gt; l) : v(l) {
         std::cout &lt;&lt; &quot;constructed with a &quot; &lt;&lt; l.size() &lt;&lt; &quot;-element list\n&quot;;
    }
    void append(std::initializer_list&lt;T&gt; l) {
        v.insert(v.end(), l.begin(), l.end());
    }
    std::pair&lt;const T*, std::size_t&gt; c_arr() const {
        return {&amp;v[0], v.size()};  // copy list-initialization in return statement
                                   // this is NOT a use of std::initializer_list
    }
};
 
template &lt;typename T&gt;
void templated_fn(T) {}
 
int main()
{
    S&lt;int&gt; s = {1, 2, 3, 4, 5}; // copy list-initialization
    s.append({6, 7, 8});      // list-initialization in function call
 
    std::cout &lt;&lt; &quot;The vector size is now &quot; &lt;&lt; s.c_arr().second &lt;&lt; &quot; ints:\n&quot;;
 
    for (auto n : s.v)
        std::cout &lt;&lt; n &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
 
    std::cout &lt;&lt; &quot;Range-for over brace-init-list: \n&quot;;
 
    for (int x : {-1, -2, -3}) // the rule for auto makes this ranged-for work
        std::cout &lt;&lt; x &lt;&lt; ' ';
    std::cout &lt;&lt; '\n';
 
    auto al = {10, 11, 12};   // special rule for auto
 
    std::cout &lt;&lt; &quot;The list bound to auto has size() = &quot; &lt;&lt; al.size() &lt;&lt; '\n';
 
//    templated_fn({1, 2, 3}); // compiler error! &quot;{1, 2, 3}&quot; is not an expression,
                             // it has no type, and so T cannot be deduced
    templated_fn&lt;std::initializer_list&lt;int&gt;&gt;({1, 2, 3}); // OK
    templated_fn&lt;std::vector&lt;int&gt;&gt;({1, 2, 3});           // also OK
}
 | output=
constructed with a 5-element list
The vector size is now 8 ints:
1 2 3 4 5 6 7 8
Range-for over brace-init-list: 
-1 -2 -3 
The list bound to auto has size() = 3
}}

[[de:cpp/utility/initializer list]]
[[es:cpp/utility/initializer list]]
[[fr:cpp/utility/initializer list]]
[[it:cpp/utility/initializer list]]
[[ja:cpp/utility/initializer list]]
[[pt:cpp/utility/initializer list]]
[[ru:cpp/utility/initializer list]]
[[zh:cpp/utility/initializer list]]</text>
      <sha1>9uk5yy9c9hq1f154e6bnlom3j4secpv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/begin</title>
    <ns>0</ns>
    <id>8510</id>
    <revision>
      <id>91878</id>
      <parentid>64493</parentid>
      <timestamp>2017-03-31T20:00:33Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1087">{{cpp/utility/initializer_list/title | begin}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | const T* begin() const;}}
{{dcl | since=c++14 | constexpr const T* begin() const;}}
{{dcl rev end}}
{{dcl end}}

Returns a pointer to the first element in the initializer list.

If the initializer list is empty, the values of {{c|begin()}} and [[cpp/utility/initializer_list/end|{{c|end()}}]] are unspecified, but will be identical.

===Parameters===
(none)

===Return value===
a pointer to the first element in the initializer list

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc end}}
{{dsc end}}

[[de:cpp/utility/initializer list/begin]]
[[es:cpp/utility/initializer list/begin]]
[[fr:cpp/utility/initializer list/begin]]
[[it:cpp/utility/initializer list/begin]]
[[ja:cpp/utility/initializer list/begin]]
[[pt:cpp/utility/initializer list/begin]]
[[ru:cpp/utility/initializer list/begin]]
[[zh:cpp/utility/initializer list/begin]]</text>
      <sha1>jb0bm99hu3pbvqg5ch3exwulyck990o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/begin2</title>
    <ns>0</ns>
    <id>8851</id>
    <revision>
      <id>92120</id>
      <parentid>91881</parentid>
      <timestamp>2017-04-05T19:51:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="1334">{{cpp/title | begin&lt;small&gt;(std::initializer_list)&lt;/small&gt;}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class E &gt; 
const E* begin( initializer_list&lt;E&gt; il ) noexcept;
}}
{{dcl | since=c++14 |
template&lt; class E &gt; 
constexpr const E* begin( initializer_list&lt;E&gt; il ) noexcept;
}}
{{dcl rev end}}
{{dcl end}}

The overload of {{lc|std::begin}} for {{tt|initializer_list}} returns a pointer to the first element of {{tt|il}}.

===Parameters===
{{par begin}}
{{par | il | an {{tt|initializer_list}} }}
{{par end}} 

===Return value===
{{c|il.begin()}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;initializer_list&gt;

int main() 
{
    std::initializer_list&lt;int&gt; il = {3, 1, 4, 1};
    for(auto it = std::begin(il); it != std::end(il); ++it) {
        std::cout &lt;&lt; *it &lt;&lt; '\n';
    }
}
 | output=
3
1
4
1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc begin}}
{{dsc end}}

[[de:cpp/utility/initializer list/begin2]]
[[es:cpp/utility/initializer list/begin2]]
[[fr:cpp/utility/initializer list/begin2]]
[[it:cpp/utility/initializer list/begin2]]
[[ja:cpp/utility/initializer list/begin2]]
[[pt:cpp/utility/initializer list/begin2]]
[[ru:cpp/utility/initializer list/begin2]]
[[zh:cpp/utility/initializer list/begin2]]</text>
      <sha1>atqckti2re6t3ab6hdddsd11u0z5r7p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/end</title>
    <ns>0</ns>
    <id>8511</id>
    <revision>
      <id>91828</id>
      <parentid>64494</parentid>
      <timestamp>2017-03-31T19:59:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1114">{{cpp/utility/initializer_list/title | end}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | const T* end() const;}}
{{dcl | since=c++14 | constexpr const T* end() const;}}
{{dcl rev end}}
{{dcl end}}

Returns a pointer to one past the last element in the initializer list, i.e. {{c|begin() + size()}}.

If the initializer list is empty, the values of [[cpp/utility/initializer_list/begin|{{c|begin()}}]] and {{c|end()}} are unspecified, but will be identical.

===Parameters===
(none)

===Return value===
a pointer to one past the last element in the initializer list

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc begin}}
{{dsc end}}

[[de:cpp/utility/initializer list/end]]
[[es:cpp/utility/initializer list/end]]
[[fr:cpp/utility/initializer list/end]]
[[it:cpp/utility/initializer list/end]]
[[ja:cpp/utility/initializer list/end]]
[[pt:cpp/utility/initializer list/end]]
[[ru:cpp/utility/initializer list/end]]
[[zh:cpp/utility/initializer list/end]]</text>
      <sha1>6bgfer3j53jcj49lwbi5sn6gabx21xd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/end2</title>
    <ns>0</ns>
    <id>8852</id>
    <revision>
      <id>91826</id>
      <parentid>71051</parentid>
      <timestamp>2017-03-31T19:59:08Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1359">{{cpp/title | end&lt;small&gt;(std::initializer_list)&lt;/small&gt;}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 |
template&lt; class E &gt; 
const E* end( initializer_list&lt;E&gt; il );
}}
{{dcl | since=c++11 | until=c++14 | 
template&lt; class E &gt; 
constexpr const E* end( initializer_list&lt;E&gt; il );
}}
{{dcl rev end}}
{{dcl end}}

The overload of {{lc|std::end}} for {{tt|initializer_list}} returns a pointer to one past the last element of {{tt|il}}.

===Parameters===
{{par begin}}
{{par | il | an {{tt|initializer_list}} }}
{{par end}} 

===Return value===
{{c|il.end()}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;

int main() 
{
    // range-based for uses std::begin and std::end to iterate
    // over a given range; in this case, it's an initializer list
    for (int i : {3, 1, 4, 1}) {
        std::cout &lt;&lt; i &lt;&lt; '\n';
    }
}
 | output=
3
1
4
1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/initializer_list/dsc end}}
{{dsc end}}

[[de:cpp/utility/initializer list/end2]]
[[es:cpp/utility/initializer list/end2]]
[[fr:cpp/utility/initializer list/end2]]
[[it:cpp/utility/initializer list/end2]]
[[ja:cpp/utility/initializer list/end2]]
[[pt:cpp/utility/initializer list/end2]]
[[ru:cpp/utility/initializer list/end2]]
[[zh:cpp/utility/initializer list/end2]]</text>
      <sha1>ezf31ij7bdcare1abl3r0rrqvqqyfvw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/initializer list</title>
    <ns>0</ns>
    <id>8505</id>
    <revision>
      <id>91833</id>
      <parentid>64489</parentid>
      <timestamp>2017-03-31T19:59:17Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2036">{{cpp/utility/initializer_list/title | initializer_list}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | initializer_list();}}
{{dcl | since=c++14 | constexpr initializer_list();}}
{{dcl rev end}}
{{dcl end}}

Constructs an empty initializer list.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;initializer_list&gt;

int main() 
{
    std::initializer_list&lt;int&gt; empty_list;
    std::cout &lt;&lt; &quot;empty_list.size(): &quot; &lt;&lt; empty_list.size() &lt;&lt; '\n';

    // create initializer lists using list-initialization
    std::initializer_list&lt;int&gt; digits {1, 2, 3, 4, 5};
    std::cout &lt;&lt; &quot;digits.size(): &quot; &lt;&lt; digits.size() &lt;&lt; '\n';

    // special rule for auto means 'fractions' has the
    // type std::initializer_list&lt;double&gt;
    auto fractions = {3.14159, 2.71828};
    std::cout &lt;&lt; &quot;fractions.size(): &quot; &lt;&lt; fractions.size() &lt;&lt; '\n';
}
 | output=
empty_list.size(): 0
digits.size(): 5
fractions.size(): 2
}}

===Notes===
Despite a lack of constructors, it is possible to create non-empty initializer lists.  Instances of {{tt|std::initializer_list}} are implicitly constructed when:
* a ''braced-init-list'' is used in [[cpp/language/list_initialization |list-initialization]], including function-call list initialization and assignment expressions (not to be confused with [[cpp/language/initializer_list | constructor initializer lists]])
* a ''braced-init-list'' is bound to {{c|auto}}, including in a [[cpp/language/range-for | ranged for loop]]

[[de:cpp/utility/initializer list/initializer list]]
[[es:cpp/utility/initializer list/initializer list]]
[[fr:cpp/utility/initializer list/initializer list]]
[[it:cpp/utility/initializer list/initializer list]]
[[ja:cpp/utility/initializer list/initializer list]]
[[pt:cpp/utility/initializer list/initializer list]]
[[ru:cpp/utility/initializer list/initializer list]]
[[zh:cpp/utility/initializer list/initializer list]]</text>
      <sha1>r591b5or1qm4g49cvsoibp67kt197l3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/rbegin2</title>
    <ns>0</ns>
    <id>12972</id>
    <revision>
      <id>65346</id>
      <parentid>65345</parentid>
      <timestamp>2013-09-09T20:10:51Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on crbegin</comment>
      <text xml:space="preserve" bytes="1340">{{cpp/title | rbegin&lt;small&gt;(std::initializer_list)&lt;/small&gt;}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl header|iterator}}
{{dcl | since=c++14|
template &lt;class E&gt;
std::reverse_iterator&lt;const E*&gt; rbegin( std::initializer_list&lt;E&gt; il );
}}
{{dcl end}}

The overload of {{lc|std::rbegin}} for {{tt|initializer_list}} returns an {{c|std::reverse_iterator}} pointing at the last element of {{tt|il}}.

===Parameters===
{{par begin}}
{{par | il | an {{tt|initializer_list}} }}
{{par end}} 

===Return value===
{{c|std::reverse_iterator&lt;const E*&gt;(il.end())}}.

===Exceptions===
(none)

===Notes===
This overload is necessary because {{lc|std::initializer_list}} does not have a member function {{tt|rbegin}}. No overload is needed for {{lc|std::crbegin}} because it is implemented in terms of {{lc|std::rbegin}}.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc rbegin}}
{{dsc inc | cpp/iterator/dsc rend}}
{{dsc end}}

[[de:cpp/utility/initializer list/rbegin2]]
[[es:cpp/utility/initializer list/rbegin2]]
[[fr:cpp/utility/initializer list/rbegin2]]
[[it:cpp/utility/initializer list/rbegin2]]
[[ja:cpp/utility/initializer list/rbegin2]]
[[pt:cpp/utility/initializer list/rbegin2]]
[[ru:cpp/utility/initializer list/rbegin2]]
[[zh:cpp/utility/initializer list/rbegin2]]</text>
      <sha1>nu2apvpg5eelprvvn0n21tcpj57kfxf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/rend2</title>
    <ns>0</ns>
    <id>12973</id>
    <revision>
      <id>65347</id>
      <timestamp>2013-09-09T20:13:37Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="1315">{{cpp/title | rend&lt;small&gt;(std::initializer_list)&lt;/small&gt;}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl header|iterator}}
{{dcl | since=c++14|
template &lt;class E&gt;
std::reverse_iterator&lt;const E*&gt; rend( std::initializer_list&lt;E&gt; il );
}}
{{dcl end}}

The overload of {{lc|std::rend}} for {{tt|initializer_list}} returns an {{c|std::reverse_iterator}} pointing at the first element of {{tt|il}}.

===Parameters===
{{par begin}}
{{par | il | an {{tt|initializer_list}} }}
{{par end}} 

===Return value===
{{c|std::reverse_iterator&lt;const E*&gt;(il.begin())}}.

===Exceptions===
(none)

===Notes===
This overload is necessary because {{lc|std::initializer_list}} does not have a member function {{tt|rend}}. No overload is needed for {{lc|std::crend}} because it is implemented in terms of {{lc|std::rend}}.

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/iterator/dsc rbegin}}
{{dsc inc | cpp/iterator/dsc rend}}
{{dsc end}}

[[de:cpp/utility/initializer list/rend2]]
[[es:cpp/utility/initializer list/rend2]]
[[fr:cpp/utility/initializer list/rend2]]
[[it:cpp/utility/initializer list/rend2]]
[[ja:cpp/utility/initializer list/rend2]]
[[pt:cpp/utility/initializer list/rend2]]
[[ru:cpp/utility/initializer list/rend2]]
[[zh:cpp/utility/initializer list/rend2]]</text>
      <sha1>kgtt4ho3wumht17tz0bu5suzch2wn01</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/initializer list/size</title>
    <ns>0</ns>
    <id>5294</id>
    <revision>
      <id>91701</id>
      <parentid>64492</parentid>
      <timestamp>2017-03-31T19:55:22Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="852">{{cpp/utility/initializer_list/title|size}}
{{cpp/utility/initializer_list/navbar}}
{{dcl begin}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | size_type size() const;}}
{{dcl | since=c++14 | constexpr size_type size() const;}}
{{dcl rev end}}
{{dcl end}}

Returns the number of elements in the initializer list, i.e. {{c|std::distance(begin(), end())}}.

===Parameters===
(none)

===Return value===
the number of elements in the initializer list

===Exceptions===
{{unreviewed noexcept}}

===Complexity===
Constant

[[de:cpp/utility/initializer list/size]]
[[es:cpp/utility/initializer list/size]]
[[fr:cpp/utility/initializer list/size]]
[[it:cpp/utility/initializer list/size]]
[[ja:cpp/utility/initializer list/size]]
[[pt:cpp/utility/initializer list/size]]
[[ru:cpp/utility/initializer list/size]]
[[zh:cpp/utility/initializer list/size]]</text>
      <sha1>idyyf1yl2ue5yjnl7z4m3udppq63pr4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/integer sequence</title>
    <ns>0</ns>
    <id>10004</id>
    <revision>
      <id>91879</id>
      <parentid>91114</parentid>
      <timestamp>2017-03-31T20:00:34Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="4956">{{cpp/title|integer_sequence}}
{{cpp/utility/navbar}}
{{ddcl | since=c++14 | header=utility | feature=__cpp_lib_integer_sequence | 1=
template&lt; class T, T... Ints &gt;
class integer_sequence;
}}

The class template {{tt|std::integer_sequence}} represents a compile-time sequence of integers. When used as an argument to a [[cpp/language/function template|function template]], the [[cpp/language/parameter pack|parameter pack]] {{tt|Ints}} can be deduced and used in pack expansion.

===Template parameters===
{{par begin}}
{{par | T | an integer type to use for the elements of the sequence}}
{{par | ...Ints | a non-type parameter pack representing the sequence}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem sfun | cpp/utility/integer_sequence | inlinemem=true | title=size | returns the number of elements in {{tt|Ints}}}}
{{dsc end}}

{{member | {{small|std::integer_sequence::}}size | 2=
{{ddcl | 1=
static constexpr std::size_t size();
}}

Returns the number of elements in {{tt|Ints}}. Equivalent to {{c|sizeof...(Ints)}}

===Parameters===
(none)

===Return value===
The number of elements in {{tt|Ints}}.

===Exceptions===
{{unreviewed noexcept}}
}}

===Helper templates===

A helper alias template {{ttb|std::index_sequence}} is defined for the common case where {{tt|T}} is {{lc|std::size_t}}.

{{ddcl | 1=
template&lt;std::size_t... Ints&gt;
using index_sequence = std::integer_sequence&lt;std::size_t, Ints...&gt;;
}}

A helper alias template {{ttb|std::make_integer_sequence}} is defined to simplify creation of {{tt|std::integer_sequence}} and {{tt|std::index_sequence}} types with 0, 1, 2, ..., {{tt|N-1}} as {{tt|Ints}}:

{{dcl begin}}
{{dcl | 1=
template&lt;class T, T N&gt;
using make_integer_sequence = std::integer_sequence&lt;T, /* a sequence 0, 1, 2, ..., N-1 */ &gt;;
}}
{{dcl | 1=
template&lt;std::size_t N&gt;
using make_index_sequence = make_integer_sequence&lt;std::size_t, N&gt;;
}}
{{dcl end}}

The program is ill-formed if {{tt|N}} is negative. If {{tt|N}} is zero, the indicated type is {{tt|integer_sequence&lt;T&gt;}}.

A helper alias template {{ttb|std::index_sequence_for}} is defined to convert any type parameter pack into an index sequence of the same length

{{dcl begin}}
{{dcl | 1=
template&lt;class... T&gt;
using index_sequence_for = std::make_index_sequence&lt;sizeof...(T)&gt;;
}}
{{dcl end}}

===Example===
{{example|
code=
#include &lt;tuple&gt;
#include &lt;iostream&gt;
#include &lt;array&gt;
#include &lt;utility&gt;

// Convert array into a tuple
template&lt;typename Array, std::size_t... I&gt;
decltype(auto) a2t_impl(const Array&amp; a, std::index_sequence&lt;I...&gt;)
{
    return std::make_tuple(a[I]...);
}

template&lt;typename T, std::size_t N, typename Indices = std::make_index_sequence&lt;N&gt;&gt;
decltype(auto) a2t(const std::array&lt;T, N&gt;&amp; a)
{
    return a2t_impl(a, Indices());
}

// pretty-print a tuple (from http://stackoverflow.com/a/6245777/273767)

template&lt;class Ch, class Tr, class Tuple, std::size_t... Is&gt;
void print_tuple_impl(std::basic_ostream&lt;Ch,Tr&gt;&amp; os,
                      const Tuple &amp; t,
                      std::index_sequence&lt;Is...&gt;)
{
    using swallow = int[]; // guarantees left to right order
    (void)swallow{0, (void(os &lt;&lt; (Is == 0? &quot;&quot; : &quot;, &quot;) &lt;&lt; std::get&lt;Is&gt;(t)), 0)...};
}

template&lt;class Ch, class Tr, class... Args&gt;
decltype(auto) operator&lt;&lt;(std::basic_ostream&lt;Ch, Tr&gt;&amp; os,
                          const std::tuple&lt;Args...&gt;&amp; t)
{
    os &lt;&lt; &quot;(&quot;;
    print_tuple_impl(os, t, std::index_sequence_for&lt;Args...&gt;{});
    return os &lt;&lt; &quot;)&quot;;
}

int main()
{
    std::array&lt;int, 4&gt; array = {1,2,3,4};

    // convert an array into a tuple
    auto tuple = a2t(array);
    static_assert(std::is_same&lt;decltype(tuple),
                               std::tuple&lt;int, int, int, int&gt;&gt;::value, &quot;&quot;);

    // print it to cout
    std::cout &lt;&lt; tuple &lt;&lt; '\n';
}
|output=
(1, 2, 3, 4)
}}

===Example===
This example shows how a {{lc|std::tuple}} can be converted into arguments for a function invocation (see {{ltt|cpp/experimental/apply|std::experimental::apply}}).
{{example|
code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;
#include &lt;utility&gt;

template&lt;typename Func, typename Tup, std::size_t... index&gt;
decltype(auto) invoke_helper(Func&amp;&amp; func, Tup&amp;&amp; tup, std::index_sequence&lt;index...&gt;)
{
    return func(std::get&lt;index&gt;(std::forward&lt;Tup&gt;(tup))...);
}

template&lt;typename Func, typename Tup&gt;
decltype(auto) invoke(Func&amp;&amp; func, Tup&amp;&amp; tup)
{
    constexpr auto Size = std::tuple_size&lt;typename std::decay&lt;Tup&gt;::type&gt;::value;
    return invoke_helper(std::forward&lt;Func&gt;(func),
                         std::forward&lt;Tup&gt;(tup),
                         std::make_index_sequence&lt;Size&gt;{});
}

void foo(int a, const std::string&amp; b, float c)
{
    std::cout &lt;&lt; a &lt;&lt; &quot; , &quot; &lt;&lt; b &lt;&lt; &quot; , &quot; &lt;&lt; c &lt;&lt; '\n';
}

int main()
{
    auto args = std::make_tuple(2, &quot;Hello&quot;, 3.5);
    invoke(foo, args);
}
|output=
2 , Hello , 3.5
}}

[[zh:cpp/utility/integer_sequence]]</text>
      <sha1>lfw70qrrog1e3bfuojs2lq5j91hno6y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/launder</title>
    <ns>0</ns>
    <id>15685</id>
    <revision>
      <id>92147</id>
      <parentid>91342</parentid>
      <timestamp>2017-04-08T05:18:40Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1958">{{cpp/title|launder}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | new}}
{{dcl | since=c++17 | 1=
template &lt;class T&gt;
constexpr T* launder(T* p)
}}
{{dcl end}}

Obtains a pointer to an object created in storage occupied by an existing object of the same type, even if it has const or reference members. 

Formally, given
* the pointer {{tt|p}} represents the address {{tt|A}} of a byte in memory
* an object {{tt|X}} is located at the address {{tt|A}}
* {{tt|X}} is within its [[cpp/language/lifetime|lifetime]]
* the type of {{tt|X}} is the same as {{tt|T}}, ignoring cv-qualifiers at every level
* Every byte that would be reachable through the result is reachable through p (bytes are reachable through a pointer that points to an object if those bytes are within that object's storage, or within the immediately enclosing array of which the object is an element)

Then {{tt|std::launder(p)}} returns a value of type {{tt|T*}} that points to the object {{tt|X}}.

The program is ill-formed if {{tt|T}} is a function type or (possibly cv-qualified) {{tt|void}}.

{{tt|std::launder}} may be used in a [[cpp/language/constant expression|core constant expression]] if the value of its argument may be used in a core constant expression

===Exceptions===
{{unreviewed noexcept}}

===Notes===
For objects that do not have const or reference members, {{tt|std::launder}} is not necessary; pointers and references can be [[cpp/language/lifetime#Storage_reuse|reused]]

===Example===
{{example
 |
 | code=
#include &lt;new&gt;

struct X {
  const int n; // note: X has a const member
  int m;
};
int main()
{
  X *p = new X{3};
  const int a = p-&gt;n;
  new (p) X{5};       // p does not point to new object because X::n is const
  const int b = p-&gt;n; // undefined behavior
  const int x = p-&gt;m; // undefined behavior (even though m is non-const, p can't be used)
  const int c = std::launder(p)-&gt;n; // OK, std::launder(p) points to new object
}
}}

{{langlinks|zh}}</text>
      <sha1>tipiuwh0zq16m50wn30vgphk8cb1llz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/make from tuple</title>
    <ns>0</ns>
    <id>15554</id>
    <revision>
      <id>92145</id>
      <parentid>87689</parentid>
      <timestamp>2017-04-08T04:54:18Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="1539">{{cpp/title|make_from_tuple}}
{{cpp/utility/navbar}}

{{dcl begin}}
{{dcl header | tuple }}
{{dcl | since=c++17 |
template &lt;class T, class Tuple&gt;
constexpr T make_from_tuple(Tuple&amp;&amp; t);
}}
{{dcl end}}
Construct an object of type {{tt|T}}, using the elements of the tuple {{tt|t}} as the arguments to the constructor.

===Parameters===
{{par begin}}
{{par | t | tuple whose elements to be used as arguments to the constructor of {{tt|T}} }}
{{par end}}

===Return value===
The constructed {{tt|T}} object.

=== Notes ===
The tuple need not be {{lc|std::tuple}}, and instead may be anything that supports {{lc|std::get}} and {{lc|std::tuple_size}}; in particular, {{lc|std::array}} and {{lc|std::pair}} may be used.

Due to [[cpp/language/copy_elision|guaranteed copy elision]], {{tt|T}} need not be movable.

===Possible implementation===
{{eq fun|1=
namespace detail {
template &lt;class T, class Tuple, std::size_t... I&gt;
constexpr T make_from_tuple_impl( Tuple&amp;&amp; t, std::index_sequence&lt;I...&gt; )
{
  return T(std::get&lt;I&gt;(std::forward&lt;Tuple&gt;(t))...);
}
} // namespace detail

template &lt;class T, class Tuple&gt;
constexpr T make_from_tuple( Tuple&amp;&amp; t )
{
    return detail::make_from_tuple_impl&lt;T&gt;(std::forward&lt;Tuple&gt;(t),
        std::make_index_sequence&lt;std::tuple_size_v&lt;std::decay_t&lt;Tuple&gt;&gt;&gt;{});
}
}}

===Example===
{{example
 |
 |code=
 |output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc inc | cpp/utility/dsc apply}}
{{dsc end}}

{{langlinks|zh}}</text>
      <sha1>aobhxfcjyabov4pd8njsh8cpv05dxzd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/make integer sequence</title>
    <ns>0</ns>
    <id>14525</id>
    <redirect title="cpp/utility/integer sequence" />
    <revision>
      <id>81755</id>
      <timestamp>2015-11-09T21:33:43Z</timestamp>
      <contributor>
        <username>Korval</username>
        <id>95</id>
      </contributor>
      <comment>Makes it easier to find.</comment>
      <text xml:space="preserve" bytes="59">#REDIRECT [[cpp/utility/integer_sequence#Helper templates]]</text>
      <sha1>m7k1fzyre9whdvoa3k3sz3ksyfcmwvu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/make pair</title>
    <ns>0</ns>
    <id>2564</id>
    <redirect title="cpp/utility/pair/make pair" />
    <revision>
      <id>9377</id>
      <timestamp>2011-08-22T23:27:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/make pair]] to [[cpp/utility/pair/make pair]]: move to the class page</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/utility/pair/make pair]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/move</title>
    <ns>0</ns>
    <id>2664</id>
    <revision>
      <id>91989</id>
      <parentid>91771</parentid>
      <timestamp>2017-04-01T05:38:12Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;&lt;!--(.*)(CWG|cwg|LWG|lwg)(.*)--&gt;&quot; to &quot;{{mark unreviewed dr|$2}}&lt;!--$1$2$3--&gt;&quot;</comment>
      <text xml:space="preserve" bytes="5618">{{cpp/title|move}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T &gt;
typename std::remove_reference&lt;T&gt;::type&amp;&amp; move( T&amp;&amp; t );
}}
{{dcl | since=c++14 |
template&lt; class T &gt;
constexpr typename std::remove_reference&lt;T&gt;::type&amp;&amp; move( T&amp;&amp; t );
}}
{{dcl rev end}}
{{dcl end}}

{{tt|std::move}} is used to ''indicate'' that an object {{tt|t}} may be &quot;moved from&quot;, i.e. allowing the efficient transfer of resources from {{tt|t}} to another object. 

In particular, {{tt|std::move}} produces an [[cpp/language/value_category|xvalue expression]] that identifies its argument {{tt|t}}. It is exactly equivalent to a static_cast to an rvalue reference type.

===Parameters===
{{par begin}}
{{par | t | the object to be moved}}
{{par end}}

===Return value===

{{c|static_cast&lt;typename std::remove_reference&lt;T&gt;::type&amp;&amp;&gt;(t)}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The functions that accept rvalue reference parameters (including [[cpp/language/move_constructor|move constructors]], [[cpp/language/move_operator|move assignment operators]], and regular member functions such as {{lc|std::vector::push_back}}) are selected, by [[cpp/language/overload_resolution|overload resolution]], when called with [[cpp/language/value_category|rvalue]] arguments (either  [[cpp/language/value_category|prvalues]] such as a temporary objects or  [[cpp/language/value_category|xvalue]]s such as the one produced by {{tt|std::move}}). If the argument identifies a resource-owning object, these overloads have the option, but aren't required, to ''move'' any resources held by the argument. For example, a move constructor of a linked list might copy the pointer to the head of the list and store {{c|nullptr}} in the argument instead of allocating and copying individual nodes.

Names of [[cpp/language/reference|rvalue reference]] variables are [[cpp/language/value_category|lvalues]] and have to be converted to [[cpp/language/value_category|xvalues]] to be bound to the function overloads that accept rvalue reference parameters, which is why [[cpp/language/move_constructor|move constructors]] and [[cpp/language/move_operator|move assignment operators]] typically use {{c|std::move}}:
{{source|1=
// Simple move constructor
A(A&amp;&amp; arg) : member(std::move(arg.member)) // the expression &quot;arg.member&quot; is lvalue
{} 
// Simple move assignment operator
A&amp; operator=(A&amp;&amp; other) {
     member = std::move(other.member);
     return *this;
}
}}
One exception is when the type of the function parameter is rvalue reference to type template parameter (&quot;forwarding reference&quot; or &quot;universal reference&quot;), in which case {{lc|std::forward}} is used instead.

Unless otherwise specified, all standard library objects that have been moved from are placed in a valid but unspecified state. That is, only the functions without preconditions, such as the assignment operator, can be safely used on the object after it was moved from:
{{source|1=
std::vector&lt;std::string&gt; v;
std::string str = &quot;example&quot;;
v.push_back(std::move(str)); // str is now valid but unspecified
str.back(); // undefined behavior if size() == 0: back() has a precondition !empty()
str.clear(); // OK, clear() has no preconditions
}}

Also, the standard library functions called with xvalue arguments may assume the argument is the only reference to the object; if it was constructed from an lvalue with {{tt|std::move}}, no aliasing checks are made. In particular, this means that standard library move assignment operators do not have to perform self-assignment checks{{mark unreviewed dr|LWG}}&lt;!-- note; this is contested by the open issue LWG2468 even though (part of) LWG1204's rationale was that self-move-assignment check is not required of the library.--&gt;:
{{source|1=
std::vector&lt;int&gt; v = {2, 3, 3};
v = std::move(v); // undefined behavior
}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

int main()
{
    std::string str = &quot;Hello&quot;;
    std::vector&lt;std::string&gt; v;

    // uses the push_back(const T&amp;) overload, which means 
    // we'll incur the cost of copying str
    v.push_back(str);
    std::cout &lt;&lt; &quot;After copy, str is \&quot;&quot; &lt;&lt; str &lt;&lt; &quot;\&quot;\n&quot;;

    // uses the rvalue reference push_back(T&amp;&amp;) overload, 
    // which means no strings will be copied; instead, the contents
    // of str will be moved into the vector.  This is less
    // expensive, but also means str might now be empty.
    v.push_back(std::move(str));
    std::cout &lt;&lt; &quot;After move, str is \&quot;&quot; &lt;&lt; str &lt;&lt; &quot;\&quot;\n&quot;;

    std::cout &lt;&lt; &quot;The contents of the vector are \&quot;&quot; &lt;&lt; v[0]
                                         &lt;&lt; &quot;\&quot;, \&quot;&quot; &lt;&lt; v[1] &lt;&lt; &quot;\&quot;\n&quot;;
&lt;!--
    // string move assignment operator is often implemented as swap,
    // in this case, the moved-from object is NOT empty
    std::string str2 = &quot;Good-bye&quot;;
    std::cout &lt;&lt; &quot;Before move from str2, str2 = '&quot; &lt;&lt; str2 &lt;&lt; &quot;'\n&quot;;
    v[0] = std::move(str2);
    std::cout &lt;&lt; &quot;After move from str2, str2 = '&quot; &lt;&lt; str2 &lt;&lt; &quot;'\n&quot;;--&gt;
}
 | p=true
 | output=
After copy, str is &quot;Hello&quot;
After move, str is &quot;&quot;
The contents of the vector are &quot;Hello&quot;, &quot;Hello&quot;
&lt;!--Before move from str2, str2 = 'Good-bye'
After move from str2, str2 = 'Hello'--&gt;
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc forward}}
{{dsc inc | cpp/utility/dsc move_if_noexcept}}
{{dsc inc | cpp/algorithm/dsc move}}
{{dsc end}}

[[de:cpp/utility/move]]
[[es:cpp/utility/move]]
[[fr:cpp/utility/move]]
[[it:cpp/utility/move]]
[[ja:cpp/utility/move]]
[[pt:cpp/utility/move]]
[[ru:cpp/utility/move]]
[[zh:cpp/utility/move]]</text>
      <sha1>je023kwuesq90wqp9k0d2auuyj4we55</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/move if noexcept</title>
    <ns>0</ns>
    <id>2668</id>
    <revision>
      <id>91804</id>
      <parentid>75101</parentid>
      <timestamp>2017-03-31T19:58:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2862">{{cpp/title|move_if_noexcept}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T &gt;
typename std::conditional&lt;  
    !std::is_nothrow_move_constructible&lt;T&gt;::value &amp;&amp; std::is_copy_constructible&lt;T&gt;::value,
    const T&amp;,
    T&amp;&amp; 
&gt;::type move_if_noexcept(T&amp; x);
}}
{{dcl | since=c++14 |
template&lt; class T &gt;
constexpr typename std::conditional&lt;  
    !std::is_nothrow_move_constructible&lt;T&gt;::value &amp;&amp; std::is_copy_constructible&lt;T&gt;::value,
    const T&amp;,
    T&amp;&amp; 
&gt;::type move_if_noexcept(T&amp; x);
}}
{{dcl rev end}}
{{dcl end}}

{{tt|move_if_noexcept}} obtains an rvalue reference to its argument if its move constructor does not throw exceptions, otherwise obtains an lvalue reference to its argument. It is typically used to combine move semantics with strong exception guarantee.

===Parameters===
{{par begin}}
{{par | x | the object to be moved or copied}}
{{par end}}

===Return value===

{{c|std::move(x)}} or {{c|x}}, depending on exception guarantees.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
This is used, for example, by {{c|std::vector::resize}}, which may have to allocate new storage and then move or copy elements from old storage to new storage. If an exception occurs during this operation, {{c|std::vector::resize}} undoes everything it did to this point, which is only possible if {{tt|std::move_if_noexcept}} was used to decide whether to use move construction or copy construction. (unless copy constructor is not available, in which case move constructor is used either way and the strong exception guarantee may be  waived)

===Example===
{{example
 | 
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;

struct Bad
{
    Bad() {}
    Bad(Bad&amp;&amp;)  // may throw
    {
        std::cout &lt;&lt; &quot;Throwing move constructor called\n&quot;;
    }
    Bad(const Bad&amp;) // may throw as well
    {
        std::cout &lt;&lt; &quot;Throwing copy constructor called\n&quot;;
    }
};

struct Good
{
    Good() {}
    Good(Good&amp;&amp;) noexcept // will NOT throw
    {
        std::cout &lt;&lt; &quot;Non-throwing move constructor called\n&quot;;
    }
    Good(const Good&amp;) noexcept // will NOT throw
    {
        std::cout &lt;&lt; &quot;Non-throwing copy constructor called\n&quot;;
    }
};

int main()
{
    Good g;
    Bad b;
    Good g2 = std::move_if_noexcept(g);
    Bad b2 = std::move_if_noexcept(b);
}
 | output=
Non-throwing move constructor called
Throwing copy constructor called
}}

===Complexity===
Constant

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc forward}}
{{dsc inc | cpp/utility/dsc move}}
{{dsc end}}

[[de:cpp/utility/move if noexcept]]
[[es:cpp/utility/move if noexcept]]
[[fr:cpp/utility/move if noexcept]]
[[it:cpp/utility/move if noexcept]]
[[ja:cpp/utility/move if noexcept]]
[[pt:cpp/utility/move if noexcept]]
[[ru:cpp/utility/move if noexcept]]
[[zh:cpp/utility/move if noexcept]]</text>
      <sha1>3dlne5vlkjowh96izf5cjnzqqrgkpl0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/nullopt</title>
    <ns>0</ns>
    <id>13984</id>
    <redirect title="cpp/experimental/optional/nullopt" />
    <revision>
      <id>75964</id>
      <timestamp>2015-02-05T03:37:56Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/utility/nullopt]] to [[cpp/experimental/optional/nullopt]]</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/experimental/optional/nullopt]]</text>
      <sha1>2et8zz5ufb5o5zhfyefdqyctqlx19if</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/nullopt t</title>
    <ns>0</ns>
    <id>13983</id>
    <redirect title="cpp/experimental/optional/nullopt t" />
    <revision>
      <id>75962</id>
      <timestamp>2015-02-05T03:37:30Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/utility/nullopt t]] to [[cpp/experimental/optional/nullopt t]]</comment>
      <text xml:space="preserve" bytes="49">#REDIRECT [[cpp/experimental/optional/nullopt t]]</text>
      <sha1>rn65tubknlm8siuk0d27bkjfb94j562</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional</title>
    <ns>0</ns>
    <id>13184</id>
    <revision>
      <id>90258</id>
      <parentid>89649</parentid>
      <timestamp>2017-02-16T18:45:54Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>we should be explicit about optional&lt;T&amp;&gt;; ill-formed per [optional.syn]p1</comment>
      <text xml:space="preserve" bytes="4029">{{cpp/title|optional}}
{{cpp/utility/optional/navbar}}
{{ddcl | header=optional | since=c++17 |
template&lt; class T &gt;
class optional;
}}

The class template {{tt|std::optional}} manages an ''optional'' contained value, i.e. a value that may or may not be present.

A common use case for {{tt|optional}} is the return value of a function that may fail. As opposed to other approaches, such as {{c|std::pair&lt;T,bool&gt;}}, {{tt|optional}} handles expensive-to-construct objects well and is more readable, as the intent is expressed explicitly.

Any instance of {{tt|optional&lt;T&gt;}} at any given point in time either ''contains a value'' or ''does not contain a value''.

If an {{tt|optional&lt;T&gt;}} ''contains a value'', the value is guaranteed to be allocated as part of the {{tt|optional}} object footprint, i.e. no dynamic memory allocation ever takes place. Thus, an {{tt|optional}} object models an object, not a pointer, even though the {{lc|operator*()}} and {{lc|operator-&gt;()}} are defined.

When an object of type optional&lt;T&gt; is [[cpp/language/implicit_cast|contextually converted to bool]], the conversion returns {{c|true}} if the object ''contains a value'' and {{c|false}} if it ''does not contain a value''.

The {{tt|optional}} object ''contains a value'' in the following conditions:

* The object is initialized with a value of type {{tt|T}}
* The object is assigned from another {{tt|optional}} that ''contains a value''.

The object ''does not contain a value'' in the following conditions:

* The object is default-initialized.
* The object is initialized with a value of {{lc|std::nullopt_t}} or an  {{tt|optional}} object that ''does not contain a value''.
* The object is assigned from a value of {{lc|std::nullopt_t}} or from an {{tt|optional}} that ''does not contain a value''

There are no optional references, a program is ill-formed if it instantiates optional with a reference type.

===Template parameters===
{{par begin}}
{{par | T | the type of the value to manage initialization state for. The type must meet the requirements of {{concept|Destructible}} }}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|value_type}} | {{tt|T}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc constructor}}
{{dsc inc | cpp/utility/optional/dsc destructor}}
{{dsc inc | cpp/utility/optional/dsc operator{{=}}}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/utility/optional/dsc operator*}}
{{dsc inc | cpp/utility/optional/dsc operator bool}}
{{dsc inc | cpp/utility/optional/dsc value}}
{{dsc inc | cpp/utility/optional/dsc value_or}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/utility/optional/dsc swap}}
{{dsc inc | cpp/utility/optional/dsc reset}}
{{dsc inc | cpp/utility/optional/dsc emplace}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc operator_cmp}}
{{dsc inc | cpp/utility/optional/dsc make_optional}}
{{dsc inc | cpp/utility/optional/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc hash}}
{{dsc inc | cpp/utility/optional/dsc nullopt_t}}
{{dsc inc | cpp/utility/optional/dsc bad_optional_access}}
{{dsc end}}

===Helpers ===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc nullopt}}
{{dsc inc | cpp/utility/optional/dsc in_place}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;optional&gt;
 
// optional can be used as the return type of a factory that may fail
std::optional&lt;std::string&gt; create(bool b) {
    if(b)
        return &quot;Godzilla&quot;;
    else
        return {};
}
 
int main()
{
    std::cout &lt;&lt; &quot;create(false) returned &quot;
              &lt;&lt; create(false).value_or(&quot;empty&quot;) &lt;&lt; '\n';
 
    // optional-returning factory functions are usable as conditions of while and if
    if(auto str = create(true)) {
        std::cout &lt;&lt; &quot;create(true) returned &quot; &lt;&lt; *str &lt;&lt; '\n';
    }
}
| output=
create(false) returned empty
create(true) returned Godzilla
}}

[[zh:cpp/utility/optional]]</text>
      <sha1>reogmv8jkl93x7j0qggdqbgndnpfy64</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/bad optional access</title>
    <ns>0</ns>
    <id>14830</id>
    <revision>
      <id>91294</id>
      <parentid>89651</parentid>
      <timestamp>2017-03-30T22:34:03Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2806</comment>
      <text xml:space="preserve" bytes="559">{{cpp/title|bad_optional_access}}
{{cpp/utility/optional/navbar}}
{{ddcl | header=optional | since=c++17 |
class bad_optional_access;
}}

Defines a type of object to be thrown by {{ltt|cpp/utility/optional/value|std::optional::value}} when accessing an optional object that does not contain a value.

{{inheritance diagram/std-bad optional access-lwg2806}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/bad_optional_access/dsc constructor}}
{{dsc end}}

{{cpp/error/exception/inherit}}

[[zh:cpp/utility/optional/bad_optional_access]]</text>
      <sha1>g2392cu13sifplcsxo59k5tjg3ztwt5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/emplace</title>
    <ns>0</ns>
    <id>13185</id>
    <revision>
      <id>91290</id>
      <parentid>89696</parentid>
      <timestamp>2017-03-30T22:18:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2857</comment>
      <text xml:space="preserve" bytes="1667">{{cpp/optional/title|emplace}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
template&lt; class... Args &gt; 
T&amp; emplace( Args&amp;&amp;... args );
}}
{{dcl | since=c++17 | 1=
template&lt; class U, class... Args &gt; 
T&amp; emplace( std::initializer_list&lt;U&gt; ilist, Args&amp;&amp;... args );
}}
{{dcl end}}

Constructs the contained value in-place. If {{c|*this}} already contains a value before the call, the contained value is destroyed by calling its destructor.

@1@ Initializes the contained value by [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) with {{c|std::forward&lt;Args&gt;(args)...}} as parameters.

@2@ Initializes the contained value by calling its constructor with {{c|ilist, std::forward&lt;Args&gt;(args)...}} as parameters. {{cpp/enable if|{{c|std::is_constructible&lt;T, std::initializer_list&lt;U&gt;&amp;, Args&amp;&amp;...&gt;::value}} is {{c|true}}}}.

===Parameters===
{{par begin}}
{{par | args... | the arguments to pass to the constructor}}
{{par | ilist | the initializer list to pass to the constructor}}
{{par hreq}}
{{par req | {{tt|T}} must be constructible from {{tt|Args...}} | overload=1}}
{{par req | {{tt|T}} must be constructible from {{lc|std::initializer_list}} and {{tt|Args...}} | overload=2}}
{{par end}}

===Return value===
A reference to the new contained value.

===Exceptions===
Any exception thrown by the selected constructor of {{tt|T}}. If an exception is thrown, {{c|*this}} does not contain a value after this call (the previously contained value, if any, had been destroyed).

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc operator{{=}}}}
{{dsc end}}

[[zh:cpp/utility/optional/emplace]]</text>
      <sha1>m9az85hmels5jt8wgcsn5rdhnt7oiu0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/hash</title>
    <ns>0</ns>
    <id>13186</id>
    <revision>
      <id>91125</id>
      <parentid>89653</parentid>
      <timestamp>2017-03-20T21:55:53Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0599r1 this hash may throw</comment>
      <text xml:space="preserve" bytes="1640">{{cpp/title|hash &lt;small&gt;&lt;std::optional&gt;&lt;/small&gt;}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl header | optional}}
{{dcl | since=c++17 | 1=
template&lt;class T&gt;
struct hash&lt;std::optional&lt;T&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for the {{lc|std::optional}} class allows users to obtain hashes of the values contained in {{tt|optional}} objects.

The specialization {{lc|std::hash&lt;optional&lt;T&gt;&gt;}} is enabled (see {{lc|std::hash}}) if {{lc|std::hash&lt;std::remove_const_t&lt;T&gt;&gt;}} is enabled, and is disabled otherwise.

When enabled, for an object {{tt|o}} of type {{tt|std::optional&lt;T&gt;}} that contains a value, {{tt|std::hash&lt;std::optional&lt;T&gt;&gt;()(o)}} evaluates to the same value as {{lc|std::hash&lt;std::remove_const_t&lt;T&gt;&gt;()(*o)}}. For an optional that does not contain a value, the hash is unspecified.

The member functions of this specialization are not guaranteed to be noexcept because the hash of the underlying type might throw.

===Template parameters===
{{par begin}}
{{par | T | the type of the value contained in {{tt|optional}} object}}
{{par end}}

===Example===
{{example |
 | code=
#include &lt;optional&gt;
#include &lt;unordered_set&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std::literals;
int main()
{
    // hash&lt;optional&gt; makes it possible to use unordered_set
    std::unordered_set&lt;std::optional&lt;std::string&gt;&gt; s = {
            &quot;abc&quot;s, std::nullopt, &quot;def&quot;s
    };

    for(const auto&amp; o : s)
        std::cout &lt;&lt; o.value_or(&quot;(null)&quot;) &lt;&lt; ' ';
}
|p=true
| output=
def abc (null)
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[zh:cpp/utility/optional/hash]]</text>
      <sha1>lbp20ornws3cjf1kqclsb69h69a0klq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/in place</title>
    <ns>0</ns>
    <id>15586</id>
    <redirect title="cpp/utility/in place" />
    <revision>
      <id>86625</id>
      <timestamp>2016-07-07T17:31:20Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Cubbi moved page [[cpp/utility/optional/in place]] to [[cpp/utility/in place]]: as requested by tc</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/utility/in place]]</text>
      <sha1>lm65k5tmobtvvdbdrfux3aw1pqilte1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/in place t</title>
    <ns>0</ns>
    <id>14827</id>
    <revision>
      <id>89656</id>
      <parentid>84101</parentid>
      <timestamp>2017-01-23T08:32:18Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="528">{{cpp/title|in_place_t}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl header | optional}}
{{dcl | since=c++17 |1=
struct in_place_t {};
}}
{{dcl end}}

{{tt|std::in_place_t}} is an empty class type used to disambiguate the overloads of constructors and member functions of that take arguments (possibly a parameter pack) for in-place construction of some value.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc in_place}}
{{dsc inc | cpp/utility/dsc optional}}
{{dsc end}}

[[zh:cpp/utility/optional/in_place_t]]</text>
      <sha1>nv2d302x8ajvrzl8si4cc1f3tw1jlgm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/make optional</title>
    <ns>0</ns>
    <id>13187</id>
    <revision>
      <id>89689</id>
      <parentid>86653</parentid>
      <timestamp>2017-01-23T11:34:00Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1572">{{cpp/title|make_optional}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl header | optional}}
{{dcl | num = 1 | since=c++17 | 1=
template&lt; class T &gt; 
constexpr std::optional&lt;std::decay_t&lt;T&gt;&gt; make_optional( T&amp;&amp; value ); }}
{{dcl | num = 2 | since=c++17 | 1=
template&lt; class T, class... Args &gt; 
constexpr std::optional&lt;T&gt; make_optional( Args&amp;&amp;... args ); }}
{{dcl | num = 3 | since=c++17 | 1=
template&lt; class T, class U, class... Args &gt; 
constexpr std::optional&lt;T&gt; make_optional( std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args ); }}

{{dcl end}}

@1@ Creates an optional object from {{tt|value}}. Effectively calls {{c|std::optional&lt;std::decay_t&lt;T&gt;&gt;(std::forward&lt;T&gt;(value))}}
@2@ Creates an optional object constructed in-place from {{tt|args...}}. Equivalent to {{c|return std::optional&lt;T&gt;(std::in_place, std::forward&lt;Args&gt;(args)...); }}.
@3@ Creates an optional object constructed in-place from {{tt|il}} and {{tt|args...}}. Equivalent to {{c|return std::optional&lt;T&gt;(std::in_place, il, std::forward&lt;Args&gt;(args)...); }}.

===Parameters===
{{par begin}}
{{par | value | the value to construct optional object with}}
{{par | il, args | arguments to be passed to the constructor of {{tt|T}}. }}
{{par end}}

===Return value===
The constructed optional object.

===Exceptions===
Throws any exception thrown by the constructor of {{tt|T}}.

=== Notes ===
{{tt|T}} need not be movable for overloads {{v|2-3}} due to guaranteed copy elision.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc constructor}}
{{dsc end}}

[[zh:cpp/utility/optional/make_optional]]</text>
      <sha1>otly3j7u7gzhnikojvm20pyavm7e94k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/nullopt</title>
    <ns>0</ns>
    <id>14825</id>
    <revision>
      <id>90938</id>
      <parentid>89655</parentid>
      <timestamp>2017-03-14T12:48:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="451">{{cpp/title|nullopt}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl header | optional}}
{{dcl | since=c++17 |1=
inline constexpr nullopt_t nullopt{/*unspecified*/};
}}
{{dcl end}}

{{tt|std::nullopt}} is a constant of type {{lc|std::nullopt_t}} that is used to indicate {{tt|optional}} type with uninitialized state. 

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc nullopt_t}}
{{dsc end}}

[[zh:cpp/utility/optional/nullopt]]</text>
      <sha1>cpdevzg5c4ahgyl506tqrb1josgmy91</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/nullopt t</title>
    <ns>0</ns>
    <id>14824</id>
    <revision>
      <id>89654</id>
      <parentid>88468</parentid>
      <timestamp>2017-01-23T08:17:32Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1078">{{cpp/title|nullopt_t}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl header | optional}}
{{dcl | since=c++17 |1=
struct nullopt_t;
}}
{{dcl end}}

{{tt|std::nullopt_t}} is an empty class type used to indicate {{tt|optional}} type with uninitialized state. In particular, {{c|std::optional}} has a constructor with {{tt|nullopt_t}} as a single argument, which creates an optional that does not contain a value.

{{tt|std::nullopt_t}} must be a non-aggregate {{concept|LiteralType}} and cannot have a default constructor or an initializer-list constructor.

It must have a {{tt|constexpr}} constructor that takes some implementation-defined literal type.

===Notes===
The constraints on {{tt|nullopt_t}}'s constructors exist to support both {{c|1=op = {};}} and {{c|1=op = nullopt;}} as the syntax for disengaging an optional object. 

A possible implementation of this class is
{{source|
struct nullopt_t {
    explicit constexpr nullopt_t(int) {}
};
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc nullopt}}
{{dsc end}}

[[zh:cpp/utility/optional/nullopt_t]]</text>
      <sha1>jpqu10swlm00bzrmp687un2xfmbgkvw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/operator bool</title>
    <ns>0</ns>
    <id>13190</id>
    <revision>
      <id>91711</id>
      <parentid>89691</parentid>
      <timestamp>2017-03-31T19:55:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="510">{{cpp/optional/title|operator bool | has_value}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | since=c++17| 1=
constexpr explicit operator bool() const;
}}
{{dcl | since=c++17| 1=
constexpr bool has_value() const;
}}

{{dcl end}}

Checks whether {{c|*this}} contains a value.

===Parameters===
(none)

===Return value===
{{c|true}} if {{c|*this}} contains a value, {{c|false}} if {{c|*this}} does not contain a value.

===Exceptions===
{{unreviewed noexcept}}

[[zh:cpp/utility/optional/operator_bool]]</text>
      <sha1>qrsnjasue9geqasy601o7jrdxdxcojd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/operator cmp</title>
    <ns>0</ns>
    <id>13191</id>
    <revision>
      <id>91873</id>
      <parentid>90722</parentid>
      <timestamp>2017-03-31T20:00:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="7714">{{title|1=operator==, !=, &lt;, &lt;=, &gt;, &gt;={{small|(std::optional)}}}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl header | optional}}
{{dcl h | Compare two {{tt|optional}} objects}}
{{dcl | since=c++17 | num=1 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator==( const optional&lt;T&gt;&amp; lhs, const optional&lt;U&gt;&amp; rhs );
}}
{{dcl | since=c++17 | num=2 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator!=( const optional&lt;T&gt;&amp; lhs, const optional&lt;U&gt;&amp; rhs );
}}
{{dcl | since=c++17 | num=3 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&lt;( const optional&lt;T&gt;&amp; lhs, const optional&lt;U&gt;&amp; rhs );
}}
{{dcl | since=c++17 | num=4 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&lt;=( const optional&lt;T&gt;&amp; lhs, const optional&lt;U&gt;&amp; rhs );
}}
{{dcl | since=c++17 | num=5 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&gt;( const optional&lt;T&gt;&amp; lhs, const optional&lt;U&gt;&amp; rhs );
}}
{{dcl | since=c++17 | num=6 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&gt;=( const optional&lt;T&gt;&amp; lhs, const optional&lt;U&gt;&amp; rhs );
}}
{{dcl h | Compare an {{tt|optional}} object with a {{tt|nullopt}} }}
{{dcl | since=c++17 | num=7 | 1=
template&lt; class T &gt; 
constexpr bool operator==( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=c++17 | num=8 | 1=
template&lt; class T &gt; 
constexpr bool operator==( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=9 | 1=
template&lt; class T &gt; 
constexpr bool operator!=( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=c++17 | num=10 | 1=
template&lt; class T &gt; 
constexpr bool operator!=( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=11 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=c++17 | num=12 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=13 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;=( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=c++17 | num=14 | 1=
template&lt; class T &gt; 
constexpr bool operator&lt;=( std::nullopt_t, const optional&lt;T&gt;&amp; opt);
}}
{{dcl | since=c++17 | num=15 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=c++17 | num=16 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=17 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;=( const optional&lt;T&gt;&amp; opt, std::nullopt_t );
}}
{{dcl | since=c++17 | num=18 | 1=
template&lt; class T &gt; 
constexpr bool operator&gt;=( std::nullopt_t, const optional&lt;T&gt;&amp; opt );
}}
{{dcl h | Compare an {{tt|optional}} object with a {{tt|T}} }}
{{dcl | since=c++17 | num=19 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator==( const optional&lt;T&gt;&amp; opt, const U&amp; value);
}}
{{dcl | since=c++17 | num=20 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator==( const U&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=21 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator!=( const optional&lt;T&gt;&amp; opt, const U&amp; value );
}}
{{dcl | since=c++17 | num=22 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator!=( const U&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=23 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&lt;( const optional&lt;T&gt;&amp; opt, const U&amp; value );
}}
{{dcl | since=c++17 | num=24 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&lt;( const U&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=25 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&lt;=( const optional&lt;T&gt;&amp; opt, const U&amp; value );
}}
{{dcl | since=c++17 | num=26 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&lt;=( const U&amp; value, const optional&lt;T&gt;&amp; opt);
}}
{{dcl | since=c++17 | num=27 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&gt;( const optional&lt;T&gt;&amp; opt, const U&amp; value );
}}
{{dcl | since=c++17 | num=28 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&gt;( const U&amp; value, const optional&lt;T&gt;&amp; opt );
}}
{{dcl | since=c++17 | num=29 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&gt;=( const optional&lt;T&gt;&amp; opt, const U&amp; value );
}}
{{dcl | since=c++17 | num=30 | 1=
template&lt; class T, class U &gt; 
constexpr bool operator&gt;=( const U&amp; value, const optional&lt;T&gt;&amp; opt );
}}

{{dcl end}}

Performs comparison operations on {{tt|optional}} objects.

@1-6@ Compares two {{tt|optional}} objects, {{tt|lhs}} and {{tt|rhs}}. The contained values are compared (using the corresponding operator of {{tt|T}}) only if both {{tt|lhs}} and {{tt|rhs}} contain values. Otherwise, 

::*{{tt|lhs}} is considered ''equal to'' {{tt|rhs}} if, and only if, both {{tt|lhs}} and {{tt|rhs}} do not contain a value.
::*{{tt|lhs}} is considered ''less than'' {{tt|rhs}} if, and only if, {{tt|rhs}} contains a value and {{tt|lhs}} does not.

@7-18@ Compares {{tt|opt}} with a {{tt|nullopt}}. Equivalent to (1-6) when comparing to an {{tt|optional}} that does not contain a value.

@19-30@ Compares {{tt|opt}} with a {{tt|value}}. The values are compared (using the corresponding operator of {{tt|T}}) only if {{tt|opt}} contains a value. Otherwise, {{tt|opt}} is considered ''less than'' {{tt|value}}. If the corresponding comparison expression between {{c|*opt}} and {{c|value}} is not well-formed, or if its result is not convertible to {{c|bool}}, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | lhs, rhs, opt | an {{tt|optional}} object to compare}}
{{par | value | value to compare to the contained value}}
{{par end}}

===Return value===
@1@ If {{c|1=bool(lhs) != bool(rhs)}}, returns {{c|false}}&lt;br&gt;
Otherwise, if {{c|1=bool(lhs) == false}} (and so {{c|bool(rhs) {{==}} false}} as well), returns {{c|true}}&lt;br&gt;
Otherwise, returns {{c|1=*lhs == *rhs}}.

@2@ If {{c|1=bool(lhs) != bool(rhs)}}, returns {{c|true}}&lt;br&gt;
Otherwise, if {{c|1=bool(lhs) == false}} (and so {{c|bool(rhs) {{==}} false}} as well), returns {{c|false}}&lt;br&gt;
Otherwise, returns {{c|1=*lhs != *rhs}}.

@3@ If {{c|1=bool(rhs) == false}} returns {{c|false}}&lt;br&gt;
Otherwise, if {{c|1=bool(lhs) == false}}, returns {{c|true}}&lt;br&gt;
Otherwise returns {{c|*lhs &lt; *rhs}}

@4@ If {{c|1=bool(lhs) == false}} returns {{c|true}}&lt;br&gt;
Otherwise, if {{c|1=bool(rhs) == false}}, returns {{c|false}}&lt;br&gt;
Otherwise returns {{c|1=*lhs &lt;= *rhs}}

@5@ If {{c|1=bool(lhs) == false}} returns {{c|false}}&lt;br&gt;
Otherwise, if {{c|1=bool(rhs) == false}}, returns {{c|true}}&lt;br&gt;
Otherwise returns {{c|*lhs &gt; *rhs}}

@6@ If {{c|1=bool(rhs) == false}} returns {{c|true}}&lt;br&gt;
Otherwise, if {{c|1=bool(lhs) == false}}, returns {{c|false}}&lt;br&gt;
Otherwise returns {{c|1=*lhs &gt;= *rhs}}

@7-8@ Returns {{c|!opt}}.
@9-10@ Returns {{c|bool(opt)}}.
@11@ Returns {{c|false}}.
@12@ Returns {{c|bool(opt)}}.
@13@ Returns {{c|!opt}}.
@14@ Returns {{c|true}}.
@15@ Returns {{c|bool(opt)}}.
@16@ Returns {{c|false}}.
@17@ Returns {{c|true}}.
@18@ Returns {{c|!opt}}.

@19@ Returns {{c|1=bool(opt) ? *opt == value : false}}.
@20@ Returns {{c|1=bool(opt) ? value == *opt : false}}.
@21@ Returns {{c|1=bool(opt) ? *opt != value : true}}.
@22@ Returns {{c|1=bool(opt) ? value != *opt : true}}.
@23@ Returns {{c|1=bool(opt) ? *opt &lt; value  : true}}.
@24@ Returns {{c|1=bool(opt) ? value &lt; *opt  : false}}.
@25@ Returns {{c|1=bool(opt) ? *opt &lt;= value : true}}.
@26@ Returns {{c|1=bool(opt) ? value &lt;= *opt : false}}.
@27@ Returns {{c|1=bool(opt) ? *opt &gt; value  : false}}.
@28@ Returns {{c|1=bool(opt) ? value &gt; *opt  : true}}.
@29@ Returns {{c|1=bool(opt) ? *opt &gt;= value : false}}.
@30@ Returns {{c|1=bool(opt) ? value &gt;= *opt : true}}.

===Exceptions===
@1-6@ (none)

@7-18@ {{unreviewed noexcept}}

@19-30@ (none)

[[zh:cpp/utility/optional/operator_cmp]]</text>
      <sha1>erjxtf7e2gluzzvwojnwonqqsn2r8ap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/operator*</title>
    <ns>0</ns>
    <id>13188</id>
    <revision>
      <id>89692</id>
      <parentid>86425</parentid>
      <timestamp>2017-01-23T11:45:55Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1478">{{cpp/optional/title|operator-&gt;|operator*}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
constexpr const T* operator-&gt;() const;
}}
{{dcl | since=c++17 | num=1 | 1=
constexpr T* operator-&gt;();
}}
{{dcl | since=c++17 | num=2 | 1=
constexpr const T&amp; operator*() const&amp;;
}}
{{dcl | since=c++17 | num=2 | 1=
constexpr T&amp; operator*() &amp;;
}}
{{dcl | since=c++17 | num=2 | 1=
constexpr const T&amp;&amp; operator*() const&amp;&amp;;
}}
{{dcl | since=c++17 | num=2 | 1=
constexpr T&amp;&amp; operator*() &amp;&amp;;
}}
{{dcl end}}

Accesses the contained value.

@1@ Returns a pointer to the contained value.

@2@ Returns a reference to the contained value.

The behavior is undefined if {{c|*this}} does not contain a value.

===Parameters===
(none)

===Return value===
Pointer or reference to the contained value.

===Exceptions===
(none)

===Notes===
This operator does not check whether the optional contains a value. If checked access is needed, {{lc|value()}} or {{lc|value_or()}} may be used.

===Example===
{{example|code=
#include &lt;optional&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
int main()
{
    using namespace std::string_literals;

    std::optional&lt;int&gt; opt1 = 1;
    std::cout &lt;&lt; *opt1 &lt;&lt; '\n';

    std::optional&lt;std::string&gt; opt2 = &quot;abc&quot;s;
    std::cout &lt;&lt; opt2-&gt;size() &lt;&lt; '\n';
}
|output=
1
3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc value}}
{{dsc inc | cpp/utility/optional/dsc value_or}}
{{dsc end}}

[[zh:cpp/utility/optional/operator*]]</text>
      <sha1>hzcaoz927wouzdtf1x1igg7notslbjf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/operator=</title>
    <ns>0</ns>
    <id>13189</id>
    <revision>
      <id>92113</id>
      <parentid>92112</parentid>
      <timestamp>2017-04-05T19:45:07Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Exceptions */ adjust</comment>
      <text xml:space="preserve" bytes="5931">{{cpp/optional/title|operator{{=}}}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | num=1 | 1=
optional&amp; operator=( std::nullopt_t ) noexcept;
}}
{{dcl | since=c++17 | num=2 | 1=
optional&amp; operator=( const optional&amp; other );
}}
{{dcl | since=c++17 | num=3 | 1=
optional&amp; operator=( optional&amp;&amp; other ) noexcept(/* see below */);
}}
{{dcl | since=c++17 | num=4 | 1=
template&lt; class U = T &gt; 
optional&amp; operator=( U&amp;&amp; value );
}}
{{dcl | since=c++17 | num=5 | 1=
template&lt; class U &gt;
optional&amp; operator=( const optional&lt;U&gt;&amp; other );
}}
{{dcl | since=c++17 | num=6 | 1=
template&lt; class U &gt;
optional&amp; operator=( optional&lt;U&gt;&amp;&amp; other );
}}
{{dcl end}}

Replaces contents of {{c|*this}} with the contents of {{tt|other}}

@1@ If {{c|*this}} contains a value before the call, the contained value is destroyed by calling its destructor as if by {{c|value().T::~T()}}. {{c|*this}} does not contain a value after this call.

@2-3@ Assigns the state of {{tt|other}}. &lt;br&gt;
* If both {{c|*this}} and {{tt|other}} do not contain a value, the function has no effect.
* If {{c|*this}} contains a value, but {{tt|other}} does not, then the contained value is destroyed by calling its destructor. {{c|*this}} does not contain a value after the call.
* If {{tt|other}} contains a value, then depending on whether {{c|*this}} contains a value, the contained value is either [[cpp/language/direct_initialization|direct-initialized]] or assigned from {{c|*other}} {{v|2}} or {{c|std::move(*other)}} {{v|3}}. Note that a moved-from optional still ''contains a value''.
* Overload {{v|2}} is defined as deleted unless {{c|std::is_copy_constructible_v&lt;T&gt;}} and {{c|std::is_copy_assignable_v&lt;T&gt;}} are both {{c|true}}.
* Overload {{v|3}} does not participate in overload resolution unless {{c|std::is_move_constructible_v&lt;T&gt;}} and {{c|std::is_move_assignable_v&lt;T&gt;}} are both {{c|true}}.

@4@ Perfect-forwarded assignment: depending on whether {{c|*this}} contains a value before the call, the contained value is either direct-initialized from {{c|std::forward&lt;U&gt;(value)}} or assigned from {{c|std::forward&lt;U&gt;(value)}}. The function does not participate in overload resolution unless {{c|std::decay_t&lt;U&gt;}} is not {{c|std::optional&lt;T&gt;}}, {{c|std::is_constructible_v&lt;T, U&gt;}} is {{c|true}}, {{c|std::is_assignable_v&lt;T&amp;, U&gt;}} is {{c|true}}, and at least one of the following is true: &lt;br&gt;
* {{tt|T}} is not a [[cpp/language/type|scalar type]];
* {{c|std::decay_t&lt;U&gt;}} is not {{tt|T}}.

@5-6@ Assigns the state of {{tt|other}}. &lt;br&gt;
* If both {{c|*this}} and {{tt|other}} do not contain a value, the function has no effect.
* If {{c|*this}} contains a value, but {{tt|other}} does not, then the contained value is destroyed by calling its destructor. {{c|*this}} does not contain a value after the call.
* If {{tt|other}} contains a value, then depending on whether {{c|*this}} contains a value, the contained value is either [[cpp/language/direct_initialization|direct-initialized]] or assigned from {{c|*other}} {{v|5}} or {{c|std::move(*other)}} {{v|6}}. Note that a moved-from optional still ''contains a value''.
* These overloads do not participate in overload resolution unless the following conditions are met:
** {{tt|T}} is not constructible, convertible, or assignable from any expression of type (possibly {{c|const}}) {{c|std::optional&lt;U&gt;}}, i.e., the following 12 type traits are all {{c|false}}:
*** {{c|std::is_constructible_v&lt;T, std::optional&lt;U&gt;&amp;&gt;}}
*** {{c|std::is_constructible_v&lt;T, const std::optional&lt;U&gt;&amp;&gt;}}
*** {{c|std::is_constructible_v&lt;T, std::optional&lt;U&gt;&amp;&amp;&gt;}}
*** {{c|std::is_constructible_v&lt;T, const std::optional&lt;U&gt;&amp;&amp;&gt;}}
*** {{c|std::is_convertible_v&lt;std::optional&lt;U&gt;&amp;, T&gt;}}
*** {{c|std::is_convertible_v&lt;const std::optional&lt;U&gt;&amp;, T&gt;}}
*** {{c|std::is_convertible_v&lt;std::optional&lt;U&gt;&amp;&amp;, T&gt;}}
*** {{c|std::is_convertible_v&lt;const std::optional&lt;U&gt;&amp;&amp;, T&gt;}} 
*** {{c|std::is_assignable_v&lt;T&amp;, std::optional&lt;U&gt;&amp;&gt;}}
*** {{c|std::is_assignable_v&lt;T&amp;, const std::optional&lt;U&gt;&amp;&gt;}}
*** {{c|std::is_assignable_v&lt;T&amp;, std::optional&lt;U&gt;&amp;&amp;&gt;}}
*** {{c|std::is_assignable_v&lt;T&amp;, const std::optional&lt;U&gt;&amp;&amp;&gt;}}.
** For overload {{v|5}}, {{c|std::is_constructible_v&lt;T, const U&amp;&gt;}} and {{c|std::is_assignable_v&lt;T&amp;, const U&amp;&gt;}} are both {{c|true}}.
** For overload {{v|6}}, {{c|std::is_constructible_v&lt;T, U&gt;}} and {{c|std::is_assignable_v&lt;T&amp;, U&gt;}} are both {{c|true}}.
===Parameters===
{{par begin}}
{{par | other | another {{tt|optional}} object whose contained value to assign}}
{{par | value | value to assign to the contained value}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@2-6@ Throws any exception thrown by the constructor or assignment operator of {{tt|T}}. If an exception is thrown, the initialization state of {{c|*this}} (and of {{tt|other}} in case of {{v|2-3}} and {{v|5-6}} ) is unchanged, i.e. if the object contained a value, it still contains a value, and the other way round. The contents of {{tt|value}} and the contained values of {{c|*this}} and {{tt|other}} depend on the exception safety guarantees of the operation from which the exception originates (copy-constructor, move-assignment, etc.). &lt;br&gt;
{{v|3}} has the following {{noexcept|std::is_nothrow_move_assignable&lt;T&gt;::value &amp;&amp; std::is_nothrow_move_constructible&lt;T&gt;::value}}

===Notes===
An optional object {{tt|op}} may be turned into an empty optional with both {{c|1=op = {};}} and {{c|1=op = nullopt;}}. The first expression constructs an empty {{c|optional}} object with {{c|{}}} and assigns it to {{tt|op}}.

===Example===
{{example|code=
#include &lt;optional&gt;
#include &lt;iostream&gt;
int main()
{
    std::optional&lt;const char*&gt; s1 = &quot;abc&quot;, s2; // constructor
    s2 = s1; // assignment
    s1 = &quot;def&quot;; // decaying assignment (U = char[4], T = const char*)
    std::cout &lt;&lt; *s2 &lt;&lt; ' ' &lt;&lt; *s1 &lt;&lt; '\n';
}
|output=
abc def
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc emplace}}
{{dsc end}}

[[zh:cpp/utility/optional/operator=]]</text>
      <sha1>lbrhh6fgoaorqv7h5c5lkydosvl5zmt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/optional</title>
    <ns>0</ns>
    <id>13192</id>
    <revision>
      <id>91408</id>
      <parentid>91149</parentid>
      <timestamp>2017-03-31T19:42:59Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="8116">{{cpp/optional/title|optional}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17|
constexpr optional();
constexpr optional( std::nullopt_t );
}}
{{dcl | num=2 | since=c++17|
constexpr optional( const optional&amp; other );
}}
{{dcl | num=3 | since=c++17|
constexpr optional( optional&amp;&amp; other );
}}
{{dcl | num=4 | since=c++17|
template &lt; class U &gt;
/* EXPLICIT */ optional( const optional&lt;U&gt;&amp; other );
}}
{{dcl | num=5 | since=c++17|
template &lt; class U &gt;
/* EXPLICIT */ optional( optional&lt;U&gt;&amp;&amp; other );
}}
{{dcl | num=6 | since=c++17|
template&lt; class... Args &gt; 
constexpr explicit optional( std::in_place_t, Args&amp;&amp;... args );
}}
{{dcl | num=7 | since=c++17|
template&lt; class U, class... Args &gt;
constexpr explicit optional( std::in_place_t,
                             std::initializer_list&lt;U&gt; ilist, 
                             Args&amp;&amp;... args );
}}
{{dcl | num=8 | since=c++17| 1=
template &lt; class U = value_type &gt;
/* EXPLICIT */ constexpr optional( U&amp;&amp; value );
}}

{{dcl end}}

Constructs a new {{tt|optional}} object.

@1@ Constructs the object that ''does not contain a value''.

@2@ Copy constructor: If {{tt|other}} contains a value, initializes the contained value as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|*other}}. If {{tt|other}} does not contain a value, constructs an object that ''does not contain a value''. This constructor is defined as deleted if {{c|std::is_copy_constructible_v&lt;T&gt;}} is {{c|false}}. It is a constexpr constructor if {{c|std::is_trivially_copy_constructible_v&lt;T&gt;}} is {{c|true}}.

@3@ Move constructor: If {{tt|other}} contains a value, initializes the contained value as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|std::move(*other)}} and ''does not'' make {{tt|other}} empty: a moved-from optional still ''contains a value'', but the value itself is moved from. If {{tt|other}} does not contain a value, constructs an object that ''does not contain a value''. This constructor does not participate in overload resolution unless {{c|std::is_move_constructible_v&lt;T&gt;}} is {{c|true}}.  It is a constexpr constructor if {{c|std::is_trivially_move_constructible_v&lt;T&gt;}} is {{c|true}}.

@4@ Converting copy constructor: If {{tt|other}} doesn't contain a value, constructs an optional object that does not contain a value. Otherwise, constructs an optional object that contains a value, initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|*other}}. This constructor does not participate in overload resolution unless the following conditions are met: &lt;br&gt;
* {{c|std::is_constructible_v&lt;T, const U&amp;&gt;}} is {{c|true}}.
* {{tt|T}} is not constructible or convertible from any expression of type (possibly {{c|const}}) {{c|std::optional&lt;U&gt;}}, i.e., the following 8 type traits are all {{c|false}}: 
** {{c|std::is_constructible_v&lt;T, std::optional&lt;U&gt;&amp;&gt;}}
** {{c|std::is_constructible_v&lt;T, const std::optional&lt;U&gt;&amp;&gt;}}
** {{c|std::is_constructible_v&lt;T, std::optional&lt;U&gt;&amp;&amp;&gt;}}
** {{c|std::is_constructible_v&lt;T, const std::optional&lt;U&gt;&amp;&amp;&gt;}}
** {{c|std::is_convertible_v&lt;std::optional&lt;U&gt;&amp;, T&gt;}}
** {{c|std::is_convertible_v&lt;const std::optional&lt;U&gt;&amp;, T&gt;}}
** {{c|std::is_convertible_v&lt;std::optional&lt;U&gt;&amp;&amp;, T&gt;}}
** {{c|std::is_convertible_v&lt;const std::optional&lt;U&gt;&amp;&amp;, T&gt;}} 
@@ This constructor is {{c|explicit}} if and only if {{c|std::is_convertible_v&lt;const U&amp;, T&gt;}} is {{c|false}}.

@5@ Converting move constructor: If {{tt|other}} doesn't contain a value, constructs an optional object that does not contain a value. Otherwise, constructs an optional object that contains a value, initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} with the expression {{c|std::move(*other)}}.  This constructor does not participate in overload resolution unless the following conditions are met: &lt;br&gt;
* {{c|std::is_constructible_v&lt;T, U&amp;&amp;&gt;}} is {{c|true}}.
* {{tt|T}} is not constructible or convertible from any expression of type (possibly {{c|const}}) {{c|std::optional&lt;U&gt;}}, i.e., the following 8 type traits are all {{c|false}}: 
** {{c|std::is_constructible_v&lt;T, std::optional&lt;U&gt;&amp;&gt;}}
** {{c|std::is_constructible_v&lt;T, const std::optional&lt;U&gt;&amp;&gt;}}
** {{c|std::is_constructible_v&lt;T, std::optional&lt;U&gt;&amp;&amp;&gt;}}
** {{c|std::is_constructible_v&lt;T, const std::optional&lt;U&gt;&amp;&amp;&gt;}}
** {{c|std::is_convertible_v&lt;std::optional&lt;U&gt;&amp;, T&gt;}}
** {{c|std::is_convertible_v&lt;const std::optional&lt;U&gt;&amp;, T&gt;}}
** {{c|std::is_convertible_v&lt;std::optional&lt;U&gt;&amp;&amp;, T&gt;}}
** {{c|std::is_convertible_v&lt;const std::optional&lt;U&gt;&amp;&amp;, T&gt;}} 
@@ This constructor is {{c|explicit}} if and only if {{c|std::is_convertible_v&lt;U&amp;&amp;, T&gt;}} is {{c|false}}.

@6@ Constructs an optional object that ''contains a value'', initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} from the arguments {{c|std::forward&lt;Args&gt;(args)...}}. If the selected constructor of {{tt|T}} is a {{c|constexpr}} constructor, this constructor is a {{c|constexpr}} constructor. The function does not participate in the overload resolution unless {{c|1=std::is_constructible_v&lt;T, Args...&gt;}} is {{c|true}}

@7@ Constructs an optional object that ''contains a value'', initialized as if [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} from the arguments {{c|ilist, std::forward&lt;Args&gt;(args)...}}. If the selected constructor of {{tt|T}} is a {{c|constexpr}} constructor, this constructor is a {{c|constexpr}} constructor. The function does not participate in the overload resolution unless {{c|1=std::is_constructible_v&lt;T, std::initializer_list&lt;U&gt;&amp;, Args&amp;&amp;...&gt;}} is {{c|true}}

@8@ Constructs an optional object that ''contains a value'', initialized as if  [[cpp/language/direct_initialization|direct-initializing]] (but not direct-list-initializing) an object of type {{tt|T}} (where {{tt|T}} = {{tt|value_type}}) with the expression {{c|std::forward&lt;U&gt;(value)}}. If the selected constructor of {{tt|T}} is a {{c|constexpr}} constructor, this constructor is a {{c|constexpr}} constructor. This constructor does not participate in overload resolution unless {{c|std::is_constructible_v&lt;T, U&amp;&amp;&gt;}} is {{c|true}} and {{c|std::decay_t&lt;U&gt;}} is neither {{lc|std::in_place_t}} nor {{c|std::optional&lt;T&gt;}}. This constructor is {{c|explicit}} if and only if {{c|std::is_convertible_v&lt;U&amp;&amp;, T&gt;}} is {{c|false}}.

===Parameters===
{{par begin}}
{{par | other | another {{tt|optional}} object whose contained value to copy}}
{{par | value | value to initialize the contained value with}}
{{par | args... | arguments to initialize the contained value with}}
{{par | ilist | initializer list to initialize the contained value with}}
{{par end}}

===Exceptions===
@1@ {{unreviewed noexcept}}

@2@ Throws any exception thrown by the constructor of {{tt|T}}.

@3@ Throws any exception thrown by the constructor of {{tt|T}}. Has the following {{tt|noexcept}} declaration: {{unreviewed noexcept|std::is_nothrow_move_constructible&lt;T&gt;::value}}.

@4-8@ Throws any exception thrown by the constructor of {{tt|T}}.

===Example===
{{example|code=
#include &lt;optional&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
int main()
{
    std::optional&lt;int&gt; o1, // empty
                       o2 = 1, // init from rvalue
                       o3 = o2; // copy-constructor
 
    // calls string( initializer_list&lt;CharT&gt; ) constructor
    std::optional&lt;std::string&gt; o4(std::in_place, {'a', 'b', 'c'});
    
    // calls string( size_type count, CharT ch ) constructor
    std::optional&lt;std::string&gt; o5(std::in_place, 3, 'A');
 
    std::cout &lt;&lt; *o2 &lt;&lt; ' ' &lt;&lt; *o3 &lt;&lt; ' ' &lt;&lt; *o4 &lt;&lt; ' ' &lt;&lt; *o5  &lt;&lt; '\n';
}
|output=
1 1 abc AAA
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc make_optional}}
{{dsc end}}

[[zh:cpp/utility/optional/optional]]</text>
      <sha1>ozsnsabz0ewqnedxw6c1hlg8reh66dc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/reset</title>
    <ns>0</ns>
    <id>15595</id>
    <revision>
      <id>91738</id>
      <parentid>89694</parentid>
      <timestamp>2017-03-31T19:56:26Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="477">{{cpp/optional/title|reset}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | since=c++17 | 1=
void reset();
}}
{{dcl end}}

If {{c|*this}} contains a value, destroy that value as if by {{c|value().T::~T()}}. Otherwise, there are no effects.

{{c|*this}} does not contain a value after this call.

=== Exceptions ===
{{unreviewed noexcept}}

=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc operator{{=}}}}
{{dsc end}}

[[zh:cpp/utility/optional/reset]]</text>
      <sha1>as3uplrf0sc585fervprx2qvp8vq7nx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/swap</title>
    <ns>0</ns>
    <id>13193</id>
    <revision>
      <id>92110</id>
      <parentid>91744</parentid>
      <timestamp>2017-04-05T19:42:54Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="1664">{{cpp/optional/title|swap}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | since=c++17| 1=
void swap( optional&amp; other ) noexcept(/* see below */);
}}
{{dcl end}}

Swaps the contents with those of {{tt|other}}.

* If neither {{c|*this}} nor {{tt|other}} contain a value, the function has no effect.

* If only one of {{c|*this}} and {{tt|other}} contains a value (let's call this object {{tt|in}} and the other {{tt|un}}), the contained value of {{tt|un}} is [[cpp/language/direct_initialization|direct-initialized]] from {{c|std::move(*in)}}, followed by destruction of the contained value of {{tt|in}} as if by {{c|in-&gt;T::~T()}}. After this call, {{tt|in}} does not contain a value; {{tt|un}} contains a value.

* If both {{c|*this}} and {{tt|other}} contain values, the contained values are exchanged by calling {{c|using std::swap; swap(**this, *other)}}. {{tt|T}} lvalues must satisfy {{concept|Swappable}}.

===Parameters===
{{par begin}}
{{par | other | the {{tt|optional}} object to exchange the contents with}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{noexcept|std::is_nothrow_move_constructible_v&lt;T&gt; &amp;&amp; 
         std::is_nothrow_swappable_v&lt;T&gt;}}

In the case of thrown exception, the states of the contained values of {{c|*this}} and {{tt|other}} are determined by the exception safety guarantees of {{tt|swap}} of type {{tt|T}} or {{tt|T}}'s move constructor, whichever is called. For both {{c|*this}} and {{tt|other}}, if the object contained a value, it is left containing a value, and the other way round.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc swap2}}
{{dsc end}}

[[zh:cpp/utility/optional/swap]]</text>
      <sha1>lhhkn59irbn22l1kc1qxaspvt4f89fq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/swap2</title>
    <ns>0</ns>
    <id>13194</id>
    <revision>
      <id>92111</id>
      <parentid>91658</parentid>
      <timestamp>2017-04-05T19:43:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="943">{{cpp/title | swap{{small|(std::optional)}}}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl header | optional}}
{{dcl | since=c++17 |
template&lt; class T &gt;
void swap( optional&lt;T&gt;&amp; lhs, optional&lt;T&gt;&amp; rhs ) noexcept(/* see below */);
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::optional}}. Exchanges the state of {{tt|lhs}} with that of {{tt|rhs}}. Effectively calls {{c|lhs.swap(rhs)}}.

This function template does not participate in overload resolution unless {{c|std::is_move_constructible_v&lt;T&gt;}} and {{c|std::is_swappable_v&lt;T&gt;}} are both {{c|true}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{tt|optional}} objects whose states to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{noexcept|noexcept(lhs.swap(rhs))}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc swap}}
{{dsc end}}

[[zh:cpp/utility/optional/swap2]]</text>
      <sha1>13j3xqplmgean5t6r9izjwxra3gcpe9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/value</title>
    <ns>0</ns>
    <id>13195</id>
    <revision>
      <id>89652</id>
      <parentid>86427</parentid>
      <timestamp>2017-01-23T08:04:43Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1284">{{cpp/optional/title|value}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17 | 1=
constexpr T&amp; value() &amp;;
constexpr const T &amp; value() const &amp;;
}}
{{dcl | num = 2| since=c++17 | 1=
constexpr T&amp;&amp; value() &amp;&amp;;
constexpr const T&amp;&amp; value() const &amp;&amp;;
}}
{{dcl end}}

If {{c|*this}} contains a value, returns a reference to the contained value.

Otherwise, throws a {{lc|std::bad_optional_access}} exception.

===Parameters===
(none)

===Return value===
A reference to the contained value.

===Exceptions===
{{lc|std::bad_optional_access}} if {{c|*this}} does not contain a value.

===Notes===
The dereference operator {{lc|operator*()}} does not check if this optional contains a value, which may be more efficient than {{tt|value()}}.

===Example===
{{example|code=
#include &lt;optional&gt;
#include &lt;iostream&gt;
int main()
{
    std::optional&lt;int&gt; opt = {};

    try {
        int n = opt.value();
    } catch(const std::logic_error&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
|p=true
|output=
optional&lt;T&gt;::value: not engaged
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc value_or}}
{{dsc inc | cpp/utility/optional/dsc operator*}}
{{dsc inc | cpp/utility/optional/dsc bad_optional_access}}
{{dsc end}}

[[zh:cpp/utility/optional/value]]</text>
      <sha1>9mtt77hir3sbyfsr4q9mcznkr91u842</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/value or</title>
    <ns>0</ns>
    <id>13196</id>
    <revision>
      <id>89693</id>
      <parentid>87045</parentid>
      <timestamp>2017-01-23T11:51:38Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1542">{{cpp/optional/title|value_or}}
{{cpp/utility/optional/navbar}}
{{dcl begin}}
{{dcl | since=c++17| 1=
template&lt; class U &gt; 
constexpr T value_or( U&amp;&amp; default_value ) const&amp;;
}}
{{dcl | since=c++17| 1=
template&lt; class U &gt; 
constexpr T value_or( U&amp;&amp; default_value ) &amp;&amp;;
}}
{{dcl end}}

Returns the contained value if {{c|*this}} has a value, otherwise returns {{tt|default_value}}.
@1@ Equivalent to {{c|bool(*this) ? **this : static_cast&lt;T&gt;(std::forward&lt;U&gt;(default_value))}}
@2@ Equivalent to {{c|bool(*this) ? std::move(**this) : static_cast&lt;T&gt;(std::forward&lt;U&gt;(default_value))}}
===Parameters===
{{par begin}}
{{par | default_value | the value to use in case {{tt|*this}} is empty}}
{{par hreq}}
{{par req concept | T | CopyConstructible | overload=1}}
{{par req concept | T | MoveConstructible | overload=2}}
{{par req | {{tt|U&amp;&amp;}} must be convertible to {{tt|T}}}}
{{par end}}

===Return value===
The current value if {{c|*this}} has a value, or {{tt|default_value}} otherwise.

===Exceptions===
Any exception thrown by the selected constructor of the return value {{tt|T}}.

===Example===
{{example|code=
#include &lt;optional&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

std::optional&lt;const char*&gt; maybe_getenv(const char* n)
{
    if(const char* x = std::getenv(n))
       return x;
    else
       return {};
}
int main()
{
     std::cout &lt;&lt; maybe_getenv(&quot;MYPWD&quot;).value_or(&quot;(none)&quot;) &lt;&lt; '\n';
}
|p=true
|output=
(none)
}}
===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc value}}
{{dsc end}}

[[zh:cpp/utility/optional/value_or]]</text>
      <sha1>8j873ga40v647t718pajexaykcd8mus</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/optional/~optional</title>
    <ns>0</ns>
    <id>13197</id>
    <revision>
      <id>89699</id>
      <parentid>86424</parentid>
      <timestamp>2017-01-23T14:39:49Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="528">{{cpp/optional/title|~optional}}
{{cpp/utility/optional/navbar}}
{{ddcl | since=c++17|
~optional();
}}

If the object contains a value and the type {{tt|T}} is not trivially destructible (see {{lc|std::is_trivially_destructible}}), destroys the contained value by calling its destructor, as if by {{c|value().T::~T()}}.

Otherwise, does nothing.

===Notes===
If {{tt|T}} is trivially-destructible, then this destructor is also trivial, so {{tt|optional&lt;T&gt;}} is also trivially-destructible.

[[zh:cpp/utility/optional/~optional]]</text>
      <sha1>odiuor5nkluc3n2qqct2pkhsewwpan3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair</title>
    <ns>0</ns>
    <id>2121</id>
    <revision>
      <id>91974</id>
      <parentid>81227</parentid>
      <timestamp>2017-03-31T21:54:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2796</comment>
      <text xml:space="preserve" bytes="1892">{{cpp/title|pair}}
{{cpp/utility/pair/navbar}}
{{ddcl | header=utility |
template&lt;
    class T1,
    class T2
&gt; struct pair;
}}

{{tt|std::pair}} is a struct template that provides a way to store two heterogeneous objects as a single unit. A pair is a specific case of a {{lc|std::tuple}} with two elements.

{{rrev|since=c++17|If {{c|std::is_trivially_destructible_v&lt;T1&gt; &amp;&amp; std::is_trivially_destructible_v&lt;T2&gt;}} is {{c|true}}, the destructor of {{tt|pair}} is trivial.}}

===Template parameters===
{{par begin}}
{{par | T1, T2 | the types of the elements that the pair stores.}}
{{par end}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | {{tt|first_type}} | {{tt|T1}} }}
{{dsc | {{tt|second_type}} | {{tt|T2}}}}
{{dsc end}}

===Member objects===
{{dsc begin}}
{{dsc hitem | Member name | Type}}
{{dsc | {{tt|first}} | {{tt|T1}} }}
{{dsc | {{tt|second}} | {{tt|T2}} }}
{{dsc end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/utility/pair/pair | constructs new pair}}
{{dsc mem fun | cpp/utility/pair/operator{{=}} | assigns the contents}}
{{dsc mem fun | cpp/utility/pair/swap | swaps the contents | notes={{mark c++11}} }}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/pair/dsc make_pair}}
{{dsc inc | cpp/utility/pair/dsc operator_cmp}}
{{dsc inc | cpp/utility/pair/dsc swap2}}
{{dsc inc | cpp/utility/pair/dsc get}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/utility/pair/dsc tuple_size}}
{{dsc inc | cpp/utility/pair/dsc tuple_element}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc tuple}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc end}}

[[cs:cpp/utility/pair]]
[[de:cpp/utility/pair]]
[[es:cpp/utility/pair]]
[[fr:cpp/utility/pair]]
[[it:cpp/utility/pair]]
[[ja:cpp/utility/pair]]
[[pt:cpp/utility/pair]]
[[ru:cpp/utility/pair]]
[[zh:cpp/utility/pair]]</text>
      <sha1>n4bzwusisued69bf50l66r85mtc7f9v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/get</title>
    <ns>0</ns>
    <id>2601</id>
    <revision>
      <id>91671</id>
      <parentid>86745</parentid>
      <timestamp>2017-03-31T19:54:10Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3644">{{cpp/title | get&lt;small&gt;(std::pair)&lt;/small&gt;}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl header | utility }}
{{dcl rev begin | num=1}}
{{dcl | num=1 | since=c++11 | until=c++14 | 
template&lt; size_t I, class T1, class T2 &gt;
typename std::tuple_element&lt;I, std::pair&lt;T1,T2&gt; &gt;::type&amp;
    get( pair&lt;T1, T2&gt;&amp; p );
}}
{{dcl | num=1 | since=c++14 | 
template&lt; size_t I, class T1, class T2 &gt;
constexpr std::tuple_element_t&lt;I, std::pair&lt;T1,T2&gt; &gt;&amp;
    get( pair&lt;T1, T2&gt;&amp; p );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | num=2 | since=c++11 | until=c++14 | 
template&lt; size_t I, class T1, class T2 &gt;
const typename std::tuple_element&lt;I, std::pair&lt;T1,T2&gt; &gt;::type&amp;
    get( const pair&lt;T1,T2&gt;&amp; p );
}}
{{dcl | num=2 | since=c++14 | 
template&lt; size_t I, class T1, class T2 &gt;
constexpr const std::tuple_element_t&lt;I, std::pair&lt;T1,T2&gt; &gt;&amp;
    get( const pair&lt;T1,T2&gt;&amp; p );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | num=3 | since=c++11 | until=c++14 | 
template&lt; size_t I, class T1, class T2 &gt;
typename std::tuple_element&lt;I, std::pair&lt;T1,T2&gt; &gt;::type&amp;&amp;
    get( std::pair&lt;T1,T2&gt;&amp;&amp; p );
}}
{{dcl | num=3 | since=c++14 | 
template&lt; size_t I, class T1, class T2 &gt;
constexpr std::tuple_element_t&lt;I, std::pair&lt;T1,T2&gt; &gt;&amp;&amp;
    get( std::pair&lt;T1,T2&gt;&amp;&amp; p );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++17 | 
template&lt; size_t I, class T1, class T2 &gt;
constexpr const std::tuple_element_t&lt;I, std::pair&lt;T1,T2&gt; &gt;&amp;&amp;
    get( const std::pair&lt;T1,T2&gt;&amp;&amp; p );
}}

{{dcl | num=5 | since=c++14 | 
template &lt;class T, class U&gt;
constexpr T&amp; get(std::pair&lt;T, U&gt;&amp; p);
}}
{{dcl | num=6 | since=c++14 | 
template &lt;class T, class U&gt;
constexpr const T&amp; get(const std::pair&lt;T, U&gt;&amp; p);
}}
{{dcl | num=7 | since=c++14 | 
template &lt;class T, class U&gt;
constexpr T&amp;&amp; get(std::pair&lt;T, U&gt;&amp;&amp; p);
}}
{{dcl | num=8 | since=c++17 |
template &lt;class T, class U&gt;
constexpr const T&amp;&amp; get(const std::pair&lt;T, U&gt;&amp;&amp; p);
}}
{{dcl | num=9 | since=c++14 | 
template &lt;class T, class U&gt;
constexpr T&amp; get(std::pair&lt;U, T&gt;&amp; p);
}}
{{dcl | num=10 | since=c++14 | 
template &lt;class T, class U&gt;
constexpr const T&amp; get(const std::pair&lt;U, T&gt;&amp; p);
}}
{{dcl | num=11 | since=c++14 | 
template &lt;class T, class U&gt;
constexpr T&amp;&amp; get(std::pair&lt;U, T&gt;&amp;&amp; p);
}}
{{dcl | num=12 | since=c++17 |
template &lt;class T, class U&gt;
constexpr const T&amp;&amp; get(const std::pair&lt;U, T&gt;&amp;&amp; p);
}}
{{dcl end}}

Extracts an element from the pair using tuple-like interface.

The index-based overloads {{v|1-4}} fail to compile if the index {{tt|I}} is neither 0 nor 1.

The type-based overloads {{v|5-12}} fail to compile if the types {{tt|T}} and {{tt|U}} are the same.

===Parameters===
{{par begin}}
{{par | p | pair whose contents to extract}}
{{par end}} 

===Return value===

@1-4@ Returns a reference to {{tt|p.first}} if {{tt|1=I==0}} and a reference to {{tt|p.second}} if {{tt|1=I==1}}.
@5-8@ Returns a reference to {{tt|p.first}}.
@9-12@ Returns a reference to {{tt|p.second}}.

===Exceptions===

{{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;

int main()
{
    auto p = std::make_pair(1, 3.14);
    std::cout &lt;&lt; '(' &lt;&lt; std::get&lt;0&gt;(p) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;1&gt;(p) &lt;&lt; &quot;)\n&quot;;
    std::cout &lt;&lt; '(' &lt;&lt; std::get&lt;int&gt;(p) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;double&gt;(p) &lt;&lt; &quot;)\n&quot;;
}
 | output=
(1, 3.14)
(1, 3.14)
}}


===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc get}}
{{dsc inc | cpp/container/array/dsc get}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc end}}

[[de:cpp/utility/pair/get]]
[[es:cpp/utility/pair/get]]
[[fr:cpp/utility/pair/get]]
[[it:cpp/utility/pair/get]]
[[ja:cpp/utility/pair/get]]
[[pt:cpp/utility/pair/get]]
[[ru:cpp/utility/pair/get]]
[[zh:cpp/utility/pair/get]]</text>
      <sha1>ippskm6s820x1ech78uowls40xfeqk7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/make pair</title>
    <ns>0</ns>
    <id>2360</id>
    <revision>
      <id>87702</id>
      <parentid>87701</parentid>
      <timestamp>2016-09-26T19:26:21Z</timestamp>
      <contributor>
        <ip>198.182.60.251</ip>
      </contributor>
      <comment>Undo revision 87701 by [[Special:Contributions/198.182.60.251|198.182.60.251]] ([[User talk:198.182.60.251|talk]])</comment>
      <text xml:space="preserve" bytes="2040">{{cpp/title|make_pair}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl rev begin}}
{{dcl | until=c++11 |
template&lt; class T1, class T2 &gt;
std::pair&lt;T1,T2&gt; make_pair( T1 t, T2 u );
}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T1, class T2 &gt;
std::pair&lt;V1,V2&gt; make_pair( T1&amp;&amp; t, T2&amp;&amp; u );
}}
{{dcl | since=c++14 |
template&lt; class T1, class T2 &gt;
constexpr std::pair&lt;V1,V2&gt; make_pair( T1&amp;&amp; t, T2&amp;&amp; u );
}}
{{dcl rev end}}
{{dcl end}}

Creates a {{lc|std::pair}} object, deducing the target type from the types of arguments.

{{rev begin}}
{{rev | since=c++11 |
The deduced types {{tt|V1}} and {{tt|V2}} are {{c|std::decay&lt;T1&gt;::type}} and {{c|std::decay&lt;T2&gt;::type}} (the usual type transformations applied to arguments of functions passed by value) unless application of {{lc|std::decay}} results in {{c|std::reference_wrapper&lt;X&gt;}} for some type {{tt|X}}, in which case the deduced type is {{tt|X&amp;}}.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | t, u | the values to construct the pair from}}
{{par end}}

===Return value===
An {{lc|std::pair}} object containing the given values.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;functional&gt;

int main()
{
    int n = 1;
    int a[5] = {1, 2, 3, 4, 5};

    // build a pair from two ints
    auto p1 = std::make_pair(n, a[1]);
    std::cout &lt;&lt; &quot;The value of p1 is &quot;
              &lt;&lt; &quot;(&quot; &lt;&lt; p1.first &lt;&lt; &quot;, &quot; &lt;&lt; p1.second &lt;&lt; &quot;)\n&quot;;

    // build a pair from a reference to int and an array (decayed to pointer)
    auto p2 = std::make_pair(std::ref(n), a);
    n = 7;
    std::cout &lt;&lt; &quot;The value of p2 is &quot;
              &lt;&lt; &quot;(&quot; &lt;&lt; p2.first &lt;&lt; &quot;, &quot; &lt;&lt; *(p2.second + 2) &lt;&lt; &quot;)\n&quot;;
}
 | output=
The value of p1 is (1, 2)
The value of p2 is (7, 3)
}}

[[de:cpp/utility/pair/make pair]]
[[es:cpp/utility/pair/make pair]]
[[fr:cpp/utility/pair/make pair]]
[[it:cpp/utility/pair/make pair]]
[[ja:cpp/utility/pair/make pair]]
[[pt:cpp/utility/pair/make pair]]
[[ru:cpp/utility/pair/make pair]]
[[zh:cpp/utility/pair/make pair]]</text>
      <sha1>et1llgu8cm7yifud2tjf8o3acuplmpo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/operator cmp</title>
    <ns>0</ns>
    <id>2599</id>
    <revision>
      <id>69172</id>
      <parentid>64500</parentid>
      <timestamp>2014-03-28T18:29:04Z</timestamp>
      <contributor>
        <username>Pchriste</username>
        <id>2961</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3826">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::pair&lt;/small&gt;)}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl rev begin}}
{{dcl | num=1 | until=c++14 | 1=
template&lt; class T1, class T2 &gt;
bool operator==( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl | num=1 | since=c++14 | 1=
template&lt; class T1, class T2 &gt;
constexpr bool operator==( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=2 | until=c++14 | 1=
template&lt; class T1, class T2 &gt;
bool operator!=( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl | num=2 | since=c++14 | 1=
template&lt; class T1, class T2 &gt;
constexpr bool operator!=( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=3 | until=c++14 | 1=
template&lt; class T1, class T2 &gt;
bool operator&lt;( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl | num=3 | since=c++14 | 1=
template&lt; class T1, class T2 &gt;
constexpr bool operator&lt;( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=4 | until=c++14 | 1=
template&lt; class T1, class T2 &gt;
bool operator&lt;=( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl | num=4 | since=c++14 | 1=
template&lt; class T1, class T2 &gt;
constexpr bool operator&lt;=( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=5 | until=c++14 | 1=
template&lt; class T1, class T2 &gt;
bool operator&gt;( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl | num=5 | since=c++14 | 1=
template&lt; class T1, class T2 &gt;
constexpr bool operator&gt;( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=6 | until=c++14 | 1=
template&lt; class T1, class T2 &gt;
bool operator&gt;=( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl | num=6 | since=c++14 | 1=
template&lt; class T1, class T2 &gt;
constexpr bool operator&gt;=( const pair&lt;T1,T2&gt;&amp; lhs, const pair&lt;T1,T2&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl end}}

@1-2@ Tests if both elements of lhs and rhs are equal, that is, compares {{tt|lhs.first}} with {{tt|rhs.first}} and {{tt|lhs.second}} with {{tt|rhs.second}}
@3-6@ Compares {{tt|lhs}} and {{tt|rhs}} lexicographically, that is, compares the first elements and only if they are equivalent, compares the second elements.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pairs to compare }}
{{par end}} 

===Return value===

1) {{c|true}} if both {{tt|1=lhs.first == rhs.first}} and {{tt|1=lhs.second == rhs.second}}, otherwise {{c|false}}

2) {{c|true}} if either {{tt|1=lhs.first != rhs.first}} or {{tt|1=lhs.second != rhs.second}}, otherwise {{c|false}}

3) If {{tt|lhs.first&lt;rhs.first}}, returns {{c|true}}. Otherwise, if {{tt|rhs.first&lt;lhs.first}}, returns {{c|false}}. Otherwise, if {{tt|lhs.second&lt;rhs.second}}, returns {{c|true}}. Otherwise, returns {{c|false}}.

4) {{tt|!(rhs &lt; lhs)}}

5) {{tt|rhs &lt; lhs}}

6) {{tt|!(lhs &lt; rhs)}}

===Example===
{{example
 | Because operator&lt; is defined for pairs, containers of pairs can be sorted.
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;string&gt;

int main()
{
    std::vector&lt;std::pair&lt;int, std::string&gt;&gt; v = { {2, &quot;baz&quot;},
                                                   {2, &quot;bar&quot;},
                                                   {1, &quot;foo&quot;} };
    std::sort(v.begin(), v.end());

    for(auto p: v) {
        std::cout &lt;&lt; &quot;(&quot; &lt;&lt; p.first &lt;&lt; &quot;,&quot; &lt;&lt; p.second &lt;&lt; &quot;)\n&quot;;
    }
}
 | output=
(1,foo)
(2,bar)
(2,baz)
}}

[[de:cpp/utility/pair/operator cmp]]
[[es:cpp/utility/pair/operator cmp]]
[[fr:cpp/utility/pair/operator cmp]]
[[it:cpp/utility/pair/operator cmp]]
[[ja:cpp/utility/pair/operator cmp]]
[[pt:cpp/utility/pair/operator cmp]]
[[ru:cpp/utility/pair/operator cmp]]
[[zh:cpp/utility/pair/operator cmp]]</text>
      <sha1>gqs8rlknp5p6fhnp9ht9v0l9khmdkd8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/operator comp</title>
    <ns>0</ns>
    <id>4217</id>
    <redirect title="cpp/utility/pair/operator cmp" />
    <revision>
      <id>15278</id>
      <timestamp>2011-12-08T01:22:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/pair/operator comp]] to [[cpp/utility/pair/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/pair/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/operator=</title>
    <ns>0</ns>
    <id>2596</id>
    <revision>
      <id>91764</id>
      <parentid>89104</parentid>
      <timestamp>2017-03-31T19:57:19Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3116">{{cpp/utility/pair/title | operator{{=}}}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl | num=1 | 1=
pair&amp; operator=( const pair&amp; other );
}}
{{dcl | num=2 | 1=
template&lt; class U1, class U2 &gt;
pair&amp; operator=( const pair&lt;U1,U2&gt;&amp; other );
}}
{{dcl | num=3 | since=c++11 | 1=
pair&amp; operator=( pair&amp;&amp; other );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class U1, class U2 &gt;
pair&amp; operator=( pair&lt;U1,U2&gt;&amp;&amp; other );
}}
{{dcl end}}

Replaces the contents of the pair.

@1@ Copy assignment operator. Replaces the contents with a copy of the contents of other.
 
@2@ Assigns {{tt|other.first}} to {{tt|first}} and {{tt|other.second}} to {{tt|second}}

@3@ Move assignment operator. Replaces the contents with those of {{tt|other}} using move semantics. 

@4@ Assigns {{c|std::forward&lt;U1&gt;(p.first)}} to {{tt|first}} and {{c|std::forward&lt;U2&gt;(p.second)}} to {{tt|second}}. 

{{rev begin}}
{{rev | until=c++17 |
The behavior of these functions is undefined unless:
* For {{v|1}},{{c|std::is_copy_assignable&lt;first_type&gt;::value}} and {{c|std::is_copy_assignable&lt;second_type&gt;::value}} are both {{c|true}}.
* For {{v|2}},{{c|std::is_assignable&lt;first_type&amp;, const U1&amp;&gt;::value}} and {{c|std::is_assignable&lt;second_type&amp;, const U2&amp;&gt;::value}} are both {{c|true}}.
* For {{v|3}},{{c|std::is_move_assignable&lt;first_type&gt;::value}} and {{c|std::is_move_assignable&lt;second_type&gt;::value}} are both {{c|true}}.
* For {{v|4}},{{c|std::is_assignable&lt;first_type&amp;, U1&amp;&amp;&gt;::value}} and {{c|std::is_assignable&lt;second_type&amp;, U2&amp;&amp;&gt;::value}} are both {{c|true}}.
}}
{{rev | since=c++17 |
These functions do not participate in overload resolution (or, for the copy assignment operator, is defined as deleted) if any required assignment operation is invalid. Specifically:
* {{v|1}} is defined as deleted unless {{c|std::is_copy_assignable_v&lt;first_type&gt;}} and {{c|std::is_copy_assignable_v&lt;second_type&gt;}} are both {{c|true}}.
* {{v|2}} does not participate in overload resolution unless {{c|std::is_assignable_v&lt;first_type&amp;, const U1&amp;&gt;}} and {{c|std::is_assignable_v&lt;second_type&amp;, const U2&amp;&gt;}} are both {{c|true}}.
* {{v|3}} does not participate in overload resolution unless {{c|std::is_move_assignable_v&lt;first_type&gt;}} and {{c|std::is_move_assignable_v&lt;second_type&gt;}} are both {{c|true}}.
* {{v|4}} does not participate in overload resolution unless {{c|std::is_assignable_v&lt;first_type&amp;, U1&amp;&amp;&gt;}} and {{c|std::is_assignable_v&lt;second_type&amp;, U2&amp;&amp;&gt;}} are both {{c|true}}.
}}
{{rev end}}
===Parameters===
{{par begin}}
{{par | other | pair of values to replace the contents of this pair }}
{{par end}} 

===Return value===
{{c|*this}}

===Exceptions===
@1-2@ (none)

@3@{{unreviewed noexcept|
    is_nothrow_move_assignable&lt;T1&gt;::value &amp;&amp;
    is_nothrow_move_assignable&lt;T2&gt;::value
}}

@4@ (none)

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc end}}

[[de:cpp/utility/pair/operator=]]
[[es:cpp/utility/pair/operator=]]
[[fr:cpp/utility/pair/operator=]]
[[it:cpp/utility/pair/operator=]]
[[ja:cpp/utility/pair/operator=]]
[[pt:cpp/utility/pair/operator=]]
[[ru:cpp/utility/pair/operator=]]
[[zh:cpp/utility/pair/operator=]]</text>
      <sha1>kwo021aoo6dnexa1mzuw8c3ip2ncvv2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/pair</title>
    <ns>0</ns>
    <id>2594</id>
    <revision>
      <id>88366</id>
      <parentid>88365</parentid>
      <timestamp>2016-11-17T05:20:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Looks like we forgot to &quot;improve&quot; pair</comment>
      <text xml:space="preserve" bytes="7225">{{cpp/utility/pair/title | pair}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl rev begin | num=1}}
{{dcl | until=c++11 |
pair();
}}
{{dcl | since=c++11 | until = c++17 |
constexpr pair();
}}
{{dcl | since=c++17 |
/*EXPLICIT*/ constexpr pair();
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | until=c++14 | 1=
pair( const T1&amp; x, const T2&amp; y );
}}
{{dcl | since=c++14 | until=c++17 | 1=
constexpr pair( const T1&amp; x, const T2&amp; y );
}}
{{dcl | since=c++17 | 1=
/*EXPLICIT*/ constexpr pair( const T1&amp; x, const T2&amp; y );
}}
{{dcl rev end}}
{{dcl rev begin | num=3}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class U1, class U2 &gt;
pair( U1&amp;&amp; x, U2&amp;&amp; y );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template&lt; class U1, class U2 &gt;
constexpr pair( U1&amp;&amp; x, U2&amp;&amp; y );
}}
{{dcl | since=c++17 | 1=
template&lt; class U1, class U2 &gt;
/*EXPLICIT*/ constexpr pair( U1&amp;&amp; x, U2&amp;&amp; y );
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | until=c++14 | 1=
template&lt; class U1, class U2 &gt;
pair( const pair&lt;U1, U2&gt;&amp; p );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template&lt; class U1, class U2 &gt;
constexpr pair( const pair&lt;U1, U2&gt;&amp; p );
}}
{{dcl | since=c++17 | 1=
template&lt; class U1, class U2 &gt;
/*EXPLICIT*/ constexpr pair( const pair&lt;U1, U2&gt;&amp; p );
}}
{{dcl rev end}}
{{dcl rev begin|num=5}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class U1, class U2 &gt;
pair( pair&lt;U1, U2&gt;&amp;&amp; p );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template&lt; class U1, class U2 &gt;
constexpr pair( pair&lt;U1, U2&gt;&amp;&amp; p );
}}
{{dcl | since=c++17 | 1=
template&lt; class U1, class U2 &gt;
/*EXPLICIT*/ constexpr pair( pair&lt;U1, U2&gt;&amp;&amp; p );
}}
{{dcl rev end}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class... Args1, class... Args2 &gt;
pair( std::piecewise_construct_t,
      std::tuple&lt;Args1...&gt; first_args,
      std::tuple&lt;Args2...&gt; second_args );
}}
{{dcl | num=7 | 1= 
pair( const pair&amp; p ) = default;
}}
{{dcl | num=8 | since=c++11 | 1= 
pair( pair&amp;&amp; p ) = default;
}}
{{dcl end}}


Constructs a new pair.

1) Default constructor. Value-initializes both elements of the pair, {{tt|first}} and {{tt|second}}.
{{rev begin}}
{{rev|since=c++17|
* This constructor participates in overload resolution if and only if {{c|std::is_default_constructible_v&lt;first_type&gt;}} and {{c|std::is_default_constructible_v&lt;second_type&gt;}} are both {{c|true}}. 
* This constructor is {{c|explicit}} if and only if either {{tt|first_type}} or {{tt|second_type}} is not implicitly default-constructible.}}
{{rev end}}
2) Initializes {{tt|first}} with {{tt|x}} and {{tt|second}} with {{tt|y}}. 
{{rev begin}}
{{rev|since=c++17|
* This constructor participates in overload resolution if and only if {{c|std::is_copy_constructible_v&lt;first_type&gt;}} and {{c|std::is_copy_constructible_v&lt;second_type&gt;}} are both {{c|true}}. 
* This constructor is {{c|explicit}} if and only if {{c|std::is_convertible_v&lt;const first_type&amp;, first_type&gt;}} is {{c|false}} or {{c|std::is_convertible_v&lt;const second_type&amp;, second_type&gt;}} is {{c|false}}.}}
{{rev end}}
3) Initializes {{tt|first}} with {{c|std::forward&lt;U1&gt;(x)}} and {{tt|second}} with {{c|std::forward&lt;U2&gt;(y)}}. 
{{rev begin}}
{{rev|until=c++17|
* This constructor participates in overload resolution only if {{tt|U1}} is implicitly convertible to {{tt|first_type}} and {{tt|U2}} is implicitly convertible to {{tt|second_type}}.}}
{{rev|since=c++17|
* This constructor participates in overload resolution if and only if  {{c|std::is_constructible_v&lt;first_type, U1&amp;&amp;&gt;}} and {{c|std::is_constructible_v&lt;second_type, U2&amp;&amp;&gt;}} are both {{c|true}}.
* This constructor is {{c|explicit}} if and only if {{c|std::is_convertible_v&lt;U1&amp;&amp;, first_type&gt;}} is {{c|false}} or {{c|std::is_convertible_v&lt;U2&amp;&amp;, second_type&gt;}} is {{c|false}}.}}
{{rev end}}

4) Initializes {{tt|first}} with {{tt|p.first}} and {{tt|second}} with {{tt|p.second}}. 
{{rev begin}}
{{rev|since=c++17|
* This constructor participates in overload resolution if and only if  {{c|std::is_constructible_v&lt;first_type, const U1&amp;&gt;}} and {{c|std::is_constructible_v&lt;second_type, const U2&amp;&gt;}} are both {{c|true}}. 
* This constructor is {{c|explicit}} if and only if {{c|std::is_convertible_v&lt;const U1&amp;, first_type&gt;}} is {{c|false}} or {{c|std::is_convertible_v&lt;const U2&amp;, second_type&gt;}} is {{c|false}}.}}
{{rev end}}

5) Initializes {{tt|first}} with {{c|std::forward&lt;U1&gt;(p.first)}} and {{tt|second}} with {{c|std::forward&lt;U2&gt;(p.second)}}.
{{rev begin}}
{{rev|since=c++17|
* This constructor participates in overload resolution if and only if  {{c|std::is_constructible_v&lt;first_type, U1&amp;&amp;&gt;}} and {{c|std::is_constructible_v&lt;second_type, U2&amp;&amp;&gt;}} are both {{c|true}}. 
* This constructor is {{c|explicit}} if and only if {{c|std::is_convertible_v&lt;U1&amp;&amp;, first_type&gt;}} is {{c|false}} or {{c|std::is_convertible_v&lt;U2&amp;&amp;, second_type&gt;}} is {{c|false}}.}}
{{rev end}}

6) Forwards the elements of {{tt|first_args}} to the constructor of {{tt|first}} and forwards the elements of {{tt|second_args}} to the constructor of {{tt|second}}. This is the only non-default constructor that can be used to create a pair of non-copyable non-movable types.

7) Copy constructor is defaulted, and is {{c|constexpr}} if copying of both elements satisfies the requirements on constexpr functions.

8) Move constructor is defaulted, and is {{c|constexpr}} if moving of both elements satisfies the requirements on constexpr functions.

===Parameters===

{{par begin}}
{{par | x | value to initialize the first element of this pair }}
{{par | y | value to initialize the second element of this pair }}
{{par | p | pair of values used to initialize both elements of this pair}}
{{par | first_args | tuple of constructor arguments to initialize the first element of this pair}}
{{par | second_args | tuple of constructor arguments to initialize the second element of this pair}}
{{par end}} 

===Exceptions===
Does not throw exceptions unless one of the specified operations (e.g. constructor of an element) throws.

===Example===
{{example
 | code=
#include &lt;utility&gt;
#include &lt;string&gt;
#include &lt;complex&gt;
#include &lt;tuple&gt;
#include &lt;iostream&gt;

int main()
{
    std::pair&lt;int, float&gt; p1;
    std::cout &lt;&lt; &quot;Value-initialized: &quot;
              &lt;&lt; p1.first &lt;&lt; &quot;, &quot; &lt;&lt; p1.second &lt;&lt; '\n';

    std::pair&lt;int, double&gt; p2(42, 0.123);
    std::cout &lt;&lt; &quot;Initialized with two values: &quot;
              &lt;&lt; p2.first &lt;&lt; &quot;, &quot; &lt;&lt; p2.second &lt;&lt; '\n';

    std::pair&lt;char, int&gt; p4(p2);
    std::cout &lt;&lt; &quot;Implicitly converted: &quot;
              &lt;&lt; p4.first &lt;&lt; &quot;, &quot; &lt;&lt; p4.second &lt;&lt; '\n';

    std::pair&lt;std::complex&lt;double&gt;, std::string&gt; p6(
                    std::piecewise_construct, 
                    std::forward_as_tuple(0.123, 7.7),
                    std::forward_as_tuple(10, 'a'));
    std::cout &lt;&lt; &quot;Piecewise constructed: &quot;
              &lt;&lt; p6.first &lt;&lt; &quot;, &quot; &lt;&lt; p6.second &lt;&lt; '\n';
}
 | output=
Value-initialized: 0, 0
Initialized with two values: 42, 0.123
Implicitly converted: *, 0
Piecewise constructed: (0.123,7.7), aaaaaaaaaa
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/pair/dsc make_pair}}
{{dsc end}}

[[de:cpp/utility/pair/pair]]
[[es:cpp/utility/pair/pair]]
[[fr:cpp/utility/pair/pair]]
[[it:cpp/utility/pair/pair]]
[[ja:cpp/utility/pair/pair]]
[[pt:cpp/utility/pair/pair]]
[[ru:cpp/utility/pair/pair]]
[[zh:cpp/utility/pair/pair]]</text>
      <sha1>hm0rx4qx73ir6502sqg6pzbdgzhtb5b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/std swap</title>
    <ns>0</ns>
    <id>3455</id>
    <redirect title="cpp/utility/pair/swap2" />
    <revision>
      <id>12996</id>
      <timestamp>2011-11-03T18:33:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/pair/std swap]] to [[cpp/utility/pair/swap2]]: std_ prefix was not consistent, since there are a lot of different overloads in the std:: namespace, but we use std_ only for std::swap.</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/utility/pair/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/swap</title>
    <ns>0</ns>
    <id>2598</id>
    <revision>
      <id>91849</id>
      <parentid>83917</parentid>
      <timestamp>2017-03-31T19:59:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1456">{{cpp/utility/pair/title | swap}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl | since=c++11 | 1=
void swap(pair&amp; other);
}}
{{dcl end}}

Swaps {{tt|first}} with {{tt|other.first}} and {{tt|second}} with {{tt|other.second}}.

{{rev begin}}
{{rev|since=c++17|
This function does not participate in overload resolution unless {{c|std::is_swappable_v&lt;first_type&gt; &amp;&amp; std::is_swappable_v&lt;second_type&gt;}}
}}
{{rev end}}
===Parameters===
{{par begin}}
{{par | other | pair of values to swap }}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev|until=c++17|
{{unreviewed noexcept|
     noexcept(std::swap(first, other.first)) &amp;&amp;
     noexcept(std::swap(second, other.second))
}}
}}
{{rev|since=c++17|
{{unreviewed noexcept|
     std::is_nothrow_swappable&lt;first_type&gt;::value) &amp;&amp;
     std::is_nothrow_swappable&lt;second_type&gt;::value)
}}
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;string&gt;
int main()
{
    std::pair&lt;int, std::string&gt; p1, p2;
    p1 = std::make_pair(10, &quot;test&quot;);
    p2.swap(p1);
    std::cout &lt;&lt; &quot;(&quot; &lt;&lt; p2.first &lt;&lt; &quot;, &quot; &lt;&lt; p2.second &lt;&lt; &quot;)\n&quot;;
}
 | output=
(10, test)
}}

===See also===
{{dsc begin}}
{{dsc inc|cpp/algorithm/dsc swap}}
{{dsc end}}

[[de:cpp/utility/pair/swap]]
[[es:cpp/utility/pair/swap]]
[[fr:cpp/utility/pair/swap]]
[[it:cpp/utility/pair/swap]]
[[ja:cpp/utility/pair/swap]]
[[pt:cpp/utility/pair/swap]]
[[ru:cpp/utility/pair/swap]]
[[zh:cpp/utility/pair/swap]]</text>
      <sha1>5wjhgu887nuilul38bjc435dalo5l07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/swap2</title>
    <ns>0</ns>
    <id>2600</id>
    <revision>
      <id>91775</id>
      <parentid>72093</parentid>
      <timestamp>2017-03-31T19:57:39Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="788">{{cpp/title | swap&lt;small&gt;(std::pair)&lt;/small&gt;}}
{{cpp/utility/pair/navbar}}
{{ddcl | header=utility | since=c++11 |
template&lt; class T1, class T2 &gt;
void swap( pair&lt;T1,T2&gt;&amp; lhs, pair&lt;T1,T2&gt;&amp; rhs );
}}

Swaps the contents of {{tt|lhs}} and {{tt|rhs}}. Equivalent to {{c|lhs.swap(rhs)}}.

===Parameters===
{{par begin}}
{{par | lhs, rhs | pairs whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept|noexcept(lhs.swap(rhs))}}

===See also===
{{dsc begin}}
{{dsc inc|cpp/algorithm/dsc swap}}
{{dsc end}}

[[de:cpp/utility/pair/swap2]]
[[es:cpp/utility/pair/swap2]]
[[fr:cpp/utility/pair/swap2]]
[[it:cpp/utility/pair/swap2]]
[[ja:cpp/utility/pair/swap2]]
[[pt:cpp/utility/pair/swap2]]
[[ru:cpp/utility/pair/swap2]]
[[zh:cpp/utility/pair/swap2]]</text>
      <sha1>ag7ioyz8iavclo68cdbkglfmq8g9n1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/tuple element</title>
    <ns>0</ns>
    <id>2622</id>
    <revision>
      <id>63113</id>
      <parentid>61774</parentid>
      <timestamp>2013-07-01T23:55:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="2062">{{cpp/title|tuple_element&lt;small&gt;&lt;std::pair&gt;&lt;/small&gt;}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl | since=c++11 | num = 1 |
template&lt; class T1, class T2 &gt;
struct tuple_element&lt;0, std::pair&lt;T1,T2&gt; &gt;;
}}
{{dcl | since=c++11 | num = 2 |
template&lt; class T1, class T2 &gt;
struct tuple_element&lt;1, std::pair&lt;T1,T2&gt; &gt;;
}}
{{dcl end}}

The partial specializations of {{c|std::tuple_element}} for pairs provide compile-time access to the types of the pair's elements, using tuple-like syntax.

===Member types===
{{dsc begin}}
{{dsc h2 | First version}}
{{dsc hitem | Member type | Definition}}
{{dsc | &lt;code&gt;type&lt;/code&gt; | &lt;code&gt;T1&lt;/code&gt;}}
{{dsc h2 | Second version}}
{{dsc hitem | Member type | Definition}}
{{dsc | &lt;code&gt;type&lt;/code&gt; | &lt;code&gt;T2&lt;/code&gt;}}
{{dsc end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt;std::size_t I, typename T&gt;
  struct tuple_element;

template&lt;typename T1, typename T2&gt;
  struct tuple_element&lt;0, std::pair&lt;T1,T2&gt; &gt;
  {
     using type = T1;
  };

template&lt;typename T1, typename T2&gt;
  struct tuple_element&lt;1, std::pair&lt;T1,T2&gt; &gt;
  {
     using type = T2;
  };

}}

===Example===
{{example |
 | code=
#include &lt;tuple&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

template &lt;int N, typename T, typename U&gt;
static auto constexpr get(std::pair&lt;T, U&gt; const&amp; pair)
    -&gt; typename std::tuple_element&lt;N, decltype(pair)&gt;::type
{
    return N == 0 ? pair.first : pair.second;
}

int main()
{
    auto var = std::make_pair(1, std::string{&quot;one&quot;});
    
    std::cout &lt;&lt; get&lt;0&gt;(var) &lt;&lt; &quot; = &quot; &lt;&lt; get&lt;1&gt;(var);
}
 | output= 1 = one
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc tuple_element}}
{{dsc inc | cpp/container/array/dsc tuple_element}}
{{dsc inc | cpp/utility/pair/dsc tuple_size}}
{{dsc end}}

[[de:cpp/utility/pair/tuple element]]
[[es:cpp/utility/pair/tuple element]]
[[fr:cpp/utility/pair/tuple element]]
[[it:cpp/utility/pair/tuple element]]
[[ja:cpp/utility/pair/tuple element]]
[[pt:cpp/utility/pair/tuple element]]
[[ru:cpp/utility/pair/tuple element]]
[[zh:cpp/utility/pair/tuple element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/pair/tuple size</title>
    <ns>0</ns>
    <id>2621</id>
    <revision>
      <id>68201</id>
      <parentid>68200</parentid>
      <timestamp>2014-03-18T03:13:26Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>+inherit template to reflect (almost) current standing</comment>
      <text xml:space="preserve" bytes="1512">{{cpp/title|tuple_size&lt;small&gt;&lt;std::pair&gt;&lt;/small&gt;}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl header|utility}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class T1, class T2 &gt;
struct tuple_size&lt;std::pair&lt;T1, T2&gt;&gt;; 
}}
{{dcl | since=c++14 |
template &lt;class T1, class T2&gt;
struct tuple_size&lt;std::pair&lt;T1, T2&gt;&gt;
  : std::integral_constant&lt;std::size_t, 2&gt; { };
}}
{{dcl rev end}}
{{dcl end}}


The partial specialization of {{c|std::tuple_size}} for pairs provides a compile-time way to obtain the number of elements in a pair, which is always 2, using tuple-like syntax.

{{cpp/types/integral_constant/inherit2 |the constant value 2 |std::size_t}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;tuple&gt;

template&lt;class T&gt;
void test(T t)
{
    int a[std::tuple_size&lt;T&gt;::value]; // can be used at compile time
    std::cout &lt;&lt; std::tuple_size&lt;T&gt;::value &lt;&lt; '\n'; // or at run time
}

int main()
{
    test(std::make_tuple(1, 2, 3.14));
    test(std::make_pair(1, 3.14));
}
 | output=
3
2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc tuple_size}}
{{dsc inc | cpp/container/array/dsc tuple_size}}
{{dsc inc | cpp/utility/pair/dsc tuple_element}}
{{dsc end}}

[[de:cpp/utility/pair/tuple size]]
[[es:cpp/utility/pair/tuple size]]
[[fr:cpp/utility/pair/tuple size]]
[[it:cpp/utility/pair/tuple size]]
[[ja:cpp/utility/pair/tuple size]]
[[pt:cpp/utility/pair/tuple size]]
[[ru:cpp/utility/pair/tuple size]]
[[zh:cpp/utility/pair/tuple size]]</text>
      <sha1>ausft101d1ii1z9tisj3bn3b6vv3j2q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/piecewise construct</title>
    <ns>0</ns>
    <id>2623</id>
    <revision>
      <id>90935</id>
      <parentid>90934</parentid>
      <timestamp>2017-03-14T12:46:32Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>two lines</comment>
      <text xml:space="preserve" bytes="996">{{cpp/title|piecewise_construct}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl rev multi | since1=c++11 | dcl1=
constexpr piecewise_construct_t piecewise_construct
    = std::piecewise_construct_t();
|since2=c++17 | dcl2=
inline constexpr piecewise_construct_t piecewise_construct
    = std::piecewise_construct_t();
}}
{{dcl end}}

The constant {{lc|std::piecewise_construct}} is an instance of an empty struct tag type {{lc|std::piecewise_construct_t}}.

===Example===
{{include| cpp/utility/example_piecewise_construct}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc piecewise_construct_t}}
{{dsc mem ctor | cpp/utility/pair/pair | constructs new pair}}
{{dsc end}}

[[de:cpp/utility/piecewise construct]]
[[es:cpp/utility/piecewise construct]]
[[fr:cpp/utility/piecewise construct]]
[[it:cpp/utility/piecewise construct]]
[[ja:cpp/utility/piecewise construct]]
[[pt:cpp/utility/piecewise construct]]
[[ru:cpp/utility/piecewise construct]]
[[zh:cpp/utility/piecewise construct]]</text>
      <sha1>88zqu13e05od832jbs9l3l5dun757wt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/piecewise construct t</title>
    <ns>0</ns>
    <id>2654</id>
    <revision>
      <id>88364</id>
      <parentid>63516</parentid>
      <timestamp>2016-11-17T05:02:31Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2510</comment>
      <text xml:space="preserve" bytes="1311">{{cpp/title|piecewise_construct_t}}
{{cpp/utility/pair/navbar}}
{{dcl begin}}
{{dcl header|utility}}
{{dcl | since=c++11 | until=c++17 |
struct piecewise_construct_t { };
}}
{{dcl | since=c++17 | 1=
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
}}
{{dcl end}}

{{lc|std::piecewise_construct_t}} is an empty struct tag type used to disambiguate between different functions that take two tuple arguments.

The overloads that do not use {{lc|std::piecewise_construct_t}} assume that each tuple argument becomes the element of a pair. The overloads that use {{lc|std::piecewise_construct_t}} assume that each tuple argument is used to construct, piecewise, a new object of specified type, which will become the element of the pair.

===Example===
{{include| cpp/utility/example_piecewise_construct}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc piecewise_construct}}
{{dsc mem ctor | cpp/utility/pair/pair | constructs new pair}}
{{dsc end}}

[[de:cpp/utility/piecewise construct t]]
[[es:cpp/utility/piecewise construct t]]
[[fr:cpp/utility/piecewise construct t]]
[[it:cpp/utility/piecewise construct t]]
[[ja:cpp/utility/piecewise construct t]]
[[pt:cpp/utility/piecewise construct t]]
[[ru:cpp/utility/piecewise construct t]]
[[zh:cpp/utility/piecewise construct t]]</text>
      <sha1>maqiy7mpyxb0fz2516zpnxk0a9clxdm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program</title>
    <ns>0</ns>
    <id>1784</id>
    <revision>
      <id>71000</id>
      <parentid>70984</parentid>
      <timestamp>2014-06-04T18:42:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>name the new see-also</comment>
      <text xml:space="preserve" bytes="1801">{{title|Program support utilities}}
{{cpp/utility/program/navbar}}
===Program termination===

The following functions manage program termination and resource cleanup.

{{dsc begin}}
{{dsc header | cstdlib}}
{{dsc inc | cpp/utility/program/dsc abort}}
{{dsc inc | cpp/utility/program/dsc exit}}
{{dsc inc | cpp/utility/program/dsc quick_exit}}
{{dsc inc | cpp/utility/program/dsc _Exit}}
{{dsc inc | cpp/utility/program/dsc atexit}}
{{dsc inc | cpp/utility/program/dsc at_quick_exit}}
{{dsc inc | cpp/utility/program/dsc EXIT_status}}
{{dsc end}}

===Communicating with the environment===

{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc system}}
{{dsc inc | cpp/utility/program/dsc getenv}}
{{dsc end}}

===Signals===

Several functions and macro constants for signal management are provided.

{{dsc begin}}
{{dsc header | csignal}}
{{dsc inc | cpp/utility/program/dsc signal}}
{{dsc inc | cpp/utility/program/dsc raise}}
{{dsc typedef | cpp/utility/program/sig_atomic_t | the integer type that can be accessed as an atomic entity from an asynchronous signal handler}}
{{dsc inc | cpp/utility/program/dsc SIG_strategies}}
{{dsc inc | cpp/utility/program/dsc SIG_ERR}}

{{dsc h2 | Signal types}}
{{dsc inc | cpp/utility/program/dsc SIG_types}}
{{dsc end}}

===Non-local jumps===

{{dsc begin}}
{{dsc header | csetjmp}}
{{dsc inc | cpp/utility/program/dsc setjmp}}
{{dsc inc | cpp/utility/program/dsc longjmp}}

{{dsc h2 | Types}}
{{dsc inc | cpp/utility/program/dsc jmp_buf}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/program | Program support utilities}}
{{dsc end}}

[[de:cpp/utility/program]]
[[es:cpp/utility/program]]
[[fr:cpp/utility/program]]
[[it:cpp/utility/program]]
[[ja:cpp/utility/program]]
[[pt:cpp/utility/program]]
[[ru:cpp/utility/program]]
[[zh:cpp/utility/program]]</text>
      <sha1>n3z0fdfavmsxv8tibw70w45skig2ewp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/ Exit</title>
    <ns>0</ns>
    <id>1967</id>
    <revision>
      <id>91635</id>
      <parentid>85898</parentid>
      <timestamp>2017-03-31T19:52:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2270">{{cpp/title| _Exit}}
{{cpp/utility/program/navbar}}
{{ddcl | header=cstdlib | since=c++11 |
[[noreturn]] void _Exit( int exit_code );
}}

Causes normal program termination to occur without completely cleaning the resources.

Destructors of variables with automatic, thread local and static storage durations are not called. Functions passed to {{lc|std::at_quick_exit()}} or {{lc|std::atexit()}} are not called. Whether open resources such as files are closed is implementation defined. 

If {{tt|exit_code}} is {{lc|0}} or {{lc|EXIT_SUCCESS}}, an implementation-defined status indicating successful termination is returned to the host environment. If {{tt|exit_code}} is {{lc|EXIT_FAILURE}}, an implementation-defined status, indicating ''unsuccessful'' termination, is returned. In other cases implementation-defined status value is returned. 

===Parameters===
{{par begin}}
{{par | exit_code | exit status of the program}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;

class Static {
public:
    ~Static() 
    {
        std::cout &lt;&lt; &quot;Static dtor\n&quot;;
    }
};

class Local {
public:
    ~Local() 
    {
        std::cout &lt;&lt; &quot;Local dtor\n&quot;;
    }
};

Static static_variable; // dtor of this object will *not* be called

void atexit_handler()
{
    std::cout &lt;&lt; &quot;atexit handler\n&quot;;
}

int main()
{
    Local local_variable; // dtor of this object will *not* be called
    
    // handler will *not* be called
    const int result = std::atexit(atexit_handler);

    if (result != 0) {
        std::cerr &lt;&lt; &quot;atexit registration failed\n&quot;;
        return EXIT_FAILURE;
    }

    std::cout &lt;&lt; &quot;test&quot; &lt;&lt; std::endl; // flush from std::endl
        // needs to be here, otherwise nothing will be printed
    std::_Exit(EXIT_FAILURE);
}
 | output=
test
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc abort}}
{{dsc inc | cpp/utility/program/dsc exit}}
{{dsc see c | c/program/_Exit}}
{{dsc end}}

[[de:cpp/utility/program/ Exit]]
[[es:cpp/utility/program/ Exit]]
[[fr:cpp/utility/program/ Exit]]
[[it:cpp/utility/program/ Exit]]
[[ja:cpp/utility/program/ Exit]]
[[pt:cpp/utility/program/ Exit]]
[[ru:cpp/utility/program/ Exit]]
[[zh:cpp/utility/program/ Exit]]</text>
      <sha1>h7y5dey3d1mj765bip8dz4f7hu7zc9f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/EXIT FAILURE</title>
    <ns>0</ns>
    <id>1969</id>
    <redirect title="cpp/utility/program/EXIT status" />
    <revision>
      <id>16055</id>
      <parentid>8202</parentid>
      <timestamp>2011-12-19T14:25:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge similar constants</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/utility/program/EXIT_status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/EXIT SUCCESS</title>
    <ns>0</ns>
    <id>1968</id>
    <redirect title="cpp/utility/program/EXIT status" />
    <revision>
      <id>16056</id>
      <parentid>8203</parentid>
      <timestamp>2011-12-19T14:25:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge similar constants</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/utility/program/EXIT_status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/EXIT status</title>
    <ns>0</ns>
    <id>4549</id>
    <revision>
      <id>76320</id>
      <parentid>69742</parentid>
      <timestamp>2015-02-15T16:04:46Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>note on zero</comment>
      <text xml:space="preserve" bytes="1339">{{title|EXIT_SUCCESS, EXIT_FAILURE}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl |
#define EXIT_SUCCESS /*implementation defined*/
}}
{{dcl |
#define EXIT_FAILURE /*implementation defined*/
}}
{{dcl end}}

The {{tt|EXIT_SUCCESS}} and {{tt|EXIT_FAILURE}} macros expand into integral expressions that can be used as arguments to the {{lc|std::exit}} function (and, therefore, as the values to return from the [[cpp/language/main_function|main function]]), and indicate program execution status.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|EXIT_SUCCESS}} | successful execution of a program}}
{{dsc | {{tt|EXIT_FAILURE}} | unsuccessful execution of a program}}
{{dsc end}}

===Notes===
Both {{tt|EXIT_SUCCESS}} and the value zero indicate successful program execution status (see {{lc|std::exit}}), although it is not required that {{tt|EXIT_SUCCESS}} equals zero.

===See also===
{{dsc begin}}
{{dsc see c | c/program/EXIT_status | EXIT_SUCCESS | EXIT_FAILURE}}
{{dsc end}}

[[de:cpp/utility/program/EXIT status]]
[[es:cpp/utility/program/EXIT status]]
[[fr:cpp/utility/program/EXIT status]]
[[it:cpp/utility/program/EXIT status]]
[[ja:cpp/utility/program/EXIT status]]
[[pt:cpp/utility/program/EXIT status]]
[[ru:cpp/utility/program/EXIT status]]
[[zh:cpp/utility/program/EXIT status]]</text>
      <sha1>csagmms7cp2unj0k5hibkbd6qxz8cof</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIG DFL</title>
    <ns>0</ns>
    <id>4546</id>
    <redirect title="cpp/utility/program/SIG strategies" />
    <revision>
      <id>16049</id>
      <timestamp>2011-12-19T14:17:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/utility/program/SIG_strategies]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIG ERR</title>
    <ns>0</ns>
    <id>8690</id>
    <revision>
      <id>59661</id>
      <parentid>51724</parentid>
      <timestamp>2013-06-01T06:39:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="638">{{title|SIG_ERR}}
{{cpp/utility/program/navbar}}
{{ddcl | header=csignal |
#define SIG_ERR /* implementation defined */
}}

A value of type {{tt|void (*)(int)}}. When returned by {{lc|std::signal}}, indicates that an error has occurred.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc signal}}
{{dsc see c | c/program/SIG_ERR}}
{{dsc end}}

[[de:cpp/utility/program/SIG ERR]]
[[es:cpp/utility/program/SIG ERR]]
[[fr:cpp/utility/program/SIG ERR]]
[[it:cpp/utility/program/SIG ERR]]
[[ja:cpp/utility/program/SIG ERR]]
[[pt:cpp/utility/program/SIG ERR]]
[[ru:cpp/utility/program/SIG ERR]]
[[zh:cpp/utility/program/SIG ERR]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIG IGN</title>
    <ns>0</ns>
    <id>4547</id>
    <redirect title="cpp/utility/program/SIG strategies" />
    <revision>
      <id>16050</id>
      <timestamp>2011-12-19T14:17:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/utility/program/SIG_strategies]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIG strategies</title>
    <ns>0</ns>
    <id>4545</id>
    <revision>
      <id>65692</id>
      <parentid>51725</parentid>
      <timestamp>2013-09-27T04:20:09Z</timestamp>
      <contributor>
        <username>Gcweb</username>
        <id>2481</id>
      </contributor>
      <minor/>
      <comment>Fix the typo &quot;SIF_IGN&quot; -&gt; &quot;SIG_IGN&quot;</comment>
      <text xml:space="preserve" bytes="1026">{{title|SIG_DFL, SIG_IGN}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | csignal}}
{{dcl |
#define SIG_DFL /*implementation defined*/
}}
{{dcl |
#define SIG_IGN /*implementation defined*/
}}
{{dcl end}}

The {{lc|SIG_DFL}} and {{lc|SIG_IGN}} macros expand into integral expressions that are not equal to an address of any function. The macros define signal handling strategies for {{c|std::signal()}} function.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|SIG_DFL}} | default signal handling}}
{{dsc | {{tt|SIG_IGN}} | signal is ignored}}
{{dsc end}}

===See also===
{{dsc begin}}
{{dsc see c | c/program/SIG_strategies | SIG_DFL | SIG_IGN}}
{{dsc end}}

[[de:cpp/utility/program/SIG strategies]]
[[es:cpp/utility/program/SIG strategies]]
[[fr:cpp/utility/program/SIG strategies]]
[[it:cpp/utility/program/SIG strategies]]
[[ja:cpp/utility/program/SIG strategies]]
[[pt:cpp/utility/program/SIG strategies]]
[[ru:cpp/utility/program/SIG strategies]]
[[zh:cpp/utility/program/SIG strategies]]</text>
      <sha1>lcbtzwc71f48rccgrib4q4ux4c8y4q8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIG types</title>
    <ns>0</ns>
    <id>1980</id>
    <revision>
      <id>79664</id>
      <parentid>64229</parentid>
      <timestamp>2015-07-19T23:13:41Z</timestamp>
      <contributor>
        <ip>85.198.130.21</ip>
      </contributor>
      <text xml:space="preserve" bytes="1788">{{title|SIGTERM, SIGSEGV, SIGINT, SIGILL, SIGABRT, SIGFPE}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | csignal}}
{{dcl |
#define SIGTERM /*implementation defined*/
}}
{{dcl |
#define SIGSEGV /*implementation defined*/
}}
{{dcl |
#define SIGINT /*implementation defined*/
}}
{{dcl |
#define SIGILL /*implementation defined*/
}}
{{dcl |
#define SIGABRT /*implementation defined*/
}}
{{dcl |
#define SIGFPE /*implementation defined*/
}}
{{dcl end}}

Each of the above macro constants expands to an integer constant expression with distinct values, which represent different signals sent to the program.

{{dsc begin}}
{{dsc hitem | Constant | Explanation}}
{{dsc | {{tt|SIGTERM}}  | termination request, sent to the program}}
{{dsc | {{tt|SIGSEGV}}  | invalid memory access (segmentation fault)}}
{{dsc | {{tt|SIGINT}}  | external interrupt, usually initiated by the user}}
{{dsc | {{tt|SIGILL}}  | invalid program image, such as invalid instruction}}
{{dsc | {{tt|SIGABRT}}  | abnormal termination condition, as is e.g. initiated by {{lc|std::abort()}}}}
{{dsc | {{tt|SIGFPE}}  | erroneous arithmetic operation such as divide by zero}}
{{dsc end}}

===Notes===
Additional signal names [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html are specified by POSIX]

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc signal}}
{{dsc inc | cpp/utility/program/dsc raise}}
{{dsc see c | c/program/SIG_types | signal types | nomono=true}}
{{dsc end}}

[[de:cpp/utility/program/SIG types]]
[[es:cpp/utility/program/SIG types]]
[[fr:cpp/utility/program/SIG types]]
[[it:cpp/utility/program/SIG types]]
[[ja:cpp/utility/program/SIG types]]
[[pt:cpp/utility/program/SIG types]]
[[ru:cpp/utility/program/SIG types]]
[[zh:cpp/utility/program/SIG types]]</text>
      <sha1>2wfz2uvhzfapkbg6cr1bk0twez8m1mf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIGABRT</title>
    <ns>0</ns>
    <id>1976</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>22417</id>
      <parentid>8204</parentid>
      <timestamp>2012-04-19T19:59:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge signal pages</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/utility/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIGFPE</title>
    <ns>0</ns>
    <id>1977</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>22416</id>
      <parentid>7671</parentid>
      <timestamp>2012-04-19T19:59:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge signal pages</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/utility/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIGILL</title>
    <ns>0</ns>
    <id>1978</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>22415</id>
      <parentid>8205</parentid>
      <timestamp>2012-04-19T19:59:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge signal pages</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/utility/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIGINT</title>
    <ns>0</ns>
    <id>1979</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>22414</id>
      <parentid>8206</parentid>
      <timestamp>2012-04-19T19:59:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge signal pages</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/utility/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIGSEGV</title>
    <ns>0</ns>
    <id>1981</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>22412</id>
      <parentid>7069</parentid>
      <timestamp>2012-04-19T19:56:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>merge signal pages</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/utility/program/SIG_types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/SIGTERM</title>
    <ns>0</ns>
    <id>6333</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>22411</id>
      <timestamp>2012-04-19T19:55:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/program/SIGTERM]] to [[cpp/utility/program/SIG types]]: merge signals</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/program/SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/abort</title>
    <ns>0</ns>
    <id>1964</id>
    <revision>
      <id>91653</id>
      <parentid>73442</parentid>
      <timestamp>2017-03-31T19:53:28Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2411">{{cpp/title| abort}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl rev begin}}
{{dcl | until=c++11 |
             void abort();
}}
{{dcl | since=c++11 |
[[noreturn]] void abort();
}}
{{dcl rev end}}
{{dcl end}}

Causes abnormal program termination unless {{lc|SIGABRT}} is being caught by a signal handler passed to signal and the handler does not return.

Destructors of variables with automatic, thread local and static [[cpp/language/storage duration | storage durations]] are not called. Functions passed to {{lc|std::atexit()}} are also not called. Whether open resources such as files are closed is implementation defined. Implementation defined status is returned to the host environment that indicates unsuccessful execution. 

===Parameters===
(none)

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 |
 | code=
#include &lt;csignal&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

class Tester {
public:
    Tester()  { std::cout &lt;&lt; &quot;Tester ctor\n&quot;; }
    ~Tester() { std::cout &lt;&lt; &quot;Tester dtor\n&quot;; }
};

Tester static_tester; // Destructor not called

void signal_handler(int signal) 
{
    if (signal == SIGABRT) {
        std::cerr &lt;&lt; &quot;SIGABRT received\n&quot;;
    } else {
        std::cerr &lt;&lt; &quot;Unexpected signal &quot; &lt;&lt; signal &lt;&lt; &quot; received\n&quot;;
    }
    std::_Exit(EXIT_FAILURE);
}

int main()
{
    Tester automatic_tester; // Destructor not called

    // Setup handler
    auto previous_handler = std::signal(SIGABRT, signal_handler);
    if (previous_handler == SIG_ERR) {
        std::cerr &lt;&lt; &quot;Setup failed\n&quot;;
        return EXIT_FAILURE;
    }

    std::abort();  // Raise SIGABRT
    std::cout &lt;&lt; &quot;This code is unreachable\n&quot;;
}
 | output=
Tester ctor
Tester ctor
SIGABRT received
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc exit}}
{{dsc inc | cpp/utility/program/dsc atexit}}
{{dsc inc | cpp/utility/program/dsc quick_exit}}
{{dsc inc | cpp/utility/program/dsc signal}}
{{dsc see c | c/program/abort}}
{{dsc end}}

[[de:cpp/utility/program/abort]]
[[es:cpp/utility/program/abort]]
[[fr:cpp/utility/program/abort]]
[[it:cpp/utility/program/abort]]
[[ja:cpp/utility/program/abort]]
[[pt:cpp/utility/program/abort]]
[[ru:cpp/utility/program/abort]]
[[tr:cpp/utility/program/abort]]
[[zh:cpp/utility/program/abort]]</text>
      <sha1>k6fub5wrlrn590grg8mj5jasem5ugiq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/at quick exit</title>
    <ns>0</ns>
    <id>1971</id>
    <revision>
      <id>91732</id>
      <parentid>88314</parentid>
      <timestamp>2017-03-31T19:56:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1766">{{cpp/title| at_quick_exit}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl |num=1|since=c++11|
int at_quick_exit( /*atexit-handler*/* func );
int at_quick_exit( /*c-atexit-handler*/* func );
}}
{{dcl |num=2|1=
extern &quot;C++&quot; using /*atexit-handler*/ = void(); // exposition-only
extern &quot;C&quot; using /*c-atexit-handler*/ = void(); // exposition-only
}}
{{dcl end}}

Registers the function pointed to by {{tt|func}} to be called on quick program termination (via {{lc|std::quick_exit}}).

Calling the function from several threads does not induce a data race. The implementation shall support the registration of at least {{c|32}} functions.

The registered functions will not be called on {{rlp|exit|normal program termination}}. If a function need to be called in that case, {{lc|std::atexit}} must be used.

===Parameters===
{{par begin}}
{{par | func | pointer to a function to be called on quick program termination}}
{{par end}}

===Return value===
{{c|0}} if the registration succeeds, nonzero value otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
The two overloads are distinct because the types of the parameter {{tt|func}} are distinct ([[cpp/language/language linkage|language linkage]] is part of its type)

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc atexit}}
{{dsc see c | c/program/at_quick_exit}}
{{dsc end}}

[[de:cpp/utility/program/at quick exit]]
[[es:cpp/utility/program/at quick exit]]
[[fr:cpp/utility/program/at quick exit]]
[[it:cpp/utility/program/at quick exit]]
[[ja:cpp/utility/program/at quick exit]]
[[pt:cpp/utility/program/at quick exit]]
[[ru:cpp/utility/program/at quick exit]]
[[zh:cpp/utility/program/at quick exit]]</text>
      <sha1>ku4e50879ir57ur4jw90bvuu2m5n6dy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/atexit</title>
    <ns>0</ns>
    <id>1970</id>
    <revision>
      <id>91890</id>
      <parentid>88313</parentid>
      <timestamp>2017-03-31T20:00:52Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3147">{{cpp/title| atexit}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl |num=1|
int atexit( /*c-atexit-handler*/* func );
int atexit( /*atexit-handler*/* func );
}}
{{dcl |num=2|1=
extern &quot;C++&quot; using /*atexit-handler*/ = void(); // exposition-only
extern &quot;C&quot; using /*c-atexit-handler*/ = void(); // exposition-only
}}
{{dcl end}}

Registers the function pointed to by {{tt|func}} to be called on normal program termination (via {{lc|std::exit()}} or returning from the [[cpp/language/main function|main function]])
{{rev begin}}
{{rev |until=c++11|The functions will be called during the destruction of the static objects, in reverse order: if A was registered before B, then the call to B is made before the call to A. Same applies to the ordering between static object constructors and the calls to {{tt|atexit}}: see {{lc|std::exit}} }}
{{rev |since=c++11|The functions may be called concurrently with the destruction of the objects with static storage duration and with each other, maintaining the guarantee that if registration of A was sequenced-before the registration of B, then the call to B is sequenced-before the call to A, same applies to the sequencing between static object constructors and calls to {{tt|atexit}}: see {{lc|std::exit}} }}
{{rev end}}

The same function may be registered more than once.

If a function exits via an exception, {{c|std::terminate}} is called.

{{tt|atexit}} is thread-safe: calling the function from several threads does not induce a data race. 

The implementation is guaranteed to support the registration of at least {{c|32}} functions. The exact limit is implementation-defined.

===Parameters===
{{par begin}}
{{par | func | pointer to a function to be called on normal program termination}}
{{par end}}

===Return value===
{{c|0}} if the registration succeeds, nonzero value otherwise.

===Notes===
The two overloads are distinct because the types of the parameter {{tt|func}} are distinct ([[cpp/language/language linkage|language linkage]] is part of its type)

===Exceptions===
{{rev begin}}
{{rev | until=c++11 | (none)}}
{{rev | since=c++11 | {{unreviewed noexcept}}}}
{{rev end}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

void atexit_handler_1() 
{
    std::cout &lt;&lt; &quot;at exit #1\n&quot;;
}

void atexit_handler_2() 
{
    std::cout &lt;&lt; &quot;at exit #2\n&quot;;
}

int main() 
{
    const int result_1 = std::atexit(atexit_handler_1);
    const int result_2 = std::atexit(atexit_handler_2);

    if ((result_1 != 0) or (result_2 != 0)) {
        std::cerr &lt;&lt; &quot;Registration failed\n&quot;;
        return EXIT_FAILURE;
    }

    std::cout &lt;&lt; &quot;returning from main\n&quot;;
    return EXIT_SUCCESS;
}
 | output=
returning from main
at exit #2
at exit #1
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc at_quick_exit}}
{{dsc see c | c/program/atexit}}
{{dsc end}}

[[de:cpp/utility/program/atexit]]
[[es:cpp/utility/program/atexit]]
[[fr:cpp/utility/program/atexit]]
[[it:cpp/utility/program/atexit]]
[[ja:cpp/utility/program/atexit]]
[[pt:cpp/utility/program/atexit]]
[[ru:cpp/utility/program/atexit]]
[[zh:cpp/utility/program/atexit]]</text>
      <sha1>1frd6l2bytnqvrwb1eheyi5vezgafsk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/exit</title>
    <ns>0</ns>
    <id>1965</id>
    <revision>
      <id>91241</id>
      <parentid>89357</parentid>
      <timestamp>2017-03-29T08:33:56Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>http://stackoverflow.com/questions/43071676/why-does-stdexit-not-trigger-destructors-as-expected</comment>
      <text xml:space="preserve" bytes="6020">{{cpp/title| exit}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | cstdlib}}
{{dcl rev begin}}
{{dcl | until=c++11 |
             void exit( int exit_code );
}}
{{dcl | since=c++11 |
[[noreturn]] void exit( int exit_code );
}}
{{dcl rev end}}
{{dcl end}}

Causes normal program termination to occur.

Several cleanup steps are performed:

{{rev begin}}
{{rev|until=c++11|
@1@ destructors of objects with static storage duration are called in reverse order of completion of their constructors or the completion of their [[cpp/language/initialization#Dynamic_initialization|dynamic initialization]], and the functions passed to {{lc|std::atexit}} are called in reverse order they are registered (last one first).
:@a@ any static objects whose initialization was completed before the call to {{lc|std::atexit}} for some function F will be destroyed after the call to F during program termination.
:@b@ any static objects whose construction began after the call to {{lc|std::atexit}} for some function F will be destroyed before the call to F during program termination (this includes the case where {{lc|std::atexit}} was called from the constructor of the static object)
}}
{{rev|since=c++11|
@1@The destructors of objects with thread local [[cpp/language/storage duration|storage duration]] that are associated with the current thread, the destructors of objects with static storage duration, and the functions registered with {{lc|std::atexit}} are executed concurrently, while maintaining the following guarantees:
:@a@ The last destructor for thread-local objects is [[cpp/language/eval order|sequenced-before]] the first destructor for a static object
:@b@ If the completion of the constructor or [[cpp/language/initialization#Dynamic_initialization|dynamic initialization]] for thread-local or static object A was sequenced-before thread-local or static object B, the completion of the destruction of B is sequenced-before the start of the destruction of A
:@c@ If the completion of the initialization of a static object A was sequenced-before the call to {{lc|std::atexit}} for some function F, the call to F during termination is sequenced-before the start of the destruction of A
:@d@ If the call to {{lc|std::atexit}} for some function F was sequenced-before the completion of initialization of a static object A, the start of the destruction of A is sequenced-before the call to F during termination.
:@e@ If a call to {{lc|std::atexit}} for some function F1 was sequenced-before the call to {{lc|std::atexit}} for some function F2, then the call to F2 during termination is sequenced-before the call to F1}}
{{rev end}}
:* In the above,
::* if any function registered with {{tt|atexit}} or any destructor of static/thread-local object throws an exception, {{lc|std::terminate}} is called
::* if the compiler opted to lift dynamic initialization of an object to the static initialization phase of [[cpp/language/initialization|non-local initialization]], the sequencing of destruction honors its would-be dynamic initialization.
::* If a function-local (block-scope) static object was destroyed and then that function is called from the destructor of another static object and the control flow passes through the definition of that object (or if it is used indirectly, via pointer or reference), the behavior is undefined.
::* if a function-local (block-scope) static object was initialized during construction of a subobject of a class or array, it is only destroyed after all subobjects of that class or all elements of that array were destroyed.
@2@ all C streams are flushed and closed
@3@ files created by {{lc|std::tmpfile}} are removed
@4@ control is returned to the host environment. If {{tt|exit_code}} is {{lc|0}} or {{lc|EXIT_SUCCESS}}, an implementation-defined status indicating successful termination is returned. If {{tt|exit_code}} is {{lc|EXIT_FAILURE}}, an implementation-defined status indicating unsuccessful termination is returned. In other cases implementation-defined status value is returned.

Stack is not unwound: destructors of variables with automatic [[cpp/language/storage duration | storage duration]] are not called.

===Relationship with the main function===
Returning from the [[cpp/language/main function|main function]], either by a {{tt|return}} statement or by reaching the end of the function performs the normal function termination (calls the destructors of the variables with automatic [[cpp/language/storage duration | storage durations]]) and then executes {{lc|std::exit}}, passing the argument of the return statement (or {{c|0}} if implicit return was used) as {{tt|exit_code}}.

===Parameters===
{{par begin}}
{{par | exit_code | exit status of the program}}
{{par end}}

===Return value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

class Static {
public:
   
    ~Static() 
    {
        std::cout &lt;&lt; &quot;Static dtor\n&quot;;
    }
};

class Local {
public:
    ~Local() 
    {
        std::cout &lt;&lt; &quot;Local dtor\n&quot;;
    }
};

Static static_variable; // dtor of this object *will* be called

void atexit_handler()
{
    std::cout &lt;&lt; &quot;atexit handler\n&quot;;
}

int main()
{
    Local local_variable; // dtor of this object will *not* be called
    const int result = std::atexit(atexit_handler); // handler will be called
  
    if (result != 0) {
        std::cerr &lt;&lt; &quot;atexit registration failed\n&quot;;
        return EXIT_FAILURE;
    }

    std::cout &lt;&lt; &quot;test\n&quot;;
    std::exit(EXIT_FAILURE);
}
 | output=
test
atexit handler
Static dtor
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc abort}}
{{dsc inc | cpp/utility/program/dsc atexit}}
{{dsc inc | cpp/utility/program/dsc quick_exit}}
{{dsc see c | c/program/exit}}
{{dsc end}}

[[de:cpp/utility/program/exit]]
[[es:cpp/utility/program/exit]]
[[fr:cpp/utility/program/exit]]
[[it:cpp/utility/program/exit]]
[[ja:cpp/utility/program/exit]]
[[pt:cpp/utility/program/exit]]
[[ru:cpp/utility/program/exit]]
[[zh:cpp/utility/program/exit]]</text>
      <sha1>esl3ch8xt6lnqxvq99yi0f1qeh5rzmr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/getenv</title>
    <ns>0</ns>
    <id>1973</id>
    <revision>
      <id>72929</id>
      <parentid>72922</parentid>
      <timestamp>2014-10-05T15:19:51Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>/* Example */ std::</comment>
      <text xml:space="preserve" bytes="2812">{{cpp/title| getenv}}
{{cpp/utility/program/navbar}}
{{ddcl | header=cstdlib |
char* getenv( const char* env_var );
}}

Searches the ''environment list'' provided by the host environment (the OS), for a string that matches the C string pointed to by {{tt|env_var}} and returns a pointer to the C string that is associated with the matched environment list member.

{{rev begin}}
{{rev|until=c++11|
This function is not required to be thread-safe. Another call to getenv, as well as a call to the POSIX functions [http://pubs.opengroup.org/onlinepubs/9699919799/functions/setenv.html setenv()], [http://pubs.opengroup.org/onlinepubs/9699919799/functions/unsetenv.html unsetenv()], and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/putenv.html putenv()] may invalidate the pointer returned by a previous call or modify the string obtained from a previous call.
}}
{{rev|since=c++11|
This function is thread-safe (calling it from multiple threads does not introduce a data race) as long as no other function modifies the host environment. In particular, the POSIX functions [http://pubs.opengroup.org/onlinepubs/9699919799/functions/setenv.html setenv()], [http://pubs.opengroup.org/onlinepubs/9699919799/functions/unsetenv.html unsetenv()], and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/putenv.html putenv()] would introduce a data race if called without synchronization.
}}
{{rev end}}

Modifying the string returned by {{tt|getenv}} invokes undefined behavior.

===Parameters===
{{par begin}}
{{par | env_var | null-terminated character string identifying the name of the environmental variable to look for }}
{{par end}}

===Return value===
Character string identifying the value of the environmental variable or null pointer if such variable is not found.

===Notes===
On POSIX systems, the [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08 environment variables] are also accessible through the global variable {{tt|environ}}, declared as {{c|extern char **environ;}} in {{tt|&lt;unistd.h&gt;}}, and through the optional third argument, {{tt|envp}}, of [[cpp/language/main function|the main function]].

===Example===
{{example
 |
 | p=true | code=
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

int main()
{
    if(const char* env_p = std::getenv(&quot;PATH&quot;))
        std::cout &lt;&lt; &quot;Your PATH is: &quot; &lt;&lt; env_p &lt;&lt; '\n';
}
 | output=
Your PATH is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
}}

===See also===
{{dsc begin}}
{{dsc see c | c/program/getenv}}
{{dsc end}}

[[de:cpp/utility/program/getenv]]
[[es:cpp/utility/program/getenv]]
[[fr:cpp/utility/program/getenv]]
[[it:cpp/utility/program/getenv]]
[[ja:cpp/utility/program/getenv]]
[[pt:cpp/utility/program/getenv]]
[[ru:cpp/utility/program/getenv]]
[[zh:cpp/utility/program/getenv]]</text>
      <sha1>d0v5hk6gmcpxypfn6upp4p7awnpgt7z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/jmp buf</title>
    <ns>0</ns>
    <id>8688</id>
    <revision>
      <id>59672</id>
      <parentid>51733</parentid>
      <timestamp>2013-06-01T06:39:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Update links.</comment>
      <text xml:space="preserve" bytes="929">{{cpp/title|jmp_buf}}
{{cpp/utility/program/navbar}}
{{ddcl | header=csetjmp | 
typedef /* unspecified */ jmp_buf;
}}

The {{tt|std::jmp_buf}} type is an array type suitable for storing information to restore a calling environment. The stored information is sufficient to restore execution at the correct block of the program and invocation of that block. The state of floating-point status flags, or open files, or any other data is not stored in an object of type {{tt|jmp_buf}}.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc setjmp}}
{{dsc inc | cpp/utility/program/dsc longjmp}}
{{dsc see c | c/program/jmp_buf}}
{{dsc end}}

[[de:cpp/utility/program/jmp buf]]
[[es:cpp/utility/program/jmp buf]]
[[fr:cpp/utility/program/jmp buf]]
[[it:cpp/utility/program/jmp buf]]
[[ja:cpp/utility/program/jmp buf]]
[[pt:cpp/utility/program/jmp buf]]
[[ru:cpp/utility/program/jmp buf]]
[[zh:cpp/utility/program/jmp buf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/longjmp</title>
    <ns>0</ns>
    <id>1983</id>
    <revision>
      <id>74103</id>
      <parentid>74097</parentid>
      <timestamp>2014-12-02T23:25:11Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>usage note</comment>
      <text xml:space="preserve" bytes="2289">{{cpp/title| longjmp}}
{{cpp/utility/program/navbar}}
{{ddcl | header=csetjmp |
void longjmp( std::jmp_buf env, int status );
}}

Loads the execution context {{tt|env}} saved by a previous call to {{lc|setjmp}}. This function does not return. Control is transferred to the call site of the macro {{lc|setjmp}} that set up {{tt|env}}. That {{lc|setjmp}} then returns the value, passed as the {{tt|status}}.

If the function that called {{lc|setjmp}} has exited, the behavior is undefined (in other words, only long jumps up the call stack are allowed)

No destructors for automatic objects are called. If replacing of {{tt|std::longjmp}} with {{c|throw}} and {{lc|setjmp}} with {{c|catch}} would execute a non-trivial destructor for any automatic object, the behavior of such {{tt|std::longjmp}} is undefined.

===Parameters===
{{par begin}}
{{par | env | variable referring to the execution state of the program saved by {{c|std::setjmp}}}}
{{par | status | the value to return from {{lc|setjmp}}. If it is equal to {{c|0}}, {{c|1}} is used instead}}
{{par end}}

===Return value===
(none)

===Notes===
{{tt|longjmp}} is the mechanism used in C to handle unexpected error conditions where the function cannot return meaningfully. C++ generally uses [[cpp/language/exceptions|exception handling]] for this purpose.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;csetjmp&gt;

std::jmp_buf jump_buffer;

[[noreturn]] void a(int count) 
{
    std::cout &lt;&lt; &quot;a(&quot; &lt;&lt; count &lt;&lt; &quot;) called\n&quot;;
    std::longjmp(jump_buffer, count+1);  // setjump() will return count+1
}

int main()
{
    volatile int count = 0; // local variables must be volatile for setjmp
    if (setjmp(jump_buffer) != 9) {
        a(count++);  // This will cause setjmp() to exit
    }
}
 | output=
a(0) called
a(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc setjmp}}
{{dsc see c | c/program/longjmp}}
{{dsc end}}

[[de:cpp/utility/program/longjmp]]
[[es:cpp/utility/program/longjmp]]
[[fr:cpp/utility/program/longjmp]]
[[it:cpp/utility/program/longjmp]]
[[ja:cpp/utility/program/longjmp]]
[[pt:cpp/utility/program/longjmp]]
[[ru:cpp/utility/program/longjmp]]
[[zh:cpp/utility/program/longjmp]]</text>
      <sha1>h244olq7ofq65qyluta2d6w06dy8ljb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/quick exit</title>
    <ns>0</ns>
    <id>1966</id>
    <revision>
      <id>91782</id>
      <parentid>71935</parentid>
      <timestamp>2017-03-31T19:57:49Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1295">{{cpp/title| quick_exit}}
{{cpp/utility/program/navbar}}
{{ddcl | header=cstdlib | since=c++11 |
[[noreturn]] void quick_exit( int exit_code );
}}

Causes normal program termination to occur without completely cleaning the resources.

Functions passed to {{lc|std::at_quick_exit}} are called in reverse order of their registration. If an exception tries to propagate out of any of the functions, {{lc|std::terminate}} is called. After calling the registered functions, calls {{c|std::_Exit(exit_code)}}

Functions passed to {{lc|std::atexit}} are not called.
===Parameters===
{{par begin}}
{{par | exit_code | exit status of the program}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example
 |
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc abort}}
{{dsc inc | cpp/utility/program/dsc atexit}}
{{dsc inc | cpp/utility/program/dsc at_quick_exit}}
{{dsc see c | c/program/quick_exit}}
{{dsc end}}

[[de:cpp/utility/program/quick exit]]
[[es:cpp/utility/program/quick exit]]
[[fr:cpp/utility/program/quick exit]]
[[it:cpp/utility/program/quick exit]]
[[ja:cpp/utility/program/quick exit]]
[[pt:cpp/utility/program/quick exit]]
[[ru:cpp/utility/program/quick exit]]
[[zh:cpp/utility/program/quick exit]]</text>
      <sha1>6qlx61gcb7wpuy7lxyigxwxar97esmk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/raise</title>
    <ns>0</ns>
    <id>1975</id>
    <revision>
      <id>64230</id>
      <parentid>64209</parentid>
      <timestamp>2013-08-15T15:53:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>+std::</comment>
      <text xml:space="preserve" bytes="1494">{{cpp/title| raise}}
{{cpp/utility/program/navbar}}
{{ddcl | header=csignal |
int raise( int sig );
}}

Sends signal sig to the program. The signal handler (specified using the {{lc|std::signal()}} function) is invoked.

If the user-defined signal handling strategy is not set using {{lc|std::signal()}} yet, it is implementation-defined whether the signal will be ignored or default handler will be invoked. 

===Parameters===
{{par begin}}
{{par | sig | the signal to be sent. It can be an implementation-defined value or one of the following values:
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc SIG_types}}
{{dsc end}}
}}
{{par end}}

===Return value===
{{c|0}} upon success, non-zero value on failure.

===Example===
{{example
 |
 | p=true
 | code=
#include &lt;csignal&gt;
#include &lt;iostream&gt;

void signal_handler(int signal)
{
    std::cout &lt;&lt; &quot;Received signal &quot; &lt;&lt; signal &lt;&lt; '\n';
}

int main()
{
    // Install a signal handler
    std::signal(SIGTERM, signal_handler);

    std::cout &lt;&lt; &quot;Sending signal &quot; &lt;&lt; SIGTERM &lt;&lt; '\n';
    std::raise(SIGTERM);
}
 | output=
Sending signal 15
Received signal 15
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc signal}}
{{dsc see c | c/program/raise}}
{{dsc end}}

[[de:cpp/utility/program/raise]]
[[es:cpp/utility/program/raise]]
[[fr:cpp/utility/program/raise]]
[[it:cpp/utility/program/raise]]
[[ja:cpp/utility/program/raise]]
[[pt:cpp/utility/program/raise]]
[[ru:cpp/utility/program/raise]]
[[zh:cpp/utility/program/raise]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/setjmp</title>
    <ns>0</ns>
    <id>1982</id>
    <revision>
      <id>88837</id>
      <parentid>88836</parentid>
      <timestamp>2016-12-15T04:57:25Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>output to match</comment>
      <text xml:space="preserve" bytes="3545">{{title| setjmp}}
{{cpp/utility/program/navbar}}
{{ddcl | header=csetjmp | 
#define setjmp(env) /* implementation-defined */
}}

Saves the current execution context into a variable {{tt|env}} of type {{lc|std::jmp_buf}}. This variable can later be used to restore the current execution context by {{lc|std::longjmp}} function. That is, when a call to {{lc|std::longjmp}} function is made, the execution continues at the particular call site that constructed the {{lc|std::jmp_buf}} variable passed to {{lc|std::longjmp}}. In that case {{lc|setjmp}} returns the value passed to {{lc|std::longjmp}}.

The invocation of {{tt|setjmp}} must appear only in one of the following contexts:
* the entire controlling expression of [[cpp/language/if|if]], [[cpp/language/switch|switch]], [[cpp/language/while|while]], [[cpp/language/do|do-while]], [[cpp/language/for|for]]
{{source|1=
switch(setjmp(env)) { ..
}}
* one operand of a relational or equality operator with the other operand an integer constant expression, with the resulting expression being the entire controlling expression [[cpp/language/if|if]], [[cpp/language/switch|switch]], [[cpp/language/while|while]], [[cpp/language/do|do-while]], [[cpp/language/for|for]].
{{source|1=
if(setjmp(env) &gt; 0) { ...
}}
* the operand of a unary ! operator with the resulting expression being the entire controlling expression of [[cpp/language/if|if]], [[cpp/language/switch|switch]], [[cpp/language/while|while]], [[cpp/language/do|do-while]], [[cpp/language/for|for]].
{{source|1=
while(!setjmp(env)) { ...
}}
* the entire expression of an [[cpp/language/statements#Expression_statements|expression statement]] (possibly cast to {{tt|void}}).
{{source|1=
setjmp(env);
}}
If {{tt|setjmp}} appears in any other context, the behavior is undefined.

Upon return to the scope of {{tt|setjmp}}, all accessible objects, floating-point status flags, and other components of the abstract machine have the same values as they had when {{lc|std::longjmp}} was executed, except for the non-[[cpp/language/cv|volatile]] local variables in {{tt|setjmp}}'s scope, whose values are indeterminate if they have been changed since the setjmp invocation.
===Parameters===
{{par begin}}
{{par | env | variable to save the execution state of the program to.}}
{{par end}}

===Return value===
{{c|0}} if the macro was called by the original code and the execution context was saved to {{tt|env}}.

Non-zero value if a non-local jump was just performed. The return value is the same as passed to {{lc|std::longjmp}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;csetjmp&gt;

std::jmp_buf jump_buffer;

[[noreturn]] void a(int count) 
{
    std::cout &lt;&lt; &quot;a(&quot; &lt;&lt; count &lt;&lt; &quot;) called\n&quot;;
    std::longjmp(jump_buffer, count+1);  // setjump() will return count+1
}

int main()
{
    volatile int count = 0; // modified locals in setjmp scope must be volatile
    if (setjmp(jump_buffer) != 9) { // equality against constant expression in an if
        a(++count);  // This will cause setjmp() to exit
    }
}
 | output=
a(1) called
a(2) called
a(3) called
a(4) called
a(5) called
a(6) called
a(7) called
a(8) called
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc longjmp}}
{{dsc see c | c/program/setjmp}}
{{dsc end}}

[[de:cpp/utility/program/setjmp]]
[[es:cpp/utility/program/setjmp]]
[[fr:cpp/utility/program/setjmp]]
[[it:cpp/utility/program/setjmp]]
[[ja:cpp/utility/program/setjmp]]
[[pt:cpp/utility/program/setjmp]]
[[ru:cpp/utility/program/setjmp]]
[[zh:cpp/utility/program/setjmp]]</text>
      <sha1>chu97uql238imrasgy995kga0n4896i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/sig atomic t</title>
    <ns>0</ns>
    <id>8692</id>
    <revision>
      <id>66030</id>
      <parentid>59681</parentid>
      <timestamp>2013-10-21T16:49:41Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>use in signal handlers as described in C Rationale 5.2.3 Signals and interrupts</comment>
      <text xml:space="preserve" bytes="1022">{{cpp/title|sig_atomic_t}}
{{cpp/utility/program/navbar}}
{{ddcl | header=csignal |
typedef /* unspecified */ sig_atomic_t;
}}

An integer type which can be accessed as an atomic entity even in the presence of asynchronous interrupts made by signals.

===Notes===
Until C++11, which introduced {{lc|std::atomic}} and {{lc|std::atomic_signal_fence}}, about the only thing a strictly conforming program could do in a signal handler was to assign a value to a {{c|volatile static std::sig_atomic_t}} variable and promptly return.

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc signal}}
{{dsc see c | c/program/sig_atomic_t}}
{{dsc inc | cpp/atomic/dsc atomic_signal_fence}}
{{dsc end}}

[[de:cpp/utility/program/sig atomic t]]
[[es:cpp/utility/program/sig atomic t]]
[[fr:cpp/utility/program/sig atomic t]]
[[it:cpp/utility/program/sig atomic t]]
[[ja:cpp/utility/program/sig atomic t]]
[[pt:cpp/utility/program/sig atomic t]]
[[ru:cpp/utility/program/sig atomic t]]
[[zh:cpp/utility/program/sig atomic t]]</text>
      <sha1>92nf03nso86kb6827i4dsu8zmv8lpct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/signal</title>
    <ns>0</ns>
    <id>1974</id>
    <revision>
      <id>89225</id>
      <parentid>88315</parentid>
      <timestamp>2017-01-11T14:05:28Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>blurb about sigaction</comment>
      <text xml:space="preserve" bytes="5247">{{cpp/title| signal}}
{{cpp/utility/program/navbar}}
{{dcl begin}}
{{dcl header | csignal}}
{{dcl |num=1|
/*signal-handler*/* signal(int sig, /*signal-handler*/* handler);
}}
{{dcl |num=2|1=
extern &quot;C&quot; using /*signal-handler*/ = void(int); // exposition-only
}}
{{dcl end}}

Sets the error handler for signal {{tt|sig}}. The signal handler can be set so that default handling will occur, signal is ignored, or a user-defined function is called.

When signal handler is set to a function and a signal occurs, it is implementation defined whether {{c|std::signal(sig, SIG_DFL)}} will be executed immediately before the start of signal handler. Also, the implementation can prevent some implementation-defined set of signals from occurring while the signal handler runs. 

For some of the signals, the implementation may call {{c|std::signal(sig, SIG_IGN)}} at the startup of the program. For the rest, the implementation must call {{c|std::signal(sig, SIG_DFL)}}.

(Note: POSIX introduced [http://pubs.opengroup.org/onlinepubs/9699919799/functions/sigaction.html sigaction] to standardize these implementation-defined behaviors)

===Parameters===
{{par begin}}
{{par | sig | the signal to set the signal handler to. It can be an implementation-defined value or one of the following values: 
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc SIG_types}}
{{dsc end}}
}}
{{par | handler | the signal handler. This must be one of the following: 
*{{lc|SIG_DFL}} macro. The signal handler is set to default signal handler.
*{{lc|SIG_IGN}} macro. The signal is ignored.
*pointer to a function. The signature of the function must be equivalent to the following:
{{ddcl | 
void fun(int sig);}}}}
{{par end}}

===Return value===
Previous signal handler on success or {{lc|SIG_ERR}} on failure (setting a signal handler can be disabled on some implementations).

===Signal handler===
The following limitations are imposed on the user-defined function that is installed as a signal handler.

If the user defined function returns when handling {{lc|SIGFPE}}, {{lc|SIGILL}}, {{lc|SIGSEGV}} or any other implementation-defined signal specifying a computational exception, the behavior is undefined.

If the signal handler is called as a result of {{lc|std::abort}} or {{lc|std::raise}}, the behavior is undefined if the signal handler calls {{lc|std::raise}}.

If the signal handler is called NOT as a result of {{lc|std::abort}} or {{lc|std::raise}}, the behavior is undefined if
* the signal handler calls any function within the standard library, except
:* {{lc|std::abort}}
:* {{lc|std::_Exit}}
:* {{lc|std::quick_exit}}
:* {{c|std::signal}} with the first argument being the number of the signal currently handled (async handler can re-register itself, but not other signals). 
* the signal handler refers to any object with static or thread-local{{mark since c++11}} storage duration that is not {{lc|std::atomic}}{{mark since c++11}} or {{c|volatile std::sig_atomic_t}}.

On entry to the signal handler, the state of the [[cpp/numeric/fenv|floating-point environment]] and the values of all objects is unspecified, except for
* objects of type {{c|volatile std::sig_atomic_t}}
* objects of {{lc|std::atomic}} types {{mark since c++11}}
* side effects made visible through {{lc|std::atomic_signal_fence}} {{mark since c++11}}

On return from a signal handler, the value of any object modified by the signal handler that is not {{c|volatile std::sig_atomic_t}} or {{lc|std::atomic}} is undefined.

The behavior is undefined if {{tt|std::signal}} is used in a multithreaded program. It is not required to be thread-safe.&lt;!-- said explicitly in C11's 7.14.1.1/7, C++11's signal refers to C99 which doesn't know about threads --&gt;

===Notes===
POSIX requires that {{tt|signal}} is thread-safe, and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04 specifies a list of async-signal-safe library functions] that may be called from any signal handler.

Signal handlers are expected to have [[cpp/language/language_linkage|C linkage]] and, in general, only use the features from the common subset of C and C++. It is implementation-defined if a function with C++ linkage can be used as a signal handler. &lt;!-- per C++11 $18.10[support.runtime]/9 --&gt;

===Example===
{{example
 |
 | p=true
 | code=
#include &lt;csignal&gt;
#include &lt;iostream&gt;

namespace
{
  volatile std::sig_atomic_t gSignalStatus;
}

void signal_handler(int signal)
{
  gSignalStatus = signal;
}

int main()
{
  // Install a signal handler
  std::signal(SIGINT, signal_handler);

  std::cout &lt;&lt; &quot;SignalValue: &quot; &lt;&lt; gSignalStatus &lt;&lt; '\n';
  std::cout &lt;&lt; &quot;Sending signal &quot; &lt;&lt; SIGINT &lt;&lt; '\n';
  std::raise(SIGINT);
  std::cout &lt;&lt; &quot;SignalValue: &quot; &lt;&lt; gSignalStatus &lt;&lt; '\n';
}
 | output=
SignalValue: 0
Sending signal 2
SignalValue: 2
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/program/dsc raise}}
{{dsc see c | c/program/signal}}
{{dsc inc | cpp/atomic/dsc atomic_signal_fence}}
{{dsc end}}

[[de:cpp/utility/program/signal]]
[[es:cpp/utility/program/signal]]
[[fr:cpp/utility/program/signal]]
[[it:cpp/utility/program/signal]]
[[ja:cpp/utility/program/signal]]
[[pt:cpp/utility/program/signal]]
[[ru:cpp/utility/program/signal]]
[[zh:cpp/utility/program/signal]]</text>
      <sha1>6smbpoytn8n61rd6oomx5uswl0z7jwi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/program/system</title>
    <ns>0</ns>
    <id>1972</id>
    <revision>
      <id>81691</id>
      <parentid>81136</parentid>
      <timestamp>2015-11-04T15:18:42Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>link to WEXITSTATUS (prompted by http://stackoverflow.com/questions/33310221)</comment>
      <text xml:space="preserve" bytes="1963">{{cpp/title| system}}
{{cpp/utility/program/navbar}}
{{ddcl | header=cstdlib |
int system( const char* command );
}}

Calls the host environment's command processor ({{tt|/bin/sh}}, {{tt|cmd.exe}}, {{tt|command.com}}) with the parameter {{tt|command}}. Returns an implementation-defined value (usually the value that the invoked program returns).

If {{tt|command}} is a null pointer, checks if host environment has a command processor and returns nonzero value only if the command processor exists.

===Parameters===
{{par begin}}
{{par | command | character string identifying the command to be run in the command processor. If a null pointer is given, command processor is checked for existence}}
{{par end}}

===Return value===
Implementation-defined value. If {{tt|command}} is a null pointer, returns nonzero value only if command processor exists.

===Notes===
On POSIX systems, the return value can be decomposed using [http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html WEXITSTATUS and WSTOPSIG]

Related POSIX function [http://pubs.opengroup.org/onlinepubs/9699919799/functions/popen.html popen] makes the output generated by {{tt|command}} available to the caller.

===Example===
{{example
 |
 | code=
#include &lt;cstdlib&gt;
#include &lt;fstream&gt;
#include &lt;iostream&gt;

int main()
{
    std::system(&quot;ls -l &gt;test.txt&quot;); // execute the UNIX command &quot;ls -l &gt;test.txt&quot;
    std::cout &lt;&lt; std::ifstream(&quot;test.txt&quot;).rdbuf();
}
|p=true
 | output=
total 16
-rwxr-xr-x 1 2001 2000 8859 Sep 30 20:52 a.out
-rw-rw-rw- 1 2001 2000  161 Sep 30 20:52 main.cpp
-rw-r--r-- 1 2001 2000    0 Sep 30 20:52 test.txt
}}

===See also===
{{dsc begin}}
{{dsc see c | c/program/system}}
{{dsc end}}

[[de:cpp/utility/program/system]]
[[es:cpp/utility/program/system]]
[[fr:cpp/utility/program/system]]
[[it:cpp/utility/program/system]]
[[ja:cpp/utility/program/system]]
[[pt:cpp/utility/program/system]]
[[ru:cpp/utility/program/system]]
[[zh:cpp/utility/program/system]]</text>
      <sha1>iep5nka4nmen71014p9xcxh3j775p6x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/ratio</title>
    <ns>0</ns>
    <id>3513</id>
    <redirect title="cpp/numeric/ratio" />
    <revision>
      <id>13318</id>
      <timestamp>2011-11-07T13:32:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/ratio]] to [[cpp/numeric/ratio]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/numeric/ratio]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/ratio/ratio</title>
    <ns>0</ns>
    <id>3515</id>
    <redirect title="cpp/numeric/ratio/ratio" />
    <revision>
      <id>13322</id>
      <timestamp>2011-11-07T13:33:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/ratio/ratio]] to [[cpp/numeric/ratio/ratio]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/numeric/ratio/ratio]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rel ops/operator cmp</title>
    <ns>0</ns>
    <id>4255</id>
    <revision>
      <id>67967</id>
      <parentid>67966</parentid>
      <timestamp>2014-03-10T12:47:39Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>Undo revision 67966 by [[Special:Contributions/140.93.3.229|140.93.3.229]] ([[User talk:140.93.3.229|talk]])</comment>
      <text xml:space="preserve" bytes="3149">{{cpp/utility/rel_ops/title | operator!{{=}},&gt;,&lt;{{=}},&gt;{{=}}}}
{{cpp/utility/navbar}}

{{dcl begin}}
{{dcl header | utility}}
{{dcl | num=1 | 1=
template&lt; class T &gt;
bool operator!=( const T&amp; lhs, const T&amp; rhs );
}}
{{dcl | num=2 | 1=
template&lt; class T &gt;
bool operator&gt;( const T&amp; lhs, const T&amp; rhs );
}}

{{dcl | num=3 | 1=
template&lt; class T &gt;
bool operator&lt;=( const T&amp; lhs, const T&amp; rhs );
}}
{{dcl | num=4 | 1=
template&lt; class T &gt;
bool operator&gt;=( const T&amp; lhs, const T&amp; rhs );
}}
{{dcl end}}

Given a user-defined {{c|1=operator==}} and {{c|1=operator&lt;}} for objects of type {{tt|T}}, implements the usual semantics of other comparison operators.

1) Implements {{c|1=operator!=}} in terms of {{c|1=operator==}}.

2) Implements {{c|1=operator&gt;}} in terms of {{c|1=operator&lt;}}.

3) Implements {{c|1=operator&lt;=}} in terms of {{c|1=operator&lt;}}.

4) Implements {{c|1=operator&gt;=}} in terms of {{c|1=operator&lt;}}.

===Parameters===
{{par begin}}
{{par | lhs | left-hand argument}}
{{par | rhs | right-hand argument}}
{{par end}}

===Return value===

1) Returns {{c|true}} if {{tt|lhs}} is ''not equal'' to {{tt|rhs}}.

2) Returns {{c|true}} if {{tt|lhs}} is ''greater'' than {{tt|rhs}}.

3) Returns {{c|true}} if {{tt|lhs}} is ''less or equal'' to {{tt|rhs}}.

4) Returns {{c|true}} if {{tt|lhs}} is ''greater or equal'' to {{tt|rhs}}.

===Possible implementation===
{{eq fun
 | 1=
namespace rel_ops {
    template&lt; class T &gt;
    bool operator!=( const T&amp; lhs, const T&amp; rhs ) 
    {
        return !(lhs == rhs);
    }
}
 | 2=
namespace rel_ops {
    template&lt; class T &gt;
    bool operator&gt;( const T&amp; lhs, const T&amp; rhs ) 
    {
        return rhs &lt; lhs;
    }
}
 | 3=
namespace rel_ops {
    template&lt; class T &gt;
    bool operator&lt;=( const T&amp; lhs, const T&amp; rhs ) 
    {
        return !(rhs &lt; lhs);
    }
}
 | 4=
namespace rel_ops {
    template&lt; class T &gt;
    bool operator&gt;=( const T&amp; lhs, const T&amp; rhs ) 
    {
        return !(lhs &lt; rhs);
    }
}
}}

===Notes===
[http://www.boost.org/doc/libs/release/libs/utility/operators.htm Boost.operators] provides a more versatile alternative to {{tt|std::rel_ops}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;utility&gt;

struct Foo {
    int n;
};

bool operator==(const Foo&amp; lhs, const Foo&amp; rhs)
{
    return lhs.n == rhs.n;
}

bool operator&lt;(const Foo&amp; lhs, const Foo&amp; rhs)
{
    return lhs.n &lt; rhs.n;
}

int main()
{
    Foo f1 = {1};
    Foo f2 = {2};
    using namespace std::rel_ops;

    std::cout &lt;&lt; std::boolalpha;
    std::cout &lt;&lt; &quot;not equal?     : &quot; &lt;&lt; (f1 != f2) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;greater?       : &quot; &lt;&lt; (f1 &gt; f2) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;less equal?    : &quot; &lt;&lt; (f1 &lt;= f2) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;greater equal? : &quot; &lt;&lt; (f1 &gt;= f2) &lt;&lt; '\n';
}
 | output=
not equal?     : true
greater?       : false
less equal?    : true
greater equal? : false
}}

[[de:cpp/utility/rel ops/operator cmp]]
[[es:cpp/utility/rel ops/operator cmp]]
[[fr:cpp/utility/rel ops/operator cmp]]
[[it:cpp/utility/rel ops/operator cmp]]
[[ja:cpp/utility/rel ops/operator cmp]]
[[pt:cpp/utility/rel ops/operator cmp]]
[[ru:cpp/utility/rel ops/operator cmp]]
[[zh:cpp/utility/rel ops/operator cmp]]</text>
      <sha1>kog0che3lckdxbnkmxtqupa5ogr3l3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rel ops/operator ge</title>
    <ns>0</ns>
    <id>2998</id>
    <redirect title="cpp/utility/rel ops/operator cmp" />
    <revision>
      <id>15431</id>
      <parentid>11306</parentid>
      <timestamp>2011-12-09T14:57:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/rel ops/operator cmp]]</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/utility/rel_ops/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rel ops/operator gt</title>
    <ns>0</ns>
    <id>2996</id>
    <redirect title="cpp/utility/rel ops/operator cmp" />
    <revision>
      <id>15429</id>
      <parentid>11305</parentid>
      <timestamp>2011-12-09T14:57:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/rel ops/operator cmp]]</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/utility/rel_ops/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rel ops/operator le</title>
    <ns>0</ns>
    <id>2997</id>
    <redirect title="cpp/utility/rel ops/operator cmp" />
    <revision>
      <id>15430</id>
      <parentid>11303</parentid>
      <timestamp>2011-12-09T14:57:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/rel ops/operator cmp]]</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/utility/rel_ops/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rel ops/operator not eq</title>
    <ns>0</ns>
    <id>2994</id>
    <redirect title="cpp/utility/rel ops/operator cmp" />
    <revision>
      <id>15428</id>
      <parentid>11304</parentid>
      <timestamp>2011-12-09T14:57:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/rel ops/operator cmp]]</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/utility/rel_ops/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rtti</title>
    <ns>0</ns>
    <id>1785</id>
    <redirect title="cpp/types" />
    <revision>
      <id>4894</id>
      <parentid>4893</parentid>
      <timestamp>2011-07-07T12:42:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rtti/type index</title>
    <ns>0</ns>
    <id>2169</id>
    <redirect title="cpp/types/type index" />
    <revision>
      <id>4888</id>
      <timestamp>2011-07-07T12:37:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/rtti/type index]] to [[cpp/types/type index]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/types/type index]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/rtti/type info</title>
    <ns>0</ns>
    <id>2170</id>
    <redirect title="cpp/types/type info" />
    <revision>
      <id>4891</id>
      <timestamp>2011-07-07T12:38:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/rtti/type info]] to [[cpp/types/type info]]</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[cpp/types/type info]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/swap</title>
    <ns>0</ns>
    <id>13086</id>
    <redirect title="cpp/algorithm/swap" />
    <revision>
      <id>66380</id>
      <timestamp>2013-11-15T17:43:17Z</timestamp>
      <contributor>
        <ip>208.180.238.130</ip>
      </contributor>
      <comment>C++ swap is defined in utility, not algorithm, but create a redirect back to the algorithm/swap page.</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[cpp/algorithm/swap]]</text>
      <sha1>nn81ger25bkl2f3nk56x3pndxz4zk4z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/to chars</title>
    <ns>0</ns>
    <id>15733</id>
    <revision>
      <id>92142</id>
      <parentid>89166</parentid>
      <timestamp>2017-04-08T03:37:04Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <comment>link to zh</comment>
      <text xml:space="preserve" bytes="4997">{{cpp/title|to_chars}}
{{cpp/utility/navbar}}
{{dcl begin}}
{{dcl header | utility}}
{{dcl | num=1 | since=c++17 |
std::to_chars_result to_chars(char* first, char* last,
                              /*see below*/ value, int base {{=}} 10);
}}
{{dcl | num=2 | since=c++17|
std::to_chars_result to_chars(char* first, char* last, float       value);
std::to_chars_result to_chars(char* first, char* last, double      value);
std::to_chars_result to_chars(char* first, char* last, long double value);
}}
{{dcl | num=3 | since=c++17|
std::to_chars_result to_chars(char* first, char* last, float       value,
                              std::chars_format fmt);
std::to_chars_result to_chars(char* first, char* last, double      value,
                              std::chars_format fmt);
std::to_chars_result to_chars(char* first, char* last, long double value,
                              std::chars_format fmt);
}}
{{dcl | num=4 | since=c++17|
std::to_chars_result to_chars(char* first, char* last, float       value,
                              std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, double      value,
                              std::chars_format fmt, int precision);
std::to_chars_result to_chars(char* first, char* last, long double value,
                              std::chars_format fmt, int precision);
}}
{{dcl | num=5 | since=c++17 |
struct to_chars_result {
    char* ptr;
    std::error_code ec;
};
}}
{{dcl end}}

Converts {{tt|value}} into a character string by successively filling the range {{tt|[first, last)}}, where {{tt|[first, last)}} is required to be a valid range.

@1@ Integer formatters: {{tt|value}} is converted to a string of digits in the given {{tt|base}} (with no redundant leading zeroes). Digits in the range {{tt|10..35}} (inclusive) are represented as lowercase characters {{tt|a..z}}. If value is less than zero, the representation starts with a minus sign. The library provides overloads for all signed and unsigned integer types and for the type {{tt|char}} as the type of the parameter {{tt|value}}.

@2@ value is converted to a string as if by {{lc|std::sprintf}} in the default (&quot;C&quot;) locale. The conversion specifier is {{c|f}} or {{c|e}} (resolving in favor of {{c|f}} in case of a tie), chosen according to the requirement for a shortest representation: the string representation consists of the smallest number of characters such that there is at least one digit before the radix point (if present) and parsing the representation using the corresponding {{lc|std::from_chars}} function recovers value exactly.

@3@ same as {{v|2}}, but the conversion specified for the as-if printf is {{c|f}} if {{tt|fmt}} is {{ltt|cpp/utility/chars_format|std::chars_format::fixed}}, {{c|e}} if {{tt|fmt}} is {{ltt|cpp/utility/chars_format|std::chars_format::scientific}}, {{c|a}} (but without leading &quot;0x&quot; in the result) if {{tt|fmt}} is {{ltt|cpp/utility/chars_format|std::chars_format::hex}}, and {{c|g}} if {{tt|fmt}} is {{ltt|cpp/utility/chars_format|chars_format::general}}.

@4@ same as {{v|3}}, except the precision is specified by the parameter {{tt|precision}} rather than by the shortest representation requirement.

@5@ The return type (see Return value below)

===Parameters===
{{par begin}}
{{par | first, last | character range to write to}}
{{par | value | the value to convert to its string representation }}
{{par | base | integer base to use: a value between 2 and 36 (inclusive).}}
{{par | fmt | floating-point formatting to use, a bitmask of type {{ltt|cpp/utility/chars_format|std::chars_format}}}}
{{par | precision | floating-point precision to use}}
{{par end}}

===Return value===
On success, returns a value of type {{tt|to_chars_result}} such that {{tt|ec}} is {{tt|false}} when converted to {{tt|bool}} and {{tt|ptr}} is the one-past-the-end pointer of the characters written.

On error, returns a value of type {{tt|to_chars_result}} holding {{lc|std::errc::value_too_large}} in {{tt|ec}}, a copy of the value {{tt|last}} in {{tt|ptr}}, and leaves the contents of the range {{tt|[first, last)}} in unspecified state.

===Exceptions===
(none)

===Notes===
Unlike other formatting functions in C++ and C libraries, {{tt|std::to_chars}} is locale-independent, non-allocating, and non-throwing. Only a small subset of formatting policies used by other libraries (such as {{lc|std::sprintf}}) is provided. This is intended to allow the fastest possible implementation that is useful in common high-throughput contexts such as text-based interchange (JSON or XML).

The guarantee that {{lc|std::from_chars}} can recover every floating-point value formatted by {{tt|to_chars}} exactly is only provided if both functions are from the same implementation.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/string/basic_string/dsc to_string}}
{{dsc inc | cpp/io/c/dsc fprintf}}
{{dsc inc | cpp/io/basic_ostream/dsc operator_ltlt}}
{{dsc end}}

{{langlinks|zh}}</text>
      <sha1>gwcv5j4de3vz9l5suf2oifavgcra11u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple</title>
    <ns>0</ns>
    <id>2379</id>
    <revision>
      <id>91973</id>
      <parentid>89374</parentid>
      <timestamp>2017-03-31T21:53:14Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2796</comment>
      <text xml:space="preserve" bytes="3159">{{cpp/title|tuple}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl | since=c++11 | 1=
template&lt; class... Types &gt;
class tuple;
}}
{{dcl end}}

Class template {{tt|std::tuple}} is a fixed-size collection of heterogeneous values. It is a generalization of {{lc|std::pair}}.

{{rrev|since=c++17|If {{c|(std::is_trivially_destructible_v&lt;Types&gt; &amp;&amp; ...)}} is {{c|true}}, the destructor of {{tt|tuple}} is trivial.}}

===Template parameters===
{{par begin}}
{{par | Types... | the types of the elements that the tuple stores. Empty list is supported. }}
{{par end}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | cpp/utility/tuple/tuple | constructs a new {{tt|tuple}} }}
{{dsc mem fun | cpp/utility/tuple/operator{{=}} | assigns the contents of one {{tt|tuple}} to another}}
{{dsc mem fun | cpp/utility/tuple/swap | swaps the contents of two {{tt|tuple}}s }}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tuple_cat}}
{{dsc inc | cpp/utility/tuple/dsc get}}
{{dsc inc | cpp/utility/tuple/dsc operator_cmp}}
{{dsc inc | cpp/utility/tuple/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc tuple_size}}
{{dsc inc | cpp/utility/tuple/dsc tuple_element}}
{{dsc inc | cpp/utility/tuple/dsc uses_allocator}}
{{dsc inc | cpp/utility/tuple/dsc ignore}}
{{dsc end}}

===Notes===
Until C++17, a function could not return a tuple using list-initialization:
{{source|1=
std::tuple&lt;int, int&gt; foo_tuple() 
{
  return {1, -1};  // Error until C++17
  return std::make_tuple(1, -1); // Always works
}
}} &lt;!-- N4387, voted in just now--&gt;

===Example===
{{example |
 | code=
#include &lt;tuple&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;stdexcept&gt;

std::tuple&lt;double, char, std::string&gt; get_student(int id)
{
    if (id == 0) return std::make_tuple(3.8, 'A', &quot;Lisa Simpson&quot;);
    if (id == 1) return std::make_tuple(2.9, 'C', &quot;Milhouse Van Houten&quot;);
    if (id == 2) return std::make_tuple(1.7, 'D', &quot;Ralph Wiggum&quot;);
    throw std::invalid_argument(&quot;id&quot;);
}

int main()
{
    auto student0 = get_student(0);
    std::cout &lt;&lt; &quot;ID: 0, &quot;
              &lt;&lt; &quot;GPA: &quot; &lt;&lt; std::get&lt;0&gt;(student0) &lt;&lt; &quot;, &quot;
              &lt;&lt; &quot;grade: &quot; &lt;&lt; std::get&lt;1&gt;(student0) &lt;&lt; &quot;, &quot;
              &lt;&lt; &quot;name: &quot; &lt;&lt; std::get&lt;2&gt;(student0) &lt;&lt; '\n';

    double gpa1;
    char grade1;
    std::string name1;
    std::tie(gpa1, grade1, name1) = get_student(1);
    std::cout &lt;&lt; &quot;ID: 1, &quot;
              &lt;&lt; &quot;GPA: &quot; &lt;&lt; gpa1 &lt;&lt; &quot;, &quot;
              &lt;&lt; &quot;grade: &quot; &lt;&lt; grade1 &lt;&lt; &quot;, &quot;
              &lt;&lt; &quot;name: &quot; &lt;&lt; name1 &lt;&lt; '\n';
} | output=
ID: 0, GPA: 3.8, grade: A, name: Lisa Simpson
ID: 1, GPA: 2.9, grade: C, name: Milhouse Van Houten
}}

===References===
{{ref std c++11}}
{{ref std | section=20.4 | title=Tuples | id=tuple}}
{{ref std end}}

[[de:cpp/utility/tuple]]
[[es:cpp/utility/tuple]]
[[fr:cpp/utility/tuple]]
[[it:cpp/utility/tuple]]
[[ja:cpp/utility/tuple]]
[[ko:cpp/utility/tuple]]
[[pt:cpp/utility/tuple]]
[[ru:cpp/utility/tuple]]
[[zh:cpp/utility/tuple]]</text>
      <sha1>fwd2imlfj77d301wtpbhst3hphpfq1l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/forward as tuple</title>
    <ns>0</ns>
    <id>2681</id>
    <revision>
      <id>91415</id>
      <parentid>84020</parentid>
      <timestamp>2017-03-31T19:43:13Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2241">{{cpp/title|forward_as_tuple}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class... Types &gt;
tuple&lt;Types&amp;&amp;...&gt; forward_as_tuple( Types&amp;&amp;... args );
}}
{{dcl | since=c++14 | 1=
template&lt; class... Types &gt;
constexpr tuple&lt;Types&amp;&amp;...&gt; forward_as_tuple( Types&amp;&amp;... args );
}}
{{dcl rev end}}
{{dcl end}}

Constructs a tuple of references to the arguments in {{tt|args}} suitable for forwarding as an argument to a function. The tuple has rvalue reference data members when rvalues are used as arguments, and otherwise has lvalue reference data members.

===Parameters===
{{par begin}}
{{par | args | zero or more arguments to construct the tuple from}}
{{par end}}

===Return value===
A {{lc|std::tuple}} object created as if by {{c|std::tuple&lt;Types&amp;&amp;...&gt;(std::forward&lt;Types&gt;(args)...)}}

===Exceptions===
{{unreviewed noexcept}}

===Notes===
If the arguments are temporaries, {{tt|forward_as_tuple}} does not extend their lifetime; they have to be used before the end of the full expression.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;tuple&gt;
#include &lt;string&gt;

int main()
{
    std::map&lt;int, std::string&gt; m;

    m.emplace(std::piecewise_construct,
              std::forward_as_tuple(10),
              std::forward_as_tuple(20, 'a'));
    std::cout &lt;&lt; &quot;m[10] = &quot; &lt;&lt; m[10] &lt;&lt; '\n';

    // The following is an error: it produces a
    // std::tuple&lt;int&amp;&amp;, char&amp;&amp;&gt; holding two dangling references.
    //
    // auto t = std::forward_as_tuple(20, 'a');
    // m.emplace(std::piecewise_construct, std::forward_as_tuple(10), t);
}
 | output=
m[10] = aaaaaaaaaaaaaaaaaaaa
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc inc | cpp/utility/tuple/dsc tuple_cat}}
{{dsc inc | cpp/utility/dsc apply}}
{{dsc end}}

[[de:cpp/utility/tuple/forward as tuple]]
[[es:cpp/utility/tuple/forward as tuple]]
[[fr:cpp/utility/tuple/forward as tuple]]
[[it:cpp/utility/tuple/forward as tuple]]
[[ja:cpp/utility/tuple/forward as tuple]]
[[pt:cpp/utility/tuple/forward as tuple]]
[[ru:cpp/utility/tuple/forward as tuple]]
[[zh:cpp/utility/tuple/forward as tuple]]</text>
      <sha1>6sdblackw5te1xetef1wkse1xozo9g8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/get</title>
    <ns>0</ns>
    <id>2692</id>
    <revision>
      <id>91691</id>
      <parentid>86743</parentid>
      <timestamp>2017-03-31T19:55:06Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="3193">{{cpp/title | get&lt;small&gt;(std::tuple)&lt;/small&gt;}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl rev begin| num=1}}
{{dcl | since=c++11 | until=c++14 |
template&lt; std::size_t I, class... Types &gt;
typename std::tuple_element&lt;I, tuple&lt;Types...&gt; &gt;::type&amp;
    get( tuple&lt;Types...&gt;&amp; t );
}}
{{dcl | since=c++14 |
template&lt; std::size_t I, class... Types &gt;
constexpr std::tuple_element_t&lt;I, tuple&lt;Types...&gt; &gt;&amp;
    get( tuple&lt;Types...&gt;&amp; t );
}}
{{dcl rev end}}
{{dcl rev begin | num=2}}
{{dcl | since=c++11 | until=c++14 |
template&lt; std::size_t I, class... Types &gt;
typename std::tuple_element&lt;I, tuple&lt;Types...&gt; &gt;::type&amp;&amp;
    get( tuple&lt;Types...&gt;&amp;&amp; t );
}}
{{dcl | since=c++14 |
template&lt; std::size_t I, class... Types &gt;
constexpr std::tuple_element_t&lt;I, tuple&lt;Types...&gt; &gt;&amp;&amp;
    get( tuple&lt;Types...&gt;&amp;&amp; t );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl| since=c++11 | until=c++14 |
template&lt; std::size_t I, class... Types &gt;
typename std::tuple_element&lt;I, tuple&lt;Types...&gt; &gt;::type const&amp;
    get( const tuple&lt;Types...&gt;&amp; t );
}}
{{dcl | since=c++14 |
template&lt; std::size_t I, class... Types &gt;
constexpr std::tuple_element_t&lt;I, tuple&lt;Types...&gt; &gt;const&amp;
    get( const tuple&lt;Types...&gt;&amp; t );
}}
{{dcl rev end}}
{{dcl | num=4 | since=c++17 |
template&lt; std::size_t I, class... Types &gt;
constexpr std::tuple_element_t&lt;I, tuple&lt;Types...&gt; &gt;const&amp;&amp;
    get( const tuple&lt;Types...&gt;&amp;&amp; t );
}}
{{dcl | num=5 | since=c++14 |
template&lt; class T, class... Types &gt;
constexpr T&amp; get(tuple&lt;Types...&gt;&amp; t);
}}
{{dcl | num=6 | since=c++14 |
template&lt; class T, class... Types &gt;
constexpr T&amp;&amp; get(tuple&lt;Types...&gt;&amp;&amp; t);
}}
{{dcl | num=7 | since=c++14 |
template&lt; class T, class... Types &gt;
constexpr const T&amp; get(const tuple&lt;Types...&gt;&amp; t);
}}
{{dcl | num=8 | since=c++17 |
template&lt; class T, class... Types &gt;
constexpr const T&amp;&amp; get(const tuple&lt;Types...&gt;&amp;&amp; t);
}}
{{dcl end}}

@1-4@ Extracts the {{tt|Ith}} element from the tuple. {{tt|I}} is an integer value in {{tt|[0, sizeof...(Types))}}.
@5-8@ Extracts the element of the tuple {{tt|t}} whose type is {{tt|T}}. Fails to compile if the tuple has more than one element of that type.

===Parameters===
{{par begin}}
{{par | t | tuple whose contents to extract}}
{{par end}} 

===Return value===

A reference to the selected element of {{tt|t}}.

===Exceptions===

{{unreviewed noexcept}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;tuple&gt;

int main()
{
    auto t = std::make_tuple(1, &quot;Foo&quot;, 3.14);
    // index-based access
    std::cout &lt;&lt; &quot;(&quot; &lt;&lt; std::get&lt;0&gt;(t) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;1&gt;(t)
              &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;2&gt;(t) &lt;&lt; &quot;)\n&quot;;
    // type-based access
    std::cout &lt;&lt; &quot;(&quot; &lt;&lt; std::get&lt;int&gt;(t) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;const char*&gt;(t)
              &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;double&gt;(t) &lt;&lt; &quot;)\n&quot;;
}
 | output=
(1, Foo, 3.14)
(1, Foo, 3.14)
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/container/array/dsc get}}
{{dsc inc | cpp/utility/pair/dsc get}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc end}}

[[de:cpp/utility/tuple/get]]
[[es:cpp/utility/tuple/get]]
[[fr:cpp/utility/tuple/get]]
[[it:cpp/utility/tuple/get]]
[[ja:cpp/utility/tuple/get]]
[[pt:cpp/utility/tuple/get]]
[[ru:cpp/utility/tuple/get]]
[[zh:cpp/utility/tuple/get]]</text>
      <sha1>e493c3y7jh4u9pxf3eh6p8vfmg4zwou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/ignore</title>
    <ns>0</ns>
    <id>2689</id>
    <revision>
      <id>90936</id>
      <parentid>88303</parentid>
      <timestamp>2017-03-14T12:46:57Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>inline</comment>
      <text xml:space="preserve" bytes="1222">{{cpp/title|ignore}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl | since=c++11 | until=c++17 | 1=
const /*unspecified*/ ignore;
}}
{{dcl | since=c++17 | 1=
inline constexpr /*unspecified*/ ignore;
}}
{{dcl end}}

An object of unspecified type such that any value can be assigned to it with no effect. Intended for use with {{lc|std::tie}} when unpacking a {{lc|std::tuple}}, as a placeholder for the arguments that are not used.

===Example===
{{example
 | unpack a pair returned by set.insert(), but only save the boolean.
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;set&gt;
#include &lt;tuple&gt;

int main()
{
    std::set&lt;std::string&gt; set_of_str;
    bool inserted;
    std::tie(std::ignore, inserted) = set_of_str.insert(&quot;Test&quot;);
    if (inserted) {
        std::cout &lt;&lt; &quot;Value was inserted successfully\n&quot;;
    }
}
 | output=
Value was inserted successfully
}}

{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc end}}

[[de:cpp/utility/tuple/ignore]]
[[es:cpp/utility/tuple/ignore]]
[[fr:cpp/utility/tuple/ignore]]
[[it:cpp/utility/tuple/ignore]]
[[ja:cpp/utility/tuple/ignore]]
[[pt:cpp/utility/tuple/ignore]]
[[ru:cpp/utility/tuple/ignore]]
[[zh:cpp/utility/tuple/ignore]]</text>
      <sha1>ha7enlo6d2ljzg0xjbs6zob5jzahlbd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/make tuple</title>
    <ns>0</ns>
    <id>2678</id>
    <revision>
      <id>87317</id>
      <parentid>84021</parentid>
      <timestamp>2016-08-11T09:55:40Z</timestamp>
      <contributor>
        <ip>141.3.88.142</ip>
      </contributor>
      <comment>the code says only &quot;t&quot;</comment>
      <text xml:space="preserve" bytes="2744">{{cpp/title|make_tuple}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class... Types &gt;
tuple&lt;VTypes...&gt; make_tuple( Types&amp;&amp;... args );
}}
{{dcl | since=c++14 | 1=
template&lt; class... Types &gt;
constexpr tuple&lt;VTypes...&gt; make_tuple( Types&amp;&amp;... args );
}}
{{dcl rev end}}
{{dcl end}}

Creates a tuple object, deducing the target type from the types of arguments.

For each {{tt|Ti}} in {{tt|Types...}}, the corresponding type {{tt|Vi}} in {{tt|Vtypes...}} is {{c|std::decay&lt;Ti&gt;::type}} unless application of {{lc|std::decay}} results in {{c|std::reference_wrapper&lt;X&gt;}} for some type {{tt|X}}, in which case the deduced type is {{tt|X&amp;}}. 

===Parameters===
{{par begin}}
{{par | args | zero or more arguments to construct the tuple from}}
{{par end}}

===Return value===
A {{lc|std::tuple}} object containing the given values, created as if by {{c|std::tuple&lt;VTypes...&gt;(std::forward&lt;Types&gt;(t)...).}}

===Possible implementation===
{{eq fun | 1=
template &lt;class T&gt;
struct unwrap_refwrapper
{
    using type = T;
};

template &lt;class T&gt;
struct unwrap_refwrapper&lt;std::reference_wrapper&lt;T&gt;&gt;
{
    using type = T&amp;;
};

template &lt;class T&gt;
using special_decay_t = typename unwrap_refwrapper&lt;typename std::decay&lt;T&gt;::type&gt;::type;

template &lt;class... Types&gt;
auto make_tuple(Types&amp;&amp;... args)
{
    return std::tuple&lt;special_decay_t&lt;Types&gt;...&gt;(std::forward&lt;Types&gt;(args)...);
}
}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;
#include &lt;functional&gt;

std::tuple&lt;int, int&gt; f() // this function returns multiple values
{
    int x = 5;
    return std::make_tuple(x, 7); // return {x,7}; in C++17
}

int main()
{
    // heterogeneous tuple construction
    int n = 1;
    auto t = std::make_tuple(10, &quot;Test&quot;, 3.14, std::ref(n), n);
    n = 7;
    std::cout &lt;&lt; &quot;The value of t is &quot;  &lt;&lt; &quot;(&quot;
              &lt;&lt; std::get&lt;0&gt;(t) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;1&gt;(t) &lt;&lt; &quot;, &quot;
              &lt;&lt; std::get&lt;2&gt;(t) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;3&gt;(t) &lt;&lt; &quot;, &quot;
              &lt;&lt; std::get&lt;4&gt;(t) &lt;&lt; &quot;)\n&quot;;

    // function returning multiple values
    int a, b;
    std::tie(a, b) = f();
    std::cout &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b &lt;&lt; &quot;\n&quot;;
}
 | output=
The value of t is (10, Test, 3.14, 7, 1)
5 7
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tuple_cat}}
{{dsc inc | cpp/utility/dsc apply}}
{{dsc end}}

[[de:cpp/utility/tuple/make tuple]]
[[es:cpp/utility/tuple/make tuple]]
[[fr:cpp/utility/tuple/make tuple]]
[[it:cpp/utility/tuple/make tuple]]
[[ja:cpp/utility/tuple/make tuple]]
[[pt:cpp/utility/tuple/make tuple]]
[[ru:cpp/utility/tuple/make tuple]]
[[zh:cpp/utility/tuple/make tuple]]</text>
      <sha1>bj155lpun372gdgbgoeusg8szvfmvtd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/operator cmp</title>
    <ns>0</ns>
    <id>2690</id>
    <revision>
      <id>89935</id>
      <parentid>89934</parentid>
      <timestamp>2017-01-30T23:34:37Z</timestamp>
      <contributor>
        <ip>131.107.174.169</ip>
      </contributor>
      <comment>Undo revision 89934 by [[Special:Contributions/131.107.174.169|131.107.174.169]] ([[User talk:131.107.174.169|talk]])</comment>
      <text xml:space="preserve" bytes="4735">{{title | 1=operator==,!=,&lt;,&lt;=,&gt;,&gt;=&lt;small&gt;(std::tuple&lt;/small&gt;)}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl rev begin}}
{{dcl | num=1 | since=c++11 | until=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
bool operator==( const tuple&lt;TTypes...&gt;&amp; lhs, 
                 const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl | num=1 | since=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
constexpr bool operator==( const tuple&lt;TTypes...&gt;&amp; lhs, 
                           const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=2 | since=c++11 | until=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
bool operator!=( const tuple&lt;TTypes...&gt;&amp; lhs,
                 const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl | num=2 | since=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
constexpr bool operator!=( const tuple&lt;TTypes...&gt;&amp; lhs,
                           const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=3 | since=c++11 | until=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
bool operator&lt;( const tuple&lt;TTypes...&gt;&amp; lhs,
                const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl | num=3 | since=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
constexpr bool operator&lt;( const tuple&lt;TTypes...&gt;&amp; lhs,
                          const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=4 | since=c++11 | until=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
bool operator&lt;=( const tuple&lt;TTypes...&gt;&amp; lhs,
                 const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl | num=4 | since=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
constexpr bool operator&lt;=( const tuple&lt;TTypes...&gt;&amp; lhs,
                           const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=5 | since=c++11 | until=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
bool operator&gt;( const tuple&lt;TTypes...&gt;&amp; lhs,
                const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl | num=5 | since=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
constexpr bool operator&gt;( const tuple&lt;TTypes...&gt;&amp; lhs,
                          const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl rev begin}}
{{dcl | num=6 | since=c++11 | until=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
bool operator&gt;=( const tuple&lt;TTypes...&gt;&amp; lhs, 
                 const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl | num=6 | since=c++14 | 1=
template&lt; class... TTypes, class... UTypes &gt;
constexpr bool operator&gt;=( const tuple&lt;TTypes...&gt;&amp; lhs, 
                           const tuple&lt;UTypes...&gt;&amp; rhs );
}}
{{dcl rev end}}
{{dcl end}}

1-2) Compares every element of the tuple {{tt|lhs}} with the corresponding element of the tuple {{tt|rhs}}.

3-6) Compares {{tt|lhs}} and {{tt|rhs}} lexicographically, that is, compares the first elements, if they are equivalent, compares the second elements, if those are equivalent, compares the third elements, and so on.

All comparison operators are short-circuited; they do not access tuple elements beyond what is necessary to determine the result of the comparison.

===Parameters===
{{par begin}}
{{par | lhs, rhs | tuples to compare }}
{{par end}} 

===Return value===

1) {{c|true}} if {{c|1=std::get&lt;i&gt;(lhs) == std::get&lt;i&gt;(rhs)}} for all i in {{tt|[0, sizeof...(Types))}}, otherwise {{c|false}}. For two empty tuples returns {{c|true}}.

2) {{c|1=!(lhs == rhs)}}

3) {{c|1=(bool)(std::get&lt;0&gt;(lhs) &lt; std::get&lt;0&gt;(rhs)) {{!!}} (!(bool)(std::get&lt;0&gt;(rhs) &lt; std::get&lt;0&gt;(lhs)) &amp;&amp; lhstail &lt; rhstail)}}, where {{tt|lhstail}} is lhs without its first element, and {{tt|rhstail}} is rhs without its first element. For two empty tuples, returns {{c|false}}.

4) {{c|!(rhs &lt; lhs)}}

5) {{c|rhs &lt; lhs}}

6) {{c|!(lhs &lt; rhs)}}

===Example===
{{example
 | Because operator&lt; is defined for tuples, containers of tuples can be sorted.
 | code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
int main()
{
    std::vector&lt;std::tuple&lt;int, std::string, float&gt;&gt; v;
    v.emplace_back(2, &quot;baz&quot;, -0.1);
    v.emplace_back(2, &quot;bar&quot;, 3.14);
    v.emplace_back(1, &quot;foo&quot;, 100.1);
    std::sort(v.begin(), v.end());

    for(auto p: v) {
        std::cout &lt;&lt; &quot;(&quot; &lt;&lt; std::get&lt;0&gt;(p) &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;1&gt;(p)
                  &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;2&gt;(p) &lt;&lt; &quot;)\n&quot;;
    }
}
 | output=
(1, foo, 100.1)
(2, bar, 3.14)
(2, baz, -0.1)
}}

===See also===

{{dsc begin}}
{{dsc end}}

[[de:cpp/utility/tuple/operator cmp]]
[[es:cpp/utility/tuple/operator cmp]]
[[fr:cpp/utility/tuple/operator cmp]]
[[it:cpp/utility/tuple/operator cmp]]
[[ja:cpp/utility/tuple/operator cmp]]
[[pt:cpp/utility/tuple/operator cmp]]
[[ru:cpp/utility/tuple/operator cmp]]
[[zh:cpp/utility/tuple/operator cmp]]</text>
      <sha1>4ipj3untg3bhygfmjbh6akx1mn19azv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/operator comp</title>
    <ns>0</ns>
    <id>4218</id>
    <redirect title="cpp/utility/tuple/operator cmp" />
    <revision>
      <id>15281</id>
      <timestamp>2011-12-08T01:22:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/tuple/operator comp]] to [[cpp/utility/tuple/operator cmp]]: comp-&gt;cmp</comment>
      <text xml:space="preserve" bytes="44">#REDIRECT [[cpp/utility/tuple/operator cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/operator=</title>
    <ns>0</ns>
    <id>2676</id>
    <revision>
      <id>91836</id>
      <parentid>89106</parentid>
      <timestamp>2017-03-31T19:59:25Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="5104">{{cpp/utility/tuple/title | operator{{=}}}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++11 | 1=
tuple&amp; operator=( const tuple&amp; other );
}}
{{dcl | num=2 | since=c++11 | 1=
tuple&amp; operator=( tuple&amp;&amp; other );
}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; class... UTypes &gt;
tuple&amp; operator=( const tuple&lt;UTypes...&gt;&amp; other );
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; class... UTypes &gt;
tuple&amp; operator=( tuple&lt;UTypes...&gt;&amp;&amp; other );
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; class U1, class U2 &gt;
tuple&amp; operator=( const pair&lt;U1,U2&gt;&amp; p );
}}
{{dcl | num=6 | since=c++11 | 1=
template&lt; class U1, class U2 &gt;
tuple&amp; operator=( pair&lt;U1,U2&gt;&amp;&amp; p );
}}
{{dcl end}}

Replaces the contents of the tuple with the contents of another tuple or a pair.

1) Copy assignment operator. Replaces each element with a copy of the corresponding element of {{tt|other}}.
 
2) Move assignment operator. Replaces each element with the corresponding element of {{tt|other}} using move semantics. 

3) For all {{tt|i}}, assigns {{c|std::get&lt;i&gt;(other)}} to {{c|std::get&lt;i&gt;(*this)}}.

4) For all {{tt|i}}, assigns {{c|std::forward&lt;Ui&gt;(std::get&lt;i&gt;(other))}} to {{c|std::get&lt;i&gt;(*this)}}. 

5) Assigns {{c|p.first}} to the first element of {{c|*this}} and {{c|p.second}} to the second element of {{c|*this}}.

6) Assigns {{c|std::forward&lt;U1&gt;(p.first)}} to the first element of {{c|*this}} and {{c|std::forward&lt;U2&gt;(p.second)}} to the second element of {{c|*this}}.

{{rev begin}}
{{rev | until=c++17 |
The behavior of these functions is undefined unless:
* For {{v|1}}, {{c|std::is_copy_assignable&lt;T_i&gt;::value}} is {{c|true}} for all {{tt|T_i}} in {{tt|Types}}.
* For {{v|2}}, {{c|std::is_move_assignable&lt;T_i&gt;::value}} is {{c|true}} for all {{tt|T_i}} in {{tt|Types}}.
* For {{v|3}}, {{c|1=sizeof...(UTypes) == sizeof...(Types)}} and {{c|std::is_assignable&lt;T_i&amp;, const U_i&amp;&gt;::value}} is {{c|true}} for all corresponding pairs of types {{tt|T_i}} in {{tt|Types}} and {{tt|U_i}} in {{tt|UTypes}}.
* For {{v|4}}, {{c|1=sizeof...(UTypes) == sizeof...(Types)}} and {{c|std::is_assignable&lt;T_i&amp;, U_i&amp;&amp;&gt;::value}} is {{c|true}} for all corresponding pairs of types {{tt|T_i}} in {{tt|Types}} and {{tt|U_i}} in {{tt|UTypes}}.
* For {{v|5}}, {{c|1=sizeof...(Types) == 2}} and {{c|std::is_assignable&lt;T_0&amp;, const U1&amp;&gt;::value}} and {{c|std::is_assignable&lt;T_1&amp;, const U2&amp;&gt;::value}} are both {{c|true}}, where {{tt|T_0}} and {{tt|T_1}} are the two types constituting {{tt|Types}}.
* For {{v|6}}, {{c|1=sizeof...(Types) == 2}} and {{c|std::is_assignable&lt;T_0&amp;, U1&amp;&amp;&gt;::value}} and {{c|std::is_assignable&lt;T_1&amp;, U2&amp;&amp;&gt;::value}} are both {{c|true}}, where {{tt|T_0}} and {{tt|T_1}} are the two types constituting {{tt|Types}}.
}}
{{rev | since=c++17 |
These functions do not participate in overload resolution (or, for the copy assignment operator, is defined as deleted) if any required assignment operation is invalid or if there is a size mismatch. Specifically:
* {{v|1}} is defined as deleted unless {{c|std::is_copy_assignable&lt;T_i&gt;::value}} is {{c|true}} for all {{tt|T_i}} in {{tt|Types}}.
* {{v|2}} does not participate in overload resolution unless {{c|std::is_move_assignable&lt;T_i&gt;::value}} is {{c|true}} for all {{tt|T_i}} in {{tt|Types}}.
* {{v|3}} does not participate in overload resolution unless {{c|1=sizeof...(UTypes) == sizeof...(Types)}} and {{c|std::is_assignable&lt;T_i&amp;, const U_i&amp;&gt;::value}} is {{c|true}} for all corresponding pairs of types {{tt|T_i}} in {{tt|Types}} and {{tt|U_i}} in {{tt|UTypes}}.
* {{v|4}} does not participate in overload resolution unless {{c|1=sizeof...(UTypes) == sizeof...(Types)}} and {{c|std::is_assignable&lt;T_i&amp;, U_i&amp;&amp;&gt;::value}} is {{c|true}} for all corresponding pairs of types {{tt|T_i}} in {{tt|Types}} and {{tt|U_i}} in {{tt|UTypes}}.
* {{v|5}} does not participate in overload resolution unless {{c|1=sizeof...(Types) == 2}}, {{c|std::is_assignable&lt;T_0&amp;, const U1&amp;&gt;::value}} and {{c|std::is_assignable&lt;T_1&amp;, const U2&amp;&gt;::value}} are both {{c|true}}, where {{tt|T_0}} and {{tt|T_1}} are the two types constituting {{tt|Types}}.
* {{v|6}} does not participate in overload resolution unless {{c|std::is_assignable&lt;T_0&amp;, U1&amp;&amp;&gt;::value}} and {{c|std::is_assignable&lt;T_1&amp;, U2&amp;&amp;&gt;::value}} are both {{c|true}}, where {{tt|T_0}} and {{tt|T_1}} are the two types constituting {{tt|Types}}.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | other | tuple to replace the contents of this tuple }}
{{par | p | pair to replace the contents of this 2-tuple }}
{{par end}} 

===Return value===
{{c|*this}}

===Exceptions===
1) (none)

2) {{unreviewed noexcept|
    is_nothrow_move_assignable&lt;T0&gt;::value &amp;&amp;
    is_nothrow_move_assignable&lt;T1&gt;::value &amp;&amp;
    is_nothrow_move_assignable&lt;T2&gt;::value &amp;&amp;
    ...
}}

3-6) (none)

===Example===
{{example
 | code=
 | output=
}}

===See also===

{{dsc begin}}
{{dsc end}}

[[de:cpp/utility/tuple/operator=]]
[[es:cpp/utility/tuple/operator=]]
[[fr:cpp/utility/tuple/operator=]]
[[it:cpp/utility/tuple/operator=]]
[[ja:cpp/utility/tuple/operator=]]
[[pt:cpp/utility/tuple/operator=]]
[[ru:cpp/utility/tuple/operator=]]
[[zh:cpp/utility/tuple/operator=]]</text>
      <sha1>sz0jy5bt5pj00z9a7wp4vgaxacvh9ge</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/std swap</title>
    <ns>0</ns>
    <id>3473</id>
    <redirect title="cpp/utility/tuple/swap2" />
    <revision>
      <id>13035</id>
      <timestamp>2011-11-03T18:42:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/tuple/std swap]] to [[cpp/utility/tuple/swap2]]: consistency</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/utility/tuple/swap2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/swap</title>
    <ns>0</ns>
    <id>2677</id>
    <revision>
      <id>92124</id>
      <parentid>91830</parentid>
      <timestamp>2017-04-05T22:36:29Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>this is for non-member swap</comment>
      <text xml:space="preserve" bytes="1586">{{cpp/utility/tuple/title | swap}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl | since=c++11 | 1=
void swap( tuple&amp; other );
}}
{{dcl end}}

Calls {{tt|swap}} (which might be {{lc|std::swap}}, or might be found via ADL) for each element in {{c|*this}} and its corresponding element in {{tt|other}}.

===Parameters===
{{par begin}}
{{par | other | tuple of values to swap }}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{rev begin}}
{{rev|until=c++17|
{{unreviewed noexcept|
    noexcept(swap(std::declval&lt;T0&amp;&gt;&gt;(), std::declval&lt;T0&amp;&gt;())) &amp;&amp;
    noexcept(swap(std::declval&lt;T1&amp;&gt;&gt;(), std::declval&lt;T1&amp;&gt;())) &amp;&amp;
    noexcept(swap(std::declval&lt;T2&amp;&gt;&gt;(), std::declval&lt;T2&amp;&gt;())) &amp;&amp;
    ...
}}
}}
{{rev|since=c++17|
{{unreviewed noexcept|
    std::is_nothrow_swappable&lt;T0&gt;::value &amp;&amp;
    std::is_nothrow_swappable&lt;T1&gt;::value &amp;&amp;
    std::is_nothrow_swappable&lt;T2&gt;::value &amp;&amp;
    ...
}}
}}
{{rev end}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;
#include &lt;string&gt;

int main()
{
    std::tuple&lt;int, std::string, float&gt; p1, p2;
    p1 = std::make_tuple(10, &quot;test&quot;, 3.14);
    p2.swap(p1);
    std::cout &lt;&lt; &quot;(&quot;  &lt;&lt; std::get&lt;0&gt;(p2)
              &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;1&gt;(p2)
              &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;2&gt;(p2) &lt;&lt; &quot;)\n&quot;;
}
 | output=
(10, test, 3.14)
}}

===See also===

{{dsc begin}}
{{dsc end}}

[[de:cpp/utility/tuple/swap]]
[[es:cpp/utility/tuple/swap]]
[[fr:cpp/utility/tuple/swap]]
[[it:cpp/utility/tuple/swap]]
[[ja:cpp/utility/tuple/swap]]
[[pt:cpp/utility/tuple/swap]]
[[ru:cpp/utility/tuple/swap]]
[[zh:cpp/utility/tuple/swap]]</text>
      <sha1>3lcxoxymtw56cne2o3g7vc0akxm9ere</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/swap2</title>
    <ns>0</ns>
    <id>2691</id>
    <revision>
      <id>92125</id>
      <parentid>91708</parentid>
      <timestamp>2017-04-05T22:37:04Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>Add SFINAE, merge noexcept</comment>
      <text xml:space="preserve" bytes="994">{{cpp/title | swap&lt;small&gt;(std::tuple)&lt;/small&gt;}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl | since=c++11 |
template&lt; class... Types &gt;
void swap( tuple&lt;Types...&gt;&amp; lhs, tuple&lt;Types...&gt;&amp; rhs ) noexcept(/* see below */);
}}
{{dcl end}}

Swaps the contents of {{tt|lhs}} and {{tt|rhs}}. Equivalent to {{c|lhs.swap(rhs)}}.

{{rev begin}}
{{rev|since=c++17|
This function does not participate in overload resolution unless {{c|std::is_swappable&lt;Ti&gt;::value}} is true for all i from 0 to {{tt|sizeof...(Types)}}.
}}
{{rev end}}

===Parameters===
{{par begin}}
{{par | lhs, rhs | tuples whose contents to swap}}
{{par end}} 

===Return value===
(none)

===Exceptions===
{{noexcept|noexcept(lhs.swap(rhs))}}

===See also===

{{dsc begin}}
{{dsc end}}

[[de:cpp/utility/tuple/swap2]]
[[es:cpp/utility/tuple/swap2]]
[[fr:cpp/utility/tuple/swap2]]
[[it:cpp/utility/tuple/swap2]]
[[ja:cpp/utility/tuple/swap2]]
[[pt:cpp/utility/tuple/swap2]]
[[ru:cpp/utility/tuple/swap2]]
[[zh:cpp/utility/tuple/swap2]]</text>
      <sha1>timkyhtmam11w7r7ic5196uqcn8yokv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/tie</title>
    <ns>0</ns>
    <id>2679</id>
    <revision>
      <id>91686</id>
      <parentid>79529</parentid>
      <timestamp>2017-03-31T19:54:51Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2237">{{cpp/title|tie}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |1=
template&lt; class... Types &gt;
tuple&lt;Types&amp;...&gt; tie( Types&amp;... args );
}}
{{dcl | since=c++14 |1=
template&lt; class... Types &gt;
constexpr tuple&lt;Types&amp;...&gt; tie( Types&amp;... args );
}}
{{dcl rev end}}
{{dcl end}}

Creates a tuple of lvalue references to its arguments or instances of {{lc|std::ignore}}.

===Parameters===
{{par begin}}
{{par | args | zero or more lvalue arguments to construct the tuple from}}
{{par end}}

===Return value===
A {{lc|std::tuple}} object containing lvalue references.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
{{tt|std::tie}} may be used to unpack a {{lc|std::pair}} because {{lc|std::tuple}} has a [[cpp/utility/tuple/operator{{=}}|converting assignment]] from pairs:
{{source|1=
bool result;
std::tie(std::ignore, result) = set.insert(value);
}}

===Example===
{{example
 | {{tt|std::tie}} can be used to introduce lexicographical comparison to a struct or to unpack a tuple:
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;set&gt;
#include &lt;tuple&gt;

struct S {
    int n;
    std::string s;
    float d;
    bool operator&lt;(const S&amp; rhs) const
    {
        // compares n to rhs.n,
        // then s to rhs.s,
        // then d to rhs.d
        return std::tie(n, s, d) &lt; std::tie(rhs.n, rhs.s, rhs.d);
    }
};

int main()
{
    std::set&lt;S&gt; set_of_s; // S is LessThanComparable

    S value{42, &quot;Test&quot;, 3.14};
    std::set&lt;S&gt;::iterator iter;
    bool inserted;

    // unpacks the return value of insert into iter and inserted
    std::tie(iter, inserted) = set_of_s.insert(value);

    if (inserted)
        std::cout &lt;&lt; &quot;Value was inserted successfully\n&quot;;
}
 | output=
Value was inserted successfully
}}

{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tuple_cat}}
{{dsc inc | cpp/utility/tuple/dsc ignore}}
{{dsc end}}

[[de:cpp/utility/tuple/tie]]
[[es:cpp/utility/tuple/tie]]
[[fr:cpp/utility/tuple/tie]]
[[it:cpp/utility/tuple/tie]]
[[ja:cpp/utility/tuple/tie]]
[[pt:cpp/utility/tuple/tie]]
[[ru:cpp/utility/tuple/tie]]
[[zh:cpp/utility/tuple/tie]]</text>
      <sha1>a55dpafokgxxfvqmtz7n8q75rehuw6q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/tuple</title>
    <ns>0</ns>
    <id>2675</id>
    <revision>
      <id>88370</id>
      <parentid>87633</parentid>
      <timestamp>2016-11-17T05:37:35Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>make conditionally-explicit into separate signatures</comment>
      <text xml:space="preserve" bytes="14571">{{cpp/utility/tuple/title | tuple}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple }}
{{dcl rev begin|num=1}}
{{dcl | since=c++11 | until=c++17 | 1=
constexpr tuple();
}}
{{dcl | since=c++17| 1=
/*EXPLICIT*/ constexpr tuple();
}}
{{dcl rev end}}
{{dcl rev begin|num=2}}
{{dcl | since=c++11 | until=c++14 | 1=
explicit tuple( const Types&amp;... args );
}}
{{dcl | since=c++14 | until=c++17 | 1=
explicit constexpr tuple( const Types&amp;... args );
}}
{{dcl | since=c++17 | 1=
/*EXPLICIT*/ constexpr tuple( const Types&amp;... args );
}}
{{dcl rev end}}
{{dcl rev begin|num=3}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class... UTypes &gt;
explicit tuple( UTypes&amp;&amp;... args );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template&lt; class... UTypes &gt;
explicit constexpr tuple( UTypes&amp;&amp;... args );
}}
{{dcl | since=c++17 | 1=
template&lt; class... UTypes &gt;
/*EXPLICIT*/ constexpr tuple( UTypes&amp;&amp;... args );
}}
{{dcl rev end}}
{{dcl rev begin|num=4}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class... UTypes &gt;
tuple( const tuple&lt;UTypes...&gt;&amp; other );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template&lt; class... UTypes &gt;
constexpr tuple( const tuple&lt;UTypes...&gt;&amp; other );
}}
{{dcl | since=c++17 | 1=
template&lt; class... UTypes &gt;
/*EXPLICIT*/ constexpr tuple( const tuple&lt;UTypes...&gt;&amp; other );
}}
{{dcl rev end}}
{{dcl rev begin|num=5}}
{{dcl | since=c++11 | until=c++14 | 1=
template &lt;class... UTypes&gt;
tuple( tuple&lt;UTypes...&gt;&amp;&amp; other );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template &lt;class... UTypes&gt;
constexpr tuple( tuple&lt;UTypes...&gt;&amp;&amp; other );
}}
{{dcl | since=c++17 | 1=
template &lt;class... UTypes&gt;
/*EXPLICIT*/ constexpr tuple( tuple&lt;UTypes...&gt;&amp;&amp; other );
}}
{{dcl rev end}}
{{dcl rev begin|num=6}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class U1, class U2 &gt;
tuple( const pair&lt;U1,U2&gt;&amp; p );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template&lt; class U1, class U2 &gt;
constexpr tuple( const pair&lt;U1,U2&gt;&amp; p );
}}
{{dcl | since=c++17 | 1=
template&lt; class U1, class U2 &gt;
/*EXPLICIT*/ constexpr tuple( const pair&lt;U1,U2&gt;&amp; p );
}}
{{dcl rev end}}
{{dcl rev begin|num=7}}
{{dcl | since=c++11 | until=c++14 | 1=
template&lt; class U1, class U2 &gt;
tuple( pair&lt;U1,U2&gt;&amp;&amp; p );
}}
{{dcl | since=c++14 | until=c++17 | 1=
template&lt; class U1, class U2 &gt;
constexpr tuple( pair&lt;U1,U2&gt;&amp;&amp; p );
}}
{{dcl | since=c++17 | 1=
template&lt; class U1, class U2 &gt;
/*EXPLICIT*/ constexpr tuple( pair&lt;U1,U2&gt;&amp;&amp; p );
}}
{{dcl rev end}}
{{dcl | num=8 | since=c++11 | 1=
tuple( const tuple&amp; other ) = default;
}}
{{dcl | num=9 | since=c++11 | 1=
tuple( tuple&amp;&amp; other ) = default;
}}
{{dcl | num=10 | since=c++11 | 1=
template&lt; class Alloc &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a );
}}
{{dcl rev begin | num=11}}
{{dcl | since=c++11 | until=c++17 | 1=
template&lt; class Alloc &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a,
       const Types&amp;... args );
}}
{{dcl | since=c++17 | 1=
template&lt; class Alloc &gt;
/*EXPLICIT*/ tuple( std::allocator_arg_t, const Alloc&amp; a,
                    const Types&amp;... args );
}}
{{dcl rev end}}
{{dcl rev begin |num=12}}
{{dcl | since=c++11 | until=c++17 | 1=
template&lt; class Alloc, class... UTypes &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a,
       UTypes&amp;&amp;... args );
}}
{{dcl | since=c++17 | 1=
template&lt; class Alloc, class... UTypes &gt;
/*EXPLICIT*/ tuple( std::allocator_arg_t, const Alloc&amp; a,
                    UTypes&amp;&amp;... args );
}}
{{dcl rev end}}
{{dcl rev begin | num=13}}
{{dcl | since=c++11 | until=c++17 | 1=
template &lt;class Alloc, class... UTypes&gt;
tuple( std::allocator_arg_t, const Alloc&amp; a,
       const tuple&lt;UTypes...&gt;&amp; other );
}}
{{dcl | since=c++17 | 1=
template &lt;class Alloc, class... UTypes&gt;
/*EXPLICIT*/ tuple( std::allocator_arg_t, const Alloc&amp; a,
                    const tuple&lt;UTypes...&gt;&amp; other );
}}
{{dcl rev end}}
{{dcl rev begin | num=14}}
{{dcl | since=c++11 | until=c++17 | 1=
template&lt; class Alloc, class... UTypes &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a,
       tuple&lt;UTypes...&gt;&amp;&amp; other );
}}
{{dcl | since=c++17 | 1=
template&lt; class Alloc, class... UTypes &gt;
/*EXPLICIT*/ tuple( std::allocator_arg_t, const Alloc&amp; a,
                    tuple&lt;UTypes...&gt;&amp;&amp; other );
}}
{{dcl rev end}}
{{dcl rev begin | num=15}}
{{dcl | since=c++11 | until=c++17 | 1=
template&lt; class Alloc, class U1, class U2 &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a,
       const pair&lt;U1, U2&gt;&amp; p );
}}
{{dcl | since=c++17 | 1=
template&lt; class Alloc, class U1, class U2 &gt;
/*EXPLICIT*/ tuple( std::allocator_arg_t, const Alloc&amp; a,
                    const pair&lt;U1, U2&gt;&amp; p );
}}
{{dcl rev end}}
{{dcl rev begin | num=16}}
{{dcl | since=c++11 | until=c++17 | 1=
template&lt; class Alloc, class U1, class U2 &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a,
       pair&lt;U1, U2&gt;&amp;&amp; p );
}}
{{dcl | since=c++17 | 1=
template&lt; class Alloc, class U1, class U2 &gt;
/*EXPLICIT*/ tuple( std::allocator_arg_t, const Alloc&amp; a,
                    pair&lt;U1, U2&gt;&amp;&amp; p );
}}
{{dcl rev end}}
{{dcl | num=17 | since=c++11 | 1=
template&lt; class Alloc &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a, const tuple&amp; other );
}}
{{dcl | num=18 | since=c++11 | 1=
template&lt; class Alloc &gt;
tuple( std::allocator_arg_t, const Alloc&amp; a, tuple&amp;&amp; other );
}}
{{dcl end}}

Constructs a new tuple. 

@1@ Default constructor. [[cpp/language/value initialization|Value-initializes]] all elements.

{{rev begin}}
{{rev |until=c++17|
@@ Requires that {{c|std::is_default_constructible&lt;Ti&gt;::value}} is {{c|true}} for all {{tt|i}}
}}
{{rev |since=c++17|
@@ {{cpp/enable if|{{c|std::is_default_constructible&lt;Ti&gt;::value}} is {{c|true}} for all {{tt|i}}}}
@@ The constructor is {{c|explicit}} if and only if {{tt|Ti}} is not implicitly default-constructible for at least one {{tt|i}}.
}}
{{rev end}}
@2@ Direct constructor. Initializes each element of the tuple with the corresponding parameter.
@@ {{cpp/enable if|{{c|1=sizeof...(Types) &gt;= 1}} and {{c|std::is_copy_constructible&lt;Ti&gt;::value}} is {{c|true}} for all {{tt|i}}}}.

{{rev begin}}
{{rev|since=c++17|
@@ This constructor is {{c|explicit}} if and only if {{c|std::is_convertible&lt;const Ti&amp;, Ti&gt;::value}} is {{c|false}} for at least one {{tt|i}}.
}}
{{rev end}}

@3@ Converting constructor. Initializes each element of the tuple with the corresponding value in {{c|std::forward&lt;Utypes&gt;(args)}}.

{{rev begin}}
{{rev|until=c++17|
@@ Requires that {{c|1=sizeof...(Types) == sizeof...(UTypes)}} 
@@ {{cpp/enable if|{{c|1=sizeof...(Types) &gt;= 1}} and {{c|std::is_constructible&lt;Ti, Ui&amp;&amp;&gt;::value}} is {{c|true}} for all {{tt|i}}}}.
}}
{{rev|since=c++17|
@@ {{cpp/enable if|{{c|1=sizeof...(Types) == sizeof...(UTypes)}} and {{c|1=sizeof...(Types) &gt;= 1}} and {{c|std::is_constructible&lt;Ti, Ui&amp;&amp;&gt;::value}} is {{c|true}} for all {{tt|i}}}}.
@@ The constructor is {{c|explicit}} if and only if {{c|std::is_convertible&lt;Ui&amp;&amp;, Ti&gt;::value}} is {{c|false}} for at least one {{c|i}}.
}}
{{rev end}}

@4@ Converting copy-constructor. For all {{tt|i}} in {{c|sizeof...(UTypes)}}, initializes ith element of the tuple with {{c|std::get&lt;i&gt;(other)}}.

{{rev begin}}
{{rev|until=c++17|
@@ Requires that {{c|1=sizeof...(Types) == sizeof...(UTypes)}}
@@ {{cpp/enable if|{{c|std::is_constructible&lt;Ti, const Ui&amp;&gt;::value}} is {{c|true}} for all {{tt|i}}}}.
}}
{{rev|since=c++17|
@@ {{cpp/enable if|
{{c|1=sizeof...(Types) == sizeof...(UTypes)}} and&lt;br&gt;
{{c|std::is_constructible_v&lt;Ti, const Ui&amp;&gt;}} is {{c|true}} for all {{tt|i}} and&lt;br&gt;
{{c|1=sizeof...(Types) != 1}} or&lt;br&gt;
(when {{tt|Types...}} expands to {{tt|T}} and {{tt|UTypes...}} expands to {{tt|U}}) {{c|std::is_convertible_v&lt;const tuple&lt;U&gt;&amp;, T&gt;}}, {{c|std::is_constructible_v&lt;T, const tuple&lt;U&gt;&amp;&gt;}}, and {{c|std::is_same_v&lt;T, U&gt;}} are all {{tt|false}} }}.
@@ The constructor is {{c|explicit}} if and only if {{c|std::is_convertible&lt;const Ui&amp;, Ti&gt;::value}} is {{c|false}} for at least one {{tt|i}}.
}}
{{rev end}}

@5@ Converting move-constructor. For all {{tt|i}} in {{c|sizeof...(UTypes)}}, initializes ith element of the tuple with {{c|std::forward&lt;Ui&gt;(std::get&lt;i&gt;(other))}}.

{{rev begin}}
{{rev|until=c++17|
@@ Requires that {{c|1=sizeof...(Types) == sizeof...(UTypes)}}
@@ {{cpp/enable if|{{c|std::is_constructible&lt;Ti, Ui&amp;&amp;&gt;::value}} is {{c|true}} for all {{tt|i}}}}.
}}
{{rev|since=c++17|
@@ {{cpp/enable if|
{{c|1=sizeof...(Types) == sizeof...(UTypes)}} and&lt;br&gt;
{{c|std::is_constructible_v&lt;Ti, Ui&amp;&amp;&gt;}} is {{c|true}} for all {{tt|i}} and&lt;br&gt;
{{c|1=sizeof...(Types) != 1}} or&lt;br&gt;
(when {{tt|Types...}} expands to {{tt|T}} and {{tt|UTypes...}} expands to {{tt|U}}) {{c|std::is_convertible_v&lt;tuple&lt;U&gt;, T&gt;}}, {{c|std::is_constructible_v&lt;T, tuple&lt;U&gt;&gt;}}, and {{c|std::is_same_v&lt;T, U&gt;}} are all {{tt|false}} }}.
@@ The constructor is {{c|explicit}} if and only if {{c|std::is_convertible&lt;Ui&amp;&amp;, Ti&gt;::value}} is {{c|false}} for at least one {{tt|i}}.
}}
{{rev end}}

@6@ Pair copy constructor. Constructs a 2-element tuple with the first element constructed from {{tt|p.first}} and the second element from {{tt|p.second}}

{{rev begin}}
{{rev|until=c++17|
@@ Requires that {{c|1=sizeof...(Types) == 2}}
@@ {{cpp/enable if|{{c|std::is_constructible&lt;T0,const U1&amp;&gt;::value}} and {{c|std::is_constructible&lt;T1, const U2&amp;&gt;::value}} are both {{c|true}}}}
}}
{{rev|since=c++17|
@@ {{cpp/enable if|{{c|1=sizeof...(Types) == 2}} and {{c|std::is_constructible&lt;T0,const U1&amp;&gt;::value}} and {{c|std::is_constructible&lt;T1, const U2&amp;&gt;::value}} are both {{c|true}}}}
@@ The constructor is {{c|explicit}} if and only if {{c|std::is_convertible&lt;const U1&amp;, T0&gt;::value}} or {{c|std::is_convertible&lt;const U2&amp;, T1&gt;::value}} is {{c|false}}
}}
{{rev end}}

@7@ Pair move constructor. Constructs a 2-element tuple with the first element constructed from {{c|std::forward&lt;U1&gt;(p.first)}} and the second element from {{c|std::forward&lt;U2&gt;(p.second)}}

{{rev begin}}
{{rev|until=c++17|
@@ Requires that {{c|1=sizeof...(Types) == 2}}
@@ {{cpp/enable if|{{c|std::is_constructible&lt;T0, U1&amp;&amp;&gt;::value}} and {{c|std::is_constructible&lt;T1, U2&amp;&amp;&gt;::value}} are both {{c|true}}}}
}}
{{rev|since=c++17|
@@ {{cpp/enable if|{{c|1=sizeof...(Types) == 2}} and {{c|std::is_constructible&lt;T0, U1&amp;&amp;&gt;::value}} and {{c|std::is_constructible&lt;T1, U2&amp;&amp;&gt;::value}} are both {{c|true}}}}
@@ The constructor is {{c|explicit}} if and only if {{c|std::is_convertible&lt;U1&amp;&amp;, T0&gt;::value}} or {{c|std::convertible&lt;U2&amp;&amp;, T1&gt;::value}} is {{c|false}}
}}
{{rev end}}

@8@ Implicitly-defined copy constructor. Initializes each element of the tuple with the corresponding element of {{tt|other}}.
@@ This constructor is {{c|constexpr}} if every operation it performs is {{c|constexpr}}. For the empty tuple {{c|std::tuple&lt;&gt;}}, it is {{c|constexpr}}.
@@ Requires that {{c|std::is_copy_constructible&lt;Ti&gt;::value}} is {{c|true}} for all {{tt|i}}.

@9@ Implicitly-defined move constructor. Initializes each ith element of the tuple with {{c|std::forward&lt;Ui&gt;(std::get&lt;i&gt;(other))}}.
@@ This constructor is {{c|constexpr}} if every operation it performs is {{c|constexpr}}. For the empty tuple {{c|std::tuple&lt;&gt;}}, it is {{c|constexpr}}.
@@ Requires that {{c|std::is_move_constructible&lt;Ti&gt;::value}} is {{c|true}} for all {{tt|i}}.

@10-18@ Identical to {{v|1-9}} except each element is created by ''uses-allocator construction'', that is, the Allocator object {{tt|a}} is passed as an additional argument to the constructor of each element for which {{c|std::uses_allocator&lt;Ui, Alloc&gt;::value}} is {{c|true}}.

===Parameters===

{{par begin}}
{{par | args | values used to initialize each element of the tuple }}
{{par | other | a tuple of values used to initialize each element of the tupe }}
{{par | p | pair of values used to initialize both elements of this 2-tuple }}
{{par | a | allocator to use in uses-allocator construction }}
{{par end}} 

===Notes===
Conditionally-explicit constructors in C++17 make it possible to construct a tuple in copy-initialization context using list-initialization syntax:
{{source|1=
std::tuple&lt;int, int&gt; foo_tuple() 
{
  return {1, -1};  // Error until C++17
  return std::make_tuple(1, -1); // Always works
}
}}

Note that if some element of the list is not implicitly convertible to the corresponding element of the target tuple, the constructors become explicit
{{source|1=
using namespace std::chrono;
void launch_rocket_at(std::tuple&lt;hours, minutes, seconds&gt;);

launch_rocket_at({hours(1), minutes(2), seconds(3)}); // OK
launch_rocket_at({1, 2, 3}); // Error: int is not implicitly convertible to duration
launch_rocket_at(std::tuple&lt;hours, minutes, seconds&gt;{1, 2, 3}); // OK
}}

===Example===
{{example
 | code=
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;tuple&gt;
#include &lt;memory&gt;

// helper function to print a tuple of any size
template&lt;class Tuple, std::size_t N&gt;
struct TuplePrinter {
    static void print(const Tuple&amp; t) 
    {
        TuplePrinter&lt;Tuple, N-1&gt;::print(t);
        std::cout &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;N-1&gt;(t);
    }
};

template&lt;class Tuple&gt;
struct TuplePrinter&lt;Tuple, 1&gt;{
    static void print(const Tuple&amp; t) 
    {
        std::cout &lt;&lt; std::get&lt;0&gt;(t);
    }
};

template&lt;class... Args&gt;
void print(const std::tuple&lt;Args...&gt;&amp; t) 
{
    std::cout &lt;&lt; &quot;(&quot;;
    TuplePrinter&lt;decltype(t), sizeof...(Args)&gt;::print(t);
    std::cout &lt;&lt; &quot;)\n&quot;;
}
// end helper function

int main()
{
    std::tuple&lt;int, std::string, double&gt; t1;
    std::cout &lt;&lt; &quot;Value-initialized: &quot;; print(t1);
    std::tuple&lt;int, std::string, double&gt; t2(42, &quot;Test&quot;, -3.14);
    std::cout &lt;&lt; &quot;Initialized with values: &quot;; print(t2);
    std::tuple&lt;char, std::string, int&gt; t3(t2);
    std::cout &lt;&lt; &quot;Implicitly converted: &quot;; print(t3);
    std::tuple&lt;int, double&gt; t4(std::make_pair(42, 3.14));
    std::cout &lt;&lt; &quot;Constructed from a pair&quot;; print(t4);

    // given Allocator my_alloc with a single-argument constructor my_alloc(int)
    // use my_alloc(1) to allocate 10 ints in a vector
    std::vector&lt;int, my_alloc&gt; v(10, 1, my_alloc(1));
    // use my_alloc(2) to allocate 10 ints in a vector in a tuple
    std::tuple&lt;int, std::vector&lt;int, my_alloc&gt;, double&gt; t5(std::allocator_arg,
                                                           my_alloc(2), 42, v,  -3.14);
}
 | output=
Value-initialized: (0, , 0)
Initialized with values: (42, Test, -3.14)
Implicitly converted: (*, Test, -3)
Constructed from a pair(42, 3.14)
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc end}}

[[de:cpp/utility/tuple/tuple]]
[[es:cpp/utility/tuple/tuple]]
[[fr:cpp/utility/tuple/tuple]]
[[it:cpp/utility/tuple/tuple]]
[[ja:cpp/utility/tuple/tuple]]
[[pt:cpp/utility/tuple/tuple]]
[[ru:cpp/utility/tuple/tuple]]
[[zh:cpp/utility/tuple/tuple]]</text>
      <sha1>ny5lhxj0wutrggzgt2r27ubt2hztpd9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/tuple cat</title>
    <ns>0</ns>
    <id>2682</id>
    <revision>
      <id>72415</id>
      <parentid>64637</parentid>
      <timestamp>2014-08-20T14:58:05Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2133">{{cpp/title|tuple_cat}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl rev begin}}
{{dcl | since=c++11 | until=c++14 |
template&lt; class... Tuples &gt;
std::tuple&lt;CTypes...&gt; tuple_cat(Tuples&amp;&amp;... args);
}}
{{dcl | since=c++14 |
template&lt; class... Tuples &gt;
constexpr std::tuple&lt;CTypes...&gt; tuple_cat(Tuples&amp;&amp;... args);
}}
{{dcl rev end}}
{{dcl end}}

Constructs a tuple that is a concatenation of all tuples in {{tt|args}}.

===Parameters===
{{par begin}}
{{par | args | zero or more tuples to concatenate}}
{{par end}}

===Return value===
A {{lc|std::tuple}} object composed of all elements of all argument tuples constructed from {{c|std::get&lt;i&gt;(std::forward&lt;Ti&gt;(arg))}} for each individual element.

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;
#include &lt;string&gt;

// helper function to print a tuple of any size
template&lt;class Tuple, std::size_t N&gt;
struct TuplePrinter {
    static void print(const Tuple&amp; t) 
    {
        TuplePrinter&lt;Tuple, N-1&gt;::print(t);
        std::cout &lt;&lt; &quot;, &quot; &lt;&lt; std::get&lt;N-1&gt;(t);
    }
};

template&lt;class Tuple&gt;
struct TuplePrinter&lt;Tuple, 1&gt; {
    static void print(const Tuple&amp; t) 
    {
        std::cout &lt;&lt; std::get&lt;0&gt;(t);
    }
};

template&lt;class... Args&gt;
void print(const std::tuple&lt;Args...&gt;&amp; t) 
{
    std::cout &lt;&lt; &quot;(&quot;;
    TuplePrinter&lt;decltype(t), sizeof...(Args)&gt;::print(t);
    std::cout &lt;&lt; &quot;)\n&quot;;
}
// end helper function

int main()
{
    std::tuple&lt;int, std::string, float&gt; t1(10, &quot;Test&quot;, 3.14);
    int n = 7;
    auto t2 = std::tuple_cat(t1, std::make_pair(&quot;Foo&quot;, &quot;bar&quot;), t1, std::tie(n));
    n = 10;
    print(t2);
}
 | output=
(10, Test, 3.14, Foo, bar, 10, Test, 3.14, 10)
}}
=== See also ===
{{dsc begin}}
{{dsc inc | cpp/utility/tuple/dsc make_tuple}}
{{dsc inc | cpp/utility/tuple/dsc tie}}
{{dsc inc | cpp/utility/tuple/dsc forward_as_tuple}}
{{dsc end}}

[[de:cpp/utility/tuple/tuple cat]]
[[es:cpp/utility/tuple/tuple cat]]
[[fr:cpp/utility/tuple/tuple cat]]
[[it:cpp/utility/tuple/tuple cat]]
[[ja:cpp/utility/tuple/tuple cat]]
[[pt:cpp/utility/tuple/tuple cat]]
[[ru:cpp/utility/tuple/tuple cat]]
[[zh:cpp/utility/tuple/tuple cat]]</text>
      <sha1>b7u4wywcqch5l6ti7z3kxk6fjiep2y8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/tuple element</title>
    <ns>0</ns>
    <id>2700</id>
    <revision>
      <id>81330</id>
      <parentid>78597</parentid>
      <timestamp>2015-10-20T00:12:17Z</timestamp>
      <contributor>
        <username>Kedarbhat</username>
        <id>4596</id>
      </contributor>
      <minor/>
      <comment>compile-type -&gt; compile-time</comment>
      <text xml:space="preserve" bytes="2766">{{cpp/title|tuple_element{{small|&lt;std::tuple&gt;}}}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl | num=1 | since=c++11 | 1=
template&lt; std::size_t I, class T &gt;
class tuple_element; /* undefined */
}}
{{dcl | num=2 | since=c++11 | 1=
template&lt; std::size_t I, class... Types &gt;
class tuple_element&lt; I, tuple&lt;Types...&gt; &gt;;
}}
{{dcl header|tuple|}}
{{dcl header|array|utility|notes={{mark since c++17}}&lt;br&gt;{{mark since c++17}}}}
{{dcl | num=3 | since=c++11 | 1=
template&lt; std::size_t I, class T &gt;
class tuple_element&lt; I, const T &gt; {
  typedef typename
      std::add_const&lt;typename std::tuple_element&lt;I, T&gt;::type&gt;::type type;
};
}}
{{dcl | num=4 | since=c++11 | 1=
template&lt; std::size_t I, class T &gt;
class tuple_element&lt; I, volatile T &gt; {
  typedef typename
      std::add_volatile&lt;typename std::tuple_element&lt;I, T&gt;::type&gt;::type type;
};
}}
{{dcl | num=5 | since=c++11 | 1=
template&lt; std::size_t I, class T &gt;
class tuple_element&lt; I, const volatile T &gt; {
  typedef typename
      std::add_cv&lt;typename std::tuple_element&lt;I, T&gt;::type&gt;::type type;
};
}}
{{dcl end}}

Provides compile-time indexed access to the types of the elements of the tuple.

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | type | the type of {{tt|I}}th element of the tuple, where {{tt|I}} is in {{tt|[0, sizeof...(Types))}} }}
{{dsc end}}

===Helper types===
{{dcl begin}}
{{dcl | since=c++14 | 1=
template &lt;std::size_t I, class T&gt;
using tuple_element_t = typename tuple_element&lt;I, T&gt;::type;
}}
{{dcl end}}

===Possible implementation===
{{eq fun
 | 1=
template&lt; std::size_t I, class T &gt;
struct tuple_element;

// recursive case
template&lt; std::size_t I, class Head, class... Tail &gt;
struct tuple_element&lt;I, std::tuple&lt;Head, Tail...&gt;&gt;
    : std::tuple_element&lt;I-1, std::tuple&lt;Tail...&gt;&gt; { };

// base case
template&lt; class Head, class... Tail &gt;
struct tuple_element&lt;0, std::tuple&lt;Head, Tail...&gt;&gt; {
   typedef Head type;
};
}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;

template &lt;class... Args&gt;
struct type_list
{
   template &lt;std::size_t N&gt;
   using type = typename std::tuple_element&lt;N, std::tuple&lt;Args...&gt;&gt;::type;
};

int main()
{
   std::cout &lt;&lt; std::boolalpha;
   type_list&lt;int, char, bool&gt;::type&lt;2&gt; x = true;
   std::cout &lt;&lt; x &lt;&lt; '\n';
}
 | output=
true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/array/dsc tuple_element}}
{{dsc inc | cpp/utility/pair/dsc tuple_element}}
{{dsc end}}

[[de:cpp/utility/tuple/tuple element]]
[[es:cpp/utility/tuple/tuple element]]
[[fr:cpp/utility/tuple/tuple element]]
[[it:cpp/utility/tuple/tuple element]]
[[ja:cpp/utility/tuple/tuple element]]
[[pt:cpp/utility/tuple/tuple element]]
[[ru:cpp/utility/tuple/tuple element]]
[[zh:cpp/utility/tuple/tuple element]]</text>
      <sha1>hyoc4svfuelrsurhb1a82dnlgyvedxe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/tuple size</title>
    <ns>0</ns>
    <id>2699</id>
    <revision>
      <id>91004</id>
      <parentid>90937</parentid>
      <timestamp>2017-03-14T12:58:41Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;dsc inc | cpp/experimental/type_traits_v&quot; to &quot;subst:null&quot;</comment>
      <text xml:space="preserve" bytes="2885">{{cpp/title|tuple_size&lt;small&gt;&lt;std::tuple&gt;&lt;/small&gt;}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl | num=1 | since=c++11 |1=
template&lt; class T &gt;
class tuple_size; /*undefined*/
}}
{{dcl | num=2 | since=c++11 |1=
template&lt; class... Types &gt;
class tuple_size&lt; std::tuple&lt;Types...&gt; &gt;
 : public std::integral_constant&lt;std::size_t, sizeof...(Types)&gt; { };
}}
{{dcl header | tuple}}
{{dcl header|array|utility|notes={{mark since c++17}}&lt;br&gt;{{mark since c++17}}}}
{{dcl | num=3 | since=c++11 |1=
template&lt; class T &gt;
class tuple_size&lt;const T&gt;
 : public std::integral_constant&lt;std::size_t, tuple_size&lt;T&gt;::value&gt; { };
}}
{{dcl | num=4 | since=c++11 |1=
template&lt; class T &gt;
class tuple_size&lt; volatile T &gt;
 : public std::integral_constant&lt;std::size_t, tuple_size&lt;T&gt;::value&gt; { };
}}
{{dcl | num=5 | since=c++11 |1=
template&lt; class T &gt;
class tuple_size&lt; const volatile T &gt;
 : public std::integral_constant&lt;std::size_t, tuple_size&lt;T&gt;::value&gt; { };
}}
{{dcl end}}

Provides access to the number of elements in a tuple as a compile-time constant expression.

In addition to being available via inclusion of the &lt;tuple&gt; header, the templates {{v|3-5}} are available when either of the headers &lt;array&gt; or &lt;utility&gt; are included.

All specializations of {{tt|std::tuple_size}} satisfy {{concept|UnaryTypeTrait}} with  ''BaseCharacteristic'' {{tt|std::integral_constant&lt;std::size_t, N&gt;}} for some {{tt|N}}.

{{rev begin}}
{{rev|since=c++17|
The cv-T templates {{v|3-5}} are SFINAE-friendly: if {{tt|std::tuple_size&lt;T&gt;::value}} is 
ill-formed when treated as an unevaluated operand, {{v|3-5}} do not provide the member {{tt|value}}. Access checking is performed as if in a context unrelated to {{tt|tuple_size}} and {{tt|T}}. Only the validity of the immediate context of the expression is considered.
}}
{{rev end}}

=== Helper variable template ===
{{ddcl | since=c++17 | 1=
template&lt; class T &gt;
inline constexpr std::size_t tuple_size_v = tuple_size&lt;T&gt;::value;
}}

{{cpp/types/integral_constant/inherit2 | {{tt|sizeof...(Types)}}|std::size_t}}

===Example===
{{example |
 | code=
#include &lt;iostream&gt;
#include &lt;tuple&gt;

template &lt;class T&gt;
void test(T t)
{
    int a[std::tuple_size&lt;T&gt;::value]; // can be used at compile time

    std::cout &lt;&lt; std::tuple_size&lt;T&gt;::value &lt;&lt; '\n'; // or at run time
}

int main()
{
    test(std::make_tuple(1, 2, 3.14));
}
 | output=
3
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/container/array/dsc tuple_size}}
{{dsc inc | cpp/utility/pair/dsc tuple_size}}
{{dsc inc | cpp/utility/tuple/dsc get}}
{{dsc inc | cpp/utility/tuple/dsc tuple_element}}

{{dsc end}}

[[de:cpp/utility/tuple/tuple size]]
[[es:cpp/utility/tuple/tuple size]]
[[fr:cpp/utility/tuple/tuple size]]
[[it:cpp/utility/tuple/tuple size]]
[[ja:cpp/utility/tuple/tuple size]]
[[pt:cpp/utility/tuple/tuple size]]
[[ru:cpp/utility/tuple/tuple size]]
[[zh:cpp/utility/tuple/tuple size]]</text>
      <sha1>boywq0gl3hdrystlruk4xvshpa6979y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/tuple/uses allocator</title>
    <ns>0</ns>
    <id>2696</id>
    <revision>
      <id>63128</id>
      <parentid>59705</parentid>
      <timestamp>2013-07-01T23:55:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Use since= and until= params of {{dcl}} template.</comment>
      <text xml:space="preserve" bytes="1504">{{cpp/title|uses_allocator&lt;small&gt;&lt;std::tuple&gt;&lt;/small&gt;}}
{{cpp/utility/tuple/navbar}}
{{dcl begin}}
{{dcl header | tuple}}
{{dcl | since=c++11 |
template&lt; class... Types, class Alloc &gt;
struct uses_allocator&lt; std::tuple&lt;Types...&gt;, Alloc &gt; : std::true_type { };
}}
{{dcl end}}

This specialization of {{lc|std::uses_allocator}} informs other library components that tuples support ''uses-allocator construction'', even though they do not have a nested {{tt|allocator_type}}.

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===Example===
{{example
 | 
 | code=
// myalloc is a stateful Allocator with a single-argument constructor
// that takes an int. It has no default constructor.

    typedef std::vector&lt;int, myalloc&lt;int&gt;&gt; innervector_t;
    typedef std::tuple&lt;int, innervector_t&gt; elem_t;
    typedef std::scoped_allocator_adaptor&lt; myalloc&lt;elem_t&gt;, myalloc&lt;int&gt;&gt; Alloc;
    Alloc a(1,2);
    std::vector&lt;elem_t, Alloc&gt; v(a);
    v.resize(1);                  // uses allocator #1 for elements of v
    std::get&lt;1&gt;(v[0]).resize(10); // uses allocator #2 for innervector_t
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses_allocator}}
{{dsc end}}

[[de:cpp/utility/tuple/uses allocator]]
[[es:cpp/utility/tuple/uses allocator]]
[[fr:cpp/utility/tuple/uses allocator]]
[[it:cpp/utility/tuple/uses allocator]]
[[ja:cpp/utility/tuple/uses allocator]]
[[pt:cpp/utility/tuple/uses allocator]]
[[ru:cpp/utility/tuple/uses allocator]]
[[zh:cpp/utility/tuple/uses allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/types</title>
    <ns>0</ns>
    <id>2164</id>
    <redirect title="cpp/types" />
    <revision>
      <id>4876</id>
      <timestamp>2011-07-07T12:16:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/types]] to [[cpp/types]]: Merge basic types, RTTI and type traits into one page</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/types/climits</title>
    <ns>0</ns>
    <id>2165</id>
    <redirect title="cpp/types/climits" />
    <revision>
      <id>4878</id>
      <timestamp>2011-07-07T12:16:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/types/climits]] to [[cpp/types/climits]]: Merge basic types, RTTI and type traits into one page</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/types/climits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/types/integer</title>
    <ns>0</ns>
    <id>2166</id>
    <redirect title="cpp/types/integer" />
    <revision>
      <id>4880</id>
      <timestamp>2011-07-07T12:16:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/types/integer]] to [[cpp/types/integer]]: Merge basic types, RTTI and type traits into one page</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/types/integer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/types/numeric limits</title>
    <ns>0</ns>
    <id>2167</id>
    <redirect title="cpp/types/numeric limits" />
    <revision>
      <id>4882</id>
      <timestamp>2011-07-07T12:16:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>moved [[cpp/utility/types/numeric limits]] to [[cpp/types/numeric limits]]: Merge basic types, RTTI and type traits into one page</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/types/numeric limits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variadic</title>
    <ns>0</ns>
    <id>3440</id>
    <revision>
      <id>89779</id>
      <parentid>89772</parentid>
      <timestamp>2017-01-25T13:43:44Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <minor/>
      <comment>Undo revision 89772 by [[Special:Contributions/62.212.122.189|62.212.122.189]] ([[User talk:62.212.122.189|talk]]) no comma was the original C++ syntax</comment>
      <text xml:space="preserve" bytes="1918">{{title|Variadic functions}}
{{cpp/utility/variadic/navbar}}

Variadic functions are functions (e.g. {{lc|std::printf}}) which take a [[cpp/language/variadic_arguments|variable number of arguments]].

To declare a variadic function, an ellipsis is used as the last parameter, e.g. {{c|int printf(const char* format, ...);}}. See [[cpp/language/variadic_arguments|Variadic arguments]] for additional detail on the syntax, automatic argument conversions and the alternatives.

To access the variadic arguments from the function body, the following library facilities are provided:

{{dsc begin}}
{{dsc header | cstdarg}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc inc | cpp/utility/variadic/dsc va_arg}}
{{dsc inc | cpp/utility/variadic/dsc va_copy}}
{{dsc inc | cpp/utility/variadic/dsc va_end}}
{{dsc inc | cpp/utility/variadic/dsc va_list}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdarg&gt;

void simple_printf(const char* fmt...)
{
    va_list args;
    va_start(args, fmt);

    while (*fmt != '\0') {
        if (*fmt == 'd') {
            int i = va_arg(args, int);
            std::cout &lt;&lt; i &lt;&lt; '\n';
        } else if (*fmt == 'c') {
            // note automatic conversion to integral type
            int c = va_arg(args, int);
            std::cout &lt;&lt; static_cast&lt;char&gt;(c) &lt;&lt; '\n';
        } else if (*fmt == 'f') {
            double d = va_arg(args, double);
            std::cout &lt;&lt; d &lt;&lt; '\n';
        }
        ++fmt;
    }

    va_end(args);
}

int main()
{
    simple_printf(&quot;dcff&quot;, 3, 'a', 1.999, 42.5); 
}
 | output=
3
a
1.999
42.5
}}

===See also===
{{dsc begin}}
{{dsc see c | c/variadic | Variadic functions}}
{{dsc end}}

[[de:cpp/utility/variadic]]
[[es:cpp/utility/variadic]]
[[fr:cpp/utility/variadic]]
[[it:cpp/utility/variadic]]
[[ja:cpp/utility/variadic]]
[[pt:cpp/utility/variadic]]
[[ru:cpp/utility/variadic]]
[[zh:cpp/utility/variadic]]</text>
      <sha1>sqlny7mlpggo52bjx6shabx8lefka1m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variadic/va arg</title>
    <ns>0</ns>
    <id>8535</id>
    <revision>
      <id>76377</id>
      <parentid>71819</parentid>
      <timestamp>2015-02-17T07:57:46Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="2302">{{ctitle | va_arg }}
{{cpp/utility/variadic/navbar}}
{{dcl begin}}
{{dcl header | cstdarg}}
{{dcl | 
T va_arg( va_list ap, T );
}}
{{dcl end}}

The {{tt|va_arg}} macro expands to an expression of type {{tt|T}} that corresponds to the next parameter from the {{lc|va_list}} {{tt|ap}}.

Prior to calling {{tt|va_arg}}, {{tt|ap}} must be initialized by a call to either {{lc|va_start}} or {{lc|va_copy}}, with no intervening call to {{lc|va_end}}.  Each invocation of the {{tt|va_arg}} macro modifies {{tt|ap}} to point to the next variable argument.

If {{tt|va_arg}} is called when there are no more arguments in {{tt|ap}}, or if the type of the next argument in {{tt|ap}} (after promotions) is not compatible with {{tt|T}}, the behavior is undefined, unless:

* one type is a signed integer type, the other type is the corresponding unsigned integer type, and the value is representable in both types; or
* one type is pointer to {{c|void}} and the other is a pointer to a character type ({{c|char}}, {{c|signed char}}, or {{c|unsigned char}}).

===Parameters===
{{par begin}}
{{par | ap | an instance of the {{lc|va_list}} type}}
{{par | T | the type of the next parameter in {{tt|ap}} }}
{{par end}}

===Expanded value===
the next variable parameter in {{tt|ap}}

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdarg&gt;
#include &lt;cmath&gt;

double stddev(int count, ...) 
{
    double sum = 0;
    double sum_sq = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i &lt; count; ++i) {
        double num = va_arg(args, double);
        sum += num;
        sum_sq += num*num;
    }
    va_end(args);
    return std::sqrt(sum_sq/count - (sum/count)*(sum/count));
}

int main() 
{
    std::cout &lt;&lt; stddev(4, 25.0, 27.3, 26.9, 25.7) &lt;&lt; '\n';
}
 | output=
0.920258
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc inc | cpp/utility/variadic/dsc va_copy}}
{{dsc inc | cpp/utility/variadic/dsc va_end}}
{{dsc see c | c/variadic/va_arg | va_arg}}
{{dsc end}}

[[de:cpp/utility/variadic/va arg]]
[[es:cpp/utility/variadic/va arg]]
[[fr:cpp/utility/variadic/va arg]]
[[it:cpp/utility/variadic/va arg]]
[[ja:cpp/utility/variadic/va arg]]
[[pt:cpp/utility/variadic/va arg]]
[[ru:cpp/utility/variadic/va arg]]
[[zh:cpp/utility/variadic/va arg]]</text>
      <sha1>sskm1umfbhvrsbh7ylvl2ehkcfft10w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variadic/va copy</title>
    <ns>0</ns>
    <id>8538</id>
    <revision>
      <id>76378</id>
      <parentid>71820</parentid>
      <timestamp>2015-02-17T08:05:07Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1896">{{ctitle | va_copy }}
{{cpp/utility/variadic/navbar}}
{{dcl begin}}
{{dcl header | cstdarg}}
{{dcl | since=c++11 | 
void va_copy( va_list dest, va_list src );
}}
{{dcl end}}

The {{tt|va_copy}} macro copies {{tt|src}} to {{tt|dest}}.

{{lc|va_end}} should be called on {{tt|dest}} before the function returns or any subsequent re-initialization of {{tt|dest}} (via calls to {{lc|va_start}} or {{lc|va_copy}}).

===Parameters===
{{par begin}}
{{par | dest | an instance of the {{lc|va_list}} type to initialize}}
{{par | src | the source {{lc|va_list}} that will be used to initialize {{tt|dest}} }}
{{par end}}

===Expanded value===
(none)

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdarg&gt;
#include &lt;cmath&gt;

double sample_stddev(int count, ...) 
{
    double sum = 0;
    va_list args1;
    va_start(args1, count);
    va_list args2;
    va_copy(args2, args1);
    for (int i = 0; i &lt; count; ++i) {
        double num = va_arg(args1, double);
        sum += num;
    }
    va_end(args1);
    double mean = sum / count;

    double sum_sq_diff = 0;
    for (int i = 0; i &lt; count; ++i) {
        double num = va_arg(args2, double);
        sum_sq_diff += (num-mean) * (num-mean);
    }
    va_end(args2);
    return std::sqrt(sum_sq_diff / count);
}

int main() 
{
    std::cout &lt;&lt; sample_stddev(4, 25.0, 27.3, 26.9, 25.7) &lt;&lt; '\n';
}
 | output=
0.920258
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc inc | cpp/utility/variadic/dsc va_arg}}
{{dsc inc | cpp/utility/variadic/dsc va_end}}
{{dsc see c | c/variadic/va_copy | va_copy}}
{{dsc end}}

[[de:cpp/utility/variadic/va copy]]
[[es:cpp/utility/variadic/va copy]]
[[fr:cpp/utility/variadic/va copy]]
[[it:cpp/utility/variadic/va copy]]
[[ja:cpp/utility/variadic/va copy]]
[[pt:cpp/utility/variadic/va copy]]
[[ru:cpp/utility/variadic/va copy]]
[[zh:cpp/utility/variadic/va copy]]</text>
      <sha1>95t04lk9lsca1yi6pp4ax6cqxb1cbwi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variadic/va end</title>
    <ns>0</ns>
    <id>8536</id>
    <revision>
      <id>76379</id>
      <parentid>71821</parentid>
      <timestamp>2015-02-17T08:05:59Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1189">{{ctitle | va_end }}
{{cpp/utility/variadic/navbar}}
{{dcl begin}}
{{dcl header | cstdarg}}
{{dcl | 
void va_end( va_list ap );
}}
{{dcl end}}

The {{tt|va_end}} macro performs cleanup for an {{tt|ap}} object initialized by a call to {{lc|va_start}} or {{lc|va_copy}}.  {{tt|va_end}} may modify {{tt|ap}} so that it is no longer usable.

If there is no corresponding call to {{lc|va_start}} or {{lc|va_copy}}, or if {{tt|va_end}} is not called before a function that calls {{lc|va_start}} or {{lc|va_copy}} returns, the behavior is undefined.

===Parameters===
{{par begin}}
{{par | ap | an instance of the {{lc|va_list}} type to clean up}}
{{par end}}

===Expanded value===
(none)

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc inc | cpp/utility/variadic/dsc va_copy}}
{{dsc inc | cpp/utility/variadic/dsc va_arg}}
{{dsc see c | c/variadic/va_end | va_end}}
{{dsc end}}

[[de:cpp/utility/variadic/va end]]
[[es:cpp/utility/variadic/va end]]
[[fr:cpp/utility/variadic/va end]]
[[it:cpp/utility/variadic/va end]]
[[ja:cpp/utility/variadic/va end]]
[[pt:cpp/utility/variadic/va end]]
[[ru:cpp/utility/variadic/va end]]
[[zh:cpp/utility/variadic/va end]]</text>
      <sha1>0eirgufuataorl5owb2yzlw3a24xgc4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variadic/va list</title>
    <ns>0</ns>
    <id>8537</id>
    <revision>
      <id>76376</id>
      <parentid>71822</parentid>
      <timestamp>2015-02-17T07:41:28Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <minor/>
      <comment>fmt</comment>
      <text xml:space="preserve" bytes="1191">{{cpp/title | va_list }}
{{cpp/utility/variadic/navbar}}
{{ddcl | header=cstdarg | typedef /* unspecified */ va_list;}}

{{tt|va_list}} is a complete object type suitable for holding the information needed by the macros {{lc|va_start}}, {{lc|va_copy}}, {{lc|va_arg}}, and {{lc|va_end}}.

If a {{tt|va_list}} instance is created, passed to another function, and used via {{lc|va_arg}} in that function, then any subsequent use in the calling function should be preceded by a call to {{lc|va_end}}.

It is legal to pass a pointer to a {{tt|va_list}} object to another function and then use that object after the function returns.

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/variadic/dsc va_start}}
{{dsc inc | cpp/utility/variadic/dsc va_copy}}
{{dsc inc | cpp/utility/variadic/dsc va_arg}}
{{dsc inc | cpp/utility/variadic/dsc va_end}}
{{dsc see c | c/variadic/va_list | va_list}}
{{dsc end}}

[[de:cpp/utility/variadic/va list]]
[[es:cpp/utility/variadic/va list]]
[[fr:cpp/utility/variadic/va list]]
[[it:cpp/utility/variadic/va list]]
[[ja:cpp/utility/variadic/va list]]
[[pt:cpp/utility/variadic/va list]]
[[ru:cpp/utility/variadic/va list]]
[[zh:cpp/utility/variadic/va list]]</text>
      <sha1>18lld3yzeddy7y48e109pqf5w47qklx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variadic/va start</title>
    <ns>0</ns>
    <id>8534</id>
    <revision>
      <id>80499</id>
      <parentid>76380</parentid>
      <timestamp>2015-08-17T15:51:16Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>apply 18.10[support.runtime]/3 instead of C rules</comment>
      <text xml:space="preserve" bytes="1789">{{ctitle | va_start }}
{{cpp/utility/variadic/navbar}}
{{dcl begin}}
{{dcl header | cstdarg}}
{{dcl | 
void va_start( va_list ap, parm_n );
}}
{{dcl end}}

The {{tt|va_start}} macro enables access to the variable arguments following the named argument {{tt|parm_n}}.  

{{tt|va_start}} should be invoked with an instance to a valid {{lc|va_list}} object {{tt|ap}} before any calls to {{lc|va_arg}}.

If {{tt|parm_n}} is declared with reference type or with a type not compatible with the type that results from [[cpp/language/variadic_arguments#Default_conversions|default argument promotions]], the behavior is undefined.

===Parameters===
{{par begin}}
{{par | ap | an instance of the {{lc|va_list}} type}}
{{par | parm_n | the named parameter preceding the first variable parameter}}
{{par end}}

===Expanded value===
(none)

===Notes===
{{tt|va_start}} is required to support {{tt|parm_n}} with overloaded {{tt|operator&amp;}}.

===Example===
{{example
 |
 | code=
#include &lt;iostream&gt;
#include &lt;cstdarg&gt;

int add_nums(int count, ...) 
{
    int result = 0;
    va_list args;
    va_start(args, count);
    for (int i = 0; i &lt; count; ++i) {
        result += va_arg(args, int);
    }
    va_end(args);
    return result;
}

int main() 
{
    std::cout &lt;&lt; add_nums(4, 25, 25, 50, 50) &lt;&lt; '\n';
}
 | output=
150
}}

===See also===

{{dsc begin}}
{{dsc inc | cpp/utility/variadic/dsc va_arg}}
{{dsc inc | cpp/utility/variadic/dsc va_end}}
{{dsc see c | c/variadic/va_start | va_start}}
{{dsc end}}

[[de:cpp/utility/variadic/va start]]
[[es:cpp/utility/variadic/va start]]
[[fr:cpp/utility/variadic/va start]]
[[it:cpp/utility/variadic/va start]]
[[ja:cpp/utility/variadic/va start]]
[[pt:cpp/utility/variadic/va start]]
[[ru:cpp/utility/variadic/va start]]
[[zh:cpp/utility/variadic/va start]]</text>
      <sha1>pl2mqghmqah48g8pw5aiurx14wvpxr5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant</title>
    <ns>0</ns>
    <id>15556</id>
    <revision>
      <id>89738</id>
      <parentid>88217</parentid>
      <timestamp>2017-01-23T16:39:26Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3714">{{cpp/title|variant}}
{{cpp/utility/variant/navbar}}
{{ddcl | header=variant | since=c++17 |
template &lt;class... Types&gt;
class variant;
}}

The class template {{tt|std::variant}} represents a type-safe [[cpp/language/union|union]]. An instance of {{tt|std::variant}} at any given time either holds a value of one of its alternative types, or it holds no value (this state is hard to achieve, see {{ltt|cpp/utility/variant/valueless_by_exception}}).

As with unions, if a variant holds a value of some object type {{tt|T}}, the object representation of {{tt|T}} is allocated directly within the object representation of the variant itself. Variant is not allowed to allocate additional (dynamic) memory.

A variant is not permitted to hold references, arrays, or the type {{tt|void}}. Empty variants are also ill-formed ({{c|std::variant&lt;std::monostate&gt;}} can be used instead).

A variant is permitted to hold the same type more than once, and to hold differently cv-qualified versions of the same type.

As with unions, the default-initialized variant holds a value of its first alternative, unless that alternative is not default-constructible (in which case default constructor won't compile: the helper class {{ltt|cpp/utility/variant/monostate|std::monostate}} can be used to make such variants default-constructible)

===Template parameters===
{{par begin}}
{{par | Types | the types that may be stored in this variant. All types must be (possibly cv-qualified) non-array object types.}}
{{par end}}

===Member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc constructor}}
{{dsc inc | cpp/utility/variant/dsc destructor}}
{{dsc inc | cpp/utility/variant/dsc operator{{=}}}}

{{dsc h2 | Observers}}
{{dsc inc | cpp/utility/variant/dsc index}}
{{dsc inc | cpp/utility/variant/dsc valueless_by_exception}}

{{dsc h2 | Modifiers}}
{{dsc inc | cpp/utility/variant/dsc emplace}}
{{dsc inc | cpp/utility/variant/dsc swap}}
{{dsc end}}

===Non-member functions===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc visit}}
{{dsc inc | cpp/utility/variant/dsc holds_alternative}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc inc | cpp/utility/variant/dsc get_if}}
{{dsc inc | cpp/utility/variant/dsc operator_cmp}}
{{dsc inc | cpp/utility/variant/dsc swap2}}
{{dsc end}}

===Helper classes===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc monostate}} &lt;!-- including monostate's comparisons and hash --&gt;
{{dsc inc | cpp/utility/variant/dsc bad_variant_access}}
{{dsc inc | cpp/utility/variant/dsc variant_size}}
{{dsc inc | cpp/utility/variant/dsc variant_alternative}}
{{dsc inc | cpp/utility/variant/dsc hash}}
{{dsc inc | cpp/utility/variant/dsc uses_allocator}}
{{dsc end}}

===Helper objects===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc variant_npos}}
{{dsc end}}

===Example===

{{example
 |
 | code=
#include &lt;variant&gt;
#include &lt;string&gt;

int main()
{
    std::variant&lt;int, float&gt; v, w;
    v = 12; // v contains int
    int i = std::get&lt;int&gt;(v);
    w = std::get&lt;int&gt;(v);
    w = std::get&lt;0&gt;(v); // same effect as the previous line
    w = v; // same effect as the previous line

//  std::get&lt;double&gt;(v); // error: no double in [int, float]
//  std::get&lt;3&gt;(v);      // error: valid index values are 0 and 1

    try {
      std::get&lt;float&gt;(w); // w contains int, not float: will throw
    }
    catch (std::bad_variant_access&amp;) {}

    std::variant&lt;std::string&gt; v(&quot;abc&quot;); // converting constructors work when unambiguous
    v = &quot;def&quot;; // converting assignment also works when unambiguous
}
| output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc in_place}}
{{dsc inc | cpp/utility/dsc optional}}
{{dsc inc | cpp/utility/dsc any}}
{{dsc end}}

[[zh:cpp/utility/variant]]</text>
      <sha1>7t1rqz9kd3h594pg1ogmreqva9lhyp5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/bad variant access</title>
    <ns>0</ns>
    <id>15592</id>
    <revision>
      <id>91862</id>
      <parentid>89742</parentid>
      <timestamp>2017-03-31T20:00:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1454">{{cpp/title|bad_variant_access}}
{{cpp/utility/variant/navbar}}
{{ddcl | since=c++17|header=variant|
class bad_variant_access : public std::exception
}}

{{tt|std::bad_variant_access}} is the type of the exception thrown in the following situations:
* {{ltt|cpp/utility/variant/get|std::get{{small|(std::variant)}}}} called with an index or type that does not match the currently active alternative
* {{ltt|cpp/utility/variant/visit|std::visit}} called to visit a variant that is {{ltt|cpp/utility/variant/valueless_by_exception|valueless_by_exception}}

===Member functions===
{{dsc begin}}
{{dsc mem ctor | bad_variant_access() | nolink=true | constructs the bad_variant_access object}}
{{dsc end}}

{{member | {{small|std::bad_variant_access ::}}bad_variant_access() | 2=
{{ddcl | 1=
bad_variant_access();
}}

Constructs a new instance of {{tt|std::bad_variant_access}}.

===Parameters===
(none)

===Exceptions===
{{unreviewed noexcept}}

}}

{{cpp/error/exception/inherit}}

===Example===
{{example|code=
#include &lt;variant&gt;
#include &lt;iostream&gt;

int main()
{
    std::variant&lt;int, float&gt; v;
    v = 12;
    try {
      std::get&lt;float&gt;(v);
    }
    catch(const std::bad_variant_access&amp; e) {
        std::cout &lt;&lt; e.what() &lt;&lt; '\n';
    }
}
|p=true
|output=
bad_variant_access
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc inc | cpp/utility/variant/dsc visit}}
{{dsc end}}

[[zh:cpp/utility/variant/bad_variant_access]]</text>
      <sha1>21df0ysavi8wd94hqwo181tnv4a05ub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/emplace</title>
    <ns>0</ns>
    <id>15605</id>
    <revision>
      <id>91291</id>
      <parentid>89770</parentid>
      <timestamp>2017-03-30T22:20:56Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>LWG 2857, but using the injected-class-name to simplify</comment>
      <text xml:space="preserve" bytes="2843">{{cpp/variant/title|emplace}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17|1=
template &lt;class T, class... Args&gt;
T&amp; emplace(Args&amp;&amp;... args);
}}
{{dcl | num=2 | since=c++17|1=
template &lt;class T, class U, class... Args&gt;
T&amp; emplace(std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args);
}}
{{dcl | num=3 | since=c++17|1=
template &lt;size_t I, class... Args&gt;
std::variant_alternative_t&lt;I, variant&gt;&amp; emplace(Args&amp;&amp;... args);
}}
{{dcl | num=4 | since=c++17|
template &lt;size_t I, class U, class... Args&gt;
std::variant_alternative_t&lt;I, variant&gt;&amp; emplace(std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args);
}}
{{dcl end}}

Creates a new value in-place, in an existing {{tt|variant}} object

@1@ Equivalent to {{c|emplace&lt;I&gt;(std::forward&lt;Args&gt;(args)...)}}, where {{tt|I}} is the zero-based index of {{tt|T}} in {{tt|Types...}}. {{cpp/enable_if|{{tt|std::is_constructible_v&lt;T, Args...&gt;}} is {{tt|true}}, and {{tt|T}} occurs exactly once in {{tt|Types...}}}}
@2@ Equivalent to {{c|emplace&lt;I&gt;(il, std::forward&lt;Args&gt;(args)...)}}, where {{tt|I}} is the zero-based index of {{tt|T}} in {{tt|Types...}}. {{cpp/enable_if|{{tt|std::is_constructible_v&lt;T, std::initializer_list&amp;lt;U&gt;&amp;, Args...&gt;}} is {{tt|true}}, and {{tt|T}} occurs exactly once in {{tt|Types...}}}}
@3@ First, destroys the currently contained value (if any). Then [[cpp/language/direct initialization|direct-initializes]] the contained value as if constructing a value of type {{tt|T_I}} with the arguments {{c|std::forward&lt;Args&gt;(args)...}}. If an exception is thrown, {{tt|*this}} may become [[cpp/utility/variant/valueless_by_exception|valueless_by_exception]].
{{cpp/enable_if|{{tt|std::is_constructible_v&lt;T_I, Args...&gt;}} is {{tt|true}}}}. The behavior is undefined if {{tt|I}} is not less than {{c|sizeof...(Types)}}.
@4@ First, destroys the currently contained value (if any). Then [[cpp/language/direct initialization|direct-initializes]] the contained value as if constructing a value of type {{tt|T_I}} with the arguments {{c|il, std::forward&lt;Args&gt;(args)...}}. If an exception is thrown, {{tt|*this}} may become [[cpp/utility/variant/valueless_by_exception|valueless_by_exception]].
{{cpp/enable_if|{{tt|std::is_constructible_v&lt;T_I, initializer_list&amp;lt;U&gt;&amp;, Args...&gt;}} is {{tt|true}}}}. The behavior is undefined if {{tt|I}} is not less than {{c|sizeof...(Types)}}.

===Parameters===
{{par begin}}
{{par | args | constructor arguments to use when constructing the new value }}
{{par | il | initializer_list argument to use when constructing the new value}}
{{par end}}

===Return value===
A reference to the new contained value.

===Exceptions===
@1-4@ Any exception thrown during the initialization of the contained value.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc operator{{=}}}}
{{dsc end}}

[[zh:cpp/utility/variant/emplace]]</text>
      <sha1>1gxk62vp24xzespcpyl6e90zrrzameh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/get</title>
    <ns>0</ns>
    <id>15614</id>
    <revision>
      <id>89761</id>
      <parentid>88218</parentid>
      <timestamp>2017-01-24T13:40:36Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2780">{{cpp/title|get {{small|(std::variant)}}}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header | variant}}
{{dcl rev begin | since=c++17 | num=1 }}
{{dcl|
template &lt;std::size_t I, class... Types&gt;
constexpr std::variant_alternative_t&lt;
  I, std::variant&lt;Types...&gt;
&gt;&amp; get(std::variant&lt;Types...&gt;&amp; v); }}
{{dcl|
template &lt;std::size_t I, class... Types&gt;
constexpr std::variant_alternative_t&lt;
  I, std::variant&lt;Types...&gt;
&gt;&amp;&amp; get(std::variant&lt;Types...&gt;&amp;&amp; v); }}
{{dcl|
template &lt;std::size_t I, class... Types&gt;
constexpr std::variant_alternative_t&lt;
  I, std::variant&lt;Types...&gt;
&gt; const&amp; get(const std::variant&lt;Types...&gt;&amp; v); }}
{{dcl|
template &lt;std::size_t I, class... Types&gt;
constexpr std::variant_alternative_t&lt;
  I, std::variant&lt;Types...&gt;
&gt; const&amp;&amp; get(const std::variant&lt;Types...&gt;&amp;&amp; v);}}
{{dcl rev end}}
{{dcl rev begin | since=c++17 | num=2 }}
{{dcl|
template &lt;class T, class... Types&gt;
constexpr T&amp; get(std::variant&lt;Types...&gt;&amp; v); }}
{{dcl|
template &lt;class T, class... Types&gt;
constexpr T&amp;&amp; get(std::variant&lt;Types...&gt;&amp;&amp; v); }}
{{dcl|
template &lt;class T, class... Types&gt;
constexpr const T&amp; get(const std::variant&lt;Types...&gt;&amp; v); }}
{{dcl|
template &lt;class T, class... Types&gt;
constexpr const T&amp;&amp; get(const std::variant&lt;Types...&gt;&amp;&amp; v); }}
{{dcl rev end}}
{{dcl end}}

@1@ Index-based value accessor: If {{c|v.index() {{==}} I}}, returns a reference to the value stored in {{tt|v}}. Otherwise, throws {{lc|std::bad_variant_access}}. The call is ill-formed if {{tt|I}} is not a valid index in the variant.
@2@ Type-based value accessor: If {{c|v}} holds the alternative {{tt|T}}, returns a reference to the value stored in {{tt|v}}. Otherwise, throws {{lc|std::bad_variant_access}}. The call is ill-formed if {{tt|T}} is not a unique element of {{tt|Types...}}.

===Parameters===
{{par begin}}
{{par | I | index to look up }}
{{par | Type | unique type to look up }}
{{par | v | a variant}}
{{par end}}

===Return value===
Reference to the value stored in the variant.

===Exceptions===
@1,2@ Throws {{lc|std::bad_variant_access}} on errors.

===Example===
{{example|code=
#include &lt;variant&gt;
#include &lt;string&gt;
 
int main()
{
    std::variant&lt;int, float&gt; v{12}, w;
    int i = std::get&lt;int&gt;(v);
    w = std::get&lt;int&gt;(v);
    w = std::get&lt;0&gt;(v); // same effect as the previous line
 
//  std::get&lt;double&gt;(v); // error: no double in [int, float]
//  std::get&lt;3&gt;(v);      // error: valid index values are 0 and 1
 
    try {
      std::get&lt;float&gt;(w); // w contains int, not float: will throw
    }
    catch (std::bad_variant_access&amp;) {}
}
|output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc get_if}}
{{dsc inc | cpp/utility/tuple/dsc get}}
{{dsc inc | cpp/container/array/dsc get}}
{{dsc inc | cpp/utility/pair/dsc get}}
{{dsc end}}

[[zh:cpp/utility/variant/get]]</text>
      <sha1>e41f998b30egbno7fabyuz1rq49dmt3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/get if</title>
    <ns>0</ns>
    <id>15613</id>
    <revision>
      <id>91674</id>
      <parentid>89757</parentid>
      <timestamp>2017-03-31T19:54:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2176">{{cpp/title|get_if}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header | variant}}
{{dcl rev begin | num=1 | since=c++17 }}
{{dcl |
template &lt;std::size_t I, class... Types&gt;
constexpr std::add_pointer_t&lt;
    std::variant_alternative_t&lt;I, std::variant&lt;Types...&gt;&gt;
&gt; get_if(std::variant&lt;Types...&gt;* pv)
}}
{{dcl | 
template &lt;std::size_t I, class... Types&gt;
constexpr std::add_pointer_t&lt;
    const std::variant_alternative_t&lt;I, variant&lt;Types...&gt;&gt;
&gt; get_if(const std::variant&lt;Types...&gt;* pv)
}}
{{dcl rev end}}
{{dcl rev begin | num=2 | since=c++17 }}
{{dcl | 
template &lt;class T, class... Types&gt;
constexpr std::add_pointer_t&lt;T&gt; get_if(variant&lt;Types...&gt;* pv)
}}
{{dcl |
template &lt;class T, class... Types&gt;
constexpr std::add_pointer_t&lt;const T&gt; get_if(const variant&lt;Types...&gt;* pv)
}}
{{dcl rev end}}
{{dcl end}}

@1@ Index-based non-throwing accessor: If {{tt|pv}} is not a null pointer and {{c|pv-&gt;index() {{==}} I}}, returns a pointer to the value stored in the variant pointed to by {{tt|pv}}. Otherwise, returns a null pointer value. The call is ill-formed if {{tt|I}} is not a valid index in the variant or if {{tt|T_I}} is a (possibly cv-qualified) type {{tt|void}}.
@2@ Type-based non-throwing accessor: Equivalent to {{v|1}} with {{tt|I}} being the zero-based index of {{tt|T}} in {{tt|Types...}}. The call is ill-formed if {{tt|T}} is not a unique element of {{tt|Types...}} or if {{tt|T_I}} is a (possibly cv-qualified) type {{tt|void}}.

===Parameters===
{{par begin}}
{{par | I | index to look up }}
{{par | Type | unique type to look up }}
{{par | pv | pointer to a variant}}
{{par end}}

===Return value===
Pointer to the value stored in the pointed-to variant or null pointer on error.

===Exceptions===
@1,2@ {{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;variant&gt;
#include &lt;iostream&gt;
 
int main()
{
    std::variant&lt;int, float&gt; v{12};

    if(auto pval = std::get_if&lt;int&gt;(&amp;v))
      std::cout &lt;&lt; &quot;variant value: &quot; &lt;&lt; *pval &lt;&lt; '\n'; 
    else 
      std::cout &lt;&lt; &quot;failed to get value!&quot; &lt;&lt; '\n'; 
}
|output=
variant value: 12
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc end}}

[[zh:cpp/utility/variant/get_if]]</text>
      <sha1>15d3fz23p7mpziu7dt2m9vc1xlsn7us</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/hash</title>
    <ns>0</ns>
    <id>15609</id>
    <revision>
      <id>91128</id>
      <parentid>89747</parentid>
      <timestamp>2017-03-20T22:03:05Z</timestamp>
      <contributor>
        <username>Cubbi</username>
        <id>45</id>
      </contributor>
      <comment>p0599r1 says this hash can throw</comment>
      <text xml:space="preserve" bytes="1203">{{cpp/title|hash &lt;small&gt;&lt;std::variant&gt;&lt;/small&gt;}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header | variant}}
{{dcl | since=c++17 | 1=
template &lt;class... Types&gt;
struct hash&lt;std::variant&lt;Types...&gt;&gt;;
}}
{{dcl end}}

The template specialization of {{lc|std::hash}} for the {{lc|std::variant}} template allows users to obtain hashes of {{tt|variant}} objects.

The specialization {{lc|std::hash&lt;std::variant&lt;Types...&gt;&gt;}} is enabled (see {{lc|std::hash}}) if every specialization in {{lc|std::hash&lt;std::remove_const_t&lt;Types&gt;&gt;...}} is enabled, and is disabled otherwise.

The member functions of this specialization are not guaranteed to be noexcept.

===Template parameters===
{{par begin}}
{{par | Types | the types of the alternatives supported by the {{tt|variant}} object}}
{{par end}}

===Notes===
Unlike {{ltt|cpp/utility/optional/hash|std::hash&lt;std::optional&gt;}}, hash of a variant does not typically equal the hash of the contained value; this makes it possible to distinguish {{c|std::variant&lt;int, int&gt;}} holding the same value as different alternatives.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/dsc hash}}
{{dsc end}}

[[zh:cpp/utility/variant/hash]]</text>
      <sha1>3zjwm9sk04hijz93nw3kthrxyw7ipry</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/holds alternative</title>
    <ns>0</ns>
    <id>15612</id>
    <revision>
      <id>91929</id>
      <parentid>89764</parentid>
      <timestamp>2017-03-31T20:02:11Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1233">{{cpp/title|holds_alternative}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header | variant}}
{{dcl | since=c++17 |
template &lt;class T, class... Types&gt;
constexpr bool holds_alternative(const std::variant&lt;Types...&gt;&amp; v)
}}
{{dcl end}}

Checks if the variant {{tt|v}} holds the alternative {{tt|T}}. The call is ill-formed if {{tt|T}} appears more than once in {{tt|Types...}}

===Parameters===
{{par begin}}
{{par | v | variant to examine}}
{{par end}}

===Return value===
{{tt|true}} if the variant currently holds the alternative {{tt|T}}, {{tt|false}} otherwise.

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;variant&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
int main()
{
    std::variant&lt;int, std::string&gt; v = &quot;abc&quot;;
    std::cout &lt;&lt; std::boolalpha
              &lt;&lt; &quot;variant holds int? &quot;
              &lt;&lt; std::holds_alternative&lt;int&gt;(v) &lt;&lt; '\n'
              &lt;&lt; &quot;variant holds string? &quot;
              &lt;&lt; std::holds_alternative&lt;std::string&gt;(v) &lt;&lt; '\n';
}
|output=
variant holds int? false
variant holds string? true
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc index}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc end}}

[[zh:cpp/utility/variant/holds_alternative]]</text>
      <sha1>nglgbtzztaqvd4zauglw2ieukglz3cz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/index</title>
    <ns>0</ns>
    <id>15590</id>
    <revision>
      <id>91657</id>
      <parentid>89746</parentid>
      <timestamp>2017-03-31T19:53:38Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="812">{{cpp/variant/title|index}}
{{cpp/utility/variant/navbar}}
{{ddcl | since=c++17|
constexpr std::size_t index() const
}}

Returns the zero-based index of the alternative that is currently held by the variant.

If the variant is {{rlp|valueless_by_exception}}, returns {{rlp|variant_npos}}

===Exceptions===
{{unreviewed noexcept}}

===Example===
{{example|code=
#include &lt;variant&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
int main()
{
    std::variant&lt;int, std::string&gt; v = &quot;abc&quot;;

    std::cout &lt;&lt; &quot;v.index = &quot; &lt;&lt; v.index() &lt;&lt; '\n';

    v = {}; 
    
    std::cout &lt;&lt; &quot;v.index = &quot; &lt;&lt; v.index() &lt;&lt; '\n';
}
|output=
v.index = 1
v.index = 0
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc holds_alternative}}
{{dsc inc | cpp/utility/variant/dsc get}}
{{dsc end}}

[[zh:cpp/utility/variant/index]]</text>
      <sha1>agcf918d0w3obs11pw9e9d2epeayeil</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/monostate</title>
    <ns>0</ns>
    <id>15619</id>
    <revision>
      <id>91902</id>
      <parentid>89749</parentid>
      <timestamp>2017-03-31T20:01:16Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="2163">{{cpp/title|monostate}}
{{cpp/utility/variant/navbar}}
{{ddcl | since=c++17|header=variant|
struct monostate { }
}}

Unit type intended for use as a well-behaved empty alternative in {{lc|std::variant}}. In particular, a variant of non-default-constructible types may list {{tt|std::monostate}} as its first alternative: this makes the variant itself default-contructible.

===Member functions===
{{dsc begin}}
{{dsc mem ctor | trivial implicit default/copy/move constructor| nolink=true | notes={{mark implicit}} }}
{{dsc mem dtor | trivial implicit destructor | nolink=true | notes={{mark implicit}} }}
{{dsc mem fun | operator{{=}} |trivial implicit copy/move assignment | notes={{mark implicit}}| nolink=true}}
{{dsc end}}

===Non-member functions===
{{member | | 2=
{{ddcl | 1=
constexpr bool operator&lt;(monostate, monostate) noexcept { return false; }
constexpr bool operator&gt;(monostate, monostate) noexcept { return false; }
constexpr bool operator&lt;=(monostate, monostate) noexcept { return true; }
constexpr bool operator&gt;=(monostate, monostate) noexcept { return true; }
constexpr bool operator==(monostate, monostate) noexcept { return true; }
constexpr bool operator!=(monostate, monostate) noexcept { return false; }
}}

All instances of {{tt|std::monostate}} compare equal.
===Exceptions===
{{unreviewed noexcept}}
}}

===Helper classes===
{{member | std::hash{{small|&lt;std::monostate&gt;}}| 2=
{{ddcl | 1=
template &lt;&gt; struct std::hash&lt;monostate&gt;;
}}
Specializes the {{lc|std::hash}} algorithm for {{tt|std::monostate}}
}}

===Example===
{{example
 |
 | code=
#include &lt;variant&gt;
#include &lt;iostream&gt;

struct S
{
    S(int i) : i(i) {}
    int i;
};

int main() {
    
    // Without the monostate type this declaration will fail.
    // This is because S is not default-constructible.
    
    std::variant&lt;std::monostate, S&gt; var; 
    
    // var.index() is now 0 - the first element
    // std::get&lt;S&gt; will throw! We need to assign a value
    
    var = 12; 

    std::cout &lt;&lt; std::get&lt;S&gt;(var).i &lt;&lt; '\n';
}
| output= 12
}}


===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc constructor}}
{{dsc end}}

[[zh:cpp/utility/variant/monostate]]</text>
      <sha1>7z3eo7hx0kptv2082knkde8wls9rjzg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/operator cmp</title>
    <ns>0</ns>
    <id>15620</id>
    <revision>
      <id>90020</id>
      <parentid>90019</parentid>
      <timestamp>2017-02-01T20:11:42Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>std:: throughout</comment>
      <text xml:space="preserve" bytes="4291">{{title|1=operator==, !=, &lt;, &lt;=, &gt;, &gt;={{small|(std::variant)}}}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header | variant}}
{{dcl | since=c++17 | num=1 |1=
template &lt;class... Types&gt;
constexpr bool operator==(const std::variant&lt;Types...&gt;&amp; v, const std::variant&lt;Types...&gt;&amp; w);
}}
{{dcl | since=c++17 | num=2 |1=
template &lt;class... Types&gt;
constexpr bool operator!=(const std::variant&lt;Types...&gt;&amp; v, const std::variant&lt;Types...&gt;&amp; w);
}}
{{dcl | since=c++17 | num=3 |1=
template &lt;class... Types&gt;
constexpr bool operator&lt;(const std::variant&lt;Types...&gt;&amp; v, const std::variant&lt;Types...&gt;&amp; w);
}}
{{dcl | since=c++17 | num=4 |1=
template &lt;class... Types&gt;
constexpr bool operator&gt;(const std::variant&lt;Types...&gt;&amp; v, const std::variant&lt;Types...&gt;&amp; w);
}}
{{dcl | since=c++17 | num=5 |1=
template &lt;class... Types&gt;
constexpr bool operator&lt;=(const std::variant&lt;Types...&gt;&amp; v, const std::variant&lt;Types...&gt;&amp; w);
}}
{{dcl | since=c++17 | num=6 |1=
template &lt;class... Types&gt;
constexpr bool operator&gt;=(const std::variant&lt;Types...&gt;&amp; v, const std::variant&lt;Types...&gt;&amp; w);
}}
{{dcl end}}

@1@ Equality operator for variants:
*If {{c|1=v.index() != w.index()}}, returns {{tt|false}};
*otherwise if {{c|v.valueless_by_exception()}}, returns {{tt|true}};
*otherwise returns {{c|1=std::get&lt;v.index()&gt;(v) == std::get&lt;v.index()&gt;(w)}}. The behavior is undefined if {{c|1=std::get&lt;i&gt;(v) == std::get&lt;i&gt;(w)}} is not a valid expression returning a type convertible to bool, for any {{tt|i}}.
@2@ Inequality operator for variants:
* If {{c|1=v.index() != w.index()}}, returns {{tt|true}};
* otherwise if {{c|v.valueless_by_exception()}}, returns {{tt|false}};
* otherwise returns {{c|1=std::get&lt;v.index()&gt;(v) != std::get&lt;v.index()&gt;(w)}}. The behavior is undefined if {{c|1=std::get&lt;i&gt;(v) != std::get&lt;i&gt;(w)}} is not a valid expression returning a type convertible to bool, for any {{tt|i}}.
@3@ Less-than operator for variants:
* If {{c|1=w.valueless_by_exception()}}, returns {{tt|false}};
* otherwise if {{c|v.valueless_by_exception()}}, returns {{tt|true}};
* otherwise if {{c|v.index() &lt; w.index()}}, returns {{tt|true}};
* otherwise if {{c|v.index() &gt; w.index()}}, returns {{tt|false}};
* otherwise returns {{c|1=std::get&lt;v.index()&gt;(v) &lt; std::get&lt;v.index()&gt;(w)}}. The behavior is undefined if {{c|1=std::get&lt;i&gt;(v) &lt; std::get&lt;i&gt;(w)}} is not a valid expression returning a type convertible to bool, for any {{tt|i}}.
@4@ Greater-than operator for variants:
* If {{c|v.valueless_by_exception()}}, returns {{tt|false}};
* otherwise if {{c|w.valueless_by_exception()}}, returns {{tt|true}};
* otherwise if {{c|v.index() &gt; w.index()}}, returns {{tt|true}};
* otherwise if {{c|v.index() &lt; w.index()}}, returns {{tt|false}};
* otherwise returns {{c|std::get&lt;v.index()&gt;(v) &gt; std::get&lt;v.index()&gt;(w)}}. The behavior is undefined if {{c|1=std::get&lt;i&gt;(v) &gt; std::get&lt;i&gt;(w)}} is not a valid expression returning a type convertible to bool, for any {{tt|i}}.
@5@ Less-equal operator for variants:
* If {{c|v.valueless_by_exception()}}, returns {{tt|true}};
* otherwise if {{c|w.valueless_by_exception()}}, returns {{tt|false}};
* otherwise if {{c|v.index() &lt; w.index()}}, returns {{tt|true}};
* otherwise if {{c|v.index() &gt; w.index()}}, returns {{tt|false}};
* otherwise returns {{c|1=std::get&lt;v.index()&gt;(v) &lt;= std::get&lt;v.index()&gt;(w)}}. The behavior is undefined if {{c|1=std::get&lt;i&gt;(v) &lt;= std::get&lt;i&gt;(w)}} is not a valid expression returning a type convertible to bool, for any {{tt|i}}.
@6@ Greater-equal operator for variants:
* If {{c|w.valueless_by_exception()}}, returns {{tt|true}};
* otherwise if {{c|v.valueless_by_exception()}}, returns {{tt|false}};
* otherwise if {{c|v.index() &gt; w.index()}}, returns {{tt|true}};
* otherwise if {{c|v.index() &lt; w.index()}}, returns {{tt|false}};
* otherwise {{c|1=std::get&lt;v.index()&gt;(v) &gt;= std::get&lt;v.index()&gt;(w)}}.  The behavior is undefined if {{c|1=std::get&lt;i&gt;(v) &gt;= std::get&lt;i&gt;(w)}} is not a valid expression returning a type convertible to bool, for any {{tt|i}}.

===Parameters===
{{par begin}}
{{par | v,w | variants to compare }}
{{par end}}

===Return value===
The boolean result of the comparison as described above.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/optional/dsc operator_cmp}}
{{dsc end}}

[[zh:cpp/utility/variant/operator_cmp]]</text>
      <sha1>gjiovb64g83ca1duda6ocgvzee8zucd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/operator=</title>
    <ns>0</ns>
    <id>15604</id>
    <revision>
      <id>92114</id>
      <parentid>91971</parentid>
      <timestamp>2017-04-05T19:45:30Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>/* Exceptions */ ok</comment>
      <text xml:space="preserve" bytes="4497">{{cpp/variant/title|operator{{=}}}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17|1=
variant&amp; operator=(const variant&amp; rhs);
}}
{{dcl | num=2 | since=c++17|1=
variant&amp; operator=(variant&amp;&amp; rhs) noexcept(/* see below */);
}}
{{dcl | num=3 | since=c++17|1=
template &lt;class T&gt; variant&amp; operator=(T&amp;&amp; t) noexcept(/* see below */);
}}
{{dcl end}}

Assigns a new value to an existing {{tt|variant}} object

@1@ Copy-assignment:
* If both {{tt|*this}} and {{tt|rhs}} are valueless by exception, does nothing.
* Otherwise, if {{tt|rhs}} is valueless, but {{tt|*this}} is not, destroys the value contained in {{tt|*this}} and makes it valueless.
* Otherwise, if {{tt|rhs}} holds the same alternative as {{tt|*this}}, assigns the value contained in {{tt|rhs}} to the value contained in {{tt|*this}}. If an exception is thrown, {{tt|*this}} does not become valueless: the value depends on the exception safety guarantee of the alternative's copy assignment.
* Otherwise, if the alternative held by {{tt|other}} is either nothrow copy constructible or not nothrow move constructible (as determined by {{lc|std::is_nothrow_copy_constructible}} and {{lc|std::is_nothrow_move_constructible}}, respectively), equivalent to {{c|this-&gt;emplace&lt;other.index()&gt;(get&lt;other.index()&gt;(other))}}.
* Otherwise, equivalent to {{c|1=this-&gt;operator=(variant(rhs))}}.
@@ {{cpp/enable_if|{{tt|std::is_copy_constructible_v&lt;T_i&gt; &amp;&amp; std::is_copy_assignable_v&lt;T_i&gt;}} is {{tt|true}} for all {{tt|T_i}} in {{tt|Types...}} }}
@2@ Move-assignment:
* If both {{tt|*this}} and {{tt|rhs}} are valueless by exception, does nothing
* Otherwise, if {{tt|rhs}} is valueless, but {{tt|*this}} is not, destroys the value contained in {{tt|*this}} and makes it valueless
* Otherwise, if {{tt|rhs}} holds the same alternative as {{tt|*this}}, assigns {{c|std::get&lt;j&gt;(std::move(rhs))}} to the value contained in {{tt|*this}}, with {{tt|j}} being {{tt|index()}}. If an exception is thrown, {{tt|*this}} does not become valueless: the value depends on the exception safety guarantee of the alternative's move assignment. 
* Otherwise (if {{tt|rhs}} and {{tt|*this}} hold different alternatives), equivalent to {{c|this-&gt;emplace&lt;other.index()&gt;(get&lt;other.index()&gt;(std::move(other)))}}. If an exception is thrown by {{tt|T_i}}'s move constructor, {{tt|*this}} becomes {{ltt|cpp/utility/variant/valueless_by_exception}}.
@@ {{cpp/enable_if|{{tt|std::is_move_constructible_v&lt;T_i&gt; &amp;&amp; std::is_move_assignable_v&lt;T_i&gt;}} is {{tt|true}} for all {{tt|T_i}} in {{tt|Types...}}}}. 
@3@ Converting assignment. 
* Determines the alternative type {{tt|T_j}} that would be selected by overload resolution for the expression {{c|F(std::forward&lt;T&gt;(t))}} if there was an overload of imaginary function {{c|F(T_i)}} for every {{tt|T_i}} from {{tt|Types...}} in scope at the same time. 
* If {{tt|*this}} already holds a {{tt|T_j}}, assigns {{c|std::forward&lt;T&gt;(t)}} to the value contained in {{tt|*this}}. If an exception is thrown, {{tt|*this}} does not become valueless: the value depends on the exception safety guarantee of the assignment called.
* Otherwise, if {{c|std::is_nothrow_constructible_v&lt;T_j, T&gt; {{!!}} !std::is_nothrow_move_constructible_v&lt;T_j&gt;}} is {{c|true}}, equivalent to {{c|this-&gt;emplace&lt;j&gt;(std::forward&lt;T&gt;(t))}};
* Otherwise, equivalent to {{c|1=this-&gt;operator=(variant(std::forward&lt;T&gt;(t)))}}.

{{cpp/enable_if|{{tt|std::is_same_v&lt;std::decay_t&lt;T&gt;, variant&gt;}} is false and  {{tt|std::is_assignable_v&lt;T_j&amp;, T&gt;}} is true and {{tt|std::is_constructible_v&lt;T_j, T&gt;}} is true and the expression {{c|F(std::forward&lt;T&gt;(t))}} (with F being the above-mentioned set of imaginary functions) is well formed}}
{{source|1=
variant&lt;string&gt; v1;
v1 = &quot;abc&quot;; // OK
variant&lt;string, string&gt; v2;
v2 = &quot;abc&quot;; // Error
variant &lt;string, bool&gt; v3;
v3 = &quot;abc&quot;; // OK but chooses bool
}}

===Parameters===
{{par begin}}
{{par | rhs | another {{tt|variant}}}}
{{par | t | a value convertible to one of the variant's alternatives}}
{{par end}}

===Return value===
{{c|*this}}

===Exceptions===
@1@ May throw any exception thrown by assignment and copy/move initialization of any alternative
@2@ {{noexcept|((std::is_nothrow_move_constructible_v&lt;Types&gt; &amp;&amp; std::is_nothrow_move_assignable_v&lt;Types&gt;) &amp;&amp; ...)}}
@3@ {{noexcept|std::is_nothrow_assignable_v&lt;T_j&amp;, T&gt; &amp;&amp; std::is_nothrow_constructible_v&lt;T_j, T&gt;}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc emplace}}
{{dsc end}}

[[zh:cpp/utility/variant/operator=]]</text>
      <sha1>6c7x4ropuxxz6rti0kgfkoxogst56nh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/swap</title>
    <ns>0</ns>
    <id>15606</id>
    <revision>
      <id>92115</id>
      <parentid>91796</parentid>
      <timestamp>2017-04-05T19:45:50Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="1532">{{cpp/variant/title|swap}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17|1=
void swap( variant&amp; rhs ) noexcept(/* see below */);
}}
{{dcl end}}

Swaps two {{tt|variant}} objects.

* if both {{tt|*this}} and {{tt|rhs}} are valueless by exception, does nothing
* otherwise, if both {{tt|*this}} and {{tt|rhs}} hold the same alternative, calls {{c|swap(std::get&lt;i&gt;(*this), std:get&lt;i&gt;(rhs))}} where {{tt|i}} is {{tt|index()}}. If an exception is thrown, the state of the values depends on the exception safety of the swap function called.
* otherwise, exchanges values of {{tt|rhs}} and {{tt|*this}}. If an exception is thrown, the state of {{tt|*this}} and {{tt|rhs}} depends on exception safety of variant's move constructor.

The behavior is undefined unless lvalues of type {{tt|T_i}} are {{concept|Swappable}} and {{c|std::is_move_constructible_v&lt;T_i&gt;}} is {{tt|true}} for all {{tt|T_i}} in {{tt|Types...}}.

===Parameters===
{{par begin}}
{{par | rhs | a variant object to swap with }}
{{par end}}

===Return value===
(none)

===Exceptions===
If {{c|this-&gt;index() {{==}} rhs.index()}}, may throw any exception thrown by {{c|swap(std::get&lt;i&gt;(*this), std::get&lt;i&gt;(rhs))}} with i being index().

Otherwise, may throw any exception thrown by the move constructors of the alternatives currently held by {{c|*this}} and {{c|rhs}}.

{{noexcept|((std::is_nothrow_move_constructible_v&lt;Types&gt; &amp;&amp; 
           std::is_nothrow_swappable_v&lt;Types&gt;) &amp;&amp; ...)}}

===Example===
{{example}}


[[zh:cpp/utility/variant/swap]]</text>
      <sha1>qf0mkx4jlwpo39qahahdlquoghfoerj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/swap2</title>
    <ns>0</ns>
    <id>15608</id>
    <revision>
      <id>92116</id>
      <parentid>91911</parentid>
      <timestamp>2017-04-05T19:46:09Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="862">{{cpp/title | swap{{small|(std::variant)}}}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header | variant}}
{{dcl | since=c++17 |
template &lt;class... Types&gt;
void swap(variant&lt;Types...&gt;&amp; lhs, variant&lt;Types...&gt;&amp; rhs) noexcept(/* see below */);
}}
{{dcl end}}

Overloads the {{lc|std::swap}} algorithm for {{lc|std::variant}}. Effectively calls {{c|lhs.swap(rhs)}}.

{{cpp/enable if|{{c|is_move_constructible_v&lt;T_i&gt;}} and {{c|is_swappable_v&lt;T_i&gt;}} are both true for all {{tt|T_i}} in {{tt|Types...}}}}

===Parameters===
{{par begin}}
{{par | lhs, rhs | {{tt|variant}} objects whose values to swap}}
{{par end}}

===Return value===
(none)

===Exceptions===
{{noexcept|noexcept(lhs.swap(rhs))}}

===Example===
{{example
 | code=
 | output=
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc swap}}
{{dsc end}}

[[zh:cpp/utility/variant/swap2]]</text>
      <sha1>fpge2vuozct5teclfa0e38rbm2gh1wc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/uses allocator</title>
    <ns>0</ns>
    <id>15610</id>
    <revision>
      <id>89748</id>
      <parentid>86718</parentid>
      <timestamp>2017-01-23T18:56:56Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="898">{{cpp/title|uses_allocator{{small|&lt;std::variant&gt;}}}}
{{cpp/utility/variant/navbar}}
{{ddcl | since=c++17 |
template &lt;class... Types, class Alloc&gt;
struct uses_allocator&lt;std::variant&lt;Types...&gt;, Alloc&gt; : std::true_type { };
}}

Provides a specialization of the {{lc|std::uses_allocator}} type trait for {{lc|std::variant}} to inform other library components that variant can be constructed with an allocator, even though it does not have a nested {{tt|allocator_type}}.

{{par begin}}
{{par hreq}}
{{par req concept | Alloc | Allocator}}
{{par end}}

{{cpp/types/integral_constant/inherit2 |{{c|true}}|bool}}

===Notes===
The {{lc|std::variant}} itself does not use allocators, it passes then through to the constructors of the contained values.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/memory/dsc uses allocator}}
{{dsc end}}

[[zh:cpp/utility/variant/uses_allocator]]</text>
      <sha1>5h9y0486wrcy5mjlfni8wgjlcoi690s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/valueless by exception</title>
    <ns>0</ns>
    <id>15589</id>
    <revision>
      <id>91739</id>
      <parentid>90712</parentid>
      <timestamp>2017-03-31T19:56:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;{{noexcept&quot; to &quot;{{unreviewed noexcept&quot;</comment>
      <text xml:space="preserve" bytes="1410">{{cpp/variant/title|valueless_by_exception}}
{{cpp/utility/variant/navbar}}
{{ddcl | since=c++17|
constexpr bool valueless_by_exception() const;
}}

Returns {{tt|false}} if and only if the variant holds a value.

===Exceptions===
{{unreviewed noexcept}}

===Notes===
A variant may become valueless in the following situations:
* (guaranteed) an exception is thrown during the move initialization of the contained value from the temporary in {{rlp|operator{{=}}|copy assignment}}
* (guaranteed) an exception is thrown during the move initialization of the contained value during {{rlp|operator{{=}}|move assignment}}
* (optionally) an exception is thrown when initializing the contained value during a type-changing {{rlp|operator{{=}}|assignment}}
* (optionally) an exception is thrown when initializing the contained value during a type-changing {{rlp|emplace}}

Since variant is never permitted to allocate dynamic memory, previous value cannot be retained in these situations.

This applies even to variants of non-class types:
{{source|1=
struct S {
    operator int() { throw 42; }
};
variant&lt;float, int&gt; v{12.f}; // OK
v.emplace&lt;1&gt;(S()); // v may be valueless
}}

A variant that is valueless by exception is treated as being in an invalid state: {{rlp|index}} returns {{rlp|variant_npos}}, {{rlp|get}} and {{rlp|visit}} throw {{rlp|bad_variant_access}}.

[[zh:cpp/utility/variant/valueless_by_exception]]</text>
      <sha1>odkexusaoqzf24d8i1g0ri4y63moom4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/variant</title>
    <ns>0</ns>
    <id>15585</id>
    <revision>
      <id>92117</id>
      <parentid>91664</parentid>
      <timestamp>2017-04-05T19:47:27Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <comment>merge noexcept</comment>
      <text xml:space="preserve" bytes="7756">{{cpp/variant/title|variant}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl | num=1 | since=c++17|
constexpr variant() noexcept(/* see below */);
}}
{{dcl | num=2 | since=c++17|
variant(const variant&amp; other);
}}
{{dcl | num=3 | since=c++17|
variant(variant&amp;&amp; other) noexcept(/* see below */);
}}
{{dcl | num=4 | since=c++17|
template&lt; class T &gt;
constexpr variant(T&amp;&amp; t) noexcept(/* see below */);
}}
{{dcl | num=5 | since=c++17|
template&lt; class T, class... Args &gt;
constexpr explicit variant(std::in_place_type_t&lt;T&gt;, Args&amp;&amp;... args);
}}
{{dcl | num=6 | since=c++17|
template&lt; class T, class U, class... Args &gt;
constexpr explicit variant(std::in_place_type_t&lt;T&gt;,
                           std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args);
}}
{{dcl | num=7 | since=c++17|
template&lt; std::size_t I, class... Args &gt;
constexpr explicit variant(std::in_place_index_t&lt;I&gt;, Args&amp;&amp;... args);
}}
{{dcl | num=8 | since=c++17|
template &lt;size_t I, class U, class... Args&gt;
constexpr explicit variant(std::in_place_index_t&lt;I&gt;,
                           std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args);
}}
{{dcl|num=9|since=c++17|
template &lt;class Alloc&gt;
variant(std::allocator_arg_t, const Alloc&amp; a);
}}
{{dcl|num=10|since=c++17|
template &lt;class Alloc&gt;
variant(std::allocator_arg_t, const Alloc&amp; a, const variant&amp; other);
}}
{{dcl|num=11|since=c++17|
template &lt;class Alloc&gt;
variant(std::allocator_arg_t, const Alloc&amp; a, variant&amp;&amp; other);
}}
{{dcl|num=12|since=c++17|
template &lt;class Alloc, class T&gt;
variant(std::allocator_arg_t, const Alloc&amp; a, T&amp;&amp; t);
}}
{{dcl|num=13|since=c++17|
template &lt;class Alloc, class T, class... Args&gt;
variant(std::allocator_arg_t, const Alloc&amp; a,
        std::in_place_type_t&lt;T&gt;, Args&amp;&amp;... args);
}}
{{dcl|num=14|since=c++17|
template &lt;class Alloc, class T, class U, class... Args&gt;
variant(std::allocator_arg_t, const Alloc&amp; a,
        std::in_place_type_t&lt;T&gt;, std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args);
}}
{{dcl|num=15|since=c++17|
template &lt;class Alloc, size_t I, class... Args&gt;
variant(std::allocator_arg_t, const Alloc&amp; a,
        std::in_place_index_t&lt;I&gt;, Args&amp;&amp;... args);
}}
{{dcl|num=16|since=c++17|
template &lt;class Alloc, size_t I, class U, class... Args&gt;
variant(std::allocator_arg_t, const Alloc&amp; a,
        std::in_place_index_t&lt;I&gt;, std::initializer_list&lt;U&gt; il, Args&amp;&amp;... args);
}}
{{dcl end}}


Constructs a new {{tt|variant}} object.

@1@ Default constructor. Constructs a variant holding the [[cpp/language/value initialization|value-initialized]] value of the first alternative ({{ltt|cpp/utility/variant/index|index()}} is zero). This constructor is {{tt|constexpr}} if and only if the value initialization of the alternative type T_0 would satisfy the requirements for a [[cpp/language/constexpr|constexpr function]]. {{cpp/enable_if|{{c|1=std::is_default_constructible_v&lt;T_0&gt;}} is true}}.
@2@ Copy constructor. If {{tt|other}} is not {{rlp|valueless_by_exception}}, constructs a variant holding the same alternative as {{tt|other}} and [[cpp/language/direct initialization|direct-initializes]] the contained value with {{c|1=std::get&lt;other.index()&gt;(other)}}. Otherwise, initializes a valueless_by_exception variant. {{cpp/enable_if| {{c|1=std::is_copy_constructible_v&lt;T_i&gt;}} is true for all {{tt|T_i}} in {{tt|Types...}}}}.
@3@ Move constructor. If {{tt|other}} is not {{rlp|valueless_by_exception}}, constructs a variant holding the same alternative as {{tt|other}} and [[cpp/language/direct initialization|direct-initializes]] the contained value with {{c|1=std::get&lt;other.index()&gt;(std::move(other))}}. Otherwise, initializes a {{tt|valueless_by_exception}} variant. {{cpp/enable_if| {{c|1=std::is_move_constructible_v&lt;T_i&gt;}} is true for all {{tt|T_i}} in {{tt|Types...}}}}
@4@ Converting constructor. Constructs a variant holding the alternative type {{tt|T_j}} that would be selected by overload resolution for the expression {{c|F(std::forward&lt;T&gt;(t)}} if there was an overload of imaginary function F(T_i) for every T_i from Types... in scope at the same time. [[cpp/language/direct initialization|Direct-initializes]] the contained value as if by direct non-list-initialization from {{c|std::forward&lt;T&gt;(t)}}. {{cpp/enable_if| {{c|std::is_same_v&lt;std::decay_t&lt;T&gt;, variant&gt;}} is {{tt|false}}, {{c|std::decay_t&lt;T&gt;}} is neither a specialization of {{lc|std::in_place_type_t}} nor a specialization of {{lc|std::in_place_index_t}},  {{c|std::is_constructible_v&lt;T_j, T&gt;}} is {{tt|true}}, and the expression {{c|1=F(std::forward&lt;T&gt;(t))}} (with F being the above-mentioned set of imaginary functions) is well formed}}. This constructor is a constexpr constructor if T_j's selected constructor is a constexpr constructor.
{{source|1=
variant&lt;string&gt; v(&quot;abc&quot;); // OK
variant&lt;string, string&gt; w(&quot;abc&quot;); // ill-formed, can't select the alternative to convert to
variant&lt;string, bool&gt; x(&quot;abc&quot;); // OK, but chooses bool
}}
@5@ Constructs a variant with the specified alternative {{tt|T}} and initializes the contained value with the arguments {{c|std::forward&lt;Args&gt;(args)...}}.  If T's selected constructor is a constexpr constructor, this constructor is also a constexpr constructor. {{cpp/enable_if|there is exactly one occurrence of T in {{tt|Types...}} and {{c|std::is_constructible_v&lt;T, Args...&gt;}} is {{tt|true}}}}.
@6@ Constructs a variant with the specified alternative {{tt|T}} and initializes the contained value with the arguments {{c|il, std::forward&lt;Args&gt;(args)....}}. If T's selected constructor is a constexpr constructor, this constructor is also a constexpr constructor. {{cpp/enable_if|there is exactly one occurrence of T in {{tt|Types...}} and {{c|std::is_constructible_v&lt;T, initializer_list&lt;U&gt;&amp;, Args...&gt;}} is {{tt|true}}}}.
@7@ Constructs a variant with the alternative T_i specified by the index {{tt|I}} and initializes the contained value with the arguments {{c|std::forward&lt;Args&gt;(args)...}}. If T_i's selected constructor is a constexpr constructor, this constructor is also a constexpr constructor.  {{cpp/enable_if|{{c|I &lt; sizeof...(Types)}} and {{c|std::is_constructible_v&lt;T_i, Args...&gt;}} is true}}. 
@8@ Constructs a variant with the alternative T_i specified by the index {{tt|I}} and initializes the contained value with the arguments {{c|il, std::forward&lt;Args&gt;(args)...}}. If T_i's selected constructor is a constexpr constructor, this constructor is also a constexpr constructor. {{cpp/enable_if|{{c|I &lt; sizeof...(Types)}} and {{c|std::is_constructible_v&lt;T_i, std::initializer_list&lt;U&gt;&amp;, Args...&gt;}} is true}}. 
@9-16@ Same as (1-8), except the contained value is constructed following the [[cpp/memory/uses_allocator|uses-allocator]] protocol

===Parameters===
{{par begin}}
{{par | other | another {{tt|variant}} object whose contained value to copy/move}}
{{par | t | value to initialize the contained value with}}
{{par | args... | arguments to initialize the contained value with}}
{{par | il | initializer list to initialize the contained value with}}
{{par | a | allocator to pass to the contained value}}
{{par hreq}}
{{par req concept | Alloc | Allocator | overloads=9}}
{{par end}}

===Exceptions===
@1@ May throw any exception thrown by the value initialization of the first alternative. {{noexcept|std::is_nothrow_default_constructible_v&lt;T_0&gt;}}
@2@ May throw any exception thrown by direct-initializing any T_i in {{tt|Types...}}
@3@ May throw any exception thrown by move-constructing any T_i in {{tt|Types...}}. {{noexcept| (std::is_nothrow_move_constructible_v&lt;Types&gt; &amp;&amp; ...)}}
@4@ May throw any exception thrown by the initialization of the selected alternative {{tt|T_j}}. {{noexcept|std::is_nothrow_constructible_v&lt;T_j, T&gt;}}
@5-8@ May throw any exception thrown by calling the selected constructor of the selected alternative

===Example===
{{example}}

[[zh:cpp/utility/variant/variant]]</text>
      <sha1>t0spud1w9yyw1gdtd64dgply9gl1l9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/variant alternative</title>
    <ns>0</ns>
    <id>15616</id>
    <revision>
      <id>89744</id>
      <parentid>86748</parentid>
      <timestamp>2017-01-23T18:11:40Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1905">{{cpp/title|variant_alternative|variant_alternative_t}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header|variant}}
{{dcl |since=c++17|num=1|
template &lt;std::size_t I, class T&gt;
struct variant_alternative; /* undefined */
}}
{{dcl |since=c++17|num=2|
template &lt;size_t I, class... Types&gt;
struct variant_alternative&lt;I, variant&lt;Types...&gt;&gt;;
}}
{{dcl |since=c++17|num=3|
template &lt;size_t I, class T&gt; class variant_alternative&lt;I, const T&gt;;
template &lt;size_t I, class T&gt; class variant_alternative&lt;I, volatile T&gt;;
template &lt;size_t I, class T&gt; class variant_alternative&lt;I, const volatile T&gt;;
}}
{{dcl end}}

Provides compile-time indexed access to the types of the alternatives of the possibly cv-qualified variant, combining cv-qualifications of the variant (if any) with the cv-qualifications of the alternative.

Formally, 
@2@ meets the {{concept|TransformationTrait}} requirements with a member typedef {{tt|type}} equal to the type of the alternative with index {{tt|I}}
@3@ meets the {{concept|TransformationTrait}} requirements with a member typedef {{tt|type}} that names, respectively, {{c|std::add_const_t&lt;std::variant_alternative&lt;I,T&gt;&gt;}}, {{c|std::add_volatile_t&lt;std::variant_alternative&lt;I,T&gt;&gt;}}, and {{c|std::add_cv_t&lt;std::variant_alternative&lt;I,T&gt;&gt;}}

===Member types===
{{dsc begin}}
{{dsc hitem | Member type | Definition}}
{{dsc | type | the type of {{tt|I}}th alternative of the variant, where {{tt|I}} must be in {{tt|[0, sizeof...(Types))}}, otherwise the behavior is undefined }}
{{dsc end}}

===Helper template alias===
{{dcl begin}}
{{dcl|since=c++17|1=
template &lt;size_t I, class T&gt;
using variant_alternative_t = typename variant_alternative&lt;I, T&gt;::type;
}}
{{dcl end}}

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc variant_size}}
{{dsc inc | cpp/utility/tuple/dsc tuple_element}}
{{dsc end}}

[[zh:cpp/utility/variant/variant_alternative]]</text>
      <sha1>g87xr796oc1zm6dyjhnez1ipp0ieshm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/variant npos</title>
    <ns>0</ns>
    <id>15591</id>
    <revision>
      <id>90939</id>
      <parentid>89745</parentid>
      <timestamp>2017-03-14T12:51:45Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;constexpr&quot; to &quot;inline constexpr&quot;</comment>
      <text xml:space="preserve" bytes="529">{{cpp/title|variant_npos}}
{{cpp/utility/variant/navbar}}
{{ddcl | since=c++17|header=variant|
inline constexpr std::size_t variant_npos {{=}} -1;
}}

This is a special value equal to the largest value representable by the type {{tt|std::size_t}}, used as the return type of {{lc|index()}} when {{lc|valueless_by_exception()}} is {{tt|true}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc index}}
{{dsc inc | cpp/utility/variant/dsc valueless_by_exception}}
{{dsc end}}

[[zh:cpp/utility/variant/variant_npos]]</text>
      <sha1>bdofre4darwvbg8ge9ybz5jupbxn3sz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/variant size</title>
    <ns>0</ns>
    <id>15615</id>
    <revision>
      <id>90943</id>
      <parentid>89743</parentid>
      <timestamp>2017-03-14T12:52:01Z</timestamp>
      <contributor>
        <username>T. Canens</username>
        <id>3769</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;constexpr&quot; to &quot;inline constexpr&quot;</comment>
      <text xml:space="preserve" bytes="1634">{{cpp/title|variant_size|variant_size_v}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header|variant}}
{{dcl |since=c++17|num=1|
template &lt;class T&gt;
struct variant_size; /* undefined */
}}
{{dcl |since=c++17|num=2|
template &lt;class... Types&gt;
struct variant_size&lt;std::variant&lt;Types...&gt;&gt;
: std::integral_constant&lt;std::size_t, sizeof...(Types)&gt; { };
}}
{{dcl |since=c++17|num=3|
template &lt;class T&gt; class variant_size&lt;const T&gt;;
template &lt;class T&gt; class variant_size&lt;volatile T&gt;;
template &lt;class T&gt; class variant_size&lt;const volatile T&gt;;
}}
{{dcl end}}

Provides access to the number of alternatives in a possibly cv-qualified variant as a compile-time constant expression. 

Formally, 
@2@ meets the {{concept|UnaryTypeTrait}} requirements with a BaseCharacteristic of {{tt|std::integral_constant&lt;std::size_t, sizeof...(Types)&gt;}}
@3@ meets the {{concept|UnaryTypeTrait}} requirements with a BaseCharacteristic of {{tt|std::integral_constant&lt;std::size_t, variant_size&lt;T&gt;&gt;}}

===Helper variable template===
{{dcl begin}}
{{dcl|since=c++17|1=
template &lt;class T&gt;
inline constexpr std::size_t variant_size_v = std::variant_size&lt;T&gt;::value;
}}
{{dcl end}}

{{cpp/types/integral_constant/inherit2 | {{tt|sizeof...(Types)}} |std::size_t}}

===Notes===
All specializations of {{tt|std::variant_size}} satisfy {{concept|UnaryTypeTrait}} with  ''BaseCharacteristic'' {{tt|std::integral_constant&lt;std::size_t, N&gt;}} for some {{tt|N}}.

===Example===
{{example}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc variant_alternative}}
{{dsc inc | cpp/utility/tuple/dsc tuple_size}}
{{dsc end}}

[[zh:cpp/utility/variant/variant_size]]</text>
      <sha1>2njd8u7nltcc47avpqp73zxlprzbzpj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/visit</title>
    <ns>0</ns>
    <id>15611</id>
    <revision>
      <id>91069</id>
      <parentid>90743</parentid>
      <timestamp>2017-03-17T09:09:21Z</timestamp>
      <contributor>
        <username>D41D8CD98F</username>
        <id>2237</id>
      </contributor>
      <comment>/* Example */ Turns out it's pretty easy to define `overload` for variant visitation today, so also demonstrate that</comment>
      <text xml:space="preserve" bytes="3784">{{cpp/title|visit}}
{{cpp/utility/variant/navbar}}
{{dcl begin}}
{{dcl header | variant}}
{{dcl | since=c++17 |
template &lt;class Visitor, class... Variants&gt;
constexpr /*see below*/ visit(Visitor&amp;&amp; vis, Variants&amp;&amp;... vars);
}}
{{dcl end}}

Applies the visitor {{tt|vis}} to the variants {{tt|vars}}

Effectively returns

{{cc|std::invoke(std::forward&lt;Visitor&gt;(vis), std::get&lt;is&gt;(std::forward&lt;Variants&gt;(vars))...)}}

, where {{tt|is...}} is {{tt|vars.index()...}}.

The call is ill-formed if the invocation above is not a valid expression of the same type and value category, for all combinations of alternative types of all variants.

===Parameters===
{{par begin}}
{{par | vis | a {{concept|Callable}} that accepts every possible alternative from every variant}}
{{par | vars | list of variants to pass to the visitor }}
{{par end}}

===Return value===
The value returned by the selected invocation of the visitor, converted to the common type of all possible {{tt|std::invoke}} expressions. 

===Exceptions===
Throws {{lc|std::bad_variant_access}} if any variant in {{tt|vars}} is {{ltt|cpp/utility/variant/valueless_by_exception|valueless_by_exception}}.

===Complexity===
When the number of variants is zero or one, the invocation of the callable object is implemented in constant time, i.e. it does not depend on {{tt|sizeof...(Types)}}.

If the number of variants is larger than 1, the invocation of the callable object has no complexity requirements.

===Example===
{{example
 | code=
#include &lt;variant&gt;
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;iomanip&gt;
#include &lt;vector&gt;


template&lt;class T&gt; struct always_false : std::false_type {};

using var_t = std::variant&lt;int, long, double, std::string&gt;;

template&lt;class... Ts&gt; struct overloaded : Ts... { using Ts::operator()...; };
template&lt;class... Ts&gt; overloaded(Ts...) -&gt; overloaded&lt;Ts...&gt;;

int main() {
    std::vector&lt;var_t&gt; vec = {10, 15l, 1.5, &quot;hello&quot;};
    for(auto&amp; v: vec) {
        // void visitor, only called for side-effects
        std::visit([](auto&amp;&amp; arg){std::cout &lt;&lt; arg;}, v);

        // value-returning visitor. A common idiom is to return another variant
        var_t w = std::visit([](auto&amp;&amp; arg) -&gt; var_t {return arg + arg;}, v);

        std::cout &lt;&lt; &quot;. After doubling, variant holds &quot;;
        // type-matching visitor: can also be a class with 4 overloaded operator()'s
        std::visit([](auto&amp;&amp; arg) {
            using T = std::decay_t&lt;decltype(arg)&gt;;
            if constexpr (std::is_same_v&lt;T, int&gt;)
                std::cout &lt;&lt; &quot;int with value &quot; &lt;&lt; arg &lt;&lt; '\n';
            else if constexpr (std::is_same_v&lt;T, long&gt;)
                std::cout &lt;&lt; &quot;long with value &quot; &lt;&lt; arg &lt;&lt; '\n';
            else if constexpr (std::is_same_v&lt;T, double&gt;)
                std::cout &lt;&lt; &quot;double with value &quot; &lt;&lt; arg &lt;&lt; '\n';
            else if constexpr (std::is_same_v&lt;T, std::string&gt;)
                std::cout &lt;&lt; &quot;std::string with value &quot; &lt;&lt; std::quoted(arg) &lt;&lt; '\n';
            else 
                static_assert(always_false&lt;T&gt;::value, &quot;non-exhaustive visitor!&quot;);
        }, w);
    }

    for (auto&amp; v: vec) {
        std::visit(overloaded {
            [](int arg) { std::cout &lt;&lt; arg &lt;&lt; ' '; },
            [](long arg) { std::cout &lt;&lt; arg &lt;&lt; ' '; },
            [](double arg) { std::cout &lt;&lt; arg &lt;&lt; ' '; },
            [](const std::string&amp; arg) { std::cout &lt;&lt; std::quoted(arg) &lt;&lt; ' '; },
        }, v);
    }
}
 | output=
10. After doubling, variant holds int with value 20
15. After doubling, variant holds long with value 30
1.5. After doubling, variant holds double with value 3
hello. After doubling, variant holds std::string with value &quot;hellohello&quot;
10 15 1.5 &quot;hello&quot; 
}}

===See also===
{{dsc begin}}
{{dsc inc | cpp/utility/variant/dsc swap}}
{{dsc end}}

[[zh:cpp/utility/variant/visit]]</text>
      <sha1>26r1r0gny2v8jdgqqyz6qzkh4sygsdz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cpp/utility/variant/~variant</title>
    <ns>0</ns>
    <id>15588</id>
    <revision>
      <id>89760</id>
      <parentid>86640</parentid>
      <timestamp>2017-01-24T09:21:05Z</timestamp>
      <contributor>
        <username>Fruderica</username>
        <id>5850</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="372">{{cpp/variant/title|~variant}}
{{cpp/utility/variant/navbar}}
{{ddcl | since=c++17|
~variant();
}}

If {{rlp|valueless_by_exception}} is true, does nothing. Otherwise, destroys the currently contained value.

This destructor is trivial if {{c|std::is_trivially_destructible_v&lt;T_i&gt;}} is {{tt|true}} for all {{tt|T_i}} in {{tt|Types...}}

[[zh:cpp/utility/variant/~variant]]</text>
      <sha1>7t65ipiu3owxjsyt6w904qgb8p6zmdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/</title>
    <ns>0</ns>
    <id>13014</id>
    <redirect title="Main Page" />
    <revision>
      <id>65673</id>
      <parentid>65672</parentid>
      <timestamp>2013-09-25T12:38:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[Main Page]]</comment>
      <text xml:space="preserve" bytes="23">#redirect [[Main_Page]]</text>
      <sha1>4r564vwcqllkcrydpbribe3bxeejddh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/about/</title>
    <ns>0</ns>
    <id>7643</id>
    <redirect title="Cppreference:FAQ" />
    <revision>
      <id>28265</id>
      <parentid>28264</parentid>
      <timestamp>2012-05-01T17:28:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[Cppreference:FAQ]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/about/faq</title>
    <ns>0</ns>
    <id>7644</id>
    <redirect title="Cppreference:FAQ" />
    <revision>
      <id>28267</id>
      <parentid>28266</parentid>
      <timestamp>2012-05-01T17:28:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[Cppreference:FAQ]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/</title>
    <ns>0</ns>
    <id>7714</id>
    <redirect title="cpp/algorithm" />
    <revision>
      <id>28407</id>
      <parentid>28406</parentid>
      <timestamp>2012-05-01T17:30:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/algorithm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/accumulate</title>
    <ns>0</ns>
    <id>7645</id>
    <redirect title="cpp/algorithm/accumulate" />
    <revision>
      <id>28269</id>
      <parentid>28268</parentid>
      <timestamp>2012-05-01T17:30:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/algorithm/accumulate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/adjacent difference</title>
    <ns>0</ns>
    <id>7646</id>
    <redirect title="cpp/algorithm/adjacent difference" />
    <revision>
      <id>28271</id>
      <parentid>28270</parentid>
      <timestamp>2012-05-01T17:30:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/algorithm/adjacent_difference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/adjacent find</title>
    <ns>0</ns>
    <id>7647</id>
    <redirect title="cpp/algorithm/adjacent find" />
    <revision>
      <id>28273</id>
      <parentid>28272</parentid>
      <timestamp>2012-05-01T17:30:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/adjacent_find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/binary search</title>
    <ns>0</ns>
    <id>7648</id>
    <redirect title="cpp/algorithm/binary search" />
    <revision>
      <id>28275</id>
      <parentid>28274</parentid>
      <timestamp>2012-05-01T17:30:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/binary_search]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/bsearch</title>
    <ns>0</ns>
    <id>7649</id>
    <redirect title="cpp/algorithm/bsearch" />
    <revision>
      <id>28277</id>
      <parentid>28276</parentid>
      <timestamp>2012-05-01T17:30:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/bsearch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/copy</title>
    <ns>0</ns>
    <id>7650</id>
    <redirect title="cpp/algorithm/copy" />
    <revision>
      <id>28279</id>
      <parentid>28278</parentid>
      <timestamp>2012-05-01T17:30:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/copy backward</title>
    <ns>0</ns>
    <id>7651</id>
    <redirect title="cpp/algorithm/copy backward" />
    <revision>
      <id>28281</id>
      <parentid>28280</parentid>
      <timestamp>2012-05-01T17:30:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/copy_backward]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/count</title>
    <ns>0</ns>
    <id>7652</id>
    <redirect title="cpp/algorithm/count" />
    <revision>
      <id>28283</id>
      <parentid>28282</parentid>
      <timestamp>2012-05-01T17:30:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/count if</title>
    <ns>0</ns>
    <id>7653</id>
    <redirect title="cpp/algorithm/count" />
    <revision>
      <id>28285</id>
      <parentid>28284</parentid>
      <timestamp>2012-05-01T17:30:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/equal</title>
    <ns>0</ns>
    <id>7654</id>
    <redirect title="cpp/algorithm/equal" />
    <revision>
      <id>28287</id>
      <parentid>28286</parentid>
      <timestamp>2012-05-01T17:30:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/equal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/equal range</title>
    <ns>0</ns>
    <id>7655</id>
    <redirect title="cpp/algorithm/equal range" />
    <revision>
      <id>28289</id>
      <parentid>28288</parentid>
      <timestamp>2012-05-01T17:30:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/fill</title>
    <ns>0</ns>
    <id>7656</id>
    <redirect title="cpp/algorithm/fill" />
    <revision>
      <id>28291</id>
      <parentid>28290</parentid>
      <timestamp>2012-05-01T17:30:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/fill]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/fill n</title>
    <ns>0</ns>
    <id>7657</id>
    <redirect title="cpp/algorithm/fill n" />
    <revision>
      <id>28293</id>
      <parentid>28292</parentid>
      <timestamp>2012-05-01T17:30:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/fill_n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/find</title>
    <ns>0</ns>
    <id>7658</id>
    <redirect title="cpp/algorithm/find" />
    <revision>
      <id>28295</id>
      <parentid>28294</parentid>
      <timestamp>2012-05-01T17:30:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/find end</title>
    <ns>0</ns>
    <id>7659</id>
    <redirect title="cpp/algorithm/find end" />
    <revision>
      <id>28297</id>
      <parentid>28296</parentid>
      <timestamp>2012-05-01T17:30:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/find_end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/find first of</title>
    <ns>0</ns>
    <id>7660</id>
    <redirect title="cpp/algorithm/find first of" />
    <revision>
      <id>28299</id>
      <parentid>28298</parentid>
      <timestamp>2012-05-01T17:30:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/find_first_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/find if</title>
    <ns>0</ns>
    <id>7661</id>
    <redirect title="cpp/algorithm/find" />
    <revision>
      <id>28301</id>
      <parentid>28300</parentid>
      <timestamp>2012-05-01T17:30:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/for each</title>
    <ns>0</ns>
    <id>7662</id>
    <redirect title="cpp/algorithm/for each" />
    <revision>
      <id>28303</id>
      <parentid>28302</parentid>
      <timestamp>2012-05-01T17:30:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/for_each]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/generate</title>
    <ns>0</ns>
    <id>7663</id>
    <redirect title="cpp/algorithm/generate" />
    <revision>
      <id>28305</id>
      <parentid>28304</parentid>
      <timestamp>2012-05-01T17:30:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/generate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/generate n</title>
    <ns>0</ns>
    <id>7664</id>
    <redirect title="cpp/algorithm/generate n" />
    <revision>
      <id>28307</id>
      <parentid>28306</parentid>
      <timestamp>2012-05-01T17:30:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/algorithm/generate_n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/includes</title>
    <ns>0</ns>
    <id>7665</id>
    <redirect title="cpp/algorithm/includes" />
    <revision>
      <id>28309</id>
      <parentid>28308</parentid>
      <timestamp>2012-05-01T17:30:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/includes]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/inner product</title>
    <ns>0</ns>
    <id>7666</id>
    <redirect title="cpp/algorithm/inner product" />
    <revision>
      <id>28311</id>
      <parentid>28310</parentid>
      <timestamp>2012-05-01T17:30:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/inner_product]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/inplace merge</title>
    <ns>0</ns>
    <id>7667</id>
    <redirect title="cpp/algorithm/inplace merge" />
    <revision>
      <id>28313</id>
      <parentid>28312</parentid>
      <timestamp>2012-05-01T17:30:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/inplace_merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/is heap</title>
    <ns>0</ns>
    <id>7668</id>
    <redirect title="cpp/algorithm/is heap" />
    <revision>
      <id>28315</id>
      <parentid>28314</parentid>
      <timestamp>2012-05-01T17:30:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/is_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/iter swap</title>
    <ns>0</ns>
    <id>7669</id>
    <redirect title="cpp/algorithm/iter swap" />
    <revision>
      <id>28317</id>
      <parentid>28316</parentid>
      <timestamp>2012-05-01T17:30:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/iter_swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/lexicographical compare</title>
    <ns>0</ns>
    <id>7670</id>
    <redirect title="cpp/algorithm/lexicographical compare" />
    <revision>
      <id>28319</id>
      <parentid>28318</parentid>
      <timestamp>2012-05-01T17:30:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/algorithm/lexicographical_compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/lexicographical compare 3way</title>
    <ns>0</ns>
    <id>7671</id>
    <redirect title="cpp/algorithm/lexicographical compare" />
    <revision>
      <id>28321</id>
      <parentid>28320</parentid>
      <timestamp>2012-05-01T17:30:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/algorithm/lexicographical_compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/lower bound</title>
    <ns>0</ns>
    <id>7672</id>
    <redirect title="cpp/algorithm/lower bound" />
    <revision>
      <id>28323</id>
      <parentid>28322</parentid>
      <timestamp>2012-05-01T17:30:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/make heap</title>
    <ns>0</ns>
    <id>7673</id>
    <redirect title="cpp/algorithm/make heap" />
    <revision>
      <id>28325</id>
      <parentid>28324</parentid>
      <timestamp>2012-05-01T17:30:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/make_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/max</title>
    <ns>0</ns>
    <id>7674</id>
    <redirect title="cpp/algorithm/max" />
    <revision>
      <id>28327</id>
      <parentid>28326</parentid>
      <timestamp>2012-05-01T17:30:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/algorithm/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/max element</title>
    <ns>0</ns>
    <id>7675</id>
    <redirect title="cpp/algorithm/max element" />
    <revision>
      <id>28329</id>
      <parentid>28328</parentid>
      <timestamp>2012-05-01T17:30:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/max_element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/merge</title>
    <ns>0</ns>
    <id>7676</id>
    <redirect title="cpp/algorithm/merge" />
    <revision>
      <id>28331</id>
      <parentid>28330</parentid>
      <timestamp>2012-05-01T17:30:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/min</title>
    <ns>0</ns>
    <id>7677</id>
    <redirect title="cpp/algorithm/min" />
    <revision>
      <id>28333</id>
      <parentid>28332</parentid>
      <timestamp>2012-05-01T17:30:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/algorithm/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/min element</title>
    <ns>0</ns>
    <id>7678</id>
    <redirect title="cpp/algorithm/min element" />
    <revision>
      <id>28335</id>
      <parentid>28334</parentid>
      <timestamp>2012-05-01T17:30:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/min_element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/mismatch</title>
    <ns>0</ns>
    <id>7679</id>
    <redirect title="cpp/algorithm/mismatch" />
    <revision>
      <id>28337</id>
      <parentid>28336</parentid>
      <timestamp>2012-05-01T17:30:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/mismatch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/next permutation</title>
    <ns>0</ns>
    <id>7680</id>
    <redirect title="cpp/algorithm/next permutation" />
    <revision>
      <id>28339</id>
      <parentid>28338</parentid>
      <timestamp>2012-05-01T17:30:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/next_permutation]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/nth element</title>
    <ns>0</ns>
    <id>7681</id>
    <redirect title="cpp/algorithm/nth element" />
    <revision>
      <id>28341</id>
      <parentid>28340</parentid>
      <timestamp>2012-05-01T17:30:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/nth_element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/partial sort</title>
    <ns>0</ns>
    <id>7682</id>
    <redirect title="cpp/algorithm/partial sort" />
    <revision>
      <id>28343</id>
      <parentid>28342</parentid>
      <timestamp>2012-05-01T17:30:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/partial_sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/partial sort copy</title>
    <ns>0</ns>
    <id>7683</id>
    <redirect title="cpp/algorithm/partial sort copy" />
    <revision>
      <id>28345</id>
      <parentid>28344</parentid>
      <timestamp>2012-05-01T17:30:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/algorithm/partial_sort_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/partial sum</title>
    <ns>0</ns>
    <id>7684</id>
    <redirect title="cpp/algorithm/partial sum" />
    <revision>
      <id>28347</id>
      <parentid>28346</parentid>
      <timestamp>2012-05-01T17:30:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/partial_sum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/partition</title>
    <ns>0</ns>
    <id>7685</id>
    <redirect title="cpp/algorithm/partition" />
    <revision>
      <id>28349</id>
      <parentid>28348</parentid>
      <timestamp>2012-05-01T17:30:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/partition]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/pop heap</title>
    <ns>0</ns>
    <id>7686</id>
    <redirect title="cpp/algorithm/pop heap" />
    <revision>
      <id>28351</id>
      <parentid>28350</parentid>
      <timestamp>2012-05-01T17:30:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/pop_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/prev permutation</title>
    <ns>0</ns>
    <id>7687</id>
    <redirect title="cpp/algorithm/prev permutation" />
    <revision>
      <id>28353</id>
      <parentid>28352</parentid>
      <timestamp>2012-05-01T17:30:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/prev_permutation]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/push heap</title>
    <ns>0</ns>
    <id>7688</id>
    <redirect title="cpp/algorithm/push heap" />
    <revision>
      <id>28355</id>
      <parentid>28354</parentid>
      <timestamp>2012-05-01T17:30:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/push_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/qsort</title>
    <ns>0</ns>
    <id>7689</id>
    <redirect title="cpp/algorithm/qsort" />
    <revision>
      <id>28357</id>
      <parentid>28356</parentid>
      <timestamp>2012-05-01T17:30:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/qsort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/random shuffle</title>
    <ns>0</ns>
    <id>7690</id>
    <redirect title="cpp/algorithm/random shuffle" />
    <revision>
      <id>28359</id>
      <parentid>28358</parentid>
      <timestamp>2012-05-01T17:30:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/algorithm/random_shuffle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/remove</title>
    <ns>0</ns>
    <id>7691</id>
    <redirect title="cpp/algorithm/remove" />
    <revision>
      <id>28361</id>
      <parentid>28360</parentid>
      <timestamp>2012-05-01T17:30:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/remove copy</title>
    <ns>0</ns>
    <id>7692</id>
    <redirect title="cpp/algorithm/remove copy" />
    <revision>
      <id>28363</id>
      <parentid>28362</parentid>
      <timestamp>2012-05-01T17:30:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/remove_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/remove copy if</title>
    <ns>0</ns>
    <id>7693</id>
    <redirect title="cpp/algorithm/remove copy" />
    <revision>
      <id>28365</id>
      <parentid>28364</parentid>
      <timestamp>2012-05-01T17:30:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/remove_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/remove if</title>
    <ns>0</ns>
    <id>7694</id>
    <redirect title="cpp/algorithm/remove" />
    <revision>
      <id>28367</id>
      <parentid>28366</parentid>
      <timestamp>2012-05-01T17:30:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/replace</title>
    <ns>0</ns>
    <id>7695</id>
    <redirect title="cpp/algorithm/replace" />
    <revision>
      <id>28369</id>
      <parentid>28368</parentid>
      <timestamp>2012-05-01T17:30:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/replace copy</title>
    <ns>0</ns>
    <id>7696</id>
    <redirect title="cpp/algorithm/replace copy" />
    <revision>
      <id>28371</id>
      <parentid>28370</parentid>
      <timestamp>2012-05-01T17:30:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/replace_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/replace copy if</title>
    <ns>0</ns>
    <id>7697</id>
    <redirect title="cpp/algorithm/replace copy" />
    <revision>
      <id>28373</id>
      <parentid>28372</parentid>
      <timestamp>2012-05-01T17:30:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/replace_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/replace if</title>
    <ns>0</ns>
    <id>7698</id>
    <redirect title="cpp/algorithm/replace" />
    <revision>
      <id>28375</id>
      <parentid>28374</parentid>
      <timestamp>2012-05-01T17:30:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/reverse</title>
    <ns>0</ns>
    <id>7699</id>
    <redirect title="cpp/algorithm/reverse" />
    <revision>
      <id>28377</id>
      <parentid>28376</parentid>
      <timestamp>2012-05-01T17:30:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/reverse]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/reverse copy</title>
    <ns>0</ns>
    <id>7700</id>
    <redirect title="cpp/algorithm/reverse copy" />
    <revision>
      <id>28379</id>
      <parentid>28378</parentid>
      <timestamp>2012-05-01T17:30:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/reverse_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/rotate</title>
    <ns>0</ns>
    <id>7701</id>
    <redirect title="cpp/algorithm/rotate" />
    <revision>
      <id>28381</id>
      <parentid>28380</parentid>
      <timestamp>2012-05-01T17:30:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/rotate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/rotate copy</title>
    <ns>0</ns>
    <id>7702</id>
    <redirect title="cpp/algorithm/rotate copy" />
    <revision>
      <id>28383</id>
      <parentid>28382</parentid>
      <timestamp>2012-05-01T17:30:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/rotate_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/search</title>
    <ns>0</ns>
    <id>7703</id>
    <redirect title="cpp/algorithm/search" />
    <revision>
      <id>28385</id>
      <parentid>28384</parentid>
      <timestamp>2012-05-01T17:30:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/search]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/search n</title>
    <ns>0</ns>
    <id>7704</id>
    <redirect title="cpp/algorithm/search n" />
    <revision>
      <id>28387</id>
      <parentid>28386</parentid>
      <timestamp>2012-05-01T17:30:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/search_n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/set difference</title>
    <ns>0</ns>
    <id>7705</id>
    <redirect title="cpp/algorithm/set difference" />
    <revision>
      <id>28389</id>
      <parentid>28388</parentid>
      <timestamp>2012-05-01T17:30:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/algorithm/set_difference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/set intersection</title>
    <ns>0</ns>
    <id>7706</id>
    <redirect title="cpp/algorithm/set intersection" />
    <revision>
      <id>28391</id>
      <parentid>28390</parentid>
      <timestamp>2012-05-01T17:30:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/set_intersection]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/set symmetric difference</title>
    <ns>0</ns>
    <id>7707</id>
    <redirect title="cpp/algorithm/set symmetric difference" />
    <revision>
      <id>28393</id>
      <parentid>28392</parentid>
      <timestamp>2012-05-01T17:30:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/algorithm/set_symmetric_difference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/set union</title>
    <ns>0</ns>
    <id>7708</id>
    <redirect title="cpp/algorithm/set union" />
    <revision>
      <id>28395</id>
      <parentid>28394</parentid>
      <timestamp>2012-05-01T17:30:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/set_union]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/sort</title>
    <ns>0</ns>
    <id>7709</id>
    <redirect title="cpp/algorithm/sort" />
    <revision>
      <id>28397</id>
      <parentid>28396</parentid>
      <timestamp>2012-05-01T17:30:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/sort heap</title>
    <ns>0</ns>
    <id>7710</id>
    <redirect title="cpp/algorithm/sort heap" />
    <revision>
      <id>28399</id>
      <parentid>28398</parentid>
      <timestamp>2012-05-01T17:30:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/sort_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/stable partition</title>
    <ns>0</ns>
    <id>7711</id>
    <redirect title="cpp/algorithm/stable partition" />
    <revision>
      <id>28401</id>
      <parentid>28400</parentid>
      <timestamp>2012-05-01T17:30:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/stable_partition]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/stable sort</title>
    <ns>0</ns>
    <id>7712</id>
    <redirect title="cpp/algorithm/stable sort" />
    <revision>
      <id>28403</id>
      <parentid>28402</parentid>
      <timestamp>2012-05-01T17:30:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/stable_sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/start</title>
    <ns>0</ns>
    <id>7713</id>
    <redirect title="cpp/algorithm" />
    <revision>
      <id>28405</id>
      <parentid>28404</parentid>
      <timestamp>2012-05-01T17:30:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/algorithm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/swap</title>
    <ns>0</ns>
    <id>7715</id>
    <redirect title="cpp/algorithm/swap" />
    <revision>
      <id>28409</id>
      <parentid>28408</parentid>
      <timestamp>2012-05-01T17:30:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/swap ranges</title>
    <ns>0</ns>
    <id>7716</id>
    <redirect title="cpp/algorithm/swap ranges" />
    <revision>
      <id>28411</id>
      <parentid>28410</parentid>
      <timestamp>2012-05-01T17:30:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/swap_ranges]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/transform</title>
    <ns>0</ns>
    <id>7717</id>
    <redirect title="cpp/algorithm/transform" />
    <revision>
      <id>28413</id>
      <parentid>28412</parentid>
      <timestamp>2012-05-01T17:30:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/transform]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/unique</title>
    <ns>0</ns>
    <id>7718</id>
    <redirect title="cpp/algorithm/unique" />
    <revision>
      <id>28415</id>
      <parentid>28414</parentid>
      <timestamp>2012-05-01T17:30:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/unique]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/unique copy</title>
    <ns>0</ns>
    <id>7719</id>
    <redirect title="cpp/algorithm/unique copy" />
    <revision>
      <id>28417</id>
      <parentid>28416</parentid>
      <timestamp>2012-05-01T17:30:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/unique_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/algorithm/upper bound</title>
    <ns>0</ns>
    <id>7720</id>
    <redirect title="cpp/algorithm/upper bound" />
    <revision>
      <id>28419</id>
      <parentid>28418</parentid>
      <timestamp>2012-05-01T17:30:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/ascii</title>
    <ns>0</ns>
    <id>7635</id>
    <redirect title="cpp/language/ascii" />
    <revision>
      <id>28249</id>
      <parentid>28248</parentid>
      <timestamp>2012-05-01T17:28:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/language/ascii]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/atomic/</title>
    <ns>0</ns>
    <id>7722</id>
    <redirect title="cpp/atomic" />
    <revision>
      <id>28423</id>
      <parentid>28422</parentid>
      <timestamp>2012-05-01T17:30:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/atomic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/atomic/start</title>
    <ns>0</ns>
    <id>7721</id>
    <redirect title="cpp/atomic" />
    <revision>
      <id>28421</id>
      <parentid>28420</parentid>
      <timestamp>2012-05-01T17:30:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/atomic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c 0x</title>
    <ns>0</ns>
    <id>7641</id>
    <redirect title="cpp" />
    <revision>
      <id>37571</id>
      <parentid>30557</parentid>
      <timestamp>2012-07-15T21:00:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp]]</comment>
      <text xml:space="preserve" bytes="17">#redirect [[cpp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/</title>
    <ns>0</ns>
    <id>7875</id>
    <redirect title="cpp" />
    <revision>
      <id>28729</id>
      <parentid>28728</parentid>
      <timestamp>2012-05-01T17:31:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="17">#redirect [[cpp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/</title>
    <ns>0</ns>
    <id>7732</id>
    <redirect title="cpp/chrono/c" />
    <revision>
      <id>28443</id>
      <parentid>28442</parentid>
      <timestamp>2012-05-01T17:30:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/chrono/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/asctime</title>
    <ns>0</ns>
    <id>7723</id>
    <redirect title="cpp/chrono/c/asctime" />
    <revision>
      <id>28425</id>
      <parentid>28424</parentid>
      <timestamp>2012-05-01T17:30:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/chrono/c/asctime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/clock</title>
    <ns>0</ns>
    <id>7724</id>
    <redirect title="cpp/chrono/c/clock" />
    <revision>
      <id>28427</id>
      <parentid>28426</parentid>
      <timestamp>2012-05-01T17:30:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/chrono/c/clock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/ctime</title>
    <ns>0</ns>
    <id>7725</id>
    <redirect title="cpp/chrono/c/ctime" />
    <revision>
      <id>28429</id>
      <parentid>28428</parentid>
      <timestamp>2012-05-01T17:30:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/chrono/c/ctime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/difftime</title>
    <ns>0</ns>
    <id>7726</id>
    <redirect title="cpp/chrono/c/difftime" />
    <revision>
      <id>28431</id>
      <parentid>28430</parentid>
      <timestamp>2012-05-01T17:30:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/chrono/c/difftime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/gmtime</title>
    <ns>0</ns>
    <id>7727</id>
    <redirect title="cpp/chrono/c/gmtime" />
    <revision>
      <id>28433</id>
      <parentid>28432</parentid>
      <timestamp>2012-05-01T17:30:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/chrono/c/gmtime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/localtime</title>
    <ns>0</ns>
    <id>7728</id>
    <redirect title="cpp/chrono/c/localtime" />
    <revision>
      <id>28435</id>
      <parentid>28434</parentid>
      <timestamp>2012-05-01T17:30:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/chrono/c/localtime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/mktime</title>
    <ns>0</ns>
    <id>7729</id>
    <redirect title="cpp/chrono/c/mktime" />
    <revision>
      <id>28437</id>
      <parentid>28436</parentid>
      <timestamp>2012-05-01T17:30:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/chrono/c/mktime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/setlocale</title>
    <ns>0</ns>
    <id>7730</id>
    <redirect title="cpp/locale/setlocale" />
    <revision>
      <id>28439</id>
      <parentid>28438</parentid>
      <timestamp>2012-05-01T17:30:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/locale/setlocale]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/start</title>
    <ns>0</ns>
    <id>7731</id>
    <redirect title="cpp/chrono/c" />
    <revision>
      <id>28441</id>
      <parentid>28440</parentid>
      <timestamp>2012-05-01T17:30:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/chrono/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/strftime</title>
    <ns>0</ns>
    <id>7733</id>
    <redirect title="cpp/chrono/c/strftime" />
    <revision>
      <id>28445</id>
      <parentid>28444</parentid>
      <timestamp>2012-05-01T17:30:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/chrono/c/strftime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/time</title>
    <ns>0</ns>
    <id>7734</id>
    <redirect title="cpp/chrono/c/time" />
    <revision>
      <id>28447</id>
      <parentid>28446</parentid>
      <timestamp>2012-05-01T17:30:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/chrono/c/time]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/date/tm</title>
    <ns>0</ns>
    <id>7735</id>
    <redirect title="cpp/chrono/c/tm" />
    <revision>
      <id>28449</id>
      <parentid>28448</parentid>
      <timestamp>2012-05-01T17:30:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/chrono/c/tm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/</title>
    <ns>0</ns>
    <id>7773</id>
    <redirect title="cpp/io/c" />
    <revision>
      <id>28525</id>
      <parentid>28524</parentid>
      <timestamp>2012-05-01T17:30:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="22">#redirect [[cpp/io/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/clearerr</title>
    <ns>0</ns>
    <id>7736</id>
    <redirect title="cpp/io/c/clearerr" />
    <revision>
      <id>28451</id>
      <parentid>28450</parentid>
      <timestamp>2012-05-01T17:30:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/io/c/clearerr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fclose</title>
    <ns>0</ns>
    <id>7737</id>
    <redirect title="cpp/io/c/fclose" />
    <revision>
      <id>28453</id>
      <parentid>28452</parentid>
      <timestamp>2012-05-01T17:30:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fclose]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/feof</title>
    <ns>0</ns>
    <id>7738</id>
    <redirect title="cpp/io/c/feof" />
    <revision>
      <id>28455</id>
      <parentid>28454</parentid>
      <timestamp>2012-05-01T17:30:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/io/c/feof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/ferror</title>
    <ns>0</ns>
    <id>7739</id>
    <redirect title="cpp/io/c/ferror" />
    <revision>
      <id>28457</id>
      <parentid>28456</parentid>
      <timestamp>2012-05-01T17:30:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/ferror]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fflush</title>
    <ns>0</ns>
    <id>7740</id>
    <redirect title="cpp/io/c/fflush" />
    <revision>
      <id>28459</id>
      <parentid>28458</parentid>
      <timestamp>2012-05-01T17:30:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fflush]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fgetc</title>
    <ns>0</ns>
    <id>7741</id>
    <redirect title="cpp/io/c/fgetc" />
    <revision>
      <id>28461</id>
      <parentid>28460</parentid>
      <timestamp>2012-05-01T17:30:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fgetc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fgetpos</title>
    <ns>0</ns>
    <id>7742</id>
    <redirect title="cpp/io/c/fgetpos" />
    <revision>
      <id>28463</id>
      <parentid>28462</parentid>
      <timestamp>2012-05-01T17:30:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fgetpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fgets</title>
    <ns>0</ns>
    <id>7743</id>
    <redirect title="cpp/io/c/fgets" />
    <revision>
      <id>28465</id>
      <parentid>28464</parentid>
      <timestamp>2012-05-01T17:30:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fgets]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fopen</title>
    <ns>0</ns>
    <id>7744</id>
    <redirect title="cpp/io/c/fopen" />
    <revision>
      <id>28467</id>
      <parentid>28466</parentid>
      <timestamp>2012-05-01T17:30:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fopen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fprintf</title>
    <ns>0</ns>
    <id>7745</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>28469</id>
      <parentid>28468</parentid>
      <timestamp>2012-05-01T17:30:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fputc</title>
    <ns>0</ns>
    <id>7746</id>
    <redirect title="cpp/io/c/fputc" />
    <revision>
      <id>28471</id>
      <parentid>28470</parentid>
      <timestamp>2012-05-01T17:30:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fputc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fputs</title>
    <ns>0</ns>
    <id>7747</id>
    <redirect title="cpp/io/c/fputs" />
    <revision>
      <id>28473</id>
      <parentid>28472</parentid>
      <timestamp>2012-05-01T17:30:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fputs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fread</title>
    <ns>0</ns>
    <id>7748</id>
    <redirect title="cpp/io/c/fread" />
    <revision>
      <id>28475</id>
      <parentid>28474</parentid>
      <timestamp>2012-05-01T17:30:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fread]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/freopen</title>
    <ns>0</ns>
    <id>7749</id>
    <redirect title="cpp/io/c/freopen" />
    <revision>
      <id>28477</id>
      <parentid>28476</parentid>
      <timestamp>2012-05-01T17:30:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/freopen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fscanf</title>
    <ns>0</ns>
    <id>7750</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>28479</id>
      <parentid>28478</parentid>
      <timestamp>2012-05-01T17:30:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fseek</title>
    <ns>0</ns>
    <id>7751</id>
    <redirect title="cpp/io/c/fseek" />
    <revision>
      <id>28481</id>
      <parentid>28480</parentid>
      <timestamp>2012-05-01T17:30:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fseek]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fsetpos</title>
    <ns>0</ns>
    <id>7752</id>
    <redirect title="cpp/io/c/fsetpos" />
    <revision>
      <id>28483</id>
      <parentid>28482</parentid>
      <timestamp>2012-05-01T17:30:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fsetpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/ftell</title>
    <ns>0</ns>
    <id>7753</id>
    <redirect title="cpp/io/c/ftell" />
    <revision>
      <id>28485</id>
      <parentid>28484</parentid>
      <timestamp>2012-05-01T17:30:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/ftell]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/fwrite</title>
    <ns>0</ns>
    <id>7754</id>
    <redirect title="cpp/io/c/fwrite" />
    <revision>
      <id>28487</id>
      <parentid>28486</parentid>
      <timestamp>2012-05-01T17:30:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fwrite]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/getc</title>
    <ns>0</ns>
    <id>7755</id>
    <redirect title="cpp/io/c/fgetc" />
    <revision>
      <id>28489</id>
      <parentid>28488</parentid>
      <timestamp>2012-05-01T17:30:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fgetc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/getchar</title>
    <ns>0</ns>
    <id>7756</id>
    <redirect title="cpp/io/c/getchar" />
    <revision>
      <id>28491</id>
      <parentid>28490</parentid>
      <timestamp>2012-05-01T17:30:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/getchar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/gets</title>
    <ns>0</ns>
    <id>7757</id>
    <redirect title="cpp/io/c/gets" />
    <revision>
      <id>28493</id>
      <parentid>28492</parentid>
      <timestamp>2012-05-01T17:30:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/io/c/gets]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/perror</title>
    <ns>0</ns>
    <id>7758</id>
    <redirect title="cpp/io/c/perror" />
    <revision>
      <id>28495</id>
      <parentid>28494</parentid>
      <timestamp>2012-05-01T17:30:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/perror]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/printf</title>
    <ns>0</ns>
    <id>7759</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>28497</id>
      <parentid>28496</parentid>
      <timestamp>2012-05-01T17:30:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/putc</title>
    <ns>0</ns>
    <id>7760</id>
    <redirect title="cpp/io/c/fputc" />
    <revision>
      <id>28499</id>
      <parentid>28498</parentid>
      <timestamp>2012-05-01T17:30:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fputc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/putchar</title>
    <ns>0</ns>
    <id>7761</id>
    <redirect title="cpp/io/c/putchar" />
    <revision>
      <id>28501</id>
      <parentid>28500</parentid>
      <timestamp>2012-05-01T17:30:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/putchar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/puts</title>
    <ns>0</ns>
    <id>7762</id>
    <redirect title="cpp/io/c/puts" />
    <revision>
      <id>28503</id>
      <parentid>28502</parentid>
      <timestamp>2012-05-01T17:30:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/io/c/puts]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/remove</title>
    <ns>0</ns>
    <id>7763</id>
    <redirect title="cpp/io/c/remove" />
    <revision>
      <id>28505</id>
      <parentid>28504</parentid>
      <timestamp>2012-05-01T17:30:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/rename</title>
    <ns>0</ns>
    <id>7764</id>
    <redirect title="cpp/io/c/rename" />
    <revision>
      <id>28507</id>
      <parentid>28506</parentid>
      <timestamp>2012-05-01T17:30:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/rename]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/rewind</title>
    <ns>0</ns>
    <id>7765</id>
    <redirect title="cpp/io/c/rewind" />
    <revision>
      <id>28509</id>
      <parentid>28508</parentid>
      <timestamp>2012-05-01T17:30:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/rewind]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/scanf</title>
    <ns>0</ns>
    <id>7766</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>28511</id>
      <parentid>28510</parentid>
      <timestamp>2012-05-01T17:30:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/setbuf</title>
    <ns>0</ns>
    <id>7767</id>
    <redirect title="cpp/io/c/setbuf" />
    <revision>
      <id>28513</id>
      <parentid>28512</parentid>
      <timestamp>2012-05-01T17:30:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/setbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/setvbuf</title>
    <ns>0</ns>
    <id>7768</id>
    <redirect title="cpp/io/c/setvbuf" />
    <revision>
      <id>28515</id>
      <parentid>28514</parentid>
      <timestamp>2012-05-01T17:30:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/setvbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/snprintf</title>
    <ns>0</ns>
    <id>7769</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>28517</id>
      <parentid>28516</parentid>
      <timestamp>2012-05-01T17:30:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/sprintf</title>
    <ns>0</ns>
    <id>7770</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>28519</id>
      <parentid>28518</parentid>
      <timestamp>2012-05-01T17:30:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/sscanf</title>
    <ns>0</ns>
    <id>7771</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>28521</id>
      <parentid>28520</parentid>
      <timestamp>2012-05-01T17:30:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/start</title>
    <ns>0</ns>
    <id>7772</id>
    <redirect title="cpp/io/c" />
    <revision>
      <id>28523</id>
      <parentid>28522</parentid>
      <timestamp>2012-05-01T17:30:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="22">#redirect [[cpp/io/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/tmpfile</title>
    <ns>0</ns>
    <id>7774</id>
    <redirect title="cpp/io/c/tmpfile" />
    <revision>
      <id>28527</id>
      <parentid>28526</parentid>
      <timestamp>2012-05-01T17:30:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/tmpfile]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/tmpnam</title>
    <ns>0</ns>
    <id>7775</id>
    <redirect title="cpp/io/c/tmpnam" />
    <revision>
      <id>28529</id>
      <parentid>28528</parentid>
      <timestamp>2012-05-01T17:30:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/tmpnam]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/ungetc</title>
    <ns>0</ns>
    <id>7776</id>
    <redirect title="cpp/io/c/ungetc" />
    <revision>
      <id>28531</id>
      <parentid>28530</parentid>
      <timestamp>2012-05-01T17:30:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/ungetc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/vprintf vfprintf vsprintf</title>
    <ns>0</ns>
    <id>7777</id>
    <redirect title="cpp/io/c/vfprintf" />
    <revision>
      <id>28533</id>
      <parentid>28532</parentid>
      <timestamp>2012-05-01T17:30:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/io/c/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/io/vscanf vfscanf vsscanf</title>
    <ns>0</ns>
    <id>7778</id>
    <redirect title="cpp/io/c/vfscanf" />
    <revision>
      <id>28535</id>
      <parentid>28534</parentid>
      <timestamp>2012-05-01T17:30:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/vfscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/</title>
    <ns>0</ns>
    <id>7804</id>
    <redirect title="cpp/numeric/math" />
    <revision>
      <id>28587</id>
      <parentid>28586</parentid>
      <timestamp>2012-05-01T17:30:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/numeric/math]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/abs</title>
    <ns>0</ns>
    <id>7779</id>
    <redirect title="cpp/numeric/math/abs" />
    <revision>
      <id>28537</id>
      <parentid>28536</parentid>
      <timestamp>2012-05-01T17:30:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/acos</title>
    <ns>0</ns>
    <id>7780</id>
    <redirect title="cpp/numeric/math/acos" />
    <revision>
      <id>28539</id>
      <parentid>28538</parentid>
      <timestamp>2012-05-01T17:30:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/acos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/asin</title>
    <ns>0</ns>
    <id>7781</id>
    <redirect title="cpp/numeric/math/asin" />
    <revision>
      <id>28541</id>
      <parentid>28540</parentid>
      <timestamp>2012-05-01T17:30:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/asin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/atan</title>
    <ns>0</ns>
    <id>7782</id>
    <redirect title="cpp/numeric/math/atan" />
    <revision>
      <id>28543</id>
      <parentid>28542</parentid>
      <timestamp>2012-05-01T17:30:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/atan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/atan2</title>
    <ns>0</ns>
    <id>7783</id>
    <redirect title="cpp/numeric/math/atan2" />
    <revision>
      <id>28545</id>
      <parentid>28544</parentid>
      <timestamp>2012-05-01T17:30:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/atan2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/ceil</title>
    <ns>0</ns>
    <id>7784</id>
    <redirect title="cpp/numeric/math/ceil" />
    <revision>
      <id>28547</id>
      <parentid>28546</parentid>
      <timestamp>2012-05-01T17:30:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/ceil]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/cos</title>
    <ns>0</ns>
    <id>7785</id>
    <redirect title="cpp/numeric/math/cos" />
    <revision>
      <id>28549</id>
      <parentid>28548</parentid>
      <timestamp>2012-05-01T17:30:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/cos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/cosh</title>
    <ns>0</ns>
    <id>7786</id>
    <redirect title="cpp/numeric/math/cosh" />
    <revision>
      <id>28551</id>
      <parentid>28550</parentid>
      <timestamp>2012-05-01T17:30:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/cosh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/div</title>
    <ns>0</ns>
    <id>7787</id>
    <redirect title="cpp/numeric/math/div" />
    <revision>
      <id>28553</id>
      <parentid>28552</parentid>
      <timestamp>2012-05-01T17:30:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/exp</title>
    <ns>0</ns>
    <id>7788</id>
    <redirect title="cpp/numeric/math/exp" />
    <revision>
      <id>28555</id>
      <parentid>28554</parentid>
      <timestamp>2012-05-01T17:30:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/exp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/fabs</title>
    <ns>0</ns>
    <id>7789</id>
    <redirect title="cpp/numeric/math/fabs" />
    <revision>
      <id>28557</id>
      <parentid>28556</parentid>
      <timestamp>2012-05-01T17:30:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/fabs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/floor</title>
    <ns>0</ns>
    <id>7790</id>
    <redirect title="cpp/numeric/math/floor" />
    <revision>
      <id>28559</id>
      <parentid>28558</parentid>
      <timestamp>2012-05-01T17:30:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/floor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/fmod</title>
    <ns>0</ns>
    <id>7791</id>
    <redirect title="cpp/numeric/math/fmod" />
    <revision>
      <id>28561</id>
      <parentid>28560</parentid>
      <timestamp>2012-05-01T17:30:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/fmod]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/frexp</title>
    <ns>0</ns>
    <id>7792</id>
    <redirect title="cpp/numeric/math/frexp" />
    <revision>
      <id>28563</id>
      <parentid>28562</parentid>
      <timestamp>2012-05-01T17:30:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/frexp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/labs</title>
    <ns>0</ns>
    <id>7793</id>
    <redirect title="cpp/numeric/math/abs" />
    <revision>
      <id>46086</id>
      <parentid>28565</parentid>
      <timestamp>2013-02-15T21:49:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/numeric/math/abs]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/ldexp</title>
    <ns>0</ns>
    <id>7794</id>
    <redirect title="cpp/numeric/math/ldexp" />
    <revision>
      <id>28567</id>
      <parentid>28566</parentid>
      <timestamp>2012-05-01T17:30:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/ldexp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/ldiv</title>
    <ns>0</ns>
    <id>7795</id>
    <redirect title="cpp/numeric/math/div" />
    <revision>
      <id>46087</id>
      <parentid>28569</parentid>
      <timestamp>2013-02-15T21:49:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/numeric/math/div]]</comment>
      <text xml:space="preserve" bytes="34">#REDIRECT [[cpp/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/log</title>
    <ns>0</ns>
    <id>7796</id>
    <redirect title="cpp/numeric/math/log" />
    <revision>
      <id>28571</id>
      <parentid>28570</parentid>
      <timestamp>2012-05-01T17:30:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/log]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/log10</title>
    <ns>0</ns>
    <id>7797</id>
    <redirect title="cpp/numeric/math/log10" />
    <revision>
      <id>28573</id>
      <parentid>28572</parentid>
      <timestamp>2012-05-01T17:30:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/log10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/modf</title>
    <ns>0</ns>
    <id>7798</id>
    <redirect title="cpp/numeric/math/modf" />
    <revision>
      <id>28575</id>
      <parentid>28574</parentid>
      <timestamp>2012-05-01T17:30:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/modf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/pow</title>
    <ns>0</ns>
    <id>7799</id>
    <redirect title="cpp/numeric/math/pow" />
    <revision>
      <id>28577</id>
      <parentid>28576</parentid>
      <timestamp>2012-05-01T17:30:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/pow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/sin</title>
    <ns>0</ns>
    <id>7800</id>
    <redirect title="cpp/numeric/math/sin" />
    <revision>
      <id>28579</id>
      <parentid>28578</parentid>
      <timestamp>2012-05-01T17:30:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/sin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/sinh</title>
    <ns>0</ns>
    <id>7801</id>
    <redirect title="cpp/numeric/math/sinh" />
    <revision>
      <id>28581</id>
      <parentid>28580</parentid>
      <timestamp>2012-05-01T17:30:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/sinh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/sqrt</title>
    <ns>0</ns>
    <id>7802</id>
    <redirect title="cpp/numeric/math/sqrt" />
    <revision>
      <id>28583</id>
      <parentid>28582</parentid>
      <timestamp>2012-05-01T17:30:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/sqrt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/start</title>
    <ns>0</ns>
    <id>7803</id>
    <redirect title="cpp/numeric/math" />
    <revision>
      <id>28585</id>
      <parentid>28584</parentid>
      <timestamp>2012-05-01T17:30:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/numeric/math]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/tan</title>
    <ns>0</ns>
    <id>7805</id>
    <redirect title="cpp/numeric/math/tan" />
    <revision>
      <id>28589</id>
      <parentid>28588</parentid>
      <timestamp>2012-05-01T17:30:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/tan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/tanh</title>
    <ns>0</ns>
    <id>7806</id>
    <redirect title="cpp/numeric/math/tanh" />
    <revision>
      <id>28591</id>
      <parentid>28590</parentid>
      <timestamp>2012-05-01T17:30:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/tanh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/math/trunc</title>
    <ns>0</ns>
    <id>7807</id>
    <redirect title="cpp/numeric/math/trunc" />
    <revision>
      <id>28593</id>
      <parentid>28592</parentid>
      <timestamp>2012-05-01T17:30:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/trunc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/mem/</title>
    <ns>0</ns>
    <id>7813</id>
    <redirect title="cpp/memory/c" />
    <revision>
      <id>28605</id>
      <parentid>28604</parentid>
      <timestamp>2012-05-01T17:30:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/memory/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/mem/calloc</title>
    <ns>0</ns>
    <id>7808</id>
    <redirect title="cpp/memory/c/calloc" />
    <revision>
      <id>28595</id>
      <parentid>28594</parentid>
      <timestamp>2012-05-01T17:30:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/memory/c/calloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/mem/free</title>
    <ns>0</ns>
    <id>7809</id>
    <redirect title="cpp/memory/c/free" />
    <revision>
      <id>28597</id>
      <parentid>28596</parentid>
      <timestamp>2012-05-01T17:30:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/memory/c/free]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/mem/malloc</title>
    <ns>0</ns>
    <id>7810</id>
    <redirect title="cpp/memory/c/malloc" />
    <revision>
      <id>28599</id>
      <parentid>28598</parentid>
      <timestamp>2012-05-01T17:30:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/memory/c/malloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/mem/realloc</title>
    <ns>0</ns>
    <id>7811</id>
    <redirect title="cpp/memory/c/realloc" />
    <revision>
      <id>28601</id>
      <parentid>28600</parentid>
      <timestamp>2012-05-01T17:30:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/memory/c/realloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/mem/start</title>
    <ns>0</ns>
    <id>7812</id>
    <redirect title="cpp/memory/c" />
    <revision>
      <id>28603</id>
      <parentid>28602</parentid>
      <timestamp>2012-05-01T17:30:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/memory/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/</title>
    <ns>0</ns>
    <id>7828</id>
    <redirect title="cpp" />
    <revision>
      <id>28635</id>
      <parentid>28634</parentid>
      <timestamp>2012-05-01T17:31:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="17">#redirect [[cpp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/abort</title>
    <ns>0</ns>
    <id>7814</id>
    <redirect title="cpp/utility/program/abort" />
    <revision>
      <id>28607</id>
      <parentid>28606</parentid>
      <timestamp>2012-05-01T17:30:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/utility/program/abort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/assert</title>
    <ns>0</ns>
    <id>7815</id>
    <redirect title="cpp/error/assert" />
    <revision>
      <id>28609</id>
      <parentid>28608</parentid>
      <timestamp>2012-05-01T17:30:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/error/assert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/atexit</title>
    <ns>0</ns>
    <id>7816</id>
    <redirect title="cpp/utility/program/atexit" />
    <revision>
      <id>28611</id>
      <parentid>28610</parentid>
      <timestamp>2012-05-01T17:30:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/atexit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/bsearch</title>
    <ns>0</ns>
    <id>7817</id>
    <redirect title="cpp/algorithm/bsearch" />
    <revision>
      <id>28613</id>
      <parentid>28612</parentid>
      <timestamp>2012-05-01T17:31:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/bsearch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/exit</title>
    <ns>0</ns>
    <id>7818</id>
    <redirect title="cpp/utility/program/exit" />
    <revision>
      <id>28615</id>
      <parentid>28614</parentid>
      <timestamp>2012-05-01T17:31:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/utility/program/exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/getenv</title>
    <ns>0</ns>
    <id>7819</id>
    <redirect title="cpp/utility/program/getenv" />
    <revision>
      <id>28617</id>
      <parentid>28616</parentid>
      <timestamp>2012-05-01T17:31:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/getenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/longjmp</title>
    <ns>0</ns>
    <id>7820</id>
    <redirect title="cpp/utility/program/longjmp" />
    <revision>
      <id>28619</id>
      <parentid>28618</parentid>
      <timestamp>2012-05-01T17:31:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/utility/program/longjmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/qsort</title>
    <ns>0</ns>
    <id>7821</id>
    <redirect title="cpp/algorithm/qsort" />
    <revision>
      <id>28621</id>
      <parentid>28620</parentid>
      <timestamp>2012-05-01T17:31:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/qsort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/raise</title>
    <ns>0</ns>
    <id>7822</id>
    <redirect title="cpp/utility/program/raise" />
    <revision>
      <id>28623</id>
      <parentid>28622</parentid>
      <timestamp>2012-05-01T17:31:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/utility/program/raise]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/rand</title>
    <ns>0</ns>
    <id>7823</id>
    <redirect title="cpp/numeric/random/rand" />
    <revision>
      <id>28625</id>
      <parentid>28624</parentid>
      <timestamp>2012-05-01T17:31:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/numeric/random/rand]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/setjmp</title>
    <ns>0</ns>
    <id>7824</id>
    <redirect title="cpp/utility/program/setjmp" />
    <revision>
      <id>28627</id>
      <parentid>28626</parentid>
      <timestamp>2012-05-01T17:31:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/setjmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/signal</title>
    <ns>0</ns>
    <id>7825</id>
    <redirect title="cpp/utility/program/signal" />
    <revision>
      <id>28629</id>
      <parentid>28628</parentid>
      <timestamp>2012-05-01T17:31:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/signal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/srand</title>
    <ns>0</ns>
    <id>7826</id>
    <redirect title="cpp/numeric/random/srand" />
    <revision>
      <id>28631</id>
      <parentid>28630</parentid>
      <timestamp>2012-05-01T17:31:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/random/srand]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/start</title>
    <ns>0</ns>
    <id>7827</id>
    <redirect title="cpp" />
    <revision>
      <id>28633</id>
      <parentid>28632</parentid>
      <timestamp>2012-05-01T17:31:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="17">#redirect [[cpp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/system</title>
    <ns>0</ns>
    <id>7829</id>
    <redirect title="cpp/utility/program/system" />
    <revision>
      <id>28637</id>
      <parentid>28636</parentid>
      <timestamp>2012-05-01T17:31:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/system]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/other/va arg</title>
    <ns>0</ns>
    <id>7830</id>
    <redirect title="cpp" />
    <revision>
      <id>28639</id>
      <parentid>28638</parentid>
      <timestamp>2012-05-01T17:31:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="17">#redirect [[cpp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/start</title>
    <ns>0</ns>
    <id>7874</id>
    <redirect title="cpp" />
    <revision>
      <id>28727</id>
      <parentid>28726</parentid>
      <timestamp>2012-05-01T17:31:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="17">#redirect [[cpp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/</title>
    <ns>0</ns>
    <id>7851</id>
    <redirect title="cpp/string/byte" />
    <revision>
      <id>46094</id>
      <parentid>28681</parentid>
      <timestamp>2013-02-15T21:50:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/byte]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/string/byte]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/atof</title>
    <ns>0</ns>
    <id>7831</id>
    <redirect title="cpp/string/byte/atof" />
    <revision>
      <id>36251</id>
      <parentid>28641</parentid>
      <timestamp>2012-06-17T12:55:16Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/string/byte/atof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/atoi</title>
    <ns>0</ns>
    <id>7832</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>36252</id>
      <parentid>28643</parentid>
      <timestamp>2012-06-17T12:56:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/atol</title>
    <ns>0</ns>
    <id>7833</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>36253</id>
      <parentid>28645</parentid>
      <timestamp>2012-06-17T12:56:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isalnum</title>
    <ns>0</ns>
    <id>7834</id>
    <redirect title="cpp/string/byte/isalnum" />
    <revision>
      <id>36254</id>
      <parentid>28647</parentid>
      <timestamp>2012-06-17T12:56:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isalnum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isalpha</title>
    <ns>0</ns>
    <id>7835</id>
    <redirect title="cpp/string/byte/isalpha" />
    <revision>
      <id>36256</id>
      <parentid>28649</parentid>
      <timestamp>2012-06-17T12:56:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isalpha]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/iscntrl</title>
    <ns>0</ns>
    <id>7836</id>
    <redirect title="cpp/string/byte/iscntrl" />
    <revision>
      <id>36257</id>
      <parentid>28651</parentid>
      <timestamp>2012-06-17T12:57:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/iscntrl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isdigit</title>
    <ns>0</ns>
    <id>7837</id>
    <redirect title="cpp/string/byte/isdigit" />
    <revision>
      <id>36258</id>
      <parentid>28653</parentid>
      <timestamp>2012-06-17T12:57:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isgraph</title>
    <ns>0</ns>
    <id>7838</id>
    <redirect title="cpp/string/byte/isgraph" />
    <revision>
      <id>36259</id>
      <parentid>28655</parentid>
      <timestamp>2012-06-17T12:58:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isgraph]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/islower</title>
    <ns>0</ns>
    <id>7839</id>
    <redirect title="cpp/string/byte/islower" />
    <revision>
      <id>36260</id>
      <parentid>28657</parentid>
      <timestamp>2012-06-17T12:58:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/islower]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isprint</title>
    <ns>0</ns>
    <id>7840</id>
    <redirect title="cpp/string/byte/isprint" />
    <revision>
      <id>36261</id>
      <parentid>28659</parentid>
      <timestamp>2012-06-17T12:59:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isprint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/ispunct</title>
    <ns>0</ns>
    <id>7841</id>
    <redirect title="cpp/string/byte/ispunct" />
    <revision>
      <id>36262</id>
      <parentid>28661</parentid>
      <timestamp>2012-06-17T12:59:23Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/ispunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isspace</title>
    <ns>0</ns>
    <id>7842</id>
    <redirect title="cpp/string/byte/isspace" />
    <revision>
      <id>36263</id>
      <parentid>28663</parentid>
      <timestamp>2012-06-17T12:59:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isspace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isupper</title>
    <ns>0</ns>
    <id>7843</id>
    <redirect title="cpp/string/byte/isupper" />
    <revision>
      <id>36264</id>
      <parentid>28665</parentid>
      <timestamp>2012-06-17T13:00:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isupper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/isxdigit</title>
    <ns>0</ns>
    <id>7844</id>
    <redirect title="cpp/string/byte/isxdigit" />
    <revision>
      <id>36265</id>
      <parentid>28667</parentid>
      <timestamp>2012-06-17T13:01:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/string/byte/isxdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/memchr</title>
    <ns>0</ns>
    <id>7845</id>
    <redirect title="cpp/string/byte/memchr" />
    <revision>
      <id>36266</id>
      <parentid>28669</parentid>
      <timestamp>2012-06-17T13:01:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/memcmp</title>
    <ns>0</ns>
    <id>7846</id>
    <redirect title="cpp/string/byte/memcmp" />
    <revision>
      <id>36267</id>
      <parentid>28671</parentid>
      <timestamp>2012-06-17T13:02:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memcmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/memcpy</title>
    <ns>0</ns>
    <id>7847</id>
    <redirect title="cpp/string/byte/memcpy" />
    <revision>
      <id>36268</id>
      <parentid>28673</parentid>
      <timestamp>2012-06-17T13:02:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memcpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/memmove</title>
    <ns>0</ns>
    <id>7848</id>
    <redirect title="cpp/string/byte/memmove" />
    <revision>
      <id>36269</id>
      <parentid>28675</parentid>
      <timestamp>2012-06-17T13:02:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/memmove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/memset</title>
    <ns>0</ns>
    <id>7849</id>
    <redirect title="cpp/string/byte/memset" />
    <revision>
      <id>36270</id>
      <parentid>28677</parentid>
      <timestamp>2012-06-17T13:03:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/start</title>
    <ns>0</ns>
    <id>7850</id>
    <redirect title="cpp/string/byte" />
    <revision>
      <id>46093</id>
      <parentid>28679</parentid>
      <timestamp>2013-02-15T21:49:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/byte]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/string/byte]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strcat</title>
    <ns>0</ns>
    <id>7852</id>
    <redirect title="cpp/string/byte/strcat" />
    <revision>
      <id>36255</id>
      <parentid>28683</parentid>
      <timestamp>2012-06-17T12:56:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strcat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strchr</title>
    <ns>0</ns>
    <id>7853</id>
    <redirect title="cpp/string/byte/strchr" />
    <revision>
      <id>36271</id>
      <parentid>28685</parentid>
      <timestamp>2012-06-17T13:03:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strcmp</title>
    <ns>0</ns>
    <id>7854</id>
    <redirect title="cpp/string/byte/strcmp" />
    <revision>
      <id>36272</id>
      <parentid>28687</parentid>
      <timestamp>2012-06-17T13:04:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strcmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strcoll</title>
    <ns>0</ns>
    <id>7855</id>
    <redirect title="cpp/string/byte/strcoll" />
    <revision>
      <id>29750</id>
      <parentid>28689</parentid>
      <timestamp>2012-05-01T18:09:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/byte/strcoll]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strcoll]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strcpy</title>
    <ns>0</ns>
    <id>7856</id>
    <redirect title="cpp/string/byte/strcpy" />
    <revision>
      <id>36273</id>
      <parentid>28691</parentid>
      <timestamp>2012-06-17T13:04:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strcpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strcspn</title>
    <ns>0</ns>
    <id>7857</id>
    <redirect title="cpp/string/byte/strcspn" />
    <revision>
      <id>36274</id>
      <parentid>28693</parentid>
      <timestamp>2012-06-17T13:05:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strcspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strerror</title>
    <ns>0</ns>
    <id>7858</id>
    <redirect title="cpp/string/byte/strerror" />
    <revision>
      <id>29748</id>
      <parentid>28695</parentid>
      <timestamp>2012-05-01T18:09:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/byte/strerror]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/string/byte/strerror]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strlen</title>
    <ns>0</ns>
    <id>7859</id>
    <redirect title="cpp/string/byte/strlen" />
    <revision>
      <id>36275</id>
      <parentid>28697</parentid>
      <timestamp>2012-06-17T13:06:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strlen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strncat</title>
    <ns>0</ns>
    <id>7860</id>
    <redirect title="cpp/string/byte/strncat" />
    <revision>
      <id>36276</id>
      <parentid>28699</parentid>
      <timestamp>2012-06-17T13:06:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strncat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strncmp</title>
    <ns>0</ns>
    <id>7861</id>
    <redirect title="cpp/string/byte/strncmp" />
    <revision>
      <id>36277</id>
      <parentid>28701</parentid>
      <timestamp>2012-06-17T13:06:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strncmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strncpy</title>
    <ns>0</ns>
    <id>7862</id>
    <redirect title="cpp/string/byte/strncpy" />
    <revision>
      <id>36278</id>
      <parentid>28703</parentid>
      <timestamp>2012-06-17T13:06:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strncpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strpbrk</title>
    <ns>0</ns>
    <id>7863</id>
    <redirect title="cpp/string/byte/strpbrk" />
    <revision>
      <id>36279</id>
      <parentid>28705</parentid>
      <timestamp>2012-06-17T13:06:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strpbrk]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strrchr</title>
    <ns>0</ns>
    <id>7864</id>
    <redirect title="cpp/string/byte/strrchr" />
    <revision>
      <id>36280</id>
      <parentid>28707</parentid>
      <timestamp>2012-06-17T13:06:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strrchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strspn</title>
    <ns>0</ns>
    <id>7865</id>
    <redirect title="cpp/string/byte/strspn" />
    <revision>
      <id>36281</id>
      <parentid>28709</parentid>
      <timestamp>2012-06-17T13:06:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strstr</title>
    <ns>0</ns>
    <id>7866</id>
    <redirect title="cpp/string/byte/strstr" />
    <revision>
      <id>36282</id>
      <parentid>28711</parentid>
      <timestamp>2012-06-17T13:06:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strstr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strtod</title>
    <ns>0</ns>
    <id>7867</id>
    <redirect title="cpp/string/byte/strtof" />
    <revision>
      <id>36283</id>
      <parentid>28713</parentid>
      <timestamp>2012-06-17T13:07:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strtok</title>
    <ns>0</ns>
    <id>7868</id>
    <redirect title="cpp/string/byte/strtok" />
    <revision>
      <id>29746</id>
      <parentid>28715</parentid>
      <timestamp>2012-05-01T18:08:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/byte/strtok]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strtok]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strtol</title>
    <ns>0</ns>
    <id>7869</id>
    <redirect title="cpp/string/byte/strtol" />
    <revision>
      <id>36284</id>
      <parentid>28717</parentid>
      <timestamp>2012-06-17T13:08:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strtol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strtoul</title>
    <ns>0</ns>
    <id>7870</id>
    <redirect title="cpp/string/byte/strtoul" />
    <revision>
      <id>36285</id>
      <parentid>28719</parentid>
      <timestamp>2012-06-17T13:08:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strtoul]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/strxfrm</title>
    <ns>0</ns>
    <id>7871</id>
    <redirect title="cpp/string/byte/strxfrm" />
    <revision>
      <id>36286</id>
      <parentid>28721</parentid>
      <timestamp>2012-06-17T13:08:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strxfrm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/tolower</title>
    <ns>0</ns>
    <id>7872</id>
    <redirect title="cpp/string/byte/tolower" />
    <revision>
      <id>36287</id>
      <parentid>28723</parentid>
      <timestamp>2012-06-17T13:09:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/tolower]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/c/string/toupper</title>
    <ns>0</ns>
    <id>7873</id>
    <redirect title="cpp/string/byte/toupper" />
    <revision>
      <id>36288</id>
      <parentid>28725</parentid>
      <timestamp>2012-06-17T13:10:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/toupper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/</title>
    <ns>0</ns>
    <id>7890</id>
    <redirect title="cpp/chrono" />
    <revision>
      <id>28759</id>
      <parentid>28758</parentid>
      <timestamp>2012-05-01T17:31:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/chrono]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/</title>
    <ns>0</ns>
    <id>7885</id>
    <redirect title="cpp/chrono/c" />
    <revision>
      <id>28749</id>
      <parentid>28748</parentid>
      <timestamp>2012-05-01T17:31:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/chrono/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/asctime</title>
    <ns>0</ns>
    <id>7876</id>
    <redirect title="cpp/chrono/c/asctime" />
    <revision>
      <id>28731</id>
      <parentid>28730</parentid>
      <timestamp>2012-05-01T17:31:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/chrono/c/asctime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/clock</title>
    <ns>0</ns>
    <id>7877</id>
    <redirect title="cpp/chrono/c/clock" />
    <revision>
      <id>28733</id>
      <parentid>28732</parentid>
      <timestamp>2012-05-01T17:31:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/chrono/c/clock]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/clocks per sec</title>
    <ns>0</ns>
    <id>7878</id>
    <redirect title="cpp/chrono/c/CLOCKS PER SEC" />
    <revision>
      <id>28735</id>
      <parentid>28734</parentid>
      <timestamp>2012-05-01T17:31:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/chrono/c/CLOCKS_PER_SEC]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/ctime</title>
    <ns>0</ns>
    <id>7879</id>
    <redirect title="cpp/chrono/c/ctime" />
    <revision>
      <id>28737</id>
      <parentid>28736</parentid>
      <timestamp>2012-05-01T17:31:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/chrono/c/ctime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/difftime</title>
    <ns>0</ns>
    <id>7880</id>
    <redirect title="cpp/chrono/c/difftime" />
    <revision>
      <id>28739</id>
      <parentid>28738</parentid>
      <timestamp>2012-05-01T17:31:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/chrono/c/difftime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/gmtime</title>
    <ns>0</ns>
    <id>7881</id>
    <redirect title="cpp/chrono/c/gmtime" />
    <revision>
      <id>28741</id>
      <parentid>28740</parentid>
      <timestamp>2012-05-01T17:31:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/chrono/c/gmtime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/localtime</title>
    <ns>0</ns>
    <id>7882</id>
    <redirect title="cpp/chrono/c/localtime" />
    <revision>
      <id>28743</id>
      <parentid>28742</parentid>
      <timestamp>2012-05-01T17:31:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/chrono/c/localtime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/mktime</title>
    <ns>0</ns>
    <id>7883</id>
    <redirect title="cpp/chrono/c/mktime" />
    <revision>
      <id>28745</id>
      <parentid>28744</parentid>
      <timestamp>2012-05-01T17:31:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/chrono/c/mktime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/start</title>
    <ns>0</ns>
    <id>7884</id>
    <redirect title="cpp/chrono/c" />
    <revision>
      <id>28747</id>
      <parentid>28746</parentid>
      <timestamp>2012-05-01T17:31:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/chrono/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/strftime</title>
    <ns>0</ns>
    <id>7886</id>
    <redirect title="cpp/chrono/c/strftime" />
    <revision>
      <id>28751</id>
      <parentid>28750</parentid>
      <timestamp>2012-05-01T17:31:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/chrono/c/strftime]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/time</title>
    <ns>0</ns>
    <id>7887</id>
    <redirect title="cpp/chrono/c/time" />
    <revision>
      <id>28753</id>
      <parentid>28752</parentid>
      <timestamp>2012-05-01T17:31:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/chrono/c/time]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/c/tm</title>
    <ns>0</ns>
    <id>7888</id>
    <redirect title="cpp/chrono/c/tm" />
    <revision>
      <id>28755</id>
      <parentid>28754</parentid>
      <timestamp>2012-05-01T17:31:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/chrono/c/tm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/chrono/start</title>
    <ns>0</ns>
    <id>7889</id>
    <redirect title="cpp/chrono" />
    <revision>
      <id>28757</id>
      <parentid>28756</parentid>
      <timestamp>2012-05-01T17:31:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/chrono]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/</title>
    <ns>0</ns>
    <id>7900</id>
    <redirect title="cpp/numeric/complex" />
    <revision>
      <id>28779</id>
      <parentid>28778</parentid>
      <timestamp>2012-05-01T17:31:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/numeric/complex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/abs</title>
    <ns>0</ns>
    <id>7891</id>
    <redirect title="cpp/numeric/complex/abs" />
    <revision>
      <id>28761</id>
      <parentid>28760</parentid>
      <timestamp>2012-05-01T17:31:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/numeric/complex/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/arg</title>
    <ns>0</ns>
    <id>7892</id>
    <redirect title="cpp/numeric/complex/arg" />
    <revision>
      <id>28763</id>
      <parentid>28762</parentid>
      <timestamp>2012-05-01T17:31:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/numeric/complex/arg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/complex constructors</title>
    <ns>0</ns>
    <id>7893</id>
    <redirect title="cpp/numeric/complex/complex" />
    <revision>
      <id>28765</id>
      <parentid>28764</parentid>
      <timestamp>2012-05-01T17:31:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/numeric/complex/complex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/conj</title>
    <ns>0</ns>
    <id>7894</id>
    <redirect title="cpp/numeric/complex/conj" />
    <revision>
      <id>28767</id>
      <parentid>28766</parentid>
      <timestamp>2012-05-01T17:31:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/conj]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/imag</title>
    <ns>0</ns>
    <id>7895</id>
    <redirect title="cpp/numeric/complex/imag" />
    <revision>
      <id>28769</id>
      <parentid>28768</parentid>
      <timestamp>2012-05-01T17:31:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/imag]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/norm</title>
    <ns>0</ns>
    <id>7896</id>
    <redirect title="cpp/numeric/complex/norm" />
    <revision>
      <id>28771</id>
      <parentid>28770</parentid>
      <timestamp>2012-05-01T17:31:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/norm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/polar</title>
    <ns>0</ns>
    <id>7897</id>
    <redirect title="cpp/numeric/complex/polar" />
    <revision>
      <id>28773</id>
      <parentid>28772</parentid>
      <timestamp>2012-05-01T17:31:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/complex/polar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/real</title>
    <ns>0</ns>
    <id>7898</id>
    <redirect title="cpp/numeric/complex/real" />
    <revision>
      <id>28775</id>
      <parentid>28774</parentid>
      <timestamp>2012-05-01T17:31:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/real]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complex/start</title>
    <ns>0</ns>
    <id>7899</id>
    <redirect title="cpp/numeric/complex" />
    <revision>
      <id>28777</id>
      <parentid>28776</parentid>
      <timestamp>2012-05-01T17:31:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/numeric/complex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/complexity</title>
    <ns>0</ns>
    <id>7642</id>
    <redirect title="cpp" />
    <revision>
      <id>37572</id>
      <parentid>30558</parentid>
      <timestamp>2012-07-15T21:00:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp]]</comment>
      <text xml:space="preserve" bytes="150">#redirect [[cpp]]

[[es:cpp/complexity]]
[[fr:cpp/complexity]]
[[it:cpp/complexity]]
[[ja:cpp/complexity]]
[[pl:cpp/complexity]]
[[zh:cpp/complexity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/</title>
    <ns>0</ns>
    <id>8199</id>
    <redirect title="cpp/container" />
    <revision>
      <id>29377</id>
      <parentid>29376</parentid>
      <timestamp>2012-05-01T17:33:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/container]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/</title>
    <ns>0</ns>
    <id>7914</id>
    <redirect title="cpp/container/array" />
    <revision>
      <id>28807</id>
      <parentid>28806</parentid>
      <timestamp>2012-05-01T17:31:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/array]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/at</title>
    <ns>0</ns>
    <id>7901</id>
    <redirect title="cpp/container/array/at" />
    <revision>
      <id>28781</id>
      <parentid>28780</parentid>
      <timestamp>2012-05-01T17:31:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/array/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/back</title>
    <ns>0</ns>
    <id>7902</id>
    <redirect title="cpp/container/array/back" />
    <revision>
      <id>28783</id>
      <parentid>28782</parentid>
      <timestamp>2012-05-01T17:31:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/array/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/begin</title>
    <ns>0</ns>
    <id>7903</id>
    <redirect title="cpp/container/array/begin" />
    <revision>
      <id>28785</id>
      <parentid>28784</parentid>
      <timestamp>2012-05-01T17:31:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/array/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/data</title>
    <ns>0</ns>
    <id>7904</id>
    <redirect title="cpp/container/array/data" />
    <revision>
      <id>28787</id>
      <parentid>28786</parentid>
      <timestamp>2012-05-01T17:31:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/array/data]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/empty</title>
    <ns>0</ns>
    <id>7905</id>
    <redirect title="cpp/container/array/empty" />
    <revision>
      <id>28789</id>
      <parentid>28788</parentid>
      <timestamp>2012-05-01T17:31:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/array/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/end</title>
    <ns>0</ns>
    <id>7906</id>
    <redirect title="cpp/container/array/end" />
    <revision>
      <id>28791</id>
      <parentid>28790</parentid>
      <timestamp>2012-05-01T17:31:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/array/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/front</title>
    <ns>0</ns>
    <id>7907</id>
    <redirect title="cpp/container/array/front" />
    <revision>
      <id>28793</id>
      <parentid>28792</parentid>
      <timestamp>2012-05-01T17:31:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/array/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/max size</title>
    <ns>0</ns>
    <id>7908</id>
    <redirect title="cpp/container/array/max size" />
    <revision>
      <id>28795</id>
      <parentid>28794</parentid>
      <timestamp>2012-05-01T17:31:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/array/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/operator at</title>
    <ns>0</ns>
    <id>7909</id>
    <redirect title="cpp/container/array/operator at" />
    <revision>
      <id>28797</id>
      <parentid>28796</parentid>
      <timestamp>2012-05-01T17:31:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/array/operator_at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/rbegin</title>
    <ns>0</ns>
    <id>7910</id>
    <redirect title="cpp/container/array/rbegin" />
    <revision>
      <id>28799</id>
      <parentid>28798</parentid>
      <timestamp>2012-05-01T17:31:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/array/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/rend</title>
    <ns>0</ns>
    <id>7911</id>
    <redirect title="cpp/container/array/rend" />
    <revision>
      <id>28801</id>
      <parentid>28800</parentid>
      <timestamp>2012-05-01T17:31:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/array/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/size</title>
    <ns>0</ns>
    <id>7912</id>
    <redirect title="cpp/container/array/size" />
    <revision>
      <id>28803</id>
      <parentid>28802</parentid>
      <timestamp>2012-05-01T17:31:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/array/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/start</title>
    <ns>0</ns>
    <id>7913</id>
    <redirect title="cpp/container/array" />
    <revision>
      <id>28805</id>
      <parentid>28804</parentid>
      <timestamp>2012-05-01T17:31:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/array]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/array/swap</title>
    <ns>0</ns>
    <id>7915</id>
    <redirect title="cpp/container/array/swap" />
    <revision>
      <id>28809</id>
      <parentid>28808</parentid>
      <timestamp>2012-05-01T17:31:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/array/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/</title>
    <ns>0</ns>
    <id>7942</id>
    <redirect title="cpp/container/deque" />
    <revision>
      <id>28863</id>
      <parentid>28862</parentid>
      <timestamp>2012-05-01T17:31:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/assign</title>
    <ns>0</ns>
    <id>7916</id>
    <redirect title="cpp/container/deque/assign" />
    <revision>
      <id>28811</id>
      <parentid>28810</parentid>
      <timestamp>2012-05-01T17:31:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/at</title>
    <ns>0</ns>
    <id>7917</id>
    <redirect title="cpp/container/deque/at" />
    <revision>
      <id>28813</id>
      <parentid>28812</parentid>
      <timestamp>2012-05-01T17:31:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/deque/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/back</title>
    <ns>0</ns>
    <id>7918</id>
    <redirect title="cpp/container/deque/back" />
    <revision>
      <id>28815</id>
      <parentid>28814</parentid>
      <timestamp>2012-05-01T17:31:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/begin</title>
    <ns>0</ns>
    <id>7919</id>
    <redirect title="cpp/container/deque/begin" />
    <revision>
      <id>28817</id>
      <parentid>28816</parentid>
      <timestamp>2012-05-01T17:31:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/clear</title>
    <ns>0</ns>
    <id>7920</id>
    <redirect title="cpp/container/deque/clear" />
    <revision>
      <id>28819</id>
      <parentid>28818</parentid>
      <timestamp>2012-05-01T17:31:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/constructor</title>
    <ns>0</ns>
    <id>7921</id>
    <redirect title="cpp/container/deque/deque" />
    <revision>
      <id>28821</id>
      <parentid>28820</parentid>
      <timestamp>2012-05-01T17:31:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/deque operators</title>
    <ns>0</ns>
    <id>7922</id>
    <redirect title="cpp/container/deque/operator cmp" />
    <revision>
      <id>36223</id>
      <parentid>28823</parentid>
      <timestamp>2012-06-17T12:43:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/deque/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/empty</title>
    <ns>0</ns>
    <id>7923</id>
    <redirect title="cpp/container/deque/empty" />
    <revision>
      <id>28825</id>
      <parentid>28824</parentid>
      <timestamp>2012-05-01T17:31:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/end</title>
    <ns>0</ns>
    <id>7924</id>
    <redirect title="cpp/container/deque/end" />
    <revision>
      <id>28827</id>
      <parentid>28826</parentid>
      <timestamp>2012-05-01T17:31:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/deque/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/erase</title>
    <ns>0</ns>
    <id>7925</id>
    <redirect title="cpp/container/deque/erase" />
    <revision>
      <id>28829</id>
      <parentid>28828</parentid>
      <timestamp>2012-05-01T17:31:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/front</title>
    <ns>0</ns>
    <id>7926</id>
    <redirect title="cpp/container/deque/front" />
    <revision>
      <id>28831</id>
      <parentid>28830</parentid>
      <timestamp>2012-05-01T17:31:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/get allocator</title>
    <ns>0</ns>
    <id>7927</id>
    <redirect title="cpp/container/deque/get allocator" />
    <revision>
      <id>28833</id>
      <parentid>28832</parentid>
      <timestamp>2012-05-01T17:31:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/deque/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/insert</title>
    <ns>0</ns>
    <id>7928</id>
    <redirect title="cpp/container/deque/insert" />
    <revision>
      <id>28835</id>
      <parentid>28834</parentid>
      <timestamp>2012-05-01T17:31:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/max size</title>
    <ns>0</ns>
    <id>7929</id>
    <redirect title="cpp/container/deque/max size" />
    <revision>
      <id>28837</id>
      <parentid>28836</parentid>
      <timestamp>2012-05-01T17:31:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/deque/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/operator at</title>
    <ns>0</ns>
    <id>7930</id>
    <redirect title="cpp/container/deque/operator at" />
    <revision>
      <id>28839</id>
      <parentid>28838</parentid>
      <timestamp>2012-05-01T17:31:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/deque/operator_at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/operator comp</title>
    <ns>0</ns>
    <id>7931</id>
    <redirect title="cpp/container/deque/operator cmp" />
    <revision>
      <id>36224</id>
      <parentid>28841</parentid>
      <timestamp>2012-06-17T12:45:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/deque/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/pop back</title>
    <ns>0</ns>
    <id>7932</id>
    <redirect title="cpp/container/deque/pop back" />
    <revision>
      <id>28843</id>
      <parentid>28842</parentid>
      <timestamp>2012-05-01T17:31:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/deque/pop_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/pop front</title>
    <ns>0</ns>
    <id>7933</id>
    <redirect title="cpp/container/deque/pop front" />
    <revision>
      <id>28845</id>
      <parentid>28844</parentid>
      <timestamp>2012-05-01T17:31:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/deque/pop_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/push back</title>
    <ns>0</ns>
    <id>7934</id>
    <redirect title="cpp/container/deque/push back" />
    <revision>
      <id>28847</id>
      <parentid>28846</parentid>
      <timestamp>2012-05-01T17:31:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/deque/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/push front</title>
    <ns>0</ns>
    <id>7935</id>
    <redirect title="cpp/container/deque/push front" />
    <revision>
      <id>28849</id>
      <parentid>28848</parentid>
      <timestamp>2012-05-01T17:31:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/deque/push_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/rbegin</title>
    <ns>0</ns>
    <id>7936</id>
    <redirect title="cpp/container/deque/rbegin" />
    <revision>
      <id>28851</id>
      <parentid>28850</parentid>
      <timestamp>2012-05-01T17:31:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/rend</title>
    <ns>0</ns>
    <id>7937</id>
    <redirect title="cpp/container/deque/rend" />
    <revision>
      <id>28853</id>
      <parentid>28852</parentid>
      <timestamp>2012-05-01T17:31:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/resize</title>
    <ns>0</ns>
    <id>7938</id>
    <redirect title="cpp/container/deque/resize" />
    <revision>
      <id>28855</id>
      <parentid>28854</parentid>
      <timestamp>2012-05-01T17:31:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/shrink to fit</title>
    <ns>0</ns>
    <id>7939</id>
    <redirect title="cpp/container/deque/shrink to fit" />
    <revision>
      <id>28857</id>
      <parentid>28856</parentid>
      <timestamp>2012-05-01T17:31:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/deque/shrink_to_fit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/size</title>
    <ns>0</ns>
    <id>7940</id>
    <redirect title="cpp/container/deque/size" />
    <revision>
      <id>28859</id>
      <parentid>28858</parentid>
      <timestamp>2012-05-01T17:31:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/start</title>
    <ns>0</ns>
    <id>7941</id>
    <redirect title="cpp/container/deque" />
    <revision>
      <id>28861</id>
      <parentid>28860</parentid>
      <timestamp>2012-05-01T17:31:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/deque/swap</title>
    <ns>0</ns>
    <id>7943</id>
    <redirect title="cpp/container/deque/swap" />
    <revision>
      <id>28865</id>
      <parentid>28864</parentid>
      <timestamp>2012-05-01T17:31:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/</title>
    <ns>0</ns>
    <id>7961</id>
    <redirect title="cpp/container/forward list" />
    <revision>
      <id>28901</id>
      <parentid>28900</parentid>
      <timestamp>2012-05-01T17:31:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/forward_list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/assign</title>
    <ns>0</ns>
    <id>7944</id>
    <redirect title="cpp/container/forward list/assign" />
    <revision>
      <id>28867</id>
      <parentid>28866</parentid>
      <timestamp>2012-05-01T17:31:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/forward_list/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/before begin</title>
    <ns>0</ns>
    <id>7945</id>
    <redirect title="cpp/container/forward list/before begin" />
    <revision>
      <id>28869</id>
      <parentid>28868</parentid>
      <timestamp>2012-05-01T17:31:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="53">#redirect [[cpp/container/forward_list/before_begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/begin</title>
    <ns>0</ns>
    <id>7946</id>
    <redirect title="cpp/container/forward list/begin" />
    <revision>
      <id>28871</id>
      <parentid>28870</parentid>
      <timestamp>2012-05-01T17:31:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/forward_list/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/clear</title>
    <ns>0</ns>
    <id>7947</id>
    <redirect title="cpp/container/forward list/clear" />
    <revision>
      <id>28873</id>
      <parentid>28872</parentid>
      <timestamp>2012-05-01T17:31:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/forward_list/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/constructor</title>
    <ns>0</ns>
    <id>7948</id>
    <redirect title="cpp/container/forward list/forward list" />
    <revision>
      <id>28875</id>
      <parentid>28874</parentid>
      <timestamp>2012-05-01T17:31:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="53">#redirect [[cpp/container/forward_list/forward_list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/empty</title>
    <ns>0</ns>
    <id>7949</id>
    <redirect title="cpp/container/forward list/empty" />
    <revision>
      <id>28877</id>
      <parentid>28876</parentid>
      <timestamp>2012-05-01T17:31:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/forward_list/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/end</title>
    <ns>0</ns>
    <id>7950</id>
    <redirect title="cpp/container/forward list/end" />
    <revision>
      <id>28879</id>
      <parentid>28878</parentid>
      <timestamp>2012-05-01T17:31:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/forward_list/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/erase after</title>
    <ns>0</ns>
    <id>7951</id>
    <redirect title="cpp/container/forward list/erase after" />
    <revision>
      <id>28881</id>
      <parentid>28880</parentid>
      <timestamp>2012-05-01T17:31:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/container/forward_list/erase_after]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/front</title>
    <ns>0</ns>
    <id>7952</id>
    <redirect title="cpp/container/forward list/front" />
    <revision>
      <id>28883</id>
      <parentid>28882</parentid>
      <timestamp>2012-05-01T17:31:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/forward_list/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/get allocator</title>
    <ns>0</ns>
    <id>7953</id>
    <redirect title="cpp/container/forward list/get allocator" />
    <revision>
      <id>28885</id>
      <parentid>28884</parentid>
      <timestamp>2012-05-01T17:31:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="54">#redirect [[cpp/container/forward_list/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/insert after</title>
    <ns>0</ns>
    <id>7954</id>
    <redirect title="cpp/container/forward list/insert after" />
    <revision>
      <id>28887</id>
      <parentid>28886</parentid>
      <timestamp>2012-05-01T17:31:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="53">#redirect [[cpp/container/forward_list/insert_after]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/max size</title>
    <ns>0</ns>
    <id>7955</id>
    <redirect title="cpp/container/forward list/max size" />
    <revision>
      <id>28889</id>
      <parentid>28888</parentid>
      <timestamp>2012-05-01T17:31:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/container/forward_list/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/operator comp</title>
    <ns>0</ns>
    <id>7956</id>
    <redirect title="cpp/container/forward list/operator cmp" />
    <revision>
      <id>36225</id>
      <parentid>28891</parentid>
      <timestamp>2012-06-17T12:45:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="53">#redirect [[cpp/container/forward_list/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/pop front</title>
    <ns>0</ns>
    <id>7957</id>
    <redirect title="cpp/container/forward list/pop front" />
    <revision>
      <id>28893</id>
      <parentid>28892</parentid>
      <timestamp>2012-05-01T17:31:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/container/forward_list/pop_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/push front</title>
    <ns>0</ns>
    <id>7958</id>
    <redirect title="cpp/container/forward list/push front" />
    <revision>
      <id>28895</id>
      <parentid>28894</parentid>
      <timestamp>2012-05-01T17:31:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/container/forward_list/push_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/size</title>
    <ns>0</ns>
    <id>7959</id>
    <redirect title="cpp/container/list/size" />
    <revision>
      <id>29721</id>
      <parentid>28897</parentid>
      <timestamp>2012-05-01T18:04:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/container/list/size]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/start</title>
    <ns>0</ns>
    <id>7960</id>
    <redirect title="cpp/container/forward list" />
    <revision>
      <id>28899</id>
      <parentid>28898</parentid>
      <timestamp>2012-05-01T17:31:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/forward_list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/forward list/swap</title>
    <ns>0</ns>
    <id>7962</id>
    <redirect title="cpp/container/forward list/swap" />
    <revision>
      <id>28903</id>
      <parentid>28902</parentid>
      <timestamp>2012-05-01T17:31:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/forward_list/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/</title>
    <ns>0</ns>
    <id>7992</id>
    <redirect title="cpp/container/list" />
    <revision>
      <id>28963</id>
      <parentid>28962</parentid>
      <timestamp>2012-05-01T17:32:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/container/list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/assign</title>
    <ns>0</ns>
    <id>7963</id>
    <redirect title="cpp/container/list/assign" />
    <revision>
      <id>28905</id>
      <parentid>28904</parentid>
      <timestamp>2012-05-01T17:31:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/back</title>
    <ns>0</ns>
    <id>7964</id>
    <redirect title="cpp/container/list/back" />
    <revision>
      <id>28907</id>
      <parentid>28906</parentid>
      <timestamp>2012-05-01T17:31:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/begin</title>
    <ns>0</ns>
    <id>7965</id>
    <redirect title="cpp/container/list/begin" />
    <revision>
      <id>28909</id>
      <parentid>28908</parentid>
      <timestamp>2012-05-01T17:31:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/clear</title>
    <ns>0</ns>
    <id>7966</id>
    <redirect title="cpp/container/list/clear" />
    <revision>
      <id>28911</id>
      <parentid>28910</parentid>
      <timestamp>2012-05-01T17:31:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/constructor</title>
    <ns>0</ns>
    <id>7967</id>
    <redirect title="cpp/container/list/list" />
    <revision>
      <id>28913</id>
      <parentid>28912</parentid>
      <timestamp>2012-05-01T17:31:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/empty</title>
    <ns>0</ns>
    <id>7968</id>
    <redirect title="cpp/container/list/empty" />
    <revision>
      <id>28915</id>
      <parentid>28914</parentid>
      <timestamp>2012-05-01T17:31:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/end</title>
    <ns>0</ns>
    <id>7969</id>
    <redirect title="cpp/container/list/end" />
    <revision>
      <id>28917</id>
      <parentid>28916</parentid>
      <timestamp>2012-05-01T17:32:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/list/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/erase</title>
    <ns>0</ns>
    <id>7970</id>
    <redirect title="cpp/container/list/erase" />
    <revision>
      <id>28919</id>
      <parentid>28918</parentid>
      <timestamp>2012-05-01T17:32:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/front</title>
    <ns>0</ns>
    <id>7971</id>
    <redirect title="cpp/container/list/front" />
    <revision>
      <id>28921</id>
      <parentid>28920</parentid>
      <timestamp>2012-05-01T17:32:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/get allocator</title>
    <ns>0</ns>
    <id>7972</id>
    <redirect title="cpp/container/list/get allocator" />
    <revision>
      <id>28923</id>
      <parentid>28922</parentid>
      <timestamp>2012-05-01T17:32:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/list/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/insert</title>
    <ns>0</ns>
    <id>7973</id>
    <redirect title="cpp/container/list/insert" />
    <revision>
      <id>28925</id>
      <parentid>28924</parentid>
      <timestamp>2012-05-01T17:32:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/list operators</title>
    <ns>0</ns>
    <id>7974</id>
    <redirect title="cpp/container/list/operator cmp" />
    <revision>
      <id>36226</id>
      <parentid>28927</parentid>
      <timestamp>2012-06-17T12:45:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/list/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/max size</title>
    <ns>0</ns>
    <id>7975</id>
    <redirect title="cpp/container/list/max size" />
    <revision>
      <id>28929</id>
      <parentid>28928</parentid>
      <timestamp>2012-05-01T17:32:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/list/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/merge</title>
    <ns>0</ns>
    <id>7976</id>
    <redirect title="cpp/container/list/merge" />
    <revision>
      <id>28931</id>
      <parentid>28930</parentid>
      <timestamp>2012-05-01T17:32:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/operator comp</title>
    <ns>0</ns>
    <id>7977</id>
    <redirect title="cpp/container/list/operator cmp" />
    <revision>
      <id>36227</id>
      <parentid>28933</parentid>
      <timestamp>2012-06-17T12:45:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/list/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/pop back</title>
    <ns>0</ns>
    <id>7978</id>
    <redirect title="cpp/container/list/pop back" />
    <revision>
      <id>28935</id>
      <parentid>28934</parentid>
      <timestamp>2012-05-01T17:32:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/list/pop_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/pop front</title>
    <ns>0</ns>
    <id>7979</id>
    <redirect title="cpp/container/list/pop front" />
    <revision>
      <id>28937</id>
      <parentid>28936</parentid>
      <timestamp>2012-05-01T17:32:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/list/pop_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/push back</title>
    <ns>0</ns>
    <id>7980</id>
    <redirect title="cpp/container/list/push back" />
    <revision>
      <id>28939</id>
      <parentid>28938</parentid>
      <timestamp>2012-05-01T17:32:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/list/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/push front</title>
    <ns>0</ns>
    <id>7981</id>
    <redirect title="cpp/container/list/push front" />
    <revision>
      <id>28941</id>
      <parentid>28940</parentid>
      <timestamp>2012-05-01T17:32:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/list/push_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/rbegin</title>
    <ns>0</ns>
    <id>7982</id>
    <redirect title="cpp/container/list/rbegin" />
    <revision>
      <id>28943</id>
      <parentid>28942</parentid>
      <timestamp>2012-05-01T17:32:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/remove</title>
    <ns>0</ns>
    <id>7983</id>
    <redirect title="cpp/container/list/remove" />
    <revision>
      <id>28945</id>
      <parentid>28944</parentid>
      <timestamp>2012-05-01T17:32:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/remove if</title>
    <ns>0</ns>
    <id>7984</id>
    <redirect title="cpp/container/list/remove" />
    <revision>
      <id>45612</id>
      <parentid>28947</parentid>
      <timestamp>2013-01-08T04:49:58Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/container/list/remove]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/rend</title>
    <ns>0</ns>
    <id>7985</id>
    <redirect title="cpp/container/list/rend" />
    <revision>
      <id>28949</id>
      <parentid>28948</parentid>
      <timestamp>2012-05-01T17:32:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/resize</title>
    <ns>0</ns>
    <id>7986</id>
    <redirect title="cpp/container/list/resize" />
    <revision>
      <id>28951</id>
      <parentid>28950</parentid>
      <timestamp>2012-05-01T17:32:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/reverse</title>
    <ns>0</ns>
    <id>7987</id>
    <redirect title="cpp/container/list/reverse" />
    <revision>
      <id>28953</id>
      <parentid>28952</parentid>
      <timestamp>2012-05-01T17:32:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/list/reverse]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/size</title>
    <ns>0</ns>
    <id>7988</id>
    <redirect title="cpp/container/list/size" />
    <revision>
      <id>28955</id>
      <parentid>28954</parentid>
      <timestamp>2012-05-01T17:32:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/sort</title>
    <ns>0</ns>
    <id>7989</id>
    <redirect title="cpp/container/list/sort" />
    <revision>
      <id>28957</id>
      <parentid>28956</parentid>
      <timestamp>2012-05-01T17:32:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/splice</title>
    <ns>0</ns>
    <id>7990</id>
    <redirect title="cpp/container/list/splice" />
    <revision>
      <id>28959</id>
      <parentid>28958</parentid>
      <timestamp>2012-05-01T17:32:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/splice]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/start</title>
    <ns>0</ns>
    <id>7991</id>
    <redirect title="cpp/container/list" />
    <revision>
      <id>28961</id>
      <parentid>28960</parentid>
      <timestamp>2012-05-01T17:32:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/container/list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/swap</title>
    <ns>0</ns>
    <id>7993</id>
    <redirect title="cpp/container/list/swap" />
    <revision>
      <id>28965</id>
      <parentid>28964</parentid>
      <timestamp>2012-05-01T17:32:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/list/unique</title>
    <ns>0</ns>
    <id>7994</id>
    <redirect title="cpp/container/list/unique" />
    <revision>
      <id>28967</id>
      <parentid>28966</parentid>
      <timestamp>2012-05-01T17:32:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/unique]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/</title>
    <ns>0</ns>
    <id>8019</id>
    <redirect title="cpp/container/map" />
    <revision>
      <id>29017</id>
      <parentid>29016</parentid>
      <timestamp>2012-05-01T17:32:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/begin</title>
    <ns>0</ns>
    <id>7995</id>
    <redirect title="cpp/container/map/begin" />
    <revision>
      <id>28969</id>
      <parentid>28968</parentid>
      <timestamp>2012-05-01T17:32:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/clear</title>
    <ns>0</ns>
    <id>7996</id>
    <redirect title="cpp/container/map/clear" />
    <revision>
      <id>28971</id>
      <parentid>28970</parentid>
      <timestamp>2012-05-01T17:32:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/constructor</title>
    <ns>0</ns>
    <id>7997</id>
    <redirect title="cpp/container/map/map" />
    <revision>
      <id>28973</id>
      <parentid>28972</parentid>
      <timestamp>2012-05-01T17:32:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/map/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/count</title>
    <ns>0</ns>
    <id>7998</id>
    <redirect title="cpp/container/map/count" />
    <revision>
      <id>29720</id>
      <parentid>28975</parentid>
      <timestamp>2012-05-01T18:04:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/container/map/count]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/empty</title>
    <ns>0</ns>
    <id>7999</id>
    <redirect title="cpp/container/map/empty" />
    <revision>
      <id>28977</id>
      <parentid>28976</parentid>
      <timestamp>2012-05-01T17:32:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/end</title>
    <ns>0</ns>
    <id>8000</id>
    <redirect title="cpp/container/map/end" />
    <revision>
      <id>28979</id>
      <parentid>28978</parentid>
      <timestamp>2012-05-01T17:32:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/map/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/equal range</title>
    <ns>0</ns>
    <id>8001</id>
    <redirect title="cpp/container/map/equal range" />
    <revision>
      <id>28981</id>
      <parentid>28980</parentid>
      <timestamp>2012-05-01T17:32:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/map/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/erase</title>
    <ns>0</ns>
    <id>8002</id>
    <redirect title="cpp/container/map/erase" />
    <revision>
      <id>28983</id>
      <parentid>28982</parentid>
      <timestamp>2012-05-01T17:32:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/find</title>
    <ns>0</ns>
    <id>8003</id>
    <redirect title="cpp/container/map/find" />
    <revision>
      <id>28985</id>
      <parentid>28984</parentid>
      <timestamp>2012-05-01T17:32:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/get allocator</title>
    <ns>0</ns>
    <id>8004</id>
    <redirect title="cpp/container/map/get allocator" />
    <revision>
      <id>28987</id>
      <parentid>28986</parentid>
      <timestamp>2012-05-01T17:32:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/map/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/insert</title>
    <ns>0</ns>
    <id>8005</id>
    <redirect title="cpp/container/map/insert" />
    <revision>
      <id>28989</id>
      <parentid>28988</parentid>
      <timestamp>2012-05-01T17:32:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/map/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/key comp</title>
    <ns>0</ns>
    <id>8006</id>
    <redirect title="cpp/container/map/key comp" />
    <revision>
      <id>28991</id>
      <parentid>28990</parentid>
      <timestamp>2012-05-01T17:32:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/map/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/lower bound</title>
    <ns>0</ns>
    <id>8007</id>
    <redirect title="cpp/container/map/lower bound" />
    <revision>
      <id>28993</id>
      <parentid>28992</parentid>
      <timestamp>2012-05-01T17:32:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/map/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/map operators</title>
    <ns>0</ns>
    <id>8008</id>
    <redirect title="cpp/container/map/operator cmp" />
    <revision>
      <id>36228</id>
      <parentid>28995</parentid>
      <timestamp>2012-06-17T12:45:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/map/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/max size</title>
    <ns>0</ns>
    <id>8009</id>
    <redirect title="cpp/container/map/max size" />
    <revision>
      <id>28997</id>
      <parentid>28996</parentid>
      <timestamp>2012-05-01T17:32:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/map/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/operator at</title>
    <ns>0</ns>
    <id>8010</id>
    <redirect title="cpp/container/map/operator at" />
    <revision>
      <id>28999</id>
      <parentid>28998</parentid>
      <timestamp>2012-05-01T17:32:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/map/operator_at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/operator comp</title>
    <ns>0</ns>
    <id>8011</id>
    <redirect title="cpp/container/map/operator cmp" />
    <revision>
      <id>36229</id>
      <parentid>29001</parentid>
      <timestamp>2012-06-17T12:45:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/map/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/rbegin</title>
    <ns>0</ns>
    <id>8012</id>
    <redirect title="cpp/container/map/rbegin" />
    <revision>
      <id>29003</id>
      <parentid>29002</parentid>
      <timestamp>2012-05-01T17:32:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/map/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/rend</title>
    <ns>0</ns>
    <id>8013</id>
    <redirect title="cpp/container/map/rend" />
    <revision>
      <id>29005</id>
      <parentid>29004</parentid>
      <timestamp>2012-05-01T17:32:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/size</title>
    <ns>0</ns>
    <id>8014</id>
    <redirect title="cpp/container/map/size" />
    <revision>
      <id>29007</id>
      <parentid>29006</parentid>
      <timestamp>2012-05-01T17:32:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/start</title>
    <ns>0</ns>
    <id>8018</id>
    <redirect title="cpp/container/map" />
    <revision>
      <id>29015</id>
      <parentid>29014</parentid>
      <timestamp>2012-05-01T17:32:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/swap</title>
    <ns>0</ns>
    <id>8015</id>
    <redirect title="cpp/container/map/swap" />
    <revision>
      <id>29009</id>
      <parentid>29008</parentid>
      <timestamp>2012-05-01T17:32:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/upper bound</title>
    <ns>0</ns>
    <id>8016</id>
    <redirect title="cpp/container/map/upper bound" />
    <revision>
      <id>29011</id>
      <parentid>29010</parentid>
      <timestamp>2012-05-01T17:32:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/map/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/map/value comp</title>
    <ns>0</ns>
    <id>8017</id>
    <redirect title="cpp/container/map/value comp" />
    <revision>
      <id>29013</id>
      <parentid>29012</parentid>
      <timestamp>2012-05-01T17:32:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/map/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/</title>
    <ns>0</ns>
    <id>8040</id>
    <redirect title="cpp/container/multimap" />
    <revision>
      <id>29059</id>
      <parentid>29058</parentid>
      <timestamp>2012-05-01T17:32:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/begin</title>
    <ns>0</ns>
    <id>8020</id>
    <redirect title="cpp/container/multimap/begin" />
    <revision>
      <id>29019</id>
      <parentid>29018</parentid>
      <timestamp>2012-05-01T17:32:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/clear</title>
    <ns>0</ns>
    <id>8021</id>
    <redirect title="cpp/container/multimap/clear" />
    <revision>
      <id>29021</id>
      <parentid>29020</parentid>
      <timestamp>2012-05-01T17:32:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/constructor</title>
    <ns>0</ns>
    <id>8022</id>
    <redirect title="cpp/container/multimap/multimap" />
    <revision>
      <id>29023</id>
      <parentid>29022</parentid>
      <timestamp>2012-05-01T17:32:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multimap/multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/count</title>
    <ns>0</ns>
    <id>8023</id>
    <redirect title="cpp/container/multimap/count" />
    <revision>
      <id>29025</id>
      <parentid>29024</parentid>
      <timestamp>2012-05-01T17:32:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/empty</title>
    <ns>0</ns>
    <id>8024</id>
    <redirect title="cpp/container/multimap/empty" />
    <revision>
      <id>29027</id>
      <parentid>29026</parentid>
      <timestamp>2012-05-01T17:32:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/end</title>
    <ns>0</ns>
    <id>8025</id>
    <redirect title="cpp/container/multimap/end" />
    <revision>
      <id>29029</id>
      <parentid>29028</parentid>
      <timestamp>2012-05-01T17:32:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/multimap/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/equal range</title>
    <ns>0</ns>
    <id>8026</id>
    <redirect title="cpp/container/multimap/equal range" />
    <revision>
      <id>29031</id>
      <parentid>29030</parentid>
      <timestamp>2012-05-01T17:32:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multimap/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/erase</title>
    <ns>0</ns>
    <id>8027</id>
    <redirect title="cpp/container/multimap/erase" />
    <revision>
      <id>29033</id>
      <parentid>29032</parentid>
      <timestamp>2012-05-01T17:32:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/find</title>
    <ns>0</ns>
    <id>8028</id>
    <redirect title="cpp/container/multimap/find" />
    <revision>
      <id>29035</id>
      <parentid>29034</parentid>
      <timestamp>2012-05-01T17:32:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/get allocator</title>
    <ns>0</ns>
    <id>8029</id>
    <redirect title="cpp/container/multimap/get allocator" />
    <revision>
      <id>29037</id>
      <parentid>29036</parentid>
      <timestamp>2012-05-01T17:32:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/container/multimap/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/insert</title>
    <ns>0</ns>
    <id>8030</id>
    <redirect title="cpp/container/multimap/insert" />
    <revision>
      <id>29039</id>
      <parentid>29038</parentid>
      <timestamp>2012-05-01T17:32:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multimap/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/key comp</title>
    <ns>0</ns>
    <id>8031</id>
    <redirect title="cpp/container/multimap/key comp" />
    <revision>
      <id>29041</id>
      <parentid>29040</parentid>
      <timestamp>2012-05-01T17:32:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multimap/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/lower bound</title>
    <ns>0</ns>
    <id>8032</id>
    <redirect title="cpp/container/multimap/lower bound" />
    <revision>
      <id>29043</id>
      <parentid>29042</parentid>
      <timestamp>2012-05-01T17:32:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multimap/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/max size</title>
    <ns>0</ns>
    <id>8033</id>
    <redirect title="cpp/container/multimap/max size" />
    <revision>
      <id>29045</id>
      <parentid>29044</parentid>
      <timestamp>2012-05-01T17:32:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multimap/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/multimap operators</title>
    <ns>0</ns>
    <id>8034</id>
    <redirect title="cpp/container/multimap/operator cmp" />
    <revision>
      <id>36230</id>
      <parentid>29047</parentid>
      <timestamp>2012-06-17T12:46:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/container/multimap/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/operator comp</title>
    <ns>0</ns>
    <id>8035</id>
    <redirect title="cpp/container/multimap/operator cmp" />
    <revision>
      <id>36231</id>
      <parentid>29049</parentid>
      <timestamp>2012-06-17T12:46:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/container/multimap/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/rbegin</title>
    <ns>0</ns>
    <id>8036</id>
    <redirect title="cpp/container/multimap/rbegin" />
    <revision>
      <id>29051</id>
      <parentid>29050</parentid>
      <timestamp>2012-05-01T17:32:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multimap/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/rend</title>
    <ns>0</ns>
    <id>8037</id>
    <redirect title="cpp/container/multimap/rend" />
    <revision>
      <id>29053</id>
      <parentid>29052</parentid>
      <timestamp>2012-05-01T17:32:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/size</title>
    <ns>0</ns>
    <id>8038</id>
    <redirect title="cpp/container/multimap/size" />
    <revision>
      <id>29055</id>
      <parentid>29054</parentid>
      <timestamp>2012-05-01T17:32:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/start</title>
    <ns>0</ns>
    <id>8039</id>
    <redirect title="cpp/container/multimap" />
    <revision>
      <id>29057</id>
      <parentid>29056</parentid>
      <timestamp>2012-05-01T17:32:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/swap</title>
    <ns>0</ns>
    <id>8041</id>
    <redirect title="cpp/container/multimap/swap" />
    <revision>
      <id>29061</id>
      <parentid>29060</parentid>
      <timestamp>2012-05-01T17:32:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/upper bound</title>
    <ns>0</ns>
    <id>8042</id>
    <redirect title="cpp/container/multimap/upper bound" />
    <revision>
      <id>29063</id>
      <parentid>29062</parentid>
      <timestamp>2012-05-01T17:32:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multimap/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multimap/value comp</title>
    <ns>0</ns>
    <id>8043</id>
    <redirect title="cpp/container/multimap/value comp" />
    <revision>
      <id>29065</id>
      <parentid>29064</parentid>
      <timestamp>2012-05-01T17:32:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/multimap/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/</title>
    <ns>0</ns>
    <id>8064</id>
    <redirect title="cpp/container/multiset" />
    <revision>
      <id>29107</id>
      <parentid>29106</parentid>
      <timestamp>2012-05-01T17:32:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/begin</title>
    <ns>0</ns>
    <id>8044</id>
    <redirect title="cpp/container/multiset/begin" />
    <revision>
      <id>29067</id>
      <parentid>29066</parentid>
      <timestamp>2012-05-01T17:32:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/clear</title>
    <ns>0</ns>
    <id>8045</id>
    <redirect title="cpp/container/multiset/clear" />
    <revision>
      <id>29069</id>
      <parentid>29068</parentid>
      <timestamp>2012-05-01T17:32:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/constructor</title>
    <ns>0</ns>
    <id>8046</id>
    <redirect title="cpp/container/multiset/multiset" />
    <revision>
      <id>29071</id>
      <parentid>29070</parentid>
      <timestamp>2012-05-01T17:32:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multiset/multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/count</title>
    <ns>0</ns>
    <id>8047</id>
    <redirect title="cpp/container/multiset/count" />
    <revision>
      <id>29073</id>
      <parentid>29072</parentid>
      <timestamp>2012-05-01T17:32:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/empty</title>
    <ns>0</ns>
    <id>8048</id>
    <redirect title="cpp/container/multiset/empty" />
    <revision>
      <id>29075</id>
      <parentid>29074</parentid>
      <timestamp>2012-05-01T17:32:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/end</title>
    <ns>0</ns>
    <id>8049</id>
    <redirect title="cpp/container/multiset/end" />
    <revision>
      <id>29077</id>
      <parentid>29076</parentid>
      <timestamp>2012-05-01T17:32:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/multiset/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/equal range</title>
    <ns>0</ns>
    <id>8050</id>
    <redirect title="cpp/container/multiset/equal range" />
    <revision>
      <id>29079</id>
      <parentid>29078</parentid>
      <timestamp>2012-05-01T17:32:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multiset/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/erase</title>
    <ns>0</ns>
    <id>8051</id>
    <redirect title="cpp/container/multiset/erase" />
    <revision>
      <id>29081</id>
      <parentid>29080</parentid>
      <timestamp>2012-05-01T17:32:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/find</title>
    <ns>0</ns>
    <id>8052</id>
    <redirect title="cpp/container/multiset/find" />
    <revision>
      <id>29083</id>
      <parentid>29082</parentid>
      <timestamp>2012-05-01T17:32:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/get allocator</title>
    <ns>0</ns>
    <id>8053</id>
    <redirect title="cpp/container/multiset/get allocator" />
    <revision>
      <id>29085</id>
      <parentid>29084</parentid>
      <timestamp>2012-05-01T17:32:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/container/multiset/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/insert</title>
    <ns>0</ns>
    <id>8054</id>
    <redirect title="cpp/container/multiset/insert" />
    <revision>
      <id>29087</id>
      <parentid>29086</parentid>
      <timestamp>2012-05-01T17:32:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multiset/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/key comp</title>
    <ns>0</ns>
    <id>8055</id>
    <redirect title="cpp/container/multiset/key comp" />
    <revision>
      <id>29089</id>
      <parentid>29088</parentid>
      <timestamp>2012-05-01T17:32:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multiset/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/lower bound</title>
    <ns>0</ns>
    <id>8056</id>
    <redirect title="cpp/container/multiset/lower bound" />
    <revision>
      <id>29091</id>
      <parentid>29090</parentid>
      <timestamp>2012-05-01T17:32:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multiset/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/max size</title>
    <ns>0</ns>
    <id>8057</id>
    <redirect title="cpp/container/multiset/max size" />
    <revision>
      <id>29093</id>
      <parentid>29092</parentid>
      <timestamp>2012-05-01T17:32:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multiset/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/multiset operators</title>
    <ns>0</ns>
    <id>8058</id>
    <redirect title="cpp/container/multiset/operator cmp" />
    <revision>
      <id>36232</id>
      <parentid>29095</parentid>
      <timestamp>2012-06-17T12:46:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/container/multiset/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/operator comp</title>
    <ns>0</ns>
    <id>8059</id>
    <redirect title="cpp/container/multiset/operator cmp" />
    <revision>
      <id>36233</id>
      <parentid>29097</parentid>
      <timestamp>2012-06-17T12:46:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/container/multiset/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/rbegin</title>
    <ns>0</ns>
    <id>8060</id>
    <redirect title="cpp/container/multiset/rbegin" />
    <revision>
      <id>29099</id>
      <parentid>29098</parentid>
      <timestamp>2012-05-01T17:32:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multiset/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/rend</title>
    <ns>0</ns>
    <id>8061</id>
    <redirect title="cpp/container/multiset/rend" />
    <revision>
      <id>29101</id>
      <parentid>29100</parentid>
      <timestamp>2012-05-01T17:32:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/size</title>
    <ns>0</ns>
    <id>8062</id>
    <redirect title="cpp/container/multiset/size" />
    <revision>
      <id>29103</id>
      <parentid>29102</parentid>
      <timestamp>2012-05-01T17:32:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/start</title>
    <ns>0</ns>
    <id>8063</id>
    <redirect title="cpp/container/multiset" />
    <revision>
      <id>29105</id>
      <parentid>29104</parentid>
      <timestamp>2012-05-01T17:32:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/swap</title>
    <ns>0</ns>
    <id>8065</id>
    <redirect title="cpp/container/multiset/swap" />
    <revision>
      <id>29109</id>
      <parentid>29108</parentid>
      <timestamp>2012-05-01T17:32:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/upper bound</title>
    <ns>0</ns>
    <id>8066</id>
    <redirect title="cpp/container/multiset/upper bound" />
    <revision>
      <id>29111</id>
      <parentid>29110</parentid>
      <timestamp>2012-05-01T17:32:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multiset/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/multiset/value comp</title>
    <ns>0</ns>
    <id>8067</id>
    <redirect title="cpp/container/multiset/value comp" />
    <revision>
      <id>29113</id>
      <parentid>29112</parentid>
      <timestamp>2012-05-01T17:32:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/multiset/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/</title>
    <ns>0</ns>
    <id>8074</id>
    <redirect title="cpp/container/priority queue" />
    <revision>
      <id>29127</id>
      <parentid>29126</parentid>
      <timestamp>2012-05-01T17:32:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/priority_queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/constructor</title>
    <ns>0</ns>
    <id>8068</id>
    <redirect title="cpp/container/priority queue/priority queue" />
    <revision>
      <id>29115</id>
      <parentid>29114</parentid>
      <timestamp>2012-05-01T17:32:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="57">#redirect [[cpp/container/priority_queue/priority_queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/empty</title>
    <ns>0</ns>
    <id>8069</id>
    <redirect title="cpp/container/priority queue/empty" />
    <revision>
      <id>29117</id>
      <parentid>29116</parentid>
      <timestamp>2012-05-01T17:32:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/priority_queue/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/pop</title>
    <ns>0</ns>
    <id>8070</id>
    <redirect title="cpp/container/priority queue/pop" />
    <revision>
      <id>29119</id>
      <parentid>29118</parentid>
      <timestamp>2012-05-01T17:32:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/priority_queue/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/push</title>
    <ns>0</ns>
    <id>8071</id>
    <redirect title="cpp/container/priority queue/push" />
    <revision>
      <id>29121</id>
      <parentid>29120</parentid>
      <timestamp>2012-05-01T17:32:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/priority_queue/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/size</title>
    <ns>0</ns>
    <id>8072</id>
    <redirect title="cpp/container/priority queue/size" />
    <revision>
      <id>29123</id>
      <parentid>29122</parentid>
      <timestamp>2012-05-01T17:32:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/priority_queue/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/start</title>
    <ns>0</ns>
    <id>8073</id>
    <redirect title="cpp/container/priority queue" />
    <revision>
      <id>29125</id>
      <parentid>29124</parentid>
      <timestamp>2012-05-01T17:32:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/priority_queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/swap</title>
    <ns>0</ns>
    <id>8075</id>
    <redirect title="cpp/container/priority queue/swap" />
    <revision>
      <id>29129</id>
      <parentid>29128</parentid>
      <timestamp>2012-05-01T17:32:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/priority_queue/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/priority queue/top</title>
    <ns>0</ns>
    <id>8076</id>
    <redirect title="cpp/container/priority queue/top" />
    <revision>
      <id>29131</id>
      <parentid>29130</parentid>
      <timestamp>2012-05-01T17:32:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/priority_queue/top]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/</title>
    <ns>0</ns>
    <id>8085</id>
    <redirect title="cpp/container/queue" />
    <revision>
      <id>29149</id>
      <parentid>29148</parentid>
      <timestamp>2012-05-01T17:32:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/back</title>
    <ns>0</ns>
    <id>8077</id>
    <redirect title="cpp/container/queue/back" />
    <revision>
      <id>29133</id>
      <parentid>29132</parentid>
      <timestamp>2012-05-01T17:32:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/queue/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/constructor</title>
    <ns>0</ns>
    <id>8078</id>
    <redirect title="cpp/container/queue/queue" />
    <revision>
      <id>29135</id>
      <parentid>29134</parentid>
      <timestamp>2012-05-01T17:32:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/queue/queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/empty</title>
    <ns>0</ns>
    <id>8079</id>
    <redirect title="cpp/container/queue/empty" />
    <revision>
      <id>29137</id>
      <parentid>29136</parentid>
      <timestamp>2012-05-01T17:32:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/queue/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/front</title>
    <ns>0</ns>
    <id>8080</id>
    <redirect title="cpp/container/queue/front" />
    <revision>
      <id>29139</id>
      <parentid>29138</parentid>
      <timestamp>2012-05-01T17:32:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/queue/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/pop</title>
    <ns>0</ns>
    <id>8081</id>
    <redirect title="cpp/container/queue/pop" />
    <revision>
      <id>29141</id>
      <parentid>29140</parentid>
      <timestamp>2012-05-01T17:32:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/queue/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/push</title>
    <ns>0</ns>
    <id>8082</id>
    <redirect title="cpp/container/queue/push" />
    <revision>
      <id>29143</id>
      <parentid>29142</parentid>
      <timestamp>2012-05-01T17:32:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/queue/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/size</title>
    <ns>0</ns>
    <id>8083</id>
    <redirect title="cpp/container/queue/size" />
    <revision>
      <id>29145</id>
      <parentid>29144</parentid>
      <timestamp>2012-05-01T17:32:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/queue/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/start</title>
    <ns>0</ns>
    <id>8084</id>
    <redirect title="cpp/container/queue" />
    <revision>
      <id>29147</id>
      <parentid>29146</parentid>
      <timestamp>2012-05-01T17:32:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/queue/swap</title>
    <ns>0</ns>
    <id>8086</id>
    <redirect title="cpp/container/queue/swap" />
    <revision>
      <id>29151</id>
      <parentid>29150</parentid>
      <timestamp>2012-05-01T17:32:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/queue/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/</title>
    <ns>0</ns>
    <id>8107</id>
    <redirect title="cpp/container/set" />
    <revision>
      <id>29193</id>
      <parentid>29192</parentid>
      <timestamp>2012-05-01T17:32:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/begin</title>
    <ns>0</ns>
    <id>8087</id>
    <redirect title="cpp/container/set/begin" />
    <revision>
      <id>29153</id>
      <parentid>29152</parentid>
      <timestamp>2012-05-01T17:32:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/clear</title>
    <ns>0</ns>
    <id>8088</id>
    <redirect title="cpp/container/set/clear" />
    <revision>
      <id>29155</id>
      <parentid>29154</parentid>
      <timestamp>2012-05-01T17:32:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/constructor</title>
    <ns>0</ns>
    <id>8089</id>
    <redirect title="cpp/container/set/set" />
    <revision>
      <id>29157</id>
      <parentid>29156</parentid>
      <timestamp>2012-05-01T17:32:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/set/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/count</title>
    <ns>0</ns>
    <id>8090</id>
    <redirect title="cpp/container/set/count" />
    <revision>
      <id>29159</id>
      <parentid>29158</parentid>
      <timestamp>2012-05-01T17:32:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/empty</title>
    <ns>0</ns>
    <id>8091</id>
    <redirect title="cpp/container/set/empty" />
    <revision>
      <id>29161</id>
      <parentid>29160</parentid>
      <timestamp>2012-05-01T17:32:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/end</title>
    <ns>0</ns>
    <id>8092</id>
    <redirect title="cpp/container/set/end" />
    <revision>
      <id>29163</id>
      <parentid>29162</parentid>
      <timestamp>2012-05-01T17:32:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/set/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/equal range</title>
    <ns>0</ns>
    <id>8093</id>
    <redirect title="cpp/container/set/equal range" />
    <revision>
      <id>29165</id>
      <parentid>29164</parentid>
      <timestamp>2012-05-01T17:32:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/set/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/erase</title>
    <ns>0</ns>
    <id>8094</id>
    <redirect title="cpp/container/set/erase" />
    <revision>
      <id>29167</id>
      <parentid>29166</parentid>
      <timestamp>2012-05-01T17:32:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/find</title>
    <ns>0</ns>
    <id>8095</id>
    <redirect title="cpp/container/set/find" />
    <revision>
      <id>29169</id>
      <parentid>29168</parentid>
      <timestamp>2012-05-01T17:32:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/get allocator</title>
    <ns>0</ns>
    <id>8096</id>
    <redirect title="cpp/container/set/get allocator" />
    <revision>
      <id>29171</id>
      <parentid>29170</parentid>
      <timestamp>2012-05-01T17:32:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/set/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/insert</title>
    <ns>0</ns>
    <id>8097</id>
    <redirect title="cpp/container/set/insert" />
    <revision>
      <id>29173</id>
      <parentid>29172</parentid>
      <timestamp>2012-05-01T17:32:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/set/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/key comp</title>
    <ns>0</ns>
    <id>8098</id>
    <redirect title="cpp/container/set/key comp" />
    <revision>
      <id>29175</id>
      <parentid>29174</parentid>
      <timestamp>2012-05-01T17:32:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/set/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/lower bound</title>
    <ns>0</ns>
    <id>8099</id>
    <redirect title="cpp/container/set/lower bound" />
    <revision>
      <id>29177</id>
      <parentid>29176</parentid>
      <timestamp>2012-05-01T17:32:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/set/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/max size</title>
    <ns>0</ns>
    <id>8100</id>
    <redirect title="cpp/container/set/max size" />
    <revision>
      <id>29179</id>
      <parentid>29178</parentid>
      <timestamp>2012-05-01T17:32:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/set/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/operator comp</title>
    <ns>0</ns>
    <id>8101</id>
    <redirect title="cpp/container/set/operator cmp" />
    <revision>
      <id>36234</id>
      <parentid>29181</parentid>
      <timestamp>2012-06-17T12:46:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/set/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/rbegin</title>
    <ns>0</ns>
    <id>8102</id>
    <redirect title="cpp/container/set/rbegin" />
    <revision>
      <id>29183</id>
      <parentid>29182</parentid>
      <timestamp>2012-05-01T17:32:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/set/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/rend</title>
    <ns>0</ns>
    <id>8103</id>
    <redirect title="cpp/container/set/rend" />
    <revision>
      <id>29185</id>
      <parentid>29184</parentid>
      <timestamp>2012-05-01T17:32:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/set operators</title>
    <ns>0</ns>
    <id>8104</id>
    <redirect title="cpp/container/set/operator cmp" />
    <revision>
      <id>36235</id>
      <parentid>29187</parentid>
      <timestamp>2012-06-17T12:46:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/set/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/size</title>
    <ns>0</ns>
    <id>8105</id>
    <redirect title="cpp/container/set/size" />
    <revision>
      <id>29189</id>
      <parentid>29188</parentid>
      <timestamp>2012-05-01T17:32:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/start</title>
    <ns>0</ns>
    <id>8106</id>
    <redirect title="cpp/container/set" />
    <revision>
      <id>29191</id>
      <parentid>29190</parentid>
      <timestamp>2012-05-01T17:32:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/swap</title>
    <ns>0</ns>
    <id>8108</id>
    <redirect title="cpp/container/set/swap" />
    <revision>
      <id>29195</id>
      <parentid>29194</parentid>
      <timestamp>2012-05-01T17:32:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/upper bound</title>
    <ns>0</ns>
    <id>8109</id>
    <redirect title="cpp/container/set/upper bound" />
    <revision>
      <id>29197</id>
      <parentid>29196</parentid>
      <timestamp>2012-05-01T17:32:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/set/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/set/value comp</title>
    <ns>0</ns>
    <id>8110</id>
    <redirect title="cpp/container/set/value comp" />
    <revision>
      <id>29199</id>
      <parentid>29198</parentid>
      <timestamp>2012-05-01T17:32:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/set/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/</title>
    <ns>0</ns>
    <id>8117</id>
    <redirect title="cpp/container/stack" />
    <revision>
      <id>29213</id>
      <parentid>29212</parentid>
      <timestamp>2012-05-01T17:32:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/constructor</title>
    <ns>0</ns>
    <id>8111</id>
    <redirect title="cpp/container/stack/stack" />
    <revision>
      <id>29201</id>
      <parentid>29200</parentid>
      <timestamp>2012-05-01T17:32:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/stack/stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/empty</title>
    <ns>0</ns>
    <id>8112</id>
    <redirect title="cpp/container/stack/empty" />
    <revision>
      <id>29203</id>
      <parentid>29202</parentid>
      <timestamp>2012-05-01T17:32:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/stack/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/pop</title>
    <ns>0</ns>
    <id>8113</id>
    <redirect title="cpp/container/stack/pop" />
    <revision>
      <id>29205</id>
      <parentid>29204</parentid>
      <timestamp>2012-05-01T17:32:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/stack/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/push</title>
    <ns>0</ns>
    <id>8114</id>
    <redirect title="cpp/container/stack/push" />
    <revision>
      <id>29207</id>
      <parentid>29206</parentid>
      <timestamp>2012-05-01T17:32:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/stack/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/size</title>
    <ns>0</ns>
    <id>8115</id>
    <redirect title="cpp/container/stack/size" />
    <revision>
      <id>29209</id>
      <parentid>29208</parentid>
      <timestamp>2012-05-01T17:32:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/stack/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/start</title>
    <ns>0</ns>
    <id>8116</id>
    <redirect title="cpp/container/stack" />
    <revision>
      <id>29211</id>
      <parentid>29210</parentid>
      <timestamp>2012-05-01T17:32:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/swap</title>
    <ns>0</ns>
    <id>8118</id>
    <redirect title="cpp/container/stack/swap" />
    <revision>
      <id>29215</id>
      <parentid>29214</parentid>
      <timestamp>2012-05-01T17:32:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/stack/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/stack/top</title>
    <ns>0</ns>
    <id>8119</id>
    <redirect title="cpp/container/stack/top" />
    <revision>
      <id>29217</id>
      <parentid>29216</parentid>
      <timestamp>2012-05-01T17:32:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/stack/top]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/start</title>
    <ns>0</ns>
    <id>8198</id>
    <redirect title="cpp/container" />
    <revision>
      <id>29375</id>
      <parentid>29374</parentid>
      <timestamp>2012-05-01T17:33:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/container]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/</title>
    <ns>0</ns>
    <id>8131</id>
    <redirect title="cpp/container/unordered map" />
    <revision>
      <id>29241</id>
      <parentid>29240</parentid>
      <timestamp>2012-05-01T17:33:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/unordered_map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/begin</title>
    <ns>0</ns>
    <id>8120</id>
    <redirect title="cpp/container/unordered map/begin" />
    <revision>
      <id>29219</id>
      <parentid>29218</parentid>
      <timestamp>2012-05-01T17:32:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/unordered_map/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/clear</title>
    <ns>0</ns>
    <id>8121</id>
    <redirect title="cpp/container/unordered map/clear" />
    <revision>
      <id>29221</id>
      <parentid>29220</parentid>
      <timestamp>2012-05-01T17:32:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/unordered_map/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/constructor</title>
    <ns>0</ns>
    <id>8122</id>
    <redirect title="cpp/container/unordered map/unordered map" />
    <revision>
      <id>29223</id>
      <parentid>29222</parentid>
      <timestamp>2012-05-01T17:32:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/container/unordered_map/unordered_map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/empty</title>
    <ns>0</ns>
    <id>8123</id>
    <redirect title="cpp/container/unordered map/empty" />
    <revision>
      <id>29225</id>
      <parentid>29224</parentid>
      <timestamp>2012-05-01T17:32:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/unordered_map/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/end</title>
    <ns>0</ns>
    <id>8124</id>
    <redirect title="cpp/container/unordered map/end" />
    <revision>
      <id>29227</id>
      <parentid>29226</parentid>
      <timestamp>2012-05-01T17:32:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/unordered_map/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/get allocator</title>
    <ns>0</ns>
    <id>8125</id>
    <redirect title="cpp/container/unordered map/get allocator" />
    <revision>
      <id>29229</id>
      <parentid>29228</parentid>
      <timestamp>2012-05-01T17:33:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/container/unordered_map/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/max size</title>
    <ns>0</ns>
    <id>8126</id>
    <redirect title="cpp/container/unordered map/max size" />
    <revision>
      <id>29231</id>
      <parentid>29230</parentid>
      <timestamp>2012-05-01T17:33:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/container/unordered_map/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/operator comp</title>
    <ns>0</ns>
    <id>8127</id>
    <redirect title="cpp/container/unordered map/operator cmp" />
    <revision>
      <id>36236</id>
      <parentid>29233</parentid>
      <timestamp>2012-06-17T12:46:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="54">#redirect [[cpp/container/unordered_map/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/size</title>
    <ns>0</ns>
    <id>8128</id>
    <redirect title="cpp/container/unordered map/size" />
    <revision>
      <id>29235</id>
      <parentid>29234</parentid>
      <timestamp>2012-05-01T17:33:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_map/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/start</title>
    <ns>0</ns>
    <id>8130</id>
    <redirect title="cpp/container/unordered map" />
    <revision>
      <id>29239</id>
      <parentid>29238</parentid>
      <timestamp>2012-05-01T17:33:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/unordered_map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered map/swap</title>
    <ns>0</ns>
    <id>8129</id>
    <redirect title="cpp/container/unordered map/swap" />
    <revision>
      <id>29237</id>
      <parentid>29236</parentid>
      <timestamp>2012-05-01T17:33:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_map/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/</title>
    <ns>0</ns>
    <id>8142</id>
    <redirect title="cpp/container/unordered multimap" />
    <revision>
      <id>29263</id>
      <parentid>29262</parentid>
      <timestamp>2012-05-01T17:33:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/begin</title>
    <ns>0</ns>
    <id>8132</id>
    <redirect title="cpp/container/unordered multimap/begin" />
    <revision>
      <id>29243</id>
      <parentid>29242</parentid>
      <timestamp>2012-05-01T17:33:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/container/unordered_multimap/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/clear</title>
    <ns>0</ns>
    <id>8133</id>
    <redirect title="cpp/container/unordered multimap/clear" />
    <revision>
      <id>29245</id>
      <parentid>29244</parentid>
      <timestamp>2012-05-01T17:33:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/container/unordered_multimap/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/constructor</title>
    <ns>0</ns>
    <id>8134</id>
    <redirect title="cpp/container/unordered multimap/unordered multimap" />
    <revision>
      <id>29247</id>
      <parentid>29246</parentid>
      <timestamp>2012-05-01T17:33:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="65">#redirect [[cpp/container/unordered_multimap/unordered_multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/empty</title>
    <ns>0</ns>
    <id>8135</id>
    <redirect title="cpp/container/unordered multimap/empty" />
    <revision>
      <id>29249</id>
      <parentid>29248</parentid>
      <timestamp>2012-05-01T17:33:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/container/unordered_multimap/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/end</title>
    <ns>0</ns>
    <id>8136</id>
    <redirect title="cpp/container/unordered multimap/end" />
    <revision>
      <id>29251</id>
      <parentid>29250</parentid>
      <timestamp>2012-05-01T17:33:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/container/unordered_multimap/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/get allocator</title>
    <ns>0</ns>
    <id>8137</id>
    <redirect title="cpp/container/unordered multimap/get allocator" />
    <revision>
      <id>29253</id>
      <parentid>29252</parentid>
      <timestamp>2012-05-01T17:33:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="60">#redirect [[cpp/container/unordered_multimap/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/max size</title>
    <ns>0</ns>
    <id>8138</id>
    <redirect title="cpp/container/unordered multimap/max size" />
    <revision>
      <id>29255</id>
      <parentid>29254</parentid>
      <timestamp>2012-05-01T17:33:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/container/unordered_multimap/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/operator comp</title>
    <ns>0</ns>
    <id>8139</id>
    <redirect title="cpp/container/unordered multimap/operator cmp" />
    <revision>
      <id>36237</id>
      <parentid>29257</parentid>
      <timestamp>2012-06-17T12:47:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="59">#redirect [[cpp/container/unordered_multimap/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/size</title>
    <ns>0</ns>
    <id>8140</id>
    <redirect title="cpp/container/unordered multimap/size" />
    <revision>
      <id>29722</id>
      <parentid>29259</parentid>
      <timestamp>2012-05-01T18:04:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/container/unordered multimap/size]]</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/container/unordered_multimap/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/start</title>
    <ns>0</ns>
    <id>8141</id>
    <redirect title="cpp/container/unordered multimap" />
    <revision>
      <id>29261</id>
      <parentid>29260</parentid>
      <timestamp>2012-05-01T17:33:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multimap/swap</title>
    <ns>0</ns>
    <id>8143</id>
    <redirect title="cpp/container/unordered multimap/swap" />
    <revision>
      <id>29265</id>
      <parentid>29264</parentid>
      <timestamp>2012-05-01T17:33:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/container/unordered_multimap/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/</title>
    <ns>0</ns>
    <id>8154</id>
    <redirect title="cpp/container/unordered multiset" />
    <revision>
      <id>29287</id>
      <parentid>29286</parentid>
      <timestamp>2012-05-01T17:33:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/begin</title>
    <ns>0</ns>
    <id>8144</id>
    <redirect title="cpp/container/unordered multiset/begin" />
    <revision>
      <id>29267</id>
      <parentid>29266</parentid>
      <timestamp>2012-05-01T17:33:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/container/unordered_multiset/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/clear</title>
    <ns>0</ns>
    <id>8145</id>
    <redirect title="cpp/container/unordered multiset/clear" />
    <revision>
      <id>29269</id>
      <parentid>29268</parentid>
      <timestamp>2012-05-01T17:33:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/container/unordered_multiset/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/constructor</title>
    <ns>0</ns>
    <id>8146</id>
    <redirect title="cpp/container/unordered multiset/unordered multiset" />
    <revision>
      <id>29271</id>
      <parentid>29270</parentid>
      <timestamp>2012-05-01T17:33:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="65">#redirect [[cpp/container/unordered_multiset/unordered_multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/empty</title>
    <ns>0</ns>
    <id>8147</id>
    <redirect title="cpp/container/unordered multiset/empty" />
    <revision>
      <id>29273</id>
      <parentid>29272</parentid>
      <timestamp>2012-05-01T17:33:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/container/unordered_multiset/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/end</title>
    <ns>0</ns>
    <id>8148</id>
    <redirect title="cpp/container/unordered multiset/end" />
    <revision>
      <id>29275</id>
      <parentid>29274</parentid>
      <timestamp>2012-05-01T17:33:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/container/unordered_multiset/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/get allocator</title>
    <ns>0</ns>
    <id>8149</id>
    <redirect title="cpp/container/unordered multiset/get allocator" />
    <revision>
      <id>29277</id>
      <parentid>29276</parentid>
      <timestamp>2012-05-01T17:33:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="60">#redirect [[cpp/container/unordered_multiset/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/max size</title>
    <ns>0</ns>
    <id>8150</id>
    <redirect title="cpp/container/unordered multiset/max size" />
    <revision>
      <id>29723</id>
      <parentid>29279</parentid>
      <timestamp>2012-05-01T18:04:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/container/unordered multiset/max size]]</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/container/unordered_multiset/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/operator comp</title>
    <ns>0</ns>
    <id>8151</id>
    <redirect title="cpp/container/unordered multiset/operator cmp" />
    <revision>
      <id>36238</id>
      <parentid>29281</parentid>
      <timestamp>2012-06-17T12:48:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="59">#redirect [[cpp/container/unordered_multiset/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/size</title>
    <ns>0</ns>
    <id>8152</id>
    <redirect title="cpp/container/unordered multiset/size" />
    <revision>
      <id>29283</id>
      <parentid>29282</parentid>
      <timestamp>2012-05-01T17:33:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/container/unordered_multiset/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/start</title>
    <ns>0</ns>
    <id>8153</id>
    <redirect title="cpp/container/unordered multiset" />
    <revision>
      <id>29285</id>
      <parentid>29284</parentid>
      <timestamp>2012-05-01T17:33:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered multiset/swap</title>
    <ns>0</ns>
    <id>8155</id>
    <redirect title="cpp/container/unordered multiset/swap" />
    <revision>
      <id>29289</id>
      <parentid>29288</parentid>
      <timestamp>2012-05-01T17:33:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/container/unordered_multiset/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/</title>
    <ns>0</ns>
    <id>8167</id>
    <redirect title="cpp/container/unordered set" />
    <revision>
      <id>29313</id>
      <parentid>29312</parentid>
      <timestamp>2012-05-01T17:33:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/unordered_set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/begin</title>
    <ns>0</ns>
    <id>8156</id>
    <redirect title="cpp/container/unordered set/begin" />
    <revision>
      <id>29291</id>
      <parentid>29290</parentid>
      <timestamp>2012-05-01T17:33:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/unordered_set/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/clear</title>
    <ns>0</ns>
    <id>8157</id>
    <redirect title="cpp/container/unordered set/clear" />
    <revision>
      <id>29293</id>
      <parentid>29292</parentid>
      <timestamp>2012-05-01T17:33:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/unordered_set/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/constructor</title>
    <ns>0</ns>
    <id>8158</id>
    <redirect title="cpp/container/unordered set/unordered set" />
    <revision>
      <id>29295</id>
      <parentid>29294</parentid>
      <timestamp>2012-05-01T17:33:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/container/unordered_set/unordered_set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/empty</title>
    <ns>0</ns>
    <id>8159</id>
    <redirect title="cpp/container/unordered set/empty" />
    <revision>
      <id>29297</id>
      <parentid>29296</parentid>
      <timestamp>2012-05-01T17:33:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/unordered_set/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/end</title>
    <ns>0</ns>
    <id>8160</id>
    <redirect title="cpp/container/unordered set/end" />
    <revision>
      <id>29299</id>
      <parentid>29298</parentid>
      <timestamp>2012-05-01T17:33:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/unordered_set/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/get allocator</title>
    <ns>0</ns>
    <id>8161</id>
    <redirect title="cpp/container/unordered set/get allocator" />
    <revision>
      <id>29301</id>
      <parentid>29300</parentid>
      <timestamp>2012-05-01T17:33:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/container/unordered_set/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/max size</title>
    <ns>0</ns>
    <id>8162</id>
    <redirect title="cpp/container/unordered set/max size" />
    <revision>
      <id>29303</id>
      <parentid>29302</parentid>
      <timestamp>2012-05-01T17:33:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/container/unordered_set/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/operator comp</title>
    <ns>0</ns>
    <id>8163</id>
    <redirect title="cpp/container/unordered set/operator cmp" />
    <revision>
      <id>36239</id>
      <parentid>29305</parentid>
      <timestamp>2012-06-17T12:48:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="54">#redirect [[cpp/container/unordered_set/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/size</title>
    <ns>0</ns>
    <id>8164</id>
    <redirect title="cpp/container/unordered set/size" />
    <revision>
      <id>29307</id>
      <parentid>29306</parentid>
      <timestamp>2012-05-01T17:33:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_set/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/start</title>
    <ns>0</ns>
    <id>8166</id>
    <redirect title="cpp/container/unordered set" />
    <revision>
      <id>29311</id>
      <parentid>29310</parentid>
      <timestamp>2012-05-01T17:33:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/unordered_set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/unordered set/swap</title>
    <ns>0</ns>
    <id>8165</id>
    <redirect title="cpp/container/unordered set/swap" />
    <revision>
      <id>29309</id>
      <parentid>29308</parentid>
      <timestamp>2012-05-01T17:33:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/unordered_set/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/</title>
    <ns>0</ns>
    <id>8197</id>
    <redirect title="cpp/container/vector" />
    <revision>
      <id>29373</id>
      <parentid>29372</parentid>
      <timestamp>2012-05-01T17:33:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/container/vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/assign</title>
    <ns>0</ns>
    <id>8168</id>
    <redirect title="cpp/container/vector/assign" />
    <revision>
      <id>29315</id>
      <parentid>29314</parentid>
      <timestamp>2012-05-01T17:33:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/at</title>
    <ns>0</ns>
    <id>8169</id>
    <redirect title="cpp/container/vector/at" />
    <revision>
      <id>29317</id>
      <parentid>29316</parentid>
      <timestamp>2012-05-01T17:33:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/vector/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/back</title>
    <ns>0</ns>
    <id>8170</id>
    <redirect title="cpp/container/vector/back" />
    <revision>
      <id>29319</id>
      <parentid>29318</parentid>
      <timestamp>2012-05-01T17:33:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/begin</title>
    <ns>0</ns>
    <id>8171</id>
    <redirect title="cpp/container/vector/begin" />
    <revision>
      <id>29321</id>
      <parentid>29320</parentid>
      <timestamp>2012-05-01T17:33:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/capacity</title>
    <ns>0</ns>
    <id>8172</id>
    <redirect title="cpp/container/vector/capacity" />
    <revision>
      <id>29323</id>
      <parentid>29322</parentid>
      <timestamp>2012-05-01T17:33:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/vector/capacity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/clear</title>
    <ns>0</ns>
    <id>8173</id>
    <redirect title="cpp/container/vector/clear" />
    <revision>
      <id>29325</id>
      <parentid>29324</parentid>
      <timestamp>2012-05-01T17:33:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/constructor</title>
    <ns>0</ns>
    <id>8174</id>
    <redirect title="cpp/container/vector/vector" />
    <revision>
      <id>29327</id>
      <parentid>29326</parentid>
      <timestamp>2012-05-01T17:33:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/data</title>
    <ns>0</ns>
    <id>8175</id>
    <redirect title="cpp/container/vector/data" />
    <revision>
      <id>29329</id>
      <parentid>29328</parentid>
      <timestamp>2012-05-01T17:33:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/data]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/empty</title>
    <ns>0</ns>
    <id>8176</id>
    <redirect title="cpp/container/vector/empty" />
    <revision>
      <id>29331</id>
      <parentid>29330</parentid>
      <timestamp>2012-05-01T17:33:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/end</title>
    <ns>0</ns>
    <id>8177</id>
    <redirect title="cpp/container/vector/end" />
    <revision>
      <id>29333</id>
      <parentid>29332</parentid>
      <timestamp>2012-05-01T17:33:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/vector/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/erase</title>
    <ns>0</ns>
    <id>8178</id>
    <redirect title="cpp/container/vector/erase" />
    <revision>
      <id>29335</id>
      <parentid>29334</parentid>
      <timestamp>2012-05-01T17:33:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/front</title>
    <ns>0</ns>
    <id>8179</id>
    <redirect title="cpp/container/vector/front" />
    <revision>
      <id>29337</id>
      <parentid>29336</parentid>
      <timestamp>2012-05-01T17:33:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/get allocator</title>
    <ns>0</ns>
    <id>8180</id>
    <redirect title="cpp/container/vector/get allocator" />
    <revision>
      <id>29339</id>
      <parentid>29338</parentid>
      <timestamp>2012-05-01T17:33:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/vector/get_allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/insert</title>
    <ns>0</ns>
    <id>8181</id>
    <redirect title="cpp/container/vector/insert" />
    <revision>
      <id>29341</id>
      <parentid>29340</parentid>
      <timestamp>2012-05-01T17:33:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/max size</title>
    <ns>0</ns>
    <id>8182</id>
    <redirect title="cpp/container/vector/max size" />
    <revision>
      <id>29343</id>
      <parentid>29342</parentid>
      <timestamp>2012-05-01T17:33:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/vector/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/operator as</title>
    <ns>0</ns>
    <id>8183</id>
    <redirect title="cpp/container/vector/operator=" />
    <revision>
      <id>29345</id>
      <parentid>29344</parentid>
      <timestamp>2012-05-01T17:33:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/vector/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/operator at</title>
    <ns>0</ns>
    <id>8184</id>
    <redirect title="cpp/container/vector/operator at" />
    <revision>
      <id>29347</id>
      <parentid>29346</parentid>
      <timestamp>2012-05-01T17:33:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/vector/operator_at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/operator comp</title>
    <ns>0</ns>
    <id>8185</id>
    <redirect title="cpp/container/vector/operator cmp" />
    <revision>
      <id>36240</id>
      <parentid>29349</parentid>
      <timestamp>2012-06-17T12:49:47Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/vector/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/pop back</title>
    <ns>0</ns>
    <id>8186</id>
    <redirect title="cpp/container/vector/pop back" />
    <revision>
      <id>29351</id>
      <parentid>29350</parentid>
      <timestamp>2012-05-01T17:33:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/vector/pop_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/push back</title>
    <ns>0</ns>
    <id>8187</id>
    <redirect title="cpp/container/vector/push back" />
    <revision>
      <id>29353</id>
      <parentid>29352</parentid>
      <timestamp>2012-05-01T17:33:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/vector/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/rbegin</title>
    <ns>0</ns>
    <id>8188</id>
    <redirect title="cpp/container/vector/rbegin" />
    <revision>
      <id>29355</id>
      <parentid>29354</parentid>
      <timestamp>2012-05-01T17:33:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/rend</title>
    <ns>0</ns>
    <id>8189</id>
    <redirect title="cpp/container/vector/rend" />
    <revision>
      <id>29357</id>
      <parentid>29356</parentid>
      <timestamp>2012-05-01T17:33:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/reserve</title>
    <ns>0</ns>
    <id>8190</id>
    <redirect title="cpp/container/vector/reserve" />
    <revision>
      <id>29359</id>
      <parentid>29358</parentid>
      <timestamp>2012-05-01T17:33:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/vector/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/resize</title>
    <ns>0</ns>
    <id>8191</id>
    <redirect title="cpp/container/vector/resize" />
    <revision>
      <id>29361</id>
      <parentid>29360</parentid>
      <timestamp>2012-05-01T17:33:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/shrink to fit</title>
    <ns>0</ns>
    <id>8192</id>
    <redirect title="cpp/container/vector/shrink to fit" />
    <revision>
      <id>29363</id>
      <parentid>29362</parentid>
      <timestamp>2012-05-01T17:33:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/vector/shrink_to_fit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/size</title>
    <ns>0</ns>
    <id>8193</id>
    <redirect title="cpp/container/vector/size" />
    <revision>
      <id>29365</id>
      <parentid>29364</parentid>
      <timestamp>2012-05-01T17:33:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/start</title>
    <ns>0</ns>
    <id>8196</id>
    <redirect title="cpp/container/vector" />
    <revision>
      <id>29371</id>
      <parentid>29370</parentid>
      <timestamp>2012-05-01T17:33:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/container/vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/swap</title>
    <ns>0</ns>
    <id>8194</id>
    <redirect title="cpp/container/vector/swap" />
    <revision>
      <id>29367</id>
      <parentid>29366</parentid>
      <timestamp>2012-05-01T17:33:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/container/vector/vector operators</title>
    <ns>0</ns>
    <id>8195</id>
    <redirect title="cpp/container/vector/operator cmp" />
    <revision>
      <id>36241</id>
      <parentid>29369</parentid>
      <timestamp>2012-06-17T12:49:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/vector/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/data types</title>
    <ns>0</ns>
    <id>7636</id>
    <redirect title="cpp/language/types" />
    <revision>
      <id>28251</id>
      <parentid>28250</parentid>
      <timestamp>2012-05-01T17:28:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/language/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/</title>
    <ns>0</ns>
    <id>8236</id>
    <redirect title="cpp/error" />
    <revision>
      <id>29451</id>
      <parentid>29450</parentid>
      <timestamp>2012-05-01T17:33:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/assert</title>
    <ns>0</ns>
    <id>8234</id>
    <redirect title="cpp/error/assert" />
    <revision>
      <id>29447</id>
      <parentid>29446</parentid>
      <timestamp>2012-05-01T17:33:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/error/assert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/</title>
    <ns>0</ns>
    <id>8231</id>
    <redirect title="cpp/error/exception" />
    <revision>
      <id>29441</id>
      <parentid>29440</parentid>
      <timestamp>2012-05-01T17:33:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/error/exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/domain error/</title>
    <ns>0</ns>
    <id>8202</id>
    <redirect title="cpp/error/domain error" />
    <revision>
      <id>45614</id>
      <parentid>29383</parentid>
      <timestamp>2013-01-08T04:50:53Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/domain error]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/domain_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/domain error/constructor</title>
    <ns>0</ns>
    <id>8200</id>
    <redirect title="cpp/error/domain error" />
    <revision>
      <id>61270</id>
      <parentid>45615</parentid>
      <timestamp>2013-06-05T14:10:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/domain error]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/domain error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/domain error/start</title>
    <ns>0</ns>
    <id>8201</id>
    <redirect title="cpp/error/domain error" />
    <revision>
      <id>45613</id>
      <parentid>29381</parentid>
      <timestamp>2013-01-08T04:50:28Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <minor/>
      <comment>Redirected page to [[cpp/error/domain error]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/domain_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/exception/</title>
    <ns>0</ns>
    <id>8204</id>
    <redirect title="cpp/error/exception/exception" />
    <revision>
      <id>29387</id>
      <parentid>29386</parentid>
      <timestamp>2012-05-01T17:33:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/error/exception/exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/exception/start</title>
    <ns>0</ns>
    <id>8203</id>
    <redirect title="cpp/error/exception/exception" />
    <revision>
      <id>29385</id>
      <parentid>29384</parentid>
      <timestamp>2012-05-01T17:33:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/error/exception/exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/exception/what</title>
    <ns>0</ns>
    <id>8205</id>
    <redirect title="cpp/error/exception/what" />
    <revision>
      <id>45616</id>
      <parentid>29389</parentid>
      <timestamp>2013-01-08T04:52:45Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/exception/what]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/error/exception/what]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/invalid argument/</title>
    <ns>0</ns>
    <id>8208</id>
    <redirect title="cpp/error/invalid argument" />
    <revision>
      <id>45618</id>
      <parentid>29395</parentid>
      <timestamp>2013-01-08T04:53:25Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/invalid argument]]</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/error/invalid_argument]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/invalid argument/constructor</title>
    <ns>0</ns>
    <id>8206</id>
    <redirect title="cpp/error/invalid argument" />
    <revision>
      <id>61272</id>
      <parentid>45619</parentid>
      <timestamp>2013-06-05T14:10:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/invalid argument]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/error/invalid argument]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/invalid argument/start</title>
    <ns>0</ns>
    <id>8207</id>
    <redirect title="cpp/error/invalid argument" />
    <revision>
      <id>45617</id>
      <parentid>29393</parentid>
      <timestamp>2013-01-08T04:53:20Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/invalid argument]]</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/error/invalid_argument]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/length error/</title>
    <ns>0</ns>
    <id>8211</id>
    <redirect title="cpp/error/length error" />
    <revision>
      <id>45621</id>
      <parentid>29401</parentid>
      <timestamp>2013-01-08T04:53:44Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/length error]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/length_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/length error/constructor</title>
    <ns>0</ns>
    <id>8209</id>
    <redirect title="cpp/error/length error" />
    <revision>
      <id>61274</id>
      <parentid>45622</parentid>
      <timestamp>2013-06-05T14:10:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/length error]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/length error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/length error/start</title>
    <ns>0</ns>
    <id>8210</id>
    <redirect title="cpp/error/length error" />
    <revision>
      <id>45620</id>
      <parentid>29399</parentid>
      <timestamp>2013-01-08T04:53:39Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/length error]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/length_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/logic error/</title>
    <ns>0</ns>
    <id>8214</id>
    <redirect title="cpp/error/logic error" />
    <revision>
      <id>45623</id>
      <parentid>29407</parentid>
      <timestamp>2013-01-08T04:54:27Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/logic error]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/error/logic_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/logic error/constructor</title>
    <ns>0</ns>
    <id>8212</id>
    <redirect title="cpp/error/logic error" />
    <revision>
      <id>61276</id>
      <parentid>45624</parentid>
      <timestamp>2013-06-05T14:10:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/logic error]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/error/logic error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/logic error/start</title>
    <ns>0</ns>
    <id>8213</id>
    <redirect title="cpp/error/logic error" />
    <revision>
      <id>45630</id>
      <parentid>29405</parentid>
      <timestamp>2013-01-08T04:55:13Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/logic error]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/error/logic_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/out of range/</title>
    <ns>0</ns>
    <id>8217</id>
    <redirect title="cpp/error/out of range" />
    <revision>
      <id>45626</id>
      <parentid>29413</parentid>
      <timestamp>2013-01-08T04:54:49Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/out of range]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/out_of_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/out of range/constructor</title>
    <ns>0</ns>
    <id>8215</id>
    <redirect title="cpp/error/out of range" />
    <revision>
      <id>61278</id>
      <parentid>45627</parentid>
      <timestamp>2013-06-05T14:10:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/out of range]]</comment>
      <text xml:space="preserve" bytes="36">#REDIRECT [[cpp/error/out of range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/out of range/start</title>
    <ns>0</ns>
    <id>8216</id>
    <redirect title="cpp/error/out of range" />
    <revision>
      <id>45625</id>
      <parentid>29411</parentid>
      <timestamp>2013-01-08T04:54:42Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/out of range]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/error/out_of_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/overflow error/</title>
    <ns>0</ns>
    <id>8220</id>
    <redirect title="cpp/error/overflow error" />
    <revision>
      <id>45629</id>
      <parentid>29419</parentid>
      <timestamp>2013-01-08T04:55:05Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/overflow error]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/error/overflow_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/overflow error/constructor</title>
    <ns>0</ns>
    <id>8218</id>
    <redirect title="cpp/error/overflow error" />
    <revision>
      <id>61280</id>
      <parentid>46070</parentid>
      <timestamp>2013-06-05T14:11:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/overflow error]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/error/overflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/overflow error/start</title>
    <ns>0</ns>
    <id>8219</id>
    <redirect title="cpp/error/overflow error" />
    <revision>
      <id>45628</id>
      <parentid>29417</parentid>
      <timestamp>2013-01-08T04:55:00Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/error/overflow error]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/error/overflow_error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/range error/</title>
    <ns>0</ns>
    <id>8223</id>
    <redirect title="cpp/error/range error" />
    <revision>
      <id>46072</id>
      <parentid>29425</parentid>
      <timestamp>2013-02-15T21:48:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/range error]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/error/range error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/range error/constructor</title>
    <ns>0</ns>
    <id>8221</id>
    <redirect title="cpp/error/range error" />
    <revision>
      <id>61281</id>
      <parentid>29724</parentid>
      <timestamp>2013-06-05T14:11:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/range error]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/error/range error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/range error/start</title>
    <ns>0</ns>
    <id>8222</id>
    <redirect title="cpp/error/range error" />
    <revision>
      <id>46071</id>
      <parentid>29423</parentid>
      <timestamp>2013-02-15T21:48:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/range error]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[cpp/error/range error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/runtime error/</title>
    <ns>0</ns>
    <id>8226</id>
    <redirect title="cpp/error/runtime error" />
    <revision>
      <id>46074</id>
      <parentid>29431</parentid>
      <timestamp>2013-02-15T21:49:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/runtime error]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/runtime error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/runtime error/constructor</title>
    <ns>0</ns>
    <id>8224</id>
    <redirect title="cpp/error/runtime error" />
    <revision>
      <id>61283</id>
      <parentid>46075</parentid>
      <timestamp>2013-06-05T14:11:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/runtime error]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/runtime error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/runtime error/start</title>
    <ns>0</ns>
    <id>8225</id>
    <redirect title="cpp/error/runtime error" />
    <revision>
      <id>46073</id>
      <parentid>29429</parentid>
      <timestamp>2013-02-15T21:48:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/runtime error]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[cpp/error/runtime error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/start</title>
    <ns>0</ns>
    <id>8230</id>
    <redirect title="cpp/error/exception" />
    <revision>
      <id>29439</id>
      <parentid>29438</parentid>
      <timestamp>2012-05-01T17:33:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/error/exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/terminate</title>
    <ns>0</ns>
    <id>8232</id>
    <redirect title="cpp/error/terminate" />
    <revision>
      <id>29443</id>
      <parentid>29442</parentid>
      <timestamp>2012-05-01T17:33:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/error/terminate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/underflow error/</title>
    <ns>0</ns>
    <id>8229</id>
    <redirect title="cpp/error/underflow error" />
    <revision>
      <id>46077</id>
      <parentid>29437</parentid>
      <timestamp>2013-02-15T21:49:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/underflow error]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/underflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/underflow error/constructor</title>
    <ns>0</ns>
    <id>8227</id>
    <redirect title="cpp/error/underflow error" />
    <revision>
      <id>61285</id>
      <parentid>46078</parentid>
      <timestamp>2013-06-05T14:11:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/underflow error]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/underflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/underflow error/start</title>
    <ns>0</ns>
    <id>8228</id>
    <redirect title="cpp/error/underflow error" />
    <revision>
      <id>46076</id>
      <parentid>29435</parentid>
      <timestamp>2013-02-15T21:49:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/error/underflow error]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/error/underflow error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/exception/unexpected</title>
    <ns>0</ns>
    <id>8233</id>
    <redirect title="cpp/error/unexpected" />
    <revision>
      <id>29445</id>
      <parentid>29444</parentid>
      <timestamp>2012-05-01T17:33:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/error/unexpected]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/error/start</title>
    <ns>0</ns>
    <id>8235</id>
    <redirect title="cpp/error" />
    <revision>
      <id>29449</id>
      <parentid>29448</parentid>
      <timestamp>2012-05-01T17:33:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/escape sequences</title>
    <ns>0</ns>
    <id>7637</id>
    <redirect title="cpp/language/escape" />
    <revision>
      <id>28253</id>
      <parentid>28252</parentid>
      <timestamp>2012-05-01T17:28:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/language/escape]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/exception/</title>
    <ns>0</ns>
    <id>8238</id>
    <redirect title="cpp/error/exception" />
    <revision>
      <id>29455</id>
      <parentid>29454</parentid>
      <timestamp>2012-05-01T17:33:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/error/exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/exception/start</title>
    <ns>0</ns>
    <id>8237</id>
    <redirect title="cpp/error/exception" />
    <revision>
      <id>29453</id>
      <parentid>29452</parentid>
      <timestamp>2012-05-01T17:33:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/error/exception]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/</title>
    <ns>0</ns>
    <id>8254</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29487</id>
      <parentid>29486</parentid>
      <timestamp>2012-05-01T17:33:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/binary function</title>
    <ns>0</ns>
    <id>8239</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29457</id>
      <parentid>29456</parentid>
      <timestamp>2012-05-01T17:33:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/binary negate</title>
    <ns>0</ns>
    <id>8240</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29459</id>
      <parentid>29458</parentid>
      <timestamp>2012-05-01T17:33:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/bind1st</title>
    <ns>0</ns>
    <id>8241</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29461</id>
      <parentid>29460</parentid>
      <timestamp>2012-05-01T17:33:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/bind2nd</title>
    <ns>0</ns>
    <id>8242</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29463</id>
      <parentid>29462</parentid>
      <timestamp>2012-05-01T17:33:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/binder1st</title>
    <ns>0</ns>
    <id>8243</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29465</id>
      <parentid>29464</parentid>
      <timestamp>2012-05-01T17:33:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/binder2nd</title>
    <ns>0</ns>
    <id>8244</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29467</id>
      <parentid>29466</parentid>
      <timestamp>2012-05-01T17:33:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/const mem fun ref t</title>
    <ns>0</ns>
    <id>8247</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29473</id>
      <parentid>29472</parentid>
      <timestamp>2012-05-01T17:33:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/const mem fun t</title>
    <ns>0</ns>
    <id>8248</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29475</id>
      <parentid>29474</parentid>
      <timestamp>2012-05-01T17:33:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/const mem fun1 ref t</title>
    <ns>0</ns>
    <id>8245</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29469</id>
      <parentid>29468</parentid>
      <timestamp>2012-05-01T17:33:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/const mem fun1 t</title>
    <ns>0</ns>
    <id>8246</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29471</id>
      <parentid>29470</parentid>
      <timestamp>2012-05-01T17:33:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/divides</title>
    <ns>0</ns>
    <id>8249</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29477</id>
      <parentid>29476</parentid>
      <timestamp>2012-05-01T17:33:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/greater</title>
    <ns>0</ns>
    <id>8250</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29479</id>
      <parentid>29478</parentid>
      <timestamp>2012-05-01T17:33:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/logical and</title>
    <ns>0</ns>
    <id>8251</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29481</id>
      <parentid>29480</parentid>
      <timestamp>2012-05-01T17:33:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/not2</title>
    <ns>0</ns>
    <id>8252</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29483</id>
      <parentid>29482</parentid>
      <timestamp>2012-05-01T17:33:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/functional/start</title>
    <ns>0</ns>
    <id>8253</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>29485</id>
      <parentid>29484</parentid>
      <timestamp>2012-05-01T17:33:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/header files</title>
    <ns>0</ns>
    <id>7638</id>
    <redirect title="cpp/header" />
    <revision>
      <id>46079</id>
      <parentid>28255</parentid>
      <timestamp>2013-02-15T21:49:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/header]]</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[cpp/header]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/headers/</title>
    <ns>0</ns>
    <id>8256</id>
    <redirect title="cpp/header" />
    <revision>
      <id>46081</id>
      <parentid>29491</parentid>
      <timestamp>2013-02-15T21:49:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/header]]</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[cpp/header]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/headers/start</title>
    <ns>0</ns>
    <id>8255</id>
    <redirect title="cpp/header" />
    <revision>
      <id>46080</id>
      <parentid>29489</parentid>
      <timestamp>2013-02-15T21:49:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/header]]</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[cpp/header]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/</title>
    <ns>0</ns>
    <id>6824</id>
    <redirect title="cpp/io" />
    <revision>
      <id>26627</id>
      <parentid>26626</parentid>
      <timestamp>2012-05-01T17:20:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="20">#redirect [[cpp/io]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/bad</title>
    <ns>0</ns>
    <id>6795</id>
    <redirect title="cpp/io/basic ios/bad" />
    <revision>
      <id>26569</id>
      <parentid>26568</parentid>
      <timestamp>2012-05-01T17:20:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_ios/bad]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic filebuf/</title>
    <ns>0</ns>
    <id>8258</id>
    <redirect title="cpp/io/basic filebuf" />
    <revision>
      <id>29495</id>
      <parentid>29494</parentid>
      <timestamp>2012-05-01T17:33:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_filebuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic filebuf/start</title>
    <ns>0</ns>
    <id>8257</id>
    <redirect title="cpp/io/basic filebuf" />
    <revision>
      <id>29493</id>
      <parentid>29492</parentid>
      <timestamp>2012-05-01T17:33:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_filebuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/</title>
    <ns>0</ns>
    <id>8266</id>
    <redirect title="cpp/io/basic fstream" />
    <revision>
      <id>29511</id>
      <parentid>29510</parentid>
      <timestamp>2012-05-01T17:33:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_fstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/close</title>
    <ns>0</ns>
    <id>8259</id>
    <redirect title="cpp/io/basic fstream/close" />
    <revision>
      <id>29497</id>
      <parentid>29496</parentid>
      <timestamp>2012-05-01T17:33:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_fstream/close]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/constructor</title>
    <ns>0</ns>
    <id>8260</id>
    <redirect title="cpp/io/basic fstream/basic fstream" />
    <revision>
      <id>29499</id>
      <parentid>29498</parentid>
      <timestamp>2012-05-01T17:33:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/io/basic_fstream/basic_fstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/is open</title>
    <ns>0</ns>
    <id>8261</id>
    <redirect title="cpp/io/basic fstream/is open" />
    <revision>
      <id>29501</id>
      <parentid>29500</parentid>
      <timestamp>2012-05-01T17:33:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_fstream/is_open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/open</title>
    <ns>0</ns>
    <id>8262</id>
    <redirect title="cpp/io/basic fstream/open" />
    <revision>
      <id>29503</id>
      <parentid>29502</parentid>
      <timestamp>2012-05-01T17:33:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_fstream/open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/operator as</title>
    <ns>0</ns>
    <id>8263</id>
    <redirect title="cpp/io/basic fstream/operator=" />
    <revision>
      <id>29725</id>
      <parentid>29505</parentid>
      <timestamp>2012-05-01T18:05:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic fstream/operator=]]</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/io/basic_fstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/rdbuf</title>
    <ns>0</ns>
    <id>8264</id>
    <redirect title="cpp/io/basic fstream/rdbuf" />
    <revision>
      <id>29507</id>
      <parentid>29506</parentid>
      <timestamp>2012-05-01T17:33:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_fstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/start</title>
    <ns>0</ns>
    <id>8265</id>
    <redirect title="cpp/io/basic fstream" />
    <revision>
      <id>29509</id>
      <parentid>29508</parentid>
      <timestamp>2012-05-01T17:33:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_fstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic fstream/swap</title>
    <ns>0</ns>
    <id>8267</id>
    <redirect title="cpp/io/basic fstream/swap" />
    <revision>
      <id>29513</id>
      <parentid>29512</parentid>
      <timestamp>2012-05-01T17:33:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_fstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/</title>
    <ns>0</ns>
    <id>8275</id>
    <redirect title="cpp/io/basic ifstream" />
    <revision>
      <id>29529</id>
      <parentid>29528</parentid>
      <timestamp>2012-05-01T17:33:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ifstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/close</title>
    <ns>0</ns>
    <id>8268</id>
    <redirect title="cpp/io/basic ifstream/close" />
    <revision>
      <id>29515</id>
      <parentid>29514</parentid>
      <timestamp>2012-05-01T17:33:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_ifstream/close]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/constructor</title>
    <ns>0</ns>
    <id>8269</id>
    <redirect title="cpp/io/basic ifstream/basic ifstream" />
    <revision>
      <id>29517</id>
      <parentid>29516</parentid>
      <timestamp>2012-05-01T17:33:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/io/basic_ifstream/basic_ifstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/is open</title>
    <ns>0</ns>
    <id>8270</id>
    <redirect title="cpp/io/basic ifstream/is open" />
    <revision>
      <id>29519</id>
      <parentid>29518</parentid>
      <timestamp>2012-05-01T17:33:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/io/basic_ifstream/is_open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/open</title>
    <ns>0</ns>
    <id>8271</id>
    <redirect title="cpp/io/basic ifstream/open" />
    <revision>
      <id>29521</id>
      <parentid>29520</parentid>
      <timestamp>2012-05-01T17:33:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ifstream/open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/operator as</title>
    <ns>0</ns>
    <id>8272</id>
    <redirect title="cpp/io/basic ifstream/operator=" />
    <revision>
      <id>29726</id>
      <parentid>29523</parentid>
      <timestamp>2012-05-01T18:05:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic ifstream/operator=]]</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/basic_ifstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/rdbuf</title>
    <ns>0</ns>
    <id>8273</id>
    <redirect title="cpp/io/basic ifstream/rdbuf" />
    <revision>
      <id>29525</id>
      <parentid>29524</parentid>
      <timestamp>2012-05-01T17:33:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_ifstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/start</title>
    <ns>0</ns>
    <id>8274</id>
    <redirect title="cpp/io/basic ifstream" />
    <revision>
      <id>29527</id>
      <parentid>29526</parentid>
      <timestamp>2012-05-01T17:33:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ifstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ifstream/swap</title>
    <ns>0</ns>
    <id>8276</id>
    <redirect title="cpp/io/basic ifstream/swap" />
    <revision>
      <id>29531</id>
      <parentid>29530</parentid>
      <timestamp>2012-05-01T17:33:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ifstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/</title>
    <ns>0</ns>
    <id>8287</id>
    <redirect title="cpp/io/basic ios" />
    <revision>
      <id>29553</id>
      <parentid>29552</parentid>
      <timestamp>2012-05-01T17:33:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/basic_ios]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/bad</title>
    <ns>0</ns>
    <id>8277</id>
    <redirect title="cpp/io/basic ios/bad" />
    <revision>
      <id>29533</id>
      <parentid>29532</parentid>
      <timestamp>2012-05-01T17:33:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_ios/bad]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/clear</title>
    <ns>0</ns>
    <id>8278</id>
    <redirect title="cpp/io/basic ios/clear" />
    <revision>
      <id>29535</id>
      <parentid>29534</parentid>
      <timestamp>2012-05-01T17:33:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/basic_ios/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/copyfmt</title>
    <ns>0</ns>
    <id>8279</id>
    <redirect title="cpp/io/basic ios/copyfmt" />
    <revision>
      <id>29537</id>
      <parentid>29536</parentid>
      <timestamp>2012-05-01T17:33:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/basic_ios/copyfmt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/eof</title>
    <ns>0</ns>
    <id>8280</id>
    <redirect title="cpp/io/basic ios/eof" />
    <revision>
      <id>29539</id>
      <parentid>29538</parentid>
      <timestamp>2012-05-01T17:33:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_ios/eof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/fail</title>
    <ns>0</ns>
    <id>8281</id>
    <redirect title="cpp/io/basic ios/fail" />
    <revision>
      <id>29541</id>
      <parentid>29540</parentid>
      <timestamp>2012-05-01T17:33:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ios/fail]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/fill</title>
    <ns>0</ns>
    <id>8282</id>
    <redirect title="cpp/io/basic ios/fill" />
    <revision>
      <id>29543</id>
      <parentid>29542</parentid>
      <timestamp>2012-05-01T17:33:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ios/fill]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/good</title>
    <ns>0</ns>
    <id>8283</id>
    <redirect title="cpp/io/basic ios/good" />
    <revision>
      <id>29545</id>
      <parentid>29544</parentid>
      <timestamp>2012-05-01T17:33:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ios/good]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/operator bool</title>
    <ns>0</ns>
    <id>8284</id>
    <redirect title="cpp/io/basic ios/operator bool" />
    <revision>
      <id>29547</id>
      <parentid>29546</parentid>
      <timestamp>2012-05-01T17:33:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/io/basic_ios/operator_bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/operator neg</title>
    <ns>0</ns>
    <id>8285</id>
    <redirect title="cpp/io/basic ios/operator!" />
    <revision>
      <id>29549</id>
      <parentid>29548</parentid>
      <timestamp>2012-05-01T17:33:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ios/operator!]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ios/start</title>
    <ns>0</ns>
    <id>8286</id>
    <redirect title="cpp/io/basic ios" />
    <revision>
      <id>29551</id>
      <parentid>29550</parentid>
      <timestamp>2012-05-01T17:33:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/basic_ios]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic iostream/</title>
    <ns>0</ns>
    <id>8289</id>
    <redirect title="cpp/io/basic iostream" />
    <revision>
      <id>29557</id>
      <parentid>29556</parentid>
      <timestamp>2012-05-01T17:33:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_iostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic iostream/start</title>
    <ns>0</ns>
    <id>8288</id>
    <redirect title="cpp/io/basic iostream" />
    <revision>
      <id>29555</id>
      <parentid>29554</parentid>
      <timestamp>2012-05-01T17:33:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_iostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/</title>
    <ns>0</ns>
    <id>8301</id>
    <redirect title="cpp/io/basic istream" />
    <revision>
      <id>29581</id>
      <parentid>29580</parentid>
      <timestamp>2012-05-01T17:34:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_istream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/gcount</title>
    <ns>0</ns>
    <id>8290</id>
    <redirect title="cpp/io/basic istream/gcount" />
    <revision>
      <id>29559</id>
      <parentid>29558</parentid>
      <timestamp>2012-05-01T17:33:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_istream/gcount]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/get</title>
    <ns>0</ns>
    <id>8291</id>
    <redirect title="cpp/io/basic istream/get" />
    <revision>
      <id>29561</id>
      <parentid>29560</parentid>
      <timestamp>2012-05-01T17:33:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/basic_istream/get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/getline</title>
    <ns>0</ns>
    <id>8292</id>
    <redirect title="cpp/io/basic istream/getline" />
    <revision>
      <id>29563</id>
      <parentid>29562</parentid>
      <timestamp>2012-05-01T17:34:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_istream/getline]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/ignore</title>
    <ns>0</ns>
    <id>8293</id>
    <redirect title="cpp/io/basic istream/ignore" />
    <revision>
      <id>29565</id>
      <parentid>29564</parentid>
      <timestamp>2012-05-01T17:34:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_istream/ignore]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/operator gt gt</title>
    <ns>0</ns>
    <id>8294</id>
    <redirect title="cpp/io/basic istream/operator gtgt" />
    <revision>
      <id>29567</id>
      <parentid>29566</parentid>
      <timestamp>2012-05-01T17:34:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/io/basic_istream/operator_gtgt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/peek</title>
    <ns>0</ns>
    <id>8295</id>
    <redirect title="cpp/io/basic istream/peek" />
    <revision>
      <id>29569</id>
      <parentid>29568</parentid>
      <timestamp>2012-05-01T17:34:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_istream/peek]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/putback</title>
    <ns>0</ns>
    <id>8296</id>
    <redirect title="cpp/io/basic istream/putback" />
    <revision>
      <id>29571</id>
      <parentid>29570</parentid>
      <timestamp>2012-05-01T17:34:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_istream/putback]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/read</title>
    <ns>0</ns>
    <id>8297</id>
    <redirect title="cpp/io/basic istream/read" />
    <revision>
      <id>29573</id>
      <parentid>29572</parentid>
      <timestamp>2012-05-01T17:34:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_istream/read]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/readsome</title>
    <ns>0</ns>
    <id>8298</id>
    <redirect title="cpp/io/basic istream/readsome" />
    <revision>
      <id>29575</id>
      <parentid>29574</parentid>
      <timestamp>2012-05-01T17:34:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/io/basic_istream/readsome]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/seekg</title>
    <ns>0</ns>
    <id>8299</id>
    <redirect title="cpp/io/basic istream/seekg" />
    <revision>
      <id>29577</id>
      <parentid>29576</parentid>
      <timestamp>2012-05-01T17:34:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_istream/seekg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/start</title>
    <ns>0</ns>
    <id>8300</id>
    <redirect title="cpp/io/basic istream" />
    <revision>
      <id>29579</id>
      <parentid>29578</parentid>
      <timestamp>2012-05-01T17:34:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_istream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/sync</title>
    <ns>0</ns>
    <id>8302</id>
    <redirect title="cpp/io/basic istream/sync" />
    <revision>
      <id>29583</id>
      <parentid>29582</parentid>
      <timestamp>2012-05-01T17:34:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_istream/sync]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/tellg</title>
    <ns>0</ns>
    <id>8303</id>
    <redirect title="cpp/io/basic istream/tellg" />
    <revision>
      <id>29585</id>
      <parentid>29584</parentid>
      <timestamp>2012-05-01T17:34:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_istream/tellg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istream/unget</title>
    <ns>0</ns>
    <id>8304</id>
    <redirect title="cpp/io/basic istream/unget" />
    <revision>
      <id>29587</id>
      <parentid>29586</parentid>
      <timestamp>2012-05-01T17:34:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_istream/unget]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istringstream/</title>
    <ns>0</ns>
    <id>8309</id>
    <redirect title="cpp/io/basic istringstream" />
    <revision>
      <id>29597</id>
      <parentid>29596</parentid>
      <timestamp>2012-05-01T17:34:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_istringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istringstream/constructor</title>
    <ns>0</ns>
    <id>8305</id>
    <redirect title="cpp/io/basic istringstream/basic istringstream" />
    <revision>
      <id>29589</id>
      <parentid>29588</parentid>
      <timestamp>2012-05-01T17:34:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="60">#redirect [[cpp/io/basic_istringstream/basic_istringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istringstream/operator as</title>
    <ns>0</ns>
    <id>8306</id>
    <redirect title="cpp/io/basic istringstream/operator=" />
    <revision>
      <id>29731</id>
      <parentid>29727</parentid>
      <timestamp>2012-05-01T18:05:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic istringstream/operator=]]</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/io/basic_istringstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istringstream/rdbuf</title>
    <ns>0</ns>
    <id>8307</id>
    <redirect title="cpp/io/basic istringstream/rdbuf" />
    <revision>
      <id>29593</id>
      <parentid>29592</parentid>
      <timestamp>2012-05-01T17:34:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/io/basic_istringstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istringstream/start</title>
    <ns>0</ns>
    <id>8308</id>
    <redirect title="cpp/io/basic istringstream" />
    <revision>
      <id>29595</id>
      <parentid>29594</parentid>
      <timestamp>2012-05-01T17:34:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_istringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic istringstream/swap</title>
    <ns>0</ns>
    <id>8310</id>
    <redirect title="cpp/io/basic istringstream/swap" />
    <revision>
      <id>29599</id>
      <parentid>29598</parentid>
      <timestamp>2012-05-01T17:34:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/basic_istringstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/</title>
    <ns>0</ns>
    <id>8318</id>
    <redirect title="cpp/io/basic ofstream" />
    <revision>
      <id>29615</id>
      <parentid>29614</parentid>
      <timestamp>2012-05-01T17:34:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ofstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/close</title>
    <ns>0</ns>
    <id>8311</id>
    <redirect title="cpp/io/basic ofstream/close" />
    <revision>
      <id>29601</id>
      <parentid>29600</parentid>
      <timestamp>2012-05-01T17:34:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_ofstream/close]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/constructor</title>
    <ns>0</ns>
    <id>8312</id>
    <redirect title="cpp/io/basic ofstream/basic ofstream" />
    <revision>
      <id>29603</id>
      <parentid>29602</parentid>
      <timestamp>2012-05-01T17:34:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/io/basic_ofstream/basic_ofstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/is open</title>
    <ns>0</ns>
    <id>8313</id>
    <redirect title="cpp/io/basic ofstream/is open" />
    <revision>
      <id>29605</id>
      <parentid>29604</parentid>
      <timestamp>2012-05-01T17:34:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/io/basic_ofstream/is_open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/open</title>
    <ns>0</ns>
    <id>8314</id>
    <redirect title="cpp/io/basic ofstream/open" />
    <revision>
      <id>29607</id>
      <parentid>29606</parentid>
      <timestamp>2012-05-01T17:34:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ofstream/open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/operator as</title>
    <ns>0</ns>
    <id>8315</id>
    <redirect title="cpp/io/basic ofstream/operator=" />
    <revision>
      <id>29734</id>
      <parentid>29728</parentid>
      <timestamp>2012-05-01T18:06:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic ofstream/operator=]]</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/basic_ofstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/rdbuf</title>
    <ns>0</ns>
    <id>8316</id>
    <redirect title="cpp/io/basic ofstream/rdbuf" />
    <revision>
      <id>29611</id>
      <parentid>29610</parentid>
      <timestamp>2012-05-01T17:34:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_ofstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/start</title>
    <ns>0</ns>
    <id>8317</id>
    <redirect title="cpp/io/basic ofstream" />
    <revision>
      <id>29613</id>
      <parentid>29612</parentid>
      <timestamp>2012-05-01T17:34:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ofstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ofstream/swap</title>
    <ns>0</ns>
    <id>8319</id>
    <redirect title="cpp/io/basic ofstream/swap" />
    <revision>
      <id>29617</id>
      <parentid>29616</parentid>
      <timestamp>2012-05-01T17:34:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ofstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostream/</title>
    <ns>0</ns>
    <id>8324</id>
    <redirect title="cpp/io/basic ostream" />
    <revision>
      <id>29627</id>
      <parentid>29626</parentid>
      <timestamp>2012-05-01T17:34:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_ostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostream/flush</title>
    <ns>0</ns>
    <id>8320</id>
    <redirect title="cpp/io/basic ostream/flush" />
    <revision>
      <id>29619</id>
      <parentid>29618</parentid>
      <timestamp>2012-05-01T17:34:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/flush]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostream/put</title>
    <ns>0</ns>
    <id>8321</id>
    <redirect title="cpp/io/basic ostream/put" />
    <revision>
      <id>29621</id>
      <parentid>29620</parentid>
      <timestamp>2012-05-01T17:34:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/basic_ostream/put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostream/seekp</title>
    <ns>0</ns>
    <id>8322</id>
    <redirect title="cpp/io/basic ostream/seekp" />
    <revision>
      <id>29623</id>
      <parentid>29622</parentid>
      <timestamp>2012-05-01T17:34:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/seekp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostream/start</title>
    <ns>0</ns>
    <id>8323</id>
    <redirect title="cpp/io/basic ostream" />
    <revision>
      <id>29625</id>
      <parentid>29624</parentid>
      <timestamp>2012-05-01T17:34:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_ostream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostream/tellp</title>
    <ns>0</ns>
    <id>8325</id>
    <redirect title="cpp/io/basic ostream/tellp" />
    <revision>
      <id>29629</id>
      <parentid>29628</parentid>
      <timestamp>2012-05-01T17:34:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/tellp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostream/write</title>
    <ns>0</ns>
    <id>8326</id>
    <redirect title="cpp/io/basic ostream/write" />
    <revision>
      <id>29631</id>
      <parentid>29630</parentid>
      <timestamp>2012-05-01T17:34:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/write]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostringstream/</title>
    <ns>0</ns>
    <id>8331</id>
    <redirect title="cpp/io/basic ostringstream" />
    <revision>
      <id>29641</id>
      <parentid>29640</parentid>
      <timestamp>2012-05-01T17:34:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostringstream/constructor</title>
    <ns>0</ns>
    <id>8327</id>
    <redirect title="cpp/io/basic ostringstream/basic ostringstream" />
    <revision>
      <id>29633</id>
      <parentid>29632</parentid>
      <timestamp>2012-05-01T17:34:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="60">#redirect [[cpp/io/basic_ostringstream/basic_ostringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostringstream/operator as</title>
    <ns>0</ns>
    <id>8328</id>
    <redirect title="cpp/io/basic ostringstream/operator=" />
    <revision>
      <id>29732</id>
      <parentid>29729</parentid>
      <timestamp>2012-05-01T18:05:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic ostringstream/operator=]]</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/io/basic_ostringstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostringstream/rdbuf</title>
    <ns>0</ns>
    <id>8329</id>
    <redirect title="cpp/io/basic ostringstream/rdbuf" />
    <revision>
      <id>29637</id>
      <parentid>29636</parentid>
      <timestamp>2012-05-01T17:34:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/io/basic_ostringstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostringstream/start</title>
    <ns>0</ns>
    <id>8330</id>
    <redirect title="cpp/io/basic ostringstream" />
    <revision>
      <id>29639</id>
      <parentid>29638</parentid>
      <timestamp>2012-05-01T17:34:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic ostringstream/swap</title>
    <ns>0</ns>
    <id>8332</id>
    <redirect title="cpp/io/basic ostringstream/swap" />
    <revision>
      <id>29643</id>
      <parentid>29642</parentid>
      <timestamp>2012-05-01T17:34:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/basic_ostringstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic streambuf/</title>
    <ns>0</ns>
    <id>8334</id>
    <redirect title="cpp/io/basic streambuf" />
    <revision>
      <id>29647</id>
      <parentid>29646</parentid>
      <timestamp>2012-05-01T17:34:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/basic_streambuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic streambuf/start</title>
    <ns>0</ns>
    <id>8333</id>
    <redirect title="cpp/io/basic streambuf" />
    <revision>
      <id>29645</id>
      <parentid>29644</parentid>
      <timestamp>2012-05-01T17:34:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/basic_streambuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringbuf/</title>
    <ns>0</ns>
    <id>8336</id>
    <redirect title="cpp/io/basic stringbuf" />
    <revision>
      <id>29651</id>
      <parentid>29650</parentid>
      <timestamp>2012-05-01T17:34:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/basic_stringbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringbuf/start</title>
    <ns>0</ns>
    <id>8335</id>
    <redirect title="cpp/io/basic stringbuf" />
    <revision>
      <id>29649</id>
      <parentid>29648</parentid>
      <timestamp>2012-05-01T17:34:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/basic_stringbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringstream/</title>
    <ns>0</ns>
    <id>8341</id>
    <redirect title="cpp/io/basic stringstream" />
    <revision>
      <id>29661</id>
      <parentid>29660</parentid>
      <timestamp>2012-05-01T17:34:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringstream/constructor</title>
    <ns>0</ns>
    <id>8337</id>
    <redirect title="cpp/io/basic stringstream/basic stringstream" />
    <revision>
      <id>29653</id>
      <parentid>29652</parentid>
      <timestamp>2012-05-01T17:34:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="58">#redirect [[cpp/io/basic_stringstream/basic_stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringstream/operator as</title>
    <ns>0</ns>
    <id>8338</id>
    <redirect title="cpp/io/basic stringstream/operator=" />
    <revision>
      <id>29733</id>
      <parentid>29730</parentid>
      <timestamp>2012-05-01T18:05:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic stringstream/operator=]]</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/io/basic_stringstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringstream/rdbuf</title>
    <ns>0</ns>
    <id>8339</id>
    <redirect title="cpp/io/basic stringstream/rdbuf" />
    <revision>
      <id>29657</id>
      <parentid>29656</parentid>
      <timestamp>2012-05-01T17:34:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/basic_stringstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringstream/start</title>
    <ns>0</ns>
    <id>8340</id>
    <redirect title="cpp/io/basic stringstream" />
    <revision>
      <id>29659</id>
      <parentid>29658</parentid>
      <timestamp>2012-05-01T17:34:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/basic stringstream/swap</title>
    <ns>0</ns>
    <id>8342</id>
    <redirect title="cpp/io/basic stringstream/swap" />
    <revision>
      <id>29663</id>
      <parentid>29662</parentid>
      <timestamp>2012-05-01T17:34:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/io/basic_stringstream/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/</title>
    <ns>0</ns>
    <id>6745</id>
    <redirect title="cpp/io/c" />
    <revision>
      <id>26469</id>
      <parentid>26468</parentid>
      <timestamp>2012-05-01T17:20:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="22">#redirect [[cpp/io/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/clearerr</title>
    <ns>0</ns>
    <id>8343</id>
    <redirect title="cpp/io/c/clearerr" />
    <revision>
      <id>29665</id>
      <parentid>29664</parentid>
      <timestamp>2012-05-01T17:34:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/io/c/clearerr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fclose</title>
    <ns>0</ns>
    <id>8344</id>
    <redirect title="cpp/io/c/fclose" />
    <revision>
      <id>29667</id>
      <parentid>29666</parentid>
      <timestamp>2012-05-01T17:34:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fclose]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/feof</title>
    <ns>0</ns>
    <id>8345</id>
    <redirect title="cpp/io/c/feof" />
    <revision>
      <id>29669</id>
      <parentid>29668</parentid>
      <timestamp>2012-05-01T17:34:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/io/c/feof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/ferror</title>
    <ns>0</ns>
    <id>8346</id>
    <redirect title="cpp/io/c/ferror" />
    <revision>
      <id>29671</id>
      <parentid>29670</parentid>
      <timestamp>2012-05-01T17:34:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/ferror]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fflush</title>
    <ns>0</ns>
    <id>8347</id>
    <redirect title="cpp/io/c/fflush" />
    <revision>
      <id>29673</id>
      <parentid>29672</parentid>
      <timestamp>2012-05-01T17:34:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fflush]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fgetc</title>
    <ns>0</ns>
    <id>8348</id>
    <redirect title="cpp/io/c/fgetc" />
    <revision>
      <id>29675</id>
      <parentid>29674</parentid>
      <timestamp>2012-05-01T17:34:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fgetc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fgetpos</title>
    <ns>0</ns>
    <id>8349</id>
    <redirect title="cpp/io/c/fgetpos" />
    <revision>
      <id>29677</id>
      <parentid>29676</parentid>
      <timestamp>2012-05-01T17:34:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fgetpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fgets</title>
    <ns>0</ns>
    <id>8350</id>
    <redirect title="cpp/io/c/fgets" />
    <revision>
      <id>29679</id>
      <parentid>29678</parentid>
      <timestamp>2012-05-01T17:34:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fgets]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fopen</title>
    <ns>0</ns>
    <id>8351</id>
    <redirect title="cpp/io/c/fopen" />
    <revision>
      <id>29681</id>
      <parentid>29680</parentid>
      <timestamp>2012-05-01T17:34:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fopen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fprintf</title>
    <ns>0</ns>
    <id>8352</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>29683</id>
      <parentid>29682</parentid>
      <timestamp>2012-05-01T17:34:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fputc</title>
    <ns>0</ns>
    <id>8353</id>
    <redirect title="cpp/io/c/fputc" />
    <revision>
      <id>29685</id>
      <parentid>29684</parentid>
      <timestamp>2012-05-01T17:34:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fputc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fputs</title>
    <ns>0</ns>
    <id>8354</id>
    <redirect title="cpp/io/c/fputs" />
    <revision>
      <id>29687</id>
      <parentid>29686</parentid>
      <timestamp>2012-05-01T17:34:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fputs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fread</title>
    <ns>0</ns>
    <id>8355</id>
    <redirect title="cpp/io/c/fread" />
    <revision>
      <id>29689</id>
      <parentid>29688</parentid>
      <timestamp>2012-05-01T17:34:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fread]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/freopen</title>
    <ns>0</ns>
    <id>8356</id>
    <redirect title="cpp/io/c/freopen" />
    <revision>
      <id>29691</id>
      <parentid>29690</parentid>
      <timestamp>2012-05-01T17:34:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/freopen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fscanf</title>
    <ns>0</ns>
    <id>8357</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>29693</id>
      <parentid>29692</parentid>
      <timestamp>2012-05-01T17:34:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fseek</title>
    <ns>0</ns>
    <id>8358</id>
    <redirect title="cpp/io/c/fseek" />
    <revision>
      <id>29695</id>
      <parentid>29694</parentid>
      <timestamp>2012-05-01T17:34:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/fseek]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fsetpos</title>
    <ns>0</ns>
    <id>8359</id>
    <redirect title="cpp/io/c/fsetpos" />
    <revision>
      <id>29697</id>
      <parentid>29696</parentid>
      <timestamp>2012-05-01T17:34:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fsetpos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/ftell</title>
    <ns>0</ns>
    <id>8360</id>
    <redirect title="cpp/io/c/ftell" />
    <revision>
      <id>29699</id>
      <parentid>29698</parentid>
      <timestamp>2012-05-01T17:34:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/io/c/ftell]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/fwrite</title>
    <ns>0</ns>
    <id>8361</id>
    <redirect title="cpp/io/c/fwrite" />
    <revision>
      <id>29701</id>
      <parentid>29700</parentid>
      <timestamp>2012-05-01T17:34:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fwrite]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/getchar</title>
    <ns>0</ns>
    <id>8362</id>
    <redirect title="cpp/io/c/getchar" />
    <revision>
      <id>29703</id>
      <parentid>29702</parentid>
      <timestamp>2012-05-01T17:34:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/getchar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/gets</title>
    <ns>0</ns>
    <id>8363</id>
    <redirect title="cpp/io/c/gets" />
    <revision>
      <id>29705</id>
      <parentid>29704</parentid>
      <timestamp>2012-05-01T17:34:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/io/c/gets]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/perror</title>
    <ns>0</ns>
    <id>8364</id>
    <redirect title="cpp/io/c/perror" />
    <revision>
      <id>29707</id>
      <parentid>29706</parentid>
      <timestamp>2012-05-01T17:34:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/perror]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/printf</title>
    <ns>0</ns>
    <id>8365</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>29709</id>
      <parentid>29708</parentid>
      <timestamp>2012-05-01T17:34:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/printf format</title>
    <ns>0</ns>
    <id>8366</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>29711</id>
      <parentid>29710</parentid>
      <timestamp>2012-05-01T17:34:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/putchar</title>
    <ns>0</ns>
    <id>8367</id>
    <redirect title="cpp/io/c/putchar" />
    <revision>
      <id>29713</id>
      <parentid>29712</parentid>
      <timestamp>2012-05-01T17:34:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/putchar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/puts</title>
    <ns>0</ns>
    <id>8368</id>
    <redirect title="cpp/io/c/puts" />
    <revision>
      <id>29715</id>
      <parentid>29714</parentid>
      <timestamp>2012-05-01T17:34:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/io/c/puts]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/remove</title>
    <ns>0</ns>
    <id>8369</id>
    <redirect title="cpp/io/c/remove" />
    <revision>
      <id>29717</id>
      <parentid>29716</parentid>
      <timestamp>2012-05-01T17:34:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/rename</title>
    <ns>0</ns>
    <id>8370</id>
    <redirect title="cpp/io/c/rename" />
    <revision>
      <id>29719</id>
      <parentid>29718</parentid>
      <timestamp>2012-05-01T17:34:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/rename]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/rewind</title>
    <ns>0</ns>
    <id>6736</id>
    <redirect title="cpp/io/c/rewind" />
    <revision>
      <id>26451</id>
      <parentid>26450</parentid>
      <timestamp>2012-05-01T17:19:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/rewind]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/scanf</title>
    <ns>0</ns>
    <id>6737</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>26453</id>
      <parentid>26452</parentid>
      <timestamp>2012-05-01T17:19:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/scanf format</title>
    <ns>0</ns>
    <id>6738</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>26455</id>
      <parentid>26454</parentid>
      <timestamp>2012-05-01T17:19:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/setbuf</title>
    <ns>0</ns>
    <id>6739</id>
    <redirect title="cpp/io/c/setbuf" />
    <revision>
      <id>26457</id>
      <parentid>26456</parentid>
      <timestamp>2012-05-01T17:19:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/setbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/setvbuf</title>
    <ns>0</ns>
    <id>6740</id>
    <redirect title="cpp/io/c/setvbuf" />
    <revision>
      <id>26459</id>
      <parentid>26458</parentid>
      <timestamp>2012-05-01T17:19:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/setvbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/snprintf</title>
    <ns>0</ns>
    <id>6741</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>26461</id>
      <parentid>26460</parentid>
      <timestamp>2012-05-01T17:19:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/sprintf</title>
    <ns>0</ns>
    <id>6742</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>26463</id>
      <parentid>26462</parentid>
      <timestamp>2012-05-01T17:19:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/sscanf</title>
    <ns>0</ns>
    <id>6743</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>26465</id>
      <parentid>26464</parentid>
      <timestamp>2012-05-01T17:20:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/start</title>
    <ns>0</ns>
    <id>6744</id>
    <redirect title="cpp/io/c" />
    <revision>
      <id>26467</id>
      <parentid>26466</parentid>
      <timestamp>2012-05-01T17:20:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="22">#redirect [[cpp/io/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/tmpfile</title>
    <ns>0</ns>
    <id>6746</id>
    <redirect title="cpp/io/c/tmpfile" />
    <revision>
      <id>26471</id>
      <parentid>26470</parentid>
      <timestamp>2012-05-01T17:20:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/tmpfile]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/tmpnam</title>
    <ns>0</ns>
    <id>6747</id>
    <redirect title="cpp/io/c/tmpnam" />
    <revision>
      <id>26473</id>
      <parentid>26472</parentid>
      <timestamp>2012-05-01T17:20:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/tmpnam]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/ungetc</title>
    <ns>0</ns>
    <id>6748</id>
    <redirect title="cpp/io/c/ungetc" />
    <revision>
      <id>26475</id>
      <parentid>26474</parentid>
      <timestamp>2012-05-01T17:20:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/ungetc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vfprintf</title>
    <ns>0</ns>
    <id>6749</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>26477</id>
      <parentid>26476</parentid>
      <timestamp>2012-05-01T17:20:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vfscanf</title>
    <ns>0</ns>
    <id>6750</id>
    <redirect title="cpp/io/c/fscanf" />
    <revision>
      <id>26479</id>
      <parentid>26478</parentid>
      <timestamp>2012-05-01T17:20:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/c/fscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vprintf</title>
    <ns>0</ns>
    <id>6751</id>
    <redirect title="cpp/io/c/fprintf" />
    <revision>
      <id>26481</id>
      <parentid>26480</parentid>
      <timestamp>2012-05-01T17:20:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/fprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vprintf vfprintf vsprintf</title>
    <ns>0</ns>
    <id>6752</id>
    <redirect title="cpp/io/c/vfprintf" />
    <revision>
      <id>26483</id>
      <parentid>26482</parentid>
      <timestamp>2012-05-01T17:20:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/io/c/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vscanf</title>
    <ns>0</ns>
    <id>6753</id>
    <redirect title="cpp/io/c/vfscanf" />
    <revision>
      <id>26485</id>
      <parentid>26484</parentid>
      <timestamp>2012-05-01T17:20:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/vfscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vsnprintf</title>
    <ns>0</ns>
    <id>6754</id>
    <redirect title="cpp/io/c/vfprintf" />
    <revision>
      <id>26487</id>
      <parentid>26486</parentid>
      <timestamp>2012-05-01T17:20:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/io/c/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vsprintf</title>
    <ns>0</ns>
    <id>6755</id>
    <redirect title="cpp/io/c/vfprintf" />
    <revision>
      <id>26489</id>
      <parentid>26488</parentid>
      <timestamp>2012-05-01T17:20:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/io/c/vfprintf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/c/vsscanf</title>
    <ns>0</ns>
    <id>6756</id>
    <redirect title="cpp/io/c/vfscanf" />
    <revision>
      <id>26491</id>
      <parentid>26490</parentid>
      <timestamp>2012-05-01T17:20:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/io/c/vfscanf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/clear</title>
    <ns>0</ns>
    <id>6796</id>
    <redirect title="cpp/io/basic ios/clear" />
    <revision>
      <id>26571</id>
      <parentid>26570</parentid>
      <timestamp>2012-05-01T17:20:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/basic_ios/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/close</title>
    <ns>0</ns>
    <id>6797</id>
    <redirect title="cpp/io/basic fstream/close" />
    <revision>
      <id>26573</id>
      <parentid>26572</parentid>
      <timestamp>2012-05-01T17:20:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_fstream/close]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/constructors</title>
    <ns>0</ns>
    <id>6798</id>
    <redirect title="cpp/io" />
    <revision>
      <id>26575</id>
      <parentid>26574</parentid>
      <timestamp>2012-05-01T17:20:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="20">#redirect [[cpp/io]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/eof</title>
    <ns>0</ns>
    <id>6799</id>
    <redirect title="cpp/io/basic ios/eof" />
    <revision>
      <id>26577</id>
      <parentid>26576</parentid>
      <timestamp>2012-05-01T17:20:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/basic_ios/eof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/exceptions</title>
    <ns>0</ns>
    <id>6800</id>
    <redirect title="cpp/io/basic ios/exceptions" />
    <revision>
      <id>26579</id>
      <parentid>26578</parentid>
      <timestamp>2012-05-01T17:20:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_ios/exceptions]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/fail</title>
    <ns>0</ns>
    <id>6801</id>
    <redirect title="cpp/io/basic ios/fail" />
    <revision>
      <id>26581</id>
      <parentid>26580</parentid>
      <timestamp>2012-05-01T17:20:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ios/fail]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/fill</title>
    <ns>0</ns>
    <id>6802</id>
    <redirect title="cpp/io/basic ios/fill" />
    <revision>
      <id>26583</id>
      <parentid>26582</parentid>
      <timestamp>2012-05-01T17:20:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ios/fill]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/flags</title>
    <ns>0</ns>
    <id>6803</id>
    <redirect title="cpp/io/ios base/flags" />
    <revision>
      <id>26585</id>
      <parentid>26584</parentid>
      <timestamp>2012-05-01T17:20:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/flags]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/flush</title>
    <ns>0</ns>
    <id>6804</id>
    <redirect title="cpp/io/basic ostream/flush" />
    <revision>
      <id>26587</id>
      <parentid>26586</parentid>
      <timestamp>2012-05-01T17:20:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/flush]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/gcount</title>
    <ns>0</ns>
    <id>6805</id>
    <redirect title="cpp/io/basic istream/gcount" />
    <revision>
      <id>26589</id>
      <parentid>26588</parentid>
      <timestamp>2012-05-01T17:20:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_istream/gcount]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/get</title>
    <ns>0</ns>
    <id>6806</id>
    <redirect title="cpp/io/basic istream/get" />
    <revision>
      <id>26591</id>
      <parentid>26590</parentid>
      <timestamp>2012-05-01T17:20:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/basic_istream/get]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/getline</title>
    <ns>0</ns>
    <id>6807</id>
    <redirect title="cpp/io/basic istream/getline" />
    <revision>
      <id>26593</id>
      <parentid>26592</parentid>
      <timestamp>2012-05-01T17:20:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_istream/getline]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/good</title>
    <ns>0</ns>
    <id>6808</id>
    <redirect title="cpp/io/basic ios/good" />
    <revision>
      <id>26595</id>
      <parentid>26594</parentid>
      <timestamp>2012-05-01T17:20:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/basic_ios/good]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ignore</title>
    <ns>0</ns>
    <id>6809</id>
    <redirect title="cpp/io/basic istream/ignore" />
    <revision>
      <id>26597</id>
      <parentid>26596</parentid>
      <timestamp>2012-05-01T17:20:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/io/basic_istream/ignore]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/io flags</title>
    <ns>0</ns>
    <id>6810</id>
    <redirect title="cpp/io/ios base/flags" />
    <revision>
      <id>29737</id>
      <parentid>26599</parentid>
      <timestamp>2012-05-01T18:07:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/ios base/flags]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/flags]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/</title>
    <ns>0</ns>
    <id>6783</id>
    <redirect title="cpp/io/ios base" />
    <revision>
      <id>26545</id>
      <parentid>26544</parentid>
      <timestamp>2012-05-01T17:20:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/ios_base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/app</title>
    <ns>0</ns>
    <id>6757</id>
    <redirect title="cpp/io/ios base/openmode" />
    <revision>
      <id>26493</id>
      <parentid>26492</parentid>
      <timestamp>2012-05-01T17:20:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/openmode]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/ate</title>
    <ns>0</ns>
    <id>6758</id>
    <redirect title="cpp/io/ios base/openmode" />
    <revision>
      <id>26495</id>
      <parentid>26494</parentid>
      <timestamp>2012-05-01T17:20:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/openmode]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/beg</title>
    <ns>0</ns>
    <id>6759</id>
    <redirect title="cpp/io/ios base/seekdir" />
    <revision>
      <id>26497</id>
      <parentid>26496</parentid>
      <timestamp>2012-05-01T17:20:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/io/ios_base/seekdir]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/binary</title>
    <ns>0</ns>
    <id>6760</id>
    <redirect title="cpp/io/ios base/openmode" />
    <revision>
      <id>26499</id>
      <parentid>26498</parentid>
      <timestamp>2012-05-01T17:20:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/openmode]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/cur</title>
    <ns>0</ns>
    <id>6761</id>
    <redirect title="cpp/io/ios base/seekdir" />
    <revision>
      <id>26501</id>
      <parentid>26500</parentid>
      <timestamp>2012-05-01T17:20:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/io/ios_base/seekdir]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/d ios base</title>
    <ns>0</ns>
    <id>6762</id>
    <redirect title="cpp/io/ios base/~ios base" />
    <revision>
      <id>26503</id>
      <parentid>26502</parentid>
      <timestamp>2012-05-01T17:20:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/ios_base/~ios_base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/end</title>
    <ns>0</ns>
    <id>6763</id>
    <redirect title="cpp/io/ios base/seekdir" />
    <revision>
      <id>26505</id>
      <parentid>26504</parentid>
      <timestamp>2012-05-01T17:20:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/io/ios_base/seekdir]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/event</title>
    <ns>0</ns>
    <id>6764</id>
    <redirect title="cpp/io/ios base/event" />
    <revision>
      <id>26507</id>
      <parentid>26506</parentid>
      <timestamp>2012-05-01T17:20:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/event]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/event callback</title>
    <ns>0</ns>
    <id>6765</id>
    <redirect title="cpp/io/ios base/event callback" />
    <revision>
      <id>26509</id>
      <parentid>26508</parentid>
      <timestamp>2012-05-01T17:20:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/io/ios_base/event_callback]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/flags</title>
    <ns>0</ns>
    <id>6766</id>
    <redirect title="cpp/io/ios base/flags" />
    <revision>
      <id>26511</id>
      <parentid>26510</parentid>
      <timestamp>2012-05-01T17:20:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/flags]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/fmtflags</title>
    <ns>0</ns>
    <id>6767</id>
    <redirect title="cpp/io/ios base/fmtflags" />
    <revision>
      <id>26513</id>
      <parentid>26512</parentid>
      <timestamp>2012-05-01T17:20:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/fmtflags]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/getloc</title>
    <ns>0</ns>
    <id>6768</id>
    <redirect title="cpp/io/ios base/getloc" />
    <revision>
      <id>26515</id>
      <parentid>26514</parentid>
      <timestamp>2012-05-01T17:20:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/ios_base/getloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/imbue</title>
    <ns>0</ns>
    <id>6769</id>
    <redirect title="cpp/io/ios base/imbue" />
    <revision>
      <id>26517</id>
      <parentid>26516</parentid>
      <timestamp>2012-05-01T17:20:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/imbue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/in</title>
    <ns>0</ns>
    <id>6770</id>
    <redirect title="cpp/io/ios base/openmode" />
    <revision>
      <id>26519</id>
      <parentid>26518</parentid>
      <timestamp>2012-05-01T17:20:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/openmode]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/init</title>
    <ns>0</ns>
    <id>6771</id>
    <redirect title="cpp/io/ios base/Init" />
    <revision>
      <id>26521</id>
      <parentid>26520</parentid>
      <timestamp>2012-05-01T17:20:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/ios_base/Init]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/ios base</title>
    <ns>0</ns>
    <id>6772</id>
    <redirect title="cpp/io/ios base/ios base" />
    <revision>
      <id>26523</id>
      <parentid>26522</parentid>
      <timestamp>2012-05-01T17:20:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/ios_base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/iostate</title>
    <ns>0</ns>
    <id>6773</id>
    <redirect title="cpp/io/ios base/iostate" />
    <revision>
      <id>26525</id>
      <parentid>26524</parentid>
      <timestamp>2012-05-01T17:20:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/io/ios_base/iostate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/iword</title>
    <ns>0</ns>
    <id>6774</id>
    <redirect title="cpp/io/ios base/iword" />
    <revision>
      <id>26527</id>
      <parentid>26526</parentid>
      <timestamp>2012-05-01T17:20:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/iword]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/openmode</title>
    <ns>0</ns>
    <id>6775</id>
    <redirect title="cpp/io/ios base/openmode" />
    <revision>
      <id>26529</id>
      <parentid>26528</parentid>
      <timestamp>2012-05-01T17:20:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/openmode]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/out</title>
    <ns>0</ns>
    <id>6776</id>
    <redirect title="cpp/io/ios base/openmode" />
    <revision>
      <id>26531</id>
      <parentid>26530</parentid>
      <timestamp>2012-05-01T17:20:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/openmode]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/precision</title>
    <ns>0</ns>
    <id>6777</id>
    <redirect title="cpp/io/ios base/precision" />
    <revision>
      <id>26533</id>
      <parentid>26532</parentid>
      <timestamp>2012-05-01T17:20:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/ios_base/precision]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/pword</title>
    <ns>0</ns>
    <id>6778</id>
    <redirect title="cpp/io/ios base/pword" />
    <revision>
      <id>26535</id>
      <parentid>26534</parentid>
      <timestamp>2012-05-01T17:20:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/pword]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/register callback</title>
    <ns>0</ns>
    <id>6779</id>
    <redirect title="cpp/io/ios base/register callback" />
    <revision>
      <id>26537</id>
      <parentid>26536</parentid>
      <timestamp>2012-05-01T17:20:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/io/ios_base/register_callback]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/seekdir</title>
    <ns>0</ns>
    <id>6780</id>
    <redirect title="cpp/io/ios base/seekdir" />
    <revision>
      <id>26539</id>
      <parentid>26538</parentid>
      <timestamp>2012-05-01T17:20:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/io/ios_base/seekdir]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/setf</title>
    <ns>0</ns>
    <id>6781</id>
    <redirect title="cpp/io/ios base/setf" />
    <revision>
      <id>26541</id>
      <parentid>26540</parentid>
      <timestamp>2012-05-01T17:20:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/ios_base/setf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/start</title>
    <ns>0</ns>
    <id>6782</id>
    <redirect title="cpp/io/ios base" />
    <revision>
      <id>26543</id>
      <parentid>26542</parentid>
      <timestamp>2012-05-01T17:20:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/io/ios_base]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/sync with stdio</title>
    <ns>0</ns>
    <id>6784</id>
    <redirect title="cpp/io/ios base/sync with stdio" />
    <revision>
      <id>26547</id>
      <parentid>26546</parentid>
      <timestamp>2012-05-01T17:20:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/ios_base/sync_with_stdio]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/trunc</title>
    <ns>0</ns>
    <id>6785</id>
    <redirect title="cpp/io/ios base/openmode" />
    <revision>
      <id>29736</id>
      <parentid>26549</parentid>
      <timestamp>2012-05-01T18:06:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/ios base/openmode]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/ios_base/openmode]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/unsetf</title>
    <ns>0</ns>
    <id>6786</id>
    <redirect title="cpp/io/ios base/unsetf" />
    <revision>
      <id>26551</id>
      <parentid>26550</parentid>
      <timestamp>2012-05-01T17:20:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/ios_base/unsetf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/width</title>
    <ns>0</ns>
    <id>6787</id>
    <redirect title="cpp/io/ios base/width" />
    <revision>
      <id>26553</id>
      <parentid>26552</parentid>
      <timestamp>2012-05-01T17:20:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/width]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/ios base/xalloc</title>
    <ns>0</ns>
    <id>6788</id>
    <redirect title="cpp/io/ios base/xalloc" />
    <revision>
      <id>26555</id>
      <parentid>26554</parentid>
      <timestamp>2012-05-01T17:20:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/ios_base/xalloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/is open</title>
    <ns>0</ns>
    <id>6811</id>
    <redirect title="cpp/io/basic fstream/is open" />
    <revision>
      <id>26601</id>
      <parentid>26600</parentid>
      <timestamp>2012-05-01T17:20:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_fstream/is_open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/open</title>
    <ns>0</ns>
    <id>6812</id>
    <redirect title="cpp/io/basic fstream/open" />
    <revision>
      <id>26603</id>
      <parentid>26602</parentid>
      <timestamp>2012-05-01T17:20:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_fstream/open]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/peek</title>
    <ns>0</ns>
    <id>6813</id>
    <redirect title="cpp/io/basic istream/peek" />
    <revision>
      <id>26605</id>
      <parentid>26604</parentid>
      <timestamp>2012-05-01T17:20:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_istream/peek]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/precision</title>
    <ns>0</ns>
    <id>6814</id>
    <redirect title="cpp/io/ios base/precision" />
    <revision>
      <id>29738</id>
      <parentid>26607</parentid>
      <timestamp>2012-05-01T18:07:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/ios base/precision]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/ios_base/precision]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/put</title>
    <ns>0</ns>
    <id>6815</id>
    <redirect title="cpp/io/basic ostream/put" />
    <revision>
      <id>26609</id>
      <parentid>26608</parentid>
      <timestamp>2012-05-01T17:20:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/basic_ostream/put]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/putback</title>
    <ns>0</ns>
    <id>6816</id>
    <redirect title="cpp/io/basic istream/putback" />
    <revision>
      <id>26611</id>
      <parentid>26610</parentid>
      <timestamp>2012-05-01T17:20:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/io/basic_istream/putback]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/rdstate</title>
    <ns>0</ns>
    <id>6817</id>
    <redirect title="cpp/io/basic ios/rdstate" />
    <revision>
      <id>26613</id>
      <parentid>26612</parentid>
      <timestamp>2012-05-01T17:20:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/io/basic_ios/rdstate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/read</title>
    <ns>0</ns>
    <id>6818</id>
    <redirect title="cpp/io/basic istream/read" />
    <revision>
      <id>26615</id>
      <parentid>26614</parentid>
      <timestamp>2012-05-01T17:20:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_istream/read]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/seekdir</title>
    <ns>0</ns>
    <id>6819</id>
    <redirect title="cpp/io/ios base/seekdir" />
    <revision>
      <id>26617</id>
      <parentid>26616</parentid>
      <timestamp>2012-05-01T17:20:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/io/ios_base/seekdir]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/seekg</title>
    <ns>0</ns>
    <id>6820</id>
    <redirect title="cpp/io/basic istream/seekg" />
    <revision>
      <id>26619</id>
      <parentid>26618</parentid>
      <timestamp>2012-05-01T17:20:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_istream/seekg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/seekp</title>
    <ns>0</ns>
    <id>6821</id>
    <redirect title="cpp/io/basic ostream/seekp" />
    <revision>
      <id>26621</id>
      <parentid>26620</parentid>
      <timestamp>2012-05-01T17:20:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/seekp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/setf</title>
    <ns>0</ns>
    <id>6822</id>
    <redirect title="cpp/io/ios base/setf" />
    <revision>
      <id>29739</id>
      <parentid>26623</parentid>
      <timestamp>2012-05-01T18:07:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/ios base/setf]]</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/io/ios_base/setf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/sstream/</title>
    <ns>0</ns>
    <id>6793</id>
    <redirect title="cpp/io/basic stringstream" />
    <revision>
      <id>26565</id>
      <parentid>26564</parentid>
      <timestamp>2012-05-01T17:20:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/sstream/constructors</title>
    <ns>0</ns>
    <id>6789</id>
    <redirect title="cpp/io/basic stringstream/basic stringstream" />
    <revision>
      <id>26557</id>
      <parentid>26556</parentid>
      <timestamp>2012-05-01T17:20:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="58">#redirect [[cpp/io/basic_stringstream/basic_stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/sstream/operators</title>
    <ns>0</ns>
    <id>6790</id>
    <redirect title="cpp/io/basic stringstream/operator=" />
    <revision>
      <id>29735</id>
      <parentid>26559</parentid>
      <timestamp>2012-05-01T18:06:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/basic stringstream/operator=]]</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/io/basic_stringstream/operator=]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/sstream/rdbuf</title>
    <ns>0</ns>
    <id>6791</id>
    <redirect title="cpp/io/basic stringstream/rdbuf" />
    <revision>
      <id>26561</id>
      <parentid>26560</parentid>
      <timestamp>2012-05-01T17:20:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/basic_stringstream/rdbuf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/sstream/start</title>
    <ns>0</ns>
    <id>6792</id>
    <redirect title="cpp/io/basic stringstream" />
    <revision>
      <id>26563</id>
      <parentid>26562</parentid>
      <timestamp>2012-05-01T17:20:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/io/basic_stringstream]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/sstream/str</title>
    <ns>0</ns>
    <id>6794</id>
    <redirect title="cpp/io/basic stringstream/str" />
    <revision>
      <id>26567</id>
      <parentid>26566</parentid>
      <timestamp>2012-05-01T17:20:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/io/basic_stringstream/str]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/start</title>
    <ns>0</ns>
    <id>6823</id>
    <redirect title="cpp/io" />
    <revision>
      <id>26625</id>
      <parentid>26624</parentid>
      <timestamp>2012-05-01T17:20:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="20">#redirect [[cpp/io]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/sync with stdio</title>
    <ns>0</ns>
    <id>6825</id>
    <redirect title="cpp/io/ios base/sync with stdio" />
    <revision>
      <id>26629</id>
      <parentid>26628</parentid>
      <timestamp>2012-05-01T17:20:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/io/ios_base/sync_with_stdio]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/tellg</title>
    <ns>0</ns>
    <id>6826</id>
    <redirect title="cpp/io/basic istream/tellg" />
    <revision>
      <id>26631</id>
      <parentid>26630</parentid>
      <timestamp>2012-05-01T17:20:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_istream/tellg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/tellp</title>
    <ns>0</ns>
    <id>6827</id>
    <redirect title="cpp/io/basic ostream/tellp" />
    <revision>
      <id>26633</id>
      <parentid>26632</parentid>
      <timestamp>2012-05-01T17:20:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/tellp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/unsetf</title>
    <ns>0</ns>
    <id>6828</id>
    <redirect title="cpp/io/ios base/unsetf" />
    <revision>
      <id>29740</id>
      <parentid>26635</parentid>
      <timestamp>2012-05-01T18:07:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/ios base/unsetf]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/io/ios_base/unsetf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/width</title>
    <ns>0</ns>
    <id>6829</id>
    <redirect title="cpp/io/ios base/width" />
    <revision>
      <id>29741</id>
      <parentid>26637</parentid>
      <timestamp>2012-05-01T18:07:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/io/ios base/width]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/io/ios_base/width]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/io/write</title>
    <ns>0</ns>
    <id>6830</id>
    <redirect title="cpp/io/basic ostream/write" />
    <revision>
      <id>26639</id>
      <parentid>26638</parentid>
      <timestamp>2012-05-01T17:20:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/io/basic_ostream/write]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/iterator/</title>
    <ns>0</ns>
    <id>6832</id>
    <redirect title="cpp/iterator" />
    <revision>
      <id>26643</id>
      <parentid>26642</parentid>
      <timestamp>2012-05-01T17:20:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/iterator/start</title>
    <ns>0</ns>
    <id>6831</id>
    <redirect title="cpp/iterator" />
    <revision>
      <id>26641</id>
      <parentid>26640</parentid>
      <timestamp>2012-05-01T17:20:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/</title>
    <ns>0</ns>
    <id>6893</id>
    <redirect title="cpp/keyword" />
    <revision>
      <id>46083</id>
      <parentid>26765</parentid>
      <timestamp>2013-02-15T21:49:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/keyword]]</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[cpp/keyword]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/alignof</title>
    <ns>0</ns>
    <id>6833</id>
    <redirect title="cpp/keyword/alignof" />
    <revision>
      <id>36143</id>
      <parentid>26645</parentid>
      <timestamp>2012-06-17T12:15:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/alignof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/alternative operators</title>
    <ns>0</ns>
    <id>6834</id>
    <redirect title="cpp/language/operator alternative" />
    <revision>
      <id>26647</id>
      <parentid>26646</parentid>
      <timestamp>2012-05-01T17:20:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/language/operator_alternative]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/and</title>
    <ns>0</ns>
    <id>6835</id>
    <redirect title="cpp/keyword/and" />
    <revision>
      <id>36144</id>
      <parentid>26649</parentid>
      <timestamp>2012-06-17T12:16:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/and]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/and eq</title>
    <ns>0</ns>
    <id>6836</id>
    <redirect title="cpp/keyword/and eq" />
    <revision>
      <id>36145</id>
      <parentid>26651</parentid>
      <timestamp>2012-06-17T12:17:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/and_eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/asm</title>
    <ns>0</ns>
    <id>6837</id>
    <redirect title="cpp/keyword/asm" />
    <revision>
      <id>36146</id>
      <parentid>26653</parentid>
      <timestamp>2012-06-17T12:17:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/asm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/auto</title>
    <ns>0</ns>
    <id>6838</id>
    <redirect title="cpp/keyword/auto" />
    <revision>
      <id>36147</id>
      <parentid>26655</parentid>
      <timestamp>2012-06-17T12:17:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/auto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/bitand</title>
    <ns>0</ns>
    <id>6839</id>
    <redirect title="cpp/keyword/bitand" />
    <revision>
      <id>36148</id>
      <parentid>26657</parentid>
      <timestamp>2012-06-17T12:18:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/bitand]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/bitor</title>
    <ns>0</ns>
    <id>6840</id>
    <redirect title="cpp/keyword/bitor" />
    <revision>
      <id>36149</id>
      <parentid>26659</parentid>
      <timestamp>2012-06-17T12:20:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/bitor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/bool</title>
    <ns>0</ns>
    <id>6841</id>
    <redirect title="cpp/keyword/bool" />
    <revision>
      <id>36150</id>
      <parentid>26661</parentid>
      <timestamp>2012-06-17T12:21:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/bool]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/break</title>
    <ns>0</ns>
    <id>6842</id>
    <redirect title="cpp/keyword/break" />
    <revision>
      <id>36151</id>
      <parentid>26663</parentid>
      <timestamp>2012-06-17T12:21:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/break]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/case</title>
    <ns>0</ns>
    <id>6843</id>
    <redirect title="cpp/keyword/case" />
    <revision>
      <id>36152</id>
      <parentid>26665</parentid>
      <timestamp>2012-06-17T12:21:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/case]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/casting comparison</title>
    <ns>0</ns>
    <id>6844</id>
    <redirect title="cpp/language/explicit cast" />
    <revision>
      <id>26667</id>
      <parentid>26666</parentid>
      <timestamp>2012-05-01T17:20:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/language/explicit_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/catch</title>
    <ns>0</ns>
    <id>6845</id>
    <redirect title="cpp/keyword/catch" />
    <revision>
      <id>36153</id>
      <parentid>26669</parentid>
      <timestamp>2012-06-17T12:21:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/catch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/char</title>
    <ns>0</ns>
    <id>6846</id>
    <redirect title="cpp/keyword/char" />
    <revision>
      <id>36155</id>
      <parentid>26671</parentid>
      <timestamp>2012-06-17T12:21:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/char]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/char16 t</title>
    <ns>0</ns>
    <id>6847</id>
    <redirect title="cpp/keyword/char16 t" />
    <revision>
      <id>36156</id>
      <parentid>26673</parentid>
      <timestamp>2012-06-17T12:21:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/char16_t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/char32 t</title>
    <ns>0</ns>
    <id>6848</id>
    <redirect title="cpp/keyword/char32 t" />
    <revision>
      <id>36158</id>
      <parentid>26675</parentid>
      <timestamp>2012-06-17T12:21:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/char32_t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/class</title>
    <ns>0</ns>
    <id>6849</id>
    <redirect title="cpp/keyword/class" />
    <revision>
      <id>36159</id>
      <parentid>26677</parentid>
      <timestamp>2012-06-17T12:21:58Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/class]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/compl</title>
    <ns>0</ns>
    <id>6850</id>
    <redirect title="cpp/keyword/compl" />
    <revision>
      <id>36160</id>
      <parentid>26679</parentid>
      <timestamp>2012-06-17T12:22:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/compl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/const</title>
    <ns>0</ns>
    <id>6851</id>
    <redirect title="cpp/keyword/const" />
    <revision>
      <id>36161</id>
      <parentid>26681</parentid>
      <timestamp>2012-06-17T12:22:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/const]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/const cast</title>
    <ns>0</ns>
    <id>6852</id>
    <redirect title="cpp/keyword/const cast" />
    <revision>
      <id>36162</id>
      <parentid>26683</parentid>
      <timestamp>2012-06-17T12:23:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/keyword/const_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/constexpr</title>
    <ns>0</ns>
    <id>6853</id>
    <redirect title="cpp/keyword/constexpr" />
    <revision>
      <id>36163</id>
      <parentid>26685</parentid>
      <timestamp>2012-06-17T12:24:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/keyword/constexpr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/continue</title>
    <ns>0</ns>
    <id>6854</id>
    <redirect title="cpp/keyword/continue" />
    <revision>
      <id>36164</id>
      <parentid>26687</parentid>
      <timestamp>2012-06-17T12:24:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/continue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/default</title>
    <ns>0</ns>
    <id>6855</id>
    <redirect title="cpp/keyword/default" />
    <revision>
      <id>36165</id>
      <parentid>26689</parentid>
      <timestamp>2012-06-17T12:24:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/default]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/delete</title>
    <ns>0</ns>
    <id>6856</id>
    <redirect title="cpp/keyword/delete" />
    <revision>
      <id>36137</id>
      <parentid>26691</parentid>
      <timestamp>2012-06-17T12:11:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/keyword/delete]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/delete]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/do</title>
    <ns>0</ns>
    <id>6857</id>
    <redirect title="cpp/keyword/do" />
    <revision>
      <id>36166</id>
      <parentid>26693</parentid>
      <timestamp>2012-06-17T12:25:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/keyword/do]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/double</title>
    <ns>0</ns>
    <id>6858</id>
    <redirect title="cpp/keyword/double" />
    <revision>
      <id>36167</id>
      <parentid>26695</parentid>
      <timestamp>2012-06-17T12:25:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/double]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/dynamic cast</title>
    <ns>0</ns>
    <id>6859</id>
    <redirect title="cpp/keyword/dynamic cast" />
    <revision>
      <id>36168</id>
      <parentid>26697</parentid>
      <timestamp>2012-06-17T12:26:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/keyword/dynamic_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/else</title>
    <ns>0</ns>
    <id>6860</id>
    <redirect title="cpp/keyword/else" />
    <revision>
      <id>36169</id>
      <parentid>26699</parentid>
      <timestamp>2012-06-17T12:26:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/else]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/enum</title>
    <ns>0</ns>
    <id>6861</id>
    <redirect title="cpp/keyword/enum" />
    <revision>
      <id>36170</id>
      <parentid>26701</parentid>
      <timestamp>2012-06-17T12:26:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/enum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/explicit</title>
    <ns>0</ns>
    <id>6862</id>
    <redirect title="cpp/keyword/explicit" />
    <revision>
      <id>36171</id>
      <parentid>26703</parentid>
      <timestamp>2012-06-17T12:26:50Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/explicit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/export</title>
    <ns>0</ns>
    <id>6863</id>
    <redirect title="cpp/keyword/export" />
    <revision>
      <id>36172</id>
      <parentid>26705</parentid>
      <timestamp>2012-06-17T12:27:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/export]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/extern</title>
    <ns>0</ns>
    <id>6864</id>
    <redirect title="cpp/keyword/extern" />
    <revision>
      <id>36173</id>
      <parentid>26707</parentid>
      <timestamp>2012-06-17T12:27:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/extern]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/false</title>
    <ns>0</ns>
    <id>6865</id>
    <redirect title="cpp/keyword/false" />
    <revision>
      <id>36174</id>
      <parentid>26709</parentid>
      <timestamp>2012-06-17T12:27:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/false]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/float</title>
    <ns>0</ns>
    <id>6866</id>
    <redirect title="cpp/keyword/float" />
    <revision>
      <id>36175</id>
      <parentid>26711</parentid>
      <timestamp>2012-06-17T12:28:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/float]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/for</title>
    <ns>0</ns>
    <id>6867</id>
    <redirect title="cpp/keyword/for" />
    <revision>
      <id>36176</id>
      <parentid>26713</parentid>
      <timestamp>2012-06-17T12:28:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/friend</title>
    <ns>0</ns>
    <id>6868</id>
    <redirect title="cpp/keyword/friend" />
    <revision>
      <id>36177</id>
      <parentid>26715</parentid>
      <timestamp>2012-06-17T12:28:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/friend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/goto</title>
    <ns>0</ns>
    <id>6869</id>
    <redirect title="cpp/keyword/goto" />
    <revision>
      <id>36178</id>
      <parentid>26717</parentid>
      <timestamp>2012-06-17T12:29:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/goto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/if</title>
    <ns>0</ns>
    <id>6870</id>
    <redirect title="cpp/keyword/if" />
    <revision>
      <id>36179</id>
      <parentid>26719</parentid>
      <timestamp>2012-06-17T12:29:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/keyword/if]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/inline</title>
    <ns>0</ns>
    <id>6871</id>
    <redirect title="cpp/keyword/inline" />
    <revision>
      <id>36180</id>
      <parentid>26721</parentid>
      <timestamp>2012-06-17T12:29:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/inline]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/int</title>
    <ns>0</ns>
    <id>6872</id>
    <redirect title="cpp/keyword/int" />
    <revision>
      <id>36181</id>
      <parentid>26723</parentid>
      <timestamp>2012-06-17T12:30:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/int]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/long</title>
    <ns>0</ns>
    <id>6873</id>
    <redirect title="cpp/keyword/long" />
    <revision>
      <id>36182</id>
      <parentid>26725</parentid>
      <timestamp>2012-06-17T12:30:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/long]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/mutable</title>
    <ns>0</ns>
    <id>6874</id>
    <redirect title="cpp/keyword/mutable" />
    <revision>
      <id>36183</id>
      <parentid>26727</parentid>
      <timestamp>2012-06-17T12:30:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/mutable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/namespace</title>
    <ns>0</ns>
    <id>6875</id>
    <redirect title="cpp/keyword/namespace" />
    <revision>
      <id>36184</id>
      <parentid>26729</parentid>
      <timestamp>2012-06-17T12:30:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/keyword/namespace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/new</title>
    <ns>0</ns>
    <id>6876</id>
    <redirect title="cpp/keyword/new" />
    <revision>
      <id>36185</id>
      <parentid>26731</parentid>
      <timestamp>2012-06-17T12:30:13Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/new]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/noexcept</title>
    <ns>0</ns>
    <id>6877</id>
    <redirect title="cpp/keyword/noexcept" />
    <revision>
      <id>36186</id>
      <parentid>26733</parentid>
      <timestamp>2012-06-17T12:30:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/noexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/not</title>
    <ns>0</ns>
    <id>6878</id>
    <redirect title="cpp/keyword/not" />
    <revision>
      <id>36187</id>
      <parentid>26735</parentid>
      <timestamp>2012-06-17T12:30:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/not]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/not eq</title>
    <ns>0</ns>
    <id>6879</id>
    <redirect title="cpp/keyword/not eq" />
    <revision>
      <id>36188</id>
      <parentid>26737</parentid>
      <timestamp>2012-06-17T12:30:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/not_eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/operator</title>
    <ns>0</ns>
    <id>6880</id>
    <redirect title="cpp/keyword/operator" />
    <revision>
      <id>36189</id>
      <parentid>26739</parentid>
      <timestamp>2012-06-17T12:30:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/operator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/or</title>
    <ns>0</ns>
    <id>6881</id>
    <redirect title="cpp/keyword/or" />
    <revision>
      <id>36190</id>
      <parentid>26741</parentid>
      <timestamp>2012-06-17T12:30:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/keyword/or]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/or eq</title>
    <ns>0</ns>
    <id>6882</id>
    <redirect title="cpp/keyword/or eq" />
    <revision>
      <id>36191</id>
      <parentid>26743</parentid>
      <timestamp>2012-06-17T12:30:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/or_eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/private</title>
    <ns>0</ns>
    <id>6883</id>
    <redirect title="cpp/keyword/private" />
    <revision>
      <id>36192</id>
      <parentid>26745</parentid>
      <timestamp>2012-06-17T12:30:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/private]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/protected</title>
    <ns>0</ns>
    <id>6884</id>
    <redirect title="cpp/keyword/protected" />
    <revision>
      <id>36193</id>
      <parentid>26747</parentid>
      <timestamp>2012-06-17T12:30:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/keyword/protected]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/public</title>
    <ns>0</ns>
    <id>6885</id>
    <redirect title="cpp/keyword/public" />
    <revision>
      <id>36194</id>
      <parentid>26749</parentid>
      <timestamp>2012-06-17T12:30:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/public]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/register</title>
    <ns>0</ns>
    <id>6886</id>
    <redirect title="cpp/keyword/register" />
    <revision>
      <id>36195</id>
      <parentid>26751</parentid>
      <timestamp>2012-06-17T12:30:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/register]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/reinterpret cast</title>
    <ns>0</ns>
    <id>6887</id>
    <redirect title="cpp/keyword/reinterpret cast" />
    <revision>
      <id>36196</id>
      <parentid>26753</parentid>
      <timestamp>2012-06-17T12:30:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/keyword/reinterpret_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/return</title>
    <ns>0</ns>
    <id>6888</id>
    <redirect title="cpp/keyword/return" />
    <revision>
      <id>36197</id>
      <parentid>26755</parentid>
      <timestamp>2012-06-17T12:30:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/return]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/short</title>
    <ns>0</ns>
    <id>6889</id>
    <redirect title="cpp/keyword/short" />
    <revision>
      <id>36198</id>
      <parentid>26757</parentid>
      <timestamp>2012-06-17T12:32:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/short]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/signed</title>
    <ns>0</ns>
    <id>6890</id>
    <redirect title="cpp/keyword/signed" />
    <revision>
      <id>36199</id>
      <parentid>26759</parentid>
      <timestamp>2012-06-17T12:33:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/signed]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/sizeof</title>
    <ns>0</ns>
    <id>6891</id>
    <redirect title="cpp/keyword/sizeof" />
    <revision>
      <id>36142</id>
      <parentid>26761</parentid>
      <timestamp>2012-06-17T12:12:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/keyword/sizeof]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/sizeof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/start</title>
    <ns>0</ns>
    <id>6892</id>
    <redirect title="cpp/keyword" />
    <revision>
      <id>46082</id>
      <parentid>26763</parentid>
      <timestamp>2013-02-15T21:49:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/keyword]]</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[cpp/keyword]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/static</title>
    <ns>0</ns>
    <id>6894</id>
    <redirect title="cpp/keyword/static" />
    <revision>
      <id>36200</id>
      <parentid>26767</parentid>
      <timestamp>2012-06-17T12:33:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/static]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/static cast</title>
    <ns>0</ns>
    <id>6895</id>
    <redirect title="cpp/keyword/static cast" />
    <revision>
      <id>36201</id>
      <parentid>26769</parentid>
      <timestamp>2012-06-17T12:35:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/keyword/static_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/struct</title>
    <ns>0</ns>
    <id>6896</id>
    <redirect title="cpp/keyword/struct" />
    <revision>
      <id>36202</id>
      <parentid>26771</parentid>
      <timestamp>2012-06-17T12:35:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/struct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/switch</title>
    <ns>0</ns>
    <id>6897</id>
    <redirect title="cpp/keyword/switch" />
    <revision>
      <id>36203</id>
      <parentid>26773</parentid>
      <timestamp>2012-06-17T12:35:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/switch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/template</title>
    <ns>0</ns>
    <id>6898</id>
    <redirect title="cpp/keyword/template" />
    <revision>
      <id>36204</id>
      <parentid>26775</parentid>
      <timestamp>2012-06-17T12:36:07Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/template]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/this</title>
    <ns>0</ns>
    <id>6899</id>
    <redirect title="cpp/keyword/this" />
    <revision>
      <id>36205</id>
      <parentid>26777</parentid>
      <timestamp>2012-06-17T12:36:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/this]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/thread local</title>
    <ns>0</ns>
    <id>6900</id>
    <redirect title="cpp/keyword/thread local" />
    <revision>
      <id>36206</id>
      <parentid>26779</parentid>
      <timestamp>2012-06-17T12:36:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/keyword/thread_local]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/throw</title>
    <ns>0</ns>
    <id>6901</id>
    <redirect title="cpp/keyword/throw" />
    <revision>
      <id>36207</id>
      <parentid>26781</parentid>
      <timestamp>2012-06-17T12:38:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/throw]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/true</title>
    <ns>0</ns>
    <id>6902</id>
    <redirect title="cpp/keyword/true" />
    <revision>
      <id>36208</id>
      <parentid>26783</parentid>
      <timestamp>2012-06-17T12:38:38Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/true]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/try</title>
    <ns>0</ns>
    <id>6903</id>
    <redirect title="cpp/keyword/try" />
    <revision>
      <id>36209</id>
      <parentid>26785</parentid>
      <timestamp>2012-06-17T12:39:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/try]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/typedef</title>
    <ns>0</ns>
    <id>6904</id>
    <redirect title="cpp/keyword/typedef" />
    <revision>
      <id>36210</id>
      <parentid>26787</parentid>
      <timestamp>2012-06-17T12:40:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/typedef]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/typeid</title>
    <ns>0</ns>
    <id>6905</id>
    <redirect title="cpp/keyword/typeid" />
    <revision>
      <id>36211</id>
      <parentid>26789</parentid>
      <timestamp>2012-06-17T12:40:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/typeid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/typename</title>
    <ns>0</ns>
    <id>6906</id>
    <redirect title="cpp/keyword/typename" />
    <revision>
      <id>36212</id>
      <parentid>26791</parentid>
      <timestamp>2012-06-17T12:41:21Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/keyword/typename]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/union</title>
    <ns>0</ns>
    <id>6907</id>
    <redirect title="cpp/keyword/union" />
    <revision>
      <id>36213</id>
      <parentid>26793</parentid>
      <timestamp>2012-06-17T12:41:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/union]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/unsigned</title>
    <ns>0</ns>
    <id>6908</id>
    <redirect title="cpp/keyword/while" />
    <revision>
      <id>36215</id>
      <parentid>26795</parentid>
      <timestamp>2012-06-17T12:41:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/while]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/using</title>
    <ns>0</ns>
    <id>6909</id>
    <redirect title="cpp/keyword/using" />
    <revision>
      <id>36216</id>
      <parentid>26797</parentid>
      <timestamp>2012-06-17T12:42:09Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/using]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/virtual</title>
    <ns>0</ns>
    <id>6910</id>
    <redirect title="cpp/keyword/virtual" />
    <revision>
      <id>36217</id>
      <parentid>26799</parentid>
      <timestamp>2012-06-17T12:42:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/virtual]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/void</title>
    <ns>0</ns>
    <id>6911</id>
    <redirect title="cpp/keyword/void" />
    <revision>
      <id>36218</id>
      <parentid>26801</parentid>
      <timestamp>2012-06-17T12:42:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/keyword/void]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/volatile</title>
    <ns>0</ns>
    <id>6912</id>
    <redirect title="cpp/keyword/mutable" />
    <revision>
      <id>36214</id>
      <parentid>26803</parentid>
      <timestamp>2012-06-17T12:41:26Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/mutable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/wchar t</title>
    <ns>0</ns>
    <id>6913</id>
    <redirect title="cpp/keyword/wchar t" />
    <revision>
      <id>36219</id>
      <parentid>26805</parentid>
      <timestamp>2012-06-17T12:42:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/keyword/wchar_t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/while</title>
    <ns>0</ns>
    <id>6914</id>
    <redirect title="cpp/keyword/while" />
    <revision>
      <id>36220</id>
      <parentid>26807</parentid>
      <timestamp>2012-06-17T12:42:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/keyword/while]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/xor</title>
    <ns>0</ns>
    <id>6915</id>
    <redirect title="cpp/keyword/xor" />
    <revision>
      <id>36221</id>
      <parentid>26809</parentid>
      <timestamp>2012-06-17T12:43:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/keyword/xor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/keywords/xor eq</title>
    <ns>0</ns>
    <id>6916</id>
    <redirect title="cpp/keyword/xor eq" />
    <revision>
      <id>36222</id>
      <parentid>26811</parentid>
      <timestamp>2012-06-17T12:43:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;cpp/keywords/&quot; to &quot;cpp/keyword/&quot;</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/keyword/xor_eq]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/</title>
    <ns>0</ns>
    <id>6947</id>
    <redirect title="cpp/language" />
    <revision>
      <id>29770</id>
      <parentid>26873</parentid>
      <timestamp>2012-05-01T18:12:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/language]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/alignof</title>
    <ns>0</ns>
    <id>6917</id>
    <redirect title="cpp/language/alignof" />
    <revision>
      <id>26813</id>
      <parentid>26812</parentid>
      <timestamp>2012-05-01T17:21:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/language/alignof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/ascii</title>
    <ns>0</ns>
    <id>6918</id>
    <redirect title="cpp/language/ascii" />
    <revision>
      <id>26815</id>
      <parentid>26814</parentid>
      <timestamp>2012-05-01T17:21:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/language/ascii]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/auto</title>
    <ns>0</ns>
    <id>6919</id>
    <redirect title="cpp/language/auto" />
    <revision>
      <id>26817</id>
      <parentid>26816</parentid>
      <timestamp>2012-05-01T17:21:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/language/auto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/break</title>
    <ns>0</ns>
    <id>6920</id>
    <redirect title="cpp/language/break" />
    <revision>
      <id>26819</id>
      <parentid>26818</parentid>
      <timestamp>2012-05-01T17:21:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/language/break]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/constexpr</title>
    <ns>0</ns>
    <id>6921</id>
    <redirect title="cpp/language/constexpr" />
    <revision>
      <id>26821</id>
      <parentid>26820</parentid>
      <timestamp>2012-05-01T17:21:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/language/constexpr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/continue</title>
    <ns>0</ns>
    <id>6922</id>
    <redirect title="cpp/language/continue" />
    <revision>
      <id>26823</id>
      <parentid>26822</parentid>
      <timestamp>2012-05-01T17:21:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/language/continue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/cv</title>
    <ns>0</ns>
    <id>6923</id>
    <redirect title="cpp/language/cv" />
    <revision>
      <id>26825</id>
      <parentid>26824</parentid>
      <timestamp>2012-05-01T17:21:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/language/cv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/delete</title>
    <ns>0</ns>
    <id>6924</id>
    <redirect title="cpp/language/delete" />
    <revision>
      <id>26827</id>
      <parentid>26826</parentid>
      <timestamp>2012-05-01T17:21:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/language/delete]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/do</title>
    <ns>0</ns>
    <id>6925</id>
    <redirect title="cpp/language/do" />
    <revision>
      <id>26829</id>
      <parentid>26828</parentid>
      <timestamp>2012-05-01T17:21:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/language/do]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/escape</title>
    <ns>0</ns>
    <id>6926</id>
    <redirect title="cpp/language/escape" />
    <revision>
      <id>26831</id>
      <parentid>26830</parentid>
      <timestamp>2012-05-01T17:21:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/language/escape]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/explicit cast</title>
    <ns>0</ns>
    <id>6927</id>
    <redirect title="cpp/language/explicit cast" />
    <revision>
      <id>26833</id>
      <parentid>26832</parentid>
      <timestamp>2012-05-01T17:21:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/language/explicit_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/for</title>
    <ns>0</ns>
    <id>6928</id>
    <redirect title="cpp/language/for" />
    <revision>
      <id>26835</id>
      <parentid>26834</parentid>
      <timestamp>2012-05-01T17:21:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/language/for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/goto</title>
    <ns>0</ns>
    <id>6929</id>
    <redirect title="cpp/language/goto" />
    <revision>
      <id>26837</id>
      <parentid>26836</parentid>
      <timestamp>2012-05-01T17:21:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/language/goto]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/if</title>
    <ns>0</ns>
    <id>6930</id>
    <redirect title="cpp/language/if" />
    <revision>
      <id>26839</id>
      <parentid>26838</parentid>
      <timestamp>2012-05-01T17:21:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/language/if]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/implicit cast</title>
    <ns>0</ns>
    <id>6931</id>
    <redirect title="cpp/language/implicit cast" />
    <revision>
      <id>26841</id>
      <parentid>26840</parentid>
      <timestamp>2012-05-01T17:21:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/language/implicit_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/new</title>
    <ns>0</ns>
    <id>6932</id>
    <redirect title="cpp/language/new" />
    <revision>
      <id>26843</id>
      <parentid>26842</parentid>
      <timestamp>2012-05-01T17:21:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/language/new]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/noexcept</title>
    <ns>0</ns>
    <id>6933</id>
    <redirect title="cpp/language/noexcept" />
    <revision>
      <id>26845</id>
      <parentid>26844</parentid>
      <timestamp>2012-05-01T17:21:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/language/noexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/noexcept spec</title>
    <ns>0</ns>
    <id>6934</id>
    <redirect title="cpp/language/noexcept" />
    <revision>
      <id>29761</id>
      <parentid>29760</parentid>
      <timestamp>2012-05-01T18:10:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/noexcept]]</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/language/noexcept]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operator alternative</title>
    <ns>0</ns>
    <id>6935</id>
    <redirect title="cpp/language/operator alternative" />
    <revision>
      <id>26849</id>
      <parentid>26848</parentid>
      <timestamp>2012-05-01T17:21:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/language/operator_alternative]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operator precedence</title>
    <ns>0</ns>
    <id>6936</id>
    <redirect title="cpp/language/operator precedence" />
    <revision>
      <id>26851</id>
      <parentid>26850</parentid>
      <timestamp>2012-05-01T17:21:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/language/operator_precedence]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operators</title>
    <ns>0</ns>
    <id>6937</id>
    <redirect title="cpp/language/operators" />
    <revision>
      <id>26853</id>
      <parentid>26852</parentid>
      <timestamp>2012-05-01T17:21:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/language/operators]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operators arithmetic</title>
    <ns>0</ns>
    <id>6938</id>
    <redirect title="cpp/language/operator arithmetic" />
    <revision>
      <id>29762</id>
      <parentid>26855</parentid>
      <timestamp>2012-05-01T18:11:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/operator arithmetic]]</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/language/operator_arithmetic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operators assignment</title>
    <ns>0</ns>
    <id>6939</id>
    <redirect title="cpp/language/operator assignment" />
    <revision>
      <id>29763</id>
      <parentid>26857</parentid>
      <timestamp>2012-05-01T18:11:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/operator assignment]]</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/language/operator_assignment]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operators comparison</title>
    <ns>0</ns>
    <id>6940</id>
    <redirect title="cpp/language/operator comparison" />
    <revision>
      <id>37257</id>
      <parentid>36242</parentid>
      <timestamp>2012-07-03T17:30:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>fix</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/language/operator_comparison]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operators incdec</title>
    <ns>0</ns>
    <id>6941</id>
    <redirect title="cpp/language/operator incdec" />
    <revision>
      <id>29765</id>
      <parentid>26861</parentid>
      <timestamp>2012-05-01T18:12:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/operator incdec]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/language/operator_incdec]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operators member</title>
    <ns>0</ns>
    <id>6942</id>
    <redirect title="cpp/language/operator member access" />
    <revision>
      <id>29769</id>
      <parentid>29766</parentid>
      <timestamp>2012-05-01T18:12:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/operator member access]]</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/language/operator_member_access]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/operators other</title>
    <ns>0</ns>
    <id>6943</id>
    <redirect title="cpp/language/operator other" />
    <revision>
      <id>29767</id>
      <parentid>26865</parentid>
      <timestamp>2012-05-01T18:12:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/operator other]]</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/language/operator_other]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/return</title>
    <ns>0</ns>
    <id>6944</id>
    <redirect title="cpp/language/return" />
    <revision>
      <id>26867</id>
      <parentid>26866</parentid>
      <timestamp>2012-05-01T17:21:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/language/return]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/sizeof</title>
    <ns>0</ns>
    <id>6945</id>
    <redirect title="cpp/language/sizeof" />
    <revision>
      <id>26869</id>
      <parentid>26868</parentid>
      <timestamp>2012-05-01T17:21:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/language/sizeof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/start</title>
    <ns>0</ns>
    <id>6946</id>
    <redirect title="cpp/language" />
    <revision>
      <id>29768</id>
      <parentid>26871</parentid>
      <timestamp>2012-05-01T18:12:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language]]</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/language]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/storage duration</title>
    <ns>0</ns>
    <id>6948</id>
    <redirect title="cpp/language/storage duration" />
    <revision>
      <id>26875</id>
      <parentid>26874</parentid>
      <timestamp>2012-05-01T17:21:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/language/storage_duration]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/switch</title>
    <ns>0</ns>
    <id>6949</id>
    <redirect title="cpp/language/switch" />
    <revision>
      <id>26877</id>
      <parentid>26876</parentid>
      <timestamp>2012-05-01T17:21:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/language/switch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/throw</title>
    <ns>0</ns>
    <id>6950</id>
    <redirect title="cpp/language/throw" />
    <revision>
      <id>26879</id>
      <parentid>26878</parentid>
      <timestamp>2012-05-01T17:21:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/language/throw]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/throw spec</title>
    <ns>0</ns>
    <id>6951</id>
    <redirect title="cpp/language/except spec" />
    <revision>
      <id>29771</id>
      <parentid>26881</parentid>
      <timestamp>2012-05-01T18:12:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/language/except spec]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/language/except_spec]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/try catch</title>
    <ns>0</ns>
    <id>6952</id>
    <redirect title="cpp/language/try catch" />
    <revision>
      <id>26883</id>
      <parentid>26882</parentid>
      <timestamp>2012-05-01T17:21:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/language/try_catch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/typeid</title>
    <ns>0</ns>
    <id>6953</id>
    <redirect title="cpp/language/typeid" />
    <revision>
      <id>26885</id>
      <parentid>26884</parentid>
      <timestamp>2012-05-01T17:21:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/language/typeid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/types</title>
    <ns>0</ns>
    <id>6954</id>
    <redirect title="cpp/language/types" />
    <revision>
      <id>26887</id>
      <parentid>26886</parentid>
      <timestamp>2012-05-01T17:21:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/language/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/language/while</title>
    <ns>0</ns>
    <id>6955</id>
    <redirect title="cpp/language/while" />
    <revision>
      <id>26889</id>
      <parentid>26888</parentid>
      <timestamp>2012-05-01T17:21:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/language/while]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/limits/</title>
    <ns>0</ns>
    <id>6958</id>
    <redirect title="cpp/types" />
    <revision>
      <id>46113</id>
      <parentid>26895</parentid>
      <timestamp>2013-02-15T21:50:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/limits/numeric limits</title>
    <ns>0</ns>
    <id>6956</id>
    <redirect title="cpp/types/numeric limits" />
    <revision>
      <id>46120</id>
      <parentid>26891</parentid>
      <timestamp>2013-02-15T21:51:20Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types/numeric limits]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/types/numeric limits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/limits/start</title>
    <ns>0</ns>
    <id>6957</id>
    <redirect title="cpp/types" />
    <revision>
      <id>46112</id>
      <parentid>26893</parentid>
      <timestamp>2013-02-15T21:50:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/locale/</title>
    <ns>0</ns>
    <id>6960</id>
    <redirect title="cpp/locale" />
    <revision>
      <id>26899</id>
      <parentid>26898</parentid>
      <timestamp>2012-05-01T17:21:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/locale]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/locale/c/setlocale</title>
    <ns>0</ns>
    <id>6959</id>
    <redirect title="cpp/locale/setlocale" />
    <revision>
      <id>26897</id>
      <parentid>26896</parentid>
      <timestamp>2012-05-01T17:21:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/locale/setlocale]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/locale/start</title>
    <ns>0</ns>
    <id>6961</id>
    <redirect title="cpp/locale" />
    <revision>
      <id>26901</id>
      <parentid>26900</parentid>
      <timestamp>2012-05-01T17:21:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/locale]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/</title>
    <ns>0</ns>
    <id>6978</id>
    <redirect title="cpp/memory" />
    <revision>
      <id>26935</id>
      <parentid>26934</parentid>
      <timestamp>2012-05-01T17:21:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/memory]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/allocator/</title>
    <ns>0</ns>
    <id>6963</id>
    <redirect title="cpp/memory/allocator" />
    <revision>
      <id>26905</id>
      <parentid>26904</parentid>
      <timestamp>2012-05-01T17:21:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/memory/allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/allocator/start</title>
    <ns>0</ns>
    <id>6962</id>
    <redirect title="cpp/memory/allocator" />
    <revision>
      <id>26903</id>
      <parentid>26902</parentid>
      <timestamp>2012-05-01T17:21:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/memory/allocator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/auto ptr/</title>
    <ns>0</ns>
    <id>6965</id>
    <redirect title="cpp/memory/auto ptr" />
    <revision>
      <id>26909</id>
      <parentid>26908</parentid>
      <timestamp>2012-05-01T17:21:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/memory/auto_ptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/auto ptr/start</title>
    <ns>0</ns>
    <id>6964</id>
    <redirect title="cpp/memory/auto ptr" />
    <revision>
      <id>26907</id>
      <parentid>26906</parentid>
      <timestamp>2012-05-01T17:21:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/memory/auto_ptr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/c/</title>
    <ns>0</ns>
    <id>6971</id>
    <redirect title="cpp/memory/c" />
    <revision>
      <id>26921</id>
      <parentid>26920</parentid>
      <timestamp>2012-05-01T17:21:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/memory/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/c/calloc</title>
    <ns>0</ns>
    <id>6966</id>
    <redirect title="cpp/memory/c/calloc" />
    <revision>
      <id>26911</id>
      <parentid>26910</parentid>
      <timestamp>2012-05-01T17:21:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/memory/c/calloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/c/free</title>
    <ns>0</ns>
    <id>6967</id>
    <redirect title="cpp/memory/c/free" />
    <revision>
      <id>26913</id>
      <parentid>26912</parentid>
      <timestamp>2012-05-01T17:21:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/memory/c/free]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/c/malloc</title>
    <ns>0</ns>
    <id>6968</id>
    <redirect title="cpp/memory/c/malloc" />
    <revision>
      <id>26915</id>
      <parentid>26914</parentid>
      <timestamp>2012-05-01T17:21:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/memory/c/malloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/c/realloc</title>
    <ns>0</ns>
    <id>6969</id>
    <redirect title="cpp/memory/c/realloc" />
    <revision>
      <id>26917</id>
      <parentid>26916</parentid>
      <timestamp>2012-05-01T17:21:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/memory/c/realloc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/c/start</title>
    <ns>0</ns>
    <id>6970</id>
    <redirect title="cpp/memory/c" />
    <revision>
      <id>26919</id>
      <parentid>26918</parentid>
      <timestamp>2012-05-01T17:21:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/memory/c]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/new/</title>
    <ns>0</ns>
    <id>6976</id>
    <redirect title="cpp/memory/new" />
    <revision>
      <id>26931</id>
      <parentid>26930</parentid>
      <timestamp>2012-05-01T17:21:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/memory/new]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/new/nothrow t</title>
    <ns>0</ns>
    <id>6972</id>
    <redirect title="cpp/memory/new/nothrow t" />
    <revision>
      <id>26923</id>
      <parentid>26922</parentid>
      <timestamp>2012-05-01T17:21:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/memory/new/nothrow_t]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/new/operator delete</title>
    <ns>0</ns>
    <id>6973</id>
    <redirect title="cpp/memory/new/operator delete" />
    <revision>
      <id>26925</id>
      <parentid>26924</parentid>
      <timestamp>2012-05-01T17:21:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/memory/new/operator_delete]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/new/operator new</title>
    <ns>0</ns>
    <id>6974</id>
    <redirect title="cpp/memory/new/operator new" />
    <revision>
      <id>26927</id>
      <parentid>26926</parentid>
      <timestamp>2012-05-01T17:21:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/memory/new/operator_new]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/new/start</title>
    <ns>0</ns>
    <id>6975</id>
    <redirect title="cpp/memory/new" />
    <revision>
      <id>26929</id>
      <parentid>26928</parentid>
      <timestamp>2012-05-01T17:21:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="28">#redirect [[cpp/memory/new]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/memory/start</title>
    <ns>0</ns>
    <id>6977</id>
    <redirect title="cpp/memory" />
    <revision>
      <id>26933</id>
      <parentid>26932</parentid>
      <timestamp>2012-05-01T17:21:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/memory]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/</title>
    <ns>0</ns>
    <id>7070</id>
    <redirect title="cpp/numeric" />
    <revision>
      <id>27119</id>
      <parentid>27118</parentid>
      <timestamp>2012-05-01T17:22:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="25">#redirect [[cpp/numeric]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/</title>
    <ns>0</ns>
    <id>7009</id>
    <redirect title="cpp/numeric/math" />
    <revision>
      <id>29758</id>
      <parentid>26997</parentid>
      <timestamp>2012-05-01T18:10:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math]]</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/numeric/math]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/abs</title>
    <ns>0</ns>
    <id>6979</id>
    <redirect title="cpp/numeric/math/abs" />
    <revision>
      <id>26937</id>
      <parentid>26936</parentid>
      <timestamp>2012-05-01T17:21:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/acos</title>
    <ns>0</ns>
    <id>6980</id>
    <redirect title="cpp/numeric/math/acos" />
    <revision>
      <id>26939</id>
      <parentid>26938</parentid>
      <timestamp>2012-05-01T17:21:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/acos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/acosh</title>
    <ns>0</ns>
    <id>6981</id>
    <redirect title="cpp/numeric/math/acosh" />
    <revision>
      <id>26941</id>
      <parentid>26940</parentid>
      <timestamp>2012-05-01T17:21:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/acosh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/asin</title>
    <ns>0</ns>
    <id>6982</id>
    <redirect title="cpp/numeric/math/asin" />
    <revision>
      <id>26943</id>
      <parentid>26942</parentid>
      <timestamp>2012-05-01T17:21:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/asin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/asinh</title>
    <ns>0</ns>
    <id>6983</id>
    <redirect title="cpp/numeric/math/asinh" />
    <revision>
      <id>26945</id>
      <parentid>26944</parentid>
      <timestamp>2012-05-01T17:21:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/asinh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/atan</title>
    <ns>0</ns>
    <id>6984</id>
    <redirect title="cpp/numeric/math/atan" />
    <revision>
      <id>26947</id>
      <parentid>26946</parentid>
      <timestamp>2012-05-01T17:21:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/atan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/atan2</title>
    <ns>0</ns>
    <id>6985</id>
    <redirect title="cpp/numeric/math/atan2" />
    <revision>
      <id>26949</id>
      <parentid>26948</parentid>
      <timestamp>2012-05-01T17:21:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/atan2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/atanh</title>
    <ns>0</ns>
    <id>6986</id>
    <redirect title="cpp/numeric/math/atanh" />
    <revision>
      <id>26951</id>
      <parentid>26950</parentid>
      <timestamp>2012-05-01T17:21:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/atanh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/cbrt</title>
    <ns>0</ns>
    <id>6987</id>
    <redirect title="cpp/numeric/math/cbrt" />
    <revision>
      <id>26953</id>
      <parentid>26952</parentid>
      <timestamp>2012-05-01T17:21:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/cbrt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/ceil</title>
    <ns>0</ns>
    <id>6988</id>
    <redirect title="cpp/numeric/math/ceil" />
    <revision>
      <id>26955</id>
      <parentid>26954</parentid>
      <timestamp>2012-05-01T17:21:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/ceil]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/cos</title>
    <ns>0</ns>
    <id>6989</id>
    <redirect title="cpp/numeric/math/cos" />
    <revision>
      <id>26957</id>
      <parentid>26956</parentid>
      <timestamp>2012-05-01T17:21:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/cos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/cosh</title>
    <ns>0</ns>
    <id>6990</id>
    <redirect title="cpp/numeric/math/cosh" />
    <revision>
      <id>26959</id>
      <parentid>26958</parentid>
      <timestamp>2012-05-01T17:21:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/cosh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/div</title>
    <ns>0</ns>
    <id>6991</id>
    <redirect title="cpp/numeric/math/div" />
    <revision>
      <id>26961</id>
      <parentid>26960</parentid>
      <timestamp>2012-05-01T17:21:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/exp</title>
    <ns>0</ns>
    <id>6992</id>
    <redirect title="cpp/numeric/math/exp" />
    <revision>
      <id>26963</id>
      <parentid>26962</parentid>
      <timestamp>2012-05-01T17:21:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/exp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/fabs</title>
    <ns>0</ns>
    <id>6993</id>
    <redirect title="cpp/numeric/math/fabs" />
    <revision>
      <id>26965</id>
      <parentid>26964</parentid>
      <timestamp>2012-05-01T17:21:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/fabs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/floor</title>
    <ns>0</ns>
    <id>6994</id>
    <redirect title="cpp/numeric/math/floor" />
    <revision>
      <id>26967</id>
      <parentid>26966</parentid>
      <timestamp>2012-05-01T17:21:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/floor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/fmod</title>
    <ns>0</ns>
    <id>6995</id>
    <redirect title="cpp/numeric/math/fmod" />
    <revision>
      <id>26969</id>
      <parentid>26968</parentid>
      <timestamp>2012-05-01T17:21:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/fmod]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/frexp</title>
    <ns>0</ns>
    <id>6996</id>
    <redirect title="cpp/numeric/math/frexp" />
    <revision>
      <id>26971</id>
      <parentid>26970</parentid>
      <timestamp>2012-05-01T17:21:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/frexp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/labs</title>
    <ns>0</ns>
    <id>6997</id>
    <redirect title="cpp/numeric/math/abs" />
    <revision>
      <id>26973</id>
      <parentid>26972</parentid>
      <timestamp>2012-05-01T17:21:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/ldexp</title>
    <ns>0</ns>
    <id>6998</id>
    <redirect title="cpp/numeric/math/ldexp" />
    <revision>
      <id>26975</id>
      <parentid>26974</parentid>
      <timestamp>2012-05-01T17:21:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/ldexp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/ldiv</title>
    <ns>0</ns>
    <id>6999</id>
    <redirect title="cpp/numeric/math/div" />
    <revision>
      <id>26977</id>
      <parentid>26976</parentid>
      <timestamp>2012-05-01T17:21:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/log</title>
    <ns>0</ns>
    <id>7000</id>
    <redirect title="cpp/numeric/math/log" />
    <revision>
      <id>26979</id>
      <parentid>26978</parentid>
      <timestamp>2012-05-01T17:21:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/log]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/log10</title>
    <ns>0</ns>
    <id>7001</id>
    <redirect title="cpp/numeric/math/log10" />
    <revision>
      <id>26981</id>
      <parentid>26980</parentid>
      <timestamp>2012-05-01T17:21:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/log10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/modf</title>
    <ns>0</ns>
    <id>7002</id>
    <redirect title="cpp/numeric/math/modf" />
    <revision>
      <id>26983</id>
      <parentid>26982</parentid>
      <timestamp>2012-05-01T17:21:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/modf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/pow</title>
    <ns>0</ns>
    <id>7003</id>
    <redirect title="cpp/numeric/math/pow" />
    <revision>
      <id>26985</id>
      <parentid>26984</parentid>
      <timestamp>2012-05-01T17:21:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/pow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/round</title>
    <ns>0</ns>
    <id>7004</id>
    <redirect title="cpp/numeric/math/round" />
    <revision>
      <id>26987</id>
      <parentid>26986</parentid>
      <timestamp>2012-05-01T17:21:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/sin</title>
    <ns>0</ns>
    <id>7005</id>
    <redirect title="cpp/numeric/math/sin" />
    <revision>
      <id>26989</id>
      <parentid>26988</parentid>
      <timestamp>2012-05-01T17:21:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/sin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/sinh</title>
    <ns>0</ns>
    <id>7006</id>
    <redirect title="cpp/numeric/math/sinh" />
    <revision>
      <id>26991</id>
      <parentid>26990</parentid>
      <timestamp>2012-05-01T17:21:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/sinh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/sqrt</title>
    <ns>0</ns>
    <id>7007</id>
    <redirect title="cpp/numeric/math/sqrt" />
    <revision>
      <id>26993</id>
      <parentid>26992</parentid>
      <timestamp>2012-05-01T17:21:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/sqrt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/start</title>
    <ns>0</ns>
    <id>7008</id>
    <redirect title="cpp/numeric/math" />
    <revision>
      <id>29759</id>
      <parentid>26995</parentid>
      <timestamp>2012-05-01T18:10:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/math]]</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/numeric/math]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/tan</title>
    <ns>0</ns>
    <id>7010</id>
    <redirect title="cpp/numeric/math/tan" />
    <revision>
      <id>26999</id>
      <parentid>26998</parentid>
      <timestamp>2012-05-01T17:22:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/tan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/tanh</title>
    <ns>0</ns>
    <id>7011</id>
    <redirect title="cpp/numeric/math/tanh" />
    <revision>
      <id>27001</id>
      <parentid>27000</parentid>
      <timestamp>2012-05-01T17:22:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/tanh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/c/trunc</title>
    <ns>0</ns>
    <id>7012</id>
    <redirect title="cpp/numeric/math/trunc" />
    <revision>
      <id>27003</id>
      <parentid>27002</parentid>
      <timestamp>2012-05-01T17:22:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/trunc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/</title>
    <ns>0</ns>
    <id>7022</id>
    <redirect title="cpp/numeric/complex" />
    <revision>
      <id>27023</id>
      <parentid>27022</parentid>
      <timestamp>2012-05-01T17:22:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/numeric/complex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/abs</title>
    <ns>0</ns>
    <id>7013</id>
    <redirect title="cpp/numeric/complex/abs" />
    <revision>
      <id>27005</id>
      <parentid>27004</parentid>
      <timestamp>2012-05-01T17:22:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/numeric/complex/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/arg</title>
    <ns>0</ns>
    <id>7014</id>
    <redirect title="cpp/numeric/complex/arg" />
    <revision>
      <id>27007</id>
      <parentid>27006</parentid>
      <timestamp>2012-05-01T17:22:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/numeric/complex/arg]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/complex constructors</title>
    <ns>0</ns>
    <id>7015</id>
    <redirect title="cpp/numeric/complex/complex" />
    <revision>
      <id>27009</id>
      <parentid>27008</parentid>
      <timestamp>2012-05-01T17:22:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/numeric/complex/complex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/conj</title>
    <ns>0</ns>
    <id>7016</id>
    <redirect title="cpp/numeric/complex/conj" />
    <revision>
      <id>27011</id>
      <parentid>27010</parentid>
      <timestamp>2012-05-01T17:22:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/conj]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/imag</title>
    <ns>0</ns>
    <id>7017</id>
    <redirect title="cpp/numeric/complex/imag" />
    <revision>
      <id>27013</id>
      <parentid>27012</parentid>
      <timestamp>2012-05-01T17:22:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/imag]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/norm</title>
    <ns>0</ns>
    <id>7018</id>
    <redirect title="cpp/numeric/complex/norm" />
    <revision>
      <id>27015</id>
      <parentid>27014</parentid>
      <timestamp>2012-05-01T17:22:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/norm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/polar</title>
    <ns>0</ns>
    <id>7019</id>
    <redirect title="cpp/numeric/complex/polar" />
    <revision>
      <id>27017</id>
      <parentid>27016</parentid>
      <timestamp>2012-05-01T17:22:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/complex/polar]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/real</title>
    <ns>0</ns>
    <id>7020</id>
    <redirect title="cpp/numeric/complex/real" />
    <revision>
      <id>27019</id>
      <parentid>27018</parentid>
      <timestamp>2012-05-01T17:22:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/complex/real]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/complex/start</title>
    <ns>0</ns>
    <id>7021</id>
    <redirect title="cpp/numeric/complex" />
    <revision>
      <id>27021</id>
      <parentid>27020</parentid>
      <timestamp>2012-05-01T17:22:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/numeric/complex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/</title>
    <ns>0</ns>
    <id>7061</id>
    <redirect title="cpp/numeric/math" />
    <revision>
      <id>27101</id>
      <parentid>27100</parentid>
      <timestamp>2012-05-01T17:22:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/numeric/math]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/abs</title>
    <ns>0</ns>
    <id>7023</id>
    <redirect title="cpp/numeric/math/abs" />
    <revision>
      <id>27025</id>
      <parentid>27024</parentid>
      <timestamp>2012-05-01T17:22:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/abs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/acos</title>
    <ns>0</ns>
    <id>7024</id>
    <redirect title="cpp/numeric/math/acos" />
    <revision>
      <id>27027</id>
      <parentid>27026</parentid>
      <timestamp>2012-05-01T17:22:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/acos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/acosh</title>
    <ns>0</ns>
    <id>7025</id>
    <redirect title="cpp/numeric/math/acosh" />
    <revision>
      <id>27029</id>
      <parentid>27028</parentid>
      <timestamp>2012-05-01T17:22:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/acosh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/asin</title>
    <ns>0</ns>
    <id>7026</id>
    <redirect title="cpp/numeric/math/asin" />
    <revision>
      <id>27031</id>
      <parentid>27030</parentid>
      <timestamp>2012-05-01T17:22:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/asin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/asinh</title>
    <ns>0</ns>
    <id>7027</id>
    <redirect title="cpp/numeric/math/asinh" />
    <revision>
      <id>27033</id>
      <parentid>27032</parentid>
      <timestamp>2012-05-01T17:22:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/asinh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/atan</title>
    <ns>0</ns>
    <id>7028</id>
    <redirect title="cpp/numeric/math/atan" />
    <revision>
      <id>27035</id>
      <parentid>27034</parentid>
      <timestamp>2012-05-01T17:22:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/atan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/atan2</title>
    <ns>0</ns>
    <id>7029</id>
    <redirect title="cpp/numeric/math/atan2" />
    <revision>
      <id>27037</id>
      <parentid>27036</parentid>
      <timestamp>2012-05-01T17:22:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/atan2]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/atanh</title>
    <ns>0</ns>
    <id>7030</id>
    <redirect title="cpp/numeric/math/atanh" />
    <revision>
      <id>27039</id>
      <parentid>27038</parentid>
      <timestamp>2012-05-01T17:22:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/atanh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/cbrt</title>
    <ns>0</ns>
    <id>7031</id>
    <redirect title="cpp/numeric/math/cbrt" />
    <revision>
      <id>27041</id>
      <parentid>27040</parentid>
      <timestamp>2012-05-01T17:22:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/cbrt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/ceil</title>
    <ns>0</ns>
    <id>7032</id>
    <redirect title="cpp/numeric/math/ceil" />
    <revision>
      <id>27043</id>
      <parentid>27042</parentid>
      <timestamp>2012-05-01T17:22:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/ceil]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/copysign</title>
    <ns>0</ns>
    <id>7033</id>
    <redirect title="cpp/numeric/math/copysign" />
    <revision>
      <id>27045</id>
      <parentid>27044</parentid>
      <timestamp>2012-05-01T17:22:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/math/copysign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/cos</title>
    <ns>0</ns>
    <id>7034</id>
    <redirect title="cpp/numeric/math/cos" />
    <revision>
      <id>27047</id>
      <parentid>27046</parentid>
      <timestamp>2012-05-01T17:22:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/cos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/cosh</title>
    <ns>0</ns>
    <id>7035</id>
    <redirect title="cpp/numeric/math/cosh" />
    <revision>
      <id>27049</id>
      <parentid>27048</parentid>
      <timestamp>2012-05-01T17:22:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/cosh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/div</title>
    <ns>0</ns>
    <id>7036</id>
    <redirect title="cpp/numeric/math/div" />
    <revision>
      <id>27051</id>
      <parentid>27050</parentid>
      <timestamp>2012-05-01T17:22:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/div]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/exp</title>
    <ns>0</ns>
    <id>7037</id>
    <redirect title="cpp/numeric/math/exp" />
    <revision>
      <id>27053</id>
      <parentid>27052</parentid>
      <timestamp>2012-05-01T17:22:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/exp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/fabs</title>
    <ns>0</ns>
    <id>7038</id>
    <redirect title="cpp/numeric/math/fabs" />
    <revision>
      <id>27055</id>
      <parentid>27054</parentid>
      <timestamp>2012-05-01T17:22:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/fabs]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/floor</title>
    <ns>0</ns>
    <id>7039</id>
    <redirect title="cpp/numeric/math/floor" />
    <revision>
      <id>27057</id>
      <parentid>27056</parentid>
      <timestamp>2012-05-01T17:22:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/floor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/fmod</title>
    <ns>0</ns>
    <id>7040</id>
    <redirect title="cpp/numeric/math/fmod" />
    <revision>
      <id>27059</id>
      <parentid>27058</parentid>
      <timestamp>2012-05-01T17:22:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/fmod]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/fpclassify</title>
    <ns>0</ns>
    <id>7041</id>
    <redirect title="cpp/numeric/math/fpclassify" />
    <revision>
      <id>27061</id>
      <parentid>27060</parentid>
      <timestamp>2012-05-01T17:22:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/numeric/math/fpclassify]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/frexp</title>
    <ns>0</ns>
    <id>7042</id>
    <redirect title="cpp/numeric/math/frexp" />
    <revision>
      <id>27063</id>
      <parentid>27062</parentid>
      <timestamp>2012-05-01T17:22:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/frexp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/huge val</title>
    <ns>0</ns>
    <id>7043</id>
    <redirect title="cpp/numeric/math/HUGE VAL" />
    <revision>
      <id>27065</id>
      <parentid>27064</parentid>
      <timestamp>2012-05-01T17:22:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/math/HUGE_VAL]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/huge valf</title>
    <ns>0</ns>
    <id>7044</id>
    <redirect title="cpp/numeric/math/HUGE VAL" />
    <revision>
      <id>46084</id>
      <parentid>27067</parentid>
      <timestamp>2013-02-15T21:49:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/numeric/math/HUGE VAL]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/numeric/math/HUGE VAL]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/huge vall</title>
    <ns>0</ns>
    <id>7045</id>
    <redirect title="cpp/numeric/math/HUGE VAL" />
    <revision>
      <id>46085</id>
      <parentid>27069</parentid>
      <timestamp>2013-02-15T21:49:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/numeric/math/HUGE VAL]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[cpp/numeric/math/HUGE VAL]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/isfinite</title>
    <ns>0</ns>
    <id>7046</id>
    <redirect title="cpp/numeric/math/isfinite" />
    <revision>
      <id>27071</id>
      <parentid>27070</parentid>
      <timestamp>2012-05-01T17:22:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/math/isfinite]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/isinf</title>
    <ns>0</ns>
    <id>7047</id>
    <redirect title="cpp/numeric/math/isinf" />
    <revision>
      <id>27073</id>
      <parentid>27072</parentid>
      <timestamp>2012-05-01T17:22:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/isinf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/isnan</title>
    <ns>0</ns>
    <id>7048</id>
    <redirect title="cpp/numeric/math/isnan" />
    <revision>
      <id>27075</id>
      <parentid>27074</parentid>
      <timestamp>2012-05-01T17:22:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/isnan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/isnormal</title>
    <ns>0</ns>
    <id>7049</id>
    <redirect title="cpp/numeric/math/isnormal" />
    <revision>
      <id>27077</id>
      <parentid>27076</parentid>
      <timestamp>2012-05-01T17:22:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/math/isnormal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/ldexp</title>
    <ns>0</ns>
    <id>7050</id>
    <redirect title="cpp/numeric/math/ldexp" />
    <revision>
      <id>27079</id>
      <parentid>27078</parentid>
      <timestamp>2012-05-01T17:22:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/ldexp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/log</title>
    <ns>0</ns>
    <id>7051</id>
    <redirect title="cpp/numeric/math/log" />
    <revision>
      <id>27081</id>
      <parentid>27080</parentid>
      <timestamp>2012-05-01T17:22:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/log]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/log10</title>
    <ns>0</ns>
    <id>7052</id>
    <redirect title="cpp/numeric/math/log10" />
    <revision>
      <id>27083</id>
      <parentid>27082</parentid>
      <timestamp>2012-05-01T17:22:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/log10]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/modf</title>
    <ns>0</ns>
    <id>7053</id>
    <redirect title="cpp/numeric/math/modf" />
    <revision>
      <id>27085</id>
      <parentid>27084</parentid>
      <timestamp>2012-05-01T17:22:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/modf]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/pow</title>
    <ns>0</ns>
    <id>7054</id>
    <redirect title="cpp/numeric/math/pow" />
    <revision>
      <id>27087</id>
      <parentid>27086</parentid>
      <timestamp>2012-05-01T17:22:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/pow]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/round</title>
    <ns>0</ns>
    <id>7055</id>
    <redirect title="cpp/numeric/math/round" />
    <revision>
      <id>27089</id>
      <parentid>27088</parentid>
      <timestamp>2012-05-01T17:22:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/round]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/signbit</title>
    <ns>0</ns>
    <id>7056</id>
    <redirect title="cpp/numeric/math/signbit" />
    <revision>
      <id>27091</id>
      <parentid>27090</parentid>
      <timestamp>2012-05-01T17:22:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/math/signbit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/sin</title>
    <ns>0</ns>
    <id>7057</id>
    <redirect title="cpp/numeric/math/sin" />
    <revision>
      <id>27093</id>
      <parentid>27092</parentid>
      <timestamp>2012-05-01T17:22:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/sin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/sinh</title>
    <ns>0</ns>
    <id>7058</id>
    <redirect title="cpp/numeric/math/sinh" />
    <revision>
      <id>27095</id>
      <parentid>27094</parentid>
      <timestamp>2012-05-01T17:22:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/sinh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/sqrt</title>
    <ns>0</ns>
    <id>7059</id>
    <redirect title="cpp/numeric/math/sqrt" />
    <revision>
      <id>27097</id>
      <parentid>27096</parentid>
      <timestamp>2012-05-01T17:22:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/sqrt]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/start</title>
    <ns>0</ns>
    <id>7060</id>
    <redirect title="cpp/numeric/math" />
    <revision>
      <id>27099</id>
      <parentid>27098</parentid>
      <timestamp>2012-05-01T17:22:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/numeric/math]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/tan</title>
    <ns>0</ns>
    <id>7062</id>
    <redirect title="cpp/numeric/math/tan" />
    <revision>
      <id>27103</id>
      <parentid>27102</parentid>
      <timestamp>2012-05-01T17:22:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/math/tan]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/tanh</title>
    <ns>0</ns>
    <id>7063</id>
    <redirect title="cpp/numeric/math/tanh" />
    <revision>
      <id>27105</id>
      <parentid>27104</parentid>
      <timestamp>2012-05-01T17:22:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/numeric/math/tanh]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/math/trunc</title>
    <ns>0</ns>
    <id>7064</id>
    <redirect title="cpp/numeric/math/trunc" />
    <revision>
      <id>27107</id>
      <parentid>27106</parentid>
      <timestamp>2012-05-01T17:22:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/numeric/math/trunc]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/random/</title>
    <ns>0</ns>
    <id>7068</id>
    <redirect title="cpp/numeric/random" />
    <revision>
      <id>29754</id>
      <parentid>27115</parentid>
      <timestamp>2012-05-01T18:09:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/numeric/random]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/random/rand</title>
    <ns>0</ns>
    <id>7065</id>
    <redirect title="cpp/numeric/random/rand" />
    <revision>
      <id>27109</id>
      <parentid>27108</parentid>
      <timestamp>2012-05-01T17:22:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/numeric/random/rand]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/random/srand</title>
    <ns>0</ns>
    <id>7066</id>
    <redirect title="cpp/numeric/random/srand" />
    <revision>
      <id>29755</id>
      <parentid>29753</parentid>
      <timestamp>2012-05-01T18:09:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random/srand]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/random/srand]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/random/start</title>
    <ns>0</ns>
    <id>7067</id>
    <redirect title="cpp/numeric/random" />
    <revision>
      <id>29756</id>
      <parentid>27113</parentid>
      <timestamp>2012-05-01T18:10:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/random]]</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/numeric/random]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/numeric/start</title>
    <ns>0</ns>
    <id>7069</id>
    <redirect title="cpp/numeric" />
    <revision>
      <id>27117</id>
      <parentid>27116</parentid>
      <timestamp>2012-05-01T17:22:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="25">#redirect [[cpp/numeric]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/operator precedence</title>
    <ns>0</ns>
    <id>7639</id>
    <redirect title="cpp/language/operator precedence" />
    <revision>
      <id>28257</id>
      <parentid>28256</parentid>
      <timestamp>2012-05-01T17:28:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/language/operator_precedence]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/</title>
    <ns>0</ns>
    <id>7083</id>
    <redirect title="cpp/preprocessor" />
    <revision>
      <id>27145</id>
      <parentid>27144</parentid>
      <timestamp>2012-05-01T17:22:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/preprocessor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/conditional</title>
    <ns>0</ns>
    <id>7071</id>
    <redirect title="cpp/preprocessor/conditional" />
    <revision>
      <id>27121</id>
      <parentid>27120</parentid>
      <timestamp>2012-05-01T17:22:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/preprocessor/conditional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/define</title>
    <ns>0</ns>
    <id>7072</id>
    <redirect title="cpp/preprocessor/replace" />
    <revision>
      <id>27123</id>
      <parentid>27122</parentid>
      <timestamp>2012-05-01T17:22:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/preprocessor/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/error</title>
    <ns>0</ns>
    <id>7073</id>
    <redirect title="cpp/preprocessor/error" />
    <revision>
      <id>27125</id>
      <parentid>27124</parentid>
      <timestamp>2012-05-01T17:22:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/preprocessor/error]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/impl</title>
    <ns>0</ns>
    <id>7074</id>
    <redirect title="cpp/preprocessor/impl" />
    <revision>
      <id>27127</id>
      <parentid>27126</parentid>
      <timestamp>2012-05-01T17:22:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/preprocessor/impl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/include</title>
    <ns>0</ns>
    <id>7075</id>
    <redirect title="cpp/preprocessor/include" />
    <revision>
      <id>27129</id>
      <parentid>27128</parentid>
      <timestamp>2012-05-01T17:22:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/preprocessor/include]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/line</title>
    <ns>0</ns>
    <id>7076</id>
    <redirect title="cpp/preprocessor/line" />
    <revision>
      <id>27131</id>
      <parentid>27130</parentid>
      <timestamp>2012-05-01T17:22:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/preprocessor/line]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/pragma</title>
    <ns>0</ns>
    <id>7077</id>
    <redirect title="cpp/preprocessor/impl" />
    <revision>
      <id>27133</id>
      <parentid>27132</parentid>
      <timestamp>2012-05-01T17:22:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/preprocessor/impl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/preprocessor if</title>
    <ns>0</ns>
    <id>7078</id>
    <redirect title="cpp/preprocessor/conditional" />
    <revision>
      <id>27135</id>
      <parentid>27134</parentid>
      <timestamp>2012-05-01T17:22:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/preprocessor/conditional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/preprocessor vars</title>
    <ns>0</ns>
    <id>7079</id>
    <redirect title="cpp/preprocessor/replace" />
    <revision>
      <id>27137</id>
      <parentid>27136</parentid>
      <timestamp>2012-05-01T17:22:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/preprocessor/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/replace</title>
    <ns>0</ns>
    <id>7080</id>
    <redirect title="cpp/preprocessor/replace" />
    <revision>
      <id>27139</id>
      <parentid>27138</parentid>
      <timestamp>2012-05-01T17:22:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/preprocessor/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/sharp</title>
    <ns>0</ns>
    <id>7081</id>
    <redirect title="cpp/preprocessor/replace" />
    <revision>
      <id>27141</id>
      <parentid>27140</parentid>
      <timestamp>2012-05-01T17:22:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/preprocessor/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/start</title>
    <ns>0</ns>
    <id>7082</id>
    <redirect title="cpp/preprocessor" />
    <revision>
      <id>27143</id>
      <parentid>27142</parentid>
      <timestamp>2012-05-01T17:22:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/preprocessor]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/undef</title>
    <ns>0</ns>
    <id>7084</id>
    <redirect title="cpp/preprocessor/replace" />
    <revision>
      <id>27147</id>
      <parentid>27146</parentid>
      <timestamp>2012-05-01T17:22:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/preprocessor/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/preprocessor/warning</title>
    <ns>0</ns>
    <id>7085</id>
    <redirect title="cpp/preprocessor/warning" />
    <revision>
      <id>27149</id>
      <parentid>27148</parentid>
      <timestamp>2012-05-01T17:22:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/preprocessor/warning]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/</title>
    <ns>0</ns>
    <id>7103</id>
    <redirect title="cpp/regex" />
    <revision>
      <id>27185</id>
      <parentid>27184</parentid>
      <timestamp>2012-05-01T17:22:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/algorithms/</title>
    <ns>0</ns>
    <id>7087</id>
    <redirect title="cpp/regex/basic regex" />
    <revision>
      <id>27153</id>
      <parentid>27152</parentid>
      <timestamp>2012-05-01T17:22:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/regex/basic_regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/algorithms/start</title>
    <ns>0</ns>
    <id>7086</id>
    <redirect title="cpp/regex/basic regex" />
    <revision>
      <id>27151</id>
      <parentid>27150</parentid>
      <timestamp>2012-05-01T17:22:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/regex/basic_regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/basic regex</title>
    <ns>0</ns>
    <id>7099</id>
    <redirect title="cpp/regex/basic regex" />
    <revision>
      <id>27177</id>
      <parentid>27176</parentid>
      <timestamp>2012-05-01T17:22:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/regex/basic_regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/basic regex/</title>
    <ns>0</ns>
    <id>7098</id>
    <redirect title="cpp/regex/basic regex" />
    <revision>
      <id>27175</id>
      <parentid>27174</parentid>
      <timestamp>2012-05-01T17:22:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/regex/basic_regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/basic regex/start</title>
    <ns>0</ns>
    <id>7097</id>
    <redirect title="cpp/regex/basic regex" />
    <revision>
      <id>27173</id>
      <parentid>27172</parentid>
      <timestamp>2012-05-01T17:22:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/regex/basic_regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/constants</title>
    <ns>0</ns>
    <id>7100</id>
    <redirect title="cpp/regex" />
    <revision>
      <id>27179</id>
      <parentid>27178</parentid>
      <timestamp>2012-05-01T17:22:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/header</title>
    <ns>0</ns>
    <id>7101</id>
    <redirect title="cpp/regex" />
    <revision>
      <id>27181</id>
      <parentid>27180</parentid>
      <timestamp>2012-05-01T17:22:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/match results/</title>
    <ns>0</ns>
    <id>7089</id>
    <redirect title="cpp/regex/match results" />
    <revision>
      <id>27157</id>
      <parentid>27156</parentid>
      <timestamp>2012-05-01T17:22:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/regex/match_results]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/match results/start</title>
    <ns>0</ns>
    <id>7088</id>
    <redirect title="cpp/regex/match results" />
    <revision>
      <id>27155</id>
      <parentid>27154</parentid>
      <timestamp>2012-05-01T17:22:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/regex/match_results]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/regex constants/</title>
    <ns>0</ns>
    <id>7094</id>
    <redirect title="cpp/regex" />
    <revision>
      <id>27167</id>
      <parentid>27166</parentid>
      <timestamp>2012-05-01T17:22:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/regex constants/error type</title>
    <ns>0</ns>
    <id>7090</id>
    <redirect title="cpp/regex/error type" />
    <revision>
      <id>27159</id>
      <parentid>27158</parentid>
      <timestamp>2012-05-01T17:22:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/regex/error_type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/regex constants/match flag type</title>
    <ns>0</ns>
    <id>7091</id>
    <redirect title="cpp/regex/match flag type" />
    <revision>
      <id>27161</id>
      <parentid>27160</parentid>
      <timestamp>2012-05-01T17:22:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/regex/match_flag_type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/regex constants/start</title>
    <ns>0</ns>
    <id>7093</id>
    <redirect title="cpp/regex" />
    <revision>
      <id>27165</id>
      <parentid>27164</parentid>
      <timestamp>2012-05-01T17:22:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/regex constants/syntax option type</title>
    <ns>0</ns>
    <id>7092</id>
    <redirect title="cpp/regex/syntax option type" />
    <revision>
      <id>27163</id>
      <parentid>27162</parentid>
      <timestamp>2012-05-01T17:22:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/regex/syntax_option_type]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/start</title>
    <ns>0</ns>
    <id>7102</id>
    <redirect title="cpp/regex" />
    <revision>
      <id>27183</id>
      <parentid>27182</parentid>
      <timestamp>2012-05-01T17:22:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/regex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/sub match/</title>
    <ns>0</ns>
    <id>7096</id>
    <redirect title="cpp/regex/sub match" />
    <revision>
      <id>27171</id>
      <parentid>27170</parentid>
      <timestamp>2012-05-01T17:22:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/regex/sub_match]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/regex/sub match/start</title>
    <ns>0</ns>
    <id>7095</id>
    <redirect title="cpp/regex/sub match" />
    <revision>
      <id>27169</id>
      <parentid>27168</parentid>
      <timestamp>2012-05-01T17:22:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/regex/sub_match]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/start</title>
    <ns>0</ns>
    <id>7640</id>
    <redirect title="Main Page" />
    <revision>
      <id>30598</id>
      <parentid>28259</parentid>
      <timestamp>2012-05-05T17:13:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <comment>Redirected page to [[Main Page]]</comment>
      <text xml:space="preserve" bytes="23">#redirect [[Main_Page]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/</title>
    <ns>0</ns>
    <id>7407</id>
    <redirect title="cpp/container" />
    <revision>
      <id>27793</id>
      <parentid>27792</parentid>
      <timestamp>2012-05-01T17:24:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/container]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/</title>
    <ns>0</ns>
    <id>7173</id>
    <redirect title="cpp/algorithm" />
    <revision>
      <id>27325</id>
      <parentid>27324</parentid>
      <timestamp>2012-05-01T17:23:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/algorithm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/accumulate</title>
    <ns>0</ns>
    <id>7104</id>
    <redirect title="cpp/algorithm/accumulate" />
    <revision>
      <id>27187</id>
      <parentid>27186</parentid>
      <timestamp>2012-05-01T17:22:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/algorithm/accumulate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/adjacent difference</title>
    <ns>0</ns>
    <id>7105</id>
    <redirect title="cpp/algorithm/adjacent difference" />
    <revision>
      <id>27189</id>
      <parentid>27188</parentid>
      <timestamp>2012-05-01T17:22:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/algorithm/adjacent_difference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/adjacent find</title>
    <ns>0</ns>
    <id>7106</id>
    <redirect title="cpp/algorithm/adjacent find" />
    <revision>
      <id>27191</id>
      <parentid>27190</parentid>
      <timestamp>2012-05-01T17:22:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/adjacent_find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/binary search</title>
    <ns>0</ns>
    <id>7107</id>
    <redirect title="cpp/algorithm/binary search" />
    <revision>
      <id>27193</id>
      <parentid>27192</parentid>
      <timestamp>2012-05-01T17:22:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/binary_search]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/bsearch</title>
    <ns>0</ns>
    <id>7108</id>
    <redirect title="cpp/algorithm/bsearch" />
    <revision>
      <id>27195</id>
      <parentid>27194</parentid>
      <timestamp>2012-05-01T17:22:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/bsearch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/copy</title>
    <ns>0</ns>
    <id>7109</id>
    <redirect title="cpp/algorithm/copy" />
    <revision>
      <id>27197</id>
      <parentid>27196</parentid>
      <timestamp>2012-05-01T17:22:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/copy backward</title>
    <ns>0</ns>
    <id>7110</id>
    <redirect title="cpp/algorithm/copy backward" />
    <revision>
      <id>27199</id>
      <parentid>27198</parentid>
      <timestamp>2012-05-01T17:22:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/copy_backward]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/count</title>
    <ns>0</ns>
    <id>7111</id>
    <redirect title="cpp/algorithm/count" />
    <revision>
      <id>27201</id>
      <parentid>27200</parentid>
      <timestamp>2012-05-01T17:22:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/count if</title>
    <ns>0</ns>
    <id>7112</id>
    <redirect title="cpp/algorithm/count" />
    <revision>
      <id>27203</id>
      <parentid>27202</parentid>
      <timestamp>2012-05-01T17:22:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/equal</title>
    <ns>0</ns>
    <id>7113</id>
    <redirect title="cpp/algorithm/equal" />
    <revision>
      <id>27205</id>
      <parentid>27204</parentid>
      <timestamp>2012-05-01T17:22:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/equal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/equal range</title>
    <ns>0</ns>
    <id>7114</id>
    <redirect title="cpp/algorithm/equal range" />
    <revision>
      <id>27207</id>
      <parentid>27206</parentid>
      <timestamp>2012-05-01T17:22:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/fill</title>
    <ns>0</ns>
    <id>7115</id>
    <redirect title="cpp/algorithm/fill" />
    <revision>
      <id>27209</id>
      <parentid>27208</parentid>
      <timestamp>2012-05-01T17:22:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/fill]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/fill n</title>
    <ns>0</ns>
    <id>7116</id>
    <redirect title="cpp/algorithm/fill n" />
    <revision>
      <id>27211</id>
      <parentid>27210</parentid>
      <timestamp>2012-05-01T17:22:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/fill_n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/find</title>
    <ns>0</ns>
    <id>7117</id>
    <redirect title="cpp/algorithm/find" />
    <revision>
      <id>27213</id>
      <parentid>27212</parentid>
      <timestamp>2012-05-01T17:22:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/find end</title>
    <ns>0</ns>
    <id>7118</id>
    <redirect title="cpp/algorithm/find end" />
    <revision>
      <id>27215</id>
      <parentid>27214</parentid>
      <timestamp>2012-05-01T17:22:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/find_end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/find first of</title>
    <ns>0</ns>
    <id>7119</id>
    <redirect title="cpp/algorithm/find first of" />
    <revision>
      <id>27217</id>
      <parentid>27216</parentid>
      <timestamp>2012-05-01T17:22:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/find_first_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/find if</title>
    <ns>0</ns>
    <id>7120</id>
    <redirect title="cpp/algorithm/find" />
    <revision>
      <id>27219</id>
      <parentid>27218</parentid>
      <timestamp>2012-05-01T17:22:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/for each</title>
    <ns>0</ns>
    <id>7121</id>
    <redirect title="cpp/algorithm/for each" />
    <revision>
      <id>27221</id>
      <parentid>27220</parentid>
      <timestamp>2012-05-01T17:22:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/for_each]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/generate</title>
    <ns>0</ns>
    <id>7122</id>
    <redirect title="cpp/algorithm/generate" />
    <revision>
      <id>27223</id>
      <parentid>27222</parentid>
      <timestamp>2012-05-01T17:22:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/generate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/generate n</title>
    <ns>0</ns>
    <id>7123</id>
    <redirect title="cpp/algorithm/generate n" />
    <revision>
      <id>27225</id>
      <parentid>27224</parentid>
      <timestamp>2012-05-01T17:22:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/algorithm/generate_n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/includes</title>
    <ns>0</ns>
    <id>7124</id>
    <redirect title="cpp/algorithm/includes" />
    <revision>
      <id>27227</id>
      <parentid>27226</parentid>
      <timestamp>2012-05-01T17:22:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/includes]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/inner product</title>
    <ns>0</ns>
    <id>7125</id>
    <redirect title="cpp/algorithm/inner product" />
    <revision>
      <id>27229</id>
      <parentid>27228</parentid>
      <timestamp>2012-05-01T17:22:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/inner_product]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/inplace merge</title>
    <ns>0</ns>
    <id>7126</id>
    <redirect title="cpp/algorithm/inplace merge" />
    <revision>
      <id>27231</id>
      <parentid>27230</parentid>
      <timestamp>2012-05-01T17:22:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/algorithm/inplace_merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/is heap</title>
    <ns>0</ns>
    <id>7127</id>
    <redirect title="cpp/algorithm/is heap" />
    <revision>
      <id>27233</id>
      <parentid>27232</parentid>
      <timestamp>2012-05-01T17:22:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/is_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/iter swap</title>
    <ns>0</ns>
    <id>7128</id>
    <redirect title="cpp/algorithm/iter swap" />
    <revision>
      <id>27235</id>
      <parentid>27234</parentid>
      <timestamp>2012-05-01T17:22:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/iter_swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/lexicographical compare</title>
    <ns>0</ns>
    <id>7129</id>
    <redirect title="cpp/algorithm/lexicographical compare" />
    <revision>
      <id>27237</id>
      <parentid>27236</parentid>
      <timestamp>2012-05-01T17:22:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/algorithm/lexicographical_compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/lexicographical compare 3way</title>
    <ns>0</ns>
    <id>7130</id>
    <redirect title="cpp/algorithm/lexicographical compare" />
    <revision>
      <id>27239</id>
      <parentid>27238</parentid>
      <timestamp>2012-05-01T17:22:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/algorithm/lexicographical_compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/lower bound</title>
    <ns>0</ns>
    <id>7131</id>
    <redirect title="cpp/algorithm/lower bound" />
    <revision>
      <id>27241</id>
      <parentid>27240</parentid>
      <timestamp>2012-05-01T17:22:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/make heap</title>
    <ns>0</ns>
    <id>7132</id>
    <redirect title="cpp/algorithm/make heap" />
    <revision>
      <id>27243</id>
      <parentid>27242</parentid>
      <timestamp>2012-05-01T17:22:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/make_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/max</title>
    <ns>0</ns>
    <id>7133</id>
    <redirect title="cpp/algorithm/max" />
    <revision>
      <id>27245</id>
      <parentid>27244</parentid>
      <timestamp>2012-05-01T17:22:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/algorithm/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/max element</title>
    <ns>0</ns>
    <id>7134</id>
    <redirect title="cpp/algorithm/max element" />
    <revision>
      <id>27247</id>
      <parentid>27246</parentid>
      <timestamp>2012-05-01T17:22:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/max_element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/merge</title>
    <ns>0</ns>
    <id>7135</id>
    <redirect title="cpp/algorithm/merge" />
    <revision>
      <id>27249</id>
      <parentid>27248</parentid>
      <timestamp>2012-05-01T17:22:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/min</title>
    <ns>0</ns>
    <id>7136</id>
    <redirect title="cpp/algorithm/min" />
    <revision>
      <id>27251</id>
      <parentid>27250</parentid>
      <timestamp>2012-05-01T17:22:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/algorithm/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/min element</title>
    <ns>0</ns>
    <id>7137</id>
    <redirect title="cpp/algorithm/min element" />
    <revision>
      <id>27253</id>
      <parentid>27252</parentid>
      <timestamp>2012-05-01T17:22:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/min_element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/mismatch</title>
    <ns>0</ns>
    <id>7138</id>
    <redirect title="cpp/algorithm/mismatch" />
    <revision>
      <id>27255</id>
      <parentid>27254</parentid>
      <timestamp>2012-05-01T17:22:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/mismatch]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/next permutation</title>
    <ns>0</ns>
    <id>7139</id>
    <redirect title="cpp/algorithm/next permutation" />
    <revision>
      <id>27257</id>
      <parentid>27256</parentid>
      <timestamp>2012-05-01T17:22:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/next_permutation]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/nth element</title>
    <ns>0</ns>
    <id>7140</id>
    <redirect title="cpp/algorithm/nth element" />
    <revision>
      <id>27259</id>
      <parentid>27258</parentid>
      <timestamp>2012-05-01T17:22:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/nth_element]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/partial sort</title>
    <ns>0</ns>
    <id>7141</id>
    <redirect title="cpp/algorithm/partial sort" />
    <revision>
      <id>27261</id>
      <parentid>27260</parentid>
      <timestamp>2012-05-01T17:22:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/partial_sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/partial sort copy</title>
    <ns>0</ns>
    <id>7142</id>
    <redirect title="cpp/algorithm/partial sort copy" />
    <revision>
      <id>27263</id>
      <parentid>27262</parentid>
      <timestamp>2012-05-01T17:22:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/algorithm/partial_sort_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/partial sum</title>
    <ns>0</ns>
    <id>7143</id>
    <redirect title="cpp/algorithm/partial sum" />
    <revision>
      <id>27265</id>
      <parentid>27264</parentid>
      <timestamp>2012-05-01T17:22:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/partial_sum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/partition</title>
    <ns>0</ns>
    <id>7144</id>
    <redirect title="cpp/algorithm/partition" />
    <revision>
      <id>27267</id>
      <parentid>27266</parentid>
      <timestamp>2012-05-01T17:22:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/partition]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/pop heap</title>
    <ns>0</ns>
    <id>7145</id>
    <redirect title="cpp/algorithm/pop heap" />
    <revision>
      <id>27269</id>
      <parentid>27268</parentid>
      <timestamp>2012-05-01T17:22:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/pop_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/prev permutation</title>
    <ns>0</ns>
    <id>7146</id>
    <redirect title="cpp/algorithm/prev permutation" />
    <revision>
      <id>27271</id>
      <parentid>27270</parentid>
      <timestamp>2012-05-01T17:22:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/prev_permutation]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/push heap</title>
    <ns>0</ns>
    <id>7147</id>
    <redirect title="cpp/algorithm/push heap" />
    <revision>
      <id>27273</id>
      <parentid>27272</parentid>
      <timestamp>2012-05-01T17:22:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/push_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/qsort</title>
    <ns>0</ns>
    <id>7148</id>
    <redirect title="cpp/algorithm/qsort" />
    <revision>
      <id>27275</id>
      <parentid>27274</parentid>
      <timestamp>2012-05-01T17:22:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/algorithm/qsort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/random shuffle</title>
    <ns>0</ns>
    <id>7149</id>
    <redirect title="cpp/algorithm/random shuffle" />
    <revision>
      <id>27277</id>
      <parentid>27276</parentid>
      <timestamp>2012-05-01T17:22:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/algorithm/random_shuffle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/remove</title>
    <ns>0</ns>
    <id>7150</id>
    <redirect title="cpp/algorithm/remove" />
    <revision>
      <id>27279</id>
      <parentid>27278</parentid>
      <timestamp>2012-05-01T17:22:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/remove copy</title>
    <ns>0</ns>
    <id>7151</id>
    <redirect title="cpp/algorithm/remove copy" />
    <revision>
      <id>27281</id>
      <parentid>27280</parentid>
      <timestamp>2012-05-01T17:22:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/remove_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/remove copy if</title>
    <ns>0</ns>
    <id>7152</id>
    <redirect title="cpp/algorithm/remove copy" />
    <revision>
      <id>27283</id>
      <parentid>27282</parentid>
      <timestamp>2012-05-01T17:22:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/remove_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/remove if</title>
    <ns>0</ns>
    <id>7153</id>
    <redirect title="cpp/algorithm/remove" />
    <revision>
      <id>27285</id>
      <parentid>27284</parentid>
      <timestamp>2012-05-01T17:22:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/replace</title>
    <ns>0</ns>
    <id>7154</id>
    <redirect title="cpp/algorithm/replace" />
    <revision>
      <id>27287</id>
      <parentid>27286</parentid>
      <timestamp>2012-05-01T17:22:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/replace copy</title>
    <ns>0</ns>
    <id>7155</id>
    <redirect title="cpp/algorithm/replace copy" />
    <revision>
      <id>27289</id>
      <parentid>27288</parentid>
      <timestamp>2012-05-01T17:22:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/replace_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/replace copy if</title>
    <ns>0</ns>
    <id>7156</id>
    <redirect title="cpp/algorithm/replace copy" />
    <revision>
      <id>27291</id>
      <parentid>27290</parentid>
      <timestamp>2012-05-01T17:22:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/replace_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/replace if</title>
    <ns>0</ns>
    <id>7157</id>
    <redirect title="cpp/algorithm/replace" />
    <revision>
      <id>27293</id>
      <parentid>27292</parentid>
      <timestamp>2012-05-01T17:22:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/reverse</title>
    <ns>0</ns>
    <id>7158</id>
    <redirect title="cpp/algorithm/reverse" />
    <revision>
      <id>27295</id>
      <parentid>27294</parentid>
      <timestamp>2012-05-01T17:22:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/algorithm/reverse]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/reverse copy</title>
    <ns>0</ns>
    <id>7159</id>
    <redirect title="cpp/algorithm/reverse copy" />
    <revision>
      <id>27297</id>
      <parentid>27296</parentid>
      <timestamp>2012-05-01T17:22:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/algorithm/reverse_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/rotate</title>
    <ns>0</ns>
    <id>7160</id>
    <redirect title="cpp/algorithm/rotate" />
    <revision>
      <id>27299</id>
      <parentid>27298</parentid>
      <timestamp>2012-05-01T17:22:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/rotate]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/rotate copy</title>
    <ns>0</ns>
    <id>7161</id>
    <redirect title="cpp/algorithm/rotate copy" />
    <revision>
      <id>27301</id>
      <parentid>27300</parentid>
      <timestamp>2012-05-01T17:22:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/rotate_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/search</title>
    <ns>0</ns>
    <id>7162</id>
    <redirect title="cpp/algorithm/search" />
    <revision>
      <id>27303</id>
      <parentid>27302</parentid>
      <timestamp>2012-05-01T17:22:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/search]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/search n</title>
    <ns>0</ns>
    <id>7163</id>
    <redirect title="cpp/algorithm/search n" />
    <revision>
      <id>27305</id>
      <parentid>27304</parentid>
      <timestamp>2012-05-01T17:22:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/algorithm/search_n]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/set difference</title>
    <ns>0</ns>
    <id>7164</id>
    <redirect title="cpp/algorithm/set difference" />
    <revision>
      <id>27307</id>
      <parentid>27306</parentid>
      <timestamp>2012-05-01T17:23:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/algorithm/set_difference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/set intersection</title>
    <ns>0</ns>
    <id>7165</id>
    <redirect title="cpp/algorithm/set intersection" />
    <revision>
      <id>27309</id>
      <parentid>27308</parentid>
      <timestamp>2012-05-01T17:23:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/set_intersection]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/set symmetric difference</title>
    <ns>0</ns>
    <id>7166</id>
    <redirect title="cpp/algorithm/set symmetric difference" />
    <revision>
      <id>27311</id>
      <parentid>27310</parentid>
      <timestamp>2012-05-01T17:23:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/algorithm/set_symmetric_difference]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/set union</title>
    <ns>0</ns>
    <id>7167</id>
    <redirect title="cpp/algorithm/set union" />
    <revision>
      <id>27313</id>
      <parentid>27312</parentid>
      <timestamp>2012-05-01T17:23:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/set_union]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/sort</title>
    <ns>0</ns>
    <id>7168</id>
    <redirect title="cpp/algorithm/sort" />
    <revision>
      <id>27315</id>
      <parentid>27314</parentid>
      <timestamp>2012-05-01T17:23:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/sort heap</title>
    <ns>0</ns>
    <id>7169</id>
    <redirect title="cpp/algorithm/sort heap" />
    <revision>
      <id>27317</id>
      <parentid>27316</parentid>
      <timestamp>2012-05-01T17:23:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/sort_heap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/stable partition</title>
    <ns>0</ns>
    <id>7170</id>
    <redirect title="cpp/algorithm/stable partition" />
    <revision>
      <id>27319</id>
      <parentid>27318</parentid>
      <timestamp>2012-05-01T17:23:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/algorithm/stable_partition]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/stable sort</title>
    <ns>0</ns>
    <id>7171</id>
    <redirect title="cpp/algorithm/stable sort" />
    <revision>
      <id>27321</id>
      <parentid>27320</parentid>
      <timestamp>2012-05-01T17:23:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/stable_sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/start</title>
    <ns>0</ns>
    <id>7172</id>
    <redirect title="cpp/algorithm" />
    <revision>
      <id>27323</id>
      <parentid>27322</parentid>
      <timestamp>2012-05-01T17:23:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/algorithm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/swap</title>
    <ns>0</ns>
    <id>7174</id>
    <redirect title="cpp/algorithm/swap" />
    <revision>
      <id>27327</id>
      <parentid>27326</parentid>
      <timestamp>2012-05-01T17:23:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/algorithm/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/swap ranges</title>
    <ns>0</ns>
    <id>7175</id>
    <redirect title="cpp/algorithm/swap ranges" />
    <revision>
      <id>27329</id>
      <parentid>27328</parentid>
      <timestamp>2012-05-01T17:23:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/swap_ranges]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/transform</title>
    <ns>0</ns>
    <id>7176</id>
    <redirect title="cpp/algorithm/transform" />
    <revision>
      <id>27331</id>
      <parentid>27330</parentid>
      <timestamp>2012-05-01T17:23:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/algorithm/transform]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/unique</title>
    <ns>0</ns>
    <id>7177</id>
    <redirect title="cpp/algorithm/unique" />
    <revision>
      <id>27333</id>
      <parentid>27332</parentid>
      <timestamp>2012-05-01T17:23:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/algorithm/unique]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/unique copy</title>
    <ns>0</ns>
    <id>7178</id>
    <redirect title="cpp/algorithm/unique copy" />
    <revision>
      <id>27335</id>
      <parentid>27334</parentid>
      <timestamp>2012-05-01T17:23:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/unique_copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/algorithm/upper bound</title>
    <ns>0</ns>
    <id>7179</id>
    <redirect title="cpp/algorithm/upper bound" />
    <revision>
      <id>27337</id>
      <parentid>27336</parentid>
      <timestamp>2012-05-01T17:23:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/algorithm/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/</title>
    <ns>0</ns>
    <id>7190</id>
    <redirect title="cpp/utility/bitset" />
    <revision>
      <id>27359</id>
      <parentid>27358</parentid>
      <timestamp>2012-05-01T17:23:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/utility/bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/any</title>
    <ns>0</ns>
    <id>7180</id>
    <redirect title="cpp/utility/bitset/all any none" />
    <revision>
      <id>46097</id>
      <parentid>27339</parentid>
      <timestamp>2013-02-15T21:50:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/bitset/all any none]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/bitset/all any none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/bitset constructors</title>
    <ns>0</ns>
    <id>7181</id>
    <redirect title="cpp/utility/bitset/bitset" />
    <revision>
      <id>27341</id>
      <parentid>27340</parentid>
      <timestamp>2012-05-01T17:23:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/utility/bitset/bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/bitset operators</title>
    <ns>0</ns>
    <id>7182</id>
    <redirect title="cpp/utility/bitset/operator logic" />
    <revision>
      <id>46101</id>
      <parentid>27343</parentid>
      <timestamp>2013-02-15T21:50:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/bitset/operator logic]]</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/utility/bitset/operator logic]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/count</title>
    <ns>0</ns>
    <id>7183</id>
    <redirect title="cpp/utility/bitset/count" />
    <revision>
      <id>27345</id>
      <parentid>27344</parentid>
      <timestamp>2012-05-01T17:23:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/utility/bitset/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/flip</title>
    <ns>0</ns>
    <id>7184</id>
    <redirect title="cpp/utility/bitset/flip" />
    <revision>
      <id>27347</id>
      <parentid>27346</parentid>
      <timestamp>2012-05-01T17:23:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/utility/bitset/flip]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/none</title>
    <ns>0</ns>
    <id>7185</id>
    <redirect title="cpp/utility/bitset/all any none" />
    <revision>
      <id>46099</id>
      <parentid>27349</parentid>
      <timestamp>2013-02-15T21:50:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/bitset/all any none]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/bitset/all any none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/reset</title>
    <ns>0</ns>
    <id>7186</id>
    <redirect title="cpp/utility/bitset/reset" />
    <revision>
      <id>27351</id>
      <parentid>27350</parentid>
      <timestamp>2012-05-01T17:23:05Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/utility/bitset/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/set</title>
    <ns>0</ns>
    <id>7187</id>
    <redirect title="cpp/utility/bitset/set" />
    <revision>
      <id>27353</id>
      <parentid>27352</parentid>
      <timestamp>2012-05-01T17:23:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/bitset/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/size</title>
    <ns>0</ns>
    <id>7188</id>
    <redirect title="cpp/utility/bitset/size" />
    <revision>
      <id>27355</id>
      <parentid>27354</parentid>
      <timestamp>2012-05-01T17:23:06Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/utility/bitset/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/start</title>
    <ns>0</ns>
    <id>7189</id>
    <redirect title="cpp/utility/bitset" />
    <revision>
      <id>27357</id>
      <parentid>27356</parentid>
      <timestamp>2012-05-01T17:23:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/utility/bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/test</title>
    <ns>0</ns>
    <id>7191</id>
    <redirect title="cpp/utility/bitset/test" />
    <revision>
      <id>27361</id>
      <parentid>27360</parentid>
      <timestamp>2012-05-01T17:23:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/utility/bitset/test]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/to string</title>
    <ns>0</ns>
    <id>7192</id>
    <redirect title="cpp/utility/bitset/to string" />
    <revision>
      <id>27363</id>
      <parentid>27362</parentid>
      <timestamp>2012-05-01T17:23:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/utility/bitset/to_string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/bitset/to ulong</title>
    <ns>0</ns>
    <id>7193</id>
    <redirect title="cpp/utility/bitset/to ulong" />
    <revision>
      <id>27365</id>
      <parentid>27364</parentid>
      <timestamp>2012-05-01T17:23:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/utility/bitset/to_ulong]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/containers</title>
    <ns>0</ns>
    <id>7404</id>
    <redirect title="cpp/container" />
    <revision>
      <id>27787</id>
      <parentid>27786</parentid>
      <timestamp>2012-05-01T17:24:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/container]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/</title>
    <ns>0</ns>
    <id>7231</id>
    <redirect title="cpp/container/deque" />
    <revision>
      <id>27441</id>
      <parentid>27440</parentid>
      <timestamp>2012-05-01T17:23:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/assign</title>
    <ns>0</ns>
    <id>7209</id>
    <redirect title="cpp/container/deque/assign" />
    <revision>
      <id>27397</id>
      <parentid>27396</parentid>
      <timestamp>2012-05-01T17:23:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/at</title>
    <ns>0</ns>
    <id>7210</id>
    <redirect title="cpp/container/deque/at" />
    <revision>
      <id>27399</id>
      <parentid>27398</parentid>
      <timestamp>2012-05-01T17:23:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/deque/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/back</title>
    <ns>0</ns>
    <id>7211</id>
    <redirect title="cpp/container/deque/back" />
    <revision>
      <id>27401</id>
      <parentid>27400</parentid>
      <timestamp>2012-05-01T17:23:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/begin</title>
    <ns>0</ns>
    <id>7212</id>
    <redirect title="cpp/container/deque/begin" />
    <revision>
      <id>27403</id>
      <parentid>27402</parentid>
      <timestamp>2012-05-01T17:23:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/clear</title>
    <ns>0</ns>
    <id>7213</id>
    <redirect title="cpp/container/deque/clear" />
    <revision>
      <id>27405</id>
      <parentid>27404</parentid>
      <timestamp>2012-05-01T17:23:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/deque constructors</title>
    <ns>0</ns>
    <id>7214</id>
    <redirect title="cpp/container/deque/deque" />
    <revision>
      <id>27407</id>
      <parentid>27406</parentid>
      <timestamp>2012-05-01T17:23:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/deque operators</title>
    <ns>0</ns>
    <id>7215</id>
    <redirect title="cpp/container/deque/operator cmp" />
    <revision>
      <id>36243</id>
      <parentid>27409</parentid>
      <timestamp>2012-06-17T12:50:29Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/deque/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/empty</title>
    <ns>0</ns>
    <id>7216</id>
    <redirect title="cpp/container/deque/empty" />
    <revision>
      <id>27411</id>
      <parentid>27410</parentid>
      <timestamp>2012-05-01T17:23:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/end</title>
    <ns>0</ns>
    <id>7217</id>
    <redirect title="cpp/container/deque/end" />
    <revision>
      <id>27413</id>
      <parentid>27412</parentid>
      <timestamp>2012-05-01T17:23:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/deque/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/erase</title>
    <ns>0</ns>
    <id>7218</id>
    <redirect title="cpp/container/deque/erase" />
    <revision>
      <id>27415</id>
      <parentid>27414</parentid>
      <timestamp>2012-05-01T17:23:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/front</title>
    <ns>0</ns>
    <id>7219</id>
    <redirect title="cpp/container/deque/front" />
    <revision>
      <id>27417</id>
      <parentid>27416</parentid>
      <timestamp>2012-05-01T17:23:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/deque/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/insert</title>
    <ns>0</ns>
    <id>7220</id>
    <redirect title="cpp/container/deque/insert" />
    <revision>
      <id>27419</id>
      <parentid>27418</parentid>
      <timestamp>2012-05-01T17:23:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/max size</title>
    <ns>0</ns>
    <id>7221</id>
    <redirect title="cpp/container/deque/max size" />
    <revision>
      <id>27421</id>
      <parentid>27420</parentid>
      <timestamp>2012-05-01T17:23:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/deque/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/pop back</title>
    <ns>0</ns>
    <id>7222</id>
    <redirect title="cpp/container/deque/pop back" />
    <revision>
      <id>27423</id>
      <parentid>27422</parentid>
      <timestamp>2012-05-01T17:23:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/deque/pop_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/pop front</title>
    <ns>0</ns>
    <id>7223</id>
    <redirect title="cpp/container/deque/pop front" />
    <revision>
      <id>27425</id>
      <parentid>27424</parentid>
      <timestamp>2012-05-01T17:23:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/deque/pop_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/push back</title>
    <ns>0</ns>
    <id>7224</id>
    <redirect title="cpp/container/deque/push back" />
    <revision>
      <id>27427</id>
      <parentid>27426</parentid>
      <timestamp>2012-05-01T17:23:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/deque/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/push front</title>
    <ns>0</ns>
    <id>7225</id>
    <redirect title="cpp/container/deque/push front" />
    <revision>
      <id>27429</id>
      <parentid>27428</parentid>
      <timestamp>2012-05-01T17:23:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/deque/push_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/rbegin</title>
    <ns>0</ns>
    <id>7226</id>
    <redirect title="cpp/container/deque/rbegin" />
    <revision>
      <id>27431</id>
      <parentid>27430</parentid>
      <timestamp>2012-05-01T17:23:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/rend</title>
    <ns>0</ns>
    <id>7227</id>
    <redirect title="cpp/container/deque/rend" />
    <revision>
      <id>27433</id>
      <parentid>27432</parentid>
      <timestamp>2012-05-01T17:23:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/resize</title>
    <ns>0</ns>
    <id>7228</id>
    <redirect title="cpp/container/deque/resize" />
    <revision>
      <id>27435</id>
      <parentid>27434</parentid>
      <timestamp>2012-05-01T17:23:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/deque/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/size</title>
    <ns>0</ns>
    <id>7229</id>
    <redirect title="cpp/container/deque/size" />
    <revision>
      <id>27437</id>
      <parentid>27436</parentid>
      <timestamp>2012-05-01T17:23:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/start</title>
    <ns>0</ns>
    <id>7230</id>
    <redirect title="cpp/container/deque" />
    <revision>
      <id>27439</id>
      <parentid>27438</parentid>
      <timestamp>2012-05-01T17:23:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/deque]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/deque/swap</title>
    <ns>0</ns>
    <id>7232</id>
    <redirect title="cpp/container/deque/swap" />
    <revision>
      <id>27443</id>
      <parentid>27442</parentid>
      <timestamp>2012-05-01T17:23:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/deque/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/</title>
    <ns>0</ns>
    <id>7208</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27395</id>
      <parentid>27394</parentid>
      <timestamp>2012-05-01T17:23:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/binary function</title>
    <ns>0</ns>
    <id>7194</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27367</id>
      <parentid>27366</parentid>
      <timestamp>2012-05-01T17:23:07Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/binary negate</title>
    <ns>0</ns>
    <id>7195</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27369</id>
      <parentid>27368</parentid>
      <timestamp>2012-05-01T17:23:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/bind1st</title>
    <ns>0</ns>
    <id>7196</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27371</id>
      <parentid>27370</parentid>
      <timestamp>2012-05-01T17:23:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/bind2nd</title>
    <ns>0</ns>
    <id>7197</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27373</id>
      <parentid>27372</parentid>
      <timestamp>2012-05-01T17:23:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/binder1st</title>
    <ns>0</ns>
    <id>7198</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27375</id>
      <parentid>27374</parentid>
      <timestamp>2012-05-01T17:23:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/binder2nd</title>
    <ns>0</ns>
    <id>7199</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27377</id>
      <parentid>27376</parentid>
      <timestamp>2012-05-01T17:23:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/const mem fun ref t</title>
    <ns>0</ns>
    <id>7202</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27383</id>
      <parentid>27382</parentid>
      <timestamp>2012-05-01T17:23:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/const mem fun t</title>
    <ns>0</ns>
    <id>7203</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27385</id>
      <parentid>27384</parentid>
      <timestamp>2012-05-01T17:23:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/const mem fun1 ref t</title>
    <ns>0</ns>
    <id>7200</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27379</id>
      <parentid>27378</parentid>
      <timestamp>2012-05-01T17:23:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/const mem fun1 t</title>
    <ns>0</ns>
    <id>7201</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27381</id>
      <parentid>27380</parentid>
      <timestamp>2012-05-01T17:23:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/divides</title>
    <ns>0</ns>
    <id>7204</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27387</id>
      <parentid>27386</parentid>
      <timestamp>2012-05-01T17:23:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/greater</title>
    <ns>0</ns>
    <id>7205</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27389</id>
      <parentid>27388</parentid>
      <timestamp>2012-05-01T17:23:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/not2</title>
    <ns>0</ns>
    <id>7206</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27391</id>
      <parentid>27390</parentid>
      <timestamp>2012-05-01T17:23:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/functional/start</title>
    <ns>0</ns>
    <id>7207</id>
    <redirect title="cpp/utility/functional" />
    <revision>
      <id>27393</id>
      <parentid>27392</parentid>
      <timestamp>2012-05-01T17:23:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/functional]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/iterators</title>
    <ns>0</ns>
    <id>7405</id>
    <redirect title="cpp/iterator" />
    <revision>
      <id>27789</id>
      <parentid>27788</parentid>
      <timestamp>2012-05-01T17:24:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="26">#redirect [[cpp/iterator]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/</title>
    <ns>0</ns>
    <id>7260</id>
    <redirect title="cpp/container/list" />
    <revision>
      <id>27499</id>
      <parentid>27498</parentid>
      <timestamp>2012-05-01T17:23:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/container/list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/assign</title>
    <ns>0</ns>
    <id>7233</id>
    <redirect title="cpp/container/list/assign" />
    <revision>
      <id>27445</id>
      <parentid>27444</parentid>
      <timestamp>2012-05-01T17:23:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/back</title>
    <ns>0</ns>
    <id>7234</id>
    <redirect title="cpp/container/list/back" />
    <revision>
      <id>27447</id>
      <parentid>27446</parentid>
      <timestamp>2012-05-01T17:23:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/begin</title>
    <ns>0</ns>
    <id>7235</id>
    <redirect title="cpp/container/list/begin" />
    <revision>
      <id>27449</id>
      <parentid>27448</parentid>
      <timestamp>2012-05-01T17:23:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/clear</title>
    <ns>0</ns>
    <id>7236</id>
    <redirect title="cpp/container/list/clear" />
    <revision>
      <id>27451</id>
      <parentid>27450</parentid>
      <timestamp>2012-05-01T17:23:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/empty</title>
    <ns>0</ns>
    <id>7237</id>
    <redirect title="cpp/container/list/empty" />
    <revision>
      <id>27453</id>
      <parentid>27452</parentid>
      <timestamp>2012-05-01T17:23:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/end</title>
    <ns>0</ns>
    <id>7238</id>
    <redirect title="cpp/container/list/end" />
    <revision>
      <id>27455</id>
      <parentid>27454</parentid>
      <timestamp>2012-05-01T17:23:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/list/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/erase</title>
    <ns>0</ns>
    <id>7239</id>
    <redirect title="cpp/container/list/erase" />
    <revision>
      <id>27457</id>
      <parentid>27456</parentid>
      <timestamp>2012-05-01T17:23:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/front</title>
    <ns>0</ns>
    <id>7240</id>
    <redirect title="cpp/container/list/front" />
    <revision>
      <id>27459</id>
      <parentid>27458</parentid>
      <timestamp>2012-05-01T17:23:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/insert</title>
    <ns>0</ns>
    <id>7241</id>
    <redirect title="cpp/container/list/insert" />
    <revision>
      <id>27461</id>
      <parentid>27460</parentid>
      <timestamp>2012-05-01T17:23:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/list constructors</title>
    <ns>0</ns>
    <id>7242</id>
    <redirect title="cpp/container/list/list" />
    <revision>
      <id>27463</id>
      <parentid>27462</parentid>
      <timestamp>2012-05-01T17:23:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/list operators</title>
    <ns>0</ns>
    <id>7243</id>
    <redirect title="cpp/container/list/operator cmp" />
    <revision>
      <id>36244</id>
      <parentid>27465</parentid>
      <timestamp>2012-06-17T12:50:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/list/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/max size</title>
    <ns>0</ns>
    <id>7244</id>
    <redirect title="cpp/container/list/max size" />
    <revision>
      <id>27467</id>
      <parentid>27466</parentid>
      <timestamp>2012-05-01T17:23:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/list/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/merge</title>
    <ns>0</ns>
    <id>7245</id>
    <redirect title="cpp/container/list/merge" />
    <revision>
      <id>27469</id>
      <parentid>27468</parentid>
      <timestamp>2012-05-01T17:23:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/list/merge]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/pop back</title>
    <ns>0</ns>
    <id>7246</id>
    <redirect title="cpp/container/list/pop back" />
    <revision>
      <id>27471</id>
      <parentid>27470</parentid>
      <timestamp>2012-05-01T17:23:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/list/pop_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/pop front</title>
    <ns>0</ns>
    <id>7247</id>
    <redirect title="cpp/container/list/pop front" />
    <revision>
      <id>27473</id>
      <parentid>27472</parentid>
      <timestamp>2012-05-01T17:23:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/list/pop_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/push back</title>
    <ns>0</ns>
    <id>7248</id>
    <redirect title="cpp/container/list/push back" />
    <revision>
      <id>27475</id>
      <parentid>27474</parentid>
      <timestamp>2012-05-01T17:23:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/list/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/push front</title>
    <ns>0</ns>
    <id>7249</id>
    <redirect title="cpp/container/list/push front" />
    <revision>
      <id>27477</id>
      <parentid>27476</parentid>
      <timestamp>2012-05-01T17:23:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/list/push_front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/rbegin</title>
    <ns>0</ns>
    <id>7250</id>
    <redirect title="cpp/container/list/rbegin" />
    <revision>
      <id>27479</id>
      <parentid>27478</parentid>
      <timestamp>2012-05-01T17:23:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/remove</title>
    <ns>0</ns>
    <id>7251</id>
    <redirect title="cpp/container/list/remove" />
    <revision>
      <id>27481</id>
      <parentid>27480</parentid>
      <timestamp>2012-05-01T17:23:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/remove if</title>
    <ns>0</ns>
    <id>7252</id>
    <redirect title="cpp/container/list/remove" />
    <revision>
      <id>45611</id>
      <parentid>27483</parentid>
      <timestamp>2013-01-08T04:49:45Z</timestamp>
      <contributor>
        <username>Theemathas</username>
        <id>1439</id>
      </contributor>
      <comment>Redirected page to [[cpp/container/list/remove]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/remove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/rend</title>
    <ns>0</ns>
    <id>7253</id>
    <redirect title="cpp/container/list/rend" />
    <revision>
      <id>27485</id>
      <parentid>27484</parentid>
      <timestamp>2012-05-01T17:23:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/resize</title>
    <ns>0</ns>
    <id>7254</id>
    <redirect title="cpp/container/list/resize" />
    <revision>
      <id>27487</id>
      <parentid>27486</parentid>
      <timestamp>2012-05-01T17:23:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/reverse</title>
    <ns>0</ns>
    <id>7255</id>
    <redirect title="cpp/container/list/reverse" />
    <revision>
      <id>27489</id>
      <parentid>27488</parentid>
      <timestamp>2012-05-01T17:23:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/list/reverse]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/size</title>
    <ns>0</ns>
    <id>7256</id>
    <redirect title="cpp/container/list/size" />
    <revision>
      <id>27491</id>
      <parentid>27490</parentid>
      <timestamp>2012-05-01T17:23:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/sort</title>
    <ns>0</ns>
    <id>7257</id>
    <redirect title="cpp/container/list/sort" />
    <revision>
      <id>27493</id>
      <parentid>27492</parentid>
      <timestamp>2012-05-01T17:23:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/sort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/splice</title>
    <ns>0</ns>
    <id>7258</id>
    <redirect title="cpp/container/list/splice" />
    <revision>
      <id>27495</id>
      <parentid>27494</parentid>
      <timestamp>2012-05-01T17:23:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/splice]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/start</title>
    <ns>0</ns>
    <id>7259</id>
    <redirect title="cpp/container/list" />
    <revision>
      <id>27497</id>
      <parentid>27496</parentid>
      <timestamp>2012-05-01T17:23:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/container/list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/swap</title>
    <ns>0</ns>
    <id>7261</id>
    <redirect title="cpp/container/list/swap" />
    <revision>
      <id>27501</id>
      <parentid>27500</parentid>
      <timestamp>2012-05-01T17:23:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/list/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/list/unique</title>
    <ns>0</ns>
    <id>7262</id>
    <redirect title="cpp/container/list/unique" />
    <revision>
      <id>27503</id>
      <parentid>27502</parentid>
      <timestamp>2012-05-01T17:23:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/list/unique]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/</title>
    <ns>0</ns>
    <id>7282</id>
    <redirect title="cpp/container/map" />
    <revision>
      <id>27543</id>
      <parentid>27542</parentid>
      <timestamp>2012-05-01T17:23:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/begin</title>
    <ns>0</ns>
    <id>7263</id>
    <redirect title="cpp/container/map/begin" />
    <revision>
      <id>27505</id>
      <parentid>27504</parentid>
      <timestamp>2012-05-01T17:23:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/clear</title>
    <ns>0</ns>
    <id>7264</id>
    <redirect title="cpp/container/map/clear" />
    <revision>
      <id>27507</id>
      <parentid>27506</parentid>
      <timestamp>2012-05-01T17:23:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/count</title>
    <ns>0</ns>
    <id>7265</id>
    <redirect title="cpp/container/map/count" />
    <revision>
      <id>27509</id>
      <parentid>27508</parentid>
      <timestamp>2012-05-01T17:23:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/empty</title>
    <ns>0</ns>
    <id>7266</id>
    <redirect title="cpp/container/map/empty" />
    <revision>
      <id>27511</id>
      <parentid>27510</parentid>
      <timestamp>2012-05-01T17:23:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/end</title>
    <ns>0</ns>
    <id>7267</id>
    <redirect title="cpp/container/map/end" />
    <revision>
      <id>27513</id>
      <parentid>27512</parentid>
      <timestamp>2012-05-01T17:23:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/map/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/equal range</title>
    <ns>0</ns>
    <id>7268</id>
    <redirect title="cpp/container/map/equal range" />
    <revision>
      <id>27515</id>
      <parentid>27514</parentid>
      <timestamp>2012-05-01T17:23:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/map/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/erase</title>
    <ns>0</ns>
    <id>7269</id>
    <redirect title="cpp/container/map/erase" />
    <revision>
      <id>27517</id>
      <parentid>27516</parentid>
      <timestamp>2012-05-01T17:23:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/map/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/find</title>
    <ns>0</ns>
    <id>7270</id>
    <redirect title="cpp/container/map/find" />
    <revision>
      <id>27519</id>
      <parentid>27518</parentid>
      <timestamp>2012-05-01T17:23:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/insert</title>
    <ns>0</ns>
    <id>7271</id>
    <redirect title="cpp/container/map/insert" />
    <revision>
      <id>27521</id>
      <parentid>27520</parentid>
      <timestamp>2012-05-01T17:23:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/map/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/key comp</title>
    <ns>0</ns>
    <id>7272</id>
    <redirect title="cpp/container/map/key comp" />
    <revision>
      <id>27523</id>
      <parentid>27522</parentid>
      <timestamp>2012-05-01T17:23:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/map/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/lower bound</title>
    <ns>0</ns>
    <id>7273</id>
    <redirect title="cpp/container/map/lower bound" />
    <revision>
      <id>27525</id>
      <parentid>27524</parentid>
      <timestamp>2012-05-01T17:23:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/map/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/map constructors</title>
    <ns>0</ns>
    <id>7274</id>
    <redirect title="cpp/container/map/map" />
    <revision>
      <id>27527</id>
      <parentid>27526</parentid>
      <timestamp>2012-05-01T17:23:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/map/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/map operators</title>
    <ns>0</ns>
    <id>7275</id>
    <redirect title="cpp/container/map/operator cmp" />
    <revision>
      <id>36245</id>
      <parentid>27529</parentid>
      <timestamp>2012-06-17T12:50:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/map/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/map typedefs</title>
    <ns>0</ns>
    <id>7276</id>
    <redirect title="cpp/container/map" />
    <revision>
      <id>27531</id>
      <parentid>27530</parentid>
      <timestamp>2012-05-01T17:23:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/max size</title>
    <ns>0</ns>
    <id>7277</id>
    <redirect title="cpp/container/map/max size" />
    <revision>
      <id>27533</id>
      <parentid>27532</parentid>
      <timestamp>2012-05-01T17:23:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/map/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/rbegin</title>
    <ns>0</ns>
    <id>7278</id>
    <redirect title="cpp/container/map/rbegin" />
    <revision>
      <id>27535</id>
      <parentid>27534</parentid>
      <timestamp>2012-05-01T17:23:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/map/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/rend</title>
    <ns>0</ns>
    <id>7279</id>
    <redirect title="cpp/container/map/rend" />
    <revision>
      <id>27537</id>
      <parentid>27536</parentid>
      <timestamp>2012-05-01T17:23:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/size</title>
    <ns>0</ns>
    <id>7280</id>
    <redirect title="cpp/container/map/size" />
    <revision>
      <id>27539</id>
      <parentid>27538</parentid>
      <timestamp>2012-05-01T17:23:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/start</title>
    <ns>0</ns>
    <id>7281</id>
    <redirect title="cpp/container/map" />
    <revision>
      <id>27541</id>
      <parentid>27540</parentid>
      <timestamp>2012-05-01T17:23:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/map]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/swap</title>
    <ns>0</ns>
    <id>7283</id>
    <redirect title="cpp/container/map/swap" />
    <revision>
      <id>27545</id>
      <parentid>27544</parentid>
      <timestamp>2012-05-01T17:23:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/map/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/upper bound</title>
    <ns>0</ns>
    <id>7284</id>
    <redirect title="cpp/container/map/upper bound" />
    <revision>
      <id>27547</id>
      <parentid>27546</parentid>
      <timestamp>2012-05-01T17:23:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/map/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/map/value comp</title>
    <ns>0</ns>
    <id>7285</id>
    <redirect title="cpp/container/map/value comp" />
    <revision>
      <id>27549</id>
      <parentid>27548</parentid>
      <timestamp>2012-05-01T17:23:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/map/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/memory/</title>
    <ns>0</ns>
    <id>7288</id>
    <redirect title="cpp/memory" />
    <revision>
      <id>27555</id>
      <parentid>27554</parentid>
      <timestamp>2012-05-01T17:23:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/memory]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/memory/auto ptr</title>
    <ns>0</ns>
    <id>7286</id>
    <redirect title="cpp/memory" />
    <revision>
      <id>27551</id>
      <parentid>27550</parentid>
      <timestamp>2012-05-01T17:23:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/memory]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/memory/start</title>
    <ns>0</ns>
    <id>7287</id>
    <redirect title="cpp/memory" />
    <revision>
      <id>27553</id>
      <parentid>27552</parentid>
      <timestamp>2012-05-01T17:23:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/memory]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/</title>
    <ns>0</ns>
    <id>7307</id>
    <redirect title="cpp/container/multimap" />
    <revision>
      <id>27593</id>
      <parentid>27592</parentid>
      <timestamp>2012-05-01T17:23:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/begin</title>
    <ns>0</ns>
    <id>7289</id>
    <redirect title="cpp/container/multimap/begin" />
    <revision>
      <id>27557</id>
      <parentid>27556</parentid>
      <timestamp>2012-05-01T17:23:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/clear</title>
    <ns>0</ns>
    <id>7290</id>
    <redirect title="cpp/container/multimap/clear" />
    <revision>
      <id>27559</id>
      <parentid>27558</parentid>
      <timestamp>2012-05-01T17:23:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/count</title>
    <ns>0</ns>
    <id>7291</id>
    <redirect title="cpp/container/multimap/count" />
    <revision>
      <id>27561</id>
      <parentid>27560</parentid>
      <timestamp>2012-05-01T17:23:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/empty</title>
    <ns>0</ns>
    <id>7292</id>
    <redirect title="cpp/container/multimap/empty" />
    <revision>
      <id>27563</id>
      <parentid>27562</parentid>
      <timestamp>2012-05-01T17:23:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/end</title>
    <ns>0</ns>
    <id>7293</id>
    <redirect title="cpp/container/multimap/end" />
    <revision>
      <id>27565</id>
      <parentid>27564</parentid>
      <timestamp>2012-05-01T17:23:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/multimap/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/equal range</title>
    <ns>0</ns>
    <id>7294</id>
    <redirect title="cpp/container/multimap/equal range" />
    <revision>
      <id>27567</id>
      <parentid>27566</parentid>
      <timestamp>2012-05-01T17:23:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multimap/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/erase</title>
    <ns>0</ns>
    <id>7295</id>
    <redirect title="cpp/container/multimap/erase" />
    <revision>
      <id>27569</id>
      <parentid>27568</parentid>
      <timestamp>2012-05-01T17:23:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multimap/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/find</title>
    <ns>0</ns>
    <id>7296</id>
    <redirect title="cpp/container/multimap/find" />
    <revision>
      <id>27571</id>
      <parentid>27570</parentid>
      <timestamp>2012-05-01T17:23:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/insert</title>
    <ns>0</ns>
    <id>7297</id>
    <redirect title="cpp/container/multimap/insert" />
    <revision>
      <id>27573</id>
      <parentid>27572</parentid>
      <timestamp>2012-05-01T17:23:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multimap/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/key comp</title>
    <ns>0</ns>
    <id>7298</id>
    <redirect title="cpp/container/multimap/key comp" />
    <revision>
      <id>27575</id>
      <parentid>27574</parentid>
      <timestamp>2012-05-01T17:23:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multimap/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/lower bound</title>
    <ns>0</ns>
    <id>7299</id>
    <redirect title="cpp/container/multimap/lower bound" />
    <revision>
      <id>27577</id>
      <parentid>27576</parentid>
      <timestamp>2012-05-01T17:23:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multimap/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/max size</title>
    <ns>0</ns>
    <id>7300</id>
    <redirect title="cpp/container/multimap/max size" />
    <revision>
      <id>27579</id>
      <parentid>27578</parentid>
      <timestamp>2012-05-01T17:23:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multimap/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/multimap constructors</title>
    <ns>0</ns>
    <id>7301</id>
    <redirect title="cpp/container/multimap/multimap" />
    <revision>
      <id>27581</id>
      <parentid>27580</parentid>
      <timestamp>2012-05-01T17:23:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multimap/multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/multimap operators</title>
    <ns>0</ns>
    <id>7302</id>
    <redirect title="cpp/container/multimap/operator cmp" />
    <revision>
      <id>36246</id>
      <parentid>27583</parentid>
      <timestamp>2012-06-17T12:51:43Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/container/multimap/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/rbegin</title>
    <ns>0</ns>
    <id>7303</id>
    <redirect title="cpp/container/multimap/rbegin" />
    <revision>
      <id>27585</id>
      <parentid>27584</parentid>
      <timestamp>2012-05-01T17:23:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multimap/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/rend</title>
    <ns>0</ns>
    <id>7304</id>
    <redirect title="cpp/container/multimap/rend" />
    <revision>
      <id>27587</id>
      <parentid>27586</parentid>
      <timestamp>2012-05-01T17:23:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/size</title>
    <ns>0</ns>
    <id>7305</id>
    <redirect title="cpp/container/multimap/size" />
    <revision>
      <id>27589</id>
      <parentid>27588</parentid>
      <timestamp>2012-05-01T17:23:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/start</title>
    <ns>0</ns>
    <id>7306</id>
    <redirect title="cpp/container/multimap" />
    <revision>
      <id>27591</id>
      <parentid>27590</parentid>
      <timestamp>2012-05-01T17:23:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multimap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/swap</title>
    <ns>0</ns>
    <id>7308</id>
    <redirect title="cpp/container/multimap/swap" />
    <revision>
      <id>27595</id>
      <parentid>27594</parentid>
      <timestamp>2012-05-01T17:23:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multimap/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/upper bound</title>
    <ns>0</ns>
    <id>7309</id>
    <redirect title="cpp/container/multimap/upper bound" />
    <revision>
      <id>27597</id>
      <parentid>27596</parentid>
      <timestamp>2012-05-01T17:23:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multimap/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multimap/value comp</title>
    <ns>0</ns>
    <id>7310</id>
    <redirect title="cpp/container/multimap/value comp" />
    <revision>
      <id>27599</id>
      <parentid>27598</parentid>
      <timestamp>2012-05-01T17:23:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/multimap/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/</title>
    <ns>0</ns>
    <id>7329</id>
    <redirect title="cpp/container/multiset" />
    <revision>
      <id>27637</id>
      <parentid>27636</parentid>
      <timestamp>2012-05-01T17:23:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/begin</title>
    <ns>0</ns>
    <id>7311</id>
    <redirect title="cpp/container/multiset/begin" />
    <revision>
      <id>27601</id>
      <parentid>27600</parentid>
      <timestamp>2012-05-01T17:23:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/clear</title>
    <ns>0</ns>
    <id>7312</id>
    <redirect title="cpp/container/multiset/clear" />
    <revision>
      <id>27603</id>
      <parentid>27602</parentid>
      <timestamp>2012-05-01T17:23:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/count</title>
    <ns>0</ns>
    <id>7313</id>
    <redirect title="cpp/container/multiset/count" />
    <revision>
      <id>27605</id>
      <parentid>27604</parentid>
      <timestamp>2012-05-01T17:23:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/empty</title>
    <ns>0</ns>
    <id>7314</id>
    <redirect title="cpp/container/multiset/empty" />
    <revision>
      <id>27607</id>
      <parentid>27606</parentid>
      <timestamp>2012-05-01T17:23:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/end</title>
    <ns>0</ns>
    <id>7315</id>
    <redirect title="cpp/container/multiset/end" />
    <revision>
      <id>27609</id>
      <parentid>27608</parentid>
      <timestamp>2012-05-01T17:23:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/multiset/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/equal range</title>
    <ns>0</ns>
    <id>7316</id>
    <redirect title="cpp/container/multiset/equal range" />
    <revision>
      <id>27611</id>
      <parentid>27610</parentid>
      <timestamp>2012-05-01T17:23:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multiset/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/erase</title>
    <ns>0</ns>
    <id>7317</id>
    <redirect title="cpp/container/multiset/erase" />
    <revision>
      <id>27613</id>
      <parentid>27612</parentid>
      <timestamp>2012-05-01T17:23:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/multiset/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/find</title>
    <ns>0</ns>
    <id>7318</id>
    <redirect title="cpp/container/multiset/find" />
    <revision>
      <id>27615</id>
      <parentid>27614</parentid>
      <timestamp>2012-05-01T17:23:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/insert</title>
    <ns>0</ns>
    <id>7319</id>
    <redirect title="cpp/container/multiset/insert" />
    <revision>
      <id>27617</id>
      <parentid>27616</parentid>
      <timestamp>2012-05-01T17:23:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multiset/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/key comp</title>
    <ns>0</ns>
    <id>7320</id>
    <redirect title="cpp/container/multiset/key comp" />
    <revision>
      <id>27619</id>
      <parentid>27618</parentid>
      <timestamp>2012-05-01T17:23:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multiset/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/lower bound</title>
    <ns>0</ns>
    <id>7321</id>
    <redirect title="cpp/container/multiset/lower bound" />
    <revision>
      <id>27621</id>
      <parentid>27620</parentid>
      <timestamp>2012-05-01T17:23:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multiset/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/max size</title>
    <ns>0</ns>
    <id>7322</id>
    <redirect title="cpp/container/multiset/max size" />
    <revision>
      <id>27623</id>
      <parentid>27622</parentid>
      <timestamp>2012-05-01T17:23:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multiset/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/multiset constructors</title>
    <ns>0</ns>
    <id>7323</id>
    <redirect title="cpp/container/multiset/multiset" />
    <revision>
      <id>27625</id>
      <parentid>27624</parentid>
      <timestamp>2012-05-01T17:23:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/container/multiset/multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/multiset operators</title>
    <ns>0</ns>
    <id>7324</id>
    <redirect title="cpp/container/multiset/operator cmp" />
    <revision>
      <id>36247</id>
      <parentid>27627</parentid>
      <timestamp>2012-06-17T12:53:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/container/multiset/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/rbegin</title>
    <ns>0</ns>
    <id>7325</id>
    <redirect title="cpp/container/multiset/rbegin" />
    <revision>
      <id>27629</id>
      <parentid>27628</parentid>
      <timestamp>2012-05-01T17:23:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/multiset/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/rend</title>
    <ns>0</ns>
    <id>7326</id>
    <redirect title="cpp/container/multiset/rend" />
    <revision>
      <id>27631</id>
      <parentid>27630</parentid>
      <timestamp>2012-05-01T17:23:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/size</title>
    <ns>0</ns>
    <id>7327</id>
    <redirect title="cpp/container/multiset/size" />
    <revision>
      <id>27633</id>
      <parentid>27632</parentid>
      <timestamp>2012-05-01T17:23:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/start</title>
    <ns>0</ns>
    <id>7328</id>
    <redirect title="cpp/container/multiset" />
    <revision>
      <id>27635</id>
      <parentid>27634</parentid>
      <timestamp>2012-05-01T17:23:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/multiset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/swap</title>
    <ns>0</ns>
    <id>7330</id>
    <redirect title="cpp/container/multiset/swap" />
    <revision>
      <id>27639</id>
      <parentid>27638</parentid>
      <timestamp>2012-05-01T17:23:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/multiset/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/upper bound</title>
    <ns>0</ns>
    <id>7331</id>
    <redirect title="cpp/container/multiset/upper bound" />
    <revision>
      <id>27641</id>
      <parentid>27640</parentid>
      <timestamp>2012-05-01T17:23:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/multiset/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/multiset/value comp</title>
    <ns>0</ns>
    <id>7332</id>
    <redirect title="cpp/container/multiset/value comp" />
    <revision>
      <id>27643</id>
      <parentid>27642</parentid>
      <timestamp>2012-05-01T17:23:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/multiset/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/</title>
    <ns>0</ns>
    <id>7339</id>
    <redirect title="cpp/container/priority queue" />
    <revision>
      <id>27657</id>
      <parentid>27656</parentid>
      <timestamp>2012-05-01T17:23:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/priority_queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/empty</title>
    <ns>0</ns>
    <id>7333</id>
    <redirect title="cpp/container/priority queue/empty" />
    <revision>
      <id>27645</id>
      <parentid>27644</parentid>
      <timestamp>2012-05-01T17:23:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="48">#redirect [[cpp/container/priority_queue/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/pop</title>
    <ns>0</ns>
    <id>7334</id>
    <redirect title="cpp/container/priority queue/pop" />
    <revision>
      <id>27647</id>
      <parentid>27646</parentid>
      <timestamp>2012-05-01T17:23:57Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/priority_queue/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/pqueue constructors</title>
    <ns>0</ns>
    <id>7335</id>
    <redirect title="cpp/container/priority queue/priority queue" />
    <revision>
      <id>27649</id>
      <parentid>27648</parentid>
      <timestamp>2012-05-01T17:23:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="57">#redirect [[cpp/container/priority_queue/priority_queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/push</title>
    <ns>0</ns>
    <id>7336</id>
    <redirect title="cpp/container/priority queue/push" />
    <revision>
      <id>27651</id>
      <parentid>27650</parentid>
      <timestamp>2012-05-01T17:23:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/priority_queue/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/size</title>
    <ns>0</ns>
    <id>7337</id>
    <redirect title="cpp/container/priority queue/size" />
    <revision>
      <id>27653</id>
      <parentid>27652</parentid>
      <timestamp>2012-05-01T17:23:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/priority_queue/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/start</title>
    <ns>0</ns>
    <id>7338</id>
    <redirect title="cpp/container/priority queue" />
    <revision>
      <id>27655</id>
      <parentid>27654</parentid>
      <timestamp>2012-05-01T17:23:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/priority_queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/priority queue/top</title>
    <ns>0</ns>
    <id>7340</id>
    <redirect title="cpp/container/priority queue/top" />
    <revision>
      <id>27659</id>
      <parentid>27658</parentid>
      <timestamp>2012-05-01T17:23:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/container/priority_queue/top]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/</title>
    <ns>0</ns>
    <id>7349</id>
    <redirect title="cpp/container/queue" />
    <revision>
      <id>27677</id>
      <parentid>27676</parentid>
      <timestamp>2012-05-01T17:24:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/back</title>
    <ns>0</ns>
    <id>7341</id>
    <redirect title="cpp/container/queue/back" />
    <revision>
      <id>27661</id>
      <parentid>27660</parentid>
      <timestamp>2012-05-01T17:24:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/queue/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/empty</title>
    <ns>0</ns>
    <id>7342</id>
    <redirect title="cpp/container/queue/empty" />
    <revision>
      <id>27663</id>
      <parentid>27662</parentid>
      <timestamp>2012-05-01T17:24:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/queue/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/front</title>
    <ns>0</ns>
    <id>7343</id>
    <redirect title="cpp/container/queue/front" />
    <revision>
      <id>27665</id>
      <parentid>27664</parentid>
      <timestamp>2012-05-01T17:24:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/queue/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/pop</title>
    <ns>0</ns>
    <id>7344</id>
    <redirect title="cpp/container/queue/pop" />
    <revision>
      <id>27667</id>
      <parentid>27666</parentid>
      <timestamp>2012-05-01T17:24:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/queue/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/push</title>
    <ns>0</ns>
    <id>7345</id>
    <redirect title="cpp/container/queue/push" />
    <revision>
      <id>27669</id>
      <parentid>27668</parentid>
      <timestamp>2012-05-01T17:24:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/queue/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/queue constructors</title>
    <ns>0</ns>
    <id>7346</id>
    <redirect title="cpp/container/queue/queue" />
    <revision>
      <id>27671</id>
      <parentid>27670</parentid>
      <timestamp>2012-05-01T17:24:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/queue/queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/size</title>
    <ns>0</ns>
    <id>7347</id>
    <redirect title="cpp/container/queue/size" />
    <revision>
      <id>27673</id>
      <parentid>27672</parentid>
      <timestamp>2012-05-01T17:24:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/queue/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/queue/start</title>
    <ns>0</ns>
    <id>7348</id>
    <redirect title="cpp/container/queue" />
    <revision>
      <id>27675</id>
      <parentid>27674</parentid>
      <timestamp>2012-05-01T17:24:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/queue]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/</title>
    <ns>0</ns>
    <id>7368</id>
    <redirect title="cpp/container/set" />
    <revision>
      <id>27715</id>
      <parentid>27714</parentid>
      <timestamp>2012-05-01T17:24:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/begin</title>
    <ns>0</ns>
    <id>7350</id>
    <redirect title="cpp/container/set/begin" />
    <revision>
      <id>27679</id>
      <parentid>27678</parentid>
      <timestamp>2012-05-01T17:24:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/clear</title>
    <ns>0</ns>
    <id>7351</id>
    <redirect title="cpp/container/set/clear" />
    <revision>
      <id>27681</id>
      <parentid>27680</parentid>
      <timestamp>2012-05-01T17:24:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/count</title>
    <ns>0</ns>
    <id>7352</id>
    <redirect title="cpp/container/set/count" />
    <revision>
      <id>27683</id>
      <parentid>27682</parentid>
      <timestamp>2012-05-01T17:24:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/empty</title>
    <ns>0</ns>
    <id>7353</id>
    <redirect title="cpp/container/set/empty" />
    <revision>
      <id>27685</id>
      <parentid>27684</parentid>
      <timestamp>2012-05-01T17:24:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/end</title>
    <ns>0</ns>
    <id>7354</id>
    <redirect title="cpp/container/set/end" />
    <revision>
      <id>27687</id>
      <parentid>27686</parentid>
      <timestamp>2012-05-01T17:24:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/set/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/equal range</title>
    <ns>0</ns>
    <id>7355</id>
    <redirect title="cpp/container/set/equal range" />
    <revision>
      <id>27689</id>
      <parentid>27688</parentid>
      <timestamp>2012-05-01T17:24:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/set/equal_range]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/erase</title>
    <ns>0</ns>
    <id>7356</id>
    <redirect title="cpp/container/set/erase" />
    <revision>
      <id>27691</id>
      <parentid>27690</parentid>
      <timestamp>2012-05-01T17:24:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/set/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/find</title>
    <ns>0</ns>
    <id>7357</id>
    <redirect title="cpp/container/set/find" />
    <revision>
      <id>27693</id>
      <parentid>27692</parentid>
      <timestamp>2012-05-01T17:24:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/insert</title>
    <ns>0</ns>
    <id>7358</id>
    <redirect title="cpp/container/set/insert" />
    <revision>
      <id>27695</id>
      <parentid>27694</parentid>
      <timestamp>2012-05-01T17:24:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/set/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/key comp</title>
    <ns>0</ns>
    <id>7359</id>
    <redirect title="cpp/container/set/key comp" />
    <revision>
      <id>27697</id>
      <parentid>27696</parentid>
      <timestamp>2012-05-01T17:24:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/set/key_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/lower bound</title>
    <ns>0</ns>
    <id>7360</id>
    <redirect title="cpp/container/set/lower bound" />
    <revision>
      <id>27699</id>
      <parentid>27698</parentid>
      <timestamp>2012-05-01T17:24:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/set/lower_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/max size</title>
    <ns>0</ns>
    <id>7361</id>
    <redirect title="cpp/container/set/max size" />
    <revision>
      <id>27701</id>
      <parentid>27700</parentid>
      <timestamp>2012-05-01T17:24:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/set/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/rbegin</title>
    <ns>0</ns>
    <id>7362</id>
    <redirect title="cpp/container/set/rbegin" />
    <revision>
      <id>27703</id>
      <parentid>27702</parentid>
      <timestamp>2012-05-01T17:24:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/set/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/rend</title>
    <ns>0</ns>
    <id>7363</id>
    <redirect title="cpp/container/set/rend" />
    <revision>
      <id>27705</id>
      <parentid>27704</parentid>
      <timestamp>2012-05-01T17:24:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/set constructors</title>
    <ns>0</ns>
    <id>7364</id>
    <redirect title="cpp/container/set/set" />
    <revision>
      <id>27707</id>
      <parentid>27706</parentid>
      <timestamp>2012-05-01T17:24:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="35">#redirect [[cpp/container/set/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/set operators</title>
    <ns>0</ns>
    <id>7365</id>
    <redirect title="cpp/container/set/operator cmp" />
    <revision>
      <id>36248</id>
      <parentid>27709</parentid>
      <timestamp>2012-06-17T12:53:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/set/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/size</title>
    <ns>0</ns>
    <id>7366</id>
    <redirect title="cpp/container/set/size" />
    <revision>
      <id>27711</id>
      <parentid>27710</parentid>
      <timestamp>2012-05-01T17:24:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/start</title>
    <ns>0</ns>
    <id>7367</id>
    <redirect title="cpp/container/set" />
    <revision>
      <id>27713</id>
      <parentid>27712</parentid>
      <timestamp>2012-05-01T17:24:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/container/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/swap</title>
    <ns>0</ns>
    <id>7369</id>
    <redirect title="cpp/container/set/swap" />
    <revision>
      <id>27717</id>
      <parentid>27716</parentid>
      <timestamp>2012-05-01T17:24:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/container/set/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/upper bound</title>
    <ns>0</ns>
    <id>7370</id>
    <redirect title="cpp/container/set/upper bound" />
    <revision>
      <id>27719</id>
      <parentid>27718</parentid>
      <timestamp>2012-05-01T17:24:12Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/set/upper_bound]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/set/value comp</title>
    <ns>0</ns>
    <id>7371</id>
    <redirect title="cpp/container/set/value comp" />
    <revision>
      <id>27721</id>
      <parentid>27720</parentid>
      <timestamp>2012-05-01T17:24:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/set/value_comp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/</title>
    <ns>0</ns>
    <id>7378</id>
    <redirect title="cpp/container/stack" />
    <revision>
      <id>27735</id>
      <parentid>27734</parentid>
      <timestamp>2012-05-01T17:24:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/empty</title>
    <ns>0</ns>
    <id>7372</id>
    <redirect title="cpp/container/stack/empty" />
    <revision>
      <id>27723</id>
      <parentid>27722</parentid>
      <timestamp>2012-05-01T17:24:13Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/stack/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/pop</title>
    <ns>0</ns>
    <id>7373</id>
    <redirect title="cpp/container/stack/pop" />
    <revision>
      <id>27725</id>
      <parentid>27724</parentid>
      <timestamp>2012-05-01T17:24:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/stack/pop]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/push</title>
    <ns>0</ns>
    <id>7374</id>
    <redirect title="cpp/container/stack/push" />
    <revision>
      <id>27727</id>
      <parentid>27726</parentid>
      <timestamp>2012-05-01T17:24:14Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/stack/push]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/size</title>
    <ns>0</ns>
    <id>7375</id>
    <redirect title="cpp/container/stack/size" />
    <revision>
      <id>27729</id>
      <parentid>27728</parentid>
      <timestamp>2012-05-01T17:24:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/stack/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/stack constructors</title>
    <ns>0</ns>
    <id>7376</id>
    <redirect title="cpp/container/stack/stack" />
    <revision>
      <id>27731</id>
      <parentid>27730</parentid>
      <timestamp>2012-05-01T17:24:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/stack/stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/start</title>
    <ns>0</ns>
    <id>7377</id>
    <redirect title="cpp/container/stack" />
    <revision>
      <id>27733</id>
      <parentid>27732</parentid>
      <timestamp>2012-05-01T17:24:15Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/container/stack]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/stack/top</title>
    <ns>0</ns>
    <id>7379</id>
    <redirect title="cpp/container/stack/top" />
    <revision>
      <id>27737</id>
      <parentid>27736</parentid>
      <timestamp>2012-05-01T17:24:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/stack/top]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/start</title>
    <ns>0</ns>
    <id>7406</id>
    <redirect title="cpp/container" />
    <revision>
      <id>27791</id>
      <parentid>27790</parentid>
      <timestamp>2012-05-01T17:24:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="27">#redirect [[cpp/container]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/utility/</title>
    <ns>0</ns>
    <id>7411</id>
    <redirect title="cpp/utility" />
    <revision>
      <id>27801</id>
      <parentid>27800</parentid>
      <timestamp>2012-05-01T17:24:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="25">#redirect [[cpp/utility]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/utility/make pair</title>
    <ns>0</ns>
    <id>7408</id>
    <redirect title="cpp/utility/pair/make pair" />
    <revision>
      <id>46102</id>
      <parentid>27795</parentid>
      <timestamp>2013-02-15T21:50:25Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/pair/make pair]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/utility/pair/make pair]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/utility/pair</title>
    <ns>0</ns>
    <id>7409</id>
    <redirect title="cpp/utility/pair" />
    <revision>
      <id>29742</id>
      <parentid>27797</parentid>
      <timestamp>2012-05-01T18:08:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/pair]]</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/utility/pair]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/utility/start</title>
    <ns>0</ns>
    <id>7410</id>
    <redirect title="cpp/utility" />
    <revision>
      <id>27799</id>
      <parentid>27798</parentid>
      <timestamp>2012-05-01T17:24:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="25">#redirect [[cpp/utility]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/</title>
    <ns>0</ns>
    <id>7400</id>
    <redirect title="cpp/container/vector" />
    <revision>
      <id>27779</id>
      <parentid>27778</parentid>
      <timestamp>2012-05-01T17:24:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/container/vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/assign</title>
    <ns>0</ns>
    <id>7380</id>
    <redirect title="cpp/container/vector/assign" />
    <revision>
      <id>27739</id>
      <parentid>27738</parentid>
      <timestamp>2012-05-01T17:24:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/at</title>
    <ns>0</ns>
    <id>7381</id>
    <redirect title="cpp/container/vector/at" />
    <revision>
      <id>27741</id>
      <parentid>27740</parentid>
      <timestamp>2012-05-01T17:24:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/container/vector/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/back</title>
    <ns>0</ns>
    <id>7382</id>
    <redirect title="cpp/container/vector/back" />
    <revision>
      <id>27743</id>
      <parentid>27742</parentid>
      <timestamp>2012-05-01T17:24:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/begin</title>
    <ns>0</ns>
    <id>7383</id>
    <redirect title="cpp/container/vector/begin" />
    <revision>
      <id>27745</id>
      <parentid>27744</parentid>
      <timestamp>2012-05-01T17:24:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/capacity</title>
    <ns>0</ns>
    <id>7384</id>
    <redirect title="cpp/container/vector/capacity" />
    <revision>
      <id>27747</id>
      <parentid>27746</parentid>
      <timestamp>2012-05-01T17:24:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/vector/capacity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/clear</title>
    <ns>0</ns>
    <id>7385</id>
    <redirect title="cpp/container/vector/clear" />
    <revision>
      <id>27749</id>
      <parentid>27748</parentid>
      <timestamp>2012-05-01T17:24:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/empty</title>
    <ns>0</ns>
    <id>7386</id>
    <redirect title="cpp/container/vector/empty" />
    <revision>
      <id>27751</id>
      <parentid>27750</parentid>
      <timestamp>2012-05-01T17:24:17Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/end</title>
    <ns>0</ns>
    <id>7387</id>
    <redirect title="cpp/container/vector/end" />
    <revision>
      <id>27753</id>
      <parentid>27752</parentid>
      <timestamp>2012-05-01T17:24:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/container/vector/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/erase</title>
    <ns>0</ns>
    <id>7388</id>
    <redirect title="cpp/container/vector/erase" />
    <revision>
      <id>27755</id>
      <parentid>27754</parentid>
      <timestamp>2012-05-01T17:24:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/front</title>
    <ns>0</ns>
    <id>7389</id>
    <redirect title="cpp/container/vector/front" />
    <revision>
      <id>27757</id>
      <parentid>27756</parentid>
      <timestamp>2012-05-01T17:24:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/container/vector/front]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/insert</title>
    <ns>0</ns>
    <id>7390</id>
    <redirect title="cpp/container/vector/insert" />
    <revision>
      <id>27759</id>
      <parentid>27758</parentid>
      <timestamp>2012-05-01T17:24:18Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/max size</title>
    <ns>0</ns>
    <id>7391</id>
    <redirect title="cpp/container/vector/max size" />
    <revision>
      <id>27761</id>
      <parentid>27760</parentid>
      <timestamp>2012-05-01T17:24:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/vector/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/pop back</title>
    <ns>0</ns>
    <id>7392</id>
    <redirect title="cpp/container/vector/pop back" />
    <revision>
      <id>27763</id>
      <parentid>27762</parentid>
      <timestamp>2012-05-01T17:24:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/container/vector/pop_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/push back</title>
    <ns>0</ns>
    <id>7393</id>
    <redirect title="cpp/container/vector/push back" />
    <revision>
      <id>27765</id>
      <parentid>27764</parentid>
      <timestamp>2012-05-01T17:24:19Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/container/vector/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/rbegin</title>
    <ns>0</ns>
    <id>7394</id>
    <redirect title="cpp/container/vector/rbegin" />
    <revision>
      <id>27767</id>
      <parentid>27766</parentid>
      <timestamp>2012-05-01T17:24:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/rend</title>
    <ns>0</ns>
    <id>7395</id>
    <redirect title="cpp/container/vector/rend" />
    <revision>
      <id>27769</id>
      <parentid>27768</parentid>
      <timestamp>2012-05-01T17:24:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/reserve</title>
    <ns>0</ns>
    <id>7396</id>
    <redirect title="cpp/container/vector/reserve" />
    <revision>
      <id>27771</id>
      <parentid>27770</parentid>
      <timestamp>2012-05-01T17:24:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/container/vector/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/resize</title>
    <ns>0</ns>
    <id>7397</id>
    <redirect title="cpp/container/vector/resize" />
    <revision>
      <id>27773</id>
      <parentid>27772</parentid>
      <timestamp>2012-05-01T17:24:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/size</title>
    <ns>0</ns>
    <id>7398</id>
    <redirect title="cpp/container/vector/size" />
    <revision>
      <id>27775</id>
      <parentid>27774</parentid>
      <timestamp>2012-05-01T17:24:20Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/start</title>
    <ns>0</ns>
    <id>7399</id>
    <redirect title="cpp/container/vector" />
    <revision>
      <id>27777</id>
      <parentid>27776</parentid>
      <timestamp>2012-05-01T17:24:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/container/vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/swap</title>
    <ns>0</ns>
    <id>7401</id>
    <redirect title="cpp/container/vector/swap" />
    <revision>
      <id>27781</id>
      <parentid>27780</parentid>
      <timestamp>2012-05-01T17:24:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/container/vector/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/vector constructors</title>
    <ns>0</ns>
    <id>7402</id>
    <redirect title="cpp/container/vector/vector" />
    <revision>
      <id>27783</id>
      <parentid>27782</parentid>
      <timestamp>2012-05-01T17:24:21Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/container/vector/vector]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/stl/vector/vector operators</title>
    <ns>0</ns>
    <id>7403</id>
    <redirect title="cpp/container/vector/operator cmp" />
    <revision>
      <id>36249</id>
      <parentid>27785</parentid>
      <timestamp>2012-06-17T12:54:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/container/vector/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/</title>
    <ns>0</ns>
    <id>7529</id>
    <redirect title="cpp/string" />
    <revision>
      <id>28037</id>
      <parentid>28036</parentid>
      <timestamp>2012-05-01T17:27:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/append</title>
    <ns>0</ns>
    <id>7496</id>
    <redirect title="cpp/string/basic string/append" />
    <revision>
      <id>27971</id>
      <parentid>27970</parentid>
      <timestamp>2012-05-01T17:27:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/append]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/assign</title>
    <ns>0</ns>
    <id>7497</id>
    <redirect title="cpp/string/basic string/assign" />
    <revision>
      <id>27973</id>
      <parentid>27972</parentid>
      <timestamp>2012-05-01T17:27:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/at</title>
    <ns>0</ns>
    <id>7498</id>
    <redirect title="cpp/string/basic string/at" />
    <revision>
      <id>27975</id>
      <parentid>27974</parentid>
      <timestamp>2012-05-01T17:27:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/string/basic_string/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/</title>
    <ns>0</ns>
    <id>7448</id>
    <redirect title="cpp/string/basic string" />
    <revision>
      <id>27875</id>
      <parentid>27874</parentid>
      <timestamp>2012-05-01T17:24:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/basic_string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/append</title>
    <ns>0</ns>
    <id>7412</id>
    <redirect title="cpp/string/basic string/append" />
    <revision>
      <id>27803</id>
      <parentid>27802</parentid>
      <timestamp>2012-05-01T17:24:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/append]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/assign</title>
    <ns>0</ns>
    <id>7413</id>
    <redirect title="cpp/string/basic string/assign" />
    <revision>
      <id>27805</id>
      <parentid>27804</parentid>
      <timestamp>2012-05-01T17:24:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/assign]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/at</title>
    <ns>0</ns>
    <id>7414</id>
    <redirect title="cpp/string/basic string/at" />
    <revision>
      <id>27807</id>
      <parentid>27806</parentid>
      <timestamp>2012-05-01T17:24:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/string/basic_string/at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/basic string</title>
    <ns>0</ns>
    <id>7415</id>
    <redirect title="cpp/string/basic string/basic string" />
    <revision>
      <id>27809</id>
      <parentid>27808</parentid>
      <timestamp>2012-05-01T17:24:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/string/basic_string/basic_string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/begin</title>
    <ns>0</ns>
    <id>7416</id>
    <redirect title="cpp/string/basic string/begin" />
    <revision>
      <id>27811</id>
      <parentid>27810</parentid>
      <timestamp>2012-05-01T17:24:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/c str</title>
    <ns>0</ns>
    <id>7417</id>
    <redirect title="cpp/string/basic string/c str" />
    <revision>
      <id>27813</id>
      <parentid>27812</parentid>
      <timestamp>2012-05-01T17:24:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/c_str]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/capacity</title>
    <ns>0</ns>
    <id>7418</id>
    <redirect title="cpp/string/basic string/capacity" />
    <revision>
      <id>27815</id>
      <parentid>27814</parentid>
      <timestamp>2012-05-01T17:24:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/string/basic_string/capacity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/clear</title>
    <ns>0</ns>
    <id>7419</id>
    <redirect title="cpp/string/basic string/clear" />
    <revision>
      <id>27817</id>
      <parentid>27816</parentid>
      <timestamp>2012-05-01T17:24:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/compare</title>
    <ns>0</ns>
    <id>7420</id>
    <redirect title="cpp/string/basic string/compare" />
    <revision>
      <id>27819</id>
      <parentid>27818</parentid>
      <timestamp>2012-05-01T17:24:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/string/basic_string/compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/constructor</title>
    <ns>0</ns>
    <id>7421</id>
    <redirect title="cpp/string/basic string/basic string" />
    <revision>
      <id>27821</id>
      <parentid>27820</parentid>
      <timestamp>2012-05-01T17:24:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/string/basic_string/basic_string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/copy</title>
    <ns>0</ns>
    <id>7422</id>
    <redirect title="cpp/string/basic string/copy" />
    <revision>
      <id>27823</id>
      <parentid>27822</parentid>
      <timestamp>2012-05-01T17:24:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/data</title>
    <ns>0</ns>
    <id>7423</id>
    <redirect title="cpp/string/basic string/data" />
    <revision>
      <id>27825</id>
      <parentid>27824</parentid>
      <timestamp>2012-05-01T17:24:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/data]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/empty</title>
    <ns>0</ns>
    <id>7424</id>
    <redirect title="cpp/string/basic string/empty" />
    <revision>
      <id>27827</id>
      <parentid>27826</parentid>
      <timestamp>2012-05-01T17:24:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/end</title>
    <ns>0</ns>
    <id>7425</id>
    <redirect title="cpp/string/basic string/end" />
    <revision>
      <id>27829</id>
      <parentid>27828</parentid>
      <timestamp>2012-05-01T17:24:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/string/basic_string/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/erase</title>
    <ns>0</ns>
    <id>7426</id>
    <redirect title="cpp/string/basic string/erase" />
    <revision>
      <id>27831</id>
      <parentid>27830</parentid>
      <timestamp>2012-05-01T17:24:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/find</title>
    <ns>0</ns>
    <id>7427</id>
    <redirect title="cpp/string/basic string/find" />
    <revision>
      <id>27833</id>
      <parentid>27832</parentid>
      <timestamp>2012-05-01T17:24:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/find first not of</title>
    <ns>0</ns>
    <id>7428</id>
    <redirect title="cpp/string/basic string/find first not of" />
    <revision>
      <id>27835</id>
      <parentid>27834</parentid>
      <timestamp>2012-05-01T17:24:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/string/basic_string/find_first_not_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/find first of</title>
    <ns>0</ns>
    <id>7429</id>
    <redirect title="cpp/string/basic string/find first of" />
    <revision>
      <id>27837</id>
      <parentid>27836</parentid>
      <timestamp>2012-05-01T17:24:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/string/basic_string/find_first_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/find last not of</title>
    <ns>0</ns>
    <id>7430</id>
    <redirect title="cpp/string/basic string/find last not of" />
    <revision>
      <id>27839</id>
      <parentid>27838</parentid>
      <timestamp>2012-05-01T17:24:37Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="54">#redirect [[cpp/string/basic_string/find_last_not_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/find last of</title>
    <ns>0</ns>
    <id>7431</id>
    <redirect title="cpp/string/basic string/find last of" />
    <revision>
      <id>27841</id>
      <parentid>27840</parentid>
      <timestamp>2012-05-01T17:24:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/string/basic_string/find_last_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/insert</title>
    <ns>0</ns>
    <id>7432</id>
    <redirect title="cpp/string/basic string/insert" />
    <revision>
      <id>27843</id>
      <parentid>27842</parentid>
      <timestamp>2012-05-01T17:24:38Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/length</title>
    <ns>0</ns>
    <id>7433</id>
    <redirect title="cpp/string/basic string/size" />
    <revision>
      <id>46088</id>
      <parentid>27845</parentid>
      <timestamp>2013-02-15T21:49:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/basic string/size]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/string/basic string/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/max size</title>
    <ns>0</ns>
    <id>7434</id>
    <redirect title="cpp/string/basic string/max size" />
    <revision>
      <id>27847</id>
      <parentid>27846</parentid>
      <timestamp>2012-05-01T17:24:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/string/basic_string/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/npos</title>
    <ns>0</ns>
    <id>7435</id>
    <redirect title="cpp/string/basic string/npos" />
    <revision>
      <id>27849</id>
      <parentid>27848</parentid>
      <timestamp>2012-05-01T17:24:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/npos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/operator at</title>
    <ns>0</ns>
    <id>7436</id>
    <redirect title="cpp/string/basic string/operator at" />
    <revision>
      <id>27851</id>
      <parentid>27850</parentid>
      <timestamp>2012-05-01T17:24:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="49">#redirect [[cpp/string/basic_string/operator_at]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/operators</title>
    <ns>0</ns>
    <id>7437</id>
    <redirect title="cpp/string/basic string/operator cmp" />
    <revision>
      <id>29752</id>
      <parentid>27853</parentid>
      <timestamp>2012-05-01T18:09:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/basic string/operator cmp]]</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/string/basic_string/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/pop back</title>
    <ns>0</ns>
    <id>7438</id>
    <redirect title="cpp/string/basic string/pop back" />
    <revision>
      <id>27855</id>
      <parentid>27854</parentid>
      <timestamp>2012-05-01T17:24:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/string/basic_string/pop_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/push back</title>
    <ns>0</ns>
    <id>7439</id>
    <redirect title="cpp/string/basic string/push back" />
    <revision>
      <id>27857</id>
      <parentid>27856</parentid>
      <timestamp>2012-05-01T17:24:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/string/basic_string/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/rbegin</title>
    <ns>0</ns>
    <id>7440</id>
    <redirect title="cpp/string/basic string/rbegin" />
    <revision>
      <id>27859</id>
      <parentid>27858</parentid>
      <timestamp>2012-05-01T17:24:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/rend</title>
    <ns>0</ns>
    <id>7441</id>
    <redirect title="cpp/string/basic string/rend" />
    <revision>
      <id>27861</id>
      <parentid>27860</parentid>
      <timestamp>2012-05-01T17:24:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/replace</title>
    <ns>0</ns>
    <id>7442</id>
    <redirect title="cpp/string/basic string/replace" />
    <revision>
      <id>27863</id>
      <parentid>27862</parentid>
      <timestamp>2012-05-01T17:24:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/string/basic_string/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/reserve</title>
    <ns>0</ns>
    <id>7443</id>
    <redirect title="cpp/string/basic string/reserve" />
    <revision>
      <id>27865</id>
      <parentid>27864</parentid>
      <timestamp>2012-05-01T17:24:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/string/basic_string/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/resize</title>
    <ns>0</ns>
    <id>7444</id>
    <redirect title="cpp/string/basic string/resize" />
    <revision>
      <id>27867</id>
      <parentid>27866</parentid>
      <timestamp>2012-05-01T17:24:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/rfind</title>
    <ns>0</ns>
    <id>7445</id>
    <redirect title="cpp/string/basic string/rfind" />
    <revision>
      <id>27869</id>
      <parentid>27868</parentid>
      <timestamp>2012-05-01T17:24:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/rfind]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/size</title>
    <ns>0</ns>
    <id>7446</id>
    <redirect title="cpp/string/basic string/size" />
    <revision>
      <id>27871</id>
      <parentid>27870</parentid>
      <timestamp>2012-05-01T17:24:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/start</title>
    <ns>0</ns>
    <id>7447</id>
    <redirect title="cpp/string/basic string" />
    <revision>
      <id>27873</id>
      <parentid>27872</parentid>
      <timestamp>2012-05-01T17:24:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/basic_string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/substr</title>
    <ns>0</ns>
    <id>7449</id>
    <redirect title="cpp/string/basic string/substr" />
    <revision>
      <id>27877</id>
      <parentid>27876</parentid>
      <timestamp>2012-05-01T17:24:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/substr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/basic string/swap</title>
    <ns>0</ns>
    <id>7450</id>
    <redirect title="cpp/string/basic string/swap" />
    <revision>
      <id>27879</id>
      <parentid>27878</parentid>
      <timestamp>2012-05-01T17:24:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/begin</title>
    <ns>0</ns>
    <id>7499</id>
    <redirect title="cpp/string/basic string/begin" />
    <revision>
      <id>27977</id>
      <parentid>27976</parentid>
      <timestamp>2012-05-01T17:27:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/begin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c str</title>
    <ns>0</ns>
    <id>7500</id>
    <redirect title="cpp/string/basic string/c str" />
    <revision>
      <id>27979</id>
      <parentid>27978</parentid>
      <timestamp>2012-05-01T17:27:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/c_str]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/</title>
    <ns>0</ns>
    <id>7471</id>
    <redirect title="cpp/string/byte" />
    <revision>
      <id>46092</id>
      <parentid>27921</parentid>
      <timestamp>2013-02-15T21:49:53Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/byte]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/string/byte]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/atof</title>
    <ns>0</ns>
    <id>7451</id>
    <redirect title="cpp/string/byte/atof" />
    <revision>
      <id>36289</id>
      <parentid>27881</parentid>
      <timestamp>2012-06-17T13:10:55Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/string/byte/atof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/atoi</title>
    <ns>0</ns>
    <id>7452</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>36290</id>
      <parentid>27883</parentid>
      <timestamp>2012-06-17T13:11:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/atol</title>
    <ns>0</ns>
    <id>7453</id>
    <redirect title="cpp/string/byte/atoi" />
    <revision>
      <id>36291</id>
      <parentid>27885</parentid>
      <timestamp>2012-06-17T13:11:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/string/byte/atoi]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isalnum</title>
    <ns>0</ns>
    <id>7454</id>
    <redirect title="cpp/string/byte/isalnum" />
    <revision>
      <id>36293</id>
      <parentid>27887</parentid>
      <timestamp>2012-06-17T13:12:10Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isalnum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isalpha</title>
    <ns>0</ns>
    <id>7455</id>
    <redirect title="cpp/string/byte/isalpha" />
    <revision>
      <id>36294</id>
      <parentid>27889</parentid>
      <timestamp>2012-06-17T13:12:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isalpha]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/iscntrl</title>
    <ns>0</ns>
    <id>7456</id>
    <redirect title="cpp/string/byte/iscntrl" />
    <revision>
      <id>36295</id>
      <parentid>27891</parentid>
      <timestamp>2012-06-17T13:13:33Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/iscntrl]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isdigit</title>
    <ns>0</ns>
    <id>7457</id>
    <redirect title="cpp/string/byte/isdigit" />
    <revision>
      <id>36296</id>
      <parentid>27893</parentid>
      <timestamp>2012-06-17T13:13:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isgraph</title>
    <ns>0</ns>
    <id>7458</id>
    <redirect title="cpp/string/byte/isgraph" />
    <revision>
      <id>36297</id>
      <parentid>27895</parentid>
      <timestamp>2012-06-17T13:13:57Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isgraph]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/islower</title>
    <ns>0</ns>
    <id>7459</id>
    <redirect title="cpp/string/byte/islower" />
    <revision>
      <id>36298</id>
      <parentid>27897</parentid>
      <timestamp>2012-06-17T13:14:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/islower]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isprint</title>
    <ns>0</ns>
    <id>7460</id>
    <redirect title="cpp/string/byte/isprint" />
    <revision>
      <id>36299</id>
      <parentid>27899</parentid>
      <timestamp>2012-06-17T13:14:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isprint]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/ispunct</title>
    <ns>0</ns>
    <id>7461</id>
    <redirect title="cpp/string/byte/ispunct" />
    <revision>
      <id>36300</id>
      <parentid>27901</parentid>
      <timestamp>2012-06-17T13:15:35Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/ispunct]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isspace</title>
    <ns>0</ns>
    <id>7462</id>
    <redirect title="cpp/string/byte/isspace" />
    <revision>
      <id>36301</id>
      <parentid>27903</parentid>
      <timestamp>2012-06-17T13:16:22Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isspace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isupper</title>
    <ns>0</ns>
    <id>7463</id>
    <redirect title="cpp/string/byte/isupper" />
    <revision>
      <id>36302</id>
      <parentid>27905</parentid>
      <timestamp>2012-06-17T13:16:31Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/isupper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/isxdigit</title>
    <ns>0</ns>
    <id>7464</id>
    <redirect title="cpp/string/byte/isxdigit" />
    <revision>
      <id>36303</id>
      <parentid>27907</parentid>
      <timestamp>2012-06-17T13:16:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/string/byte/isxdigit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/memchr</title>
    <ns>0</ns>
    <id>7465</id>
    <redirect title="cpp/string/byte/memchr" />
    <revision>
      <id>36304</id>
      <parentid>27909</parentid>
      <timestamp>2012-06-17T13:16:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/memcmp</title>
    <ns>0</ns>
    <id>7466</id>
    <redirect title="cpp/string/byte/memcmp" />
    <revision>
      <id>36305</id>
      <parentid>27911</parentid>
      <timestamp>2012-06-17T13:18:41Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memcmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/memcpy</title>
    <ns>0</ns>
    <id>7467</id>
    <redirect title="cpp/string/byte/memcpy" />
    <revision>
      <id>36307</id>
      <parentid>27913</parentid>
      <timestamp>2012-06-17T13:19:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memcpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/memmove</title>
    <ns>0</ns>
    <id>7468</id>
    <redirect title="cpp/string/byte/memmove" />
    <revision>
      <id>36308</id>
      <parentid>27915</parentid>
      <timestamp>2012-06-17T13:19:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/memmove]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/memset</title>
    <ns>0</ns>
    <id>7469</id>
    <redirect title="cpp/string/byte/memset" />
    <revision>
      <id>36309</id>
      <parentid>27917</parentid>
      <timestamp>2012-06-17T13:19:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/memset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/start</title>
    <ns>0</ns>
    <id>7470</id>
    <redirect title="cpp/string/byte" />
    <revision>
      <id>46091</id>
      <parentid>27919</parentid>
      <timestamp>2013-02-15T21:49:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/byte]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[cpp/string/byte]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strcat</title>
    <ns>0</ns>
    <id>7472</id>
    <redirect title="cpp/string/byte/strcat" />
    <revision>
      <id>36310</id>
      <parentid>27923</parentid>
      <timestamp>2012-06-17T13:20:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strcat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strchr</title>
    <ns>0</ns>
    <id>7473</id>
    <redirect title="cpp/string/byte/strchr" />
    <revision>
      <id>36311</id>
      <parentid>27925</parentid>
      <timestamp>2012-06-17T13:20:17Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strcmp</title>
    <ns>0</ns>
    <id>7474</id>
    <redirect title="cpp/string/byte/strcmp" />
    <revision>
      <id>36312</id>
      <parentid>27927</parentid>
      <timestamp>2012-06-17T13:20:32Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strcmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strcoll</title>
    <ns>0</ns>
    <id>7475</id>
    <redirect title="cpp/string/byte/strcoll" />
    <revision>
      <id>29782</id>
      <parentid>27929</parentid>
      <timestamp>2012-05-01T18:19:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/byte/strcoll]]</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strcoll]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strcpy</title>
    <ns>0</ns>
    <id>7476</id>
    <redirect title="cpp/string/byte/strcpy" />
    <revision>
      <id>36313</id>
      <parentid>27931</parentid>
      <timestamp>2012-06-17T13:22:06Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strcpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strcspn</title>
    <ns>0</ns>
    <id>7477</id>
    <redirect title="cpp/string/byte/strcspn" />
    <revision>
      <id>36314</id>
      <parentid>27933</parentid>
      <timestamp>2012-06-17T13:22:52Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strcspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strerror</title>
    <ns>0</ns>
    <id>7478</id>
    <redirect title="cpp/string/byte/strerror" />
    <revision>
      <id>29749</id>
      <parentid>27935</parentid>
      <timestamp>2012-05-01T18:09:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/byte/strerror]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/string/byte/strerror]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strlen</title>
    <ns>0</ns>
    <id>7479</id>
    <redirect title="cpp/string/byte/strlen" />
    <revision>
      <id>36315</id>
      <parentid>27937</parentid>
      <timestamp>2012-06-17T13:24:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strlen]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strncat</title>
    <ns>0</ns>
    <id>7480</id>
    <redirect title="cpp/string/byte/strncat" />
    <revision>
      <id>36316</id>
      <parentid>27939</parentid>
      <timestamp>2012-06-17T13:25:59Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strncat]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strncmp</title>
    <ns>0</ns>
    <id>7481</id>
    <redirect title="cpp/string/byte/strncmp" />
    <revision>
      <id>36317</id>
      <parentid>27941</parentid>
      <timestamp>2012-06-17T13:26:56Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strncmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strncpy</title>
    <ns>0</ns>
    <id>7482</id>
    <redirect title="cpp/string/byte/strncpy" />
    <revision>
      <id>36318</id>
      <parentid>27943</parentid>
      <timestamp>2012-06-17T13:27:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strncpy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strpbrk</title>
    <ns>0</ns>
    <id>7483</id>
    <redirect title="cpp/string/byte/strpbrk" />
    <revision>
      <id>36319</id>
      <parentid>27945</parentid>
      <timestamp>2012-06-17T13:27:44Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strpbrk]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strrchr</title>
    <ns>0</ns>
    <id>7484</id>
    <redirect title="cpp/string/byte/strrchr" />
    <revision>
      <id>36320</id>
      <parentid>27947</parentid>
      <timestamp>2012-06-17T13:31:11Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strrchr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strspn</title>
    <ns>0</ns>
    <id>7485</id>
    <redirect title="cpp/string/byte/strspn" />
    <revision>
      <id>36321</id>
      <parentid>27949</parentid>
      <timestamp>2012-06-17T13:31:39Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strspn]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strstr</title>
    <ns>0</ns>
    <id>7486</id>
    <redirect title="cpp/string/byte/strstr" />
    <revision>
      <id>36322</id>
      <parentid>27951</parentid>
      <timestamp>2012-06-17T13:33:02Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strstr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strtof</title>
    <ns>0</ns>
    <id>7487</id>
    <redirect title="cpp/string/byte/strtof" />
    <revision>
      <id>36323</id>
      <parentid>27953</parentid>
      <timestamp>2012-06-17T13:35:01Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strtof]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strtok</title>
    <ns>0</ns>
    <id>7488</id>
    <redirect title="cpp/string/byte/strtok" />
    <revision>
      <id>29747</id>
      <parentid>27955</parentid>
      <timestamp>2012-05-01T18:08:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/byte/strtok]]</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strtok]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strtol</title>
    <ns>0</ns>
    <id>7489</id>
    <redirect title="cpp/string/byte/strtol" />
    <revision>
      <id>36292</id>
      <parentid>27957</parentid>
      <timestamp>2012-06-17T13:11:46Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/byte/strtol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strtoul</title>
    <ns>0</ns>
    <id>7490</id>
    <redirect title="cpp/string/byte/strtoul" />
    <revision>
      <id>36324</id>
      <parentid>27959</parentid>
      <timestamp>2012-06-17T13:35:28Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strtoul]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/strxfrm</title>
    <ns>0</ns>
    <id>7491</id>
    <redirect title="cpp/string/byte/strxfrm" />
    <revision>
      <id>36325</id>
      <parentid>27961</parentid>
      <timestamp>2012-06-17T13:36:36Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/strxfrm]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/tolower</title>
    <ns>0</ns>
    <id>7492</id>
    <redirect title="cpp/string/byte/tolower" />
    <revision>
      <id>36326</id>
      <parentid>27963</parentid>
      <timestamp>2012-06-17T13:36:49Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/tolower]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/c/toupper</title>
    <ns>0</ns>
    <id>7493</id>
    <redirect title="cpp/string/byte/toupper" />
    <revision>
      <id>36327</id>
      <parentid>27965</parentid>
      <timestamp>2012-06-17T13:37:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/string/narrow/&quot; to &quot;/string/byte/&quot;</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/string/byte/toupper]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/capacity</title>
    <ns>0</ns>
    <id>7501</id>
    <redirect title="cpp/string/basic string/capacity" />
    <revision>
      <id>27981</id>
      <parentid>27980</parentid>
      <timestamp>2012-05-01T17:27:24Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/string/basic_string/capacity]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/char traits</title>
    <ns>0</ns>
    <id>7502</id>
    <redirect title="cpp/string/char traits" />
    <revision>
      <id>27983</id>
      <parentid>27982</parentid>
      <timestamp>2012-05-01T17:27:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/string/char_traits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/clear</title>
    <ns>0</ns>
    <id>7503</id>
    <redirect title="cpp/string/basic string/clear" />
    <revision>
      <id>27985</id>
      <parentid>27984</parentid>
      <timestamp>2012-05-01T17:27:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/clear]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/compare</title>
    <ns>0</ns>
    <id>7504</id>
    <redirect title="cpp/string/basic string/compare" />
    <revision>
      <id>27987</id>
      <parentid>27986</parentid>
      <timestamp>2012-05-01T17:27:25Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/string/basic_string/compare]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/copy</title>
    <ns>0</ns>
    <id>7505</id>
    <redirect title="cpp/string/basic string/copy" />
    <revision>
      <id>27989</id>
      <parentid>27988</parentid>
      <timestamp>2012-05-01T17:27:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/copy]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/cw/</title>
    <ns>0</ns>
    <id>7495</id>
    <redirect title="cpp/string/wide" />
    <revision>
      <id>27969</id>
      <parentid>27968</parentid>
      <timestamp>2012-05-01T17:27:23Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/string/wide]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/cw/start</title>
    <ns>0</ns>
    <id>7494</id>
    <redirect title="cpp/string/wide" />
    <revision>
      <id>27967</id>
      <parentid>27966</parentid>
      <timestamp>2012-05-01T17:27:22Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="29">#redirect [[cpp/string/wide]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/data</title>
    <ns>0</ns>
    <id>7506</id>
    <redirect title="cpp/string/basic string/data" />
    <revision>
      <id>27991</id>
      <parentid>27990</parentid>
      <timestamp>2012-05-01T17:27:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/data]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/empty</title>
    <ns>0</ns>
    <id>7507</id>
    <redirect title="cpp/string/basic string/empty" />
    <revision>
      <id>27993</id>
      <parentid>27992</parentid>
      <timestamp>2012-05-01T17:27:26Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/empty]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/end</title>
    <ns>0</ns>
    <id>7508</id>
    <redirect title="cpp/string/basic string/end" />
    <revision>
      <id>27995</id>
      <parentid>27994</parentid>
      <timestamp>2012-05-01T17:27:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/string/basic_string/end]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/erase</title>
    <ns>0</ns>
    <id>7509</id>
    <redirect title="cpp/string/basic string/erase" />
    <revision>
      <id>27997</id>
      <parentid>27996</parentid>
      <timestamp>2012-05-01T17:27:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/erase]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/find</title>
    <ns>0</ns>
    <id>7510</id>
    <redirect title="cpp/string/basic string/find" />
    <revision>
      <id>27999</id>
      <parentid>27998</parentid>
      <timestamp>2012-05-01T17:27:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/find]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/find first not of</title>
    <ns>0</ns>
    <id>7511</id>
    <redirect title="cpp/string/basic string/find first not of" />
    <revision>
      <id>28001</id>
      <parentid>28000</parentid>
      <timestamp>2012-05-01T17:27:27Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="55">#redirect [[cpp/string/basic_string/find_first_not_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/find first of</title>
    <ns>0</ns>
    <id>7512</id>
    <redirect title="cpp/string/basic string/find first of" />
    <revision>
      <id>28003</id>
      <parentid>28002</parentid>
      <timestamp>2012-05-01T17:27:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="51">#redirect [[cpp/string/basic_string/find_first_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/find last not of</title>
    <ns>0</ns>
    <id>7513</id>
    <redirect title="cpp/string/basic string/find last not of" />
    <revision>
      <id>28005</id>
      <parentid>28004</parentid>
      <timestamp>2012-05-01T17:27:28Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="54">#redirect [[cpp/string/basic_string/find_last_not_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/find last of</title>
    <ns>0</ns>
    <id>7514</id>
    <redirect title="cpp/string/basic string/find last of" />
    <revision>
      <id>28007</id>
      <parentid>28006</parentid>
      <timestamp>2012-05-01T17:27:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/string/basic_string/find_last_of]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/getline</title>
    <ns>0</ns>
    <id>7515</id>
    <redirect title="cpp/string/basic string/getline" />
    <revision>
      <id>46090</id>
      <parentid>28009</parentid>
      <timestamp>2013-02-15T21:49:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/basic string/getline]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/string/basic string/getline]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/insert</title>
    <ns>0</ns>
    <id>7516</id>
    <redirect title="cpp/string/basic string/insert" />
    <revision>
      <id>28011</id>
      <parentid>28010</parentid>
      <timestamp>2012-05-01T17:27:29Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/insert]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/length</title>
    <ns>0</ns>
    <id>7517</id>
    <redirect title="cpp/string/basic string/size" />
    <revision>
      <id>46089</id>
      <parentid>28013</parentid>
      <timestamp>2013-02-15T21:49:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/basic string/size]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/string/basic string/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/max size</title>
    <ns>0</ns>
    <id>7518</id>
    <redirect title="cpp/string/basic string/max size" />
    <revision>
      <id>28015</id>
      <parentid>28014</parentid>
      <timestamp>2012-05-01T17:27:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/string/basic_string/max_size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/npos</title>
    <ns>0</ns>
    <id>7519</id>
    <redirect title="cpp/string/basic string/npos" />
    <revision>
      <id>28017</id>
      <parentid>28016</parentid>
      <timestamp>2012-05-01T17:27:30Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/npos]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/push back</title>
    <ns>0</ns>
    <id>7520</id>
    <redirect title="cpp/string/basic string/push back" />
    <revision>
      <id>28019</id>
      <parentid>28018</parentid>
      <timestamp>2012-05-01T17:27:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/string/basic_string/push_back]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/rbegin</title>
    <ns>0</ns>
    <id>7521</id>
    <redirect title="cpp/string/basic string/rbegin" />
    <revision>
      <id>28021</id>
      <parentid>28020</parentid>
      <timestamp>2012-05-01T17:27:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/rbegin]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/rend</title>
    <ns>0</ns>
    <id>7522</id>
    <redirect title="cpp/string/basic string/rend" />
    <revision>
      <id>28023</id>
      <parentid>28022</parentid>
      <timestamp>2012-05-01T17:27:31Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/rend]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/replace</title>
    <ns>0</ns>
    <id>7523</id>
    <redirect title="cpp/string/basic string/replace" />
    <revision>
      <id>28025</id>
      <parentid>28024</parentid>
      <timestamp>2012-05-01T17:27:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/string/basic_string/replace]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/reserve</title>
    <ns>0</ns>
    <id>7524</id>
    <redirect title="cpp/string/basic string/reserve" />
    <revision>
      <id>28027</id>
      <parentid>28026</parentid>
      <timestamp>2012-05-01T17:27:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/string/basic_string/reserve]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/resize</title>
    <ns>0</ns>
    <id>7525</id>
    <redirect title="cpp/string/basic string/resize" />
    <revision>
      <id>28029</id>
      <parentid>28028</parentid>
      <timestamp>2012-05-01T17:27:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/rfind</title>
    <ns>0</ns>
    <id>7526</id>
    <redirect title="cpp/string/basic string/rfind" />
    <revision>
      <id>28031</id>
      <parentid>28030</parentid>
      <timestamp>2012-05-01T17:27:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/string/basic_string/rfind]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/size</title>
    <ns>0</ns>
    <id>7527</id>
    <redirect title="cpp/string/basic string/size" />
    <revision>
      <id>28033</id>
      <parentid>28032</parentid>
      <timestamp>2012-05-01T17:27:32Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/start</title>
    <ns>0</ns>
    <id>7528</id>
    <redirect title="cpp/string" />
    <revision>
      <id>28035</id>
      <parentid>28034</parentid>
      <timestamp>2012-05-01T17:27:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/stoi</title>
    <ns>0</ns>
    <id>7530</id>
    <redirect title="cpp/string/basic string/stol" />
    <revision>
      <id>46095</id>
      <parentid>28039</parentid>
      <timestamp>2013-02-15T21:50:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/basic string/stol]]</comment>
      <text xml:space="preserve" bytes="42">#REDIRECT [[cpp/string/basic string/stol]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/string constructors</title>
    <ns>0</ns>
    <id>7531</id>
    <redirect title="cpp/string/basic string/basic string" />
    <revision>
      <id>28041</id>
      <parentid>28040</parentid>
      <timestamp>2012-05-01T17:27:33Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/string/basic_string/basic_string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/string operators</title>
    <ns>0</ns>
    <id>7532</id>
    <redirect title="cpp/string/basic string/operator cmp" />
    <revision>
      <id>29751</id>
      <parentid>28043</parentid>
      <timestamp>2012-05-01T18:09:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/string/basic string/operator cmp]]</comment>
      <text xml:space="preserve" bytes="50">#redirect [[cpp/string/basic_string/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/substr</title>
    <ns>0</ns>
    <id>7533</id>
    <redirect title="cpp/string/basic string/substr" />
    <revision>
      <id>28045</id>
      <parentid>28044</parentid>
      <timestamp>2012-05-01T17:27:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/string/basic_string/substr]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/swap</title>
    <ns>0</ns>
    <id>7534</id>
    <redirect title="cpp/string/basic string/swap" />
    <revision>
      <id>28047</id>
      <parentid>28046</parentid>
      <timestamp>2012-05-01T17:27:34Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/string/basic_string/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/string/to string</title>
    <ns>0</ns>
    <id>7535</id>
    <redirect title="cpp/string/basic string/to string" />
    <revision>
      <id>46096</id>
      <parentid>28049</parentid>
      <timestamp>2013-02-15T21:50:08Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/string/basic string/to string]]</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[cpp/string/basic string/to string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/</title>
    <ns>0</ns>
    <id>7537</id>
    <redirect title="cpp/thread" />
    <revision>
      <id>28053</id>
      <parentid>28052</parentid>
      <timestamp>2012-05-01T17:27:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/thread]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/get id</title>
    <ns>0</ns>
    <id>7538</id>
    <redirect title="cpp/thread/get id" />
    <revision>
      <id>28055</id>
      <parentid>28054</parentid>
      <timestamp>2012-05-01T17:27:36Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/thread/get_id]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/mutex/</title>
    <ns>0</ns>
    <id>7543</id>
    <redirect title="cpp/thread/mutex" />
    <revision>
      <id>28065</id>
      <parentid>28064</parentid>
      <timestamp>2012-05-01T17:27:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/thread/mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/mutex/start</title>
    <ns>0</ns>
    <id>7542</id>
    <redirect title="cpp/thread/mutex" />
    <revision>
      <id>28063</id>
      <parentid>28062</parentid>
      <timestamp>2012-05-01T17:27:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/thread/mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/recursive mutex/</title>
    <ns>0</ns>
    <id>7545</id>
    <redirect title="cpp/thread/recursive mutex" />
    <revision>
      <id>28069</id>
      <parentid>28068</parentid>
      <timestamp>2012-05-01T17:27:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/thread/recursive_mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/recursive mutex/start</title>
    <ns>0</ns>
    <id>7544</id>
    <redirect title="cpp/thread/recursive mutex" />
    <revision>
      <id>28067</id>
      <parentid>28066</parentid>
      <timestamp>2012-05-01T17:27:41Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/thread/recursive_mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/recursive timed mutex/</title>
    <ns>0</ns>
    <id>7549</id>
    <redirect title="cpp/thread/recursive timed mutex" />
    <revision>
      <id>28077</id>
      <parentid>28076</parentid>
      <timestamp>2012-05-01T17:27:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/thread/recursive_timed_mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/recursive timed mutex/start</title>
    <ns>0</ns>
    <id>7548</id>
    <redirect title="cpp/thread/recursive timed mutex" />
    <revision>
      <id>28075</id>
      <parentid>28074</parentid>
      <timestamp>2012-05-01T17:27:43Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/thread/recursive_timed_mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/sleep for</title>
    <ns>0</ns>
    <id>7539</id>
    <redirect title="cpp/thread/sleep for" />
    <revision>
      <id>28057</id>
      <parentid>28056</parentid>
      <timestamp>2012-05-01T17:27:39Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/thread/sleep_for]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/sleep until</title>
    <ns>0</ns>
    <id>7540</id>
    <redirect title="cpp/thread/sleep until" />
    <revision>
      <id>28059</id>
      <parentid>28058</parentid>
      <timestamp>2012-05-01T17:27:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/thread/sleep_until]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/start</title>
    <ns>0</ns>
    <id>7536</id>
    <redirect title="cpp/thread" />
    <revision>
      <id>28051</id>
      <parentid>28050</parentid>
      <timestamp>2012-05-01T17:27:35Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="24">#redirect [[cpp/thread]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/</title>
    <ns>0</ns>
    <id>7551</id>
    <redirect title="cpp/thread/thread" />
    <revision>
      <id>28081</id>
      <parentid>28080</parentid>
      <timestamp>2012-05-01T17:27:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/thread/thread]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/detach</title>
    <ns>0</ns>
    <id>7552</id>
    <redirect title="cpp/thread/thread/detach" />
    <revision>
      <id>28083</id>
      <parentid>28082</parentid>
      <timestamp>2012-05-01T17:27:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/thread/thread/detach]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/get id</title>
    <ns>0</ns>
    <id>7553</id>
    <redirect title="cpp/thread/thread/get id" />
    <revision>
      <id>28085</id>
      <parentid>28084</parentid>
      <timestamp>2012-05-01T17:27:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/thread/thread/get_id]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/hardware concurrency</title>
    <ns>0</ns>
    <id>7554</id>
    <redirect title="cpp/thread/thread/hardware concurrency" />
    <revision>
      <id>28087</id>
      <parentid>28086</parentid>
      <timestamp>2012-05-01T17:27:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="52">#redirect [[cpp/thread/thread/hardware_concurrency]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/id</title>
    <ns>0</ns>
    <id>7555</id>
    <redirect title="cpp/thread/thread/id" />
    <revision>
      <id>28089</id>
      <parentid>28088</parentid>
      <timestamp>2012-05-01T17:27:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/thread/thread/id]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/join</title>
    <ns>0</ns>
    <id>7556</id>
    <redirect title="cpp/thread/thread/join" />
    <revision>
      <id>28091</id>
      <parentid>28090</parentid>
      <timestamp>2012-05-01T17:27:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/thread/thread/join]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/joinable</title>
    <ns>0</ns>
    <id>7557</id>
    <redirect title="cpp/thread/thread/joinable" />
    <revision>
      <id>28093</id>
      <parentid>28092</parentid>
      <timestamp>2012-05-01T17:27:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/thread/thread/joinable]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/native handle</title>
    <ns>0</ns>
    <id>7558</id>
    <redirect title="cpp/thread/thread/native handle" />
    <revision>
      <id>28095</id>
      <parentid>28094</parentid>
      <timestamp>2012-05-01T17:27:46Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/thread/thread/native_handle]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/start</title>
    <ns>0</ns>
    <id>7550</id>
    <redirect title="cpp/thread/thread" />
    <revision>
      <id>28079</id>
      <parentid>28078</parentid>
      <timestamp>2012-05-01T17:27:44Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="31">#redirect [[cpp/thread/thread]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/thread/swap</title>
    <ns>0</ns>
    <id>7559</id>
    <redirect title="cpp/thread/thread/swap" />
    <revision>
      <id>28097</id>
      <parentid>28096</parentid>
      <timestamp>2012-05-01T17:27:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/thread/thread/swap]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/timed mutex/</title>
    <ns>0</ns>
    <id>7547</id>
    <redirect title="cpp/thread/timed mutex" />
    <revision>
      <id>28073</id>
      <parentid>28072</parentid>
      <timestamp>2012-05-01T17:27:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/thread/timed_mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/timed mutex/start</title>
    <ns>0</ns>
    <id>7546</id>
    <redirect title="cpp/thread/timed mutex" />
    <revision>
      <id>28071</id>
      <parentid>28070</parentid>
      <timestamp>2012-05-01T17:27:42Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/thread/timed_mutex]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/thread/yield</title>
    <ns>0</ns>
    <id>7541</id>
    <redirect title="cpp/thread/yield" />
    <revision>
      <id>28061</id>
      <parentid>28060</parentid>
      <timestamp>2012-05-01T17:27:40Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/thread/yield]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/</title>
    <ns>0</ns>
    <id>7622</id>
    <redirect title="cpp/utility" />
    <revision>
      <id>28223</id>
      <parentid>28222</parentid>
      <timestamp>2012-05-01T17:28:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="25">#redirect [[cpp/utility]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/</title>
    <ns>0</ns>
    <id>7570</id>
    <redirect title="cpp/utility/bitset" />
    <revision>
      <id>28119</id>
      <parentid>28118</parentid>
      <timestamp>2012-05-01T17:27:50Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/utility/bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/any</title>
    <ns>0</ns>
    <id>7560</id>
    <redirect title="cpp/utility/bitset/all any none" />
    <revision>
      <id>46098</id>
      <parentid>28099</parentid>
      <timestamp>2013-02-15T21:50:14Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/bitset/all any none]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/bitset/all any none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/bitset</title>
    <ns>0</ns>
    <id>7561</id>
    <redirect title="cpp/utility/bitset/bitset" />
    <revision>
      <id>28101</id>
      <parentid>28100</parentid>
      <timestamp>2012-05-01T17:27:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/utility/bitset/bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/count</title>
    <ns>0</ns>
    <id>7562</id>
    <redirect title="cpp/utility/bitset/count" />
    <revision>
      <id>28103</id>
      <parentid>28102</parentid>
      <timestamp>2012-05-01T17:27:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/utility/bitset/count]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/flip</title>
    <ns>0</ns>
    <id>7563</id>
    <redirect title="cpp/utility/bitset/flip" />
    <revision>
      <id>28105</id>
      <parentid>28104</parentid>
      <timestamp>2012-05-01T17:27:48Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/utility/bitset/flip]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/none</title>
    <ns>0</ns>
    <id>7564</id>
    <redirect title="cpp/utility/bitset/all any none" />
    <revision>
      <id>46100</id>
      <parentid>28107</parentid>
      <timestamp>2013-02-15T21:50:19Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/bitset/all any none]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/bitset/all any none]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/operator comp</title>
    <ns>0</ns>
    <id>7565</id>
    <redirect title="cpp/utility/bitset/operator cmp" />
    <revision>
      <id>29745</id>
      <parentid>28109</parentid>
      <timestamp>2012-05-01T18:08:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/bitset/operator cmp]]</comment>
      <text xml:space="preserve" bytes="45">#redirect [[cpp/utility/bitset/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/reset</title>
    <ns>0</ns>
    <id>7566</id>
    <redirect title="cpp/utility/bitset/reset" />
    <revision>
      <id>28111</id>
      <parentid>28110</parentid>
      <timestamp>2012-05-01T17:27:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/utility/bitset/reset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/set</title>
    <ns>0</ns>
    <id>7567</id>
    <redirect title="cpp/utility/bitset/set" />
    <revision>
      <id>28113</id>
      <parentid>28112</parentid>
      <timestamp>2012-05-01T17:27:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="36">#redirect [[cpp/utility/bitset/set]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/size</title>
    <ns>0</ns>
    <id>7568</id>
    <redirect title="cpp/utility/bitset/size" />
    <revision>
      <id>28115</id>
      <parentid>28114</parentid>
      <timestamp>2012-05-01T17:27:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/utility/bitset/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/start</title>
    <ns>0</ns>
    <id>7569</id>
    <redirect title="cpp/utility/bitset" />
    <revision>
      <id>28117</id>
      <parentid>28116</parentid>
      <timestamp>2012-05-01T17:27:49Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/utility/bitset]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/test</title>
    <ns>0</ns>
    <id>7571</id>
    <redirect title="cpp/utility/bitset/test" />
    <revision>
      <id>28121</id>
      <parentid>28120</parentid>
      <timestamp>2012-05-01T17:27:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="37">#redirect [[cpp/utility/bitset/test]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/to string</title>
    <ns>0</ns>
    <id>7572</id>
    <redirect title="cpp/utility/bitset/to string" />
    <revision>
      <id>28123</id>
      <parentid>28122</parentid>
      <timestamp>2012-05-01T17:27:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/utility/bitset/to_string]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/bitset/to ulong</title>
    <ns>0</ns>
    <id>7573</id>
    <redirect title="cpp/utility/bitset/to ulong" />
    <revision>
      <id>28125</id>
      <parentid>28124</parentid>
      <timestamp>2012-05-01T17:27:51Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/utility/bitset/to_ulong]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/initializer list/</title>
    <ns>0</ns>
    <id>7575</id>
    <redirect title="cpp/utility/initializer list" />
    <revision>
      <id>29743</id>
      <parentid>28129</parentid>
      <timestamp>2012-05-01T18:08:45Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/initializer list]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/utility/initializer_list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/initializer list/start</title>
    <ns>0</ns>
    <id>7574</id>
    <redirect title="cpp/utility/initializer list" />
    <revision>
      <id>29744</id>
      <parentid>28127</parentid>
      <timestamp>2012-05-01T18:08:47Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/utility/initializer list]]</comment>
      <text xml:space="preserve" bytes="42">#redirect [[cpp/utility/initializer_list]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/make pair</title>
    <ns>0</ns>
    <id>7619</id>
    <redirect title="cpp/utility/pair/make pair" />
    <revision>
      <id>46103</id>
      <parentid>28217</parentid>
      <timestamp>2013-02-15T21:50:27Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/pair/make pair]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[cpp/utility/pair/make pair]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/pair</title>
    <ns>0</ns>
    <id>7620</id>
    <redirect title="cpp/utility/pair" />
    <revision>
      <id>28219</id>
      <parentid>28218</parentid>
      <timestamp>2012-05-01T17:28:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="30">#redirect [[cpp/utility/pair]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/</title>
    <ns>0</ns>
    <id>7596</id>
    <redirect title="cpp/utility/program" />
    <revision>
      <id>28171</id>
      <parentid>28170</parentid>
      <timestamp>2012-05-01T17:27:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/utility/program]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/abort</title>
    <ns>0</ns>
    <id>7576</id>
    <redirect title="cpp/utility/program/abort" />
    <revision>
      <id>28131</id>
      <parentid>28130</parentid>
      <timestamp>2012-05-01T17:27:52Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/utility/program/abort]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/at quick exit</title>
    <ns>0</ns>
    <id>7577</id>
    <redirect title="cpp/utility/program/at quick exit" />
    <revision>
      <id>28133</id>
      <parentid>28132</parentid>
      <timestamp>2012-05-01T17:27:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/utility/program/at_quick_exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/atexit</title>
    <ns>0</ns>
    <id>7578</id>
    <redirect title="cpp/utility/program/atexit" />
    <revision>
      <id>28135</id>
      <parentid>28134</parentid>
      <timestamp>2012-05-01T17:27:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/atexit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/exit</title>
    <ns>0</ns>
    <id>7579</id>
    <redirect title="cpp/utility/program/exit" />
    <revision>
      <id>28137</id>
      <parentid>28136</parentid>
      <timestamp>2012-05-01T17:27:53Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/utility/program/exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/exit failure</title>
    <ns>0</ns>
    <id>7580</id>
    <redirect title="cpp/utility/program/EXIT status" />
    <revision>
      <id>46104</id>
      <parentid>28139</parentid>
      <timestamp>2013-02-15T21:50:30Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/EXIT status]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/program/EXIT status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/exit success</title>
    <ns>0</ns>
    <id>7581</id>
    <redirect title="cpp/utility/program/EXIT status" />
    <revision>
      <id>46105</id>
      <parentid>28141</parentid>
      <timestamp>2013-02-15T21:50:34Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/EXIT status]]</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[cpp/utility/program/EXIT status]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/getenv</title>
    <ns>0</ns>
    <id>7582</id>
    <redirect title="cpp/utility/program/getenv" />
    <revision>
      <id>28143</id>
      <parentid>28142</parentid>
      <timestamp>2012-05-01T17:27:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/getenv]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/longjmp</title>
    <ns>0</ns>
    <id>7583</id>
    <redirect title="cpp/utility/program/longjmp" />
    <revision>
      <id>28145</id>
      <parentid>28144</parentid>
      <timestamp>2012-05-01T17:27:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/utility/program/longjmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/m exit</title>
    <ns>0</ns>
    <id>7584</id>
    <redirect title="cpp/utility/program/ Exit" />
    <revision>
      <id>28147</id>
      <parentid>28146</parentid>
      <timestamp>2012-05-01T17:27:55Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/utility/program/_Exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/quick exit</title>
    <ns>0</ns>
    <id>7585</id>
    <redirect title="cpp/utility/program/quick exit" />
    <revision>
      <id>28149</id>
      <parentid>28148</parentid>
      <timestamp>2012-05-01T17:27:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="44">#redirect [[cpp/utility/program/quick_exit]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/raise</title>
    <ns>0</ns>
    <id>7586</id>
    <redirect title="cpp/utility/program/raise" />
    <revision>
      <id>28151</id>
      <parentid>28150</parentid>
      <timestamp>2012-05-01T17:27:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/utility/program/raise]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/setjmp</title>
    <ns>0</ns>
    <id>7587</id>
    <redirect title="cpp/utility/program/setjmp" />
    <revision>
      <id>28153</id>
      <parentid>28152</parentid>
      <timestamp>2012-05-01T17:27:56Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/setjmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/sigabrt</title>
    <ns>0</ns>
    <id>7588</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>46106</id>
      <parentid>28155</parentid>
      <timestamp>2013-02-15T21:50:37Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/SIG types]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/program/SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/sigfpe</title>
    <ns>0</ns>
    <id>7589</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>46107</id>
      <parentid>28157</parentid>
      <timestamp>2013-02-15T21:50:40Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/SIG types]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/program/SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/sigill</title>
    <ns>0</ns>
    <id>7590</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>46108</id>
      <parentid>28159</parentid>
      <timestamp>2013-02-15T21:50:42Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/SIG types]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/program/SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/sigint</title>
    <ns>0</ns>
    <id>7591</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>46109</id>
      <parentid>28161</parentid>
      <timestamp>2013-02-15T21:50:45Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/SIG types]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/program/SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/signal</title>
    <ns>0</ns>
    <id>7592</id>
    <redirect title="cpp/utility/program/signal" />
    <revision>
      <id>28163</id>
      <parentid>28162</parentid>
      <timestamp>2012-05-01T17:27:58Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/signal]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/sigsegv</title>
    <ns>0</ns>
    <id>7593</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>46110</id>
      <parentid>28165</parentid>
      <timestamp>2013-02-15T21:50:48Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/SIG types]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/program/SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/sigterm</title>
    <ns>0</ns>
    <id>7594</id>
    <redirect title="cpp/utility/program/SIG types" />
    <revision>
      <id>46111</id>
      <parentid>28167</parentid>
      <timestamp>2013-02-15T21:50:51Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/utility/program/SIG types]]</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[cpp/utility/program/SIG types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/start</title>
    <ns>0</ns>
    <id>7595</id>
    <redirect title="cpp/utility/program" />
    <revision>
      <id>28169</id>
      <parentid>28168</parentid>
      <timestamp>2012-05-01T17:27:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/utility/program]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/program/system</title>
    <ns>0</ns>
    <id>7597</id>
    <redirect title="cpp/utility/program/system" />
    <revision>
      <id>28173</id>
      <parentid>28172</parentid>
      <timestamp>2012-05-01T17:27:59Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/utility/program/system]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/</title>
    <ns>0</ns>
    <id>7611</id>
    <redirect title="cpp/types" />
    <revision>
      <id>28201</id>
      <parentid>28200</parentid>
      <timestamp>2012-05-01T17:28:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/bad cast/</title>
    <ns>0</ns>
    <id>7599</id>
    <redirect title="cpp/types/bad cast" />
    <revision>
      <id>28177</id>
      <parentid>28176</parentid>
      <timestamp>2012-05-01T17:28:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/types/bad_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/bad cast/start</title>
    <ns>0</ns>
    <id>7598</id>
    <redirect title="cpp/types/bad cast" />
    <revision>
      <id>28175</id>
      <parentid>28174</parentid>
      <timestamp>2012-05-01T17:28:00Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="32">#redirect [[cpp/types/bad_cast]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/bad typeid/</title>
    <ns>0</ns>
    <id>7601</id>
    <redirect title="cpp/types/bad typeid" />
    <revision>
      <id>28181</id>
      <parentid>28180</parentid>
      <timestamp>2012-05-01T17:28:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/types/bad_typeid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/bad typeid/start</title>
    <ns>0</ns>
    <id>7600</id>
    <redirect title="cpp/types/bad typeid" />
    <revision>
      <id>28179</id>
      <parentid>28178</parentid>
      <timestamp>2012-05-01T17:28:01Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/types/bad_typeid]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/start</title>
    <ns>0</ns>
    <id>7610</id>
    <redirect title="cpp/types" />
    <revision>
      <id>28199</id>
      <parentid>28198</parentid>
      <timestamp>2012-05-01T17:28:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="23">#redirect [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type index/</title>
    <ns>0</ns>
    <id>7603</id>
    <redirect title="cpp/types/type index" />
    <revision>
      <id>28185</id>
      <parentid>28184</parentid>
      <timestamp>2012-05-01T17:28:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/types/type_index]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type index/start</title>
    <ns>0</ns>
    <id>7602</id>
    <redirect title="cpp/types/type index" />
    <revision>
      <id>28183</id>
      <parentid>28182</parentid>
      <timestamp>2012-05-01T17:28:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/types/type_index]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type info/</title>
    <ns>0</ns>
    <id>7609</id>
    <redirect title="cpp/types/type info" />
    <revision>
      <id>28197</id>
      <parentid>28196</parentid>
      <timestamp>2012-05-01T17:28:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/types/type_info]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type info/before</title>
    <ns>0</ns>
    <id>7604</id>
    <redirect title="cpp/types/type info/before" />
    <revision>
      <id>28187</id>
      <parentid>28186</parentid>
      <timestamp>2012-05-01T17:28:02Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/types/type_info/before]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type info/hash code</title>
    <ns>0</ns>
    <id>7605</id>
    <redirect title="cpp/types/type info/hash code" />
    <revision>
      <id>28189</id>
      <parentid>28188</parentid>
      <timestamp>2012-05-01T17:28:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/types/type_info/hash_code]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type info/name</title>
    <ns>0</ns>
    <id>7606</id>
    <redirect title="cpp/types/type info/name" />
    <revision>
      <id>28191</id>
      <parentid>28190</parentid>
      <timestamp>2012-05-01T17:28:03Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/types/type_info/name]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type info/operator comp</title>
    <ns>0</ns>
    <id>7607</id>
    <redirect title="cpp/types/type info/operator cmp" />
    <revision>
      <id>36250</id>
      <parentid>28193</parentid>
      <timestamp>2012-06-17T12:55:04Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Text replace - &quot;/operator_comp&quot; to &quot;/operator_cmp&quot;</comment>
      <text xml:space="preserve" bytes="46">#redirect [[cpp/types/type_info/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/rtti/type info/start</title>
    <ns>0</ns>
    <id>7608</id>
    <redirect title="cpp/types/type info" />
    <revision>
      <id>28195</id>
      <parentid>28194</parentid>
      <timestamp>2012-05-01T17:28:04Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="33">#redirect [[cpp/types/type_info]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/start</title>
    <ns>0</ns>
    <id>7621</id>
    <redirect title="cpp/utility" />
    <revision>
      <id>28221</id>
      <parentid>28220</parentid>
      <timestamp>2012-05-01T17:28:08Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="25">#redirect [[cpp/utility]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/types/</title>
    <ns>0</ns>
    <id>7618</id>
    <redirect title="cpp/types" />
    <revision>
      <id>46117</id>
      <parentid>28215</parentid>
      <timestamp>2013-02-15T21:51:12Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/types/climits</title>
    <ns>0</ns>
    <id>7614</id>
    <redirect title="cpp/types/climits" />
    <revision>
      <id>46118</id>
      <parentid>28207</parentid>
      <timestamp>2013-02-15T21:51:15Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types/climits]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/types/climits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/types/integer</title>
    <ns>0</ns>
    <id>7615</id>
    <redirect title="cpp/types/integer" />
    <revision>
      <id>46119</id>
      <parentid>28209</parentid>
      <timestamp>2013-02-15T21:51:18Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types/integer]]</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[cpp/types/integer]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/types/limits/</title>
    <ns>0</ns>
    <id>7613</id>
    <redirect title="cpp/types" />
    <revision>
      <id>46115</id>
      <parentid>28205</parentid>
      <timestamp>2013-02-15T21:51:03Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/types/limits/start</title>
    <ns>0</ns>
    <id>7612</id>
    <redirect title="cpp/types" />
    <revision>
      <id>46114</id>
      <parentid>28203</parentid>
      <timestamp>2013-02-15T21:51:00Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/types/numeric limits</title>
    <ns>0</ns>
    <id>7616</id>
    <redirect title="cpp/types/numeric limits" />
    <revision>
      <id>46121</id>
      <parentid>28211</parentid>
      <timestamp>2013-02-15T21:51:24Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types/numeric limits]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[cpp/types/numeric limits]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/utility/types/start</title>
    <ns>0</ns>
    <id>7617</id>
    <redirect title="cpp/types" />
    <revision>
      <id>46116</id>
      <parentid>28213</parentid>
      <timestamp>2013-02-15T21:51:05Z</timestamp>
      <contributor>
        <username>P12bot</username>
        <id>89</id>
      </contributor>
      <minor/>
      <comment>Robot: Fixing double redirect to [[cpp/types]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[cpp/types]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/</title>
    <ns>0</ns>
    <id>7631</id>
    <redirect title="cpp/numeric/valarray" />
    <revision>
      <id>28241</id>
      <parentid>28240</parentid>
      <timestamp>2012-05-01T17:28:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/valarray]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/apply</title>
    <ns>0</ns>
    <id>7623</id>
    <redirect title="cpp/numeric/valarray/apply" />
    <revision>
      <id>28225</id>
      <parentid>28224</parentid>
      <timestamp>2012-05-01T17:28:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/numeric/valarray/apply]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/cshift</title>
    <ns>0</ns>
    <id>7624</id>
    <redirect title="cpp/numeric/valarray/cshift" />
    <revision>
      <id>28227</id>
      <parentid>28226</parentid>
      <timestamp>2012-05-01T17:28:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/numeric/valarray/cshift]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/max</title>
    <ns>0</ns>
    <id>7625</id>
    <redirect title="cpp/numeric/valarray/max" />
    <revision>
      <id>28229</id>
      <parentid>28228</parentid>
      <timestamp>2012-05-01T17:28:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/valarray/max]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/min</title>
    <ns>0</ns>
    <id>7626</id>
    <redirect title="cpp/numeric/valarray/min" />
    <revision>
      <id>28231</id>
      <parentid>28230</parentid>
      <timestamp>2012-05-01T17:28:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/valarray/min]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/resize</title>
    <ns>0</ns>
    <id>7627</id>
    <redirect title="cpp/numeric/valarray/resize" />
    <revision>
      <id>28233</id>
      <parentid>28232</parentid>
      <timestamp>2012-05-01T17:28:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="41">#redirect [[cpp/numeric/valarray/resize]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/shift</title>
    <ns>0</ns>
    <id>7628</id>
    <redirect title="cpp/numeric/valarray/shift" />
    <revision>
      <id>28235</id>
      <parentid>28234</parentid>
      <timestamp>2012-05-01T17:28:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="40">#redirect [[cpp/numeric/valarray/shift]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/size</title>
    <ns>0</ns>
    <id>7629</id>
    <redirect title="cpp/numeric/valarray/size" />
    <revision>
      <id>28237</id>
      <parentid>28236</parentid>
      <timestamp>2012-05-01T17:28:10Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="39">#redirect [[cpp/numeric/valarray/size]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/start</title>
    <ns>0</ns>
    <id>7630</id>
    <redirect title="cpp/numeric/valarray" />
    <revision>
      <id>28239</id>
      <parentid>28238</parentid>
      <timestamp>2012-05-01T17:28:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="34">#redirect [[cpp/numeric/valarray]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/sum</title>
    <ns>0</ns>
    <id>7632</id>
    <redirect title="cpp/numeric/valarray/sum" />
    <revision>
      <id>28243</id>
      <parentid>28242</parentid>
      <timestamp>2012-05-01T17:28:11Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="38">#redirect [[cpp/numeric/valarray/sum]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/valarray constructors</title>
    <ns>0</ns>
    <id>7633</id>
    <redirect title="cpp/numeric/valarray/valarray" />
    <revision>
      <id>28245</id>
      <parentid>28244</parentid>
      <timestamp>2012-05-01T17:28:16Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>1 revision: Add redirects from dokuwiki</comment>
      <text xml:space="preserve" bytes="43">#redirect [[cpp/numeric/valarray/valarray]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>old/wiki/valarray/valarray operators</title>
    <ns>0</ns>
    <id>7634</id>
    <redirect title="cpp/numeric/valarray/operator cmp" />
    <revision>
      <id>29757</id>
      <parentid>28247</parentid>
      <timestamp>2012-05-01T18:10:09Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <comment>Redirected page to [[cpp/numeric/valarray/operator cmp]]</comment>
      <text xml:space="preserve" bytes="47">#redirect [[cpp/numeric/valarray/operator_cmp]]</text>
      <sha1/>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>playground</title>
    <ns>0</ns>
    <id>1789</id>
    <revision>
      <id>67980</id>
      <parentid>67979</parentid>
      <timestamp>2014-03-10T20:37:54Z</timestamp>
      <contributor>
        <username>P12</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="552">10

{{dcl begin}}
{{dcl | num=2 | 
int foo();
}}
&lt;/tbody&gt;
&lt;tbody class=&quot;t-dcl-rev t-dcl-rev-num&quot;&gt;
{{dcl sep}}
&lt;tr class=&quot;t-ddcl-list-item&quot;&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td rowspan=&quot;42&quot;&gt;num&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
{{dcl | until=c++11 | num=2 | 
int foo();
}}
{{dcl | since=c++11 | until=c++14 | num=2 | 
int foo();
}}
{{dcl | since=c++14 | num=2 | 
int foo();
}}
&lt;/tbody&gt;
&lt;tbody&gt;
{{dcl | since=c++11 | num=2 | 
int foo();
}}
{{dcl end}}

test
test
test

&lt;span style=&quot;font-family: Arial !important; color: red;&quot;&gt;this should be good&lt;/span&gt;

[[de:playground]]
[[fr:playground]]</text>
      <sha1>mmumwdjr7nvikexa6im83frj5s3mtnj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
</mediawiki>
